use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub fn default_profiles() -> IndexMap<String, String> {
IndexMap::from_iter([(
"claude-code".to_string(),
"$claude_model$git_branch$claude_context$claude_cost".to_string(),
)])
}
#[derive(Clone, Serialize, Deserialize, Debug)]
#[cfg_attr(
feature = "config-schema",
derive(schemars::JsonSchema),
schemars(deny_unknown_fields)
)]
#[serde(default)]
pub struct StarshipRootConfig {
#[serde(rename = "$schema")]
schema: String,
pub format: String,
pub right_format: String,
pub continuation_prompt: String,
pub scan_timeout: u64,
pub command_timeout: u64,
pub add_newline: bool,
pub follow_symlinks: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub palette: Option<String>,
pub palettes: HashMap<String, Palette>,
#[serde(rename = "profiles")]
#[cfg_attr(feature = "config-schema", schemars(default = "default_profiles"))]
pub user_profiles: IndexMap<String, String>,
#[serde(skip)]
pub internal_profiles: IndexMap<String, String>,
}
pub type Palette = HashMap<String, String>;
pub const PROMPT_ORDER: &[&str] = &[
"username",
"hostname",
"localip",
"shlvl",
"singularity",
"kubernetes",
"nats",
"directory",
"vcsh",
"fossil_branch",
"fossil_metrics",
"git_branch",
"git_commit",
"git_state",
"git_metrics",
"git_status",
"hg_branch",
"hg_state",
"pijul_channel",
"docker_context",
"package",
"bun",
"c",
"cmake",
"cobol",
"cpp",
"daml",
"dart",
"deno",
"dotnet",
"elixir",
"elm",
"erlang",
"fennel",
"fortran",
"gleam",
"golang",
"gradle",
"haskell",
"haxe",
"helm",
"java",
"julia",
"kotlin",
"lua",
"maven",
"mojo",
"nim",
"nodejs",
"ocaml",
"odin",
"opa",
"perl",
"php",
"pulumi",
"purescript",
"python",
"quarto",
"raku",
"rlang",
"red",
"ruby",
"rust",
"scala",
"solidity",
"swift",
"terraform",
"typst",
"vlang",
"vagrant",
"xmake",
"zig",
"buf",
"guix_shell",
"nix_shell",
"conda",
"pixi",
"meson",
"spack",
"memory_usage",
"aws",
"gcloud",
"openstack",
"azure",
"direnv",
"env_var",
"mise",
"crystal",
"custom",
"sudo",
"cmd_duration",
"line_break",
"jobs",
#[cfg(feature = "battery")]
"battery",
"time",
"status",
"container",
"netns",
"os",
"shell",
"character",
];
impl Default for StarshipRootConfig {
fn default() -> Self {
Self {
schema: "https://starship.rs/config-schema.json".to_string(),
format: "$all".to_string(),
right_format: String::new(),
continuation_prompt: "[∙](bright-black) ".to_string(),
user_profiles: IndexMap::new(),
internal_profiles: default_profiles(),
scan_timeout: 30,
command_timeout: 500,
add_newline: true,
follow_symlinks: true,
palette: None,
palettes: HashMap::default(),
}
}
}