diff --git a/nix/modules/home-manager/__programs/zen.nix b/nix/modules/home-manager/__programs/zen.nix new file mode 100644 index 0000000..1e8415a --- /dev/null +++ b/nix/modules/home-manager/__programs/zen.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, home-manager, ... }: +with lib; +let + inherit (pkgs.stdenv.hostPlatform) isDarwin; + + modulePath = [ "programs" "zen" ]; + cfg = getAttrFromPath modulePath config; + + mkFirefoxModule = import "${home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix"; + + # Because Zen required ZenAvatarPath to be in profiles.ini + # REF: https://github.com/nix-community/home-manager/blob/60bb110917844d354f3c18e05450606a435d2d10/modules/programs/firefox/mkFirefoxModule.nix#L55-L69 + profiles = flip mapAttrs' cfg.profiles (_: profile: + nameValuePair "Profile${toString profile.id}" { + Name = profile.name; + Path = if isDarwin then "Profiles/${profile.path}" else profile.path; + IsRelative = 1; + Default = if profile.isDefault then 1 else 0; + ZenAvatarPath = "chrome://browser/content/zen-avatars/avatar-1.svg"; + }) // { + General = { + StartWithLastProfile = 1; + } // lib.optionalAttrs (cfg.profileVersion != null) { + Version = cfg.profileVersion; + }; + }; + + profilesIni = generators.toINI { } profiles; +in { + imports = [ + (mkFirefoxModule { + inherit modulePath; + name = "Zen Browser"; + wrappedPackageName = "zen"; # Imaginary wrappedPackageName so `programs.zen.policies` is added properly + visible = true; + + platforms.linux = rec { + vendorPath = ".zen"; + configPath = "${vendorPath}"; + }; + platforms.darwin = rec { + vendorPath = "Library/Application Support/Zen"; + configPath = "${vendorPath}"; + }; + }) + ]; + + config = { + home.file."${cfg.configPath}/profiles.ini" = mkForce (mkIf (cfg.profiles != { }) { text = profilesIni; }); + }; +} diff --git a/nix/modules/home-manager/zen.nix b/nix/modules/home-manager/zen.nix new file mode 100644 index 0000000..7c0229e --- /dev/null +++ b/nix/modules/home-manager/zen.nix @@ -0,0 +1,17 @@ +{ pkgs, config, vars, ... }: + +{ + programs.zen = { + enable = true; + # REF: https://github.com/nix-community/home-manager/blob/342a1d682386d3a1d74f9555cb327f2f311dda6e/modules/programs/firefox/mkFirefoxModule.nix#L264 + package = null; # we only want the config + profiles.${config.home.username} = { + id = 0; + isDefault = true; + }; + + nativeMessagingHosts = [ + pkgs.passff-host + ]; + }; +} diff --git a/nix/users/default.nix b/nix/users/default.nix index e6e3284..8d84d3d 100644 --- a/nix/users/default.nix +++ b/nix/users/default.nix @@ -3,6 +3,10 @@ let mkSystem = import ../lib/mkSystem.nix; mkBrew = import ../overlays/darwin/brew.nix; + + defaultModules = [ + ../modules/home-manager/__programs/zen.nix + ]; in { # Host list @@ -38,10 +42,11 @@ in home-manager.lib.homeManagerConfiguration { pkgs = pkgs-unstable; # FIXME: switch to stable when 24.11 become stable extraSpecialArgs = { inherit inputs pkgs pkgs-unstable home-manager vars; }; - modules = [ + modules = defaultModules ++ [ ./ziro ./ziro/darwin.nix ../modules/home-manager/floorp.nix + ../modules/home-manager/zen.nix ]; }; @@ -59,10 +64,11 @@ in home-manager.lib.homeManagerConfiguration { pkgs = pkgs-unstable; # FIXME: switch to stable when 24.11 become stable extraSpecialArgs = { inherit inputs pkgs pkgs-unstable home-manager vars; }; - modules = [ + modules = defaultModules ++ [ ./ziro ./ziro/linux.nix ../modules/home-manager/floorp.nix + ../modules/home-manager/zen.nix ]; }; } diff --git a/nix/users/ziro/default.nix b/nix/users/ziro/default.nix index 37c72c0..05d522f 100644 --- a/nix/users/ziro/default.nix +++ b/nix/users/ziro/default.nix @@ -2,21 +2,23 @@ let username = "ziro"; - userChrome = builtins.replaceStrings ["/*ZI:*/18em/*:VERTICAL-TAB-HOVER-WIDTH-IN-EM*/"] ["${builtins.toString vars.floorp.verticalTabHoverWidthInEm}em"] (builtins.readFile ../../../include/floorp/ziro-userChrome.css); - settings = { + userChrome-ff-floorp = builtins.replaceStrings ["/*ZI:*/18em/*:VERTICAL-TAB-HOVER-WIDTH-IN-EM*/"] ["${builtins.toString vars.floorp.verticalTabHoverWidthInEm}em"] (builtins.readFile ../../../include/floorp/ziro-userChrome.css); + settings-ff-common = { "browser.toolbars.bookmarks.visibility" = "newtab"; - "floorp.browser.sidebar.is.displayed" = false; - "floorp.browser.tabbar.settings" = 2; - "floorp.browser.tabs.verticaltab" = true; - "floorp.verticaltab.hover.enabled" = true; - "floorp.tabbar.style" = 2; "network.dns.disableIPv6" = true; "sidebar.position_start" = false; "signon.management.page.breach-alerts.enabled" = false; "signon.rememberSignons" = false; "extensions.autoDisableScopes" = 0; # Auto enable extensions }; - extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + settings-ff-floorp = settings-ff-common // { + "floorp.browser.sidebar.is.displayed" = false; + "floorp.browser.tabbar.settings" = 2; + "floorp.browser.tabs.verticaltab" = true; + "floorp.verticaltab.hover.enabled" = true; + "floorp.tabbar.style" = 2; + }; + extensions-ff-common = with pkgs.nur.repos.rycee.firefox-addons; [ # AdBlocker ublock-origin @@ -40,11 +42,20 @@ in { }; programs.floorp.profiles.${username} = { - inherit userChrome settings extensions; + userChrome = userChrome-ff-floorp; + settings = settings-ff-floorp; + extensions = extensions-ff-common; }; programs.floorp.profiles.null = { id = 1; - inherit userChrome settings extensions; + userChrome = userChrome-ff-floorp; + settings = settings-ff-floorp; + extensions = extensions-ff-common; + }; + + programs.zen.profiles.${username} = { + settings = settings-ff-common; + extensions = extensions-ff-common; }; xdg.configFile = {