From 1718bde4209e79bf01696b72cd1ed6678a1a50b4 Mon Sep 17 00:00:00 2001 From: Charles Vien Date: Tue, 14 Apr 2026 21:23:25 -0700 Subject: [PATCH 1/2] Implement a background to the installer dmg --- apps/code/build/dmg-background.png | Bin 0 -> 9720 bytes apps/code/forge.config.ts | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 apps/code/build/dmg-background.png diff --git a/apps/code/build/dmg-background.png b/apps/code/build/dmg-background.png new file mode 100644 index 0000000000000000000000000000000000000000..895453103121b6deac6e228ba69e714903658ff8 GIT binary patch literal 9720 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 VHvVkY-uaU0oVKA>zJ}ec{{gfS0CoTX literal 0 HcmV?d00001 diff --git a/apps/code/forge.config.ts b/apps/code/forge.config.ts index 0506ebe5b..287fa28ef 100644 --- a/apps/code/forge.config.ts +++ b/apps/code/forge.config.ts @@ -173,6 +173,12 @@ const config: ForgeConfig = { new MakerDMG({ icon: "./build/app-icon.icns", format: "ULFO", + background: "./build/dmg-background.png", + iconSize: 80, + contents: (opts) => [ + { x: 135, y: 225, type: "file", path: opts.appPath }, + { x: 405, y: 225, type: "link", path: "/Applications" }, + ], ...(shouldSignMacApp && appleCodesignIdentity ? { "code-sign": { From beb1f6a190d60371be4f5b64c5758292f068ce27 Mon Sep 17 00:00:00 2001 From: Charles Vien Date: Wed, 15 Apr 2026 14:44:36 -0700 Subject: [PATCH 2/2] Set explicit DMG window size to match background --- apps/code/forge.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/code/forge.config.ts b/apps/code/forge.config.ts index 287fa28ef..ea6f4c240 100644 --- a/apps/code/forge.config.ts +++ b/apps/code/forge.config.ts @@ -175,6 +175,7 @@ const config: ForgeConfig = { format: "ULFO", background: "./build/dmg-background.png", iconSize: 80, + window: { size: { width: 540, height: 380 } }, contents: (opts) => [ { x: 135, y: 225, type: "file", path: opts.appPath }, { x: 405, y: 225, type: "link", path: "/Applications" },