FROM alpine:edge AS base WORKDIR /root SHELL ["/bin/sh", "-c"] RUN apk add --no-cache git \ lazygit \ neovim \ man-pages \ alpine-sdk \ bash \ eza \ ncurses \ util-linux-misc \ curl \ --update # install deps needed by neovim RUN apk add --no-cache wget \ gzip \ neovim-doc \ ripgrep \ rustup \ python3 \ openjdk21 \ openjdk17 \ gradle \ go \ dotnet10-sdk \ clang22-extra-tools \ nodejs \ npm \ tree-sitter-cli \ scdoc RUN mkdir source # install qbe RUN git clone git://c9x.me/qbe.git source/qbe && \ cd source/qbe && \ make PREFIX=/usr && \ make PREFIX=/usr install clean && \ cd # install harec RUN git clone https://git.sr.ht/~sircmpwn/harec source/harec && \ cd source/harec && \ cp configs/linux.mk config.mk && \ make PREFIX=/usr && \ make PREFIX=/usr install clean && \ cd # install hare RUN git clone https://git.sr.ht/~sircmpwn/hare source/hare && \ cd source/hare && \ cp configs/linux.mk config.mk && \ make PREFIX=/usr && \ make PREFIX=/usr install clean && \ cd # pre-download lazy.nvim RUN git clone --filter=blob:none https://github.com/folke/lazy.nvim.git --branch=stable /root/.local/share/nvim/lazy/lazy.nvim # set up Rust RUN rustup-init -y --default-toolchain none && \ /root/.cargo/bin/rustup toolchain install nightly --allow-downgrade --profile minimal --component rustfmt,rust-src,clippy,rust-analyzer && \ echo -e "[unstable]\ngc = true" > /root/.cargo/config.toml # copy config files COPY .bashrc .bashrc COPY --parents after ftplugin lsp lua spell init.lua .config/nvim/ FROM base SHELL ["/bin/bash", "-c"] WORKDIR /root RUN nvim --headless +"Lazy! sync" +qa; rm -rf /root/.cache # symlink the clangd executable, since it can't be installed with mason # also symlink rust-analyzer RUN ln -sf /usr/bin/clangd /root/.local/share/nvim/mason/bin/clangd ENTRYPOINT ["/bin/bash"]