impermanence

This commit is contained in:
2025-10-06 14:47:19 -04:00
parent a4bf2a0ea9
commit 9d0d0b10d1
5 changed files with 104 additions and 2 deletions

View File

@@ -13,6 +13,7 @@
imports = [ imports = [
./hardware.nix ./hardware.nix
./zfs.nix ./zfs.nix
./impermanence.nix
./services/postgresql.nix ./services/postgresql.nix
./services/jellyfin.nix ./services/jellyfin.nix
@@ -97,6 +98,7 @@
initrd = { initrd = {
compressor = "zstd"; compressor = "zstd";
supportedFilesystems = [ "f2fs" ];
}; };
loader.systemd-boot.enable = lib.mkForce false; loader.systemd-boot.enable = lib.mkForce false;
@@ -119,6 +121,14 @@
chown -R root:wheel ${config.boot.lanzaboote.pkiBundle} chown -R root:wheel ${config.boot.lanzaboote.pkiBundle}
chmod -R 500 ${config.boot.lanzaboote.pkiBundle} chmod -R 500 ${config.boot.lanzaboote.pkiBundle}
''; '';
# ensure persistent directories exist
"persistent-dirs".text = ''
mkdir -p /persistent/etc/ssh
mkdir -p /persistent/var/lib
mkdir -p /persistent/etc/nixos
mkdir -p /persistent/var/log
'';
}; };
environment.etc = { environment.etc = {

View File

@@ -15,17 +15,29 @@
mountpoint = "/boot"; mountpoint = "/boot";
}; };
}; };
root = { persistent = {
size = "100%"; size = "100%";
content = { content = {
type = "filesystem"; type = "filesystem";
format = "f2fs"; format = "f2fs";
mountpoint = "/"; mountpoint = "/persistent";
}; };
}; };
}; };
}; };
}; };
}; };
nodev = {
"/" = {
fsType = "tmpfs";
mountOptions = [
"defaults"
"size=2G"
"mode=755"
];
}; };
};
};
fileSystems."/persistent".neededForBoot = true;
} }

16
flake.lock generated
View File

@@ -205,6 +205,21 @@
"type": "github" "type": "github"
} }
}, },
"impermanence": {
"locked": {
"lastModified": 1737831083,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"lanzaboote": { "lanzaboote": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
@@ -348,6 +363,7 @@
"deploy-rs": "deploy-rs", "deploy-rs": "deploy-rs",
"disko": "disko", "disko": "disko",
"home-manager": "home-manager", "home-manager": "home-manager",
"impermanence": "impermanence",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"llamacpp": "llamacpp", "llamacpp": "llamacpp",
"nix-minecraft": "nix-minecraft", "nix-minecraft": "nix-minecraft",

View File

@@ -43,6 +43,10 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
impermanence = {
url = "github:nix-community/impermanence";
};
senior_project-website = { senior_project-website = {
url = "github:Titaniumtown/senior-project-website"; url = "github:Titaniumtown/senior-project-website";
flake = false; flake = false;
@@ -66,6 +70,7 @@
disko, disko,
srvos, srvos,
deploy-rs, deploy-rs,
impermanence,
... ...
}@inputs: }@inputs:
let let
@@ -196,6 +201,8 @@
disko.nixosModules.disko disko.nixosModules.disko
./configuration.nix ./configuration.nix
impermanence.nixosModules.impermanence
vpn-confinement.nixosModules.default vpn-confinement.nixosModules.default
# get nix-minecraft working! # get nix-minecraft working!

57
impermanence.nix Normal file
View File

@@ -0,0 +1,57 @@
{
config,
lib,
pkgs,
username,
service_configs,
...
}:
{
environment.persistence."/persistent" = {
hideMounts = true;
directories = [
# System directories
"/etc/nixos"
"/var/log"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
"/etc/NetworkManager/system-connections"
"/etc/ssh"
# Wireguard
"/etc/wireguard"
# Systemd persistent timers and state
"/var/lib/systemd/timers"
];
files = [
# SSH host keys
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_ed25519_key.pub"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_rsa_key.pub"
# Machine ID
"/etc/machine-id"
# ZFS cache
"/etc/zfs/zpool.cache"
];
users.${username} = {
directories = [
".ssh"
".config/fish"
".local/share/fish"
".cache"
".config/helix"
];
files = [
".bash_history"
];
};
};
}