Files
shed/modules/home/scripts/commands/toolbelt.nix

90 lines
3.7 KiB
Nix

{ pkgs, ... }:
pkgs.writeShellScriptBin "toolbelt" ''
calc() {
echo "Give me some math"
read input
answer=$(echo "$input" | bc)
if [ "$input" = "9+10" ] \
|| [ "$input" = "9 +10" ] \
|| [ "$input" = "9+ 10" ] \
|| [ "$input" = "9 + 10" ]; then
answer="21"
fi
echo "$input = $answer"
echo "$answer" | wl-copy
echo "answer copied to clipboard. press any key to exit."
read -n 1 -s
}
chpaper() {
paper="$\{self}/assets/wallpapers/$(find "$FLAKEPATH"/assets/wallpapers -exec basename {} \; | rg "\.\w+$" | fzf --preview "chafa -s 30x40 $FLAKEPATH/assets/wallpapers/{}")"
[ "$paper" = "$\{self}/assets/wallpapers/" ] && echo "Cancelling wallpaper change" && exit 0
echo "$paper" | xargs -I {} sed -i '/wallpaper =/s|"[^"]*"|"{}"|' "$FLAKEPATH"/flake.nix
echo "Successfully changed wallpaper. Rebuild now?" && \
select choice in "Yes" "No"; do
case $choice in
"Yes")
rebuild;pkill -9 hyprpaper;exit 0;;
"No")
echo "Exiting...";exit 0;;
esac
done
}
running=true
declare -A commands=(
["Change Wallpaper"]="chpaper"
["Change System Color Scheme"]="hyprctl dispatch resizeactive 10% 80% && moveonscreen --center && if chscheme; then running=false; else hyprctl dispatch resizeactive exact 40% 25% && moveonscreen; fi"
["Open System Monitor"]="hyprctl dispatch resizeactive 50% 70% moveactive onscreen cursor -50% -50%; kitty btop'"
["Open Volume Controls"]="hyprctl dispatch exec '[float;size 50% 70%;move onscreen cursor -50% -50%] pavucontrol'"
["Open Keyring"]="exec hyprctl dispatch exec '[float;size 25% 30%;move onscreen cursor 20 20] [ ! -f /tmp/keyringfile ] && kitty keyring'"
["Calculator"]="calc"
)
declare -A descriptions=(
["Change Wallpaper"]="Choose a wallpaper to switch to from \$FLAKEPATH/assets/wallpapers. Requires rebuilding the system and restarting hyprpaper."
["Change System Color Scheme"]="Changes the base16 color scheme used by stylix to color system applications."
["Open System Monitor"]="Opens a btop window."
["Open Volume Controls"]="Opens pavucontrol."
["Open Keyring"]="Opens a fuzzy finder with all of the paths held in ~/.password-store. Selecting one uses pass to copy that password to the clipboard. Password is cleared from clipboard history after 45 seconds."
["Calculator"]="Wrapper for bc. Output is copied to the clipboard."
)
# Export the descriptions array so it's available to the subshell
export -A descriptions
# Use fzf to select a command with preview
while $running; do
selected_command=$(printf "%s\n" "''${!commands[@]}" | fzf --preview="
cleaned_key=\$(echo {} | tr -d \"'\"); \
echo \"Cleaned key: \$cleaned_key\"; \
declare -A descriptions=(
[\"Change Wallpaper\"]=\"Choose a wallpaper to switch to from the assets/wallpapers folder in the system flake directory. Requires rebuilding the system and restarting hyprpaper.\"
[\"Change System Color Scheme\"]=\"Changes the base16 color scheme used by stylix to color system applications.\"
[\"Open System Monitor\"]=\"Opens a btop window.\"
[\"Open Volume Controls\"]=\"Opens pavucontrol.\"
[\"Open Keyring\"]=\"Opens a fuzzy finder with all of the paths held in ~/.password-store. Selecting one uses pass to copy that password to the clipboard. Password is cleared from clipboard history after 45 seconds.\"
[\"Calculator\"]=\"Wrapper for bc. Output is copied to the clipboard.\"
); \
if [[ -v descriptions[\$cleaned_key] ]]; then \
clear; \
echo \''${descriptions[\$cleaned_key]} | fmt -w 28; \
else \
clear; \
echo \"No description available\"; \
fi" --prompt="> ")
#Execute the selected command if selection is not empty
if [[ -n $selected_command ]]; then
eval "''${commands[$selected_command]}"
else
running=false
fi
done
''