{ self, inputs, ... }: { flake-file.inputs = { nvf = { url = "github:notashelf/nvf"; inputs.nixpkgs.follows = "nixpkgs"; }; }; perSystem = { system, pkgs, config, ... }: let commonNeovimModule = { config.vim = { options = { number = true; relativenumber = true; expandtab = true; shiftwidth = 4; tabstop = 4; softtabstop = 4; wrap = true; linebreak = true; }; syntaxHighlighting = true; theme.enable = true; theme.name = "catppuccin"; theme.style = "mocha"; git.enable = true; # git.neogit.enable = true; # https://github.com/akinsho/toggleterm.nvim terminal.toggleterm.enable = true; terminal.toggleterm.lazygit.enable = true; terminal.toggleterm.lazygit.direction = "float"; terminal.toggleterm.lazygit.mappings.open = ""; lsp.enable = true; languages = { enableTreesitter = true; enableFormat = true; nix.enable = true; yaml.enable = true; toml.enable = true; }; }; }; in { packages.my-neovim = ((inputs.nvf.lib.neovimConfiguration { inherit pkgs; modules = [ commonNeovimModule { # https://nvf.notashelf.dev/search.html config.vim = { utility.nix-develop.enable = true; utility.oil-nvim.enable = true; utility.oil-nvim.gitStatus.enable = true; filetree.neo-tree = { enable = true; }; # lazy = { # enable = true; # }; # globals = { # SimpylFold_docstring_preview = 1; # SimpylFold_fold_blank = 0; # }; # extraPlugins = with pkgs.vimPlugins; { # SimpylFold.package = SimpylFold; # }; telescope = { enable = true; extensions = [ { name = "fzf"; packages = [ pkgs.vimPlugins.telescope-fzf-native-nvim ]; setup = { fzf = { fuzzy = true; }; }; } ]; }; # Enable Treesitter treesitter = { enable = true; grammars = with pkgs.vimPlugins.nvim-treesitter-parsers; [ python ]; }; languages = { markdown = { enable = true; extensions = { # render-markdown-nvim.enable = true; markview-nvim.enable = true; }; }; bash.enable = true; css.enable = true; yaml.enable = true; toml.enable = true; python = { enable = true; dap.enable = true; format.type = [ "ruff" ]; }; }; keymaps = [ { desc = "Edit key mappings"; key = "ekm"; mode = [ "n" ]; silent = false; action = ":edit +/keymaps /home/john/.config/home-manager/jsl-dendritic/modules/programs/neovim.nix"; } { desc = "Home Manager Switch"; key = "nhms"; mode = [ "n" ]; silent = false; action = ":TermExec cmd='clear && nhms && exit' name='Nix Home Manager Switch' direction=float"; } { desc = "Key Maps [Telescope]"; key = "fkm"; mode = "n"; silent = false; action = ":Telescope keymaps"; } { desc = "Toggle Filesystem Tree [NeoTree]"; key = ""; mode = [ "n" "v" "t" ]; silent = false; action = ":Neotree toggle filesystem left action=show"; } { key = ""; mode = [ "n" "v" "t" ]; silent = false; action = ":ToggleTerm"; } ]; }; } ]; }).neovim).overrideAttrs (old: { pname = "my-neovim"; version = "1.0.0"; }); packages.neovim-min = ((inputs.nvf.lib.neovimConfiguration { inherit pkgs; modules = [ commonNeovimModule ]; }).neovim).overrideAttrs (old: { pname = "neovim-min"; version = "1.0.0"; }); }; }