Switching to pure org
This commit is contained in:
9
.gitmodules
vendored
9
.gitmodules
vendored
@@ -1,9 +0,0 @@
|
|||||||
[submodule "themes/ananke"]
|
|
||||||
path = themes/ananke
|
|
||||||
url = https://github.com/theNewDynamic/gohugo-theme-ananke.git
|
|
||||||
[submodule "themes/dark-theme-editor"]
|
|
||||||
path = themes/dark-theme-editor
|
|
||||||
url = https://github.com/JingWangTW/dark-theme-editor.git
|
|
||||||
[submodule "themes/typo"]
|
|
||||||
path = themes/typo
|
|
||||||
url = https://github.com/tomfran/typo.git
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
+++
|
|
||||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
|
||||||
date = {{ .Date }}
|
|
||||||
draft = true
|
|
||||||
+++
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
+++
|
|
||||||
title = "HTTPS @ Home"
|
|
||||||
date = 2022-11-08
|
|
||||||
tags = ["homelab"]
|
|
||||||
draft = false
|
|
||||||
[menu]
|
|
||||||
[menu.main]
|
|
||||||
weight = 2001
|
|
||||||
identifier = "https-home"
|
|
||||||
+++
|
|
||||||
|
|
||||||
I run a lot of services at home.
|
|
||||||
|
|
||||||
This includes, but isn't limited to
|
|
||||||
|
|
||||||
- [ArchiveBox](https://archivebox.io/)
|
|
||||||
- [VaultWarden](https://github.com/dani-garcia/vaultwarden)
|
|
||||||
- [Navidrome](https://github.com/navidrome/navidrome)
|
|
||||||
- [Plex](https://plex.tv)
|
|
||||||
- [LibrePhotos](https://github.com/LibrePhotos/librephotos)
|
|
||||||
- This blog
|
|
||||||
|
|
||||||
and a lot more.
|
|
||||||
|
|
||||||
Pretty much anything that's served up over HTTP is always nice if not
|
|
||||||
necessary to have behind TLS.
|
|
||||||
|
|
||||||
[LetsEncrypt](https://letsencrypt.org/) long ago brought free certs to
|
|
||||||
the masses and there are a lot of tools for automating that nowadays.
|
|
||||||
|
|
||||||
My preferred approach for getting all the unnecessary nonsense I
|
|
||||||
self-host at home behind TLS is [Caddy](https://caddyserver.com).
|
|
||||||
|
|
||||||
I have a super straight forward setup, generally:
|
|
||||||
|
|
||||||
- Run Caddy in a docker container
|
|
||||||
- Create a wildcard CNAME record in my DNS pointing at my home's
|
|
||||||
(effectively) static IP
|
|
||||||
- Add an entry in my Caddyfile for each services I'm running at home on
|
|
||||||
its own subdomain
|
|
||||||
- If it's a service then I add it with a `reverse_proxy` block
|
|
||||||
- If it's a static site (like this) then there's a block for
|
|
||||||
- If it's something I want only accessible on my home network then I put
|
|
||||||
a block like
|
|
||||||
|
|
||||||
<!--listend-->
|
|
||||||
|
|
||||||
```text
|
|
||||||
@local_network {
|
|
||||||
path *
|
|
||||||
remote_ip
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
in the directive. And voila.
|
|
||||||
|
|
||||||
Then tell Caddy to reload the config and I'm done.
|
|
||||||
|
|
||||||
~~+~~ title = "My multiroom audio setup" date = "2022-11-08" ~~+~~
|
|
||||||
|
|
||||||
I've put my home audio solution together out of the following
|
|
||||||
components.
|
|
||||||
|
|
||||||
- [Snapcast](https://github.com/badaix/snapcast)
|
|
||||||
|
|
||||||
- [MPD](https://www.musicpd.org/)
|
|
||||||
|
|
||||||
- [Librespot](https://github.com/librespot-org/librespot)
|
|
||||||
|
|
||||||
- [Shairport-sync](https://github.com/mikebrady/shairport-sync)
|
|
||||||
|
|
||||||
- A mini-PC in my closet running the above software
|
|
||||||
|
|
||||||
- Two Raspberry Pi 4s
|
|
||||||
|
|
||||||
- Four Raspberry Pi Zero Ws
|
|
||||||
|
|
||||||
- Some desktop speakers and some Bluetooth speakers (wired to the Pis)
|
|
||||||
|
|
||||||
Each of the Raspberry Pis is in a room or porch attached to a speaker.
|
|
||||||
|
|
||||||
Snapcast lets me take an audio source and synchronize it across multiple
|
|
||||||
clients. Each of the Raspberry Pis are running a `snapclient` instance
|
|
||||||
and play whatever the `snapserver` instance tells them to.
|
|
||||||
|
|
||||||
Snapcast is setup to send whichever of the streams (MPD, Spotify,
|
|
||||||
Shairport-sync/AirPlay) is playing audio to each of the clients that are
|
|
||||||
connected to it.
|
|
||||||
|
|
||||||
This lets me or anyone else on my WiFi network play directly on one or
|
|
||||||
more of the speakers - each named for the room that they're in using
|
|
||||||
either Spotify, AirPlay, picking from my own music collection or by
|
|
||||||
pointing at a URL (like to a podcast episode).
|
|
||||||
|
|
||||||
This works out great and we've used it at home for the past year.
|
|
||||||
|
|
||||||
I'd like to get the podcast experience to a more seamless place but it's
|
|
||||||
pretty OK right now using AirMusic on my phone to play audio to the
|
|
||||||
speakers over AirPlay.
|
|
||||||
74
hugo.toml
74
hugo.toml
@@ -1,74 +0,0 @@
|
|||||||
baseURL = 'https://willfullyobtuse.com/'
|
|
||||||
languageCode = 'en-us'
|
|
||||||
title = 'circumlocution'
|
|
||||||
theme = 'typo'
|
|
||||||
|
|
||||||
[taxonomies]
|
|
||||||
tag = 'tags'
|
|
||||||
|
|
||||||
# Google analytics code
|
|
||||||
googleAnalytics = ""
|
|
||||||
|
|
||||||
[params]
|
|
||||||
# Meta description
|
|
||||||
description = "point free notes"
|
|
||||||
|
|
||||||
# Appearance settings
|
|
||||||
theme = 'light'
|
|
||||||
colorPalette = 'default'
|
|
||||||
hideHeader = false
|
|
||||||
|
|
||||||
# Intro on main page, content is markdown
|
|
||||||
homeIntroTitle = 'Hi!'
|
|
||||||
homeIntroContent = """
|
|
||||||
Notes, journal, details, rants, clarifications
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Collection to display on home
|
|
||||||
homeCollectionTitle = 'Posts'
|
|
||||||
homeCollection = 'posts'
|
|
||||||
|
|
||||||
# Lists parameters
|
|
||||||
paginationSize = 100
|
|
||||||
listSummaries = true
|
|
||||||
listDateFormat = '2 Jan 2006'
|
|
||||||
|
|
||||||
# Breadcrumbs
|
|
||||||
breadcrumbs = true
|
|
||||||
|
|
||||||
# Social icons
|
|
||||||
[[params.social]]
|
|
||||||
name = "Mastodon"
|
|
||||||
url = "https://hachyderm.io/@eightball"
|
|
||||||
|
|
||||||
[[params.social]]
|
|
||||||
name = "github"
|
|
||||||
url = "https://github.com/jbrechtel"
|
|
||||||
|
|
||||||
# Main menu pages
|
|
||||||
[[params.menu]]
|
|
||||||
name = "home"
|
|
||||||
url = "/"
|
|
||||||
|
|
||||||
[[params.menu]]
|
|
||||||
name = "posts"
|
|
||||||
url = "/posts"
|
|
||||||
|
|
||||||
[[params.menu]]
|
|
||||||
name = "about"
|
|
||||||
url = "/about"
|
|
||||||
|
|
||||||
# Syntax highligth on code blocks
|
|
||||||
[markup]
|
|
||||||
[markup.highlight]
|
|
||||||
style = 'algol'
|
|
||||||
|
|
||||||
# Giscus comments
|
|
||||||
[params.giscus]
|
|
||||||
enable = false
|
|
||||||
repo = "user/repo"
|
|
||||||
repoid = "repoId"
|
|
||||||
category = "General"
|
|
||||||
categoryid = "categoryId"
|
|
||||||
mapping = "pathname"
|
|
||||||
theme = "preferred_color_scheme"
|
|
||||||
@@ -1,15 +1,23 @@
|
|||||||
#+HUGO_BASE_DIR: ../
|
|
||||||
#+HUGO_SECTION: posts
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:EXPORT_OPTIONS: author:nil
|
#+author: James Brechtel
|
||||||
|
#+email: me@jamesbrechtel.com
|
||||||
|
#+html_head: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/holiday.css@0.11.2" />
|
||||||
|
#+html_head_holiday: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/holiday.css@0.11.2" />
|
||||||
|
#+html_head_mvp: <link rel="stylesheet" href="https://unpkg.com/mvp.css">
|
||||||
|
#+html_head_pico: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css">
|
||||||
|
#+html_head_tacit: <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/yegor256/tacit@gh-pages/tacit-css-1.8.1.min.css"/>
|
||||||
|
#+options: html-link-use-abs-url:nil html-postamble:nil
|
||||||
|
#+options: html-preamble:t html-scripts:nil html-style:t
|
||||||
|
#+options: html5-fancy:t tex:t
|
||||||
|
#+options: author:t broken-links:mark c:nil creator:nil f:t tasks:t toc:nil todo:t
|
||||||
|
#+language: en
|
||||||
:END:
|
:END:
|
||||||
* Homelab :homelab:
|
* Homelab :homelab:
|
||||||
** DONE HTTPS @ Home
|
** HTTPS @ Home
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:EXPORT_FILE_NAME: https-at-home
|
#+keywords: homelab
|
||||||
:EXPORT_DATE: 2022-11-08
|
#+export_file_name: https-at-home
|
||||||
:EXPORT_HUGO_MENU: :menu "main"
|
#+subtitle:
|
||||||
:EXPORT_AUTHOR:
|
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
I run a lot of services at home.
|
I run a lot of services at home.
|
||||||
@@ -57,52 +65,11 @@ in the directive. And voila.
|
|||||||
|
|
||||||
Then tell Caddy to reload the config and I'm done.
|
Then tell Caddy to reload the config and I'm done.
|
||||||
|
|
||||||
+++ title = "My multiroom audio setup" date = "2022-11-08" +++
|
** My multiroom audio setup
|
||||||
|
|
||||||
I've put my home audio solution together out of the following
|
|
||||||
components.
|
|
||||||
|
|
||||||
- [[https://github.com/badaix/snapcast][Snapcast]]
|
|
||||||
|
|
||||||
- [[https://www.musicpd.org/][MPD]]
|
|
||||||
|
|
||||||
- [[https://github.com/librespot-org/librespot][Librespot]]
|
|
||||||
|
|
||||||
- [[https://github.com/mikebrady/shairport-sync][Shairport-sync]]
|
|
||||||
|
|
||||||
- A mini-PC in my closet running the above software
|
|
||||||
|
|
||||||
- Two Raspberry Pi 4s
|
|
||||||
|
|
||||||
- Four Raspberry Pi Zero Ws
|
|
||||||
|
|
||||||
- Some desktop speakers and some Bluetooth speakers (wired to the Pis)
|
|
||||||
|
|
||||||
Each of the Raspberry Pis is in a room or porch attached to a speaker.
|
|
||||||
|
|
||||||
Snapcast lets me take an audio source and synchronize it across multiple
|
|
||||||
clients. Each of the Raspberry Pis are running a =snapclient= instance
|
|
||||||
and play whatever the =snapserver= instance tells them to.
|
|
||||||
|
|
||||||
Snapcast is setup to send whichever of the streams (MPD, Spotify,
|
|
||||||
Shairport-sync/AirPlay) is playing audio to each of the clients that are
|
|
||||||
connected to it.
|
|
||||||
|
|
||||||
This lets me or anyone else on my WiFi network play directly on one or
|
|
||||||
more of the speakers - each named for the room that they're in using
|
|
||||||
either Spotify, AirPlay, picking from my own music collection or by
|
|
||||||
pointing at a URL (like to a podcast episode).
|
|
||||||
|
|
||||||
This works out great and we've used it at home for the past year.
|
|
||||||
|
|
||||||
I'd like to get the podcast experience to a more seamless place but it's
|
|
||||||
pretty OK right now using AirMusic on my phone to play audio to the
|
|
||||||
speakers over AirPlay.
|
|
||||||
** TODO My multiroom audio setup
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:EXPORT_FILE_NAME: snapcast
|
#+keywords: homelab snapcast audio
|
||||||
:EXPORT_DATE: 2022-11-08
|
#+export_file_name: home-multiroom-audio
|
||||||
:EXPORT_HUGO_MENU: :menu "main"
|
#+subtitle:
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
I've put my home audio solution together out of the following
|
I've put my home audio solution together out of the following
|
||||||
@@ -147,9 +114,9 @@ speakers over AirPlay.
|
|||||||
* Tooling :tooling:
|
* Tooling :tooling:
|
||||||
** vi modal editing in most places
|
** vi modal editing in most places
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:EXPORT_FILE_NAME: vi-mode-everywhere
|
#+keywords: vim
|
||||||
:EXPORT_DATE: 2022-11-13
|
#+export_file_name: vi-editing-everywhere
|
||||||
:EXPORT_HUGO_MENU: :menu "main"
|
#+subtitle:
|
||||||
:END:
|
:END:
|
||||||
For my sake, I prefer to have Vim bindings in as many places as
|
For my sake, I prefer to have Vim bindings in as many places as
|
||||||
possible.
|
possible.
|
||||||
@@ -183,9 +150,11 @@ $endif
|
|||||||
|
|
||||||
* AWS :aws:
|
* AWS :aws:
|
||||||
** Structed and passively collected metrics via AWS CloudWatch
|
** Structed and passively collected metrics via AWS CloudWatch
|
||||||
:EXPORT_FILE_NAME: cloudwatch-metric-filters
|
:PROPERTIES:
|
||||||
:EXPORT_DATE: 2022-11-12
|
#+keywords: aws
|
||||||
:EXPORT_HUGO_MENU: :menu "main"
|
#+export_file_name: aws-cloudwatch-metric-filters
|
||||||
|
#+subtitle:
|
||||||
|
:END:
|
||||||
|
|
||||||
AWS is a vast and sprawling set of services. It can be hard to find the
|
AWS is a vast and sprawling set of services. It can be hard to find the
|
||||||
hidden gems like this one so I wanted to point this one out.
|
hidden gems like this one so I wanted to point this one out.
|
||||||
@@ -248,9 +217,11 @@ effort.
|
|||||||
** TODO My job description
|
** TODO My job description
|
||||||
** TODO Managing expectations
|
** TODO Managing expectations
|
||||||
** TODO Just let people be wrong
|
** TODO Just let people be wrong
|
||||||
:EXPORT_FILE_NAME: trust-through-failure
|
:PROPERTIES:
|
||||||
:EXPORT_DATE: 2024-10-01
|
#+keywords: advice relationships people
|
||||||
:EXPORT_HUGO_MENU: :menu "main"
|
#+export_file_name: let-people-fail
|
||||||
|
#+subtitle:
|
||||||
|
:END:
|
||||||
|
|
||||||
Warning: This, like most things, will involve a fair bit of projection.
|
Warning: This, like most things, will involve a fair bit of projection.
|
||||||
|
|
||||||
@@ -269,3 +240,31 @@ If that demonstrates distrust then
|
|||||||
It's not enough that you simply _do_ trust someone else to get the benefits, you need to show it. I think this is the part that many people skip or ignore.
|
It's not enough that you simply _do_ trust someone else to get the benefits, you need to show it. I think this is the part that many people skip or ignore.
|
||||||
|
|
||||||
This is, of course, true in general.
|
This is, of course, true in general.
|
||||||
|
|
||||||
|
** Very simple CSS frameworks
|
||||||
|
:PROPERTIES:
|
||||||
|
#+keywords: CSS
|
||||||
|
#+export_file_name: css-frameworks
|
||||||
|
#+subtitle:
|
||||||
|
:END:
|
||||||
|
|
||||||
|
*** Minimal CSS / fancy resets
|
||||||
|
I really like simple drop-in CSS resets like the one I use for this site.
|
||||||
|
|
||||||
|
At the time of writing, I'm using [[https://picocss.com/][Pico]] but I also considered [[https://yegor256.github.io/tacit/][tacit]]
|
||||||
|
|
||||||
|
The idea is that they provide nice default styling of HTML elements out of the box without the need to reference any specific classes.
|
||||||
|
|
||||||
|
The idea works well for sites that are much more content than layout - like this one.
|
||||||
|
|
||||||
|
Using tacit is a matter of incluing this link tag in the page's HEAD element:
|
||||||
|
|
||||||
|
#+BEGIN_SRC html
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css">
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+BEGIN_SRC haskell
|
||||||
|
doThings :: String -> IO ()
|
||||||
|
doThings name = do
|
||||||
|
putStrLn name
|
||||||
|
#+END_SRC
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
./scripts/hugo
|
|
||||||
rsync --delete-after -avzr public/ verin.brechtel:/nas/www/willfullyobtuse.com
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
docker run -p 1313:1313 --rm --workdir=/site -v .:/site hugomods/hugo:base hugo $@
|
|
||||||
Submodule themes/dark-theme-editor deleted from c1e4ccc366
Submodule themes/typo deleted from 4fe47ad315
Reference in New Issue
Block a user