Commit Graph

31 Commits (da0d3180220740b29b3f8451228ee02d8ffab14c)

Author SHA1 Message Date
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 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 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 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 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 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 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 5d976f5aad feat(modules): add graphic design, video editing, and audio app modules
Add separate install modules for GIMP, Inkscape, Krita, Kdenlive, OpenShot,
Shotcut, Audacity, LMMS, Ardour, Mixxx, and Cecilia.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:47:12 +02:00
Amir Alexander Abdelbaki 63cd59fb91 feat(modules): add lamco-rdp-server module
Installs lamco-rdp-server from AUR (native Wayland RDP server, Rust,
H.264/VA-API). Enables lamco-rdp-server.service as a systemd user
service. Wired into tui-install.sh alongside the existing rdp-client
and qemu entries.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:15:59 +02:00
Amir Alexander Abdelbaki eb3ae766a5 feat(modules): add RDP client and QEMU/KVM modules
rdp-client.sh: installs Remmina with the FreeRDP and libvncserver plugins
for RDP and VNC sessions.

qemu.sh: installs the full QEMU/KVM stack (qemu-full, libvirt, virt-manager,
virt-viewer, dnsmasq, bridge-utils, edk2-ovmf, swtpm, vde2), enables and
starts libvirtd, auto-starts the default NAT network, and adds the user to
the libvirt and kvm groups.

Both modules are wired into tui-install.sh: count_steps, checklist,
confirmation summary, and run_module dispatch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 15:12:21 +02:00
Amir Alexander Abdelbaki 33934f633d feat(setup): add anti-malware module with freshclam cron job
Adds clamav, clamtk, rkhunter, chkrootkit and installs a twice-daily
/etc/cron.d/freshclam entry for automatic virus definition updates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 19:58:35 +02:00
Amir Alexander Abdelbaki cfb949dff3 timeshift installer module 2026-05-19 11:49:25 +02:00
Amir Alexander Abdelbaki d05eb3ad89 setup: add browser/IDE modules and lynx to core packages
New optional modules (browsers): chromium, firefox, zen-browser,
nyxt, librewolf, min-browser.
New optional modules (editors/IDEs): vscodium, zed, geany,
codeblocks, kate.
Add lynx to default core packages.

All 11 modules wired into both install-modules.sh and tui-install.sh
(the archiso-embedded installer) with consistent count_steps,
checklist, summary, and dispatch entries. Every module path verified
to exist; all scripts pass bash -n syntax check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 14:23:43 +02:00
Amir Alexander Abdelbaki 86cf9b954f setup: add dust to core packages and POV-Ray to blender module
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 12:17:56 +02:00
Amir Alexander Abdelbaki f34d90f1a8 setup: add dialog TUI to freeipa-client module for enrollment
Presents a Cyberqueer-themed menu after package install:
- Answerfile: prompts for path (defaults to FreeipaAnsible/freeipa-client-answerfile.json),
  offers to create one with defaults if it doesn't exist
- Manual: dialog inputboxes for domain, realm, server, hostname, principal,
  passwordbox for the admin password, yes/no for mkhomedir/sudo/dns/fido2
- Skip: prints post-install hints

Falls back to ipa-client-install directly if freeipa-client.sh is not
available (standalone install outside the dotfiles repo).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:45:04 +02:00
Amir Alexander Abdelbaki c51af40fce setup: add freeipa-client module and FreeIPA group-based module automation
- Add freeipa-client module (sssd, cyrus-sasl-gssapi, freeipa-client AUR)
  with post-install enrollment hints; wired into tui-install.sh and
  install-modules.sh
- Add ansipa-install-modules.sh: reads IPA host groups named
  ansipa-module-<name>, applies matching module scripts via a yay wrapper
  that drops to ANSIPA_USER so AUR builds work from the root service
- Add ansipa-install-modules.service + .timer (boot + 30 min)
- Add deploy-ansipa-modules.yml Ansible playbook that deploys scripts,
  writes /etc/ansipa-modules.conf, and enables the timer

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:40:51 +02:00
Amir Alexander Abdelbaki 9e708556d5 setup: replace proxmox-vm target with proxmox-lxc in image builder
The previous proxmox-vm target (virt-customize + QCOW2) is replaced with
a proper Proxmox LXC CT template builder:

- Exports container rootfs as .tar.zst (same mechanism as the lxc target)
- Asks for CT ID, storage, bridge, memory, cores, disk size
- Generates pve-ct-<VMID>.conf with the required FreeIPA LXC options:
    unprivileged: 0
    lxc.apparmor.profile: unconfined
    lxc.cap.drop:
    lxc.mount.auto: proc:rw sys:rw cgroup:rw
    lxc.cgroup2.devices.allow: a
- Generates proxmox-lxc-setup.txt with the full 6-step setup guide
  (upload, pct create, apply LXC opts, set env vars, start, Keycloak)
- Optionally uploads template + conf to Proxmox host via SCP if a
  host is provided

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:27:50 +02:00
Amir Alexander Abdelbaki f66775ce54 setup: add FreeIPA image builder and Keycloak integration
freeipa-image-builder.sh: TUI chooser that builds a FreeIPA server image
and exports it to four target formats:
  docker      — builds via podman/docker, optional registry push
  lxc         — exports container rootfs as .tar.zst Proxmox CT template,
                 generates pct import instructions
  proxmox-vm  — downloads Rocky/Fedora cloud image, customizes with
                 virt-customize, outputs QCOW2 + cloud-init user-data.yml
  oci-archive — skopeo OCI tarball for air-gapped import

Keycloak TUI option generates the full constellation:
  docker-compose.yml   FreeIPA + Keycloak + PostgreSQL stack
  .env                 pre-filled env template (passwords placeholder)
  keycloak-configure.sh  post-start Keycloak REST API config script

image/Dockerfile: Fedora 41 + freeipa-server-dns + ansible-core,
systemd-enabled container (CMD /sbin/init).

image/ipa-first-boot.{sh,service}: systemd oneshot that runs
ipa-server-install on first container/VM boot from env vars
(IPA_DOMAIN, IPA_ADMIN_PASSWORD, IPA_DM_PASSWORD, and optionals).
ConditionPathExists=!/etc/ipa/default.conf makes it idempotent.

image/keycloak-configure.sh: Keycloak REST API automation that:
  - waits for Keycloak readiness
  - creates a realm
  - wires FreeIPA LDAP user federation (READ_ONLY, vendor=rhds)
  - adds attribute mappers: email, firstName, lastName, uidNumber
  - adds group mapper (IPA groups → Keycloak groups, cn=groups,cn=accounts)
  - triggers an initial full user sync

image/docker-compose.yml: freeipa + postgres + keycloak services on
a private 172.30.0.0/24 bridge; FreeIPA has a fixed IP so Keycloak
can resolve it via extra_hosts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:22:48 +02:00
Amir Alexander Abdelbaki 7279a781b0 setup: add FreeIPA server module and generic client script
freeipa-server.sh: interactive installer that collects domain, realm,
IP, admin/DM passwords, DNS, KRA, NTP, and AWX/Ansible settings;
runs conflict pre-flight (checks for existing named/dirsrv/krb5kdc,
ports 389/636/88, and /etc/ipa/default.conf); configures firewalld/ufw;
runs ipa-server-install; and outputs a ready-to-distribute client
package to ~/freeipa-output/ containing:
  - freeipa-enroll.sh (server defaults baked in)
  - freeipa-client.sh (server defaults baked in)
  - freeipa-client-answerfile.json (pre-filled, password intentionally blank)
  - auto-enroll-ansible.sh (AWX defaults embedded, still overridable)
  - README.txt

freeipa-client.sh: thin wrapper around freeipa-enroll.sh with three modes:
  --answerfile FILE   read JSON with jq, build args, exec freeipa-enroll.sh
  --interactive       prompt for every field, then exec freeipa-enroll.sh
  [flags]             passthrough directly to freeipa-enroll.sh

freeipa-client-answerfile.json: template with current server defaults
(freeipa.abdelbaki.eu); freeipa-server.sh sed-replaces these when
generating customized copies.

Supported server OS: RHEL/Rocky/AlmaLinux/Fedora (primary), Arch (warned).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:12:31 +02:00
Amir Alexander Abdelbaki 36a938c3ec setup: add Open WebUI module
Installs open-webui from AUR and enables open-webui.service.
Serves the browser UI at http://localhost:8080; Ollama module
should be installed first for full LLM backend functionality.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:01:20 +02:00
Amir Alexander Abdelbaki 5455a26a28 setup: add ollama and llama.cpp modules
ollama.sh: installs from official repos, enables ollama.service, notes
GPU sharing caveat with llama.cpp. For NVIDIA/AMD GPU variants use
ollama-cuda or ollama-rocm from AUR instead.

llama-cpp.sh: standalone inference CLI and server via yay (covers both
official repos and AUR). Both modules coexist at the package level;
docker/podman/cockpit modules confirmed conflict-free (all use --needed,
podman+cockpit base packages already in core-packages.sh).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:53:12 +02:00
Amir Alexander Abdelbaki b9b32c59c4 setup: add Claude Code module
Installs @anthropic-ai/claude-code via npm, sourcing nvm if npm is not
already in PATH. Wired into tui-install.sh and install-modules.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:46:13 +02:00
Amir Alexander Abdelbaki 00e6d245ae setup: add 17 optional modules, expand core packages, add install-modules entrypoint
New modules: networking-cli (nmap/nethogs/mitmproxy/httpie), disk-recovery
(ddrescue/f3), himalaya, gnuplot, povray, blender, toot, db-clients
(pgcli/mycli), mysql (mariadb), productivity (taskwarrior/watson/jrnl),
yt-dlp, sox, imagemagick, ffmpeg-extras, localtunnel, butter, tlp.

core-packages: add fdupes, tldr, onefetch; move networking analysis tools
(nmap, mtr, net-tools, ipcalc, tcpdump, traceroute) to networking-cli module.

tui-install: expand checklist to 34 optional modules with full count/summary/
dispatch coverage.

install-modules.sh: standalone TUI entrypoint to install any optional module
on an already-configured system.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:41:47 +02:00
Amir Alexander Abdelbaki 15d78aece3 setup: add croc to optional apps; fix shell match in tui summary
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 03:03:01 +02:00
Amir Alexander Abdelbaki 562704139b setup: add ssh-server, docker, podman, cockpit optional modules; add less to pacstrap
- New optional modules: ssh-server (openssh, key auth hardened), docker
  (+ compose, docker group), podman (rootless, buildah, skopeo, lingering),
  cockpit (+ cockpit-machines, cockpit-podman, cockpit-navigator via AUR)
- openssh added to archiso packages.extra for live-env SSH access
- less added to pacstrap base install
- tui-install.sh wired up for all four new modules (checklist, count,
  summary, run); dialog dimensions bumped to fit 17 items

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:54:13 +02:00
Amir Alexander Abdelbaki bdc5b55c57 setup: expand apps list, fold nettools into core, fix hyprland packages
Apps (new individual scripts):
  wireshark, localsend, onlyoffice, vintagestory

core-packages.sh: add nmap mtr tcpdump net-tools iputils ipcalc
  (bind + traceroute were already present; wireshark is now optional)

hyprland.sh:
  - pinta moved from yay to pacman (available in extra)
  - localsend removed from mandatory yay install (now an optional app)

Deprecate nettools.sh — all its packages are now in core or split out.

tui-install.sh: apps checklist gains wireshark, localsend, onlyoffice,
  vintagestory; drops nettools; dialog sized for 12 items.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:46:30 +02:00
Amir Alexander Abdelbaki 17bfa0e884 setup: add per-app install scripts and TUI apps phase
Break up gaming-packages.sh and network-developer-packages.sh into
individual scripts under optional-Modules/apps/:
  steam, vesktop (+ Vencord config), spotify (+ Spicetify config),
  prismlauncher, nettools, k8s

tui-install.sh:
  - Simplify component checklist to 5 items: pkg/core/svc/shell/de
  - Add dedicated "Applications" checklist phase after DE selection,
    covering all 9 optional apps independently
  - count_steps accounts for each selected app as a separate step
  - Confirmation summary shows components and apps in separate sections

install.sh: replace unconditional bundle calls with commented-out
  individual app lines (opt-in)

Deprecate gaming-packages.sh and network-developer-packages.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:25:50 +02:00