]> git.r.bdr.sh - rbdr/r.bdr.sh/commitdiff
Add CI + columns
authorRuben Beltran del Rio <redacted>
Sat, 7 Oct 2023 14:45:58 +0000 (16:45 +0200)
committerRuben Beltran del Rio <redacted>
Sat, 7 Oct 2023 14:45:58 +0000 (16:45 +0200)
.build.yml [new file with mode: 0644]
_layout.html
api.gmi
css/style.css
flat_bezel.gmi
index.gmi
lyricli.gmi
min_sizes.gmi

diff --git a/.build.yml b/.build.yml
new file mode 100644 (file)
index 0000000..3eade29
--- /dev/null
@@ -0,0 +1,21 @@
+image: archlinux
+packages:
+  - make
+  - rust
+  - rsync
+sources:
+  - git@git.sr.ht:~rbdr/page
+  - git@git.sr.ht:~rbdr/unlimited.pizza
+secrets:
+  - 21c73f87-a944-4560-a616-2dfd558c72da
+tasks:
+  - build_page: |
+      cd page
+      make -e profile=release
+  - generate_page: |
+      cd unlimited.piza
+      ../page/target/release/page
+  - sync_html: |
+      rsync -r unlimited.pizza_html/ deploy@barthes.unlimited.pizza:/var/www/www
+  - sync_gemini: |
+      rsync -r unlimited.pizza_gemini/ deploy@barthes.unlimited.pizza:/var/gemini/content
index c1514ac2a210966dca4f92ffc7d898ca4d1d959f..6a90b1a736929cd1b0803dd45f754533f51725db 100644 (file)
   <body>
     <header>
       <h1>
-        <canvas width=100 height=100></canvas>
+        <canvas width="100" height="100"></canvas>
         <a href="/">unlimited.pizza</a>
       </h1>
     </header>
     <p><a href="gemini://gemini.unlimited.pizza">=> ♊️ This page is better consumed via gemini</a></p>
-    {{ content }}
+    <main class="columned">
+      {{ content }}
+    </main>
   </body>
 </html>
diff --git a/api.gmi b/api.gmi
index d0d99ad5285587383853068ca6e3e386174135ec..60cc62a102cb1bfcb08364ed956325fa8cf7d147 100644 (file)
--- a/api.gmi
+++ b/api.gmi
@@ -1,9 +1,11 @@
 --- title: /api.html
 --- description: API Notation
-# API Notation
+## API Notation
 
 API Notation is a language-agnostic notation to share the public API of components in code. It was created to standardize software specification documents in teams that need to review code across several languages.
 
+## Reference
+The notation allows describing objects or modules, with properties, events and methods along with their types.
 ```
 // Anything after two forward slashes is a comment
 NameOfClass.WithPossibleNamespace
@@ -17,45 +19,38 @@ NameOfClass.WithPossibleNamespace
   <- dispatched events (instance)
   :: class method
    # instance method
-
+----
 Other symbols
   => returns
   #> throws
 [xx] optional
 <xx> data type
-
-Recommended order: class first, then sockets, then instance. Internally:
-Properties, events, methods.
 ```
 
-Or, with some examples:
+## Example
+With this artificial example, you can see how to use it for more complex cases:
 
 ```
 // Definitions start with object / module / class names, with namespaces
 // separated by periods. Types are marked between angular brackets.
 Definitions.Models.Post
   // Properties.
-  +static_property <Type>
-  -instance_property <Types<Can<Be<Nested>>>>
+  +static_property &lt;Type>
+  -instance_property &lt;Types&lt;Can&lt;Be&lt;Nested>>>>
   // Methods. Parameters are listed in parentheses, and comma separated.
   // Optional values are inside brackets
   // => defines return values
   // #> defines thrown exceptions, can be comma separated.
-  ::static_methods(parameter_label <Type>) => ReturnValueType #> BadTimesException,UnknownError
-  #update(text <String>, [options] <GlobalOptions.tOptions>) => Promise<Void>
+  ::static_methods(parameter_label &lt;Type>) => ReturnValueType #> BadTimesException,UnknownError
+  #update(text &lt;String>, [options] &lt;GlobalOptions.tOptions>) => Promise&lt;Void>
+  // Function types can include parameter lists, returns and throws as well.
+  #transform&lt;T>( Function&lt;T>(payload &lt;T>) => &lt;T>, announce &lt;Bool>) => &lt;Bool>
   // Listened Events
-  +>static_listener(parameters_expected <Bool>)
+  +>static_listener(parameters_expected &lt;Bool>)
   ->instance_listener()
-  ~>network_events(peer <Networking.Peer>)
+  ~>network_events(peer &lt;Networking.Peer>)
   // Emitted Events
-  <+emitted_statically(payload <StaticEventPayload>)
-  <-emitted_by_instance(reason <String>, code <Int>)
-  <~emitted_through_network(text <String>)
-```
-
-When defining function types, you may use parameter lists, returns and throws notation as well.
-
-```
-HypotheticalModule
-  #transform<T>( Function<T>(payload <T>) => <T>, announce <Bool>) => <Bool>
+  &lt;+emitted_statically(payload &lt;StaticEventPayload>)
+  &lt;-emitted_by_instance(reason &lt;String>, code &lt;Int>)
+  &lt;~emitted_through_network(text &lt;String>)
 ```
index dae306da4531490abab9d5b59a6281b4a1c48cba..d5d21792f4e1457e3daa225c64998f5164d6f6bd 100644 (file)
@@ -2,22 +2,50 @@ body {
   font-family: "Times New Roman", Times, serif;
   line-height: 1.6;
   letter-spacing: 0.02em;
-  column-count: auto;
-  column-width: 15em;
 }
 
-header, p:first-of-type, pre:first-of-type { column-span: all }
+@media only screen and (min-width: 500px) {
+  body {
+    overflow-x: auto;
+  }
 
-h1, h2, h3 { font-weight: normal }
+  .columned {
+    height: calc(100vh - 180px);
+    width: max-content;
+  }
 
-h2 { break-before: column }
+  .columned .h2 {
+    float: left;
+    margin: 0 40px;
+    height: calc(100vh - 180px);
+  }
 
-p { break-inside: avoid }
+  .columned h2 {
+    width: 14.6em;
+  }
 
+  .columned .h3, .columned p {
+    width: 22em;
+    break-inside: prevent;
+  }
+
+  .columned pre { width: 25em }
+}
+
+blockquote, p { max-width: 45em }
+pre { max-width: 55em }
+blockquote {
+  border-left: 4px solid #ccc;
+  padding-left: 10px;
+}
+
+h1, h2, h3 { font-weight: normal }
+br { display: none }
 pre {
   font-family: Monaco, monospace;
   font-size: 14px;
   background-color: #eee;
+  overflow-x: auto;
 }
 
 canvas {
index b0dfeb4cba159b1845037518285290372b4a7222..b47c2eeedfcbcdef46f6ce9232436bd6d4c95f3c 100644 (file)
@@ -24,4 +24,4 @@ You may need to allow the plugin to run in "Privacy &amp; Security" in your syst
 => /files/flat_bezel/Flat_Bezel-1.1.0.qsplugin.tar.gz Flat Bezel.qsplugin 1.1.0
 
 1.0.0 - Initial release
-=> /files/flat_bezel/Flat_Bezel-1.0.0.qsplugin.tar.gz">Flat Bezel.qsplugin 1.0.0
+=> /files/flat_bezel/Flat_Bezel-1.0.0.qsplugin.tar.gz Flat Bezel.qsplugin 1.0.0
index 7c5b996fa53b48b570690517b7c722caf7dbe5ab..467b4863877d5de3e5e843164a4ec437c87ed32d 100644 (file)
--- a/index.gmi
+++ b/index.gmi
@@ -1,9 +1,10 @@
 --- title: /index.html
 --- description: unlimited.pizza - ruben beltran del río surfs the internet: programming, music, fun times, hugs, bad jokes, and unlimited pizza
+## 
 ```Unlimited Pizza
-┬ ┬┌┐┌┬  ┬┌┬┐┬┌┬┐┌─┐┌┬┐╔═╗╦╔═╗╔═╗╔═╗
-│ │││││  │││││ │ ├┤  ││╠═╝║╔═╝╔═╝╠═╣
-└─┘┘└┘┴─┘┴┴ ┴┴ ┴ └─┘─┴┘╩  ╩╚═╝╚═╝╩ ╩
+┬ ┬┌┐┌┬  ┬┌┬┐┬┌┬┐┌─┐┌┬┐ ╔═╗╦╔═╗╔═╗╔═╗
\94\82 â\94\82â\94\82â\94\82â\94\82â\94\82  â\94\82â\94\82â\94\82â\94\82â\94\82 â\94\82 â\94\9câ\94¤  â\94\82â\94\82â\97\8fâ\95 â\95\90â\95\9dâ\95\91â\95\94â\95\90â\95\9dâ\95\94â\95\90â\95\9dâ\95 â\95\90â\95£
+└─┘┘└┘┴─┘┴┴ ┴┴ ┴ └─┘─┴┘ ╩  ╩╚═╝╚═╝╩ ╩
 ```
 
 The personal capsule of Rubén Beltrán del Río
@@ -11,51 +12,57 @@ The personal capsule of Rubén Beltrán del Río
 => /gemlog/ 📓 Blog / Gemlog
 => /pub.txt 🔑 Public GPG Key
 => gemini://gemini.unlimited.pizza/guestbook 📒 Guestbook
+=> https://pixelfed.de/minoltacos 📷 Pictures I've taken
+=> https://hachyderm.io/@myspace 💭 Social Media™
 => mailto:ruben+up@unlimited.pizza ✉️ Send me an e-mail
 
 ## Apps
-
-Do, a task manager for iOS and MacOs that makes you write a journal entry when the task is done.
+### Do
+A task manager for iOS and MacOs that makes you write a journal entry when the task is done.
 => https://do.tranquil.systems/ do.tranquil.systems
 
-Map, A MacOS app that lets you create wardley maps using text.
+### Map
+A MacOS app that lets you create wardley maps using text.
 => https://map.tranquil.systems/ map.tranquil.systems
 
-Ritmo, An iOS and MacOS app that helps you maintain a healthy balance.
-=> https://map.tranquil.systems/ ritmo.tranquil.systems
+### Ritmo
+An iOS and MacOS app that helps you maintain a healthy balance.
+=> https://ritmo.tranquil.systems/ ritmo.tranquil.systems
 
-Lyricli, a command line tool to print the lyrics of your current Apple Music or Spotify track
+### Lyricli
+A command line tool to print the lyrics of your current Apple Music or Spotify track
 => /lyricli.gmi ./lyricli.gmi
 => https://git.sr.ht/~rbdr/lyricli lyricli source code.
 
 ## Libraries
-
-Patterns, MacPaint style pattern views for SwiftUI
+### Patterns
+MacPaint style pattern views for SwiftUI
 => https://git.sr.ht/~rbdr/patterns Patterns source code
 
-Serpentity, an entity-component-system framework for Javascript
+### Serpentity
+An entity-component-system framework for Javascript
 => https://sr.ht/~rbdr/serpentity Serpentity source code
 => https://sr.ht/~rbdr/serpentity-lib Serpentity Shared Library source code
 
-Grafn, flow based programming library for javascript.
+### Grafn
+Flow based programming library for javascript.
 => https://git.sr.ht/~rbdr/grafn Grafn source code
 
-Cologne, log multiplexer for javascript with no dependencies.
+### Cologne
+Log multiplexer for javascript with no dependencies.
 => https://git.sr.ht/~rbdr/cologne Cologne source code
 
-## Plugins
+## Plugins I
 
 ### Flat Bezel.qsplugin
+A UI Plugin for quicksilver inspired by the classic Bezel with a modern macOS look and SF Symbols.
 
-A UI Plugin for quicksilver
-
-=> ./flat_bezel.gmi Flat Bezel Homepage
+=> ./flat_bezel.gmi ./flat_bezel.gmi
 
 ### API Notation
-
 A syntax for notating component APIs in text documents. We provide a tree-sitter parser and a neovim plugin.
 
-=> ./api.gmi API Notation definition
+=> ./api.gmi ./api.gmi
 => https://git.sr.ht/~rbdr/tree-sitter-api-notation tree-sitter parser and neovim plugin.
 
 Older versions of the plugin exist for other editors, though they support an older version of the notation definition.
@@ -65,14 +72,14 @@ Older versions of the plugin exist for other editors, though they support an old
 => https://git.sr.ht/~rbdr/api-notation-atom Syntax for atom
 => https://git.sr.ht/~rbdr/api-notation.tmLanguage Syntax for sublime text
 
-### NGINX Office Hours
+## II
 
+### NGINX Office Hours
 A victory for the server's labor rights: An nginx module that allows you to serve your content only during office hours.
 
 => https://git.sr.ht/~rbdr/ngx_http_office_hours_filter_module ngx_http_office_hours_filter_module
 
 ### Junction
-
 A browser extension that lets you start audio calls on any URL.
 
 => https://junction.unlimited.pizza Junction
@@ -97,63 +104,83 @@ To listen online, you can also find it in the world wide web.
 => https://music.apple.com/de/artist/ben-beltran/1338665508?l=en Apple Music
 => https://soundcloud.com/benbeltran Soundcloud
 
-## More of my things
-
-=> https://pixelfed.de/minoltacos 📷 Pictures I've taken
-=> https://hachyderm.io/@myspace 💭 Social Media™
+## Etc I
 
-## Etc
+### Min Sizes
+(2023) Minimum window sizes for assorted mac software
+=> ./min_sizes.gmi ./min_sizes.gmi
 
-Page (2023): A static website generator.
+### Page
+(2023) A static website generator.
 => gemini://gemini.unlimited.pizza/gemlog/1681763713661/introducing-page.gmi Gemlog entry about page.
 => https://git.sr.ht/~rbdr/page  Page source code
 
-Prompt (2021): Drawing prompts on demand.
+### Prompt
+(2021) Drawing prompts on demand.
 => https://prompt.unlimited.pizza/ prompt.unlimited.pizza
 => https://git.sr.ht/~rbdr/prompt Prompt source code
 
-Corona Regeln (2021): Up-to-date corona rules for Berlin. Refresh frequently.
+### Corona Regeln
+(2021) Up-to-date corona rules for Berlin. Refresh frequently.
 => https://corona.unlimited.pizza/ corona.unlimited.pizza
 => https://git.sr.ht/~rbdr/corona-regeln Corona Regeln source code
 
-Flower (2018): 🌹🌸🌺💐🌼🌻🌷 draw a flower rotating a cube 🌷🌻🌼💐🌺🌸🌹
+## II
+
+### Flower
+(2018) 🌹🌸🌺💐🌼🌻🌷 draw a flower rotating a cube 🌷🌻🌼💐🌺🌸🌹
 => https://flower.unlimited.pizza/ flower.unlimited.pizza
 
-Sorting Hat & Renderer (2017): Reads your brain and places you in a category based on your mental activity
+### Sorting Hat
+(2017) Reads your brain and places you in a category based on your mental activity
 => https://git.sr.ht/~rbdr/sorting-hat Sorting hat source
 => https://git.sr.ht/~rbdr/sorting-hat-renderer Sorting hat renderer source code
 
-Dasein (2017): Ephemeral posts experiment: the posts stay alive as the conversation continues, but disappear shortly after activity stops.
+### Dasein
+(2017) Ephemeral posts experiment: the posts stay alive as the conversation continues, but disappear shortly after activity stops.
 => https://git.sr.ht/~rbdr/dasein Dasein source code
 
-Frames (2017): 🆒
+### Frames
+(2017) 🆒
 => https://frames.unlimited.pizza/ frames.unlimited.pizza
 
-Dead Drop (2017, Spanish): Marca un número de 📞 y deja un mensaje secreto, o escucha algo al azar.
+### Dead Drop
+(2017, Spanish) Marca un número de 📞 y deja un mensaje secreto, o escucha algo al azar.
 => https://git.sr.ht/~rbdr/dead-drop Dead Drop source code
 
-Tomato Sauce (2016): a random work of ansi art via telnet. Better with 24-bit enabled terminals.
+## III
+
+### Tomato Sauce
+(2016) a random work of ansi art via telnet. Better with 24-bit enabled terminals.
 => telnet:barthes.unlimited.pizza:7777 telnet barthes.unlimited.pizza 7777
 => https://git.sr.ht/~rbdr/tomato-sauce Tomato Sauce source code
 
-LGTM (2016): Looks Good To Me! 👍
+### LGTM
+(2016) Looks Good To Me! 👍
 => https://lgtm.unlimited.pizza/ lgtm.unlimited.pizza
 => https://git.sr.ht/~rbdr/lgtm lgtm source code
 
-Heart (2016): ❤️💜💙💛💚
+### Heart
+(2016) ❤️💜💙💛💚
 => https://heart.unlimited.pizza/ heart.unlimited.pizza
 
-Generador de Insultos (2015, Spanish): Un generador de insultos multi-usos que te da un insulto nuevo cada vez que lo cargas.
+### Generador de Insultos
+(2015, Spanish) Un generador de insultos multi-usos que te da un insulto nuevo cada vez que lo cargas.
 => https://insultos.unlimited.pizza/ insultos.unlimited.pizza
 => https://git.sr.ht/~rbdr/generador-de-insultos generador de insultos source code
 
-Grita (2010, Spanish): Comparte texto anónimamente y distribuyelo con QR codes y URLs cortas.
+## IV
+
+### Grita
+(2010, Spanish) Comparte texto anónimamente y distribuyelo con QR codes y URLs cortas.
 => https://git.sr.ht/~rbdr/grita grita source code
 
-Polarity (2009): Top-down arena shooter game with magnetism.
+### Polarity
+(2009) Top-down arena shooter game with magnetism.
 => ./files/polarity.zip polarity.zip
 
-Pico Engine (2009): Platform game engine with lua scripting. 
+### Pico Engine
+(2009) Platform game engine with lua scripting. 
 => https://git.sr.ht/~rbdr/pico-engine pico source code
 
 ---
index 455c92caa62dcb1d8dc497203637e55c9d345c45..c109c873d149c213e685ff94a0f8aa8fe30bf43d 100644 (file)
@@ -2,14 +2,13 @@
 --- description: "Lyricli (lrc), a command line lyrics finder"
 ## lyricli (lrc)
 
-Command line tool that shows lyrics for your currently playing song in the command line
+Command line tool that shows lyrics for your currently playing song in the terminal, supports spotify and apple music.
 
 => https://git.sr.ht/~rbdr/lyricli view source.
 
-You may need to allow the plugin to run in "Privacy &amp; Security" in your system settings.
-
-## Install from Homebrew
+## Install
 
+### Homebrew
 You can install using homebrew. For direct binaries see below.
 
 ```
@@ -17,7 +16,8 @@ $ brew tap rbdr/apps git@git.sr.ht:~rbdr/homebrew-apps
 $ brew install lyricli
 ```
 
-## Download
+### Download
+You can also manually download a precompiled binary.
 
 * [1] Latest (2.0.1), for both intel and apple silicon macs (larger binary)
 * [2] Latest (2.0.1), only for apple silicon macs
@@ -69,12 +69,14 @@ $ lrc --list-sources
 
 ## All Versions
 
+### lrc 2.0.1
 lrc 2.0.1 - Fixes a segfault when there are n1 results, and incorrect behavior when results are not songs.
 => /files/lyricli/lrc-2.0.1-universal.tar.gz lrc 2.0.1 (universal)
 => /files/lyricli/lrc-2.0.1-arm64.tar.gz lrc 2.0.1 (arm64)
 => /files/lyricli/lrc-2.0.1-x86_64.tar.gz lrc 2.0.1 (x86_64)
 
-lrc 2.0.0 - Rebuilt to use swift 5.8 and work with the genius API instead of defunct LyricsWiki
+### lrc 2.0.0
+Rebuilt to use swift 5.8 and work with the genius API instead of defunct LyricsWiki
 => /files/lyricli/lrc-2.0.0-universal.tar.gz lrc 2.0.0 (universal)
 => /files/lyricli/lrc-2.0.0-arm64.tar.gz lrc 2.0.0 (arm64)
 => /files/lyricli/lrc-2.0.0-x86_64.tar.gz lrc 2.0.0 (x86_64)
index 46961472754426e73b77af566f0801bcf3e01841..0447bf6f8a5ba526cd6881b29a3ccd657d56a2f0 100644 (file)
@@ -1,4 +1,4 @@
-# Minimum Window Sizes of Mac Apps
+## Minimum Window Sizes of Mac Apps
 
 I use tiled window managers, and some layouts work better with smaller windows, but not all mac apps can do that so this is a collection of minimum window sizes of different apps to help me find which ones are better suited for my workflow.
 
@@ -10,7 +10,7 @@ I use the following thresholds:
 * > 500 <= 800 = LARGE
 * > 800 = HUGE
 
-## Browsers
+### Browsers
 * Arc: MEDIUM, 470px
 * Firefox: MEDIUM, 450px
 * Google Chrome: MEDIUM, 500px
@@ -18,13 +18,15 @@ I use the following thresholds:
 * Qutebrowser: TINY, 128px
 * Safari: LARGE, 575px
 
-## Calendars and Contacts
+### Calendars and Contacts
 * Calendar: LARGE, 639px
 * Cardhop: SMALL, 350px
 * Contacts: MEDIUM, 498px
 * Fantastical: MEDIUM, 500px; Day view only, Week (510px), Month (516px), Quarter (524px), and Year (504px) are LARGE, though may vary by toolbar icons visible.
 
-## Developer Tools
+## II
+
+### Developer Tools
 * Console: LARGE, 600px
 * Dash: LARGE, 800px
 * Hex Fiend: TINY, 173px
@@ -36,35 +38,39 @@ I use the following thresholds:
 * Thony: TINY, 73px
 * WorldWideWeb: MEDIUM, 480px
 
-## Diagramming
+### Diagramming
 * Map: TINY, 116px
 * Monodraw: LARGE, 700px
 * OmniGraffle: HUGE, 865px
 
-## Document and Book Readers
+### Document and Book Readers
 * Adobe Digital Editions: LARGE, 700px
 * Books: MEDIUM, 500px; Only when reading, the main window (1000px) is HUGE
 * Calibre: TINY, 74px; Only when reading, the main window (570px) is LARGE
 * Marked: SMALL, 400px
 * Preview: LARGE, 708px
 
-## File Managers
+## III
+
+### File Managers
 * Finder: SMALL, 316px; Without sidebar, otherwise MEDIUM at 446px
 * Transmission: SMALL, 350px
 * Transmit: HUGE, 880px
 * VeraCrypt: LARGE, 699px
 
-## Home and Automation
+### Home and Automation
 * Automator: MEDIUM, 500px
 * Home: LARGE, 515px
 * Shortcuts: LARGE, 750px
 
-## IDEs
+### IDEs
 * Android Studio: SMALL, 340px; Welcome window (800px) is LARGE
 * Max 8: TINY, 118px
 * Xcode: HUGE, 960px
 
-## Image/3D/Publishing
+## IV
+
+### Image/3D/Publishing
 * Acorn: LARGE, 800px
 * Affinity Designer 2: MEDIUM, 500px; Preferences (800px) is LARGE and Account (1078px) is HUGE
 * Affinity Photo 2: MEDIUM, 500px; Preferences (800px) is LARGE and Account (1078px) is HUGE
@@ -78,7 +84,7 @@ I use the following thresholds:
 * Pixelmator Pro: LARGE, 800px
 * Sketch: LARGE, 800px
 
-## Instant Messaging / Chat / Social Media
+### Instant Messaging / Chat / Social Media
 * Adium: TINY, 73px friend list, 200px chat; Some themes scroll at 200px
 * Discord: HUGE, 940px
 * Facetime: LARGE, 672px
@@ -92,31 +98,35 @@ I use the following thresholds:
 * Textual: MEDIUM, 342px
 * We: TINY, 74px
 
-## Marketplaces
+## V
+
+### Marketplaces
 * App Store: HUGE, 1000px
 * Setapp: HUGE, 1100px
 * Steam: HUGE, 1008px
 
-## Math
+### Math
 * Calculator: TINY, 232px; Programmer (398px) is SMALL, Scientific (574px) is LARGE
 * PCalc: SMALL, 380px
 * Numi: SMALL, 310px
 * Soulver: LARGE, 730px
 
-## Note-taking
+### Note-taking
 * Bear: SMALL, 300px; With Notes (570px) and Tags (752px) it's LARGE
 * Notes: MEDIUM, 500px
 * Obsidian: TINY, 200px
 * Stickies: TINY, 54px
 
-## Office Software
+### Office Software
 * iAPresenter: LARGE, 700px
 * Keynote: LARGE, 540px
 * Numbers: LARGE, 540px; The new window (760px) is also LARGE
 * OmniPlan: LARGE, 740px
 * Pages: LARGE, 640px
 
-## Media Players
+## VI
+
+### Media Players
 * IINA: SMALL, 286px
 * Music: HUGE, 980px
 * Odio: HUGE, 1000px
@@ -125,10 +135,10 @@ I use the following thresholds:
 * QuickTime Player: SMALL, 326px
 * Swinsian: HUGE, 870px
 
-## Mail
+### Mail
 * Mail: LARGE, 550px; Only in column layout, otherwise 610px
 
-## Music Making
+### Music Making
 * Ableton Live: LARGE, 800px
 * Capo: LARGE, 777px
 * GarageBand: SMALL, 400px
@@ -136,31 +146,33 @@ I use the following thresholds:
 * MuseScore: HUGE, 1050px
 * Reason: HUGE, 972px; The Reason companion is 1200px
 
-## News Readers / Bookmarks
+### News Readers / Bookmarks
 * NetNewsWire: LARGE, 585px
 * News: HUGE, 860px
 * Pins: LARGE, 515px
 * Reeder: SMALL, 320px
 * Unison: LARGE, 800px
 
-## Password Managers
+## VII
+
+### Password Managers
 * 1password: LARGE, 784px
 * Bitwarden: LARGE, 680px
 * KeePassX: LARGE, 558px
 * Secrets: LARGE, 603px
 
-## Task Managers
+### Task Managers
 * Do: TINY, 180px
 * Reminders: SMALL, 350px
 * Ritmo: TINY, 85px
 * Things: SMALL, 400px
 
-## Terminal Emulators
+### Terminal Emulators
 * iTerm 2: TINY, 70px; Size depends on font, I got down to 7 columns
 * Kitty: TINY, 22px; Size depends on font, I got down to 2 columns
 * Terminal: TINY, 190px; Size depends on font, I got down to 20 columns
 
-## Text Editors
+### Text Editors
 * Atom: TINY, 73px
 * BBEdit: SMALL, 311px
 * Byword: SMALL, 350px
@@ -172,7 +184,9 @@ I use the following thresholds:
 * Ulysses: LARGE, 555px
 * Visual Studio Code: SMALL, 400px
 
-## Utilities
+## VIII
+
+### Utilities
 * Activity Monitor: LARGE, 740px
 * Clock: LARGE, 600px
 * CrystalFetch: LARGE, 800px
@@ -197,10 +211,10 @@ I use the following thresholds:
 * Voice Memos: LARGE, 752px
 * Weather: HUGE 985px
 
-## Video Editing / Streaming
+### Video Editing / Streaming
 * DaVinci Resolve: HUGE, 1445px
 * iMovie: HUGE, 1280px
 * OBS: HUGE, 867px
 
-## VPN
+### VPN
 * NordVPN: HUGE, 902px