refactor
This commit is contained in:
parent
66c05f9093
commit
45d6f4b0f3
205 changed files with 9040 additions and 342 deletions
79
modules/nixos/services/homer/default.nix
Normal file
79
modules/nixos/services/homer/default.nix
Normal file
|
@ -0,0 +1,79 @@
|
|||
{ lib, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
with lib.plusultra;
|
||||
let
|
||||
cfg = config.plusultra.services.homer;
|
||||
|
||||
yaml-format = pkgs.formats.yaml { };
|
||||
settings-yaml = yaml-format.generate "config.yml" cfg.settings;
|
||||
|
||||
settings-path =
|
||||
if cfg.settings-path != null then
|
||||
cfg.settings-path
|
||||
else
|
||||
builtins.toString settings-yaml;
|
||||
in
|
||||
{
|
||||
options.plusultra.services.homer = {
|
||||
enable = mkEnableOption "Homer";
|
||||
|
||||
package = mkOpt types.package pkgs.plusultra.homer "The package of Homer assets to use.";
|
||||
|
||||
settings = mkOpt yaml-format.type { } "Configuration for Homer's config.yml file.";
|
||||
settings-path = mkOpt (types.nullOr types.path) null "A replacement for the generated config.yml file.";
|
||||
|
||||
host = mkOpt (types.nullOr types.str) null "The host to serve Homer on.";
|
||||
|
||||
nginx = {
|
||||
forceSSL = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether or not to force the use of SSL.";
|
||||
};
|
||||
};
|
||||
|
||||
acme = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description =
|
||||
"Whether or not to automatically fetch and configure SSL certs.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.host != null;
|
||||
message = "plusultra.services.homer.host must be set.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.settings-path != null -> cfg.settings == { };
|
||||
message = "plusultra.services.homer.settings and plusultra.services.homer.settings-path are mutually exclusive.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.nginx.forceSSL -> cfg.acme.enable;
|
||||
message = "plusultra.services.homer.nginx.forceSSL requires setting plusultra.services.homer.acme.enable to true.";
|
||||
}
|
||||
];
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
|
||||
virtualHosts."${cfg.host}" = {
|
||||
enableACME = cfg.acme.enable;
|
||||
forceSSL = cfg.nginx.forceSSL;
|
||||
|
||||
locations."/" = {
|
||||
root = "${cfg.package}/share/homer";
|
||||
};
|
||||
|
||||
locations."= /assets/config.yml" = {
|
||||
alias = settings-path;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue