Files
euri-iso/docs/changing-init.md
T
c-ludenberg 442980a7af feat: dinit or die
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)
2026-07-16 21:55:05 +02:00

162 lines
3.7 KiB
Markdown

---
title: Changing init
layout: default
nav_order: 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
1. Stop your display manager and get to a TTY
2. Save a list of installed `-dinit` service packages
3. Download the corresponding `-<newinit>` packages
4. Remove the dinit packages
5. Install the new init packages
6. Enable services for the new init
7. Cold reboot
## Step-by-step
### 1. Stop the display manager
```bash
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
```bash
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:
```bash
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
```bash
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` |
```bash
pacman -S openrc elogind-openrc
```
Then install the service packages:
```bash
pacman -S $(sed 's/dinit/openrc/g' < services.list)
```
### 6. Enable services
#### Switching to OpenRC
```bash
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
```bash
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
```bash
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:
```bash
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:
```bash
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:
```bash
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.