mirror of
https://github.com/nix-community/home-manager
synced 2024-11-23 11:39:46 +01:00
floorp: add module
Also fix tests for Firefox module derivatives.
This commit is contained in:
parent
65ae9c1473
commit
2b13611eae
13 changed files with 334 additions and 29 deletions
|
@ -92,6 +92,7 @@ let
|
||||||
./programs/feh.nix
|
./programs/feh.nix
|
||||||
./programs/firefox.nix
|
./programs/firefox.nix
|
||||||
./programs/fish.nix
|
./programs/fish.nix
|
||||||
|
./programs/floorp.nix
|
||||||
./programs/foot.nix
|
./programs/foot.nix
|
||||||
./programs/freetube.nix
|
./programs/freetube.nix
|
||||||
./programs/fuzzel.nix
|
./programs/fuzzel.nix
|
||||||
|
|
29
modules/programs/floorp.nix
Normal file
29
modules/programs/floorp.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
modulePath = [ "programs" "floorp" ];
|
||||||
|
|
||||||
|
mkFirefoxModule = import ./firefox/mkFirefoxModule.nix;
|
||||||
|
|
||||||
|
in {
|
||||||
|
meta.maintainers = [ hm.maintainers.bricked ];
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
(mkFirefoxModule {
|
||||||
|
inherit modulePath;
|
||||||
|
name = "Floorp";
|
||||||
|
wrappedPackageName = "floorp";
|
||||||
|
unwrappedPackageName = "floorp-unwrapped";
|
||||||
|
visible = true;
|
||||||
|
|
||||||
|
platforms.linux = {
|
||||||
|
configPath = ".floorp";
|
||||||
|
vendorPath = ".floorp";
|
||||||
|
};
|
||||||
|
platforms.darwin = { configPath = "Library/Application Support/Floorp"; };
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
|
@ -193,6 +193,7 @@ in import nmtSrc {
|
||||||
./modules/programs/bemenu
|
./modules/programs/bemenu
|
||||||
./modules/programs/boxxy
|
./modules/programs/boxxy
|
||||||
./modules/programs/firefox/firefox.nix
|
./modules/programs/firefox/firefox.nix
|
||||||
|
./modules/programs/firefox/floorp.nix
|
||||||
./modules/programs/foot
|
./modules/programs/foot
|
||||||
./modules/programs/freetube
|
./modules/programs/freetube
|
||||||
./modules/programs/fuzzel
|
./modules/programs/fuzzel
|
||||||
|
|
15
tests/modules/programs/firefox/common.nix
Normal file
15
tests/modules/programs/firefox/common.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
name:
|
||||||
|
builtins.mapAttrs (test: module: import module [ "programs" name ]) {
|
||||||
|
"${name}-deprecated-native-messenger" = ./deprecated-native-messenger.nix;
|
||||||
|
"${name}-policies" = ./policies.nix;
|
||||||
|
"${name}-profiles-bookmarks" = ./profiles/bookmarks;
|
||||||
|
"${name}-profiles-containers" = ./profiles/containers;
|
||||||
|
"${name}-profiles-containers-duplicate-ids" =
|
||||||
|
./profiles/containers/duplicate-ids.nix;
|
||||||
|
"${name}-profiles-containers-id-out-of-range" =
|
||||||
|
./profiles/containers/id-out-of-range.nix;
|
||||||
|
"${name}-profiles-duplicate-ids" = ./profiles/duplicate-ids.nix;
|
||||||
|
"${name}-profiles-search" = ./profiles/search;
|
||||||
|
"${name}-profiles-settings" = ./profiles/settings;
|
||||||
|
"${name}-state-version-19_09" = ./state-version-19_09.nix;
|
||||||
|
}
|
|
@ -1,16 +1 @@
|
||||||
let name = "firefox";
|
import ./common.nix "firefox"
|
||||||
|
|
||||||
in builtins.mapAttrs (test: module: import module [ "programs" name ]) {
|
|
||||||
"${name}-deprecated-native-messenger" = ./deprecated-native-messenger.nix;
|
|
||||||
"${name}-policies" = ./policies.nix;
|
|
||||||
"${name}-profiles-bookmarks" = ./profiles/bookmarks;
|
|
||||||
"${name}-profiles-containers" = ./profiles/containers;
|
|
||||||
"${name}-profiles-containers-duplicate-ids" =
|
|
||||||
./profiles/containers/duplicate-ids.nix;
|
|
||||||
"${name}-profiles-containers-id-out-of-range" =
|
|
||||||
./profiles/containers/id-out-of-range.nix;
|
|
||||||
"${name}-profiles-duplicate-ids" = ./profiles/duplicate-ids.nix;
|
|
||||||
"${name}-profiles-search" = ./profiles/search;
|
|
||||||
"${name}-profiles-settings" = ./profiles/settings;
|
|
||||||
"${name}-state-version-19_09" = ./state-version-19_09.nix;
|
|
||||||
}
|
|
||||||
|
|
1
tests/modules/programs/firefox/floorp.nix
Normal file
1
tests/modules/programs/firefox/floorp.nix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
import ./common.nix "floorp"
|
|
@ -20,7 +20,7 @@ in {
|
||||||
package = pkgs.${cfg.wrappedPackageName}.override {
|
package = pkgs.${cfg.wrappedPackageName}.override {
|
||||||
extraPolicies = { DownloadDirectory = "/foo"; };
|
extraPolicies = { DownloadDirectory = "/foo"; };
|
||||||
};
|
};
|
||||||
}) // {
|
} // {
|
||||||
nmt.script = ''
|
nmt.script = ''
|
||||||
jq=${lib.getExe pkgs.jq}
|
jq=${lib.getExe pkgs.jq}
|
||||||
config_file="${cfg.finalPackage}/lib/${cfg.wrappedPackageName}/distribution/policies.json"
|
config_file="${cfg.finalPackage}/lib/${cfg.wrappedPackageName}/distribution/policies.json"
|
||||||
|
@ -39,5 +39,5 @@ in {
|
||||||
fail "Expected '$config_file' to set 'policies.DownloadDirectory' to \"/foo\""
|
fail "Expected '$config_file' to set 'policies.DownloadDirectory' to \"/foo\""
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
241
tests/modules/programs/firefox/profile-settings.nix
Normal file
241
tests/modules/programs/firefox/profile-settings.nix
Normal file
|
@ -0,0 +1,241 @@
|
||||||
|
modulePath:
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
cfg = getAttrFromPath modulePath config;
|
||||||
|
|
||||||
|
firefoxMockOverlay = import ./setup-firefox-mock-overlay.nix modulePath;
|
||||||
|
|
||||||
|
withName = path:
|
||||||
|
pkgs.substituteAll {
|
||||||
|
src = path;
|
||||||
|
name = cfg.wrappedPackageName;
|
||||||
|
};
|
||||||
|
|
||||||
|
in {
|
||||||
|
imports = [ firefoxMockOverlay ];
|
||||||
|
|
||||||
|
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||||
|
enable = true;
|
||||||
|
profiles.basic.isDefault = true;
|
||||||
|
|
||||||
|
profiles.test = {
|
||||||
|
id = 1;
|
||||||
|
settings = {
|
||||||
|
"general.smoothScroll" = false;
|
||||||
|
"browser.newtabpage.pinned" = [{
|
||||||
|
title = "NixOS";
|
||||||
|
url = "https://nixos.org";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles.bookmarks = {
|
||||||
|
id = 2;
|
||||||
|
settings = { "general.smoothScroll" = false; };
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
toolbar = true;
|
||||||
|
bookmarks = [{
|
||||||
|
name = "Home Manager";
|
||||||
|
url = "https://wiki.nixos.org/wiki/Home_Manager";
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "wikipedia";
|
||||||
|
tags = [ "wiki" ];
|
||||||
|
keyword = "wiki";
|
||||||
|
url = "https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "kernel.org";
|
||||||
|
url = "https://www.kernel.org";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Nix sites";
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "homepage";
|
||||||
|
url = "https://nixos.org/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "wiki";
|
||||||
|
tags = [ "wiki" "nix" ];
|
||||||
|
url = "https://wiki.nixos.org/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Nix sites";
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "homepage";
|
||||||
|
url = "https://nixos.org/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "wiki";
|
||||||
|
url = "https://wiki.nixos.org/";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles.search = {
|
||||||
|
id = 3;
|
||||||
|
search = {
|
||||||
|
force = true;
|
||||||
|
default = "Google";
|
||||||
|
privateDefault = "DuckDuckGo";
|
||||||
|
order = [ "Nix Packages" "NixOS Wiki" ];
|
||||||
|
engines = {
|
||||||
|
"Nix Packages" = {
|
||||||
|
urls = [{
|
||||||
|
template = "https://search.nixos.org/packages";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "type";
|
||||||
|
value = "packages";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
|
||||||
|
icon =
|
||||||
|
"/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
|
|
||||||
|
definedAliases = [ "@np" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"NixOS Wiki" = {
|
||||||
|
urls = [{
|
||||||
|
template =
|
||||||
|
"https://wiki.nixos.org/index.php?search={searchTerms}";
|
||||||
|
}];
|
||||||
|
iconUpdateURL = "https://wiki.nixos.org/favicon.png";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000;
|
||||||
|
definedAliases = [ "@nw" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"Bing".metaData.hidden = true;
|
||||||
|
"Google".metaData.alias = "@g";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles.searchWithoutDefault = {
|
||||||
|
id = 4;
|
||||||
|
search = {
|
||||||
|
force = true;
|
||||||
|
order = [ "Google" "Nix Packages" ];
|
||||||
|
engines = {
|
||||||
|
"Nix Packages" = {
|
||||||
|
urls = [{
|
||||||
|
template = "https://search.nixos.org/packages";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "type";
|
||||||
|
value = "packages";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
|
||||||
|
definedAliases = [ "@np" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles.containers = {
|
||||||
|
id = 5;
|
||||||
|
containers = {
|
||||||
|
"shopping" = {
|
||||||
|
id = 6;
|
||||||
|
icon = "circle";
|
||||||
|
color = "yellow";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} // {
|
||||||
|
|
||||||
|
nmt.script = let
|
||||||
|
|
||||||
|
noHashQuery = ''
|
||||||
|
'def walk(f):
|
||||||
|
. as $in
|
||||||
|
| if type == "object" then
|
||||||
|
reduce keys[] as $key
|
||||||
|
( {}; . + { ($key): ($in[$key] | walk(f)) } | f )
|
||||||
|
elif type == "array" then
|
||||||
|
map( walk(f) )
|
||||||
|
else
|
||||||
|
f
|
||||||
|
end;
|
||||||
|
walk(if type == "object" then
|
||||||
|
if has("hash") then .hash = null else . end |
|
||||||
|
if has("privateHash") then .privateHash = null else . end
|
||||||
|
else
|
||||||
|
.
|
||||||
|
end)' '';
|
||||||
|
|
||||||
|
in ''
|
||||||
|
assertFileRegex \
|
||||||
|
home-path/bin/${cfg.wrappedPackageName} \
|
||||||
|
MOZ_APP_LAUNCHER
|
||||||
|
|
||||||
|
assertDirectoryExists home-files/${cfg.configPath}/basic
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
home-files/${cfg.configPath}/test/user.js \
|
||||||
|
${withName ./profile-settings-expected-user.js}
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
home-files/${cfg.configPath}/containers/containers.json \
|
||||||
|
${withName ./profile-settings-expected-containers.json}
|
||||||
|
|
||||||
|
bookmarksUserJs=$(normalizeStorePaths \
|
||||||
|
home-files/${cfg.configPath}/bookmarks/user.js)
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
$bookmarksUserJs \
|
||||||
|
${withName ./profile-settings-expected-bookmarks-user.js}
|
||||||
|
|
||||||
|
bookmarksFile="$(sed -n \
|
||||||
|
'/browser.bookmarks.file/ {s|^.*\(/nix/store[^"]*\).*|\1|;p}' \
|
||||||
|
$TESTED/home-files/${cfg.configPath}/bookmarks/user.js)"
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
$bookmarksFile \
|
||||||
|
${withName ./profile-settings-expected-bookmarks.html}
|
||||||
|
|
||||||
|
function assertFirefoxSearchContent() {
|
||||||
|
compressedSearch=$(normalizeStorePaths "$1")
|
||||||
|
|
||||||
|
decompressedSearch=$(dirname $compressedSearch)/search.json
|
||||||
|
${pkgs.mozlz4a}/bin/mozlz4a -d "$compressedSearch" >(${pkgs.jq}/bin/jq ${noHashQuery} > "$decompressedSearch")
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
$decompressedSearch \
|
||||||
|
"$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
assertFirefoxSearchContent \
|
||||||
|
home-files/${cfg.configPath}/search/search.json.mozlz4 \
|
||||||
|
${withName ./profile-settings-expected-search.json}
|
||||||
|
|
||||||
|
assertFirefoxSearchContent \
|
||||||
|
home-files/${cfg.configPath}/searchWithoutDefault/search.json.mozlz4 \
|
||||||
|
${withName ./profile-settings-expected-search-without-default.json}
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
}
|
|
@ -9,6 +9,12 @@ let
|
||||||
|
|
||||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||||
|
|
||||||
|
withName = path:
|
||||||
|
pkgs.substituteAll {
|
||||||
|
src = path;
|
||||||
|
name = cfg.wrappedPackageName;
|
||||||
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [ firefoxMockOverlay ];
|
imports = [ firefoxMockOverlay ];
|
||||||
|
|
||||||
|
@ -70,7 +76,7 @@ in {
|
||||||
|
|
||||||
assertFileContent \
|
assertFileContent \
|
||||||
$bookmarksUserJs \
|
$bookmarksUserJs \
|
||||||
${./expected-bookmarks-user.js}
|
${withName ./expected-bookmarks-user.js}
|
||||||
|
|
||||||
bookmarksFile="$(sed -n \
|
bookmarksFile="$(sed -n \
|
||||||
'/browser.bookmarks.file/ {s|^.*\(/nix/store[^"]*\).*|\1|;p}' \
|
'/browser.bookmarks.file/ {s|^.*\(/nix/store[^"]*\).*|\1|;p}' \
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Generated by Home Manager.
|
// Generated by Home Manager.
|
||||||
|
|
||||||
user_pref("browser.bookmarks.file", "/nix/store/00000000000000000000000000000000-firefox-bookmarks.html");
|
user_pref("browser.bookmarks.file", "/nix/store/00000000000000000000000000000000-@name@-bookmarks.html");
|
||||||
user_pref("browser.places.importBookmarksHTML", true);
|
user_pref("browser.places.importBookmarksHTML", true);
|
||||||
user_pref("general.smoothScroll", false);
|
user_pref("general.smoothScroll", false);
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,12 @@ let
|
||||||
|
|
||||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||||
|
|
||||||
|
withName = path:
|
||||||
|
pkgs.substituteAll {
|
||||||
|
src = path;
|
||||||
|
name = cfg.wrappedPackageName;
|
||||||
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [ firefoxMockOverlay ];
|
imports = [ firefoxMockOverlay ];
|
||||||
|
|
||||||
|
@ -88,12 +94,32 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} // {
|
} // {
|
||||||
nmt.script = ''
|
nmt.script = let
|
||||||
|
|
||||||
|
noHashQuery = ''
|
||||||
|
'def walk(f):
|
||||||
|
. as $in
|
||||||
|
| if type == "object" then
|
||||||
|
reduce keys[] as $key
|
||||||
|
( {}; . + { ($key): ($in[$key] | walk(f)) } | f )
|
||||||
|
elif type == "array" then
|
||||||
|
map( walk(f) )
|
||||||
|
else
|
||||||
|
f
|
||||||
|
end;
|
||||||
|
walk(if type == "object" then
|
||||||
|
if has("hash") then .hash = null else . end |
|
||||||
|
if has("privateHash") then .privateHash = null else . end
|
||||||
|
else
|
||||||
|
.
|
||||||
|
end)' '';
|
||||||
|
|
||||||
|
in ''
|
||||||
function assertFirefoxSearchContent() {
|
function assertFirefoxSearchContent() {
|
||||||
compressedSearch=$(normalizeStorePaths "$1")
|
compressedSearch=$(normalizeStorePaths "$1")
|
||||||
|
|
||||||
decompressedSearch=$(dirname $compressedSearch)/search.json
|
decompressedSearch=$(dirname $compressedSearch)/search.json
|
||||||
${pkgs.mozlz4a}/bin/mozlz4a -d "$compressedSearch" >(${pkgs.jq}/bin/jq . > "$decompressedSearch")
|
${pkgs.mozlz4a}/bin/mozlz4a -d "$compressedSearch" >(${pkgs.jq}/bin/jq ${noHashQuery} > "$decompressedSearch")
|
||||||
|
|
||||||
assertFileContent \
|
assertFileContent \
|
||||||
$decompressedSearch \
|
$decompressedSearch \
|
||||||
|
@ -102,11 +128,11 @@ in {
|
||||||
|
|
||||||
assertFirefoxSearchContent \
|
assertFirefoxSearchContent \
|
||||||
home-files/${cfg.configPath}/search/search.json.mozlz4 \
|
home-files/${cfg.configPath}/search/search.json.mozlz4 \
|
||||||
${./expected-search.json}
|
${withName ./expected-search.json}
|
||||||
|
|
||||||
assertFirefoxSearchContent \
|
assertFirefoxSearchContent \
|
||||||
home-files/${cfg.configPath}/searchWithoutDefault/search.json.mozlz4 \
|
home-files/${cfg.configPath}/searchWithoutDefault/search.json.mozlz4 \
|
||||||
${./expected-search-without-default.json}
|
${withName ./expected-search-without-default.json}
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"@np"
|
"@np"
|
||||||
],
|
],
|
||||||
"_isAppProvided": false,
|
"_isAppProvided": false,
|
||||||
"_loadPath": "[home-manager]/programs.firefox.profiles.searchWithoutDefault.search.engines.\"Nix Packages\"",
|
"_loadPath": "[home-manager]/programs.@name@.profiles.searchWithoutDefault.search.engines.\"Nix Packages\"",
|
||||||
"_metaData": {
|
"_metaData": {
|
||||||
"order": 2
|
"order": 2
|
||||||
},
|
},
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
],
|
],
|
||||||
"_iconURL": "file:///run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg",
|
"_iconURL": "file:///run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg",
|
||||||
"_isAppProvided": false,
|
"_isAppProvided": false,
|
||||||
"_loadPath": "[home-manager]/programs.firefox.profiles.search.search.engines.\"Nix Packages\"",
|
"_loadPath": "[home-manager]/programs.@name@.profiles.search.search.engines.\"Nix Packages\"",
|
||||||
"_metaData": {
|
"_metaData": {
|
||||||
"order": 1
|
"order": 1
|
||||||
},
|
},
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"_iconURL": "https://wiki.nixos.org/favicon.png",
|
"_iconURL": "https://wiki.nixos.org/favicon.png",
|
||||||
"_iconUpdateURL": "https://wiki.nixos.org/favicon.png",
|
"_iconUpdateURL": "https://wiki.nixos.org/favicon.png",
|
||||||
"_isAppProvided": false,
|
"_isAppProvided": false,
|
||||||
"_loadPath": "[home-manager]/programs.firefox.profiles.search.search.engines.\"NixOS Wiki\"",
|
"_loadPath": "[home-manager]/programs.@name@.profiles.search.search.engines.\"NixOS Wiki\"",
|
||||||
"_metaData": {
|
"_metaData": {
|
||||||
"order": 2
|
"order": 2
|
||||||
},
|
},
|
||||||
|
@ -68,9 +68,9 @@
|
||||||
],
|
],
|
||||||
"metaData": {
|
"metaData": {
|
||||||
"current": "Google",
|
"current": "Google",
|
||||||
"hash": "IRmKVSQlAYnvLO8kdZyNUR/g5hzVn4++T0PLPGm+kZk=",
|
"hash": null,
|
||||||
"private": "DuckDuckGo",
|
"private": "DuckDuckGo",
|
||||||
"privateHash": "BWvqUiaCuMJ20lbymFf2dqzWyl1cgm1LZhhdWNEp0Cc=",
|
"privateHash": null,
|
||||||
"useSavedOrder": true
|
"useSavedOrder": true
|
||||||
},
|
},
|
||||||
"version": 6
|
"version": 6
|
||||||
|
|
Loading…
Reference in a new issue