This commit is contained in:
elwrcl committed 2026-08-28 20:55:43 +03:00
1 parent 7d815112ab
commit c8d909c693
3 files changed
+55 -6

No files matched your search

+25 -4
View File
@@ -25,20 +25,41 @@ nix run github:elwrcl/heliux
## DRM / Widevine ## DRM / Widevine
Helium is compiled with ***Widevine*** support, but upstream ships no CDM library and Helium is compiled with ***Widevine*** support but upstream ships no CDM library,
the wrapper passes `--disable-component-update`, so the component updater can and the wrapper passes `--disable-component-update`, so the component updater can
never fetch one at runtime. The result is that DRM playback silently fails. never fetch one at runtime. The result is that DRM playback silently fails.
The `helium-widevine` package bundles the CDM next to the binary, which fixes Supplying the CDM takes two steps, and the second one is easy to miss. Helium is
playback without re-enabling the update machinery: built with `enable_widevine` but *without* `bundle_widevine_cdm`, so it never
looks beside its own binary for a CDM — dropping the library into the package is
not enough by itself. The only location it consults at startup is the hint file
the component updater would normally leave in the user data dir:
```
~/.config/net.imput.helium/WidevineCdm/latest-component-updated-widevine-cdm
```
So `helium-widevine` pins the CDM in the store, and the home-manager module
writes that hint file pointing at it. The update machinery stays off — the hint
file is read directly at startup and does not depend on the updater:
```nix ```nix
programs.helium.package = helium.packages.${system}.helium-widevine; programs.helium.package = helium.packages.${system}.helium-widevine;
``` ```
Switching the package back to plain `helium` removes the hint file again, but
only when it points into the Nix store; a hint left by a real component update
is not touched.
The CDM is proprietary, so this output requires `allowUnfree`. Plain `helium` is The CDM is proprietary, so this output requires `allowUnfree`. Plain `helium` is
unchanged and stays free-software only. unchanged and stays free-software only.
> [!NOTE]
> The hint file is written by the home-manager module, so `helium-widevine` on
> its own — installed with `nix profile` or `environment.systemPackages` — still
> will not play DRM. Check with `helium://components`, or from the console:
> `navigator.requestMediaKeySystemAccess('com.widevine.alpha', [{initDataTypes:['cenc'],videoCapabilities:[{contentType:'video/mp4; codecs="avc1.42E01E"'}]}])`
## NixOS + home-manager ## NixOS + home-manager
> [!IMPORTANT] > [!IMPORTANT]
+25 -1
View File
@@ -100,6 +100,14 @@ let
ExtensionInstallForcelist = map (ext: "${ext.id};${webStoreUpdateUrl}") cfg.extensions; ExtensionInstallForcelist = map (ext: "${ext.id};${webStoreUpdateUrl}") cfg.extensions;
} }
// cfg.extraPolicies; // cfg.extraPolicies;
userDataDir = "${config.xdg.configHome}/net.imput.helium";
widevineCdm =
let
subdir = cfg.package.widevineCdmSubdir or null;
in
if subdir == null then null else "${cfg.package}/${subdir}";
widevineHintFile = "${userDataDir}/WidevineCdm/latest-component-updated-widevine-cdm";
extensionRoot = "${config.xdg.dataHome}/helium/extensions"; extensionRoot = "${config.xdg.dataHome}/helium/extensions";
loadExtensionFlag = loadExtensionFlag =
@@ -317,9 +325,25 @@ in
'' ''
); );
heliumWidevine = lib.hm.dag.entryAfter [ "writeBoundary" ] (
if widevineCdm != null then
''
run ${lib.getExe' pkgs.coreutils "install"} -Dm644 \
${pkgs.writeText "helium-widevine-cdm-hint" (builtins.toJSON { Path = widevineCdm; })} \
${lib.escapeShellArg widevineHintFile}
''
else
''
if [ -f ${lib.escapeShellArg widevineHintFile} ] \
&& grep -q '"/nix/store/' ${lib.escapeShellArg widevineHintFile}; then
run rm -f ${lib.escapeShellArg widevineHintFile}
fi
''
);
heliumPreferences = lib.mkIf (cfg.preferences != { }) ( heliumPreferences = lib.mkIf (cfg.preferences != { }) (
lib.hm.dag.entryAfter [ "writeBoundary" ] '' lib.hm.dag.entryAfter [ "writeBoundary" ] ''
prefs_file="$HOME/.config/net.imput.helium/Default/Preferences" prefs_file=${lib.escapeShellArg "${userDataDir}/Default/Preferences"}
nix_prefs=${lib.escapeShellArg (builtins.toJSON cfg.preferences)} nix_prefs=${lib.escapeShellArg (builtins.toJSON cfg.preferences)}
merged_prefs="$(mktemp)" merged_prefs="$(mktemp)"
+5 -1
View File
@@ -220,7 +220,11 @@ stdenv.mkDerivation {
}) })
]; ];
passthru = { inherit enabledFeatures; }; passthru = {
inherit enabledFeatures;
widevineCdmSubdir = if enableWidevine then "opt/helium/WidevineCdm" else null;
};
meta = { meta = {
description = "Private, fast, and honest web browser based on ungoogled-chromium"; description = "Private, fast, and honest web browser based on ungoogled-chromium";
homepage = "https://helium.computer/"; homepage = "https://helium.computer/";