@@ -5,9 +5,9 @@ use tabled::Tabled;
5
5
6
6
use crate :: config:: config_file:: mise_toml:: MiseToml ;
7
7
use crate :: config:: config_file:: ConfigFile ;
8
- use crate :: config:: Config ;
9
- use crate :: env;
10
- use crate :: file:: display_path;
8
+ use crate :: config:: { is_global_config , Config , LOCAL_CONFIG_FILENAMES } ;
9
+ use crate :: env:: { self , MISE_DEFAULT_CONFIG_FILENAME } ;
10
+ use crate :: file:: { self , display_path} ;
11
11
use crate :: ui:: table;
12
12
13
13
use super :: args:: EnvVarArg ;
@@ -59,10 +59,15 @@ impl Set {
59
59
return Ok ( ( ) ) ;
60
60
}
61
61
62
- let filename = self . file . unwrap_or_else ( || match self . global {
63
- true => env:: MISE_GLOBAL_CONFIG_FILE . clone ( ) ,
64
- false => env:: MISE_DEFAULT_CONFIG_FILENAME . clone ( ) . into ( ) ,
65
- } ) ;
62
+ let filename = if let Some ( env) = & * env:: MISE_ENV {
63
+ config_file_from_dir ( & env:: current_dir ( ) ?. join ( format ! ( ".mise.{}.toml" , env) ) )
64
+ } else if self . global {
65
+ env:: MISE_GLOBAL_CONFIG_FILE . clone ( )
66
+ } else if let Some ( p) = & self . file {
67
+ config_file_from_dir ( p)
68
+ } else {
69
+ env:: MISE_DEFAULT_CONFIG_FILENAME . clone ( ) . into ( )
70
+ } ;
66
71
67
72
let mut mise_toml = get_mise_toml ( & filename) ?;
68
73
@@ -103,6 +108,26 @@ fn get_mise_toml(filename: &Path) -> Result<MiseToml> {
103
108
Ok ( mise_toml)
104
109
}
105
110
111
+ fn config_file_from_dir ( p : & Path ) -> PathBuf {
112
+ if !p. is_dir ( ) {
113
+ return p. to_path_buf ( ) ;
114
+ }
115
+ let mise_toml = p. join ( & * MISE_DEFAULT_CONFIG_FILENAME ) ;
116
+ if mise_toml. exists ( ) {
117
+ return mise_toml;
118
+ }
119
+ let filenames = LOCAL_CONFIG_FILENAMES
120
+ . iter ( )
121
+ . rev ( )
122
+ . filter ( |f| is_global_config ( Path :: new ( f) ) )
123
+ . map ( |f| f. to_string ( ) )
124
+ . collect :: < Vec < _ > > ( ) ;
125
+ if let Some ( p) = file:: find_up ( p, & filenames) {
126
+ return p;
127
+ }
128
+ mise_toml
129
+ }
130
+
106
131
#[ derive( Tabled ) ]
107
132
struct Row {
108
133
key : String ,
0 commit comments