nixメモ
nixに関するメモ書き
目次
configuration.nix
NixOSの設定ファイル? machineのhostnameとかbootloaderとかKVMのユーザーとか割とシステム全体の設定?
flake
flake.nixとflake.lockにより完全にバージョンを固定した依存関係をプロジェクトで共有できる機能。これを使えば他人のプロジェクトも(きっと)手前でbuildできるし、ちょっと書けばhome-managerにも混ぜることができる。
home manager
ユーザーごとのpkgやconfigなどの配置を宣言するツール。個人的にはmacOSなどでも使えるのでLinux専用とかじゃない物はできるだけこちらに書いておきたい。Debianなどのnot-NixOSなOSでもnixをstand aloneで使うときに便利なので。
nix shell
一時的にnixのpkgなどを使う。サブシェルのような形なのでexitすればそのpkgは使えなくなる。
nix develop
(多分)flake.nixなどを使ってプロジェクトごとに依存関係を記述する。Cとかの魔境になりがちな依存関係解決の一助になる?
nix profile
home-managerのコマンド版というか、imperative(命令的)な操作でパッケージをユーザー環境へインストールするやつ。個人的にはdotfilesなどでnixの設定も共有しているので、普通に再現性を落とすのであまり使いたくない。
nix profileが提供されているプロジェクトで、home-managerに入れるには
例えばtirith.shという危険なコマンドをチェックするツール。install helpのnixの項目はこれしかありません。profileを使いたくない && zshrcなどに読ませるぽいので、home-managerに入れてしまいましょう。
この環境について
だいたいこんな環境の話。自分で使うようなpkgは基本的にcommon_user.nixに入れてる。
├── flake.lock
├── flake.nix
├── home
│ ├── alice.nix
│ ├── common_user.nix
│ └── seli.nix
├── hosts
│ └── desktop
│ ├── configuration.nix
│ └── hardware-configuration.nix
└─ modules
├── common.nix
├── desktop.nix
└── thinkpad.nixnix profile install github:sheeki03/tirith
これを、こういう感じに書くことでhome managerでインストールができる。
flake.nix
{
# ~~~
inputs = {
tirith = {
url = "github:sheeki03/tirith";
inputs.nixpkgs.follows = "nixpkgs";
};
};
# ~~~
}
home/common_usr.nix
{
config,
pkgs,
inputs,
lib,
...
}:
let
# ~~~
tirith = inputs.tirith.packages.${pkgs.system}.default;
basePackages = with pkgs; [
tirith
];
in
{
# ~~~
}