├── img ├── coc.png ├── git.png └── files-tree.png ├── nvim ├── spell │ ├── pl.utf-8.spl │ └── uk.utf-8.spl ├── config │ ├── nerdtree │ │ ├── nerdtree-git.vim │ │ └── nerdtree.vim │ ├── git │ │ ├── fzf-checkout.vim │ │ └── fugitive.vim │ ├── vimspector │ │ └── vimspector.vim │ ├── gruvbox │ │ └── gruvbox.vim │ ├── coc-settings.json │ ├── coc │ │ ├── extensions.vim │ │ └── coc.vim │ ├── fzf │ │ └── fzf.vim │ ├── startify │ │ └── startify.vim │ ├── treesitter │ │ └── treesitter.vim │ ├── general │ │ ├── keys.vim │ │ └── settings.vim │ ├── airline │ │ └── airline.vim │ ├── init.vim │ └── telescope │ │ └── telescope.vim ├── home │ └── .bashrc └── Dockerfile ├── .gitignore ├── nvim-go ├── config │ ├── coc-settings.json │ ├── coc │ │ └── extensions.vim │ └── treesitter │ │ └── treesitter.vim └── Dockerfile ├── nvim-latex ├── config │ ├── coc-settings.json │ ├── coc │ │ └── extensions.vim │ └── treesitter │ │ └── treesitter.vim └── Dockerfile ├── nvim-flutter ├── config │ ├── coc-settings.json │ ├── coc │ │ └── extensions.vim │ └── treesitter │ │ └── treesitter.vim ├── Dockerfile └── home │ └── .bashrc ├── nvim-ts ├── config │ ├── coc-settings.json │ └── treesitter │ │ └── treesitter.vim └── Dockerfile ├── nvim-jdk8 ├── config │ ├── coc-settings.json │ ├── coc │ │ └── extensions.vim │ └── treesitter │ │ └── treesitter.vim ├── home │ └── .bashrc └── Dockerfile ├── nvim-ojdk11 ├── config │ ├── coc-settings.json │ ├── coc │ │ └── extensions.vim │ └── treesitter │ │ └── treesitter.vim └── Dockerfile ├── nvim-ojdk17 ├── config │ ├── coc-settings.json │ ├── coc │ │ └── extensions.vim │ └── treesitter │ │ └── treesitter.vim └── Dockerfile ├── nvim-python3 ├── config │ ├── coc │ │ └── extensions.vim │ ├── treesitter │ │ └── treesitter.vim │ └── coc-settings.json ├── env │ └── requirements.txt └── Dockerfile ├── LICENSE.md ├── Makefile └── README.md /img/coc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MashMB/nvim-ide/HEAD/img/coc.png -------------------------------------------------------------------------------- /img/git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MashMB/nvim-ide/HEAD/img/git.png -------------------------------------------------------------------------------- /img/files-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MashMB/nvim-ide/HEAD/img/files-tree.png -------------------------------------------------------------------------------- /nvim/spell/pl.utf-8.spl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MashMB/nvim-ide/HEAD/nvim/spell/pl.utf-8.spl -------------------------------------------------------------------------------- /nvim/spell/uk.utf-8.spl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MashMB/nvim-ide/HEAD/nvim/spell/uk.utf-8.spl -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Git ignore rules. 2 | # 3 | # @author Maciej Bedra 4 | 5 | ### Docker ### 6 | # Test compose files 7 | **/docker-compose.yml 8 | -------------------------------------------------------------------------------- /nvim/config/nerdtree/nerdtree-git.vim: -------------------------------------------------------------------------------- 1 | " Git integration with files tree. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Activate Nerd fonts 6 | let g:NERDTreeGitStatusUseNerdFonts = 1 7 | -------------------------------------------------------------------------------- /nvim/config/git/fzf-checkout.vim: -------------------------------------------------------------------------------- 1 | " Configuration for Git branches fuzzy finder. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Key binding use to run Git branches fuzzy finder 6 | nmap gb :GBranches 7 | -------------------------------------------------------------------------------- /nvim/config/vimspector/vimspector.vim: -------------------------------------------------------------------------------- 1 | " Configuration for Neovim debugger. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Enable HUMAN key bindings for debugging. 6 | let g:vimspector_enable_mappings = 'HUMAN' 7 | -------------------------------------------------------------------------------- /nvim/config/gruvbox/gruvbox.vim: -------------------------------------------------------------------------------- 1 | " Configuration for Neovim Gruvbox theme. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Use darker color scheme 6 | let g:gruvbox_contrast_dark = 'hard' 7 | 8 | " Activate theme 9 | colorscheme gruvbox 10 | -------------------------------------------------------------------------------- /nvim/config/nerdtree/nerdtree.vim: -------------------------------------------------------------------------------- 1 | " Configuration for files tree. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Show hidden files by default 6 | let NERDTreeShowHidden=1 7 | 8 | " Key binding used to open/close files tree 9 | nmap :NERDTreeToggle 10 | -------------------------------------------------------------------------------- /nvim/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "javascript", 6 | "json", 7 | "sh", 8 | "sql", 9 | "yaml" 10 | ], 11 | "codeLens.enable": true, 12 | "yaml.format.enable": true 13 | } 14 | -------------------------------------------------------------------------------- /nvim-go/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "go", 5 | "html", 6 | "javascript", 7 | "json", 8 | "sh", 9 | "sql", 10 | "yaml" 11 | ], 12 | "codeLens.enable": true, 13 | "yaml.format.enable": true 14 | } 15 | -------------------------------------------------------------------------------- /nvim-latex/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "javascript", 6 | "json", 7 | "sh", 8 | "sql", 9 | "tex", 10 | "yaml" 11 | ], 12 | "codeLens.enable": true, 13 | "yaml.format.enable": true 14 | } 15 | -------------------------------------------------------------------------------- /nvim-flutter/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "dart", 5 | "html", 6 | "javascript", 7 | "json", 8 | "sh", 9 | "sql", 10 | "yaml" 11 | ], 12 | "codeLens.enable": true, 13 | "yaml.format.enable": true 14 | } 15 | -------------------------------------------------------------------------------- /nvim-ts/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "javascript", 6 | "json", 7 | "sh", 8 | "sql", 9 | "typescript", 10 | "yaml" 11 | ], 12 | "codeLens.enable": true, 13 | "yaml.format.enable": true 14 | } 15 | -------------------------------------------------------------------------------- /nvim/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-html', 10 | \ 'coc-json', 11 | \ 'coc-sh', 12 | \ 'coc-sql', 13 | \ 'coc-tsserver', 14 | \ 'coc-yaml', 15 | \ ] 16 | -------------------------------------------------------------------------------- /nvim-go/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-go', 10 | \ 'coc-html', 11 | \ 'coc-json', 12 | \ 'coc-sh', 13 | \ 'coc-sql', 14 | \ 'coc-tsserver', 15 | \ 'coc-yaml', 16 | \ ] 17 | -------------------------------------------------------------------------------- /nvim-jdk8/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "java", 6 | "javascript", 7 | "json", 8 | "sh", 9 | "sql", 10 | "yaml", 11 | "xml" 12 | ], 13 | "codeLens.enable": true, 14 | "yaml.format.enable": true, 15 | "java.referencesCodeLens.enabled": true, 16 | "java.implementationsCodeLens.enabled": true 17 | } 18 | -------------------------------------------------------------------------------- /nvim-ojdk11/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "java", 6 | "javascript", 7 | "json", 8 | "sh", 9 | "sql", 10 | "yaml", 11 | "xml" 12 | ], 13 | "codeLens.enable": true, 14 | "yaml.format.enable": true, 15 | "java.referencesCodeLens.enabled": true, 16 | "java.implementationsCodeLens.enabled": true 17 | } 18 | -------------------------------------------------------------------------------- /nvim-ojdk17/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "java", 6 | "javascript", 7 | "json", 8 | "sh", 9 | "sql", 10 | "yaml", 11 | "xml" 12 | ], 13 | "codeLens.enable": true, 14 | "yaml.format.enable": true, 15 | "java.referencesCodeLens.enabled": true, 16 | "java.implementationsCodeLens.enabled": true 17 | } 18 | -------------------------------------------------------------------------------- /nvim-latex/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-html', 10 | \ 'coc-json', 11 | \ 'coc-sh', 12 | \ 'coc-sql', 13 | \ 'coc-texlab', 14 | \ 'coc-tsserver', 15 | \ 'coc-yaml', 16 | \ ] 17 | -------------------------------------------------------------------------------- /nvim-flutter/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-flutter', 10 | \ 'coc-html', 11 | \ 'coc-json', 12 | \ 'coc-sh', 13 | \ 'coc-sql', 14 | \ 'coc-tsserver', 15 | \ 'coc-yaml', 16 | \ ] 17 | -------------------------------------------------------------------------------- /nvim-jdk8/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-html', 10 | \ 'coc-java', 11 | \ 'coc-json', 12 | \ 'coc-sh', 13 | \ 'coc-sql', 14 | \ 'coc-tsserver', 15 | \ 'coc-yaml', 16 | \ 'coc-xml', 17 | \ ] 18 | -------------------------------------------------------------------------------- /nvim-ojdk11/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-html', 10 | \ 'coc-java', 11 | \ 'coc-json', 12 | \ 'coc-sh', 13 | \ 'coc-sql', 14 | \ 'coc-tsserver', 15 | \ 'coc-yaml', 16 | \ 'coc-xml', 17 | \ ] 18 | -------------------------------------------------------------------------------- /nvim-ojdk17/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-html', 10 | \ 'coc-java', 11 | \ 'coc-json', 12 | \ 'coc-sh', 13 | \ 'coc-sql', 14 | \ 'coc-tsserver', 15 | \ 'coc-yaml', 16 | \ 'coc-xml', 17 | \ ] 18 | -------------------------------------------------------------------------------- /nvim-python3/config/coc/extensions.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion extensions. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Globally available extensions 6 | let g:coc_global_extensions = [ 7 | \ 'coc-css', 8 | \ 'coc-eslint', 9 | \ 'coc-html', 10 | \ 'coc-json', 11 | \ 'coc-pyright', 12 | \ 'coc-python', 13 | \ 'coc-sh', 14 | \ 'coc-sql', 15 | \ 'coc-tsserver', 16 | \ 'coc-yaml', 17 | \ ] 18 | -------------------------------------------------------------------------------- /nvim/config/fzf/fzf.vim: -------------------------------------------------------------------------------- 1 | " Configuration for fuzzy finder. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Search result on top 6 | let $FZF_DEFAULT_OPTS = '--reverse' 7 | 8 | " Fuzzy finder as pop up 9 | let g:fzf_layout = { 'window': { 'width': 0.8, 'height': 0.6 } } 10 | 11 | " Key binding used to launch fuzzy finder (file search) 12 | " nmap :FZF 13 | 14 | " Key binding used to launch fuzzy finder (text occurrence) 15 | " nmap :Rg 16 | -------------------------------------------------------------------------------- /nvim-python3/env/requirements.txt: -------------------------------------------------------------------------------- 1 | appdirs==1.4.4 2 | astroid==2.4.2 3 | black==20.8b1 4 | click==7.1.2 5 | isort==5.6.4 6 | jedi==0.17.2 7 | jedi-language-server==0.21.0 8 | lazy-object-proxy==1.4.3 9 | mccabe==0.6.1 10 | mypy-extensions==0.4.3 11 | parso==0.7.1 12 | pathspec==0.8.1 13 | pygls==0.9.1 14 | pylint==2.6.0 15 | regex==2020.11.13 16 | rope==0.18.0 17 | six==1.15.0 18 | toml==0.10.2 19 | typed-ast==1.4.1 20 | typing-extensions==3.7.4.3 21 | wrapt==1.12.1 22 | -------------------------------------------------------------------------------- /nvim/config/startify/startify.vim: -------------------------------------------------------------------------------- 1 | " Configuration for Neovim welcome screen. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Welcome header 6 | let g:startify_custom_header = [ 7 | \' ( * ', 8 | \' )\ ) ( ` ', 9 | \' ( ( (()/( )\))( ', 10 | \' )\ )\ /(_))((_)()\ ', 11 | \'((_)((_)(_)) (_()((_)', 12 | \'\ \ / / |_ _| | \/ |', 13 | \' \ V / | | | |\/| |', 14 | \' \_/ |___| |_| |_|', 15 | \] 16 | -------------------------------------------------------------------------------- /nvim/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "javascript", 20 | "json", 21 | "yaml" 22 | }, 23 | } 24 | EOF 25 | -------------------------------------------------------------------------------- /nvim-go/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "go", 19 | "html", 20 | "javascript", 21 | "json", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-jdk8/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "java", 20 | "javascript", 21 | "json", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-flutter/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "dart", 19 | "html", 20 | "javascript", 21 | "json", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-latex/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "javascript", 20 | "json", 21 | "latex", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-ojdk11/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "java", 20 | "javascript", 21 | "json", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-ojdk17/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "java", 20 | "javascript", 21 | "json", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-python3/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "javascript", 20 | "json", 21 | "python", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-ts/config/treesitter/treesitter.vim: -------------------------------------------------------------------------------- 1 | " Code highlight configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Treesitter setup. 6 | lua << EOF 7 | require'nvim-treesitter.configs'.setup { 8 | highlight = { 9 | enable = true, 10 | disable = {}, 11 | }, 12 | indent = { 13 | enable = false, 14 | disable = {}, 15 | }, 16 | ensure_installed = { 17 | "css", 18 | "html", 19 | "javascript", 20 | "json", 21 | "typescript", 22 | "yaml" 23 | }, 24 | } 25 | EOF 26 | -------------------------------------------------------------------------------- /nvim-ts/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Typescript development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Install Typescript SDK. 9 | RUN apt-get update && apt-get -y install watchman && npm install -g typescript 10 | 11 | # Install Node.js debugger adapter. 12 | RUN cd /root/.config/nvim/plugins/vimspector && python3 install_gadget.py --force-enable-node 13 | 14 | # Copy Neovim configuration files. 15 | COPY ./config/ /root/.config/nvim/ 16 | 17 | # Avoid container exit. 18 | CMD ["tail", "-f", "/dev/null"] 19 | -------------------------------------------------------------------------------- /nvim/config/git/fugitive.vim: -------------------------------------------------------------------------------- 1 | " Configuration for Git with Neovim integration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Key binding for Git status 6 | nmap gs :Git 7 | 8 | " Key binding for Git commit 9 | nmap gc :Git commit 10 | 11 | " Key binding for Git push 12 | nmap gp :Git push 13 | 14 | " Key binding for Git log 15 | nmap gl :Gclog 16 | 17 | " Key binding to get left chunk in merge conflict 18 | nmap dh :diffget //2 19 | 20 | " Key binding to get right chunk in merge conflict 21 | nmap dl :diffget //3 22 | -------------------------------------------------------------------------------- /nvim-latex/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim LaTeX editor. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Install LaTeX. 9 | RUN apt-get update && apt-get -y install texlive-latex-extra 10 | 11 | # Neovim COC extensions for LaTeX edition. 12 | ARG COC='coc-texlab' 13 | 14 | # Install Neovim COC extensions. 15 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 16 | 17 | # Copy Neovim configuration files. 18 | COPY ./config/ /root/.config/nvim/ 19 | 20 | # Avoid container exit. 21 | CMD ["tail", "-f", "/dev/null"] 22 | -------------------------------------------------------------------------------- /nvim-ojdk11/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Open JDK 11 (Java 11) development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Install Open JDK 11. 9 | RUN apt-get update && apt-get -y install openjdk-11-jdk 10 | 11 | # Neovim COC extensions for Java development. 12 | ARG COC='coc-java coc-java-debug coc-xml' 13 | 14 | # Install Neovim COC extensions. 15 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 16 | 17 | # Copy Neovim configuration files. 18 | COPY ./config/ /root/.config/nvim/ 19 | 20 | # Avoid container exit. 21 | CMD ["tail", "-f", "/dev/null"] 22 | -------------------------------------------------------------------------------- /nvim-ojdk17/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Open JDK 17 (Java 17) development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Install Open JDK 17. 9 | RUN apt-get update && apt-get -y install openjdk-17-jdk 10 | 11 | # Neovim COC extensions for Java development. 12 | ARG COC='coc-java coc-java-debug coc-xml' 13 | 14 | # Install Neovim COC extensions. 15 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 16 | 17 | # Copy Neovim configuration files. 18 | COPY ./config/ /root/.config/nvim/ 19 | 20 | # Avoid container exit. 21 | CMD ["tail", "-f", "/dev/null"] 22 | -------------------------------------------------------------------------------- /nvim-python3/config/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "coc.preferences.formatOnSaveFiletypes": [ 3 | "css", 4 | "html", 5 | "javascript", 6 | "json", 7 | "python", 8 | "sh", 9 | "sql", 10 | "yaml" 11 | ], 12 | "codeLens.enable": true, 13 | "yaml.format.enable": true, 14 | "python.pythonPath": "/root/.env/bin/python", 15 | "python.venvPath": "/root/envs/", 16 | "python.jediEnabled": true, 17 | "python.jediPath": "/root/.env/lib/python3.9/site-packages/", 18 | "python.formatting.provider": "black", 19 | "python.formatting.blackPath": "/root/.env/bin/black", 20 | "python.linting.pylintEnabled": true, 21 | "python.linting.pylintPath": "/root/.env/bin/pylint", 22 | "python.autoComplete.addBrackets": true 23 | } 24 | -------------------------------------------------------------------------------- /nvim/config/general/keys.vim: -------------------------------------------------------------------------------- 1 | " Key binding for Neovim out of the box. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " More handy insert mode exit 6 | inoremap jk 7 | inoremap kj 8 | 9 | " Navigation between splits 10 | nnoremap h 11 | nnoremap j 12 | nnoremap k 13 | nnoremap l 14 | 15 | " Splits resizing 16 | nnoremap :resize -2 17 | nnoremap :resize +2 18 | nnoremap :vertical resize -2 19 | nnoremap :vertical resize +2 20 | 21 | " Editor tabs navigation 22 | nnoremap :tabnext 23 | nnoremap :tabprevious 24 | 25 | " Completion 26 | inoremap pumvisible() ? "\" : "\" 27 | 28 | " More handy line 'tabbing' 29 | vnoremap < >gv 31 | -------------------------------------------------------------------------------- /nvim-flutter/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Flutter development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Neovim COC extensions for Flutter development. 9 | ARG COC='coc-flutter' 10 | 11 | # Install necessary system utilities. 12 | RUN apt-get update && apt-get -y install unzip xz-utils zip 13 | 14 | # Install Flutter. 15 | RUN cd /root && git clone https://github.com/flutter/flutter.git -b stable --depth 1 16 | RUN /root/flutter/bin/flutter doctor 17 | 18 | # Add Flutter to PATH. 19 | COPY ./home/ /root/ 20 | 21 | # Install Neovim COC extensions. 22 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 23 | 24 | # Copy Neovim configuration files. 25 | COPY ./config/ /root/.config/nvim/ 26 | 27 | # Avoid container exit. 28 | CMD ["tail", "-f", "/dev/null"] 29 | -------------------------------------------------------------------------------- /nvim-go/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Go development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Neovim COC extensions for Go development. 9 | ARG COC='coc-go' 10 | 11 | # Install Go SDK. 12 | RUN apt-get update && apt-get -y install golang 13 | 14 | # Install Go language server. 15 | RUN go install golang.org/x/tools/gopls@latest 16 | 17 | # Install Neovim COC extensions. 18 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 19 | 20 | # Install Go language debugger adapter. 21 | RUN cd /root/.config/nvim/plugins/vimspector && python3 install_gadget.py --enable-go && go install github.com/go-delve/delve/cmd/dlv@latest 22 | 23 | # Copy Neovim configuration files. 24 | COPY ./config/ /root/.config/nvim/ 25 | 26 | # Avoid container exit. 27 | CMD ["tail", "-f", "/dev/null"] 28 | -------------------------------------------------------------------------------- /nvim/home/.bashrc: -------------------------------------------------------------------------------- 1 | # ~/.bashrc: executed by bash(1) for non-login shells. 2 | 3 | # Note: PS1 and umask are already set in /etc/profile. You should not 4 | # need this unless you want different defaults for root. 5 | # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' 6 | # umask 022 7 | 8 | # You may uncomment the following lines if you want `ls' to be colorized: 9 | # export LS_OPTIONS='--color=auto' 10 | # eval "`dircolors`" 11 | # alias ls='ls $LS_OPTIONS' 12 | # alias ll='ls $LS_OPTIONS -l' 13 | # alias l='ls $LS_OPTIONS -lA' 14 | # 15 | # Some more alias to avoid making mistakes: 16 | # alias rm='rm -i' 17 | # alias cp='cp -i' 18 | # alias mv='mv -i' 19 | 20 | source /usr/share/bash-completion/completions/fzf 21 | source /usr/share/doc/fzf/examples/key-bindings.bash 22 | 23 | export FZF_DEFAULT_OPTS="--reverse --no-height" 24 | 25 | alias cl="clear" 26 | alias ls="ls -al --color" 27 | alias du="du -h" 28 | alias vi="nvim" 29 | alias vim="nvim" 30 | alias lg="lazygit" 31 | alias gf="git flow" 32 | -------------------------------------------------------------------------------- /nvim-python3/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Python3 development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Neovim COC extensions for Python3 development. 9 | ARG COC='coc-pyright coc-python' 10 | 11 | # Create directory for virtual environments. 12 | RUN mkdir -p /root/envs 13 | 14 | # Prepare main virtual environment (for language server features). 15 | COPY ./env/ /root/ 16 | RUN apt-get update && apt-get -y install python3-venv 17 | RUN cd /root && python3 -m venv .env 18 | RUN /root/.env/bin/pip install -r /root/requirements.txt 19 | 20 | # Install Neovim COC extensions. 21 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 22 | 23 | # Install Python language debugger adapter. 24 | RUN cd /root/.config/nvim/plugins/vimspector && python3 install_gadget.py --enable-python 25 | 26 | # Copy Neovim configuration files. 27 | COPY ./config/ /root/.config/nvim/ 28 | 29 | # Avoid container exit. 30 | CMD ["tail", "-f", "/dev/null"] 31 | -------------------------------------------------------------------------------- /nvim-flutter/home/.bashrc: -------------------------------------------------------------------------------- 1 | # ~/.bashrc: executed by bash(1) for non-login shells. 2 | 3 | # Note: PS1 and umask are already set in /etc/profile. You should not 4 | # need this unless you want different defaults for root. 5 | # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' 6 | # umask 022 7 | 8 | # You may uncomment the following lines if you want `ls' to be colorized: 9 | # export LS_OPTIONS='--color=auto' 10 | # eval "`dircolors`" 11 | # alias ls='ls $LS_OPTIONS' 12 | # alias ll='ls $LS_OPTIONS -l' 13 | # alias l='ls $LS_OPTIONS -lA' 14 | # 15 | # Some more alias to avoid making mistakes: 16 | # alias rm='rm -i' 17 | # alias cp='cp -i' 18 | # alias mv='mv -i' 19 | 20 | source /usr/share/bash-completion/completions/fzf 21 | source /usr/share/doc/fzf/examples/key-bindings.bash 22 | 23 | export FZF_DEFAULT_OPTS="--reverse --no-height" 24 | 25 | alias cl="clear" 26 | alias ls="ls -al --color" 27 | alias du="du -h" 28 | alias vi="nvim" 29 | alias vim="nvim" 30 | alias lg="lazygit" 31 | alias gf="git flow" 32 | 33 | export PATH=/root/flutter/bin:$PATH 34 | -------------------------------------------------------------------------------- /nvim-jdk8/home/.bashrc: -------------------------------------------------------------------------------- 1 | # ~/.bashrc: executed by bash(1) for non-login shells. 2 | 3 | # Note: PS1 and umask are already set in /etc/profile. You should not 4 | # need this unless you want different defaults for root. 5 | # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' 6 | # umask 022 7 | 8 | # You may uncomment the following lines if you want `ls' to be colorized: 9 | # export LS_OPTIONS='--color=auto' 10 | # eval "`dircolors`" 11 | # alias ls='ls $LS_OPTIONS' 12 | # alias ll='ls $LS_OPTIONS -l' 13 | # alias l='ls $LS_OPTIONS -lA' 14 | # 15 | # Some more alias to avoid making mistakes: 16 | # alias rm='rm -i' 17 | # alias cp='cp -i' 18 | # alias mv='mv -i' 19 | 20 | source /usr/share/bash-completion/completions/fzf 21 | source /usr/share/doc/fzf/examples/key-bindings.bash 22 | 23 | export FZF_DEFAULT_OPTS="--reverse --no-height" 24 | 25 | alias cl="clear" 26 | alias ls="ls -al --color" 27 | alias du="du -h" 28 | alias vi="nvim" 29 | alias vim="nvim" 30 | alias lg="lazygit" 31 | alias gf="git flow" 32 | 33 | export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_321 34 | export PATH=$JAVA_HOME/bin:$PATH 35 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Maciej Bedra 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /nvim/config/airline/airline.vim: -------------------------------------------------------------------------------- 1 | " Configuration for Airline status bar. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Status bar theme 6 | let g:airline_theme = 'minimalist' 7 | 8 | " No empty sections 9 | let g:airline_skip_empty_sections = 1 10 | 11 | " User power line fonts 12 | let g:airline_powerline_fonts = 1 13 | 14 | " Fix for missing power line symbols 15 | if !exists('g:airline_symbols') 16 | let g:airline_symbols = {} 17 | endif 18 | 19 | " Unicode symbols 20 | let g:airline_left_sep = '' 21 | let g:airline_left_sep = '' 22 | let g:airline_right_sep = '' 23 | let g:airline_right_sep = '' 24 | let g:airline_symbols.linenr = '␊' 25 | let g:airline_symbols.linenr = '␤' 26 | let g:airline_symbols.linenr = '¶' 27 | let g:airline_symbols.branch = '⎇' 28 | let g:airline_symbols.paste = 'ρ' 29 | let g:airline_symbols.paste = 'Þ' 30 | let g:airline_symbols.paste = '∥' 31 | let g:airline_symbols.whitespace = 'Ξ' 32 | 33 | " Airline symbols 34 | let g:airline_left_sep = '' 35 | let g:airline_left_sep = '' 36 | let g:airline_right_sep = '' 37 | let g:airline_right_sep = '' 38 | let g:airline_symbols.branch = '' 39 | let g:airline_symbols.readonly = '' 40 | let g:airline_symbols.linenr = '' 41 | -------------------------------------------------------------------------------- /nvim/config/init.vim: -------------------------------------------------------------------------------- 1 | " Neovim initialization file. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Configuration for Neovim out of the box 6 | source /root/.config/nvim/general/settings.vim 7 | source /root/.config/nvim/general/keys.vim 8 | 9 | " Neovim extensions 10 | call plug#begin('/root/.config/nvim/plugins') 11 | Plug 'morhetz/gruvbox' 12 | Plug 'vim-airline/vim-airline' 13 | Plug 'vim-airline/vim-airline-themes' 14 | Plug 'preservim/nerdtree' 15 | Plug 'Xuyuanp/nerdtree-git-plugin' 16 | Plug 'ryanoasis/vim-devicons' 17 | Plug 'kyazdani42/nvim-web-devicons' 18 | Plug 'mhinz/vim-startify' 19 | Plug 'nvim-lua/plenary.nvim' 20 | Plug 'nvim-telescope/telescope.nvim' 21 | Plug 'junegunn/fzf' 22 | Plug 'junegunn/fzf.vim' 23 | Plug 'tpope/vim-fugitive' 24 | Plug 'stsewd/fzf-checkout.vim' 25 | Plug 'airblade/vim-gitgutter' 26 | Plug 'ap/vim-css-color' 27 | Plug 'nvim-treesitter/nvim-treesitter' 28 | Plug 'neoclide/coc.nvim', { 'branch': 'release' } 29 | Plug 'puremourning/vimspector' 30 | call plug#end() 31 | 32 | " Extensions configuration 33 | source /root/.config/nvim/gruvbox/gruvbox.vim 34 | source /root/.config/nvim/airline/airline.vim 35 | source /root/.config/nvim/nerdtree/nerdtree.vim 36 | source /root/.config/nvim/nerdtree/nerdtree-git.vim 37 | source /root/.config/nvim/startify/startify.vim 38 | source /root/.config/nvim/telescope/telescope.vim 39 | source /root/.config/nvim/fzf/fzf.vim 40 | source /root/.config/nvim/git/fugitive.vim 41 | source /root/.config/nvim/git/fzf-checkout.vim 42 | source /root/.config/nvim/treesitter/treesitter.vim 43 | source /root/.config/nvim/coc/coc.vim 44 | source /root/.config/nvim/coc/extensions.vim 45 | source /root/.config/nvim/vimspector/vimspector.vim 46 | -------------------------------------------------------------------------------- /nvim-jdk8/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for Neovim Oracle Java 8 development. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Base Neovim image. 6 | FROM mashmb/nvim:dev 7 | 8 | # Name of Java JDK 8 archive, installation directory and Java Language Server archive. 9 | ARG JDK='jdk-8u321.tar.gz' 10 | ARG JDK_DIR='jdk1.8.0_321' 11 | ARG JDT='jdt-language-server-0.57.0-202006172108.tar.gz' 12 | 13 | # Neovim COC extensions for Java development. 14 | ARG COC='coc-java coc-java-debug coc-xml' 15 | 16 | # Install JDK8 Debian requirements. 17 | RUN apt-get update && apt-get install -y libc6-i386 18 | 19 | # Create temporal directory for Java JDK 8 archive. 20 | RUN mkdir -p /root/TMP 21 | 22 | # Create directory for Java JDK 8 installation. 23 | RUN mkdir -p /usr/lib/jvm 24 | 25 | # Copy Java JDK 8 archive. 26 | COPY ./jdk/ /root/TMP/ 27 | 28 | # Install Java JDK 8 from archive. 29 | RUN cd /root/TMP && tar zxvf $JDK -C /usr/lib/jvm 30 | 31 | # Create directory for Java Language Server. 32 | RUN mkdir -p /root/.config/coc/extensions/coc-java-data/server 33 | 34 | # Install Java Language Server for COC. 35 | RUN cd /root/TMP && tar zxvf $JDT -C /root/.config/coc/extensions/coc-java-data/server 36 | 37 | # Clean Java JDK 8 archive. 38 | RUN rm -rf /root/TMP 39 | 40 | # Java JDK 8 alternatives. 41 | RUN update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/$JDK_DIR/bin/java" 1 42 | RUN update-alternatives --set java /usr/lib/jvm/$JDK_DIR/bin/java 43 | 44 | # Copy .bashrc with JAVA HOME configured. 45 | COPY ./home/ /root/ 46 | 47 | # Install Neovim COC extensions. 48 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 49 | 50 | # Copy Neovim configuration files. 51 | COPY ./config/ /root/.config/nvim/ 52 | 53 | # Avoid container exit. 54 | CMD ["tail", "-f", "/dev/null"] 55 | -------------------------------------------------------------------------------- /nvim/config/telescope/telescope.vim: -------------------------------------------------------------------------------- 1 | " Telescope fuzzy finder configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Key binding used to launch fuzzy finder (file search) 6 | nmap Telescope find_files 7 | 8 | " Key binding used to launch fuzzy finder (text occurrence) 9 | nmap Telescope live_grep 10 | 11 | " Telescope defaults. 12 | lua << EOF 13 | require('telescope').setup{ 14 | defaults = { 15 | vimgrep_arguments = { 16 | 'rg', 17 | '--color=never', 18 | '--no-heading', 19 | '--with-filename', 20 | '--line-number', 21 | '--column', 22 | '--smart-case' 23 | }, 24 | prompt_prefix = "> ", 25 | selection_caret = "> ", 26 | entry_prefix = " ", 27 | initial_mode = "insert", 28 | selection_strategy = "reset", 29 | sorting_strategy = "descending", 30 | layout_strategy = "horizontal", 31 | layout_config = { 32 | horizontal = { 33 | mirror = false, 34 | }, 35 | vertical = { 36 | mirror = false, 37 | }, 38 | }, 39 | file_sorter = require'telescope.sorters'.get_fuzzy_file, 40 | file_ignore_patterns = {}, 41 | generic_sorter = require'telescope.sorters'.get_generic_fuzzy_sorter, 42 | winblend = 0, 43 | border = {}, 44 | borderchars = { '─', '│', '─', '│', '╭', '╮', '╯', '╰' }, 45 | color_devicons = true, 46 | use_less = true, 47 | path_display = {}, 48 | set_env = { ['COLORTERM'] = 'truecolor' }, -- default = nil, 49 | file_previewer = require'telescope.previewers'.vim_buffer_cat.new, 50 | grep_previewer = require'telescope.previewers'.vim_buffer_vimgrep.new, 51 | qflist_previewer = require'telescope.previewers'.vim_buffer_qflist.new, 52 | buffer_previewer_maker = require'telescope.previewers'.buffer_previewer_maker, 53 | disable_devicons = false, 54 | } 55 | } 56 | EOF 57 | -------------------------------------------------------------------------------- /nvim/config/general/settings.vim: -------------------------------------------------------------------------------- 1 | " General settings for Neovim out of the box. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Set leader key 6 | let g:mapleader = "\" 7 | 8 | " Enable syntax highlighting 9 | syntax enable 10 | 11 | " Keep multiple buffers open 12 | set hidden 13 | 14 | " Long lines not wrapped 15 | set nowrap 16 | 17 | " Default encoding 18 | set encoding=utf-8 19 | set fileencoding=utf-8 20 | 21 | " Smaller pop up menu 22 | set pumheight=10 23 | 24 | " Show cursor position all the time 25 | set ruler 26 | 27 | " More space for messages 28 | set cmdheight=2 29 | 30 | " Treat dash separated words as a word text object 31 | set iskeyword+=- 32 | 33 | " Enable mouse 34 | set mouse=a 35 | 36 | " Horizontal splits on bottom 37 | set splitbelow 38 | 39 | " Vertical splits on right 40 | set splitright 41 | 42 | " 256 colors support 43 | set t_Co=256 44 | 45 | " More visible '`' character 46 | set conceallevel=0 47 | 48 | " 2 Spaces for TAB 49 | set tabstop=2 50 | 51 | " 2 Spaces for indention 52 | set shiftwidth=2 53 | 54 | " Smart TAB's 55 | set smarttab 56 | 57 | " Convert TAB's to Spaces 58 | set expandtab 59 | 60 | " Smart indents 61 | set smartindent 62 | 63 | " Support auto indent 64 | set autoindent 65 | 66 | " Status line 67 | set laststatus=0 68 | 69 | " Line numbers 70 | set number relativenumber 71 | 72 | " Highlight current line 73 | set cursorline 74 | 75 | " Smooth scroll 76 | set so=999 77 | 78 | " Max line length 79 | set colorcolumn=120 80 | 81 | " Background color 82 | set background=dark 83 | 84 | " Transparent background 85 | autocmd VimEnter * hi Normal ctermbg=none 86 | 87 | " Show TAB's 88 | set showtabline=2 89 | 90 | " Do not display mode 91 | set noshowmode 92 | 93 | " Disable backup 94 | set nobackup 95 | set nowritebackup 96 | 97 | " Faster completion 98 | set updatetime=300 99 | 100 | " Short timeout 101 | set timeoutlen=500 102 | 103 | " Stop new line comment continuation 104 | set formatoptions-=cro 105 | 106 | " Shared clipboard 107 | set clipboard=unnamedplus 108 | 109 | " Spell check 110 | set spell spelllang=en_us,pl 111 | 112 | " Auto source while writing to init.vim 113 | au! BufWritePost $MYVIMRC source % 114 | cmap w!! w !sudo tee % 115 | -------------------------------------------------------------------------------- /nvim/config/coc/coc.vim: -------------------------------------------------------------------------------- 1 | " Conquer of completion configuration. 2 | " 3 | " @author Maciej Bedra 4 | 5 | " Do not pass messages to ins-completion-menu 6 | set shortmess+=c 7 | 8 | " Do not shift text with sign column 9 | if has("patch-8.1.1564") 10 | set signcolumn=number 11 | else 12 | set signcolumn=yes 13 | endif 14 | 15 | " Code completion 16 | inoremap 17 | \ pumvisible() ? "\" : 18 | \ check_back_space() ? "\" : 19 | \ coc#refresh() 20 | inoremap pumvisible() ? "\" : "\" 21 | 22 | function! s:check_back_space() abort 23 | let col = col('.') - 1 24 | return !col || getline('.')[col - 1] =~# '\s' 25 | endfunction 26 | 27 | " Key binding used to trigger completion 28 | inoremap coc#refresh() 29 | 30 | " Confirm completion 31 | inoremap pumvisible() ? coc#_select_confirm() 32 | \: "\u\\=coc#on_enter()\" 33 | 34 | " Key binding for programming documentation 35 | nnoremap d :call show_documentation() 36 | 37 | function! s:show_documentation() 38 | if (index(['vim', 'help'], &filetype) >= 0) 39 | execute'h '.expand('') 40 | elseif (coc#rpc#ready()) 41 | call CocActionAsync('doHover') 42 | else 43 | execute '!' . &keywordprg . " " . expand('') 44 | endif 45 | endfunction 46 | 47 | " Key bindings used to scroll pop ups content 48 | nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" 49 | nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" 50 | inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" 51 | inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" 52 | vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" 53 | vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" 54 | 55 | " Highlight symbol and references on cursor hold 56 | autocmd CursorHold * silent call CocActionAsync('highlight') 57 | 58 | " Key binding used to format code 59 | nmap cf (coc-format) 60 | 61 | " Key binding for code action (optimize imports, generate code, etc.) 62 | nmap ca (coc-codeaction) 63 | 64 | " Key binding used for symbol rename 65 | nmap (coc-rename) 66 | 67 | " Key binding used to go to definition 68 | nmap cd (coc-definition) 69 | 70 | " Key binding used to go to type definition 71 | nmap ct (coc-type-definition) 72 | 73 | " Key binding used to to to implementation 74 | nmap ci (coc-implementation) 75 | 76 | " Key binding used to go to declaration 77 | nmap cr (coc-declaration) 78 | 79 | " Key binding used to find usages 80 | nmap cu (coc-references) 81 | 82 | " Key binding for quick fix 83 | nmap cq (coc-fix-current) 84 | 85 | " Key binding used to show code errors, warnings, etc. 86 | nmap ce :CocList diagnostics 87 | 88 | " Key binding for code outline 89 | nmap :CocList outline 90 | 91 | " Key binding used to find symbol 92 | nmap cs :CocList -I symbols 93 | -------------------------------------------------------------------------------- /nvim/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker file for base Neovim image. 2 | # 3 | # @author Maciej Bedra 4 | 5 | # Debian image as base (unstable for newest software). 6 | FROM debian:sid-20211220 7 | 8 | # Set image locale. 9 | ENV LANG en_US.UTF-8 10 | ENV LANGUAGE en_US:en 11 | ENV TZ=Europe/Warsaw 12 | 13 | # Expose some ports to host by default. 14 | EXPOSE 8080 8081 8082 8083 8084 8085 15 | 16 | # Define which Neovim COC extensions should be installed. 17 | ARG COC='coc-css coc-eslint coc-html coc-json coc-sh coc-sql coc-tsserver coc-yaml' 18 | 19 | # Lazygit variables 20 | ARG LG='lazygit' 21 | ARG LG_GITHUB='https://github.com/jesseduffield/lazygit/releases/download/v0.31.4/lazygit_0.31.4_Linux_x86_64.tar.gz' 22 | ARG LG_ARCHIVE='lazygit.tar.gz' 23 | 24 | # GIT Flow variables 25 | ARG GIT_FLOW_GITHUB='https://github.com/petervanderdoes/gitflow-avh.git' 26 | ARG GIT_FLOW_DIR='gitflow-avh' 27 | 28 | # Update repositories and install software: 29 | # 1. curl. 30 | # 2. fzf for fast file search. 31 | # 3. ripgrep for fast text occurrence search. 32 | # 4. tree for files tree visualization. 33 | # 5. Git. 34 | # 6. Lazygit for Git visualization. 35 | # 7. xclip for clipboard handling. 36 | # 8. Python 3. 37 | # 9. pip for Python. 38 | # 10. NodeJS. 39 | # 11. npm for NodeJS. 40 | # 12. tzdata to set default container timezone. 41 | # 13. Everything needed to install Neovim from source. 42 | RUN 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 43 | 44 | # Cooperate Neovim with Python 3. 45 | RUN pip3 install pynvim 46 | 47 | # Cooperate NodeJS with Neovim. 48 | RUN npm i -g neovim 49 | 50 | # Install Neovim from source. 51 | RUN mkdir -p /root/TMP 52 | RUN cd /root/TMP && git clone https://github.com/neovim/neovim 53 | RUN cd /root/TMP/neovim && git checkout stable && make -j4 && make install 54 | RUN rm -rf /root/TMP 55 | 56 | # Create directory for Neovim spell check dictionaries. 57 | RUN mkdir -p /root/.local/share/nvim/site/spell 58 | 59 | # Copy Neovim dictionaries. 60 | COPY ./spell/ /root/.local/share/nvim/site/spell/ 61 | 62 | # Install Vim Plug. 63 | RUN curl -fLo /root/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 64 | 65 | # Create directory for Neovim configuration files. 66 | RUN mkdir -p /root/.config/nvim 67 | 68 | # Copy Neovim configuration files. 69 | COPY ./config/ /root/.config/nvim/ 70 | 71 | # Install Neovim extensions. 72 | RUN nvim --headless +PlugInstall +qall 73 | 74 | # Create directory for Neovim COC extensions. 75 | RUN mkdir -p /root/.config/coc/extensions 76 | 77 | # Install Neovim COC extensions. 78 | RUN cd /root/.config/coc/extensions && npm install $COC --global --only=prod 79 | 80 | # Create TMP directory 81 | RUN mkdir -p /root/TMP 82 | 83 | # Install Lazygit from binary 84 | RUN cd /root/TMP && curl -L -o $LG_ARCHIVE $LG_GITHUB 85 | RUN cd /root/TMP && tar xzvf $LG_ARCHIVE && mv $LG /usr/bin/ 86 | 87 | # Install GIT Flow 88 | RUN cd /root/TMP && git clone $GIT_FLOW_GITHUB 89 | RUN cd /root/TMP/$GIT_FLOW_DIR && git checkout master && make install 90 | 91 | # Delete TMP directory 92 | RUN rm -rf /root/TMP 93 | 94 | # Bash aliases 95 | COPY ./home/ /root/ 96 | 97 | # Create directory for projects (there should be mounted from host). 98 | RUN mkdir -p /root/workspace 99 | 100 | # Set default location after container startup. 101 | WORKDIR /root/workspace 102 | 103 | # Avoid container exit. 104 | CMD ["tail", "-f", "/dev/null"] 105 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for Neovim IDE. 2 | # 3 | # @author Maciej Bedra 4 | 5 | nvim = mashmb/nvim:dev 6 | nvim-flutter = mashmb/nvim-flutter:dev 7 | nvim-go = mashmb/nvim-go:dev 8 | nvim-jdk8 = mashmb/nvim-jdk8:dev 9 | nvim-latex = mashmb/nvim-latex:dev 10 | nvim-ojdk11 = mashmb/nvim-ojdk11:dev 11 | nvim-ojdk17 = mashmb/nvim-ojdk17:dev 12 | nvim-python3 = mashmb/nvim-python3:dev 13 | nvim-ts = mashmb/nvim-ts:dev 14 | 15 | all-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 16 | all-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 17 | all-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 18 | 19 | all: $(all-build) $(all-push) $(all-clean) 20 | 21 | login: 22 | docker login 23 | 24 | build-nvim: 25 | echo "--- Building $(nvim) image ---" 26 | cd nvim && docker build -t $(nvim) . 27 | 28 | build-nvim-flutter: 29 | echo "--- Building $(nvim-flutter) image ---" 30 | cd nvim-flutter && docker build -t $(nvim-flutter) . 31 | 32 | build-nvim-go: 33 | echo "--- Building $(nvim-go) image ---" 34 | cd nvim-go && docker build -t $(nvim-go) . 35 | 36 | build-nvim-jdk8: 37 | echo "--- Building $(nvim-jdk8) image ---" 38 | cd nvim-jdk8 && docker build -t $(nvim-jdk8) . 39 | 40 | build-nvim-latex: 41 | echo "--- Building $(nvim-latex) image ---" 42 | cd nvim-latex && docker build -t $(nvim-latex) . 43 | 44 | build-nvim-ojdk11: 45 | echo "--- Building $(nvim-ojdk11) image ---" 46 | cd nvim-ojdk11 && docker build -t $(nvim-ojdk11) . 47 | 48 | build-nvim-ojdk17: 49 | echo "--- Building $(nvim-ojdk17) image ---" 50 | cd nvim-ojdk17 && docker build -t $(nvim-ojdk17) . 51 | 52 | build-nvim-python3: 53 | echo "--- Building $(nvim-python3) image ---" 54 | cd nvim-python3 && docker build -t $(nvim-python3) . 55 | 56 | build-nvim-ts: 57 | echo "--- Building $(nvim-ts) image ---" 58 | cd nvim-ts && docker build -t $(nvim-ts) . 59 | 60 | push-nvim: login 61 | echo "--- Pushing $(nvim) image ---" 62 | docker push $(nvim) 63 | 64 | push-nvim-flutter: login 65 | echo "--- Pushing $(nvim-flutter) image ---" 66 | docker push $(nvim-flutter) 67 | 68 | push-nvim-go: login 69 | echo "--- Pushing $(nvim-go) image ---" 70 | docker push $(nvim-go) 71 | 72 | push-nvim-jdk8: login 73 | echo "--- Pushing $(nvim-jdk8) image ---" 74 | docker push $(nvim-jdk8) 75 | 76 | push-nvim-latex: login 77 | echo "--- Pushing $(nvim-latex) image ---" 78 | docker push $(nvim-latex) 79 | 80 | push-nvim-ojdk11: login 81 | echo "--- Pushing $(nvim-ojdk11) image ---" 82 | docker push $(nvim-ojdk11) 83 | 84 | push-nvim-ojdk17: login 85 | echo "--- Pushing $(nvim-ojdk17) image ---" 86 | docker push $(nvim-ojdk17) 87 | 88 | push-nvim-python3: login 89 | echo "--- Pushing $(nvim-python3) image ---" 90 | docker push $(nvim-python3) 91 | 92 | push-nvim-ts: login 93 | echo "--- Pushing $(nvim-ts) image ---" 94 | docker push $(nvim-ts) 95 | 96 | clean-nvim: 97 | echo "--- Removing $(nvim) image ---" 98 | docker image rm -f $(nvim) 99 | 100 | clean-nvim-flutter: 101 | echo "--- Removing $(nvim-flutter) image ---" 102 | docker image rm -f $(nvim-flutter) 103 | 104 | clean-nvim-go: 105 | echo "--- Removing $(nvim-go) image ---" 106 | docker image rm -f $(nvim-go) 107 | 108 | clean-nvim-jdk8: 109 | echo "--- Removing $(nvim-jdk8) image ---" 110 | docker image rm -f $(nvim-jdk8) 111 | 112 | clean-nvim-latex: 113 | echo "--- Removing $(nvim-latex) image ---" 114 | docker image rm -f $(nvim-latex) 115 | 116 | clean-nvim-ojdk11: 117 | echo "--- Removing $(nvim-ojdk11) image ---" 118 | docker image rm -f $(nvim-ojdk11) 119 | 120 | clean-nvim-ojdk17: 121 | echo "--- Removing $(nvim-ojdk17) image ---" 122 | docker image rm -f $(nvim-ojdk17) 123 | 124 | clean-nvim-python3: 125 | echo "--- Removing $(nvim-python3) image ---" 126 | docker image rm -f $(nvim-python3) 127 | 128 | clean-nvim-ts: 129 | echo "--- Removing $(nvim-ts) image ---" 130 | docker image rm -f $(nvim-ts) 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Neovim IDE 2 | 3 | Neovim as IDE in Docker container. The idea is to create comfy programming environment for various languages with usage 4 | of Docker. On host machine there should be the least of dependencies connected with development environment. Only Docker 5 | should be required, so development environment can be used on any computer - work, private or even VPS. Base image will 6 | contain Git and Neovim installation with basic configuration for itself and extensions like file explorer, Git 7 | integration, support for files like JSON, HTML, CSS, etc. From base image there will be created images for specific 8 | programming languages, so base configuration will be extended per programming language. 9 | 10 | All images build with this repository will be available on [Docker Hub](https://hub.docker.com/u/mashmb). 11 | 12 |

13 | 14 |

15 | 16 |

17 | 18 |

19 | 20 |

21 | 22 |

23 | 24 | **WARNING**: all images on [Docker Hub](https://hub.docker.com/u/mashmb) with **dev** tag are using the newest stable 25 | version of Neovim installed from source. 26 | 27 | ## Images 28 | 29 | Detailed images description (every directory matches single image, directory name represents image name). 30 | 31 | How to run image? For testing it could be: 32 | 33 | ```shell 34 | docker run -it mashmb/nvim:[tag] /bin/bash 35 | ``` 36 | 37 | For work suggested is **docker-compose.yml** file where configuration will be more tidy. Programming projects should 38 | be mounted from host to **/root/workspace/** directory: 39 | 40 | ```yml 41 | version: '3.8' 42 | 43 | services: 44 | nvim: 45 | image: mashmb/nvim:[tag] 46 | deploy: 47 | replicas: 1 48 | resources: 49 | limits: 50 | memory: 2G 51 | volumes: 52 | - [path_to_projects]:/root/workspace 53 | ``` 54 | 55 | ### nvim 56 | 57 | Base Neovim image. Software installed: 58 | 59 | 1. **curl** - for downloading stuff 60 | 2. **fzf** - for fast files search 61 | 3. **ripgrep** - for fast text occurrence search 62 | 4. **tree** - files tree visualization 63 | 5. **Git** - Git support inside container (with GIT Flow) 64 | 6. **Lazygit** - Git visualization inside terminal 65 | 7. **xclip** - clipboard handling 66 | 8. **Python 3** - for proper Neovim work 67 | 9. **pip** - for Python 3 68 | 10. **NodeJS** - for proper Neovim work 69 | 11. **npm** - for NodeJS 70 | 12. **tzdata** - for default container timezone settings 71 | 13. Everything needed to install Neovim from source 72 | 73 | All components for Neovim are installed (pynvim with pip and neovim with npm). 74 | 75 | Image contains general settings and some key bindings for Neovim (saved in **/root/.config/nvim/general/**). 76 | 77 | Spell check for English and Polish is added. 78 | 79 | Europe/Warsaw as default timezone. 80 | 81 | Extensions are managed by Vim Plug. Installed and configured extensions: 82 | 83 | 1. Gruvbox theme 84 | 2. Airline status bar 85 | 3. Files tree (with Git integration and icons pack) 86 | 4. Welcome screen 87 | 5. Fuzzy finder (search for file and text occurrence) 88 | 7. Git integration 89 | 8. Hex colors preview support 90 | 9. Conquer of completion: 91 | - Code completion 92 | - Code documentation 93 | - Symbols and references highlighting 94 | - Code formatting 95 | - Code actions (optimize imports, generate, etc.) 96 | - Project scope renaming 97 | - Go to definition 98 | - Go to type definition 99 | - Go to implementation 100 | - Go to declaration 101 | - References 102 | - Quick fix 103 | - Code diagnostics 104 | - Code outline 105 | - Symbols search 106 | 9. Debugger 107 | 108 | Supported languages: 109 | 110 | 1. CSS 111 | 2. HTML 112 | 3. JavaScript 113 | 4. JSON 114 | 5. SH 115 | 6. SQL 116 | 7. YAML 117 | 118 | For users that type really fast on keyboard, Conquer of Completion can be too slow. You can disable auto completion with 119 | setting in **coc-settings.json**: 120 | 121 | ``` 122 | "suggest.autoTrigger": "none" 123 | ``` 124 | 125 | Completion will be available on shortcut **Ctrl + Space**. 126 | 127 | File can be saved once without formatting with **noa w** command. 128 | 129 | Additionally there are some Bash aliases: 130 | 131 | ``` 132 | alias cl="clear" 133 | alias ls="ls -al --color" 134 | alias du="du -h" 135 | alias vi="nvim" 136 | alias vim="nvim" 137 | alias lg="lazygit" 138 | alias gf="git flow" 139 | ``` 140 | 141 | Neovim background is transparent. It can be disabled in Neovim configuration (.config/nvim/general/settings.vim line **85**). 142 | 143 | ### nvim-flutter 144 | 145 | Image dedicated for Flutter development. It is overriding the base **nvim** image. Conquer of completion is realized 146 | with: 147 | 148 | - coc-flutter 149 | - dart-vim-plugin (syntax highlighting) 150 | 151 | This image contains raw Flutter installation (no Android SDK, etc.). 152 | 153 | For Android development follow the [tutorial](https://dev.to/enriquem/android-sdk-without-studio-3idg). There are two 154 | ways to run Android emulator: 155 | 156 | 1. Install and configure `xauth` ([tutorial](https://www.geeksforgeeks.org/running-gui-applications-on-docker-in-linux/)), 157 | nextly install emulator in container and run it (remember about Docker privileged mode - without it there will be no 158 | hardware acceleration required by emulator). 159 | 2. Install Android SDK on host and in Docker container, connect to emulator on host over `adb`. 160 | 161 | ### nvim-go 162 | 163 | Image dedicated for Go development. It is overriding the base **nvim** image. Conquer of completion is realized with: 164 | 165 | - coc-go 166 | - gopls 167 | 168 | Image has configured debugger for Go development with usage of **vimspector** (required **Delve** is installed also). 169 | 170 | ### nvim-jdk8 171 | 172 | Image dedicated for Oracle Java 8 development. It is overriding the base **nvim** image. Conquer of completion is 173 | realized with: 174 | 175 | - coc-java 176 | - [Eclipse JDT Language Server](https://download.eclipse.org/jdtls/milestones/0.57.0/) (for Oracle Java 8, version 177 | 0.57.0 is required) 178 | 179 | Image has configured debugger for Oracle Java 8 with usage of **vimspector** and 180 | [coc-java-debug](https://github.com/dansomething/coc-java-debug). 181 | 182 | Additionally **coc-xml** is installed for proper XML files handling with Java. 183 | 184 | **NOTE**: to use [Lombok](https://projectlombok.org/) it should be downloaded and mounted to container. Nextly it should 185 | be configured in **coc-settings.json**: 186 | 187 | ```json 188 | { 189 | "java.jdt.ls.vmargs": "-javaagent:[path]/lombok.jar" 190 | // "java.jdt.ls.vmargs": "-javaagent:[path]/lombok.jar -Xbootclasspath/a:[path]/lombok.jar" // older Java versions 191 | } 192 | ``` 193 | 194 | ### nvim-latex 195 | 196 | Image dedicated for LaTeX files edition. It is overriding the base **nvim** image. Conquer of completion is realized with: 197 | 198 | - coc-texlab 199 | 200 | PDF output file can be built with `:CocCommand latex.Build [file.pdf]` 201 | 202 | ### nvim-ojdk11 203 | 204 | Image dedicated for OpenJDK 11 (Java 11) development. It is overriding the base **nvim** image. Conquer of completion is 205 | realized with: 206 | 207 | - coc-java 208 | - [Eclipse JDT Language Server](https://download.eclipse.org/jdtls/) 209 | 210 | Image has configured debugger for OpenJDK 11 with usage of **vimspector** and 211 | [coc-java-debug](https://github.com/dansomething/coc-java-debug). 212 | 213 | Additionally **coc-xml** is installed for proper XML files handling with Java. 214 | 215 | **NOTE**: to use [Lombok](https://projectlombok.org/) it should be downloaded and mounted to container. Nextly it should 216 | be configured in **coc-settings.json**: 217 | 218 | ```json 219 | { 220 | "java.jdt.ls.vmargs": "-javaagent:[path]/lombok.jar" 221 | // "java.jdt.ls.vmargs": "-javaagent:[path]/lombok.jar -Xbootclasspath/a:[path]/lombok.jar" // older Java versions 222 | } 223 | ``` 224 | 225 | ### nvim-ojdk17 226 | 227 | Image dedicated for OpenJDK 17 (Java 17) development. It is overriding the base **nvim** image. Conquer of completion is 228 | realized with: 229 | 230 | - coc-java 231 | - [Eclipse JDT Language Server](https://download.eclipse.org/jdtls/) 232 | 233 | Image has configured debugger for OpenJDK 11 with usage of **vimspector** and 234 | [coc-java-debug](https://github.com/dansomething/coc-java-debug). 235 | 236 | Additionally **coc-xml** is installed for proper XML files handling with Java. 237 | 238 | **NOTE**: to use [Lombok](https://projectlombok.org/) it should be downloaded and mounted to container. Nextly it should 239 | be configured in **coc-settings.json**: 240 | 241 | ```json 242 | { 243 | "java.jdt.ls.vmargs": "-javaagent:[path]/lombok.jar" 244 | // "java.jdt.ls.vmargs": "-javaagent:[path]/lombok.jar -Xbootclasspath/a:[path]/lombok.jar" // older Java versions 245 | } 246 | ``` 247 | 248 | ### nvim-python3 249 | 250 | Image dedicated for Python3 development. It is overriding the base **nvim** image. Conquer of completion is realized with: 251 | 252 | - coc-pyright 253 | - coc-python 254 | - jedi-language-server 255 | 256 | Image has configured debugger for Python3 development with usage of **vimspector**. 257 | 258 | All dependencies used to Python3 development are installed in virtual environment (/root/.env) so it can be easily 259 | modified with usage of volumes mounting. All user created virtual environments should be mounted in /root/envs. 260 | 261 | For more flexible workspace manging, *pyrightconfig.json* file can be created and mounted in */root/* directory. Example 262 | configuration used to avoid import errors in workspace without *env*: 263 | 264 | ```json 265 | { 266 | "reportMissingImports": false, 267 | "reportGeneralTypeIssues": false 268 | } 269 | ``` 270 | 271 | ### nvim-ts 272 | 273 | Image dedicated for Typescript development. It is overriding the base **nvim** image. Conquer of completion is realized 274 | with: 275 | 276 | - coc-tsserver 277 | 278 | Image has configured debugger for Typescript development with usage of **vimspector**. 279 | --------------------------------------------------------------------------------