- Python 53.6%
- Shell 45.5%
- Makefile 0.6%
- SCSS 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| container-files | ||
| data/screenshots | ||
| docs | ||
| scripts | ||
| src | ||
| tests | ||
| .containerignore | ||
| .gitignore | ||
| build-and-run.sh | ||
| CHANGELOG.md | ||
| CORE.lock | ||
| DEPLOYMENT.md | ||
| LICENSE | ||
| Makefile | ||
| README.en.md | ||
| README.ru.md | ||
| VERSIONS.lock | ||
ALT Atomic Niri
An immutable ALT Atomic image with the niri tiling Wayland compositor and the Niti panel.
![]() |
![]() |
![]() |
What is ALT Atomic
ALT Atomic is an immutable operating system. The essentials:
- The system is an OCI container. The root
/is built from an image, stored in a registry, and deployed to disk via bootc + composefs. It is read-only and cryptographically verified. - Update = new image + reboot.
apm system upgradedownloads a fresh image into "staged" state; after reboot it is activated atomically. - Rollback = one command. The system keeps two states: current and previous.
bootc rollbackinstantly restores the previous one. - Your data is untouched.
/var/home(user files and configs) lives on a separate partition and survives every update and rollback.
This image adds a desktop to ALT Atomic: niri + Niti + a set of utilities (see "Includes").
A more detailed ALT Atomic handbook (in Russian): https://t.me/plafonyoutube/8073
Update channels
The image is published in three channels. The image lives in a cloud registry, and one image has several name-labels — stable, latest, long. These are not program versions like "1.2.3", but pointers to different builds that update at different rates. Choosing a channel at install time means choosing how often and how fresh the system's updates will be. You can switch channels at any time.
| Channel | Contents | Updates | For |
|---|---|---|---|
latest |
main branches of all components |
manually, once a week | developers and testers |
stable |
component release tags | manually, once a month | most users |
long |
snapshot of stable (stable-prev) |
manually, every 4 months | "set and forget" |
dev-test is built manually as needed from component dev branches. No cron is used. Release order: changes in dev → dev-test → main → component releases (from main only) → latest.
Recommendation: stable for new users, latest for developers.
Switch channel
sudo bootc switch altlinux.space/plafonlinux/atomic-niri-plafon:stable
bootc switch changes the channel — from then on all updates come from the new channel. You can switch at any time and in either direction (e.g. stable → latest → back).
Update
apm system upgrade
sudo reboot
apm system upgrade updates the system within the current channel (stable → stable, latest → latest). It never changes the channel.
Roll back
sudo bootc rollback
sudo reboot
Restores the previous state — the image you were running before the last update.
Full list of images and tags: https://altlinux.space/plafonlinux/atomic-niri-plafon/packages
Install
Via the ALT Atomic installer
-
Boot the ALT Atomic installation media.
-
Choose "Use custom image" and enter:
altlinux.space/plafonlinux/atomic-niri-plafon:stable
On an existing ALT Atomic system
sudo bootc switch altlinux.space/plafonlinux/atomic-niri-plafon:stable
sudo reboot
Switching from another ALT Atomic image: on first boot,
bootc switchautomatically copies Niri/Niti/terminal/wallpaper configs from/etc/skel/to all existing users (UID ≥ 1000) and disables the previous display manager. Rollback is fully reversible — the original image continues to work as before.
Image size (2026-08-30)
Compressed registry size (what actually gets downloaded on bootc switch/bootc upgrade):
| Image | Size | Layers |
|---|---|---|
atomic-niri-plafon:latest/:stable/:long |
2.58 GiB | 71 (rechunked) |
Base alt-atomic/core/stable:latest |
1.55 GiB | 1 |
On an already-installed system (live data from the test laptop, 464 GB SSD) — the whole /var after a few days of use is ~21 GB (including the user's /var/home and /var/lib/flatpak). Keep in mind the installer may require more free space during the install itself (before the final composefs deployment is built) than the finished system actually ends up using — if disk space is tight, don't rely on the steady-state figure above alone.
Installing software
The system is immutable, so software is installed this way:
| What | How | Why |
|---|---|---|
| GUI apps | Flatpak | doesn't touch the system image, updates separately |
| CLI / dev tools | Distrobox | isolated container with a writable environment |
| System packages | bake into the image | only by editing the recipe and rebuilding |
| Temporary package | apm system install <pkg> |
removed on the next image update |
| App from Aides (ALT's AUR) | aides-install <pkg> |
pulls a prebuilt Capsule — stplr (Aides' own client) doesn't work on an immutable root |
Includes
plafonlinux apps (installed from their own releases):
- Niti — GTK4 panel (launcher, OSD, notifications, tray, taskbar)
- Atomic Booster — system operations (update, backup, image upgrade)
- Tuner + tuner-niti-settings — graphical panel/module configuration
System packages (rpm)
Compositor and login
- niri — tiling Wayland compositor
- Seni — custom login manager (Rust daemon + Vala/GTK4/libadwaita greeter)
Terminal and shell
- Kitty (+ kitten) — terminal
- zsh + Starship (+ completions)
Monitoring and utilities
- btop, htop — resource monitoring
- fastfetch, inxi — system info
- git, distrobox, notify-send
Network and Bluetooth
- NetworkManager (+ Wi-Fi, Bluetooth), bluez, blueman
Audio and power
- PipeWire + WirePlumber, playerctl
- upower, power-profiles-daemon, brightnessctl
Wallpaper and theme
- awww, waypaper, matugen — wallpapers and Material You colors
- Papirus — icon theme; fonts Inter, Cantarell, Fira Code Nerd, Noto Emoji, etc.
Screenshots and screen recording
- grim, slurp, swappy, wf-recorder, wl-clipboard, cliphist
Files and disks
- Nautilus (+ plugins), gnome-disk-utility
Settings and system
- gnome-settings-daemon (GTK3 appearance settings), gnome-keyring
- xdg-desktop-portal (+ GTK, wlr), Dozor polkit agent
Scheduler (AMD)
- scx-scheds — sched_ext LAVD
Printing, scanning, network
- CUPS, SANE (+ airscan), Samba, gvfs, openssh-server, fwupd
Flatpak
- Loupe — image viewer
- Papers — document viewer (PDF)
- File Roller — archive manager
- Calendar — calendar
- Text Editor — text editor
- Simple Scan — scanning
- Calculator — calculator
- Disk Usage Analyzer (baobab) — disk usage
- LACT — AMD GPU control
- Piccolo — music instruments
Custom scripts, services, and what is installed outside the repo
Artifacts built from git (not from the rpm repository)
| Artifact | Repository | Module |
|---|---|---|
| Niti (panel) | plafonlinux/NitiVala |
src/resources/niti.yml |
| Atomic Booster (tuner) | plafonlinux/AtomicBoosterVala |
src/resources/atomic-booster.yml |
| tuner-niti-settings (plugin) | plafonlinux/tuner-niti-settings |
src/resources/tuner-niti.yml |
Built directly inside the image (APM type: git, dev branch for latest, main for stable); build dependencies (golang, gcc, GTK4-dev) are installed and removed automatically.
Custom scripts (src/resources/scripts/)
| Script | What it does |
|---|---|
setup-niti-config.sh |
lays out Niti (NitiVala) defaults (panel.json, colors.scss, wallpaper.json) and niti.service into /etc/skel, symlinks graphical-session.target.wants |
setup-control.sh |
xdg-user-dirs, glib-compile-schemas, Papirus icon theme, dconf update |
flatpak-setup.sh |
adds the Flathub remote, masks org.freedesktop.Platform.openh264 |
initial-setup.sh |
(INITIAL only) first user creation, ru_RU locale, wallpapers |
systemd services started by us
| Service | Type | What it does |
|---|---|---|
flatpak-setup |
system oneshot (first boot) | installs the 10 Flatpak apps |
lactd |
system (daemon) | LACT for AMD GPU |
atomic-niri-migrate |
system oneshot | config migration on bootc switch |
ensure-groups |
system oneshot | video/render/input/audio/fuse/camera/scanner groups for _greeter and local users |
niti.service |
user | starts the Niti panel |
atomic-booster |
user (global) | Atomic Booster D-Bus daemon |
Masked: packagekit. Disabled: blueman-applet (autostart overridden with Hidden=true in skel).
Outside the repository
- Base image —
altlinux.space/alt-atomic/core/stable:latest(upstream ALT Atomic). - Flathub — Flatpak apps (see the spoiler above).
- Material Symbols Outlined font (
src/resources/files/fonts/) — panel icons. - Utility scripts —
scripts/validate.sh(YAML/shell/KDL/JSON lint),build-and-run.sh(local build + install-to-disk).
Local build (for developers)
git clone https://altlinux.space/plafonlinux/atomic-niri-plafon.git
cd atomic-niri-plafon
sudo ./build-and-run.sh
Disk: /var/tmp/atomic-niri-plafon-vm/disk.raw. Use virt-manager (Spice + OpenGL, Virtio + 3D).
Login: the username and password set during install.



