use std::{env, path::PathBuf};
use serde::{Deserialize, Serialize};
const CONFIG_FILE_NAME: &str = "kegtui.toml";
pub fn app_config_file_path() -> PathBuf {
let config_home_guess = PathBuf::from(
env::var("HOME").expect("User does not have $HOME directory set"),
)
.join(".config");
env::var("XDG_CONFIG_HOME")
.map(PathBuf::from)
.unwrap_or(config_home_guess)
.join(CONFIG_FILE_NAME)
}
pub fn default_keg_location() -> &'static str {
"~/Applications/kegtui"
}
pub fn default_keg_search_paths() -> Vec<PathBuf> {
[
"/Applications",
"~/Applications/",
"~/Applications/Kegworks/",
"~/Applications/Sikarugir/",
default_keg_location(),
]
.into_iter()
.map(PathBuf::from)
.collect()
}
pub fn default_engine_search_paths() -> Vec<PathBuf> {
[
"~/Library/Application Support/Kegworks/Engines/",
"~/Library/Application Support/Sikarugir/Engines/",
]
.into_iter()
.map(PathBuf::from)
.collect()
}
pub fn default_wrapper_search_paths() -> Vec<PathBuf> {
[
"~/Library/Application Support/Kegworks/Wrapper/",
"~/Library/Application Support/Sikarugir/Wrapper/",
]
.into_iter()
.map(PathBuf::from)
.collect()
}
fn default_editor() -> String {
env::var("EDITOR").unwrap_or("vim".into())
}
fn default_explorer() -> String {
env::var("EXPLORER").unwrap_or("open".into())
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AppConfig {
#[serde(rename = "keg-search-paths", default = "default_keg_search_paths")]
pub keg_search_paths: Vec<PathBuf>,
#[serde(
rename = "engine-search-paths",
default = "default_engine_search_paths"
)]
pub engine_search_paths: Vec<PathBuf>,
#[serde(
rename = "wrapper-search-paths",
default = "default_wrapper_search_paths"
)]
pub wrapper_search_paths: Vec<PathBuf>,
#[serde(default = "default_editor")]
pub editor: String,
#[serde(default = "default_explorer")]
pub explorer: String,
}