Fish functions
This is a placeholder for my commonly used fish shell functions — saved as files under ~/.config/fish/functions/.
-
For system information: sbcinf.fish
# sbcinf.fish function sbcinf set -l mem (free -h | awk '/Mem:/ {print $3 "/" $2}') set -l dsk (df -h | awk '/\/$/ {print $3 "/" $2}') set -l tem (vcgencmd measure_temp | grep -o -E '[[:digit:]].*') set -l pow (vcgencmd measure_volts | sed 's/volt=//g') set -l ipa (hostname -I | awk '{print $1}') set -l upt (uptime -p | sed 's/^up //') echo "Board temp: $tem" echo "Disk usage: $dsk" echo "IP address: $ipa" echo "Memory use: $mem" echo "Power cons: $pow" echo "Sys uptime: $upt" end -
For downloading a file from GitHub repo. with
ghdl user/repo/file.ext. If specific about a branch, then this works too:ghdl user/repo@master/file.ext# ghdl.fish function ghdl if test (count $argv) -ne 1 echo "Usage: ghdl user/repo[@branch]/path/to/file" return 1 end set input $argv[1] # Split the input into repo and path set repo_part (echo $input | cut -d'/' -f1-2) set path_part (echo $input | cut -d'/' -f3-) # Extract user and repo (and optional branch) set user (echo $repo_part | cut -d'/' -f1) set repo_branch (echo $repo_part | cut -d'/' -f2) if string match -q '*@*' $repo_branch set repo (echo $repo_branch | cut -d'@' -f1) set branch (echo $repo_branch | cut -d'@' -f2) else set repo $repo_branch set branch "master" # default fallback branch end if test -z "$user" -o -z "$repo" -o -z "$path_part" echo "Error: Must be in the form user/repo[@branch]/path/to/file" return 1 end # Construct modern raw.githubusercontent.com URL set url "https://raw.githubusercontent.com/$user/$repo/refs/heads/$branch/$path_part" echo "Downloading from: $url" curl -LO $url end -
Push functions
# push function # gp master // normal push to master repo # gpp bb // rebased push to bb repo # function gp git push -u origin $argv[1] end function gpp git push -u origin +$argv[1] end -
Rebase function
# gr.fish # examples: # gr 4 master # gr 3 bb # function gr git rebase -i origin/$argv[2]~$argv[1] $argv[2] end -
Get the latest release version of a GitHub repo.
# glr.fish # e.g. glr "ckunte/tce" function glr \ --argument-names user_repo curl \ --silent \ "https://api.github.com/repos/$user_repo/releases/latest" \ | string match --regex '"tag_name": "\K.*?(?=")' end -
Check file hash
# check_hashes.fish function check_hashes # Ensure the user provided a file argument if test (count $argv) -ne 1 echo "Usage: check_hashes <file>" return 1 end # Store the file path set file $argv[1] # Check if the file exists if not test -e $file echo "Error: File '$file' does not exist." return 1 end # Calculate and display the RMD160 hash echo "RMD160 hash:" printf "%s" "$file" | openssl dgst -rmd160 # Calculate and display the SHA256 hash echo "SHA256 hash:" printf "%s" "$file" | openssl dgst -sha256 end -
Open folder from within WSL
# open.fish function open if test (count $argv) -eq 0 # No arguments: open current directory explorer.exe . else for arg in $argv # If it's a URL if string match -qr '^https?://|^mailto:' $arg explorer.exe $arg # If it's a file or directory that exists else if test -e $arg explorer.exe (wslpath -w $arg) # If it's a Windows-style path (C:\Users\...), try passing directly else if string match -qr '^[A-Za-z]:\\' $arg explorer.exe $arg else echo "open: '$arg' not found or invalid" >&2 end end end end -
Rename photos
# renfoto.fish: rename photos e.g. renfoto ST-159 function renfoto set prefix $argv[1] rename -N ...01 -X -e '$_ = $prefix . "-photo-$N"' *.png end