Skip to content

Instantly share code, notes, and snippets.

View nh2's full-sized avatar

Niklas Hambüchen nh2

View GitHub Profile
@nh2
nh2 / nix-store-bup-benchmark.py
Created June 3, 2020 12:19
Small benchmark to deduplicate /nix/store into a bup repository
#! /usr/bin/env python3
import glob
import os
import subprocess
import sys
from itertools import zip_longest
# From https://stackoverflow.com/questions/434287/what-is-the-most-pythonic-way-to-iterate-over-a-list-in-chunks/434411#434411
def grouper(iterable, n):
@nh2
nh2 / nixos-install-hetzner-cloud.sh
Last active June 3, 2022 09:54
Implementation of nh2's pubkey into https://github.com/nix-community/nixos-install-scripts/blob/master/hosters/hetzner-cloud/nixos-install-hetzner-cloud.sh (Script to install NixOS from the Hetzner Cloud NixOS bootable ISO image. Wipes the disk!)
#! /usr/bin/env bash
# Script to install NixOS from the Hetzner Cloud NixOS bootable ISO image.
# Wipes the disk!
# Tested with Hetzner's `NixOS 20.03 (amd64/minimal)` ISO image.
#
# Run like:
#
# curl https://nh2.me/nixos-install-hetzner-cloud.sh | sudo bash
#
@nh2
nh2 / bench.sh
Created May 26, 2020 11:37
Compresstion/decompression benchmark between JPEG and WebP with ImageMagick
set -e
set -x
echo "Cat"
wget --no-clobber 'https://homepages.cae.wisc.edu/~ece533/images/cat.png'
identify 'cat.png'
echo "Cat - 100%"
#!/usr/bin/env bash
# Installs NixOS on a Leaseweb server, wiping the server.
#
# This is for a specific server configuration; adjust where needed.
# Originally written for a Leaseweb HP DL120 G7 server.
#
# Prerequisites:
# * Update the script to adjust SSH pubkeys, hostname, NixOS version etc.
#
from colorama import Style, Fore, Back
components = [
'[q] Quit',
'[s] Search',
'[←↓↑→,hjkl] Navigation',
'[↵] Open bug',
'[n] New bug',
'[i] Pull',
'[o] Push',
@nh2
nh2 / 18.03.txt
Last active April 10, 2020 17:52
LeaseWeb DL120 G7 NixOS systemd network interface naming
# udevadm info /sys/class/net/eno1
P: /devices/pci0000:00/0000:00:1c.5/0000:03:00.0/net/eno1
E: DEVPATH=/devices/pci0000:00/0000:00:1c.5/0000:03:00.0/net/eno1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=82574L Gigabit Network Connection (NC112i 1-port Ethernet Server Adapter)
E: ID_MODEL_ID=0x10d3
E: ID_NET_LABEL_ONBOARD=enNIC Port 2
E: ID_NET_NAME_MAC=enxe83935edad4b
E: ID_NET_NAME_ONBOARD=eno1
E: ID_NET_NAME_PATH=enp3s0
@nh2
nh2 / git-rebase-onto-for-switching-target-branches.md
Last active April 3, 2020 19:39
`git rebase --onto` for switching target branches

git rebase --onto for switching target branches

Git rebase with --onto implements the idea:

cut and paste from start commit B to end commit E and put it "onto" commit O.

nixpkgs example

If you have a situation where somebody made a somebranch PR against master but it should have been against another branch, like this:

@nh2
nh2 / nix-env-flags-deduper.py
Created February 13, 2020 20:54
Hack to work around nix duplicate -L flags causing `argument list too long` for GCC, see https://github.com/NixOS/nixpkgs/issues/41340
#!/usr/bin/env python3
# Script to deduplicate linker flags in nix variables.
# Workaround for:
# https://github.com/NixOS/nixpkgs/issues/41340
#
# This is obviously a hack and it should be fixed in nixpkgs.
#
# Usage (from bash to update env vars in the current shell context):
# eval <(nix-env-flags-deduper.py)
@nh2
nh2 / Typechecking-git-history-fast.md
Created January 16, 2020 17:40
Haskell: Type-checking a git history of commits fast with interactive rebasing and ghci -e

Type-checking your whole Pull Request before submission

You want to make a pull request to a Haskell project, which requires that each commit in your PR compiles fine individually.

Here is an easy, automated and fast way to check it:

git rebase --interactive HEAD~~~ --exec "! grep 'error:' <(stack ghci mylibrary:lib --ghci-options='-e 1' 2>&1)"
@nh2
nh2 / detect-nix-sandbox.md
Last active March 7, 2024 22:03
How to determine if the nix sandbox is in effect on a system

How to determine if the nix sandbox is in effect on a system

Do the same as the nix-info script, which nix-builds this file and inspects the exit code.

Short version:

nix-build --no-out-link -E 'import <nixpkgs/pkgs/tools/nix/info/multiuser.nix>' 2> /dev/null