diff --git a/docs/config/README.md b/docs/config/README.md
index 868482c39..03ce67f79 100644
--- a/docs/config/README.md
+++ b/docs/config/README.md
@@ -289,15 +289,21 @@ prefix = "underwent "
 ## Conda
 
 The `conda` module shows the current conda environment, if `$CONDA_DEFAULT_ENV` is set.
-Note: This does not suppress conda's own prompt modifier, you may want to run `conda config --set changeps1 False`
+
+::: tip
+
+This does not suppress conda's own prompt modifier, you may want to run `conda config --set changeps1 False`.
+
+:::
 
 ### Options
 
-| Variable   | Default        | Description                                  |
-| ---------- | -------------- | -------------------------------------------- |
-| `symbol`   | `"C "`         | The symbol used before the environment name. |
-| `style`    | `"bold green"` | The style for the module.                    |
-| `disabled` | `false`        | Disables the `conda` module.                 |
+| Variable            | Default        | Description                                                                                                                                                                                   |
+| ------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `truncation_length` | `1`            | The number of directories the environment path should be truncated to, if the environment was created via `conda create -p [path]`. `0` means no truncation. Also see the [`directory`](#directory) module. |
+| `symbol`            | `"C "`         | The symbol used before the environment name.                                                                                                                                                  |
+| `style`             | `"bold green"` | The style for the module.                                                                                                                                                                     |
+| `disabled`          | `false`        | Disables the `conda` module.                                                                                                                                                                  |
 
 ### Example
 
diff --git a/src/configs/conda.rs b/src/configs/conda.rs
index 7ce644683..8e3f75a22 100644
--- a/src/configs/conda.rs
+++ b/src/configs/conda.rs
@@ -5,6 +5,7 @@ use starship_module_config_derive::ModuleConfig;
 
 #[derive(Clone, ModuleConfig)]
 pub struct CondaConfig<'a> {
+    pub truncation_length: usize,
     pub symbol: SegmentConfig<'a>,
     pub environment: SegmentConfig<'a>,
     pub style: Style,
@@ -14,6 +15,7 @@ pub struct CondaConfig<'a> {
 impl<'a> RootModuleConfig<'a> for CondaConfig<'a> {
     fn new() -> Self {
         CondaConfig {
+            truncation_length: 1,
             symbol: SegmentConfig {
                 value: "C ",
                 style: None,
diff --git a/src/modules/conda.rs b/src/modules/conda.rs
index 49a641a75..13c57874a 100644
--- a/src/modules/conda.rs
+++ b/src/modules/conda.rs
@@ -2,6 +2,7 @@ use std::env;
 
 use super::{Context, Module};
 
+use super::utils::directory::truncate;
 use crate::config::RootModuleConfig;
 use crate::configs::conda::CondaConfig;
 
@@ -18,6 +19,8 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
     let mut module = context.new_module("conda");
     let config = CondaConfig::try_load(module.config);
 
+    let conda_env = truncate(conda_env, config.truncation_length);
+
     module.set_style(config.style);
 
     module.create_segment("symbol", &config.symbol);
diff --git a/src/modules/directory.rs b/src/modules/directory.rs
index a221515e2..61484c17d 100644
--- a/src/modules/directory.rs
+++ b/src/modules/directory.rs
@@ -4,6 +4,7 @@ use unicode_segmentation::UnicodeSegmentation;
 
 use super::{Context, Module};
 
+use super::utils::directory::truncate;
 use crate::config::{RootModuleConfig, SegmentConfig};
 use crate::configs::directory::DirectoryConfig;
 
@@ -137,30 +138,6 @@ const fn replace_c_dir(path: String) -> String {
     path
 }
 
-/// Truncate a path to only have a set number of path components
-///
-/// Will truncate a path to only show the last `length` components in a path.
-/// If a length of `0` is provided, the path will not be truncated.
-fn truncate(dir_string: String, length: usize) -> String {
-    if length == 0 {
-        return dir_string;
-    }
-
-    let mut components = dir_string.split('/').collect::<Vec<&str>>();
-
-    // If the first element is "" then there was a leading "/" and we should remove it so we can check the actual count of components
-    if components[0] == "" {
-        components.remove(0);
-    }
-
-    if components.len() <= length {
-        return dir_string;
-    }
-
-    let truncated_components = &components[components.len() - length..];
-    truncated_components.join("/")
-}
-
 /// Takes part before contracted path and replaces it with fish style path
 ///
 /// Will take the first letter of each directory before the contracted path and
@@ -258,48 +235,6 @@ mod tests {
         assert_eq!(output, "/c");
     }
 
-    #[test]
-    fn truncate_smaller_path_than_provided_length() {
-        let path = "~/starship";
-        let output = truncate(path.to_string(), 3);
-        assert_eq!(output, "~/starship")
-    }
-
-    #[test]
-    fn truncate_same_path_as_provided_length() {
-        let path = "~/starship/engines";
-        let output = truncate(path.to_string(), 3);
-        assert_eq!(output, "~/starship/engines")
-    }
-
-    #[test]
-    fn truncate_slightly_larger_path_than_provided_length() {
-        let path = "~/starship/engines/booster";
-        let output = truncate(path.to_string(), 3);
-        assert_eq!(output, "starship/engines/booster")
-    }
-
-    #[test]
-    fn truncate_larger_path_than_provided_length() {
-        let path = "~/starship/engines/booster/rocket";
-        let output = truncate(path.to_string(), 3);
-        assert_eq!(output, "engines/booster/rocket")
-    }
-
-    #[test]
-    fn truncate_same_path_as_provided_length_from_root() {
-        let path = "/starship/engines/booster";
-        let output = truncate(path.to_string(), 3);
-        assert_eq!(output, "/starship/engines/booster");
-    }
-
-    #[test]
-    fn truncate_larger_path_than_provided_length_from_root() {
-        let path = "/starship/engines/booster/rocket";
-        let output = truncate(path.to_string(), 3);
-        assert_eq!(output, "engines/booster/rocket");
-    }
-
     #[test]
     fn fish_style_with_user_home_contracted_path() {
         let path = "~/starship/engines/booster/rocket";
diff --git a/src/modules/utils/directory.rs b/src/modules/utils/directory.rs
new file mode 100644
index 000000000..7c266d06c
--- /dev/null
+++ b/src/modules/utils/directory.rs
@@ -0,0 +1,70 @@
+/// Truncate a path to only have a set number of path components
+///
+/// Will truncate a path to only show the last `length` components in a path.
+/// If a length of `0` is provided, the path will not be truncated.
+pub fn truncate(dir_string: String, length: usize) -> String {
+    if length == 0 {
+        return dir_string;
+    }
+
+    let mut components = dir_string.split('/').collect::<Vec<&str>>();
+
+    // If the first element is "" then there was a leading "/" and we should remove it so we can check the actual count of components
+    if components[0] == "" {
+        components.remove(0);
+    }
+
+    if components.len() <= length {
+        return dir_string;
+    }
+
+    let truncated_components = &components[components.len() - length..];
+    truncated_components.join("/")
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn truncate_smaller_path_than_provided_length() {
+        let path = "~/starship";
+        let output = truncate(path.to_string(), 3);
+        assert_eq!(output, "~/starship")
+    }
+
+    #[test]
+    fn truncate_same_path_as_provided_length() {
+        let path = "~/starship/engines";
+        let output = truncate(path.to_string(), 3);
+        assert_eq!(output, "~/starship/engines")
+    }
+
+    #[test]
+    fn truncate_slightly_larger_path_than_provided_length() {
+        let path = "~/starship/engines/booster";
+        let output = truncate(path.to_string(), 3);
+        assert_eq!(output, "starship/engines/booster")
+    }
+
+    #[test]
+    fn truncate_larger_path_than_provided_length() {
+        let path = "~/starship/engines/booster/rocket";
+        let output = truncate(path.to_string(), 3);
+        assert_eq!(output, "engines/booster/rocket")
+    }
+
+    #[test]
+    fn truncate_same_path_as_provided_length_from_root() {
+        let path = "/starship/engines/booster";
+        let output = truncate(path.to_string(), 3);
+        assert_eq!(output, "/starship/engines/booster");
+    }
+
+    #[test]
+    fn truncate_larger_path_than_provided_length_from_root() {
+        let path = "/starship/engines/booster/rocket";
+        let output = truncate(path.to_string(), 3);
+        assert_eq!(output, "engines/booster/rocket");
+    }
+}
diff --git a/src/modules/utils/mod.rs b/src/modules/utils/mod.rs
index 9e69310b2..6838fb19e 100644
--- a/src/modules/utils/mod.rs
+++ b/src/modules/utils/mod.rs
@@ -1 +1,2 @@
+pub mod directory;
 pub mod java_version_parser;
diff --git a/tests/testsuite/conda.rs b/tests/testsuite/conda.rs
index 4b48727ba..f7c2e71c3 100644
--- a/tests/testsuite/conda.rs
+++ b/tests/testsuite/conda.rs
@@ -30,3 +30,14 @@ fn env_set() -> io::Result<()> {
     assert_eq!(expected, actual);
     Ok(())
 }
+
+#[test]
+fn truncate() -> io::Result<()> {
+    let output = common::render_module("conda").env_clear().env("CONDA_DEFAULT_ENV", "/some/really/long/and/really/annoying/path/that/shouldnt/be/displayed/fully/conda/my_env").output()?;
+
+    let expected = format!("via {} ", Color::Green.bold().paint("C my_env"));
+    let actual = String::from_utf8(output.stdout).unwrap();
+
+    assert_eq!(expected, actual);
+    Ok(())
+}