dotfiles/.config/matugen/papirus-folders.sh
2026-04-20 12:13:48 +02:00

81 lines
1.7 KiB
Bash
Executable file

#!/usr/bin/env bash
HEX="${1#\#}"
# Convert hex to RGB
R=$((16#${HEX:0:2}))
G=$((16#${HEX:2:2}))
B=$((16#${HEX:4:2}))
# --- SETTINGS ---
# Increase this to make the script avoid 'grey' unless the color is truly neutral.
GREY_PENALTY=2000
# ----------------
declare -a COLORS=(
"black 0 0 0"
"bluegrey 96 125 139"
"blue 33 150 243"
"breeze 56 189 220"
"brown 121 85 72"
"cyan 0 188 212"
"green 76 175 80"
"grey 158 158 158"
"indigo 63 81 181"
"magenta 171 71 188"
"nordic 94 129 172"
"orange 255 152 0"
"pink 233 30 99"
"red 244 67 54"
"teal 0 150 136"
"violet 126 87 194"
"white 255 255 255"
"yellow 255 235 59"
)
# 1. Calculate input saturation/chroma
# We find the 'neutral' part of your color (the minimum value)
MIN=$R
[ $G -lt $MIN ] && MIN=$G
[ $B -lt $MIN ] && MIN=$B
# 'Pure' version of your color
PR=$((R - MIN))
PG=$((G - MIN))
PB=$((B - MIN))
BEST=""
BEST_DIST=999999999
for ENTRY in "${COLORS[@]}"; do
read -r NAME CR CG CB <<< "$ENTRY"
# Calculate 'Pure' version of the preset
CMIN=$CR
[ $CG -lt $CMIN ] && CMIN=$CG
[ $CB -lt $CMIN ] && CMIN=$CB
PCR=$((CR - CMIN))
PCG=$((CG - CMIN))
PCB=$((CB - CMIN))
# Compare the 'Pure' colors (Hue match)
DR=$((PR - PCR))
DG=$((PG - PCG))
DB=$((PB - PCB))
DIST=$(( DR*DR + DG*DG + DB*DB ))
# Add a penalty to "Grey" to prefer actual colors
if [ "$NAME" == "grey" ] || [ "$NAME" == "bluegrey" ]; then
DIST=$(( DIST + GREY_PENALTY ))
fi
if [ $DIST -lt $BEST_DIST ]; then
BEST_DIST=$DIST
BEST=$NAME
fi
done
echo "Detected Hue Match: $BEST"
papirus-folders -C "$BEST" -t "$HOME/.local/share/icons/Papirus"