nixpkgs/nixos/modules/services/misc/spoolman.nix
2025-09-01 22:19:40 +02:00

85 lines
2.1 KiB
Nix

{
lib,
pkgs,
config,
...
}:
let
cfg = config.services.spoolman;
in
{
options.services.spoolman = {
enable = lib.mkEnableOption "Spoolman, a filament spool inventory management system.";
environment = lib.mkOption {
type = lib.types.attrs;
default = { };
example = {
SPOOLMAN_DB_TYPE = "sqlite";
SPOOLMAN_LOGGING_LEVEL = "DEBUG";
SPOOLMAN_AUTOMATIC_BACKUP = "TRUE";
SPOOLMAN_BASE_PATH = "/spoolman";
SPOOLMAN_METRICS_ENABLED = "TRUE";
SPOOLMAN_CORS_ORIGIN = "source1.domain.com:p1, source2.domain.com:p2";
};
description = ''
Environment variables to be passed to the spoolman service.
Refer to https://github.com/Donkie/Spoolman/blob/master/.env.example for details on supported variables.
'';
};
openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Open the appropriate ports in the firewall for spoolman.
'';
};
listen = lib.mkOption {
type = lib.types.str;
default = "127.0.0.1";
example = "0.0.0.0";
description = "The IP address to bind the spoolman server to.";
};
port = lib.mkOption {
type = lib.types.port;
default = 7912;
description = ''
TCP port where spoolman web-gui listens.
'';
};
};
config = lib.mkIf cfg.enable {
systemd.services.spoolman = {
description = "A self-hosted filament spool inventory management system";
wantedBy = [ "multi-user.target" ];
environment = {
SPOOLMAN_DIR_DATA = "/var/lib/spoolman";
}
// cfg.environment;
serviceConfig = lib.mkMerge [
{
DynamicUser = true;
ExecStart = "${pkgs.spoolman}/bin/spoolman --host ${cfg.listen} --port ${toString cfg.port}";
StateDirectory = "spoolman";
}
];
};
networking.firewall = lib.mkIf cfg.openFirewall {
allowedTCPPorts = lib.optional (cfg.listen != "127.0.0.1") cfg.port;
};
};
meta = {
maintainers = with lib.maintainers; [ MayNiklas ];
};
}