Add custom impermanence module
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
hmConfig = config.home-manager.users.${username};
|
||||
in
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
@@ -17,12 +15,12 @@ in
|
||||
programs.adb.enable = true;
|
||||
services.gvfs.enable = true;
|
||||
|
||||
users.users.${username}.extraGroups = [ "adbusers" ];
|
||||
users.users.${user}.extraGroups = [ "adbusers" ];
|
||||
|
||||
environment.persistence."/persist".users.${username}.files = [
|
||||
"${hmConfig.xdg.relativeDataHome}/android/adbkey"
|
||||
"${hmConfig.xdg.relativeDataHome}/android/adbkey.pub"
|
||||
];
|
||||
environment.persistence."/persist" = {
|
||||
"${home}/.local/share/android/adbkey" = { };
|
||||
"${home}/.local/share/android/adbkey.pub" = { };
|
||||
};
|
||||
|
||||
home-manager.users.${username}.home.sessionVariables.ANDROID_USER_HOME = "${hmConfig.xdg.dataHome}/android";
|
||||
home-manager.users.${user}.home.sessionVariables.ANDROID_USER_HOME = "${home}/.local/share/android";
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{
|
||||
config,
|
||||
@@ -8,7 +9,7 @@
|
||||
...
|
||||
}:
|
||||
{
|
||||
home-manager.users.${username}.systemd.user.services.mpris-proxy = {
|
||||
home-manager.users.${user}.systemd.user.services.mpris-proxy = {
|
||||
Unit = {
|
||||
Description = "MPRIS proxy";
|
||||
Requires = [ "sound.target" ];
|
||||
|
@@ -1,12 +1,13 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
users.users.${username}.extraGroups = [
|
||||
users.users.${user}.extraGroups = [
|
||||
"video"
|
||||
"inputs"
|
||||
];
|
||||
|
||||
home-manager.users.${username}.home.packages = with pkgs; [ brightnessctl ];
|
||||
home-manager.users.${user}.home.packages = with pkgs; [ brightnessctl ];
|
||||
}
|
||||
|
@@ -1,9 +1,10 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ ... }:
|
||||
{
|
||||
home-manager.users.${username}.programs.btop = {
|
||||
home-manager.users.${user}.programs.btop = {
|
||||
enable = true;
|
||||
settings = {
|
||||
theme_background = false;
|
||||
|
@@ -1,15 +1,14 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
utils,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
hmConfig = config.home-manager.users.${username};
|
||||
in
|
||||
{
|
||||
virtualisation.docker.rootless = {
|
||||
enable = true;
|
||||
@@ -29,9 +28,16 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
environment.persistence."/persist".users.${username}.directories = [
|
||||
"${hmConfig.xdg.relativeDataHome}/docker"
|
||||
];
|
||||
environment.persistence."/persist"."${home}/.local/share/docker" = { };
|
||||
|
||||
home-manager.users.${username}.home.packages = with pkgs; [ docker-compose ];
|
||||
systemd.user = {
|
||||
services.docker.after = [
|
||||
config.environment.persistence."/persist"."${home}/.local/share/docker".mount
|
||||
];
|
||||
sockets.docker.after = [
|
||||
config.environment.persistence."/persist"."${home}/.local/share/docker".mount
|
||||
];
|
||||
};
|
||||
|
||||
home-manager.users.${user}.home.packages = with pkgs; [ docker-compose ];
|
||||
}
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ ... }:
|
||||
{
|
||||
home-manager.users.${username}.programs.fastfetch.enable = true;
|
||||
home-manager.users.${user}.programs.fastfetch.enable = true;
|
||||
}
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.${username}.home.packages = with pkgs; [ ffmpeg ];
|
||||
home-manager.users.${user}.home.packages = with pkgs; [ ffmpeg ];
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{
|
||||
config,
|
||||
@@ -8,11 +9,10 @@
|
||||
...
|
||||
}:
|
||||
let
|
||||
userConfig = config.users.users.${username};
|
||||
hmConfig = config.home-manager.users.${username};
|
||||
userConfig = config.users.users.${user};
|
||||
in
|
||||
{
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
lfs.enable = true;
|
||||
@@ -30,7 +30,7 @@ in
|
||||
core.fsmonitor = true;
|
||||
feature.manyFiles = true;
|
||||
fetch.writeCommitGraph = true;
|
||||
http.cookiefile = "${hmConfig.xdg.configHome}/git/cookies";
|
||||
http.cookiefile = "${home}/.config/git/cookies";
|
||||
};
|
||||
|
||||
hooks = {
|
||||
@@ -45,8 +45,8 @@ in
|
||||
};
|
||||
|
||||
sops.secrets = {
|
||||
"git/credentials".path = "${hmConfig.xdg.configHome}/git/credentials";
|
||||
"git/cookies".path = "${hmConfig.xdg.configHome}/git/cookies";
|
||||
"git/credentials".path = "${home}/.config/git/credentials";
|
||||
"git/cookies".path = "${home}/.config/git/cookies";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{
|
||||
config,
|
||||
@@ -7,16 +8,11 @@
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
userConfig = config.users.users.${username};
|
||||
hmConfig = config.home-manager.users.${username};
|
||||
gpgPath = "${hmConfig.xdg.dataHome}/gnupg";
|
||||
in
|
||||
{
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
homedir = gpgPath;
|
||||
homedir = "${home}/.local/share/gnupg";
|
||||
};
|
||||
|
||||
services.gpg-agent = {
|
||||
@@ -37,8 +33,8 @@ in
|
||||
gnupg
|
||||
];
|
||||
runtimeEnv = {
|
||||
GNUPGHOME = gpgPath;
|
||||
HOME = userConfig.home;
|
||||
GNUPGHOME = "${home}/.local/share/gnupg";
|
||||
HOME = home;
|
||||
};
|
||||
text = builtins.readFile ./import-gpg-keys.sh;
|
||||
}
|
||||
@@ -67,7 +63,7 @@ in
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
tmpfiles.rules = [ "d ${gpgPath} 0700 ${username} users -" ];
|
||||
tmpfiles.rules = [ "d ${home}/.local/share/gnupg 0700 ${user} users -" ];
|
||||
};
|
||||
|
||||
sops.secrets = {
|
||||
|
@@ -1,5 +1,6 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ config, inputs, ... }:
|
||||
{
|
||||
@@ -15,7 +16,7 @@
|
||||
useUserPackages = true;
|
||||
useGlobalPkgs = true;
|
||||
|
||||
users.${username} = {
|
||||
users.${user} = {
|
||||
home.stateVersion = "24.11";
|
||||
systemd.user.startServices = true;
|
||||
nix.settings = config.nix.settings;
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.${username}.home.packages = with pkgs; [ imagemagick ];
|
||||
home-manager.users.${user}.home.packages = with pkgs; [ imagemagick ];
|
||||
}
|
||||
|
@@ -1,9 +1,10 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
home.packages = with pkgs; [ ncdu ];
|
||||
|
||||
xdg.configFile."ncdu/config".text = ''
|
||||
|
@@ -1,9 +1,10 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ ... }:
|
||||
{
|
||||
home-manager.users.${username}.programs.neovim = {
|
||||
home-manager.users.${user}.programs.neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
|
@@ -1,9 +1,10 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ inputs, ... }:
|
||||
{
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
imports = [ inputs.nur.hmModules.nur ];
|
||||
};
|
||||
}
|
||||
|
@@ -1,9 +1,10 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
home.packages = with pkgs; [
|
||||
wireplumber
|
||||
playerctl
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ ... }:
|
||||
{
|
||||
home-manager.users.${username}.programs.ranger.enable = true;
|
||||
home-manager.users.${user}.programs.ranger.enable = true;
|
||||
}
|
||||
|
@@ -1,24 +1,18 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ config, inputs, ... }:
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
userConfig = config.users.users.${username};
|
||||
hmConfig = config.home-manager.users.${username};
|
||||
sopsKeyPath = "${hmConfig.xdg.relativeConfigHome}/sops-nix/key.txt";
|
||||
in
|
||||
{
|
||||
environment.persistence."/persist".users.${username}.files = [ sopsKeyPath ];
|
||||
environment.persistence."/persist"."${home}/.config/sops-nix/key.txt" = { };
|
||||
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
imports = [ inputs.sops-nix.homeManagerModules.sops ];
|
||||
|
||||
sops.age.keyFile = "${userConfig.home}/${sopsKeyPath}";
|
||||
home.sessionVariables.SOPS_AGE_KEY_FILE = "${userConfig.home}/${sopsKeyPath}";
|
||||
sops.age.keyFile = "${home}/.config/sops-nix/key.txt";
|
||||
home.sessionVariables.SOPS_AGE_KEY_FILE = "${home}/.config/sops-nix/key.txt";
|
||||
systemd.user.services.sops-nix.Unit.After = [
|
||||
config.environment.persistence."/persist"."${home}/.config/sops-nix/key.txt".mount
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ config, ... }:
|
||||
{ config, utils, ... }:
|
||||
{
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [ 22000 ];
|
||||
@@ -14,17 +15,17 @@
|
||||
sops.secrets = {
|
||||
# openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:3072
|
||||
"syncthing/key" = {
|
||||
owner = username;
|
||||
owner = user;
|
||||
group = "users";
|
||||
};
|
||||
# openssl req -new -x509 -key key.pem -out cert.pem -days 9999 -subj "/CN=syncthing"
|
||||
"syncthing/cert" = {
|
||||
owner = username;
|
||||
owner = user;
|
||||
group = "users";
|
||||
};
|
||||
};
|
||||
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
key = config.sops.secrets."syncthing/key".path;
|
||||
@@ -40,6 +41,9 @@
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services.syncthing.Unit.After = [ "sops-nix.service" ];
|
||||
systemd.user.services.syncthing.Unit.After = [
|
||||
"sops-nix.service"
|
||||
"local-fs.target"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ ... }:
|
||||
{
|
||||
home-manager.users.${username}.programs.tmux.enable = true;
|
||||
home-manager.users.${user}.programs.tmux.enable = true;
|
||||
}
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.${username}.home.packages = with pkgs; [ tree ];
|
||||
home-manager.users.${user}.home.packages = with pkgs; [ tree ];
|
||||
}
|
||||
|
@@ -1,7 +1,8 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home-manager.users.${username}.home.packages = with pkgs; [ wget ];
|
||||
home-manager.users.${user}.home.packages = with pkgs; [ wget ];
|
||||
}
|
||||
|
@@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@@ -1,23 +1,21 @@
|
||||
{
|
||||
username ? throw "username argument is required",
|
||||
user ? throw "user argument is required",
|
||||
home ? throw "home argument is required",
|
||||
}:
|
||||
{ config, ... }:
|
||||
let
|
||||
hmConfig = config.home-manager.users.${username};
|
||||
in
|
||||
{
|
||||
environment = {
|
||||
sessionVariables.ZDOTDIR = "$HOME/.config/zsh";
|
||||
persistence."/persist".users.${username}.directories = [ "${hmConfig.xdg.relativeDataHome}/zsh" ];
|
||||
persistence."/persist"."${home}/.local/share/zsh" = { };
|
||||
};
|
||||
|
||||
home-manager.users.${username} = {
|
||||
home-manager.users.${user} = {
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
dotDir = "${hmConfig.xdg.relativeConfigHome}/zsh";
|
||||
dotDir = ".config/zsh";
|
||||
autocd = true;
|
||||
history = {
|
||||
path = "${hmConfig.xdg.dataHome}/zsh/history";
|
||||
path = "${home}/.local/share/zsh/history";
|
||||
expireDuplicatesFirst = true;
|
||||
};
|
||||
historySubstringSearch.enable = true;
|
||||
|
Reference in New Issue
Block a user