!JQvnJacrwKgtkGHYHO:matrix.org

NixOS + Framework

225 Members
Discussing NixOS in the context of the Framework laptop50 Servers

Load older messages


SenderMessageTime
10 May 2026
@sudoforge:matrix.orgsudoforge Albert Larsan and i will have similar output here (except for partitions 3 and 4, which we were told to ignore): two partitions for our system 16:27:21
@sudoforge:matrix.orgsudoforgeone for our ESP, the other that is a single luks container16:27:48
@albertlarsan68:albertlarsan.frAlbert LarsanYep, except that I have LVM between luks and btrfs16:28:13
@sudoforge:matrix.orgsudoforge presumably for $REASONS :) 16:28:24
@albertlarsan68:albertlarsan.frAlbert Larsan(and a huge ESP)16:28:28
@rajil:rajils.comtrumeeadvantage of lvm is to modify the partition size in the future?16:29:00
@albertlarsan68:albertlarsan.frAlbert Larsan* (and a huge ESP for Lanzaboote and dual-boot)16:29:04
@rajil:rajils.comtrumee Albert Larsan: p4 is windows? 16:30:22
@albertlarsan68:albertlarsan.frAlbert LarsanI don’t really remember, might be qubes or kicksecure.16:31:23
@sudoforge:matrix.orgsudoforgeIMO, on a single disk system, there's no reason to put lvm between the luks container and your fs of choice16:31:36
@albertlarsan68:albertlarsan.frAlbert LarsanWindows lives on an 250G extension card16:31:55
@sudoforge:matrix.orgsudoforgewell, assuming that you're using a single filesystem like btrfs16:32:03
@rajil:rajils.comtrumeeso there is no benefit of using LVM here?16:32:38
@sudoforge:matrix.orgsudoforgenot where albert has used it, IMO16:32:55
@rajil:rajils.comtrumeedoes the NixOS install CD sets this up?16:33:48
@sudoforge:matrix.orgsudoforgeuh, no clue16:33:59
@sudoforge:matrix.orgsudoforgewhat you're looking at was actually manually partitioned back in the day16:35:11
@albertlarsan68:albertlarsan.frAlbert LarsanHaving swap also crypted in the same luks container is the main benefit for me (ignoring swap files).16:37:10
@sudoforge:matrix.orgsudoforge well, yeah. /swap for me is just a btrfs subvolume and my swap space is a swap file conveniently at /swap/file 16:37:33
@sudoforge:matrix.orgsudoforge

disko configuration that i wrote recently but haven't used to reformat my in-use disk (because i haven't bothered migrating) is:

let
  # mkSubvolumes is a helper function to define BTRFS subvolumes from a list
  # of strings (representing the path the subvolume will be mounted at, and
  # using that as the name)
  mkSubvolumes = paths: builtins.listToAttrs (map (p: {
    name = p;
    value = {
      mountpoint = if p == "/root" then "/" else p;
      mountOptions = [ "defaults" "ssd" "compress=zstd:3" "noatime" ];
    };
  }) paths);
in
{
  disko.devices = {
    system = {
      device = "/dev/disk/by-id/...";
      type = "disk";

      content = {
        type = "gpt";

        partitions = {
          ESP = {
            size = "1024M";
            type = "EF00";
            content = {
              type = "filesystem";
              format = "vfat";
              mountpoint = "/boot";
              mountOptions = [ "umask=0077" ];
            };
          };

          luks = {
            size = "100%";
            content.type = "luks";
            content.name = "system";
            content.settings.allowDiscards = true;

            # use a fido2 key for unlocking
            content.enrollFido2 = true;

            # do not generate a recovery passphrase (i manually add additional fido keys)
            content.enrollRecovery = false;

            content.content = {
              type = "btrfs";

              subvolumes = mkSubvolumes [
                "/nix"
                "/persist"
                "/root"
                "/var/log"
                "/home"
              ] // {
                "/swap" = {
                  mountpoint = "/swap";
                  swap.swapfile.size = "72G";
                  swap.swapfile.path = "file"; # relative path, results in /swap/file
                };
              };

              # This hook creates a snapshot of the root subvolume after it is
              # created (and critically, empty), which is used for automatic
              # rollback on startup. see //system/modules:impermanence.nix for
              # more information about that process.
              postCreateHook = ''
                set -eufo pipefail
                MOUNTPOINT=$(mktemp -d)
                mount --type btrfs \
                  --options defaults,ssd,noatime,subvol=/ \
                  /dev/mapper/system \
                  "$MOUNTPOINT"
                trap 'umount "$MOUNTPOINT"; rm -rf "$MOUNTPOINT"' EXIT
                btrfs subvolume snapshot -r \
                  "$MOUNTPOINT/root" "$MOUNTPOINT/root-blank"
              '';
            };
          };
        };
      };
    };
  };
}
16:38:46
@albertlarsan68:albertlarsan.frAlbert LarsanAlso, moving stuff by adding a pv to lvm and removing the old pv is also nice (although I never used it). (you can also do this using btrfs native multi-disk support)16:39:12
@sudoforge:matrix.orgsudoforge

you can also do this using btrfs native multi-disk support

this is how i'll be migrating this machine's disk to a new disk, with the above disko configuration. btrfs send :)

16:41:08
@albertlarsan68:albertlarsan.frAlbert LarsanI have another impermanance setup, where I move the root submodule to a subfolder (for crash recovery), and delete the ones that are too old.16:42:41
@sudoforge:matrix.orgsudoforge

my impermanence module (referenced in the above config) just sets up the boot.initrd.systemd.services.rollback unit that handles deleting the root subvol and rolling back from the snapshot, and contains my environment.persistence."/persist" configuration (and other stuff necessary to handle w/ impermanence.

i'd be interested in seeing your crash recovery setup.

16:47:42
@sudoforge:matrix.orgsudoforge *

my impermanence module (referenced in the above config) just sets up the boot.initrd.systemd.services.rollback unit that handles deleting the root subvol and rolling back from the snapshot, and contains my environment.persistence."/persist" configuration, and other stuff necessary to handle w/ impermanence.

i'd be interested in seeing your crash recovery setup.

16:48:11
@sudoforge:matrix.orgsudoforge *

my impermanence module (referenced in the above config) just sets up the boot.initrd.systemd.services.rollback unit that handles deleting the root subvol and rolling back from the snapshot, contains my environment.persistence."/persist" configuration, and other stuff necessary to handle w/ impermanence.

i'd be interested in seeing your crash recovery setup.

16:48:22
@sudoforge:matrix.orgsudoforgeor do you simply mean that instead of deleting the root subvol on boot (like i do currently), you create another snapshot of it16:50:58
@albertlarsan68:albertlarsan.frAlbert Larsan I have this version (https://git.sr.ht/~albertlarsan68/dotfiles/tree/main/item/nixos/scripts/root-reset.sh) that snapshots the root before rolling it back (with a failed attempt at preserving nested subvolumes). It runs after hibernation resume and before mounting sysroot.
.The modern version (for the new machines) is at https://git.sr.ht/~albertlarsan68/dotfiles/tree/flake-parts/item/nixos-modules/impermanence/rollback.sh and literrally mvs the /root submodule to a dated folder, then deletes old versions.
16:52:53
@albertlarsan68:albertlarsan.frAlbert LarsanThe modern version does properly save nested submodules16:53:46
@sudoforge:matrix.orgsudoforgegot it16:55:18

Show newer messages


Back to Room ListRoom Version: 10