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>
pkgs.writeText derivations (used by HM for config files) carry
preferLocalBuild = true, which the remote build hook declines, and
allowSubstitutes = false, which prevents cache hits. With max-jobs = 0
these can never be realised, causing nixos-rebuild to fail.
Setting max-jobs = 1 lets these millisecond-duration text-file writes
run locally with no gaming impact. All real compilation still goes to
the media server via the distributed build configuration.
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>
Lutris and Wine pull in 32-bit (i686-linux) dependencies like openldap.
Without i686-linux in the supported systems list, nix falls back to
building those locally on the gaming PC instead of offloading to the server.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
max-jobs = 0 sends every build to nordhammer.it instead of compiling
locally, so nixos updates never compete with games for resources.
builders-use-substitutes lets the server pull from binary caches directly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
home-manager unstable requires lib/services/lib.nix which was added to
nixpkgs after 25.11. Move the two Hyprland hosts to unstable so the HM
module evaluates against a compatible nixpkgs. Mediaserver stays on stable.
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>
Replaces Vesktop for quick cross-device note-passing. Uses Flatnotes
with auth disabled so Authelia is the only login required.
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>
Newer *arr versions added AuthenticationRequired to config.xml and now
block access if it's not explicitly set. Patch it to
DisabledForLocalAddresses alongside the existing AuthenticationMethod
patch, since Authelia handles auth at the reverse proxy.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Keeps a persistent GTK process alive so subsequent terminal launches
skip full GTK initialisation — new windows open nearly instantly.
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>
Inactivity was 5m which caused logouts while working in VS Code
(no new page loads). Bumped inactivity to 2h, expiration to 12h.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Radarr, Sonarr, Prowlarr, and Bazarr now patch their auth setting to
None on every service start — auth is handled by Authelia at the proxy.
Also updates readme with missing services, settings files, and flake
inputs added since the last readme refresh.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Escape \${q} as ''${q} so Nix doesn't try to evaluate it as a
variable in the activation script string.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a NixOS activation script that patches the crossorigin attribute
onto the Claude Code extension's stylesheet link, fixing broken CSS in
Firefox due to stricter CORS handling than Chrome.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds nixpkgs unstable as a flake input and exposes pkgs-unstable via
specialArgs. code-server uses the unstable package so the Claude Code
extension version requirement is satisfied.
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>