bottom: add module

Bottom is a cross-platform graphical process/system monitor with a
customizable interface and a multitude of features.

Two unit tests were added validate the module behavior for an empty
configuration and the example configuration.
This commit is contained in:
polykernel 2021-09-12 21:09:31 -04:00 committed by Robert Helgesson
parent 2cfea84e6f
commit 4b964d2f7b
No known key found for this signature in database
GPG Key ID: 36BDAA14C2797E89
8 changed files with 139 additions and 0 deletions

3
.github/CODEOWNERS vendored
View File

@ -58,6 +58,9 @@
/modules/programs/beets.nix @rycee
/modules/programs/bottom.nix @polykernel
/tests/modules/programs/bottom @polykernel
/modules/programs/broot.nix @aheaume
/modules/programs/dircolors.nix @JustinLovinger

View File

@ -2196,6 +2196,13 @@ in
A new module is available: 'services.betterlockscreen'.
'';
}
{
time = "2021-09-14T21:31:03+00:00";
message = ''
A new module is available: 'programs.bottom'.
'';
}
];
};
}

View File

@ -50,6 +50,7 @@ let
./programs/bash.nix
./programs/bat.nix
./programs/beets.nix
./programs/bottom.nix
./programs/broot.nix
./programs/browserpass.nix
./programs/chromium.nix

View File

@ -0,0 +1,66 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.bottom;
tomlFormat = pkgs.formats.toml { };
configDir = if pkgs.stdenv.isDarwin then
"Library/Application Support"
else
config.xdg.configHome;
in {
options = {
programs.bottom = {
enable = mkEnableOption ''
bottom, a cross-platform graphical process/system monitor with a
customizable interface'';
package = mkOption {
type = types.package;
default = pkgs.bottom;
defaultText = literalExample "pkgs.bottom";
description = "Package providing <command>bottom</command>.";
};
settings = mkOption {
type = tomlFormat.type;
default = { };
description = ''
Configuration written to
<filename>$XDG_CONFIG_HOME/bottom/bottom.toml</filename> on Linux or
<filename>$HOME/Library/Application Support/bottom/bottom.toml</filename> on Darwin.
</para><para>
See <link xlink:href="https://github.com/ClementTsang/bottom/blob/master/sample_configs/default_config.toml"/>
for the default configuration.
'';
example = literalExample ''
{
flags = {
avg_cpu = true;
temperature_type = "c";
};
colors = {
low_battery_color = "red";
};
}
'';
};
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
home.file."${configDir}/bottom/bottom.toml" = mkIf (cfg.settings != { }) {
source = tomlFormat.generate "bottom.toml" cfg.settings;
};
};
meta.maintainers = [ maintainers.polykernel ];
}

View File

@ -46,6 +46,7 @@ import nmt {
./modules/programs/autojump
./modules/programs/bash
./modules/programs/bat
./modules/programs/bottom
./modules/programs/broot
./modules/programs/browserpass
./modules/programs/dircolors

View File

@ -0,0 +1,4 @@
{
bottom-empty-settings = ./empty-settings.nix;
bottom-example-settings = ./example-settings.nix;
}

View File

@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
with lib;
{
config = {
programs.bottom = {
enable = true;
package = pkgs.writeScriptBin "dummy" "";
};
nmt.script = ''
assertPathNotExists home-files/.config/bottom
'';
};
}

View File

@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:
with lib;
{
config = {
programs.bottom = {
enable = true;
package = pkgs.writeShellScriptBin "dummy" "";
settings = {
flags = {
avg_cpu = true;
temperature_type = "c";
};
colors = { low_battery_color = "red"; };
};
};
nmt.script = let
configDir = if pkgs.stdenv.isDarwin then
"home-files/Library/Application Support"
else
"home-files/.config";
in ''
assertFileContent \
"${configDir}/bottom/bottom.toml" \
${
builtins.toFile "example-settings-expected.toml" ''
[colors]
low_battery_color = "red"
[flags]
avg_cpu = true
temperature_type = "c"
''
}
'';
};
}