galaaz 2.1.6 → 2.1.8

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/blogs/galaaz_ggplot/galaaz_ggplot.Rmd +63 -58
  4. data/blogs/galaaz_ggplot/galaaz_ggplot.log +59 -68
  5. data/blogs/galaaz_ggplot/galaaz_ggplot.md +91 -84
  6. data/blogs/galaaz_ggplot/galaaz_ggplot.tex +125 -94
  7. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/midwest_rb.png +0 -0
  8. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-html/scatter_plot_rb.png +0 -0
  9. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-markdown_github/midwest_rb.png +0 -0
  10. data/blogs/galaaz_ggplot/galaaz_ggplot_files/figure-markdown_github/scatter_plot_rb.png +0 -0
  11. data/blogs/gknit/gknit.Rmd +33 -28
  12. data/blogs/gknit/gknit.md +47 -42
  13. data/blogs/gknit/gknit.tex +1368 -0
  14. data/blogs/gknit/gknit_files/figure-html/bubble-1.png +0 -0
  15. data/blogs/gknit/gknit_files/figure-html/diverging_bar.png +0 -0
  16. data/blogs/gknit/gknit_files/figure-latex/bubble-1.png +0 -0
  17. data/blogs/gknit/gknit_files/gknit_files/figure-latex/bubble-1.png +0 -0
  18. data/blogs/manual/manual.Rmd +129 -60
  19. data/blogs/manual/manual.log +289 -545
  20. data/blogs/manual/manual.md +551 -467
  21. data/blogs/manual/manual.tex +1059 -485
  22. data/blogs/manual/manual_files/figure-html/bubble-1.png +0 -0
  23. data/blogs/manual/manual_files/figure-latex/bubble-1.png +0 -0
  24. data/blogs/manual/manual_files/figure-markdown_github/bubble-1.png +0 -0
  25. data/blogs/manual/manual_files/figure-markdown_github/diverging_bar.png +0 -0
  26. data/blogs/manual/manual_files/manual_files/figure-latex/bubble-1.png +0 -0
  27. data/blogs/nse_dplyr/nse_dplyr.Rmd +28 -7
  28. data/blogs/nse_dplyr/nse_dplyr.log +49 -153
  29. data/blogs/nse_dplyr/nse_dplyr.md +676 -705
  30. data/blogs/nse_dplyr/nse_dplyr.tex +1589 -0
  31. data/blogs/oh_my/oh_my.Rmd +193 -55
  32. data/blogs/oh_my/oh_my.log +265 -95
  33. data/blogs/oh_my/oh_my.md +236 -95
  34. data/blogs/oh_my/oh_my.tex +1976 -68
  35. data/blogs/ruby_plot/ruby_plot.Rmd +42 -34
  36. data/blogs/ruby_plot/ruby_plot.log +101 -99
  37. data/blogs/ruby_plot/ruby_plot.md +52 -46
  38. data/blogs/ruby_plot/ruby_plot.tex +134 -102
  39. data/blogs/ruby_plot/ruby_plot_files/figure-html/dose_len.png +0 -0
  40. data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_delivery.png +0 -0
  41. data/blogs/ruby_plot/ruby_plot_files/figure-html/facet_by_dose.png +0 -0
  42. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color.png +0 -0
  43. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_by_delivery_color2.png +0 -0
  44. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_decorations.png +0 -0
  45. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_jitter.png +0 -0
  46. data/blogs/ruby_plot/ruby_plot_files/figure-html/facets_with_points.png +0 -0
  47. data/blogs/ruby_plot/ruby_plot_files/figure-html/final_box_plot.png +0 -0
  48. data/blogs/ruby_plot/ruby_plot_files/figure-html/final_violin_plot.png +0 -0
  49. data/blogs/ruby_plot/ruby_plot_files/figure-html/violin_with_jitter.png +0 -0
  50. data/blogs/ruby_plot/ruby_plot_files/figure-latex/dose_len.png +0 -0
  51. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_delivery.png +0 -0
  52. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facet_by_dose.png +0 -0
  53. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color.png +0 -0
  54. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_by_delivery_color2.png +0 -0
  55. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_decorations.png +0 -0
  56. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_jitter.png +0 -0
  57. data/blogs/ruby_plot/ruby_plot_files/figure-latex/facets_with_points.png +0 -0
  58. data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_box_plot.png +0 -0
  59. data/blogs/ruby_plot/ruby_plot_files/figure-latex/final_violin_plot.png +0 -0
  60. data/blogs/ruby_plot/ruby_plot_files/figure-latex/violin_with_jitter.png +0 -0
  61. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/dose_len.png +0 -0
  62. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facet_by_delivery.png +0 -0
  63. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facet_by_dose.png +0 -0
  64. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facets_by_delivery_color.png +0 -0
  65. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facets_by_delivery_color2.png +0 -0
  66. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facets_with_decorations.png +0 -0
  67. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facets_with_jitter.png +0 -0
  68. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/facets_with_points.png +0 -0
  69. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/final_box_plot.png +0 -0
  70. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/final_violin_plot.png +0 -0
  71. data/blogs/ruby_plot/ruby_plot_files/ruby_plot_files/figure-latex/violin_with_jitter.png +0 -0
  72. data/lib/galaaz/cli.rb +206 -11
  73. data/script/omarchy/README.md +94 -0
  74. data/script/omarchy/debug-galaaz.sh +91 -0
  75. data/script/omarchy/galaaz-add.sh +176 -0
  76. data/script/omarchy/galaaz-gknit.sh +73 -0
  77. data/script/omarchy/galaaz-guide.sh +123 -0
  78. data/script/omarchy/install-galaaz.sh +308 -0
  79. data/script/omarchy/omarchy-menu.jsonc +92 -0
  80. data/script/omarchy/remove-galaaz.sh +34 -0
  81. data/sty/galaaz.sty +22 -0
  82. data/version.rb +1 -1
  83. metadata +27 -1
@@ -0,0 +1,73 @@
1
+ #!/bin/bash
2
+ # Safe/debug gknit for Omarchy: force HTML, log everything, keep the window open.
3
+ #
4
+ # Usage:
5
+ # omarchy-galaaz-gknit [path/to/file.Rmd]
6
+ # omarchy-galaaz-gknit ~/galaaz-blogs/gknit/gknit.Rmd
7
+ #
8
+ # Many shipped blogs list pdf_document before html_document in YAML. A bare
9
+ # `gknit file.Rmd` then tries PDF first (LaTeX) — that often fails hard or OOMs
10
+ # a small VM. This wrapper always requests html_document and tees a log.
11
+ set -uo pipefail
12
+
13
+ LOG_DIR="${HOME}/.local/share/galaaz"
14
+ LOG="${LOG_DIR}/gknit-debug.log"
15
+ mkdir -p "${LOG_DIR}"
16
+
17
+ RMD="${1:-${HOME}/galaaz-blogs/oh_my/oh_my.Rmd}"
18
+ if [[ ! -f "${RMD}" ]]; then
19
+ echo "Missing Rmd: ${RMD}"
20
+ echo "Press Enter to close..."
21
+ read -r _ || true
22
+ exit 1
23
+ fi
24
+
25
+ {
26
+ echo "=== gknit debug $(date -Iseconds) ==="
27
+ echo "rmd: ${RMD}"
28
+ echo "cwd: $(pwd)"
29
+ echo "forcing: --output_format html_document"
30
+ echo "log: ${LOG}"
31
+ command -v pandoc >/dev/null && pandoc --version | head -1 || echo "pandoc: MISSING"
32
+ command -v gknit >/dev/null && echo "gknit: $(command -v gknit)" || echo "gknit: via mise/wrapper"
33
+ free -h 2>/dev/null | head -2 || true
34
+ echo
35
+ } | tee "${LOG}"
36
+
37
+ # Prefer HTML explicitly — do not let YAML's pdf_document win.
38
+ set +e
39
+ (
40
+ cd "$(dirname "${RMD}")" || exit 1
41
+ base="$(basename "${RMD}")"
42
+ if command -v mise >/dev/null 2>&1; then
43
+ mise x ruby -- gknit --output_format html_document --no_clean "${base}"
44
+ else
45
+ gknit --output_format html_document --no_clean "${base}"
46
+ fi
47
+ ) 2>&1 | tee -a "${LOG}"
48
+ st=${PIPESTATUS[0]}
49
+ set -e
50
+
51
+ {
52
+ echo
53
+ echo "exit: ${st}"
54
+ echo "--- recent kernel/OOM hints (if any) ---"
55
+ dmesg -T 2>/dev/null | grep -iE 'oom|killed process|out of memory' | tail -5 || echo "(no dmesg access or no OOM lines)"
56
+ html="${RMD%.Rmd}.html"
57
+ if [[ -f "${html}" ]]; then
58
+ echo "html: ${html}"
59
+ else
60
+ echo "html: not found (knit likely failed before write)"
61
+ fi
62
+ echo "FULL LOG: ${LOG}"
63
+ } | tee -a "${LOG}"
64
+
65
+ echo
66
+ if [[ "${st}" -ne 0 ]]; then
67
+ echo "FAILED (exit ${st}). Scroll up or: less ${LOG}"
68
+ else
69
+ echo "OK."
70
+ fi
71
+ echo "Press Enter to close (so a crash mid-run still leaves this log on disk)..."
72
+ read -r _ || true
73
+ exit "${st}"
@@ -0,0 +1,123 @@
1
+ #!/bin/bash
2
+ # Omarchy helpers for Galaaz discovery (docs + example knits).
3
+ # Installed as ~/.local/bin/omarchy-galaaz-guide (and thin aliases).
4
+ set -euo pipefail
5
+
6
+ DOCS_WEB="https://rbotafogo.github.io/galaaz/"
7
+ DOCS_GH="https://github.com/rbotafogo/galaaz"
8
+ DOCS_README="https://github.com/rbotafogo/galaaz/blob/galaaz2_0/README.md"
9
+ DOCS_OMARCHY="https://github.com/rbotafogo/galaaz/blob/galaaz2_0/script/omarchy/README.md"
10
+ BLOGS="${HOME}/galaaz-blogs"
11
+ GALAAZ_BIN="${HOME}/.local/bin/galaaz"
12
+ [[ -x "${GALAAZ_BIN}" ]] || GALAAZ_BIN="galaaz"
13
+
14
+ open_url() {
15
+ local url="$1"
16
+ # Omarchy Learn menu uses launch-webapp; try browser helpers before xdg-open.
17
+ if command -v omarchy-launch-webapp >/dev/null 2>&1; then
18
+ omarchy-launch-webapp "${url}"
19
+ elif command -v omarchy-launch-browser >/dev/null 2>&1; then
20
+ omarchy-launch-browser "${url}"
21
+ elif command -v omarchy-launch-web >/dev/null 2>&1; then
22
+ omarchy-launch-web "${url}"
23
+ elif command -v xdg-open >/dev/null 2>&1; then
24
+ xdg-open "${url}" >/dev/null 2>&1 &
25
+ elif command -v open >/dev/null 2>&1; then
26
+ open "${url}"
27
+ else
28
+ echo "Open in a browser: ${url}"
29
+ return 1
30
+ fi
31
+ }
32
+
33
+ cmd="${1:-tips}"
34
+ case "${cmd}" in
35
+ tips|guide|help|"")
36
+ cat <<EOF
37
+
38
+ Galaaz — what you can do next
39
+ =============================
40
+
41
+ Core is installed. Blog sources live in:
42
+ ${BLOGS}
43
+
44
+ Documentation
45
+ Website: ${DOCS_WEB}
46
+ GitHub: ${DOCS_GH}
47
+ README: ${DOCS_README}
48
+
49
+ After: galaaz add knit (Install → Development → Galaaz → Knit)
50
+ Needs system pandoc (Omarchy installs it via omarchy-galaaz-add knit).
51
+ Example knits (HTML — force html_document; bare gknit may try PDF first):
52
+ gknit --output_format html_document ${BLOGS}/oh_my/oh_my.Rmd
53
+ gknit --output_format html_document ${BLOGS}/gknit/gknit.Rmd
54
+ omarchy-galaaz-gknit ${BLOGS}/gknit/gknit.Rmd # logged, HTML-only, waits
55
+
56
+ Or from the menu: Knit demo (oh_my)
57
+
58
+ Other add-ons
59
+ galaaz add arrow # Apache Arrow
60
+ galaaz add ledger # R-on-Rails demo app → ~/r_on_rails_ledger && bin/dev
61
+ galaaz add examples # Ruby examples → ~/galaaz-examples
62
+ galaaz add tex # TinyTeX / PDF (large)
63
+ galaaz add bio # Bioconductor DESeq2 (large)
64
+
65
+ Check: galaaz doctor
66
+ Menu: Super+Space → Install → Development → Galaaz
67
+
68
+ Heavy CRAN installs / long R (gem 2.1.8+): R::Job keeps the bridge free.
69
+ See README → “Background R jobs (R::Job)” (${DOCS_README})
70
+
71
+ EOF
72
+ if [[ -d "${BLOGS}" ]]; then
73
+ echo "Blog folders found:"
74
+ ls -1 "${BLOGS}" 2>/dev/null | sed 's/^/ /' || true
75
+ echo
76
+ fi
77
+ echo "Press Enter to close..."
78
+ read -r _ || true
79
+ ;;
80
+ docs|web)
81
+ echo "Opening ${DOCS_WEB}"
82
+ open_url "${DOCS_WEB}"
83
+ ;;
84
+ github|gh)
85
+ echo "Opening ${DOCS_GH}"
86
+ open_url "${DOCS_GH}"
87
+ ;;
88
+ knit-demo|demo)
89
+ rmd="${BLOGS}/oh_my/oh_my.Rmd"
90
+ if [[ ! -f "${rmd}" ]]; then
91
+ echo "Missing ${rmd}"
92
+ echo "Run core install first (blogs init), then: galaaz add knit"
93
+ exit 1
94
+ fi
95
+ if [[ ! -f "${HOME}/.config/galaaz/profiles/knit" ]]; then
96
+ echo "Knit profile not installed yet. Run: galaaz add knit"
97
+ exit 1
98
+ fi
99
+ # Prefer debug wrapper (HTML-only + log) when installed.
100
+ if [[ -x "${HOME}/.local/bin/omarchy-galaaz-gknit" ]]; then
101
+ exec "${HOME}/.local/bin/omarchy-galaaz-gknit" "${rmd}"
102
+ fi
103
+ echo "Knitting demo (HTML only): ${rmd}"
104
+ if command -v mise >/dev/null 2>&1; then
105
+ mise x ruby -- gknit --output_format html_document "${rmd}"
106
+ elif command -v gknit >/dev/null 2>&1; then
107
+ gknit --output_format html_document "${rmd}"
108
+ else
109
+ ruby -S gknit --output_format html_document "${rmd}"
110
+ fi
111
+ html="${BLOGS}/oh_my/oh_my.html"
112
+ if [[ -f "${html}" ]]; then
113
+ echo "Wrote ${html}"
114
+ open_url "file://${html}"
115
+ fi
116
+ echo "Press Enter to close..."
117
+ read -r _ || true
118
+ ;;
119
+ *)
120
+ echo "Usage: omarchy-galaaz-guide [tips|docs|github|knit-demo]"
121
+ exit 1
122
+ ;;
123
+ esac
@@ -0,0 +1,308 @@
1
+ #!/bin/bash
2
+ # Omarchy-shaped core installer for Galaaz (R-on-Rails).
3
+ # omarchy:summary=Install Galaaz (R-on-Rails)
4
+ # omarchy:name=galaaz
5
+ #
6
+ # Debug log (always written, even if TUI tee fails):
7
+ # ~/.local/share/galaaz/install-core.log
8
+ set -euo pipefail
9
+
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
+ LOG_DIR="${HOME}/.local/share/galaaz"
14
+ LOG="${LOG_DIR}/install-core.log"
15
+ mkdir -p "${LOG_DIR}"
16
+
17
+ # Plain file logging — process-substitution tee often dies under omarchy-launch-tui.
18
+ : >"${LOG}"
19
+ log() {
20
+ # shellcheck disable=SC3037
21
+ echo -e "$*" | tee -a "${LOG}"
22
+ }
23
+ log_cmd() {
24
+ log "+ $*"
25
+ # Capture status without aborting set -e mid-pipeline awkwardly
26
+ set +e
27
+ "$@" >>"${LOG}" 2>&1
28
+ local st=$?
29
+ set -e
30
+ if [[ ${st} -ne 0 ]]; then
31
+ log "ERROR: command failed (exit ${st}): $*"
32
+ log "---- last 40 log lines ----"
33
+ tail -n 40 "${LOG}" | tee -a /dev/tty 2>/dev/null || tail -n 40 "${LOG}"
34
+ fi
35
+ return "${st}"
36
+ }
37
+
38
+ on_err() {
39
+ local st=$?
40
+ log ""
41
+ log "FAILED (exit ${st}) at line ${BASH_LINENO[0]:-?} — see full log:"
42
+ log " ${LOG}"
43
+ log "Copy out with: cat ${LOG}"
44
+ exit "${st}"
45
+ }
46
+ trap on_err ERR
47
+
48
+ log "=== galaaz core install $(date -Iseconds) ==="
49
+ log "log file: ${LOG}"
50
+ log "script: ${BASH_SOURCE[0]}"
51
+ log "pwd: $(pwd)"
52
+ log "user: $(id -un) home=${HOME}"
53
+ log "PATH: ${PATH}"
54
+ log "GALAAZ_GEM_VERSION=${GALAAZ_GEM_VERSION:-latest}"
55
+ log ""
56
+
57
+ pkg_add() {
58
+ if command -v omarchy-pkg-add >/dev/null 2>&1; then
59
+ log_cmd omarchy-pkg-add "$@"
60
+ elif command -v pacman >/dev/null 2>&1; then
61
+ log_cmd sudo pacman -S --noconfirm --needed "$@"
62
+ else
63
+ log "WARN: skipping Arch packages ($*); install GNU R + build tools yourself"
64
+ fi
65
+ }
66
+
67
+ log "==> packages"
68
+ pkg_add r make gcc gcc-libs libyaml pkgconf
69
+
70
+ if ! command -v ruby >/dev/null 2>&1; then
71
+ if command -v mise >/dev/null 2>&1; then
72
+ mise settings add ruby.compile false 2>/dev/null || true
73
+ mise settings add idiomatic_version_file_enable_tools ruby 2>/dev/null || true
74
+ log_cmd mise use --global ruby@latest
75
+ else
76
+ log "ERROR: ruby not found and mise missing"
77
+ exit 1
78
+ fi
79
+ fi
80
+
81
+ if command -v mise >/dev/null 2>&1; then
82
+ if ! mise x ruby -- ruby -e 'exit(RUBY_ENGINE == "ruby" ? 0 : 1)' 2>/dev/null; then
83
+ log "Active Ruby is not CRuby; installing MRI via mise..."
84
+ mise use --global ruby@3.4 2>/dev/null || mise use --global ruby@latest
85
+ fi
86
+ if ! mise x ruby -- ruby -e 'exit(RUBY_ENGINE == "ruby" ? 0 : 1)'; then
87
+ log "ERROR: need CRuby (MRI) for the gatekeeper .so"
88
+ mise x ruby -- ruby -v >>"${LOG}" 2>&1 || true
89
+ exit 1
90
+ fi
91
+ fi
92
+
93
+ if ! command -v R >/dev/null 2>&1 || ! command -v Rscript >/dev/null 2>&1; then
94
+ log "ERROR: R/Rscript missing after package install"
95
+ log "which R: $(command -v R || echo none) Rscript: $(command -v Rscript || echo none)"
96
+ exit 1
97
+ fi
98
+
99
+ log "R: $(R --version 2>/dev/null | head -1)"
100
+ log "RHOME: $(R RHOME 2>/dev/null || echo '?')"
101
+ log "ruby: $(mise x ruby -- ruby -v 2>/dev/null || ruby -v)"
102
+ log "engine: $(mise x ruby -- ruby -e 'print RUBY_ENGINE' 2>/dev/null || ruby -e 'print RUBY_ENGINE')"
103
+
104
+ # Arch/Omarchy: system R library (/usr/lib/R/library) is root-only.
105
+ # Without a user lib, install.packages("Rcpp") fails with "lib is not writable".
106
+ ensure_user_r_lib() {
107
+ export R_LIBS_USER="${R_LIBS_USER:-${HOME}/.local/lib/R/library}"
108
+ mkdir -p "${R_LIBS_USER}"
109
+ local renviron="${HOME}/.Renviron"
110
+ if [[ ! -f "${renviron}" ]] || ! grep -q '^R_LIBS_USER=' "${renviron}" 2>/dev/null; then
111
+ echo "R_LIBS_USER=${R_LIBS_USER}" >>"${renviron}"
112
+ fi
113
+ log "R_LIBS_USER=${R_LIBS_USER}"
114
+ log "Renviron: ${renviron}"
115
+ }
116
+ ensure_user_r_lib
117
+
118
+ {
119
+ echo "---- R CMD config ----"
120
+ R CMD config CXX || true
121
+ R CMD config CXXFLAGS || true
122
+ R CMD config --cppflags || true
123
+ R CMD config --ldflags || true
124
+ echo "---- which ----"
125
+ command -v make; command -v gcc; command -v g++; command -v mise || true
126
+ command -v ruby; command -v gem || true
127
+ mise ls 2>/dev/null || true
128
+ echo "---- .libPaths ----"
129
+ Rscript -e '.libPaths()' || true
130
+ } >>"${LOG}" 2>&1
131
+
132
+ echo "gem: --no-document" >"${HOME}/.gemrc"
133
+
134
+ run_ruby() {
135
+ if command -v mise >/dev/null 2>&1; then
136
+ mise x ruby -- "$@"
137
+ else
138
+ "$@"
139
+ fi
140
+ }
141
+
142
+ gem_root() {
143
+ run_ruby ruby -e "puts Gem::Specification.find_by_name('galaaz').full_gem_path"
144
+ }
145
+
146
+ gatekeeper_path() {
147
+ run_ruby ruby -e "puts File.join(Gem::Specification.find_by_name('galaaz').full_gem_path, 'ext', 'new_bridge', 'galaaz_gatekeeper.so')"
148
+ }
149
+
150
+ # Invoke gem CLI without `ruby -S galaaz` (that finds ~/.local/bin/galaaz wrapper).
151
+ galaaz_cli() {
152
+ run_ruby ruby -e 'load Gem.activate_bin_path("galaaz", "galaaz")' -- "$@"
153
+ }
154
+
155
+ install_wrapper() {
156
+ mkdir -p "${HOME}/.local/bin"
157
+ cat >"${HOME}/.local/bin/galaaz" <<'WRAP'
158
+ #!/bin/bash
159
+ set -euo pipefail
160
+ # Do not use `ruby -S galaaz`: PATH often includes this wrapper → LoadError.
161
+ if command -v mise >/dev/null 2>&1; then
162
+ exec mise x ruby -- ruby -e 'load Gem.activate_bin_path("galaaz", "galaaz")' -- "$@"
163
+ fi
164
+ exec ruby -e 'load Gem.activate_bin_path("galaaz", "galaaz")' -- "$@"
165
+ WRAP
166
+ chmod +x "${HOME}/.local/bin/galaaz"
167
+ log "wrapper: ${HOME}/.local/bin/galaaz"
168
+ }
169
+
170
+ run_ruby gem uninstall galaaz -x -a --ignore-dependencies >>"${LOG}" 2>&1 || true
171
+ if [[ -n "${GALAAZ_GEM_VERSION}" ]]; then
172
+ log "==> gem install galaaz -v ${GALAAZ_GEM_VERSION}"
173
+ set +e
174
+ run_ruby gem install galaaz -v "${GALAAZ_GEM_VERSION}" --no-document --source https://rubygems.org 2>&1 | tee -a "${LOG}"
175
+ st=${PIPESTATUS[0]}
176
+ set -e
177
+ [[ ${st} -eq 0 ]] || exit "${st}"
178
+ else
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}"
191
+ fi
192
+
193
+ INSTALLED="$(run_ruby ruby -e "puts Gem::Specification.find_by_name('galaaz').version")"
194
+ log "installed galaaz ${INSTALLED}"
195
+
196
+ ROOT="$(gem_root)"
197
+ BRIDGE="${ROOT}/ext/new_bridge"
198
+ log "gem root: ${ROOT}"
199
+ log "bridge: ${BRIDGE}"
200
+ ls -la "${BRIDGE}" >>"${LOG}" 2>&1 || true
201
+ if [[ ! -f "${BRIDGE}/Makefile" ]]; then
202
+ log "ERROR: bridge Makefile missing: ${BRIDGE}/Makefile"
203
+ exit 1
204
+ fi
205
+
206
+ log "==> ensure Rcpp (CRAN, user library)"
207
+ log_cmd Rscript -e "
208
+ lib <- Sys.getenv('R_LIBS_USER')
209
+ if (!nzchar(lib)) lib <- file.path(Sys.getenv('HOME'), '.local', 'lib', 'R', 'library')
210
+ dir.create(lib, recursive=TRUE, showWarnings=FALSE)
211
+ .libPaths(c(lib, .libPaths()))
212
+ if (!requireNamespace('Rcpp', quietly=TRUE))
213
+ install.packages('Rcpp', lib=lib, repos='https://cloud.r-project.org')
214
+ cat('Rcpp=', requireNamespace('Rcpp', quietly=TRUE), ' lib=', lib, '\n', sep='')
215
+ if (!requireNamespace('Rcpp', quietly=TRUE)) quit(status=1)
216
+ "
217
+
218
+ log "==> build gatekeeper (make -C ext/new_bridge)"
219
+ rm -f "${BRIDGE}/galaaz_gatekeeper.so" "${BRIDGE}"/*.o
220
+
221
+ # Older gems hardcoded -L$(R_HOME)/lib -lR which fails on Arch (RHOME=/usr/lib64/R).
222
+ # 2.1.2+ ships a fixed Makefile; still override LDFLAGS for safety.
223
+ R_LDFLAGS="$(R CMD config --ldflags)"
224
+ log "R CMD config --ldflags: ${R_LDFLAGS}"
225
+ log "Rcpp include: $(Rscript -e "cat(system.file('include', package='Rcpp'))")"
226
+ if grep -q 'LDFLAGS := -L\$(R_HOME)/lib -lR' "${BRIDGE}/Makefile" 2>/dev/null; then
227
+ log "patching gem Makefile LDFLAGS for Arch/Omarchy"
228
+ sed -i 's|^LDFLAGS := -L\$(R_HOME)/lib -lR.*|LDFLAGS := \$(shell R CMD config --ldflags) -Wl,-rpath,\$(R_HOME)/lib|' "${BRIDGE}/Makefile" || true
229
+ fi
230
+
231
+ set +e
232
+ make -C "${BRIDGE}" all LDFLAGS="${R_LDFLAGS} -Wl,-rpath,$(R RHOME)/lib" 2>&1 | tee -a "${LOG}"
233
+ make_st=${PIPESTATUS[0]}
234
+ set -e
235
+ if [[ ${make_st} -ne 0 ]]; then
236
+ log "ERROR: make failed (exit ${make_st}) — retry verbose"
237
+ make -C "${BRIDGE}" all LDFLAGS="${R_LDFLAGS} -Wl,-rpath,$(R RHOME)/lib" 2>&1 | tee -a "${LOG}" || true
238
+ log "---- bridge dir ----"
239
+ ls -la "${BRIDGE}" 2>&1 | tee -a "${LOG}" || true
240
+ log "Full log: ${LOG}"
241
+ exit 1
242
+ fi
243
+
244
+ SO="$(gatekeeper_path)"
245
+ log "expected so: ${SO}"
246
+ ls -la "${SO}" >>"${LOG}" 2>&1 || true
247
+ if [[ ! -f "${SO}" ]]; then
248
+ log "ERROR: gatekeeper missing after make"
249
+ ls -la "${BRIDGE}" 2>&1 | tee -a "${LOG}" || true
250
+ exit 1
251
+ fi
252
+ log "gatekeeper OK: ${SO}"
253
+
254
+ log "==> galaaz setup (CLI)"
255
+ galaaz_cli setup >>"${LOG}" 2>&1 || log "WARN: galaaz setup non-zero (so exists; continuing)"
256
+
257
+ log "==> galaaz blogs init"
258
+ galaaz_cli blogs init "${HOME}/galaaz-blogs" >>"${LOG}" 2>&1
259
+
260
+ install_wrapper
261
+
262
+ log "==> doctor"
263
+ export PATH="${HOME}/.local/bin:${PATH}"
264
+ hash -r 2>/dev/null || true
265
+ if ! "${HOME}/.local/bin/galaaz" doctor >>"${LOG}" 2>&1; then
266
+ log "ERROR: doctor incomplete"
267
+ log "so exists=$([[ -f ${SO} ]] && echo yes || echo no)"
268
+ "${HOME}/.local/bin/galaaz" doctor 2>&1 | tee -a "${LOG}" || true
269
+ exit 1
270
+ fi
271
+ "${HOME}/.local/bin/galaaz" doctor 2>&1 | tee -a "${LOG}" || true
272
+
273
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
274
+ mkdir -p "${HOME}/.config/omarchy/extensions" "${HOME}/.local/bin"
275
+ if [[ -f "${SCRIPT_DIR}/omarchy-menu.jsonc" ]]; then
276
+ cp "${SCRIPT_DIR}/omarchy-menu.jsonc" "${HOME}/.config/omarchy/extensions/omarchy-menu.jsonc"
277
+ fi
278
+ cp "${BASH_SOURCE[0]}" "${HOME}/.local/bin/omarchy-install-galaaz"
279
+ chmod +x "${HOME}/.local/bin/omarchy-install-galaaz"
280
+ if [[ -f "${SCRIPT_DIR}/remove-galaaz.sh" ]]; then
281
+ cp "${SCRIPT_DIR}/remove-galaaz.sh" "${HOME}/.local/bin/omarchy-remove-galaaz"
282
+ chmod +x "${HOME}/.local/bin/omarchy-remove-galaaz"
283
+ fi
284
+ if [[ -f "${SCRIPT_DIR}/galaaz-guide.sh" ]]; then
285
+ cp "${SCRIPT_DIR}/galaaz-guide.sh" "${HOME}/.local/bin/omarchy-galaaz-guide"
286
+ chmod +x "${HOME}/.local/bin/omarchy-galaaz-guide"
287
+ log "guide: ${HOME}/.local/bin/omarchy-galaaz-guide"
288
+ fi
289
+ if [[ -f "${SCRIPT_DIR}/galaaz-add.sh" ]]; then
290
+ cp "${SCRIPT_DIR}/galaaz-add.sh" "${HOME}/.local/bin/omarchy-galaaz-add"
291
+ chmod +x "${HOME}/.local/bin/omarchy-galaaz-add"
292
+ log "add helper: ${HOME}/.local/bin/omarchy-galaaz-add"
293
+ fi
294
+ if [[ -f "${SCRIPT_DIR}/galaaz-gknit.sh" ]]; then
295
+ cp "${SCRIPT_DIR}/galaaz-gknit.sh" "${HOME}/.local/bin/omarchy-galaaz-gknit"
296
+ chmod +x "${HOME}/.local/bin/omarchy-galaaz-gknit"
297
+ log "gknit helper: ${HOME}/.local/bin/omarchy-galaaz-gknit"
298
+ fi
299
+
300
+ mkdir -p "${HOME}/.config/galaaz/profiles"
301
+ date -Iseconds >"${HOME}/.config/galaaz/profiles/core"
302
+
303
+ log ""
304
+ log "Core install complete."
305
+ log "Next: Super+Space → Install → Development → Galaaz → Guide (what's next)"
306
+ log "Docs: https://rbotafogo.github.io/galaaz/"
307
+ log "FULL LOG: ${LOG}"
308
+ log "Done!"
@@ -0,0 +1,92 @@
1
+ {
2
+ // Galaaz overlay for ~/.config/omarchy/extensions/omarchy-menu.jsonc
3
+ // Copy/merge into that path on TryOmarchy. Whole-line // comments only.
4
+ //
5
+ // Use ~/.local/bin/galaaz (installer wrapper). Do not quote the whole
6
+ // "galaaz add …" as one word — omarchy-launch-tui then does nothing useful.
7
+
8
+ "install.development.galaaz": {
9
+ "icon": "󰫏",
10
+ "label": "Galaaz",
11
+ "description": "R on Rails"
12
+ },
13
+ "install.development.galaaz.core": {
14
+ "icon": "󰫏",
15
+ "label": "Galaaz (core)",
16
+ "description": "gem + setup + blogs (not just gem install)",
17
+ "action": "omarchy-launch-tui omarchy-install-galaaz",
18
+ "disabled": "test -f ~/.config/galaaz/profiles/core"
19
+ },
20
+ "install.development.galaaz.guide": {
21
+ "icon": "󰋗",
22
+ "label": "Guide (what's next)",
23
+ "description": "Example knits, docs links, add-ons",
24
+ "action": "omarchy-launch-tui omarchy-galaaz-guide",
25
+ "when": "test -f ~/.config/galaaz/profiles/core"
26
+ },
27
+ "install.development.galaaz.docs": {
28
+ "icon": "󰂺",
29
+ "label": "Documentation (website)",
30
+ "description": "Open rbotafogo.github.io/galaaz",
31
+ "action": "omarchy-launch-webapp https://rbotafogo.github.io/galaaz/",
32
+ "when": "test -f ~/.config/galaaz/profiles/core"
33
+ },
34
+ "install.development.galaaz.github": {
35
+ "icon": "󰊤",
36
+ "label": "GitHub repository",
37
+ "description": "Open github.com/rbotafogo/galaaz",
38
+ "action": "omarchy-launch-webapp https://github.com/rbotafogo/galaaz",
39
+ "when": "test -f ~/.config/galaaz/profiles/core"
40
+ },
41
+ "install.development.galaaz.knit": {
42
+ "icon": "󰫏",
43
+ "label": "Knit (HTML blogs)",
44
+ "description": "pandoc + knitr/rmarkdown",
45
+ "action": "omarchy-launch-tui omarchy-galaaz-add knit",
46
+ "disabled": "test -f ~/.config/galaaz/profiles/knit"
47
+ },
48
+ "install.development.galaaz.knit-demo": {
49
+ "icon": "󰐊",
50
+ "label": "Knit demo (oh_my)",
51
+ "description": "gknit ~/galaaz-blogs/oh_my/oh_my.Rmd",
52
+ "action": "omarchy-launch-tui omarchy-galaaz-guide knit-demo",
53
+ "when": "test -f ~/.config/galaaz/profiles/knit"
54
+ },
55
+ "install.development.galaaz.arrow": {
56
+ "icon": "󰫏",
57
+ "label": "Arrow",
58
+ "action": "omarchy-launch-tui omarchy-galaaz-add arrow",
59
+ "disabled": "test -f ~/.config/galaaz/profiles/arrow"
60
+ },
61
+ "install.development.galaaz.tex": {
62
+ "icon": "󰫏",
63
+ "label": "TeX (PDF blogs)",
64
+ "action": "omarchy-launch-tui omarchy-galaaz-add tex",
65
+ "disabled": "test -f ~/.config/galaaz/profiles/tex"
66
+ },
67
+ "install.development.galaaz.bio": {
68
+ "icon": "󰫏",
69
+ "label": "Bioconductor (DESeq2)",
70
+ "action": "omarchy-launch-tui omarchy-galaaz-add bio",
71
+ "disabled": "test -f ~/.config/galaaz/profiles/bio"
72
+ },
73
+ "install.development.galaaz.examples": {
74
+ "icon": "󰫏",
75
+ "label": "Examples",
76
+ "action": "omarchy-launch-tui omarchy-galaaz-add examples",
77
+ "disabled": "test -f ~/.config/galaaz/profiles/examples"
78
+ },
79
+ "install.development.galaaz.ledger": {
80
+ "icon": "󰫏",
81
+ "label": "Ledger (R-on-Rails demo)",
82
+ "description": "Clone app, seed, bin/dev",
83
+ "action": "omarchy-launch-tui omarchy-galaaz-add ledger",
84
+ "disabled": "test -f ~/.config/galaaz/profiles/ledger"
85
+ },
86
+ "remove.development.galaaz": {
87
+ "icon": "󰫏",
88
+ "label": "Galaaz",
89
+ "description": "Core gem (add-on R packages stay)",
90
+ "action": "omarchy-launch-tui omarchy-remove-galaaz"
91
+ }
92
+ }
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+ # Remove Galaaz core gem + blogs we created. Leaves Ruby, R, and add-on R packages.
3
+ set -euo pipefail
4
+
5
+ echo -e "Removing Galaaz...\n"
6
+
7
+ run_ruby() {
8
+ if command -v mise >/dev/null 2>&1; then
9
+ mise x ruby -- "$@"
10
+ else
11
+ "$@"
12
+ fi
13
+ }
14
+
15
+ if command -v gem >/dev/null 2>&1 || command -v mise >/dev/null 2>&1; then
16
+ run_ruby gem uninstall galaaz -x -a --ignore-dependencies 2>/dev/null || true
17
+ fi
18
+
19
+ blogs="${HOME}/galaaz-blogs"
20
+ if [[ -f "${blogs}/.galaaz-blogs" ]]; then
21
+ echo "Removing ${blogs} (galaaz blogs marker present)"
22
+ rm -rf "${blogs}"
23
+ else
24
+ echo "Leaving ${blogs} untouched (no .galaaz-blogs marker)"
25
+ fi
26
+
27
+ # Profile markers only — do not uninstall CRAN/Bioconductor/TinyTeX.
28
+ if [[ -d "${HOME}/.config/galaaz/profiles" ]]; then
29
+ rm -rf "${HOME}/.config/galaaz/profiles"
30
+ echo "Cleared ~/.config/galaaz/profiles"
31
+ fi
32
+
33
+ echo -e "\nNote: GNU R and language packages (arrow, knitr, …) were left installed."
34
+ echo "Done!"
data/sty/galaaz.sty CHANGED
@@ -67,5 +67,27 @@
67
67
  % Command to import an R variable to latex
68
68
  \newcommand{\RtoLatex}[2]{\newcommand{#1}{#2}}
69
69
 
70
+ % Soft-wrap Pandoc highlighted code/output boxes (Shaded + Highlighting).
71
+ % This runs after Pandoc's default \DefineVerbatimEnvironment{Highlighting}
72
+ % (header includes come later in the generated .tex). Prefer manual line
73
+ % breaks in Rmd sources; breaklines is a safety net for leftovers/output.
74
+ % Requires TinyTeX/TeX Live package: tlmgr install fvextra
75
+ \IfFileExists{fvextra.sty}{%
76
+ \usepackage{fvextra}%
77
+ \DefineVerbatimEnvironment{Highlighting}{Verbatim}{%
78
+ breaklines=true,
79
+ breakanywhere=true,
80
+ breakindent=1.5em,
81
+ fontsize=\small,
82
+ commandchars=\\\{\}%
83
+ }%
84
+ }{%
85
+ % fancyvrb is already loaded by Pandoc; shrink code so more fits per line.
86
+ \DefineVerbatimEnvironment{Highlighting}{Verbatim}{%
87
+ fontsize=\small,
88
+ commandchars=\\\{\}%
89
+ }%
90
+ }
91
+
70
92
  %
71
93
  %\newcommand{\atraso}[1]{\color{red} \textbf {Tempo desde a Assinatura do Contrato: #1 dias}}
data/version.rb CHANGED
@@ -1,2 +1,2 @@
1
1
  $gem_name = "galaaz"
2
- $version="2.1.6"
2
+ $version="2.1.8"