Files
homelab-config/homelab-services/mc-service/flake.nix
T

110 lines
3.5 KiB
Nix
Raw Normal View History

2025-06-21 14:43:54 -05:00
{
2025-06-21 15:45:34 -05:00
description = "Declarative MC config";
2025-06-21 14:43:54 -05:00
2025-06-21 15:45:34 -05:00
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
nix-minecraft.url = "github:Infinidoge/nix-minecraft";
};
2025-06-21 14:43:54 -05:00
2025-06-21 16:39:02 -05:00
outputs = { self, nixpkgs, nix-minecraft }: {
2025-06-21 16:11:19 -05:00
2025-06-21 16:30:53 -05:00
nixosModules.mc-service = { config, lib, pkgs, ... }:
2025-06-21 16:11:19 -05:00
let
2025-06-21 22:27:41 -05:00
system = "x86_64-linux";
2025-06-21 16:30:53 -05:00
pkgs = import nixpkgs {
inherit system;
overlays = [ nix-minecraft.overlay ];
2025-06-21 16:45:03 -05:00
config = { allowUnfree = true; };
2025-06-21 16:30:53 -05:00
};
2025-06-21 15:45:34 -05:00
opts = config.services.mc-service;
in {
2025-06-21 16:36:09 -05:00
2025-06-21 16:39:02 -05:00
imports = [ nix-minecraft.nixosModules.minecraft-servers ];
2025-06-21 16:36:09 -05:00
2025-06-21 15:45:34 -05:00
options.services.mc-service = {
enable = lib.mkEnableOption "Enable Minecraft Server";
2025-06-21 14:43:54 -05:00
2025-06-21 15:45:34 -05:00
storeDir = lib.mkOption {
type = lib.types.path;
default = "/persist/srv/minecraft";
description = "Minecraft files locations";
};
};
2025-06-21 14:43:54 -05:00
2025-06-21 15:45:34 -05:00
config = lib.mkIf opts.enable {
users.groups.mc-service = {};
users.users.mc-service = {
isSystemUser = true;
createHome = true;
home = "${opts.storeDir}";
group = "mc-service";
};
2025-06-21 16:45:03 -05:00
2025-06-21 16:36:09 -05:00
services.minecraft-servers = {
2025-06-21 15:45:34 -05:00
enable = true;
eula = true;
openFirewall = true;
dataDir = "${opts.storeDir}";
2025-06-21 16:39:02 -05:00
user = "mc-service";
2025-06-21 15:45:34 -05:00
group = "mc-service";
2025-06-21 14:43:54 -05:00
2025-06-21 16:01:50 -05:00
servers.homeServer = {
2025-06-21 15:45:34 -05:00
enable = true;
restart = "always";
2025-06-26 18:14:52 -05:00
jvmOpts = "-Xmx16G -Xms16G";
2025-06-21 15:45:34 -05:00
serverProperties = {
server-port = 25565;
difficulty = 3;
gamemode = 0;
force-gamemode = true;
max-players = 10;
motd = "Home MC Server";
white-list = false;
2025-06-25 23:55:22 -05:00
spawn-protection = 0;
2025-06-21 15:45:34 -05:00
};
2025-06-21 14:43:54 -05:00
2025-06-21 15:53:35 -05:00
package = pkgs.fabricServers.fabric;
2025-06-21 15:45:34 -05:00
};
2025-06-26 18:14:52 -05:00
servers.testingServer = {
enable = true;
restart = "always";
2025-06-26 18:17:57 -05:00
jvmOpts = "-Xmx1G -Xms1G";
2025-06-26 18:14:52 -05:00
serverProperties = {
server-port = 43000;
difficulty = 3;
gamemode = 1;
force-gamemode = true;
max-players = 2;
motd = "Mod Test Server";
white-list = false;
spawn-protection = 0;
};
package = pkgs.fabricServers.fabric;
symlinks = {
mods = pkgs.linkFarmFromDrvs "mods" (builtins.attrValues {
Sleep = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/WTzuSu8P/versions/w4ONshdx/sleep-v4.1.4.jar";
sha512 = "f4f759a6b9f503ed606bbeb3422b5e31c02d99a7ee91befa7fc4afe364db147bd1e03042d4b6e67bebed7f81e34d6aa60a3a5d690011ef0e726190028d903346";
};
Lithium = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/gvQqBUqZ/versions/XWGBHYcB/lithium-fabric-0.17.0%2Bmc1.21.6.jar";
sha512 = "a8d6a8b69ae2b10dd0cf8f8149260d5bdbd2583147462bad03380014edd857852972b967d97df69728333d8836b1e9db8997712ea26365ddb8a05b8c845c6534";
};
FabricAPI = pkgs.fetchurl {
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/b2dnY6PN/fabric-api-0.128.0%2B1.21.6.jar";
sha512 = "c668402e1a877c2d572d16e31e6d2783be27a80993fa83bf040ea2007994518786bd3140dcea15334f8ee1630836292b8ae4d41444e47cba0ac43d05f1eb1e78";
};
});
};
};
2025-06-21 15:45:34 -05:00
};
};
};
};
2025-06-21 14:43:54 -05:00
}