pkgs: {
  opts = {
    number = true;
    relativenumber = true;
    shiftwidth = 2;
    tabstop = 2;
    scrolloff = 999;

    textwidth = 83;
    linebreak = true;

    completeopt = ["menu" "menuone" "noselect"];
  };
  keymaps = [
    {
      mode = ["n" "i" "t"];
      key = "<A-h>";
      action = ''<C-\><C-N><C-w>h'';
    }
    {
      mode = ["n" "i" "t"];
      key = "<A-j>";
      action = ''<C-\><C-N><C-w>j'';
    }
    {
      mode = ["n" "i" "t"];
      key = "<A-k>";
      action = ''<C-\><C-N><C-w>k'';
    }
    {
      mode = ["n" "i" "t"];
      key = "<A-l>";
      action = ''<C-\><C-N><C-w>l'';
    }
    {
      key = "<A-t>";
      action = ":Neotree float reveal_force_cwd<cr>";
    }
    {
      key = "<A-b>";
      action = ":Neotree float buffers<cr>";
    }
    {
      key = "<A-s>";
      action = ":Neotree float git_status<cr>";
    }
  ];
  extraPlugins = with pkgs.vimPlugins; [
    vim-airline-themes
  ];
  plugins = {
    airline = {
      enable = true;
      settings = {
        powerline_fonts = true;
      };
    };
    cmp = {
      enable = true;
      autoEnableSources = true;
      settings = {
        snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end";
        mappings = {
          "<C-Space>" = "cmp.mapping.complete()";
          "<C-d>" = "cmp.mapping.scroll_docs(-4)";
          "<C-e>" = "cmp.mapping.close()";
          "<C-f>" = "cmp.mapping.scroll_docs(4)";
          "<CR>" = "cmp.mapping.confirm({ select = true })";
          "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
          "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
        };
        sources = [
          {name = "luasnip";}
          {name = "nvim_lsp";}
          {name = "path";}
          {
            name = "buffer";
            option.get_bufnrs.__raw = "vim.api.nvim_list_bufs";
          }
          {name = "git";}
          {name = "conventionalcommits";}
        ];
      };
    };
    cmp-path.enable = true;
    coq-nvim = {
      enable = false;
      settings = {
        auto_start = "shut-up";
      };
      installArtifacts = true;
    };
    dashboard = {
      enable = true;
    };
    lsp = {
      enable = true;
      servers = {
        nil_ls.enable = true;
        rust-analyzer = {
          enable = true;
          installCargo = true;
          installRustc = true;
        };
        ltex.enable = true;
        java-language-server.enable = true;
      };
    };
    lspkind = {
      enable = true;

      cmp = {
        enable = true;
        menu = {
          nvim_lsp = "[LSP]";
          nvim_lua = "[api]";
          path = "[path]";
          luasnip = "[snip]";
          buffer = "[buffer]";
          neorg = "[neorg]";
        };
      };
    };
    lsp-format = {
      enable = true;
    };
    luasnip.enable = true;
    quickmath.enable = true;
    treesitter = {
      enable = true;
      indent = true;
    };
    treesitter-context = {
      enable = true;
    };
    treesitter-refactor = {
      enable = true;
    };
    mini = {
      enable = true;
    };
    markdown-preview = {
      enable = true;
    };
    nix = {
      enable = true;
    };
    neo-tree = {
      enable = true;
      autoCleanAfterSessionRestore = true;
      closeIfLastWindow = true;
    };
    nvim-autopairs = {
      enable = true;
    };
    vim-css-color = {
      enable = true;
    };
    vimtex = {
      enable = true;
    };
  };
}