Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Gembrew

repocard

Generate conventional Homebrew formulae for published Ruby command-line gems.

Install

gem install gembrew

Example

See the Bashly Homebrew tap for a real-world tap generated and maintained with Gembrew.

Usage

mkdir homebrew-tap
cd homebrew-tap
gembrew init GEM
gembrew build
gembrew check

init creates a tap repository containing README.md, gembrew/, Formula/, and a GitHub Actions workflow that uses Homebrew's test-bot on Linux and Apple Silicon. Pull requests test changed formulae; pushes and manual runs test every formula. It accepts an empty directory or an existing tap containing Formula/. Supplying a gem name also creates its first configuration. The gem name is optional, so gembrew init can prepare an empty tap or add Gembrew to an existing one. Existing README and workflow files are never overwritten.

For example, gembrew init example generates:

README.md
.github/
workflows/
test.yml
gembrew/
example/
formula.yml
test.rb
Formula/

gembrew/example/formula.yml contains the gem metadata and source:

gem: exampleversion: ""# requiredsource:
type: rubygems

gembrew/example/test.rb contains the generated default test:

systembin/"example","--version"

Edit these files as needed, then generate Formula/example.rb:

gembrew build

Each directory under gembrew/ describes one formula. Add more published gems with:

gembrew add another-gem

Plain build generates every configured formula. Pass a configuration name to generate just one:

gembrew build example

The required settings in formula.yml are gem, version, and source. The output defaults to Formula/NAME.rb, where NAME is the configuration directory name. Relative output paths are resolved from the tap root.

gem: exampleversion: "1.2.3"source:
type: rubygems# Optional gem metadata overrides:desc: Example command-line applicationhomepage: https://example.comlicense: MITexecutable: example# Optional additional Homebrew formula dependencies:dependencies:
- bash
- bash :macos_only
- libffi :system_on_macos# Optional output override. The default for gembrew/example is shown here.output: Formula/example.rb

Tag a dependency with :system_on_macos when macOS provides it and Homebrew should install its formula only on other platforms. Tag it with :macos_only when Homebrew should install it only on macOS.

You may add these optional Ruby hook files beside formula.yml:

install_extra.rb Runs after the standard gem installation
test.rb Defines the formula test

Gembrew generates a basic COMMAND --version test when test.rb is absent. gembrew init GEM and gembrew add GEM create that test file so it can be replaced with a meaningful functional test. Gembrew inserts install_extra.rb at the end of the formula's install method, after installing the gem and creating its executable wrapper.

To build the root gem from a GitHub tag while continuing to fetch its dependencies from RubyGems, use:

source:
type: githubrepo: owner/repository# tag: v1.2.3# gemspec: example.gemspec

The tag defaults to vVERSION; the gemspec path defaults to GEMNAME.gemspec.

Gembrew resolves the generic Ruby dependency graph and generates a Homebrew resource for every runtime dependency. Original .gem archives are reused from RubyGems' local cache when available. Downloaded archives are retained in ${XDG_CACHE_HOME:-~/.cache}/gembrew/gems.

Open the generated Homebrew environment with:

gembrew shell

The repository is mounted as a local tap, so formulae can be addressed by gem name inside the shell:

brew style gembrew/tap/example
brew audit --new --online gembrew/tap/example
brew install --build-from-source gembrew/tap/example
brew test gembrew/tap/example
brew linkage --test gembrew/tap/example

To use a stock, current Homebrew container without mounting the local repository or changing Homebrew's update, API, or cleanup behavior, open a pristine shell:

gembrew shell --pristine

Run non-installing style and audit checks with the local Homebrew:

gembrew check

Run gembrew build first. The check command runs Homebrew style and online audit against the generated formulae without installing them. Use gembrew check example to check only one formula.

Run the complete workflow in a clean, disposable Homebrew container:

gembrew check --container

Container checks additionally perform source installation, the formula test, and linkage validation. The short form is gembrew check -c. Gembrew invokes Docker directly; the tap does not need generated container support files.

Preview either check workflow without running any commands:

gembrew check --dry-run
gembrew check --container --dry-run

The short form is gembrew check -n.

Contributing / Support

If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.


About

Generate Homebrew formulae for Ruby gems

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages