{ description = "blu's neovim config"; inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; inputs.treefmt-nix.url = "github:numtide/treefmt-nix"; outputs = { self, nixpkgs, treefmt-nix, }: let systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system}); in { formatter = forAllSystems ( pkgs: (treefmt-nix.lib.evalModule pkgs { projectRootFile = "flake.nix"; programs.deadnix.enable = true; programs.nixfmt.enable = true; programs.statix.enable = true; programs.stylua.enable = true; settings.formatter.stylua.options = [ "--indent-type" "Spaces" "--indent-width" "4" ]; }).config.build.wrapper ); packages = forAllSystems ( pkgs: let neovim = pkgs.neovim.override { configure = { packages.ptero = { start = [ pkgs.vimPlugins.lazy-nvim ]; }; customRC = '' lua << EOF vim.g.ptero_config_path = "${self}" package.path = "${self}/lua/?.lua;${self}/lua/?/init.lua;" .. package.path EOF set runtimepath^=${self} luafile ${self}/init.lua ''; }; }; lsps = [ pkgs.bash-language-server pkgs.basedpyright pkgs.dockerfile-language-server pkgs.gopls pkgs.lua-language-server pkgs.rust-analyzer pkgs.typescript-language-server pkgs.vim-language-server pkgs.vscode-langservers-extracted pkgs.zls ]; in { default = pkgs.symlinkJoin { name = "ptero"; paths = [ neovim ] ++ lsps; nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' rm $out/bin/nvim makeWrapper ${neovim}/bin/nvim $out/bin/nvim \ --prefix PATH : $out/bin ''; }; } ); overlays.default = _final: prev: { ptero = self.packages.${prev.system}.default; }; }; }