diff --git a/README.md b/README.md
index 47436d1..0bfa4e2 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,8 @@ External Requirements:
- Or on Windows, just install using `winget install alacritty --source winget`
> **NOTE**
-> See [Windows Installation](#Windows-Installation) to double check any additional Windows notes
+> See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes
+> and quick install snippets
Neovim's configurations are located under the following paths, depending on your OS:
@@ -84,13 +85,18 @@ current plugin status.
* What should I do if I already have a pre-existing neovim configuration?
* You should back it up and then delete all associated files.
- * This includes your existing init.lua and the neovim files in `~/.local` which can be deleted with `rm -rf ~/.local/share/nvim/` or their windows counterparts in `AppData\Local\nvim-data`
+ * This includes your existing init.lua and the neovim files in `~/.local`
+ which can be deleted with `rm -rf ~/.local/share/nvim/` or their
+ windows counterparts in `AppData\Local\nvim-data`
* Can I keep my existing configuration in parallel to kickstart?
- * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME` to maintain multiple configurations. For example, you can install the kickstart configuration in `~/.config/nvim-kickstart` and create an alias:
+ * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
+ to maintain multiple configurations. For example, you can install the kickstart
+ configuration in `~/.config/nvim-kickstart` and create an alias:
```sh
alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim'
```
- When you run Neovim using `nvim-kickstart` alias it will use the alternative config directory and the matching local directory `~/.local/share/nvim-kickstart`.
+ When you run Neovim using `nvim-kickstart` alias it will use the alternative
+ config directory and the matching local directory `~/.local/share/nvim-kickstart`.
You could also run your configuration inline, for example in Windows Powershell:
```pwsh
$env:NVIM_APPNAME = 'nvim-kickstart'; nvim
@@ -98,9 +104,30 @@ current plugin status.
* What if I want to "uninstall" this configuration:
* See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information
-### Windows Installation
+### Install Recipes
-Installation requires gcc and make, for which you don't need to change the config,
+Below you can find OS specific install instructions for Neovim and dependencies.
+
+After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step.
+
+#### Windows Installation
+
+Windows with Microsoft C++ Build Tools and CMake
+Installation may require installing build tools and updating the run command for `telescope-fzf-native`
+
+See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation)
+
+This requires:
+
+- Install CMake and the Microsoft C++ Build Tools on Windows
+
+Using this, you can change some plugin configurations such as `telescope-fzf-native` to use `cmake`:
+```lua
+{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
+```
+
+Windows with gcc/make using chocolatey
+Alternatively, one can install gcc and make which don't require changing the config,
the easiest way is to use choco:
1. install [chocolatey](https://chocolatey.org/install)
@@ -115,5 +142,40 @@ open a new one so that choco path is set, and run in cmd as **admin**:
```
choco install -y neovim git ripgrep wget fd unzip gzip mingw make
```
+
+WSL (Windows Subsystem for Linux)
-Then continue with the [Install Kickstart](#Install-this-Configuration) step.
+```
+wsl --install
+wsl
+sudo add-apt-repository ppa:neovim-ppa/unstable -y
+sudo apt update
+sudo apt install make gcc ripgrep unzip neovim
+```
+
+
+#### Linux Install
+Ubuntu Install Steps
+
+```
+sudo add-apt-repository ppa:neovim-ppa/unstable -y
+sudo apt update
+sudo apt install make gcc ripgrep unzip neovim
+```
+
+Debian Install Steps
+
+```
+sudo apt update
+sudo apt install make gcc ripgrep unzip git
+echo "deb https://deb.debian.org/debian unstable main" | sudo tee -a /etc/apt/sources.list
+sudo apt update
+sudo apt install -t unstable neovim
+```
+
+Fedora Install Steps
+
+```
+sudo dnf install -y gcc make git ripgrep fd-find neovim
+```
+
diff --git a/lua/kickstart/plugins/cmp.lua b/lua/kickstart/plugins/cmp.lua
index 6cda6ac..d2050f3 100644
--- a/lua/kickstart/plugins/cmp.lua
+++ b/lua/kickstart/plugins/cmp.lua
@@ -7,9 +7,9 @@ return {
{
'L3MON4D3/LuaSnip',
build = (function()
- -- Build Step is needed for regex support in snippets
- -- This step is not supported in many windows environments
- -- Remove the below condition to re-enable on windows
+ -- Build Step is needed for regex support in snippets.
+ -- This step is not supported in many windows environments.
+ -- Remove the below condition to re-enable on windows.
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
return
end
@@ -50,7 +50,7 @@ return {
--
-- No, but seriously. Please read `:help ins-completion`, it is really good!
mapping = cmp.mapping.preset.insert {
- -- scroll the documentation window [b]ack / [f]orward
+ -- Scroll the documentation window [b]ack / [f]orward
[''] = cmp.mapping.scroll_docs(-4),
[''] = cmp.mapping.scroll_docs(4),
@@ -60,9 +60,6 @@ return {
[''] = cmp.mapping.confirm { select = true },
[''] = cmp.mapping.abort(),
- [''] = cmp.mapping.scroll_docs(-4),
- [''] = cmp.mapping.scroll_docs(4),
-
-- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available.
@@ -110,7 +107,7 @@ return {
end
end, { 'i', 's' }),
- -- For more advanced luasnip keymaps (e.g. selecting choice nodes, expansion) see:
+ -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
},
sources = {
diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua
index 7ab4607..092192d 100644
--- a/lua/kickstart/plugins/debug.lua
+++ b/lua/kickstart/plugins/debug.lua
@@ -7,6 +7,9 @@ return {
-- Creates a beautiful debugger UI
'rcarriga/nvim-dap-ui',
+ -- Required dependency for nvim-dap-ui
+ 'nvim-neotest/nvim-nio',
+
-- Installs the debug adapters for you
'williamboman/mason.nvim',
'jay-babu/mason-nvim-dap.nvim',
diff --git a/lua/kickstart/plugins/gitsigns.lua b/lua/kickstart/plugins/gitsigns.lua
index 0fdef49..cb4168f 100644
--- a/lua/kickstart/plugins/gitsigns.lua
+++ b/lua/kickstart/plugins/gitsigns.lua
@@ -1,5 +1,5 @@
-- Here is a more advanced example where we pass configuration
--- options to `gitsigns.nvim`. This is equivalent to the following lua:
+-- options to `gitsigns.nvim`. This is equivalent to the following Lua:
-- require('gitsigns').setup({ ... })
--
-- See `:help gitsigns` to understand what the configuration keys do
diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua
new file mode 100644
index 0000000..7f0dc42
--- /dev/null
+++ b/lua/kickstart/plugins/lint.lua
@@ -0,0 +1,55 @@
+return {
+
+ { -- Linting
+ 'mfussenegger/nvim-lint',
+ event = { 'BufReadPre', 'BufNewFile' },
+ config = function()
+ local lint = require 'lint'
+ lint.linters_by_ft = {
+ markdown = { 'markdownlint' },
+ }
+
+ -- To allow other plugins to add linters to require('lint').linters_by_ft,
+ -- instead set linters_by_ft like this:
+ -- lint.linters_by_ft = lint.linters_by_ft or {}
+ -- lint.linters_by_ft['markdown'] = { 'markdownlint' }
+ --
+ -- However, note that this will enable a set of default linters,
+ -- which will cause errors unless these tools are available:
+ -- {
+ -- clojure = { "clj-kondo" },
+ -- dockerfile = { "hadolint" },
+ -- inko = { "inko" },
+ -- janet = { "janet" },
+ -- json = { "jsonlint" },
+ -- markdown = { "vale" },
+ -- rst = { "vale" },
+ -- ruby = { "ruby" },
+ -- terraform = { "tflint" },
+ -- text = { "vale" }
+ -- }
+ --
+ -- You can disable the default linters by setting their filetypes to nil:
+ -- lint.linters_by_ft['clojure'] = nil
+ -- lint.linters_by_ft['dockerfile'] = nil
+ -- lint.linters_by_ft['inko'] = nil
+ -- lint.linters_by_ft['janet'] = nil
+ -- lint.linters_by_ft['json'] = nil
+ -- lint.linters_by_ft['markdown'] = nil
+ -- lint.linters_by_ft['rst'] = nil
+ -- lint.linters_by_ft['ruby'] = nil
+ -- lint.linters_by_ft['terraform'] = nil
+ -- lint.linters_by_ft['text'] = nil
+
+ -- Create autocommand which carries out the actual linting
+ -- on the specified events.
+ local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
+ vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
+ group = lint_augroup,
+ callback = function()
+ require('lint').try_lint()
+ end,
+ })
+ end,
+ },
+}
diff --git a/lua/kickstart/plugins/lspconfig.lua b/lua/kickstart/plugins/lspconfig.lua
index 5b2b96e..26db785 100644
--- a/lua/kickstart/plugins/lspconfig.lua
+++ b/lua/kickstart/plugins/lspconfig.lua
@@ -2,7 +2,7 @@ return {
{ -- LSP Configuration & Plugins
'neovim/nvim-lspconfig',
dependencies = {
- -- Automatically install LSPs and related tools to stdpath for neovim
+ -- Automatically install LSPs and related tools to stdpath for Neovim
'williamboman/mason.nvim',
'williamboman/mason-lspconfig.nvim',
'WhoIsSethDaniel/mason-tool-installer.nvim',
@@ -16,15 +16,15 @@ return {
{ 'folke/neodev.nvim', opts = {} },
},
config = function()
- -- Brief Aside: **What is LSP?**
+ -- Brief aside: **What is LSP?**
--
- -- LSP is an acronym you've probably heard, but might not understand what it is.
+ -- LSP is an initialism you've probably heard, but might not understand what it is.
--
-- LSP stands for Language Server Protocol. It's a protocol that helps editors
-- and language tooling communicate in a standardized fashion.
--
-- In general, you have a "server" which is some tool built to understand a particular
- -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc). These Language Servers
+ -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
-- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
-- processes that communicate with some "client" - in this case, Neovim!
--
@@ -48,9 +48,8 @@ return {
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
callback = function(event)
- -- NOTE: Remember that lua is a real programming language, and as such it is possible
- -- to define small helper and utility functions so you don't have to repeat yourself
- -- many times.
+ -- NOTE: Remember that Lua is a real programming language, and as such it is possible
+ -- to define small helper and utility functions so you don't have to repeat yourself.
--
-- In this case, we create a function that lets us more easily define mappings specific
-- for LSP related items. It sets the mode, buffer and description for us each time.
@@ -79,14 +78,14 @@ return {
-- Symbols are things like variables, functions, types, etc.
map('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
- -- Fuzzy find all the symbols in your current workspace
- -- Similar to document symbols, except searches over your whole project.
+ -- Fuzzy find all the symbols in your current workspace.
+ -- Similar to document symbols, except searches over your entire project.
map('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- Workspace functionality dependant on LSPs
map('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
map('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
- -- Rename the variable under your cursor
+ -- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map('rn', vim.lsp.buf.rename, '[R]e[n]ame')
@@ -95,11 +94,11 @@ return {
map('ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
-- Opens a popup that displays documentation about the word under your cursor
- -- See `:help K` for why this keymap
+ -- See `:help K` for why this keymap.
map('K', vim.lsp.buf.hover, 'Hover Documentation')
-- WARN: This is not Goto Definition, this is Goto Declaration.
- -- For example, in C this would take you to the header
+ -- For example, in C this would take you to the header.
map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-- The following two autocommands are used to highlight references of the
@@ -123,7 +122,7 @@ return {
})
-- LSP servers and clients are able to communicate to each other what features they support.
- -- By default, Neovim doesn't support everything that is in the LSP Specification.
+ -- By default, Neovim doesn't support everything that is in the LSP specification.
-- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
local capabilities = vim.lsp.protocol.make_client_capabilities()
@@ -152,7 +151,7 @@ return {
lua_ls = {
-- cmd = {...},
- -- filetypes { ...},
+ -- filetypes = { ...},
-- capabilities = {},
settings = {
Lua = {
@@ -171,7 +170,7 @@ return {
-- other tools, you can run
-- :Mason
--
- -- You can press `g?` for help in this menu
+ -- You can press `g?` for help in this menu.
require('mason').setup()
-- You can add other tools here that you want Mason to install
diff --git a/lua/kickstart/plugins/telescope.lua b/lua/kickstart/plugins/telescope.lua
index b187eb9..5ec73ab 100644
--- a/lua/kickstart/plugins/telescope.lua
+++ b/lua/kickstart/plugins/telescope.lua
@@ -12,7 +12,7 @@ return {
branch = '0.1.x',
dependencies = {
'nvim-lua/plenary.nvim',
- { -- If encountering errors, see telescope-fzf-native README for install instructions
+ { -- If encountering errors, see telescope-fzf-native README for installation instructions
'nvim-telescope/telescope-fzf-native.nvim',
-- `build` is used to run some command when the plugin is installed/updated.
@@ -35,19 +35,19 @@ return {
-- it can fuzzy find! It's more than just a "file finder", it can search
-- many different aspects of Neovim, your workspace, LSP, and more!
--
- -- The easiest way to use telescope, is to start by doing something like:
+ -- The easiest way to use Telescope, is to start by doing something like:
-- :Telescope help_tags
--
-- After running this command, a window will open up and you're able to
- -- type in the prompt window. You'll see a list of help_tags options and
+ -- type in the prompt window. You'll see a list of `help_tags` options and
-- a corresponding preview of the help.
--
- -- Two important keymaps to use while in telescope are:
+ -- Two important keymaps to use while in Telescope are:
-- - Insert mode:
-- - Normal mode: ?
--
-- This opens a window that shows you all of the keymaps for the current
- -- telescope picker. This is really useful to discover what Telescope can
+ -- Telescope picker. This is really useful to discover what Telescope can
-- do as well as how to actually do it!
-- [[ Configure Telescope ]]
@@ -69,7 +69,7 @@ return {
},
}
- -- Enable telescope extensions, if they are installed
+ -- Enable Telescope extensions if they are installed
pcall(require('telescope').load_extension, 'fzf')
pcall(require('telescope').load_extension, 'ui-select')
@@ -157,14 +157,14 @@ return {
-- Slightly advanced example of overriding default behavior and theme
vim.keymap.set('n', '/', function()
- -- You can pass additional configuration to telescope to change theme, layout, etc.
+ -- You can pass additional configuration to Telescope to change the theme, layout, etc.
builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
winblend = 10,
previewer = false,
})
end, { desc = '[/] Fuzzily search in current buffer' })
- -- Also possible to pass additional configuration options.
+ -- It's also possible to pass additional configuration options.
-- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap.set('n', 's/', function()
builtin.live_grep {
@@ -173,7 +173,7 @@ return {
}
end, { desc = '[S]earch [/] in Open Files' })
- -- Shortcut for searching your neovim configuration files
+ -- Shortcut for searching your Neovim configuration files
vim.keymap.set('n', 'sn', function()
builtin.find_files {
-- This will ignore the directories you specified
diff --git a/lua/kickstart/plugins/tokyonight.lua b/lua/kickstart/plugins/tokyonight.lua
index 6ac97c7..3e5e74d 100644
--- a/lua/kickstart/plugins/tokyonight.lua
+++ b/lua/kickstart/plugins/tokyonight.lua
@@ -1,18 +1,18 @@
return {
{ -- You can easily change to a different colorscheme.
-- Change the name of the colorscheme plugin below, and then
- -- change the command in the config to whatever the name of that colorscheme is
+ -- change the command in the config to whatever the name of that colorscheme is.
--
- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`
+ -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
'folke/tokyonight.nvim',
- priority = 1000, -- make sure to load this before all the other start plugins
+ priority = 1000, -- Make sure to load this before all the other start plugins.
init = function()
-- Load the colorscheme here.
-- Like many other themes, this one has different styles, and you could load
-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
vim.cmd.colorscheme 'tokyonight-night'
- -- You can configure highlights by doing something like
+ -- You can configure highlights by doing something like:
vim.cmd.hi 'Comment gui=none'
end,
},
diff --git a/lua/kickstart/plugins/which-key.lua b/lua/kickstart/plugins/which-key.lua
index a0e9d82..5992551 100644
--- a/lua/kickstart/plugins/which-key.lua
+++ b/lua/kickstart/plugins/which-key.lua
@@ -1,4 +1,4 @@
--- NOTE: Plugins can also be configured to run lua code when they are loaded.
+-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
--
-- This is often very useful to both group configuration, as well as handle
-- lazy loading plugins that don't need to be loaded immediately at startup.
diff --git a/lua/lazy-plugins.lua b/lua/lazy-plugins.lua
index 7669dd9..c4541d7 100644
--- a/lua/lazy-plugins.lua
+++ b/lua/lazy-plugins.lua
@@ -5,7 +5,7 @@
--
-- You can press `?` in this menu for help. Use `:q` to close the window
--
--- To update plugins, you can run
+-- To update plugins you can run
-- :Lazy update
--
-- NOTE: Here is where you install your plugins.
@@ -111,15 +111,16 @@ require('lazy').setup({
-- The following two comments only work if you have downloaded the kickstart repo, not just copy pasted the
-- init.lua. If you want these files, they are in the repository, so you can just download them and
- -- put them in the right spots if you want.
+ -- place them in the correct locations.
- -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for kickstart
+ -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
--
- -- Here are some example plugins that I've included in the kickstart repository.
+ -- Here are some example plugins that I've included in the Kickstart repository.
-- Uncomment any of the lines below to enable them (you will need to restart nvim).
require 'kickstart.plugins.debug',
require 'kickstart.plugins.indent_line',
+ require 'kickstart.plugins.lint',
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- This is the easiest way to modularize your config.
@@ -129,8 +130,8 @@ require('lazy').setup({
{ import = 'custom.plugins' },
}, {
ui = {
- -- If you have a Nerd Font, set icons to an empty table which will use the
- -- default lazy.nvim defined Nerd Font icons otherwise define a unicode icons table
+ -- If you are using a Nerd Font: set icons to an empty table which will use the
+ -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table
icons = vim.g.have_nerd_font and {} or {
cmd = '⌘',
config = '🛠',
diff --git a/lua/options.lua b/lua/options.lua
index 5eb8e5c..09cf853 100644
--- a/lua/options.lua
+++ b/lua/options.lua
@@ -17,7 +17,7 @@ vim.opt.shellpipe = '2>&1 | Out-File -Encoding UTF8 %s'
-- Format settings
-- Make line numbers default
-vim.opt.nu = true
+vim.opt.number = true
vim.opt.relativenumber = true
-- Indenting
@@ -32,7 +32,7 @@ vim.opt.wrap = false
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt.mouse = 'a'
--- Don't show the mode, since it's already in status line
+-- Don't show the mode, since it's already in the status line
vim.opt.showmode = false
-- Sync clipboard between OS and Neovim.
@@ -46,7 +46,7 @@ vim.opt.breakindent = true
-- Save undo history
vim.opt.undofile = true
--- Case-insensitive searching UNLESS \C or capital in search
+-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
vim.opt.ignorecase = true
vim.opt.smartcase = true
@@ -64,7 +64,7 @@ vim.opt.timeoutlen = 300
vim.opt.splitright = true
vim.opt.splitbelow = true
--- Sets how neovim will display certain whitespace in the editor.
+-- Sets how neovim will display certain whitespace characters in the editor.
-- See `:help 'list'`
-- and `:help 'listchars'`
vim.opt.list = true