Neovimの設定をNixvimに移行した

Table of Contents

背景・動機

私はEmacsユーザだが、最近同僚エンジニアが全員Neovimユーザの会社に転職してしまった。 よい機会だしある程度Neovimを使えた方がいいなと思い、Neovimをひととおり設定したのでメモしておく。

試したこと・やったこと

1. 管理方法選定

次のニーズを満たすものを探していた。

  • 普段メインで触らないので塩漬ビリティの高い状態にする
  • lua scriptは可能なら書きたくない、期間が開くとどうせ忘れる
  • AIに書かせても動くことを保証しやすい状態にする
  • プラグイン管理と設定が近い状態にする

Nixにないかなと調査してた所、Nixvim を使えば上記の要件を満たせることがわかったので導入してみた。

余談だが公式ドキュメントは情報量が少ないのでソースコードを読んだ方がいい。

https://nix-community.github.io/nixvim/index.html

2. 初期構築

インストールガイドなどを参考に導入する。

https://nix-community.github.io/nixvim/user-guide/install.html

flake.nixで設定する。

{
  inputs = {
    nixvim = {
      url = "github:nix-community/nixvim";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };
}

home-managerのsharedModulesで読み込む。

nix-darwin.lib.darwinSystem {
  modules = [
    home-manager.darwinModules.home-manager
    {
      home-manager = {
        sharedModules = [ nixvim.homeModules.nixvim ];
      };
    }
  ];
}

あとはNixvimを有効にするだけ。

{
  programs.nixvim = {
    enable = true;

    colorschemes.catppuccin.enable = true;
    plugins.lualine.enable = true;
  };
}

3. AIに設定させる

あとは好みの設定をするだけ。

https://github.com/takeokunn/nixos-configuration/tree/main/home-manager/programs/nixvim

この記事を書いてる時点では、次のようなディレクトリ構造で用意してる。 あまり何も考えずに「モダンなプラグインを入れて」とClaude Codeに指示して書かせてる。

$ pwd
/Users/take/ghq/github.com/takeokunn/nixos-configuration/home-manager/programs/nixvim

$ nix run nixpkgs#tree .
.
|-- default.nix
|-- globals
|   `-- default.nix
|-- keymaps
|   |-- basic.nix
|   |-- default.nix
|   `-- window.nix
|-- modules
|   |-- oil-git-status.nix
|   |-- skkeleton.nix
|   `-- vim-sandwich.nix
|-- opts
|   |-- default.nix
|   |-- display.nix
|   |-- editing.nix
|   |-- performance.nix
|   `-- search.nix
|-- packages
|   `-- default.nix
`-- plugins
    |-- core
    |   |-- editing.nix
    |   `-- file-explorer.nix
    |-- default.nix
    |-- language
    |   |-- japanese.nix
    |   |-- lsp.nix
    |   |-- markdown.nix
    |   |-- rust.nix
    |   |-- treesitter.nix
    |   `-- web.nix
    |-- tools
    |   |-- git.nix
    |   |-- harpoon.nix
    |   |-- misc.nix
    |   `-- telescope.nix
    `-- ui
        |-- bufferline.nix
        |-- dashboard.nix
        |-- icons.nix
        |-- navigation.nix
        |-- notifications.nix
        |-- statusline.nix
        `-- visual-aids.nix

11 directories, 34 files

NeovimやLuaや事情は分からないが、 performance.byteCompileLua でByte Compileしてくれるみたいなので有効にできるようだ。 Neovimのプラグイン事情はよくわからないのでいったんすべてのプラグインをLua製に統一させた。

{
  programs.nixvim = {
    luaLoader.enable = true;
    performance.byteCompileLua = {
      enable = true;
      nvimRuntime = true;
      configs = true;
      plugins = true;
    };
  };
}

得られた結果・所感

モダンなエディタくらいの操作感になったし、安定的に動いてくれるようになった。 既存のNixの更新サイクルにも乗るようになったので、毎日最新のプラグインが入って確実に動くNeovimを使えるフローが固まった。

今後の展開・検討事項

Neovim環境がかなり整ったので普段の開発でもNeovimを積極的に使いたい。