From fb0b5d1a11b2737f49effadbb1d4b7efbea82850 Mon Sep 17 00:00:00 2001 From: Aleksandr Lebedev Date: Sat, 15 Feb 2025 15:20:38 +0100 Subject: [PATCH] Firefox widevine --- flake.lock | 17 ++++++++++++++ flake.nix | 3 +++ .../hardware/apple-silicon-linux/default.nix | 23 +++++++++++++++++++ nixos/modules/firefox/aarch64-linux.nix | 19 +++++++++++++++ nixos/modules/firefox/default.nix | 3 ++- 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 nixos/modules/firefox/aarch64-linux.nix diff --git a/flake.lock b/flake.lock index aa5f71e..9c6a009 100644 --- a/flake.lock +++ b/flake.lock @@ -679,6 +679,22 @@ "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz" } }, + "nixpkgs-master": { + "locked": { + "lastModified": 1739621138, + "narHash": "sha256-KtayqdyDOiGmgLy44FRsGewgjxC4S6CYePM5SKO3BaY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "1e2268e58c8e74134dde16a45f40e4c32a934cb7", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "master", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-stable": { "locked": { "lastModified": 1738843498, @@ -2975,6 +2991,7 @@ "nix-on-droid": "nix-on-droid", "nixos-facter-modules": "nixos-facter-modules", "nixpkgs": "nixpkgs_6", + "nixpkgs-master": "nixpkgs-master", "sops-nix": "sops-nix", "stylix": "stylix" } diff --git a/flake.nix b/flake.nix index 0854ae0..25d0c6e 100644 --- a/flake.nix +++ b/flake.nix @@ -16,6 +16,9 @@ nixpkgs = { url = "github:nixos/nixpkgs?ref=nixos-unstable"; }; + nixpkgs-master = { + url = "github:nixos/nixpkgs?ref=master"; + }; neovim = { url = "github:kylekrein/neovim"; inputs.nixpkgs.follows = "nixpkgs"; diff --git a/nixos/hardware/apple-silicon-linux/default.nix b/nixos/hardware/apple-silicon-linux/default.nix index 4565266..e2183f9 100644 --- a/nixos/hardware/apple-silicon-linux/default.nix +++ b/nixos/hardware/apple-silicon-linux/default.nix @@ -1,9 +1,21 @@ { pkgs, lib, + inputs, ... }: let +pkgs-master = import inputs.nixpkgs-master { + inherit (pkgs) system; + config.allowUnfree = true; +}; in { +nixpkgs = { + overlays = [ + (self: super: { + widevine-cdm = pkgs-master.widevine-cdm; + }) + ]; + }; #nixpkgs.overlays = [ # (import ./widevine-overlay.nix) #]; @@ -11,6 +23,17 @@ in { imports = [ #./apple-silicon-support ]; +programs.firefox.policies.Preferences = { + "media.gmp-widevinecdm.version" = "system-installed"; + "media.gmp-widevinecdm.visible" = true; + "media.gmp-widevinecdm.enabled" = true; + "media.gmp-widevinecdm.autoupdate" = false; + "media.eme.enabled" = true; + "media.eme.encrypted-media-encryption-scheme.enabled" = true; +}; +programs.firefox.autoConfig = '' +// Zhu +lockPref("general.useragent.override","Mozilla/5.0 (X11; CrOS aarch64 15236.80.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.125 Safari/537.36");''; #doesn't work. You need to manually add this to about:config hardware.asahi = { peripheralFirmwareDirectory = ./firmware; useExperimentalGPUDriver = true; #deprecated diff --git a/nixos/modules/firefox/aarch64-linux.nix b/nixos/modules/firefox/aarch64-linux.nix new file mode 100644 index 0000000..b6b88e7 --- /dev/null +++ b/nixos/modules/firefox/aarch64-linux.nix @@ -0,0 +1,19 @@ +{ pkgs, ... }: +{ + nixpkgs = { + overlays = [ + (final: prev: { + firefox = prev.firefox.overrideAttrs (old: { + buildCommand = + old.buildCommand + + '' + mkdir -p $out/gmp-widevinecdm/system-installed + ln -s "${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm/_platform_specific/linux_arm64/libwidevinecdm.so" $out/gmp-widevinecdm/system-installed/libwidevinecdm.so + ln -s "${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm/manifest.json" $out/gmp-widevinecdm/system-installed/manifest.json + wrapProgram "$oldExe" \ + --set MOZ_GMP_PATH "$out/gmp-widevinecdm/system-installed" + ''; + }); + })]; + }; +} diff --git a/nixos/modules/firefox/default.nix b/nixos/modules/firefox/default.nix index d1747a9..36bd0e2 100644 --- a/nixos/modules/firefox/default.nix +++ b/nixos/modules/firefox/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ lib, config, pkgs, hwconfig, ... }: let lock-false = { @@ -11,6 +11,7 @@ }; in { + imports = [] ++ lib.optional (hwconfig.system == "aarch64-linux") ./aarch64-linux.nix; programs = { firefox = { enable = true;