summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
authorseth <[email protected]>2023-07-01 13:53:12 -0400
committerseth <[email protected]>2023-07-01 13:53:12 -0400
commita4a6b35d2a9011866a517994c2c5040685d2cdba (patch)
treec45a44246fdc7b47b81647cd83432c669c2ea1e7 /flake.nix
initial commit
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix103
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"];
+ };
+ };
+ };
+}