let
  shellToolsBase =
    {
      pkgs,
      lib,
      config,
      ...
    }:
    let
      inherit (lib.lists) singleton;
      inherit (lib.meta) getExe;
      inherit (config) theme;

      bat = getExe pkgs.bat;
      less = getExe pkgs.less;
      pager = "${bat} --plain --theme ${theme.bat}";
    in
    {
      hjem.extraModules = singleton {
        packages = [
          pkgs.bat
          pkgs.btop
          pkgs.eza
          pkgs.fastfetch
          pkgs.fd
          pkgs.fzf
          pkgs.jq
          pkgs.less
          pkgs.ripgrep
          pkgs.vivid
        ];

        environment.sessionVariables = {
          MANPAGER = pager;
          PAGER = pager;
          BAT_PAGER = "${less} --quit-if-one-screen --RAW-CONTROL-CHARS";
          RIPGREP_CONFIG_PATH = "%h/.config/ripgrep/ripgreprc";
        };

        xdg.config.files."ripgrep/ripgreprc".text = ''
          --line-number
          --smart-case
        '';
      };
    };

in
{
  flake.modules.nixos.shell-tools = shellToolsBase;
  flake.modules.darwin.shell-tools = shellToolsBase;
}