Commit Graph

11 Commits (2fa3414e3135d404518462ddf1804665b1753f04)

Author SHA1 Message Date
Amir Alexander Abdelbaki 2fa3414e31 feat(hyprlua): add orbit-menu radial power/utility menu
New GTK4 layer-shell radial menu (desktopenvs/hyprlua/orbit-menu/), following
astal-menu's single-instance D-Bus daemon conventions. Super+Shift+O opens
straight into a Power ring (sleep/reboot/poweroff/soft-reboot via hyprshutdown);
Super+Ctrl+O opens the full 5-category root (Power, Tools, Scripts sourced live
from ~/Documents/Scripts, Management, and a live open-Windows list with
go-to/bring-here/close/force-kill/get-pid/send-to-workspace actions). Adds a
round launcher button to all 3 eww bar variants with matching glow/hover CSS.

Also retunes hypridle (lock 30s, sleep 1min) and adds a HibernateDelaySec
systemd-sleep.conf.d fragment (deployed by sysupdate.sh) so the machine
hibernates ~80 minutes after going idle instead of drifting to sleep indefinitely.
2026-07-17 09:51:02 +02:00
Amir Alexander Abdelbaki 05693a71b7 chore(presence-detect): remove now-unused v4l2loopback provisioning
presence-detect.sh no longer mirrors the camera through a v4l2loopback device,
so the module setup is dead weight. Remove it:

- delete etc-v4l2loopback/ (modprobe.d + modules-load.d configs)
- drop the deploy blocks and linux-headers/v4l2loopback-dkms/v4l2loopback-utils
  package installs from the niri and hyprlua DE installers
- remove _ensure_v4l2loopback() and its call from sysupdate.sh
- reword enroll-biometrics.sh's loopback filter comment (kept as a harmless
  defensive exclusion) so it no longer points at the deleted config

Live system cleanup (module unload + /etc configs) is separate and needs root.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-11 04:11:16 +02:00
Amir Alexander Abdelbaki defa69faab feat(presence-detect): mirror camera via v4l2loopback so the daemon never blocks it
presence-detect.sh now feeds the real webcam into a v4l2loopback virtual
device (/dev/video42) via a self-healing ffmpeg background process, and reads
motion off that mirror instead of opening the physical camera directly. This
means the daemon's 20s-interval checks never contend with other apps (video
calls, howdy) for exclusive camera access. Falls back to direct camera access
if the loopback isn't set up yet, so the feature degrades gracefully rather
than breaking.

New etc-v4l2loopback/ ships the modules-load.d/modprobe.d config (fixed
video_nr=42, exclusive_caps=1) following the repo's existing etc-greetd/
etc-lightdm/ convention. Deliberately no runtime sudo/modprobe calls inside
the daemon itself — the module loads declaratively at boot instead, matching
this repo's existing caution around unattended sudo.

hyprlua.sh and niri.sh installers now pull in linux-headers,
v4l2loopback-dkms, and v4l2loopback-utils and deploy the module config
immediately. sysupdate.sh gained _ensure_v4l2loopback(), wired into
sync_configs(), so existing machines pick up the new packages and /etc
config on their next --config or --both run without needing a fresh install.

enroll-biometrics.sh's camera picker now excludes the loopback device itself
(by card_label) so configuring the real camera can't accidentally target the
mirror it feeds.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 16:39:11 +02:00
Amir Alexander Abdelbaki d680730d30 feat(sysupdate): Plymouth/ReGreet migration, astal-menu deps, hyprshutdown, usr redeploy
sysupdate.sh's config sync now closes several gaps where a fresh or drifted
machine would silently be missing pieces that config-updater can't reach
(it only copies files, never installs packages or touches /etc):

- _ensure_plymouth_regreet: detects whether the machine is still on
  greetd+tuigreet (or no greeter at all) and offers to run the existing
  migrate-to-greetd.sh tool rather than duplicating its logic.
- _ensure_astal_menu_deps / _ensure_hyprshutdown: detect and offer to install
  the AUR/pacman packages astal-menu and the new power binds need but that
  config-updater never installs on its own.
- _redeploy_usr_configs: hypr/usr/ is intentionally excluded from the
  automated sync to protect per-device customisation (monitors.lua,
  wallpaper.conf), which left feature/bind updates in the dotfiles template
  with no path onto an already-provisioned machine. Adds an explicit,
  file-by-file dialog checklist (device-specific files default off) so those
  updates can be pulled in deliberately instead of hand-copied.
2026-07-08 13:35:56 +02:00
Amir Alexander Abdelbaki 48e32e7eea fix(greetd): pin greeter GPU + software cursors + single-output centering
Diagnosed the intermittent "login won't take input / frozen cursor" on this
dual-AMD-GPU box: cage (wlroots) could pick the display-less iGPU, and amdgpu
hardware cursors can freeze. regreet-session.sh now:
- pins WLR_DRM_DEVICES to the first DRM card with a connected output (portable,
  evaluated live — no hard-coded PCI path),
- sets WLR_NO_HARDWARE_CURSORS=1 (fixes the stuck cursor),
- runs cage with `-m last` so the login card centres on a single monitor instead
  of the default "extend", which stretched the canvas across all three monitors
  and left the card floating in the middle of the span.

sysupdate.sh now deploys /etc/greetd config (config/regreet/session, not PAM) when
greetd is the active greeter, using the single primed sudo credential.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SUN7gg6GGfnToghMijLm5Y
2026-07-07 13:37:22 +02:00
Amir Alexander Abdelbaki 9d1ec69a11 feat: hyprshutdown power binds, 76% scrolling windows, single-sudo sysupdate
- hyprshutdown wired into the graceful power flow (Super+Shift+O logout,
  Super+Ctrl+O power off, Super+Ctrl+Shift+O reboot) so apps close cleanly with a
  UI before Hyprland exits, instead of a hard systemctl call. Added to the hyprlua
  package list.
- Scrolling layout: default window is now 76% of the monitor along the scroll axis
  (column_width 0.5 -> 0.76).
- sysupdate.sh: primes sudo once at startup and keeps the credential alive for the
  whole run, so no later step re-prompts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SUN7gg6GGfnToghMijLm5Y
2026-07-07 13:26:48 +02:00
Amir Alexander Abdelbaki 708137831b fix(hypridle,sysupdate,archiso): misc improvements
- hypridle: remove fprintd restart from after_sleep_cmd (caused resume delays)
- sysupdate: add --packages/-p, --configs/-c, --both/-b selective update modes; move config sync prompt before package step in --both mode
- archiso: add wds-deploy.sh for packaging M-Archy netboot artifacts for WDS/PXELinux

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:03:17 +02:00
Amir Alexander Abdelbaki dc3ffb68b7 fix(sysupdate): make hypr config sync atomic
The hypr/ sync removed each live item with `rm -rf` before `cp`. For
hyprland.lua this opened a window where the file was absent; if Hyprland's
live config watcher reloaded during it, it errored ("cannot open
hyprland.lua") and wrote out its fallback hyprland.conf stub, which then
leaked into the repo.

Stage each item into a temp dir on the same filesystem and `mv` it into
place — for files this is an atomic rename(2), so the watcher never sees
hyprland.lua missing. Directories are cleared first (mv can't replace a
non-empty dir), but those aren't watched config files.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:13:26 +02:00
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 8f2d6c6de3 chmods 2026-06-01 15:37:40 +02:00
Amir Alexander Abdelbaki 92e1924526 feat: add sysupdate TUI script with Arch news + AI analysis
One-by-one pacman/AUR/flatpak updater with a dialog-based package
selector, Arch RSS news matching per package, optional --AI mode that
sends news to Claude and generates a timestamped /updatescript-<ts>.sh,
and kernel-based baseline detection when /updatestate doesn't exist yet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 15:24:39 +02:00