概要
pacmanやaptのように何も考えることなく使えると思いnixを触り始めましたが、かなり茨の道でした。
nix Launguageのことなのか、nixパッケージマネージャーのことなのか、nixを用いたプロジェクト管理のtipsなのかなどnixを取り巻く情報は多岐に渡ります。(多分)
自分が読んで参考になったページについて簡単な説明とともに載せておこうと思います。
また、ArchLinuxユーザーはArchWiKiにいけば書いてあることが多いため真っ先にArchWiKiを見るかもしれません。(私がそうだった)
しかし、NixOSではコマンドはman
、仕様と実例が公式のマニュアルにまとまっているのでそっちを先に見ることをおすすめします。
更に、nix Languageは純粋関数型言語なので関数型言語の読み方がわからないと結構しんどいです。
(configはJSONを書く感じなので割となんとかなるがパッケージや環境が作れない問題に直面する)
資料関係
-
nix 2.4
から新しいコマンドが実装されている
- 現在はexperimental-featuresですがいずれ置き換わる予定
- 各種サイトの情報は新しいコマンドに対応していないことが多く、量は多いが公式のマニュアルが一番わかり易い(2022/10/22現在)
最低限nix/nixpkgsを使えるようにする
サイト |
説明 |
nix-1p |
Nix Languageについて初歩の初歩だけのリファレンス。これを読めば最低限、*.nixは読める。(と思う...。) |
nix-tutorial |
nixpkgsについて最低限使えるようになる。パッケージも作れるようになる。 |
Nix Pills |
nixとnixpkgsについて簡単な例とともに網羅的に説明されている。2014-2015年のブログが元になっているため、Flakesについては載っていない。 |
- ちなみにnix言語で他の言語ではあまり見ないOperatorに
//
があります。これはe1 // e2
とあるときe1の属性をe2で置き換えまたは追加する。
-
with
の範囲に含めたくないときやlet ... in ...
のスコープ範囲を小さくするなどの目的に使う。
set1 = { a=1; b=2; }
set2 = { a=10; c=30; }
set1//set2
>>{ a=10; b=2; c=30; } # { e1の属性をe2の属性で置き換え; e1の属性そのまま; e1に無いe2の属性を追加; }
必須
理解の手助けになるサイト
- はじめにnix Flakesとはなんぞやをすると
私の頭が爆発したわけわからんになると思ったのでこっちに記載した。
逆引き・調査でよく使う
サイト |
説明 |
Arch Wiki |
みんな大好きArch Wiki。わからないことがあればここを見れば大抵載っている。NixOS(Home Manager)は何らかのパッケージのconfigをnixを用いて表現し直しているに過ぎないので、ここに書いてあることをnixで読み替えれば対処できる(ことが多い)。 |
NixOS Wiki |
Arch Wikiに比べるとかなり貧弱だが、NixOS固有の書き方をしないといけないときがたまにある。 |
Home Manager Appendix [A.,B.,C.,D.] |
A.: home.nix作製時のConfiguration Options, B.:NixOSのモジュールにした時のOptions、C.: nix-darwinのモジュールにした時のOptions、D.: home-managerコマンドの解説。特に、A.は見ないとhome.nixを作れない。 |
NixOS Search |
nixpkgsの検索、NixOSのConfiguration Options、FlakesのConfiguration Optionsが検索できる。これなしではconiguration.nixは作成できないし、パッケージの名前もわからない。(nixpkgsはコマンドで検索できるが...) |
NixOS/nixpkgs |
nixpkgsのリポジトリ。パッケージのoverrideやパッケージがうまく動作しない場合に依存関係を確認、issueの確認等でめちゃくちゃ使う。また、自前でパッケージを作る時の参考にも。 |
redditやNixOS discourseなどのコミュニティ |
自分がつまずいているところはみんなつまずいているやろの精神 |
日本語で書いているやつ
- 後はQiitaとかZennとかはてブとか個人ブログとかGitHubのconfigとかを見ればいい
サンプルとかテンプレとか
著者のリポジトリとQiita記事