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

with lib;
with lib.my;
let cfg = config.modules.desktop.htop;
in {
  options.modules.desktop.htop = { enable = mkBoolOpt false; };
  config = mkIf cfg.enable {
    home-manager.users.${config.user.name} = { config, ... }: {
      programs.htop = {
        enable = true;
        package = pkgs.htop-vim;
        settings = {
          hide_userland_threads = true;
          highlight_base_name = true;
          vim_mode = true;
          fields = with config.lib.htop.fields; [
            PID
            USER
            M_RESIDENT
            M_SHARE
            STATE
            PERCENT_CPU
            PERCENT_MEM
            IO_RATE
            TIME
            COMM
          ];
        } // (with config.lib.htop;
          leftMeters [
            (bar "LeftCPUs2")
            (bar "CPU")
            (bar "Memory")
            (bar "Swap")
          ]) // (with config.lib.htop;
            rightMeters [
              (bar "RightCPUs2")
              (text "Tasks")
              (text "LoadAverage")
              (text "Uptime")
            ]);
      };
    };
  };
}
