nix machine / user configurations

feat(wolumonde): use headscale instead of netbird [skip ci]

ptr.pet 3a9be920 a4ae1bff

verified
+8 -10
deploy.nu
···
webhook $hooktitle $"=== deploy for ($hostname): finished ===" 0 true
}
-
def update-input [input: string] {
+
def update-inputs [inputs: list<string>] {
+
let inputsText = $inputs | str join ", "
let stashed = try {
let stash_result = git stash | complete
$stash_result.stdout | str contains "Saved working directory"
} catch {
false
}
-
log info $"trying to update input ($input)"
-
let result = nix flake update $input | complete
+
log info $"trying to update inputs ($inputsText)"
+
let result = nix run .#nvfetcher -- -f $"\(($inputs | str join '|')\)" | complete
let is_ok = ($result.stderr | str contains "Updated input")
let is_err = ($result.exit_code != 0)
if $is_ok or $is_err {
-
webhook $"/inputs/($input)" $"=== updated input ($input) ===\n\n($result.stderr)" $result.exit_code
+
webhook $"/inputs" $"=== updated inputs ===\n\n($result.stderr)" $result.exit_code
}
if $is_ok {
# try committing flake updates
try {
-
git add flake.lock
-
let commit_msg = $"chore\(nix\): update input ($input) [skip ci]"
-
git commit -m $commit_msg
+
git add _sources
+
git commit -m "chore(nix): update inputs [skip ci]"
git push
}
} else {
···
webhook "deploy" "=== started deploying all ==="
if $only_deploy == false {
-
["blog" "limbusart" "nsid-tracker"]
-
| each {|input| update-input $input}
-
+
update-inputs ["blog" "limbusart" "nsid-tracker"]
try {
log info "trying to update dns records"
nix run ".#dns" -- push
+1 -1
dns/dnsconfig.js
···
A("spindle", WOLUMONDE_IP, CF_PROXY_OFF),
A("skeetdeck", WOLUMONDE_IP, CF_PROXY_OFF),
A("likes", WOLUMONDE_IP, CF_PROXY_OFF),
-
A("bird", WOLUMONDE_IP, CF_PROXY_OFF),
+
A("vpn", WOLUMONDE_IP, CF_PROXY_OFF),
A("id", WOLUMONDE_IP, CF_PROXY_OFF),
// thing
// TXT("id", "a data endpoint for entity with serial id /90008/."),
+1
hosts/wolumonde/default.nix
···
}:
{
imports = [
+
../../users/root
"${inputs.agenix}/modules/age.nix"
"${inputs.ncr}/firewall"
"${inputs.ncr}/firewall/hetzner"
+42
hosts/wolumonde/modules/headscale.nix
···
+
{config, ...}: let
+
rootDomain = "gaze.systems";
+
domain = "vpn.${rootDomain}";
+
in {
+
age.secrets.headscaleOidcSecret = {
+
file = ../../../secrets/headscaleOidcSecret.age;
+
mode = "600";
+
owner = config.services.headscale.user;
+
group = config.services.headscale.group;
+
};
+
+
services.headscale = {
+
enable = true;
+
address = "0.0.0.0";
+
port = 1111;
+
settings = {
+
server_url = "https://${domain}";
+
dns = {
+
base_domain = "lan.${rootDomain}";
+
nameservers.global = ["1.1.1.1" "1.0.0.1" "9.9.9.9" "149.112.112.112"];
+
};
+
oidc = {
+
issuer = config.services.pocket-id.settings.APP_URL;
+
client_id = "ba2c2024-f75f-49a2-a156-8593becfba28";
+
client_secret_path = config.age.secrets.headscaleOidcSecret.path;
+
pkce.enabled = true;
+
only_start_if_oidc_is_available = true;
+
};
+
};
+
};
+
+
services.nginx.virtualHosts.${domain} = {
+
useACMEHost = rootDomain;
+
forceSSL = true;
+
quic = true;
+
kTLS = true;
+
locations."/" = {
+
proxyPass = "http://localhost:${toString config.services.headscale.port}";
+
proxyWebsockets = true;
+
};
+
};
+
}
hosts/wolumonde/modules/netbird-client.nix hosts/wolumonde/modules/netbird-client.disabled
hosts/wolumonde/modules/netbird.nix hosts/wolumonde/modules/netbird.disabled
+3 -2
hosts/wolumonde/modules/nginx.nix
···
statusPage = true;
};
-
networking.firewall.public."http(s)".allowedTCPPorts = [80 443];
+
networking.firewall.public."http".allowedTCPPorts = [80];
+
networking.firewall.public."https".allowedTCPPorts = [443];
# output json logs so we can consume them more easily
services.nginx.appendHttpConfig = ''
···
"spindle.gaze.systems"
"skeetdeck.gaze.systems"
"likes.gaze.systems"
-
"bird.gaze.systems"
"id.gaze.systems"
+
"vpn.gaze.systems"
];
};
};
hosts/wolumonde/modules/nsid-tracker.nix hosts/wolumonde/modules/nsid-tracker.disabled
-4
hosts/wolumonde/modules/tailscale.disabled
···
-
{
-
services.tailscale.enable = true;
-
services.tailscale.extraSetFlags = [ "--advertise-exit-node" ];
-
}
+17
hosts/wolumonde/modules/tailscale.nix
···
+
{config, ...}: {
+
age.secrets.tailscaleAuthKey.file = ../../../secrets/tailscaleAuthKey.age;
+
+
services.tailscale = {
+
enable = true;
+
port = 41641;
+
extraSetFlags = [ "--advertise-exit-node" ];
+
extraDaemonFlags = [ "--no-logs-no-support" ];
+
useRoutingFeatures = "both";
+
authKeyFile = config.age.secrets.tailscaleAuthKey.path;
+
openFirewall = true;
+
};
+
+
networking.firewall.public.tailscale.allowedUDPPorts = [
+
config.services.tailscale.port
+
];
+
}
-2
hosts/wolumonde/modules/victoria.nix
···
# extraOptions = ["-syslog.listenAddr.udp=:${toString syslogUdp}" "-journald.maxRequestSize=1024000000"];
};
-
networking.firewall.allowedTCPPorts = [metricsPort logsPort];
-
services.vmalert.instances."" = {
enable = true;
settings =
+18
secrets/headscaleOidcSecret.age
···
+
age-encryption.org/v1
+
-> ssh-rsa Abmvag
+
Qh13LIT59dB6mn0FyXVA8+7+kwn0kw9kmQ0MgKG4o6ABTD99SsyTezCZEPfSUg3a
+
U/pH+UTezBGFAVkYhvB+WP9rJT4zRWMng585JObbGUzCgau6+ImSZOnsjRB0CipK
+
kYgpLcw+3OVZT2Kj1RAwee3rPbImfm2ubn8U/zEn3fmbxHXBXB9KO+TDWPf78cFT
+
3rpxkgVl1fxtOb3R+tSupj9J+RsGlrjPzDV4I/4DEuh9amEHTLphLZ/Cn4kwF/1u
+
UySknhamanR5Aqg1pkx47SCcMSbEfJUjp0VfEMg19Sfdi2FWMhZQ80KvnMr/9okg
+
sNZw14WeZYixd48cia5ky8P9HOgeLoglJButTjedP8GuPSWx9I4kx5O/TXDj2ZKc
+
tC2GzhuFYfNloOsx9lNhweDjC6jnBuPyK93MnUrMoeaLgT80X7kdkCdh3NFZccsB
+
Bz+2ewTIFBER9j80FPubMJc3EhfgKh/rSY6adDtXn7eAiwgt6hyuT3s/6A0qW1ns
+
LU9SBO0e/Bi0/s17GomsIMldI0sN1qKC6R1Ub4W6V+1EsZfq1YTKvVasI7e8pHBg
+
dez/ihtiYF6RIhisdZib0wAqVjhYH1mml5MBKacyUY7VaHcl6vfSFe3WeysNor07
+
jlC1IPTngRsxItMV0wDb9/x9Uf1r+8fC19o3qPMBx8I
+
-> ssh-ed25519 KjIL7g X9TumeXjPPf+9e3ouaqHowAagQE6tOrDb5pWp8uzyGE
+
p8Z6ooZw8PZ0UgDbfw2RhfPT4iAnamialMN5Yimtbb8
+
--- RLloYQEWGgr1lT/H1WwKTYaKTJs+pgCA79oOmZRbNWk
+
)��@*�Q��fa����,�
+
[��0�}1�G �X�rT:��t�?�S#��ɻ��
secrets/netbirdClientKey.age

This is a binary file and will not be displayed.

-17
secrets/netbirdCoturnPass.age
···
-
age-encryption.org/v1
-
-> ssh-rsa Abmvag
-
c5bol6A1rO09nb/JL0cnGAiurTVHodcd1ORtb8HRpNfyy7pmq6KgzjrKZBUy+ziV
-
6IoTHHGBJUthFvEO7/iMU7dm/ssH76nJl/mMdm8sxwX3dv/3VNVGenj6cHTsC+k6
-
UymfIhgSTK4Yqqelt6UHCtuud/UB1bIgzh5Ino4YXiT8DyACSLyVa9LlSEzc1qLN
-
CKHCUy+vPJQ5DiyrLei+J87kIAwxOs6lyJVkbXos+YhsWvhkR+rrkGDJzC3KFzQZ
-
uStNQGXWQR61i8B6ck4O0yV1bbd3JlecevZti/6TxfW3+nyagDfZReli189dTzSn
-
Gs86IPgELt06bdagzzPGf7gO1s8wXFvVUS3rX5lE6j5A3ma2Mt7YyouJn5x862c3
-
N8Kbpx7pJCmgJUz+hiX6DCO1eeIuXIu+KoPGsP82VK3CNpBl2dNyFz40pciLLcY4
-
ZZSFG2U0hhYA0G78oxNTESh2ouCrNID+X4B4SVQBVa8Ez/7WixZds67VdFry0gRi
-
vbuXHYYx+HTHGrHmtQfTrNmsxojVqHDUVH8MtK203UbZSNW4tzuQAUNht02lK2Xi
-
xt+w35rlJoYfYtpd9TPD3lE+azBv9VeRm4wuXbqChESa/QEmI81mf12ZrkAmuuIu
-
LqgJ/Q1av+OBhL2d+U6ujtQXbo3e/bLkHfmFVQCGDzw
-
-> ssh-ed25519 KjIL7g BDNhP7CqqoNcPKK9PJfVwcVXEvo/Yfej1g4rz7qeoG0
-
uIyTLwcTil1yPqZFLCmLgISzWx3fOeRGfTN3RsjS5cw
-
--- E2EOsQlt8Ge2E06+UCRAGVecikifIWHla+ATMnKYp6g
-
�Z3�"�ɸ� Z��)9������o�h�;Re]�F�ε�@��t<00�B� �!�G�ý�\
secrets/netbirdDataStoreEncKey.age

This is a binary file and will not be displayed.

-17
secrets/netbirdTurnSecret.age
···
-
age-encryption.org/v1
-
-> ssh-rsa Abmvag
-
q1vTZZmWKxT76A80s0OVsZnIUMAVM5Bds6h8zI9ClVGOY4VsdtJiajzeXrC0aQ7S
-
1Mjsmu8Gn9f8T6EjdZhg5V6c5w+DZidJCj3CuQb5Nj+7/tUJf36tbG1dpcZmvx7r
-
G2DQg1kk7t6gywW9zjsbdOdB1Pt6NwM8IyexUTjWbJ+dQcOJeOrB1iv9WDVt3Kil
-
+zp/loYwiH05/lex6e20P8iSpEGCI22utGtG6kG1JbHmOBhIGU0C9EZwZ74Cebt6
-
/y6NhM5PWQU3roBN2Mz3sYxsuewDSaMeop6LyFbh6ud5sLuX+rI3ISDczgBerxV8
-
gvBiNQadFEFSgLhSEC6pYfStgQwJOCmI5nBju7aYwg1YwPZ1JtRkP3njg03GLc9+
-
8Xxc6cRzDEX8MahLtlq5KPlinQjHiJ/H7K+KzXZMe63NnK6QbsNPqT0iZXTfzXxj
-
NXui4xiybLwqdf00YI6MySD/0HcXgpRfBBP/aQbzYhxI1Vi1r1lSEqWjn5UzwqDn
-
HfIVk37bCkQGmfI8rkzmhmtEOlKKfcKF3sMx9KH1PBsi4odEEbjmWwikDnHp2ml6
-
lritjzfSZJLwJt4O8gxwHSNCVBEOhJ3+XxUo8agZz2dRcBhcmgESvSs5Pe8Y7G5k
-
GMWylL40BW1Xd/hg6SPtd6XVZs1uHabrTPhtpSE7SbA
-
-> ssh-ed25519 KjIL7g Nk2p0y0gT/8BvZUnv1O/E/oeqbNm1ZrxC0BLUbEdmGs
-
AGui3gIBK27w6BapWS/aamWb/+J6rgS50+tubatJTQg
-
--- FS0j9rSESVWuYHpBj/Gixu7bi9pj99DD8kUlc10xrTs
-
��{����g�B��*�Q5����=� �5�����`�����kp倏<g��}�;",<�.(�b =9��Z���/sa�h^�Ѭ;�i�{ԛ5�˂�������sK4��t�Zn�~A%�w�gVk�.w#�;l��Êco�y��
+2 -14
secrets/secrets.nix
···
yusdacra
wolumonde
];
-
"netbirdCoturnPass.age".publicKeys = [
-
yusdacra
-
wolumonde
-
];
-
"netbirdDataStoreEncKey.age".publicKeys = [
-
yusdacra
-
wolumonde
-
];
-
"netbirdTurnSecret.age".publicKeys = [
+
"headscaleOidcSecret.age".publicKeys = [
yusdacra
wolumonde
];
-
"netbirdClientKey.age".publicKeys = [
+
"tailscaleAuthKey.age".publicKeys = [
yusdacra
wolumonde
-
];
-
"develMobiNetbirdClientKey.age".publicKeys = [
-
yusdacra
-
develMobi
];
}
+18
secrets/tailscaleAuthKey.age
···
+
age-encryption.org/v1
+
-> ssh-rsa Abmvag
+
NKeTQ1taN613x+apPY0ZIeL5kisXNZ/BQkFaOUeGz1J6esoiTtHQb2c426iH/1Xr
+
doQnrpveP1g3xAhmcwPSrTFM1ZGmaTXw7OmWJJruPoaUgvJ+mzeYpHlCFcP/jZLZ
+
/DSZklljD1kaefNsZVFrL44P/N9us65RclC9LtWsBy9uHKDR9vpAg+a/BchY1pfd
+
laukKd3V+aZGBucBvXlzYz1vhmV8gAmiTzV8az/QEnXTUSY+9IF3rMFT0ZpppJAA
+
KJ4Rk+iDK/0lIkHUrOdoZneeENt55nvc22eBKAzyF1GrifuBt5/yk9kPS7sv1svV
+
ruNAnJyvBIT7Vnwasv9ZTy7+U/VeFjWaTiSs1DewBPOiLpHw9mmxbmF28oIP6dLz
+
oRo1ZoZHyjF0+kgsMco6d9VgOCqIRLj3ObXvvda8iJQThMZsPjEKmvHt64usxwjT
+
cVaE240zswtjnHfdtC7nxDG2aUHr5oeH6QXH7sAwKwx31zoJX9J7N0nc/ctD40nQ
+
z0oevXgzN0MD5L/X2cjwJ0L2qajJjyJBrAlb5XiaOK38MTwf32cQZnaIej8cDzfE
+
ReXXOmFiXq/Dl8nEKoHDQI3p+4ZOLztXu/5i/TL1HuvF5Riod5hA1oW2ubwHeHxR
+
ApZ7ry5dtbBUxnuTI5zRLQY78BnrqsuJ9ghp2fDzSsc
+
-> ssh-ed25519 KjIL7g SFusm9HUDdCCjjjKwOji+X66SpI2TzEf7p7AthPAWQU
+
11ovCJnXkMlOz/6570chlP62LkBoKx64EkFkcTXKELg
+
--- mufkRbwTo+mBT3hXsyh5Mv7O30CtTtqXtR6EaJ2tZY8
+
BS>���;Q6/<���KGM��m!����*��,Ƥ����KlM"s[Z��>�Nv
+
WQ�kD��$Q> za)2*'�Y_���<