galaaz 2.1.10.pre.4 → 2.1.10.pre.6
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/lib/galaaz/cli.rb +127 -10
- data/logos/icon-font/README.md +5 -2
- data/logos/icon-font/build_font.py +136 -55
- data/script/omarchy/README.md +12 -10
- data/script/omarchy/fonts/galaaz.ttf +0 -0
- data/script/omarchy/fonts/omarchy-with-galaaz.ttf +0 -0
- data/script/omarchy/install-galaaz.sh +51 -39
- data/script/omarchy/omarchy-menu.jsonc +22 -22
- data/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b1175b28a0271d54017f9688e6436c326da0305c6b383285d9a4adb11538018d
|
|
4
|
+
data.tar.gz: 43c3c80c7764e8a959d45b382a781c1a504e4ea7b3c7028dc3763e8c3493b04e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a038c5ac9ff9eaacd0cd85af5e8613675e27157e2eea28b006d15d6b9083f8059b65b45e5ad8eedacffba22b464c68e288c82f1c2cb2dbf0c3074526f16eaa2e
|
|
7
|
+
data.tar.gz: 4f2eb91d9ccf66c15ad503116a0e14602491b73623eca7395ca2a2dedc6342e900f34ba2d838405879660ff62a74b7fed62163658a6ea33ae0085108affc7149
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 2.1.10.pre.6
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Omarchy **Galaaz (core)** no longer runs `gem install` / uninstall. Flow is:
|
|
10
|
+
`gem install galaaz` → `galaaz omarchy install` → menu core (setup + blogs).
|
|
11
|
+
- `galaaz --version` / `-v` / `version` prints the installed gem version;
|
|
12
|
+
`galaaz doctor` shows `version:`.
|
|
13
|
+
- `galaaz blogs sync` refreshes sty + logo includes without wiping blogs;
|
|
14
|
+
core installer syncs on re-run; `galaaz add knit` refreshes brand assets.
|
|
15
|
+
|
|
16
|
+
## 2.1.10.pre.5
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Omarchy menu icons: use `"iconFont": "omarchy"` + **U+E90E** via shipped
|
|
21
|
+
`omarchy-with-galaaz.ttf` (Omarchy brand font + Galaaz R/gem). A custom
|
|
22
|
+
family `galaaz` alone rendered as missing-glyph tofu (`//'`) because Qt
|
|
23
|
+
does not load that family for the menu.
|
|
24
|
+
|
|
5
25
|
## 2.1.10.pre.4
|
|
6
26
|
|
|
7
27
|
### Fixed
|
data/lib/galaaz/cli.rb
CHANGED
|
@@ -30,8 +30,12 @@ module Galaaz
|
|
|
30
30
|
['debug-galaaz.sh', 'omarchy-galaaz-debug', true]
|
|
31
31
|
].freeze
|
|
32
32
|
OMARCHY_MENU_FILE = 'omarchy-menu.jsonc'
|
|
33
|
+
# Standalone family "galaaz" (debug). Menu uses the merged Omarchy brand font.
|
|
33
34
|
OMARCHY_FONT_REL = File.join('fonts', 'galaaz.ttf')
|
|
34
|
-
|
|
35
|
+
OMARCHY_MERGED_FONT_REL = File.join('fonts', 'omarchy-with-galaaz.ttf')
|
|
36
|
+
# Menu rows use iconFont "omarchy" + U+E90E (Qt already loads family omarchy).
|
|
37
|
+
OMARCHY_MENU_FONT_FAMILY = 'omarchy'
|
|
38
|
+
OMARCHY_MENU_CODEPOINT = 0xE90E
|
|
35
39
|
BLOGS_MARKER = '.galaaz-blogs'
|
|
36
40
|
EXAMPLES_MARKER = '.galaaz-examples'
|
|
37
41
|
CRAN = 'https://cloud.r-project.org'
|
|
@@ -44,12 +48,34 @@ module Galaaz
|
|
|
44
48
|
File.expand_path('../..', __dir__)
|
|
45
49
|
end
|
|
46
50
|
|
|
51
|
+
def gem_version
|
|
52
|
+
spec = Gem.loaded_specs['galaaz']
|
|
53
|
+
return spec.version.to_s if spec
|
|
54
|
+
|
|
55
|
+
begin
|
|
56
|
+
return Gem::Specification.find_by_name('galaaz').version.to_s
|
|
57
|
+
rescue LoadError, Gem::LoadError, NameError
|
|
58
|
+
# fall through to version.rb
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
version_rb = File.join(root, 'version.rb')
|
|
62
|
+
if File.file?(version_rb)
|
|
63
|
+
load version_rb
|
|
64
|
+
return $version.to_s if defined?($version) && $version
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
'unknown'
|
|
68
|
+
end
|
|
69
|
+
|
|
47
70
|
def run(argv)
|
|
48
71
|
cmd = argv[0]
|
|
49
72
|
case cmd
|
|
50
73
|
when nil, '-h', '--help', 'help'
|
|
51
74
|
print_help
|
|
52
75
|
0
|
|
76
|
+
when '-v', '--version', 'version'
|
|
77
|
+
puts "galaaz #{gem_version}"
|
|
78
|
+
0
|
|
53
79
|
when 'setup'
|
|
54
80
|
cmd_setup
|
|
55
81
|
when 'blogs'
|
|
@@ -78,18 +104,21 @@ module Galaaz
|
|
|
78
104
|
def print_help
|
|
79
105
|
puts <<~HELP
|
|
80
106
|
Usage: galaaz <command> [args]
|
|
107
|
+
galaaz --version
|
|
81
108
|
|
|
82
109
|
Commands:
|
|
83
110
|
setup Build the NewBridge gatekeeper; ensure Rcpp
|
|
84
111
|
blogs init [DIR] Copy blog sources (default: ~/galaaz-blogs)
|
|
85
112
|
and sty/galaaz.sty for PDF headers
|
|
86
113
|
Options: --force
|
|
114
|
+
blogs sync [DIR] Refresh sty + logo includes without wiping blogs
|
|
87
115
|
doctor Report Ruby, R, gatekeeper, Rcpp, sty, profiles
|
|
88
116
|
add PROFILE Install an add-on (idempotent)
|
|
89
117
|
Profiles: #{PROFILES.join(', ')}
|
|
90
118
|
omarchy [install] Install Omarchy menu overlay (bundled in gem)
|
|
91
119
|
Options: --from-git [--ref REF]
|
|
92
120
|
omarchy status Show whether overlay helpers are installed
|
|
121
|
+
--version, -v Print installed gem version (#{gem_version})
|
|
93
122
|
|
|
94
123
|
Legacy: any other argument is passed to rake in the Galaaz root
|
|
95
124
|
(e.g. galaaz master_list:scatter_plot).
|
|
@@ -152,7 +181,8 @@ module Galaaz
|
|
|
152
181
|
Writes:
|
|
153
182
|
~/.local/bin/omarchy-install-galaaz (and add/remove/guide/gknit/debug)
|
|
154
183
|
~/.config/omarchy/extensions/omarchy-menu.jsonc
|
|
155
|
-
~/.local/share/fonts/galaaz/galaaz.ttf
|
|
184
|
+
~/.local/share/fonts/galaaz/galaaz.ttf
|
|
185
|
+
~/.local/share/fonts/omarchy-with-galaaz.ttf (family omarchy + U+E90E)
|
|
156
186
|
|
|
157
187
|
Then: Super+Space → Install → Development → Galaaz
|
|
158
188
|
HELP
|
|
@@ -199,7 +229,9 @@ module Galaaz
|
|
|
199
229
|
end
|
|
200
230
|
puts " menu: #{File.file?(menu) ? menu : 'MISSING'}"
|
|
201
231
|
font = File.expand_path('~/.local/share/fonts/galaaz/galaaz.ttf')
|
|
202
|
-
puts " font: #{File.file?(font) ? font : 'MISSING'}"
|
|
232
|
+
puts " font galaaz: #{File.file?(font) ? font : 'MISSING'}"
|
|
233
|
+
merged = File.expand_path('~/.local/share/fonts/omarchy-with-galaaz.ttf')
|
|
234
|
+
puts " font omarchy+galaaz: #{File.file?(merged) ? merged : 'MISSING'}"
|
|
203
235
|
bundled = File.join(root, 'script', 'omarchy')
|
|
204
236
|
puts " gem overlay: #{File.directory?(bundled) ? bundled : 'MISSING (reinstall gem)'}"
|
|
205
237
|
0
|
|
@@ -211,7 +243,8 @@ module Galaaz
|
|
|
211
243
|
abort_unless(
|
|
212
244
|
File.file?(File.join(d, 'install-galaaz.sh')) &&
|
|
213
245
|
File.file?(File.join(d, OMARCHY_MENU_FILE)) &&
|
|
214
|
-
File.file?(File.join(d, OMARCHY_FONT_REL))
|
|
246
|
+
File.file?(File.join(d, OMARCHY_FONT_REL)) &&
|
|
247
|
+
File.file?(File.join(d, OMARCHY_MERGED_FONT_REL)),
|
|
215
248
|
"incomplete Omarchy overlay in gem (#{d})"
|
|
216
249
|
)
|
|
217
250
|
d
|
|
@@ -222,7 +255,7 @@ module Galaaz
|
|
|
222
255
|
tmp = Dir.mktmpdir('galaaz-omarchy-')
|
|
223
256
|
base = "https://raw.githubusercontent.com/#{OMARCHY_GITHUB_REPO}/#{ref}/script/omarchy"
|
|
224
257
|
puts "galaaz omarchy: fetching #{base}/…"
|
|
225
|
-
names = OMARCHY_BIN_FILES.map(&:first) + [OMARCHY_MENU_FILE, OMARCHY_FONT_REL]
|
|
258
|
+
names = OMARCHY_BIN_FILES.map(&:first) + [OMARCHY_MENU_FILE, OMARCHY_FONT_REL, OMARCHY_MERGED_FONT_REL]
|
|
226
259
|
names.uniq.each do |name|
|
|
227
260
|
url = "#{base}/#{name}"
|
|
228
261
|
dest = File.join(tmp, name)
|
|
@@ -262,18 +295,53 @@ module Galaaz
|
|
|
262
295
|
end
|
|
263
296
|
|
|
264
297
|
def install_omarchy_font_from!(src_dir)
|
|
298
|
+
# 1) Standalone galaaz.ttf (family galaaz) — debugging / fc-list checks.
|
|
265
299
|
src = File.join(src_dir, OMARCHY_FONT_REL)
|
|
266
300
|
abort_unless(File.file?(src), "missing #{src} (rebuild with logos/icon-font/build_font.py)")
|
|
267
301
|
fonts = File.expand_path('~/.local/share/fonts/galaaz')
|
|
268
302
|
FileUtils.mkdir_p(fonts)
|
|
269
303
|
dest = File.join(fonts, 'galaaz.ttf')
|
|
270
304
|
FileUtils.cp(src, dest)
|
|
271
|
-
puts "galaaz omarchy: #{dest} (family
|
|
305
|
+
puts "galaaz omarchy: #{dest} (family galaaz, debug)"
|
|
306
|
+
|
|
307
|
+
# 2) Merged Omarchy brand font with Galaaz at U+E90E. Menu uses
|
|
308
|
+
# iconFont "omarchy" — the same family Cursor/Grok icons use, which Qt
|
|
309
|
+
# already loads. A custom family "galaaz" alone shows missing-glyph tofu.
|
|
310
|
+
merged_src = File.join(src_dir, OMARCHY_MERGED_FONT_REL)
|
|
311
|
+
abort_unless(
|
|
312
|
+
File.file?(merged_src),
|
|
313
|
+
"missing #{merged_src} (rebuild with logos/icon-font/build_font.py)"
|
|
314
|
+
)
|
|
315
|
+
# Prefer user font over /usr/share/fonts/**/omarchy.ttf
|
|
316
|
+
user_fonts = File.expand_path('~/.local/share/fonts')
|
|
317
|
+
FileUtils.mkdir_p(user_fonts)
|
|
318
|
+
merged_dest = File.join(user_fonts, 'omarchy-with-galaaz.ttf')
|
|
319
|
+
FileUtils.cp(merged_src, merged_dest)
|
|
320
|
+
puts "galaaz omarchy: #{merged_dest} (family #{OMARCHY_MENU_FONT_FAMILY}, U+#{OMARCHY_MENU_CODEPOINT.to_s(16).upcase})"
|
|
321
|
+
|
|
322
|
+
conf_dir = File.expand_path('~/.config/fontconfig/conf.d')
|
|
323
|
+
FileUtils.mkdir_p(conf_dir)
|
|
324
|
+
conf = File.join(conf_dir, '99-galaaz-omarchy-brand.conf')
|
|
325
|
+
File.write(conf, <<~XML)
|
|
326
|
+
<?xml version="1.0"?>
|
|
327
|
+
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
|
|
328
|
+
<fontconfig>
|
|
329
|
+
<!-- Prefer Galaaz-extended Omarchy brand font (adds U+E90E). -->
|
|
330
|
+
<selectfont>
|
|
331
|
+
<rejectfont>
|
|
332
|
+
<glob>*/omarchy/omarchy.ttf</glob>
|
|
333
|
+
</rejectfont>
|
|
334
|
+
</selectfont>
|
|
335
|
+
</fontconfig>
|
|
336
|
+
XML
|
|
337
|
+
puts "galaaz omarchy: #{conf}"
|
|
338
|
+
|
|
272
339
|
if command_present?('fc-cache')
|
|
273
340
|
system('fc-cache', '-r')
|
|
274
341
|
system('fc-cache', '-f', fonts)
|
|
342
|
+
system('fc-cache', '-f', user_fonts)
|
|
275
343
|
end
|
|
276
|
-
warn 'galaaz omarchy:
|
|
344
|
+
warn 'galaaz omarchy: logout/reboot required for Qt to reload brand fonts (killall omarchy-shell is often not enough)' \
|
|
277
345
|
if ENV['OMARCHY_PATH'] || File.directory?(File.expand_path('~/.config/omarchy'))
|
|
278
346
|
end
|
|
279
347
|
|
|
@@ -284,11 +352,14 @@ module Galaaz
|
|
|
284
352
|
case sub
|
|
285
353
|
when 'init'
|
|
286
354
|
blogs_init(argv[1..])
|
|
355
|
+
when 'sync'
|
|
356
|
+
blogs_sync(argv[1..])
|
|
287
357
|
when nil, '-h', '--help'
|
|
288
358
|
puts 'Usage: galaaz blogs init [DIR] [--force]'
|
|
359
|
+
puts ' galaaz blogs sync [DIR] # refresh sty + logo includes (no wipe)'
|
|
289
360
|
0
|
|
290
361
|
else
|
|
291
|
-
raise CliError, "unknown blogs subcommand: #{sub.inspect} (try: init)"
|
|
362
|
+
raise CliError, "unknown blogs subcommand: #{sub.inspect} (try: init|sync)"
|
|
292
363
|
end
|
|
293
364
|
end
|
|
294
365
|
|
|
@@ -301,7 +372,7 @@ module Galaaz
|
|
|
301
372
|
if File.exist?(dest)
|
|
302
373
|
entries = Dir.children(dest).reject { |n| n.start_with?('.') }
|
|
303
374
|
if !entries.empty? && !force
|
|
304
|
-
raise CliError, "#{dest} exists and is not empty (use --force to replace)"
|
|
375
|
+
raise CliError, "#{dest} exists and is not empty (use --force to replace, or: galaaz blogs sync)"
|
|
305
376
|
end
|
|
306
377
|
FileUtils.rm_rf(dest) if force
|
|
307
378
|
end
|
|
@@ -316,16 +387,28 @@ module Galaaz
|
|
|
316
387
|
end
|
|
317
388
|
|
|
318
389
|
File.write(File.join(dest, BLOGS_MARKER), "galaaz blogs init\n")
|
|
319
|
-
|
|
390
|
+
ensure_blog_knit_assets!(dest)
|
|
320
391
|
puts "galaaz blogs init: #{dest}"
|
|
321
392
|
puts "You can now knit with gknit (after: galaaz add knit)"
|
|
322
393
|
0
|
|
323
394
|
end
|
|
324
395
|
|
|
396
|
+
# Refresh sty + per-blog logo includes without wiping ~/galaaz-blogs.
|
|
397
|
+
# Needed after gem upgrades that ship new branding assets (pandoc error 99
|
|
398
|
+
# when _logo_before_body.html / lockup PNG / sty were missing from an older init).
|
|
399
|
+
def blogs_sync(argv)
|
|
400
|
+
dest = File.expand_path(argv[0] || detect_blogs_dir || DEFAULT_BLOGS_DIR)
|
|
401
|
+
abort_unless(File.directory?(dest), "blogs dir missing: #{dest} (run: galaaz blogs init)")
|
|
402
|
+
n = ensure_blog_knit_assets!(dest)
|
|
403
|
+
puts "galaaz blogs sync: #{dest} (#{n} brand files refreshed)"
|
|
404
|
+
0
|
|
405
|
+
end
|
|
406
|
+
|
|
325
407
|
# ---- doctor ----
|
|
326
408
|
|
|
327
409
|
def cmd_doctor
|
|
328
410
|
puts "galaaz doctor"
|
|
411
|
+
puts " version: #{gem_version}"
|
|
329
412
|
puts " root: #{root}"
|
|
330
413
|
print_ruby_engines
|
|
331
414
|
|
|
@@ -508,6 +591,11 @@ module Galaaz
|
|
|
508
591
|
end
|
|
509
592
|
mark_profile!('knit')
|
|
510
593
|
puts 'galaaz add knit: OK'
|
|
594
|
+
blogs = detect_blogs_dir
|
|
595
|
+
if blogs
|
|
596
|
+
ensure_blog_knit_assets!(blogs)
|
|
597
|
+
puts 'galaaz add knit: refreshed blog brand assets (sty + logos)'
|
|
598
|
+
end
|
|
511
599
|
puts 'Example knits (after blogs init → ~/galaaz-blogs):'
|
|
512
600
|
puts ' gknit ~/galaaz-blogs/oh_my/oh_my.Rmd'
|
|
513
601
|
puts ' gknit ~/galaaz-blogs/galaaz_ggplot/galaaz_ggplot.Rmd'
|
|
@@ -874,6 +962,35 @@ module Galaaz
|
|
|
874
962
|
dest
|
|
875
963
|
end
|
|
876
964
|
|
|
965
|
+
# Copy/overwrite brand includes required by blog YAML (pandoc before_body + PDF splash).
|
|
966
|
+
# Returns number of files written.
|
|
967
|
+
def ensure_blog_knit_assets!(blogs_dest)
|
|
968
|
+
blogs_dest = File.expand_path(blogs_dest)
|
|
969
|
+
install_galaaz_sty_for_blogs!(blogs_dest)
|
|
970
|
+
written = 0
|
|
971
|
+
BLOG_NAMES.each do |name|
|
|
972
|
+
src_blog = File.join(root, 'blogs', name)
|
|
973
|
+
dest_blog = File.join(blogs_dest, name)
|
|
974
|
+
next unless File.directory?(src_blog) && File.directory?(dest_blog)
|
|
975
|
+
|
|
976
|
+
logo_html = '_logo_before_body.html'
|
|
977
|
+
src_html = File.join(src_blog, logo_html)
|
|
978
|
+
if File.file?(src_html)
|
|
979
|
+
FileUtils.cp(src_html, File.join(dest_blog, logo_html))
|
|
980
|
+
written += 1
|
|
981
|
+
end
|
|
982
|
+
|
|
983
|
+
lockup = File.join('images', 'galaaz-lockup-stacked.png')
|
|
984
|
+
src_png = File.join(src_blog, lockup)
|
|
985
|
+
if File.file?(src_png)
|
|
986
|
+
FileUtils.mkdir_p(File.join(dest_blog, 'images'))
|
|
987
|
+
FileUtils.cp(src_png, File.join(dest_blog, lockup))
|
|
988
|
+
written += 1
|
|
989
|
+
end
|
|
990
|
+
end
|
|
991
|
+
written
|
|
992
|
+
end
|
|
993
|
+
|
|
877
994
|
# TinyTeX installs to ~/.TinyTeX and often ~/bin; Omarchy PATH prefers ~/.local/bin.
|
|
878
995
|
def ensure_pdflatex_on_path!
|
|
879
996
|
return if command_present?('pdflatex')
|
data/logos/icon-font/README.md
CHANGED
|
@@ -4,9 +4,12 @@ Private TrueType font (`family: galaaz`) with one private-use glyph:
|
|
|
4
4
|
|
|
5
5
|
| Codepoint | Name | Role |
|
|
6
6
|
|-----------|------|------|
|
|
7
|
-
| `U+
|
|
7
|
+
| `U+E90E` | `galaaz` | R + gem in **family omarchy** (`omarchy-with-galaaz.ttf`) |
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Menu rows must use `"iconFont": "omarchy"` (not `"galaaz"`). Qt already loads
|
|
10
|
+
the Omarchy brand family; a custom family alone renders as missing-glyph tofu.
|
|
11
|
+
|
|
12
|
+
Do **not** reuse `U+E900`–`U+E90D` — Omarchy's private font already maps those
|
|
10
13
|
(waybar logo is `\ue900`).
|
|
11
14
|
|
|
12
15
|
## Sources
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""Build
|
|
2
|
+
"""Build Galaaz Omarchy menu fonts from logos/icon-font/galaaz-mark.svg.
|
|
3
|
+
|
|
4
|
+
Produces:
|
|
5
|
+
script/omarchy/fonts/galaaz.ttf
|
|
6
|
+
Standalone family "galaaz" (previews / debugging).
|
|
7
|
+
script/omarchy/fonts/omarchy-with-galaaz.ttf
|
|
8
|
+
Omarchy brand font + Galaaz glyph at U+E90E (family still "omarchy").
|
|
9
|
+
Menu rows must use iconFont "omarchy" — Qt already loads that family.
|
|
10
|
+
"""
|
|
3
11
|
from __future__ import annotations
|
|
4
12
|
|
|
5
13
|
import re
|
|
6
14
|
import sys
|
|
15
|
+
import urllib.request
|
|
7
16
|
from pathlib import Path
|
|
8
17
|
|
|
9
18
|
from fontTools.fontBuilder import FontBuilder
|
|
@@ -17,11 +26,17 @@ from fontTools.ttLib.tables._g_l_y_f import GlyphCoordinates
|
|
|
17
26
|
ROOT = Path(__file__).resolve().parents[2]
|
|
18
27
|
SVG = ROOT / "logos" / "icon-font" / "galaaz-mark.svg"
|
|
19
28
|
OUT = ROOT / "script" / "omarchy" / "fonts" / "galaaz.ttf"
|
|
29
|
+
OUT_MERGED = ROOT / "script" / "omarchy" / "fonts" / "omarchy-with-galaaz.ttf"
|
|
20
30
|
PREVIEW_DIR = ROOT / "logos" / "icon-font" / "preview"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
OMARCHY_TTF_URL = (
|
|
32
|
+
"https://raw.githubusercontent.com/basecamp/omarchy/quattro/"
|
|
33
|
+
"default/fonts/omarchy/omarchy.ttf"
|
|
34
|
+
)
|
|
35
|
+
# Standalone family uses E920 (outside Omarchy E900–E90D).
|
|
36
|
+
STANDALONE_CODEPOINT = 0xE920
|
|
37
|
+
# Merged into family "omarchy" at first free slot after Omarchy's E90D.
|
|
38
|
+
OMARCHY_CODEPOINT = 0xE90E
|
|
39
|
+
GLYPH_NAME = "galaaz"
|
|
25
40
|
MIN_HOLE_AREA_RATIO = 0.04
|
|
26
41
|
|
|
27
42
|
|
|
@@ -57,7 +72,6 @@ def fix_hole_windings(glyph: TTGlyph) -> None:
|
|
|
57
72
|
pts = coords[start : end + 1]
|
|
58
73
|
fl = flags[start : end + 1]
|
|
59
74
|
area = signed_area(pts)
|
|
60
|
-
# Contour 0 = outer (CW); contour 1 = gem hole (CCW). Extra contours = CW fills.
|
|
61
75
|
want_cw = i != 1
|
|
62
76
|
is_cw = area < 0
|
|
63
77
|
if want_cw != is_cw:
|
|
@@ -73,8 +87,41 @@ def fix_hole_windings(glyph: TTGlyph) -> None:
|
|
|
73
87
|
glyph.numberOfContours = len(new_ends)
|
|
74
88
|
|
|
75
89
|
|
|
76
|
-
def
|
|
77
|
-
|
|
90
|
+
def build_glyph() -> TTGlyph:
|
|
91
|
+
d = extract_path_d(SVG.read_text(encoding="utf-8"))
|
|
92
|
+
transform = Transform(1, 0, 0, -1, 0, 1000)
|
|
93
|
+
pen = TTGlyphPen(glyphSet=None)
|
|
94
|
+
SVGPath.fromstring(
|
|
95
|
+
f'<path d="{d}" fill-rule="evenodd"/>', transform=transform
|
|
96
|
+
).draw(pen)
|
|
97
|
+
glyph = pen.glyph()
|
|
98
|
+
fix_hole_windings(glyph)
|
|
99
|
+
return glyph
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def assert_hole_ok(glyph: TTGlyph) -> None:
|
|
103
|
+
coords = list(glyph.coordinates)
|
|
104
|
+
ends = list(glyph.endPtsOfContours)
|
|
105
|
+
start = 0
|
|
106
|
+
areas = []
|
|
107
|
+
for i, end in enumerate(ends):
|
|
108
|
+
pts = coords[start : end + 1]
|
|
109
|
+
a = signed_area(pts)
|
|
110
|
+
areas.append(a)
|
|
111
|
+
print(f" contour {i}: {'CW' if a < 0 else 'CCW'} area={a:.0f}")
|
|
112
|
+
start = end + 1
|
|
113
|
+
if len(areas) < 2:
|
|
114
|
+
raise SystemExit("expected outer + gem hole contours")
|
|
115
|
+
ratio = abs(areas[1]) / abs(areas[0]) if areas[0] else 0.0
|
|
116
|
+
print(f" hole/outer area ratio: {ratio:.3f} (min {MIN_HOLE_AREA_RATIO})")
|
|
117
|
+
if ratio < MIN_HOLE_AREA_RATIO:
|
|
118
|
+
raise SystemExit(
|
|
119
|
+
f"gem cutout too small for menu size ({ratio:.3f} < {MIN_HOLE_AREA_RATIO}); "
|
|
120
|
+
"enlarge the hole in galaaz-mark.svg"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def write_previews(ttf_path: Path, codepoint: int) -> None:
|
|
78
125
|
try:
|
|
79
126
|
from PIL import Image, ImageDraw, ImageFont
|
|
80
127
|
except ImportError:
|
|
@@ -87,7 +134,7 @@ def write_previews(ttf_path: Path) -> None:
|
|
|
87
134
|
img = Image.new("RGBA", (canvas, canvas), (30, 30, 30, 255))
|
|
88
135
|
draw = ImageDraw.Draw(img)
|
|
89
136
|
font = ImageFont.truetype(str(ttf_path), size)
|
|
90
|
-
ch = chr(
|
|
137
|
+
ch = chr(codepoint)
|
|
91
138
|
bbox = draw.textbbox((0, 0), ch, font=font)
|
|
92
139
|
w, h = bbox[2] - bbox[0], bbox[3] - bbox[1]
|
|
93
140
|
x = (canvas - w) // 2 - bbox[0]
|
|
@@ -98,22 +145,12 @@ def write_previews(ttf_path: Path) -> None:
|
|
|
98
145
|
print(f" preview: {out}")
|
|
99
146
|
|
|
100
147
|
|
|
101
|
-
def
|
|
102
|
-
d = extract_path_d(SVG.read_text(encoding="utf-8"))
|
|
103
|
-
transform = Transform(1, 0, 0, -1, 0, 1000)
|
|
104
|
-
|
|
105
|
-
pen = TTGlyphPen(glyphSet=None)
|
|
106
|
-
SVGPath.fromstring(
|
|
107
|
-
f'<path d="{d}" fill-rule="evenodd"/>', transform=transform
|
|
108
|
-
).draw(pen)
|
|
109
|
-
glyph = pen.glyph()
|
|
110
|
-
fix_hole_windings(glyph)
|
|
111
|
-
|
|
148
|
+
def build_standalone(glyph: TTGlyph) -> None:
|
|
112
149
|
fb = FontBuilder(1000, isTTF=True)
|
|
113
|
-
fb.setupGlyphOrder([".notdef",
|
|
114
|
-
fb.setupCharacterMap({
|
|
115
|
-
fb.setupGlyf({".notdef": TTGlyph(),
|
|
116
|
-
fb.setupHorizontalMetrics({".notdef": (600, 0),
|
|
150
|
+
fb.setupGlyphOrder([".notdef", GLYPH_NAME])
|
|
151
|
+
fb.setupCharacterMap({STANDALONE_CODEPOINT: GLYPH_NAME})
|
|
152
|
+
fb.setupGlyf({".notdef": TTGlyph(), GLYPH_NAME: glyph})
|
|
153
|
+
fb.setupHorizontalMetrics({".notdef": (600, 0), GLYPH_NAME: (1000, 0)})
|
|
117
154
|
fb.setupHorizontalHeader(ascent=1000, descent=0)
|
|
118
155
|
fb.setupOS2(
|
|
119
156
|
sTypoAscender=1000,
|
|
@@ -129,43 +166,87 @@ def main() -> int:
|
|
|
129
166
|
{
|
|
130
167
|
"familyName": "galaaz",
|
|
131
168
|
"styleName": "Regular",
|
|
132
|
-
"uniqueFontIdentifier": "galaaz
|
|
133
|
-
"fullName": "galaaz
|
|
134
|
-
"psName": "galaaz
|
|
135
|
-
"version": "Version 1.
|
|
169
|
+
"uniqueFontIdentifier": "galaaz",
|
|
170
|
+
"fullName": "galaaz",
|
|
171
|
+
"psName": "galaaz",
|
|
172
|
+
"version": "Version 1.003",
|
|
136
173
|
"manufacturer": "Galaaz",
|
|
137
|
-
"description": "
|
|
174
|
+
"description": "Standalone Galaaz mark (U+E920). Menu uses omarchy-with-galaaz.ttf.",
|
|
138
175
|
}
|
|
139
176
|
)
|
|
140
177
|
OUT.parent.mkdir(parents=True, exist_ok=True)
|
|
141
178
|
fb.save(OUT)
|
|
179
|
+
assert TTFont(OUT).getBestCmap().get(STANDALONE_CODEPOINT) == GLYPH_NAME
|
|
180
|
+
print(f"wrote {OUT} glyph U+{STANDALONE_CODEPOINT:04X} family=galaaz")
|
|
181
|
+
write_previews(OUT, STANDALONE_CODEPOINT)
|
|
142
182
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
183
|
+
|
|
184
|
+
def scale_glyph(glyph: TTGlyph, factor: float) -> TTGlyph:
|
|
185
|
+
if glyph.numberOfContours <= 0:
|
|
186
|
+
return glyph
|
|
187
|
+
coords = GlyphCoordinates(list(glyph.coordinates))
|
|
188
|
+
coords.scale((factor, factor))
|
|
189
|
+
glyph.coordinates = coords
|
|
190
|
+
if hasattr(glyph, "xMin"):
|
|
191
|
+
glyph.recalcBounds(glyph)
|
|
192
|
+
return glyph
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def fetch_omarchy_ttf() -> Path:
|
|
196
|
+
cache = Path("/tmp/omarchy-brand.ttf")
|
|
197
|
+
if cache.is_file() and cache.stat().st_size > 1000:
|
|
198
|
+
return cache
|
|
199
|
+
print(f" fetching {OMARCHY_TTF_URL}")
|
|
200
|
+
urllib.request.urlretrieve(OMARCHY_TTF_URL, cache)
|
|
201
|
+
return cache
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def build_merged(glyph_1000: TTGlyph) -> None:
|
|
205
|
+
from copy import deepcopy
|
|
206
|
+
|
|
207
|
+
base_path = fetch_omarchy_ttf()
|
|
208
|
+
base = TTFont(str(base_path))
|
|
209
|
+
upem = base["head"].unitsPerEm
|
|
210
|
+
glyph = deepcopy(glyph_1000)
|
|
211
|
+
scale = upem / 1000.0
|
|
212
|
+
if scale != 1.0:
|
|
213
|
+
scale_glyph(glyph, scale)
|
|
214
|
+
advance = int(round(1000 * scale))
|
|
215
|
+
|
|
216
|
+
order = list(base.getGlyphOrder())
|
|
217
|
+
if GLYPH_NAME in order:
|
|
218
|
+
order.remove(GLYPH_NAME)
|
|
219
|
+
order.append(GLYPH_NAME)
|
|
220
|
+
base.setGlyphOrder(order)
|
|
221
|
+
base["glyf"][GLYPH_NAME] = glyph
|
|
222
|
+
base["hmtx"][GLYPH_NAME] = (advance, 0)
|
|
223
|
+
|
|
224
|
+
for table in base["cmap"].tables:
|
|
225
|
+
if table.isUnicode():
|
|
226
|
+
table.cmap[OMARCHY_CODEPOINT] = GLYPH_NAME
|
|
227
|
+
|
|
228
|
+
for rec in base["name"].names:
|
|
229
|
+
if rec.nameID == 5: # version
|
|
230
|
+
rec.string = "Version 1.2+galaaz"
|
|
231
|
+
if rec.nameID == 3: # unique
|
|
232
|
+
rec.string = "omarchy+galaaz"
|
|
233
|
+
|
|
234
|
+
OUT_MERGED.parent.mkdir(parents=True, exist_ok=True)
|
|
235
|
+
base.save(OUT_MERGED)
|
|
236
|
+
merged = TTFont(OUT_MERGED)
|
|
237
|
+
assert merged.getBestCmap().get(OMARCHY_CODEPOINT) == GLYPH_NAME
|
|
238
|
+
assert merged["name"].getDebugName(1) == "omarchy"
|
|
239
|
+
print(
|
|
240
|
+
f"wrote {OUT_MERGED} glyph U+{OMARCHY_CODEPOINT:04X} family=omarchy "
|
|
241
|
+
f"(from {base_path.name}, upem={upem})"
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def main() -> int:
|
|
246
|
+
glyph = build_glyph()
|
|
247
|
+
assert_hole_ok(glyph)
|
|
248
|
+
build_standalone(glyph)
|
|
249
|
+
build_merged(glyph)
|
|
169
250
|
return 0
|
|
170
251
|
|
|
171
252
|
|
data/script/omarchy/README.md
CHANGED
|
@@ -6,16 +6,15 @@ or a real Omarchy install. Works **with or without** an upstream Omarchy PR.
|
|
|
6
6
|
## Recommended: `galaaz omarchy` (gem-bundled)
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
gem install galaaz
|
|
10
|
-
galaaz
|
|
11
|
-
galaaz omarchy # A: copy overlay from this gem
|
|
9
|
+
gem install galaaz # choose version yourself (stable or .pre.N)
|
|
10
|
+
galaaz omarchy install # menu overlay + helpers (no second gem install)
|
|
12
11
|
# optional, newer overlay than the gem:
|
|
13
12
|
# galaaz omarchy install --from-git
|
|
14
|
-
# galaaz omarchy install --from-git --ref galaaz2_0
|
|
15
13
|
galaaz omarchy status
|
|
16
14
|
```
|
|
17
15
|
|
|
18
|
-
Then Super+Space → Install → Development → **Galaaz
|
|
16
|
+
Then Super+Space → Install → Development → **Galaaz** → **Galaaz (core)**
|
|
17
|
+
(core configures R/gatekeeper/blogs using the **already-installed** gem).
|
|
19
18
|
|
|
20
19
|
**Important:** `gem install galaaz` alone does **not** add an Omarchy menu until you run
|
|
21
20
|
`galaaz omarchy` (or an upstream catalog row exists).
|
|
@@ -24,14 +23,15 @@ Then Super+Space → Install → Development → **Galaaz**.
|
|
|
24
23
|
|
|
25
24
|
| File | Role |
|
|
26
25
|
|------|------|
|
|
27
|
-
| `install-galaaz.sh` | Core
|
|
26
|
+
| `install-galaaz.sh` | Core configure (R/setup/blogs); uses installed gem; log `~/.local/share/galaaz/install-core.log` |
|
|
28
27
|
| `galaaz-guide.sh` | Guide / docs / knit-demo helper (`omarchy-galaaz-guide`) |
|
|
29
28
|
| `galaaz-add.sh` | Add-on wrapper (`omarchy-galaaz-add`) — pandoc without Arch Haskell stack |
|
|
30
29
|
| `galaaz-gknit.sh` | Safe HTML gknit helper |
|
|
31
30
|
| `debug-galaaz.sh` | Snapshot doctor/PATH/gem/bridge |
|
|
32
31
|
| `remove-galaaz.sh` | Uninstall gem + marked blogs; leave R |
|
|
33
32
|
| `omarchy-menu.jsonc` | Menu overlay submenu under Install → Development |
|
|
34
|
-
| `fonts/galaaz.ttf` |
|
|
33
|
+
| `fonts/galaaz.ttf` | Standalone family `galaaz` (debug/previews) |
|
|
34
|
+
| `fonts/omarchy-with-galaaz.ttf` | Omarchy brand font + Galaaz at U+E90E (`iconFont: omarchy`) |
|
|
35
35
|
|
|
36
36
|
Menu rows use the Galaaz icon font (not the Ruby-on-Rails Nerd Font gem). Source SVG
|
|
37
37
|
and rebuild script live under `logos/icon-font/`.
|
|
@@ -66,10 +66,12 @@ chmod +x ~/.local/bin/omarchy-*
|
|
|
66
66
|
## TryOmarchy steps
|
|
67
67
|
|
|
68
68
|
1. Install → Development → Ruby on Rails (mise Ruby).
|
|
69
|
-
2. `gem install galaaz && galaaz
|
|
70
|
-
3. Super+Space →
|
|
69
|
+
2. `gem install galaaz && galaaz omarchy install`
|
|
70
|
+
3. Super+Space → Install → Development → **Galaaz** → **Galaaz (core)**.
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
Core configures **setup + blogs + doctor** using the gem you already installed
|
|
73
|
+
(it does **not** run `gem install` again). It fails if the gatekeeper `.so` is
|
|
74
|
+
missing — “gem installed” alone is not success.
|
|
73
75
|
|
|
74
76
|
4. After core finishes, the same submenu shows Knit / Arrow / TeX / Bio / Examples / Ledger.
|
|
75
77
|
|
|
Binary file
|
|
Binary file
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Omarchy-shaped core installer for Galaaz (R-on-Rails).
|
|
3
|
-
# omarchy:summary=
|
|
3
|
+
# omarchy:summary=Configure Galaaz (R-on-Rails)
|
|
4
4
|
# omarchy:name=galaaz
|
|
5
5
|
#
|
|
6
|
+
# Prerequisite (do this yourself first — this script does NOT gem install):
|
|
7
|
+
# gem install galaaz # or: gem install galaaz -v x.y.z / .pre.N
|
|
8
|
+
# galaaz omarchy install # menu overlay + helpers
|
|
9
|
+
# Then: Super+Space → Install → Development → Galaaz → Galaaz (core)
|
|
10
|
+
#
|
|
6
11
|
# Debug log (always written, even if TUI tee fails):
|
|
7
12
|
# ~/.local/share/galaaz/install-core.log
|
|
8
13
|
set -euo pipefail
|
|
9
14
|
|
|
10
|
-
# Optional pin: GALAAZ_GEM_VERSION=2.1.2 omarchy-install-galaaz
|
|
11
|
-
# Default: latest from RubyGems (Omarchy/Rails shape).
|
|
12
|
-
GALAAZ_GEM_VERSION="${GALAAZ_GEM_VERSION:-}"
|
|
13
15
|
LOG_DIR="${HOME}/.local/share/galaaz"
|
|
14
16
|
LOG="${LOG_DIR}/install-core.log"
|
|
15
17
|
mkdir -p "${LOG_DIR}"
|
|
@@ -45,13 +47,13 @@ on_err() {
|
|
|
45
47
|
}
|
|
46
48
|
trap on_err ERR
|
|
47
49
|
|
|
48
|
-
log "=== galaaz core
|
|
50
|
+
log "=== galaaz core configure $(date -Iseconds) ==="
|
|
49
51
|
log "log file: ${LOG}"
|
|
50
52
|
log "script: ${BASH_SOURCE[0]}"
|
|
51
53
|
log "pwd: $(pwd)"
|
|
52
54
|
log "user: $(id -un) home=${HOME}"
|
|
53
55
|
log "PATH: ${PATH}"
|
|
54
|
-
log "
|
|
56
|
+
log "(uses already-installed galaaz gem — does not gem install)"
|
|
55
57
|
log ""
|
|
56
58
|
|
|
57
59
|
pkg_add() {
|
|
@@ -167,35 +169,21 @@ WRAP
|
|
|
167
169
|
log "wrapper: ${HOME}/.local/bin/galaaz"
|
|
168
170
|
}
|
|
169
171
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
LATEST="$(curl -fsSL https://rubygems.org/api/v1/versions/galaaz/latest.json 2>/dev/null \
|
|
180
|
-
| sed -n 's/.*"version":"\([^"]*\)".*/\1/p' || true)"
|
|
181
|
-
if [[ -n "${LATEST}" ]]; then
|
|
182
|
-
log "==> gem install galaaz ${LATEST} (latest on RubyGems)"
|
|
183
|
-
else
|
|
184
|
-
log "==> gem install galaaz (latest on RubyGems)"
|
|
185
|
-
fi
|
|
186
|
-
set +e
|
|
187
|
-
run_ruby gem install galaaz --no-document --source https://rubygems.org 2>&1 | tee -a "${LOG}"
|
|
188
|
-
st=${PIPESTATUS[0]}
|
|
189
|
-
set -e
|
|
190
|
-
[[ ${st} -eq 0 ]] || exit "${st}"
|
|
172
|
+
# Gem must already be installed (user: gem install galaaz [ -v … ]).
|
|
173
|
+
# Do NOT gem install/uninstall here — that pulled stable latest over prereleases.
|
|
174
|
+
log "==> require installed galaaz gem"
|
|
175
|
+
if ! ROOT="$(gem_root 2>/dev/null)" || [[ -z "${ROOT}" || ! -d "${ROOT}" ]]; then
|
|
176
|
+
log "ERROR: galaaz gem not found under this Ruby."
|
|
177
|
+
log "Install first, then re-run core configure:"
|
|
178
|
+
log " gem install galaaz # or gem install galaaz -v <version>"
|
|
179
|
+
log " galaaz omarchy install"
|
|
180
|
+
exit 1
|
|
191
181
|
fi
|
|
192
|
-
|
|
193
182
|
INSTALLED="$(run_ruby ruby -e "puts Gem::Specification.find_by_name('galaaz').version")"
|
|
194
|
-
log "
|
|
183
|
+
log "using galaaz ${INSTALLED}"
|
|
184
|
+
log "gem root: ${ROOT}"
|
|
195
185
|
|
|
196
|
-
ROOT="$(gem_root)"
|
|
197
186
|
BRIDGE="${ROOT}/ext/new_bridge"
|
|
198
|
-
log "gem root: ${ROOT}"
|
|
199
187
|
log "bridge: ${BRIDGE}"
|
|
200
188
|
ls -la "${BRIDGE}" >>"${LOG}" 2>&1 || true
|
|
201
189
|
if [[ ! -f "${BRIDGE}/Makefile" ]]; then
|
|
@@ -254,8 +242,14 @@ log "gatekeeper OK: ${SO}"
|
|
|
254
242
|
log "==> galaaz setup (CLI)"
|
|
255
243
|
galaaz_cli setup >>"${LOG}" 2>&1 || log "WARN: galaaz setup non-zero (so exists; continuing)"
|
|
256
244
|
|
|
257
|
-
log "==> galaaz blogs init"
|
|
258
|
-
|
|
245
|
+
log "==> galaaz blogs init/sync"
|
|
246
|
+
# Fresh machine: init. Upgrade / re-run: sync brand assets without wiping blogs
|
|
247
|
+
# (older gems omitted _logo_before_body.html → pandoc error 99).
|
|
248
|
+
if [[ -f "${HOME}/galaaz-blogs/.galaaz-blogs" ]]; then
|
|
249
|
+
galaaz_cli blogs sync "${HOME}/galaaz-blogs" >>"${LOG}" 2>&1 || log "WARN: blogs sync non-zero"
|
|
250
|
+
else
|
|
251
|
+
galaaz_cli blogs init "${HOME}/galaaz-blogs" >>"${LOG}" 2>&1 || log "WARN: blogs init non-zero"
|
|
252
|
+
fi
|
|
259
253
|
|
|
260
254
|
install_wrapper
|
|
261
255
|
|
|
@@ -276,12 +270,30 @@ if [[ -f "${SCRIPT_DIR}/omarchy-menu.jsonc" ]]; then
|
|
|
276
270
|
cp "${SCRIPT_DIR}/omarchy-menu.jsonc" "${HOME}/.config/omarchy/extensions/omarchy-menu.jsonc"
|
|
277
271
|
fi
|
|
278
272
|
if [[ -f "${SCRIPT_DIR}/fonts/galaaz.ttf" ]]; then
|
|
273
|
+
mkdir -p "${HOME}/.local/share/fonts/galaaz"
|
|
279
274
|
cp "${SCRIPT_DIR}/fonts/galaaz.ttf" "${HOME}/.local/share/fonts/galaaz/galaaz.ttf"
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
275
|
+
log "menu font (debug family galaaz): ${HOME}/.local/share/fonts/galaaz/galaaz.ttf"
|
|
276
|
+
fi
|
|
277
|
+
if [[ -f "${SCRIPT_DIR}/fonts/omarchy-with-galaaz.ttf" ]]; then
|
|
278
|
+
mkdir -p "${HOME}/.local/share/fonts" "${HOME}/.config/fontconfig/conf.d"
|
|
279
|
+
cp "${SCRIPT_DIR}/fonts/omarchy-with-galaaz.ttf" "${HOME}/.local/share/fonts/omarchy-with-galaaz.ttf"
|
|
280
|
+
cat >"${HOME}/.config/fontconfig/conf.d/99-galaaz-omarchy-brand.conf" <<'XML'
|
|
281
|
+
<?xml version="1.0"?>
|
|
282
|
+
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
|
|
283
|
+
<fontconfig>
|
|
284
|
+
<!-- Prefer Galaaz-extended Omarchy brand font (adds U+E90E). -->
|
|
285
|
+
<selectfont>
|
|
286
|
+
<rejectfont>
|
|
287
|
+
<glob>*/omarchy/omarchy.ttf</glob>
|
|
288
|
+
</rejectfont>
|
|
289
|
+
</selectfont>
|
|
290
|
+
</fontconfig>
|
|
291
|
+
XML
|
|
292
|
+
log "menu font (family omarchy + U+E90E): ${HOME}/.local/share/fonts/omarchy-with-galaaz.ttf"
|
|
293
|
+
fi
|
|
294
|
+
if command -v fc-cache >/dev/null 2>&1; then
|
|
295
|
+
fc-cache -r >/dev/null 2>&1 || true
|
|
296
|
+
fc-cache -f "${HOME}/.local/share/fonts" >/dev/null 2>&1 || true
|
|
285
297
|
fi
|
|
286
298
|
cp "${BASH_SOURCE[0]}" "${HOME}/.local/bin/omarchy-install-galaaz"
|
|
287
299
|
chmod +x "${HOME}/.local/bin/omarchy-install-galaaz"
|
|
@@ -309,7 +321,7 @@ mkdir -p "${HOME}/.config/galaaz/profiles"
|
|
|
309
321
|
date -Iseconds >"${HOME}/.config/galaaz/profiles/core"
|
|
310
322
|
|
|
311
323
|
log ""
|
|
312
|
-
log "Core
|
|
324
|
+
log "Core configure complete."
|
|
313
325
|
log "Next: Super+Space → Install → Development → Galaaz → Guide (what's next)"
|
|
314
326
|
log "Docs: https://rbotafogo.github.io/galaaz/"
|
|
315
327
|
log "FULL LOG: ${LOG}"
|
|
@@ -5,23 +5,23 @@
|
|
|
5
5
|
// Use ~/.local/bin/galaaz (installer wrapper). Do not quote the whole
|
|
6
6
|
// "galaaz add …" as one word — omarchy-launch-tui then does nothing useful.
|
|
7
7
|
//
|
|
8
|
-
// Brand mark: U+
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
8
|
+
// Brand mark: U+E90E in family "omarchy" (same iconFont Cursor/Grok use).
|
|
9
|
+
// Omarchy's stock font owns E900–E90D; we ship omarchy-with-galaaz.ttf which
|
|
10
|
+
// is that font plus our R+gem at E90E, installed to
|
|
11
|
+
// ~/.local/share/fonts/omarchy-with-galaaz.ttf. A separate family "galaaz"
|
|
12
|
+
// alone shows missing-glyph tofu in Qt — do not use iconFont "galaaz" here.
|
|
13
13
|
|
|
14
14
|
"install.development.galaaz": {
|
|
15
|
-
"icon": "\
|
|
16
|
-
"iconFont": "
|
|
15
|
+
"icon": "\uE90E",
|
|
16
|
+
"iconFont": "omarchy",
|
|
17
17
|
"label": "Galaaz",
|
|
18
18
|
"description": "R on Rails"
|
|
19
19
|
},
|
|
20
20
|
"install.development.galaaz.core": {
|
|
21
|
-
"icon": "\
|
|
22
|
-
"iconFont": "
|
|
21
|
+
"icon": "\uE90E",
|
|
22
|
+
"iconFont": "omarchy",
|
|
23
23
|
"label": "Galaaz (core)",
|
|
24
|
-
"description": "
|
|
24
|
+
"description": "setup + blogs (gem already installed)",
|
|
25
25
|
"action": "omarchy-launch-tui omarchy-install-galaaz",
|
|
26
26
|
"disabled": "test -f ~/.config/galaaz/profiles/core"
|
|
27
27
|
},
|
|
@@ -47,45 +47,45 @@
|
|
|
47
47
|
"when": "test -f ~/.config/galaaz/profiles/core"
|
|
48
48
|
},
|
|
49
49
|
"install.development.galaaz.knit": {
|
|
50
|
-
"icon": "\
|
|
51
|
-
"iconFont": "
|
|
50
|
+
"icon": "\uE90E",
|
|
51
|
+
"iconFont": "omarchy",
|
|
52
52
|
"label": "Knit (HTML + PDF blogs)",
|
|
53
53
|
"description": "pandoc + knitr/rmarkdown + TinyTeX",
|
|
54
54
|
"action": "omarchy-launch-tui omarchy-galaaz-add knit",
|
|
55
55
|
"disabled": "test -f ~/.config/galaaz/profiles/knit"
|
|
56
56
|
},
|
|
57
57
|
"install.development.galaaz.arrow": {
|
|
58
|
-
"icon": "\
|
|
59
|
-
"iconFont": "
|
|
58
|
+
"icon": "\uE90E",
|
|
59
|
+
"iconFont": "omarchy",
|
|
60
60
|
"label": "Arrow",
|
|
61
61
|
"action": "omarchy-launch-tui omarchy-galaaz-add arrow",
|
|
62
62
|
"disabled": "test -f ~/.config/galaaz/profiles/arrow"
|
|
63
63
|
},
|
|
64
64
|
"install.development.galaaz.bio": {
|
|
65
|
-
"icon": "\
|
|
66
|
-
"iconFont": "
|
|
65
|
+
"icon": "\uE90E",
|
|
66
|
+
"iconFont": "omarchy",
|
|
67
67
|
"label": "Bioconductor (DESeq2)",
|
|
68
68
|
"action": "omarchy-launch-tui omarchy-galaaz-add bio",
|
|
69
69
|
"disabled": "test -f ~/.config/galaaz/profiles/bio"
|
|
70
70
|
},
|
|
71
71
|
"install.development.galaaz.examples": {
|
|
72
|
-
"icon": "\
|
|
73
|
-
"iconFont": "
|
|
72
|
+
"icon": "\uE90E",
|
|
73
|
+
"iconFont": "omarchy",
|
|
74
74
|
"label": "Examples",
|
|
75
75
|
"action": "omarchy-launch-tui omarchy-galaaz-add examples",
|
|
76
76
|
"disabled": "test -f ~/.config/galaaz/profiles/examples"
|
|
77
77
|
},
|
|
78
78
|
"install.development.galaaz.ledger": {
|
|
79
|
-
"icon": "\
|
|
80
|
-
"iconFont": "
|
|
79
|
+
"icon": "\uE90E",
|
|
80
|
+
"iconFont": "omarchy",
|
|
81
81
|
"label": "Ledger (R-on-Rails demo)",
|
|
82
82
|
"description": "Clone app, seed, bin/dev",
|
|
83
83
|
"action": "omarchy-launch-tui omarchy-galaaz-add ledger",
|
|
84
84
|
"disabled": "test -f ~/.config/galaaz/profiles/ledger"
|
|
85
85
|
},
|
|
86
86
|
"remove.development.galaaz": {
|
|
87
|
-
"icon": "\
|
|
88
|
-
"iconFont": "
|
|
87
|
+
"icon": "\uE90E",
|
|
88
|
+
"iconFont": "omarchy",
|
|
89
89
|
"label": "Galaaz",
|
|
90
90
|
"description": "Core gem (add-on R packages stay)",
|
|
91
91
|
"action": "omarchy-launch-tui omarchy-remove-galaaz"
|
data/version.rb
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
$gem_name = "galaaz"
|
|
2
|
-
$version="2.1.10.pre.
|
|
2
|
+
$version="2.1.10.pre.6"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: galaaz
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.10.pre.
|
|
4
|
+
version: 2.1.10.pre.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rodrigo Botafogo
|
|
@@ -444,6 +444,7 @@ files:
|
|
|
444
444
|
- script/omarchy/README.md
|
|
445
445
|
- script/omarchy/debug-galaaz.sh
|
|
446
446
|
- script/omarchy/fonts/galaaz.ttf
|
|
447
|
+
- script/omarchy/fonts/omarchy-with-galaaz.ttf
|
|
447
448
|
- script/omarchy/galaaz-add.sh
|
|
448
449
|
- script/omarchy/galaaz-gknit.sh
|
|
449
450
|
- script/omarchy/galaaz-guide.sh
|