@fredlackey/devutils 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. package/src/utils/windows/winget.js +89 -27
@@ -0,0 +1,977 @@
1
+ # Installing woff2
2
+
3
+ ## Dependencies
4
+
5
+ ### macOS (Homebrew)
6
+ - **Required:**
7
+ - `Homebrew` - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or run `dev install homebrew`
8
+ - `Xcode Command Line Tools` - Install via `xcode-select --install`
9
+ - **Optional:** None
10
+ - **Auto-installed:**
11
+ - `brotli` - Compression library automatically installed by Homebrew when installing woff2
12
+
13
+ ### Ubuntu (APT/Snap)
14
+ - **Required:**
15
+ - `sudo privileges` - Required for running apt-get commands
16
+ - **Optional:** None
17
+ - **Auto-installed:**
18
+ - All runtime dependencies are automatically handled by the APT package manager
19
+
20
+ ### Raspberry Pi OS (APT/Snap)
21
+ - **Required:**
22
+ - `sudo privileges` - Required for running apt-get commands
23
+ - **Optional:** None
24
+ - **Auto-installed:**
25
+ - All runtime dependencies are automatically handled by the APT package manager
26
+
27
+ ### Amazon Linux (DNF/YUM)
28
+ - **Required:**
29
+ - `sudo privileges` - Required for installing build dependencies and binaries
30
+ - `gcc-c++` - Install via `sudo dnf install -y gcc-c++` (AL2023) or `sudo yum install -y gcc-c++` (AL2)
31
+ - `cmake` - Install via `sudo dnf install -y cmake` (AL2023) or `sudo yum install -y cmake3` (AL2)
32
+ - `git` - Install via `sudo dnf install -y git` (AL2023) or `sudo yum install -y git` (AL2)
33
+ - `brotli-devel` - Install via `sudo dnf install -y brotli-devel` (AL2023 only; AL2 uses bundled brotli)
34
+ - **Optional:** None
35
+ - **Auto-installed:**
36
+ - `brotli` (bundled) - For Amazon Linux 2, brotli is included as a git submodule and compiled during the build process
37
+
38
+ ### Windows (Chocolatey/winget)
39
+ - **Required:** Installation not yet supported on this platform
40
+ - **Optional:** None
41
+ - **Auto-installed:** None
42
+ - **Note:** The installer provides instructions to use WSL (Windows Subsystem for Linux) as an alternative. See the WSL section for WSL-specific dependencies.
43
+
44
+ ### Git Bash (Manual/Portable)
45
+ - **Required:** Installation not yet supported on this platform
46
+ - **Optional:** None
47
+ - **Auto-installed:** None
48
+ - **Note:** The installer provides instructions to use WSL (Windows Subsystem for Linux) as an alternative, either by installing woff2 in WSL directly or by creating wrapper scripts in Git Bash that invoke WSL commands.
49
+
50
+ ## Overview
51
+
52
+ woff2 is Google's reference implementation of the Web Open Font Format 2.0 (WOFF2), a modern, highly compressed container format for packaging TrueType and OpenType fonts for efficient delivery over the web. WOFF2 uses the Brotli compression algorithm to achieve significantly better compression ratios than the original WOFF 1.0 format, typically reducing font file sizes by 30% compared to WOFF 1.0 and up to 50-70% compared to uncompressed TTF/OTF fonts.
53
+
54
+ Key capabilities include:
55
+
56
+ - **Font Compression**: Convert TTF and OTF fonts to highly compressed WOFF2 format using `woff2_compress`
57
+ - **Font Decompression**: Convert WOFF2 files back to TTF format using `woff2_decompress`
58
+ - **Font Information**: Display metadata and file information using `woff2_info`
59
+ - **Brotli Compression**: Leverages Google's Brotli algorithm for superior compression ratios
60
+ - **Variable Font Support**: Full support for modern variable fonts and OpenType features
61
+
62
+ WOFF2 is the recommended format for web fonts due to its excellent browser support and compression efficiency. All modern browsers support WOFF2, making it the preferred choice for web developers optimizing font delivery.
63
+
64
+ ## Prerequisites
65
+
66
+ Before installing woff2 on any platform, ensure:
67
+
68
+ 1. **Internet connectivity** - Required to download packages or source code
69
+ 2. **Administrative privileges** - Required for system-wide installation
70
+ 3. **Sufficient disk space** - At least 100 MB for installation with dependencies (more if compiling from source)
71
+
72
+ ## Platform-Specific Installation
73
+
74
+ ### macOS (Homebrew)
75
+
76
+ #### Prerequisites
77
+
78
+ - macOS 12 (Monterey) or later
79
+ - Homebrew package manager installed
80
+ - Xcode Command Line Tools installed
81
+
82
+ If Homebrew is not installed, install it first:
83
+
84
+ ```bash
85
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
86
+ ```
87
+
88
+ If Xcode Command Line Tools are not installed:
89
+
90
+ ```bash
91
+ xcode-select --install
92
+ ```
93
+
94
+ #### Installation Steps
95
+
96
+ Run the following command to install woff2:
97
+
98
+ ```bash
99
+ brew install --quiet woff2
100
+ ```
101
+
102
+ The `--quiet` flag suppresses non-essential output for cleaner automation. Homebrew automatically installs the required dependency `brotli` (the compression library) if it is not already present.
103
+
104
+ #### Verification
105
+
106
+ Confirm the installation succeeded by checking the version:
107
+
108
+ ```bash
109
+ woff2_compress --version
110
+ ```
111
+
112
+ Expected output (version numbers may vary):
113
+
114
+ ```
115
+ woff2_compress 1.0.2
116
+ ```
117
+
118
+ Test that all tools are available:
119
+
120
+ ```bash
121
+ woff2_decompress --version
122
+ woff2_info --version
123
+ ```
124
+
125
+ Verify the installation path:
126
+
127
+ ```bash
128
+ which woff2_compress
129
+ ```
130
+
131
+ Expected output: `/opt/homebrew/bin/woff2_compress` (Apple Silicon) or `/usr/local/bin/woff2_compress` (Intel).
132
+
133
+ #### Troubleshooting
134
+
135
+ **Problem**: `woff2_compress: command not found` after installation
136
+
137
+ **Solution**: Homebrew may not be in your PATH. Add it to your shell profile:
138
+
139
+ For Apple Silicon Macs (M1/M2/M3/M4):
140
+
141
+ ```bash
142
+ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
143
+ source ~/.zshrc
144
+ ```
145
+
146
+ For Intel Macs:
147
+
148
+ ```bash
149
+ echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
150
+ source ~/.zshrc
151
+ ```
152
+
153
+ **Problem**: Installation fails with permission errors
154
+
155
+ **Solution**: Fix Homebrew permissions:
156
+
157
+ ```bash
158
+ sudo chown -R $(whoami) $(brew --prefix)/*
159
+ ```
160
+
161
+ **Problem**: Outdated version installed
162
+
163
+ **Solution**: Update Homebrew and upgrade woff2:
164
+
165
+ ```bash
166
+ brew update && brew upgrade woff2
167
+ ```
168
+
169
+ ---
170
+
171
+ ### Ubuntu/Debian (APT)
172
+
173
+ #### Prerequisites
174
+
175
+ - Ubuntu 20.04 LTS or later, or Debian 11 (Bullseye) or later
176
+ - sudo privileges
177
+ - At least 50 MB free disk space
178
+
179
+ #### Installation Steps
180
+
181
+ Run the following commands to update the package index and install woff2:
182
+
183
+ ```bash
184
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
185
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
186
+ ```
187
+
188
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully unattended installation without prompts. The woff2 package includes three command-line utilities: `woff2_compress`, `woff2_decompress`, and `woff2_info`.
189
+
190
+ **Package versions by distribution:**
191
+
192
+ | Distribution | Version |
193
+ |--------------|---------|
194
+ | Ubuntu 24.04 (Noble) | 1.0.2-2build1 |
195
+ | Ubuntu 22.04 (Jammy) | 1.0.2-1build4 |
196
+ | Ubuntu 20.04 (Focal) | 1.0.2-1build2 |
197
+ | Debian 12 (Bookworm) | 1.0.2-2 |
198
+ | Debian 11 (Bullseye) | 1.0.2-1+b1 |
199
+
200
+ #### Verification
201
+
202
+ Confirm the installation succeeded:
203
+
204
+ ```bash
205
+ woff2_compress --version
206
+ ```
207
+
208
+ Expected output (version numbers may vary):
209
+
210
+ ```
211
+ woff2_compress 1.0.2
212
+ ```
213
+
214
+ Test that all tools are available:
215
+
216
+ ```bash
217
+ woff2_decompress --version
218
+ woff2_info --version
219
+ ```
220
+
221
+ Verify the installation path:
222
+
223
+ ```bash
224
+ which woff2_compress
225
+ ```
226
+
227
+ Expected output: `/usr/bin/woff2_compress`
228
+
229
+ #### Troubleshooting
230
+
231
+ **Problem**: `E: Unable to locate package woff2`
232
+
233
+ **Solution**: Update the package index:
234
+
235
+ ```bash
236
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
237
+ ```
238
+
239
+ If still unavailable, verify your sources.list includes the universe repository (Ubuntu):
240
+
241
+ ```bash
242
+ sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y universe
243
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
244
+ ```
245
+
246
+ **Problem**: Need to install the development libraries
247
+
248
+ **Solution**: Install the development package for linking against libwoff:
249
+
250
+ ```bash
251
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libwoff-dev
252
+ ```
253
+
254
+ ---
255
+
256
+ ### Raspberry Pi OS (APT)
257
+
258
+ #### Prerequisites
259
+
260
+ - Raspberry Pi OS (Bookworm or Bullseye), 32-bit or 64-bit
261
+ - Raspberry Pi 3 or later recommended
262
+ - sudo privileges
263
+ - At least 50 MB free disk space
264
+
265
+ #### Installation Steps
266
+
267
+ Raspberry Pi OS is based on Debian, so the installation process uses APT. Run the following commands:
268
+
269
+ ```bash
270
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
271
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
272
+ ```
273
+
274
+ **ARM Architecture Note**: The woff2 package is available for ARM architectures (armhf, arm64) in the Debian/Raspberry Pi OS repositories. The package is compiled natively for ARM, so no special considerations are required.
275
+
276
+ **Available ARM architectures:**
277
+
278
+ | Architecture | Description |
279
+ |--------------|-------------|
280
+ | arm64 | 64-bit Raspberry Pi OS (Pi 3, 4, 5 with 64-bit OS) |
281
+ | armhf | 32-bit Raspberry Pi OS (Pi 2, 3, 4, 5 with 32-bit OS) |
282
+
283
+ #### Verification
284
+
285
+ Confirm the installation succeeded:
286
+
287
+ ```bash
288
+ woff2_compress --version
289
+ ```
290
+
291
+ Expected output (version numbers may vary):
292
+
293
+ ```
294
+ woff2_compress 1.0.2
295
+ ```
296
+
297
+ Verify your architecture:
298
+
299
+ ```bash
300
+ uname -m
301
+ ```
302
+
303
+ Expected output: `aarch64` (64-bit) or `armv7l` (32-bit).
304
+
305
+ Test that all tools are available:
306
+
307
+ ```bash
308
+ woff2_decompress --version
309
+ woff2_info --version
310
+ ```
311
+
312
+ #### Troubleshooting
313
+
314
+ **Problem**: Package not found
315
+
316
+ **Solution**: Ensure your package lists are current:
317
+
318
+ ```bash
319
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
320
+ ```
321
+
322
+ **Problem**: Slow compression on older Raspberry Pi models
323
+
324
+ **Solution**: Font compression is CPU-intensive. On Raspberry Pi 2 or earlier models, expect longer processing times. Consider processing large font collections on a more powerful machine.
325
+
326
+ **Problem**: Out of memory during compression of large fonts
327
+
328
+ **Solution**: Add swap space if needed:
329
+
330
+ ```bash
331
+ sudo fallocate -l 1G /swapfile
332
+ sudo chmod 600 /swapfile
333
+ sudo mkswap /swapfile
334
+ sudo swapon /swapfile
335
+ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
336
+ ```
337
+
338
+ ---
339
+
340
+ ### Amazon Linux (DNF/YUM)
341
+
342
+ #### Prerequisites
343
+
344
+ - Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
345
+ - sudo privileges
346
+ - Development tools for compiling from source
347
+ - At least 200 MB free disk space
348
+
349
+ **Important**: woff2 is NOT available in the standard Amazon Linux repositories or SPAL (Supplementary Packages for Amazon Linux). This guide compiles from source using the official Google codebase.
350
+
351
+ #### Installation Steps
352
+
353
+ **Step 1: Install build dependencies**
354
+
355
+ For Amazon Linux 2023:
356
+
357
+ ```bash
358
+ sudo dnf install -y gcc-c++ cmake git brotli-devel
359
+ ```
360
+
361
+ For Amazon Linux 2:
362
+
363
+ ```bash
364
+ sudo yum install -y gcc-c++ cmake3 git
365
+ ```
366
+
367
+ **Note**: Amazon Linux 2 does not have brotli-devel in its repositories. The build process will use the bundled brotli submodule.
368
+
369
+ **Step 2: Clone the source repository with submodules**
370
+
371
+ ```bash
372
+ cd /tmp
373
+ git clone --recursive https://github.com/google/woff2.git
374
+ cd woff2
375
+ ```
376
+
377
+ The `--recursive` flag ensures the brotli submodule is also cloned.
378
+
379
+ **Step 3: Build the tools**
380
+
381
+ For Amazon Linux 2023:
382
+
383
+ ```bash
384
+ mkdir out
385
+ cd out
386
+ cmake ..
387
+ make -j$(nproc)
388
+ ```
389
+
390
+ For Amazon Linux 2 (using cmake3):
391
+
392
+ ```bash
393
+ mkdir out
394
+ cd out
395
+ cmake3 ..
396
+ make -j$(nproc)
397
+ ```
398
+
399
+ **Step 4: Install the binaries**
400
+
401
+ ```bash
402
+ sudo make install
403
+ ```
404
+
405
+ This installs the binaries to `/usr/local/bin` and libraries to `/usr/local/lib64` (or `/usr/local/lib`).
406
+
407
+ **Step 5: Update the library cache**
408
+
409
+ ```bash
410
+ sudo ldconfig
411
+ ```
412
+
413
+ **Step 6: Clean up**
414
+
415
+ ```bash
416
+ cd /
417
+ rm -rf /tmp/woff2
418
+ ```
419
+
420
+ #### Verification
421
+
422
+ Confirm the installation succeeded:
423
+
424
+ ```bash
425
+ woff2_compress --version
426
+ ```
427
+
428
+ Expected output:
429
+
430
+ ```
431
+ woff2_compress 1.0.2
432
+ ```
433
+
434
+ Test that all tools are available:
435
+
436
+ ```bash
437
+ woff2_decompress --version
438
+ woff2_info --version
439
+ ```
440
+
441
+ #### Troubleshooting
442
+
443
+ **Problem**: `woff2_compress: command not found` after installation
444
+
445
+ **Solution**: Ensure `/usr/local/bin` is in your PATH:
446
+
447
+ ```bash
448
+ echo $PATH | grep -q '/usr/local/bin' && echo "PATH OK" || echo "PATH missing /usr/local/bin"
449
+ ```
450
+
451
+ If missing, add it:
452
+
453
+ ```bash
454
+ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
455
+ source ~/.bashrc
456
+ ```
457
+
458
+ **Problem**: `error while loading shared libraries: libwoff2common.so.1.0.2`
459
+
460
+ **Solution**: The library path may not be configured. Run:
461
+
462
+ ```bash
463
+ sudo ldconfig
464
+ ```
465
+
466
+ If the issue persists, add the library path explicitly:
467
+
468
+ ```bash
469
+ echo '/usr/local/lib64' | sudo tee /etc/ld.so.conf.d/woff2.conf
470
+ sudo ldconfig
471
+ ```
472
+
473
+ **Problem**: CMake fails with "Could NOT find Brotli"
474
+
475
+ **Solution**: For Amazon Linux 2023, install brotli-devel:
476
+
477
+ ```bash
478
+ sudo dnf install -y brotli-devel
479
+ ```
480
+
481
+ For Amazon Linux 2, use the bundled brotli by cloning with `--recursive`:
482
+
483
+ ```bash
484
+ git clone --recursive https://github.com/google/woff2.git
485
+ ```
486
+
487
+ **Problem**: Git clone fails
488
+
489
+ **Solution**: Ensure git is installed:
490
+
491
+ ```bash
492
+ sudo dnf install -y git # AL2023
493
+ sudo yum install -y git # AL2
494
+ ```
495
+
496
+ ---
497
+
498
+ ### Windows (Chocolatey)
499
+
500
+ #### Prerequisites
501
+
502
+ - Windows 10 or later (64-bit)
503
+ - Administrator PowerShell or Command Prompt
504
+ - Visual Studio Build Tools or Visual Studio with C++ support
505
+ - CMake and Git
506
+
507
+ **Important**: woff2 is NOT available as a Chocolatey or winget package. This guide compiles from source using Visual Studio Build Tools. For a simpler approach, use WSL (Windows Subsystem for Linux) instead.
508
+
509
+ #### Installation Steps
510
+
511
+ **Step 1: Install build prerequisites via Chocolatey**
512
+
513
+ Run the following commands in an Administrator PowerShell:
514
+
515
+ ```powershell
516
+ choco install git -y
517
+ choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y
518
+ choco install visualstudio2022buildtools -y --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
519
+ ```
520
+
521
+ Close and reopen PowerShell after installation to refresh the PATH.
522
+
523
+ **Step 2: Clone the source repository**
524
+
525
+ Open a new Administrator PowerShell and run:
526
+
527
+ ```powershell
528
+ cd $env:TEMP
529
+ git clone --recursive https://github.com/google/woff2.git
530
+ cd woff2
531
+ ```
532
+
533
+ **Step 3: Build using CMake and Visual Studio**
534
+
535
+ ```powershell
536
+ mkdir out
537
+ cd out
538
+ cmake .. -G "Visual Studio 17 2022" -A x64
539
+ cmake --build . --config Release
540
+ ```
541
+
542
+ **Step 4: Install the binaries**
543
+
544
+ Copy the built executables to a directory in your PATH:
545
+
546
+ ```powershell
547
+ New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\bin"
548
+ Copy-Item ".\Release\woff2_compress.exe" "$env:USERPROFILE\bin\"
549
+ Copy-Item ".\Release\woff2_decompress.exe" "$env:USERPROFILE\bin\"
550
+ Copy-Item ".\Release\woff2_info.exe" "$env:USERPROFILE\bin\"
551
+ ```
552
+
553
+ **Step 5: Add to PATH**
554
+
555
+ ```powershell
556
+ $userPath = [Environment]::GetEnvironmentVariable("PATH", "User")
557
+ if ($userPath -notlike "*$env:USERPROFILE\bin*") {
558
+ [Environment]::SetEnvironmentVariable("PATH", "$userPath;$env:USERPROFILE\bin", "User")
559
+ }
560
+ ```
561
+
562
+ Close and reopen PowerShell to apply the PATH change.
563
+
564
+ **Step 6: Clean up**
565
+
566
+ ```powershell
567
+ Remove-Item -Recurse -Force "$env:TEMP\woff2"
568
+ ```
569
+
570
+ #### Verification
571
+
572
+ Open a new PowerShell window and run:
573
+
574
+ ```powershell
575
+ woff2_compress --version
576
+ ```
577
+
578
+ Expected output:
579
+
580
+ ```
581
+ woff2_compress 1.0.2
582
+ ```
583
+
584
+ Test that all tools are available:
585
+
586
+ ```powershell
587
+ woff2_decompress --version
588
+ woff2_info --version
589
+ ```
590
+
591
+ #### Troubleshooting
592
+
593
+ **Problem**: CMake fails to find Visual Studio
594
+
595
+ **Solution**: Ensure Visual Studio Build Tools are installed with C++ support:
596
+
597
+ ```powershell
598
+ choco install visualstudio2022buildtools -y --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
599
+ ```
600
+
601
+ **Problem**: `woff2_compress` is not recognized
602
+
603
+ **Solution**: Verify the binaries exist and PATH is set:
604
+
605
+ ```powershell
606
+ Test-Path "$env:USERPROFILE\bin\woff2_compress.exe"
607
+ $env:PATH -split ';' | Select-String -Pattern 'bin'
608
+ ```
609
+
610
+ Open a new PowerShell window to pick up PATH changes.
611
+
612
+ **Problem**: Build fails with linker errors
613
+
614
+ **Solution**: Ensure you are using the Release configuration:
615
+
616
+ ```powershell
617
+ cmake --build . --config Release
618
+ ```
619
+
620
+ **Problem**: Prefer a simpler installation method
621
+
622
+ **Solution**: Use WSL (Windows Subsystem for Linux) instead. See the WSL section below.
623
+
624
+ ---
625
+
626
+ ### WSL (Ubuntu)
627
+
628
+ #### Prerequisites
629
+
630
+ - Windows 10 version 2004 or higher, or Windows 11
631
+ - WSL 2 enabled with Ubuntu distribution installed
632
+ - sudo privileges within WSL
633
+
634
+ **Note**: WSL provides a full Linux environment, allowing you to use the native Ubuntu package. This is the recommended approach for Windows users who want to avoid compiling from source.
635
+
636
+ #### Installation Steps
637
+
638
+ Open your WSL Ubuntu terminal and run:
639
+
640
+ ```bash
641
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
642
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
643
+ ```
644
+
645
+ The installation process is identical to native Ubuntu since WSL Ubuntu uses the same package repositories.
646
+
647
+ #### Verification
648
+
649
+ Confirm the installation succeeded:
650
+
651
+ ```bash
652
+ woff2_compress --version
653
+ ```
654
+
655
+ Expected output (version numbers may vary):
656
+
657
+ ```
658
+ woff2_compress 1.0.2
659
+ ```
660
+
661
+ Test that all tools are available:
662
+
663
+ ```bash
664
+ woff2_decompress --version
665
+ woff2_info --version
666
+ ```
667
+
668
+ #### Troubleshooting
669
+
670
+ **Problem**: Package installation fails with network errors
671
+
672
+ **Solution**: WSL may have DNS issues. Update the resolv.conf:
673
+
674
+ ```bash
675
+ echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
676
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
677
+ ```
678
+
679
+ **Problem**: Need to process font files on Windows filesystem
680
+
681
+ **Solution**: Access Windows files through `/mnt/c/`:
682
+
683
+ ```bash
684
+ # Example: Compress a font from Windows Downloads folder
685
+ woff2_compress /mnt/c/Users/YourUsername/Downloads/myfont.ttf
686
+ # Output will be /mnt/c/Users/YourUsername/Downloads/myfont.woff2
687
+ ```
688
+
689
+ **Problem**: WSL itself is not installed
690
+
691
+ **Solution**: Install WSL from an Administrator PowerShell on Windows:
692
+
693
+ ```powershell
694
+ wsl --install
695
+ ```
696
+
697
+ Restart your computer after installation.
698
+
699
+ **Problem**: Need to use woff2 from Windows command line
700
+
701
+ **Solution**: You can call WSL commands from Windows:
702
+
703
+ ```powershell
704
+ wsl woff2_compress /mnt/c/Users/YourUsername/Downloads/myfont.ttf
705
+ ```
706
+
707
+ ---
708
+
709
+ ### Git Bash (Manual/Portable)
710
+
711
+ #### Prerequisites
712
+
713
+ - Windows 10 or later (64-bit)
714
+ - Git Bash installed (comes with Git for Windows)
715
+ - WSL with Ubuntu installed (recommended approach)
716
+
717
+ **Note**: Git Bash runs in a MinGW environment on Windows. Compiling woff2 natively in MinGW is complex due to build tool requirements. The recommended approach is to use WSL from within Git Bash.
718
+
719
+ #### Installation Steps
720
+
721
+ **Recommended: Use WSL from Git Bash**
722
+
723
+ If WSL is installed with Ubuntu, you can use woff2 through WSL:
724
+
725
+ **Step 1: Install woff2 in WSL**
726
+
727
+ From Git Bash, run:
728
+
729
+ ```bash
730
+ wsl sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
731
+ wsl sudo DEBIAN_FRONTEND=noninteractive apt-get install -y woff2
732
+ ```
733
+
734
+ **Step 2: Create wrapper scripts**
735
+
736
+ Create wrapper scripts in Git Bash to call the WSL commands:
737
+
738
+ ```bash
739
+ mkdir -p ~/bin
740
+
741
+ cat > ~/bin/woff2_compress << 'EOF'
742
+ #!/bin/bash
743
+ wsl woff2_compress "$@"
744
+ EOF
745
+ chmod +x ~/bin/woff2_compress
746
+
747
+ cat > ~/bin/woff2_decompress << 'EOF'
748
+ #!/bin/bash
749
+ wsl woff2_decompress "$@"
750
+ EOF
751
+ chmod +x ~/bin/woff2_decompress
752
+
753
+ cat > ~/bin/woff2_info << 'EOF'
754
+ #!/bin/bash
755
+ wsl woff2_info "$@"
756
+ EOF
757
+ chmod +x ~/bin/woff2_info
758
+ ```
759
+
760
+ **Step 3: Add to PATH**
761
+
762
+ ```bash
763
+ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
764
+ source ~/.bashrc
765
+ ```
766
+
767
+ #### Verification
768
+
769
+ Confirm the installation succeeded:
770
+
771
+ ```bash
772
+ woff2_compress --version
773
+ ```
774
+
775
+ Expected output (version numbers may vary):
776
+
777
+ ```
778
+ woff2_compress 1.0.2
779
+ ```
780
+
781
+ Test that all tools are available:
782
+
783
+ ```bash
784
+ woff2_decompress --version
785
+ woff2_info --version
786
+ ```
787
+
788
+ #### Troubleshooting
789
+
790
+ **Problem**: `wsl: command not found`
791
+
792
+ **Solution**: WSL is not installed or not in PATH. Install WSL from an Administrator PowerShell:
793
+
794
+ ```powershell
795
+ wsl --install
796
+ ```
797
+
798
+ **Problem**: Path conversion issues with Windows-style paths
799
+
800
+ **Solution**: Use WSL path format when calling the commands:
801
+
802
+ ```bash
803
+ # Convert Windows path to WSL path
804
+ # Instead of: woff2_compress "C:\Users\Me\Fonts\font.ttf"
805
+ woff2_compress "/mnt/c/Users/Me/Fonts/font.ttf"
806
+ ```
807
+
808
+ **Problem**: Need native Windows binaries
809
+
810
+ **Solution**: Follow the Windows (Chocolatey) section to compile from source, or use pre-built binaries if available from third-party sources.
811
+
812
+ ---
813
+
814
+ ## Post-Installation Configuration
815
+
816
+ After installing woff2 on any platform, review these usage examples and tips.
817
+
818
+ ### Basic Usage
819
+
820
+ **Compress a TrueType font to WOFF2:**
821
+
822
+ ```bash
823
+ woff2_compress myfont.ttf
824
+ # Creates myfont.woff2 in the same directory
825
+ ```
826
+
827
+ **Decompress a WOFF2 font back to TrueType:**
828
+
829
+ ```bash
830
+ woff2_decompress myfont.woff2
831
+ # Creates myfont.ttf in the same directory
832
+ ```
833
+
834
+ **Display information about a WOFF2 file:**
835
+
836
+ ```bash
837
+ woff2_info myfont.woff2
838
+ ```
839
+
840
+ ### Batch Processing
841
+
842
+ Convert all TTF files in a directory to WOFF2:
843
+
844
+ ```bash
845
+ for f in *.ttf; do woff2_compress "$f"; done
846
+ ```
847
+
848
+ Convert all OTF files (note: OTF files work the same way):
849
+
850
+ ```bash
851
+ for f in *.otf; do woff2_compress "$f"; done
852
+ ```
853
+
854
+ ### Comparing Compression Results
855
+
856
+ Check file sizes before and after compression:
857
+
858
+ ```bash
859
+ # Original file size
860
+ ls -lh myfont.ttf
861
+
862
+ # Compress
863
+ woff2_compress myfont.ttf
864
+
865
+ # Compressed file size
866
+ ls -lh myfont.woff2
867
+ ```
868
+
869
+ Typical compression ratios:
870
+ - WOFF2 is typically 30% smaller than WOFF 1.0
871
+ - WOFF2 is typically 50-70% smaller than uncompressed TTF/OTF
872
+
873
+ ### Integration with Build Tools
874
+
875
+ For web development projects, you can integrate woff2 into your build process:
876
+
877
+ ```bash
878
+ # Example: Compress all fonts in a fonts directory
879
+ find ./fonts -name "*.ttf" -exec woff2_compress {} \;
880
+ find ./fonts -name "*.otf" -exec woff2_compress {} \;
881
+ ```
882
+
883
+ ---
884
+
885
+ ## Common Issues
886
+
887
+ ### Issue: Compression Fails with No Output
888
+
889
+ **Symptoms**: `woff2_compress` runs but no .woff2 file is created
890
+
891
+ **Solutions**:
892
+
893
+ - Verify the input file exists and is a valid TTF or OTF font:
894
+
895
+ ```bash
896
+ file myfont.ttf
897
+ ```
898
+
899
+ Expected output should indicate a TrueType or OpenType font.
900
+
901
+ - Check file permissions on the output directory
902
+ - Ensure sufficient disk space
903
+
904
+ ### Issue: "Malformed font" or Compression Errors
905
+
906
+ **Symptoms**: woff2_compress reports font data errors
907
+
908
+ **Solutions**:
909
+
910
+ - Verify the input file is a TrueType (.ttf) or OpenType (.otf) font, not already a WOFF or WOFF2 file
911
+ - Some fonts with unusual table structures may not compress correctly
912
+ - Try using a font editor (like FontForge) to re-export the font before compression
913
+
914
+ ### Issue: Large Output File Size
915
+
916
+ **Symptoms**: WOFF2 file is not significantly smaller than the original
917
+
918
+ **Solutions**:
919
+
920
+ - This can occur with already-optimized fonts or fonts with embedded bitmaps
921
+ - WOFF2 works best with vector-based fonts
922
+ - Consider subsetting the font to remove unused glyphs using tools like `pyftsubset` from fonttools
923
+
924
+ ### Issue: Decompressed Font Differs from Original
925
+
926
+ **Symptoms**: Round-trip compression/decompression produces a different file
927
+
928
+ **Solutions**:
929
+
930
+ - This is expected behavior. WOFF2 normalization may reorder tables or apply other transformations
931
+ - The fonts should be visually and functionally identical
932
+ - Compare glyphs using a font comparison tool rather than file hashes
933
+
934
+ ### Issue: Variable Font Support
935
+
936
+ **Symptoms**: Variable fonts fail to compress or decompress correctly
937
+
938
+ **Solutions**:
939
+
940
+ - Ensure you have woff2 version 1.0.2 or later, which includes improved variable font support
941
+ - Complex variable fonts may require the latest version from the git repository
942
+ - Check the Google woff2 GitHub issues for known limitations
943
+
944
+ ### Issue: Cannot Find Shared Libraries on Linux
945
+
946
+ **Symptoms**: `error while loading shared libraries: libwoff2common.so`
947
+
948
+ **Solutions**:
949
+
950
+ - Run `sudo ldconfig` to update the library cache
951
+ - Verify the library path is configured:
952
+
953
+ ```bash
954
+ echo '/usr/local/lib64' | sudo tee /etc/ld.so.conf.d/woff2.conf
955
+ sudo ldconfig
956
+ ```
957
+
958
+ - Alternatively, set LD_LIBRARY_PATH:
959
+
960
+ ```bash
961
+ export LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
962
+ ```
963
+
964
+ ---
965
+
966
+ ## References
967
+
968
+ - [Google woff2 GitHub Repository](https://github.com/google/woff2)
969
+ - [WOFF 2.0 W3C Recommendation](https://www.w3.org/TR/WOFF2/)
970
+ - [WOFF 2.0 Evaluation Report](https://www.w3.org/TR/WOFF20ER/)
971
+ - [Homebrew woff2 Formula](https://formulae.brew.sh/formula/woff2)
972
+ - [Ubuntu Packages - woff2](https://packages.ubuntu.com/woff2)
973
+ - [Debian Packages - woff2](https://packages.debian.org/woff2)
974
+ - [Fedora Packages - woff2](https://packages.fedoraproject.org/pkgs/woff2/woff2/)
975
+ - [Brotli Compression Algorithm](https://github.com/google/brotli)
976
+ - [MDN Web Docs - WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_fonts/WOFF)
977
+ - [Can I Use - WOFF2 Browser Support](https://caniuse.com/woff2)