|
| 1 | +# Use Ubuntu 24.04 as the base image |
| 2 | +FROM ubuntu:24.04 |
| 3 | + |
| 4 | +# Build-time arguments |
| 5 | +ARG DEV_USER=savdert |
| 6 | +ARG DEV_UID=1000 |
| 7 | +ARG DEV_GID=1000 |
| 8 | +ARG TZ=Europe/Istanbul |
| 9 | + |
| 10 | +# Environment variables |
| 11 | +ENV DEBIAN_FRONTEND=noninteractive \ |
| 12 | + SHELL=/usr/bin/zsh \ |
| 13 | + LANG=en_US.UTF-8 \ |
| 14 | + LC_ALL=en_US.UTF-8 \ |
| 15 | + PATH="/home/${DEV_USER}/.local/bin:/opt/mise/bin:/opt/mise/shims:${PATH}" |
| 16 | + |
| 17 | +# Install core system dependencies |
| 18 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 19 | + curl \ |
| 20 | + git \ |
| 21 | + sudo \ |
| 22 | + zsh \ |
| 23 | + ttyd \ |
| 24 | + ca-certificates \ |
| 25 | + locales \ |
| 26 | + tzdata \ |
| 27 | + unzip \ |
| 28 | + build-essential \ |
| 29 | + libssl-dev \ |
| 30 | + pkg-config \ |
| 31 | + && rm -rf /var/lib/apt/lists/* |
| 32 | + |
| 33 | +# Setup locale and timezone |
| 34 | +RUN locale-gen en_US.UTF-8 && \ |
| 35 | + ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone |
| 36 | + |
| 37 | +# Create the user with sudo privileges |
| 38 | +RUN groupadd -g ${DEV_GID} ${DEV_USER} && \ |
| 39 | + useradd -m -u ${DEV_UID} -g ${DEV_GID} -s /usr/bin/zsh ${DEV_USER} && \ |
| 40 | + echo "${DEV_USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers |
| 41 | + |
| 42 | +# Install mise globally |
| 43 | +RUN curl https://mise.run | sh && \ |
| 44 | + mv /root/.local/bin/mise /usr/local/bin/mise |
| 45 | + |
| 46 | +# Setup project directory |
| 47 | +WORKDIR /workspace |
| 48 | +COPY . /workspace |
| 49 | +RUN chown -R ${DEV_USER}:${DEV_USER} /workspace /home/${DEV_USER} |
| 50 | + |
| 51 | +USER ${DEV_USER} |
| 52 | + |
| 53 | +# Install tools via mise during the build (caching tools in the image) |
| 54 | +RUN mise trust --quiet && \ |
| 55 | + mise install --yes |
| 56 | + |
| 57 | +# Symlink configurations to the user's home directory |
| 58 | +RUN mkdir -p ${HOME}/.config/zellij ${HOME}/.config/nvim && \ |
| 59 | + ln -sf /workspace/configs/.zshrc ${HOME}/.zshrc && \ |
| 60 | + ln -sf /workspace/configs/starship.toml ${HOME}/.config/starship.toml && \ |
| 61 | + ln -sf /workspace/configs/zellij/config.kdl ${HOME}/.config/zellij/config.kdl |
| 62 | + |
| 63 | +# Expose the ttyd port |
| 64 | +EXPOSE 7681 |
| 65 | + |
| 66 | +# Command to launch ttyd with zsh |
| 67 | +ENTRYPOINT ["ttyd", "-W", "-p", "7681", "/usr/bin/zsh"] |
0 commit comments