feat: dinit or die

why the FUCK did i think making an init selector was a good idea
artix themselves dont even ship services in their online installer
they just give you a bare system and say "figure it out" and
it WORKS because people can just install their init of choice
afterwards. but nooooo i had to be clever and build a whole
netinstall-add monstrosity with openrc/runit/s6 service groups
that broke constantly because basestrap --overwrite is a lie
and init packages conflict with each other and sddm-openrc +
lightdm-openrc both Provide: init-displaymanager and pacman
just goes 🖕 during install.

so anyway. dinit only now. you want something else? read
changing-init.md, i literally copied the artix wiki tutorial.
i am not maintaining four init service groups in netinstall.yaml
for the rest of my life. this is my villain origin story.

actual changes:
- ripped out offline calamares mode (was never truly offline)
- ripped out packagechooser.conf (good fucking riddance)
- added packagechooser_dm.conf so you can at least pick your DM
- added BYODE offline installer (bare system + btrfs + snapper,
  no DE, you pacman -Sy plasma-meta yourself)
- added yay + snapper + btrfs-progs to rootfs
- shoved Init Services + DM groups into netinstall.yaml (dinit
  only, obviously)
- updated every markdown file that mentioned another init like
  they were cursed (they were)
- wrote changing-init.md so i can just paste the link next time
  someone asks
- X-KDE-IsAdminApplication=true so KDE stops acting like
  calamares is a virus (its not, its just desperate)
This commit is contained in:
2026-07-16 21:55:05 +02:00
parent 8661722ee7
commit 442980a7af
45 changed files with 602 additions and 813 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
title: Antergos NeXT
description: >-
A community revival of Antergos — Artix Linux, OpenRC, KDE Plasma, Calamares
A community revival of Antergos — Artix Linux, Dinit, KDE Plasma, Calamares
theme: just-the-docs
color_scheme: dark
+161
View File
@@ -0,0 +1,161 @@
---
title: Changing init
layout: default
nav_order: 9
---
# Changing init on an installed system
Antergos NeXT ships with **Dinit** as the default and only install-time init.
If you prefer a different init (OpenRC, Runit, or S6), you can switch after
installation.
> **Warning:** Switching init is for advanced users. In general, a fresh
> installation is safer. Keep a bootable Artix LiveUSB handy in case
> something goes wrong.
## Overview
1. Stop your display manager and get to a TTY
2. Save a list of installed `-dinit` service packages
3. Download the corresponding `-<newinit>` packages
4. Remove the dinit packages
5. Install the new init packages
6. Enable services for the new init
7. Cold reboot
## Step-by-step
### 1. Stop the display manager
```bash
dinitctl stop sddm # or lightdm / lxdm / greetd / ly
```
Switch to a text TTY with Ctrl+Alt+F2 and log in as root.
### 2. Save your service list
```bash
pacman -Qsq dinit > services.list
```
This captures every installed package with `-dinit` in its name.
The list will include things like `sddm-dinit`, `networkmanager-dinit`,
`elogind-dinit`, etc.
### 3. Download packages for the new init
Replace `openrc` with `runit`, `s6`, or your init of choice:
```bash
pacman -Sw $(sed 's/dinit/openrc/g' < services.list)
```
This fetches the packages into pacman's cache without installing them.
If this fails for any package, you'll need to install it manually later.
### 4. Remove the old init packages
```bash
pacman -Rdd $(cat services.list)
```
The `-dd` flag bypasses dependency checks — required because we're
ripping out the entire init layer at once.
### 5. Install the new init
First install the base init package and elogind:
| Target | Base packages |
|----------|---------------|
| OpenRC | `openrc`, `elogind-openrc` |
| Runit | `runit`, `elogind-runit` |
| S6 | `s6-base`, `elogind-s6` |
```bash
pacman -S openrc elogind-openrc
```
Then install the service packages:
```bash
pacman -S $(sed 's/dinit/openrc/g' < services.list)
```
### 6. Enable services
#### Switching to OpenRC
```bash
rc-update add sddm default
rc-update add NetworkManager default
# ... repeat for each service
```
Common services: `acpid`, `bluetoothd`, `cronie`, `cupsd`, `dbus`,
`dhcpcd`, `NetworkManager`, `power-profiles-daemon`, `syslog-ng`.
#### Switching to Runit
```bash
ln -s /etc/runit/sv/NetworkManager /etc/runit/runsvdir/default/
ln -s /etc/runit/sv/sddm /etc/runit/runsvdir/default/
# ... repeat for each service
```
#### Switching to S6
```bash
s6-service add default NetworkManager
s6-service add default sddm
# ... repeat for each service
```
### 7. Cold reboot
A normal reboot won't work because the symlinks for `/sbin/init` and
`/sbin/reboot` still point to the old init. Instead, synchronize
disks and trigger a cold reboot:
```bash
sync
mount / -o remount,ro
echo b > /proc/sysrq-trigger
```
Or use the reset button on your machine.
## Troubleshooting
### System won't boot
Boot from an Artix LiveUSB, chroot in, and check:
```bash
mount /dev/sdXn /mnt
artix-chroot /mnt
```
From the chroot, you can reinstall packages, fix service symlinks,
or regenerate the initramfs with `mkinitcpio -p linux`.
### Missing service packages
Some daemons may not have init scripts for your chosen init.
Check the Artix repos:
```bash
pacman -Ss <daemon-name>-openrc # or -runit, -s6
```
If a package doesn't exist, you can write a custom service file
or use a different daemon.
### OpenRC: services don't enable on installed systems
This was a known bug in earlier Antergos NeXT builds (the installer
used `artix-service` which didn't set up OpenRC correctly).
If you're switching to OpenRC manually on an already-installed system,
`rc-update add` works fine — the bug was specific to the installer flow.
+1 -1
View File
@@ -80,7 +80,7 @@ Available desktops in online mode, sourced from Artix repos.
| **Repo** | galaxy |
| **Group** | `cosmic` |
| **Session** | `cosmic.desktop` |
| **Notes** | Rust-based, Wayland-native. Uses greetd + cosmic-greeter (not SDDM). Alpha quality, not for production. Works with dinit, s6, runit; OpenRC may have 100% CPU bugs |
| **Notes** | Rust-based, Wayland-native. Uses greetd + cosmic-greeter (not SDDM). Alpha quality, not for production. |
## No Desktop
+2 -3
View File
@@ -98,7 +98,7 @@ Artix bundles the Wayland session into `plasma-workspace` itself. Do not add it
### `calamares-next.sh SetConfig()`
Must `rm -f` the symlink at `/etc/calamares/settings.conf` before `cp`, otherwise `cp` follows the symlink and overwrites the offline config file instead of replacing it with the selected one.
Must `rm -f` the existing file before `cp`, otherwise `cp` follows any existing symlink to the settings file.
### CI does not trigger on push
@@ -115,8 +115,7 @@ Boot the resulting ISO in a VM. Verify:
- Wayland is the default display server (SDDM session is `plasma.desktop`)
- No "Install Artix Linux" entry in the app menu
- Wallpaper is set on first login
- Offline mode installs without internet
- Online mode: init selector + DE selector both work
- DE selector works
- Slideshow renders correctly
- Audio works after installation (pipewire should auto-start)
- After install, `/usr/lib/os-release` shows "Antergos NeXT"
+3 -4
View File
@@ -6,7 +6,7 @@ nav_order: 1
# Antergos NeXT
A community revival of Antergos for the post-systemd era — **Artix Linux** base with **Dinit** (OpenRC / Runit / S6 available), **KDE Plasma**, and the **Calamares** installer (offline + online modes).
A community revival of Antergos for the post-systemd era — **Artix Linux** base with **Dinit**, **KDE Plasma**, and the **Calamares** installer.
## Download
@@ -18,11 +18,10 @@ _Published to GitHub Releases. ISO also archived on the Internet Archive._
This is the first stable ISO. What works:
- KDE Plasma 6 on Wayland (with SDDM)
- Full audio support on both offline and online installs
- Full audio support on installed systems
- Custom SDDM theme (Antergos brand, not Breeze)
- Correct `/usr/lib/os-release` (shows "Antergos NeXT", not "Artix Linux")
- Offline mode: unpack pre-built Plasma squashfs, no internet required
- Online mode: choose your init (Dinit/OpenRC/Runit/S6) and desktop (Plasma/Xfce/Cinnamon/MATE/LXQt/i3/Sway/Hyprland)
- Choose your desktop (Plasma/Xfce/Cinnamon/MATE/LXQt/i3/Sway/Hyprland/COSMIC)
- GRUB with Antergos theme
- Custom Calamares slideshow
- Xlibre X server included
+3 -5
View File
@@ -9,16 +9,14 @@ has_children: true
An **init system** is PID 1 — the first process that runs when your computer boots. It starts everything else: filesystems, networking, display manager, services. Think of it as a foreman: it doesn't do the work itself, but it makes sure everything happens in the right order.
Antergos NeXT lets you choose between **four** init systems during online installation. (Offline mode uses Dinit, the default.)
> **Don't know what to pick? Stick with Dinit** — it's the default, it's fast, and it's what Antergos NeXT ships with. OpenRC is also available but currently broken in Antergos NeXT (services don't enable correctly on installed systems).
Antergos NeXT ships with **Dinit** as its default init system. The pages below describe the major init systems available on Artix Linux for educational purposes. If you want to switch init on an installed system, see [Changing init](changing-init).
## The inits
| Init | Philosophy | Complexity | Speed | Used by |
|------|-----------|------------|-------|---------|
| [Dinit](dinit) | Modern, dependency-based, parallel | Medium | Very fast | Antergos NeXT (default), Chimera Linux, Artix, new projects |
| [OpenRC](openrc) | Traditional, modular, shell-script-based | Low | Fast | Gentoo, Artix, Devuan, Alpine**currently broken in Antergos NeXT** |
| [Dinit](dinit) | Modern, dependency-based, parallel | Medium | Very fast | Antergos NeXT (default), Chimera Linux, Artix |
| [OpenRC](openrc) | Traditional, modular, shell-script-based | Low | Fast | Gentoo, Artix, Devuan, Alpine |
| [Runit](runit) | Minimal, supervision-based, Unix-like | Low | Very fast | Void Linux, AntiX |
| [S6](s6) | Full supervision suite, modular | Medium-High | Very fast | Artix, embedded systems |
+13 -25
View File
@@ -6,22 +6,19 @@ nav_order: 4
# Calamares Installer
Antergos NeXT uses [Calamares](https://codeberg.org/calamares/calamares) as its installer, with a custom launcher (`calamares-next`) that presents a mode picker before launching Calamares.
Antergos NeXT uses [Calamares](https://codeberg.org/calamares/calamares) as its installer, with a custom launcher (`calamares-next`) that launches Calamares directly in online mode.
## Modes
## Install mode
| Mode | Description |
|------|-------------|
| **Offline** | Unpacks a pre-built KDE Plasma squashfs — no internet needed. Fast, deterministic, single option. |
| **Online** | Netinstall with init system choice + desktop selection. Downloads packages from the internet. |
Online-only (since v2026.07.16). The so-called "Offline Install" was removed — it was never truly offline: the rootfs only contained live session essentials, and all DE packages were still downloaded via basestrap. All installs now use the full netinstall flow with desktop selection.
## Fixed issues (v2026.07.11)
## Fixed issues
### Audio on installed systems
The offline install works because `pipewire.desktop` is baked into the root squashfs via `root-overlay`. But in online mode, packages are installed fresh — and the upstream `artix-pipewire-launcher` doesn't support dinit. The XDG autostart entry was also missing.
The upstream `artix-pipewire-launcher` doesn't support dinit. The XDG autostart entry was also missing from the upstream package.
**Fix**: The `pipewire` package in `[antergos-pkgs]` now includes `pipewire.desktop` installed to `/etc/xdg/autostart/`, and the `artix-pipewire-launcher` script is patched to recognize dinit (`dinit|runit|s6) SUPPORT='YES'`). This way both offline and online installs get working audio.
**Fix**: The `pipewire` package in `[antergos-pkgs]` now includes `pipewire.desktop` installed to `/etc/xdg/autostart/`, and the `artix-pipewire-launcher` script is patched to recognize dinit (`dinit|runit|s6) SUPPORT='YES'`).
### SDDM theme showing Breeze
@@ -38,19 +35,13 @@ The `filesystem` package from Artix owns `/usr/lib/os-release`. Our `antergos-re
## Key differences from upstream Calamares
- `dracut`/`dracutlukscfg` replaced with `initcpiocfg`/`initcpio`/`luksopenswaphookcfg` (Artix uses mkinitcpio, not dracut)
- `services-openrc` module instead of `services-systemd` (supports all four inits via init-specific variants)
- `services-artix` module instead of `services-systemd` (uses `artix-service` which detects init and runs the right commands)
- `removeuser` step removed, `postcfg` added
- `packagechooser` module compiled in (upstream Calamares skips it by default)
## Init system selector (online)
## Init system
Users choose from: **Dinit**, **OpenRC**, **Runit**, **S6**.
> **Note:** OpenRC is currently broken in Antergos NeXT — services don't enable correctly on installed systems. Choose Dinit (default), Runit, or S6 instead.
Implemented as a `packagechooser` instance with `method: netinstall-add`. The selected init pulls its associated packages (e.g. `elogind-dinit`, `connman-dinit`, `sddm-dinit`). The init packages are defined in `netinstall.yaml` as separate groups.
Dinit is preselected by default.
Antergos NeXT ships **Dinit** only. Other init systems (OpenRC, Runit, S6) are available in the Artix repos but are not offered as install-time options. See [Changing init on an installed system](changing-init) for instructions if you need a different init.
## Desktop selector (online)
@@ -77,10 +68,6 @@ Implemented as a separate `packagechooser` instance with `method: legacy`. "No D
- **Budgie** — not in any Artix repo (system, world, galaxy, lib32). Slideshow entries removed.
- **GNOME** — dropped non-systemd support upstream. "You really think you can get GNOME here?"
## Offline mode
No packagechooser. Uses `unpackfs` to deploy a pre-built KDE Plasma squashfs, then `initcpiocfg` + `initcpio` for mkinitcpio configuration.
## Branding
Custom branding lives in the `calamares-branding-antergos-next` package, installed to `/etc/calamares/branding/default/`. The `componentName` in `branding.desc` must match its directory name — this is enforced by Calamares (see `Branding.cpp`).
@@ -89,8 +76,9 @@ Custom branding lives in the `calamares-branding-antergos-next` package, install
The `calamares-next` script (`/usr/bin/calamares-next`) handles the installer boot flow:
1. **Mode picker**`kdialog`/`zenity` dialog asking Offline or Online install
2. **Configuration** — copies the appropriate `settings.conf` (offline or online) to `/etc/calamares/settings.conf`
3. **Launch**runs `calamares` with the selected config
1. **Notice** — explains why the offline mode was removed
2. **Welcome** — branded splash with Install button
3. **Configuration**copies `calamares-online/settings.conf` to `/etc/calamares/settings.conf`
4. **Launch** — runs `calamares` with the online config
Launched via the desktop entry in the live session: `Exec=sudo -E calamares-next`.
+10 -23
View File
@@ -10,9 +10,10 @@ The `calamares-next` script (`calamares-next.sh`) handles the installer boot flo
## Boot flow
1. **Mode picker**`kdialog` or `zenity` dialog asking Offline or Online install
2. **Configuration** — copies the appropriate `settings.conf` (offline or online) to `/etc/calamares/settings.conf`
3. **Launch**runs `calamares` with the selected config
1. **Notice** — explains why the so-called "Offline Install" was removed (it wasn't actually offline)
2. **Welcome** — branded splash screen with an "Install" button
3. **Configuration**copies `calamares-online/settings.conf` to `/etc/calamares/settings.conf`
4. **Launch** — runs `calamares` with the online config
## Desktop entry
@@ -24,19 +25,16 @@ Exec=sudo -E calamares-next
`sudo -E` preserves environment variables (`WAYLAND_DISPLAY`, `XDG_CURRENT_DESKTOP`, etc.) when launched from the SDDM session. Without it, Calamares may not detect the display server correctly.
## Mode picker
## Installer flow
A simple dialog with two options:
- **Offline** — no internet required, installs KDE Plasma from a pre-built squashfs. Fast and deterministic.
- **Online** — internet required, shows an init system selector (Dinit/OpenRC/Runit/S6) and a desktop selector. Downloads packages from the repos.
The launcher shows a YAD info notice explaining the removal of the offline mode, then presents a branded splash with a single "Install" button. Calamares launches in online mode with the DE selector.
## Config switching
`SetConfig()` in `calamares-next.sh`:
1. `rm -f` the existing symlink at `/etc/calamares/settings.conf` (must remove first — `cp` follows symlinks and would overwrite the wrong file)
2. `cp` the selected settings file (offline or online) to `/etc/calamares/settings.conf`
1. `rm -f` the existing settings file at `/etc/calamares/settings.conf`
2. `cp` the online settings file to `/etc/calamares/settings.conf`
3. Calamares reads the config on launch
## Hiding "Install Artix"
@@ -45,19 +43,8 @@ The live-overlay includes `calamares-config-switcher.desktop` with `NoDisplay=tr
## Module configs
### Online modules
Configs live in `live-overlay/etc/calamares-online/modules/`:
- `packagechooser_init.conf`init system selector using `method: netinstall-add`
- `packagechooser_desktop.conf` — DE selector using `method: legacy`
- `packagechooser_dm.conf`display manager selector using `method: netinstall-select`
- `initcpiocfg.conf` — mkinitcpio configuration
- `services-openrc.conf` — service enablement (works across all inits via init-specific wrappers)
### Offline modules
Configs live in `live-overlay/etc/calamares-offline/modules/`:
- `unpackfs.conf` — unpack the pre-built squashfs
- `initcpiocfg.conf` — mkinitcpio configuration
- `services-openrc.conf` — service enablement
- `services-artix.conf` — service enablement via `artix-service`
+1 -1
View File
@@ -9,7 +9,7 @@ nav_order: 1
**OpenRC** is a traditional init system used by Gentoo, Artix Linux, Devuan, Alpine Linux, and other non-systemd distros. It's proven, well-maintained, and about as simple as an init system can get while still being feature-rich.
> **⚠️ OpenRC is currently broken in Antergos NeXT.** The online installer presents it as an option, but services don't enable correctly on installed systems. Until this is fixed, choose **Dinit** (the default), **Runit**, or **S6** instead.
> **Note:** Earlier Antergos NeXT builds shipped OpenRC as an install-time option but it had issues with service enabling on installed systems. If you want to use OpenRC on Antergos NeXT, see [Changing init](changing-init) for manual setup instructions.
## systemd vs OpenRC at a glance
+6 -17
View File
@@ -15,18 +15,11 @@ Files in `iso-profiles/antergos/live-overlay/` exist only in the live environmen
live-overlay/
├── etc/
│ ├── calamares/
│ │ └── settings.conf # Symlink → online or offline config
│ ├── calamares-offline/
│ │ ├── settings.conf # Offline install config (unpackfs)
│ │ └── modules/
│ │ ├── unpackfs.conf
│ │ ├── initcpiocfg.conf
│ │ └── ...
│ │ └── settings.conf # Replaced at runtime by online config
│ ├── calamares-online/
│ │ ├── settings.conf # Online install config (packagechooser)
│ │ └── modules/
│ │ ├── packagechooser_init.conf # Init system selector
│ │ ├── packagechooser_desktop.conf # DE selector
│ │ ├── packagechooser_dm.conf # Display manager selector
│ │ ├── initcpiocfg.conf
│ │ └── ...
│ └── sddm.conf.d/
@@ -42,19 +35,15 @@ live-overlay/
### `etc/calamares/settings.conf`
Symlink — points to either `../calamares-offline/settings.conf` or `../calamares-online/settings.conf`, set by `calamares-next.sh` after the user selects a mode.
Placeholder — replaced at runtime by `calamares-next.sh` which copies the online settings file.
### `etc/calamares-online/settings.conf`
Two `packagechooser` instances:
- `packagechooser@init` — init system (Dinit, OpenRC, Runit, S6) via netinstall-add
- `packagechooser@desktop` — DE selection via legacy method
One `packagechooser` instance for DM selection (`packagechooser@dm`) using `netinstall-select`.
The init selector uses `netinstall-add` method, meaning the selected init group's packages are added to the install set. The DE selector uses `legacy` method, returning the selected DE as a global storage value.
### Offline config (archived)
### `etc/calamares-offline/settings.conf`
No packagechooser. Uses `unpackfs` to deploy a pre-built KDE Plasma squashfs, then `initcpiocfg` + `initcpio` for mkinitcpio configuration.
The offline install mode was removed in v2026.07.16 — it was never truly offline (all DE packages were still downloaded via basestrap). The configs are preserved at `iso-profiles/antergos/calamares-offline/` for reference.
### `etc/calamares/modules/basestrap.conf`
+1 -1
View File
@@ -39,7 +39,7 @@ Server = https://antergos-next.github.io/antergos-packages
### calamares-branding-antergos-next
- Ships `calamares-next.sh` — the launcher script that presents the mode picker and manages config switching
- `packagechooser.conf` provides a DE-only fallback for standalone use
- `packagechooser.conf` provides a DM-only fallback for standalone use
- `SetConfig()` must `rm -f` the symlink at `/etc/calamares/settings.conf` before copying, otherwise `cp` follows the symlink and overwrites the wrong file
### pipewire (forked)
+1 -1
View File
@@ -1,7 +1,7 @@
---
title: Wallpapers
layout: default
nav_order: 9
nav_order: 12
---
# Wallpapers
@@ -8,3 +8,4 @@ Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
@@ -8,3 +8,4 @@ Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
@@ -25,6 +25,7 @@ rootfs:
- antergos-release
- antergos-lsb-release
- calamares
- python-toml
- calamares-branding-antergos-next-minimal
- antergos-next-keyring
- antergos-wallpapers
@@ -1,21 +0,0 @@
---
efiBootLoader: "grub"
kernel: "/vmlinuz-linux-x86_64"
img: "/initramfs-linux-x86_64.img"
fallback: "/initramfs-linux-x86_64-fallback.img"
timeout: "10"
grubInstall: "grub-install"
grubMkconfig: "grub-mkconfig"
grubCfg: "/boot/grub/grub.cfg"
grubProbe: "grub-probe"
efiBootMgr: "efibootmgr"
installEFIFallback: true
efiBootloaderId: "Antergos"
# installHybridGRUB: false
# efiBootLoaderVar: "packagechooser_bootloader"
@@ -1,10 +0,0 @@
---
displaymanagers:
- lightdm
- gdm
- mdm
- sddm
- lxdm
- slim
basicSetup: false
@@ -1,6 +0,0 @@
---
restartNowMode: user-unchecked
restartNowCommand: "loginctl reboot"
notifyOnFinished: false
@@ -1,51 +0,0 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Create, overwrite or update /etc/default/grub in the target system.
#
# Write lines to /etc/default/grub (in the target system) based
# on calculated values and the values set in the *defaults* key
# in this configuration file.
#
# Calculated values are:
# - GRUB_DISTRIBUTOR, branding module, *bootloaderEntryName* (this
# string is sanitized, and see also setting *keep_distributor*)
# - GRUB_ENABLE_CRYPTODISK, based on the presence of filesystems
# that use LUKS
# - GRUB_CMDLINE_LINUX_DEFAULT, adding LUKS setup and plymouth
# support to the kernel.
---
# If set to true, always creates /etc/default/grub from scratch even if the file
# already existed. If set to false, edits the existing file instead.
overwrite: false
# If set to true, prefer to write files in /etc/default/grub.d/
# rather than the single file /etc/default/grub. If this is set,
# Calamares will write /etc/default/grub.d/00Calamares instead.
prefer_grub_d: false
# If set to true, an **existing** setting for GRUB_DISTRIBUTOR is
# kept, not updated to the *bootloaderEntryName* from the branding file.
# Use this if the GRUB_DISTRIBUTOR setting in the file is "smart" in
# some way (e.g. uses shell-command substitution).
keep_distributor: false
# The default kernel params that should always be applied.
# This is an array of strings. If it is unset, the default is
# `["quiet"]`. To avoid the default, explicitly set this key
# to an empty list, `[]`.
kernel_params: [ "quiet" ]
# Default entries to write to /etc/default/grub if it does not exist yet or if
# we are overwriting it.
#
defaults:
GRUB_TIMEOUT: 5
GRUB_DEFAULT: "saved"
GRUB_DISABLE_SUBMENU: true
GRUB_TERMINAL_OUTPUT: "console"
GRUB_DISABLE_RECOVERY: true
# Set to true to force defaults to be used even when not overwriting
always_use_defaults: false
@@ -1,4 +0,0 @@
---
kernel: all
be_unsafe: false
@@ -1,7 +0,0 @@
---
localeGenPath: /etc/locale.gen
geoip:
style: "json"
url: "https://geoip.kde.org/v1/calamares"
selector: ""
@@ -1,5 +0,0 @@
---
systemd: false
dbus: false
dbus-symlink: false
entropy-copy: false
@@ -1,131 +0,0 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Mount filesystems in the target (generally, before treating the
# target as a usable chroot / "live" system). Filesystems are
# automatically mounted from the partitioning module. Filesystems
# listed here are **extra**. The filesystems listed in *extraMounts*
# are mounted in all target systems.
---
# Extra filesystems to mount. The key's value is a list of entries; each
# entry has five keys:
# - device The device node to mount
# - fs (optional) The filesystem type to use
# - mountPoint Where to mount the filesystem
# - options (optional) An array of options to pass to mount
# - efi (optional) A boolean that when true is only mounted for UEFI installs
#
# The device is not mounted if the mountPoint is unset or if the fs is
# set to unformatted.
#
extraMounts:
- device: proc
fs: proc
mountPoint: /proc
- device: sys
fs: sysfs
mountPoint: /sys
- device: /dev
mountPoint: /dev
options: [ bind ]
- device: tmpfs
fs: tmpfs
mountPoint: /run
- device: /run/udev
mountPoint: /run/udev
options: [ bind ]
- device: efivarfs
fs: efivarfs
mountPoint: /sys/firmware/efi/efivars
efi: true
# Btrfs subvolumes to create if root filesystem is on btrfs volume.
# If *mountpoint* is mounted already to another partition, it is ignored.
# Separate subvolume for swapfile is handled separately and automatically.
#
# It is possible to prevent subvolume creation -- this is likely only relevant
# for the root (/) subvolume -- by giving an empty string as a subvolume
# name. In this case no subvolume will be created.
#
btrfsSubvolumes:
- mountPoint: /
subvolume: /@
# As an alternative:
#
# subvolume: ""
- mountPoint: /home
subvolume: /@home
- mountPoint: /root
subvolume: /@root
- mountPoint: /srv
subvolume: /@srv
- mountPoint: /var/cache
subvolume: /@cache
- mountPoint: /var/log
subvolume: /@log
- mountPoint: /var/tmp
subvolume: /@tmp
# The name of the btrfs subvolume holding the swapfile. This only used when
# a swapfile is selected and the root filesystem is btrfs
#
btrfsSwapSubvol: /@swap
# The mount options used to mount each filesystem.
#
# filesystem contains the name of the filesystem or on of three special
# values, "default", efi" and "btrfs_swap". The logic is applied in this manner:
# - If the partition is the EFI partition, the "efi" entry will be used
# - If the fs is btrfs and the subvolume is for the swapfile,
# the "btrfs_swap" entry is used
# - If the filesystem is an exact match for filesystem, that entry is used
# - If no match is found in the above, the default entry is used
# - If there is no match and no default entry, "defaults" is used
# - If the mountOptions key is not present, "defaults" is used
#
# Each filesystem entry contains 3 keys, all of which are optional
# options - An array of mount options that is used on all disk types
# ssdOptions - An array of mount options combined with options for ssds
# hddOptions - An array of mount options combined with options for hdds
# If combining these options results in an empty array, "defaults" is used
#
# Example 1
# In this example, there are specific options for ext4 and btrfs filesystems,
# the EFI partition and the subvolume holding the btrfs swapfile. All other
# filesystems use the default entry. For the btrfs filesystem, there are
# additional options specific to hdds and ssds
#
mountOptions:
- filesystem: default
options: [ defaults ]
- filesystem: efi
options: [ defaults, umask=0077 ]
- filesystem: ext4
options: [ defaults ]
- filesystem: btrfs
options: [ defaults, noatime, compress=zstd:1 ]
ssdOptions: [ discard=async ]
hddOptions: [ autodefrag ]
- filesystem: btrfs_swap
options: [ defaults, noatime ]
#
# Example 2
# In this example there is a single default used by all filesystems
#
# mountOptions:
# - filesystem: default
# options: [ defaults ]
#
# mountOptions:
# - filesystem: default
# options: [ defaults ]
# - filesystem: efi
# options: [ defaults, umask=0077 ]
# - filesystem: btrfs
# options: [ defaults, compress=zstd:1 ]
# - filesystem: btrfs_swap
# options: [ defaults, noatime ]
@@ -1,32 +0,0 @@
efi:
mountPoint: "/boot/efi"
recommendedSize: 512MiB
minimumSize: 256MiB
label: "EFI"
userSwapChoices:
- none # Create no swap, use no swap
- small # Up to 4GB
- suspend # At least main memory size
- file # To swap file instead of partition
swapPartitionName: swap
luksGeneration: luks1
drawNestedPartitions: true
alwaysShowPartitionLabels: true
initialPartitioningChoice: none
initialSwapChoice: suspend
defaultPartitionTableType: msdos
requiredPartitionTableType:
- msdos
- gpt
defaultFileSystemType: "ext4"
availableFileSystemTypes: ["ext4","btrfs","f2fs","xfs"]
@@ -1,13 +0,0 @@
---
# set at iso build time
initsys: none
user-services:
- name: dbus
action: enable
- name: pipewire
action: enable
- name: pipewire-pulse
action: enable
- name: wireplumber
action: enable
@@ -1,24 +0,0 @@
---
command: artix-service
services:
- name: "acpid"
action: "enable"
- name: "bluetoothd"
action: "enable"
- name: "cronie"
action: "enable"
- name: "cupsd"
action: "enable"
- name: "dbus"
action: "enable"
- name: "dhcpcd"
action: "enable"
- name: "NetworkManager"
action: "enable"
- name: "power-profiles-daemon"
action: "enable"
- name: "sddm"
action: "enable"
- name: "syslog-ng"
action: "enable"
@@ -1,2 +0,0 @@
---
emergency: false
@@ -1,5 +0,0 @@
---
unpack:
- source: "/run/artix/bootmnt/LiveOS/rootfs.img"
sourcefs: 'squashfs'
destination: ""
@@ -1,49 +0,0 @@
---
defaultGroups:
- name: users
must_exist: true
system: true
- lp
- video
- network
- storage
- name: wheel
must_exist: false
system: true
- audio
- power
- log
- optical
- network
- scanner
autologinGroup: autologin
doAutologin: false
sudoersGroup: wheel
setRootPassword: true
doReusePassword: false
passwordRequirements:
nonempty: true
minLength: 4 # Password at least this many characters
maxLength: -1 # Password at most this many characters
libpwquality:
- minlen=4
- minclass=0
allowWeakPasswords: true
allowWeakPasswordsDefault: true
userShell: /bin/bash
setHostname: EtcFile
writeHostsFile: true
user:
shell: /bin/bash
forbidden_names: [ root ]
@@ -1,19 +0,0 @@
---
showSupportUrl: true
showKnownIssuesUrl: true
showReleaseNotesUrl: true
requirements:
requiredStorage: 5.5
requiredRam: 1.0
internetCheckUrl: https://www.artixlinux.org
check:
- storage
- ram
- power
- internet
- root
required:
- storage
- ram
- root
@@ -1,51 +0,0 @@
---
modules-search: [ local ]
sequence:
- show:
- welcome
- locale
- keyboard
- partition
- users
- summary
- exec:
- partition
- mount
- unpackfs
- machineid
- fstab
- locale
- keyboard
- localecfg
- luksopenswaphookcfg
- luksbootkeyfile
- initcpiocfg
- initcpio
- users
- displaymanager
- networkcfg
- hwclock
- services-artix
- grubcfg
- bootloader
- postcfg
- umount
- show:
- finished
branding: antergos-next
prompt-install: false
dont-chroot: false
oem-setup: false
disable-cancel: false
disable-cancel-during-exec: false
hide-back-and-next-during-exec: false
quit-at-end: false
@@ -144,3 +144,60 @@
selected: false
packages:
- cosmic
- name: "Init Services"
description: "Essential dinit services"
selected: true
critical: true
immutable: true
packages:
- dinit
- dbus-dinit
- networkmanager-dinit
- elogind-dinit
- cups-dinit
- avahi-dinit
- bluez-dinit
- cronie-dinit
- openssh-dinit
- alsa-utils-dinit
- acpid-dinit
- dhcpcd-dinit
- syslog-ng-dinit
- power-profiles-daemon-dinit
- name: "SDDM"
description: "SDDM display manager"
selected: false
packages:
- sddm
- sddm-dinit
- antergos-sddm-theme
- name: "LightDM"
description: "LightDM display manager"
selected: false
packages:
- lightdm
- lightdm-dinit
- name: "LXDM"
description: "LXDM display manager"
selected: false
packages:
- lxdm
- lxdm-dinit
- name: "greetd"
description: "greetd display manager"
selected: false
packages:
- greetd
- greetd-dinit
- name: "LY"
description: "LY display manager"
selected: false
packages:
- ly
- ly-dinit
@@ -1,294 +0,0 @@
---
mode: required
method: netinstall-add
labels:
step: "Init selection"
step[de]: "Initauswahl"
default: Dinit
items:
- id: Dinit
name: dinit
description: "Dinit init system"
screenshot: ""
netinstall:
name: "dinit"
description: "Dinit init system"
selected: true
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-dinit
- cryptsetup-dinit
- dbus-dinit
- dhcpcd-dinit
- lvm2-dinit
- mdadm-dinit
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-dinit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-dinit
- metalog-dinit
- name: "Internet"
description: "Network init"
packages:
- avahi-dinit
- bluez-dinit
- iptables-dinit
- krb5-dinit
- networkmanager-dinit
- nfs-utils-dinit
- ntp-dinit
- openldap-dinit
- openssh-dinit
- rpcbind-dinit
- xinetd-dinit
- wpa_supplicant-dinit
- name: "Office"
description: "Office init"
packages:
- cups-dinit
- sane-dinit
- name: "Services"
description: "Services init"
packages:
- acpid-dinit
- alsa-utils-dinit
- apparmor-dinit
- brltty-dinit
- fuse-dinit
- gpm-dinit
- hdparm-dinit
- haveged-dinit
- lm_sensors-dinit
- openvpn-dinit
- power-profiles-daemon-dinit
- rsync-dinit
- id: OpenRC
name: openrc
description: "⚠ OpenRC init system — BROKEN in Antergos NeXT (init-rc conflict with dinit). Will be re-added once fixed."
screenshot: ""
netinstall:
name: "openrc"
description: "OpenRC init system"
selected: false
critical: false
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-openrc
- cryptsetup-openrc
- dbus-openrc
- dhcpcd-openrc
- lvm2-openrc
- mdadm-openrc
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-openrc
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-openrc
- metalog-openrc
- name: "Internet"
description: "Network init"
packages:
- avahi-openrc
- bluez-openrc
- iptables-openrc
- krb5-openrc
- networkmanager-openrc
- nfs-utils-openrc
- ntp-openrc
- openldap-openrc
- openssh-openrc
- rpcbind-openrc
- xinetd-openrc
- wpa_supplicant-openrc
- name: "Office"
description: "Office init"
packages:
- cups-openrc
- sane-openrc
- name: "Services"
description: "Services init"
packages:
- acpid-openrc
- alsa-utils-openrc
- apparmor-openrc
- brltty-openrc
- fuse-openrc
- gpm-openrc
- hdparm-openrc
- haveged-openrc
- lm_sensors-openrc
- openrc-settingsd
- openvpn-openrc
- power-profiles-daemon-openrc
- rsync-openrc
- id: S6
name: s6
description: "S6 init system"
screenshot: ""
netinstall:
name: "s6"
description: "S6 init system"
selected: false
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-s6
- cryptsetup-s6
- dbus-s6
- dhcpcd-s6
- lvm2-s6
- mdadm-s6
- s6-contrib
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-s6
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-s6
- metalog-s6
- name: "Internet"
description: "Network init"
packages:
- avahi-s6
- bluez-s6
- iptables-s6
- krb5-s6
- networkmanager-s6
- nfs-utils-s6
- ntp-s6
- openldap-s6
- openssh-s6
- rpcbind-s6
- xinetd-s6
- wpa_supplicant-s6
- name: "Office"
description: "Office init"
packages:
- cups-s6
- sane-s6
- name: "Services"
description: "Services init"
packages:
- acpid-s6
- alsa-utils-s6
- apparmor-s6
- brltty-s6
- fuse-s6
- gpm-s6
- hdparm-s6
- haveged-s6
- lm_sensors-s6
- openvpn-s6
- power-profiles-daemon-s6
- rsync-s6
- id: Runit
name: runit
description: "Runit init system"
screenshot: ""
netinstall:
name: "runit"
description: "Runit init system"
selected: false
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-runit
- cryptsetup-runit
- dbus-runit
- dhcpcd-runit
- lvm2-runit
- mdadm-runit
- rsm
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-runit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-runit
- metalog-runit
- name: "Internet"
description: "Network init"
packages:
- avahi-runit
- bluez-runit
- iptables-runit
- krb5-runit
- networkmanager-runit
- nfs-utils-runit
- ntp-runit
- openldap-runit
- openssh-runit
- rpcbind-runit
- xinetd-runit
- wpa_supplicant-runit
- name: "Office"
description: "Office init"
packages:
- cups-runit
- sane-runit
- name: "Services"
description: "Services init"
packages:
- acpid-runit
- alsa-utils-runit
- apparmor-runit
- brltty-runit
- fuse-runit
- gpm-runit
- hdparm-runit
- haveged-runit
- lm_sensors-runit
- openvpn-runit
- power-profiles-daemon-runit
- rsync-runit
@@ -0,0 +1,36 @@
---
mode: required
method: netinstall-select
labels:
step: "Display Manager"
step[de]: "Display Manager"
default: SDDM
items:
- id: SDDM
name: SDDM
description: "QML-based display manager (KDE default)"
screenshot: ""
- id: LightDM
name: LightDM
description: "Cross-desktop display manager (GTK)"
screenshot: ""
- id: LXDM
name: LXDM
description: "Lightweight display manager (LXDE)"
screenshot: ""
- id: LY
name: LY
description: "Minimal TUI display manager"
screenshot: ""
- id: greetd
name: greetd
description: "Minimal display manager (recommended for COSMIC)"
screenshot: ""
@@ -20,5 +20,7 @@ services:
action: "enable"
- name: "sddm"
action: "enable"
- name: "greetd"
action: "enable"
- name: "syslog-ng"
action: "enable"
@@ -6,7 +6,6 @@ sequence:
- welcome
- locale
- keyboard
- packagechooser
- packagechooser@dm
- netinstall
- partition
@@ -55,6 +55,27 @@
- intel-ucode
- amd-ucode
- name: "Init Services"
description: "Essential dinit services"
selected: true
critical: true
immutable: true
packages:
- dinit
- dbus-dinit
- networkmanager-dinit
- elogind-dinit
- cups-dinit
- avahi-dinit
- bluez-dinit
- cronie-dinit
- openssh-dinit
- alsa-utils-dinit
- acpid-dinit
- dhcpcd-dinit
- syslog-ng-dinit
- power-profiles-daemon-dinit
- name: "Utilities"
description: "System Utilities"
selected: true
@@ -79,7 +100,7 @@
subgroups:
- name: "Plasma"
description: "KDE Plasma Desktop"
selected: true
selected: false
packages:
- antergos-plasma-theme
- antergos-next-desktop-settings
@@ -249,6 +270,11 @@
packages:
- hyprland
- xdg-desktop-portal-hyprland
- name: "COSMIC"
description: "COSMIC Desktop (Rust/Wayland — select greetd as DM)"
selected: false
packages:
- cosmic
- name: "SDDM"
description: "SDDM display manager"
@@ -25,12 +25,12 @@ items:
description: "Lightweight display manager (LXDE)"
screenshot: ""
- id: LY
name: ly
description: "Minimal TUI display manager"
screenshot: ""
- id: greetd
name: greetd
description: "Minimal display manager (recommended for COSMIC)"
screenshot: ""
- id: LY
name: ly
description: "Minimal TUI display manager"
screenshot: ""
@@ -20,6 +20,8 @@ services:
action: "enable"
- name: "sddm"
action: "enable"
- name: "greetd"
action: "enable"
- name: "syslog-ng"
action: "enable"
- name: "userspawn"
@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Name=Install Antergos NeXT (Offline — NO DE)
Name[en]=Install Antergos NeXT (Offline — NO DE)
Comment=Bare minimum install from the live ISO. No desktop environment included. Internet recommended after boot.
Exec=sudo -E antergos-offline-install
Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
@@ -8,3 +8,4 @@ Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
@@ -0,0 +1,239 @@
#!/bin/bash
# Antergos NeXT Offline Installer
# Stolen with love from Valve's SteamOS repair_device.sh
# "If it works for a Steam Deck, it works for you." -- some drunk developer
set -eu
SQUASHFS="/run/artix/bootmnt/LiveOS/rootfs.img"
# ── Stolen from SteamOS: pretty output ──
sh_c() { [[ $_sh_c_colors -le 0 ]] || echo -ne "\e[${*:-0}m"; }
_sh_c_colors=0
[[ -n $TERM && -t 1 && ${TERM,,} != dumb ]] && _sh_c_colors=$(tput colors 2>/dev/null || echo 0)
estat() { echo -e "$(sh_c 32 1)::$(sh_c) $*"; }
einfo() { echo -e "$(sh_c 34 1)::$(sh_c) $*"; }
ewarn() { echo -e "$(sh_c 33 1);;$(sh_c) $*"; }
eerr() { echo -e "$(sh_c 31 1)!!$(sh_c) $*" >&2; }
die() { eerr "${1:-script terminated}"; exit 1; }
cmd() { echo -e "$(sh_c 30 1)+$(sh_c) $*"; "$@"; }
# ── Stolen from SteamOS: read heredoc into var ──
readvar() { IFS= read -r -d '' "$1" || true; }
# ── Stolen from SteamOS: partition helpers ──
diskpart() { echo "${DISK}${DISK_SUFFIX}$1"; }
# ── Stolen from SteamOS: zenity prompts ──
prompt_confirm() {
zenity --title "$1" --question --ok-label "Proceed" --cancel-label "Cancel" --no-wrap --text "$2" 2>/dev/null
}
prompt_msg() {
zenity --title "$1" --info --no-wrap --text "$2" 2>/dev/null
}
# ── Pre-flight ──
[[ $EUID -eq 0 ]] || die "Must be run as root"
if [[ ! -f "$SQUASHFS" ]]; then
die "Cannot find rootfs squashfs at $SQUASHFS. Are you booted from an Antergos NeXT ISO?"
fi
# ── WARNING: NO DE ──
prompt_msg "Antergos NeXT Offline Installer" \
"This will install a BARE MINIMUM system — no desktop environment, no apps, just the base system + Calamares.
After boot, connect to the internet and run:
sudo pacman -Sy plasma-meta
(or xfce4, or whatever DE you want)
This is for people who want a minimal base to build on, or who are trapped in a cave with no internet.
This WILL DESTROY ALL DATA on the target disk."
prompt_confirm "Select target disk" \
"This will list available disks. Choose carefully — ALL DATA WILL BE DESTROYED." || die "Aborted by user"
# ── Select disk ──
DISK=$(lsblk -dno NAME,SIZE,MODEL,TYPE | grep disk | \
zenity --list --title "Select target disk" \
--column "Device" --column "Size" --column "Model" \
--print-column=1 --width=500 --height=300 2>/dev/null | tail -1)
[[ -n "$DISK" ]] || die "No disk selected"
DISK="/dev/$DISK"
[[ -b "$DISK" ]] || die "$DISK is not a block device"
# Determine partition suffix (p for NVMe/mmcblk, nothing for sdX)
if [[ "$DISK" =~ /dev/nvme || "$DISK" =~ /dev/mmcblk ]]; then
DISK_SUFFIX="p"
else
DISK_SUFFIX=""
fi
prompt_confirm "DESTROY $DISK?" \
"Target: $DISK
All partitions will be wiped. This cannot be undone.
Type YES below to confirm." || die "Aborted by user"
# ── Partition ──
estat "Partitioning $DISK..."
cmd sfdisk --delete "$DISK" 2>/dev/null || true
readvar PARTITION_TABLE << END_PTABLE
label: gpt
$(diskpart 1): size=512MiB, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B
$(diskpart 2): size=300MiB, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
$(diskpart 3): type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
END_PTABLE
echo "$PARTITION_TABLE" | cmd sfdisk "$DISK"
PART_ESP=$(diskpart 1)
PART_SWAP=$(diskpart 2)
PART_ROOT=$(diskpart 3)
# ── Format ──
estat "Formatting partitions..."
cmd mkfs.fat -F32 -n ESP "$PART_ESP"
cmd mkswap -L swap "$PART_SWAP"
cmd mkfs.btrfs -f -L antergos "$PART_ROOT"
# ── Create btrfs subvolumes ──
estat "Creating btrfs subvolumes..."
cmd mkdir -p /mnt/btrfs
cmd mount "$PART_ROOT" /mnt/btrfs
cmd btrfs subvolume create /mnt/btrfs/@
cmd btrfs subvolume create /mnt/btrfs/@home
cmd btrfs subvolume create /mnt/btrfs/@cache
cmd btrfs subvolume create /mnt/btrfs/@log
cmd btrfs subvolume create /mnt/btrfs/@snapshots
cmd umount /mnt/btrfs
# ── Mount subvolumes ──
estat "Mounting subvolumes..."
TARGET=/mnt/target
cmd mkdir -p "$TARGET"
cmd mount -o subvol=@ "$PART_ROOT" "$TARGET"
cmd mkdir -p "$TARGET/{home,var/cache,var/log,.snapshots,boot}"
cmd mount -o subvol=@home "$PART_ROOT" "$TARGET/home"
cmd mount -o subvol=@cache "$PART_ROOT" "$TARGET/var/cache"
cmd mount -o subvol=@log "$PART_ROOT" "$TARGET/var/log"
cmd mount -o subvol=@snapshots "$PART_ROOT" "$TARGET/.snapshots"
cmd mount "$PART_ESP" "$TARGET/boot"
# ── Extract squashfs ──
estat "Extracting rootfs to $TARGET... (this will take a while)"
cmd unsquashfs -f -d "$TARGET" "$SQUASHFS"
# ── Generate fstab ──
estat "Generating fstab with btrfs subvolumes..."
ROOT_UUID=$(blkid -o value -s UUID "$PART_ROOT")
SWAP_UUID=$(blkid -o value -s UUID "$PART_SWAP")
ESP_UUID=$(blkid -o value -s UUID "$PART_ESP")
cat > "$TARGET/etc/fstab" << FSTAB
# /etc/fstab generated by Antergos NeXT Offline Installer
# Stolen from SteamOS, adapted for your sins — now with btrfs snapshots
UUID=$ROOT_UUID / btrfs subvol=@,defaults,noatime,compress=zstd 0 1
UUID=$ROOT_UUID /home btrfs subvol=@home,defaults,noatime,compress=zstd 0 0
UUID=$ROOT_UUID /var/cache btrfs subvol=@cache,defaults,noatime,compress=zstd 0 0
UUID=$ROOT_UUID /var/log btrfs subvol=@log,defaults,noatime,compress=zstd 0 0
UUID=$ROOT_UUID /.snapshots btrfs subvol=@snapshots,defaults,noatime 0 0
UUID=$SWAP_UUID none swap sw 0 0
UUID=$ESP_UUID /boot vfat defaults,noatime 0 2
FSTAB
# ── Chroot setup ──
estat "Setting up chroot for bootloader..."
cmd mount --bind /dev "$TARGET/dev"
cmd mount --bind /proc "$TARGET/proc"
cmd mount --bind /sys "$TARGET/sys"
cmd mount --bind /run "$TARGET/run"
# Install GRUB
estat "Installing GRUB..."
cmd chroot "$TARGET" /bin/bash -c "grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Antergos"
cmd chroot "$TARGET" /bin/bash -c "grub-mkconfig -o /boot/grub/grub.cfg" 2>/dev/null || true
# Set hostname
cmd chroot "$TARGET" /bin/bash -c "echo antergos > /etc/hostname"
# Root password prompt
PASSWD=$(zenity --password --title="Set root password" --text="Enter root password for the installed system" 2>/dev/null)
if [[ -n "$PASSWD" ]]; then
echo "root:$PASSWD" | cmd chroot "$TARGET" chpasswd
fi
# Create user
USERNAME=$(zenity --entry --title="Create user" --text="Enter username for daily use:" 2>/dev/null)
if [[ -n "$USERNAME" ]]; then
cmd chroot "$TARGET" useradd -m -G wheel,audio,video,storage -s /bin/bash "$USERNAME"
UPASS=$(zenity --password --title="User password" --text="Enter password for $USERNAME:" 2>/dev/null)
[[ -n "$UPASS" ]] && echo "$USERNAME:$UPASS" | cmd chroot "$TARGET" chpasswd
cmd chroot "$TARGET" sed -i 's/^# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/' /etc/sudoers
fi
# ── Enable services via artix-service ──
estat "Enabling services..."
for sv in sddm NetworkManager dbus acpid bluetoothd cronie cupsd dhcpcd power-profiles-daemon syslog-ng userspawn; do
cmd chroot "$TARGET" artix-service enable "$sv" 2>/dev/null || true
done
# ── Configure snapper for automatic snapshots ──
estat "Setting up snapper..."
cmd chroot "$TARGET" snapper -c root create-config /
cmd chroot "$TARGET" sed -i 's/^TIMELINE_CREATE="no"/TIMELINE_CREATE="yes"/' /etc/snapper/configs/root
cmd chroot "$TARGET" sed -i 's/^TIMELINE_LIMIT_HOURLY="[0-9]*"/TIMELINE_LIMIT_HOURLY="6"/' /etc/snapper/configs/root
cmd chroot "$TARGET" sed -i 's/^TIMELINE_LIMIT_DAILY="[0-9]*"/TIMELINE_LIMIT_DAILY="7"/' /etc/snapper/configs/root
cmd chroot "$TARGET" sed -i 's/^TIMELINE_LIMIT_WEEKLY="[0-9]*"/TIMELINE_LIMIT_WEEKLY="4"/' /etc/snapper/configs/root
cmd chroot "$TARGET" sed -i 's/^TIMELINE_LIMIT_MONTHLY="[0-9]*"/TIMELINE_LIMIT_MONTHLY="0"/' /etc/snapper/configs/root
cat > "$TARGET/etc/cron.hourly/snapper-timeline" << 'CRON'
#!/bin/bash
# Automatic btrfs snapshots via snapper
/usr/bin/snapper -c root cleanup timeline
/usr/bin/snapper -c root cleanup number
CRON
cmd chroot "$TARGET" chmod +x /etc/cron.hourly/snapper-timeline
# Also run cleanup daily to be safe
cat > "$TARGET/etc/cron.daily/snapper-cleanup" << 'CRON'
#!/bin/bash
# Clean up old btrfs snapshots
/usr/bin/snapper -c root cleanup timeline
/usr/bin/snapper -c root cleanup number
CRON
cmd chroot "$TARGET" chmod +x /etc/cron.daily/snapper-cleanup
# ── Cleanup ──
estat "Cleaning up..."
for d in dev proc sys run; do
umount -l "$TARGET/$d" 2>/dev/null || true
done
for m in home var/log var/cache .snapshots boot; do
umount "$TARGET/$m" 2>/dev/null || true
done
cmd umount "$TARGET"
# ── Final warning ──
prompt_msg "Installation complete" \
"Antergos NeXT has been installed to $DISK.
Filesystem: btrfs with subvolumes (@, @home, @cache, @log, @snapshots)
Snapshots: snapper creates hourly snapshots, keeps 6 hourly + 7 daily + 4 weekly
(no monthly — those are your problem)
Remember: NO DESKTOP ENVIRONMENT was installed.
Boot up, log in as root or $USERNAME, connect to the internet, and run:
sudo pacman -Sy plasma-meta
(or whatever DE tickles your fancy)
Choose Proceed to reboot, or Cancel to stay in the live environment."
if zenity --question --title "Reboot?" --text "Reboot now?" 2>/dev/null; then
cmd reboot
fi
@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Name=Install Antergos NeXT (Offline — NO DE)
Name[en]=Install Antergos NeXT (Offline — NO DE)
Comment=Bare minimum install from the live ISO. No desktop environment included. Internet recommended after boot.
Exec=sudo -E antergos-offline-install
Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
@@ -8,3 +8,4 @@ Icon=calamares
Terminal=false
Categories=Qt;System;Settings;
StartupNotify=true
X-KDE-IsAdminApplication=true
+4
View File
@@ -26,8 +26,10 @@ rootfs:
- falkon
- vlc
- calamares
- python-toml
- calamares-branding-antergos-next
- antergos-welcome
- yay
- antergos-next-desktop-settings
- antergos-plasma-theme
- antergos-sddm-theme
@@ -41,6 +43,8 @@ rootfs:
- librdkafka
- mongo-c-driver
- net-snmp
- snapper
- btrfs-progs
packages-init:
dinit:
- pipewire-dinit