feat: impermanence prune script

This commit is contained in:
Patrick 2024-07-12 21:42:01 +02:00
parent 37bf94ca5b
commit 7665a7f89b
Signed by: patrick
GPG key ID: 451F95EFB8BECD0F
6 changed files with 88 additions and 14 deletions

View file

@ -6,8 +6,58 @@
}: let }: let
onlyHost = onlyHost =
lib.mkIf (!config.boot.isContainer); lib.mkIf (!config.boot.isContainer);
prune = folder:
pkgs.writers.writePython3Bin "impermanence-prune" {} ''
import os
import sys
mounts = [${
lib.concatStringsSep ", "
((map (x:
"\""
+ (
if x.home != null
then x.home + "/"
else ""
)
+ x.directory
+ "\"")
config.environment.persistence.${folder}.directories)
++ (map (x:
"\""
+ (
if x.home != null
then x.home + "/"
else ""
)
+ x.file
+ "\"")
config.environment.persistence.${folder}.files))
}] # noqa: E501
mounts = [os.path.normpath(x) for x in mounts]
mounts.sort()
real_mounts = mounts[:1]
for i in mounts[1:]:
if i.startswith(real_mounts[-1] + "/"):
continue
real_mounts.append(i)
erg = set()
for i in real_mounts:
dir = os.path.dirname(i)
try:
content = [dir + "/" + x for x in os.listdir("${folder}" + dir)]
for j in content:
if not any([x.startswith(j) for x in real_mounts]):
erg.add("${folder}" + j)
except PermissionError:
print(f"{dir} could not be accessed. Try running as root",
file=sys.stderr)
print("\n".join(erg))
'';
in { in {
# to allow all users to access hm managed persistent folders # to allow all users to access hm managed persistent folders
lib.scripts.impermanence.pruneScripts =
lib.mapAttrs (k: _: prune k)
config.environment.persistence;
programs.fuse.userAllowOther = true; programs.fuse.userAllowOther = true;
services.openssh.hostKeys = lib.mkForce [ services.openssh.hostKeys = lib.mkForce [
{ {

View file

@ -43,7 +43,6 @@
services = { services = {
xserver.xkb = { xserver.xkb = {
layout = "de"; layout = "de";
variant = "bone";
}; };
libinput = { libinput = {
touchpad = lib.mkForce { touchpad = lib.mkForce {

View file

@ -2,5 +2,6 @@ _final: prev: {
scripts = { scripts = {
usbguardw = prev.callPackage ./usbguardw.nix {}; usbguardw = prev.callPackage ./usbguardw.nix {};
clone-term = prev.callPackage ./clone-term.nix {}; clone-term = prev.callPackage ./clone-term.nix {};
impermanence-o = prev.callPackage ./impermanence-orphan.nix {};
}; };
} }

View file

@ -0,0 +1,17 @@
{writers}:
writers.writePython3Bin "find-orphaned" {} ''
import sys
import os
if len(sys.argv) != 2:
print("Please give a singular argument containing the folder to prune")
exit(1)
mountpoint = sys.argv[1]
if !os.path.exists(mountpoint)):
print("Argument has to exist")
exit(1)
with open("/proc/mounts", "r") as f:
mounts = [line.split() for line in f.readlines()]
toplevel =
current = [mountpoint]
print(os.listdir(mountpoint))
''

View file

@ -197,6 +197,16 @@ in {
xwayland.force_zero_scaling = true; xwayland.force_zero_scaling = true;
windowrulev2 = [ windowrulev2 = [
"immediate, class:^(cs2)$" "immediate, class:^(cs2)$"
"workspace 2,class:^(firefox)$"
"workspace 3,class:^(thunderbird)$"
"workspace 4,class:^(bottles)$"
"workspace 4,class:^(steam)$"
"workspace 4,class:^(prismlauncher)$"
"workspace 6,class:^(discord)$"
"workspace 6,class:^(WebCord)$"
"workspace 6,class:^(TeamSpeak 3)$"
"workspace 7,class:^(signal)$"
"workspace 7,class:^(TelegramDesktop)$"
]; ];
} }
(mkIf (nixosConfig.node.name == "desktopnix") { (mkIf (nixosConfig.node.name == "desktopnix") {
@ -215,19 +225,6 @@ in {
"GBM_BACKEND,nvidia-drm" "GBM_BACKEND,nvidia-drm"
"__GLX_VENDOR_LIBRARY_NAME,nvidia" "__GLX_VENDOR_LIBRARY_NAME,nvidia"
]; ];
windowrulev2 = [
"workspace 2,class:^(firefox)$"
"workspace 3,class:^(thunderbird)$"
"workspace 4,class:^(bottles)$"
"workspace 4,class:^(steam)$"
"workspace 4,class:^(prismlauncher)$"
"workspace 6,class:^(discord)$"
"workspace 6,class:^(WebCord)$"
"workspace 6,class:^(TeamSpeak 3)$"
"workspace 7,class:^(signal)$"
"workspace 7,class:^(TelegramDesktop)$"
];
workspace = [ workspace = [
"1, monitor:DP-3, default:true" "1, monitor:DP-3, default:true"
"2, monitor:DP-3" "2, monitor:DP-3"
@ -248,6 +245,15 @@ in {
"Unknown-1, disable" "Unknown-1, disable"
]; ];
workspace = [ workspace = [
"1, monitor:eDP-1, default:true"
"2, monitor:eDP-1"
"3, monitor:eDP-1"
"4, monitor:eDP-1"
"5, monitor:eDP-1"
"6, monitor:eDP-1"
"7, monitor:eDP-1"
"8, monitor:eDP-1"
"9, monitor:eDP-1"
]; ];
}) })
]; ];

View file

@ -44,6 +44,7 @@
".config/spotify" ".config/spotify"
".cache/spotify" ".cache/spotify"
".local/share/cargo" ".local/share/cargo"
".local/share/wallpapers"
]; ];
}; };
"/panzer/state".directories = "/panzer/state".directories =