This commit is contained in:
sloane 2025-01-03 15:20:36 -05:00
parent 47f8d7af14
commit 8b7b452230
Signed by: sloanelybutsurely
SSH key fingerprint: SHA256:8SBnwhl+RY3oEyQxy1a9wByPzxWM0x+/Ejc+sIlY5qQ
41 changed files with 456 additions and 98 deletions

9
.gitignore vendored
View file

@ -1,7 +1,6 @@
.DS_Store
compiled/
/build/
*.html
*.css
# nanoc things
/tmp
/output
crash.log

View file

@ -1,2 +1,2 @@
[tools]
racket = "8.15"
ruby = "3.4.1"

13
Gemfile Normal file
View 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
View 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

View file

@ -1,22 +1 @@
# 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
View 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

1
content/assets/tufte.min.css vendored Normal file

File diff suppressed because one or more lines are too long

11
content/index.md Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View file

@ -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...).
}