在 NixOS 中配置 Neovim
前言
最近在需要在一个巨大的 Rust 项目中做开发工作,但我的笔记本已经不堪重负,无法做高效的开发。 So, 我决定购买一台新的迷你 PC 来专门处理这个问题。
由于还是习惯在 MacOS 上开发,且又不想折腾 Hackintosh, 我给这台新的迷你 PC 安装了 NixOS 。最早是打算继续使用 VSCode 远程开发, 后面发现 Neovim 也是一个不错的选择。
安装 Neovim
我是用 home-manager 做配置管理的,但通过 programs.neovim = {}
使用 nixos-unstable 会有构建失败的问题。
所以先直接引入即可。
为啥要用 nixos-unstable ,是因为想用到最新的 neovim 版本
v0.10.1
。
{inputs, ...}: let
pkgs = import inputs.nixpkgs-unstable {};
in {
home.packages = with pkgs; [
neovim
];
# programs.neovim = {
# enable = true;
# package = pkgs.neovim;
# };
}
配置 lazy.nvim
直接使用 lua 脚本来配置 lazy.nvim 。
参照安装文档 Single File Setup ,
复制内容增加 config/init.lua
文件。
{inputs, ...}: let
pkgs = import inputs.nixpkgs-unstable {};
in {
home.packages = with pkgs; [
neovim
];
home.file."./.config/nvim/" = {
source = ./config;
recursive = true;
};
}
执行 rebuild switch 成功后运行 nvim 即可看到 lazy.nvim 自动走初始化流程。
安装及配置插件
通过直接挂载递归 ./config
目录,我们可以较为方便在其中增加自定的配置。
我们以增加 Rust 开发所需要插件配置为例。
首先参照 LazyVim Setup
编辑 ./config/lua/plugins/core.lua
增加 LazyVim 配置。
return {
{ "folke/lazy.nvim", version = false },
{ "LazyVim/LazyVim", version = false, import = "lazyvim.plugins" },
-- NOTE: The import below can automatically add your own plugins,
-- configuration, etc from `lua/plugins/custom/*.lua`
{ import = "plugins.custom" },
}
由于需要 C 编译器来构建 nvim-treesitter 。如果没有
cc
命令, 可以先执行nix shell nixpkgs#gcc
再执行 nvim 来替代。
编辑 ./config/lua/plugins/custom/rust.lua
增加及配置 Rust 开发插件。
return {
{ import = "lazyvim.plugins.extras.lang.rust" },
{
"mrcjkb/rustaceanvim",
version = "^4", -- Recommended
opts = function(_, opts)
opts.server.default_settings["rust-analyzer"] = {
cargo = {
loadOutDirsFromCheck = true,
buildScripts = {
enable = true,
},
},
checkOnSave = true,
procMacro = {
enable = true,
ignored = {},
},
files = {
watcher = "client",
excludeDirs = { ".direnv", ".git" },
},
}
end,
},
{
"nvim-neotest/neotest",
opts = {
adapters = {
["rustaceanvim.neotest"] = {},
},
},
},
}
如果需要代码调试,则需要增加 dap 配置。增加 ./config/lua/plugins/custom/dap.lua
配置
return {
{ import = "lazyvim.plugins.extras.dap.core" },
{
"jay-babu/mason-nvim-dap.nvim",
opts = {
automatic_installation = true,
handlers = {},
ensure_installed = {
"codelldb"
},
}
}
}
通过 mason 自动安装 codelldb 还需要额外的依赖。
常用的就直接通过 home.packages
引入即可,全局使用。
{pkgs,...}: {
home.packages = with pkgs; [
curl
wget
git
unzip
gnutar
gzip
];
}
但像 nodejs 的,这类不想全局生效的环境。可以通过以下方式引入
{inputs, ...}: let
pkgs = import inputs.nixpkgs-unstable {};
in {
home.packages = with pkgs; [
neovim
];
home.file."./.config/nvim/" = {
source = ./config;
recursive = true;
};
home.file."./.config/nvim/lua/config/options.lua" = {
text = ''
-- npm is required for mason
vim.env.PATH = vim.env.PATH .. ":${pkgs.nodejs}/bin"
'';
};
}
配置完成后,通过 nvim 打开 Rust 项目编辑 *.rs 文件时,就会自动加载对应插件。
Rust-Analyzer 需要手动安装,可以执行
rustup component add rust-analyzer
来添加
杂项
Mini-PC 品牌型号是: 铭凡 UM790 XTX
- CPU:AMD Ryzen 9 7940HS
- 内存:Crucial DDR5-5600 16G * 2
- 硬盘:致态 TiPlus7100 1TB
图片中 Mini-PC 的 Batman 灯效是通过 3D 打印替换的。
- 模型模板: Minisforum UM780 XTX LED plate
- Batman 模型:Batman Cutout Wall Art
图片主体是 iPhone 15 Pro Max 待机模式底座, 通过 3D 打印制作。它可以用来给手机及耳机充电。
This work by 林玮 (Jade Lin) is licensed under CC BY-NC-ND 4.0