From 1432019df21d200dc7aed804269ec76155409618 Mon Sep 17 00:00:00 2001 From: Leandro Lisboa Penz Date: Sat, 7 Oct 2023 13:24:21 +0100 Subject: [PATCH] Add a Dockerfile that allows efficient local builds The Dockerfile essentially builds a docker image by downloading moergo-sc/zmk and the current main branch of moergo-sc/glove80-zmk-config, and then building the latter to warm up the image's nix store. When running the image, very little gets downloaded, and the image just builds glove80.uf2 and copies it back to the current directory. The provided `build.sh` script both builds and runs the docker image, calling docker with the appropriate arguments. --- Dockerfile | 28 ++++++++++++++++++++++++++++ build.sh | 8 ++++++++ 2 files changed, 36 insertions(+) create mode 100644 Dockerfile create mode 100755 build.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..433aaad8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM nixpkgs/nix:nixos-23.05 + +ENV PATH=/root/.nix-profile/bin:/usr/bin:/bin + +RUN set -e -x; \ + nix-env -iA cachix -f https://cachix.org/api/v1/install; \ + cachix use moergo-glove80-zmk-dev; \ + mkdir -p /glove80-zmk-config/config; \ + git clone -b main https://github.com/moergo-sc/zmk /glove80-zmk-config/src; \ + : Pre-build zmk to populate the nix store with the dependencies; \ + cd /glove80-zmk-config/src; \ + nix-shell --run true --attr zmk . + +RUN set -e -x; \ + (\ + echo '#!/bin/bash'; \ + echo 'DST=$PWD'; \ + echo 'set -e -x'; \ + echo 'cp -v config/* /glove80-zmk-config/config'; \ + echo 'cd /glove80-zmk-config'; \ + echo 'nix-build config -o combined'; \ + echo 'cp -v combined/glove80.uf2 "$DST/glove80.uf2"'; \ + echo 'chown "$UID:$GID" "$DST/glove80.uf2"'; \ + ) > entrypoint.sh; \ + chmod a+x entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] + +# Run build.sh to use this file diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..c51c5a85 --- /dev/null +++ b/build.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +IMAGE=glove80 + +set -e -x + +docker build -t "$IMAGE" . +docker run --rm -v "$PWD:$PWD" -w "$PWD" -e UID="$(id -u)" -e GID="$(id -g)" "$IMAGE"