why the FUCK did i think making an init selector was a good idea
artix themselves dont even ship services in their online installer
they just give you a bare system and say "figure it out" and
it WORKS because people can just install their init of choice
afterwards. but nooooo i had to be clever and build a whole
netinstall-add monstrosity with openrc/runit/s6 service groups
that broke constantly because basestrap --overwrite is a lie
and init packages conflict with each other and sddm-openrc +
lightdm-openrc both Provide: init-displaymanager and pacman
just goes 🖕 during install.
so anyway. dinit only now. you want something else? read
changing-init.md, i literally copied the artix wiki tutorial.
i am not maintaining four init service groups in netinstall.yaml
for the rest of my life. this is my villain origin story.
actual changes:
- ripped out offline calamares mode (was never truly offline)
- ripped out packagechooser.conf (good fucking riddance)
- added packagechooser_dm.conf so you can at least pick your DM
- added BYODE offline installer (bare system + btrfs + snapper,
no DE, you pacman -Sy plasma-meta yourself)
- added yay + snapper + btrfs-progs to rootfs
- shoved Init Services + DM groups into netinstall.yaml (dinit
only, obviously)
- updated every markdown file that mentioned another init like
they were cursed (they were)
- wrote changing-init.md so i can just paste the link next time
someone asks
- X-KDE-IsAdminApplication=true so KDE stops acting like
calamares is a virus (its not, its just desperate)
6.0 KiB
title, layout, nav_order
| title | layout | nav_order |
|---|---|---|
| Development | default | 7 |
Development
Repository structure
antergos-iso/
├── buildiso # Modified buildiso with --overwrite='*' and branding
├── iso-profiles/
│ ├── antergos/
│ │ ├── profile.yaml # Packages, services (rootfs + livefs), compression
│ │ ├── root-overlay/ # Merged into squashfs rootfs → installed system
│ │ └── live-overlay/ # Merged into live environment only
│ └── common/
│ └── common.yaml # Shared base packages (kernel, firmware, filesystem)
├── pacman.conf.d/
│ └── iso-x86_64.conf # Pacman config for ISO build with [antergos-pkgs]
└── .github/workflows/
├── build.yml # ISO build + Internet Archive upload
└── pages.yml # Docs deployment to GitHub Pages
Building locally
export WORKSPACE_DIR="$PWD"
sudo -E ./buildiso -p antergos
See Building the ISO for full setup instructions and troubleshooting.
Critical gotchas
./buildiso vs buildiso
Always use the repo's ./buildiso, not the system Artix /usr/bin/buildiso. The system version lacks --overwrite='*' and will fail with file conflicts between calamares and calamares-branding-antergos-next.
sudo -E is required
Without -E, WORKSPACE_DIR is stripped and load_profile() returns empty HAS_LIVE/LIVEUSER, causing build failures immediately.
Pacman config must be user-overridden
buildiso reads from ~/.config/artools/pacman.conf.d/iso-x86_64.conf. If missing, it falls back to the Artix default at /usr/share/artools/pacman.conf.d/iso-x86_64.conf which lacks [antergos-pkgs].
mkdir -p ~/.config/artools/pacman.conf.d
cp pacman.conf.d/iso-x86_64.conf ~/.config/artools/pacman.conf.d/
CI does this automatically.
Repo order in iso-x86_64.conf
[antergos-pkgs] must be listed first in iso-x86_64.conf so custom packages (calamares, branding) take priority over Artix's. If Artix repos are first, our custom packages won't be installed.
Package order matters in profile.yaml
basestrap uses --overwrite='*'. The last package to claim a file wins. Package order in profile.yaml should list calamares BEFORE calamares-branding-antergos-next, so branding files overwrite Calamares defaults, not the other way around.
antergos-release must be in basestrap.conf operations
The filesystem package owns /usr/lib/os-release with "Artix Linux". To replace it with "Antergos NeXT", antergos-release must be listed in the operations list in iso-profiles/antergos/live-overlay/etc/calamares/modules/basestrap.conf. This ensures it's installed during bootstrapping with --overwrite. If it's missing from operations, the installed system will show "Artix Linux" in /usr/lib/os-release.
Squashfs compression
If $COMPRESSION is unset in profile.yaml, mksquashfs produces a sparse zero file instead of a valid squashfs. The ISO will be tiny and unbootable. Always verify compression is set, or remove stale images before retrying.
Calamares module precedence
/etc/calamares/modules/ overrides /usr/share/calamares/modules/. Live-overlay online/offline directories override both.
Live-overlay is not overlay-mounted
Live-overlay files are copied via cp -LR in make_livefs(). Deleting a file from live-overlay exposes the package version underneath. Use NoDisplay=true in .desktop files to hide entries.
plasma-wayland-session does not exist on Artix
Artix bundles the Wayland session into plasma-workspace itself. Do not add it to package lists.
SDDM theme override
kde_settings.conf from KDE's SDDM KCM sets Current=breeze. To override this, the antergos-sddm-theme package ships a theme.conf at /etc/sddm.conf.d/theme.conf. SDDM reads config files in alphabetical order — since theme.conf sorts after kde_settings.conf, its Current=antergos wins. If you're adding a new override file, make sure it sorts after kde_settings.conf.
Pipewire launcher on dinit
artix-pipewire-launcher detects the init system and only proceeds on supported ones. For dinit, the upstream script returns SUPPORT='' (unsupported). The forked version in [antergos-pkgs] patches this to SUPPORT='YES' for dinit. The XDG autostart entry (pipewire.desktop at /etc/xdg/autostart/) then starts pipewire on login.
File conflicts
calamaresandcalamares-branding-antergos-nextboth install to/usr/share/calamares/branding/default/— handled by--overwrite='*'filesystemandantergos-releaseboth claim/usr/lib/os-release— handled by includingantergos-releasein basestrap operations
calamares-next.sh SetConfig()
Must rm -f the existing file before cp, otherwise cp follows any existing symlink to the settings file.
CI does not trigger on push
The build.yml workflow only runs on workflow_dispatch (manual trigger from GitHub Actions tab). This prevents accidental ISO builds on every push.
Internet Archive bucket naming
ISO identifier format: antergos-next-YYYYMMDD-<run_number>. The -<run_number> ensures uniqueness even for multiple builds on the same day.
Testing a build
Boot the resulting ISO in a VM. Verify:
- Wayland is the default display server (SDDM session is
plasma.desktop) - No "Install Artix Linux" entry in the app menu
- Wallpaper is set on first login
- DE selector works
- Slideshow renders correctly
- Audio works after installation (pipewire should auto-start)
- After install,
/usr/lib/os-releaseshows "Antergos NeXT" - SDDM shows the Antergos theme, not Breeze
Custom packages repo
Custom PKGBUILDs live in the companion antergos-packages repo. The CI there builds them and publishes to GitHub Pages as a pacman repository:
[antergos-pkgs]
SigLevel = Optional TrustAll
Server = https://antergos-next.github.io/antergos-packages