about summary refs log tree commit diff
diff options
context:
space:
mode:
authorArtturi <Artturin@artturin.com>2023-07-16 00:43:45 +0300
committerGitHub <noreply@github.com>2023-07-16 00:43:45 +0300
commitd1abbbd9b694c67ef6fbb249c89c590e8f79c5b0 (patch)
tree9c015a238f849b44edc07ad963eb4c84800f8030
parent3afe31e0a0e5342673c7d61be33c2acfc34ff5be (diff)
parent4cf80061735a4cb12d87fd8c5c9e90d1ecc3f040 (diff)
Merge pull request #242309 from Artturin/ananicyextraxadd
-rw-r--r--nixos/doc/manual/release-notes/rl-2311.section.md2
-rw-r--r--nixos/modules/services/misc/ananicy.nix67
-rw-r--r--pkgs/misc/ananicy-rules-cachyos/default.nix32
-rw-r--r--pkgs/misc/ananicy/default.nix12
-rw-r--r--pkgs/top-level/all-packages.nix2
5 files changed, 93 insertions, 22 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md
index 587a54d736bc3..abcfe1efee8d8 100644
--- a/nixos/doc/manual/release-notes/rl-2311.section.md
+++ b/nixos/doc/manual/release-notes/rl-2311.section.md
@@ -46,6 +46,8 @@
 
 - `getent` has been moved from `glibc`'s `bin` output to its own dedicated output, reducing closure size for many dependents. Dependents using the `getent` alias should not be affected; others should move from using `glibc.bin` or `getBin glibc` to `getent` (which also improves compatibility with non-glibc platforms).
 
+- The `services.ananicy.extraRules` option now has the type of `listOf attrs` instead of `string`.
+
 - `etcd` has been updated to 3.5, you will want to read the [3.3 to 3.4](https://etcd.io/docs/v3.5/upgrades/upgrade_3_4/) and [3.4 to 3.5](https://etcd.io/docs/v3.5/upgrades/upgrade_3_5/) upgrade guides
 
 - `consul` has been updated to `1.16.0`. See the [release note](https://github.com/hashicorp/consul/releases/tag/v1.16.0) for more details. Once a new Consul version has started and upgraded its data directory, it generally cannot be downgraded to the previous version.
diff --git a/nixos/modules/services/misc/ananicy.nix b/nixos/modules/services/misc/ananicy.nix
index d2287fba6afc4..bc1b28efc0baf 100644
--- a/nixos/modules/services/misc/ananicy.nix
+++ b/nixos/modules/services/misc/ananicy.nix
@@ -5,7 +5,9 @@ with lib;
 let
   cfg = config.services.ananicy;
   configFile = pkgs.writeText "ananicy.conf" (generators.toKeyValue { } cfg.settings);
-  extraRules = pkgs.writeText "extraRules" cfg.extraRules;
+  extraRules = pkgs.writeText "extraRules" (concatMapStringsSep "\n" (l: builtins.toJSON l) cfg.extraRules);
+  extraTypes = pkgs.writeText "extraTypes" (concatMapStringsSep "\n" (l: builtins.toJSON l) cfg.extraTypes);
+  extraCgroups = pkgs.writeText "extraCgroups" (concatMapStringsSep "\n" (l: builtins.toJSON l) cfg.extraCgroups);
   servicename = if ((lib.getName cfg.package) == (lib.getName pkgs.ananicy-cpp)) then "ananicy-cpp" else "ananicy";
 in
 {
@@ -23,6 +25,16 @@ in
         '';
       };
 
+      rulesProvider = mkOption {
+        type = types.package;
+        default = pkgs.ananicy;
+        defaultText = literalExpression "pkgs.ananicy";
+        example = literalExpression "pkgs.ananicy-cpp";
+        description = lib.mdDoc ''
+          Which package to copy default rules,types,cgroups from.
+        '';
+      };
+
       settings = mkOption {
         type = with types; attrsOf (oneOf [ int bool str ]);
         default = { };
@@ -35,20 +47,40 @@ in
       };
 
       extraRules = mkOption {
-        type = types.str;
-        default = "";
+        type = with types; listOf attrs;
+        default = [ ];
         description = lib.mdDoc ''
-          Extra rules in json format on separate lines. See:
+          Rules to write in 'nixRules.rules'. See:
           <https://github.com/Nefelim4ag/Ananicy#configuration>
           <https://gitlab.com/ananicy-cpp/ananicy-cpp/#global-configuration>
         '';
-        example = literalExpression ''
-          '''
-            { "name": "eog", "type": "Image-View" }
-            { "name": "fdupes", "type": "BG_CPUIO" }
-          '''
+        example = [
+          { name = "eog"; type = "Image-Viewer"; }
+          { name = "fdupes"; type = "BG_CPUIO"; }
+        ];
+      };
+      extraTypes = mkOption {
+        type = with types; listOf attrs;
+        default = [ ];
+        description = lib.mdDoc ''
+          Types to write in 'nixTypes.types'. See:
+          <https://gitlab.com/ananicy-cpp/ananicy-cpp/#types>
         '';
-
+        example = [
+          { type = "my_type"; nice = 19; other_parameter = "value"; }
+          { type = "compiler"; nice = 19; sched = "batch"; ioclass = "idle"; }
+        ];
+      };
+      extraCgroups = mkOption {
+        type = with types; listOf attrs;
+        default = [ ];
+        description = lib.mdDoc ''
+          Cgroups to write in 'nixCgroups.cgroups'. See:
+          <https://gitlab.com/ananicy-cpp/ananicy-cpp/#cgroups>
+        '';
+        example = [
+          { cgroup = "cpu80"; CPUQuota = 80; }
+        ];
       };
     };
   };
@@ -59,10 +91,18 @@ in
       etc."ananicy.d".source = pkgs.runCommandLocal "ananicyfiles" { } ''
         mkdir -p $out
         # ananicy-cpp does not include rules or settings on purpose
-        cp -r ${pkgs.ananicy}/etc/ananicy.d/* $out
-        rm $out/ananicy.conf
+        if [[ -d "${cfg.rulesProvider}/etc/ananicy.d/00-default" ]]; then
+          cp -r ${cfg.rulesProvider}/etc/ananicy.d/* $out
+        else
+          cp -r ${cfg.rulesProvider}/* $out
+        fi
+
+        # configured through .setings
+        rm -f $out/ananicy.conf
         cp ${configFile} $out/ananicy.conf
-        ${optionalString (cfg.extraRules != "") "cp ${extraRules} $out/nixRules.rules"}
+        ${optionalString (cfg.extraRules != [ ]) "cp ${extraRules} $out/nixRules.rules"}
+        ${optionalString (cfg.extraTypes != [ ]) "cp ${extraTypes} $out/nixTypes.types"}
+        ${optionalString (cfg.extraCgroups != [ ]) "cp ${extraCgroups} $out/nixCgroups.cgroups"}
       '';
     };
 
@@ -85,6 +125,7 @@ in
         # https://gitlab.com/ananicy-cpp/ananicy-cpp/-/blob/master/src/config.cpp#L12
         loglevel = mkOD "warn"; # default is info but its spammy
         cgroup_realtime_workaround = mkOD config.systemd.enableUnifiedCgroupHierarchy;
+        log_applied_rule = mkOD false;
       } else {
         # https://github.com/Nefelim4ag/Ananicy/blob/master/ananicy.d/ananicy.conf
         check_disks_schedulers = mkOD true;
diff --git a/pkgs/misc/ananicy-rules-cachyos/default.nix b/pkgs/misc/ananicy-rules-cachyos/default.nix
new file mode 100644
index 0000000000000..575f582d2c9fc
--- /dev/null
+++ b/pkgs/misc/ananicy-rules-cachyos/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ananicy";
+  version = "unstable-2023-06-28";
+
+  src = fetchFromGitHub {
+    owner = "CachyOS";
+    repo = "ananicy-rules";
+    rev = "b2b4342d769bc3c6abc4ce77bd53d6ca06d659e5";
+    sha256 = "sha256-TGX7GlfSeKu68mVM71/kdJH31gzMmhzCAqA390aEq8U=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preBuild
+    mkdir -p $out
+    cp -r * $out
+    rm $out/README.md
+    runHook postBuild
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/CachyOS/ananicy-rules";
+    description = "ananicy-cpp-rules for CachyOS ";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/pkgs/misc/ananicy/default.nix b/pkgs/misc/ananicy/default.nix
index 3c2392df731d5..62daaad2c6048 100644
--- a/pkgs/misc/ananicy/default.nix
+++ b/pkgs/misc/ananicy/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "ananicy";
-  version = "unstable-2021-11-05";
+  version = "unstable-2023-03-21";
 
   src = fetchFromGitHub {
     owner = "nefelim4ag";
     repo = "ananicy";
-    rev = "b8968e9b32b0e4e6a01dc2314e43de8fee9da691";
-    sha256 = "sha256-tlPY81xdUpZrDYdApXooZ0Mst0n7ARVHyUrmymqg0rk=";
+    rev = "1e2cc9a62ba3b6793e59da66aa0039f89e1ad49f";
+    sha256 = "sha256-nHp47eYI36edka+cBMzayPHEflAzpgLx0VehhsyYpwI=";
   };
 
   patches = [
@@ -20,12 +20,6 @@ stdenv.mkDerivation rec {
       # only used for debian packaging. lets exclude it so the patch applies even when that file is changed
       excludes = [ "package.sh" ];
     })
-    # https://github.com/Nefelim4ag/Ananicy/pull/439
-    # fix syntax error
-    (fetchpatch {
-      url = "https://github.com/Nefelim4ag/Ananicy/commit/0f8b809298ccfd88d0e2ab952d6e4131865246da.patch";
-      sha256 = "sha256-PWE4F0G97gecgc9HnG7ScA78+QVc8u8aF9u74qVChX0=";
-    })
   ];
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index b6a2f8a2203bf..f193bb8a6afdf 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -28550,6 +28550,8 @@ with pkgs;
 
   ananicy-cpp = callPackage ../misc/ananicy-cpp { };
 
+  ananicy-rules-cachyos = callPackage ../misc/ananicy-rules-cachyos { };
+
   andagii = callPackage ../data/fonts/andagii { };
 
   andika = callPackage ../data/fonts/andika { };