{ config, lib, pkgs, ... }: let bookmarkList = (import ./general.nix) ++ (import ./tools.nix) ++ (import ./entertainment.nix) ++ (import ./infosec.nix) ++ (import ./other.nix) ++ (import ./jack.nix); c = config.lib.stylix.colors; stripProtocol = url: lib.removePrefix "https://" (lib.removePrefix "http://" url); stripDomain = url: builtins.head (lib.splitString "/" (stripProtocol url)); mkCard = item: let domain = stripDomain item.url; initial = builtins.substring 0 1 item.name; in ''
${item.name} ${stripProtocol item.url}
''; mkFolderContent = items: let step = acc: item: if item ? url then acc // {pending = acc.pending ++ [item];} else { chunks = acc.chunks ++ lib.optional (acc.pending != []) { isCards = true; items = acc.pending; } ++ [ { isCards = false; folder = item; } ]; pending = []; }; result = lib.foldl' step { chunks = []; pending = []; } items; chunks = result.chunks ++ lib.optional (result.pending != []) { isCards = true; items = result.pending; }; in lib.concatMapStrings ( chunk: if chunk.isCards then ''
${lib.concatMapStrings mkCard chunk.items}
'' else mkFolder chunk.folder ) chunks; mkFolder = folder: let iconHtml = if folder ? icon then '''' else ""; in ''
${iconHtml}${folder.name}
${mkFolderContent folder.bookmarks}
''; grouped = let step = acc: item: if item ? url then acc // {pending = acc.pending ++ [item];} else { groups = acc.groups ++ lib.optional (acc.pending != []) { isRoot = true; items = acc.pending; } ++ [ { isRoot = false; inherit item; } ]; pending = []; }; result = lib.foldl' step { groups = []; pending = []; } bookmarkList; in result.groups ++ lib.optional (result.pending != []) { isRoot = true; items = result.pending; }; mkSection = group: if group.isRoot then ''
${lib.concatMapStrings mkCard group.items}
'' else mkFolder group.item; in { home.file.".local/share/helium-startpage/index.html".text = '' Bookmarks

Bookmarks

No results

${lib.concatMapStrings mkSection grouped}
''; systemd.user.services.helium-startpage = { Unit = { Description = "Helium startpage HTTP server"; After = ["network.target"]; }; Service = { Type = "simple"; ExecStart = "${pkgs.darkhttpd}/bin/darkhttpd %h/.local/share/helium-startpage --port 8888 --addr 127.0.0.1 --no-listing"; Restart = "on-failure"; }; Install.WantedBy = ["default.target"]; }; }