From 509b212c83c0a34852a14de3df4fb1df37eb6381 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Mon, 5 Aug 2024 21:43:33 -0500 Subject: [PATCH 1/5] nearing completion of cli renessance. --- content/posts/clirenaissance/index.md | 46 +++++++++++++----- content/posts/clirenaissance/zellij_hints.png | Bin 0 -> 79145 bytes 2 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 content/posts/clirenaissance/zellij_hints.png diff --git a/content/posts/clirenaissance/index.md b/content/posts/clirenaissance/index.md index 088a863..5bd387a 100644 --- a/content/posts/clirenaissance/index.md +++ b/content/posts/clirenaissance/index.md @@ -80,9 +80,9 @@ ls specifically can trace its history to 1961 --> Take a look at this [table](#appendix-the-tools) at the bottom of the page. -Ill wait. +I'll wait. Notice the relative scarcity between ~1995 and ~2015? -Id like to talk about a trend Ive seen these past few years, +Id like to talk about a trend I've seen these past few years, where people are rewriting and rethinking staples of the command line interface, why I think this trend might be happening, and why I think this trend is a good thing. @@ -214,7 +214,7 @@ but its an extremely usable IDE out of the box thanks to having all of its featu ### Concise and discoverable documentation -In my nvim config, I use [which-key](https://github.com/folke/which-key.nvim), +In my Nvim config, I use [which-key](https://github.com/folke/which-key.nvim), a plugin that displays available keybindings as you type. I've been using vim for almost a decade, including a long time without which-key, so its not like I never learned the keybindings, but I still find which-key useful. @@ -225,7 +225,7 @@ Naturally, when you go months without using certain parts of a program, you tend Which-key solves that handily, by offering quick, non-intrusive reminders of what is available. Here's what my which-key config looks like: -![Which-key.nvim](nvim_which_key.png) +![Which-key.nvim, showing contextual key hints](nvim_which_key.png) Now, which-key and its like have been around for a while, but other TUI programs have integrated contextual hints without the need for a plugin. @@ -236,15 +236,16 @@ The two that I am aware of are zellij and helix. Helix both has autocompletion for its built in command line and a contextual hint that appears when you press the first key in a multi key combo. This drastically helps both new and experienced users learn and remember keybinds without making the editor any less powerful. +![Zellij's hint bar](zellij_hints.png) + Zellij has a bottom bar displaying keybindings available in the current mode. This has proven invaluable for me, as I don't use a terminal multiplexer much (On GUI systems, I use the window manager for managing multiple terminals), and as such tend to forget the keybinds. - - +Though it does take up screen space, and a person who used Zellij every day would most likely disable it, +the hints bar is more than worth it for new and occasional users. ### Common usecases should be easy - Where possible, documentation should not even be required for the most common use cases. Whenever I want to use `find`, I almost always have to first look at the man page, as I don't use it quite often enough to memorize it. @@ -290,15 +291,34 @@ However, Just was designed from the outset to be a command runner, and as a resu it is much easier to pick up the just language and make a quick set of commands that can be run. By leaving behind the old tool, a new tool can be made that better fits the tasks that people use the tool for. -## The trendsetter - - - ## The languages - +Now, looking back at that table, one might notice a pattern in the languages used. +While almost all tools before 2010 or so were written in C, +the language selection after that are dominated by Rust and Go. - +Of course, there are exceptions to the pattern. +TeX was written in pascal, Neovim kept C as its primary language, +and there is the occasional new tool written in C or C++. +But there is still a clear pattern in the language choice for newly written tools. + +Now, why do you think that pattern has changed? +And have these new languages led to an increase in the number of tools being written? +I think so, and I don't actually think its the languages itself, so much as the libraries surrounding them. + +Both Rust and Go have healthy package ecosystems surrounding interaction with the terminal. +Rust has Clap for argument parsing, TODO for dealing with ANSI escape codes, +and Ratatui and TODO for making TUIs. +Go has a similar set of tools, with Cobra for CLI argument parsing, TODO + +These libraries combined with the extra ergonomics offered by the languages themselves, +make the barrier to entry lower, +allowing for more people to experiment with the design and ergonomics of CLI tools. + +## Conclusion + + ## Appendix: the tools diff --git a/content/posts/clirenaissance/zellij_hints.png b/content/posts/clirenaissance/zellij_hints.png new file mode 100644 index 0000000000000000000000000000000000000000..60d68cf84fee0c725497f9446cde696dea1c28ab GIT binary patch literal 79145 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Ĭg``qx54FIoo;`Qxyn83%TJXw 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 Date: Mon, 5 Aug 2024 22:11:37 -0500 Subject: [PATCH 2/5] added moving away from nextcloud post and skeleton of moving to germany. --- ...yncthing.md => movingAwayFromNextcloud.md} | 61 +++++++++++-------- content/posts/movingToGermany/index.md | 7 +++ 2 files changed, 44 insertions(+), 24 deletions(-) rename content/posts/{syncthing.md => movingAwayFromNextcloud.md} (63%) create mode 100644 content/posts/movingToGermany/index.md diff --git a/content/posts/syncthing.md b/content/posts/movingAwayFromNextcloud.md similarity index 63% rename from content/posts/syncthing.md rename to content/posts/movingAwayFromNextcloud.md index 97ec499..e227b4d 100644 --- a/content/posts/syncthing.md +++ b/content/posts/movingAwayFromNextcloud.md @@ -1,30 +1,37 @@ +++ -title = "Syncthing" -date = 2022-03-10T01:33:59-05:00 +title = "Moving away from Nextcloud" +date = 2024-08-05T01:33:59-05:00 draft = true +++ +## Nextcloud + +While Nextcloud had a lot of features and provides a nice web interface, +(I got a lot of use out of Nextcloud's caldav server) +I kept running into problems and limitations with it. +One thing is maintenance. Of my entire homelab, +I easily spent the most time troubleshooting and fixing Nextcloud, +sometimes having to reboot the VM multiple times per week. +Additionally, I've ran into a few annoying limitations, +such as the sever crashing if you view a folder with too many files in the web interface or apps. +Nextcloud does a lot of things, and does things very well, +but I would not describe it as a rock solid piece of software. + +Due to this, during our [move to germany](./movingToGermany) and the resuling reorganization of the homelab, +I decided to *finally* ditch Nextcloud, after talking about it for months. + +## Syncthing + [Syncthing](https://syncthing.net/) is one of the best file syncing tools in existence, and I don't say that lightly. Syncthing is a distributed, peer to peer file syncing service. This means that it doesn't rely on a central, always online server ran by you or someone else, but that your devices directly send files between themselves whenever they are online at the same time. +I used Syncthing to replace Nextclouds file syncing. -## Syncthing vs Nextcloud +### Syncthing vs Nextcloud -I use both Syncthing and Nextcloud for data storage and syncing, -and while Nextcloud has a lot of features and provides a nice web interface, -(I get a lot of use out of Nextcloud's caldav server) -I keep running into problems and limitations with it. -One thing is maintenance. Of my entire homelab, -I easily spend the most time troubleshooting and fixing Nextcloud, -sometimes having to reboot the VM multiple times per week. -Additionally, I've ran into a few annoying limitations more than once, -such as the sever crashing if you view a folder with too many files in the web interface or apps. -Nextcloud does a lot of things, and does things very well, -but I would not describe it as a rock solid piece of software. - -Syncthing, on the other hand, has no web file manager, +Unlike Nextcloud, Syncthing has no web file manager, does not do caldav or any of the other million things you can do with Nextcloud apps, and requires setup on both ends to setup a syncing connection. In short, Syncthing does only one thing. @@ -35,12 +42,7 @@ Even with a device like my phone, constantly loosing and regaining network access, files have synced perfectly, every time. -While all my files are stored on my Nextcloud server, -for folders with large number of files, -I only have one device syncing with Nextcloud, -and all other devices use Syncthing to sync with the device connected to Nextcloud. - -## Distributed? +### Distributed? With Dropbox or Google drive, files are not sent directly between your devices, but are sent from one device to the server, @@ -52,11 +54,22 @@ Instead, devices all connect to each other, sending changes made on one device t This makes all of your devices into a cluster, where no device has to always be online, but any devices that happen to be online at the same time synchronize while they can. -## Introducers +### Introducers If you have a lot of devices, making sure every device is connected to every other device can become a hassle. Thankfully, Syncthing has the concept of 'introducer' devices. In short, With an introducer, you only need to connect your devices to the introducer, and the introducer will make connections between any devices that share the same folder with the introducer. This is very useful, for example, to enable for a always online storage server, -an architecture that I plan to implement in the future if I ever get around to moving away from Nextcloud. +and it is the architecture that I used to fully replace nextcloud. + +## File Manager + +## Radicale + +The final function my family and I used nextcloud for was calander and todo list syncing. +This was done over Nextclouds CalDav server, +using DavX^5 as a mobile client, and Thunderbirds Lightning plugin as a desktop client. +This was almost a more important function than filesyncing, as my wife and I use it to organize our calanders, +Keep shopping lists, chore lists, lists of movies to watch, lists of long term projects, etc. +(we *really* used the hell out of todo lists.) diff --git a/content/posts/movingToGermany/index.md b/content/posts/movingToGermany/index.md new file mode 100644 index 0000000..03a25dc --- /dev/null +++ b/content/posts/movingToGermany/index.md @@ -0,0 +1,7 @@ +--- +title: "Moving To Germany" +date: 2024-08-05T22:10:32-05:00 +draft: true +--- + +## TODO From 74b977fd65fd8fd83231bba57782862ed0f3cd8a Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Mon, 5 Aug 2024 22:15:53 -0500 Subject: [PATCH 3/5] changed md archetype to use TOML instead of YAML. --- archetypes/default.md | 10 +++++----- content/posts/movingToGermany/index.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/archetypes/default.md b/archetypes/default.md index 00e77bd..191dc72 100644 --- a/archetypes/default.md +++ b/archetypes/default.md @@ -1,6 +1,6 @@ ---- -title: "{{ replace .Name "-" " " | title }}" -date: {{ .Date }} -draft: true ---- ++++ +title = "{{ replace .Name "-" " " | title }}" +date = {{ .Date }} +draft = true ++++ diff --git a/content/posts/movingToGermany/index.md b/content/posts/movingToGermany/index.md index 03a25dc..c3fa6f0 100644 --- a/content/posts/movingToGermany/index.md +++ b/content/posts/movingToGermany/index.md @@ -1,7 +1,7 @@ ---- -title: "Moving To Germany" -date: 2024-08-05T22:10:32-05:00 -draft: true ---- ++++ +title = "Moving To Germany" +date = 2024-08-05T22:10:32-05:00 +draft = true ++++ ## TODO From 87eec1d61be869101b0184cd02d9eb6c282acdf2 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Tue, 6 Aug 2024 11:31:55 -0500 Subject: [PATCH 4/5] normalized naming to kebab case. --- content/posts/{archInstall.md => arch-install.md} | 0 ...ch.md => autologin-nextcloud-client-on-arch.md} | 0 content/posts/{capsToCtrl.md => caps-to-ctrl.md} | 0 .../bash-prompt.png} | Bin .../editors.png | Bin .../fish-prompt.png} | Bin .../helix-command-autocomplete.png} | Bin .../helix-contextual-hint.png} | Bin .../{clirenaissance => cli-renaissance}/index.md | 12 ++++++------ .../nvim-which-key.png} | Bin .../zellij-hints.png} | Bin .../zsh-prompt.png} | Bin ...{dotfileManagement.md => dotfile-management.md} | 0 .../finished-keyboard.jpg} | Bin .../index.md | 4 ++-- .../keyboard-with-case.jpg} | Bin .../layers/layer0.png | Bin .../layers/layer1.png | Bin .../layers/layer2.png | Bin .../layers/layer3.png | Bin .../layers/layer4.png | Bin .../layers/layer5.png | Bin .../layers/layer6.png | Bin .../layers/layer7.png | Bin ...mNextcloud.md => moving-away-from-nextcloud.md} | 13 ++++++++++++- .../index.md | 2 +- ...nitTesting.md => rust-embedded-unit-testing.md} | 0 27 files changed, 21 insertions(+), 10 deletions(-) rename content/posts/{archInstall.md => arch-install.md} (100%) rename content/posts/{autologinNextcloudClientOnArch.md => autologin-nextcloud-client-on-arch.md} (100%) rename content/posts/{capsToCtrl.md => caps-to-ctrl.md} (100%) rename content/posts/{clirenaissance/bash_prompt.png => cli-renaissance/bash-prompt.png} (100%) rename content/posts/{clirenaissance => cli-renaissance}/editors.png (100%) rename content/posts/{clirenaissance/fish_prompt.png => cli-renaissance/fish-prompt.png} (100%) rename content/posts/{clirenaissance/helix_command_autocomplete.png => cli-renaissance/helix-command-autocomplete.png} (100%) rename content/posts/{clirenaissance/helix_contextual_hint.png => cli-renaissance/helix-contextual-hint.png} (100%) rename content/posts/{clirenaissance => cli-renaissance}/index.md (98%) rename content/posts/{clirenaissance/nvim_which_key.png => cli-renaissance/nvim-which-key.png} (100%) rename content/posts/{clirenaissance/zellij_hints.png => cli-renaissance/zellij-hints.png} (100%) rename content/posts/{clirenaissance/zsh_prompt.png => cli-renaissance/zsh-prompt.png} (100%) rename content/posts/{dotfileManagement.md => dotfile-management.md} (100%) rename content/posts/{ferrisSweepKeyboard/finished_keyboard.jpg => ferris-sweep-keyboard/finished-keyboard.jpg} (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/index.md (98%) rename content/posts/{ferrisSweepKeyboard/keyboard_with_case.jpg => ferris-sweep-keyboard/keyboard-with-case.jpg} (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer0.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer1.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer2.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer3.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer4.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer5.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer6.png (100%) rename content/posts/{ferrisSweepKeyboard => ferris-sweep-keyboard}/layers/layer7.png (100%) rename content/posts/{movingAwayFromNextcloud.md => moving-away-from-nextcloud.md} (81%) rename content/posts/{movingToGermany => moving-to-germany}/index.md (63%) rename content/posts/{rustEmbeddedUnitTesting.md => rust-embedded-unit-testing.md} (100%) diff --git a/content/posts/archInstall.md b/content/posts/arch-install.md similarity index 100% rename from content/posts/archInstall.md rename to content/posts/arch-install.md diff --git a/content/posts/autologinNextcloudClientOnArch.md b/content/posts/autologin-nextcloud-client-on-arch.md similarity index 100% rename from content/posts/autologinNextcloudClientOnArch.md rename to content/posts/autologin-nextcloud-client-on-arch.md diff --git a/content/posts/capsToCtrl.md b/content/posts/caps-to-ctrl.md similarity index 100% rename from content/posts/capsToCtrl.md rename to content/posts/caps-to-ctrl.md diff --git a/content/posts/clirenaissance/bash_prompt.png b/content/posts/cli-renaissance/bash-prompt.png similarity index 100% rename from content/posts/clirenaissance/bash_prompt.png rename to content/posts/cli-renaissance/bash-prompt.png diff --git a/content/posts/clirenaissance/editors.png b/content/posts/cli-renaissance/editors.png similarity index 100% rename from content/posts/clirenaissance/editors.png rename to content/posts/cli-renaissance/editors.png diff --git a/content/posts/clirenaissance/fish_prompt.png b/content/posts/cli-renaissance/fish-prompt.png similarity index 100% rename from content/posts/clirenaissance/fish_prompt.png rename to content/posts/cli-renaissance/fish-prompt.png diff --git a/content/posts/clirenaissance/helix_command_autocomplete.png b/content/posts/cli-renaissance/helix-command-autocomplete.png similarity index 100% rename from content/posts/clirenaissance/helix_command_autocomplete.png rename to content/posts/cli-renaissance/helix-command-autocomplete.png diff --git a/content/posts/clirenaissance/helix_contextual_hint.png b/content/posts/cli-renaissance/helix-contextual-hint.png similarity index 100% rename from content/posts/clirenaissance/helix_contextual_hint.png rename to content/posts/cli-renaissance/helix-contextual-hint.png diff --git a/content/posts/clirenaissance/index.md b/content/posts/cli-renaissance/index.md similarity index 98% rename from content/posts/clirenaissance/index.md rename to content/posts/cli-renaissance/index.md index 5bd387a..f1a10de 100644 --- a/content/posts/clirenaissance/index.md +++ b/content/posts/cli-renaissance/index.md @@ -161,13 +161,13 @@ Of course, fish still has the same level of configurability as zsh, it just also To demonstrate my point, this is the default prompt for zsh with no configuration. It *only* shows the hostname, none of the advanced features you can get out of a zsh prompt even without plugins. -![zsh prompt, only shows hostname](zsh_prompt.png) +![zsh prompt, only shows hostname](zsh-prompt.png) Here is bash's prompt. It actually gives more info than zsh's, even though zsh can do more when properly configured. -![bash prompt, shows hostname and current directory](bash_prompt.png) +![bash prompt, shows hostname and current directory](bash-prompt.png) And here is fish's default prompt. It has a few colours, shows everything the bash prompt does, and additionally shows the git branch we are on. -![fish prompt, has colours, shows hostname, current directory, and git info](fish_prompt.png) +![fish prompt, has colours, shows hostname, current directory, and git info](fish-prompt.png) Text editors are another great example of the evolution of out of the box defaults. Vim and Neovim both improved on their predecessors, @@ -225,18 +225,18 @@ Naturally, when you go months without using certain parts of a program, you tend Which-key solves that handily, by offering quick, non-intrusive reminders of what is available. Here's what my which-key config looks like: -![Which-key.nvim, showing contextual key hints](nvim_which_key.png) +![Which-key.nvim, showing contextual key hints](nvim-which-key.png) Now, which-key and its like have been around for a while, but other TUI programs have integrated contextual hints without the need for a plugin. The two that I am aware of are zellij and helix. -![Helix's contextual hint](helix_contextual_hint.png) +![Helix's contextual hint](helix-contextual-hint.png) Helix both has autocompletion for its built in command line and a contextual hint that appears when you press the first key in a multi key combo. This drastically helps both new and experienced users learn and remember keybinds without making the editor any less powerful. -![Zellij's hint bar](zellij_hints.png) +![Zellij's hint bar](zellij-hints.png) Zellij has a bottom bar displaying keybindings available in the current mode. This has proven invaluable for me, as I don't use a terminal multiplexer much diff --git a/content/posts/clirenaissance/nvim_which_key.png b/content/posts/cli-renaissance/nvim-which-key.png similarity index 100% rename from content/posts/clirenaissance/nvim_which_key.png rename to content/posts/cli-renaissance/nvim-which-key.png diff --git a/content/posts/clirenaissance/zellij_hints.png b/content/posts/cli-renaissance/zellij-hints.png similarity index 100% rename from content/posts/clirenaissance/zellij_hints.png rename to content/posts/cli-renaissance/zellij-hints.png diff --git a/content/posts/clirenaissance/zsh_prompt.png b/content/posts/cli-renaissance/zsh-prompt.png similarity index 100% rename from content/posts/clirenaissance/zsh_prompt.png rename to content/posts/cli-renaissance/zsh-prompt.png diff --git a/content/posts/dotfileManagement.md b/content/posts/dotfile-management.md similarity index 100% rename from content/posts/dotfileManagement.md rename to content/posts/dotfile-management.md diff --git a/content/posts/ferrisSweepKeyboard/finished_keyboard.jpg b/content/posts/ferris-sweep-keyboard/finished-keyboard.jpg similarity index 100% rename from content/posts/ferrisSweepKeyboard/finished_keyboard.jpg rename to content/posts/ferris-sweep-keyboard/finished-keyboard.jpg diff --git a/content/posts/ferrisSweepKeyboard/index.md b/content/posts/ferris-sweep-keyboard/index.md similarity index 98% rename from content/posts/ferrisSweepKeyboard/index.md rename to content/posts/ferris-sweep-keyboard/index.md index f3afbe9..837efe0 100644 --- a/content/posts/ferrisSweepKeyboard/index.md +++ b/content/posts/ferris-sweep-keyboard/index.md @@ -3,7 +3,7 @@ title = "Building My New Keyboard." date = 2024-02-06T15:01:28-06:00 draft = false [cover] -image = "keyboard_with_case" +image = "keyboard-with-case" +++ I've been using a split keyboard at home now for several years @@ -36,7 +36,7 @@ I did ruin one switch by letting a leg getting hot enough to melt the housing pl and desoldering it was unexpectedly difficult, but not every build can be mistake free, right? -![The finished keyboard](finished_keyboard.jpg) +![The finished keyboard](finished-keyboard.jpg) Flashing QMK was uneventful, working exactly as the [QMK docs](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/sweep) for the Ferris Sweep suggested. I would, however, recommend flashing the micros *before* doing any soldering, diff --git a/content/posts/ferrisSweepKeyboard/keyboard_with_case.jpg b/content/posts/ferris-sweep-keyboard/keyboard-with-case.jpg similarity index 100% rename from content/posts/ferrisSweepKeyboard/keyboard_with_case.jpg rename to content/posts/ferris-sweep-keyboard/keyboard-with-case.jpg diff --git a/content/posts/ferrisSweepKeyboard/layers/layer0.png b/content/posts/ferris-sweep-keyboard/layers/layer0.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer0.png rename to content/posts/ferris-sweep-keyboard/layers/layer0.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer1.png b/content/posts/ferris-sweep-keyboard/layers/layer1.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer1.png rename to content/posts/ferris-sweep-keyboard/layers/layer1.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer2.png b/content/posts/ferris-sweep-keyboard/layers/layer2.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer2.png rename to content/posts/ferris-sweep-keyboard/layers/layer2.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer3.png b/content/posts/ferris-sweep-keyboard/layers/layer3.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer3.png rename to content/posts/ferris-sweep-keyboard/layers/layer3.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer4.png b/content/posts/ferris-sweep-keyboard/layers/layer4.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer4.png rename to content/posts/ferris-sweep-keyboard/layers/layer4.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer5.png b/content/posts/ferris-sweep-keyboard/layers/layer5.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer5.png rename to content/posts/ferris-sweep-keyboard/layers/layer5.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer6.png b/content/posts/ferris-sweep-keyboard/layers/layer6.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer6.png rename to content/posts/ferris-sweep-keyboard/layers/layer6.png diff --git a/content/posts/ferrisSweepKeyboard/layers/layer7.png b/content/posts/ferris-sweep-keyboard/layers/layer7.png similarity index 100% rename from content/posts/ferrisSweepKeyboard/layers/layer7.png rename to content/posts/ferris-sweep-keyboard/layers/layer7.png diff --git a/content/posts/movingAwayFromNextcloud.md b/content/posts/moving-away-from-nextcloud.md similarity index 81% rename from content/posts/movingAwayFromNextcloud.md rename to content/posts/moving-away-from-nextcloud.md index e227b4d..6052581 100644 --- a/content/posts/movingAwayFromNextcloud.md +++ b/content/posts/moving-away-from-nextcloud.md @@ -17,7 +17,7 @@ such as the sever crashing if you view a folder with too many files in the web i Nextcloud does a lot of things, and does things very well, but I would not describe it as a rock solid piece of software. -Due to this, during our [move to germany](./movingToGermany) and the resuling reorganization of the homelab, +Due to this, during our [move to germany](../moving-to-germany) and the resuling reorganization of the homelab, I decided to *finally* ditch Nextcloud, after talking about it for months. ## Syncthing @@ -65,6 +65,11 @@ and it is the architecture that I used to fully replace nextcloud. ## File Manager +While Syncthing is great for file syncing between devices, +we also wanted to be able to acess a web interface to upload, download, and view files on devices not in our Syncthing network. + +TODO + ## Radicale The final function my family and I used nextcloud for was calander and todo list syncing. @@ -73,3 +78,9 @@ using DavX^5 as a mobile client, and Thunderbirds Lightning plugin as a desktop This was almost a more important function than filesyncing, as my wife and I use it to organize our calanders, Keep shopping lists, chore lists, lists of movies to watch, lists of long term projects, etc. (we *really* used the hell out of todo lists.) + +For this, we used [Radicale](TODO). Radicale *only* does CalDav and CardDav syncing, nothing else, +but between Syncthing and FileManager, thats all we needed it to do to complete the nextcloud replacement. +Installation was incredibly simple, thanks to the existence of a prebuilt NixOs module for it. +After about an hour of research and work, I had a Radicale server up and running on my Hetzner node, +and had exported all of our calanders from Nextcloud and imported them into Radicale. diff --git a/content/posts/movingToGermany/index.md b/content/posts/moving-to-germany/index.md similarity index 63% rename from content/posts/movingToGermany/index.md rename to content/posts/moving-to-germany/index.md index c3fa6f0..b439c68 100644 --- a/content/posts/movingToGermany/index.md +++ b/content/posts/moving-to-germany/index.md @@ -1,6 +1,6 @@ +++ title = "Moving To Germany" -date = 2024-08-05T22:10:32-05:00 +date = 2024-07-27T17:10:32-05:00 draft = true +++ diff --git a/content/posts/rustEmbeddedUnitTesting.md b/content/posts/rust-embedded-unit-testing.md similarity index 100% rename from content/posts/rustEmbeddedUnitTesting.md rename to content/posts/rust-embedded-unit-testing.md From 018c27f6e3a57d898257fafd95a0dd580bdffdaa Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Wed, 7 Aug 2024 12:04:55 -0500 Subject: [PATCH 5/5] added draft deploy, for getting feedback. --- content/posts/moving-away-from-nextcloud.md | 2 +- justfile | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/content/posts/moving-away-from-nextcloud.md b/content/posts/moving-away-from-nextcloud.md index 6052581..7aa2d8b 100644 --- a/content/posts/moving-away-from-nextcloud.md +++ b/content/posts/moving-away-from-nextcloud.md @@ -79,7 +79,7 @@ This was almost a more important function than filesyncing, as my wife and I use Keep shopping lists, chore lists, lists of movies to watch, lists of long term projects, etc. (we *really* used the hell out of todo lists.) -For this, we used [Radicale](TODO). Radicale *only* does CalDav and CardDav syncing, nothing else, +For this, we used [Radicale](https://radicale.org/v3.html). Radicale *only* does CalDav and CardDav syncing, nothing else, but between Syncthing and FileManager, thats all we needed it to do to complete the nextcloud replacement. Installation was incredibly simple, thanks to the existence of a prebuilt NixOs module for it. After about an hour of research and work, I had a Radicale server up and running on my Hetzner node, diff --git a/justfile b/justfile index 999dd8a..c1f9960 100644 --- a/justfile +++ b/justfile @@ -4,7 +4,12 @@ preview: USER:='root' HOST:='gabevenberg.com' DIR:='/var/www/gabevenberg.com' +DRAFTDIR:='/var/www/draft.gabevenberg.com' deploy: hugo --minify rsync -rvz --delete public/ {{USER}}@{{HOST}}:{{DIR}} # this will delete everything on the server that's not in the local public folder + +deploy-preview: + hugo --minify --buildDrafts --buildFuture + rsync -rvz --delete public/ {{USER}}@{{HOST}}:{{DRAFTDIR}} # this will delete everything on the server that's not in the local public folder