diff --git a/Icons/Exports/EmacsLG-Iconsets.afdesign b/Icons/Exports/EmacsLG-Iconsets.afdesign deleted file mode 100644 index c72552a..0000000 Binary files a/Icons/Exports/EmacsLG-Iconsets.afdesign and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_128x128.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_128x128.png deleted file mode 100644 index 9bbb13c..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_128x128.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_128x128@2x.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_128x128@2x.png deleted file mode 100644 index cbb9b34..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_16x16.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_16x16.png deleted file mode 100644 index 71bfd7f..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_16x16.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_16x16@2x.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_16x16@2x.png deleted file mode 100644 index 6eebffd..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_256x256.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_256x256.png deleted file mode 100644 index f8f57d8..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_256x256.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_256x256@2x.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_256x256@2x.png deleted file mode 100644 index 14f43af..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_32x32.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_32x32.png deleted file mode 100644 index 8054602..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_32x32.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_32x32@2x.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_32x32@2x.png deleted file mode 100644 index f2ebd40..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_512x512.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_512x512.png deleted file mode 100644 index f9846e7..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_512x512.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Dark.iconset/icon_512x512@2x.png b/Icons/Exports/EmacsLG1-Dark.iconset/icon_512x512@2x.png deleted file mode 100644 index d198c8a..0000000 Binary files a/Icons/Exports/EmacsLG1-Dark.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_128x128.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_128x128.png deleted file mode 100644 index 713e9e5..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_128x128.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_128x128@2x.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_128x128@2x.png deleted file mode 100644 index 0b2bc16..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_16x16.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_16x16.png deleted file mode 100644 index 1f2d071..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_16x16.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_16x16@2x.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_16x16@2x.png deleted file mode 100644 index 46e4a1d..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_256x256.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_256x256.png deleted file mode 100644 index f286841..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_256x256.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_256x256@2x.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_256x256@2x.png deleted file mode 100644 index f83821b..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_32x32.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_32x32.png deleted file mode 100644 index ea79217..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_32x32.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_32x32@2x.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_32x32@2x.png deleted file mode 100644 index be1a193..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_512x512.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_512x512.png deleted file mode 100644 index 7178d28..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_512x512.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-Default.iconset/icon_512x512@2x.png b/Icons/Exports/EmacsLG1-Default.iconset/icon_512x512@2x.png deleted file mode 100644 index c6e2a8b..0000000 Binary files a/Icons/Exports/EmacsLG1-Default.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG1-iOS-Dark-1024x1024@2x.png b/Icons/Exports/EmacsLG1-iOS-Dark-1024x1024@2x.png new file mode 100644 index 0000000..264306f Binary files /dev/null and b/Icons/Exports/EmacsLG1-iOS-Dark-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG1-iOS-Default-1024x1024@2x.png b/Icons/Exports/EmacsLG1-iOS-Default-1024x1024@2x.png new file mode 100644 index 0000000..33a0e09 Binary files /dev/null and b/Icons/Exports/EmacsLG1-iOS-Default-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG1-macOS-Dark-1024x1024@2x.png b/Icons/Exports/EmacsLG1-macOS-Dark-1024x1024@2x.png new file mode 100644 index 0000000..b5affdb Binary files /dev/null and b/Icons/Exports/EmacsLG1-macOS-Dark-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG1-macOS-Default-1024x1024@2x.png b/Icons/Exports/EmacsLG1-macOS-Default-1024x1024@2x.png new file mode 100644 index 0000000..3411752 Binary files /dev/null and b/Icons/Exports/EmacsLG1-macOS-Default-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_128x128.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_128x128.png deleted file mode 100644 index f5aaa7f..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_128x128.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_128x128@2x.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_128x128@2x.png deleted file mode 100644 index 1d87a68..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_16x16.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_16x16.png deleted file mode 100644 index c25398d..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_16x16.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_16x16@2x.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_16x16@2x.png deleted file mode 100644 index b320335..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_256x256.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_256x256.png deleted file mode 100644 index 2573792..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_256x256.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_256x256@2x.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_256x256@2x.png deleted file mode 100644 index 8e18db3..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_32x32.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_32x32.png deleted file mode 100644 index d246b5f..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_32x32.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_32x32@2x.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_32x32@2x.png deleted file mode 100644 index 28cb512..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_512x512.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_512x512.png deleted file mode 100644 index 5615912..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_512x512.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Dark.iconset/icon_512x512@2x.png b/Icons/Exports/EmacsLG2-Dark.iconset/icon_512x512@2x.png deleted file mode 100644 index 0f54998..0000000 Binary files a/Icons/Exports/EmacsLG2-Dark.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_128x128.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_128x128.png deleted file mode 100644 index e93a971..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_128x128.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_128x128@2x.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_128x128@2x.png deleted file mode 100644 index 98dd727..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_16x16.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_16x16.png deleted file mode 100644 index 1a94414..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_16x16.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_16x16@2x.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_16x16@2x.png deleted file mode 100644 index 0994bb7..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_256x256.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_256x256.png deleted file mode 100644 index e2a2622..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_256x256.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_256x256@2x.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_256x256@2x.png deleted file mode 100644 index ab2f790..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_32x32.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_32x32.png deleted file mode 100644 index 706055a..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_32x32.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_32x32@2x.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_32x32@2x.png deleted file mode 100644 index 1b509d0..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_512x512.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_512x512.png deleted file mode 100644 index dd7cb91..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_512x512.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-Default.iconset/icon_512x512@2x.png b/Icons/Exports/EmacsLG2-Default.iconset/icon_512x512@2x.png deleted file mode 100644 index 5b54995..0000000 Binary files a/Icons/Exports/EmacsLG2-Default.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG2-iOS-Dark-1024x1024@2x.png b/Icons/Exports/EmacsLG2-iOS-Dark-1024x1024@2x.png new file mode 100644 index 0000000..4d1acf1 Binary files /dev/null and b/Icons/Exports/EmacsLG2-iOS-Dark-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG2-iOS-Default-1024x1024@2x.png b/Icons/Exports/EmacsLG2-iOS-Default-1024x1024@2x.png new file mode 100644 index 0000000..364965d Binary files /dev/null and b/Icons/Exports/EmacsLG2-iOS-Default-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG2-macOS-Dark-1024x1024@2x.png b/Icons/Exports/EmacsLG2-macOS-Dark-1024x1024@2x.png new file mode 100644 index 0000000..c2c84e4 Binary files /dev/null and b/Icons/Exports/EmacsLG2-macOS-Dark-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG2-macOS-Default-1024x1024@2x.png b/Icons/Exports/EmacsLG2-macOS-Default-1024x1024@2x.png new file mode 100644 index 0000000..e9e980e Binary files /dev/null and b/Icons/Exports/EmacsLG2-macOS-Default-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_128x128.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_128x128.png deleted file mode 100644 index 9ce3ce3..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_128x128.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_128x128@2x.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_128x128@2x.png deleted file mode 100644 index 06ec3a1..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_16x16.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_16x16.png deleted file mode 100644 index 00e3a56..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_16x16.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_16x16@2x.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_16x16@2x.png deleted file mode 100644 index f2762a2..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_256x256.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_256x256.png deleted file mode 100644 index 5929728..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_256x256.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_256x256@2x.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_256x256@2x.png deleted file mode 100644 index b995687..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_32x32.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_32x32.png deleted file mode 100644 index dc10f9e..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_32x32.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_32x32@2x.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_32x32@2x.png deleted file mode 100644 index 1389a78..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_512x512.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_512x512.png deleted file mode 100644 index 492830c..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_512x512.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Dark.iconset/icon_512x512@2x.png b/Icons/Exports/EmacsLG3-Dark.iconset/icon_512x512@2x.png deleted file mode 100644 index aee587d..0000000 Binary files a/Icons/Exports/EmacsLG3-Dark.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_128x128.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_128x128.png deleted file mode 100644 index 3fe3fcd..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_128x128.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_128x128@2x.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_128x128@2x.png deleted file mode 100644 index acd2d04..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_128x128@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_16x16.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_16x16.png deleted file mode 100644 index 0885692..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_16x16.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_16x16@2x.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_16x16@2x.png deleted file mode 100644 index 3dc2b72..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_16x16@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_256x256.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_256x256.png deleted file mode 100644 index cbd2c16..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_256x256.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_256x256@2x.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_256x256@2x.png deleted file mode 100644 index 79b9f90..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_256x256@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_32x32.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_32x32.png deleted file mode 100644 index 8c1e17e..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_32x32.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_32x32@2x.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_32x32@2x.png deleted file mode 100644 index 014e192..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_32x32@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_512x512.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_512x512.png deleted file mode 100644 index 02ddc35..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_512x512.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-Default.iconset/icon_512x512@2x.png b/Icons/Exports/EmacsLG3-Default.iconset/icon_512x512@2x.png deleted file mode 100644 index a11ad92..0000000 Binary files a/Icons/Exports/EmacsLG3-Default.iconset/icon_512x512@2x.png and /dev/null differ diff --git a/Icons/Exports/EmacsLG3-iOS-Dark-1024x1024@2x.png b/Icons/Exports/EmacsLG3-iOS-Dark-1024x1024@2x.png new file mode 100644 index 0000000..8cde22e Binary files /dev/null and b/Icons/Exports/EmacsLG3-iOS-Dark-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG3-iOS-Default-1024x1024@2x.png b/Icons/Exports/EmacsLG3-iOS-Default-1024x1024@2x.png new file mode 100644 index 0000000..bf3fca5 Binary files /dev/null and b/Icons/Exports/EmacsLG3-iOS-Default-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG3-macOS-Dark-1024x1024@2x.png b/Icons/Exports/EmacsLG3-macOS-Dark-1024x1024@2x.png new file mode 100644 index 0000000..18d5429 Binary files /dev/null and b/Icons/Exports/EmacsLG3-macOS-Dark-1024x1024@2x.png differ diff --git a/Icons/Exports/EmacsLG3-macOS-Default-1024x1024@2x.png b/Icons/Exports/EmacsLG3-macOS-Default-1024x1024@2x.png new file mode 100644 index 0000000..48d58ba Binary files /dev/null and b/Icons/Exports/EmacsLG3-macOS-Default-1024x1024@2x.png differ diff --git a/Icons/Exports/README.md b/Icons/Exports/README.md index 9e13c83..c28a005 100644 --- a/Icons/Exports/README.md +++ b/Icons/Exports/README.md @@ -1,27 +1,11 @@ -# EmacsLG Legacy *.icns Exports +# EmacsLG PNG Exports -We have a `EmacsLG-Iconsets.afdesign` Affinity Designer document which contains -high-res versions of all icon variants, and export configurations to export all -icons at all required sizes to relevant `*.iconset` folders. +PNG images here are exported from Icon Composer at 1024x1024@2x, meaning they're +actually 2048x2048 at 144 DPI. -I picked Affinity Designer cause I'm familiar with its export features. +The `*-iOS-*` files are confusingly, for iOS and macOS Liquid Glass icon +creation. -## Exporting *.iconset directories - -Within Affinity Designer, simply switch to the Export persona, and click the -"Export Slices" button. This will create all `*.iconset` directories with all -resolutions of images. - -## Create *.icns files - -The `*.icns` icon files are creates from the `*.iconset` directories using the -`iconutil` CLI tool: - -```bash -iconutil -c icns 'EmacsLG1-Default.iconset' -iconutil -c icns 'EmacsLG1-Dark.iconset' -iconutil -c icns 'EmacsLG2-Default.iconset' -iconutil -c icns 'EmacsLG2-Dark.iconset' -iconutil -c icns 'EmacsLG3-Default.iconset' -iconutil -c icns 'EmacsLG3-Dark.iconset' -``` +The `*-macOS-*` files are exported with Icon Composers' export platform set to +"macOS pre-Tahoe". This effectively adds a transparent padding around the icon, +so they become equally sized to Apple's own icons. diff --git a/Makefile b/Makefile index c14ef7e..8aa9731 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,22 @@ -# Output directory RESOURCES_DIR := Resources +# Icon files and names ICON_FILES := $(shell find Icons/ -depth 1 -name '*.icon') +ICON_NAMES := $(basename $(notdir $(ICON_FILES))) ICON_SOURCES := $(shell find $(ICON_FILES) -type f) +# *.icns files +ICNS_VARIANTS := \ + Default \ + Dark +ICNS_FILES := $(foreach \ + icon,$(ICON_NAMES), \ + $(foreach variant,$(ICNS_VARIANTS), \ + $(RESOURCES_DIR)/$(icon)-$(variant).icns \ + )) + .PHONY: all -all: $(RESOURCES_DIR)/Assets.car +all: $(RESOURCES_DIR)/Assets.car $(ICNS_FILES) $(RESOURCES_DIR)/Assets.car: $(ICON_FILES) $(ICON_SOURCES) mkdir -p "$(RESOURCES_DIR)" @@ -22,6 +33,16 @@ $(RESOURCES_DIR)/Assets.car: $(ICON_FILES) $(ICON_SOURCES) --platform macosx \ --minimum-deployment-target 11.0 +# *.icns files generation rule +define ICNS_RULE +$(RESOURCES_DIR)/%-$(1).icns: Icons/Exports/%-macOS-$(1)-1024x1024@2x.png + @mkdir -p $(RESOURCES_DIR) + bin/png2icns "$$<" "$$@" +endef + +$(foreach variant,$(ICNS_VARIANTS),$(eval $(call ICNS_RULE,$(variant)))) + .PHONY: clean clean: find "$(RESOURCES_DIR)" -type f -name 'Assets.car' -delete + find "$(RESOURCES_DIR)" -type f -name '*.icns' -delete diff --git a/Resources/EmacsLG1-Dark.icns b/Resources/EmacsLG1-Dark.icns index 766b4a5..3e93b4e 100644 Binary files a/Resources/EmacsLG1-Dark.icns and b/Resources/EmacsLG1-Dark.icns differ diff --git a/Resources/EmacsLG1-Default.icns b/Resources/EmacsLG1-Default.icns index 92e4a73..ac6b77b 100644 Binary files a/Resources/EmacsLG1-Default.icns and b/Resources/EmacsLG1-Default.icns differ diff --git a/Resources/EmacsLG2-Dark.icns b/Resources/EmacsLG2-Dark.icns index c72ab06..d8a1b8e 100644 Binary files a/Resources/EmacsLG2-Dark.icns and b/Resources/EmacsLG2-Dark.icns differ diff --git a/Resources/EmacsLG2-Default.icns b/Resources/EmacsLG2-Default.icns index 2952b9d..cd04c59 100644 Binary files a/Resources/EmacsLG2-Default.icns and b/Resources/EmacsLG2-Default.icns differ diff --git a/Resources/EmacsLG3-Dark.icns b/Resources/EmacsLG3-Dark.icns index dc5e5fa..0f38b10 100644 Binary files a/Resources/EmacsLG3-Dark.icns and b/Resources/EmacsLG3-Dark.icns differ diff --git a/Resources/EmacsLG3-Default.icns b/Resources/EmacsLG3-Default.icns index 708c34e..1a49e18 100644 Binary files a/Resources/EmacsLG3-Default.icns and b/Resources/EmacsLG3-Default.icns differ diff --git a/bin/png2icns b/bin/png2icns new file mode 100755 index 0000000..8215e13 --- /dev/null +++ b/bin/png2icns @@ -0,0 +1,177 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + echo "Usage: $(basename "$0") [output.icns]" >&2 +} + +gen-png() { + local src="$1" + local px="$2" + local dpi="$3" + local out="$4" + + # Resize longest side to , then pad to a square x with transparency. + local tmp_resized + tmp_resized="${out}.tmp.png" + + # Scale preserving aspect ratio; longest side becomes . + sips -Z "$px" "$src" --out "$tmp_resized" > /dev/null + + # Pad to exact square dimensions centered on transparent background. + sips --padToHeightWidth "$px" "$px" \ + "$tmp_resized" --out "$out" > /dev/null + + rm -f "$tmp_resized" || true + + # Set DPI metadata. + sips -s dpiHeight "$dpi" -s dpiWidth "$dpi" "$out" > /dev/null +} + +get-image-max-dim() { + local src="$1" + local w h + + # Capture width/height; avoid exiting on failure due to set -e/pipefail. + w=$(sips -g pixelWidth "$src" 2> /dev/null | + awk '/pixelWidth/ {print $2}') || true + h=$(sips -g pixelHeight "$src" 2> /dev/null | + awk '/pixelHeight/ {print $2}') || true + + if [[ -z "$w" || -z "$h" ]]; then + echo "Failed to read image dimensions with sips: $src" >&2 + return 1 + fi + + if ((w > h)); then + echo "$w" + else + echo "$h" + fi +} + +verify-png() { + local src="$1" + local fmt + fmt=$(sips -g format "$src" 2> /dev/null | + awk '/format/ {print tolower($2)}') || true + if [[ -z "$fmt" ]]; then + echo "Unable to determine image format with sips: $src" >&2 + return 1 + fi + if [[ "$fmt" != "png" ]]; then + echo "Input must be a PNG image: $src" >&2 + return 1 + fi +} + +make-iconset() { + local src="$1" + local dest_dir="$2" + + mkdir -p "$dest_dir" + + # Sizes to generate (@1x). @2x files are double the pixels. + local sizes=(16 32 128 256 512) + + # Determine maximum source dimension to avoid upscaling. + local src_max + if ! src_max=$(get-image-max-dim "$src"); then + return 1 + fi + + local generated + generated=0 + + for sz in "${sizes[@]}"; do + # @1x + local out1="${dest_dir}/icon_${sz}x${sz}.png" + if ((sz <= src_max)); then + gen-png "$src" "$sz" 72 "$out1" + generated=$((generated + 1)) + fi + + # @2x (double pixels, higher DPI) + local dsz=$((sz * 2)) + local out2="${dest_dir}/icon_${sz}x${sz}@2x.png" + if ((dsz <= src_max)); then + gen-png "$src" "$dsz" 144 "$out2" + generated=$((generated + 1)) + fi + done + + if ((generated == 0)); then + echo "Source image too small; no icon sizes generated: $src" >&2 + return 1 + fi +} + +cleanup() { + local path="$1" + + if [[ -z "$path" || ! -d "$path" ]]; then + return 0 + fi + + # Remove generated PNGs inside the temp directory + find "$path" -type f -name '*.png' -delete 2> /dev/null || true + + # Remove generated `*.iconset` inside the temp directory + find "$path" -type d -name '*.iconset' -delete 2> /dev/null || true + + # Attempt to remove the temp directory if now empty + rmdir "$path" 2> /dev/null || true +} + +main() { + if [[ $# -lt 1 || $# -gt 2 ]]; then + usage + exit 1 + fi + + local src="$1" + local out="${2:-${src%.*}.icns}" + + if [[ ! -f "$src" ]]; then + echo "Source file not found: $src" >&2 + exit 1 + fi + + if ! command -v sips > /dev/null 2>&1; then + echo "This script requires 'sips' (macOS) but it wasn't found." >&2 + exit 1 + fi + + if ! command -v iconutil > /dev/null 2>&1; then + echo "This script requires 'iconutil' (macOS) but it wasn't found." >&2 + exit 1 + fi + + local outdir + outdir="$(dirname "$out")" + mkdir -p "$outdir" + + # Create a temporary working directory + tmp_root="$(mktemp -d 2> /dev/null || mktemp -d -t png2icns)" + trap 'cleanup "$tmp_root"' EXIT + + # Verify input is PNG; we do not accept other formats. + if ! verify-png "$src"; then + exit 1 + fi + + local iconset_dir + iconset_dir="${tmp_root}/icon.iconset" + + make-iconset "$src" "$iconset_dir" + + # Build `.icns` from the generated iconset + if ! iconutil -c icns -o "$out" "$iconset_dir" 2> /dev/null; then + echo "Failed to create .icns with iconutil" >&2 + exit 1 + fi + + echo "Done. ICNS written to: $out" +} + +main "$@"