From 6d2441aefd7c207cf44f20f75fc6c261c2f5babc Mon Sep 17 00:00:00 2001 From: kB01 Date: Tue, 13 May 2025 00:36:49 +0200 Subject: [PATCH] Removed Old Hosts --- README.md | 4 - assets/LANA9Z.jpeg | Bin 54114 -> 0 bytes assets/server-solid.svg | 1 - .../master@kb-senfnvp/default.nix | 22 ---- .../nixos/services/binary-cache/default.nix | 35 ------ .../nixos/services/forgejo-runner/default.nix | 87 --------------- modules/nixos/services/minecraft/README.md | 10 -- modules/nixos/services/minecraft/database.nix | 27 ----- modules/nixos/services/minecraft/default.nix | 49 -------- modules/nixos/services/minecraft/secrets.yaml | 23 ---- modules/nixos/services/minecraft/survival.nix | 49 -------- .../nixos/services/minecraft/vanilla-test.nix | 30 ----- modules/nixos/services/minecraft/velocity.nix | 73 ------------ .../nixos/services/traefik-proxy/default.nix | 53 --------- modules/nixos/suites/nas/default.nix | 59 ---------- modules/nixos/suites/nas/jellyfin.nix | 41 ------- modules/nixos/suites/nas/kavita.nix | 42 ------- modules/nixos/suites/senfnvp/README.md | 39 ------- modules/nixos/suites/senfnvp/default.nix | 84 -------------- modules/nixos/suites/senfnvp/forgejo.nix | 54 --------- modules/nixos/suites/senfnvp/website.nix | 41 ------- systems/README.md | 84 -------------- systems/aarch64-linux/kb-senfnvp/default.nix | 75 ------------- systems/aarch64-linux/kb-senfnvp/hardware.nix | 52 --------- .../x86_64-iso/plasma6-64bit-iso/default.nix | 7 -- systems/x86_64-linux/U3ncSovm/default.nix | 61 ---------- systems/x86_64-linux/U3ncSovm/hardware.nix | 49 -------- systems/x86_64-linux/kb-game-01/default.nix | 105 ------------------ systems/x86_64-linux/kb-game-01/hardware.nix | 38 ------- systems/x86_64-linux/mow0m/default.nix | 61 ---------- systems/x86_64-linux/mow0m/hardware.nix | 83 -------------- 31 files changed, 1438 deletions(-) delete mode 100644 assets/LANA9Z.jpeg delete mode 100644 assets/server-solid.svg delete mode 100644 homes/aarch64-linux/master@kb-senfnvp/default.nix delete mode 100644 modules/nixos/services/binary-cache/default.nix delete mode 100644 modules/nixos/services/forgejo-runner/default.nix delete mode 100644 modules/nixos/services/minecraft/README.md delete mode 100644 modules/nixos/services/minecraft/database.nix delete mode 100644 modules/nixos/services/minecraft/default.nix delete mode 100644 modules/nixos/services/minecraft/secrets.yaml delete mode 100644 modules/nixos/services/minecraft/survival.nix delete mode 100644 modules/nixos/services/minecraft/vanilla-test.nix delete mode 100644 modules/nixos/services/minecraft/velocity.nix delete mode 100644 modules/nixos/services/traefik-proxy/default.nix delete mode 100644 modules/nixos/suites/nas/default.nix delete mode 100644 modules/nixos/suites/nas/jellyfin.nix delete mode 100644 modules/nixos/suites/nas/kavita.nix delete mode 100644 modules/nixos/suites/senfnvp/README.md delete mode 100644 modules/nixos/suites/senfnvp/default.nix delete mode 100644 modules/nixos/suites/senfnvp/forgejo.nix delete mode 100644 modules/nixos/suites/senfnvp/website.nix delete mode 100644 systems/aarch64-linux/kb-senfnvp/default.nix delete mode 100644 systems/aarch64-linux/kb-senfnvp/hardware.nix delete mode 100644 systems/x86_64-iso/plasma6-64bit-iso/default.nix delete mode 100644 systems/x86_64-linux/U3ncSovm/default.nix delete mode 100644 systems/x86_64-linux/U3ncSovm/hardware.nix delete mode 100644 systems/x86_64-linux/kb-game-01/default.nix delete mode 100644 systems/x86_64-linux/kb-game-01/hardware.nix delete mode 100644 systems/x86_64-linux/mow0m/default.nix delete mode 100644 systems/x86_64-linux/mow0m/hardware.nix diff --git a/README.md b/README.md index fac2ee8..95924a0 100644 --- a/README.md +++ b/README.md @@ -54,10 +54,6 @@ sudo nixos-rebuild switch --flake . 4. Commit your Changes if satisfied `git commit -m "Added Software hello-world"` 5. Then Push your Changes to the Remote, so that other systems can update `git push` -## Used Work - -[Server Icon](./assets/server-solid.svg) © [FontAwesome](https://fontawesome.com) under the [CC BY 4.0 License](https://creativecommons.org/licenses/by/4.0/) - ## License [MIT © kB01](./LICENSE) diff --git a/assets/LANA9Z.jpeg b/assets/LANA9Z.jpeg deleted file mode 100644 index 936ac46b14c8ceecf7d6626d7f933a76dcd095f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54114 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 diff --git a/assets/server-solid.svg b/assets/server-solid.svg deleted file mode 100644 index dde4a54..0000000 --- a/assets/server-solid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homes/aarch64-linux/master@kb-senfnvp/default.nix b/homes/aarch64-linux/master@kb-senfnvp/default.nix deleted file mode 100644 index 68b5e31..0000000 --- a/homes/aarch64-linux/master@kb-senfnvp/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, pkgs, lib, inputs, ... }: -{ - home.username = "master"; - home.homeDirectory = "/home/master"; - home.packages = with pkgs; [ - fastfetch - btop - sops - ]; - - # SSH Configuration - programs.ssh.enable = true; - programs.ssh.matchBlocks."kb01@kb-one-git" = { - host = "git.kb-one.de"; - user = "git"; - identityFile = "/home/master/.ssh/kb01@kb-one-git"; - port = 9522; - }; - - home.stateVersion = "24.05"; # NEVER CHANGE!!! -} - diff --git a/modules/nixos/services/binary-cache/default.nix b/modules/nixos/services/binary-cache/default.nix deleted file mode 100644 index 49da36a..0000000 --- a/modules/nixos/services/binary-cache/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ inputs, config, lib, pkgs, ... }: -let - cfg = config.services.binary-cache; -in -{ - imports = [ - ]; - - options.services.binary-cache = { - enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable Preconfigured Binary-Cache"; - }; - }; - - config = lib.mkIf cfg.enable { - services.nix-serve = { - enable = true; - secretKeyFile = "/var/secrets/cache-game01-private-key.pem"; - }; - - # Configure Reverse-Proxy - services.traefik.dynamicConfigOptions = { - http.services.nix-cache.loadBalancer.servers = [ { url = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}/"; } ]; - http.routers.nix-cache.entrypoints = "websecure"; - # http.routers.nix-cache.tls = true; - http.routers.nix-cache.tls.certresolver = "letsencrypt"; - http.routers.nix-cache.rule = "Host(`cache.game01.kb-one.de`)"; - http.routers.nix-cache.service = "nix-cache"; - }; - - }; -} - diff --git a/modules/nixos/services/forgejo-runner/default.nix b/modules/nixos/services/forgejo-runner/default.nix deleted file mode 100644 index 0888183..0000000 --- a/modules/nixos/services/forgejo-runner/default.nix +++ /dev/null @@ -1,87 +0,0 @@ -{ inputs, config, lib, pkgs, ... }: -let - cfg = config.services.forgejo-runner; -in -{ - options.services.forgejo-runner = { - enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable Forgejo Runners"; - }; - }; - config = lib.mkIf (cfg.enable) { - # services.gitea-actions-runner.package = pkgs.forgejo-runner; - # services.gitea-actions-runner.instances."kb-one-runner@games-01" = { - # enable = true; - # name = "kb-one-runner@games-01"; - # url = "https://git.kb-one.de/"; - # tokenFile = "/opt/secrets/kb-one-runner@games-01_token"; - # labels = [ - # # provide a debian base with nodejs for actions - # "debian-latest:docker://node:18-bullseye" - # # fake the ubuntu name, because node provides no ubuntu builds - # "ubuntu-latest:docker://node:18-bullseye" - # # provide native execution on the host - # "native:host" - # ]; - # hostPackages = with pkgs; [ - # bash - # coreutils - # curl - # gawk - # gitMinimal - # gnused - # nodejs - # wget - # nix - # ]; - # }; - - # systemd.services.forgejo-runner = { - # wantedBy = [ "multi-user.target" ]; - # after = [ "docker.service" ]; - # description = ""; - # serviceConfig = { - # Type = "notify"; - # User = "runner"; - # WorkingDirectory = "/home/runner"; - # ExecStart = ''${pkgs.forgejo-runner}/bin/forgejo-runner deamon''; - # ExecStop = ''/bin/kill -s HUP $MAINPID''; - # Restart = "on-failure"; - # TimeoutSec = 0; - # RestartSec = 10; - # }; - # }; - - # users.users.runner = { - # isNormalUser = true; - # }; - - # environment.systemPackages = [ pkgs.forgejo-runner ]; - - # virtualisation.podman.enable = true; - # virtualisation.podman.defaultNetwork.settings.dns_enabled = true; - # virtualisation.podman.dockerCompat = true; - - virtualisation.docker.enable = true; - virtualisation.oci-containers.backend = "docker"; - - virtualisation.oci-containers.containers."docker-in-docker" = { - image = "docker:dind"; - hostname = "docker"; - extraOptions = [ "--privileged" "--network=kb-forgejo-runner" ]; - cmd = [ "dockerd" "-H" "tcp://docker:42349" "--tls=false" ]; - }; - virtualisation.oci-containers.containers."forgejo-runner" = { - image = "code.forgejo.org/forgejo/runner:4.0.0"; - hostname = "forgejo-runner"; - extraOptions = [ "--network=kb-forgejo-runner" ]; - environment.DOCKER_HOST = "tcp://docker:42349"; - user = "1001:1001"; - volumes = [ "forgejo-runner-data:/data" ]; - cmd = [ "/bin/sh" "-c" "sleep 5; forgejo-runner daemon" ]; - }; - }; -} - diff --git a/modules/nixos/services/minecraft/README.md b/modules/nixos/services/minecraft/README.md deleted file mode 100644 index ff3215a..0000000 --- a/modules/nixos/services/minecraft/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Minecraft Server Configuration - -Details about the Minecraft Module. - -## Installation - -1. Rebuild switch configuration -2. Create Database Structure - 1. New Database `sudo mysql -u root < /run/secrets/rendered/minecraft/database/database-init.sql` - 2. Restore Backup `sudo mysql -u root < path/to/backup.sql` diff --git a/modules/nixos/services/minecraft/database.nix b/modules/nixos/services/minecraft/database.nix deleted file mode 100644 index f530f8d..0000000 --- a/modules/nixos/services/minecraft/database.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.services.minecraft; -in -{ - config = lib.mkIf (cfg.enable && (cfg.servers.velocity.enable || cfg.servers.survival.enable)) { - services.mysql = { - package = pkgs.mariadb; - enable = true; - settings.mysqld.port = 3459; - }; - sops.secrets."minecraft/database/luckperms_password" = { sopsFile = ./secrets.yaml; }; - sops.templates."minecraft/database/database-init.sql".content = '' - CREATE DATABASE 'luckperms'; - CREATE USER 'luckperms'@'localhost'; - GRANT ALL PRIVILEGES ON luckperms.* TO 'luckperms'@'localhost' IDENTIFIED BY '${config.sops.placeholder."minecraft/database/luckperms_password"}'; - ''; - # services.mysqlBackup.databases = [ "luckperms" ]; # Add Luckperms Database to Backups - }; -} diff --git a/modules/nixos/services/minecraft/default.nix b/modules/nixos/services/minecraft/default.nix deleted file mode 100644 index 25284c2..0000000 --- a/modules/nixos/services/minecraft/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ inputs, config, lib, pkgs, ... }: -let - cfg = config.services.minecraft; -in -{ - imports = [ - inputs.nix-minecraft.nixosModules.minecraft-servers - ./vanilla-test.nix - ./survival.nix - ./velocity.nix - ./database.nix - ]; - - options.services.minecraft = { - enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable kBs Minecraft Servers"; - }; - servers.vanilla.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "test server"; - }; - servers.survival.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Survival Server"; - }; - servers.velocity.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Velocity Proxy Server"; - }; - }; - - config = lib.mkIf cfg.enable { - nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ - "minecraft-server" - ]; - services.minecraft-servers = { - enable = true; - eula = true; - }; - - - }; -} - diff --git a/modules/nixos/services/minecraft/secrets.yaml b/modules/nixos/services/minecraft/secrets.yaml deleted file mode 100644 index 30a3e9c..0000000 --- a/modules/nixos/services/minecraft/secrets.yaml +++ /dev/null @@ -1,23 +0,0 @@ -minecraft: - database: - luckperms_password: ENC[AES256_GCM,data:Gnt/SilH7q4t1NzCeaqCc6nxso9cWt7b/KXCxzrDdR1LAnmex3QL5Q==,iv:PrTkXcMPPyfJkAKxSKUkaPbYcH+9n6W7MPcTR5e4L8g=,tag:sxDdUHyN+fCIi4g0K+oQIw==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age165jt2q3uxp79k4jfsegnq7ul9j54l2rqsn87rq0qjkcv3y5krcmqsznyw7 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBScTUyNFBNdHFwd1pudWNK - Y2F2aXFLYmh4RURJLy9mMisxMU96VGRiU2hjCjdSZmxLRFF6OVpFNy9iQ0NLdytl - UHdSaUVtMnlWQ3d1ZnluNXVHOWdoalkKLS0tIDBxVGdaZWhTclJWZ3FwZHRHSTN1 - RDhlN1JjWW1XZERLWExRSTlDN3ZjZkEKMiQaUezdBcWOH82Sk451PdB54SzYwcXY - YkjGp+bB7rIz07no68Xl4qmO+/iHKSFlPvG4jR/j4ZaNYiU9aeldLA== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-01-17T14:22:01Z" - mac: ENC[AES256_GCM,data:BlLD3wEezCCA9t1X4xmy9lfT3ztsR3dknio78Si9v3UJmpJSOpwJ/VhU5RRbMzL1EyOrU1abEr6em83s6LRq87fwso1j6asOavELT5WOfl6f5CU2iK8nQGWZCFeR+09d9hVI+AAH9farpgTDd5sHfUFPCKEaGwuTenpeF4Tonak=,iv:JYoHMIPkT+Dv3GZlp1wt7wlU7IYL6erd/u0cuclB0Ow=,tag:XD8pd/GCrdLRvdEFBgowJA==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.2 diff --git a/modules/nixos/services/minecraft/survival.nix b/modules/nixos/services/minecraft/survival.nix deleted file mode 100644 index f1e0879..0000000 --- a/modules/nixos/services/minecraft/survival.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.services.minecraft; -in -{ - config = lib.mkIf (cfg.enable && cfg.servers.survival.enable) { - services.minecraft-servers.servers."survival" = { - enable = true; - autoStart = true; - enableReload = true; - package = pkgs.paperServers.paper-1_21_4; - serverProperties = { - online-mode = false; - server-ip = "127.0.0.1"; - server-port = 49333; - difficulty = 3; - gamemode = 1; - max-players = 5; - }; - openFirewall = false; # Should use Velocity Player Proxy - - # Add Plugins - symlinks = { - "plugins/LuckPerms.jar" = pkgs.fetchurl { - url = "https://download.luckperms.net/1567/bukkit/loader/LuckPerms-Bukkit-5.4.150.jar"; - sha512 = "39cr9nd68afrrvn80kvdgaml37xkj3mzhv50y3app5j1199hg12kls29r49x06p9rxm6dk7i0j8aww2hw4ahm18andb69a5kp97vf94"; - }; - }; - - # Configure Velocity Modern forwarding https://docs.papermc.io/velocity/player-information-forwarding#configuring-modern-forwarding-for-paper - files."spigot.yml".value = { - settings.bungeecord = false; - }; - files."config/paper-global.yml".value = { - proxies.velocity.enabled = true; - proxies.velocity.online-mode = "online-mode"; - forwarding.secret = ""; # TODO: Add Forewarding Secret using Sops - }; - }; - }; -} - diff --git a/modules/nixos/services/minecraft/vanilla-test.nix b/modules/nixos/services/minecraft/vanilla-test.nix deleted file mode 100644 index 4a2474e..0000000 --- a/modules/nixos/services/minecraft/vanilla-test.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.services.minecraft; -in -{ - config = lib.mkIf (cfg.enable && cfg.servers.vanilla.enable) { - nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ - "minecraft-server" - ]; - - services.minecraft-servers.servers."vanilla-test" = { - enable = true; - autoStart = true; - enableReload = true; - package = pkgs.vanillaServers.vanilla; - whitelist = { - kB01guy = "1ff88b66-beda-4386-85b9-a00a5c27437a"; - }; - openFirewall = true; - }; - }; -} - diff --git a/modules/nixos/services/minecraft/velocity.nix b/modules/nixos/services/minecraft/velocity.nix deleted file mode 100644 index 3ab1b26..0000000 --- a/modules/nixos/services/minecraft/velocity.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.services.minecraft; -in -{ - config = lib.mkIf (cfg.enable && cfg.servers.velocity.enable) { - - # Configure Server - services.minecraft-servers.servers."velocity" = { - enable = true; - autoStart = true; - enableReload = true; - stopCommand = "end"; - package = pkgs.velocityServers.velocity; - symlinks = { - "plugins/LuckPerms.jar" = pkgs.fetchurl { - url = "https://download.luckperms.net/1567/velocity/LuckPerms-Velocity-5.4.150.jar"; - sha512 = "3dr69g2fbav3if44nmifgz7hn86gdf62hcks92kkvwxf4xa3z7x615j426kgljyhgy84hf75wzpai258mg7dj9x17vpkn634kkzwmw6"; - }; - "plugins/Geyser-Velocity.jar" = pkgs.fetchurl { - url = "https://download.geysermc.org/v2/projects/geyser/versions/2.6.0/builds/730/downloads/velocity"; - sha512 = "3shnm8q8vq8j44xxg4qwqwalw6ml9nkzfrzvv8pkblkjp25nfk3h14b4y9vdim1sa2a18mkf8hmhb16g1mka2rh7l0z0yg4kh3lj2i0"; - }; - "plugins/floodgate-velocity.jar" = pkgs.fetchurl { - url = "https://download.geysermc.org/v2/projects/floodgate/versions/2.2.3/builds/114/downloads/velocity"; - sha512 = "1k7qban3gar0fxxi5kp5i8d72k6ck65cvsfbg4nh8bz40jwqn35fx9gj3zbb06x5l8sg6qxl7w2nsn3jan4hjq7m5lwf2c1l1mjaw81"; - }; - "plugins/LibreLogin.jar" = pkgs.fetchurl { - url = "https://modrinth.com/plugin/libre-login/version/0.23.0"; - sha512 = "1wrnp82vv47hhvjp1lxdndmngndykshi7iindnpg61j0v7i8bdgr9rk5qvanvw95gcj59cnhxdmjynq8fm127n4gv53acdidlxz39sd"; - }; - }; - files = { - "velocity.toml".value = { - config-version = "2.7"; # NEVER change this! - bind = "0.0.0.0:25565"; - online-mode = false; - player-info-forwarding-mode = "modern"; - enable-player-address-logging = false; - # servers.lobby = ""; - servers.survival = "127.0.0.1:${toString config.services.minecraft-servers.servers."survival".serverProperties.server-port}"; - servers.lobby = "127.0.0.1:123"; - servers.try = [ - #"lobby" - "survival" - ]; - forced-hosts."lobby.example.com" = [ "lobby" ]; - advanced.tcp-fast-open = true; - }; - }; - }; - networking.firewall.allowedTCPPorts = [ 25565 ]; - - # Configure Plugin Luckperms - sops.templates."minecraft/velocity/plugin/luckperms/config.yml".path = "/srv/minecraft/velocity/plugins/luckperms/config.yml"; - sops.templates."minecraft/velocity/plugin/luckperms/config.yml".owner = config.services.minecraft-servers.user; - sops.templates."minecraft/velocity/plugin/luckperms/config.yml".content = lib.generators.toYAML { } { # Unfortunately currently lib.generators.toYAML generates JSON, and the File will not be Human readable - storage-method = "mariadb"; - data.address = "localhost:${toString config.services.mysql.settings.mysqld.port}"; - data.database = "luckperms"; - data.username = "luckperms"; - data.password = ''${config.sops.placeholder."minecraft/database/luckperms_password"}''; # Secret created in ./database.nix - }; - }; -} - diff --git a/modules/nixos/services/traefik-proxy/default.nix b/modules/nixos/services/traefik-proxy/default.nix deleted file mode 100644 index e4e6f7e..0000000 --- a/modules/nixos/services/traefik-proxy/default.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ inputs, config, lib, pkgs, ... }: -let - cfg = config.services.traefik-proxy; -in -{ - imports = [ - ]; - - options.services.traefik-proxy = { - enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable Pre-Configured Traefik Proxy"; - }; - }; - - config = lib.mkIf (cfg.enable || - config.services.binary-cache.enable || - config.suites.nas.media.enable) { - services.traefik = { - enable = true; - staticConfigOptions = { - entryPoints = { - web = { - address = ":80"; - asDefault = true; - http.redirections.entrypoint = { - to = "websecure"; - scheme = "https"; - }; - }; - websecure = { - address = ":443"; - asDefault = true; - http.tls.certResolver = "letsencrypt"; - }; - }; - }; - }; - networking.firewall.allowedTCPPorts = [ 80 443 ]; - - # Configure Letsencrypt - services.traefik.staticConfigOptions = { - certificatesResolvers.letsencrypt.acme = { - email = "kb01@kb-one.de"; - tlsChallenge = {}; - storage = "/var/secrets/traefik/acme.json"; - }; - }; - - }; -} - diff --git a/modules/nixos/suites/nas/default.nix b/modules/nixos/suites/nas/default.nix deleted file mode 100644 index f6ab990..0000000 --- a/modules/nixos/suites/nas/default.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.suites.nas; -in -{ - imports = [ - ./jellyfin.nix - ./kavita.nix - ]; - options.suites.nas.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable Preconfigured NAS Config"; - }; - options.suites.nas.domain = lib.mkOption { - type = with lib.types; string; - default = "localhost"; - description = "NAS Reachable Domain Name"; - }; - options.suites.nas.media.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = true; - description = "Enable Media Servers"; - }; - options.suites.nas.media.folder = lib.mkOption { - type = with lib.types; str; - default = "/home/media/media"; - description = "Media Root Directory"; - }; - - # Media Config - config = lib.mkIf (cfg.enable && cfg.media.enable) { - - # Media Defaults - suites.nas.media.jellyfin.enable = true; - suites.nas.media.kavita.enable = false; - - # Create Media User - users.groups.media = {}; - users.users.media = { - isSystemUser = true; - createHome = true; - description = "Media User"; - group = "media"; - home = "/home/media"; - }; - - }; - - -} - diff --git a/modules/nixos/suites/nas/jellyfin.nix b/modules/nixos/suites/nas/jellyfin.nix deleted file mode 100644 index 8537137..0000000 --- a/modules/nixos/suites/nas/jellyfin.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.suites.nas.media.jellyfin; -in -{ - options.suites.nas.media.jellyfin.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable Preconfigured Jellyfin Config"; - }; - options.suites.nas.media.jellyfin.subdomain = lib.mkOption { - type = with lib.types; string; - default = "watch"; - description = "Subdomain for Jellyfin Server"; - }; - - config = lib.mkIf (cfg.enable) { - - services.jellyfin.enable = true; - services.jellyfin.user = "media"; - - # Configure Reverse-Proxy - services.traefik.dynamicConfigOptions = { - http.services.jellyfin.loadBalancer.servers = [ { url = "http://localhost:8096/"; } ]; - http.routers.jellyfin.entrypoints = "websecure"; - http.routers.jellyfin.tls = true; - #http.routers.jellyfin.tls.certresolver = "letsencrypt"; - http.routers.jellyfin.rule = "Host(`${cfg.subdomain}.${config.suites.nas.domain}`)"; - http.routers.jellyfin.service = "jellyfin"; - }; - - }; -} - diff --git a/modules/nixos/suites/nas/kavita.nix b/modules/nixos/suites/nas/kavita.nix deleted file mode 100644 index d6d9a24..0000000 --- a/modules/nixos/suites/nas/kavita.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.suites.nas.media.kavita; -in -{ - options.suites.nas.media.kavita.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enable Preconfigured kavita Config"; - }; - options.suites.nas.media.kavita.subdomain = lib.mkOption { - type = with lib.types; string; - default = "read"; - description = "Kavita Subdomain"; - }; - - config = lib.mkIf (cfg.enable) { - - services.kavita.enable = true; - services.kavita.user = "media"; - services.kavita.tokenKeyFile = "/home/media/secrets/kavita-secret"; - - # Configure Reverse-Proxy - services.traefik.dynamicConfigOptions = { - http.services.kavita.loadBalancer.servers = [ { url = "http://localhost:5000/"; } ]; - http.routers.kavita.entrypoints = "websecure"; - http.routers.kavita.tls = true; - #http.routers.kavita.tls.certresolver = "letsencrypt"; - http.routers.kavita.rule = "Host(`${cfg.subdomain}.${config.suites.nas.domain}`)"; - http.routers.kavita.service = "kavita"; - }; - - }; -} - diff --git a/modules/nixos/suites/senfnvp/README.md b/modules/nixos/suites/senfnvp/README.md deleted file mode 100644 index b450baf..0000000 --- a/modules/nixos/suites/senfnvp/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Senfnvp Stack - -The Senfnvp Stack contains Web Infra-structure. - - -## Notes - -``` nix -senfnvp = { - enable = true; - hostname = "senfnvp.kb-one.de"; - - # Defaults - proxy.enable = true; - website.enable = true; - forgejo.enable = true; - forgejo.initializeDatabase = false; # Only use once! - forgejo.enableFail2Ban = true; - keycloak.enable = true; - keycloak.initializeDatabase = false; # Only use once! - docker-compose.enable = true; # Configuration for Docker-Compose support for Mailcow -}; -``` - -### The Database - -The Database Server is enabled when when you enable the Stack itself. -When you Activate a Service you might want to Edit the File at `./database/init-servicename.template.sql`. If you have a Database-Dump, place it there with the Naming-Sheme `./database/init-servicename.sql`. When creating a new Setup you can just run `cp init-servicename.template.sql init-servicename.sql` to use the template. The template only creates the Database, User and Password and lets it to the Service create its Tables. - -Basically the order is like this: -- Create Secrets `sops ./secrets.yaml` -- Apply Template `cp ./database/init-forgejo.template.sql ./database/init-forgejo.sql` -- Initialize ´forgejo.enable = true; forgejo.initializeDatabase = true;` -- Apply config `nixos-rebuild switch --flake .` -- Wait for Initialisation -- Wait! Dumps will take time! -- Enable Production `forgejo.enable = true; forgejo.initializeDatabase = false;` -- Apply config `nixos-rebuild switch --flake .` -- diff --git a/modules/nixos/suites/senfnvp/default.nix b/modules/nixos/suites/senfnvp/default.nix deleted file mode 100644 index 4a92d82..0000000 --- a/modules/nixos/suites/senfnvp/default.nix +++ /dev/null @@ -1,84 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.suites.senfnvp; -in -{ - imports = [ - ./website.nix - ./forgejo.nix - ]; - options.suites.senfnvp.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = false; - description = "Enables the senfnvp Stack"; - }; - options.suites.senfnvp.hostname = lib.mkOption { - type = with lib.types; string; - default = "kb-one.de"; - description = "Hostname of senfnvp Stack"; - }; - options.suites.senfnvp.database.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = true; - description = "Enable senfnvp Database"; - }; - options.suites.senfnvp.proxy.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = true; - description = "Enable senfnvp Proxy"; - }; - - config = lib.mkIf (cfg.enable) { - - containers.proxy = lib.mkIf (cfg.enable && cfg.proxy.enable) { - autoStart = true; - config = { config, pkgs, lib, ... }: { - services.traefik = { - enable = true; - staticConfigOptions = { - entryPoints = { - web = { - address = ":80"; - asDefault = true; - http.redirections.entrypoint = { - to = "websecure"; - scheme = "https"; - }; - }; - websecure = { - address = ":443"; - asDefault = true; - http.tls.certResolver = "letsencrypt"; - }; - git-ssh.address = ":9522"; - }; - certificatesResolvers.letsencrypt.acme = { - tlsChallenge = {}; - storage = "/var/secrets/traefik/acme.json"; - }; - }; - }; - networking.firewall.allowedTCPPorts = [ 80 443 9522]; - }; - }; - - # Core Container - # A Guide to Nix Containers: https://blog.beardhatcode.be/2020/12/Declarative-Nixos-Containers.html - containers.core = { - autoStart = true; - privateNetwork = true; - config = { config, pkgs, lib, ... }: { - }; - }; - - }; -} - - diff --git a/modules/nixos/suites/senfnvp/forgejo.nix b/modules/nixos/suites/senfnvp/forgejo.nix deleted file mode 100644 index 3a559dc..0000000 --- a/modules/nixos/suites/senfnvp/forgejo.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.suites.senfnvp; -in -{ - options.suites.senfnvp.forgejo.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = true; - description = "Enable Forgejo"; - }; - options.suites.senfnvp.forgejo.sshPort = lib.mkOption { - type = with lib.types; port; - default = 9522; - description = "Forgejo SSH Port"; - }; - options.suites.senfnvp.forgejo.httpPort = lib.mkOption { - type = with lib.types; port; - default = 3000; - description = "Forgejo http Port"; - }; - - config = lib.mkIf (cfg.enable && cfg.forgejo.enable) { - containers.forgejo = { - autoStart = true; - config = { - services.forgejo = { - enable = !cfg.forgejo.initializeDatabase; - settings.server = { - ROOT_URL = "git.${cfg.hostname}"; - SSH_PORT = cfg.forgejo.sshPort; - HTTP_PORT = cfg.forgejo.httpPort; - }; - database = { - type = "postgres"; - #host = "127.0.0.1"; # default Value - port = cfg.database.port; - #name = "forgejo"; # default Value - #user = "forgejo"; # default Value - passwordFile = ""; - }; - }; - }; - }; - }; -} - - diff --git a/modules/nixos/suites/senfnvp/website.nix b/modules/nixos/suites/senfnvp/website.nix deleted file mode 100644 index e411027..0000000 --- a/modules/nixos/suites/senfnvp/website.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - system, - ... -}: -let - cfg = config.suites.senfnvp; -in -{ - options.suites.senfnvp.website.enable = lib.mkOption { - type = with lib.types; uniq bool; - default = true; - description = "Enable senfnvp Website (kb-one.de)"; - }; - options.suites.senfnvp.website.httpPort = lib.mkOption { - type = with lib.types; port; - default = 8080; - description = "Website HTTP Port"; - }; - - config = lib.mkIf (cfg.enable && cfg.website.enable) { - containers.website = { - autoStart = true; - config = { - services.nginx.enable = true; - services.nginx.virtualHosts."${cfg.hostname}" = { - root = "/var/www/${cfg.hostname}"; - listen = [{ - addr = "127.0.0.1"; - port = cfg.website.httpPort; - }]; - }; - }; - }; - }; -} - - diff --git a/systems/README.md b/systems/README.md index a4a054f..b34cdbd 100644 --- a/systems/README.md +++ b/systems/README.md @@ -1,32 +1,5 @@ # Systems -## [LANA9Z](./x86_64-linux/LANA9Z) - - - - - -
- - - - - - - - - - - - - - - - - -
Userkb@LANA9Z
CpuIntel i7-2640M, 2 Cores, max 3.50 GHz
Ram16 GB
DeviceMacBook Pro 2011 (MacBook Pro 8,1)
-
- ## [LoyAdjo](./x86_64-linux/LoyAdjo) @@ -139,60 +112,3 @@
-## [kb-game-01](./x86_64-linux/kb-game-01) - - - - - -
- - - - - - - - - - - - - - - - - -
Usermaster@kb-game-01
CpuAMD EPYC 7702P, 4 / 64 Cores, max 3.35 GHz
Ram16 GB
DeviceKVM Server for Game-Servers (or Build-Server)
-
- -## [U3ncSovm](./x86_64-linux/U3ncSovm) - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
Usermaster@U3ncSovm
Cpu...
Ram...
DeviceCustom NAS Server, currently under construction only as VM.
Build
nixos-rebuild build-vm --flake .#U3ncSovm
-
diff --git a/systems/aarch64-linux/kb-senfnvp/default.nix b/systems/aarch64-linux/kb-senfnvp/default.nix deleted file mode 100644 index c5647ba..0000000 --- a/systems/aarch64-linux/kb-senfnvp/default.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - imports = [ - ./hardware.nix - ]; - - # Configure Nix - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - nix.settings.trusted-users=[ "remotebuild" ]; - nix.package = pkgs.lix; - - # Networking - networking.hostName = "kb-senfnvp"; - networking.networkmanager.enable = true; - networking.nameservers = [ - "1.1.1.1" - ]; - - # Set your time zone. - time.timeZone = "Europe/Amsterdam"; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - console = { - font = "Lat2-Terminus16"; - keyMap = "de"; - }; - - users.users.master = { # Managed by Homemanager - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJszrrdVHmMUdgOakyFNOIPV9BfopwflqivmK13Fmsab kb@Ohybke" - ]; - isNormalUser = true; - extraGroups = [ "wheel" ]; - }; - - users.users.remotebuild = { - isNormalUser = true; - createHome = true; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJV9cwMXlbaBdg2gReSnLxH3EV5cyFoSi21f5fZhPfdC kb@Ohybke" - ]; - }; - - environment.systemPackages = with pkgs; [ - git - wget - vim - tree - fastfetch - ]; - - # Default Editor - programs.vim.enable = true; - programs.vim.defaultEditor = true; - - # SSH and Mosh - services.openssh = { - enable = true; - settings.PasswordAuthentication = false; - settings.KbdInteractiveAuthentication = false; - ports = [ 9553 ]; - openFirewall = true; - }; - programs.mosh.enable = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - - system.stateVersion = "24.11"; # NEVER CHANGE THIS !!!! - -} - diff --git a/systems/aarch64-linux/kb-senfnvp/hardware.nix b/systems/aarch64-linux/kb-senfnvp/hardware.nix deleted file mode 100644 index 1df4e24..0000000 --- a/systems/aarch64-linux/kb-senfnvp/hardware.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ config, lib, pkgs, modulesPath, ... }: -{ - imports = [ - (modulesPath + "/profiles/qemu-guest.nix") - ]; - - # System - boot.initrd.availableKernelModules = [ "xhci_pci" "virtio_scsi" "sr_mod" "sr_mod" "r8169" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; - - # Boot Loader - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - # SSH Remote Unlock - boot.kernelParams = [ "ip=dhcp" ]; - boot.initrd.systemd.users.root.shell = "/bin/cryptsetup-askpass"; - boot.initrd.network = { - enable = true; - ssh = { - enable = true; - port = 7299; - authorizedKeys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ6jJa135d46R9XgV7h5SfxALabycI5ZPN8kdSQbEkYM kb@Ohybke" ]; - hostKeys = [ "/etc/secrets/initrd/ssh_host_rsa_key" ]; - }; - postCommands = '' - echo 'cryptsetup-askpass' >> /root/.profile - ''; - }; - - # Disks - boot.initrd.luks.devices."luks-2d08047a-a014-480b-8a24-a70e20a2d7d7".device = "/dev/disk/by-uuid/2d08047a-a014-480b-8a24-a70e20a2d7d7"; - fileSystems."/" = { - device = "/dev/disk/by-uuid/9c1d9682-5cfb-4683-a789-f544fc6e7681"; - fsType = "ext4"; - }; - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/FEAA-61DA"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - # Networking - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp7s0.useDHCP = lib.mkDefault true; - -} diff --git a/systems/x86_64-iso/plasma6-64bit-iso/default.nix b/systems/x86_64-iso/plasma6-64bit-iso/default.nix deleted file mode 100644 index 814c73f..0000000 --- a/systems/x86_64-iso/plasma6-64bit-iso/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ pkgs, modulesPath, lib, ... }: -{ - imports = [ - "${modulesPath}/installer/cd-dvd/installation-cd-graphical-calamares-plasma6.nix" - ]; - -} diff --git a/systems/x86_64-linux/U3ncSovm/default.nix b/systems/x86_64-linux/U3ncSovm/default.nix deleted file mode 100644 index edcb219..0000000 --- a/systems/x86_64-linux/U3ncSovm/default.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ config, lib, pkgs, inputs, ... }: - -{ - imports = [ # Include the results of the hardware scan. - ./hardware.nix - ]; - - # Configure Nix - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - nix.package = pkgs.lix; - - # Use the GRUB 2 boot loader. - boot.loader.grub.enable = true; - boot.loader.grub.efiSupport = true; - boot.loader.grub.devices = [ "nodev" ]; - boot.loader.efi.canTouchEfiVariables = true; - - # Define your hostname. - networking.hostName = "U3ncSovm"; - - # Set your time zone. - time.timeZone = "Europe/Amsterdam"; - - # Configure keymap in X11 - services.xserver.xkb.layout = "us"; - - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.master = { - initialPassword = "test"; - openssh.authorizedKeys.keys = [ - ]; - isNormalUser = true; - extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - packages = with pkgs; [ - tree - vim - fastfetch - ]; - }; - - # List packages installed in system profile. To search, run: - environment.systemPackages = with pkgs; [ - vim - wget - git - ]; - - # SSH and Mosh - services.openssh = { - enable = true; - settings.PasswordAuthentication = false; - settings.KbdInteractiveAuthentication = false; - ports = [ 5530 ]; - openFirewall = true; - }; - programs.mosh.enable = true; - - # Do NOT change this value - system.stateVersion = "24.05"; # Did you read the comment? -} - diff --git a/systems/x86_64-linux/U3ncSovm/hardware.nix b/systems/x86_64-linux/U3ncSovm/hardware.nix deleted file mode 100644 index 8dfb9e5..0000000 --- a/systems/x86_64-linux/U3ncSovm/hardware.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, lib, pkgs, modulesPath, inputs, ... }: -{ - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; - - # Configure NixOS - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - - # Boot Parameters - boot.initrd.availableKernelModules = [ "uhci_hcd" "ehci_pci" "ahci" "firewire_ohci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" "wl" ]; - boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ]; - - # Filesystems - fileSystems."/" = { - device = "/dev/disk/by-uuid/00000000-0000-0000-0000-000000000000"; - fsType = "ext4"; - }; - boot.initrd.luks.devices."luks-00000000-0000-0000-0000-000000000000".device = "/dev/disk/by-uuid/00000000-0000-0000-0000-000000000000"; - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/0000-0000"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - swapDevices = [ - { - device = "/swapfile"; - size = 4*1024; - } - ]; - - # Network - networking.useDHCP = lib.mkDefault true; - - # Hardware - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - - # Virtual Machine Configuration - virtualisation.vmVariant = { - # following configuration is added only when building VM with build-vm - virtualisation = { - memorySize = 4*1024; - cores = 3; - }; - }; - -} diff --git a/systems/x86_64-linux/kb-game-01/default.nix b/systems/x86_64-linux/kb-game-01/default.nix deleted file mode 100644 index 016d6be..0000000 --- a/systems/x86_64-linux/kb-game-01/default.nix +++ /dev/null @@ -1,105 +0,0 @@ -{ config, lib, pkgs, inputs, ... }: - -{ - imports = [ # Include the results of the hardware scan. - ./hardware.nix - ]; - - # Configure Nix - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - nix.settings.trusted-users=[ "remotebuild" ]; - nix.settings.trusted-public-keys = [ - "cache.HyperC:90YNJ0eWsuBGVVP989lJh1rL8C0KM6IKbAtEUiu+FCU=" - ]; - nix.package = pkgs.lix; - nixpkgs.overlays = [ inputs.nix-minecraft.overlay ]; - - # Use the GRUB 2 boot loader. - boot.loader.grub.enable = true; - boot.loader.grub.efiSupport = true; - boot.loader.grub.devices = [ "nodev" ]; - boot.loader.efi.canTouchEfiVariables = true; - - # Define your hostname. - networking.hostName = "kb-game-01"; - - # Set your time zone. - time.timeZone = "Europe/Amsterdam"; - - # Configure keymap in X11 - services.xserver.xkb.layout = "us"; - - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.master = { - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKLbU0GpeqkYOsccsddQgZAppd5SFiokGAfjKr+dEEjY kb HyperC" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHS3DoQe/4TtdTLD/Fl41rTjE0n5MyFMl59VGVejcskO kb voloxo" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPpN/3esM0SFLJ2guCBOYX8IdBC+jUiMF+xPYkTEuzbe kb-work yerukall" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMN1LWMOfFtRKkSLIA/XTj3KYm7OG2bjqEmGXj0gmDc7 kb@LoyAdjo" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE7W8FUUvM8rUGK6qV3XOIxR0y/pdyo9z5HZNzOADs5+ kb@Rubtrm" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILgfAxGyxjNOZyuUZIlwVCzj/mBM9uM7apNDzEJ3g+F+ kb@LANA9C" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKurR2GzSHyD3AM0Xn+YmwfGcLjBlQX1ZRh93S8YiQwn kb@Ohybke" - ]; - isNormalUser = true; - extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - packages = with pkgs; [ - vim - sops - ]; - }; - - users.users.remotebuild = { - isNormalUser = true; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBHdxVb42GEb/rwrsQx/Wc2v2P+WIq8/WNlF+l31Rl/a Remotebuilds from HyperC" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL/WONflZXVoZd8I4HdNMXNtoYELnCaxqdFY0QKDXXS9 Remotebuilds from Rubtrm" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJqjdhtK0xeJcHwwCAia6I+WuZCkN9pUS21MNjJ2jOuc Remotebuilds from LANA9Z" - ]; - }; - - # List packages installed in system profile. To search, run: - environment.systemPackages = with pkgs; [ - vim - wget - git - tree - ]; - - # Default Editor - programs.vim.enable = true; - programs.vim.defaultEditor = true; - - # Sops Secrets Config - sops.defaultSopsFormat = "yaml"; - sops.age.keyFile = "/home/master/.config/sops/age/keys.txt"; - - # SSH and Mosh - services.openssh = { - enable = true; - settings.PasswordAuthentication = false; - settings.KbdInteractiveAuthentication = false; - ports = [ 3422 ]; - openFirewall = true; - }; - programs.mosh.enable = true; - - # Minecraft Servers - services.minecraft = { - enable = true; - servers.velocity.enable = true; - servers.survival.enable = true; - }; - - # Forgejo Runner - services.forgejo-runner.enable = true; - - # Binary Cache - services.binary-cache.enable = false; # No Binary-Cache, when there are Secrets in the /nix/store - - # Enable QUEMU Quest Agent - services.qemuGuest.enable = true; - - # Do NOT change this value - system.stateVersion = "24.05"; # Did you read the comment? -} - diff --git a/systems/x86_64-linux/kb-game-01/hardware.nix b/systems/x86_64-linux/kb-game-01/hardware.nix deleted file mode 100644 index 0dd166c..0000000 --- a/systems/x86_64-linux/kb-game-01/hardware.nix +++ /dev/null @@ -1,38 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: - -{ - imports = - [ (modulesPath + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-label/NIXROOT"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-label/NIXBOOT"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.ens3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} - diff --git a/systems/x86_64-linux/mow0m/default.nix b/systems/x86_64-linux/mow0m/default.nix deleted file mode 100644 index 73a733b..0000000 --- a/systems/x86_64-linux/mow0m/default.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - imports = [ - ./hardware.nix - ]; - - - # Networking - networking.hostName = "mow0m"; - networking.networkmanager.enable = true; - - # Set your time zone. - time.timeZone = "Europe/Amsterdam"; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - console = { - font = "Lat2-Terminus16"; - keyMap = "de"; - }; - - users.users.master = { - isNormalUser = true; - extraGroups = [ "wheel" ]; - packages = with pkgs; [ - tree - ]; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF+qnaWHrGk+DHz5I3L8wK5MPVzjck9LTuctnzK55WJs kb@LoyAdjo" - ]; - - }; - - # programs.firefox.enable = true; - - # System Packages: (search via $ nix search wget) - environment.systemPackages = with pkgs; [ - vim - tree - wget - ]; - - # SSH and Mosh - services.openssh = { - enable = true; - settings.PasswordAuthentication = false; - settings.KbdInteractiveAuthentication = false; - ports = [ 9553 ]; - openFirewall = true; - }; - programs.mosh.enable = true; - - - # Firewall - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - - system.stateVersion = "24.11"; # NEVER CHANGE THIS!!! -} - diff --git a/systems/x86_64-linux/mow0m/hardware.nix b/systems/x86_64-linux/mow0m/hardware.nix deleted file mode 100644 index afe072e..0000000 --- a/systems/x86_64-linux/mow0m/hardware.nix +++ /dev/null @@ -1,83 +0,0 @@ -{ config, lib, pkgs, modulesPath, ... }: - -{ - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.kernelParams = [ "elevator=noop" "boot.shell_on_fail" "ip=dhcp" ]; - boot.extraModulePackages = [ ]; - boot.supportedFilesystems = [ "zfs" ]; - networking.hostId = "c61a0c21"; - networking.useDHCP = lib.mkDefault true; - - # Bootloader - boot.loader = { - efi = { - canTouchEfiVariables = true; - efiSysMountPoint = "/boot"; # use the same mount point here. - }; - grub = { - enable = true; - version = 2; - copyKernels = true; - efiSupport = true; - mirroredBoots = [ - {devices = [ "/dev/nvme0n1" ]; path = "/boot";} - {devices = [ "/dev/nvme1n1" ]; path = "/boot1";} - ]; - }; - }; - # Uncomment [on a working system] to ensure extra safeguards are active that zfs uses to protect zfs pools: - #boot.zfs.forceImportAll = false; - #boot.zfs.forceImportRoot = false; - - # Remote Filesystem(s) unlocking - boot.initrd.network.enable = true; - boot.initrd.network.ssh = { - enable = true; - port = 2550; - authorizedKeys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAPKorzbCjRROOmFpiEfbH2mmLJ8qACUUt7pln87PgkA kb@LoyAdjo" - ]; - hostKeys = [ "/etc/secrets/initrd/ssh_host_ed25519_key" ]; - }; - boot.initrd.network.postCommands = '' - zpool import -a - echo "zfs load-key -a; killall zfs" >> /root/.profile - ''; - - # Filesystems - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/7C96-7E8A"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - fileSystems."/boot1" = { - device = "/dev/disk/by-uuid/7C97-3483"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - fileSystems."/" = { - device = "mow0m/root"; - fsType = "zfs"; - }; - fileSystems."/nix" = { - device = "mow0m/root/nix"; - fsType = "zfs"; - }; - fileSystems."/home" = { - device = "mow0m/root/home"; - fsType = "zfs"; - }; - - swapDevices = [ ]; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} -