{ config, pkgs, lib, mail, ... }: { # TODO # Linter (ale) # Markdown spellcheck # Autocomplete # Missing plugins # Telescope and fuzzy finder # Ruff linter for python and black # Format on exit # Good example: https://github.com/fred-drake/neovim/blob/master/config/python/language.nix programs.nixvim = { colorscheme = "sonokai"; enable = true; extraPlugins = [ pkgs.vimPlugins.indentLine pkgs.vimPlugins.polyglot pkgs.vimPlugins.sonokai ]; globals = { mapleader = ","; sonokai_style = "atlantis"; sonokai_disable_italic_comment = 1; }; keymaps = [ { key = "t"; action = "Neotree toggle"; } ]; opts = { colorcolumn = "88"; cursorline = true; number = true; termguicolors = true; }; plugins = { cmp = { enable = true; # Completion autoEnableSources = true; settings.sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; settings.mapping = { "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.close()"; "" = "cmp.mapping(cmp.mapping.select_next_item({behavior = cmp.SelectBehavior.Select}), {'i', 's'})"; "" = "cmp.mapping(cmp.mapping.select_prev_item({behavior = cmp.SelectBehavior.Select}), {'i', 's'})"; "" = "cmp.mapping.confirm({ select = false, behavior = cmp.ConfirmBehavior.Replace })"; }; }; committia.enable = true; gitgutter.enable = true; guess-indent.enable = true; lsp.enable = true; lsp.servers.pylsp = { enable = true; settings.plugins = { black.enabled = true; isort.enabled = true; ruff.enabled = true; }; }; lualine.enable = true; neo-tree.enable = true; web-devicons.enable = true; }; }; }