前言

最近在需要在一个巨大的 Rust 项目中做开发工作,但我的笔记本已经不堪重负,无法做高效的开发。 So, 我决定购买一台新的迷你 PC 来专门处理这个问题。

mini PC is put on the left of my phone rack

由于还是习惯在 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 打印替换的。

图片主体是 iPhone 15 Pro Max 待机模式底座, 通过 3D 打印制作。它可以用来给手机及耳机充电。