diff --git a/hosts/wizlap/home-manager.nix b/hosts/wizlap/home-manager.nix index 157379c..12cf15e 100644 --- a/hosts/wizlap/home-manager.nix +++ b/hosts/wizlap/home-manager.nix @@ -112,9 +112,6 @@ # Enable ollama support ollama.enable = true; - - # Set the hostname for nixd in neovim - nixd.hostname = "wizlap"; }; # Add monitor configuration to hyprland diff --git a/modules/neovim/README.md b/modules/neovim/README.md index 4f90c70..6e917b5 100644 --- a/modules/neovim/README.md +++ b/modules/neovim/README.md @@ -4,16 +4,14 @@ The module extends `programs.neovim`. ## Module options -### programs.neovim.nixd.hostname - -By default [nixd] is enabled, you **need** to pass the current machine's -hostname that is used to generate your system. - -### programs.neovim.nixd.location +### programs.neovim.flakePath The location of your system's flake, [nixd] will execute an expression defined in the LSP's configuration that reads the flake's contents to evaluate [NixOS] and [Home Manager] options. +This setting is optional since other programs might force you to set the `FLAKE` environment variable; if this is not +set by the time you open [neovim] it will spout an error, impeding critical plugins from starting. + ### programs.neovim.ollama.enable Whether to add an [ollama] package to be used with [ollama.nvim](https://github.com/nomnivore/ollama.nvim). diff --git a/modules/neovim/default.nix b/modules/neovim/default.nix index 5fbbe2e..163fad1 100644 --- a/modules/neovim/default.nix +++ b/modules/neovim/default.nix @@ -25,20 +25,11 @@ let in { options.programs.neovim = { - nixd = { - hostname = mkOption { - default = "wizdesk"; - description = "Your NixOS hostname, needed for nixd lsp."; - example = "nixos"; - type = types.str; - }; - - location = mkOption { - default = "git+file:///home/wizardlink/.system"; - description = "Path to your flake location, prepend 'file:///' to it and 'git+' before that if using git."; - example = "git+file:///home/wizardlink/.system"; - type = types.str; - }; + flakePath = mkOption { + default = null; + description = "The path to your flake, this will be the value of the `FLAKE` environment variable."; + example = "~/.config/nix"; + type = types.nullOr types.str; }; ollama = { @@ -57,10 +48,14 @@ in }; config = { - home.sessionVariables = { - EDITOR = "nvim"; - MANPAGER = "nvim +Man!"; - }; + home.sessionVariables = + { + EDITOR = "nvim"; + MANPAGER = "nvim +Man!"; + } + // lib.optionalAttrs (config.programs.neovim.flakePath != null) { + FLAKE = config.programs.neovim.flakePath; + }; programs.neovim = { withNodeJs = true; @@ -157,14 +152,6 @@ in source = ./ftplugin; }; - xdg.configFile."nvim/lua/plugins/astrolsp.lua".source = pkgs.runCommand "astrolsp.lua" { } '' - cp ${./lsp.lua} $out - - substituteInPlace $out \ - --replace-fail "{hostname}" "${config.programs.neovim.nixd.hostname}" \ - --replace-fail "{location}" "${config.programs.neovim.nixd.location}" - ''; - xdg.dataFile."nvim/lazy/blink.cmp/target/release/libblink_cmp_fuzzy.so" = { recursive = true; source = "${blink-cmp.packages.${pkgs.system}.blink-fuzzy-lib}/lib/libblink_cmp_fuzzy.so"; diff --git a/modules/neovim/lsp.lua b/modules/neovim/lua/plugins/astrolsp.lua similarity index 91% rename from modules/neovim/lsp.lua rename to modules/neovim/lua/plugins/astrolsp.lua index 457db21..1a51e7a 100644 --- a/modules/neovim/lsp.lua +++ b/modules/neovim/lua/plugins/astrolsp.lua @@ -9,6 +9,9 @@ return { ---@param opts AstroLSPOpts ---@return AstroLSPOpts opts = function(_, opts) + local system_flake_path = vim.fn.getenv "FLAKE" or error "FLAKE environment variable must be set." + local hostname = vim.fn.hostname() + ---@type AstroLSPOpts local lsp_options = { -- Configuration table of features provided by AstroLSP @@ -84,15 +87,23 @@ return { settings = { nixd = { nixpkgs = { - expr = "import (builtins.getFlake ({location})).inputs.nixpkgs { }", + expr = "import (builtins.getFlake (" .. system_flake_path .. ")).inputs.nixpkgs { }", }, options = { nixos = { - expr = '(builtins.getFlake ("{location}")).nixosConfigurations.{hostname}.options', + expr = "(builtins.getFlake (" + .. system_flake_path + .. ")).nixosConfigurations." + .. hostname + .. ".options", }, home_manager = { - expr = - '(builtins.getFlake ("{location}")).nixosConfigurations.{hostname}.options.home-manager.users.type.getSubOptions []', + expr = "(builtins.getFlake (" + .. system_flake_path + .. ")).nixosConfigurations." + .. hostname + .. ".options" + .. ".home-manager.users.type.getSubOptions []", }, }, }, diff --git a/modules/template/home-manager.nix b/modules/template/home-manager.nix index 33d8b7c..9f6fabc 100644 --- a/modules/template/home-manager.nix +++ b/modules/template/home-manager.nix @@ -85,14 +85,6 @@ # Let Home Manager install and manage itself. programs.home-manager.enable = true; - programs.neovim = { - # Enable Neovim, pre-configured by `linuxware`. - enable = true; - - # Configure nixd - nixd = { - hostname = "your-hostname-here"; - location = "your-flake-location-here"; - }; - }; + # Enable Neovim, pre-configured by `linuxware`. + programs.neovim.enable = true; }