nixvim

nixvim

基于Nix模块的灵活Neovim配置框架

NixVim是一个基于Nix模块的Neovim配置框架,通过Nix语言实现Neovim的灵活定制。该框架简化了插件管理、主题设置和键位映射等配置,同时保持高度可扩展性。NixVim支持多种使用方式,包括Home Manager、NixOS集成和独立运行。它提供了全面的文档,旨在简化Neovim配置流程,充分发挥Nix的优势。

配置系统插件管理Github开源项目NixVimNeovimNix
<h2 align="center"> <picture> <img src="https://yellow-cdn.veclightyear.com/835a84d5/8b584e93-7477-4fc9-b19d-b697c5702fb8.svg" width="25%" /> </picture> <a href="https://nix-community.github.io/nixvim">文档</a> | <a href="https://matrix.to/#/#nixvim:matrix.org">聊天</a> </h2> # NixVim - 一个基于nix的Neovim配置系统 - [快速设置教程](https://www.youtube.com/watch?v=b641h63lqy0)(由[@Vimjoyer](https://www.youtube.com/@vimjoyer)制作) - [Nixvim:如何利用Nix的强大功能配置Neovim](https://www.youtube.com/watch?v=GOe0C7Qtypk)(NeovimConf 2023演讲,由[@GaetanLepage](https://glepage.com/)主讲) ## 这是什么?

NixVim 是一个基于 Nix 模块构建的 Neovim 发行版。它以 Nix flake 的形式发布,通过 Nix 进行配置,同时为您的插件和 vimrc 留有空间。

它看起来是什么样的?

这里有一个简单的配置,使用gruvbox作为配色方案,并使用lightline插件:

{ programs.nixvim = { enable = true; colorschemes.gruvbox.enable = true; plugins.lightline.enable = true; }; }

当我们这样做时,lightline将被设置为一个合理的默认值,并使用gruvbox作为配色方案,无需额外配置!

查看这份真实世界nixvim配置列表

它是如何工作的?

当你构建模块(可能使用home-manager)时,它会安装所有你的插件,并为NeoVim生成一个包含所有指定选项的lua配置。由于它使用lua,这确保了你的配置将以尽可能快的速度加载。 由于默认情况下一切都是禁用的,它将会像你希望的那样快速响应。

插件设置

大多数插件都有一个settings选项,它接受任何nix属性集并将其转换为lua表。然后这个表会被传递给插件的setup函数。实际上,这意味着如果一个插件有settings选项,任何插件选项都可以被配置,即使我们没有明确对应的nix选项。

原始lua

如果你只是想在init.lua中添加额外的lua代码行,你可以使用extraConfigLuaextraConfigLuaPreextraConfigLuaPost。 如果你想将lua代码赋值给一个通常接受其他类型(字符串、整数等)的选项,你可以使用nixvim的"原始类型",{ __raw = "lua代码"; }

<details> <summary>示例</summary> 这段nix代码: ```nix { some_option.__raw = "function() print('hello, world!') end"; } ``` 将生成以下lua代码: ```lua { ['some_option'] = function() print('hello, world!') end, } ``` </details> ## 支持/问题 如果您有任何问题,请使用[讨论页面](https://github.com/nix-community/nixvim/discussions/categories/q-a)!或者,加入Matrix频道[#nixvim:matrix.org](https://matrix.to/#/#nixvim:matrix.org)! ## 安装 > [!警告] > NixVim 需要与兼容的 nixpkgs 版本一起安装。 > 这意味着 NixVim 的 `main` 分支需要使用 `nixos-unstable` 安装。 > > 如果您想使用 nixpkgs 24.05 版本的 NixVim,您应该使用 `nixos-24.05` 分支。 更多详情,请参阅我们文档中的[安装](https://nix-community.github.io/nixvim/install.html#installation)部分。 <details> <summary><strong>不使用 flakes</strong></summary>

NixVim 现在附带 flake-compat,使其可以在任何系统上使用。 要安装它,请编辑您的 home-manager(或 NixOS)配置:

{ pkgs, lib, ... }: let nixvim = import (builtins.fetchGit { url = "https://github.com/nix-community/nixvim"; # 如果您没有运行 nixpkgs 的不稳定版本,请选择对应的 nixvim 分支。 # ref = "nixos-24.05"; }); in { imports = [ # 对于 home-manager nixvim.homeManagerModules.nixvim # 对于 NixOS nixvim.nixosModules.nixvim # 对于 nix-darwin nixvim.nixDarwinModules.nixvim ]; programs.nixvim.enable = true; }
</details> <details> <summary><strong>使用 flakes</strong></summary>

如果您已经在使用 flakes 管理系统,这是推荐的方法。要启用 flakes,请在 /etc/nixos/configuration.nix 中添加以下内容:

{ pkgs, lib, ... }: { nix = { settings.experimental-features = [ "nix-command" "flakes" ]; }; }

现在,您需要导入模块。如果您的系统已经使用 flakes 配置,只需添加 nixvim 输入:

{ # ... inputs.nixvim = { url = "github:nix-community/nixvim"; # 如果您没有运行 nixpkgs 的不稳定版本,请选择对应的 nixvim 分支。 # url = "github:nix-community/nixvim/nixos-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; }

现在您可以使用 inputs.nixvim.homeManagerModules.nixvim 访问 home-manager 安装的模块,使用 inputs.nixvim.nixosModules.nixvim 访问 NixOS 的模块,以及使用 inputs.nixvim.nixDarwinModules.nixvim 访问 nix-darwin 的模块。

</details> ## 使用方法 NixVim 可以通过四种方式使用:通过 home-manager、nix-darwin、NixOS 模块,以及通过 `makeNixvim` 函数独立使用。要使用这些模块,只需根据你所使用的系统导入 `nixvim.homeManagerModules.nixvim`、`nixvim.nixDarwinModules.nixvim` 和 `nixvim.nixosModules.nixvim` 模块即可。

更多详细信息,请参阅我们文档中的使用方法部分。

独立使用

如果你想独立使用,可以使用 makeNixvim 函数:

{ pkgs, nixvim, ... }: { environment.systemPackages = [ (nixvim.legacyPackages."${pkgs.stdenv.hostPlatform.system}".makeNixvim { colorschemes.gruvbox.enable = true; }) ]; }

要开始使用独立配置,你可以在一个空目录中运行以下命令使用模板(推荐):

nix flake init --template github:nix-community/nixvim

或者,如果你想要一个最小的 flake 来构建自定义的 neovim,可以使用以下配置:

<details> <summary>最小 flake 配置</summary>
{ description = "一个非常基础的 flake"; inputs.nixvim.url = "github:nix-community/nixvim"; outputs = { self, nixvim, flake-parts, } @ inputs: let config = { colorschemes.gruvbox.enable = true; }; in flake-parts.lib.mkFlake {inherit inputs;} { systems = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; perSystem = { pkgs, system, ... }: let nixvim' = nixvim.legacyPackages."${system}"; nvim = nixvim'.makeNixvim config; in { packages = { inherit nvim; default = nvim; }; }; }; }
</details>

然后你可以使用 nix run .# -- <file> 运行 neovim。这对于轻松测试配置更改很有用。

高级用法

你可能想要对 nixvim 模块有更多控制,比如:

  • 将配置分割成多个文件
  • 添加自定义 nix 模块来增强 nixvim
  • 更改 nixvim 使用的 nixpkgs

在这种情况下,你可以使用 makeNixvimWithModule 函数。 它接受一个包含以下键的集合:

  • pkgs:要使用的 nixpkgs(默认为 nixvim flake 指向的 nixpkgs)
  • module:用于扩展 nixvim 的 nix 模块定义。这对于传递额外的模块机制(如 optionsimports)很有用。
  • extraSpecialArgs:使用函数时传递给模块的额外参数。例如,在 flake 中可以是 self

更多详细信息,请参阅我们文档中的独立使用部分。

devShell 一起使用

你还可以使用 nixvim 定义一个只在 Nix devShell 内可用的实例:

<details> <summary>devShell 配置</summary>
let nvim = nixvim.legacyPackages.x86_64-linux.makeNixvim { plugins.lsp.enable = true; }; in pkgs.mkShell { buildInputs = [nvim]; };
</details> # 文档 本项目的文档可在 GitHub Pages 上找到: [https://nix-community.github.io/nixvim](https://nix-community.github.io/nixvim) 稳定版文档也可以在 [https://nix-community.github.io/nixvim/stable](https://nix-community.github.io/nixvim/stable) 查看。 如果 `enableMan` 选项设置为 `true`(默认为 true),包含相同信息的 man 页面也会被安装,可以通过 `man nixvim` 查看。

插件

安装 NixVim 后,您无疑会想要启用一些插件。插件基于模块系统,类似于 NixOS 和 Home Manager。
因此,要启用受支持的插件,您只需启用其模块:

{ programs.nixvim = { plugins.lightline.enable = true; }; }

当然,如果仅此而已,NixVim 就没什么意义了,您可以直接使用常规的插件管理器。所有受支持插件的选项都作为该模块的选项公开。目前还没有文档,但源代码中有详细的解释。计划为每个模块提供详细文档。
并非所有插件都有模块,所以您可能仍然想要获取一些插件。这不是问题,只需使用 extraPlugins 选项:

{ programs.nixvim = { extraPlugins = with pkgs.vimPlugins; [ vim-nix ]; }; }

但是,如果您发现自己经常这样做,请考虑贡献或请求一个模块!

配色方案

配色方案在不同的范围内提供:

{ programs.nixvim = { # 启用 gruvbox colorschemes.gruvbox.enable = true; }; }

就像普通插件一样,额外的配色方案选项作为其模块的一部分提供。
如果您的配色方案不是作为模块提供的,请使用 extraPlugins 安装它,并使用 colorscheme 选项设置:

{ programs.nixvim = { extraPlugins = [ pkgs.vimPlugins.gruvbox ]; colorscheme = "gruvbox"; }; }

默认情况下,所有 NixVim 支持的插件都会使用您设置的主要配色方案,但可以在每个插件的基础上覆盖。

选项

NeoVim 有很多配置选项。您可以在 NeoVim 中通过 :h option-list 找到它们的列表。
所有这些都可以在 NixVim 中配置。您只需要设置 opts 属性:

{ programs.nixvim = { opts = { number = true; # 显示行号 relativenumber = true; # 显示相对行号 shiftwidth = 2; # Tab 宽度应为 2 }; }; }

请注意,例如,要禁用行号,您不应将 opts.nonumber 设置为 true,而应将 opts.number 设置为 false。

键位映射

完全可以在 NixVim 中定义键位映射。这是通过 keymaps 属性完成的:

{ programs.nixvim = { keymaps = [ { key = ";"; action = ":"; } { mode = "n"; key = "<leader>m"; options.silent = true; action = "<cmd>!make<CR>"; } ]; }; }

这相当于以下 vimscript:

noremap ; : nnoremap <leader>m <silent> <cmd>make<CR>

这个表格描述了 keymaps 选项的所有模式。 您可以通过使用字符串列表为单个映射提供多个模式。

简写描述
"n"普通模式
"i"插入模式
"v"可视和选择模式
"s"选择模式
"t"终端模式
"" 普通、可视、选择和操作符待定模式
"x"仅可视模式,不包括选择
"o"操作符待定模式
"!"插入和命令行模式
"l"插入、命令行和语言参数模式
"c"命令行模式

每个键位映射可以在 options 属性中指定以下设置。

NixVim默认值VimScript
silentfalse<silent>
nowaitfalse<nowait>
scriptfalse<script>
exprfalse<expr>
uniquefalse<unique>
noremaptrue使用映射的 'noremap' 变体
remapfalse使映射递归(与 noremap 相反)
desc""此键位映射的描述

全局变量

有时您可能想定义一个全局变量,例如设置 leader 键。这可以通过 globals 属性轻松实现:

{ programs.nixvim = { globals.mapleader = ","; # 将 leader 键设置为逗号 }; }

附加配置

有时 NixVim 可能无法满足您所有的自定义需求。在这些情况下,提供了 extraConfigVimextraConfigLua 选项:

{ programs.nixvim = { extraConfigLua = '' -- 在 nvim 打开时打印一条小欢迎消息! print("Hello world!") ''; }; }

如果您觉得您手动做的事情应该在 NixVim 中得到支持,请开一个 issue。

贡献指南

参见 CONTRIBUTING.md

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多