{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixvim.url = "github:nix-community/nixvim"; }; outputs = { self, nixpkgs, nixvim, }: let pkgs = nixpkgs.legacyPackages.x86_64-linux; npkgs = nixvim.legacyPackages.x86_64-linux; in { packages.x86_64-linux.default = npkgs.makeNixvimWithModule { module = { config = { extraPackages = [ pkgs.black pkgs.alejandra pkgs.shfmt pkgs.cargo pkgs.rustfmt pkgs.go ]; options = {mouse = "";}; colorschemes.kanagawa = { enable = true; transparent = true; }; plugins = { lsp = { enable = true; servers = { bashls.enable = true; nixd.enable = true; ruff-lsp.enable = true; gopls.enable = true; }; }; rust-tools.enable = true; conform-nvim = { enable = true; formatAfterSave.lspFallback = false; formattersByFt = { python = ["black"]; nix = ["alejandra"]; rust = ["rustfmt"]; go = ["gofmt"]; _ = ["shfmt"]; }; formatters.shfmt = { prepend_args = ["-i" "4" "-s"]; }; }; luasnip.enable = true; nvim-cmp = { enable = true; snippet.expand = "luasnip"; autoEnableSources = true; sources = [ {name = "nvim_lsp";} {name = "path";} {name = "buffer";} ]; mapping = { "" = "cmp.mapping.confirm({ select = true })"; "" = { action = '' cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) else fallback() end end, {"i","s","c",}) ''; }; }; }; }; }; }; }; }; }