helios.nix (4276B)
1 { 2 pkgs, 3 config, 4 lib, 5 simple-web-app, 6 daily-tracker, 7 mkv, 8 website, 9 ... 10 }: 11 { 12 imports = [ 13 ../modules/wireguard-client.nix 14 ../modules/nginx.nix 15 ../modules/mediawiki.nix 16 ../modules/forgejo.nix 17 ../modules/mkv.nix 18 ../modules/simple-web-app.nix 19 ../modules/daily-tracker.nix 20 ../modules/mailserver.nix 21 ]; 22 23 # Generic 24 system.stateVersion = "25.05"; 25 environment.systemPackages = with pkgs; [ 26 vim 27 wget 28 curl 29 rsync 30 rclone 31 zip 32 unzip 33 ]; 34 nix.settings.experimental-features = [ 35 "nix-command" 36 "flakes" 37 ]; 38 services.openssh.enable = true; 39 networking.firewall.allowedTCPPorts = [ 80 443 ]; 40 41 boot.loader.grub.enable = false; 42 fileSystems."/" = { 43 device = "/dev/sda1"; 44 fsType = "ext4"; 45 }; 46 fileSystems."/mnt/volume-hel1-1" = { 47 device = "/dev/sdb"; 48 fsType = "ext4"; 49 }; 50 swapDevices = [{ 51 device = "/var/lib/swapfile"; 52 size = 2048; 53 }]; 54 55 nix.gc = { 56 automatic = true; 57 dates = "weekly"; 58 options = "--delete-older-than 30d"; 59 }; 60 nix.settings.auto-optimise-store = true; 61 62 # Specific 63 networking.hostName = "helios"; 64 time.timeZone = "Europe/Helsinki"; 65 66 sops.defaultSopsFile = ../secrets.yaml; 67 sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; 68 69 # VPN 70 services.local.wireguard-client = { 71 enable = true; 72 address = "10.100.0.7/24"; 73 privateKeySecretName = "hetzner_wireguard_key"; 74 }; 75 76 # Nginx 77 services.local.nginx-hardened = { 78 enable = true; 79 acmeEmail = "silasbrack@gmail.com"; 80 }; 81 82 # MediaWiki 83 services.local.mediawiki = { 84 enable = true; 85 name = "Silas' Wiki"; 86 domain = "wiki.fnarglebeast.com"; 87 passwordSecretName = "mediawiki_admin_password"; 88 }; 89 90 # Forgejo 91 services.local.forgejo = { 92 enable = true; 93 domain = "git.fnarglebeast.com"; 94 }; 95 96 # Personal website 97 services.nginx.virtualHosts."silasbrack.com" = let 98 staticSite = pkgs.runCommand "website" {} '' 99 mkdir -p $out 100 cp ${website}/index.html $out/ 101 cp -r ${website}/posts $out/ 102 cp -r ${website}/assets $out/ 103 ''; 104 in { 105 enableACME = true; 106 forceSSL = true; 107 root = staticSite; 108 locations."/" = {}; 109 }; 110 111 # MKV distributed key-value store 112 services.local.mkv = { 113 enable = true; 114 package = mkv.packages.${pkgs.stdenv.hostPlatform.system}.default; 115 volumes = [ 116 "http://10.100.0.7:8081" 117 "http://10.100.0.4:8081" 118 ]; 119 volume = { 120 enable = true; 121 listenAddress = "10.100.0.7"; 122 path = "/mnt/volume-hel1-1/mkv"; 123 }; 124 }; 125 126 # Simple Web App 127 services.simple-web-app = { 128 enable = true; 129 package = simple-web-app.packages.${pkgs.stdenv.hostPlatform.system}.default; 130 }; 131 132 # Daily Tracker 133 services.local.daily-tracker = { 134 enable = false; 135 package = daily-tracker.packages.${pkgs.stdenv.hostPlatform.system}.default; 136 domain = "daily-tracker.fnarglebeast.com"; 137 secretKeyBaseSecretName = "daily_tracker_secret_key_base"; 138 mailPasswordSecretName = "daily_tracker_mail_password"; 139 }; 140 sops.secrets.daily_tracker_secret_key_base = { }; 141 sops.secrets.daily_tracker_mail_password = { }; 142 143 # Mail server 144 services.local.mailserver = { 145 enable = true; 146 fqdn = "mail.silasbrack.com"; 147 domains = [ "silasbrack.com" ]; 148 accounts = { 149 "silas@silasbrack.com" = { 150 hashedPasswordFile = config.sops.secrets.mail_silas_password_hash.path; 151 aliases = [ "postmaster@silasbrack.com" ]; 152 }; 153 }; 154 }; 155 sops.secrets.mail_silas_password_hash = { }; 156 157 # Users 158 users.users = { 159 root.openssh.authorizedKeys.keys = [ 160 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGqHJMc2SCzL50SO9Flfnhn012p1dmp4Iph8lPQ2aoe/ silasbrack@gmail.com" 161 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPGZOv4PvL/NvBiDFnCh8V6xm03k/C3b8O82z1+tmboI gitea-runner" 162 ]; 163 silas = { 164 isNormalUser = true; 165 description = "Silas Brack"; 166 home = "/home/silas"; 167 extraGroups = [ "networkmanager" "wheel" ]; 168 openssh.authorizedKeys.keys = [ 169 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGqHJMc2SCzL50SO9Flfnhn012p1dmp4Iph8lPQ2aoe/ silasbrack@gmail.com" 170 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMZ0gNM0od3EE/LL27kYQ/s5MOU7LBNc0pWRWROeINij silas@Lorenzas-MacBook-Pro.local" 171 ]; 172 }; 173 }; 174 }