{"id":37801380,"url":"https://github.com/yaroslavborbat/zellij-bookmarks","last_synced_at":"2026-04-15T19:00:48.535Z","repository":{"id":265130334,"uuid":"892215830","full_name":"yaroslavborbat/zellij-bookmarks","owner":"yaroslavborbat","description":"Zellij plugin for creating, managing, and quickly inserting command bookmarks into the terminal.","archived":false,"fork":false,"pushed_at":"2026-04-14T16:45:31.000Z","size":1355,"stargazers_count":40,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-14T18:18:48.224Z","etag":null,"topics":["bookmarks","plugin","terminal","zellij","zellij-bookmarks","zellij-plugin"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/yaroslavborbat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2024-11-21T17:52:44.000Z","updated_at":"2026-04-14T16:45:35.000Z","dependencies_parsed_at":"2025-08-24T19:06:09.569Z","dependency_job_id":"ab212570-ef35-405c-9919-a2b67e9c7ec4","html_url":"https://github.com/yaroslavborbat/zellij-bookmarks","commit_stats":null,"previous_names":["yaroslavborbat/zellij-bookmarks"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/yaroslavborbat/zellij-bookmarks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaroslavborbat%2Fzellij-bookmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaroslavborbat%2Fzellij-bookmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaroslavborbat%2Fzellij-bookmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaroslavborbat%2Fzellij-bookmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yaroslavborbat","download_url":"https://codeload.github.com/yaroslavborbat/zellij-bookmarks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaroslavborbat%2Fzellij-bookmarks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31855432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"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":["bookmarks","plugin","terminal","zellij","zellij-bookmarks","zellij-plugin"],"created_at":"2026-01-16T15:26:31.959Z","updated_at":"2026-04-15T19:00:48.529Z","avatar_url":"https://github.com/yaroslavborbat.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zellij-bookmarks\n\nA [Zellij](https://zellij.dev) plugin for creating, managing, and quickly inserting command bookmarks into the terminal.\n\n![demo](assets/demo.gif)\n\n## ✨ Features\n\n- **Easily create and manage command bookmarks**:\n  Create, edit, and organize bookmarks with ease to manage your most common terminal commands.\n\n- **Quickly filter, view, and insert commands into the terminal**:\n  Efficiently search and access commands or bookmarks by name or labels, allowing for fast navigation and command execution.\n\n- **Intuitive Navigation Modes**:\n  Switch between different navigation modes (Bookmarks or Labels) for better organization and streamlined command access.\n\n- **Advanced Templating \u0026 Dynamic Command Integration**:\n  Leverage reusable templates and dynamic interpolation with `vars`, `cmd::\u003ccommand_key\u003e`, and `bookmark::\u003cbookmark_name\u003e`. This allows you to define, customize, and reuse commands efficiently without repetitive configuration.\n\n- **Customizable Hotkeys**:\n  Define and adjust keybindings to better fit your workflow\n\n---\n\n## 📖 Usage\n\n- **Navigation**: Use `Up` and `Down` to navigate through the list of bookmarks or labels.\n- **Insert Bookmark**: Press `Enter` to paste the selected bookmark into the terminal.\n- **Search**: Start typing to filter the list based on the current mode.\n- **Remove Filter Symbol**: Use `Backspace` to delete the last character from the filter input.\n- **Switch Modes**: Press `Ctrl Left` or `Ctrl Right` to switch between plugin modes.\n- **Exit**: Press `Esc` or `Ctrl c` to exit the plugin.\n- **Edit Bookmarks**: Press `Ctrl e` to open the edit mode, choose a configuration file, and open it in an editor.\n- **Reload Bookmarks**: Press `Ctrl r` to reload bookmarks after modifying the configuration file.\n- **Switch to Label Filtering Mode**: Press `Ctrl l` to enable label filtering mode. This feature is only available in `Bookmarks` mode.\n- **Switch to ID Filtering Mode**: Press `Ctrl i` to enable ID filtering mode. This feature is available in both `Bookmarks` and `Labels` modes.\n- **Bookmark Description**: Press `Ctrl d` to display the description of the currently selected bookmark. This feature is only available in `Bookmarks` mode.\n- **Switch to Bookmarks Mode**: Press `Ctrl 1` to switch to Bookmarks mode.\n- **Switch to Labels Mode**: Press `Ctrl 2` to switch to Labels mode.\n- **View Usage Instructions**: Press `Ctrl 3` to switch to Usage mode and view plugin instructions.\n- **Switch to Edit Mode**: Press `Ctrl 4` to switch to Edit mode, or use `Ctrl e`.\n\n---\n\n## 🚀 Installation\n\nFor compatibility details, including tested versions, see [COMPATIBILITY.md](COMPATIBILITY.md).\n\n### From Source\n\n1. Install Rust and Cargo if you haven't already. Follow the [installation guide here](https://www.rust-lang.org/tools/install).\n\n   Additionally, install the `wasm32-wasip1` target by following the [documentation here](https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-wasip1.html).\n2. Clone the repository, build, and install the plugin by running the following commands:\n   ```bash\n   git clone https://github.com/yaroslavborbat/zellij-bookmarks.git\n   cd zellij-bookmarks\n   task build\n   task install\n   ```\n\n### Quick\nFor a quick installation, run the following command to download the plugin directly:\n```bash\nmkdir -p ~/.config/zellij/plugins \u0026\u0026 \\\ncurl -L \"https://github.com/yaroslavborbat/zellij-bookmarks/releases/latest/download/zellij-bookmarks.wasm\" -o ~/.config/zellij/plugins/zellij-bookmarks.wasm\n```\n\u003e **Note**: You don't need to keep zellij-bookmarks.wasm at this specified location. It's just where I like to keep my zellij plugins.\n\n---\n\n## ⚙️ Configuration\n### Keybinding\n\nAdd the following configuration to your [Zellij config](https://zellij.dev/documentation/configuration.html) inside the [keybinds](https://zellij.dev/documentation/keybindings.html) section:\n\n```kdl\nshared_except \"locked\" {\n    bind \"Alt B\" {\n        LaunchOrFocusPlugin \"file:~/.config/zellij/plugins/zellij-bookmarks.wasm\" {\n            floating true\n            cwd \"/home/\u003cUSER\u003e/.config/zellij/\"\n        };\n    }\n}\n```\n\u003e **Note**: You likely already have a `shared_except \"locked\"` section in your configuration. Add the `bind` command there.\n\n\u003e **Note**: Make sure to replace \\\u003cUSER\\\u003e in the cwd path with your actual username.\n\n\u003e **Important**: The cwd parameter is required. For details on why and what to do if it disappears after a Zellij update, see the [FAQ.md](FAQ.md).\n\n#### Parameters\n\n- **`cwd`**: *(REQUIRED)* - The *ABSOLUTE PATH* where your bookmarks file will be stored.\n- **`exec`**: *(default: `false`)* - If `true`, the command will execute immediately after pressing `Enter`. This can be overridden per bookmark.\n- **`separator`**: *(default: `\" \\\\\\n\u0026\u0026 \"`)* - The default separator used to join commands inside a bookmark. This can be overridden per bookmark.\n- **`chrome_color`**: *(default: `2`)* - Palette index used for `Search`, `All`, `+ N more`.\n- **`match_color`**: *(default: `3`)* - Palette index used to highlight matched characters in filtered lists and mode navigation blocks.\n- **`active_item_color`**: *(default: `0`)* - Palette index used for the text color of the currently selected item.\n- **`selected_item_frame`**: *(default: `true`)* - Enables the framed selection style for the active item in lists.\n- **`fuzzy_search`**: *(default: `true`)* - When filtering, uses fuzzy search to find bookmarks/labels that match the filter string.\n- **`ignore_case`**: *(default: `false`)* - When filtering, ignores case sensitivity in both the filter string and bookmark/label names. Has no effect when `fuzzy_search` is enabled.\n- **`autodetect_filter_mode`**: *(default: `true`)* - Automatically determines the filtering mode (ID or Name) based on the entered filter string, eliminating the need for manual mode switching.\n- **`sort`**: *(default: `true`)* - Sorts bookmarks, labels, and editable config files by name and reindexes them for display and ID filtering.\n- **`filename`**: *(default: `.zellij_bookmarks.yaml`)* - The name of the bookmarks file.\n- **`dirname`**: *(default: `.zellij-bookmarks.d`)* - The name of the directory with extra YAML files to merge into the main bookmarks config.\n- **`bind_edit`**: *(default: `Ctrl e`)* Keybinding to open the edit mode and choose a config file.\n- **`bind_reload`**: *(default: `Ctrl r`)* Keybinding to reload bookmarks.\n- **`bind_switch_filter_label`**: *(default: `Ctrl l`)* Keybinding to switch to label filtering mode.\n- **`bind_switch_filter_id`**: *(default: `Ctrl i`)* Keybinding to switch to id filtering mode.\n- **`bind_describe`**: *(default: `Ctrl d`)* Keybinding to display the description of the selected bookmark.\n\n### Bookmarks Configuration\n\nThe bookmarks configuration is a YAML file that defines your bookmarks. Here's a detailed explanation of the configuration structure and its usage.\n\nIn addition to the main `filename`, the plugin also loads all `*.yaml` and `*.yml` files from `dirname`, merges them in alphabetical order, and treats the result as a single configuration. Bookmark names, `vars`, and `cmds` must remain unique across the whole merged config.\n\nEvery bookmark also gets an automatically managed label in the reserved `file::...` namespace based on the file it came from. For example, bookmarks from `.zellij-bookmarks.d/kubernetes.yaml` get the label `file::kubernetes`, and bookmarks from the main `filename` get `file::main`.\n\n### Configuration Structure\n\n#### 1. **`vars`**\nA global key-value map for variables. These variables can be used to parameterize commands and bookmarks.\n\n- Use the templating syntax `{{ \u003cvariable_name\u003e }}` to reference a variable.\n- If you need to include `{{ ... }}` as a literal string in your commands (e.g., for tools like `crictl`), you must escape it with double backslashes (`\\\\`).\n\n  **Example:**\n  ```yaml\n  cmds:\n  - crictl inspect --output go-template --template '\\\\{{.info.pid}}' $CTR\n  ```\n\n#### 2. **`cmds`**\nA map for frequently used commands that aren't directly insertable into the terminal.\nYou can include them in bookmarks by referencing them as `cmd::\u003ccommand_key\u003e`.\n\n#### 3. **`bookmarks`**\nA list of bookmarks. Each bookmark has the following fields:\n\n- **`name`**: A unique name for the bookmark. Can be used to link to a bookmark in other bookmarks.\n- **`cmds`**: A list of commands for the bookmark. These can include:\n   - Plain text commands.\n   - Commands referenced from `cmds` using `cmd::\u003ccommand_key\u003e`.\n   - Commands imported from other bookmarks using `bookmark::\u003cbookmark_name\u003e`.\n- **`desc`**: *(optional)* A description of the bookmark to provide context or explanation about its purpose.\n- **`exec`**: *(optional)* A boolean flag indicating whether the commands should be executed immediately.\n- **`separator`**: *(optional)* A separator used to join commands for this bookmark. Overrides the global `separator`.\n- **`labels`**: *(optional)* A list of labels or tags associated with the bookmark.\n- **`vars`**: *(optional)* Local variables specific to the bookmark. These have a higher priority than global `vars`.\n\nCommands within a bookmark are concatenated using the configured separator. By default it is `\" \\\\\\n\u0026\u0026 \"`.\n\n### Key Concepts\n\n- **Templating with Variables**:\n  Variables defined in `vars` or bookmark-specific `vars` can be used in commands or bookmarks using the syntax `{{ \u003cvariable_name\u003e }}`. Bookmark-specific variables take precedence over global ones, allowing flexible and context-specific command customization.\n\n- **Command Reuse with `cmds`**:\n   - Use `cmd::\u003ccommand_key\u003e` to reference predefined reusable commands from `cmds`.\n   - Use `bookmark::\u003cbookmark_name\u003e` to include all commands from another bookmark into the current one.\n   - Commands are concatenated with the configured separator, ensuring predictable composition.\n\n### Testing\n\nRun unit tests on the host target with:\n\n```bash\ntask test\n```\n\nThis structure provides a modular, reusable, and powerful way to parameterize commands and configurations using simple templating and bookmark composition.\n\n### Example Configuration\n\n```yaml\nvars:\n  global_var: \"Global value\"\n  path: \"/home/user\"\n\ncmds:\n  greet: \"echo 'Hello, World!'\"\n  list_files: \"ls -la {{ path }}\"\n  custom_echo: \"echo '{{ message }}'\"\n\nbookmarks:\n- name: \"Bookmark1\"\n  desc: \"A test bookmark combining plain text and reusable commands.\"\n  cmds:\n  - \"echo 'This is Bookmark1'\"\n  - cmd::greet\n  - bookmark::Bookmark2\n  - cmd::custom_echo\n  exec: false\n  labels:\n  - \"utilities\"\n  - \"example\"\n  vars:\n    message: \"Bye Bye!\"\n\n- name: \"Bookmark2\"\n  desc: \"Command to list files dynamically using the path variable.\"\n  cmds:\n  - \"cmd::list_files\"\n  exec: true\n  labels:\n  - \"files\"\n ```\n\n### Explanation of the Example\n\n#### **Global Variables**\n\n- **`global_var`** and **`path`** are global variables accessible in all commands and bookmarks.\n- The `{{ path }}` variable is used in `cmds` to dynamically include the value of `path`.\n\n#### **Commands (`cmds`)**\n\n- **`greet`**: A reusable command to print a greeting.\n- **`list_files`**: A command to list files using the `path` variable.\n- **`custom_echo`**: A customizable echo command using the `message` variable.\n\n#### **Bookmarks**\n\n##### **`Bookmark1`**\n- Contains:\n   - Plain text commands.\n   - A reference to the reusable command `cmd::greet`.\n   - Imports all commands from **Bookmark2** using `bookmark::Bookmark2`.\n- Includes local variables that can customize command behavior.\n- Result command that would paste to terminal:\n   ```bash\n   echo 'This is Bookmark1' \\\n   \u0026\u0026 echo 'Hello, World!' \\\n   \u0026\u0026 ls -la /home/user \\\n   \u0026\u0026 echo 'Bye Bye!'\n   ```\n\n##### **`Bookmark2`**\n- Contains:\n   - A command that uses the `list_files` command template (`cmd::list_files`).\n- Is executed immediately because `exec: true` is set.\n- Result command that would execute:\n   ```bash\n   ls -la /home/user\n   ```\n---\n\n## 🧩 More Zellij Plugins by Me\n\n- [`zellij-bookmarks`](https://github.com/yaroslavborbat/zellij-bookmarks) - A Zellij plugin for creating, managing, and quickly inserting command bookmarks into the terminal.\n- [`zellij-playbooks`](https://github.com/yaroslavborbat/zellij-playbooks) - A Zellij plugin to browse, select, and execute commands from playbook files directly in the terminal.\n\n---\n\n## 🤝 Contributing\n\nFound an issue or have a feature request? Feel free to [open an issue](https://github.com/yaroslavborbat/zellij-bookmarks/issues/new) on GitHub.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaroslavborbat%2Fzellij-bookmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyaroslavborbat%2Fzellij-bookmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaroslavborbat%2Fzellij-bookmarks/lists"}