1
0
mirror of https://github.com/kmein/niveum synced 2026-03-16 10:11:08 +01:00
Files
niveum/modules/hledger.nix

87 lines
2.3 KiB
Nix
Raw Permalink Normal View History

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