{ config, lib, pkgs, ... }: with lib; let cfg = config.services.pjournal; in { options = { services.pjournal = { package = mkOption { type = types.package; default = pkgs.callPackage ../pkgs/pjournal/default.nix {}; }; }; }; config = { environment.systemPackages = [ cfg.package ]; services.postgresql = { enable = true; ensureDatabases = ["pjournal" "pjournal_test"]; ensureUsers = [ { name = "pjournal"; ensurePermissions = { "DATABASE pjournal" = "ALL PRIVILEGES"; }; } { name = "pjournal_test"; ensurePermissions = { "DATABASE pjournal_test" = "ALL PRIVILEGES"; }; } ]; }; systemd.services.pjournal-test = { description = "pjournal test instance"; after = [ "multi-user.target" "postgresql.service" ]; wantedBy = ["multi-user.target"]; environment = { RUST_BACKTRACE = "1"; }; serviceConfig = { ExecStart = '' # This will fail the first time. Run pjournal init to initialize # the database. ${cfg.package}/bin/pjournal \ --database_url postgres://pjournal_test@/pjournal_test \ --port 8080 ''; User = "pjournal_test"; }; }; }; }