Commit Graph

1006 Commits (388eb7b5a5fbc6d857968074745fc86ed024ac89)

Author SHA1 Message Date
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 da0d318022 feat(mail): install w3m and write mailcap for HTML email rendering
Adds w3m to the install list and appends the text/html mailcap entry
so alot renders HTML emails as plain text via w3m -dump.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 16:07:54 +02:00
Amir Alexander Abdelbaki 325c6def66 fix(caldav): write per-calendar khal config instead of broken glob
The glob path = .../calendars/* was not expanded by khal, so no events
were visible. Now caldav-sync.sh and ics-to-calendarim both generate
explicit [[name]]/path entries per calendar and regenerate the config
on every sync so newly discovered calendars are picked up automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 14:40:37 +02:00
Amir Alexander Abdelbaki f25b761f3d fix(nvim): replace calendar.vim with khal interactive for event display
calendar.vim hangs on Google token errors; khal interactive reads the
same vdirsyncer ICS files directly and provides a working calendar+event TUI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 14:26:17 +02:00
Amir Alexander Abdelbaki dc11cc007d feat(nvim): enable calendar.vim event loading from local ICS cache
Sets g:calendar_google_calendar so calendar.vim attempts to load events,
falling back to the cache populated by ics-to-calendarim.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 14:23:32 +02:00
Amir Alexander Abdelbaki 5948629c28 feat(nvim): sync CalDAV on startup via background jobstart
Runs vdirsyncer sync + ics-to-calendarim in a detached background job
on VimEnter so the calendar.vim cache stays fresh without blocking startup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 14:12:24 +02:00
Amir Alexander Abdelbaki e454482970 feat(caldav): add CalDAV sync script with calendar.vim cache converter
Installs vdirsyncer + khal, writes vdirsyncer/khal configs, creates
ics-to-calendarim converter to populate calendar.vim local JSON cache,
and sets up a systemd user timer for 15-minute periodic sync.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 14:11:06 +02:00
Amir Alexander Abdelbaki 211763d2c8 fix(nvim): guarantee abook pane is at least 20 lines tall
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:40:45 +02:00
Amir Alexander Abdelbaki c2514b6fb5 fix(nvim): guarantee abook/calendar column is at least 80 cols wide
Right column was derived as W - left_w, making it too narrow on smaller
terminals. Now right_w = max(80, 45% of W) and left_w takes the rest.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:39:04 +02:00
Amir Alexander Abdelbaki 50c5b72683 fix(nvim): auto-insert in terminal buffers, add terminal window nav
- BufEnter term://* auto-calls startinsert so alot/abook receive keys
  immediately without needing to press i/a first (skips floaterm)
- <C-hjkl> in terminal-insert mode exits to normal then moves window,
  matching the existing normal-mode nav mappings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:35:31 +02:00
Amir Alexander Abdelbaki ddd632fb7e fix(alot): restore esc = exit in search mode, add / = refineprompt
esc closes the search buffer (exits alot only if it is the last buffer).
/ opens a prompt pre-filled with the current query for regex refinement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:31:22 +02:00
Amir Alexander Abdelbaki 050d91d544 fix(alot): remove esc = exit from search mode
In the inbox/search view, exit has nowhere to go back to so it quit
alot entirely. Esc is now only bound in thread/taglist/bufferlist where
it navigates back without closing the application.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:25:44 +02:00
Amir Alexander Abdelbaki e9ff562c1e feat(alot): track alot config in dotfiles and symlink like other configs
- Add alot/config with account details and esc keybindings
- shell-setup.sh: rm -rf ~/.config/alot && ln -sf ~/Dotfiles/alot
- mail-notmuch.sh: patch account block in Dotfiles/alot/config via
  python3 regex instead of overwriting the whole file

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:19:28 +02:00
Amir Alexander Abdelbaki 85e810d70b feat(nvim,alot): full-screen PIM layout + alot Esc bindings
- x now opens a full-screen overlay: alot left (55%), abook top-right,
  calendar bottom-right
- Add esc = exit bindings to alot config for search/thread/taglist/
  bufferlist modes, applied to live ~/.config/alot/config and to the
  mail-notmuch.sh setup script

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 13:12:25 +02:00
Amir Alexander Abdelbaki 9db080dc0f refactor(nvim): remap PIM toggle from r to x
Removes the old x → DBUI_ExecuteQuery binding to free the key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 12:30:05 +02:00
Amir Alexander Abdelbaki b1bdb3c540 fix(nvim): set winhighlight via nvim_set_option_value, not open_win
winhighlight is a window option, not an nvim_open_win config key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 12:09:15 +02:00
Amir Alexander Abdelbaki 766cfc0f8f fix(nvim): fix black float backgrounds and guarantee abook 24-line height
- Add winhighlight=Normal:Normal to all floats so they inherit the
  colorscheme background instead of showing NormalFloat (black)
- Pin abook to min 24 lines; mail/calendar split the remaining height

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 12:08:20 +02:00
Amir Alexander Abdelbaki 890cb8819b fix(nvim): pass -position=here to Calendar to open in current window
calendar.vim defaults to tabnew, which escaped the floating window.
-position=here makes it edit into the current buffer instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 12:06:21 +02:00
Amir Alexander Abdelbaki 47b94056ac fix(nvim): correct PIM layout to sideward-T left-column overlay
r now opens three stacked floating windows in a left column (the bar
of the sideward T), leaving the document visible to the right (stem).
Order top→bottom: alot 40%, calendar 30%, abook remainder.
Column is min(90, 45% of screen) cols wide. All sizes are clamped to
≥1 to prevent nvim_open_win errors on small terminals.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 12:02:32 +02:00
Amir Alexander Abdelbaki 96610b7ed0 feat(nvim,mail): floating PIM windows + notmuch/alot setup script
- Replace tab/vsplit PIM approach with nvim_open_win floating windows:
  r opens a tiled full-screen overlay (alot top, calendar+abook bottom)
  n/g/f open individual centered floats with rounded border
- Add setup/modules/optional-Modules/apps/mail-notmuch.sh:
  configures mbsync, msmtp, notmuch, alot from interactive prompts
  installs a systemd user timer for 5-min periodic mail sync

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 11:57:43 +02:00
Amir Alexander Abdelbaki 00b178103e feat(nvim): add PIM panel with calendar, alot mail, and abook
Adds itchyny/calendar.vim plugin and keybinds for a PIM sidebar:
- r: full-screen tab with alot (top), calendar + abook (bottom split)
- n/g/f: individual vsplit toggles for alot, calendar, abook
- Restores <C-hjkl> window nav inside calendar buffers
- shell-setup.sh installs notmuch, alot, abook (AUR) and syncs lazy.nvim

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 11:52:05 +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 3e78c7cb2a fix(installer): allow root execution in archiso by shimming sudo
When running as root (archiso chroot context), all three TUI installers
previously died immediately. Replace the hard die with a sudo passthrough
shim ($TMP_D/bin/sudo → exec "$@") prepended to PATH, so every module's
`sudo pacman`, `sudo systemctl` etc. just executes directly as root.
The shim lives in TMP_D and is cleaned up by the existing EXIT trap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 05:04:55 +02:00
Amir Alexander Abdelbaki f358cb6d2c fix(installer): fix FIDO2 user login and AUR module failures
- Pin pamu2fcfg enrollment to the target hostname (-o/-i pam://$HOSTNAME)
  so the credential origin matches pam_u2f.so at runtime; enrolling outside
  the chroot previously used the live ISO hostname, causing auth to fail
- Add `cue` to the pam_u2f.so PAM line so ly prompts the user to touch
  the key after password entry
- Add --needed to hyprlua AUR yay call to survive re-runs
- Degrade gracefully in lamco-rdp-server when no user D-Bus session is
  active (systemctl --user enable would abort the module under set -e)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 04:06:49 +02:00
Amir Alexander Abdelbaki 0c88a09a0f feat(installer): add structured logging to all modules and installers
Add modules/lib/logging.sh with log(), skip(), warn(), err() helpers.
Source it in all 84 scripts (core, DEs, optional apps) and replace bare
echo calls with structured log messages. Add log file capture to install.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 01:44:31 +02:00
Amir Alexander Abdelbaki 242a544909 added create-webapp.sh - via claude 2026-05-22 00:53:04 +02:00
Amir Alexander Abdelbaki 69f5b3c13b feat(modules): add sauerbraten and stuntrally modules
sauerbraten: open-source Cube 2 FPS (pacman)
stuntrally: rally racing game via Flatpak (io.github.stuntrally.StuntRally3)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 00:17:17 +02:00
Amir Alexander Abdelbaki 6d27c189f3 feat(modules): add openarena, tetris CLI, and doom modules
openarena: open-source Quake III Arena (pacman)
tetris: bastet + vitetris (pacman + AUR)
doom: Chocolate Doom + Freedoom game data (pacman)

Wired up in simple-install.sh, tui-install.sh, and install-modules.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 23:51:33 +02:00
Amir Alexander Abdelbaki 33d2fe7715 fix(installer): replace nmtui with iwctl instructions in network check
nmtui is not available on the archiso live environment; direct users to
iwctl (WiFi) or ethernet instead, and pause for input before re-checking.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 23:47:36 +02:00
Amir Alexander Abdelbaki 832eb2df5b feat(installer): add xournal++ module, merge blender+povray, sync tui with simple
- Add apps/xournal.sh (xournalpp) wired into both installers
- Merge apps/blender.sh + apps/povray.sh → apps/blender-povray.sh; remove old files
- Sync tui-install.sh with simple-install.sh: add the 13 missing app modules
  (gimp, inkscape, krita, ardour, audacity, lmms, mixxx, cecilia,
   kdenlive, openshot, shotcut, anti-malware, timeshift) to checklist,
   count_steps, summary, and run_module sections

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 23:35:29 +02:00
Amir Alexander Abdelbaki e7873d2874 feat(installer): wire up all missing optional modules in simple-install.sh
Adds 13 previously unlinked app modules (gimp, inkscape, krita, ardour,
audacity, lmms, mixxx, cecilia, kdenlive, openshot, shotcut, anti-malware,
timeshift) to the checklist, summary loop, and dispatch block, with three
new TUI sections: Graphics & Design, Audio & Music, and Video Editing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 23:21:46 +02:00
Amir Alexander Abdelbaki 379dfc4885 feat(installer): replace number-input checklist with scrollable TUI
Arrow keys navigate a viewport-bounded list, Space toggles items,
Enter/n confirms — fixes overflow on the app selection screen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 22:58:02 +02:00
Amir Alexander Abdelbaki cdccc7634a feat(installer): replace dialog with pure-bash TUI in simple-install.sh
Rewrites simple-install.sh to use ANSI/read-based TUI primitives
(tui_msg, tui_yesno, tui_input, tui_checklist, tui_menu) instead of
dialog, removing the dialog dependency entirely.

Updates archbaseos-guided-install.sh to invoke simple-install.sh and
drops dialog from the archiso package list; error_handler now uses the
plain read-based croc prompt unconditionally.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 22:23:11 +02:00
Amir Alexander Abdelbaki 1f1e9f6f9c fix(installer): fix tui-install on bare console + add network check to archiso installers
tui-install.sh: dialog height=40 apps checklist and height=24 confirm
dialog both exceeded the standard 24-row VT console, causing dialog to
exit with code 1 and silently skip all apps. Make both heights
terminal-adaptive via tput lines/cols. Also extend the EXIT trap to
reset the terminal so Ctrl-C during a dialog doesn't leave the console
in raw/no-echo mode.

arch-autoinstall.sh, archbaseos-guided-install.sh: add a ping 1.1.1.1
check early in both scripts. In interactive mode, launches nmtui if
offline, then re-checks; prompts to abort if still down. Answerfile
mode logs a warning and continues.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 21:18:46 +02:00
Amir Alexander Abdelbaki dbb1be0081 fix(installer): show password input in plain text
Remove -s flag from read so the password is visible while typing,
enabling piped input to work visibly on the ISO installer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 20:45:17 +02:00
Amir Alexander Abdelbaki fb4cef6a09 fix(archiso): chmod 777 build and out dirs after mkarchiso
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 20:36:49 +02:00
Amir Alexander Abdelbaki cfe102b26f fix(installer): run pamu2fcfg outside arch-chroot to fix FIDO2 user enrollment
Inside the chroot the host's udev manages /dev/hidraw* with permissions
scoped to live-system groups; the new user has none of them, so pamu2fcfg
timed out with "No FIDO authenticator found". Move enrollment to after
CHROOT_EOF where it runs as root on the live system, then fix ownership
using the new system's UID/GID.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 20:29:30 +02:00
Amir Alexander Abdelbaki aae5042258 fix(installer): remove lvm2 hook from mkinitcpio — setup uses LUKS2+btrfs, no LVM
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 19:37:01 +02:00
Amir Alexander Abdelbaki a0a2b66ccf feat(installer): show croc log-send TUI on install error
On any ERR, both installers now trap the failure, log the line/exit
code, and pop a dialog yes/no asking whether to send the log to another
system via croc. Falls back to a plain read prompt if dialog is absent.
Added dialog and croc to packages.extra so they are present in the live ISO.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 19:28:43 +02:00
Amir Alexander Abdelbaki 319af7bde7 fix(installer): add logging to guided installer and fix NVMe partition naming
- Add full session logging (tee to logfile) to archbaseos-guided-install.sh,
  matching the pattern already in arch-autoinstall.sh; copy log to /mnt/boot/
  at the end so it survives into the new system
- Add part() helper to both installers so NVMe/eMMC drives use the correct
  'p' separator (e.g. /dev/nvme0n1p1 instead of the broken /dev/nvme0n11)
- Add disk size guard to arch-autoinstall.sh: fail early with a clear message
  if ROOT_GIB would be < 8GiB instead of passing a nonsense value to parted

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 18:54:57 +02:00
Amir Alexander Abdelbaki 95617dd673 fix(keymaps): fall back to :q when :wq fails on bufferless windows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:15:18 +02:00
Amir Alexander Abdelbaki 547c997614 feat(ansipa): rework scan-notify as per-user policy
policy-scan-notify is now a FreeIPA *user* group instead of a host group,
so alert notifications follow the user to every enrolled machine. The
fetch-alerts timer is installed fleet-wide on any host where the group exists;
the profile.d snippet gates notification daemon start on runtime group
membership (id(1) / SSSD) so non-members log in unaffected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 16:41:35 +02:00
Amir Alexander Abdelbaki 87b62f368b feat(ansipa): rework binary blocking as per-user policy; add local_sudo device policy
policy-block-binary-<name> is now a FreeIPA *user* group instead of a host group,
so restrictions follow the user to every enrolled machine. The PATH wrapper is
installed on all hosts and checks group membership at runtime via id(1)/SSSD,
passing non-members through transparently. __ in the group name decodes to .
so Flatpak app IDs are supported (flatpak run fallback included). AppArmor layer
removed since per-user confinement requires a different approach and the wrapper
alone is sufficient. Adds local_sudo_<username> host group policy which writes
a sudoers drop-in granting that user full sudo on the specific device, reverted
on group leave.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 16:31:43 +02:00
Amir Alexander Abdelbaki 6ad8d0d488 feat(ansipa): add no_local_users device policy to lock all local account passwords
Adds a new host group policy `no_local_users` that locks the passwords of root
and all local users (UID >= 1000) via `passwd -l`, ensuring only FreeIPA domain
accounts with centrally-managed sudo rules can authenticate and gain elevated
privileges. Leaving the group reverts by unlocking every account tracked in the
state file. Updates docs with group reference entry and Local User Lockdown section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 16:18:48 +02:00
Amir Alexander Abdelbaki 3ef916290c docs: add graphic design, video editing, and audio modules to modules reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:48:46 +02:00