diff options
author | Christian Cleberg <hello@cleberg.net> | 2025-09-20 20:48:16 -0500 |
---|---|---|
committer | Christian Cleberg <hello@cleberg.net> | 2025-09-20 20:48:16 -0500 |
commit | d7978b4ccf4c6c56b1c2888791f73271f91fd12c (patch) | |
tree | 587bd7191d766aa4910a8b21dcb5da0d71061c08 | |
parent | 01a629ca5a26798c67a29bab7a7c9f9def1f80dd (diff) | |
download | cleberg.net-d7978b4ccf4c6c56b1c2888791f73271f91fd12c.tar.gz cleberg.net-d7978b4ccf4c6c56b1c2888791f73271f91fd12c.tar.bz2 cleberg.net-d7978b4ccf4c6c56b1c2888791f73271f91fd12c.zip |
EXTREME MINIMALISM
-rw-r--r-- | build.py | 49 | ||||
-rw-r--r-- | content/about/index.org | 2 | ||||
-rw-r--r-- | content/wiki/blogroll.org | 31 | ||||
-rw-r--r-- | content/wiki/hardware.org | 95 | ||||
-rw-r--r-- | content/wiki/internet.org | 98 | ||||
-rw-r--r-- | content/wiki/ios.org | 139 | ||||
-rw-r--r-- | content/wiki/macos.org | 148 | ||||
-rw-r--r-- | content/wiki/services.org | 38 | ||||
-rw-r--r-- | content/wiki/sh.org | 49 | ||||
-rw-r--r-- | publish.el | 18 | ||||
-rw-r--r-- | theme/static/favicon.ico | bin | 28345 -> 0 bytes | |||
-rw-r--r-- | theme/static/styles.css | 309 | ||||
-rw-r--r-- | theme/templates/base.html | 18 | ||||
-rw-r--r-- | theme/templates/blog.html | 14 | ||||
-rw-r--r-- | theme/templates/index.html | 15 | ||||
-rw-r--r-- | theme/templates/wiki.html | 12 |
16 files changed, 53 insertions, 982 deletions
@@ -104,7 +104,6 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): #+title: Post Title #+date: <YYYY-MM-DD Day HH:MM:SS> #+slug: post-slug - #+filetags: :tag1:tag2:tag3: Returns a string containing the section with the three most recent posts, formatted like the snippet in the prompt. @@ -115,7 +114,6 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): "title": re.compile(r"^#\+title:\s*(.+)$", re.IGNORECASE), "date": re.compile(r"^#\+date:\s*<(\d{4}-\d{2}-\d{2})"), "slug": re.compile(r"^#\+slug:\s*(.+)$", re.IGNORECASE), - "filetags": re.compile(r"^#\+filetags:\s*(.+)$", re.IGNORECASE), "draft": re.compile(r"^#\+draft:\s*(.+)$", re.IGNORECASE), } @@ -123,7 +121,6 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): title = None date_str = None slug = None - tags = [] is_draft = False with org_path.open("r", encoding="utf-8") as f: @@ -147,15 +144,6 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): slug = m.group(1).strip() continue - if not tags: - m = header_patterns["filetags"].match(line) - if m: - # filetags are in the form ":tag1:tag2:tag3:" - raw = m.group(1).strip() - # split on ":" and filter out empty strings - tags = [t for t in raw.split(":") if t] - continue - m = header_patterns["draft"].match(line) if m: draft_value = m.group(1).strip().lower() @@ -165,7 +153,7 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): continue # Stop scanning once we have all required fields - if title and date_str and slug and tags: + if title and date_str and slug: break if is_draft: @@ -186,7 +174,6 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): "date_obj": date_obj, "date_full": date_full, "slug": slug, - "tags": tags, } ) @@ -199,21 +186,15 @@ def get_recent_posts_html(content_dir="./content/blog", num_posts=3): # Build HTML lines lines = [] for post in recent: - lines.append('\t<div class="post">') - lines.append('\t\t<div class="post-content">') + lines.append('\t<div>') lines.append( - f'\t\t\t<a href="/blog/{post["slug"]}.html">{post["title"]}</a>' + f'\t\t<time datetime="{post["date_str"]}">{post["date_full"]}</time>' ) - if post["tags"]: - lines.append('\t\t\t<div class="post-tags">') - for tag in post["tags"]: - lines.append(f'\t\t\t\t<span class="tag">{tag}</span>') - lines.append("\t\t\t</div>") - lines.append("\t\t</div>") lines.append( - f'\t\t<time datetime="{post["date_str"]}">{post["date_full"]}</time>' + f'\t\t\t<a href="/blog/{post["slug"]}.html">{post["title"]}</a>' ) lines.append("\t</div>") + lines.append("\t<br>") return "\n".join(lines) @@ -246,6 +227,20 @@ def minify_css(src_css, dest_css): sys.exit(1) +def minify_html(src_html, dest_html): + print(f"Minifying HTML: {src_html} → {dest_html}") + result = subprocess.run( + ["minify", "-o", str(dest_html), str(src_html)], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + if result.returncode != 0: + print("Error during HTML minification:") + print(result.stderr, file=sys.stderr) + sys.exit(1) + + def run_emacs_publish(dev_mode=True): if dev_mode: print("Running Emacs publish script (development)...") @@ -378,6 +373,9 @@ def main(): # Update index page with latest posts update_index_html(html_snippet) + # Minify index page + minify_html("./.build/index.html", "./.build/index.html") + # Generate sitemap generate_sitemap() @@ -399,6 +397,9 @@ def main(): # Update index page with latest posts update_index_html(html_snippet) + # Minify index page + minify_html("./.build/index.html", "./.build/index.html") + # Generate sitemap generate_sitemap() diff --git a/content/about/index.org b/content/about/index.org index 10e178e..81634a8 100644 --- a/content/about/index.org +++ b/content/about/index.org @@ -6,7 +6,7 @@ Hey, I'm */~cmc/*. I'm a technology audit manager, working on financial statement audits (SOX/MAR), SOC 1-3 reports, and other attestations for KPMG. -Read up on my [[https://cv.cleberg.net][CV]] or [[https://cleberg.net/salary/][salary]] for more information. +Read up on my [[https://cv.cleberg.net][CV]] or [[https://cleberg.net/salary/][salary]] for more information. Otherwise, feel free to read more [[https://cleberg.net/about/][about me]]. In my spare time, I like to: diff --git a/content/wiki/blogroll.org b/content/wiki/blogroll.org deleted file mode 100644 index 79e6a9a..0000000 --- a/content/wiki/blogroll.org +++ /dev/null @@ -1,31 +0,0 @@ -#+title: Blogroll -#+date: <2024-04-12> - -** Aggregators -- [[https://1mb.club/][1MB Club]] -- [[https://250kb.club/][250KB Club]] -- [[https://512kb.club/][512KB Club]] -- [[https://darktheme.club/][Darktheme Club]] -- [[https://nocss.club/][No CSS Club]] -- [[https://no-js.club/][No-JS Club]] -- [[https://blogroll.org/][Ye Olde Blogroll]] - -** Plain Text -A list of various plaintext websites and lists. - -- [[https://greycoder.com/a-list-of-text-only-new-sites/][A List Of Text-Only & Minimalist News Sites]] -- [[https://harvardlawreview.org/][Harvard Law Review]] -- [[https://sjmulder.nl/en/textonly.html][Hyperlinked Text]] -- [[https://medium.com/@letsworkshop/plain-text-web-design-a78ccaf9dbc0][Plain-text web design]] -- [[https://plaintextworld.com/][Plaintext World]] -- [[https://github.com/masonarmand/txt2web][txt2web]] -- [[https://justinjackson.ca/words.html][Words]] - -** Webrings -Instead of listing my personal favorites, I'm just going to drop a link to -[[https://brisray.com/web/webring-list.htm][brisay's webring list]], which contains 237 webrings for a total of 7078 websites, -as of 2024-03-15. - -** Everything Else -- [[https://deadsimplesites.com/][Dead Simple Sites]] -- [[https://planet.emacslife.com/][Planet Emacslife]] diff --git a/content/wiki/hardware.org b/content/wiki/hardware.org deleted file mode 100644 index 674e781..0000000 --- a/content/wiki/hardware.org +++ /dev/null @@ -1,95 +0,0 @@ -#+title: Hardware -#+date: <2024-03-16> - -** Desktop -*** macOS -Probably should have added more RAM but Macbooks are stupid expensive. - -| Category | Details | -|----------+-----------------| -| Model | [[https://www.apple.com/macbook-pro/][Macbook Pro 16”]] | -| CPU | Apple M2 Pro | -| RAM | 16GB | -| Storage | 512GB SSD | - -*** Linux -A beauty. - -| Category | Details | -|----------+---------------------------------------------| -| Model | [[https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpade/thinkpad--e15-gen-4-(15-inch-amd)/len101t0023][Lenovo ThinkPad E15 Gen 4, model 21ED0048US]] | -| CPU | AMD Ryzen 5 5625U with Radeon Graphics | -| RAM | 16 GB | -| Storage | 256 GB SSD | - -** Mobile -Previously used a Pixel 6 & Pixel 7 with GrapheneOS. - -| Category | Details | -|----------+-------------------| -| Model | [[https://www.apple.com/iphone-15-pro/][iPhone 15 Pro Max]] | -| CPU | A17 Pro | -| RAM | 8GB | -| Storage | 256GB | - -** Homelab -I run a small homelab with a mix of consumer (compute/storage) and enterprise -(network) hardware. I try to keep the lab energy efficient and quiet as my top -priorities. - -*** IoT -A collection of mainly smart lights, sensors, and smart appliances. My first -preference is to disable all networking for new smart devices or simply not -connect internet in the first place (e.g. I never enable internet on my smart -TVs). If the smart device requires LAN access, I will connect the device to my -guest-restricted IoT network. As a last resort, I will set-up the internet but -monitor the DNS lookups via NextDNS and forcibly block any domains I do not want -the device to be using. If the device is egregious or shady, I'll just sell it -and either replace it or live without it. - -- Other Appliances (washer, dryer, humidifier, fans, etc.) -- [[https://about.irobot.com/sitecore/content/north-america/irobot-us/home/roomba/i7-series][Roomba i7+]] -- [[https://www.philips-hue.com/en-us/p/hue-white-and-color-ambiance-a19---e26-smart-bulb---60-w--3-pack-/046677562786][Philips Hue A19 Bulbs]] x 15 -- [[https://www.philips-hue.com/en-us/p/hue-bundle-play-blk-ext/33001][Philips Hue Play Light Bars]] -- [[https://www.philips-hue.com/en-us/p/hue-bridge/046677458478][Philips Hue Smart Bridge]] + play light bars and a ton of bulbs -- [[https://store.ui.com/us/en/collections/unifi-camera-security-special-chime][UP Chime]] -- [[https://store.ui.com/us/en/collections/unifi-camera-security-special-sensor][UP-Sense]] x 2 -- [[https://store.ui.com/us/en/products/unifi-smart-power][USP-Plug]] -- [[https://store.ui.com/us/en/collections/unifi-camera-security-compact-wifi-connected][UVC G4 Instant]] x 3 -- [[https://store.ui.com/us/en/collections/unifi-camera-security-special-wifi-doorbell][UVC G4 Doorbell Pro]] - -*** Network -A rack-mounted Dream Machine Pro, connected downstream to an access point, mesh -extender, and a couple ethernet switches. - -- [[https://store.ui.com/us/en/collections/unifi-dream-machine/products/udm-pro][UDM-Pro]] -- [[https://store.ui.com/us/en/collections/unifi-switching-standard-power-over-ethernet/products/usw-24-poe][USW-24-PoE]] -- [[https://store.ui.com/us/en/collections/unifi-switching-utility-poe/products/usw-lite-8-poe][USW-Lite-8-PoE]] -- [[https://store.ui.com/us/en/collections/unifi-wifi-flagship-high-capacity/products/u6-pro][U6-Pro]] -- [[https://store.ui.com/us/en/collections/unifi-wifi-inwall-outlet-mesh][U6-Extender]] -- [[https://store.ui.com/us/en/products/u7-pro-wall][U7-Pro-Wall]] x 2 -- [[https://store.ui.com/us/en/collections/unifi-accessory-tech-installations-rackmount/products/uacc-rack-panel-patch-blank-24][USW 24-Port Patch Panel]] - -*** Servers -1. Rack-Mount Server - - I wasn't happy with using low-powered PCs as servers and I knew I did not - want the ear-shattering enterprise rack-mounted servers, so I built my own. - - | Category | Details | - |--------------------+----------------------------------------| - | Case | Rosewill RSV-R4100U 4U | - | Motherboard | NZXT B550 | - | CPU | AMD Ryzen 7 5700G with Radeon Graphics | - | RAM | 64GB RAM (2x32GB) | - | Storage (On-board) | Western Digital 500GB M.2 NVME SSD | - | Storage (HDD Bay) | 48TB HDD | - | PSU | Corsair RM850 PSU | - -2. Other - - These ran as my main servers before I built the rack-mounted server above. I - have shut these down indefinitely for now as I have no use for them. - - - Dell OptiPlex - - Raspberry Pi 4 diff --git a/content/wiki/internet.org b/content/wiki/internet.org deleted file mode 100644 index 507b2c0..0000000 --- a/content/wiki/internet.org +++ /dev/null @@ -1,98 +0,0 @@ -#+title: Internet -#+date: <2024-05-02> - -** Gemini -The [[https://geminiprotocol.net/][Gemini Protocol]] is a network of interconnected plaintext documents. If -you've used [[https://en.wikipedia.org/wiki/Gopher_(protocol)][Gopher]] before, Gemini will feel very familiar. - -Instead of web sites, Gemini uses the term "capsules" that can be access via -=gemini://= links. - -In order to browse Gemini capsules, you will need a client capable of supporting -Gemini. The Gemini Protocol website has a [[https://geminiprotocol.net/software/][Gemini software]] page with a list of -clients for each platform. - -*** Gemtext -[[https://geminiprotocol.net/docs/cheatsheet.gmi][Gemtext]] is a plaintext syntax, very similar to Markdown. - -To quote the Gemini Protocol's documentation: - -- Long lines get wrapped by the client to fit the screen. -- Short lines /don't/ get joined together. -- Write paragraphs as single long lines. -- Blank lines are rendered verbatim. - -#+begin_src md -[//]: <> (Headings) -# Heading -## Sub-heading -### Sub-subheading - -[//]: <> (Lists) -- Mercury -- Gemini -- Apollo - -[//]: <> (Quotes) -> I contend that text-based websites should not exceed in size the major works of Russian literature. - -[//]: <> (Links) -=> gemini://geminiprotocol.net/docs/cheatsheet.gmi -=> gemini://geminiprotocol.net/docs/cheatsheet.gmi Gemtext cheatsheet - -[//]: <> (Preformatted text) -Any line starting with three backticks (```) will tell the client to toggle to -"preformatted mode", which disables the client's logical checks to render links, -headings, etc. and will render the text as-is. -#+end_src - -** Gopher -The [[https://en.wikipedia.org/wiki/Gopher_(protocol)][Gopher Protocol]] is a communication protocol, similar to Gemini, that allows -for browsing of any ones of [[https://datatracker.ietf.org/doc/html/rfc1436#section-3.8][the 14 supported item types]]: - -#+begin_src txt -0 Item is a file -1 Item is a directory -2 Item is a CSO phone-book server -3 Error -4 Item is a BinHexed Macintosh file. -5 Item is DOS binary archive of some sort. - Client must read until the TCP connection closes. Beware. -6 Item is a UNIX uuencoded file. -7 Item is an Index-Search server. -8 Item points to a text-based telnet session. -9 Item is a binary file! - Client must read until the TCP connection closes. Beware. -+ Item is a redundant server -T Item points to a text-based tn3270 session. -g Item is a GIF format graphics file. -I Item is some kind of image file. Client decides how to display. -#+end_src - -*** Simplicity is Intentional -Gopher is [[https://datatracker.ietf.org/doc/html/rfc1436#section-4][meant to be simplistic]]. - -#+begin_src txt -As far as possible we desire any new features to be carried as new -protocols that will be hidden behind new document-types. The -internet Gopher philosophy is: - - (a) Intelligence is held by the server. Clients have the option - of being able to access new document types (different, other types - of servers) by simply recognizing the document-type character. - Further intelligence to be borne by the protocol should be - minimized. - - (b) The well-tempered server ought to send "text" (unless a file - must be transferred as raw binary). Should this text include - tabs, formfeeds, frufru? Probably not, but rude servers will - probably send them anyway. Publishers of documents should be - given simple tools (filters) that will alert them if there are any - funny characters in the documents they wish to publish, and give - them the opportunity to strip the questionable characters out; the - publisher may well refuse. - - (c) The well-tempered client should do something reasonable with - funny characters received in text; filter them out, leave them in, - whatever. -#+end_src diff --git a/content/wiki/ios.org b/content/wiki/ios.org deleted file mode 100644 index fefde17..0000000 --- a/content/wiki/ios.org +++ /dev/null @@ -1,139 +0,0 @@ -#+title: iOS -#+date: <2024-05-01> - -Related: - -- [[https://cleberg.net/wiki/hardware.html][Hardware]] - -My primary mobile OS. Currently running iOS 17. This wiki page contains most of -the apps I have used at one point or another across my different iPhones. - -(=*=) = My favorites - -** Configuration -*** Display -- Light Mode - - 08:00 to 16:00 -- Dark Mode - - 16:00 to 08:00 - -*** Focus Modes -- Personal Focus - - 06:00 to 21:00 - - Allow Notifications From: - - Alarms - - Calendar - - Contacts (1 person) - - Messages - - Phone - - Reminders - - Signal - - UniFi Protect -- Sleep Focus - - 21:00 to 06:00 - - Allow Notifications From: - - Alarms - - Contacts (1 person) - - Reminders - - Signal - -*** Privacy & Security -I generally follow the [[https://en.wikipedia.org/wiki/Principle_of_least_privilege][principle of least privilege]] by only permitting the bare -minimum privileges and revoking as soon as they are no longer required. - -Here's the baseline I start with: - -- Disable: - - Analytics & Improvements - - Apple Advertising - - Apple ID > Sign-In & Security > Two-Factor Authentication - - Location Services > System Services > Product Improvement - - Tracking > Allow Apps to Request to Track - - Safari > Advanced > Privacy Preserving Ad Measurement -- Enable: - - Apple ID > iCloud > Advanced Data Protection - - Apple ID > Personal Information > Communication Preferences - - App Privacy Report - - Location Services only for Camera, Find My, UDisc, & WiFiman (=While Using=) - - Safari > Prevent Cross-Site Tracking - - Safari > Hide IP Address - - Safari > Advanced > Advanced Tracking and Fingerprinting Protection - -** Native Apps -*** Business -- [[https://apps.apple.com/us/app/element-messenger/id1083446067][Element]] - A cross-platform messenger, based on Matrix -- [[https://apps.apple.com/us/app/linkedin-network-job-finder/id288429040][LinkedIn]] - One of the only social media apps I use - -*** Developer Tools -- [[https://testflight.apple.com/join/F2vK7xo4][Harbour]] - Easily manage your Portainer service -- [[https://apps.apple.com/us/app/ish-shell/id1436902243][iSH]] - A local shell with SSH functionality - -*** Entertainment -- [[https://apps.apple.com/us/app/plex-watch-live-tv-and-movies/id383457673][Plex]] - A client for the Plex Media Server -- [[https://apps.apple.com/us/app/steam-mobile/id495369748][Steam]] - The top gaming marketplace for computers - -*** Lifestyle -- [[https://apps.apple.com/us/app/home/id1110145103][Home]] (=*=) - Apple homekit powered smart home manager -- [[https://apps.apple.com/us/app/philips-hue/id1055281310][Hue]] - Philips Hue smart home manager -- [[https://apps.apple.com/us/app/irobot-home/id1012014442][iRobot]] - Manage iRobot Roomba devices -- [[https://apps.apple.com/us/app/unifi-protect/id1392492235][UniFi Protect]] - View and manage most UniFi Protect cameras and settings - -*** Music -- [[https://apps.apple.com/us/app/apple-music/id1108187390][Apple Music]] (=*=) - Apple's native music streaming app -- [[https://apps.apple.com/us/app/plexamp/id1500797510][Plexamp]] (=*=) - Top-notch music app for your Plex Media Server, with a neural - network that provides excellent radio/shuffle suggestions - -*** Navigation -- [[https://apps.apple.com/us/app/deedum/id1546810946][deedum]] - A Gemini Protocol browser - -*** News -- [[https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210][NetNewsWire]] - A free and open source RSS reader for Mac, iPhone, and iPad - -*** Photo & Video -- [[https://testflight.apple.com/join/Q6WyyEpS][Aislingeach]] - A quick way to generate and rate images from the Stable Horde -- [[https://apps.apple.com/us/app/unsplash/id1290631746][Unsplash]] - Premium images, mostly free - -*** Productivity -- [[https://apps.apple.com/us/app/beorg-to-do-list-agenda/id1238649962][beorg]] (=*=) - An org-mode editor, outline, and scheduler with paid extensions -- [[https://apps.apple.com/us/app/bitwarden-password-manager/id1137397744][Bitwarden]] (=*=) - An open source password manager -- [[https://apps.apple.com/us/app/bitwarden-authenticator/id6497335175][Bitwarden Authenticator]] (=*=) - Generate 2FA on your device -- [[https://apps.apple.com/us/app/cryptomator/id1560822163][Cryptomator]] - A cross-platform encryption program -- [[https://apps.apple.com/us/app/obsidian-connected-notes/id1557175442][Obsidian]] - A nice Markdown-based editor based on a "vault" structure. - Offers a paid sync solution and community extensions -- [[https://apps.apple.com/us/app/strongbox-password-manager/id897283731][Strongbox]] - Keepass password manager for iOS & macOS -- [[https://apps.apple.com/us/app/unifi/id1057750338][UniFi Network]] - View and manage most UniFi Network settings - -*** Safari Extensions -- [[https://apps.apple.com/us/app/adguard-adblock-privacy/id1047223162][AdGuard]] - Ad blocker -- [[https://apps.apple.com/us/app/dark-reader-for-safari/id1438243180][Dark Reader]] - Dark mode for all the sites -- [[https://apps.apple.com/us/app/pipifier/id1234771095][PiPifier]] - Force videos to support PiP -- [[https://apps.apple.com/us/app/privacy-redirect/id1578144015][Privacy Redirect]] - Redirect select websites to others, usually to - privacy-focused alternatives - -*** Social Networking -- [[https://apps.apple.com/us/app/multitab-for-tumblr/id1071533778][MultiTab T]] (=*=) - A gallery-based Tumblr client with some unique features, - such as tab history and sync -- [[https://apps.apple.com/us/app/signal-private-messenger/id874139669][Signal]] (=*=) - A simple, powerful, and secure messenger -- [[https://testflight.apple.com/join/mpVk1qIy][Three Cheers]] - A client for Tildes.net with a design focus that matches the - intent of Tildes -- [[https://apps.apple.com/us/app/voyager-for-lemmy/id6451429762][Voyager]] - A Lemmy client - -*** Sports -- [[https://apps.apple.com/us/app/apple-sports/id6446788829][Apple Sports]] - Apple's new sports app - lacks notifications and live events -- [[https://apps.apple.com/us/app/udisc-disc-golf/id1072228953][UDisc]] - Disc golf course maps, score cards, and more - -*** Utilities -- [[https://apps.apple.com/us/app/backblaze/id628638330][Backblaze]] - Quickly view and manage Backblaze b2 cloud storage -- [[https://apps.apple.com/us/app/mullvad-vpn/id1488466513][Mullvad VPN]] (=*=) - A private VPN service -- [[https://apps.apple.com/us/app/otp-auth/id659877384][OTP Auth]] (=*=) - A minimalistic OTP app with support for biometrics, custom - icons, import/export, and iCloud sync -- [[https://apps.apple.com/us/app/plex-dash/id1500797677][Plex Dash]] - Stats about your Plex Media Server -- [[https://apps.apple.com/us/app/safari/id1146562112][Safari]] - iOS default browser -- [[https://apps.apple.com/us/app/ubiquiti-wifiman/id1385561119][Unifi WiFiman]] - Create visual layouts of WiFi strength and save heat maps to your phone - -** Web Apps & Shortcuts -- [[https://brutalist.report/][Brutalist Report]] - Minimal news aggregator -- [[https://cyber.report/][_Cyber.Report]] - Cybersecurity news aggregator -- [[https://news.ycombinator.com/][Hacker News]] - Mostly technical news -- [[https://nextdns.io/][NextDNS]] - NextDNS statistics dashboard -- [[https://readspike.com/][Readspike]] - Minimal news aggregator diff --git a/content/wiki/macos.org b/content/wiki/macos.org deleted file mode 100644 index 566e68b..0000000 --- a/content/wiki/macos.org +++ /dev/null @@ -1,148 +0,0 @@ -#+title: macOS -#+date: <2024-05-01> - -Related: - -- [[https://cleberg.net/wiki/hardware/][Hardware]] - -My primary OS. Currently running macOS Sonoma 14. This wiki page contains most -of the apps I have used at one point or another across my different Macbooks. - -(=*=) = My favorites - -** Configuration -*** Disable System Services -- [[https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection][Disabling and Enabling System Integrity Protection]] -- Disable Gatekeeper: =sudo spctl --master-disable= - -*** Dotfiles -These are probably out of date, but they give a general idea of how I configure -my machine. - -#+begin_src conf -# ~/.zshrc -export PATH="/opt/homebrew/bin:$PATH" -export PATH="$HOME/.emacs.d/bin:$PATH" -export EDITOR="/opt/homebrew/bin/emacs -nw" -ZSH_THEME="bureau" -plugins=(git zsh-autosuggestions) -source $ZSH/oh-my-zsh.sh -#+end_src - -#+begin_src conf -# ~/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)" -#+end_src - -#+begin_src conf -# ~/.config/skhd/skhdrc -cmd - return : /Applications/iTerm.app/Contents/MacOS/iTerm2 -cmd + shift - return : /Applications/LibreWolf.app/Contents/MacOS/librewolf -#+end_src - -#+begin_src conf -# ~/.config/yabai/yabairc -yabai -m config \ - mouse_follows_focus off \ - focus_follows_mouse off \ - window_origin_display default \ - window_placement second_child \ - window_zoom_persist on \ - window_shadow on \ - window_animation_duration 0.0 \ - window_animation_frame_rate 120 \ - window_opacity_duration 0.0 \ - active_window_opacity 1.0 \ - normal_window_opacity 0.90 \ - window_opacity off \ - insert_feedback_color 0xffd75f5f \ - split_ratio 0.50 \ - split_type auto \ - auto_balance off \ - top_padding 15 \ - bottom_padding 15 \ - left_padding 15 \ - right_padding 15 \ - window_gap 10 \ - layout bsp \ - mouse_modifier fn \ - mouse_action1 move \ - mouse_action2 resize \ - mouse_drop_action swap -echo "yabai configuration loaded.." -#+end_src - -** Software -*** Browsers -- [[https://librewolf.net/][Librewolf]] (=*=) - Custom version of Firefox, focused on privacy and security - - [[https://bitwarden.com/][Bitwarden]] - An open source password manager - - [[https://darkreader.org/][Dark Reader]] - Dark mode for all the websites - - [[https://libredirect.github.io/][Libredirect]] - Automatic web redirections - - [[https://strongboxsafe.com/][Strongbox]] - Keepass password manager for iOS & macOS - - [[https://ublockorigin.com/][uBlock Origin]] - Free, open-source ad content blocker -- [[https://github.com/ungoogled-software/ungoogled-chromium][Ungoogled Chromium]] - Google Chromium, sans integration with Google -- [[https://www.gnu.org/software/emacs/manual/html_mono/eww.html][eww]] - Emacs Web Wowser, for TUI browsing -- [[https://www.torproject.org/][Tor]] - Browse privately - -*** Command Line Tools -- [[https://github.com/mr-karan/doggo][doggo]] - Command-line DNS Client for Humans -- [[https://github.com/muesli/duf][duf]] - Disk Usage/Free Utility - a better 'df' alternative -- [[https://github.com/bootandy/dust][dust]] - A more intuitive version of du in rust -- [[https://github.com/eza-community/eza][eza]] - A modern alternative to ls -- [[https://github.com/Macchina-CLI/macchina][macchina]] - A system information frontend with an emphasis on performance. -- [[https://github.com/yt-dlp/yt-dlp][yt-dlp]] - A youtube-dl fork with additional features and fixes - -*** Communications -- [[https://element.io/][Element]] - Matrix's default GUI client -- [[https://github.com/tulir/gomuks][gomuks]] - A terminal based Matrix client -- [[https://www.thunderbird.net/][Thunderbird]] (=*=) - An open source email client by Mozilla -- [[https://signal.org/][Signal]] (=*=) - A simple, powerful, and secure messenger - -*** Development -- [[https://www.docker.com/products/docker-desktop/][Docker Desktop]] - Docker containers for your desktop - - [[https://github.com/open-webui/open-webui][open-webui]] - User-friendly WebUI for LLMs -- [[https://iterm2.com/][iTerm2]] (=*=) - The best terminal for macOS, hands down -- [[https://podman-desktop.io/][Podman Desktop]] (=*=) - Open source tool for containers and Kubernetes -- [[https://developer.apple.com/xcode/][Xcode]] - Apple's IDE -- [[https://en.wikipedia.org/wiki/Z_shell][zsh]] (=*=) - My shell preference due to its plugin and theme community - - [[https://github.com/zsh-users/zsh-autosuggestions][zsh-autosuggestions]] - Fish-like autosuggestions for zsh - - [[https://github.com/zsh-users/zsh-syntax-highlighting][zsh-syntax-highlighting]] - Fish shell like syntax highlighting for Zsh - -*** Editors -- [[https://github.com/doomemacs/doomemacs][Doom Emacs]] (=*=) - An Emacs framework, great for working in org-mode -- [[https://obsidian.md/][Obsidian]] - A nice Markdown-based editor based on a "vault" structure. Offers a - paid sync solution and community extensions -- [[https://standardnotes.com/][Standard Notes]] - A simple text editor focused on privacy and security. Offers - a paid sync solution and community extensions -- [[https://vscodium.com/][VSCodium]] - VS Code without proprietary blobs - -*** Media -- [[https://skylum.com/luminar][Luminar]] - Luminar offers top-notch photo editing features- [[https://www.minecraft.net/][Minecraft]] - Block mining simulator -- [[https://netnewswire.com/][NetNewsWire]] - A free and open source RSS reader for Mac, iPhone, and iPad -- [[https://www.plex.tv/][Plex]] (=*=) - Desktop client for the Plex Media Server -- [[https://store.steampowered.com/][Steam]] - The top gaming marketplace for computers -- [[https://transmissionbt.com/][Transmission]] (=*=) - A Fast, Easy and Free Bittorrent Client -- [[https://www.videolan.org/vlc/][VLC]] - A free and open source cross-platform multimedia player - -*** Package Management -- [[https://brew.sh/][Homebrew]] (=*=) - The Missing Package Manager for macOS (or Linux) -- [[https://www.macports.org/][MacPorts]] - A system to compile, install, and manage open source software - -*** Utilities -- [[https://betterdisplay.pro/][BetterDisplay]] - Allows you to tweak a ton of features of built-in and external - screens, such as scaling, configuration overrides, and color/brightness - upscaling -- [[https://bitwarden.com/][Bitwarden]] - An open source password manager -- [[https://icemenubar.app/][Ice]] (=*=)- A powerful menu bar management tool -- [[https://obdev.at/products/littlesnitch/index.html][LittleSnitch]] - Shows all network connections on your Macbook, including system - and privileged services -- [[https://obdev.at/products/microsnitch/index.html][MicroSnitch]] - Camera & microphone monitoring and alterting service -- [[https://mullvad.net/][Mullvad]] (=*=) - A private VPN service -- [[https://ollama.com/][Ollama]] - Run Llama 2, Code Llama, and other models locally on your machine - - [[https://github.com/kghandour/Ollama-SwiftUI][Ollama Swift]] - User Interface made for Ollama.ai using Swift -- [[https://orbstack.dev/][OrbStack]] - A fast and convenient GUI to manage Docker contains and Linux VMs -- [[https://www.raycast.com/][Raycast]] - A collection of tools and shortcuts, an alternative to Spotlight -- [[https://github.com/koekeishiya/skhd][skhd]] (=*=) - Simple hotkey daemon for macOS -- [[https://strongboxsafe.com/][Strongbox]] - Keepass password manager for iOS & macOS -- [[https://syncthing.net/][Syncthing]] (=*=) - Continuous file synchronization -- [[https://www.bresink.com/osx/TinkerTool.html][TinkerTool]] - Unlock hidden configuration options for macOS -- [[https://github.com/koekeishiya/yabai][yabai]] (=*=) - Automatic window tiling diff --git a/content/wiki/services.org b/content/wiki/services.org deleted file mode 100644 index 4484559..0000000 --- a/content/wiki/services.org +++ /dev/null @@ -1,38 +0,0 @@ -#+title: Services & Hosting -#+date: <2025-08-22> - -* Domain Registration - -- [[https://njal.la][Njalla]]: Migrated all domains to Njalla. Some spare domains left on Cloudflare - until I figure out if someone wants them or if I can just delete them - outright. - -* DNS - -- [[https://njal.la][Njalla]]: I am using their name servers and DNS for my domain traffic. -- [[https://mullvad.net][Mullvad]]: Since I use Mullvad's VPN on most of my devices, I am using their DNS - with occasional content blockers enabled. -- [[https://nextdns.io][NextDNS]]: Lastly, I enforce NextDNS's DNS at the router level on my home - network so that any device without a VPN is still slightly protected and not - using my ISP's DNS. - -* Hosting - -** Web - -- N/A: I currently host all of my services on my server at home via Cox's - residential fiber network. Since I have accounts on AWS, Azure, GCP, & IBM for - my job, I use these as temporary backup solutions if I'm away from home and a - service goes down that I need to use. - -** Email - -- [[https://migadu.com/][Migadu]]: I've used a few different email providers over the last few years, but - keep coming back to Migadu due to their drop-dead simplicity and proven - reliability. - -** Source Code - -- [[https://sourcehut.org/][Sourcehut]]: I flip back and forth between Sourcehut and GitHub, but I'm - currently using Sourcehut. I love the minimal form factor and the company's - mission, but tend to use GitHub to explore other's code. diff --git a/content/wiki/sh.org b/content/wiki/sh.org deleted file mode 100644 index a186d17..0000000 --- a/content/wiki/sh.org +++ /dev/null @@ -1,49 +0,0 @@ -#+title: Shell Commands & Scripts -#+date: <2025-03-19> - -* File Loop - -#+begin_src shell -# All files in current directory -for file in *; do echo "${file}"; done - -# Files only -for file in *; do if [ -f "$file" ]; then echo "$file"; fi; done - -# Directories only -for file in *; do if [ -d "$file" ]; then echo "$file"; fi; done -#+end_src - -* Exifdata - -#+begin_src shell -sudo exiftool -r -all= -ext jpg -ext png . -#+end_src - -* Optipng - -#+begin_src shell -optipng -o7 image.png -#+end_src - -* Nginx + Goaccess - -#+begin_src shell -zcat /var/log/nginx/access.log.*.gz | goaccess /var/log/nginx/access.log - -#+end_src - -* Distro Information - -#+begin_src shell -echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel* -#+end_src - -* sed - -#+begin_src shell -# Replace text within file -sed -i '' 's/SEARCH_TEXT/REPLACEMENT_TEXT/g' file.txt - -# Delete empty lines -sed '/^\s*$/d' -#+end_src @@ -44,23 +44,6 @@ :output ".build/blog/index.html" :url "/blog/") -;; Wiki post route -(weblorg-route - :name "wiki" - :input-pattern "content/wiki/*.org" - :template "post.html" - :output ".build/wiki/{{ slug }}.html" - :url "/wiki/{{ slug }}.html") - -;; Wiki index page route -(weblorg-route - :name "wiki-index" - :input-pattern "content/wiki/*.org" - :input-aggregate #'weblorg-input-aggregate-all - :template "wiki.html" - :output ".build/wiki/index.html" - :url "/wiki/") - ;; Page post route (weblorg-route :name "pages" @@ -101,7 +84,6 @@ :output ".build/about/{{ slug }}.html" :url "/about/{{ slug }}.html") - ;; RSS feed route (weblorg-route :name "rss" diff --git a/theme/static/favicon.ico b/theme/static/favicon.ico Binary files differdeleted file mode 100644 index 81f54ad..0000000 --- a/theme/static/favicon.ico +++ /dev/null diff --git a/theme/static/styles.css b/theme/static/styles.css index 1cb4fc6..6ce8031 100644 --- a/theme/static/styles.css +++ b/theme/static/styles.css @@ -1,338 +1,61 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ -html{line-height:1.15;-webkit-text-size-adjust:100%}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}template{display:none}[hidden]{display:none} - -/* CUSTOM CSS */ -:root { - --bg: #EDEDE7; - --bg-bright: #E8D3BE; - --fg: #201E1D; - --link: #810208; - --code: #810208; - --border: #E8D3BE; -} - -@media (prefers-reduced-motion: no-preference) { - :root { - scroll-behavior: smooth; - } -} - body { - background-color: var(--bg); - color: var(--fg); - font-family: Iowan Old Style, Apple Garamond, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - font-size: 1rem; - line-height: 1.5; - max-width: 50em; - margin: 0 auto; - padding: 0 clamp(1rem, 5vw, 3rem); -} - -@media only screen and (min-width: 768px) { - body { - font-size: 1.2rem; - } -} - -@media (min-width: 768px) { - body { - padding: 0 2rem; - } -} - -.site-nav, -footer { - border-color: var(--fg); -} - -footer { - padding-top: 1rem; - margin: 1rem 0; -} - -footer p { - margin: 0; + max-width: 50em; + margin: 1.5rem; } -ul { - list-style-type: "- "; -} - -.site-nav ul { +nav ul { list-style-type: none; display: flex; - align-items: center; padding: 0; } -.site-nav ul li { +nav ul li { margin-right: 0.5rem; } -h1, -h2, -h3, -h4 { - color: var(--fg); -} - -h1 { - font-size: 1.75rem; - font-weight: bold; - margin-top: 1rem; - margin-bottom: 0.75rem; -} - -h2 { - font-size: 1.5rem; - margin-top: 1rem; - margin-bottom: 0.5rem; -} - -h3 { - font-size: 1.25rem; - margin-top: 1rem; - margin-bottom: 0.25rem; -} - -a, -a:visited { - color: var(--link); - text-decoration: underline; - text-decoration-skip-ink: auto; -} - -a:focus-visible { - outline: 2px solid var(--link); - outline-offset: 2px; -} - -a:hover { - background: var(--link); - color: var(--bg); - text-decoration: none; -} - img { border-style: none; width: 100%; } table { - border: 1px solid var(--border); + border: 1px solid #111; border-collapse: collapse; - color: var(--fg); - border-color: var(--bg-bright); - font-size: inherit; width: 100%; } -thead, -th, -tr, -td { - border: 1px solid var(--border); - padding: 0.25rem; -} - pre, pre>code, code { - font-family: - Menlo, - Consolas, - Monaco, - Liberation Mono, - Lucida Console, - monospace; font-size: 0.9rem; } pre { - background-color: var(--bg-bright) !important; + border: 1px solid #111; margin: 0.5rem 0; padding: 0.5rem; overflow-x: auto; } -:not(pre)>code { - color: var(--code); -} - -aside { - background-color: var(--bg-bright); - padding: 1rem; -} - -blockquote { - background-color: var(--bg-bright); - border-left: 5px solid var(--link); - margin: 1rem 0; - padding: 0.5rem 1rem; -} - -blockquote p { - margin: 0; -} - -.post, -.wiki-post { - display: flex; - justify-content: space-between; -} - -.post time { - flex-shrink: 0; - font-style: italic; - margin-right: 0.5rem; - opacity: 0.8; -} - -.wiki-post { - justify-content: space-between; -} - -.wiki-post:first-of-type { - border-bottom: 1px dotted var(--fg); - margin-bottom: 1rem; -} - -.wiki-post p { - margin: 0; -} - -.post-metadata { - border: 1px dotted var(--border); - padding: 1rem; -} - -.post-metadata h1 { - margin: 0; -} - -.post-metadata p { - margin: 0; -} - -.post-metadata time { - font-style: italic; -} - -details { +time { display: block; - margin-top: 1rem; -} - -summary { - display: list-item; - font-weight: bold; -} - -span.tag::before { - content: "#"; -} - -.footnote-definition { - display: flex; - justify-content: flex-start; - align-items: top; - margin: 1rem 0; -} - -.footnote-definition sup { - font-size: inherit; - top: 0; - line-height: inherit; - padding-right: 0.5rem; } -.footnote-definition sup::after { - content: "."; -} - -.footnote-definition p { - display: inline-block; - margin: 0; -} - -.hidden { - display: none; -} - -.post { - display: flex; - flex-direction: row; - margin-bottom: 1rem; -} - -.post-content { - display: flex; - flex-direction: column; -} - -.post-tags { - font-size: 1rem; - margin-top: 0.1rem; -} - -.tag { - margin-right: 0.3rem; - font-style: normal; - opacity: 0.5; -} - -.tag::before { - content: "#"; -} - -.skip-link { - position: absolute; - left: -999px; - top: auto; - width: 1px; - height: 1px; - overflow: hidden; -} - -.skip-link:focus { - left: 1rem; - top: 1rem; - width: auto; - height: auto; - background: var(--bg-bright); - color: var(--fg); - padding: .5rem; - border: 1px solid var(--fg); +:not(pre)>code { + color: #f00; } @media (prefers-color-scheme: dark) { - :root { - --bg: #201E1D; - --bg-bright: #2F2F2D; - --fg: #EDEDE7; - --link: #D9C2A6; - --code: #D9C2A6; - --border: #2F2F2D; - } -} - -@media print { body { - background: #fff; - color: #000; - font-size: 12pt; - padding: 0; - max-width: none; + background-color: #222; + color: #eee; } - - .site-nav, - footer, - aside { - display: none; + + a { + color: #add8e6; } - a::after { - content: " (" attr(href) ")"; - font-size: 90%; + pre { + border-color: #eee; } }
\ No newline at end of file diff --git a/theme/templates/base.html b/theme/templates/base.html index 143f874..4c06aea 100644 --- a/theme/templates/base.html +++ b/theme/templates/base.html @@ -12,29 +12,25 @@ {% if site_description is defined %}<meta name="description" content="{{ site_description }}" >{% endif %} {% if site_keywords is defined %}<meta name="keywords" content="{{ site_keywords }}" >{% endif %} <link rel="stylesheet" href="{{ url_for("static", file="styles.min.css") }}" type="text/css"> - <link rel="icon" type="image/x-icon" href="{{ url_for("static", file="favicon.ico") }}"> + <link rel="icon" type="image/x-icon" href="data:,"> {% block meta %}{% endblock %} {% endblock %} </head> <body> - <a href="#main" class="skip-link">Skip to content</a> - <nav class="site-nav" aria-label="site-nav" role="navigation"> + <nav aria-label="site-nav" role="navigation"> <ul> <li><a href="/">Home</a></li> <li><a href="/about/">About</a></li> <li><a href="/blog/">Blog</a></li> <li><a href="/services/">Services</a></li> - <li><a href="/wiki/">Wiki</a></li> </ul> </nav> - <main id="main">{% block main %}{% endblock %}</main> + <main>{% block main %}{% endblock %}</main> <footer> - <p> - <a href="https://stats.uptimerobot.com/OwOWs7HU0z">Status</a> · - <a href="https://git.cleberg.net/cleberg.net.git" target="_blank" - rel="noopener">Source</a> · - <a href="/feed.xml">RSS</a> - </p> + <a href="https://stats.uptimerobot.com/OwOWs7HU0z">Status</a> · + <a href="https://git.cleberg.net/cleberg.net.git" target="_blank" + rel="noopener">Source</a> · + <a href="/feed.xml">RSS</a> </footer> </body> </html> diff --git a/theme/templates/blog.html b/theme/templates/blog.html index 7e15d86..b42959d 100644 --- a/theme/templates/blog.html +++ b/theme/templates/blog.html @@ -10,19 +10,11 @@ main %} </p> <br> {% for post in posts %} -<div class="post"> - <div class="post-content"> - <a href='{{ url_for("blog", slug=post.slug) }}'>{{ post.title }}</a> - {% if post.filetags %} - <div class="post-tags"> - {% for tag in post.filetags %} - <span class="tag">{{ tag }}</span> - {% endfor %} - </div> - {% endif %} - </div> +<div> <time datetime='{{ post.date | strftime("%Y-%m-%d") }}' >{{ post.date|strftime("%B %d, %Y") }}</time > + <a href='{{ url_for("blog", slug=post.slug) }}'>{{ post.title }}</a> </div> +<br> {% endfor %} {% endblock %} diff --git a/theme/templates/index.html b/theme/templates/index.html index 0ad4d5a..c540e09 100644 --- a/theme/templates/index.html +++ b/theme/templates/index.html @@ -9,21 +9,8 @@ </blockquote> </section> <section> - <h2>Blog Posts</h2> + <h2>Recent Posts</h2> <!-- BEGIN_POSTS --> <!-- END_POSTS --> - <a href="/blog/">All Posts →</a> -</section> - -<section> - <h2>Everything Else</h2> - <ul> - <li><a href="/about/">About</a></li> - <li><a href="https://cv.cleberg.net">Curriculum Vitae</a></li> - <li><a href="/now/">Now</a></li> - <li><a href="/salary/">Salary</a></li> - <li><a href="/services/">Services</a></li> - <li><a href="/wiki/">Wiki</a></li> - </ul> </section> {% endblock %} diff --git a/theme/templates/wiki.html b/theme/templates/wiki.html deleted file mode 100644 index 3bfc10e..0000000 --- a/theme/templates/wiki.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "base.html" %} {% block subtitle %}Wiki | {% endblock %} {% block -main %} -<h1>Wiki</h1> -<p>Use <code>Ctrl + F</code> to search wiki pages for keywords.</p> -{% for post in posts %} -<div class="post"> - <a href='{{ url_for("wiki", slug=post.slug) }}'>{{ post.title }}</a> - <time datetime='{{ post.date | strftime("%Y-%m-%d") }}' - >{{ post.date|strftime("%B %d, %Y") }}</time - > -</div> -{% endfor %} {% endblock %} |