The aerospace workspace plugin had two issues preventing workspace
indicators from properly showing/hiding:
1. The script expected workspace number as $1 but update_freq routine
calls only provide $NAME environment variable. Now extracts from
either source.
2. Using drawing=off to hide workspaces was unreliable - items wouldn't
consistently reappear. Now uses width=0 with cleared icon/label
content to collapse items instead.
Workspaces now properly appear within 2 seconds when windows are
created or moved, without requiring manual sketchybar --update.
Implement Linux-style Ctrl shortcuts (Ctrl+C/V/X/Z for clipboard, Ctrl+N/T/W
for navigation, etc.) while preserving terminal behavior where Ctrl+C sends
SIGINT. Uses per-app NSUserKeyEquivalents to remap Ghostty back to Cmd for
clipboard operations.
Also consolidate aerospace configuration by moving spans-displays preference
from system-level module to home-manager role, allowing full aerospace
configuration to live in home-manager for better modularity.
Integrate SketchyBar status bar with aerospace window manager, providing
a native macOS status bar replacement with workspace indicators and system
monitoring. Key features:
- Add sketchybar.enable option to aerospace module
- Install sketchybar package and fonts conditionally
- Create main sketchybarrc with i3/sway color theme
- Position bar at bottom with 40px bottom gap
- Implement workspace indicators with dynamic visibility:
- Hide empty workspaces
- Show focused workspace with blue highlight
- Show non-empty workspaces with inactive styling
- Use centered icons with fixed 32px width
- Add system monitoring plugins: CPU, memory, disk, battery, volume, clock
- Integrate menu bar extras (Bluetooth, WiFi) as aliases
- Configure aerospace to trigger workspace change events
- Hide native macOS menu bar when SketchyBar enabled
- Set up launchd agent for auto-start
- Use SF Mono Regular 13.0 font matching waybar aesthetic
Migrate all remaining home-manager modules from home/modules/ to home/roles/
to establish a unified role-based configuration pattern. This completes the
migration started in Phase 1.
Changes:
- Phase 1-3: Migrated tmux, plasma-manager, kubectl, and emacs to roles
- Phase 4: Migrated aerospace with custom options under home.roles.aerospace.*
- Phase 5: Migrated i3+sway with shared config and override options
- Phase 6: Removed empty home/modules/ directory
All home configs now import only ./roles with role-based enable options.
Updated flake.nix machine-specific overrides to use new namespaces.
Verified with nix flake check - all configurations build successfully.