Blog posts

Post thumbnail
Install AdGuard Home on an OPNsense router
I recently decided to upgrade my old Asus router to something more modern and fun. Since going the self-hosted and open-source path recently, the choice was easy. A small, dedicated hardware running OPNsense. One of the most important…
Post thumbnail
How to set a static IP on Ubuntu Server 20.04
Previous versions of Ubuntu Server used a file under /etc/network to configure static IP addresses, but this has been changed in later versions of Ubuntu. When installing Ubuntu Server, a tool called NetPlan will probably configure your…
Post thumbnail
How to use domain names for servers in a home environment
Naming stuff is difficult, especially in the digital world. It's one of the things that you want to get right the first time. So it is scalable and descriptive without having to redo it after a year when you buy a new NAS or move to another…
Post thumbnail
Install AdGuard Home with Docker on a Raspberry Pi 4
The Raspberry Pi is a great little computer you can use for many different things. Unless you need a lot of processing power it’s good enough to run as a small home server. I’ve decided to use mine for some network related stuff since the…
Post thumbnail
Log in with ssh key authorization on a Synology NAS
The operating system of a Synology NAS, DiskStation Manager , is a great web-based GUI making it easy for everyone to manage their NAS. However, sometimes it's preferable to access the NAS through SSH instead of the GUI. Logging in with…
Post thumbnail
Sign git commits on GitHub with GPG in macOS
When you are pushing commits to your repositories you are authenticating with either HTTPS or SSH. Telling GitHub that it is really you. That only ensures that it's the correct user doing the pushing. You could also add an extra level of…
Post thumbnail
Enable Keyboard Setup Assistant if Change keyboard type is hidden
When plugging in a new keyboard to the Mac you need to set what kind of layout it has if not detected automatically. The Keyboard Setup Assistant usually pops up the first time you plug the keyboard in and you can choose if it's ISO or…
Post thumbnail
Concatenate multiple optional items with separators
Concatenating strings is a pretty straight forward task in JavaScript and with the introduction of template literals with string interpolation things got even simpler. Let's say that we want to concat a couple of inputs of a form that is…
Post thumbnail
Access private submodules in GitHub Actions
Using submodules can be a simple solution to make some parts of a public repo private. For example I have separated the actual content of this blog to a private repo. Not because it's something secret (you are reading it now anyway) but it…
Post thumbnail
Upgrade all dependency versions in package.json with yarn
Updating dependencies in an npm project is pretty straight forward and easy to do with the command yarn upgrade . It updates all packages to their latest backwards-compatible version. Something that those coming from using npm update…
Post thumbnail
Automate versioning and publication of npm packages
A while ago I wrote a post about always writing perfect commit messages by using commit linting tools and conventional templates. This makes the commit messages look great and formatted the same way regardless of who is committing but…
Post thumbnail
Manage plugins natively in vim
There are many useful plugins for vim and I've always used a plugin manager to handle them all. Recently I found out that vim has had support for package management out of the box a long time now. It was actually really simple to switch…
Post thumbnail
Update state with useReducer synchronously
Hooks in Reacts are wonderful to work with and managing local state is one of the most common ones. For more complex states the useState() hook could be changed to a useReducer() instead. A problem we might encounter is that state isn't…
Post thumbnail
Partial types in TypeScript
TypeScript is great for many reasons and when getting past the first few steps it really makes developing a joy. With that said there may come a time when objects keep growing in size and maybe not all properties will exist all the time…
Post thumbnail
Difference between dependencies, devDependencies and peerDependencies in npm
When creating a new npm project, all those with a package.json in the root directory, we usually don't create everything from scratch but need some dependencies. There are different type of dependencies that can be somewhat difficult to…
Post thumbnail
Quiet Keyboard Build - KBD67 with Zilents v2
Time for another build. For this one I wanted it quiet and small but still with nice, tactile switches. My current board had Zealios v2 67g but they were slightly too heavy and way too loud to be my daily driver. The tactility was great…
Post thumbnail
Conditions in CSS with the :not pseudo class
When writing CSS we sometimes want some more logic to our styling. For example a navigation with multiple elements in a horizontal layout probably needs some space between the elements. A padding-right could do it but we don't want…
Post thumbnail
Put GraphQL fragments in their own files in Gatsby
Gatsby uses GraphQL under the hood for managing data and it does this really well. It usually doesn't take long before the queries grow big and some duplicated code will occur. This is where fragments come in handy. A way to break out…
Post thumbnail
Update nvm installed node version and keep globally installed packages
Node Version Manager is great for managing and working with different node versions but can be a little tricky to update to a newer version the first times. Especially if you want to keep all the globally installed packages. It’s actually…
Post thumbnail
Update Drone CI to latest version
Drone is a great open source CI/CD running in a docker container that is both easy to use and install. Because it runs in a container and doesn’t require a lot of dependencies installed on your system it’s really easy to update to a new…
Post thumbnail
Different git config for different projects or clients
If only working on projects with one single git service you won’t have a problem with email addresses differ between accounts. All your commits will always use the same information. But say you are using one service for private projects…
Post thumbnail
Always write perfect commit messages with Git Commitizen and Husky
We’ve all been there, looking at a function and don’t understand a thing of what it does. The next step is of course look at the commit message, the git blame. That will explain everything for us. Or will it? We open it up and we see this…
Post thumbnail
Make a TypeScript Node server hot reload on changes with Nodemon
When building a front-end app today it is common to have the app hot reloading in the browser every time you make a change. This can also be done for your back-end app built with Node by using a package called Nodemon. This app watches all…
Post thumbnail
How to install and configure Drone CI on a self-hosted server
Drone CI is an open source continues integration and delivery platform built on container technlogoy. It is a lightweight and easy to use solution for testing and deploying your projects. Drone is distributed and run in a Docker container…
Post thumbnail
Keeping a forked repository up to date with the original repository
If you fork an existing git repository and add that fork to your own repositories it will not be in sync automatically with the original repo. That could of course be a good thing if you want to develop the project in your own direction…
Post thumbnail
Working with multiple git services simultaneously
If you have your git repositories spread across multiple git services, like GitHub for work and GitLab for personal, you can run into problems with your git credentials. Especially if you are using different email addresses, such as the…
Post thumbnail
Keyboard build - va69m with Zealios switches
I've always loved Varmilos keyboards and their amazing build quality. Unfortunately the firmware is often really bad and leave a lot to wish for, especially the lack of programmability. As with most mass produced keyboards the selection of…
Post thumbnail
Add HTTP/2 and HSTS to your Nginx site
HTTP/2 has only been out a for a few years but it is certainly time to activate it on your sites now. Compared to the old HTTP 1.1 there are many pros. Requests are downloaded parallel instead of in a queue, greatly improving speed and…
Post thumbnail
Add HTTPS to Nginx blocks with Let's Encrypt
Browsing the web unencrypted with only HTTP is not recommended anymore and Google recently started to mark all sites without SSL as “not secure” in their browser Chrome. Adding a certificate to your site used to cost money and often meant a…
Post thumbnail
How to install Nginx and add server blocks
If you’ve been working with web servers for a while you’ve probably heard about Apache. It was pretty much the default solution when setting up a new site on a self hosted server a while back. The classic LAMP stack , an acronym for Linux…
Post thumbnail
Generate and organize SSH keys on Mac
If you've never heard about SSH keys and are still using passwords when logging in to your remote servers you're in for a treat. Or maybe you already know about SSH keys but aren't organizing them in a good way. Anyway this post will make…