An interactive, menu-driven TUI installer for Artix Linux, the systemd-free Arch-based distribution. Inspired by archinstall, built specifically for Artix with full support for all four init systems and comprehensive hardware detection.
- No external dependencies -- built entirely with Python's standard library (
curses) - Four init systems -- full support for OpenRC, runit, s6, and dinit
- Guided flow -- pre-filled defaults, clear value indicators, and archinstall-style organization
- Comprehensive logging -- all commands and output logged to
/tmp/artixinstall.log
- Automatic partitioning -- wipes and partitions entire disk (EFI/BIOS aware)
- Manual partitioning -- drops into
cfdiskfor advanced users - LUKS encryption -- full-disk encryption with automatic mkinitcpio hook setup
- Filesystem selection -- ext4, btrfs, xfs, or f2fs
- Configurable swap -- 4 GB, 8 GB, or none
- Three bootloaders -- GRUB, systemd-boot (via egummiboot), and rEFInd, all with LUKS and microcode awareness
| Category | Options |
|---|---|
| Full DEs | GNOME, KDE Plasma, XFCE, Cinnamon, MATE, Budgie, LXQt, Deepin, Enlightenment |
| Wayland WMs | Hyprland, Sway, River, MangoWM (AUR), Niri (AUR) |
| X11 WMs | i3, bspwm, dwm, Qtile, awesome, Openbox |
MangoWM and Niri are AUR-only packages. The installer automatically builds and installs yay, then uses it to install AUR packages with full recursive dependency resolution.
Six greeter options with per-DE recommendations and warnings for non-ideal combinations:
- GDM, SDDM, LightDM (GTK greeter), LightDM (Slick greeter), Ly, or TTY only
- GPU auto-detection -- Intel, AMD, NVIDIA (proprietary/open/nouveau), VMware/VirtualBox
- WiFi detection -- automatic chipset detection via lspci and rfkill
- Bluetooth detection -- USB and PCI adapter scanning
- Laptop detection -- battery/chassis/touchpad heuristics for TLP and ACPI
- CPU microcode -- auto-selects Intel or AMD microcode package
- Printing support -- optional CUPS installation
- 4 kernels -- linux, linux-lts, linux-zen, linux-hardened
- Audio servers -- PipeWire (recommended) or PulseAudio, with automatic session autostart for all WMs on Artix (no systemd user service required)
- Installation profiles -- Minimal, Desktop, Server, Development
- Network managers -- NetworkManager, dhcpcd, wpa_supplicant, or none
- Categorized package browser -- 40+ packages across 8 categories (browsers, multimedia, office, dev tools, system tools, networking, fonts, gaming)
- Custom package entry -- type any package name to add it
- Optional repositories -- lib32, universe, and galaxy toggles (lib32 disabled by default)
- Destructive operations require explicit "yes" -- not just Enter
- Retry/Abort/Skip on failures -- never leaves you stranded
- Passwords never logged -- automatic masking in all log output
- Input validation -- injection-safe username/hostname/locale handling
- Python 3.10+ (included on the Artix live ISO)
- Must be run as root on a live Artix Linux ISO
- A storage device to install to
- Active internet connection for package downloads
Boot into a live Artix Linux ISO, connect to the internet, then:
- Ethernet should usually work automatically via DHCP.
- If you are using Wi-Fi, connect before starting the installer.
artixinstallis meant to be run on the Artix live ISO, not on Windows.- Artix documentation links: https://wiki.artixlinux.org/Main/Installation https://wiki.artixlinux.org/Main/InstallationOnZFS
pacman -Sy python python-pipx expat --overwrite '*'
pipx install artixinstall
pipx ensurepath
exec $SHELL
artixinstallIf you prefer running from source instead of PyPI:
pacman -Sy git python --overwrite '*'
git clone https://github.com/1ypi/artixinstall.git
cd artixinstall
python -m artixinstall- This project is currently maintained by one person, and I have not tested every possible combination yet.
- If you try it, please test it and send feedback if something breaks or feels rough. It would be genuinely appreciated.
- NVIDIA systems are supported, but NVIDIA plus Wayland compositors such as Hyprland can still need manual post-install tuning depending on driver choice and GPU generation.
- The installer adds basic NVIDIA-specific Hyprland environment variables automatically when Hyprland and an NVIDIA driver are selected together.
- MangoWM and Niri require building from source via AUR. The installer handles this automatically, but build times will vary depending on hardware.
| Init System | Base Packages | Service Enable Method |
|---|---|---|
| OpenRC | base base-devel openrc elogind-openrc |
rc-update add <service> default |
| runit | base base-devel runit elogind-runit |
ln -s /etc/runit/sv/<svc> /etc/runit/runsvdir/default/ |
| s6 | base base-devel s6-base elogind-s6 |
s6-rc-bundle-update add default <service> |
| dinit | base base-devel dinit elogind-dinit |
dinitctl enable <service> |
artixinstall/
├── __main__.py # Entry point & main menu orchestration
├── tui/
│ ├── menu.py # Reusable curses menu component
│ ├── screen.py # Screen/window management, colors
│ └── prompts.py # Text input, password, yes/no prompts
├── installer/
│ ├── disk.py # Partition, format, mount, LUKS encryption
│ ├── base.py # basestrap, fstab generation, mirrorlist, AUR install
│ ├── init.py # Init system selection & service mapping
│ ├── locale.py # Locale, timezone, keyboard layout
│ ├── network.py # Hostname, network manager setup
│ ├── users.py # Root password, user creation, sudo, PipeWire autostart
│ ├── bootloader.py # GRUB / systemd-boot / rEFInd (LUKS-aware)
│ ├── desktop.py # 20 DE/WM options with package lists and AUR support
│ ├── hardware.py # GPU, WiFi, Bluetooth, laptop detection
│ ├── packages.py # Kernel, audio, profiles, package browser
│ └── prereqs.py # Live ISO prerequisite checks
├── data/
│ ├── services.json # Service-to-init mapping (13 services x 4 inits)
│ ├── mirrors.txt # Default Artix mirror list
│ └── locales.txt # 30 common locales
├── utils/
│ ├── shell.py # Safe subprocess wrapper
│ ├── log.py # File-based logging with password masking
│ └── validate.py # Input validation & sanitization
├── pyproject.toml
├── README.md
└── LICENSE
- Configure -- Navigate the grouped main menu and set each option
- Review -- Select "Install" to see a full summary of your choices
- Install -- Confirm to begin the automated installation:
- Partitions and formats the disk (with optional LUKS)
- Installs base system + all selected packages via
basestrap - Configures locale, timezone, hostname, users
- Sets up encryption hooks (if LUKS enabled)
- Installs bootloader with microcode and encryption support
- Enables all init-specific services
- Configures hardware drivers and power management
- Builds and installs AUR packages if needed (MangoWM, Niri)
- Sets up PipeWire autostart for window manager sessions
- Reboot -- Unmount and reboot into your new Artix system
Contributions are welcome! Some areas where help is appreciated:
- Testing on different hardware configurations and init systems
- Adding more DEs/WMs -- the desktop module is designed to be extended easily
- LVM support -- adding LVM partition layouts
- Btrfs subvolumes -- automatic subvolume creation for snapshots
- Translations -- locale and TUI text internationalization
- Accessibility -- screen reader support
# Zero dependencies -- just Python 3.10+ and curses
# Test individual modules:
python -c "from artixinstall.installer.init import load_services; print(load_services())"
python -c "from artixinstall.installer.hardware import detect_gpu; print(detect_gpu())"
python -c "from artixinstall.installer.desktop import DESKTOP_ENVIRONMENTS; print(list(DESKTOP_ENVIRONMENTS.keys()))"
# Run on a live ISO:
sudo python -m artixinstall| Problem | Solution |
|---|---|
| "must be run as root" | Use sudo python -m artixinstall |
| Terminal too small | Resize to at least 60x20 |
| basestrap fails | Check internet connection and mirror availability |
| LUKS passphrase prompt at boot | Enter the passphrase you set during installation |
| No WiFi after install | Verify NetworkManager is enabled for your init system |
| Black screen after install | Try a different GPU driver option |
| AUR package build fails | Check network access and disk space, review /tmp/artixinstall.log |
| No audio on WM session | Verify PipeWire is selected and check ~/.local/bin/pipewire-start.sh exists |
All commands are logged to /tmp/artixinstall.log.
GPL-3.0 -- see LICENSE for details.
