{"id":32968476,"url":"https://github.com/savedra1/clipse","last_synced_at":"2026-03-12T17:04:11.544Z","repository":{"id":225344380,"uuid":"754817477","full_name":"savedra1/clipse","owner":"savedra1","description":"Configurable TUI clipboard manager for Unix","archived":false,"fork":false,"pushed_at":"2026-01-23T20:11:27.000Z","size":52923,"stargazers_count":896,"open_issues_count":21,"forks_count":37,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-01-24T09:36:22.486Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/savedra1.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"ko_fi":"savedra1"}},"created_at":"2024-02-08T20:24:29.000Z","updated_at":"2026-01-24T01:41:57.000Z","dependencies_parsed_at":"2024-03-01T15:24:23.470Z","dependency_job_id":"5c71b479-3f29-4ec5-b4d9-798e0daf1b54","html_url":"https://github.com/savedra1/clipse","commit_stats":null,"previous_names":["savedra1/clipse"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/savedra1/clipse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savedra1%2Fclipse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savedra1%2Fclipse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savedra1%2Fclipse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savedra1%2Fclipse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/savedra1","download_url":"https://codeload.github.com/savedra1/clipse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/savedra1%2Fclipse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30434101,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2025-11-13T03:01:38.370Z","updated_at":"2026-03-12T17:04:11.531Z","avatar_url":"https://github.com/savedra1.png","language":"Go","funding_links":["https://ko-fi.com/savedra1"],"categories":["⚙️ Utilities \u0026 Tools","Productivity","Table of Contents","\u003ca name=\"copy-paste\"\u003e\u003c/a\u003eCopy/paste and clipboard"],"sub_categories":[],"readme":"[![Build](https://img.shields.io/github/actions/workflow/status/savedra1/clipse/go-test.yml)](https://github.com/savedra1/clipse/actions)\n[![Last Commit](https://img.shields.io/github/last-commit/savedra1/clipse)](https://github.com/savedra1/clipse)\n[![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/savedra1/clipse.svg?color=green)](https://github.com/savedra1/clipse/issues)\n\u003cbr\u003e\n\n\u003chttps://github.com/savedra1/clipse/assets/99875823/40af797c-2297-49b5-88ec-b8c04e8c829b\u003e\n\n[![nix](https://img.shields.io/static/v1?label=Nix\u0026message=1.1.0\u0026color=blue)](https://search.nixos.org/packages?channel=unstable\u0026show=clipse\u0026from=0\u0026size=50\u0026sort=relevance\u0026type=packages\u0026query=clipse)\n[![AUR](https://img.shields.io/aur/version/clipse.svg)](https://aur.archlinux.org/packages/clipse/)\n\u003cbr\u003e\n---\n\n### Table of contents\n\n- [Features](#features)\n- [Installation \u0026 Set-up](#Installation-\u0026-Set-up)\n- [Configuration](#configuration)\n- [All commands](#all-commands-)\n- [Contributing](#contributing-)\n- [FAQs](#faq)\n---\n\n### Release information\n\nIf moving to a new release of `clipse` please review the [changelog](https://github.com/savedra1/clipse/blob/main/CHANGELOG.md).\n\n# About 📋\n\n`clipse` is a configurable clipboard manager application written in Go with minimal dependency. The application is optimized for a Linux OS using a dedicated window manager, but `clipse` can also be used on any Unix-based system. Simply install the package and bind the open command to get your desired clipboard behavior. See the [Installation \u0026 Set-up](#Installation-\u0026-Set-up) section for examples of this.\n\n## Dependencies\n\n**Wayland**\n\nIf using a Wayland-based display server, you must have [wl-clipboard](https://github.com/bugaevc/wl-clipboard) installed to handle both text and image data. To enable the auto-paste feature, you may also need to allow persistent permission to the `/dev/uinput` device. See [Configuration.Auto-Paste](#Auto-paste).\n\n**X11**\n\nFor X11 builds, the [robotgo](https://github.com/go-vgo/robotgo) library is used to implement the auto-paste feature. Please check [this section](https://github.com/go-vgo/robotgo#for-everything-else) of their docs for the runtime dependencies you may need available.\n\n**Darwin**\n\nThere are no known dependencies for Darwin.\n\n# Features ✨\n\n- Text and image support\n- Highly customizable\n- Image and text previews\n- Item pinning\n- Fuzzy filtering\n- Multi-select\n- Auto-paste\n- Excluded apps/windows\n- Bulk copy/output\n- Realtime UI updates\n- Portable (runs on any wayland/x11/darwin machine)\n- CLI operations\n\n# Installation \u0026 Set-up 🏗️\n\n## Installation\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eNixOS\u003c/b\u003e\u003c/summary\u003e\n\n  Due to how irregularly the stable branch of Nixpkgs is updated, you may find the unstable package is more up to date. The Nix package for `clipse` can be found [here](https://search.nixos.org/packages?channel=25.05\u0026from=0\u0026size=50\u0026sort=relevance\u0026type=packages\u0026query=clipse)\n\n  __Direct install__\n\n  ```nix\n  nix-env -iA nixpkgs.clipse # OS == NixOs\n  nix-env -f channel:nixpkgs -iA clipse # OS != NixOs\n  ```\n\n  __Nix shell__\n\n  ```nix\n  nix shell -p clipse\n  ```\n\n  __System package__\n\n  ```nix\n  environment.systemPackages = [\n      pkgs.clipse\n    ];\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eArch\u003c/b\u003e\u003c/summary\u003e\n\n  Thank you [@raininja](https://github.com/raininja) for creating and maintaining the [AUR package](https://aur.archlinux.org/packages/clipse)!\n\n  __Installing with yay__\n\n  ```shell\n  yay -S clipse\n  ```\n\n  __Installing from pkg source__\n\n  ```shell\n  git clone https://aur.archlinux.org/clipse.git \u0026\u0026 cd clipse \u0026\u0026 makepkg -si\n  ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eFedora/Rhel\u003c/b\u003e\u003c/summary\u003e\n\n  Thank you [@RadioAndrea](https://github.com/RadioAndrea) for creating and maintaining the [COPR package](https://copr.fedorainfracloud.org/coprs/azandure/clipse/)!\n\n  ```shell\n  dnf copr enable azandure/clipse\n  ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eInstalling with Go\u003c/b\u003e\u003c/summary\u003e\n\n  ```shell\n  go install github.com/savedra1/clipse@v1.2.1\n  ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eBuilding from source\u003c/b\u003e\u003c/summary\u003e\n\n  Building `clipse` from source requires different build tags depending on your system's display server. To ensure the correct tags are uses, please use the Makefile to build the executable. E.g. `make wayland`\n\n  ```shell\n  git clone https://github.com/savedra1/clipse\n  cd clipse\n  go mod tidy\n  make wayland # || make x11 || make darwin\n  ```\n\n  Once you have build the binary, you can install this to your executable path, E.g. `install -m 755 clipse /usr/bin || mv clipse /bin/`.\n\n\u003c/details\u003e\n\n\n## Set up\n\nTo get the most out of `clipse`, it's recommended to bind the two primary key commands to your system's config. The first key command is to open the clipboard history TUI:\n\n```shell\nclipse\n```\n\nThe second command doesn't need to be bound to a key combination, but rather to the system boot to run the background listener process on start-up:\n\n```shell\nclipse -listen\n```\n\n### Example window manager configurations\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eHyprland\u003c/b\u003e\u003c/summary\u003e\n\n  Add the following lines to your Hyprland config file:\n\n  ```shell\n\n  exec-once = clipse -listen # run listener on startup\n\n  windowrule = match:class clipse, float true # ensure you have a floating window class set if you want this behavior\n  windowrule = match:class clipse, size 622 652 # set the size of the window as necessary\n\n  bind = SUPER, V, exec,  \u003cterminal name\u003e --class clipse -e 'clipse'\n\n  # Example: bind = SUPER, V, exec, alacritty --class clipse -e 'clipse'\n  ```\n\n  [Hyprland reference](https://wiki.hypr.land/Configuring/Window-Rules/)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003ei3\u003c/b\u003e\u003c/summary\u003e\n\n  Add the following commands to your `~/.config/i3/config` file:\n\n  ```shell\n  exec --no-startup-id clipse -listen                                                           # run listener on startup\n  bindsym $mod+V exec --no-startup-id urxvt -e \"$SHELL\" -c \"i3-msg 'floating enable' \u0026\u0026 clipse\" # Bind floating shell with TUI selection to something nice\n  ```\n\n  [i3 reference](https://wiki.archlinux.org/title/i3)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eSway\u003c/b\u003e\u003c/summary\u003e\n\n  Add the following config to your `~/.config/sway/config` file:\n\n  ```shell\n  exec clipse -listen                                                                        # run the background listener on startup\n\n  for_window [app_id=\"clipse\"] floating enable, move position center, resize set 80ppt 80ppt # style window to look nice\n\n  bindsym $mod+V exec \u003cterminal name\u003e --class clipse -e clipse                               # bind floating shell with clipse TUI\n\n  # Example: bindsym $mod+V exec alacritty --class clipse -e clipse\n  ```\n\n  [Sway reference](https://wiki.archlinux.org/title/Sway#Floating_windows)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003emacOS\u003c/b\u003e\u003c/summary\u003e\n\n  The same concept applies to macOS, where the listen command is bound to the WM config. A separate application, like [skhd](https://github.com/asmvik/skhd) may be required to configure the custom keybind. See the below example using `yabai` WM and `skhd`.\n\n  In the `yabairc` config:\n\n  ```shell\n  # yabairc\n\n  clipse -listen\n  ...\n  yabai -m rule --add title=\"^Clipse$\" manage=off\n\n  ```\n\n  In the `skhdrc` config:\n\n  ```shell\n  # skhdrc\n  alt - v : alacritty -t \"Clipse\" --option window.dimensions.lines=40 --option window.dimensions.columns=70 -e clipse\n  ```\n\n  ---\n\n  Without a WM, you can still achieve similar behavior by creating a listener service manually. E.g:\n\n  Create the file `~/Library/LaunchAgents/clipse.plist` with the following content:\n  ```\n  \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n  \u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\\\u003e\n  \u003cplist version=\"1.0\"\u003e\n  \u003cdict\u003e\n      \u003ckey\u003eLabel\u003c/key\u003e\n      \u003cstring\u003ecom.savedra1.clipse\u003c/string\u003e\n      \u003ckey\u003eProgramArguments\u003c/key\u003e\n      \u003carray\u003e\n          \u003cstring\u003e/path/to/clipse\u003c/string\u003e\n          \u003cstring\u003e--listen-shell\u003c/string\u003e\n      \u003c/array\u003e\n      \u003ckey\u003eRunAtLoad\u003c/key\u003e\n      \u003ctrue/\u003e\n  \u003c/dict\u003e\n  \u003c/plist\u003e\n  ```\n\n  Then in a terminal, activate the agent with: `launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/clipse.plist`. Right away and after your next login, you can check that `clipse` is running by executing `ps -e | grep '[c]lipse'`.\n\n\u003c/details\u003e\n\n\u003cbr\u003e\n\n# Configuration\n\nYour `configuration.json` file will initially be created with the following default values:\n\n```json\n{\n    \"allowDuplicates\": false,\n    \"historyFile\": \"clipboard_history.json\",\n    \"maxHistory\": 100,\n    \"deleteAfter\": 0,\n    \"logFile\": \"clipse.log\",\n    \"pollInterval\": 50,\n    \"maxEntryLength\": 65,\n    \"themeFile\": \"custom_theme.json\",\n    \"tempDir\": \"tmp_files\",\n    \"keyBindings\": {\n        \"choose\": \"enter\",\n        \"clearSelected\": \"S\",\n        \"down\": \"down\",\n        \"end\": \"end\",\n        \"filter\": \"/\",\n        \"forceQuit\": \"Q\",\n        \"home\": \"home\",\n        \"more\": \"?\",\n        \"nextPage\": \"right\",\n        \"prevPage\": \"left\",\n        \"preview\": \"space\",\n        \"quit\": \"esc\",\n        \"remove\": \"backspace\",\n        \"selectDown\": \"shift+down\",\n        \"selectSingle\": \"s\",\n        \"selectUp\": \"shift+up\",\n        \"togglePin\": \"p\",\n        \"togglePinned\": \"tab\",\n        \"up\": \"up\",\n        \"yankFilter\": \"ctrl+s\"\n    },\n    \"imageDisplay\": {\n        \"type\": \"basic\",\n        \"scaleX\": 9,\n        \"scaleY\": 9,\n        \"heightCut\": 2\n    },\n    \"excludedApps\": [\n        \"1Password\",\n        \"Bitwarden\",\n        \"KeePassXC\",\n        \"LastPass\",\n        \"Dashlane\",\n        \"Password Safe\",\n        \"Keychain Access\"\n    ],\n    \"autoPaste\": {\n        \"enabled\": false,\n        \"keybind\": \"ctrl+v\",\n        \"buffer\": 10\n    },\n    \"enableMouse\": true,\n    \"enableDescription\": true\n}\n```\n\n__If any values from this file are removed, they will not be readded when the program runs, but the default values will be used.__\n\n## General Configuration\n\n| Option              | Type   | Description                                                                                  |\n| ------------------- | ------ | -------------------------------------------------------------------------------------------- |\n| `allowDuplicates`   | bool   | Whether identical clipboard entries are allowed to appear more than once in history.         |\n| `historyFile`       | string | File path used to persist clipboard history.                                                 |\n| `maxHistory`        | int    | Maximum number of clipboard entries stored in history.                                       |\n| `deleteAfter`       | int    | Time (in seconds) after which entries are automatically deleted; `0` disables auto-deletion. |\n| `logFile`           | string | File path for application logs.                                                              |\n| `pollInterval`      | int    | Clipboard polling interval in milliseconds (x11/Darwin).                                     |\n| `maxEntryLength`    | int    | Maximum number of characters shown per clipboard entry.                                      |\n| `themeFile`         | string | Path to the custom theme configuration file.                                                 |\n| `tempDir`           | string | Directory used for image files.                                                              |\n| `enableMouse`       | bool   | Enables mouse interaction in the UI.                                                         |\n| `enableDescription` | bool   | Shows additional descriptive text for clipboard entries.                                     |\n| `keyBindings`       | map    | Custom keybind definitions.                                                                  |\n| `autoPaste`         | map    | Auto-paste options.                                                                          |\n| `imageDisplay`      | map    | Image display options (basic/kitty/sixel).                                                   |\n| `excludedApps`      | list   | List of App/Window names form which to exclude any copied data                               |\n\nAll the paths provided (the theme, `historyFile`, and `tempDir`) are all relative paths. They are relative to the location of the config file that holds them. E.g, a file `config.json` at location `$HOME/.config/clipse/config.json` will have all relative paths defined in it relative to its directory of `$HOME/.config/clipse`.\n\nAbsolute paths starting with `/`, paths relative to the user home dir using `~`, or any environment variables like `$HOME` and `$XDG_CONFIG_HOME` are also valid paths that can be used in this file instead.\n\n\n## Key Bindings\n\n| Option                      | Type   | Description                                 |\n| --------------------------- | ------ | ------------------------------------------- |\n| `keyBindings.choose`        | string | Confirms and selects the highlighted entry. |\n| `keyBindings.clearSelected` | string | Clears all currently selected entries.      |\n| `keyBindings.down`          | string | Moves selection down by one entry.          |\n| `keyBindings.end`           | string | Jumps to the last entry in the list.        |\n| `keyBindings.filter`        | string | Activates filtering/search mode.            |\n| `keyBindings.forceQuit`     | string | Immediately exits the application.          |\n| `keyBindings.home`          | string | Jumps to the first entry in the list.       |\n| `keyBindings.more`          | string | Shows additional help or options.           |\n| `keyBindings.nextPage`      | string | Moves to the next page of entries.          |\n| `keyBindings.prevPage`      | string | Moves to the previous page of entries.      |\n| `keyBindings.preview`       | string | Toggles preview of the selected entry.      |\n| `keyBindings.quit`          | string | Exits the application gracefully.           |\n| `keyBindings.remove`        | string | Deletes the selected entry.                 |\n| `keyBindings.selectDown`    | string | Extends selection downward.                 |\n| `keyBindings.selectSingle`  | string | Selects a single entry.                     |\n| `keyBindings.selectUp`      | string | Extends selection upward.                   |\n| `keyBindings.togglePin`     | string | Pins or unpins the selected entry.          |\n| `keyBindings.togglePinned`  | string | Toggles display of pinned entries.          |\n| `keyBindings.up`            | string | Moves selection up by one entry.            |\n| `keyBindings.yankFilter`    | string | Copies the current filter text.             |\n\nKey bindings can take multiple keys delimited by `,`.\n\nFor example:\n\n```json\n{\n    \"keyBindings\": {\n        \"quit\": \"q,esc\"\n    }\n}\n```\n\n## Image Display\n\n| Option                   | Type   | Description                                                                   |\n| ------------------------ | ------ | ----------------------------------------------------------------------------- |\n| `imageDisplay.type`      | string | Rendering mode used for displaying images. Allowed options: basic|kitty|sixel |\n| `imageDisplay.scaleX`    | int    | Horizontal scaling factor for images.                                         |\n| `imageDisplay.scaleY`    | int    | Vertical scaling factor for images.                                           |\n| `imageDisplay.heightCut` | int    | Number of rows trimmed from image height.                                     |\n\nCurrently these are the supported options for `imageDisplay.type`:\n - `basic`\n - `kitty`\n - `sixel`\n\n The `scaleX` and `scaleY` options are the scaling factors for the images. Depending on the situation, you need to find suitable numbers to ensure the images are displayed correctly and completely. You can make adjustments based on [this implementation](https://github.com/savedra1/clipse/pull/138#issue-2530565414).\n\n\n## Auto-paste\n\n| Option              | Type   | Description                                                |\n| ------------------- | ------ | ---------------------------------------------------------- |\n| `autoPaste.enabled` | bool   | Enables automatic pasting after selecting an entry.        |\n| `autoPaste.keybind` | string | Key combination used to trigger paste. (E.g. cmd+v)        |\n| `autoPaste.buffer`  | int    | Delay buffer (in milliseconds) before auto-paste executes. |\n\nWhen enabling the auto-paste feature, you may need to allow `clipse` the required permissions to the system keyboard, and ensure the relevant system APIs are available. The requirements are different based on your display server.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eWayland\u003c/b\u003e\u003c/summary\u003e\n\n  On wayland, the only auto-paste requirement is for `clipse` to have access to the `/dev/uinput` device. There are a number of ways to do this. E.g. on NixOS you can add the following to your `configuration.nix`:\n\n  ```nix\n  # User Configurations\n  users.users.${userConfig.username} = {\n    isNormalUser = true;\n    home = userConfig.homeDirectory;\n    shell = pkgs.zsh; # Setting Zsh as the default shell\n    extraGroups = [ \"wheel\" \"networkmanager\" \"input\" ];\n  };\n\n  # Create udev rule for uinput access\n  services.udev.extraRules = ''\n    KERNEL==\"uinput\", MODE=\"777\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\"\n  '';\n  ```\n\n  To do this manually you can do something like:\n\n  ```shell\n  sudo groupadd input\n  sudo usermod -aG input \u003cusername\u003e\n  sudo vi /etc/udev/rules.d/99-uinput.rules --\u003e add 'KERNEL==\"uinput\", GROUP=\"input\", MODE=\"0660\"'\n  sudo udevadm control --reload-rules\n  sudo udevadm trigger\n  ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eX11\u003c/b\u003e\u003c/summary\u003e\n\n  As mentioned in [Dependencies](#dependencies), X11 builds utilize the [robotgo](https://github.com/go-vgo/robotgo) library to implement auto-paste. This shouldn't require any build dependencies, like GCC and Go, but certain `xlib` APIs may need to be installed in they are not already present Please see [this section](https://github.com/go-vgo/robotgo#for-everything-else) of the `robotgo` docs for more information.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eDarwin\u003c/b\u003e\u003c/summary\u003e\n\n  The only requirement for enabling auto-paste on Darwin could be to allow the `clipse` executable permissions to the system keyboard. This is usually not required, but you can do this via the System Settings GUI: `System Settings -\u003e Accessibility -\u003e '+' -\u003e Select clipse binary file`.\n\n\u003c/details\u003e\n\n\n## Theme\n\nA customizable TUI allows you to easily match your system's theme. The app is based on your terminal's theme by default but is editable from the file specified under for `themeFile` (defaults to `custom_theme.json`). See the [library](https://github.com/savedra1/clipse/blob/main/.github/.resources/library.md) for some example themes to give you inspiration.\n\nAn example `custom_theme.json` file:\n\n```json\n{\n \"UseCustom\":          true,\n \"TitleFore\":          \"#ffffff\",\n \"TitleBack\":          \"#6F4CBC\",\n \"TitleInfo\":          \"#3498db\",\n \"NormalTitle\":        \"#ffffff\",\n \"DimmedTitle\":        \"#808080\",\n \"SelectedTitle\":      \"#FF69B4\",\n \"NormalDesc\":         \"#808080\",\n \"DimmedDesc\":         \"#808080\",\n \"SelectedDesc\":       \"#FF69B4\",\n \"StatusMsg\":          \"#2ecc71\",\n \"PinIndicatorColor\":  \"#FFD700\",\n \"SelectedBorder\":     \"#3498db\",\n \"SelectedDescBorder\": \"#3498db\",\n \"FilteredMatch\":      \"#ffffff\",\n \"FilterPrompt\":       \"#2ecc71\",\n \"FilterInfo\":         \"#3498db\",\n \"FilterText\":         \"#ffffff\",\n \"FilterCursor\":       \"#FFD700\",\n \"HelpKey\":            \"#999999\",\n \"HelpDesc\":           \"#808080\",\n \"PageActiveDot\":      \"#3498db\",\n \"PageInactiveDot\":    \"#808080\",\n \"DividerDot\":         \"#3498db\",\n \"PreviewedText\":      \"#ffffff\",\n \"PreviewBorder\":      \"#3498db\",\n}\n```\n\n# All commands 💻\n\nAdditionally to the `clipse` TUI, there are a number of CLI commands for managing clipboard operations directly from the terminal.\n\n```shell\n# Operational commands\n\nclipse -a \u003carg\u003e       # Adds \u003carg\u003e directly to the clipboard history without copying to system clipboard (string\n\nclipse -a             # Adds any standard input directly to the clipboard history without copying to the system clipboard.\n\n                      # For example: echo \"some data\" | clipse -a\n\nclipse -c \u003carg\u003e       # Copy the \u003carg\u003e to the system clipboard (string). This also adds to clipboard history if currently listening.\n\nclipse -c             # Copies any standard input directly to the system clipboard.\n\n                      # For example: echo \"some data\" | clipse -c\n\nclipse -p             # Prints the current clipboard content to the console.\n\n                      # Example: clipse -p \u003e file.txt\n\n# TUI management commands\n\nclipse                   # Open Clipboard TUI in persistent/debug mode\n\nclipse -listen           # Run a background listener process\n\nclipse --listen-shell    # Run a listener process in the current terminal (useful for debugging)\n\nclipse -help             # Display menu option\n\nclipse -v                # Get version\n\nclipse -clear            # Wipe all clipboard history except for pinned items\n\nclipse -clear-images     # Wipe all images from the history\n\nclipse -clear-text       # Wipe all text items from the clipboard history\n\nclipse -clear-all        # Wipe entire clipboard history\n\nclipse -clean            # sanitize existing text entries and remove orphaned image entries\n\nclipse keep              # Keep the TUI open after selecting an item to copy (useful for debugging)\n\nclipse -kill             # Kill any existing background processes\n\nclipse -pause \u003carg\u003e      # Pause clipboard monitoring for a specified duration. Example: `clipse -pause 5m` pauses for 5 minutes\n\nclipse -output-all       # Print the entire clipboard history to stdout\n\nclipse -enable-real-time # Enable real time updates to the TUI\n\n```\n\nYou can also view the full list of TUI key commands by hitting the `?` key when the `clipse` UI is open.\n\n---\n\n## Contributing 🙏\n\nPlease see the following for what contribution suggestions. If you have an idea that's not listed, please create an issue/discussion around this first.\n\n- [x] ~~Image previews in TUI view~~\n- [x] ~~Pinned items~~\n- [x] ~~Warn on deleting pinned items~~\n- [x] ~~Color theme customizations for all UI elements~~\n- Customizations for:\n  - [x] ~~max history limit~~\n  - [x] ~~config file paths~~\n  - [x] ~~Duplicates allowed~~\n  - [x] ~~key bindings~~\n  - [x] ~~image preview display render type~~\n- [x] ~~Option to disable duplicate items~~\n- [x] ~~Multi-select feature for copying multiple items at once~~\n- [ ] Categorized pinned items with different tabs/views\n- [x] ~~System paste option _(building functionality to paste the chosen item directly into the next place of focus after the TUI closes)_~~\n- Packages for:\n  - [ ] apt\n  - [x] ~~dnf~~\n  - [ ] brew\n  - [ ] other\n- [ ] Your custom theme for the [library](https://github.com/savedra1/clipse/blob/main/resources/library.md)\n- [x] TUI / theming enhancements:\n  - [x] ~~Menu theme~~\n  - [x] ~~Filter theme~~\n  - [x] ~~Clear TUI view on select and close _(mirror close effect from `q` or `esc`)_~~\n- [x] ~~Private mode _(eg `clipse --pause 1` )_~~\n\n---\n\n## FAQ\n\n\u003cdetails\u003e \u003csummary\u003e\u003cb\u003eClipse crashes when I enter certain characters into the search bar\u003c/b\u003e\u003c/summary\u003e\n\nSee issue [#148](https://github.com/savedra1/clipse/issues/148). This is caused by the fuzzy find algo (within the BubbleTea TUI framework code) crashing when it encounters non-compatible characters in the history file, such as an irregular image binary pattern or a rare non-ascii text character. The fix is to remove the clipboard entry that contains the problematic character. I recommend pinning any items you do not want to lose and running clipse -clear.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eMy copied entries are not recorded when starting the clipse listener on boot with a systemd service\u003c/b\u003e\u003c/summary\u003e\n\n  There may be a few ways around this, but the workaround discovered in issue [#41](https://github.com/savedra1/clipse/issues/41) was to use a `.desktop` file stored in `~/.config/autostart/`, for example:\n\n  ```shell\n  [Desktop Entry]\n  Name=clipse\n  Comment=Clipse event listener autostart.\n  Exec=/home/usrname/Applications/bin/clipse/clipse_1.1.0_linux_amd64/clipse --listen %f\n  Terminal=false\n  Type=Application\n  ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eHow it works (TLDR)\u003c/b\u003e\u003c/summary\u003e\n\n  When the app is run for the first time it creates a `$XDG_CONFIG_HOME/clipse` directory containing `config.json`, `clipboard_history.json`, custom_theme.json, and a tmp_files directory for storing image data.\n\n  After `clipse -listen` is executed, a background process watches for clipboard activity and records changes in `clipboard_history.json` unless a different path is specified in `config.json`.\n\n  The TUI is launched with the clipse command. It is built using the BubbleTea\n  framework, enabling efficient concurrency and a smooth UX.\n\n  Delete removes the selected item from both the UI and storage\n\n  Select copies the item to the system clipboard and exits the program\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsavedra1%2Fclipse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsavedra1%2Fclipse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsavedra1%2Fclipse/lists"}