Skip to content

Instantly share code, notes, and snippets.

@loukamb
Created April 18, 2025 19:04
Show Gist options
  • Save loukamb/d1e36ea8fc87aef6afb43e37eba1218a to your computer and use it in GitHub Desktop.
Save loukamb/d1e36ea8fc87aef6afb43e37eba1218a to your computer and use it in GitHub Desktop.
Louka's Artix Notes

Louka's Artix Notes

See also Louka's Arch Notes.

Artix Linux is a fork of Arch Linux that allows you to install a different init system. That's mostly it. The packages offered, the base system components (e.g. initramfs generator), and the package manager are the same.

There are some differences in release distribution (for example, they package pre-configured images with desktop environments), and they do shop some additional packages to provide service configurations depending on what init system you want, but the rest is pretty much Arch Linux.

This is a personal cheat sheet for myself with a few explainers.

Init system

What is an init system?

An init system is something that handles processes and supervises services. It is usually the very first process launched.

Why use a different init system?

Most Linux distributions ship systemd. It is, essentially, a set of building blocks for a Linux operating system. It implements the boring stuff so distribution designers can focus on configuring the cooler stuff, like userland software, desktop environments, and so on. Examples of services it implements are a session/seat manager (systemd-logind), a DNS resolver (systemd-resolved), a system journal (journalctl), and even a bootloader (systemd-boot). Of course, it also includes an init system.

Mostly, systemd is good software. It provides a lot of convenience and works well in most cases. The problem people have with systemd however is that it does much more than it should. Your init system should simply init the system, and other base services like session/seat management and networking should be left to other components. This wasn't a problem years ago when systemd only did init stuff, but now it has expanded to fulfill a lot of other missions.

For most Linux distributions, systemd taking over other components is convenient. Ship one package and there's less decision fatigue as to which other packages to include. However, some Linux power users dislike that you're coerced into using systemd's solutions when you, for example, only want its init mechanism. For example, you cannot use seatd and turnstile for sessions on a systemd-based Linux operating system because systemd provides systemd-logind (and installing both at the same time can result in conflicts).

So, the why of the question can find its answer in if you want choice of your system components. If you don't care, then it doesn't really matter. There are other reasons people cite as to why you shouldn't use systemd, mainly revolving around the philosophies of its developers and the security issues that impacted systemd over the past few years, but IMO these are not unique to systemd.

For me, I don't really care about all the other reasons, but I do like having choice. That said, I did notice that a system not depending on systemd will usually run better, but that's anecdotal.

Migrating from Arch to Artix

Installing Artix is the exact same as installing Arch, with a few key differences. I will enumerate them now.

1. Choice of init system

When bootstrapping your system (using basestrap instead of pacstrap), you will have to specify the init system you want. Otherwise, your system will not boot. Here are the packages you should basestrap, alongside base and base-devel, depending on yoir choice of init system:

  • OpenRC: openrc elogind-openrc
  • runit: runit elogind-runit
  • S6: s6-base elogind-s6
  • dinit: dinit elogind-dinit

I personally recommend OpenRC. runit would be my runner-up recommendation.

2. Bootloader

systemd-boot is obviously a nonstarter on Artix, even though it is technically possible to get it running using custom repositories and configuration. As that is not the "Artix way", and it is a hassle, you will have to use GRUB.

You can run the following while chrooted into your system to install GRUB.

# Packages necessary to use GRUB.
pacman -S grub efibootmgr

# Installing GRUB.
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub

# (re-)Configuring GRUB.
grub-mkconfig -o /boot/grub/grub.cfg

3. Encrypted partitions

Usually, the encrypted partition table is specified at /etc/crypttab, which is the case on Arch Linux. On Artix under OpenRC, /etc/crypttab is not used (other init systems may use /etc/crypttab), and instead a different configuration must be provided in /etc/conf.d/dmcrypt.

For example, this /etc/crypttab entry for a LUKS-encrypted drive with a passphrase...

storage UUID=6ddca5d7-0a76-4de1-8c41-4c692f0d87c8 none luks

...is translated into this entry inserted into /etc/conf.d/dmcrypt under OpenRC:

target=storage
source=UUID="6ddca5d7-0a76-4de1-8c41-4c692f0d87c8"

Additional packages and service configuration is also necessary. Mainly, you must make sure that the device mapper runs after dmcrypt provides decrypted access to your partitions. Under OpenRC, you would do this:

# Install packages.
pacman -S lvm2 lvm2-openrc device-mapper device-mapper-openrc cryptsetup cryptsetup-openrc

# Enable device-mapper at boot runlevel to map the encrypted partitions into device handles.
rc-update add device-mapper boot

# Enable dmcrypt at sysinit runlevel to decrypt the encrypted partitions _before_ device-mapper runs.
rc-update add dmcrypt sysinit

4. Enabling Arch's Extra repository

Artix does not mirror all Arch software. This means you may miss out on some packages, e.g. wmenu. However, since Artix is 95% Arch Linux, you can fix this by manually enabling Arch's Extra repository.

First, install the artix-archlinux-support package, then retrieve the latest Arch Linux mirrors.

# Install Arch Linux support.
pacman -S artix-archlinux-support

# Update Arch Linux repos.
wget https://archlinux.org/mirrorlist/all/ -O /etc/pacman.d/mirrorlist-arch

Then, add the following in /etc/pacman.conf, under all the pre-included Artix repos.

[extra]
Include = /etc/pacman.d/mirrorlist-arch

# also, you may want to go into /etc/pacman.d/mirrorlist-arch and enable the mirrors you want.

Finally, run these two commands to populate the Arch Linux keyring and synchronize the repo.

pacman-key --populate archlinux
pacman -Sy

You now have access to Arch Linux's Extra repository. It is also at this point that you can setup yay (or another AUR helper) if wanted.

5. Networking

Wired

Instead of using NetworkManager and systemd-resolved, you can use dhcpcd and dhcpcd-openrc instead, enabling it with rc-update add dhcpcd boot. For a more visual configuration experience, you can also install connman.

Wireless

wpa_supplicant or iwd can be installed for Wi-Fi configuration as usual.

6. PipeWire

Instead of using a systemd unit to autostart PipeWire, start it with a script. It'll work just fine. I added these three lines to my labwc autostart script:

pipewire &
pipewire-pulse &
wireplumber &
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment