# Here are the base packages for my shell workflow.
{ config, options, lib, pkgs, ... }:

with lib; {
  options.modules.shell.base = {
    enable = mkOption {
      type = types.bool;
      default = false;
    };
  };

  config = mkIf config.modules.shell.base.enable {
    my.packages = with pkgs; [
      aria2 # The sequel to aria(1).
      aspell # Hunt down a spelling bee champion to come to your shell.
      bat # cat(1) with wings.
      buku # A developer-oriented browser-independent bookmark manager.
      exa # ls(1) after an exodus.
      fd # find(1) after a cognitive behavioral therapy.
      fzf # A fuzzy finder that enables fuzzy finding not furry finding, a common misconception.
      gopass # The improved version of Password Store which is a password manager for hipsters.
      gotop # A sysadmin's best friend that just happens to be a dashboard.
      graphviz # The biz central for graphical flowcharts.
      hexyl # Binary viewer with a cool name on the command-line.
      hledger # Do your accountancy thing ON THE COMMAND LINE, sure why not!
      httpie # Want a piece of the HTTP pie.
      jq # A command-line interface for parsing JSON.
      lazygit # For the lazy gits who cannot get good at Git.
      lazydocker # For the lazy gits who cannot get good at Docker.
      maim # A command-line interface for parsing screenshots.
      pup # A command-line interface for parsing HTML.
      (ripgrep.override { withPCRE2 = true; }) # Super-fast full-text searcher.
      (recoll.override {
        withGui = false;
      }) # Bring the search engine to the desktop!
      shellcheck # Check your shell if it's broken.
      sqlite # Battle-tested cute little database that can grow into an abomination of a data spaghetti.
      tree # I'm not a scammer, I swear.
      unzip # Unzip what? The world may never know.
      youtube-dl # A program that can be sued for false advertisement as you can download from other video sources.
      zoxide # Navigate the filesystem at the speed of sound.
    ];

    my.home = {
      programs = {
        bat = {
          enable = true;
          config = { theme = "base16"; };
        };
      };
    };

    my.zsh = {
      rc = ''
        eval "$(${pkgs.zoxide}/bin/zoxide init zsh)"
      '';
    };
  };
}