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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Two failing services after the channel switch.
automatic-timezoned has been polkit-blocked since well before the
switch — replace with a static Europe/London timezone. Hosts that
travel can override locally if needed.
The vendored crowdsec module's setup unit chowns its config dir to
the (DynamicUser-allocated) crowdsec user via an ExecStartPre+ hack.
On stable's systemd the dynamic user isn't visible to chown via NSS
at that point, so it fails with 'invalid user'. Declaring crowdsec
as a static system user makes systemd use it (DynamicUser becomes a
no-op) and the chown resolves cleanly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
bazaar is a Flathub GUI app store — it has no business on the headless
mediaserver, where it was also pulling flatpak in transitively and
inflating local builds.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Share the wallpaper symlink across all hosts by moving it from gnome.nix
into home-manager/fred.nix, and add matugen templates for btop and the
Homepage dashboard.
The Homepage NixOS module writes custom.css into /etc (read-only), so
bind-mount /var/lib/homepage-custom-css/custom.css over it. A systemd
path unit restarts homepage-dashboard whenever matugen rewrites the
file, so regeneration works without sudo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
No longer accepts an argument — always regenerates colors from
the wallpaper managed by git at ~/.local/share/backgrounds/wallpaper.png.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create gtk3-colors.css matugen template and import it in GTK3
gtk.css so apps like Vesktop get wallpaper-based headerbar colors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add GNOME Shell theme reload (dconf toggle) to recolor-folders.sh
post-hook so colors apply immediately after update or wallpaper
change. Style calendar panel, date menu, pager buttons, and today
highlight. Fix Zen URL bar background mismatch.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Override Zen's source variables (--zen-branding-dark,
--zen-main-browser-background) instead of just derived ones, since
Zen re-computes derived colors from sources. Add sidebar-pane and
top-bar backdrop rules for Nautilus split-header layout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Generates a custom GNOME Shell CSS for the top bar, quick
settings, and notifications using wallpaper palette colors.
Uses the User Themes extension to load it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Zen browser: generates userChrome.css with palette colors
- VSCodium: merges workbench.colorCustomizations into settings.json
- GNOME: maps palette hue to closest accent color preset
- Add jq to GNOME packages for JSON merging
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copies Papirus-Dark mimetype icons into WallpaperAdwaita for
distinctive file type icons (json, python, markdown, etc.)
while keeping the wallpaper-colored folder icons from Adwaita.
Also fixes recolor script to process all place icons, not just
folders (fixes Desktop icon), and improves color mapping.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MoreWaita was overriding the colored Adwaita folder icons with
monochrome symbolic ones. Added adwaita-icon-theme-legacy for
extra coverage of older icon names.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wallpaper file is a Home Manager symlink to the Nix store,
so cp can't overwrite it. Instead, point GNOME directly at the
source image path.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Matugen templates for Ghostty theme and GTK4 colors
- Ghostty uses generated wallpaper theme instead of Catppuccin
- GTK4 CSS imports generated color overrides
- Update alias runs matugen after switch to regenerate colors
- Add wallpaper fish function to change wallpaper + regen colors
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
adw-gtk3-dark makes GTK3 apps match libadwaita dark styling.
matugen generates Material You color schemes from wallpaper.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Change hostname text in powerline prompt from white (ffffff) to
black (000000) on the amber segment
- Switch Ghostty font from JetBrainsMono to MesloLGS Nerd Font for
better vertical centering in powerline pill segments
https://claude.ai/code/session_01PwAXuaoJx7qD5FhVLsn7Sn
Merge home-manager GNOME settings (dconf, keybinds, GTK CSS, wallpaper)
from gnome-hm.nix into settings/gnome.nix so the entire DE config lives
in one file and can be toggled with a single import.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The nix-flatpak flake module was removed (no declarative packages) but
the flatpak service itself is still needed for Bazaar/manual installs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move shell/prompt/font config from apps/fastfetch.nix to settings/shell.nix
- Remove flatpaks.nix and nix-flatpak flake input (no flatpak packages in use)
- Update readme structure and flake inputs table
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
40-char password from a manager is impractical for frequent sudo use.
SSH is already key-only, so local privilege escalation is the only
remaining threat — acceptable on a single-user home server.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds authorised keys for FredOS-Gaming and phone. Disables SSH password
authentication on FredOS-Mediaserver — key auth only going forward.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>