mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-11-11 07:40:57 +00:00
feat: Add conda module (#469)
This commit is contained in:
parent
e911e76e6b
commit
7657af0680
@ -99,6 +99,7 @@ prompt_order = [
|
|||||||
"ruby",
|
"ruby",
|
||||||
"rust",
|
"rust",
|
||||||
"nix_shell",
|
"nix_shell",
|
||||||
|
"conda",
|
||||||
"memory_usage",
|
"memory_usage",
|
||||||
"aws",
|
"aws",
|
||||||
"env_var",
|
"env_var",
|
||||||
@ -276,6 +277,28 @@ min_time = 4
|
|||||||
prefix = "underwent "
|
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`
|
||||||
|
|
||||||
|
### 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. |
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# ~/.config/starship.toml
|
||||||
|
|
||||||
|
[conda]
|
||||||
|
style = "dimmed green"
|
||||||
|
```
|
||||||
|
|
||||||
## Directory
|
## Directory
|
||||||
|
|
||||||
The `directory` module shows the path to your current directory, truncated to
|
The `directory` module shows the path to your current directory, truncated to
|
||||||
|
29
src/configs/conda.rs
Normal file
29
src/configs/conda.rs
Normal file
@ -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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
pub mod aws;
|
pub mod aws;
|
||||||
pub mod battery;
|
pub mod battery;
|
||||||
pub mod character;
|
pub mod character;
|
||||||
|
pub mod conda;
|
||||||
pub mod dotnet;
|
pub mod dotnet;
|
||||||
pub mod kubernetes;
|
pub mod kubernetes;
|
||||||
pub mod rust;
|
pub mod rust;
|
||||||
@ -43,6 +44,7 @@ impl<'a> RootModuleConfig<'a> for StarshipRootConfig<'a> {
|
|||||||
"rust",
|
"rust",
|
||||||
// ↑ Toolchain version modules ↑
|
// ↑ Toolchain version modules ↑
|
||||||
"nix_shell",
|
"nix_shell",
|
||||||
|
"conda",
|
||||||
"memory_usage",
|
"memory_usage",
|
||||||
"aws",
|
"aws",
|
||||||
"env_var",
|
"env_var",
|
||||||
|
@ -13,6 +13,7 @@ pub const ALL_MODULES: &[&str] = &[
|
|||||||
"battery",
|
"battery",
|
||||||
"character",
|
"character",
|
||||||
"cmd_duration",
|
"cmd_duration",
|
||||||
|
"conda",
|
||||||
"directory",
|
"directory",
|
||||||
"dotnet",
|
"dotnet",
|
||||||
"env_var",
|
"env_var",
|
||||||
|
27
src/modules/conda.rs
Normal file
27
src/modules/conda.rs
Normal file
@ -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)
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
mod aws;
|
mod aws;
|
||||||
mod character;
|
mod character;
|
||||||
mod cmd_duration;
|
mod cmd_duration;
|
||||||
|
mod conda;
|
||||||
mod directory;
|
mod directory;
|
||||||
mod dotnet;
|
mod dotnet;
|
||||||
mod env_var;
|
mod env_var;
|
||||||
@ -37,9 +38,10 @@ pub fn handle<'a>(module: &str, context: &'a Context) -> Option<Module<'a>> {
|
|||||||
"aws" => aws::module(context),
|
"aws" => aws::module(context),
|
||||||
#[cfg(feature = "battery")]
|
#[cfg(feature = "battery")]
|
||||||
"battery" => battery::module(context),
|
"battery" => battery::module(context),
|
||||||
"directory" => directory::module(context),
|
|
||||||
"character" => character::module(context),
|
"character" => character::module(context),
|
||||||
"cmd_duration" => cmd_duration::module(context),
|
"cmd_duration" => cmd_duration::module(context),
|
||||||
|
"conda" => conda::module(context),
|
||||||
|
"directory" => directory::module(context),
|
||||||
"dotnet" => dotnet::module(context),
|
"dotnet" => dotnet::module(context),
|
||||||
"env_var" => env_var::module(context),
|
"env_var" => env_var::module(context),
|
||||||
"git_branch" => git_branch::module(context),
|
"git_branch" => git_branch::module(context),
|
||||||
|
29
tests/testsuite/conda.rs
Normal file
29
tests/testsuite/conda.rs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
use ansi_term::Color;
|
||||||
|
use std::io;
|
||||||
|
|
||||||
|
use crate::common;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn not_in_env() -> io::Result<()> {
|
||||||
|
let output = common::render_module("conda").env_clear().output()?;
|
||||||
|
|
||||||
|
let expected = "";
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn env_set() -> io::Result<()> {
|
||||||
|
let output = common::render_module("conda")
|
||||||
|
.env_clear()
|
||||||
|
.env("CONDA_DEFAULT_ENV", "astronauts")
|
||||||
|
.output()?;
|
||||||
|
|
||||||
|
let expected = format!("via {} ", Color::Green.bold().paint("C astronauts"));
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
@ -2,6 +2,7 @@ mod aws;
|
|||||||
mod character;
|
mod character;
|
||||||
mod cmd_duration;
|
mod cmd_duration;
|
||||||
mod common;
|
mod common;
|
||||||
|
mod conda;
|
||||||
mod configuration;
|
mod configuration;
|
||||||
mod directory;
|
mod directory;
|
||||||
mod dotnet;
|
mod dotnet;
|
||||||
|
Loading…
Reference in New Issue
Block a user