Are you the author? Sign in to claim
Artix TUI Installer with dinit | ratatui
🇺🇦 Українська · 🇬🇧 English
Мапа коду, типові зміни, збірка й тести → ARCHITECTURE.md
Двомовний (українська / англійська) термінальний інсталятор для власної збірки Artix Linux на системі ініціалізації dinit.
Написаний на Rust із ratatui й оформлений як сучасний графічний інсталятор: ліва панель кроків, заокруглені панелі, акцент Artix-блакитного, сегментовані перемикачі та живий прокручуваний журнал встановлення.
🤖 Авторство коду
Увесь код цього проєкту написано Claude — моделлю ШІ від Anthropic. Архітектура, ітеративне налагодження та реалізація — повністю згенеровані Claude у діалозі. Дизайн-візія, тестування на реальному залізі та віртуальних машинах, а також рішення, специфічні для Artix/dinit, належать авторові проєкту.
📋 Журнал змін — що змінилось у кожній версії.
seatd (власний PAM-модуль, не потребує elogind);elogind (штатний Artix-варіант);seatd/elogind та користувацькі сервіси PipeWire.pacman
під псевдотерміналом, тож ви обираєте провайдерів (драйвери GPU/Vulkan,
мультимедіа-бекенди тощо), а не береться мовчки перший. Однойменні пакунки з
різних репозиторіїв автоматично беруться з Artix; запити [Y/n] підтверджуються.root, повне шифрування із зашифрованим
/boot на UEFI, або USB-ключ (keyfile дозволяє вводити пароль лише раз).os-prober
для виявлення інших ОС. Налаштовується перед розміткою додаткових дисків.
/etc/grub.d/35_artix_neighbours, бо os-prober
не бачить Linux, чиї ядра лежать на ESP). Але систему, встановлену пізніше,
попередня побачить лише після наступної регенерації свого grub.cfg — це
станеться автоматично на першому ж оновленні ядра чи GRUB (pacman-хук
zz-artix-grub), або одразу вручну: doas grub-mkconfig -o /boot/grub/grub.cfg.
Саме завантаження не залежить від цього — інсталятор пише спільний
fallback-завантажувач EFI/BOOT/BOOTX64.EFI (найновіша система), який бачить
усіх, тож комп'ютер завжди завантажиться в робоче меню.CONFIG_EFI_STUB=y). initramfs і параметри передаються через запис efibootmgr.
Не потребує додаткових пакунків чи systemd — на відміну від UKI, якому
потрібен systemd-stub. Лише UEFI; несумісний із зашифрованим /boot. Сумісний
із відкатом — ядро, initramfs і параметри лишаються окремими файлами, тож
інсталятор реєструє додаткові UEFI-записи для відкату та порятунку (вибираються
з меню завантаження прошивки). Це основа для Secure Boot (нижче).sbctl, генерує ключі підпису й записує
докладну двомовну інструкцію в ~/SECURE-BOOT.txt. Фінальні кроки — занесення
ключів (sbctl enroll-keys), підпис ядра й перехід прошивки в Setup Mode —
користувач робить сам на встановленій системі, бо їх не можна безпечно
автоматизувати. Увага: потрібні дії в BIOS/UEFI, і на деякому залізі
неправильне занесення ключів може закирпичити пристрій — інсталятор показує
чіткі попередження. sbctl має pacman-hook, що переписує підпис ядра при
кожному оновленні./mnt або
власний шлях), за бажанням відформатуйте чи зашифруйте кожен. Зашифровані
додаткові диски розблоковуються автоматично під час завантаження (ключ на
зашифрованому корені, служба dinit), незалежно від способу розблокування кореня.paru збирається з джерел (щоб завжди відповідати
системній libalpm), а потім встановлює обрані вами пакунки.*-dinit отримує ввімкнений сервіс автоматично, чи то з репозиторіїв, чи з AUR.syslog-ng збирає всі логи в /var/log,
а logrotate (через cronie) тримає їх тиждень, видаляє старіше й ротує
негайно, якщо файл перевищує 5 ГБ. Користувацькі сервіси логуються в буфер,
тож dinitctl catlog працює для них одразу.nofile) для
Wine/Proton fsync, а за бажанням автоматично налаштовує auto-cpufreq.w на списку дисків);
ви завжди можете продовжити, якщо свідомо цього хочете.basestrap, а списки Arch і Chaotic-AUR та список
уже встановленої системи — у chroot, тож жоден пакунок не може прийти з
виключеного джерела ні під час встановлення, ні після нього. Виключення
визначається і за секцією країни у списку, і за самим іменем хоста, бо
частина таких дзеркал сидить на доменах, які нічого про себе не кажуть.*.bak-installer, а якщо мережа лежить і не
відповідає жодне дзеркало — список лишається недоторканим. Плюс опційний
Chaotic-AUR із готовими бінарними пакунками AUR.buildiso).
Знімок — із графічного термінала; у чистому TTY кольори простіші (див. примітку в розділі «Знімки екрана»).
А схематично кожен екран влаштовано так:
┌───────────┬──────────────────────────────────────────────┐
│ ◆ 01 │ 09 · Диск та розділи │
│ ● 02 │ ┌────────────────────────────────────────┐ │
│ ● … │ │ Режим ● UEFI ○ BIOS │ │
│ ◆ 09 │ │ Диск: /dev/sda 256G │ │
│ ○ 10 │ │ Додати SWAP? [так] [ 4 ГіБ ] │ │
│ ○ … │ │ Файлова система ‹ ext4 › btrfs xfs │ │
│ │ │ ◂ Назад Далі ▸ │ │
│ │ └────────────────────────────────────────┘ │
│ ├──────────────────────────────────────────────┤
│ │ ↑/↓ рух · ←/→ зміна · Enter далі │
└───────────┴──────────────────────────────────────────────┘
Ліва панель показує лише номери кроків (на активному крутиться маленький ромб); повна назва кроку — у заголовку панелі.
На кроці «Додаткові пакунки» поряд із fastfetch є пункт slayfetch. Це
той самий fastfetch, лише із власним логотипом: лого Artix на тлі одного з
прапорів спільноти ЛГБТКІА+. Оберіть slayfetch замість fastfetch (вони
взаємовиключні — можна лишити тільки один), натисніть Пробіл — і зʼявиться
список логотипів; обраний одразу видно в рядку. Під час встановлення ставиться
звичайний fastfetch, а обраний логотип лягає в ~/.config/fastfetch/.
Як увімкнути: крок «Додаткові пакунки» → зніміть позначку з
fastfetch→ позначтеslayfetch(Пробіл) → у вікні, що відкриється, оберіть логотип (↑/↓, Enter). Готово.
🏳️🌈 Від автора: я не належу до спільноти ЛГБТКІА+, але додав ці логотипи з прапорами як знак підтримки та солідарності.
| Клавіші | Дія |
|---|---|
| ↑ / ↓ | рух списками та полями |
| Enter | обрати / далі |
| Esc або Shift+Tab | назад; Esc також закриває модальні вікна |
| ↑ на верхньому пункті | вихід на попередній екран |
| Пробіл | позначити пункт / перемкнути перемикач |
| ← / → | змінити значення: файлова система, розмір SWAP, режим акаунтів, сесія |
| Набір тексту | фільтр списків, пошук пакунків, редагування полів |
| Tab | наступне поле на екрані «Облікові записи» |
| o | опції файлової системи (екран «Диск та розділи») |
| w / s | гортання опису в модальному вікні опцій ФС |
| PgUp / PgDn · Home / End | швидке гортання довгих списків та журналу встановлення |
| q | вихід з інсталятора (заблоковано під час встановлення) |
| Ctrl+C | аварійний вихід |
Контекстні підказки для активного екрана завжди показані в нижньому рядку інтерфейсу.
Джерело — конфіг, який інсталятор кладе в
~/.config/pinnacle. Модифікатор Mod = клавіша Super (⊞ Win); типовий термінал — kitty.
Застосунки
| Клавіші | Дія |
|---|---|
| Mod + Enter · Mod + Q | термінал (kitty) |
| Mod + R | лаунчер застосунків (wofi) |
| Mod + E | файловий менеджер (Caja) |
| Mod + B | браузер (Firefox — якщо встановлений) |
| Mod + O | скріншот (Flameshot) |
| Mod + V | історія буфера обміну (cliphist) |
| Mod + N | панель сповіщень (SwayNC) |
Вікна
| Клавіші | Дія |
|---|---|
| Mod + C | закрити вікно |
| Mod + F | повноекранний режим |
| Mod + M | розгорнути |
| Mod + S · Mod + Ctrl + Space | плаваючий режим |
| Mod + ЛКМ (тягнути) | перемістити вікно |
| Mod + ПКМ (тягнути) | змінити розмір |
Теги (робочі простори 1–9)
| Клавіші | Дія |
|---|---|
| Mod + 1…9 | перейти на тег |
| Mod + Shift + 1…9 | перенести вікно на тег |
| Mod + Ctrl + 1…9 | показати/сховати тег |
| Mod + Ctrl + Shift + 1…9 | закріпити вікно на кількох тегах |
Розкладки
| Клавіші | Дія |
|---|---|
| Mod + Space | наступна розкладка (master-stack, dwindle…) |
| Mod + Shift + Space | попередня розкладка |
Композитор
| Клавіші | Дія |
|---|---|
| Mod + Shift + R · Mod + Ctrl + R | перезавантажити конфіг |
| Mod + Shift + Q | вийти (з підтвердженням) |
| Mod + Ctrl + Shift + Q | вийти без підтвердження |
Медіа та яскравість — апаратні клавіші XF86 працюють навіть на екрані блокування: гучність ±2 % та mute (wpctl), mute мікрофона, play/pause/stop/next/prev (playerctl), яскравість ±10 % (brightnessctl).
cd installer
cargo build --release
# → target/release/artix-installer
Кроки лише для читання (часовий пояс, клавіатура, Wi-Fi, пошук пакунків, перелік дисків) коректно деградують, коли їхні інструменти недоступні поза цільовою системою. Саме встановлення (розмітка, basestrap, chroot) потребує root і справжньої цілі, тож тестуйте у віртуальній машині.
Інсталятор не обовʼязково запускати з власного образу — його можна запустити просто з будь-якого офіційного Artix: і з консольного «base» образу, і з образу спільноти, де є робочий стіл та графічний інсталятор (Calamares) — там достатньо відкрити термінал і запустити цей TUI замість Calamares. Усі host-інструменти, яких він потребує (artools, gptfdisk, cryptsetup тощо), він доставляє сам під час роботи.
Live-образ Artix зі вшитим інсталятором — записати на флешку й завантажитись:
curl -LO https://github.com/YellowHearth1/artix-tui-installer/releases/latest/download/artix-tui-dinit-x86_64.iso
Якщо система вже завантажена (напр. з офіційного Artix-ISO) — просто запустіть інсталятор від root:
curl -LO https://github.com/YellowHearth1/artix-tui-installer/releases/latest/download/artix-installer
chmod +x artix-installer
sudo ./artix-installer
Обидва посилання завжди ведуть на найсвіжішу збірку — latest GitHub
розвʼязує сам. Усі збірки — на сторінці релізів.
base-devel дає компілятор і компонувальник, потрібні cargo:
sudo pacman -S --needed git rust base-devel
git clone https://github.com/YellowHearth1/artix-tui-installer.git
cd artix-tui-installer/installer
cargo build --release
sudo ./target/release/artix-installer
Кілька зауваг:
basestrap
і chroot.Ctrl+Alt+F2) або в
терміналі живого робочого столу, розміром щонайменше 80×24.Інсталятор починається з вибору режиму: Встановлення або Відновлення системи. Встановлення проходить 15 кроків:
nmcli.localectl; перша обрана — основна.os-prober, для GRUB), назва запису UEFI та шифрування
диска: лише root, повне (із зашифрованим /boot) чи USB-ключ, обсяг і
пароль-фраза. Робиться перед додатковими дисками, щоб ключ на додатковому
диску мав сенс./mnt / власний шлях із назвою
теки) та окрема галочка шифрування. Нічого не змінюється, доки ви не оберете.Навігація всюди однакова: ↑/↓ рухає фокус (а стрілка вгору на найвищому
пункті повертає на попередній крок), ←/→ змінює значення, Enter — далі,
Esc — закрити віконце або повернутися назад.
src/system/install.rs будує один упорядкований список дій; екран встановлення
виконує кожну, транслюючи вивід наживо. Орієнтовно:
встановлення host-інструментів → розмітка → форматування (за потреби LUKS) →
монтування → фаза 1 basestrap мінімальної завантажуваної бази (ядро,
firmware, dinit + сервіси, звук, логування) → налаштування репозиторіїв + ключів
→ фаза 2 інтерактивний pacman для оточення, драйверів і ваших пакунків →
облікові записи → локаль / часовий пояс / розкладка / hostname + hosts →
налаштування user-dinit (turnstile або userspawn) → initramfs (з хуком encrypt
при шифруванні) → завантажувач → вбудований nftables → логротація →
ввімкнення всіх сервісів dinit → фаза 3 AUR через paru.
Якщо на кроці «Диск та розділи» обрати btrfs, під вибором файлової системи зʼявляються додаткові опції (кожна — з поясненням «виграш/втрата» просто в інтерфейсі):
@ (корінь), @home, @snapshots → /.snapshots, @log → /var/log, @cache → /var/cache. Знімки системи не чіпають /home і не роздуваються логами та кешем.@snapshots).compress=zstd при записі.discard=async у фоні.Корінь завжди монтується з rootflags=subvol=@ — за іменем, а не через default-підтом.
Що інсталятор налаштовує для знімків:
/etc/snapper/configs/root (бо create-config у chroot не працює): TIMELINE_CREATE=no — знімки привʼязані до подій pacman, а не до годинника; NUMBER_LIMIT=10 — тримаються останні ~10./etc/cron.d/snapper (щодня о 5:30) через cronie, бо на dinit немає systemd-таймерів.Відкат працює на будь-якому завантажувачі (GRUB, rEFInd, Limine):
sudo artix-rollback [N] — показує список знімків; обраний стає новим @, старий корінь зберігається як @.rollback-<час>, default-підтом перенацілюється, а застарілий pacman-лок зі знімка прибирається (snap-pac робить PRE-знімок ще під db.lck). Є також ярлик у меню програм.artix.rollback відкриває вибір знімка прямо з initramfs; хук mkinitcpio виконується після encrypt, тож працює і з LUKS. На GRUB для цього є окремий пункт меню System Rollback.snapper rollback теж працює.Відкат не залежить від живого ядра: у /boot лежить заморожена пара vmlinuz-artix-rescue + initramfs-artix-rescue.img, яку pacman не чіпає. Саме її вантажать пункти System Rollback у GRUB, rEFInd і Limine — тож навіть коли оновлення зламало ядро чи initramfs, добірник знімків однаково запускається (а поруч є звичайний пункт rescue kernel — завантажитись на запасному ядрі без жодного відкату). Пара оновлюється лише після вдалого звичайного завантаження: сервіс artix-rescue-sync спрацьовує через 30 с аптайму і спершу звіряє, що зараз працює саме живе ядро (побайтове порівняння з /usr/lib/modules/$(uname -r)/vmlinuz), тому зламане ядро ніколи не отруїть копію. А одразу після відкату одноразовий artix-rollback-fixup сам узгоджує /boot із відновленою системою: повертає ядро зі знімкових /usr/lib/modules, перезбирає initramfs, оновлює меню GRUB і заморожує свіжу запасну пару.
Чому не grub-btrfs: його підменю вантажить знімки read-only через overlayfs-хук, зламаний на ядрах ≥ 6.8 (Antynea/grub-btrfs #328) — пункти просто не вантажаться. Натомість
artix-rollbackпідмінює@і вантажить відновлений корінь read-write, без overlay, на будь-якому ядрі й завантажувачі.
iso-profile/, для artools buildiso)Packages-Root / Packages-Live — пакунки для живого образу (лише dinit).profile.conf — автологін/дисплей-менеджер для живого сеансу.live-overlay/usr/bin/installer-launch — дає TUI справжній керівний термінал
на tty1 (setsid -c), із запасним шеллом у разі збою.live-overlay/etc/dinit.d/installer.conf — сервіс автозапуску інсталятора
замість getty на tty1.grub-overrides/loopback.cfg — завантажується одразу в інсталятор.Покладіть скомпільований бінарник у live-overlay/usr/bin/artix-installer, тоді
виконайте sudo buildiso -p <профіль>.
installer/ Сирці Rust (TUI на ratatui + логіка встановлення)
src/app.rs модель стану + конфіг
src/event.rs глобальна обробка клавіш / навігація
src/main.rs точка входу + «графічна» оболонка інсталятора
src/screens/ по модулю на кожен крок майстра
src/system/ диск, runner (PTY), план встановлення, пакунки, відновлення
src/assets/ вбудовані конфіги (kitty, fastfetch, waybar, wofi, pinnacle)
i18n/ рядки інтерфейсу en.toml / uk.toml
iso-profile/ профіль artools buildiso + накладка живого образу
screenshots/ знімки екрана для README (15 кроків майстра)
Примітка. Усі знімки зроблено в графічному емуляторі термінала на машині зі встановленим графічним оточенням. У чистому TTY (наприклад, одразу після завантаження базового образа Artix) інтерфейс виглядає значно скромніше: консоль ядра дає лише 16 кольорів і власний шрифт, тож частина ефектів ratatui — плавні відтінки, приглушені тони, заокруглені рамки — там недоступна або спрощена. Функційно все працює однаково.
Повний прохід майстра — усі 15 кроків. Інтерфейс двомовний (українська / англійська); знімки нижче зроблено українською.
Крок 1/15 — Мова. Мова інтерфейсу та майбутньої системи.

Крок 2/15 — Часовий пояс. Пошук і вибір часового поясу.

Крок 3/15 — Мережа. Пропустити (дротове зʼєднання) або просканувати Wi-Fi: вибір адаптера, мережі та введення паролю.

Крок 4/15 — Розкладка клавіатури. Мультивибір розкладок із фільтром; перша позначена стає основною.

Крок 5/15 — Ядро. Linux, Linux Zen, Linux Hardened або Linux LTS.

Крок 6/15 — Графічне оточення. Мультивибір оточень, перемикання сесії (Wayland/X11) та вибір екрана входу.

Крок 7/15 — Додаткові пакунки. Драйвери відеокарти + пошук і вибір популярних пакунків.

Крок 8/15 — Пакунки AUR. Пошук в AUR і рекомендовані пакунки (збірка через paru).

Крок 9/15 — Диск і розділи. UEFI/BIOS, вибір диска, розділ SWAP, файлова система кореня.

Крок 10/15 — Завантажувач і шифрування. GRUB / rEFInd / Limine / EFISTUB, os-prober, назва UEFI-запису, шифрування LUKS.

Крок 11/15 — Додаткові диски. Монтування інших дисків і наявних розділів (напр. Windows NTFS — зі збереженням даних).

Крок 12/15 — Облікові записи. Імʼя компʼютера, користувач і паролі; режим облікових записів.

Крок 13/15 — Параметри встановлення. Пароль sudo, репозиторій Chaotic-AUR, оптимізація дзеркал.

Крок 14/15 — Перевірка та встановлення. Підсумок усіх виборів перед стартом.

Крок 15/15 — Завершення. QR-код для донату на оборону України та вибір: перезавантажити, вимкнути чи зайти у встановлену систему для ручних кроків.

Проєкт розповсюджується за ліцензією Apache 2.0 — повний текст у файлі
LICENSE.
⚠️ Experimentelle Skill-Sammlung für deutsches Recht (Arbeits-, Gesellschafts-, Insolvenz-, Datenschutz-, Prozessrecht u
Manage multiple Claude Code agents from TUI or Web with tmux and git worktrees
Project management using GitHub Issues + Git worktrees for parallel agent execution
Core skills library for Claude Code with 20+ battle-tested skills including TDD, debugging, and brainstorming