カラクリスタ

「輝かしい青春」なんて失かった人のブログ

Vivaldi on NixOS で Flash PPAPI Plugin を有効にした

という話。


実を言うと、僕の 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 の パッケージ定義を参考にして書いたのですが、 一体何を行っているか、と言うと、基本的には、

NixOS 上の ChromiumFlash PPAPI Plugin を有効にする方法

と同じ手法を、 Chromium のパッケージ定義から定義ファイルを拝借しつつ、 それを Vivaldi でも適用出来る様にした、という感じです。 そのため、この手法は他の Electron 系アプリでも適用出来るのではないか、と思います。


ちなみに。

上記の Snippet は、実際に僕が使っている設定ファイルのコードとは相違していて、 僕の環境の場合だと、 vivaldi.overrideAttrsvivaldi の部分が、 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 使っている方と言うか、利用している方の母数はどれくらいなんでしょうかね。 なんか、ほとんど見かけない感じではあるんですが……