{
  config,
  pkgs,
  lib,
  ...
}: {
  programs = {
    starship.enableZshIntegration = true;
    fzf.enableZshIntegration = true;
    zoxide.enableZshIntegration = true;
    yazi.enableZshIntegration = true;
    eza.enableZshIntegration = true;
    direnv.enableZshIntegration = true;
    kitty.shellIntegration.enableZshIntegration = true;
    carapace.enableZshIntegration = false;
    zsh = {
      enable = true;
      enableCompletion = true;
      initExtra = lib.mkMerge [
        ''
          #have the menu highlight while we cycle through options
          zstyle ':completion:*' menu select
          #case insensitive completion
          zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
          #allow completion from midword
          setopt COMPLETE_IN_WORD
          #move cursor to end of word after completing
          setopt ALWAYS_TO_END
          #complete aliases as well
          setopt COMPLETE_ALIASES
          #select first item when you press tab the first time.
          setopt MENU_COMPLETE
          #case insensitive globbing
          setopt NO_CASE_GLOB
          #sort globs that expand to numbers by number rather than alphabeticly
          setopt NUMERIC_GLOB_SORT
          #allows for some neat globbing.
          setopt EXTENDED_GLOB
          #allow backspacing beyond the point you entered insert mode:
          bindkey -v '^?' backward-delete-char
          bindkey "^W" backward-kill-word

          #cheat.sh is a wonderful tool, the less typing needed the better.
          cheat(){
            for i in $*; do;
            curl cheat.sh/$i
            done
          }
        ''
        (lib.mkIf (!config.programs.starship.enable) ''
          autoload -U promptinit
          promptinit
          autoload -U colors
          colors

          #stuff to show git things.
            autoload -Uz vcs_info
            setopt prompt_subst
            precmd_vcs() {vcs_info}
            #when not in a repo, show full path to current directory. when in one, show path from base direcory of the repo.
            zstyle ':vcs_info:*' nvcsformats '%~'
            zstyle ':vcs_info:*' formats '%r/%S %F{green}[%b]%f'
            zstyle ':vcs_info:*' actionformats '%r/%S %F{green}[%b] %F{red}<%a>%f'

          #the precmd function, called just before printing the prompt.
          function precmd() {
            precmd_vcs
          }

          #Make the right prompt blank, just to be sure.
          RPROMPT=""

          #on the top line, show a whole bunch of info. botton line should be as minimal as possilbe (just a single char to  input next to...)
          PROMPT=$'%F{cyan}[%n@%m]%f%F{red}├────┤%f$vcs_info_msg_0_ %F{white}[%D %T]%f\n»'
        '')
      ];
      autocd = true;
      autosuggestion.enable = true;
      defaultKeymap = "viins";
      history = {
        ignoreAllDups = true;
        extended = true;
      };
      shellAliases = {
        ll = "ls -lh";
        la = "ls -lha";
        please = "sudo $(fc -ln -1)";
        pyactivate = "source ./.venv/bin/activate";
      };
      syntaxHighlighting = {
        enable = true;
        highlighters = [
          "main"
          "brackets"
          "pattern"
          "regexp"
          "root"
          "line"
        ];
      };
    };
  };
  services.gpg-agent.enableZshIntegration = true;
  home.packages = with pkgs; [
    curl
  ];
}
