{"id":17725404,"url":"https://github.com/trevor-vincent/keydra","last_synced_at":"2026-01-24T17:34:22.739Z","repository":{"id":258074299,"uuid":"873353080","full_name":"trevor-vincent/Keydra","owner":"trevor-vincent","description":"Menu of Keybinds","archived":false,"fork":false,"pushed_at":"2024-10-16T03:01:55.000Z","size":29,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-17T15:05:05.411Z","etag":null,"topics":["emacs","hydra","i3","keybindings"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trevor-vincent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-10-16T02:53:34.000Z","updated_at":"2024-10-16T13:32:55.000Z","dependencies_parsed_at":"2024-10-18T05:19:56.812Z","dependency_job_id":null,"html_url":"https://github.com/trevor-vincent/Keydra","commit_stats":null,"previous_names":["trevor-vincent/keydra"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevor-vincent%2FKeydra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevor-vincent%2FKeydra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevor-vincent%2FKeydra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevor-vincent%2FKeydra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trevor-vincent","download_url":"https://codeload.github.com/trevor-vincent/Keydra/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229565019,"owners_count":18093321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["emacs","hydra","i3","keybindings"],"created_at":"2024-10-25T16:04:21.146Z","updated_at":"2026-01-24T17:34:22.730Z","avatar_url":"https://github.com/trevor-vincent.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Keydra\n\nInspired by emacs-hydra, Keydra addresses the challenge of remembering numerous linux shell functions by allowing users to create menus of keybinds, referred to as \"keydras.\" This approach makes it possible to manage more commands than traditional keybind systems would feasibly allow.\n\n## Features\n\n- **Infinite Keybindings**: Organize and trigger an unlimited number of commands via custom keybindings.\n- **Descriptive Command Names and Help Text**: Enhance command recall with helpful descriptions right in the interface.\n- **Keybinds are set through human-readable text files**: Easily configure keybinds and command menus using simple text files.\n- **Dynamic Window Attributes**: Customize the window title and colors dynamically via the command line for each session.\n- **Quick Config Editing**: Click on the title to open your config file in your preferred text editor.\n\n## Installation\n\n### Install from npm (Recommended)\n\nThe easiest way to install Keydra is directly from npm:\n\n```bash\n# Install globally\nnpm install -g keydra\n\n# Run from anywhere\nkeydra --config=path/to/your/config.ini\n```\n\n### Manual Installation\n\nAlternatively, you can install from source:\n\n```bash\n# Clone the repository\ngit clone https://github.com/trevor-vincent/Keydra.git\n\n# Navigate to the directory\ncd Keydra\n\n# Install dependencies\nnpm install\n\n# Run the application with a config file\nnpm start -- --config=path/to/your/config.ini\n```\n\nYou can also create a global link to run Keydra from anywhere when installing from source:\n\n```bash\n# Create a global link\nnpm link\n\n# Now you can run Keydra from anywhere\nkeydra --config=path/to/your/config.ini\n```\n\n## Config File Format\n\nCreate a configuration file (.ini) with the following format:\n\n```\n# height: 600\n# width: 400\nCommand Name, Keybind, shell_command_to_execute\n```\n\nFor example:\n```\nOpen Google Chrome, Ctrl+O, google-chrome-stable\nOpen Emacs, F2, emacsclient -c -a emacs\n```\n\n## Usage\n\nRun Keydra with your configuration file:\n\n```bash\nkeydra --config=your_config.ini --title=\"Your Title\"\n```\n\nCommand line options:\n- `--config` or `-c`: Path to your configuration file (required)\n- `--title` or `-t`: Window title (default: \"Keydra\")\n- `--width` or `-wi`: Window width (default: 600)\n- `--height` or `-he`: Window height (default: 800)\n- `--text-editor` or `-e`: Text editor to open the config file (default: \"nano\")\n\n## Examples\n\nLet's say you want to autoconnect to some bluetooth devices, but you don't want to type the bluetoothctl commands in a shell with the MAC address.\n\nWrite this bluetooth.ini:\n\n```\nBlueTooth Pair With Echo, F1, source ~/.bashrc; bluetooth_pair_with_echo_device\nBlueTooth Pair With Buds, F2, source ~/.bashrc; bluetooth_pair_with_buds\n```\n\nThis binds F1 and F2 to the functions in your .bashrc that pair with your buds and echo, they wrap the bluetoothctl command so that you don't have to remember it. The Keydra would be ran as follows:\n\n```bash\nkeydra --config bluetooth.ini --title \"Bluetooth Devices\"\n```\n\nThis launches the menu. Now pressing F1 or F2 will pair the bluetooth device and close the menu.\n\n## Using with the i3 window manager\n\nIf you are using the i3 window manager, you can add keybindings in your i3 config to launch different Keydra menus:\n\n```\n# Launch bluetooth keydra\nbindsym $mod+b exec keydra --config ~/.config/keydra/bluetooth.ini --title \"Bluetooth\"\n\n# Launch applications keydra\nbindsym $mod+a exec keydra --config ~/.config/keydra/apps.ini --title \"Applications\"\n```\n\nImportant: If you're experiencing issues with keydra not being found, make sure to use the full path:\n\n```\n# Example using full path - adjust according to your npm global installation directory\nbindsym $mod+b exec /usr/local/bin/keydra --config ~/.config/keydra/bluetooth.ini --title \"Bluetooth\"\n# Or if using volta:\nbindsym $mod+b exec /home/yourusername/.volta/bin/keydra --config ~/.config/keydra/bluetooth.ini --title \"Bluetooth\"\n```\n\nYou can find your keydra executable location with: `which keydra`\n\n## Customizing Through Config Comments\n\nYou can customize window dimensions by adding commented lines at the top of your config file:\n\n```\n# height: 400\n# width: 300\nCommand1, F1, command1_to_run\nCommand2, F2, command2_to_run\n```\n\n## Using with the i3 window manager\nIf you are using the i3 window manager, in the i3 config please add the lines\n\nfor_window [class=\"keydra\"] floating enable\nto make sure the window floats.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrevor-vincent%2Fkeydra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrevor-vincent%2Fkeydra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrevor-vincent%2Fkeydra/lists"}