diff --git a/git-crypt/secrets.nix b/git-crypt/secrets.nix index 970c86a..789f9d3 100755 Binary files a/git-crypt/secrets.nix and b/git-crypt/secrets.nix differ diff --git a/home.nix b/home.nix index e1dfee0..9d81045 100755 --- a/home.nix +++ b/home.nix @@ -73,6 +73,7 @@ piper-tts sssnake pipes dig + screen gnumake cmake diff --git a/sops-secrets.yaml b/sops-secrets.yaml index cbfa580..24b0b7d 100644 --- a/sops-secrets.yaml +++ b/sops-secrets.yaml @@ -21,6 +21,8 @@ weechat: passphrase: ENC[AES256_GCM,data:3NVhMouf3wwMJTZCvIjbi5fjHJHxe25Q+wRo,iv:W8cShdM3iUyEiRCPNupMin3gfF+cqGxslD18CAvUW4c=,tag:DXBATGEhHjhXqy+J9BNVwg==,type:str] nx2site: namecheap.pw: ENC[AES256_GCM,data:tN6ArfQu+YfVkPPN00raPZWmghDKVFmmGgwACVQQSHs=,iv:TlUl0L3+Ea9vt43lwDlM0SE1+CLvWJdryt1lFhQ+75I=,tag:pia2ORsm66AQUOE/ZiO8yA==,type:str] + sslCertificate: ENC[AES256_GCM,data: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,iv:CUTe478K3KZWcWzn0E/jMf99RNEiF9prboUycUGdjqE=,tag:W4zt375htT8ujE2B7spI5g==,type:str] + sslCertificateKey: ENC[AES256_GCM,data:wktk9+gWW5zfKqj8pfBLG336svlEa0xuqDAo0KBNZIv58NhQkn61mdqQqLOrJFL0k6ve98exjw+Jf5Z33QjzxlVTvC++hb/9dL9uIBuFECk6AFJrZsbh3b3SA9nFD0E+Bdh3eYcf41O9owRwczglay43iOkgzQKk+iuGW9Gci671Px0krmxps+pLuk54crHVy7+DZBh3kyHV/rGQ/uEw8gUdu2XG4Ohcob5puHwl97EJ8MHmNsUI5+6XfcNMJm0IEu2tO42oVFQSvZbDCaD0dGWk0v2kmgjxV032bN+GMq1WDUzYwWte8GQvbjlS/SlcFw==,iv:di4iMask6hg1WtOuh0cgzOjmQLWp31UElfTsCIGk4tY=,tag:/HLq03JMo7C1OZDWSIfENw==,type:str] USERTrust: ECC: ENC[AES256_GCM,data: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,iv:GS5GMpbxeweqwjUvOzqg59xBOzNZqrL5t7RjsFjpucM=,tag:j0MaMw71fnRHxeydlqAaww==,type:str] RSA: ENC[AES256_GCM,data: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,iv:NJkjWL5kMHET68oR5Xp22kvkThXIp7WxRVajmTfsB5M=,tag:NSXeRItMKlOQYP4QtzMKIg==,type:str] @@ -71,8 +73,8 @@ sops: SHJLR3lvdlFiRmJuU25RUHFFTmpjamMKbzycdDvQBAuOiRROTZEQSnaXoPapz73L yVS9EUP25FSx/sGqRqaCefbeaybuM1aso6LDnlomv4Bib7zjugWKSw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-07-19T15:08:08Z" - mac: ENC[AES256_GCM,data:qO+vasrxM/YxktZ4pXx6qcpWoXAtM+3BNVkNcXyYWofz6l0dO7fpMpIlDW0d/uFt83aXffqrlRLMZuy0rCGyKuD4FOa1hI9Myx1+AqGsTcUPHn2av939z/VKrc+CcZuzcuWO5uTBlHyTQRpZlvGdnPd1/JZPS3xPm+k232yER00=,iv:v45UbeFQm3z4vPoeF1wqrTdJtDLeOmjTkBpYciT7bAY=,tag:Kordeec4ul1eUmSCO/P2YQ==,type:str] + lastmodified: "2024-07-28T15:38:03Z" + mac: ENC[AES256_GCM,data:/ZQ0QX/nqGWHkIOvJxKxl8HHlK1bxEdog0Ee/N5CnU6aw4l8IoX3BwpZBFP78+/EO1flH4S9zyJfRE1U9NoIqXPXs+r0dgGiJm0FHwGiHi1oGRmxfggi0Kes4WQa3rIgxuyeIjwXWc4LNPLkCyNPGNdnE0wZ4ab31O/ZbIME1NY=,iv:r7RZGBdXJnk6261LE7IwmojWYC6JoqVJFwekGbhuFXY=,tag:FWaAoJ8FRZJitAp8F3cK2Q==,type:str] pgp: - created_at: "2024-06-09T19:44:41Z" enc: |- diff --git a/system-modules/hsmw.nix b/system-modules/hsmw.nix index 629a1f3..e0255dd 100755 --- a/system-modules/hsmw.nix +++ b/system-modules/hsmw.nix @@ -1,5 +1,4 @@ { pkgs, lib, host, secrets, ... }: -lib.mkIf (host != "NxACE") { environment.systemPackages = with pkgs; [ strongswanNM @@ -38,19 +37,19 @@ lib.mkIf (host != "NxACE") }; connections = { hsmw = { - keyexchange = "ikev2"; - left = "%defaultroute"; - leftid = "%any"; - leftauth = "eap"; - eap_identity = "${secrets.email.hsmw.un}@hs-mittweida.de"; - leftsourceip = "%config"; - leftdns = "%config4"; - leftfirewall = "no"; - right = "141.55.128.84"; - rightid = "@vpn4.hs-mittweida.de"; - rightsubnet = "0.0.0.0/0"; - rightauth = "pubkey"; - auto = "add"; + keyexchange = "ikev2"; + left = "%defaultroute"; + leftid = "%any"; + leftauth = "eap"; + eap_identity = "${secrets.email.hsmw.un}@hs-mittweida.de"; + leftsourceip = "%config"; + leftdns = "%config4"; # Ensure that DNS resolution works as expected + leftfirewall = "no"; # Keep firewall disabled, but manually check rules + right = "141.55.128.84"; + rightid = "@vpn4.hs-mittweida.de"; + rightsubnet = "141.55.128.0/16"; # Split tunneling: Only route traffic for the VPN subnet + rightauth = "pubkey"; + auto = "add"; }; }; managePlugins = true; diff --git a/system-modules/networking.nix b/system-modules/networking.nix index 7a8e558..bef3ad6 100755 --- a/system-modules/networking.nix +++ b/system-modules/networking.nix @@ -3,12 +3,16 @@ let in { - + networking.nameservers = [ + "1.1.1.1" + "8.8.8.8" + ]; + networking.hostName = host; networking.networkmanager = { enable = true; }; - networking.enableIPv6 = true; + networking.enableIPv6 = false; } diff --git a/system-modules/nx2site.nix b/system-modules/nx2site.nix index ccf6a3f..a352af4 100644 --- a/system-modules/nx2site.nix +++ b/system-modules/nx2site.nix @@ -1,5 +1,8 @@ { config, pkgs, lib, user, host, ... }: +# lib.mkIf false lib.mkIf (host == "NxACE") +# ((import ./nx2site/proxy.nix { inherit config pkgs lib user; }) // +( { sops.secrets = { "nx2site/namecheap.pw" = { }; @@ -14,18 +17,15 @@ lib.mkIf (host == "NxACE") Unit = "namecheap-dynamic-dns.service"; }; }; - services."namecheap-dynamic-dns" = - let + services."namecheap-dynamic-dns" = let u = let domain = "nx2.site"; passord-file-path = config.sops.secrets."nx2site/namecheap.pw".path; + # passord-file-path = config.sops.secrets."nx2site/namecheap.pw".path; log-file-path = "/var/log/update_namecheap.log"; count-file-path = "/var/log/update_namecheap-count.txt"; - in - pkgs.writers.writePython3Bin "update_namecheap" { - libraries = with pkgs.python311Packages; [ - requests - ]; + in pkgs.writers.writePython3Bin "update_namecheap" { + libraries = with pkgs.python311Packages; [ requests ]; flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" ]; } '' import requests @@ -58,7 +58,7 @@ lib.mkIf (host == "NxACE") # Perform DNS updates resp_base = requests.get(f"https://dynamicdns.park-your-domain.com/update?host=@&domain=${domain}&password={pw}&ip={my_ip}") resp_subd = requests.get(f"https://dynamicdns.park-your-domain.com/update?host=*&domain=${domain}&password={pw}&ip={my_ip}") - + # Reset the count file with open("${count-file-path}", 'w') as f: f.write('0') @@ -71,19 +71,51 @@ lib.mkIf (host == "NxACE") parser = argparse.ArgumentParser() parser.add_argument('-f', '--force', action='store_true', help='Force update') args = parser.parse_args() - + main(args.force) ''; - in - { + in { script = '' set -eu ${u}/bin/update_namecheap ''; serviceConfig = { Type = "oneshot"; - # User = "nx2"; }; }; }; -} + # I can't use this becasue API Access for Namecheap needs a static whitelisted IP, which I don't have + # security.acme = { + # acceptTerms = true; + # certs."nx2site" = { }; + # }; + environment.systemPackages = with pkgs; [ + certbot + (writeShellApplication { + name = "refresh_ssl_certificate"; + runtimeInputs = [ certbot ]; + # https://forum.endeavouros.com/t/tutorial-add-a-systemd-boot-loader-menu-entry-for-a-windows-installation-using-a-separate-esp-partition/37431 + text = let + webroot = /home/nx2/nx2site/staticweb/content; + in /*bash*/ '' + cartbot + ls ${webroot} + ''; + }) + ]; + networking.hosts = { # docker network inspect nx2site_default | grep -E "Name|IPv4" | tr "\n" " " | sed -r 's- +- -g;s-\n?"Name": -\n-g' | sed -r '1d;2d;s-"(.+?)", "IPv4Address": "(.+)/16",- "\2" = [ "\1.docker" ];-g' + "172.1.2.1" = [ "staticweb.docker" ]; + "172.1.3.1" = [ "matrix.docker" ]; + # "172.1.0.9" = [ "matrixdb.docker" ]; + "172.1.4.1" = [ "matrix-ss.docker" ]; + # "172.1.0.7" = [ "matrix-ssdb.docker" ]; + "172.1.5.1" = [ "pw.docker" ]; + "172.1.6.1" = [ "git.docker" ]; + # "172.1.0.10" = [ "gitdb.docker" ]; + "172.1.7.1" = [ "nn.docker" ]; + "172.1.8.1" = [ "llm.docker" ]; + # "172.1.9.1" = [ "proxy.docker" ]; + "172.1.10.1" = [ "share.docker" ]; + "172.1.11.1" = [ "odq.docker" ]; + }; +}) diff --git a/system-modules/nx2site/proxy.nix b/system-modules/nx2site/proxy.nix new file mode 100644 index 0000000..fde9b31 --- /dev/null +++ b/system-modules/nx2site/proxy.nix @@ -0,0 +1,180 @@ +{ config, pkgs, lib, user }: +lib.mkIf false +{ + sops.secrets = { + "nx2site/sslCertificate.pem" = { owner = config.services.nginx.user; }; + "nx2site/sslCertificateKey.pem" = { owner = config.services.nginx.user; }; + "nx2site/dhparams.pem" = { owner = config.services.nginx.user; }; + }; + services.nginx = { + enable = true; + additionalModules = []; + # appendConfig = ''''; + clientMaxBodySize = "20m"; + + defaultHTTPListenPort = 80; + defaultListenAddresses = [ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]"; + defaultListen = [ { + addr = "0.0.0.0"; + ssl = true; + port = 443; + proxyProtocol = true; + }]; + defaultMimeTypes = "${pkgs.mailcap}/etc/nginx/mime.types"; + defaultSSLListenPort = 443; + enableQuicBPF = true; + enableReload = true; + # eventsConfig = ''''; + # logError = ; + # mapHashBucketSize = ; + # mapHashMaxSize = ; + package = pkgs.nginxQuic; + # preStart = true; + proxyResolveWhileRunning = false; + proxyTimeout = "20s"; + recommendedBrotliSettings = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + recommendedZstdSettings = true; + serverTokens = false; + # sslCiphers = true; + sslDhparam = config.sops.secrets."nx2site/dhparams.pem".path; + sslProtocols = "TLSv1.2 TLSv1.3"; + statusPage = false; + streamConfig = ""; # udp config + validateConfigFile = true; + upstreams = { + "staticweb".servers = { "staticweb.docker:80" = {}; }; + "matrix".servers = { "matrix.docker:80" = {}; }; + "matrix-ss".servers = { "matrix-ss.docker:80" = {}; }; + "pw".servers = { "pw.docker:80" = {}; }; + "git".servers = { "git.docker:80" = {}; }; + "nn".servers = { "nn.docker:80" = {}; }; + "llm".servers = { "llm.docker:80" = {}; }; + "share".servers = { "share.docker:80" = {}; }; + + "sync".servers = { "localhost:8384" = {}; }; + }; + virtualHosts = let + sslCertificate = config.sops.secrets."nx2site/sslCertificate.pem".path; + sslCertificateKey = config.sops.secrets."nx2site/sslCertificateKey.pem".path; + kTLS = true; http2 = true; http3 = true; http3_hq = true; quic = true; + in + { + "nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + locations = { + "/" = { + proxyPass = "http://staticweb"; + # extraConfig = [ ''add_header Alt-Svc 'h3=":443"; ma=86400';'' ''add_header Cache-Control "public";'' ] ++ common-location-conf; + }; + "/.well-known/matrix/client" = { + return = ''200 '{"m.homeserver": {"base_url": "https://matrix.nx2.site"}, "org.matrix.msc3575.proxy": {"url": "https://matrix-ss.nx2.site"}}' ''; + extraConfig = [ "default_type application/json;" "add_header Access-Control-Allow-Origin *;" ]; + }; + "/.well-known/matrix/server" = { + return = ''200 '{"m.server":"matrix.nx2.site:443"}' ''; + extraConfig = [ "default_type application/json;" "add_header Access-Control-Allow-Origin *;" ]; + }; + "~ ^/(client/|_matrix/client/unstable/org.matrix.msc3575/sync)" = { + proxyPass = "http://matrix-ss"; + # extraConfig = [ ''proxy_set_header X-Forwarded-For $remote_addr;'' ''proxy_set_header X-Forwarded-Proto $scheme;'' ''proxy_set_header Host $host;'' ]; + }; + "~ ^(\/_matrix|\/_synapse\/client)" = { + return = ''200 '{"m.server":"matrix.nx2.site:443"}' ''; + # extraConfig = []; + }; + }; + }; + "matrix.nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + listen = [ + { addr = "0.0.0.0"; port = 443; ssl = true; } + { addr = "0.0.0.0"; port = 8448; ssl = true; } + ]; + locations = { + "/" = { + proxyPass = "http://matrix"; + # extraConfig = [ ''add_header Alt-Svc 'h3=":443"; ma=86400';'' ''add_header Cache-Control "public";'' ] ++ common-location-conf; + }; + }; + }; + "matrix-ss.nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + # "resolver 1.1.1.1;" + # "client_max_body_size 500M;" + # ]; + locations = { + "/" = { proxyPass = "http://pw"; }; + }; + }; + # "dev.nx2.site" = { + # inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + # locations = { + # "/" = { + # proxyPass = "http://dev"; + # }; + # }; + # }; + "pw.nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + locations = { + "/" = { proxyPass = "http://pw"; }; + "/admin" = { proxyPass = "http://pw"; }; + "/notifications/hub" = { proxyPass = "http://pw"; }; + "/notifications/hub/negotiate" = { proxyPass = "http://pw"; }; + }; + }; + "share.nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + locations = { + "/" = { proxyPass = "http://share"; # ''proxy_hide_header Content-Disposition;'' + # ''proxy_set_header Content-Disposition $upstream_http_content_disposition;'' + # ''proxy_set_header X-Real-IP $remote_addr;'' + # ''proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;'' + # ''proxy_set_header Host $http_host;'' + # ]; + }; + "/socket.io" = { + proxyPass = "http://share/socket.io"; + proxyWebsockets = true; + # extraConfig = [ + # ''proxy_http_version 1.1;'' + # ''proxy_set_header Upgrade $http_upgrade;'' + # ''proxy_set_header Connection "upgrade";'' + # ]; + }; + }; + }; + "sync.nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + locations = { + "/" = { proxyPass = "http://sync"; }; + }; + }; + "git.nx2.site" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + locations = { + "/" = { proxyPass = "http://git"; }; + }; + }; + "~^(.*)\.nx2\.site$" = { + inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic; + # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + root = "/home/nx2/nx2site/staticweb/xcontent/"; + locations = { + "~.*" = { return = "502 /502.html"; }; + }; + }; + }; + }; +} diff --git a/system-modules/syncthing.nix b/system-modules/syncthing.nix index b3d3946..2122857 100644 --- a/system-modules/syncthing.nix +++ b/system-modules/syncthing.nix @@ -17,7 +17,12 @@ let }; dirs = { - default = { name = "sync"; path = "/home/${user}/sync"; }; + default = { name = "sync"; path = "/home/${user}/sync"; }; + s21u-dcim = { name = "s21u-dcim"; path = "/vault/Pictures/Lennart"; }; + diane-dcim = { name = "diane-dcim"; path = "/vault/Pictures/Diane"; }; + dianesd-dcim = { name = "dianesd-dcim"; path = "/vault/Pictures/Diane-SD"; }; + daniel-dcim = { name = "daniel-dcim"; path = "/vault/Pictures/Daniel"; }; + tessa-dcim = { name = "tessa-dcim"; path = "/vault/Pictures/Tessa"; }; }; in lib.mkIf (user != "tv") @@ -45,8 +50,7 @@ lib.mkIf (user != "tv") ) else if (host == "NxNORTH") then ( xps // ace // s21u ) else ( - # north // xps // s21u // diane // daniel // tessa // georg - north // xps // s21u + north // xps // s21u // diane // daniel // tessa // georg ); folders = with dirs; if (host == "NxXPS") then { "${default.name}" = { @@ -58,11 +62,31 @@ lib.mkIf (user != "tv") path = default.path; devices = with devices; (justname [ xps ace s21u ]); }; - } else { + } else { # NxACE "${default.name}" = { path = default.path; devices = with devices; (justname [ xps north s21u ]); }; + "${s21u-dcim.name}" = { + path = s21u-dcim.path; + devices = with devices; (justname [ s21u ]); + }; + "${diane-dcim.name}" = { + path = diane-dcim.path; + devices = with devices; (justname [ diane ]); + }; + "${dianesd-dcim.name}" = { + path = dianesd-dcim.path; + devices = with devices; (justname [ diane ]); + }; + "${daniel-dcim.name}" = { + path = daniel-dcim.path; + devices = with devices; (justname [ daniel ]); + }; + "${tessa-dcim.name}" = { + path = tessa-dcim.path; + devices = with devices; (justname [ tessa ]); + }; }; gui = { theme = "black";