Commit graph

1085 commits

Author SHA1 Message Date
09dcc8cefa stylix: keep wallpaper tints in surfaces, neutralise foreground only
Previous override was too aggressive — neutralising every base00..07
slot stripped the wallpaper character out of backgrounds. Narrow the
override to base03..07 so surfaces (base00..02) keep the tint while
text and muted foreground go neutral. Accents stay wallpaper-derived.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 21:44:07 +01:00
4cb30ada85 stylix: neutralise surface tones while keeping wallpaper accents
stylix.override pins base00..07 to greyscale so backgrounds, sidebars
and body text stop picking up the wallpaper's warm cream / teal tint.
Accent slots (base08..0F) stay wallpaper-derived for character.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 21:24:17 +01:00
d839fe0c3e vscodium: wire through HM programs.vscode so stylix can theme it
Stylix's vscode target injects workbench.colorCustomizations via the
HM programs.vscode module — it can't reach a system-package install.
Move vscodium to programs.vscode with mutableExtensionsDir = true so
GUI-installed extensions stay put, and preserve the six user settings
that aren't colour-related.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 21:16:47 +01:00
f55c0b9df6 stylix: feed stylix base16 colours into the zen and vesktop CSS templates
Neither app has a native stylix target, but their existing matugen
templates are just CSS with Material You placeholders. Read the
templates at Nix-eval time and substitute the placeholders with the
closest stylix.colors.base0X slot (primary=base0D, surface=base00,
on_surface=base05, etc.). Same outcome as the old matugen post-hook,
just sourced from stylix.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 20:08:36 +01:00
8ea4e666cc gnome: revert qt.platformTheme to "gnome"
The deprecation warning suggested "adwaita" but 25.11's qt module
doesn't accept that value yet — only gnome/gtk2/kde/lxqt/qt5ct.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 20:03:34 +01:00
2d631c86da gnome: route headerbar CSS through stylix.targets.gtk.extraCss
Plain gtk.gtk{3,4}.extraCss is silently dropped once stylix owns the
theme — stylix prints an evaluation warning and writes nothing. Move
the headerbar-shrink customisations to stylix.targets.gtk.extraCss so
they actually apply.

Also switch qt.platformTheme from the deprecated "gnome" to "adwaita".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 19:59:19 +01:00
7d5965a884 waybar: reference stylix @base00..05 tokens instead of hardcoded hex
Stylix's waybar target injects @define-color base00..base0F at the top
of style.css; our hardcoded RGB values were ignoring them. Swap the
hand-picked greys for the stylix tokens so the bar follows the
wallpaper palette.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 19:56:05 +01:00
7881dedec0 gnome: drop wallpaper dconf entry — stylix sets it
Stylix's gnome HM target writes the same desktop.background picture-uri.
Conflict resolved by letting stylix own it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 19:47:25 +01:00
b08c74f361 hyprland: let stylix own hyprpaper.conf
Stylix's hyprpaper target writes the same wallpaper we were setting by
hand. Removing our home.file resolves the managed-file conflict.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 19:46:15 +01:00
1bf08d2097 stylix: full migration off matugen
Flips stylix.autoEnable on so every supported target picks up colours
from the wallpaper-derived base16 palette, and tears out the per-app
matugen plumbing it replaces:

- fred.nix: drop the matugen config.toml block and the .keep files;
  move btop and ghostty to programs.* with the colour-bearing options
  removed (stylix owns those).
- gnome.nix: remove the matugen and jq packages, the hand-written
  gtk.css home.file overrides (replaced by gtk.gtk{3,4}.extraCss layered
  on top of stylix's theme), the WallpaperShell user-themes override,
  and the gtk-theme/cursor-theme/accent-color dconf entries that stylix
  now writes.
- stylix.nix: add a home.activation hook that recolours Adwaita folder
  SVGs using stylix.colors.base0D and pulls in Papirus mimetypes —
  same outcome as the old matugen post-hook but driven by stylix.
- common.nix: drop the matugen invocation from the `update` alias.

Leftover matugen-only behaviour intentionally dropped: Vesktop CSS,
the GNOME accent hue-mapping, the VSCodium colour-merge (stylix's
vscode target handles that natively). Templates in templates/ are kept
on disk for now; can be removed in a follow-up.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 19:44:19 +01:00
727eefb20a Update hosts/FredOS-Macbook.nix 2026-05-11 09:30:36 -07:00
0d08ab10e9 hyprland: drop the snap config — too subtle to be useful
Alignment snap fires only at the very last few pixels of drag with no
visual feedback. Not what we wanted; revert.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 15:15:52 +01:00
a2d51e3625 hyprland: actually enable the floating-window snap (the previous commit
ended up just toggling blur back on)

Adds the general.snap block — alignment snap to screen edges and other
floating windows with a 10px gap.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 15:10:56 +01:00
a8139890c5 hyprland: enable floating-window edge snap
Drag-to-align for floating windows — they'll snap to monitor edges or
to nearby floating windows when dragged close, with a 10px gap. Doesn't
do GNOME-style "drag to edge to maximize/half-snap"; that's not in
Hyprland yet.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 15:10:20 +01:00
eb5e3915a9 stylix: configure sans/serif fonts, drop fuzzel font override
Stylix's fuzzel target writes main.font from stylix.fonts.sansSerif and
collided with our explicit FiraMono. Pin sansSerif/serif to Inter
(cleaner than DejaVu) and remove the per-app font from fuzzel so stylix
can apply consistently.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:44:50 +01:00
783d32264e hyprland: drop hardcoded fuzzel colors — stylix owns them now
Phase 1 of the stylix migration enabled targets.fuzzel.enable, which
defines programs.fuzzel.settings.colors. Our hand-picked dark colors
collided with stylix's wallpaper-derived ones. Remove ours so stylix's
take effect.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:42:08 +01:00
90c9d16d62 stylix: don't double-import the HM module
Stylix's NixOS module already wires homeModules.stylix into each
home-manager user via its nixos/common.nix. Importing it again ourselves
produced "stylix.base16 is read-only, set multiple times" at evaluation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:37:30 +01:00
cc4216117a stylix: phase 1 — add input and target waybar/fuzzel/mako/hyprlock/hyprland
Adds nix-community/stylix on its release-25.11 branch (master references
options that don't exist in 25.11's nixpkgs). autoEnable=false so
matugen keeps owning every app it currently themes; we only opt in to
the five targets matugen doesn't cover.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:32:18 +01:00
56e6041670 hyprland: theme fuzzel, bind Super+L to hyprlock
Moves fuzzel from system package to home-manager so we can give it a
dark/translucent look matching the waybar. Frees Super+L (was a
redundant movefocus-right that arrow keys already cover) and points it
at hyprlock for screen locking.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 12:50:51 +01:00
772073454d hyprland: start waybar via systemd user unit, not exec-once
exec-once raced Wayland session init — waybar tried to connect before
the display was ready and exited silently. Enable HM's
programs.waybar.systemd.enable so the unit waits on
graphical-session.target.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 12:46:53 +01:00
4940a6f44a hyprland: fix 0.55.0 option/dispatcher renames
Confirmed against the live 0.55.0 binary:
- misc:vfr → debug:vfr (release notes were right; my earlier probe was
  on the still-running 0.52.1 process, which is why I thought debug:vfr
  didn't exist)
- togglesplit isn't a top-level dispatcher anymore; it's a dwindle
  layoutmsg argument

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 12:40:52 +01:00
f88c7a19e0 hyprland: prefer native Wayland backends in client apps
Adds the standard env-var set so Electron, Mozilla, Qt, SDL and Java
apps use Wayland directly instead of XWayland. Improves Vesktop,
VSCodium, Zen, and anything Qt; doesn't touch Hearthstone (not in any
of these families).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 12:33:47 +01:00
333577331a hyprland: keep misc:vfr — 0.55.0 didn't actually move it
Release notes claimed misc:vfr moved to debug:vfr but the live compositor
returns "no such option" for debug:vfr and still exposes misc:vfr. Move
it back.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 12:26:30 +01:00
5a2b5954fa hyprland: drop duplicate portal from extraPortals
programs.hyprland.portalPackage already registers the hyprland portal's
systemd user unit. Listing the same portal in xdg.portal.extraPortals
made nixos-rebuild fail at user-units symlink creation. Keep the gtk
portal there since that one isn't otherwise registered.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 12:25:00 +01:00
7859ac8589 hyprland: use the Adwaita cursor to match the GNOME session
Sets XCURSOR_* and HYPRCURSOR_* in Hyprland's env list so apps inherit
the same Adwaita cursor the GNOME session uses, and calls
`hyprctl setcursor` at exec-once to apply it compositor-side too.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:51:45 +01:00
92de9cc76b hyprland: adapt to 0.55.0 breaking changes
0.55.0 keeps traditional config syntax — Lua is added, not required —
but two of our settings broke:
- misc:vfr moved to debug:vfr
- dwindle:pseudotile removed (it was a no-op anyway)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:49:55 +01:00
968f7d8be5 hyprland: pin to upstream flake for 0.55.0 (includes resize-lag fix)
nixos-25.11 ships 0.52.1; the fix for XWayland resize lag landed in
0.52.2, and upstream is already on 0.55.0 by now. Add hyprwm/Hyprland
as a flake input and route programs.hyprland and the HM wayland module
through it. Doesn't `follows` our nixpkgs — upstream Hyprland needs
newer stdenv than 25.11 provides.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:48:36 +01:00
9dda5b6371 hyprland: force zero-scaling for XWayland surfaces
Long-shot attempt at the Hearthstone-after-resize lag. Tells Hyprland
not to scale XWayland windows compositor-side, which is the
better-tested path for Wine games and sometimes makes resize-state
recovery less broken.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:26:55 +01:00
75c3674b77 hyprland: stop windows yanking the cursor on focus changes
Two pairings:
- misc.focus_on_activate = false so apps demanding attention show as
  urgent instead of stealing focus
- cursor.no_warps = true so Hyprland never teleports the cursor onto a
  newly-focused window

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:17:03 +01:00
deaa4b8d9c hyprland: replace bundled waybar config with a minimal Hyprland one
The bundled waybar config assumes sway and pulls in modules that don't
apply here (battery, backlight, sway/*), tries to read /dev/input/* the
user can't open, and crashes the media module — which surfaced as
"media stopped unexpectedly" and an unrendered bar.

Switch to programs.waybar with our own settings: hyprland/workspaces,
clock, pulseaudio, network, tray. No IP, no CPU/RAM, no temp, no power
profile. Style is a thin transparent bar, white-on-grey workspace
numbers, FiraMono Nerd Font for the volume/network glyphs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:53:59 +01:00
4754c5ceb0 hyprland: drop cursor flips that didn't move the needle
no_hardware_cursors and enable_hyprcursor were chased while debugging
input latency; neither made a perceptible difference. Falling back to
defaults keeps the config honest about what's load-bearing. vrr=2 and
render.direct_scanout stay — direct_scanout is a real fullscreen win
and vrr=2 is a harmless no-op until a driver update lets it engage.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:46:48 +01:00
3c9678ea74 hyprland: swap wofi for fuzzel, drop animations to 0.1s
wofi reparses .desktop entries on every launch, which is sluggish on a
fat NixOS package set. fuzzel caches its index and opens in ~30 ms.
Also tightens animation speeds from 0.2 s to 0.1 s for a more
instant-feeling desktop.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:45:42 +01:00
e7674db317 hyprland: switch to 180 Hz EDID mode so FreeSync engages
The OC'd 190 Hz mode doesn't advertise FreeSync, which kept VRR pinned
off and may have been contributing to perceived frame-pacing weirdness
even at the higher raw refresh. Drop to EDID-native 180 Hz so VRR can
actually engage; +10 Hz isn't worth losing adaptive sync.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:40:46 +01:00
d1b86e428e hyprland: force software cursors to dodge AMD HW cursor stutter
The AMD HW cursor plane needs an atomic KMS commit per move, which on
some setups micro-stutters. Software cursors get drawn every compositor
frame at 190 Hz and frequently feel smoother — well-attested workaround
for the "cursor still floaty on Hyprland" complaint.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:36:40 +01:00
77e785e8a3 hyprland: disable hyprcursor to test legacy cursor path
Long-shot tweak — hyprcursor adds a theme/scaling layer that some AMD
setups report feels slightly laggier than the legacy XCursor path.
Worth a try while chasing the last bit of cursor smoothness gap vs
GNOME/mutter.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:27:57 +01:00
d8341ea106 hyprland: pin compositor to dGPU on FredOS-Gaming
This box has both a Ryzen iGPU (card0, 1002:164E) and a Navi 22 dGPU
(card1, 1002:73DF). The monitor is on the dGPU, but aquamarine's
auto-selection wasn't sticking — client buffers were getting allocated
on the iGPU and PRIME-copied across every frame, surfacing as cursor
lag and Zen rendering at a visibly lower effective refresh.

Forces AQ_DRM_DEVICES, WLR_DRM_DEVICES and DRI_PRIME at the Hyprland
session so the compositor and GL/Vulkan clients all live on card1.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:24:42 +01:00
5802e0dbef hyprland: clean up frame pacing for smoother cursor
allow_tearing was causing visible tearing during window drags, and
misc.vrr=2 was set but never actually engaging — the G34WQCP doesn't
advertise FreeSync on the 190 Hz OC mode. Both were feeding Hyprland's
pacing logic bad signals.

Drops allow_tearing + the matching immediate windowrules, sets vrr=0
explicitly, and pins cursor.no_hardware_cursors=0 to make sure the HW
cursor plane is in use.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:18:49 +01:00
ddcc76efeb hyprland: drop hyprspace, cut compositor latency
Removes the Hyprspace plugin entirely — blank-window snapshots from the
0.52.0/0.52.1 ABI skew aren't worth the patch-pin work right now. With
the overview gone, also rebalances the desktop for input latency:

- decoration.blur disabled (two passes at 3440x1440 were the biggest
  per-frame GPU cost)
- render.direct_scanout = true so fullscreen apps bypass the compositor
- misc.vrr = 2 (always on) instead of fullscreen-only

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:14:49 +01:00
64a3051b82 hyprland: revert to plugins list so the compositor boots
Native `plugin = ...` crashes Hyprland during config parse because the
nixpkgs hyprspace is built against 0.52.0 and the compositor is 0.52.1.
The runtime `hyprctl plugin load` path tolerates the skew, so route the
plugin back through HM's plugins option. Super+Space won't fire on every
boot until we land a more robust load mechanism, but the session is
usable again.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:10:00 +01:00
a42993d4fd hyprland: load hyprspace inline instead of via exec-once
home-manager's `plugins` option emits `exec-once = hyprctl plugin load`,
which races IPC socket readiness on startup and silently no-ops — `hyprctl
plugin list` showed nothing even though the .so existed and loaded fine
when invoked manually. Switch to Hyprland's native `plugin = /path`
directive in extraConfig so the load happens synchronously during config
parse, before any binds referencing its dispatchers.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:06:03 +01:00
db71e15904 hyprland: move overview to Super+Space, drop bindr trick
Bare-Super tap detection didn't actually trigger Hyprspace, and the
SUPER_L release-bind was firing on every combo release anyway. A plain
combo bind sidesteps both problems; Super+Space is free since the
launcher moved to Super+R.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:03:20 +01:00
4c15eeea45 hyprland: defer overview:toggle through hyprctl dispatch
Home-manager loads plugins via exec-once, so dispatchers registered by
Hyprspace don't exist when the config is first parsed — the bindr was
silently dropped with "invalid dispatcher". Route it through `exec,
hyprctl dispatch` instead so the lookup happens at keypress, after the
plugin is up.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:01:13 +01:00
0c49b5547d hyprland: cut input latency and speed up animations
Enables VRR for fullscreen, disables compositor VFR, and gates tearing
behind allow_tearing + immediate windowrules for Steam and gamescope.
Animations drop to 0.2s via a snappier bezier.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 09:58:29 +01:00
a215b31b8b hyprland: pin DP-2 to 3440x1440@190 on FredOS-Gaming
The default `,preferred,auto,1` line was selecting 60 Hz on the
G34WQCP. Pin the OC'd 190 Hz mode explicitly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 09:54:54 +01:00
2494c4c785 hyprland: add hyprspace overview, rebind launcher to Super+R
Loads hyprlandPlugins.hyprspace via the home-manager plugins list and
binds overview:toggle to release-of-Super. Frees Super+Space and moves
wofi to Super+R to match the new gesture.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 09:49:09 +01:00
forgejo-actions[bot]
c96e532e4f flake: update inputs 2026-05-11 04:01:28 +00:00
61981995ec hyprland: scaffold tiling-first session on FredOS-Gaming
Adds settings/hyprland.nix as a sibling to the GNOME module, gated to
the Gaming host. GDM picks up the new session entry automatically; GNOME
remains the default and can be reselected at login.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 20:03:43 +01:00
forgejo-actions[bot]
6536141f9b flake: update inputs 2026-05-10 04:01:25 +00:00
611ed162c3 ports: forward UDP/2603 to fix DR XP reports
DR_Server binds UDP/2603 in addition to TCP/2603 — that's where the
DSOUND.dll mod's NAT-punched XP-report socket sends client kill XP
back to the server (see ChatCommandHandler.cs / [DLL XP REPORT] path
in the source). The original forward was tcp-only, so every WAN
client's UDP XP packet was dropped at the router. Symptom: every
character stuck at lvl 1/xp 0 regardless of how the client launched.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 19:29:11 +01:00
forgejo-actions[bot]
d24b2db6f5 flake: update inputs 2026-05-09 04:01:27 +00:00