2024-06-18 13:56:32 +00:00
|
|
|
{ config, lib, pkgs, foodogsquaredLib, foodogsquaredUtils, foodogsquaredModulesPath, ... }:
|
2022-11-23 05:27:01 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
imports = [
|
2023-01-14 07:55:30 +00:00
|
|
|
# Since this will be rarely configured, make sure to import the appropriate
|
|
|
|
# hardware modules depending on the hosting provider (and even just the
|
|
|
|
# server).
|
2024-09-22 14:03:20 +00:00
|
|
|
./modules/profiles/hetzner-cloud-cx22.nix
|
2022-11-26 06:13:17 +00:00
|
|
|
|
2022-12-03 05:46:46 +00:00
|
|
|
# The users for this host.
|
2024-06-18 13:56:32 +00:00
|
|
|
(foodogsquaredUtils.getUser "nixos" "admin")
|
|
|
|
(foodogsquaredUtils.getUser "nixos" "plover")
|
2022-12-03 03:11:48 +00:00
|
|
|
|
2024-01-22 04:23:14 +00:00
|
|
|
"${foodogsquaredModulesPath}/profiles/headless.nix"
|
|
|
|
"${foodogsquaredModulesPath}/profiles/hardened.nix"
|
2023-01-12 13:22:55 +00:00
|
|
|
|
2024-02-22 23:25:44 +00:00
|
|
|
./disko.nix
|
|
|
|
|
2023-12-11 08:30:00 +00:00
|
|
|
./modules
|
2022-11-23 05:27:01 +00:00
|
|
|
];
|
|
|
|
|
2023-12-11 08:30:00 +00:00
|
|
|
# Host-specific modules structuring.
|
|
|
|
hosts.plover.services = {
|
2024-09-22 14:03:20 +00:00
|
|
|
networking.enable = true;
|
2023-12-11 08:30:00 +00:00
|
|
|
backup.enable = true;
|
|
|
|
database.enable = true;
|
|
|
|
firewall.enable = true;
|
|
|
|
dns-server.enable = true;
|
|
|
|
idm.enable = true;
|
|
|
|
monitoring.enable = true;
|
|
|
|
reverse-proxy.enable = true;
|
|
|
|
fail2ban.enable = true;
|
|
|
|
grafana.enable = true;
|
2024-09-19 13:27:22 +00:00
|
|
|
};
|
|
|
|
|
2024-09-20 04:44:54 +00:00
|
|
|
# We're using our own VPN configuration for this one.
|
2024-09-22 14:07:59 +00:00
|
|
|
suites.vpn.personal.enable = true;
|
2024-09-20 04:44:54 +00:00
|
|
|
|
2024-09-22 14:07:23 +00:00
|
|
|
state.network = rec {
|
|
|
|
ipv4 = "135.181.26.192";
|
|
|
|
ipv6 = "2a01:4f9:c011:b61e::1";
|
2024-09-19 13:27:22 +00:00
|
|
|
|
|
|
|
interfaces = {
|
|
|
|
lan = {
|
2024-09-22 14:07:23 +00:00
|
|
|
ifname = "enp7s0";
|
2024-09-19 13:27:22 +00:00
|
|
|
ipv4 = "10.0.0.2";
|
2024-09-22 14:07:23 +00:00
|
|
|
ipv6 = "fe80::8400:ff:fef7:864";
|
|
|
|
ipv4Gateway = "10.0.0.1";
|
|
|
|
ipv6Gateway = "fe80::1";
|
|
|
|
};
|
|
|
|
|
|
|
|
wan = {
|
|
|
|
ifname = "eth0";
|
|
|
|
inherit ipv4 ipv6;
|
|
|
|
ipv4Gateway = "172.31.1.1";
|
|
|
|
ipv6Gateway = "fe80::1";
|
2024-09-19 13:27:22 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
secondaryNameservers = [
|
|
|
|
# ns1.first-ns.de
|
|
|
|
"213.239.242.238"
|
|
|
|
"2a01:4f8:0:a101::a:1"
|
|
|
|
|
|
|
|
# robotns2.second-ns.de
|
|
|
|
"213.133.105.6"
|
|
|
|
"2a01:4f8:d0a:2004::2"
|
|
|
|
|
|
|
|
# robotns3.second-ns.com
|
|
|
|
"193.47.99.3"
|
|
|
|
"2001:67c:192c::add:a3"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
state.paths = {
|
|
|
|
dataDir = "/var/lib";
|
|
|
|
cacheDir = "/var/cache";
|
|
|
|
logDir = "/var/log";
|
|
|
|
runtimeDir = "/run";
|
2023-12-11 08:30:00 +00:00
|
|
|
};
|
|
|
|
|
2023-11-06 12:37:08 +00:00
|
|
|
# Offline SSH!?!
|
|
|
|
programs.mosh.enable = true;
|
2023-11-06 08:59:20 +00:00
|
|
|
|
2024-02-11 07:16:25 +00:00
|
|
|
sops.secrets = foodogsquaredLib.sops-nix.getSecrets ./secrets/secrets.yaml {
|
2023-07-05 05:11:47 +00:00
|
|
|
"ssh-key" = { };
|
|
|
|
"lego/env" = { };
|
2023-07-05 03:38:58 +00:00
|
|
|
};
|
2022-11-23 05:27:01 +00:00
|
|
|
|
2023-01-12 13:22:55 +00:00
|
|
|
# All of the keys required to deploy the secrets.
|
2022-11-23 05:27:01 +00:00
|
|
|
sops.age.keyFile = "/var/lib/sops-nix/key.txt";
|
|
|
|
|
2024-01-22 06:48:55 +00:00
|
|
|
suites.server = {
|
2022-12-02 04:33:51 +00:00
|
|
|
enable = true;
|
|
|
|
cleanup.enable = true;
|
|
|
|
};
|
|
|
|
|
2023-01-12 13:22:55 +00:00
|
|
|
# DNS-related settings. We're settling by configuring the ACME setup with a
|
2023-06-22 09:56:47 +00:00
|
|
|
# self-hosted DNS server.
|
2022-12-29 02:26:15 +00:00
|
|
|
security.acme.defaults = {
|
2023-06-27 14:56:18 +00:00
|
|
|
email = "admin+acme@foodogsquared.one";
|
2023-06-22 09:56:47 +00:00
|
|
|
dnsProvider = "rfc2136";
|
2023-06-27 14:56:18 +00:00
|
|
|
dnsResolver = "1.1.1.1";
|
2024-09-19 13:27:22 +00:00
|
|
|
credentialsFile = config.sops.secrets."lego/env".path or "/var/lib/secrets/acme.env";
|
2022-12-03 00:09:26 +00:00
|
|
|
};
|
|
|
|
|
2023-06-30 02:46:43 +00:00
|
|
|
# Enable generating new DH params.
|
|
|
|
security.dhparams.enable = true;
|
|
|
|
|
|
|
|
# !!! The keys should be rotated at an interval here.
|
2022-12-02 04:33:51 +00:00
|
|
|
services.openssh.hostKeys = [{
|
2023-07-05 05:11:47 +00:00
|
|
|
path = config.sops.secrets."ssh-key".path;
|
2022-12-02 04:33:51 +00:00
|
|
|
type = "ed25519";
|
|
|
|
}];
|
|
|
|
|
2024-09-22 14:07:59 +00:00
|
|
|
system.stateVersion = "24.11";
|
2022-11-23 05:27:01 +00:00
|
|
|
}
|