Self-host your own digital island
1{ pkgs, lib, config, ... }:
2
3with lib;
4
5{
6 imports = [
7 ./acme-eon.nix
8 ./services/dns/default.nix
9 ./mastodon.nix
10 ./mailserver.nix
11 ./gitea.nix
12 ./dns.nix
13 ./fail2ban.nix
14 ./matrix/synapse.nix
15 ./matrix/mautrix-instagram.nix
16 ./matrix/mautrix-messenger.nix
17 ./turn.nix
18 ./headscale.nix
19 ./wireguard/default.nix
20 ./radicale.nix
21 ];
22
23 options.eilean = with types; {
24 username = mkOption { type = str; };
25 serverIpv4 = mkOption { type = str; };
26 serverIpv6 = mkOption { type = str; };
27 publicInterface = mkOption { type = str; };
28 domainName = mkOption {
29 type = types.str;
30 default = "vps";
31 };
32 };
33
34 config = {
35 # TODO install manpage
36 environment.systemPackages = [ ];
37 security.acme.defaults.email = lib.mkIf (!config.eilean.acme-eon)
38 "${config.eilean.username}@${config.networking.domain}";
39 security.acme-eon.defaults.email = lib.mkIf config.eilean.acme-eon
40 "${config.eilean.username}@${config.networking.domain}";
41 networking.firewall.allowedTCPPorts = mkIf config.services.nginx.enable [
42 80 # HTTP
43 443 # HTTPS
44 ];
45 };
46}