{ lib, config, ... }:
with lib;
let
  cfg = config.modules.cli.starship;
in
{
  options.modules.cli.starship = {
    enable = mkEnableOption "enable starship prompt";
  };
  config = mkIf cfg.enable {
    programs.starship = {
      enable = true;
      enableZshIntegration = true;
      settings = {
        format = "$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$fill$kubernetes$line_break$python$nix_shell$character";
        directory = {
          style = "blue";
          truncate_to_repo = false;
          truncation_length = 6;
          truncation_symbol = "…/";
          read_only = "󰌾 ";
          format = "[$read_only]($read_only_style)[$path]($style) ";
        };
        character = {
          success_symbol = "[](purple)";
          error_symbol = "[](red)";
          vimcmd_symbol = "[](green)";
        };
        git_branch = {
          format = "[$branch]($style)";
          style = "bright-black";
        };
        git_status = {
          format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](218) ($ahead_behind$stashed)]($style) ";
          style = "cyan";
          conflicted = "​";
          untracked = "​";
          modified = "​";
          staged = "​";
          renamed = "​";
          deleted = "​";
          stashed = "≡";
        };
        git_state = {
          format = "\\([$state( $progress_current/$progress_total)]($style)\\)";
          style = "bright-black";
        };
        cmd_duration = {
          format = "[$duration]($style) ";
          style = "yellow";
        };
        python = {
          format = "[$virtualenv]($style) ";
          style = "bright-black";
        };
        nix_shell = {
          format = "[$symbol$name]($style) ";
          symbol = " ";
          style = "bright-black";
        };
        kubernetes = {
          format = "[|$symbol$cluster| ]($style)";
          style = "yellow";
          disabled = false;
          detect_folders = [
            "clusters"
            "deploy"
          ];
        };
        fill = {
          symbol = " ";
        };
      };
    };
  };
}
