Skip to content

Commit caba75a

Browse files
committed
feat: add appimage support for linux
1 parent ff4ee5d commit caba75a

File tree

7 files changed

+53
-0
lines changed

7 files changed

+53
-0
lines changed

Library/Homebrew/cask/artifact.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# frozen_string_literal: true
33

44
require "cask/artifact/app"
5+
require "cask/artifact/appimage"
56
require "cask/artifact/artifact" # generic 'artifact' stanza
67
require "cask/artifact/audio_unit_plugin"
78
require "cask/artifact/binary"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# typed: strict
2+
# frozen_string_literal: true
3+
4+
require "cask/artifact/symlinked"
5+
6+
module Cask
7+
module Artifact
8+
class AppImage < Symlinked
9+
sig { params(target: T.any(String, Pathname)).returns(Pathname) }
10+
def resolve_target(target)
11+
config.appimagedir/target
12+
end
13+
end
14+
end
15+
end

Library/Homebrew/cask/config.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class Config
1515
DEFAULT_DIRS = T.let(
1616
{
1717
appdir: "/Applications",
18+
appimagedir: "~/Applications",
1819
keyboard_layoutdir: "/Library/Keyboard Layouts",
1920
colorpickerdir: "~/Library/ColorPickers",
2021
prefpanedir: "~/Library/PreferencePanes",
@@ -47,6 +48,7 @@ def self.from_args(args)
4748
args = T.unsafe(args)
4849
new(explicit: {
4950
appdir: args.appdir,
51+
appimagedir: args.appimagedir,
5052
keyboard_layoutdir: args.keyboard_layoutdir,
5153
colorpickerdir: args.colorpickerdir,
5254
prefpanedir: args.prefpanedir,

Library/Homebrew/cask/dsl.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class DSL
3434
ORDINARY_ARTIFACT_CLASSES = [
3535
Artifact::Installer,
3636
Artifact::App,
37+
Artifact::AppImage,
3738
Artifact::Artifact,
3839
Artifact::AudioUnitPlugin,
3940
Artifact::Binary,

Library/Homebrew/cli/parser.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ def self.global_cask_options
6363
description: "Target location for Applications " \
6464
"(default: `#{Cask::Config::DEFAULT_DIRS[:appdir]}`).",
6565
}],
66+
[:flag, "--appimagedir=", {
67+
description: "Target location for AppImages " \
68+
"(default: `#{Cask::Config::DEFAULT_DIRS[:appimagedir]}`).",
69+
}],
6670
[:flag, "--keyboard-layoutdir=", {
6771
description: "Target location for Keyboard Layouts " \
6872
"(default: `#{Cask::Config::DEFAULT_DIRS[:keyboard_layoutdir]}`).",

Library/Homebrew/extend/os/cask/installer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
# frozen_string_literal: true
33

44
require "extend/os/linux/cask/installer" if OS.linux?
5+
require "extend/os/mac/cask/installer" if OS.mac?
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# typed: strict
2+
# frozen_string_literal: true
3+
4+
module OS
5+
module Mac
6+
module Cask
7+
module Installer
8+
extend T::Helpers
9+
10+
requires_ancestor { ::Cask::Installer }
11+
12+
MAC_INVALID_ARTIFACTS = [
13+
::Cask::Artifact::AppImage,
14+
].freeze
15+
16+
sig { void }
17+
def check_stanza_os_requirements
18+
return unless artifacts.any? do |artifact|
19+
MAC_INVALID_ARTIFACTS.include?(artifact.class)
20+
end
21+
22+
raise ::Cask::CaskError, "Linux is required for this software."
23+
end
24+
end
25+
end
26+
end
27+
end
28+
29+
Cask::Installer.prepend(OS::Mac::Cask::Installer)

0 commit comments

Comments
 (0)