{ description = "My Completely Inelegant Neovim Flake"; inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; # This is where I import any custom packages that I want to install. By # placing them in the overlay the become available in 'pkgs' further # below. overlays = [ (self: super: { # Kept having issues with ones in stable and unstable so built custom revision vale = super.callPackage ./nix/vale.nix { }; # Wasn't packaged flake8-isort = super.python3Packages.callPackage ./nix/flake8-isort.nix { }; # Python with linting and such mypython = super.python3Packages.callPackage ./nix/mypython.nix { }; # Wasn't packaged vim-angry-reviewer = super.callPackage ./nix/vim-angry-reviewer.nix { }; }) ]; }; in rec { # For nix < 2.7 # For nix >= 2.7 they should grab automatically from: # apps.${system}.default # packages.${system}.default defaultApp = apps.${system}.default; defaultPackage = packages.${system}.default; apps = rec { nvim = flake-utils.lib.mkApp { type = "app"; program = "${packages.${system}.default}/bin/nvim"; }; default = nvim; }; packages = with pkgs; let # My custom neovim with my init file and all the plugins I use. myneovim = (neovim.override { configure = { # customRC expects vimscript but I've already converted to lua customRC = '' lua << EOF ${pkgs.lib.readFile ./init.lua} EOF " lua doesn't like the special characters nnoremap pl vipJV:s/[.!?] */& /g :noh let g:languagetool_server_command = '${languagetool}/bin/languagetool-http-server' ''; packages.myPlugins = with vimPlugins; { start = [ # Colorscheme gruvbox-nvim # Syntax coloring nvim-ts-rainbow nvim-treesitter.withAllGrammars # Autocompletes nvim-lspconfig nvim-cmp cmp-nvim-lsp # File navigation lf-vim vim-floaterm # The rest vim-commentary vim-surround vim-repeat fzf-vim vim-argwrap vim-fugitive indent-blankline-nvim camelcasemotion hop-nvim ale goyo-vim vim-oscyank ack-vim vim-angry-reviewer LanguageTool-nvim camelcasemotion vim-table-mode vim-bufkill emmet-vim tagbar vim-markdown vim-go ]; }; }; }); in rec { default = neovimCH; # symlinkJoin might not be the best solution here but it worked so I # just use it for now. neovimCH = symlinkJoin { name = "neovim"; paths = [ myneovim ]; buildInputs = [ pkgs.makeWrapper ]; postBuild = with pkgs; '' rm $out/bin/nvim BINPATH=${ lib.makeBinPath [ ctags gcc nodejs mypython pyright vale tree-sitter nodePackages.bash-language-server shellcheck hadolint nixfmt languagetool lf terraform-ls ansible-language-server ansible-lint ansible go gotools ] } makeWrapper ${myneovim}/bin/nvim $out/bin/nvim --prefix PATH : $BINPATH ''; }; }; }); }