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)
3.7 KiB
title, layout, nav_order
| title | layout | nav_order |
|---|---|---|
| Changing init | default | 9 |
Changing init on an installed system
Antergos NeXT ships with Dinit as the default and only install-time init. If you prefer a different init (OpenRC, Runit, or S6), you can switch after installation.
Warning: Switching init is for advanced users. In general, a fresh installation is safer. Keep a bootable Artix LiveUSB handy in case something goes wrong.
Overview
- Stop your display manager and get to a TTY
- Save a list of installed
-dinitservice packages - Download the corresponding
-<newinit>packages - Remove the dinit packages
- Install the new init packages
- Enable services for the new init
- Cold reboot
Step-by-step
1. Stop the display manager
dinitctl stop sddm # or lightdm / lxdm / greetd / ly
Switch to a text TTY with Ctrl+Alt+F2 and log in as root.
2. Save your service list
pacman -Qsq dinit > services.list
This captures every installed package with -dinit in its name.
The list will include things like sddm-dinit, networkmanager-dinit,
elogind-dinit, etc.
3. Download packages for the new init
Replace openrc with runit, s6, or your init of choice:
pacman -Sw $(sed 's/dinit/openrc/g' < services.list)
This fetches the packages into pacman's cache without installing them. If this fails for any package, you'll need to install it manually later.
4. Remove the old init packages
pacman -Rdd $(cat services.list)
The -dd flag bypasses dependency checks — required because we're
ripping out the entire init layer at once.
5. Install the new init
First install the base init package and elogind:
| Target | Base packages |
|---|---|
| OpenRC | openrc, elogind-openrc |
| Runit | runit, elogind-runit |
| S6 | s6-base, elogind-s6 |
pacman -S openrc elogind-openrc
Then install the service packages:
pacman -S $(sed 's/dinit/openrc/g' < services.list)
6. Enable services
Switching to OpenRC
rc-update add sddm default
rc-update add NetworkManager default
# ... repeat for each service
Common services: acpid, bluetoothd, cronie, cupsd, dbus,
dhcpcd, NetworkManager, power-profiles-daemon, syslog-ng.
Switching to Runit
ln -s /etc/runit/sv/NetworkManager /etc/runit/runsvdir/default/
ln -s /etc/runit/sv/sddm /etc/runit/runsvdir/default/
# ... repeat for each service
Switching to S6
s6-service add default NetworkManager
s6-service add default sddm
# ... repeat for each service
7. Cold reboot
A normal reboot won't work because the symlinks for /sbin/init and
/sbin/reboot still point to the old init. Instead, synchronize
disks and trigger a cold reboot:
sync
mount / -o remount,ro
echo b > /proc/sysrq-trigger
Or use the reset button on your machine.
Troubleshooting
System won't boot
Boot from an Artix LiveUSB, chroot in, and check:
mount /dev/sdXn /mnt
artix-chroot /mnt
From the chroot, you can reinstall packages, fix service symlinks,
or regenerate the initramfs with mkinitcpio -p linux.
Missing service packages
Some daemons may not have init scripts for your chosen init. Check the Artix repos:
pacman -Ss <daemon-name>-openrc # or -runit, -s6
If a package doesn't exist, you can write a custom service file or use a different daemon.
OpenRC: services don't enable on installed systems
This was a known bug in earlier Antergos NeXT builds (the installer
used artix-service which didn't set up OpenRC correctly).
If you're switching to OpenRC manually on an already-installed system,
rc-update add works fine — the bug was specific to the installer flow.