update
parent
a3766e3e24
commit
603b8a0b54
|
@ -0,0 +1,4 @@
|
||||||
|
FROM klakegg/hugo:0.111.3-ext-onbuild AS hugo
|
||||||
|
|
||||||
|
FROM nginx
|
||||||
|
COPY --from=hugo /target /usr/share/nginx/html
|
|
@ -0,0 +1,24 @@
|
||||||
|
# cache.appcache, your document html and data
|
||||||
|
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
|
||||||
|
expires -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Feed
|
||||||
|
location ~* \.(?:rss|atom)$ {
|
||||||
|
expires 1h;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Media: images, icons, video, audio, HTC
|
||||||
|
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
|
||||||
|
expires 1M;
|
||||||
|
access_log off;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
}
|
||||||
|
|
||||||
|
# CSS and Javascript
|
||||||
|
location ~* \.(?:css|js)$ {
|
||||||
|
expires 1y;
|
||||||
|
access_log off;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
docker build . -t git.howdoicomputer.lol/howdoicomputer/blog:4
|
||||||
|
docker push git.howdoicomputer.lol/howdoicomputer/blog:4
|
|
@ -0,0 +1,15 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
go 1.20
|
||||||
|
|
||||||
|
require (
|
||||||
|
dagger.io/dagger v0.8.4 // indirect
|
||||||
|
github.com/99designs/gqlgen v0.17.31 // indirect
|
||||||
|
github.com/Khan/genqlient v0.6.0 // indirect
|
||||||
|
github.com/adrg/xdg v0.4.0 // indirect
|
||||||
|
github.com/iancoleman/strcase v0.3.0 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
github.com/vektah/gqlparser/v2 v2.5.6 // indirect
|
||||||
|
golang.org/x/sync v0.3.0 // indirect
|
||||||
|
golang.org/x/sys v0.10.0 // indirect
|
||||||
|
)
|
|
@ -0,0 +1,38 @@
|
||||||
|
dagger.io/dagger v0.8.4 h1:2zNu40cBvPZc/CSgMnLRfayfQj5VtbJlDtWJyWGwGSQ=
|
||||||
|
dagger.io/dagger v0.8.4/go.mod h1:Nwl7WI8YETaZhGjPJvkiOZnKLJXBaJOkSarp5m4+FxA=
|
||||||
|
github.com/99designs/gqlgen v0.17.31 h1:VncSQ82VxieHkea8tz11p7h/zSbvHSxSDZfywqWt158=
|
||||||
|
github.com/99designs/gqlgen v0.17.31/go.mod h1:i4rEatMrzzu6RXaHydq1nmEPZkb3bKQsnxNRHS4DQB4=
|
||||||
|
github.com/Khan/genqlient v0.6.0 h1:Bwb1170ekuNIVIwTJEqvO8y7RxBxXu639VJOkKSrwAk=
|
||||||
|
github.com/Khan/genqlient v0.6.0/go.mod h1:rvChwWVTqXhiapdhLDV4bp9tz/Xvtewwkon4DpWWCRM=
|
||||||
|
github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls=
|
||||||
|
github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E=
|
||||||
|
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
|
||||||
|
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||||
|
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
|
||||||
|
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
|
||||||
|
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
||||||
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq8cRU=
|
||||||
|
github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME=
|
||||||
|
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
|
||||||
|
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||||
|
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
|
||||||
|
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
@ -0,0 +1,33 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"dagger.io/dagger"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
// initialize Dagger client
|
||||||
|
client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
// use a golang:1.19 container
|
||||||
|
// get version
|
||||||
|
// execute
|
||||||
|
golang := client.Container().From("golang:1.19").WithExec([]string{"go", "version"})
|
||||||
|
|
||||||
|
version, err := golang.Stdout(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// print output
|
||||||
|
fmt.Println("Hello from Dagger and " + version)
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
title: "About"
|
||||||
|
draft: false
|
||||||
|
layout: "about"
|
||||||
|
description: "me"
|
||||||
|
---
|
||||||
|
|
||||||
|
# the man behind the books
|
||||||
|
|
||||||
|
I'm a thirty-something who has been working as some flavor of SRE/DevOps/systems engineer for a little over a decade.
|
||||||
|
|
||||||
|
# books?
|
||||||
|
|
||||||
|
Yeah, I love em.
|
||||||
|
|
||||||
|
# but what else
|
||||||
|
|
||||||
|
I enjoy biking, board games, table-top RPGs, 3D printing, video games, guitar, and bad jokes.
|
|
@ -0,0 +1,167 @@
|
||||||
|
---
|
||||||
|
title: "Homelab 1: Genesis"
|
||||||
|
date: 2023-08-27T18:36:47-07:00
|
||||||
|
draft: false
|
||||||
|
summary: First part of a multi-part series about my current homelab
|
||||||
|
tags:
|
||||||
|
- Nomad
|
||||||
|
- Consul
|
||||||
|
- Homelab
|
||||||
|
- Nix
|
||||||
|
---
|
||||||
|
|
||||||
|
This blog. The one that you are currently reading right now. Is running on a metal box that is just barely large enough to fit the average house cat. It cost ~$800 USD to build and has been christened Megamind. The HTTP request that you initiated when you visited https://howdoicomputer.lol has returned digital bits from hardware that is more than likely a couple feet from where I'm sitting. Welcome!
|
||||||
|
|
||||||
|
### yeah, but why
|
||||||
|
|
||||||
|
I like solving problems and these were mine:
|
||||||
|
|
||||||
|
* I have a plethora of software projects that I've written that need a home. Discord bots, daemons, websites, etc.
|
||||||
|
* I needed a place to host a blog. Hi!
|
||||||
|
* I want to replace the myriad online software services that I'm subscribed to. Spotify, Netflix, etc.
|
||||||
|
* I want an experimentation platform that I could use to learn new technologies or try new ideas.
|
||||||
|
|
||||||
|
I wanted to build a self-hosted platform with logging, metric collection, service discovery, orchestration, etc; [fly.io](https://fly.io/) in a box, if you will.
|
||||||
|
|
||||||
|
Also, I love making things. Making things is fun.
|
||||||
|
|
||||||
|
### okay, but how
|
||||||
|
|
||||||
|
![homelab](/homelab.jpg)
|
||||||
|
|
||||||
|
If you go on the /r/homelab subreddit and sort by the most popular posts then you'll see setups that involve quite a bit more hardware than what my homelab currently sports. I don't have a full metal rack with multiple blades and switches. There are no neatly braided corridors of ethernet cabling. My homelab is a box that is filled with consumer grade hardware that sprouts a single cable that snakes to my off-the-shelf, eight year old consumer router.
|
||||||
|
|
||||||
|
Currently, that box is outfitted with:
|
||||||
|
|
||||||
|
* Ryzen 5600X
|
||||||
|
* 64 GB of non-ECC memory
|
||||||
|
* Intel Arc GPU
|
||||||
|
* Two WD Red 12TB drives
|
||||||
|
|
||||||
|
The hardware isn't the interesting part, however. The interesting part is what runs *inside* the computer. It's essentially a Platform as a Service (PaaS) solution in a box and I love it.
|
||||||
|
|
||||||
|
### nomad and nix and zfs oh my
|
||||||
|
|
||||||
|
Here are some features of my homelab:
|
||||||
|
|
||||||
|
* Nomad is the container orchestrator
|
||||||
|
* A ZFS mirrored pool for data redundancy
|
||||||
|
* Consul exists as a service mesh
|
||||||
|
* Vault exists for secret storage
|
||||||
|
* Traefik is for ingress
|
||||||
|
* Prometheus for monitoring and Grafana for dashboards
|
||||||
|
* The operating system is NixOS and I use my laptop to do flake based deployments to the underlying OS
|
||||||
|
|
||||||
|
A secret that I've withheld from you so far is that Megamind isn't my first homelab. A previous homelab that I built was a k3s cluster running on top of Raspbery Pis. It was quaint but got decommissioned when I moved apartments. I never set it up again and it currently lies in pieces in a drawer somewhere.
|
||||||
|
|
||||||
|
So why Nomad? Mostly because, at the time, I was leading an infrastructure initiative at my day job to use Nomad to orchestrate applications that are deployed to heterogenous IoT devices spread across distinct geographic regions. I wanted to dog food my own proposal. Also, Nomad is *a lot* simpler to use than Kubernetes. Nomad starts as *just* an orchestrator but gives you the option to introduce complexity later on through Vault and Consul. Every concept is almost immediately grokable and it has just been a pleasure to work with.
|
||||||
|
|
||||||
|
### what's runnin
|
||||||
|
|
||||||
|
Here is what is running so far:
|
||||||
|
|
||||||
|
* Jellyfin (movies, TV shows, etc)
|
||||||
|
* Gitea (Git server and Docker registry)
|
||||||
|
* Factorio server
|
||||||
|
* FoundryVTT
|
||||||
|
* Dufs (a UI for uploading files to the server)
|
||||||
|
* Calibre Web (my library of ebooks)
|
||||||
|
* Navidrome (music server)
|
||||||
|
* Grafana and Prometheus
|
||||||
|
* A Discord bot for looking up books
|
||||||
|
* An Elixir/Phoenix application that I'm working on
|
||||||
|
|
||||||
|
### internal paas
|
||||||
|
|
||||||
|
I write code. I like writing code. Sometimes that code becomes semi-functional pieces of software that I need to deploy. Previously, I used [fly.io](fly.io) to host applications but have now moved those applications to my homelab.
|
||||||
|
|
||||||
|
Here is how they are developed and deployed:
|
||||||
|
|
||||||
|
* Each application has a `ci/` directory that contains a [Dagger](https://dagger.io/) pipeline for testing the application and building a docker image. This is local for now.
|
||||||
|
* The docker image is uploaded to `git.howdoicomputer.lol`. What is behind that domain is a Gitea instance that serves as a git host and a docker registry.
|
||||||
|
* That application also has a `deploy/` directory that contains a `job.nomad` file. That Nomad job definition specifies the docker image that exists in Gitea and is used for the job allocation.
|
||||||
|
* If the application has a `/metrics` endpoint, then Prometheus will be updated to scrape that endpoint and collect those metrics. This is powered by Consul.
|
||||||
|
* If the application needs secrets then they are fetched from Vault.
|
||||||
|
* Traefik and Consul Registry tags are used to define the ingress for the application. Most services are behind a subdomain on the `howdoicomputer.lol` domain and Traefik is what maps those subdomains to running services. If the service is not ready for production, then an IP whitelist is used to make sure that only ingress from my Tailscale VPN is allowed to access the site.
|
||||||
|
* Logs are displayed through the Nomad web dashboard.
|
||||||
|
* Traefik manages Let's Encrypt SSL certs through the DNS challenge method.
|
||||||
|
|
||||||
|
This blog is developed similarily. It's [Hugo](https://gohugo.io/) based so posts are markdown files that get converted into HTML files. A Dagger pipeline executes Hugo to get those files and then builds the container image - which runs Nginx - and then uploads that image to Gitea. There is a job definition in the blog's repo that deploys that application to Nomad.
|
||||||
|
|
||||||
|
![blog_nomad_job](/blog_nomad_job.png)
|
||||||
|
|
||||||
|
Here is the job file for the blog:
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
job "blog" {
|
||||||
|
type = "service"
|
||||||
|
datacenters = ["dc1"]
|
||||||
|
|
||||||
|
group "blog" {
|
||||||
|
network {
|
||||||
|
mode = "bridge"
|
||||||
|
|
||||||
|
port "http" {
|
||||||
|
to = 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "blog"
|
||||||
|
port = "http"
|
||||||
|
|
||||||
|
tags = [
|
||||||
|
"traefik.enable=true",
|
||||||
|
"traefik.http.routers.blog-https.tls=true",
|
||||||
|
"traefik.http.routers.blog-https.rule=Host(`howdoicomputer.lol`)",
|
||||||
|
"traefik.http.routers.blog-https.tls.certresolver=resolver",
|
||||||
|
"traefik.http.routers.blog-https.tls.domains[0].main=howdoicomputer.lol",
|
||||||
|
"traefik.http.routers.blog-https.entrypoints=websecure",
|
||||||
|
"traefik.http.routers.blog-http.entrypoints=web",
|
||||||
|
"traefik.http.routers.blog-http.rule=Host(`howdoicomputer.lol`)",
|
||||||
|
"traefik.http.routers.blog-http.middlewares=redirecthttps",
|
||||||
|
"traefik.http.middlewares.redirecthttps.redirectscheme.scheme=https"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
task "blog" {
|
||||||
|
driver = "docker"
|
||||||
|
|
||||||
|
config {
|
||||||
|
image = "git.howdoicomputer.lol/howdoicomputer/blog:2"
|
||||||
|
ports = ["http"]
|
||||||
|
}
|
||||||
|
|
||||||
|
resources {
|
||||||
|
cpu = 500
|
||||||
|
memory = 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### nix
|
||||||
|
|
||||||
|
The OS is configured remotely using [deploy-rs](https://github.com/serokell/deploy-rs) - a Rust based CLI that allows you to apply a Nix flake to a specific host. This is what I've replaced Ansible with. Nix is... okay. I'll review Nix later but one cool feature to note here is that deploy-rs will apply a Nix configuration and if the SSH connection is broken then the previous Nix state would be rolled back to on the host.
|
||||||
|
|
||||||
|
What Nix currently owns:
|
||||||
|
|
||||||
|
* The installation of Nomad, Consul, Vault and other packages on the host.
|
||||||
|
* The creation of the HashiStack configuration files.
|
||||||
|
* The ZFS pool.
|
||||||
|
* Firewall rules.
|
||||||
|
* User creation.
|
||||||
|
* Kernel parameters.
|
||||||
|
|
||||||
|
I do really like the immutability of Nix. Something I want to explore down the line is either [impermanence](https://nixos.wiki/wiki/Impermanence) or baking an OS image and continuously reimagining the homelab server through PXE.
|
||||||
|
|
||||||
|
### the future
|
||||||
|
|
||||||
|
The future is bright! It has been incredibly fluid to roll out new services to the server. There are two additional features that I want: a CI/CD solution and an auth model for friends who want to use services.
|
||||||
|
|
||||||
|
For CI/CD, I'll most likely go with [Drone](https://www.drone.io/). Really, I just want a UI for Dagger pipelines. For an auth model, eh, I am not sure. LDAP? There is also the possiblity of using Oauth2 and whitelisting accounts.
|
||||||
|
|
||||||
|
I also want to do a thorough lockdown of Gitea so that I can expose my code to the world.
|
||||||
|
|
||||||
|
Till next time.
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
title: "Homelab 2: Monitoring"
|
||||||
|
date: 2023-09-01T21:15:40-07:00
|
||||||
|
draft: true
|
||||||
|
summary: How metrics and logs work for my homelab
|
||||||
|
tags:
|
||||||
|
- Prometheus
|
||||||
|
- Nomad
|
||||||
|
- Grafana
|
||||||
|
- Monitoring
|
||||||
|
- Consul
|
||||||
|
---
|
||||||
|
|
||||||
|
Every good production environment needs robust monitoring in-place before it could be considered production and I feel like my homelab shouldn't be an exception.
|
||||||
|
|
||||||
|
With that in mind, I created a monitoring stack that I've used professionally at companies that I've worked at and I'm pretty happy with it.
|
||||||
|
|
||||||
|
## stackem
|
||||||
|
|
||||||
|
The different components of the system are thus:
|
||||||
|
|
||||||
|
* Prometheus
|
||||||
|
* Grafana
|
||||||
|
* Prometheus's node_exporter
|
||||||
|
* Consul
|
||||||
|
|
||||||
|
Here is what I want to collect metrics for, from most critical to least:
|
||||||
|
|
||||||
|
1. The base host resources. This includes available memory, CPU, disk space, network traffic, etc. Also includes the ZFS pool.
|
||||||
|
2. Nomad.
|
||||||
|
4. The services that run on the host via Nomad.
|
||||||
|
|
||||||
|
In essence, monitoring starts for the platform used to deliver my applications and then moves upward to the end services I expose to myself and my friends.
|
||||||
|
|
||||||
|
## base system monitoring
|
||||||
|
|
||||||
|
Starting from the base, the Prometheus project supports the collection of metrics for Linux based hosts through their [node_exporter](https://github.com/prometheus/node_exporter) project. It's a Golang binary that exposes an absolute treasure trove of data including ZFS stats! It covers my first two monitoring needs.
|
||||||
|
|
||||||
|
While I could run the `node_exporter` via systemd, I instead opted to use the `exec` driver for Nomad. There is a Nix package for installing the exporter so the job definition just relies on executing the binary itself. Doing it this way means I get visibility into the exporter process and logs via the Nomad dashboard.
|
||||||
|
|
||||||
|
## everything else
|
||||||
|
|
||||||
|
Nomad and Consul both expose their own metrics and so it's easy enough to add a Prometheus stat
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
title: "Homelab"
|
|
||||||
date: 2023-08-27T18:36:47-07:00
|
|
||||||
draft: true
|
|
||||||
---
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
export VAULT_ADDR="http://megamind:8200"
|
||||||
|
export NOMAD_ADDR="http://megamind:4646"
|
||||||
|
export VAULT_TOKEN="hvs.vYkHHcWub5i6xsJWifKSKrbD"
|
|
@ -0,0 +1,46 @@
|
||||||
|
job "blog" {
|
||||||
|
type = "service"
|
||||||
|
datacenters = ["dc1"]
|
||||||
|
|
||||||
|
group "blog" {
|
||||||
|
network {
|
||||||
|
mode = "bridge"
|
||||||
|
|
||||||
|
port "http" {
|
||||||
|
to = 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "blog"
|
||||||
|
port = "http"
|
||||||
|
|
||||||
|
tags = [
|
||||||
|
"traefik.enable=true",
|
||||||
|
"traefik.http.routers.blog-https.tls=true",
|
||||||
|
"traefik.http.routers.blog-https.rule=Host(`howdoicomputer.lol`)",
|
||||||
|
"traefik.http.routers.blog-https.tls.certresolver=resolver",
|
||||||
|
"traefik.http.routers.blog-https.tls.domains[0].main=howdoicomputer.lol",
|
||||||
|
"traefik.http.routers.blog-https.entrypoints=websecure",
|
||||||
|
"traefik.http.routers.blog-http.entrypoints=web",
|
||||||
|
"traefik.http.routers.blog-http.rule=Host(`howdoicomputer.lol`)",
|
||||||
|
"traefik.http.routers.blog-http.middlewares=redirecthttps",
|
||||||
|
"traefik.http.middlewares.redirecthttps.redirectscheme.scheme=https"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
task "blog" {
|
||||||
|
driver = "docker"
|
||||||
|
|
||||||
|
config {
|
||||||
|
image = "git.howdoicomputer.lol/howdoicomputer/blog:4"
|
||||||
|
ports = ["http"]
|
||||||
|
}
|
||||||
|
|
||||||
|
resources {
|
||||||
|
cpu = 500
|
||||||
|
memory = 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
23
hugo.toml
23
hugo.toml
|
@ -1,4 +1,25 @@
|
||||||
baseURL = 'https://blog.howdoicomputer.lol/'
|
baseURL = 'https://howdoicomputer.lol/'
|
||||||
languageCode = 'en-us'
|
languageCode = 'en-us'
|
||||||
title = 'howdoicomputer'
|
title = 'howdoicomputer'
|
||||||
theme = "risotto"
|
theme = "risotto"
|
||||||
|
sectionPagesMenu = "main"
|
||||||
|
|
||||||
|
[params.theme]
|
||||||
|
palette = "tokyo-night-dark"
|
||||||
|
|
||||||
|
[params.about]
|
||||||
|
title = "howdoicomputer's blog"
|
||||||
|
description = "A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making"
|
||||||
|
|
||||||
|
[menu]
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "about"
|
||||||
|
name = "About"
|
||||||
|
url = "/about"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[markup]
|
||||||
|
[markup.tableOfContents]
|
||||||
|
startLevel = 2
|
||||||
|
endLevel = 3
|
||||||
|
ordered = true
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<ul class="contents">
|
||||||
|
{{ range (where .Site.RegularPages "Section" "posts") }}
|
||||||
|
<li><a href="{{ .Permalink }}">{{ .Title }}</a>
|
||||||
|
<div>
|
||||||
|
{{ .Summary }}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,103 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>About – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<header class="content__header">
|
||||||
|
<h1>About</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="content__body">
|
||||||
|
<h1 id="the-man-behind-the-books">the man behind the books</h1>
|
||||||
|
<p>I’m a thirty-something who has been working as some flavor of SRE/DevOps/systems engineer for a little over a decade.</p>
|
||||||
|
<h1 id="books">books?</h1>
|
||||||
|
<p>Yeah, I love em.</p>
|
||||||
|
<h1 id="but-what-else">but what else</h1>
|
||||||
|
<p>I enjoy biking, board games, table-top RPGs, 3D printing, video games, guitar, and bad jokes.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer class="content__footer"></footer>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
<p>me</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Binary file not shown.
After Width: | Height: | Size: 157 KiB |
|
@ -0,0 +1,92 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Categories – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="categories">Categories</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Categories on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/categories/</link>
|
||||||
|
<description>Recent content in Categories on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language><atom:link href="https://howdoicomputer.lol/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* About/bio section */
|
||||||
|
.about__logo {
|
||||||
|
height: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about__title {
|
||||||
|
display: inline;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about__title::before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Social media links */
|
||||||
|
.aside__social-links {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aside__social-links li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aside__social-links li::marker {
|
||||||
|
content: none;
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
:root {
|
||||||
|
/* Background */
|
||||||
|
--bg: var(--base00);
|
||||||
|
--off-bg: var(--base01);
|
||||||
|
--inner-bg: var(--base02);
|
||||||
|
|
||||||
|
/* Text */
|
||||||
|
--fg: var(--base05);
|
||||||
|
--off-fg: var(--base04);
|
||||||
|
--muted: var(--base03);
|
||||||
|
--link: var(--base0D);
|
||||||
|
--hover: var(--base0C);
|
||||||
|
--highlight: var(--base0A);
|
||||||
|
|
||||||
|
/* Logo */
|
||||||
|
--logo: var(--base0B);
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
/* Override this file to customise the theme's CSS for your site */
|
|
@ -0,0 +1,7 @@
|
||||||
|
.page__footer {
|
||||||
|
color: var(--off-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__footer p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Main menu */
|
||||||
|
.main-nav ul {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0.25rem 0;
|
||||||
|
gap: 0rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-nav li {
|
||||||
|
padding-top: 0.25rem;
|
||||||
|
margin-left: 1rem;
|
||||||
|
text-transform: lowercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-nav li::marker {
|
||||||
|
content: "./";
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* 1rem = 16px by default */
|
||||||
|
|
||||||
|
.page {
|
||||||
|
max-width: 64rem;
|
||||||
|
margin: 1rem auto;
|
||||||
|
display: grid;
|
||||||
|
grid-template-areas:
|
||||||
|
"header"
|
||||||
|
"body"
|
||||||
|
"aside"
|
||||||
|
"footer";
|
||||||
|
grid-template-columns: minmax(0, 1fr); /* https://css-tricks.com/preventing-a-grid-blowout/ */
|
||||||
|
grid-row-gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 45rem) {
|
||||||
|
.page {
|
||||||
|
grid-template-areas:
|
||||||
|
"header header"
|
||||||
|
"body aside"
|
||||||
|
"footer footer";
|
||||||
|
grid-template-columns: minmax(0, 1fr) 15rem;
|
||||||
|
grid-column-gap: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
.page__header {
|
||||||
|
grid-area: header;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__logo {
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__nav {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Body + aside */
|
||||||
|
.page__body {
|
||||||
|
grid-area: body;
|
||||||
|
background-color: var(--off-bg);
|
||||||
|
box-shadow: 0 0 0 1rem var(--off-bg);
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__aside {
|
||||||
|
grid-area: aside;
|
||||||
|
color: var(--off-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
.page__footer {
|
||||||
|
grid-area: footer;
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
.page__logo {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-weight: inherit;
|
||||||
|
color: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__logo:before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__logo-inner {
|
||||||
|
display: block;
|
||||||
|
background: var(--logo);
|
||||||
|
opacity: 0.90;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.page__logo-inner:link, a.page__logo-inner:visited {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.page__logo-inner:hover,
|
||||||
|
a.page__logo-inner:active {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__logo-inner:before {
|
||||||
|
content: "[";
|
||||||
|
color: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page__logo-inner:after {
|
||||||
|
content: "] $";
|
||||||
|
color: var(--bg);
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Apprentice by romainl */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #262626;
|
||||||
|
--base01: #AF5F5F;
|
||||||
|
--base02: #5F875F;
|
||||||
|
--base03: #87875F;
|
||||||
|
--base04: #5F87AF;
|
||||||
|
--base05: #5F5F87;
|
||||||
|
--base06: #5F8787;
|
||||||
|
--base07: #6C6C6C;
|
||||||
|
--base08: #444444;
|
||||||
|
--base09: #FF8700;
|
||||||
|
--base0A: #87AF87;
|
||||||
|
--base0B: #FFFFAF;
|
||||||
|
--base0C: #87AFD7;
|
||||||
|
--base0D: #8787AF;
|
||||||
|
--base0E: #5FAFAF;
|
||||||
|
--base0F: #BCBCBC;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* base16 default dark
|
||||||
|
* https://github.com/chriskempson/base16-default-schemes
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #181818;
|
||||||
|
--base01: #282828;
|
||||||
|
--base02: #383838;
|
||||||
|
--base03: #585858;
|
||||||
|
--base04: #b8b8b8;
|
||||||
|
--base05: #d8d8d8;
|
||||||
|
--base06: #e8e8e8;
|
||||||
|
--base07: #f8f8f8;
|
||||||
|
--base08: #ab4642;
|
||||||
|
--base09: #dc9656;
|
||||||
|
--base0A: #f7ca88;
|
||||||
|
--base0B: #a1b56c;
|
||||||
|
--base0C: #86c1b9;
|
||||||
|
--base0D: #7cafc2;
|
||||||
|
--base0E: #ba8baf;
|
||||||
|
--base0F: #a16946;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* base16 default light
|
||||||
|
* https://github.com/chriskempson/base16-default-schemes
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #f8f8f8;
|
||||||
|
--base01: #e8e8e8;
|
||||||
|
--base02: #d8d8d8;
|
||||||
|
--base03: #b8b8b8;
|
||||||
|
--base04: #585858;
|
||||||
|
--base05: #383838;
|
||||||
|
--base06: #282828;
|
||||||
|
--base07: #181818;
|
||||||
|
--base08: #ab4642;
|
||||||
|
--base09: #dc9656;
|
||||||
|
--base0A: #f7ca88;
|
||||||
|
--base0B: #a1b56c;
|
||||||
|
--base0C: #86c1b9;
|
||||||
|
--base0D: #7cafc2;
|
||||||
|
--base0E: #ba8baf;
|
||||||
|
--base0F: #a16946;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Dracula by Mike Barkmin (http://github.com/mikebarkmin) based on Dracula Theme (http://github.com/dracula) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #282936;
|
||||||
|
--base01: #3a3c4e;
|
||||||
|
--base02: #4d4f68;
|
||||||
|
--base03: #626483;
|
||||||
|
--base04: #62d6e8;
|
||||||
|
--base05: #e9e9f4;
|
||||||
|
--base06: #f1f2f8;
|
||||||
|
--base07: #f7f7fb;
|
||||||
|
--base08: #ea51b2;
|
||||||
|
--base09: #b45bcf;
|
||||||
|
--base0A: #00f769;
|
||||||
|
--base0B: #ebff87;
|
||||||
|
--base0C: #a1efe4;
|
||||||
|
--base0D: #62d6e8;
|
||||||
|
--base0E: #b45bcf;
|
||||||
|
--base0F: #00f769;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/* gruvbox dark
|
||||||
|
* https://github.com/morhetz/gruvbox
|
||||||
|
* base16: https://github.com/dawikur/base16-gruvbox-scheme
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #282828;
|
||||||
|
--base01: #3c3836;
|
||||||
|
--base02: #504945;
|
||||||
|
--base03: #665c54;
|
||||||
|
--base04: #bdae93;
|
||||||
|
--base05: #d5c4a1;
|
||||||
|
--base06: #ebdbb2;
|
||||||
|
--base07: #fbf1c7;
|
||||||
|
--base08: #fb4934;
|
||||||
|
--base09: #fe8019;
|
||||||
|
--base0A: #fabd2f;
|
||||||
|
--base0B: #b8bb26;
|
||||||
|
--base0C: #8ec07c;
|
||||||
|
--base0D: #83a598;
|
||||||
|
--base0E: #d3869b;
|
||||||
|
--base0F: #d65d0e;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/* gruvbox light
|
||||||
|
* https://github.com/morhetz/gruvbox
|
||||||
|
* base16: https://github.com/dawikur/base16-gruvbox-scheme
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #fbf1c7;
|
||||||
|
--base01: #ebdbb2;
|
||||||
|
--base02: #d5c4a1;
|
||||||
|
--base03: #bdae93;
|
||||||
|
--base04: #665c54;
|
||||||
|
--base05: #504945;
|
||||||
|
--base06: #3c3836;
|
||||||
|
--base07: #282828;
|
||||||
|
--base08: #9d0006;
|
||||||
|
--base09: #af3a03;
|
||||||
|
--base0A: #b57614;
|
||||||
|
--base0B: #79740e;
|
||||||
|
--base0C: #427b58;
|
||||||
|
--base0D: #076678;
|
||||||
|
--base0E: #8f3f71;
|
||||||
|
--base0F: #d65d0e;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Material by Nate Peterson */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #263238;
|
||||||
|
--base01: #2E3C43;
|
||||||
|
--base02: #314549;
|
||||||
|
--base03: #546E7A;
|
||||||
|
--base04: #B2CCD6;
|
||||||
|
--base05: #EEFFFF;
|
||||||
|
--base06: #EEFFFF;
|
||||||
|
--base07: #FFFFFF;
|
||||||
|
--base08: #F07178;
|
||||||
|
--base09: #F78C6C;
|
||||||
|
--base0A: #FFCB6B;
|
||||||
|
--base0B: #C3E88D;
|
||||||
|
--base0C: #89DDFF;
|
||||||
|
--base0D: #82AAFF;
|
||||||
|
--base0E: #C792EA;
|
||||||
|
--base0F: #FF5370;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* PaperColor Dark by Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #1c1c1c;
|
||||||
|
--base01: #af005f;
|
||||||
|
--base02: #5faf00;
|
||||||
|
--base03: #d7af5f;
|
||||||
|
--base04: #5fafd7;
|
||||||
|
--base05: #808080;
|
||||||
|
--base06: #d7875f;
|
||||||
|
--base07: #d0d0d0;
|
||||||
|
--base08: #585858;
|
||||||
|
--base09: #5faf5f;
|
||||||
|
--base0A: #afd700;
|
||||||
|
--base0B: #af87d7;
|
||||||
|
--base0C: #ffaf00;
|
||||||
|
--base0D: #ff5faf;
|
||||||
|
--base0E: #00afaf;
|
||||||
|
--base0F: #5f8787;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* PaperColor Light by Jon Leopard (http://github.com/jonleopard) based on PaperColor Theme (https://github.com/NLKNguyen/papercolor-theme) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #eeeeee;
|
||||||
|
--base01: #af0000;
|
||||||
|
--base02: #008700;
|
||||||
|
--base03: #5f8700;
|
||||||
|
--base04: #0087af;
|
||||||
|
--base05: #444444;
|
||||||
|
--base06: #005f87;
|
||||||
|
--base07: #878787;
|
||||||
|
--base08: #bcbcbc;
|
||||||
|
--base09: #d70000;
|
||||||
|
--base0A: #d70087;
|
||||||
|
--base0B: #8700af;
|
||||||
|
--base0C: #d75f00;
|
||||||
|
--base0D: #d75f00;
|
||||||
|
--base0E: #005faf;
|
||||||
|
--base0F: #005f87;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Solarized Dark by Ethan Schoonover (modified by aramisgithub) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #002b36;
|
||||||
|
--base01: #073642;
|
||||||
|
--base02: #586e75;
|
||||||
|
--base03: #657b83;
|
||||||
|
--base04: #839496;
|
||||||
|
--base05: #93a1a1;
|
||||||
|
--base06: #eee8d5;
|
||||||
|
--base07: #fdf6e3;
|
||||||
|
--base08: #dc322f;
|
||||||
|
--base09: #cb4b16;
|
||||||
|
--base0A: #b58900;
|
||||||
|
--base0B: #859900;
|
||||||
|
--base0C: #2aa198;
|
||||||
|
--base0D: #268bd2;
|
||||||
|
--base0E: #6c71c4;
|
||||||
|
--base0F: #d33682;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Solarized Light by Ethan Schoonover (modified by aramisgithub) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #fdf6e3;
|
||||||
|
--base01: #eee8d5;
|
||||||
|
--base02: #93a1a1;
|
||||||
|
--base03: #839496;
|
||||||
|
--base04: #657b83;
|
||||||
|
--base05: #586e75;
|
||||||
|
--base06: #073642;
|
||||||
|
--base07: #002b36;
|
||||||
|
--base08: #dc322f;
|
||||||
|
--base09: #cb4b16;
|
||||||
|
--base0A: #b58900;
|
||||||
|
--base0B: #859900;
|
||||||
|
--base0C: #2aa198;
|
||||||
|
--base0D: #268bd2;
|
||||||
|
--base0E: #6c71c4;
|
||||||
|
--base0F: #d33682;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* tender by Jacobo Tabernero (https://github/com/jacoborus/tender.vim) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #282828;
|
||||||
|
--base01: #383838;
|
||||||
|
--base02: #484848;
|
||||||
|
--base03: #4c4c4c;
|
||||||
|
--base04: #b8b8b8;
|
||||||
|
--base05: #eeeeee;
|
||||||
|
--base06: #e8e8e8;
|
||||||
|
--base07: #feffff;
|
||||||
|
--base08: #f43753;
|
||||||
|
--base09: #dc9656;
|
||||||
|
--base0A: #ffc24b;
|
||||||
|
--base0B: #c9d05c;
|
||||||
|
--base0C: #73cef4;
|
||||||
|
--base0D: #b3deef;
|
||||||
|
--base0E: #d3b987;
|
||||||
|
--base0F: #a16946;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Tokyo Night Dark by Michaël Ball */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #1A1B26;
|
||||||
|
--base01: #16161E;
|
||||||
|
--base02: #2F3549;
|
||||||
|
--base03: #444B6A;
|
||||||
|
--base04: #787C99;
|
||||||
|
--base05: #A9B1D6;
|
||||||
|
--base06: #CBCCD1;
|
||||||
|
--base07: #D5D6DB;
|
||||||
|
--base08: #C0CAF5;
|
||||||
|
--base09: #A9B1D6;
|
||||||
|
--base0A: #0DB9D7;
|
||||||
|
--base0B: #9ECE6A;
|
||||||
|
--base0C: #B4F9F8;
|
||||||
|
--base0D: #2AC3DE;
|
||||||
|
--base0E: #BB9AF7;
|
||||||
|
--base0F: #F7768E;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Tokyo Night Light by Michaël Ball */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #D5D6DB;
|
||||||
|
--base01: #CBCCD1;
|
||||||
|
--base02: #DFE0E5;
|
||||||
|
--base03: #9699A3;
|
||||||
|
--base04: #4C505E;
|
||||||
|
--base05: #343B59;
|
||||||
|
--base06: #1A1B26;
|
||||||
|
--base07: #1A1B26;
|
||||||
|
--base08: #343B58;
|
||||||
|
--base09: #965027;
|
||||||
|
--base0A: #166775;
|
||||||
|
--base0B: #485E30;
|
||||||
|
--base0C: #3E6968;
|
||||||
|
--base0D: #34548A;
|
||||||
|
--base0E: #5A4A78;
|
||||||
|
--base0F: #8C4351;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Windows 95 Light by Fergus Collins (https://github.com/C-Fergus) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #fcfcfc;
|
||||||
|
--base01: #e0e0e0;
|
||||||
|
--base02: #c4c4c4;
|
||||||
|
--base03: #a8a8a8;
|
||||||
|
--base04: #7e7e7e;
|
||||||
|
--base05: #545454;
|
||||||
|
--base06: #2a2a2a;
|
||||||
|
--base07: #000000;
|
||||||
|
--base08: #a80000;
|
||||||
|
--base09: #fcfc54;
|
||||||
|
--base0A: #a85400;
|
||||||
|
--base0B: #00a800;
|
||||||
|
--base0C: #00a8a8;
|
||||||
|
--base0D: #0000a8;
|
||||||
|
--base0E: #a800a8;
|
||||||
|
--base0F: #54fc54;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* Windows 95 by Fergus Collins (https://github.com/C-Fergus) */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--base00: #000000;
|
||||||
|
--base01: #1C1C1C;
|
||||||
|
--base02: #383838;
|
||||||
|
--base03: #545454;
|
||||||
|
--base04: #7e7e7e;
|
||||||
|
--base05: #a8a8a8;
|
||||||
|
--base06: #d2d2d2;
|
||||||
|
--base07: #fcfcfc;
|
||||||
|
--base08: #fc5454;
|
||||||
|
--base09: #a85400;
|
||||||
|
--base0A: #fcfc54;
|
||||||
|
--base0B: #54fc54;
|
||||||
|
--base0C: #54fcfc;
|
||||||
|
--base0D: #5454fc;
|
||||||
|
--base0E: #fc54fc;
|
||||||
|
--base0F: #00a800;
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
@import 'colours.css';
|
||||||
|
@import 'typography.css';
|
||||||
|
@import 'layout.css';
|
||||||
|
@import 'header.css';
|
||||||
|
@import 'logo.css';
|
||||||
|
@import 'about.css';
|
||||||
|
@import 'footer.css';
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: var(--bg);
|
||||||
|
color: var(--fg);
|
||||||
|
}
|
|
@ -0,0 +1,215 @@
|
||||||
|
/* Fonts */
|
||||||
|
:root {
|
||||||
|
--font-monospace: "Fira Mono", monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Headings */
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-size: 1rem;
|
||||||
|
margin: 1.5rem 0 0 0;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1+h2,
|
||||||
|
h1+h3,
|
||||||
|
h1+h4,
|
||||||
|
h1+h5,
|
||||||
|
h1+h6,
|
||||||
|
h2+h3,
|
||||||
|
h2+h4,
|
||||||
|
h2+h5,
|
||||||
|
h2+h6,
|
||||||
|
h3+h4,
|
||||||
|
h3+h5,
|
||||||
|
h3+h6,
|
||||||
|
h4+h5,
|
||||||
|
h4+h6,
|
||||||
|
h5+h6 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:before { content: "# "; }
|
||||||
|
h2:before { content: "## "; }
|
||||||
|
h3:before { content: "### "; }
|
||||||
|
h4:before { content: "#### "; }
|
||||||
|
h5:before { content: "##### "; }
|
||||||
|
h6:before { content: "###### "; }
|
||||||
|
|
||||||
|
h1:before,
|
||||||
|
h2:before,
|
||||||
|
h3:before,
|
||||||
|
h4:before,
|
||||||
|
h5:before,
|
||||||
|
h6:before {
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Paragraphs */
|
||||||
|
p {
|
||||||
|
margin: 0 0 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
|
||||||
|
a:link, a:visited {
|
||||||
|
color: var(--link);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover, a:active, a.active {
|
||||||
|
color: var(--hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lists */
|
||||||
|
ul {
|
||||||
|
margin: 0 0 1.5rem 0;
|
||||||
|
padding-left: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
margin: 0 0 1.5rem 0;
|
||||||
|
padding-left: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul ul,
|
||||||
|
ul ol,
|
||||||
|
ol ul,
|
||||||
|
ol ol {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li::marker {
|
||||||
|
content: '∗\00A0';
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li::marker {
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
margin: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin: 0 0 0 1.5rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd + dt {
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl {
|
||||||
|
margin: 0 0 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blockquotes */
|
||||||
|
blockquote {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 0 1.5rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote::before {
|
||||||
|
position: absolute;
|
||||||
|
left: -1.5rem;
|
||||||
|
content: ">";
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.twitter-tweet::before {
|
||||||
|
content: "\f099";
|
||||||
|
font-family: "Font Awesome 5 Brands";
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Code */
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
background: var(--inner-bg) !important;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
color: var(--off-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin: 0 0 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Emphasis */
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Highlighting */
|
||||||
|
::selection,
|
||||||
|
mark {
|
||||||
|
background-color: var(--highlight);
|
||||||
|
color: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Other typographic elements */
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr:after {
|
||||||
|
content: '---';
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Prevent super/sub from affecting line height */
|
||||||
|
sup, sub {
|
||||||
|
vertical-align: baseline;
|
||||||
|
position: relative;
|
||||||
|
top: -0.25rem;
|
||||||
|
font-size: unset;
|
||||||
|
}
|
||||||
|
sub {
|
||||||
|
top: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
table {
|
||||||
|
border-spacing: 0;
|
||||||
|
margin: 0 0 1.5rem 0;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
padding: 0 .75rem;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
th:first-child, td:first-child {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Figures */
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.6 MiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg height='100px' width='100px' fill="#000000" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 80.944" enable-background="new 0 0 100 80.944" xml:space="preserve"><path d="M49.674,40.911c-2.018-6.836,8.971-10.963,8.841-4.075c1.016,3.678,1.302,5.808-2.448,6.511 C52.754,43.964,50.684,44.329,49.674,40.911z"></path><path d="M57.63,18.274c-1.094,3.718,4.311,4.251,2.91,8.359c2.819,0,1.999-2.246,3.054-4.095c1.523-2.656,5.052-3.301,4.792-6.96 c0.267,6.726,4.004-0.495,6.523-0.762c0.137-1.256-0.449-2.819-0.586-3.665c-1.237-2.656-1.127-5.248-4.531-3.379 c-2.429,1.321-5.547,3.88-2.507,6.185C64.206,14.407,58.763,14.381,57.63,18.274z"></path><path d="M49.74,8.586c-1.4,0.794-2.129,3.861-2.448,5.312c-0.586,2.689-0.41,11.211,4.108,9.824 c2.558-0.774,2.103-4.674,3.092-6.719c0.671-1.36,1.634-1.139,1.992-2.584c0.261-1.061-0.345-2.721-0.508-3.802 c1.719,4.427,8.366,2.429,6.731-2.031c-1.341-1.224-3.965-1.985-5.696-1.074c-2.52,1.335-0.222,2.793-2.148,2.865 C53.542,10.416,52.487,7.037,49.74,8.586z"></path><path d="M57.012,27.454c-1.843-6.126-12.884,2.767-10.768,6.576c1.543,2.793,4.056-1.959,5.612-2.76 C53.991,30.175,57.474,31.158,57.012,27.454z"></path><path d="M61.179,4.993c1.692,0.697,3.633,0.599,3.053-1.907C61.726,1.061,54.7,0.5,54.929,5.117 C56.888,4.869,59.258,4.192,61.179,4.993z"></path><path d="M65.925,28.938c1.861-1.282,4.961-1.087,4.466-4.192c-3.093-7.058-8.854,6.973-9.343,9.381 C63.269,33.176,63.913,30.312,65.925,28.938z"></path><path d="M79.069,38.092c1.061,2.057,5.67,0.749,7.994-0.41c3.041-1.498,3.75-3.529,3.034-6.934 C88.008,22.115,76.165,32.467,79.069,38.092z"></path><path d="M71.973,41.536c2.571-2.161,1.96-9.167,1.536-12.024c-2.682-0.423-5.924,0.749-7.832,2.682 c-1.38,1.419-5.286,8.08-3.73,10.04C62.995,43.554,71.042,42.331,71.973,41.536z"></path><path d="M86.979,24.596c2.076-0.423,1.295-3.691,0.95-5.586c-0.163-5.026-5.527-0.996-4.577,2.617 C83.73,23.04,85.247,24.947,86.979,24.596z"></path><path d="M72.949,24.622c0.808,1.511,2.864,1.523,3.405,4.193c0.618,3.014-0.71,6.198-0.312,9.264 c1.939-1.582,1.621-7.285,3.326-9.941c0.99-1.556,2.155-1.784,2.188-3.613c0.026-1.276-1.224-2.942-1.861-3.991 c1.973-0.091,3.965-7.135,1.172-6.999c-1.433-2.097-3.054-2.422-3.764-0.137c-0.742,2.396,2.155,4.713,2.891,6.712 C76.556,18.15,70.319,19.674,72.949,24.622z"></path><path d="M31.172,23.834c1.374-0.072,1.152,1.224,2.506,0.651c1.374-0.573,2.331-3.079,3.21-4.225 c1.432-6.348-11.517-5.365-10.404,2.142C26.927,25.383,28.229,24.01,31.172,23.834z"></path><path d="M25.319,16.438c-0.352-2.656-4.29-3.405-5.391-0.833C19.121,17.486,24.844,22.779,25.319,16.438z"></path><path d="M23.945,31.992c-0.866,1.797-1.185,4.017-1.029,6.002c0.28,3.502,0.684,2.715,3.171,3.516 c1.354,0.423,3.613,1.705,5.039,1.484c2.91-0.476,1.569-1.322,1.022-3.354c-0.449-1.686-1.517-3.47-1.498-5.254 c0.026-2.454,2.097-4.127,1.855-6.647C30.586,22.167,25.02,29.726,23.945,31.992z"></path><path d="M13.366,25.019c1.302,0.553,1.784,2.786,3.027,3.105c1.087,0.267,2.312-1.309,4.102-1.022 c1.537,0.254,1.816,3.119,3.418,0.677c0.964-1.484,0.664-3.119,0.104-4.727c-3.281-3.197-7.409-4.844-11.589-2.708 c-0.872,0.449-4.453,1.445-2.799,2.956C11.367,24.882,11.881,24.387,13.366,25.019z"></path><path d="M52.259,2.773C50.13-1.082,39.557-1.368,41.595,4.804C42.91,8.782,52.969,7.675,52.259,2.773z"></path><path d="M12.845,26.803c-2.396,1.348-4.876,3.607-3.503,6.712c2.461,5.54,3.379,2.493,4.902-0.996 c0.417,2.317-0.091,4.739,2.351,5.898c2.649,1.243,3.737-0.078,4.017-2.78c0.189-1.784,1.387-6.289-0.957-6.862 c-1.673-0.397-3.561,2.467-5.137,2.904c0.267-0.794,0.41-1.758,0.833-2.48C14.876,28.04,13.854,27.454,12.845,26.803z"></path><path d="M40.176,17.089c0.508,2.454-2.838,5.963-4.037,7.793c0.97-0.449,0.931-0.098,1.693-0.859 c0.098,1.25,0.195,2.493,0.299,3.743c3.425-0.475,4.316,3.19,6.999-1.159c2.513-4.056-0.072-5.924-4.193-5.377 c0.794-2.331,2.956-0.163,3.49-2.708c0.527-2.494,0.514-5.039,1.028-7.533c-1.048-1.23-3.574-2.891-5.149-2.428 c-1.12,0.345-3.809,3.705-3.659,4.688C36.947,15.195,39.72,14.921,40.176,17.089z"></path><path d="M34.023,34.211c-2.474,3.418,0.912,3.457,2.201,4.916c1.341,1.51,0.866,3.62,2.624,3.939 c1.302,0.228,4.049,1.36,5.326,0.403c2.604-1.946-0.697-7.35-1.953-9.557C40.566,31.542,35.729,31.868,34.023,34.211z"></path><path d="M100,34.075c0-3.613-2.07-6.973-5.605-9.974c-1.491,0.983-3.093,1.842-4.739,2.532c2.291,1.719,3.574,3.613,3.574,5.612 c0,7.806-19.355,14.128-43.229,14.128c-23.874,0-43.229-6.322-43.229-14.128c0-2.201,1.614-4.291,4.388-6.152l-4.492-2.891 C2.455,26.406,0,30.11,0,34.075c0,0.215,0.013,0.437,0.026,0.651H0c0.326,8.444,2.943,17.298,7.259,25.579 c0,0,10.462,20.639,42.741,20.639c32.278,0,42.565-20.814,42.565-20.814c4.303-8.242,7.109-17.174,7.422-25.403h-0.014 C99.987,34.511,100,34.29,100,34.075z"></path><path d="M38.027,7.122c1.68-5.872-12.305-0.124-9.863,5.99C29.948,17.564,36.706,9.205,38.027,7.122z"></path></svg>
|
After Width: | Height: | Size: 4.8 KiB |
|
@ -0,0 +1,95 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="Hugo 0.117.0"><title>howdoicomputer – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<ul class="contents">
|
||||||
|
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/posts/">Posts</a>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/</link>
|
||||||
|
<description>Recent content on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Homelab: Part 1</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/homelab-1/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/posts/homelab-1/</guid>
|
||||||
|
<description>First part of a multi-part series about my current homelab</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>About</title>
|
||||||
|
<link>https://howdoicomputer.lol/about/</link>
|
||||||
|
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/about/</guid>
|
||||||
|
<description>the man behind the books I&rsquo;m a thirty-something who has been working as some flavor of SRE/DevOps/systems engineer for a little over a decade.
|
||||||
|
books? Yeah, I love em.
|
||||||
|
but what else I enjoy biking, board games, table-top RPGs, 3D printing, video games, guitar, and bad jokes.</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-us">
|
||||||
|
<head>
|
||||||
|
<title>https://howdoicomputer.lol/</title>
|
||||||
|
<link rel="canonical" href="https://howdoicomputer.lol/">
|
||||||
|
<meta name="robots" content="noindex">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=https://howdoicomputer.lol/">
|
||||||
|
</head>
|
||||||
|
</html>
|
|
@ -0,0 +1,230 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Homelab: Part 1 – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item active" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<header class="content__header">
|
||||||
|
<h1>Homelab: Part 1</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="content__body">
|
||||||
|
<p>This blog. The one that you are currently reading right now. Is running on a metal box that is just barely large enough to fit the average house cat. It cost ~$800 USD to build and has been christened Megamind. The HTTP request that you initiated when you visited <a href="https://blog.howdoicomputer.lol">https://blog.howdoicomputer.lol</a> has returned digital bits from hardware that is more than likely a couple feet from where I’m sitting. Welcome!</p>
|
||||||
|
<h3 id="yeah-but-why">yeah, but why</h3>
|
||||||
|
<p>I like solving problems and these were mine:</p>
|
||||||
|
<ul>
|
||||||
|
<li>I have a plethora of software projects that I’ve written that need a home. Discord bots, daemons, websites, etc.</li>
|
||||||
|
<li>I needed a place to host a blog. Hi!</li>
|
||||||
|
<li>I want to replace the myriad online software services that I’m subscribed to. Spotify, Netflix, etc.</li>
|
||||||
|
<li>I want an experimentation platform that I could use to learn new technologies or try new ideas.</li>
|
||||||
|
</ul>
|
||||||
|
<p>I wanted to build a self-hosted platform with logging, metric collection, service discovery, orchestration, etc; <a href="https://fly.io/">fly.io</a> in a box, if you will.</p>
|
||||||
|
<p>Also, I love making things. Making things is fun.</p>
|
||||||
|
<h3 id="okay-but-how">okay, but how</h3>
|
||||||
|
<p><img src="/homelab.jpg" alt="homelab"></p>
|
||||||
|
<p>If you go on the /r/homelab subreddit and sort by the most popular posts then you’ll see setups that involve quite a bit more hardware than what my homelab currently sports. I don’t have a full metal rack with multiple blades and switches. There are no neatly braided corridors of ethernet cabling. My homelab is a box that is filled with consumer grade hardware that sprouts a single cable that snakes to my off-the-shelf, eight year old consumer router.</p>
|
||||||
|
<p>Currently, that box is outfitted with:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Ryzen 5600X</li>
|
||||||
|
<li>64 GB of non-ECC memory</li>
|
||||||
|
<li>Intel Arc GPU</li>
|
||||||
|
<li>Two WD Red 12TB drives</li>
|
||||||
|
</ul>
|
||||||
|
<p>The hardware isn’t the interesting part, however. The interesting part is what runs <em>inside</em> the computer. It’s essentially a Platform as a Service (PaaS) solution in a box and I love it.</p>
|
||||||
|
<h3 id="nomad-and-nix-and-zfs-oh-my">nomad and nix and zfs oh my</h3>
|
||||||
|
<p>Here are some features of my homelab:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Nomad is the container orchestrator</li>
|
||||||
|
<li>A ZFS mirrored pool for data redundancy</li>
|
||||||
|
<li>Consul exists as a service mesh</li>
|
||||||
|
<li>Vault exists for secret storage</li>
|
||||||
|
<li>Traefik is for ingress</li>
|
||||||
|
<li>Prometheus for monitoring and Grafana for dashboards</li>
|
||||||
|
<li>The operating system is NixOS and I use my laptop to do flake based deployments to the underlying OS</li>
|
||||||
|
</ul>
|
||||||
|
<p>A secret that I’ve withheld from you so far is that Megamind isn’t my first homelab. A previous homelab that I built was a k3s cluster running on top of Raspbery Pis. It was quaint but got decommissioned when I moved apartments. I never set it up again and it currently lies in pieces in a drawer somewhere.</p>
|
||||||
|
<p>So why Nomad? Mostly because, at the time, I was leading an infrastructure initiative at my day job to use Nomad to orchestrate applications that are deployed to heterogenous IoT devices spread across distinct geographic regions. I wanted to dog food my own proposal. Also, Nomad is <em>a lot</em> simpler to use than Kubernetes. Nomad starts as <em>just</em> an orchestrator but gives you the option to introduce complexity later on through Vault and Consul. Every concept is almost immediately grokable and it has just been a pleasure to work with.</p>
|
||||||
|
<h3 id="whats-runnin">what’s runnin</h3>
|
||||||
|
<p>Here is what is running so far:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Jellyfin (movies, TV shows, etc)</li>
|
||||||
|
<li>Gitea (Git server and Docker registry)</li>
|
||||||
|
<li>Factorio server</li>
|
||||||
|
<li>FoundryVTT</li>
|
||||||
|
<li>Dufs (a UI for uploading files to the server)</li>
|
||||||
|
<li>Calibre Web (my library of ebooks)</li>
|
||||||
|
<li>Navidrome (music server)</li>
|
||||||
|
<li>Grafana and Prometheus</li>
|
||||||
|
<li>A Discord bot for looking up books</li>
|
||||||
|
<li>An Elixir/Phoenix application that I’m working on</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="internal-paas">internal paas</h3>
|
||||||
|
<p>I write code. I like writing code. Sometimes that code becomes semi-functional pieces of software that I need to deploy. Previously, I used <a href="fly.io">fly.io</a> to host applications but have now moved those applications to my homelab.</p>
|
||||||
|
<p>Here is how they are developed and deployed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Each application has a <code>ci/</code> directory that contains a <a href="https://dagger.io/">Dagger</a> pipeline for testing the application and building a docker image. This is local for now.</li>
|
||||||
|
<li>The docker image is uploaded to <code>git.howdoicomputer.lol</code>. What is behind that domain is a Gitea instance that serves as a git host and a docker registry.</li>
|
||||||
|
<li>That application also has a <code>deploy/</code> directory that contains a <code>job.nomad</code> file. That Nomad job definition specifies the docker image that exists in Gitea and is used for the job allocation.</li>
|
||||||
|
<li>If the application has a <code>/metrics</code> endpoint, then Prometheus will be updated to scrape that endpoint and collect those metrics. This is powered by Consul.</li>
|
||||||
|
<li>If the application needs secrets then they are fetched from Vault.</li>
|
||||||
|
<li>Traefik and Consul Registry tags are used to define the ingress for the application. Most services are behind a subdomain on the <code>howdoicomputer.lol</code> domain and Traefik is what maps those subdomains to running services. If the service is not ready for production, then an IP whitelist is used to make sure that only ingress from my Tailscale VPN is allowed to access the site.</li>
|
||||||
|
<li>Logs are displayed through the Nomad web dashboard.</li>
|
||||||
|
<li>Traefik manages Let’s Encrypt SSL certs through the DNS challenge method.</li>
|
||||||
|
</ul>
|
||||||
|
<p>This blog is developed similarily. It’s <a href="https://gohugo.io/">Hugo</a> based so posts are markdown files that get converted into HTML files. A Dagger pipeline executes Hugo to get those files and then builds the container image - which runs Nginx - and then uploads that image to Gitea. There is a job definition in the blog’s repo that deploys that application to Nomad.</p>
|
||||||
|
<p><img src="/blog_nomad_job.png" alt="blog_nomad_job"></p>
|
||||||
|
<p>Here is the job file for the blog:</p>
|
||||||
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-hcl" data-lang="hcl"><span style="display:flex;"><span><span style="color:#66d9ef">job</span> <span style="color:#e6db74">"blog"</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> type <span style="color:#f92672">=</span> <span style="color:#e6db74">"service"</span>
|
||||||
|
</span></span><span style="display:flex;"><span> datacenters <span style="color:#f92672">=</span> [<span style="color:#e6db74">"dc1"</span>]
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">group</span> <span style="color:#e6db74">"blog"</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">network</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> mode <span style="color:#f92672">=</span> <span style="color:#e6db74">"bridge"</span>
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">port</span> <span style="color:#e6db74">"http"</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> to <span style="color:#f92672">=</span> <span style="color:#ae81ff">80</span>
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">service</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> name <span style="color:#f92672">=</span> <span style="color:#e6db74">"blog"</span>
|
||||||
|
</span></span><span style="display:flex;"><span> port <span style="color:#f92672">=</span> <span style="color:#e6db74">"http"</span>
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> tags <span style="color:#f92672">=</span> [
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.enable<span style="color:#f92672">=</span><span style="color:#66d9ef">true</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-https.tls<span style="color:#f92672">=</span><span style="color:#66d9ef">true</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-https.rule<span style="color:#f92672">=</span><span style="color:#66d9ef">Host</span>(<span style="color:#960050;background-color:#1e0010">`</span><span style="color:#66d9ef">blog</span>.<span style="color:#66d9ef">howdoicomputer</span>.<span style="color:#66d9ef">lol</span><span style="color:#960050;background-color:#1e0010">`</span>)<span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-https.tls.certresolver<span style="color:#f92672">=</span><span style="color:#66d9ef">resolver</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-https.tls.domains[0].main<span style="color:#f92672">=</span><span style="color:#66d9ef">blog</span>.<span style="color:#66d9ef">howdoicomputer</span>.<span style="color:#66d9ef">lol</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-https.entrypoints<span style="color:#f92672">=</span><span style="color:#66d9ef">websecure</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-http.entrypoints<span style="color:#f92672">=</span><span style="color:#66d9ef">web</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-http.rule<span style="color:#f92672">=</span><span style="color:#66d9ef">Host</span>(<span style="color:#960050;background-color:#1e0010">`</span><span style="color:#66d9ef">blog</span>.<span style="color:#66d9ef">howdoicomputer</span>.<span style="color:#66d9ef">lol</span><span style="color:#960050;background-color:#1e0010">`</span>)<span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.routers.blog-http.middlewares<span style="color:#f92672">=</span><span style="color:#66d9ef">redirecthttps</span><span style="color:#960050;background-color:#1e0010">"</span>,
|
||||||
|
</span></span><span style="display:flex;"><span> "traefik.http.middlewares.redirecthttps.redirectscheme.scheme<span style="color:#f92672">=</span><span style="color:#66d9ef">https</span><span style="color:#960050;background-color:#1e0010">"</span>
|
||||||
|
</span></span><span style="display:flex;"><span> ]
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">task</span> <span style="color:#e6db74">"blog"</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> driver <span style="color:#f92672">=</span> <span style="color:#e6db74">"docker"</span>
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">config</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> image <span style="color:#f92672">=</span> <span style="color:#e6db74">"git.howdoicomputer.lol/howdoicomputer/blog:2"</span>
|
||||||
|
</span></span><span style="display:flex;"><span> ports <span style="color:#f92672">=</span> [<span style="color:#e6db74">"http"</span>]
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span>
|
||||||
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">resources</span> {
|
||||||
|
</span></span><span style="display:flex;"><span> cpu <span style="color:#f92672">=</span> <span style="color:#ae81ff">500</span>
|
||||||
|
</span></span><span style="display:flex;"><span> memory <span style="color:#f92672">=</span> <span style="color:#ae81ff">200</span>
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span> }
|
||||||
|
</span></span><span style="display:flex;"><span>}
|
||||||
|
</span></span></code></pre></div><h3 id="nix">nix</h3>
|
||||||
|
<p>The OS is configured remotely using <a href="https://github.com/serokell/deploy-rs">deploy-rs</a> - a Rust based CLI that allows you to apply a Nix flake to a specific host. This is what I’ve replaced Ansible with. Nix is… okay. I’ll review Nix later but one cool feature to note here is that deploy-rs will apply a Nix configuration and if the SSH connection is broken then the previous Nix state would be rolled back to on the host.</p>
|
||||||
|
<p>What Nix currently owns:</p>
|
||||||
|
<ul>
|
||||||
|
<li>The installation of Nomad, Consul, Vault and other packages on the host.</li>
|
||||||
|
<li>The creation of the HashiStack configuration files.</li>
|
||||||
|
<li>The ZFS pool.</li>
|
||||||
|
<li>Firewall rules.</li>
|
||||||
|
<li>User creation.</li>
|
||||||
|
<li>Kernel parameters.</li>
|
||||||
|
</ul>
|
||||||
|
<p>I do really like the immutability of Nix. Something I want to explore down the line is either <a href="https://nixos.wiki/wiki/Impermanence">impermanence</a> or baking an OS image and continuously reimagining the homelab server through PXE.</p>
|
||||||
|
<h3 id="the-future">the future</h3>
|
||||||
|
<p>The future is bright! It has been incredibly fluid to roll out new services to the server. There are two additional features that I want: a CI/CD solution and an auth model for friends who want to use services.</p>
|
||||||
|
<p>For CI/CD, I’ll most likely go with <a href="https://www.drone.io/">Drone</a>. Really, I just want a UI for Dagger pipelines. For an auth model, eh, I am not sure. LDAP? There is also the possiblity of using Oauth2 and whitelisting accounts.</p>
|
||||||
|
<p>I also want to do a thorough lockdown of Gitea so that I can expose my code to the world.</p>
|
||||||
|
<p>Till next time.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer class="content__footer"></footer>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
|
||||||
|
2023-08-27
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,97 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Posts – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item active" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="posts">Posts</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/posts/homelab-1/">Homelab: Part 1</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Posts on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/</link>
|
||||||
|
<description>Recent content in Posts on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/posts/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Homelab: Part 1</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/homelab-1/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/posts/homelab-1/</guid>
|
||||||
|
<description>First part of a multi-part series about my current homelab</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||||
|
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
|
<url>
|
||||||
|
<loc>https://howdoicomputer.lol/tags/consul/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/tags/homelab/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/posts/homelab-1/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/tags/nix/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/tags/nomad/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/posts/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/tags/</loc>
|
||||||
|
<lastmod>2023-08-27T18:36:47-07:00</lastmod>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/about/</loc>
|
||||||
|
</url><url>
|
||||||
|
<loc>https://howdoicomputer.lol/categories/</loc>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
|
@ -0,0 +1,95 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Consul – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="consul">Consul</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/posts/homelab-1/">Homelab: Part 1</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Consul on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/consul/</link>
|
||||||
|
<description>Recent content in Consul on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/tags/consul/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Homelab: Part 1</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/homelab-1/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/posts/homelab-1/</guid>
|
||||||
|
<description>First part of a multi-part series about my current homelab</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,95 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Homelab – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="homelab">Homelab</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/posts/homelab-1/">Homelab: Part 1</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Homelab on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/homelab/</link>
|
||||||
|
<description>Recent content in Homelab on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/tags/homelab/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Homelab: Part 1</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/homelab-1/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/posts/homelab-1/</guid>
|
||||||
|
<description>First part of a multi-part series about my current homelab</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,104 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Tags – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="tags">Tags</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/tags/consul/">Consul</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/tags/homelab/">Homelab</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/tags/nix/">Nix</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/tags/nomad/">Nomad</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Tags on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/</link>
|
||||||
|
<description>Recent content in Tags on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Consul</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/consul/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/tags/consul/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Homelab</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/homelab/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/tags/homelab/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Nix</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/nix/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/tags/nix/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Nomad</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/nomad/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/tags/nomad/</guid>
|
||||||
|
<description></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,95 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Nix – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="nix">Nix</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/posts/homelab-1/">Homelab: Part 1</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Nix on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/nix/</link>
|
||||||
|
<description>Recent content in Nix on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/tags/nix/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Homelab: Part 1</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/homelab-1/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/posts/homelab-1/</guid>
|
||||||
|
<description>First part of a multi-part series about my current homelab</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,95 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head><title>Nomad – howdoicomputer</title>
|
||||||
|
<meta name="description" content="A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/palettes/tokyo-night-dark.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/risotto.css">
|
||||||
|
<link rel="stylesheet" href="https://howdoicomputer.lol/css/custom.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<header class="page__header"><nav class="page__nav main-nav">
|
||||||
|
<ul>
|
||||||
|
<h1 class="page__logo"><a href="https://howdoicomputer.lol/" class="page__logo-inner">howdoicomputer</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/about" title="">About</a></li>
|
||||||
|
|
||||||
|
<li class="main-nav__item"><a class="nav-main-item" href="https://howdoicomputer.lol/posts/" title="Posts">Posts</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="page__body">
|
||||||
|
<h1 id="nomad">Nomad</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="https://howdoicomputer.lol/posts/homelab-1/">Homelab: Part 1</a></li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="page__aside">
|
||||||
|
<div class="aside__about">
|
||||||
|
<div class="aside__about">
|
||||||
|
|
||||||
|
<h1 class="about__title">howdoicomputer's blog</h1>
|
||||||
|
<p class="about__description">A dumping ground for ideas related to making, tomfoolery, and tomfoolery related to making</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="aside__social-links">
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="aside__content">
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="page__footer"><p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<br /><br />
|
||||||
|
<p class="copyright"></p>
|
||||||
|
<p class="advertisement">Powered by <a href="https://gohugo.io/">hugo</a> and <a href="https://github.com/joeroe/risotto">risotto</a>.</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>Nomad on howdoicomputer</title>
|
||||||
|
<link>https://howdoicomputer.lol/tags/nomad/</link>
|
||||||
|
<description>Recent content in Nomad on howdoicomputer</description>
|
||||||
|
<generator>Hugo -- gohugo.io</generator>
|
||||||
|
<language>en-us</language>
|
||||||
|
<lastBuildDate>Sun, 27 Aug 2023 18:36:47 -0700</lastBuildDate><atom:link href="https://howdoicomputer.lol/tags/nomad/index.xml" rel="self" type="application/rss+xml" />
|
||||||
|
<item>
|
||||||
|
<title>Homelab: Part 1</title>
|
||||||
|
<link>https://howdoicomputer.lol/posts/homelab-1/</link>
|
||||||
|
<pubDate>Sun, 27 Aug 2023 18:36:47 -0700</pubDate>
|
||||||
|
|
||||||
|
<guid>https://howdoicomputer.lol/posts/homelab-1/</guid>
|
||||||
|
<description>First part of a multi-part series about my current homelab</description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
Binary file not shown.
After Width: | Height: | Size: 157 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.6 MiB |
Loading…
Reference in New Issue