mirror of
https://github.com/lukaszraczylo/homebrew-taps.git
synced 2026-10-13 00:47:46 +00:00
Replace the Tailwind CDN page with a static stylesheet. Make the generator emit the new markup and fill the Brewfile block from the casks. Map cask names to repository names for projects whose names differ.
281 lines
13 KiB
HTML
281 lines
13 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<meta name="color-scheme" content="light dark" />
|
|
<title>Homebrew tap - lukaszraczylo</title>
|
|
<meta
|
|
name="description"
|
|
content="Homebrew tap with command-line tools by Lukasz Raczylo: kportal, lolcathost, semver-generator and harness-sync."
|
|
/>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<style>
|
|
:root {
|
|
--bg: #ffffff;
|
|
--fg: #111418;
|
|
--muted: #5b6470;
|
|
--line: #e3e6ea;
|
|
--code-bg: #f5f6f8;
|
|
--accent: #b45309;
|
|
--accent-fg: #ffffff;
|
|
--sans: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
}
|
|
@media (prefers-color-scheme: dark) {
|
|
:root {
|
|
--bg: #0e1013;
|
|
--fg: #e8eaed;
|
|
--muted: #98a1ad;
|
|
--line: #262b32;
|
|
--code-bg: #171a1f;
|
|
--accent: #f59e0b;
|
|
--accent-fg: #0e1013;
|
|
}
|
|
}
|
|
* { box-sizing: border-box; }
|
|
html { -webkit-text-size-adjust: 100%; }
|
|
body {
|
|
margin: 0;
|
|
background: var(--bg);
|
|
color: var(--fg);
|
|
font: 16px/1.6 var(--sans);
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
a { color: inherit; text-decoration-color: var(--line); text-underline-offset: 3px; }
|
|
a:hover { text-decoration-color: var(--accent); }
|
|
a:focus-visible, button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
code, pre { font-family: var(--mono); font-size: 0.875rem; }
|
|
.wrap { max-width: 56rem; margin: 0 auto; padding: 0 1.25rem; }
|
|
|
|
header.top { border-bottom: 1px solid var(--line); }
|
|
header.top .wrap {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
height: 3.5rem;
|
|
}
|
|
.brand { font-family: var(--mono); font-weight: 500; text-decoration: none; }
|
|
.brand span { color: var(--accent); }
|
|
nav.links { display: flex; gap: 1.5rem; font-size: 0.9375rem; color: var(--muted); }
|
|
nav.links a { text-decoration: none; }
|
|
nav.links a:hover { color: var(--fg); }
|
|
|
|
.intro { padding: 4rem 0 3rem; }
|
|
h1 {
|
|
margin: 0 0 1rem;
|
|
font-size: clamp(1.875rem, 5vw, 2.75rem);
|
|
line-height: 1.15;
|
|
font-weight: 600;
|
|
letter-spacing: -0.02em;
|
|
}
|
|
.intro p { margin: 0 0 1.5rem; max-width: 38rem; color: var(--muted); font-size: 1.125rem; }
|
|
|
|
section { padding: 2.5rem 0; border-top: 1px solid var(--line); }
|
|
h2 { margin: 0 0 1.5rem; font-size: 1.125rem; font-weight: 600; }
|
|
h2 small { margin-left: 0.5rem; color: var(--muted); font-weight: 400; font-size: 0.875rem; }
|
|
|
|
.cmd {
|
|
position: relative;
|
|
background: var(--code-bg);
|
|
border: 1px solid var(--line);
|
|
border-radius: 6px;
|
|
}
|
|
.cmd pre { margin: 0; padding: 0.75rem 4.5rem 0.75rem 1rem; overflow-x: auto; }
|
|
.copy-btn {
|
|
position: absolute;
|
|
top: 50%;
|
|
right: 0.5rem;
|
|
transform: translateY(-50%);
|
|
padding: 0.25rem 0.625rem;
|
|
background: var(--bg);
|
|
color: var(--muted);
|
|
border: 1px solid var(--line);
|
|
border-radius: 4px;
|
|
font: 500 0.75rem var(--sans);
|
|
cursor: pointer;
|
|
}
|
|
.copy-btn:hover { color: var(--fg); border-color: var(--muted); }
|
|
.copy-btn.copied { color: var(--accent); border-color: var(--accent); }
|
|
|
|
.projects { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
|
|
.project { padding: 1.5rem 0; border-bottom: 1px solid var(--line); }
|
|
.project-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.75rem; }
|
|
.project h3 { margin: 0; font-family: var(--mono); font-size: 1.0625rem; font-weight: 500; }
|
|
.meta { color: var(--muted); font-size: 0.8125rem; font-family: var(--mono); }
|
|
.project-links { margin-left: auto; display: flex; gap: 1rem; font-size: 0.875rem; color: var(--muted); }
|
|
.project-links a:hover { color: var(--fg); }
|
|
.project p { margin: 0.375rem 0 1rem; color: var(--muted); }
|
|
|
|
.note { margin: 0 0 1rem; color: var(--muted); }
|
|
.note + .cmd { margin-bottom: 1.5rem; }
|
|
|
|
footer { border-top: 1px solid var(--line); padding: 1.5rem 0 3rem; color: var(--muted); font-size: 0.875rem; }
|
|
footer .wrap { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.5rem 1.5rem; }
|
|
footer a { text-decoration: none; }
|
|
footer a:hover { color: var(--fg); }
|
|
|
|
@media (max-width: 36rem) {
|
|
.intro { padding: 2.5rem 0 2rem; }
|
|
.project-links { margin-left: 0; width: 100%; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<header class="top">
|
|
<div class="wrap">
|
|
<a class="brand" href="#">brew<span>/</span>taps</a>
|
|
<nav class="links" aria-label="Primary">
|
|
<a href="#projects">Projects</a>
|
|
<a href="#install">Install</a>
|
|
<a href="https://github.com/lukaszraczylo/homebrew-taps">GitHub</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="wrap">
|
|
<div class="intro">
|
|
<h1>Homebrew tap for the command-line tools at raczylo.com</h1>
|
|
<p>
|
|
Prebuilt binaries for macOS and Linux, on arm64 and amd64. Tap once, then install any project
|
|
below as a cask.
|
|
</p>
|
|
<div class="cmd">
|
|
<pre><code>brew tap lukaszraczylo/taps</code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
</div>
|
|
|
|
<section id="projects">
|
|
<h2>Projects <small>installed with <code>brew install --cask</code></small></h2>
|
|
<ul class="projects">
|
|
<!-- CASKS_START -->
|
|
|
|
<!-- harness-sync -->
|
|
<li class="project">
|
|
<div class="project-head">
|
|
<h3>harness-sync</h3>
|
|
<span class="meta">v0.31.5 · LLM</span>
|
|
<span class="project-links">
|
|
<a href="https://github.com/lukaszraczylo/harness-sync">GitHub</a>
|
|
</span>
|
|
</div>
|
|
<p>Sync skills, agents, MCP, and LLM endpoints across multiple LLM harnesses</p>
|
|
<div class="cmd">
|
|
<pre><code>brew install --cask lukaszraczylo/taps/harness-sync</code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
</li>
|
|
|
|
<!-- kportal -->
|
|
<li class="project">
|
|
<div class="project-head">
|
|
<h3>kportal</h3>
|
|
<span class="meta">v0.13.2 · Kubernetes</span>
|
|
<span class="project-links">
|
|
<a href="https://kportal.raczylo.com">Docs</a>
|
|
<a href="https://github.com/lukaszraczylo/kportal">GitHub</a>
|
|
</span>
|
|
</div>
|
|
<p>Modern Kubernetes port-forward manager with interactive TUI</p>
|
|
<div class="cmd">
|
|
<pre><code>brew install --cask lukaszraczylo/taps/kportal</code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
</li>
|
|
|
|
<!-- lolcathost -->
|
|
<li class="project">
|
|
<div class="project-head">
|
|
<h3>lolcathost</h3>
|
|
<span class="meta">v0.2.21 · Hosts</span>
|
|
<span class="project-links">
|
|
<a href="https://lolcathost.raczylo.com">Docs</a>
|
|
<a href="https://github.com/lukaszraczylo/lolcathost">GitHub</a>
|
|
</span>
|
|
</div>
|
|
<p>Dynamic host management tool with TUI</p>
|
|
<div class="cmd">
|
|
<pre><code>brew install --cask lukaszraczylo/taps/lolcathost</code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
</li>
|
|
|
|
<!-- semver-generator -->
|
|
<li class="project">
|
|
<div class="project-head">
|
|
<h3>semver-generator</h3>
|
|
<span class="meta">v1.18.11 · Git</span>
|
|
<span class="project-links">
|
|
<a href="https://github.com/lukaszraczylo/semver-generator">GitHub</a>
|
|
</span>
|
|
</div>
|
|
<p>Automatic semantic version generator based on git commit messages</p>
|
|
<div class="cmd">
|
|
<pre><code>brew install --cask lukaszraczylo/taps/semver-generator</code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
</li>
|
|
|
|
<!-- CASKS_END -->
|
|
</ul>
|
|
</section>
|
|
|
|
<section id="install">
|
|
<h2>Install</h2>
|
|
<p class="note">Install a project by name. Homebrew taps the repository on first use.</p>
|
|
<div class="cmd">
|
|
<pre><code>brew install --cask lukaszraczylo/taps/<name></code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
<p class="note">Or declare the tap in a Brewfile:</p>
|
|
<div class="cmd">
|
|
<pre><code>tap "lukaszraczylo/taps"
|
|
<!-- BREWFILE_START -->
|
|
cask "harness-sync"
|
|
cask "kportal"
|
|
cask "lolcathost"
|
|
cask "semver-generator"
|
|
<!-- BREWFILE_END --></code></pre>
|
|
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer>
|
|
<div class="wrap">
|
|
<span>MIT License</span>
|
|
<span>
|
|
<a href="https://github.com/lukaszraczylo/homebrew-taps">Source</a>
|
|
<a href="https://github.com/lukaszraczylo/homebrew-taps/issues">Issues</a>
|
|
<a href="https://docs.brew.sh">Homebrew docs</a>
|
|
</span>
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
function copyCode(button) {
|
|
var text = button.parentElement.querySelector("code").textContent;
|
|
navigator.clipboard.writeText(text).then(
|
|
function () {
|
|
button.classList.add("copied");
|
|
button.textContent = "Copied";
|
|
setTimeout(function () {
|
|
button.classList.remove("copied");
|
|
button.textContent = "Copy";
|
|
}, 2000);
|
|
},
|
|
function (err) {
|
|
console.error("Copy failed:", err);
|
|
}
|
|
);
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|