@QingQ77: A terminal installer written in Rust + ratatui with Ukrainian/English bilingual interface, specifically for installing Artix Linux with dinit, and can also enter system recovery mode. https://github.com/YellowHearth1/artix-…

X AI KOLs Timeline Tools

Summary

A terminal installer written in Rust + ratatui with a Ukrainian/English bilingual interface, dedicated to system installation of Artix Linux with dinit. Supports LUKS encryption, Btrfs snapshots, EFISTUB booting, and other features.

A terminal installer written in Rust + ratatui with Ukrainian/English bilingual interface, specifically for installing Artix Linux with dinit, and can also enter system recovery mode. https://github.com/YellowHearth1/artix-tui-installer…
Original Article
View Cached Full Text

Cached at: 07/11/26, 09:29 PM

A terminal installer written in Rust + ratatui, with a Ukrainian/English bilingual interface, specifically for installing Artix Linux with dinit, and also capable of entering system recovery mode. https://github.com/YellowHearth1/artix-tui-installer…


YellowHearth1/artix-tui-installer

Source: https://github.com/YellowHearth1/artix-tui-installer

🐧 Artix TUI Installer

Bilingual (Ukrainian / English) terminal installer for a custom Artix Linux (https://artixlinux.org) build using the dinit init system (https://davmac.org/projects/dinit/).

Written in Rust with ratatui (https://ratatui.rs) and styled like a modern graphical installer: left step panel, rounded panels, Artix-blue accent, segmented switches, and a live scrolling installation log.

Language: Rust (https://www.rust-lang.org/)
TUI: ratatui (https://ratatui.rs)
Init: dinit (https://davmac.org/projects/dinit/)

🇬🇧 English version → README.en.md


🤖 Code Authorship

All code in this project was written by Claude (https://claude.ai) — an AI model from Anthropic (https://www.anthropic.com). Architecture, iterative debugging, and implementation are entirely generated by Claude in dialogue. The design vision, testing on real hardware and virtual machines, and Artix/dinit-specific decisions belong to the project author.


✨ Features

  • 🌐 Bilingual interface — Ukrainian and English, selectable on the first screen.
  • ⚙️ Native dinit — configures a user instance of dinit specifically for this init system, without any systemd assumptions:
    • turnstile for seatd (custom PAM module, no elogind required);
    • userspawn for elogind (standard Artix variant);
    • session manager seatd/elogind and user services for PipeWire.
  • 📦 Interactive package installation — packages are installed via pacman under a pseudoterminal, so you choose providers (GPU/Vulkan drivers, multimedia backends, etc.) rather than silently taking the first. Packages with the same name from different repositories are automatically taken from Artix; [Y/n] prompts are confirmed.
  • 🔒 LUKS disk encryptionroot only, full encryption with encrypted /boot on UEFI, or USB key (keyfile allows entering the password only once).
  • 🥾 Bootloader selection — GRUB, rEFInd, Limine, or EFISTUB; for GRUB — os-prober detects other OSes. Configured before partitioning additional disks.
  • 📦 EFISTUB (bootloader-less booting) — UEFI firmware loads the kernel directly, without an intermediate bootloader (Artix kernels are already built as EFI stubs, CONFIG_EFI_STUB=y). Initramfs and parameters are passed via efibootmgr entry. Requires no additional packages or systemd — unlike UKI, which needs systemd-stub. UEFI only; incompatible with encrypted /boot. Supports rollback — kernel, initramfs, and parameters remain separate files, so the installer registers additional UEFI entries for rollback and rescue (selectable from firmware boot menu). This is the foundation for future Secure Boot.
  • 🗄️ Additional disks — mount other disks or partitions (to home, /mnt, or a custom path), optionally format or encrypt each. Encrypted additional disks are unlocked automatically during boot (key on encrypted root, dinit service), regardless of root unlock method.
  • 💾 Filesystem choice — ext4, btrfs, xfs, f2fs, jfs, ext3, ext2.
  • 🌳 Btrfs with snapshots and rollback — subvolumes @/@home/@snapshots/@log/@cache, auto-snapshots around every pacman action (snapper + snap-pac) and artix-rollback rollback on any bootloader (GRUB/rEFInd/Limine — as a separate graphical menu item, EFISTUB — as a separate entry in the firmware boot menu).
  • 🖥️ Desktop environment selection — KDE Plasma, LXQt, Pinnacle (Wayland compositor in AwesomeWM style), XFCE, Cinnamon, MATE, LXDE, or none.
  • 🎮 GPU drivers — NVIDIA (open-dkms), NVIDIA 580xx (legacy), nouveau, AMD, Intel; nouveau is automatically blocked when proprietary driver is selected.
  • 🛟 System recovery mode — mounts an existing installation (with LUKS decryption if needed), detects the bootloader, and opens a chroot shell for repair.
  • 🔁 AUR supportparu is built from source (to always match the system’s libalpm), then installs selected AUR packages.
  • 🧩 Automatic dinit service enabling — any installed package *-dinit gets its service enabled automatically, whether from repositories or AUR.
  • 📜 System logging out of the boxsyslog-ng collects all logs in /var/log, and logrotate (via cronie) keeps them for one week, deletes older ones, and rotates immediately if a file exceeds 5 GB. User services log to a buffer, so dinitctl catlog works for them right away.
  • 🔥 Ready firewall — built-in nftables config opens ports for KDE Connect, LocalSend, Sunshine, RustDesk, Steam Remote Play, Syncthing, and SSH.
  • 🎨 Built-in configs — kitty (Catppuccin Mocha), starship prompt, fastfetch, and for Pinnacle also waybar and wofi; no external files needed.
  • 🕹️ Game-ready — raises open file limit (nofile) for Wine/Proton fsync, and optionally auto-configures auto-cpufreq.
  • 🧳 Self-contained — required host tools (artools, gptfdisk, cryptsetup, etc.) are installed automatically, so the installer works even from the official Artix ISO, not just a custom image.
  • 🏷️ Customizable hostname and UEFI boot entry name.
  • 🚦 Cautious start — disk partitioning begins only after explicit confirmation on the “Review & Install” screen, and required host tools (git, gptfdisk, dosfstools, parted, etc.) are downloaded in the background immediately after network connection.
  • ⚠️ Warnings before partitioning — on the disk selection screen, the installer unobtrusively warns (without blocking selection) if: the selected disk is the boot media from which the installer itself is running (detected by the live image’s iso9660 filesystem); the disk is smaller than 20 GiB (base system fits, but may be tight for a full environment); or the selected UEFI/BIOS mode does not match the actual boot mode of the computer (which would produce an unbootable system). Each warning is a full, clear sentence in a separate scrollable window (w key on the disk list); you can always proceed if you are aware.
  • 🧨 Disk erase confirmation — the final step before formatting: a separate window directly shows which disk (path, model, size) and which existing partitions will be irreversibly destroyed, and requires explicit Enter. Formatting never starts without this second confirmation — accidentally wiping the wrong disk is much harder.
  • 🪞 Fast and resilient mirrors — the 5 closest countries (based on your timezone) are ranked by actual speed and placed at the top; all other world mirrors remain active below, from closest to farthest — none are commented out or discarded. So if a fast mirror goes down during download, pacman simply falls back to the next (up to Artix’s main server) without interrupting installation. Russian mirrors are completely excluded. Plus optional Chaotic-AUR with prebuilt AUR binaries.
  • 📊 Live progress — live installation log with scrolling (PgUp/PgDn, Home/End); after an error, you can rerun without losing your selections.
  • 🏁 Three final options — reboot, shutdown, or immediately chroot into the new system; partitions are safely unmounted in all cases.
  • 📀 Builds as a live ISO image via artools (buildiso).

👁️ Appearance

Live “Disk & Partitions” screen
Screenshot from a graphical terminal; in plain TTY colors are simpler (see note in “Screenshots” section).

Schematically, each screen is arranged like this:

 ┌───────────┬──────────────────────────────────────────────┐
 │ ◆ 01      │ 09 · Disk & Partitions                       │
 │ ● 02      │ ┌────────────────────────────────────────┐   │
 │ ● ...     │ │ Mode  ● UEFI  ○ BIOS                   │   │
 │ ◆ 09      │ │ Disk: /dev/sda  256G                    │   │
 │ ○ 10      │ │ Add SWAP? [yes]  [ 4 GiB ]             │   │
 │ ○ ...     │ │ Filesystem  ‹ ext4 ›  btrfs  xfs       │   │
 │           │ │  ◂ Back        Next ▸                   │   │
 │           │ └────────────────────────────────────────┘   │
 │           ├──────────────────────────────────────────────┤
 │           │  ↑/↓ move · ←/→ change · Enter next         │
 └───────────┴──────────────────────────────────────────────┘

The left panel shows only step numbers (the active one has a spinning diamond); the full step name is in the panel header.


⌨️ Controls

KeysAction
↑ / ↓navigate lists and fields
Enterselect / next
Esc or Shift+Tabback; Esc also closes modal windows
↑ on top itemexit to previous screen
Spacetoggle item / switch
← / →change value: filesystem, SWAP size, account mode, session
Text inputfilter lists, search packages, edit fields
Tabnext field on “Accounts” screen
ofilesystem options (Disk & Partitions screen)
w / sscroll description in FS options modal
PgUp / PgDn · Home / Endquick scroll long lists and install log
qexit installer (blocked during installation)
Ctrl+Cemergency exit

Contextual hints for the active screen are always shown in the bottom bar.


🔨 Building

cd installer
cargo build --release
# → target/release/artix-installer

Read-only steps (timezone, keyboard, Wi-Fi, package search, disk list) degrade gracefully when their tools are unavailable outside the target system. Actual installation (partitioning, basestrap, chroot) requires root and a real target, so test in a virtual machine.


🚀 Running on Official Artix

The installer doesn’t have to run from a custom image — it can be launched simply from any official Artix ISO: whether from the console “base” image or from a community image with a desktop and graphical installer (Calamares) — just open a terminal and run this TUI instead of Calamares. Any host tools it needs (artools, gptfdisk, cryptsetup, etc.) are self-provisioned during runtime.

Prebuilt Binary (easiest)

Download the compiled installer from the releases page (https://github.com/YellowHearth1/artix-tui-installer) and run as root:

curl -LO https://github.com/YellowHearth1/artix-tui-installer/releases/download/artix-tui-installer/artix-installer
chmod +x artix-installer
sudo ./artix-installer

Building from Source

base-devel provides the compiler and linker needed by cargo:

sudo pacman -S --needed git rust base-devel
git clone https://github.com/YellowHearth1/artix-tui-installer
cd artix-tui-installer/installer
cargo build --release
sudo ./target/release/artix-installer

A few notes:

  • The installer must run as root — it partitions disks, runs basestrap and chroot.
  • This is a full-screen TUI: run in a real console (Ctrl+Alt+F2) or in a terminal on a live desktop, with a size of at least 80×24.
  • On the live image, building from source runs in RAM; if RAM is tight, grab the prebuilt binary above or build on another Artix machine and copy the single file to the target.
  • ⚠️ The installer formats disks — test in a virtual machine first.

🧭 Wizard Steps

The installer starts with a mode selection: Installation or System Recovery.

Installation goes through 15 steps:

  1. Language — Ukrainian / English; sets interface language and system locale.
  2. Timezone — full IANA list with search filter.
  3. Wi-Fi — skip (wired), scan, or connect via nmcli.
  4. Keyboard — console layouts via localectl; first selected is primary.
  5. Kernel — linux / lts / zen / hardened.
  6. Desktop Environment — choose a graphical environment (or none) and session manager.
  7. Packages — GPU driver + search and multi-select from repositories.
  8. AUR — curated recommended list and live AUR search.
  9. Disk — boot mode, target disk, SWAP, and root filesystem.
  10. Bootloader & Encryption — bootloader selection (GRUB / rEFInd / Limine), other OS detection (os-prober, for GRUB), UEFI entry name, and disk encryption: root only, full (with encrypted /boot), or USB key, swap size and passphrase. Done before additional disks so that a key on an additional disk makes sense.
  11. Additional Disks — for each found disk/partition: format (or “keep data”), mount point (home / /mnt / custom path with folder name), and separate encryption checkbox. Nothing is changed until you choose.
  12. User — hostname, input mode, username, and passwords (only kept in memory, never written to disk by the installer).
  13. Settings — passwordless sudo, Chaotic-AUR repository, and mirror optimization.
  14. Installation — review, then live log executes the plan step by step; stops on error and allows going Back.
  15. Finish — summary and reboot.

Navigation is consistent everywhere: / moves focus (and up arrow on the topmost item returns to the previous step), / changes values, Enter next, Esc closes window or goes back.


🧱 How Installation is Organized

src/system/install.rs builds a single ordered list of actions; the installation screen executes each one, streaming output in real time. Roughly: install host tools → partition → format (with LUKS if needed) → mount → phase 1 basestrap of minimal bootable base (kernel, firmware, dinit + services, audio, logging) → configure repositories + keys → phase 2 interactive pacman for environment, drivers, and your packages → user accounts → locale / timezone / layout / hostname + hosts → configure user-dinit (turnstile or userspawn) → initramfs (with encrypt hook when encryption is used) → bootloader → built-in nftables → logrotation → enable all dinit services → phase 3 AUR via paru.


🌳 Btrfs: Subvolumes, Auto-Snapshots, and System Rollback

If you select btrfs on the “Disk & Partitions” step, additional options appear below the filesystem selection (each with a “pro/con” explanation shown in the UI):

  • Subvolumes — scheme @ (root), @home, @snapshots/.snapshots, @log/var/log, @cache/var/cache. System snapshots don’t touch /home and aren’t bloated by logs and cache.
  • Auto-snapshots (snapper + snap-pac) — snapshot before and after every pacman/paru transaction; enables subvolumes automatically (requires @snapshots).
  • Compression (zstd) — transparent compress=zstd on write.
  • TRIM for SSDdiscard=async in background.
  • For any filesystem there is separate noatime. Root is always mounted with rootflags=subvol=@ — by name, not via default subvolume.

What the installer configures for snapshots:

  • snapper is configured by directly writing to /etc/snapper/configs/root (because create-config doesn’t work in chroot): TIMELINE_CREATE=no — snapshots are tied to pacman events, not a timer; NUMBER_LIMIT=10 — keeps the last ~10.
  • Cleanup on schedule/etc/cron.d/snapper (daily at 5:30) via cronie, since dinit has no systemd timers.
  • Base snapshot on first boot — a one-shot background service waits for D-Bus and snapper to start, creates a snapshot “clean system (post-install baseline)”, then removes itself.

Rollback works on any bootloader (GRUB, rEFInd, Limine):

  • sudo artix-rollback [N] — shows snapshot list; selected one becomes the new @, old root is saved as @.rollback-<time>, default subvolume is redirected, and stale pacman lock from the snapshot is removed (snap-pac creates PRE-snapshot while db.lck exists). There’s also a shortcut in the application menu.
  • Rollback at system start — kernel parameter artix.rollback opens snapshot selection directly from initramfs; the mkinitcpio hook runs after encrypt, so it works with LUKS. On GRUB there is a separate menu item System Rollback.
  • Classic snapper rollback also works. Rollback does not depend

Similar Articles

@vintcessun: At noon I saw a tool that solves the chaos in download directories, a bit unbelievable—a system tray file organizer written in Rust+Tauri, memory usage only 5MB, and just added Linux support. The core is file monitoring plus a rule engine, automatically classifying by extension or regex, SQLite records operation history for one-click undo. Privacy-wise zero reporting, …

X AI KOLs Timeline

Introduces an open-source desktop file organizing tool Mouzi, built with Rust and Tauri, memory usage only 5MB, supports file monitoring and rule engine for automatic classification, emphasizes zero reporting for privacy.

@geekbb: A Tauri (Rust + Svelte) desktop app that integrates a programming AI agent, API client, SQL/NoSQL editor, SSH terminal, remote file browser, and project management kanban board into a single interface — developers don't need to switch between multiple apps. https://gith…

X AI KOLs Timeline

Clauge is a Tauri (Rust + Svelte) desktop app that combines a programming AI agent, API client, SQL/NoSQL editor, SSH terminal, remote file browser, and project management kanban board into one interface, so developers don't have to switch between multiple applications.

@QingQ77: An open-source project written in Rust and C that uses JIT compilation to run Linux containers directly on macOS. https://github.com/ricccrd/dd It does not require a VM, hypervisor, or Linux kernel, but instead…

X AI KOLs Timeline

dd is an open-source tool written in Rust and C that runs Linux containers on macOS without a VM by using JIT compilation to translate container instructions and handle syscalls in userspace. It implements the Docker Engine API, supports arm64 and x86-64 Linux images, and offers performance comparable to or better than VM-based solutions.