mirror of
https://github.com/nix-community/home-manager
synced 2024-11-23 11:39:46 +01:00
firefox: add bookmarks support
Generate bookmarks html file and hook it up in user.js.
This commit is contained in:
parent
095f3e32ae
commit
e0a87d75e9
4 changed files with 131 additions and 8 deletions
|
@ -40,16 +40,51 @@ let
|
||||||
|
|
||||||
profilesIni = generators.toINI { } profiles;
|
profilesIni = generators.toINI { } profiles;
|
||||||
|
|
||||||
mkUserJs = prefs: extraPrefs: ''
|
mkUserJs = prefs: extraPrefs: bookmarks:
|
||||||
|
let
|
||||||
|
prefs' = lib.optionalAttrs ({ } != bookmarks) {
|
||||||
|
"browser.bookmarks.file" = toString (firefoxBookmarksFile bookmarks);
|
||||||
|
"browser.places.importBookmarksHTML" = true;
|
||||||
|
} // prefs;
|
||||||
|
in ''
|
||||||
// Generated by Home Manager.
|
// Generated by Home Manager.
|
||||||
|
|
||||||
${concatStrings (mapAttrsToList (name: value: ''
|
${concatStrings (mapAttrsToList (name: value: ''
|
||||||
user_pref("${name}", ${builtins.toJSON value});
|
user_pref("${name}", ${builtins.toJSON value});
|
||||||
'') prefs)}
|
'') prefs')}
|
||||||
|
|
||||||
${extraPrefs}
|
${extraPrefs}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
firefoxBookmarksFile = bookmarks:
|
||||||
|
let
|
||||||
|
escapeXML = replaceStrings [ ''"'' "'" "<" ">" "&" ] [
|
||||||
|
"""
|
||||||
|
"'"
|
||||||
|
"<"
|
||||||
|
">"
|
||||||
|
"&"
|
||||||
|
];
|
||||||
|
mapper = _: entry: ''
|
||||||
|
<DT><A HREF="${escapeXML entry.url}" ADD_DATE="0" LAST_MODIFIED="0"${
|
||||||
|
lib.optionalString (entry.keyword != null)
|
||||||
|
" SHORTCUTURL=\"${escapeXML entry.keyword}\""
|
||||||
|
}>${escapeXML entry.name}</A>
|
||||||
|
'';
|
||||||
|
bookmarksEntries = lib.attrsets.mapAttrsToList mapper bookmarks;
|
||||||
|
in pkgs.writeText "firefox-bookmarks.html" ''
|
||||||
|
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||||
|
<!-- This is an automatically generated file.
|
||||||
|
It will be read and overwritten.
|
||||||
|
DO NOT EDIT! -->
|
||||||
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||||
|
<TITLE>Bookmarks</TITLE>
|
||||||
|
<H1>Bookmarks Menu</H1>
|
||||||
|
<DL><p>
|
||||||
|
${concatStrings bookmarksEntries}
|
||||||
|
</p></DL>
|
||||||
|
'';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
meta.maintainers = [ maintainers.rycee ];
|
meta.maintainers = [ maintainers.rycee ];
|
||||||
|
|
||||||
|
@ -197,6 +232,45 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bookmarks = mkOption {
|
||||||
|
type = types.attrsOf (types.submodule ({ config, name, ... }: {
|
||||||
|
options = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = name;
|
||||||
|
description = "Bookmark name.";
|
||||||
|
};
|
||||||
|
|
||||||
|
keyword = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = "Bookmark search keyword.";
|
||||||
|
};
|
||||||
|
|
||||||
|
url = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "Bookmark url, use %s for search terms.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
default = { };
|
||||||
|
example = literalExample ''
|
||||||
|
{
|
||||||
|
wikipedia = {
|
||||||
|
keyword = "wiki";
|
||||||
|
url = "https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go";
|
||||||
|
};
|
||||||
|
"kernel.org" = {
|
||||||
|
url = "https://www.kernel.org";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Preloaded bookmarks. Note, this may silently overwrite any
|
||||||
|
previously existing bookmarks!
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
path = mkOption {
|
path = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = name;
|
default = name;
|
||||||
|
@ -298,7 +372,8 @@ in {
|
||||||
|
|
||||||
"${profilesPath}/${profile.path}/user.js" =
|
"${profilesPath}/${profile.path}/user.js" =
|
||||||
mkIf (profile.settings != { } || profile.extraConfig != "") {
|
mkIf (profile.settings != { } || profile.extraConfig != "") {
|
||||||
text = mkUserJs profile.settings profile.extraConfig;
|
text =
|
||||||
|
mkUserJs profile.settings profile.extraConfig profile.bookmarks;
|
||||||
};
|
};
|
||||||
|
|
||||||
"${profilesPath}/${profile.path}/extensions" =
|
"${profilesPath}/${profile.path}/extensions" =
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
// Generated by Home Manager.
|
||||||
|
|
||||||
|
user_pref("browser.bookmarks.file", "/nix/store/00000000000000000000000000000000-firefox-bookmarks.html");
|
||||||
|
user_pref("browser.places.importBookmarksHTML", true);
|
||||||
|
user_pref("general.smoothScroll", false);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||||
|
<!-- This is an automatically generated file.
|
||||||
|
It will be read and overwritten.
|
||||||
|
DO NOT EDIT! -->
|
||||||
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||||
|
<TITLE>Bookmarks</TITLE>
|
||||||
|
<H1>Bookmarks Menu</H1>
|
||||||
|
<DL><p>
|
||||||
|
<DT><A HREF="https://www.kernel.org" ADD_DATE="0" LAST_MODIFIED="0">kernel.org</A>
|
||||||
|
<DT><A HREF="https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go" ADD_DATE="0" LAST_MODIFIED="0" SHORTCUTURL="wiki">wikipedia</A>
|
||||||
|
|
||||||
|
</p></DL>
|
|
@ -12,6 +12,19 @@ with lib;
|
||||||
id = 1;
|
id = 1;
|
||||||
settings = { "general.smoothScroll" = false; };
|
settings = { "general.smoothScroll" = false; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
profiles.bookmarks = {
|
||||||
|
id = 2;
|
||||||
|
settings = { "general.smoothScroll" = false; };
|
||||||
|
bookmarks = {
|
||||||
|
wikipedia = {
|
||||||
|
keyword = "wiki";
|
||||||
|
url =
|
||||||
|
"https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go";
|
||||||
|
};
|
||||||
|
"kernel.org" = { url = "https://www.kernel.org"; };
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
|
@ -39,6 +52,21 @@ with lib;
|
||||||
assertFileContent \
|
assertFileContent \
|
||||||
home-files/.mozilla/firefox/test/user.js \
|
home-files/.mozilla/firefox/test/user.js \
|
||||||
${./profile-settings-expected-user.js}
|
${./profile-settings-expected-user.js}
|
||||||
|
|
||||||
|
bookmarksUserJs=$(normalizeStorePaths \
|
||||||
|
home-files/.mozilla/firefox/bookmarks/user.js)
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
$bookmarksUserJs \
|
||||||
|
${./profile-settings-expected-bookmarks-user.js}
|
||||||
|
|
||||||
|
bookmarksFile="$(sed -n \
|
||||||
|
'/browser.bookmarks.file/ {s|^.*\(/nix/store[^"]*\).*|\1|;p}' \
|
||||||
|
$TESTED/home-files/.mozilla/firefox/bookmarks/user.js)"
|
||||||
|
|
||||||
|
assertFileContent \
|
||||||
|
$bookmarksFile \
|
||||||
|
${./profile-settings-expected-bookmarks.html}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue