という話。
実を言うと、僕の NixOS 環境上の Vivaldi では、今まで Flash Player が動いてなくて、 Flash が必要になる Web サイトとか基本的には動きません! という感じだったのですが、 今後 N 高等学校 への入学を目指している関係で、色々と必要になるかもしれない、という事で、動く様にしました。
それで、実際のコードからの抜粋にはなるんだけど、大体、 下記の様な感じで Vivaldi on NixOS で Flash Plugin を有効に出来ます:
vivaldi = vivaldi.overrideAttrs (old: rec { buildInputs = old.buildInputs ++ [[ makeWrapper ]] ; installPhase = old.installPhase + '' rm $out/bin/vivaldi eval makeWrapper $out/opt/vivaldi/vivaldi $out/bin/vivaldi ${ stdenv.lib.concatMapStringsSep " " (plugin: "$(< \"${plugin}/nix-support/wrapper-flags\")") (callPackage <nixpkgs/pkgs/applications/networking/browsers/chromium/plugins.nix> { enableWideVine = false; enablePepperFlash = true; upstream-info = import <nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.nix>; }).enabled } ''; });
それでこの Snippet 、実際のところは NixOS の chromium の パッケージ定義を参考にして書いたのですが、 一体何を行っているか、と言うと、基本的には、
と同じ手法を、 Chromium のパッケージ定義から定義ファイルを拝借しつつ、 それを Vivaldi でも適用出来る様にした、という感じです。 そのため、この手法は他の Electron 系アプリでも適用出来るのではないか、と思います。
ちなみに。
上記の Snippet は、実際に僕が使っている設定ファイルのコードとは相違していて、 僕の環境の場合だと、 vivaldi.overrideAttrs の vivaldi の部分が、 Nixpkgs の最新の定義ファイルを GitHub から取ってきたそれを使う、 という感じになっています。なお、実際のコードは大体こんなの:
vivaldi = (callPackage "${fetchurl { url = "https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/applications/networking/browsers/vivaldi/default.nix"; sha256 = "12cml3pb8rzwsgv7zi0da7nqmbpk5br6gqzxgpmxhmkwagrzgbsi"; }}" { }).overrideAttrs (old: rec {
それで、この、
ネットからパッケージ定義を部分的に取ってきて、それをそのまま使う
と言う手法は、NixOS で部分的に最新のパッケージを使いたい、と言う時に非常に便利なので、 NixOS や Nixpkgs 使いであれば、一応、覚えておいて損はないです、はい。
と言う事で本日は以上です。
しっかし、日本で NixOS 使っている方と言うか、利用している方の母数はどれくらいなんでしょうかね。 なんか、ほとんど見かけない感じではあるんですが……