Skip to content

SKHD - Simple Hotkey Daemon

SKHD provides global hotkeys for seamless application launching and window management integration with Yabai.

SKHD (Simple Hotkey Daemon) is a lightweight hotkey daemon for macOS that enables global keyboard shortcuts. It’s tightly integrated with Yabai for window management and provides quick access to frequently used applications.

  • Global Hotkeys: System-wide keyboard shortcuts
  • Application Launching: Quick access to development tools
  • Window Management: Integration with Yabai tiling
  • Modifier Keys: Uses meh (ctrl+alt+shift) and hyper (ctrl+alt+cmd+shift)

The same skhdrc is installed on every Mac. While Screen Sharing or Jump Desktop is the focused window, skhd ignores every chord. The keys go into that session, and the other Mac runs this same file. Click a local window and the chord runs on the Mac where the keyboard is. Viewer names in the blacklist are lowercase because skhd lowercases the frontmost app.

All application shortcuts use the meh key (ctrl+alt+shift) for consistency and to avoid conflicts.

18 spaces. The primary display holds 1-9. The built-in display holds 10-18, including every messaging app.

SpaceDisplayApp
11Rex Beta
21Ghostty (Herdr)
31Aside
41Chrome, Dia
51Cursor
61Preview, Foxit
71Alter
81Obsidian
91Jump Desktop (Mac Mini)
102LibreOffice
112Zalo
122Telegram, Discord, WhatsApp (stack)
132Arc
142Slack, Cliq (stack)
152kitty
162ChatGPT, Claude, Codex, Grok (stack)
172ego lite
ShortcutApplicationDescription
meh + aRex BetaFocus the primary terminal and move the pointer to it
meh + xGhosttyTerminal for Herdr on space 2
meh + fSysmon overlayLast tmux window, centered (first start: btop / disk / vault)
cmd + shift + opt + vSysmon left of DiaHub on the left quarter of Dia’s space. Press again to focus it
cmd + shift + opt + gSysmon right of DiaHub on the right quarter of Dia’s space. Press again to focus it
cmd + shift + opt + rSysmon left of AsideHub on the left quarter of Aside’s space. Press again to focus it
cmd + shift + opt + tSysmon right of AsideHub on the right quarter of Aside’s space. Press again to focus it
meh + gCursorAI-powered code editor on space 5
meh + hAlterChat hub on space 7
ShortcutApplicationDescription
meh + sAsideBrowser on display 1, space 3
meh + eEgoLightweight browser on display 2, space 17
meh + dArcBrowser on space 13
meh + zZen BrowserAlternative browser
meh + cDiaFocus the existing Dia window on space 4
meh + kSlackTeam communication on display 2, space 14
meh + rTelegramMessaging app on display 2, space 12
meh + uZaloMessaging app on space 11
meh + tDiscordCommunity chat on space 12
meh + yWhatsAppMessaging app on space 12
meh + jCliqTeam communication on space 14
ShortcutApplicationDescription
meh + 11PasswordPassword manager
meh + 2Jump DesktopMac Mini (mini-01, Fluid) on the main display, space 9
meh + 3Jump DesktopLinux (linux-01, Fluid) on the main display, space 9
meh + vGrok BotGrok desktop app on space 16
meh + lPerplexityAI search engine
meh + iStructuredTask and time management
meh + wLibreOfficeOffice suite on space 10
meh + pFoxit PDF ReaderPDF reader on space 6
meh + oPreviewmacOS preview app on space 6
meh + nObsidianNotes on space 8
meh + msuperwhisperVoice input
meh + qApple MusicMusic player
meh + bBorumiProductivity app

SKHD integrates with Yabai for powerful window management capabilities.

ShortcutActionDescription
ctrl + shift + hFocus WestMove focus to left window
ctrl + shift + jFocus SouthMove focus to bottom window
ctrl + shift + kFocus NorthMove focus to top window
ctrl + shift + lFocus EastMove focus to right window
ctrl + shift + tabFocus StackToggle the visible window in a stacked space
ShortcutActionDescription
cmd + shift + hWarp WestMove window to the left
cmd + shift + lWarp EastMove window to the right
ShortcutActionDescription
hyper + leftResize LeftDecrease width from left
hyper + downResize DownIncrease height downward
hyper + upResize UpDecrease height upward
hyper + rightResize RightIncrease width to right
ShortcutActionDescription
hyper + 1-9Send to SpaceMove window to specific space
hyper + tabSend to RecentMove window to recent space
cmd + ctrl + 1-4Move & FollowMove window and follow to space
cmd + ctrl + ←/→Move to DisplayMove window to previous/next display and follow
ShortcutActionDescription
hyper + eBalance WindowsEqualize window sizes
hyper + wWide SplitLeft or top side of the focused split takes 80%
hyper + fToggle FullscreenZoom fullscreen
shift + alt + fNative FullscreenmacOS native fullscreen
shift + alt + spaceToggle FloatFloat/unfloat window
alt + rRotate ClockwiseRotate layout 270°
shift + alt + rRotate CounterRotate layout 90°
ShortcutActionDescription
hyper + brexboardRex to the front, its focused window on the board: 1-cockpit’s first tab, as Alt-Shift-1 in Rex. Made first if missing

hyper here is Caps (Karabiner’s cmd+ctrl+opt+shift). Hammerspoon’s Hyper+B, which runs the clipboard as a command, is cmd+alt+ctrl+b without shift, so the two never meet.

ShortcutActionDescription
hyper + iToggle GapsEnable/disable gaps and padding
hyper + oToggle PaddingToggle padding only
  • Location: dotfiles/skhd/.config/skhd/skhdrc
  • Reload: skhd --restart-service
Terminal window
# Modifier key definitions
meh = ctrl + alt + shift # Primary modifier for apps
hyper = ctrl + alt + cmd + shift # Secondary modifier for window management
Terminal window
# Template for new application
meh - [key] : open "/Applications/AppName.app"
# Example: Add new app
meh - q : open "/Applications/Notion.app"
Terminal window
# Template for window actions
[modifier] - [key] : yabai -m window --[action] [parameters]
# Example: New resize shortcut
hyper - 0 : yabai -m space --balance
Terminal window
# Start SKHD service
brew services start skhd
# Stop SKHD service
brew services stop skhd
# Restart SKHD service
brew services restart skhd
skhd --restart-service
# Check service status
brew services list | grep skhd
Terminal window
# Check if SKHD is running
ps aux | grep skhd
# Restart SKHD service
skhd --restart-service
# Check for configuration errors
skhd --verbose
/usr/local/bin/skhd
# SKHD needs accessibility permissions
# Go to: System Preferences → Security & Privacy → Privacy → Accessibility
Terminal window
# Verify application path
ls "/Applications/AppName.app"
# Check if application exists
mdfind "kMDItemDisplayName == 'AppName'"
# Test opening manually
open "/Applications/AppName.app"
Terminal window
# Check for conflicting shortcuts
# Some apps may override global shortcuts
# Use different modifier combinations
# Consider using hyper instead of meh for some shortcuts
Terminal window
# Check configuration syntax
skhd --config-file ~/.config/skhd/skhdrc --verbose
# Monitor key events
skhd --observe
# Reload configuration
skhd --reload
Terminal window
# Find key codes for special keys
skhd --observe
# Press the key you want to map
# Note the key code displayed
Terminal window
# Minimize delay in shortcuts
# Avoid complex shell commands in shortcuts
# Use direct application paths instead of scripts when possible
Terminal window
# Monitor SKHD memory usage
ps aux | grep skhd
# SKHD should use minimal memory
# If high usage, check for configuration loops
Terminal window
# Different shortcuts based on active application
# Example: Different behavior in terminal vs browser
Terminal window
# Create different modes for different workflows
# Example: Development mode vs presentation mode
Terminal window
# Call custom scripts from shortcuts
meh - p : ~/.local/bin/project-setup.sh
# Pass parameters to scripts
meh - shift - p : ~/.local/bin/project-setup.sh --template react
Terminal window
# Open different apps based on context
# Example: Open appropriate terminal based on current project
  • Window management shortcuts directly control Yabai
  • Seamless tiling and space management
  • Consistent modifier keys across both tools
  • Application shortcuts work from within tmux sessions
  • Terminal applications respect tmux session context
  • Shortcuts work while Neovim is focused
  • No conflicts with Neovim’s key mappings