hackmac 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d13c244074302c8a7655084798808c00a721e789eec6fb10b45d7c651ecdc871
4
- data.tar.gz: 2f12fd32434020dfe86c060d84d611ff98c4ca3c9ef1998093fed8d03156295e
3
+ metadata.gz: 770a49155c7dd33375a43996b62f7e594b6d18f0e9fba87b8bfd6124bcc98d5f
4
+ data.tar.gz: 9c4d786f6df212bc390cfe64caae581da4833dfe161c48fcee0aeccf435ffd5f
5
5
  SHA512:
6
- metadata.gz: b51cb0440e59972003f5c9ea05b7815cc84e87b1001cdfbb220ea0ed963ce74d59d99fc47f9371481cbec5778455747e09085be7d9f5c0e2b4530ebcdc661070
7
- data.tar.gz: 0a326f6be72410039291e6cf679313a7a906211820a95d294efa22e7e02f1ff602f7c6c696dd89278dbd18cc20b2eb0488c502cce7fa44f24c89dfe07854e766
6
+ metadata.gz: 4e5ab0f0d08aa06c4854208a53961b11d7f8ef8d5478168da7799d4b682c3ec2a785816bd20744f5d0d6f3ef6f34071882dfea6a4ac521558c6d4f94db20c4c4
7
+ data.tar.gz: a62c1e3e3ebbd650a5904cbcd7d4f54d248de162415aedbe8fdc36ec66b874525f98b5af5b841638c0c0728176d27352496ee0e8f57f847c84e6ff40342f9782
data/Rakefile CHANGED
@@ -18,6 +18,8 @@ GemHadar do
18
18
 
19
19
  dependency 'tins', '~>1.14'
20
20
  dependency 'term-ansicolor', '~>1.3'
21
+ dependency 'complex_config'
21
22
  dependency 'amatch'
22
23
  dependency 'plist'
24
+ dependency 'tabulo'
23
25
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
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
- begin
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
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 dev
51
- value = x(%{bdmesg}, verbose: false).lines.
52
- find { |l| l =~ /SelfDevicePath=(.*)\r/ and break $1 }
53
- uuid = value.split('\\').last[/(?:<?GPT,)([\h-]+)/, 1] or exit 1
54
- x(%{partutil --search-uuid #{uuid}}).chomp
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 in L/E and compare versions with clover 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
- boot shows boot disk information (which EFI partition was used)
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 || dev
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 || dev
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 == 'boot' and from = dev
117
- to = ARGV.shift or fail "need to argument"
118
- to == 'boot' and to = dev
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
- begin
123
- mdev = ARGV.shift || 'EFI'
124
- x %{sudo diskutil mount "#{mdev}"}
125
- on_efi = Dir["/Volumes/#{mdev}/EFI/CLOVER/kexts/Other/*.kext"].map { |path|
126
- Kext.new(path: path)
127
- }.sort_by(&:name)
128
- on_le = Dir['/Library/Extensions/*.kext'].map { |path|
129
- Kext.new(path: path)
130
- }.sort_by(&:name)
131
- puts 'EFI'.yellow.bold + " (#{mdev})".bold
132
- on_efi.each do |kext|
133
- puts kext.compare_to(on_le)
134
- end
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 'boot'
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.as_hash['FilesystemType'] == 'msdos' }
163
+ select { |di| di.FilesystemType == 'msdos' }
153
164
  }
154
- efis.map!(&:as_hash)
155
165
  efis.each do |e|
156
- e['Booted'] = e['DeviceIdentifier'] == dev
157
- e['Volumes'] =
158
- ContainerDisk.new(disk: e['ParentWholeDisk'], limiter: 'internal').
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
- efis.map!(&:sort).map!(&:to_h)
162
- puts "Bootdisk information".bold.yellow, JSON.pretty_generate(
163
- efis.map { |e| e.subhash(
164
- 'Bootable',
165
- 'Booted',
166
- 'DeviceIdentifier',
167
- 'DiskUUID',
168
- 'IORegistryEntryName',
169
- 'MountPoint',
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.4 ruby lib
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.4"
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-15"
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 = Pathname.new(path) + 'Contents/Info.plist'
10
- @plist = File.open(@path, encoding: 'UTF-8') { |f| ::Plist.parse_xml(f) }
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
- as_hash['CFBundleShortVersionString']
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 inspect
26
- "#<#{self.class}: #{to_s}>"
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 to_s
30
- "#{name} #{version}"
47
+ def remote_version
48
+ remote_kext&.version
31
49
  end
32
50
 
33
- def find_matches(others)
34
- candidates = others.select { |o| o.name == name }
35
- candidates.group_by { |c| c.version == version }
51
+ def inspect
52
+ "#<#{self.class}: #{to_s}>"
36
53
  end
37
54
 
38
- def compare_to(others)
39
- matches = find_matches others
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
@@ -14,5 +14,14 @@ module Hackmac
14
14
  def to_json(*a)
15
15
  as_hash.to_json(*a)
16
16
  end
17
+
18
+ def method_missing(name, *a)
19
+ n = name.to_s
20
+ if n =~ /(.+)=\z/
21
+ @plist[$1] = a.first
22
+ elsif @plist.key?(n)
23
+ @plist[n]
24
+ end
25
+ end
17
26
  end
18
27
  end
@@ -1,6 +1,6 @@
1
1
  module Hackmac
2
2
  # Hackmac version
3
- VERSION = '0.0.4'
3
+ VERSION = '0.1.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/lib/hackmac.rb CHANGED
@@ -8,3 +8,5 @@ require 'hackmac/plist'
8
8
  require 'hackmac/search_ui'
9
9
  require 'hackmac/disks'
10
10
  require 'hackmac/kext'
11
+ require 'hackmac/kext_source'
12
+ require 'hackmac/config'
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
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-15 00:00:00.000000000 Z
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