nixos/stargazer: remove with lib

This commit is contained in:
gaykitty 2023-04-29 21:02:44 -04:00 committed by Anderson Torres
parent d4f3dd4f71
commit 3056e9c395

View File

@ -1,7 +1,5 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
let let
cfg = config.services.stargazer; cfg = config.services.stargazer;
globalSection = '' globalSection = ''
@ -15,9 +13,9 @@ let
[:tls] [:tls]
store = ${toString cfg.store} store = ${toString cfg.store}
organization = ${cfg.certOrg} organization = ${cfg.certOrg}
gen-certs = ${boolToString cfg.genCerts} gen-certs = ${lib.boolToString cfg.genCerts}
regen-certs = ${boolToString cfg.regenCerts} regen-certs = ${lib.boolToString cfg.regenCerts}
${optionalString (cfg.certLifetime != "") "cert-lifetime = ${cfg.certLifetime}"} ${lib.optionalString (cfg.certLifetime != "") "cert-lifetime = ${cfg.certLifetime}"}
''; '';
genINI = lib.generators.toINI { }; genINI = lib.generators.toINI { };
@ -36,38 +34,38 @@ let
in in
{ {
options.services.stargazer = { options.services.stargazer = {
enable = mkEnableOption (lib.mdDoc "Stargazer Gemini server"); enable = lib.mkEnableOption (lib.mdDoc "Stargazer Gemini server");
listen = lib.mkOption { listen = lib.mkOption {
type = types.listOf types.str; type = lib.types.listOf lib.types.str;
default = [ "0.0.0.0" ] ++ optional config.networking.enableIPv6 "[::0]"; default = [ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]";
defaultText = literalExpression ''[ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]"''; defaultText = lib.literalExpression ''[ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]"'';
example = literalExpression ''[ "10.0.0.12" "[2002:a00:1::]" ]''; example = lib.literalExpression ''[ "10.0.0.12" "[2002:a00:1::]" ]'';
description = lib.mdDoc '' description = lib.mdDoc ''
Address and port to listen on. Address and port to listen on.
''; '';
}; };
connectionLogging = lib.mkOption { connectionLogging = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = true; default = true;
description = lib.mdDoc "Whether or not to log connections to stdout."; description = lib.mdDoc "Whether or not to log connections to stdout.";
}; };
ipLog = lib.mkOption { ipLog = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = lib.mdDoc "Log client IP addresses in the connection log."; description = lib.mdDoc "Log client IP addresses in the connection log.";
}; };
ipLogPartial = lib.mkOption { ipLogPartial = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = false; default = false;
description = lib.mdDoc "Log partial client IP addresses in the connection log."; description = lib.mdDoc "Log partial client IP addresses in the connection log.";
}; };
requestTimeout = lib.mkOption { requestTimeout = lib.mkOption {
type = types.int; type = lib.types.int;
default = 5; default = 5;
description = lib.mdDoc '' description = lib.mdDoc ''
Number of seconds to wait for the client to send a complete Number of seconds to wait for the client to send a complete
@ -76,7 +74,7 @@ in
}; };
responseTimeout = lib.mkOption { responseTimeout = lib.mkOption {
type = types.int; type = lib.types.int;
default = 0; default = 0;
description = lib.mdDoc '' description = lib.mdDoc ''
Number of seconds to wait for the client to send a complete Number of seconds to wait for the client to send a complete
@ -86,7 +84,7 @@ in
}; };
store = lib.mkOption { store = lib.mkOption {
type = types.path; type = lib.types.path;
default = /var/lib/gemini/certs; default = /var/lib/gemini/certs;
description = lib.mdDoc '' description = lib.mdDoc ''
Path to the certificate store on disk. This should be a Path to the certificate store on disk. This should be a
@ -95,7 +93,7 @@ in
}; };
certOrg = lib.mkOption { certOrg = lib.mkOption {
type = types.str; type = lib.types.str;
default = "stargazer"; default = "stargazer";
description = lib.mdDoc '' description = lib.mdDoc ''
The name of the organization responsible for the X.509 The name of the organization responsible for the X.509
@ -104,7 +102,7 @@ in
}; };
genCerts = lib.mkOption { genCerts = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = true; default = true;
description = lib.mdDoc '' description = lib.mdDoc ''
Set to false to disable automatic certificate generation. Set to false to disable automatic certificate generation.
@ -113,7 +111,7 @@ in
}; };
regenCerts = lib.mkOption { regenCerts = lib.mkOption {
type = types.bool; type = lib.types.bool;
default = true; default = true;
description = lib.mdDoc '' description = lib.mdDoc ''
Set to false to turn off automatic regeneration of expired certificates. Set to false to turn off automatic regeneration of expired certificates.
@ -122,13 +120,13 @@ in
}; };
certLifetime = lib.mkOption { certLifetime = lib.mkOption {
type = types.str; type = lib.types.str;
default = ""; default = "";
description = lib.mdDoc '' description = lib.mdDoc ''
How long certs generated by Stargazer should live for. How long certs generated by Stargazer should live for.
Certs live forever by default. Certs live forever by default.
''; '';
example = literalExpression "\"1y\""; example = lib.literalExpression "\"1y\"";
}; };
routes = lib.mkOption { routes = lib.mkOption {
@ -178,20 +176,20 @@ in
''; '';
}; };
user = mkOption { user = lib.mkOption {
type = types.str; type = lib.types.str;
default = "stargazer"; default = "stargazer";
description = lib.mdDoc "User account under which stargazer runs."; description = lib.mdDoc "User account under which stargazer runs.";
}; };
group = mkOption { group = lib.mkOption {
type = types.str; type = lib.types.str;
default = "stargazer"; default = "stargazer";
description = lib.mdDoc "Group account under which stargazer runs."; description = lib.mdDoc "Group account under which stargazer runs.";
}; };
}; };
config = mkIf cfg.enable { config = lib.mkIf cfg.enable {
systemd.services.stargazer = { systemd.services.stargazer = {
description = "Stargazer gemini server"; description = "Stargazer gemini server";
after = [ "network.target" ]; after = [ "network.target" ];
@ -207,19 +205,19 @@ in
# Create default cert store # Create default cert store
system.activationScripts.makeStargazerCertDir = system.activationScripts.makeStargazerCertDir =
optionalAttrs (cfg.store == /var/lib/gemini/certs) '' lib.optionalAttrs (cfg.store == /var/lib/gemini/certs) ''
mkdir -p /var/lib/gemini/certs mkdir -p /var/lib/gemini/certs
chown -R ${cfg.user}:${cfg.group} /var/lib/gemini/certs chown -R ${cfg.user}:${cfg.group} /var/lib/gemini/certs
''; '';
users.users = optionalAttrs (cfg.user == "stargazer") { users.users = lib.optionalAttrs (cfg.user == "stargazer") {
stargazer = { stargazer = {
group = cfg.group; group = cfg.group;
isSystemUser = true; isSystemUser = true;
}; };
}; };
users.groups = optionalAttrs (cfg.group == "stargazer") { users.groups = lib.optionalAttrs (cfg.group == "stargazer") {
stargazer = { }; stargazer = { };
}; };
}; };