Commit graph

185 commits

Author SHA1 Message Date
9d67da0d7c revert: remove 7 Days to Die window rule — not needed
The floating issue was caused by the game's Unity display mode being
set to Windowed (mode 3), which locks X11 size hints (min=max) and
prevents any tiling WM from resizing it.  Fixed by switching the
game to Fullscreen Window (mode 1) in the Wine registry instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 20:56:54 +01:00
3f1729b3b9 hyprland: use tile action for 7 Days to Die window rule
float = false isn't a valid Lua API action; tile = true is the correct
way to force an XWayland window out of floating.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 20:38:08 +01:00
752d6c49a0 hyprland: force 7 Days to Die to tile instead of float
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-20 20:33:33 +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
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
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
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
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
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
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
92c4233b46 2026-05-14 14:58:13 +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