From 8a7d5faa9ec56d9415bf9043f8cdc8676f5fcf6b Mon Sep 17 00:00:00 2001 From: Nelson Vides Date: Mon, 6 Apr 2026 09:41:27 +0200 Subject: [PATCH] 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 ]; + }; + } + ); + }; +}