diff --git a/home/modules/tui/shell/fish/functions.nix b/home/modules/tui/shell/fish/functions.nix index 13ef9db..7fb4537 100644 --- a/home/modules/tui/shell/fish/functions.nix +++ b/home/modules/tui/shell/fish/functions.nix @@ -3,37 +3,19 @@ # cht.sh integration cht = "curl cheat.sh/$argv"; - # Display weather from tempest station - fish_greeting = '' - if test -f "${config.sops.secrets.tempest-station.path}" - set -l station (cat ${config.sops.secrets.tempest-station.path}) - set -l token (cat ${config.sops.secrets.tempest-token.path}) - set -l wxjson (curl --max-time 2 --compressed -sL "https://swd.weatherflow.com/swd/rest/better_forecast?station_id=$station&token=$token&units_temp=f") - if test $status -eq 0; and echo $wxjson | jq empty >/dev/null 2>&1 - set -l wxdata (echo $wxjson | jq -r '[ - (.current_conditions.conditions | ascii_downcase), - (.current_conditions.air_temperature | round | tostring), - (.forecast.daily[0].air_temp_low | round | tostring), - (.forecast.daily[0].air_temp_high | round | tostring) - ] | @tsv' | string split \t) - echo -ne "\nwx@home: "; set_color -d green; echo -n "$wxdata[1] and $wxdata[2]°f "; set_color normal - echo -n "("; set_color -d blue; echo -n "$wxdata[3]°"; set_color normal - echo -n "|"; set_color -d red; echo -n "$wxdata[4]°"; set_color normal; echo ")" - else - return 1 - end - end - ''; + fish_greeting = "wx"; get-local-ip = "ip addr show $(ip route | grep default | awk '{print $5}') | grep 'inet ' | awk '{print $2}' | cut -d/ -f1"; ssh = "TERM=xterm command ssh $argv"; - # Rebuild home-manager + switch-home = "home-manager switch -b backup --flake ${config.home.homeDirectory}/.dotfiles#$USER@$(hostname -s)"; + switch-nix = "sudo nixos-rebuild switch --flake ${config.home.homeDirectory}/.dotfiles"; + upgrade-nix = "nix-channel --update; nix-env --install --attr nixpkgs.nix nixpkgs.cacert"; @@ -44,5 +26,70 @@ # tmux quickstart tmm = "tmux attach-session -t (hostname -s) || tmux new-session -s (hostname -s) -c $HOME"; + + wx = '' + if test ! -f "${config.sops.secrets.tempest-station.path}" + return 1 + end + set -l station (cat ${config.sops.secrets.tempest-station.path}) + set -l token (cat ${config.sops.secrets.tempest-token.path}) + set -l cache_dir "$XDG_CACHE_HOME/fish" + set -l cache_file "$cache_dir/wx" + set -l cache_max_age 3600 # 1 hour in seconds + + # ensure cache_dir exists + mkdir -p $cache_dir + + # use cached data if less than $cache_max_age old + set -l current_time (date +%s) + if test -f $cache_file + set -l file_age (math $current_time - (stat -c %Z $cache_file)) + if test $file_age -lt $cache_max_age + set -l wxdata (cat $cache_file | string split ',') + wx_print $wxdata + return 0 + end + end + + # fetch fresh data + set -l wxjson (curl --max-time 2 -sL --compressed \ + "https://swd.weatherflow.com/swd/rest/better_forecast?station_id=$station&token=$token&units_temp=f") + + if test $status -eq 0; and echo $wxjson | jq empty >/dev/null 2>&1 + set -l wxdata (echo $wxjson | jq -r '[ + (.current_conditions.conditions | ascii_downcase), + (.current_conditions.air_temperature | round), + (.forecast.daily[0].air_temp_low | round), + (.forecast.daily[0].air_temp_high | round) + ] | @csv' | tr -d '"' | string split ',') + if test (count $wxdata -eq 4) + string join ',' $wxdata >$cache_file + wx_print $wxdata + end + end + ''; + + wx_print = '' + set -l wxdata $argv + if test (count $wxdata) -ne 4 + return 1 + end + set_color -d white + echo -ne "\nwx@home: " + set_color green + echo -n "$wxdata[1] and $wxdata[2]°f " + set_color white + echo -n "(" + set_color blue + echo -n "$wxdata[3]°" + set_color white + echo -n "|" + set_color red + echo -n "$wxdata[4]°" + set_color white + echo ")" + set_color normal + ''; + }; }