Commit Graph

509 Commits (d9e4d670136e2aa7e501b355de7f4bc141359960)

Author SHA1 Message Date
Amir Alexander Abdelbaki d9e4d67013 feat(archiso+branding): rebrand to m-archy, ship fastfetch logo and os-release
Steps taken:
- Added overlay/airootfs/etc/os-release with NAME="M-Archy", ID=m-archy,
  ID_LIKE=arch so fastfetch and other tools show the correct distro name while
  keeping pacman/AUR helpers happy via ID_LIKE.
- Added overlay/airootfs/etc/fastfetch/config.jsonc — system-wide fastfetch
  config equivalent to:
    --logo-type file --logo /etc/fastfetch/m-archy-SPC.txt
    --logo-color-1 red --logo-color-2 red --color red
  (keys + title colored red, custom file logo, no other defaults changed).
- Added overlay/airootfs/etc/fastfetch/m-archy-SPC.txt — copy of the pin.txt
  ASCII logo; lands on the live ISO via the existing cp -r overlay/airootfs/
  step in build.sh, no build.sh or profiledef.sh changes needed.
- Renamed resources/pin.txt → resources/m-archy-SPC.txt and updated all
  references in .bashrc, .zshrc, and both kitty/bash-remoteconf files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 09:50:39 +02:00
Amir Alexander Abdelbaki 357a19cb8c remigrating to custom monitor manager solution 2026-06-26 08:39:40 +02:00
Amir Alexander Abdelbaki 7016388210 fix(monitor-manager): account for scale when computing logical monitor size
logical_width/height now divide physical pixels by scale so the canvas
correctly represents the compositor's coordinate space (e.g. 3840px @1.5x
is 2560 logical px wide, not 3840).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 08:34:34 +02:00
Amir Alexander Abdelbaki 597bb3bc36 fix(hyprlua): restore require("monitors") and update comment for hyprmoncfg
The merge agent reverted the switch from usr.monitors to root-level monitors
(managed by hyprmoncfg). Restore main's version and update the surrounding
comment to explain the new arrangement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 13:59:53 +02:00
Amir Alexander Abdelbaki cb464c830f chore: add inline comments across all modules and configs 2026-06-25 13:07:06 +02:00
Amir Alexander Abdelbaki bc564f9b83 screw the monitor manager script, i'm using an off-the-shelf solution 2026-06-24 18:50:55 +02:00
Amir Alexander Abdelbaki ce32d645e1 Merge branch 'main' of https://git.abdelbaki.eu/The_miro/Dotfiles 2026-06-24 17:52:16 +02:00
Amir Alexander Abdelbaki 449df42974 minor fixes, paths 2026-06-23 16:42:49 +02:00
Amir Alexander Abdelbaki 3388910bb0 feat(hyprlua): hyprctl reload after saving monitor config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:56:19 +02:00
Amir Alexander Abdelbaki fc90432d22 fix(hyprlua): change scale keybinds from T/G to t/g
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:54:38 +02:00
Amir Alexander Abdelbaki 08e4e583a3 feat(hyprlua): snap T/G scale to valid Hyprland steps for current resolution
Replaces fixed 0.25 increments with mathematically valid scales p/q
(lowest terms, q≤6) where both width/s and height/s are integers.
For 1920x1200 this gives 25 steps including 2.4, matching what
Hyprland actually applies — no more mismatch between TUI display
and live value.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:52:45 +02:00
Amir Alexander Abdelbaki 8343a741b8 chore(hyprlua): monitors.lua scale 2 → 2.0 (written by monitor-manager)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:42:44 +02:00
Amir Alexander Abdelbaki b28ee57ebf fix(hyprlua): normalize hyprctl mirrorOf "none" to prevent monitor reset
hyprctl returns mirrorOf:"none" (string) for non-mirrored monitors.
Python treated it as truthy, causing apply_monitor to always emit a
mirror command, resetting resolution and scale on every keypress.
Also restores monitors.lua with correct mode/scale/transform fields.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:39:10 +02:00
Amir Alexander Abdelbaki 280a41133f feat(hyprlua): add T/G scale adjust and Enter save+quit to monitor-manager
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:15:44 +02:00
Amir Alexander Abdelbaki 199f7296a9 feat(hyprlua): add WYSIWYG monitor manager TUI
Python curses TUI for managing Hyprland monitors interactively:
- Canvas shows monitors as boxes at their real relative positions
- Tab/Shift+Tab to cycle selection; hjkl/HJKL to move (50/10 px)
- u/i to rotate CCW/CW; n/N to cycle display modes live
- m to mirror (pick target with Tab, confirm with Enter)
- s saves to hypr/usr/monitors.lua atomically
- Scale cached and only recomputed on resize or viewport overflow
- Bound to Super+Shift+M as a centered-L floating kitty popup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:03:25 +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 49ece6a238 feat(hyprlua): tighten lid-lock, idle timer, and add caffeine eww widget
- caffeine: inhibit only `idle`, not `sleep`, so lid close still locks
- binds: lid-close unconditionally calls hyprlock; lid-open does dpms on
- hypridle: reduce lock timeout from 3 min to 2.5 min (150 s)
- eww (all 3 variants): add caffeine toggle button (/󰅺) with tooltip

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 11:15:23 +02:00
Amir Alexander Abdelbaki 204dd31958 fix(hyprlua): only offer real capture nodes; show howdy's enroll error
The Brio (and most UVC webcams) expose a second /dev/video* node that is
metadata-capture only. The chooser listed it, the existence-only guard
accepted it, and howdy aborted with a bare exit 1 because that node can
never deliver a frame.

- list_cameras: skip nodes with no capture pixel formats (is_capture_device)
- howdy_camera_ok: require an actual capture node, not just an existing path,
  so a stale metadata-node device_path triggers reconfiguration
- howdy_add: tee howdy's output and surface the real reason on failure
  instead of only the exit code

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:41:24 +02:00
Amir Alexander Abdelbaki 5f83f10f48 fix(hyprlua): set howdy device_path + add camera chooser with kitty preview
Enrollment failed because howdy's own config.ini kept device_path=none,
so VideoCapture aborted before ever opening the lens (generic exit 1).
The presence-detect camera setting is separate and never reached howdy.

- add a "Howdy face auth — configure camera" menu entry that writes
  device_path into /usr/lib/security/howdy/config.ini
- guard howdy_add: detect an unset/stale device_path and offer to fix it
  before enrolling, instead of surfacing howdy's opaque exit 1
- shared camera chooser shows a live still from the selected node via
  kitty's icat (gated on KITTY_WINDOW_ID), used for presence + howdy
- support non-IR colour webcams: detect IR vs colour from the preview's
  saturation and tune recording_plugin (ffmpeg) + dark_threshold per type

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:35:11 +02:00
Amir Alexander Abdelbaki 88f3b72343 fix(hyprlua): support howdy 2.x in enroll-biometrics
howdy 2.x installs its CLI under root-only /usr/lib/security/howdy/ with
/usr/bin/howdy symlinked into it, so `command -v howdy` reports "not found"
for a normal user — the script wrongly thought howdy wasn't installed and
tried to reinstall it. Detect via the symlink and pacman -Qq instead; all
ops already run through `sudo howdy`.

This version also has no pam_howdy.so — it authenticates via pam_python.so
loading /usr/lib/security/howdy/pam.py. Switch the emitted PAM block to that
module and add pam_python_require() to install the AUR `pam-python`
dependency, replacing the dead pam_howdy.so existence check.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:13:26 +02:00
Amir Alexander Abdelbaki d35d6d17d6 fix(hyprlua): correct howdy CLI + add howdy/FIDO PAM 2FA setup
enroll-biometrics.sh used non-existent howdy flags and a broken install
path. Fixes and additions:

- howdy add: label has no flag; feed it via stdin, use -U "$USER"
- howdy remove: id is positional, not -I
- list/test: pass -U "$USER" so all ops target the same account
- install: howdy is AUR-only, so the pacman fallback could never work;
  require an AUR helper (yay/paru) and message clearly if absent
- new PAM 2FA menu: enroll FIDO key + wire howdy + pam_u2f into
  sudo/hyprlock/login (both factors required, password fallback kept)
- hyprlock gets its own clean fallback (include system-auth) so the
  block is not re-run via include login
- idempotent, timestamped backups, and a symmetric teardown option

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 21:55:06 +02:00
Amir Alexander Abdelbaki 325f5fcc1a Merge branch 'main' of https://git.abdelbaki.eu/The_miro/Dotfiles 2026-06-11 21:29:39 +02:00
Amir Alexander Abdelbaki 9ef49086ae feat(hyprlua): wire chamel daemon + expand frequentcommands
Start chamel as a daemon in autostart so keybinds (toggle/clear/
clear-and-deactivate) work on first use. Fix stale hyprland script
paths in frequentcommands.list and add all utility scripts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:54:20 +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 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 f9a4466072 added device blocks for logitech lightspeed composite dev 2026-06-07 04:42:35 +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