galaaz 2.1.10.pre.4 → 2.1.10.pre.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3ee446f657b5eac4bb8ef351c3a7adbe0246b8d750288bffab68c43e83e10bf
4
- data.tar.gz: e00e643ae69cc1fae159706c6b06b8e9c291e4060814b5b3feafc4abb722454c
3
+ metadata.gz: b0c59c52dee0210e7429fd3e8e25b7b529c48bd1c4ef5dd93129a447f75f7cea
4
+ data.tar.gz: c288f1de871ea48cf8004fb12f40b25c966494a4056c8e12b21c41f7ad15b867
5
5
  SHA512:
6
- metadata.gz: 7a6fac11ad1080ebb3d4161fb228f5c259dfe979562842d3284af368538fec452f2a3ee78074dcca444f9889f4f3808a86d4e4d9b616805ff4cc0281c9e7400c
7
- data.tar.gz: 87e43043e7bc22a13e96a691c23e9b9410655ec3b4df22c99766177cf5c9b08961ade4b27e6894ee777c13113abeab23bbd27c719d785f7079091c5ff2b1f36c
6
+ metadata.gz: 2d6ad40a8fe7d8bf9f9bc76f28af74ba64e740f2178607c2d63586af0cdcb4194a54941eda2132ab61a17acb6f899c189ba0416a5e4432bf5b2fe2fc431d7b19
7
+ data.tar.gz: e281f2595077ed37709e596d123966461eca7aaa189eb2f6a1e72a17346cc96ebb36f49cc610ae5a503a7d8642e2bb6443c352aae4f7e75a48e8094970b1fe77
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 2.1.10.pre.5
6
+
7
+ ### Fixed
8
+
9
+ - Omarchy menu icons: use `"iconFont": "omarchy"` + **U+E90E** via shipped
10
+ `omarchy-with-galaaz.ttf` (Omarchy brand font + Galaaz R/gem). A custom
11
+ family `galaaz` alone rendered as missing-glyph tofu (`//'`) because Qt
12
+ does not load that family for the menu.
13
+
5
14
  ## 2.1.10.pre.4
6
15
 
7
16
  ### 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
- OMARCHY_FONT_FAMILY = 'galaaz'
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'
@@ -152,7 +156,8 @@ module Galaaz
152
156
  Writes:
153
157
  ~/.local/bin/omarchy-install-galaaz (and add/remove/guide/gknit/debug)
154
158
  ~/.config/omarchy/extensions/omarchy-menu.jsonc
155
- ~/.local/share/fonts/galaaz/galaaz.ttf (menu brand mark)
159
+ ~/.local/share/fonts/galaaz/galaaz.ttf
160
+ ~/.local/share/fonts/omarchy-with-galaaz.ttf (family omarchy + U+E90E)
156
161
 
157
162
  Then: Super+Space → Install → Development → Galaaz
158
163
  HELP
@@ -199,7 +204,9 @@ module Galaaz
199
204
  end
200
205
  puts " menu: #{File.file?(menu) ? menu : 'MISSING'}"
201
206
  font = File.expand_path('~/.local/share/fonts/galaaz/galaaz.ttf')
202
- puts " font: #{File.file?(font) ? font : 'MISSING'}"
207
+ puts " font galaaz: #{File.file?(font) ? font : 'MISSING'}"
208
+ merged = File.expand_path('~/.local/share/fonts/omarchy-with-galaaz.ttf')
209
+ puts " font omarchy+galaaz: #{File.file?(merged) ? merged : 'MISSING'}"
203
210
  bundled = File.join(root, 'script', 'omarchy')
204
211
  puts " gem overlay: #{File.directory?(bundled) ? bundled : 'MISSING (reinstall gem)'}"
205
212
  0
@@ -211,7 +218,8 @@ module Galaaz
211
218
  abort_unless(
212
219
  File.file?(File.join(d, 'install-galaaz.sh')) &&
213
220
  File.file?(File.join(d, OMARCHY_MENU_FILE)) &&
214
- File.file?(File.join(d, OMARCHY_FONT_REL)),
221
+ File.file?(File.join(d, OMARCHY_FONT_REL)) &&
222
+ File.file?(File.join(d, OMARCHY_MERGED_FONT_REL)),
215
223
  "incomplete Omarchy overlay in gem (#{d})"
216
224
  )
217
225
  d
@@ -222,7 +230,7 @@ module Galaaz
222
230
  tmp = Dir.mktmpdir('galaaz-omarchy-')
223
231
  base = "https://raw.githubusercontent.com/#{OMARCHY_GITHUB_REPO}/#{ref}/script/omarchy"
224
232
  puts "galaaz omarchy: fetching #{base}/…"
225
- names = OMARCHY_BIN_FILES.map(&:first) + [OMARCHY_MENU_FILE, OMARCHY_FONT_REL]
233
+ names = OMARCHY_BIN_FILES.map(&:first) + [OMARCHY_MENU_FILE, OMARCHY_FONT_REL, OMARCHY_MERGED_FONT_REL]
226
234
  names.uniq.each do |name|
227
235
  url = "#{base}/#{name}"
228
236
  dest = File.join(tmp, name)
@@ -262,18 +270,53 @@ module Galaaz
262
270
  end
263
271
 
264
272
  def install_omarchy_font_from!(src_dir)
273
+ # 1) Standalone galaaz.ttf (family galaaz) — debugging / fc-list checks.
265
274
  src = File.join(src_dir, OMARCHY_FONT_REL)
266
275
  abort_unless(File.file?(src), "missing #{src} (rebuild with logos/icon-font/build_font.py)")
267
276
  fonts = File.expand_path('~/.local/share/fonts/galaaz')
268
277
  FileUtils.mkdir_p(fonts)
269
278
  dest = File.join(fonts, 'galaaz.ttf')
270
279
  FileUtils.cp(src, dest)
271
- puts "galaaz omarchy: #{dest} (family #{OMARCHY_FONT_FAMILY}, U+E920)"
280
+ puts "galaaz omarchy: #{dest} (family galaaz, debug)"
281
+
282
+ # 2) Merged Omarchy brand font with Galaaz at U+E90E. Menu uses
283
+ # iconFont "omarchy" — the same family Cursor/Grok icons use, which Qt
284
+ # already loads. A custom family "galaaz" alone shows missing-glyph tofu.
285
+ merged_src = File.join(src_dir, OMARCHY_MERGED_FONT_REL)
286
+ abort_unless(
287
+ File.file?(merged_src),
288
+ "missing #{merged_src} (rebuild with logos/icon-font/build_font.py)"
289
+ )
290
+ # Prefer user font over /usr/share/fonts/**/omarchy.ttf
291
+ user_fonts = File.expand_path('~/.local/share/fonts')
292
+ FileUtils.mkdir_p(user_fonts)
293
+ merged_dest = File.join(user_fonts, 'omarchy-with-galaaz.ttf')
294
+ FileUtils.cp(merged_src, merged_dest)
295
+ puts "galaaz omarchy: #{merged_dest} (family #{OMARCHY_MENU_FONT_FAMILY}, U+#{OMARCHY_MENU_CODEPOINT.to_s(16).upcase})"
296
+
297
+ conf_dir = File.expand_path('~/.config/fontconfig/conf.d')
298
+ FileUtils.mkdir_p(conf_dir)
299
+ conf = File.join(conf_dir, '99-galaaz-omarchy-brand.conf')
300
+ File.write(conf, <<~XML)
301
+ <?xml version="1.0"?>
302
+ <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
303
+ <fontconfig>
304
+ <!-- Prefer Galaaz-extended Omarchy brand font (adds U+E90E). -->
305
+ <selectfont>
306
+ <rejectfont>
307
+ <glob>*/omarchy/omarchy.ttf</glob>
308
+ </rejectfont>
309
+ </selectfont>
310
+ </fontconfig>
311
+ XML
312
+ puts "galaaz omarchy: #{conf}"
313
+
272
314
  if command_present?('fc-cache')
273
315
  system('fc-cache', '-r')
274
316
  system('fc-cache', '-f', fonts)
317
+ system('fc-cache', '-f', user_fonts)
275
318
  end
276
- warn 'galaaz omarchy: restart the Omarchy shell so Qt picks up the galaaz font' \
319
+ warn 'galaaz omarchy: fully restart the Omarchy shell (logout/login or kill omarchy-shell) so Qt reloads fonts' \
277
320
  if ENV['OMARCHY_PATH'] || File.directory?(File.expand_path('~/.config/omarchy'))
278
321
  end
279
322
 
@@ -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+E920` | `galaaz` | Monochrome R + gem cutout for Install menu rows |
7
+ | `U+E90E` | `galaaz` | R + gem in **family omarchy** (`omarchy-with-galaaz.ttf`) |
8
8
 
9
- Do **not** reuse `U+E900` Omarchy's private font already maps E900–E90D
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 script/omarchy/fonts/galaaz.ttf from logos/icon-font/galaaz-mark.svg."""
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
- # NOT U+E900: Omarchy's own brand font already owns E900–E90D (waybar logo).
22
- # Using that slot makes fallback look like Omarchy's mark, not Galaaz.
23
- CODEPOINT = 0xE920
24
- # Gem cutout must stay visible at menu size (~16px). Tiny holes collapse.
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 write_previews(ttf_path: Path) -> None:
77
- """Write menu-size PNG previews next to the SVG (requires Pillow)."""
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(CODEPOINT)
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 main() -> int:
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", "galaaz"])
114
- fb.setupCharacterMap({CODEPOINT: "galaaz"})
115
- fb.setupGlyf({".notdef": TTGlyph(), "galaaz": glyph})
116
- fb.setupHorizontalMetrics({".notdef": (600, 0), "galaaz": (1000, 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 Regular 1.002 U+E920",
133
- "fullName": "galaaz Regular",
134
- "psName": "galaaz-Regular",
135
- "version": "Version 1.002",
169
+ "uniqueFontIdentifier": "galaaz",
170
+ "fullName": "galaaz",
171
+ "psName": "galaaz",
172
+ "version": "Version 1.003",
136
173
  "manufacturer": "Galaaz",
137
- "description": "Monochrome Galaaz mark for Omarchy menu rows (U+E920).",
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
- tt = TTFont(OUT)
144
- assert tt["cmap"].getBestCmap().get(CODEPOINT) == "galaaz"
145
- g = tt["glyf"]["galaaz"]
146
- coords = list(g.coordinates)
147
- ends = list(g.endPtsOfContours)
148
- start = 0
149
- areas = []
150
- for i, end in enumerate(ends):
151
- pts = coords[start : end + 1]
152
- a = signed_area(pts)
153
- areas.append(a)
154
- print(f" contour {i}: {'CW' if a < 0 else 'CCW'} area={a:.0f}")
155
- start = end + 1
156
- if len(areas) < 2:
157
- raise SystemExit("expected outer + gem hole contours")
158
- outer = abs(areas[0])
159
- hole = abs(areas[1])
160
- ratio = hole / outer if outer else 0.0
161
- print(f" hole/outer area ratio: {ratio:.3f} (min {MIN_HOLE_AREA_RATIO})")
162
- if ratio < MIN_HOLE_AREA_RATIO:
163
- raise SystemExit(
164
- f"gem cutout too small for menu size ({ratio:.3f} < {MIN_HOLE_AREA_RATIO}); "
165
- "enlarge the hole in galaaz-mark.svg"
166
- )
167
- print(f"wrote {OUT} glyph U+{CODEPOINT:04X} family=galaaz")
168
- write_previews(OUT)
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
 
@@ -31,7 +31,8 @@ Then Super+Space → Install → Development → **Galaaz**.
31
31
  | `debug-galaaz.sh` | Snapshot doctor/PATH/gem/bridge |
32
32
  | `remove-galaaz.sh` | Uninstall gem + marked blogs; leave R |
33
33
  | `omarchy-menu.jsonc` | Menu overlay submenu under Install → Development |
34
- | `fonts/galaaz.ttf` | Monochrome brand mark (`iconFont: galaaz`, U+E920; not E900) |
34
+ | `fonts/galaaz.ttf` | Standalone family `galaaz` (debug/previews) |
35
+ | `fonts/omarchy-with-galaaz.ttf` | Omarchy brand font + Galaaz at U+E90E (`iconFont: omarchy`) |
35
36
 
36
37
  Menu rows use the Galaaz icon font (not the Ruby-on-Rails Nerd Font gem). Source SVG
37
38
  and rebuild script live under `logos/icon-font/`.
Binary file
@@ -276,12 +276,30 @@ if [[ -f "${SCRIPT_DIR}/omarchy-menu.jsonc" ]]; then
276
276
  cp "${SCRIPT_DIR}/omarchy-menu.jsonc" "${HOME}/.config/omarchy/extensions/omarchy-menu.jsonc"
277
277
  fi
278
278
  if [[ -f "${SCRIPT_DIR}/fonts/galaaz.ttf" ]]; then
279
+ mkdir -p "${HOME}/.local/share/fonts/galaaz"
279
280
  cp "${SCRIPT_DIR}/fonts/galaaz.ttf" "${HOME}/.local/share/fonts/galaaz/galaaz.ttf"
280
- if command -v fc-cache >/dev/null 2>&1; then
281
- fc-cache -r >/dev/null 2>&1 || true
282
- fc-cache -f "${HOME}/.local/share/fonts/galaaz" >/dev/null 2>&1 || true
283
- fi
284
- log "menu font: ${HOME}/.local/share/fonts/galaaz/galaaz.ttf"
281
+ log "menu font (debug family galaaz): ${HOME}/.local/share/fonts/galaaz/galaaz.ttf"
282
+ fi
283
+ if [[ -f "${SCRIPT_DIR}/fonts/omarchy-with-galaaz.ttf" ]]; then
284
+ mkdir -p "${HOME}/.local/share/fonts" "${HOME}/.config/fontconfig/conf.d"
285
+ cp "${SCRIPT_DIR}/fonts/omarchy-with-galaaz.ttf" "${HOME}/.local/share/fonts/omarchy-with-galaaz.ttf"
286
+ cat >"${HOME}/.config/fontconfig/conf.d/99-galaaz-omarchy-brand.conf" <<'XML'
287
+ <?xml version="1.0"?>
288
+ <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
289
+ <fontconfig>
290
+ <!-- Prefer Galaaz-extended Omarchy brand font (adds U+E90E). -->
291
+ <selectfont>
292
+ <rejectfont>
293
+ <glob>*/omarchy/omarchy.ttf</glob>
294
+ </rejectfont>
295
+ </selectfont>
296
+ </fontconfig>
297
+ XML
298
+ log "menu font (family omarchy + U+E90E): ${HOME}/.local/share/fonts/omarchy-with-galaaz.ttf"
299
+ fi
300
+ if command -v fc-cache >/dev/null 2>&1; then
301
+ fc-cache -r >/dev/null 2>&1 || true
302
+ fc-cache -f "${HOME}/.local/share/fonts" >/dev/null 2>&1 || true
285
303
  fi
286
304
  cp "${BASH_SOURCE[0]}" "${HOME}/.local/bin/omarchy-install-galaaz"
287
305
  chmod +x "${HOME}/.local/bin/omarchy-install-galaaz"
@@ -5,21 +5,21 @@
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+E920 (\uE920) + iconFont "galaaz".
9
- // Do NOT use U+E900 that slot is Omarchy's own logo (waybar \ue900,
10
- // private font family "omarchy", range E900–E90D). Fallback without our
11
- // font then shows Omarchy's mark, not Galaaz.
12
- // TTF: script/omarchy/fonts/galaaz.ttf ~/.local/share/fonts/galaaz/
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": "\uE920",
16
- "iconFont": "galaaz",
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": "\uE920",
22
- "iconFont": "galaaz",
21
+ "icon": "\uE90E",
22
+ "iconFont": "omarchy",
23
23
  "label": "Galaaz (core)",
24
24
  "description": "gem + setup + blogs (not just gem install)",
25
25
  "action": "omarchy-launch-tui omarchy-install-galaaz",
@@ -47,45 +47,45 @@
47
47
  "when": "test -f ~/.config/galaaz/profiles/core"
48
48
  },
49
49
  "install.development.galaaz.knit": {
50
- "icon": "\uE920",
51
- "iconFont": "galaaz",
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": "\uE920",
59
- "iconFont": "galaaz",
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": "\uE920",
66
- "iconFont": "galaaz",
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": "\uE920",
73
- "iconFont": "galaaz",
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": "\uE920",
80
- "iconFont": "galaaz",
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": "\uE920",
88
- "iconFont": "galaaz",
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.4"
2
+ $version="2.1.10.pre.5"
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
4
+ version: 2.1.10.pre.5
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