Skip to content

Repository files navigation

🐧 Artix TUI Інсталятор

🇺🇦 Українська · 🇬🇧 English · 🇲🇽/🇪🇸 Español | ich0x

TUI-інсталятор Artix Linux — dinit, LUKS, btrfs-відкат, Wayland. Без systemd.

CI Rust ratatui Artix Linux init: dinit systemd-free

License: Apache-2.0 мови інтерфейсу PRs welcome

Останній коміт Зірки Issues Розмір
Інсталятор у дії — екран перевірки та встановлення

📖 Docs Мапа коду, типові зміни, збірка й тести.

Термінальний інсталятор для власної збірки Artix Linux на системі ініціалізації dinit.

Написаний на Rust із ratatui й оформлений як сучасний графічний інсталятор: ліва панель кроків, заокруглені панелі, акцент Artix-блакитного, сегментовані перемикачі та живий прокручуваний журнал встановлення.


🤖 Авторство коду

Увесь код цього проєкту написано Claude — моделлю ШІ від Anthropic. Архітектура, ітеративне налагодження та реалізація — повністю згенеровані Claude у діалозі. Дизайн-візія, тестування на реальному залізі та віртуальних машинах, а також рішення, специфічні для Artix/dinit, належать авторові проєкту.


⚠️ Проєкт експериментальний — використовуйте на свій страх і ризик

Це не готовий до продакшену інсталятор. Код тут пише Claude — про це чесно сказано в блоці вище. Моя частина інша: я вирішую, яким усе має бути і як має поводитись, ганяю збірки у віртуальних машинах, ловлю поламане й повертаю це в роботу, поки не запрацює як слід. Кожен реліз проходить тести, clippy і збірку.

Але парк реального заліза відтворити неможливо: прошивки UEFI поводяться по-різному, є RAID, гібридні відеокарти, екзотичні контролери й ноутбуки зі своїми примхами. Скажу прямо, де проходить межа моїх перевірок:

  • усе тестується виключно у віртуальній машині (QEMU/UEFI, різні типи носіїв). На фізичному залізі цей інсталятор не запускався жодного разу;
  • подвійне завантаження перевірене на Artix поруч з Artix. Це, до речі, найважчий випадок: os-prober не бачить Linux, чиї ядра лежать на ESP, тому для нього й написаний власний генератор пунктів меню. Сам механізм від дистрибутива не залежить — він шукає завантажувач на EFI-розділі, — тож із будь-яким іншим Linux має працювати так само або простіше;
  • а от Windows поруч ніколи не ставився. Розпізнавання Windows, перевикористання його EFI-розділу, збереження його розділів і пункт меню для нього — написані й покриті тестами, але на живій Windows не підтверджені жодного разу. Якщо у вас Windows — ви перший, хто це перевірить.

Інсталятор форматує диски. Помилка тут коштує даних.

  • Спершу спробуйте у віртуальній машині — переконайтесь, що сценарій спрацьовує так, як ви очікуєте.
  • Зробіть резервну копію всього, що не готові втратити, і перевірте, що вона відновлюється.
  • На машині з іншою ОС читайте екран підтвердження уважно: там перелічено кожен розділ, який буде знищено.
  • Щось пішло не так — напишіть issue. Вкажіть версію (вона в правому нижньому куті першого екрана) і що саме сталося. Вашого заліза в мене немає, тож без вашого звіту я про поламане просто не дізнаюсь.

🌍 Про мову спілкування

Я не знаю англійської та користуюся перекладачем. Англомовні тексти в цьому проєкті — README, коментарі в issue, рядки інтерфейсу — я читаю через нього, тож дещо може звучати незграбно або не так, як задумано.

Пишіть простіше, будь ласка. І якщо десь помітите невдале формулювання — скажіть прямо, це не образить: краще виправити, ніж лишити.

Українською можна писати вільно.


🖥️ Насамперед TTY

Цей інсталятор оптимізується під чисту текстову консоль (TTY) і саме там тестується — на моєму модифікованому образі Artix, зібраному з base. Ніяких графічних драйверів, X чи Wayland для встановлення не потрібно.

Чому так. У моїх знайомих на офіційних образах Artix із готовим середовищем стільниці були проблеми з графікою — установник просто не запускався, і встановити систему було неможливо. Консоль таких залежностей не має: якщо машина показує текст, інсталятор працює.

Запустити його в графічному терміналі (у вже встановленій системі зі стільницею) можна, і зазвичай там навіть гарніше — але це не основне середовище, тож можливі графічні негаразди: кути панелей, окремі символи чи кольори можуть виглядати не так, як задумано. Помилки, які видно лише в графічному терміналі, мають нижчий пріоритет за будь-що зламане в TTY.

Консольний шрифт тут — не косметика, а те, від чого залежить, чи взагалі видно інтерфейс, тому його вибір є окремим пунктом меню.


🌐 Як додати свою мову

Переклади вітаються — це найпростіший спосіб долучитися, Rust знати не треба. Іспанську (ich0x) додано саме так.

1. Скопіюйте файл-джерело. Українська — референс, з неї починаються всі рядки:

cp installer/i18n/uk.toml installer/i18n/XX.toml   # XX — код мови, напр. de, pl, fr

2. Перекладіть значення, не чіпаючи ключі. Ключі зліва (disk.warn) — ідентифікатори, вони мають лишитися однаковими у всіх файлах; перекладається лише текст у лапках справа. Плейсхолдери на кшталт {} та @@NAME@@ мусять уціліти.

3. Додайте назву мови в УСІ файли локалей. У секції [lang] кожного *.toml має з'явитися рядок з вашою мовою — і в новому файлі теж:

[lang]
en = "English"
uk = "Ukrainian (Українська)"
de = "German (Deutsch) — translation by ваш-нік"

4. Пропишіть мову в коді — чотири місця, усі невеликі: Lang (installer/src/i18n.rs), завантажувач поруч із uk()/es(), гілка в t(), і OPTIONS в installer/src/screens/language.rs, де там же задаються локаль і розкладка.

5. Перевірте. Тести самі впіймають пропущений ключ, порожній рядок, мову, яку неможливо обрати, і текст, що не влазить у 80×24:

cd installer && cargo test

Переклад README (README.XX.md) — за бажанням і дуже доречно. Тільки пробіли, без табуляцій: у код-блоках таб розгортається у 8 позицій і руйнує ASCII-рамки екранів.


📋 Журнал змін — що змінилось у кожній версії.

✨ Можливості

  • 🌐 Багатомовний інтерфейс — українська, англійська, іспанська; мова обирається на першому екрані.
  • ⚙️ Рідний dinit — налаштовує користувацький екземпляр dinit саме під цю систему ініціалізації, без жодних припущень про systemd:
    • turnstile для seatd (власний PAM-модуль, не потребує elogind);
    • userspawn для elogind (штатний Artix-варіант);
    • менеджер сеансів seatd/elogind та користувацькі сервіси PipeWire.
  • 📦 Інтерактивне встановлення пакунків — пакунки ставляться через pacman під псевдотерміналом, тож ви обираєте провайдерів (драйвери GPU/Vulkan, мультимедійні бекенди тощо), а не береться мовчки перший. Однойменні пакунки з різних репозиторіїв автоматично беруться з Artix; запити [Y/n] підтверджуються.
  • 🔒 Шифрування диска LUKS — лише root, повне шифрування із зашифрованим /boot на UEFI, або USB-ключ (keyfile дозволяє вводити пароль лише раз).
  • 🥾 Вибір завантажувача — GRUB, rEFInd, Limine або EFISTUB; для GRUB — os-prober для виявлення інших ОС. Налаштовується перед розміткою додаткових дисків.
    • Подвійне завантаження Artix-поруч-Artix. Кожна система додає в меню GRUB пункти сусідів (генератор /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 (найновіша система), який бачить усіх, тож комп'ютер завжди завантажиться в робоче меню.
  • 📦 EFISTUB (завантаження без завантажувача) — прошивка UEFI вантажить ядро напряму, без проміжного завантажувача (ядра Artix уже зібрані як EFI-стаби, CONFIG_EFI_STUB=y). initramfs і параметри передаються через запис efibootmgr. Не потребує додаткових пакунків чи systemd — на відміну від UKI, якому потрібен systemd-stub. Лише UEFI; несумісний із зашифрованим /boot. Сумісний із відкатом — ядро, initramfs і параметри лишаються окремими файлами, тож інсталятор реєструє додаткові UEFI-записи для відкату та порятунку (вибираються з меню завантаження прошивки). Це основа для Secure Boot (нижче).
  • 🔐 Підготовка Secure Boot (лише EFISTUB) — інсталятор готує, але свідомо не вмикає Secure Boot: ставить sbctl, генерує ключі підпису й записує докладну двомовну інструкцію в ~/SECURE-BOOT.txt. Фінальні кроки — занесення ключів (sbctl enroll-keys), підпис ядра й перехід прошивки в Setup Mode — користувач робить сам на встановленій системі, бо їх не можна безпечно автоматизувати. Увага: потрібні дії в BIOS/UEFI, і на деякому залізі неправильне занесення ключів може закирпичити пристрій — інсталятор показує чіткі попередження. sbctl має pacman-hook, що переписує підпис ядра при кожному оновленні.
  • 🗄️ Додаткові диски — змонтуйте інші диски чи розділи (у домівку, /mnt або власний шлях), за бажанням відформатуйте чи зашифруйте кожен. Зашифровані додаткові диски розблоковуються автоматично під час завантаження (ключ на зашифрованому корені, служба dinit), незалежно від способу розблокування кореня.
  • 💾 Вибір файлової системи — ext4, btrfs, xfs, f2fs, jfs, ext3, ext2.
  • 🌳 Btrfs зі знімками та відкатом — підтоми @/@home/@snapshots/@log/@cache, автознімки навколо кожної дії pacman (snapper + snap-pac) і відкат artix-rollback на будь-якому завантажувачі (у GRUB/rEFInd/Limine — окремим пунктом графічного меню, в EFISTUB — окремим записом у меню завантаження прошивки).
  • 🖥️ Вибір оточення — KDE Plasma, LXQt, Pinnacle (Wayland-композитор у стилі AwesomeWM), XFCE, Cinnamon, MATE, LXDE або без оточення.
  • 🎮 Драйвери GPU — NVIDIA (open-dkms), NVIDIA 580xx (застарілі), nouveau, AMD, Intel; nouveau автоматично блокується при виборі пропрієтарного драйвера.
  • 🛟 Режим відновлення системи — для випадку, коли система вже не завантажується. Ви кажете, чим є кожен розділ (корінь, /boot, /boot/efi, swap, /home, дані) — підказка вже стоїть, її просто підтверджують або перебивають. Далі кнопка «Визначити проблему» дивиться систему й пише вашою мовою, що саме зламано: немає ядра, немає initramfs, fstab називає диск, якого вже нема. Ремонт — окремими кнопками: перевстановити завантажувач, перебудувати initramfs, перестворити fstab, полагодити права після chmod 777 /. Chroot лишається — але як остання опція, а не як єдина.
  • 🔁 Підтримка AURparu збирається з джерел (щоб завжди відповідати системній libalpm), а потім встановлює обрані вами пакунки.
  • 🧩 Автоматичне ввімкнення сервісів dinit — будь-який встановлений пакунок *-dinit отримує ввімкнений сервіс автоматично, чи то з репозиторіїв, чи з AUR.
  • 📜 Системне логування з коробкиsyslog-ng збирає всі логи в /var/log, а logrotate (через cronie) тримає їх тиждень, видаляє старіше й ротує негайно, якщо файл перевищує 5 ГіБ. Користувацькі сервіси логуються в буфер, тож dinitctl catlog працює для них одразу.
  • 🔥 Готовий фаєрвол — вбудований конфіг nftables відкриває порти для KDE Connect, LocalSend, Sunshine, RustDesk, Steam Remote Play, Syncthing та SSH.
  • 🎨 Вбудовані конфіги — kitty (Catppuccin Mocha), запит starship, fastfetch, а для Pinnacle ще й waybar та wofi; зовнішні файли не потрібні.
  • 🕹️ Готовність до ігор — піднімає ліміт відкритих файлів (nofile) для Wine/Proton fsync, а за бажанням автоматично налаштовує auto-cpufreq.
  • 🧳 Самодостатній — потрібні host-інструменти (artools, gptfdisk, cryptsetup тощо) встановлюються автоматично, тож інсталятор працює навіть із офіційного ISO Artix, а не лише з власного образу.
  • 🏷️ Налаштовувані ім'я комп'ютера та назва запису UEFI.
  • 🚦 Обережний старт — розмітка диска починається лише після явного підтвердження на екрані «Перевірка та встановлення», а потрібні host-інструменти (git, gptfdisk, dosfstools, parted тощо) довантажуються у фоні одразу після з'єднання з мережею.
  • ⚠️ Застереження перед розміткою — на екрані вибору диска інсталятор ненав'язливо попереджає (не блокуючи вибір), якщо: обраний диск є завантажувальним носієм, з якого запущено сам інсталятор (виявляється за файловою системою iso9660 live-образу); диск менший за 20 ГіБ (базова система вміститься, але для повного оточення може забракнути місця); або обраний режим UEFI/BIOS не збігається з тим, у якому реально завантажено комп'ютер (що дало б систему, яка не вантажиться). Кожне застереження — це повне, зрозуміле речення в окремому вікні з прокруткою (клавіша w на списку дисків); ви завжди можете продовжити, якщо свідомо цього хочете.
  • 🧨 Підтвердження стирання диска — останній крок перед форматуванням: окреме вікно прямо показує, який диск (шлях, модель, обсяг) і які наявні розділи буде безповоротно знищено, і вимагає явного Enter. Форматування ніколи не починається без цього другого підтвердження — випадково стерти не той диск важче.
  • 🌍 Список дзеркал лишається придатним для читання й правки руками. Перезібраний файл згрупований за країнами — над кожним блоком стоїть назва країни, країни йдуть від найшвидшої, а всередині блоку дзеркала впорядковані за часом відповіді. Переїхали в іншу країну — закоментуйте один блок і розкоментуйте інший, більше нічого робити не треба.
  • 💤 Дзеркала, що не пройшли перевірку, ЗАКОМЕНТОВУЮТЬСЯ, а не видаляються — разом зі своїми країнами, у кінці файлу. Те, що сьогодні лежить, завтра або після переїзду може виявитися найближчим, тож воно лишається на місці — достатньо розкоментувати.
  • 🪞 Швидкі та стійкі дзеркала — просто перед встановленням пакунків інсталятор перевіряє кожне дзеркало зі списку (Artix, Arch і Chaotic-AUR) — і активні, і закоментовані: по 12 паралельно, з обмеженням 6 с на кожне. Живі переписуються від найменшого часу відповіді до найбільшого, мертві чи надто повільні — закоментовуються з поясненням. Жодних здогадок за географією чи часовим поясом: рейтинг будується лише на реальному вимірі. Тож дзеркало, яке «помирає» посеред завантаження, більше не валить усю транзакцію на 95 % — його просто немає в активному списку. Оригінальний список зберігається поруч як *.bak-installer, а якщо мережа лежить і не відповідає жодне дзеркало — список лишається недоторканим. Плюс опційний Chaotic-AUR із готовими бінарними пакунками AUR.
  • 📊 Живий перебіг — журнал встановлення наживо з прокруткою (PgUp/PgDn, Home/End); після помилки — повторний запуск без втрати зробленого вибору.
  • 🏁 Три варіанти фіналу — перезавантажитись, вимкнути комп'ютер або одразу зайти в нову систему через chroot; розділи в усіх випадках відмонтовуються безпечно.
  • 📀 Збирається як живий образ ISO через artools (buildiso).

👁️ Вигляд

Екран «Диск та розділи» наживо

Знімок — із графічного термінала; у чистому TTY кольори простіші (див. примітку в розділі «Знімки екрана»).

А схематично кожен екран влаштовано так:

┌───────────┬──────────────────────────────────────────────┐
│  ◆  01    │  09 · Диск та розділи                         │
│  ●  02    │  ┌────────────────────────────────────────┐   │
│  ●  …     │  │  Режим      ● UEFI   ○ BIOS             │   │
│  ◆  09    │  │  Диск: /dev/sda  256G                   │   │
│  ○  10    │  │  Додати SWAP?  [так]  [ 4 ГіБ ]         │   │
│  ○  …     │  │  Файлова система  ‹ ext4 ›  btrfs  xfs  │   │
│           │  │              ◂ Назад       Далі ▸       │   │
│           │  └────────────────────────────────────────┘   │
│           ├──────────────────────────────────────────────┤
│           │  ↑/↓ рух · ←/→ зміна · Enter далі             │
└───────────┴──────────────────────────────────────────────┘

Ліва панель показує лише номери кроків (на активному крутиться маленький ромб); повна назва кроку — у заголовку панелі.


🏳️‍🌈 slayfetch — fastfetch зі своїм логотипом

На кроці «Додаткові пакунки» поряд із fastfetch є пункт slayfetch. Це той самий fastfetch, лише із власним логотипом: лого Artix на тлі одного з прапорів спільноти ЛГБТКІА+. Оберіть slayfetch замість fastfetch (вони несумісні — можна лишити тільки один), натисніть Пробіл — і з'явиться список логотипів; обраний одразу видно в рядку. Під час встановлення ставиться звичайний fastfetch, а обраний логотип лягає в ~/.config/fastfetch/.

Як увімкнути: крок «Додаткові пакунки» → зніміть позначку з fastfetch → позначте slayfetch (Пробіл) → у вікні, що відкриється, оберіть логотип (↑/↓, Enter). Готово.

🏳️‍🌈 Від автора: я не належу до спільноти ЛГБТКІА+, але додав ці логотипи з прапорами як знак підтримки та солідарності.

Усі варіанти логотипів slayfetch: лого Artix на тлі прапорів спільноти ЛГБТКІА+


⌨️ Керування

Клавіші Дія
↑ / ↓ рух списками та полями
Enter обрати / далі
Esc або Shift+Tab назад; Esc також закриває модальні вікна
↑ на верхньому пункті вихід на попередній екран
Пробіл позначити пункт / перемкнути перемикач
← / → змінити значення: файлова система, розмір SWAP, режим облікових записів
Набір тексту фільтр списків, пошук пакунків, редагування полів
Tab наступне поле на екрані «Облікові записи»
o опції файлової системи (екран «Диск та розділи»)
w / s гортання опису в модальному вікні опцій ФС
PgUp / PgDn · Home / End швидке гортання довгих списків та журналу встановлення
q вихід з інсталятора (заблоковано під час встановлення)
Ctrl+C аварійний вихід

Контекстні підказки для активного екрана завжди показані в нижньому рядку інтерфейсу.

⌨️ Гарячі клавіші для віконного менеджера Pinnacle

Джерело — конфіг, який інсталятор кладе в ~/.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

Інсталятор не обов'язково запускати з власного образу — його можна запустити просто з будь-якого офіційного Artix: і з консольного «base» образу, і з образу спільноти, де є робочий стіл та графічний інсталятор (Calamares) — там достатньо відкрити термінал і запустити цей TUI замість Calamares. Усі host-інструменти, яких він потребує (artools, gptfdisk, cryptsetup тощо), він доставляє сам під час роботи.

Готовий ISO-образ (найпростіше)

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

Кілька зауваг:

  • Інсталятор має працювати від root — він розмічає диски, виконує basestrap і chroot.
  • Це повноекранний TUI: запускайте у справжній консолі (Ctrl+Alt+F2) або в терміналі живого робочого столу, розміром щонайменше 80×24.
  • На live-образі збірка з джерел іде в оперативну пам'ять; якщо її обмаль — візьміть готовий бінарник вище або зберіть його на іншій машині з Artix і скопіюйте єдиний файл на цільову.
  • ⚠️ Інсталятор форматує диски — спершу перевіряйте у віртуальній машині.

🧭 Кроки майстра

Інсталятор починається з вибору режиму: Встановлення або Відновлення системи. Встановлення проходить 15 кроків:

  1. Мова — українська / англійська; задає мову інтерфейсу та локаль системи.
  2. Часовий пояс — повний список IANA з фільтром-пошуком.
  3. Wi-Fi — пропустити (дротове), сканувати або під'єднатися через nmcli.
  4. Клавіатура — консольні розкладки через localectl; перша обрана — основна.
  5. Ядро — linux / lts / zen / hardened.
  6. Оточення — вибір графічного оточення (або без нього) та менеджера сеансів.
  7. Пакунки — драйвер GPU + пошук і множинний вибір з репозиторіїв.
  8. AUR — підібраний рекомендований список та живий пошук AUR.
  9. Диск — режим завантаження, цільовий диск, SWAP і файлова система кореня.
  10. Завантажувач і шифрування — вибір завантажувача (GRUB / rEFInd / Limine), виявлення інших ОС (os-prober, для GRUB), назва запису UEFI та шифрування диска: лише root, повне (із зашифрованим /boot) чи USB-ключ, обсяг і пароль-фраза. Робиться перед додатковими дисками, щоб ключ на додатковому диску мав сенс.
  11. Додаткові диски — для кожного знайденого диска/розділу: формат (або «зберегти дані»), куди монтувати (домівка / /mnt / власний шлях із назвою теки) та окрема галочка шифрування. Нічого не змінюється, доки ви не оберете.
  12. Користувач — ім'я комп'ютера, режим запису, ім'я користувача та паролі (тримаються лише в пам'яті, на диск інсталятором не пишуться).
  13. Параметри — sudo без пароля, репозиторій Chaotic-AUR та оптимізація дзеркал.
  14. Встановлення — огляд, а потім живий журнал виконує план крок за кроком; зупиняється при помилці й дозволяє повернутися Назад.
  15. Завершення — підсумок і перезавантаження.

Навігація всюди однакова: / рухає фокус (а стрілка вгору на найвищому пункті повертає на попередній крок), / змінює значення, 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: підтоми, автознімки й відкат системи

Якщо на кроці «Диск та розділи» обрати btrfs, під вибором файлової системи з'являються додаткові опції (кожна — з поясненням «виграш/втрата» просто в інтерфейсі):

  • Підтоми — схема @ (корінь), @home, @snapshots/.snapshots, @log/var/log, @cache/var/cache. Знімки системи не чіпають /home і не роздуваються логами та кешем.
  • Автознімки (snapper + snap-pac) — знімок до та після кожної транзакції pacman/paru; вмикає підтоми автоматично (потрібен @snapshots).
  • Стиснення (zstd) — прозоре compress=zstd при записі.
  • TRIM для SSDdiscard=async у фоні.
  • Для будь-якої файлової системи окремо є noatime.

Корінь завжди монтується з rootflags=subvol=@ — за іменем, а не через default-підтом.

Що інсталятор налаштовує для знімків:

  • snapper конфігурується прямим записом /etc/snapper/configs/root (бо create-config у chroot не працює): TIMELINE_CREATE=no — знімки прив'язані до подій pacman, а не до годинника; NUMBER_LIMIT=10 — тримаються останні ~10.
  • Очищення за розкладом/etc/cron.d/snapper (щодня о 5:30) через cronie, бо на dinit немає systemd-таймерів.
  • Базовий знімок першого завантаження — одноразовий фоновий сервіс чекає, поки піднімуться D-Bus і snapper, робить знімок «clean system (post-install baseline)» і прибирає сам себе.

Відкат працює на будь-якому завантажувачі (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 (iso-profile/, для artools buildiso)

Тут лежить усе, щоб зібрати власний живий образ — на будь-якій машині, де є artools. Образ базується на base-образі Artix: текстова консоль, без стільниці й графічних драйверів.

sh scripts/build-iso.sh

Одна команда: збирає інсталятор, ганяє тести й clippy, копіює цей профіль у робочу теку artools і запускає buildiso. Створювати профіль руками не треба — скрипт розгортає його щоразу, тож репозиторій лишається джерелом правди й не розходиться з кодом.

Зібрати образ можна на будь-якому Linux — потрібен лише Docker або Podman:

sh scripts/build-iso.sh --docker   # даемон уже під root
sh scripts/build-iso.sh --podman   # спитає sudo — див. нижче

Чому podman просить root. buildiso монтує devtmpfs і підключає образ EFI через loop-пристрій. Ядро не дозволяє ні того, ні того всередині user namespace, тож rootless podman падає на make_rootfs — і --privileged тут не рятує. Docker цього не помічає, бо його даемон і так працює від root. Скрипт каже про підвищення перед тим, як його зробити, — так само, як він уже робить для збірки на самому Artix.

Ані Artix, ані artools, ані Rust на машині не треба: інструменти збірки лежать у vendor/artools/ (узяті з пакунків Artix, не з чиєїсь машини — подробиці там у README), а інсталятор компілюється всередині контейнера. Рушій називають прямо: автовизначення нема навмисно — збірка, що мовчки пішла не тим рушієм, якого ви очікували, і є та збірка, через яку їх тримають окремо. На самому Artix та сама команда без прапорця збирає напряму.

  • profile.yaml — пакунки образу й налаштування живого сеансу (автологін artix, без дисплей-менеджера).
  • live-overlay/home/artix/.bash_profile — саме він запускає інсталятор на tty1. Це весь механізм автостарту: жодної служби dinit.
  • live-overlay/usr/bin/installer-start — ставить консольний шрифт і запускає інсталятор.
  • live-overlay/usr/share/kbd/consolefonts/ — шрифти, яких немає в жодному пакунку; походження й ліцензія кожного — поруч, у usr/share/licenses/.
  • grub-overrides/loopback.cfg — завантажується одразу в інсталятор.

Бінарник кладеться в live-overlay, а не в root-overlay. Цей профіль будує живий сеанс, тож до образу доходить саме перший. Копія в root-overlay мовчки нічого не робить: збірка успішна, а в образі лишається старий бінарник.

Подробиці — в iso-profile/README.md.


🗂️ Структура проєкту

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/           рядки інтерфейсу uk.toml / en.toml / es.toml
iso-profile/      профіль artools buildiso + накладка живого образу
iso/              зібрані образи (у git не потрапляють — лише README)
screenshots/      знімки екрана для README (15 кроків майстра)

📸 Знімки екрана

Примітка. Усі знімки зроблено в графічному емуляторі термінала на машині зі встановленим графічним оточенням. У чистому TTY (наприклад, одразу після завантаження базового образу Artix) інтерфейс виглядає значно скромніше: консоль ядра дає лише 16 кольорів і власний шрифт, тож частина ефектів ratatui — плавні відтінки, приглушені тони, заокруглені рамки — там недоступна або спрощена. Функційно все працює однаково.

Знімки зроблено до перестановки кроків, тож у самому кадрі видно стару нумерацію (/15) і старий порядок — розкладка тоді була четвертим кроком, а не другим. Підписи нижче описують майстер таким, яким він є ЗАРАЗ; знімки буде перезнято.

Повний прохід майстра — усі 16 кроків. Інтерфейс доступний українською, англійською та іспанською; знімки нижче зроблено українською.

Крок 1/16 — Мова. Мова інтерфейсу та майбутньої системи.

Крок 1 — Мова

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

Крок 2 — Розкладка клавіатури

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

Крок 3 — Часовий пояс

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

Крок 4 — Мережа

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

Крок 5 — Ядро

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

Крок 6 — Графічне оточення

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

Крок 7 — Додаткові пакунки

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

Крок 8 — Пакунки AUR

Крок 9/16 — Спосіб розмітки. Автоматично (весь диск), поруч з наявною ОС, в готовий вільний простір або ручна розмітка — з перемикачем «Лише Artix» / «Подвійне завантаження».

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

Крок 10 — Диск і розділи

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

Крок 11 — Завантажувач і шифрування

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

Крок 12 — Додаткові диски

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

Крок 13 — Облікові записи

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

Крок 14 — Параметри встановлення

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

Крок 15 — Перевірка та встановлення

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

Крок 16 — Завершення


🙏 Подяки

Іспанський переклад (es-419, латиноамериканський) — ich0x: повний файл локалі та переклад документації. Дякую за роботу.

📄 Ліцензія

Проєкт розповсюджується за ліцензією Apache 2.0 — повний текст у файлі LICENSE.

Releases

Packages

Contributors

Languages