grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / web-apps / mealie.nix
blobab94103954e13851c4fb0779ffc21d0d2b642826
1 { config, lib, pkgs, ...}:
2 let
3   cfg = config.services.mealie;
4   pkg = cfg.package;
5 in
7   options.services.mealie = {
8     enable = lib.mkEnableOption "Mealie, a recipe manager and meal planner";
10     package = lib.mkPackageOption pkgs "mealie" { };
12     listenAddress = lib.mkOption {
13       type = lib.types.str;
14       default = "0.0.0.0";
15       description = "Address on which the service should listen.";
16     };
18     port = lib.mkOption {
19       type = lib.types.port;
20       default = 9000;
21       description = "Port on which to serve the Mealie service.";
22     };
24     settings = lib.mkOption {
25       type = with lib.types; attrsOf anything;
26       default = {};
27       description = ''
28         Configuration of the Mealie service.
30         See [the mealie documentation](https://nightly.mealie.io/documentation/getting-started/installation/backend-config/) for available options and default values.
31       '';
32       example = {
33         ALLOW_SIGNUP = "false";
34       };
35     };
37     credentialsFile = lib.mkOption {
38       type = with lib.types; nullOr path;
39       default = null;
40       example = "/run/secrets/mealie-credentials.env";
41       description = ''
42         File containing credentials used in mealie such as {env}`POSTGRES_PASSWORD`
43         or sensitive LDAP options.
45         Expects the format of an `EnvironmentFile=`, as described by {manpage}`systemd.exec(5)`.
46       '';
47     };
48   };
50   config = lib.mkIf cfg.enable {
51     systemd.services.mealie = {
52       description = "Mealie, a self hosted recipe manager and meal planner";
54       after = [ "network-online.target" ];
55       wants = [ "network-online.target" ];
56       wantedBy = [ "multi-user.target" ];
58       environment = {
59         PRODUCTION = "true";
60         API_PORT = toString cfg.port;
61         BASE_URL = "http://localhost:${toString cfg.port}";
62         DATA_DIR = "/var/lib/mealie";
63         CRF_MODEL_PATH = "/var/lib/mealie/model.crfmodel";
64       } // (builtins.mapAttrs (_: val: toString val) cfg.settings);
66       serviceConfig = {
67         DynamicUser = true;
68         User = "mealie";
69         ExecStartPre = "${pkg}/libexec/init_db";
70         ExecStart = "${lib.getExe pkg} -b ${cfg.listenAddress}:${builtins.toString cfg.port}";
71         EnvironmentFile = lib.mkIf (cfg.credentialsFile != null) cfg.credentialsFile;
72         StateDirectory = "mealie";
73         StandardOutput="journal";
74       };
75     };
76   };