@@ -4,8 +4,6 @@ use std::{env, fs, path::PathBuf, process::Command};
44
55use serde:: { Deserialize , Serialize } ;
66
7- pub struct Config { }
8-
97#[ derive( Serialize , Deserialize ) ]
108pub struct Choices {
119 pub shell_prompt_bash : Option < String > ,
@@ -16,32 +14,15 @@ pub struct Data {
1614 pub choices : Choices ,
1715}
1816
19- pub fn launch ( category : & str , choice : String ) {
20- let entrypoint =
21- "/storage/ur/storage_home/Docs/Programming/Repositories/default/choose/src/launcher.sh" ;
22-
23- let choice_file = PathBuf :: from ( format ! ( "{}" , env:: var( "HOME" ) . unwrap( ) ) )
24- . join ( ".dotfiles/os/*nix/user/.config/choose/choices" )
25- . join ( category)
26- . join ( format ! ( "{}.sh" , choice. as_str( ) ) ) ;
27-
28- Command :: new ( entrypoint)
29- . arg ( choice_file)
30- . arg ( "launch" )
31- . spawn ( )
32- . unwrap ( ) ;
33- }
34-
3517pub fn run ( category : & str , choice : & str , action : & str ) {
36- let entrypoint =
37- "/storage/ur/storage_home/Docs/Programming/Repositories/default/choose/src/launcher.sh" ;
18+ let choose_dir = get_choose_dir ( ) ;
3819
39- let choice_file = PathBuf :: from ( format ! ( "{}" , env :: var ( "HOME" ) . unwrap ( ) ) )
40- . join ( ".dotfiles/os/*nix/user/.config/choose/ choices" )
20+ let choice_file = choose_dir
21+ . join ( "choices" )
4122 . join ( category)
4223 . join ( format ! ( "{}.sh" , choice) ) ;
4324
44- let exit_status = Command :: new ( entrypoint )
25+ let exit_status = Command :: new ( choose_dir . join ( "launcher.sh" ) )
4526 . arg ( choice_file)
4627 . arg ( action)
4728 . spawn ( )
@@ -54,17 +35,32 @@ pub fn run(category: &str, choice: &str, action: &str) {
5435}
5536
5637pub fn get_data ( ) -> Data {
57- let path = PathBuf :: from ( format ! ( "{}" , env :: var ( "HOME" ) . unwrap ( ) ) )
58- . join ( ".dotfiles/os/*nix/user/.config/choose/data.json" ) ;
38+ let path = get_choose_dir ( ) . join ( "data.json" ) ;
39+
5940 let content = fs:: read_to_string ( path) . unwrap ( ) ;
6041 let data: Data = serde_json:: from_str ( content. as_str ( ) ) . unwrap ( ) ;
6142 data
6243}
6344
6445pub fn save_data ( data : & Data ) {
65- let path = PathBuf :: from ( format ! ( "{}" , env:: var( "HOME" ) . unwrap( ) ) )
66- . join ( ".dotfiles/os/*nix/user/.config/choose/data.json" ) ;
46+ let path = get_choose_dir ( ) . join ( "data.json" ) ;
6747
6848 let deserialized = serde_json:: to_string ( data) . unwrap ( ) ;
6949 fs:: write ( path, deserialized) . unwrap ( ) ;
7050}
51+
52+ pub fn get_choose_dir ( ) -> PathBuf {
53+ let dotfiles_dir = match env:: var ( "XDG_CONFIG_HOME" ) {
54+ Ok ( val) => {
55+ let p = PathBuf :: from ( val) ;
56+ if p. is_absolute ( ) {
57+ p
58+ } else {
59+ PathBuf :: from ( dirs:: home_dir ( ) . unwrap ( ) ) . join ( ".config" )
60+ }
61+ }
62+ Err ( ..) => PathBuf :: from ( dirs:: home_dir ( ) . unwrap ( ) ) . join ( ".config" ) ,
63+ } ;
64+
65+ dotfiles_dir. join ( "choose" )
66+ }
0 commit comments