113 lines
3.7 KiB
Nix
113 lines
3.7 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.shell.nushell;
|
|
in {
|
|
options = {
|
|
shell.nushell.enable =
|
|
mkEnableOption "enable nushell";
|
|
};
|
|
config = mkIf cfg.enable {
|
|
programs = {
|
|
atuin = {
|
|
enable = true;
|
|
enableNushellIntegration = true;
|
|
flags = [
|
|
"--disable-up-arrow"
|
|
];
|
|
};
|
|
carapace = {
|
|
enable = true;
|
|
enableNushellIntegration = true;
|
|
};
|
|
zoxide = {
|
|
enable = true;
|
|
enableNushellIntegration = true;
|
|
};
|
|
oh-my-posh.enableNushellIntegration = true;
|
|
keychain = {
|
|
enable = true;
|
|
keys = ["id_ed25519"];
|
|
enableNushellIntegration = true;
|
|
extraFlags = [
|
|
"--quiet"
|
|
"--noask"
|
|
];
|
|
};
|
|
nushell = {
|
|
enable = true;
|
|
environmentVariables = {
|
|
CARAPACE_BRIDGES = "zsh,fish,bash,inshellisense";
|
|
CARAPACE_MATCH = 1;
|
|
EDITOR = "hx";
|
|
};
|
|
shellAliases = {
|
|
cd = "z";
|
|
cat = "bat";
|
|
la = "ls -a";
|
|
l = "ls -la";
|
|
nix-shell = "nix-shell --command nu";
|
|
};
|
|
extraConfig = ''
|
|
$env.config = {
|
|
show_banner: false
|
|
shell_integration: {
|
|
# osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
|
|
osc2: true
|
|
# osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
|
|
osc7: true
|
|
# osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
|
|
osc8: true
|
|
# osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
|
|
osc9_9: false
|
|
# osc133 is several escapes invented by Final Term which include the supported ones below.
|
|
# 133;A - Mark prompt start
|
|
# 133;B - Mark prompt end
|
|
# 133;C - Mark pre-execution
|
|
# 133;D;exit - Mark execution finished with exit code
|
|
# This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
|
|
osc133: true
|
|
# osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
|
|
# 633;A - Mark prompt start
|
|
# 633;B - Mark prompt end
|
|
# 633;C - Mark pre-execution
|
|
# 633;D;exit - Mark execution finished with exit code
|
|
# 633;E - Explicitly set the command line with an optional nonce
|
|
# 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
|
|
# and also helps with the run recent menu in vscode
|
|
osc633: true
|
|
# reset_application_mode is escape \x1b[?1l and was added to help ssh work better
|
|
reset_application_mode: true
|
|
}
|
|
|
|
ls: {
|
|
use_ls_colors: true
|
|
clickable_links: true
|
|
}
|
|
|
|
rm: {
|
|
always_trash: true
|
|
}
|
|
edit_mode: 'vi'
|
|
completions: {
|
|
case_sensitive: false
|
|
quick: true
|
|
partial: true
|
|
algorithm: "fuzzy"
|
|
external: {
|
|
enable: true
|
|
# max_results: 100
|
|
# completer: $carapace_completer # check 'carapace_completer'
|
|
}
|
|
}
|
|
}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|