The Nerd Font icons in the earlier waybar config got stripped through
a round-trip — the wifi format was rendering as two spaces and the
others as empty. Reinstate them with the cleaner mdi-wifi /
mdi-ethernet / mdi-wifi-off codepoints (U+F05A9 / F0200 / F05AA) which
render single-colour and read more as outline glyphs than the busier
FontAwesome originals.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Click the ⏻ glyph on the right edge of the bar; a fuzzel dmenu pops up
with Lock / Logout / Reboot / Shutdown. Lock runs hyprlock, logout
exits Hyprland, the others go through systemctl. Hover state turns the
icon base08 (red) as a soft warning.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Updates stylix.cursor and the three places that hardcode the cursor
name as env vars / hyprctl arg / XCURSOR_PATH so they stay aligned.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adwaita's scalable/places ships only the generic folder.svg, so
Downloads, Pictures, Music etc. all rendered as the same icon. Copy
Papirus' places at every size into WallpaperAdwaita and recolour the
Papirus blues to the stylix primary. Declare the sized places
directories in index.theme so GTK actually looks at them.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Now that we're on a different wallpaper with better-derived colours,
the foreground neutralisation isn't needed — let stylix's
wallpaper-derived palette stand on its own.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>