No description
Find a file
alejandrogs73 cb051ead76 Squashed 'suckless/clipmenu/' content from commit e0ec3bc6
git-subtree-dir: suckless/clipmenu
git-subtree-split: e0ec3bc6608ecc70ed17e8da76e27bf90b1e8e90
2026-09-27 17:52:02 +02:00
.github/workflows Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
init Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
man Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
src Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
tests Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
.clang-format Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
.gitignore Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
LICENSE Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
Makefile Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00
README.md Squashed 'suckless/clipmenu/' content from commit e0ec3bc6 2026-09-27 17:52:02 +02:00

clipmenu is a simple clipboard manager using dmenu, rofi or similar.

Demo

Demo

Usage

clipmenud

Start clipmenud, then run clipmenu to select something to put on the clipboard. For systemd users, a user service called clipmenud is packaged as part of the project.

If you start X via startx/xinit and use the systemd user service, make sure $DISPLAY is set so clipmenud knows which X server to use. Most distributions include scripts in /etc/X11/xinit/xinitrc.d/ for this, so if they are present you can usually just source them in your ~/.xinitrc. Alternatively, before launching the clipmenud service, run:

systemctl --user import-environment DISPLAY

clipmenu

You may wish to bind a shortcut in your window manager to launch clipmenu.

All args passed to clipmenu are transparently dispatched to dmenu. That is, if you usually call dmenu with args to set colours and other properties, you can invoke clipmenu in exactly the same way to get the same effect, like so:

clipmenu -i -fn Terminus:size=8 -nb '#002b36' -nf '#839496' -sb '#073642' -sf '#93a1a1'

By default, clipmenu also adds dmenu-compatible defaults such as -p and -l. If that gets in the way for a custom launcher, set launcher_pass_dmenu_args to 0 in clipmenu.conf.

For a full list of configuration options (and their environment variable equivalents), please see man clipmenu.conf.

There is also clipdel to delete clips, clipdelmenu for interactive deletion, and clipctl to enable or disable clipboard monitoring.

Features

The behaviour of clipmenud can be customised through a config file. As some examples of things you can change:

  • Customising the maximum number of clips stored (default 1000)
  • Disabling clip collection temporarily with clipctl disable, reenabling with clipctl enable
  • Deduplicating repeated clips so only the newest remains
  • Not storing clipboard changes from certain applications, like password managers
  • Taking direct ownership of the clipboard
  • ...and much more.

See man clipmenu.conf to view all possible configuration variables and what they do.

Supported launchers

Any dmenu-compliant application will work, but here are CM_LAUNCHER configurations that are known to work:

  • dmenu (the default)
  • fzf
  • rofi

Installation

Several distributions, including Arch and Nix, provide clipmenu as an official package called clipmenu.

Manual installation

If your distribution doesn't provide a package, you can manually install using make install (or better yet, create a package for your distribution!).

How does it work?

clipmenud

  1. clipmenud passively monitors X11 clipboard selections (PRIMARY, CLIPBOARD, and SECONDARY) for changes using XFixes (no polling).
  2. If clipmenud detects changes to the clipboard contents, it writes them out to storage and indexes using a hash as the filename.

clipmenu

  1. clipmenu reads the index to find all available clips.
  2. dmenu (or another configured launcher) is executed to allow the user to select a clip.
  3. After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.