Drop the invalid -f flag from lock_cmd (a swaylock holdover; hyprlock
v0.9.5 has no fork flag and the pgrep guard already prevents duplicates),
and migrate all dpms calls to the Lua dispatch form required since
Hyprland 0.55: hyprctl dispatch 'hl.dsp.dpms({ action = ... })'.
Fix the launcher bind, which used pre-2.2 syntax (owlry -p
app,cmd,system,ssh) where -p is now --prompt, so the whole string was
passed as prompt text. Use bare 'owlry' for Super+Space and add Super+D
for the new dev profile (owlry --profile dev).
no_hardware_cursors auto (2) still corrupts the cursor on the rotated
vertical monitor, and Hyprland has no per-monitor override, so force
software cursors (1) globally.
hl.animation rejects a spring leaf without a speed (Hyprland logged
"missing required field speed"), so windowsIn fell back to default. Add
speed so the snappy spring actually applies.
no_hardware_cursors 2 (auto) uses hardware cursors where supported and
falls back to software only when needed, instead of forcing software
cursors globally.
Lua config (hyprland.d.lua):
- keybinds: layout-aware binds now read the per-workspace layout via
cur_ws_layout() instead of the global hl.get_config("general.layout"),
fixing mouse-wheel/bracket scrolling and ratio keys on the lua:*-scroll
layouts.
- add state.lua shared module (ws_layouts) replacing the _G globals.
- layout: factor the 9 duplicated layout_msg bodies into scroll_msg/swap_msg
builders; drop a dead #state expression.
- rules: NO_BLUELIGHT window.open handler no longer leaks a rule per open
(one per class) and regex-escapes/nil-guards the class.
- monitors: quote non-numeric scale so scale="auto" renders.
- drop debug print() focus handler, local-next shadowing, stray {mouse=true}
on wheel binds (kept on drag/resize, which require it).
Quickshell:
- brightness OSD is now event-driven: Osd.qml gains an IpcHandler(target:osd)
and the keybind pushes the new level via `qs ipc call osd brightness`,
removing the always-on 500ms brightnessctl poll.
- GamemodePill watches GameMode's D-Bus signals via gdbus monitor instead of
polling gamemoded --status every 5s.
Cleanup:
- remove stock hyprland.lua.refactor/ boilerplate and the redundant,
partly-wrong hyprland_lua_api.md (both were deployed into ~/.config/hypr;
.luarc.json already points the LSP at /usr/share/hypr/stubs).
- refresh hypr/AGENTS.md (lua layout) and quickshell/CLAUDE.md (v0.3.0).
Replace nwg-hello with hyprlogin as the greetd greeter. Both hyprlock
and hyprlogin now share a single apex-neon theme fragment
(.chezmoitemplates/apex-neon-lock.conf), giving an identical look on
lock and login.
- Add system/ staging tree for /etc files (not auto-applied by chezmoi)
- Add system/install-greeter.sh to render templates and sudo-install to /etc
- Add apex-neon shared fragment: palette, font, animations, input-field,
clock/date bubbles, weather/location bubbles
- Add dot_config/hypr/themes/apex-neon-lock.conf.tmpl ($HOME copy for hyprlock)
- Rewrite hyprlock.conf.tmpl to source the shared fragment; move
notification bubble here (hyprlock-only, requires quickshell)
- Add Quickshell IpcHandler so `qs ipc call notifications count` works
- Session fixed to hyprland-uwsm.desktop; greetd config targets greetd.conf
Replace hypr-workspace-layout shell script with native Lua functions in
keybinds.lua. Add custom Lua layouts (master-scroll variants, swap
variants) to the SUPER+period cycle. Implement swap-on-focus via
_G._hl_ws_layouts shared global so window.active handler can check
per-workspace layout without IPC or hl.get_workspaces().
Port all layout management to Hyprland v0.55 Lua API:
- Per-workspace layout toggle/cycle via hl.workspace_rule + hl.get_active_window()
- Layout-aware move/nav/resize as pure Lua functions
- Group smart-join via hl.get_active_window().grouped
- mfact exact handlers in all custom scroll/swap layouts
- No io.popen, no exec_cmd, no IPC deadlock risk
New scroll layouts for vertical monitors:
- top-master-scroll: master top, horizontal slave row below
- center-master-scroll-v: master center, slave rows above and below
New swap-on-focus layouts (focusing a slave promotes it to master):
- master-swap: master left, slaves right
- slave-master-swap: master right, slaves left
- top-master-swap: master top, slaves bottom
Shared place_scroll_row helper (horizontal mirror of place_scroll_col).
Guard recalc dispatch by layout name to avoid errors from built-in layouts.
- Vertical bar on DP-2 with rounded-square pills throughout
- Per-monitor workspace groups sorted by screen x position, with
Nerd Font icons for named workspaces and apex-neon red active indicator
- Bar layout: datetime+weather top, workspaces centered, gamemode+media+notif+system bottom
- Popouts anchor to triggering icon (top-right for datetime/weather, bottom-right for media/notif/system)
- Lock command switched from hyprlock to swaylock
- Hyprland blur/ignore_alpha layerrules for quickshell namespace
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove persistent:true from named workspaces so they only appear in
waybar when occupied. Gate steam on cs2 tag and spotify on entertainment
tag. Fix waybar to prefer hyprland/workspaces over niri/workspaces when
both tags are present.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace direct uwsm stop keybind with owlry-power-menu script.
Menu offers lock/suspend/logout/reboot/shutdown via hyprshutdown
for graceful session teardown.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Extend hypr-workspace-layout with move-left/right/up/down and
resize-grow-h/resize-shrink-h modes; scrolling uses swapcol/colresize,
monocle is a no-op, other layouts use movewindow/resizeactive
- Wire SUPER SHIFT HJKL to the new move-* endpoints
- Replace hardcoded ALT SHIFT HJKL swapcol/colresize binds with
layout-aware ALT SHIFT JK resize endpoints; ALT SHIFT HL dropped
- Move workspace definitions from 60-rules.conf to 20-workspaces.conf.tmpl
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Renumber regular workspaces to IDs 21-30 with defaultName 1-10, giving
named workspaces IDs 1-6 so they sort before numbered ones in waybar.
Add persistent named workspaces (comms, element, mail, joplin, steam,
spotify) with monitor/layout assignments. Update keybinds to use name:
dispatch. Add spotify as dedicated monocle workspace on DP-2.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Allow monitor workspaces in chezmoi.toml to be defined as objects with
optional layout and layoutopts fields, enabling per-workspace layout and
layoutopt rules. Plain int arrays remain supported for monitors with no
per-workspace overrides.
Also commit waybar and cursor config tweaks.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- switch GTK font to GeistMono Nerd Font Propo 9 and drop GTK4 CSS overrides
- add named Hyprland workspaces/keybinds and Ghostty quick terminal; adjust screenshot binding
- update Waybar workspace icons/sorting; tweak Neovim transparency, Owlry/Qt6CT, and ROCm env
- add curated wallpaper sets for DP-1/DP-2 and new Hyprland toggle/screenshot helper scripts