FROM ubuntu:24.04 # --- Setup for NVM and other tools --- # Update package lists and install basic dependencies RUN apt-get update && apt-get install -y \ curl \ git \ nodejs \ npm \ build-essential \ zsh \ tmux \ wget \ unzip \ iputils-ping \ sudo \ ncurses-term \ procps \ ripgrep \ fzf \ python3-venv \ software-properties-common \ && add-apt-repository ppa:neovim-ppa/unstable -y \ && apt update \ && apt-get install -y neovim \ && rm -rf /var/lib/apt/lists/* \ && ln -s /usr/bin/python3 /usr/bin/python COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ RUN curl -sS https://starship.rs/install.sh -o /tmp/install_starship.sh && \ chmod +x /tmp/install_starship.sh && \ /tmp/install_starship.sh --yes && \ rm /tmp/install_starship.sh # Install NVM # Using a specific NVM version is good practice. Check the latest stable version. RUN groupadd --gid 11005 coder \ && useradd -s /bin/bash --uid 11005 --gid 11005 -m coder \ && apt-get update && apt-get install -y sudo \ && echo coder ALL=\(ALL\) NOPASSWD:ALL > /etc/sudoers.d/coder \ && chmod 0440 /etc/sudoers.d/coder \ && chsh -s /usr/bin/zsh coder RUN mkdir -p /home/coder/.config && chown -R coder:coder /home/coder USER coder RUN git clone https://gitea.olsen.cloud/morten/nvim.git /home/coder/.config/nvim RUN curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh ENV NVM_DIR="/home/coder/.nvm" RUN mkdir -p /home/coder/.rc.d RUN mkdir -p ${NVM_DIR} && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && \ echo 'export NVM_DIR="/home/coder/.nvm"' >> /home/coder/.rc.d/nvm.sh && \ echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> /home/coder/.rc.d/nvm.sh && \ echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> /home/coder/.rc.d/nvm.sh && \ chmod +x /home/coder/.rc.d/nvm.sh RUN bashenv="$(mktemp)" && \ echo '#!/bin/bash' > "$bashenv" && \ echo '. /home/coder/.rc.d/nvm.sh' >> "$bashenv" && \ echo 'nvm install 23' >> "$bashenv" && \ echo 'nvm use 23' >> "$bashenv" && \ echo 'corepack enable' >> "$bashenv" && \ chmod +x "$bashenv" && \ "$bashenv" && \ rm "$bashenv" RUN bashenv="$(mktemp)" && \ echo '#!/bin/bash' > "$bashenv" && \ echo '. /home/coder/.rc.d/nvm.sh' >> "$bashenv" && \ echo 'corepack enable' >> "$bashenv" && \ chmod +x "$bashenv" && \ "$bashenv" && \ rm "$bashenv" RUN bashenv_nvim_init="$(mktemp)" && \ echo '#!/bin/bash' > "$bashenv_nvim_init" && \ echo '. /home/coder/.rc.d/nvm.sh' >> "$bashenv_nvim_init" && \ echo 'npm install -g neovim' >> "$bashenv_nvim_init" && \ #echo 'nvim --headless "+Lazy! sync" +qa || true' >> "$bashenv_nvim_init" && \ chmod +x "$bashenv_nvim_init" && \ "$bashenv_nvim_init" && \ rm "$bashenv_nvim_init" COPY --chown=coder:coder ./env/ /home/coder/