{"id":50681449,"url":"https://github.com/andrelopes-code/copyd","last_synced_at":"2026-06-08T19:30:48.436Z","repository":{"id":359664034,"uuid":"1245078966","full_name":"andrelopes-code/copyd","owner":"andrelopes-code","description":"Wayland clipboard manager with a spotlight-style launcher","archived":false,"fork":false,"pushed_at":"2026-05-22T22:04:40.000Z","size":2403,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-22T22:54:28.330Z","etag":null,"topics":["clipboard","clipboard-manager","go","gtk4","linux","solidjs","wails","wayland"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrelopes-code.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T22:21:38.000Z","updated_at":"2026-05-22T20:20:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/andrelopes-code/copyd","commit_stats":null,"previous_names":["andrelopes-code/copyd"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/andrelopes-code/copyd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrelopes-code%2Fcopyd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrelopes-code%2Fcopyd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrelopes-code%2Fcopyd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrelopes-code%2Fcopyd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrelopes-code","download_url":"https://codeload.github.com/andrelopes-code/copyd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrelopes-code%2Fcopyd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34078019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clipboard","clipboard-manager","go","gtk4","linux","solidjs","wails","wayland"],"created_at":"2026-06-08T19:30:47.379Z","updated_at":"2026-06-08T19:30:48.430Z","avatar_url":"https://github.com/andrelopes-code.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# copyd\n\n\u003e Wayland clipboard manager with a spotlight-style launcher.\n\n[![release](https://img.shields.io/github/v/release/andrelopes-code/copyd?sort=semver)](https://github.com/andrelopes-code/copyd/releases)\n[![ci](https://github.com/andrelopes-code/copyd/actions/workflows/ci.yml/badge.svg)](https://github.com/andrelopes-code/copyd/actions/workflows/ci.yml)\n[![license](https://img.shields.io/github/license/andrelopes-code/copyd)](./LICENSE)\n\nOne 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.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screenshot.png\" alt=\"copyd window floating over a Linux desktop, showing clipboard history with a mix of images, URLs, JSON and multiline text\" width=\"720\"\u003e\n\u003c/p\u003e\n\n\u003e 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.\n\n## Install\n\nPick the artifact that matches your distro from the [latest release](https://github.com/andrelopes-code/copyd/releases/latest).\n\n### Fedora / RHEL / Rocky / Alma\n\n```bash\nsudo dnf install ./copyd-0.1.0-1.x86_64.rpm\n```\n\n### Debian / Ubuntu (24.04+ / Debian 13+)\n\n```bash\nsudo apt install ./copyd_0.1.0_amd64.deb\n```\n\n### Any distro (AppImage)\n\n```bash\nchmod +x copyd-*.AppImage\n./copyd-*.AppImage\n```\n\n### tar.gz (manual install)\n\n```bash\ntar -xzf copyd-0.1.0-linux-amd64.tar.gz\nsudo install -m 0755 copyd /usr/local/bin/copyd\n```\n\nVerify any install:\n\n```bash\ncopyd --version\n```\n\n### Runtime dependencies\n\nGTK4 + 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`.\n\n\u003e The clipboard backend talks to GTK4's `GdkClipboard` in-process via cgo — same connection the window uses. Capture is reactive (driven by the GTK `changed` signal, 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-backed `golang.design/x/clipboard` is the fallback.\n\n## Usage\n\n`copyd` is **single-instance**. The clipboard watcher runs inside the same process as the UI.\n\nTwo ways the process gets started:\n\n1. **At login** — `/etc/xdg/autostart/copyd.desktop` runs `copyd --hidden`. The window is created hidden; the clipboard watcher starts immediately.\n2. **On demand** — running `copyd` again (from a hotkey, terminal, or launcher) toggles the window in the already-running process.\n\nInside the window:\n\n| Key | Action |\n|-----|--------|\n| `↑` / `↓` | Move selection |\n| `Enter` | Copy selected item and hide |\n| `Space` | Copy selected item (only when search is empty) |\n| Type | Filter |\n| `Esc` | Clear search; if already empty, hide |\n| Click outside | Hide |\n\nAfter copy, the window auto-hides ~620 ms later (enough to see the confirmation animation).\n\n## Global hotkey\n\nWayland 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.\n\n### GNOME\n\n`Settings → Keyboard → Keyboard Shortcuts → Custom Shortcuts → +`\n\n| Field | Value |\n|-------|-------|\n| Name | copyd |\n| Command | `copyd` |\n| Shortcut | `Super+V` |\n\nOr via CLI:\n\n```bash\ngsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings \\\n  \"['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/']\"\n\ndconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/name \"'copyd'\"\ndconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/command \"'copyd'\"\ndconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/copyd/binding \"'\u003cSuper\u003ev'\"\n```\n\n\u003e GNOME treats Super alone as \"open Activities\" on press-release. `Super+V` works but the overlay may flash if you hold Super. Swap to `\u003cCtrl\u003e\u003cAlt\u003ev` if that bothers you.\n\n### KDE Plasma\n\n`System Settings → Shortcuts → Custom Shortcuts → Edit → New → Global Shortcut → Command/URL`. Trigger: `Meta+V`. Action: `copyd`.\n\n### Sway / Hyprland / niri\n\n```\n# sway\nbindsym $mod+v exec copyd\n\n# hyprland\nbind = SUPER, V, exec, copyd\n```\n\n## Configuration\n\nThere is no settings file yet. Everything is on disk under the XDG data dir:\n\n| Path | Contents |\n|------|----------|\n| `${XDG_DATA_HOME:-~/.local/share}/copyd/items.db` | SQLite history |\n| `${XDG_DATA_HOME:-~/.local/share}/copyd/images/` | PNG payloads for image clips |\n\nDelete the directory to reset everything.\n\n### Disable autostart without uninstalling\n\n```bash\nmkdir -p ~/.config/autostart\ncat \u003e ~/.config/autostart/copyd.desktop \u003c\u003c'EOF'\n[Desktop Entry]\nType=Application\nName=copyd (background)\nExec=copyd --hidden\nHidden=true\nEOF\n```\n\n## Build from source\n\nYou need:\n\n- Go ≥ 1.25, with `CGO_ENABLED=1`\n- Node ≥ 20\n- [Task](https://taskfile.dev) — `go install github.com/go-task/task/v3/cmd/task@latest`\n- [Wails v3 CLI](https://v3.wails.io) — `go install -v github.com/wailsapp/wails/v3/cmd/wails3@latest`\n- GTK4 + WebKitGTK 6.0 headers (Fedora: `gtk4-devel webkitgtk6.0-devel`; Ubuntu 24.04+: `libgtk-4-dev libwebkitgtk-6.0-dev`)\n\n```bash\ngit clone https://github.com/andrelopes-code/copyd.git\ncd copyd\ntask build            # produces ./bin/copyd\ntask linux:package    # produces RPM + DEB + AppImage in ./bin\n```\n\nFor the dev loop with auto-reload, see [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## Architecture\n\nSee [ARCHITECTURE.md](./ARCHITECTURE.md).\n\n## License\n\n[MIT](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrelopes-code%2Fcopyd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrelopes-code%2Fcopyd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrelopes-code%2Fcopyd/lists"}