Commit 8314ccc536

8314ccc5364cbc9afa9653c2b02c5c58d433ade5

parent: 526f853c7f

Unsigned

cmc <hello@cleberg.net> · 2025-03-11 21:09 UTC

move from cleberg.net to cmc.pub

Layout: unified · split

README.org +7 −7
@@ -1,8 +1,8 @@
1#+title: README 1#+title: README
2 2
3* cleberg.net 3* cmc.pub
4 4
5[[https://cleberg.net][cleberg.net]] is my personal webpage and blog. This website and blog utilize the 5[[https://cmc.pub][cmc.pub]] is my personal webpage and blog. This website and blog utilize the
6powerful Org-Mode publishing system, courtesy of the [[https://github.com/emacs-love/weblorg][weblorg]] Emacs package. 6powerful Org-Mode publishing system, courtesy of the [[https://github.com/emacs-love/weblorg][weblorg]] Emacs package.
7 7
8** Features & Configuration 8** Features & Configuration
@@ -12,15 +12,15 @@ through a simple =publish.el= file. For those who are interested in tweaking the
12underlying configuration, the weblorg documentation provides all necessary 12underlying configuration, the weblorg documentation provides all necessary
13details on possible settings and options. 13details on possible settings and options.
14 14
15** Getting Started with cleberg.net 15** Getting Started with cmc.pub
16 16
17To begin exploring or contributing to this project, you'll first need to set up 17To begin exploring or contributing to this project, you'll first need to set up
18a local copy of the repository. This can be accomplished by running the 18a local copy of the repository. This can be accomplished by running the
19following commands within Emacs: 19following commands within Emacs:
20 20
21#+begin_src sh 21#+begin_src sh
22git clone https://git.sr.ht/~cyborg/cleberg.net && \ 22git clone https://git.sr.ht/~cyborg/cmc.pub && \
23cd cleberg.net && \ 23cd cmc.pub && \
24emacs -nw 24emacs -nw
25#+end_src 25#+end_src
26 26
@@ -70,10 +70,10 @@ To quickly create a new blog post within Emacs, follow these steps:
70 the newly opened file. 70 the newly opened file.
71 71
72This streamlined process allows you to rapidly generate fresh content for 72This streamlined process allows you to rapidly generate fresh content for
73cleberg.net, taking advantage of the existing template structure and formatting. 73cmc.pub, taking advantage of the existing template structure and formatting.
74 74
75** Contributing & Tasks 75** Contributing & Tasks
76 76
77For those interested in contributing to this project or addressing any 77For those interested in contributing to this project or addressing any
78outstanding issues, please refer to the [[https://todo.sr.ht/~cyborg/cleberg.net][ticket tracker]]. This is where you can find 78outstanding issues, please refer to the [[https://todo.sr.ht/~cyborg/cmc.pub][ticket tracker]]. This is where you can find
79a comprehensive list of open tickets or submit a new ticket for consideration. 79a comprehensive list of open tickets or submit a new ticket for consideration.
build.sh +1 −1
@@ -34,7 +34,7 @@ if [[ "$answer" =~ ^[Yy]$ ]]; then
34 minify -o theme/static/styles.min.css theme/static/styles.css 34 minify -o theme/static/styles.min.css theme/static/styles.css
35 35
36 # Deploy changes 36 # Deploy changes
37 rsync -r --delete-before .build/* $ubuntu_server:/var/www/cleberg.net/ 37 rsync -r --delete-before .build/* $ubuntu_server:/var/www/cmc.pub/
38 else 38 else
39 echo "Environment: Development" 39 echo "Environment: Development"
40 40
content/blog/2020-12-29-zork.org +1 −1
@@ -32,7 +32,7 @@ as it was truly intended, you should try to play it without using the
32map. 32map.
33 33
34#+caption: Zork Map 34#+caption: Zork Map
35[[https://img.cleberg.net/blog/20201229-zork/zork_map.jpg]] 35[[https://img.cmc.pub/blog/20201229-zork/zork_map.jpg]]
36 36
37/[[https://www.filfre.net/2012/01/exploring-zork-part-1/][Map Source]]/ 37/[[https://www.filfre.net/2012/01/exploring-zork-part-1/][Map Source]]/
38 38
content/blog/2021-03-28-vaporwave-vs-outrun.org +6 −6
@@ -16,12 +16,12 @@ Vaporwave: the results include *a lot* of Outrun-themed images. You'll
16find a similar trend almost everywhere. 16find a similar trend almost everywhere.
17 17
18#+caption: Vaporwave Search Results 18#+caption: Vaporwave Search Results
19[[https://img.cleberg.net/blog/20210328-vaporwave-vs-outrun/vaporwave-search-results.png]] 19[[https://img.cmc.pub/blog/20210328-vaporwave-vs-outrun/vaporwave-search-results.png]]
20 20
21* Vaporwave 21* Vaporwave
22 22
23#+caption: Macintosh Plus Album Cover 23#+caption: Macintosh Plus Album Cover
24[[https://img.cleberg.net/blog/20210328-vaporwave-vs-outrun/macintosh-plus.png]] 24[[https://img.cmc.pub/blog/20210328-vaporwave-vs-outrun/macintosh-plus.png]]
25 25
26Okay, so what is Vaporwave? I'm going to just copy-and-paste some 26Okay, so what is Vaporwave? I'm going to just copy-and-paste some
27general info from the Wikipedia article on 27general info from the Wikipedia article on
@@ -80,7 +80,7 @@ is a large part of Vaporwave.
80* Outrun 80* Outrun
81 81
82#+caption: Outrun 82#+caption: Outrun
83[[https://img.cleberg.net/blog/20210328-vaporwave-vs-outrun/outrun.png]] 83[[https://img.cmc.pub/blog/20210328-vaporwave-vs-outrun/outrun.png]]
84 84
85Now, let's get to Outrun. This one is a little trickier since the genre 85Now, let's get to Outrun. This one is a little trickier since the genre
86has largely been lumped under the Vaporwave title for so long. However, 86has largely been lumped under the Vaporwave title for so long. However,
@@ -115,16 +115,16 @@ would look like. Take a look at a common video game discussed in Outrun
115circles, Far Cry 3: Blood Dragon: 115circles, Far Cry 3: Blood Dragon:
116 116
117#+caption: Fry Cry 3: Blood Dragon 117#+caption: Fry Cry 3: Blood Dragon
118[[https://img.cleberg.net/blog/20210328-vaporwave-vs-outrun/far-cry.png]] 118[[https://img.cmc.pub/blog/20210328-vaporwave-vs-outrun/far-cry.png]]
119 119
120Another example that doesn't force the color scheme as hard as some 120Another example that doesn't force the color scheme as hard as some
121online art does is Kung Fury: 121online art does is Kung Fury:
122 122
123#+caption: Kung Fury 123#+caption: Kung Fury
124[[https://img.cleberg.net/blog/20210328-vaporwave-vs-outrun/kung-fury.png]] 124[[https://img.cmc.pub/blog/20210328-vaporwave-vs-outrun/kung-fury.png]]
125 125
126#+caption: Kung Fury Hacker Scene 126#+caption: Kung Fury Hacker Scene
127[[https://img.cleberg.net/blog/20210328-vaporwave-vs-outrun/kung-fury-hacker.png]] 127[[https://img.cmc.pub/blog/20210328-vaporwave-vs-outrun/kung-fury-hacker.png]]
128 128
129* Conclusion 129* Conclusion
130 130
content/blog/2021-04-23-php-comment-system.org +1 −1
@@ -57,7 +57,7 @@ that future readers will be able to see the source data long after I'm
57gone, or the website has gone offline. However, I still haven't 57gone, or the website has gone offline. However, I still haven't
58committed any images served on my blog to Git, as I'm not entirely sold 58committed any images served on my blog to Git, as I'm not entirely sold
59on Git LFS yet - for now, images can be found at 59on Git LFS yet - for now, images can be found at
60[[https://img.cleberg.net][img.cleberg.net]]. 60[[https://img.cmc.pub][img.cmc.pub]].
61 61
62Saving my comments back to the Git repository ensures that another 62Saving my comments back to the Git repository ensures that another
63aspect of my site will degrade gracefully. 63aspect of my site will degrade gracefully.
content/blog/2022-02-10-njalla-dns-api.org +2 −2
@@ -6,9 +6,9 @@
6* Njalla's API 6* Njalla's API
7 7
8As noted in my recent post about 8As noted in my recent post about
9[[https://cleberg.net/blog/ditching-cloudflare/][switching to Njalla from 9[[https://cmc.pub/blog/ditching-cloudflare/][switching to Njalla from
10Cloudflare]], I was searching for a way to replace my very easy-to-use 10Cloudflare]], I was searching for a way to replace my very easy-to-use
11bash script to [[https://cleberg.net/blog/cloudflare-dns-api/][update Cloudflare's 11bash script to [[https://cmc.pub/blog/cloudflare-dns-api/][update Cloudflare's
12DNS via their API]]. 12DNS via their API]].
13 13
14To reiterate what I said in those posts, this is a common necessity for 14To reiterate what I said in those posts, this is a common necessity for
content/blog/2022-02-16-debian-and-nginx.org +2 −2
@@ -18,7 +18,7 @@ alert: it feels identical to Ubuntu for my purposes.
18I did the normal things when first launching the VPS, such as adding a 18I did the normal things when first launching the VPS, such as adding a
19new user, locking down SSH, etc. If you want to see that level of 19new user, locking down SSH, etc. If you want to see that level of
20detail, read my other post about 20detail, read my other post about
21[[https://cleberg.net/blog/how-to-set-up-a-vps-web-server/][How to Set 21[[https://cmc.pub/blog/how-to-set-up-a-vps-web-server/][How to Set
22Up a VPS Web Server]]. 22Up a VPS Web Server]].
23 23
24All of this has been similar, apart from small things such as the 24All of this has been similar, apart from small things such as the
@@ -159,7 +159,7 @@ the Nginx docs to see what other fun things I can do with all of this.
159Finally, I set up the Agate software on this server again to host my 159Finally, I set up the Agate software on this server again to host my
160Gemini server content, using Rust as I have before. You can read my 160Gemini server content, using Rust as I have before. You can read my
161other post for more information on installing Agate: 161other post for more information on installing Agate:
162[[https://cleberg.net/blog/hosting-a-gemini-server/][Hosting a Gemini 162[[https://cmc.pub/blog/hosting-a-gemini-server/][Hosting a Gemini
163Server]]. 163Server]].
164 164
165All in all, Debian + Nginx is very slick and I prefer it over my old 165All in all, Debian + Nginx is very slick and I prefer it over my old
content/blog/2022-02-17-exiftool.org +1 −1
@@ -45,7 +45,7 @@ distributions, but I really only care to test out this one package.
45** Recursively Strip Data 45** Recursively Strip Data
46 46
47I actually use this tool extensively to strip any photos uploaded to the 47I actually use this tool extensively to strip any photos uploaded to the
48website that serves all the images for my blog (=img.cleberg.net=). 48website that serves all the images for my blog (=img.cmc.pub=).
49 49
50The following command is incredibly useful and can be modified to 50The following command is incredibly useful and can be modified to
51include any image extensions that =exiftool= supports: 51include any image extensions that =exiftool= supports:
content/blog/2022-02-22-tuesday.org +1 −1
@@ -26,7 +26,7 @@ Let's look at everything that fell in place today:
26 Slavonic word =въторъ=, meaning "the second." 26 Slavonic word =въторъ=, meaning "the second."
275. Written in the classic monospaced, digital font (think of digital 275. Written in the classic monospaced, digital font (think of digital
28 clocks from the 80s/90s), there is nice symmetry to the numbers 28 clocks from the 80s/90s), there is nice symmetry to the numbers
29 ([[https://img.cleberg.net/blog/20220222-tuesday/digital_font.png][view 29 ([[https://img.cmc.pub/blog/20220222-tuesday/digital_font.png][view
30 the image here]]!). 30 the image here]]!).
316. This one isn't naturally-occurring, but it seems people around the 316. This one isn't naturally-occurring, but it seems people around the
32 world are celebrating the day. For example, a group is putting 32 world are celebrating the day. For example, a group is putting
content/blog/2022-03-02-reliable-notes.org +3 −3
@@ -44,7 +44,7 @@ Markdown file in plain-text, since it does contain any features to
44preview Markdown as HTML: 44preview Markdown as HTML:
45 45
46#+caption: Plain Text Markdown 46#+caption: Plain Text Markdown
47[[https://img.cleberg.net/blog/20220302-easy-reliable-note-taking/plain_markdown.png]] 47[[https://img.cmc.pub/blog/20220302-easy-reliable-note-taking/plain_markdown.png]]
48 48
49** Saving & Syncing Files 49** Saving & Syncing Files
50:PROPERTIES: 50:PROPERTIES:
@@ -118,13 +118,13 @@ Here's an example of how my Markdown notes look when opened in
118plain-text mode: 118plain-text mode:
119 119
120#+caption: Obsidian Markdown Source Mode 120#+caption: Obsidian Markdown Source Mode
121[[https://img.cleberg.net/blog/20220302-easy-reliable-note-taking/obsidian_source_mode.png]] 121[[https://img.cmc.pub/blog/20220302-easy-reliable-note-taking/obsidian_source_mode.png]]
122 122
123Here's the "live preview" version, where the Markdown is rendered into 123Here's the "live preview" version, where the Markdown is rendered into
124its HTML format: 124its HTML format:
125 125
126#+caption: Obsidian Markdown Live Preview 126#+caption: Obsidian Markdown Live Preview
127[[https://img.cleberg.net/blog/20220302-easy-reliable-note-taking/obsidian_live_preview.png]] 127[[https://img.cmc.pub/blog/20220302-easy-reliable-note-taking/obsidian_live_preview.png]]
128 128
129*** Programming on Desktop 129*** Programming on Desktop
130:PROPERTIES: 130:PROPERTIES:
content/blog/2022-03-24-server-hardening.org +2 −2
@@ -110,7 +110,7 @@ via your randomized port.
110 110
111** =ufw= 111** =ufw=
112 112
113To see how to configure =ufw=, see my other post: [[https://cleberg.net/blog/ufw.html][Secure Your 113To see how to configure =ufw=, see my other post: [[https://cmc.pub/blog/ufw.html][Secure Your
114Network with the Uncomplicated Firewall]]. 114Network with the Uncomplicated Firewall]].
115 115
116The general notion with an on-device firewall is that you want to deny all 116The general notion with an on-device firewall is that you want to deny all
@@ -196,7 +196,7 @@ sudo ufw enable
196 196
197 This process involves editing a couple files and installing an MFA package, 197 This process involves editing a couple files and installing an MFA package,
198 so I will not include all the details in this post. To see how to configure 198 so I will not include all the details in this post. To see how to configure
199 MFA for =ssh=, see my other post: [[https://cleberg.net/blog/ssh-mfa.html][Enabling MFA for 199 MFA for =ssh=, see my other post: [[https://cmc.pub/blog/ssh-mfa.html][Enabling MFA for
200 SSH]]. 200 SSH]].
201 201
202** =fail2ban= 202** =fail2ban=
content/blog/2022-06-01-ditching-cloudflare.org +1 −1
@@ -77,7 +77,7 @@ the server hosting my various websites and apps.
77 77
78However, as I was moving away from Cloudflare, I was not able to find a 78However, as I was moving away from Cloudflare, I was not able to find a
79suitable replacement that was both inexpensive and simple. So, I simply 79suitable replacement that was both inexpensive and simple. So, I simply
80went back to hosting [[https://cleberg.net/blog/set-up-nginx-reverse-proxy/][my own 80went back to hosting [[https://cmc.pub/blog/set-up-nginx-reverse-proxy/][my own
81reverse proxy with Nginx]]. With the recent additions of Unifi hardware 81reverse proxy with Nginx]]. With the recent additions of Unifi hardware
82in my server/network rack, I am much more protected against spam and 82in my server/network rack, I am much more protected against spam and
83malicious attacks at the network edge than I was before I switched to 83malicious attacks at the network edge than I was before I switched to
content/blog/2022-10-04-syncthing.org +1 −1
@@ -95,7 +95,7 @@ add/modify connected devices.
95Here's an example web GUI dashboard: 95Here's an example web GUI dashboard:
96 96
97#+caption: Syncthing Dashboard 97#+caption: Syncthing Dashboard
98[[https://img.cleberg.net/blog/20221020-syncthing/syncthing_gui.png]] 98[[https://img.cmc.pub/blog/20221020-syncthing/syncthing_gui.png]]
99 99
100** Remote Devices 100** Remote Devices
101 101
content/blog/2022-11-29-nginx-referrer-ban-list.org +2 −2
@@ -101,7 +101,7 @@ In order to test the results, let's curl the contents of our site. To
101start, I'll curl the site normally: 101start, I'll curl the site normally:
102 102
103#+begin_src sh 103#+begin_src sh
104curl https://cleberg.net 104curl https://cmc.pub
105#+end_src 105#+end_src
106 106
107The HTML contents of the page come back successfully: 107The HTML contents of the page come back successfully:
@@ -113,7 +113,7 @@ The HTML contents of the page come back successfully:
113Next, let's include a banned referrer: 113Next, let's include a banned referrer:
114 114
115#+begin_src sh 115#+begin_src sh
116curl --referer https://news.ycombinator.com https://cleberg.net 116curl --referer https://news.ycombinator.com https://cmc.pub
117#+end_src 117#+end_src
118 118
119This time, I'm met with a 403 Forbidden response page. That means we are 119This time, I'm met with a 403 Forbidden response page. That means we are
content/blog/2023-01-05-mass-unlike-tumblr-posts.org +2 −2
@@ -56,7 +56,7 @@ and be sure you're on the "Console" tab. It should look something like
56this (this is in Firefox, Chromium should be similar): 56this (this is in Firefox, Chromium should be similar):
57 57
58#+caption: Firefox Dev !Tools 58#+caption: Firefox Dev !Tools
59[[https:///img.cleberg.net/blog/20230105-mass-unlike-tumblr-posts/dev_console.png]] 59[[https:///img.cmc.pub/blog/20230105-mass-unlike-tumblr-posts/dev_console.png]]
60 60
61All you need to do is paste the following snippet into the dev console. 61All you need to do is paste the following snippet into the dev console.
62This code will collect all unlike buttons (=elements=) and then click 62This code will collect all unlike buttons (=elements=) and then click
@@ -88,7 +88,7 @@ the console, pressed Enter, and then the posts are automatically
88unliked. 88unliked.
89 89
90#+caption: Script !Results 90#+caption: Script !Results
91[[https:///img.cleberg.net/blog/20230105-mass-unlike-tumblr-posts/script_results.png]] 91[[https:///img.cmc.pub/blog/20230105-mass-unlike-tumblr-posts/script_results.png]]
92 92
93Thinking about this further, I would bet that this would be fairly 93Thinking about this further, I would bet that this would be fairly
94simple to package into a browser add-on so that users could install the 94simple to package into a browser add-on so that users could install the
content/blog/2023-06-23-byobu.org +1 −1
@@ -19,7 +19,7 @@ Take a look below at my current multi-window set-up in byobu while I
19write this blog post: 19write this blog post:
20 20
21#+caption: byobu 21#+caption: byobu
22[[https://img.cleberg.net/blog/20230623-byobu/byobu.png]] 22[[https://img.cmc.pub/blog/20230623-byobu/byobu.png]]
23 23
24*** Keybindings 24*** Keybindings
25 25
content/blog/2023-06-23-self-hosting-convos.org +2 −2
@@ -130,10 +130,10 @@ There are numerous themes to choose from; the theme shown in the images
130below is Dracula. 130below is Dracula.
131 131
132#+caption: Convos Home 132#+caption: Convos Home
133[[https://img.cleberg.net/blog/20230623-convos/convos_home.png]] 133[[https://img.cmc.pub/blog/20230623-convos/convos_home.png]]
134 134
135#+caption: Convos Chat 135#+caption: Convos Chat
136[[https://img.cleberg.net/blog/20230623-convos/convos_chat.png]] 136[[https://img.cmc.pub/blog/20230623-convos/convos_chat.png]]
137 137
138* Registering a Nickname 138* Registering a Nickname
139 139
content/blog/2023-06-30-self-hosting-voyager.org +1 −1
@@ -120,4 +120,4 @@ sudo systemctl restart nginx.service
120The site will now be available at the =server_name= you specified above! 120The site will now be available at the =server_name= you specified above!
121 121
122You can visit my instance at 122You can visit my instance at
123[[https://voyager.cleberg.net][voyager.cleberg.net]] for an example. 123[[https://voyager.cmc.pub][voyager.cmc.pub]] for an example.
content/blog/2023-10-04-digital-minimalism.org +1 −1
@@ -3,7 +3,7 @@
3#+description: 3#+description:
4#+slug: digital-minimalism 4#+slug: digital-minimalism
5 5
6I've written [[https://cleberg.net/wiki/#digital-garden][a note about minimalism]] 6I've written [[https://cmc.pub/wiki/#digital-garden][a note about minimalism]]
7before, but I wanted to dedicate some time to reflect on digital 7before, but I wanted to dedicate some time to reflect on digital
8minimalism and how I've been able to minimize the impact of digital 8minimalism and how I've been able to minimize the impact of digital
9devices in my life. 9devices in my life.
content/blog/2023-10-11-self-hosting-authelia.org +2 −2
@@ -441,11 +441,11 @@ When visiting the protected domain, you will now be redirected to your
441authentication domain and presented with the Authelia login portal. 441authentication domain and presented with the Authelia login portal.
442 442
443#+caption: Authelia Portal 443#+caption: Authelia Portal
444[[https://img.cleberg.net/blog/20231010-authelia/authelia_portal.png]] 444[[https://img.cmc.pub/blog/20231010-authelia/authelia_portal.png]]
445 445
446Once you've successfully authenticated, you can visit your 446Once you've successfully authenticated, you can visit your
447authentication domain directly and see that you're currently 447authentication domain directly and see that you're currently
448authenticated to any domain protected by Authelia. 448authenticated to any domain protected by Authelia.
449 449
450#+caption: Authelia Success 450#+caption: Authelia Success
451[[https://img.cleberg.net/blog/20231010-authelia/authelia_success.png]] 451[[https://img.cmc.pub/blog/20231010-authelia/authelia_success.png]]
content/blog/2023-10-17-self-hosting-anonymousoverflow.org +2 −2
@@ -6,7 +6,7 @@
6* Overview 6* Overview
7 7
8I recently launched an instance of AnonymousOverflow at 8I recently launched an instance of AnonymousOverflow at
9[[https://ao.cleberg.net][ao.cleberg.net]] and wanted to write a brief 9[[https://ao.cmc.pub][ao.cmc.pub]] and wanted to write a brief
10post on how easy it is to install with Docker Compose and Nginx. 10post on how easy it is to install with Docker Compose and Nginx.
11 11
12This guide uses Ubuntu server, Docker Compose, and Nginx as a reverse 12This guide uses Ubuntu server, Docker Compose, and Nginx as a reverse
@@ -128,4 +128,4 @@ sudo systemctl restart nginx.service
128#+end_src 128#+end_src
129 129
130The website will now be available publicly. Visit 130The website will now be available publicly. Visit
131[[https://ao.cleberg.net][my instance]] for an example. 131[[https://ao.cmc.pub][my instance]] for an example.
content/blog/2024-01-27-tableau-dashboard.org +2 −2
@@ -11,7 +11,7 @@ them to create the dashboard below. You can view this dashboard interactively
11online here: [[https://public.tableau.com/app/profile/c.c7042/viz/OmahaCrimeData2015-2023/OmahaCrimeData2015-2023#1][Omaha Crime Data (2015 - 2023)]]. 11online here: [[https://public.tableau.com/app/profile/c.c7042/viz/OmahaCrimeData2015-2023/OmahaCrimeData2015-2023#1][Omaha Crime Data (2015 - 2023)]].
12 12
13#+caption: Tableau Dashboard 13#+caption: Tableau Dashboard
14[[https://img.cleberg.net/blog/20240127-tableau-dashboard/dashboard.png]] 14[[https://img.cmc.pub/blog/20240127-tableau-dashboard/dashboard.png]]
15 15
16* Gather the Data 16* Gather the Data
17 17
@@ -140,4 +140,4 @@ There's a ton of other options available to be used in a dashboard like this,
140but this project shows a quick preview of what you can do in Tableau Public. 140but this project shows a quick preview of what you can do in Tableau Public.
141 141
142#+caption: Tableau Dashboard 142#+caption: Tableau Dashboard
143[[https://img.cleberg.net/blog/20240127-tableau-dashboard/dashboard.png]] 143[[https://img.cmc.pub/blog/20240127-tableau-dashboard/dashboard.png]]
content/blog/2024-03-13-doom-emacs.org +9 −9
@@ -12,10 +12,10 @@ and the help pane open at the bottomm.
12The themes are =doom-homage-white= and =doom-homage-black=. 12The themes are =doom-homage-white= and =doom-homage-black=.
13 13
14#+caption: Doom Emacs Light Mode 14#+caption: Doom Emacs Light Mode
15[[https://img.cleberg.net/blog/20240314-doom-emacs/light.png]] 15[[https://img.cmc.pub/blog/20240314-doom-emacs/light.png]]
16 16
17#+caption: Doom Emacs Dark Mode 17#+caption: Doom Emacs Dark Mode
18[[https://img.cleberg.net/blog/20240314-doom-emacs/dark.png]] 18[[https://img.cmc.pub/blog/20240314-doom-emacs/dark.png]]
19 19
20** Getting Started 20** Getting Started
21 21
@@ -183,7 +183,7 @@ been slowly adoping some Python and general web dev tools as well.
183*** Markdown 183*** Markdown
184 184
185#+caption: Markdown Preview 185#+caption: Markdown Preview
186[[https://img.cleberg.net/blog/20240314-doom-emacs/markdown.png]] 186[[https://img.cmc.pub/blog/20240314-doom-emacs/markdown.png]]
187 187
188Markdown is fairly simple as the syntax is limited, so just make sure the 188Markdown is fairly simple as the syntax is limited, so just make sure the
189=~/.doom.d/init.el= includes the =markdown= declaration in the =:lang= section. 189=~/.doom.d/init.el= includes the =markdown= declaration in the =:lang= section.
@@ -205,7 +205,7 @@ things like link hiding.
205*** Org-Mode 205*** Org-Mode
206 206
207#+caption: Org-Mode Preview 207#+caption: Org-Mode Preview
208[[https://img.cleberg.net/blog/20240314-doom-emacs/org.png]] 208[[https://img.cmc.pub/blog/20240314-doom-emacs/org.png]]
209 209
210Similar to the markdown section above, ensure that the =~/.doom.d/init.el= 210Similar to the markdown section above, ensure that the =~/.doom.d/init.el=
211includes the =org= declaration in the =:lang= section. 211includes the =org= declaration in the =:lang= section.
@@ -269,10 +269,10 @@ list them all, so I will simply cover a few of the basic commands I use myself.
269 269
270 (setq org-publish-project-alist 270 (setq org-publish-project-alist
271 `(("blog" 271 `(("blog"
272 :base-directory "~/Source/cleberg.net/" 272 :base-directory "~/Source/cmc.pub/"
273 :base-extension "org" 273 :base-extension "org"
274 :recursive t 274 :recursive t
275 :publishing-directory "~/Source/cleberg.net/public/" 275 :publishing-directory "~/Source/cmc.pub/public/"
276 :publishing-function org-html-publish-to-html 276 :publishing-function org-html-publish-to-html
277 ;; HTML5 277 ;; HTML5
278 :html-doctype "html5" 278 :html-doctype "html5"
@@ -311,13 +311,13 @@ list them all, so I will simply cover a few of the basic commands I use myself.
311 ) 311 )
312 312
313 ("static" 313 ("static"
314 :base-directory "~/Source/cleberg.net/static/" 314 :base-directory "~/Source/cmc.pub/static/"
315 :base-extension "css\\|txt\\|jpg\\|gif\\|png" 315 :base-extension "css\\|txt\\|jpg\\|gif\\|png"
316 :recursive t 316 :recursive t
317 :publishing-directory "~/Source/cleberg.net/public/" 317 :publishing-directory "~/Source/cmc.pub/public/"
318 :publishing-function org-publish-attachment) 318 :publishing-function org-publish-attachment)
319 319
320 ("cleberg.net" :components ("blog" "static")))) 320 ("cmc.pub" :components ("blog" "static"))))
321 #+end_src 321 #+end_src
322 322
323** General Thoughts 323** General Thoughts
content/blog/2024-03-15-self-hosting-ddns-updater.org +1 −1
@@ -4,7 +4,7 @@
4#+slug: self-hosting-ddns-updater 4#+slug: self-hosting-ddns-updater
5 5
6#+caption: DDNS Updater Web View 6#+caption: DDNS Updater Web View
7[[https://img.cleberg.net/blog/20240315-ddns-updater/ddns.png]] 7[[https://img.cmc.pub/blog/20240315-ddns-updater/ddns.png]]
8 8
9[[https://github.com/qdm12/ddns-updater][DDNS Updater]] is a program to keep DNS A and/or AAAA records updated for multiple 9[[https://github.com/qdm12/ddns-updater][DDNS Updater]] is a program to keep DNS A and/or AAAA records updated for multiple
10DNS providers. 10DNS providers.
content/blog/2024-03-29-org-blog.org +6 −6
@@ -8,7 +8,7 @@ feed duplicated itself when I moved this blog over to org-mode last night.
8 8
9This post focuses specifically on the configuration and tools I use to blog from 9This post focuses specifically on the configuration and tools I use to blog from
10Emacs with Org-Mode and does not focus on Emacs or Org-Mode themselves. Refer to 10Emacs with Org-Mode and does not focus on Emacs or Org-Mode themselves. Refer to
11the post I wrote about [[https://cleberg.net/blog/doom-emacs-org-mode.html][Doom Emacs & Org-Mode]] for more information about my base 11the post I wrote about [[https://cmc.pub/blog/doom-emacs-org-mode.html][Doom Emacs & Org-Mode]] for more information about my base
12Emacs configuration. 12Emacs configuration.
13 13
14* Weblorg 14* Weblorg
@@ -60,7 +60,7 @@ Now that I've installed weblorg, I need to configure the project. I'll start by
60navigating to my site's source code and creating a =publish.el= file. 60navigating to my site's source code and creating a =publish.el= file.
61 61
62#+begin_src sh 62#+begin_src sh
63cd ~/Source/cleberg.net && nano publish.el 63cd ~/Source/cmc.pub && nano publish.el
64#+end_src 64#+end_src
65 65
66Since I'm using Doom, Emacs will not automatically load the packages I need 66Since I'm using Doom, Emacs will not automatically load the packages I need
@@ -80,13 +80,13 @@ explicitly tell Emacs where Doom stores the =htmlize=, =weblorg=, and
80;; To build with the custom URL below, call: 80;; To build with the custom URL below, call:
81;;;; ENV=prod emacs --script publish.el 81;;;; ENV=prod emacs --script publish.el
82(if (string= (getenv "ENV") "prod") 82(if (string= (getenv "ENV") "prod")
83 (setq weblorg-default-url "https://cleberg.net")) 83 (setq weblorg-default-url "https://cmc.pub"))
84 84
85;; site metadata 85;; site metadata
86(weblorg-site 86(weblorg-site
87 :theme nil 87 :theme nil
88 :template-vars '(("site_name" . "cleberg.net") 88 :template-vars '(("site_name" . "cmc.pub")
89 ("site_owner" . "hello@cleberg.net") 89 ("site_owner" . "hello@cmc.pub")
90 ("site_description" . "Just a blip of ones and zeroes."))) 90 ("site_description" . "Just a blip of ones and zeroes.")))
91 91
92;; route for rendering the index page of the website 92;; route for rendering the index page of the website
@@ -235,7 +235,7 @@ Within this script, I do the following:
235#+begin_src sh 235#+begin_src sh
236rm -rf .build/* && \ 236rm -rf .build/* && \
237ENV=prod emacs--script publish.el && \ 237ENV=prod emacs--script publish.el && \
238scp -r .build/* ubuntu:/var/www/cleberg.net/ 238scp -r .build/* ubuntu:/var/www/cmc.pub/
239#+end_src 239#+end_src
240 240
241*** Time to Build 241*** Time to Build
content/blog/2024-04-08-docker-local-web-server.org +9 −9
@@ -33,7 +33,7 @@ Open the installer and follow the installation process until the application
33finishes the installation process. 33finishes the installation process.
34 34
35#+caption: Docker Desktop on macOS 35#+caption: Docker Desktop on macOS
36[[https://img.cleberg.net/blog/20240408-docker-local-web-server/docker-desktop.png]] 36[[https://img.cmc.pub/blog/20240408-docker-local-web-server/docker-desktop.png]]
37 37
38** Creating an Nginx Container 38** Creating an Nginx Container
39 39
@@ -56,7 +56,7 @@ docker run -it --rm -d -p 8000:80 --name web nginx
56You can navigate to [[http://localhost:8000]] to see the resulting page. 56You can navigate to [[http://localhost:8000]] to see the resulting page.
57 57
58#+caption: Default Nginx Container 58#+caption: Default Nginx Container
59[[https://img.cleberg.net/blog/20240408-docker-local-web-server/default-container.png]] 59[[https://img.cmc.pub/blog/20240408-docker-local-web-server/default-container.png]]
60 60
61** Customizing the Nginx Container 61** Customizing the Nginx Container
62 62
@@ -76,7 +76,7 @@ To see the updates, you can delete the previous container in the GUI or run
76=docker run= command below. 76=docker run= command below.
77 77
78#+begin_src sh 78#+begin_src sh
79docker run -it -d -p 8000:80 --name web -v ~/Source/cleberg.net/.build:/usr/share/nginx/html -v ~/Source/cleberg.net/nginx-config.conf:/etc/nginx/conf.d/default.conf nginx 79docker run -it -d -p 8000:80 --name web -v ~/Source/cmc.pub/.build:/usr/share/nginx/html -v ~/Source/cmc.pub/nginx-config.conf:/etc/nginx/conf.d/default.conf nginx
80#+end_src 80#+end_src
81 81
82Here's an example of my development configuration file. 82Here's an example of my development configuration file.
@@ -84,14 +84,14 @@ Here's an example of my development configuration file.
84#+begin_src conf 84#+begin_src conf
85# nginx-config.conf 85# nginx-config.conf
86server { 86server {
87 server_name cleberg.net www.cleberg.net; 87 server_name cmc.pub www.cmc.pub;
88 88
89 root /usr/share/nginx/html; 89 root /usr/share/nginx/html;
90 index index.html; 90 index index.html;
91 autoindex on; 91 autoindex on;
92 92
93 access_log /var/log/nginx/cleberg.net.access.log; 93 access_log /var/log/nginx/cmc.pub.access.log;
94 error_log /var/log/nginx/cleberg.net.error.log; 94 error_log /var/log/nginx/cmc.pub.error.log;
95 95
96 location / { 96 location / {
97 try_files $uri $uri/ =404; 97 try_files $uri $uri/ =404;
@@ -102,14 +102,14 @@ server {
102} 102}
103#+end_src 103#+end_src
104 104
105[[https://img.cleberg.net/blog/20240408-docker-local-web-server/custom-container.png]] 105[[https://img.cmc.pub/blog/20240408-docker-local-web-server/custom-container.png]]
106 106
107* Customizing Deployment Actions 107* Customizing Deployment Actions
108 108
109I am currently blogging with [[https://emacs.love/weblorg/][weblorg]], which uses a custom =publish.el= file to 109I am currently blogging with [[https://emacs.love/weblorg/][weblorg]], which uses a custom =publish.el= file to
110build the static site. Within this file, I have configured my deployment process 110build the static site. Within this file, I have configured my deployment process
111to check for the =ENV= variable in thesh and if it's set to =prod=, the script 111to check for the =ENV= variable in thesh and if it's set to =prod=, the script
112will set the base URLs to =https://cleberg.net=. If not, it sets the base URLs 112will set the base URLs to =https://cmc.pub=. If not, it sets the base URLs
113to =localhost:8000= (which matches the port used in the container above). 113to =localhost:8000= (which matches the port used in the container above).
114 114
115Therefore, I have modified my =build.sh= script to build with =localhost= URLs 115Therefore, I have modified my =build.sh= script to build with =localhost= URLs
@@ -123,7 +123,7 @@ if [ "$ENV" == "prod" ]; then
123 echo "Environment = Production" && \ 123 echo "Environment = Production" && \
124 rm -rf .build/* && \ 124 rm -rf .build/* && \
125 emacs --script publish.el && \ 125 emacs --script publish.el && \
126 scp -r .build/* ubuntu:/var/www/cleberg.net/ 126 scp -r .build/* ubuntu:/var/www/cmc.pub/
127else 127else
128 echo "Environment = Development" && \ 128 echo "Environment = Development" && \
129 rm -rf .build/* && \ 129 rm -rf .build/* && \
content/blog/2024-04-18-mu4e.org +4 −4
@@ -159,9 +159,9 @@ auth on
159host smtp.startmail.com 159host smtp.startmail.com
160port 465 160port 465
161protocol smtp 161protocol smtp
162from hello@cleberg.net 162from hello@cmc.pub
163user hello@cleberg.net 163user hello@cmc.pub
164passwordeval security find-generic-password -s startmail -a hello@cleberg.net -w 164passwordeval security find-generic-password -s startmail -a hello@cmc.pub -w
165tls on 165tls on
166tls_starttls off 166tls_starttls off
167 167
@@ -300,4 +300,4 @@ The home page shows various options and metadata about the account you've
300opened. 300opened.
301 301
302#+caption: Mu4e Home Page 302#+caption: Mu4e Home Page
303[[https://img.cleberg.net/blog/20240418-mu4e/mu4e.png]] 303[[https://img.cmc.pub/blog/20240418-mu4e/mu4e.png]]
content/blog/2024-05-03-ubuntu-on-macos.org +5 −5
@@ -32,7 +32,7 @@ Once installed, you can launch OrbStack and create a Linux machine in a matter
32of seconds. The creation dialog defaults to Ubuntu. 32of seconds. The creation dialog defaults to Ubuntu.
33 33
34#+caption: OrbStack's Linux Machine Creation Page 34#+caption: OrbStack's Linux Machine Creation Page
35[[https://img.cleberg.net/blog/20240503-ubuntu-on-macos/create.png]] 35[[https://img.cmc.pub/blog/20240503-ubuntu-on-macos/create.png]]
36 36
37** Launching the Machine 37** Launching the Machine
38 38
@@ -62,7 +62,7 @@ In the example below, we can see that the machine is using =Linux ubuntu 6.9.6=
62and operates similar to a fresh Ubuntu install on bare metal. 62and operates similar to a fresh Ubuntu install on bare metal.
63 63
64#+caption: Ubuntu CLI 64#+caption: Ubuntu CLI
65[[https://img.cleberg.net/blog/20240503-ubuntu-on-macos/cli.png]] 65[[https://img.cmc.pub/blog/20240503-ubuntu-on-macos/cli.png]]
66 66
67You can also click the machine's folder icon in OrbStack to open the machine's 67You can also click the machine's folder icon in OrbStack to open the machine's
68file system within macOS's native Files app. Within Files, you can double-click 68file system within macOS's native Files app. Within Files, you can double-click
@@ -70,13 +70,13 @@ to open any files and they will open in the macOS defaults for those file types
70(e.g., TextEdit). 70(e.g., TextEdit).
71 71
72#+caption: Ubuntu Files 72#+caption: Ubuntu Files
73[[https://img.cleberg.net/blog/20240503-ubuntu-on-macos/files.png]] 73[[https://img.cmc.pub/blog/20240503-ubuntu-on-macos/files.png]]
74 74
75Here's an example of opening the =test.md= file in the screenshot above, which 75Here's an example of opening the =test.md= file in the screenshot above, which
76defaults to opening in Xcode on my system. 76defaults to opening in Xcode on my system.
77 77
78#+caption: Ubuntu Files 78#+caption: Ubuntu Files
79[[https://img.cleberg.net/blog/20240503-ubuntu-on-macos/xcode.png]] 79[[https://img.cmc.pub/blog/20240503-ubuntu-on-macos/xcode.png]]
80 80
81*** Test Examples 81*** Test Examples
82 82
@@ -84,7 +84,7 @@ As a quick example of the system, I installed =neofetch=, switched to the =zsh=
84shell, and ran a few common commands. 84shell, and ran a few common commands.
85 85
86#+caption: Test Examples 86#+caption: Test Examples
87[[https://img.cleberg.net/blog/20240503-ubuntu-on-macos/test.png]] 87[[https://img.cmc.pub/blog/20240503-ubuntu-on-macos/test.png]]
88 88
89** Thoughts 89** Thoughts
90 90
content/blog/2024-07-11-emacs-on-ipad.org +5 −5
@@ -15,7 +15,7 @@ I recommend [[https://apps.apple.com/us/app/ish-shell/id1436902243][iSH]], since
15and will allow you to install packages that you need. 15and will allow you to install packages that you need.
16 16
17#+caption: iSH Application 17#+caption: iSH Application
18[[https://img.cleberg.net/blog/20240711-emacs-on-ipad/ish.png]] 18[[https://img.cmc.pub/blog/20240711-emacs-on-ipad/ish.png]]
19 19
20** Require Packages 20** Require Packages
21 21
@@ -28,7 +28,7 @@ apk add emacs ripgrep fd findutils
28#+end_src 28#+end_src
29 29
30#+caption: Package !Installation 30#+caption: Package !Installation
31[[https://img.cleberg.net/blog/20240711-emacs-on-ipad/dependencies.png]] 31[[https://img.cmc.pub/blog/20240711-emacs-on-ipad/dependencies.png]]
32 32
33** Emacs 33** Emacs
34 34
@@ -40,7 +40,7 @@ incredibly slow and buggy that I was not even able to take screenshots. Someone
40smarter than me could likely get it to work with a little tinkering. 40smarter than me could likely get it to work with a little tinkering.
41 41
42#+caption: Emacs 42#+caption: Emacs
43[[https://img.cleberg.net/blog/20240711-emacs-on-ipad/emacs.png]] 43[[https://img.cmc.pub/blog/20240711-emacs-on-ipad/emacs.png]]
44 44
45*** MELPA 45*** MELPA
46 46
@@ -49,13 +49,13 @@ able to search through their 5700+ packages instead of just ELPA packages. If
49you don't, you will only have access to ELPA packages like the ones below. 49you don't, you will only have access to ELPA packages like the ones below.
50 50
51#+caption: package-install 51#+caption: package-install
52[[https://img.cleberg.net/blog/20240711-emacs-on-ipad/melpa.png]] 52[[https://img.cmc.pub/blog/20240711-emacs-on-ipad/melpa.png]]
53 53
54Once you have MELPA, you can install packages like the =dashboard= package shown 54Once you have MELPA, you can install packages like the =dashboard= package shown
55below. 55below.
56 56
57#+caption: emacs-dashboard 57#+caption: emacs-dashboard
58[[https://img.cleberg.net/blog/20240711-emacs-on-ipad/dashboard.png]] 58[[https://img.cmc.pub/blog/20240711-emacs-on-ipad/dashboard.png]]
59 59
60*** Speed 60*** Speed
61 61
content/blog/2024-08-11-org-mode-features.org +8 −8
@@ -7,7 +7,7 @@
7* Cycling (Folding) 7* Cycling (Folding)
8 8
9#+begin_quote 9#+begin_quote
10[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L7][View this section]] in org-mode. 10[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L7][View this section]] in org-mode.
11#+end_quote 11#+end_quote
12 12
13My absolute top-used feature is [[https://orgmode.org/manual/Global-and-local-cycling.html][global and local cycling]] and it's not even 13My absolute top-used feature is [[https://orgmode.org/manual/Global-and-local-cycling.html][global and local cycling]] and it's not even
@@ -55,7 +55,7 @@ at the top of the buffer:
55* TODO Lists 55* TODO Lists
56 56
57#+begin_quote 57#+begin_quote
58[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L55][View this section]] in org-mode. 58[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L55][View this section]] in org-mode.
59#+end_quote 59#+end_quote
60 60
61Next up on in this post are [[https://orgmode.org/manual/TODO-Items.html][TODO Lists]]. Being able to combine note taking and 61Next up on in this post are [[https://orgmode.org/manual/TODO-Items.html][TODO Lists]]. Being able to combine note taking and
@@ -106,7 +106,7 @@ that variable to alert me of tasks with iOS native notifications.
106* Time Stamping 106* Time Stamping
107 107
108#+begin_quote 108#+begin_quote
109[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L106][View this section]] in org-mode. 109[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L106][View this section]] in org-mode.
110#+end_quote 110#+end_quote
111 111
112Another great feature are the [[https://orgmode.org/manual/Dates-and-Times.html][dates and times]] functionalities within org-mode. 112Another great feature are the [[https://orgmode.org/manual/Dates-and-Times.html][dates and times]] functionalities within org-mode.
@@ -137,7 +137,7 @@ different options available when creating timestamps.
137* Tags 137* Tags
138 138
139#+begin_quote 139#+begin_quote
140[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L137][View this section]] in org-mode. 140[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L137][View this section]] in org-mode.
141#+end_quote 141#+end_quote
142 142
143Next up are [[https://orgmode.org/manual/Tags.html][Tags]], which provide a way to document contexts within and across 143Next up are [[https://orgmode.org/manual/Tags.html][Tags]], which provide a way to document contexts within and across
@@ -162,7 +162,7 @@ m= and search for a tag of your choosing.
162* Tables 162* Tables
163 163
164#+begin_quote 164#+begin_quote
165[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L162][View this section]] in org-mode. 165[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L162][View this section]] in org-mode.
166#+end_quote 166#+end_quote
167 167
168One of the most inconvenient parts of writing in Markdown was dealing with 168One of the most inconvenient parts of writing in Markdown was dealing with
@@ -232,7 +232,7 @@ on the second line.
232* Source Code Blocks 232* Source Code Blocks
233 233
234#+begin_quote 234#+begin_quote
235[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L232][View this section]] in org-mode. 235[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L232][View this section]] in org-mode.
236#+end_quote 236#+end_quote
237 237
238** Introduction to Source Code Blocks 238** Introduction to Source Code Blocks
@@ -302,7 +302,7 @@ results below the code block.
302* Exporting and Publishing 302* Exporting and Publishing
303 303
304#+begin_quote 304#+begin_quote
305[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L302][View this section]] in org-mode. 305[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L302][View this section]] in org-mode.
306#+end_quote 306#+end_quote
307 307
308I would be remiss if I did not mention the native [[https://orgmode.org/manual/Exporting.html][exporting and publishing]] 308I would be remiss if I did not mention the native [[https://orgmode.org/manual/Exporting.html][exporting and publishing]]
@@ -336,7 +336,7 @@ external [[https://orgmode.org/tools.html][tools]], including [[https://orgmode.
336* Agenda 336* Agenda
337 337
338#+begin_quote 338#+begin_quote
339[[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L336][View this section]] in org-mode. 339[[https://git.sr.ht/~cyborg/cmc.pub/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L336][View this section]] in org-mode.
340#+end_quote 340#+end_quote
341 341
342Last, but not least, are [[https://orgmode.org/manual/Agenda-Views.html][Agenda Views]]. With agenda views, you can easily view 342Last, but not least, are [[https://orgmode.org/manual/Agenda-Views.html][Agenda Views]]. With agenda views, you can easily view
content/blog/2024-08-25-n8n-sentiment-analysis.org +3 −3
@@ -113,7 +113,7 @@ You can open the included workflow at
113and create a new configuration. 113and create a new configuration.
114 114
115#+caption: n8n Workflow 115#+caption: n8n Workflow
116[[https://img.cleberg.net/blog/20240825-n8n-sentiment-analysis/workflow.png]] 116[[https://img.cmc.pub/blog/20240825-n8n-sentiment-analysis/workflow.png]]
117 117
118This workflow contains the following nodes: 118This workflow contains the following nodes:
1191. Email Trigger (IMAP) 1191. Email Trigger (IMAP)
@@ -151,10 +151,10 @@ send yourself a test email!
151After testing each step noted above, n8n provided the results below - it works! 151After testing each step noted above, n8n provided the results below - it works!
152 152
153#+caption: Positive Results 153#+caption: Positive Results
154[[https://img.cleberg.net/blog/20240825-n8n-sentiment-analysis/positive_results.png]] 154[[https://img.cmc.pub/blog/20240825-n8n-sentiment-analysis/positive_results.png]]
155 155
156#+caption: Negative Results 156#+caption: Negative Results
157[[https://img.cleberg.net/blog/20240825-n8n-sentiment-analysis/negative_results.png]] 157[[https://img.cmc.pub/blog/20240825-n8n-sentiment-analysis/negative_results.png]]
158 158
159While this isn't anything earth-shattering, it does show easy it is to get 159While this isn't anything earth-shattering, it does show easy it is to get
160started with n8n and large language models in a self-hosted environment. 160started with n8n and large language models in a self-hosted environment.
content/blog/2024-09-20-prometheus-grafana-cloud.org +9 −9
@@ -277,7 +277,7 @@ and determine what Grafana should do when an alert is triggered.
277** OnCall 277** OnCall
278 278
279#+caption: OnCall 279#+caption: OnCall
280[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/oncall.png]] 280[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/oncall.png]]
281 281
282Within the Alerts & IRM section of Grafana (=/alerts-and-incidents=), open the 282Within the Alerts & IRM section of Grafana (=/alerts-and-incidents=), open the
283Users page. 283Users page.
@@ -299,12 +299,12 @@ users and teams to be on call for specific date and time ranges. For my
299purposes, I put myself on-call 24/7 so that I receive all alerts. 299purposes, I put myself on-call 24/7 so that I receive all alerts.
300 300
301#+caption: User Information 301#+caption: User Information
302[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/irm_user_info.png]] 302[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/irm_user_info.png]]
303 303
304** Alerting 304** Alerting
305 305
306#+caption: Alerting Insights 306#+caption: Alerting Insights
307[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/alerting_insights.png]] 307[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/alerting_insights.png]]
308 308
309Now that we have defined users and team associated with an on-call schedule and 309Now that we have defined users and team associated with an on-call schedule and
310configured to receive the proper alerts, let's define a rule that will generate 310configured to receive the proper alerts, let's define a rule that will generate
@@ -323,13 +323,13 @@ evaluation group. This is connected to our Grafana email, but can be associated
323with any notification policy. 323with any notification policy.
324 324
325#+caption: New Alert Rule 325#+caption: New Alert Rule
326[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/new_alert.png]] 326[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/new_alert.png]]
327 327
328When the alert fires, it will generate an email (or whatever notification policy 328When the alert fires, it will generate an email (or whatever notification policy
329you assigned) and will look something like the following image. 329you assigned) and will look something like the following image.
330 330
331#+caption: Alerting Example 331#+caption: Alerting Example
332[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/email_alert.png]] 332[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/email_alert.png]]
333 333
334** Dashboards 334** Dashboards
335 335
@@ -337,13 +337,13 @@ As promised above, here are some dashboard screenshots based on the
337configurations above. 337configurations above.
338 338
339#+caption: Nginx Dashboard 339#+caption: Nginx Dashboard
340[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/dashboard_nginx.png]] 340[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/dashboard_nginx.png]]
341 341
342#+caption: Node Dashboard 342#+caption: Node Dashboard
343[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/dashboard_node.png]] 343[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/dashboard_node.png]]
344 344
345#+caption: OnCall Dashboard 345#+caption: OnCall Dashboard
346[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/dashboard_oncall.png]] 346[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/dashboard_oncall.png]]
347 347
348#+caption: Prometheus Dashboard 348#+caption: Prometheus Dashboard
349[[https://img.cleberg.net/blog/20240920-prometheus-grafana-cloud/dashboard_prometheus.png]] 349[[https://img.cmc.pub/blog/20240920-prometheus-grafana-cloud/dashboard_prometheus.png]]
content/blog/2024-10-31-continue-ollama-code-assistant.org +5 −5
@@ -201,19 +201,19 @@ Continue:
201Below are a few screenshots from my current VS Codium window: 201Below are a few screenshots from my current VS Codium window:
202 202
203#+caption: Available Continue Commands 203#+caption: Available Continue Commands
204[[https://img.cleberg.net/blog/20241031-continue-ollama-code-assistant/continue_commands.png]] 204[[https://img.cmc.pub/blog/20241031-continue-ollama-code-assistant/continue_commands.png]]
205 205
206#+caption: Continue Fullscreen Chat Window 206#+caption: Continue Fullscreen Chat Window
207[[https://img.cleberg.net/blog/20241031-continue-ollama-code-assistant/continue_fullscreen.png]] 207[[https://img.cmc.pub/blog/20241031-continue-ollama-code-assistant/continue_fullscreen.png]]
208 208
209#+caption: Inline Hotkeys 209#+caption: Inline Hotkeys
210[[https://img.cleberg.net/blog/20241031-continue-ollama-code-assistant/continue_inline_hotkeys.png]] 210[[https://img.cmc.pub/blog/20241031-continue-ollama-code-assistant/continue_inline_hotkeys.png]]
211 211
212#+caption: Inline Editing Suggestions 212#+caption: Inline Editing Suggestions
213[[https://img.cleberg.net/blog/20241031-continue-ollama-code-assistant/continue_inline.png]] 213[[https://img.cmc.pub/blog/20241031-continue-ollama-code-assistant/continue_inline.png]]
214 214
215#+caption: Sidebar Context Window 215#+caption: Sidebar Context Window
216[[https://img.cleberg.net/blog/20241031-continue-ollama-code-assistant/continue_sidebar.png]] 216[[https://img.cmc.pub/blog/20241031-continue-ollama-code-assistant/continue_sidebar.png]]
217 217
218* Conclusion 218* Conclusion
219 219
content/blog/2024-12-27-self-hosting-the-lounge.org +5 −5
@@ -11,7 +11,7 @@ desirable features for a modern IRC client. The Lounge supports push
11notifications, link previews, file uploads, always connected, multi-user 11notifications, link previews, file uploads, always connected, multi-user
12support, and is available as a PWA for mobile devices. 12support, and is available as a PWA for mobile devices.
13 13
14I wanted to write this as I had written a post about [[https://cleberg.net/blog/self-hosting-convos.html][self-hosting Convos]] and 14I wanted to write this as I had written a post about [[https://cmc.pub/blog/self-hosting-convos.html][self-hosting Convos]] and
15have recently migrated over to The Lounge instead. 15have recently migrated over to The Lounge instead.
16 16
17If you'd like to try a demo first, head over to [[https://demo.thelounge.chat/][the official demo website]]. 17If you'd like to try a demo first, head over to [[https://demo.thelounge.chat/][the official demo website]].
@@ -60,7 +60,7 @@ browsing from a different device. Don't forget to allow the port through your
60machine's firewall, if you have one enabled. 60machine's firewall, if you have one enabled.
61 61
62#+caption: Login 62#+caption: Login
63[[https://img.cleberg.net/blog/20241229-thelounge/login.png]] 63[[https://img.cmc.pub/blog/20241229-thelounge/login.png]]
64 64
65** Nginx Reverse Proxy 65** Nginx Reverse Proxy
66 66
@@ -155,10 +155,10 @@ bottom of the sidebar and connect to individual channels or users via the plus
155(=+=) button next to your server's name in the sidebar. 155(=+=) button next to your server's name in the sidebar.
156 156
157#+caption: New Server Connection 157#+caption: New Server Connection
158[[https://img.cleberg.net/blog/20241229-thelounge/new_connection.png]] 158[[https://img.cmc.pub/blog/20241229-thelounge/new_connection.png]]
159 159
160#+caption: Existing Server Connection 160#+caption: Existing Server Connection
161[[https://img.cleberg.net/blog/20241229-thelounge/existing_connection.png]] 161[[https://img.cmc.pub/blog/20241229-thelounge/existing_connection.png]]
162 162
163#+caption: Channel View 163#+caption: Channel View
164[[https://img.cleberg.net/blog/20241229-thelounge/channel.png]] 164[[https://img.cmc.pub/blog/20241229-thelounge/channel.png]]
content/blog/2025-01-23-self-hosting-tandoor.org +7 −7
@@ -125,22 +125,22 @@ The app is now available on your custom domain!
125** Screenshots 125** Screenshots
126 126
127#+caption: Login 127#+caption: Login
128[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/login.png]] 128[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/login.png]]
129 129
130#+caption: Recipes 130#+caption: Recipes
131[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/recipes.png]] 131[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/recipes.png]]
132 132
133#+caption: Meal Plan 133#+caption: Meal Plan
134[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/mealplan.png]] 134[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/mealplan.png]]
135 135
136#+caption: Shopping Lists 136#+caption: Shopping Lists
137[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/shopping.png]] 137[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/shopping.png]]
138 138
139#+caption: Cook Book 139#+caption: Cook Book
140[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/cookbook.png]] 140[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/cookbook.png]]
141 141
142#+caption: Import 142#+caption: Import
143[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/import.png]] 143[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/import.png]]
144 144
145#+caption: Administration Panel 145#+caption: Administration Panel
146[[https://img.cleberg.net/blog/20250123-self-hosting-tandoor/admin.png]] 146[[https://img.cmc.pub/blog/20250123-self-hosting-tandoor/admin.png]]
content/blog/2025-02-11-obscura-vpn.org +4 −4
@@ -55,7 +55,7 @@ far as I can tell, there is no free tier available. In my opinion, this is a
55good thing as I hesitate to understand how privacy-focused apps make money when 55good thing as I hesitate to understand how privacy-focused apps make money when
56they offer free services to users. 56they offer free services to users.
57 57
58[[https://img.cleberg.net/blog/20250211-obscura-vpn/payment.png]] 58[[https://img.cmc.pub/blog/20250211-obscura-vpn/payment.png]]
59#+caption: Payment 59#+caption: Payment
60 60
61** Connection 61** Connection
@@ -64,10 +64,10 @@ Once you've enrolled in either a subscription or one-time payment, Obscura will
64return you to the app and allow you to connect. You can choose a specific server 64return you to the app and allow you to connect. You can choose a specific server
65location or automatically connect. 65location or automatically connect.
66 66
67[[https://img.cleberg.net/blog/20250211-obscura-vpn/connect.png]] 67[[https://img.cmc.pub/blog/20250211-obscura-vpn/connect.png]]
68#+caption: Initial Connection 68#+caption: Initial Connection
69 69
70[[https://img.cleberg.net/blog/20250211-obscura-vpn/toolbar.png]] 70[[https://img.cmc.pub/blog/20250211-obscura-vpn/toolbar.png]]
71#+caption: Toolbar Utility 71#+caption: Toolbar Utility
72 72
73** Speed 73** Speed
@@ -91,7 +91,7 @@ nodes before connecting to your target.
91From the image below, we can see that Mullvad confirmed my traffic to be 91From the image below, we can see that Mullvad confirmed my traffic to be
92connected through a Mullvad IP address. 92connected through a Mullvad IP address.
93 93
94[[https://img.cleberg.net/blog/20250211-obscura-vpn/mullvad-check.png]] 94[[https://img.cmc.pub/blog/20250211-obscura-vpn/mullvad-check.png]]
95#+caption: Mullvad Check 95#+caption: Mullvad Check
96 96
97* Final Thoughts 97* Final Thoughts
content/blog/2025-02-24-email-migration.org +1 −1
@@ -48,7 +48,7 @@ This led to a dead end as my two methods failed:
48At this point, I decided to take a step back and use [[https://github.com/djcb/mu][mu]], a command-line utility 48At this point, I decided to take a step back and use [[https://github.com/djcb/mu][mu]], a command-line utility
49that would index my files and sync back and forth with Migadu for me. 49that would index my files and sync back and forth with Migadu for me.
50 50
51Using my blog post, [[https://cleberg.net/blog/mu4e.html][Email in Doom Emacs with Mu4e on macOS]], (and skipping the 51Using my blog post, [[https://cmc.pub/blog/mu4e.html][Email in Doom Emacs with Mu4e on macOS]], (and skipping the
52mu4e parts) I was able to set up a minimal directory connected to my Migadu IMAP 52mu4e parts) I was able to set up a minimal directory connected to my Migadu IMAP
53account. Using my terminal, I simply moved all of my messages into the =mu= 53account. Using my terminal, I simply moved all of my messages into the =mu=
54directory and synchronized the account, and voila, my messages synchronized 54directory and synchronized the account, and voila, my messages synchronized
content/index.org +1 −1
@@ -1,2 +1,2 @@
1#+title: cleberg.net 1#+title: cmc.pub
2#+description: Just a blip of ones and zeroes. 2#+description: Just a blip of ones and zeroes.
content/salary/index.org +2 −2
@@ -46,7 +46,7 @@ raise while in the same role.
46| Teaching Assistant | University of Nebraska | Lincoln, NE | 2017-08 | 2018-05 | $7/hour | 46| Teaching Assistant | University of Nebraska | Lincoln, NE | 2017-08 | 2018-05 | $7/hour |
47| Community Management Intern | Walgreens | Lincoln, NE | 2017-06 | 2018-02 | $14/hour | 47| Community Management Intern | Walgreens | Lincoln, NE | 2017-06 | 2018-02 | $14/hour |
48 48
49[[[https://cleberg.net/salary.csv][source data]]] 49[[[https://cmc.pub/salary.csv][source data]]]
50 50
51** Salary Visualization 51** Salary Visualization
52:PROPERTIES: 52:PROPERTIES:
@@ -56,7 +56,7 @@ See the graph below for a visualization of each job's salary over time, as well
56as percentage increases or decreases between jobs. 56as percentage increases or decreases between jobs.
57 57
58#+caption: Salary Visualization 58#+caption: Salary Visualization
59[[https://img.cleberg.net/blog/salary/salary.png]] 59[[https://img.cmc.pub/blog/salary/salary.png]]
60 60
61This page was inspired by [[https://xeiaso.net/salary-transparency/][Xe]], and I'm quoting the following wording from them as 61This page was inspired by [[https://xeiaso.net/salary-transparency/][Xe]], and I'm quoting the following wording from them as
62I want to reiterate this piece: 62I want to reiterate this piece:
content/services/index.org +10 −11
@@ -1,15 +1,14 @@
1#+title: Services 1#+title: Services
2#+slug: index 2#+slug: index
3 3
4- [[https://ao.cleberg.net/][AnonymousOverflow]] - A StackOverflow proxy 4- [[https://ao.cmc.pub/][AnonymousOverflow]] - A StackOverflow proxy
5- [[https://cyberchef.cleberg.net/][CyberChef]] - The Cyber Swiss Army Knife 5- [[https://cyberchef.cmc.pub/][CyberChef]] - The Cyber Swiss Army Knife
6- [[https://files.cleberg.net/][FileArchive]] - An interesting file archive 6- [[https://files.cmc.pub/][FileArchive]] - An interesting file archive
7- [[https://paste.cleberg.net/][FlashPaper]] - One-time encrypted password/secret sharing 7- [[https://paste.cmc.pub/][FlashPaper]] - One-time encrypted password/secret sharing
8- [[https://invidious.cleberg.net/][Invidious]] - A YouTube proxy 8- [[https://office.cmc.pub/][Office]] - The world's smallest office suite
9- [[https://office.cleberg.net/][Office]] - The world's smallest office suite 9- [[https://org.cmc.pub/][Org-Live]] - A basic org-mode editor for the web I built
10- [[https://org.cleberg.net/][Org-Live]] - A basic org-mode editor for the web I built 10- [[https://priviblur.cmc.pub][Priviblur]] - A privacy-focused alternative frontend to Tumblr
11- [[https://priviblur.cleberg.net][Priviblur]] - A privacy-focused alternative frontend to Tumblr 11- [[https://rimgo.cmc.pub/][Rimgo]] - An alternative frontend for Imgur
12- [[https://rimgo.cleberg.net/][Rimgo]] - An alternative frontend for Imgur 12- [[https://search.cmc.pub/][SearXNG]] - A privacy-respecting, open metasearch engine
13- [[https://search.cleberg.net/][SearXNG]] - A privacy-respecting, open metasearch engine
14 13
15See the [[https://git.sr.ht/~cyborg/cleberg.net/log/main/item/content/services/index.org][git log]] if you want to see changes that have been made. 14See the [[https://git.sr.ht/~cyborg/cmc.pub/log/main/item/content/services/index.org][git log]] if you want to see changes that have been made.
content/wiki/ios.org +1 −1
@@ -3,7 +3,7 @@
3 3
4Related: 4Related:
5 5
6- [[https://cleberg.net/wiki/hardware.html][Hardware]] 6- [[https://cmc.pub/wiki/hardware.html][Hardware]]
7 7
8My primary mobile OS. Currently running iOS 17. This wiki page contains most of 8My primary mobile OS. Currently running iOS 17. This wiki page contains most of
9the apps I have used at one point or another across my different iPhones. 9the apps I have used at one point or another across my different iPhones.
content/wiki/macos.org +1 −1
@@ -3,7 +3,7 @@
3 3
4Related: 4Related:
5 5
6- [[https://cleberg.net/wiki/hardware/][Hardware]] 6- [[https://cmc.pub/wiki/hardware/][Hardware]]
7 7
8My primary OS. Currently running macOS Sonoma 14. This wiki page contains most 8My primary OS. Currently running macOS Sonoma 14. This wiki page contains most
9of the apps I have used at one point or another across my different Macbooks. 9of the apps I have used at one point or another across my different Macbooks.
publish.el +3 −3
@@ -8,13 +8,13 @@
8 8
9;; Set default URL for Weblorg 9;; Set default URL for Weblorg
10(if (string= (getenv "ENV") "prod") 10(if (string= (getenv "ENV") "prod")
11 (setq weblorg-default-url "https://cleberg.net")) 11 (setq weblorg-default-url "https://cmc.pub"))
12 12
13;; Define site configuration 13;; Define site configuration
14(weblorg-site 14(weblorg-site
15 :theme nil 15 :theme nil
16 :template-vars `(("site_name" . "cleberg.net") 16 :template-vars `(("site_name" . "cmc.pub")
17 ("site_owner" . "Christian Cleberg <hello@cleberg.net>") 17 ("site_owner" . "Christian Cleberg <hello@cmc.pub>")
18 ("site_description" . "Just a blip of ones and zeroes."))) 18 ("site_description" . "Just a blip of ones and zeroes.")))
19 19
20;; Define routes for rendering content 20;; Define routes for rendering content
theme/static/.well-known/security.txt +3 −3
@@ -1,11 +1,11 @@
1-----BEGIN PGP SIGNED MESSAGE----- 1-----BEGIN PGP SIGNED MESSAGE-----
2Hash: SHA256 2Hash: SHA256
3 3
4Contact: mailto:security@cleberg.net 4Contact: mailto:hello@cmc.pub
5Expires: 2100-01-01T06:00:00.000Z 5Expires: 2100-01-01T06:00:00.000Z
6Encryption: https://cleberg.net/gpg.txt 6Encryption: https://cmc.pub/gpg.txt
7Preferred-Languages: en 7Preferred-Languages: en
8Canonical: https://cleberg.net/.well-known/security.txt 8Canonical: https://cmc.pub/.well-known/security.txt
9-----BEGIN PGP SIGNATURE----- 9-----BEGIN PGP SIGNATURE-----
10 10
11iQIzBAEBCAAdFiEEOReXP7FZu7hhlFOFaUUaUXrAyzcFAmYkB9IACgkQaUUaUXrA 11iQIzBAEBCAAdFiEEOReXP7FZu7hhlFOFaUUaUXrAyzcFAmYkB9IACgkQaUUaUXrA
theme/static/gpg.txt +22 −49
@@ -1,52 +1,25 @@
1-----BEGIN PGP PUBLIC KEY BLOCK----- 1-----BEGIN PGP PUBLIC KEY BLOCK-----
2 2
3mQINBGN0Z8YBEAC6gWrNuB0nyAVkIuCsErIqpO7ngH0HV2sZD54t0ge9on0Fb+QA 3mDMEZ9CjJhYJKwYBBAHaRw8BAQdANl9s/8i2dlImJtTkHsOx/2RrAbc1V4zcrjJd
4S/oRSK3bcwgR09lnIwPDWpQqlPpzKib2bZ9USBMD0lcgPb0hMr0fafs/+/FCRQV1 4EvpdYKK0IUNocmlzdGlhbiBDbGViZXJnIDxoZWxsb0BjbWMucHViPoiTBBMWCgA7
5Pvc/e37n2/KHRW2KoiM4sOFT9LYxi7LBGgXffusx6uVBzrNUacTFFd/pMNkPd5uX 5FiEExocApvpLcYO2zuR97tyZXNFPGTwFAmfQoyYCGyMFCwkIBwICIgIGFQoJCAsC
6/J4IT+QbDh1bKw4CtLNvoh7xTcfdpzdqpHfNkjm+24pEnbrv6QrSpBzol4uulaB+ 6BBYCAwECHgcCF4AACgkQ7tyZXNFPGTyuIgEAlnx3gjFxc+61SLqJRih6cS3hQfiH
75I8JF938/FBHBndVMT9UQcGRtX+ttZTp9U7m0TzCAsyrVV/V8rEbcGTMlU+yyUjR 73zhBQiF/EjZOv5MA/1w9iY6HquKJb+4VjFSvx8dI0iYLOmLnU+grIEVZHAIAiQIz
8TDRX4Dwj79IfL+vLZgFGLd8GwO08AirNkHYaZwzvYi42I5Bh8cX1L2IippYL8YYF 8BBABCAAdFiEEOReXP7FZu7hhlFOFaUUaUXrAyzcFAmfQpDsACgkQaUUaUXrAyzcH
9ASX26pXC6mxTwC/hjCA7rzyIMD5sf1UailYm5MvrhEujRYOPWDU+kex2t2HJpzvN 9rxAAk3s5KEwbke95EDa15cfvQa0sRTO8kHlLy713Ypjw2F2sTUiW4TNWlbwHvz7f
10vYSVIS0sKi7iHr82VA+/spR6Ii07/84zZPQ1h/sXJLaDolQV2pU7WJBPyFO957Er 10ZNfi65Ds2d9vj7qLFWEgWGNgcevRJQAIKpzHQe9pi2oBuFxxbwL8Ick07cDJ4eDz
11BggugSpB1U/blgU+B9vOR+2sMEReRQwVF7aVhQ2Wy5wOZRHlmTZVMNO5SawXkiTp 11CTER+EF6EUZA30PxiKKvCgprAnmZYoDTEko3rpj7O04hijJM2I/ZUcEQf68doM4s
12Bt4IwhThzMcUQstXxf5V44pPsB5uQE3n4WdROfJTOiB2cZJZOiXe3iPiiTsVsBc2 12bIhtDcCEkNSGvYHsP9XAh6f+NTwqD6WtqvOKnI0g2Ea59c/qggqquC5jx4KvCOa1
13tcqxJmwplMS4jNddJ9Nh0NTCKNk3Yt0iZzWlQDKAzR1uSGW9fQGAdh/UZQARAQAB 13NQnqbFC/DB+CADSkhwSkBv+z44B7T0n2+uRvXWx+zkFZqNYkw0i9o9evoXRCKq0x
14tCVDaHJpc3RpYW4gQ2xlYmVyZyA8aGVsbG9AY2xlYmVyZy5uZXQ+iQJRBBMBCAA7 14GgPeEtcaVuAm8fru1yyiRIUBHwQ8up3ySpyygn56DhxL8G+Vw1+3J7KC0yk8dYb3
15FiEEOReXP7FZu7hhlFOFaUUaUXrAyzcFAmN0Z8YCGwMFCwkIBwICIgIGFQoJCAsC 15paYodraF27mulRJHm7DPd8JuT0OVOnKBLE/P/BGPYOq39kYTn2qzvXQzPQvfbkdR
16BBYCAwECHgcCF4AACgkQaUUaUXrAyzcrIQ//ZzCvcNKi2exZ4MfH68q9cIrJtHA3 16oH+PM31HUmYkYRjZxkVdsE1SpwkRXyFG1GLNEOz73bdes/Vc/sajG7qbZXNaJfwD
17+FQ/3yTwAMiXmaTctHTcME+4Um12TCJMH/PwOkmxjolln5LfNHC8emcNs9Uaoga7 17gUfL1x2W1CkSKiiaTlWdKZtPB43wnN2KZqgJ5Kj1axqCTw3KFArg/pkjgxjRC+IK
181Cy8ihqKbQMaZN1ZHrgaddeTs7+N1+/u8yAZPXo+N6pmLaeuPfn1MMhcejTbo+C/ 18uKmWiP8sLWTDwTjnvITnVmXiwMkv6TLPmljsVGOLfDtrFVfB1iAn4hceEajPOhYh
19c22/yj97ym6Iuc9oodnbHb2rxhGKReQLJmqzBHWd0syFbYDopmhY2MjMawVirPG7 195iiJg6ZE+43NhqKQcgEqcyX3T/giVC528Ww3BJ5EHuLJn2i4OARn0KOpEgorBgEE
20vt6EbiFHkWLBY08FYbOQWT4bXdSHlLxT3q5m+j0HdVjHxd/vOk+dc3FPtK8ZpTVC 20AZdVAQUBAQdA7X3Gt9b5IobqDcudWMZdoPPkvpoomBkEdU+lK+KdqAQDAQgHiHgE
21qKa2oQ6dl4fjp8GVbu4f4SMDDJRR1iOoLTNEhKDSZHkZdjH0/LQRLsf49cqbff1Y 21GBYKACAWIQTGhwCm+ktxg7bO5H3u3Jlc0U8ZPAUCZ9CjqQIbDAAKCRDu3Jlc0U8Z
22mpxJcNv1/RmgzctTmBAoGt2RS8mT97H8AUW7v7PGs3eS/OkrY1e4cuTrmcafEaMy 22PEUJAP4+NKbFgz+xYK7dnmYMmC5EpVaVQQenLrRQnPT/5G/AZgD/ZY+sXairfJlL
23J2L7aUxDVVUCvRKsONXx+zSLin7ByRHypqRfxGqnpQUDPW4Oty6CewsSXktDjIUx 23HzMY8Xt1sB5k29myBFTDIhwq+Usm8go=
24FXzMwfuNXKS/KHqcUxamE0rL8O2d3CJI4YAbWu2Y0GtBetfuaaOgi56cYqv86zGu 24=dq5B
25os0oga1ZakiCeRPgEaipPaZZMf6pCvucF2VyaUHwIOMcSVEH5nhHO4McgYLSZucx
26na5qcLk06EP+1HjmifGqPmkxHTW/ez5x6m/QT9jOzyRu94p3IG5DT1Lh8kl6gid7
27YntCGrwcsvw8zKi5Ag0EY3RnxgEQANj1c0ZS3npmtj1V5m+vsq1mK2g4K66senuC
28Gf+wTudYgcUzBhcTtEwzFJTwFFUMkfpgmkgYrlMB7iH+85YxiDR2sBhMg56haJXn
29LGnSaWqHVE4P0yyHI/6QasYxdJWfYkSH9m3B8yW1VKs4eSSL6S/U/qdHzDRRZCEX
30lNhvplrWcWv6Ifk/aYJ+njwn+jhXT4j8lbhem5oCbg4olY84bs+rfvWHTrWdGD1N
31sHkbLEwLgnmJou7vkVY9vkIMhbgpvNp1CEx0zOGTMhlPrCYBCFUGR7Bnoqwwl/C4
32CTBwZxBE5bNBpsEdySYhmHW+YHRHIxeboLmOyoc0CpT/zhu2y5JxqJBiGEDYhTM/
33V2nNqKGDgUenXqjwoBw5oCNQJ35NNgFgEbphhs71W7VVwEPRdppcem33TcpFBeoE
34vTzCfK6xJA82ASJHKz0hajEQchJ5jJZYo4wRZJGFv2jMIhq24DLIqxgjZeBKLEzl
35RigfuuCrAsQBIMtTUSUUvxjB/b+UDYssqi9Q+8F7FcwqE9egaj7xVQprTAYcGW7S
36zxfjzFSbJSl+b4WQSewFtmFIx62RYemBH+YPxbwOhQAuRWgEg0E6xeuILu22xydf
37DEkbk1GEXH3ilYxl4LhFy2EmUbvB8rxh5Vk3A1KVaBe/ndPhwznTe7X9ypRHzQiV
38Jkc2vVGjABEBAAGJAjYEGAEIACAWIQQ5F5c/sVm7uGGUU4VpRRpResDLNwUCY3Rn
39xgIbDAAKCRBpRRpResDLN60xD/9pEDZK7SXZy/nhVdHMKn2UyF7F8dEXYxILmXp0
4053zDDVN5D7luHjcI5pYynWqlgXWPAaCOthWtexr3r3b8fVSc7yxi497fFa3jiVkn
41VNYjDCa4SK5H6Rdf6I5rv+SS1PPmiVFKL7xuWcJ9YucHACdeH0UUmPCMmHHDc9SY
42MGUPjadFxjCGtBz8itS+ufDiZsTU9ov7XRE+pVyrDlMSVD1Ex02vMRtr+UD9lkYb
43KGs32TEDw28+OgvSZc81P6/BuxmG2XxgvU5OOrlVFOs4VU5P0TnZVxbVuKyO4fkZ
44sxSApn+U4lU89dM0M1l1S2NZtvkWTIW2jFvzwXDCPxs5GAXAGtnEO8gjGICo2QV3
45VovHMTmPz7Bo87fqGZkfZatzvAeHW92FIhQBOdgSiCwSDRPVVdPTpQ27BaUrfH8p
46aS81RhlCWgKptFKj4+MAqGEf9V6jUIKn5EvdSxCZ5XXHmaBL/kXxTPaDJiK8nMKv
47dr/iwtb23SwNrBLQkYcI+6aZj4jcqr5T0H2EsC8h9jQWMG+S9/BzhJOI/QeepHvD
48VJQve5jozXbz+iBRLrWbEgbNydL/LT9iQCWaWt2HCPQ7bPrxKqya8fUMPxi3VCZZ
49AuXpJzywCyVuzpuChuvdMflHbmx1r8uJjSmUCJf6ngt0TQMXiwL3vsECTV7ZtVge
500jZ4tA==
51=pl2G
52-----END PGP PUBLIC KEY BLOCK----- 25-----END PGP PUBLIC KEY BLOCK-----
theme/templates/base.html +1 −1
@@ -33,7 +33,7 @@
33 </p> 33 </p>
34 <p>Last build: &lt;{{ now() | strftime("%Y-%m-%d %a %H:%M:%S") }}&gt;</p> 34 <p>Last build: &lt;{{ now() | strftime("%Y-%m-%d %a %H:%M:%S") }}&gt;</p>
35 <p> 35 <p>
36 <a href="https://git.sr.ht/~cyborg/cleberg.net" target="_blank" 36 <a href="https://git.sr.ht/~cyborg/cmc.pub" target="_blank"
37 rel="noopener">Source Code</a> &middot; 37 rel="noopener">Source Code</a> &middot;
38 <a href="/feed.xml">RSS Feed</a> &middot; 38 <a href="/feed.xml">RSS Feed</a> &middot;
39 <a href="/.well-known/security.txt">security.txt</a> 39 <a href="/.well-known/security.txt">security.txt</a>
theme/templates/feed.xml +3 −3
@@ -10,7 +10,7 @@
10 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" 10 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
11 xmlns:media="http://search.yahoo.com/mrss/"> 11 xmlns:media="http://search.yahoo.com/mrss/">
12 <channel> 12 <channel>
13 <title>{{ site_name | default("cleberg.net") }}</title> 13 <title>{{ site_name | default("cmc.pub") }}</title>
14 <atom:link 14 <atom:link
15 href="{{ url_for("rss") }}" 15 href="{{ url_for("rss") }}"
16 rel="self" type="application/rss+xml" /> 16 rel="self" type="application/rss+xml" />
@@ -20,13 +20,13 @@
20 <pubDate>{{ posts | first | getattr("date") | strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate> 20 <pubDate>{{ posts | first | getattr("date") | strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
21 <lastBuildDate>{{ now() | strftime("%a, %d %b %Y %H:%M:%S %z") }}</lastBuildDate> 21 <lastBuildDate>{{ now() | strftime("%a, %d %b %Y %H:%M:%S %z") }}</lastBuildDate>
22 <generator>{{ meta.generator }}</generator> 22 <generator>{{ meta.generator }}</generator>
23 <webMaster>{{ site_owner | default("hello@cleberg.net") }}</webMaster> 23 <webMaster>{{ site_owner | default("hello@cmc.pub") }}</webMaster>
24 24
25 {% for post in posts %} 25 {% for post in posts %}
26 <item> 26 <item>
27 <title>{{ post.title }}</title> 27 <title>{{ post.title }}</title>
28 <link>{{ url_for("blog", slug=post.slug) }}</link> 28 <link>{{ url_for("blog", slug=post.slug) }}</link>
29 <author>{{ post.author|default("hello@cleberg.net") }}</author> 29 <author>{{ post.author|default("hello@cmc.pub") }}</author>
30 <guid isPermaLink="false">{{ url_for("blog", slug=post.slug) }}</guid> 30 <guid isPermaLink="false">{{ url_for("blog", slug=post.slug) }}</guid>
31 <pubDate>{{ post.date|strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate> 31 <pubDate>{{ post.date|strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
32 <description><![CDATA[{{ post.html|safe }}]]></description> 32 <description><![CDATA[{{ post.html|safe }}]]></description>
theme/templates/index.html +8 −11
@@ -1,9 +1,10 @@
1{% extends "base.html" %} {% block main %} 1{% extends "base.html" %} {% block main %}
2<section> 2<section>
3 <h1>cleberg.net</h1> 3 <h1>cmc.pub</h1>
4 <pre>pub rsa4096 2022-11-16 [SC] 4 <pre>pub ed25519 2025-03-11 [SCA]
5 <a href="/gpg.txt">3917 973F B159 BBB8 6194 5385 6945 1A51 7AC0 CB37</a> 5 <a href="/gpg.txt">C687 00A6 FA4B 7183 B6CE E47D EEDC 995C D14F 193C</a>
6uid [ultimate] Christian Cleberg &lt;hello@cleberg.net&gt;</pre> 6uid [ultimate] Christian Cleberg &lt;hello@cmc.pub&gt;
7sub cv25519 2025-03-11 [E]</pre>
7</section> 8</section>
8<section> 9<section>
9 <h2>Recent Blog Posts</h2> 10 <h2>Recent Blog Posts</h2>
@@ -33,7 +34,7 @@ uid [ultimate] Christian Cleberg &lt;hello@cleberg.net&gt;</pre>
33<section> 34<section>
34 <h2>Everything Else</h2> 35 <h2>Everything Else</h2>
35 <ul> 36 <ul>
36 <li><a href="https://cv.cleberg.net">Curriculum Vitae</a></li> 37 <li><a href="https://cv.cmc.pub">Curriculum Vitae</a></li>
37 <li><a href="/salary/">Salary</a></li> 38 <li><a href="/salary/">Salary</a></li>
38 <li><a href="/services/">Services</a></li> 39 <li><a href="/services/">Services</a></li>
39 <li><a href="/wiki/">Wiki</a></li> 40 <li><a href="/wiki/">Wiki</a></li>
@@ -43,13 +44,9 @@ uid [ultimate] Christian Cleberg &lt;hello@cleberg.net&gt;</pre>
43<section> 44<section>
44 <h2>Contact</h2> 45 <h2>Contact</h2>
45 <ul> 46 <ul>
46 <li><a href="mailto:hello@cleberg.net">hello@cleberg.net</a> (<a href="https://cleberg.net/gpg.txt">GPG</a>)</li> 47 <li><a href="mailto:hello@cmc.pub">hello@cmc.pub</a> (<a href="https://cmc.pub/gpg.txt">GPG</a>)</li>
47 <li>cyb0rg on <a href="https://libera.chat/">libera.chat</a></li> 48 <li>cyb0rg on <a href="https://libera.chat/">libera.chat</a></li>
48 <li> 49 <li><a href="https://lemmy.cmc.pub/u/cmc">@cmc</a> on Lemmy</li>
49 <a href="https://matrix.to/#/@cyborg:matrix.tchncs.de"
50 >@cyborg:@matrix.tchncs.de</a
51 >
52 </li>
53 <li><a href="https://sr.ht/~cyborg">Sourcehut</a></li> 50 <li><a href="https://sr.ht/~cyborg">Sourcehut</a></li>
54 </ul> 51 </ul>
55</section> 52</section>
theme/templates/post.html +1 −1
@@ -23,6 +23,6 @@
23 {% endif %} 23 {% endif %}
24 </section> 24 </section>
25 <section>{{ post.html | safe }}</section> 25 <section>{{ post.html | safe }}</section>
26 <blockquote><a href="mailto:hello@cleberg.net">Reply via email</a></blockquote> 26 <blockquote><a href="mailto:hello@cmc.pub">Reply via email</a></blockquote>
27</article> 27</article>
28{% endblock %} 28{% endblock %}
utils/hooks/post-push +1 −1
@@ -26,4 +26,4 @@ emacs --script publish.el &>/dev/null
26minify -o theme/static/styles.min.css theme/static/styles.css 26minify -o theme/static/styles.min.css theme/static/styles.css
27 27
28# Deploy changes 28# Deploy changes
29rsync -r --delete-before .build/* $ubuntu_server:/var/www/cleberg.net/ 29rsync -r --delete-before .build/* $ubuntu_server:/var/www/cmc.pub/
utils/nginx-dev.conf +3 −3
@@ -1,12 +1,12 @@
1server { 1server {
2 server_name cleberg.net www.cleberg.net; 2 server_name cmc.pub www.cmc.pub;
3 3
4 root /usr/share/nginx/html; 4 root /usr/share/nginx/html;
5 index index.html; 5 index index.html;
6 autoindex on; 6 autoindex on;
7 7
8 access_log /var/log/nginx/cleberg.net.access.log; 8 access_log /var/log/nginx/cmc.pub.access.log;
9 error_log /var/log/nginx/cleberg.net.error.log; 9 error_log /var/log/nginx/cmc.pub.error.log;
10 10
11 location / { 11 location / {
12 try_files $uri $uri/ =404; 12 try_files $uri $uri/ =404;
utils/salary_visualization.py +1 −1
@@ -13,7 +13,7 @@ import plotly.graph_objs as go
13locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 13locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
14 14
15# Read the CSV file 15# Read the CSV file
16df = pd_read_csv('~/git/cleberg.net/theme/static/salary.csv') 16df = pd_read_csv('~/git/cmc.pub/theme/static/salary.csv')
17 17
18def format_currency(value: float) -> str: 18def format_currency(value: float) -> str:
19 """ 19 """