System
A UraniumOS system is a btrfs filesystem with the subvolumes @ (the root) and @home, an EFI System Partition mounted on /boot, and a package store in /nix/store. The programs of the system are in the store and are linked into profiles under /rod.
The root directory
/bin, /sbin | Links to rod/profile/bin. |
/usr/bin, /usr/sbin | Links to ../rod/profile/bin. |
/lib | Link to rod/profile/lib. |
/lib64/ld-linux-x86-64.so.2 | Link to ../rod/profile/lib/ld-linux-x86-64.so.2, so a prebuilt binary finds the loader. It finds only the libraries of installed packages. |
/boot | The EFI System Partition, FAT32, label URANIUMESP, mounted nosuid,nodev,noexec with mode 0700. |
/home | The subvolume @home, mounted nosuid,nodev,noatime. |
/nix | store and var. See below. |
/rod | Profiles, tools and the package index. See below. |
/root | The home of root. |
/run | A tmpfs. /run/scram/top holds the btrfs top level. |
/tmp | A tmpfs, nosuid,nodev, mode 1777, half of the memory. Programs can run from it. |
/dev/shm | A tmpfs, nosuid,nodev,noexec. |
/var | log (service logs), cache and tmp. /var/empty appears when sshd first starts. |
/mnt | Empty. The installer uses /mnt/uranium. |
/opt, /srv, /usr/lib, /usr/share and /usr/include do not exist. Software that expects them needs rod +e or silo, see differences.
The mounts of the running image:
/dev/vda2 /run/scram/top btrfs rw,relatime,discard=async,space_cache=v2,subvolid=5,subvol=/
/dev/vda2 / btrfs rw,noatime,discard=async,space_cache=v2,subvolid=259,subvol=/@
/dev/vda2 /home btrfs rw,nosuid,nodev,noatime,discard=async,space_cache=v2,subvolid=258,subvol=/@home
/dev/vda1 /boot vfat rw,nosuid,nodev,noexec,relatime,fmask=0077,dmask=0077,...
shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime
tmp /tmp tmpfs rw,nosuid,nodev,relatime
/etc/fstab mounts by label:
LABEL=uranium / btrfs noatime,subvol=@ 0 0
LABEL=uranium /home btrfs noatime,nodev,nosuid,subvol=@home 0 0
LABEL=URANIUMESP /boot vfat umask=0077,nodev,nosuid,noexec 0 2
/rod
/rod/profile | The system profile, a link to profile-N-link. Each rod operation makes a new generation, a link to a user-environment directory in the store. It holds bin, boot (the kernel vmlinuz, initrd and config), etc, lib, libexec and share. |
/rod/init | A second profile that holds only busybox. /rod/init/bin is where init, getty, login, crond, ntpd, udhcpc, adduser, passwd, reboot and the other applets live. It has one generation and rod does not manage it. |
/rod/bin | The shell tools uranium-install, uranium-chroot, uranium-desktop, uranium-session, uranium-man, uranium-tip and genfstab. The full rod and the other tools come from the uranium-tools package in the profile. The bootstrap rod is removed when the image is built. |
/rod/wrappers | The setuid doas, see users. |
/rod/nixpkgs | The package index, a subvolume that frames leave out. rod +s fills it and .pin inside records the revision. Empty on a new system. |
/rod/recipes | Recipes and the kernel configuration, see recipes. |
/rod/installed | The names of the packages you asked for, one per line. |
/rod/holds | Packages held by rod +t. Created on first use. |
/rod/containers | The containers of silo. Created on first use. |
/rod/share | tips, site-url, logo, desktop (the Xorg configuration), bash-completion and man. |
The base package list of the image, in /rod/installed: bashInteractive coreutils findutils gnugrep gnused gawk gnutar gzip xz bzip2 diffutils which less util-linux procps iproute2 glibc curl cacert btrfs-progs rsync nix runit limine bubblewrap cryptsetup nftables openssh mandoc kbd dosfstools iputils zstd file bash-completion ncurses avtty doas-uranium linux-uranium initramfs-uranium fastfetch signify uranium-tools. The profile also holds zoneinfo.
/nix
/nix/store holds one read-only directory per build. /nix/var/nix holds the database (db), the profile links (profiles) and the garbage collector roots (gcroots). /etc/nix/nix.conf has:
build-users-group =
sandbox = false
experimental-features = nix-command
substituters = https://cache.nixos.org
Builds run without nix build users and without a sandbox; a package that is not in the binary cache is built as the user who runs rod, normally root. See rod and security.
/etc
inittab, rc, rc.local, rc.shutdown | Boot and shutdown, see services. rc.local is yours and does not exist at first. |
sv/, service/ | Service directories and the enabled links. |
crontabs/ | One file per user, see cron. |
passwd, group, shadow, shells, doas.conf | Accounts and administration, see users. |
hostname, hosts, resolv.conf, udhcpc.script | See network. |
localtime | Time zone link, see time. Absent at first. |
keymap | Console layout, see keyboard. Absent at first. |
nftables.conf, nftables.d/ | The firewall and the ports blastdoor opened. |
sysctl.conf | Kernel settings applied by rc, see security. |
cmdline | Kernel arguments for every boot menu entry: slab_nomerge vsyscall=none debugfs=off randomize_kstack_offset=on. Run scram boot after editing it. |
fstab | See above. |
scram, scram.d/ | Paths left out of frames: /rod/nixpkgs, /var/cache, /var/tmp. Hooks are read from /etc/scram.hooks. |
rod.conf | One line, CHANNEL=https://channels.nixos.org/nixos-26.05/nixexprs.tar.xz, the index that rod +s fetches. |
rod/sets/ | The package sets tools, dev and desktop, one package name per line. |
ssh/ | sshd_config and the host key. |
signify/uranium-0.1.pub | The public key for the release checksums, see download. |
profile, issue, os-release, man.conf | Login environment, console banner, system name (NAME="UraniumOS", ID=uranium), the manual path and the settings of fetch. |
ssl/certs/ca-bundle.crt | Link to the certificate bundle in the profile. |
/boot and the top level
/boot holds limine.conf (menu entries UraniumOS, one Frame ID per frame, and Rescue shell), EFI/BOOT/BOOTX64.EFI (limine), uranium/vmlinuz and uranium/initrd, and uranium/k-HASH directories for older kernels that frames need (at most three, SCRAM_KERNELS). scram boot writes all of it.
/run/scram/top is the btrfs top level (subvolume id 5). It holds @, @home and .scram. .scram/ID/ is a frame (read-only snapshots of @ and @home, the kernel in boot/, an optional note), .scram/keep.list names the left-out subvolumes, and .scram/try, .scram/boot-action and .scram/trial exist while an update is pending, scheduled or on trial. A frame is a snapshot on the same disk: it does not protect against a disk failure, it holds /etc, the home directories and the profile links but not the left-out paths, and a flash does not undo changes to /boot beyond what scram boot rewrites. See scram and backups.
The busybox tools and PATH
A login shell has PATH=/rod/wrappers:/rod/bin:/rod/profile/bin. The commands adduser, deluser, passwd, chpasswd, crontab, reboot, poweroff, halt, hostname, ifconfig and su exist only in /rod/init/bin, and a login shell does not find them by name. Scripts of the system and the installer set PATH to include /rod/init/bin. In your shell call them by path or extend PATH.
Manual pages
man reads /rod/profile/share/man and /rod/share/man. The tool pages are in /rod/share/man/man1.