Compare commits
25 Commits
134294645d
...
updated-in
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f54dfc570f | ||
| abca7b69d6 | |||
| 77268f9243 | |||
| 87884154eb | |||
| 7ed74d376b | |||
| 7c8832c1cd | |||
| 7c9fe54051 | |||
| 8760cd7832 | |||
| 079934aaeb | |||
| b1787611f5 | |||
| 69a04cac3f | |||
| 6e8adf8eb5 | |||
| 626834c2a4 | |||
| bd1716eb23 | |||
| a5125e92a6 | |||
|
|
50f2f01437 | ||
| 2606338b56 | |||
| f43eba0036 | |||
| 971fb88d97 | |||
| 1ab3ae3769 | |||
| bc8d681956 | |||
| fc4bc6ca41 | |||
| f17a94c578 | |||
| 2d9836f793 | |||
| 0de7471ac0 |
@@ -8,7 +8,6 @@
|
||||
./locale.nix
|
||||
./networking.nix
|
||||
./programs.nix
|
||||
./ssh.nix
|
||||
./systemd.nix
|
||||
./user.nix
|
||||
];
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
|
||||
services.openssh.enable = true;
|
||||
services.openssh.settings = {
|
||||
PasswordAuthentication = false;
|
||||
KbdInteractiveAuthentication = false;
|
||||
PermitRootLogin = lib.mkDefault "no";
|
||||
};
|
||||
services.openssh.hostKeys = lib.mkForce [
|
||||
# Only create ed25519 host keys
|
||||
{ type = "ed25519"; path = "/etc/ssh/ssh_host_ed25519_key"; }
|
||||
];
|
||||
|
||||
}
|
||||
14
docs/mkdocs.yml
Normal file
14
docs/mkdocs.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
docs_dir: pages
|
||||
site_name: clerie's nixfiles
|
||||
repo_url: https://git.clerie.de/clerie/nixfiles
|
||||
repo_name: clerie/nixfiles
|
||||
edit_uri: src/branch/master/docs/pages/
|
||||
|
||||
theme:
|
||||
name: material
|
||||
features:
|
||||
- content.action.edit
|
||||
- navigation.indexes
|
||||
- navigation.tabs
|
||||
palette:
|
||||
primary: deep purple
|
||||
1
docs/pages/Options/index.md
Normal file
1
docs/pages/Options/index.md
Normal file
@@ -0,0 +1 @@
|
||||
# Options
|
||||
1
docs/pages/index.md
Normal file
1
docs/pages/index.md
Normal file
@@ -0,0 +1 @@
|
||||
# Home
|
||||
23
flake.lock
generated
23
flake.lock
generated
@@ -552,22 +552,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-carbon": {
|
||||
"locked": {
|
||||
"lastModified": 1751206202,
|
||||
"narHash": "sha256-VjK8pEv4cfDpCTh4KW1go98kP25j7KdTNEce342Bh/Y=",
|
||||
"owner": "clerie",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ac4ac98609c1b30c378458ab7207a9a5b5148457",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "clerie",
|
||||
"ref": "clerie/always-setup-netdevs",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-regression": {
|
||||
"locked": {
|
||||
"lastModified": 1643052045,
|
||||
@@ -666,11 +650,11 @@
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1762596750,
|
||||
"narHash": "sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV+3DSADBX7/9YQ=",
|
||||
"lastModified": 1763678758,
|
||||
"narHash": "sha256-+hBiJ+kG5IoffUOdlANKFflTT5nO3FrrR2CA3178Y5s=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e",
|
||||
"rev": "117cc7f94e8072499b0a7aa4c52084fa4e11cc9b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -768,7 +752,6 @@
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_5",
|
||||
"nixpkgs-0dc1c7": "nixpkgs-0dc1c7",
|
||||
"nixpkgs-carbon": "nixpkgs-carbon",
|
||||
"nurausstieg": "nurausstieg",
|
||||
"rainbowrss": "rainbowrss",
|
||||
"scan-to-gpg": "scan-to-gpg",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
nixpkgs-carbon.url = "github:clerie/nixpkgs/clerie/always-setup-netdevs";
|
||||
# for etesync-dav
|
||||
nixpkgs-0dc1c7.url = "github:NixOS/nixpkgs/0dc1c7294c13f5d1dd6eccab4f75d268d7296efe";
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
|
||||
@@ -60,4 +60,10 @@
|
||||
ip46tables -t mangle -A forward-mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
|
||||
'';
|
||||
|
||||
networking.firewall.extraCommands = ''
|
||||
# Reject all IPv4 traffic that tries to enter and leave the PPP tunnel
|
||||
iptables -I INPUT -i ppp-ncfttb -j DROP
|
||||
iptables -I OUTPUT -o ppp-ncfttb -j DROP
|
||||
'';
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
services.wg-clerie = {
|
||||
enable = true;
|
||||
ipv6s = [ "2a01:4f8:c0c:15f1::8111/128" ];
|
||||
ipv4s = [ "10.20.30.111/32" ];
|
||||
defaultViaVPN = false;
|
||||
};
|
||||
# services.wg-clerie = {
|
||||
# enable = true;
|
||||
# ipv6s = [ "2a01:4f8:c0c:15f1::8111/128" ];
|
||||
# ipv4s = [ "10.20.30.111/32" ];
|
||||
# defaultViaVPN = false;
|
||||
# };
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
[
|
||||
./hardware-configuration.nix
|
||||
|
||||
./replication.nix
|
||||
./restic-server.nix
|
||||
];
|
||||
|
||||
@@ -36,30 +37,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
# fix borgbackup primary grouping
|
||||
users.users.borg.group = "borg";
|
||||
|
||||
services.borgbackup.jobs = {
|
||||
backup-replication-hetzner = {
|
||||
paths = [
|
||||
"/mnt/clerie-backup"
|
||||
];
|
||||
doInit = true;
|
||||
repo = "u275370-sub2@u275370.your-storagebox.de:./clerie-backup/";
|
||||
encryption = {
|
||||
mode = "none";
|
||||
};
|
||||
environment = { BORG_RSH = "ssh -p 23 -i /var/src/secrets/ssh/borg-backup-replication-hetzner"; };
|
||||
compression = "auto,lzma";
|
||||
startAt = "*-*-* 04:07:00";
|
||||
|
||||
readWritePaths = [ "/var/lib/prometheus-node-exporter/textfiles" ];
|
||||
postPrune = ''
|
||||
echo "backup_replication_hetzner_last_successful_run_time $(date +%s)" > /var/lib/prometheus-node-exporter/textfiles/backup-replication-hetzner.prom
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
clerie.monitoring = {
|
||||
enable = true;
|
||||
id = "204";
|
||||
|
||||
23
hosts/clerie-backup/replication.nix
Normal file
23
hosts/clerie-backup/replication.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
clerie.backup = {
|
||||
enable = true;
|
||||
targets = mkForce {
|
||||
hetzner-storage-box = {
|
||||
serverUrl = "sftp://u275370-sub2@u275370.your-storagebox.de:23";
|
||||
sshKeyFile = "/var/src/secrets/ssh/borg-backup-replication-hetzner";
|
||||
};
|
||||
};
|
||||
jobs.replication = {
|
||||
paths = [
|
||||
"/mnt/clerie-backup/cyan"
|
||||
];
|
||||
exclude = [
|
||||
"/mnt/clerie-backup/cyan/.htpasswd"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,19 +1,16 @@
|
||||
{
|
||||
"clerie-backup-job-replication": "ENC[AES256_GCM,data:J9zWkW1xGUiK73M=,iv:0PCJW1qrOMlX0Twy2HXGmqFzyXknE4dVdpJnnEbW36U=,tag:yxIdsqMHZgHLUIN+JCcZ6A==,type:str]",
|
||||
"restic-server-cyan-htpasswd": "ENC[AES256_GCM,data:Fe6lcXXy0Hu27Y2LtwQRbk+78+unSGkII144jtstOgK0pyjlJqG2mo8ZG7L+3mmthuu+leZ6XXadEcRGpby3eCwyVEYd3lDr930pPC8hChWYMC5mGkkRUAobYED63iVxcsc36PVFQYMCDbYvtcPk8uQTXfQmhs9kSzCrONrL1Id0L9D+sGoU0snpE+eCNXyiLwuyc1qocchhuHIwkGi4dyVJWgMsKGummF5Pf9zK4KzHmT6RuPouEUAfwHkdPwtOSJ8OqZof/C/CuPYmJQyfOFAqtw8xD9OXUpvyxjC1Kta89sL5cRAE0R15oPvNUmYGaXputm9iMycPjMacpouycx1TXMTEDB0caryX9uEFAyTfPm7keHT86qA1UfImWqEE9QqJ3uCeiwW698SbTZVeKLDBqDCPP+nP/L+N412d+HHyGugPOnTj1gXY50xeOay8Wryw87iDZ9rnJxcn0u5D4+JjOIbjWvydqBXacMD/o0NG2CcQu6LVRAHRiDKoSQWEwx25tzVwn2dsgFV8c3oQ0xQI7050R11Z3M9QWOvPmOZCvYV5VSoxu7r1jMu5asrcPbbhXKatbrabEHCAbDGsBpDkqts3BVUfUaHwboXVR0DxqOC6CHVE34J99SVTGI0kIHXyNqpeUJ36tCXFg7eNPNsu8cra9whjyUUHtw==,iv:Gfg3t3YPw2hz0LJ5hovPftMYOADN2Xjc93VmT2fFVQI=,tag:k6KH4qDPrFYIU2PGgW3F9Q==,type:str]",
|
||||
"wg-monitoring": "ENC[AES256_GCM,data:rOpBlDt9K//zlgWo1Bw9IX5jmpLbnit5zi60Ulz8f6tHwqVsKJv5NkxYc9A=,iv:Jlo0QZP6R1CEE20iLa7M/LV/ZX2/33oMv/FzBBo6nvY=,tag:Ttqo7BKd6RuUiMksW6rZnw==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": [
|
||||
{
|
||||
"recipient": "age1px682xeu0xfkr49qdqe95er040p2vv3ugekk04e36jj2wqs7tyfs8mhclh",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0UCtUZ3NZQWxOK1FUNDhL\nbWhaanN2OEJIVmpMOURzWU1vcGhuODdtcDJnCm9Nb01NaVVpWDJ6Q3JCbXRkRUJP\nUVdFaGVScUdxRnlpSnRNOG1RalNRaFUKLS0tICs0cW1WR0JMUmdaVWVzdTh2bjFm\nenBzaERpb1hCS1E3TUo3cmxpZFUxWmcKcLL5/YTGyZEVLwHSpbEI5XfWGklkI7h+\n0uhCww8Wh23EpUYFslZ0Nnbf5HX5/Z34qBwf20cvN8eLToTAQvTdeg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2025-02-16T18:13:34Z",
|
||||
"mac": "ENC[AES256_GCM,data:io2WVxTxHSlxrk7JaN6/fUI7YotvPfgbXTD1lEf1tN7QhuGRH/iZrji/VQlhJ8tk2dAS1Pe0rsTuxCMXcXcxRIh4EYbQky5IZj5jpfPcslQOquTcXzmPYdijPUWSqu6leGc0GG/7KccjSFD8TfwAgeuVrc2Br57yfqKoPf+M0fY=,iv:iYp73PrFnLZoI9014mbqQQERhFtfhb5YmzV6HiUi+YM=,tag:2AZEzhVVdEos5FLkg8cr5w==,type:str]",
|
||||
"lastmodified": "2025-11-16T16:13:47Z",
|
||||
"mac": "ENC[AES256_GCM,data:ksW2wq/EWTi9dKppGhEheVQ74G6riy1asiDmdsC78bfeAJHTbXqlni5u11DIbo67sdpZE+xXJiB1woLEcG0B4wS92r5MIWhQrul+ot95UnwVFceYLkO4KLxgOjlJzgHKuWq/ccOoKnucd/vmagQ5E/4ubBXMOHvHVLL4dNYOsDo=,iv:unLO6F/b1mAIefWfvD0PW840pTWUULgwJSl6mh637q4=,tag:0dlOFTAmLZc7oXJ25SeH1A==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2024-05-05T12:12:27Z",
|
||||
@@ -22,6 +19,6 @@
|
||||
}
|
||||
],
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.8.1"
|
||||
"version": "3.11.0"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
services.udev.packages = [
|
||||
pkgs.android-udev-rules
|
||||
];
|
||||
|
||||
}
|
||||
@@ -5,7 +5,6 @@
|
||||
[
|
||||
./hardware-configuration.nix
|
||||
|
||||
./android.nix
|
||||
./backup.nix
|
||||
./etesync-dav.nix
|
||||
#./initrd.nix
|
||||
|
||||
@@ -60,16 +60,19 @@ let
|
||||
config.sops.secrets."clerie-backup-job-${jobName}".path;
|
||||
repoPath = if jobOptions.repoPath == null then "/${config.networking.hostName}/${jobName}" else jobOptions.repoPath;
|
||||
targetPasswordFile = if targetOptions.passwordFile != null then targetOptions.passwordFile else
|
||||
config.sops.secrets."clerie-backup-target-${targetName}".path;
|
||||
config.sops.secrets."clerie-backup-target-${targetName}".path or null;
|
||||
targetUsername = if targetOptions.username == null then config.networking.hostName else targetOptions.username;
|
||||
in {
|
||||
"clerie-backup/${jobName}-${targetName}/repo_password".source = jobPasswordFile;
|
||||
"clerie-backup/${jobName}-${targetName}/repo_url".text = "${targetOptions.serverUrl}${repoPath}";
|
||||
"clerie-backup/${jobName}-${targetName}/auth_username".text = targetUsername;
|
||||
"clerie-backup/${jobName}-${targetName}/auth_password".source = targetPasswordFile;
|
||||
"clerie-backup/${jobName}-${targetName}/files".text = concatStringsSep "\n" jobOptions.paths;
|
||||
"clerie-backup/${jobName}-${targetName}/excludes".text = concatStringsSep "\n" jobOptions.exclude;
|
||||
}
|
||||
} // (if targetPasswordFile == null then {} else {
|
||||
"clerie-backup/${jobName}-${targetName}/auth_password".source = targetPasswordFile;
|
||||
}) // (if targetOptions.sshKeyFile == null then {} else {
|
||||
"clerie-backup/${jobName}-${targetName}/ssh_key".source = targetOptions.sshKeyFile;
|
||||
})
|
||||
) jobTargetPairs);
|
||||
|
||||
targetOptions = { ... }: {
|
||||
@@ -85,6 +88,10 @@ let
|
||||
serverUrl = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
sshKeyFile = mkOption {
|
||||
type = with types; nullOr str;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
{
|
||||
imports = [
|
||||
./policyrouting
|
||||
./akne
|
||||
./backup
|
||||
./bijwerken
|
||||
@@ -14,7 +13,6 @@
|
||||
./nginx-port-forward
|
||||
./nixfiles
|
||||
./update-from-hydra
|
||||
./wg-clerie
|
||||
./wireguard-initrd
|
||||
];
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ let
|
||||
default = null;
|
||||
description = ''
|
||||
Directory to store Minecraft database and other state/data files.
|
||||
When null defaulting to /var/lib/minecraft-server-${name}
|
||||
When null defaulting to /var/lib/minecraft-server-''${name}
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -50,7 +50,7 @@ let
|
||||
type = types.package;
|
||||
default = pkgs.papermc;
|
||||
defaultText = "pkgs.papermc";
|
||||
example = literalExample "pkgs.minecraft-server_1_12_2";
|
||||
example = literalExpression "pkgs.minecraft-server_1_12_2";
|
||||
description = "Version of minecraft-server to run.";
|
||||
};
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.petabyte.policyrouting;
|
||||
|
||||
ruleOpts = { ... }: {
|
||||
options = {
|
||||
prio = mkOption {
|
||||
type = types.int;
|
||||
};
|
||||
rule = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
in {
|
||||
options = {
|
||||
petabyte.policyrouting = {
|
||||
enable = mkEnableOption "Declarative Policy-Routing";
|
||||
rules = mkOption {
|
||||
type = with types; listOf (submodule ruleOpts);
|
||||
default = [];
|
||||
};
|
||||
rules6 = mkOption {
|
||||
type = with types; listOf (submodule ruleOpts);
|
||||
default = [];
|
||||
};
|
||||
rules4 = mkOption {
|
||||
type = with types; listOf (submodule ruleOpts);
|
||||
default = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
petabyte.policyrouting.rules = [
|
||||
{ rule = "lookup main"; prio = 32000; }
|
||||
];
|
||||
networking.localCommands = ''
|
||||
set -x
|
||||
ip -6 rule flush
|
||||
ip -4 rule flush
|
||||
${concatMapStringsSep "\n" ({ prio, rule }: "ip -6 rule add ${rule} prio ${toString prio}") (cfg.rules ++ cfg.rules6)}
|
||||
${concatMapStringsSep "\n" ({ prio, rule }: "ip -4 rule add ${rule} prio ${toString prio}") (cfg.rules ++ cfg.rules4)}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.wg-clerie;
|
||||
in
|
||||
|
||||
{
|
||||
options = {
|
||||
services.wg-clerie = {
|
||||
enable = mkEnableOption "VPN for public static IP";
|
||||
privateKeyFile = mkOption {
|
||||
type = with types; nullOr str;
|
||||
default = null;
|
||||
description = "Path to file containing private key for wireguard interface";
|
||||
};
|
||||
ipv6s = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [];
|
||||
description = "IPv6 interface addresses";
|
||||
};
|
||||
ipv4s = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [];
|
||||
description = "IPv4 interface addresses";
|
||||
};
|
||||
defaultViaVPN = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Use VPN default route for a protocol, if that protocol is unavailable in the underlay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
networking.iproute2.enable = true;
|
||||
networking.iproute2.rttablesExtraConfig = ''
|
||||
200 wg-clerie
|
||||
'';
|
||||
|
||||
petabyte.policyrouting = {
|
||||
enable = true;
|
||||
rules6 = (concatMap (ip: [
|
||||
{ rule = "from ${ip} lookup wg-clerie"; prio = 19000; }
|
||||
{ rule = "from ${ip} unreachable"; prio = 19001; }
|
||||
]) cfg.ipv6s) ++ [
|
||||
# Do not reach VPN server via VPN
|
||||
{ rule = "to 2a01:4f8:c0c:15f1::1/128 ipproto udp dport 51820 lookup main"; prio = 20000; }
|
||||
{ rule = "to 2a01:4f8:c0c:15f1::1/128 ipproto udp dport 51820 unreachable"; prio = 20001; }
|
||||
# Try direct routing first, fallback to VPN
|
||||
{ rule = "lookup main"; prio = 21000; }
|
||||
] ++ (if cfg.defaultViaVPN then [
|
||||
{ rule = "lookup wg-clerie"; prio = 21001; }
|
||||
] else []) ++ [
|
||||
{ rule = "unreachable"; prio = 22000; }
|
||||
];
|
||||
rules4 = (concatMap (ip: [
|
||||
{ rule = "from ${ip} lookup wg-clerie"; prio = 19000; }
|
||||
{ rule = "from ${ip} unreachable"; prio = 19001; }
|
||||
]) cfg.ipv4s) ++ [
|
||||
# Do not reach VPN server via VPN
|
||||
{ rule = "to 78.47.183.82/32 ipproto udp dport 51820 lookup main"; prio = 20000; }
|
||||
{ rule = "to 78.47.183.82/32 ipproto udp dport 51820 unreachable"; prio = 20001; }
|
||||
# Try direct routing first, fallback to VPN
|
||||
{ rule = "lookup main"; prio = 21000; }
|
||||
] ++ (if cfg.defaultViaVPN then [
|
||||
{ rule = "lookup wg-clerie"; prio = 21001; }
|
||||
] else []) ++ [
|
||||
{ rule = "unreachable"; prio = 22000; }
|
||||
];
|
||||
};
|
||||
|
||||
networking.wireguard.enable = true;
|
||||
networking.wireguard.interfaces = {
|
||||
wg-clerie = {
|
||||
privateKeyFile = if cfg.privateKeyFile != null then cfg.privateKeyFile else
|
||||
config.sops.secrets.wg-clerie.path;
|
||||
ips = cfg.ipv6s ++ cfg.ipv4s;
|
||||
table = "wg-clerie";
|
||||
peers = [
|
||||
{
|
||||
# Fallback to legacy IP if there is no route to VPN server
|
||||
endpoint = "$(ip route get 2a01:4f8:c0c:15f1::1 ipproto udp dport 51820 &>/dev/null && echo '[2a01:4f8:c0c:15f1::1]:51820' || echo '78.47.183.82:51820')";
|
||||
persistentKeepalive = 25;
|
||||
dynamicEndpointRefreshSeconds = 5;
|
||||
allowedIPs = [ "0.0.0.0/0" "::/0" "10.20.30.0/24" "2a01:4f8:c0c:15f1::/113" ];
|
||||
publicKey = "2p1Jqs3bkXbXHFWE6vp1yxHIFoUaZQEARS2nJzbkuBA=";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -45,30 +45,39 @@ if [[ ! -f "${CONFIG_DIR}/auth_username" ]]; then
|
||||
echo "File ${CONFIG_DIR}/auth_username not found"
|
||||
ISSUE_EXIST=1
|
||||
fi
|
||||
if [[ ! -f "${CONFIG_DIR}/auth_password" ]]; then
|
||||
echo "File ${CONFIG_DIR}/auth_password not found"
|
||||
ISSUE_EXIST=1
|
||||
fi
|
||||
if [[ -n "${ISSUE_EXIST}" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RESTIC_PASSWORD_FILE="${CONFIG_DIR}/repo_password"
|
||||
export RESTIC_PASSWORD_FILE
|
||||
RESTIC_REPOSITORY="rest:$(cat "${CONFIG_DIR}/repo_url")"
|
||||
REPO_URL="$(cat "${CONFIG_DIR}/repo_url")"
|
||||
if [[ "${REPO_URL}" == http* ]]; then
|
||||
RESTIC_REPOSITORY="rest:${REPO_URL}"
|
||||
else
|
||||
RESTIC_REPOSITORY="${REPO_URL}"
|
||||
fi
|
||||
export RESTIC_REPOSITORY
|
||||
RESTIC_REST_USERNAME="$(cat "${CONFIG_DIR}/auth_username")"
|
||||
export RESTIC_REST_USERNAME
|
||||
RESTIC_REST_PASSWORD="$(cat "${CONFIG_DIR}/auth_password")"
|
||||
export RESTIC_REST_PASSWORD
|
||||
if [[ -e "${CONFIG_DIR}/auth_password" ]]; then
|
||||
RESTIC_REST_PASSWORD="$(cat "${CONFIG_DIR}/auth_password")"
|
||||
export RESTIC_REST_PASSWORD
|
||||
fi
|
||||
RESTIC_PROGRESS_FPS="0.1"
|
||||
export RESTIC_PROGRESS_FPS
|
||||
RESTIC_CACHE_DIR="/var/cache/restic"
|
||||
export RESTIC_CACHE_DIR
|
||||
|
||||
EXTRA_OPTIONS=()
|
||||
|
||||
if [[ -e "${CONFIG_DIR}/ssh_key" ]]; then
|
||||
EXTRA_OPTIONS+=("-o" "sftp.args='-o IdentityFile=${CONFIG_DIR}/ssh_key'")
|
||||
fi
|
||||
|
||||
case "${ACTION}" in
|
||||
restic)
|
||||
restic "$@"
|
||||
restic "${EXTRA_OPTIONS[@]}" "$@"
|
||||
;;
|
||||
backup)
|
||||
ISSUE_EXIST=
|
||||
@@ -84,9 +93,9 @@ backup)
|
||||
exit 1
|
||||
fi
|
||||
|
||||
restic snapshots --latest 1 || restic init
|
||||
restic "${EXTRA_OPTIONS[@]}" snapshots --latest 1 || restic "${EXTRA_OPTIONS[@]}" init
|
||||
|
||||
restic backup --exclude-file "${CONFIG_DIR}/excludes" --files-from "${CONFIG_DIR}/files"
|
||||
restic "${EXTRA_OPTIONS[@]}" backup --exclude-file "${CONFIG_DIR}/excludes" --files-from "${CONFIG_DIR}/files"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported ACTION: ${ACTION}"
|
||||
|
||||
10
pkgs/clerie-ssh-known-hosts/additional-ssh-known-hosts
Normal file
10
pkgs/clerie-ssh-known-hosts/additional-ssh-known-hosts
Normal file
@@ -0,0 +1,10 @@
|
||||
backup.clerie.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBsTlqDyK726hwhX8lbs9EhMrkf3LsKIm5Ya3k39C7VZ
|
||||
git.clerie.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIHQDwfRlw6L+pkLjXDgW2BUWlY1zNEDtVhNEsClgqaL
|
||||
|
||||
mercury.net.clerie.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH4HbnxUyBAxidh88rIvG9tf61/VWjndMLOSvx9LZY+u
|
||||
|
||||
clerie.uber.space ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINT6gukzAjyu8ST6ndP5TgXWEfdksxyqmMz4ngQkyVLr
|
||||
cleriewi.uber.space ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH3k7sMhABfQr9CufavOY6BCXJPpDH5OFkRpz/vJ2gSF
|
||||
|
||||
ceea.uber.space ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJg2Vr3/SucAM13pZGR36W/LPFcTI9nCQAIIATIZGL9A
|
||||
reichart.uber.space ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINhafJF7TZPAhX1hj4saom21RqkOMVFF7bLVKaEC+vcB
|
||||
@@ -10,7 +10,6 @@ let
|
||||
sshPubkey = stripR (builtins.readFile (../../hosts + "/${hostname}/ssh.pub"));
|
||||
}) hostsWithSshPubkey;
|
||||
knownHosts = builtins.concatStringsSep "" (builtins.map ({name, sshPubkey}: ''
|
||||
${name} ${sshPubkey}
|
||||
${name}.net.clerie.de ${sshPubkey}
|
||||
'') sshkeyList);
|
||||
in writeTextFile {
|
||||
@@ -18,5 +17,9 @@ in writeTextFile {
|
||||
destination = "/known_hosts";
|
||||
allowSubstitutes = true;
|
||||
preferLocalBuild = false;
|
||||
text = knownHosts;
|
||||
text = ''
|
||||
${knownHosts}
|
||||
|
||||
${builtins.readFile ./additional-ssh-known-hosts}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ if TUNNEL_INTERFACE_CONFIG="$(ip --json link show "${TUNNEL_INTERFACE_NAME}")";
|
||||
if [[ "${TUNNEL_INTERFACE_ORIGIN_ADDRESS}" != "${WAN_INTERFACE_ADDRESS}" || "${TUNNEL_INTERFACE_REMOTE_ADDRESS}" != "${AFTR_ADDRESS}" || "${TUNNEL_INTERFACE_OPERSTATE}" != "UNKNOWN" ]]; then
|
||||
log_tunnel "Bad configuration, fixing tunnel parameter"
|
||||
|
||||
ip tunnel change "${TUNNEL_INTERFACE_NAME}" mode ipip6 local "${WAN_INTERFACE_ADDRESS}" remote "${AFTR_ADDRESS}"
|
||||
ip tunnel change "${TUNNEL_INTERFACE_NAME}" mode ipip6 local "${WAN_INTERFACE_ADDRESS}" remote "${AFTR_ADDRESS}" encaplimit none
|
||||
ip link set "$TUNNEL_INTERFACE_NAME" up
|
||||
else
|
||||
log_tunnel "Tunnel already configured"
|
||||
@@ -91,7 +91,7 @@ if TUNNEL_INTERFACE_CONFIG="$(ip --json link show "${TUNNEL_INTERFACE_NAME}")";
|
||||
else
|
||||
log_tunnel "Setting up DS-Lite tunnel"
|
||||
|
||||
ip tunnel add "${TUNNEL_INTERFACE_NAME}" mode ipip6 local "${WAN_INTERFACE_ADDRESS}" remote "${AFTR_ADDRESS}"
|
||||
ip tunnel add "${TUNNEL_INTERFACE_NAME}" mode ipip6 local "${WAN_INTERFACE_ADDRESS}" remote "${AFTR_ADDRESS}" encaplimit none
|
||||
ip link set "$TUNNEL_INTERFACE_NAME" up
|
||||
fi
|
||||
|
||||
|
||||
6
pkgs/fem-ssh-known-hosts/default.nix
Normal file
6
pkgs/fem-ssh-known-hosts/default.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{ runCommand, ... }:
|
||||
|
||||
runCommand "fem-ssh-known-hosts" {} ''
|
||||
mkdir -p $out
|
||||
cp ${./fem-ssh-known-hosts} $out/known_hosts
|
||||
''
|
||||
47
pkgs/fem-ssh-known-hosts/fem-ssh-known-hosts
Normal file
47
pkgs/fem-ssh-known-hosts/fem-ssh-known-hosts
Normal file
@@ -0,0 +1,47 @@
|
||||
# FeM FeM SSH Known Hosts
|
||||
|
||||
# Gitlab
|
||||
gitlab.fem-net.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH7jb0VQpEJD+Xf9Odb0ROK9BWvm1bI0JW92zVOewnSO
|
||||
|
||||
# Jumphost Mgmt-VLAN
|
||||
grumpy.fem.tu-ilmenau.de ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ/8cqTuuAY2YaC0nLX9RexBeMbXEhvczpTSmzYqob3ke4NAUnVFRU/vnCQQDHG3sNtpEErKlE2/MyyGrqSssI=
|
||||
|
||||
# Webhosting
|
||||
web-1.fem.tu-ilmenau.de ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBO1ErxOUxu501CDKZokoLzky4e0LGm+wsrOhWfG1iq1vRkHf+nANMzR0XwTdUOZBJ2NnU2ReorGVzdBzEP3YDOo=
|
||||
web-1.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICH2vZqsv/5w2PKFccBZUmkBQDHNJmkwGTu0kIC1t146
|
||||
|
||||
# FeM Office
|
||||
officevm.fem.tu-ilmenau.de ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBhquVgaKqQC3OaYW6kXpPOhkoLptTTeuWf5P43XaWszzCt6Wyu4gXcp/+6vLUE/QubiMoqBzBBsibsLjRQWxrk=
|
||||
|
||||
# Xen Virt oberer Campus
|
||||
[chrom.net.fem.tu-ilmenau.de]:1022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMAM+QrJTssQZJ3hJUHtjxUd0jBRMyWzPr/dCJ/X9Nyx+xfklyIw301aDKnbdLp3kKDJB5/oj1Zc2f9HsP9yO1w=
|
||||
[chrom.net.fem.tu-ilmenau.de]:1022 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC8SGRtJw7crcNS2+gmD3Qel/oKkaY/ZFa+72mHe7TDveUBfgi6dWM0BW4Se3uIqxEStlbYoE/GxVA8SnmTUJx2xyqC43gGT8uYdKZBF3rZ2d6U39jTH7aKkuO96DDMj+0oKnMK22MRWLCdIwyrrY3sWXsedc0aC0nTsO8D3LIiQHYQ1C4eCyYt7qntc7jU+5T5/HkWwCouyMajHZyDMpyzWD35mt0pSdOaqtbKnplYTLSEQ3xQ2CFFplaPe3ZafR8J0sdxpHogrXnKcIkpsm2qNInzF/gX7vUFWNCdmvBmwbz5ThFaE8Rlw6W8jO741Zgxp6RLdTpBk9KxsbG9oKWlBaZ5rqkrWvHLjLDOINFhlqeTJrjmqBmaDGBzc/JDAG96wUtkWzbRluyFD+j9MKcCb5T2VB3AMDAQ4WA6ykPWvekmiAADjg0sxiNZ8q/JkxbW0H9zMNNLpxfoVxS5DLIQk7Ee8tuJNJ9h4DSHl3pb0zwugblvI0wPCDtTUnrB5d0=
|
||||
[chrom.net.fem.tu-ilmenau.de]:1022 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOePZRlNv7ZeOhX6kwNjT1dIm3n91Vn19pUtERupHPvQ
|
||||
[flavino.net.fem.tu-ilmenau.de]:1022 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAOhhOUnBBoozLULy/Q2VAoXD1/dlruEYFKlCJLPBZ87
|
||||
[flavino.net.fem.tu-ilmenau.de]:1022 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnhmna9iIWp74LfvkdesvaGidMC2Uadz0w3hYGdu88tpQrc7CE21Vp+/8koSSubE6nGYV5JuZAL5mHW8xjq87POSkX2El6V0AyCWOofarmIciWDdlxszMxmk/rJnW8s/noZpUQWP2s9AGy7NqCHnzcxrNLCeQkAMdJw5KwKJ6dPNc8H3/FwdYgYipOb/WOZQrTn3MZEA9h6vPm/MN+zfzl4hKBSzmt9qSL546PiREgVkk/cIrAq6xDilSGHjGT+EiIC8p+0QsiLdhvD4bnn4fHisVzypY9BXAeF9DE0RivUEkP9HwuH61dwQKT90UPiifg0LFSPegd+vM/WwuZghPz
|
||||
[flavino.net.fem.tu-ilmenau.de]:1022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJFZGrjTt9YiErgspJsEgA8uYse7OyD9EeTa8FvGNZJyALbQIVp5LW4XLsUmFcl3utx4wJD4VaCf62T9ocq1odY=
|
||||
[flavino.fem.tu-ilmenau.de]:1022 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAOhhOUnBBoozLULy/Q2VAoXD1/dlruEYFKlCJLPBZ87
|
||||
|
||||
# pgsql-2 database cluster
|
||||
pgsql-2-node-1.net.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICd/uXtoDNL4YIh1hF8z95dJ9p9at6dilrSkuuiL8Mz+
|
||||
pgsql-2-node-1.net.fem.tu-ilmenau.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCyYxSGd+/eO5gzQDvzJQzt66Lw12XuTrnZwQxfoK4ziiy20uVj+3Jv+6vX9HmqVpFPmdj0HZX9b8K6SzAF32e6AvZo8cShG9K1S8nefJHAeRXf7st/tGf5BUd5J2tfGOs7187dabofcsEGlqy7qxPQz/DXoR9jjZeiVfVhTXURWSEDOwkuS19yYkMd6HDng3ptk3eIM0XBZBXiMty+kt/elLf5tbLOgaEkP73qefHCGjE2qnErRg5yfYSKD+tjSZoVHM2wjpyy+jW1zvo0GGwhmA58GN5/J4EiHTEi7FIF/IwopjvCQ3YU6i/XqmgbYPLJRXDRLJNgfJITueTovHHHgwcm6Vg8bOnO0p/+syrZFw015CeucY0rhbjw0tmEMLgxgdLuztlWwop0RmwIjzbUs2w7Dg7T8J/bshOQgpzGHE6eLcp1ptu5lIz0xH0ltiiLCV5Lx1MKZakZKhLCvnHkfF9fMMH1F2U2NOnBej0RnappWmbYv2W4fY6EhK5cu1Wreh1XCrhbOXp9CVfcaqt238lTNx2qtJrL6X7dNLloIeEDQ/zzCI0bea8okelOO7R0/LBVnqGN5zUAdJL+5B0a25UZF+fudnwuqwwjA8TCqTFDvPTm4/jWrCMbpHaICT/+w/53rKn8UOHfSF2u+4HEPAbL5X0HC97d2SwLZs001w==
|
||||
pgsql-2-node-2.net.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPmr+R1DBuIDrV4WfUsBQJ7KmkLY5DLFJyDJjfWBU2Vx
|
||||
pgsql-2-node-2.net.fem.tu-ilmenau.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDNg8/SXPdAKkYaqc0N+MoJcikAi3u3hxPiDNHOKGvvf7NtnoWg36y89KQAm3Qv7jZ++WOgUZzGeG8uQDibRQKZheAPbVC6lSnlV5gXLxfm6KpEyJKqGHzj8PW+gldPVB/EuLJSMncfmSPnD660COdyaNztvI8LSyWoWnL5bPb8rcCJaFydfO/yf8jvGrJHf7rKBTb21w8jsqhIGev55PrIqZZCR2UuyoLyqEAVD0oSGAvVFwrWp2il2ufZvy4Qq809KGDjbNoDQMIcAOek0PWVjrSF0k9/qHB3XJoaqwki4kwNKLL8vwgr/3RM2EiWtSObh+1xdLWFbt4QA8Cjq5UAquCwG36vx43rR2TY77ldJ2VAY+SAwxn3JGBzCPOASp7LaRtHL6VVqHxA7Zi6yOGIH39dXeSPK/UzXMF6dOcQqx7hFB8Zgl8En9mNNjVAoneJ4Hr45CO0e3/Adv6zBEsXtkmbb/1TyUoOdli/ZQM9++AzB+T9hO7D2/CzUL8IU6Qid+Dqo90IqvhC8S3HDUQvGXkVSh6cLd0wSI7LtSUVs/ypd8gGiOGtlyDo/d85gl7fZA4bIaQ0ohJtDAtGbwVowk0ZQfUfHSJIZqZdNEPWy5ooGWJRlVVCenBXvAu1Bx3QPccY/O/NoB2Hyr4aooh/YEpkFFPyqo5G/KoMdJ5qEQ==
|
||||
pgsql-2-node-3.net.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICsJOfaJut0w+Aey4HSjlFDWRp5z2rBRYh0yhwZG8ORK
|
||||
pgsql-2-node-3.net.fem.tu-ilmenau.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCswxmPwXiboy03LltFgoGW2/AMm+wM37nwLI/2dtdkCaICn95krMo3JTKNdq810UiaB0UUp5/FB090Lye1GmSWTHy8/vbEhW9bmf0+V9olvum3k4BT/mKRhvfpkTRlslDlRYgFMOhYuFpBZOn3h0iUJg2MwWWY8Ce6KymzUwwfOsSTDDiPY6Tcdt0OML6fRvUxCe9EOD82FO+PuAO44uoEC84YT3qNufzt4/O/Xy71lIiTFyEv2isJJ3MWFTyLnAg+KT18ztzYvCBAa9AXXsZpE/M/hh0tcKdUqNw2gscgLkELA0olQbi4rGYAkKEcn/QIRPRrKTx3I43vDBiZZkQXeTLnvtJjcK38W6rcqJ9B5tFyAWzpBh767Yr0BbgfkgOJ4EcZhFuH5Y2uCZnFB6HlwehhQq0vGgE04zzGsW3ODIdiE15aoHBl9vrDXKr84hmZ8+/FU8+ds3IOSoQgK8ZXMB/Bat9MmNLcdzwpxRgeZIHl0w1Z6OPOm5qAPSAR5PtqLo69nhb3cc/VoK9S41e5zeBx7o8eYcPkKUeWNI+wV5aw3fbzk5RQQX4YImFaYVqYJw+NxkKQns3Wcr1+TbpX/mYY2uobZHvMzdqbhheBMyKS6vIhxcZEUc0+1qgjqrgp7TkXU/kXN9huULeZ3OQNJkuEPm7OWTcZElJohokflQ==
|
||||
|
||||
# Video Storage
|
||||
[video-storage.fem.tu-ilmenau.de]:1022 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ6J6Mn14zjBoAJyiaLg+76x6eedM/NUrKcpMltP6DwY
|
||||
[video-storage.fem.tu-ilmenau.de]:1022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMvUAbPLQrDJYgL2wCvNrxdgZU65J0dU9vCwIwGYVXRvKv9S9RyDuDZvWLTZl26KIrVy94pnlySK0Zi2wJ6oOtg=
|
||||
|
||||
# NixOS build server
|
||||
fuedra.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILvofCx3KMN+A0G58akpp1BMsmY6731YrYBWntEC9LQ1
|
||||
fuedra.fem.tu-ilmenau.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC9eiienHWTqncnsI0Ttnkb68rCwnublqU8rki/JmCZ8Yl2+QP8bOYvqRIf3Pq+4WTYCxmzOCaaHJRzYCB1wiohdxsmxj0qNgMfyzmY6rf38Cjby0QpBEq31sHc+4oeKKGqFiM5mdBq/69DKs0aY8hob0Iy1dqwjMfDNcRXz08Uzq7S08YNXB0nkuMFaS7WYj+m0aX8SPanu0G7+OKzjzXfRWJlWUrAoj1flV723SyCGTRXdugsBjxpuudwoo17UNDZw7J7w63WqiUW4LfktB8mu+UaLbUzR2YK3IQLrEq42k9IB1LBknS8gKKd0FX56nJKCN0HrgbjSQZlw1x1S5wxfxbaSfOpZUblk+4PNSmpv/ca4S/Hdq7UlNrq2lJnoXj1nd+qrKGZ96or0dxYIHP1qH3WkExO8ywEkoazOG7khFqxddLzPMdhrhp93EHN9QEKgpSpm2YbP416I64Pu77+DtCCXS8ywnl9rf4JO8Kr1v4JdiG34yL14mvq4saI1f4X+bCWuotf45cRezqlB5WVz/2FywYQKHj6wFMM4ew+6beSgFx/0TUdkDQYZPKp6xmb7A5wxdhZ9nZfYa3p0neJTDe1gTpin3xs9Byexoe/jEtiWBwZ+3SvZ9z1DK4QnHaa7FiGa8KxQwEiUUfs45GjxnpT9J0b3wgaJTlbDZNTMQ==
|
||||
|
||||
# fem.social
|
||||
mastodon.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzI1QoVPrwaJnbwA5PmmtGsiKBhV4ZO/q8Vb07r8I1w
|
||||
mastodon.fem.tu-ilmenau.de ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDXMGscT9g55wT/rzkNzO8ScOh9Kw049Fu9ocAWvkDauiVJPtLE+7C16JQyzHKeMcuXCRpgv6g4BJQhPYoD1C4Gq7zjiYvIyiAFLcqvdK4ROhiJw5vxYvcEUNLTmydcsaS/GWOIRzLeZo1DOsDG/jiMcmVq2hRUc32QJroMci5fSvNC+6lNjxomZE/gnwATdjV0TTgIaQy0EkgSn7vyD3qpNSax0StPCLIFxPSy1fP3IQmYIsObiaSlcvdVH4bE0DUPe1gzIufTGEINVdlUl5847cIr+ZGOSaS0SP8fP7qXYqrwFt83ROspTr9UnyhmJayqIODu2RMpvrhHITlm5Lo5wazw2GLormWxVmhtDIqypKOUG93hdZ8a55x1Z7nnfS6cnPoZA5QwY02zjKaAvDkw1NN7Ud/LCfv/Vpu+EwsNJSoxSK6yx7k6X2qd99KTVzDm9AkXlzzOYZhAOQSskp5mOfb82mCFk/YImoDQ7tVcy9PLnxhcQ2b/OY/akobjYhitlmPENAY/KhrqE26lwmzA5V0jEi5SqJXYNQcTktNPUDBCc0maS8azroDmom5dlozPTLcR/9+/BgzR1cEtiyqajJFkuKUSkwA3x9D07wJSquu5CDO+Wf5U15k60cBRICxlh5n0w19sybZn9jffPg5v7IPBa6hhKdFynHyec1/M3w==
|
||||
|
||||
# FeM XMPP
|
||||
xmpp-2.fem.tu-ilmenau.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPMfNNj/nEYDeF8I7ds/yyQ+fJ+2AGZkGFNh3y3ZUReW
|
||||
xmpp-2.fem-net.de ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPMfNNj/nEYDeF8I7ds/yyQ+fJ+2AGZkGFNh3y3ZUReW
|
||||
26
pkgs/nixfiles-docs-options/default.nix
Normal file
26
pkgs/nixfiles-docs-options/default.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
lib,
|
||||
writeText,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
evaluatedModules = lib.evalModules {
|
||||
modules = [
|
||||
../../modules
|
||||
../../profiles
|
||||
{
|
||||
_module.check = false;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
writeText "options.json" (
|
||||
builtins.toJSON (
|
||||
lib.filter (opt: !opt.internal && !(lib.head opt.loc == "_module")) (
|
||||
lib.optionAttrSetToDocList evaluatedModules.options
|
||||
)
|
||||
)
|
||||
)
|
||||
27
pkgs/nixfiles-docs/default.nix
Normal file
27
pkgs/nixfiles-docs/default.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
stdenv,
|
||||
mkdocs-material
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "nixfiles-docs";
|
||||
|
||||
src = ../../docs;
|
||||
|
||||
buildInputs = [
|
||||
mkdocs-material
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
python3 -m mkdocs build
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r ./site/* $out/
|
||||
|
||||
mkdir -p $out/nix-support
|
||||
echo "doc manual $out" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ final: prev: {
|
||||
ds-lite-dhcpcd-hook = final.callPackage ./ds-lite-dhcpcd-hook {};
|
||||
factorio-launcher = final.callPackage ./factorio-launcher {};
|
||||
feeds-dir = final.callPackage ./feeds-dir {};
|
||||
fem-ssh-known-hosts = final.callPackage ./fem-ssh-known-hosts {};
|
||||
generate-blocked-prefixes = final.callPackage ./generate-blocked-prefixes {};
|
||||
git-checkout-github-pr = final.callPackage ./git-checkout-github-pr {};
|
||||
git-diff-word = final.callPackage ./git-diff-word {};
|
||||
@@ -26,6 +27,8 @@ final: prev: {
|
||||
"http.server" = final.callPackage ./http.server {};
|
||||
nix-remove-result-links = final.callPackage ./nix-remove-result-links {};
|
||||
nixfiles-auto-install = final.callPackage ./nixfiles/nixfiles-auto-install.nix {};
|
||||
nixfiles-docs = final.python3.pkgs.callPackage ./nixfiles-docs {};
|
||||
nixfiles-docs-options = final.callPackage ./nixfiles-docs-options {};
|
||||
nixfiles-generate-config = final.callPackage ./nixfiles/nixfiles-generate-config.nix {};
|
||||
nixfiles-generate-backup-secrets = final.callPackage ./nixfiles/nixfiles-generate-backup-secrets.nix {};
|
||||
nixfiles-update-ssh-host-keys = final.callPackage ./nixfiles/nixfiles-update-ssh-host-keys.nix {};
|
||||
@@ -35,4 +38,5 @@ final: prev: {
|
||||
ssh-gpg = final.callPackage ./ssh-gpg {};
|
||||
update-from-hydra = final.callPackage ./update-from-hydra {};
|
||||
uptimestatus = final.python3.pkgs.callPackage ./uptimestatus {};
|
||||
well-known-ssh-known-hosts = final.callPackage ./well-known-ssh-known-hosts {};
|
||||
}
|
||||
|
||||
6
pkgs/well-known-ssh-known-hosts/default.nix
Normal file
6
pkgs/well-known-ssh-known-hosts/default.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{ runCommand, ... }:
|
||||
|
||||
runCommand "well-known-ssh-known-hosts" {} ''
|
||||
mkdir -p $out
|
||||
cp ${./well-known-ssh-known-hosts} $out/known_hosts
|
||||
''
|
||||
30
pkgs/well-known-ssh-known-hosts/well-known-ssh-known-hosts
Normal file
30
pkgs/well-known-ssh-known-hosts/well-known-ssh-known-hosts
Normal file
@@ -0,0 +1,30 @@
|
||||
# List of SSH Public Keys that should be pinned everywhere
|
||||
# Check fingerprints with:
|
||||
# ssh-keygen -l -f ./well-known-ssh-known-hosts
|
||||
|
||||
# Github
|
||||
# From: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints
|
||||
# SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
|
||||
github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
|
||||
# SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
|
||||
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
|
||||
# SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s
|
||||
github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=
|
||||
|
||||
# GitLab.com
|
||||
# From: https://docs.gitlab.com/user/gitlab_com/#ssh-host-keys-fingerprints
|
||||
# SHA256:eUXGGm1YGsMAS7vkcx6JOJdOGHPem5gQp4taiCfCLB8
|
||||
gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf
|
||||
# SHA256:ROQFvPThGrW4RuWLoL9tq9I9zJ42fK4XywyRtbOz/EQ
|
||||
gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9
|
||||
# SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw
|
||||
gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY=
|
||||
|
||||
# Codeberg
|
||||
# From: https://docs.codeberg.org/security/ssh-fingerprint/
|
||||
# SHA256:T9FYDEHELhVkulEKKwge5aVhVTbqCW0MIRwAfpARs/E
|
||||
codeberg.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL2pDxWr18SoiDJCGZ5LmxPygTlPu+cCKSkpqkvCyQzl5xmIMeKNdfdBpfbCGDPoZQghePzFZkKJNR/v9Win3Sc=
|
||||
# SHA256:6QQmYi4ppFS4/+zSZ5S4IU+4sa6rwvQ4PbhCtPEBekQ
|
||||
codeberg.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8hZi7K1/2E2uBX8gwPRJAHvRAob+3Sn+y2hxiEhN0buv1igjYFTgFO2qQD8vLfU/HT/P/rqvEeTvaDfY1y/vcvQ8+YuUYyTwE2UaVU5aJv89y6PEZBYycaJCPdGIfZlLMmjilh/Sk8IWSEK6dQr+g686lu5cSWrFW60ixWpHpEVB26eRWin3lKYWSQGMwwKv4LwmW3ouqqs4Z4vsqRFqXJ/eCi3yhpT+nOjljXvZKiYTpYajqUC48IHAxTWugrKe1vXWOPxVXXMQEPsaIRc2hpK+v1LmfB7GnEGvF1UAKnEZbUuiD9PBEeD5a1MZQIzcoPWCrTxipEpuXQ5Tni4mN
|
||||
# SHA256:mIlxA9k46MmM6qdJOdMnAQpzGxF4WIVVL+fj+wZbw0g
|
||||
codeberg.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIVIC02vnjFyL+I4RHfvIGNtOgJMe769VTF1VR4EB3ZB
|
||||
31
profiles/common-ssh/default.nix
Normal file
31
profiles/common-ssh/default.nix
Normal file
@@ -0,0 +1,31 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
|
||||
options.profiles.clerie.common-ssh = {
|
||||
enable = mkEnableOption "Common ssh config";
|
||||
};
|
||||
|
||||
config = mkIf config.profiles.clerie.common-ssh.enable {
|
||||
|
||||
services.openssh.enable = true;
|
||||
services.openssh.settings = {
|
||||
PasswordAuthentication = false;
|
||||
KbdInteractiveAuthentication = false;
|
||||
PermitRootLogin = lib.mkDefault "no";
|
||||
};
|
||||
services.openssh.hostKeys = lib.mkForce [
|
||||
# Only create ed25519 host keys
|
||||
{ type = "ed25519"; path = "/etc/ssh/ssh_host_ed25519_key"; }
|
||||
];
|
||||
|
||||
programs.ssh.knownHostsFiles = [
|
||||
(pkgs.clerie-ssh-known-hosts + "/known_hosts")
|
||||
(pkgs.fem-ssh-known-hosts + "/known_hosts")
|
||||
(pkgs.well-known-ssh-known-hosts + "/known_hosts")
|
||||
];
|
||||
|
||||
};
|
||||
}
|
||||
@@ -11,11 +11,11 @@ with lib;
|
||||
config = mkIf config.profiles.clerie.common.enable {
|
||||
|
||||
profiles.clerie.common-dns.enable = mkDefault true;
|
||||
|
||||
profiles.clerie.common-networking.enable = mkDefault true;
|
||||
profiles.clerie.common-nix.enable = mkDefault true;
|
||||
|
||||
profiles.clerie.common-ssh.enable = mkDefault true;
|
||||
profiles.clerie.common-webserver.enable = mkDefault true;
|
||||
|
||||
profiles.clerie.hetzner-storage-box-client.enable = mkDefault true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
./common-dns
|
||||
./common-networking
|
||||
./common-nix
|
||||
./common-ssh
|
||||
./common-webserver
|
||||
./cybercluster-vm
|
||||
./desktop
|
||||
@@ -16,6 +17,7 @@
|
||||
./firefox
|
||||
./gpg-ssh
|
||||
./hetzner-cloud
|
||||
./hetzner-storage-box-client
|
||||
./hydra-build-machine
|
||||
./mercury-vm
|
||||
./monitoring-server
|
||||
|
||||
@@ -11,7 +11,7 @@ with lib;
|
||||
roboto
|
||||
roboto-mono
|
||||
noto-fonts
|
||||
noto-fonts-emoji
|
||||
noto-fonts-color-emoji
|
||||
comfortaa
|
||||
] ++ (if pkgs ? "noto-fonts-cjk-sans" then [ pkgs.noto-fonts-cjk-sans ] else [ pkgs.noto-fonts-cjk ]);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ with lib;
|
||||
|
||||
boot.resumeDevice = lib.optionalString ((lib.length config.swapDevices) > 0) (lib.head config.swapDevices).device;
|
||||
services.logind = {
|
||||
lidSwitch = "suspend-then-hibernate";
|
||||
settings.Login.HandleLidSwitch = "suspend-then-hibernate";
|
||||
};
|
||||
systemd.sleep.extraConfig = ''
|
||||
HibernateDelaySec=30m
|
||||
|
||||
@@ -12,8 +12,6 @@ with lib;
|
||||
|
||||
programs.firefox.enable = true;
|
||||
|
||||
programs.firefox.package = pkgs.firefox-wayland;
|
||||
|
||||
programs.firefox.policies = {
|
||||
AutofillAddressEnabled = false;
|
||||
AutofillCreditCardEnabled = false;
|
||||
|
||||
19
profiles/hetzner-storage-box-client/default.nix
Normal file
19
profiles/hetzner-storage-box-client/default.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
|
||||
options.profiles.clerie.hetzner-storage-box-client = {
|
||||
enable = mkEnableOption "Profile for Hetzner Storage Box Clients";
|
||||
};
|
||||
|
||||
config = mkIf config.profiles.clerie.hetzner-storage-box-client.enable {
|
||||
|
||||
programs.ssh.knownHostsFiles = [
|
||||
./hetzner-storage-box-ssh_known_hosts
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# SSH public keys of Hetzner Storage Box servers
|
||||
# Fingerprints from: https://docs.hetzner.com/de/storage/storage-box/general#ssh-host-keys
|
||||
# Verify with: ssh-keygen -l -f hetzner-storage-box-ssh_known_hosts
|
||||
# SHA256:XqONwb1S0zuj5A1CDxpOSuD2hnAArV1A3wKY7Z3sdgM MD5:12:cd:bd:c7:de:76:91:34:1c:24:31:24:55:40:ab:87
|
||||
*.your-storagebox.de,[*.your-storagebox.de]:23 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIICf9svRenC/PLKIL9nk6K/pxQgoiFC41wTNvoIncOxs
|
||||
# SHA256:EMlfI8GsRIfpVkoW1H2u0zYVpFGKkIMKHFZIRkf2ioI MD5:3d:7b:6f:99:5f:68:53:21:73:15:f9:2e:6b:3a:9f:e3
|
||||
*.your-storagebox.de,[*.your-storagebox.de]:23 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5EB5p/5Hp3hGW1oHok+PIOH9Pbn7cnUiGmUEBrCVjnAw+HrKyN8bYVV0dIGllswYXwkG/+bgiBlE6IVIBAq+JwVWu1Sss3KarHY3OvFJUXZoZyRRg/Gc/+LRCE7lyKpwWQ70dbelGRyyJFH36eNv6ySXoUYtGkwlU5IVaHPApOxe4LHPZa/qhSRbPo2hwoh0orCtgejRebNtW5nlx00DNFgsvn8Svz2cIYLxsPVzKgUxs8Zxsxgn+Q/UvR7uq4AbAhyBMLxv7DjJ1pc7PJocuTno2Rw9uMZi1gkjbnmiOh6TTXIEWbnroyIhwc8555uto9melEUmWNQ+C+PwAK+MPw==
|
||||
@@ -11,8 +11,10 @@ with lib;
|
||||
config = mkIf config.profiles.clerie.router.enable {
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
wireguard-tools
|
||||
conntrack-tools
|
||||
iptstate # show conntrack table
|
||||
tcpdump
|
||||
wireguard-tools
|
||||
];
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
|
||||
Reference in New Issue
Block a user