Commit graph

240 commits

Author SHA1 Message Date
88b9c24ffb fix deprecated package names and gtk4 theme warning
- protonvpn-gui → proton-vpn
- xfce.thunar → thunar
- set gtk.gtk4.theme = null to adopt new HM 26.05 default

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 10:48:22 +01:00
cea4d37bfb flake: update Stylix to master and scope import to desktop hosts
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>
2026-05-18 10:44:16 +01:00
d89706736c hyprpaper: remove unnecessary wallpaper workarounds
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>
2026-05-18 10:35:26 +01:00
542d5b1ee6 hyprpaper: fix wallpaper IPC script (use writeShellScript)
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>
2026-05-18 10:18:15 +01:00
e90018d780 hyprpaper: work around 0.8.4 wallpaper= config bug via IPC
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>
2026-05-18 10:13:36 +01:00
18809b9fcb hyprpaper: fix monitor wallpaper mapping for 0.8.4
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>
2026-05-18 10:00:21 +01:00
609e98d681 hyprland: fix waybar, power menu icons, and tray handle glyph
- 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>
2026-05-17 22:58:41 +01:00
0940965a86 hyprland: fix incorrect Lua dispatcher APIs
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>
2026-05-17 22:37:34 +01:00
f4b45c8bda hyprland: fix Lua config errors caused by stylix's Hyprland target
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>
2026-05-17 22:24:12 +01:00
2156ce4138 hyprland: migrate to Lua config (Hyprland 0.55+)
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>
2026-05-17 20:38:30 +01:00
07ee7b86df hyprland: revert to windowrulev2 for Battle.net tray rule
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>
2026-05-17 19:55:18 +01:00
b165b55e82 hyprland: use Lua window rule for Battle.net tray window
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>
2026-05-17 19:51:45 +01:00
e59575780c hyprland: hide Battle.net tray icon window
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>
2026-05-17 19:48:50 +01:00
43c251b90d macbook: add wob OSD for keyboard backlight keys
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>
2026-05-17 13:48:07 +01:00
b97920df45 macbook: fix keyboard backlight keybinds to use brightnessctl
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>
2026-05-17 13:16:12 +01:00
cdb4cbd6c0 macbook: add keyboard backlight key bindings and permissions
- 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>
2026-05-17 12:58:06 +01:00
1d491f4bd2 desktop: enable Plymouth boot splash with Stylix theming
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 11:11:15 +01:00
403bb0bd19 nemo: hide menubar by default
Nemo replaces it with a ☰ toolbar button. Toggle with F8 if needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 17:59:25 +01:00
f59b00a23d desktop: rename gnome.nix → desktop.nix; switch to nemo
- 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>
2026-05-16 17:50:01 +01:00
33b2c3815c hyprland: add swayosd for volume/brightness OSD
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>
2026-05-16 17:37:02 +01:00
60ab2d6b70 nautilus: disable tracker search to fix slow startup
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>
2026-05-16 17:22:47 +01:00
3ea1b316fe desktop: drop qt block; let stylix own qt.platformTheme
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>
2026-05-16 17:18:43 +01:00
7791d3d9e5 desktop: replace GNOME with XFCE fallback; fix keyring popup
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>
2026-05-16 17:14:44 +01:00
b6eb5c055d services: add code-server web IDE at code.nordhammer.it
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>
2026-05-16 10:59:35 +01:00
58342373e8 2026-05-15 22:47:46 +01:00
fb03921bfb 2026-05-15 22:43:39 +01:00
f7f8e531be 2026-05-15 22:38:02 +01:00
19813ee0b1 2026-05-15 22:33:38 +01:00
e5407513a3 2026-05-15 22:27:17 +01:00
8265797d51 2026-05-15 22:20:56 +01:00
ceebf1b3ee 2026-05-15 22:11:57 +01:00
5f01f22088 2026-05-15 12:17:12 +01:00
9ccc3dadf3 2026-05-15 12:12:04 +01:00
6003331e24 2026-05-14 22:12:58 +01:00
a03e7e00d8 2026-05-14 15:19:46 +01:00
9d60f6f307 2026-05-14 15:06:48 +01:00
4c01b93331 2026-05-14 15:00:00 +01:00
92c4233b46 2026-05-14 14:58:13 +01:00
e1fbff024b 2026-05-14 14:46:31 +01:00
dda00ad09f 2026-05-14 13:10:32 +01:00
97bf8cd95a Adding support for macbook hyprland 2026-05-14 10:44:32 +01:00
a6b0bb55bb 2026-05-14 10:23:03 +01:00
fa9c7b9561 2026-05-14 10:21:23 +01:00
678eeccac5 2026-05-14 10:15:56 +01:00
2c0c649e49 2026-05-14 10:07:45 +01:00
cf12b46b6e 2026-05-14 10:05:44 +01:00
857b145df6 2026-05-14 10:04:34 +01:00
c81c9b8a94 2026-05-14 09:56:48 +01:00
d048642309 2026-05-14 09:54:20 +01:00
0626cab971 2026-05-14 09:52:06 +01:00