From 046a88905ddfa7f9edc3291c310dbb985dee34f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tristan=20Dani=C3=ABl=20Maat?= Date: Mon, 10 Oct 2022 13:03:08 +0100 Subject: [PATCH] treewide: Reformat project with alejandra --- configuration/default.nix | 30 ++- configuration/ids.nix | 4 +- configuration/linode.nix | 9 +- configuration/services/gitea.nix | 14 +- configuration/services/minecraft.nix | 45 ++-- configuration/services/nextcloud.nix | 18 +- configuration/services/webserver.nix | 18 +- flake.nix | 277 +++++++++++---------- lib/default.nix | 18 +- lib/minecraft.nix | 20 +- modules/default.nix | 9 +- modules/virtualisation/pods.nix | 80 +++--- pkgs/build-support/fetchFromCurseForge.nix | 53 ++-- pkgs/default.nix | 20 +- pkgs/minecraft/forge-server.nix | 126 +++++----- pkgs/minecraft/voor-kia-client.nix | 10 +- pkgs/minecraft/voor-kia.nix | 7 +- 17 files changed, 405 insertions(+), 353 deletions(-) diff --git a/configuration/default.nix b/configuration/default.nix index 6a2a79d..8e9744d 100644 --- a/configuration/default.nix +++ b/configuration/default.nix @@ -1,6 +1,9 @@ -{ config, pkgs, lib, ... }: - { + config, + pkgs, + lib, + ... +}: { imports = [ ./services/gitea.nix ./services/minecraft.nix @@ -18,7 +21,7 @@ ''; # Enable remote builds from tlater - trustedUsers = [ "@wheel" ]; + trustedUsers = ["@wheel"]; }; nixpkgs.config.allowUnfreePredicate = pkg: @@ -26,10 +29,10 @@ sops = { defaultSopsFile = ../keys/external.yaml; - secrets.steam = { }; + secrets.steam = {}; }; - boot.kernelParams = [ "highres=off" "nohz=off" ]; + boot.kernelParams = ["highres=off" "nohz=off"]; networking = { hostName = "tlaternet"; @@ -38,15 +41,15 @@ useDHCP = false; interfaces.eth0.useDHCP = true; - firewall.allowedTCPPorts = [ 80 443 2222 2221 25565 21025 ]; + firewall.allowedTCPPorts = [80 443 2222 2221 25565 21025]; }; time.timeZone = "Europe/London"; users.users.tlater = { isNormalUser = true; - extraGroups = [ "wheel" ]; - openssh.authorizedKeys.keyFiles = [ ../keys/tlater.pub ]; + extraGroups = ["wheel"]; + openssh.authorizedKeys.keyFiles = [../keys/tlater.pub]; }; services.openssh = { @@ -54,7 +57,7 @@ allowSFTP = false; passwordAuthentication = false; permitRootLogin = "no"; - ports = [ 2222 ]; + ports = [2222]; startWhenNeeded = true; gatewayPorts = "yes"; }; @@ -77,12 +80,13 @@ extraConfig = '' add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; ''; - } extra; + } + extra; domain = config.services.nginx.domain; in { - "${domain}" = host 3002 { serverAliases = [ "www.${domain}" ]; }; - "gitea.${domain}" = host 3000 { }; - "nextcloud.${domain}" = host 3001 { }; + "${domain}" = host 3002 {serverAliases = ["www.${domain}"];}; + "gitea.${domain}" = host 3000 {}; + "nextcloud.${domain}" = host 3001 {}; }; }; diff --git a/configuration/ids.nix b/configuration/ids.nix index 5488ff0..9b99011 100644 --- a/configuration/ids.nix +++ b/configuration/ids.nix @@ -1,6 +1,4 @@ -{ ... }: - -{ +{...}: { ids.uids = { # System user ids start at 400 (see nixos/modules/programs/shadow.nix) webserver = 400; diff --git a/configuration/linode.nix b/configuration/linode.nix index da82d20..4224cfe 100644 --- a/configuration/linode.nix +++ b/configuration/linode.nix @@ -1,8 +1,11 @@ -{ config, lib, pkgs, ... }: - { + config, + lib, + pkgs, + ... +}: { # Required for the lish console - boot.kernelParams = [ "console=ttyS0,19200n8" ]; + boot.kernelParams = ["console=ttyS0,19200n8"]; boot.loader = { # Timeout to allow lish to connect diff --git a/configuration/services/gitea.nix b/configuration/services/gitea.nix index 7f49d32..5f9ebd0 100644 --- a/configuration/services/gitea.nix +++ b/configuration/services/gitea.nix @@ -1,6 +1,4 @@ -{ config, ... }: - -{ +{config, ...}: { users = { extraUsers.gitea = { uid = config.ids.uids.git; @@ -8,19 +6,19 @@ description = "Gitea Service"; group = config.users.extraGroups.gitea.name; }; - extraGroups.gitea = { gid = config.ids.gids.git; }; + extraGroups.gitea = {gid = config.ids.gids.git;}; }; virtualisation.pods.gitea = { hostname = "gitea.tlater.net"; - publish = [ "3000:3000" "2221:2221" ]; + publish = ["3000:3000" "2221:2221"]; network = "slirp4netns"; containers = { gitea = { image = "gitea/gitea:latest"; - volumes = [ "gitea:/data:Z" "/etc/localtime:/etc/localtime:ro" ]; - dependsOn = [ "postgres" ]; + volumes = ["gitea:/data:Z" "/etc/localtime:/etc/localtime:ro"]; + dependsOn = ["postgres"]; environment = { DB_TYPE = "postgres"; @@ -43,7 +41,7 @@ POSTGRES_DB = "gitea"; POSTGRES_USER = "gitea"; }; - volumes = [ "gitea-postgres-14:/var/lib/postgresql/data" ]; + volumes = ["gitea-postgres-14:/var/lib/postgresql/data"]; }; }; }; diff --git a/configuration/services/minecraft.nix b/configuration/services/minecraft.nix index 80b4ff5..c19335c 100644 --- a/configuration/services/minecraft.nix +++ b/configuration/services/minecraft.nix @@ -1,6 +1,9 @@ -{ config, pkgs, lib, ... }: - -let +{ + config, + pkgs, + lib, + ... +}: let minecraft-server-args = [ "-Xms2G" "-Xmx2G" @@ -24,12 +27,14 @@ let "-XX:+PerfDisableSharedMem" "-XX:MaxTenuringThreshold=1" ]; - ops = pkgs.writeText "ops.json" (builtins.toJSON [{ - uuid = "140d177a-966f-41b8-a4c0-e305babd291b"; - name = "TLATER"; - level = 4; - bypassesPlayerLimit = true; - }]); + ops = pkgs.writeText "ops.json" (builtins.toJSON [ + { + uuid = "140d177a-966f-41b8-a4c0-e305babd291b"; + name = "TLATER"; + level = 4; + bypassesPlayerLimit = true; + } + ]); whitelist = pkgs.writeText "whitelist.json" (builtins.toJSON [ { uuid = "59cd1648-14a4-4bcf-8f5a-2e1bde678f2c"; @@ -49,7 +54,6 @@ let } ]); eula = pkgs.writeText "eula.txt" "eula=true"; - in { users = { extraUsers.minecraft = { @@ -58,7 +62,7 @@ in { isSystemUser = true; description = "Minecraft server user"; }; - extraGroups.minecraft = { gid = config.ids.gids.minecraft; }; + extraGroups.minecraft = {gid = config.ids.gids.minecraft;}; }; virtualisation.oci-containers.containers.minecraft-voor-kia = let @@ -83,22 +87,22 @@ in { uid = toString config.users.extraUsers.minecraft.uid; gid = toString config.users.extraGroups.minecraft.gid; in { - Cmd = [ "forge-server" ] ++ minecraft-server-args; + Cmd = ["forge-server"] ++ minecraft-server-args; WorkingDir = "/var/lib/minecraft"; Volumes = { - "/var/lib/minecraft" = { }; + "/var/lib/minecraft" = {}; # Required because some things will try to write to /tmp, # which doesn't exist if it's not defined as a volume. - "/tmp" = { }; + "/tmp" = {}; }; - ExposedPorts = { "25565" = { }; }; + ExposedPorts = {"25565" = {};}; User = "${uid}:${gid}"; }; }; - extraOptions = [ "--cpus=1.0" ]; + extraOptions = ["--cpus=1.0"]; autoStart = false; - ports = [ "25565:25565" ]; + ports = ["25565:25565"]; volumes = [ "minecraft:/var/lib/minecraft" "${eula}:/var/lib/minecraft/eula.txt:ro" @@ -111,7 +115,7 @@ in { systemd.timers.podman-minecraft-voor-kia-off = { description = "Turns off the minecraft server every day at 4 am"; - wantedBy = [ "podman-minecraft-voor-kia.service" ]; + wantedBy = ["podman-minecraft-voor-kia.service"]; timerConfig = { Unit = "podman-minecraft-voor-kia-starter@stop.service"; OnCalendar = "04:00:00"; @@ -120,7 +124,7 @@ in { systemd.timers.podman-minecraft-voor-kia-on = { description = "Turns on the minecraft server every day at 2 pm"; - wantedBy = [ "podman-minecraft-voor-kia.service" ]; + wantedBy = ["podman-minecraft-voor-kia.service"]; timerConfig = { Unit = "podman-minecraft-voor-kia-starter@start.service"; OnCalendar = "14:00:00"; @@ -130,8 +134,7 @@ in { systemd.services."podman-minecraft-voor-kia-starter@" = { description = "Unit to stop/start the minecraft server"; serviceConfig = { - ExecStart = - "${pkgs.systemd}/bin/systemctl %i podman-minecraft-voor-kia.service"; + ExecStart = "${pkgs.systemd}/bin/systemctl %i podman-minecraft-voor-kia.service"; Type = "oneshot"; }; }; diff --git a/configuration/services/nextcloud.nix b/configuration/services/nextcloud.nix index f63b294..5b32cf2 100644 --- a/configuration/services/nextcloud.nix +++ b/configuration/services/nextcloud.nix @@ -1,15 +1,13 @@ -{ config, ... }: - -{ +{config, ...}: { virtualisation.pods.nextcloud = { hostname = "nextcloud.tlater.net"; - publish = [ "3001:80" ]; + publish = ["3001:80"]; network = "slirp4netns"; containers = { nextcloud = { image = "nextcloud:fpm-alpine"; - dependsOn = [ "postgres" ]; + dependsOn = ["postgres"]; volumes = [ "nextcloud-root:/var/www/html" "nextcloud-apps:/var/www/html/custom_apps" @@ -28,18 +26,18 @@ cron = { image = "nextcloud:fpm-alpine"; entrypoint = "/cron.sh"; - dependsOn = [ "postgres" "nextcloud" ]; - extraOptions = [ "--volumes-from=nextcloud-nextcloud" ]; + dependsOn = ["postgres" "nextcloud"]; + extraOptions = ["--volumes-from=nextcloud-nextcloud"]; }; nginx = { image = "nginx:alpine"; - dependsOn = [ "nextcloud" ]; + dependsOn = ["nextcloud"]; volumes = [ "nextcloud-root:/var/www/html:ro" "${./configs/nginx-nextcloud.conf}:/etc/nginx/nginx.conf:ro" ]; - extraOptions = [ "--volumes-from=nextcloud-nextcloud" ]; + extraOptions = ["--volumes-from=nextcloud-nextcloud"]; }; postgres = { @@ -48,7 +46,7 @@ POSTGRES_DB = "nextcloud"; POSTGRES_USER = "nextcloud"; }; - volumes = [ "nextcloud-postgres-14:/var/lib/postgresql/data" ]; + volumes = ["nextcloud-postgres-14:/var/lib/postgresql/data"]; }; }; }; diff --git a/configuration/services/webserver.nix b/configuration/services/webserver.nix index d72b417..093da3d 100644 --- a/configuration/services/webserver.nix +++ b/configuration/services/webserver.nix @@ -1,6 +1,8 @@ -{ config, pkgs, ... }: - { + config, + pkgs, + ... +}: { users = { extraUsers.webserver = { uid = config.ids.uids.webserver; @@ -8,7 +10,7 @@ isSystemUser = true; description = "tlater.net web server user"; }; - extraGroups.webserver = { gid = config.ids.gids.webserver; }; + extraGroups.webserver = {gid = config.ids.gids.webserver;}; }; virtualisation.oci-containers.containers.webserver = { @@ -23,19 +25,19 @@ uid = toString config.users.extraUsers.webserver.uid; gid = toString config.users.extraGroups.webserver.gid; in { - Cmd = [ "tlaternet-webserver" ]; - Volumes = { "/srv/mail" = { }; }; + Cmd = ["tlaternet-webserver"]; + Volumes = {"/srv/mail" = {};}; Env = [ "ROCKET_PORT=3002" "ROCKET_TEMPLATE_DIR=${pkgs.tlaternet-templates.templates}/browser/" ]; - ExposedPorts = { "3002" = { }; }; + ExposedPorts = {"3002" = {};}; User = "${uid}:${gid}"; }; }; - ports = [ "3002:3002" ]; - volumes = [ "tlaternet-mail:/srv/mail" ]; + ports = ["3002:3002"]; + volumes = ["tlaternet-mail:/srv/mail"]; extraOptions = [ "--hostname=tlater.net" # Rocket 0.4 doesn't support SIGTERM anyway, so SIGKILL is the cleanest exit possible. diff --git a/flake.nix b/flake.nix index 772580b..3f0ad1b 100644 --- a/flake.nix +++ b/flake.nix @@ -26,144 +26,155 @@ }; }; - outputs = { self, nixpkgs, nixos-hardware, flake-utils, sops-nix - , tlaternet-webserver, tlaternet-templates, ... }@inputs: - let - overlays = [ - (final: prev: { - tlaternet-webserver = - tlaternet-webserver.legacyPackages.${prev.system}.packages; - tlaternet-templates = - tlaternet-templates.legacyPackages.${prev.system}.packages; - local = import ./pkgs { - pkgs = prev; - local-lib = self.lib.${prev.system}; - }; - }) - ]; - - in { + outputs = { + self, + nixpkgs, + nixos-hardware, + flake-utils, + sops-nix, + tlaternet-webserver, + tlaternet-templates, + ... + } @ inputs: let + overlays = [ + (final: prev: { + tlaternet-webserver = + tlaternet-webserver.legacyPackages.${prev.system}.packages; + tlaternet-templates = + tlaternet-templates.legacyPackages.${prev.system}.packages; + local = import ./pkgs { + pkgs = prev; + local-lib = self.lib.${prev.system}; + }; + }) + ]; + in + { nixosConfigurations = { - tlaternet = let system = "x86_64-linux"; - in nixpkgs.lib.nixosSystem { - inherit system; + tlaternet = let + system = "x86_64-linux"; + in + nixpkgs.lib.nixosSystem { + inherit system; - modules = [ - ({ modulesPath, ... }: { - imports = [ (modulesPath + "/profiles/headless.nix") ]; - nixpkgs.overlays = overlays; - }) - (import ./modules) + modules = [ + ({modulesPath, ...}: { + imports = [(modulesPath + "/profiles/headless.nix")]; + nixpkgs.overlays = overlays; + }) + (import ./modules) - (import ./configuration) - (import ./configuration/linode.nix) - (import ./configuration/hardware-configuration.nix) - sops-nix.nixosModules.sops - ]; - }; - - vm = let system = "x86_64-linux"; - in nixpkgs.lib.nixosSystem { - inherit system; - - modules = [ - ({ modulesPath, ... }: { - imports = [ (modulesPath + "/profiles/headless.nix") ]; - nixpkgs.overlays = overlays; - }) - (import ./modules) - - (import ./configuration) - sops-nix.nixosModules.sops - ({ lib, ... }: { - users.users.tlater.password = "insecure"; - - # Disable graphical tty so -curses works - boot.kernelParams = [ "nomodeset" ]; - - # Sets the base domain for nginx to localhost so that we - # can easily test locally with the VM. - services.nginx.domain = lib.mkOverride 99 "localhost"; - - # # Set up VM settings to match real VPS - # virtualisation.memorySize = 3941; - # virtualisation.cores = 2; - }) - ]; - }; - }; - } // flake-utils.lib.eachDefaultSystem (system: - let - pkgs = import nixpkgs { inherit system overlays; }; - sops-pkgs = sops-nix.packages.${system}; - in { - devShell = - pkgs.mkShell { - sopsPGPKeyDirs = ["./keys/hosts/" "./keys/users/"]; - nativeBuildInputs = with sops-pkgs; [ - sops-import-keys-hook + (import ./configuration) + (import ./configuration/linode.nix) + (import ./configuration/hardware-configuration.nix) + sops-nix.nixosModules.sops ]; - buildInputs = with pkgs; with sops-pkgs; [ - nixfmt - git-lfs - sops-init-gpg-key - - # For the minecraft mod update script - (python3.withPackages (pypkgs: - with pypkgs; [ - dateutil - requests - - ipython - - python3.withPackages (ppkgs: - with pkgs; [ - python-lsp-server - python-lsp-black - pyls-isort - pyls-mypy - rope - pyflakes - mccabe - pycodestyle - pydocstyle - ]) - ])) - ]; - shellHook = let - inherit (pkgs.lib.attrsets) mapAttrsToList; - inherit (pkgs.lib.strings) concatStringsSep; - ports = { - "3022" = "2222"; - "3080" = "80"; - "3443" = "443"; - "3021" = "2221"; - "25565" = "25565"; - "21025" = "21025"; # Starbound - }; - QEMU_NET_OPTS = - concatStringsSep "," - (mapAttrsToList - (host: vm: "hostfwd=::${host}-:${vm}") - ports); - in - '' - export QEMU_OPTS="-m 3941 -smp 2 -curses" - export QEMU_NET_OPTS="${QEMU_NET_OPTS}" - - # Work around sudo requiring a full terminal - export NIX_SSHOPTS="-t" - ''; }; - packages = import ./pkgs { - inherit pkgs; - local-lib = self.lib.${system}; - }; + vm = let + system = "x86_64-linux"; + in + nixpkgs.lib.nixosSystem { + inherit system; - lib = import ./lib { - inherit pkgs inputs; - lib = nixpkgs.lib; - }; - }); + modules = [ + ({modulesPath, ...}: { + imports = [(modulesPath + "/profiles/headless.nix")]; + nixpkgs.overlays = overlays; + }) + (import ./modules) + + (import ./configuration) + sops-nix.nixosModules.sops + ({lib, ...}: { + users.users.tlater.password = "insecure"; + + # Disable graphical tty so -curses works + boot.kernelParams = ["nomodeset"]; + + # Sets the base domain for nginx to localhost so that we + # can easily test locally with the VM. + services.nginx.domain = lib.mkOverride 99 "localhost"; + + # # Set up VM settings to match real VPS + # virtualisation.memorySize = 3941; + # virtualisation.cores = 2; + }) + ]; + }; + }; + } + // flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs {inherit system overlays;}; + sops-pkgs = sops-nix.packages.${system}; + in { + devShell = pkgs.mkShell { + sopsPGPKeyDirs = ["./keys/hosts/" "./keys/users/"]; + nativeBuildInputs = with sops-pkgs; [ + sops-import-keys-hook + ]; + buildInputs = with pkgs; + with sops-pkgs; [ + nixfmt + git-lfs + sops-init-gpg-key + + # For the minecraft mod update script + (python3.withPackages (pypkgs: + with pypkgs; [ + dateutil + requests + + ipython + + python3.withPackages + (ppkgs: + with pkgs; [ + python-lsp-server + python-lsp-black + pyls-isort + pyls-mypy + rope + pyflakes + mccabe + pycodestyle + pydocstyle + ]) + ])) + ]; + shellHook = let + inherit (pkgs.lib.attrsets) mapAttrsToList; + inherit (pkgs.lib.strings) concatStringsSep; + ports = { + "3022" = "2222"; + "3080" = "80"; + "3443" = "443"; + "3021" = "2221"; + "25565" = "25565"; + "21025" = "21025"; # Starbound + }; + QEMU_NET_OPTS = + concatStringsSep "," + (mapAttrsToList + (host: vm: "hostfwd=::${host}-:${vm}") + ports); + in '' + export QEMU_OPTS="-m 3941 -smp 2 -curses" + export QEMU_NET_OPTS="${QEMU_NET_OPTS}" + + # Work around sudo requiring a full terminal + export NIX_SSHOPTS="-t" + ''; + }; + + packages = import ./pkgs { + inherit pkgs; + local-lib = self.lib.${system}; + }; + + lib = import ./lib { + inherit pkgs inputs; + lib = nixpkgs.lib; + }; + }); } diff --git a/lib/default.nix b/lib/default.nix index 3d657e4..2a5d54f 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,8 +1,12 @@ -{ inputs, lib, pkgs, ... }: - -let +{ + inputs, + lib, + pkgs, + ... +}: let inherit (lib) makeExtensible foldr attrValues; - tlater-lib = makeExtensible (self: - let callLibs = file: import file { inherit self lib pkgs inputs; }; - in { minecraft = callLibs ./minecraft.nix; }); -in tlater-lib.extend (self: super: foldr (a: b: a // b) { } (attrValues super)) + tlater-lib = makeExtensible (self: let + callLibs = file: import file {inherit self lib pkgs inputs;}; + in {minecraft = callLibs ./minecraft.nix;}); +in + tlater-lib.extend (self: super: foldr (a: b: a // b) {} (attrValues super)) diff --git a/lib/minecraft.nix b/lib/minecraft.nix index ef50b3d..e3f8c4e 100644 --- a/lib/minecraft.nix +++ b/lib/minecraft.nix @@ -1,6 +1,8 @@ -{ lib, pkgs, ... }: - { + lib, + pkgs, + ... +}: { # Make a modpack given its mod inputs. # # Mods should be attrsets in this format: @@ -13,7 +15,11 @@ # # This may be nice to read from a json ;) # - mkModpack = { name, version, mods }: + mkModpack = { + name, + version, + mods, + }: pkgs.stdenv.mkDerivation { inherit name version; srcs = map pkgs.local.fetchFromCurseForge mods; @@ -28,7 +34,11 @@ ''; }; - mkModpackZip = { name, version, mods }: + mkModpackZip = { + name, + version, + mods, + }: pkgs.stdenv.mkDerivation { inherit name version; srcs = map pkgs.local.fetchFromCurseForge mods; @@ -37,7 +47,7 @@ preUnpack = "mkdir -p src/"; unpackCmd = "cp $curSrc src/"; - buildInputs = [ pkgs.zip]; + buildInputs = [pkgs.zip]; buildPhase = '' zip voor-kia-mods.zip *.jar diff --git a/modules/default.nix b/modules/default.nix index 1fd86fc..46f5e10 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,9 +1,6 @@ -{ lib, ... }: - -with lib; - -{ - imports = [ ./virtualisation/pods.nix ]; +{lib, ...}: +with lib; { + imports = [./virtualisation/pods.nix]; options.services.nginx.domain = mkOption { type = types.str; diff --git a/modules/virtualisation/pods.nix b/modules/virtualisation/pods.nix index a5c9daa..5a96cc8 100644 --- a/modules/virtualisation/pods.nix +++ b/modules/virtualisation/pods.nix @@ -1,20 +1,21 @@ -{ lib, config, options, ... }: - -with lib; - -let +{ + lib, + config, + options, + ... +}: +with lib; let cfg = config.virtualisation.pods; list-to-args = arg: list: concatStringsSep " " (map (e: "--${arg}=${escapeShellArg e}") list); - possibly-unset-arg = arg: val: - (optionalString (val != null) "--${arg}=${escapeShellArg val}"); + possibly-unset-arg = arg: val: (optionalString (val != null) "--${arg}=${escapeShellArg val}"); mkPod = name: pod: rec { - path = [ config.virtualisation.podman.package ]; + path = [config.virtualisation.podman.package]; - wants = [ "network.target" ]; - after = [ "network-online.target" ]; - wantedBy = [ "multi-user.target" "default.target" ]; + wants = ["network.target"]; + after = ["network-online.target"]; + wantedBy = ["multi-user.target" "default.target"]; environment.PODMAN_SYSTEMD_UNIT = "%n"; @@ -55,7 +56,6 @@ let PIDFile = "/run/podman/pods/${name}.pid"; }; }; - in { options.virtualisation.pods = mkOption { type = with types; @@ -63,9 +63,8 @@ in { options = { added-hosts = mkOption { type = listOf str; - default = [ ]; - description = - "Additional hosts to add to /etc/hosts for each container."; + default = []; + description = "Additional hosts to add to /etc/hosts for each container."; example = literalExample '' [ "database:10.0.0.1" ] ''; @@ -74,25 +73,24 @@ in { cgroup-parent = mkOption { type = nullOr str; default = null; - description = - "The cgroups path under which the pod cgroup will be created."; + description = "The cgroups path under which the pod cgroup will be created."; }; dns = mkOption { type = listOf str; - default = [ ]; + default = []; description = "The dns servers to set in /etc/resolv.conf."; }; dns-opt = mkOption { type = listOf str; - default = [ ]; + default = []; description = "dns options to set in /etc/resolv.conf."; }; dns-search = mkOption { type = listOf str; - default = [ ]; + default = []; description = "Search domains to set in /etc/resolv.conf."; }; @@ -156,20 +154,20 @@ in { publish = mkOption { type = listOf str; - default = [ ]; + default = []; description = "List of ports to publish from the pod."; }; share = mkOption { type = listOf str; - default = [ ]; + default = []; description = "List of kernel namespaces to share."; }; containers = options.virtualisation.oci-containers.containers; }; }); - default = { }; + default = {}; description = "Podman pods to run as systemd services."; }; @@ -178,7 +176,7 @@ in { # # TODO: See if there's a generic version for this somewhere in the # pkgs lib? - mergeAttrs = attrList: foldr (a: b: a // b) { } attrList; + mergeAttrs = attrList: foldr (a: b: a // b) {} attrList; # Create services for all defined pods pod-services = mapAttrs' (n: v: nameValuePair "pod-${n}" (mkPod n v)) cfg; @@ -190,31 +188,35 @@ in { pod-container-services = mergeAttrs (mapAttrsToList (pname: pod: mapAttrs' (cname: container: nameValuePair "podman-${pname}-${cname}" rec { - after = [ "pod-${pname}.service" ]; + after = ["pod-${pname}.service"]; requires = after; - }) pod.containers) cfg); + }) + pod.containers) + cfg); # Override the oci-container settings for containers defined in pods. # # I.e., set the --pod=podname setting, and update the dependsOn so # it points to containers in the same pod. podifyContainer = container: podname: - container // { + container + // { dependsOn = map (dependency: "${podname}-${dependency}") container.dependsOn; - extraOptions = container.extraOptions ++ [ "--pod=${podname}" ]; + extraOptions = container.extraOptions ++ ["--pod=${podname}"]; }; + in + lib.mkIf (cfg != {}) { + virtualisation.podman.enable = true; + virtualisation.oci-containers.backend = "podman"; - in lib.mkIf (cfg != { }) { - virtualisation.podman.enable = true; - virtualisation.oci-containers.backend = "podman"; + systemd.services = pod-services // pod-container-services; - systemd.services = pod-services // pod-container-services; - - virtualisation.oci-containers.containers = mergeAttrs (mapAttrsToList - (pname: pod: - mapAttrs' (cname: container: - nameValuePair "${pname}-${cname}" (podifyContainer container pname)) - pod.containers) cfg); - }; + virtualisation.oci-containers.containers = mergeAttrs (mapAttrsToList + (pname: pod: + mapAttrs' (cname: container: + nameValuePair "${pname}-${cname}" (podifyContainer container pname)) + pod.containers) + cfg); + }; } diff --git a/pkgs/build-support/fetchFromCurseForge.nix b/pkgs/build-support/fetchFromCurseForge.nix index e3e5b51..674803f 100644 --- a/pkgs/build-support/fetchFromCurseForge.nix +++ b/pkgs/build-support/fetchFromCurseForge.nix @@ -1,26 +1,31 @@ -{ lib, fetchurl }: - +{ + lib, + fetchurl, +}: with builtins; + { + project, + id, + filename, + ... + } @ args: let + # I think this is supposed to be some weak automation + # protection. This split "id" is simply part of the download URL. + # + # Note that if it's zero-prefixed we need to remove the zeroes. It's + # really an odd one... + a = head (match "0*([[:digit:]]+)" (substring 0 4 (toString id))); + b = head (match "0*([[:digit:]]+)" (substring 4 7 (toString id))); + encoded-filename = replaceStrings [" "] ["%20"] filename; -{ project, id, filename, ... }@args: - -let - # I think this is supposed to be some weak automation - # protection. This split "id" is simply part of the download URL. - # - # Note that if it's zero-prefixed we need to remove the zeroes. It's - # really an odd one... - a = head (match "0*([[:digit:]]+)" (substring 0 4 (toString id))); - b = head (match "0*([[:digit:]]+)" (substring 4 7 (toString id))); - encoded-filename = replaceStrings [ " " ] [ "%20" ] filename; - - url = "https://media.forgecdn.net/files/${a}/${b}/${encoded-filename}"; - otherArgs = removeAttrs args [ "project" "project_id" "id" "filename" ]; - -in fetchurl (otherArgs // { - inherit url; - # Rename files to avoid names incompatible with the nix store - name = "${project}.jar"; - # Avoid accidental URL globbing - curlOpts = "--globoff"; -}) + url = "https://media.forgecdn.net/files/${a}/${b}/${encoded-filename}"; + otherArgs = removeAttrs args ["project" "project_id" "id" "filename"]; + in + fetchurl (otherArgs + // { + inherit url; + # Rename files to avoid names incompatible with the nix store + name = "${project}.jar"; + # Avoid accidental URL globbing + curlOpts = "--globoff"; + }) diff --git a/pkgs/default.nix b/pkgs/default.nix index dd334bc..ef226db 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,19 +1,21 @@ -{ pkgs, local-lib, ... }: - -let +{ + pkgs, + local-lib, + ... +}: let inherit (pkgs.lib) callPackageWith; - callPackage = callPackageWith (pkgs // { inherit local-lib; }); + callPackage = callPackageWith (pkgs // {inherit local-lib;}); in { # Forge - forge-server = callPackage ./minecraft/forge-server.nix { }; + forge-server = callPackage ./minecraft/forge-server.nix {}; # Build support - fetchFromCurseForge = callPackage ./build-support/fetchFromCurseForge.nix { }; + fetchFromCurseForge = callPackage ./build-support/fetchFromCurseForge.nix {}; # Minecraft modpacks - voor-kia = callPackage ./minecraft/voor-kia.nix { }; - voor-kia-client = callPackage ./minecraft/voor-kia-client.nix { }; + voor-kia = callPackage ./minecraft/voor-kia.nix {}; + voor-kia-client = callPackage ./minecraft/voor-kia-client.nix {}; # Starbound - starbound = callPackage ./starbound { }; + starbound = callPackage ./starbound {}; } diff --git a/pkgs/minecraft/forge-server.nix b/pkgs/minecraft/forge-server.nix index e26a7a5..5d7a8c2 100644 --- a/pkgs/minecraft/forge-server.nix +++ b/pkgs/minecraft/forge-server.nix @@ -1,7 +1,15 @@ -{ lib, stdenv, fetchurl, busybox, coreutils, jre_headless, runtimeShell -, mods ? null, modConfig ? null, defaultconfigs ? null }: - -let +{ + lib, + stdenv, + fetchurl, + busybox, + coreutils, + jre_headless, + runtimeShell, + mods ? null, + modConfig ? null, + defaultconfigs ? null, +}: let name = "forge-server"; version = "1.16.5-36.2.2"; mirror = "https://files.minecraftforge.net/maven/net/minecraftforge/forge"; @@ -14,7 +22,7 @@ let unpackCmd = "mkdir -p src; cp $curSrc src/forge-${version}-installer.jar"; - nativeBuildInputs = [ jre_headless ]; + nativeBuildInputs = [jre_headless]; # Somewhat evil pre-install step to run through the network # dependency resolution forge needs. This is also common for gradle @@ -43,70 +51,70 @@ let outputHashMode = "recursive"; outputHash = "VuUGc5JnzcRhDt9aaGrU+yUrJILVdU2vzv1PxLwdAig="; }; +in + stdenv.mkDerivation rec { + inherit name version src unpackCmd nativeBuildInputs; -in stdenv.mkDerivation rec { - inherit name version src unpackCmd nativeBuildInputs; + buildPhase = '' + mkdir -p installation - buildPhase = '' - mkdir -p installation + # Take the input deps and patch the Minecraft server jar into our + # libraries to create the package. + cp -rv ${deps}/* installation/ + chmod -R +w installation/ + java -jar forge-${version}-installer.jar --offline --installServer installation/ + ''; - # Take the input deps and patch the Minecraft server jar into our - # libraries to create the package. - cp -rv ${deps}/* installation/ - chmod -R +w installation/ - java -jar forge-${version}-installer.jar --offline --installServer installation/ - ''; + installPhase = '' + mkdir -p $out/{bin,lib/forge} - installPhase = '' - mkdir -p $out/{bin,lib/forge} + cp -r installation/{forge-${version}.jar,libraries} $out/lib/forge/ - cp -r installation/{forge-${version}.jar,libraries} $out/lib/forge/ + cat > $out/bin/forge-server << EOF + #!${runtimeShell} + set -eu - cat > $out/bin/forge-server << EOF - #!${runtimeShell} - set -eu + # Delete any previous mods directory so that it can be updated + ${busybox}/bin/rm -fr mods - # Delete any previous mods directory so that it can be updated - ${busybox}/bin/rm -fr mods + ${lib.optionalString (mods != null) '' + # Copy the specified mods into the directory. Note that, sadly, + # forge doesn't support symlinks here. + ${busybox}/bin/mkdir -p mods + ${busybox}/bin/cp -r '${mods}/mods/'*.jar mods + ''} - ${lib.optionalString (mods != null) '' - # Copy the specified mods into the directory. Note that, sadly, - # forge doesn't support symlinks here. - ${busybox}/bin/mkdir -p mods - ${busybox}/bin/cp -r '${mods}/mods/'*.jar mods - ''} + # Delete any previous config directories so that they can be updated + ${busybox}/bin/rm -fr config defaultconfigs - # Delete any previous config directories so that they can be updated - ${busybox}/bin/rm -fr config defaultconfigs + ${lib.optionalString (modConfig != null) '' + # Copy the specified configs into the directory. Forge (and + # mods) will try to write here, so we cannot symlink. + ${busybox}/bin/mkdir -p config + ${busybox}/bin/cp -r '${modConfig}'/* config + ${busybox}/bin/chmod -R u+w config + ''} - ${lib.optionalString (modConfig != null) '' - # Copy the specified configs into the directory. Forge (and - # mods) will try to write here, so we cannot symlink. - ${busybox}/bin/mkdir -p config - ${busybox}/bin/cp -r '${modConfig}'/* config - ${busybox}/bin/chmod -R u+w config - ''} + ${lib.optionalString (defaultconfigs != null) '' + # Copy the specified configs into the directory. Forge (and + # mods) will try to write here, so we cannot symlink. + ${busybox}/bin/mkdir -p defaultconfigs + ${busybox}/bin/cp -r '${defaultconfigs}'/* defaultconfigs + ${busybox}/bin/chmod -R u+w defaultconfigs + ''} - ${lib.optionalString (defaultconfigs != null) '' - # Copy the specified configs into the directory. Forge (and - # mods) will try to write here, so we cannot symlink. - ${busybox}/bin/mkdir -p defaultconfigs - ${busybox}/bin/cp -r '${defaultconfigs}'/* defaultconfigs - ${busybox}/bin/chmod -R u+w defaultconfigs - ''} + exec ${jre_headless}/bin/java \$@ -jar $out'/lib/forge/forge-${version}.jar' nogui + EOF - exec ${jre_headless}/bin/java \$@ -jar $out'/lib/forge/forge-${version}.jar' nogui - EOF + chmod +x $out/bin/forge-server + ''; - chmod +x $out/bin/forge-server - ''; - - meta = with lib; { - description = "Forge Minecraft Server"; - homepage = "https://files.minecraftforge.net/"; - # Forge itself is open source, but this package pulls in - # minecraft. - license = licenses.unfreeRedistributable; - platforms = platforms.unix; - }; -} + meta = with lib; { + description = "Forge Minecraft Server"; + homepage = "https://files.minecraftforge.net/"; + # Forge itself is open source, but this package pulls in + # minecraft. + license = licenses.unfreeRedistributable; + platforms = platforms.unix; + }; + } diff --git a/pkgs/minecraft/voor-kia-client.nix b/pkgs/minecraft/voor-kia-client.nix index 8d0c687..fea9879 100644 --- a/pkgs/minecraft/voor-kia-client.nix +++ b/pkgs/minecraft/voor-kia-client.nix @@ -1,8 +1,12 @@ -{ lib, local-lib, stdenv }: - +{ + lib, + local-lib, + stdenv, +}: local-lib.minecraft.mkModpackZip { name = "voor-kia-client"; version = "1.1"; - mods = (builtins.fromJSON (builtins.readFile ./voor-kia/mods.json)) + mods = + (builtins.fromJSON (builtins.readFile ./voor-kia/mods.json)) ++ (builtins.fromJSON (builtins.readFile ./voor-kia/client-mods.json)); } diff --git a/pkgs/minecraft/voor-kia.nix b/pkgs/minecraft/voor-kia.nix index 86c5cde..4bbd433 100644 --- a/pkgs/minecraft/voor-kia.nix +++ b/pkgs/minecraft/voor-kia.nix @@ -1,5 +1,8 @@ -{ lib, local-lib, stdenv }: - +{ + lib, + local-lib, + stdenv, +}: local-lib.minecraft.mkModpack { name = "voor-kia"; version = "1.0";