diff --git a/pkgs/applications/networking/browsers/firefox/wrapper.nix b/pkgs/applications/networking/browsers/firefox/wrapper.nix index 2b44263096b2..8256487b7518 100644 --- a/pkgs/applications/networking/browsers/firefox/wrapper.nix +++ b/pkgs/applications/networking/browsers/firefox/wrapper.nix @@ -8,6 +8,7 @@ , google_talk_plugin, fribid, gnome3/*.gnome-shell*/ , browserpass, chrome-gnome-shell, uget-integrator, plasma-browser-integration, bukubrow , tridactyl-native +, fx_cast_bridge , udev , kerberos }: @@ -71,6 +72,7 @@ let ++ lib.optional (cfg.enableGnomeExtensions or false) chrome-gnome-shell ++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator ++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma-browser-integration + ++ lib.optional (cfg.enableFXCastBridge or false) fx_cast_bridge ++ extraNativeMessagingHosts ); libs = lib.optional stdenv.isLinux udev diff --git a/pkgs/tools/misc/fx_cast/default.nix b/pkgs/tools/misc/fx_cast/default.nix new file mode 100644 index 000000000000..5fa57e830d22 --- /dev/null +++ b/pkgs/tools/misc/fx_cast/default.nix @@ -0,0 +1,85 @@ +{ stdenv, fetchurl, dpkg }: + +stdenv.mkDerivation rec { + pname = "fx_cast_bridge"; + version = "0.0.5"; + + src = fetchurl { + url = "https://github.com/hensm/fx_cast/releases/download/v${version}/${pname}-${version}-x64.deb"; + sha256 = "1qmp1d7miq7c2q8i4bhfp5ywxdngvyi7rjl6i82is2g5nhr7gbvv"; + }; + + nativeBuildInputs = [ dpkg ]; + + unpackPhase = '' + runHook preUnpack + dpkg-deb -xv $src ./ + runHook postUnpack + ''; + + dontBuild = true; + dontPatchELF = true; + + installPhase = '' + install -DT {opt/fx_cast,$out/bin}/${pname} + install -DT {usr,$out}/lib/mozilla/native-messaging-hosts/${pname}.json + + substituteInPlace $out/lib/mozilla/native-messaging-hosts/${pname}.json \ + --replace {/opt/fx_cast,$out/bin}/${pname} + ''; + + # See now-cli/default.nix + dontStrip = true; + preFixup = let + libPath = stdenv.lib.makeLibraryPath [stdenv.cc.cc stdenv.cc.libc]; + bin = "$out/bin/${pname}"; + in '' + + orig_size=$(stat --printf=%s ${bin}) + + patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" ${bin} + patchelf --set-rpath ${libPath} ${bin} + chmod +x ${bin} + + new_size=$(stat --printf=%s ${bin}) + + ###### zeit-pkg fixing starts here. + # we're replacing plaintext js code that looks like + # PAYLOAD_POSITION = '1234 ' | 0 + # [...] + # PRELUDE_POSITION = '1234 ' | 0 + # ^-----20-chars-----^^------22-chars------^ + # ^-- grep points here + # + # var_* are as described above + # shift_by seems to be safe so long as all patchelf adjustments occur + # before any locations pointed to by hardcoded offsets + + var_skip=20 + var_select=22 + shift_by=$(expr $new_size - $orig_size) + + function fix_offset { + # $1 = name of variable to adjust + location=$(grep -obUam1 "$1" ${bin} | cut -d: -f1) + location=$(expr $location + $var_skip) + + value=$(dd if=${bin} iflag=count_bytes,skip_bytes skip=$location \ + bs=1 count=$var_select status=none) + value=$(expr $shift_by + $value) + + echo -n $value | dd of=${bin} bs=1 seek=$location conv=notrunc + } + + fix_offset PAYLOAD_POSITION + fix_offset PRELUDE_POSITION + + ''; + + meta = with stdenv.lib; { + description = "Implementation of the Chrome Sender API (Chromecast) within Firefox"; + homepage = https://hensm.github.io/fx_cast/; + license = licenses.mit; + maintainers = with maintainers; [ dtzWill ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b70c6856301a..4ccb1d4669e3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1776,6 +1776,8 @@ in fwup = callPackage ../tools/misc/fwup { }; + fx_cast_bridge = callPackage ../tools/misc/fx_cast { }; + fzf = callPackage ../tools/misc/fzf { }; fzf-zsh = callPackage ../shells/zsh/fzf-zsh { };