Your one-stop-cake-shop for everything Freshly Baked has to offer

feat(pm/wiki): optionize icon and favicon

We previously had the same icon and favicon for all wikis... it would
be nice to configure this on a per-wiki basis. Therefore, let's make it
into an ingredient option!

+2
packetmix/systems/teal/wiki.nix
··· 18 18 email = "wiki@freshly.space"; 19 19 enablePublicInternet = true; 20 20 enableAutoRegistration = true; 21 + favicon = ./wiki/favicon.ico; 22 + icon = ./wiki/icon.svg; 21 23 }; 22 24 }
+2
packetmix/systems/umber/wiki.nix
··· 7 7 name = "Starry Sky Wiki"; 8 8 hostname = "wiki.starrysky.fyi"; 9 9 email = "wiki@starrysky.fyi"; 10 + favicon = ./wiki/favicon.ico; 11 + icon = ./wiki/icon.svg; 10 12 }; 11 13 }
packetmix/systems/umber/wiki/favicon.ico

This is a binary file and will not be displayed.

+3
packetmix/systems/umber/wiki/favicon.ico.license
··· 1 + SPDX-FileCopyrightText: 2025 Freshly Baked Cake 2 + 3 + SPDX-License-Identifier: MIT
+142
packetmix/systems/umber/wiki/icon.svg
··· 1 + <svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <g clip-path="url(#clip0_403_2)"> 3 + <rect width="100" height="100" rx="50" fill="#030711"/> 4 + <g clip-path="url(#clip1_403_2)"> 5 + <rect opacity="0.621057" x="4" y="24" width="5" height="5" fill="#F5BDE6"/> 6 + <rect opacity="0.852238" x="93" y="3" width="5" height="5" fill="#F5BDE6"/> 7 + <rect opacity="0.216077" x="42" y="88" width="5" height="5" fill="#F5BDE6"/> 8 + <rect opacity="0.530837" x="99" y="37" width="5" height="5" fill="#F5BDE6"/> 9 + <rect opacity="0.961511" x="52" y="53" width="5" height="5" fill="#F5BDE6"/> 10 + <rect opacity="0.579058" x="62" y="81" width="5" height="5" fill="#F5BDE6"/> 11 + <rect opacity="0.473811" x="52" y="88" width="5" height="5" fill="#F5BDE6"/> 12 + <rect opacity="0.840787" x="83" y="73" width="5" height="5" fill="#F5BDE6"/> 13 + <rect opacity="0.598049" x="45" y="73" width="5" height="5" fill="#F5BDE6"/> 14 + <rect opacity="0.445302" x="77" y="28" width="5" height="5" fill="#F5BDE6"/> 15 + <rect opacity="0.816334" x="28" y="87" width="5" height="5" fill="#F5BDE6"/> 16 + <rect opacity="0.733828" x="27" y="50" width="5" height="5" fill="#F5BDE6"/> 17 + <rect opacity="0.608854" x="38" y="16" width="5" height="5" fill="#F5BDE6"/> 18 + <rect opacity="0.329103" x="10" y="8" width="5" height="5" fill="#F5BDE6"/> 19 + <rect opacity="0.533862" x="29" y="15" width="5" height="5" fill="#F5BDE6"/> 20 + <rect opacity="0.443625" x="95" y="22" width="5" height="5" fill="#F5BDE6"/> 21 + <rect opacity="0.479166" x="83" y="15" width="5" height="5" fill="#F5BDE6"/> 22 + <rect opacity="0.32734" x="46" y="81" width="5" height="5" fill="#F5BDE6"/> 23 + <rect opacity="0.650886" x="27" y="60" width="5" height="5" fill="#F5BDE6"/> 24 + <rect opacity="0.845287" x="46" y="97" width="5" height="5" fill="#F5BDE6"/> 25 + <rect opacity="0.606873" x="36" y="41" width="5" height="5" fill="#F5BDE6"/> 26 + <rect opacity="0.221477" x="36" y="19" width="5" height="5" fill="#F5BDE6"/> 27 + <rect opacity="0.547727" x="2" y="56" width="5" height="5" fill="#F5BDE6"/> 28 + <rect opacity="0.292124" x="83" y="73" width="5" height="5" fill="#F5BDE6"/> 29 + <rect opacity="0.489891" x="65" y="37" width="5" height="5" fill="#F5BDE6"/> 30 + <rect opacity="0.217084" x="30" y="27" width="5" height="5" fill="#F5BDE6"/> 31 + <rect opacity="0.490361" x="81" y="65" width="5" height="5" fill="#F5BDE6"/> 32 + <rect opacity="0.293386" x="10" y="88" width="5" height="5" fill="#F5BDE6"/> 33 + <rect opacity="0.640141" x="78" y="96" width="5" height="5" fill="#F5BDE6"/> 34 + <rect opacity="0.857758" x="79" y="93" width="5" height="5" fill="#F5BDE6"/> 35 + <rect opacity="0.333002" x="2" y="10" width="5" height="5" fill="#F5BDE6"/> 36 + <rect opacity="0.279611" x="51" y="9" width="5" height="5" fill="#F5BDE6"/> 37 + <rect opacity="0.292151" x="76" y="7" width="5" height="5" fill="#F5BDE6"/> 38 + <rect opacity="0.513016" x="1" y="13" width="5" height="5" fill="#F5BDE6"/> 39 + <rect opacity="0.254339" x="34" y="17" width="5" height="5" fill="#F5BDE6"/> 40 + <rect opacity="0.284641" x="4" y="59" width="5" height="5" fill="#F5BDE6"/> 41 + <rect opacity="0.579927" x="89" y="62" width="5" height="5" fill="#F5BDE6"/> 42 + <rect opacity="0.854369" x="11" y="1" width="5" height="5" fill="#F5BDE6"/> 43 + <rect opacity="0.703811" x="91" y="86" width="5" height="5" fill="#F5BDE6"/> 44 + <rect opacity="0.739932" x="67" y="44" width="5" height="5" fill="#F5BDE6"/> 45 + <rect opacity="0.493849" x="21" y="6" width="5" height="5" fill="#F5BDE6"/> 46 + <rect opacity="0.88514" x="47" y="38" width="5" height="5" fill="#F5BDE6"/> 47 + <rect opacity="0.586199" x="99" y="19" width="5" height="5" fill="#F5BDE6"/> 48 + <rect opacity="0.766144" x="81" y="99" width="5" height="5" fill="#F5BDE6"/> 49 + <rect opacity="0.717553" x="68" y="93" width="5" height="5" fill="#F5BDE6"/> 50 + <rect opacity="0.736111" x="65" y="42" width="5" height="5" fill="#F5BDE6"/> 51 + <rect opacity="0.345391" x="26" y="45" width="5" height="5" fill="#F5BDE6"/> 52 + <rect opacity="0.542467" x="58" y="51" width="5" height="5" fill="#F5BDE6"/> 53 + <rect opacity="0.571617" x="49" y="54" width="5" height="5" fill="#F5BDE6"/> 54 + <rect opacity="0.975175" x="74" y="81" width="5" height="5" fill="#F5BDE6"/> 55 + <rect opacity="0.725864" x="60" y="80" width="5" height="5" fill="#F5BDE6"/> 56 + <rect opacity="0.573309" x="3" y="50" width="5" height="5" fill="#F5BDE6"/> 57 + <rect opacity="0.44939" x="14" y="96" width="5" height="5" fill="#F5BDE6"/> 58 + <rect opacity="0.444575" x="84" y="42" width="5" height="5" fill="#F5BDE6"/> 59 + <rect opacity="0.553029" x="58" y="10" width="5" height="5" fill="#F5BDE6"/> 60 + <rect opacity="0.637627" y="27" width="5" height="5" fill="#F5BDE6"/> 61 + <rect opacity="0.383483" x="19" y="36" width="5" height="5" fill="#F5BDE6"/> 62 + <rect opacity="0.436302" x="59" y="33" width="5" height="5" fill="#F5BDE6"/> 63 + <rect opacity="0.786272" x="9" y="62" width="5" height="5" fill="#F5BDE6"/> 64 + <rect opacity="0.720444" x="46" y="27" width="5" height="5" fill="#F5BDE6"/> 65 + <rect opacity="0.524445" x="92" y="19" width="5" height="5" fill="#F5BDE6"/> 66 + <rect opacity="0.409966" x="90" y="62" width="5" height="5" fill="#F5BDE6"/> 67 + <rect opacity="0.956206" x="66" y="56" width="5" height="5" fill="#F5BDE6"/> 68 + <rect opacity="0.678512" x="82" y="65" width="5" height="5" fill="#F5BDE6"/> 69 + <rect opacity="0.79066" x="80" y="17" width="5" height="5" fill="#F5BDE6"/> 70 + <rect opacity="0.602691" x="22" y="21" width="5" height="5" fill="#F5BDE6"/> 71 + <rect opacity="0.848654" x="79" y="65" width="5" height="5" fill="#F5BDE6"/> 72 + <rect opacity="0.956758" x="31" y="78" width="5" height="5" fill="#F5BDE6"/> 73 + <rect opacity="0.328654" x="80" y="86" width="5" height="5" fill="#F5BDE6"/> 74 + <rect opacity="0.565304" x="20" y="62" width="5" height="5" fill="#F5BDE6"/> 75 + <rect opacity="0.757276" x="20" y="79" width="5" height="5" fill="#F5BDE6"/> 76 + <rect opacity="0.510643" x="30" y="19" width="5" height="5" fill="#F5BDE6"/> 77 + <rect opacity="0.246408" x="93" y="64" width="5" height="5" fill="#F5BDE6"/> 78 + <rect opacity="0.548199" x="4" y="85" width="5" height="5" fill="#F5BDE6"/> 79 + <rect opacity="0.4696" x="30" y="80" width="5" height="5" fill="#F5BDE6"/> 80 + <rect opacity="0.755137" x="54" y="36" width="5" height="5" fill="#F5BDE6"/> 81 + <rect opacity="0.40579" x="98" y="9" width="5" height="5" fill="#F5BDE6"/> 82 + <rect opacity="0.629922" x="40" y="23" width="5" height="5" fill="#F5BDE6"/> 83 + <rect opacity="0.440435" x="43" y="75" width="5" height="5" fill="#F5BDE6"/> 84 + <rect opacity="0.793438" x="72" y="30" width="5" height="5" fill="#F5BDE6"/> 85 + <rect opacity="0.470026" x="86" y="77" width="5" height="5" fill="#F5BDE6"/> 86 + <rect opacity="0.538141" x="47" y="62" width="5" height="5" fill="#F5BDE6"/> 87 + <rect opacity="0.512506" x="55" y="76" width="5" height="5" fill="#F5BDE6"/> 88 + <rect opacity="0.912024" x="87" y="10" width="5" height="5" fill="#F5BDE6"/> 89 + <g filter="url(#filter0_dddddd_403_2)"> 90 + <path d="M50 0C50 27.6142 33.2107 50 12.5 50C33.2107 50 50 72.3858 50 100C50 72.3858 66.7893 50 87.5 50C66.7893 50 50 27.6142 50 0Z" fill="#F5BDE6"/> 91 + </g> 92 + </g> 93 + </g> 94 + <defs> 95 + <filter id="filter0_dddddd_403_2" x="-7.5" y="-20" width="115" height="140" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> 96 + <feFlood flood-opacity="0" result="BackgroundImageFix"/> 97 + <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> 98 + <feOffset/> 99 + <feGaussianBlur stdDeviation="10"/> 100 + <feComposite in2="hardAlpha" operator="out"/> 101 + <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/> 102 + <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_403_2"/> 103 + <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> 104 + <feOffset/> 105 + <feGaussianBlur stdDeviation="10"/> 106 + <feComposite in2="hardAlpha" operator="out"/> 107 + <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/> 108 + <feBlend mode="normal" in2="effect1_dropShadow_403_2" result="effect2_dropShadow_403_2"/> 109 + <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> 110 + <feOffset/> 111 + <feGaussianBlur stdDeviation="10"/> 112 + <feComposite in2="hardAlpha" operator="out"/> 113 + <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/> 114 + <feBlend mode="normal" in2="effect2_dropShadow_403_2" result="effect3_dropShadow_403_2"/> 115 + <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> 116 + <feOffset/> 117 + <feGaussianBlur stdDeviation="10"/> 118 + <feComposite in2="hardAlpha" operator="out"/> 119 + <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/> 120 + <feBlend mode="normal" in2="effect3_dropShadow_403_2" result="effect4_dropShadow_403_2"/> 121 + <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> 122 + <feOffset/> 123 + <feGaussianBlur stdDeviation="10"/> 124 + <feComposite in2="hardAlpha" operator="out"/> 125 + <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/> 126 + <feBlend mode="normal" in2="effect4_dropShadow_403_2" result="effect5_dropShadow_403_2"/> 127 + <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> 128 + <feOffset/> 129 + <feGaussianBlur stdDeviation="7.5"/> 130 + <feComposite in2="hardAlpha" operator="out"/> 131 + <feColorMatrix type="matrix" values="0 0 0 0 0.960784 0 0 0 0 0.741176 0 0 0 0 0.901961 0 0 0 1 0"/> 132 + <feBlend mode="normal" in2="effect5_dropShadow_403_2" result="effect6_dropShadow_403_2"/> 133 + <feBlend mode="normal" in="SourceGraphic" in2="effect6_dropShadow_403_2" result="shape"/> 134 + </filter> 135 + <clipPath id="clip0_403_2"> 136 + <rect width="100" height="100" rx="50" fill="white"/> 137 + </clipPath> 138 + <clipPath id="clip1_403_2"> 139 + <rect width="100" height="100" fill="white"/> 140 + </clipPath> 141 + </defs> 142 + </svg>
+3
packetmix/systems/umber/wiki/icon.svg.license
··· 1 + SPDX-FileCopyrightText: 2025 Freshly Baked Cake 2 + 3 + SPDX-License-Identifier: MIT
+10 -2
packetmix/systems/wiki/wiki.nix
··· 29 29 }; 30 30 enablePublicInternet = lib.mkEnableOption "Allow access from the public internet with authentication via OIDC"; 31 31 enableAutoRegistration = lib.mkEnableOption "Allow unregistered users to automatically register via OIDC or Tailscale"; 32 + favicon = lib.mkOption { 33 + type = lib.types.path; 34 + description = "What's your favicon.ico (.ico)"; 35 + }; 36 + icon = lib.mkOption { 37 + type = lib.types.path; 38 + description = "What icon do you want to display on the top left of pages (.svg)"; 39 + }; 32 40 }; 33 41 34 42 config = { ··· 338 346 return 301 https://${config.ingredient.wiki.wiki.hostname}/wiki/; 339 347 ''; # overriding nixpkgs /wiki/ redirect since as our double-proxy makes it redirect to :1036 340 348 }; 341 - "= /favicon.ico".alias = ./wiki/favicon.ico; 342 - "= /icon.svg".alias = ./wiki/icon.svg; 349 + "= /favicon.ico".alias = config.ingredient.wiki.wiki.favicon; 350 + "= /icon.svg".alias = config.ingredient.wiki.wiki.icon; 343 351 }; 344 352 345 353 extraConfig = ''
packetmix/systems/wiki/wiki/favicon.ico packetmix/systems/teal/wiki/favicon.ico
packetmix/systems/wiki/wiki/favicon.ico.license packetmix/systems/teal/wiki/favicon.ico.license
packetmix/systems/wiki/wiki/icon.svg packetmix/systems/teal/wiki/icon.svg
packetmix/systems/wiki/wiki/icon.svg.license packetmix/systems/teal/wiki/icon.svg.license