A modern Wayland clipboard manager built with Rust, GTK4, Libadwaita, and Wayland Layer Shell that makes clipboard handling more reliable. Features a Windows 11–style clipboard history interface with native GNOME design, which is always positioned at the current mouse pointer location.
zwlr_data_control_manager_v1 to automatically monitor and set clipboard content.zwlr_layer_shell_v1 to retrieve pointer coordinates and show the overlay.Supported compositors (must support both protocols):
Although the application uses GNOME styling and follows the GNOME HIG, GNOME Shell is unfortunately NOT SUPPORTED. It does not implement the required Wayland protocols (zwlr_layer_shell_v1 and zwlr_data_control_manager_v1) needed for Cursor Clip's key features. Future support is not impossible but will require major code and workflow changes and a separate GNOME Extension.
You can install Cursor Clip from the AUR using an AUR helper like yay:
yay -S cursor-clip-git
sudo pacman -S gtk4 libadwaita gtk4-layer-shell
sudo apt update
sudo apt install build-essential pkg-config libgtk-4-dev libadwaita-1-dev libgtk4-layer-shell-dev
sudo dnf install gtk4-devel libadwaita-devel gtk4-layer-shell
# Clone the repository
git clone https://github.com/Sirulex/cursor-clip
cd cursor-clip
# Build in release mode
cargo build --release
Build a containerized version that includes all dependencies:
# Build the Docker image and install the binary
docker build -t cursor-clip .
docker create --name cursor-clip-temp cursor-clip
sudo docker cp cursor-clip-temp:/output/cursor-clip /usr/local/bin/
sudo docker cp cursor-clip-temp:/output/libgtk4-layer-shell.so* /usr/local/lib/
docker rm cursor-clip-temp
# Update library cache and run
sudo ldconfig
cursor-clip --daemon
# Build and install using Nix Flakes (default package)
nix build .
# or: nix build .#default
sudo cp result/bin/cursor-clip /usr/local/bin/
# Optional: enter the development shell
nix develop
cursor-clip --daemoncursor-clip without any arguments (ideally bind it to a hotkey, e.g., Super+V)/ on your keyboard to focus the search field and filter clipboard items live by preview text or content typeEnter to paste the currently selected filtered result; press Esc to leave the search field and continue navigating the filtered list; press Up/Down to move into the filtered results; press Ctrl+U to delete everything before the cursor in the search fieldArrow keys or J/K to navigate, Enter to select, Delete to remove, P to pin, Esc to close the overlay when the search field is not focused~/.config/cursor-clip/config.toml)If persistent history is enabled, clipboard history is stored in an encrypted local database. The database key is stored in your operating system keyring and reused on restart. This ensures that your clipboard history remains secure and private, even if someone gains access to your filesystem (e.g., sidechannel attacks). The encryption and key management are handled automatically by Cursor Clip, so you can enable persistent history with just a simple toggle.
On KDE Plasma, instant paste is currently not available because the compositor does not provide virtual-keyboard-unstable-v1 protocol support. See compositor support details at the bottom of: https://wayland.app/protocols/virtual-keyboard-unstable-v1
┌─────────────────────────────────────────────────┐
│ Cursor Clip │
├─────────────────────────────────────────────────┤
│ GTK4 + Libadwaita UI Layer │
│ ├── Modern styling with CSS │
│ ├── Responsive layouts │
│ └── Accessibility features │
├─────────────────────────────────────────────────┤
│ Wayland Layer Shell Integration │
│ ├── zwlr_layer_shell_v1 protocol │
│ ├── Positioning and anchoring │
│ └── Overlay layer management │
├─────────────────────────────────────────────────┤
│ Clipboard Management │
│ ├── Data Control Manager for privileged access │
│ ├── IPC communication via UNIX domain sockets │
│ ├── IndexMap for clipboard history storage │
│ └── Stoolap for persistent history storage │
└─────────────────────────────────────────────────┘
Built with ❤️ using Rust, GTK4, Libadwaita, and Wayland Layer Shell
If you find this project useful and would like to support its development, consider sponsoring me on GitHub or Ko-fi. Your support helps me dedicate more time to improving and maintaining Cursor Clip. - GitHub Sponsors: https://github.com/sponsors/Sirulex - Ko-fi: https://ko-fi.com/sirulex
This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE for the full text.
$ claude mcp add cursor-clip \
-- python -m otcore.mcp_server <graph>