More config progress

This commit is contained in:
Javier Feliz 2025-09-07 15:52:04 -04:00
parent 075746472f
commit 85326e435c
4 changed files with 51 additions and 9 deletions

1
Cargo.lock generated
View File

@ -1473,6 +1473,7 @@ dependencies = [
"gtk4-layer-shell",
"redb",
"serde",
"waycast-config",
"waycast-core",
"waycast-plugins",
]

View File

@ -14,6 +14,38 @@ pub fn project_dirs() -> Option<ProjectDirs> {
ProjectDirs::from("dev.thegrind", "The Grind", "waycast")
}
pub fn config_dir() -> Option<PathBuf> {
if let Some(dirs) = project_dirs() {
return Some(dirs.config_dir().to_path_buf());
}
None
}
pub fn cache_dir() -> Option<PathBuf> {
if let Some(dirs) = project_dirs() {
return Some(dirs.cache_dir().to_path_buf());
}
None
}
pub fn data_dir() -> Option<PathBuf> {
if let Some(dirs) = project_dirs() {
return Some(dirs.data_dir().to_path_buf());
}
None
}
pub fn config_path<P: AsRef<Path>>(file: P) -> Option<PathBuf> {
if let Some(p) = config_dir() {
return Some(p.join(file));
}
None
}
pub fn config_file() -> &'static Config {
CONFIG_SINGLETON.get_or_init(|| init())
}
@ -23,9 +55,16 @@ pub fn get<T: DeserializeOwned>(key: &str) -> Result<T, config::ConfigError> {
}
fn init() -> Config {
Config::builder()
.add_source(config::File::with_name("waycast.toml"))
.add_source(config::Environment::with_prefix("WAYCAST"))
.build()
.unwrap()
let mut cfg = Config::builder();
cfg = cfg.add_source(config::File::with_name("waycast.toml").required(false)); // Local file for dev
// Production version in ~/.config
if let Some(path) = config_path("waycast.toml") {
cfg = cfg.add_source(config::File::with_name(&path.to_string_lossy()).required(false));
}
cfg = cfg.add_source(config::Environment::with_prefix("WAYCAST"));
cfg.build().unwrap()
}

View File

@ -10,6 +10,7 @@ path = "src/main.rs"
[dependencies]
waycast-core = { path = "../waycast-core" }
waycast-plugins = { path = "../waycast-plugins" }
waycast-config = { path = "../waycast-config" }
gio = "0.21.1"
glib = "0.21.1"
gtk = { version = "0.10.0", package = "gtk4" }

View File

@ -27,10 +27,11 @@ fn main() {
eprintln!("Warning: Could not apply default styles: {}", e);
}
// Optionally apply user CSS overrides
// if let Err(_) = ui.apply_css("waycast.css") {
// // Silently ignore if user hasn't provided custom CSS
// }
if let Some(path) = waycast_config::config_path("waycast.css") {
if let Err(_) = ui.apply_css(path) {
println!("No user css found");
}
}
ui.show();
});