{
  lib,
  config,
  osConfig,
  ...
}:
let
  inherit (lib.strings) concatStrings;

  # TODO: come back and change this a bit
  ss = symbol: style: {
    inherit symbol;
    format = "[$symbol ](${style})";
  };
  ssv = symbol: style: {
    inherit symbol;
    format = "via [$symbol](${style})";
  };
in
{
  programs.starship = {
    inherit (osConfig.garden.programs.cli) enable;
    enableBashIntegration = config.programs.bash.enable;
    enableFishIntegration = config.programs.fish.enable;
    enableZshIntegration = config.programs.zsh.enable;
    enableNushellIntegration = config.programs.nushell.enable;

    settings = {
      add_newline = true;
      format = concatStrings [
        "[â•­â•´](238)$os"
        "$all[â•°â”€ó°�”](237)$character"
      ];

      character = {
        success_symbol = "";
        error_symbol = "";
      };

      username = {
        style_user = "white";
        style_root = "black";
        format = "[$user]($style) ";
        show_always = true;
      };

      directory = {
        truncation_length = 3;
        truncation_symbol = "â€¦/";
        home_symbol = "ó°‹� ";
        read_only_style = "197";
        read_only = " ï€£ ";
        format = "at [$path]($style)[$read_only]($read_only_style) ";

        substitutions = {
          "ó°‹� /Documents" = "ó°ˆ™ ";
          "ó°‹� /documents" = "ó°ˆ™ ";

          "ó°‹� /Downloads" = "ï€™ ";
          "ó°‹� /downloads" = "ï€™ ";

          "ó°‹� /media/music" = "ï€� ";
          "ó°‹� /media/pictures" = "ï€¾ ";
          "ó°‹� /media/videos" = "ï€½ ";
          "ó°‹� /Music" = "ï€� ";
          "ó°‹� /Pictures" = "ï€¾ ";
          "ó°‹� /Videos" = "ï€½ ";

          "ó°‹� /dev" = "ó±Œ¢ ";
          "ó°‹� /Dev" = "ó±Œ¢ ";

          "ó°‹� /skl" = "ó°‘´ ";
          "ó°‹� /.config" = "ï�£ ";
        };
      };

      os = {
        style = "bold white";
        format = "[$symbol]($style)";

        symbols = {
          Arch = "ïŒƒ";
          Artix = "ïŒƒ";
          Debian = "ïŒ†";
          # Kali = "ó° ¥";
          EndeavourOS = "ïŒ¢";
          Fedora = "ïŒŠ";
          NixOS = "ïŒ“";
          openSUSE = "ïŒ”";
          SUSE = "ïŒ”";
          Ubuntu = "ïŒœ";
          Raspbian = "ïŒ•";
          #elementary = "ïŒ‰";
          #Coreos = "ïŒ…";
          Gentoo = "ïŒ�";
          #mageia = "ïŒ�"
          CentOS = "ïŒ„";
          #sabayon = "ïŒ—";
          #slackware = "ïŒ˜";
          Mint = "ïŒ�";
          Alpine = "ïŒ€";
          #aosc = "ïŒ�";
          #devuan = "ïŒ‡";
          Manjaro = "ïŒ’";
          #rhel = "ïŒ–";
          Macos = "ó°€µ";
          Linux = "ï…¼";
          Windows = "îœ�";
        };
      };

      container = ss " ó°�–" "yellow dimmed";
      python = ss "îœ¼" "yellow";
      nodejs = ss "î�� " "yellow";
      lua = ss "ó°¢± " "blue";
      rust = ss "î�¨" "red";
      java = ss "î‰– " "red";
      c = ss "î˜� " "blue";
      golang = ss "î˜§" "blue";
      docker_context = ss "ïŒˆ " "blue";

      nix_shell = ssv "ïŒ“ " "blue";

      git_branch = {
        symbol = "ó°Š¢ ";
        format = "on [$symbol$branch]($style) ";
        truncation_length = 4;
        truncation_symbol = "â€¦/";
        style = "bold green";
      };
      git_status = {
        format = "[\\($all_status$ahead_behind\\)]($style) ";
        style = "bold green";
        conflicted = "ğŸ�³";
        up_to_date = "ï�† ";
        untracked = "ï”© ";
        ahead = "â‡¡\${count}";
        diverged = "â‡•â‡¡\${ahead_count}â‡£\${behind_count}";
        behind = "â‡£\${count}";
        stashed = "ó°�— ";
        modified = "ï�„ ";
        staged = "[++\\($count\\)](green)";
        renamed = "ó°–· ";
        deleted = "ï€” ";
      };

      battery.disabled = true;
    };
  };
}
