diff --git a/README.md b/README.md index 7637ff9..1dc08f8 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,19 @@ Add this into your `config.fish`. als init fish | source ``` +### Nushell + +Add the following to the end of your Nushell env file (find it by running $nu.env-path in Nushell):: +```shell +mkdir ~/.cache/als +als init nu | save -f ~/.cache/als/init.nu +``` + +And add the following to the end of your Nushell configuration (find it by running $nu.config-path):: +```shell +source ~/.cache/als/init.nu +``` + ## Alias config Put a config file in `~/.config/alias.toml`. diff --git a/src/init/mod.rs b/src/init/mod.rs index 5e05aaa..08eb784 100644 --- a/src/init/mod.rs +++ b/src/init/mod.rs @@ -1,5 +1,6 @@ mod bash; mod fish; +mod nu; mod pwsh; mod zsh; @@ -20,6 +21,9 @@ pub(crate) fn init(config: AliasConfig, args: Vec) { "fish" => { fish::init(config); } + "nu" => { + nu::init(config); + } _ => unreachable!("Unsupported shell"), } } diff --git a/src/init/nu.nu b/src/init/nu.nu new file mode 100644 index 0000000..942a7de --- /dev/null +++ b/src/init/nu.nu @@ -0,0 +1 @@ +$env.ALIAS_SHELL = 'nu' diff --git a/src/init/nu.rs b/src/init/nu.rs new file mode 100644 index 0000000..15a79ad --- /dev/null +++ b/src/init/nu.rs @@ -0,0 +1,22 @@ +use crate::model::{AliasConfig, AliasVisitor, VisitorAliasValue}; + +const NU_SCRIPT: &str = include_str!("./nu.nu"); + +#[inline] +pub fn print_alias(name: &str, value: V) { + println!("alias {} = {}", name, value) +} + +struct NuVisitor {} + +impl AliasVisitor for NuVisitor { + fn visit<'a>(&mut self, (name, value): (&'a str, VisitorAliasValue<'a>)) { + print_alias(name, value); + } +} + +pub fn init(config: AliasConfig) { + println!("{NU_SCRIPT}"); + + config.visit_aliases("nu", &mut NuVisitor {}); +}