{ config, lib, pkgs, ... }: let osm_proposals = pkgs.callPackage ./default.nix {}; cfg = config.services.osm_proposals; in { options.services.osm_proposals = { enable = lib.mkEnableOption "osm_proposals"; virtualHost = lib.mkOption { type = lib.types.str; description = "Name of the nginx virtualhost to set up."; }; nginx = lib.mkOption { type = lib.types.submodule (import ); default = {}; }; }; config = lib.mkIf cfg.enable { services.nginx = { enable = true; virtualHosts.${cfg.virtualHost} = lib.mkMerge [ cfg.nginx { locations."/" = { root = "${osm_proposals}/share/osm-proposals"; }; locations."=/proposals.json" = { extraConfig = '' alias /var/lib/osm-proposals/proposals.json; ''; }; } ]; }; systemd.services.osm-proposals = { serviceConfig = { Type = "oneshot"; StateDirectory = "osm-proposals"; # creates /var/lib/osm-proposals ExecStart = "${osm_proposals}/bin/osm-proposals /var/lib/osm-proposals/proposals.json"; # Not using DynamicUser because then the StateDirectory becomes unreadable # by other users, even when setting StateDirectoryMode for some reason. }; startAt = "hourly"; }; }; }