NixOS で Neovim の unstable 版や nightly 版を使う方法

概要

前置き

Vim駅伝2025-05-02の記事です。前回の記事は atusy さんの Vimでステータスラインプラグインを遅延読み込みする | Atusy's blog でした。

私は NixOS で使うアプリを「システム全体で使うもの」と「特定のユーザーだけが使うもの」に分けて管理しており、「システム全体で使うもの」は configuration.nix で管理して nixos-rebuild コマンドでインストールできるようにしています。

システム全体で使えるようにしているアプリは「Git、ZSH、Neovim」で、私が使っている NixOS-WSL の nixpkgs のバージョンは 24.111 なので、nixos-rebuild でインストールできる Neovim は v0.10 になります2

このたび、Neovim が v0.11 にバージョンアップして Neovim 単体で LSP を設定できるようになったので試そうと思ったのですが、v0.11 を使うには nixpkgs のバージョンを unstable にする必要があります。しかし、ZSH や Git は安定版を使いたかったので、configuration.nix の設定を見直して Neovim だけ unstable 版を使えるようにしました。

色々相談したり調べたりして何とか上手くいきましたので、設定方法を備忘録としてメモします。また、ついでに nightly 版をインストールする方法も調べましたので、合わせてメモします。なお、本記事は 2025年4月27日時点の情報です。

環境

OS: NixOS on WSL2 (Windows on ARM)

1> nix-shell -p nix-info --run "nix-info -m"
2 - system: `"aarch64-linux"`
3 - host os: `Linux 5.15.167.4-microsoft-standard-WSL2, NixOS, 24.11 (Vicuna), 24.11.717196.9684b53175fc`
4 - multi-user?: `yes`
5 - sandbox: `yes`
6 - version: `nix-env (Nix) 2.24.14`
7 - channels(root): `"nixos-24.11, nixos-wsl"`
8 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`
1> home-manager --version
225.05-pre

unstable 版を使うための設定

設定していくのは configuration.nix です。

まず、Nix の組込み関数の fetchTarball で unstable 版のパッケージ情報が格納された https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz ファイルをダウンロードして展開し、パスを unstable-tarball 変数に代入します。

そして、組込み関数の import 関数で unstable-tarball 変数のパス情報から Nix 式(パッケージ情報)をインポートします。このとき、import の2番目の引数に config = config.nixpkgs.config を指定することで、安定版と同じ設定を組み込んでいます。

 1# configuration.nix
 2
 3{ config, lib, pkgs, ... }:
 4let
 5  # その他の設定
 6  unstable-tarball = builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz";
 7  unstable = import unstable-tarball {
 8    config = config.nixpkgs.config;
 9  };
10in

それから、システム全体の環境情報が格納されている /run/current-system/sw に表示するアプリを指定する environment.systemPackages に unstable 版の Neovim を追加します。/run/current-system/sw/ に追加することで、全てのユーザーが使えるようになります。

 1# configuration.nix
 2
 3{ config, lib, pkgs, ... }:
 4let
 5  # ...
 6  # その他の設定
 7  # ...
 8  unstable-tarball = builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz";
 9  unstable = import unstable-tarball {
10    config = config.nixpkgs.config;
11  };
12in
13  # ...
14  # その他の設定
15  # ...
16
17  programs = {
18    neovim = {
19      enable = true;
20    };
21  };
22  environment.systemPackages = with pkgs; [
23    vim
24    git
25    unstable.neovim
26  ];

ここまで設定できたら、sudo nixos-rebuild switch を実行して設定を反映させます。実行後は nvim --version を実行し、v0.11 がインストールされたか確認します。

1> nvim --version
2NVIM v0.11.0
3Build type: Release
4LuaJIT 2.1.1741730670
5Run "nvim -V1 -v" for more info

無事に v0.11 の Neovim をインストールできました。

nightly 版を使うための設定

unstable 版の Neovim は v0.11 ですが、Nix のコミュニティが管理している neovim-nightly-overlay を使うと v0.12 がインストールできます。

インストールするための設定については、上記のリンク先の with Flakes の方法と、Homebrew管理下のCLIをNixに移してみる Home Manager篇 の設定を踏まえて以下のとおり設定しました。

本来なら各設定について詳しく説明すべきなのですが、こちらについては各設定が「なぜそうするのか」という点がまだ理解できなかったので、上手くいった設定を紹介するにとどめています。

 1# configuration.nix
 2
 3let
 4  # nightly 版のインストールでは不要なのでコメントアウトする
 5  #unstable-tarball = builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz";
 6  #unstable = import unstable-tarball {
 7  #  config = config.nixpkgs.config;
 8  #};
 9in
10{
11  # ...
12  # その他の設定
13  # ...
14
15  programs = {
16    # home-manager で管理するのでコメントアウトする
17    # neovim = {
18    #   enable = true;
19    # };
20  };
21
22  environment.systemPackages = with pkgs; [
23    vim
24    git
25    # unstable 版を使わないのでコメントアウトする
26    # unstable.neovim
27  ];
 1# flake.nix
 2{
 3  inputs = {
 4    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
 5    home-manager.url = "github:nix-community/home-manager/";
 6    home-manager.inputs.nixpkgs.follows = "nixpkgs";
 7    # nightly 版を使うために URL を追加する
 8    neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
 9  };
10
11  # ...
12  # その他の設定
13  # ...
 1# home.nix
 2
 3{ config, pkgs, inputs, ... }:
 4{
 5  home = rec {
 6    username = "s-show";
 7    homeDirectory = "/home/${username}";
 8    stateVersion = "25.05";
 9  };
10
11  # ...
12  # その他の設定
13  # ...
14
15  # nightly 版を使うために追加
16  nixpkgs = {
17    overlays = [
18      inputs.neovim-nightly-overlay.overlays.default
19    ];
20  };
21
22  # インストールするアプリに Neovim を追加
23  home.packages = with pkgs; [
24    neovim
25  ];

これで Neovim の nightly 版がインストールできると思います。

1> nvim --version
2NVIM v0.12.0-nightly+7692a62
3Build type: Release
4LuaJIT 2.1.1741730670
5Run "nvim -V1 -v" for more info

  1. nix-community / NixOS-WSLflake.nixinputs.nixpkgs.url"github:NixOS/nixpkgs/nixos-24.11" となっています。 ↩︎

  2. nixpkgs の各バージョンでどのバージョンのアプリがインストールされるかは NixOS Search - Packages で確認できます。 ↩︎