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)
This commit is contained in:
2026-07-16 21:55:05 +02:00
parent 8661722ee7
commit 442980a7af
45 changed files with 602 additions and 813 deletions
@@ -1,21 +0,0 @@
---
efiBootLoader: "grub"
kernel: "/vmlinuz-linux-x86_64"
img: "/initramfs-linux-x86_64.img"
fallback: "/initramfs-linux-x86_64-fallback.img"
timeout: "10"
grubInstall: "grub-install"
grubMkconfig: "grub-mkconfig"
grubCfg: "/boot/grub/grub.cfg"
grubProbe: "grub-probe"
efiBootMgr: "efibootmgr"
installEFIFallback: true
efiBootloaderId: "Antergos"
# installHybridGRUB: false
# efiBootLoaderVar: "packagechooser_bootloader"
@@ -1,10 +0,0 @@
---
displaymanagers:
- lightdm
- gdm
- mdm
- sddm
- lxdm
- slim
basicSetup: false
@@ -1,6 +0,0 @@
---
restartNowMode: user-unchecked
restartNowCommand: "loginctl reboot"
notifyOnFinished: false
@@ -1,51 +0,0 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Create, overwrite or update /etc/default/grub in the target system.
#
# Write lines to /etc/default/grub (in the target system) based
# on calculated values and the values set in the *defaults* key
# in this configuration file.
#
# Calculated values are:
# - GRUB_DISTRIBUTOR, branding module, *bootloaderEntryName* (this
# string is sanitized, and see also setting *keep_distributor*)
# - GRUB_ENABLE_CRYPTODISK, based on the presence of filesystems
# that use LUKS
# - GRUB_CMDLINE_LINUX_DEFAULT, adding LUKS setup and plymouth
# support to the kernel.
---
# If set to true, always creates /etc/default/grub from scratch even if the file
# already existed. If set to false, edits the existing file instead.
overwrite: false
# If set to true, prefer to write files in /etc/default/grub.d/
# rather than the single file /etc/default/grub. If this is set,
# Calamares will write /etc/default/grub.d/00Calamares instead.
prefer_grub_d: false
# If set to true, an **existing** setting for GRUB_DISTRIBUTOR is
# kept, not updated to the *bootloaderEntryName* from the branding file.
# Use this if the GRUB_DISTRIBUTOR setting in the file is "smart" in
# some way (e.g. uses shell-command substitution).
keep_distributor: false
# The default kernel params that should always be applied.
# This is an array of strings. If it is unset, the default is
# `["quiet"]`. To avoid the default, explicitly set this key
# to an empty list, `[]`.
kernel_params: [ "quiet" ]
# Default entries to write to /etc/default/grub if it does not exist yet or if
# we are overwriting it.
#
defaults:
GRUB_TIMEOUT: 5
GRUB_DEFAULT: "saved"
GRUB_DISABLE_SUBMENU: true
GRUB_TERMINAL_OUTPUT: "console"
GRUB_DISABLE_RECOVERY: true
# Set to true to force defaults to be used even when not overwriting
always_use_defaults: false
@@ -1,4 +0,0 @@
---
kernel: all
be_unsafe: false
@@ -1,7 +0,0 @@
---
localeGenPath: /etc/locale.gen
geoip:
style: "json"
url: "https://geoip.kde.org/v1/calamares"
selector: ""
@@ -1,5 +0,0 @@
---
systemd: false
dbus: false
dbus-symlink: false
entropy-copy: false
@@ -1,131 +0,0 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Mount filesystems in the target (generally, before treating the
# target as a usable chroot / "live" system). Filesystems are
# automatically mounted from the partitioning module. Filesystems
# listed here are **extra**. The filesystems listed in *extraMounts*
# are mounted in all target systems.
---
# Extra filesystems to mount. The key's value is a list of entries; each
# entry has five keys:
# - device The device node to mount
# - fs (optional) The filesystem type to use
# - mountPoint Where to mount the filesystem
# - options (optional) An array of options to pass to mount
# - efi (optional) A boolean that when true is only mounted for UEFI installs
#
# The device is not mounted if the mountPoint is unset or if the fs is
# set to unformatted.
#
extraMounts:
- device: proc
fs: proc
mountPoint: /proc
- device: sys
fs: sysfs
mountPoint: /sys
- device: /dev
mountPoint: /dev
options: [ bind ]
- device: tmpfs
fs: tmpfs
mountPoint: /run
- device: /run/udev
mountPoint: /run/udev
options: [ bind ]
- device: efivarfs
fs: efivarfs
mountPoint: /sys/firmware/efi/efivars
efi: true
# Btrfs subvolumes to create if root filesystem is on btrfs volume.
# If *mountpoint* is mounted already to another partition, it is ignored.
# Separate subvolume for swapfile is handled separately and automatically.
#
# It is possible to prevent subvolume creation -- this is likely only relevant
# for the root (/) subvolume -- by giving an empty string as a subvolume
# name. In this case no subvolume will be created.
#
btrfsSubvolumes:
- mountPoint: /
subvolume: /@
# As an alternative:
#
# subvolume: ""
- mountPoint: /home
subvolume: /@home
- mountPoint: /root
subvolume: /@root
- mountPoint: /srv
subvolume: /@srv
- mountPoint: /var/cache
subvolume: /@cache
- mountPoint: /var/log
subvolume: /@log
- mountPoint: /var/tmp
subvolume: /@tmp
# The name of the btrfs subvolume holding the swapfile. This only used when
# a swapfile is selected and the root filesystem is btrfs
#
btrfsSwapSubvol: /@swap
# The mount options used to mount each filesystem.
#
# filesystem contains the name of the filesystem or on of three special
# values, "default", efi" and "btrfs_swap". The logic is applied in this manner:
# - If the partition is the EFI partition, the "efi" entry will be used
# - If the fs is btrfs and the subvolume is for the swapfile,
# the "btrfs_swap" entry is used
# - If the filesystem is an exact match for filesystem, that entry is used
# - If no match is found in the above, the default entry is used
# - If there is no match and no default entry, "defaults" is used
# - If the mountOptions key is not present, "defaults" is used
#
# Each filesystem entry contains 3 keys, all of which are optional
# options - An array of mount options that is used on all disk types
# ssdOptions - An array of mount options combined with options for ssds
# hddOptions - An array of mount options combined with options for hdds
# If combining these options results in an empty array, "defaults" is used
#
# Example 1
# In this example, there are specific options for ext4 and btrfs filesystems,
# the EFI partition and the subvolume holding the btrfs swapfile. All other
# filesystems use the default entry. For the btrfs filesystem, there are
# additional options specific to hdds and ssds
#
mountOptions:
- filesystem: default
options: [ defaults ]
- filesystem: efi
options: [ defaults, umask=0077 ]
- filesystem: ext4
options: [ defaults ]
- filesystem: btrfs
options: [ defaults, noatime, compress=zstd:1 ]
ssdOptions: [ discard=async ]
hddOptions: [ autodefrag ]
- filesystem: btrfs_swap
options: [ defaults, noatime ]
#
# Example 2
# In this example there is a single default used by all filesystems
#
# mountOptions:
# - filesystem: default
# options: [ defaults ]
#
# mountOptions:
# - filesystem: default
# options: [ defaults ]
# - filesystem: efi
# options: [ defaults, umask=0077 ]
# - filesystem: btrfs
# options: [ defaults, compress=zstd:1 ]
# - filesystem: btrfs_swap
# options: [ defaults, noatime ]
@@ -1,32 +0,0 @@
efi:
mountPoint: "/boot/efi"
recommendedSize: 512MiB
minimumSize: 256MiB
label: "EFI"
userSwapChoices:
- none # Create no swap, use no swap
- small # Up to 4GB
- suspend # At least main memory size
- file # To swap file instead of partition
swapPartitionName: swap
luksGeneration: luks1
drawNestedPartitions: true
alwaysShowPartitionLabels: true
initialPartitioningChoice: none
initialSwapChoice: suspend
defaultPartitionTableType: msdos
requiredPartitionTableType:
- msdos
- gpt
defaultFileSystemType: "ext4"
availableFileSystemTypes: ["ext4","btrfs","f2fs","xfs"]
@@ -1,13 +0,0 @@
---
# set at iso build time
initsys: none
user-services:
- name: dbus
action: enable
- name: pipewire
action: enable
- name: pipewire-pulse
action: enable
- name: wireplumber
action: enable
@@ -1,24 +0,0 @@
---
command: artix-service
services:
- name: "acpid"
action: "enable"
- name: "bluetoothd"
action: "enable"
- name: "cronie"
action: "enable"
- name: "cupsd"
action: "enable"
- name: "dbus"
action: "enable"
- name: "dhcpcd"
action: "enable"
- name: "NetworkManager"
action: "enable"
- name: "power-profiles-daemon"
action: "enable"
- name: "sddm"
action: "enable"
- name: "syslog-ng"
action: "enable"
@@ -1,2 +0,0 @@
---
emergency: false
@@ -1,5 +0,0 @@
---
unpack:
- source: "/run/artix/bootmnt/LiveOS/rootfs.img"
sourcefs: 'squashfs'
destination: ""
@@ -1,49 +0,0 @@
---
defaultGroups:
- name: users
must_exist: true
system: true
- lp
- video
- network
- storage
- name: wheel
must_exist: false
system: true
- audio
- power
- log
- optical
- network
- scanner
autologinGroup: autologin
doAutologin: false
sudoersGroup: wheel
setRootPassword: true
doReusePassword: false
passwordRequirements:
nonempty: true
minLength: 4 # Password at least this many characters
maxLength: -1 # Password at most this many characters
libpwquality:
- minlen=4
- minclass=0
allowWeakPasswords: true
allowWeakPasswordsDefault: true
userShell: /bin/bash
setHostname: EtcFile
writeHostsFile: true
user:
shell: /bin/bash
forbidden_names: [ root ]
@@ -1,19 +0,0 @@
---
showSupportUrl: true
showKnownIssuesUrl: true
showReleaseNotesUrl: true
requirements:
requiredStorage: 5.5
requiredRam: 1.0
internetCheckUrl: https://www.artixlinux.org
check:
- storage
- ram
- power
- internet
- root
required:
- storage
- ram
- root
@@ -1,51 +0,0 @@
---
modules-search: [ local ]
sequence:
- show:
- welcome
- locale
- keyboard
- partition
- users
- summary
- exec:
- partition
- mount
- unpackfs
- machineid
- fstab
- locale
- keyboard
- localecfg
- luksopenswaphookcfg
- luksbootkeyfile
- initcpiocfg
- initcpio
- users
- displaymanager
- networkcfg
- hwclock
- services-artix
- grubcfg
- bootloader
- postcfg
- umount
- show:
- finished
branding: antergos-next
prompt-install: false
dont-chroot: false
oem-setup: false
disable-cancel: false
disable-cancel-during-exec: false
hide-back-and-next-during-exec: false
quit-at-end: false
@@ -144,3 +144,60 @@
selected: false
packages:
- cosmic
- name: "Init Services"
description: "Essential dinit services"
selected: true
critical: true
immutable: true
packages:
- dinit
- dbus-dinit
- networkmanager-dinit
- elogind-dinit
- cups-dinit
- avahi-dinit
- bluez-dinit
- cronie-dinit
- openssh-dinit
- alsa-utils-dinit
- acpid-dinit
- dhcpcd-dinit
- syslog-ng-dinit
- power-profiles-daemon-dinit
- name: "SDDM"
description: "SDDM display manager"
selected: false
packages:
- sddm
- sddm-dinit
- antergos-sddm-theme
- name: "LightDM"
description: "LightDM display manager"
selected: false
packages:
- lightdm
- lightdm-dinit
- name: "LXDM"
description: "LXDM display manager"
selected: false
packages:
- lxdm
- lxdm-dinit
- name: "greetd"
description: "greetd display manager"
selected: false
packages:
- greetd
- greetd-dinit
- name: "LY"
description: "LY display manager"
selected: false
packages:
- ly
- ly-dinit
@@ -1,294 +0,0 @@
---
mode: required
method: netinstall-add
labels:
step: "Init selection"
step[de]: "Initauswahl"
default: Dinit
items:
- id: Dinit
name: dinit
description: "Dinit init system"
screenshot: ""
netinstall:
name: "dinit"
description: "Dinit init system"
selected: true
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-dinit
- cryptsetup-dinit
- dbus-dinit
- dhcpcd-dinit
- lvm2-dinit
- mdadm-dinit
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-dinit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-dinit
- metalog-dinit
- name: "Internet"
description: "Network init"
packages:
- avahi-dinit
- bluez-dinit
- iptables-dinit
- krb5-dinit
- networkmanager-dinit
- nfs-utils-dinit
- ntp-dinit
- openldap-dinit
- openssh-dinit
- rpcbind-dinit
- xinetd-dinit
- wpa_supplicant-dinit
- name: "Office"
description: "Office init"
packages:
- cups-dinit
- sane-dinit
- name: "Services"
description: "Services init"
packages:
- acpid-dinit
- alsa-utils-dinit
- apparmor-dinit
- brltty-dinit
- fuse-dinit
- gpm-dinit
- hdparm-dinit
- haveged-dinit
- lm_sensors-dinit
- openvpn-dinit
- power-profiles-daemon-dinit
- rsync-dinit
- id: OpenRC
name: openrc
description: "⚠ OpenRC init system — BROKEN in Antergos NeXT (init-rc conflict with dinit). Will be re-added once fixed."
screenshot: ""
netinstall:
name: "openrc"
description: "OpenRC init system"
selected: false
critical: false
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-openrc
- cryptsetup-openrc
- dbus-openrc
- dhcpcd-openrc
- lvm2-openrc
- mdadm-openrc
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-openrc
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-openrc
- metalog-openrc
- name: "Internet"
description: "Network init"
packages:
- avahi-openrc
- bluez-openrc
- iptables-openrc
- krb5-openrc
- networkmanager-openrc
- nfs-utils-openrc
- ntp-openrc
- openldap-openrc
- openssh-openrc
- rpcbind-openrc
- xinetd-openrc
- wpa_supplicant-openrc
- name: "Office"
description: "Office init"
packages:
- cups-openrc
- sane-openrc
- name: "Services"
description: "Services init"
packages:
- acpid-openrc
- alsa-utils-openrc
- apparmor-openrc
- brltty-openrc
- fuse-openrc
- gpm-openrc
- hdparm-openrc
- haveged-openrc
- lm_sensors-openrc
- openrc-settingsd
- openvpn-openrc
- power-profiles-daemon-openrc
- rsync-openrc
- id: S6
name: s6
description: "S6 init system"
screenshot: ""
netinstall:
name: "s6"
description: "S6 init system"
selected: false
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-s6
- cryptsetup-s6
- dbus-s6
- dhcpcd-s6
- lvm2-s6
- mdadm-s6
- s6-contrib
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-s6
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-s6
- metalog-s6
- name: "Internet"
description: "Network init"
packages:
- avahi-s6
- bluez-s6
- iptables-s6
- krb5-s6
- networkmanager-s6
- nfs-utils-s6
- ntp-s6
- openldap-s6
- openssh-s6
- rpcbind-s6
- xinetd-s6
- wpa_supplicant-s6
- name: "Office"
description: "Office init"
packages:
- cups-s6
- sane-s6
- name: "Services"
description: "Services init"
packages:
- acpid-s6
- alsa-utils-s6
- apparmor-s6
- brltty-s6
- fuse-s6
- gpm-s6
- hdparm-s6
- haveged-s6
- lm_sensors-s6
- openvpn-s6
- power-profiles-daemon-s6
- rsync-s6
- id: Runit
name: runit
description: "Runit init system"
screenshot: ""
netinstall:
name: "runit"
description: "Runit init system"
selected: false
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-runit
- cryptsetup-runit
- dbus-runit
- dhcpcd-runit
- lvm2-runit
- mdadm-runit
- rsm
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-runit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-runit
- metalog-runit
- name: "Internet"
description: "Network init"
packages:
- avahi-runit
- bluez-runit
- iptables-runit
- krb5-runit
- networkmanager-runit
- nfs-utils-runit
- ntp-runit
- openldap-runit
- openssh-runit
- rpcbind-runit
- xinetd-runit
- wpa_supplicant-runit
- name: "Office"
description: "Office init"
packages:
- cups-runit
- sane-runit
- name: "Services"
description: "Services init"
packages:
- acpid-runit
- alsa-utils-runit
- apparmor-runit
- brltty-runit
- fuse-runit
- gpm-runit
- hdparm-runit
- haveged-runit
- lm_sensors-runit
- openvpn-runit
- power-profiles-daemon-runit
- rsync-runit
@@ -0,0 +1,36 @@
---
mode: required
method: netinstall-select
labels:
step: "Display Manager"
step[de]: "Display Manager"
default: SDDM
items:
- id: SDDM
name: SDDM
description: "QML-based display manager (KDE default)"
screenshot: ""
- id: LightDM
name: LightDM
description: "Cross-desktop display manager (GTK)"
screenshot: ""
- id: LXDM
name: LXDM
description: "Lightweight display manager (LXDE)"
screenshot: ""
- id: LY
name: LY
description: "Minimal TUI display manager"
screenshot: ""
- id: greetd
name: greetd
description: "Minimal display manager (recommended for COSMIC)"
screenshot: ""
@@ -20,5 +20,7 @@ services:
action: "enable"
- name: "sddm"
action: "enable"
- name: "greetd"
action: "enable"
- name: "syslog-ng"
action: "enable"
@@ -6,7 +6,6 @@ sequence:
- welcome
- locale
- keyboard
- packagechooser
- packagechooser@dm
- netinstall
- partition
@@ -55,6 +55,27 @@
- intel-ucode
- amd-ucode
- name: "Init Services"
description: "Essential dinit services"
selected: true
critical: true
immutable: true
packages:
- dinit
- dbus-dinit
- networkmanager-dinit
- elogind-dinit
- cups-dinit
- avahi-dinit
- bluez-dinit
- cronie-dinit
- openssh-dinit
- alsa-utils-dinit
- acpid-dinit
- dhcpcd-dinit
- syslog-ng-dinit
- power-profiles-daemon-dinit
- name: "Utilities"
description: "System Utilities"
selected: true
@@ -79,7 +100,7 @@
subgroups:
- name: "Plasma"
description: "KDE Plasma Desktop"
selected: true
selected: false
packages:
- antergos-plasma-theme
- antergos-next-desktop-settings
@@ -249,6 +270,11 @@
packages:
- hyprland
- xdg-desktop-portal-hyprland
- name: "COSMIC"
description: "COSMIC Desktop (Rust/Wayland — select greetd as DM)"
selected: false
packages:
- cosmic
- name: "SDDM"
description: "SDDM display manager"
@@ -25,12 +25,12 @@ items:
description: "Lightweight display manager (LXDE)"
screenshot: ""
- id: LY
name: ly
description: "Minimal TUI display manager"
screenshot: ""
- id: greetd
name: greetd
description: "Minimal display manager (recommended for COSMIC)"
screenshot: ""
- id: LY
name: ly
description: "Minimal TUI display manager"
screenshot: ""
@@ -20,6 +20,8 @@ services:
action: "enable"
- name: "sddm"
action: "enable"
- name: "greetd"
action: "enable"
- name: "syslog-ng"
action: "enable"
- name: "userspawn"
@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Name=Install Antergos NeXT (Offline — NO DE)
Name[en]=Install Antergos NeXT (Offline — NO DE)
Comment=Bare minimum install from the live ISO. No desktop environment included. Internet recommended after boot.
Exec=sudo -E antergos-offline-install
Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
@@ -8,3 +8,4 @@ Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true