{ config, pkgs, ... }: { programs.fish = { enable = true; interactiveShellInit = '' set fish_greeting "" set -gx DOTNET_ROOT $HOME/.dotnet fish_add_path $DOTNET_ROOT fish_add_path $DOTNET_ROOT/tools set -gx DOTNET_SYSTEM_NET_DISABLEIPV6 1 bind \cd\cd\cd delete-or-exit bind \cf 'ts; commandline -f repaint' if type -q eza alias ls='eza --color=always --group-directories-first --icons' alias ll='eza -a --color=always --group-directories-first --icons' alias la='eza -al --group-directories-first --icons' alias lt='eza -aT --level=2 --group-directories-first --icons' alias l.='eza -ad .* --group-directories-first --icons' else printf "You may want to install eza\n" end if not set -q TMUX tmux attach-session -t Main 2>/dev/null; or tmux new-session -s Main end ''; shellAliases = { rebuild = "sudo nixos-rebuild switch --flake $HOME/NixOS#damagedProperty"; hms = "home-manager switch"; sshavatar = "ssh warrentyexpired@192.168.88.111"; sshvaultnas = "ssh warrentyexpired@192.168.88.100"; sshservarr = "ssh warrentyexpired@192.168.88.101"; sshdocker = "ssh warrentyexpired@192.168.88.102"; sshlive = "ssh mementoadmin@uo-memento.com"; sshproxy = "ssh warrentyexpired@192.168.88.200"; stff = "mpv --autofit=10%"; s = "goto s"; g = "goto g"; l = "goto l"; mv = "mv -i --backup=t"; cat = "bat"; }; shellAbbrs = { sshracknerd = ''mosh -p 60001 192.227.229.130 --ssh="ssh -p 5522"''; }; functions = { ts = { description = "Tmux session manager with fuzzy search and quick jump"; body = '' echo -e "" # 1. Show Active Sessions set -l active_sessions (tmux list-sessions 2>/dev/null) if test -n "$active_sessions" echo -e (set_color 99ff99)"󱫟 Active Sessions:"(set_color normal) for line in $active_sessions echo -e " $line" end echo "" else echo -e (set_color 555555)"(No active sessions)"(set_color normal) echo "" end # 2. Provide choices echo -e (set_color 00afaf)"󰒓 Select an option:"(set_color normal) echo -e " [1] Pick from active sessions (Fuzzy search)" echo -e " [2] Create NEW custom session" echo -e " [w] Enter Tmuxinator Workspaces" echo -e " [d] Detach from current session" echo -e " [x] Kill a session" echo -e " [Enter] Quick jump to "(set_color -o)"Main"(set_color normal) echo "" read -l -P "Choice > " choice switch "$choice" case 1 set -l session (tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --exit-0 --height=15% --reverse --header="Select Session") if test -n "$session" if set -q TMUX tmux switch-client -t "$session" else tmux attach-session -t "$session" end end case 2 read -l -P "Enter name for new session: " new_name if test -n "$new_name" env -u TMUX tmux new-session -d -s "$new_name" 2>/dev/null if set -q TMUX tmux switch-client -t "$new_name" else tmux attach-session -t "$new_name" end end case d D if set -q TMUX; tmux detach-client; else; echo "You aren't in a tmux session!"; end case w W if type -q tmuxinator tmuxinator start Workspace else echo (set_color red)"Error: tmuxinator is not installed."(set_color normal) end case x X set -l session (tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --exit-0 --height=15% --reverse --header="Select Session to KILL") if test -n "$session" tmux kill-session -t "$session" echo "Killed session: $session" ts end case "" "*" env -u TMUX tmux new-session -d -s Main 2>/dev/null if set -q TMUX; tmux switch-client -t Main; else; tmux attach-session -t Main; end end commandline -f repaint ''; }; lookfor = { description = "Lookfor (d)irectory, (f)ile (a)ll (pattern)"; body = '' if test (count $argv) -lt 2 echo "Usage: lookfor (f)ile|(d)irectory|(a)ll "pattern"" return 1 end set -l type_flag $argv[1] set -l pattern $argv[2] switch $type_flag case f find . -type f -name "*$pattern*" 2>/dev/null case d find . -type d -name "*$pattern*" 2>/dev/null case a find . -name "*$pattern*" 2>/dev/null case * echo "Invalid type: $type_flag. Use f for file or d for directory." return 1 end ''; }; topsort = { description = "Sort files large to small."; body = '' du -sh * | sort -rh | head -10 ''; }; fish_prompt = { body = '' set -l white (set_color white) set -l brwhite (set_color brwhite) set -l green (set_color green) set -l red (set_color red) set -l blue (set_color blue) # Line 1: ┌─ [user] @ [host] - homeFiles status echo -s $white"┌─ ["$green$USER$white"] "$brwhite"@ " $white"["$red$hostname$white"]" # Line 2: └─ [directory] set -l full_path (string replace -r "^$HOME" "~" $PWD) echo -s $white"├─ ["$blue$full_path$white"]" # Line 3: └─ [(git_branch)] or [$e] echo -n $white"└─ [" set -l git_info (gitinfo 2>/dev/null) if test -n "$git_info" echo -n $git_info else echo -n $brwhite"\$" end echo -n $white"]" # Final prompt symbol and reset echo -n $brwhite" " set_color normal ''; }; gitinfo = { body = '' if git rev-parse --is-inside-work-tree >/dev/null 2>&1 set -l branch (git branch --show-current) set -l staged "" set -l dirty "" set -l untracked "" if not git diff --quiet set dirty (set_color yellow)"*" end if not git diff --cached --quiet set staged (set_color green)"+" end set -l untracked_files (git ls-files --others --exclude-standard) if test -n "$untracked_files" set untracked (set_color red)" *" end echo (set_color magenta)"($branch)"$staged$dirty$untracked(set_color normal) end ''; }; cdtmp = { body = '' set -l directory if set -q argv[1] set -l folder_name (string replace -all / _ $argv[1]) set directory "/var/tmp/cdtmp.$folder_name" mkdir -p "$directory" else set directory (mktemp -d --tmpdir=/var/tmp cdtmp.XXXXXXXX) end if test -d "$directory" cd "$directory" end ''; }; stffpl = { body = '' mpv --autofit=10% --playlist="$argv[1]" ''; }; mkcd = { body = '' mkdir -p $argv and cd $argv[-1] ''; }; goto = { body = '' set -l gotoConfig "$HOME/.config/goto/bookmarks" set -l gotoDir "$HOME/.config/goto" mkdir -p "$gotoDir" touch "$gotoConfig" set -l command $argv[1] set -l bookmark_name $argv[2] if test -z "$command" echo "Usage: goto s (save current directory)" echo " goto g (go to saved directory)" echo " goto d (delete a bookmark)" echo " goto l (list all bookmarks)" echo " goto e (edit bookmarks file)" return end switch $command case s # Save bookmarks if test -z "$bookmark_name" echo "Error: Must provide a bookmark name to save." return 1 end sed -i "/^$bookmark_name:/d" "$gotoConfig" echo "$bookmark_name:"(pwd) >> "$gotoConfig" echo "Bookmark **$bookmark_name** saved to: **"(pwd)"**" case g # Go to bookmark if test -z "$bookmark_name" echo "Error: Must provide a bookmark name to go to." return 1 end set -l target_path (grep "^$bookmark_name:" "$gotoConfig" | cut -d ':' -f 2) if test -z "$target_path" echo "Error: Bookmark **$bookmark_name** not found." return 1 end if test -d "$target_path" cd "$target_path" echo "Jumping to: **$target_path**" else echo "Error: Directory **$target_path** does not exist or is not a directory" end case d # Delete bookmark if test -z "$bookmark_name" echo "Error: Must provide a bookmark name to delete." return 1 end if grep -q "^$bookmark_name:" "$gotoConfig" sed -i "/^$bookmark_name:/d" "$gotoConfig" echo "Bookmark **$bookmark_name** deleted." else echo "Error: Bookmark **$bookmark_name** not found." return 1 end case e # Edit bookmarks file if set -q EDITOR $EDITOR "$gotoConfig" else nano "$gotoConfig" end case l # List bookmarks if not test -s "$gotoConfig" echo "No bookmarks saved yet." return 0 end echo "___ **Bookmarks** (Stored in: $gotoDir) ___" column -t -s ':' "$gotoConfig" case '*' echo "Invalid command: $command" goto # Show usage end ''; }; }; }; }