88 Commits

Author SHA1 Message Date
funman300 996f11d333 drop snixembed: waybar provides its own SNI watcher
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>
2026-05-13 14:10:44 -07:00
funman300 be1fa77c6e niri: propagate XDG_CURRENT_DESKTOP to systemd-user and dbus
The niri 'environment' block only affects processes niri spawns
directly. Apps launched via dbus activation or systemd-user (most
.desktop launches go through one of these) get systemd-user's env,
which still has bare 'niri' — set by niri-session BEFORE niri itself
runs.

Adding a one-shot spawn-at-startup that re-imports XDG_CURRENT_DESKTOP
from niri's env into both systemd-user and dbus-activation, after
niri starts. Future dbus-activated apps will see niri:GNOME.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 13:35:23 -07:00
funman300 be1d406b26 niri: set XDG_CURRENT_DESKTOP=niri:GNOME for tray support
Many tray libraries (Electron's, Qt's StatusNotifier) gate icon
creation on a recognised XDG_CURRENT_DESKTOP value. Bare "niri"
makes them silently skip tray creation. Adding ":GNOME" as a
fallback identifier keeps niri primary while letting apps create
their tray icons.

Vesktop and Telegram are confirmed to want tray icons but were
not creating them; this fix unblocks both.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 13:23:42 -07:00
funman300 4303562324 remove nm-applet and blueman-applet autostart
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>
2026-05-13 13:19:07 -07:00
funman300 d1d3c7f0e9 niri: route volume keys through notification wrapper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 12:17:31 -07:00
funman300 45ce4594aa volume: add notification wrapper script
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 11:18:22 -07:00
funman300 cc17e7bab4 docs: implementation plan for volume notification
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 11:09:40 -07:00
funman300 a812715e46 docs: spec for volume change notification
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 10:36:47 -07:00
funman300 0de20dcd12 power-profile: signal fan widget on profile change
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:55:54 -07:00
funman300 841ee432d6 docs: implementation plan for power-profile fan-trigger
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:54:44 -07:00
funman300 5f00fdc2be docs: spec for power-profile→fan sync trigger
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:52:28 -07:00
funman300 096ac3f76a powermenu: route Sleep through suspend-then-hibernate
Aligns the third sleep path (power menu) with the lid handler and
the swayidle 30-min timer — all three now suspend immediately and
hibernate after HibernateDelaySec (30 min).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:30:32 -07:00
funman300 de657685db docs: document one-time hibernation enablement
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:24:50 -07:00
funman300 3eb101771e niri: route swayidle 30-min timeout through suspend-then-hibernate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:22:53 -07:00
funman300 fdcec3dd7d logind+sleep: track lid hibernate config; deploy via install.sh
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:19:51 -07:00
funman300 e3a6986f81 docs: align lid-hibernate spec with PARTUUID-based resume
Spec said `findmnt -no UUID /` and `resume=UUID=` but the script
correctly uses PARTUUID throughout (matches the system's existing
root=PARTUUID= convention).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:18:25 -07:00
funman300 126b03ad26 scripts: guard enable-hibernation against empty root PARTUUID
If `findmnt -no PARTUUID /` returns nothing (root on LVM, no GPT,
unusual mount state) the script would silently write a broken
resume=PARTUUID= line to /etc/kernel/cmdline. Bail with an error
message instead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:18:25 -07:00
funman300 86cfcb0da5 scripts: add enable-hibernation.sh (one-time bootstrap)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:08:28 -07:00
funman300 4e69e155d7 docs: implementation plan for lid-close hibernate
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:05:26 -07:00
funman300 d2e9b47584 docs: spec for lid-close hibernate (suspend-then-hibernate)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 16:59:23 -07:00
funman300 85ef13492e screenshot: revert flameshot, use grim+slurp+satty pipeline
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>
2026-05-06 10:27:16 -07:00
funman300 7a5a276efd docs: track implementation plans for fan-profile auto and flameshot
Both plans were generated during their respective implementation
runs but never committed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 23:18:31 -07:00
funman300 4775c16bb4 docs: fix table alignment after flameshot rename
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 23:18:31 -07:00
funman300 5995139b44 docs: update screenshot tool reference to flameshot
The "Tooling" tables in README.md and ARCHITECTURE.md still listed
grim + slurp after the flameshot swap.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 23:15:16 -07:00
funman300 d9f4538ea7 screenshot: remove old grim/slurp/wofi pipeline (replaced by flameshot)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 23:11:20 -07:00
funman300 004ffe3ec7 niri: bind Mod+Print to flameshot gui
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 23:08:14 -07:00
funman300 4db0d690a9 install: generate flameshot.ini with idempotent guard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 23:04:04 -07:00
funman300 caa34f2fd9 packages: add flameshot 2026-05-05 22:56:58 -07:00
funman300 c44ab1e266 docs: spec for flameshot screenshot tool swap
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 22:52:19 -07:00
funman300 07388423a8 niri: float the Thunar file-operation progress dialog
The progress window for copy/move/delete operations is small and
transient — floating it stops it from taking over a column.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 10:49:55 -07:00
funman300 370b4aa096 fan-profile: drop redundant 2>/dev/null on mapping function call
map_profile_to_strategy never writes to stderr — the suppression was
silencing nothing real and would mislead a future reader.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 11:33:50 -07:00
funman300 9ff1190549 fan-profile: render auto mode and reconcile fw-fanctrl on poll
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 11:29:56 -07:00
funman300 cc164dfa50 fan-profile: route 'auto' menu choice through state file
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 11:24:58 -07:00
funman300 b04357de87 fan-profile: add state path and profile→strategy mapping (unused yet)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 11:05:14 -07:00
funman300 ef4d8cb44d docs: spec for fan-profile auto mode
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 09:58:54 -07:00
funman300 d4daad2071 waybar: reformat config.jsonc (editor auto-format)
Trailing commas added throughout and modules-right expanded to one
key per line. Semantically identical — waybar's JSONC parser accepts
trailing commas.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 09:53:46 -07:00
funman300 c27f72a8a8 packages: add starship; swap swww for awww
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>
2026-05-01 09:53:46 -07:00
funman300 2b4054b44b niri: fix broken spawn-at-startup commands
- swww-daemon → awww-daemon (swww is not installed; awww 0.12.0-1 is)
- polkit-gnome-authentication-agent-1 → absolute path; the binary
  lives in /usr/lib/polkit-gnome/ which is not on PATH

Both daemons were silently failing to start at every login.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 09:53:46 -07:00
funman300 6372695b16 remove orphan files: autostart.sh and tracked mako/config
scripts/autostart.sh was never symlinked or referenced — niri's
spawn-at-startup directives cover everything it launched.

mako/config is gitignored (install.sh generates it from
theme/colors.json) but was still tracked from the initial commit.
The stale ~/.config/mako/config symlink that pointed at the repo
caused install.sh's writes to land back in the repo. Removed both
so install.sh now correctly produces a real generated file in
~/.config/mako/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 09:53:46 -07:00
funman300 c21a2834b7 revert tray drawer feature and remove mouse-battery module
The tray drawer added complexity (drawer config, custom chevron module,
state-feedback CSS) for what amounts to a small visual refinement.
Removed in favour of the original always-visible tray. The mouse-battery
indicator was also removed from the bar.

Deletes:
- waybar/mouse-battery.sh + symlink + install.sh entry
- group/tray-drawer + custom/mouse-battery blocks in config.jsonc
- #custom-tray-arrow rules from style.css
- docs/superpowers/{specs,plans} for the drawer feature

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 09:41:00 -07:00
funman300 2c851c7561 add waybar-restart script and Mod+Shift+B keybind
scripts/waybar-restart.sh: kills waybar, waits for it to exit, then
relaunches detached via setsid. Symlinked into ~/.local/bin and bound
to Mod+Shift+B in niri.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:59:33 -07:00
funman300 1305b1cda1 docs: sync tray drawer plan with shipped color-shift implementation
Plan was originally written assuming `transform: rotate` would work
in GTK 3 CSS; it doesn't. Spec was already updated in 1646dfc; this
brings the plan in line so historical readers see the same approach
across spec, plan, and code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:35:57 -07:00
funman300 67fbea93a4 waybar: drop unused children-class from tray drawer
No CSS rule targets .tray-drawer-child — speculative key with no
consumer. YAGNI cleanup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:30:35 -07:00
funman300 1646dfcd90 waybar: drop unsupported CSS transform from tray drawer arrow
GTK 3 CSS (used by waybar) treats `transform` as a fatal parse error,
so the rotation approach killed waybar entirely. Use a color shift
from @tn-fg-muted to @tn-fg as the expanded-state feedback instead.
Matches the existing style.css convention (battery/cpu/temperature
states all use color shifts, not transforms).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:29:58 -07:00
funman300 8b35df2989 waybar: style tray drawer chevron with rotation feedback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 21:27:00 -07:00
funman300 51353cecd0 waybar: collapse tray icons behind a click-to-reveal drawer
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:22:48 -07:00
funman300 17abe4651e waybar: switch clock display to 12hr format
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:22:48 -07:00
funman300 412034ea9f docs: spec for waybar tray drawer (collapsible icons)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:14:13 -07:00
funman300 7ab5116e5d waybar: work around DST bug in built-in clock module
waybar 0.15.0's clock module reads PST instead of PDT, showing time
an hour behind. Replace with custom/exec calling date directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 10:18:55 -07:00
funman300 a210977a0e xdg: add discord scheme handler for vesktop
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 11:38:52 -07:00