diff --git a/modules/nixos/games/default.nix b/modules/nixos/games/default.nix index 639ea68..7790c6b 100644 --- a/modules/nixos/games/default.nix +++ b/modules/nixos/games/default.nix @@ -1,5 +1,6 @@ { imports = [ ./minecraft + ./wow ]; } diff --git a/modules/nixos/games/wow/azerothcore/default.nix b/modules/nixos/games/wow/azerothcore/default.nix new file mode 100644 index 0000000..f396c46 --- /dev/null +++ b/modules/nixos/games/wow/azerothcore/default.nix @@ -0,0 +1,459 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.azerothcore; +in +{ + options.services.azerothcore = { + enable = mkEnableOption "AzerothCore service"; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = mdDoc "Whether to open the firewall for the auth & world server ports."; + }; + + serverPackage = mkPackageOption pkgs "azerothcore" { }; + clientDataPackage = mkPackageOption pkgs "azerothcore-data" { }; + + srcDir = mkOption { + type = types.path; + default = "${pkgs.azerothcore}/share"; + description = mdDoc "The data directory"; + }; + dataDir = mkOption { + type = types.path; + default = "${pkgs.azerothcore-data}"; + description = mdDoc "The data directory"; + }; + logDir = mkOption { + type = types.path; + default = "/var/log/azerothcore"; + description = mdDoc "The log directory"; + }; + tmpDir = mkOption { + type = types.path; + default = "/tmp/azerothcore"; + description = mdDoc "The tmp directory to use"; + }; + + hostname = mkOption { + type = types.str; + default = "127.0.0.1"; + description = lib.mdDoc "The hostname to reach the server."; + }; + + database = mkOption { + type = types.submodule { + options = { + user = mkOption { + type = types.str; + description = mdDoc "The MySQL database user to use for auth & world servers."; + }; + password = mkOption { + type = types.str; + description = mdDoc "The MySQL database password to use for auth & world servers."; + }; + host = mkOption { + type = types.str; + description = mdDoc "The MySQL host to use for auth & world servers."; + }; + port = mkOption { + type = types.port; + description = mdDoc "The port host to use for auth & world servers."; + }; + }; + }; + default = { + user = "acore"; + password = ""; + host = "127.0.0.1"; + port = 3306; + }; + description = mdDoc "Database configuration."; + }; + + auth = mkOption { + type = types.submodule { + options = { + port = mkOption { + type = types.port; + description = lib.mdDoc "Port to listen on for the auth server."; + }; + address = mkOption { + type = types.str; + description = mdDoc "Address to listen on for the auth server."; + }; + database = mkOption { + type = types.str; + description = "Database name for the auth server."; + }; + }; + }; + default = { + port = 3724; + address = "0.0.0.0"; + database = "acore_auth"; + }; + description = mdDoc "Auth server configuration."; + }; + + world = mkOption { + type = types.submodule { + options = { + realmId = mkOption { + type = types.int; + description = lib.mdDoc "Port to listen on for the worl server."; + }; + port = mkOption { + type = types.port; + description = lib.mdDoc "Port to listen on for the worl server."; + }; + address = mkOption { + type = types.str; + description = mdDoc "Address to listen on for the world server."; + }; + database = mkOption { + type = types.str; + description = "Database name for the world server."; + }; + charactersDatabase = mkOption { + type = types.str; + description = "Characters database name for the world server."; + }; + }; + }; + default = { + realmId = 1; + port = 8085; + address = "0.0.0.0"; + database = "acore_world"; + charactersDatabase = "acore_characters"; + }; + description = mdDoc "World server configuration."; + }; + + npcbots = mkOption { + type = types.submodule { + options = { + botgiver = { + filterRaces = mkOption { + type = types.int; + }; + }; + classes = { + warrior = mkOption { + type = types.bool; + }; + paladin = mkOption { + type = types.bool; + }; + hunter = mkOption { + type = types.bool; + }; + rogue = mkOption { + type = types.bool; + }; + priest = mkOption { + type = types.bool; + }; + deathKnight = mkOption { + type = types.bool; + }; + shaman = mkOption { + type = types.bool; + }; + mage = mkOption { + type = types.bool; + }; + warlock = mkOption { + type = types.bool; + }; + druid = mkOption { + type = types.bool; + }; + blademaster = mkOption { + type = types.bool; + }; + obsidianDestroyer = mkOption { + type = types.bool; + }; + archmage = mkOption { + type = types.bool; + }; + dreadlord = mkOption { + type = types.bool; + }; + spellBreaker = mkOption { + type = types.bool; + }; + darkRanger = mkOption { + type = types.bool; + }; + necromancer = mkOption { + type = types.bool; + }; + seaWitch = mkOption { + type = types.bool; + }; + cryptLord = mkOption { + type = types.bool; + }; + }; + }; + }; + default = { + botgiver = { + filterRaces = 0; + }; + classes = { + warrior = true; + paladin = true; + hunter = true; + rogue = true; + priest = true; + deathKnight = true; + shaman = true; + mage = true; + warlock = true; + druid = true; + blademaster = false; + obsidianDestroyer = true; + archmage = true; + dreadlord = true; + spellBreaker = true; + darkRanger = true; + necromancer = true; + seaWitch = true; + cryptLord = true; + }; + }; + }; + + ahbot = mkOption { + type = types.submodule { + options = { + EnableSeller = mkOption { + type = types.int; + }; + EnableBuyer = mkOption { + type = types.int; + }; + Account = mkOption { + type = types.int; + }; + GUID = mkOption { + type = types.int; + }; + ItemsPerCycle = mkOption { + type = types.int; + }; + ElapsingTimeClass = mkOption { + type = types.int; + }; + VendorItems = mkOption { + type = types.int; + }; + VendorTradeGoods = mkOption { + type = types.int; + }; + LootItems = mkOption { + type = types.int; + }; + LootTradeGoods = mkOption { + type = types.int; + }; + OtherItems = mkOption { + type = types.int; + }; + OtherTradeGoods = mkOption { + type = types.int; + }; + ProfessionItems = mkOption { + type = types.int; + }; + }; + }; + default = { + EnableSeller = 0; + EnableBuyer = 0; + Account = 0; + GUID = 0; + ItemsPerCycle = 200; + ElapsingTimeClass = 1; + VendorItems = 0; + VendorTradeGoods = 0; + LootItems = 1; + LootTradeGoods = 1; + OtherItems = 0; + OtherTradeGoods = 0; + ProfessionItems = 0; + }; + }; + }; + + config = mkIf cfg.enable { + users.users.azerothcore = { + home = cfg.dataDir; + createHome = true; + isSystemUser = true; + group = "azerothcore"; + }; + users.groups.azerothcore.name = "azerothcore"; + + networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ + cfg.auth.port + cfg.world.port + ]; + + environment.etc = + { + "azerothcore/authserver.conf".source = pkgs.runCommand "authserver.conf" + { } '' + cp ${cfg.serverPackage}/etc/authserver.conf.dist $out + ''; + "azerothcore/worldserver.conf".source = pkgs.runCommand "worldserver.conf" + { } '' + cp ${cfg.serverPackage}/etc/worldserver.conf.dist $out + ''; + "azerothcore/dbimport.conf".source = pkgs.runCommand "dbimport.conf" + { } '' + cp ${cfg.serverPackage}/etc/dbimport.conf.dist $out + ''; + "azerothcore/modules/mod_ahbot.conf".source = pkgs.runCommand "mod_ahbot.conf" + { } '' + cp ${cfg.serverPackage}/etc/modules/mod_ahbot.conf.dist $out + ''; + }; + + systemd.services = + let + env_key = prefix: key: "${prefix}_${key}"; + ac_env_key = env_key "AC"; + npcbot_env_key = env_key "AC_NPC_BOT"; + ahbot_env_key = env_key "AC_AUCTION_HOUSE_BOT"; + + mysqlHost = "${cfg.database.host}"; + mysqlPort = toString cfg.database.port; + mysqlSocket = "/run/mysqld/mysqld.sock"; + databaseInfo = (user: password: database: (if mysqlHost == "127.0.0.1" then ".;${mysqlSocket};${user};${password};${database}" else "${mysqlHost};${mysqlPort};${user};${password};${database}")) cfg.database.user cfg.database.password; + authDatabaseInfo = databaseInfo cfg.auth.database; + worldDatabaseInfo = databaseInfo cfg.world.database; + characterDatabaseInfo = databaseInfo cfg.world.charactersDatabase; + in + { + azerothcore-authserver = { + description = "AzerothCore Auth Server"; + after = [ "network-online.target" "mysql.service" ]; + wants = [ "network-online.target" "mysql.service" ]; + environment = { + "${ac_env_key "CONSOLE_ENABLE"}" = "0"; + "${ac_env_key "DATA_DIR"}" = cfg.clientDataPackage; + "${ac_env_key "LOGS_DIR"}" = cfg.logDir; + "${ac_env_key "TMP_DIR"}" = cfg.tmpDir; + "${ac_env_key "SOURCE_DIRECTORY"}" = toString cfg.serverPackage.srcDir; + "${ac_env_key "REALM_SERVER_PORT"}" = toString cfg.auth.port; + "${ac_env_key "BIND_IP"}" = cfg.auth.address; + "${ac_env_key "LOGIN_DATABASE_INFO"}" = authDatabaseInfo; + }; + serviceConfig = { + Type = "simple"; + User = "azerothcore"; + Group = "azerothcore"; + Restart = "on-failure"; + ExecStart = "${cfg.serverPackage}/bin/authserver -c /etc/azerothcore/authserver.conf"; + }; + }; + azerothcore-worldserver = { + description = "AzerothCore World Server"; + after = [ "network-online.target" "mysql.service" ]; + wants = [ "network-online.target" "mysql.service" ]; + environment = { + "${ac_env_key "REALM_ID"}" = "${toString cfg.world.realmId}"; + "${ac_env_key "CONSOLE_ENABLE"}" = "0"; + "${ac_env_key "DATA_DIR"}" = "${cfg.clientDataPackage}"; + "${ac_env_key "LOGS_DIR"}" = "${cfg.logDir}"; + "${ac_env_key "TMP_DIR"}" = cfg.tmpDir; + "${ac_env_key "SOURCE_DIRECTORY"}" = cfg.serverPackage.srcDir; + "${ac_env_key "WORLD_SERVER_PORT"}" = toString cfg.world.port; + "${ac_env_key "BIND_IP"}" = cfg.world.address; + "${ac_env_key "LOGIN_DATABASE_INFO"}" = authDatabaseInfo; + "${ac_env_key "WORLD_DATABASE_INFO"}" = worldDatabaseInfo; + "${ac_env_key "CHARACTER_DATABASE_INFO"}" = characterDatabaseInfo; + "${npcbot_env_key "BOTGIVER_FILTER_RACES"}" = toString cfg.npcbots.botgiver.filterRaces; + "${npcbot_env_key "CLASSES_WARRIOR_ENABLE"}" = if cfg.npcbots.classes.warrior then "1" else "0"; + "${npcbot_env_key "CLASSES_PALADIN_ENABLE"}" = if cfg.npcbots.classes.paladin then "1" else "0"; + "${npcbot_env_key "CLASSES_HUNTER_ENABLE"}" = if cfg.npcbots.classes.hunter then "1" else "0"; + "${npcbot_env_key "CLASSES_ROGUE_ENABLE"}" = if cfg.npcbots.classes.rogue then "1" else "0"; + "${npcbot_env_key "CLASSES_PRIEST_ENABLE"}" = if cfg.npcbots.classes.priest then "1" else "0"; + "${npcbot_env_key "CLASSES_DEATH_KNIGHT_ENABLE"}" = if cfg.npcbots.classes.deathKnight then "1" else "0"; + "${npcbot_env_key "CLASSES_SHAMAN_ENABLE"}" = if cfg.npcbots.classes.shaman then "1" else "0"; + "${npcbot_env_key "CLASSES_MAGE_ENABLE"}" = if cfg.npcbots.classes.mage then "1" else "0"; + "${npcbot_env_key "CLASSES_WARLOCK_ENABLE"}" = if cfg.npcbots.classes.warlock then "1" else "0"; + "${npcbot_env_key "CLASSES_DRUID_ENABLE"}" = if cfg.npcbots.classes.druid then "1" else "0"; + "${npcbot_env_key "CLASSES_BLADEMASTER_ENABLE"}" = if cfg.npcbots.classes.blademaster then "1" else "0"; + "${npcbot_env_key "CLASSES_OBSIDIAN_DESTROYER_ENABLE"}" = if cfg.npcbots.classes.obsidianDestroyer then "1" else "0"; + "${npcbot_env_key "CLASSES_ARCHMAGE_ENABLE"}" = if cfg.npcbots.classes.archmage then "1" else "0"; + "${npcbot_env_key "CLASSES_DREADLORD_ENABLE"}" = if cfg.npcbots.classes.dreadlord then "1" else "0"; + "${npcbot_env_key "CLASSES_SPELL_BREAKER_ENABLE"}" = if cfg.npcbots.classes.spellBreaker then "1" else "0"; + "${npcbot_env_key "CLASSES_DARK_RANGER_ENABLE"}" = if cfg.npcbots.classes.darkRanger then "1" else "0"; + "${npcbot_env_key "CLASSES_NECROMANCER_ENABLE"}" = if cfg.npcbots.classes.necromancer then "1" else "0"; + "${npcbot_env_key "CLASSES_SEA_WITCH_ENABLE"}" = if cfg.npcbots.classes.seaWitch then "1" else "0"; + "${npcbot_env_key "CLASSES_CRYPT_LORD_ENABLE"}" = if cfg.npcbots.classes.cryptLord then "1" else "0"; + "${ahbot_env_key "ENABLE_SELLER"}" = toString cfg.ahbot.EnableSeller; + "${ahbot_env_key "ENABLE_BUYER"}" = toString cfg.ahbot.EnableBuyer; + "${ahbot_env_key "ACCOUNT"}" = toString cfg.ahbot.Account; + "${ahbot_env_key "GUID"}" = toString cfg.ahbot.GUID; + "${ahbot_env_key "ITEMS_PER_CYCLE"}" = toString cfg.ahbot.ItemsPerCycle; + "${ahbot_env_key "ELAPSING_TIME_CLASS"}" = toString cfg.ahbot.ElapsingTimeClass; + "${ahbot_env_key "VENDOR_ITEMS"}" = toString cfg.ahbot.VendorItems; + "${ahbot_env_key "VENDOR_TRADE_GOODS"}" = toString cfg.ahbot.VendorTradeGoods; + "${ahbot_env_key "LOOT_ITEMS"}" = toString cfg.ahbot.LootItems; + "${ahbot_env_key "LOOT_TRADE_GOODS"}" = toString cfg.ahbot.LootTradeGoods; + "${ahbot_env_key "OTHER_ITEMS"}" = toString cfg.ahbot.OtherItems; + "${ahbot_env_key "OTHER_TRADE_GOODS"}" = toString cfg.ahbot.OtherTradeGoods; + "${ahbot_env_key "PROFESSION_ITEMS"}" = toString cfg.ahbot.ProfessionItems; + }; + serviceConfig = { + Type = "simple"; + User = "azerothcore"; + Group = "azerothcore"; + WorkingDirectory = "/etc/azerothcore"; + Restart = "on-failure"; + ExecStart = "${cfg.serverPackage}/bin/worldserver -c /etc/azerothcore/worldserver.conf"; + }; + }; + + azerothcore = rec { + description = "AzerothCore"; + wantedBy = [ "multi-user.target" ]; + wants = [ "azerothcore-auth.service" "azerothcore-world.service" ]; + after = wants; + }; + }; + + systemd.tmpfiles.rules = [ + "d ${cfg.logDir} 1755 azerothcore azerothcore - -" + "d ${cfg.tmpDir} 1755 azerothcore azerothcore - -" + ]; + + services.mysql = { + enable = true; + package = lib.mkDefault pkgs.mysql80; + ensureDatabases = [ + cfg.auth.database + cfg.world.database + cfg.world.charactersDatabase + ]; + ensureUsers = [{ + name = cfg.database.user; + ensurePermissions = { + "${cfg.auth.database}.*" = "ALL PRIVILEGES"; + "${cfg.world.database}.*" = "ALL PRIVILEGES"; + "${cfg.world.charactersDatabase}.*" = "ALL PRIVILEGES"; + }; + }]; + }; + }; +} + diff --git a/modules/nixos/games/wow/default.nix b/modules/nixos/games/wow/default.nix new file mode 100644 index 0000000..4c32c8c --- /dev/null +++ b/modules/nixos/games/wow/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./azerothcore + ]; +} diff --git a/modules/nixos/server/dashy/default.nix b/modules/nixos/server/dashy/default.nix index 5f77760..0693d8c 100644 --- a/modules/nixos/server/dashy/default.nix +++ b/modules/nixos/server/dashy/default.nix @@ -1,5 +1,57 @@ -{pkgs, ...}: { - services.dashy = { - enable = true; +{lib, config, ...}: with lib; { + services.dashy = mkIf config.services.dashy.enable { + virtualHost = { + enableNginx = true; + domain = "dashy.odie.home.arpa"; + }; + settings = { + pageInfo = { + title = "Dashy"; + }; + appConfig = { + theme = "Material-Dark"; + faviconApi = ["local"]; + preventWriteToDisk = true; + }; + sections = [ + { + name = "System Info"; + icon = "fas fas-rocket"; + widgets = [ + { type ="system-info"; } + ]; + } + { + name = "Media"; + icon = "fa fa-headphones"; + items = [ + { + title = "Mediaplayer"; + description = "Jellyfin"; + icon = "favicon"; + url = "https://jellyfin.odie.home.arpa"; + } + { + title = "Filme"; + description = "Radarr"; + icon = "favicon"; + url = "https://radarr.odie.home.arpa"; + } + { + title = "Serien"; + description = "Sonarr"; + icon = "favicon"; + url = "https://sonarr.odie.home.arpa"; + } + { + title = "Indexer"; + description = "Prowlarr"; + icon = "favicon"; + url = "https://prowlarr.odie.home.arpa"; + } + ]; + } + ]; + }; }; } diff --git a/overlays/azerothcore.nix b/overlays/azerothcore.nix new file mode 100644 index 0000000..094c227 --- /dev/null +++ b/overlays/azerothcore.nix @@ -0,0 +1,28 @@ +final: prev: { + azerothcore = final.callPackage ../pkgs/azerothcore { }; + azerothcore-npcbots = final.callPackage ../pkgs/azerothcore-npcbots { }; + azerothcore-data = final.callPackage ../pkgs/azerothcore-data { }; + ccacheWrapper = prev.ccacheWrapper.override { + extraConfig = '' + export CCACHE_COMPRESS=1 + export CCACHE_DIR="/var/cache/ccache" + export CCACHE_UMASK=007 + if [ ! -d "$CCACHE_DIR" ]; then + echo "=====" + echo "Directory '$CCACHE_DIR' does not exist" + echo "Please create it with:" + echo " sudo mkdir -m0770 '$CCACHE_DIR'" + echo " sudo chown root:nixbld '$CCACHE_DIR'" + echo "=====" + exit 1 + fi + if [ ! -w "$CCACHE_DIR" ]; then + echo "=====" + echo "Directory '$CCACHE_DIR' is not accessible for user $(whoami)" + echo "Please verify its access permissions" + echo "=====" + exit 1 + fi + ''; + }; +} diff --git a/overlays/default.nix b/overlays/default.nix index 431e822..fad6372 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -1,6 +1,7 @@ { inputs, ... }: [ #(import ./neorg.nix { inherit inputs; }) (import ./kodi.nix { }) + (import ./azerothcore.nix) inputs.neovim-nightly-overlay.overlays.default inputs.neorg-overlay.overlays.default inputs.nixvim.overlays.default diff --git a/pkgs/azerothcore-data/default.nix b/pkgs/azerothcore-data/default.nix new file mode 100644 index 0000000..f96ee7a --- /dev/null +++ b/pkgs/azerothcore-data/default.nix @@ -0,0 +1,34 @@ +{ lib +, stdenv +, fetchzip +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "azerothcore-data"; + version = "16"; + + src = fetchzip { + url = "https://gaja.cloud/s/EZefQZ8rNBaB5AL/download?path=%2F&files=AzerothCore-Data-deDE.zip"; + hash = "sha256-O8b4c15RvEe6dKW5a+u17IoNv42KX9qVIjlwDLxXO3k="; + stripRoot = false; + }; + + dontPatch = true; + dontConfigure = true; + dontBuild = true; + dontFixup = true; + + installPhase = '' + mkdir -p $out + cp -a . $out + ''; + + meta = with lib; { + description = "Dbc, Map and some MPQ to use in your editors/viewer tools (EN-US)"; + homepage = "https://wowgaming.github.io/"; + changelog = "https://github.com/wowgaming/client-data/releases/tag/v${finalAttrs.version}"; + platforms = platforms.all; + license = licenses.unfree; + maintainers = with maintainers; [ gaelreyrol ]; + }; +}) diff --git a/pkgs/azerothcore-npcbots/default.nix b/pkgs/azerothcore-npcbots/default.nix new file mode 100644 index 0000000..65ca527 --- /dev/null +++ b/pkgs/azerothcore-npcbots/default.nix @@ -0,0 +1,97 @@ +{ lib +, fetchFromGitHub +, cmake +, pkg-config +, mysql80 +, git +, boost +, openssl +, zlib +, readline +, bzip2 +, rsync +, stdenv +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "azerothcore-wotlk-npcbots"; + version = "unstable"; + + srcs = [ + (fetchFromGitHub { + owner = "trickerer"; + name = "azerothcore"; + repo = "AzerothCore-wotlk-with-NPCBots"; + rev = "952304c1157eb5039f557f1c7535f001054757c6"; + hash = "sha256-M/jmDHgdo/slf4b18/gLW1dFETIbLI36EiFj+mmf/io="; + }) + (fetchFromGitHub { + owner = "azerothcore"; + repo = "mod-ah-bot"; + name = "mod-ah-bot"; + rev = "60d80b8673abb722178d9bd64349d0ff4765de98"; + hash = "sha256-EkQhR64/pAhYDjsSlwRs/4uN3WfbZNbu2czwht2u8x8="; + }) + ]; + + sourceRoot = "azerothcore"; + + postUnpack = '' + cp -a mod-ah-bot azerothcore/modules/mod-ah-bot + ''; + + nativeBuildInputs = [ + cmake + pkg-config + ]; + + buildInputs = [ + rsync + mysql80 + git + boost + openssl + zlib + readline + bzip2 + ]; + + enableParallelBuilding = true; + + cmakeFlags = [ + "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}" + "-DTOOLS_BUILD=all" + "-DSCRIPTS=static" + "-DMODULES=static" + ]; + + cmakeBuildType = "Release"; + + outputs = [ "out" "srcDir" ]; + + #dontPatch = true; + #dontConfigure = true; + #dontBuild = true; + #dontFixup = true; + + installPhase = '' + runHook preInstall + + ls .. + rsync -a --exclude=build ../ $srcDir + + mkdir -p $out + make install + + runHook postInstall + ''; + + meta = with lib; { + description = "Complete Open Source and Modular solution for MMO"; + homepage = "http://www.azerothcore.org/"; + license = licenses.lgpl3; + platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ gaelreyrol ]; + }; +}) + diff --git a/pkgs/azerothcore/default.nix b/pkgs/azerothcore/default.nix new file mode 100644 index 0000000..f084943 --- /dev/null +++ b/pkgs/azerothcore/default.nix @@ -0,0 +1,74 @@ +{ lib +, ccacheStdenv +, fetchFromGitHub +, cmake +, pkg-config +, mysql80 +, git +, boost +, openssl +, zlib +, readline +, bzip2 +, breakpointHook +}: + +ccacheStdenv.mkDerivation (finalAttrs: { + pname = "server-wotlk"; + version = "unstable-2023-07"; + + src = fetchFromGitHub { + owner = "azerothcore"; + repo = "azerothcore-wotlk"; + rev = "85847638899cb4a96c42d16a00fa0b0736442381"; + hash = "sha256-n5lHNbVYQGVHZLXrtzoQ+5j1c4906tR/CtcuobH3os4="; + }; + + nativeBuildInputs = [ + cmake + pkg-config + breakpointHook + ]; + + buildInputs = [ + mysql80 + git + boost + openssl + zlib + readline + bzip2 + ]; + + enableParallelBuilding = true; + + cmakeFlags = [ + "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}" + "-DTOOLS_BUILD=all" + "-DSCRIPTS=static" + "-DMODULES=static" + ]; + + cmakeBuildType = "Release"; + + installPhase = '' + runHook preInstall + + ls -la + + mkdir -p $out/share/sql + cp -r ../data/sql $out/share/sql + make install + + runHook postInstall + ''; + + meta = with lib; { + description = "Complete Open Source and Modular solution for MMO"; + homepage = "http://www.azerothcore.org/"; + license = licenses.lgpl3; + platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ gaelreyrol ]; + }; +}) + diff --git a/profiles/nixos/wsl-dev/configuration.nix b/profiles/nixos/wsl-dev/configuration.nix index 31cf62c..9cdf991 100644 --- a/profiles/nixos/wsl-dev/configuration.nix +++ b/profiles/nixos/wsl-dev/configuration.nix @@ -1,7 +1,10 @@ { outputs , vars +, lib +, pkgs +, config , ... -}: { +}: with lib; { imports = [ outputs.nixosModules.home-manager outputs.nixosModules.base @@ -17,6 +20,8 @@ inherit (vars) hostName domain; }; + nix.settings.extra-sandbox-paths = [ config.programs.ccache.cacheDir ]; + programs.nix-ld.enable = true; services = { @@ -31,8 +36,54 @@ searx = { enable = true; }; - minecraft-servers.enable = true; + minecraft-servers.enable = mkForce false; + dashy.enable = true; + azerothcore = { + enable = true; + serverPackage = pkgs.azerothcore-npcbots; + npcbots.botgiver.filterRaces = 1; + npcbots.classes = { + warrior = true; + paladin = true; + hunter = true; + rogue = true; + priest = true; + deathKnight = true; + shaman = true; + mage = true; + warlock = true; + druid = true; + blademaster = false; + obsidianDestroyer = false; + archmage = false; + dreadlord = false; + spellBreaker = false; + darkRanger = false; + necromancer = false; + seaWitch = false; + cryptLord = false; + }; + ahbot = { + EnableSeller = 0; + EnableBuyer = 0; + Account = 0; + GUID = 0; + ItemsPerCycle = 2000; + ElapsingTimeClass = 1; + VendorItems = 1; + VendorTradeGoods = 1; + LootItems = 1; + LootTradeGoods = 1; + OtherItems = 1; + OtherTradeGoods = 1; + ProfessionItems = 1; + }; + }; }; + environment.systemPackages = with pkgs; [ + azerothcore-npcbots + ]; + system.stateVersion = "23.11"; }