Commit
Message
Changed Files (13)
-
added .abbaye/theme/git_blob.html.j2
diff --git a/.abbaye/theme/git_blob.html.j2 b/.abbaye/theme/git_blob.html.j2 new file mode 100644 index 0000000..ec77c10 --- /dev/null +++ b/.abbaye/theme/git_blob.html.j2 @@ -0,0 +1,38 @@ +<!doctype html> +<html lang="{{ lang | default(value='en') }}"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{{ project_name }} — {{ filename }}</title> + <link rel="stylesheet" href="{{ root_path }}static/site.css" /> +</head> +<body> + <header> + <a href="{{ root_path }}" class="site-title">{{ project_name }}</a> + <nav> + <a href="{{ root_path }}repository/index.html">Log</a> + <a href="{{ root_path }}repository/refs.html">Refs</a> + </nav> + </header> + <main> + <nav class="breadcrumb"> + {% for crumb in breadcrumbs %} + {% if not loop.last %}<span class="breadcrumb-sep">/</span>{% endif %} + {% if crumb.url %}<a href="{{ crumb.url }}">{{ crumb.name | escape }}</a>{% else %}<span>{{ crumb.name | escape }}</span>{% endif %} + {% endfor %} + </nav> + + <p class="tree-rev">at <a class="hash" href="{{ commit_url }}">{{ commit_hash_short }}</a></p> + + {% if is_binary %} + <p class="blob-notice">Binary file ({{ size }} bytes)</p> + {% elif too_large %} + <p class="blob-notice">File too large to display ({{ size }} bytes)</p> + {% elif content_html %} + <div class="blob-content">{{ content_html | safe }}</div> + {% else %} + <p class="blob-notice">Empty file</p> + {% endif %} + </main> +</body> +</html> -
added .abbaye/theme/git_commit.html.j2
diff --git a/.abbaye/theme/git_commit.html.j2 b/.abbaye/theme/git_commit.html.j2 new file mode 100644 index 0000000..246ab98 --- /dev/null +++ b/.abbaye/theme/git_commit.html.j2 @@ -0,0 +1,65 @@ +<!doctype html> +<html lang="{{ lang | default(value='en') }}"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{{ project_name }} — {{ commit.hash_short }}</title> + <link rel="stylesheet" href="{{ root_path }}static/site.css" /> +</head> +<body> + <header> + <a href="{{ root_path }}" class="site-title">{{ project_name }}</a> + <a href="../index.html">← Log</a> + <nav> + <a href="../index.html">Log</a> + <a href="../refs.html">Refs</a> + </nav> + </header> + <main> + <h2 class="section-heading">Commit{% if has_browse %} <a class="hash" href="../browse/{{ commit.hash }}/">browse files</a>{% endif %}</h2> + <div class="commit-meta"> + <dl> + <dt>Hash</dt> + <dd><span class="hash-full">{{ commit.hash }}</span></dd> + <dt>Author</dt> + <dd>{{ commit.author_name }} <{{ commit.author_email }}></dd> + <dt>Date</dt> + <dd><time datetime="{{ commit.date_iso }}">{{ commit.datetime_display }}</time></dd> + {% if commit.parents %} + <dt>Parent{% if commit.parents | length > 1 %}s{% endif %}</dt> + <dd> + {% for p in commit.parents %} + <a class="hash" href="{{ p.hash }}.html">{{ p.hash_short }}</a>{% if not loop.last %} {% endif %} + {% endfor %} + </dd> + {% endif %} + </dl> + </div> + <h2 class="section-heading">Message</h2> + <div class="commit-message">{{ commit.subject }}{% if commit.body %} + +{{ commit.body }}{% endif %}</div> + {% if changed_files %} + <h2 class="section-heading">Changed Files ({{ changed_files | length }})</h2> + <ul class="files-list"> + {% for f in changed_files %} + <li> + <details> + <summary> + <span class="badge badge-{{ f.status }}">{{ f.status }}</span> + <span class="file-path">{{ f.path }}</span> + </summary> + {% if f.diff_lines %} + <table class="diff-table"><tbody> + {% for line in f.diff_lines %}<tr class="diff-{{ line.kind }}"><td class="diff-cell">{{ line.content }}</td></tr> + {% endfor %} + </tbody></table> + {% endif %} + </details> + </li> + {% endfor %} + </ul> + {% endif %} + </main> +</body> +</html> -
added .abbaye/theme/git_log.html.j2
diff --git a/.abbaye/theme/git_log.html.j2 b/.abbaye/theme/git_log.html.j2 new file mode 100644 index 0000000..088ec5f --- /dev/null +++ b/.abbaye/theme/git_log.html.j2 @@ -0,0 +1,63 @@ +<!doctype html> +<html lang="{{ lang | default(value='en') }}"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{{ project_name }} — {{ current_branch }}</title> + <link rel="stylesheet" href="{{ root_path }}static/site.css" /> +</head> +<body> + <header> + <a href="{{ root_path }}" class="site-title">{{ project_name }}</a> + <nav> + <a href="index.html" class="active">Log</a> + <a href="refs.html">Refs</a> + </nav> + </header> + <main> + {% if clone_url %} + <div class="clone-box"> + <span class="clone-label">Clone</span> + <span class="clone-url">git clone {{ clone_url }}</span> + </div> + {% endif %} + + {% if branch_nav | length > 1 %} + <div class="branch-switcher"> + {% for b in branch_nav %} + <a href="{{ b.filename }}"{% if b.is_current %} class="active"{% endif %}>{{ b.short_name }}</a> + {% endfor %} + </div> + {% endif %} + + <h2 class="section-heading">{{ current_branch }}</h2> + <table> + <thead> + <tr> + <th>Hash</th> + <th>Subject</th> + <th>Author</th> + <th>Date</th> + </tr> + </thead> + <tbody> + {% for commit in commits %} + <tr> + <td class="commit-hash-cell"> + <a class="hash" href="commit/{{ commit.hash }}.html">{{ commit.hash_short }}</a>{% for badge in commit.ref_badges %}<span class="ref-badge ref-badge-{{ badge.kind }}">{{ badge.label }}</span>{% endfor %} + </td> + <td>{{ commit.subject }}</td> + <td>{{ commit.author_name }}</td> + <td><time datetime="{{ commit.date_iso }}">{{ commit.date }}</time></td> + </tr> + {% endfor %} + </tbody> + </table> + {% if truncated %} + <p style="margin-top:1rem; font-size:0.85rem; color:var(--text-muted);"> + Showing the {{ commits | length }} most recent commits. + </p> + {% endif %} + </main> +</body> +</html> -
added .abbaye/theme/git_refs.html.j2
diff --git a/.abbaye/theme/git_refs.html.j2 b/.abbaye/theme/git_refs.html.j2 new file mode 100644 index 0000000..e4ff242 --- /dev/null +++ b/.abbaye/theme/git_refs.html.j2 @@ -0,0 +1,53 @@ +<!doctype html> +<html lang="{{ lang | default(value='en') }}"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{{ project_name }} — Refs</title> + <link rel="stylesheet" href="{{ root_path }}static/site.css" /> +</head> +<body> + <header> + <a href="{{ root_path }}" class="site-title">{{ project_name }}</a> + <nav> + <a href="index.html">Log</a> + <a href="refs.html" class="active">Refs</a> + </nav> + </header> + <main> + {% if tags %} + <h2 class="section-heading">Tags</h2> + <table> + <thead><tr><th>Tag</th><th>Hash</th></tr></thead> + <tbody> + {% for ref in tags %} + <tr id="tag-{{ ref.short_name }}"> + <td><span class="ref-kind-tag">{{ ref.short_name | escape }}</span></td> + <td><a class="hash" href="commit/{{ ref.hash }}.html">{{ ref.hash_short }}</a></td> + </tr> + {% endfor %} + </tbody> + </table> + {% endif %} + + {% if branches %} + <h2 class="section-heading">Branches</h2> + <table> + <thead><tr><th>Branch</th><th>Hash</th></tr></thead> + <tbody> + {% for ref in branches %} + <tr> + <td><span class="ref-kind-branch">{{ ref.short_name }}</span></td> + <td><a class="hash" href="commit/{{ ref.hash }}.html">{{ ref.hash_short }}</a></td> + </tr> + {% endfor %} + </tbody> + </table> + {% endif %} + + {% if not tags and not branches %} + <p style="color: var(--text-muted);">No refs found.</p> + {% endif %} + </main> +</body> +</html> -
added .abbaye/theme/git_tree.html.j2
diff --git a/.abbaye/theme/git_tree.html.j2 b/.abbaye/theme/git_tree.html.j2 new file mode 100644 index 0000000..27fe6fc --- /dev/null +++ b/.abbaye/theme/git_tree.html.j2 @@ -0,0 +1,45 @@ +<!doctype html> +<html lang="{{ lang | default(value='en') }}"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{{ project_name }} — {{ dir_path | default(value="~") }}</title> + <link rel="stylesheet" href="{{ root_path }}static/site.css" /> +</head> +<body> + <header> + <a href="{{ root_path }}" class="site-title">{{ project_name }}</a> + <nav> + <a href="{{ root_path }}repository/index.html">Log</a> + <a href="{{ root_path }}repository/refs.html">Refs</a> + </nav> + </header> + <main> + <nav class="breadcrumb"> + {% for crumb in breadcrumbs %} + {% if not loop.last %}<span class="breadcrumb-sep">/</span>{% endif %} + {% if crumb.url %}<a href="{{ crumb.url }}">{{ crumb.name | escape }}</a>{% else %}<span>{{ crumb.name | escape }}</span>{% endif %} + {% endfor %} + </nav> + + <table class="tree-table"> + <tbody> + {% for entry in entries %} + <tr> + <td class="tree-mode tree-mode-{{ entry.kind }}"></td> + <td> + {% if entry.kind == "tree" %} + <a class="tree-entry-tree" href="{{ entry.url }}">{{ entry.name | escape }}/</a> + {% else %} + <a class="tree-entry-blob" href="{{ entry.url }}">{{ entry.name | escape }}</a> + {% endif %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + + <p class="tree-rev">at <a class="hash" href="{{ commit_url }}">{{ commit_hash_short }}</a></p> + </main> +</body> +</html> -
added .abbaye/theme/markdown.html.j2
diff --git a/.abbaye/theme/markdown.html.j2 b/.abbaye/theme/markdown.html.j2 new file mode 100644 index 0000000..0f6f414 --- /dev/null +++ b/.abbaye/theme/markdown.html.j2 @@ -0,0 +1,177 @@ +<!doctype html> +<html lang="en"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>{{ title }}</title> + <style> + :root { + --bg: #f5f0e8; + --text: #292524; + --accent: #d97706; + --border: #a8a29e; + --border-strong: #44403c; + --link: #92400e; + --link-hover-bg: #d97706; + --link-hover-text: #faf6f0; + --meta: #78716c; + --pre-bg: #eae2d4; + --font: "Courier New", Courier, monospace; + } + @media (prefers-color-scheme: dark) { + :root { + --bg: #1c1917; + --text: #faf6f0; + --accent: #fbbf24; + --border: #57534e; + --border-strong: #fbbf24; + --link: #fbbf24; + --link-hover-bg: #fbbf24; + --link-hover-text: #1c1917; + --meta: #a8a29e; + --pre-bg: #292524; + } + } + :root.dark { + --bg: #1c1917; + --text: #faf6f0; + --accent: #fbbf24; + --border: #57534e; + --border-strong: #fbbf24; + --link: #fbbf24; + --link-hover-bg: #fbbf24; + --link-hover-text: #1c1917; + --meta: #a8a29e; + --pre-bg: #292524; + } + :root.light { + --bg: #f5f0e8; + --text: #292524; + --accent: #d97706; + --border: #a8a29e; + --border-strong: #44403c; + --link: #92400e; + --link-hover-bg: #d97706; + --link-hover-text: #faf6f0; + --meta: #78716c; + --pre-bg: #eae2d4; + } + *, + *::before, + *::after { + box-sizing: border-box; + margin: 0; + padding: 0; + } + body { + font-family: var(--font); + background: var(--bg); + color: var(--text); + line-height: 1.6; + transition: background 0.2s, color 0.2s; + } + main { + max-width: 860px; + margin: 2.5rem auto; + padding: 0 1.5rem 4rem; + } + main h1, + main h2, + main h3, + main h4, + main h5, + main h6 { + margin-top: 1.5em; + margin-bottom: 0.5em; + line-height: 1.3; + color: var(--text); + } + main h1 { + font-size: 1.5rem; + border-bottom: 2px solid var(--border-strong); + padding-bottom: 0.4rem; + } + main h2 { + font-size: 1.2rem; + border-bottom: 1px solid var(--border); + padding-bottom: 0.3rem; + } + main h3 { + font-size: 1.05rem; + } + main p { + margin-bottom: 1em; + } + main a { + color: var(--link); + text-decoration: underline; + transition: color 0.15s, background 0.15s; + } + main a:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); + } + main img { + max-width: 100%; + height: auto; + } + main pre { + background: var(--pre-bg); + border: 1px solid var(--border); + padding: 1em 1.25em; + overflow-x: auto; + margin-bottom: 1em; + font-size: 0.85em; + } + main code { + font-family: var(--font); + background: var(--pre-bg); + padding: 0.15em 0.4em; + font-size: 0.85em; + } + main pre code { + background: none; + padding: 0; + font-size: inherit; + } + main ul, + main ol { + padding-left: 1.5em; + margin-bottom: 1em; + } + main li { + margin-bottom: 0.2em; + } + main table { + border-collapse: collapse; + margin-bottom: 1em; + width: 100%; + } + main th, + main td { + border: 1px solid var(--border); + padding: 0.35em 0.75em; + text-align: left; + } + main th { + font-weight: bold; + } + main blockquote { + border-left: 3px solid var(--border); + padding: 0.5em 1em; + margin: 0 0 1em; + color: var(--meta); + } + .content { + padding: 1.5rem 0; + } + </style> +</head> +<body> + <main> + <div class="content"> + {{ content | safe }} + </div> + </main> +</body> +</html> -
added .abbaye/theme/root_index.html.j2
diff --git a/.abbaye/theme/root_index.html.j2 b/.abbaye/theme/root_index.html.j2 new file mode 100644 index 0000000..647c66b --- /dev/null +++ b/.abbaye/theme/root_index.html.j2 @@ -0,0 +1,66 @@ +<!doctype html> +<html prefix="og: https://ogp.me/ns#" lang="{{lang|default(value='en')}}"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + {% if config.site.fediverse_creator %}<meta name="fediverse:creator" content="{{ config.site.fediverse_creator }}" />{% endif %} + {% if config.site.opengraph %} + <meta property="og:title" content="{{ project_name }}" /> + <meta property="og:type" content="{{ config.site.opengraph.type|default(value='website') }}" /> + <meta property="og:image" content="{{ config.site.base_url }}/{{ config.site.opengraph.image }}" /> + {% if config.site.opengraph.image_alt_text %} + <meta property="og:image:alt" content="{{ config.site.opengraph.image_alt_text }}" /> + {% endif %} + <meta property="og:url" content="{{ config.site.opengraph.url|default(value=config.site.base_url)|safe }}" /> + <meta property="og:site_name" content="{{ project_name }}" /> + {% if config.site.opengraph.description %} + <meta property="og:description" content="{{ config.site.opengraph.description }}" /> + {% endif %} + {% endif %} + <title>{{ project_name }}</title> + <link + rel="alternate" + type="application/atom+xml" + title="{{ project_name }} Releases" + href="{{ atom_feed }}" + /> + <link rel="stylesheet" href="static/site.css" /> + </head> + <body> + <header> + <h1>{{ project_name }}</h1> + <a class="feed-link" href="{{ atom_feed }}"> + <span class="feed-icon" aria-hidden="true"></span> + Atom feed + </a> + </header> + <main class="versions-main"> + <h2 class="section-heading">Versions</h2> + <ul class="versions-list"> + {% for v in versions %} + <li> + <a class="version-link" href="{{ v.version }}/" + >{{ v.version }}</a + > + {% if loop.first %}<span class="badge-latest"><a href="latest">latest</a></span> + {% endif %} {% if v.date %}<time + class="version-date" + datetime="{{ v.date }}" + >{{ v.date }}</time + >{% endif %} + </li> + {% endfor %} + </ul> + {% if git_ui_enabled %} + <h2 class="section-heading">Repository</h2> + {% if git_ui_clone_url %} + <div class="clone-box"> + <span class="clone-label">Clone</span> + <span class="clone-url">git clone {{ git_ui_clone_url }} {{ project_name }}</span> + </div> + {% endif %} + <p class="repo-browse-link"><a href="repository/">Browse source →</a></p> + {% endif %} + </main> + </body> +</html> -
added .abbaye/theme/static/site.css
diff --git a/.abbaye/theme/static/site.css b/.abbaye/theme/static/site.css new file mode 100644 index 0000000..21ca1c1 --- /dev/null +++ b/.abbaye/theme/static/site.css @@ -0,0 +1,923 @@ +/* SearchHub theme for Abbaye -- monospace, earthy, dark mode */ +:root { + --bg: #f5f0e8; + --text: #292524; + --accent: #d97706; + --border: #a8a29e; + --border-strong: #44403c; + --input-bg: #faf6f0; + --btn-bg: #44403c; + --btn-text: #faf6f0; + --link: #92400e; + --link-hover-bg: #d97706; + --link-hover-text: #faf6f0; + --meta: #78716c; + --url: #78716c; + --desc: #57534e; + --dotted: #d6d3d1; + --footer: #a8a29e; + --pre-bg: #eae2d4; + --bg-alt: #ede5d8; + --bg-content: #fdfaf5; + --hash-bg: #eae2d4; + --font: "Courier New", Courier, monospace; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #1c1917; + --text: #faf6f0; + --accent: #fbbf24; + --border: #57534e; + --border-strong: #fbbf24; + --input-bg: #292524; + --btn-bg: #fbbf24; + --btn-text: #1c1917; + --link: #fbbf24; + --link-hover-bg: #fbbf24; + --link-hover-text: #1c1917; + --meta: #a8a29e; + --url: #a8a29e; + --desc: #d6d3d1; + --dotted: #57534e; + --footer: #78716c; + --pre-bg: #292524; + --bg-alt: #292524; + --bg-content: #1c1917; + --hash-bg: #292524; + } +} + +:root.dark { + --bg: #1c1917; + --text: #faf6f0; + --accent: #fbbf24; + --border: #57534e; + --border-strong: #fbbf24; + --input-bg: #292524; + --btn-bg: #fbbf24; + --btn-text: #1c1917; + --link: #fbbf24; + --link-hover-bg: #fbbf24; + --link-hover-text: #1c1917; + --meta: #a8a29e; + --url: #a8a29e; + --desc: #d6d3d1; + --dotted: #57534e; + --footer: #78716c; + --pre-bg: #292524; + --bg-alt: #292524; + --bg-content: #1c1917; + --hash-bg: #292524; +} + +:root.light { + --bg: #f5f0e8; + --text: #292524; + --accent: #d97706; + --border: #a8a29e; + --border-strong: #44403c; + --input-bg: #faf6f0; + --btn-bg: #44403c; + --btn-text: #faf6f0; + --link: #92400e; + --link-hover-bg: #d97706; + --link-hover-text: #faf6f0; + --meta: #78716c; + --url: #78716c; + --desc: #57534e; + --dotted: #d6d3d1; + --footer: #a8a29e; + --pre-bg: #eae2d4; + --bg-alt: #ede5d8; + --bg-content: #fdfaf5; + --hash-bg: #eae2d4; +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: var(--font); + background: var(--bg); + color: var(--text); + line-height: 1.6; + transition: background 0.2s, color 0.2s; +} + +/* ── Header ─────────────────────────────────────────────────────── */ +header { + display: flex; + justify-content: space-between; + align-items: flex-end; + font-size: 0.85rem; + text-transform: uppercase; + letter-spacing: 0.15em; + margin-bottom: 2rem; + border-bottom: 3px solid var(--border-strong); + padding-bottom: 0.5rem; + background: none; + color: var(--text); + flex-wrap: wrap; + gap: 0.5rem; +} +header .site-title { + font-weight: bold; + font-size: 0.85rem; + color: var(--text); + text-decoration: underline; + text-decoration-color: transparent; + transition: text-decoration-color 0.15s; +} +header .site-title:hover, +header .title:hover { + text-decoration-color: var(--accent); +} +header .title { + font-weight: bold; + font-size: 0.85rem; + color: var(--text); +} +header a { + color: var(--link); + text-decoration: underline; + font-size: 0.8rem; + transition: background 0.1s, color 0.1s; +} +header a:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} +header nav { + display: flex; + gap: 0.75rem; + margin-left: auto; +} +header nav a { + color: var(--link); + font-size: 0.7rem; + padding: 0.2rem 0.4rem; + text-transform: uppercase; + letter-spacing: 0.1em; +} +header nav a.active { + color: var(--accent); + font-weight: bold; +} +header h1 { + font-size: 0.85rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.15em; + color: var(--text); +} + +/* ── Layout ─────────────────────────────────────────────────────── */ +main { + max-width: 960px; + margin: 2rem auto; + padding: 0 1.5rem; +} + +/* ── Tables ─────────────────────────────────────────────────────── */ +table { + width: 100%; + border-collapse: collapse; + font-size: 0.85rem; +} +thead th { + text-align: left; + padding: 0.5rem 0.75rem; + font-size: 0.7rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--meta); + border-bottom: 2px solid var(--border-strong); +} +tbody tr { + border-bottom: 1px dotted var(--dotted); +} +tbody tr:last-child { + border-bottom: none; +} +tbody tr:hover { + background: var(--bg-alt); +} +tbody td { + padding: 0.5rem 0.75rem; + vertical-align: middle; +} + +/* ── Monospace hash badges ───────────────────────────────────────── */ +.hash { + font-family: var(--font); + font-size: 0.75rem; + background: var(--hash-bg); + border: 1px solid var(--border); + padding: 0.15em 0.5em; + color: var(--text); + text-decoration: none; + white-space: nowrap; + transition: border-color 0.15s, color 0.15s; +} +a.hash:hover { + border-color: var(--accent); + color: var(--accent); +} + +/* ── Status badges ───────────────────────────────────────────────── */ +.badge { + font-size: 0.6rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.08em; + padding: 0.15em 0.5em; + border: 1px solid; + white-space: nowrap; +} +.badge-added { + background: transparent; + color: #2a6a2a; + border-color: #2a6a2a; +} +.badge-deleted { + background: transparent; + color: #6a2a2a; + border-color: #6a2a2a; +} +.badge-modified { + background: transparent; + color: #6a4a2a; + border-color: #6a4a2a; +} +.badge-renamed { + background: transparent; + color: #2a3a6a; + border-color: #2a3a6a; +} +.badge-copied { + background: transparent; + color: #4a2a6a; + border-color: #4a2a6a; +} +.badge-changed { + border-color: var(--border); + color: var(--meta); +} + +/* ── Clone instruction box ───────────────────────────────────────── */ +.clone-box { + border: 1px solid var(--border); + padding: 0.6rem 0.8rem; + margin-bottom: 1.5rem; + display: flex; + align-items: center; + gap: 0.75rem; + flex-wrap: wrap; +} +.clone-label { + font-size: 0.7rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--meta); + flex-shrink: 0; +} +.clone-url { + font-family: var(--font); + font-size: 0.8rem; + color: var(--text); + flex: 1; + overflow-x: auto; +} + +/* ── Section headings ────────────────────────────────────────────── */ +.section-heading { + font-size: 0.7rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--meta); + margin-bottom: 0.75rem; + margin-top: 2rem; + padding-bottom: 0.35rem; + border-bottom: 1px solid var(--dotted); +} +.section-heading:first-child { + margin-top: 0; +} + +/* ── Commit detail ───────────────────────────────────────────────── */ +.commit-meta { + border: 1px solid var(--border); + padding: 0.8rem 1rem; + margin-bottom: 1.5rem; + font-size: 0.8rem; +} +.commit-meta dl { + display: grid; + grid-template-columns: max-content 1fr; + gap: 0.3rem 1rem; +} +.commit-meta dt { + color: var(--meta); + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 0.06em; + display: flex; + align-items: center; +} +.hash-full { + font-family: var(--font); + font-size: 0.75rem; + word-break: break-all; +} +.commit-message { + background: var(--pre-bg); + border: 1px solid var(--border); + padding: 0.8rem 1rem; + font-family: var(--font); + font-size: 0.8rem; + white-space: pre-wrap; + word-break: break-word; + margin-bottom: 1.5rem; +} + +/* ── Changed-files list ──────────────────────────────────────────── */ +.files-list { + list-style: none; + display: flex; + flex-direction: column; + gap: 0.35rem; +} +.files-list li { + border: 1px solid var(--border); +} +.files-list details > summary { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.35rem 0.5rem; + cursor: pointer; + list-style: none; + user-select: none; +} +.files-list details > summary::-webkit-details-marker { + display: none; +} +.files-list details[open] > summary { + border-bottom: 1px solid var(--border); +} +.files-list details > summary:hover { + background: var(--bg-alt); +} +.file-path { + font-family: var(--font); + font-size: 0.8rem; + flex: 1; +} + +/* ── Diff table ───────────────────────────────────────────────────── */ +.diff-table { + width: 100%; + border-collapse: collapse; + font-family: var(--font); + font-size: 0.75rem; + line-height: 1.45; +} +.diff-cell { + padding: 0 0.75em; + white-space: pre; + overflow-x: visible; +} +.diff-table thead th, +.diff-table tbody tr { + border-bottom: none; +} +.diff-table tbody tr:hover { + background: inherit; +} +.diff-table tbody tr:last-child { + border-bottom: none; +} +tr.diff-header td { + color: var(--meta); +} +tr.diff-hunk td { + background: #eef2ff; + color: #2a3a7a; +} +tr.diff-added td { + background: #e8f8e8; + color: #1a4a1a; +} +tr.diff-removed td { + background: #fce8e8; + color: #5a1818; +} +tr.diff-context td { + color: var(--text); +} + +:root.dark tr.diff-hunk td { + background: #1a1a3a; + color: #8888cc; +} +:root.dark tr.diff-added td { + background: #0a2a0a; + color: #66cc66; +} +:root.dark tr.diff-removed td { + background: #2a0a0a; + color: #cc6666; +} +@media (prefers-color-scheme: dark) { + tr.diff-hunk td { background: #1a1a3a; color: #8888cc; } + tr.diff-added td { background: #0a2a0a; color: #66cc66; } + tr.diff-removed td { background: #2a0a0a; color: #cc6666; } +} + +/* ── Ref badges (commit log) ────────────────────────────────────────────── */ +.commit-hash-cell { + white-space: nowrap; +} +.ref-badge { + display: inline-block; + font-size: 0.6rem; + font-weight: bold; + padding: 0.1em 0.4em; + border: 1px solid; + white-space: nowrap; + vertical-align: middle; + margin-left: 0.35em; + text-decoration: none; + line-height: 1.4; + font-family: var(--font); +} +.ref-badge-tag { + background: transparent; + color: #2d6a2d; + border-color: #2d6a2d; +} +.ref-badge-branch { + background: transparent; + color: #2a3a6a; + border-color: #2a3a6a; +} + +:root.dark .ref-badge-tag { + color: #66cc66; + border-color: #66cc66; +} +:root.dark .ref-badge-branch { + color: #6688cc; + border-color: #6688cc; +} +@media (prefers-color-scheme: dark) { + .ref-badge-tag { color: #66cc66; border-color: #66cc66; } + .ref-badge-branch { color: #6688cc; border-color: #6688cc; } +} + +/* ── Branch switcher (log page nav) ─────────────────────────────────────── */ +.branch-switcher { + display: flex; + flex-wrap: wrap; + gap: 0.35rem; + margin-bottom: 1.25rem; +} +.branch-switcher a { + font-size: 0.7rem; + padding: 0.2rem 0.5rem; + border: 1px solid var(--border); + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--link); + text-decoration: underline; + text-decoration-color: transparent; + transition: border-color 0.15s, color 0.15s, background 0.15s; +} +.branch-switcher a:hover { + border-color: var(--accent); + background: var(--link-hover-bg); + color: var(--link-hover-text); +} +.branch-switcher a.active { + border-color: var(--accent); + background: var(--accent); + color: var(--btn-text); +} + +/* ── Ref colours ─────────────────────────────────────────────────────────── */ +.ref-kind-tag { + color: var(--accent); +} +.ref-kind-branch { + color: #336699; +} + +:root.dark .ref-kind-branch { + color: #6699cc; +} +@media (prefers-color-scheme: dark) { + .ref-kind-branch { color: #6699cc; } +} + +/* ── Links ───────────────────────────────────────────────────────── */ +a { + color: var(--link); + text-decoration: underline; + transition: color 0.15s, background 0.15s; +} +a:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} + +/* ── Responsive ──────────────────────────────────────────────────── */ +@media (max-width: 640px) { + main { + padding: 0 1rem; + margin: 1rem auto; + } + .commit-meta dl { + grid-template-columns: 1fr; + } + .clone-box { + flex-direction: column; + align-items: flex-start; + } +} + +/* ── Root index (versions list) page ─────────────────────────────── */ + +/* Atom/RSS feed link shown in the header */ +.feed-link { + display: flex; + align-items: center; + gap: 0.4em; + color: var(--link); + text-decoration: underline; + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 0.1em; +} +.feed-link:hover { + color: var(--accent); +} +.feed-icon { + display: inline-block; + width: 1em; + height: 1em; + flex-shrink: 0; + background: #f96b15; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='3' cy='13' r='2' fill='white'/%3E%3Cpath d='M3 6.5A6.5 6.5 0 0 1 9.5 13' stroke='white' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3Cpath d='M3 2A11 11 0 0 1 14 13' stroke='white' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center; + background-size: 80%; +} + +/* Versions list main area */ +.versions-main { + max-width: 760px; + margin: 2.5rem auto; + padding: 0 1.5rem; +} +.versions-list { + list-style: none; +} +.versions-list li { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.6rem 0.8rem; + border: 1px solid var(--border); + margin-bottom: 0.5rem; + transition: border-color 0.15s; +} +.versions-list li:hover { + border-color: var(--accent); +} +a.version-link { + font-size: 0.9rem; + font-weight: bold; + color: var(--link); + text-decoration: underline; +} +a.version-link:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} +.badge-latest { + font-size: 0.6rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.08em; + border: 1px solid var(--accent); + color: var(--accent); + padding: 0.15em 0.5em; +} +.badge-latest a { + color: inherit; + text-decoration: none; +} +.badge-latest a:hover { + background: var(--accent); + color: var(--btn-text); +} +.version-date { + margin-left: auto; + font-size: 0.75rem; + color: var(--meta); + font-variant-numeric: tabular-nums; +} +.repo-browse-link { + margin-top: 0.75rem; + font-size: 0.85rem; +} + +/* ── Version release page ────────────────────────────────────────── */ + +.release-layout { + display: flex; + min-height: calc(100vh - 44px); +} + +aside { + width: 230px; + flex-shrink: 0; + border-right: 1px solid var(--border); + padding: 1.5rem 1rem; + font-size: 0.8rem; +} +aside h3 { + font-size: 0.65rem; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--meta); + margin-top: 1.5rem; + margin-bottom: 0.5rem; +} +aside h3:first-child { + margin-top: 0; +} +aside ul { + list-style: none; +} +aside li { + padding: 0.2rem 0; +} +aside a { + color: var(--link); + text-decoration: underline; +} +aside a:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} + +.release-content { + flex: 1; + padding: 2rem 2.5rem; + max-width: 860px; + overflow-x: hidden; + margin: 0; +} + +/* Markdown typography inside the release content pane */ +.release-content h1, +.release-content h2, +.release-content h3, +.release-content h4, +.release-content h5, +.release-content h6 { + margin-top: 1.5em; + margin-bottom: 0.5em; + line-height: 1.3; + color: var(--text); +} +.release-content h1 { + font-size: 1.5rem; + border-bottom: 2px solid var(--border-strong); + padding-bottom: 0.4rem; +} +.release-content h2 { + font-size: 1.2rem; + border-bottom: 1px solid var(--dotted); + padding-bottom: 0.3rem; +} +.release-content h3 { + font-size: 1.05rem; +} +.release-content p { + margin-bottom: 1em; +} +.release-content a { + color: var(--link); +} +.release-content a:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} +.release-content img { + max-width: 100%; + height: auto; +} +.release-content pre { + background: var(--pre-bg); + border: 1px solid var(--border); + padding: 0.8em 1em; + overflow-x: auto; + margin-bottom: 1em; + font-size: 0.85em; +} +.release-content code { + font-family: var(--font); + background: var(--pre-bg); + padding: 0.15em 0.4em; + font-size: 0.85em; +} +.release-content pre code { + background: none; + padding: 0; + font-size: inherit; +} +.release-content ul, +.release-content ol { + padding-left: 1.5em; + margin-bottom: 1em; +} +.release-content li { + margin-bottom: 0.2em; +} +.release-content table { + border-collapse: collapse; + margin-bottom: 1em; + width: 100%; +} +.release-content th, +.release-content td { + border: 1px solid var(--border); + padding: 0.35em 0.75em; + text-align: left; +} +.release-content th { + font-weight: bold; +} +.release-content blockquote { + border-left: 3px solid var(--border); + padding: 0.4em 1em; + margin: 0 0 1em; + color: var(--meta); +} + +/* Dist file metadata in the sidebar */ +.dist-meta { + font-size: 0.7rem; + color: var(--meta); + margin-top: 0.15rem; + word-break: break-all; +} +.dist-meta code { + font-family: var(--font); + font-size: 0.65rem; +} + +/* Changelog section divider and heading */ +.changelog-divider { + border: none; + border-top: 2px solid var(--border-strong); + margin: 2.5rem 0; +} +.changelog-heading { + font-size: 1.2rem; + font-weight: bold; + color: var(--accent); + margin-bottom: 1rem; +} + +@media (max-width: 640px) { + .release-layout { + flex-direction: column; + } + aside { + width: 100%; + border-right: none; + border-bottom: 1px solid var(--border); + } + .release-content { + padding: 1.5rem 1rem; + } +} + +/* ── Tree browser (directory listings and file views) ────────────── */ + +/* ── Breadcrumb ───────────────────────────────────────────────────── */ +.breadcrumb { + font-size: 0.8rem; + color: var(--meta); + margin-bottom: 1rem; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 0.2em; +} +.breadcrumb a { + color: var(--link); + text-decoration: underline; +} +.breadcrumb a:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} +.breadcrumb-sep { + color: var(--border); + margin: 0 0.1em; + user-select: none; +} + +/* ── Revision note ────────────────────────────────────────────────── */ +.tree-rev { + font-size: 0.75rem; + color: var(--meta); + margin-top: 0.5rem; +} + +/* ── Directory listing table ──────────────────────────────────────── */ +.tree-table { + width: 100%; + border-collapse: collapse; + font-size: 0.85rem; +} +.tree-table thead th, +.tree-table tbody tr { + border-bottom: 1px solid var(--dotted); +} +.tree-table tbody tr:last-child { + border-bottom: none; +} +.tree-table tbody tr:hover { + background: var(--bg-alt); +} + +.tree-mode { + width: 1.5rem; + padding: 0.4rem 0.5rem 0.4rem 0.75rem; + color: var(--meta); + font-size: 0.75rem; +} +.tree-mode-tree::before { + content: ">"; +} +.tree-mode-blob::before { + content: "-"; +} + +.tree-table td:last-child { + padding: 0.4rem 0.75rem; +} +a.tree-entry-tree { + color: var(--link); + font-weight: bold; + text-decoration: underline; +} +a.tree-entry-tree:hover { + background: var(--link-hover-bg); + color: var(--link-hover-text); +} +a.tree-entry-blob { + color: var(--text); + text-decoration: underline; + text-decoration-color: transparent; + transition: text-decoration-color 0.15s; +} +a.tree-entry-blob:hover { + color: var(--link); + text-decoration-color: var(--link); +} + +/* ── Blob (file content) ─────────────────────────────────────────── */ +.blob-notice { + font-size: 0.85rem; + color: var(--meta); + padding: 1.5rem 0; +} +.blob-content { + overflow-x: auto; + border: 1px solid var(--border); + font-size: 0.75rem; + line-height: 1.5; +} +.blob-content pre { + background: var(--pre-bg) !important; + margin: 0 !important; + padding: 0.75em 1em !important; + font-family: var(--font); + overflow-x: auto; +} -
added .abbaye/theme/version_index.html.j2
diff --git a/.abbaye/theme/version_index.html.j2 b/.abbaye/theme/version_index.html.j2 new file mode 100644 index 0000000..349de4d --- /dev/null +++ b/.abbaye/theme/version_index.html.j2 @@ -0,0 +1,71 @@ +<!doctype html> +<html prefix="og: https://ogp.me/ns#" lang="{{lang|default(value='en')}}"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + {% if config.site.fediverse_creator %}<meta name="fediverse:creator" content="{{ config.site.fediverse_creator }}" />{% endif %} + {% if config.site.opengraph %} + <meta property="og:title" content="{{ project_name }} — {{ version }}" /> + <meta property="og:type" content="{{ config.site.opengraph.type|default(value='article') }}" /> + <meta property="og:image" content="{{config.site.base_url}}/{{ config.site.opengraph.image }}" /> + {% if config.site.opengraph.image_alt_text %} + <meta property="og:image:alt" content="{{ config.site.opengraph.image_alt_text }}" /> + {% endif %} + <meta property="og:url" content="{{ config.site.opengraph.url|default(value=config.site.base_url)|safe }}/{{ version }}" /> + <meta property="og:site_name" content="{{ project_name }}" /> + {% if config.site.opengraph.description %} + <meta property="og:description" content="{{ config.site.opengraph.description }}" /> + {% endif %} + {% endif %} + <title>{{ project_name }} — {{ version }}</title> + <link rel="stylesheet" href="../static/site.css" /> + </head> + <body> + <header> + <a href="../">← All versions</a> + <span class="title">{{ project_name }} — {{ version }}</span> + </header> + <div class="release-layout"> + <aside> + {% if repo_url %} + <h3>Repository</h3> + <p><a href="{{ repo_url }}">{{ repo_url }}</a></p> + {% endif %} + {% if git_ui_enabled %} + <h3>Source</h3> + <ul> + <li><a href="../repository/refs.html#tag-{{ version_tag }}">Browse {{ version_tag }}</a></li> + </ul> + {% endif %} {% if has_docs %} + <h3>Documentation</h3> + <ul> + <li><a href="docs/">📖 API docs</a></li> + {% if has_docs_tarball %} + <li><a href="docs.tar.gz">⬇ docs.tar.gz</a></li> + {% endif %} + </ul> + {% endif %} {% if has_dist %} + <h3>Downloads</h3> + <ul> + {% for file in dist_files %} + <li> + <a href="dist/{{ file.name }}">⬇ {{ file.name }}</a> + <div class="dist-meta"> + {{ file.size_human }}<br /><code title="SHA-256" + >sha256: {{ file.sha256 }}</code + > + </div> + </li> + {% endfor %} + </ul> + {% endif %} + </aside> + <main class="release-content"> + {{ readme_html | safe }} {% if changelog_html %} + <hr class="changelog-divider" /> + <h2 class="changelog-heading">Changes in {{ version }}</h2> + {{ changelog_html | safe }} {% endif %} + </main> + </div> + </body> +</html> -
modified .gitignore
diff --git a/.gitignore b/.gitignore index 1b69028..41c156f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # SearchHub project directory structure /target .fastembed_cache +public -
modified Cargo.toml
diff --git a/Cargo.toml b/Cargo.toml index bd3e12c..4e36ed8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,3 +32,10 @@ url = "2" [build-dependencies] tera = "1.8" + +[profile.release] +opt-level = "z" +strip = true +lto = true +codegen-units = 1 +panic = "abort" -
added abbaye.toml
diff --git a/abbaye.toml b/abbaye.toml new file mode 100644 index 0000000..5b52783 --- /dev/null +++ b/abbaye.toml @@ -0,0 +1,20 @@ +"$shema" = "https://vit.am/~ololduck/abbaye/latest/dist/abbaye.schema.json" + +[site] +name = "search_hub" +output_dir = "public" + +[version_extractor] +type = "git" +tag_prefix = "v" +dirty_suffix = "-dirty" + +[changelog] + +[[builders]] +type = "archive" +ignore_patterns = [".git/", "*.tar.gz"] + +[[builders]] +type = "cargo" +targets = ["x86_64-unknown-linux-gnu"] -
added mise.toml
diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..e430cdd --- /dev/null +++ b/mise.toml @@ -0,0 +1,2 @@ +[tools] +rust = "1.88.0"