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;
|
||||
|
||||
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.
|
||||
|
||||
${concatStrings (mapAttrsToList (name: value: ''
|
||||
user_pref("${name}", ${builtins.toJSON value});
|
||||
'') prefs)}
|
||||
'') prefs')}
|
||||
|
||||
${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 {
|
||||
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 {
|
||||
type = types.str;
|
||||
default = name;
|
||||
|
@ -298,7 +372,8 @@ in {
|
|||
|
||||
"${profilesPath}/${profile.path}/user.js" =
|
||||
mkIf (profile.settings != { } || profile.extraConfig != "") {
|
||||
text = mkUserJs profile.settings profile.extraConfig;
|
||||
text =
|
||||
mkUserJs profile.settings profile.extraConfig profile.bookmarks;
|
||||
};
|
||||
|
||||
"${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;
|
||||
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 = [
|
||||
|
@ -39,6 +52,21 @@ with lib;
|
|||
assertFileContent \
|
||||
home-files/.mozilla/firefox/test/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