357 lines
13 KiB
Nix
357 lines
13 KiB
Nix
{ pkgs, config, lib, inputs, ... }:
|
||
let
|
||
cfg = config.ragon.nushell;
|
||
aliasesJson = pkgs.writeText "shell-aliases.json" (builtins.toJSON config.home.shellAliases);
|
||
in
|
||
{
|
||
options.ragon.nushell.enable = lib.mkOption { default = false; };
|
||
config = lib.mkIf cfg.enable {
|
||
programs.direnv = {
|
||
enable = true;
|
||
enableNushellIntegration = true;
|
||
};
|
||
programs.nushell = {
|
||
enable = true;
|
||
extraConfig = ''
|
||
let carapace_completer = {|spans: list<string>|
|
||
carapace $spans.0 nushell ...$spans
|
||
| from json
|
||
| if ($in | default [] | where value =~ '^-.*ERR$' | is-empty) { $in } else { null }
|
||
}
|
||
let external_completer = {|spans|
|
||
let expanded_alias = scope aliases
|
||
| where name == $spans.0
|
||
| get -i 0.expansion
|
||
|
||
let spans = if $expanded_alias != null {
|
||
$spans
|
||
| skip 1
|
||
| prepend ($expanded_alias | split row ' ' | take 1)
|
||
} else {
|
||
$spans
|
||
}
|
||
|
||
match $spans.0 {
|
||
# carapace completions are incorrect for nu
|
||
# nu => $fish_completer
|
||
# fish completes commits and branch names in a nicer way
|
||
# git => $fish_completer
|
||
# carapace doesn't have completions for asdf
|
||
# asdf => $fish_completer
|
||
# use zoxide completions for zoxide commands
|
||
# __zoxide_z | __zoxide_zi => $zoxide_completer
|
||
_ => $carapace_completer
|
||
} | do $in $spans
|
||
}
|
||
$env.config = {
|
||
edit_mode: vi
|
||
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: $external_completer # check 'carapace_completer'
|
||
}
|
||
}
|
||
}
|
||
$env.EDITOR = "hx"
|
||
$env.VISUAL = "hx"
|
||
$env.NIX_REMOTE = "daemon"
|
||
$env.NIX_USER_PROFILE_DIR = $"/nix/var/nix/profiles/per-user/($env.USER)"
|
||
$env.NIX_PROFILES = $"/nix/var/nix/profiles/default:($env.HOME)/.nix-profile"
|
||
$env.NIX_SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt"
|
||
$env.NIX_PATH = "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs:/nix/var/nix/profiles/per-user/root/channels"
|
||
$env.PATH = ($env.PATH |
|
||
split row (char esep) |
|
||
append /usr/bin/env |
|
||
append $"($env.HOME)/.nix-profile/bin" |
|
||
append "/nix/var/nix/profiles/default/bin" |
|
||
append $"/etc/profiles/per-user/($env.USER)/bin" |
|
||
append "/run/current-system/sw/bin" |
|
||
append "/opt/homebrew/bin" |
|
||
append $"($env.HOME)/.cargo/bin" |
|
||
append $"($env.HOME)/.local/bin"
|
||
)
|
||
alias no = open
|
||
alias open = ^open
|
||
alias l = ls -al
|
||
alias ll = ls -l
|
||
alias ga = git add
|
||
alias gaa = git add -A
|
||
alias gd = git diff
|
||
alias gc = git commit
|
||
alias gp = git push
|
||
alias gpl = git pull
|
||
'';
|
||
shellAliases = {
|
||
vi = "hx";
|
||
vim = "hx";
|
||
nano = "hx";
|
||
};
|
||
};
|
||
programs.carapace.enable = true;
|
||
programs.carapace.enableNushellIntegration = true;
|
||
|
||
programs.starship = {
|
||
enable = true;
|
||
settings = {
|
||
"add_newline" = true;
|
||
"aws" = {
|
||
"disabled" = true;
|
||
"format" = " [aws](italic) [$symbol $profile $region]($style)";
|
||
"style" = "bold blue";
|
||
"symbol" = "▲ ";
|
||
};
|
||
"battery" = {
|
||
"charging_symbol" = "[↑](italic bold green)";
|
||
"discharging_symbol" = "↓";
|
||
"display" = [
|
||
{
|
||
"style" = "italic bold red";
|
||
"threshold" = 20;
|
||
}
|
||
{
|
||
"style" = "italic dimmed bright-purple";
|
||
"threshold" = 60;
|
||
}
|
||
{
|
||
"style" = "italic dimmed yellow";
|
||
"threshold" = 70;
|
||
}
|
||
];
|
||
"empty_symbol" = "▃";
|
||
"format" = "[ $percentage $symbol]($style)";
|
||
"full_symbol" = "█";
|
||
"unknown_symbol" = "░";
|
||
};
|
||
"buf" = {
|
||
"format" = " [buf](italic) [$symbol $version $buf_version]($style)";
|
||
"symbol" = "■ ";
|
||
};
|
||
"c" = {
|
||
"format" = " [$symbol($version(-$name))]($style)";
|
||
"symbol" = "ℂ ";
|
||
};
|
||
"character" = {
|
||
"error_symbol" = "[○](italic purple)";
|
||
"format" = "$symbol ";
|
||
"success_symbol" = "[◎](bold italic bright-yellow)";
|
||
"vimcmd_replace_one_symbol" = "◌";
|
||
"vimcmd_replace_symbol" = "□";
|
||
"vimcmd_symbol" = "[■](italic dimmed green)";
|
||
"vimcmd_visual_symbol" = "▼";
|
||
};
|
||
"cmd_duration" = {
|
||
"format" = "[◄ $duration ](italic white)";
|
||
};
|
||
"conda" = {
|
||
"format" = " conda [$symbol$environment]($style)";
|
||
"symbol" = "◯ ";
|
||
};
|
||
"continuation_prompt" = "[▸▹ ](dimmed white)";
|
||
"dart" = {
|
||
"format" = " dart [$symbol($version )]($style)";
|
||
"symbol" = "◁◅ ";
|
||
};
|
||
"deno" = {
|
||
"format" = " [deno](italic) [∫ $version](green bold)";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"directory" = {
|
||
"format" = "[$path]($style)[$read_only]($read_only_style)";
|
||
"home_symbol" = "⌂";
|
||
"read_only" = " ◈";
|
||
"repo_root_format" = "[$before_root_path]($before_repo_root_style)[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) [△](bold bright-blue)";
|
||
"repo_root_style" = "bold blue";
|
||
"style" = "italic blue";
|
||
"truncation_length" = 2;
|
||
"truncation_symbol" = "□ ";
|
||
"use_os_path_sep" = true;
|
||
};
|
||
"docker_context" = {
|
||
"format" = " docker [$symbol$context]($style)";
|
||
"symbol" = "◧ ";
|
||
};
|
||
"elixir" = {
|
||
"format" = " exs [$symbol $version OTP $otp_version ]($style)";
|
||
"symbol" = "△ ";
|
||
};
|
||
"elm" = {
|
||
"format" = " elm [$symbol($version )]($style)";
|
||
"symbol" = "◩ ";
|
||
};
|
||
"env_var" = {
|
||
"VIMSHELL" = {
|
||
"format" = "[$env_value]($style)";
|
||
"style" = "green italic";
|
||
};
|
||
};
|
||
"fill" = {
|
||
"symbol" = " ";
|
||
};
|
||
"format" = "($nix_shell$container$fill$git_metrics\n)$cmd_duration$hostname$localip$shlvl$shell$env_var$jobs$sudo$username$character";
|
||
"git_branch" = {
|
||
"format" = " [$branch(:$remote_branch)]($style)";
|
||
"ignore_branches" = [
|
||
"main"
|
||
"master"
|
||
];
|
||
"only_attached" = true;
|
||
"style" = "italic bright-blue";
|
||
"symbol" = "[△](bold italic bright-blue)";
|
||
"truncation_length" = 11;
|
||
"truncation_symbol" = "⋯";
|
||
};
|
||
"git_metrics" = {
|
||
"added_style" = "italic dimmed green";
|
||
"deleted_style" = "italic dimmed red";
|
||
"disabled" = false;
|
||
"format" = "([▴$added]($added_style))([▿$deleted]($deleted_style))";
|
||
"ignore_submodules" = true;
|
||
};
|
||
"git_status" = {
|
||
"ahead" = "[▴│[\${count}](bold white)│](italic green)";
|
||
"behind" = "[▿│[\${count}](bold white)│](italic red)";
|
||
"conflicted" = "[◪◦](italic bright-magenta)";
|
||
"deleted" = "[✕](italic red)";
|
||
"diverged" = "[◇ ▴┤[\${ahead_count}](regular white)│▿┤[\${behind_count}](regular white)│](italic bright-magenta)";
|
||
"format" = "([⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥]($style))";
|
||
"modified" = "[●◦](italic yellow)";
|
||
"renamed" = "[◎◦](italic bright-blue)";
|
||
"staged" = "[▪┤[$count](bold white)│](italic bright-cyan)";
|
||
"stashed" = "[◃◈](italic white)";
|
||
"style" = "bold italic bright-blue";
|
||
"untracked" = "[◌◦](italic bright-yellow)";
|
||
};
|
||
"golang" = {
|
||
"format" = " go [$symbol($version )]($style)";
|
||
"symbol" = "∩ ";
|
||
};
|
||
"haskell" = {
|
||
"format" = " hs [$symbol($version )]($style)";
|
||
"symbol" = "❯λ ";
|
||
};
|
||
"java" = {
|
||
"format" = " java [\${symbol}(\${version} )]($style)";
|
||
"symbol" = "∪ ";
|
||
};
|
||
"jobs" = {
|
||
"format" = "[$symbol$number]($style) ";
|
||
"style" = "white";
|
||
"symbol" = "[▶](blue italic)";
|
||
};
|
||
"julia" = {
|
||
"format" = " jl [$symbol($version )]($style)";
|
||
"symbol" = "◎ ";
|
||
};
|
||
"localip" = {
|
||
"disabled" = false;
|
||
"format" = " ◯[$localipv4](bold magenta)";
|
||
"ssh_only" = true;
|
||
};
|
||
"lua" = {
|
||
"format" = " [lua](italic) [\${symbol}\${version}]($style)";
|
||
"style" = "bold bright-yellow";
|
||
"symbol" = "⨀ ";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"memory_usage" = {
|
||
"format" = " mem [\${ram}( \${swap})]($style)";
|
||
"symbol" = "▪▫▪ ";
|
||
};
|
||
"nim" = {
|
||
"format" = " nim [$symbol($version )]($style)";
|
||
"symbol" = "▴▲▴ ";
|
||
};
|
||
"nix_shell" = {
|
||
"format" = "[$symbol nix⎪$state⎪]($style) [$name](italic dimmed white)";
|
||
"impure_msg" = "[⌽](bold dimmed red)";
|
||
"pure_msg" = "[⌾](bold dimmed green)";
|
||
"style" = "bold italic dimmed blue";
|
||
"symbol" = "✶";
|
||
"unknown_msg" = "[◌](bold dimmed ellow)";
|
||
};
|
||
"nodejs" = {
|
||
"detect_extensions" = [
|
||
];
|
||
"detect_files" = [
|
||
"package-lock.json"
|
||
"yarn.lock"
|
||
];
|
||
"detect_folders" = [
|
||
"node_modules"
|
||
];
|
||
"format" = " [node](italic) [◫ ($version)](bold bright-green)";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"package" = {
|
||
"format" = " [pkg](italic dimmed) [$symbol$version]($style)";
|
||
"style" = "dimmed yellow italic bold";
|
||
"symbol" = "◨ ";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"python" = {
|
||
"format" = " [py](italic) [\${symbol}\${version}]($style)";
|
||
"style" = "bold bright-yellow";
|
||
"symbol" = "[⌉](bold bright-blue)⌊ ";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"right_format" = "$singularity$kubernetes$directory$vcsh$fossil_branch$git_branch$git_commit$git_state$git_status$hg_branch$pijul_channel$docker_context$package$c$cmake$cobol$daml$dart$deno$dotnet$elixir$elm$erlang$fennel$golang$guix_shell$haskell$haxe$helm$java$julia$kotlin$gradle$lua$nim$nodejs$ocaml$opa$perl$php$pulumi$purescript$python$raku$rlang$red$ruby$rust$scala$solidity$swift$terraform$vlang$vagrant$zig$buf$conda$meson$spack$memory_usage$aws$gcloud$openstack$azure$crystal$custom$status$os$battery$time";
|
||
"ruby" = {
|
||
"format" = " [rb](italic) [\${symbol}\${version}]($style)";
|
||
"style" = "bold red";
|
||
"symbol" = "◆ ";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"rust" = {
|
||
"format" = " [rs](italic) [$symbol$version]($style)";
|
||
"style" = "bold red";
|
||
"symbol" = "⊃ ";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"spack" = {
|
||
"format" = " spack [$symbol$environment]($style)";
|
||
"symbol" = "◇ ";
|
||
};
|
||
"sudo" = {
|
||
"disabled" = false;
|
||
"format" = "[$symbol]($style)";
|
||
"style" = "bold italic bright-purple";
|
||
"symbol" = "⋈┈";
|
||
};
|
||
"swift" = {
|
||
"format" = " [sw](italic) [\${symbol}\${version}]($style)";
|
||
"style" = "bold bright-red";
|
||
"symbol" = "◁ ";
|
||
"version_format" = "\${raw}";
|
||
};
|
||
"time" = {
|
||
"disabled" = false;
|
||
"format" = "[ $time]($style)";
|
||
"style" = "italic dimmed white";
|
||
"time_format" = "%R";
|
||
"utc_time_offset" = "local";
|
||
};
|
||
"username" = {
|
||
"disabled" = false;
|
||
"format" = "[⭘ $user]($style) ";
|
||
"show_always" = false;
|
||
"style_root" = "purple bold italic";
|
||
"style_user" = "bright-yellow bold italic";
|
||
};
|
||
};
|
||
};
|
||
programs.vscode.userSettings."terminal.integrated.profiles.osx" = {
|
||
nushell = {
|
||
path = "${pkgs.nushell}/bin/nushell";
|
||
};
|
||
};
|
||
programs.vscode.userSettings."terminal.integrated.defaultProfile.osx" = "nushell";
|
||
};
|
||
}
|