mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
13 KiB
13 KiB
Installer Revamp Review Crosswalk
This branch is easiest to review as a behavior migration: each row below maps an old install script/behavior to its new owner and phase.
Install architecture
| Phase | Entry point | Runs as | Runs when | Owns |
|---|---|---|---|---|
| System install | system-finalize.sh -> install/system/all.sh |
root with OMARCHY_INSTALL_USER set to the non-root target user |
once at install/finalize time | machine config, services, login manager, root-owned post-install cleanup |
| User setup | omarchy-setup-user -> install/user/all.sh |
target user | install user during finalize.sh, and every future user on first login |
home config, AI skills, XDG dirs, app launchers, user services, user/session hardware tweaks |
| User finalization | finalize.sh |
target user | once during install | marks shipped migrations done, creates offline first-run marker, calls omarchy-setup-user --force, shows finish/reboot UI |
| First run system one-shot | omarchy-first-run when ~/.local/state/omarchy/first-run.mode exists |
install user with temporary sudoers | first graphical login after offline install | firewall/DNS/icon-cache/voxtype work that needs a live boot |
| First run user one-shot | omarchy-first-run when first-run-user.done is missing |
current user | first graphical login for every user | session-only user tasks: monitor recovery, GNOME settings, primary paste, welcome, Wi-Fi |
| Package-owned defaults | etc/**, config/**, applications/**, default/** via omarchy-settings / omarchy packages |
pacman | package install/upgrade | static /etc, /etc/skel, /usr/share/omarchy defaults |
Rules of thumb:
install/system/**should not write a user's home directory except through explicit target-user metadata likeOMARCHY_INSTALL_USER.omarchy-setup-useris the canonical path for current and future users./etc/skelseeds new homes, but setup-user keeps existing users and first-login users aligned. The runtimeomarchypackage depends onomarchy-installerso/usr/share/omarchy/install/user/**is present for future users.install/user/**contains reusable user setup pieces, but callers should normally invokeomarchy-setup-userrather than source those files directly.
Crosswalk
| Old file / behavior | New owner(s) | Phase | Review status / verification |
|---|---|---|---|
install.sh ran package install then directly entered finalize.sh. |
install.sh now runs root system-finalize.sh with OMARCHY_INSTALL_USER=$USER, then user finalize.sh. Offline callers must do the same root-before-user handoff. |
system -> user | `rg 'system-finalize |
finalize.sh ran all system/user/post-install phases. |
system-finalize.sh owns system phases; finalize.sh now calls omarchy-setup-user --force and post-install/finished.sh. |
split | `rg 'omarchy-setup-user |
install/packaging/all.sh mixed hardware package work and user app setup. |
install/packaging/system.sh for hardware-gated packages; install/packaging/user.sh for user package setup (nvim). App launchers/npm wrappers are driven through omarchy-refresh-applications in setup-user. |
split | cat install/packaging/{all,system,user}.sh |
install/config/config.sh copied config/** and bashrc into the install user's home. |
omarchy-settings seeds /etc/skel; omarchy-setup-user copies config/**, .bashrc, and .bash_profile for existing/current users. |
user setup + package/skel | `rg 'cp -R .*config |
install/config/theme.sh mixed system icon/Chromium setup and user theme setup. |
install/config/theme-system.sh and install/config/theme-user.sh. |
split | cat install/config/theme-{system,user}.sh |
install/first-run/gnome-theme.sh mixed user gsettings with root icon-cache refresh. |
install/first-run/gnome-theme-system.sh and install/first-run/gnome-theme-user.sh. |
first-run split | cat install/first-run/gnome-theme-{system,user}.sh |
install/config/branding.sh copied branding into the user config. |
/etc/skel/.config/omarchy/branding via package plus refresh in omarchy-setup-user. |
package + user setup | rg 'branding' bin/omarchy-setup-user /home/ryan/Work/omarchy/omarchy-pkgs/pkgbuilds/omarchy-settings/PKGBUILD |
install/config/omarchy-ai-skill.sh symlinked assistant skills. |
omarchy-setup-user. |
per-user | rg 'skills/omarchy' bin/omarchy-setup-user |
install/config/omarchy-toggles.sh seeded toggle flags. |
omarchy-setup-user; omarchy-refresh-hyprland also refreshes flags when resetting Hypr configs. |
per-user | `rg 'flags.lua |
install/config/detect-keyboard-layout.sh inserted /etc/vconsole.conf layout into Hypr config. |
omarchy-setup-user; omarchy-refresh-hyprland contains the same idempotent refresh behavior. |
per-user | `rg 'XKBLAYOUT |
install/config/user-dirs.sh created XDG dirs/bookmarks. |
omarchy-setup-user with idempotent bookmark insertion. |
per-user | `rg 'xdg-user-dirs |
install/config/mimetypes.sh set app/MIME defaults. |
omarchy-refresh-applications plus xdg-settings / xdg-mime in omarchy-setup-user. |
per-user | `rg 'omarchy-refresh-applications |
install/config/nautilus-python.sh copied Nautilus extensions. |
omarchy-setup-user. |
per-user | rg 'nautilus-python' bin/omarchy-setup-user |
install/config/localdb.sh ran updatedb. |
install/post-install/localdb.sh. |
system post-install | cat install/post-install/localdb.sh |
install/config/docker.sh restarted/daemon-reloaded Docker bits and added current user to docker. |
Package-owned Docker/resolved config in etc/**; docker.sh keeps the install-user group membership. |
system + package | cat install/config/docker.sh etc/docker/daemon.json etc/systemd/system/docker.service.d/no-block-boot.conf |
install/config/enable-services.sh and service enables scattered elsewhere. |
install/config/enable-services.sh is the centralized service-enable step for bluetooth/cups/avahi/docker/NetworkManager/power-profiles/sddm. |
system | rg 'systemctl enable' install |
install/config/hardware/network.sh enabled NetworkManager and disabled iwd/wait-online. |
NetworkManager enable moved to enable-services.sh; network.sh only disables iwd and masks wait-online. |
system | cat install/config/enable-services.sh install/config/hardware/network.sh |
install/config/hardware/bluetooth.sh mixed /etc/bluetooth with user WirePlumber and bt-agent. |
bluetooth.sh keeps system AutoEnable; bluetooth-user.sh handles user WirePlumber and user service; /etc/skel symlink seeds future users. |
split | cat install/config/hardware/bluetooth{,-user}.sh; find config/systemd/user -maxdepth 3 -type l -ls |
install/config/hardware/nvidia.sh installed drivers, wrote /etc, and appended user Hypr env vars. |
nvidia.sh keeps driver/system config; nvidia-user.sh appends user env vars idempotently. |
split | cat install/config/hardware/nvidia{,-user}.sh |
| ASUS audio mixer/mic scripts ran in system config. | Moved to install/config/user.sh; behavior preserved in asus/fix-audio-mixer.sh and asus/fix-mic.sh. |
per-user/session | `rg 'fix-audio-mixer |
| Framework AMD F13 audio input ran in system config. | Moved to install/config/user.sh; framework/fix-f13-amd-audio-input.sh preserves the pactl profile fix. |
per-user/session | `rg 'fix-f13 |
install/config/hardware/fix-synaptic-touchpad.sh was removed in the split. |
Restored and called from install/config/all.sh. |
system hardware | rg 'fix-synaptic-touchpad' install/config/all.sh install/config/hardware/fix-synaptic-touchpad.sh |
install/config/lockscreen-pam.sh delegated to omarchy-setup-lock. |
Kept as omarchy-setup-lock; omarchy-setup-lock now honors OMARCHY_INSTALL_USER. |
system helper | cat install/config/lockscreen-pam.sh; rg 'OMARCHY_INSTALL_USER' bin/omarchy-setup-lock |
install/config/increase-fd-limit.sh wrote systemd manager nofile drop-ins. |
Package-owned etc/systemd/system.conf.d/20-omarchy-nofile.conf and etc/systemd/user.conf.d/20-omarchy-nofile.conf; legacy 99 files removed by post-install/legacy-cleanup.sh. |
package + cleanup | cat etc/systemd/{system.conf.d,user.conf.d}/20-omarchy-nofile.conf install/post-install/legacy-cleanup.sh |
install/config/increase-file-watchers.sh ran sysctl --system. |
Package-owned etc/sysctl.d/90-omarchy-file-watchers.conf; install is followed by reboot. |
package | cat etc/sysctl.d/90-omarchy-file-watchers.conf |
install/config/fast-shutdown.sh only reloaded systemd after drop-ins. |
Package-owned faster-shutdown drop-ins; install is followed by reboot. | package | cat etc/systemd/system.conf.d/10-faster-shutdown.conf etc/systemd/system/user@.service.d/10-faster-shutdown.conf |
install/config/powerprofilesctl-rules.sh and wifi-powersave-rules.sh wrote/reloaded udev rules. |
Package-owned etc/udev/rules.d/99-omarchy-*.rules; post-install/legacy-cleanup.sh removes old non-namespaced rules; post-install/udev.sh reloads/triggers. |
package + post-install | cat etc/udev/rules.d/99-omarchy-*.rules install/post-install/{legacy-cleanup,udev}.sh |
install/config/gpg.sh copied GnuPG config and restarted dirmngr. |
Package-owned etc/gnupg/dirmngr.conf; live dirmngr restart removed. |
package | cat etc/gnupg/dirmngr.conf |
install/config/pi.sh activated Pi theme. |
No direct install path remains; theme changes still run Pi retint hooks when applicable. | intentionally removed / review | rg 'omarchy-theme-set-pi' bin install migrations |
install/login/all.sh mixed default keyring with SDDM/login manager work. |
install/login/system.sh owns SDDM/hibernation/limine; install/login/default-keyring.sh runs through user setup and is idempotent. |
split | cat install/login/system.sh install/login/default-keyring.sh |
install/login/sddm.sh wrote/copied static SDDM config/assets, autologin, PAM tweaks, and enabled service. |
Static SDDM drop-ins live under etc/sddm.conf.d; theme/session assets are package-owned; sddm.sh now manages only autologin, legacy hyprland.conf cleanup, and PAM tweaks; service enable moved to enable-services.sh. |
package + system | cat etc/sddm.conf.d/*.conf install/login/sddm.sh install/config/enable-services.sh |
install/post-install/allow-reboot.sh created online reboot sudoers. |
Kept, now also grants one-time cleanup; omarchy-first-run calls cleanup-reboot-sudoers.sh with sudo -n so future users are not prompted. |
online post-install + first-run cleanup | cat install/post-install/allow-reboot.sh install/first-run/cleanup-reboot-sudoers.sh |
Deleted migration/helper policy
Old migrations that only sourced helpers now replaced by package-owned files were removed with their helpers. Legacy cleanup that still matters moved into install/post-install/legacy-cleanup.sh:
- old udev rule names:
/etc/udev/rules.d/99-power-profile.rules,/etc/udev/rules.d/99-wifi-powersave.rules - old nofile drop-in names:
/etc/systemd/system.conf.d/99-omarchy-nofile.conf,/etc/systemd/user.conf.d/99-omarchy-nofile.conf
Review commit plan
The branch should be reviewed in this order:
installer: split root and user finalizationinstall.sh,system-finalize.sh,finalize.sh,install/system/all.sh,install/user/all.sh, helper/root-aware changes.
setup: make omarchy-setup-user canonical for usersbin/omarchy-setup-user,bin/omarchy-first-run, user setup idempotency fixes,default-keyring,cleanup-reboot-sudoers.
install: split packaging phasesinstall/packaging/{all,system,user}.shand app setup routing throughomarchy-refresh-applications.
install: split theme and first-run theme setuptheme.sh->theme-system.sh/theme-user.sh;gnome-theme.sh-> first-run system/user split.
install: move static system config to package-owned filesetc/**additions, removal of no-op helpers/migrations, post-install legacy cleanup/udev/localdb.
install: split user-scoped hardware/session config- bluetooth/nvidia split, ASUS/Framework user audio fixes, Synaptics restoration.
install: split SDDM config from autologin- package-owned SDDM drop-ins, trimmed
sddm.sh, centralized service enable.
- package-owned SDDM drop-ins, trimmed
docs: add installer review crosswalk- this file.
Follow-up checks
git status --porcelain=v1 --untracked-files=all
rg 'systemctl enable' install
rg 'fast-shutdown|increase-file-watchers|powerprofilesctl-rules|wifi-powersave-rules|increase-fd-limit' install migrations bin || true
bash -n install.sh system-finalize.sh finalize.sh bin/omarchy-setup-user bin/omarchy-first-run
bash test/offline-finalizer-bootstrap-test.sh