diff --git a/nixos/modules/services/web-apps/mealie.nix b/nixos/modules/services/web-apps/mealie.nix index e1fce845caa6f3..46571fea461720 100644 --- a/nixos/modules/services/web-apps/mealie.nix +++ b/nixos/modules/services/web-apps/mealie.nix @@ -50,13 +50,24 @@ in Expects the format of an `EnvironmentFile=`, as described by {manpage}`systemd.exec(5)`. ''; }; + + database = { + createLocally = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Configure local PostgreSQL database server for Mealie. + ''; + }; + }; }; config = lib.mkIf cfg.enable { systemd.services.mealie = { description = "Mealie, a self hosted recipe manager and meal planner"; - after = [ "network-online.target" ]; + after = [ "network-online.target" ] ++ lib.optional cfg.database.createLocally "postgresql.service"; + requires = lib.optional cfg.database.createLocally "postgresql.service"; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; @@ -78,5 +89,21 @@ in StandardOutput = "journal"; }; }; + + services.mealie.settings = lib.mkIf cfg.database.createLocally { + DB_ENGINE = "postgres"; + POSTGRES_URL_OVERRIDE = "postgresql://mealie:@/mealie?host=/run/postgresql"; + }; + + services.postgresql = lib.mkIf cfg.database.createLocally { + enable = true; + ensureDatabases = [ "mealie" ]; + ensureUsers = [ + { + name = "mealie"; + ensureDBOwnership = true; + } + ]; + }; }; } diff --git a/nixos/tests/mealie.nix b/nixos/tests/mealie.nix index 57bff29731d8a3..21e96dea411429 100644 --- a/nixos/tests/mealie.nix +++ b/nixos/tests/mealie.nix @@ -10,20 +10,35 @@ import ./make-test-python.nix ( ]; }; - nodes = { - server = { - services.mealie = { - enable = true; - port = 9001; + nodes = + let + sqlite = { + services.mealie = { + enable = true; + port = 9001; + }; }; + postgres = { + imports = [ sqlite ]; + services.mealie.database.createLocally = true; + }; + in + { + inherit sqlite postgres; }; - }; testScript = '' start_all() - server.wait_for_unit("mealie.service") - server.wait_for_open_port(9001) - server.succeed("curl --fail http://localhost:9001") + + def test_mealie(node): + node.wait_for_unit("mealie.service") + node.wait_for_open_port(9001) + node.succeed("curl --fail http://localhost:9001") + + test_mealie(sqlite) + simple.send_monitor_command("quit") + simple.wait_for_shutdown() + test_mealie(postgres) ''; } )