nixos/ananicy: init

Artturin 8743e81c 3914c5db

Changed files
+120
nixos
doc
manual
from_md
release-notes
release-notes
modules
+10
nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
···
RandomX benchmark.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-21.11-incompatibilities">
···
RandomX benchmark.
</para>
</listitem>
+
<listitem>
+
<para>
+
Auto nice daemons
+
<link xlink:href="https://github.com/Nefelim4ag/Ananicy">ananicy</link>
+
and
+
<link xlink:href="https://gitlab.com/ananicy-cpp/ananicy-cpp/">ananicy-cpp</link>.
+
Available as
+
<link linkend="opt-services.ananicy.enable">services.ananicy</link>.
+
</para>
+
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-21.11-incompatibilities">
+2
nixos/doc/manual/release-notes/rl-2111.section.md
···
- [xmrig](https://github.com/xmrig/xmrig), a high performance, open source, cross platform RandomX, KawPow, CryptoNight and AstroBWT unified CPU/GPU miner and RandomX benchmark.
## Backward Incompatibilities {#sec-release-21.11-incompatibilities}
- The NixOS VM test framework, `pkgs.nixosTest`/`make-test-python.nix`, now requires detaching commands such as `succeed("foo &")` and `succeed("foo | xclip -i")` to close stdout.
···
- [xmrig](https://github.com/xmrig/xmrig), a high performance, open source, cross platform RandomX, KawPow, CryptoNight and AstroBWT unified CPU/GPU miner and RandomX benchmark.
+
- Auto nice daemons [ananicy](https://github.com/Nefelim4ag/Ananicy) and [ananicy-cpp](https://gitlab.com/ananicy-cpp/ananicy-cpp/). Available as [services.ananicy](#opt-services.ananicy.enable).
+
## Backward Incompatibilities {#sec-release-21.11-incompatibilities}
- The NixOS VM test framework, `pkgs.nixosTest`/`make-test-python.nix`, now requires detaching commands such as `succeed("foo &")` and `succeed("foo | xclip -i")` to close stdout.
+1
nixos/modules/module-list.nix
···
./services/mail/roundcube.nix
./services/mail/sympa.nix
./services/mail/nullmailer.nix
./services/misc/airsonic.nix
./services/misc/ankisyncd.nix
./services/misc/apache-kafka.nix
···
./services/mail/roundcube.nix
./services/mail/sympa.nix
./services/mail/nullmailer.nix
+
./services/misc/ananicy.nix
./services/misc/airsonic.nix
./services/misc/ankisyncd.nix
./services/misc/apache-kafka.nix
+107
nixos/modules/services/misc/ananicy.nix
···
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
let
+
cfg = config.services.ananicy;
+
configFile = pkgs.writeText "ananicy.conf" (generators.toKeyValue { } cfg.settings);
+
extraRules = pkgs.writeText "extraRules" cfg.extraRules;
+
servicename = if ((lib.getName cfg.package) == (lib.getName pkgs.ananicy-cpp)) then "ananicy-cpp" else "ananicy";
+
in
+
{
+
options = {
+
services.ananicy = {
+
enable = mkEnableOption "Ananicy, an auto nice daemon";
+
+
package = mkOption {
+
type = types.package;
+
default = pkgs.ananicy;
+
defaultText = literalExpression "pkgs.ananicy";
+
example = literalExpression "pkgs.ananicy-cpp";
+
description = ''
+
Which ananicy package to use.
+
'';
+
};
+
+
settings = mkOption {
+
type = with types; attrsOf (oneOf [ int bool str ]);
+
default = { };
+
example = {
+
apply_nice = false;
+
};
+
description = ''
+
See <link xlink:href="https://github.com/Nefelim4ag/Ananicy/blob/master/ananicy.d/ananicy.conf"/>
+
'';
+
};
+
+
extraRules = mkOption {
+
type = types.str;
+
default = "";
+
description = ''
+
Extra rules in json format on separate lines. See:
+
<link xlink:href="https://github.com/Nefelim4ag/Ananicy#configuration"/>
+
<link xlink:href="https://gitlab.com/ananicy-cpp/ananicy-cpp/#global-configuration"/>
+
'';
+
example = literalExpression ''
+
'''
+
{ "name": "eog", "type": "Image-View" }
+
{ "name": "fdupes", "type": "BG_CPUIO" }
+
'''
+
'';
+
+
};
+
};
+
};
+
+
config = mkIf cfg.enable {
+
environment = {
+
systemPackages = [ cfg.package ];
+
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
+
cp ${configFile} $out/ananicy.conf
+
${optionalString (cfg.extraRules != "") "cp ${extraRules} $out/nixRules.rules"}
+
'';
+
};
+
+
# ananicy and ananicy-cpp have different default settings
+
services.ananicy.settings =
+
let
+
mkOD = mkOptionDefault;
+
in
+
{
+
cgroup_load = mkOD true;
+
type_load = mkOD true;
+
rule_load = mkOD true;
+
apply_nice = mkOD true;
+
apply_ioclass = mkOD true;
+
apply_ionice = mkOD true;
+
apply_sched = mkOD true;
+
apply_oom_score_adj = mkOD true;
+
apply_cgroup = mkOD true;
+
} // (if ((lib.getName cfg.package) == (lib.getName pkgs.ananicy-cpp)) then {
+
# 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 true;
+
} else {
+
# https://github.com/Nefelim4ag/Ananicy/blob/master/ananicy.d/ananicy.conf
+
check_disks_schedulers = mkOD true;
+
check_freq = mkOD 5;
+
});
+
+
systemd = {
+
# https://gitlab.com/ananicy-cpp/ananicy-cpp/#cgroups applies to both ananicy and -cpp
+
enableUnifiedCgroupHierarchy = mkDefault false;
+
packages = [ cfg.package ];
+
services."${servicename}" = {
+
wantedBy = [ "default.target" ];
+
};
+
};
+
};
+
+
meta = {
+
maintainers = with maintainers; [ artturin ];
+
};
+
}