🇺🇦 Українська · 🇬🇧 English · 🇲🇽/🇪🇸 Español | ich0x
Мапа коду, типові зміни, збірка й тести.
Термінальний інсталятор для власної збірки 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) і саме там тестується — на моєму модифікованому образі Artix, зібраному з
base. Ніяких графічних драйверів, X чи Wayland для встановлення не потрібно.Чому так. У моїх знайомих на офіційних образах Artix із готовим середовищем стільниці були проблеми з графікою — установник просто не запускався, і встановити систему було неможливо. Консоль таких залежностей не має: якщо машина показує текст, інсталятор працює.
Запустити його в графічному терміналі (у вже встановленій системі зі стільницею) можна, і зазвичай там навіть гарніше — але це не основне середовище, тож можливі графічні негаразди: кути панелей, окремі символи чи кольори можуть виглядати не так, як задумано. Помилки, які видно лише в графічному терміналі, мають нижчий пріоритет за будь-що зламане в TTY.
Консольний шрифт тут — не косметика, а те, від чого залежить, чи взагалі видно інтерфейс, тому його вибір є окремим пунктом меню.
Переклади вітаються — це найпростіший спосіб долучитися, Rust знати не треба. Іспанську (ich0x) додано саме так.
1. Скопіюйте файл-джерело. Українська — референс, з неї починаються всі рядки:
cp installer/i18n/uk.toml installer/i18n/XX.toml # XX — код мови, напр. de, pl, fr2. Перекладіть значення, не чіпаючи ключі. Ключі зліва (
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.
- turnstile для
- 📦 Інтерактивне встановлення пакунків — пакунки ставляться через
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(найновіша система), який бачить усіх, тож комп'ютер завжди завантажиться в робоче меню.
- Подвійне завантаження Artix-поруч-Artix. Кожна система додає в меню GRUB
пункти сусідів (генератор
- 📦 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 лишається — але як остання опція, а не як єдина. - 🔁 Підтримка AUR —
paruзбирається з джерел (щоб завжди відповідати системній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 далі │
└───────────┴──────────────────────────────────────────────┘
Ліва панель показує лише номери кроків (на активному крутиться маленький ромб); повна назва кроку — у заголовку панелі.
На кроці «Додаткові пакунки» поряд із 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 | аварійний вихід |
Контекстні підказки для активного екрана завжди показані в нижньому рядку інтерфейсу.
⌨️ Гарячі клавіші для віконного менеджера 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: і з консольного «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Кілька зауваг:
- Інсталятор має працювати від root — він розмічає диски, виконує
basestrapіchroot. - Це повноекранний TUI: запускайте у справжній консолі (
Ctrl+Alt+F2) або в терміналі живого робочого столу, розміром щонайменше 80×24. - На live-образі збірка з джерел іде в оперативну пам'ять; якщо її обмаль — візьміть готовий бінарник вище або зберіть його на іншій машині з Artix і скопіюйте єдиний файл на цільову.
⚠️ Інсталятор форматує диски — спершу перевіряйте у віртуальній машині.
Інсталятор починається з вибору режиму: Встановлення або Відновлення системи. Встановлення проходить 15 кроків:
- Мова — українська / англійська; задає мову інтерфейсу та локаль системи.
- Часовий пояс — повний список IANA з фільтром-пошуком.
- Wi-Fi — пропустити (дротове), сканувати або під'єднатися через
nmcli. - Клавіатура — консольні розкладки через
localectl; перша обрана — основна. - Ядро — linux / lts / zen / hardened.
- Оточення — вибір графічного оточення (або без нього) та менеджера сеансів.
- Пакунки — драйвер GPU + пошук і множинний вибір з репозиторіїв.
- AUR — підібраний рекомендований список та живий пошук AUR.
- Диск — режим завантаження, цільовий диск, SWAP і файлова система кореня.
- Завантажувач і шифрування — вибір завантажувача (GRUB / rEFInd / Limine),
виявлення інших ОС (
os-prober, для GRUB), назва запису UEFI та шифрування диска: лишеroot, повне (із зашифрованим/boot) чи USB-ключ, обсяг і пароль-фраза. Робиться перед додатковими дисками, щоб ключ на додатковому диску мав сенс. - Додаткові диски — для кожного знайденого диска/розділу: формат (або
«зберегти дані»), куди монтувати (домівка /
/mnt/ власний шлях із назвою теки) та окрема галочка шифрування. Нічого не змінюється, доки ви не оберете. - Користувач — ім'я комп'ютера, режим запису, ім'я користувача та паролі (тримаються лише в пам'яті, на диск інсталятором не пишуться).
- Параметри — sudo без пароля, репозиторій Chaotic-AUR та оптимізація дзеркал.
- Встановлення — огляд, а потім живий журнал виконує план крок за кроком; зупиняється при помилці й дозволяє повернутися Назад.
- Завершення — підсумок і перезавантаження.
Навігація всюди однакова: ↑/↓ рухає фокус (а стрілка вгору на найвищому
пункті повертає на попередній крок), ←/→ змінює значення, 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і не роздуваються логами та кешем. - Автознімки (snapper + snap-pac) — знімок до та після кожної транзакції pacman/paru; вмикає підтоми автоматично (потрібен
@snapshots). - Стиснення (zstd) — прозоре
compress=zstdпри записі. - TRIM для SSD —
discard=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, на будь-якому ядрі й завантажувачі.
Тут лежить усе, щоб зібрати власний живий образ — на будь-якій машині, де є
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 — Мова. Мова інтерфейсу та майбутньої системи.
Крок 2/16 — Розкладка клавіатури. Мультивибір розкладок із фільтром; перша позначена стає основною.
Крок 3/16 — Часовий пояс. Пошук і вибір часового поясу.
Крок 4/16 — Мережа. Пропустити (дротове з'єднання) або просканувати Wi-Fi: вибір адаптера, мережі та введення пароля.
Крок 5/16 — Ядро. Linux, Linux Zen, Linux Hardened або Linux LTS.
Крок 6/16 — Графічне оточення. Мультивибір оточень і вибір екрана входу. Оточення, що вміють обидві сесії (Plasma, LXQt), ставлять і X11, і Wayland — сесія обирається при вході.
Крок 7/16 — Додаткові пакунки. Драйвери відеокарти + пошук і вибір популярних пакунків.
Крок 8/16 — Пакунки AUR. Пошук в AUR і рекомендовані пакунки (збірка через paru).
Крок 9/16 — Спосіб розмітки. Автоматично (весь диск), поруч з наявною ОС, в готовий вільний простір або ручна розмітка — з перемикачем «Лише Artix» / «Подвійне завантаження».
Крок 10/16 — Диск і розділи. UEFI/BIOS, вибір диска, розділ SWAP, файлова система кореня.
Крок 11/16 — Завантажувач і шифрування. GRUB / rEFInd / Limine / EFISTUB, os-prober, назва UEFI-запису, шифрування LUKS.
Крок 12/16 — Додаткові диски. Монтування інших дисків і наявних розділів (напр. Windows NTFS — зі збереженням даних).
Крок 13/16 — Облікові записи. Ім'я комп'ютера, користувач і паролі; режим облікових записів.
Крок 14/16 — Параметри встановлення. Пароль sudo, репозиторій Chaotic-AUR, оптимізація дзеркал.
Крок 15/16 — Перевірка та встановлення. Підсумок усіх виборів перед стартом.
Крок 16/16 — Завершення. QR-код для донату на оборону України та вибір: перезавантажити, вимкнути чи зайти у встановлену систему для ручних кроків.
Іспанський переклад (es-419, латиноамериканський) — ich0x: повний файл локалі та переклад документації. Дякую за роботу.
Проєкт розповсюджується за ліцензією Apache 2.0 — повний текст у файлі
LICENSE.














