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

{
  options.local.shell.enable = lib.mkEnableOption "enable shell";

  config = lib.mkIf config.local.shell.enable {
    # fish and zsh support for nix-shell
    home.packages = with pkgs; [ any-nix-shell ];

    programs.zsh = {
      enable = true;
      autosuggestion.enable = true;
      enableCompletion = true;
      defaultKeymap = "viins";
      dotDir = ".config/zsh";

      history = {
        path = "${config.xdg.dataHome}/zsh/zsh_history";
        expireDuplicatesFirst = true;
        ignorePatterns = [
          "rm *"
          "kill *"
        ];
      };

      oh-my-zsh.enable = true;

      initExtra = ''
        any-nix-shell zsh --info-right | source /dev/stdin
      '';
    };

    programs.starship = {
      enable = true;
      enableZshIntegration = config.programs.zsh.enable;
      settings = {
        add_newline = true;

        format = lib.concatStrings [
          "$hostname"
          "$directory"
          "$git_branch"
          "$git_commit"
          "$git_state"
          "$git_metrics"
          "$git_status"
          "$shlvl"
          "$nix_shell"
          "$cmd_duration"
          "$jobs"
          "$line_break"
          "$character"
        ];

        character = {
          success_symbol = "[➜](bold green)";
          error_symbol = "[➜](bold red)";
        };

        git_commit.commit_hash_length = 6;

        shlvl = {
          disabled = false;
          format = "[$symbol$shlvl]($style) ";
          symbol = "↕ ";
          threshold = 3;
        };

        hostname.ssh_symbol = "";
      };
    };
  };
}