Nushell: Difference between revisions

Friedow (talk | contribs)
Update nushell installation to not set it as a login shell but instead launch it from the interactive bash shell
 
(3 intermediate revisions by 2 users not shown)
Line 2: Line 2:


== Installation ==
== Installation ==
Using nushell as a login shell is not recommended currently. The problem is that nushell does not pick up your environment variables corretly if you set it as a login shell. To avoid these problems use the default bash interactive shell as a login shell and lunch nushell from there.
Using nushell as a login shell is not recommended. Since nushell is not a POSIX shell, it cannot execute the global shell rcfiles, which means that various environment variables that the general NixOS configuration expects to be set will not be set. To avoid these problems use the default bash interactive shell as a login shell and launch nushell from there:
{{File|3={ pkgs, ... }: {
{{File|3={ pkgs, ... }: {
   environment.shells = [
   environment.shells = [
Line 9: Line 9:


   programs.bash.interactiveShellInit = ''
   programs.bash.interactiveShellInit = ''
     if ! [ "$TERM" = "dumb" ]; then
     if ! [ "$TERM" = "dumb" ] && [ -z "$BASH_EXECUTION_STRING" ]; then
       exec nu
       exec nu
     fi
     fi
   '';
   '';
}|name=/etc/nixos/configuration.nix|lang=nix}}
}|name=/etc/nixos/configuration.nix|lang=nix}}
Also see the [[Command Shell]] example if you want to set Nushell as your default shell
The [[Command Shell]] page explains the process for setting shells as login shells if this is still desired.


== Configuration ==
== Configuration ==
Line 33: Line 33:
         # 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}) {{!}} sort-by type name -i }
         def lla [...args] { ls -la ...(if $args == [] {["."]} else {$args}) | sort-by type name -i }
         def la  [...args] { ls -a  ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i }
         def la  [...args] { ls -a  ...(if $args == [] {["."]} else {$args}) | sort-by type name -i }
         def ll  [...args] { ls -l  ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i }
         def ll  [...args] { ls -l  ...(if $args == [] {["."]} else {$args}) | sort-by type name -i }
         def l  [...args] { ls    ...(if $args == [] {["."]} else {$args}) {{!}} sort-by type name -i }
         def l  [...args] { ls    ...(if $args == [] {["."]} else {$args}) | sort-by type name -i }


         # Completions
         # Completions
         # mainly pieced together from https://www.nushell.sh/cookbook/external_completers.html
         # mainly pieced together from https://www.nushell.sh/cookbook/external_completers.html


         # carapce completions https://www.nushell.sh/cookbook/external_completers.html#carapace-completer
         # carapace completions https://www.nushell.sh/cookbook/external_completers.html#carapace-completer
         # + 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 = {{{!}}spans: list<string>{{!}}
         let carapace_completer = {|spans: list<string>|
           carapace $spans.0 nushell ...$spans
           carapace $spans.0 nushell ...$spans
           | from json
           | from json
           | if ($in | default [] {{!}} where value == $"($spans {{!}} last)ERR" {{!}} is-empty) { $in } else { null }
           | 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 55: Line 55:


         # 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 = {{{!}}spans{{!}}
         let fish_completer = {|spans|
           ${lib.getExe pkgs.fish} --command $'complete "--do-complete=($spans {{!}} str join " ")"'
           ${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 62: Line 62:


         # 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 = {{{!}}spans{{!}}
         let zoxide_completer = {|spans|
             $spans {{!}} skip 1 {{!}} zoxide query -l ...$in {{!}} lines {{!}} where {{{!}}x{{!}} $x != $env.PWD}
             $spans | skip 1 | zoxide query -l ...$in | lines | where {|x| $x != $env.PWD}
         }
         }


Line 69: Line 69:
         # 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 = {{{!}}spans{{!}}
         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 78: Line 78:
             $spans
             $spans
             | skip 1
             | skip 1
             | prepend ($expanded_alias | split row ' ' {{!}} take 1)
             | prepend ($expanded_alias | split row ' ' | take 1)
           } else {
           } else {
             $spans
             $spans
Line 85: Line 85:


           match $spans.0 {
           match $spans.0 {
             __zoxide_z {{!}} __zoxide_zi => $zoxide_completer
             __zoxide_z | __zoxide_zi => $zoxide_completer
             _ => $carapace_completer
             _ => $carapace_completer
           } {{!}} do $in $spans
           } | do $in $spans
         }
         }


Line 106: Line 106:
           }
           }
         }  
         }  
         $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 134: Line 134:
}
}
</nowiki>|name=~/.config/nixpkgs/home.nix|lang=nix}}
</nowiki>|name=~/.config/nixpkgs/home.nix|lang=nix}}
==See also==
==See also==
* [[Command Shell]]
* [[Command Shell]]
[[Category:Shell]]
[[Category:Shell]]