{ osConfig , ... }: let hostname = osConfig.networking.hostName; in { programs.nixvim.plugins = { lsp = { enable = true; servers = { lua-ls = {enable = true;}; nixd = { enable = true; cmd = ["nixd"]; settings = { nixpkgs.expr = "import { }"; options = { nixos.expr = "(builtins.getFlake \"/etc/nixos\").nixosConfigurations.${hostname}.options"; # TODO get home-manager options working when hm imported as submodule # home_manager.expr = "(builtins.getFlake \"github:nix-community/home-manager\").homeConfigurations.${hostname}.options"; }; }; }; bashls = {enable = true;}; pyright = {enable = true;}; html = {enable = true;}; marksman = {enable = true;}; ccls = {enable = true;}; cssls = {enable = true;}; r-language-server = {enable = true;}; tsserver = {enable = true;}; }; keymaps = { lspBuf = { gd = { action = "definition"; desc = "Goto Definition"; }; gr = { action = "references"; desc = "Goto References"; }; gD = { action = "declaration"; desc = "Goto Declaration"; }; gI = { action = "implementation"; desc = "Goto Implementation"; }; gT = { action = "type_definition"; desc = "Type Definition"; }; gK = { action = "hover"; desc = "Hover"; }; "cw" = { action = "workspace_symbol"; desc = "Workspace Symbol"; }; "cr" = { action = "rename"; desc = "Rename"; }; }; }; }; # TODO: enable otter.nvim when merged into nixvim stable # otter = { # enable = true; # }; }; }