✅2024/4/4 dotfilesにflakesを追加する
調べてみても、
Flakes単体の解説だったり、
NixOSとFaleksの解説だったり、
で難しい
MacOS, home-manager, Flakes、dotfilesというのを見たい
code:flake.nix
{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }: {
packages.x86_64-linux.hello = nixpkgs.legacyPackages.x86_64-linux.hello;
packages.x86_64-linux.default = self.packages.x86_64-linux.hello;
};
}
これが自動的に生成される
flake.nixに何を書けば良いのか?
このdotfilesが依存している大本のflakeを全部列挙すればよいのだろう
今のところ基本的にnixpkgsとhome-managerぐらいにしか依存していない(はず)
今後、個別のレジストリ等から入れた場合はここに追記するのかな?
でもできれば全部rootに書くという運用は避けたいmrsekut.icon
home-manager使うなら、home-manager/内にflakeかなにかを作ってimportするようにしたい #?? code:fale.nix
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager/release-23.11";
inputs.nixpkgs.follows = "nixpkgs";
};
};
結局自分しか使わないFlakeになるわけだが、ここになにか記述する必要性あるのだろうか
固定されたinputを参照して、home-manager switchで環境を作ってくれたらそれで十分
イマイチ何のためのoutputsなのかわかっていない
こういうFlakeの立ち位置の説明がある時に
Nixでは2回の依存解決のタイミングがある
①Nix式を評価してnix-instantiateする時
この時にFlakesが使われる
Nix式を入力に取り一意なFlakeを生成する
②Nixのderivationをbuild (realise)する時
①の話をしているわけだが、ここでのoutputsって、
①のインプット側の話なのか?
固定したnixのpackageを生成する
①のアウトプット側の話なのか?
固定したnixのinstanceを生成する
たぶん前者なのだろうと思ってるmrsekut.icon
これを参考にoutputsを書く
code:flake.nix
outputs = inputs: {
defaultPackage.x86_64-darwin = inputs.home-manager.defaultPackage.x86_64-darwin;
homeConfigurations = {
"mrsekut" = inputs.home-manager.lib.homeManagerConfiguration {
system = "x86_64-darwin";
homeDirectory = "/Users/mrsekut";
username = "mrsekut";
};
};
};
なんかhome-managerが追加で入った
紛らわしいので元のhome-managerを一旦消す
$ just home-manager-uninstall
なぜかjustもnixも消えたので入れ直す
$ bash ./just-install.sh
$ just nix-uninstall
$ just nix-install
再度runする
$ nix run . switch
もしerrorが出たら
error: experimental Nix feature 'nix-command' is disabled; use '--extra-experimental-features nix-command' to override
これを追記
code:~/.config/nix/nix.conf
experimental-features = nix-command flakes
code:_
nix run . switch
warning: Git tree '/Users/mrsekut/Desktop/dev/github.com/mrsekut/dotfiles' is dirty
設定ファイルがありません。ファイルを /Users/mrsekut/.config/home-manager/home.nix に作ってください
仮説
inputsか何かの設定方法が甘い
デフォルトのpathである~/.config/home-manager/home.nixを見に行こうとしている
importsとかmodulesあたりの設定な気がするがどうやってもうまくいかない...mrsekut.icon
あるいはコマンドの指定が足りない
nix run . switchにpathを与えないといけないとか?
あるいは、~/.config/home-manager/home.nixにシンボリックリンクを貼るか
普通に考えるとこれだが、こんなに利便性が悪いはずがないので多分違う
Nix GPTsに聞いてみる
不服のシンボリックリンク
$ ln -s $HOME/Desktop/dev/github.com/mrsekut/dotfiles/nix/home.nix $HOME/.config/home-manager/home.nix
これでいったん使えるようになった
この記事も一部参考にした