Add home impermanence

This commit is contained in:
ItsDrike 2024-06-19 17:41:40 +02:00
parent 6a16de8d16
commit 9dd5d40494
Signed by: ItsDrike
GPG key ID: FA2745890B7048C0
4 changed files with 93 additions and 1 deletions

View file

@ -31,6 +31,7 @@ in
imports = [
./packages
./programs
./impermanence
];
config = {

View file

@ -0,0 +1,28 @@
{
lib,
osConfig,
inputs,
...
}: let
inherit (lib) mkIf;
cfg = osConfig.myOptions.system.impermanence.home;
in {
imports = [ inputs.impermanence.nixosModules.home-manager.impermanence ];
config = mkIf cfg.enable {
home.persistence."${cfg.persistentMountPoint}" = {
directories = [
".cache/nix"
] ++ cfg.extraDirectories;
files = [
] ++ cfg.extraFiles;
# Allow other users (such as root), to access files through the bind
# mounted directories listed in `directories`. Useful for `sudo` operations,
# Docker, etc. Requires NixOS configuration programs.fuse.userAllowOther = true;
allowOther = true;
};
};
}

View file

@ -50,10 +50,32 @@
];
};
home = {
enable = true;
persistentMountPoint = "/persist/home";
extraDirectories = [
"Downloads"
"Personal"
"Media"
"dots"
".local/share/gnupg"
".local/share/wakatime"
".local/share/nvim"
".local/state/nvim"
".local/share/zsh"
".local/cargo"
".local/go"
];
extraFiles = [
".config/git/git-credentials"
];
};
# Configure automatic root subvolume wiping on boot from initrd
autoWipeBtrfs = {
enable = true;
devices."/dev/disk/by-label/NIXOS-FS".subvolumes = [ "root" ];
devices."/dev/disk/by-label/NIXOS-FS".subvolumes = [ "root" "home" ];
};
};
};

View file

@ -34,6 +34,47 @@ in
Path to a persistent directory (usually a mount point to a
standalone partition / subvolume), which will hold the persistent
system state files.
This should point to the entire persistent partition, this setup
then expects this directory to contain `passwords` and `system` subdirectories.
'';
};
};
home = {
enable = mkEnableOption ''
the Impermanence module for persisting important state directories.
This requires home-manager.
'';
extraFiles = mkOption {
default = [];
type = types.listOf types.str;
example = literalExpression ''[".zshrc"]'';
description = ''
Additional files in home to link to persistent storage.
'';
};
extraDirectories = mkOption {
default = [];
type = types.listOf types.str;
example = literalExpression ''["Downloads"]'';
description = ''
Additional directories in home to link to persistent storage.
'';
};
persistentMountPoint = mkOption {
default = "/persist/home";
description = ''
Path to a persistent directory (usually a mount point to a
standalone partition / subvolume), which will hold the persistent
system state files.
This does not expect any subdirectories, all of the persistent home files
will be put directly in here. The user should be the owner of this direcotry.
'';
};
};