π Private, fast, and honest web browser based on Chromium
π¦ Packaged as a Nix flake with NixOS module, Home Manager module, and overlay support
π helium.computer Β· π¦ Helium Source Β· β¬οΈ Releases Β· π¦ This Flake
π English Β· Π ΡΡΡΠΊΠΈΠΉ Β· δΈζ
This flake does NOT build Helium from source. Instead, it:
- π₯ Downloads pre-built
.debpackages from imputnet/helium-linux releases - π¦ Extracts the
.debusingdpkgandar - π§ Patches the ELF binaries with
patchelfto use Nix libraries - π Wraps the browser with
wrapGAppsHookfor proper GTK/desktop integration - π Installs desktop files and icons for system integration
This approach is similar to how Vivaldi and Brave are packaged in nixpkgs.
- β
NixOS Module - Declarative system-wide configuration with
programs.helium - β Home Manager Module - User-level configuration
- β
Overlay - Expose
pkgs.heliumin your Nixpkgs instance - β
Flags Support - Declarative command-line flags via
programs.helium.flags - β
Policies Support - Full Chrome Enterprise policy support via
/etc/chromium/policies/managed/ - β
Multi-Arch - Supports both
x86_64-linuxandaarch64-linux - β
Wayland Ready - Includes
--ozone-platform-hint=autofor native Wayland support
βββ flake.nix # Flake definition with all outputs
βββ helium.nix # Package derivation (repackages .deb)
βββ overlay.nix # Nixpkgs overlay
βββ LICENSE # GPL-3.0 License
βββ README.md # This file (English)
βββ README.ru.md # Russian translation
βββ README.zh.md # Chinese translation
βββ helium-logo.png # Helium logo
βββ modules/
βββ nixos/
β βββ default.nix # NixOS module
βββ home-manager/
βββ default.nix # Home Manager module
- Nix with flakes enabled (NixOS 22.05+ or enable
nix-commandandflakesexperimental features) - Linux (x86_64 or aarch64)
# Clone the repository
git clone https://github.com/oxcl/nix-flake-helium-browser.git
cd nix-flake-helium-browser
# Build Helium
nix build
# Run directly
nix run .
# Open a shell with helium
nix shell .# Build the package
nix build .#helium
# Run via app
nix run .nix run .The overlay exposes pkgs.helium in your Nixpkgs instance:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
helium-flake.url = "github:oxcl/nix-flake-helium-browser";
helium-flake.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { nixpkgs, helium-flake, ... }: {
nixosConfigurations.my-system = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
{
nixpkgs.overlays = [ helium-flake.overlays.default ];
environment.systemPackages = [ pkgs.helium ];
}
];
};
};
}{ config, pkgs, ... }:
{
nixpkgs.overlays = [
(import (fetchTarball "https://github.com/oxcl/nix-flake-helium-browser/archive/main.tar.gz")).overlays.default
];
environment.systemPackages = [ pkgs.helium ];
}The NixOS module provides declarative configuration under programs.helium with full policies support:
{ config, pkgs, ... }:
{
imports = [
(import (fetchTarball "https://github.com/oxcl/nix-flake-helium-browser/archive/main.tar.gz")).nixosModules.default
# Or if using flakes: inputs.helium-flake.nixosModules.default
];
programs.helium = {
enable = true;
# Optional: override the package
# package = pkgs.helium;
# π© Flags - Command-line arguments always passed to Helium
flags = [
"--disable-gpu"
"--ozone-platform-hint=auto"
];
# π― Policies - Written to /etc/chromium/policies/managed/helium-nixos.json
# Also written to /etc/helium/policies/managed/ for future compatibility
policies = {
"BrowserSignin" = 0;
"PasswordManagerEnabled" = false;
"SyncDisabled" = true;
"SpellcheckEnabled" = true;
"SpellcheckLanguage" = [ "en-US" ];
};
};
}| Option | Type | Default | Description |
|---|---|---|---|
programs.helium.enable |
bool |
false |
Install Helium system-wide |
programs.helium.package |
package |
pkgs.helium |
The Helium package to use |
programs.helium.flags |
list of str |
[] |
Command-line flags added to the wrapper |
programs.helium.policies |
attrs |
{} |
Policies written to /etc/chromium/policies/managed/ |
Helium (being Chromium-based) reads policies from /etc/chromium/policies/managed/ on Linux. This flake writes policies to both:
/etc/chromium/policies/managed/helium-nixos.json(current Chromium path)/etc/helium/policies/managed/helium-nixos.json(future Helium path)
See the Chrome Enterprise Policy List for all available policies.
Common policies:
{
"BrowserSignin" = 0; # Disable browser signin
"PasswordManagerEnabled" = false; # Disable password manager
"SyncDisabled" = true; # Disable sync
"HomepageLocation" = "https://nixos.org"; # Set homepage
"DefaultSearchProviderEnabled" = true;
"DefaultSearchProviderSearchURL" = "https://search.nixos.org/?q={searchTerms}";
"ExtensionInstallForcelist" = [ # Pre-install extensions
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
];
}For user-level configuration:
{ config, pkgs, ... }:
{
imports = [
(import (fetchTarball "https://github.com/oxcl/nix-flake-helium-browser/archive/main.tar.gz")).homeModules.default
# Or if using flakes: inputs.helium-flake.homeModules.default
];
programs.helium = {
enable = true;
# Optional: override the package
# package = pkgs.helium;
# π© Flags - Command-line arguments always passed to Helium
flags = [
"--enable-features=TouchpadOverscrollHistoryNavigation"
"--start-maximized"
];
# Optional: user policies (best-effort, use NixOS module for critical policies)
policies = {
"BrowserSignin" = 0;
};
};
}| Option | Type | Default | Description |
|---|---|---|---|
programs.helium.enable |
bool |
false |
Enable Helium for user |
programs.helium.package |
package |
pkgs.helium |
The Helium package to use |
programs.helium.flags |
list of str |
[] |
Command-line flags added to the wrapper |
programs.helium.policies |
attrs |
{} |
User policies written to ~/.config/helium/policies/managed/nixos.json |
β οΈ Note: User-level policies may not be reliably read by Chromium-based browsers. For critical policies, use the NixOS module instead.
Flags can be set declaratively in your NixOS or Home Manager configuration. These are baked into the wrapped binary:
programs.helium = {
enable = true;
flags = [
"--disable-gpu"
"--ozone-platform-hint=auto"
"--start-maximized"
];
};Helium also supports persistent flags via configuration files (a feature added by Linux distro packagers). These are read by the upstream wrapper script and are useful for per-user flags you don't want managed by Nix:
Create /etc/helium-flags.conf:
# Disable hardware acceleration
--disable-gpu
# Enable Wayland
--ozone-platform-hint=auto
Create ~/.config/helium-flags.conf:
# Enable touchpad swipe navigation
--enable-features=TouchpadOverscrollHistoryNavigation
# Start maximized
--start-maximized
Format: One flag per line, # for comments. The file is read by Helium's wrapper script.
This flake packaging is licensed under GPL-3.0 (see LICENSE).
Helium Browser is also licensed under GPL-3.0 - see imputnet/helium.
