diff --git a/modules/programs/chromium.nix b/modules/programs/chromium.nix
index 5a10fe760..530748ec2 100644
--- a/modules/programs/chromium.nix
+++ b/modules/programs/chromium.nix
@@ -4,6 +4,14 @@ with lib;
let
+ supportedBrowsers = [
+ "chromium"
+ "google-chrome"
+ "google-chrome-beta"
+ "google-chrome-dev"
+ "brave"
+ ];
+
browserModule = defaultPkg: name: visible:
let
browser = (builtins.parseDrvName defaultPkg.name).name;
@@ -11,10 +19,10 @@ let
in {
enable = mkOption {
inherit visible;
+ type = types.bool;
default = false;
example = true;
description = "Whether to enable ${name}.";
- type = lib.types.bool;
};
package = mkOption {
@@ -24,6 +32,25 @@ let
defaultText = literalExpression "pkgs.${browser}";
description = "The ${name} package to use.";
};
+
+ commandLineArgs = mkOption {
+ inherit visible;
+ type = types.listOf types.str;
+ default = [ ];
+ example = [ "--enable-logging=stderr" "--ignore-gpu-blocklist" ];
+ description = ''
+ List of command-line arguments to be passed to ${name}.
+
+ Note this option does not have any effect when using a
+ custom package for .
+
+ For a list of common switches, see
+ Chrome switches.
+
+ To search switches for other components, see
+ Chromium codesearch.
+ '';
+ };
} // optionalAttrs (!isProprietaryChrome) {
# Extensions do not work with Google Chrome
# see https://github.com/nix-community/home-manager/issues/1383
@@ -105,6 +132,7 @@ let
drvName = (builtins.parseDrvName cfg.package.name).name;
browser = if drvName == "ungoogled-chromium" then "chromium" else drvName;
+ isProprietaryChrome = hasPrefix "google-chrome" drvName;
darwinDirs = {
chromium = "Chromium";
@@ -135,9 +163,19 @@ let
in mkIf cfg.enable {
home.packages = [ cfg.package ];
- home.file = listToAttrs (map extensionJson (cfg.extensions or [ ]));
+ home.file = optionalAttrs (!isProprietaryChrome)
+ (listToAttrs (map extensionJson cfg.extensions));
};
+ browserPkgs = genAttrs supportedBrowsers (browser:
+ let cfg = config.programs.${browser};
+ in if cfg.commandLineArgs != [ ] then
+ pkgs.${browser}.override {
+ commandLineArgs = concatStringsSep " " cfg.commandLineArgs;
+ }
+ else
+ pkgs.${browser});
+
in {
# Extensions do not work with the proprietary Google Chrome version
# see https://github.com/nix-community/home-manager/issues/1383
@@ -149,20 +187,16 @@ in {
];
options.programs = {
- chromium = browserModule pkgs.chromium "Chromium" true;
- google-chrome = browserModule pkgs.google-chrome "Google Chrome" false;
+ chromium = browserModule browserPkgs.chromium "Chromium" true;
+ google-chrome =
+ browserModule browserPkgs.google-chrome "Google Chrome" false;
google-chrome-beta =
- browserModule pkgs.google-chrome-beta "Google Chrome Beta" false;
+ browserModule browserPkgs.google-chrome-beta "Google Chrome Beta" false;
google-chrome-dev =
- browserModule pkgs.google-chrome-dev "Google Chrome Dev" false;
- brave = browserModule pkgs.brave "Brave Browser" false;
+ browserModule browserPkgs.google-chrome-dev "Google Chrome Dev" false;
+ brave = browserModule browserPkgs.brave "Brave Browser" false;
};
- config = mkMerge [
- (browserConfig config.programs.chromium)
- (browserConfig config.programs.google-chrome)
- (browserConfig config.programs.google-chrome-beta)
- (browserConfig config.programs.google-chrome-dev)
- (browserConfig config.programs.brave)
- ];
+ config = mkMerge
+ (map (browser: browserConfig config.programs.${browser}) supportedBrowsers);
}