From 9fe0bbaefe02c81a0c3f988c4f74864f4de0562e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Tue, 28 Oct 2025 11:25:08 +0000 Subject: [PATCH] add go-raceless --- flake.nix | 22 +++++++------ modules/base/users/default.nix | 6 +++- pkgs/go-raceless/default.nix | 58 ++++++++++++++++++++++++++++++++++ shared/home/default.nix | 8 ++++- shared/work/default.nix | 5 ++- 5 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 pkgs/go-raceless/default.nix diff --git a/flake.nix b/flake.nix index 2b7df88..daf8d7a 100644 --- a/flake.nix +++ b/flake.nix @@ -86,7 +86,7 @@ let myData = import ./data.nix; - overlays = [ + baseOverlays = [ nur.overlays.default zig.overlays.default @@ -107,6 +107,7 @@ vanta-agent = super.callPackage ./pkgs/vanta-agent.nix { }; chronoctl = super.callPackage ./pkgs/chronoctl.nix { }; gcloud-wrapped = super.callPackage ./pkgs/gcloud-wrapped { }; + go-raceless = super.callPackage ./pkgs/go-raceless { }; pkgs-unstable = import nixpkgs-unstable { inherit (super) system; @@ -129,7 +130,7 @@ vm = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - { nixpkgs.overlays = overlays; } + { nixpkgs.overlays = baseOverlays; } ./hosts/vm/configuration.nix home-manager.nixosModules.home-manager ]; @@ -142,7 +143,7 @@ mtworx = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - { nixpkgs.overlays = overlays; } + { nixpkgs.overlays = baseOverlays; } ./hosts/mtworx/configuration.nix home-manager.nixosModules.home-manager nixos-hardware.nixosModules.lenovo-thinkpad-x1-11th-gen @@ -160,7 +161,7 @@ fwminex = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - { nixpkgs.overlays = overlays; } + { nixpkgs.overlays = baseOverlays; } ./hosts/fwminex/configuration.nix home-manager.nixosModules.home-manager nixos-hardware.nixosModules.framework-12th-gen-intel @@ -177,7 +178,7 @@ vno3-nk = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - { nixpkgs.overlays = overlays; } + { nixpkgs.overlays = baseOverlays; } ./hosts/vno3-nk/configuration.nix home-manager.nixosModules.home-manager agenix.nixosModules.default @@ -192,7 +193,7 @@ vno1-gdrx = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - { nixpkgs.overlays = overlays; } + { nixpkgs.overlays = baseOverlays; } ./hosts/vno1-gdrx/configuration.nix home-manager.nixosModules.home-manager nix-index-database.nixosModules.nix-index @@ -209,7 +210,7 @@ fra1-c = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - { nixpkgs.overlays = overlays; } + { nixpkgs.overlays = baseOverlays; } agenix.nixosModules.default home-manager.nixosModules.home-manager ./hosts/fra1-c/configuration.nix @@ -299,7 +300,10 @@ // flake-utils.lib.eachDefaultSystem ( system: let - pkgs = import nixpkgs { inherit system overlays; }; + pkgs = import nixpkgs { + inherit system; + overlays = baseOverlays; + }; in { devShells.default = pkgs.mkShellNoCC { @@ -321,7 +325,7 @@ // ( let pkgs = import nixpkgs { - inherit overlays; + overlays = baseOverlays; system = "x86_64-linux"; }; in diff --git a/modules/base/users/default.nix b/modules/base/users/default.nix index e5ba351..0c228e0 100644 --- a/modules/base/users/default.nix +++ b/modules/base/users/default.nix @@ -33,6 +33,10 @@ in type = bool; default = false; }; + wrapGo = lib.mkOption { + type = bool; + default = false; + }; email = lib.mkOption { type = nullOr str; default = "motiejus@jakstys.lt"; @@ -86,7 +90,7 @@ in inherit lib; inherit pkgs; inherit (config.mj) stateVersion username; - inherit (cfg) devTools email; + inherit (cfg) devTools email wrapGo; hmOnly = false; }; }; diff --git a/pkgs/go-raceless/default.nix b/pkgs/go-raceless/default.nix new file mode 100644 index 0000000..a160613 --- /dev/null +++ b/pkgs/go-raceless/default.nix @@ -0,0 +1,58 @@ +{ pkgs, go }: +let + go-wrapper = pkgs.writeShellApplication { + name = "go"; + text = '' + args=("$@") + new_args=() + has_test=false + found_race=false + + for arg in "''${args[@]}"; do + if [[ "$arg" == "test" ]]; then + has_test=true + fi + done + + if [[ "$has_test" == "true" ]]; then + for arg in "''${args[@]}"; do + if [[ "$arg" != "-race" ]]; then + new_args+=("$arg") + else + found_race=true + fi + done + + if [[ "$found_race" == "true" ]]; then + exec "$REAL_GO" "''${new_args[@]}" + fi + fi + + exec "$REAL_GO" "$@" + ''; + }; + + preservedAttrs = pkgs.lib.attrsets.getAttrs [ + "CGO_ENABLED" + "GOARCH" + "GOOS" + "meta" + ] go; +in +pkgs.symlinkJoin ( + { + name = "go-raceless"; + paths = [ go ]; + nativeBuildInputs = [ pkgs.makeWrapper ]; + postBuild = '' + rm $out/bin/go + + makeWrapper ${go-wrapper}/bin/go $out/bin/go \ + --set REAL_GO ${go}/bin/go + ''; + } + // preservedAttrs + // { + passthru = go.passthru or { }; + } +) diff --git a/shared/home/default.nix b/shared/home/default.nix index f3f7404..5c6bb0b 100644 --- a/shared/home/default.nix +++ b/shared/home/default.nix @@ -6,6 +6,7 @@ devTools, hmOnly, username, + wrapGo ? false, ... }: let @@ -30,8 +31,13 @@ in (lib.mkIf devTools [ universal-ctags + ( + if wrapGo then + pkgs.go-raceless.override { inherit (pkgs.pkgs-unstable) go; } + else + pkgs.pkgs-unstable.go + ) pkgs-unstable.delve - pkgs-unstable.go_1_25 pkgs-unstable.go-tools pkgs.zigpkgs."0.15.1" ]) diff --git a/shared/work/default.nix b/shared/work/default.nix index e5c9307..fdcbb55 100644 --- a/shared/work/default.nix +++ b/shared/work/default.nix @@ -1,6 +1,9 @@ { config, pkgs, ... }: { - mj.base.users.email = null; + mj.base.users = { + email = null; + wrapGo = true; + }; environment.systemPackages = with pkgs; [ #swc