mirror of
https://github.com/jbowdre/dotfiles.git
synced 2025-01-15 05:29:13 +00:00
fish: improve weather fetching
- caches weather data in $XDG_CACHE_HOME/fish/wx - only fetches new data if cache is stale - implement as functions for easier reuse
This commit is contained in:
parent
4107dd9a05
commit
89b2abe469
1 changed files with 69 additions and 22 deletions
|
@ -3,37 +3,19 @@
|
||||||
# cht.sh integration
|
# cht.sh integration
|
||||||
cht = "curl cheat.sh/$argv";
|
cht = "curl cheat.sh/$argv";
|
||||||
|
|
||||||
# Display weather from tempest station
|
fish_greeting = "wx";
|
||||||
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
|
|
||||||
'';
|
|
||||||
|
|
||||||
get-local-ip =
|
get-local-ip =
|
||||||
"ip addr show $(ip route | grep default | awk '{print $5}') | grep 'inet ' | awk '{print $2}' | cut -d/ -f1";
|
"ip addr show $(ip route | grep default | awk '{print $5}') | grep 'inet ' | awk '{print $2}' | cut -d/ -f1";
|
||||||
|
|
||||||
ssh = "TERM=xterm command ssh $argv";
|
ssh = "TERM=xterm command ssh $argv";
|
||||||
# Rebuild home-manager
|
|
||||||
switch-home =
|
switch-home =
|
||||||
"home-manager switch -b backup --flake ${config.home.homeDirectory}/.dotfiles#$USER@$(hostname -s)";
|
"home-manager switch -b backup --flake ${config.home.homeDirectory}/.dotfiles#$USER@$(hostname -s)";
|
||||||
|
|
||||||
switch-nix =
|
switch-nix =
|
||||||
"sudo nixos-rebuild switch --flake ${config.home.homeDirectory}/.dotfiles";
|
"sudo nixos-rebuild switch --flake ${config.home.homeDirectory}/.dotfiles";
|
||||||
|
|
||||||
upgrade-nix =
|
upgrade-nix =
|
||||||
"nix-channel --update; nix-env --install --attr nixpkgs.nix nixpkgs.cacert";
|
"nix-channel --update; nix-env --install --attr nixpkgs.nix nixpkgs.cacert";
|
||||||
|
|
||||||
|
@ -44,5 +26,70 @@
|
||||||
# tmux quickstart
|
# tmux quickstart
|
||||||
tmm =
|
tmm =
|
||||||
"tmux attach-session -t (hostname -s) || tmux new-session -s (hostname -s) -c $HOME";
|
"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
|
||||||
|
'';
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue