aboutsummaryrefslogtreecommitdiff
path: root/share/cfg/firefox/default.nix
blob: 85b8fcf5bb17020803f64b31b005dfed32b6c349 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{ pkgs, ... }:
let
  # See https://github.com/nix-community/home-manager/pull/5381
  # and https://codeberg.org/PassFF/passff-host/src/commit/05c39de18b200d6f262d6dced13cdde7b12fdae3#preferences
  passff-host = pkgs.passff-host.overrideAttrs (old: {
    dontStrip = true;
    installPhase = ''
      substituteInPlace bin/${old.version}/passff.json \
        --replace PLACEHOLDER $out/share/passff-host/passff.py

      install -Dt $out/share/passff-host \
        bin/${old.version}/passff.{py,json}

      nativeMessagingPaths=(
        /lib/mozilla/native-messaging-hosts
        /etc/opt/chrome/native-messaging-hosts
        /etc/chromium/native-messaging-hosts
        /etc/vivaldi/native-messaging-hosts
        /lib/librewolf/native-messaging-hosts
      )

      for manifestDir in "''${nativeMessagingPaths[@]}"; do
        install -d $out$manifestDir
        cp $out/share/passff-host/passff.json $out$manifestDir/
      done
    '';

    patchPhase = ''
      sed -i 's#COMMAND = "pass"#COMMAND = "${
        pkgs.pass.withExtensions (ext: with ext; [ pass-otp ])
      }/bin/pass"#' src/passff.py
    '';
  });

  # Concatenate all files in the `./usercss` directory into one string
  css-files = map (n: ./usercss/${n}) (builtins.attrNames (builtins.readDir ./usercss));
  userChrome = builtins.concatStringsSep "\n" (map builtins.readFile css-files);
in
{
  home.sessionVariables.BROWSER = "firefox";

  programs.firefox = {
    nativeMessagingHosts = [
      passff-host
    ];
    profiles = {
      alice = {
        name = "alice";
        isDefault = true;
        inherit userChrome;

        search = {
          default = "DuckDuckGo";
          engines = {
            "Nix Packages" = {
              urls = [
                {
                  template = "https://search.nixos.org/packages";
                  params = [
                    {
                      name = "type";
                      value = "packages";
                    }
                    {
                      name = "query";
                      value = "{searchTerms}";
                    }
                  ];
                }
              ];

              icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
              definedAliases = [ "@np" ];
            };

            "NixOS Wiki" = {
              urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ];
              iconUpdateURL = "https://wiki.nixos.org/favicon.ico";
              updateInterval = 24 * 60 * 60 * 1000; # every day
              definedAliases = [ "@nw" ];
            };

            "Bing".metaData.hidden = true;
            # builtin engines only support specifying one additional alias
            "Google".medaData.alias = "@g";
          };
        }; # end of search

        settings = {
          "browser.compactmode.show" = true;
          "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
        };
      }; # end of alice (profile)
    }; # end of profiles
  };
}