diff --git a/flake.lock b/flake.lock index 974d341..371dc2d 100644 --- a/flake.lock +++ b/flake.lock @@ -39,6 +39,22 @@ "type": "gitlab" } }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1629284811, @@ -54,6 +70,24 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "flatpaks": { "locked": { "lastModified": 1711997375, @@ -226,7 +260,7 @@ "xdg-desktop-portal-hyprland", "nixpkgs" ], - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1713121246, @@ -306,6 +340,26 @@ "type": "github" } }, + "nix-minecraft": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1716513728, + "narHash": "sha256-yZJebdRQ1UmJ6BMVNRDwwd2ZyBtpxDXsVQixlDe+Ras=", + "owner": "Infinidoge", + "repo": "nix-minecraft", + "rev": "876132681d6c3c2ef74cc9e37c0730e8dfe6ed4d", + "type": "github" + }, + "original": { + "owner": "Infinidoge", + "repo": "nix-minecraft", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1716330097, @@ -355,8 +409,24 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1715266358, + "narHash": "sha256-doPgfj+7FFe9rfzWo1siAV2mVCasW+Bh8I1cToAXEE4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f1010e0469db743d14519a1efd37e23f8513d714", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1716137900, + "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=", "owner": "nixos", "repo": "nixpkgs", "rev": "bfb7a882678e518398ce9a31a881538679f6f092", @@ -369,7 +439,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1712963716, "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", @@ -393,7 +463,8 @@ "hyprland": "hyprland", "nix-colors": "nix-colors", "nix-index-database": "nix-index-database", - "nixpkgs": "nixpkgs_2", + "nix-minecraft": "nix-minecraft", + "nixpkgs": "nixpkgs_3", "sops-nix": "sops-nix", "tmux-plugin-manager": "tmux-plugin-manager", "xdg-desktop-portal-hyprland": "xdg-desktop-portal-hyprland" @@ -436,6 +507,21 @@ } }, "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { "locked": { "lastModified": 1689347949, "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", @@ -450,7 +536,7 @@ "type": "github" } }, - "systems_3": { + "systems_4": { "locked": { "lastModified": 1689347949, "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", @@ -485,8 +571,8 @@ "inputs": { "hyprland-protocols": "hyprland-protocols_2", "hyprlang": "hyprlang_2", - "nixpkgs": "nixpkgs_3", - "systems": "systems_3" + "nixpkgs": "nixpkgs_4", + "systems": "systems_4" }, "locked": { "lastModified": 1716290197, diff --git a/flake.nix b/flake.nix index 64b78e7..a02a037 100644 --- a/flake.nix +++ b/flake.nix @@ -37,6 +37,8 @@ flake = false; }; + nix-minecraft.url = "github:Infinidoge/nix-minecraft"; + # hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; # Temp version pin because of issue https://github.com/hyprwm/Hyprland/issues/6132 # hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1&rev=cba1ade848feac44b2eda677503900639581c3f4"; diff --git a/hosts/spacestation/services.nix b/hosts/spacestation/services.nix index 62a7481..36fc86e 100644 --- a/hosts/spacestation/services.nix +++ b/hosts/spacestation/services.nix @@ -64,6 +64,8 @@ in { secrets.services; networking.firewall.allowedTCPPorts = [80 433]; + profiles.minecraft-servers.enable = true; + services.openssh.enable = true; services.forgejo = { diff --git a/modules/nixos/profiles/default.nix b/modules/nixos/profiles/default.nix index ecee3d8..979711e 100644 --- a/modules/nixos/profiles/default.nix +++ b/modules/nixos/profiles/default.nix @@ -2,6 +2,7 @@ imports = [ ./locale.nix ./media-server.nix + ./minecraft-servers.nix ]; options = {}; config = {}; diff --git a/modules/nixos/profiles/minecraft-servers.nix b/modules/nixos/profiles/minecraft-servers.nix new file mode 100644 index 0000000..08fa81f --- /dev/null +++ b/modules/nixos/profiles/minecraft-servers.nix @@ -0,0 +1,109 @@ +{ config +, lib +, pkgs +, ... +}: +let + cfg = config.profiles.minecraft-servers; +in +{ + imports = [ ../services/minecraft-servers.nix ]; + options.profiles.minecraft-servers = with lib; { + enable = mkEnableOption ""; + }; + config = + let + optimizationMods = builtins.attrValues { + AlternateCurrent = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/r0v8vy1s/versions/CFNRLnDw/alternate-current-mc1.20-1.8.0-beta.3.jar"; + sha256 = "130k9ay8hylbv2ijzj5n9951ww2lxyqrykazvr8l3yf1dbm0n56r"; + }; + /* + BetterMaps = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/JX1fvBwM/versions/SSxJn7Q3/bettermaps-mc1.20-0.5.2.jar"; + sha256 = "0aps89kxx98xhmya4ljy3h3dhni88wv697vh7ipg3vzfxhqyfj9p"; + }; + */ + CCME = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/VSNURh3q/versions/1jjyJyVe/c2me-fabric-mc1.20.6-0.2.0+alpha.11.95.jar"; + sha256 = "0ja97jv4x1xhm1nmpq661qf641zv314zzdp7q9d0wzfp712am0dc"; + }; + Chunky = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/fALzjamp/versions/ZrmnYk7q/Chunky-1.4.10.jar"; + sha256 = "098gg5s02c5lnz9y85vja9z17cmkaidf8fr99drrym5z1n3d48jf"; + }; + DisablePortalChecks = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/uOzKOGGt/versions/zW17oIr0/disableportalchecks-1.0.0.jar"; + sha256 = "1zq535nb6zv22plvz3p6ykh02skng6wjjzsalm1qmlidj22r8j40"; + }; + FabricApi = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/191HCCtF/fabric-api-0.98.0+1.20.6.jar"; + sha256 = "09p29f4333mnwigs7v307xhli99n51qg7prkkp9yfm9pwnvv26q3"; + }; + FasterRandom = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/RfFxanNh/versions/I8jy69I9/fasterrandom-4.1.0.jar"; + sha256 = "0hwxbkic4mwjl3sqm9hsl8xvf96qk87ah1njl7pnqpam720zl0i3"; + }; + Icterine = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/7RvRWn6p/versions/W7L89aQM/Icterine-fabric-1.20.3-4-1.3.0.jar"; + sha256 = "15vv2xqd6gzvckr3wxgisz02x9d938cgg2ncc2gnd3m6k3l6l5w5"; + }; + Lithium = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/gvQqBUqZ/versions/bAbb09VF/lithium-fabric-mc1.20.6-0.12.3.jar"; + sha256 = "03fikawl6rw14gkzz74k7zv1cf9m0l9am12l2wmjf8mm0a9dmp9l"; + }; + MemoryLeakFix = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/NRjRiSSD/versions/5xvCCRjJ/memoryleakfix-fabric-1.17+-1.1.5.jar"; + sha256 = "1pmdllflr2mjjh2r3v8lyz8rxg0ncq8m9r15vl89f09f4vbk7b5q"; + }; + Noisium = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/KuNKN7d2/versions/lT2Jvcwv/noisium-fabric-2.1.0+mc1.20.5-1.20.6.jar"; + sha256 = "0bawxlrph66jladb9w1b20qn7av6az45nfn4bnggcygza35r0mrj"; + }; + NoKebab = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/y82xHklI/versions/t1haYknB/no-kebab-1.3.0+1.20.6.jar"; + sha256 = "1xks224cls95jnfhk54plnsmb1x4bb0llr17w1rwbbn6rx66p6gi"; + }; + ModernFix = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/nmDcB62a/versions/xlt4bcjj/modernfix-fabric-5.17.3+mc1.20.6.jar"; + sha256 = "1sdbv2a3zb1j481g2318vfaxd5hlx0h5fl7azl3j46095422yw93"; + }; + ServerCode = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/4WWQxlQP/versions/MiqvHRzE/servercore-fabric-1.5.1+1.20.5.jar"; + sha256 = "1vhb3dik4vancgsgm0ldmgx6qlsw0iiqlcq8gy0ifxmjmm1sin6f"; + }; + Slumber = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/ksm6XRZ9/versions/mPf1P26X/slumber-1.2.0.jar"; + sha256 = "1chp2wkjcmxi4apry1fkml3n7k4x2sjwc7dx9qjklqpcw4gbn7s7"; + }; + ThreadTweak = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/vSEH1ERy/versions/BtMMYDAh/threadtweak-fabric-1.20.6-0.1.3.jar"; + sha256 = "12nyln487bsn4gvlynzw0samds8mxi02bkxb9jdl9x0yy16pbrfh"; + }; + VeryManyPlayer = pkgs.fetchurl { + url = "https://cdn.modrinth.com/data/wnEe9KBa/versions/83ET13o3/vmp-fabric-mc1.20.6-0.2.0+beta.7.155-all.jar"; + sha256 = "039adzcpl9bx4h2gsl399b97vsi0h3b33421jbsl603rld6cgz88"; + }; + }; + in + with lib; + mkIf cfg.enable { + services.minecraft-servers.enable = true; + services.minecraft-servers.eula = true; + services.minecraft-servers.openFirewall = true; + + networking.firewall.allowedTCPPorts = [ 25565 ]; + + services.minecraft-servers.servers.survival = { + enable = true; + restart = "no"; + serverProperties = { + server-port = 25565; + }; + package = pkgs.fabricServers.fabric-1_20_6.override { }; + symlinks = { + mods = pkgs.linkFarmFromDrvs "mods" optimizationMods; + }; + }; + }; +} diff --git a/modules/nixos/services/default.nix b/modules/nixos/services/default.nix index 191e0ba..4cea9af 100644 --- a/modules/nixos/services/default.nix +++ b/modules/nixos/services/default.nix @@ -2,6 +2,7 @@ imports = [ ./adguardhome.nix ./forgejo + ./minecraft-servers.nix ./qbittorrent.nix ./tailscale.nix ]; diff --git a/modules/nixos/services/minecraft-servers.nix b/modules/nixos/services/minecraft-servers.nix new file mode 100644 index 0000000..2463798 --- /dev/null +++ b/modules/nixos/services/minecraft-servers.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + inputs, + ... +}: let + cfg = config.services.minecraft-servers; +in { + imports = [ + inputs.nix-minecraft.nixosModules.minecraft-servers + ]; + options.services.minecraft-servers = with lib; with lib.types; {}; + config = with lib; + mkIf cfg.enable { + nixpkgs.overlays = [inputs.nix-minecraft.overlay]; + }; +}