Commit graph

96 commits

Author SHA1 Message Date
1a8c6adc12 Adding some spaces. 2026-05-13 13:02:01 +01:00
dac2d58209 Adding icons to power menu. 2026-05-13 13:00:51 +01:00
30b652f400 Removed a wrong comment. 2026-05-13 12:51:35 +01:00
0f9755800e Fixing drawer. 2026-05-13 12:49:39 +01:00
93c35015e4 Testing waybar tray. 2026-05-13 12:47:02 +01:00
7abb63698f missing semicolon 2026-05-13 12:09:22 +01:00
18fca17309 Updating Fuzzel. 2026-05-13 12:08:20 +01:00
67cb9fb3ba Update movetoworkspace to Movetoworkspacesilent 2026-05-12 19:33:52 +01:00
ca34fd61c8 waybar: restore network icons with monochrome Material Design glyphs
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>
2026-05-12 12:06:38 +01:00
5caf3d733f waybar: add a power menu module
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>
2026-05-12 11:49:44 +01:00
af647e2a1e stylix: switch cursor to Bibata-Modern-Ice
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>
2026-05-12 11:48:28 +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
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
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
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
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