web-dev-qa-db-ja.com

nixosでbashスクリプトを実行する方法

Nvmをインストールする.nixファイルを作成しようとしています

まず、configuration.nix内に追加しようとしました:

system.activationScripts = {

  dotfiles = pkgs.lib.stringAfters [ "users" ]
    ''
    curl NVM_URL | bash
    ''
  }
}

しかし、bashとcurlが定義されていないと文句を言いました。

そこで、小さな.nixパッケージを作成しようとしました。

{ stdenv, fileurl };
stdenv.mkDerivation {
   name="nvm-0.33.0"
   builder = ./install.sh;
   fileurl{
      url: NVM_GIT_MASTER.Zip;
   };
}

しかし、「デフォルト値なしで引数を持つ関数を自動呼び出すことはできません{'stdenv'}」と文句を言います。

Nix-build --dry-run ./text,nixを実行した後

どうしたの?私はnixページを読んでいて、壁に頭をぶつけています。

1
Ant

not definedエラーは、PATH派生が構築されたときにsystemにcurlもbashも存在しないためだと思います。 system.activationScriptsの手動エントリは次のように述べています。

NixOSシステム構成がアクティブ化されたときに実行されるシェルスクリプトフラグメントのセット。例としては、/ etcの更新、アカウントの作成などがあります。これらは、システムを起動するか、nixos-rebuildを実行するたびに実行されるため、べき等で高速であることが重要です。

そのため、とにかくsystem.activationScriptsに最小限のコードを含める必要があると思います。

cannot autocallエラーは、作成したパッケージが引数を指定せずに呼び出されていることを示しています。これを処理する通常の方法は、pkgs.libセットのcallPackage関数を使用することです。 nixpkgs全体での使用例を見つけることができます。

私はあなたがあなたの目的が何であれ解決するためにnixを正しい方法で使っていないと思います。ノードパッケージを使用する既存のconfig.nixを見つけて、それがどのように行われるかを確認できるかどうかを確認する価値があります。また、 nixのnodePackages がすでにサポートされているので、おそらくそれが役立つかもしれません。 IRCには、より便利なnixosチャネルもあります。

お役に立てば幸いです。

1
brocking