2019-04-19 15:02:05 +02:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
with lib;
|
|
|
|
|
let
|
|
|
|
|
cfg = config.niveum.hledger;
|
2019-07-03 22:12:10 +02:00
|
|
|
hledger-git = pkgs.writers.writeDashBin "hledger-git" ''
|
2019-07-07 10:48:16 +02:00
|
|
|
GIT="${pkgs.git}/bin/git -C $(dirname $LEDGER_FILE)"
|
|
|
|
|
if [ "$1" = entry ]; then
|
|
|
|
|
$GIT commit --all --message="$(date +%F)"
|
|
|
|
|
else
|
|
|
|
|
$GIT $*
|
|
|
|
|
fi
|
2019-07-03 22:12:10 +02:00
|
|
|
'';
|
2019-04-19 15:02:05 +02:00
|
|
|
in {
|
|
|
|
|
options.niveum.hledger = {
|
|
|
|
|
enable = mkEnableOption "hledger";
|
2019-04-21 15:22:40 +02:00
|
|
|
package = mkOption { type = types.package; default = pkgs.hledger; };
|
2019-07-03 21:45:35 +02:00
|
|
|
ledgerFile = mkOption { type = types.str; default = null; };
|
2019-04-19 15:02:05 +02:00
|
|
|
server = {
|
|
|
|
|
enable = mkEnableOption "hledger server";
|
|
|
|
|
port = mkOption { type = pkgs.unstable.lib.types.port; default = 5000; };
|
|
|
|
|
host = mkOption { type = types.str; default = "127.0.0.1"; };
|
|
|
|
|
capabilities = mkOption {
|
|
|
|
|
type = types.listOf (types.enum ["view" "add" "manage"]);
|
|
|
|
|
default = [ "view" "add" ];
|
|
|
|
|
};
|
|
|
|
|
flags = mkOption { type = types.listOf types.str; default = []; };
|
|
|
|
|
user = mkOption { type = types.attrs; };
|
2019-04-21 15:22:40 +02:00
|
|
|
package = mkOption { type = types.package; default = pkgs.hledger-web; };
|
2019-04-19 15:02:05 +02:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
2019-07-03 22:12:10 +02:00
|
|
|
environment.systemPackages = [ cfg.package hledger-git ];
|
2019-04-19 15:02:05 +02:00
|
|
|
|
2019-07-03 21:45:35 +02:00
|
|
|
environment.variables.LEDGER_FILE = mkIf (cfg.ledgerFile != null) cfg.ledgerFile;
|
|
|
|
|
|
2019-04-19 15:02:05 +02:00
|
|
|
systemd.services.hledger-web = mkIf cfg.server.enable {
|
|
|
|
|
description = "hledger server";
|
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
|
serviceConfig = {
|
|
|
|
|
Restart = "always";
|
|
|
|
|
ExecStart = ''
|
2019-04-21 15:22:40 +02:00
|
|
|
${cfg.server.package}/bin/hledger-web \
|
2019-04-19 15:02:05 +02:00
|
|
|
--port=${toString cfg.server.port} \
|
|
|
|
|
--host=${cfg.server.host} \
|
|
|
|
|
--capabilities=${concatStringsSep "," cfg.server.capabilities} \
|
|
|
|
|
${concatStringsSep " " cfg.server.flags}
|
|
|
|
|
'';
|
|
|
|
|
User = cfg.server.user.name;
|
|
|
|
|
PrivateTemp = true;
|
|
|
|
|
RuntimeDirectory = "hledger-web";
|
|
|
|
|
WorkingDirectory = "%t/hledger-web";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|