···1414 // if omitted, fallback to a local `tangled-on-commit.json` file
1515 // if key omitted or file not found, fall back to env
1616 // if env omitted, error out and quit
1717+ // note: shell is not loaded from env (to avoid the user unknowingly executing scripts)
17181819 // if any args are `-h` || `--help` display help and quit
1920 for arg in std::env::args() {
···109110 // now load config
110111 if let Ok(file) = std::fs::read_to_string("./tangled-on-commit.json") {
111112 if let Ok(parsed) = json::parse(&file) {
112112- if let Some(json_handle) = parsed["handle"].as_str() {
113113+ if handle.is_none()
114114+ && let Some(json_handle) = parsed["handle"].as_str()
115115+ {
113116 handle = Some(String::from(json_handle))
114117 }
115115- if let Some(json_repo_name) = parsed["repo_name"].as_str() {
118118+ if repo_name.is_none()
119119+ && let Some(json_repo_name) = parsed["repo_name"].as_str()
120120+ {
116121 repo_name = Some(String::from(json_repo_name))
117122 }
118118- if let Some(json_shell) = parsed["shell"].as_str() {
123123+ if shell.is_none()
124124+ && let Some(json_shell) = parsed["shell"].as_str()
125125+ {
119126 shell = Some(String::from(json_shell))
120127 }
121128 }
···133140 }
134141135142 // now load from env
143143+ if handle.is_none()
144144+ && let Ok(env_handle) = std::env::var("TANGLED_ON_COMMIT_HANDLE")
145145+ {
146146+ handle = Some(String::from(env_handle))
147147+ }
148148+ if repo_name.is_none()
149149+ && let Ok(env_repo_name) = std::env::var("TANGLED_ON_COMMIT_REPO_NAME")
150150+ {
151151+ repo_name = Some(String::from(env_repo_name))
152152+ }
136153137154 if let Some(ref handle) = handle
138155 && let Some(ref repo_name) = repo_name