diff --git a/.prettierignore b/.prettierignore index 490538680..f131a5edc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,6 +11,9 @@ zig-out/ # macos is managed by XCode GUI macos/ +# produced by Icon Composer on macOS +images/Ghostty.icon/icon.json + # website dev run website/.next diff --git a/dist/macos/Ghostty.icns b/dist/macos/Ghostty.icns deleted file mode 100644 index 44a44711a..000000000 Binary files a/dist/macos/Ghostty.icns and /dev/null differ diff --git a/dist/macos/Info.plist b/dist/macos/Info.plist deleted file mode 100644 index 8283cc529..000000000 --- a/dist/macos/Info.plist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - CFBundleExecutable - ghostty - CFBundleIdentifier - com.mitchellh.ghostty - CFBundleName - Ghostty - CFBundleDisplayName - Ghostty - CFBundleIconFile - Ghostty.icns - - - diff --git a/images/Ghostty.icon/Assets/Ghostty.png b/images/Ghostty.icon/Assets/Ghostty.png new file mode 100644 index 000000000..49795c006 Binary files /dev/null and b/images/Ghostty.icon/Assets/Ghostty.png differ diff --git a/images/Ghostty.icon/Assets/Inner Bevel 6px.png b/images/Ghostty.icon/Assets/Inner Bevel 6px.png new file mode 100644 index 000000000..678193779 Binary files /dev/null and b/images/Ghostty.icon/Assets/Inner Bevel 6px.png differ diff --git a/images/Ghostty.icon/Assets/Screen Effects.png b/images/Ghostty.icon/Assets/Screen Effects.png new file mode 100644 index 000000000..0af7d3338 Binary files /dev/null and b/images/Ghostty.icon/Assets/Screen Effects.png differ diff --git a/images/Ghostty.icon/Assets/Screen.png b/images/Ghostty.icon/Assets/Screen.png new file mode 100644 index 000000000..2023b6ffa Binary files /dev/null and b/images/Ghostty.icon/Assets/Screen.png differ diff --git a/images/Ghostty.icon/Assets/gloss.png b/images/Ghostty.icon/Assets/gloss.png new file mode 100644 index 000000000..f11196010 Binary files /dev/null and b/images/Ghostty.icon/Assets/gloss.png differ diff --git a/images/Ghostty.icon/icon.json b/images/Ghostty.icon/icon.json new file mode 100644 index 000000000..b29c9d81f --- /dev/null +++ b/images/Ghostty.icon/icon.json @@ -0,0 +1,170 @@ +{ + "color-space-for-untagged-svg-colors" : "display-p3", + "fill" : { + "linear-gradient" : [ + "display-p3:0.87945,0.87945,0.87945,1.00000", + "display-p3:0.40000,0.40000,0.40392,1.00000" + ] + }, + "groups" : [ + { + "blend-mode" : "normal", + "layers" : [ + { + "blend-mode" : "overlay", + "fill" : { + "linear-gradient" : [ + "srgb:1.00000,1.00000,1.00000,1.00000", + "srgb:0.00000,0.00000,0.00000,1.00000" + ] + }, + "hidden" : false, + "image-name" : "gloss.png", + "name" : "GlossTop", + "opacity" : 0.25, + "position" : { + "scale" : 0.98, + "translation-in-points" : [ + 0.90625, + -236.4609375 + ] + } + }, + { + "blend-mode" : "normal", + "fill" : "automatic", + "hidden" : false, + "image-name" : "gloss.png", + "name" : "gloss", + "position" : { + "scale" : 0.98, + "translation-in-points" : [ + 0.90625, + -236.4609375 + ] + } + } + ], + "lighting" : "individual", + "name" : "Group 4", + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "translucency" : { + "enabled" : true, + "value" : 0.5 + } + }, + { + "blend-mode" : "overlay", + "layers" : [ + { + "blend-mode" : "overlay", + "fill" : "automatic", + "glass" : false, + "hidden" : false, + "image-name" : "Screen Effects.png", + "name" : "Screen Effects" + }, + { + "blend-mode" : "overlay", + "fill" : "automatic", + "glass" : true, + "hidden" : false, + "image-name" : "Screen Effects.png", + "name" : "Screen Effects" + } + ], + "lighting" : "individual", + "name" : "Group 3", + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "translucency" : { + "enabled" : false, + "value" : 0.5 + } + }, + { + "blur-material" : null, + "layers" : [ + { + "blend-mode" : "normal", + "fill" : "automatic", + "hidden" : false, + "image-name" : "Ghostty.png", + "name" : "Ghostty", + "position" : { + "scale" : 1, + "translation-in-points" : [ + -185.015625, + -143.8359375 + ] + } + }, + { + "blend-mode" : "normal", + "fill" : { + "solid" : "extended-srgb:0.00000,0.47843,1.00000,1.00000" + }, + "glass" : true, + "hidden" : false, + "image-name" : "Ghostty.png", + "name" : "GhosttyBlur", + "position" : { + "scale" : 1, + "translation-in-points" : [ + -186.59375, + -143.8359375 + ] + } + }, + { + "hidden" : false, + "image-name" : "Screen.png", + "name" : "Screen" + } + ], + "lighting" : "individual", + "name" : "Group 2", + "shadow" : { + "kind" : "neutral", + "opacity" : 0.5 + }, + "translucency" : { + "enabled" : false, + "value" : 0.5 + } + }, + { + "blend-mode" : "normal", + "blur-material" : null, + "hidden" : false, + "layers" : [ + { + "image-name" : "Inner Bevel 6px.png", + "name" : "Inner Bevel 6px" + } + ], + "lighting" : "individual", + "name" : "Group 1", + "shadow" : { + "kind" : "layer-color", + "opacity" : 0.2 + }, + "specular" : false, + "translucency" : { + "enabled" : false, + "value" : 0.5 + } + } + ], + "supported-platforms" : { + "circles" : [ + "watchOS" + ], + "squares" : "shared" + } +} \ No newline at end of file diff --git a/images/icons/icon_1024.png b/images/icons/icon_1024.png index a0b716c87..22361edcb 100644 Binary files a/images/icons/icon_1024.png and b/images/icons/icon_1024.png differ diff --git a/images/icons/icon_1024@2x.png b/images/icons/icon_1024@2x.png new file mode 100644 index 000000000..22361edcb Binary files /dev/null and b/images/icons/icon_1024@2x.png differ diff --git a/images/icons/icon_128.png b/images/icons/icon_128.png index bad0eb891..317ad9f0f 100644 Binary files a/images/icons/icon_128.png and b/images/icons/icon_128.png differ diff --git a/images/icons/icon_256.png b/images/icons/icon_256.png index 803224416..9988ac11e 100644 Binary files a/images/icons/icon_256.png and b/images/icons/icon_256.png differ diff --git a/images/icons/icon_256@2x.png b/images/icons/icon_256@2x.png index b51b8d7dc..9988ac11e 100644 Binary files a/images/icons/icon_256@2x.png and b/images/icons/icon_256@2x.png differ diff --git a/images/icons/icon_512.png b/images/icons/icon_512.png index b51b8d7dc..759511f68 100644 Binary files a/images/icons/icon_512.png and b/images/icons/icon_512.png differ diff --git a/images/icons/icon_512@2x.png b/images/icons/icon_512@2x.png new file mode 100644 index 000000000..759511f68 Binary files /dev/null and b/images/icons/icon_512@2x.png differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9c6bc2e81..000000000 --- a/macos/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "images" : [ - { - "filename" : "macOS-AppIcon-1024px.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "filename" : "macOS-AppIcon-16px-16pt@1x.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "filename" : "macOS-AppIcon-32px-16pt@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "filename" : "macOS-AppIcon-32px-32pt@1x.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "filename" : "macOS-AppIcon-64px-32pt@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "filename" : "macOS-AppIcon-128px-128pt@1x.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "filename" : "macOS-AppIcon-256px-128pt@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "filename" : "macOS-AppIcon-256px-128pt@2x 1.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "filename" : "macOS-AppIcon-512px-256pt@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "filename" : "macOS-AppIcon-512px.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "filename" : "macOS-AppIcon-1024px 1.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-1024px 1.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-1024px 1.png deleted file mode 100644 index a0b716c87..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-1024px 1.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-1024px.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-1024px.png deleted file mode 100644 index a0b716c87..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-1024px.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-128px-128pt@1x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-128px-128pt@1x.png deleted file mode 100644 index bad0eb891..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-128px-128pt@1x.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-16px-16pt@1x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-16px-16pt@1x.png deleted file mode 100644 index cacff7a54..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-16px-16pt@1x.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-256px-128pt@2x 1.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-256px-128pt@2x 1.png deleted file mode 100644 index 46c3f7050..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-256px-128pt@2x 1.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-256px-128pt@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-256px-128pt@2x.png deleted file mode 100644 index 46c3f7050..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-256px-128pt@2x.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-32px-16pt@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-32px-16pt@2x.png deleted file mode 100644 index c8011a605..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-32px-16pt@2x.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-32px-32pt@1x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-32px-32pt@1x.png deleted file mode 100644 index 5e68d5fd0..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-32px-32pt@1x.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px-256pt@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px-256pt@2x.png deleted file mode 100644 index b51b8d7dc..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px-256pt@2x.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px.png deleted file mode 100644 index f302b40bb..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px.png and /dev/null differ diff --git a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-64px-32pt@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-64px-32pt@2x.png deleted file mode 100644 index e394a5170..000000000 Binary files a/macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-64px-32pt@2x.png and /dev/null differ diff --git a/macos/Ghostty.xcodeproj/project.pbxproj b/macos/Ghostty.xcodeproj/project.pbxproj index 416d8b106..cf806c7bd 100644 --- a/macos/Ghostty.xcodeproj/project.pbxproj +++ b/macos/Ghostty.xcodeproj/project.pbxproj @@ -60,6 +60,8 @@ A54D786C2CA7978E001B19B1 /* BaseTerminalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */; }; A553F4062E05E93000257779 /* Optional+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51194122E05D003007258CC /* Optional+Extension.swift */; }; A553F4072E05E93D00257779 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A586366A2DF0A98900E04A10 /* Array+Extension.swift */; }; + A553F4132E06EB1600257779 /* Ghostty.icon in Resources */ = {isa = PBXBuildFile; fileRef = A553F4122E06EB1600257779 /* Ghostty.icon */; }; + A553F4142E06EB1600257779 /* Ghostty.icon in Resources */ = {isa = PBXBuildFile; fileRef = A553F4122E06EB1600257779 /* Ghostty.icon */; }; A5593FDF2DF8D57C00B47B10 /* TerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5593FDE2DF8D57100B47B10 /* TerminalWindow.swift */; }; A5593FE12DF8D74000B47B10 /* HiddenTitlebarTerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5593FE02DF8D73400B47B10 /* HiddenTitlebarTerminalWindow.swift */; }; A5593FE32DF8D78600B47B10 /* TerminalHiddenTitlebar.xib in Resources */ = {isa = PBXBuildFile; fileRef = A5593FE22DF8D78600B47B10 /* TerminalHiddenTitlebar.xib */; }; @@ -193,6 +195,7 @@ A54B0CEC2D0CFB7300CBEFF8 /* ColorizedGhosttyIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorizedGhosttyIcon.swift; sourceTree = ""; }; A54B0CEE2D0D2E2400CBEFF8 /* ColorizedGhosttyIconImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorizedGhosttyIconImage.swift; sourceTree = ""; }; A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTerminalController.swift; sourceTree = ""; }; + A553F4122E06EB1600257779 /* Ghostty.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; name = Ghostty.icon; path = ../images/Ghostty.icon; sourceTree = SOURCE_ROOT; }; A5593FDE2DF8D57100B47B10 /* TerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalWindow.swift; sourceTree = ""; }; A5593FE02DF8D73400B47B10 /* HiddenTitlebarTerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenTitlebarTerminalWindow.swift; sourceTree = ""; }; A5593FE22DF8D78600B47B10 /* TerminalHiddenTitlebar.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TerminalHiddenTitlebar.xib; sourceTree = ""; }; @@ -576,6 +579,7 @@ children = ( A571AB1C2A206FC600248498 /* Ghostty-Info.plist */, A5B30538299BEAAB0047F10C /* Assets.xcassets */, + A553F4122E06EB1600257779 /* Ghostty.icon */, A5B3053D299BEAAB0047F10C /* Ghostty.entitlements */, A51BFC282B30F26D00E92F16 /* GhosttyDebug.entitlements */, 3B39CAA42B33949B00DABEB8 /* GhosttyReleaseLocal.entitlements */, @@ -748,6 +752,7 @@ buildActionMask = 2147483647; files = ( FC9ABA9C2D0F53F80020D4C8 /* bash-completion in Resources */, + A553F4142E06EB1600257779 /* Ghostty.icon in Resources */, A5593FE52DF8DE3000B47B10 /* TerminalTabsTitlebarVentura.xib in Resources */, 29C15B1D2CDC3B2900520DD4 /* bat in Resources */, A586167C2B7703CC009BDB1D /* fish in Resources */, @@ -776,6 +781,7 @@ buildActionMask = 2147483647; files = ( A53D0C952B53B4D800305CE6 /* Assets.xcassets in Resources */, + A553F4132E06EB1600257779 /* Ghostty.icon in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -970,7 +976,7 @@ 3B39CAA32B33946300DABEB8 /* ReleaseLocal */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1140,7 +1146,7 @@ A5B30541299BEAAB0047F10C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1194,7 +1200,7 @@ A5B30542299BEAAB0047F10C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1247,7 +1253,7 @@ A5D449A82B53AE7B000F5B83 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; @@ -1286,7 +1292,7 @@ A5D449A92B53AE7B000F5B83 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; @@ -1325,7 +1331,7 @@ A5D449AA2B53AE7B000F5B83 /* ReleaseLocal */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; diff --git a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift b/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift index 4d522067e..8a461699f 100644 --- a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift +++ b/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift @@ -4,12 +4,26 @@ extension View { /// Returns the ghostty icon to use for views. func ghosttyIconImage() -> Image { #if os(macOS) + // If we have a specific icon set, then use that if let delegate = NSApplication.shared.delegate as? AppDelegate, let nsImage = delegate.appIcon { return Image(nsImage: nsImage) } + + // Grab the icon from the running application. This is the best way + // I've found so far to get the proper icon for our current icon + // tinting and so on with macOS Tahoe + if let icon = NSRunningApplication.current.icon { + return Image(nsImage: icon) + } + + // Get our defined application icon image. + if let nsImage = NSApp.applicationIconImage { + return Image(nsImage: nsImage) + } #endif + // Fall back to a static representation return Image("AppIconImage") } }