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