Add uses and table of contents to pages

This commit is contained in:
Daniel Flanagan 2023-07-06 15:00:52 -05:00
parent 2a0d16cc2f
commit e99434ed3d
Signed by: lytedev
GPG key ID: 5B2020A0F9921EF4
7 changed files with 519 additions and 3 deletions

View file

@ -10,6 +10,11 @@ markup:
renderer: renderer:
unsafe: true unsafe: true
tableOfContents:
endLevel: 3
ordered: false
startLevel: 1
# permalinks: # permalinks:
# post: /blog/:title # post: /blog/:title

View file

@ -6,6 +6,7 @@ imageOverlayOpacity: 0.6
heroBackgroundColor: "#0af" heroBackgroundColor: "#0af"
title: About title: About
description: "A little about the man behind this website." description: "A little about the man behind this website."
toc: false
--- ---
My name is Daniel Flanagan. I was born in Virginia (but my family didn't stay My name is Daniel Flanagan. I was born in Virginia (but my family didn't stay

10
content/blog/my-uses.md Normal file
View file

@ -0,0 +1,10 @@
---
date: "2023-07-06T14:32:00-06:00"
title: "Things I Use"
draft: false
toc: false
---
I saw a post recently on ye ole fediverse that linked [this post](https://dev.to/nickytonline/do-you-have-a-uses-page-5b82) and I was inspired to create mine! So I did! <a href="/uses">You can view it here</a>! Enjoy!
<!--more-->

View file

@ -6,6 +6,7 @@ imageOverlayOpacity: 0.7
heroBackgroundColor: "#333" heroBackgroundColor: "#333"
title: Contact title: Contact
description: "Need to get in touch?" description: "Need to get in touch?"
toc: false
--- ---
If you want to reach out, please do so via my email at [daniel@lyte.dev][e], If you want to reach out, please do so via my email at [daniel@lyte.dev][e],

487
content/uses.md Normal file
View file

@ -0,0 +1,487 @@
---
# date: 2017-02-22T14:43:02-06:00
# image: /img/space.jpg
# imageOverlayColor: "#000"
# imageOverlayOpacity: 0.6
# heroBackgroundColor: "#0af"
title: Uses
description: "About my tools, workflow, and other things I use as a software developer."
---
This page lists the tools (both physical and otherwise) that I use to do my job
as a software developer along with some thoughts on them.
For other pages like this from other folks, check out this repository: https://github.com/wesbos/awesome-uses
I'll go through a theoretical "day in the life" of myself working. Mostly to
help me remember all the stuff involved, but also as a means of storytelling and
being imformative. I normally don't drop brand names, but since that's kind of
the point here, I will be doing a _lot_ of name dropping. No links to products
for simplicity, but everything listed here should be searchable. If not, let
me know! I'll try to link to anything free, though, such as software.
I'll break stuff up by topic as things come up so you can skip things that are
not interesting to you.
I also think that in general sharing this much information about yourself isn't
the _best_ idea. However, since I'm confident the bots can't know much more
about me that they already do and this will really only mostly be useful to my
fellow human beings, I think it's worth sharing. I hope you discover some cool
new stuff! Better yet, I hope you recommend me better stuff! I'm always wanting
to try new tools and discover something new that's good at something.
# Good morning!
I wake up when my kids do out of a Purple mattress.
I slip on my PineTime wrist watch, grab my Android smartphone, put on my
prescription glasses, and usually make some tea.
## Mattress: Purple King Size
Sleep is real important, so get a good mattress! Of course, "good" here is
highly subjective, so you will want to do your own research. We usually have a
kid or two join my wife and I in the mattress, so we went with a king size to
account for this. Fantastic decision!
## Smart Watch: PineTime
I love my PineTime! It serves as a good flashlight in the pitch black of a
baby's room and can tell the time. That alone is good enough. However, it can
also vibrate when I get notifications on my phone if I want, which I do use
on occasion. The price is also unbeatable at 25USD and the InfiniTime firmware
keeps improving! I get about two weeks of battery with light use and bluetooth
off. I get about 5 days if I've got notifications on full blast, but they
recently improved the firmware and claim this may now be more than double!
## Smart Phone: ASUS ROG Phone 5S
I bought the phone that I can get root access to with the biggest battery,
nicest display, and a headphone jack. That's pretty much all I want in a phone.
The speakers are a great bonus. The two USB-C ports is actually a super nice
feature since I can connect peripherals while charging without a dock or crazy
dongle. I've also used the video mirroring on the side port to good effect a few
times in a pinch. I love this device so much I've bought it twice. I'm not sure
I've done that for anything else...
### Android-Specific Softeware & Applications
Since I'm discussing my phone, I'll go over phone-specific apps (and some common
with my laptops/desktops) now in no particular order. I have no idea if any of
these have iOS equivalents, but here ya go.
- [Firefox](https://github.com/mozilla-mobile/fenix) as my web browser
- [F-Droid](https://f-droid.org) as an awesome resource for applications
- [Termux](https://github.com/termux/termux-app) for doing Linux-y and terminal-y things on my phone
- [OpenKeychain](https://github.com/open-keychain/open-keychain) for mobile GPG key management
- [Password Store](https://github.com/android-password-store/Android-Password-Store) for interacting with my password manager database
- [Bitwarden](https://github.com/bitwarden/mobile) for interacting with shared password databases
- [Magisk](https://github.com/topjohnwu/Magisk) for managing Android root access
- [NewPipe](https://github.com/TeamNewPipe/NewPipe) for YouTube access without dealing with ads
- [Smart AudioBook Player](https://play.google.com/store/apps/details?id=ak.alizandro.smartaudiobookplayer) for listening to audiobooks
- [Gadgetbridge](https://github.com/Freeyourgadget/Gadgetbridge) for interfacing with my smart watch
- [Obsidian](https://play.google.com/store/apps/details?id=md.obsidian) for reading and writing my notes (sync'd via `git`)
- [Fedilab](https://codeberg.org/tom79/Fedilab) as my mobile fediverse client
- [Weechat-Android](https://github.com/ubergeek42/weechat-android) as my mobile IRC relay interface
- [Tailscale](https://github.com/tailscale/tailscale-android) for accessing my VPN
- Google Wallet for NFC payments (tap-to-pay or contactless) because getting cards out of a wallet is _so_ pre-COVID
- Google Messages for SMS, MMS, and RCS
- Google Maps for meatspace navigation
- Pocket Casts for listening to podcasts
- Spotify for listening to music
# Server Room
Once the day has started and I've said my goodbyes to the fam, I head downstairs
to my basement where my home office is located. I walk past a super overkill
server rack I got on Craigslist. It holds a few things, but the most important
things are my home router/gateway. It's connected to a Google Fiber jack where
I get 500 Mb/sec speeds for about 55USD/month. It's hooked up to a Netgear
16-port gigabit switch which in turn is hooked up to a bunch of little devices,
the most important of which are my home server, WiFi access point, and a really
long cable that goes to my desk where there is another tp-link 8-port gigabit
switch.
The rack also has a bunch of loose cables, peripherals, and other random gear,
like a big knife. I think I was using it to strip some wires. I should get some
easy-mode wire strippers.
## Router & Gateway: Any decent dual-NIC machine
For a long time, I used a Raspberry Pi 4 with a USB3 ethernet adapter. It did
great, too! But then I wanted it (and my ethernet adapter) for another project
and I scored a Datto Alto 2 with 2 NICs built right in on Ebay for like $30.
_Ebay is awesome_.
The Datto Alto 2 is great, but not because of what it is. Any little dual-NIC
box will do nicely. It's running Arch Linux and is configured via the contents
of [this repo](https://git.lyte.dev/lytedev/router) (please be nice to my
network). Having a router I'm in full control of has helped with networking
problems immensely and makes port forwarding stuff a breeze. I'm roughly
familiar with its workings, which makes troubleshooting network problems that
much easier for me.
## WiFi Access Point: Unifi AP-Pro
Fantastic access point that plays nicely with my very DIY home router. Not
really much else to say. I set it up a long time ago and update it with some
regularity, but it just works.
## Ethernet Switches: Anything with enough speed and ports
Seriously I just bought the cheapest switches at Micro Center with enough ports
for me. They're getting hilariously cheap, which is great! Having extra ports
for ad-hoc stuff, like LAN parties, is a must-have for me, even in the age of
WiFi.
_Share the load_.
## Server(s)
I have a lot of servers, but the main server is just an ASUS Chromebox 3 that I
flashed Arch Linux to. It pretty much just runs a big ol' Docker Compose setup
with a sprinkling of other non-Docker'd services. It can do the hardware
transcoding for Jellyfin, my home media server, and just generally does not
break a sweat.
I recently was given a Dell R720xd with 20 hyperthreaded CPU cores (40 threads),
256GB RAM, and 44TB of raw disk space, which I am _very_ excited about, so I'll
probably be moving most stuff to that bad boy, though I expect the power bill to
go up _just a tad_.
I have a few other cheap machines with larger disks at friends and family's
houses for off-site, encrypted backups of important data. I should
_really_ take the time to validate and automate my backup setup, because right
now, I do a completely garbage job of it.
Any paid client workloads are served via redundant mechanisms via cloud
services, generally Digital Ocean, and backed up with whatever the relevant
cloud offering is.
I run the following applications for my home:
- Traefik to reverse proxy all the things
- A homemade chat bot for various things
- Various game servers
- A small service the multiplexes audio and video feeds
- Gitea for https://git.lyte.dev
- Nginx to serve static files for https://files.lyte.dev
- Jellyfin
- Plausible for web analytics
- PostgreSQL as the great database for anything that needs one
- MariaDB for anything too lame to use Postgres
I run a few services from the cloud as well:
- A small DDNS application that machines report to so I have relatively up-to-
date public IP information on most of my devices (this can't run from home for
fairly obvious reasons 😉)
- Various monitoring scripts for specific things
# Starting Work
I sit in a way-too-expensive computer chair at a homemade desk and wiggle my
mouse or slap my keyboard until my workstation wakes up. I punch in my password
and a script fires off to make sure I am ready to work. It does stuff like have
me log in to various work services that need daily (or hourly) authentication
and making sure I remember to review certain reminders and things of that
nature.
I usually spend my work mornings reviewing neat things I read about the night
before on my various feeds -- assuming nothing urgent is happening with work,
which there usually is not. Tinkering with things is super important for
learning. This is usually done by pulling down my notes as sync'd from my phone,
where I do most of my reading.
I may also spend some time playing games or working with electronics in the
workshop area.
Then the standup meeting notification pops up and I spend about 10 minutes
reviewing work stuff so I'm ready for the day. I make sure any audio/visual
settings are reset for the workday from any tinkering I may have done the
previous evening, usually with musical instruments or just general goofing
around with Pipewire.
## Chair: Steelcase Gesture with Headreset
Like a mattress, very subjective. Get your chairs secondhand for way cheap and
you can get some heckin' nice chairs. I spend about 8 hours a day in my chair,
so having a good chair is well worth it, even if the price tag is 1,500USD. 😬
## Desk: Custom
It's a huge slab of butcher's block I got from Home Depot for about 200USD and
I made some _really_ crappy legs to try and hold it up. It's huge and awesome
and by the time I can't move it around by myself anymore is probably a good
indicator for retirement.
You can see an old but decent picture of it here:
https://files.lyte.dev/images/battle-station-2020.jpg
## Mouse: Logitech MX Master 3 and Mionix Avior Pro
The MX Master 3 is my default, go-to mouse. It's great. I don't use any of
the fancy features, really, but the mousewheel on it is _real_ special. Can't
go back.
The Avior Pro I got a long time ago after my last mouse bit the dust. I really
only pull out for gaming on the more competitive side, such as _Counter Strike_.
For pretty much everything else, the MX Master 3 is not noticeably bad -- even
for _Doom Eternal_.
## Keyboard: Sofle Choc RGB
Another very subjective thing! Building and programming your own keyboard is
something that is super fun for heavy keyboard users, which I think is most
people these days. This one is focused on being good for my hands and wrists to
use for long programming sessions. It's split into two wireless pieces so each
hand can move them independently and the keys are laid out in a sensible manner
that fits the human hand. There are other features that are nice, but that I
rarely use.
Here's a picture if you like: https://files.lyte.dev/keyboards/zofle.jpg
## Monitors: Aorus FO48U and 2 Dell U2720Q
I stumbled into having a huge 4K display when COVID had Postmates send our
little Kansas City satellite office packing and I took the meeting hardware
home. At some point, I plugged it in to see what _World of Warcraft_ would look
like in 4K on a big screen and realized it was actually amazing for programming
as well.
Here's roughly my monitor layout, though I usually have two of the secondary
monitors -- one on either side:
https://files.lyte.dev/images/battle-station-2022-10-13.3.jpg
## Laptop: Lenovo T480 and MacBooks
A recent acquisition. It was pretty busted up when I got it, but I bought the
high capacity external battery and some phat sticks of RAM and replaced the
trackpad. A little bit of superglue and a good cleaning later and I've just
fallen in love with this laptop. Sometimes I use it even though I have a really
beefy workstation with what I consider to be a pretty high-end setup -- it just
feels so cozy! All my machines run Arch Linux configured as specified in my
dotfiles repo.
Work provides MacBooks. I'm able to use them as proxies and simply SSH into them
for work-related tasks. They otherwise run Linux virtual machines or serve as
dumb terminals to Linux environments in _the cloud_ where I do the majority of
my work. In general, I'm not a big of macOS and its interface, but I fully
recognize that I'm used to a very bespoke and unique way of interacting with
my computer.
That said, before work really cracked down, the M1 Max MacBook Pro they got
me was one of my favorite machines ever. Insane battery life, performance,
speakers, display, _**and** the ability to run Linux natively on it_ is going to
be really hard to beat. I miss being able to use that thing to its fullest!
## Desktop: Custom Rig
Probably easiest to list the parts. I wanted something quiet, small, and cute.
In hindsight, I think it would have been more practical to just get a bigger and
more expandable system. I'm somehow always out of USB ports.
- **CPU**: AMD Ryzen 9 5950X
- I wanted as many performant cores as possible for as cheaply as possible
and reasonable. I did some math and realized that with the time spend
running unit tests and compiling code, this thing would pay for itself in a
month or two. It did. Love it and looking forward to the next upgrade!
- **GPU**: AMD Radeon RX 6700 XT
- Bought this at the worst possible time, but it's been a great card. It can't
quite keep up with 4K@120Hz for some titles like _Doom Eternal_ on the highest
settings, but it's good enough for my current usage.
- **RAM**: Some 64GB kit that's more than enough for me
- **PSU**: Some small form factor 750W fully modular power supply - it's very
cute because it's so little!
- **CPU Cooler**: Can't remember what it is exactly, but I bought the biggest,
baddest air cooler that would fit with my setup
- **Case**: Cooler Master NR200P
- **Linux SSD**: Sabrent Rocket 1TB PCIe 4.0 NVMe
- I went with PCIe 4.0 since I make pretty heavy use of my disk what with
a great internet connection and all - those Docker images ain't gonna sling
themselves, y'know!
- What is it with "enterprise" Docker images being absolutely gargantuan?!
Why must things suck?! Not that I put anything proprietary to work on my
personal machine(s) of course!
- **Windows SSD**: TeamGroup MP34 2TB PCIe 3.0 NVMe
- Occasionally, I boot to Windows for some games that run better or at all,
like Valorant or Destiny 2
## Other Neat Computing Devices
I also have a PinePhone and a Steam Deck.
The PinePhone was unfortunately a dud for me personally since MMS is still
pretty prevalent in my life in a way that I can't overlook in addition to the
notification setup not quite being up to snuff. I am _very_ excited for the
time when a Linux (you know what I mean) phone is feasible, though! I got the
keyboard addon, though, and since my phone has some radio issues in the US, I
sometimes use it when I need better radio performance, like when camping.
The Steam Deck is absolutely wonderful. Anything I would play with a controller,
I usually just play it on the Steam deck. I haven't touched my Switch since!
Plus, it's Linux, so the tinker factor is there too. Highly recommend one if
you're considering it.
## Headphones: Sony WH-1000XM4
Bought the XM3s on a Black Friday special and fell in love. _Nice_ noise
cancelling head are absolutely wonderful. They made my mom cry.
Work got almost all their engineers the XM4s not long after so I kind of have
2 pair. The XM4s are _much_ nicer with multiple device pairing and the firmware
voice feedback fading out your audio instead of cutting it completely when it
says anything. The XM4s also automatically shut down if they can detect they
aren't on your head for a little bit, which makes the main issue I had with the
XM3s of setting them on my desk without turning them off a non-issue.
## Microphone: Blue Yeti USB
Sounds good enough, but I've got a fancy audio interface now, so I'm wanting to
upgrade at some point. Super low priority, though.
## Audio Interface: MOTU M4
A recent gift. I'm hoping to do more with music and mixing in the future,
though, so it will be welcome at that point! I play drums and would love to
put together a decent electric guitar setup. I also have an Arturia MicroFreak
digital synthesizer which is a lot of fun to play with. I'd love to put some
cool tracks together!
## Keys: Some twist-lock cable keyring
It's nicer than those metal rings you have to snap your thumbnail to get keys
off of. I had one fail after about 10 years and my keys went everywhere, so if
you're gonna use these, I guess you should replace them occasionally or check
them in rather rough ways with some regularity after a certain amount of time.
These are usually karabiner'd to my backpack or a belt loop.
When I'm driving with the family, we take the van, which has one of those
wireless keys, so I can just throw my whole bag in and we can drive. If I'm
driving solo, it's still a good, old insert-and-turn key, so the keys un-
karabiner from the bag or loop and go back on when disembarking.
My keyring is also attached to my wallet. Speaking of which...
## Wallet: Chums Surfshorts Wallet
Cheap, has a zipper to hold keyfobs and cards, and easily attaches to my
keys. Having them all together means I just gotta grab two things, one for each
pocket: phone and wallet-keys.
I haven't tried tap-to-paying through the wallet, which is probably a big
security hazard. 🤷
# Software
When my machine boots up, I'm greeted by the standard Linux login at the
console. No display manager or graphical login or anything. Once I'm logged in,
I usually run `wm` which fires up my window manager, Sway.
When Sway starts, it runs Kitty, my terminal emulator of choice, and Firefox, my
web browser of choice.
## Web Applications
Firefox usually has the following web applications opened:
- Shortwave for email
- Linear.app for personal task management
- Google Calendar for scheduling, planning, event management, etc. for both work
and personal life
- Hacker News for mostly-relevant and -interesting articles to me
- Lobste.rs for reasons similar to Hacker News
- Lemmy.world since Reddit killed API access
- GitHub for open-source and similar work
- Band.us for communicating with friends, family, and church folks
- Discord for communicating with friends, family, "more-hip" church folks, various communities, and other acquaintences
- Element for communicating with friends, coworkers, various communities, and other acquaintencas
- Slack for communicating with friends, coworkers, and various communities
- Spotify for music
- Various applications specific to work, such as Okta, Jira, GitLab, etc.
Ugh, modern messaging is a mess, isn't it?
Tailscale connects all my machines to the same VPN. It's great!
I also frequent these:
- git.lyte.dev for personal code management
- a.lyte.dev for personal online analytics
- bw.lyte.dev for shared password database management
- Shopping:
- ebay.com
- facebook.com/marketplace
- craigslist.com
- amazon.com
- aliexpress.us
I'm sure I'm forgetting a ton here.
## Terminal
Beyond the web stuff, I pretty much live in the terminal. Interacting with my
machine is mostly done via hotkeys as configured for Sway. Otherwise, everything
happens in the terminal. Here are my most popular commands in no particular
order:
- `fish` as my interactive shell (and sometimes for scripts, too!)
- `helix` for text editing
- `git` for code version management (source control)
- I use `git-delta` for viewing diffs
- `pass` for passwords and secrets management
- `ssh` and `mosh` for accessing other machines
- `tmux` and `zellij` for multiplexing terminals
- `htop` and `btm` (or `bottom`) for process management and resource monitoring
- `rtx` for managing various runtimes' and applications' versions
- `sk` (or `skim`) for fuzzy searching for stuff
- `rg` (or `ripgrep`) for specific searching for stuff
- `sd` for most things I used to use `sed` for
- `nnn` for filesystem browsing and navigation
- `bat` for viewing files as a `cat` replacement
- `exa` as an `ls` replacement
- `man` for reading documentation
- `xh` and `curl` for interacting with HTTP endpoints (I want to check out `hurl`, too!)
- `jq`, `gron`, and `jql` for interacting with JSON data
- `rsync` for moving files amongst machines
- `watchexec` for doing stuff as I edit files (like running unit tests anytime code is changed)
- `age` and `sops` for secrets management
- `dua` for disk usage analysis
- `sc-im` for managing two-dimensional, relational data (spreadsheets)
- `pulsemixer` for adjusting audio levels and volumes
- `bluetoothctl` for managing bluetooth devices (also `bluetuith` for a TUI!)
- `weechat` as my IRC client
- This is usually running in a persistent `tmux` or `zellij` session on a
server that I remote into
- I occasionally use the relay functionality that `weechat` offers as well
- `docker` and `podman` for container management
- `hexyl` when I need to look at binary data
- `make` for doing things describe in `Makefile`s
## GUI
From Sway, the only utilities I use are `waybar`, `mako`, and `gammastep`.
`waybar` shows the time, a HUD for my virtual desktops, various volume
information, and a high level overview of system resource usage.
`mako` shows me notifications and let's me interact with them.
`gammastep` makes my displays orange-y at night time.
I use `wofi` for launching applications occasionally. It lists the following
often-used applications:
- Steam for installing and running games
- Slippi for playing Super Smash Brother Melee online!
- Lutris for running World of Warcraft
- `qpwgraph` for routing audio via `wireplumber`
- Inkscape for editing vector graphics (like SVGs) and image files
- Audacity for recording audio
- Krita and GIMP for editing non-vector (bitmap?) graphics and image files
- KDE Connect for when I want phone notifications to be mirrored to my desktop
- Usually only when expecting a specific call or message
- VS Code for pairing with other VS Code folks or troubleshooting a VS Code user's setup
- Thunar for managing files in a GUI
- PulseAudio Volume Control `pavucontrol`

View file

@ -9,5 +9,13 @@
Posted on {{ dateFormat "Jan 2 2006" . }} Posted on {{ dateFormat "Jan 2 2006" . }}
</p> </p>
{{ end }} {{ end }}
{{ if not (isset .Params "toc") }}
<details style="margin-bottom: 2.5em;">
<summary>
<h3>Table of Contents</h3>
</summary>
{{ .TableOfContents }}
</details>
{{ end }}
{{ .Content }} {{ .Content }}
{{ end }} {{ end }}

View file

@ -70,6 +70,8 @@ html,body
padding 0.5em padding 0.5em
line-height 1.6em line-height 1.6em
main:first-child, footer:first-child { margin-top: 0 }
&> main, > footer &> main, > footer
.highlight .highlight
position relative position relative
@ -78,10 +80,13 @@ html,body
border-left solid var(--syntax-bpx) var(--syntax-ledg) border-left solid var(--syntax-bpx) var(--syntax-ledg)
display flex display flex
.highlight, form, ul, ol, p li
margin-top 0.5em
margin-bottom 0.5em
.highlight, form, > ul, > ol, p
margin-top 1em margin-top 1em
margin-bottom 0.25em margin-bottom 0.25em
&:first-child { margin-top: 0 }
h1, h2, h3, h4, h5, h6, details h1, h2, h3, h4, h5, h6, details
margin-top 2em margin-top 2em
@ -92,7 +97,6 @@ html,body
> h1 + p, > h2 + p, > h3 + p, > h4 + p, > h5 + p, > h6 + p { margin-top: 0 } > h1 + p, > h2 + p, > h3 + p, > h4 + p, > h5 + p, > h6 + p { margin-top: 0 }
> h1, > h2, > h3, > h4, > h5, > h6 { color: var(--heading-fg) } > h1, > h2, > h3, > h4, > h5, > h6 { color: var(--heading-fg) }
*:first-child { margin-top: 0 }
h1, h2, h3, h4, h5, h6 h1, h2, h3, h4, h5, h6
position relative position relative