Nix の個人利用な channel を作ってみる
Dev Container で使える podman-compose
を簡単に利用できるように podman-compose-git
的なものを作りたくなった。
なんとく default.nix
を作ってみたが、そのファイルを各環境でインストールする方法がちょっとわからなかった。
自分用に apt のリポジトリ的なものがあればよいのかと思ったので探してみたら NIx では channel というものを作るらしい。そして、GitHub を使うとわりと簡単に作れるとか。
.tar.gz
らしい
channel の実体は ということで GitHub のリポジトリを作って下記の URL を利用するのが簡単だろうというのが、上記記事での内容。
https://github.com/<owner>/<repo>/archive/<branch>.tar.gz
なお、下記の形式だと 404
になる。理由は不明。
https://github.com/{owner}/{repo}/tarball/{ref}
作り方
niv
というものを使うらしい[1]。
作業自体は上記記事の通りで overlays というのをセットすると利用できた。
ちょっとハマったのは nix-build
や nix-env
で指定するのは pname
ではなく attribute 名らしい(この辺の理解があやしいので、用語自体あっているかも不安)。これまで、パッケージ名を指定していると思っていたのは、 attribute 名ということ?
あとは、ref に branch を指定すると、GitHub 側を更新しても --remove
--add
--update
では反映されなかった。
下記のようなスクリプト作って、更新したらコミットの SHA 値をコピペした。
#!/bin/bash
nix-channel --remove personal
nix-channel --add "https://github.com/hankei6km/test-nix-channel-simple/archive/${1}.tar.gz" personal
nix-channel --update
nix-channel --list
作った channel
-
また、
flakes
とうのもあるらしい。次世代ということでdefault.nix
とは互換性がないとか?。CodeSandbox では有効化されていなかった。
https://nixos.wiki/wiki/Flakes ↩︎
その他
今回の channel を作るのには CodeSandbox + VSCode を利用した。
初期設定
- GitHub にリポジトリを作って CodeSandbox へインポート
- ツールなどをインストールするために
csb.nix
と.vscode/extensions.json
を追加
コードの編集とデバッグ
- VSCode でコードを編集して GitHub へプッシュ
- CodeSandbox でデバッグ用のサンドボックスを作って試す
- 「なんか環境がよれたかな?」と思ったらサンドボックスを破棄して作り直し
CodeSandbox 使うと気楽に実行環境をリセットたり複数用意したりできるので、その点は非常に楽だった。
(そのかわり?、VM のリスタートが急に発生したりで不安定といのは悩ましいところ)
関係するかもしれないし、しないかもしれない記事
いつまでも同じと思うな git archive
のハッシュ値、的なことかなと。