summary refs log tree commit diff
diff options
context:
space:
mode:
authortzlil <tzlils@protonmail.com>2023-10-20 11:34:30 +0300
committertzlil <tzlils@protonmail.com>2023-10-20 11:34:30 +0300
commit00db7aca343a925220b17223b02dfb79b05f597c (patch)
treec4d578c37aec06001ec52c9494339eb62418bbf4
parent313b15f10fee61500de8b8b1333702da8375f6b6 (diff)
stuff
-rw-r--r--flake.lock249
-rw-r--r--flake.nix4
-rw-r--r--hosts/navi/default.nix134
-rw-r--r--hosts/navi/hardware-configuration.nix2
-rw-r--r--hosts/vps/services/website.nix24
-rw-r--r--mixins/cli.nix2
-rw-r--r--mixins/firefox/absolute-minimum.nix228
-rw-r--r--mixins/firefox/minimum/addons-passthru.patch (renamed from mixins/firefox/addons-passthru.patch)0
-rw-r--r--mixins/firefox/minimum/default.nix414
-rw-r--r--mixins/firefox/minimum/simplefox.css205
-rw-r--r--mixins/firefox/schizo.nix80
-rw-r--r--mixins/multimedia.nix6
-rw-r--r--mixins/sway.nix69
-rw-r--r--profiles/graphical.nix14
-rw-r--r--secrets/mullvad.age9
-rw-r--r--secrets/secrets.nix1
16 files changed, 1090 insertions, 351 deletions
diff --git a/flake.lock b/flake.lock
index 4daa910..4ca71b8 100644
--- a/flake.lock
+++ b/flake.lock
@@ -7,11 +7,11 @@
         "nixpkgs": "nixpkgs"
       },
       "locked": {
-        "lastModified": 1690228878,
-        "narHash": "sha256-9Xe7JV0krp4RJC9W9W9WutZVlw6BlHTFMiUP/k48LQY=",
+        "lastModified": 1695384796,
+        "narHash": "sha256-TYlE4B0ktPtlJJF9IFxTWrEeq+XKG8Ny0gc2FGEAdj0=",
         "owner": "ryantm",
         "repo": "agenix",
-        "rev": "d8c973fd228949736dedf61b7f8cc1ece3236792",
+        "rev": "1f677b3e161d3bdbfd08a939e8f25de2568e0ef4",
         "type": "github"
       },
       "original": {
@@ -49,11 +49,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1693905783,
-        "narHash": "sha256-ALIQLAzTJ6iy46U7tL62Nxd7247683kOR6TlSU6PXhU=",
+        "lastModified": 1695737383,
+        "narHash": "sha256-l8gj3ly3a0ixhwE9BErrnLXMgGnO48YKYZ3+n/1U6IE=",
         "owner": "nix-community",
         "repo": "disko",
-        "rev": "b2ea7d62581fa50d3e19a949b85fe04c1e8d7384",
+        "rev": "07dd3af9802a8e52991937fdddd4d3085c76df34",
         "type": "github"
       },
       "original": {
@@ -71,11 +71,11 @@
       },
       "locked": {
         "dir": "pkgs/firefox-addons",
-        "lastModified": 1693911773,
-        "narHash": "sha256-pYrkoEgXNHp43WAFJhUtr814tHWDLqITtzNpOvSfFz0=",
+        "lastModified": 1695742406,
+        "narHash": "sha256-HxkMqDIy7PfyZ46bMPO/G39prSKXHbfOS2UsejZqT4g=",
         "owner": "rycee",
         "repo": "nur-expressions",
-        "rev": "64704beee52000f47146a7d96e4a167e10376099",
+        "rev": "3f0a01fd2408a31af91bb768260b7c0e5c2fefcf",
         "type": "gitlab"
       },
       "original": {
@@ -85,6 +85,51 @@
         "type": "gitlab"
       }
     },
+    "flake-parts": {
+      "inputs": {
+        "nixpkgs-lib": [
+          "schizofox",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1690933134,
+        "narHash": "sha256-ab989mN63fQZBFrkk4Q8bYxQCktuHmBIBqUG1jl6/FQ=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "59cf3f1447cfc75087e7273b04b31e689a8599fb",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
+    "flake-parts_2": {
+      "inputs": {
+        "nixpkgs-lib": [
+          "schizofox",
+          "nixpak",
+          "hercules-ci-effects",
+          "hercules-ci-agent",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1688466019,
+        "narHash": "sha256-VeM2akYrBYMsb4W/MmBo1zmaMfgbL4cH3Pu8PGyIwJ0=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "8e8d955c22df93dbe24f19ea04f47a74adbdc5ec",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
     "flake-utils": {
       "locked": {
         "lastModified": 1629284811,
@@ -102,11 +147,11 @@
     },
     "hardware": {
       "locked": {
-        "lastModified": 1693718952,
-        "narHash": "sha256-+nGdJlgTk0MPN7NygopipmyylVuAVi7OItIwTlwtGnw=",
+        "lastModified": 1695541019,
+        "narHash": "sha256-rs++zfk41K9ArWkDAlmBDlGlKO8qeRIRzdjo+9SmNFI=",
         "owner": "nixos",
         "repo": "nixos-hardware",
-        "rev": "793de77d9f83418b428e8ba70d1e42c6507d0d35",
+        "rev": "61283b30d11f27d5b76439d43f20d0c0c8ff5296",
         "type": "github"
       },
       "original": {
@@ -115,6 +160,69 @@
         "type": "github"
       }
     },
+    "haskell-flake": {
+      "locked": {
+        "lastModified": 1684780604,
+        "narHash": "sha256-2uMZsewmRn7rRtAnnQNw1lj0uZBMh4m6Cs/7dV5YF08=",
+        "owner": "srid",
+        "repo": "haskell-flake",
+        "rev": "74210fa80a49f1b6f67223debdbf1494596ff9f2",
+        "type": "github"
+      },
+      "original": {
+        "owner": "srid",
+        "ref": "0.3.0",
+        "repo": "haskell-flake",
+        "type": "github"
+      }
+    },
+    "hercules-ci-agent": {
+      "inputs": {
+        "flake-parts": "flake-parts_2",
+        "haskell-flake": "haskell-flake",
+        "nixpkgs": "nixpkgs_3"
+      },
+      "locked": {
+        "lastModified": 1688568579,
+        "narHash": "sha256-ON0M56wtY/TIIGPkXDlJboAmuYwc73Hi8X9iJGtxOhM=",
+        "owner": "hercules-ci",
+        "repo": "hercules-ci-agent",
+        "rev": "367dd8cd649b57009a6502e878005a1e54ad78c5",
+        "type": "github"
+      },
+      "original": {
+        "id": "hercules-ci-agent",
+        "type": "indirect"
+      }
+    },
+    "hercules-ci-effects": {
+      "inputs": {
+        "flake-parts": [
+          "schizofox",
+          "nixpak",
+          "flake-parts"
+        ],
+        "hercules-ci-agent": "hercules-ci-agent",
+        "nixpkgs": [
+          "schizofox",
+          "nixpak",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1689397210,
+        "narHash": "sha256-fVxZnqxMbsDkB4GzGAs/B41K0wt/e+B/fLxmTFF/S20=",
+        "owner": "hercules-ci",
+        "repo": "hercules-ci-effects",
+        "rev": "0a63bfa3f00a3775ea3a6722b247880f1ffe91ce",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "hercules-ci-effects",
+        "type": "github"
+      }
+    },
     "home-manager": {
       "inputs": {
         "nixpkgs": [
@@ -143,11 +251,32 @@
         ]
       },
       "locked": {
-        "lastModified": 1693895999,
-        "narHash": "sha256-yN1XVFltQxiwle833KCqWkZNfBuRLWkXyEnOD+ljoYY=",
+        "lastModified": 1695738267,
+        "narHash": "sha256-LTNAbTQ96xSj17xBfsFrFS9i56U2BMLpD0BduhrsVkU=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "3c0e381fef63e4fbc6c3292c9e9cbcf479c01794",
+        "rev": "0f4e5b4999fd6a42ece5da8a3a2439a50e48e486",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "home-manager",
+        "type": "github"
+      }
+    },
+    "home-manager_3": {
+      "inputs": {
+        "nixpkgs": [
+          "schizofox",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1693187908,
+        "narHash": "sha256-cTcNpsqi1llmUFl9bmCdD0mTyfjhBrNFPhu2W12WXzA=",
+        "owner": "nix-community",
+        "repo": "home-manager",
+        "rev": "8bde7a651b94ba30bd0baaa9c4a08aae88cc2e92",
         "type": "github"
       },
       "original": {
@@ -158,11 +287,11 @@
     },
     "impermanence": {
       "locked": {
-        "lastModified": 1690797372,
-        "narHash": "sha256-GImz19e33SeVcIvBB7NnhbJSbTpFFmNtWLh7Z85Y188=",
+        "lastModified": 1694622745,
+        "narHash": "sha256-z397+eDhKx9c2qNafL1xv75lC0Q4nOaFlhaU1TINqb8=",
         "owner": "nix-community",
         "repo": "impermanence",
-        "rev": "e3a7acd113903269a1b5c8b527e84ce7ee859851",
+        "rev": "e9643d08d0d193a2e074a19d4d90c67a874d932e",
         "type": "github"
       },
       "original": {
@@ -178,11 +307,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1693711723,
-        "narHash": "sha256-5QmlVzskLciJ0QzYmZ6ULvKA7bP6pgV9wwrLBB0V3j0=",
+        "lastModified": 1695526222,
+        "narHash": "sha256-/NwZz3QcVplrfiDKk1thYg1EIHLSNucVHNUi2uwO3RI=",
         "owner": "Mic92",
         "repo": "nix-index-database",
-        "rev": "aca56a79afb82208af2b39d8459dd29c10989135",
+        "rev": "25d6369c232bbea1ec1f90226fd17982e7a0a647",
         "type": "github"
       },
       "original": {
@@ -211,6 +340,32 @@
         "type": "github"
       }
     },
+    "nixpak": {
+      "inputs": {
+        "flake-parts": [
+          "schizofox",
+          "flake-parts"
+        ],
+        "hercules-ci-effects": "hercules-ci-effects",
+        "nixpkgs": [
+          "schizofox",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1692831528,
+        "narHash": "sha256-EG/hn6KpDCfQSVHoKoxU+4MgMs8gJzrrHtpo2atTvWo=",
+        "owner": "nixpak",
+        "repo": "nixpak",
+        "rev": "8b331d0e2f46c72731303311f65f3690b1917816",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nixpak",
+        "repo": "nixpak",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1677676435,
@@ -229,11 +384,27 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1693663421,
-        "narHash": "sha256-ImMIlWE/idjcZAfxKK8sQA7A1Gi/O58u5/CJA+mxvl8=",
+        "lastModified": 1695360818,
+        "narHash": "sha256-JlkN3R/SSoMTa+CasbxS1gq+GpGxXQlNZRUh9+LIy/0=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs_3": {
+      "locked": {
+        "lastModified": 1688322751,
+        "narHash": "sha256-eW62dC5f33oKZL7VWlomttbUnOTHrAbte9yNUNW8rbk=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "e56990880811a451abd32515698c712788be5720",
+        "rev": "0fbe93c5a7cac99f90b60bdf5f149383daaa615f",
         "type": "github"
       },
       "original": {
@@ -254,9 +425,33 @@
         "nix-index-database": "nix-index-database",
         "nixinate": "nixinate",
         "nixpkgs": "nixpkgs_2",
+        "schizofox": "schizofox",
         "viper-nix-common": "viper-nix-common"
       }
     },
+    "schizofox": {
+      "inputs": {
+        "flake-parts": "flake-parts",
+        "home-manager": "home-manager_3",
+        "nixpak": "nixpak",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1693418681,
+        "narHash": "sha256-Jaz8BeHNT7Nj0wPAo8h9xSTinDIRitn/s8/T8lG8yEA=",
+        "owner": "schizofox",
+        "repo": "schizofox",
+        "rev": "dacd1e479991cb0365a2ac4429308f3dc0f6d996",
+        "type": "github"
+      },
+      "original": {
+        "owner": "schizofox",
+        "repo": "schizofox",
+        "type": "github"
+      }
+    },
     "viper-nix-common": {
       "inputs": {
         "nixpkgs-lib": [
@@ -264,11 +459,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1688020048,
-        "narHash": "sha256-8LhRluyWvjtc94i3If8B3fEI8IXS+5MAcltZhfpyvW8=",
+        "lastModified": 1694194362,
+        "narHash": "sha256-y6UKj2no4j6JYVXI79ZjRxU4012RY0f1PNnNO2LqYpY=",
         "owner": "viperML",
         "repo": "nix-common",
-        "rev": "4b1950080dfffe478d6a200b1d602584f513eb40",
+        "rev": "147c204a4b14cd1ed458c7320217d11109019569",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 8bb2930..5a0f0e2 100644
--- a/flake.nix
+++ b/flake.nix
@@ -30,6 +30,10 @@
       url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
       inputs.nixpkgs.follows = "nixpkgs";
     };
+    schizofox = {
+      url = "github:schizofox/schizofox";
+      inputs.nixpkgs.follows = "nixpkgs";
+    };
   };
 
   outputs = inputs @ {self, ...}: {
diff --git a/hosts/navi/default.nix b/hosts/navi/default.nix
index 6d01de2..22f253b 100644
--- a/hosts/navi/default.nix
+++ b/hosts/navi/default.nix
@@ -15,8 +15,9 @@
     ../../mixins/pipewire.nix
     ../../mixins/multimedia.nix
     ../../mixins/syncthing.nix
-    ../../mixins/firefox
-    # ../../mixins/firefox/absolute-minimum.nix
+    # ../../mixins/firefox
+    ../../mixins/firefox/minimum
+    # ../../mixins/firefox/abs
   ];
 
   config = {
@@ -105,6 +106,21 @@
       };
     };
 
+    # mullvad
+    age.secrets.mullvad.file = ../../secrets/mullvad.age;
+    services.mullvad-vpn = {
+      enable = true;
+    };
+    systemd.services."mullvad-daemon".postStart = let
+      mullvad = config.services.mullvad-vpn.package;
+    in ''
+      while ! ${lib.getExe mullvad} status >/dev/null; do sleep 1; done
+      ${lib.getExe mullvad} account login < ${config.age.secrets.mullvad.path}
+      ${lib.getExe mullvad} auto-connect set on
+      ${lib.getExe mullvad} lockdown-mode set on
+      ${lib.getExe mullvad} tunnel ipv6 set on
+    '';
+
     home-manager.users.tzlil = {
       home.packages = [
         pkgs.schildichat-desktop-wayland
@@ -112,22 +128,88 @@
         pkgs.gtkcord4
         pkgs.cmst
 
-        (pkgs.stdenv.mkDerivation rec {
-          name = "pragmata";
-          version = "1.0";
-          src = ./pragmata;
+        # (pkgs.stdenv.mkDerivation rec {
+        #   name = "pragmata";
+        #   version = "1.0";
+        #   src = ./pragmata;
 
-          installPhase = ''
-            install -D ${src}/Pragmata_Pro_Bold_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Bold_Italic.otf
-                   install -D ${src}/Pragmata_Pro_Bold.otf $out/share/fonts/opentype/Pragmata_Pro_Bold.otf
-                   install -D ${src}/Pragmata_Pro_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Italic.otf
-                   install -D ${src}/Pragmata_Pro_Mono_Bold_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Bold_Italic.otf
-                   install -D ${src}/Pragmata_Pro_Mono_Bold.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Bold.otf
-                   install -D ${src}/Pragmata_Pro_Mono_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Italic.otf
-                   install -D ${src}/Pragmata_Pro_Mono_Regular.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Regular.otf
-                   install -D ${src}/Pragmata_Pro_Regular.otf $out/share/fonts/opentype/Pragmata_Pro_Regular.otf
-          '';
+        #   installPhase = ''
+        #     install -D ${src}/Pragmata_Pro_Bold_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Bold_Italic.otf
+        #            install -D ${src}/Pragmata_Pro_Bold.otf $out/share/fonts/opentype/Pragmata_Pro_Bold.otf
+        #            install -D ${src}/Pragmata_Pro_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Italic.otf
+        #            install -D ${src}/Pragmata_Pro_Mono_Bold_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Bold_Italic.otf
+        #            install -D ${src}/Pragmata_Pro_Mono_Bold.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Bold.otf
+        #            install -D ${src}/Pragmata_Pro_Mono_Italic.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Italic.otf
+        #            install -D ${src}/Pragmata_Pro_Mono_Regular.otf $out/share/fonts/opentype/Pragmata_Pro_Mono_Regular.otf
+        #            install -D ${src}/Pragmata_Pro_Regular.otf $out/share/fonts/opentype/Pragmata_Pro_Regular.otf
+        #   '';
+        # })
+        # (pkgs.stdenv.mkDerivation rec {
+        #   name = "APL";
+        #   version = "1.0";
+        #   src = pkgs.linkFarm "APL" [
+        #     {
+        #       name = "APL333.ttf";
+        #       path =
+        #         pkgs.fetchurl
+        #         {
+        #           url = "https://www.dyalog.com/uploads/files/download.php?file=fonts_and_keyboards/APL333.ttf";
+        #           hash = "sha256-rvwaHOvoU+p9huY7ZGiX5TrWr5XYSBelFm9IU4S6NQ4=";
+        #         };
+        #     }
+        #     {
+        #       name = "APL385.ttf";
+        #       path =
+        #         pkgs.fetchurl
+        #         {
+        #           url = "https://www.dyalog.com/uploads/files/download.php?file=fonts_and_keyboards/Apl385.ttf";
+        #           hash = "sha256-Hs4dom9BCM3tDLSkQd2RbEs6UFy0KqlLgOFxtIBOFwU=";
+        #         };
+        #     }
+        #   ];
+        #   installPhase = ''
+        #     install -D ${src}/APL333.ttf $out/share/fonts/truetype/APL333.ttf
+        #     install -D ${src}/APL385.ttf $out/share/fonts/truetype/APL385.ttf
+
+        #   '';
+        # })
+        # pkgs.apl386
+
+        (pkgs.cutter.withPlugins (ps: with ps; [rz-ghidra sigdb]))
+
+        (pkgs.discord.override {
+          withOpenASAR = true;
+          withVencord = true;
         })
+      ];
+      programs.foot.settings.main.font = "APL385 Unicode:size=20";
+      # programs.qutebrowser = {
+      #   enable = true;
+      #   settings.colors.webpage.darkmode.enabled = true;
+      # };
+
+      xdg.configFile."keepassxc/keepassxc.ini".text = lib.generators.toINI {} {
+        General = {ConfigVersion = 2;};
+        Browser = {
+          AlwaysAllowAccess = true;
+          Enabled = true;
+        };
+        GUI = {ApplicationTheme = "dark";};
+      };
+      home.file.".cache/keepassxc/keepassxc.ini".text = lib.generators.toINI {} {
+        General = {LastActiveDatabase = "${config.services.syncthing.dataDir}/passwords/passwords.kdbx";};
+      };
+      home.file.".mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json".text = builtins.toJSON {
+        allowed_extensions = ["keepassxc-browser@keepassxc.org"];
+        description = "KeePassXC integration with native messaging support";
+        name = "org.keepassxc.keepassxc_browser";
+        path = "${pkgs.keepassxc}/bin/keepassxc-proxy";
+        type = "stdio";
+      };
+    };
+
+    fonts = {
+      packages = [
         (pkgs.stdenv.mkDerivation rec {
           name = "APL";
           version = "1.0";
@@ -157,21 +239,13 @@
 
           '';
         })
-        pkgs.apl386
-
-        (pkgs.cutter.withPlugins (ps: with ps; [rz-ghidra sigdb]))
-
-        (pkgs.discord.override {
-          withOpenASAR = true;
-          withVencord = true;
-        })
       ];
 
-      programs.foot.settings.main.font = "APL385 Unicode:size=20";
-      # programs.qutebrowser = {
-      #   enable = true;
-      #   settings.colors.webpage.darkmode.enabled = true;
-      # };
+      fontconfig.defaultFonts = {
+        serif = ["APL385 Unicode"];
+        sansSerif = ["APL385 Unicode"];
+        monospace = ["APL385 Unicode"];
+      };
     };
 
     programs.steam.enable = true;
@@ -196,7 +270,7 @@
       driSupport32Bit = true;
     };
 
-    networking.firewall.allowedTCPPorts = [25565];
+    networking.firewall.allowedTCPPorts = [25565 22753];
 
     services = {
       power-profiles-daemon.enable = true;
diff --git a/hosts/navi/hardware-configuration.nix b/hosts/navi/hardware-configuration.nix
index aa88984..28094f1 100644
--- a/hosts/navi/hardware-configuration.nix
+++ b/hosts/navi/hardware-configuration.nix
@@ -70,7 +70,7 @@ in {
     nodev."/" = {
       fsType = "tmpfs";
       mountOptions = [
-        "size=2G"
+        "size=4G"
         "defaults"
         "mode=755"
       ];
diff --git a/hosts/vps/services/website.nix b/hosts/vps/services/website.nix
index f3ef7b8..95dea73 100644
--- a/hosts/vps/services/website.nix
+++ b/hosts/vps/services/website.nix
@@ -50,8 +50,30 @@
              }
              </style>
              <pre>
+            ~?~+=I?~~IIIII++,:   .?= .,I=O8OZ.DNNO, ZD7:::=.? ,,:,,I,,:,~+?II?I?II?=+=~+7$ZO
+            ?==++??==+I???7..:.   :II$77?I+ID~NND8.ZMN7~=~I7:,., :?7,.,.~+?I???????,+~7+$ZOZ
+            7+===I+~===?I77:  ?   ,$7$.:.,I?=7NNNINMMMNOI=++ .~==I$7, ..++?I???I+=?.+:O+ZZOZ
+            ===++I+==?III??I,?,   ~I7NN,..  ??ONNNMMMD$777$7I$ZOO$7?....+=????I~=+,:+,O8DNMM
+            ~=~==7II=+I?II7I,I+,8Z.II8D+=~:.,7$NMMMMMN8$7~. ..  :88I. ..?=?++I:~+=.~~~NMMMNN
+            ~====II?I~+?I?$7I?~8D7+7$ZZNONDN8Z8NMMMMMMNNON:=. :,$.I7  .,+=??I:,=, .:,=DNNMMN
+            =+?==+==?~+=I?$$I+88D:I$8NMNDDNNNDNNNMMMMMMMMM8I$77=MMDO.  :~=+?,,,   .~,?8DDD8D
+            =~=+==I7I=IIIIO$=~OOD=I7ODNNNNMNNDNDNMMMMMMMMNO$O+OZ 78.,.I::++:..   .,::=888OOO
+            ===I=I?~=?I???$I$?OODZ=7Z8NDONNN7D88MMMMMMMMMMNNNN8DNN~..~:7,,+7?,:,:::+8=Z888OO
+            ~+===7?=??I????7Z7ZOD8I777$+NNN:OOZOMMMMMMMMMMMMMMNMM+..~=?=O:+?::=+~:~+IDD888OZ
+            I==II??=I???=::7OI?O88Z=I~,?ZDD,Z$IDMMMMMMMMMMMMMMMM:$$?.~?+=?:,~+?I??==+++I8OOO
+            ==+++??+=.,~,~:7Z$?7I77$=. $I$8I$7+~8NMMMMMMMMMMMMDDMN$ ,:+?=.~==?II+++=+=?II+OZ
+            ==+?+I?,=:+?=~~??I++~7$$$= 777Z,$Z$$ONNMMMMMMMMMMMMMM8? .~=?:.==+?I~+?=+=??II?I8
+            ?=+?I:=~??II=~~, II?+ 7$7?=?77$?$Z:8NMMMNMMMMMMMMMMMD7 ,,===::~=?II.??++?++III+~
+            ??+.I+I=+I+??=~=~ =I+:?7$77?$$$ZI7Z8DM7NMMNMMMMMMMMOI. .,=~~.~~+I?:???==~????II?
+            I??:==?I++I?~==+=~:.?I7I77$?IZ$ZODDOIDNNNNNMMMMNM8?.:. ,,+=,::~+==II=~,=?+?IIIII
+            ??I:?=,=+++?II+=:,:, +77777$$777ODDMMNO~DNNNDD8?..::: .,,+~.,::=??????=+?IIIII?I
+            ????++=~:=?IIIII=~:: ~~+II77$$7$ZO8NMMMND.+:   .=7+=~ ,,:?...~II??+??I?+??IIII?I
+            ??III7II+~:?II7+II?, ~,:,~7777$$$I$8DNMMNO   .~I  .Z:.,:~: ,+???+=,IIIIII??IIIII
+            ???I7I:,~=:,+II+=~I??:.,,,.:77777777$ODMM8 .:+ZI. ,~,..~~ :II?==~:?II??IIIIIIIII
+            No matter where you go, everyone's connected
+
             <a href="https://fm.tzlil.net">fm.tzlil.net</a> music
-            <a href="https://git.tzlil.net">git.tzlil.net</a> for everything im too embarrased to put on sourcehut
+            <a href="https://git.tzlil.net">git.tzlil.net</a> code
             <a href="/arXiv">arXiv randomizer</a>
             </pre>
           ''} /
diff --git a/mixins/cli.nix b/mixins/cli.nix
index ba48fd7..db81d4b 100644
--- a/mixins/cli.nix
+++ b/mixins/cli.nix
@@ -18,7 +18,7 @@
           ripgrep
           bat
           jq
-	  file
+          file
 
           # p2p file transfer
           croc
diff --git a/mixins/firefox/absolute-minimum.nix b/mixins/firefox/absolute-minimum.nix
deleted file mode 100644
index d3ebe98..0000000
--- a/mixins/firefox/absolute-minimum.nix
+++ /dev/null
@@ -1,228 +0,0 @@
-let
-  profile = "default";
-  prf = ".mozilla/firefox/${profile}";
-  extstorage = "${prf}/browser-extension-data";
-in
-  {
-    config,
-    inputs,
-    pkgs,
-    lib,
-    ...
-  }: {
-    home-manager.users.tzlil = let
-      firefox-addons = pkgs.callPackage (pkgs.applyPatches {
-        src = inputs.firefox-addons;
-        patches = [./addons-passthru.patch];
-        name = "firefox-addons-patched";
-      }) {};
-      mozlz4 = n: x:
-        pkgs.runCommand "${n}.lz4" {buildInputs = [pkgs.mozlz4a];} ''
-          mozlz4a ${pkgs.writeTextFile {
-            name = n;
-            text = builtins.toJSON x;
-          }} $out
-        '';
-      cfg = config.home-manager.users.tzlil.programs;
-      addons = cfg.firefox.profiles.${profile}.extensions;
-      extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
-
-      firefoxData =
-        pkgs.runCommand "firefox-default-profile" {
-          buildInputs = [
-            pkgs.xvfb-run
-            (pkgs.firefox.override {
-              extraPolicies = {
-                Extensions.Install = map (x: x.src.outPath) addons;
-                ExtensionSettings = {
-                  "google@search.mozilla.org" = {installation_mode = "blocked";};
-                  "amazondotcom@search.mozilla.org" = {installation_mode = "blocked";};
-                  "wikipedia@search.mozilla.org" = {installation_mode = "blocked";};
-                  "bing@search.mozilla.org" = {installation_mode = "blocked";};
-                };
-              };
-            })
-          ];
-        } ''
-          HOME=$(mktemp -d)
-          export FONTCONFIG_FILE=${pkgs.makeFontsConf {fontDirectories = [pkgs.roboto];}}
-          mkdir -p $HOME/.mozilla/firefox/
-          mkdir $out
-          ln -s $out $HOME/.mozilla/firefox/default
-          cat >> $HOME/.mozilla/firefox/profiles.ini<< EOF
-          [Profile0]
-          Default=1
-          IsRelative=1
-          Name=default
-          Path=default
-          EOF
-
-          echo user_pref\(\"browser.region.network.url\", \"\"\)\; > $HOME/.mozilla/firefox/default/user.js
-
-          xvfb-run firefox --screenshot about:blank --headless
-
-          # cat $HOME/.mozilla/firefox/default/extensions.json > $out
-          #
-        '';
-      extensionsData = "${firefoxData}/extensions.json";
-
-      # addonStartup = builtins.fromJSON (builtins.unsafeDiscardStringContext (builtins.readFile (pkgs.runCommand "addonStartup.json" {
-      #   buildInputs = [
-      #     pkgs.mozlz4a
-      #     pkgs.jq
-      #   ];
-      # }
-      # ''
-      # mozlz4a -d ${firefoxData}/addonStartup.json.lz4 /dev/stdout | jq . > $out
-      # '')));
-
-      # decrappedAddonStartup = lib.attrsets.updateManyAttrsByPath [
-      #   {
-      #     path = ["app-builtin" "addons" "google@search.mozilla.org" "enable"];
-      #     update = old: false;
-      #   }
-      # ] addonStartup;
-
-      extensionManifest = e:
-        builtins.fromJSON (builtins.readFile (pkgs.runCommand "${e.addonId}-manifest.json" {buildInputs = [pkgs.p7zip];} ''
-          7z x -so ${e.src.outPath} manifest.json > $out
-        ''));
-    in {
-      # these come from the HM module
-      home.file."${prf}/extension-preferences.json".source = pkgs.emptyFile;
-      home.file."${prf}/extension-preferences.json.tmp".source = pkgs.emptyFile;
-
-      home.file."${prf}/extension-settings.json".source = pkgs.emptyFile;
-      home.file."${prf}/extension-settings.json.tmp".source = pkgs.emptyFile;
-
-      # home.file."${prf}/search.json.mozlz4".source = pkgs.emptyFile;
-      home.file."${prf}/search.json.mozlz4.tmp".source = pkgs.emptyFile;
-
-      home.file."${prf}/extensions".source = lib.mkForce "${pkgs.symlinkJoin {
-        name = "extensions";
-        paths = addons;
-      }}/share/mozilla/${extensionPath}";
-
-      home.file."${prf}/storage".source = pkgs.emptyDirectory;
-      home.file."${prf}/crashes".source = pkgs.emptyDirectory;
-      home.file."${prf}/datareporting".source = pkgs.emptyDirectory;
-      home.file."${prf}/saved-telemetry-pings".source = pkgs.emptyDirectory;
-
-      # home.file."${prf}/addonStartup.json.lz4".source = mozlz4 "addonStartup.json" (lib.attrsets.updateManyAttrsByPath [
-      #   {
-      #     path = ["app-builtin" "addons" "google@search.mozilla.org" "enable"];
-      #     update = old: false;
-      #   }
-      # ] addonStartup);
-      home.file."${prf}/addonStartup.json.lz4".source = pkgs.emptyFile;
-      home.file."${prf}/addonStartup.json.lz4.tmp".source = pkgs.emptyFile;
-
-      home.file."${prf}/addons.json".source = pkgs.emptyFile;
-      home.file."${prf}/addons.json.tmp".source = pkgs.emptyFile;
-
-      home.file."${prf}/extensions.json".source = extensionsData;
-      # home.file."${prf}/extensions.json".text = builtins.toJSON {
-      #   schemaVersion = 35;
-      #   addons =
-      #     map (x: {
-      #       active = true;
-      #       appDisabled = false;
-      #       defaultLocale = {};
-      #       embedderDisabled = false;
-      #       foreignInstall = true;
-      #       hidden = false;
-      #       id = x.addonId;
-      #       location = "app-profile";
-      #       manifestVersion = (extensionManifest x).manifest_version;
-      #       optionalPermissions = {
-      #         permissions = (extensionManifest x).optional_permissions or [];
-      #         origins = (extensionManifest x).optional_permissions or [];
-      #       };
-      #       path = x.src.outPath;
-      #       rootURI = "jar:file://${x.src.outPath}!/";
-      #       softDisabled = false;
-      #       type = "extension";
-      #       userDisabled = false;
-      #       userPermissions = {
-      #         permissions = (extensionManifest x).permissions or [];
-      #         origins = (extensionManifest x).permissions or [];
-      #       };
-      #       version = (extensionManifest x).version;
-      #     })
-      #     addons;
-      # };
-      home.file."${prf}/extensions.json.tmp".source = pkgs.emptyFile;
-
-      # tries to access W_OK it forever
-      # home.file."${prf}/prefs.js".source = pkgs.emptyFile;
-      # home.file."${prf}/prefs-1.js".source = pkgs.emptyFile;
-
-      programs.firefox = {
-        enable = true;
-        package = pkgs.firefox-wayland.override {
-          extraPolicies = {
-            CaptivePortal = false;
-            DisableFirefoxStudies = true;
-            DisablePocket = true;
-            DisableTelemetry = true;
-            DisableFirefoxAccounts = true;
-            FirefoxHome = {
-              Pocket = false;
-              Snippets = false;
-            };
-            UserMessaging = {
-              ExtensionRecommendations = false;
-              SkipOnboarding = true;
-            };
-            SearchEngines.Default = "DuckDuckGo";
-            ExtensionSettings = {
-              "google@search.mozilla.org" = {installation_mode = "blocked";};
-              "amazondotcom@search.mozilla.org" = {installation_mode = "blocked";};
-              "wikipedia@search.mozilla.org" = {installation_mode = "blocked";};
-              "bing@search.mozilla.org" = {installation_mode = "blocked";};
-            };
-          };
-        };
-        profiles.${profile} = {
-          userChrome = builtins.readFile ./userChrome.css;
-          search = {
-            default = "DuckDuckGo";
-            force = true;
-          };
-          extensions = with firefox-addons; [
-            kristofferhagen-nord-theme
-
-            ublock-origin
-            clearurls
-            privacy-possum
-            skip-redirect
-            canvasblocker
-
-            sidebery
-          ];
-          settings = {
-            "extensions.activeThemeID" = "{e410fec2-1cbd-4098-9944-e21e708418af}";
-
-            # (try to) hide crap
-            "browser.search.hiddenOneOffs" = "Google,Bing,Amazon.com,eBay,Twitter,Wikipedia (en)";
-            "browser.newtabpage.activity-stream.showSponsored" = false;
-            "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
-            "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored" = false;
-            "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
-            "browser.newtabpage.activity-stream.default.sites" = "";
-            "browser.urlbar.suggest.topsites" = false;
-            "browser.newtabpage.activity-stream.feeds.topsites" = false;
-
-            # disable welcome page
-            "browser.aboutwelcome.enabled" = false;
-            # disable privacy notice
-            "datareporting.policy.firstRunURL" = "";
-            # "browser.newtabpage.activity-stream.aboutHome.enabled" = false;
-          };
-          # extraConfig = {
-
-          # };
-        };
-      };
-    };
-  }
diff --git a/mixins/firefox/addons-passthru.patch b/mixins/firefox/minimum/addons-passthru.patch
index 6bd149d..6bd149d 100644
--- a/mixins/firefox/addons-passthru.patch
+++ b/mixins/firefox/minimum/addons-passthru.patch
diff --git a/mixins/firefox/minimum/default.nix b/mixins/firefox/minimum/default.nix
new file mode 100644
index 0000000..8ecf48a
--- /dev/null
+++ b/mixins/firefox/minimum/default.nix
@@ -0,0 +1,414 @@
+let
+  profile = "default";
+  prf = ".mozilla/firefox/${profile}";
+  extstorage = "${prf}/browser-extension-data";
+in
+  {
+    config,
+    inputs,
+    pkgs,
+    lib,
+    ...
+  }: {
+    home-manager.users.tzlil = let
+      firefox-addons = pkgs.callPackage (pkgs.applyPatches {
+        src = inputs.firefox-addons;
+        patches = [./addons-passthru.patch];
+        name = "firefox-addons-patched";
+      }) {};
+      mozlz4 = n: x:
+        pkgs.runCommand "${n}.lz4" {buildInputs = [pkgs.mozlz4a];} ''
+          mozlz4a ${pkgs.writeTextFile {
+            name = n;
+            text = builtins.toJSON x;
+          }} $out
+        '';
+      cfg = config.home-manager.users.tzlil.programs;
+      addons = cfg.firefox.profiles.${profile}.extensions;
+      extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
+
+      firefoxData =
+        pkgs.runCommand "firefox-default-profile" {
+          buildInputs = [
+            pkgs.xvfb-run
+            (pkgs.firefox.override {
+              extraPolicies = {
+                Extensions.Install = map (x: x.src.outPath) addons;
+                ExtensionSettings = {
+                  "google@search.mozilla.org" = {installation_mode = "blocked";};
+                  "amazondotcom@search.mozilla.org" = {installation_mode = "blocked";};
+                  "wikipedia@search.mozilla.org" = {installation_mode = "blocked";};
+                  "bing@search.mozilla.org" = {installation_mode = "blocked";};
+                };
+              };
+            })
+          ];
+        } ''
+          HOME=$(mktemp -d)
+          export FONTCONFIG_FILE=${pkgs.makeFontsConf {fontDirectories = [pkgs.roboto];}}
+          mkdir -p $HOME/.mozilla/firefox/
+          mkdir $out
+          ln -s $out $HOME/.mozilla/firefox/default
+          cat >> $HOME/.mozilla/firefox/profiles.ini<< EOF
+          [Profile0]
+          Default=1
+          IsRelative=1
+          Name=default
+          Path=default
+          EOF
+
+          echo user_pref\(\"browser.region.network.url\", \"\"\)\; > $HOME/.mozilla/firefox/default/user.js
+
+          xvfb-run firefox --screenshot about:blank --headless
+
+          # cat $HOME/.mozilla/firefox/default/extensions.json > $out
+          #
+        '';
+      # extensionsData = "${firefoxData}/extensions.json";
+
+      # addonStartup = pkgs.runCommand "addonStartup.json" {
+      #   buildInputs = [
+      #     pkgs.mozlz4a
+      #     pkgs.jq
+      #   ];
+      # }
+      # ''
+      # mozlz4a -d ${firefoxData}/addonStartup.json.lz4 /dev/stdout | jq . > $out
+      # '';
+
+      # decrappedAddonStartup = lib.attrsets.updateManyAttrsByPath [
+      #   {
+      #     path = ["app-builtin" "addons" "google@search.mozilla.org" "enable"];
+      #     update = old: false;
+      #   }
+      # ] addonStartup;
+
+      extensionManifest = e:
+        builtins.fromJSON (builtins.readFile (pkgs.runCommand "${e.addonId}-manifest.json" {buildInputs = [pkgs.p7zip];} ''
+          7z x -so ${e.src.outPath} manifest.json > $out
+        ''));
+    in {
+      # these come from the HM module
+      home.file."${prf}/extension-preferences.json".source = pkgs.emptyFile;
+      home.file."${prf}/extension-preferences.json.tmp".source = pkgs.emptyFile;
+
+      home.file."${prf}/extension-settings.json".source = pkgs.emptyFile;
+      home.file."${prf}/extension-settings.json.tmp".source = pkgs.emptyFile;
+
+      home.file."${prf}/search.json.mozlz4".source = mozlz4 "search.json.mozlz4" {
+        engines = [
+          {
+            _isAppProvided = true;
+            _metaData = {hidden = true;};
+            _name = "Google";
+            id = "google@search.mozilla.orgdefault";
+          }
+          {
+            _isAppProvided = true;
+            _metaData = {hidden = true;};
+            _name = "Amazon.com";
+            id = "amazondotcom@search.mozilla.orgdefault";
+          }
+          {
+            _isAppProvided = true;
+            _metaData = {hidden = true;};
+            _name = "Wikipedia (en)";
+            id = "wikipedia@search.mozilla.orgdefault";
+          }
+          {
+            _isAppProvided = true;
+            _metaData = {hidden = true;};
+            _name = "Bing";
+            id = "bing@search.mozilla.orgdefault";
+          }
+          {
+            _isAppProvided = true;
+            _metaData = {hidden = true;};
+            _name = "DuckDuckGo";
+            id = "ddg@search.mozilla.orgdefault";
+          }
+          {
+            __searchForm = "https://kagi.com/";
+            _definedAliases = [];
+            _iconMapObj = {"{\"width\":48,\"height\":48}" = "data:image/vnd.microsoft.icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAAAAAAAAAAGbL/ABiy/w8Zsv9fGbP/vhmz//AZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//EZs//BGbP/ZRiz/w0Ys/8AAAAAABmy/wAZsv8YGbP/nRmz//QZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbX//xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs//0GbP/mxiy/xgZsv8AGbL/DBmz/5sZs//+GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz/v8ZldH/GZTR/xmt9f8Ztf//GbT//xmz//8Zs///GbP//xmz//8Zs//+GbP/nRmz/w8Zs/9kGbP/8xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xm2//8Ztv//GbX//xm1//8Ztf//GbX//xm1//8Ztf//GaLl/xk6S/8ZJSz/GUVc/xlxnP8Zpuz/GbT//xmz//8Zs///GbP//xmz//8Zs//zGbP/Xxmz/8AZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmz/f8ZoOL/GYe9/xmDt/8Zh73/GYvD/xmQyv8ZlNH/GZjX/xmU0f8ZUm7/GRkZ/xkYGP8ZFRT/GSs1/xmZ2P8ZtP//GbP//xmz//8Zs///GbP//xmz//8Zs/++GbP/8Bmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zrvf/GXKe/xkyP/8ZHyL/GR0f/xkgIv8ZIiX/GSQp/xkmLf8ZKC//GSYs/xkaGv8ZGRn/GRkZ/xkYGP8ZYIL/GbL8/xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//AZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbL9/xlumP8ZHiD/GRcW/xkZGP8ZGRj/GRgY/xkYGP8ZGBj/GRgY/xkYF/8ZGBj/GRkZ/xkYGP8ZFxb/GT5Q/xmg4v8ZtP//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm0//8Zmdj/GSw2/xkXF/8ZGRn/GRkZ/xkXF/8ZFxb/GRcW/xkXFv8ZFxb/GRcW/xkXFv8ZGBf/GSMn/xlRbP8Zm9v/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///Gbb//xl7rP8ZGxz/GRkZ/xkZGf8ZHR//GUtk/xljiP8ZY4j/GWOI/xljiP8ZY4j/GWOI/xlvmf8ZjMX/Ga31/xm0//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztv//GXSg/xkYGP8ZGRn/GRcW/xk+UP8ZqO//GbT//xm1//8Ztf//GbX//xm1//8ZtP//GbX//xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm1//8ZhLn/GR4h/xkZGP8ZFxb/GUZb/xmw+P8Zsvz/Gabs/xme4P8ZnuD/Gabs/xmy/f8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmk6f8ZOEf/GRcW/xkYGP8ZJCr/GWyV/xlaev8ZOEb/GSkw/xkoMP8ZN0b/GVp6/xmPyv8Zsfz/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xl9rv8ZICT/GRgY/xkZGf8ZGhr/GRcX/xkXF/8ZGBf/GRgX/xkXFv8ZFxb/GSYs/xlpkf8ZrfT/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbD5/xltlv8ZHyP/GRkY/xkZGf8ZGRn/GRgY/xkXFv8ZFxb/GRgY/xkZGf8ZGBf/GRwf/xlli/8ZsPn/GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GYK1/xkgJP8ZGBj/GRkZ/xkYF/8ZJy7/GT9S/xk/Uv8ZKC//GRgY/xkZGf8ZGBj/GSEm/xmGu/8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xms9f8ZRlz/GRcW/xkZGf8ZGRn/GUZc/xmSzf8Zrfb/Gaz1/xmRzP8ZQ1j/GRkY/xkZGf8ZFxb/GUlh/xmt9v8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GZjW/xknLv8ZGBj/GRgX/xkxPP8Zm9r/Gbb//xmz//8Zs///Gbb//xmY1v8ZMDv/GRgX/xkYGP8ZKC//GZnY/xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm1//8ZhLn/GR0f/xkZGf8ZFxb/GVZ0/xmz/v8Zs///GbP//xmz//8Zs///GbP+/xlXdf8ZFxb/GRkZ/xkdH/8Zh73/GbX//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbX//xmBtP8ZHB7/GRkZ/xkXF/8ZYYP/GbX//xmz//8Zs///GbP//xmz//8ZtP//GV+B/xkXFv8ZGRn/GRwe/xmCtv8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GY3H/xkgI/8ZGRj/GRcW/xlEWv8ZrfT/GbT//xmz//8Zs///GbT//xmr8v8ZQlf/GRcW/xkZGP8ZICT/GY7I/xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm0//8Zo+f/GTRB/xkXF/8ZGRj/GR8i/xlzn/8ZsPn/GbX//xm1//8Zsfr/GXGd/xkfIv8ZGRj/GRcX/xk1Qv8Zo+f/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8ZY4f/GRkZ/xkZGf8ZGBj/GSIm/xlTcP8ZfK3/GXys/xlWdP8ZIib/GRgY/xkZGf8ZGBj/GWSJ/xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmh5P8ZPU7/GRcV/xkZGf8ZGBj/GRcX/xkcHf8ZHB3/GRcX/xkYGP8ZGRn/GRgX/xk8Tv8ZoOL/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmRzP8ZN0b/GRgX/xkYF/8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkYGP8ZICT/GYG0/xmz//8Zsv3/GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmc3f8ZVnT/GScu/xkZGv8ZGBf/GRgY/xkZGf8ZGRn/GRkZ/xkbHP8ZO0z/GVNv/xmHvf8ZtP//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmv+P8ZldP/GXem/xlli/8ZZoz/GXWj/xk7TP8ZFxb/GRkZ/xkXFv8ZFxb/GW+Z/xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/8Bmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm0//8Ztf//GbT//xm0//8Ztf//GY3G/xkxPf8ZFxb/GRcW/xkXF/8Zb5n/GbX//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//AZs/++GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8ZtP7/GZbT/xlbe/8ZPU//GTtM/xl/sf8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/wBmz/18Zs//zGbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GbL9/xms9f8Zq/P/GbD6/xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//MZs/9kGLL/Dxmz/54Zs//+GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs//+GbP/mxmz/wwZtP8AGrT/GBmz/5sZs//0GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/9Bmz/50atP8YGbT/AAAAAAAYsv8AGLH/DRmz/2QZs//BGbP/8Rmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/8Bmz/74Zs/9fGLT/Dxmz/wAAAAAAwAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAM=";};
+            _iconURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAURJREFUOE+dk79LAzEcxT+B0goKIih64k9wcxHBzVE66aarY4uHoIMUl8NBK4iLxSq0CP4HRdqlUGdxEx2KIFRBa9VBRBDUFk/Cedgjd95hliTkvZf3fclXAJgFbQdYkuvAQ5AV07W4MPNaBkEsMNEJTAmzoJl+5MojTBrQGoGrXSfaU+D4AubTTnBggWEdPhpOciQE1/uqV8XBwwuMJyzgfdaae38SOknCUJdPCWMr8PT6S5bwegMGdehuh7NtH4GJVag+Q8mA0X4LXL6FqXUY6ITTTR+BLxP64hboUIe3T1g8cJbULKFksFeEZE4NayEKxmyAEO3AZIBbR/Beh7U575+iOLAFKmkQwiLKORxyF/EUcIPbz/pnBvIwloHLKoz0QEcbnN9A+c49SOkgUCdGNyCfgJZw0/2yI+X2nx2ZEjO15W8/wHRJmDJVowAAAABJRU5ErkJggg==";
+            _iconUpdateURL = null;
+            _loadPath = "[https]kagi.com/kagi.xml";
+            _metaData = {
+              loadPathHash = "UtVcODv+iDIE7YbKsRgmcuEtoupCFvV7xIfe+lM7oDs=";
+              order = 6;
+            };
+            _name = "Kagi";
+            _orderHint = null;
+            _telemetryId = null;
+            _updateInterval = null;
+            _updateURL = null;
+            _urls = [
+              {
+                params = [];
+                rels = ["results"];
+                template = "https://kagi.com/search?q={searchTerms}";
+              }
+              {
+                params = [];
+                rels = ["suggestions"];
+                template = "https://kagi.com/api/autosuggest?q={searchTerms}";
+                type = "application/x-suggestions+json";
+              }
+            ];
+            description = "A privacy-focused, user-centric search engine.";
+            id = "de6311b3-e1df-456e-bc42-73f88ffcd9eb";
+          }
+          {
+            __searchForm = "https://search.nixos.org/";
+            _definedAliases = ["!np"];
+            # _iconMapObj = {"{\"width\":48,\"height\":48}" = "data:image/vnd.microsoft.icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAAAAAAAAAAGbL/ABiy/w8Zsv9fGbP/vhmz//AZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//EZs//BGbP/ZRiz/w0Ys/8AAAAAABmy/wAZsv8YGbP/nRmz//QZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbX//xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs//0GbP/mxiy/xgZsv8AGbL/DBmz/5sZs//+GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz/v8ZldH/GZTR/xmt9f8Ztf//GbT//xmz//8Zs///GbP//xmz//8Zs//+GbP/nRmz/w8Zs/9kGbP/8xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xm2//8Ztv//GbX//xm1//8Ztf//GbX//xm1//8Ztf//GaLl/xk6S/8ZJSz/GUVc/xlxnP8Zpuz/GbT//xmz//8Zs///GbP//xmz//8Zs//zGbP/Xxmz/8AZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmz/f8ZoOL/GYe9/xmDt/8Zh73/GYvD/xmQyv8ZlNH/GZjX/xmU0f8ZUm7/GRkZ/xkYGP8ZFRT/GSs1/xmZ2P8ZtP//GbP//xmz//8Zs///GbP//xmz//8Zs/++GbP/8Bmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zrvf/GXKe/xkyP/8ZHyL/GR0f/xkgIv8ZIiX/GSQp/xkmLf8ZKC//GSYs/xkaGv8ZGRn/GRkZ/xkYGP8ZYIL/GbL8/xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//AZs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbL9/xlumP8ZHiD/GRcW/xkZGP8ZGRj/GRgY/xkYGP8ZGBj/GRgY/xkYF/8ZGBj/GRkZ/xkYGP8ZFxb/GT5Q/xmg4v8ZtP//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm0//8Zmdj/GSw2/xkXF/8ZGRn/GRkZ/xkXF/8ZFxb/GRcW/xkXFv8ZFxb/GRcW/xkXFv8ZGBf/GSMn/xlRbP8Zm9v/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///Gbb//xl7rP8ZGxz/GRkZ/xkZGf8ZHR//GUtk/xljiP8ZY4j/GWOI/xljiP8ZY4j/GWOI/xlvmf8ZjMX/Ga31/xm0//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztv//GXSg/xkYGP8ZGRn/GRcW/xk+UP8ZqO//GbT//xm1//8Ztf//GbX//xm1//8ZtP//GbX//xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm1//8ZhLn/GR4h/xkZGP8ZFxb/GUZb/xmw+P8Zsvz/Gabs/xme4P8ZnuD/Gabs/xmy/f8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmk6f8ZOEf/GRcW/xkYGP8ZJCr/GWyV/xlaev8ZOEb/GSkw/xkoMP8ZN0b/GVp6/xmPyv8Zsfz/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xl9rv8ZICT/GRgY/xkZGf8ZGhr/GRcX/xkXF/8ZGBf/GRgX/xkXFv8ZFxb/GSYs/xlpkf8ZrfT/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbD5/xltlv8ZHyP/GRkY/xkZGf8ZGRn/GRgY/xkXFv8ZFxb/GRgY/xkZGf8ZGBf/GRwf/xlli/8ZsPn/GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GYK1/xkgJP8ZGBj/GRkZ/xkYF/8ZJy7/GT9S/xk/Uv8ZKC//GRgY/xkZGf8ZGBj/GSEm/xmGu/8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xms9f8ZRlz/GRcW/xkZGf8ZGRn/GUZc/xmSzf8Zrfb/Gaz1/xmRzP8ZQ1j/GRkY/xkZGf8ZFxb/GUlh/xmt9v8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GZjW/xknLv8ZGBj/GRgX/xkxPP8Zm9r/Gbb//xmz//8Zs///Gbb//xmY1v8ZMDv/GRgX/xkYGP8ZKC//GZnY/xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm1//8ZhLn/GR0f/xkZGf8ZFxb/GVZ0/xmz/v8Zs///GbP//xmz//8Zs///GbP+/xlXdf8ZFxb/GRkZ/xkdH/8Zh73/GbX//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbX//xmBtP8ZHB7/GRkZ/xkXF/8ZYYP/GbX//xmz//8Zs///GbP//xmz//8ZtP//GV+B/xkXFv8ZGRn/GRwe/xmCtv8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GY3H/xkgI/8ZGRj/GRcW/xlEWv8ZrfT/GbT//xmz//8Zs///GbT//xmr8v8ZQlf/GRcW/xkZGP8ZICT/GY7I/xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm0//8Zo+f/GTRB/xkXF/8ZGRj/GR8i/xlzn/8ZsPn/GbX//xm1//8Zsfr/GXGd/xkfIv8ZGRj/GRcX/xk1Qv8Zo+f/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8ZY4f/GRkZ/xkZGf8ZGBj/GSIm/xlTcP8ZfK3/GXys/xlWdP8ZIib/GRgY/xkZGf8ZGBj/GWSJ/xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmh5P8ZPU7/GRcV/xkZGf8ZGBj/GRcX/xkcHf8ZHB3/GRcX/xkYGP8ZGRn/GRgX/xk8Tv8ZoOL/GbT//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmRzP8ZN0b/GRgX/xkYF/8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkYGP8ZICT/GYG0/xmz//8Zsv3/GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmc3f8ZVnT/GScu/xkZGv8ZGBf/GRgY/xkZGf8ZGRn/GRkZ/xkbHP8ZO0z/GVNv/xmHvf8ZtP//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbT//xmv+P8ZldP/GXem/xlli/8ZZoz/GXWj/xk7TP8ZFxb/GRkZ/xkXFv8ZFxb/GW+Z/xm1//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/8Bmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xm0//8Ztf//GbT//xm0//8Ztf//GY3G/xkxPf8ZFxb/GRcW/xkXF/8Zb5n/GbX//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//AZs/++GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8ZtP7/GZbT/xlbe/8ZPU//GTtM/xl/sf8Ztf//GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/wBmz/18Zs//zGbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Ztf//GbL9/xms9f8Zq/P/GbD6/xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//MZs/9kGLL/Dxmz/54Zs//+GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs//+GbP/mxmz/wwZtP8AGrT/GBmz/5sZs//0GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/9Bmz/50atP8YGbT/AAAAAAAYsv8AGLH/DRmz/2QZs//BGbP/8Rmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP//xmz//8Zs///GbP/8Bmz/74Zs/9fGLT/Dxmz/wAAAAAAwAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAM=";};
+            # _iconURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAURJREFUOE+dk79LAzEcxT+B0goKIih64k9wcxHBzVE66aarY4uHoIMUl8NBK4iLxSq0CP4HRdqlUGdxEx2KIFRBa9VBRBDUFk/Cedgjd95hliTkvZf3fclXAJgFbQdYkuvAQ5AV07W4MPNaBkEsMNEJTAmzoJl+5MojTBrQGoGrXSfaU+D4AubTTnBggWEdPhpOciQE1/uqV8XBwwuMJyzgfdaae38SOknCUJdPCWMr8PT6S5bwegMGdehuh7NtH4GJVag+Q8mA0X4LXL6FqXUY6ITTTR+BLxP64hboUIe3T1g8cJbULKFksFeEZE4NayEKxmyAEO3AZIBbR/Beh7U575+iOLAFKmkQwiLKORxyF/EUcIPbz/pnBvIwloHLKoz0QEcbnN9A+c49SOkgUCdGNyCfgJZw0/2yI+X2nx2ZEjO15W8/wHRJmDJVowAAAABJRU5ErkJggg==";
+            _iconURL = "file://${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+            _iconUpdateURL = null;
+            # _loadPath = "[https]kagi.com/kagi.xml";
+            _metaData = {
+              # loadPathHash = "UtVcODv+iDIE7YbKsRgmcuEtoupCFvV7xIfe+lM7oDs=";
+              order = 7;
+            };
+            _name = "nixpkgs";
+            _orderHint = null;
+            _telemetryId = null;
+            _updateInterval = null;
+            _updateURL = null;
+            _urls = [
+              {
+                params = [];
+                rels = ["results"];
+                template = "https://search.nixos.org/packages?query={searchTerms}";
+              }
+            ];
+            description = "nixpkgs";
+            id = "229feefe-acd1-47ac-87e1-11373a6608b5";
+          }
+        ];
+        metaData = {
+          appDefaultEngineId = "google@search.mozilla.orgdefault";
+          channel = "default";
+          defaultEngineId = "de6311b3-e1df-456e-bc42-73f88ffcd9eb";
+          defaultEngineIdHash = "G2Ce4is1f2X6BdVBEv3KgHQDQPdU4JHhPKU9dJz7uPU=";
+          distroID = "nixos";
+          experiment = "";
+          locale = "en-US";
+          region = "IL";
+          useSavedOrder = true;
+        };
+        version = 9;
+      };
+      home.file."${prf}/search.json.mozlz4.tmp".source = pkgs.emptyFile;
+
+      home.file."${prf}/extensions".source = lib.mkForce "${pkgs.symlinkJoin {
+        name = "extensions";
+        paths = addons;
+      }}/share/mozilla/${extensionPath}";
+
+      home.file."${extstorage}/redirector@einaregilsson.com/storage.js".text = builtins.toJSON {
+        redirects =
+          map ({
+            includePattern,
+            redirectUrl,
+            description,
+          }: {
+            appliesTo = ["main_frame"];
+            inherit description;
+            disabled = false;
+            error = null;
+            exampleResult = "";
+            exampleUrl = "";
+            excludePattern = "";
+            grouped = false;
+            inherit includePattern;
+            patternDesc = "";
+            patternType = "W";
+            processMatches = "noProcessing";
+            inherit redirectUrl;
+          }) [
+            {
+              includePattern = "https://*youtube.com/watch?*v=*";
+              redirectUrl = "https://yewtu.be/watch?$2v=$3";
+              description = "invidious";
+            }
+            {
+              includePattern = "https://*youtube.com/results?*search_query=*";
+              redirectUrl = "https://yewtu.be/search?$2q=$3";
+              description = "invidious search";
+            }
+          ];
+        enableNotifications = false;
+      };
+
+      home.file."${prf}/crashes".source = pkgs.emptyDirectory;
+      home.file."${prf}/datareporting".source = pkgs.emptyDirectory;
+      home.file."${prf}/saved-telemetry-pings".source = pkgs.emptyDirectory;
+
+      # home.file."${prf}/addonStartup.json.lz4".source = "${firefoxData}/addonStartup.json.lz4";
+      # home.file."${prf}/addonStartup.json.lz4.tmp".source = pkgs.emptyFile;
+
+      home.file."${prf}/addons.json".source = pkgs.emptyFile;
+      home.file."${prf}/addons.json.tmp".source = pkgs.emptyFile;
+
+      # home.file."${prf}/extensions.json".source = extensionsData;
+      # home.file."${prf}/extensions.json".text = builtins.toJSON {
+      #   schemaVersion = 35;
+      #   addons =
+      #     map (x: {
+      #       active = true;
+      #       appDisabled = false;
+      #       defaultLocale = {};
+      #       embedderDisabled = false;
+      #       foreignInstall = true;
+      #       hidden = false;
+      #       id = x.addonId;
+      #       location = "app-profile";
+      #       manifestVersion = (extensionManifest x).manifest_version;
+      #       optionalPermissions = {
+      #         permissions = (extensionManifest x).optional_permissions or [];
+      #         origins = (extensionManifest x).optional_permissions or [];
+      #       };
+      #       path = x.src.outPath;
+      #       rootURI = "jar:file://${x.src.outPath}!/";
+      #       softDisabled = false;
+      #       type = "extension";
+      #       userDisabled = false;
+      #       userPermissions = {
+      #         permissions = (extensionManifest x).permissions or [];
+      #         origins = (extensionManifest x).permissions or [];
+      #       };
+      #       version = (extensionManifest x).version;
+      #     })
+      #     addons;
+      # };
+      # home.file."${prf}/extensions.json.tmp".source = pkgs.emptyFile;
+
+      # tries to access W_OK it forever
+      # home.file."${prf}/prefs.js".source = pkgs.emptyFile;
+
+      # home.file."${prf}/prefs-1.js".source = pkgs.emptyFile;
+
+      programs.firefox = {
+        enable = true;
+        package = pkgs.firefox-wayland.override {
+          extraPolicies = {
+            CaptivePortal = false;
+            DisableFirefoxStudies = true;
+            DisablePocket = true;
+            DisableTelemetry = true;
+            DisableFirefoxAccounts = true;
+            FirefoxHome = {
+              Pocket = false;
+              Snippets = false;
+            };
+            UserMessaging = {
+              ExtensionRecommendations = false;
+              SkipOnboarding = true;
+            };
+            SearchEngines.Default = "Kagi";
+            Extensions.Install = map (x: x.src.outPath) addons;
+            ExtensionSettings = {
+              #   "google@search.mozilla.org" = {installation_mode = "blocked";};
+              #   "amazondotcom@search.mozilla.org" = {installation_mode = "blocked";};
+              #   "wikipedia@search.mozilla.org" = {installation_mode = "blocked";};
+              #   "bing@search.mozilla.org" = {installation_mode = "blocked";};
+              "{3c078156-979c-498b-8990-85f7987dd929}" = {installation_mode = "force_installed";};
+            };
+          };
+        };
+        profiles.${profile} = {
+          userChrome =
+            builtins.readFile ./simplefox.css
+            + ''
+                        /* hide top tabs */
+              #TabsToolbar {
+                visibility: collapse !important;
+                margin-bottom: 21px !important;
+              }
+              #sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
+                visibility: collapse !important;
+              }
+
+              /*
+               * Bookmarks toolbar is visible only on new tab page, just like Chrome.
+               */
+
+              #main-window #PersonalToolbar {
+                visibility: collapse !important;
+              }
+
+              #main-window[title^="about:newtab"] #PersonalToolbar,
+              #main-window[title^="New Tab"] #PersonalToolbar,
+              #main-window[title^="Nightly"] #PersonalToolbar,
+              #main-window[title^="Mozilla Firefox"] #PersonalToolbar,
+              #main-window[title^="Firefox"] #PersonalToolbar,
+              #main-window[title^="新标签页"] #PersonalToolbar,
+              #main-window[title^="Customize Firefox"] #PersonalToolbar {
+                visibility: visible !important;
+              }
+            '';
+          extensions = with firefox-addons; [
+            # ublock-origin
+            # clearurls
+            # privacy-possum
+            # skip-redirect
+            # canvasblocker
+            i-dont-care-about-cookies
+            darkreader
+            (firefox-addons.buildFirefoxXpiAddon {
+              pname = "sidebery";
+              version = "v5.0.0rc4";
+              addonId = "{3c078156-979c-498b-8990-85f7987dd929}";
+              url = "https://github.com/mbnuqw/sidebery/releases/download/v5.0.0rc4/sidebery-5.0.0rc4.xpi";
+              sha256 = "sha256-YsH9yYfGefClRS93dMV/eLMFuoPFKPrx0NL2hIv4dEk=";
+              meta = with lib; {
+                homepage = "https://github.com/mbnuqw/sidebery";
+                description = "Tabs tree and bookmarks in sidebar with advanced containers configuration.";
+                license = licenses.mit;
+                platforms = platforms.all;
+              };
+            })
+            sidebery
+            redirector
+            ublock-origin
+            keepassxc-browser
+          ];
+          settings = {
+            "extensions.activeThemeID" = "{e410fec2-1cbd-4098-9944-e21e708418af}";
+
+            # (try to) hide crap
+            "browser.search.hiddenOneOffs" = "Google,Bing,Amazon.com,eBay,Twitter,Wikipedia (en)";
+            "browser.newtabpage.activity-stream.showSponsored" = false;
+            "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
+            "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored" = false;
+            "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
+            "browser.newtabpage.activity-stream.default.sites" = "";
+            "browser.urlbar.suggest.topsites" = false;
+            "browser.newtabpage.activity-stream.feeds.topsites" = false;
+
+            # disable welcome page
+            "browser.aboutwelcome.enabled" = false;
+            # disable privacy notice
+            "datareporting.policy.firstRunURL" = "";
+            # "browser.newtabpage.activity-stream.aboutHome.enabled" = false;
+
+            #simplefox
+            "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
+            "layers.acceleration.force-enabled" = true;
+            "gfx.webrender.all" = true;
+            "svg.context-properties.content.enabled" = true;
+
+            "signon.rememberSignons" = false;
+          };
+          # extraConfig = {
+
+          # };
+        };
+      };
+    };
+    environment.persistence."/nix/persist".users.tzlil.directories = [
+      "${extstorage}/keepassxc-browser@keepassxc.org"
+    ];
+  }
diff --git a/mixins/firefox/minimum/simplefox.css b/mixins/firefox/minimum/simplefox.css
new file mode 100644
index 0000000..08a8f93
--- /dev/null
+++ b/mixins/firefox/minimum/simplefox.css
@@ -0,0 +1,205 @@
+/* 
+┌─┐┬┌┬┐┌─┐┬  ┌─┐
+└─┐││││├─┘│  ├┤ 
+└─┘┴┴ ┴┴  ┴─┘└─┘
+┌─┐┌─┐─┐ ┬      
+├┤ │ │┌┴┬┘      
+└  └─┘┴ └─
+
+by Miguel Avila
+
+*/
+
+/*
+ 
+┌─┐┌─┐┌┐┌┌─┐┬┌─┐┬ ┬┬─┐┌─┐┌┬┐┬┌─┐┌┐┌
+│  │ ││││├┤ ││ ┬│ │├┬┘├─┤ │ ││ ││││
+└─┘└─┘┘└┘└  ┴└─┘└─┘┴└─┴ ┴ ┴ ┴└─┘┘└┘
+
+*/
+
+:root {
+    --sfwindow: #19171a;
+    --sfsecondary: #201e21;
+  }
+  
+  /* Urlbar View */
+  
+  /*─────────────────────────────*/
+  /* Comment this section if you */
+  /* want to show the URL Bar    */
+  /*─────────────────────────────*/
+  
+  .urlbarView {
+    display: none !important;
+  }
+  
+  /*─────────────────────────────*/
+  
+  /* 
+  ┌─┐┌─┐┬  ┌─┐┬─┐┌─┐
+  │  │ ││  │ │├┬┘└─┐
+  └─┘└─┘┴─┘└─┘┴└─└─┘ 
+  */
+  
+  /* Tabs colors  */
+  #tabbrowser-tabs:not([movingtab])
+    > #tabbrowser-arrowscrollbox
+    > .tabbrowser-tab
+    > .tab-stack
+    > .tab-background[multiselected='true'],
+  #tabbrowser-tabs:not([movingtab])
+    > #tabbrowser-arrowscrollbox
+    > .tabbrowser-tab
+    > .tab-stack
+    > .tab-background[selected='true'] {
+    background-image: none !important;
+    background-color: var(--toolbar-bgcolor) !important;
+  }
+  
+  /* Inactive tabs color */
+  #navigator-toolbox {
+    background-color: var(--sfwindow) !important;
+  }
+  
+  /* Window colors  */
+  :root {
+    --toolbar-bgcolor: var(--sfsecondary) !important;
+    --tabs-border-color: var(--sfsecondary) !important;
+    --lwt-sidebar-background-color: var(--sfwindow) !important;
+    --lwt-toolbar-field-focus: var(--sfsecondary) !important;
+  }
+  
+  /* Sidebar color  */
+  #sidebar-box,
+  .sidebar-placesTree {
+    background-color: var(--sfwindow) !important;
+  }
+  
+  /* 
+  
+  ┌┬┐┌─┐┬  ┌─┐┌┬┐┌─┐            
+   ││├┤ │  ├┤  │ ├┤             
+  ─┴┘└─┘┴─┘└─┘ ┴ └─┘            
+  ┌─┐┌─┐┌┬┐┌─┐┌─┐┌┐┌┌─┐┌┐┌┌┬┐┌─┐
+  │  │ ││││├─┘│ ││││├┤ │││ │ └─┐
+  └─┘└─┘┴ ┴┴  └─┘┘└┘└─┘┘└┘ ┴ └─┘
+  
+  */
+  
+  /* Tabs elements  */
+  .tab-close-button {
+    display: none;
+  }
+  
+  .tabbrowser-tab:not([pinned]) .tab-icon-image {
+    display: none !important;
+  }
+  
+  #nav-bar:not([tabs-hidden='true']) {
+    box-shadow: none;
+  }
+  
+  #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs])
+    > #tabbrowser-arrowscrollbox
+    > .tabbrowser-tab[first-visible-unpinned-tab] {
+    margin-inline-start: 0 !important;
+  }
+  
+  :root {
+    --toolbarbutton-border-radius: 0 !important;
+    --tab-border-radius: 0 !important;
+    --tab-block-margin: 0 !important;
+  }
+  
+  .tab-background {
+    border-right: 0px solid rgba(0, 0, 0, 0) !important;
+    margin-left: -4px !important;
+  }
+  
+  .tabbrowser-tab:is([visuallyselected='true'], [multiselected])
+    > .tab-stack
+    > .tab-background {
+    box-shadow: none !important;
+  }
+  
+  .tabbrowser-tab[last-visible-tab='true'] {
+    padding-inline-end: 0 !important;
+  }
+  
+  #tabs-newtab-button {
+    padding-left: 0 !important;
+  }
+  
+  /* Url Bar  */
+  #urlbar-input-container {
+    background-color: var(--sfsecondary) !important;
+    border: 1px solid rgba(0, 0, 0, 0) !important;
+  }
+  
+  #urlbar-container {
+    margin-left: 0 !important;
+  }
+  
+  #urlbar[focused='true'] > #urlbar-background {
+    box-shadow: none !important;
+  }
+  
+  #navigator-toolbox {
+    border: none !important;
+  }
+  
+  /* Bookmarks bar  */
+  .bookmark-item .toolbarbutton-icon {
+    display: none;
+  }
+  toolbarbutton.bookmark-item:not(.subviewbutton) {
+    min-width: 1.6em;
+  }
+  
+  /* Toolbar  */
+  #tracking-protection-icon-container,
+  #urlbar-zoom-button,
+  #star-button-box,
+  #pageActionButton,
+  #pageActionSeparator,
+  #tabs-newtab-button,
+  #back-button,
+  #PanelUI-button,
+  #forward-button,
+  .tab-secondary-label {
+    display: none !important;
+  }
+  
+  .urlbarView-url {
+    color: #dedede !important;
+  }
+  
+  /* Disable elements  */
+  #context-navigation,
+  #context-savepage,
+  #context-pocket,
+  #context-sendpagetodevice,
+  #context-selectall,
+  #context-viewsource,
+  #context-inspect-a11y,
+  #context-sendlinktodevice,
+  #context-openlinkinusercontext-menu,
+  #context-bookmarklink,
+  #context-savelink,
+  #context-savelinktopocket,
+  #context-sendlinktodevice,
+  #context-searchselect,
+  #context-sendimage,
+  #context-print-selection {
+    display: none !important;
+  }
+  
+  #context_bookmarkTab,
+  #context_moveTabOptions,
+  #context_sendTabToDevice,
+  #context_reopenInContainer,
+  #context_selectAllTabs,
+  #context_closeTabOptions {
+    display: none !important;
+  }
\ No newline at end of file
diff --git a/mixins/firefox/schizo.nix b/mixins/firefox/schizo.nix
new file mode 100644
index 0000000..a85ae48
--- /dev/null
+++ b/mixins/firefox/schizo.nix
@@ -0,0 +1,80 @@
+{
+  pkgs,
+  lib,
+  config,
+  inputs,
+  ...
+}: {
+  home-manager.users.tzlil = {
+    imports = [
+      inputs.schizofox.homeManagerModule
+    ];
+    programs.schizofox = {
+      enable = true;
+      package = pkgs.firefox-wayland.unwrapped;
+      theme = {
+        background-darker = "181825";
+        background = "1e1e2e";
+        foreground = "cdd6f4";
+        font = "APL 385 Unicode";
+        simplefox.enable = true;
+        darkreader.enable = true;
+        extraCss = builtins.readFile ./userChrome.css;
+      };
+
+      search = {
+        defaultSearchEngine = "Kagi";
+        removeEngines = ["Google" "Bing" "Amazon.com" "eBay" "Twitter" "Wikipedia"];
+        addEngines = [
+          {
+            Name = "Kagi";
+            Description = "kagi";
+            Method = "GET";
+            URLTemplate = "https://kagi.com/search?q={searchTerms}";
+          }
+          {
+            Name = "nixpkgs";
+            Description = "nixpkgs";
+            Alias = "!np";
+            Method = "GET";
+            URLTemplate = "https://search.nixos.org/packages?type=packages&query={searchTerms}";
+          }
+          {
+            Name = "home-manager";
+            Description = "home-manager";
+            Alias = "!hm";
+            Method = "GET";
+            URLTemplate = "https://mipmip.github.io/home-manager-option-search?query={searchTerms}";
+          }
+          {
+            Name = "invidious";
+            Description = "invidious";
+            Alias = "!yt";
+            Method = "GET";
+            URLTemplate = "https://yewtu.be/search?q={searchTerms}";
+          }
+        ];
+      };
+
+      security = {
+        sanitizeOnShutdown = false;
+        sandbox = true;
+        userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0";
+      };
+
+      misc = {
+        # drmFix = true;
+        # disableWebgl = false;
+        startPageURL = "https://lobste.rs";
+      };
+
+      extensions.extraExtensions = {
+        "uBlock0@raymondhill.net".install_url = "https://addons.mozilla.org/firefox/downloads/file/4171020/ublock_origin-1.52.2.xpi";
+        "woop-NoopscooPsnSXQ@jetpack".install_url = "https://addons.mozilla.org/firefox/downloads/file/3360398/privacy_possum-2019.7.18.xpi";
+        "skipredirect@sblask".install_url = "https://addons.mozilla.org/firefox/downloads/file/3920533/skip_redirect-2.3.6.xpi";
+        "{3c078156-979c-498b-8990-85f7987dd929}".install_url = "https://github.com/mbnuqw/sidebery/releases/download/v5.0.0rc4/sidebery-5.0.0rc4.xpi";
+        "redirector@einaregilsson.com".install_url = "https://addons.mozilla.org/firefox/downloads/file/3535009/redirector-3.5.3.xpi";
+      };
+    };
+  };
+}
diff --git a/mixins/multimedia.nix b/mixins/multimedia.nix
index 0ced6f9..2e99771 100644
--- a/mixins/multimedia.nix
+++ b/mixins/multimedia.nix
@@ -63,10 +63,8 @@
           # yank video link with timestamp
           "Ctrl+y" = "run ${pkgs.writeShellScript "yank-mpv-timestamp" "
           url=$1
-          if [[ $url = *youtube.com* || $url = *youtu.be* || $url = *twitch.tv* ]]; then
-              timepos=\${2%.*}
-              url+=$([[ $1 = *\?* ]] && echo \\& || echo \\?)t=$(( timepos / 3600 ))h$(( timepos / 60 ))m$(( timepos % 60 ))s
-          fi
+          timepos=\${2%.*}
+          url+=$([[ $1 = *\?* ]] && echo \\& || echo \\?)t=$(( timepos / 3600 ))h$(( timepos / 60 ))m$(( timepos % 60 ))s
 
           ${pkgs.wl-clipboard}/bin/wl-copy $url
           "} \${path} \${=time-pos}";
diff --git a/mixins/sway.nix b/mixins/sway.nix
index e588531..5981049 100644
--- a/mixins/sway.nix
+++ b/mixins/sway.nix
@@ -25,51 +25,21 @@ in {
   config = {
     security.pam.services.swaylock = {};
     home-manager.users.tzlil = {
-      xdg.configFile."i3status-rust/config.toml".text = ''
-        [icons]
-        icons = "awesome6"
-
-        [theme]
-        theme = "semi-native"
-        [theme.overrides]
-        separator = ""
-
-        [[block]]
-        block = "music"
-        [[block.click]]
-        action = "play_pause"
-        button = "left"
-
-        [[block]]
-        block = "net"
-        format = " $icon {$ssid |}$ip "
-        [[block]]
-        block = "memory"
-        format = " $icon $mem_total_used_percents.eng(w:2) "
-
-        [[block]]
-        block = "cpu"
-
-        [[block]]
-        block = "load"
-
-        [[block]]
-        block = "battery"
-        interval = 10
-        #format = "$percentage $time"
-
-        [[block]]
-        block = "sound"
-        headphones_indicator=true
-        [[block.click]]
-        cmd = "${lib.getExe pkgs.pavucontrol}"
-        button = "left"
-
-        [[block]]
-        block = "time"
-        interval = 60
-        format = "$icon $timestamp.datetime(f:'%a %Y-%m-%d %H:%M')"
-      '';
+      programs.waybar = {
+        enable = true;
+        settings = {
+          mainBar = {
+            modules-left = ["sway/workspaces" "sway/mode" "wlr/taskbar"];
+            modules-center = ["sway/window"];
+            modules-right = ["mpd" "temperature" "battery" "clock"];
+
+            "sway/workspaces" = {
+              disable-scroll = true;
+              all-outputs = false;
+            };
+          };
+        };
+      };
       services.mako.enable = true;
       home.packages = with pkgs; [
         wf-recorder
@@ -155,12 +125,15 @@ in {
           bars = [
             {
               fonts = {
-                names = ["Iosevka" "FontAwesome"];
+                # names = ["Iosevka" "FontAwesome"];
+                names = ["APL385 Unicode"];
                 style = "Regular";
-                size = 11.0;
+                size = 14.0;
               };
               position = "top";
-              statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs";
+              # statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs";
+              command = "${lib.getExe pkgs.waybar}";
+              # command = "waybar";
               colors = {
                 statusline = "#ffffff";
                 background = "#323232";
diff --git a/profiles/graphical.nix b/profiles/graphical.nix
index b284c0d..4340807 100644
--- a/profiles/graphical.nix
+++ b/profiles/graphical.nix
@@ -24,15 +24,6 @@
         };
       };
 
-      # gtk = {
-      #   enable = true;
-      #   font.name = "Victor Mono SemiBold 12";
-      #   theme = {
-      #     name = "SolArc-Dark";
-      #     package = pkgs.solarc-gtk-theme;
-      #   };
-      # };=>
-
       qt = {
         enable = true;
         style.name = "adawita-dark";
@@ -50,8 +41,9 @@
           gtk-xft-rgba = "rgb"; # => font-rgb-order="rgb"
         };
         font = {
-          package = pkgs.noto-fonts;
-          name = "Noto Sans 11";
+          #package = pkgs.noto-fonts;
+          #name = "Noto Sans 11";
+          name = "APL385 Unicode";
         };
       };
     };
diff --git a/secrets/mullvad.age b/secrets/mullvad.age
new file mode 100644
index 0000000..142a957
--- /dev/null
+++ b/secrets/mullvad.age
@@ -0,0 +1,9 @@
+age-encryption.org/v1
+-> ssh-ed25519 NT+RwQ CeoBkSdFwxmiF0M3ymtq8GO/ayFG5bWXQdiWAyG8RQY
+pIEZAamgWv4BXTcP6jTDkOZngBCBpH8S1GoIXnazHc0
+-> ssh-ed25519 RS0D+A sOnyLPxmjuulFfaFeH5oniFFL+UMiZaWDM3eStG/hgY
+w0k8Lj/u2VMMiZmfPUQ/3pmfHAuOUYEdC5INJapXnNU
+-> ZH-grease $2Y y $nj"@{
+zVMm
+--- NcuIbS0RzdBfi3AohGRqQ33pG0EQQlpP4JAZmgB9/Is
+֪""Q&go*<j-LOPTC;0{.
\ No newline at end of file
diff --git a/secrets/secrets.nix b/secrets/secrets.nix
index d738a36..4bd3a71 100644
--- a/secrets/secrets.nix
+++ b/secrets/secrets.nix
@@ -8,4 +8,5 @@ let
 in {
   "id_ed25519.age".publicKeys = [tzlil] ++ systems;
   "matrix.age".publicKeys = [tzlil vps];
+  "mullvad.age".publicKeys = [tzlil navi];
 }