{ lib, config, ... }: let inherit (lib) mkDefault; cfg = config.marleyos.programs.starship; in { config = lib.mkIf cfg.enable { programs.starship.settings = let mkFormat = t: " [](fg:base02)[${t}]($style)[](fg:base02) "; langFormat = mkFormat "$symbol$version"; in { format = mkDefault (lib.concatStrings [ "$username" "$directory" "$nix_shell" "$git_branch" "$git_status" "$fill" "$c" "$elixir" "$elm" "$golang" "$haskell" "$java" "$julia" "$nodejs" "$nim" "$rust" "$scala" "$python" "$time" "$line_break" "$character" ]); palettes.default = with config.lib.stylix.colors.withHashtag; mkDefault { base02 = base02; base08 = base08; base09 = base09; base0A = base0A; base0B = base0B; base0C = base0C; base0D = base0D; }; palette = "default"; username = { disabled = mkDefault false; format = mkDefault (mkFormat " 󰧱 $user "); show_always = mkDefault true; style_root = mkDefault "bg:base02 fg:base0D"; style_user = mkDefault "bg:base02 fg:base0D"; }; directory = { format = mkDefault (mkFormat " $path "); style = mkDefault "bg:base02 fg:base0B"; truncation_length = mkDefault 3; truncation_symbol = mkDefault "…/"; substitutions = { Documents = mkDefault "󰈙"; Downloads = mkDefault " "; Music = mkDefault " "; Pictures = mkDefault " "; }; }; git_branch = { format = mkDefault (mkFormat " $symbol $branch "); style = mkDefault "bg:base02 fg:base0C"; symbol = mkDefault ""; }; git_status = { disabled = mkDefault false; style = mkDefault "bg:base02 fg:base08"; format = mkDefault (mkFormat " $all_status$ahead_behind"); up_to_date = mkDefault "[ ✓ ](bg:base02 fg:base0D)"; untracked = mkDefault "[?\\($count\\)](bg:base02 fg:base09)"; stashed = mkDefault "[\\$](bg:base02 fg:base0D)"; modified = mkDefault "[!\\($count\\)](bg:base02 fg:base09)"; renamed = mkDefault "[»\\($count\\)](bg:base02 fg:base0D)"; deleted = mkDefault "[✘\\($count\\)](style)"; staged = mkDefault "[++\\($count\\)](bg:base02 fg:base09)"; ahead = mkDefault "[⇡\\(\${count}\\)](bg:base02 fg:base0C)"; diverged = mkDefault "⇕[\\[](bg:base02 fg:base0D)[⇡\\(\${ahead_count}\\)](bg:base02 fg:base0C)[⇣\\(\${behind_count}\\)](bg:base02 fg:base0A)[\\]](bg:base02 fg:base0D)"; behind = mkDefault "[⇣\\(\${count}\\)](bg:base02 fg:base0A)"; }; fill = { style = mkDefault "fg:base02"; symbol = mkDefault " "; }; time = { disabled = mkDefault false; format = mkDefault (mkFormat " $time 󰴈 "); style = mkDefault "bg:base02 fg:base0A"; time_format = mkDefault "%I:%M%P"; use_12hr = mkDefault true; }; character = let vim = ""; mkChar = sym: col: " [${sym}](fg:${col}) [󰄾](fg:base0C)"; in { success_symbol = mkChar "" "base0D"; error_symbol = mkChar "󰋔" "base08"; vimcmd_symbol = mkChar vim "base0A"; vimcmd_replace_one_symbol = mkChar vim "base0C"; vimcmd_replace_symbol = mkChar vim "base0C"; vimcmd_visual_symbol = mkChar vim "base0D"; }; ### Languages ### c = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault " "; }; elixir = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault " "; }; elm = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault " "; }; haskell = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault " "; }; java = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault " "; }; julia = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault " "; }; nodejs = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault "󰎙 "; }; nim = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault "󰆥 "; }; python = { style = mkDefault "bg:base02 fg:base0B"; disabled = mkDefault false; symbol = mkDefault " "; }; rust = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = mkDefault false; symbol = mkDefault ""; }; scala = { style = "bg:base02 fg:base0B"; format = mkDefault langFormat; disabled = false; symbol = " "; }; ### Tools ### conda = { style = mkDefault "bg:base02 fg:base0B"; format = mkDefault (mkFormat "$symbol$environment"); disabled = mkDefault false; symbol = mkDefault "🅒 "; }; nix_shell = { style = "bg:base02 fg:base0C"; format = mkDefault (mkFormat " $symbol $state( \($name\)) "); disabled = mkDefault false; symbol = mkDefault " "; }; }; }; }