flocon/modules/programs/terminal/shell/nushell.nix

101 lines
3.3 KiB
Nix

# simplified version of https://raw.githubusercontent.com/Lunarnovaa/nixconf/3d13d69e9fcf072365935ee9dda719d6b0aa9bc1/modules/programs/terminal/nushell.nix
{
lib,
config,
pkgs,
...
}: let
inherit (config.local.systemVars) username;
inherit (lib.modules) mkIf;
carapaceCache = "${config.hjem.users.${username}.directory}/.cache/carapace";
starshipCache = "${config.hjem.users.${username}.directory}/.cache/starship";
zoxideCache = "${config.hjem.users.${username}.directory}/.cache/zoxide";
in {
config = mkIf config.local.profiles.desktop.enable {
users.users.${username}.shell = pkgs.nushell;
hjem.users.${username} = {
packages = with pkgs; [carapace nushell];
files = {
".config/nushell/config.nu".text = ''
# disabling the basic banner on startup
$env.config = {
show_banner: false,
edit_mode: vi,
hooks: {
pre_prompt: [{ ||
if (which direnv | is-empty) {
return
}
direnv export json | from json | default {} | load-env
if 'ENV_CONVERSIONS' in $env and 'PATH' in $env.ENV_CONVERSIONS {
$env.PATH = do $env.ENV_CONVERSIONS.PATH.from_string $env.PATH
}
}]
}
}
$env.SSH_AUTH_SOCK = $"($env.XDG_RUNTIME_DIR)/ssh-agent"
# aliases
alias ll = ls -l
alias lg = lazygit
alias lg = lazygit;
alias g = git;
alias gs = git status;
alias gsh = git show HEAD;
alias gshs = DELTA_FEATURES=+side-by-side git show HEAD;
alias ga = git add;
alias gaa = git add :/;
alias gap = git add -p;
alias gc = git commit;
alias gca = git commit --amend;
alias gcm = git commit --message;
alias gcf = git commit --fixup;
alias gk = git checkout;
alias gkp = git checkout -p;
alias gd = git diff;
alias gds = DELTA_FEATURES=+side-by-side git diff;
alias gdc = git diff --cached;
alias gdcs = DELTA_FEATURES=+side-by-side git diff --cached;
alias gf = git fetch;
alias gl = git log;
alias glp = git log -p;
alias glps = DELTA_FEATURES=+side-by-side git log -p;
alias gp = git push;
alias gpf = git push --force-with-lease;
alias gr = git reset;
alias gra = git reset :/;
alias grp = git reset -p;
alias gt = git stash;
alias gtp = git stash pop;
alias gu = git pull;
# carapace init (completion engine)
source ${carapaceCache}/init.nu
# starship init
use ${starshipCache}/init.nu
# zoxide init
source ${zoxideCache}/init.nu
'';
".config/nushell/env.nu".text = ''
mkdir ${carapaceCache}
mkdir ${starshipCache}
mkdir ${zoxideCache}
carapace _carapace nushell | save -f ${carapaceCache}/init.nu
starship init nu | save -f ${starshipCache}/init.nu
zoxide init nushell | save -f ${zoxideCache}/init.nu
'';
};
};
# needed for ghostty, as it runs as a systemd service (for faster startups)
systemd.user.services.ghosttyd.path = [
pkgs.carapace
pkgs.zoxide
];
};
}