Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/AnimatedGTVR/abora-os/llms.txt

Use this file to discover all available pages before exploring further.

ANIX is the human-facing management layer for Abora and NixOS. It provides shorter, safer commands for common NixOS tasks — profiles, snapshots, rebuilds, rollbacks, desktop changes, and system settings — while still calling the standard NixOS toolchain underneath. ANIX does not replace NixOS; it makes the day-to-day workflow less rough.

Mental Model

ANIX operates on three levels at once:
  • Config — it edits a small anix.nix file in /etc/nixos/ that declares your preferences declaratively.
  • Snapshots — it keeps a local Git history of /etc/nixos/ so you always have a recovery point before risky operations.
  • Rebuilds — it calls nixos-rebuild under the hood, adding a dry-build preview step and a confirmation prompt before switching.
For example, anix switch nix gaming is the safer front-end for:
sudo nixos-rebuild switch --flake /etc/nixos#gaming
ANIX adds a snapshot of any unsaved config changes, runs a dry-build preview, shows package closure diffs, and asks you to confirm before proceeding.

Quick Start

anix init         # create anix.nix with sensible defaults
anix quickstart   # init + snapshot repo setup + status overview
anix status       # show current profile, generation, and snapshot state
anix --gui        # open the graphical helper (zenity) or grouped terminal menu

Built-in Named Profiles

Abora ships with five named flake profiles you can switch between without writing any Nix yourself:
ProfilePurpose
stableStandard Abora install, follows the stable channel
minimalLightweight headless or console-only configuration
gamingAdds Steam, GameMode, and gaming-oriented packages
creatorAdds creative apps: Blender, Inkscape, Krita, OBS, and more
developerAdds developer tooling: editors, compilers, containers, and Git extras
Switch between them with anix switch nix <profile>.

Core Commands

Inspection

anix status           # profile, generation, flake, Git, and snapshot state
anix profiles         # list available flake profiles from nixosConfigurations
anix generations      # list recent NixOS system generations
anix show             # show current anix.nix settings
anix edit             # open anix.nix in $EDITOR
anix wallpapers       # list wallpapers available for anix set wallpaper
anix docs             # show local documentation paths for ANIX, TinyPM, and Abora

Profile Operations

anix diff nix gaming          # dry-build and show package closure changes
anix diff nix developer       # preview what would change before switching

Snapshots and Maintenance

anix save                     # local Git snapshot of /etc/nixos
anix save "before gaming"     # snapshot with a custom commit message
anix gc old                   # garbage collect old generations (prompts first)
anix doctor                   # run ANIX health checks
anix doctor --fix             # create missing config and snapshot basics
anix apply                    # rebuild using the current ANIX layer
anix tinypm status            # show TinyPM per-user install state
anix tinypm install           # install TinyPM for the current user

Snapshot Safety Model

ANIX takes a conservative approach to system changes:
1

Snapshot unsaved config

Before any switch, test, boot, or rollback operation, ANIX checks for unsaved changes in /etc/nixos/. If changes exist, it offers to create a local Git snapshot first.
2

Dry-build preview

When you run anix switch nix <profile> without --now, ANIX runs a nixos-rebuild dry-build first. This catches syntax errors and evaluates the full package closure before anything is activated.
3

Closure diff

After the dry-build, ANIX compares the new and current package closures with nix store diff-closures, so you can see exactly what will be added or removed.
4

Confirm and switch

Only after the preview is shown does ANIX prompt for confirmation. Running with --now skips the preview and confirmation in one step.
5

Error explanation

If the rebuild fails, ANIX inspects the log for known patterns — unknown options, unfree blocks, syntax errors — and prints a human-readable explanation with suggestions before showing the raw log tail.
Snapshots are local Git commits by default. ANIX warns you about possible secrets in your config before committing. Pushing to a remote is opt-in:
anix config set snapshots.push true

Graphical Helper

anix --gui opens an interactive helper. If a graphical session is available and zenity is installed, it presents a point-and-click interface. Otherwise it falls back to a grouped numbered terminal menu covering the same operations.
anix --gui
The GUI workspace groups actions into eight areas: Overview, Settings, Features, Profiles, Snapshots, Packages, Maintenance, and Docs.

ANIX NixOS Module Reference

ANIX ships as a NixOS module (nix/modules/anix.nix). All options are declared under the anix.* namespace.

Core

OptionTypeDefaultPurpose
anix.enableboolfalseEnable the ANIX configuration layer
anix.hostnamestring or nullnullHostname override for networking.hostName
anix.timezonestring or nullnullTimezone override, e.g. America/New_York
anix.keyboard.consolestring or nullnullTTY keymap, e.g. us, de
anix.keyboard.xkbstring or nullnullGraphical desktop keyboard layout
anix.desktopenum or nullnullDesktop profile (Abora OS only)
anix.wallpaperstring or nullnullWallpaper filename (Abora OS only)

Packages and Shell

OptionTypeDefaultPurpose
anix.packageslist of packages[]Extra system packages in the ANIX layer
anix.fontslist of packages[]Extra font packages
anix.allowUnfreebooltrueAllow unfree packages like Discord and Steam
anix.experimentalNixbooltrueEnable nix-command and flakes
anix.shellbash, zsh, fish, or nullnullDefault shell for normal users

Services

OptionTypeDefaultPurpose
anix.services.bluetoothbooltrueEnable Bluetooth hardware support
anix.services.printingbooltrueEnable CUPS printing
anix.services.opensshboolfalseEnable the OpenSSH server
anix.services.flatpakbooltrueEnable Flatpak integration
anix.services.audiobooltrueEnable PipeWire audio (with ALSA and PulseAudio compat)

Power

OptionTypeDefaultPurpose
anix.power.thermaldbooltrueEnable thermald for thermal management
anix.power.tlpboolfalseEnable TLP laptop power management

Nix Store and Garbage Collection

OptionTypeDefaultPurpose
anix.trustedUserslist of strings[]Users added to nix.settings.trusted-users
anix.autoOptimiseStorebooltrueEnable automatic Nix store optimisation
anix.garbageCollect.enableboolfalseEnable scheduled garbage collection
anix.garbageCollect.datesstring"weekly"Systemd calendar expression for GC
anix.garbageCollect.optionsstring"--delete-older-than 14d"Options passed to nix-collect-garbage

TinyPM Bootstrap

OptionTypeDefaultPurpose
anix.tinypm.enablebooltrueAuto-install TinyPM on first user login via a systemd user service
anix.tinypm.flavorstring"abora"TinyPM flavor passed to the installer
When anix.tinypm.enable is true, a tinypm-init systemd user service runs on first login and installs TinyPM into ~/.tinypm/. A stamp file at ~/.local/state/tinypm/anix-init-done prevents reinstallation on subsequent logins.

Example: anix.nix

The following is a representative anix.nix with common values set.
{ pkgs, ... }:
{
  anix.enable = true;

  anix.hostname = "my-pc";
  anix.timezone = "America/New_York";
  anix.keyboard.console = "us";
  anix.keyboard.xkb = "us";

  anix.desktop = "gnome";
  anix.wallpaper = "bluehorizon.png";

  anix.allowUnfree = true;
  anix.experimentalNix = true;
  anix.shell = "zsh";

  anix.tinypm.enable = true;

  anix.services.bluetooth = true;
  anix.services.printing = true;
  anix.services.flatpak = true;
  anix.services.audio = true;
  anix.services.openssh = false;

  anix.power.thermald = true;
  anix.power.tlp = false;

  anix.packages = with pkgs; [ ];
  anix.fonts = with pkgs; [ inter nerd-fonts.jetbrains-mono ];

  anix.trustedUsers = [ "root" "@wheel" ];
  anix.garbageCollect.enable = true;
  anix.garbageCollect.dates = "weekly";
  anix.garbageCollect.options = "--delete-older-than 14d";
}
After editing anix.nix, rebuild with:
anix apply
Or use the set command to change a single value and rebuild in the same step:
anix set desktop hyprland
anix apply

ANIX Doctor Checks

anix doctor verifies the full ANIX and NixOS management layer.
CheckWhat is verified
nix command availablenix is on PATH
nixos-rebuild availablenixos-rebuild is on PATH
config directory exists/etc/nixos/ is present
flake.nix existsflake.nix is in the config directory
flake outputs evaluatenix flake show succeeds
config is a Git repoSnapshot history is initialized
config repo is cleanNo unsaved changes
ANIX config existsanix.nix is present
ANIX config preflightNo syntax or option errors
ANIX desktop validDesktop value matches supported list
system generation profile/nix/var/nix/profiles/system exists
Run anix doctor --fix to automatically create the config directory, initialise the snapshot repo, and write a default anix.nix where safely possible.

Build docs developers (and LLMs) love