# Nixvim

This module provides some defaults to quickly set up Nixvim with some plugins. 

View the [*synix* Home Manager module on Forgejo](https://git.sid.ovh/sid/synix/tree/master/modules/home/nixvim).

## Config

Here is an example configuration:

```nix
# flake.nix
inputs = {
  nixvim.url = "github:nix-community/nixvim";
  nixvim.inputs.nixpkgs.follows = "nixpkgs";
};
```

```nix
# home/YOU/default.nix
{ inputs, lib, config, pkgs, ... }:

{
  imports = [
    inputs.synix.homeModules.stylix # This module works great with stylix
    inputs.synix.homeMmodules.nixvim # You need to import this module
  ];

  programs.nixvim = {
    enable = true;
    #colorschemes.SCHEME.enable = true; # If you do not use the stylix module, set a scheme manually
    # This module provides defaults for the following plugins.
    # They are all enabled by default.
    plugins = {
      cmp.enable = true; # Auto completion
      dap.enable = true; # Debugging 
      lsp.enable = true; # Language server
      lualine.enable = true; # Statusline
      luasnip.enable = true; # Coding snippets
      markdown-preview.enable = true; # Markdown preview in Browser
      telescope.enable = true; # Fuzzy finder
      treesitter.enable = true; # Syntax highlighting
      trouble.enable = true; # Diagnostic messages
    };
  };

  stylix = {
    enable = true;
    scheme = "dracula"; # This automatically sets the nixvim scheme as well
  };
}
```

## Keymaps

This module sets some keymaps. Here are some important ones:

> `<leader>` defaults to the space key

key | action
---|---
`<leader>pv` | ex command (file explorer)
`<leader>s` | search and replace
`<C-a>` | select whole buffer
`<leader>ss` | toggle spell checking
`<leader>se` | switch to english spell checking
`<leader>sg` | switch to german spell checking
`z=` | correction suggestions for a misspelled word
`zg` | add word to spell list
`<C-CR>` | confirm selection in completion menu
`<Tab>` | select next item in completion menu
`<S-Tab>` | select previous item in completion menu
`gd` | go to definition
`K` | display more information about word under cursor
`<leader>bl` | list buffers
`<C-S-J>` | next buffer
`<C-S-K>` | previous buffer
`<leader>fb` or `<C-e>` | open file browser
`<leader>ff` | find files by name
`<leader>fg` or `<C-f>` | find files containing string
`<leader>xd` | toggle diagnostics
`<leader>xq` | toggle quick fix list
`<leader>m` | run make command
`<leader>xl` | toggle loclist list
`<leader>xx` | toggle diagnostics list
`<leader>xq` | toggle quifick list
`<C-A-J>` | previous quickfix item
`<C-A-K>` | next quickfix item
`<leader>ca` | apply code action

See [keymaps.nix](https://git.sid.ovh/sid/synix/blob/master/modules/home/nixvim/keymaps.nix) and [plugins](https://git.sid.ovh/sid/synix/blob/master/modules/home/nixvim/plugins/) for more details.

These commands do not have keymaps yet but might be useful anyway:

command | action
---|---
`:MarkdownPreview` | live render the current markdown buffer
