Skip to content

Commit 978d1e7

Browse files
committed
added TUCKR_USER_* environment variables for convenience
1 parent 0b5a4b0 commit 978d1e7

3 files changed

Lines changed: 39 additions & 3 deletions

File tree

book/src/path-finding/env.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,13 @@ program
1313
```
1414
Tuckr will expand it to `/home/user/Documents/program/config.txt`.
1515

16+
## Default paths
17+
Tuckr sets a few default environment variables when it runs that are useful to prevent duplicated config file for each
18+
conditional target.
19+
20+
- [`TUCKR_USER_CONFIG`](https://docs.rs/dirs/latest/dirs/fn.config_dir.html)
21+
- [`TUCKR_USER_DOWNLOADS`](https://docs.rs/dirs/latest/dirs/fn.download_dir.html)
22+
- [`TUCKR_USER_DOCUMENTS`](https://docs.rs/dirs/latest/dirs/fn.document_dir.html)
23+
- [`TUCKR_USER_DESKTOP`](https://docs.rs/dirs/latest/dirs/fn.desktop_dir.html)
24+
- [`TUCKR_USER_DATA`](https://docs.rs/dirs/latest/dirs/fn.data_dir.html)
25+
- [`TUCKR_USER_PICTURES`](https://docs.rs/dirs/latest/dirs/fn.picture_dir.html)

src/main.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ mod secrets;
1616
mod symlinks;
1717

1818
use clap::{Parser, Subcommand};
19+
use std::env;
20+
use std::path::PathBuf;
1921
use std::process::ExitCode;
2022

2123
rust_i18n::i18n!("locales", minify_key = true, fallback = "en");
@@ -267,6 +269,22 @@ enum ListType {
267269
Hooks,
268270
}
269271

272+
unsafe fn default_var(var: &str, default_path: Option<PathBuf>) {
273+
let Some(default_path) = default_path else {
274+
return;
275+
};
276+
277+
if !default_path.exists() || env::var(var).is_ok() {
278+
return;
279+
}
280+
281+
if let Ok(default_path) = default_path.canonicalize() {
282+
unsafe {
283+
env::set_var(var, default_path.to_str().unwrap());
284+
}
285+
}
286+
}
287+
270288
fn main() -> ExitCode {
271289
let cli = {
272290
// custom targets can be set permanently through env vars or set temporarily through the cli
@@ -284,6 +302,15 @@ fn main() -> ExitCode {
284302

285303
rust_i18n::set_locale(sys_locale::get_locale().unwrap_or_default().as_str());
286304

305+
unsafe {
306+
default_var("TUCKR_USER_CONFIG", dirs::config_dir());
307+
default_var("TUCKR_USER_DESKTOP", dirs::desktop_dir());
308+
default_var("TUCKR_USER_DOCUMENTS", dirs::document_dir());
309+
default_var("TUCKR_USER_DATA", dirs::data_dir());
310+
default_var("TUCKR_USER_DOWNLOADS", dirs::download_dir());
311+
default_var("TUCKR_USER_PICTURES", dirs::picture_dir());
312+
}
313+
287314
let exit_code = match cli.command {
288315
Command::Set {
289316
groups,

src/symlinks.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,7 +1196,7 @@ mod tests {
11961196

11971197
impl Test {
11981198
fn start() -> Self {
1199-
let target_dir = dotfiles::get_dotfiles_target_dir_path().unwrap();
1199+
let target_dir = dotfiles::get_dotfiles_target_dir_path().unwrap();
12001200
fs::create_dir_all(&target_dir).unwrap();
12011201

12021202
crate::fileops::init_cmd(&Context::default()).unwrap();
@@ -1209,7 +1209,6 @@ mod tests {
12091209
let filepaths = [
12101210
new_config_dir.join("group_file"),
12111211
group_dir.join("group_file_0"),
1212-
12131212
configs_dir
12141213
.join("shared_group1")
12151214
.join("shared_dir")
@@ -1325,7 +1324,7 @@ mod tests {
13251324
let shared_dir_target = target_dir.join("shared_dir");
13261325
_ = fs::remove_dir_all(&shared_dir_target);
13271326

1328-
let test = Test::start();
1327+
let _test = Test::start();
13291328

13301329
assert!(!shared_dir_target.exists());
13311330

0 commit comments

Comments
 (0)