Commit Graph

1088 Commits (2be85739b519b08e330622f3a2768fa45615260b)

Author SHA1 Message Date
Amir Alexander Abdelbaki 2be85739b5 feat(apps): add Tangent Notes module (Flatpak)
Installs io.github.suchnsuch.Tangent via Flatpak with cyberqueer theme
applied. Registered in TUI installer, answerfile generator, and docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:20:25 +02:00
Amir Alexander Abdelbaki e278795610 feat(apps): add Obsidian module (Flatpak)
Installs md.obsidian.Obsidian via Flatpak with cyberqueer theme applied.
Registered in TUI installer, answerfile generator, and docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:15:08 +02:00
Amir Alexander Abdelbaki 394927573d feat(apps): add Rnote module (Flatpak)
Installs com.github.flxzt.rnote via Flatpak with cyberqueer theme
applied. Registered in TUI installer, answerfile generator, and docs
alongside xournal++ in the Productivity section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:11:19 +02:00
Amir Alexander Abdelbaki 66e51474a1 feat(apps): add OpenDeck + ydotool module
Installs ydotool via pacman and OpenDeck via Flatpak, wires ydotoold
and OpenDeck into the Hyprland autostart. Registers the module in the
TUI installer, answerfile generator, and docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:08:32 +02:00
Amir Alexander Abdelbaki 29dc304e4f remigrating to custom monitor manager - setup reverted 2026-06-26 11:00:51 +02:00
Amir Alexander Abdelbaki f5a1182a3d feat(plymouth): add custom-logo variant, sync answerfile + docs
- plymouth.sh: accepts PLYMOUTH_LOGO_SRC env var; PNG used as-is, SVG
  converted via rsvg-convert (librsvg only installed when needed)
- apps/plymouth-custom.sh: thin wrapper that validates the caller-supplied
  path and delegates to plymouth.sh with PLYMOUTH_LOGO_SRC exported
- install-modules.sh: adds 'Plymouth (custom)' checklist entry; prompts
  for image path via inputbox before the confirmation dialog; exports
  PLYMOUTH_LOGO_SRC into the module run
- generate-answerfile.sh: adds 'plymouth' (on by default) to the
  components checklist to match tui-install.sh
- docs: installation.md and modules.md updated with Plymouth component,
  answerfile schema, mkinitcpio note, and custom-logo module entry

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SyBNiWy3wpawrWb9ryVk7p
2026-06-26 10:57:32 +02:00
Amir Alexander Abdelbaki 52fe3a910e feat(plymouth+resources): bundle bg-skull.svg in repo and archiso
Move the splash logo into resources/bg-skull.svg so it's tracked in git
and always available alongside the dotfiles.  build.sh now copies
resources/ into /root/installer/resources/ on the ISO.  The Plymouth
module resolves the SVG from the repo copy first, ISO copy second —
no user intervention or ~/Pictures setup required.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SyBNiWy3wpawrWb9ryVk7p
2026-06-26 10:48:45 +02:00
Amir Alexander Abdelbaki fe72a4c71b feat(plymouth): add M-Archy boot splash module with skull logo + spinner
Installs a custom Plymouth theme (m-archy) with bg-skull.svg converted
to PNG (Plymouth is PNG-only via libpng — no SVG support) and a 12-dot
magenta spinner animation. Enabled by default in tui-install.sh; also
available as an optional module in install-modules.sh. Archiso image
remains Plymouth-free.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SyBNiWy3wpawrWb9ryVk7p
2026-06-26 10:44:02 +02:00
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 8b9c5c70b2 feat(installer): add shell_rc preference to skip copying .*rcs to skel
Adds a dialog (interactive + answerfile) letting the user choose whether
to copy the dotfiles' .zshrc / .bashrc / .vimrc into /etc/skel, or leave
system defaults in place. The choice is persisted as shell_rc in the
answerfile JSON and respected by both the TUI installer and the generator.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 09:05:00 +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 f8b5f1aa6a reverted starship config because claude fucked it up 2026-06-25 14:11:14 +02:00
Amir Alexander Abdelbaki 523ec416e8 chore: merge comment annotations from agent worktrees into main
133 files annotated with inline comments and section headers across:
- setup scripts (install, core, packages, shell, DEs, apps)
- hyprlua/hypr configs (hyprland.lua, hypridle, hyprlock, monitorhandler)
- niri config KDL modules
- dotfiles (.bashrc, .zshrc, starship.toml, colors.conf, etc.)
- hyprlua scripts and waybar scripts
- archiso build scripts

Monitor configuration (hyprmoncfg / monitors.lua / binds.lua) untouched.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 14:00:57 +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 7627dd67ff feat(setup): seed /etc/skel from installed user's ~/.config after all modules run
Problem: every module installs its config into the running user's ~/.config, but
/etc/skel was never updated afterwards. Any additional user created with
`useradd -m` later would get an empty home directory with no configs at all —
they would have to manually copy or re-run setup.

Solution: at the end of both TUI installer scripts (after every module and the
colorway step have finished), copy the fully-configured user's home into
/etc/skel so that it becomes the template for all future users.

How it works — tui-install.sh + simple-install.sh (identical block in both):

  The block runs AFTER the last run_module call and AFTER apply-theme.sh, so
  the snapshot is taken when the home directory is in its final state. It copies:

    ~/.config/  → /etc/skel/.config/    (all app configs, DE configs, etc.)
    ~/.themes/  → /etc/skel/.themes/    (GTK themes, including cyberqueer)
    ~/.zshrc    → /etc/skel/.zshrc
    ~/.bashrc   → /etc/skel/.bashrc
    ~/.vimrc    → /etc/skel/.vimrc

  Each copy is guarded ([[ -d ]] / [[ -f ]]) so missing files are silently
  skipped rather than erroring. sudo is used because /etc/skel is root-owned
  but the installer runs as the normal user.

arch-autoinstall.sh + archbaseos-guided-install.sh (chroot-phase changes):

  The previous version tried to cherry-pick specific subdirectories from the
  Dotfiles repo clone (hypr/, niri/, waybar/, etc.) using a long list of cp
  commands. This was brittle — any new module that installs to ~/.config was
  not automatically captured, and the list had to be manually maintained.

  Replaced with a minimal block that only copies the three shell dotfiles
  (.zshrc, .bashrc, .vimrc) from the repo clone into /etc/skel. This is
  sufficient for the first user created during installation (useradd -m runs
  immediately after, before any modules). The full ~/.config sync above then
  takes over for all subsequent users after the modules have run.

  arch-autoinstall.sh additionally had the skel setup moved to before the
  useradd -m call (was missing entirely before) so even the first user gets
  the shell dotfiles, with a fallback direct-clone path if the skel clone fails.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 10:19:06 +02:00
Amir Alexander Abdelbaki dd1cd2b8c7 feat(setup/apps): convert graphical apps to Flatpak-first with cyberqueer GTK theme
Policy change: graphical apps now prefer Flatpak > pacman > AUR. Non-graphical
tools keep pacman > AUR > source. This makes installed apps sandboxed, keeps
system packages clean, and gives us a single hook point (apply_flatpak_theme)
to theme every GUI app consistently.

lib/logging.sh — two new helper functions sourced by every module:

  ensure_flatpak()
    Checks if flatpak is installed (pacman installs it if not) and ensures the
    Flathub remote is registered. Called at the top of every Flatpak script so
    the module is self-contained and safe to run in any order.

  apply_flatpak_theme(app_id)
    Copies gtk-themes/cyberqueer/ from the Dotfiles repo into ~/.themes/, then
    calls `flatpak override --user --filesystem=~/.themes:ro <id>` so the
    sandbox can read it, and `flatpak override --user --env=GTK_THEME=cyberqueer
    <id>` to activate it. Gracefully skips with a warning if the theme source
    directory is absent.

App scripts converted (pacman/AUR → Flatpak + theme):
  ardour       org.ardour.Ardour
  audacity     org.audacityteam.Audacity
  chromium     org.chromium.Chromium
  firefox      org.mozilla.firefox
  geany        org.geany.Geany
  gimp         org.gimp.GIMP
  inkscape     org.inkscape.Inkscape
  kate         org.kde.kate
  kdenlive     org.kde.kdenlive
  krita        org.kde.krita
  librewolf    io.gitlab.librewolf-community.librewolf
  lmms         io.lmms.LMMS
  localsend    org.localsend.localsend
  min-browser  com.github.minbrowser.min
  mixxx        org.mixxx.Mixxx
  onlyoffice   org.onlyoffice.desktopeditors
  openshot     org.openshot.OpenShot
  rdp-client   org.remmina.Remmina  (was pacman remmina + freerdp + libvncserver;
               Flatpak bundles all protocols, including VNC and SSH tunnels)
  shotcut      org.shotcut.Shotcut
  steam        com.valvesoftware.Steam
  vscodium     com.vscodium.codium
  wireshark    org.wireshark.Wireshark
  xournal      com.github.xournalpp.xournalpp
  zed          dev.zed.Zed
  zen-browser  io.github.zen_browser.zen

Special cases:

  blender-povray: Blender → Flatpak (org.blender.Blender) + theme; POV-Ray
    stays pacman because it has no Flatpak and is a CLI renderer, not a GUI app.

  prismlauncher / stuntrally: were already Flatpak installs; added
    apply_flatpak_theme so they pick up the cyberqueer theme like everything else.

  vesktop: switched from AUR vesktop to Flatpak dev.vencord.Vesktop. The AUR
    build requires cargo and takes several minutes; the Flatpak is pre-built.
    Vencord config is now deployed to ~/.var/app/dev.vencord.Vesktop/config/
    (both Vencord/ and vesktop/ sub-dirs) instead of ~/.config/, which is where
    the Flatpak sandbox exposes its config directory.

  k8s: kubectl stays pacman (it is a CLI tool with no GUI, no Flatpak needed);
    podman-desktop switches from pacman podman-desktop to Flatpak
    io.podman_desktop.PodmanDesktop + theme, because it is a full GUI app.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 10:19:06 +02:00
Amir Alexander Abdelbaki b4d0aec647 feat(setup): wire mail-notmuch and caldav-sync into TUI installers + answerfile
Two fully-featured module scripts already existed under optional-Modules/apps/
(mail-notmuch.sh and caldav-sync.sh) but were never surfaced in the installer
UI, so users had no way to select them during setup.

Changes across three files:

simple-install.sh
  - count_steps(): added entries for mail-notmuch and caldav-sync so the
    [N/total] progress counter stays accurate; also back-filled 13 other apps
    (gimp, inkscape, krita, ardour, audacity, lmms, mixxx, cecilia, kdenlive,
    openshot, shotcut, anti-malware, timeshift) that were already in the
    checklist but missing from count_steps, causing the total to be wrong.
  - Checklist: added both entries under the CLI Tools header, directly after
    himalaya, with a human-readable description of the stack each installs.
  - Run section: added the conditional run_module calls so the modules
    actually execute when selected.

tui-install.sh (dialog-based TUI, same three locations as above)
  - count_steps(): added mail-notmuch and caldav-sync.
  - Checklist: added both entries with matching descriptions.
  - Run section: added the conditional run_module calls.

generate-answerfile.sh
  - Added both entries to the dialog checklist so the JSON answerfile
    generator (used for unattended / ISO-embedded installs) can also select
    them, keeping the answerfile schema in sync with the interactive TUIs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 10:19:06 +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 e840072f69 chore: ignore Python __pycache__ and *.pyc files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 09:04:01 +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 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 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 65ac398de6 added school project vpn-connect script 2026-06-09 11:05:52 +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 86808b4573 feat(archiso): add PXE/netboot.xyz boot support
Enable the netboot buildmode in profiledef.sh so mkarchiso produces a
netboot tarball (kernel + initrd + squashfs) alongside the ISO. Add
--netboot-url flag to build.sh which generates a ready-to-chainload
m-archy-netboot.ipxe script. Document the full netboot.xyz deployment
workflow in docs/md/archiso.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:45:28 +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