Modern, Hyprland-inspired macOS setup with a tiling WM, menu bar, fast terminal, themed prompt, and a batteries-included Neovim config.
- Window manager: yabai + skhd
- Bar: sketchybar (spaces with Greek icons, app title, wifi/volume/battery/clock)
- Terminal: Kitty (Catppuccin theme, Nerd Font)
- Prompt: Starship (Catppuccin colors)
- Editor: Neovim with lazy.nvim, LSP, Treesitter, Telescope, gitsigns, lualine
- Install Xcode Command Line Tools (the script will prompt if missing) and Homebrew.
- Clone this repo, then:
bash ./install.sh
Dry-run to preview actions:
./install.sh --dry-run
Notes:
- Approve Accessibility for
yabai
,skhd
, andsketchybar
in System Settings → Privacy & Security → Accessibility. - Set your terminal font to “JetBrainsMono Nerd Font”.
- If you want full yabai features, follow the SIP guidance in the official docs: Disabling System Integrity Protection.
- Focus windows: Alt+H/J/K/L
- Swap windows: Shift+Alt+H/J/K/L
- Move window to prev/next space (and follow): Ctrl+Alt+H/L
- Focus space 1..9: Cmd+Alt+1..9
- Send window to space 1..9 (and follow): Shift+Cmd+1..9
- Focus displays: Ctrl+Alt+P/N
- Send window to other display: Ctrl+Cmd+P/N
- Toggle split orientation: Alt+Space
- Float/unfloat and center: Alt+T
- Fullscreen: Alt+F
- Launch Kitty: Alt+Return
- Launch VS Code: Alt+E
- Raycast: Alt+R
- Lock screen: Ctrl+Cmd+L
- Spaces labeled with Greek icons: α β γ δ ε ζ η θ ι
- Active space highlighted (white icon)
- Front app next to spaces with additional padding
- Right-side modules: wifi (icon-only), volume (event-driven, mute-aware), battery (charging bolt, low-battery red), clock
Files:
~/.config/sketchybar/sketchybarrc
~/.config/sketchybar/scripts/*.sh
- Kitty config:
~/.config/kitty/kitty.conf
(Catppuccin colors, Nerd Font) - Starship prompt:
~/.config/starship.toml
(enabled from~/.zshrc
)
Kitty shortcuts:
- Tabs: Ctrl+J/K (left/right)
- Splits focus: Ctrl+Shift+H/J/K/L
- Create split: Ctrl+Shift+\ (horizontal), Ctrl+Shift+- (vertical)
- Move split: Ctrl+Shift+Alt+H/J/K/L
- Close split: Ctrl+Shift+W
- Rename tab: Ctrl+Shift+R
-
A small LaunchAgent watches macOS appearance and runs
~/scripts/apply_theme.sh
. -
The script writes the current mode to
~/.theme
and triggers asketchybar
theme_change
event (falls back to--reload
). -
Kitty live-switching is supported if you provide:
~/.config/kitty/theme-light.conf
~/.config/kitty/theme-dark.conf
-
Add more actions by creating an executable
~/scripts/on_theme_change.sh
which will receivelight
ordark
as its first arg. -
Config:
~/.config/nvim/init.lua
(lazy.nvim, LSP, Treesitter, Telescope, gitsigns, lualine, Catppuccin) -
Common keys:
- Space+ff: find files
- Space+fg: live grep
- Space+fb: buffers
- Space+fh: help
-
GitHub Actions workflow:
.github/workflows/ci.yml
- Lints shell scripts (shellcheck, shfmt)
- Validates Karabiner JSON (jq)
- Checks Neovim Lua format (stylua)
- Installer dry-run
-
Run locally:
bash scripts/check.sh
-
Repeated Accessibility prompts for
skhd
/yabai
:- Stop service:
skhd --stop-service
(and/oryabai --stop-service
) - Kill lingering process:
pkill -x skhd
/pkill -x yabai
- Remove and re-add in System Settings → Accessibility (add
/opt/homebrew/bin/skhd
and/opt/homebrew/bin/yabai
) - Start service:
skhd --start-service
,yabai --start-service
- Stop service:
-
Space icons not updating: ensure
yabai
is running (yabai --start-service
) and has Accessibility. Switching spaces should trigger updates. -
Volume not updating: the background watcher
volume_watcher.sh
triggersvolume_change
events. If needed, restart sketchybar:sketchybar --reload
.
Tracked highlights:
~/.yabairc
,~/.skhdrc
,~/.zshrc
,~/.gitconfig
,~/.ghci
~/.config/sketchybar/**
,~/.config/kitty/kitty.conf
,~/.config/starship.toml
,~/.config/karabiner/karabiner.json
,~/.config/nvim/**
Brewfile
,install.sh
,.github/**
,scripts/check.sh
Ignored by default: noisy/sensitive app data under ~/.config/**
(Raycast, Joplin, gh, Copilot, etc.).