Artix re‐installation
Last updated : 4/3/2026 (wangjangle dinit into guide)
Introduction
News flash ‐ my Artix installation was FUBAR at the start of November, causing me to reinstall it from scratch. However, this reinstallation also came with some changes, most of which can be nutshelled as the Chapman excuse (simplify and add lightness?).
- Replaced sudo with opendoas.
- Replaced GRUB with Limine.
- LightDM replaced by LXDM. I could've spun the Chapman excuse but lightdm decided to not boot (leaving me in tty to startx every time) and I couldn't be bothered to debug it so... yeah. pacman ‐Rs lightdm‐openrc lightdm‐gtk‐greeter.
And while I'm at it, I also recorded the installation notes so I get to spin this newsflash thing as a guide for how I (re‐)installed Artix. Though you may also want to read this alongside Artix's installation guide (and ArchWiki as well, even if few are relevant here) for more references.
For some additional references:
- Commands get bolded, simply because I couldn't bother myself to make dedicated boxes for commands.
- Italics applied to stuff you get to freely name.
- $stuff for stuff that you need to choose, like init system.
- This install guide is aimed at my T470, which is on UEFI. Secure Boot is also disabled as I couldn't bother dealing with it.
28/2/2026 Update : Fucked up the installation again. And used the opportunity to play with dinit, get PipeWire running, and attempt to debloat the linux‐firmware package in my system.
Installation
To start, I go from the base image, mostly because it gives me the most control over what I install and the dependencies I needed to install, freeing me from having to debloat and wasting more time with everything. Unfortunately, this approach requires internet access (though the workplace had a free ethernet setup that I used, alongside what little downtime I had to input things.).
After downloading and verifying the base image, I used Rufus to write it (the base image) into a USB drive in DD mode (from my Windows installation up in the abode; other methods are available for those refusing Windows). From there (and in the workplace), well... I plug that USB drive (and ethernet) up my T470 and booted that base image.
Pre‐chroot
- Partitioning a 256GB (238.5GB) NVME stick (skip if already done, if you have your own partitioning setup, have a different disk (SATA, different disk size, etc.), or any combinations of them)
- lsblk
As only 1 M.2 NVME stick ( is stuck inside my T470, I get nvme0n1. Though it will be split into 4 parts in the next step.
- cfdisk /dev/nvme0n1 (cfdisk can be replaced with fdisk or some other partitioning tool)
- nvme0n1p1 ‐ 512M (boot)
- nvme0n1p2 ‐ 4G (swap)
- nvme0n1p3 ‐ 30G (/)
- nvme0n1p4 ‐ 204G (home)
- Formatting partitions
- mkfs.fat ‐F 32 /dev/nvme0n1p1
- fatlabel /dev/nvme0n1p1 ESP
- mkswap ‐L SWAP /dev/nvme0n1p2
- mkfs.ext4 ‐L ROOT /dev/nvme0n1p3
- mkfs.ext4 ‐L HOME /dev/nvme0n1p4
- This part should've been saved for disk encryptions (like dm−crypt), but as I haven't got time to encrypt on my reinstallation at the time this guide was published (and I haven't learned it yet, in addition to needing the disk unencrypted so I can easily recover files) I skipped it.
- Mounting stuff
- swapon /dev/nvme0n1p2
- mount /dev/nvme0n1p3 /mnt
- mkdir /mnt/boot
- mount /dev/nvme0n1p1 /mnt/boot
- mkdir /mnt/home
- mount /dev/nvme0n1p4 /mnt/home
- If done following this guide, lsblk on nvme0n1 should look a bit like this:
- nvme0n1p1 − 512M /boot
- nvme0n1p2 − 8G [SWAP]
- nvme0n1p3 − 30G /
- nvme0n1p4 − 200G /home
- (optional) Review and select mirrors (prioritize those closer to your region over the inbuilt global mirrors for faster downloads)
nano /etc/pacman.d/mirrorlist
- (optional) Review and select default repositories in case you want lib32 and/or gremlins (redo in chroot if this step is done)
nano /etc/pacman.conf
- Basestrap (installing base system, kernel, firmware, and tty text editor)
basestrap /mnt base elogind‐$init intel‐ucode $linux $linux‐firmware nano
- elogind‐$init
- With elogind insisting on being installed before init, installing base without elogind enforces a random init to be installed alongside elogind. The last time it happened, I am stuck with dinit (which apparently is the lightest init system).
- As for the init, I previously settled on OpenRC out of familiarity (and official support from Gentoo). Artix Wiki has resources for the other 3 provided init tools (dinit, runit, s6). 26/1/2026 Update : Unixdigest also provides a tutorial for switching from OpenRC to Dinit (archive.org), if we need to switch init system without reinstalling Artix. 28/2/2026 update : Reinstalled my way into dinit.
- intel‐ucode
Replace with amd‐ucode if you're on an AMD board. Or skip this if you know what you're doing.
- $linux
28/2/2026 update : Now using linux‐rt‐lts (6.6.87.rt54.artix1‐6 at the time of writing), but I previously used linux‐zen. Adapt to your preferred kernel package if you prefer other kernel(s) (archive.org).
- $linux‐firmware
On my NVIDIA‐less T470 (running Intel things, including its wi‐fi card) I only required linux‐firmware‐intel & linux‐firmware‐whence. That said, adapt your linux‐firmware installations to whatever you think you need or tolerate the bloat that comes from linux‐firmware (which included unnecessary packages such as ones for AMD, which my T470 don't readily use).
- Generate fstab (make sure to check it and note your root UUID for later)
fstabgen ‐U /mnt >> /mnt/etc/fstab
- chrooting (a.k.a. moving on to the next sections)
artix‐chroot /mnt
Basic configurations
For everything else that is not as relevant as doas & Limine (at least when it comes to my priorities, because configs are smooth sailing after those 2... or before, in this page's case.)
- Locale
- nano /etc/locale.gen
- Uncomment your desired locale(s)
- Generate your uncommented locale(s)
locale‐gen
- Networking (everything else, regardless of connman or NetworkManager)
- nano /etc/hostname
hostname
- nano /etc/hosts
127.0.1.1 (tab) hostname.localdomain hostname
- Networking (connman with openrc)
- pacman ‐S connman‐openrc dhcpcd‐openrc wpa_supplicant
- rc‐update add connmand
- Because I used OpenRC in this section, I should add hostname to /etc/conf.d/hostname (nano /etc/conf.d/hostname)
hostname ='hostname'
- Networking (connman with dinit)
- pacman ‐S connman‐dinit dhcpcd‐dinit wpa_supplicant
Here, I did not bother figuring out how to get connman enabled, opting to enable it later.
- Time setup
- ln ‐sf /usr/share/zoneinfo/region/city /etc/localtime
- hwclock ‐‐systohc
- (insert something about network time setup?)
- Passwording root account and adding new basic user account (that you will use daily)
- passwd
- useradd ‐m username
- passwd username
Bootloader (Limine / efibootmgr)
For the bootloader, I originally tried rEFInd out; but I didn't have any luck booting into the system (it always ended with the system stuck in emergency shell, forcing me to manually shutdown the computer) and I didn't really like the splash screen (bright white as default?). And yes, these rEFInd issues could be yet another M.S.I. issue that can be solved with enough research & time though I've already lost patience by the time I've uploaded this page. So I ended up fucking around with Limine (and eventually succeeded in booting into system, freeing me from the bloat GRUB could've brought).
- pacman ‐S limine efibootmgr
- nano /etc/fstab (check fstab, note down root UUID)
- mkdir ‐p /boot/EFI/artixlimine
- cp /usr/share/limine/BOOTX64.EFI /boot/EFI/artixlimine
- Create a limine.conf file
nano /boot/EFI/artixlimine/limine.conf (personal limine.conf sample with some added notes)
- Use efibootmgr to create an entry in NVRAM and allow system to boot, as Limine does not automatically do so. Also note ‐‐part 1 refers to my /boot as mentioned above.
efibootmgr ‐‐create ‐‐disk /dev/nvme0n1 ‐‐part 1 ‐‐label "Artix Limine" ‐‐loader '\EFI\artixlimine\BOOTX64.EFI' ‐‐unicode
- (optional) Make a pacman hook to redeploy Limine after it is updated
- mkdir ‐p /etc/pacman.d/hooks
- nano /etc/pacman.d/hooks/99‐limine.hook (sample)
- Additional notes
- I am aware that Limine also comes with its own limine‐install command, though ArchWiki only recommends it for non‐compliant UEFI boards that don't work with efibootmgr.
base‐devel, but doas instead of sudo (and doas configs?)
- pacman ‐S opendoas autoconf automake bison debugedit fakeroot flex gcc git groff libtool m4 make patch pkgconf texinfo which
- Everything else aside from opendoas are basically base‐devel, except we do not install base‐devel because it forces sudo in.
- Set up makepkg so it asks for doas instead of the absent sudo or using su (and using the root account password instead of your user password)
- nano /etc/makepkg.conf
Find & uncomment #PACMAN_AUTH=(), then add doas between the parentheses. It should look like : PACMAN_AUTH=(doas)
- Configure doas.conf for username (sample .conf) (26/1/2026 Update)
nano /etc/doas.conf
Post‐chroot
At this point, Artix is configured and installed so you can enter your new system.
- exit
- umount ‐R /mnt
- reboot
Post install setup
In the new system, you can log in as the user account, if you made them.
- Networking & dinit
In the network configuration section, I did not enable connman on boot so I don't have internet access, with ethernet not flashing even after the cable is plugged in.
- # dinitctl enable connmand
And with that, ethernet finally started flashing and I get internet access. I could've evaded this issue and not entered this entry had I enabled the network manager in chroot, but M.S.I..
- X(libre) and its accompanying drivers
- # pacman ‐S xlibre xlibre‐$video_drivers
xlibre‐$video_drivers depends on your device ‐ on my T470 it's xlibre‐video‐intel. As for the xlibre package... I'm not fully sure on minimizing that for now so it stays xlibre for now.
- XFCE
- # pacman ‐S xfce4 $favorite_fonts $favorite_themes
By default, this also installs Thunar, which will be extended in file management.
- $ nano .xinitrc
exec startxfce4
- GUI for network management (connman)
- File management
- # pacman ‐S gvfs thunar‐archive‐plugins xarchiver $archive_file (unrar, unzip, zip)
- Arch repositories for Artix (optional)
13/1/2026 Update : Expanding artix‐archlinux section into its own point. Artix's main repositories (and the occassional AUR) is sufficient, but sometimes there are stuff (like Shattered Pixel Dungeon; python‐bsddb, an absent Exaile dependency; and Pragha) that you can only find in Arch's main repositories (extra / multilib).
- # pacman ‐S artix‐archlinux‐support
- Apply Arch repositories into pacman.conf (sample; uncomment multilib if using)
# nano /etc/pacman.conf
- (optional but recommended) Review mirrorlist‐arch and select mirrors (again, prioritize the servers closer to your region for faster downloads)
# nano /etc/pacman.d/mirrorlist‐arch
- (optional, if archlinux‐keyring fails) # pacman‐keys ‐‐populate archlinux
- # pacman ‐Syu (do before installing stuff from Arch repos)
- # pacman ‐S pacman‐contrib (for various additional pacman commands, including paccache)
- Core (important) applications / apps / programs
- Audio (PulseAudio) (I am yet to get any audio out of sndio)
Skip if using PipeWire as pipewire‐pulse conflicts with pulseaudio.
- # pacman ‐S pulseaudio xfce4‐pulseaudio‐plugin
- PulseAudio configuration (sample)
nano ~/.config/pulse/daemon.conf
- Audio (Pipewire with dinit) (and dinit‐user‐spawn)
This section requires you in your regular user account rather than the root account. OpenRC seems to also provide userscripts for PipeWire but I was unable to test them out.
- doas pacman ‐S pipewire‐dinit pipewire‐pulse‐dinit wireplumber‐dinit dinit‐user‐spawn xfce4‐pulseaudio‐plugin
dinit‐user‐spawn will automatically activate after installation. Its supposed alternative is turnstile, but it either stalls (on root account) or assumes no user instance (on standard user account), making turnstile unusable for me.
- dinitctl enable pipewire
- dinitctl enable pipewire‐pulse
- dinitctl enable wireplumber
- System hardening (Reboot to apply changes)
- Kernel hardening
- Sysctl (sample)
# nano /etc/sysctl.conf or # nano /etc/sysctl.d/99‐sysctl.conf
- LXDM (2/3/2026 update : moved down following # dinitctl aggression)
- # pacman ‐S lxdm‐$init
- # nano /etc/lxdm/lxdm.conf (list of relevant changes)
- (if openrc is init)# rc‐update add lxdm
- (if dinit is init)# dinitctl enable lxdm
Note : # dinitctl immediately starts up LXDM. Set up lxdm.conf and .xinitrc before entering that command!
Entering the graphical environment
With all basic configurations done, we boot to our graphical environment.
$ startx
And that's about it. If everything is done correctly, we're in the desktop, ready to tamper it to our specifications. And/or restore your backups that you want restored.
2/3/2026 Update : With LXDM on dinit, you won't be needing startx to enter graphical environment. You'll be shoved in there as soon as you # dinitctl enable lxdm, and will remain stuck in LXDM if you did not set up lxdm.conf and/or xinitrc beforehand (though you can ctrl+alt+f2 your way into console to set things right).
Quickly restoring backups
Files
Actually, just copy & paste them where they belong. doas cp ‐f if they are meant to be in the system directories. ...wait why did I over‐explained this part?
- Hosts : copy the default hosts entries from /etc/hosts, use it to replace the localhost entries of your custom hosts, and doas cp ‐f hosts /etc/hosts.
- Kernel configs : doas cp ‐f sysctl.conf /etc or doas cp ‐f 99‐sysctl.conf /etc/sysctl.d, then reboot to apply changes.
Geany stuff
- Just copy over your geany data folder into ~/.config. Not to mention whatever stuff you're working on, including the .geany file but those go to their own folders.
Known issues
Limine issues?
- Not much... aside from several instances of M.S.I., such as kernel panics (typos in limine.conf) or system not booting (I pointed efibootmgr to wrong directories); all of which is my fault. 2/3/2026 update : wrote some possible examples.
Issues with doas replacing sudo
- "Authorization is required but no authorization protocol specified" (or some similar−sounding report)
Consequently, you cannot open X apps using doas as access elevation (so no non−terminal system file alterations, which does impede manually adding big hosts files, among other examples). A workaround is to add permit setenv { XAUTHORITY LANG LC_ALL } to doas.conf (source 1 / source 2). 2/12/2025 Update : now added to doas.conf sample, therefore marking as resolved.
- Makepkg demands su, with sudo absent
Previously covered in the Pale Moon guide, therefore already resolved before this guide.
- Certain packages require sudo as a dependency (base‐devel, cloud‐init, deepin‐daemon, devtools)
- Doas only recognizes the last entry on /etc/doas.conf.
Currently setting doas.conf to permit persist setenv { XAUTHORITY LANG LC_ALL } $username as a workaround. Alternatively, find other ways to put your required entries to the system file without that doas.conf setting?
Back to top
Index - computers
Main Page