brownpaper/mod.nix
2020-12-18 20:51:36 +01:00

63 lines
1.9 KiB
Nix

{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.services.brownpaper;
in
{
options.services.brownpaper = {
enable = mkEnableOption "brownpaper service";
listen = mkOption {
type = types.str;
default = "0.0.0.0";
};
port = mkOption {
type = types.int;
default = 3000;
};
dataDir = mkOption {
type = types.path;
default = "/var/lib/brownpaper";
};
user = mkOption {
type = types.str;
default = "brownpaper";
};
pgpKeys = mkOption {
type = with types; listOf path;
default = [ ];
};
};
config = mkIf cfg.enable {
users.users."${cfg.user}" = { };
systemd.services.brownpaper = {
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
path = [ pkgs.coreutils ];
environment.BROWNPAPER_STORAGE_DIR = "${toString cfg.dataDir}";
serviceConfig =
let
keyDir = pkgs.runCommand "brownpaper-keys" { } ''
mkdir -p $out
${concatStringsSep " && " (builtins.map (key: "ln -s ${key} $out") cfg.pgpKeys)}
'';
keyScript = pkgs.writeScript "brownpaper-keyscript" ''
DATADIR='${toString cfg.dataDir}'
[ -d "$DATADIR/keys" ] && mv "$DATADIR/keys" "$DATADIR/keys.bak"
[ -e "$DATADIR/keys" ] && rm "$DATADIR/keys"
ln -s ${keyDir} "$DATADIR/keys"
'';
in
{
ExecStartPre = "+${pkgs.bash}/bin/bash -c '${concatStringsSep " && "
([
"mkdir -p ${toString cfg.dataDir}"
"chown ${toString cfg.user} ${toString cfg.dataDir}"
] ++ (optionals (cfg.pgpKeys != [ ]) [ "${keyScript}" ])) }'";
ExecStart = "${(pkgs.callPackage ./. { inherit pkgs; src = ./.; }).server.rootCrate.build}/bin/brownpaper ${cfg.listen}:${toString cfg.port}";
User = cfg.user;
};
};
};
}