nanuqsaurus/laptop.md
randogoth d1321cf7ca docs: nixos-26.05 in adopt examples, document impermanence
Bump the wrapper-flake nixpkgs channel in the adopt/laptop examples to
nixos-26.05, and add the "Impermanence (optional)" section covering the
/persist subvolume, the required "nixos" fs label, and the default
persistence set.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-28 12:38:06 +03:00

5.6 KiB
Raw Permalink Blame History

Install Nanuqsaurus On An Empty Partition (No Full-Disk Wipe)

This repos nanuqsaurus-btrfs “fresh install” path uses disko to create a brand new GPT layout (EFI + Btrfs) and therefore wipes the whole disk. If you want to install onto an existing empty partition while keeping other partitions intact, use the “wrapper flake” approach and a manual mount + nixos-install.

These steps are meant to be run from a NixOS installer ISO on the target laptop.

0) Preconditions

  • Boot the installer in UEFI mode (this profile enables systemd-boot + EFI).
  • You have working network connectivity (WiFi instructions below).
  • You have:
    • an existing empty root partition you will format (example: /dev/nvme0n1p6)
    • an existing EFI System Partition (vfat) you will mount at /boot (example: /dev/nvme0n1p1)

Confirm UEFI:

test -d /sys/firmware/efi/efivars && echo "UEFI booted" || echo "NOT UEFI booted"

0.5) Connect To WiFi (Installer)

Most NixOS installer ISOs run NetworkManager. The easiest flow is nmtui.

  1. Bring up the text UI and connect:
sudo -i
nmtui

In nmtui:

  • Select Activate a connection
  • Pick your WiFi SSID
  • Enter the password
  • Exit
  1. Verify you have connectivity:
ping -c 1 1.1.1.1
ping -c 1 example.com

If nmtui is unavailable, try:

nmcli dev status
nmcli dev wifi list
nmcli dev wifi connect "YOUR_SSID" password "YOUR_PASSWORD"

1) Identify Your Partitions

lsblk -f

Pick stable paths if available (/dev/disk/by-id/...). In the commands below, set:

  • ROOT_PART = the empty partition to become /
  • EFI_PART = the EFI System Partition (vfat) to become /boot

Example:

ROOT_PART=/dev/nvme0n1p6
EFI_PART=/dev/nvme0n1p1

2) Format The Root Partition

Warning: this destroys data on ROOT_PART.

Recommended (Btrfs with subvolumes similar to this repos intended layout):

mkfs.btrfs -f -L nixos "$ROOT_PART"

mount "$ROOT_PART" /mnt
btrfs subvolume create /mnt/root
btrfs subvolume create /mnt/home
btrfs subvolume create /mnt/nix
umount /mnt

mount -o subvol=root,compress=zstd "$ROOT_PART" /mnt
mkdir -p /mnt/home /mnt/nix
mount -o subvol=home,compress=zstd "$ROOT_PART" /mnt/home
mount -o subvol=nix,compress=zstd "$ROOT_PART" /mnt/nix

Alternative (ext4):

mkfs.ext4 -F -L nixos "$ROOT_PART"
mount "$ROOT_PART" /mnt
mkdir -p /mnt/nix

3) Mount EFI At /boot

mkdir -p /mnt/boot
mount "$EFI_PART" /mnt/boot

4) Generate Hardware Config

Important: do this after mounting /boot, so the EFI mount gets captured.

nixos-generate-config --root /mnt

This creates:

  • /mnt/etc/nixos/hardware-configuration.nix
  • /mnt/etc/nixos/configuration.nix (we will not use this directly)

5) Create A Wrapper Flake In /etc/nixos

This repos nanuqsaurus profile defines an admin user and also tends to lock root by default. To avoid surprises, set your own password hashes in the wrapper flake using lib.mkForce.

If you have a Lenovo ThinkPad X13 (Intel), you can also import the nixos-hardware module for it in this wrapper flake.

  1. Generate SHA-512 password hashes:
nix --experimental-features "nix-command flakes" \
  shell nixpkgs#mkpasswd -c mkpasswd -- -m sha-512

Run it twice if you want to set both admin and root.

  1. Create /mnt/etc/nixos/flake.nix:
nano /mnt/etc/nixos/flake.nix

Paste and edit:

{
  description = "Local wrapper for the nanuqsaurus profile";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
    nanuqsaurus = {
      url = "git+https://codeberg.org/randogoth/nanuqsaurus.git";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    # Optional hardware profiles (recommended on laptops)
    nixos-hardware = {
      url = "github:NixOS/nixos-hardware";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = inputs@{ nixpkgs, nanuqsaurus, nixos-hardware, ... }: {
    nixosConfigurations.nanuqsaurus = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      specialArgs = { inherit inputs; };
      modules = [
        ./hardware-configuration.nix
        # Optional: ThinkPad X13 (Intel) profile (path: lenovo/thinkpad/x13/intel)
        # Remove or replace if you have different hardware.
        nixos-hardware.nixosModules.lenovo-thinkpad-x13-intel
        nanuqsaurus.nixosModules.nanuqsaurus
        ({ lib, ... }: {
          networking.hostName = "nanuqsaurus";
          system.stateVersion = "25.11";

          nanuqsaurus.admin.username = "admin";
          users.users.admin.hashedPassword = lib.mkForce "PUT_ADMIN_SHA512_HASH_HERE";

          # Recommended so you can recover easily:
          users.users.root.hashedPassword = lib.mkForce "PUT_ROOT_SHA512_HASH_HERE";

          # Optional: require sudo password (this repo defaults to passwordless sudo)
          security.sudo.wheelNeedsPassword = lib.mkForce true;
        })
      ];
    };
  };
}

6) Install NixOS

NIX_CONFIG="experimental-features = nix-command flakes" \
  nixos-install --root /mnt --flake /mnt/etc/nixos#nanuqsaurus

7) Reboot

reboot

If your firmware shows multiple boot options, select the systemd-boot entry for the disk containing the EFI partition.

Notes

  • Secure Boot: this repos installer ISO expects Secure Boot off at boot; after installation you can enable Secure Boot using Lanzaboote (see docs/secure-boot.md).
  • If you actually want to wipe an entire disk and let this repo handle partitioning, use disko-install with #nanuqsaurus-btrfs (see README.md and docs/install-help.txt).