{ config, lib, adminUser, pkgs, ... }: let mkWebfinger = config: file: pkgs.writeTextDir file (lib.generators.toJSON { } config); mkWebfingers = { subject, ... }@config: map (mkWebfinger config) [ subject (lib.escapeURL subject) ]; webfingerRoot = pkgs.symlinkJoin { name = "felschr.com-webfinger"; paths = lib.flatten ( builtins.map mkWebfingers [ { subject = "acct:franck@fcuny.net"; links = [ { rel = "http://openid.net/specs/connect/1.0/issuer"; href = "https://auth.fcuny.net"; } ]; } ] ); }; in { imports = [ ../../../profiles/acme.nix ../../../profiles/cgroups.nix ../../../profiles/defaults.nix ../../../profiles/disk/basic-vm.nix ../../../profiles/hardware/do-droplet.nix ../../../profiles/home-manager.nix ../../../profiles/server.nix ]; age.secrets.wireguard.file = ../../../secrets/argonath/wireguard.age; # fixes duplicated devices in mirroredBoots boot.loader.grub.devices = lib.mkForce [ "/dev/vda" ]; disko.devices.disk.disk1.device = "/dev/vda"; networking.wireguard = { enable = true; interfaces.wg0 = { ips = [ "10.100.0.51/32" ]; listenPort = 51871; privateKeyFile = config.age.secrets.wireguard.path; peers = [ { # rivendell publicKey = "jf7T7TMKQWSgSXhUplldZDV9G2y2BjMmHIAhg5d26ng="; allowedIPs = [ "10.100.0.60/32" ]; persistentKeepalive = 25; } ]; }; }; networking.firewall.trustedInterfaces = [ "wg0" ]; networking.firewall.allowedUDPPorts = [ 51871 ]; networking.firewall.allowedTCPPorts = [ 80 443 ]; services.nginx = { enable = true; recommendedProxySettings = true; recommendedGzipSettings = true; recommendedOptimisation = true; recommendedTlsSettings = true; virtualHosts = { "code.fcuny.net" = { enableACME = true; acmeRoot = null; forceSSL = true; locations."/" = { proxyPass = "http://10.100.0.60"; }; }; "auth.fcuny.net" = { enableACME = true; acmeRoot = null; forceSSL = true; locations."/" = { proxyPass = "http://10.100.0.60:9092"; }; }; "fcuny.net" = { enableACME = true; acmeRoot = null; forceSSL = true; locations."/" = { proxyPass = "http://10.100.0.60:8070"; }; locations."/.well-known/webfinger" = { root = webfingerRoot; extraConfig = '' add_header Access-Control-Allow-Origin "*"; default_type "application/jrd+json"; types { application/jrd+json json; } if ($arg_resource) { rewrite ^(.*)$ /$arg_resource break; } ''; }; }; }; }; system.stateVersion = "25.05"; # Did you read the comment? home-manager = { users.${adminUser.name} = { imports = [ ../../../home/profiles/minimal.nix ]; }; }; }