{
  lib,
  config,
  pkgs,
  ...
}: let
  inherit (lib) mkEnableOption mkIf;
  cfg = config.horseman.apps.terminal.zsh;
in {
  options = {
    horseman.apps.terminal.zsh = {
      enable = mkEnableOption "The ZSH shell and plugins for it";
    };
  };

  config = mkIf cfg.enable {
    users.defaultUserShell = pkgs.zsh;
    environment.shells = with pkgs; [zsh];

    horseman.dots = {
      warprc.enable = true;
    };

    programs.zsh = {
      enable = true;
      enableCompletion = true;

      histSize = 10000;

      shellAliases = {
        rebuild = "function _rebuild(){sudo nixos-rebuild switch --flake \"$@\" && nix fmt *}; _rebuild";
        update = "sudo nix flake update && git commit flake.lock -m 'Update flake.lock: $(date +%y-%m-%d)' && rebuild";
        compose = "sudo docker compose";
        wolpc = "wakeonlan D8:5E:D3:A8:B1:0A";
        capture-config = "nix run github:pjones/plasma-manager > ~/nix-config/modules/wm/plasma/default.nix";
        reboot-to-windows = "sudo efibootmgr -n 0000";
        mkdir = "mkdir -p";
        zip = "zip -r";
        cat = "bat";
        py = "python3";

        l = "eza -lA --icons always --group-directories-first --git";
      };

      ohMyZsh = {
        enable = true;
        plugins = [
          "zsh-interactive-cd"
          "git-auto-fetch"
          "wd"
        ];
        theme = "theme";
        custom = "/home/horseman/nix-config/config/zsh";
      };

      shellInit = "eval \"$(direnv hook zsh)\"";
    };
  };
}
