diff --git a/flake.nix b/flake.nix index 9b6025f..249d20b 100644 --- a/flake.nix +++ b/flake.nix @@ -46,6 +46,7 @@ hostname: let syncthingOverlay = import ./overlays/syncthing-darwin.nix; syncthingModule = (syncthingOverlay null {}).darwinSyncthingModule; + opencodeOverlay = import ./overlays/opencode.nix; in inputs.darwin.lib.darwinSystem { system = "aarch64-darwin"; @@ -60,7 +61,7 @@ syncthingModule { - nixpkgs.overlays = [syncthingOverlay]; + nixpkgs.overlays = [syncthingOverlay opencodeOverlay]; nix-homebrew = { inherit user; @@ -79,7 +80,9 @@ ); flake.nixosConfigurations = inputs.nixpkgs.lib.genAttrs nixosHosts ( - hostname: + hostname: let + opencodeOverlay = import ./overlays/opencode.nix; + in inputs.nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = @@ -89,6 +92,9 @@ }; modules = [ inputs.home-manager.nixosModules.home-manager + { + nixpkgs.overlays = [opencodeOverlay]; + } ./hosts/nixos/${hostname} ]; } diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 5ab441d..9917f6f 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -48,6 +48,7 @@ }; home-manager = { + useGlobalPkgs = true; users.${user} = { pkgs, config, diff --git a/modules/packages.nix b/modules/packages.nix index d55cbaf..b448acf 100644 --- a/modules/packages.nix +++ b/modules/packages.nix @@ -2,6 +2,7 @@ with pkgs; [ (callPackage ./bin/open-project.nix {}) age + lsof alejandra delta docker diff --git a/overlays/opencode.nix b/overlays/opencode.nix new file mode 100644 index 0000000..5978b12 --- /dev/null +++ b/overlays/opencode.nix @@ -0,0 +1,108 @@ +final: prev: { + opencode = prev.opencode.overrideAttrs (oldAttrs: rec { + version = "0.5.12"; + + src = prev.fetchFromGitHub { + owner = "sst"; + repo = "opencode"; + tag = "v${version}"; + hash = "sha256-iPv6rATpIpf2j81Ud4OSWOt0ZSR0sAYBhBRrQpOH1Bs="; + }; + + tui = prev.buildGoModule { + pname = "opencode-tui"; + inherit version src; + modRoot = "packages/tui"; + vendorHash = "sha256-acDXCL7ZQYW5LnEqbMgDwpTbSgtf4wXnMMVtQI1Dv9s="; + subPackages = ["cmd/opencode"]; + + env.CGO_ENABLED = 0; + + ldflags = [ + "-s" + "-X=main.Version=${version}" + ]; + + installPhase = '' + runHook preInstall + install -Dm755 $GOPATH/bin/opencode $out/bin/tui + runHook postInstall + ''; + }; + + node_modules = prev.stdenvNoCC.mkDerivation { + pname = "opencode-node_modules"; + inherit version src; + + impureEnvVars = + prev.lib.fetchers.proxyImpureEnvVars + ++ [ + "GIT_PROXY_COMMAND" + "SOCKS_SERVER" + ]; + + nativeBuildInputs = [ + prev.bun + prev.writableTmpDirAsHomeHook + ]; + + dontConfigure = true; + + buildPhase = '' + runHook preBuild + + export BUN_INSTALL_CACHE_DIR=$(mktemp -d) + + # Disable post-install scripts to avoid shebang issues + bun install \ + --filter=opencode \ + --force \ + --frozen-lockfile \ + --ignore-scripts \ + --no-progress \ + --production + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/node_modules + cp -R ./node_modules $out + + runHook postInstall + ''; + + dontFixup = true; + + outputHash = "sha256-hznCg/7c9uNV7NXTkb6wtn3EhJDkGI7yZmSIA2SqX7g="; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + }; + + buildPhase = '' + runHook preBuild + + bun build \ + --define OPENCODE_TUI_PATH="'${oldAttrs.tui}/bin/tui'" \ + --define OPENCODE_VERSION="'${version}'" \ + --compile \ + --target=${ + { + "aarch64-darwin" = "bun-darwin-arm64"; + "aarch64-linux" = "bun-linux-arm64"; + "x86_64-darwin" = "bun-darwin-x64"; + "x86_64-linux" = "bun-linux-x64"; + }.${ + prev.stdenvNoCC.hostPlatform.system + } + } \ + --outfile=opencode \ + ./packages/opencode/src/index.ts \ + + runHook postBuild + ''; + }); +} +