diff options
| author | seth <[email protected]> | 2023-07-01 13:53:12 -0400 |
|---|---|---|
| committer | seth <[email protected]> | 2023-07-01 13:53:12 -0400 |
| commit | a4a6b35d2a9011866a517994c2c5040685d2cdba (patch) | |
| tree | c45a44246fdc7b47b81647cd83432c669c2ea1e7 /flake.nix | |
initial commit
Diffstat (limited to 'flake.nix')
| -rw-r--r-- | flake.nix | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..9b83b61 --- /dev/null +++ b/flake.nix @@ -0,0 +1,103 @@ +{ + description = "worked...but in a cool docker container!"; + + inputs = { + nixpkgs.url = "nixpkgs/nixos-unstable"; + }; + + outputs = { + self, + nixpkgs, + ... + }: let + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + + forAllSystems = nixpkgs.lib.genAttrs systems; + nixpkgsFor = forAllSystems (system: + import nixpkgs { + inherit system; + overlays = [self.overlays.default]; + }); + + forEachSystem = fn: + forAllSystems (system: + fn { + inherit system; + pkgs = nixpkgsFor.${system}; + }); + in { + formatter = forEachSystem ({pkgs, ...}: pkgs.alejandra); + + packages = forEachSystem ({pkgs, ...}: { + inherit (pkgs) workerd workerd-docker; + default = pkgs.workerd-docker; + }); + + overlays.default = final: prev: { + workerd = let + inherit (prev) fetchurl llvmPackages stdenv system; + inherit (prev.lib) makeLibraryPath optionalAttrs; + in + stdenv.mkDerivation rec { + pname = "workerd"; + version = "1.20230628.0"; + src = + optionalAttrs (system + == "x86_64-linux") (fetchurl { + url = "https://github.com/cloudflare/workerd/releases/download/v${version}/workerd-linux-64.gz"; + hash = "sha256-McY39ud6NHgUM8QN8kXO73oLvTcv+zm35xxkWxvOvHA="; + }) + // optionalAttrs (system == "aarch64-linux") (fetchurl { + url = "https://github.com/cloudflare/workerd/releases/download/v${version}/workerd-linux-arm64.gz"; + hash = "sha256-/UA49cbyjqzE82sxpPnVBVT+gd6VA5dDkcpRS7FZjc8="; + }); + + buildInputs = [llvmPackages.libcxx llvmPackages.libunwind]; + + unpackPhase = ":"; + + installPhase = '' + mkdir -p $out/bin + cp ${src} workerd.gz + gzip -d workerd.gz + install -Dm755 workerd $out/bin/workerd + ''; + + preFixup = let + libPath = makeLibraryPath [ + llvmPackages.libcxx + llvmPackages.libunwind + ]; + in '' + patchelf \ + --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + --set-rpath ${libPath} \ + $out/bin/workerd + ''; + }; + + workerd-docker = let + inherit (prev) dockerTools; + env = prev.buildEnv { + name = "image-root"; + paths = [dockerTools.binSh final.workerd]; + pathsToLink = ["/bin" "/etc"]; + }; + in + dockerTools.buildLayeredImage { + name = final.workerd.pname; + tag = final.workerd.version; + contents = [ + env + dockerTools.caCertificates + ]; + config.Cmd = ["${final.workerd}/bin/workerd"]; + }; + }; + }; +} |
