diff --git a/.gitignore b/.gitignore index f7305f88d..e79ce3435 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ tags # Doom Nvim Contrib files tools/doom-nvim-contrib tools/local-share-nvim +tools/local-state tools/workspace # User modules diff --git a/lua/doom/core/init.lua b/lua/doom/core/init.lua index 34d8b002b..cb46a4615 100644 --- a/lua/doom/core/init.lua +++ b/lua/doom/core/init.lua @@ -71,8 +71,10 @@ modules.try_sync() profiler.stop("framework|doom.core.modules") -- Execute autocommand for user to hook custom config into -vim.api.nvim_exec_autocmds("User", { - pattern = "DoomStarted", -}) +if not modules._needs_sync then + vim.api.nvim_exec_autocmds("User", { + pattern = "DoomStarted", + }) +end -- vim: fdm=marker diff --git a/tools/Dockerfile b/tools/Dockerfile index cb311e5cf..93a9a88a1 100644 --- a/tools/Dockerfile +++ b/tools/Dockerfile @@ -16,7 +16,7 @@ ENV \ PATH="/home/doom/.local/bin:${PATH}" # Update repositories -RUN pacman -Syy +RUN pacman -Syu --noconfirm # Install neovim RUN pacman -Sy neovim --noconfirm @@ -25,7 +25,7 @@ RUN pacman -Sy neovim --noconfirm RUN pacman -Sy ripgrep nodejs-lts-fermium npm git bash gcc jq --noconfirm # Lua -RUN pacman -Sy luacheck stylua --noconfirm +RUN pacman -Sy luacheck stylua lua-language-server --noconfirm # Required for nvim-lsp-installer RUN pacman -Sy wget unzip make --noconfirm @@ -36,6 +36,12 @@ RUN npm i -g chokidar-cli # Required for OCaml language # RUN pacman -Sy opam diffutils patch ocaml --noconfirm +# For startup time profiling +RUN pacman -Sy hyperfine --noconfirm + +# OCaml +RUN pacman -Sy opam diffutils patch ocaml --noconfirm + # Create the doom user and group RUN groupadd doom RUN useradd -m -g doom doom diff --git a/tools/docker_bootstrap.sh b/tools/docker_bootstrap.sh new file mode 100755 index 000000000..7f1255d0b --- /dev/null +++ b/tools/docker_bootstrap.sh @@ -0,0 +1,9 @@ +#!/bin/sh +echo "Executing initial bootstrap/sync" +rm -f local-share-nvim/plugin/packer_compiled.lua +rm -f doom-nvim-contrib/plugin/packer_compiled.lua +rm -rf local-share-nvim/ local-state-nvim/ +./start_docker.sh -- --rm --entrypoint='["/usr/bin/nvim","--headless","--cmd","autocmd User PackerComplete quitall","--cmd","autocmd User DoomStarted PackerSync"]' +./start_docker.sh -- --rm --entrypoint='["/usr/bin/nvim","--headless","--cmd","autocmd User PackerComplete quitall","--cmd","autocmd User DoomStarted PackerSync"]' +echo "Testing config" +exec ./start_docker.sh -- --rm --entrypoint='["/usr/bin/nvim","--headless","+qa"]' diff --git a/tools/docker_clean_bootstrap.sh b/tools/docker_clean_bootstrap.sh new file mode 100755 index 000000000..7b12da412 --- /dev/null +++ b/tools/docker_clean_bootstrap.sh @@ -0,0 +1,7 @@ +#!/bin/bash +rm local-share-nvim/ local-state-nvim/ -rf +rm -f doom-nvim-contrib/plugin/packer_compiled.lua +echo +echo "Bootstrapping packages" +echo +exec ./start_docker.sh -- --entrypoint='["/usr/bin/nvim","--headless","--cmd","autocmd User PackerComplete quitall"]' diff --git a/tools/start_docker.sh b/tools/start_docker.sh index 4e77d4d6c..23f7e4a9c 100755 --- a/tools/start_docker.sh +++ b/tools/start_docker.sh @@ -1,10 +1,16 @@ #!/usr/bin/env bash - -if ! docker info > /dev/null 2>&1; then +DOCKER=$(command -v podman docker | head -n 1) +if ! "${DOCKER}" info > /dev/null 2>&1; then echo "This script uses docker, and it isn't running - please start docker and try again!" exit 1 fi +if [ $(basename "${DOCKER}") = "podman" ]; then + DOCKER_RUN_FLAGS="--userns=keep-id" +else + DOCKER_RUN_FLAGS= +fi + ############################################################ # Help # ############################################################ @@ -40,6 +46,7 @@ while getopts "b:h" option; do exit;; esac done +shift $((OPTIND-1)) cd "$SCRIPT_DIR" || exit @@ -87,30 +94,31 @@ echo "" echo "2. Setting up docker environment" # Ensure docker image exists -if [[ ! "$(docker images -q doom-nvim-contrib)" ]]; then +if [[ ! "$("${DOCKER}" images -q doom-nvim-contrib)" ]]; then echo " - Docker image does not exist. Building docker image..." - docker build -t doom-nvim-contrib . + "${DOCKER}" build -t doom-nvim-contrib . || exit fi -if [ "$(docker ps -aq -f status=exited -f name=doom-nvim-contrib-container)" ]; then +if [ "$("${DOCKER}" ps -aq -f status=exited -f name=doom-nvim-contrib-container)" ]; then echo " - Cleaning up old container..." # cleanup - docker rm doom-nvim-contrib-container >> /dev/null + "${DOCKER}" rm doom-nvim-contrib-container >> /dev/null fi # Create docker container if haven't already echo " - Success! Running docker container doom-nvim-contrib-container..." -mkdir -p "${SCRIPT_DIR}/local-share-nvim" "${SCRIPT_DIR}/workspace" +mkdir -p "${SCRIPT_DIR}/local-share-nvim" "${SCRIPT_DIR}/local-state" "${SCRIPT_DIR}/workspace" echo "" -docker run \ +${DOCKER} run \ + ${DOCKER_RUN_FLAGS} \ -it \ -e UID="1000" \ -e GID="1000" \ - -v "$SCRIPT_DIR"/doom-nvim-contrib:/home/doom/.config/nvim \ - -v "$SCRIPT_DIR"/local-share-nvim:/home/doom/.local/share/nvim \ - -v "$SCRIPT_DIR"/workspace:/home/doom/workspace \ + -v "$SCRIPT_DIR"/doom-nvim-contrib:/home/doom/.config/nvim:Z \ + -v "$SCRIPT_DIR"/local-state:/home/doom/.local/state:Z \ + -v "$SCRIPT_DIR"/local-share-nvim:/home/doom/.local/share/nvim:Z \ + -v "$SCRIPT_DIR"/workspace:/home/doom/workspace:Z \ --name doom-nvim-contrib-container \ --user doom \ - doom-nvim-contrib - - + "$@" \ + doom-nvim-contrib \