hypridle pairs with hyprlock, honors idle inhibitors (video/calls no
longer blank or lock the screen), and is config-file driven. Same staging
as before: blank monitors @5m, lock @10m, suspend-then-hibernate @30m.
Locks via 'loginctl lock-session' so the before-sleep lock is deduplicated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Theme centralization:
- theme/colors.json is now the single source of truth for the palette.
- New theme/generate-theme.py renders, at install time, the three derived
artifacts into ~/.config: colors.css (waybar/wofi @import), mako config,
and hyprlock-colors.conf (hyprlang $tn_* variables).
- theme/colors.css removed from the repo (now generated); install.sh calls
the generator instead of the old inline mako snippet.
- hyprlock.conf sources the generated color file and uses $tn_* variables
instead of hardcoded rgba() values.
- Generator covered by theme/test_generate_theme.py.
Bluetooth:
- Added waybar built-in bluetooth module (config.jsonc + style.css), with
bluez/bluez-utils in packages.txt.
Includes design spec and implementation plan under docs/superpowers/.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds hyprlock/hyprlock.conf with Tomorrow Night colors, replaces gtklock
with hyprlock in packages.txt, and updates install.sh to symlink
hyprlock.conf into ~/.config/hypr/ instead of the old gtklock symlinks.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Discovered while re-adding network-manager-applet that the
networkmanager daemon was already installed locally but never tracked
in packages.txt. Track it now so a fresh install gets both the daemon
and the applet, making the README's NetworkManager activation step
work end-to-end.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
snixembed registered as the StatusNotifierWatcher but its
RegisterStatusNotifierItem implementation didn't accept SNI publishers
— Telegram, Vesktop, blueman-tray, and a libayatana-appindicator test
script all failed to register, leaving waybar's tray empty.
Removing snixembed lets waybar's tray module register itself as both
host AND watcher (when no other watcher exists). After this change,
all three SNI items registered immediately.
Trade-off: legacy XEmbed-based Wine tray icons no longer bridge to
SNI. The Wine System Tray host window rule is kept (still hides the
empty window off-screen) and the comment updated.
- niri/config.kdl: drop snixembed spawn-at-startup; update Wine rule
- packages.txt: drop snixembed (no longer used)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Both daemons were running but not registering SNI items on niri/Wayland,
leaving the waybar tray slot permanently empty. Network is already
accessible via the waybar network module (left-click → networkmanager_dmenu).
Bluetooth GUI (blueman-manager) is still available on demand; only the
applet is dropped.
Tray module stays configured so Electron apps (Discord/Vesktop, Steam,
etc.) still get a tray slot when they're running.
- niri/config.kdl: drop nm-applet and blueman-applet spawn-at-startup
- packages.txt: drop network-manager-applet (nothing else uses it);
keep blueman package for blueman-manager GUI
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Flameshot's portal-based capture path on niri triggers an
xdg-desktop-portal access prompt on every invocation, blocking
the screenshot itself. grim talks to wlr-screencopy directly and
never touches the portal, so no prompt.
Pipeline: slurp (region) → grim (capture) → satty (annotate +
copy + save). satty replaces the wofi action menu by being the
post-capture surface itself.
- scripts/screenshot.sh added
- install.sh symlinks it; flameshot.ini generator removed
- niri Mod+Print → "screenshot"
- packages.txt drops flameshot
- docs tables updated
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
starship is required by fish/config.fish (starship init fish | source)
but was missing — fresh installs would have a broken shell prompt.
swww was listed but the actually-installed wallpaper daemon is awww
(matching the niri/config.kdl change in the previous commit).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- mako/config: generate from theme/colors.json in install.sh instead of
symlinking a static file — mako is the only tool that can't use CSS
variables, so colors.json is now the single source of truth for it
- gtklock/config.ini: remove hardcoded /home/alex absolute path for style;
gtklock falls back to $XDG_CONFIG_HOME/gtklock/style.css by default
- niri: replace inline grim spawn-sh with `spawn "screenshot"` to use the
existing script (which also copies to clipboard via wl-copy)
- install.sh: add screenshot symlink; mako generation step
- packages.txt: add snixembed (used in niri spawn-at-startup, was missing)
- swaylock/config: delete (replaced by gtklock in previous commit)
- .gitignore: add mako/config (now generated, not tracked)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>