* docs: brew official formula * docs(install): note official Homebrew formula (#361) (thanks @zeldrisho) --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
302 lines
12 KiB
HTML
302 lines
12 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>gog — Google in your terminal</title>
|
||
<meta
|
||
name="description"
|
||
content="gog: a single CLI for Gmail, Calendar, Drive, Contacts, Tasks, Sheets, Docs, Slides, and People."
|
||
/>
|
||
<meta name="theme-color" content="#0b0b11" />
|
||
<meta property="og:title" content="gog — Google in your terminal" />
|
||
<meta
|
||
property="og:description"
|
||
content="One CLI for Gmail, Calendar, Drive, Contacts, Tasks, Sheets, Docs, Slides, and People."
|
||
/>
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:url" content="https://gogcli.sh/" />
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
|
||
<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=Fraunces:opsz,wght@9..144,500;9..144,700&family=DM+Sans:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"
|
||
rel="stylesheet"
|
||
/>
|
||
<link rel="stylesheet" href="./assets/site.css" />
|
||
<link rel="stylesheet" href="./assets/site.more.css" />
|
||
</head>
|
||
<body>
|
||
<a class="skip" href="#main">Skip to content</a>
|
||
|
||
<div class="bg" aria-hidden="true">
|
||
<div class="bg__mesh"></div>
|
||
<div class="bg__grid"></div>
|
||
<div class="bg__grain"></div>
|
||
</div>
|
||
|
||
<header class="top">
|
||
<div class="wrap top__row">
|
||
<a class="brand" href="/">
|
||
<span class="brand__mark" aria-hidden="true"></span>
|
||
<span class="brand__name">gog</span>
|
||
<span class="brand__tag">gogcli</span>
|
||
</a>
|
||
<nav class="nav">
|
||
<a href="#install">Install</a>
|
||
<a href="#quickstart">Quickstart</a>
|
||
<a href="#features">Features</a>
|
||
<a href="#examples">Examples</a>
|
||
<a class="nav__cta" href="https://github.com/steipete/gogcli">GitHub</a>
|
||
</nav>
|
||
</div>
|
||
</header>
|
||
|
||
<main id="main" class="main">
|
||
<section class="hero">
|
||
<div class="wrap hero__grid">
|
||
<div class="hero__copy">
|
||
<p class="kicker">Google Workspace. One binary.</p>
|
||
<h1>
|
||
<span class="hero__word">Google</span>
|
||
<span class="hero__word">in your</span>
|
||
<span class="hero__word hero__word--mono">terminal</span>
|
||
</h1>
|
||
<p class="lede">
|
||
<strong>gog</strong> unifies Gmail, Calendar, Drive, Contacts, Tasks, Sheets, Docs, Slides, and People
|
||
under one CLI — with JSON output and sane defaults.
|
||
</p>
|
||
|
||
<div class="pills" aria-label="Supported services">
|
||
<span class="pill pill--b">Gmail</span>
|
||
<span class="pill pill--g">Calendar</span>
|
||
<span class="pill pill--r">Drive</span>
|
||
<span class="pill pill--y">Contacts</span>
|
||
<span class="pill pill--g">Tasks</span>
|
||
<span class="pill pill--g">Sheets</span>
|
||
<span class="pill pill--b">Docs</span>
|
||
<span class="pill pill--r">Slides</span>
|
||
<span class="pill pill--y">People</span>
|
||
</div>
|
||
|
||
<div class="hero__actions">
|
||
<a class="btn btn--primary" href="#install">Install</a>
|
||
<a class="btn btn--ghost" href="https://github.com/steipete/gogcli#quick-start">Readme</a>
|
||
</div>
|
||
|
||
<p class="note">
|
||
Tip: set a default in <code>gog auth manage</code> or export <code>GOG_ACCOUNT=you@gmail.com</code> once, stop repeating <code>--account</code>.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="hero__panel">
|
||
<div class="card term" role="region" aria-label="Terminal demo">
|
||
<div class="term__bar" aria-hidden="true">
|
||
<span class="dots">
|
||
<span class="dot dot--r"></span>
|
||
<span class="dot dot--y"></span>
|
||
<span class="dot dot--g"></span>
|
||
</span>
|
||
<span class="term__title">gogcli.sh</span>
|
||
</div>
|
||
<div class="term__body">
|
||
<pre class="term__pre"><code id="demo">
|
||
$ brew install gogcli
|
||
$ gog auth credentials ~/Downloads/client_secret.json
|
||
$ gog auth add you@gmail.com
|
||
|
||
$ export GOG_ACCOUNT=you@gmail.com
|
||
$ gog gmail labels list
|
||
$ gog calendar calendars --max 5 --json | jq '.calendars[].summary'
|
||
$ gog drive ls --query "mimeType='application/pdf'" --max 3
|
||
</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card meta">
|
||
<div class="meta__item">
|
||
<div class="meta__k">Output</div>
|
||
<div class="meta__v">tables / <code>--plain</code> / <code>--json</code></div>
|
||
</div>
|
||
<div class="meta__item">
|
||
<div class="meta__k">Accounts</div>
|
||
<div class="meta__v">multi-account + <code>gog auth manage</code></div>
|
||
</div>
|
||
<div class="meta__item">
|
||
<div class="meta__k">Secrets</div>
|
||
<div class="meta__v">OS keyring (Keychain / Secret Service / CredMan)</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="install" class="section">
|
||
<div class="wrap section__grid">
|
||
<div>
|
||
<h2>Install</h2>
|
||
<p class="muted">Homebrew, or build from source.</p>
|
||
</div>
|
||
|
||
<div class="cols">
|
||
<div class="card block">
|
||
<h3>Homebrew</h3>
|
||
<pre class="code"><code>brew install gogcli</code></pre>
|
||
</div>
|
||
<div class="card block">
|
||
<h3>From source</h3>
|
||
<pre class="code"><code>git clone https://github.com/steipete/gogcli.git
|
||
cd gogcli
|
||
make
|
||
./bin/gog --help</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="quickstart" class="section">
|
||
<div class="wrap section__grid">
|
||
<div>
|
||
<h2>Quickstart</h2>
|
||
<p class="muted">
|
||
You’ll need a Google Cloud “Desktop app” OAuth client JSON once. Then you can keep adding accounts.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="steps">
|
||
<div class="step">
|
||
<div class="step__n">1</div>
|
||
<div class="step__b">
|
||
<h3>Store credentials</h3>
|
||
<p>Save your downloaded client JSON into gog’s config.</p>
|
||
<pre class="code"><code>gog auth credentials ~/Downloads/client_secret_....json</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step__n">2</div>
|
||
<div class="step__b">
|
||
<h3>Authorize an account</h3>
|
||
<p>Browser flow by default. Use <code>--manual</code> for headless.</p>
|
||
<pre class="code"><code>gog auth add you@gmail.com</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="step__n">3</div>
|
||
<div class="step__b">
|
||
<h3>Run commands</h3>
|
||
<p>Use <code>--json</code> for scripting.</p>
|
||
<pre class="code"><code>export GOG_ACCOUNT=you@gmail.com
|
||
gog gmail search 'newer_than:7d' --max 10 --json | jq</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="callout">
|
||
<div class="callout__icon" aria-hidden="true"></div>
|
||
<div class="callout__body">
|
||
<h3>Re-auth a service (e.g. Sheets)</h3>
|
||
<p>
|
||
If you add scopes later and Google doesn’t return a refresh token, re-run with
|
||
<code>--force-consent</code>.
|
||
</p>
|
||
<pre class="code"><code>gog auth add you@gmail.com --services sheets --force-consent</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="features" class="section">
|
||
<div class="wrap section__grid">
|
||
<div>
|
||
<h2>Features</h2>
|
||
<p class="muted">High leverage commands, consistent UX, and clean output.</p>
|
||
</div>
|
||
<div class="grid">
|
||
<div class="card feat">
|
||
<h3>Gmail</h3>
|
||
<p>Search threads, send mail, manage labels, drafts, filters, settings, and watch (Pub/Sub push).</p>
|
||
</div>
|
||
<div class="card feat">
|
||
<h3>Calendar</h3>
|
||
<p>List/create/update events, respond to invites, detect conflicts, and check free/busy.</p>
|
||
</div>
|
||
<div class="card feat">
|
||
<h3>Drive</h3>
|
||
<p>List/search/upload/download, export Docs formats, permissions, folders, URLs.</p>
|
||
</div>
|
||
<div class="card feat">
|
||
<h3>Sheets / Docs / Slides</h3>
|
||
<p>Read/write Sheets; export Docs/Slides/Sheets to PDF/DOCX/PPTX/XLSX/CSV via Drive.</p>
|
||
</div>
|
||
<div class="card feat">
|
||
<h3>Contacts / People</h3>
|
||
<p>Personal contacts, “other contacts”, Workspace directory, and your profile.</p>
|
||
</div>
|
||
<div class="card feat">
|
||
<h3>Tasks</h3>
|
||
<p>Tasklists + tasks: add/update/done/undo/delete/clear with paging and JSON output.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="examples" class="section">
|
||
<div class="wrap section__grid">
|
||
<div>
|
||
<h2>Examples</h2>
|
||
<p class="muted">A few commands you’ll actually use.</p>
|
||
</div>
|
||
<div class="cols">
|
||
<div class="card block">
|
||
<h3>Find unread mail</h3>
|
||
<pre class="code"><code>gog gmail search 'is:unread newer_than:7d' --max 20</code></pre>
|
||
<p class="muted">Pipe JSON to jq for scripts.</p>
|
||
<pre class="code"><code>gog gmail search 'newer_than:7d' --max 50 --json | jq '.threads[] | .subject'</code></pre>
|
||
</div>
|
||
<div class="card block">
|
||
<h3>Export a Sheet as PDF</h3>
|
||
<pre class="code"><code>gog sheets export <spreadsheetId> --format pdf --out ./sheet.pdf</code></pre>
|
||
<p class="muted">Docs and Slides are similar.</p>
|
||
<pre class="code"><code>gog docs export <docId> --format docx --out ./doc.docx
|
||
gog slides export <presentationId> --format pptx --out ./deck.pptx</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="footerline">
|
||
<a class="btn btn--primary" href="https://github.com/steipete/gogcli">Go to GitHub</a>
|
||
<a class="btn btn--ghost" href="https://github.com/steipete/gogcli/blob/main/CHANGELOG.md">Changelog</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
<footer class="sitefoot">
|
||
<div class="wrap sitefoot__row">
|
||
<div class="sitefoot__left">
|
||
<div class="sitefoot__brand">
|
||
<span class="brand__mark brand__mark--small" aria-hidden="true"></span>
|
||
<span>gog</span>
|
||
</div>
|
||
<div class="sitefoot__small">
|
||
<span>Built by <a href="https://steipete.me">Peter Steinberger</a>.</span>
|
||
<span class="sep" aria-hidden="true">·</span>
|
||
<a href="https://github.com/steipete/gogcli/blob/main/LICENSE">MIT</a>
|
||
</div>
|
||
</div>
|
||
<div class="sitefoot__right">
|
||
<a href="https://github.com/steipete/gogcli">Source</a>
|
||
<a href="https://github.com/steipete/gogcli#installation">Install</a>
|
||
<a href="https://github.com/steipete/gogcli#commands">Commands</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="wrap sitefoot__fineprint">
|
||
<span>Not affiliated with Google. Google is a trademark of Google LLC.</span>
|
||
</div>
|
||
</footer>
|
||
|
||
<script src="./assets/site.js"></script>
|
||
</body>
|
||
</html>
|