diff --git a/rmenu/src/cache.rs b/rmenu/src/cache.rs index b33707a..679f9fd 100644 --- a/rmenu/src/cache.rs +++ b/rmenu/src/cache.rs @@ -3,15 +3,11 @@ use std::fs; use std::path::PathBuf; use std::time::{Duration, SystemTime}; -use once_cell::sync::Lazy; use rmenu_plugin::Entry; use thiserror::Error; use crate::config::{CacheSetting, PluginConfig}; -use crate::CONFIG_DIR; - -static CONFIG_PATH: Lazy = - Lazy::new(|| PathBuf::from(shellexpand::tilde(CONFIG_DIR).to_string())); +use crate::XDG_PREFIX; #[derive(Debug, Error)] pub enum CacheError { @@ -29,7 +25,10 @@ pub enum CacheError { #[inline] fn cache_file(name: &str) -> PathBuf { - CONFIG_PATH.join(format!("{name}.cache")) + xdg::BaseDirectories::with_prefix(XDG_PREFIX) + .expect("Failed to read xdg base dirs") + .place_cache_file(format!("{name}.cache")) + .expect("Failed to write xdg cache dirs") } /// Read Entries from Cache (if Valid and Available) diff --git a/rmenu/src/cli.rs b/rmenu/src/cli.rs index fcfbe4e..14ca9d6 100644 --- a/rmenu/src/cli.rs +++ b/rmenu/src/cli.rs @@ -181,21 +181,24 @@ pub type Result = std::result::Result; impl Args { /// Find a specifically named file across xdg config paths fn find_xdg_file(&self, name: &str, base: &Option) -> Option { - return base.clone().or_else(|| { - xdg::BaseDirectories::with_prefix(XDG_PREFIX) - .expect("Failed to read xdg base dirs") - .find_config_file(name) - }).map(|f| { - let f = f.to_string_lossy().to_string(); - shellexpand::tilde(&f).to_string() - }); + return base + .clone() + .or_else(|| { + xdg::BaseDirectories::with_prefix(XDG_PREFIX) + .expect("Failed to read xdg base dirs") + .find_config_file(name) + }) + .map(|f| { + let f = f.to_string_lossy().to_string(); + shellexpand::tilde(&f).to_string() + }); } /// Load Configuration File pub fn get_config(&self) -> Result { let config = self.find_xdg_file(DEFAULT_CONFIG, &self.config); - if let Some (path) = config { + if let Some(path) = config { let config: Config = match read_to_string(path) { Ok(content) => serde_yaml::from_str(&content), Err(err) => { @@ -251,10 +254,12 @@ impl Args { pub fn get_theme(&self) -> String { self.find_xdg_file(DEFAULT_THEME, &self.theme) .map(read_to_string) - .map(|f| f.unwrap_or_else(|err| { - log::error!("Failed to load CSS: {err:?}"); - String::new() - })) + .map(|f| { + f.unwrap_or_else(|err| { + log::error!("Failed to load CSS: {err:?}"); + String::new() + }) + }) .unwrap_or_else(String::new) } @@ -263,9 +268,9 @@ impl Args { let css = self .css .clone() - .or(c.css.as_ref().map(|s| PathBuf::from(s))); - if let Some(css) = css { - let path = css.to_string_lossy().to_string(); + .map(|s| s.to_string_lossy().to_string()) + .or(c.css.clone()); + if let Some(path) = css { let path = shellexpand::tilde(&path).to_string(); match read_to_string(&path) { Ok(css) => return css, diff --git a/rmenu/src/main.rs b/rmenu/src/main.rs index 08438ea..1629b07 100644 --- a/rmenu/src/main.rs +++ b/rmenu/src/main.rs @@ -10,7 +10,6 @@ mod state; use clap::Parser; use rmenu_plugin::{self_exe, Entry}; -static CONFIG_DIR: &'static str = "~/.config/rmenu/"; static DEFAULT_THEME: &'static str = "style.css"; static DEFAULT_CONFIG: &'static str = "config.yaml"; static XDG_PREFIX: &'static str = "rmenu"; @@ -55,7 +54,6 @@ fn main() -> cli::Result<()> { .any(|e| e.icon.is_some() || e.icon_alt.is_some()); config.use_comments = config.use_comments && entries.iter().any(|e| e.comment.is_some()); - let theme = cli.get_theme(); let css = cli.get_css(&config);