diff --git a/assets/settings/default.json b/assets/settings/default.json index a222a16cb2..d321c176a5 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -1350,6 +1350,8 @@ // "load_direnv": "direct" // 2. Load direnv configuration through the shell hook, works for POSIX shells and fish. // "load_direnv": "shell_hook" + // 3. Don't load direnv configuration at all. + // "load_direnv": "disabled" "load_direnv": "direct", "edit_predictions": { // A list of globs representing files that edit predictions should be disabled for. diff --git a/crates/project/src/environment.rs b/crates/project/src/environment.rs index 32ed2f8766..c4e807621e 100644 --- a/crates/project/src/environment.rs +++ b/crates/project/src/environment.rs @@ -314,6 +314,10 @@ async fn load_directory_shell_environment( load_direnv: DirenvSettings, tx: mpsc::UnboundedSender, ) -> anyhow::Result> { + if let DirenvSettings::Disabled = load_direnv { + return Ok(HashMap::default()); + } + let meta = smol::fs::metadata(&abs_path).await.with_context(|| { tx.unbounded_send(format!("Failed to open {}", abs_path.display())) .ok(); @@ -355,6 +359,7 @@ async fn load_directory_shell_environment( // even if direnv direct mode is enabled. let direnv_environment = match load_direnv { DirenvSettings::ShellHook => None, + DirenvSettings::Disabled => bail!("direnv integration is disabled"), // Note: direnv is not available on Windows, so we skip direnv processing // and just return the shell environment DirenvSettings::Direct if cfg!(target_os = "windows") => None, diff --git a/crates/settings/src/settings_content/project.rs b/crates/settings/src/settings_content/project.rs index 0076721228..25a36580b0 100644 --- a/crates/settings/src/settings_content/project.rs +++ b/crates/settings/src/settings_content/project.rs @@ -507,6 +507,8 @@ pub enum DirenvSettings { /// Load direnv configuration directly using `direnv export json` #[default] Direct, + /// Do not load direnv configuration + Disabled, } #[derive( diff --git a/docs/src/configuring-zed.md b/docs/src/configuring-zed.md index 2d86667765..3b90120407 100644 --- a/docs/src/configuring-zed.md +++ b/docs/src/configuring-zed.md @@ -584,10 +584,11 @@ Note: Dirty files (files with unsaved changes) will not be automatically closed **Options** -There are two options to choose from: +There are three options to choose from: 1. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish. 2. `direct`: Use `direnv export json` to load direnv. This will load direnv directly without relying on the shell hook and might cause some inconsistencies. This allows direnv to work with any shell. +3. `disabled`: No shell environment will be loaded automatically; direnv must be invoked manually (e.g. with `direnv exec`) to be used. ## Double Click In Multibuffer