Commit Graph

485 Commits (7fd0e37061ab0b533306853d34f05e0aeba0ad7a)

Author SHA1 Message Date
Amir Alexander Abdelbaki 7fd0e37061 refactor(hyprlua): move hypr-usr/ into hypr/usr/ and wire sysupdate sync
Device-specific Lua configs (monitors, binds, input, etc.) previously lived
in a top-level hypr-usr/ sibling to hypr/. They now live inside hypr/usr/
so all hypr-related configs sit under one directory tree.

- git mv hypr-usr/ → hypr/usr/
- hyprland.lua: require() calls updated to require("usr.*")
- input.lua: require("input-device-exceptions") → require("usr.input-device-exceptions")
- hyprpaper.conf + monitorhandler.sh + wallpaper-picker: wallpaper.conf path
  updated from ~/.config/wallpaper.conf → ~/.config/hypr/usr/wallpaper.conf
- monitorhandler.sh: fix stale desktopenvs/hyprland/ → desktopenvs/hyprlua/
- binds.lua: edit-binds keybind path corrected to ~/.config/hypr/usr/binds.lua
- helpmenu.sh: update binds.lua source path
- updater.conf: SOURCE_BASE fixed (hyprland→hyprlua), config hypr except usr,
  remove flat hypr-usr entry
- update-configs.sh: add "except <subdirs>" support for the config type
- hyprlua.sh installer: remove now-redundant hypr-usr copy lines
- migrate-hyprland-to-hyprlua.sh: deploy from hypr/usr/ instead of hypr-usr/
- sysupdate.sh: add CONFIG SYNC section with _migrate_hypr_usr() which moves
  old flat-layout files into usr/ (case 1) or copies fresh from dotfiles when
  no local config exists (case 2); fallback copy preserves hypr/usr/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:46:01 +02:00
Amir Alexander Abdelbaki 9638fd337a feat(hyprlua/niri): webcam presence detection + systemd-inhibit idle/caffeine
- Add presence-detect.sh daemon: checks webcam every 2 min via OpenCV haar
  cascade (presence_detect.py); holds systemd-inhibit --what=idle lock while a
  face is detected so hypridle never fires during an active session
- Add enroll-biometrics.sh: Cyberqueer dialog TUI for camera configuration/test
  and howdy face auth enrollment (add/list/remove/test models)
- Rewrite caffeine.sh (hyprlua + niri): replace kill/restart of idle daemon with
  systemd-inhibit --what=idle:sleep + PID file; idle daemon stays running
- Fix hypridle.conf: correct ;; → ; in after_sleep_cmd, add
  ignore_dbus_inhibit=false, bump lock timeout 120s→180s to account for the
  2-min presence detection cycle
- Wire Super+Shift+B keybind for enrollment TUI in both hyprlua and niri
- Fix niri/scripts/python: was real dir with inner symlink causing cp -rL to
  create a nested python/python/ hierarchy; replaced with direct symlink
- Add python-opencv and v4l-utils to hyprlua + niri installers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 14:50:36 +02:00
Amir Alexander Abdelbaki 9c85024eab fix(hyprlock): use hyprlock pam module instead of sudo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 09:42:26 +02:00
Amir Alexander Abdelbaki 0fcb9fb193 feat(niri): split config into modules and port hyprlua keybinds
Split monolithic config.kdl into modules/ (input, outputs, layout,
animations, environment, autostart, window-rules, binds), mirroring
the hyprlua modular structure.

Keybind additions and fixes:
- Port all missing hyprlua binds (Mod+0, mouse drag/resize, Mod+Ctrl+M,
  Mod+Shift+Return→overview, Mod+Shift+Alt group move aliases)
- Enforce modifier semantics: Shift=move window, Ctrl=workspace,
  Alt=resize across all directional keys
- Add Mod+Ctrl+J/K/Down/Up → focus-workspace-down/up
- Add Mod+Ctrl+Shift+J/K/Down/Up → move-column-to-workspace-down/up
- Fix Mod+Ctrl+K/Up (was toggle-overview, now focus-workspace-up)
- Fix Mod+Ctrl+Shift+Up (was move-to-recent, now move-to-workspace-up)
- Relocate toggle-overview to Mod+Ctrl+Space
- Remove Mod+Shift+Alt+* aliases (violated Alt=resize rule)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 10:25:19 +02:00
Amir Alexander Abdelbaki 814080cc04 feat(installer): install evdev-rce for touchscreen long-press right-click
Reverts incorrect touch_long_press_time option (not a real Hyprland setting).
Adds evdev-right-click-emulation install + systemd enable to the tablet (T)
eww bar selection in the hyprlua installer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 15:43:48 +02:00
Amir Alexander Abdelbaki 128bdc7d4f feat(input): enable touchscreen long-press to right-click
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 15:12:32 +02:00
Amir Alexander Abdelbaki fbfe238e99 fix(dock): switch nwg-dock-hyprland from autohide (-d) to resident (-r) mode
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:38:36 +02:00
Amir Alexander Abdelbaki 74b0361f26 feat(autostart): enable nwg-dock-hyprland on startup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:23:19 +02:00
Amir Alexander Abdelbaki bebddb13f1 chore(dock): standardise nwg-dock-hyprland flags across all binds
Switch to -i 25 icon size and -d autohide flag; drop old per-position
margin flags and -r resident flag; apply uniform command to all position
binds, toggle, and autostart reference.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:21:28 +02:00
Amir Alexander Abdelbaki 1350e0bf3e fix(binds): repair nwg-dock toggle and position keybinds
Position binds used && which prevented the dock from starting when it
wasn't already running. Toggle bind had no kill logic so pressing it
again stacked a second instance instead of hiding the dock.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:13:11 +02:00
Amir Alexander Abdelbaki 2b0f963760 comment out nwg-dock autostart
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 12:50:26 +02:00
Amir Alexander Abdelbaki 7828662e23 shrink dock further, widen gap, fix helpmenu to use new binds path
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 12:48:02 +02:00
Amir Alexander Abdelbaki c7310f02df shrink nwg-dock and add edge gap
Reduce icon size to 28 (-is 28) and increase all margins to 25px for a
cleaner, less intrusive dock appearance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 12:41:02 +02:00
Amir Alexander Abdelbaki 455a325743 i have opinions on the bar 2026-06-02 12:08:52 +02:00
Amir Alexander Abdelbaki a3e0175188 now the bar is actually fixed 2026-06-02 10:11:39 +02:00
Amir Alexander Abdelbaki 4d3bccf3b1 finally teh bar is gut 2026-06-02 09:54:16 +02:00
Amir Alexander Abdelbaki af7454b42d eww bar now actually good 2026-06-02 09:39:49 +02:00
Amir Alexander Abdelbaki e86c8eef5f readjusted the eww bar 2026-06-02 09:24:31 +02:00
Amir Alexander Abdelbaki a54e0749ad fix(eww-touch): restore layout with all session styling applied
Restores the screenrotate centre widget (OSK, prev/next workspace,
rotate CW/CCW, close) that was lost to an external edit, and re-applies
all session changes on top:
- Circular (round) class on OSK, drawer, and all five screenrotate buttons
- Close button uses hyprctl dispatch killactive
- Workspace buttons use focusleft/focusright scripts
- winsworks hexpand + metric/scale hexpand for responsive volume slider
- Clock widget split into icon label + time label with a space between

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 09:20:54 +02:00
Amir Alexander Abdelbaki 9d7c7a5932 feat(eww-touch): restyle bar with pill aesthetic, tighter sizing, responsive slider
- Switch font to 16pt with proportionally scaled padding/margins
- Full pill border-radius (999px) on all widgets
- Circular buttons (50%) for OSK, drawer, close, workspace, screen rotation
- Volume slider expands to fill available bar width (hexpand)
- Workspace buttons use focusleft.sh / focusright.sh scripts
- Add space between clock icon and time

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 09:15:41 +02:00
Amir Alexander Abdelbaki c8a476d2af fix(niri): correct window opacity rules and align theming to CyberQueer palette
- Replace invalid min-opacity with opacity in niri window rules; reorder
  global rule before per-app overrides so last-match-wins works correctly
- dunst: frame_color #aaaaaa → #5018DD, icon_theme → Papirus-Dark
- eww: bar and slider colors aligned to CyberQueer #D6ABAB text color

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 17:37:11 +02:00
Amir Alexander Abdelbaki 7a40e9baec feat(niri): add Niri as a full desktop environment option
Adds Niri (scrollable-tiling Wayland compositor) as a first-class DE
alongside HyprLua, Hyprland, and Sway.

Config (desktopenvs/niri/):
- niri/config.kdl: full KDL config — input (de/caps:swapescape/
  left-handed), CyberQueer focus-ring colours, spring animations,
  environment vars, autostart, window rules, 100+ keybindings
  translated from binds.lua
- Shared configs (kitty, dunst, wofi, btop, walker, vicinae, etc.)
  symlinked from hyprlua to stay in sync
- EWW bar: three variants (PC/notebook/touch) with niri-native workspace
  widget driven by a niri msg event-stream listener script
- greetd-tuigreet: launches niri instead of Hyprland

Scripts adapted for niri IPC / niri toolchain:
- ewwstart.sh / togglebar.sh: niri msg outputs instead of hyprctl
- monitorhandler.sh: swaybg replaces hyprpaper
- caffeine.sh: swayidle replaces hypridle
- activewindow: niri msg -j focused-window
- unified-rotate.sh: niri msg action set-output-transform
- wallpaper-picker: swaybg-based rewrite
- windowswitcher: niri msg -j windows + wofi
- workspace: event-stream listener for eww literal widget
- drawer.sh / menu.sh: swaylock + niri msg action quit for power actions
- niri-toggle-touchpad.sh: xinput fallback (no niri IPC for touchpad)
- toggle-layout.sh: stub (niri has one scrollable layout)

Installer & integration:
- setup/modules/Desktop-Environments/niri.sh: full installer with
  niri-appropriate packages (swaybg, swaylock, swayidle, xfce-polkit,
  gammastep, nwg-drawer, xdg-desktop-portal-gnome; no nwg-dock-hyprland
  as niri doesn't support wlr-foreign-toplevel-management)
- setup/tui-install.sh: niri added to DE selection dialog
- apply-theme.sh: niri/config.kdl added to USER_FILES for colour theming

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 16:38:47 +02:00
Amir Alexander Abdelbaki 270aa841cf feat(hypr): split device exceptions into own file with a TUI editor
Move hl.device blocks from input.lua into input-device-exceptions.lua
and add mk-device-exception.sh — a dialog-based TUI that pre-populates
fields from any existing block in the target file and replaces or
appends it on save.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 14:49:14 +02:00
Amir Alexander Abdelbaki 0742802cd8 Update desktopenvs/hyprlua/hypr-usr/input.lua 2026-06-01 12:51:17 +02:00
Amir Alexander Abdelbaki b114b7f523 feat(hypr): support mice in mk-device-block and add mouse device blocks
Expand mk-device-block.sh to list mice alongside keyboards and emit the
pointer-appropriate config block. Add device blocks for the Logitech
Pro 2 and G903 mice in input.lua.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 23:27:00 +02:00
Amir Alexander Abdelbaki 572fc00755 further refinements to input profile 2026-05-31 23:20:03 +02:00
Amir Alexander Abdelbaki 4acc5beb24 feat(hypr): set standard key repeat for zsa moonlander
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 23:18:57 +02:00
Amir Alexander Abdelbaki 7bc86cb33c added exception to input for zsa moonlander 2026-05-31 23:07:11 +02:00
Amir Alexander Abdelbaki 0d082d346c feat(hypr): add script to generate hl.device() block for a keyboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 22:53:59 +02:00
Amir Alexander Abdelbaki 6d77e2a360 fix(hypr): wrap all gesture dispatcher callbacks in hl.dispatch()
hl.dsp.*() inside a function callback only constructs a Dispatcher
object — hl.dispatch() is required to actually execute it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 22:46:57 +02:00
Amir Alexander Abdelbaki 6c4dfd10fa fix(hypr): revert gesture action to function callback form
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 22:41:21 +02:00
Amir Alexander Abdelbaki 388eb7b5a5 fix(hypr): use new dispatcher syntax for 4-finger workspace swipe gestures
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 22:39:43 +02:00
Amir Alexander Abdelbaki bb51a51a7b feat(hypr): lock screen on lid close, skip if caffeine mode is on
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 22:08:24 +02:00
Amir Alexander Abdelbaki 08c3097a70 feat(wallpaper): sync selected wallpaper to hyprlock per monitor
wallpaper-picker now calls write_hyprlock_state() on apply, writing
per-monitor background blocks to ~/.config/hypr/hyprlock-backgrounds.conf.
hyprlock.conf sources that file instead of a hardcoded background block,
with a committed default for first-boot.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 21:54:19 +02:00
Amir Alexander Abdelbaki 867686e409 fix(eww-touch): use hyprctl dispatch for close window button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 10:30:52 +02:00
Amir Alexander Abdelbaki 21ec76c6eb Revert "fix(eww-touch): fix middle button close window action"
This reverts commit 266a032cb3.
2026-05-23 10:29:17 +02:00
Amir Alexander Abdelbaki 266a032cb3 fix(eww-touch): fix middle button close window action
hl.dsp.window.close() is not a valid Hyprland Lua API method;
replace with hyprctl dispatch killactive.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 10:28:10 +02:00
Amir Alexander Abdelbaki 612c13b4c0 fix(rotate): add pen/stylus rotation with explicit output mapping
Tablet devices require output= in hl.device() for transform to take
effect, unlike touchscreens which auto-bind to their display.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 10:23:22 +02:00
Amir Alexander Abdelbaki c7511b750a adjusted size of eww bar - i found the sweet spot 2026-05-19 18:31:18 +02:00
Amir Alexander Abdelbaki 9f480eb1b1 adjusted size of eww bar 2026-05-19 18:30:02 +02:00
Amir Alexander Abdelbaki 6a9d286e55 fixed workspace navigation 2026-05-19 18:26:28 +02:00
Amir Alexander Abdelbaki 7fe95c8b72 fix(eww): port hyprctl dispatch calls to Lua API
Replace hyprctl dispatch with hyprctl eval using hl.dsp.* in all
three eww variants. Workspace switching uses hl.dsp.focus with r+/r-
relative prefixes; killactive becomes hl.dsp.window.close(); exec
uses hl.dsp.exec_cmd.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:57:10 +02:00
Amir Alexander Abdelbaki ef4a0a483d fix(scripts): port screen rotation to Lua config
Replace hyprctl keyword with hyprctl eval + hl.monitor/hl.device Lua API,
and switch monitor/device parsing from fragile grep to hyprctl -j + jq.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:41:52 +02:00
Amir Alexander Abdelbaki f880191764 fix(scripts): update caffeine and toggle-touchpad to Lua config syntax
Replace hyprctl dispatch exec with direct daemon invocation in caffeine.sh,
and replace defunct \$LAPTOP_KB_ENABLED .conf variable with the actual
device key path in hyprland-toggle-touchpad.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:29:53 +02:00
Amir Alexander Abdelbaki 7b9379b1c1 feat(binds): convert gestures to new Hyprland Lua syntax
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:00:26 +02:00
Amir Alexander Abdelbaki b5b21ce4cd fixed issue with resizing windows with keyboard shortcuts 2026-05-19 14:54:13 +02:00
Amir Alexander Abdelbaki 820a12616c fixed theming issues 2026-05-19 14:39:29 +02:00
Amir Alexander Abdelbaki 3a49ab44d9 feat(qt,gtk): overhaul theming — qt6ct style plugin, dark palette, GTK color-scheme
Qt: replace QT_STYLE_OVERRIDE/QT_STYLE_SHEET env vars with QT_QPA_PLATFORMTHEME=qt6ct +
QT_QUICK_CONTROLS_STYLE=Fusion; add cyberqueer Qt6 style plugin (QProxyStyle wrapping
Fusion with hardcoded dark palette); enable custom_palette in qt6ct.conf so qt6ct applies
the dark QPalette directly for both Qt Widgets and Qt Quick apps.

GTK: fix dark mode not applying — set gtk-application-prefer-dark-theme=1 in GTK3
settings.ini; add gsettings color-scheme=prefer-dark to install script (required by
libadwaita apps which ignore gtk-theme-name); add index.theme so the theme is recognized
by GTK theme discovery.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:43:13 +02:00
Amir Alexander Abdelbaki 3cd4cb5df7 fix(hyprlua): theme and position vicinae correctly
Move settings.json out of the wrong vicinae/vicinae/ subdir so it deploys
to ~/.config/vicinae/settings.json where vicinae actually reads it, enabling
the cyberqueer theme. Add GTK_THEME=cyberqueer on launch for correct font
rendering. Add float=true to the launcher window rule so the cursor-position
move formula is applied.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 11:48:14 +02:00
Amir Alexander Abdelbaki bf4821c48e fix(hyprlua): correct Lua dispatcher API calls in binds.lua
- window.tag: pass table { tag = "..." } instead of bare string
- window.cycle_next: remove invalid false argument
- window.resize: use { x, y } fields instead of { delta = "x y" }
- group.change_active: replaced with hyprctl dispatch fallback (not in Lua API)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 11:13:18 +02:00