Commit Graph

294 Commits

Author SHA1 Message Date
Paul Stemmet b62a59e17b
nvim/plug/cmp-spell: fix path expansion
Silly mistakes:

1. Only running `vim.fn.expand/1` in the if check
2. Using `vim.fn.exists/1` for file checks (it doesn't do this)

Just rip the whole loop out, as probably a user isn't expecting
`[count]spell-action` to select different files depending on whether
they (and how many of them) exist.

Still leaves the problem of file creation, but ¯\_(ツ)_/¯
2022-10-08 16:51:44 +00:00
Paul Stemmet 9e6a96c5b0
nvim/diagnostic: clobber repeated diagnostic floats
Due to the way we render `vim.diagnostic.open_float/1` on every `CursorHold`
event, this window will open over other floats that a user (may have)
opened, particularly `keys.Buffer.Lsp.N.ShowDocumentation`, which can be
frustrating.

This commit changes the behaviour to open the diagnostic float once per
cursor location, as this is probably what the user wants for the most
part. It is still possible for a user to run into the scenario where
they move to a diagnostic and open a float only for it to be replaced
on the `CursorHold`, but this should be much more infrequent.

Credit to github.com/wookayin for explaining how to do this.
See:
  wookayin/dotfiles@ee687b036c
  /nvim/lua/config/lsp.lua
  #L249-L263
2022-10-08 16:51:44 +00:00
Paul Stemmet 8d00216396
nvim/key: add Super keys
super keys are super powered binds accessible via <C-Arrow_Key>, for
example, <C-Left> opens the current file tree.

These binds are expected to be used often and provide 4 fundamental
features:

1. Terminal               | <C-Up>
2. Fuzzy Search           | <C-Right>
3. Workspace diagnostics  | <C-Down>
4. File tree              | <C-Left>

Each is powerful, but can be thought of as a different 'mode' that
should be intentionally invoked by the user.

Fuzzy search has perhaps the most potential of the supers, allowing for
everything from fuzzy file searches to direct integration with the
active LSP, allowing for fuzzy searching of actual symbols; functions,
classes, etc.

A builtin terminal is useful for running background jobs (compiles,
tests), and is generally useful for all the things a shell is when you
don't have a multiplexer of some kind (tmux, good terminal, etc)

A file tree is useful for IDE like movement between files and getting a
general view of the current workspace's git +-~ status. Not mention for
deletion and/or movement of files.

Last but not least, diagnostics are great for understanding the active
codebase's health, and for providing an aggregate overview of
outstanding issues in the code.
2022-10-08 16:51:37 +00:00
Paul Stemmet 15e77291d9
nvim/plug: +toggleterm.nvim@v2
Provides a floating terminal window that can be easily toggled, bound to
`<C-Up>`.

Not much more to say, this is just awesome.
2022-10-08 16:51:03 +00:00
Paul Stemmet 69974b4d7e
nvim/plug: +trouble.nvim@master
This plugin provides a concise listing of current diagnostic messages
across the workspace, grouped by file.

It replaces neomake / quickfix lists, and importantly is a lot less
buggy, faster and less intrusive than the previous solution.

You can toggle it via `<C-Down>`.
2022-10-08 16:51:03 +00:00
Paul Stemmet d6f7bbaa3a
nvim/plug: +telescope.nvim@0.1.x, -fzf, -fzf.nvim
This commit removes (direct) FZF plugins in favor of telescope.nvim,
which provides a significantly nicer, native experience in doing fuzzy
searching.

The primary out of the box method for interacting with Telescope is
through the <C-Right> super key, which opens a 'meta-menu' of searchers
that you can choose from.

Some of the more interesting options are 'find_files', 'live_grep_search',
and 'lsp_symbols'. Note that you can use fuzzy searching for these. For
example, the chord <C-Right>ff<CR> brings up the 'find_files' menu.

Users are encouraged to create their own key maps for commonly used
searchers.

Also ignore Telescope windows in pear-tree as pear-tree's <CR> bind seems
to interact poorly with Telescope usage of <CR> (i.e it blocks it completely),
so we disable it
2022-10-08 16:50:34 +00:00
Paul Stemmet 3cb079be10
nvim/plug/neotree: <F2> -> <C-Left>
and remove old diagnostic settings, as we use a separate file for that
now
2022-10-05 18:38:09 +00:00
Paul Stemmet 72434c743e
merge: develop <--- feature/nvim-completion
* HEAD
| \
| * b263e62 <github@luxolus.com> nvim/init.post: add color overrides
| * c7ba099 <github@luxolus.com> nvim/spellfile: add base wordlist
| * 178d0a7 <github@luxolus.com> nvim/plug: +cmp-spell@master
| * 267fb25 <github@luxolus.com> nvim/plug: +nvim-cmp@master +cmp plugins...
| * b3cbfbd <github@luxolus.com> nvim/diagnostic: configure neovim's diagnostics API
| /
| develop

Signed-off-by: Bazaah <github@luxolus.com>
2022-10-05 18:37:31 +00:00
Paul Stemmet b263e62f3a
nvim/init.post: add color overrides
As something keeps resetting these, we'll just reset them right back
2022-10-05 18:36:55 +00:00
Paul Stemmet c7ba09929a
nvim/spellfile: add base wordlist
These are just the words I came across while doing development,
presumably there will be many more in the future
2022-10-05 18:36:55 +00:00
Paul Stemmet 178d0a7340
nvim/plug: +cmp-spell@master
This commit adds integration for the builtin spell checker to our auto
completion engine.

Now, unfortunately, it is not nearly as intelligent as coc-spell-checker
is, and is missing _lots_ of common words that I/we use every day.

To alleviate this a bit, there are three spell files that can be used to
add/remove/override spell words:

1. <workspace>/.vim/words.utf-8.add
2. ~/.config/nvim/words.utf-8.add
3. $PSOXIZSH/nvim/spellfile/words.utf-8.add

You may also easily add / remove words from a given file via:

- [count]<Leader>ss: Whitelist word in `count` spell file, defaulting to
  the lowest write-able file
- [count]<Leader>sw: Blacklist word in `count` spell file, defaulting to
  the lowest write-able file
- [count]<Leader>sus: Undo whitelist word in `count` spell file
- [count]<Leader>suw: Undo blacklist word in `count` spell file
- ]s: Next bad word
- [s: Previous bad word
2022-10-05 18:36:54 +00:00
Paul Stemmet 267fb252c7
nvim/plug: +nvim-cmp@master +cmp plugins...
This commit adds (nvim-)cmp as our completion engine / framework.

We also add completion sources for (file)paths, buffer contents, LSP
actions and snippets -- courtesy of vsnip.

This provides similar functionality to coc's completion engine, but
with (much) better support for LSP actions, lua native key maps and
significantly more configuration options that can be easily overridden
but psoxizsh users.

We add similar default key maps as with what existed in coc, namely
that <CR> exits the autocompletion window, <C-Space> does the selected
LSP action, <Tab>/<S-Tab> cycles through options and <PageUp/Down>
scrolls documentation of the current item.

We also explicitly enable completion / snippet support in client capacities
sent to LSP servers, as many require this before offering completions
2022-10-05 18:36:54 +00:00
Paul Stemmet b3cbfbd26f
nvim/diagnostic: configure neovim's diagnostics API
Basic run down is:

- Disable virtual_text
- Add severity icons
- Add key maps for goto prev/next diagnostic
- Add diagnostic popup on hover
2022-10-05 18:36:54 +00:00
Paul Stemmet ccf65fecb1
merge: develop <--- feature/nvim-lsp
* HEAD
| \
| * b43f8da <github@luxolus.com> nvim/plug: +nvim-treesitter@master
| * 67d2949 <github@luxolus.com> nvim/plug: +rust-tools.nvim@master, +lua-dev.nvim@master
| * baeffe7 <github@luxolus.com> nvim/plug: +fidget@master
| * 93cdfd0 <github@luxolus.com> nvim/plug: +nlsp-settings.nvim@main
| * 6c34c88 <github@luxolus.com> nvim/plug: +nvim-lspconfig@master
| * bb937f9 <github@luxolus.com> nvim/plug: -coc.nvim -neomake +mason.nvim@main +mason-lspconfig.nvim@main
| * bb4fa19 <github@luxolus.com> nvim/plug: -nvim-yarp -vim-hug-neovim-rpc
| * 635eb80 <github@luxolus.com> nvim/lsp/servers: add json,yaml,vim,lua
| * af4b4fa <github@luxolus.com> nvim/lsp/preset: add presets for many languages
| * 7ff228a <github@luxolus.com> nvim/lsp/util: add Servers, Server, Filter
| /
| develop

Signed-off-by: Bazaah <github@luxolus.com>
2022-10-05 18:34:34 +00:00
Paul Stemmet b43f8da756
nvim/plug: +nvim-treesitter@master
Adds support for treesitter syntax / grammars when editing files.

This is currently an experimental neovim feature but is (very) likely to
be merged into the upstream in one of the next releases.
2022-10-05 18:33:40 +00:00
Paul Stemmet 67d2949984
nvim/plug: +rust-tools.nvim@master, +lua-dev.nvim@master
These are helper plugs for setting up the language servers for Rust
and Lua respectively
2022-10-05 18:33:40 +00:00
Paul Stemmet baeffe7989
nvim/plug: +fidget@master
This is a plugin for reporting '$/progress' status messages from neovim.

Realistically, only (some) LSP servers actually use this, but it
provides a clean, minimal method for understanding what an LSP is
working on at the minute.

`Server.Rust`, `Server.Lua` and `Server.Json` support it at a minimum,
from my personal testing
2022-10-05 18:33:40 +00:00
Paul Stemmet 93cdfd051f
nvim/plug: +nlsp-settings.nvim@main
This plugin provides project (and user) local configuration files for
LSP settings, similiar to coc-settings files.

By default, it will search

- $HOME/.config/nlsp-settings/<language-server>.json
- <project-root>/.nlsp-settings/<language-server>.json

for configuration, automatically updating the language server with the
settings found within. These override any settings set within lua...
bare this in mind.

You may access the associated files via:

:LspSettings [local] <language>|buffer
2022-10-05 18:33:40 +00:00
Paul Stemmet 6c34c88896
nvim/plug: +nvim-lspconfig@master
This plugin provides the tools for initializing language servers, using
the builtin neovim LSP client. It provides the major low level glue for
actually starting and configuring a given language server; however it
**does not** ensure that the actual language server is present on the
system / in PATH.

That function is handled by mason / mason-lspconfig, which will prompt
the user to install the necessary server(s) upon calling
`lspconfig[$server].setup { ... }`.

We provide a default on_attach function the sets up some default key
maps for LSP related functionality, loading a user overridable map of
language servers and their associated setup objects or functions.

Note that "setting up" a language server is not the same as loading it,
which is a considerably more expensive operation. Hence, we make no
effort to lazily setup language servers.
2022-10-05 18:33:39 +00:00
Paul Stemmet bb937f9db7
nvim/plug: -coc.nvim -neomake +mason.nvim@main +mason-lspconfig.nvim@main 2022-10-05 18:33:39 +00:00
Paul Stemmet bb4fa19006
nvim/plug: -nvim-yarp -vim-hug-neovim-rpc
Removed unused plugins
2022-10-05 18:33:39 +00:00
Paul Stemmet 635eb80808
nvim/lsp/servers: add json,yaml,vim,lua
These were selected as they seem generally useful in everyday usage of
neovim. Vim/Lua is obvious, Json and Yaml is generally useful for
config editing.
2022-10-05 18:33:39 +00:00
Paul Stemmet af4b4fa24d
nvim/lsp/preset: add presets for many languages
See below for the list of presets:

- Json
- Yaml
- Vim
- Lua
- Rust
- Go
- Awk
- Bash
- C
- CXX
- CMake
- CSS
- DockerFile
- Elixir
- GraphQL
- HTML
- JavaScript
- Jsonnet
- Markdown
- Perl
- PHP
- Python
- Ruby
- SQL
- Toml
- Terraform
- TypeScript
- TailwindCSS
- XML
2022-10-05 18:33:39 +00:00
Paul Stemmet 7ff228ae64
nvim/lsp/util: add Servers, Server, Filter
These objects provide a nice abstraction over the underlying
complexities of configuring language servers in native Neovim.

The idea is to allow users of the module to define Server/s that can
just be included somewhere and have them activate with fuss.

That said, we *do* want ways of configuring the underlying systems, and
this module provides two, one for direct consumers of this module
(Spec.setup), and one for users *of predefined Servers*, in the form of
Server.with/1.
2022-10-05 18:33:39 +00:00
Paul Stemmet 2fca27a5ab
merge: develop <--- feature/keymap
* HEAD
| \
| * 1f65b77 <github@luxolus.com> nvim: remove vimpeccable (plug/vimp)
| * cfbd1ad <github@luxolus.com> nvim/key/init: forward to key/map for now
| * 42feb20 <github@luxolus.com> nvim/key: add central location for all custom key binds
| * d557737 <github@luxolus.com> nvim/key: add Bind, BindGroup apis
| /
| develop

Signed-off-by: Bazaah <github@luxolus.com>
2022-10-05 18:32:17 +00:00
Paul Stemmet 1f65b77c0a
nvim: remove vimpeccable (plug/vimp)
This commit removes all vimpeccable (vimp) usage from the code base, as
it has been superseded by 'psoxizsh.key'.

In addition to simplifying the code, this also removes the annoying
spurious errors that would be generated when reloading configuration.

One thing to note: this commit also remove most of the LSP config we
have for coc.nvim. This is intentional, and will be corrected via a
future patchset utilizing the native neovim LSP client, as coc has
become annoying to maintain.
2022-10-05 17:49:19 +00:00
Paul Stemmet cfbd1adfc9
nvim/key/init: forward to key/map for now
This will likely change in the future, don't rely too hard on this behavior for
now
2022-10-05 17:49:19 +00:00
Paul Stemmet 42feb20e8b
nvim/key: add central location for all custom key binds
This commit adds a file that users can use to lookup available key binds
that are set.

The big benefit here is largely discoverability, as psoxizsh users no
longer are required to search thorough the entire code base looking for
binds.

That said, we *only* cover those explicitly set by psoxizsh, but
covering any created by plugins that may be used.

Still, this is a significant improvement compared to the previous
situation, and more importantly; prevents the situation from getting
worse as we add more plugins.

NOTE: Must go through prior work (util/keymap, vimp) and codebase, to properly
      search and replace all instances of key binding
2022-10-05 17:49:19 +00:00
Paul Stemmet d55773757b
nvim/key: add Bind, BindGroup apis
This commit adds wrapper objects around vim.keymap functionality.

Bind represents a single key bind, which can be register/2'ed with
Neovim. By default, Bind enables noremap and silent (:h map-arguments)
by default, as this is almost always what a user wants.

BindGroup(s) are DAG collections of child BindGroup(s) inner nodes
and Bind leaf nodes. Options are passed down the tree, though they
may be overridden by child objects.

Together they allow callers to create composable, lazy key bind
groupings, that can be instantiated together, while deferring the
implementation and activation of such groups.

Generally speaking, the big idea is to provide several well known
group 'aliases', for example, bind.Global, bind.User or bind.Lsp,
and let users override key binds in these groups, while the actual
functionality is provider (Bind.action) is opaque to them.
2022-10-05 17:49:19 +00:00
Paul Stemmet f0fa1c67fd
merge: develop <--- feature/ui-improvements
* HEAD
| \
| * 96ffa3e <github@luxolus.com> nvim/plug: +notify@v3
| * 861bbdf <github@luxolus.com> nvim/plug: -vim-one, +onedarkpro.nvim@master
| * 436d1d1 <github@luxolus.com> nvim/plug: bufferline.branch=v2.*
| /
| develop

Signed-off-by: Bazaah <github@luxolus.com>
2022-10-05 17:46:24 +00:00
Paul Stemmet 96ffa3e660
nvim/plug: +notify@v3
This is a much prettier frontend for the vim.notify API, which is used
by a lot of plugins to communicate information and/or errors.

Try it out yourself:
  :lua vim.notify('Hello, world!', 'info', { title = 'Testing Notify'})
2022-10-05 16:16:38 +00:00
Paul Stemmet 861bbdfb1d
nvim/plug: -vim-one, +onedarkpro.nvim@master
Better color scheme implementation of one
2022-10-05 16:16:37 +00:00
Paul Stemmet 436d1d17d3
nvim/plug: bufferline.branch=v2.*
As we're already using nvim >0.7.0 functionality
2022-10-05 16:16:37 +00:00
Paul Stemmet 6c8a018ae7
merge: develop <--- feature/misc-fixes-20221002
* HEAD
| \
| * ebf3308 <github@luxolus.com> nvim: linting, formatting
| * cb9e6a5 <github@luxolus.com> nvim/plug/neotree: remove spurious diagnostic sign config
| * 76a113c <github@luxolus.com> nvim/plug/lualine: slight fixes to settings
| * 184a8b6 <github@luxolus.com> nvim/util/highlight: for :highlight in lua
| * fb81d8b <github@luxolus.com> nvim/util: reorganize to allow for multiple submodules
| * a4410d6 <github@luxolus.com> nvim/autocmd: remove polyfill for <0.7 versions
| * ee4fac3 <github@luxolus.com> nvim/init.early: move &background, &termguicolors into early
| * d6827a4 <github@luxolus.com> nvim/init.post: set colorscheme to g.my_color_scheme
| * c815f5a <github@luxolus.com> tmux: fix truecolor in tmux
| * 138e66f <github@luxolus.com> zshrc: remove plugins.cargo
| /
| develop

Signed-off-by: Bazaah <github@luxolus.com>
2022-10-02 19:30:18 +00:00
Paul Stemmet ebf3308fc2
nvim: linting, formatting 2022-10-02 18:59:19 +00:00
Paul Stemmet cb9e6a55e5
nvim/plug/neotree: remove spurious diagnostic sign config
This shouldn't be being set by a plugin, particularly one that has
nothing to do with diagnostics
2022-10-02 18:59:19 +00:00
Paul Stemmet 76a113c215
nvim/plug/lualine: slight fixes to settings
- Enable toggleterm support (it now recognizes TT windows)
- Use gitsigns for branch detection (faster than running external
  git commands)
- Remove 'italic' from branch section highlights
2022-10-02 18:59:19 +00:00
Paul Stemmet 184a8b6724
nvim/util/highlight: for :highlight in lua
Provides a nicer API around doing highlighting in neovim / lua
2022-10-02 18:59:19 +00:00
Paul Stemmet fb81d8b2b9
nvim/util: reorganize to allow for multiple submodules
This change moves the original module loading utilities to
util/mload.lua, while providing a shim object that lazily attempts to
locate a function that matches the name of the indexed object.

This changes allows me to better organize utility functions
2022-10-02 18:59:19 +00:00
Paul Stemmet a4410d681f
nvim/autocmd: remove polyfill for <0.7 versions
This needlessly complicates the code, and is no longer needed, as nvim
0.7 is fairly common now.
2022-10-02 18:59:19 +00:00
Paul Stemmet ee4fac3834
nvim/init.early: move &background, &termguicolors into early
As many plugins use these when setting colors and highlights, leading to
poor coloring now that truecolor support is fixed in tmux
2022-10-02 18:59:18 +00:00
Paul Stemmet d6827a4fe5
nvim/init.post: set colorscheme to g.my_color_scheme 2022-10-02 18:59:18 +00:00
Paul Stemmet c815f5aa25
tmux: fix truecolor in tmux
So story time, I discovered :checkhealth in Neovim, and it gave a fairly
decent explanation of how to fix terminal truecolor support.

Namely, use `tmux-256color` (or `screen-256color`) for the
default-terminal, then force truecolor (Tc) in the terminal-overrides

It also mentioned that `focus-events` needs to be enabled for n/vim to
detect changes to its buffers. Notably, this allows vim to rerender
changed content when switching into a tmux pane containing a vim
session.
2022-10-02 18:59:17 +00:00
Paul Stemmet 138e66f245
zshrc: remove plugins.cargo
as the upstream has merged its functionality into plugins.rust, which is
already set.

See ohmyzsh/ohmyzsh#10270 , ohmyzsh/ohmyzsh@89a740b
2022-10-02 18:59:17 +00:00
psox cf932c2051 tmux: add ctrl-shift movement fragment file 2022-09-29 16:41:46 +01:00
psox fdba97e517
update formatting 2022-09-24 06:31:32 +00:00
psox 9c82dc25b4
recursive update 2022-09-24 06:29:05 +00:00
psox 1715cac996
fix grep error 2022-09-24 06:21:49 +00:00
Paul Stemmet 47e1dc2dd6
merge: develop <--- fix/coc-confirm-on-enter
* HEAD
| \
| * 1222c11 <github@luxolus.com> nvim/plug/coc: use <C-Space> instead of <CR> for pum inserts
| /
| develop

Signed-off-by: Bazaah <github@luxolus.com>
2022-08-30 13:40:34 +00:00
Paul Stemmet 1222c115c9
nvim/plug/coc: use <C-Space> instead of <CR> for pum inserts
Unfortunately pear-tree seems to conflict with coc in utilizing <CR>
(enter). Also the previous function assigned to <C-Space> wasn't very
useful (triggering autocompletion menu) as <TAB> already handles that.
2022-08-30 13:37:01 +00:00