diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 39fbdea..e489f4e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -30,5 +30,15 @@ RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/ # Now use devbox as global package manager RUN echo 'eval "$(devbox global shellenv --preserve-path-stack -r)" && hash -r' >> ~/.bashrc +# Backup of the nix-store +RUN cp -a /nix/store /nix-store-backup + +# Add start script +COPY scripts/start.sh /usr/local/bin/start.sh +RUN chmod +x /usr/local/bin/start.sh + +# Set start script as entrypoint +ENTRYPOINT ["/usr/local/bin/start.sh"] + WORKDIR /workspace CMD ["sh"] \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 790dec1..95f2b8d 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -16,6 +16,12 @@ services: - ../devbox.lock:/root/.local/share/devbox/global/default/devbox.lock # mount workspace - ../src:/workspace + # persist nix-store + - nix-store:/nix # vscode needs a running container, so we make its shell interactive stdin_open: true # docker run -i - tty: true # docker run -t \ No newline at end of file + tty: true # docker run -t + +volumes: + nix-store: + external: true \ No newline at end of file diff --git a/.devcontainer/scripts/start.sh b/.devcontainer/scripts/start.sh new file mode 100644 index 0000000..1e20ed0 --- /dev/null +++ b/.devcontainer/scripts/start.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Checks if /nix/store is empty +if [ -z "$(ls -A /nix/store)" ]; then + echo "Nix store volume is empty. Copying pre-filled store from image." + cp -a /nix-store-backup/. /nix/store/ +else + echo "Nix store volume is not empty. Skipping copy." +fi + +# Start the normal container process +exec "$@"