dotfiles/home/common/fish.nix

130 lines
3.9 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ lib, pkgs, ... }:
{
programs.fish = {
enable = true;
plugins = [
{
name = "transient";
src = pkgs.fishPlugins.transient-fish.src;
}
];
functions = {
confirm = {
description = "Ask for confirmation";
argumentNames = [ "message" ];
body = ''
read -l -p 'printf "\\e[31;1m$message\\e[0m (y/N) "' confirm
test "$confirm" = 'y'
'';
};
poweroff = {
description = "Wraps poweroff to first prompt for confirmation";
wraps = "poweroff";
body = ''confirm " Really poweroff $(hostname)?" && command poweroff $argv'';
};
reboot = {
description = "Wraps reboot to first prompt for confirmation";
wraps = "reboot";
body = ''confirm " Really reboot $(hostname)?" && command reboot $argv'';
};
shutdown = {
description = "Wraps shutdown to first prompt for confirmation";
wraps = "shutdown";
body = ''confirm " Really shutdown $(hostname)?" && command shutdown $argv'';
};
e = {
description = "Open a file in already running nvim";
argumentNames = [ "file" ];
body = ''
nvim-remote --remote (readlink -f "$file")
'';
};
jl.body = ''
jj log --color=always --no-graph -T builtin_log_oneline -r 'all()' | fzf --ansi --reverse --wrap --preview 'jj show --tool=difftu {1}' --preview-window=down,70% --color=light
'';
__zoxide_zi_repaint.body = ''
__zoxide_zi
commandline -f repaint
'';
fish_jj_prompt.body = ''
if not command -sq jj || not jj root --quiet &>/dev/null
return 1
end
jj log --ignore-working-copy --no-graph --color never -r @ -T '
surround(
" \e[2;3m",
"\e[0m",
separate(
" ",
surround(
"\e[0;2;3m",
"\e[0m",
coalesce(
surround(
"\e[1;2;3m",
"\e[0m",
if(
description.first_line().substr(0, 80).starts_with(description.first_line()),
description.first_line().substr(0, 80),
description.first_line().substr(0, 79) ++ ""
)
),
""
),
),
surround("\e[0;1;95m ", "\e[0;2;3m", change_id.shortest()),
surround("\e[0;35m󰸕 ", "\e[0m", bookmarks.join("")),
surround("\e[0;34m ", "\e[0;2;3m", commit_id.shortest()),
if(conflict, "󰂭"),
if(empty, ""),
if(divergent, ""),
if(hidden, "󰘓"),
)
)
'
'';
fish_prompt.body = ''
echo -e "\033[s\033[$LINES;1H\033[1;2;38;5;238m$(string pad -c '' -w $COLUMNS (fish_jj_prompt || fish_vcs_prompt))\033[0m\033[u"
string join "" -- (set_color --dim) (prompt_hostname) ':' (prompt_pwd --full-length-dirs=4) (set_color --bold normal) ' ' (set_color normal)
'';
transient_prompt_func.body = ''
echo
string join "" -- (set_color --bold) ' ' (set_color normal)
'';
rg.body = ''
if status is-interactive
command rg -p $argv --json | delta
else
command rg $argv
end
'';
};
interactiveShellInit = lib.concatStringsSep "\n" [
(builtins.readFile ../../files/config/fish/config.fish)
(builtins.readFile ../../files/config/fish/semantic-prompt.fish)
(builtins.readFile ../../files/config/fish/vcs.fish)
];
shellAbbrs = {
l = "bat";
top = "btm --basic --enable_cache_memory --battery";
ts = "TZ=Z date '+%Y%m%dT%H%M%SZ'";
w = "viddy $history[1]";
xc = "fish_clipboard_copy";
};
};
}