Commit graph

1376 commits

Author SHA1 Message Date
b52f730889 macbook: re-enable touchpad when DWT service stops
Add ExecStopPost to write 0 to bcm5974's inhibited sysfs node,
so the touchpad is always restored even if the script is killed
mid-inhibit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 17:41:42 +01:00
951ba2b850 macbook: revert libinput quirk — it permanently inhibits the touchpad
The AttrKeyboardIntegration=internal quirk caused libinput's native
DWT to permanently disable the touchpad. Keep the custom script.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 17:39:38 +01:00
22c1b35360 macbook: add libinput quirk for native DWT on bcm5974
Tell libinput the Apple keyboard is internal so its built-in
disable-while-typing pairing works despite keyboard and touchpad
sharing the same USB device. Keep the custom DWT script as fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 17:36:04 +01:00
20f70dd27a Fix dwt ignoring modifiers like shift, alt etc. 2026-05-19 17:31:53 +01:00
ced2ff65dc Add autoupdate. 2026-05-19 17:10:17 +01:00
d66558efae macbook: remove zen warmup service; drop XFCE fallback session
The zen-beta headless warmup was causing system unresponsiveness on
the MacBook's limited hardware. XFCE fallback is unnecessary with
Hyprland's emergency mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 17:09:30 +01:00
6f3845aa1b mediaserver: enable podman for bazarr-sync container policy
Standalone podman run calls need virtualisation.podman.enable to get a
valid /etc/containers/policy.json. OCI container services got this
implicitly but our direct podman invocations did not.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 10:54:44 +01:00
39d5a95866 mediaserver: fix bazarr config path (YAML, not INI)
Bazarr stores its config at /var/lib/bazarr/config/config.yaml, not
the old /var/lib/bazarr/data/config/config.ini path. Use yq to extract
auth.apikey from the YAML. Fixes both bazarr-sync and arr-interconnect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 10:51:53 +01:00
d83db8c555 mediaserver: add bazarr-sync for automatic subtitle synchronisation
Hourly timer syncs only recently added content (last 2h) by querying
Radarr/Sonarr APIs for new items. Weekly full-library sync runs Sunday
04:00 as a catch-all. Both run the bazarr-sync container via podman.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 10:46:36 +01:00
forgejo-actions[bot]
c929e90e82 flake: update inputs 2026-05-19 04:01:45 +00:00
80eda70088 macbook: reduce DWT timeout from 500ms to 300ms
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:32:51 +01:00
8285fce24a macbook: add DWT daemon for bcm5974 touchpad
Hyprland's built-in disable-while-typing doesn't work on this
MacBook because the keyboard and touchpad share the same USB
device, breaking libinput's device pairing. Add a lightweight
Python daemon that watches keyboard events and inhibits the
touchpad via sysfs for 500ms after each keypress.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:30:00 +01:00
2ed677bd8f Revert "macbook: disable touchpad while typing"
The per-device config block used invalid syntax for this Hyprland
version. Revert while we find a working approach.

This reverts commit dc7845a.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:16:33 +01:00
dc7845a7b9 macbook: disable touchpad while typing
The bcm5974 trackpad is classified as a mouse by Hyprland, not a
touchpad, so the global touchpad DWT setting had no effect. Use a
per-device config block to apply disable_while_typing directly to
the bcm5974.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:11:52 +01:00
28bac0dd46 macbook: disable touchpad while typing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:03:49 +01:00
8c1f248fb9 macbook: add warmup service for Zen Browser
Start Zen headless for 3s at login to prime the page cache and shared
libraries on the slow MacBook Air hardware.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 17:02:53 +01:00
ca6699f6f4 macbook: drop unnecessary RestartSec from ghostty daemon
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 16:58:00 +01:00
b32bb900c0 macbook: always restart ghostty daemon after window close
Ghostty exits cleanly when the last window closes, so on-failure
never triggers a restart. Switch to Restart=always with a 1s delay
so the headless instance respawns and stays warm.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 16:57:05 +01:00
38bd660ddb macbook: add warmup services for Ghostty and Nemo
Start Ghostty headless and pre-warm Nemo at login so both launch
faster on the aging Haswell MacBook Air.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 16:53:12 +01:00
111e8183d0 hyprland: remove snixembed — breaks native SNI tray icons
snixembed conflicts with waybar's tray, causing all SNI items
(Vesktop, nm-applet) to disappear. Battle.net's tray icon doesn't
use X11 embed protocol anyway, so snixembed doesn't help.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 16:04:45 +01:00
5a1cc4a7ca hyprland: add snixembed for X11 tray icon bridging (Battle.net)
Wine/XWayland apps use X11 embed tray protocol which waybar's SNI-based
tray doesn't see. snixembed proxies X11 tray icons as SNI items.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 15:32:34 +01:00
099b312df6 common: set home-manager.backupFileExtension for safe activation
Stylix on the media server tries to manage files (GTK config,
fontconfig, etc.) that already exist, causing HM activation to fail.
Setting backupFileExtension lets HM move conflicts to .hm-bak.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 14:08:29 +01:00
b713d64211 stylix: enable on media server via stylix-stable (release-25.11)
Add a stylix-stable input pinned to release-25.11 so the media server
gets Stylix theming without pulling in unstable nixpkgs. btop is now
managed by Home Manager on all hosts with Stylix auto-theming.

Desktop-only config (Zen/Vesktop CSS, GTK icons) is guarded behind
an isDesktop check in stylix.nix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 13:53:19 +01:00
f7f258651e hyprland: remove dead config (WLR_DRM_DEVICES, pamixer, stale CSS, old activation)
- WLR_DRM_DEVICES: wlroots env var ignored by Aquamarine, AQ_DRM_DEVICES already set
- pamixer: not referenced anywhere, volume handled by swayosd-client
- #network.disconnected CSS: no network module in waybar config
- #custom-tray-toggle CSS: renamed to #custom-tray-handle to match actual module
- removeOldHyprlandConf activation: one-time migration already completed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 13:25:07 +01:00
5655987f66 hyprland: remove GCC 15 LD_PRELOAD workaround — no longer needed
Hyprland 0.55.0 now links GCC 15.2.0 natively, so the symlinkJoin
wrapper that injected LD_PRELOAD for the GLIBCXX_3.4.34 symbol is
obsolete.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 13:09:19 +01:00
059e847b6e anyrun: reset-failed before daemon restart in power menu
systemctl stop/start in quick succession hits the start-rate limiter,
leaving the daemon in a failed state. Reset the failure counter before
restarting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:58:48 +01:00
e77f4791be anyrun: fix upstream flake integration and use systemd daemon
Fix config for upstream anyrun HM module (no margin option, use
package refs for plugins). The upstream module provides a systemd
user service for the daemon with Restart=on-failure, so remove
manual daemon management from Hyprland startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:51:41 +01:00
9f2a5a2868 anyrun: switch to upstream flake for working daemon mode
Replace nixpkgs anyrun with the upstream anyrun-org/anyrun flake,
which provides its own HM module and plugin packages. The nixpkgs
build had a broken daemon (GTK activate crash). Re-enable daemon
startup and close/open toggle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:48:00 +01:00
402f2f36f5 anyrun: revert to standalone mode — daemon crashes on GTK init
anyrun 25.12.0's daemon mode crashes with a GLib-GIO activate error.
Revert to the reliable standalone killall toggle until upstream fixes
the daemon.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:37:55 +01:00
0519efdf01 anyrun: fix config and restore toggle behavior
terminal field still expects Option<T> wrapper (Some("ghostty")).
Restore close-or-open toggle for Super+R — with the daemon running,
`anyrun close` correctly fails when no window is open.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:35:07 +01:00
76bef27ac7 anyrun: restart daemon after standalone power menu use
The power menu runs anyrun in standalone stdin mode, which kills the
daemon. Explicitly quit the daemon before, then restart it after the
standalone invocation so the launcher stays fast.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:30:28 +01:00
a673881fa5 anyrun: fix launcher bind for daemon mode
Just call `anyrun` directly — the daemon handles window display.
The previous `anyrun close || anyrun` toggle failed because close
returns success even with no window open.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:22:20 +01:00
8ec8e4c876 anyrun: switch to daemon mode and fix config warnings
Start `anyrun daemon` at Hyprland launch for instant open times.
Replace `killall anyrun` with `anyrun close` to dismiss without
killing the daemon. Fix applications.ron config — newer anyrun
expects plain values, not Option<T> wrappers (Some(8) → 8).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:20:02 +01:00
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
4fa6dc9f88 remove VSCodium and nix-ld from config
VSCodium (with its nix-ld/LD_LIBRARY_PATH wrapper for native extension
addons) has been removed from home-manager. nix-ld is no longer needed
on Gaming or Macbook without it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:01:07 +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
forgejo-actions[bot]
fd5258c9ad flake: update inputs 2026-05-18 04:01:44 +00: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
f5183a7605 gaming: set max-jobs = 1 to allow trivial local builds
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>
2026-05-17 22:32: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
62a1f9a38c gaming: remove lutris (using Faugus instead)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 21:14:18 +01:00
7bd43f6baf nix: add i686-linux to remote build machine systems
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>
2026-05-17 21:12:53 +01:00
49c4a93fa8 gaming: force all nix builds to remote media server
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>
2026-05-17 21:01:00 +01:00
83ab64e35b flake: switch Gaming and Macbook to nixpkgs unstable
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>
2026-05-17 20:46:23 +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