在 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