Summary
+I am a Kiwi living in Australia and studying a Bachelor of Science at The + University of Melbourne.
+diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 527238f..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tags/ diff --git a/CNAME b/CNAME deleted file mode 100644 index e26b5ea..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -fi33.buzz \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 0e259d4..0000000 --- a/LICENSE +++ /dev/null @@ -1,121 +0,0 @@ -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. diff --git a/Makefile b/Makefile deleted file mode 100644 index 9353745..0000000 --- a/Makefile +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/make -f - -BLOG := $(MAKE) -f $(lastword $(MAKEFILE_LIST)) --no-print-directory -ifneq ($(filter-out help,$(MAKECMDGOALS)),) -include config -endif - -# The following can be configured in config -BLOG_DATE_FORMAT_INDEX ?= %x -BLOG_DATE_FORMAT ?= %x %X -BLOG_TITLE ?= blog -BLOG_DESCRIPTION ?= blog -BLOG_URL_ROOT ?= http://localhost/blog -BLOG_FEED_MAX ?= 20 -BLOG_FEEDS ?= rss atom -BLOG_SRC ?= articles - - -.PHONY: help init build deploy clean - -ARTICLES = $(shell git ls-tree HEAD --name-only -- $(BLOG_SRC)/ 2>/dev/null) -TAGFILES = $(patsubst $(BLOG_SRC)/%.md,tags/%,$(ARTICLES)) - -help: - $(info blogit init|build|deploy|clean) - -init: - mkdir -p $(BLOG_SRC) data templates - printf '
tags: ' > templates/tag_list_header.html - printf '#$$NAME' > templates/tag_entry.html - printf ', ' > templates/tag_separator.html - printf '
' > templates/tag_list_footer.html - printf 'posted: $$DATE_POSTED
edited: $$DATE_EDITED
,;bT}' \
- -e 'x;/<\/code>/{x;s,\$$,\$,g;$$G;p;d};x' \
- -e 's,\\\$$,\$,g' \
- -e '/^####/{s,^####,,;s,$$,
,;H;s,.*,,;x;p;d}' \
- -e '/^###/{s,^###,,;s,$$,
,;H;s,.*,,;x;p;d}' \
- -e '/^##/{s,^##,,;s,$$,
,;H;s,.*,,;x;p;d}' \
- -e '/^#/{s,^#,,;s,$$,
,;H;s,.*,,;x;p;d}' \
- -e 's,`\([^`]*\)`,\1,g' \
- -e 's,\*\*\(\([^*<>][^*<>]*\*\?\)*\)\*\*,\1,g' \
- -e 's,\*\([^*<>][^*<>]*\)\*,\1,g' \
- -e 's,!\[\([^]]*\)\](\([^)]*\)),
,g' \
- -e 's,\[\([^]]*\)\](\([^)]*\)),\1,g' \
- -e '/^- /{s,^- ,,;s,$$, ,;x;/^<\/ul>/{x;bL};p;s,.*,,;bT}' \
- -e '/^[1-9][0-9]*\. /{s,^[0-9]*\. ,- ,;s,$$,
,;x;/^<\/ol>/{x;bL};p;s,.*,,;bT}' \
- -e '/^$$/{x;/^$$/d;p;d}' \
- -e 'x;/^$$/{s,.*,,;bT};x' \
- -e ':L;$$G;p;d' \
- -e ':T;p;:t;s,<\([^/>][^>]*\)>\(\(<[^/>][^>]*>\)*\),\2\1>,;/<[^\/>]/bt;x;/^$$/{$${x;p};d};bL' \
- "$<" | envsubst >> $@; \
- envsubst < templates/article_footer.html >> $@; \
- envsubst < templates/footer.html >> $@; \
-
-blog/rss.xml: $(ARTICLES)
- printf '\n\n\n%s \n%s\n%s \n' \
- "$(BLOG_TITLE)" "$(BLOG_URL_ROOT)" "$(BLOG_DESCRIPTION)" > $@
- for f in $(ARTICLES); do \
- printf '%s ' "$$f"; \
- git log --diff-filter=A --date="format:%s %a, %d %b %Y %H:%M:%S %z" --pretty=format:'%ad%n' -- "$$f"; \
- done | sort -k2nr | head -n $(BLOG_FEED_MAX) | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE; do \
- printf '- \n
%s \n%s\n%s \n%s \n%s \n \n' \
- "`head -n 1 $$FILE`" \
- "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
- "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
- "$$DATE" \
- "`sed -n '1d;/^$$/{2{d;b};q};p' < $$FILE`"; \
- done >> $@
- printf ' \n \n' >> $@
-
-blog/atom.xml: $(ARTICLES)
- printf '\n\n%s \n%s \n%s \n\n%s \n\n' \
- "$(BLOG_TITLE)" "$(BLOG_DESCRIPTION)" "$(shell date +%Y-%m-%dT%H:%M:%SZ)" "$(BLOG_URL_ROOT)" "$(BLOG_URL_ROOT)/atom.xml" "$(BLOG_URL_ROOT)/atom.xml" > $@
- for f in $(ARTICLES); do \
- printf '%s ' "$$f"; \
- git log --diff-filter=A --date="format:%s %Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad %aN%n' -- "$$f"; \
- done | sort -k2nr | head -n $(BLOG_FEED_MAX) | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE AUTHOR; do \
- printf '\n%s \n\n%s \n%s \n%s \n%s \n%s \n \n' \
- "`head -n 1 $$FILE`" \
- "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
- "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
- "$$DATE" \
- "`git log -n 1 --date="format:%Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad' -- "$$FILE"`" \
- "$$AUTHOR" \
- "`sed -n '1d;/^$$/{2{d;b};q};p' < $$FILE`"; \
- done >> $@
- printf ' \n' >> $@
-
diff --git a/README.md b/README.md
deleted file mode 100644
index 8b45c9d..0000000
--- a/README.md
+++ /dev/null
@@ -1 +0,0 @@
-my personal fork of [blogit](https://pedantic.software/git/blogit)
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..0c26a8c
--- /dev/null
+++ b/about.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ Will Holdsworth
+
+
+
+
+
+ Summary
+ I am a Kiwi living in Australia and studying a Bachelor of Science at The
+ University of Melbourne.
+
+
+
+
+
\ No newline at end of file
diff --git a/articles/dufs.md b/articles/dufs.md
deleted file mode 100644
index f2bfab5..0000000
--- a/articles/dufs.md
+++ /dev/null
@@ -1,80 +0,0 @@
-quick and easy cloud storage with dufs and nixos
-
-dufs[1] -- the distinctive file utility server -- is a decent cloud storage replacement for those looking to move away from third-party services like google drive or proton drive. it supports webdav and https file transfer protocols.
-
-it's very easy to set up and get going in nixos using a docker container.
-
-## set up dufs
-
-first, enable docker in your `configuration.nix`:
-```
-virtualisation.docker.enable = true;
-```
-
-then define a docker container, either in your `configuration.nix` or in a custom module:
-```
-virtualisation.oci-containers = {
- backend = "docker";
-
- containers.dufs = {
- # automatically restart server after reboot
- autoStart = true;
-
- image = "sigoden/dufs";
-
- ports = [
- "5000:5000"
- ];
-
- # the files i want to serve are in /srv/dufs
- volumes = [
- "/srv/dufs:/data"
- ];
-
- # tells dufs to serve the files in the docker volume /data
- cmd = [
- "-A"
- "/data"
- ];
- };
-};
-```
-
-rebuild your configuration using `nixos-rebuild switch` and head on over to `http://localhost:5000` to behold your lovely files.
-
-## set up tailscale
-
-you can use tailscale[2] to access the files on other devices inside (and outside) of your home network. tailscale is like a crazy-fast vpn with a bunch of other comfort features like magic dns[3], keyless ssh[4] and easy https[5].
-
-to enable it in nixos, add the following to your `configuration.nix`:
-```
-services.tailscale.enable = true;
-networking.firewall.trustedInterfaces = [ "tailscale0" ];
-```
-
-once again, rebuild your configuration using `nixos-rebuild switch` and run `tailscale up` to start tailscale.
-
-i recommend enabling magic dns in admin console > dns > magic dns, but if you prefer not to, your server's ip address will be visible by running `tailscale ip -4`.
-
-head over to `http://:5000` on one of your other machines running tailscale to upload, download, and view your self-hosted files.
-
-## dufs clients
-
-as for client recommendations, round sync[6] on android is quite good. it supports both webdav and https remotes, i chose to use webdav when connecting.
-
-thanks for stopping by ^.^
-
-[1] [dufs](https://github.com/sigoden/dufs)
-
-[2] [tailscale](https://tailscale.com/)
-
-[3] [magic dns](https://tailscale.com/kb/1081/magicdns)
-
-[4] [tailscale ssh](https://tailscale.com/kb/1193/tailscale-ssh)
-
-[5] [tailscale https](https://tailscale.com/kb/1153/enabling-https)
-
-[6] [round sync](https://github.com/newhinton/Round-Sync)
-
-;tags: self-hosting cloud-storage nixos tailscale
-
diff --git a/articles/welcome.md b/articles/welcome.md
deleted file mode 100644
index 532ea14..0000000
--- a/articles/welcome.md
+++ /dev/null
@@ -1,18 +0,0 @@
-welcome!
-
-the static site generator i'm using to kickstart this blog[1] requires a single post to exist in order to compile, and failing to provide a post sends `make` into an infinite loop.
-
-so without further ado... here it is, my first post!
-
-topics to expect once i get myself more organised:
-
-- basic tutorials on setting up self-hosted nixos web services
-- lazy hardware reviews
-- software shenanigans
-- anything else i feel is relevant and useful to the wider web
-
-thanks for stopping by ^.^
-
-[1] [blogit](https://pedantic.software/git/blogit)
-
-;tags:
diff --git a/blog/2025/01/28-leveraging-nixos-dufs-cloud-storage.html b/blog/2025/01/28-leveraging-nixos-dufs-cloud-storage.html
new file mode 100644
index 0000000..ddf974e
--- /dev/null
+++ b/blog/2025/01/28-leveraging-nixos-dufs-cloud-storage.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ Will Holdsworth
+
+
+
+
+
+
+ Quick & easy cloud storage with dufs and NixOS
+
+ dufs1 (the distinctive file
+ utility server) is a cloud storage replacement for those looking to move away from third-party services like
+ Google Drive or Proton Drive. it supports WebDAV and HTTPS file transfer protocols.
+
+ It's very easy to set up and get going in NixOS using a Docker container.
+
+ Set up dufs
+ First, enable docker in your configuration.nix:
+
+
+ virtualisation.docker.enable = true;
+
+
+ Then define a Docker container, either in your configuration.nix or in a custom module:
+
+
+ virtualisation.oci-containers = {
+ backend = "docker";
+ containers.dufs = {
+
+ # automatically restart server after reboot
+ autoStart = true;
+
+ image = "sigoden/dufs";
+
+ ports = [
+ "5000:5000"
+ ];
+
+ # the files i want to serve are in /srv/dufs
+ volumes = [
+ "/srv/dufs:/data"
+ ];
+
+ # tells dufs to serve the files in the docker volume /data
+ cmd = [
+ "-A"
+ "/data"
+ ];
+ };
+ };
+
+
+ Rebuild your configuration by running sudo nixos-rebuild switch and head on over to
+ http://localhost:5000 to behold your lovely files. Now we need a method to access our files on other
+ devices inside (and outside) of our home network. Tailscale2 provides commands to accomplish this easily.
+
+ Set up Tailscale
+
+ You can use Tailscale to access the files on other devices inside (and outside) of your home network. Tailscale is
+ like a crazy-fast vpn with a bunch of other comfort features like MagicDNS3, keyless SSH4 and
+ easy HTTPS5.
+
+ To enable it in nixos, add the following to your configuration.nix:
+
+
+ services.tailscale.enable = true;
+ networking.firewall.trustedInterfaces = [ "tailscale0" ];
+
+
+
+ Once again, rebuild your configuration by running sudo nixos-rebuild switch and run
+ tailscale up to start tailscale. The tailscale connection will persist on reboot, so no need to worry
+ about adding it to your init process.
+
+
+ I recommend enabling MagicDNS in the admin console > DNS > MagicDNS, but if you prefer not to, your server's IP
+ address will be visible by running tailscale ip -4.
+
+
+ Head over to http://<hostname or ip>:5000 on one of your other machines running tailscale to
+ upload,
+ download, and view your self-hosted files.
+
+
+ dufs clients
+
+ As for client recommendations, Round Sync6 on android is quite good. it supports both WebDAV and HTTPS remotes, I
+ chose to use WebDAV when connecting.
+
+
+ Thanks for stopping by ^.^
+
+ Footnotes
+
+ -
+ dufs
+ ↩
+
+ -
+ Tailscale
+ ↩
+
+ -
+ MagicDNS
+ ↩
+
+ -
+ Tailscale SSH
+ ↩
+
+ -
+ Tailscale HTTPS
+ ↩
+
+ -
+ Round Sync
+ ↩
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blog/@all.html b/blog/@all.html
deleted file mode 100644
index 0a0d7a6..0000000
--- a/blog/@all.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged all #all
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
- 2025/01/27 - welcome!
\ No newline at end of file
diff --git a/blog/@cloud-storage.html b/blog/@cloud-storage.html
deleted file mode 100644
index e87ae00..0000000
--- a/blog/@cloud-storage.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged cloud-storage #cloud-storage
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@cloud.html b/blog/@cloud.html
deleted file mode 100644
index e55e0c7..0000000
--- a/blog/@cloud.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged cloud #cloud
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@hosting,.html b/blog/@hosting,.html
deleted file mode 100644
index 0612013..0000000
--- a/blog/@hosting,.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged hosting, #hosting,
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@nixos,.html b/blog/@nixos,.html
deleted file mode 100644
index 3212840..0000000
--- a/blog/@nixos,.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged nixos, #nixos,
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@nixos.html b/blog/@nixos.html
deleted file mode 100644
index f94883c..0000000
--- a/blog/@nixos.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged nixos #nixos
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@self-hosting.html b/blog/@self-hosting.html
deleted file mode 100644
index 130bab3..0000000
--- a/blog/@self-hosting.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged self-hosting #self-hosting
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@self.html b/blog/@self.html
deleted file mode 100644
index 69fc270..0000000
--- a/blog/@self.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged self #self
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@storage,.html b/blog/@storage,.html
deleted file mode 100644
index 53604d3..0000000
--- a/blog/@storage,.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged storage, #storage,
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/@tailscale.html b/blog/@tailscale.html
deleted file mode 100644
index a4d3581..0000000
--- a/blog/@tailscale.html
+++ /dev/null
@@ -1 +0,0 @@
-Articles tagged tailscale #tailscale
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
deleted file mode 100644
index 93dbf59..0000000
--- a/blog/atom.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-will holdsworth's blog
-blog
-2025-01-28T19:06:19Z
-
-https://fi33.buzz/atom.xml
-
-
-quick and easy cloud storage with dufs and nixos
-
-https://fi33.buzz/dufs.html
-2025-01-28T18:41:39Z
-2025-01-28T19:05:53Z
-wi11-holdsworth
-dufs[1] -- the distinctive file utility server -- is a decent cloud storage replacement for those looking to move away from third-party services like google drive or proton drive. it supports webdav and https file transfer protocols.
-
-
-welcome!
-
-https://fi33.buzz/welcome.html
-2025-01-27T22:16:57Z
-2025-01-27T23:11:05Z
-wi11-holdsworth
-the static site generator i'm using to kickstart this blog[1] requires a single post to exist in order to compile, and failing to provide a post sends `make` into an infinite loop.
-
-
diff --git a/blog/dufs.html b/blog/dufs.html
deleted file mode 100644
index 3965c7b..0000000
--- a/blog/dufs.html
+++ /dev/null
@@ -1,95 +0,0 @@
-quick and easy cloud storage with dufs and nixos will holdsworth's blog
quick and easy cloud storage with dufs and nixos
posted: 2025/01/28 18:41
edited: 2025/01/28 19:06
-dufs[1] -- the distinctive file utility server -- is a decent cloud storage replacement for those looking to move away from third-party services like google drive or proton drive. it supports webdav and https file transfer protocols.
-
-
-it's very easy to set up and get going in nixos using a docker container.
-
-
- set up dufs
-
-first, enable docker in your configuration.nix:
-
-
-virtualisation.docker.enable = true;
-
-
-then define a docker container, either in your configuration.nix or in a custom module:
-
-
-virtualisation.oci-containers = {
- backend = "docker";
-
- containers.dufs = {
- # automatically restart server after reboot
- autoStart = true;
-
- image = "sigoden/dufs";
-
- ports = [
- "5000:5000"
- ];
-
- # the files i want to serve are in /srv/dufs
- volumes = [
- "/srv/dufs:/data"
- ];
-
- # tells dufs to serve the files in the docker volume /data
- cmd = [
- "-A"
- "/data"
- ];
- };
-};
-
-
-rebuild your configuration using nixos-rebuild switch and head on over to http://localhost:5000 to behold your lovely files.
-
-
- set up tailscale
-
-you can use tailscale[2] to access the files on other devices inside (and outside) of your home network. tailscale is like a crazy-fast vpn with a bunch of other comfort features like magic dns[3], keyless ssh[4] and easy https[5].
-
-
-to enable it in nixos, add the following to your configuration.nix:
-
-
-services.tailscale.enable = true;
-networking.firewall.trustedInterfaces = [ "tailscale0" ];
-
-
-once again, rebuild your configuration using nixos-rebuild switch and run tailscale up to start tailscale.
-
-
-i recommend enabling magic dns in admin console > dns > magic dns, but if you prefer not to, your server's ip address will be visible by running tailscale ip -4.
-
-
-head over to http://<hostname or ip>:5000 on one of your other machines running tailscale to upload, download, and view your self-hosted files.
-
-
- dufs clients
-
-as for client recommendations, round sync[6] on android is quite good. it supports both webdav and https remotes, i chose to use webdav when connecting.
-
-
-thanks for stopping by ^.^
-
-
-[1] dufs
-
-
-[2] tailscale
-
-
-[3] magic dns
-
-
-[4] tailscale ssh
-
-
-[5] tailscale https
-
-
-[6] round sync
-
-
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index f4a263d..a8a8811 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -1 +1,40 @@
-will holdsworth's blog will holdsworth's blog
tags: #cloud-storage, #nixos, #self-hosting, #tailscale
posts
- 2025/01/28 - quick and easy cloud storage with dufs and nixos
- 2025/01/27 - welcome!
\ No newline at end of file
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ Will Holdsworth
+
+
+
+
+
+ Posts
+
+ - 2025-01-28 | Quick and easy cloud storage
+ with dufs and NixOS
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blog/rss.xml b/blog/rss.xml
deleted file mode 100644
index 2473d2c..0000000
--- a/blog/rss.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-will holdsworth's blog
-https://fi33.buzz
-blog
--
-
quick and easy cloud storage with dufs and nixos
-https://fi33.buzz/dufs.html
-https://fi33.buzz/dufs.html
-Tue, 28 Jan 2025 18:41:39 +1100
-dufs[1] -- the distinctive file utility server -- is a decent cloud storage replacement for those looking to move away from third-party services like google drive or proton drive. it supports webdav and https file transfer protocols.
-
--
-
welcome!
-https://fi33.buzz/welcome.html
-https://fi33.buzz/welcome.html
-Mon, 27 Jan 2025 22:16:57 +1100
-the static site generator i'm using to kickstart this blog[1] requires a single post to exist in order to compile, and failing to provide a post sends `make` into an infinite loop.
-
-
-
diff --git a/blog/welcome.html b/blog/welcome.html
deleted file mode 100644
index 2b2742a..0000000
--- a/blog/welcome.html
+++ /dev/null
@@ -1,23 +0,0 @@
-welcome! will holdsworth's blog
welcome!
posted: 2025/01/27 22:16
edited: 2025/01/28 19:06
-the static site generator i'm using to kickstart this blog[1] requires a single post to exist in order to compile, and failing to provide a post sends make into an infinite loop.
-
-
-so without further ado... here it is, my first post!
-
-
-topics to expect once i get myself more organised:
-
-
-
-- basic tutorials on setting up self-hosted nixos web services
-- lazy hardware reviews
-- software shenanigans
-- anything else i feel is relevant and useful to the wider web
-
-
-thanks for stopping by ^.^
-
-
-[1] blogit
-
-
diff --git a/config b/config
deleted file mode 100644
index a36760b..0000000
--- a/config
+++ /dev/null
@@ -1,7 +0,0 @@
-BLOG_REMOTE:=opal:/srv/fi33buzz
-BLOG_DATE_FORMAT:=%Y/%m/%d %H:%M
-BLOG_DATE_FORMAT_INDEX:=%Y/%m/%d
-BLOG_TITLE:=will holdsworth's blog
-BLOG_URL_ROOT:=https://fi33.buzz
-BLOG_FEED_MAX:=20
-BLOG_FEEDS:=rss atom
diff --git a/contact.html b/contact.html
new file mode 100644
index 0000000..6806545
--- /dev/null
+++ b/contact.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ Will Holdsworth
+
+
+
+
+
+ Email Address
+ This forwarding address is provided by DuckDuckGo and is periodically
+ regenerated to reduce spam.
+ canyon-scary-tutu@duck.com
+ Social Media
+ I currently use social media exclusively among close friends. If this ever changes, I will add some links.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/flake.lock b/flake.lock
deleted file mode 100644
index 7ce6dc3..0000000
--- a/flake.lock
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "nodes": {
- "flake-utils": {
- "inputs": {
- "systems": "systems"
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 0,
- "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=",
- "path": "/nix/store/irknf7niks2djxz4csh7sr44wwrs082y-source",
- "type": "path"
- },
- "original": {
- "id": "nixpkgs",
- "type": "indirect"
- }
- },
- "root": {
- "inputs": {
- "flake-utils": "flake-utils",
- "nixpkgs": "nixpkgs"
- }
- },
- "systems": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/flake.nix b/flake.nix
deleted file mode 100644
index c996dab..0000000
--- a/flake.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- inputs.flake-utils.url = "github:numtide/flake-utils";
-
- outputs = {
- nixpkgs,
- flake-utils,
- ...
- }:
- flake-utils.lib.eachDefaultSystem
- (system:
- let pkgs = nixpkgs.legacyPackages.${system}; in
- {
- devShells.default = import ./shell.nix { inherit pkgs; };
- }
- );
-}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..d1eed37
--- /dev/null
+++ b/index.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ Will Holdsworth
+
+
+
+
+
+ 🚧 Page under construction 🚧
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/index.html b/projects/index.html
new file mode 100644
index 0000000..173132e
--- /dev/null
+++ b/projects/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+ Document
+
+
+
+
+ Will Holdsworth
+
+
+
+
+
+ 🚧 Page under construction 🚧
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/HAND_CODED.gif b/public/img/HAND_CODED.gif
new file mode 100644
index 0000000..73c1a23
Binary files /dev/null and b/public/img/HAND_CODED.gif differ
diff --git a/public/img/InternetPrivacy.gif b/public/img/InternetPrivacy.gif
new file mode 100644
index 0000000..4f371b8
Binary files /dev/null and b/public/img/InternetPrivacy.gif differ
diff --git a/public/img/anybrowser.png b/public/img/anybrowser.png
new file mode 100644
index 0000000..ad15ed9
Binary files /dev/null and b/public/img/anybrowser.png differ
diff --git a/public/img/js.png b/public/img/js.png
new file mode 100644
index 0000000..61ce5cb
Binary files /dev/null and b/public/img/js.png differ
diff --git a/public/img/kendrick.gif b/public/img/kendrick.gif
new file mode 100644
index 0000000..452ac5e
Binary files /dev/null and b/public/img/kendrick.gif differ
diff --git a/public/img/nocookie.png b/public/img/nocookie.png
new file mode 100644
index 0000000..3bc8237
Binary files /dev/null and b/public/img/nocookie.png differ
diff --git a/shell.nix b/shell.nix
deleted file mode 100644
index cf1447d..0000000
--- a/shell.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{ pkgs ? import {} }:
- pkgs.mkShell {
- nativeBuildInputs = with pkgs.buildPackages; [
- gnumake
- envsubst
- python312Packages.mat2
- ];
-}
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..fd7bbde
--- /dev/null
+++ b/style.css
@@ -0,0 +1,23 @@
+html {
+ background-color: #000;
+ color: #d9d9d9;
+ font-family: sans-serif;
+ font-size: large;
+ line-height: 1.4;
+ margin: 2em auto;
+ max-width: 800px;
+ padding: 1em;
+ scrollbar-gutter: stable both-edges;
+}
+
+a {
+ color: #00a2e7
+}
+
+a:visited {
+ color: #ca1a70
+}
+
+h1 {
+ font-family: serif;
+}
\ No newline at end of file
diff --git a/tags/dufs b/tags/dufs
deleted file mode 100644
index 8a3518a..0000000
--- a/tags/dufs
+++ /dev/null
@@ -1,4 +0,0 @@
-cloud-storage
-nixos
-self-hosting
-tailscale
diff --git a/tags/welcome b/tags/welcome
deleted file mode 100644
index e69de29..0000000
diff --git a/templates/article_entry.html b/templates/article_entry.html
deleted file mode 100644
index 858c6c4..0000000
--- a/templates/article_entry.html
+++ /dev/null
@@ -1 +0,0 @@
-- $DATE - $TITLE
\ No newline at end of file
diff --git a/templates/article_footer.html b/templates/article_footer.html
deleted file mode 100644
index b55125b..0000000
--- a/templates/article_footer.html
+++ /dev/null
@@ -1 +0,0 @@
-
posted: $DATE_POSTED
edited: $DATE_EDITED