Commit 9049e20a29
Unsigned
Layout: unified · split
content/gpg.txt added +52
| @@ -0,0 +1,52 @@ | ||
| 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- | |
| 2 | ||
| 3 | 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 | |
| 50 | 0jZ4tA== | |
| 51 | =pl2G | |
| 52 | -----END PGP PUBLIC KEY BLOCK----- | |
content/org-ssg.toml +21 −13
| @@ -13,22 +13,21 @@ | ||
| 13 | 13 | title = "cleberg.net" |
| 14 | 14 | description = "Stillness amidst the chaos." |
| 15 | 15 | language = "en" |
| 16 | # Empty keeps every URL relative, so the site works from a preview directory as well as | |
| 17 | # from its real origin. Set it to "https://cleberg.net" when you want canonical links, or | |
| 18 | # an RSS feed — a feed is read away from the site that served it, so its links cannot be | |
| 19 | # relative. | |
| 20 | base_url = "" | |
| 16 | # Set, because the layout emits canonical links and /feed.xml — a feed is read away from | |
| 17 | # the site that served it, so its links cannot be relative. Ordinary page-to-page links | |
| 18 | # stay relative regardless, so a preview build still works from a directory. | |
| 19 | base_url = "https://cleberg.net" | |
| 21 | 20 | |
| 22 | 21 | [nav] |
| 23 | 22 | # Explicit, because the pages that belong in the nav are not all top-level: /blog/ and |
| 24 | 23 | # /garden/ are generated below, and salary/ is a section index one level down. index.org |
| 25 | # is deliberately absent — the layout already links home from the site title, and listing | |
| 26 | # it here would print "cleberg.net" twice side by side. | |
| 24 | # is deliberately absent — the layout writes the Home link itself, exactly as weblorg's | |
| 25 | # base.html does. | |
| 27 | 26 | # |
| 28 | 27 | # Generated pages are named by their output path, authored ones by their source. Listing |
| 29 | 28 | # them together is what puts Salary last: a collection with `nav = true` that is not |
| 30 | # listed here gets appended after everything that is. /tags/ is deliberately not listed, | |
| 31 | # so it lands at the end. | |
| 29 | # listed here gets appended after everything that is — which is why the tags collection | |
| 30 | # below does not set `nav = true`: the live nav has no Tags entry. | |
| 32 | 31 | mode = "explicit" |
| 33 | 32 | pages = ["blog/index.html", "garden/index.html", "salary/index.org"] |
| 34 | 33 | |
| @@ -62,14 +61,14 @@ section_numbers = false | ||
| 62 | 61 | source = "blog" |
| 63 | 62 | output = "index.html" |
| 64 | 63 | template = "home.html" |
| 65 | title = "cleberg.net" | |
| 64 | title = "Christian Cleberg" | |
| 66 | 65 | sort = "date" |
| 67 | 66 | order = "desc" |
| 68 | 67 | |
| 69 | 68 | [[collections]] |
| 70 | 69 | source = "blog" |
| 71 | 70 | output = "blog/index.html" |
| 72 | template = "list.html" | |
| 71 | template = "blog.html" | |
| 73 | 72 | title = "Blog" |
| 74 | 73 | sort = "date" |
| 75 | 74 | order = "desc" |
| @@ -78,7 +77,7 @@ nav = true | ||
| 78 | 77 | [[collections]] |
| 79 | 78 | source = "garden" |
| 80 | 79 | output = "garden/index.html" |
| 81 | template = "list.html" | |
| 80 | template = "garden.html" | |
| 82 | 81 | title = "Garden" |
| 83 | 82 | sort = "date" |
| 84 | 83 | order = "desc" |
| @@ -96,4 +95,13 @@ title = "Tagged: {tag}" | ||
| 96 | 95 | index_output = "tags/index.html" |
| 97 | 96 | index_template = "tags.html" |
| 98 | 97 | index_title = "Tags" |
| 99 | nav = true | |
| 98 | ||
| 99 | # The RSS feed. Not a separate feature — a collection whose template happens to be XML, | |
| 100 | # which is why /feed.xml is declared here alongside the HTML listings. | |
| 101 | [[collections]] | |
| 102 | source = "blog" | |
| 103 | output = "feed.xml" | |
| 104 | template = "feed.xml" | |
| 105 | title = "cleberg.net" | |
| 106 | sort = "date" | |
| 107 | order = "desc" | |
content/robots.txt added +5
| @@ -0,0 +1,5 @@ | ||
| 1 | User-agent: * | |
| 2 | Content-Signal: ai-train=yes, search=yes, ai-input=yes | |
| 3 | Allow: / | |
| 4 | Disallow: | |
| 5 | Sitemap: https://cleberg.net/sitemap.xml | |
content/salary.csv added +13
| @@ -0,0 +1,13 @@ | ||
| 1 | Title,Department,Company,Location,Start,End,Salary,PercentChange | |
| 2 | Manager,Technology Assurance - Audit,KPMG,Omaha(NE),2025-10,2026-10,147600,0.0453 | |
| 3 | Manager,Technology Assurance - Audit,KPMG,Omaha(NE),2024-10,2025-10,141200,0.2099 | |
| 4 | Senior,Technology Assurance - Audit,KPMG,Omaha(NE),2023-10,2024-10,116700,0.0609 | |
| 5 | Senior,Technology Assurance - Audit,KPMG,Omaha(NE),2022-06,2023-10,110000,0.2290 | |
| 6 | Senior,Technology Risk - Consulting,Ernst & Young,Des Moines(IA),2021-09,2022-06,89500,0.2430 | |
| 7 | Senior IT Auditor,Internal Audit,Ameritas,Lincoln(NE),2021-05,2021-09,72000,0.1076 | |
| 8 | IT Auditor,Internal Audit,Ameritas,Lincoln(NE),2020-04,2021-05,65000,0.1206 | |
| 9 | IS Auditor II,Internal Audit,Nelnet,Lincoln(NE),2019-12,2020-04,58000,0.3942 | |
| 10 | IS Auditor I,Internal Audit,Nelnet,Lincoln(NE),2019-06,2019-12,41600,0.2500 | |
| 11 | Internal Audit Intern,Internal Audit,Ameritas,Lincoln(NE),2018-02,2019-06,33280,1.2857 | |
| 12 | Teaching Assistant,College of Business,University of Nebraska,Lincoln(NE),2017-08,2018-05,14560,-0.5000 | |
| 13 | Community Management Intern,Store/Retail,Walgreens,Lincoln(NE),2017-06,2018-02,29120,0.0000 | |
content/templates/base.html +51 −23
| @@ -1,52 +1,80 @@ | ||
| 1 | {# Page layout for org-ssg. | |
| 1 | {# Page layout for org-ssg, mirroring theme/templates/base.html. | |
| 2 | 2 | |
| 3 | Styling comes from styles.css, a verbatim copy of theme/static/styles.css — the | |
| 4 | stylesheet weblorg already serves. org-ssg publishes assets from inside its source | |
| 5 | directory, so the copy lives here; `diff content/styles.css theme/static/styles.css` | |
| 6 | should stay empty, or consolidate the two if you migrate for real. | |
| 3 | Styling comes from styles.css, copied here from theme/static/ along with gpg.txt, | |
| 4 | robots.txt and salary.csv — org-ssg publishes assets from inside its source | |
| 5 | directory, and weblorg's live static root is theme/static/. The copies should stay | |
| 6 | identical: `diff content/styles.css theme/static/styles.css` and friends should | |
| 7 | print nothing, or consolidate the two if you migrate for real. weblorg links the | |
| 8 | minified styles.min.css instead; that file is gitignored build output, and the rules | |
| 9 | are the same, so the tracked stylesheet is the one to publish from here. | |
| 7 | 10 | |
| 8 | Available here: page (.title .url .date .date_iso .tags .excerpt .toc .keywords), | |
| 9 | site, nav, root, stylesheet. See the org-ssg guide chapter on Templates. #} | |
| 11 | Available here: page (.title .url .source .date .date_iso .tags .excerpt .toc | |
| 12 | .keywords), site, nav, root, stylesheet. See the org-ssg guide on Templates. #} | |
| 10 | 13 | <!DOCTYPE html> |
| 11 | 14 | <html lang="{{ site.language }}"> |
| 12 | 15 | <head> |
| 13 | 16 | <meta charset="utf-8"> |
| 17 | <title>{% block subtitle %}{{ page.title }} - {% endblock %}{{ site.title }}</title> | |
| 14 | 18 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| 15 | <title>{{ page.title }} · {{ site.title }}</title> | |
| 16 | {%- if site.base_url %} | |
| 17 | <link rel="canonical" href="{{ page.url | absolute }}"> | |
| 18 | {%- endif %} | |
| 19 | {%- if page.excerpt %} | |
| 20 | <meta name="description" content="{{ page.excerpt | truncate(150) }}"> | |
| 21 | {%- endif %} | |
| 22 | <link rel="stylesheet" href="{{ root }}styles.css"> | |
| 19 | <meta name="author" content="Christian Cleberg <hello@cleberg.net>"> | |
| 20 | <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | truncate(150) }}{% else %}{{ site.description }}{% endif %}"> | |
| 21 | <meta property="og:title" content="{{ page.title }}"> | |
| 22 | <meta property="og:url" content="{{ page.url | absolute | replace("index.html", "") }}"> | |
| 23 | <meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | truncate(150) }}{% else %}{{ site.description }}{% endif %}"> | |
| 24 | <link rel="canonical" href="{{ page.url | absolute | replace("index.html", "") }}"> | |
| 25 | <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ root }}feed.xml"> | |
| 26 | <link rel="stylesheet" href="{{ root }}styles.css" type="text/css"> | |
| 27 | <link rel="icon" href="data:,"> | |
| 28 | {#- rel="me" identity links. weblorg's base.html writes the last one as <a>, which a | |
| 29 | browser hoists out of <head>; <link> is the spelling that stays where it is put. #} | |
| 30 | <link href="https://github.com/ccleberg" rel="me"> | |
| 31 | <link href="https://gitlab.com/ccleberg" rel="me"> | |
| 32 | <link href="mailto:hello@cleberg.net" rel="me"> | |
| 33 | <link href="https://c.im/@cmc" rel="me"> | |
| 23 | 34 | {%- if stylesheet %} |
| 24 | 35 | <link rel="stylesheet" href="{{ stylesheet }}"> |
| 25 | 36 | {%- endif %} |
| 26 | 37 | </head> |
| 27 | 38 | <body> |
| 28 | <header> | |
| 29 | <nav> | |
| 39 | <a href="#main-content" class="skip-link">Skip to content</a> | |
| 40 | ||
| 41 | <nav aria-label="Site Navigation"> | |
| 30 | 42 | <ul> |
| 31 | <li><a href="{{ root }}index.html">{{ site.title }}</a></li> | |
| 43 | <li><a href="{{ root }}index.html">Home</a></li> | |
| 32 | 44 | {%- for item in nav %} |
| 33 | 45 | <li><a href="{{ item.url }}">{{ item.title }}</a></li> |
| 34 | 46 | {%- endfor %} |
| 35 | 47 | </ul> |
| 36 | 48 | </nav> |
| 37 | </header> | |
| 38 | <main> | |
| 49 | ||
| 50 | <main id="main-content"> | |
| 51 | {% block main %} | |
| 52 | <article> | |
| 39 | 53 | <h1>{{ page.title }}</h1> |
| 40 | 54 | {%- if page.date_iso %} |
| 41 | <p><time datetime="{{ page.date_iso }}">{{ page.date_iso }}</time></p> | |
| 55 | <p><time datetime="{{ page.date_iso }}">{{ page.date_iso }}</time>{% if page.excerpt %} · {{ page.excerpt }}{% endif %}</p> | |
| 42 | 56 | {%- endif %} |
| 43 | 57 | {%- if page.tags %} |
| 44 | 58 | <p>{% for tag in page.tags %}<a href="{{ root }}tags/{{ tag }}.html">#{{ tag }}</a> {% endfor %}</p> |
| 45 | 59 | {%- endif %} |
| 46 | {% block content %}{{ body | safe }}{% endblock %} | |
| 60 | <div>{% block content %}{{ body | safe }}{% endblock %}</div> | |
| 61 | {#- Blog posts carry a reply footer; other pages do not. org-ssg has no per-page | |
| 62 | template selection, so the page's own URL is what tells them apart. #} | |
| 63 | {%- if page.url is startingwith("blog/") %} | |
| 64 | <div><a href="mailto:hello@cleberg.net">Reply via email →</a></div> | |
| 65 | <div><i>...or, comment on this post on <a href="https://bubbles.town/source/cleberg.net">Bubbles</a>!</i></div> | |
| 66 | {%- endif %} | |
| 67 | </article> | |
| 68 | {% endblock %} | |
| 47 | 69 | </main> |
| 70 | ||
| 48 | 71 | <footer> |
| 49 | <p><a href="{{ root }}index.html">{{ site.title }}</a> — {{ site.description }}</p> | |
| 72 | <a href="https://git.krz.sh/cmc/cleberg.net.git/">Source</a> · | |
| 73 | <a href="{{ root }}feed.xml">RSS</a> · | |
| 74 | <a href="http://paske4urhs6nttrtlkuwa5cowum3fjkc6yv6kl4ncx3mjxcd77764nqd.onion/">Onion</a> · | |
| 75 | <a href="{{ root }}tips/index.html">Tips</a> · | |
| 76 | <a href="https://iheartrss.com/">I ♥ RSS</a> | |
| 77 | <p>[ <a href="https://krz.sh">krz</a> · <a href="https://audit-labs.dev">audit labs</a> ]</p> | |
| 50 | 78 | </footer> |
| 51 | 79 | </body> |
| 52 | 80 | </html> |
content/templates/blog.html added +16
| @@ -0,0 +1,16 @@ | ||
| 1 | {# The blog index at /blog/, mirroring theme/templates/blog.html. | |
| 2 | Separate from list.html because the live page carries its own prose. #} | |
| 3 | {% extends "base.html" %} | |
| 4 | {% block main %} | |
| 5 | <h1>{{ page.title }}</h1> | |
| 6 | <p>Use <code>⌘ F</code> / <code>Ctrl F</code> to search · <a href="{{ root }}feed.xml">RSS Feed</a></p> | |
| 7 | <p>Want to browse by topic instead? Head over to the <a href="{{ root }}tags/index.html">tags</a> page.</p> | |
| 8 | <ul class="post-list"> | |
| 9 | {%- for entry in pages %} | |
| 10 | <li class="post-list-item"> | |
| 11 | {%- if entry.date_iso %}<time datetime="{{ entry.date_iso }}">{{ entry.date_iso }}</time>{% endif %} | |
| 12 | <a href="{{ root }}{{ entry.url }}">{{ entry.title }}</a> | |
| 13 | </li> | |
| 14 | {%- endfor %} | |
| 15 | </ul> | |
| 16 | {% endblock %} | |
content/templates/feed.xml added +36
| @@ -0,0 +1,36 @@ | ||
| 1 | <?xml version="1.0" encoding="UTF-8" ?> | |
| 2 | {#- The RSS feed at /feed.xml, mirroring theme/templates/feed.xml. A feed is read away | |
| 3 | from the site that served it, so every URL here is absolute — which is what | |
| 4 | `| absolute` needs [site] base_url for. | |
| 5 | ||
| 6 | One difference from weblorg: <description> carries each post's excerpt rather than its | |
| 7 | full HTML. org-ssg gives a collection template each entry's metadata, not its rendered | |
| 8 | body. #} | |
| 9 | <rss version="2.0" | |
| 10 | xmlns:content="http://purl.org/rss/1.0/modules/content/" | |
| 11 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
| 12 | xmlns:atom="http://www.w3.org/2005/Atom"> | |
| 13 | <channel> | |
| 14 | <title>{{ site.title }}</title> | |
| 15 | <atom:link href="{{ page.url | absolute }}" rel="self" type="application/rss+xml" /> | |
| 16 | <link>{{ "index.html" | absolute | replace("index.html", "") }}</link> | |
| 17 | <description>{{ site.description }}</description> | |
| 18 | <language>{{ site.language }}</language> | |
| 19 | <webMaster>hello@cleberg.net (Christian Cleberg)</webMaster> | |
| 20 | {%- for post in pages %} | |
| 21 | <item> | |
| 22 | <title>{{ post.title }}</title> | |
| 23 | <link>{{ post.url | absolute }}</link> | |
| 24 | <guid isPermaLink="true">{{ post.url | absolute }}</guid> | |
| 25 | <author>hello@cleberg.net (Christian Cleberg)</author> | |
| 26 | {%- if post.date_iso %} | |
| 27 | <pubDate>{{ post.date_iso | rfc822 }}</pubDate> | |
| 28 | {%- endif %} | |
| 29 | {%- for tag in post.tags %} | |
| 30 | <category>{{ tag }}</category> | |
| 31 | {%- endfor %} | |
| 32 | <description>{{ post.excerpt }}</description> | |
| 33 | </item> | |
| 34 | {%- endfor %} | |
| 35 | </channel> | |
| 36 | </rss> | |
content/templates/garden.html added +30
| @@ -0,0 +1,30 @@ | ||
| 1 | {# The garden index at /garden/, mirroring theme/templates/garden.html. | |
| 2 | Notes are listed by title and description rather than by date. #} | |
| 3 | {% extends "base.html" %} | |
| 4 | {% block main %} | |
| 5 | <h1>{{ page.title }}</h1> | |
| 6 | <p>Notes in various states of growth. Some are stubs, some are developed. Browse | |
| 7 | around.</p> | |
| 8 | <section> | |
| 9 | <h2>🌳 The Growth Stages</h2> | |
| 10 | <p>Instead of dates, these metadata labels show how mature a page is:</p> | |
| 11 | <span><strong>🌱 Seedlings:</strong> Rough notes, raw ideas, or "half-baked" | |
| 12 | thoughts.</span><br> | |
| 13 | <span><strong>🌿 Budding:</strong> Notes that have some structure and a few | |
| 14 | internal links.</span><br> | |
| 15 | <span><strong>🌳 Evergreen:</strong> High-conviction ideas that are | |
| 16 | well-researched and stable.</span><br> | |
| 17 | <span><strong>🍂 Compost:</strong> Ideas you no longer agree with but want to | |
| 18 | keep for historical context.</span><br><br> | |
| 19 | </section> | |
| 20 | <ul> | |
| 21 | {%- for entry in pages %} | |
| 22 | <li> | |
| 23 | <a href="{{ root }}{{ entry.url }}">{{ entry.title }}</a> | |
| 24 | {%- if entry.excerpt %} | |
| 25 | <span>{{ entry.excerpt }}</span> | |
| 26 | {%- endif %} | |
| 27 | </li> | |
| 28 | {%- endfor %} | |
| 29 | </ul> | |
| 30 | {% endblock %} | |
content/templates/home.html +6 −3
| @@ -2,10 +2,13 @@ | ||
| 2 | 2 | |
| 3 | 3 | A generated page, so it has no source .org file — `pages` holds the blog collection's |
| 4 | 4 | entries, newest first, and the prose lives here. This mirrors what weblorg's |
| 5 | theme/templates/index.html does today. #} | |
| 5 | theme/templates/index.html does today, including its bare <title>: the home page is | |
| 6 | "cleberg.net" and not "cleberg.net - cleberg.net". #} | |
| 6 | 7 | {% extends "base.html" %} |
| 7 | {% block content %} | |
| 8 | {% block subtitle %}{% endblock %} | |
| 9 | {% block main %} | |
| 8 | 10 | <section> |
| 11 | <h1>{{ page.title }}</h1> | |
| 9 | 12 | <p>[ <a href="https://krz.sh">krz</a> · <a href="https://audit-labs.dev">audit labs</a> ]</p> |
| 10 | 13 | <p>Privacy · Self-Hosting · iOS</p> |
| 11 | 14 | <p>I build tools, write about systems, and run my own infrastructure. Focused on privacy, |
| @@ -35,7 +38,7 @@ user control, and long-term utility.</p> | ||
| 35 | 38 | <ul> |
| 36 | 39 | <li>cgit (primary): <a href="https://git.krz.sh">~cmc</a></li> |
| 37 | 40 | <li>GitHub (mirror): <a href="https://github.com/ccleberg">@ccleberg</a></li> |
| 38 | <li>Email: <a href="mailto:hello@cleberg.net">hello@cleberg.net</a></li> | |
| 41 | <li>Email: <a href="mailto:hello@cleberg.net">hello@cleberg.net</a> (<a href="{{ root }}gpg.txt">GPG</a>)</li> | |
| 39 | 42 | <li>Lemmy: <a href="https://r.nf/u/cmc">@cmc</a></li> |
| 40 | 43 | <li>Mastodon: <a href="https://c.im/@cmc">@cmc</a></li> |
| 41 | 44 | <li>Pixelfed: <a href="https://gram.social/cmc">@cmc</a></li> |
content/templates/tags.html +5 −3
| @@ -1,7 +1,9 @@ | ||
| 1 | {# The tag index at /tags/. Receives `groups` — every tag with its count — rather than | |
| 2 | `pages`, because it lists tags and not posts. #} | |
| 1 | {# The tag index at /tags/, mirroring theme/templates/tags.html. Receives `groups` — | |
| 2 | every tag with its count — rather than `pages`, because it lists tags and not posts. #} | |
| 3 | 3 | {% extends "base.html" %} |
| 4 | {% block content %} | |
| 4 | {% block main %} | |
| 5 | <h1>{{ page.title }}</h1> | |
| 6 | <p>Browse posts by topic.</p> | |
| 5 | 7 | <ul> |
| 6 | 8 | {%- for tag in groups %} |
| 7 | 9 | <li><a href="{{ root }}{{ tag.url }}">{{ tag.name }}</a> ({{ tag.count }})</li> |