From ee57abe64eb9e68c2035f7a659d666e285ff1150 Mon Sep 17 00:00:00 2001 From: aristote Date: Tue, 23 Apr 2024 15:37:44 +0200 Subject: home: firefox: add default private search engine --- .../personal/programs/firefox/default.nix | 169 ++++++++++++--------- 1 file changed, 101 insertions(+), 68 deletions(-) (limited to 'modules/home-manager/personal/programs/firefox/default.nix') diff --git a/modules/home-manager/personal/programs/firefox/default.nix b/modules/home-manager/personal/programs/firefox/default.nix index 240b70c..bcc19fd 100644 --- a/modules/home-manager/personal/programs/firefox/default.nix +++ b/modules/home-manager/personal/programs/firefox/default.nix @@ -1,81 +1,102 @@ -{ config, lib, pkgs, ... }: - -with lib; -let +{ + config, + lib, + pkgs, + ... +}: +with lib; let cfg = config.personal.firefox; userjs = pkgs.callPackage ./userjs.nix { inherit (pkgs.personal.static.userjs) arkenfox; inherit (pkgs.lib.personal) toUserJS; }; - engines = import ./engines.nix { inherit lib pkgs; }; + engines = import ./engines.nix {inherit lib pkgs;}; userchrome = let userchromeTST = ./userchrome/treestyletabs.css; userchromeTSTColors = config.lib.stylix.colors { template = builtins.readFile ./userchrome/treestyletabs-colors.css; extension = ".css"; }; - in '' - @import "${userchromeTST}"; - '' + lib.optionalString (config.lib ? stylix) '' - @import "${userchromeTSTColors}"; - ''; - webappsWithIds = (builtins.foldl' ({ counter, value }: - { name, ... }@next: { - counter = counter + 1; - value = value ++ [ - (next // { - id = counter; - profileName = lib.toLower name; - }) - ]; - }) { - counter = 0; - value = [ ]; - } cfg.webapps).value; + in + '' + @import "${userchromeTST}"; + '' + + lib.optionalString (config.lib ? stylix) '' + @import "${userchromeTSTColors}"; + ''; + webappsWithIds = + (builtins.foldl' ({ + counter, + value, + }: {name, ...} @ next: { + counter = counter + 1; + value = + value + ++ [ + (next + // { + id = counter; + profileName = lib.toLower name; + }) + ]; + }) { + counter = 0; + value = []; + } + cfg.webapps) + .value; in { options.personal.firefox = { webapps = lib.mkOption { type = with lib.types; listOf (submodule { - options = let mkTypedOption = type: lib.mkOption { inherit type; }; + options = let + mkTypedOption = type: lib.mkOption {inherit type;}; in { name = mkTypedOption str; - genericName = mkTypedOption str // { default = ""; }; + genericName = mkTypedOption str // {default = "";}; url = mkTypedOption str; - comment = mkTypedOption str // { default = ""; }; - extraUserJS = mkTypedOption lines // { default = ""; }; - categories = mkTypedOption (listOf str) // { default = [ ]; }; + comment = mkTypedOption str // {default = "";}; + extraUserJS = mkTypedOption lines // {default = "";}; + categories = mkTypedOption (listOf str) // {default = [];}; icon = mkTypedOption path; }; }); - default = [ ]; + default = []; }; }; config = lib.mkMerge [ { - programs.firefox.profiles = builtins.foldl' (prev: - { name, id, profileName, extraUserJS, ... }: - prev // { - "${profileName}" = { - id = id + 2; - extensions = with pkgs.personal.firefoxAddons; [ - clearurls - neat-url - redirector - smart-referer - ublock-origin - unpaywall - url-in-title - ]; - search = { - force = true; - engines = with engines; disableDefault // { inherit Searx; }; - default = "Searx"; + programs.firefox.profiles = + builtins.foldl' (prev: { + id, + profileName, + extraUserJS, + ... + }: + prev + // { + "${profileName}" = { + id = id + 2; + extensions = with pkgs.personal.firefoxAddons; [ + clearurls + neat-url + redirector + smart-referer + ublock-origin + unpaywall + url-in-title + ]; + search = { + force = true; + engines = with engines; disableDefault // {inherit Searx;}; + default = "Searx"; + privateDefault = "Searx"; + }; + extraConfig = userjs.streaming + extraUserJS; }; - extraConfig = userjs.streaming + extraUserJS; - }; - }) { + }) { default = { id = 0; # isDefault = true @@ -95,14 +116,16 @@ in { search = { force = lib.mkDefault true; engines = with engines; - disableDefault // { + disableDefault + // { inherit Searx; - } // lib.optionalAttrs config.personal.identities.personal + } + // lib.optionalAttrs config.personal.identities.personal personal // lib.optionalAttrs config.personal.identities.work work // lib.optionalAttrs config.personal.profiles.dev dev; default = "Searx"; - order = [ "Searx" "Wikipedia" ]; + order = ["Searx" "Wikipedia"]; }; extraConfig = userjs.default; userChrome = userchrome; @@ -124,37 +147,47 @@ in { ]; search = { force = true; - engines = with engines; disableDefault // { inherit Searx; }; + engines = with engines; disableDefault // {inherit Searx;}; default = "Searx"; }; extraConfig = userjs.videoconferencing; userChrome = userchrome; }; - } webappsWithIds; + } + webappsWithIds; } (lib.mkIf config.programs.firefox.enable { xdg.desktopEntries = let firefoxProfilesDir = "${config.home.homeDirectory}/.mozilla/firefox"; - firefoxInProfile = profile: - '' - ${config.programs.firefox.package}/bin/firefox --profile "${firefoxProfilesDir}/${profile}"''; - in builtins.foldl' (prev: - { name, profileName, url, genericName, icon, comment, categories, ... }: - prev // { - "${profileName}" = { - inherit name genericName icon comment categories; - exec = "${firefoxInProfile profileName} ${url}"; - }; - }) { + firefoxInProfile = profile: '' + ${config.programs.firefox.package}/bin/firefox --profile "${firefoxProfilesDir}/${profile}"''; + in + builtins.foldl' (prev: { + profileName, + url, + genericName, + icon, + comment, + categories, + ... + }: + prev + // { + "${profileName}" = { + inherit name genericName icon comment categories; + exec = "${firefoxInProfile profileName} ${url}"; + }; + }) { videoconferences = { name = "Video Conferences"; genericName = "Video conference"; comment = "Use video conferencing software in a browser."; exec = "${firefoxInProfile "videoconferencing"}"; - categories = [ "Network" "VideoConference" ]; + categories = ["Network" "VideoConference"]; }; - } webappsWithIds; + } + webappsWithIds; home.shellAliases.fftmp = "firefox --profile $(mktemp -d)"; home.sessionVariables.BROWSER = "firefox"; -- cgit v1.2.3