summaryrefslogtreecommitdiff
path: root/modules/home-manager/personal/programs/firefox/default.nix
diff options
context:
space:
mode:
authoraristote <quentin.aristote@irif.fr>2025-07-29 15:25:11 +0200
committeraristote <quentin.aristote@irif.fr>2025-07-29 15:25:11 +0200
commitfc019d789523ce5f89436b8dbc458cf3b79abf43 (patch)
treeec56fd1b1ed9fc75096c0b09db48a152975e4d53 /modules/home-manager/personal/programs/firefox/default.nix
parenta3d19bc509d9f39fb41256cd55d2bd7706de202f (diff)
reformat everything with nixfmt
Diffstat (limited to 'modules/home-manager/personal/programs/firefox/default.nix')
-rw-r--r--modules/home-manager/personal/programs/firefox/default.nix305
1 files changed, 174 insertions, 131 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";