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 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