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>
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>
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>
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>
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>
- 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>
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>
- 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>
- Replace hardcoded sleep hook with swayidle in niri autostart
- Replace hardcoded dotfiles path in powermenu bind with plain 'powermenu'
- Replace hardcoded wofi style path with XDG path (~/.config/wofi/style.css)
- Update install.sh to symlink powermenu to ~/.local/bin and wofi/style.css
- Switch display manager from GDM to greetd with tuigreet
- Add logind drop-in for lid close: suspend on battery, lock on AC
- Add scripts/powermenu.sh with logout, restart, sleep, shutdown options
- Create wofi/style.css with Tomorrow Night colors
- Apply Tomorrow Night theme to niri, waybar, mako, alacritty, and wofi