grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / workout-tracker.nix
blob13555504be30294b5909eb7a2942f32d5e6295d1
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 let
9   inherit (lib) types;
10   cfg = config.services.workout-tracker;
11   stateDir = "workout-tracker";
15   options = {
16     services.workout-tracker = {
17       enable = lib.mkEnableOption "workout tracking web application for personal use (or family, friends), geared towards running and other GPX-based activities";
19       package = lib.mkPackageOption pkgs "workout-tracker" { };
21       address = lib.mkOption {
22         type = types.str;
23         default = "127.0.0.1";
24         description = "Web interface address.";
25       };
27       port = lib.mkOption {
28         type = types.port;
29         default = 8080;
30         description = "Web interface port.";
31       };
33       environmentFile = lib.mkOption {
34         type = types.nullOr types.path;
35         default = null;
36         example = "/run/keys/workout-tracker.env";
37         description = ''
38           An environment file as defined in {manpage}`systemd.exec(5)`.
40           Secrets like `WT_JWT_ENCRYPTION_KEY` may be passed to the service without adding them
41           to the world-readable Nix store.
42         '';
43       };
45       settings = lib.mkOption {
46         type = types.attrsOf types.str;
48         default = { };
49         description = ''
50           Extra config options.
51         '';
52         example = {
53           WT_LOGGING = "true";
54           WT_DEBUG = "false";
55           WT_DATABASE_DRIVER = "sqlite";
56           WT_DSN = "./database.db";
57         };
58       };
59     };
60   };
62   config = lib.mkIf cfg.enable {
63     systemd.services.workout-tracker = {
64       description = "A workout tracking web application for personal use (or family, friends), geared towards running and other GPX-based activities";
65       wantedBy = [ "multi-user.target" ];
66       environment = {
67         WT_BIND = "${cfg.address}:${toString cfg.port}";
68         WT_DATABASE_DRIVER = "sqlite";
69         WT_DSN = "./database.db";
70       } // cfg.settings;
71       serviceConfig = {
72         ExecStart = lib.getExe cfg.package;
73         DynamicUser = true;
74         StateDirectory = stateDir;
75         WorkingDirectory = "%S/${stateDir}";
76         Restart = "always";
77         EnvironmentFile = lib.optional (cfg.environmentFile != null) cfg.environmentFile;
78       };
79     };
80   };
82   meta.maintainers = with lib.maintainers; [ bhankas ];