Files
dotfiles-and-setup/docs/installation-reference/linux-artix-install-and-system-config.md

5.5 KiB

Artix Linux - Install and System Config

Attribution: Most or much of this was generated by or derived from Grok, or else from Artix docs, Arch docs/wiki, or else the docs for the particular programs or packages used. I'm not claiming any of this is mine, just putting it here in one file for future convenience/reference.

I used this approach in December of 2025 to install Artix Linux on a Framework 13in laptop from 2023 q4.

  • OS and distro: Artix Linux
  • init system: dinit
  • partitioning, GUID Partition Table:
    • unencrypted boot partition (size: 512M), UEFI
    • LUKS-encrypted LVM:
      • swap partition (size: amount of memory + 4G)
      • root/default partition (size: remaining space)

For reference, doc page from Artix for installation: https://wiki.artixlinux.org/Main/Installation


install steps

  • if not already done, download artix ISO (dinit version) and dd it onto a usb drive

  • boot the live usb and select the install option (whatever it may look like)

  • connect to the internet

connmanctl
//// within connmanctl
enable wifi
scan wifi
agent on
services
connect <wifi_XXXXXXXXXXXXXXXX_managed_psk>
quit
  • verify connection using ping

  • update live system keys/mirrors

pacman -Sy artix-keyring
  • run lsblk and identify the storage drive on which to install

    • note: when i ran this in 2025 dec on my framework laptop, it was /dev/nvme0n1
  • partition the drive

cfdisk <target storage drive>
# use GPT (guid partition table)
# new partition, size 512M, type 'EFI System'
# new partition, size (remaining), type 'Linux LVM'
# write changes
# quit cfdisk
  • set up LVM volumes
cryptsetup luksFormat --type luks2 /dev/<LVM partition>
cryptsetup open /dev/<LVM partition> artixlvm

pvcreate /dev/mapper/artixlvm
vgcreate artixvg /dev/mapper/artixlvm

lvcreate -L <size of memory + 4G, e.g. 36G> artixvg -n swap
lvcreate -l 100%FREE artixvg -n root
  • set filesystems for partitions/volumes
mkfs.vfat -F32 /dev/<boot partition>
mkfs.ext4 /dev/artixvg/root
mkswap /dev/artixvg/swap
  • mount the partitions/volumes
mount /dev/artixvg/root /mnt
mkdir /mnt/boot
mount /dev/<boot partition> /mnt/boot
swapon /dev/artixvg/swap
  • install base system and needed packages
basestrap /mnt base base-devel linux \
    linux-firmware \
    dinit elogind-dinit \
    lvm2 cryptsetup grub efibootmgr mkinitcpio \
    connman connman-dinit wpa_supplicant \
    git less neovim zsh
  • generate fstab
fstabgen -U /mnt >> /mnt/etc/fstab

# verify (add noatime to ext4 line if desired)
vi /mnt/etc/fstab
  • chroot into installed system
artix-chroot /mnt
  • set timezone, hardware clock, locale
ln -sf /usr/share/zoneinfo/<path to target zone> /etc/localtime
hwclock --systohc

nvim /etc/locale.gen
# uncomment en_US.UTF-8 UTF-8; add others if desired

locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
  • set hostname and /etc/hosts
echo "<computer name>" > /etc/hostname

nvim /etc/hosts
# ensure /etc/hosts includes the following:
127.0.0.1  localhost
::1        localhost
127.0.1.1  <computer name>.localdomain <computer name>"
  • mkinitcpio with hooks
nvim /etc/mkinitcpio.conf
# go to HOOKS and set it thus:
HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 resume filesystems fsck)

mkinitcpio -P
  • grub config and install
blkid
# note the UUID of the LVM/LUKS partition

nvim /etc/default/grub
# ensure the following is set:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<UUID from blkid above>:artixlvm root=/dev/mapper/artixvg-root resume=/dev/mapper/artixvg-swap quiet rw"

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Artix
grub-mkconfig -o /boot/grub/grub.cfg
  • set up connman for installed system
mkdir -p /etc/dinit.d/boot.d
ln -s ../connmand /etc/dinit.d/boot.d/connmand
  • set root password, set up user
passwd

useradd -m -G wheel,audio,video,optical,storage <username>
passwd <username>
pacman -S sudo
EDITOR=nvim visudo
# uncomment the line in /etc/sudoers which looks something like the below:
echo "%wheel ALL=(ALL) ALL"
  • close stuff out and reboot
exit
umount -R /mnt
swapoff -a
cryptsetup close cryptlvm # may not work, just ignore and reboot
reboot

system config (post install)

NOTE: don't put anything here which should be in my dotfiles-and-setup scripts instead

  • set up chrony (for syncing system time with ntp servers)
    • NOTE: edit defaults in /etc/chrony/chrony.conf if desired
sudo pacman -S chrony chrony-dinit

# Fallback if dinitctl enable fails (symlink method)
sudo mkdir -p /etc/dinit.d/boot.d
sudo ln -s ../chronyd /etc/dinit.d/boot.d/chronyd
# alt: sudo dinitctl enable chronyd

/etc/dinit.d/chronyd start
# alt: sudo dinitctl start chronyd

troubleshooting

if i need to try something again and reopen the LVM, the below should work:

cryptsetup open /dev/<target device> artixlvm
# enter existing password

vgchange -ay artixvg
# or, if only one VG exists:
vgchange -ay

if date/time get messed up (such as due to battery running out), fix with:

# can manually adjust to local time; grok said "date is UTC if hardware is set that way"
sudo date -s "2025-12-17 12:47:00"
# or, if chrony, ntp, or similar is set up, can trigger sync
chronyd -q
# can check after with `date` or `chronyc tracking`

sudo hwclock -w --utc