Nushell: Difference between revisions
Appearance
mention environment shells in the example snippet |
general enhancement |
||
Line 1: | Line 1: | ||
[https://www.nushell.sh/ Nushell] is a | [https://www.nushell.sh/ Nushell] is a powerful and modern non-POSIX [[Command Shell|shell]] written in Rust | ||
== Installation == | == Installation == | ||
See [[Command Shell]] | See [[Command Shell]] example if you want Nushell as your default shell | ||
example if you want Nushell as your default shell | {{file|3={ | ||
{{file| | pkgs, | ||
environment.shells = [ pkgs.nushell ]; | ... | ||
users.users.myuser= { | }: | ||
{ | |||
environment.shells = [ | |||
}; | pkgs.nushell | ||
]; | |||
users.users.myuser= { | |||
shell = pkgs.nushell; | |||
}; | |||
}|name=/etc/nixos/configuration.nix|lang=nix}} | |||
== Configuration == | == Configuration == | ||
Nushell can be configured with [[Home Manager]] | Nushell can be configured with [[Home Manager]] | ||
==== | ====Example==== | ||
A configuration with [https://starship.rs/ Starship] prompt and autosuggestion support with [https://search.nixos.org/packages?show=carapace carapace] or [https://fishshell.com/ fish shell]: | |||
{ lib, pkgs, ... }: | {{File|3={ lib, pkgs, ... }: | ||
{ | { | ||
programs = { | programs = { | ||
Line 28: | Line 32: | ||
# Common ls aliases and sort them by type and then name | # Common ls aliases and sort them by type and then name | ||
# Inspired by https://github.com/nushell/nushell/issues/7190 | # Inspired by https://github.com/nushell/nushell/issues/7190 | ||
def lla [...args] { ls -la ...(if $args == [] {["."]} else {$args}) | def lla [...args] { ls -la ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i } | ||
def la [...args] { ls -a ...(if $args == [] {["."]} else {$args}) | def la [...args] { ls -a ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i } | ||
def ll [...args] { ls -l ...(if $args == [] {["."]} else {$args}) | def ll [...args] { ls -l ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i } | ||
def l [...args] { ls ...(if $args == [] {["."]} else {$args}) | def l [...args] { ls ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i } | ||
# Completions | # Completions | ||
Line 39: | Line 43: | ||
# + fix https://www.nushell.sh/cookbook/external_completers.html#err-unknown-shorthand-flag-using-carapace | # + fix https://www.nushell.sh/cookbook/external_completers.html#err-unknown-shorthand-flag-using-carapace | ||
# enable the package and integration bellow | # enable the package and integration bellow | ||
let carapace_completer = { | let carapace_completer = {{{!}}spans: list<string>{{!}} | ||
carapace $spans.0 nushell ...$spans | carapace $spans.0 nushell ...$spans | ||
| from json | | from json | ||
| if ($in | default [] | | if ($in | default [] {{!}} where value == $"($spans {{!}} last)ERR" {{!}} is-empty) { $in } else { null } | ||
} | } | ||
# some completions are only available through a bridge | # some completions are only available through a bridge | ||
Line 50: | Line 54: | ||
# fish completions https://www.nushell.sh/cookbook/external_completers.html#fish-completer | # fish completions https://www.nushell.sh/cookbook/external_completers.html#fish-completer | ||
let fish_completer = { | let fish_completer = {{{!}}spans{{!}} | ||
${lib.getExe pkgs.fish} --command $'complete "--do-complete=($spans | ${lib.getExe pkgs.fish} --command $'complete "--do-complete=($spans {{!}} str join " ")"' | ||
| $"value(char tab)description(char newline)" + $in | | $"value(char tab)description(char newline)" + $in | ||
| from tsv --flexible --no-infer | | from tsv --flexible --no-infer | ||
Line 57: | Line 61: | ||
# zoxide completions https://www.nushell.sh/cookbook/external_completers.html#zoxide-completer | # zoxide completions https://www.nushell.sh/cookbook/external_completers.html#zoxide-completer | ||
let zoxide_completer = { | let zoxide_completer = {{{!}}spans{{!}} | ||
$spans | $spans {{!}} skip 1 {{!}} zoxide query -l ...$in {{!}} lines {{!}} where {{{!}}x{{!}} $x != $env.PWD} | ||
} | } | ||
Line 64: | Line 68: | ||
# the default will be carapace, but you can also switch to fish | # the default will be carapace, but you can also switch to fish | ||
# https://www.nushell.sh/cookbook/external_completers.html#alias-completions | # https://www.nushell.sh/cookbook/external_completers.html#alias-completions | ||
let multiple_completers = { | let multiple_completers = {{{!}}spans{{!}} | ||
## alias fixer start https://www.nushell.sh/cookbook/external_completers.html#alias-completions | ## alias fixer start https://www.nushell.sh/cookbook/external_completers.html#alias-completions | ||
let expanded_alias = scope aliases | let expanded_alias = scope aliases | ||
Line 73: | Line 77: | ||
$spans | $spans | ||
| skip 1 | | skip 1 | ||
| prepend ($expanded_alias | split row ' ' | | prepend ($expanded_alias | split row ' ' {{!}} take 1) | ||
} else { | } else { | ||
$spans | $spans | ||
Line 80: | Line 84: | ||
match $spans.0 { | match $spans.0 { | ||
__zoxide_z | __zoxide_z {{!}} __zoxide_zi => $zoxide_completer | ||
_ => $carapace_completer | _ => $carapace_completer | ||
} | } {{!}} do $in $spans | ||
} | } | ||
Line 101: | Line 105: | ||
} | } | ||
} | } | ||
$env.PATH = ($env.PATH | $env.PATH = ($env.PATH {{!}} | ||
split row (char esep) | split row (char esep) {{!}} | ||
prepend /home/myuser/.apps | prepend /home/myuser/.apps {{!}} | ||
append /usr/bin/env | append /usr/bin/env | ||
) | ) | ||
Line 127: | Line 131: | ||
}; | }; | ||
}; | }; | ||
} | }|name=~/.config/nixpkgs/home.nix|lang=nix}} | ||
Legacy config:{{file|3=programs = { | |||
programs = { | |||
nushell = { enable = true; | nushell = { enable = true; | ||
# The config.nu can be anywhere you want if you like to edit your Nushell with Nu | # The config.nu can be anywhere you want if you like to edit your Nushell with Nu | ||
Line 136: | Line 139: | ||
# for editing directly to config.nu | # for editing directly to config.nu | ||
extraConfig = '' | extraConfig = '' | ||
let carapace_completer = { | let carapace_completer = {{{!}}spans{{!}} | ||
carapace $spans.0 nushell ...$spans | carapace $spans.0 nushell ...$spans {{!}} from json | ||
} | } | ||
$env.config = { | $env.config = { | ||
Line 155: | Line 158: | ||
} | } | ||
} | } | ||
$env.PATH = ($env.PATH | $env.PATH = ($env.PATH {{!}} | ||
split row (char esep) | split row (char esep) {{!}} | ||
prepend /home/myuser/.apps | prepend /home/myuser/.apps {{!}} | ||
append /usr/bin/env | append /usr/bin/env | ||
) | ) | ||
Line 179: | Line 182: | ||
}; | }; | ||
}; | }; | ||
}; | };|name=~/.config/nixpkgs/home.nix|lang=nix}} | ||
==See also== | ==See also== | ||
* [[Command Shell]] | * [[Command Shell]] | ||
[[Category:Shell]] | [[Category:Shell]] |
Revision as of 17:27, 13 August 2025
Nushell is a powerful and modern non-POSIX shell written in Rust
Installation
See Command Shell example if you want Nushell as your default shell
❄︎ /etc/nixos/configuration.nix
{
pkgs,
...
}:
{
environment.shells = [
pkgs.nushell
];
users.users.myuser= {
shell = pkgs.nushell;
};
}
Configuration
Nushell can be configured with Home Manager
Example
A configuration with Starship prompt and autosuggestion support with carapace or fish shell:
❄︎ ~/.config/nixpkgs/home.nix
$"value(char tab)description(char newline)" + $in
Legacy config:
❄︎ ~/.config/nixpkgs/home.nix
programs = {
nushell = { enable = true;
# The config.nu can be anywhere you want if you like to edit your Nushell with Nu
configFile.source = ./.../config.nu;
# for editing directly to config.nu
extraConfig = ''
let carapace_completer = {|spans|
carapace $spans.0 nushell ...$spans | from json
}
$env.config = {
show_banner: false,
completions: {
case_sensitive: false # case-sensitive completions
quick: true # set to false to prevent auto-selecting completions
partial: true # set to false to prevent partial filling of the prompt
algorithm: "fuzzy" # prefix or fuzzy
external: {
# set to false to prevent nushell looking into $env.PATH to find more suggestions
enable: true
# set to lower can improve completion performance at the cost of omitting some options
max_results: 100
completer: $carapace_completer # check 'carapace_completer'
}
}
}
$env.PATH = ($env.PATH |
split row (char esep) |
prepend /home/myuser/.apps |
append /usr/bin/env
)
'';
shellAliases = {
vi = "hx";
vim = "hx";
nano = "hx";
};
};
carapace.enable = true;
carapace.enableNushellIntegration = true;
starship = { enable = true;
settings = {
add_newline = true;
character = {
success_symbol = "[➜](bold green)";
error_symbol = "[➜](bold red)";
};
};
};
};