use super::theme::ThemeConfig;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct Settings {
pub core: CoreConfig,
pub diff: DiffConfig,
pub ui: UiConfig,
pub theme: ThemeConfig,
pub keymap: std::collections::HashMap<String, String>,
pub custom_commands: std::collections::HashMap<String, String>,
pub commit_template: Option<String>,
pub repo_path: String,
}
#[derive(Debug, Clone)]
pub struct CoreConfig {
pub editor: Option<String>,
pub auto_fetch: bool,
pub auto_fetch_interval: u64,
pub auto_fetch_remote: String,
pub format_command: Option<String>,
pub format_on_revert: bool,
pub push_ff_only_enforce: bool,
pub pull_ff_only: bool,
pub pull_autostash: bool,
pub pull_timeout_secs: u64,
pub rebase_timeout_secs: u64,
}
#[derive(Debug, Clone)]
pub struct DiffConfig {
pub context_lines: u32,
pub syntax_highlight: bool,
}
#[derive(Debug, Clone)]
pub struct UiConfig {
pub theme: String,
pub show_help_footer: bool,
pub font_family: Option<String>,
pub font_size: Option<u16>,
pub background_image_path: Option<String>,
pub background_opacity: f32,
pub terminal_transparency: bool,
}
impl Default for Settings {
fn default() -> Self {
Self {
core: CoreConfig::default(),
diff: DiffConfig::default(),
ui: UiConfig::default(),
theme: ThemeConfig::default(),
keymap: std::collections::HashMap::default(),
custom_commands: std::collections::HashMap::default(),
commit_template: None,
repo_path: ".".to_string(),
}
}
}
impl Default for CoreConfig {
fn default() -> Self {
Self {
editor: None,
auto_fetch: true,
auto_fetch_interval: 60,
auto_fetch_remote: "origin".to_string(),
format_command: None,
format_on_revert: false,
push_ff_only_enforce: false,
pull_ff_only: false,
pull_autostash: true,
pull_timeout_secs: 30,
rebase_timeout_secs: 30,
}
}
}
impl Default for DiffConfig {
fn default() -> Self {
Self {
context_lines: 3,
syntax_highlight: true,
}
}
}
impl Default for UiConfig {
fn default() -> Self {
Self {
theme: "default_dark".to_string(),
show_help_footer: true,
font_family: None,
font_size: None,
background_image_path: None,
background_opacity: 0.3,
terminal_transparency: true,
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct PartialCoreConfig {
pub editor: Option<String>,
pub auto_fetch: Option<bool>,
pub auto_fetch_interval: Option<u64>,
pub auto_fetch_remote: Option<String>,
pub format_command: Option<String>,
pub format_on_revert: Option<bool>,
pub push_ff_only_enforce: Option<bool>,
pub pull_ff_only: Option<bool>,
pub pull_autostash: Option<bool>,
pub pull_timeout_secs: Option<u64>,
pub rebase_timeout_secs: Option<u64>,
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct PartialDiffConfig {
pub context_lines: Option<u32>,
pub syntax_highlight: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct PartialUiConfig {
pub theme: Option<String>,
pub show_help_footer: Option<bool>,
pub font_family: Option<String>,
pub font_size: Option<u16>,
pub background_image_path: Option<String>,
pub background_opacity: Option<f32>,
pub terminal_transparency: Option<bool>,
}