The Cozy macOS Status Bar.
Barista is a curated configuration for SketchyBar that balances aesthetics with power-user features. It is designed to be shared, easy to install, and configurable for different environments (Work vs. Home).
- Dynamic Island: Context-aware popups for volume, brightness, and music.
- Profiles: Switch between "Work", "Personal", and "Cozy" modes instantly.
- Modular Architecture: Lua-based configuration system decomposed for high performance and testability.
- Integrations: Optional support for Yabai (tiling), Skhd (hotkeys), Journal (org-mode capture/inbox), NERV (transfer queue + host monitoring), and Halext-org (task dashboard). Integrations are toggled per profile.
To install Barista and its dependencies:
# Clone the repo
git clone https://github.com/scawful/barista.git ~/.local/share/barista
# Run the installer
~/.local/share/barista/scripts/install.shThe installer will guide you through:
- Installing dependencies (SketchyBar, Lua, Fonts).
- Choosing a Profile (see below).
- Configuring Yabai/Skhd (optional).
| Profile | Description | Yabai | Vibe |
|---|---|---|---|
| Minimal | Clean, distraction-free. Good for new users. | Optional | ⚪️ Clean |
| Girlfriend | Warm colors, larger text, simplified metrics. No scary tiling. | Disabled | 🧸 Cozy |
| Work | High info density, meeting indicators, calendar integration. | Required | 💼 Pro |
| Personal | The default dev setup. Code, media, and tiling. | Required | ⚡️ Fast |
Barista includes optimized configurations for Yabai (window manager) and Skhd (hotkeys). The installer can automatically set these up for you.
- Enable: Run installer and select "Window Manager Mode: Required".
- Disable: Run
./scripts/set_mode.sh <profile> disabled.
Recommended: Make the SketchyBar runtime a symlink to the Barista repo so edits are live:
# If ~/.config/sketchybar already exists, back it up first
mv ~/.config/sketchybar ~/.config/sketchybar.bak
ln -s ~/src/lab/barista ~/.config/sketchybarPersonal overlay: For per-machine additions (e.g. Oracle of Secrets integration, workflow shortcuts), use the overlay in ~/src/config/dotfiles/sketchybar-overlay/. Apply it with:
~/src/config/dotfiles/scripts/apply_sketchybar_overlay.sh
Optionally pass the target dir (default: ~/.config/sketchybar). If the runtime is a symlink to lab/barista, the overlay is written into the repo. See config/dotfiles/sketchybar-overlay/README.md.
Skhd and yabai_control: Space/layout keybindings in skhd call yabai_control.sh. To support both "Barista deploy" and "dotfiles-only" setups, use the wrapper: ~/.local/bin/yabai_control_wrapper.sh (from config/dotfiles/bin/yabai_control_wrapper.sh). Ensure that wrapper is on your PATH and installed (e.g. dotfiles link bin/ to ~/.local/bin).
LaunchAgents: The single place to edit the Barista orchestrator (SketchyBar + yabai + skhd at login) is lab/barista/launch_agents/. See launch_agents/README.md. Recommended: use either this LaunchAgent or brew services for the three daemons, not both.
# Switch to Cozy mode
./scripts/set_mode.sh girlfriend disabled
# Switch to Work mode
./scripts/set_mode.sh work requiredEdit ~/.config/sketchybar/state.json to toggle widgets and appearance, or use barista_config.lua for overrides that survive the GUI. See docs/guides/CUSTOMIZATION.md for state.json, profiles, themes, and fonts; docs/architecture/SKETCHYBAR_LAYOUT.md for which file defines each bar item. To validate theme files: lua scripts/validate_theme.lua [theme_name].
{
"profile": "minimal",
"widgets": {
"battery": true,
"wifi": false
}
}Populate customizable Work Google app entries in the Apple menu:
# Use defaults
./scripts/configure_work_google_apps.sh --replace
# Use workspace domain routes
./scripts/configure_work_google_apps.sh --domain yourcompany.com --replace
# Use custom app list
./scripts/configure_work_google_apps.sh --from-file ./data/work_google_apps.example.json --replaceInstall missing fonts, repair state.json to match available families, and set a preferred alternate control panel mode:
./scripts/install_missing_fonts_and_panel.sh --yes --panel-mode tuiFor managed/work Macs that should avoid compiled helpers entirely:
./scripts/setup_machine.sh --yes --panel-mode tui --runtime-backend lua
./scripts/barista-debug.sh --lua-only --reloadSee docs/guides/WORK_MACHINE_GEMINI.md for the Gemini-first upgrade flow.
Push the latest repo changes to a remote Mac and apply work profile extras:
./scripts/update_work_mac.sh \
--host user@work-mac.local \
--target origin/main \
--work-domain yourcompany.com \
--panel-mode tui \
--runtime-backend lua- Hover animation: In
state.jsonor inmodules/state.luadefaults,hover_animation_duration(default 8) andhover_animation_curve(defaultsin) control popup hover speed. Lower duration (e.g. 6) for even snappier feel. - Process Batching: Barista minimizes process forks. Space switching uses a batched diff-update path (40+ forks reduced to 1). C helpers like
system_info_widgetbatch multiple updates into a single call. - Direct Execution: Hot-path C helpers use
execlp()instead ofsystem()to eliminate shell overhead and unnecessary forks. - Modular Load: Configuration logic is split across focused modules (
shell_utils,paths,binary_resolver) to ensure fast initialization. - Tuning: See docs/PERFORMANCE_AUDIT.md for a stability/performance checklist and detailed audit results.
Barista includes a comprehensive test suite of 94+ tests across its Lua modules.
./scripts/barista-verify.sh # Full smoke test (binaries, shell, lua)
lua tests/run_tests.lua # Run Lua unit tests only
./scripts/rebuild.sh --verify # Rebuild all and run tests- Bar not showing? Run
sketchybar --reload. - Icons missing? Run
./scripts/barista-fonts.sh --apply-state --reportand re-run./scripts/barista-doctor.sh --fix. - Need to debug without C/C++ helpers? Run
./scripts/barista-debug.sh --lua-only --reload. - Yabai acting weird? Check
System Settings > Privacy & Security > Accessibility.
Maintained by Scawful. Part of the Halext ecosystem.