diff options
| author | seth <[email protected]> | 2023-10-01 10:41:09 -0400 |
|---|---|---|
| committer | seth <[email protected]> | 2023-10-01 10:49:46 -0400 |
| commit | a8630322f77dbb7be4810099a42352b9278996a1 (patch) | |
| tree | b8df66a7e5b9d8c31b27a4a9b357ff7e4b9d418f /parts/modules/nixos/server | |
| parent | 30f55e656d344e017f66ecbae8eb27cf13ba53bb (diff) | |
treewide!: flatten to parts/ layout
Diffstat (limited to 'parts/modules/nixos/server')
| -rw-r--r-- | parts/modules/nixos/server/acme.nix | 26 | ||||
| -rw-r--r-- | parts/modules/nixos/server/default.nix | 47 | ||||
| -rw-r--r-- | parts/modules/nixos/server/secrets.nix | 25 | ||||
| -rw-r--r-- | parts/modules/nixos/server/services/cloudflared.nix | 41 | ||||
| -rw-r--r-- | parts/modules/nixos/server/services/default.nix | 7 | ||||
| -rw-r--r-- | parts/modules/nixos/server/services/hercules.nix | 57 | ||||
| -rw-r--r-- | parts/modules/nixos/server/services/promtail.nix | 47 |
7 files changed, 250 insertions, 0 deletions
diff --git a/parts/modules/nixos/server/acme.nix b/parts/modules/nixos/server/acme.nix new file mode 100644 index 0000000..69e02ac --- /dev/null +++ b/parts/modules/nixos/server/acme.nix @@ -0,0 +1,26 @@ +{ + config, + lib, + self, + ... +}: let + cfg = config.server.acme; + inherit (lib) mkEnableOption mkIf; +in { + options.server.acme = { + enable = mkEnableOption "acme"; + }; + + config = mkIf cfg.enable { + age.secrets.cloudflareApiKey.file = "${self}/parts/secrets/systems/${config.networking.hostName}/cloudflareApiKey.age"; + + security.acme = { + acceptTerms = true; + defaults = { + email = "[email protected]"; + dnsProvider = "cloudflare"; + credentialsFile = config.age.secrets.cloudflareApiKey.path; + }; + }; + }; +} diff --git a/parts/modules/nixos/server/default.nix b/parts/modules/nixos/server/default.nix new file mode 100644 index 0000000..acab4fc --- /dev/null +++ b/parts/modules/nixos/server/default.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: let + cfg = config.server; + inherit (lib) mkDefault mkEnableOption mkIf; +in { + options.server.enable = mkEnableOption "enable server configuration"; + + imports = [ + ./acme.nix + ./secrets.nix + ./services + ]; + + config = mkIf cfg.enable { + _module.args.unstable = inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system}; + + base = { + enable = true; + documentation.enable = false; + defaultPackages.enable = false; + networking.enable = false; + }; + + nix = { + gc = { + dates = "*-*-1,5,9,13,17,21,25,29 00:00:00"; + options = "-d --delete-older-than 2d"; + }; + + settings.allowed-users = [config.networking.hostName]; + }; + + programs = { + git.enable = mkDefault true; + vim.defaultEditor = mkDefault true; + }; + + security = { + pam.enableSSHAgentAuth = mkDefault true; + }; + }; +} diff --git a/parts/modules/nixos/server/secrets.nix b/parts/modules/nixos/server/secrets.nix new file mode 100644 index 0000000..2dc6083 --- /dev/null +++ b/parts/modules/nixos/server/secrets.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + self, + ... +}: let + cfg = config.server.secrets; + inherit (lib) mkEnableOption mkIf; +in { + options.server.secrets = { + enable = mkEnableOption "enable secret management"; + }; + + config.age = let + baseDir = "${self}/parts/secrets/systems/${config.networking.hostName}"; + in + mkIf cfg.enable { + identityPaths = ["/etc/age/key"]; + + secrets = { + rootPassword.file = "${baseDir}/rootPassword.age"; + userPassword.file = "${baseDir}/userPassword.age"; + }; + }; +} diff --git a/parts/modules/nixos/server/services/cloudflared.nix b/parts/modules/nixos/server/services/cloudflared.nix new file mode 100644 index 0000000..2bf7907 --- /dev/null +++ b/parts/modules/nixos/server/services/cloudflared.nix @@ -0,0 +1,41 @@ +{ + config, + lib, + self, + ... +}: let + cfg = config.server.services.cloudflared; + inherit (lib) mkEnableOption mkIf; +in { + options.server.services.cloudflared = { + enable = mkEnableOption "cloudflared"; + }; + + config = mkIf cfg.enable { + age.secrets.cloudflaredCreds = { + file = "${self}/parts/secrets/systems/${config.networking.hostName}/cloudflaredCreds.age"; + mode = "400"; + owner = "cloudflared"; + group = "cloudflared"; + }; + + services.cloudflared = { + enable = true; + tunnels = { + "${config.networking.hostName}-nginx" = { + default = "http_status:404"; + + ingress = let + inherit (config.services) nginx; + in + lib.genAttrs + (builtins.attrNames nginx.virtualHosts) + (_: {service = "http://localhost:${builtins.toString nginx.defaultHTTPListenPort}";}); + + originRequest.noTLSVerify = true; + credentialsFile = config.age.secrets.cloudflaredCreds.path; + }; + }; + }; + }; +} diff --git a/parts/modules/nixos/server/services/default.nix b/parts/modules/nixos/server/services/default.nix new file mode 100644 index 0000000..23f2542 --- /dev/null +++ b/parts/modules/nixos/server/services/default.nix @@ -0,0 +1,7 @@ +_: { + imports = [ + ./cloudflared.nix + ./hercules.nix + ./promtail.nix + ]; +} diff --git a/parts/modules/nixos/server/services/hercules.nix b/parts/modules/nixos/server/services/hercules.nix new file mode 100644 index 0000000..b11a133 --- /dev/null +++ b/parts/modules/nixos/server/services/hercules.nix @@ -0,0 +1,57 @@ +{ + config, + lib, + self, + unstable, + ... +}: let + cfg = config.server.services.hercules-ci; + inherit (lib) mkEnableOption mkIf; +in { + options.server.services.hercules-ci = { + enable = mkEnableOption "enable hercules-ci"; + secrets.enable = mkEnableOption "manage secrets for hercules-ci"; + }; + + config = mkIf cfg.enable { + age.secrets = let + baseDir = "${self}/parts/secrets/systems/${config.networking.hostName}"; + hercArgs = { + mode = "400"; + owner = "hercules-ci-agent"; + group = "hercules-ci-agent"; + }; + in + mkIf cfg.secrets.enable { + binaryCache = + { + file = "${baseDir}/binaryCache.age"; + } + // hercArgs; + + clusterToken = + { + file = "${baseDir}/clusterToken.age"; + } + // hercArgs; + + secretsJson = + { + file = "${baseDir}/secretsJson.age"; + } + // hercArgs; + }; + + services = { + hercules-ci-agent = { + enable = true; + package = unstable.hercules-ci-agent; + settings = { + binaryCachesPath = config.age.secrets.binaryCache.path; + clusterJoinTokenPath = config.age.secrets.clusterToken.path; + secretsJsonPath = config.age.secrets.secretsJson.path; + }; + }; + }; + }; +} diff --git a/parts/modules/nixos/server/services/promtail.nix b/parts/modules/nixos/server/services/promtail.nix new file mode 100644 index 0000000..63faf15 --- /dev/null +++ b/parts/modules/nixos/server/services/promtail.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + ... +}: let + cfg = config.server.services.promtail; + inherit (lib) mkEnableOption mkIf mkOption types; +in { + options.server.services.promtail = { + enable = mkEnableOption "enable promtail"; + + clients = mkOption { + type = types.listOf types.attrs; + default = [{}]; + description = "clients for promtail"; + }; + }; + + config.services.promtail = mkIf cfg.enable { + enable = true; + configuration = { + inherit (cfg) clients; + server.disable = true; + + scrape_configs = [ + { + job_name = "journal"; + + journal = { + max_age = "12h"; + labels = { + job = "systemd-journal"; + host = "${config.networking.hostName}"; + }; + }; + + relabel_configs = [ + { + source_labels = ["__journal__systemd_unit"]; + target_label = "unit"; + } + ]; + } + ]; + }; + }; +} |
