blob: ad0e014b79672cf90170454f70bb9bfcce75ea15 (
plain) (
tree)
|
|
{ inputs, lib, config, pkgs, ... }:
let
MMC = "/dev/disk/by-id/mmc-AGND3R_0x48d44fdc";
SD = "/dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000000208-0:0";
partitionsCreateScript = ''
parted -s "${MMC}" mklabel gpt
parted -s "${MMC}" mkpart "efi" fat32 1024KiB 64M
parted -s "${MMC}" set 1 esp on
parted -s -a optimal "${MMC}" mkpart "boot" 64M 264M
parted -s -a optimal "${MMC}" mkpart "nix" 264M 100%
parted -s "${SD}" mklabel gpt
parted -s -a optimal "${SD}" mkpart "home_and_persist" 1024KiB 100%
udevadm trigger --subsystem-match=block; udevadm settle
'';
partitionsFormatScript = ''
mkfs.vfat "${MMC}"-part1
cryptsetup -q luksFormat "${MMC}"-part2 --type luks1
cryptsetup open --type luks "${MMC}"-part2 encrypted_boot
mkfs.ext4 /dev/mapper/encrypted_boot
cryptsetup close encrypted_boot
cryptsetup -q luksFormat "${MMC}"-part3 --type luks2
cryptsetup open --type luks "${MMC}"-part3 encrypted_nix
mkfs.btrfs -f /dev/mapper/encrypted_nix
cryptsetup close encrypted_nix
cryptsetup -q luksFormat "${SD}"-part1 --type luks2
cryptsetup open --type luks "${SD}"-part1 encrypted_home_and_persist
pvcreate /dev/mapper/encrypted_home_and_persist
vgcreate encrypted_home_and_persist_pool /dev/mapper/encrypted_home_and_persist
lvcreate -L 4G -n persist encrypted_home_and_persist_pool
mkfs.btrfs -f /dev/mapper/encrypted_home_and_persist_pool-persist
lvcreate -l 100%FREE -n home encrypted_home_and_persist_pool
mkfs.btrfs -f /dev/mapper/encrypted_home_and_persist_pool-home
vgchange -a n encrypted_home_and_persist_pool
cryptsetup close encrypted_home_and_persist
'';
partitionsMountScript = ''
mount -t tmpfs none /mnt
mkdir -p /mnt/{boot,nix,persist,home}
cryptsetup open --type luks /dev/disk/by-partlabel/boot encrypted_boot
mount /dev/mapper/encrypted_boot /mnt/boot
mkdir -p /mnt/boot/efi
mount /dev/disk/by-partlabel/efi /mnt/boot/efi
cryptsetup open --type luks /dev/disk/by-partlabel/nix encrypted_nix
mount -o compress-force=zstd,noatime /dev/mapper/encrypted_nix /mnt/nix
cryptsetup open --type luks /dev/disk/by-partlabel/home_and_persist encrypted_home_and_persist
vgchange -ay encrypted_home_and_persist_pool
mount -o compress-force=zstd /dev/mapper/encrypted_home_and_persist_pool-home /mnt/home
mount -o compress-force=zstd,noatime /dev/mapper/encrypted_home_and_persist_pool-persist /mnt/persist
'';
in
{
config = {
environment.persistence."/persist" = {
directories = [
"/var/log"
"/var/lib"
];
files = [
"/etc/machine-id"
"/etc/nix/id_rsa"
];
};
fileSystems."/" = {
device = "none";
fsType = "tmpfs";
};
boot.initrd.luks.devices."encrypted_boot" = {
device = "/dev/disk/by-partlabel/boot";
preLVM = true;
};
fileSystems."/boot" = {
device = "/dev/mapper/encrypted_boot";
fsType = "ext4";
};
fileSystems."/boot/efi" = {
device = "/dev/disk/by-partlabel/efi";
fsType = "vfat";
};
boot.initrd.luks.devices."encrypted_nix".device = "/dev/disk/by-partlabel/nix";
fileSystems."/nix" = {
device = "/dev/mapper/encrypted_nix";
fsType = "btrfs";
neededForBoot = true;
options = [ "compress-force=zstd" "noatime" ];
};
boot.initrd.luks.devices."encrypted_home_and_persist".device = "/dev/disk/by-partlabel/home_and_persist";
fileSystems."/persist" = {
device = "/dev/mapper/encrypted_home_and_persist_pool-persist";
fsType = "btrfs";
neededForBoot = true;
options = [ "compress-force=zstd" "noatime" ];
};
fileSystems."/home" = {
device = "/dev/mapper/encrypted_home_and_persist_pool-home";
fsType = "btrfs";
options = [ "compress-force=zstd" ];
};
services.btrfs.autoScrub.enable = true;
swapDevices = [ ];
zramSwap.enable = true;
environment.systemPackages = [
config.disks-create
config.disks-format
config.disks-mount
];
};
options.disks-create = with lib; mkOption rec {
type = types.package;
default = with pkgs; symlinkJoin {
name = "disks-create";
paths = [ (writeScriptBin default.name partitionsCreateScript) parted ];
};
};
options.disks-format = with lib; mkOption rec {
type = types.package;
default = with pkgs; symlinkJoin {
name = "disks-format";
paths = [ (writeScriptBin default.name partitionsFormatScript) cryptsetup lvm2 dosfstools e2fsprogs btrfs-progs ];
};
};
options.disks-mount = with lib; mkOption rec {
type = types.package;
default = with pkgs; symlinkJoin {
name = "disks-mount";
paths = [ (writeScriptBin default.name partitionsMountScript) cryptsetup lvm2 ];
};
};
}
|