Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
67 lines (55 loc) · 2.29 KB
/
Copy pathDockerfile
File metadata and controls
67 lines (55 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# syntax=docker/dockerfile:1.7
ARG BASE_IMAGE=debian:bookworm-slim
FROM ${BASE_IMAGE}
# ----------------------------
# Build args (override in iac)
# ----------------------------
ARG EXTRA_APT=""
ARG USERNAME=dev
ARG UID=1000
ARG GID=1000
ARG NVIM_VERSION=0.10.2 # pin me; can be overridden at build time
ARG NVIM_INSTALL_METHOD=appimage # appimage only here (use bob for arm64)
# Base env
ENV DEBIAN_FRONTEND=noninteractive \
LC_ALL=C.UTF-8 LANG=C.UTF-8 \
PATH=/home/${USERNAME}/.local/bin:$PATH
# Core packages (no distro neovim)
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl git tmux ripgrep fd-find jq python3 openssh-client stow python3-debugpy \
xz-utils tar \
&& rm -rf /var/lib/apt/lists/*
# Optional extra packages baked into the image
RUN if [ -n "${EXTRA_APT}" ]; then \
apt-get update && apt-get install -y --no-install-recommends ${EXTRA_APT} && \
rm -rf /var/lib/apt/lists/* ; \
fi
# Non-root user
RUN groupadd -g ${GID} ${USERNAME} && useradd -m -u ${UID} -g ${GID} -s /bin/bash ${USERNAME}
WORKDIR /workspace
# yq (binary release)
RUN curl -fsSL https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -o /usr/local/bin/yq && \
chmod +x /usr/local/bin/yq
# ----------------------------
# Neovim pinned install (AppImage extract)
# ----------------------------
# Note: AppImage releases are x86_64. For arm64, use a different method (e.g., bob).
RUN set -eux; \
if [ "${NVIM_INSTALL_METHOD}" = "appimage" ]; then \
curl -fsSL -o /tmp/nvim.appimage \
"https://github.com/neovim/neovim/releases/download/v${NVIM_VERSION}/nvim.appimage"; \
chmod +x /tmp/nvim.appimage; \
/tmp/nvim.appimage --appimage-extract >/dev/null; \
mv squashfs-root "/opt/nvim-v${NVIM_VERSION}"; \
ln -sf "/opt/nvim-v${NVIM_VERSION}/usr/bin/nvim" /usr/local/bin/nvim; \
else \
echo "Unsupported NVIM_INSTALL_METHOD: ${NVIM_INSTALL_METHOD}"; exit 1; \
fi; \
nvim --version | head -n1 | grep -q "NVIM v${NVIM_VERSION}"
# bootstrap logic
COPY bootstrap.sh /usr/local/bin/bootstrap.sh
RUN chmod +x /usr/local/bin/bootstrap.sh && chown -R ${USERNAME}:${USERNAME} /workspace
# runtime user and sane env
USER ${USERNAME}
ENV USER=${USERNAME} HOME=/home/${USERNAME}
ENTRYPOINT ["/usr/local/bin/bootstrap.sh"]