summaryrefslogtreecommitdiff
path: root/modules/xnet/persist.nix
diff options
context:
space:
mode:
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;
+}