diff --git a/launcher/resources/multimc/scalable/launcher.svg b/launcher/resources/multimc/scalable/launcher.svg
index 77fb9a484..60914ff57 100644
--- a/launcher/resources/multimc/scalable/launcher.svg
+++ b/launcher/resources/multimc/scalable/launcher.svg
@@ -1,96 +1 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/program_info/fjordlauncher-header-black.svg b/program_info/fjordlauncher-header-black.svg
deleted file mode 100644
index 7bdba8a2c..000000000
--- a/program_info/fjordlauncher-header-black.svg
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
diff --git a/program_info/fjordlauncher-header.Source.svg b/program_info/fjordlauncher-header.Source.svg
deleted file mode 100644
index c8b7f9d9e..000000000
--- a/program_info/fjordlauncher-header.Source.svg
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
diff --git a/program_info/fjordlauncher-header.svg b/program_info/fjordlauncher-header.svg
deleted file mode 100644
index 6aaa0c6c3..000000000
--- a/program_info/fjordlauncher-header.svg
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
diff --git a/program_info/fjordlauncher.icns b/program_info/fjordlauncher.icns
index d9a1b86be..5e8b707d3 100644
Binary files a/program_info/fjordlauncher.icns and b/program_info/fjordlauncher.icns differ
diff --git a/program_info/fjordlauncher.ico b/program_info/fjordlauncher.ico
index 5f4e0413d..8f4bab177 100644
Binary files a/program_info/fjordlauncher.ico and b/program_info/fjordlauncher.ico differ
diff --git a/program_info/genicons.fjord.sh b/program_info/genicons.fjord.sh
new file mode 100755
index 000000000..464ce4bbd
--- /dev/null
+++ b/program_info/genicons.fjord.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+
+svg2png() {
+ input_file="$1"
+ output_file="$2"
+ width="$3"
+ height="$4"
+
+ inkscape -w "$width" -h "$height" -o "$output_file" "$input_file"
+}
+
+if command -v "svgo"; then
+ svgo org.unmojang.FjordLauncher.Source.svg -o org.unmojang.FjordLauncher.svg
+else
+ echo 'ERROR: svgo not in $PATH'
+fi
+
+if command -v "inkscape" && command -v "icotool"; then
+ # Windows ICO
+ d=$(mktemp -d)
+
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_16.png" 16 16
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_24.png" 24 24
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_32.png" 32 32
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_48.png" 48 48
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_64.png" 64 64
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_128.png" 128 128
+ svg2png org.unmojang.FjordLauncher.svg "$d/fjordlauncher_256.png" 256 256
+
+ rm fjordlauncher.ico && icotool -o fjordlauncher.ico -c \
+ "$d/fjordlauncher_256.png" \
+ "$d/fjordlauncher_128.png" \
+ "$d/fjordlauncher_64.png" \
+ "$d/fjordlauncher_48.png" \
+ "$d/fjordlauncher_32.png" \
+ "$d/fjordlauncher_24.png" \
+ "$d/fjordlauncher_16.png"
+else
+ echo "ERROR: Windows icons were NOT generated!" >&2
+ echo "ERROR: requires inkscape and icotool in PATH"
+fi
+
+if command -v "inkscape" && command -v "magick"; then
+ # macOS ICNS
+ d=$(mktemp -d)
+
+ d="$d/fjordlauncher.iconset"
+
+ mkdir -p "$d"
+
+ svg2png org.unmojang.FjordLauncher.bigsur.svg "$d/icon_512x512@2.png" 1024 1024
+ magick convert "$d/icon_512x512@2.png" -resize 16x16 "$d/icon_16x16.png"
+ magick convert "$d/icon_512x512@2.png" -resize 32x32 "$d/icon_16x16@2.png"
+ magick convert "$d/icon_512x512@2.png" -resize 32x32 "$d/icon_32x32.png"
+ magick convert "$d/icon_512x512@2.png" -resize 64x64 "$d/icon_32x32@2.png"
+ magick convert "$d/icon_512x512@2.png" -resize 128x128 "$d/icon_128x128.png"
+ magick convert "$d/icon_512x512@2.png" -resize 256x256 "$d/icon_128x128@2.png"
+ magick convert "$d/icon_512x512@2.png" -resize 256x256 "$d/icon_256x256.png"
+ magick convert "$d/icon_512x512@2.png" -resize 512x512 "$d/icon_256x256@2.png"
+ magick convert "$d"/* fjordlauncher.icns
+else
+ echo 'ERROR: macOS icons were NOT generated!' >&2
+ echo 'ERROR: requires inkscape and magick in $PATH'
+fi
+
+# replace icon in themes
+cp -v org.unmojang.FjordLauncher.svg "../launcher/resources/multimc/scalable/launcher.svg"
diff --git a/program_info/org.unmojang.FjordLauncher Source.svg b/program_info/org.unmojang.FjordLauncher Source.svg
deleted file mode 100644
index 0e51207c9..000000000
--- a/program_info/org.unmojang.FjordLauncher Source.svg
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-
-
diff --git a/program_info/org.unmojang.FjordLauncher.Source.svg b/program_info/org.unmojang.FjordLauncher.Source.svg
new file mode 100644
index 000000000..d07eaee6b
--- /dev/null
+++ b/program_info/org.unmojang.FjordLauncher.Source.svg
@@ -0,0 +1,323 @@
+
+
+
+
diff --git a/program_info/org.unmojang.FjordLauncher.bigsur.svg b/program_info/org.unmojang.FjordLauncher.bigsur.svg
index 06d7c2c81..ccd7cfda3 100644
--- a/program_info/org.unmojang.FjordLauncher.bigsur.svg
+++ b/program_info/org.unmojang.FjordLauncher.bigsur.svg
@@ -8,9 +8,10 @@
id="svg1070"
sodipodi:docname="org.unmojang.FjordLauncher.bigsur.svg"
xml:space="preserve"
- inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">head
+ message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
diff --git a/program_info/org.unmojang.FjordLauncher.svg b/program_info/org.unmojang.FjordLauncher.svg
index 77fb9a484..60914ff57 100644
--- a/program_info/org.unmojang.FjordLauncher.svg
+++ b/program_info/org.unmojang.FjordLauncher.svg
@@ -1,96 +1 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/program_info/shell.nix b/program_info/shell.nix
new file mode 100644
index 000000000..cf728874b
--- /dev/null
+++ b/program_info/shell.nix
@@ -0,0 +1,4 @@
+{pkgs ? import {}}:
+pkgs.mkShell {
+ nativeBuildInputs = with pkgs; [inkscape icoutils imagemagick nodePackages_latest.svgo];
+}