homepostsnotesabout

Nix + home-manager で dotfiles 環境の構築

ここ数年使用してた Ubuntu に飽きてきたので、NixOS に乗り換えることにした。
それに合わせて数年放置していた dotfiles の管理も Nix + home-manager に移行することを決めた。
本記事は Nix + home-manager で dotfiles 環境を構築した際のメモである。

現在下記リポジトリでは、home-manager のみを使用して dotfiles を管理しているのみであり、NixOS は使用していない。
将来的には NixOS modules もここに打ち込むことになる。

リポジトリ: shimo8810/dotfiles

Nix の準備

NixOS 以外で、Nix のインストールは公式の方法と nix-installer を使用する方法があるが、ここでは nix-installer を使用する。

nix-installer はデフォルトで flake が有効化されていたり、アンインストール方法が提供されているため、随所で利用が推奨されたので採用した。

curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install

home-manager の準備

NixOS 以外の環境でも使用できるように、NixOS modules ではなく、standalone としてインストールする[1]

nix run home-manager/master -- init --switch ~/dotfiles

~/dotfiles/flake.nix~/dotfiles/home.nix が自動で生成される。
home-managerがインストールされていない状態ではnix runからhome-managerを実行する。
home-managerで自身をインストールすることで、home-managerを実行することができる。

下記のようにprograms.home-manager.enabletrueに設定することで、home-managerを有効化することができる。

{
  programs.home-manager.enable = true;
}

これ移行は基本的にはこの home.nix を編集して、home-manager switch --flake ~/dotfiles で変更を反映させることができる。

home-manager の設定

設定は基本的に公式のドキュメント[2]を読んで設定する。

ここでは特に私が使用している設定を記載する。

home.packages

home.packages ではインストールしたいパッケージを指定することができる。
programs.<name>で設定できるパッケージはそちらで設定を行っている。

home.packages = with pkgs; [
  bottom
  duf
  dust
  fd
  fzf
  go-task
  lsd
  ripgrep
]

programs.git

git の設定を行うことができる。
設定した内容は~/config/git/configに反映される。

programs.git = {
  enable = true;
  userName = "shimo8810";
  userEmail = "[email protected]";

  extraConfig = {
    core.editor = "nvim";
    init.defaultBranch = "main";
    color.ui = "auto";
  };
};

programs.neovim

neovimの設定を行うことができる。

vimviにエイリアスを設定してある。
また extraLuaConfiginit.lua の内容を設定している。
plugins に vimPlugins なパッケージを指定することでプラグインをインストールすることができる。
インストールできるパッケージは NixOS Search で検索することができる。

programs.neovim = {
  enable = true;
  viAlias = true;
  vimAlias = true;
  defaultEditor = true;
  extraLuaConfig = lib.fileContents ./nvim/init.lua;
  plugins = with pkgs.vimPlugins; [
    lualine-nvim
    nord-nvim
    nvim-tree-lua
    vim-nix
  ];
};

その他

長いコマンドを覚えられないのでtaskfileを利用している。
そのへんはMakefileでも何でも良いと思う。

引用資料

  • [1]: https://nix-community.github.io/home-manager/index.xhtml#sec-flakes-standalone
  • [2]: https://nix-community.github.io/home-manager/options.xhtml

参考資料