From a425421e28e3a482db3730aa673ad82f6f0eb75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Tue, 21 Sep 2021 16:07:35 +0200 Subject: [PATCH] nixos/htop: add module This module allows setting global configuration for htop in /etc/htoprc, for example to disable showing userland threads by default Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> Co-authored-by: Aaron Andersen --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/htop.nix | 58 +++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 nixos/modules/programs/htop.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index d24f98efb7d3..60bf5afc69b1 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -154,6 +154,7 @@ ./programs/gnupg.nix ./programs/gphoto2.nix ./programs/hamster.nix + ./programs/htop.nix ./programs/iftop.nix ./programs/iotop.nix ./programs/java.nix diff --git a/nixos/modules/programs/htop.nix b/nixos/modules/programs/htop.nix new file mode 100644 index 000000000000..5c197838e47c --- /dev/null +++ b/nixos/modules/programs/htop.nix @@ -0,0 +1,58 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.htop; + + fmt = value: + if isList value then concatStringsSep " " (map fmt value) else + if isString value then value else + if isBool value || isInt value then toString value else + throw "Unrecognized type ${typeOf value} in htop settings"; + +in + +{ + + options.programs.htop = { + package = mkOption { + type = types.package; + default = pkgs.htop; + defaultText = "pkgs.htop"; + description = '' + The htop package that should be used. + ''; + }; + + enable = mkEnableOption "htop process monitor"; + + settings = mkOption { + type = with types; attrsOf (oneOf [ str int bool (listOf (oneOf [ str int bool ])) ]); + default = {}; + example = { + hide_kernel_threads = true; + hide_userland_threads = true; + }; + description = '' + Extra global default configuration for htop + which is read on first startup only. + Htop subsequently uses ~/.config/htop/htoprc + as configuration source. + ''; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = [ + cfg.package + ]; + + environment.etc."htoprc".text = '' + # Global htop configuration + # To change set: programs.htop.settings.KEY = VALUE; + '' + concatStringsSep "\n" (mapAttrsToList (key: value: "${key}=${fmt value}") cfg.settings); + }; + +}