LoginSignup
9
7

More than 1 year has passed since last update.

Nixを触り始めて参考になったサイトまとめ

Last updated at Posted at 2022-10-30

概要

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, nixpkgs, NixOSのマニュアル 安定と信頼の公式マニュアル。ビルドの書き方やコマンド、APIリファレンスがわからなくなったら、ここを見たらある。NixOS WiKiよりこっち見たほうがいい。
Home Manager Manual home-managerの公式マニュアル。正直、(xsession周りとか)読んでもよくわからないところは多い。
Nix (builtins) & Nixpkgs (lib) Functions 公式のリファレンスはbuiltinsとlibで別れているかつ他の情報もあって読みにくい。こっちのほうが一覧性と検索性に凄れている。(と思う)
ryantm.gihhub.io/nixpkgss 公式のnixpkgsマニュアルの別レイアウト。サイドに目次があり軽量なため見やすい(公式のnixpkgsマニュアルは一つのページに全部載っていて一覧性に乏しく重い。)

理解の手助けになるサイト

  • はじめにnix Flakesとはなんぞやをすると私の頭が爆発したわけわからんになると思ったのでこっちに記載した。
サイト 説明
A tour of Nix Nix Languageについて解説と実際にコードを書くことで学習できる。実際に手を動かしたい人にとってもいい。あくまで言語のみの解説。
NIX FLAKES, PART1-3 nix Flakesについての解説ブログ(全3章)
Nix Flakes: an Introduction nix Flakesについての解説ブログ。何個か記事があるので目を通しておくのがいい。
Nix Flake MVP Flakeの解説Gist。他にもnixに関連するGistがあった。
nix Blog nixを使った鯖の構築などの実例が載っている。

逆引き・調査でよく使う

サイト 説明
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の確認等でめちゃくちゃ使う。また、自前でパッケージを作る時の参考にも。
redditNixOS discourseなどのコミュニティ 自分がつまずいているところはみんなつまずいているやろの精神

日本語で書いているやつ

サイト 説明
blog.ryota-ka.me HERPという会社ではnixを開発ツールとして採用しているそう。その中の人のブログ。
NixOS に関する小ネタ集 Flakesの説明が一番わかりやすかった。
  • 後はQiitaとかZennとかはてブとか個人ブログとかGitHubのconfigとかを見ればいい

サンプルとかテンプレとか

サイト 説明
berberman/flakes 自前のパッケージリポジトリを作る時の参考に。Flakeを用いてパッケージを作る時の参考に。私のパッケージリポジトリはこれを参考にした。
hyprwm/Hyprland waylandのWM。Flakeを用いてNixOSのモジュールを作る時の参考に。
standard_project_structure nixを用いてプロジェクトを作る時のテンプレ的な。
MatthiasBenaets/nixos-config Matthias’ NixOS & Nix-Darwin System Configuration Flake。 私のnixosリポジトリはこれを参考にした。

著者のリポジトリとQiita記事

サイト 説明
Sumi-Sumi/nixos-desktop-config どのマシンでも環境に差異がない事を目指した。ユーザー環境はapps/{cui, desktop, server, virtualization}を編集・追加すれば、各マシンはmachine/generalを参考に作成すれば良いようになっているはず。
Sumi-Sumi/flakes ArchLinux時代に使っていたnixpkgsに無いパッケージを作った
Sumi-Sumi/making-nix-package-tutorial nixで自前パッケージをビルドしてNixOSで使うの解説で作ったリポジトリ
nixで自前パッケージをビルドしてNixOSで使う overlays対応のパッケージを作って管理できるようにする。
ArchLinuxからNixOSに移行してみる ArchLinuxからの移行してつまずいたところなど
nixのコマンドを解説してみる 友人にpacmanと比較してと言われて作ったが気づいたら主要コマンドも解説(翻訳?)してた。新コマンドに対応。
nix Flakesについて Flakesについて初歩だけ解説した。
9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7