Wayland clipboard manager with a spotlight-style launcher.
One process. The clipboard watcher and the launcher window live in the same binary — no daemon to babysit. Launches hidden at login, pops up on a global hotkey, hides again after you pick something.
Linux only. Built and tested on Fedora 44 / GNOME 47 Wayland. macOS and Windows builds compile but autostart and packaging are not supported in this release.
Pick the artifact that matches your distro from the latest release.
sudo dnf install ./copyd-0.1.0-1.x86_64.rpmsudo apt install ./copyd_0.1.0_amd64.debchmod +x copyd-*.AppImage
./copyd-*.AppImagetar -xzf copyd-0.1.0-linux-amd64.tar.gz
sudo install -m 0755 copyd /usr/local/bin/copydVerify any install:
copyd --versionGTK4 + WebKitGTK 6.0 for the window and the clipboard. The RPM/DEB pull these in automatically. For AppImage / tar.gz on Fedora: sudo dnf install gtk4 webkitgtk6.0. On Ubuntu 24.04+: sudo apt install libgtk-4-1 libwebkitgtk-6.0-4.
The clipboard backend talks to GTK4's
GdkClipboardin-process via cgo — same connection the window uses. Capture is reactive (driven by the GTKchangedsignal, not polling), and no extra Wayland clients are ever created, so the compositor sees a single stable copyd entry and the dock stays quiet. On an X11 session the libxcb-backedgolang.design/x/clipboardis the fallback.
copyd is single-instance. The clipboard watcher runs inside the same process as the UI.
Two ways the process gets started:
- At login —
/etc/xdg/autostart/copyd.desktoprunscopyd --hidden. The window is created hidden; the clipboard watcher starts immediately. - On demand — running
copydagain (from a hotkey, terminal, or launcher) toggles the window in the already-running process.
Inside the window:
| Key | Action |
|---|---|
↑ / ↓ |
Move selection |
Enter |
Copy selected item and hide |
Space |
Copy selected item (only when search is empty) |
| Type | Filter |
Esc |
Clear search; if already empty, hide |
| Click outside | Hide |
After copy, the window auto-hides ~620 ms later (enough to see the confirmation animation).
Wayland doesn't give clients global hotkeys — the compositor owns them. You bind a key to the copyd command in your desktop environment; Wails' single-instance plumbing toggles the window from inside the running process.
Settings → Keyboard → Keyboard Shortcuts → Custom Shortcuts → +
| Field | Value |
|---|---|
| Name | copyd |
| Command | copyd |
| Shortcut | Super+V |
Or via CLI:
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings \
"['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/']"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/name "'copyd'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/command "'copyd'"
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/binding "'<Super>v'"GNOME treats Super alone as "open Activities" on press-release.
Super+Vworks but the overlay may flash if you hold Super. Swap to<Ctrl><Alt>vif that bothers you.
System Settings → Shortcuts → Custom Shortcuts → Edit → New → Global Shortcut → Command/URL. Trigger: Meta+V. Action: copyd.
# sway
bindsym $mod+v exec copyd
# hyprland
bind = SUPER, V, exec, copyd
There is no settings file yet. Everything is on disk under the XDG data dir:
| Path | Contents |
|---|---|
${XDG_DATA_HOME:-~/.local/share}/copyd/items.db |
SQLite history |
${XDG_DATA_HOME:-~/.local/share}/copyd/images/ |
PNG payloads for image clips |
Delete the directory to reset everything.
mkdir -p ~/.config/autostart
cat > ~/.config/autostart/copyd.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=copyd (background)
Exec=copyd --hidden
Hidden=true
EOFYou need:
- Go ≥ 1.25, with
CGO_ENABLED=1 - Node ≥ 20
- Task —
go install github.com/go-task/task/v3/cmd/task@latest - Wails v3 CLI —
go install -v github.com/wailsapp/wails/v3/cmd/wails3@latest - GTK4 + WebKitGTK 6.0 headers (Fedora:
gtk4-devel webkitgtk6.0-devel; Ubuntu 24.04+:libgtk-4-dev libwebkitgtk-6.0-dev)
git clone https://github.com/andrelopes-code/copyd.git
cd copyd
task build # produces ./bin/copyd
task linux:package # produces RPM + DEB + AppImage in ./binFor the dev loop with auto-reload, see CONTRIBUTING.md.
See ARCHITECTURE.md.
MIT.
