Auto-create persist directories.

This commit is contained in:
Tom Alexander 2025-03-30 17:26:05 -04:00
parent 33f45c56bf
commit c173ea87cf
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
9 changed files with 116 additions and 157 deletions

View File

@ -18,6 +18,7 @@
./roles/sm64ex
./roles/steam_rom_manager
./util/unfree_polyfill
./util/persist_symlink
];
home.username = "deck";

View File

@ -1,4 +1,3 @@
# MANUAL: mkdir -p ~/.persist/.local/share/2ship/saves
{
config,
lib,
@ -39,14 +38,7 @@ in
source = ./files/2ship2harkinian.json;
};
home.persistence."/home/deck/.persist" = {
directories = [
{
directory = ".local/share/2ship/saves";
method = "symlink";
}
];
};
me.persist.directories = [ ".local/share/2ship/saves" ];
home.persistence."/home/deck/.state" = {
files = [
".local/share/2ship/mm.o2r"

View File

@ -1,4 +1,3 @@
# MANUAL: mkdir -p ~/.persist/.local/share/ares/saves ~/.persist/.local/share/ares/screenshots
{
config,
lib,
@ -34,18 +33,10 @@ in
steam_ares
];
home.persistence."/home/deck/.persist" = {
directories = [
{
directory = ".local/share/ares/saves";
method = "symlink";
}
{
directory = ".local/share/ares/screenshots";
method = "symlink";
}
];
};
me.persist.directories = [
".local/share/ares/saves"
".local/share/ares/screenshots"
];
home.file.".local/share/ares/settings.bml" = {
source = ./files/settings.bml;

View File

@ -2,7 +2,6 @@
config,
lib,
pkgs,
home-manager,
...
}:
@ -48,63 +47,18 @@ in
source = ./files/GCPadNew.ini;
};
home.persistence."/home/deck/.persist" = {
directories = [
{
# The system memory
directory = ".local/share/dolphin-emu/Wii";
method = "symlink";
}
{
# Memory card(s)
directory = ".local/share/dolphin-emu/Load";
method = "symlink";
}
{
# Gamecube
directory = ".local/share/dolphin-emu/GC";
method = "symlink";
}
{
# Screenshots
directory = ".local/share/dolphin-emu/ScreenShots";
method = "symlink";
}
{
# GameBoy Advanced
directory = ".local/share/dolphin-emu/GBA/Saves";
method = "symlink";
}
];
};
home.persistence."/home/deck/.state" = {
directories = [
{
directory = ".cache/dolphin-emu";
method = "symlink";
}
{
directory = ".local/share/dolphin-emu/Shaders";
method = "symlink";
}
{
directory = ".local/share/dolphin-emu/StateSaves";
method = "symlink";
}
];
};
home.activation = {
createDolphinDirectories = home-manager.lib.hm.dag.entryAfter [ "writeBoundary" ] ''
for dir in '.local/share/dolphin-emu/Wii' '.cache/dolphin-emu' '.local/share/dolphin-emu/Load' '.local/share/dolphin-emu/GC' '.local/share/dolphin-emu/ScreenShots' '.local/share/dolphin-emu/GBA/Saves' '.local/share/dolphin-emu/Shaders' '.local/share/dolphin-emu/StateSaves' ; do
echo "checking $dir"
if [[ ! -d "$HOME/.persist/$dir" ]]; then
$DRY_RUN_CMD mkdir $VERBOSE_ARG -p "$HOME/.persist/$dir"
fi
done
'';
};
me.persist.directories = [
".local/share/dolphin-emu/Wii" # The system memory
".local/share/dolphin-emu/Load" # Memory card(s)
".local/share/dolphin-emu/GC" # Gamecube
".local/share/dolphin-emu/ScreenShots" # Screenshots
".local/share/dolphin-emu/GBA/Saves" # GameBoy Advanced
];
me.state.directories = [
".cache/dolphin-emu"
".local/share/dolphin-emu/Shaders"
".local/share/dolphin-emu/StateSaves"
];
nixpkgs.overlays = [
(

View File

@ -1,4 +1,3 @@
# MANUAL: mkdir -p ~/.persist/.config/PCSX2/memcards ~/.state/.config/PCSX2/cache ~/.state/.config/PCSX2/sstates ~/.state/.config/PCSX2/snaps ~/.state/.config/PCSX2/covers ~/.state/.config/PCSX2/videos
{
config,
lib,
@ -36,38 +35,14 @@ in
source = ./files/PCSX2.ini;
};
home.persistence."/home/deck/.persist" = {
directories = [
{
directory = ".config/PCSX2/memcards";
method = "symlink";
}
];
};
home.persistence."/home/deck/.state" = {
directories = [
{
directory = ".config/PCSX2/cache";
method = "symlink";
}
{
directory = ".config/PCSX2/sstates";
method = "symlink";
}
{
directory = ".config/PCSX2/snaps";
method = "symlink";
}
{
directory = ".config/PCSX2/covers";
method = "symlink";
}
{
directory = ".config/PCSX2/videos";
method = "symlink";
}
];
};
me.persist.directories = [ ".config/PCSX2/memcards" ];
me.state.directories = [
".config/PCSX2/cache"
".config/PCSX2/sstates"
".config/PCSX2/snaps"
".config/PCSX2/covers"
".config/PCSX2/videos"
];
nixpkgs.overlays = [
(

View File

@ -1,4 +1,3 @@
# MANUAL: mkdir -p ~/.state/.cache/rpcs3 ~/.persist/.config/rpcs3/dev_hdd0 ~/.persist/.config/rpcs3/dev_hdd1 ~/.persist/.config/rpcs3/savestates ~/.persist/.config/rpcs3/dev_usb000 ~/.persist/.config/rpcs3/dev_flash
{
config,
lib,
@ -35,39 +34,14 @@ in
# .config/rpcs3/config.yml
# .config/rpcs3/GuiConfigs/CurrentSettings.ini
home.persistence."/home/deck/.persist" = {
directories = [
{
directory = ".config/rpcs3/dev_hdd0";
method = "symlink";
}
{
directory = ".config/rpcs3/dev_hdd1";
method = "symlink";
}
{
directory = ".config/rpcs3/savestates";
method = "symlink";
}
{
directory = ".config/rpcs3/dev_usb000";
method = "symlink";
}
{
# Seems to be where the firmware is installed.
directory = ".config/rpcs3/dev_flash";
method = "symlink";
}
];
};
home.persistence."/home/deck/.state" = {
directories = [
{
directory = ".cache/rpcs3";
method = "symlink";
}
];
};
me.persist.directories = [
".config/rpcs3/dev_hdd0"
".config/rpcs3/dev_hdd1"
".config/rpcs3/savestates"
".config/rpcs3/dev_usb000"
".config/rpcs3/dev_flash" # Seems to be where the firmware is installed.
];
me.state.directories = [ ".cache/rpcs3" ];
nixpkgs.overlays = [
(

View File

@ -1,4 +1,3 @@
# MANUAL: mkdir -p ~/.persist/.local/share/soh/Save
{
config,
lib,
@ -39,14 +38,7 @@ in
source = ./files/shipofharkinian.json;
};
home.persistence."/home/deck/.persist" = {
directories = [
{
directory = ".local/share/soh/Save";
method = "symlink";
}
];
};
me.persist.directories = [ ".local/share/soh/Save" ];
home.persistence."/home/deck/.state" = {
files = [
".local/share/soh/oot.otr"

View File

@ -1,4 +1,3 @@
# MANUAL: mkdir -p ~/.persist/.config/steam-rom-manager/userData
{
stdenv,
config,
@ -29,6 +28,8 @@ in
package
];
me.persist.directories = [ ".config/steam-rom-manager/userData" ];
home.persistence."/home/deck/.persist" = {
directories = [
{

View File

@ -0,0 +1,79 @@
{
config,
lib,
pkgs,
home-manager,
...
}:
{
imports = [ ];
options.me = {
persist.directories = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ ".local/share/dolphin-emu/Wii" ];
description = "List of folders relative to the home directory to persist.";
};
state.directories = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [ ".local/share/dolphin-emu/Shaders" ];
description = "List of folders relative to the home directory to keep as state.";
};
};
config = lib.mkMerge [
(lib.mkIf (config.me.persist.directories != [ ]) {
home.persistence."/home/deck/.persist" = {
directories = (
builtins.map (entry: {
directory = entry;
method = "symlink";
}) config.me.persist.directories
);
};
home.activation = {
createPersistDirectories = home-manager.lib.hm.dag.entryAfter [ "writeBoundary" ] (
let
dirlist = lib.strings.escapeShellArgs config.me.persist.directories;
in
''
for dir in ${dirlist} ; do
if [[ ! -d "$HOME/.persist/$dir" ]]; then
$DRY_RUN_CMD mkdir $VERBOSE_ARG -p "$HOME/.persist/$dir"
fi
done
''
);
};
})
(lib.mkIf (config.me.state.directories != [ ]) {
home.persistence."/home/deck/.state" = {
directories = (
builtins.map (entry: {
directory = entry;
method = "symlink";
}) config.me.state.directories
);
};
home.activation = {
createStateDirectories = home-manager.lib.hm.dag.entryAfter [ "writeBoundary" ] (
let
dirlist = lib.strings.escapeShellArgs config.me.state.directories;
in
''
for dir in ${dirlist} ; do
if [[ ! -d "$HOME/.state/$dir" ]]; then
$DRY_RUN_CMD mkdir $VERBOSE_ARG -p "$HOME/.state/$dir"
fi
done
''
);
};
})
];
}