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>
This commit is contained in:
parent
17cce973fc
commit
d1321cf7ca
2 changed files with 236 additions and 1 deletions
208
laptop.md
Normal file
208
laptop.md
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
# Install Nanuqsaurus On An Empty Partition (No Full-Disk Wipe)
|
||||
|
||||
This repo’s `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:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
nmtui
|
||||
```
|
||||
|
||||
In `nmtui`:
|
||||
|
||||
- Select `Activate a connection`
|
||||
- Pick your WiFi SSID
|
||||
- Enter the password
|
||||
- Exit
|
||||
|
||||
2) Verify you have connectivity:
|
||||
|
||||
```bash
|
||||
ping -c 1 1.1.1.1
|
||||
ping -c 1 example.com
|
||||
```
|
||||
|
||||
If `nmtui` is unavailable, try:
|
||||
|
||||
```bash
|
||||
nmcli dev status
|
||||
nmcli dev wifi list
|
||||
nmcli dev wifi connect "YOUR_SSID" password "YOUR_PASSWORD"
|
||||
```
|
||||
|
||||
## 1) Identify Your Partitions
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
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 repo’s intended layout):
|
||||
|
||||
```bash
|
||||
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):
|
||||
|
||||
```bash
|
||||
mkfs.ext4 -F -L nixos "$ROOT_PART"
|
||||
mount "$ROOT_PART" /mnt
|
||||
mkdir -p /mnt/nix
|
||||
```
|
||||
|
||||
## 3) Mount EFI At `/boot`
|
||||
|
||||
```bash
|
||||
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.
|
||||
|
||||
```bash
|
||||
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 repo’s `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:
|
||||
|
||||
```bash
|
||||
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`.
|
||||
|
||||
2) Create `/mnt/etc/nixos/flake.nix`:
|
||||
|
||||
```bash
|
||||
nano /mnt/etc/nixos/flake.nix
|
||||
```
|
||||
|
||||
Paste and edit:
|
||||
|
||||
```nix
|
||||
{
|
||||
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
|
||||
|
||||
```bash
|
||||
NIX_CONFIG="experimental-features = nix-command flakes" \
|
||||
nixos-install --root /mnt --flake /mnt/etc/nixos#nanuqsaurus
|
||||
```
|
||||
|
||||
## 7) Reboot
|
||||
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
If your firmware shows multiple boot options, select the systemd-boot entry for the disk containing the EFI partition.
|
||||
|
||||
## Notes
|
||||
|
||||
- Secure Boot: this repo’s 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`).
|
||||
Loading…
Add table
Add a link
Reference in a new issue