{ config, lib, ... }: let inherit (builtins) map; inherit (config.modules.other.system) username; hmCfg = config.home-manager.users.${username}; inherit (lib.strings) concatStrings; in { home-manager.users.${username} = let elemsConcatted = concatStrings ( map (s: "\$${s}") [ "hostname" "username" "directory" "shell" "nix_shell" "git_branch" "git_commit" "git_state" "git_status" "jobs" "cmd_duration" ] ); in { home.sessionVariables = { STARSHIP_CACHE = "${hmCfg.home.homeDirectory}/.cache/starship"; }; programs.starship = { enable = true; enableFishIntegration = true; enableTransience = true; settings = { scan_timeout = 2; command_timeout = 2000; # nixpkgs makes starship implode with lower values add_newline = false; line_break.disabled = false; format = "${elemsConcatted}\n$character"; # format = concatStrings [ # "$hostname" # #"$username" # "$directory" # "$shell" # "$nix_shell" # "$git_branch" # "$git_commit" # "$git_state" # "$git_status" # "$jobs" # "$cmd_duration" # "\n$character" # ]; hostname = { ssh_only = true; disabled = false; format = "@[$hostname](bold blue) "; # the whitespace at the end is actually important }; # configure specific elements character = { error_symbol = "[](bold red)"; success_symbol = "[](bold green)"; vicmd_symbol = "[](bold yellow)"; format = "$symbol [|](bold bright-black) "; }; username = { format = "[$user]($style) in "; }; directory = { truncation_length = 2; # removes the read_only symbol from the format, it doesn't play nicely with my folder icon format = "[ ](bold green) [$path]($style) "; # the following removes tildes from the path, and substitutes some folders with shorter names substitutions = { "~/Dev" = "Dev"; "~/Documents" = "Docs"; }; }; # git git_commit.commit_hash_length = 7; git_branch.style = "bold purple"; git_status = { style = "red"; ahead = "⇡ "; behind = "⇣ "; conflicted = " "; renamed = "»"; deleted = "✘ "; diverged = "⇆ "; modified = "!"; stashed = "≡"; staged = "+"; untracked = "?"; }; # language configurations # the whitespaces at the end *are* necessary for proper formatting lua.symbol = "[ ](blue) "; python.symbol = "[ ](blue) "; rust.symbol = "[ ](red) "; nix_shell.symbol = "[󱄅 ](blue) "; golang.symbol = "[󰟓 ](blue)"; c.symbol = "[ ](black)"; nodejs.symbol = "[󰎙 ](yellow)"; package.symbol = "📦 "; }; }; }; }