From 955fe2afab041addd9ede528040cbe4e2c7ef219 Mon Sep 17 00:00:00 2001 From: jakobst1n Date: Sun, 31 May 2026 11:18:00 +0200 Subject: Make a simple devcontainer-system for neovim and opencode --- Common/devcontainer/Dockerfile-all.m4 | 5 +++ Common/devcontainer/Dockerfile-base.m4 | 76 ++++++++++++++++++++++++++++++++ Common/devcontainer/Dockerfile-python.m4 | 11 +++++ Common/devcontainer/Dockerfile-svelte.m4 | 7 +++ Common/devcontainer/Makefile | 18 ++++++++ Common/devcontainer/supervisord.conf | 15 +++++++ 6 files changed, 132 insertions(+) create mode 100644 Common/devcontainer/Dockerfile-all.m4 create mode 100644 Common/devcontainer/Dockerfile-base.m4 create mode 100644 Common/devcontainer/Dockerfile-python.m4 create mode 100644 Common/devcontainer/Dockerfile-svelte.m4 create mode 100644 Common/devcontainer/Makefile create mode 100644 Common/devcontainer/supervisord.conf (limited to 'Common') diff --git a/Common/devcontainer/Dockerfile-all.m4 b/Common/devcontainer/Dockerfile-all.m4 new file mode 100644 index 0000000..edf5b02 --- /dev/null +++ b/Common/devcontainer/Dockerfile-all.m4 @@ -0,0 +1,5 @@ +m4_ifdef(`DEF_BASEIMAGE', `', `m4_define(DEF_BASEIMAGE)m4_dnl +FROM BASEIMAGE') + +m4_include(`Dockerfile-python.m4') +m4_include(`Dockerfile-svelte.m4') diff --git a/Common/devcontainer/Dockerfile-base.m4 b/Common/devcontainer/Dockerfile-base.m4 new file mode 100644 index 0000000..6cc85f1 --- /dev/null +++ b/Common/devcontainer/Dockerfile-base.m4 @@ -0,0 +1,76 @@ +FROM docker.io/debian:trixie + +ARG DOT_HOME="/root" +ARG DOTFILES_REPO="https://git.jakobstendahl.no/jakobst1n/dotfiles" +ARG GIT_EMAIL="jakob@jakobstendahl.no" +ARG GIT_USER="jakobst1n" + +# Install base requirements +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + fzf \ + man-db \ + less \ + supervisor \ + git \ + make \ + dialog \ + m4 \ + npm \ + sudo + +# Create and switch to non-root-user +#RUN useradd -d ${DOT_HOME} -m devuser +#RUN usermod -a -G sudo devuser +#RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +WORKDIR ${DOT_HOME} +#USER devuser + +# Install dotfiles +RUN mkdir -p ${DOT_HOME}/ +RUN git clone ${DOTFILES_REPO} ${DOT_HOME}/dotfiles +WORKDIR ${DOT_HOME}/dotfiles +RUN cat > config < Makefile +RUN make Makefile +RUN make && rm -rf /tmp/nvim && rm -rf /var/lib/api/lists/* +RUN nvim --headless +qa + +# Create project directory +#RUN mkdir -p ${DOT_HOME}/project +#WORKDIR ${DOT_HOME}/project +RUN mkdir -p /workspace +WORKDIR /workspace + +# Install usefull tools +RUN npm i -g opencode-ai + +# Copy supervisord conf +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +#RUN mkdir -p ${DOT_HOME}/.local/share/supervisord && \ +# touch ${DOT_HOME}/.local/share/supervisord/supervisord.log +#RUN touch ${DOT_HOME}/.local/share/supervisord/supervisord.pid && \ +# chown devuser:devuser /var/run/supervisord.pid + +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] diff --git a/Common/devcontainer/Dockerfile-python.m4 b/Common/devcontainer/Dockerfile-python.m4 new file mode 100644 index 0000000..c52c4e1 --- /dev/null +++ b/Common/devcontainer/Dockerfile-python.m4 @@ -0,0 +1,11 @@ +m4_ifdef(`DEF_BASEIMAGE', `', `m4_define(DEF_BASEIMAGE)m4_dnl +FROM BASEIMAGE') + + +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3 \ + python3-pip && \ + rm -rf /var/lib/api/lists/* + +RUN nvim --headless "+MasonInstallSync pywright" "+q!" + diff --git a/Common/devcontainer/Dockerfile-svelte.m4 b/Common/devcontainer/Dockerfile-svelte.m4 new file mode 100644 index 0000000..5539cc4 --- /dev/null +++ b/Common/devcontainer/Dockerfile-svelte.m4 @@ -0,0 +1,7 @@ +m4_ifdef(`DEF_BASEIMAGE', `', `m4_define(DEF_BASEIMAGE)m4_dnl +FROM BASEIMAGE') + +RUN apt-get update && apt-get install -y --no-install-recommends && \ + rm -rf /var/lib/api/lists/* + +RUN nvim --headless "+MasonInstallSync svelte-language-server" "+q!" diff --git a/Common/devcontainer/Makefile b/Common/devcontainer/Makefile new file mode 100644 index 0000000..b5e53f9 --- /dev/null +++ b/Common/devcontainer/Makefile @@ -0,0 +1,18 @@ +BASEIMAGE := devcontainer-base +M4_SRCS := $(wildcard *.m4) +TARGETS := $(patsubst %.m4,%,$(M4_SRCS)) + +.PHONE: all clean + +all: $(TARGETS) + +Dockerfile-base: Dockerfile-base.m4 + m4 -P -D BASEIMAGE="$(BASEIMAGE)" $< > $@ + podman build -t "$(patsubst Dockerfile-%,devcontainer-%,$@)" -f $@ + +%: %.m4 + m4 -P -D BASEIMAGE="$(BASEIMAGE)" $< > $@ + podman build -t "$(patsubst Dockerfile-%,devcontainer-%,$@)" -f $@ + +clean: + rm -f $(TARGETS) diff --git a/Common/devcontainer/supervisord.conf b/Common/devcontainer/supervisord.conf new file mode 100644 index 0000000..0c7314b --- /dev/null +++ b/Common/devcontainer/supervisord.conf @@ -0,0 +1,15 @@ +[supervisord] +nodaemon=true +#user=devuser +logfile=/var/log/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:nvim-headless] +command=nvim --headless --listen 0.0.0.0:7778 +autostart=true +autorestart=true + +[program:opencode] +command=opencode web --port 4096 --hostname 0.0.0.0 +autostart=true +autorestart=true -- cgit v1.2.3