Commit 5896ffdb06

5896ffdb064390d300da01b62deac5081cb2cf5e

parent: 4cd7447ace

Unsigned

cmc <hello@cleberg.net> · 2024-03-29 06:49 UTC

clean up remaining markdown files and merge conflicts

Layout: unified · split

content/blog/2024-03-13-doom-emacs.md deleted −340
@@ -1,340 +0,0 @@
1+++
2date = 2024-03-14T16:19:23+00:00
3title = "Doom Emacs & Org-Mode"
4description = "A quick look at my setup with Doom Emacs and the Org-Mode syntax."
5+++
6
7## Screenshots
8
9These screenshots are showing a project opened with projectile, a treemacs side
10pane open with the project contents, multiple buffers tiled next to each other,
11and the help pane open at the bottomm.
12
13The themes are `doom-homage-white` and `doom-homage-black`.
14
15![Doom Emacs Light
16Mode](https://img.cleberg.net/blog/20240314-doom-emacs/light.png)
17
18![Doom Emacs Dark
19Mode](https://img.cleberg.net/blog/20240314-doom-emacs/dark.png)
20
21## Getting Started
22
23I have been switching back and forth between
24[markdown](https://en.wikipedia.org/wiki/Markdown) and
25[org-mode](https://en.wikipedia.org/wiki/Org-mode) recently for my personal note
26taking, wiki, and even this blog. As a result, I have been stumbling further
27into the world of Emacs and found myself at a point where I now prefer to do
28most of my basic editing within Emacs.
29
30I'll leave the markdown vs. org-mode debate for another post, but I love
31org-mode's extensibility and interactive nature within Emacs, but it becomes
32very unwieldy in any other client implementation of org-mode - especially on
33iOS. On the flip side, markdown is limited in functionality and fractured into
34different standards, but it's simple and popular enough that there are a
35plethora of great clients to choose from that will get the job done.
36
37For now, I want to focus on how I have been using Emacs and some of the things
38that would have helped me learn it faster had I known where to start.
39
40### Installation
41
42This post focuses on [Doom Emacs](https://github.com/doomemacs/doomemacs), which
43is an Emacs framework that provides an alternative experience to the vanilla
44[GNU Emacs](https://www.gnu.org/software/emacs/).
45
46The [Getting Start
47Guide](https://github.com/doomemacs/doomemacs/blob/master/docs/getting_started.org)
48has an extremely detailed walkthrough of installation for all systems, so please
49refer to that guide for up-to-date instructions.
50
51I chose to install on macOS, using the Homebrew option with the
52`railwaycat/emacsmacport` version of Emacs.
53
54Once the program is installed, you can run the program by typing `emacs` in a
55terminal. If you installed a version of Emacs that supports both a GUI and TUI,
56you will have to run `emacs -nw` to get the TUI instead of the default GUI.
57
58### Configuration
59
60Once installed, you can configure Doom by editing the files within the
61`~/.doom.d/` directory. This directory holds four files:
62
631. `config.el` - Personal configuration file
642. `custom.el` - Custom set variables
653. `init.el` - Doom modules and load order, must run `doom sync` after modifying
664. `packages.el` - Declare packages to install in this file, then run `doom
67 sync` to install
68
69I only needed a few customizations for my configuration, so I'll list them
70below.
71
72```lisp
73;; ~/.doom.d/config.el
74(setq doom-theme 'doom-homage-black)
75(setq display-line-numbers-type t)
76(setq org-directory "~/Documents/Notes/")
77
78;; lengthy org-publish directives at the bottom of the file
79```
80
81```lisp
82;; ~/.doom.d/init.el
83(doom! :input
84 :completion
85 company ; the ultimate code completion backend
86 vertico ; the search engine of the future
87
88 :ui
89 doom ; what makes DOOM look the way it does
90 doom-dashboard ; a nifty splash screen for Emacs
91 (emoji +unicode) ; 🙂
92 hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
93 minimap ; show a map of the code on the side
94 modeline ; snazzy, Atom-inspired modeline, plus API
95 ophints ; highlight the region an operation acts on
96 (popup +defaults) ; tame sudden yet inevitable temporary windows
97 tabs ; a tab bar for Emacs
98 treemacs ; a project drawer, like neotree but cooler
99 (vc-gutter +pretty) ; vcs diff in the fringe
100 vi-tilde-fringe ; fringe tildes to mark beyond EOB
101 workspaces ; tab emulation, persistence & separate workspaces
102
103 :editor
104 (evil +everywhere); come to the dark side, we have cookies
105 file-templates ; auto-snippets for empty files
106 fold ; (nigh) universal code folding
107 snippets ; my elves. They type so I don't have to
108
109 :emacs
110 dired ; making dired pretty [functional]
111 electric ; smarter, keyword-based electric-indent
112 undo ; persistent, smarter undo for your inevitable mistakes
113 vc ; version-control and Emacs, sitting in a tree
114
115 :term
116 term ; basic terminal emulator for Emacs
117
118 :checkers
119 syntax ; tasing you for every semicolon you forget
120
121 :tools
122 (eval +overlay) ; run code, run (also, repls)
123 lookup ; navigate your code and its documentation
124 magit ; a git porcelain for Emacs
125
126 :os
127 (:if (featurep :system 'macos) macos) ; improve compatibility with macOS
128
129 :lang
130 common-lisp ; if you've seen one lisp, you've seen them all
131 emacs-lisp ; drown in parentheses
132 markdown ; writing docs for people to ignore
133 org ; organize your plain life in plain text
134 python ; beautiful is better than ugly
135 sh ; she sells {ba,z,fi}sh shells on the C xor
136
137 :app
138 irc ; how neckbeards socialize
139 (rss +org) ; emacs as an RSS reader
140
141 (default +bindings +smartparens))
142```
143
144If you're editing these files within Doom directly, remember to run `SPC h r r`
145to reload the configuration. Also remember to run `doom sync` for any changes to
146the `init.el` or `packages.el` files.
147
148## Basic Functionality
149
150I kept a cheat sheet note open at first with all of the basic functions typed
151out, copied as I went through the tutorial. After a little while, I no longer
152needed it. I highly recommend writing down the most applicable shortcuts for
153your preferred functionality and refer back to it until you've memorized it.
154
155Memorizing the shortcuts will differ based on the type of Emacs framework being
156used. Personally, migrating from vanilla Emacs to Doom Emacs simplified
157everything by a large factor and instantly enabled me to start working on my
158projects, eliminating most of the hurdles I was running into. The vanilla emacs
159hotkeys became obnoxious and I actually stopped using Emacs entirely for about a
160month before trying Doom.
161
162For me, the first logical step is to interact with the local filesystem. To do
163this, I needed to know how to open directories, open files, save files, discard
164changes, close files, and switch between open files. Here are some example
165shortcuts I've written down in order to accomplish file-based actions.
166
167| Doom Hotkey | Emacs Hotkey | Description |
168|-----------------|--------------|----------------------------------------|
169| `SPC :` | `C-x` | Run functions |
170| `SPC f f` | `C-x f` | Open file in buffer |
171| `SPC f d` | `C-x d` | Open directory with `dired` |
172| `i` | `C-x C-q` | Edit current buffer (insert mode) |
173| `q` | `C-x C-q` | Quit out of insert mode |
174| `SPC f s` | `C-x s` | Save current buffer |
175| `SPC b k` | `C-x k` | Kill current buffer |
176| `SPC w h/j/k/l` | `C-x o`[^1] | Move left/down/up/right to next buffer |
177
178[^1] Doom's evil-window functionality is a bit different from GNU Emacs, but you
179can always switch to the "other" buffer with `C-x o` or `C-x b` to get a list of
180buffers to select.
181
182In general, when in Doom, you can press `SPC` and wait a second for the help
183pane to appear with all available hotkey options. For example, you can press
184`SPC`, wait for the help pane, and then select a key such as `g` to enter the
185git help pane and explore further command options.
186
187## Editing
188
189Next in my process is to dive into editing for any languages I'm currently
190using. In this post, I will just cover Markdown and Org-Mode but I have also
191been slowly adoping some Python and general web dev tools as well.
192
193### Markdown
194
195![Markdown Preview](https://img.cleberg.net/blog/20240314-doom-emacs/markdown.png)
196
197Markdown is fairly simple as the syntax is limited, so just make sure the
198`~/.doom.d/init.el` includes the `markdown` declaration in the `:lang` section.
199
200This package includes the following hotkey menus. The insert and toggle menu
201expands further, allowing you to insert various markdown elements and toggle
202things like link hiding.
203
204| Doom Hotkey | Function |
205|------------------------------|--------------------------|
206| `SPC m '` | markdown-edit-code-block |
207| `SPC m e` | markdown-export |
208| `SPC m i` | +insert |
209| `SPC m o` | markdown-open |
210| `SPC m p` | markdown-preview |
211| `SPC m t` | +toggle |
212| `SPC : markdown-table-align` | markdown-table-align |
213
214### Org-Mode
215
216![Org-Mode Preview](https://img.cleberg.net/blog/20240314-doom-emacs/org.png)
217
218Similar to the markdown section above, ensure that the `~/.doom.d/init.el`
219includes the `org` declaration in the `:lang` section.
220
221There are a few hot keys, but a quick search with `SPC : org` shows that there
222are 865 possible org-related functions you can run. I won't possibly be able to
223list them all, so I will simply cover a few of the basic commands I use myself.
224
225| Doom Hotkey | Function |
226|----------------|---------------------------------------|
227| `SPC m t` | org-todo |
228| `SPC n t` | org-todo-list |
229| `SPC o A` | org-agenda |
230| `SPC X` | org-capture |
231| `SPC m p p` | org-priority |
232| `SPC m d s` | org-schedule |
233| `TAB` | org-cycle |
234| `SHIFT TAB` | Collapse/open all headings in buffer |
235| `M-q` | Format/wrap current section |
236| `M-Left/Right` | Demote/promote current heading |
237| `M-Down/Up` | Shift current heading section down/up |
238
239#### Org-Publish
240
241Org includes a [publishing management
242system](https://orgmode.org/manual/Publishing.html) by default that allows you
243to export org files to Org, iCalendar, HTML, LaTex, Markdown, ODT, and Plain
244Text. Most of these can be exported into another buffer and opened, or simply to
245an external file.
246
247While inside an org file, simply run `SPC m e` or `M-x org-export-dispatch` to
248open the export menu. This menu will show all options and ask you to select an
249option. If you want to export to HTML, simply press `h` and then `H` (As HTML
250buffer), `h` (As HTML file), or `o` (As HTML file and open).
251
252#### Projects
253
254Some publishing options are easier with a defined project in Emacs. To create a
255project within Emacs, I use two methods:
256
2571. Add the project via the projectile command `SPC p a`. Does not always work
258 for me.
2592. Add an empty `.projectile` file in the project root.
260
261Once a project has been created, you can create custom publishing actions within
262your `~/.doom.d/config.el` file. For example, here's a test project I created to
263try and convert this blog to org-mode recently.
264
265```lisp
266;; org-publish
267(require 'ox-publish)
268
269(defun my/org-sitemap-date-entry-format (entry style project) "Format ENTRY in
270 org-publish PROJECT Sitemap format ENTRY ENTRY STYLE format that includes
271 date." (let ((filename (org-publish-find-title entry project))) (if (= (length
272 filename) 0) (format "*%s*" entry) (format "{{{timestamp(%s)}}}
273 [[file:%s][%s]]" (format-time-string "%Y-%m-%d" (org-publish-find-date entry
274 project)) entry filename))))
275
276(setq org-export-global-macros '(("timestamp" . "@@html:<time datetime='[$1]'
277 class='timestamp'>[$1]</time>@@")))
278
279(setq org-publish-project-alist
280 `(("blog"
281 :base-directory "~/Source/cleberg.net/"
282 :base-extension "org"
283 :recursive t
284 :publishing-directory "~/Source/cleberg.net/public/"
285 :publishing-function org-html-publish-to-html
286 ;; HTML5
287 :html-doctype "html5"
288 :html-html5-fancy t
289 ;; Disable some Org's HTML defaults
290 :html-head-include-scripts nil
291 :html-head-include-default-style nil
292 :section-numbers nil
293 :with-title nil
294 ;; Sitemap
295 :auto-sitemap t
296 :sitemap-title: "Sitemap"
297 :sitemap-sort-files anti-chronologically
298 ; :sitemap-function my/org-sitemap-date-entry-format
299 ;; Customize HTML output
300 :html-divs ((preamble "header" "preamble")
301 (content "main" "content")
302 (postamble "footer" "postamble"))
303 :html-head "<meta name='theme-color' content='#111' media='(prefers-color-scheme: dark)'>
304 <meta name='theme-color' content='#fff' media='(prefers-color-scheme: light)'>
305 <link rel='stylesheet' href='/syntax-theme-dark.css' media='(prefers-color-scheme: dark)'>
306 <link rel='stylesheet' href='/syntax-theme-light.css' media='(prefers-color-scheme: light)'>
307 <link rel='stylesheet' href='/styles.css' type='text/css'>"
308 :html-preamble "<nav class='site-nav' aria-label='site-nav' role='navigation'>
309 <ul>
310 <li><a href='/'>Home</a></li>
311 <li><a href='/blog/'>Blog</a></li>
312 <li><a href='/services/'>Services</a></li>
313 <li><a href='/wiki/'>Wiki</a></li>
314 </ul></nav>
315 <h1>%t</h1>
316 <time datetime='%d'>%d</time>"
317 :html-postamble "
318 <p>Last build: %T</p>
319 <p>Created with %c</p>"
320 )
321
322 ("static"
323 :base-directory "~/Source/cleberg.net/static/"
324 :base-extension "css\\|txt\\|jpg\\|gif\\|png"
325 :recursive t
326 :publishing-directory "~/Source/cleberg.net/public/"
327 :publishing-function org-publish-attachment)
328
329 ("cleberg.net" :components ("blog" "static"))))
330```
331
332## General Thoughts
333
334I have enjoyed Doom Emacs (far more than GNU Emacs) and will likely continue to
335use it as my main editor for the time being. Org-Mode is certainly the largest
336factor here, as I far prefer it over Markdown due to its inherent features and
337detailed markup options. However, working with org-mode on iOS has been a pain
338and I will have to see if there's an easier way to resolve those issues or if
339going back to separate Markdown, Reminders, and Calendar apps is easier to work
340with than an all-in-one org solution.
content/blog/2024-03-15-self-hosting-ddns-updater.md deleted −309
@@ -1,309 +0,0 @@
1+++
2date = 2024-03-15T14:49:59+00:00
3title = "Self-Hosting DDNS Updater"
4description = "A guide to self-hosting the DDNS Updater container."
5+++
6
7![DDNS Updater Web
8View](https://img.cleberg.net/blog/20240315-ddns-updater/ddns.png)
9
10[DDNS Updater](https://github.com/qdm12/ddns-updater) is a program to keep DNS A
11and/or AAAA records updated for multiple DNS providers.
12
13If you've read any of my other posts, you'll notice that I have been searching
14for and using a few different DDNS updating solutions for years. You'll also
15notice that I love any projects that offer a Docker Compose solution.
16
17Luckily, DDNS Upater fits both of these preferences.
18
19## Installation
20
21To get started, always make sure to review the project's
22[README](https://github.com/qdm12/ddns-updater/blob/master/README.md). I'll be
23documenting my steps below, but they may have changed by the time you read this.
24
25The first step is to set up the directories and files required for the project.
26
27```sh
28mkdir ~/ddns-updater
29mkdir ~/ddns-updater/data
30touch ~/ddns-updater/data/config.json
31```
32
33### Configuration
34
35The main configuration you need to update is the `data/config.json` file. There
36is a large list of supported providers in the README, but I'm going to use
37Cloudflare in this example.
38
39```sh
40nano ~/ddns-updater/data/config.json
41```
42
43When setting up the configuration for Cloudflare, you'll need the following:
44
45- Required Parameters
46 - `"zone_identifier"` is the Zone ID of your site from the domain overview
47 page
48 - `"host"` is your host and can be `"@"`, a subdomain or the wildcard `"*"`.
49 See [this issue comment for
50 context](https://github.com/qdm12/ddns-updater/issues/243#issuecomment-928313949).
51 - `"ttl"` integer value for record TTL in seconds (specify 1 for automatic)
52 - One of the following ([how to find API
53 keys](https://developers.cloudflare.com/fundamentals/api/get-started/)):
54 - Email `"email"` and Global API Key `"key"`
55 - User service key `"user_service_key"`
56 - API Token `"token"`, configured with DNS edit permissions for your DNS
57 name's zone
58- Optional Parameters
59 - `"proxied"` can be set to `true` to use the proxy services of Cloudflare
60 - `"ip_version"` can be `ipv4` (A records), or `ipv6` (AAAA records) or `ipv4
61 or ipv6` (update one of the two, depending on the public ip found). It
62 defaults to `ipv4 or ipv6`.
63 - `"ipv6_suffix"` is the IPv6 interface identifier suffix to use. It can be
64 for example `0:0:0:0:72ad:8fbb:a54e:bedd/64`. If left empty, it defaults to
65 no suffix and the raw public IPv6 address obtained is used in the record
66 updating.
67
68```conf
69{
70 "settings": [
71 {
72 "provider": "cloudflare",
73 "zone_identifier": "some id",
74 "domain": "domain.com",
75 "host": "@",
76 "ttl": 1,
77 "proxied": true,
78 "token": "yourtoken",
79 "ip_version": "ipv4",
80 "ipv6_suffix": ""
81 }
82 ]
83}
84```
85
86Once you have configured the provider of your choice, correct the file and
87directory permissions and ownership.
88
89```sh
90cd ~/ddns_updater
91# Owned by user ID of Docker container (1000)
92chown -R 1000 data
93# all access (for creating json database file data/updates.json)
94chmod 700 data
95# read access only
96chmod 400 data/config.json
97```
98
99### Docker Compose
100
101After creating the project structure, let's create the `docker-compose.yml`
102file.
103
104```sh
105nano ~/ddns_-pdater/docker-compose.yml
106```
107
108```config
109version: "3.7"
110services:
111 ddns-updater:
112 image: qmcgaw/ddns-updater
113 container_name: ddns-updater
114 network_mode: bridge
115 ports:
116 - 8097:8000/tcp # Change the 8097 value to whichever port you want to use
117 volumes:
118 - ./data:/updater/data
119 environment:
120 - CONFIG=
121 - PERIOD=5m
122 - UPDATE_COOLDOWN_PERIOD=5m
123 - PUBLICIP_FETCHERS=all
124 - PUBLICIP_HTTP_PROVIDERS=all
125 - PUBLICIPV4_HTTP_PROVIDERS=all
126 - PUBLICIPV6_HTTP_PROVIDERS=all
127 - PUBLICIP_DNS_PROVIDERS=all
128 - PUBLICIP_DNS_TIMEOUT=3s
129 - HTTP_TIMEOUT=10s
130
131 # Web UI
132 - LISTENING_ADDRESS=:8000
133 - ROOT_URL=/
134
135 # Backup
136 - BACKUP_PERIOD=0 # 0 to disable
137 - BACKUP_DIRECTORY=/updater/data
138
139 # Other
140 - LOG_LEVEL=info
141 - LOG_CALLER=hidden
142 - SHOUTRRR_ADDRESSES=
143 restart: always
144```
145
146After configuring your preferences in the `docker-compose.yml`, launch the
147container.
148
149```sh
150cd ~/ddns-updater
151sudo docker-compose up -d
152```
153
154If you've launched this on your local machine, you can launch `localhost:8097`
155in your browser to see the results.
156
157### Nginx Reverse Proxy
158
159If you launched this service on a server, other machine, or just want to access
160it remotely via a domain name, you can use Nginx as a reverse proxy to expose
161the service publicly.
162
163Start by creating the Nginx configuration file.
164
165```sh
166sudo nano /etc/nginx/sites-available/ddns
167```
168
169Here's a basic example that should work properly.
170
171```conf
172server {
173 # If using 443, remember to include your ssl_certificate
174 # and ssl_certificate_key
175 listen [::]:80;
176 listen 80;
177 server_name ddns.example.com;
178
179 location / {
180 set $upstream_ao http://127.0.0.1:9380;
181 proxy_pass $upstream_ao;
182
183 # May need some additional proxy_* parameters,
184 # see the full example below if necessary
185 }
186}
187```
188
189Here's a full example that uses my Authelia authentication service to require
190authentication before someone can access the web page.
191
192```conf
193server {
194 if ($host ~ ^[^.]+\.example\.com$) {
195 return 301 https://$host$request_uri;
196 }
197
198 listen [::]:80;
199 listen 80;
200 server_name ddns.example.com;
201 return 404;
202}
203
204server {
205 listen [::]:443 ssl http2;
206 listen 443 ssl http2;
207 server_name ddns.example.com;
208 access_log /var/log/nginx/ddns.access.log;
209 error_log /var/log/nginx/ddns.error.log;
210
211 add_header X-Content-Type-Options "nosniff";
212 add_header X-XSS-Protection "1; mode=block";
213 add_header X-Frame-Options "DENY";
214 add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
215 add_header Referrer-Policy "no-referrer";
216
217 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
218 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
219 include /etc/letsencrypt/options-ssl-nginx.conf;
220 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
221
222 location /authelia {
223 internal;
224 set $upstream_authelia http://127.0.0.1:9091/api/verify; #change the IP and Port to match the IP and Port of your Authelia container
225 proxy_pass_request_body off;
226 proxy_pass $upstream_authelia;
227 proxy_set_header Content-Length "";
228
229 # Timeout if the real server is dead
230 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
231 client_body_buffer_size 128k;
232 proxy_set_header Host $host;
233 proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
234 proxy_set_header X-Real-IP $remote_addr;
235 proxy_set_header X-Forwarded-For $remote_addr;
236 proxy_set_header X-Forwarded-Proto $scheme;
237 proxy_set_header X-Forwarded-Host $http_host;
238 proxy_set_header X-Forwarded-Uri $request_uri;
239 proxy_set_header X-Forwarded-Ssl on;
240 proxy_redirect http:// $scheme://;
241 proxy_http_version 1.1;
242 proxy_set_header Connection "";
243 proxy_cache_bypass $cookie_session;
244 proxy_no_cache $cookie_session;
245 proxy_buffers 4 32k;
246
247 send_timeout 5m;
248 proxy_read_timeout 240;
249 proxy_send_timeout 240;
250 proxy_connect_timeout 240;
251 }
252
253 location / {
254 set $upstream_ddns http://127.0.0.1:8097; #change ddns to match your container name: $upstream_some-container-name or $upstream_somecontainername
255 proxy_pass $upstream_ddns; #change ddns to match your container name: $upstream_some-container-name or $upstream_somecontainername
256
257 auth_request /authelia;
258 auth_request_set $target_url https://$http_host$request_uri;
259 auth_request_set $user $upstream_http_remote_user;
260 auth_request_set $email $upstream_http_remote_email;
261 auth_request_set $groups $upstream_http_remote_groups;
262 proxy_set_header Remote-User $user;
263 proxy_set_header Remote-Email $email;
264 proxy_set_header Remote-Groups $groups;
265
266 error_page 401 =302 https://auth.example.com/?rd=$target_url; #change this to match your authentication domain/subdomain
267
268 client_body_buffer_size 128k;
269
270 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
271
272 send_timeout 5m;
273 proxy_read_timeout 360;
274 proxy_send_timeout 360;
275 proxy_connect_timeout 360;
276
277 proxy_set_header Host $host;
278 proxy_set_header Upgrade $http_upgrade;
279 proxy_set_header Connection upgrade;
280 proxy_set_header Accept-Encoding gzip;
281 proxy_set_header X-Real-IP $remote_addr;
282 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
283 proxy_set_header X-Forwarded-Proto $scheme;
284 proxy_set_header X-Forwarded-Host $http_host;
285 proxy_set_header X-Forwarded-Uri $request_uri;
286 proxy_set_header X-Forwarded-Ssl on;
287 proxy_redirect http:// $scheme://;
288 proxy_http_version 1.1;
289 proxy_set_header Connection "";
290 proxy_cache_bypass $cookie_session;
291 proxy_no_cache $cookie_session;
292 proxy_buffers 64 256k;
293
294 # set_real_ip_from 192.168.1.0/16; #make sure this matches your network setup
295 # real_ip_header CF-Connecting-IP;
296 # real_ip_recursive on;
297 }
298}
299```
300
301When complete, simply link the file and restart the web server.
302
303```sh
304sudo ln -s /etc/nginx/sites-available/ddns /etc/nginx/sites-enabled/ddns
305sudo systemctl restart nginx.service
306```
307
308Your ddns-updater service will now be available via `ddns.example.com`!
309
content/wiki/_index.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Wiki"
3sort_by = "title"
4template = "wiki.html"
5+++
content/wiki/_index.org added +1
@@ -0,0 +1 @@
1+++ title = "Wiki" sort_by = "title" template = "wiki.html" +++
content/wiki/ai.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "AI"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/ai.org added +3
@@ -0,0 +1,3 @@
1#+title: AI
2#+date: <2024-03-07>
3#+draft: t
content/wiki/audit.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Audit"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/audit.org added +3
@@ -0,0 +1,3 @@
1#+title: Audit
2#+date: <2024-03-07>
3#+draft: t
content/wiki/automation.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Automation"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/automation.org added +3
@@ -0,0 +1,3 @@
1#+title: Automation
2#+date: <2024-03-07>
3#+draft: t
content/wiki/blogroll.md deleted −33
@@ -1,33 +0,0 @@
1+++
2title = "Blogroll"
3updated = 2024-03-15T21:50:02+00:00
4draft = false
5+++
6
7## Aggregators
8
9- [1MB Club](https://1mb.club/)
10- [250KB Club](https://250kb.club/)
11- [512KB Club](https://512kb.club/)
12- [Darktheme Club](https://darktheme.club/)
13- [No CSS Club](https://nocss.club/)
14- [No-JS Club](https://no-js.club/)
15- [Ye Olde Blogroll](https://blogroll.org/)
16
17## Plain Text
18
19A list of various plaintext websites and lists.
20
21- [A List Of Text-Only & Minimalist News Sites](https://greycoder.com/a-list-of-text-only-new-sites/)
22- [Harvard Law Review](https://harvardlawreview.org/)
23- [Hyperlinked Text](https://sjmulder.nl/en/textonly.html)
24- [Plain-text web design](https://medium.com/@letsworkshop/plain-text-web-design-a78ccaf9dbc0)
25- [Plaintext World](https://plaintextworld.com/)
26- [Words](https://justinjackson.ca/words.html)
27
28## Webrings
29
30Instead of listing my personal favorites, I'm just going to drop a link to
31[brisay's webring list](https://brisray.com/web/webring-list.htm), which
32contains 237 webrings for a total of 7078 websites, as of 2024-03-15.
33
content/wiki/cli.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "CLI"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/cli.org added +3
@@ -0,0 +1,3 @@
1#+title: CLI
2#+date: <2024-03-07>
3#+draft: t
content/wiki/data.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Data"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/data.org added +3
@@ -0,0 +1,3 @@
1#+title: Data
2#+date: <2024-03-07>
3#+draft: t
content/wiki/editors.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Editors"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/editors.org added +3
@@ -0,0 +1,3 @@
1#+title: Editors
2#+date: <2024-03-07>
3#+draft: t
content/wiki/foss.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "FOSS"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/foss.org added +3
@@ -0,0 +1,3 @@
1#+title: FOSS
2#+date: <2024-03-07>
3#+draft: t
content/wiki/git.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Git"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/git.org added +3
@@ -0,0 +1,3 @@
1#+title: Git
2#+date: <2024-03-07>
3#+draft: t
content/wiki/hardware.md deleted −98
@@ -1,98 +0,0 @@
1+++
2title="Hardware"
3updated = 2024-03-16T15:42:58+00:00
4draft = false
5+++
6
7## Desktop
8
9### macOS
10
11Probably should have added more RAM but Macbooks are stupid expensive.
12
13| Category | Details |
14|----------|-------------------------------------------------------|
15| Model | [Macbook Pro 16"](https://www.apple.com/macbook-pro/) |
16| CPU | Apple M2 Pro |
17| RAM | 16GB |
18| Storage | 512GB SSD |
19
20### Linux
21
22A beauty.
23
24| Category | Details |
25|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
26| Model | [Lenovo ThinkPad E15 Gen 4, model 21ED0048US](https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpade/thinkpad--e15-gen-4-(15-inch-amd)/len101t0023) |
27| CPU | AMD Ryzen 5 5625U with Radeon Graphics |
28| RAM | 16 GB |
29| Storage | 256 GB SSD |
30
31## Mobile
32
33Previously used a Pixel 6 & Pixel 7 with GrapheneOS.
34
35| Category | Details |
36|----------|-----------------------------------------------------------|
37| Model | [iPhone 15 Pro Max](https://www.apple.com/iphone-15-pro/) |
38| CPU | A17 Pro |
39| RAM | 8GB |
40| Storage | 256GB |
41
42## Homelab
43
44I run a small homelab with a mix of consumer (compute/storage) and enterprise
45(network) hardware. I try to keep the lab energy efficient and quiet as my top
46priorities.
47
48### IoT
49
50A collection of mainly smart lights, sensors, and smart appliances. My first preference is to disable all networking for new smart devices or simply not connect internet in the first place (e.g. I never enable internet on my smart TVs). If the smart device requires LAN access, I will connect the device to my guest-restricted IoT network. As a last resort, I will set-up the internet but monitor the DNS lookups via NextDNS and forcibly block any domains I do not want the device to be using. If the device is egregious or shady, I'll just sell it and either replace it or live without it.
51
52- Other Appliances (washer, dryer, humidifier, fans, etc.)
53- [Roomba i7+](https://about.irobot.com/sitecore/content/north-america/irobot-us/home/roomba/i7-series)
54- [Philips Hue A19 Bulbs](https://www.philips-hue.com/en-us/p/hue-white-and-color-ambiance-a19---e26-smart-bulb---60-w--3-pack-/046677562786) x 15
55- [Philips Hue Play Light Bars](https://www.philips-hue.com/en-us/p/hue-bundle-play-blk-ext/33001)
56- [Philips Hue Smart Bridge](https://www.philips-hue.com/en-us/p/hue-bridge/046677458478) + play light bars and a ton of bulbs
57- [UP Chime](https://store.ui.com/us/en/collections/unifi-camera-security-special-chime)
58- [UP-Sense](https://store.ui.com/us/en/collections/unifi-camera-security-special-sensor) x 2
59- [USP-Plug](https://store.ui.com/us/en/products/unifi-smart-power)
60- [UVC G4 Instant](https://store.ui.com/us/en/collections/unifi-camera-security-compact-wifi-connected) x 3
61- [UVC G4 Doorbell Pro](https://store.ui.com/us/en/collections/unifi-camera-security-special-wifi-doorbell)
62
63### Network
64
65A rack-mounted Dream Machine Pro, connected downstream to an access point, mesh
66extender, and a couple ethernet switches.
67
68- [UDM-Pro](https://store.ui.com/us/en/collections/unifi-dream-machine/products/udm-pro)
69- [USW-24-PoE](https://store.ui.com/us/en/collections/unifi-switching-standard-power-over-ethernet/products/usw-24-poe)
70- [USW-Lite-8-PoE](https://store.ui.com/us/en/collections/unifi-switching-utility-poe/products/usw-lite-8-poe)
71- [U6-Pro](https://store.ui.com/us/en/collections/unifi-wifi-flagship-high-capacity/products/u6-pro)
72- [U6-Extender](https://store.ui.com/us/en/collections/unifi-wifi-inwall-outlet-mesh)
73- [USW 24-Port Patch Panel](https://store.ui.com/us/en/collections/unifi-accessory-tech-installations-rackmount/products/uacc-rack-panel-patch-blank-24)
74
75### Servers
76
77#### Rack-Mount Server
78
79I wasn't happy with using low-powered PCs as servers and I knew I did not want
80the ear-shattering enterprise rack-mounted servers, so I built my own.
81
82| Category | Details |
83| ------------------ | -------------------------------------- |
84| Case | Rosewill RSV-R4100U 4U |
85| Motherboard | NZXT B550 |
86| CPU | AMD Ryzen 7 5700G with Radeon Graphics |
87| RAM | 64GB RAM (2x32GB) |
88| Storage (On-board) | Western Digital 500GB M.2 NVME SSD |
89| Storage (HDD Bay) | 48TB HDD |
90| PSU | Corsair RM850 PSU |
91
92#### Other
93
94These ran as my main servers before I built the rack-mounted server above. I
95have shut these down indefinitely for now as I have no use for them.
96
97- Dell OptiPlex
98- Raspberry Pi 4
content/wiki/ios.md deleted −196
@@ -1,196 +0,0 @@
1+++
2title = "iOS"
3updated = 2024-03-13
4draft = false
5+++
6
7Related:
8
9- [Hardware](/wiki/hardware/)
10
11My primary mobile OS. Currently running iOS 17. This wiki page contains most of
12the apps I have used at one point or another across my different iPhones.
13
14[`*`] = My favorites
15
16## Configuration
17
18### Display
19
20- Light Mode
21 - 10:00 to 16:00
22- Dark Mode
23 - 16:00 to 10:00
24
25### Focus Modes
26
27- Personal Focus
28 - 06:00 to 21:00
29 - Allow Notifications From:
30 - Alarms
31 - Calendar
32 - Contacts (1 person)
33 - Messages
34 - Phone
35 - Reminders
36 - Signal
37 - UniFi Protect
38- Sleep Focus
39 - 21:00 to 06:00
40 - Allow Notifications From:
41 - Alarms
42 - Contacts (1 person)
43 - Reminders
44 - Signal
45
46### Privacy & Security
47
48I generally follow the [principle of least
49privilege](https://en.wikipedia.org/wiki/Principle_of_least_privilege) by only
50permitting the bare minimum privileges and revoking as soon as they are no
51longer required.
52
53Here's the baseline I start with:
54
55- Disable:
56 - Analytics & Improvements
57 - Apple Advertising
58 - Apple ID > Sign-In & Security > Two-Factor Authentication
59 - Location Services > System Services > Product Improvement
60 - Tracking > Allow Apps to Request to Track
61 - Safari > Advanced > Privacy Preserving Ad Measurement
62- Enable:
63 - Apple ID > iCloud > Advanced Data Protection
64 - Apple ID > Personal Information > Communication Preferences
65 - App Privacy Report
66 - Location Services only for Camera, Find My, UDisc, & WiFiman (`While
67 Using`)
68 - Safari > Prevent Cross-Site Tracking
69 - Safari > Hide IP Address
70 - Safari > Advanced > Advanced Tracking and Fingerprinting Protection
71
72## Native Apps
73
74### Business
75
76- [Element](https://apps.apple.com/us/app/element-messenger/id1083446067) - A
77 cross-platform messenger, based on Matrix
78- [LinkedIn](https://apps.apple.com/us/app/linkedin-network-job-finder/id288429040) -
79 One of the only social media apps I use
80
81### Developer Tools
82
83- [Harbour](https://testflight.apple.com/join/F2vK7xo4) - Easily manage your
84 Portainer service
85- [iSH](https://apps.apple.com/us/app/ish-shell/id1436902243) - A local shell
86 with SSH functionality
87
88### Entertainment
89
90- [Plex](https://apps.apple.com/us/app/plex-watch-live-tv-and-movies/id383457673) -
91 A client for the Plex Media Server
92- [Steam](https://apps.apple.com/us/app/steam-mobile/id495369748) - The top
93 gaming marketplace for computers
94
95### Lifestyle
96
97- [Home](https://apps.apple.com/us/app/home/id1110145103) [`*`] - Apple homekit
98 powered smart home manager
99- [Hue](https://apps.apple.com/us/app/philips-hue/id1055281310) - Philips Hue
100 smart home manager
101- [iRobot](https://apps.apple.com/us/app/irobot-home/id1012014442) - Manage
102 iRobot Roomba devices
103- [UniFi Protect](https://apps.apple.com/us/app/unifi-protect/id1392492235) -
104 View and manage most UniFi Protect cameras and settings
105
106### Music
107
108- [Apple Music](https://apps.apple.com/us/app/apple-music/id1108187390) [`*`] -
109 Apple's native music streaming app
110- [Plexamp](https://apps.apple.com/us/app/plexamp/id1500797510) [`*`] -
111 Top-notch music app for your Plex Media Server, with a neural network that
112 provides excellent radio/shuffle suggestions
113
114### News
115
116- [NetNewsWire](https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210) -
117 A free and open source RSS reader for Mac, iPhone, and iPad
118
119### Photo & Video
120
121- [Aislingeach](https://testflight.apple.com/join/Q6WyyEpS) - A quick way to
122 generate and rate images from the Stable Horde
123- [Unsplash](https://apps.apple.com/us/app/unsplash/id1290631746) - Premium
124 images, mostly free
125
126### Productivity
127
128- [beorg](https://apps.apple.com/us/app/beorg-to-do-list-agenda/id1238649962) -
129 An org-mode editor, outline, and scheduler with paid extensions
130- [Bitwarden](https://apps.apple.com/us/app/bitwarden-password-manager/id1137397744)
131 [`*`] - An open source password manager
132- [Cryptomator](https://apps.apple.com/us/app/cryptomator/id1560822163) - A
133 cross-platform encryption program
134- [Obsidian](https://apps.apple.com/us/app/obsidian-connected-notes/id1557175442)
135 [`*`] - A nice Markdown-based editor based on a "vault" structure. Offers a
136 paid sync solution and community extensions
137- [Strongbox](https://apps.apple.com/us/app/strongbox-password-manager/id897283731) -
138 Keepass password manager for iOS & macOS
139- [UniFi Network](https://apps.apple.com/us/app/unifi/id1057750338) - View and
140 manage most UniFi Network settings
141
142### Safari Extensions
143
144- [AdGuard](https://apps.apple.com/us/app/adguard-adblock-privacy/id1047223162) -
145 Ad blocker
146- [Dark
147 Reader](https://apps.apple.com/us/app/dark-reader-for-safari/id1438243180) -
148 Dark mode for all the sites
149- [PiPifier](https://apps.apple.com/us/app/pipifier/id1234771095) - Force videos
150 to support PiP
151- [Privacy
152 Redirect](https://apps.apple.com/us/app/privacy-redirect/id1578144015) -
153 Redirect select websites to others, usually to privacy-focused alternatives
154
155### Social Networking
156
157- [MultiTab T](https://apps.apple.com/us/app/multitab-for-tumblr/id1071533778)
158 [`*`] - A gallery-based Tumblr client with some unique features, such as tab
159 history and sync
160- [Signal](https://apps.apple.com/us/app/signal-private-messenger/id874139669)
161 [`*`] - A simple, powerful, and secure messenger
162- [Three Cheers](https://testflight.apple.com/join/mpVk1qIy) - A client for
163 Tildes.net with a design focus that matches the intent of Tildes
164- [Voyager](https://apps.apple.com/us/app/voyager-for-lemmy/id6451429762) - A
165 Lemmy client
166
167### Sports
168
169- [Apple Sports](https://apps.apple.com/us/app/apple-sports/id6446788829) -
170 Apple's new sports app - lacks notifications and live events
171- [UDisc](https://apps.apple.com/us/app/udisc-disc-golf/id1072228953) - Disc
172 golf course maps, score cards, and more
173
174### Utilities
175
176- [Backblaze](https://apps.apple.com/us/app/backblaze/id628638330) - Quickly
177 view and manage Backblaze b2 cloud storage
178- [Mullvad VPN](https://apps.apple.com/us/app/mullvad-vpn/id1488466513) [`*`] -
179 A private VPN service
180- [OTP Auth](https://apps.apple.com/us/app/otp-auth/id659877384) [`*`] - A
181 minimalistic OTP app with support for biometrics, custom icons, import/export,
182 and iCloud sync
183- [Plex Dash](https://apps.apple.com/us/app/plex-dash/id1500797677) - Stats
184 about your Plex Media Server
185- [Safari](https://apps.apple.com/us/app/safari/id1146562112) - iOS default
186 browser
187- [Unifi WiFiman](https://apps.apple.com/us/app/ubiquiti-wifiman/id1385561119) -
188 Create visual layouts of WiFi strength and save heat maps to your phone
189
190## Web Apps & Shortcuts
191
192- [Brutalist Report](https://brutalist.report/) - Minimal news aggregator
193- [_Cyber.Report](https://cyber.report/) - Cybersecurity news aggregator
194- [Hacker News](https://news.ycombinator.com/) - Mostly technical news
195- [NextDNS](https://nextdns.io/) - NextDNS statistics dashboard
196- [Readspike](https://readspike.com/) - Minimal news aggregator
content/wiki/linux.md → content/wiki/linux.org renamed +12 −10
@@ -1,19 +1,21 @@
1+++ 1#+title: Linux
2title = "Linux" 2#+date: <2024-03-07>
3updated = 2024-03-07 3#+draft: t
4draft = true
5+++
6 4
7Related: 5Related:
8 6
9- [Hardware](/wiki/hardware/) 7- [[/wiki/hardware.html][Hardware]]
10
11## Alpine Linux
12 8
9** Alpine Linux
10:PROPERTIES:
11:CUSTOM_ID: alpine-linux
12:END:
13My secondary laptop OS. 13My secondary laptop OS.
14 14
15## Ubuntu Server 15** Ubuntu Server
16 16:PROPERTIES:
17:CUSTOM_ID: ubuntu-server
18:END:
17My primary server OS. 19My primary server OS.
18 20
19- Applications 21- Applications
content/wiki/macos.md deleted −181
@@ -1,181 +0,0 @@
1+++
2title = "macOS"
3updated = 2024-03-13
4draft = false
5+++
6
7Related:
8
9- [Hardware](/wiki/hardware/)
10
11My primary OS. Currently running macOS Sonoma 14. This wiki page contains most
12of the apps I have used at one point or another across my different Macbooks.
13
14[`*`] = My favorites
15
16## Configuration
17
18### Disable System Services
19
20- [Disabling and Enabling System Integrity
21 Protection](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection)
22- Disable Gatekeeper: `sudo spctl --master-disable`
23
24### Dotfiles
25
26These are probably out of date, but they give a general idea of how I configure
27my machine.
28
29```config
30# ~/.zshrc
31export PATH="/opt/homebrew/bin:$PATH"
32export PATH="$HOME/.emacs.d/bin:$PATH"
33export EDITOR="/opt/homebrew/bin/emacs -nw"
34ZSH_THEME="bureau"
35plugins=(git zsh-autosuggestions)
36source $ZSH/oh-my-zsh.sh
37```
38
39```config
40# ~/.zprofile
41eval "$(/opt/homebrew/bin/brew shellenv)"
42```
43
44```config
45# ~/.config/skhd/skhdrc
46cmd - return : /Applications/iTerm.app/Contents/MacOS/iTerm2
47cmd + shift - return : /Applications/LibreWolf.app/Contents/MacOS/librewolf
48```
49
50```config
51# ~/.config/yabai/yabairc
52yabai -m config \
53 mouse_follows_focus off \
54 focus_follows_mouse off \
55 window_origin_display default \
56 window_placement second_child \
57 window_zoom_persist on \
58 window_shadow on \
59 window_animation_duration 0.0 \
60 window_animation_frame_rate 120 \
61 window_opacity_duration 0.0 \
62 active_window_opacity 1.0 \
63 normal_window_opacity 0.90 \
64 window_opacity off \
65 insert_feedback_color 0xffd75f5f \
66 split_ratio 0.50 \
67 split_type auto \
68 auto_balance off \
69 top_padding 15 \
70 bottom_padding 15 \
71 left_padding 15 \
72 right_padding 15 \
73 window_gap 10 \
74 layout bsp \
75 mouse_modifier fn \
76 mouse_action1 move \
77 mouse_action2 resize \
78 mouse_drop_action swap
79echo "yabai configuration loaded.."
80```
81
82## Software
83
84### Browsers
85
86- [Librewolf](https://librewolf.net/) [`*`] - Custom version of Firefox, focused
87 on privacy and security
88 - [Bitwarden](https://bitwarden.com/) - An open source password manager
89 - [Dark Reader](https://darkreader.org/) - Dark mode for all the websites
90 - [Libredirect](https://libredirect.github.io/) - Automatic web redirections
91 - [Strongbox](https://strongboxsafe.com/) - Keepass password manager for iOS &
92 macOS
93 - [uBlock Origin](https://ublockorigin.com/) - Free, open-source ad content
94 blocker
95- [Ungoogled
96 Chromium](https://github.com/ungoogled-software/ungoogled-chromium) - Google
97 Chromium, sans integration with Google
98- [eww](https://www.gnu.org/software/emacs/manual/html_mono/eww.html) - Emacs
99 Web Wowser, for TUI browsing
100
101### Communications
102
103- [gomuks](https://github.com/tulir/gomuks) - A terminal based Matrix client
104- [Thunderbird](https://www.thunderbird.net/) [`*`] - An open source email
105 client by Mozilla
106- [Signal](https://signal.org/) [`*`] - A simple, powerful, and secure messenger
107
108### Development
109
110- [Docker Desktop](https://www.docker.com/products/docker-desktop/) - Docker
111 containers for your desktop
112 - [open-webui](https://github.com/open-webui/open-webui) - User-friendly WebUI
113 for LLMs
114- [iTerm2](https://iterm2.com/) [`*`] - The best terminal for macOS, hands down
115- [Xcode](https://developer.apple.com/xcode/) - Apple's IDE
116- [zsh](https://en.wikipedia.org/wiki/Z_shell) [`*`] - My shell preference due
117 to its plugin and theme community
118 - [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) -
119 Fish-like autosuggestions for zsh
120 - [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting) -
121 Fish shell like syntax highlighting for Zsh
122
123### Editors
124
125- [Doom Emacs](https://github.com/doomemacs/doomemacs) - An Emacs framework,
126 great for working in org-mode
127- [Obsidian](https://obsidian.md/) [`*`] - A nice Markdown-based editor based on
128 a "vault" structure. Offers a paid sync solution and community extensions
129- [Standard Notes](https://standardnotes.com/) - A simple text editor focused on
130 privacy and security. Offers a paid sync solution and community extensions
131- [VSCodium](https://vscodium.com/) [`*`] - VS Code without proprietary blobs
132
133### Media
134
135- [Luminar](https://skylum.com/luminar) - Luminar offers top-notch photo editing
136 features
137- [Minecraft](https://www.minecraft.net/) - Block mining simulator
138- [NetNewsWire](https://netnewswire.com/) - A free and open source RSS reader
139 for Mac, iPhone, and iPad
140- [Plex](https://www.plex.tv/) [`*`] - Desktop client for the Plex Media Server
141- [Steam](https://store.steampowered.com/) - The top gaming marketplace for
142 computers
143- [Transmission](https://transmissionbt.com/) [`*`] - A Fast, Easy and Free
144 Bittorrent Client
145- [VLC](https://www.videolan.org/vlc/) - A free and open source cross-platform
146 multimedia player
147
148## Package Management
149
150- [Homebrew](https://brew.sh/) [`*`] - The Missing Package Manager for macOS (or
151 Linux)
152- [MacPorts](https://www.macports.org/) - A system to compile, install, and
153 manage open source software
154
155### Utilities
156
157- [Bartender 5](https://www.macbartender.com/Bartender5/) [`*`] - Easy control
158 and customization over the native macOS menu bar
159- [BetterDisplay](https://betterdisplay.pro/) - Allows you to tweak a ton of
160 features of built-in and external screens, such as scaling, configuration
161 overrides, and color/brightness upscaling
162- [Bitwarden](https://bitwarden.com/) - An open source password manager
163- [Ollama](https://ollama.com/) - Run Llama 2, Code Llama, and other models
164 locally on your machine
165 - [Ollama Swift](https://github.com/kghandour/Ollama-SwiftUI) - User Interface
166 made for Ollama.ai using Swift
167- [LittleSnitch](https://obdev.at/products/littlesnitch/index.html) - Shows all
168 network connections on your Macbook, including system and privileged services
169- [MicroSnitch](https://obdev.at/products/microsnitch/index.html) - Camera &
170 microphone monitoring and alterting service
171- [Mullvad](https://mullvad.net/) [`*`] - A private VPN service
172- [skhd](https://github.com/koekeishiya/skhd) [`*`] - Simple hotkey daemon for
173 macOS
174- [Strongbox](https://strongboxsafe.com/) - Keepass password manager for iOS &
175 macOS
176- [Syncthing](https://syncthing.net/) [`*`] - Continuous file synchronization
177- [TinkerTool](https://www.bresink.com/osx/TinkerTool.html) - Unlock hidden
178 configuration options for macOS
179- [yabai](https://github.com/koekeishiya/yabai) [`*`] - Automatic window tiling
180- [yt-dlp](https://github.com/yt-dlp/yt-dlp) - A youtube-dl fork with additional
181 features and fixes
content/wiki/management.md deleted −11
@@ -1,11 +0,0 @@
1+++
2title = "Management"
3updated = 2024-03-07
4draft = true
5+++
6
7## Time Management
8
9## People Management
10
11## Project Management
content/wiki/management.org added +16
@@ -0,0 +1,16 @@
1#+title: Management
2#+date: <2024-03-07>
3#+draft: t
4
5** Time Management
6:PROPERTIES:
7:CUSTOM_ID: time-management
8:END:
9** People Management
10:PROPERTIES:
11:CUSTOM_ID: people-management
12:END:
13** Project Management
14:PROPERTIES:
15:CUSTOM_ID: project-management
16:END:
content/wiki/minimalism.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Minimalism"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/minimalism.org added +3
@@ -0,0 +1,3 @@
1#+title: Minimalism
2#+date: <2024-03-07>
3#+draft: t
content/wiki/networking.md deleted −27
@@ -1,27 +0,0 @@
1+++
2title = "Networking"
3updated = 2024-03-07
4draft = true
5+++
6
7## Bluetooth
8
9## DNS
10
11## Gemini
12
13## Gopher
14
15## HTTP
16
17## IoT
18
19## Nginx
20
21## SSH
22
23## SSL
24
25## VPN
26
27## Wi-Fi
content/wiki/networking.org added +48
@@ -0,0 +1,48 @@
1#+title: Networking
2#+date: <2024-03-07>
3#+draft: t
4
5** Bluetooth
6:PROPERTIES:
7:CUSTOM_ID: bluetooth
8:END:
9** DNS
10:PROPERTIES:
11:CUSTOM_ID: dns
12:END:
13** Gemini
14:PROPERTIES:
15:CUSTOM_ID: gemini
16:END:
17** Gopher
18:PROPERTIES:
19:CUSTOM_ID: gopher
20:END:
21** HTTP
22:PROPERTIES:
23:CUSTOM_ID: http
24:END:
25** IoT
26:PROPERTIES:
27:CUSTOM_ID: iot
28:END:
29** Nginx
30:PROPERTIES:
31:CUSTOM_ID: nginx
32:END:
33** SSH
34:PROPERTIES:
35:CUSTOM_ID: ssh
36:END:
37** SSL
38:PROPERTIES:
39:CUSTOM_ID: ssl
40:END:
41** VPN
42:PROPERTIES:
43:CUSTOM_ID: vpn
44:END:
45** Wi-Fi
46:PROPERTIES:
47:CUSTOM_ID: wi-fi
48:END:
content/wiki/plaintext.md deleted −11
@@ -1,11 +0,0 @@
1+++
2title = "Plaintext"
3updated = 2024-03-07
4draft = true
5+++
6
7## Markdown
8
9## Org-Mode
10
11## AsciiDoc
content/wiki/plaintext.org added +16
@@ -0,0 +1,16 @@
1#+title: Plaintext
2#+date: <2024-03-07>
3#+draft: t
4
5** Markdown
6:PROPERTIES:
7:CUSTOM_ID: markdown
8:END:
9** Org-Mode
10:PROPERTIES:
11:CUSTOM_ID: org-mode
12:END:
13** AsciiDoc
14:PROPERTIES:
15:CUSTOM_ID: asciidoc
16:END:
content/wiki/privacy.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Privacy"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/privacy.org added +3
@@ -0,0 +1,3 @@
1#+title: Privacy
2#+date: <2024-03-07>
3#+draft: t
content/wiki/python.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Python"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/python.org added +3
@@ -0,0 +1,3 @@
1#+title: Python
2#+date: <2024-03-07>
3#+draft: t
content/wiki/security.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Security"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/security.org added +3
@@ -0,0 +1,3 @@
1#+title: Security
2#+date: <2024-03-07>
3#+draft: t
content/wiki/selfhosted.md deleted −5
@@ -1,5 +0,0 @@
1+++
2title = "Self-Hosted"
3updated = 2024-03-07
4draft = true
5+++
content/wiki/selfhosted.org added +3
@@ -0,0 +1,3 @@
1#+title: Self-Hosting
2#+date: <2024-03-07>
3#+draft: t
content/wiki/windows.md → content/wiki/windows.org renamed +9 −8
@@ -1,12 +1,13 @@
1+++ 1#+title: Windows
2title = "Windows" 2#+date: <2024-03-07>
3updated = 2024-03-07 3#+draft: t
4draft = true
5+++
6 4
7## Windows (Work) 5** Windows (Work)
8 6:PROPERTIES:
9I am required to use a Windows 10 laptop for work, but I have some limited customization options. 7:CUSTOM_ID: windows-work
8:END:
9I am required to use a Windows 10 laptop for work, but I have some
10limited customization options.
10 11
11- Alteryx 12- Alteryx
12- Notepad++ 13- Notepad++
theme/templates/index.html −14
@@ -7,19 +7,6 @@
7</section> 7</section>
8<section> 8<section>
9 <h2>Recent Blog Posts</h2> 9 <h2>Recent Blog Posts</h2>
10<<<<<<< HEAD:templates/index.html
11 {% set section = get_section(path="blog/_index.md") %}
12 {% set i = 0 %}
13 {% for page in section.pages %}
14 {% if i < 3%}
15 {% set_global i = i + 1%}
16 <div class="post">
17 <time datetime="{{ page.date | date(format='%Y-%m-%d %H:%M:%S') }}">{{ page.date | date(format='%Y-%m-%d') }}</time>
18 <a href="/blog/{{ page.slug }}/">{{ page.title }}</a>
19 </div>
20 {% endif %}
21 {% endfor %}
22=======
23 <div class="post"> 10 <div class="post">
24 <time datetime="2024-03-15">&lt;2024-03-15&gt;</time> 11 <time datetime="2024-03-15">&lt;2024-03-15&gt;</time>
25 <a href="/blog/self-hosting-ddns-updater.html">Self-Hosting DDNS Updater</a> 12 <a href="/blog/self-hosting-ddns-updater.html">Self-Hosting DDNS Updater</a>
@@ -32,7 +19,6 @@
32 <time datetime="2024-02-21">&lt;2024-02-21&gt;</time> 19 <time datetime="2024-02-21">&lt;2024-02-21&gt;</time>
33 <a href="/blog/self-hosting-an-otter-wiki.html">Self-Hosting An Otter Wiki</a> 20 <a href="/blog/self-hosting-an-otter-wiki.html">Self-Hosting An Otter Wiki</a>
34 </div> 21 </div>
35>>>>>>> org:theme/templates/index.html
36 <br> 22 <br>
37 <a href="/blog/">All Posts &rarr;</a> 23 <a href="/blog/">All Posts &rarr;</a>
38</section> 24</section>
theme/templates/wiki.html −15
@@ -1,27 +1,13 @@
1{% extends "base.html" %} 1{% extends "base.html" %}
2 2
3<<<<<<< HEAD:templates/wiki.html
4{% block content %}
5<h1>{{ section.title }}</h1>
6=======
7{% block subtitle %}Wiki | {% endblock %} 3{% block subtitle %}Wiki | {% endblock %}
8{% block main %} 4{% block main %}
9<h1>Wiki</h1> 5<h1>Wiki</h1>
10>>>>>>> org:theme/templates/wiki.html
11<p>Use <code>Ctrl + F</code> to search wiki pages for keywords.</p> 6<p>Use <code>Ctrl + F</code> to search wiki pages for keywords.</p>
12<div class="wiki-post"> 7<div class="wiki-post">
13 <p>Wiki Page</p> 8 <p>Wiki Page</p>
14 <p>Last Updated</p> 9 <p>Last Updated</p>
15</div> 10</div>
16<<<<<<< HEAD:templates/wiki.html
17{% for page in section.pages %}
18 <div class="wiki-post">
19 <p><a href="/wiki/{{ page.slug }}/">{{ page.title }}</a></p>
20 <time datetime="{{ page.updated | date(format='%Y-%m-%d %H:%M:%S') }}">{{ page.updated | date(format='%Y-%m-%d')}}</p>
21 </div>
22{% endfor %}
23{% endblock content %}
24=======
25{% for post in posts %} 11{% for post in posts %}
26 <div class="wiki-post"> 12 <div class="wiki-post">
27 <a href="{{ url_for("wiki", slug=post.slug) }}">{{ post.title }}</a> 13 <a href="{{ url_for("wiki", slug=post.slug) }}">{{ post.title }}</a>
@@ -29,4 +15,3 @@
29 </div> 15 </div>
30{% endfor %} 16{% endfor %}
31{% endblock %} 17{% endblock %}
32>>>>>>> org:theme/templates/wiki.html