summaryrefslogtreecommitdiff
path: root/modules/xnet/persist.nix
diff options
context:
space:
mode:
authorKleidi Bujari <mail@4kb.net>2025-04-02 21:59:20 -0400
committerKleidi Bujari <mail@4kb.net>2025-04-02 21:59:20 -0400
commit09c2b6de63a6ff35348fcb2c2eb57b974f0a8a52 (patch)
treebd8f1d3a51f12cd98764ae572b00f0b32de62644 /modules/xnet/persist.nix
parentb1738c105de3bc0ba7cd27f68c9eb146439a0964 (diff)
downloaddepot-09c2b6de63a6ff35348fcb2c2eb57b974f0a8a52.tar.gz
depot-09c2b6de63a6ff35348fcb2c2eb57b974f0a8a52.tar.bz2
depot-09c2b6de63a6ff35348fcb2c2eb57b974f0a8a52.zip
automate project structure
Diffstat (limited to 'modules/xnet/persist.nix')
-rw-r--r--modules/xnet/persist.nix61
1 files changed, 61 insertions, 0 deletions
diff --git a/modules/xnet/persist.nix b/modules/xnet/persist.nix
new file mode 100644
index 0000000..10eb883
--- /dev/null
+++ b/modules/xnet/persist.nix
@@ -0,0 +1,61 @@
+{ config, lib, ... }:
+let
+ inherit (lib)
+ concatLists
+ isString
+ mkOption
+ types
+ ;
+
+in
+{
+ options.xnet.persist = mkOption {
+ type = types.listOf (types.either
+ types.str
+ (types.submodule {
+ options = {
+ path = mkOption {
+ type = types.str;
+ description = "Path to persist";
+ };
+ user = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = "User ID to set on the persisted directory";
+ };
+ group = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = "Group ID to set on the persisted directory";
+ };
+
+ mode = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = "Permissions to set";
+ };
+ };
+ }));
+ default = [ ];
+ description = "Automatically persisted state.";
+ };
+
+ config.systemd.tmpfiles.rules =
+ let
+ mkEntry = entry:
+ let
+ path = if isString entry then entry else entry.path;
+ user = if isString entry then "-" else entry.user;
+ group = if isString entry then "-" else entry.group;
+ mode = if isString entry then "-" else entry.mode;
+
+ dent = "d /persist${path} ${mode} ${user} ${group} - -";
+ link = "L+ ${path} - - - - /persist${path}";
+ perm = "Z ${mode} ${user} ${group} - -";
+ in
+ [ dent link perm ];
+
+ entries = map mkEntry config.xnet.persist;
+ in
+ concatLists entries;
+}