Skip to content

Post-Installation Guide

Welcome to your new tuinix system! This guide covers what to expect after your first boot.

First boot

After installation and reboot:

  1. GRUB loads automatically
  2. You'll be prompted for your ZFS encryption passphrase
  3. The system boots to a terminal login prompt
  4. Log in with the username and password you set during installation

Your environment

tuinix is a terminal-only system. There is no desktop environment, no window manager, and no graphical login screen. Everything is done from the command line.

Your system includes:

  • Shell: A modern shell with intelligent completions
  • Multiplexer: Terminal multiplexer for managing multiple sessions
  • Editor: Terminal-based text editors
  • File manager: Terminal file browser
  • System monitoring: Resource monitoring tools
  • Networking: WiFi and ethernet management tools
  • Development: Git and common development utilities

System configuration

Your tuinix flake is a git repository cloned from upstream:

Path Purpose
/etc/tuinix System reference copy (read-only for non-root)
~/tuinix Your git working copy with your host config committed

The installer creates ~/tuinix as a shallow clone of the upstream tuinix repo with your host-specific configuration (hosts/<hostname>/) and user configuration (users/<username>.nix) grafted in and committed. This means you can pull upstream improvements while keeping your local host customizations.

Git is pre-configured with your name and email (as entered during installation), so you can commit changes immediately without any additional setup.

Making changes

cd ~/tuinix
# Edit your host config in hosts/$(hostname)/
./scripts/rebuild.sh
# Commit your changes
git add -A && git commit -m "Describe your change"

The rebuild.sh script in scripts/ handles the full rebuild cycle: it runs nixos-rebuild switch with your local flake and optionally cleans up old generations and runs garbage collection afterwards. It also accepts boot or test as an argument instead of the default switch.

Adding packages

tuinix uses NixOS's declarative package management. You can add packages either to your user configuration (available only to you) or to the system configuration (available to all users).

Finding packages

Search for available packages at search.nixos.org/packages. Enter a package name or description to find what you need.

User packages

Edit your user configuration file to add packages specific to your account:

cd ~/tuinix
vim users/user.nix

Find the packages section and add your desired packages:

# User-specific packages
packages = with pkgs; [
  # Example: eza - a modern replacement for ls
  eza

  # Add your packages below:
  htop
  ripgrep
  fzf
];

Then rebuild and commit:

./scripts/rebuild.sh
git add -A && git commit -m "Add user packages"

Example: Installing eza

eza is a modern, colorful replacement for ls. To install it:

  1. Edit users/user.nix:

    packages = with pkgs; [
      eza
    ];
    

  2. Rebuild your system:

    ./scripts/rebuild.sh
    

  3. Use eza:

    eza -la          # List all files with details
    eza --tree       # Tree view
    eza --icons      # With file type icons
    

  4. Commit your change:

    git add -A && git commit -m "Add eza"
    

Pulling upstream updates

cd ~/tuinix
git pull --rebase
./scripts/rebuild.sh

Rolling back

NixOS keeps previous system generations. To roll back:

# List available generations
sudo nix-env --list-generations -p /nix/var/nix/profiles/system

# Switch to a previous generation at next boot
sudo nixos-rebuild boot --flake .#$(hostname) --rollback

Or select a previous generation from the GRUB boot menu.

Networking

Ethernet

Wired connections should work automatically via DHCP.

WiFi

# Scan for networks
nmcli device wifi list

# Connect to a network
nmcli device wifi connect "SSID" password "password"

Updating the system

cd ~/tuinix
git pull --rebase        # Get upstream tuinix improvements
nix flake update         # Update nixpkgs and other flake inputs
sudo nixos-rebuild switch --flake .#$(hostname)
git add flake.lock && git commit -m "Update flake inputs"

For more on ZFS snapshots and pool management, see the ZFS Management guide.