Add custom impermanence module

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2024-08-08 22:03:15 +03:00
parent 5e57d63a54
commit 22e0150a65
69 changed files with 777 additions and 494 deletions

View File

@@ -1,26 +1,23 @@
{
username ? throw "username argument is required",
user ? throw "user argument is required",
home ? throw "home argument is required",
}:
{ config, pkgs, ... }:
let
userConfig = config.users.users.${username};
hmConfig = config.home-manager.users.${username};
in
{
environment.persistence."/persist".users.${username}.directories = with hmConfig.xdg.userDirs; [
relativeDesktop
relativeDocuments
relativeDownload
relativeMusic
relativePictures
relativeTemplates
relativeVideos
"VMs"
"git"
];
environment.persistence."/persist" = {
"${home}/Desktop" = { };
"${home}/Documents" = { };
"${home}/Downloads" = { };
"${home}/Music" = { };
"${home}/Pictures" = { };
"${home}/Templates" = { };
"${home}/Videos" = { };
"${home}/VMs" = { };
"${home}/git" = { };
};
home-manager.users.${username} = {
imports = [ ./options.nix ];
home-manager.users.${user} = {
imports = [ (import ./options.nix { inherit home; }) ];
xdg = {
enable = true;
@@ -34,8 +31,8 @@ in
userDirs = {
enable = true;
extraConfig = {
XDG_VM_DIR = "${userConfig.home}/VMs";
XDG_GIT_DIR = "${userConfig.home}/git";
XDG_VM_DIR = "${home}/VMs";
XDG_GIT_DIR = "${home}/git";
};
};
};

View File

@@ -1,3 +1,6 @@
{
home ? throw "home argument is required",
}:
{ config, lib, ... }:
let
cfg = config.xdg;
@@ -87,20 +90,23 @@ in
};
};
config.xdg = with lib; {
cacheHome = mkDefault "${config.home.homeDirectory}/${cfg.relativeCacheHome}";
configHome = mkDefault "${config.home.homeDirectory}/${cfg.relativeConfigHome}";
dataHome = mkDefault "${config.home.homeDirectory}/${cfg.relativeDataHome}";
stateHome = mkDefault "${config.home.homeDirectory}/${cfg.relativeStateHome}";
config.xdg =
with lib;
with cfg;
{
cacheHome = mkDefault "${home}/${relativeCacheHome}";
configHome = mkDefault "${home}/${relativeConfigHome}";
dataHome = mkDefault "${home}/${relativeDataHome}";
stateHome = mkDefault "${home}/${relativeStateHome}";
userDirs = {
desktop = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativeDesktop}";
documents = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativeDocuments}";
download = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativeDownload}";
music = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativeMusic}";
pictures = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativePictures}";
templates = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativeTemplates}";
videos = mkDefault "${config.home.homeDirectory}/${cfg.userDirs.relativeVideos}";
userDirs = with userDirs; {
desktop = mkDefault "${home}/${relativeDesktop}";
documents = mkDefault "${home}/${relativeDocuments}";
download = mkDefault "${home}/${relativeDownload}";
music = mkDefault "${home}/${relativeMusic}";
pictures = mkDefault "${home}/${relativePictures}";
templates = mkDefault "${home}/${relativeTemplates}";
videos = mkDefault "${home}/${relativeVideos}";
};
};
};
}