diff --git a/modules/services/slurm.nix b/modules/services/slurm.nix index f62932b6..9c197bde 100644 --- a/modules/services/slurm.nix +++ b/modules/services/slurm.nix @@ -249,7 +249,21 @@ inputs: }; nixos = { - packages.packages._packages = [ inputs.pkgs.localPackages.sbatch-tui ]; + packages.packages._packages = [(inputs.pkgs.localPackages.sbatch-tui.override + { + sbatchConfig = inputs.pkgs.writeText "sbatch.yaml" (builtins.toJSON + { + GpuIds = slurm.tui.gpuIds; + GpuPartition = slurm.tui.gpuPartition; + CpuQueues = builtins.map + (queue: + [ + queue.name + { CpuMpiThreads = queue.mpiThreads; CpuOpenmpThreads = queue.openmpThreads; MemoryGB = queue.memoryGB; } + ]) + slurm.tui.cpuQueues; + }); + })]; user.sharedModules = [{ home.packages = [ (inputs.pkgs.writeShellScriptBin "sbatch" @@ -257,18 +271,6 @@ inputs: ];}]; services.mariadb = { enable = true; instances.slurm = {}; }; }; - environment.etc."sbatch-tui.yaml".text = builtins.toJSON - { - GpuIds = slurm.tui.gpuIds; - GpuPartition = slurm.tui.gpuPartition; - CpuQueues = builtins.map - (queue: - [ - queue.name - { CpuMpiThreads = queue.mpiThreads; CpuOpenmpThreads = queue.openmpThreads; MemoryGB = queue.memoryGB; } - ]) - slurm.tui.cpuQueues; - }; networking.firewall = let config = inputs.lib.mkIf slurm.setupFirewall [ 6817 ]; in { allowedTCPPorts = config; allowedUDPPorts = config; }; diff --git a/packages/sbatch-tui/CMakeLists.txt b/packages/sbatch-tui/CMakeLists.txt index b201f6ff..2b94790a 100644 --- a/packages/sbatch-tui/CMakeLists.txt +++ b/packages/sbatch-tui/CMakeLists.txt @@ -15,6 +15,9 @@ find_package(biu REQUIRED) add_executable(sbatch-tui src/main.cpp) target_compile_features(sbatch-tui PUBLIC cxx_std_23) target_link_libraries(sbatch-tui PRIVATE ftxui::screen ftxui::dom ftxui::component biu::biu) +if(SBATCH_CONFIG) + target_compile_definitions(sbatch-tui PRIVATE SBATCH_CONFIG="${SBATCH_CONFIG}") +endif() install(TARGETS sbatch-tui RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/packages/sbatch-tui/default.nix b/packages/sbatch-tui/default.nix index f5c839d5..70226eb2 100644 --- a/packages/sbatch-tui/default.nix +++ b/packages/sbatch-tui/default.nix @@ -1,7 +1,8 @@ -{ stdenv, cmake, pkg-config, ftxui, biu }: stdenv.mkDerivation +{ lib, stdenv, cmake, pkg-config, sbatchConfig ? null, ftxui, biu }: stdenv.mkDerivation { name = "sbatch-tui"; src = ./.; buildInputs = [ ftxui biu ]; nativeBuildInputs = [ cmake pkg-config ]; + cmakeFlags = lib.optional (sbatchConfig != null) [ "-DSBATCH_CONFIG=${sbatchConfig}" ]; } diff --git a/packages/sbatch-tui/src/main.cpp b/packages/sbatch-tui/src/main.cpp index 8a287649..64b425b1 100644 --- a/packages/sbatch-tui/src/main.cpp +++ b/packages/sbatch-tui/src/main.cpp @@ -5,6 +5,10 @@ # include # include +# ifndef SBATCH_CONFIG +# define SBATCH_CONFIG "./sbatch-tui.yaml" +# endif + int main() { using namespace biu::literals; @@ -17,7 +21,7 @@ int main() std::optional> GpuIds; std::string GpuPartition; }; - auto device = YAML::LoadFile("/etc/sbatch-tui.yaml").as(); + auto device = YAML::LoadFile(SBATCH_CONFIG).as(); // 需要绑定到界面上的变量 struct