[
  {
    "path": ".gitignore",
    "content": "# Git ignore rules.\n#\n# @author Maciej Bedra\n\n### Docker ###\n# Test compose files\n**/docker-compose.yml\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2020 Maciej Bedra\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "# Makefile for Neovim IDE.\n#\n# @author Maciej Bedra\n\nnvim = mashmb/nvim:dev\nnvim-flutter = mashmb/nvim-flutter:dev\nnvim-go = mashmb/nvim-go:dev\nnvim-jdk8 = mashmb/nvim-jdk8:dev\nnvim-latex = mashmb/nvim-latex:dev\nnvim-ojdk11 = mashmb/nvim-ojdk11:dev\nnvim-ojdk17 = mashmb/nvim-ojdk17:dev\nnvim-python3 = mashmb/nvim-python3:dev\nnvim-ts = mashmb/nvim-ts:dev\n\nall-build = build-nvim build-nvim-flutter build-nvim-go build-nvim-jdk8 build-nvim-latex build-nvim-ojdk11 build-nvim-ojdk17 build-nvim-python3 build-nvim-ts\nall-push = push-nvim push-nvim-flutter push-nvim-go push-nvim-jdk8 push-nvim-latex push-nvim-ojdk11 push-nvim-ojdk17 push-nvim-python3 push-nvim-ts\nall-clean = clean-nvim clean-nvim-flutter clean-nvim-go clean-nvim-jdk8 clean-nvim-latex clean-nvim-ojdk11 clean-nvim-ojdk17 clean-nvim-python3 clean-nvim-ts\n\nall: $(all-build) $(all-push) $(all-clean)\n\nlogin:\n\tdocker login\n\nbuild-nvim:\n\techo \"--- Building $(nvim) image ---\"\n\tcd nvim && docker build -t $(nvim) .\n\nbuild-nvim-flutter:\n\techo \"--- Building $(nvim-flutter) image ---\"\n\tcd nvim-flutter && docker build -t $(nvim-flutter) .\n\nbuild-nvim-go:\n\techo \"--- Building $(nvim-go) image ---\"\n\tcd nvim-go && docker build -t $(nvim-go) .\n\nbuild-nvim-jdk8:\n\techo \"--- Building $(nvim-jdk8) image ---\"\n\tcd nvim-jdk8 && docker build -t $(nvim-jdk8) .\n\nbuild-nvim-latex:\n\techo \"--- Building $(nvim-latex) image ---\"\n\tcd nvim-latex && docker build -t $(nvim-latex) .\n\nbuild-nvim-ojdk11:\n\techo \"--- Building $(nvim-ojdk11) image ---\"\n\tcd nvim-ojdk11 && docker build -t $(nvim-ojdk11) .\n\nbuild-nvim-ojdk17:\n\techo \"--- Building $(nvim-ojdk17) image ---\"\n\tcd nvim-ojdk17 && docker build -t $(nvim-ojdk17) .\n\nbuild-nvim-python3:\n\techo \"--- Building $(nvim-python3) image ---\"\n\tcd nvim-python3 && docker build -t $(nvim-python3) .\n\nbuild-nvim-ts:\n\techo \"--- Building $(nvim-ts) image ---\"\n\tcd nvim-ts && docker build -t $(nvim-ts) .\n\npush-nvim: login\n\techo \"--- Pushing $(nvim) image ---\"\n\tdocker push $(nvim)\n\npush-nvim-flutter: login\n\techo \"--- Pushing $(nvim-flutter) image ---\"\n\tdocker push $(nvim-flutter)\n\npush-nvim-go: login\n\techo \"--- Pushing $(nvim-go) image ---\"\n\tdocker push $(nvim-go)\n\npush-nvim-jdk8: login\n\techo \"--- Pushing $(nvim-jdk8) image ---\"\n\tdocker push $(nvim-jdk8)\n\npush-nvim-latex: login\n\techo \"--- Pushing $(nvim-latex) image ---\"\n\tdocker push $(nvim-latex)\n\npush-nvim-ojdk11: login\n\techo \"--- Pushing $(nvim-ojdk11) image ---\"\n\tdocker push $(nvim-ojdk11)\n\npush-nvim-ojdk17: login\n\techo \"--- Pushing $(nvim-ojdk17) image ---\"\n\tdocker push $(nvim-ojdk17)\n\npush-nvim-python3: login\n\techo \"--- Pushing $(nvim-python3) image ---\"\n\tdocker push $(nvim-python3)\n\npush-nvim-ts: login\n\techo \"--- Pushing $(nvim-ts) image ---\"\n\tdocker push $(nvim-ts)\n\nclean-nvim:\n\techo \"--- Removing $(nvim) image ---\"\n\tdocker image rm -f $(nvim)\n\nclean-nvim-flutter:\n\techo \"--- Removing $(nvim-flutter) image ---\"\n\tdocker image rm -f $(nvim-flutter)\n\nclean-nvim-go:\n\techo \"--- Removing $(nvim-go) image ---\"\n\tdocker image rm -f $(nvim-go)\n\nclean-nvim-jdk8:\n\techo \"--- Removing $(nvim-jdk8) image ---\"\n\tdocker image rm -f $(nvim-jdk8)\n\nclean-nvim-latex:\n\techo \"--- Removing $(nvim-latex) image ---\"\n\tdocker image rm -f $(nvim-latex)\n\nclean-nvim-ojdk11:\n\techo \"--- Removing $(nvim-ojdk11) image ---\"\n\tdocker image rm -f $(nvim-ojdk11)\n\nclean-nvim-ojdk17:\n\techo \"--- Removing $(nvim-ojdk17) image ---\"\n\tdocker image rm -f $(nvim-ojdk17)\n\nclean-nvim-python3:\n\techo \"--- Removing $(nvim-python3) image ---\"\n\tdocker image rm -f $(nvim-python3)\n\nclean-nvim-ts:\n\techo \"--- Removing $(nvim-ts) image ---\"\n\tdocker image rm -f $(nvim-ts)\n"
  },
  {
    "path": "README.md",
    "content": "# Neovim IDE\n\nNeovim as IDE in Docker container. The idea is to create comfy programming environment for various languages with usage\nof Docker. On host machine there should be the least of dependencies connected with development environment. Only Docker\nshould be required, so development environment can be used on any computer - work, private or even VPS. Base image will\ncontain Git and Neovim installation with basic configuration for itself and extensions like file explorer, Git \nintegration, support for files like JSON, HTML, CSS, etc. From base image there will be created images for specific \nprogramming languages, so base configuration will be extended per programming language.\n\nAll images build with this repository will be available on [Docker Hub](https://hub.docker.com/u/mashmb).\n\n<p align=\"center\">\n  <img src=\"img/coc.png\"/>\n</p>\n\n<p align=\"center\">\n  <img src=\"img/git.png\"/>\n</p>\n\n<p align=\"center\">\n  <img src=\"img/files-tree.png\"/>\n</p>\n\n**WARNING**: all images on [Docker Hub](https://hub.docker.com/u/mashmb) with **dev** tag are using the newest stable \nversion of Neovim installed from source.\n\n## Images\n\nDetailed images description (every directory matches single image, directory name represents image name).\n\nHow to run image? For testing it could be:\n\n```shell\ndocker run -it mashmb/nvim:[tag] /bin/bash\n```\n\nFor work suggested is **docker-compose.yml** file where configuration will be more tidy. Programming projects should\nbe mounted from host to **/root/workspace/** directory:\n\n```yml\nversion: '3.8'\n\nservices:\n  nvim:\n    image: mashmb/nvim:[tag]\n    deploy:\n      replicas: 1\n      resources:\n        limits:\n          memory: 2G\n    volumes:\n      - [path_to_projects]:/root/workspace\n```\n\n### nvim\n\nBase Neovim image. Software installed:\n\n1. **curl** - for downloading stuff\n2. **fzf** - for fast files search\n3. **ripgrep** - for fast text occurrence search\n4. **tree** - files tree visualization\n5. **Git** - Git support inside container (with GIT Flow)\n6. **Lazygit** - Git visualization inside terminal\n7. **xclip** - clipboard handling\n8. **Python 3** - for proper Neovim work\n9. **pip** - for Python 3\n10. **NodeJS** - for proper Neovim work\n11. **npm** - for NodeJS\n12. **tzdata** - for default container timezone settings\n13. Everything needed to install Neovim from source\n\nAll components for Neovim are installed (pynvim with pip and neovim with npm).\n\nImage contains general settings and some key bindings for Neovim (saved in **/root/.config/nvim/general/**).\n\nSpell check for English and Polish is added.\n\nEurope/Warsaw as default timezone.\n\nExtensions are managed by Vim Plug. Installed and configured extensions:\n\n1. Gruvbox theme\n2. Airline status bar\n3. Files tree (with Git integration and icons pack)\n4. Welcome screen\n5. Fuzzy finder (search for file and text occurrence)\n7. Git integration\n8. Hex colors preview support\n9. Conquer of completion:\n    - Code completion\n    - Code documentation\n    - Symbols and references highlighting\n    - Code formatting\n    - Code actions (optimize imports, generate, etc.)\n    - Project scope renaming\n    - Go to definition\n    - Go to type definition\n    - Go to implementation\n    - Go to declaration\n    - References\n    - Quick fix\n    - Code diagnostics\n    - Code outline\n    - Symbols search\n9. Debugger\n\nSupported languages:\n\n1. CSS\n2. HTML\n3. JavaScript\n4. JSON\n5. SH\n6. SQL\n7. YAML\n\nFor users that type really fast on keyboard, Conquer of Completion can be too slow. You can disable auto completion with \nsetting in **coc-settings.json**:\n\n```\n\"suggest.autoTrigger\": \"none\"\n```\n\nCompletion will be available on shortcut **Ctrl + Space**.\n\nFile can be saved once without formatting with **noa w** command.\n\nAdditionally there are some Bash aliases:\n\n```\nalias cl=\"clear\"\nalias ls=\"ls -al --color\"\nalias du=\"du -h\"\nalias vi=\"nvim\"\nalias vim=\"nvim\"\nalias lg=\"lazygit\"\nalias gf=\"git flow\"\n```\n\nNeovim background is transparent. It can be disabled in Neovim configuration (.config/nvim/general/settings.vim line **85**).\n\n### nvim-flutter\n\nImage dedicated for Flutter development. It is overriding the base **nvim** image. Conquer of completion is realized \nwith:\n\n- coc-flutter\n- dart-vim-plugin (syntax highlighting)\n\nThis image contains raw Flutter installation (no Android SDK, etc.).\n\nFor Android development follow the [tutorial](https://dev.to/enriquem/android-sdk-without-studio-3idg). There are two\nways to run Android emulator:\n\n1. Install and configure `xauth` ([tutorial](https://www.geeksforgeeks.org/running-gui-applications-on-docker-in-linux/)), \nnextly install emulator in container and run it (remember about Docker privileged mode - without it there will be no \nhardware acceleration required by emulator).\n2. Install Android SDK on host and in Docker container, connect to emulator on host over `adb`.\n\n### nvim-go\n\nImage dedicated for Go development. It is overriding the base **nvim** image. Conquer of completion is realized with:\n\n- coc-go\n- gopls\n\nImage has configured debugger for Go development with usage of **vimspector** (required **Delve** is installed also).\n\n### nvim-jdk8\n\nImage dedicated for Oracle Java 8 development. It is overriding the base **nvim** image. Conquer of completion is\nrealized with:\n\n- coc-java\n- [Eclipse JDT Language Server](https://download.eclipse.org/jdtls/milestones/0.57.0/) (for Oracle Java 8, version \n0.57.0 is required)\n\nImage has configured debugger for Oracle Java 8 with usage of **vimspector** and \n[coc-java-debug](https://github.com/dansomething/coc-java-debug).\n\nAdditionally **coc-xml** is installed for proper XML files handling with Java.\n\n**NOTE**: to use [Lombok](https://projectlombok.org/) it should be downloaded and mounted to container. Nextly it should\nbe configured in **coc-settings.json**:\n\n```json\n{\n  \"java.jdt.ls.vmargs\": \"-javaagent:[path]/lombok.jar\"\n  // \"java.jdt.ls.vmargs\": \"-javaagent:[path]/lombok.jar -Xbootclasspath/a:[path]/lombok.jar\" // older Java versions\n}\n```\n\n### nvim-latex\n\nImage dedicated for LaTeX files edition. It is overriding the base **nvim** image. Conquer of completion is realized with:\n\n- coc-texlab\n\nPDF output file can be built with `:CocCommand latex.Build [file.pdf]`\n\n### nvim-ojdk11\n\nImage dedicated for OpenJDK 11 (Java 11) development. It is overriding the base **nvim** image. Conquer of completion is\nrealized with:\n\n- coc-java\n- [Eclipse JDT Language Server](https://download.eclipse.org/jdtls/)\n\nImage has configured debugger for OpenJDK 11 with usage of **vimspector** and \n[coc-java-debug](https://github.com/dansomething/coc-java-debug).\n\nAdditionally **coc-xml** is installed for proper XML files handling with Java.\n\n**NOTE**: to use [Lombok](https://projectlombok.org/) it should be downloaded and mounted to container. Nextly it should\nbe configured in **coc-settings.json**:\n\n```json\n{\n  \"java.jdt.ls.vmargs\": \"-javaagent:[path]/lombok.jar\"\n  // \"java.jdt.ls.vmargs\": \"-javaagent:[path]/lombok.jar -Xbootclasspath/a:[path]/lombok.jar\" // older Java versions\n}\n```\n\n### nvim-ojdk17\n\nImage dedicated for OpenJDK 17 (Java 17) development. It is overriding the base **nvim** image. Conquer of completion is\nrealized with:\n\n- coc-java\n- [Eclipse JDT Language Server](https://download.eclipse.org/jdtls/)\n\nImage has configured debugger for OpenJDK 11 with usage of **vimspector** and \n[coc-java-debug](https://github.com/dansomething/coc-java-debug).\n\nAdditionally **coc-xml** is installed for proper XML files handling with Java.\n\n**NOTE**: to use [Lombok](https://projectlombok.org/) it should be downloaded and mounted to container. Nextly it should\nbe configured in **coc-settings.json**:\n\n```json\n{\n  \"java.jdt.ls.vmargs\": \"-javaagent:[path]/lombok.jar\"\n  // \"java.jdt.ls.vmargs\": \"-javaagent:[path]/lombok.jar -Xbootclasspath/a:[path]/lombok.jar\" // older Java versions\n}\n```\n\n### nvim-python3\n\nImage dedicated for Python3 development. It is overriding the base **nvim** image. Conquer of completion is realized with:\n\n- coc-pyright\n- coc-python\n- jedi-language-server\n\nImage has configured debugger for Python3 development with usage of **vimspector**. \n\nAll dependencies used to Python3 development are installed in virtual environment (/root/.env) so it can be easily\nmodified with usage of volumes mounting. All user created virtual environments should be mounted in /root/envs.\n\nFor more flexible workspace manging, *pyrightconfig.json* file can be created and mounted in */root/* directory. Example \nconfiguration used to avoid import errors in workspace without *env*:\n\n```json\n{\n  \"reportMissingImports\": false,\n  \"reportGeneralTypeIssues\": false\n}\n```\n\n### nvim-ts\n\nImage dedicated for Typescript development. It is overriding the base **nvim** image. Conquer of completion is realized \nwith:\n\n- coc-tsserver\n\nImage has configured debugger for Typescript development with usage of **vimspector**. \n"
  },
  {
    "path": "nvim/Dockerfile",
    "content": "# Docker file for base Neovim image.\n#\n# @author Maciej Bedra\n\n# Debian image as base (unstable for newest software).\nFROM debian:sid-20211220\n\n# Set image locale.\nENV LANG en_US.UTF-8\nENV LANGUAGE en_US:en\nENV TZ=Europe/Warsaw\n\n# Expose some ports to host by default.\nEXPOSE 8080 8081 8082 8083 8084 8085\n\n# Define which Neovim COC extensions should be installed.\nARG COC='coc-css coc-eslint coc-html coc-json coc-sh coc-sql coc-tsserver coc-yaml'\n\n# Lazygit variables\nARG LG='lazygit'\nARG LG_GITHUB='https://github.com/jesseduffield/lazygit/releases/download/v0.31.4/lazygit_0.31.4_Linux_x86_64.tar.gz'\nARG LG_ARCHIVE='lazygit.tar.gz'\n\n# GIT Flow variables\nARG GIT_FLOW_GITHUB='https://github.com/petervanderdoes/gitflow-avh.git'\nARG GIT_FLOW_DIR='gitflow-avh'\n\n# Update repositories and install software:\n# 1. curl.\n# 2. fzf for fast file search.\n# 3. ripgrep for fast text occurrence search.\n# 4. tree for files tree visualization.\n# 5. Git.\n# 6. Lazygit for Git visualization.\n# 7. xclip for clipboard handling.\n# 8. Python 3.\n# 9. pip for Python.\n# 10. NodeJS.\n# 11. npm for NodeJS.\n# 12. tzdata to set default container timezone.\n# 13. Everything needed to install Neovim from source.\nRUN apt-get update && apt-get -y install curl fzf ripgrep tree git xclip python3 python3-pip nodejs npm tzdata ninja-build gettext libtool libtool-bin autoconf automake cmake g++ pkg-config zip unzip\n\n# Cooperate Neovim with Python 3.\nRUN pip3 install pynvim\n\n# Cooperate NodeJS with Neovim.\nRUN npm i -g neovim\n\n# Install Neovim from source.\nRUN mkdir -p /root/TMP\nRUN cd /root/TMP && git clone https://github.com/neovim/neovim\nRUN cd /root/TMP/neovim && git checkout stable && make -j4 && make install\nRUN rm -rf /root/TMP\n\n# Create directory for Neovim spell check dictionaries.\nRUN mkdir -p /root/.local/share/nvim/site/spell\n\n# Copy Neovim dictionaries.\nCOPY ./spell/ /root/.local/share/nvim/site/spell/\n\n# Install Vim Plug.\nRUN curl -fLo /root/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim\n\n# Create directory for Neovim configuration files.\nRUN mkdir -p /root/.config/nvim\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Install Neovim extensions.\nRUN nvim --headless +PlugInstall +qall\n\n# Create directory for Neovim COC extensions.\nRUN mkdir -p /root/.config/coc/extensions\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Create TMP directory\nRUN mkdir -p /root/TMP\n\n# Install Lazygit from binary\nRUN cd /root/TMP && curl -L -o $LG_ARCHIVE $LG_GITHUB\nRUN cd /root/TMP && tar xzvf $LG_ARCHIVE && mv $LG /usr/bin/\n\n# Install GIT Flow\nRUN cd /root/TMP && git clone $GIT_FLOW_GITHUB\nRUN cd /root/TMP/$GIT_FLOW_DIR && git checkout master && make install\n\n# Delete TMP directory\nRUN rm -rf /root/TMP\n\n# Bash aliases\nCOPY ./home/ /root/\n\n# Create directory for projects (there should be mounted from host).\nRUN mkdir -p /root/workspace\n\n# Set default location after container startup.\nWORKDIR /root/workspace\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim/config/airline/airline.vim",
    "content": "\" Configuration for Airline status bar.\n\"\n\" @author Maciej Bedra\n\n\" Status bar theme\nlet g:airline_theme = 'minimalist'\n\n\" No empty sections\nlet g:airline_skip_empty_sections = 1\n\n\" User power line fonts\nlet g:airline_powerline_fonts = 1\n\n\" Fix for missing power line symbols\nif !exists('g:airline_symbols')\n  let g:airline_symbols = {}\nendif\n\n\" Unicode symbols\nlet g:airline_left_sep = ''\nlet g:airline_left_sep = ''\nlet g:airline_right_sep = ''\nlet g:airline_right_sep = ''\nlet g:airline_symbols.linenr = '␊'\nlet g:airline_symbols.linenr = '␤'\nlet g:airline_symbols.linenr = '¶'\nlet g:airline_symbols.branch = '⎇'\nlet g:airline_symbols.paste = 'ρ'\nlet g:airline_symbols.paste = 'Þ'\nlet g:airline_symbols.paste = '∥'\nlet g:airline_symbols.whitespace = 'Ξ'\n\n\" Airline symbols\nlet g:airline_left_sep = ''\nlet g:airline_left_sep = ''\nlet g:airline_right_sep = ''\nlet g:airline_right_sep = ''\nlet g:airline_symbols.branch = ''\nlet g:airline_symbols.readonly = ''\nlet g:airline_symbols.linenr = ''\n"
  },
  {
    "path": "nvim/config/coc/coc.vim",
    "content": "\" Conquer of completion configuration.\n\"\n\" @author Maciej Bedra\n\n\" Do not pass messages to ins-completion-menu\nset shortmess+=c\n\n\" Do not shift text with sign column\nif has(\"patch-8.1.1564\")\n  set signcolumn=number\nelse\n  set signcolumn=yes\nendif\n\n\" Code completion\ninoremap <silent><expr> <TAB>\n      \\ pumvisible() ? \"\\<C-n>\" :\n      \\ <SID>check_back_space() ? \"\\<TAB>\" :\n      \\ coc#refresh()\ninoremap <expr><S-TAB> pumvisible() ? \"\\<C-p>\" : \"\\<C-h>\"\n\nfunction! s:check_back_space() abort\n  let col = col('.') - 1\n  return !col || getline('.')[col - 1] =~# '\\s'\nendfunction\n\n\" Key binding used to trigger completion\ninoremap <silent><expr> <C-Space> coc#refresh()\n\n\" Confirm completion\ninoremap <silent><expr> <CR> pumvisible() ? coc#_select_confirm()\n      \\: \"\\<C-g>u\\<CR>\\<C-r>=coc#on_enter()\\<CR>\"\n\n\" Key binding for programming documentation\nnnoremap <silent> <leader>d :call <SID>show_documentation()<CR>\n\nfunction! s:show_documentation()\n  if (index(['vim', 'help'], &filetype) >= 0)\n    execute'h '.expand('<cword>')\n  elseif (coc#rpc#ready())\n    call CocActionAsync('doHover')\n  else\n    execute '!' . &keywordprg . \" \" . expand('<cword>')\n  endif\nendfunction\n\n\" Key bindings used to scroll pop ups content\nnnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : \"\\<C-f>\"\nnnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : \"\\<C-b>\"\ninoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? \"\\<C-r>=coc#float#scroll(1)\\<CR>\" : \"\\<Right>\"\ninoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? \"\\<C-r>=coc#float#scroll(0)\\<CR>\" : \"\\<Left>\"\nvnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : \"\\<C-f>\"\nvnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : \"\\<C-b>\"\n\n\" Highlight symbol and references on cursor hold\nautocmd CursorHold * silent call CocActionAsync('highlight')\n\n\" Key binding used to format code\nnmap <leader>cf <Plug>(coc-format)\n\n\" Key binding for code action (optimize imports, generate code, etc.)\nnmap <leader>ca <Plug>(coc-codeaction)\n\n\" Key binding used for symbol rename\nnmap <F2> <Plug>(coc-rename)\n\n\" Key binding used to go to definition\nnmap <leader>cd <Plug>(coc-definition)\n\n\" Key binding used to go to type definition\nnmap <leader>ct <Plug>(coc-type-definition)\n\n\" Key binding used to to to implementation\nnmap <leader>ci <Plug>(coc-implementation)\n\n\" Key binding used to go to declaration\nnmap <leader>cr <Plug>(coc-declaration)\n\n\" Key binding used to find usages\nnmap <leader>cu <Plug>(coc-references)\n\n\" Key binding for quick fix\nnmap <leader>cq <Plug>(coc-fix-current)\n\n\" Key binding used to show code errors, warnings, etc.\nnmap <leader>ce :CocList diagnostics<CR>\n\n\" Key binding for code outline\nnmap <M-7> :CocList outline<CR>\n\n\" Key binding used to find symbol\nnmap <leader>cs :CocList -I symbols<CR>\n"
  },
  {
    "path": "nvim/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-html',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ ]\n"
  },
  {
    "path": "nvim/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"yaml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true\n}\n"
  },
  {
    "path": "nvim/config/fzf/fzf.vim",
    "content": "\" Configuration for fuzzy finder.\n\"\n\" @author Maciej Bedra\n\n\" Search result on top\nlet $FZF_DEFAULT_OPTS = '--reverse'\n\n\" Fuzzy finder as pop up\nlet g:fzf_layout = { 'window': { 'width': 0.8, 'height': 0.6 } }\n\n\" Key binding used to launch fuzzy finder (file search)\n\" nmap <C-_> :FZF<CR>\n\n\" Key binding used to launch fuzzy finder (text occurrence)\n\" nmap <C-_><C-_> :Rg<CR>\n"
  },
  {
    "path": "nvim/config/general/keys.vim",
    "content": "\" Key binding for Neovim out of the box.\n\"\n\" @author Maciej Bedra\n\n\" More handy insert mode exit\ninoremap jk <Esc>\ninoremap kj <Esc>\n\n\" Navigation between splits\nnnoremap <C-h> <C-w>h\nnnoremap <C-j> <C-w>j\nnnoremap <C-k> <C-w>k\nnnoremap <C-l> <C-w>l\n\n\" Splits resizing\nnnoremap <M-j> :resize -2<CR>\nnnoremap <M-k> :resize +2<CR>\nnnoremap <M-h> :vertical resize -2<CR>\nnnoremap <M-l> :vertical resize +2<CR>\n\n\" Editor tabs navigation\nnnoremap <TAB> :tabnext<CR>\nnnoremap <S-TAB> :tabprevious<CR>\n\n\" Completion\ninoremap <expr><TAB> pumvisible() ? \"\\<C-n>\" : \"\\<TAB>\"\n\n\" More handy line 'tabbing'\nvnoremap < <gv\nvnoremap > >gv\n"
  },
  {
    "path": "nvim/config/general/settings.vim",
    "content": "\" General settings for Neovim out of the box.\n\"\n\" @author Maciej Bedra\n\n\" Set leader key\nlet g:mapleader = \"\\<Space>\"\n\n\" Enable syntax highlighting\nsyntax enable\n\n\" Keep multiple buffers open\nset hidden\n\n\" Long lines not wrapped\nset nowrap\n\n\" Default encoding\nset encoding=utf-8\nset fileencoding=utf-8\n\n\" Smaller pop up menu\nset pumheight=10\n\n\" Show cursor position all the time\nset ruler\n\n\" More space for messages\nset cmdheight=2\n\n\" Treat dash separated words as a word text object\nset iskeyword+=-\n\n\" Enable mouse\nset mouse=a\n\n\" Horizontal splits on bottom\nset splitbelow\n\n\" Vertical splits on right\nset splitright\n\n\" 256 colors support\nset t_Co=256\n\n\" More visible '`' character\nset conceallevel=0\n\n\" 2 Spaces for TAB\nset tabstop=2\n\n\" 2 Spaces for indention\nset shiftwidth=2\n\n\" Smart TAB's\nset smarttab\n\n\" Convert TAB's to Spaces\nset expandtab\n\n\" Smart indents\nset smartindent\n\n\" Support auto indent\nset autoindent\n\n\" Status line\nset laststatus=0\n\n\" Line numbers\nset number relativenumber\n\n\" Highlight current line\nset cursorline\n\n\" Smooth scroll\nset so=999\n\n\" Max line length\nset colorcolumn=120\n\n\" Background color\nset background=dark\n\n\" Transparent background\nautocmd VimEnter * hi Normal ctermbg=none\n\n\" Show TAB's\nset showtabline=2\n\n\" Do not display mode\nset noshowmode\n\n\" Disable backup\nset nobackup\nset nowritebackup\n\n\" Faster completion\nset updatetime=300\n\n\" Short timeout\nset timeoutlen=500\n\n\" Stop new line comment continuation\nset formatoptions-=cro \n\n\" Shared clipboard\nset clipboard=unnamedplus\n\n\" Spell check\nset spell spelllang=en_us,pl\n\n\" Auto source while writing to init.vim\nau! BufWritePost $MYVIMRC source %      \ncmap w!! w !sudo tee %\n"
  },
  {
    "path": "nvim/config/git/fugitive.vim",
    "content": "\" Configuration for Git with Neovim integration.\n\"\n\" @author Maciej Bedra\n\n\" Key binding for Git status\nnmap <leader>gs :Git<CR>\n\n\" Key binding for Git commit\nnmap <leader>gc :Git commit<CR>\n\n\" Key binding for Git push\nnmap <leader>gp :Git push<CR>\n\n\" Key binding for Git log\nnmap <leader>gl :Gclog<CR>\n\n\" Key binding to get left chunk in merge conflict\nnmap <leader>dh :diffget //2<CR>\n\n\" Key binding to get right chunk in merge conflict\nnmap <leader>dl :diffget //3<CR>\n"
  },
  {
    "path": "nvim/config/git/fzf-checkout.vim",
    "content": "\" Configuration for Git branches fuzzy finder.\n\"\n\" @author Maciej Bedra\n\n\" Key binding use to run Git branches fuzzy finder\nnmap <leader>gb :GBranches<CR>\n"
  },
  {
    "path": "nvim/config/gruvbox/gruvbox.vim",
    "content": "\" Configuration for Neovim Gruvbox theme.\n\"\n\" @author Maciej Bedra\n\n\" Use darker color scheme\nlet g:gruvbox_contrast_dark = 'hard'\n\n\" Activate theme\ncolorscheme gruvbox\n"
  },
  {
    "path": "nvim/config/init.vim",
    "content": "\" Neovim initialization file.\n\"\n\" @author Maciej Bedra\n\n\" Configuration for Neovim out of the box\nsource /root/.config/nvim/general/settings.vim\nsource /root/.config/nvim/general/keys.vim\n\n\" Neovim extensions\ncall plug#begin('/root/.config/nvim/plugins')\n  Plug 'morhetz/gruvbox'\n  Plug 'vim-airline/vim-airline'\n  Plug 'vim-airline/vim-airline-themes'\n  Plug 'preservim/nerdtree'\n  Plug 'Xuyuanp/nerdtree-git-plugin'\n  Plug 'ryanoasis/vim-devicons'\n  Plug 'kyazdani42/nvim-web-devicons'\n  Plug 'mhinz/vim-startify'\n  Plug 'nvim-lua/plenary.nvim'\n  Plug 'nvim-telescope/telescope.nvim'\n  Plug 'junegunn/fzf'\n  Plug 'junegunn/fzf.vim'\n  Plug 'tpope/vim-fugitive'\n  Plug 'stsewd/fzf-checkout.vim'\n  Plug 'airblade/vim-gitgutter'\n  Plug 'ap/vim-css-color'\n  Plug 'nvim-treesitter/nvim-treesitter'\n  Plug 'neoclide/coc.nvim', { 'branch': 'release' }\n  Plug 'puremourning/vimspector'\ncall plug#end()\n\n\" Extensions configuration\nsource /root/.config/nvim/gruvbox/gruvbox.vim\nsource /root/.config/nvim/airline/airline.vim\nsource /root/.config/nvim/nerdtree/nerdtree.vim\nsource /root/.config/nvim/nerdtree/nerdtree-git.vim\nsource /root/.config/nvim/startify/startify.vim\nsource /root/.config/nvim/telescope/telescope.vim\nsource /root/.config/nvim/fzf/fzf.vim\nsource /root/.config/nvim/git/fugitive.vim\nsource /root/.config/nvim/git/fzf-checkout.vim\nsource /root/.config/nvim/treesitter/treesitter.vim\nsource /root/.config/nvim/coc/coc.vim\nsource /root/.config/nvim/coc/extensions.vim\nsource /root/.config/nvim/vimspector/vimspector.vim\n"
  },
  {
    "path": "nvim/config/nerdtree/nerdtree-git.vim",
    "content": "\" Git integration with files tree.\n\"\n\" @author Maciej Bedra\n\n\" Activate Nerd fonts\nlet g:NERDTreeGitStatusUseNerdFonts = 1\n"
  },
  {
    "path": "nvim/config/nerdtree/nerdtree.vim",
    "content": "\" Configuration for files tree.\n\"\n\" @author Maciej Bedra\n\n\" Show hidden files by default\nlet NERDTreeShowHidden=1\n\n\" Key binding used to open/close files tree\nnmap <M-1> :NERDTreeToggle<CR>\n"
  },
  {
    "path": "nvim/config/startify/startify.vim",
    "content": "\" Configuration for Neovim welcome screen.\n\"\n\" @author Maciej Bedra\n\n\" Welcome header\nlet g:startify_custom_header = [\n      \\'         (       *    ', \n      \\'         )\\ )  (  `   ',\n      \\' (   (  (()/(  )\\))(  ',\n      \\' )\\  )\\  /(_))((_)()\\ ',\n      \\'((_)((_)(_))  (_()((_)',\n      \\'\\ \\ / / |_ _| |  \\/  |',\n      \\' \\ V /   | |  | |\\/| |',\n      \\'  \\_/   |___| |_|  |_|',\n      \\]\n"
  },
  {
    "path": "nvim/config/telescope/telescope.vim",
    "content": "\" Telescope fuzzy finder configuration.\n\"\n\" @author Maciej Bedra\n\n\" Key binding used to launch fuzzy finder (file search)\nnmap <C-_> <cmd>Telescope find_files<CR>\n\n\" Key binding used to launch fuzzy finder (text occurrence)\nnmap <C-_><C-_> <cmd>Telescope live_grep<CR>\n\n\" Telescope defaults.\nlua << EOF\n  require('telescope').setup{\n    defaults = {\n      vimgrep_arguments = {\n        'rg',\n        '--color=never',\n        '--no-heading',\n        '--with-filename',\n        '--line-number',\n        '--column',\n        '--smart-case'\n      },\n      prompt_prefix = \"> \",\n      selection_caret = \"> \",\n      entry_prefix = \"  \",\n      initial_mode = \"insert\",\n      selection_strategy = \"reset\",\n      sorting_strategy = \"descending\",\n      layout_strategy = \"horizontal\",\n      layout_config = {\n        horizontal = {\n          mirror = false,\n        },\n        vertical = {\n          mirror = false,\n        },\n      },\n      file_sorter =  require'telescope.sorters'.get_fuzzy_file,\n      file_ignore_patterns = {},\n      generic_sorter =  require'telescope.sorters'.get_generic_fuzzy_sorter,\n      winblend = 0,\n      border = {},\n      borderchars = { '─', '│', '─', '│', '╭', '╮', '╯', '╰' },\n      color_devicons = true,\n      use_less = true,\n      path_display = {},\n      set_env = { ['COLORTERM'] = 'truecolor' }, -- default = nil,\n      file_previewer = require'telescope.previewers'.vim_buffer_cat.new,\n      grep_previewer = require'telescope.previewers'.vim_buffer_vimgrep.new,\n      qflist_previewer = require'telescope.previewers'.vim_buffer_qflist.new,\n      buffer_previewer_maker = require'telescope.previewers'.buffer_previewer_maker,\n      disable_devicons = false,\n    }\n  }\nEOF\n"
  },
  {
    "path": "nvim/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"javascript\",\n      \"json\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim/config/vimspector/vimspector.vim",
    "content": "\" Configuration for Neovim debugger.\n\"\n\" @author Maciej Bedra\n\n\" Enable HUMAN key bindings for debugging.\nlet g:vimspector_enable_mappings = 'HUMAN'\n"
  },
  {
    "path": "nvim/home/.bashrc",
    "content": "# ~/.bashrc: executed by bash(1) for non-login shells.\n\n# Note: PS1 and umask are already set in /etc/profile. You should not\n# need this unless you want different defaults for root.\n# PS1='${debian_chroot:+($debian_chroot)}\\h:\\w\\$ '\n# umask 022\n\n# You may uncomment the following lines if you want `ls' to be colorized:\n# export LS_OPTIONS='--color=auto'\n# eval \"`dircolors`\"\n# alias ls='ls $LS_OPTIONS'\n# alias ll='ls $LS_OPTIONS -l'\n# alias l='ls $LS_OPTIONS -lA'\n#\n# Some more alias to avoid making mistakes:\n# alias rm='rm -i'\n# alias cp='cp -i'\n# alias mv='mv -i'\n\nsource /usr/share/bash-completion/completions/fzf\nsource /usr/share/doc/fzf/examples/key-bindings.bash\n\nexport FZF_DEFAULT_OPTS=\"--reverse --no-height\"\n\nalias cl=\"clear\"\nalias ls=\"ls -al --color\"\nalias du=\"du -h\"\nalias vi=\"nvim\"\nalias vim=\"nvim\"\nalias lg=\"lazygit\"\nalias gf=\"git flow\"\n"
  },
  {
    "path": "nvim-flutter/Dockerfile",
    "content": "# Docker file for Neovim Flutter development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Neovim COC extensions for Flutter development.\nARG COC='coc-flutter'\n\n# Install necessary system utilities.\nRUN apt-get update && apt-get -y install unzip xz-utils zip\n\n# Install Flutter.\nRUN cd /root && git clone https://github.com/flutter/flutter.git -b stable --depth 1\nRUN /root/flutter/bin/flutter doctor\n\n# Add Flutter to PATH.\nCOPY ./home/ /root/\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-flutter/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-flutter',\n      \\ 'coc-html',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ ]\n"
  },
  {
    "path": "nvim-flutter/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"dart\",\n    \"html\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"yaml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true\n}\n"
  },
  {
    "path": "nvim-flutter/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"dart\",\n      \"html\",\n      \"javascript\",\n      \"json\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-flutter/home/.bashrc",
    "content": "# ~/.bashrc: executed by bash(1) for non-login shells.\n\n# Note: PS1 and umask are already set in /etc/profile. You should not\n# need this unless you want different defaults for root.\n# PS1='${debian_chroot:+($debian_chroot)}\\h:\\w\\$ '\n# umask 022\n\n# You may uncomment the following lines if you want `ls' to be colorized:\n# export LS_OPTIONS='--color=auto'\n# eval \"`dircolors`\"\n# alias ls='ls $LS_OPTIONS'\n# alias ll='ls $LS_OPTIONS -l'\n# alias l='ls $LS_OPTIONS -lA'\n#\n# Some more alias to avoid making mistakes:\n# alias rm='rm -i'\n# alias cp='cp -i'\n# alias mv='mv -i'\n\nsource /usr/share/bash-completion/completions/fzf\nsource /usr/share/doc/fzf/examples/key-bindings.bash\n\nexport FZF_DEFAULT_OPTS=\"--reverse --no-height\"\n\nalias cl=\"clear\"\nalias ls=\"ls -al --color\"\nalias du=\"du -h\"\nalias vi=\"nvim\"\nalias vim=\"nvim\"\nalias lg=\"lazygit\"\nalias gf=\"git flow\"\n\nexport PATH=/root/flutter/bin:$PATH\n"
  },
  {
    "path": "nvim-go/Dockerfile",
    "content": "# Docker file for Neovim Go development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Neovim COC extensions for Go development.\nARG COC='coc-go'\n\n# Install Go SDK.\nRUN apt-get update && apt-get -y install golang \n\n# Install Go language server.\nRUN go install golang.org/x/tools/gopls@latest\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Install Go language debugger adapter.\nRUN cd /root/.config/nvim/plugins/vimspector && python3 install_gadget.py --enable-go && go install github.com/go-delve/delve/cmd/dlv@latest\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-go/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-go',\n      \\ 'coc-html',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ ]\n"
  },
  {
    "path": "nvim-go/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"go\",\n    \"html\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"yaml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true\n}\n"
  },
  {
    "path": "nvim-go/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"go\",\n      \"html\",\n      \"javascript\",\n      \"json\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-jdk8/Dockerfile",
    "content": "# Docker file for Neovim Oracle Java 8 development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Name of Java JDK 8 archive, installation directory and Java Language Server archive.\nARG JDK='jdk-8u321.tar.gz'\nARG JDK_DIR='jdk1.8.0_321'\nARG JDT='jdt-language-server-0.57.0-202006172108.tar.gz'\n\n# Neovim COC extensions for Java development.\nARG COC='coc-java coc-java-debug coc-xml'\n\n# Install JDK8 Debian requirements.\nRUN apt-get update && apt-get install -y libc6-i386\n\n# Create temporal directory for Java JDK 8 archive.\nRUN mkdir -p /root/TMP\n\n# Create directory for Java JDK 8 installation.\nRUN mkdir -p /usr/lib/jvm\n\n# Copy Java JDK 8 archive.\nCOPY ./jdk/ /root/TMP/\n\n# Install Java JDK 8 from archive.\nRUN cd /root/TMP && tar zxvf $JDK -C /usr/lib/jvm\n\n# Create directory for Java Language Server.\nRUN mkdir -p /root/.config/coc/extensions/coc-java-data/server\n\n# Install Java Language Server for COC.\nRUN cd /root/TMP && tar zxvf $JDT -C /root/.config/coc/extensions/coc-java-data/server\n\n# Clean Java JDK 8 archive.\nRUN rm -rf /root/TMP\n\n# Java JDK 8 alternatives.\nRUN update-alternatives --install \"/usr/bin/java\" \"java\" \"/usr/lib/jvm/$JDK_DIR/bin/java\" 1\nRUN update-alternatives --set java /usr/lib/jvm/$JDK_DIR/bin/java\n\n# Copy .bashrc with JAVA HOME configured.\nCOPY ./home/ /root/\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-jdk8/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-html',\n      \\ 'coc-java',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ 'coc-xml',\n      \\ ]\n"
  },
  {
    "path": "nvim-jdk8/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"java\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"yaml\",\n    \"xml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true,\n  \"java.referencesCodeLens.enabled\": true,\n  \"java.implementationsCodeLens.enabled\": true\n}\n"
  },
  {
    "path": "nvim-jdk8/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"java\",\n      \"javascript\",\n      \"json\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-jdk8/home/.bashrc",
    "content": "# ~/.bashrc: executed by bash(1) for non-login shells.\n\n# Note: PS1 and umask are already set in /etc/profile. You should not\n# need this unless you want different defaults for root.\n# PS1='${debian_chroot:+($debian_chroot)}\\h:\\w\\$ '\n# umask 022\n\n# You may uncomment the following lines if you want `ls' to be colorized:\n# export LS_OPTIONS='--color=auto'\n# eval \"`dircolors`\"\n# alias ls='ls $LS_OPTIONS'\n# alias ll='ls $LS_OPTIONS -l'\n# alias l='ls $LS_OPTIONS -lA'\n#\n# Some more alias to avoid making mistakes:\n# alias rm='rm -i'\n# alias cp='cp -i'\n# alias mv='mv -i'\n\nsource /usr/share/bash-completion/completions/fzf\nsource /usr/share/doc/fzf/examples/key-bindings.bash\n\nexport FZF_DEFAULT_OPTS=\"--reverse --no-height\"\n\nalias cl=\"clear\"\nalias ls=\"ls -al --color\"\nalias du=\"du -h\"\nalias vi=\"nvim\"\nalias vim=\"nvim\"\nalias lg=\"lazygit\"\nalias gf=\"git flow\"\n\nexport JAVA_HOME=/usr/lib/jvm/jdk1.8.0_321\nexport PATH=$JAVA_HOME/bin:$PATH\n"
  },
  {
    "path": "nvim-latex/Dockerfile",
    "content": "# Docker file for Neovim LaTeX editor.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Install LaTeX.\nRUN apt-get update && apt-get -y install texlive-latex-extra\n\n# Neovim COC extensions for LaTeX edition.\nARG COC='coc-texlab'\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-latex/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-html',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-texlab',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ ]\n"
  },
  {
    "path": "nvim-latex/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"tex\",\n    \"yaml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true\n}\n"
  },
  {
    "path": "nvim-latex/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"javascript\",\n      \"json\",\n      \"latex\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-ojdk11/Dockerfile",
    "content": "# Docker file for Neovim Open JDK 11 (Java 11) development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Install Open JDK 11.\nRUN apt-get update && apt-get -y install openjdk-11-jdk \n\n# Neovim COC extensions for Java development.\nARG COC='coc-java coc-java-debug coc-xml'\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-ojdk11/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-html',\n      \\ 'coc-java',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ 'coc-xml',\n      \\ ]\n"
  },
  {
    "path": "nvim-ojdk11/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"java\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"yaml\",\n    \"xml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true,\n  \"java.referencesCodeLens.enabled\": true,\n  \"java.implementationsCodeLens.enabled\": true\n}\n"
  },
  {
    "path": "nvim-ojdk11/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"java\",\n      \"javascript\",\n      \"json\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-ojdk17/Dockerfile",
    "content": "# Docker file for Neovim Open JDK 17 (Java 17) development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Install Open JDK 17.\nRUN apt-get update && apt-get -y install openjdk-17-jdk \n\n# Neovim COC extensions for Java development.\nARG COC='coc-java coc-java-debug coc-xml'\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-ojdk17/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-html',\n      \\ 'coc-java',\n      \\ 'coc-json',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ 'coc-xml',\n      \\ ]\n"
  },
  {
    "path": "nvim-ojdk17/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"java\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"yaml\",\n    \"xml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true,\n  \"java.referencesCodeLens.enabled\": true,\n  \"java.implementationsCodeLens.enabled\": true\n}\n"
  },
  {
    "path": "nvim-ojdk17/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"java\",\n      \"javascript\",\n      \"json\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-python3/Dockerfile",
    "content": "# Docker file for Neovim Python3 development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Neovim COC extensions for Python3 development.\nARG COC='coc-pyright coc-python'\n\n# Create directory for virtual environments.\nRUN mkdir -p /root/envs\n\n# Prepare main virtual environment (for language server features).\nCOPY ./env/ /root/\nRUN apt-get update && apt-get -y install python3-venv\nRUN cd /root && python3 -m venv .env\nRUN /root/.env/bin/pip install -r /root/requirements.txt\n\n# Install Neovim COC extensions.\nRUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod\n\n# Install Python language debugger adapter.\nRUN cd /root/.config/nvim/plugins/vimspector && python3 install_gadget.py --enable-python\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-python3/config/coc/extensions.vim",
    "content": "\" Conquer of completion extensions.\n\"\n\" @author Maciej Bedra\n\n\" Globally available extensions\nlet g:coc_global_extensions = [\n      \\ 'coc-css',\n      \\ 'coc-eslint',\n      \\ 'coc-html',\n      \\ 'coc-json',\n      \\ 'coc-pyright',\n      \\ 'coc-python',\n      \\ 'coc-sh',\n      \\ 'coc-sql',\n      \\ 'coc-tsserver',\n      \\ 'coc-yaml',\n      \\ ]\n"
  },
  {
    "path": "nvim-python3/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"javascript\",\n    \"json\",\n    \"python\",\n    \"sh\",\n    \"sql\",\n    \"yaml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true,\n  \"python.pythonPath\": \"/root/.env/bin/python\",\n  \"python.venvPath\": \"/root/envs/\",\n  \"python.jediEnabled\": true,\n  \"python.jediPath\": \"/root/.env/lib/python3.9/site-packages/\",\n  \"python.formatting.provider\": \"black\",\n  \"python.formatting.blackPath\": \"/root/.env/bin/black\",\n  \"python.linting.pylintEnabled\": true,\n  \"python.linting.pylintPath\": \"/root/.env/bin/pylint\",\n  \"python.autoComplete.addBrackets\": true\n}\n"
  },
  {
    "path": "nvim-python3/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"javascript\",\n      \"json\",\n      \"python\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  },
  {
    "path": "nvim-python3/env/requirements.txt",
    "content": "appdirs==1.4.4\nastroid==2.4.2\nblack==20.8b1\nclick==7.1.2\nisort==5.6.4\njedi==0.17.2\njedi-language-server==0.21.0\nlazy-object-proxy==1.4.3\nmccabe==0.6.1\nmypy-extensions==0.4.3\nparso==0.7.1\npathspec==0.8.1\npygls==0.9.1\npylint==2.6.0\nregex==2020.11.13\nrope==0.18.0\nsix==1.15.0\ntoml==0.10.2\ntyped-ast==1.4.1\ntyping-extensions==3.7.4.3\nwrapt==1.12.1\n"
  },
  {
    "path": "nvim-ts/Dockerfile",
    "content": "# Docker file for Neovim Typescript development.\n#\n# @author Maciej Bedra\n\n# Base Neovim image.\nFROM mashmb/nvim:dev\n\n# Install Typescript SDK.\nRUN apt-get update && apt-get -y install watchman && npm install -g typescript\n\n# Install Node.js debugger adapter.\nRUN cd /root/.config/nvim/plugins/vimspector && python3 install_gadget.py --force-enable-node\n\n# Copy Neovim configuration files.\nCOPY ./config/ /root/.config/nvim/\n\n# Avoid container exit.\nCMD [\"tail\", \"-f\", \"/dev/null\"]\n"
  },
  {
    "path": "nvim-ts/config/coc-settings.json",
    "content": "{\n  \"coc.preferences.formatOnSaveFiletypes\": [\n    \"css\",\n    \"html\",\n    \"javascript\",\n    \"json\",\n    \"sh\",\n    \"sql\",\n    \"typescript\",\n    \"yaml\"\n  ],\n  \"codeLens.enable\": true,\n  \"yaml.format.enable\": true\n}\n"
  },
  {
    "path": "nvim-ts/config/treesitter/treesitter.vim",
    "content": "\" Code highlight configuration.\n\"\n\" @author Maciej Bedra\n\n\" Treesitter setup.\nlua << EOF\n  require'nvim-treesitter.configs'.setup {\n    highlight = {\n      enable = true,\n      disable = {},\n    },\n    indent = {\n      enable = false,\n      disable = {},\n    },\n    ensure_installed = {\n      \"css\",\n      \"html\",\n      \"javascript\",\n      \"json\",\n      \"typescript\",\n      \"yaml\"\n    },\n  }\nEOF\n"
  }
]