A utility for defining and managing key sequence shortcuts for Simple Hotkey Daemon (skhd) on macOS. This package makes it easy to create complex keyboard shortcuts with mode-based key sequences.
skhd-key-sequence provides a simple API to create and manage sophisticated keyboard shortcuts using skhd. It handles all the complexity of:
- Defining modal keyboard shortcuts
- Managing mode transitions
- Automatic timeout handling
- Generating valid skhd configuration
- Updating your
.skhdrcfile safely
npm install skhd-key-sequencenpm install https://github.com/lacherogwu/skhd-key-sequence- macOS (this package is designed for macOS only)
- skhd installed
- Node.js 16 or higher
import { defineConfig, open, app } from 'skhd-key-sequence';
// Define your keyboard shortcuts configuration
const config = defineConfig({
// Define a "raycast" mode triggered by Hyper+R
raycast: {
modifiers: ['hyper'], // hyper = cmd + shift + alt + ctrl
key: 'r', // trigger key
shortcuts: {
// In raycast mode, pressing 'p' opens Raycast confetti
p: open('raycast://extensions/raycast/raycast/confetti'),
// In raycast mode, pressing 's' opens Discord soundboard
s: open('raycast://extensions/lachero/discord-soundboard/open-soundboard'),
},
},
// Define an "apps" mode triggered by Cmd+Shift+O
apps: {
modifiers: ['cmd', 'shift'],
key: 'o',
shortcuts: {
// In apps mode, pressing 't' opens Terminal
t: app('Terminal'),
// In apps mode, pressing 'c' opens Chrome
c: app('Google Chrome'),
// You can also use bundle IDs
v: app('com.microsoft.VSCode'),
},
},
});
// Generate and save the configuration to ~/.skhdrc
await config.save();
// If the skhd service is running, it automatically detects changes without needing a service restart!For the best experience with skhd key sequences, it's recommended to run skhd as a background service:
skhd --start-serviceThis ensures that:
- skhd starts automatically when you log in
- Your key sequences are always available
- The service restarts if it crashes for any reason
You only need to run this command once. After that, skhd will continue running in the background and will automatically start when you log in to your Mac.
To stop the service:
skhd --stop-serviceWhen you activate a mode (by pressing the defined modifiers + key), you enter a special mode where single key presses trigger specific actions. The mode automatically exits after executing a command or after a timeout period (default: 0.75 seconds).
For example, with the configuration above:
- Press
hyper + rto enter "raycast" mode - Then press
pto trigger the confetti action - The mode will automatically exit after executing the command
Creates a configuration object with methods to build, print and save skhd configuration.
- Parameters:
config: An object defining your modes and shortcuts
- Returns:
- An object with the following methods:
build(): Generates the raw skhd configuration stringprint(): Prints the configuration to consolesave(): Updates your~/.skhdrcfile with the generated configuration
- An object with the following methods:
Creates a command to open files, directories, or URLs.
- Parameters:
value: The file, directory, or URL to openoptions.with: Optional application to use for opening
- Returns:
- A string containing the shell command
// Examples
open('https://google.com');
open('~/Downloads');
open('~/Downloads/file.txt', { with: 'Visual Studio Code' });
open('~/Downloads/file.txt', { with: 'com.microsoft.VSCode' });Creates a command to open an application by name or bundle ID.
- Parameters:
name: The application name or bundle ID
- Returns:
- A string containing the shell command
// Examples
app('Safari');
app('com.apple.Safari');type Config = {
[name: string]: {
modifiers?: Modifier[];
key: Key;
shortcuts: {
[key in Key | KeyNoFn]?: string;
};
};
};type Modifier = 'fn' | 'cmd' | 'lcmd' | 'rcmd' | 'shift' | 'lshift' | 'rshift' | 'alt' | 'lalt' | 'ralt' | 'ctrl' | 'lctrl' | 'rctrl' | 'hyper' | 'meh';Note: hyper is a shortcut for cmd + shift + alt + ctrl, and meh is a shortcut for shift + alt + ctrl.
Includes all alphanumeric keys, plus special keys like return, space, tab, etc.
See the source code for the complete list.
The package adds its generated configuration to your ~/.skhdrc file between special marker comments. This allows it to update the configuration without affecting any custom shortcuts you may have defined outside these markers.
- The package doesn't require any special permissions
- It only modifies your skhd configuration file
- Generated commands are executed by skhd, not by this package
MIT