summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAppleTheGolden <scotsbox@protonmail.com>2019-10-05 20:25:25 +0200
committerKevin Song <chipbuster@users.noreply.github.com>2019-10-05 13:25:25 -0500
commit7657af068070b166bf468909bc1c71e8d9ff1b41 (patch)
tree0f0b534f40170d52f0ee0b05b1a0dbdddacee0c3 /src
parente911e76e6bb79788c2d614718a53bb9082f05103 (diff)
feat: Add conda module (#469)
Diffstat (limited to 'src')
-rw-r--r--src/configs/conda.rs29
-rw-r--r--src/configs/mod.rs2
-rw-r--r--src/module.rs1
-rw-r--r--src/modules/conda.rs27
-rw-r--r--src/modules/mod.rs4
5 files changed, 62 insertions, 1 deletions
diff --git a/src/configs/conda.rs b/src/configs/conda.rs
new file mode 100644
index 000000000..7ce644683
--- /dev/null
+++ b/src/configs/conda.rs
@@ -0,0 +1,29 @@
+use crate::config::{ModuleConfig, RootModuleConfig, SegmentConfig};
+
+use ansi_term::{Color, Style};
+use starship_module_config_derive::ModuleConfig;
+
+#[derive(Clone, ModuleConfig)]
+pub struct CondaConfig<'a> {
+ pub symbol: SegmentConfig<'a>,
+ pub environment: SegmentConfig<'a>,
+ pub style: Style,
+ pub disabled: bool,
+}
+
+impl<'a> RootModuleConfig<'a> for CondaConfig<'a> {
+ fn new() -> Self {
+ CondaConfig {
+ symbol: SegmentConfig {
+ value: "C ",
+ style: None,
+ },
+ environment: SegmentConfig {
+ value: "",
+ style: None,
+ },
+ style: Color::Green.bold(),
+ disabled: false,
+ }
+ }
+}
diff --git a/src/configs/mod.rs b/src/configs/mod.rs
index 16461792d..a8e8302dc 100644
--- a/src/configs/mod.rs
+++ b/src/configs/mod.rs
@@ -1,6 +1,7 @@
pub mod aws;
pub mod battery;
pub mod character;
+pub mod conda;
pub mod dotnet;
pub mod kubernetes;
pub mod rust;
@@ -43,6 +44,7 @@ impl<'a> RootModuleConfig<'a> for StarshipRootConfig<'a> {
"rust",
// ↑ Toolchain version modules ↑
"nix_shell",
+ "conda",
"memory_usage",
"aws",
"env_var",
diff --git a/src/module.rs b/src/module.rs
index b06bf5529..846c09ef5 100644
--- a/src/module.rs
+++ b/src/module.rs
@@ -13,6 +13,7 @@ pub const ALL_MODULES: &[&str] = &[
"battery",
"character",
"cmd_duration",
+ "conda",
"directory",
"dotnet",
"env_var",
diff --git a/src/modules/conda.rs b/src/modules/conda.rs
new file mode 100644
index 000000000..4670af9a4
--- /dev/null
+++ b/src/modules/conda.rs
@@ -0,0 +1,27 @@
+use std::env;
+
+use super::{Context, Module};
+
+use crate::config::RootModuleConfig;
+use crate::configs::conda::CondaConfig;
+
+/// Creates a module with the current Conda environment
+///
+/// Will display the Conda environment iff `$CONDA_DEFAULT_ENV` is set.
+pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
+ // Reference implementation: https://github.com/denysdovhan/spaceship-prompt/blob/master/sections/conda.zsh
+ let conda_env = env::var("CONDA_DEFAULT_ENV").ok()?;
+ if conda_env.is_empty() {
+ return None;
+ }
+
+ let mut module = context.new_module("conda");
+ let config = CondaConfig::try_load(module.config);
+
+ module.set_style(config.style);
+
+ module.create_segment("symbol", &config.symbol);
+ module.create_segment("environment", &config.environment.with_value(&conda_env));
+
+ Some(module)
+}
diff --git a/src/modules/mod.rs b/src/modules/mod.rs
index 5a0b8ddcb..9be790cfe 100644
--- a/src/modules/mod.rs
+++ b/src/modules/mod.rs
@@ -2,6 +2,7 @@
mod aws;
mod character;
mod cmd_duration;
+mod conda;
mod directory;
mod dotnet;
mod env_var;
@@ -37,9 +38,10 @@ pub fn handle<'a>(module: &str, context: &'a Context) -> Option<Module<'a>> {
"aws" => aws::module(context),
#[cfg(feature = "battery")]
"battery" => battery::module(context),
- "directory" => directory::module(context),
"character" => character::module(context),
"cmd_duration" => cmd_duration::module(context),
+ "conda" => conda::module(context),
+ "directory" => directory::module(context),
"dotnet" => dotnet::module(context),
"env_var" => env_var::module(context),
"git_branch" => git_branch::module(context),