{
  config,
  lib,
  ...
}: {
  home.sessionVariables.STARSHIP_CACHE = "${config.xdg.cacheHome}/starship";

  programs.starship = {
    enable = true;
    enableNushellIntegration = true;
    settings = {
      palette = "tokyonight";
      add_newline = false;
      palettes.tokyonight = {
        red = "#f7768e";
        orange = "#ff9e64";
        yellow = "#e0af68";
        light-green = "#9ece6a";
        green = "#73daca";
        turquoise = "#89ddff";
        light-cyan = "#b4f9f8";
        teal = "#2ac3de";
        cyan = "#7dcfff";
        blue = "#7aa2f7";
        magenta = "#bb9af7";
        white = "#c0caf5";
        light-gray = "#9aa5ce";
        parameters = "#cfc9c2";
        comment = "#565f89";
        black = "#414868";
        foreground = "#a9b1d6";
        background = "#1a1b26";
      };
      format = lib.concatStrings [
        "$character"
        "$hostname"
        "$directory"
        "$git_branch"
        "$git_status"
        "$rust"
        "$golang"
      ];
      right_format = lib.concatStrings [
        "$nix_shell"
      ];
      character = {
        error_symbol = "[](bold red)";
        success_symbol = "[](bold teal)";
      };
      username = {
        show_always = false;
        format = "[$user]($style)";
        style_user = "red";
      };
      hostname = {
        ssh_symbol = "🌐";
        format = "[on $hostname $ssh_symbol]($style)";
        ssh_only = true;
        disabled = false;
      };
      directory = {
        format = "[$path ]($style)";
        truncation_length = 3;
        truncation_symbol = "…/";
        read_only = "🔒";
        style = "teal";
        home_symbol = "";
      };
      directory.substitutions = {
        "Documents" = " ";
        "Downloads" = " ";
        "Music" = " ";
        "Pictures" = " ";
      };
      nix_shell = {
        disabled = false;
        impure_msg = "[impure shell](bold red)";
        pure_msg = "[pure shell](bold green)";
        unknown_msg = "[unknown shell](bold yellow)";
        format = "via [ $state( \($name\))](bold teal)";
      };
      git_branch = {
        symbol = "";
        format = "[$symbol $branch ]($style)";
      };
      git_status = {
        format = "[$all_status$ahead_behind ]($style)";
      };
      golang = {
        symbol = " ";
        format = "[$symbol ($version) ]($style)";
      };
      rust = {
        symbol = "";
        format = "[$symbol ($version) ]($style)";
      };
      time = {
        disabled = false;
        time_format = "%R";
        format = "[ $time ]($style)";
        style = "red";
      };
    };
  };
}