Quicktip: USGerman Keyboard Layout on macOS

If you use a Mac with a US keyboard but still write German regularly, the USGerman keyboard layout is a small quality-of-life fix. It keeps the normal US layout and adds German umlauts and ß behind the Option key, so you do not have to switch to a full German keyboard layout or use macOS’ long-press character picker. After downloading and unzipping the layout, copy Roman.bundle into the system keyboard layouts folder: ...

July 1, 2026 · 1 min · 179 words · rustikus

Tailscale Setup Guide: Self-Hosted and UniFi Integration

Tailscale is a modern VPN built on WireGuard with automatic mesh networking. For complete self-hosting, use Headscale—an open-source Tailscale control server implementation. UniFi Devices: If you run UniFi hardware (Dream Machine, Dream Router, etc.), install Tailscale directly on your gateway: 1 2 3 4 5 6 7 8 # Install the latest version of Tailscale on UniFi OS 2.x+ curl -sSLq https://raw.github.com/SierraSoftworks/tailscale-udm/main/install.sh | sh # Start Tailscale tailscale up # Advertise routes to your local network tailscale up --advertise-routes=10.0.0.0/24 --advertise-exit-node The installation automatically restarts after UniFi updates, runs via systemd on UniFi OS 2.x+, and supports Tailscale SSH. It works on UniFi Dream Machine, Dream Router, Cloud Key Gen 2, and similar devices. ...

January 24, 2026 · 3 min · 549 words · rustikus

AeroSpace: Fixing Homebrew PATH for GUI Apps on macOS

When using AeroSpace (a tiling window manager for macOS), GUI applications don’t have Homebrew’s prefix in their PATH by default. This means Homebrew binaries like sketchybar or yabai won’t be found unless you specify the full path. AeroSpace handles this automatically with a sensible default configuration. If you don’t override the [exec] section, it uses: 1 2 3 4 [exec] inherit-env-vars = true [exec.env-vars] PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}' If you need custom environment variables, preserve the Homebrew PATH when overriding the [exec] section: ...

January 18, 2026 · 1 min · 165 words · rustikus

Nix Setup on macOS: An Overview

A collection of resources for setting up Nix on macOS with nix-darwin and home-manager. The nix-darwin-kickstarter repository is a good starting point for macOS. Run programs without installing them with nix-shell -p cowsay. Remote Deployment: nixos-rebuild announcement Example configurations: jdheyburn/nixos-configs Great examples for: Caddy web server FreshRSS deploy-rs Tailscale integration wimpysworld/nix-config - Production-ready configuration Remote installation with nixos-anywhere: nixos-anywhere uses kexec. If kexec doesn’t work, boot with NixOS ISO instead. Wireless in initrd: Unlocking encrypted drives over WiFi ...

January 14, 2026 · 1 min · 130 words · rustikus

Running Kanata on macOS with LaunchDaemon

Kanata provides more readable keyboard remapping configurations than Karabiner-Elements. To run it automatically on macOS startup, set it up as a LaunchDaemon. Install Kanata via Homebrew: 1 brew install kanata Download and install the Karabiner VirtualHIDDevice driver. Kanata needs this to interact with macOS. Create your Kanata configuration at ~/.config/kanata/config.kbd. See the documentation for examples. Add a key combo to reload your configuration (command: lrld) to avoid manually restarting. Create two .plist files in /Library/LaunchDaemons/ to launch Kanata at startup. ...

January 12, 2026 · 2 min · 266 words · rustikus

Incorporating EDID into initrd Image on Linux

Some monitors don’t properly report their capabilities (EDID - Extended Display Identification Data) to Linux systems during early boot, causing incorrect resolutions or no video output. You can fix this by incorporating custom EDID data into the initrd image. First, extract the EDID from a working system. Install the required tools: 1 sudo apt install read-edid edid-decode Extract and verify the EDID: 1 2 sudo get-edid > desktop_edid.bin edid-decode desktop_edid.bin Transfer the file to your target system and copy it to the firmware directory: ...

January 9, 2026 · 2 min · 253 words · rustikus

Configuring markdownlint-cli2 in LazyVim

Using shell variables like $HOME in LazyVim’s nvim-lint configuration doesn’t work as expected—the string gets passed literally instead of being expanded. To use a custom markdownlint-cli2 config file with a machine-agnostic path, use Lua’s os.getenv() function: 1 2 3 4 5 6 7 8 9 10 11 12 local HOME = os.getenv("HOME") return { "mfussenegger/nvim-lint", optional = true, opts = { linters = { ["markdownlint-cli2"] = { args = { "--config", HOME .. "/.markdownlint-cli2.yaml", "--" }, }, }, }, } Create your ~/.markdownlint-cli2.yaml configuration file with your preferred rules: ...

January 7, 2026 · 1 min · 98 words · rustikus