feat: add appimage support for linux

This commit is contained in:
Sean Molenaar 2025-07-30 22:40:29 +02:00
parent ff4ee5d0b5
commit caba75ac25
7 changed files with 53 additions and 0 deletions

View File

@ -2,6 +2,7 @@
# frozen_string_literal: true
require "cask/artifact/app"
require "cask/artifact/appimage"
require "cask/artifact/artifact" # generic 'artifact' stanza
require "cask/artifact/audio_unit_plugin"
require "cask/artifact/binary"

View File

@ -0,0 +1,15 @@
# typed: strict
# frozen_string_literal: true
require "cask/artifact/symlinked"
module Cask
module Artifact
class AppImage < Symlinked
sig { params(target: T.any(String, Pathname)).returns(Pathname) }
def resolve_target(target)
config.appimagedir/target
end
end
end
end

View File

@ -15,6 +15,7 @@ module Cask
DEFAULT_DIRS = T.let(
{
appdir: "/Applications",
appimagedir: "~/Applications",
keyboard_layoutdir: "/Library/Keyboard Layouts",
colorpickerdir: "~/Library/ColorPickers",
prefpanedir: "~/Library/PreferencePanes",
@ -47,6 +48,7 @@ module Cask
args = T.unsafe(args)
new(explicit: {
appdir: args.appdir,
appimagedir: args.appimagedir,
keyboard_layoutdir: args.keyboard_layoutdir,
colorpickerdir: args.colorpickerdir,
prefpanedir: args.prefpanedir,

View File

@ -34,6 +34,7 @@ module Cask
ORDINARY_ARTIFACT_CLASSES = [
Artifact::Installer,
Artifact::App,
Artifact::AppImage,
Artifact::Artifact,
Artifact::AudioUnitPlugin,
Artifact::Binary,

View File

@ -63,6 +63,10 @@ module Homebrew
description: "Target location for Applications " \
"(default: `#{Cask::Config::DEFAULT_DIRS[:appdir]}`).",
}],
[:flag, "--appimagedir=", {
description: "Target location for AppImages " \
"(default: `#{Cask::Config::DEFAULT_DIRS[:appimagedir]}`).",
}],
[:flag, "--keyboard-layoutdir=", {
description: "Target location for Keyboard Layouts " \
"(default: `#{Cask::Config::DEFAULT_DIRS[:keyboard_layoutdir]}`).",

View File

@ -2,3 +2,4 @@
# frozen_string_literal: true
require "extend/os/linux/cask/installer" if OS.linux?
require "extend/os/mac/cask/installer" if OS.mac?

View File

@ -0,0 +1,29 @@
# typed: strict
# frozen_string_literal: true
module OS
module Mac
module Cask
module Installer
extend T::Helpers
requires_ancestor { ::Cask::Installer }
MAC_INVALID_ARTIFACTS = [
::Cask::Artifact::AppImage,
].freeze
sig { void }
def check_stanza_os_requirements
return unless artifacts.any? do |artifact|
MAC_INVALID_ARTIFACTS.include?(artifact.class)
end
raise ::Cask::CaskError, "Linux is required for this software."
end
end
end
end
end
Cask::Installer.prepend(OS::Mac::Cask::Installer)