diff --git a/nixos/modules/services/scheduling/scx.nix b/nixos/modules/services/scheduling/scx.nix index 612c4995879a..aba3bddceb0b 100644 --- a/nixos/modules/services/scheduling/scx.nix +++ b/nixos/modules/services/scheduling/scx.nix @@ -37,31 +37,7 @@ in }; scheduler = lib.mkOption { - type = lib.types.enum [ - "scx_beerland" - "scx_bpfland" - "scx_chaos" - "scx_cosmos" - "scx_central" - "scx_flash" - "scx_flatcg" - "scx_lavd" - "scx_layered" - "scx_mitosis" - "scx_nest" - "scx_p2dq" - "scx_pair" - "scx_prev" - "scx_qmap" - "scx_rlfifo" - "scx_rustland" - "scx_rusty" - "scx_sdt" - "scx_simple" - "scx_tickless" - "scx_userland" - "scx_wd40" - ]; + type = lib.types.enum cfg.package.schedulers; default = "scx_rustland"; example = "scx_bpfland"; description = '' @@ -125,5 +101,6 @@ in meta = { inherit (pkgs.scx.full.meta) maintainers; + buildDocsInSandbox = false; }; } diff --git a/pkgs/os-specific/linux/scx/scx_cscheds.nix b/pkgs/os-specific/linux/scx/scx_cscheds.nix index 51f9431fbc27..b23d424d0070 100644 --- a/pkgs/os-specific/linux/scx/scx_cscheds.nix +++ b/pkgs/os-specific/linux/scx/scx_cscheds.nix @@ -11,7 +11,7 @@ libseccomp, }: -llvmPackages.stdenv.mkDerivation { +llvmPackages.stdenv.mkDerivation (finalAttrs: { pname = "scx_cscheds"; version = "0-unstable-2026-01-13"; @@ -48,10 +48,35 @@ llvmPackages.stdenv.mkDerivation { "zerocallusedregs" ]; - doCheck = true; + __structuredAttrs = true; + EXPECTED_SCHEDULERS = finalAttrs.passthru.schedulers; + + doInstallCheck = true; + installCheckPhase = '' + runHook preInstallCheck + + cd $out/bin + found=(scx_*) + if [[ "''${found[@]}" != "''${EXPECTED_SCHEDULERS[@]}" ]]; then + echo "List of available schedulers changed, expected: ''${EXPECTED_SCHEDULERS[@]}, found: ''${found[@]}" + exit 1 + fi + + runHook postInstallCheck + ''; passthru = { inherit (scx.rustscheds.passthru) tests; + schedulers = [ + "scx_central" + "scx_flatcg" + "scx_nest" + "scx_pair" + "scx_prev" + "scx_qmap" + "scx_simple" + "scx_userland" + ]; }; meta = scx.rustscheds.meta // { @@ -68,4 +93,4 @@ llvmPackages.stdenv.mkDerivation { ''; homepage = "https://github.com/sched-ext/scx/tree/main/scheds/c"; }; -} +}) diff --git a/pkgs/os-specific/linux/scx/scx_full.nix b/pkgs/os-specific/linux/scx/scx_full.nix index 8edcfbee8c70..e7134cf2792a 100644 --- a/pkgs/os-specific/linux/scx/scx_full.nix +++ b/pkgs/os-specific/linux/scx/scx_full.nix @@ -1,14 +1,19 @@ { - lib, + buildEnv, scx, }: -scx.cscheds.overrideAttrs (oldAttrs: { +buildEnv { pname = "scx_full"; - postInstall = (oldAttrs.postInstall or "") + '' - cp ${lib.getBin scx.rustscheds}/bin/* ${placeholder "out"}/bin/ - ''; + inherit (scx.rustscheds) version; - meta = oldAttrs.meta // { + paths = [ + scx.cscheds + scx.rustscheds + ]; + + passthru.schedulers = scx.cscheds.schedulers ++ scx.rustscheds.schedulers; + + meta = { description = "Sched-ext C and Rust userspace schedulers"; longDescription = '' This includes C based schedulers such as scx_central, scx_flatcg, @@ -22,4 +27,4 @@ scx.cscheds.overrideAttrs (oldAttrs: { ''; homepage = "https://github.com/sched-ext/scx"; }; -}) +} diff --git a/pkgs/os-specific/linux/scx/scx_rustscheds.nix b/pkgs/os-specific/linux/scx/scx_rustscheds.nix index 9814a2b02149..b866310550b4 100644 --- a/pkgs/os-specific/linux/scx/scx_rustscheds.nix +++ b/pkgs/os-specific/linux/scx/scx_rustscheds.nix @@ -55,8 +55,48 @@ rustPlatform.buildRustPackage (finalAttrs: { # which is not available in the sandbox doCheck = false; + # we don't need these + postInstall = '' + rm $out/bin/{scx_arena_selftests,vmlinux_docify,xtask} + ''; + + __structuredAttrs = true; + EXPECTED_SCHEDULERS = finalAttrs.passthru.schedulers; + + doInstallCheck = true; + installCheckPhase = '' + runHook preInstallCheck + + cd $out/bin + found=(scx_*) + if [[ "''${found[@]}" != "''${EXPECTED_SCHEDULERS[@]}" ]]; then + echo "List of available schedulers changed, expected: ''${EXPECTED_SCHEDULERS[@]}, found: ''${found[@]}" + exit 1 + fi + + runHook postInstallCheck + ''; + passthru.tests.basic = nixosTests.scx; passthru.updateScript = nix-update-script { }; + passthru.schedulers = [ + "scx_beerland" + "scx_bpfland" + "scx_cake" + "scx_chaos" + "scx_cosmos" + "scx_flash" + "scx_lavd" + "scx_layered" + "scx_mitosis" + "scx_p2dq" + "scx_pandemonium" + "scx_rlfifo" + "scx_rustland" + "scx_rusty" + "scx_tickless" + "scx_wd40" + ]; meta = { description = "Sched-ext Rust userspace schedulers";