{ config, lib, pkgs, ... }:

with lib;

{
  config = with config.lib.htop; {
    programs.htop.enable = true;
    programs.htop.settings = {
      header_layout = "two_50_50";
      column_meters_0 = [ "AllCPUs2" "Memory" "Swap" "Zram" ];
      column_meters_modes_0 = [ modes.Bar modes.Bar modes.Bar modes.Text ];
      column_meters_1 = [ "Tasks" "LoadAverage" "Uptime" "Systemd" ];
      column_meters_modes_1 = [ modes.Text modes.Text modes.Text modes.Text ];
    };

    test.stubs.htop = { };

    # Test that the 'fields' key is written in addition to the customized
    # settings or htop won't read the options.
    nmt.script = let
      fields = if pkgs.stdenv.hostPlatform.isDarwin then
        "0 48 17 18 38 39 2 46 47 49 1"
      else
        "0 48 17 18 38 39 40 2 46 47 49 1";
    in ''
      htoprc=home-files/.config/htop/htoprc
      assertFileExists $htoprc
      assertFileContent $htoprc \
        ${
          builtins.toFile "htoprc-expected" ''
            header_layout=two_50_50
            column_meters_0=AllCPUs2 Memory Swap Zram
            column_meters_1=Tasks LoadAverage Uptime Systemd
            column_meters_modes_0=1 1 1 2
            column_meters_modes_1=2 2 2 2
            fields=${fields}
          ''
        }
    '';
  };

}
