Files
dotfiles/home-modules/fish.nix
Lennart J. Kurzweg (Nx2) 66ef93c612 clone yazi
2026-01-27 16:45:54 +01:00

183 lines
7.5 KiB
Nix
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{ pkgs, ... }@all: with all;
{
home.packages = with pkgs; [
any-nix-shell
(writeShellScriptBin "nxfetch" /* bash */ ''
logo=$(echo -e "
OS
DE/WM
TERM
SHELL
ISHELL
KERNEL
EDITOR
TFM
PROMPT
" | lolcat --force 2> /dev/null)
release_line=$(cat /etc/*-release 2> /dev/null || echo 'PRETTY_NAME="[No Release]"')
msg="
$(echo -e "$logo" | sed -n 3p): $(echo "$release_line" | grep PRETTY_NAME | cut -c 14- | rev | cut -c 2- | rev)
$(echo -e "$logo" | sed -n 4p): ''${XDG_CURRENT_DESKTOP^}
$(echo -e "$logo" | sed -n 5p): ''${TERM^}
$(echo -e "$logo" | sed -n 6p): $(bash --version | head --lines 1 | cut -f -4 -d' ' | sed -E 's-(.*?), version (.*?)\(.*-\1 \2-g')
$(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev | sed 's/./\&/')
$(echo -e "$logo" | sed -n 8p): ''$(uname -r | sed -E 's=(.+-.+-.+-.+)-.+=\1=g')
$(echo -e "$logo" | sed -n 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g' | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
$(echo -e "$logo" | sed -n 10p): $(yazi --version | sed -E 's-(.*?) \(.*-\1-g')
$(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1 | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
"
echo -e "$msg"
'')
];
# bash>>fish is set in users system module
programs.fish = {
enable = true;
package = pkgs.fish;
shellAliases = let
base-eza = "eza --icons --git --smart-group --group-directories-first";
in {
ls = "${base-eza}";
ll = "${base-eza} --long";
lg = "${base-eza} --group --long";
la = "${base-eza} --all";
lla = "${base-eza} --all --long";
lt = "${base-eza} --long --tree";
ltd = "${base-eza} --long --tree -D";
lt2 = "${base-eza} --long --tree -L 2";
sr = "sudo reboot";
nf = "neofetch";
nxf = "nxfetch";
nn = "nano";
hxx = "hx .";
p = "python";
ipy = "ipython";
c = "codium";
cc = "codium .";
code = "codium";
g = "git";
lzg = "lazygit";
# gst = "git status";
gps = "git push";
gpl = "git pull";
gad = "git add";
gcm = "git commit -m ";
gmr = "git merge";
gin = "git init";
gdf = "git diff";
grs = "git reset";
grh = "git reset --hard";
gch = "git checkout";
gsh = "git stash";
gsp = "git stash pop";
glg = "git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)' --all";
gll = "git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'";
gmt = "git_monitor";
gsw = "git switch";
gft = "git fetch";
ns = "nix-shell";
nd = "nix develop -c fish";
lzd = "lazydocker";
d = "docker";
dcmp = "docker compose";
stui = "sudo systemctl-tui";
wlc = "wl-copy";
# nxsent = ''sent -c \${rice.color.foreground} -b \${rice.color.background}'';
# ya = "yazi"; # function
# nxfiglet = "figlet";
};
interactiveShellInit = /* fish */ ''
set -g fish_greeting
if not set -q IN_NIX_SHELL
if set -q SESSION_FROM_DE; or set -q SESSION_CLONED_FROM_YAZI
set -e SESSION_FROM_DE
set -e SESSION_CLONED_FROM_YAZI
set tmp (mktemp -t "yazi-cwd.XXXXX")
yazi --cwd-file="$tmp" ~
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd"
end
rm -f -- "$tmp"
end
nxfetch
end
'';
functions = {
take = /* bash */ ''
mkdir $argv
cd $argv
'';
nx_backup = let
destination = if hyper.host == "NxNORTH" then "${hyper.home}/shared/" else "${hyper.home}/backups/";
in pkgs.lib.mkIf (hyper.isPersonal) /* fish */ ''
set RPATH (curl -s https://${hyper.domain}/latest-backup)
rsync -avz --info=progress2 -e "ssh -p ${builtins.toString secrets.ssh.port}" ${hyper.user}@ssh.${hyper.domain}:"$RPATH" ${destination}
'';
nx_yazi_into_fish = /* fish */ ''
set tmp (mktemp -t "yazi-cwd.XXXXX")
echo "$PWD" > "$tmp"
yazi --cwd-file="$tmp"
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd"
end
rm -f "$tmp"
set -g SESSION_CLONED_FROM_YAZI TRUE
'';
# gpg = '';
# set bold \e[1m
# set green \e[32m
# set blue \e[34m
# set yellow \e[33m
# set cyan \e[36m
# set purple \e[35m
# set reset \e[0m
# if string match -r -- "--list-(secret|public)?-?keys?" "$argv"
# set output (command gpg $argv)
# if test -z "$output"
# return $status
# end
# echo "$output" | sed -e 's/(Key fingerprint =)/'$yellow'\1'$reset'/g' \
# -e 's/(.*\.kbx)/'$yellow'Keyring: \1'$reset'/g' \
# -e 's/^uid[[:blank:]]+/uid /g' \
# -e 's/(^uid.*\] )(.*)/\1'$green'\2'$reset'/g' \
# -e 's/(\[.*\])/'$cyan'\1'$reset'/g' \
# -e 's/(^pub|^sec)/'$bold$green'\1'$reset'/g' \
# -e 's/(^sub|^ssb|^uid)/'$bold'\1'$reset'/g' \
# -e 's/(\[expires: )([0-9]{4}-[0-9]{2}-[0-9]{2})(\].*)/'$cyan'\1'$blue'\2'$cyan'\3'$reset'/g' \
# -e 's/([0-9]{4}-[0-9]{2}-[0-9]{2})/'$blue'\1'$reset'/g' \
# -e 's/^$/------------------------------------------/g' \
# -e 's| ([[:alnum:]]*)/| '$purple'\1'$reset'/|g' \
# -e 's|'$HOME'|~|g'
# # Print info footer
# set info_footer "------------------------------------------\n"
# set info_footer $info_footer $cyan"E"$reset"=encryption, "
# set info_footer $info_footer $cyan"S"$reset"=signing, "
# set info_footer $info_footer $cyan"C"$reset"=certification, "
# set info_footer $info_footer $cyan"A"$reset"=authentication\n"
# set info_footer $info_footer $green$bold"pub"$reset"=public primary key, "
# set info_footer $info_footer $bold"sub"$reset"=public subkey,\n"
# set info_footer $info_footer $green$bold"sec"$reset"=secret primary key, "
# set info_footer $info_footer $bold"ssb"$reset"=secret subkey,\n"
# set info_footer $info_footer $bold"uid"$reset"=user ID, "$purple"algorithm"$reset"/"$bold"key-ID"$reset
# echo -e $info_footer
# else
# command gpg $argv
# end
# '';
};
};
}