Open10

Nix home-managerを導入してみる ~ macOS ~

komenzarkomenzar

公式マニュアル

https://nix-community.github.io/home-manager/

Home Manager is a Nix-powered tool for reproducible management of the contents of users’ home directories. This includes programs, configuration files, environment variables and, well… arbitrary files.

「Nixのパワーでユーザーのホームディレクトリを管理できる、しかも再現性がある!プログラム、設定ファイル、環境変数、なんでもござれ」だそうです。おもしろそうや〜

komenzarkomenzar

Flakes使うべきか問題

nixについて調べているとnix flakesを使う例がよく出てくるが、一方でnix公式ドキュメントではflakesを使うのに注意がある。

https://nix.dev/concepts/flakes#should-i-use-flakes-in-my-project

https://jade.fyi/blog/flakes-arent-real/

これらを読んで正直理解できなかったので、まずはnix自体に慣れようと思う。nixだけでhome managerを使っていき、flakesはなにが違うのか分かってから使うことした。

なので、ピュアなnixでhome managerに入門してみる。

komenzarkomenzar

nix-darwinモジュールとして使ってみる

ピュアなnixの中でも3択の方法がある。

  1. Home-managerを単体でインストールする方法。
  2. NixOSモジュールとしてインストールする方法。
  3. Nix-darwinモジュールとしてインストールする方法。

macでしか使う予定がないので、ネイティヴに近そうな(初心者の勘)nix-darwinを使うことにする。

LnL7/nix-darwin: nix modules for darwinの"Getting started"のchannelを使ったインストール方法を実行する。darwin-rebuild switchが通った。

komenzarkomenzar

試しに「隠しファイルを表示する」ように設定してみる。

/etc/nix-darwin/configuration.nix
{ config, pkgs, lib, ... }:

{
  # List packages installed in system profile. To search by name, run:
  # $ nix-env -qaP | grep wget
  environment.systemPackages =
    [ pkgs.vim
    ];

  # Enable alternative shell support in nix-darwin.
  # programs.fish.enable = true;

  # Used for backwards compatibility, please read the changelog before changing.
  # $ darwin-rebuild changelog
  system.stateVersion = 6;

+  # My configs
+  system.defaults.NSGlobalDomain={
+    AppleShowAllFiles=true;
+  };
}

darwin-rebuild switch & killall Finderで設定が反映されたのを確認!

ここでconfiguration.nixをgit管理しようとしたときに権限の問題にであう。/etc以下にリポジトリがあるのでgitコマンドに毎回sudoをつけないといけない。ちょっとめんどくさい。場所を変えることにした。~/.config/nix-darwin/を作成しconfiguration.nixファイルをおく。

komenzarkomenzar

一旦まとめる。

  1. (方針)初めてはflakesを使わずにバニラでやってみる。
  2. まずnix-darwinをインストール&~/.config/nix-darwin/configuration.nixで設定する。
  3. Nixdをインストール。エディタでLSPを利用したいから早めに入れる。
  4. Zedでの設定方法:zed-extensions/nix: Nix language support in Zed
komenzarkomenzar

一度nix-darwinをインストールした際に/etc/nix-darwin/configuration.nixdarwin-configに設定したのがどうしても消せない...

なのでnix-darwinを一度アンインストールすることにした。公式のreadmeを参考にした。

https://github.com/nix-darwin/nix-darwin?tab=readme-ov-file#uninstalling

nix --extra-experimental-features "nix-command flakes" run nix-darwin#darwin-uninstaller
komenzarkomenzar

設定ファイルの置き場で行き詰まる

Nix-darwinの設定ファイルを~/.config/nix-darwin/configuration.nixにしたらビルドエラーが出る。

warning: Nix search path entry '/etc/nix-darwin/configuration.nix' does not exist, ignoring
error: file 'darwin-config' was not found in the Nix search path (add it using $NIX_PATH or -I)
error: Changed <darwin-config> but target does not exist, aborting activation
Create /etc/nix-darwin/configuration.nix or set environment.darwinConfig:

    environment.darwinConfig = "***";

And rebuild using (only required once)
$ darwin-rebuild switch -I "darwin-config=***"
komenzarkomenzar

Nix-darwinのドキュメントの例に/etc/nix-darwin/configuration.nixとあったが、nixについての色々な記事ではホームディレクトリに置いている。なんなんだ????