Compare commits

..

No commits in common. "5b99eaffea8ba300ad34b20cf1a34e3944da75ef" and "03e1767b2afdb8f47b413cc73adfb2101bb068df" have entirely different histories.

6 changed files with 61 additions and 53 deletions

View file

@ -112,6 +112,9 @@
# Enable ollama support # Enable ollama support
ollama.enable = true; ollama.enable = true;
# Set the hostname for nixd in neovim
nixd.hostname = "wizlap";
}; };
# Add monitor configuration to hyprland # Add monitor configuration to hyprland

View file

@ -4,14 +4,16 @@ The module extends `programs.neovim`.
## Module options ## Module options
### programs.neovim.flakePath ### 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
The location of your system's flake, [nixd] will execute an expression defined in the LSP's configuration that reads 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. 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 ### programs.neovim.ollama.enable
Whether to add an [ollama] package to be used with [ollama.nvim](https://github.com/nomnivore/ollama.nvim). Whether to add an [ollama] package to be used with [ollama.nvim](https://github.com/nomnivore/ollama.nvim).

View file

@ -25,11 +25,20 @@ let
in in
{ {
options.programs.neovim = { options.programs.neovim = {
flakePath = mkOption { nixd = {
default = null; hostname = mkOption {
description = "The path to your flake, this will be the value of the `FLAKE` environment variable."; default = "wizdesk";
example = "~/.config/nix"; description = "Your NixOS hostname, needed for nixd lsp.";
type = types.nullOr types.str; 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;
};
}; };
ollama = { ollama = {
@ -48,14 +57,10 @@ in
}; };
config = { config = {
home.sessionVariables = home.sessionVariables = {
{ EDITOR = "nvim";
EDITOR = "nvim"; MANPAGER = "nvim +Man!";
MANPAGER = "nvim +Man!"; };
}
// lib.optionalAttrs (config.programs.neovim.flakePath != null) {
FLAKE = config.programs.neovim.flakePath;
};
programs.neovim = { programs.neovim = {
withNodeJs = true; withNodeJs = true;
@ -152,6 +157,14 @@ in
source = ./ftplugin; 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" = { xdg.dataFile."nvim/lazy/blink.cmp/target/release/libblink_cmp_fuzzy.so" = {
recursive = true; recursive = true;
source = "${blink-cmp.packages.${pkgs.system}.blink-fuzzy-lib}/lib/libblink_cmp_fuzzy.so"; source = "${blink-cmp.packages.${pkgs.system}.blink-fuzzy-lib}/lib/libblink_cmp_fuzzy.so";

View file

@ -9,9 +9,6 @@ return {
---@param opts AstroLSPOpts ---@param opts AstroLSPOpts
---@return AstroLSPOpts ---@return AstroLSPOpts
opts = function(_, opts) 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 ---@type AstroLSPOpts
local lsp_options = { local lsp_options = {
-- Configuration table of features provided by AstroLSP -- Configuration table of features provided by AstroLSP
@ -87,23 +84,15 @@ return {
settings = { settings = {
nixd = { nixd = {
nixpkgs = { nixpkgs = {
expr = "import (builtins.getFlake (" .. system_flake_path .. ")).inputs.nixpkgs { }", expr = "import (builtins.getFlake ({location})).inputs.nixpkgs { }",
}, },
options = { options = {
nixos = { nixos = {
expr = "(builtins.getFlake (" expr = '(builtins.getFlake ("{location}")).nixosConfigurations.{hostname}.options',
.. system_flake_path
.. ")).nixosConfigurations."
.. hostname
.. ".options",
}, },
home_manager = { home_manager = {
expr = "(builtins.getFlake (" expr =
.. system_flake_path '(builtins.getFlake ("{location}")).nixosConfigurations.{hostname}.options.home-manager.users.type.getSubOptions []',
.. ")).nixosConfigurations."
.. hostname
.. ".options"
.. ".home-manager.users.type.getSubOptions []",
}, },
}, },
}, },

View file

@ -7,15 +7,9 @@ return {
dependencies = { dependencies = {
{ {
"tris203/rzls.nvim", "tris203/rzls.nvim",
---@return rzls.Config
opts = function(_, opts) opts = function(_, opts)
local has_astrolsp, astrolsp = pcall(require, "astrolsp")
local has_blink, blink = pcall(require, "blink-cmp")
opts = { opts = {
capabilities = has_blink and blink.get_lsp_capabilities({}, true) capabilities = vim.lsp.protocol.make_client_capabilities(),
or vim.lsp.protocol.make_client_capabilities(),
on_attach = has_astrolsp and astrolsp.on_attach or nil,
path = vim.fn.get_nix_store "rzls" .. "/bin/rzls", path = vim.fn.get_nix_store "rzls" .. "/bin/rzls",
} }
@ -24,25 +18,24 @@ return {
}, },
}, },
opts = function(_, opts) opts = function(_, opts)
local has_astrolsp, astrolsp = pcall(require, "astrolsp")
local rzlspath = vim.fn.get_nix_store "rzls" local rzlspath = vim.fn.get_nix_store "rzls"
require("roslyn.config").get()
opts = { opts = {
exe = "Microsoft.CodeAnalysis.LanguageServer",
args = {
"--stdio",
"--logLevel=Information",
"--extensionLogDirectory=" .. vim.fs.dirname(vim.lsp.get_log_path()),
"--razorSourceGenerator=" .. rzlspath .. "/lib/rzls/Microsoft.CodeAnalysis.Razor.Compiler.dll",
"--razorDesignTimePath="
.. rzlspath
.. "/lib/rzls/Targets/Microsoft.NET.Sdk.Razor.DesignTime.targets",
},
---@type vim.lsp.ClientConfig ---@type vim.lsp.ClientConfig
---@diagnostic disable-next-line: missing-fields ---@diagnostic disable-next-line: missing-fields
config = { config = {
cmd = {
"Microsoft.CodeAnalysis.LanguageServer",
"--stdio",
"--logLevel=Information",
"--extensionLogDirectory=" .. vim.fs.dirname(vim.lsp.get_log_path()),
"--razorSourceGenerator=" .. rzlspath .. "/lib/rzls/Microsoft.CodeAnalysis.Razor.Compiler.dll",
"--razorDesignTimePath="
.. rzlspath
.. "/lib/rzls/Targets/Microsoft.NET.Sdk.Razor.DesignTime.targets",
},
handlers = require "rzls.roslyn_handlers", handlers = require "rzls.roslyn_handlers",
on_attach = has_astrolsp and astrolsp.on_attach or nil,
settings = { settings = {
["csharp|inlay_hints"] = { ["csharp|inlay_hints"] = {
csharp_enable_inlay_hints_for_implicit_object_creation = true, csharp_enable_inlay_hints_for_implicit_object_creation = true,

View file

@ -85,6 +85,14 @@
# Let Home Manager install and manage itself. # Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;
# Enable Neovim, pre-configured by `linuxware`. programs.neovim = {
programs.neovim.enable = true; # Enable Neovim, pre-configured by `linuxware`.
enable = true;
# Configure nixd
nixd = {
hostname = "your-hostname-here";
location = "your-flake-location-here";
};
};
} }