Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions hm-module/default-browser.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@
cfg = getAttrFromPath modulePath config;
in {
options = setAttrByPath modulePath {
enablePrivateDesktopEntry = mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable an additional desktop entry for Zen Browser to launch directly in a private window.
'';
};

setAsDefaultBrowser = mkOption {
type = lib.types.bool;
default = false;
Expand Down
6 changes: 2 additions & 4 deletions hm-module/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ in {
then cfg.unwrappedPackage
else
self.packages.${pkgs.stdenv.hostPlatform.system}."${name}-unwrapped".override {
policies = cfg.policies;
inherit (cfg) policies enablePrivateDesktopEntry;
};

getPackage = sine:
Expand Down Expand Up @@ -102,9 +102,7 @@ in {
then "zen-browser"
else "zen-${name}";
}).override {
extraPrefs = cfg.extraPrefs;
extraPrefsFiles = cfg.extraPrefsFiles;
nativeMessagingHosts = cfg.nativeMessagingHosts;
inherit (cfg) extraPrefs extraPrefsFiles nativeMessagingHosts;
};
in
mkDefault (
Expand Down
97 changes: 55 additions & 42 deletions package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
variant,
icon ? null,
policies ? {},
enablePrivateDesktopEntry ? false,
lib,
stdenv,
config,
Expand Down Expand Up @@ -138,49 +139,61 @@ in

sourceRoot = lib.optionalString stdenv.hostPlatform.isDarwin ".";

desktopItems = [
(makeDesktopItem {
name = binaryName;
desktopName = "Zen Browser${lib.optionalString (name == "twilight") " Twilight"}";
exec = "${binaryName} %u";
icon =
if icon != null && (lib.isString icon || lib.isPath icon)
then icon
else desktopIconName;
type = "Application";
mimeTypes = [
"text/html"
"text/xml"
"application/xhtml+xml"
"x-scheme-handler/http"
"x-scheme-handler/https"
"application/x-xpinstall"
"application/pdf"
"application/json"
];
startupWMClass = binaryName;
categories = ["Network" "WebBrowser"];
startupNotify = true;
terminal = false;
keywords = ["Internet" "WWW" "Browser" "Web" "Explorer"];
extraConfig.X-MultipleArgs = "false";

actions = {
new-windows = {
name = "Open a New Window";
exec = "${binaryName} %u";
desktopItems = let
mkDesktopEntry = args:
makeDesktopItem (args
// {
icon =
if icon != null && (lib.isString icon || lib.isPath icon)
then icon
else desktopIconName;
type = "Application";
mimeTypes = [
"text/html"
"text/xml"
"application/xhtml+xml"
"x-scheme-handler/http"
"x-scheme-handler/https"
"application/x-xpinstall"
"application/pdf"
"application/json"
];
startupWMClass = binaryName;
categories = ["Network" "WebBrowser"];
startupNotify = true;
terminal = false;
extraConfig.X-MultipleArgs = "false";
keywords = ["Internet" "WWW" "Browser" "Web" "Explorer"];
});
in
[
(mkDesktopEntry {
name = binaryName;
desktopName = "Zen Browser${lib.optionalString (name == "twilight") " Twilight"}";
exec = "${binaryName} %u";
actions = {
new-windows = {
name = "Open a New Window";
exec = "${binaryName} %u";
};
new-private-window = {
name = "Open a New Private Window";
exec = "${binaryName} --private-window %u";
};
profilemanager = {
name = "Open the Profile Manager";
exec = "${binaryName} --ProfileManager %u";
};
};
new-private-window = {
name = "Open a New Private Window";
exec = "${binaryName} --private-window %u";
};
profilemanager = {
name = "Open the Profile Manager";
exec = "${binaryName} --ProfileManager %u";
};
};
})
];
})
]
++ lib.optionals (enablePrivateDesktopEntry == true) [
(mkDesktopEntry {
name = "${binaryName}-private";
desktopName = "${applicationName} - Private Session";
exec = "${binaryName} --private-window %u";
})
];

nativeBuildInputs =
lib.optionals stdenv.hostPlatform.isLinux [
Expand Down
1 change: 1 addition & 0 deletions tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"enable-beta-via-module" = ./enable-beta.nix;
"pins-persistent" = ./pins-persistent.nix;
"default-browser" = ./default-browser.nix;
"private-desktop-entry" = ./private-desktop-entry.nix;
};
in
pkgs.lib.mapAttrs (name: path: mkGenericTest name path) suites
28 changes: 28 additions & 0 deletions tests/private-desktop-entry.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{zen-browser-flake, ...}: {
homeModule = {
imports = [zen-browser-flake.homeModules.beta];

programs.zen-browser = {
enable = true;
enablePrivateDesktopEntry = true;
};
};

testScript = ''
pkg_path = machine.succeed(
"su - testuser -c 'readlink -f $(which zen-beta)' | sed \"s|/bin/zen-beta$||\""
).strip()

machine.succeed(f"test -f {pkg_path}/share/applications/zen-beta.desktop")
machine.succeed(f"test -f {pkg_path}/share/applications/zen-beta-private.desktop")

main_desktop_content = machine.succeed(f"cat {pkg_path}/share/applications/zen-beta.desktop")
assert "Name=Zen Browser (Beta)" in main_desktop_content
assert "Exec=zen-beta --name zen-beta %U" in main_desktop_content
assert "Exec=zen-beta --private-window %U" in main_desktop_content

private_desktop_content = machine.succeed(f"cat {pkg_path}/share/applications/zen-beta-private.desktop")
assert "Name=Zen Browser (Beta) - Private Session" in private_desktop_content
assert "Exec=zen-beta --private-window %u" in private_desktop_content
'';
}