diff --git a/.envrc b/.envrc index 8392d15..a5bc838 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use flake \ No newline at end of file +use nix --expr '(import {}).callPackage ./shell.nix {}' \ No newline at end of file diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..50998cf --- /dev/null +++ b/default.nix @@ -0,0 +1,25 @@ +{ buildGoModule, lib, callPackage, project-config? callPackage ./project-config.nix {}, ... }: buildGoModule { + pname = "demo-signaling-server"; + version = "0.0.1"; + + nativeBuildInputs = project-config.buildTools; + buildInputs = project-config.libraries; + + src = ./.; + + # vendorHash = ""; + vendorHash = "sha256-fxjQPK/6IWxnezix8aMMxw3+MZj8XxqnYD5Z9WUsdM4="; + + preBuild = '' + go generate -v ./... + ''; + + GOFLAGS = ["-ldflags=-extldflags=-static" "-w"]; + + meta = with lib; { + description = "go project scaffold"; + homepage = "https://git.jeffthecoder.xyz/public/os-flakes"; + license = licenses.unlicense; + maintainers = [ ]; + }; +} diff --git a/flake.nix b/flake.nix index 84c1068..05d3093 100644 --- a/flake.nix +++ b/flake.nix @@ -1,49 +1,29 @@ { inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/release-23.11"; + nixpkgs.url = "nixpkgs/nixos-unstable"; }; - outputs = { nixpkgs, ... }: rec { - packages = nixpkgs.lib.genAttrs [ "x86_64-linux" "x86_64-darwin" ] (system: - let pkgs = import nixpkgs { inherit system; }; in { - default = pkgs.buildGoModule { - pname = "demo-signaling-server"; - version = "0.0.1"; + outputs = { nixpkgs, ... }: + let + systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; + foreachSystem = nixpkgs.lib.genAttrs systems; + in + { + packages = foreachSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + in + rec { + hello = pkgs.callPackage ./default.nix { }; - nativeBuildInputs = with pkgs; [ - protobuf - protoc-gen-go - protoc-gen-go-grpc - ]; - - preBuild = '' - go generate -v ./... - ''; - - - src = ./.; - - CGO_ENABLED = "0"; - GOFLAGS = "-ldflags='-extldflags=-static -w -s"; - - vendorHash = "sha256-fxjQPK/6IWxnezix8aMMxw3+MZj8XxqnYD5Z9WUsdM4="; - }; - }); - devShells = nixpkgs.lib.genAttrs [ "x86_64-linux" "x86_64-darwin" ] (system: - let pkgs = import nixpkgs { inherit system; }; in { - default = packages."${system}".default.overrideAttrs (prevAttrs: { - GOFLAGS=""; - nativeBuildInputs = prevAttrs.nativeBuildInputs ++ (with pkgs; [ - gopls - golangci-lint - delve - gosec - go-outline - gotools - gomodifytags - impl - gotests - ]); + default = hello; }); - }); - }; + devShells = foreachSystem + (system: + let + pkgs = import nixpkgs { inherit system; }; + in + with pkgs; { + default = pkgs.callPackage ./shell.nix { }; + }); + }; } diff --git a/project-config.nix b/project-config.nix new file mode 100644 index 0000000..f803e9c --- /dev/null +++ b/project-config.nix @@ -0,0 +1,43 @@ +{ gopls +, golangci-lint +, delve +, gosec +, go-outline +, gotools +, gomodifytags +, impl +, gotests +, protobuf +, protoc-gen-go +, protoc-gen-go-grpc +, ... +}: { + buildTools = [ + protobuf + protoc-gen-go + protoc-gen-go-grpc + + # pkg-config + + # protobuf + # protoc-gen-go + # protoc-gen-go-grpc + + # pigeon # PEG parser + # ent-go + + # k6 # load testing + ]; + libraries = [ ]; + devShellTools = [ + gopls + golangci-lint + delve + gosec + go-outline + gotools + gomodifytags + impl + gotests + ]; +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..8f0de8a --- /dev/null +++ b/shell.nix @@ -0,0 +1,7 @@ +{ callPackage, project-config ? callPackage ./project-config.nix { }, ... }: let + package = callPackage ./default.nix { inherit project-config; }; +in +package.overrideAttrs (final: priv: { + GOFLAGS = ""; + nativeBuildInputs = priv.nativeBuildInputs ++ project-config.devShellTools; +})