mirror of
https://github.com/elwrcl/heliux.git
synced 2026-10-31 14:38:02 +03:00
212 lines
7.4 KiB
Markdown
212 lines
7.4 KiB
Markdown
# heliux
|
|
|
|
Nix flake for the [Helium browser](https://helium.computer/), with NixOS and
|
|
home-manager modules for declarative extension, policy and settings management —
|
|
plus an optional bundled Widevine CDM so DRM-protected streaming works.
|
|
|
|
> [!NOTE]
|
|
> Only `x86_64-linux` is actively tested.
|
|
>
|
|
> Also this started as a copy of [gitlab.com/ntgn/helium-flake](https://gitlab.com/ntgn/helium-flake),
|
|
> which in turn was based on [schembriaiden/helium-browser-nix-flake](https://github.com/schembriaiden/helium-browser-nix-flake).
|
|
> All credit for the original packaging work goes to them. :3
|
|
|
|
## What this adds on top of upstream
|
|
|
|
- Tracks current Helium releases, updated daily by GitHub Actions.
|
|
- An `enableWidevine` build flag and a ready-made `helium-widevine` package, so
|
|
Netflix, HBO and other DRM sites play.
|
|
|
|
## Quick start
|
|
|
|
```sh
|
|
nix run github:elwrcl/heliux
|
|
```
|
|
|
|
## DRM / Widevine
|
|
|
|
Helium is compiled with ***Widevine*** support, but upstream ships no CDM library 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.
|
|
|
|
The `helium-widevine` package bundles the CDM next to the binary, which fixes
|
|
playback without re-enabling the update machinery:
|
|
|
|
```nix
|
|
programs.helium.package = helium.packages.${system}.helium-widevine;
|
|
```
|
|
|
|
The CDM is proprietary, so this output requires `allowUnfree`. Plain `helium` is
|
|
unchanged and stays free-software only.
|
|
|
|
## NixOS + home-manager
|
|
|
|
> [!IMPORTANT]
|
|
> You need **both** modules. Policies only apply when they are written to
|
|
> `/etc/chromium/policies/managed/`, which is what the NixOS module does; the
|
|
> home-manager module handles extensions, preferences and the wrapper.
|
|
|
|
Add the flake to your inputs:
|
|
|
|
```nix
|
|
# flake.nix
|
|
{
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
home-manager.url = "github:nix-community/home-manager";
|
|
helium.url = "github:elwrcl/helium-flake";
|
|
};
|
|
}
|
|
```
|
|
|
|
Then configure it:
|
|
|
|
```nix
|
|
{ config, pkgs, helium, ... }:
|
|
|
|
{
|
|
imports = [
|
|
# Writes policies to /etc/chromium/policies/managed/
|
|
helium.nixosModules.helium
|
|
];
|
|
|
|
home-manager.users.${YOUR_USERNAME} = {
|
|
imports = [ helium.homeModules.helium ];
|
|
|
|
programs.helium = {
|
|
enable = true;
|
|
defaultBrowser = true;
|
|
|
|
# Bundled Widevine CDM, for DRM streaming
|
|
package = helium.packages.${pkgs.system}.helium-widevine;
|
|
|
|
extensions = [
|
|
# uBlock Origin — see "Obtaining extensions" below
|
|
{
|
|
id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";
|
|
hash = "sha256-FIbmYVj8cmXce7Vq4h7d2nOjmk4RkCnABmC4y5NDyGk=";
|
|
}
|
|
];
|
|
|
|
# Added to the wrapper
|
|
extraFlags = [
|
|
"--force-dark-mode"
|
|
];
|
|
|
|
# Merged into the policy file in /etc
|
|
extraPolicies = {
|
|
HomepageLocation = "https://start.duckduckgo.com";
|
|
PasswordManagerEnabled = false;
|
|
MetricsReportingEnabled = false;
|
|
};
|
|
|
|
# See "Preferences" below
|
|
preferences = {
|
|
browser.show_home_button = true;
|
|
bookmark_bar.show_on_all_tabs = true;
|
|
};
|
|
};
|
|
};
|
|
}
|
|
```
|
|
|
|
## Options Reference
|
|
|
|
The following options are available under `programs.helium`:
|
|
|
|
| Option | Type | Default | Description |
|
|
| :--------------- | :----------------- | :--------------------- | :------------------------------------------------- |
|
|
| `enable` | boolean | `false` | Whether to enable the Helium browser module. |
|
|
| `package` | package | `self.packages.helium` | The helium package to use. |
|
|
| `extensions` | list of submodules | `[]` | List of extensions to install `{ id, hash }`. |
|
|
| `extraFlags` | list of strings | `[]` | Command line arguments passed to the wrapper. |
|
|
| `extraPolicies` | attribute set | `{}` | Raw Chromium policies to apply. |
|
|
| `preferences` | attribute set | `{}` | Json that will be merged into XDG Config. |
|
|
| `defaultBrowser` | boolean | `false` | Set Helium as the default browser in XDG mimeapps. |
|
|
|
|
## Policies
|
|
|
|
Since Helium is based on Chromium, you can use any of the standard Chromium
|
|
policies in the `extraPolicies` block. You can find a full list of available
|
|
names and values at the [Chrome Enterprise Policy List](https://chromeenterprise.google/policies/).
|
|
|
|
Common useful policies:
|
|
|
|
- `BrowserSignin`: Set to `0` to disable account sign-in.
|
|
- `BookmarkBarEnabled`: Set to `true` to force the bookmark bar to show.
|
|
- `URLBlocklist`: A list of URL patterns to block.
|
|
|
|
## Preferences
|
|
|
|
These are usually what you imperatively choose in the `Settings` menu. You can
|
|
find all the json keys and values inside the helium browser by typing
|
|
`helium://prefs-internals/` and searching for the values.
|
|
|
|
```nix
|
|
{
|
|
programs.helium.preferences = {
|
|
browser.show_home_button = false;
|
|
bookmark_bar = {
|
|
show_apps_shortcut = false;
|
|
show_managed_bookmarks = false;
|
|
show_on_all_tabs = false;
|
|
show_tab_groups = false;
|
|
};
|
|
helium.browser.layout = 1;
|
|
};
|
|
}
|
|
```
|
|
|
|
## Obtaining extensions
|
|
|
|
> [!WARNING]
|
|
> Be wary that if you are rate-limited that the file will be empty and the build will fail
|
|
|
|
Use the provided binary `prefetch-nix-extension` to obtain the nix code you need.
|
|
|
|
You can copy the IDs from the URL in the chrome web store:
|
|
|
|
```ascii
|
|
https://chromewebstore.google.com/detail/bitwarden-password-manage/nngceckbapebfimnlniiiahkandclblb
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ THIS PART
|
|
```
|
|
|
|
Example Usage:
|
|
|
|
```console
|
|
./prefetch-nix-extension.sh nngceckbapebfimnlniiiahkandclblb cjpalhdlnbpafiamejdnhcphjbkeiagm
|
|
|
|
# OUTPUT:
|
|
extensions = [
|
|
{ id = "nngceckbapebfimnlniiiahkandclblb"; hash = "sha256-XOVs2Tvay8hQ13SHz+728BDu2mMyQ0JxUuUI6FZ1NaM="; }
|
|
{ id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; hash = "sha256-FIbmYVj8cmXce7Vq4h7d2nOjmk4RkCnABmC4y5NDyGk="; }
|
|
];
|
|
```
|
|
|
|
## Updating Helium
|
|
|
|
The `update-helium` GitHub Actions workflow checks upstream once a day, rewrites
|
|
`modules/sources.nix` with the new version and hashes, verifies the flake still
|
|
builds, and commits the bump. You can also trigger it by hand from the Actions
|
|
tab.
|
|
|
|
Note that this keeps *the flake* current — to pull an update into your system
|
|
you still run `nix flake update helium` and rebuild.
|
|
|
|
> [!NOTE]
|
|
> GitHub disables scheduled workflows in repositories with no activity for 60
|
|
> days. If updates stop arriving, re-enable the workflow in the Actions tab.
|
|
|
|
## Flake outputs
|
|
|
|
| Output | Description |
|
|
| ----------------------------------- | ------------------------------------ |
|
|
| `packages.<system>.helium` | Helium browser package |
|
|
| `packages.<system>.helium-widevine` | Helium with the Widevine CDM bundled |
|
|
| `apps.<system>.helium` | `nix run` entry point |
|
|
| `homeModules.helium` | home-manager module |
|
|
| `nixosModules.helium` | nixos module |
|
|
| `devShells.<system>.default` | Shell with Helium available |
|
|
| `formatter.<system>` | `nixfmt-tree` (`nix fmt`) |
|
|
| `checks.<system>.build` | Build check (`nix flake check`) |
|