✅️2025/1/28 nix-darwinをFlakes経由で入れる
以前からnix-darwin入れていたが、一時的に使ってなかった
PCが新しくなったので、この機会に再度入れる
以前はjustfileからコマンド実行して入れていたが、Flakes経由で入れるように変える
この記事が参考になった
Homebrew管理下のGUIもNixに移してみる nix-darwin篇
@kawarimidoll
入れた
https://github.com/mrsekut/dotfiles/commit/9c439a388008242c672782faed13304e9c1601b2
$ nix run nix-darwin -- switch --flake .#mrsekut-darwin
まだλ nix runのコマンドの意味を理解していないmrsekut.icon
nix-darwinの反映には再起動が必要なものがある気がするが、Dockに関してはすぐに反映された
λ nix run、なんとなくわかったmrsekut.icon
nix run周り、最初かなり変な誤解をしていた
今までよく理解せずに$ nix run . switchでhome-managerを適用していた
なので、nix runは、current directoryに対してなにか適用するコマンドかと思いこんでいた
例えば、npm run startみたいなのと同じような認識
だから、こういう類似コマンドの違いを認識できていなかった
$ nix run home-manager -- switch --flake .#mrsekut
$ home-manager switch --flake .#mrsekut
でも実際は、nix runはnix appを実行するもので、app名を指定するか、pathを指定するかの違い、ということを理解した
home-managerとnix-darwinを使う際のflake.nixの書き方も誤解していた
flake.nixに以下のように書いた時に、
code:flake.nix
outputs = { nixpkgs, home-manager, nix-darwin, ...}: let
system = "aarch64-darwin";
pkgs = nixpkgs.legacyPackages.${system};
in {
homeConfigurations = {
mrsekut = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = ./nix/home.nix ;
};
};
darwinConfigurations = {
mrsekut = nix-darwin.lib.darwinSystem {
system = system;
modules = ./nix-darwin/configuration.nix ;
};
};
};
$ nix run home-manager -- switch --flake .#mrsekutで指定するのが意味不明だった
なぜ.#homeConfigurations.mrsekutじゃないの?という
.#mrsekutだと、darwinConfigurations.mrsekutと区別できないじゃん、と思った
outputsの1階層目のattr (e.g. darwinConfigurations)は関係なくて、2階層目がユニークでないといけないのかな、とか
これは上記のnix runの誤解も相まって混乱している
実際は、home-managerとnix-darwinの固有の指定のせいで、この誤解が生まれている
mrsekut.iconがflakesを使っているのがこの2つだけだったので、
変に帰納して、nix全体でこういう謎なpath指定をするのかと勘違いした
.#hogeのように指定できるのはnixの機能
以下のように書くと
code:flake.nix
{
outputs = _inputs: {
hello = "Hello, world!";
};
}
こう呼べる
code:bash
$ nix eval .#hello
Hello, world!
普通に<file path>.#<outputsのattr>
これはかなり自然
では、なぜhome-manager, nix-darwinはそうなっていないのか
それは、
home-managerでのhomeConfigurationsや
nix-darwinでのdarwinConfigurationsが、
それぞれで特別視されているから
home-managerの方はmanに説明がある
--flake flake-uri[#name]
Build Home Manager configuration from the flake, which must contain the output homeConfigurations.name.
If no name is specified it will first try username@hostname and then username.
--flake optionをつけて実行する際は、homeConfigurations直下のattrを指定してねと書いてる
次
✅️2025/2/2 homebrewをnix-darwin経由で入れる