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, /sbinLinks to rod/profile/bin.
/usr/bin, /usr/sbinLinks to ../rod/profile/bin.
/libLink to rod/profile/lib.
/lib64/ld-linux-x86-64.so.2Link 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.
/bootThe EFI System Partition, FAT32, label URANIUMESP, mounted nosuid,nodev,noexec with mode 0700.
/homeThe subvolume @home, mounted nosuid,nodev,noatime.
/nixstore and var. See below.
/rodProfiles, tools and the package index. See below.
/rootThe home of root.
/runA tmpfs. /run/scram/top holds the btrfs top level.
/tmpA tmpfs, nosuid,nodev, mode 1777, half of the memory. Programs can run from it.
/dev/shmA tmpfs, nosuid,nodev,noexec.
/varlog (service logs), cache and tmp. /var/empty appears when sshd first starts.
/mntEmpty. 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/profileThe 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/initA 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/binThe 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/wrappersThe setuid doas, see users.
/rod/nixpkgsThe package index, a subvolume that frames leave out. rod +s fills it and .pin inside records the revision. Empty on a new system.
/rod/recipesRecipes and the kernel configuration, see recipes.
/rod/installedThe names of the packages you asked for, one per line.
/rod/holdsPackages held by rod +t. Created on first use.
/rod/containersThe containers of silo. Created on first use.
/rod/sharetips, 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.shutdownBoot 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.confAccounts and administration, see users.
hostname, hosts, resolv.conf, udhcpc.scriptSee network.
localtimeTime zone link, see time. Absent at first.
keymapConsole layout, see keyboard. Absent at first.
nftables.conf, nftables.d/The firewall and the ports blastdoor opened.
sysctl.confKernel settings applied by rc, see security.
cmdlineKernel arguments for every boot menu entry: slab_nomerge vsyscall=none debugfs=off randomize_kstack_offset=on. Run scram boot after editing it.
fstabSee above.
scram, scram.d/Paths left out of frames: /rod/nixpkgs, /var/cache, /var/tmp. Hooks are read from /etc/scram.hooks.
rod.confOne 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.pubThe public key for the release checksums, see download.
profile, issue, os-release, man.confLogin environment, console banner, system name (NAME="UraniumOS", ID=uranium), the manual path and the settings of fetch.
ssl/certs/ca-bundle.crtLink 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.