@@ -16,6 +16,8 @@ mod secrets;
1616mod symlinks;
1717
1818use clap:: { Parser , Subcommand } ;
19+ use std:: env;
20+ use std:: path:: PathBuf ;
1921use std:: process:: ExitCode ;
2022
2123rust_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+
270288fn 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,
0 commit comments