{"id":13392742,"url":"https://github.com/koekeishiya/skhd","last_synced_at":"2025-05-14T10:10:37.414Z","repository":{"id":37269905,"uuid":"99607082","full_name":"koekeishiya/skhd","owner":"koekeishiya","description":" Simple hotkey daemon for macOS","archived":false,"fork":false,"pushed_at":"2024-04-10T16:46:55.000Z","size":16494,"stargazers_count":6941,"open_issues_count":144,"forks_count":218,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-03-27T22:02:48.722Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","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/koekeishiya.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2017-08-07T18:22:48.000Z","updated_at":"2025-03-27T21:44:32.000Z","dependencies_parsed_at":"2024-09-25T22:52:15.706Z","dependency_job_id":null,"html_url":"https://github.com/koekeishiya/skhd","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koekeishiya%2Fskhd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koekeishiya%2Fskhd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koekeishiya%2Fskhd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koekeishiya%2Fskhd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koekeishiya","download_url":"https://codeload.github.com/koekeishiya/skhd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247091752,"owners_count":20882213,"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":[],"created_at":"2024-07-30T17:00:36.430Z","updated_at":"2025-04-03T23:02:46.863Z","avatar_url":"https://github.com/koekeishiya.png","language":"C","funding_links":[],"categories":["HarmonyOS","C","Featuring","Uncategorized","Desktop \u0026 Web Applications","Utilities","ユーティリティ"],"sub_categories":["Windows Manager","Uncategorized","macOS Specific ","Productivity","生産性ツール"],"readme":"**skhd** is a simple hotkey daemon for macOS that focuses on responsiveness and performance.\nHotkeys are defined in a text file through a simple DSL. **skhd** is able to hotload its config file, meaning that hotkeys can be edited and updated live while **skhd** is running.\n\n**skhd** uses a pid-file to make sure that only one instance is running at any moment in time. This also allows for the ability to trigger\na manual reload of the config file by invoking `skhd --reload` at any time while an instance of **skhd** is running. The pid-file is saved\nas `/tmp/skhd_$USER.pid` and so the user that is running **skhd** must have write permission to said path.\nWhen running as a service (through launchd) log files can be found at `/tmp/skhd_$USER.out.log` and `/tmp/skhd_$USER.err.log`.\n\nlist of features\n\n| feature                    | skhd |\n|:--------------------------:|:----:|\n| hotload config file        | [x]  |\n| hotkey passthrough         | [x]  |\n| modal hotkey-system        | [x]  |\n| application specific hotkey| [x]  |\n| blacklist applications     | [x]  |\n| use media-keys as hotkey   | [x]  |\n| synthesize a key-press     | [x]  |\n\n### Install\n\nThe first time **skhd** is ran, it will request access to the accessibility API.\n\nAfter access has been granted, the application must be restarted.\n\n*Secure Keyboard Entry* must be disabled for **skhd** to receive key-events.\n\n**Homebrew**:\n\nRequires xcode-8 command-line tools.\n\n      brew install koekeishiya/formulae/skhd\n      skhd --start-service\n\n**Source**:\n\nRequires xcode-8 command-line tools.\n\n      git clone https://github.com/koekeishiya/skhd\n      make install      # release version\n      make              # debug version\n\n### Usage\n\n```\n--install-service: Install launchd service file into ~/Library/LaunchAgents/com.koekeishiya.skhd.plist\n    skhd --install-service\n\n--uninstall-service: Remove launchd service file ~/Library/LaunchAgents/com.koekeishiya.skhd.plist\n    skhd --uninstall-service\n\n--start-service: Run skhd as a service through launchd\n    skhd --start-service\n\n--restart-service: Restart skhd service\n    skhd --restart-service\n\n--stop-service: Stop skhd service from running\n    skhd --stop-service\n\n-V | --verbose: Output debug information\n    skhd -V\n\n-P | --profile: Output profiling information\n    skhd -P\n\n-v | --version: Print version number to stdout\n    skhd -v\n\n-c | --config: Specify location of config file\n    skhd -c ~/.skhdrc\n\n-o | --observe: Output keycode and modifiers of event. Ctrl+C to quit\n    skhd -o\n\n-r | --reload: Signal a running instance of skhd to reload its config file\n    skhd -r\n\n-h | --no-hotload: Disable system for hotloading config file\n    skhd -h\n\n-k | --key: Synthesize a keypress (same syntax as when defining a hotkey)\n    skhd -k \"shift + alt - 7\"\n\n-t | --text: Synthesize a line of text\n    skhd -t \"hello, worldシ\"\n```\n\n### Configuration\n\nThe default configuration file is located at one of the following places (in order):\n\n - `$XDG_CONFIG_HOME/skhd/skhdrc`\n - `$HOME/.config/skhd/skhdrc`\n - `$HOME/.skhdrc`\n\nA different location can be specified with the *--config | -c* argument.\n\nA sample config is available [here](https://github.com/koekeishiya/skhd/blob/master/examples/skhdrc)\n\nA list of all built-in modifier and literal keywords can be found [here](https://github.com/koekeishiya/skhd/issues/1)\n\nA hotkey is written according to the following rules:\n```\nhotkey       = \u003cmode\u003e '\u003c' \u003caction\u003e | \u003caction\u003e\n\nmode         = 'name of mode' | \u003cmode\u003e ',' \u003cmode\u003e\n\naction       = \u003ckeysym\u003e '[' \u003cproc_map_lst\u003e ']' | \u003ckeysym\u003e '-\u003e' '[' \u003cproc_map_lst\u003e ']'\n               \u003ckeysym\u003e ':' \u003ccommand\u003e          | \u003ckeysym\u003e '-\u003e' ':' \u003ccommand\u003e\n               \u003ckeysym\u003e ';' \u003cmode\u003e             | \u003ckeysym\u003e '-\u003e' ';' \u003cmode\u003e\n\nkeysym       = \u003cmod\u003e '-' \u003ckey\u003e | \u003ckey\u003e\n\nmod          = 'modifier keyword' | \u003cmod\u003e '+' \u003cmod\u003e\n\nkey          = \u003cliteral\u003e | \u003ckeycode\u003e\n\nliteral      = 'single letter or built-in keyword'\n\nkeycode      = 'apple keyboard kVK_\u003cKey\u003e values (0x3C)'\n\nproc_map_lst = * \u003cproc_map\u003e\n\nproc_map     = \u003cstring\u003e ':' \u003ccommand\u003e | \u003cstring\u003e     '~' |\n               '*'      ':' \u003ccommand\u003e | '*'          '~'\n\nstring       = '\"' 'sequence of characters' '\"'\n\ncommand      = command is executed through '$SHELL -c' and\n               follows valid shell syntax. if the $SHELL environment\n               variable is not set, it will default to '/bin/bash'.\n               when bash is used, the ';' delimeter can be specified\n               to chain commands.\n\n               to allow a command to extend into multiple lines,\n               prepend '\\' at the end of the previous line.\n\n               an EOL character signifies the end of the bind.\n\n-\u003e           = keypress is not consumed by skhd\n\n*            = matches every application not specified in \u003cproc_map_lst\u003e\n\n~            = application is unbound and keypress is forwarded per usual, when specified in a \u003cproc_map\u003e\n```\n\nA mode is declared according to the following rules:\n```\n\nmode_decl = '::' \u003cname\u003e '@' ':' \u003ccommand\u003e | '::' \u003cname\u003e ':' \u003ccommand\u003e |\n            '::' \u003cname\u003e '@'               | '::' \u003cname\u003e\n\nname      = desired name for this mode,\n\n@         = capture keypresses regardless of being bound to an action\n\ncommand  = command is executed through '$SHELL -c' and\n           follows valid shell syntax. if the $SHELL environment\n           variable is not set, it will default to '/bin/bash'.\n           when bash is used, the ';' delimeter can be specified\n           to chain commands.\n\n           to allow a command to extend into multiple lines,\n           prepend '\\' at the end of the previous line.\n\n           an EOL character signifies the end of the bind.\n```\n\nGeneral options that configure the behaviour of **skhd**:\n```\n# specify a file that should be included as an additional config-file.\n# treated as an absolutepath if the filename begins with '/' otherwise\n# the file is relative to the path of the config-file it was loaded from.\n\n.load \"/Users/Koe/.config/partial_skhdrc\"\n.load \"partial_skhdrc\"\n\n# prevents skhd from monitoring events for listed processes.\n\n.blacklist [\n    \"terminal\"\n    \"qutebrowser\"\n    \"kitty\"\n    \"google chrome\"\n]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoekeishiya%2Fskhd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoekeishiya%2Fskhd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoekeishiya%2Fskhd/lists"}