From 87f0ac0aeccc72e22dfce4afd5b94ecd7c2f26d7 Mon Sep 17 00:00:00 2001 From: Ulrich Kautz Date: Mon, 14 Feb 2022 13:51:46 +0000 Subject: [PATCH] Use already existing env var names --- .github/workflows/ci.yml | 4 ++-- docs/installation.md | 7 +++++++ src/filesystem.rs | 15 ++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1dcef1..630d42f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,8 +52,8 @@ jobs: uses: actions-rs/cargo@v1 continue-on-error: false env: - NAVI_CHEATS_DIRECTORY: /tmp/cheats-dir - NAVI_CONFIG_FILE: /tmp/config-file + NAVI_PATH: /tmp/cheats-dir + NAVI_CONFIG: /tmp/config-file with: command: test diff --git a/docs/installation.md b/docs/installation.md index b40f3f7..88032fb 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -65,6 +65,13 @@ make install # make BIN_DIR=/usr/local/bin install ``` +##### Compile time environment variables + +**navi** supports environment variables at compile time that modify the behavior of the binary at runtime: + +- `NAVI_PATH` (directory path value): If the `cheats` directory in the user's directory does not exist, **navi** uses this path (if it exists), as a fallback location to look for cheat files. Use case: system-wide installed, shared used cheatsheets folder. +- `NAVI_CONFIG` (file path value): If the `config.yaml` file in the user's directory does not exist, **navi** uses this path (if it exists), as a fallback location to look for a configuration file. Use case: system-wide installed, shared used configuration file. + #### Other package managers You can find **navi** for more package managers by clicking on the image below: diff --git a/src/filesystem.rs b/src/filesystem.rs index 407942d..85b8c62 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -9,7 +9,7 @@ use anyhow::Result; use directories_next::BaseDirs; use regex::Regex; use std::collections::HashSet; -use std::path::{Path, PathBuf}; +use std::path::{Path, PathBuf, MAIN_SEPARATOR}; use walkdir::WalkDir; pub fn all_cheat_files(path: &Path) -> Vec { @@ -29,6 +29,11 @@ fn paths_from_path_param(env_var: &str) -> impl Iterator { fn compiled_default_path(path: Option<&str>) -> Option { match path { Some(path) => { + let path = if path.contains(MAIN_SEPARATOR) { + path.split(MAIN_SEPARATOR).next().unwrap() + } else { + path + }; let path = Path::new(path); if path.exists() { Some(path.to_path_buf()) @@ -46,7 +51,7 @@ pub fn default_cheat_pathbuf() -> Result { pathbuf.push("navi"); pathbuf.push("cheats"); if !pathbuf.exists() { - if let Some(path) = compiled_default_path(option_env!("NAVI_CHEATS_DIRECTORY")) { + if let Some(path) = compiled_default_path(option_env!("NAVI_PATH")) { pathbuf = path; } } @@ -60,7 +65,7 @@ pub fn default_config_pathbuf() -> Result { pathbuf.push("navi"); pathbuf.push("config.yaml"); if !pathbuf.exists() { - if let Some(path) = compiled_default_path(option_env!("NAVI_CONFIG_FILE")) { + if let Some(path) = compiled_default_path(option_env!("NAVI_CONFIG")) { pathbuf = path; } } @@ -279,7 +284,7 @@ mod tests { let mut expect = base_dirs.config_dir().to_path_buf(); expect.push("navi"); expect.push("config.yaml"); - let expect = match option_env!("NAVI_CONFIG_FILE") { + let expect = match option_env!("NAVI_CONFIG") { Some(path) => path.to_string(), None => expect.to_string_lossy().to_string(), }; @@ -296,7 +301,7 @@ mod tests { let mut expect = base_dirs.data_dir().to_path_buf(); expect.push("navi"); expect.push("cheats"); - let expect = match option_env!("NAVI_CHEATS_DIRECTORY") { + let expect = match option_env!("NAVI_PATH") { Some(path) => path.to_string(), None => expect.to_string_lossy().to_string(), };