diff --git a/devices/vps7/default.nix b/devices/vps7/default.nix index 7e793391..f1103b42 100644 --- a/devices/vps7/default.nix +++ b/devices/vps7/default.nix @@ -58,7 +58,7 @@ inputs: freshrss.enable = true; send.enable = true; huginn.enable = true; - fz-new-order.enable = true; + fz-new-order = {}; nginx.applications = { kkmeeting.enable = true; webdav.instances."webdav.chn.moe" = {}; }; httpapi.enable = true; gitea.enable = true; diff --git a/modules/services/fz-new-order/default.nix b/modules/services/fz-new-order/default.nix index 6f3a3b5e..a516e7f0 100644 --- a/modules/services/fz-new-order/default.nix +++ b/modules/services/fz-new-order/default.nix @@ -1,115 +1,106 @@ inputs: { - options.nixos.services.fz-new-order = let inherit (inputs.lib) mkOption types; in + options.nixos.services.fz-new-order = let inherit (inputs.lib) mkOption types; in mkOption { - enable = mkOption { type = types.bool; default = false; }; + type = types.nullOr (types.submodule {}); + default = null; }; - config = - let - inherit (inputs.config.nixos.services) fz-new-order; - inherit (inputs.localLib) attrsToList; - inherit (inputs.lib) mkIf; - inherit (builtins) map listToAttrs toString concatLists; - in mkIf fz-new-order.enable + config = let inherit (inputs.config.nixos.services) fz-new-order; in inputs.lib.mkIf (fz-new-order != null) + { + users = { - users = + users.fz-new-order = { - users.fz-new-order = - { - uid = inputs.config.nixos.user.uid.fz-new-order; - group = "fz-new-order"; - home = "/var/lib/fz-new-order"; - createHome = true; - isSystemUser = true; - }; - groups.fz-new-order.gid = inputs.config.nixos.user.gid.fz-new-order; - }; - systemd = - { - timers.fz-new-order = - { - wantedBy = [ "timers.target" ]; - timerConfig = - { - OnBootSec = "10m"; - OnUnitActiveSec = "10m"; - Unit = "fz-new-order.service"; - }; - }; - services.fz-new-order = rec - { - description = "fz-new-order"; - after = [ "network.target" ]; - requires = after; - serviceConfig = - { - User = inputs.config.users.users."fz-new-order".name; - Group = inputs.config.users.users."fz-new-order".group; - WorkingDirectory = "/var/lib/fz-new-order"; - ExecStart = - let - src = inputs.pkgs.substituteAll - { - src = ./main.cpp; - config_file = inputs.config.sops.templates."fz-new-order/config.json".path; - }; - binary = inputs.pkgs.stdenv.mkDerivation - { - name = "fz-new-order"; - inherit src; - buildInputs = with inputs.pkgs; [ jsoncpp.dev cereal fmt httplib ]; - dontUnpack = true; - buildPhase = - '' - runHook preBuild - g++ -std=c++20 -O2 -o fz-new-order ${src} -ljsoncpp -lfmt - runHook postBuild - ''; - installPhase = - '' - runHook preInstall - mkdir -p $out/bin - cp fz-new-order $out/bin/fz-new-order - runHook postInstall - ''; - }; - in "${binary}/bin/fz-new-order"; - }; - }; - tmpfiles.rules = - [ - "d /var/lib/fz-new-order 0700 fz-new-order fz-new-order" - "Z /var/lib/fz-new-order - fz-new-order fz-new-order" - ]; - }; - sops = let userNum = 6; configNum = 2; in - { - templates."fz-new-order/config.json" = - { - owner = inputs.config.users.users."fz-new-order".name; - group = inputs.config.users.users."fz-new-order".group; - content = let placeholder = inputs.config.sops.placeholder; in builtins.toJSON - { - manager = placeholder."fz-new-order/manager"; - token = placeholder."fz-new-order/token"; - uids = map (j: placeholder."fz-new-order/uids/user${toString j}") (builtins.genList (n: n) userNum); - config = map - (i: listToAttrs (map - (attrName: { name = attrName; value = placeholder."fz-new-order/config${toString i}/${attrName}"; }) - [ "username" "password" "comment" ])) - (builtins.genList (n: n) configNum); - }; - }; - secrets = - { "fz-new-order/manager" = {}; "fz-new-order/token" = {}; } - // (listToAttrs (map - (i: { name = "fz-new-order/uids/user${toString i}"; value = {}; }) - (builtins.genList (n: n) userNum))) - // (listToAttrs (concatLists (map - (i: map - (attrName: { name = "fz-new-order/config${toString i}/${attrName}"; value = {}; }) - [ "username" "password" "comment" ]) - (builtins.genList (n: n) configNum)))); + uid = inputs.config.nixos.user.uid.fz-new-order; + group = "fz-new-order"; + home = "/var/lib/fz-new-order"; + createHome = true; + isSystemUser = true; }; + groups.fz-new-order.gid = inputs.config.nixos.user.gid.fz-new-order; }; + systemd = + { + timers.fz-new-order = + { + wantedBy = [ "timers.target" ]; + timerConfig = { OnBootSec = "10m"; OnUnitActiveSec = "10m"; Unit = "fz-new-order.service"; }; + }; + services.fz-new-order = rec + { + description = "fz-new-order"; + after = [ "network.target" ]; + requires = after; + serviceConfig = + { + User = inputs.config.users.users."fz-new-order".name; + Group = inputs.config.users.users."fz-new-order".group; + WorkingDirectory = "/var/lib/fz-new-order"; + ExecStart = + let + src = inputs.pkgs.substituteAll + { + src = ./main.cpp; + config_file = inputs.config.sops.templates."fz-new-order/config.json".path; + }; + binary = inputs.pkgs.stdenv.mkDerivation + { + name = "fz-new-order"; + inherit src; + buildInputs = with inputs.pkgs; [ jsoncpp.dev cereal fmt httplib ]; + dontUnpack = true; + buildPhase = + '' + runHook preBuild + g++ -std=c++20 -O2 -o fz-new-order ${src} -ljsoncpp -lfmt + runHook postBuild + ''; + installPhase = + '' + runHook preInstall + mkdir -p $out/bin + cp fz-new-order $out/bin/fz-new-order + runHook postInstall + ''; + }; + in "${binary}/bin/fz-new-order"; + }; + }; + tmpfiles.rules = + [ + "d /var/lib/fz-new-order 0700 fz-new-order fz-new-order" + "Z /var/lib/fz-new-order - fz-new-order fz-new-order" + ]; + }; + sops = let userNum = 6; configNum = 2; in + { + templates."fz-new-order/config.json" = + { + owner = inputs.config.users.users."fz-new-order".name; + group = inputs.config.users.users."fz-new-order".group; + content = let placeholder = inputs.config.sops.placeholder; in builtins.toJSON + { + manager = placeholder."fz-new-order/manager"; + token = placeholder."fz-new-order/token"; + uids = builtins.map (j: placeholder."fz-new-order/uids/user${builtins.toString j}") + (builtins.genList (n: n) userNum); + config = builtins.map + (i: builtins.listToAttrs (builtins.map + (attrName: { name = attrName; value = placeholder."fz-new-order/config${toString i}/${attrName}"; }) + [ "username" "password" "comment" ])) + (builtins.genList (n: n) configNum); + }; + }; + secrets = + { "fz-new-order/manager" = {}; "fz-new-order/token" = {}; } + // (builtins.listToAttrs (builtins.map + (i: { name = "fz-new-order/uids/user${toString i}"; value = {}; }) + (builtins.genList (n: n) userNum))) + // (builtins.listToAttrs (builtins.concatLists (builtins.map + (i: builtins.map + (attrName: { name = "fz-new-order/config${builtins.toString i}/${attrName}"; value = {}; }) + [ "username" "password" "comment" ]) + (builtins.genList (n: n) configNum)))); + }; + }; }