2021-09-13 08:01:58 +00:00
|
|
|
use std::env;
|
|
|
|
use std::ffi::OsString;
|
|
|
|
use std::path::PathBuf;
|
2021-01-08 15:15:47 +00:00
|
|
|
|
2022-09-16 16:54:46 +00:00
|
|
|
use anyhow::{Context, Result};
|
|
|
|
use glob::Pattern;
|
|
|
|
|
|
|
|
use crate::db::Rank;
|
|
|
|
|
2021-05-27 06:09:57 +00:00
|
|
|
pub fn data_dir() -> Result<PathBuf> {
|
|
|
|
let path = match env::var_os("_ZO_DATA_DIR") {
|
|
|
|
Some(path) => PathBuf::from(path),
|
2022-07-01 09:33:30 +00:00
|
|
|
None => dirs::data_local_dir()
|
|
|
|
.context("could not find data directory, please set _ZO_DATA_DIR manually")?
|
|
|
|
.join("zoxide"),
|
2020-03-27 19:08:36 +00:00
|
|
|
};
|
2021-05-27 06:09:57 +00:00
|
|
|
Ok(path)
|
2020-03-27 19:08:36 +00:00
|
|
|
}
|
|
|
|
|
2021-05-27 06:09:57 +00:00
|
|
|
pub fn echo() -> bool {
|
2022-07-01 09:33:30 +00:00
|
|
|
env::var_os("_ZO_ECHO").map_or(false, |var| var == "1")
|
2020-10-26 17:55:04 +00:00
|
|
|
}
|
|
|
|
|
2021-05-27 06:09:57 +00:00
|
|
|
pub fn exclude_dirs() -> Result<Vec<Pattern>> {
|
2022-07-01 09:33:30 +00:00
|
|
|
match env::var_os("_ZO_EXCLUDE_DIRS") {
|
|
|
|
Some(paths) => env::split_paths(&paths)
|
|
|
|
.map(|path| {
|
|
|
|
let pattern = path.to_str().context("invalid unicode in _ZO_EXCLUDE_DIRS")?;
|
2023-01-09 10:25:33 +00:00
|
|
|
Pattern::new(pattern)
|
|
|
|
.with_context(|| format!("invalid glob in _ZO_EXCLUDE_DIRS: {pattern}"))
|
2022-07-01 09:33:30 +00:00
|
|
|
})
|
|
|
|
.collect(),
|
|
|
|
None => {
|
2021-04-28 19:54:25 +00:00
|
|
|
let pattern = (|| {
|
|
|
|
let home = dirs::home_dir()?;
|
2022-07-01 09:33:30 +00:00
|
|
|
let home = Pattern::escape(home.to_str()?);
|
2021-05-27 06:09:57 +00:00
|
|
|
Pattern::new(&home).ok()
|
2021-04-28 19:54:25 +00:00
|
|
|
})();
|
|
|
|
Ok(pattern.into_iter().collect())
|
2022-07-01 09:33:30 +00:00
|
|
|
}
|
|
|
|
}
|
2020-03-27 21:56:48 +00:00
|
|
|
}
|
|
|
|
|
2021-05-27 06:09:57 +00:00
|
|
|
pub fn fzf_opts() -> Option<OsString> {
|
2020-05-28 22:17:24 +00:00
|
|
|
env::var_os("_ZO_FZF_OPTS")
|
|
|
|
}
|
|
|
|
|
2021-05-27 06:09:57 +00:00
|
|
|
pub fn maxage() -> Result<Rank> {
|
2022-07-01 09:33:30 +00:00
|
|
|
env::var_os("_ZO_MAXAGE").map_or(Ok(10_000.0), |maxage| {
|
|
|
|
let maxage = maxage.to_str().context("invalid unicode in _ZO_MAXAGE")?;
|
2023-01-09 10:25:33 +00:00
|
|
|
let maxage = maxage
|
|
|
|
.parse::<u32>()
|
|
|
|
.with_context(|| format!("unable to parse _ZO_MAXAGE as integer: {maxage}"))?;
|
2022-07-01 09:33:30 +00:00
|
|
|
Ok(maxage as Rank)
|
|
|
|
})
|
2020-03-27 19:08:36 +00:00
|
|
|
}
|
2020-07-01 12:21:20 +00:00
|
|
|
|
2021-05-27 06:09:57 +00:00
|
|
|
pub fn resolve_symlinks() -> bool {
|
2022-07-01 09:33:30 +00:00
|
|
|
env::var_os("_ZO_RESOLVE_SYMLINKS").map_or(false, |var| var == "1")
|
2020-07-01 12:21:20 +00:00
|
|
|
}
|