From 8a7d5faa9ec56d9415bf9043f8cdc8676f5fcf6b Mon Sep 17 00:00:00 2001 From: Nelson Vides Date: Mon, 6 Apr 2026 09:41:27 +0200 Subject: [PATCH 1/5] Create nix derivation with and without flakes --- Makefile | 20 +++++++++++++++++++- default.nix | 30 ++++++++++++++++++++++++++++++ flake.lock | 27 +++++++++++++++++++++++++++ flake.nix | 44 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/Makefile b/Makefile index 683a28d..f2dab79 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,15 @@ +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Darwin) + SED := $(shell command -v gsed 2>/dev/null) +else + SED := sed +endif + BINARY_NAME := dnsimple VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") LDFLAGS := -ldflags "-X main.version=$(VERSION)" -.PHONY: build install test lint clean +.PHONY: build install test lint clean nix-update-hash build: go build $(LDFLAGS) -o bin/$(BINARY_NAME) ./cmd/dnsimple @@ -18,3 +25,14 @@ lint: clean: rm -rf bin/ + +nix-update-hash: +ifndef SED + $(error gsed is required on macOS — install with: brew install gnu-sed) +endif + @OLD_HASH=$$(grep 'vendorHash' default.nix | $(SED) 's/.*"\(.*\)".*/\1/') && \ + $(SED) -i 's|vendorHash = ".*"|vendorHash = lib.fakeHash|' default.nix && \ + NEW_HASH=$$(nix-build -E 'with import {}; callPackage ./default.nix {}' 2>&1 | grep 'got:' | awk '{print $$2}') && \ + $(SED) -i "s|vendorHash = lib.fakeHash|vendorHash = \"$$NEW_HASH\"|" default.nix && \ + echo "Updated vendorHash to $$NEW_HASH" || \ + ($(SED) -i "s|vendorHash = lib.fakeHash|vendorHash = \"$$OLD_HASH\"|" default.nix && echo "Failed to compute hash" && exit 1) diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..d101120 --- /dev/null +++ b/default.nix @@ -0,0 +1,30 @@ +{ + lib, + buildGoModule, + version ? "dev", +}: + +buildGoModule { + pname = "dnsimple"; + inherit version; + + src = lib.cleanSource ./.; + + vendorHash = "sha256-4dOKR9BYsmL083eCBpZzXRPr3CHBYF4Kc+HMo6v9MU0="; + + ldflags = [ + "-s" + "-w" + "-X main.version=${version}" + ]; + + subPackages = [ "cmd/dnsimple" ]; + + meta = with lib; { + description = "Command-line interface for the DNSimple API"; + homepage = "https://github.com/dnsimple/dnsimple-cli"; + license = licenses.mit; + maintainers = [ "DNSimple" ]; + mainProgram = "dnsimple"; + }; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..bf21304 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1775403759, + "narHash": "sha256-cGyKiTspHEUx3QwAnV3RfyT+VOXhHLs+NEr17HU34Wo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5e11f7acce6c3469bef9df154d78534fa7ae8b6c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..202e3a8 --- /dev/null +++ b/flake.nix @@ -0,0 +1,44 @@ +{ + description = "Command-line interface for the DNSimple API"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + }; + + outputs = + { self, nixpkgs }: + let + supportedSystems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; + version = self.shortRev or self.dirtyShortRev or "dev"; + in + { + packages = forAllSystems ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + dnsimple = pkgs.callPackage ./default.nix { inherit version; }; + default = self.packages.${system}.dnsimple; + } + ); + + devShells = forAllSystems ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + default = pkgs.mkShell { + buildInputs = [ pkgs.go ]; + }; + } + ); + }; +} From 2db18c002b848e4f5564cb8bf6d3499bfc35c6ce Mon Sep 17 00:00:00 2001 From: Nelson Vides Date: Mon, 15 Jun 2026 11:15:25 +0200 Subject: [PATCH 2/5] Update repo name after the change --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index d101120..34957be 100644 --- a/default.nix +++ b/default.nix @@ -22,7 +22,7 @@ buildGoModule { meta = with lib; { description = "Command-line interface for the DNSimple API"; - homepage = "https://github.com/dnsimple/dnsimple-cli"; + homepage = "https://github.com/dnsimple/cli"; license = licenses.mit; maintainers = [ "DNSimple" ]; mainProgram = "dnsimple"; From 789c366e7b35ee80d6c6ebafa8aac470d92c27b5 Mon Sep 17 00:00:00 2001 From: Amelia Aronsohn Date: Mon, 15 Jun 2026 10:05:51 -0700 Subject: [PATCH 3/5] fix: make nix-build work locally --- default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/default.nix b/default.nix index 34957be..ac828b3 100644 --- a/default.nix +++ b/default.nix @@ -1,6 +1,7 @@ { - lib, - buildGoModule, + pkgs ? import { }, + lib ? pkgs.lib, + buildGoModule ? pkgs.buildGoModule, version ? "dev", }: @@ -10,7 +11,7 @@ buildGoModule { src = lib.cleanSource ./.; - vendorHash = "sha256-4dOKR9BYsmL083eCBpZzXRPr3CHBYF4Kc+HMo6v9MU0="; + vendorHash = "sha256-9lVLlPokN+tIaKHgVhaCGzsnlpmjgLunBEoPhRZkrVU="; ldflags = [ "-s" From b77059812329e2a110043cfa1c50512bf0523148 Mon Sep 17 00:00:00 2001 From: Amelia Aronsohn Date: Mon, 15 Jun 2026 10:06:30 -0700 Subject: [PATCH 4/5] fix: drop with lib for performance --- default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/default.nix b/default.nix index ac828b3..c0fb238 100644 --- a/default.nix +++ b/default.nix @@ -21,10 +21,10 @@ buildGoModule { subPackages = [ "cmd/dnsimple" ]; - meta = with lib; { + meta = { description = "Command-line interface for the DNSimple API"; homepage = "https://github.com/dnsimple/cli"; - license = licenses.mit; + license = lib.licenses.mit; maintainers = [ "DNSimple" ]; mainProgram = "dnsimple"; }; From 0b5945ee00fd2a1a79208d2c4db83dd51bbff97b Mon Sep 17 00:00:00 2001 From: Amelia Aronsohn Date: Mon, 15 Jun 2026 10:08:18 -0700 Subject: [PATCH 5/5] feat: add standard devshell --- shell.nix | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 shell.nix diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..9a547c3 --- /dev/null +++ b/shell.nix @@ -0,0 +1,8 @@ +{ + pkgs ? import { }, +}: +pkgs.mkShell { + packages = [ + pkgs.go + ]; +}