galaaz 2.1.10.pre.3 → 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: 7404dd1ff8d30079d97b72d2b387a2ec61c616d1f16cc4c6a1222536d0db3808
4
- data.tar.gz: 896ca5ffdc819f1ddf1429865522d73bad2c9228968d7f158f5fcfb2eb2690f4
3
+ metadata.gz: b0c59c52dee0210e7429fd3e8e25b7b529c48bd1c4ef5dd93129a447f75f7cea
4
+ data.tar.gz: c288f1de871ea48cf8004fb12f40b25c966494a4056c8e12b21c41f7ad15b867
5
5
  SHA512:
6
- metadata.gz: 052c2da4bec2e9a6db9cb37d4eaf298d3096c43e3e73f6a84d39ff4c58dafb2aacb0d0ca648825254252d84796d2087c2eb9b59c671f2f2eca195791312bc868
7
- data.tar.gz: 54221b60df36d3ca285a8c88ceb12d534ab6b56a3684531092f9aee6c7bb85b723c5e52618ca0357c58fe19f2ce70b47529bb0652e87703de5480f91a9f379ac
6
+ metadata.gz: 2d6ad40a8fe7d8bf9f9bc76f28af74ba64e740f2178607c2d63586af0cdcb4194a54941eda2132ab61a17acb6f899c189ba0416a5e4432bf5b2fe2fc431d7b19
7
+ data.tar.gz: e281f2595077ed37709e596d123966461eca7aaa189eb2f6a1e72a17346cc96ebb36f49cc610ae5a503a7d8642e2bb6443c352aae4f7e75a48e8094970b1fe77
data/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
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
+
14
+ ## 2.1.10.pre.4
15
+
16
+ ### Fixed
17
+
18
+ - Omarchy brand icon moved from **U+E900 → U+E920**. E900–E90D belong to
19
+ Omarchy’s own private font (waybar `\ue900`); using E900 made the menu show
20
+ Omarchy’s mark whenever `iconFont: galaaz` failed to win.
21
+
5
22
  ## 2.1.10.pre.3
6
23
 
7
24
  ### 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+E900)"
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,7 +4,13 @@ Private TrueType font (`family: galaaz`) with one private-use glyph:
4
4
 
5
5
  | Codepoint | Name | Role |
6
6
  |-----------|------|------|
7
- | `U+E900` | `galaaz` | Monochrome R + gem cutout for Install menu rows |
7
+ | `U+E90E` | `galaaz` | R + gem in **family omarchy** (`omarchy-with-galaaz.ttf`) |
8
+
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
13
+ (waybar logo is `\ue900`).
8
14
 
9
15
  ## Sources
10
16
 
@@ -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,9 +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
- CODEPOINT = 0xE900
22
- # 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"
23
40
  MIN_HOLE_AREA_RATIO = 0.04
24
41
 
25
42
 
@@ -55,7 +72,6 @@ def fix_hole_windings(glyph: TTGlyph) -> None:
55
72
  pts = coords[start : end + 1]
56
73
  fl = flags[start : end + 1]
57
74
  area = signed_area(pts)
58
- # Contour 0 = outer (CW); contour 1 = gem hole (CCW). Extra contours = CW fills.
59
75
  want_cw = i != 1
60
76
  is_cw = area < 0
61
77
  if want_cw != is_cw:
@@ -71,8 +87,41 @@ def fix_hole_windings(glyph: TTGlyph) -> None:
71
87
  glyph.numberOfContours = len(new_ends)
72
88
 
73
89
 
74
- def write_previews(ttf_path: Path) -> None:
75
- """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:
76
125
  try:
77
126
  from PIL import Image, ImageDraw, ImageFont
78
127
  except ImportError:
@@ -85,32 +134,23 @@ def write_previews(ttf_path: Path) -> None:
85
134
  img = Image.new("RGBA", (canvas, canvas), (30, 30, 30, 255))
86
135
  draw = ImageDraw.Draw(img)
87
136
  font = ImageFont.truetype(str(ttf_path), size)
88
- bbox = draw.textbbox((0, 0), "\uE900", font=font)
137
+ ch = chr(codepoint)
138
+ bbox = draw.textbbox((0, 0), ch, font=font)
89
139
  w, h = bbox[2] - bbox[0], bbox[3] - bbox[1]
90
140
  x = (canvas - w) // 2 - bbox[0]
91
141
  y = (canvas - h) // 2 - bbox[1]
92
- draw.text((x, y), "\uE900", font=font, fill=(230, 230, 230, 255))
142
+ draw.text((x, y), ch, font=font, fill=(230, 230, 230, 255))
93
143
  out = PREVIEW_DIR / f"glyph_{size}.png"
94
144
  img.save(out)
95
145
  print(f" preview: {out}")
96
146
 
97
147
 
98
- def main() -> int:
99
- d = extract_path_d(SVG.read_text(encoding="utf-8"))
100
- transform = Transform(1, 0, 0, -1, 0, 1000)
101
-
102
- pen = TTGlyphPen(glyphSet=None)
103
- SVGPath.fromstring(
104
- f'<path d="{d}" fill-rule="evenodd"/>', transform=transform
105
- ).draw(pen)
106
- glyph = pen.glyph()
107
- fix_hole_windings(glyph)
108
-
148
+ def build_standalone(glyph: TTGlyph) -> None:
109
149
  fb = FontBuilder(1000, isTTF=True)
110
- fb.setupGlyphOrder([".notdef", "galaaz"])
111
- fb.setupCharacterMap({CODEPOINT: "galaaz"})
112
- fb.setupGlyf({".notdef": TTGlyph(), "galaaz": glyph})
113
- 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)})
114
154
  fb.setupHorizontalHeader(ascent=1000, descent=0)
115
155
  fb.setupOS2(
116
156
  sTypoAscender=1000,
@@ -126,43 +166,87 @@ def main() -> int:
126
166
  {
127
167
  "familyName": "galaaz",
128
168
  "styleName": "Regular",
129
- "uniqueFontIdentifier": "galaaz Regular",
130
- "fullName": "galaaz Regular",
131
- "psName": "galaaz-Regular",
132
- "version": "Version 1.001",
169
+ "uniqueFontIdentifier": "galaaz",
170
+ "fullName": "galaaz",
171
+ "psName": "galaaz",
172
+ "version": "Version 1.003",
133
173
  "manufacturer": "Galaaz",
134
- "description": "Monochrome Galaaz mark for Omarchy menu rows (U+E900).",
174
+ "description": "Standalone Galaaz mark (U+E920). Menu uses omarchy-with-galaaz.ttf.",
135
175
  }
136
176
  )
137
177
  OUT.parent.mkdir(parents=True, exist_ok=True)
138
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)
139
182
 
140
- tt = TTFont(OUT)
141
- assert tt["cmap"].getBestCmap().get(CODEPOINT) == "galaaz"
142
- g = tt["glyf"]["galaaz"]
143
- coords = list(g.coordinates)
144
- ends = list(g.endPtsOfContours)
145
- start = 0
146
- areas = []
147
- for i, end in enumerate(ends):
148
- pts = coords[start : end + 1]
149
- a = signed_area(pts)
150
- areas.append(a)
151
- print(f" contour {i}: {'CW' if a < 0 else 'CCW'} area={a:.0f}")
152
- start = end + 1
153
- if len(areas) < 2:
154
- raise SystemExit("expected outer + gem hole contours")
155
- outer = abs(areas[0])
156
- hole = abs(areas[1])
157
- ratio = hole / outer if outer else 0.0
158
- print(f" hole/outer area ratio: {ratio:.3f} (min {MIN_HOLE_AREA_RATIO})")
159
- if ratio < MIN_HOLE_AREA_RATIO:
160
- raise SystemExit(
161
- f"gem cutout too small for menu size ({ratio:.3f} < {MIN_HOLE_AREA_RATIO}); "
162
- "enlarge the hole in galaaz-mark.svg"
163
- )
164
- print(f"wrote {OUT} glyph U+{CODEPOINT:04X} family=galaaz")
165
- 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)
166
250
  return 0
167
251
 
168
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+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,20 +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: icon is private-use U+E900 (\uE900). That codepoint is empty
9
- // in Nerd Fonts / Cursor Omarchy draws it with iconFont "galaaz"
10
- // (script/omarchy/fonts/galaaz.ttf ~/.local/share/fonts/galaaz/).
11
- // Do not paste a visible letter here; use the escape so the source stays clear.
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.
12
13
 
13
14
  "install.development.galaaz": {
14
- "icon": "\uE900",
15
- "iconFont": "galaaz",
15
+ "icon": "\uE90E",
16
+ "iconFont": "omarchy",
16
17
  "label": "Galaaz",
17
18
  "description": "R on Rails"
18
19
  },
19
20
  "install.development.galaaz.core": {
20
- "icon": "\uE900",
21
- "iconFont": "galaaz",
21
+ "icon": "\uE90E",
22
+ "iconFont": "omarchy",
22
23
  "label": "Galaaz (core)",
23
24
  "description": "gem + setup + blogs (not just gem install)",
24
25
  "action": "omarchy-launch-tui omarchy-install-galaaz",
@@ -46,45 +47,45 @@
46
47
  "when": "test -f ~/.config/galaaz/profiles/core"
47
48
  },
48
49
  "install.development.galaaz.knit": {
49
- "icon": "\uE900",
50
- "iconFont": "galaaz",
50
+ "icon": "\uE90E",
51
+ "iconFont": "omarchy",
51
52
  "label": "Knit (HTML + PDF blogs)",
52
53
  "description": "pandoc + knitr/rmarkdown + TinyTeX",
53
54
  "action": "omarchy-launch-tui omarchy-galaaz-add knit",
54
55
  "disabled": "test -f ~/.config/galaaz/profiles/knit"
55
56
  },
56
57
  "install.development.galaaz.arrow": {
57
- "icon": "\uE900",
58
- "iconFont": "galaaz",
58
+ "icon": "\uE90E",
59
+ "iconFont": "omarchy",
59
60
  "label": "Arrow",
60
61
  "action": "omarchy-launch-tui omarchy-galaaz-add arrow",
61
62
  "disabled": "test -f ~/.config/galaaz/profiles/arrow"
62
63
  },
63
64
  "install.development.galaaz.bio": {
64
- "icon": "\uE900",
65
- "iconFont": "galaaz",
65
+ "icon": "\uE90E",
66
+ "iconFont": "omarchy",
66
67
  "label": "Bioconductor (DESeq2)",
67
68
  "action": "omarchy-launch-tui omarchy-galaaz-add bio",
68
69
  "disabled": "test -f ~/.config/galaaz/profiles/bio"
69
70
  },
70
71
  "install.development.galaaz.examples": {
71
- "icon": "\uE900",
72
- "iconFont": "galaaz",
72
+ "icon": "\uE90E",
73
+ "iconFont": "omarchy",
73
74
  "label": "Examples",
74
75
  "action": "omarchy-launch-tui omarchy-galaaz-add examples",
75
76
  "disabled": "test -f ~/.config/galaaz/profiles/examples"
76
77
  },
77
78
  "install.development.galaaz.ledger": {
78
- "icon": "\uE900",
79
- "iconFont": "galaaz",
79
+ "icon": "\uE90E",
80
+ "iconFont": "omarchy",
80
81
  "label": "Ledger (R-on-Rails demo)",
81
82
  "description": "Clone app, seed, bin/dev",
82
83
  "action": "omarchy-launch-tui omarchy-galaaz-add ledger",
83
84
  "disabled": "test -f ~/.config/galaaz/profiles/ledger"
84
85
  },
85
86
  "remove.development.galaaz": {
86
- "icon": "\uE900",
87
- "iconFont": "galaaz",
87
+ "icon": "\uE90E",
88
+ "iconFont": "omarchy",
88
89
  "label": "Galaaz",
89
90
  "description": "Core gem (add-on R packages stay)",
90
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.3"
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.3
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