🐣

NixでVimの最新版を使うOverlayを書いた

2024/09/01に公開

最近は純粋関数型パッケージマネージャのNixが流行りで激アツです。
筆者も開発用設定の諸々をNixへ移行しようと考えています。

https://nixos.org/

ところで、nixpkgsで公開されているパッケージはバージョンが最新でないことがあります。
具体的には、Vimは最新版より少し古いものが提供されています。

https://search.nixos.org/packages?channel=unstable&show=vim&from=0&size=50&sort=relevance&type=packages&query=vim

過去の記事では、GitHubから最新のVimを取り込み、自前でビルドする方法を紹介しました。

https://zenn.dev/kawarimidoll/articles/0a4ec8bab8a8ba

とはいえビルド設定をいちいち記述するのは煩雑でした。
今回、これをoverlayとして公開したので紹介します。

https://github.com/kawarimidoll/vim-overlay

使い方

nixpkgsのoverlayに上記のvim-overlayを適用してください。

簡単に試したい場合、gitリポジトリを作成し、flake.nixを用意します。

.
├─ .git/
└─ flake.nix

flake.nixの中身はこんな感じです。

flake.nix
{
  description = "Minimal package definition to use vim-overlay";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
    vim-overlay.url = "github:kawarimidoll/vim-overlay";
  };

  outputs = {
    self,
    nixpkgs,
    vim-overlay,
  }: let
    system = "aarch64-darwin";

    pkgs = import nixpkgs {
      inherit system;
      overlays = [vim-overlay.overlays.default];
    };
  in {
    packages.${system}.default = nixpkgs.legacyPackages.${system}.buildEnv {
      name = "my-packages";
      paths = with pkgs; [
        vim
      ];
    };
  };
}

nix buildを実行するとresultというディレクトリができます。そこに最新版のVimが入っています。

$ nix build
$ ./result/bin/vim --version

設定

vim-overlay.overlays.defaultの代わりにvim-overlay.overlays.featuresを使うとビルド時の設定ができます。
以下のようにoverlaysに反映させるときに引数を渡します。

pkgs = import nixpkgs {
  inherit system;
  overlays = [
    (vim-overlay.overlays.features {
      compiledby = "nix-vim";
      lua = true;
      ruby = true;
    })
  ];
};

以下の引数を設定できます。必要な機能に応じてフラグを追加してください。

キー名 デフォルト値 説明
compiledby "vim-overlay" vim --versionで表示されるCompiled byの値
cscope false +cscope サポート
lua false +lua サポート
python3 false +python3 サポート
ruby false +ruby サポート
sodium false +sodium サポート

Discussion