aboutsummaryrefslogtreecommitdiff
path: root/builder.sh
blob: 5f944cbe1e9cb816186238291436ecc65f781bd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash

declare -g configFile="./templates/config.yaml"
declare -g fileName
declare -g headFileTemplate="./templates/head.mustache"
declare -g headJson
declare -g bodyFileTemplate="./templates/body.mustache"
declare -g bodyJson
declare -g tmpBodyJson

declare -g schemesPath="$HOME/.local/share/tinted-theming/tinty/repos/schemes/base16/"
declare -g schemeSystem
declare -g schemeSlug
declare -g schemeSlugUnderscored
declare -g schemeName
declare -g schemeAuthor
declare -g schemeVariant

declare -g tokenHex
declare -g tokenBgr
declare -g tokenHexR
declare -g tokenHexG
declare -g tokenHexB
declare -g tokenRgbR
declare -g tokenRgbG
declare -g tokenRgbB
declare -g tokenRgb16R
declare -g tokenRgb16G
declare -g tokenRgb16B
declare -g tokenDecR
declare -g tokenDecG
declare -g tokenDecB

readarray -t schemesFiles < <(find "$schemesPath" -type f -iname '*.yaml')
readarray -t necessaryTokensPaletteList < <(grep -oP '\{\{\K[^}]+(?=\}\})' "$bodyFileTemplate" | awk -F'-' '{print $1}' | sort -u)

function getProperty() {
	yq -oy "$schemeFile" | yq -o=json -r ".$1"
}

function createFile() {
	# Extract filename entry from config
	yq '.default.filename' "$configFile" >"/tmp/filename-base16-nwg-dock.txt"

	fileName=$(lustache-cli -i "/tmp/filename-base16-nwg-dock.txt" --json-data "$headJson")

	if [[ -e ./"$fileName" ]]; then
		return
	else
		touch ./"$fileName"
	fi
}

for schemeFile in "${schemesFiles[@]}"; do
	schemeName=$(getProperty "name")
	schemeAuthor=$(getProperty "author")
	schemeSlug=$(basename "$schemeFile" .yaml)
	schemeSlugUnderscored="${schemeSlug//-/_}"
	schemeSystem=$(yq '.default.supported-systems[0]' "$configFile")
	schemeVariant=$(getProperty "variant")

	headJson=$(
		jq \
			--null-input \
			--arg schemeName "$schemeName" \
			--arg schemeAuthor "$schemeAuthor" \
			--arg schemeSlug "$schemeSlug" \
			--arg schemeSlugUnderscored "$schemeSlugUnderscored" \
			--arg schemeSystem "$schemeSystem" \
			--arg schemeVariant "$schemeVariant" \
			'{ 
				"scheme-name": $schemeName,
				"scheme-author": $schemeAuthor,
				"scheme-slug": $schemeSlug,
				"scheme-slug-underscored": $schemeSlugUnderscored,
				"scheme-system": $schemeSystem,
				"scheme-variant": $schemeVariant,
				"hasVariant": (if $schemeVariant != "" then "true" else "false" end) 
			}'
	)

	for tokenName in "${necessaryTokensPaletteList[@]}"; do
		tokenHex=$(yq -oy "$schemeFile" | yq -o=json -r ".palette.$tokenName")
		tokenBgr=$(echo "$tokenHex" | rev)
		tokenHexR=${tokenHex:0:2}
		tokenHexG=${tokenHex:2:2}
		tokenHexB=${tokenHex: -2}
		tokenRgbR=$((16#$tokenHexR))
		tokenRgbG=$((16#$tokenHexG))
		tokenRgbB=$((16#$tokenHexB))
		tokenRgb16R=$(echo "($tokenRgbR / 255) * 65535" | bc -l | awk '{print int($1)}')
		tokenRgb16G=$(echo "($tokenRgbG / 255) * 65535" | bc -l | awk '{print int($1)}')
		tokenRgb16B=$(echo "($tokenRgbB / 255) * 65535" | bc -l | awk '{print int($1)}')
		tokenDecR=$(echo "scale=4; $tokenRgbR / 255" | bc)
		tokenDecG=$(echo "scale=4; $tokenRgbG / 255" | bc)
		tokenDecB=$(echo "scale=4; $tokenRgbB / 255" | bc)

		tmpBodyJson=$(
			jq \
				--null-input \
				--arg tokenName "$tokenName" \
				--arg tokenHex "$tokenHex" \
				--arg tokenBgr "$tokenBgr" \
				--arg tokenHexR "$tokenHexR" \
				--arg tokenHexG "$tokenHexG" \
				--arg tokenHexB "$tokenHexB" \
				--arg tokenRgbR "$tokenRgbR" \
				--arg tokenRgbG "$tokenRgbG" \
				--arg tokenRgbB "$tokenRgbB" \
				--arg tokenRgb16R "$tokenRgb16R" \
				--arg tokenRgb16G "$tokenRgb16G" \
				--arg tokenRgb16B "$tokenRgb16B" \
				--arg tokenDecR "$tokenDecR" \
				--arg tokenDecG "$tokenDecG" \
				--arg tokenDecB "$tokenDecB" \
				'{
					($tokenName + "-hex"): $tokenHex,
					($tokenName + "-bgr"): $tokenBgr,
					($tokenName + "-hex-r"): $tokenHexR,
					($tokenName + "-hex-g"): $tokenHexG,
					($tokenName + "-hex-b"): $tokenHexB,
					($tokenName + "-rgb-r"): $tokenRgbR,
					($tokenName + "-rgb-g"): $tokenRgbG,
					($tokenName + "-rgb-b"): $tokenRgbB,
					($tokenName + "-rgb16-r"): $tokenRgb16R,
					($tokenName + "-rgb16-g"): $tokenRgb16G,
					($tokenName + "-rgb16-b"): $tokenRgb16B,
					($tokenName + "-dec-r"): $tokenDecR,
					($tokenName + "-dec-g"): $tokenDecG,
					($tokenName + "-dec-b"): $tokenDecB
				}'
		)

		bodyJson=$(echo "$bodyJson" "$tmpBodyJson" | jq -s 'add')
	done

	createFile

	lustache-cli -i "$headFileTemplate" --json-data "$headJson" >./"$fileName"

	echo >>./"$fileName"

	lustache-cli -i "$bodyFileTemplate" --json-data "$bodyJson" >>./"$fileName"

done