📋 Windows 11 Clipboard History For Linux
A beautiful, Windows 11-style Clipboard History Manager for Linux
Built with 🦀 Rust + ⚡ Tauri v2 + ⚛️ React + 🎨 Tailwind CSS
✨ Features
- 🎨 Windows 11 Design - Pixel-perfect recreation of the Win+V clipboard UI with Acrylic/Mica glassmorphism effects
- 🌙 Dark/Light Mode - Automatically detects system theme preference
- ⌨️ Global Hotkey - Press
Super+VorCtrl+Alt+Vto open from anywhere - 📌 Pin Items - Keep important clipboard entries at the top
- 🖼️ Image Support - Copy and paste images with preview thumbnails
- 🚀 Blazing Fast - Written in Rust for maximum performance
- 🔒 Privacy First - All data stays local on your machine
- 🖱️ Smart Positioning - Window appears at your cursor position
- 💨 System Tray - Runs silently in the background
- 🐧 Wayland & X11 - Works on both display servers
📦 Installation
Quick Start (Recommended)
The easiest way to get started:
# Clone the repository
git clone https://github.com/gustavosett/Windows-11-Clipboard-History-For-Linux.git
cd win11-clipboard-history
# Install system dependencies (auto-detects your distro)
make deps
# Install Rust and Node.js if needed
make rust
make node
source ~/.cargo/env # Reload shell environment
# Build and install
make build
sudo make install
Distribution-Specific Dependencies
🟠 Ubuntu / Debian / Linux Mint / Pop!_OS
sudo apt update
sudo apt install -y \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libxdo-dev \
libgtk-3-dev \
libglib2.0-dev \
pkg-config
🔵 Fedora
sudo dnf install -y \
webkit2gtk4.1-devel \
openssl-devel \
curl \
wget \
file \
libappindicator-gtk3-devel \
librsvg2-devel \
libxdo-devel \
gtk3-devel \
glib2-devel \
pkg-config \
@development-tools
🟣 Arch Linux / Manjaro / EndeavourOS
sudo pacman -Syu --needed \
webkit2gtk-4.1 \
base-devel \
curl \
wget \
file \
openssl \
libappindicator-gtk3 \
librsvg \
xdotool \
gtk3 \
glib2 \
pkgconf
Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
Install Node.js (v18+)
# Using nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.nvm/nvm.sh
nvm install 20
nvm use 20
Build from Source
# Clone the repository
git clone https://github.com/gustavosett/Windows-11-Clipboard-History-For-Linux.git
cd win11-clipboard-history
# Install npm dependencies
npm install
# Build the application
npm run tauri:build
# The built packages will be in:
# - Binary: src-tauri/target/release/win11-clipboard-history
# - DEB package: src-tauri/target/release/bundle/deb/
# - RPM package: src-tauri/target/release/bundle/rpm/
# - AppImage: src-tauri/target/release/bundle/appimage/
🛠️ Development
Quick Start
# Install dependencies
npm install
# Run in development mode (hot reload enabled)
make dev
# OR
./scripts/run-dev.sh
Note for VS Code Snap users: If you're using VS Code installed via Snap, use
make devor./scripts/run-dev.shinstead ofnpm run tauri:devdirectly. This script cleans the environment to avoid library conflicts.
Makefile Commands
| Command | Description |
|---|---|
make help |
Show all available commands |
make deps |
Install system dependencies (auto-detect distro) |
make deps-ubuntu |
Install dependencies for Ubuntu/Debian |
make deps-fedora |
Install dependencies for Fedora |
make deps-arch |
Install dependencies for Arch Linux |
make rust |
Install Rust via rustup |
make node |
Install Node.js via nvm |
make check-deps |
Verify all dependencies are installed |
make dev |
Run in development mode |
make build |
Build production release |
make install |
Install to system (requires sudo) |
make uninstall |
Remove from system (requires sudo) |
make clean |
Remove build artifacts |
make lint |
Run linters |
make format |
Format code |
npm Scripts
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server (frontend only) |
npm run tauri:dev |
Start full Tauri development mode |
npm run tauri:build |
Build production release |
npm run build |
Build frontend only |
npm run lint |
Run ESLint |
npm run format |
Format code with Prettier |
Project Structure
win11-clipboard-history/
├── src/ # React frontend
│ ├── components/ # UI components
│ │ ├── EmptyState.tsx # Empty history state
│ │ ├── Header.tsx # App header with actions
│ │ ├── HistoryItem.tsx # Clipboard item card
│ │ └── TabBar.tsx # Tab navigation
│ ├── hooks/ # React hooks
│ │ ├── useClipboardHistory.ts
│ │ └── useDarkMode.ts
│ ├── types/ # TypeScript types
│ │ └── clipboard.ts
│ ├── App.tsx # Main app component
│ ├── index.css # Global styles + Tailwind
│ └── main.tsx # Entry point
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs # App setup, tray, commands
│ │ ├── lib.rs # Library exports
│ │ ├── clipboard_manager.rs # Clipboard operations
│ │ └── hotkey_manager.rs # Global shortcuts
│ ├── capabilities/ # Tauri permissions
│ ├── icons/ # App icons
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── scripts/
│ └── run-dev.sh # Clean environment dev script
├── Makefile # Build automation
├── tailwind.config.js # Win11 theme config
├── vite.config.ts # Vite configuration
└── package.json # Node dependencies
Global Hotkey Permissions
On Linux with X11, global keyboard capture may require the user to be in the input group:
sudo usermod -aG input $USER
# Log out and back in for changes to take effect
On Wayland, permissions are typically handled automatically by the compositor.
🐧 Platform Support
Display Servers
| Display Server | Status | Notes |
|---|---|---|
| X11 | ✅ Full support | Global hotkeys work via rdev |
| Wayland | ✅ Full support | Uses wl-clipboard for clipboard access |
Tested Distributions
| Distribution | Version | Status |
|---|---|---|
| Ubuntu | 22.04+ | ✅ Tested |
| Debian | 12+ | ✅ Tested |
| Fedora | 38+ | ✅ Tested |
| Arch Linux | Rolling | ✅ Tested |
| Manjaro | Latest | ✅ Tested |
| Linux Mint | 21+ | ✅ Tested |
| Pop!_OS | 22.04+ | ✅ Tested |
🎨 Customization
Changing the Hotkey
Edit src-tauri/src/hotkey_manager.rs to modify the global shortcut:
// Current: Super+V or Ctrl+Alt+V
Key::KeyV => {
if super_pressed || (ctrl_pressed && alt_pressed) {
callback();
}
}
Theme Colors
The Windows 11 color palette is defined in tailwind.config.js:
colors: {
win11: {
'bg-primary': '#202020',
'bg-accent': '#0078d4',
// ... customize as needed
}
}
🔧 Troubleshooting
Application won't start
- Check dependencies: Run
make check-depsto verify all dependencies are installed - Wayland clipboard issues: Ensure
wl-clipboardis installed for Wayland support - VS Code Snap conflict: Use
make devor./scripts/run-dev.shinstead ofnpm run tauri:dev
Global hotkey not working
- X11: Add user to input group:
sudo usermod -aG input $USER - Wayland: Some compositors may require additional permissions
- Try alternative hotkey
Ctrl+Alt+Vinstead ofSuper+V
Window not showing at cursor position
This may occur on some Wayland compositors. The window will fallback to a default position.
🤝 Contributing
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Guidelines
- Follow the existing code style
- Run
make lintandmake formatbefore committing - Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Tauri - For the amazing Rust-based framework
- Windows 11 - For the beautiful design inspiration
- rdev - For global keyboard capture
- arboard - For cross-platform clipboard access
- wl-clipboard-rs - For Wayland clipboard support
If you find this project useful, please consider giving it a ⭐!
Made with ❤️ for the Linux community