1{ pkgs, lib, ... }:
2{
3 programs.carapace.enable = true;
4 programs.carapace.enableNushellIntegration = true;
5 programs.nushell = {
6 enable = true;
7 shellAliases = {
8 myip = lib.mkForce "echo";
9 };
10 extraEnv = ''
11 source-env ${./prompt.nu}
12 '';
13 extraConfig = ''
14 let carapace_completer = {|spans: list<string>|
15 carapace $spans.0 nushell ...$spans
16 | from json
17 | if ($in | default [] | where value == $"($spans | last)ERR" | is-empty) { $in } else { null }
18 }
19 $env.CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense'
20
21 let fish_completer = {|spans|
22 ${lib.getExe pkgs.fish} --command $'complete "--do-complete=($spans | str join " ")"'
23 | $"value(char tab)description(char newline)" + $in
24 | from tsv --flexible --no-infer
25 }
26
27 let zoxide_completer = {|spans|
28 $spans | skip 1 | zoxide query -l ...$in | lines | where {|x| $x != $env.PWD}
29 }
30
31 let multiple_completers = {|spans|
32 ## alias fixer start https://www.nushell.sh/cookbook/external_completers.html#alias-completions
33 let expanded_alias = scope aliases
34 | where name == $spans.0
35 | get -i 0.expansion
36
37 let spans = if $expanded_alias != null {
38 $spans
39 | skip 1
40 | prepend ($expanded_alias | split row ' ' | take 1)
41 } else {
42 $spans
43 }
44 ## alias fixer end
45
46 match $spans.0 {
47 __zoxide_z | __zoxide_zi => $zoxide_completer
48 _ => $carapace_completer
49 } | do $in $spans
50 }
51
52 $env.config = {
53 show_banner: false,
54 completions: {
55 case_sensitive: false # case-sensitive completions
56 quick: true # set to false to prevent auto-selecting completions
57 partial: true # set to false to prevent partial filling of the prompt
58 algorithm: "fuzzy" # prefix or fuzzy
59 external: {
60 # set to false to prevent nushell looking into $env.PATH to find more suggestions
61 enable: true
62 # set to lower can improve completion performance at the cost of omitting some options
63 max_results: 100
64 completer: $multiple_completers
65 }
66 }
67 }
68 $env.PATH = ($env.PATH |
69 split row (char esep) |
70 append /usr/bin/env
71 )
72
73 source ${./aliases.nu}
74 '';
75 };
76}