summaryrefslogtreecommitdiff
path: root/modules/home-manager/personal/programs/firefox
diff options
context:
space:
mode:
Diffstat (limited to 'modules/home-manager/personal/programs/firefox')
-rw-r--r--modules/home-manager/personal/programs/firefox/default.nix305
-rw-r--r--modules/home-manager/personal/programs/firefox/engines.nix87
-rw-r--r--modules/home-manager/personal/programs/firefox/userjs.nix15
3 files changed, 245 insertions, 162 deletions
diff --git a/modules/home-manager/personal/programs/firefox/default.nix b/modules/home-manager/personal/programs/firefox/default.nix
index d103c3d..3f1963d 100644
--- a/modules/home-manager/personal/programs/firefox/default.nix
+++ b/modules/home-manager/personal/programs/firefox/default.nix
@@ -4,178 +4,221 @@
pkgs,
...
}:
-with lib; let
+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; };
webappsWithIds =
- (builtins.foldl' ({
- counter,
- value,
- }: {name, ...} @ next: {
- counter = counter + 1;
- value =
- value
- ++ [
- (next
+ (builtins.foldl'
+ (
+ {
+ counter,
+ value,
+ }:
+ { name, ... }@next:
+ {
+ counter = counter + 1;
+ value = value ++ [
+ (
+ next
// {
id = counter;
profileName = lib.toLower name;
- })
+ }
+ )
];
- }) {
+ }
+ )
+ {
counter = 0;
- value = [];
+ value = [ ];
}
- cfg.webapps)
- .value;
-in {
+ cfg.webapps
+ ).value;
+in
+{
options.personal.firefox = {
webapps = lib.mkOption {
- type = with lib.types;
+ type =
+ with lib.types;
listOf (submodule {
- options = let
- mkTypedOption = type: lib.mkOption {inherit type;};
- in {
- name = mkTypedOption str;
- genericName = mkTypedOption str // {default = "";};
- url = mkTypedOption str;
- comment = mkTypedOption str // {default = "";};
- extraUserJS = mkTypedOption lines // {default = "";};
- categories = mkTypedOption (listOf str) // {default = [];};
- icon = mkTypedOption path;
- };
+ options =
+ let
+ mkTypedOption = type: lib.mkOption { inherit type; };
+ in
+ {
+ name = mkTypedOption str;
+ genericName = mkTypedOption str // {
+ default = "";
+ };
+ url = mkTypedOption str;
+ 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: {
- id,
- profileName,
- extraUserJS,
- ...
- }:
- prev
- // {
- "${profileName}" = {
- id = id + 2;
+ builtins.foldl'
+ (
+ prev:
+ {
+ id,
+ profileName,
+ extraUserJS,
+ ...
+ }:
+ prev
+ // {
+ "${profileName}" = {
+ id = id + 2;
+ extensions.packages = 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;
+ };
+ }
+ )
+ {
+ default = {
+ id = 0; # isDefault = true
+
extensions.packages = with pkgs.personal.firefoxAddons; [
+ canvasblocker
clearurls
+ darkreader
neat-url
redirector
smart-referer
+ temporary-containers
+ tree-style-tab
ublock-origin
unpaywall
url-in-title
];
search = {
- force = true;
- engines = with engines; disableDefault // {inherit Searx;};
+ force = lib.mkDefault true;
+ engines =
+ with engines;
+ disableDefault
+ // {
+ inherit Searx;
+ }
+ // lib.optionalAttrs config.personal.identities.personal personal
+ // lib.optionalAttrs config.personal.identities.work work
+ // lib.optionalAttrs config.personal.profiles.dev dev;
default = "Searx";
- privateDefault = "Searx";
+ order = [
+ "Searx"
+ "Wikipedia"
+ ];
};
- extraConfig = userjs.streaming + extraUserJS;
+ extraConfig = userjs.default;
+ userChrome = ./userchrome/treestyletabs-outer.css;
};
- }) {
- default = {
- id = 0; # isDefault = true
- extensions.packages = with pkgs.personal.firefoxAddons; [
- canvasblocker
- clearurls
- darkreader
- neat-url
- redirector
- smart-referer
- temporary-containers
- tree-style-tab
- ublock-origin
- unpaywall
- url-in-title
- ];
- search = {
- force = lib.mkDefault true;
- engines = with engines;
- disableDefault
- // {
- inherit Searx;
- }
- // 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"];
- };
- extraConfig = userjs.default;
- userChrome = ./userchrome/treestyletabs-outer.css;
- };
-
- videoconferencing = {
- id = 1;
- extensions.packages = with pkgs.personal.firefoxAddons; [
- clearurls
- darkreader
- neat-url
- redirector
- smart-referer
- multi-account-containers
- tree-style-tab
- ublock-origin
- unpaywall
- url-in-title
- ];
- search = {
- force = true;
- engines = with engines; disableDefault // {inherit Searx;};
- default = "Searx";
+ videoconferencing = {
+ id = 1;
+ extensions.packages = with pkgs.personal.firefoxAddons; [
+ clearurls
+ darkreader
+ neat-url
+ redirector
+ smart-referer
+ multi-account-containers
+ tree-style-tab
+ ublock-origin
+ unpaywall
+ url-in-title
+ ];
+ search = {
+ force = true;
+ engines = with engines; disableDefault // { inherit Searx; };
+ default = "Searx";
+ };
+ extraConfig = userjs.videoconferencing;
+ userChrome = ./userchrome/treestyletabs-outer.css;
};
- extraConfig = userjs.videoconferencing;
- userChrome = ./userchrome/treestyletabs-outer.css;
- };
- }
- 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}";
+ 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}";
+ };
+ }
+ )
+ {
+ videoconferences = {
+ name = "Video Conferences";
+ genericName = "Video conference";
+ comment = "Use video conferencing software in a browser.";
+ exec = "${firefoxInProfile "videoconferencing"}";
+ categories = [
+ "Network"
+ "VideoConference"
+ ];
};
- }) {
- videoconferences = {
- name = "Video Conferences";
- genericName = "Video conference";
- comment = "Use video conferencing software in a browser.";
- exec = "${firefoxInProfile "videoconferencing"}";
- categories = ["Network" "VideoConference"];
- };
- }
- webappsWithIds;
+ }
+ webappsWithIds;
home.shellAliases.fftmp = "firefox --profile $(mktemp -d)";
home.sessionVariables.BROWSER = "firefox";
diff --git a/modules/home-manager/personal/programs/firefox/engines.nix b/modules/home-manager/personal/programs/firefox/engines.nix
index cc6a318..ddd5f3b 100644
--- a/modules/home-manager/personal/programs/firefox/engines.nix
+++ b/modules/home-manager/personal/programs/firefox/engines.nix
@@ -1,44 +1,67 @@
{
lib,
pkgs,
-}: let
+}:
+let
everyday = 24 * 60 * 60 * 1000;
searchTerms = "{searchTerms}";
nixosIcon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
self = {
- disable = engines: lib.genAttrs engines (_: {metaData.hidden = true;});
- disableDefault = self.disable ["google" "Amazon.fr" "bing"];
+ disable =
+ engines:
+ lib.genAttrs engines (_: {
+ metaData.hidden = true;
+ });
+ disableDefault = self.disable [
+ "google"
+ "Amazon.fr"
+ "bing"
+ ];
nix = {
- inherit (self) "Home Manager Options" "NixOS Options" "NixOS Wiki" "Nix Packages";
+ inherit (self)
+ "Home Manager Options"
+ "NixOS Options"
+ "NixOS Wiki"
+ "Nix Packages"
+ ;
};
- dev = self.nix // {inherit (self) AlternativeTo Phind;};
- personal = {inherit (self) Emojipedia;};
- work = {inherit (self) nLab;};
- all = self.dev // self.personal // self.work // {inherit (self) Searx;};
+ dev = self.nix // {
+ inherit (self) AlternativeTo Phind;
+ };
+ personal = { inherit (self) Emojipedia; };
+ work = { inherit (self) nLab; };
+ all = self.dev // self.personal // self.work // { inherit (self) Searx; };
Emojipedia = {
urls = [
{
template = "https://emojipedia.org/search/";
- params = [(lib.nameValuePair "q" searchTerms)];
+ params = [ (lib.nameValuePair "q" searchTerms) ];
}
];
icon = "https://emojipedia.org/static/img/favicons/favicon-16x16.png";
updateInterval = everyday;
- definedAliases = ["@emojipedia" "@emoji" "@em"];
+ definedAliases = [
+ "@emojipedia"
+ "@emoji"
+ "@em"
+ ];
};
AlternativeTo = {
urls = [
{
template = "https://alternativeto.net/browse/search/";
- params = [(lib.nameValuePair "q" searchTerms)];
+ params = [ (lib.nameValuePair "q" searchTerms) ];
}
];
icon = "https://alternativeto.net/static/icons/a2/favicon-16x16.png";
updateInterval = everyday;
- definedAliases = ["@alternativeto" "@a2"];
+ definedAliases = [
+ "@alternativeto"
+ "@a2"
+ ];
};
"Home Manager Options" = {
@@ -48,7 +71,10 @@
}
];
icon = nixosIcon;
- definedAliases = ["@homemanager" "@hm"];
+ definedAliases = [
+ "@homemanager"
+ "@hm"
+ ];
};
"NixOS Options" = {
@@ -62,18 +88,24 @@
}
];
icon = nixosIcon;
- definedAliases = ["@nixos" "@no"];
+ definedAliases = [
+ "@nixos"
+ "@no"
+ ];
};
"NixOS Wiki" = {
urls = [
{
template = "https://wiki.nixos.org/w/index.php";
- params = [(lib.nameValuePair "search" searchTerms)];
+ params = [ (lib.nameValuePair "search" searchTerms) ];
}
];
icon = nixosIcon;
- definedAliases = ["@nixoswiki" "@nw"];
+ definedAliases = [
+ "@nixoswiki"
+ "@nw"
+ ];
};
"Nix Packages" = {
@@ -87,26 +119,32 @@
}
];
icon = nixosIcon;
- definedAliases = ["@nixpkgs" "@np"];
+ definedAliases = [
+ "@nixpkgs"
+ "@np"
+ ];
};
nLab = {
urls = [
{
template = "https://ncatlab.org/nlab/search";
- params = [(lib.nameValuePair "query" searchTerms)];
+ params = [ (lib.nameValuePair "query" searchTerms) ];
}
];
icon = "https://ncatlab.org/favicon.ico";
updateInterval = everyday;
- definedAliases = ["@ncatlab" "@nlab"];
+ definedAliases = [
+ "@ncatlab"
+ "@nlab"
+ ];
};
Searx = {
urls = [
{
template = "https://searx.aristote.fr/search";
- params = [(lib.nameValuePair "q" searchTerms)];
+ params = [ (lib.nameValuePair "q" searchTerms) ];
}
];
icon = "https://searx.aristote.fr/static/themes/simple/img/favicon.svg";
@@ -117,13 +155,16 @@
urls = [
{
template = "https://phind.com/search";
- params = [(lib.nameValuePair "q" searchTerms)];
+ params = [ (lib.nameValuePair "q" searchTerms) ];
}
];
icon = "https://www.phind.com/images/favicon.png";
updateInterval = everyday;
- definedAliases = ["@phind" "@ph"];
+ definedAliases = [
+ "@phind"
+ "@ph"
+ ];
};
};
in
- self
+self
diff --git a/modules/home-manager/personal/programs/firefox/userjs.nix b/modules/home-manager/personal/programs/firefox/userjs.nix
index 8c17fa6..3f2b6bd 100644
--- a/modules/home-manager/personal/programs/firefox/userjs.nix
+++ b/modules/home-manager/personal/programs/firefox/userjs.nix
@@ -1,7 +1,8 @@
{
arkenfox,
toUserJS,
-}: let
+}:
+let
self = {
arkenfox = builtins.readFile "${arkenfox}";
default =
@@ -14,8 +15,8 @@
"dom.allow_cut_copy" = true; # 2404
"dom.battery.enabled" = false; # 2502
"permissions.default.xr" = 2; # 2521
- "browser.search.separatePrivateDefault" = false; #0830
- "browser.search.separatePrivateDefault.ui.enabled" = false; #0830
+ "browser.search.separatePrivateDefault" = false; # 0830
+ "browser.search.separatePrivateDefault.ui.enabled" = false; # 0830
# Personal
## Warnings
@@ -57,12 +58,10 @@
"media.peerconnection.enabled" = true;
"media.peerconnection.ice.no_host" = false; # may or may not be required
"webgl.min_capability_mode" = true;
- "media.autoplay.blocking_policy" =
- 0; # optional (otherwise add site exceptions)
- "javascript.options.wasm" =
- true; # optional (some platforms may require this)
+ "media.autoplay.blocking_policy" = 0; # optional (otherwise add site exceptions)
+ "javascript.options.wasm" = true; # optional (some platforms may require this)
"dom.webaudio.enabled" = true;
};
};
in
- self
+self