Open4

Nix の個人利用な channel を作ってみる

hankei6kmhankei6km

Dev Container で使える podman-compose を簡単に利用できるように podman-compose-git 的なものを作りたくなった。

なんとく default.nix を作ってみたが、そのファイルを各環境でインストールする方法がちょっとわからなかった。

自分用に apt のリポジトリ的なものがあればよいのかと思ったので探してみたら NIx では channel というものを作るらしい。そして、GitHub を使うとわりと簡単に作れるとか。

https://lucperkins.dev/blog/nix-channel/

hankei6kmhankei6km

channel の実体は .tar.gz らしい

ということで GitHub のリポジトリを作って下記の URL を利用するのが簡単だろうというのが、上記記事での内容。

https://github.com/<owner>/<repo>/archive/<branch>.tar.gz

なお、下記の形式だと 404 になる。理由は不明。

https://github.com/{owner}/{repo}/tarball/{ref}

作り方

niv というものを使うらしい[1]

https://github.com/nmattia/niv

作業自体は上記記事の通りで overlays というのをセットすると利用できた。

ちょっとハマったのは nix-buildnix-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

https://github.com/hankei6km/test-nix-channel-simple

脚注
  1. また、flakes とうのもあるらしい。次世代ということで default.nix とは互換性がないとか?。CodeSandbox では有効化されていなかった。
    https://nixos.wiki/wiki/Flakes ↩︎

hankei6kmhankei6km

その他

今回の channel を作るのには CodeSandbox + VSCode を利用した。

初期設定

  1. GitHub にリポジトリを作って CodeSandbox へインポート
  2. ツールなどをインストールするために csb.nix.vscode/extensions.json を追加

コードの編集とデバッグ

  1. VSCode でコードを編集して GitHub へプッシュ
  2. CodeSandbox でデバッグ用のサンドボックスを作って試す
    1. 「なんか環境がよれたかな?」と思ったらサンドボックスを破棄して作り直し

CodeSandbox 使うと気楽に実行環境をリセットたり複数用意したりできるので、その点は非常に楽だった。

(そのかわり?、VM のリスタートが急に発生したりで不安定といのは悩ましいところ)