Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
8b7b452230 |
9
.gitignore
vendored
|
@ -1,7 +1,6 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
compiled/
|
# nanoc things
|
||||||
/build/
|
/tmp
|
||||||
|
/output
|
||||||
*.html
|
crash.log
|
||||||
*.css
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[tools]
|
[tools]
|
||||||
racket = "8.15"
|
ruby = "3.4.1"
|
||||||
|
|
13
Gemfile
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
gem 'logger', '~> 1.6'
|
||||||
|
gem 'nanoc', '~> 4.13'
|
||||||
|
|
||||||
|
group 'nanoc' do
|
||||||
|
gem 'kramdown', '~> 2.5', '>= 2.5.1'
|
||||||
|
gem 'nokogiri', '~> 1.18', '>= 1.18.1'
|
||||||
|
gem 'webrick', '~> 1.8', '>= 1.8.1'
|
||||||
|
gem 'nanoc-live', '~> 1.1'
|
||||||
|
end
|
128
Gemfile.lock
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
addressable (2.8.7)
|
||||||
|
public_suffix (>= 2.0.2, < 7.0)
|
||||||
|
adsf (1.5.2)
|
||||||
|
rack (>= 1.0.0, < 4.0.0)
|
||||||
|
rackup (~> 2.1)
|
||||||
|
adsf-live (1.5.2)
|
||||||
|
adsf (~> 1.3)
|
||||||
|
em-websocket (~> 0.5)
|
||||||
|
eventmachine (~> 1.2)
|
||||||
|
listen (~> 3.0)
|
||||||
|
base64 (0.2.0)
|
||||||
|
coderay (1.1.3)
|
||||||
|
colored (1.2)
|
||||||
|
concurrent-ruby (1.3.4)
|
||||||
|
cri (2.15.12)
|
||||||
|
ddmetrics (1.1.0)
|
||||||
|
ddplugin (1.0.3)
|
||||||
|
diff-lcs (1.5.1)
|
||||||
|
em-websocket (0.5.3)
|
||||||
|
eventmachine (>= 0.12.9)
|
||||||
|
http_parser.rb (~> 0)
|
||||||
|
eventmachine (1.2.7)
|
||||||
|
ffi (1.17.1)
|
||||||
|
ffi (1.17.1-arm64-darwin)
|
||||||
|
http_parser.rb (0.8.0)
|
||||||
|
immutable-ruby (0.2.0)
|
||||||
|
concurrent-ruby (~> 1.1)
|
||||||
|
sorted_set (~> 1.0)
|
||||||
|
json_schema (0.21.0)
|
||||||
|
kramdown (2.5.1)
|
||||||
|
rexml (>= 3.3.9)
|
||||||
|
listen (3.9.0)
|
||||||
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
|
logger (1.6.4)
|
||||||
|
memo_wise (1.10.0)
|
||||||
|
method_source (1.1.0)
|
||||||
|
mini_portile2 (2.8.8)
|
||||||
|
nanoc (4.13.3)
|
||||||
|
addressable (~> 2.5)
|
||||||
|
colored (~> 1.2)
|
||||||
|
nanoc-checking (~> 1.0, >= 1.0.2)
|
||||||
|
nanoc-cli (= 4.13.3)
|
||||||
|
nanoc-core (= 4.13.3)
|
||||||
|
nanoc-deploying (~> 1.0)
|
||||||
|
parallel (~> 1.12)
|
||||||
|
tty-command (~> 0.8)
|
||||||
|
tty-which (~> 0.4)
|
||||||
|
nanoc-checking (1.0.5)
|
||||||
|
nanoc-cli (~> 4.12, >= 4.12.5)
|
||||||
|
nanoc-core (~> 4.12, >= 4.12.5)
|
||||||
|
nanoc-cli (4.13.3)
|
||||||
|
cri (~> 2.15)
|
||||||
|
diff-lcs (~> 1.3)
|
||||||
|
nanoc-core (= 4.13.3)
|
||||||
|
pry
|
||||||
|
zeitwerk (~> 2.1)
|
||||||
|
nanoc-core (4.13.3)
|
||||||
|
base64 (~> 0.2)
|
||||||
|
concurrent-ruby (~> 1.1)
|
||||||
|
ddmetrics (~> 1.0)
|
||||||
|
ddplugin (~> 1.0)
|
||||||
|
immutable-ruby (~> 0.1)
|
||||||
|
json_schema (~> 0.19)
|
||||||
|
memo_wise (~> 1.5)
|
||||||
|
slow_enumerator_tools (~> 1.0)
|
||||||
|
tty-platform (~> 0.2)
|
||||||
|
zeitwerk (~> 2.1)
|
||||||
|
nanoc-deploying (1.0.2)
|
||||||
|
nanoc-checking (~> 1.0)
|
||||||
|
nanoc-cli (~> 4.11, >= 4.11.15)
|
||||||
|
nanoc-core (~> 4.11, >= 4.11.15)
|
||||||
|
nanoc-live (1.1.0)
|
||||||
|
adsf-live (~> 1.4)
|
||||||
|
listen (~> 3.0)
|
||||||
|
nanoc-cli (~> 4.11, >= 4.11.14)
|
||||||
|
nanoc-core (~> 4.11, >= 4.11.14)
|
||||||
|
nokogiri (1.18.1)
|
||||||
|
mini_portile2 (~> 2.8.2)
|
||||||
|
racc (~> 1.4)
|
||||||
|
nokogiri (1.18.1-arm64-darwin)
|
||||||
|
racc (~> 1.4)
|
||||||
|
parallel (1.26.3)
|
||||||
|
pastel (0.8.0)
|
||||||
|
tty-color (~> 0.5)
|
||||||
|
pry (0.15.2)
|
||||||
|
coderay (~> 1.1)
|
||||||
|
method_source (~> 1.0)
|
||||||
|
public_suffix (6.0.1)
|
||||||
|
racc (1.8.1)
|
||||||
|
rack (3.1.8)
|
||||||
|
rackup (2.2.1)
|
||||||
|
rack (>= 3)
|
||||||
|
rb-fsevent (0.11.2)
|
||||||
|
rb-inotify (0.11.1)
|
||||||
|
ffi (~> 1.0)
|
||||||
|
rbtree (0.4.6)
|
||||||
|
rexml (3.4.0)
|
||||||
|
set (1.1.1)
|
||||||
|
slow_enumerator_tools (1.1.0)
|
||||||
|
sorted_set (1.0.3)
|
||||||
|
rbtree
|
||||||
|
set (~> 1.0)
|
||||||
|
tty-color (0.6.0)
|
||||||
|
tty-command (0.10.1)
|
||||||
|
pastel (~> 0.8)
|
||||||
|
tty-platform (0.3.0)
|
||||||
|
tty-which (0.5.0)
|
||||||
|
webrick (1.9.1)
|
||||||
|
zeitwerk (2.7.1)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
arm64-darwin-24
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
kramdown (~> 2.5, >= 2.5.1)
|
||||||
|
logger (~> 1.6)
|
||||||
|
nanoc (~> 4.13)
|
||||||
|
nanoc-live (~> 1.1)
|
||||||
|
nokogiri (~> 1.18, >= 1.18.1)
|
||||||
|
webrick (~> 1.8, >= 1.8.1)
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
2.6.2
|
21
README.md
|
@ -1,22 +1 @@
|
||||||
# sloane.sh
|
# sloane.sh
|
||||||
|
|
||||||
## Setup
|
|
||||||
|
|
||||||
```sh
|
|
||||||
brew install --cask racket
|
|
||||||
raco pkg install pollen
|
|
||||||
```
|
|
||||||
|
|
||||||
## Working on the site
|
|
||||||
|
|
||||||
```sh
|
|
||||||
raco pollen start site
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building the site
|
|
||||||
|
|
||||||
```sh
|
|
||||||
mkdir -p build
|
|
||||||
raco pollen render site
|
|
||||||
raco pollen publish site build
|
|
||||||
```
|
|
||||||
|
|
33
Rules
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
compile '/**/*.html' do
|
||||||
|
filter :tufte
|
||||||
|
layout '/default.*'
|
||||||
|
|
||||||
|
if item.identifier =~ '**/index.*'
|
||||||
|
write item.identifier.to_s
|
||||||
|
else
|
||||||
|
write item.identifier.without_ext + '/index.html'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# This is an example rule that matches Markdown (.md) files, and filters them
|
||||||
|
# using the :kramdown filter. It is commented out by default, because kramdown
|
||||||
|
# is not bundled with Nanoc or Ruby.
|
||||||
|
#
|
||||||
|
compile '/**/*.md' do
|
||||||
|
filter :sidenotes
|
||||||
|
filter :kramdown
|
||||||
|
filter :tufte
|
||||||
|
layout '/default.*'
|
||||||
|
|
||||||
|
if item.identifier =~ '**/index.*'
|
||||||
|
write item.identifier.without_ext + '.html'
|
||||||
|
else
|
||||||
|
write item.identifier.without_ext + '/index.html'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
passthrough '/**/*'
|
||||||
|
|
||||||
|
layout '/**/*', :erb
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
1
content/assets/tufte.min.css
vendored
Normal file
11
content/index.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
title: sloane.sh
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hi, I'm Sloane!
|
||||||
|
|
||||||
|
I'm a professional software engineer and an amateur musician, photographer, wife, chef, and pet mom.
|
||||||
|
|
||||||
|
## [My Tools](/uses)
|
||||||
|
|
||||||
|
If you're interested in the tools I use you can check out my [usesthis.com](https://usesthis.com) style self-interview.
|
101
content/stylesheet.css
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
font-family: Georgia, Palatino, serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link,
|
||||||
|
a:visited {
|
||||||
|
color: #f30;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #f90;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main {
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
top: 40px;
|
||||||
|
left: 280px;
|
||||||
|
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main h1 {
|
||||||
|
font-size: 40px;
|
||||||
|
font-weight: normal;
|
||||||
|
|
||||||
|
line-height: 40px;
|
||||||
|
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main p {
|
||||||
|
margin: 20px 0;
|
||||||
|
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main ul, #main ol {
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main li {
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main ul li {
|
||||||
|
list-style-type: square;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar {
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
top: 40px;
|
||||||
|
left: 20px;
|
||||||
|
width: 200px;
|
||||||
|
|
||||||
|
padding: 20px 20px 0 0;
|
||||||
|
|
||||||
|
border-right: 1px solid #ccc;
|
||||||
|
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar h2 {
|
||||||
|
text-transform: uppercase;
|
||||||
|
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
letter-spacing: 1px;
|
||||||
|
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul {
|
||||||
|
list-style-type: none;
|
||||||
|
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar li {
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
68
content/uses.md
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
---
|
||||||
|
title: "“Uses This”"
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="epigraph">
|
||||||
|
<blockquote cite="https://usesthis.com/about/#:~:text=Have%20you%20considered%20added%20a%20%2Fuses%2F%20page%20to%20your%20own%20site%2C%20answering%20the%20same%20questions%3F"><p>
|
||||||
|
Have you considered adding a <code>/uses/</code> page to your own site, answering the same questions?
|
||||||
|
</p></blockquote>
|
||||||
|
<footer>
|
||||||
|
<a href="https://wafer.baby/@d">Daniel</a> of <a href="https://usesthis.com/about/#:~:text=Have%20you%20considered%20added%20a%20%2Fuses%2F%20page%20to%20your%20own%20site%2C%20answering%20the%20same%20questions%3F">usesthis.com</a>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
## Who are you, and what do you do?
|
||||||
|
|
||||||
|
I'm a professional software engineer and once engineering manager. I work a day job but I'm also working with a good friend and former boss to bring [screen.garden](https://screen.garden), a real-time collaboration tool for PKMs and the web, to life.
|
||||||
|
|
||||||
|
In my free time I sing with a local queer TTBB chorus, play table-top RPGs, watch Formula 1, and play video games.
|
||||||
|
|
||||||
|
## What hardware do you use?
|
||||||
|
|
||||||
|
I work atop a sit-stand desk I bought when I first started working remotely in 2017. It stays in the "sit" position 99% of the time. For work I use whatever machine my employer provides. Right now that's a 14in M3 MacBook Pro. Personally, I have an M1 MacBook Air which I love. A single thunderbolt cable runs from either of those machines to a [CalDigit TS4](https://www.caldigit.com/thunderbolt-station-4/) which connects it to power, ethernet, a USB hub, and my display.
|
||||||
|
|
||||||
|
I use just the one display, a [GIGABYTE M32U](https://www.gigabyte.com/Monitor/M32U), which is a 32 inch, 4k, 144Hz monitor. Whenever someone is talking about replacing their monitor I always bring up refresh rate. It's one of those things that sounds like you wouldn't notice but it actually makes looking at a screen for most of your day a lot more pleasant. I've sat a no-name-brand monitor light and a Logitech webcam atop it.
|
||||||
|
|
||||||
|
I have a collection of mechanical keyboards ([ErgoDox EZ](https://ergodox-ez.com/), [Keyboardio Atreus](https://shop.keyboard.io/products/keyboardio-atreus), to name a couple) which all live in a drawer while I type away on my [Glorious GMMK Pro](https://www.gloriousgaming.com/products/glorious-gmmk-pro-75-barebone-black) with [Glorious Panda tactile switches](https://www.gloriousgaming.com/products/glorious-panda-mechanical-switches?variant=37691905933487). I think Glorious's branding is a bit "cringe" to say the least but they were the only custom keyboard option I could get same-day at the nearby Micro Center when I needed to replace my [Pok3r](https://drop.com/buy/vortex-poker-iii-compact-keyboard) following a coffee spill incident.
|
||||||
|
|
||||||
|
I talk to my coworkers and friends through a [Blue Yeti mic](https://www.bestbuy.com/site/blue-microphones-blue-yeti-professional-multi-pattern-usb-condenser-microphone/9737441.p?skuId=9737441) that I bought when a former employer gave everyone a couple hundred dollars for work-from-home equipment in early 2020 (despite my having already worked from my home my entire tenure there).
|
||||||
|
|
||||||
|
At the edges of my desk are piles of scrunchies, a couple hair clips, my AirPods Pros, a pair of Sennheiser HD 600s, my iPhone 14 Pro Max (I always go "Max" or "Plus" for the extra battery life), an [Aquaphor lip balm stick](https://www.aquaphorus.com/products/lip-care/lip-repair-stick), some hand lotion, and a nice candle.
|
||||||
|
|
||||||
|
Away from my desk I have a collection of cameras but the one I use the most is my Leica M6 which I usually shoot with a Voigtlander Nokton Classic 35mm f/1.4. I digitize my negatives with a beat-up Sony a6000, a cheap macro lens, and a [Valoi easy35](https://www.valoi.co/easy35).
|
||||||
|
|
||||||
|
I have a couple Apple TV 4ks to stream content from the cloud and also the Plex Media Server running on a Synology NAS. I have a couple TVs in different rooms but the Xbox Series X stays connected to the 65 inch LG C1 OLED (once again which a high refresh rate).
|
||||||
|
|
||||||
|
Finally, currently sitting on my nightstand wrapped in some FiiO IEMs is a 5th iPod Classic (aka an iPod Video) whose hard disk I've [replaced with a 512gb microSD card](https://www.iflash.xyz/). It's really incredible how well it still works.
|
||||||
|
|
||||||
|
## And what software?
|
||||||
|
|
||||||
|
These days I'm macOS all-the-way. I'm fully integrated into the ecosystem and the ergonomics and reliability of development on the platform is unparalleled in my opinion. Obviously I use a ton of software so I'll limit (mostly) to things I keep pinned to my dock (although most of the time I'm launching things from [Alfred](https://www.alfredapp.com/)):
|
||||||
|
|
||||||
|
|
||||||
|
- [Firefox](https://www.mozilla.org/en-US/firefox/new/) to browse the web
|
||||||
|
- [Fantastical](https://flexibits.com/fantastical) to manage several calendar accounts. I could just use Calendar.app but there are few features (like travel time and automatic event merging) that keep me renewing my subscription.
|
||||||
|
- Mail.app for emails...
|
||||||
|
- [Things 3](https://culturedcode.com/things/) makes sure I get things done. I switched from an Android phone to an iPhone many years ago just so I could use Things while I was away from my computer.
|
||||||
|
- [Kitty](https://sw.kovidgoyal.net/kitty/) to run all of my command line apps. I always work within a `tmux` session so my terminal emulator doesn't really matter all that much (because I'm never using tabs or splits or whatever) but Kitty is quick and the [alternative icon](https://github.com/DinkDonk/kitty-icon) I use for it is really cute. I'm a vim user (neovim really) and have been since 2015. My neovim setup could be its own post...
|
||||||
|
- Music - I switch between two libraries: 1. My local library which I sync with my iPod and 2. My iCloud, Apple Music backed library
|
||||||
|
- [Dash 6](https://kapeli.com/dash) (usually via Alfred) to quickly reference documentation. Elixir / Hex package docs support is incredible
|
||||||
|
- [Obsidian](https://obsidian.md) for personal, work, and TTRPG notes. I keep my plugins list slip with just Templater, DataView, Tasks, Periodic Notes, and of course screen.garden.
|
||||||
|
- [Readwise Reader](https://readwise.io/read) as my read-later service
|
||||||
|
}
|
||||||
|
|
||||||
|
I have to shout-out Lightroom with [Negative Lab Pro](https://www.negativelabpro.com/) for converting scans/photos of film negatives.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## What would be your dream setup?
|
||||||
|
|
||||||
|
I've obviously spoiled myself already so I'd keep most things the same but...
|
||||||
|
|
||||||
|
I'd love a thunderbolt KVM of some kind that would let me swap _quickly_ between machines at the press of a button. I also feel like I'd benefit from a larger desk.
|
||||||
|
|
||||||
|
I think about replacing my webcam with the Sony a6000 and replacing that with a newer, higher resolution mirrorless camera.
|
||||||
|
|
||||||
|
I'm really hoping the ARM desktop / server market continues to become more accessible to the consumer market because the Synology NAS is looking a little worse-for-wear these days. I've thought about replacing it with a custom build x64 machine but the additional power consumption and heat keep me from doing it (I'm spoiled by these Apple ARM machines...).
|
28
layouts/default.html.erb
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title><%= @item[:title] %></title>
|
||||||
|
<link rel="stylesheet" href="/assets/tufte.min.css">
|
||||||
|
|
||||||
|
<!-- you don't need to keep this, but it's cool for stats! -->
|
||||||
|
<meta name="generator" content="Nanoc <%= Nanoc::VERSION %>">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<article class="h-entry">
|
||||||
|
<h1 class="p-name"><%= @item[:title] %></h1>
|
||||||
|
<%= yield %>
|
||||||
|
<footer>
|
||||||
|
<div class="h-card p-author">
|
||||||
|
<a class="p-name u-url" href="https://sloane.sh">sloane</a>
|
||||||
|
</div>
|
||||||
|
<% if @item[:created_at] %>
|
||||||
|
<time class="dt-published" datetime="<%= @item[:created_at]&.iso8601 %>">
|
||||||
|
<%= @item[:created_at]&.strftime('%B %d, %Y') %>
|
||||||
|
</time>
|
||||||
|
<% end %>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
|
</body>
|
||||||
|
</html>
|
29
lib/filters/sidenotes.rb
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
Nanoc::Filter.define(:sidenotes) do |content, params|
|
||||||
|
@footnotes = {}
|
||||||
|
|
||||||
|
# First pass: collect all footnote definitions
|
||||||
|
content.scan(/\[\^([^\]]+)\]:\s*(.+?)($|\n\n)/) do |ref, text, _|
|
||||||
|
@footnotes[ref] = text.strip
|
||||||
|
end
|
||||||
|
|
||||||
|
# Second pass: replace footnote references with sidenote markup
|
||||||
|
result = content.gsub(/\[\^([^\]]+)\](?!:)/) do |match|
|
||||||
|
ref = $1
|
||||||
|
next match unless @footnotes[ref] # Skip if no matching footnote definition
|
||||||
|
|
||||||
|
<<~HTML
|
||||||
|
<label for="sn-#{ref}"
|
||||||
|
class="margin-toggle sidenote-number">
|
||||||
|
</label>
|
||||||
|
<input type="checkbox"
|
||||||
|
id="sn-#{ref}"
|
||||||
|
class="margin-toggle"/>
|
||||||
|
<span class="sidenote">
|
||||||
|
#{@footnotes[ref]}
|
||||||
|
</span>
|
||||||
|
HTML
|
||||||
|
end
|
||||||
|
|
||||||
|
# Finally, remove the original footnote definitions
|
||||||
|
result.gsub(/\[\^([^\]]+)\]:\s*(.+?)($|\n\n)/, '')
|
||||||
|
end
|
28
lib/filters/tufte.rb
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Nanoc::Filter.define(:tufte) do |content, params|
|
||||||
|
doc = Nokogiri::HTML.fragment(content)
|
||||||
|
|
||||||
|
# Convert to array to avoid modifying during iteration
|
||||||
|
nodes = doc.children.to_a
|
||||||
|
|
||||||
|
# Track the current section we're building
|
||||||
|
current_section = nil
|
||||||
|
|
||||||
|
# Process each node
|
||||||
|
nodes.each do |node|
|
||||||
|
if node.name == 'h2'
|
||||||
|
# Start a new section
|
||||||
|
current_section = Nokogiri::XML::Node.new('section', doc)
|
||||||
|
node.add_previous_sibling(current_section)
|
||||||
|
current_section.add_child(node)
|
||||||
|
elsif current_section && node.name != 'h2'
|
||||||
|
# Add this node to the current section
|
||||||
|
current_section.add_child(node)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
doc.to_html.gsub(/\[\^([^\]]+)\]:\s*(.+)$/) do |match|
|
||||||
|
ref = $1
|
||||||
|
note_content = $2.strip
|
||||||
|
"<span class=\"sidenote\">#{note_content}</span>"
|
||||||
|
end
|
||||||
|
end
|
11
nanoc.yaml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# A list of file extensions that Nanoc will consider to be textual rather than
|
||||||
|
# binary. If an item with an extension not in this list is found, the file
|
||||||
|
# will be considered as binary.
|
||||||
|
text_extensions: [ 'adoc', 'asciidoc', 'atom', 'coffee', 'css', 'erb', 'haml', 'handlebars', 'hb', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'ms', 'mustache', 'org', 'php', 'rb', 'rdoc', 'sass', 'scss', 'slim', 'tex', 'txt', 'xhtml', 'xml' ]
|
||||||
|
|
||||||
|
prune:
|
||||||
|
auto_prune: true
|
||||||
|
|
||||||
|
data_sources:
|
||||||
|
- type: filesystem
|
||||||
|
encoding: utf-8
|
|
@ -1,71 +0,0 @@
|
||||||
#lang pollen
|
|
||||||
|
|
||||||
◊title{"Uses This"}
|
|
||||||
|
|
||||||
◊div[#:class "epigraph"]{
|
|
||||||
◊blockquote[#:cite "https://usesthis.com/about/#:~:text=Have%20you%20considered%20added%20a%20%2Fuses%2F%20page%20to%20your%20own%20site%2C%20answering%20the%20same%20questions%3F"]{
|
|
||||||
Have you considered adding a ◊code{/uses/} page to your own site, answering the same questions?
|
|
||||||
◊footer{
|
|
||||||
◊link["https://wafer.baby/@d"]{Daniel} of ◊link["https://usesthis.com/about/#:~:text=Have%20you%20considered%20added%20a%20%2Fuses%2F%20page%20to%20your%20own%20site%2C%20answering%20the%20same%20questions%3F"]{usesthis.com}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
◊section{
|
|
||||||
◊heading{Who are you, and what do you do?}
|
|
||||||
I'm a professional software engineer and once engineering manager. I work a day job but I'm also working with a good friend and former boss to bring ◊link["https://screen.garden"]{screen.garden}, a real-time collaboration tool for PKMs and the web, to life.
|
|
||||||
|
|
||||||
In my free time I sing with a local queer TTBB chorus, play table-top RPGs, watch Formula 1, and play video games.
|
|
||||||
}
|
|
||||||
|
|
||||||
◊section{
|
|
||||||
◊heading{What hardware do you use?}
|
|
||||||
|
|
||||||
I work atop a sit-stand desk I bought when I first started working remotely in 2017. It stays in the "sit" position 99% of the time. For work I use whatever machine my employer provides. Right now that's a 14in M3 MacBook Pro. Personally, I have an M1 MacBook Air which I love. A single thunderbolt cable runs from either of those machines to a ◊link["https://www.caldigit.com/thunderbolt-station-4/"]{CalDigit TS4} which connects it to power, ethernet, a USB hub, and my display.
|
|
||||||
|
|
||||||
I use just the one display, a ◊link["https://www.gigabyte.com/Monitor/M32U"]{GIGABYTE M32U}, which is a 32 inch, 4k, 144Hz monitor. Whenever someone is talking about replacing their monitor I always bring up refresh rate. It's one of those things that sounds like you wouldn't notice but it actually makes looking at a screen for most of your day a lot more pleasant. I've sat a no-name-brand monitor light and a Logitech webcam atop it.
|
|
||||||
|
|
||||||
I have a collection of mechanical keyboards (◊link["https://ergodox-ez.com/"]{ErgoDox EZ}, ◊link["https://shop.keyboard.io/products/keyboardio-atreus"]{Keyboardio Atreus}, to name a couple) which all live in a drawer while I type away on my ◊link["https://www.gloriousgaming.com/products/glorious-gmmk-pro-75-barebone-black"]{Glorious GMMK Pro} with ◊link["https://www.gloriousgaming.com/products/glorious-panda-mechanical-switches?variant=37691905933487"]{Glorious Panda tactile switches}. I think Glorious's branding is a bit "cringe" to say the least but they were the only custom keyboard option I could get same-day at the nearby Micro Center when I needed to replace my ◊link["https://drop.com/buy/vortex-poker-iii-compact-keyboard"]{Pok3r} following a coffee spill incident.
|
|
||||||
|
|
||||||
I talk to my coworkers and friends through a ◊link["https://www.bestbuy.com/site/blue-microphones-blue-yeti-professional-multi-pattern-usb-condenser-microphone/9737441.p?skuId=9737441"]{Blue Yeti mic} that I bought when a former employer gave everyone a couple hundred dollars for work-from-home equipment in early 2020 (despite my having already worked from my home my entire tenure there).
|
|
||||||
|
|
||||||
At the edges of my desk are piles of scrunchies, a couple hair clips, my AirPods Pros, a pair of Sennheiser HD 600s, my iPhone 14 Pro Max (I always go "Max" or "Plus" for the extra battery life), an ◊link["https://www.aquaphorus.com/products/lip-care/lip-repair-stick"]{Aquaphor lip balm stick}, some hand lotion, and a nice candle.
|
|
||||||
|
|
||||||
Away from my desk I have a collection of cameras but the one I use the most is my Leica M6 which I usually shoot with a Voigtlander Nokton Classic 35mm f/1.4. I digitize my negatives with a beat-up Sony a6000, a cheap macro lens, and a ◊link["https://www.valoi.co/easy35"]{Valoi easy35}.
|
|
||||||
|
|
||||||
I have a couple Apple TV 4ks to stream content from the cloud and also the Plex Media Server running on a Synology NAS. I have a couple TVs in different rooms but the Xbox Series X stays connected to the 65 inch LG C1 OLED (once again which a high refresh rate).
|
|
||||||
|
|
||||||
Finally, currently sitting on my nightstand wrapped in some FiiO IEMs is a 5th iPod Classic (aka an iPod Video) whose hard disk I've ◊link["https://www.iflash.xyz/"]{replaced with a 512gb microSD card}. It's really incredible how well it still works.
|
|
||||||
}
|
|
||||||
|
|
||||||
◊section{
|
|
||||||
◊heading{And what software?}
|
|
||||||
|
|
||||||
These days I'm macOS all-the-way. I'm fully integrated into the ecosystem and the ergonomics and reliability of development on the platform is unparalleled in my opinion. Obviously I use a ton of software so I'll limit (mostly) to things I keep pinned to my dock (although most of the time I'm launching things from ◊link["https://www.alfredapp.com/"]{Alfred}):
|
|
||||||
|
|
||||||
◊unordered-list{
|
|
||||||
◊item{◊link["https://www.mozilla.org/en-US/firefox/new/"]{Firefox} to browse the web}
|
|
||||||
◊item{◊link["https://flexibits.com/fantastical"]{Fantastical} to manage several calendar accounts. I could just use Calendar.app but there are few features (like travel time and automatic event merging) that keep me renewing my subscription.}
|
|
||||||
◊item{Mail.app for emails...}
|
|
||||||
◊item{◊link["https://culturedcode.com/things/"]{Things 3} makes sure I get things done. I switched from an Android phone to an iPhone many years ago just so I could use Things while I was away from my computer.}
|
|
||||||
◊item{◊link["https://sw.kovidgoyal.net/kitty/"]{Kitty} to run all of my command line apps. I always work within a ◊code{tmux} session so my terminal emulator doesn't really matter all that much (because I'm never using tabs or splits or whatever) but Kitty is quick and the ◊link["https://github.com/DinkDonk/kitty-icon"]{alternative icon} I use for it is really cute. I'm a vim user (neovim really) and have been since 2015. My neovim setup could be its own post...}
|
|
||||||
◊item{Music - I switch between two libraries: 1. My local library which I sync with my iPod and 2. My iCloud, Apple Music backed library}
|
|
||||||
◊item{◊link["https://kapeli.com/dash"]{Dash 6} (usually via Alfred) to quickly reference documentation. Elixir / Hex package docs support is incredible}
|
|
||||||
◊item{◊link["https://obsidian.md"]{Obsidian} for personal, work, and TTRPG notes. I keep my plugins list slip with just Templater, DataView, Tasks, Periodic Notes, and of course screen.garden.}
|
|
||||||
◊item{◊link["https://readwise.io/read"]{Readwise Reader} as my read-later service}
|
|
||||||
}
|
|
||||||
|
|
||||||
I have to shout-out Lightroom with ◊link["https://www.negativelabpro.com/"]{Negative Lab Pro} for converting scans/photos of film negatives.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
◊section{
|
|
||||||
◊heading{What would be your dream setup?}
|
|
||||||
I've obviously spoiled myself already so I'd keep most things the same but...
|
|
||||||
|
|
||||||
I'd love a thunderbolt KVM of some kind that would let me swap ◊em{quickly} between machines at the press of a button. I also feel like I'd benefit from a larger desk.
|
|
||||||
|
|
||||||
I think about replacing my webcam with the Sony a6000 and replacing that with a newer, higher resolution mirrorless camera.
|
|
||||||
|
|
||||||
I'm really hoping the ARM desktop / server market continues to become more accessible to the consumer market because the Synology NAS is looking a little worse-for-wear these days. I've thought about replacing it with a custom build x64 machine but the additional power consumption and heat keep me from doing it (I'm spoiled by these Apple ARM machines...).
|
|
||||||
}
|
|