calapi/modules/nixos/default.nix

67 lines
1.4 KiB
Nix
Raw Normal View History

2026-01-05 13:34:31 +01:00
{ config, lib, perSystem, ... }:
let
cfg = config.services.calapi;
types = lib.types;
in
{
options.services.calapi = {
enable = lib.mkEnableOption "calapi";
port = lib.mkOption {
type = types.int;
default = 8434;
};
proxy = lib.mkOption {
type = types.enum [
"nginx"
];
default = null;
example = "nginx";
};
nginx.virtualHost = lib.mkOption {
example = lib.literalExpression ''
{
serverName = "survey.example.org";
forceSSL = true;
enableACME = true;
}
'';
};
};
config = lib.mkIf cfg.enable {
users = {
groups."calapi" = {};
users."calapi" = {
group = "calapi";
isSystemUser = true;
};
};
systemd.services.calapi = {
enable = true;
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${perSystem.calapi.default}/bin/calapi --port ${toString cfg.port}";
Type = "exec";
User = "calapi";
};
};
services.nginx.virtualHosts = lib.mkIf (cfg.proxy == "nginx") {
"${cfg.nginx.virtualHost.serverName}" = lib.mkMerge [
cfg.nginx.virtualHost
{
locations."/" = {
proxyPass = "http://127.0.0.1:${toString cfg.port}/";
};
}
];
};
};
}