Switch Stylix from release-25.11 to master, which fixes hyprpaper's
wallpaper config generation for 0.8.4 (structured attributes instead
of raw string concatenation).
Move the Stylix module import from common.nix to flake.nix extraModules
so the Mediaserver (on nixpkgs-stable) doesn't pull in options that
only exist in unstable nixpkgs (services.displayManager.generic).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The mkForce wallpaper override (explicit monitor names) and the IPC
startup script (sleep 2 + hyprctl) were stacked workarounds for a
misdiagnosed hyprpaper 0.8.4 bug. Stylix's hyprpaper target (still
auto-enabled) correctly sets preload and wallpaper with the standard
wildcard syntax.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The previous inline shell command had quoting/PATH issues. Replace with
a proper pkgs.writeShellScript that:
- Uses the full hyprctl store path (no PATH dependency)
- Reads the wallpaper from hyprpaper.conf at runtime ($HOME/.config)
- Avoids the Nix string-context conflict from embedding a store path
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hyprpaper 0.8.4 silently ignores wallpaper= directives in the config
on startup — preload= works but the monitor assignment does not.
Add a hyprland.start hook that waits 2s (for hyprpaper to preload the
image) then sets the wallpaper via hyprctl IPC. The image path is read
at runtime from hyprpaper.conf to avoid a Nix string-context conflict
between the stylix image store path and the powerMenu derivation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hyprpaper 0.8.4 doesn't honour the Stylix-generated "wallpaper=,<path>"
empty-monitor wildcard — DP-2 was found but had no target. Override with
explicit monitor names (DP-2 on Gaming, eDP-1 on Macbook) using
config.stylix.image to avoid a circular reference through the preload list.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Explicitly start hyprland-session.target in our hl.on("hyprland.start")
handler so waybar (and other session services) launch even if HM's
dbus-update-activation-environment chain fails silently upstream
- Power menu: replace plain spaces with bash $'\uXXXX' nerd font glyphs
(fa-lock, fa-sign-out, fa-refresh, fa-power-off)
- Waybar tray-handle: use builtins.fromJSON to embed U+E0B2 powerline
filled left-arrow as the drawer indicator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hl.dsp.workspace.change() does not exist; workspace switching uses
hl.dsp.focus({ workspace = N }).
hl.dsp.window.move_to_workspace() does not exist; moving a window to a
workspace silently uses hl.dsp.window.move({ workspace = N, follow = false })
(follow = false sets the silent flag in the C++ dispatcher).
hl.dsp.window.fullscreen() takes a 'mode' field, not 'state'; drop the
stale argument so the call uses the correct toggle-fullscreen default.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Stylix's Hyprland target injects settings.{general,decoration,group,misc}
as top-level keys. In hyprlang mode these render as section blocks, but
in Lua mode (configType = "lua") they become hl.general(), hl.decoration(),
etc. — functions that don't exist, causing an emergency-mode config error.
Disable stylix.targets.hyprland and absorb all its colours into
settings.config.{general,decoration,group,misc} where they are correctly
rendered inside the single hl.config({}) call.
Also add a home.activation script that removes any stale hyprland.conf
(auto-generated by Hyprland before hyprland.lua was first placed) so the
autogenerated-config warning banner can never persist across restarts.
Keep services.hyprpaper.enable = true since it was previously set by the
now-disabled Hyprland target.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch Gaming and Macbook to home-manager unstable which has
configType = "lua" support. Converts the full Hyprland config from
deprecated hyprlang to native Lua:
- flake: add home-manager unstable input for Gaming/Macbook
- hyprland.nix: configType = "lua", settings.config for static sections,
extraConfig for env/startup/animations/binds/window-rules
- hosts: monitor config updated to hl.monitor({}) table format
Eliminates the windowrulev2 deprecation banner.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
extraConfig is parsed as hyprlang by the HM module, not Lua — Lua syntax
caused parse errors. windowrulev2 in settings is the correct approach.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace deprecated windowrulev2 hyprlang syntax with the Hyprland 0.55+
Lua hl.window_rule() API via extraConfig.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The Battle.net agent leaks a tiny floating XWayland window (steam_app_0,
empty title, 160x20) that isn't captured by the Wayland tray. Send it
to the special workspace silently.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
wob (Wayland OSD Bar) runs as a systemd user service listening on a FIFO.
Keyboard brightness keybindings now pipe the new brightness percentage to
the FIFO after each adjustment, showing a progress bar overlay.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
swayosd-client does not support --keyboard-brightness; use brightnessctl
directly to control smc::kbd_backlight.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add XF86KbdBrightnessUp/Down keybindings (Macbook-only) using swayosd
for consistent OSD behaviour with screen brightness and volume
- Enable hardware.acpilight for udev rules allowing video group to write
to /sys/class/leds/ (keyboard backlight)
- Add fred to the video group so brightnessctl/swayosd can write backlight values
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename settings/gnome.nix to settings/desktop.nix (file no longer
has anything to do with GNOME)
- Replace nautilus with nemo — starts fast, has a hamburger menu,
no Tracker3/Mutter D-Bus dependencies
- Exclude thunar (pulled in by XFCE) via environment.xfce.excludePackages
- Remove nautilus Tracker dconf workaround (no longer needed)
- Update $mod+E keybind and common.nix import accordingly
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces bare pamixer/brightnessctl key bindings with swayosd-client
so volume and brightness changes show an on-screen indicator bar.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Outside GNOME, Tracker3 isn't running. Nautilus connects to it at
startup for recursive search, hitting a D-Bus timeout and causing
~4s launch delay. Setting recursive-search=never prevents the attempt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
qt.platformTheme conflicted with stylix's qt5ct setting after
removing GNOME. Stylix handles Qt theming so the block is redundant.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove GNOME DE (gnome-keyring, tracker, extensions, shell dconf
settings) and replace with a lightweight XFCE fallback session so
ly offers an alternative if Hyprland fails after an update. Add
nautilus explicitly as a standalone package. Eliminates the keyring
unlock prompt that appeared in Nautilus on Hyprland sessions.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Deploys code-server on FredOS-Mediaserver (port 4444, user fred) with
Authelia one_factor auth and nginx reverse proxy. Includes claude-code
in system packages for use in the integrated terminal.
Also fixes anyrun launcher width to absolute 350px (was a tiny fraction).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>