mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-20 12:42:24 +00:00
nixos/ananicy: init
This commit is contained in:
parent
3914c5dba6
commit
8743e81cd3
|
@ -449,6 +449,16 @@
|
|||
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">
|
||||
|
|
|
@ -133,6 +133,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- [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.
|
||||
|
|
|
@ -485,6 +485,7 @@
|
|||
./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
Normal file
107
nixos/modules/services/misc/ananicy.nix
Normal file
|
@ -0,0 +1,107 @@
|
|||
{ 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 ];
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue