1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-10-22 13:07:26 +02:00

floorp: add module

Also fix tests for Firefox module derivatives.
This commit is contained in:
Kilian Mio 2024-10-12 00:21:33 +02:00 committed by GitHub
parent 65ae9c1473
commit 2b13611eae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 334 additions and 29 deletions

View file

@ -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

View 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"; };
})
];
}

View file

@ -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

View 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;
}

View file

@ -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;
}

View file

@ -0,0 +1 @@
import ./common.nix "floorp"

View file

@ -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
''; '';
}; });
} }

View 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}
'';
});
}

View file

@ -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}' \

View file

@ -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);

View file

@ -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}
''; '';
}); });
} }

View file

@ -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
}, },

View file

@ -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