Files
darcula_nvim/Dockerfile
2026-03-26 16:44:10 -05:00

276 lines
9.0 KiB
Docker

## The MIT License (MIT)
##
## Copyright © 2026 Scott E. Graves <scott.e.graves@protonmail.com>
##
## Permission is hereby granted, free of charge, to any person obtaining a copy of this software
## and associated documentation files (the “Software”), to deal in the Software without restriction,
## including without limitation the rights to use, copy, modify, merge, publish, distribute,
## sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
## furnished to do so, subject to the following conditions:
##
## The above copyright notice and this permission notice shall be included in all copies or
## substantial portions of the Software.
##
## THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
## BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
## DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
##
FROM ubuntu:noble
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
USER root
ARG NVIM_ARCH
ARG NVIM_ARCH2
ARG NVIM_OS
ARG NV_DARCULA_ENABLE_COC
ENV \
GID="1000" \
GNAME="neovim" \
LANG=en_US.utf8 \
NVIM_APPNAME=nvim \
NV_DARCULA_APPS="/home/neovim/.local/share/nvim/" \
NV_DARCULA_ENABLE_COC=${NV_DARCULA_ENABLE_COC} \
PATH="/nvim-${NVIM_OS}-${NVIM_ARCH}/bin:/python/bin:/home/neovim/go/bin:/home/neovim/.local/bin:/home/neovim/flutter/bin:/home/neovim/.pub-cache/bin:/usr/bin/core_perl:${PATH}" \
PYTHONPATH="/python" \
SHELL="/bin/bash" \
TMPDIR=/tmp \
UID="1000" \
UNAME="neovim"
RUN \
apt-get update -y && apt-get upgrade -y && \
apt-get install -y curl locales software-properties-common && \
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
chmod a+r /etc/apt/keyrings/docker.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
add-apt-repository ppa:unit193/encryption -y && \
apt-get update -y && \
apt-get install -y \
android-sdk \
android-sdk-build-tools \
autoconf \
automake \
bash \
bzip2 \
clang \
cmake \
codespell \
containerd.io \
cppcheck \
curl \
diffutils \
docker-buildx-plugin \
docker-ce \
docker-ce-cli \
docker-compose-plugin \
findutils \
fuse3 \
fzf \
gcc \
git \
gnupg \
golang \
grep \
gzip \
jq \
less \
libtool \
llvm \
m4 \
make \
nano \
ninja-build \
nodejs \
openjdk-21-jdk \
openssh-client \
openssh-server \
patch \
perl \
pkgconf \
python3 \
python3-pip \
python3-venv \
ripgrep \
rsync \
shellcheck \
sed \
tar \
tidy \
unrar \
unzip \
valac \
valgrind \
veracrypt \
vlc \
wget \
wmdocker \
zip && \
apt clean && \
rm -rf /var/lib/apt/lists/* && \
deluser ubuntu && \
rm -rf /home/ubuntu && \
groupadd -g ${GID} "${GNAME}" && \
useradd -m -u ${UID} -g ${GNAME} -s ${SHELL} ${UNAME} && \
echo "${UNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
groupmod -g 962 docker && \
groupmod -a -U ${UNAME} docker
COPY \
entrypoint.sh /entrypoint.sh
RUN \
chmod +x /entrypoint.sh && \
chown ${UNAME}:${GNAME} /entrypoint.sh
RUN \
git clone https://github.com/LuaLS/lua-language-server && \
cd lua-language-server && \
chmod +x ./make.sh && \
./make.sh && \
mv lua-language-server /usr/bin && \
chmod +x /usr/bin/lua-language-server && \
cd - && \
rm -rf lua-language-server
RUN \
npm i -g cspell && \
npm i -g eslint && \
npm i -g js-beautify && \
npm i -g lua-fmt && \
npm i -g neovim && \
npm i -g npm && \
npm i -g prettier && \
npm i -g tree-sitter-cli
RUN \
python3 -m venv /python && \
pip3 install -U pip && \
pip3 install -U cmake-language-server && \
pip3 install -U coverage && \
pip3 install -U cpplint && \
pip3 install -U jedi && \
pip3 install -U jedi-language-server && \
pip3 install -U neovim && \
pip3 install -U pylint && \
CFLAGS=-Wno-incompatible-pointer-types pip3 install -U cppman
COPY \
nvim/ /root/.config/nvim/
COPY \
dap/ /root/.config/nvim/dap/
COPY \
pkg/ /root/.config/nvim/pkg/
RUN \
tar xvzf /root/.config/nvim/pkg/nvim-${NVIM_OS}-${NVIM_ARCH}.tar.gz -C /
RUN \
mkdir -p "${NV_DARCULA_APPS}/dap/cpp" && \
unzip /root/.config/nvim/dap/cpptools-${NVIM_OS}-${NVIM_ARCH2}.vsix -d "${NV_DARCULA_APPS}/dap/cpp" && \
chmod +x "${NV_DARCULA_APPS}/dap/cpp/extension/debugAdapters/bin/OpenDebugAD7" && \
cd "${NV_DARCULA_APPS}" && \
git clone https://github.com/Dart-Code/Dart-Code.git && \
cd "${NV_DARCULA_APPS}/Dart-Code" && \
npm i && \
npx webpack --mode production
RUN \
nvim --headless "+qall"
RUN \
if [ "$NV_DARCULA_ENABLE_COC" = "true" ]; then \
nvim --headless "+CocInstall -sync coc-calc" "+qall" && \
nvim --headless "+CocInstall -sync coc-clang-format-style-options" "+qall" && \
nvim --headless "+CocInstall -sync coc-clangd" "+qall" && \
nvim --headless "+CocInstall -sync coc-cmake" "+qall" && \
nvim --headless "+CocInstall -sync coc-css" "+qall" && \
nvim --headless "+CocInstall -sync coc-eslint" "+qall" && \
nvim --headless "+CocInstall -sync coc-flutter" "+qall" && \
nvim --headless "+CocInstall -sync coc-go" "+qall" && \
nvim --headless "+CocInstall -sync coc-highlight" "+qall" && \
nvim --headless "+CocInstall -sync coc-html" "+qall" && \
nvim --headless "+CocInstall -sync coc-java" "+qall" && \
nvim --headless "+CocInstall -sync coc-jedi" "+qall" && \
nvim --headless "+CocInstall -sync coc-jest" "+qall" && \
nvim --headless "+CocInstall -sync coc-json" "+qall" && \
nvim --headless "+CocInstall -sync coc-lightbulb" "+qall" && \
nvim --headless "+CocInstall -sync coc-markdownlint" "+qall" && \
nvim --headless "+CocInstall -sync coc-omnisharp" "+qall" && \
nvim --headless "+CocInstall -sync coc-powershell" "+qall" && \
nvim --headless "+CocInstall -sync coc-react-refactor" "+qall" && \
nvim --headless "+CocInstall -sync coc-sh" "+qall" && \
nvim --headless "+CocInstall -sync coc-snippets" "+qall" && \
nvim --headless "+CocInstall -sync coc-spell-checker" "+qall" && \
nvim --headless "+CocInstall -sync coc-sumneko-lua" "+qall" && \
nvim --headless "+CocInstall -sync coc-tsserver" "+qall" && \
nvim --headless "+CocInstall -sync coc-vimlsp" "+qall" && \
nvim --headless init.lua +CocStart \
"+lua vim.defer_fn(function() vim.cmd('CocCommand sumneko-lua.install') end, 5000)" \
"+lua vim.defer_fn(function() vim.cmd('qall') end, 15000)" && \
nvim --headless init.lua +CocStart \
"+lua vim.defer_fn(function() vim.cmd('CocCommand sumneko-lua.downloadNvimLuaTypes') end, 5000)" \
"+lua vim.defer_fn(function() vim.cmd('qall') end, 15000)"; \
fi
RUN \
nvim --headless "+TSUpdate" \
"+lua vim.defer_fn(function() vim.cmd('qall') end, 60000)"
RUN \
rsync -av --progress --delete /root/.config/ /home/${UNAME}/.config/ && \
rsync -av --progress --delete /root/.local/ /home/${UNAME}/.local/
RUN \
chown -R ${UNAME}:${GNAME} /home/${UNAME}
USER ${UNAME}
ENV \
GID="1000" \
GNAME="neovim" \
LANG=en_US.utf8 \
NVIM_APPNAME=nvim \
NV_DARCULA_APPS="/home/neovim/.local/share/nvim/" \
NV_DARCULA_ENABLE_COC=${NV_DARCULA_ENABLE_COC} \
PATH="/nvim-${NVIM_OS}-${NVIM_ARCH}/bin:/python/bin:/home/neovim/go/bin:/home/neovim/.local/bin:/home/neovim/flutter/bin:/home/neovim/.pub-cache/bin:/usr/bin/core_perl:${PATH}" \
PYTHONPATH="/python" \
SHELL="/bin/bash" \
TMPDIR=/tmp \
UID="1000" \
UNAME="neovim"
RUN \
cd "/home/${UNAME}" && \
git clone https://github.com/flutter/flutter.git -b stable flutter && \
cd - && \
flutter && \
flutter doctor && \
flutter pub global activate dart_style
RUN \
if [ "$NV_DARCULA_ENABLE_COC" = "false" ]; then \
nvim --headless "+MasonToolsInstallSync" "+qall" && \
nvim --headless "+LspInstall bashls" "+qall" && \
nvim --headless "+LspInstall clangd" "+qall" && \
nvim --headless "+LspInstall cspell_ls" "+qall" && \
nvim --headless "+LspInstall gopls" "+qall" && \
nvim --headless "+LspInstall lua_ls" "+qall" && \
nvim --headless "+LspInstall vimls" "+qall"; \
fi
RUN \
go install mvdan.cc/sh/v3/cmd/shfmt@latest
ENTRYPOINT ["/entrypoint.sh"]
# vim:filetype=dockerfile