hackmac 1.2.1 → 1.3.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 +4 -4
- data/VERSION +1 -1
- data/bin/gfxmon +28 -74
- data/hackmac.gemspec +5 -5
- data/lib/hackmac/graph.rb +176 -0
- data/lib/hackmac/version.rb +1 -1
- data/lib/hackmac.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59f8d61d5c86ebfc3dc59e41fba9c82bde1ee0bb2aa95396ff6c878165ff37c6
|
4
|
+
data.tar.gz: 95932d40323add3994a44450337c9209be21f8378509c60ec512151e8a6ada31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8af76a612daf738c8d4fb8423f8570e053d5db96696d3627d1413f391d8e1a6028e0331e915860e96742c6abe88295df0b41b459aa7f2621e4cb4b12f3f91eda
|
7
|
+
data.tar.gz: e4ac35e14b25e5c111eb4fe7d4bb7a25edd602afb667beb94e3d8302e2974bdbf229776e2f418e0a27c5f1089abfa844c3398b30df376f08b7243424c7aa73f8
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
data/bin/gfxmon
CHANGED
@@ -45,18 +45,11 @@ def ps
|
|
45
45
|
}
|
46
46
|
end
|
47
47
|
|
48
|
-
def format_bytes(n, v)
|
49
|
-
if n =~ /bytes/i
|
50
|
-
Tins::Unit.format(v, format: '%.3f%U', unit: '')
|
51
|
-
else
|
52
|
-
v.to_s
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
48
|
def list(ps)
|
57
49
|
max = ps.keys.max_by(&:size)&.size&.to_i
|
50
|
+
graph = Hackmac::Graph.new(title: '')
|
58
51
|
puts ps.map { |n, v|
|
59
|
-
("%-#{max}s" % n) + " " + ("%s" %
|
52
|
+
("%-#{max}s" % n) + " " + ("%s" % graph.send(derive_formatter(n), v)).bold
|
60
53
|
}
|
61
54
|
end
|
62
55
|
|
@@ -87,75 +80,36 @@ def choose_metric(ps)
|
|
87
80
|
fail "Metric #{metric} not known"
|
88
81
|
end
|
89
82
|
|
83
|
+
def derive_formatter(metric)
|
84
|
+
case metric
|
85
|
+
when /bytes/i
|
86
|
+
:as_bytes
|
87
|
+
when /Hz/
|
88
|
+
:as_hertz
|
89
|
+
when /\(C\)/
|
90
|
+
:as_celsius
|
91
|
+
when /\(%\)/
|
92
|
+
:as_percent
|
93
|
+
else
|
94
|
+
:as_default
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
90
98
|
def display_graph
|
91
99
|
if metric = choose_metric(ps)
|
92
100
|
sleep_duration = [ 1, ($opts[?n] || 10).to_i ].max
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
}
|
103
|
-
loop do
|
104
|
-
print clear_screen
|
105
|
-
|
106
|
-
lines, cols = Tins::Terminal.winsize
|
107
|
-
|
108
|
-
as_title = -> t {
|
109
|
-
move_to(lines, (cols - t.size) / 2) { t.bold }
|
110
|
-
}
|
111
|
-
|
112
|
-
case value = ps[metric]
|
113
|
-
when Float
|
114
|
-
data << value
|
115
|
-
else
|
116
|
-
data << value.to_i
|
117
|
-
end
|
118
|
-
data = data.last(cols)
|
119
|
-
|
120
|
-
y_width = (data.max - data.min).to_f
|
121
|
-
if y_width == 0
|
122
|
-
print(
|
123
|
-
as_title.("#{metric} / #{sleep_duration}s"),
|
124
|
-
move_to(lines / 2, (cols - "no data".size) / 2) { "no data".italic }
|
125
|
-
)
|
126
|
-
sleep sleep_duration
|
127
|
-
print clear_screen
|
128
|
-
next
|
129
|
-
end
|
130
|
-
|
131
|
-
unless c = $opts[?c]
|
132
|
-
cs = (21..226).select { |d|
|
133
|
-
Term::ANSIColor::Attribute[d].to_rgb_triple.to_hsl_triple.
|
134
|
-
lightness < 40
|
135
|
-
}
|
136
|
-
c = cs[ metric.bytes.reduce(0, :+) % cs.size ]
|
137
|
-
end
|
138
|
-
color = Term::ANSIColor::Attribute[c]
|
139
|
-
color_light = color.to_rgb_triple.to_hsl_triple.lighten(15) rescue color
|
140
|
-
|
141
|
-
data.each_with_index do |value, x|
|
142
|
-
x = x + cols - data.size + 1
|
143
|
-
y = lines - (((value - data.min) * lines / y_width)).round + 1
|
144
|
-
y.upto(lines) do |iy|
|
145
|
-
print move_to(iy, x) { ' '.on_color(y == iy ? color : color_light) }
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
print(
|
150
|
-
as_title.("#{metric} #{format_bytes(metric, data.last)} / #{sleep_duration}s"),
|
151
|
-
move_home { format_bytes(metric, data.max).bold },
|
152
|
-
move_to_line(lines) { format_bytes(metric, data.min).bold }
|
153
|
-
)
|
154
|
-
|
155
|
-
sleep sleep_duration
|
156
|
-
end
|
101
|
+
format_value = derive_formatter(metric)
|
102
|
+
graph = Hackmac::Graph.new(
|
103
|
+
title: metric,
|
104
|
+
sleep: sleep_duration,
|
105
|
+
value: -> _ { ps[metric] },
|
106
|
+
color: $opts[?c],
|
107
|
+
format_value:
|
108
|
+
)
|
109
|
+
graph.start
|
157
110
|
end
|
158
|
-
|
111
|
+
ensure
|
112
|
+
graph&.stop
|
159
113
|
end
|
160
114
|
|
161
115
|
case
|
data/hackmac.gemspec
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: hackmac 1.
|
2
|
+
# stub: hackmac 1.3.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "hackmac".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.3.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 = "2023-05-
|
11
|
+
s.date = "2023-05-27"
|
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 = ["efi".freeze, "gfxmon".freeze, "usb".freeze]
|
15
|
-
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.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, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/hackmac.yml".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.rb".freeze, "lib/hackmac/version.rb".freeze]
|
15
|
+
s.extra_rdoc_files = ["README.md".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.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, "bin/usb".freeze, "hackmac.gemspec".freeze, "lib/hackmac.rb".freeze, "lib/hackmac/asset_tools.rb".freeze, "lib/hackmac/config.rb".freeze, "lib/hackmac/disks.rb".freeze, "lib/hackmac/github_source.rb".freeze, "lib/hackmac/graph.rb".freeze, "lib/hackmac/hackmac.yml".freeze, "lib/hackmac/kext.rb".freeze, "lib/hackmac/kext_upgrader.rb".freeze, "lib/hackmac/oc.rb".freeze, "lib/hackmac/oc_upgrader.rb".freeze, "lib/hackmac/oc_validator.rb".freeze, "lib/hackmac/plist.rb".freeze, "lib/hackmac/url_download.rb".freeze, "lib/hackmac/utils.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.3.26".freeze
|
@@ -0,0 +1,176 @@
|
|
1
|
+
require 'term/ansicolor'
|
2
|
+
require 'tins'
|
3
|
+
|
4
|
+
class Hackmac::Graph
|
5
|
+
include Term::ANSIColor
|
6
|
+
|
7
|
+
def initialize(title:, value: -> i { 0 }, format_value: nil, sleep: nil, color: nil)
|
8
|
+
@title = title
|
9
|
+
@value = value
|
10
|
+
@format_value = format_value
|
11
|
+
@sleep = sleep
|
12
|
+
@continue = false
|
13
|
+
@data = []
|
14
|
+
@color = color
|
15
|
+
end
|
16
|
+
|
17
|
+
def start
|
18
|
+
install_handlers
|
19
|
+
full_reset
|
20
|
+
perform hide_cursor
|
21
|
+
@continue = true
|
22
|
+
start_loop
|
23
|
+
end
|
24
|
+
|
25
|
+
def stop
|
26
|
+
full_reset
|
27
|
+
@continue = false
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def start_loop
|
33
|
+
full_reset
|
34
|
+
color = pick_color
|
35
|
+
color_light = color.to_rgb_triple.to_hsl_triple.lighten(15) rescue color
|
36
|
+
i = 0
|
37
|
+
while @continue
|
38
|
+
@lines, @cols = winsize
|
39
|
+
|
40
|
+
@data << @value.(i)
|
41
|
+
@data = data.last(cols)
|
42
|
+
|
43
|
+
y_width = (data.max - data.min).to_f
|
44
|
+
if y_width == 0
|
45
|
+
perform(
|
46
|
+
clear_screen,
|
47
|
+
as_title("#@title / #{sleep_duration}"),
|
48
|
+
move_to(lines / 2, (cols - "no data".size) / 2) { italic{"no data"} }
|
49
|
+
)
|
50
|
+
maybe_sleep
|
51
|
+
next
|
52
|
+
end
|
53
|
+
|
54
|
+
perform clear_screen
|
55
|
+
data.each_with_index do |value, x|
|
56
|
+
x = x + cols - data.size + 1
|
57
|
+
y = lines - (((value - data.min) * lines / y_width)).round + 1
|
58
|
+
y.upto(lines) do |iy|
|
59
|
+
perform move_to(iy, x) { on_color(y == iy ? color : color_light){' '} }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
perform(
|
64
|
+
as_title("#@title #{format_value(data.last)} / #{sleep_duration}"),
|
65
|
+
move_home { format_value(data.max).bold },
|
66
|
+
move_to_line(lines) { format_value(data.min).bold }
|
67
|
+
)
|
68
|
+
|
69
|
+
maybe_sleep
|
70
|
+
end
|
71
|
+
full_reset
|
72
|
+
rescue *[ Interrupt, defined?(IRB::Abort) && IRB::Abort ].compact
|
73
|
+
stop
|
74
|
+
end
|
75
|
+
|
76
|
+
def perform(*a)
|
77
|
+
print *a
|
78
|
+
end
|
79
|
+
|
80
|
+
attr_reader :cols
|
81
|
+
|
82
|
+
attr_reader :lines
|
83
|
+
|
84
|
+
attr_reader :data
|
85
|
+
|
86
|
+
def as_title(text)
|
87
|
+
move_to(lines, (cols - text.size) / 2) { bold{text} }
|
88
|
+
end
|
89
|
+
|
90
|
+
def sleep_duration
|
91
|
+
@sleep ? "#{@sleep}s" : "once"
|
92
|
+
end
|
93
|
+
|
94
|
+
def format_value(value)
|
95
|
+
case @format_value
|
96
|
+
when Proc
|
97
|
+
@format_value.(value)
|
98
|
+
when Symbol
|
99
|
+
send(@format_value, value)
|
100
|
+
else
|
101
|
+
send(:as_default, value)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def as_bytes(value)
|
106
|
+
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'B')
|
107
|
+
end
|
108
|
+
|
109
|
+
def as_hertz(value)
|
110
|
+
Tins::Unit.format(value, prefix: :uc, format: '%.3f%U', unit: 'Hz')
|
111
|
+
end
|
112
|
+
|
113
|
+
def as_celsius(value)
|
114
|
+
"#{value}°"
|
115
|
+
end
|
116
|
+
|
117
|
+
def as_percent(value)
|
118
|
+
"#{value}%"
|
119
|
+
end
|
120
|
+
|
121
|
+
def as_default(value)
|
122
|
+
value.to_s
|
123
|
+
end
|
124
|
+
|
125
|
+
def pick_color
|
126
|
+
Term::ANSIColor::Attribute[
|
127
|
+
case @color
|
128
|
+
when Proc
|
129
|
+
@color.(@title)
|
130
|
+
when nil
|
131
|
+
cs = (21..226).select { |d|
|
132
|
+
Term::ANSIColor::Attribute[d].to_rgb_triple.to_hsl_triple.
|
133
|
+
lightness < 40
|
134
|
+
}
|
135
|
+
cs[ @title.bytes.reduce(0, :+) % cs.size ]
|
136
|
+
else
|
137
|
+
@color
|
138
|
+
end
|
139
|
+
]
|
140
|
+
end
|
141
|
+
|
142
|
+
def maybe_sleep
|
143
|
+
if @sleep
|
144
|
+
sleep @sleep
|
145
|
+
else
|
146
|
+
@continue = false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def normalize_value(value)
|
151
|
+
case value
|
152
|
+
when Float
|
153
|
+
value
|
154
|
+
else
|
155
|
+
value.to_i
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def full_reset
|
160
|
+
perform reset, clear_screen, move_home, show_cursor
|
161
|
+
end
|
162
|
+
|
163
|
+
def winsize
|
164
|
+
Tins::Terminal.winsize
|
165
|
+
end
|
166
|
+
|
167
|
+
def install_handlers
|
168
|
+
at_exit { full_reset }
|
169
|
+
|
170
|
+
trap(:SIGWINCH) {
|
171
|
+
lines, cols = winsize
|
172
|
+
perform clear_screen,
|
173
|
+
move_to(lines / 2, (cols - "Zzz…".size) / 2) { "Zzz…".italic }
|
174
|
+
}
|
175
|
+
end
|
176
|
+
end
|
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: 1.
|
4
|
+
version: 1.3.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: 2023-05-
|
11
|
+
date: 2023-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -150,6 +150,7 @@ extra_rdoc_files:
|
|
150
150
|
- lib/hackmac/config.rb
|
151
151
|
- lib/hackmac/disks.rb
|
152
152
|
- lib/hackmac/github_source.rb
|
153
|
+
- lib/hackmac/graph.rb
|
153
154
|
- lib/hackmac/kext.rb
|
154
155
|
- lib/hackmac/kext_upgrader.rb
|
155
156
|
- lib/hackmac/oc.rb
|
@@ -174,6 +175,7 @@ files:
|
|
174
175
|
- lib/hackmac/config.rb
|
175
176
|
- lib/hackmac/disks.rb
|
176
177
|
- lib/hackmac/github_source.rb
|
178
|
+
- lib/hackmac/graph.rb
|
177
179
|
- lib/hackmac/hackmac.yml
|
178
180
|
- lib/hackmac/kext.rb
|
179
181
|
- lib/hackmac/kext_upgrader.rb
|