hackmac 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -0
- data/VERSION +1 -1
- data/bin/efi +70 -67
- data/hackmac.gemspec +9 -5
- data/lib/hackmac/config.rb +49 -0
- data/lib/hackmac/kext.rb +30 -20
- data/lib/hackmac/kext_source.rb +48 -0
- data/lib/hackmac/plist.rb +9 -0
- data/lib/hackmac/version.rb +1 -1
- data/lib/hackmac.rb +2 -0
- metadata +34 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 770a49155c7dd33375a43996b62f7e594b6d18f0e9fba87b8bfd6124bcc98d5f
|
4
|
+
data.tar.gz: 9c4d786f6df212bc390cfe64caae581da4833dfe161c48fcee0aeccf435ffd5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e5ab0f0d08aa06c4854208a53961b11d7f8ef8d5478168da7799d4b682c3ec2a785816bd20744f5d0d6f3ef6f34071882dfea6a4ac521558c6d4f94db20c4c4
|
7
|
+
data.tar.gz: a62c1e3e3ebbd650a5904cbcd7d4f54d248de162415aedbe8fdc36ec66b874525f98b5af5b841638c0c0728176d27352496ee0e8f57f847c84e6ff40342f9782
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/bin/efi
CHANGED
@@ -6,6 +6,7 @@ require 'term/ansicolor'
|
|
6
6
|
class String
|
7
7
|
include Term::ANSIColor
|
8
8
|
end
|
9
|
+
require 'tabulo'
|
9
10
|
|
10
11
|
def x(cmd, verbose: true)
|
11
12
|
prompt = cmd =~ /\A\s*sudo/ ? ?# : ?$
|
@@ -31,27 +32,25 @@ def clone(from:, to:)
|
|
31
32
|
end
|
32
33
|
x %{sudo mkdir -v "/Volumes/#{from}"}
|
33
34
|
x %{sudo mkdir -v "/Volumes/#{to}"}
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
exit 1
|
42
|
-
end
|
43
|
-
x %{rsync -av --exclude ".*" --delete "/Volumes/#{from}/" "/Volumes/#{to}/"}
|
44
|
-
ensure
|
45
|
-
x %{sudo diskutil unmount "#{from}"}
|
46
|
-
x %{sudo diskutil unmount "#{to}"}
|
35
|
+
x %{sudo diskutil mount -mountPoint "/Volumes/#{from}" "#{from}"}
|
36
|
+
x %{sudo diskutil mount -mountPoint "/Volumes/#{to}" "#{to}"}
|
37
|
+
x %{rsync -nav --exclude ".*" --delete "/Volumes/#{from}/" "/Volumes/#{to}/"}
|
38
|
+
print "This will be copied/deleted. Really do it? (y/n) ".bold.yellow
|
39
|
+
if gets !~ /\Ay/i
|
40
|
+
puts " *** Interrupted.".bold.yellow
|
41
|
+
exit 1
|
47
42
|
end
|
43
|
+
x %{rsync -av --exclude ".*" --delete "/Volumes/#{from}/" "/Volumes/#{to}/"}
|
48
44
|
end
|
49
45
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
46
|
+
def boot_dev
|
47
|
+
unless @boot_dev
|
48
|
+
value = x(%{bdmesg}, verbose: false).lines.
|
49
|
+
find { |l| l =~ /SelfDevicePath=(.*)\r/ and break $1 }
|
50
|
+
uuid = value.split('\\').last[/(?:<?GPT,)([\h-]+)/, 1] or exit 1
|
51
|
+
@boot_dev = x(%{partutil --search-uuid #{uuid}}).chomp
|
52
|
+
end
|
53
|
+
@boot_dev
|
55
54
|
end
|
56
55
|
|
57
56
|
def usage
|
@@ -85,18 +84,37 @@ def usage
|
|
85
84
|
|
86
85
|
argument PATH to the kext
|
87
86
|
|
88
|
-
kexts list kexts
|
87
|
+
kexts list kexts versions by clover
|
89
88
|
|
90
89
|
argument DEVICE (defaults to #{default_dev})
|
91
90
|
|
92
91
|
The EFI partion on DEVICE is used to find the clover kexts in
|
93
92
|
subdirectory /Other.
|
94
93
|
|
95
|
-
|
94
|
+
list shows boot disk information (which EFI partition was used)
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
$config = Hackmac::Config.load
|
96
100
|
|
101
|
+
def device_name(mdev)
|
102
|
+
case mdev
|
103
|
+
when 'boot'
|
104
|
+
boot_dev
|
105
|
+
when nil
|
106
|
+
$config.devices.main.name
|
107
|
+
else
|
108
|
+
if n = $config.devices[mdev]&.name
|
109
|
+
n
|
110
|
+
else
|
111
|
+
mdev
|
112
|
+
end
|
97
113
|
end
|
98
114
|
end
|
99
115
|
|
116
|
+
bold_head = -> h { h.sub(/\A[a-z]/) { $&.upcase }.bold }
|
117
|
+
|
100
118
|
case command = ARGV.shift
|
101
119
|
when 'help', nil
|
102
120
|
usage
|
@@ -104,75 +122,60 @@ when 'mount'
|
|
104
122
|
#if File.exist?('/Volumes/EFI')
|
105
123
|
# raise "/Volumes/EFI already exists => Sort this out first."
|
106
124
|
#end
|
107
|
-
mdev = ARGV.shift
|
125
|
+
mdev = device_name(ARGV.shift)
|
108
126
|
x %{sudo diskutil mount "#{mdev}"}
|
109
127
|
# TODO symlink to /Volumes/mdev, mdev should be foo['MountPoint'] from efi boot
|
110
128
|
when /\Aun?mount\z/
|
111
|
-
mdev = ARGV.shift
|
129
|
+
mdev = device_name(ARGV.shift)
|
112
130
|
x %{sudo diskutil unmount "#{mdev}"}
|
113
131
|
# TODO remove /Volumes/mdev if it is a symlink
|
114
132
|
when 'clone'
|
115
133
|
from = ARGV.shift or fail "need from argument"
|
116
|
-
from
|
117
|
-
to
|
118
|
-
to
|
134
|
+
from = device_name(from)
|
135
|
+
to = ARGV.shift or fail "need to argument"
|
136
|
+
to = device_name(to)
|
119
137
|
from != to or fail "cloning only allowed from one partition to another"
|
120
138
|
clone from: from, to: to
|
121
139
|
when 'kexts'
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
puts 'L/E'.yellow.bold
|
136
|
-
on_le.each do |kext|
|
137
|
-
puts kext.compare_to(on_efi)
|
138
|
-
end
|
139
|
-
ensure
|
140
|
-
x %{sudo diskutil umount "#{mdev}"}
|
141
|
-
end
|
140
|
+
mdev = device_name(ARGV.shift)
|
141
|
+
x %{sudo diskutil mount "#{mdev}"}
|
142
|
+
on_efi = Dir["/Volumes/#{mdev}/#{$config.kext.efi_path}/*.kext"].map { |path|
|
143
|
+
Kext.new(path: path, config: $config)
|
144
|
+
}.sort_by(&:name)
|
145
|
+
puts 'EFI'.yellow.bold + " (#{mdev})".bold
|
146
|
+
puts Tabulo::Table.new(on_efi, align_header: :left, border: :modern) { |t|
|
147
|
+
t.add_column(:name, header_styler: bold_head)
|
148
|
+
t.add_column(:itself, header: 'Version/Remote',
|
149
|
+
styler: -> v, s { v.version < v.remote_version ? s.red : s.green rescue s.yellow },
|
150
|
+
formatter: -> e { "%s %s %s" % [ e.version, ({ 0 => ?=, -1 => ?<, 1 => ?> }[e.version <=> e.remote_version] rescue nil), e.remote_version ] },
|
151
|
+
header_styler: bold_head)
|
152
|
+
}.pack
|
142
153
|
when 'kext'
|
143
154
|
path = ARGV.shift or fail 'need kext dir'
|
144
155
|
puts Kext.new(path: path)
|
145
|
-
when '
|
156
|
+
when 'list'
|
146
157
|
disks = Disks.new
|
147
158
|
efis = []
|
148
159
|
disks.as_hash['AllDisksAndPartitions'].each_with_object([]) { |d, ps|
|
149
160
|
uuids = Array(d['Partitions']&.map { |p| p['DiskUUID'] }&.compact)
|
150
161
|
efis.concat uuids.
|
151
162
|
map { |uuid| DiskInfo.new(disk: uuid) }.
|
152
|
-
select { |di| di.
|
163
|
+
select { |di| di.FilesystemType == 'msdos' }
|
153
164
|
}
|
154
|
-
efis.map!(&:as_hash)
|
155
165
|
efis.each do |e|
|
156
|
-
e
|
157
|
-
e
|
158
|
-
ContainerDisk.new(disk: e
|
159
|
-
as_hash['VolumesFromDisks']
|
166
|
+
e.Booted = e.DeviceIdentifier == boot_dev
|
167
|
+
e.Volumes =
|
168
|
+
ContainerDisk.new(disk: e.ParentWholeDisk, limiter: 'internal').VolumesFromDisks
|
160
169
|
end
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
'ParentWholeDisk',
|
171
|
-
'VolumeName',
|
172
|
-
'Volumes',
|
173
|
-
)
|
174
|
-
}
|
175
|
-
).bold
|
170
|
+
puts Tabulo::Table.new(efis, align_header: :left, border: :modern) { |t|
|
171
|
+
t.add_column(:Booted, styler: -> v, _ { v == ?☑ ? v.green : v.red }, header_styler: bold_head) { |e| e.Booted ? ?☑ : ?☐ }
|
172
|
+
t.add_column(:VolumeName, header_styler: bold_head)
|
173
|
+
t.add_column(:DeviceIdentifier, header_styler: bold_head)
|
174
|
+
t.add_column(:ParentWholeDisk, header_styler: bold_head)
|
175
|
+
t.add_column(:DiskUUID, header_styler: bold_head)
|
176
|
+
t.add_column(:Volumes, header_styler: bold_head) { |e| e.Volumes * ?, }
|
177
|
+
t.add_column(:MountPoint, styler: -> v, _ { v.empty? ? v : v.green }, header_styler: bold_head)
|
178
|
+
}.pack
|
176
179
|
else
|
177
180
|
fail "don't know how to #{command}"
|
178
181
|
end
|
data/hackmac.gemspec
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: hackmac 0.0
|
2
|
+
# stub: hackmac 0.1.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "hackmac".freeze
|
6
|
-
s.version = "0.0
|
6
|
+
s.version = "0.1.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "2020-01-
|
11
|
+
s.date = "2020-01-28"
|
12
12
|
s.description = "This ruby gem provides Some useful tools for working with a Hackintosh.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.executables = ["gfxmon".freeze, "efi".freeze]
|
15
|
-
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/search_ui.rb".freeze, "lib/hackmac/version.rb".freeze]
|
16
|
-
s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/search_ui.rb".freeze, "lib/hackmac/version.rb".freeze]
|
15
|
+
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_source.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/search_ui.rb".freeze, "lib/hackmac/version.rb".freeze]
|
16
|
+
s.files = [".gitignore".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/efi".freeze, "bin/gfxmon".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_source.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/search_ui.rb".freeze, "lib/hackmac/version.rb".freeze]
|
17
17
|
s.homepage = "http://github.com/flori/hackmac".freeze
|
18
18
|
s.rdoc_options = ["--title".freeze, "Hackmac - Some useful tools for working with a Hackintosh".freeze, "--main".freeze, "README.md".freeze]
|
19
19
|
s.rubygems_version = "3.1.2".freeze
|
@@ -27,13 +27,17 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
|
28
28
|
s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.14"])
|
29
29
|
s.add_runtime_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
|
30
|
+
s.add_runtime_dependency(%q<complex_config>.freeze, [">= 0"])
|
30
31
|
s.add_runtime_dependency(%q<amatch>.freeze, [">= 0"])
|
31
32
|
s.add_runtime_dependency(%q<plist>.freeze, [">= 0"])
|
33
|
+
s.add_runtime_dependency(%q<tabulo>.freeze, [">= 0"])
|
32
34
|
else
|
33
35
|
s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.11.0"])
|
34
36
|
s.add_dependency(%q<tins>.freeze, ["~> 1.14"])
|
35
37
|
s.add_dependency(%q<term-ansicolor>.freeze, ["~> 1.3"])
|
38
|
+
s.add_dependency(%q<complex_config>.freeze, [">= 0"])
|
36
39
|
s.add_dependency(%q<amatch>.freeze, [">= 0"])
|
37
40
|
s.add_dependency(%q<plist>.freeze, [">= 0"])
|
41
|
+
s.add_dependency(%q<tabulo>.freeze, [">= 0"])
|
38
42
|
end
|
39
43
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'complex_config/shortcuts'
|
2
|
+
require 'tins/xt/secure_write'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module Hackmac
|
6
|
+
module Config
|
7
|
+
extend FileUtils
|
8
|
+
extend ComplexConfig::Provider::Shortcuts
|
9
|
+
|
10
|
+
DEFAULT = <<~end
|
11
|
+
---
|
12
|
+
devices:
|
13
|
+
boot:
|
14
|
+
name: EFI
|
15
|
+
#backup:
|
16
|
+
# name: BACKUP_EFI
|
17
|
+
github:
|
18
|
+
user: null
|
19
|
+
access_token: null
|
20
|
+
kext:
|
21
|
+
efi_path: EFI/CLOVER/kexts/Other
|
22
|
+
sources:
|
23
|
+
AppleALC:
|
24
|
+
github: 'acidanthera/AppleALC'
|
25
|
+
IntelMausi:
|
26
|
+
github: 'acidanthera/IntelMausi'
|
27
|
+
Lilu:
|
28
|
+
github: 'acidanthera/Lilu'
|
29
|
+
USBInjectAll:
|
30
|
+
github: 'Sniki/OS-X-USB-Inject-All'
|
31
|
+
VirtualSMC:
|
32
|
+
github: 'acidanthera/VirtualSMC'
|
33
|
+
WhateverGreen:
|
34
|
+
github: 'acidanthera/WhateverGreen'
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.load
|
39
|
+
path = File.expand_path('~/config')
|
40
|
+
mkdir_p path
|
41
|
+
ComplexConfig::Provider.config_dir = path
|
42
|
+
config_path = File.join(path, 'hackmac.yml')
|
43
|
+
unless File.exist?(config_path)
|
44
|
+
File.secure_write(config_path, DEFAULT)
|
45
|
+
end
|
46
|
+
complex_config.hackmac
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/hackmac/kext.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
require 'hackmac/plist'
|
2
2
|
require 'pathname'
|
3
|
+
require 'tins/string_version'
|
3
4
|
|
4
5
|
module Hackmac
|
5
6
|
class Kext
|
6
7
|
include Hackmac::Plist
|
8
|
+
include Tins::StringVersion
|
7
9
|
|
8
|
-
def initialize(path:)
|
9
|
-
@path
|
10
|
-
@plist
|
10
|
+
def initialize(path:, config: nil)
|
11
|
+
@path = Pathname.new(path) + 'Contents/Info.plist'
|
12
|
+
@plist = File.open(@path, encoding: 'UTF-8') { |f| ::Plist.parse_xml(f) }
|
13
|
+
@config = config
|
11
14
|
end
|
12
15
|
|
13
16
|
def identifier
|
@@ -19,31 +22,38 @@ module Hackmac
|
|
19
22
|
end
|
20
23
|
|
21
24
|
def version
|
22
|
-
|
25
|
+
unless @version
|
26
|
+
if version = as_hash['CFBundleShortVersionString']
|
27
|
+
begin
|
28
|
+
@version = Version.new(version)
|
29
|
+
rescue ArgumentError
|
30
|
+
@version = version
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
@version
|
23
35
|
end
|
24
36
|
|
25
|
-
def
|
26
|
-
|
37
|
+
def remote_kext
|
38
|
+
if @config
|
39
|
+
if github = @config.kext.sources[name]&.github
|
40
|
+
auth = [ @config.github.user, @config.github.access_token ].compact
|
41
|
+
auth.empty? and auth = nil
|
42
|
+
@remote_kext = Hackmac::KextSource.new(github, auth: auth)
|
43
|
+
end
|
44
|
+
end
|
27
45
|
end
|
28
46
|
|
29
|
-
def
|
30
|
-
|
47
|
+
def remote_version
|
48
|
+
remote_kext&.version
|
31
49
|
end
|
32
50
|
|
33
|
-
def
|
34
|
-
|
35
|
-
candidates.group_by { |c| c.version == version }
|
51
|
+
def inspect
|
52
|
+
"#<#{self.class}: #{to_s}>"
|
36
53
|
end
|
37
54
|
|
38
|
-
def
|
39
|
-
|
40
|
-
if other = matches[false]&.first
|
41
|
-
"#{to_s.red} ⚡#{other.to_s.red}"
|
42
|
-
elsif other = matches[true]&.first
|
43
|
-
"#{to_s.green} = #{other.to_s.green}"
|
44
|
-
else
|
45
|
-
"#{to_s.yellow}"
|
46
|
-
end
|
55
|
+
def to_s
|
56
|
+
"#{name} #{version}"
|
47
57
|
end
|
48
58
|
end
|
49
59
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'json'
|
3
|
+
require 'tins/string_version'
|
4
|
+
|
5
|
+
module Hackmac
|
6
|
+
class KextSource
|
7
|
+
GITHUB_API_URL = 'https://api.github.com/repos/%s/releases'
|
8
|
+
|
9
|
+
include Tins::StringVersion
|
10
|
+
|
11
|
+
def initialize(github, auth: nil)
|
12
|
+
account, repo = github.split(?/)
|
13
|
+
@name = repo
|
14
|
+
releases = URI.open(
|
15
|
+
GITHUB_API_URL % github,
|
16
|
+
http_basic_authentication: auth) { |o|
|
17
|
+
JSON.parse(o.read, object_class: JSON::GenericObject)
|
18
|
+
}
|
19
|
+
if version = releases.map { |r|
|
20
|
+
next unless r.tag_name.include?(?.)
|
21
|
+
version = r.tag_name.delete '^.0-9'
|
22
|
+
begin
|
23
|
+
Version.new(version)
|
24
|
+
rescue ArgumentError
|
25
|
+
end
|
26
|
+
}.compact.max
|
27
|
+
then
|
28
|
+
@version = version
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
attr_reader :name
|
33
|
+
|
34
|
+
attr_reader :version
|
35
|
+
|
36
|
+
def inspect
|
37
|
+
"#<#{self.class}: #{to_s}>"
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_s
|
41
|
+
"#{name} #{version}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
"#{name} #{version}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/hackmac/plist.rb
CHANGED
data/lib/hackmac/version.rb
CHANGED
data/lib/hackmac.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hackmac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: complex_config
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: amatch
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: tabulo
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
description: This ruby gem provides Some useful tools for working with a Hackintosh.
|
84
112
|
email: flori@ping.de
|
85
113
|
executables:
|
@@ -89,8 +117,10 @@ extensions: []
|
|
89
117
|
extra_rdoc_files:
|
90
118
|
- README.md
|
91
119
|
- lib/hackmac.rb
|
120
|
+
- lib/hackmac/config.rb
|
92
121
|
- lib/hackmac/disks.rb
|
93
122
|
- lib/hackmac/kext.rb
|
123
|
+
- lib/hackmac/kext_source.rb
|
94
124
|
- lib/hackmac/plist.rb
|
95
125
|
- lib/hackmac/search_ui.rb
|
96
126
|
- lib/hackmac/version.rb
|
@@ -104,8 +134,10 @@ files:
|
|
104
134
|
- bin/gfxmon
|
105
135
|
- hackmac.gemspec
|
106
136
|
- lib/hackmac.rb
|
137
|
+
- lib/hackmac/config.rb
|
107
138
|
- lib/hackmac/disks.rb
|
108
139
|
- lib/hackmac/kext.rb
|
140
|
+
- lib/hackmac/kext_source.rb
|
109
141
|
- lib/hackmac/plist.rb
|
110
142
|
- lib/hackmac/search_ui.rb
|
111
143
|
- lib/hackmac/version.rb
|