From 2e44a3dd76a6b38a15c4384d5f113a993de8ea8f Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 2 May 2025 17:17:49 +0100 Subject: [PATCH 1/2] nixos/mealie: add 'database.createLocally' --- nixos/modules/services/web-apps/mealie.nix | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) 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; + } + ]; + }; }; } From b8e36dd3936db1c11e89f4c45b2f7dbe46454cf6 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 2 May 2025 17:18:50 +0100 Subject: [PATCH 2/2] nixosTests.mealie: use 'database.createLocally' --- nixos/tests/mealie.nix | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) 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) ''; } )