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)

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

ShortcutApplicationDescription
meh + aGhosttyPrimary terminal emulator
meh + fKittySecondary terminal emulator on display 2, space 15
meh + xChatGPTAI assistant on display 2, space 16
meh + vtldraw offlineWhiteboard on display 2, space 17
meh + gCursorAI-powered code editor
meh + yAlterChat hub
ShortcutApplicationDescription
meh + sDiaPrimary web browser
meh + eEgoLightweight browser on space 1 with Ghostty
meh + dArcBrowser on space 13
meh + zZen BrowserAlternative browser
meh + kSlackTeam communication
meh + rTelegramMessaging app
meh + uZaloMessaging app
meh + tDiscordCommunity chat
meh + hWhatsAppMessaging app on space 13
meh + jCliqTeam communication on space 14
ShortcutApplicationDescription
meh + cClaudeAI assistant on display 2, space 18
meh + lPerplexityAI search engine
meh + iStructuredTask and time management
meh + wLibreOfficeOffice suite
meh + pFoxit PDF ReaderPDF reader
meh + oPreviewmacOS preview app
meh + msuperwhisperVoice input
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 + 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 + 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