Clipvault

Clipboard history manager for Wayland, inspired by cliphist

License: AGPL v3 version Crates.io Version AUR version

## Features Like `cliphist`: - **Save history:** clipboard entries are stored in a local database - **Recall history:** recall saved entries using any picker you like (e.g. `dmenu`, `rofi`, `wofi`, etc.) - **Simple:** no builtin picker, only pipes - keep it simple (stupid) - **Any data:** support for **text**, **images** and **any other** binary data - **Preservation:** entries are preserved byte-for-byte, including leading/trailing whitespace In addition: - **No silent failures:** invalid arguments cause errors, and are also written to log files - **Relative positions:** support for getting/deleting items by relative position in the saved history - **Entry size limits**: configurable minimum and maximum size for stored entries - **Entry age limit:** configurable max age for entries - automatically remove old clipboard entries - **Ignore entries:** avoid storing certain text data using regex patterns, e.g. `^ [!TIP] > Use `wl-paste --list-types` to find the available MIME types for the currently copied data in the > Wayland clipboard. ### Image data from browsers When copying images from browsers, `wl-paste` will usually pass the data to `clipvault` as `text/html`. This is not ideal for copying images, and you probably want to have the raw image data copied instead. If so, you can either *only* forward image data, or, more realistically, use the commands below to copy the image data directly, and ignore the `text/html`: ```sh # Forward all data, ignoring text that starts with " dmenu ```sh clipvault list | dmenu | clipvault get | wl-copy ```
fzf ```sh clipvault list | fzf --no-sort -d $'\t' --with-nth 2 | clipvault get | wl-copy ```
rofi ```sh clipvault list | rofi -dmenu -display-columns 2 | clipvault get | wl-copy ```
fuzzel ```sh clipvault list | fuzzel --dmenu --with-nth 2 | clipvault get | wl-copy ```
wofi ```sh clipvault list | wofi -S dmenu --pre-display-cmd "echo '%s' | cut -f 2" | clipvault get | wl-copy ``` Note also that by default `wofi` may sort entries alphabetically or by its cache. To display entries in the order they are produced, try adding the following arguments to the `wofi` call above: ```sh -d -k /dev/null ```
tofi ```sh clipvault list | tofi | clipvault get | wl-copy ```
For more advanced setups, checkout some of the scripts in the [extras](./extras/) directory. Contributions are welcome. > [!TIP] > To avoid proceeding with copying if no entry was selected in the picker, try replacing > `clipvault get | wl-copy` from any of the above commands with > `{ read -r output && clipvault get <<< "$output" | wl-copy }` ## Configuration While there is no support for a dedicated configuration file, `clipvault` *does* support loading additional CLI arguments from files, thanks to [argfile](https://docs.rs/argfile/latest/argfile/). To use this functionality, create a file with one argument per line, like [this example](./extras/argfile.txt). Then, provide its path to the CLI using: ```sh clipvault @/path/to/argfile ``` > [!TIP] > Most options can also be set using environment variables - check out the `help` output > for each command to find the specific variable to set for each. ## Contributing All contributions are welcome. If you run into any problems, or have any suggestions/feedback, feel free to open an issue. This project is written in Rust, so for contributing code: 1. Ensure [rustup](https://rustup.rs/) is installed - this project uses the stable toolchain for most things, but nightly for the formatting. 2. Make your changes and ensure they work as expected - `cargo run -- your_args_here`. 3. Lint + format + run tests: ```rust cargo clippy --all -- -W clippy::all && cargo +nightly fmt && cargo test ``` 4. LGTM 👍 I like [just](https://github.com/casey/just), so I keep some utility commands in the [justfile](./justfile). Check that out for additional checks which are run in the CI. ## Similar programs - [cliphist](https://github.com/sentriz/cliphist) - [cliprust](https://github.com/aulimaru/cliprust) ## Acknowledgements - [cliphist](https://github.com/sentriz/cliphist) of course - All the [dependencies](./Cargo.toml) of this project, and all [their dependencies](./Cargo.lock) too ## License This code is licensed under the [AGPLv3](https://www.gnu.org/licenses/agpl-3.0.en.html#license-text). See the [LICENSE](./LICENSE) file for more details.