rename Nwiz to nwiz
[wiki.git] / nwiz
diff --git a/nwiz b/nwiz
new file mode 100644 (file)
index 0000000..331906c
--- /dev/null
+++ b/nwiz
@@ -0,0 +1,116 @@
+== nwiz, the code editor for a more civilized era ==
+
+=== What's this? ===
+
+** My goal is to use [[https://neovim.io/ | Neovim]] as a modern coding environment for C, C++, Rust, Python and other languages. **
+
+<div style="float: right">{{nvim-completion.png | maxwidth=600}}</div>
+
+Neovim has no shortage of powerful plugins for programmers, but it's a fast moving ecosystem.
+Picking the right combination of plugins and configuring them as an integrated development
+environment is still far from trivial. I also reviewed a number of GUIs and "super plugins"
+which aim to be a complete IDE, but all of them had maturity and usability issues.
+
+I curated a list of well-maintained plugins that take advantage of Neovim's built-in IDE components:
+
+ * Language Server Protocol, for semantic completion
+ * Treesitter, for semantic syntax highlighting
+ * Virtual text, for inline diagnostics
+ * Floating windows, for inline help and function parameter assistance
+
+The plugin ecosystem is still maturing, but over time the amount of Lua scripting required
+to piece together a fully functional IDE seems to be going down. Ideally, you wouldn't have
+to learn Lua to edit your Neovim config.
+
+** I want a programmer's editor without becoming the editor's programmer! **
+
+
+=== Features ===
+
+ * Quickly open files with fuzzy search
+ * Semantic completion
+   * Configures language servers for C/C++, Rust, Python
+   * Adding more languages made easy by lspconfig
+ * Inline diagnostics and hints
+
+
+=== Requirements ===
+
+TODO: Minimum neovim version?
+
+TODO: Recommend a good terminal with undercurls, mouse support...
+
+TODO: Nerd fonts installation
+
+
+=== Installation ===
+
+To get started, download nwiz.lua to Neovim's plugin dir so it will be autoloaded at startup:
+
+{{{
+ curl https://codewiz.org/pub/dotfiles/nwiz.lua -o ~/.config/nvim/plugin/nwiz.lua
+}}}
+
+Everything is in a single file for ease of installation and to remind me to keep it short and simple.
+
+I'm also sharing my generic .vimrc, which doesn't use Lua and works with both Neovim and Vim 9:
+
+{{{
+ curl https://codewiz.org/pub/dotfiles/vimrc
+}}}
+
+Rather than overwrite your existing ##~./vimrc##, you might want to review and take some of my settings
+for syntax highlighting and smart indentation.
+
+
+=== Packer ====
+
+On first run, Packer (the plugin manager) will bootstrap itself and install all plugins.
+There's a good chance this will fail the first time due to the asynchronous nature of PackerSync
+(patches welcome!)
+
+Any time you edit the list of plugins, run ##:PackerSync## to install, uninstall & update them. Easy!
+
+=== Language Servers ===
+
+Neovim 0.7 comes with a built-in LSP client. The official [[https://github.com/neovim/nvim-lspconfig | nvim-lspconfig]]
+plugin abstracts the details of spawning the correct Language Server for a multitude of filetypes.
+
+Download and installation of language servers can be managed automatically by
+[[https://github.com/williamboman/nvim-lsp-installer | nvim-lsp-installer]], but I find that it's
+simpler (and much safer!) to install the already packaged ones from Linux distro. This also ensures
+that they stay aligned with the system toolchain.
+
+ * Rust: rust-analyzer
+ * C++: clangd
+ * Python: python-lsp-server (which uses mypy, pylint, autopep8...)
+
+=== Treesitter syntax parsers ===
+
+Install the ones you like from this list: https://github.com/nvim-treesitter/nvim-treesitter#supported-languages
+
+For instance, I installed these:
+
+{{{
+:TSInstall cpp rust lua python bash vim
+}}}
+
+You can refresh your parsers at any time with ##:TSUpdate##
+
+=== Semantic completion ===
+
+Just press TAB!
+
+TODO: docs for [[https://github.com/hrsh7th/nvim-cmp#readme | cmp-nvim]]
+
+
+=== Finding and opening files ===
+
+{{nvim-telescope.png | maxwidth=400}}
+
+
+TODO: docs for [[https://github.com/nvim-telescope/telescope.nvim | telescope.nvim]]
+
+=== Realtime diagnostics and hints ===
+
+TODO: document