Files
homebrew-taps/docs/index.html
T

315 lines
14 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.13 &middot; 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.5 &middot; 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.24 &middot; 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>
<!-- mcp-filepuff -->
<li class="project">
<div class="project-head">
<h3>mcp-filepuff</h3>
<span class="meta">v2.1.8 &middot; MCP</span>
<span class="project-links">
<a href="https://github.com/lukaszraczylo/filepuff-mcp">GitHub</a>
</span>
</div>
<p>AST-aware file operations and LSP integration MCP server for Claude Code</p>
<div class="cmd">
<pre><code>brew install --cask lukaszraczylo/taps/mcp-filepuff</code></pre>
<button class="copy-btn" type="button" onclick="copyCode(this)">Copy</button>
</div>
</li>
<!-- readitall -->
<li class="project">
<div class="project-head">
<h3>readitall</h3>
<span class="meta">v0.1.12 &middot; MCP</span>
<span class="project-links">
<a href="https://github.com/lukaszraczylo/mcp-readitall">GitHub</a>
</span>
</div>
<p>MCP server that reads web pages through a headless Chromium-family browser</p>
<div class="cmd">
<pre><code>brew install --cask lukaszraczylo/taps/readitall</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.13 &middot; 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/&lt;name&gt;</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 "mcp-filepuff"
cask "readitall"
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> &nbsp;
<a href="https://github.com/lukaszraczylo/homebrew-taps/issues">Issues</a> &nbsp;
<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>