termclock 0.1.0 → 0.1.5

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: 035cd03641bd125a2b3da03fe051103d6ce9a8ee75917a6f5c7e6e97a568cfb8
4
- data.tar.gz: 466cce8b4ef31fd357191aeada4ff8c5fda0584e21ef0dfc50ca1c2f3886d1ac
3
+ metadata.gz: 173194900216341c3b17b0628a2e559c48bc1ae0f96fb72fd9c6d0f7be8e72d7
4
+ data.tar.gz: 62e24514caac359c68865c147bf95cd21bb5993b81c4793d52ed1270f125812f
5
5
  SHA512:
6
- metadata.gz: 9dac45de1be6e3d805a73c429948c7435b2f3b34b9080ff33616d3b1a51f000f35f5a423fa4cfb187119f1f97a8a6c69fc25fe7bc1c9a342506652cf0c43d62f
7
- data.tar.gz: 3690251100766cd071af66baba728bfe07f6636c657b3f4ee7a529f656f30fafc2984805d252fb342251d5278cb852297d0bc93935aeb7008436121bc73732d3
6
+ metadata.gz: 41b1e7640c8874a8c12448d248d76a5f27e75b920704281e5ec4ef82399e049118b7ef6c44389460de20c6096f331e863cbf6666661f126e63eb1ced9208ac78
7
+ data.tar.gz: 90aa2e9ee036d1e02a2eb5dc98fed454663f053d906a7b45c7e8f0f30be95f0e80be73c2985abeeb2ad6f299e5f4479222ba16ac97a3a418127ee5551d7c3132
@@ -1,7 +1,26 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'termclock'
3
+ $-v = nil
3
4
 
4
- $-v = true
5
+ if ARGV.any? { |x| x[/\A\-(\-help|h)\z/] }
6
+ puts <<~EOF
7
+ TermClock: A clock that runs on the LinuxTerminal!
8
+
9
+ Arguments:
10
+ --help|-h\t\t\tShows this help section
11
+ --character=|char=\t\tDraws specified character
12
+ --clean\t\t\t\tJust run the clean bare clock
13
+ --colour=|-c=\t\t\tSpecify hex colour (4 colours)
14
+ \t\t\t\t[ with or without # ]
15
+ --no-date|-nd\t\t\tShows no date
16
+ --no-message|-nm\t\tShows no messages
17
+ --no-sysinfo|-ni\t\tShows no system info
18
+ --refresh|r\t\t\tSpecify delay or refresh time
19
+ --text-colour|-tc\t\tSpecify text colour (2 colours)
20
+ EOF
21
+
22
+ exit 0
23
+ end
5
24
 
6
25
  begin
7
26
  print "\e[?25l"
@@ -24,9 +43,34 @@ begin
24
43
  }
25
44
 
26
45
  chars = ARGV.find { |x| x[/\A\-(\-character|char)=.*\z/] } &.split(?=) &.at(1)
27
- Termclock::ParseCharacters.transform_characters!(chars[0]) if chars
46
+ Termclock::ParseCharacters.transform_characters!(*chars) if chars
47
+
48
+ _refresh_time = ARGV.find { |x| x[/\A\-(\-refresh|r)=.*\z/] } &.split(?=) &.at(1)
49
+ refresh_time = _refresh_time ? _refresh_time.to_f : 0.1
50
+
51
+ text_colours = ARGV.find { |x| x[/\A\-(\-text\-colour|tc)=.*\z/] } &.split(?=) &.at(1) &.split(?,)
52
+ abort("Text colours need 2 colours. Example: -tc=55f,3ce3b5") if text_colours && text_colours.length != 2
53
+
54
+ bold = ARGV.any? { |x| x[/\A\-\-bold\z/] }
55
+ no_print_info = ARGV.any? { |x| x[/\A\-(\-no\-sysinfo|ni)\z/] }
56
+ no_print_message = ARGV.any? { |x| x[/\A\-(\-no\-message|nm)\z/] }
57
+ no_print_date = ARGV.any? { |x| x[/\A\-(\-no\-date|nd)\z/] }
58
+
59
+ clean = ARGV.any? { |x| x[/\A\-(\-clean)\z/] }
60
+
61
+ if clean
62
+ no_print_info = no_print_message = no_print_date = true
63
+ end
28
64
 
29
- Termclock.main(*colours)
65
+ Termclock.start(
66
+ *colours,
67
+ *text_colours,
68
+ sleep: refresh_time,
69
+ bold: bold,
70
+ print_info: !no_print_info,
71
+ print_message: !no_print_message,
72
+ print_date: !no_print_date
73
+ )
30
74
  rescue Interrupt, SignalException
31
75
  print "\e[H\e[2J\e[3J"
32
76
  ensure
@@ -1,12 +1,8 @@
1
- # frozen_string_literal: true
2
- COLOURTERM = ENV.key?('COLORTERM')
3
- CLEAR = COLOURTERM ? "\e[H\e[2J\e[3J" : "\e[H"
4
- $-n, $-s = ?\n, ?\s
5
-
6
1
  require 'linux_stat'
7
2
  require 'io/console'
8
3
  require_relative "termclock/string"
9
4
  require_relative "termclock/parse_characters"
5
+ require_relative "termclock/system_info"
10
6
  require_relative "termclock/main"
11
7
  require_relative "termclock/hex2rgb"
12
8
  require_relative "termclock/version"
@@ -1,5 +1,13 @@
1
1
  module Termclock
2
- def self.main(colour1, colour2, colour3, colour4, sleep = 0.1)
2
+ COLOURTERM = ENV.key?('COLORTERM')
3
+ CLEAR = COLOURTERM ? "\e[H\e[2J\e[3J" : "\e[H"
4
+
5
+ def self.start(colour1, colour2, colour3, colour4, textcolour1 = nil,
6
+ textcolour2 = nil, sleep: 0.1, bold: false,
7
+ print_info: true, print_message: true,
8
+ print_date: true
9
+ )
10
+
3
11
  newline = ?\n.freeze
4
12
  space = ?\s.freeze
5
13
 
@@ -44,50 +52,47 @@ module Termclock
44
52
  colours = [rs1, gs1, bs1].transpose.zip([rs2, gs2, bs2].transpose)
45
53
  colours.unshift(colours[0])
46
54
  colours.push(colours[-1])
55
+
56
+ # Text colours
57
+ tc1 = textcolour1 ? hex2rgb(textcolour1) : hex2rgb('5555ff')
58
+ tc2 = textcolour2 ? hex2rgb(textcolour2) : hex2rgb('3ce3b5')
59
+
47
60
  cpu_usage = 0
48
61
  cpu_usage_t = Thread.new { }
62
+
63
+ current_net_usage = ''
64
+ current_net_usage_t = Thread.new { }
65
+
49
66
  message_time = Time.now.to_i - 5
67
+ message_counter = -1
50
68
  message = ''
69
+ message_final = ''
51
70
  message_temp = ''
52
71
  caret = "\u2588"
53
72
 
73
+ date, info = '', ''
74
+
54
75
  get_message = proc {
55
76
  case Time.now.hour
56
- when 6...12
77
+ when 5...12
57
78
  "\u{1F304} Good Morning..."
58
79
  when 12...16
59
80
  "\u26C5 Good Afternoon..."
60
- when 16...19
61
- "\u{1F306} Good Evening..."
62
- when 19...22
81
+ when 16...18
82
+ "\u{1F307} Good Evening..."
83
+ when 18...20
84
+ "\u{1F31F} Good Evening..."
85
+ when 20...24
63
86
  "\u{1F303} Good Night..."
64
87
  else
65
- "\u{1F30C} Good Night..."
88
+ "\u{2728} Good Night..."
66
89
  end
67
90
  }
68
91
 
69
- i = -1
70
-
71
92
  while true
72
- i += 1
73
93
  time_now = Time.now
74
94
  height, width = *STDOUT.winsize
75
95
 
76
- message_align = width - i % width + message.length / 2 - 4
77
-
78
- if (width - i % width <= message.length)
79
- message.replace(message[1..-1])
80
- message_align = width - i % width + 4
81
- else
82
- message.clear if width - i % width == width
83
- message_temp = get_message.call
84
-
85
- if message_temp != message
86
- message << message_temp[message.length..message.length + 1]
87
-
88
- end
89
- end
90
-
91
96
  if time_now.to_f./(0.5).to_i.even?
92
97
  splitter = ?:.freeze
93
98
  _caret = caret
@@ -96,64 +101,45 @@ module Termclock
96
101
  _caret = ''
97
102
  end
98
103
 
99
- time = time_now.strftime("%H %M %S %2N").split.join(splitter)
100
- art = Termclock::ParseCharacters.display(time)
101
-
102
- art_aligned = art.lines.each_with_index do |x, i|
103
- chomped = x.chomp(''.freeze).+(newline)
104
- gr = chomped.gradient(*colours[i])
105
- x.replace(space.*(width./(2.0).-(chomped.length / 2.0).abs.to_i + 1) + gr)
106
- end.join
107
-
108
- horizontal_gap = "\e[#{height./(2.0).-(art.lines.length / 2.0).to_i + 1}H"
104
+ if print_message
105
+ message_counter += 1
106
+ message_align = width - message_counter % width + message.length / 2 - 4
107
+ if (width - message_counter % width <= message.length)
108
+ message.replace(message[1..-1])
109
+ message_align = width - message_counter % width + 4
110
+ else
111
+ message.clear if width - message_counter % width == width
112
+ message_temp = get_message.call
113
+
114
+ if message_temp != message
115
+ message << message_temp[message.length..message.length + 1]
116
+ end
117
+ end
109
118
 
110
- unless cpu_usage_t.alive?
111
- cpu_usage_t = Thread.new { cpu_usage = LS::CPU.usage(0.25) }
119
+ message_final = message.rjust(message_align).+(_caret).gradient(tc1, tc2, exclude_spaces: true, bold: bold)
112
120
  end
113
121
 
114
- cpu = "\u{1F9E0} CPU: #{cpu_usage}% (#{LS::CPU.count_online} / #{LS::CPU.count})"
115
-
116
- battery = if LS::Battery.present?
117
- stat = LS::Battery.stat
118
- emoji = LS::Battery.charging? ? "\u{1F4A1}" : "\u{1F50B}"
119
- "#{emoji} Battery: #{stat[:charge].to_i}% (#{stat[:status]})"
120
- else
121
- ''.freeze
122
+ if print_info
123
+ info = system_info(width, tc1, tc2, bold)
122
124
  end
123
125
 
124
- _m = LS::Net.total_bytes
125
- ip = "\u{1F30F} IP: #{LS::Net.ipv4_private}"
126
- net_usage = "\u{1F4C8} D/L | U/L: #{LS::PrettifyBytes.convert_short_binary _m[:received]}"\
127
- " | #{LS::PrettifyBytes.convert_short_binary _m[:transmitted]}"
128
-
129
- _m = LS::Memory.stat
130
- memory = "\u{1F3B0} Mem: #{LS::PrettifyBytes.convert_short_binary(_m[:used].to_i * 1024)}"\
131
- " / #{LS::PrettifyBytes.convert_short_binary(_m[:total].to_i * 1024)}"\
132
- " (#{_m[:percent_used]}%)"
133
-
134
- _m = LS::Swap.stat
135
- swap = "\u{1F300} Swap: #{LS::PrettifyBytes.convert_short_binary(_m[:used].to_i * 1024)}"\
136
- " / #{LS::PrettifyBytes.convert_short_binary(_m[:total].to_i * 1024)}"\
137
- " (#{_m[:percent_used]}%)"
138
-
139
- _m = LS::Filesystem.stat
140
- fs = "\u{1F4BD} FS: #{LS::PrettifyBytes.convert_short_binary(_m[:used].to_i)}"\
141
- " / #{LS::PrettifyBytes.convert_short_binary(_m[:total].to_i)}"\
142
- " (#{_m[:used].*(100).fdiv(_m[:total]).round(2)}%)"
126
+ if print_date
127
+ date = time_now.strftime('%a, %d %B %Y').center(width)
128
+ .gradient(tc1, tc2, bold: bold)
129
+ end
143
130
 
144
- process = "\u{1F9EE} Process: #{LS::Process.count}"
131
+ time = time_now.strftime('%H %M %S %2N').split.join(splitter)
132
+ art = Termclock::ParseCharacters.display(time).lines
145
133
 
146
- max_l = [process, ip, battery, net_usage].map(&:length).max
134
+ art_aligned = art.each_with_index do |x, i|
135
+ chomped = x.chomp(''.freeze).+(newline)
136
+ gr = chomped.gradient(*colours[i], bold: bold)
137
+ x.replace(space.*(width./(2.0).-(chomped.length / 2.0).abs.to_i + 1) + gr)
138
+ end.join
147
139
 
148
- info = <<~EOF.gradient(*colours[2], exclude_spaces: true)
149
- \s#{cpu}#{?\s.*(width.-(cpu.length + max_l + 4).abs)}#{battery}
150
- \s#{memory}#{?\s.*(width.-(memory.length + max_l + 4).abs)}#{ip}
151
- \s#{swap}#{?\s.*(width.-(swap.length + max_l + 4).abs)}#{net_usage}
152
- \s#{fs}#{?\s.*(width.-(fs.length + max_l + 4).abs)}#{process}
153
- EOF
140
+ vertical_gap = "\e[#{height./(2.0).-(art.length / 2.0).to_i + 1}H"
154
141
 
155
- print "#{CLEAR}#{info}#{horizontal_gap}#{art_aligned}\n"\
156
- "#{message.rjust(message_align).+(_caret).gradient(*colours[1], exclude_spaces: true)}"
142
+ print "#{CLEAR}#{info}#{vertical_gap}#{art_aligned}\n#{date}\n\n#{message_final}"
157
143
 
158
144
  if gc_compact && time_now.to_i > gc_compacted
159
145
  GC.compact
@@ -3,81 +3,81 @@ module Termclock
3
3
  NEWLINE = ?\n.freeze
4
4
  CHARACTERS = <<~EOF.freeze
5
5
  # 0
6
- ```````
7
- `` ``
8
- `` ``
9
- `` ``
10
- ```````
6
+ ````````
7
+ `` ``
8
+ `` ``
9
+ `` ``
10
+ ````````
11
11
 
12
12
  # 1
13
13
  ``
14
- ````
14
+ `````
15
15
  ``
16
16
  ``
17
- ```````
17
+ ````````
18
18
 
19
19
  # 2
20
- ```````
21
- ``
22
- ```````
20
+ ````````
21
+ ``
22
+ ````````
23
23
  ``
24
- ```````
24
+ ````````
25
25
 
26
26
  # 3
27
- ```````
28
- ``
29
- ```````
30
- ``
31
- ```````
27
+ ````````
28
+ ``
29
+ ````````
30
+ ``
31
+ ````````
32
32
 
33
33
  # 4
34
- `` ``
35
- `` ``
36
- ```````
37
- ``
38
- ``
34
+ `` ``
35
+ `` ``
36
+ ````````
37
+ ``
38
+ ``
39
39
 
40
40
  # 5
41
- ```````
41
+ ````````
42
42
  ``
43
- ```````
44
- ``
45
- ```````
43
+ ````````
44
+ ``
45
+ ````````
46
46
 
47
47
  # 6
48
- ```````
48
+ ````````
49
49
  ``
50
- ```````
51
- `` ``
52
- ```````
50
+ ````````
51
+ `` ``
52
+ ````````
53
53
 
54
54
  # 7
55
- ```````
56
- ``
57
- ``
58
- ``
59
- ``
55
+ ````````
56
+ ``
57
+ ``
58
+ ``
59
+ ``
60
60
 
61
61
  # 8
62
- ```````
63
- `` ``
64
- ```````
65
- `` ``
66
- ```````
62
+ ````````
63
+ `` ``
64
+ ````````
65
+ `` ``
66
+ ````````
67
67
 
68
68
  # 9
69
- ```````
70
- `` ``
71
- ```````
72
- ``
73
- ```````
69
+ ````````
70
+ `` ``
71
+ ````````
72
+ ``
73
+ ````````
74
74
 
75
75
  # :
76
- ⬩⬩
77
- ⬩⬩
76
+ \u2B29\u2B29
77
+ \u2B29\u2B29
78
78
 
79
- ⬩⬩
80
- ⬩⬩
79
+ \u2B29\u2B29
80
+ \u2B29\u2B29
81
81
 
82
82
  # $
83
83
  \s\s
@@ -86,88 +86,88 @@ module Termclock
86
86
  \s\s
87
87
  \s\s
88
88
  # A
89
- ```````
90
- `` ``
91
- ```````
92
- `` ``
93
- `` ``
89
+ ````````
90
+ `` ``
91
+ ````````
92
+ `` ``
93
+ `` ``
94
94
 
95
95
  # B
96
- ``````
97
- `` ``
98
- ``````
99
- `` ``
100
- ``````
96
+ ````````
97
+ `` ``
98
+ ````````
99
+ `` ``
100
+ ````````
101
101
 
102
102
  # C
103
- ```````
103
+ ````````
104
104
  ``
105
105
  ``
106
106
  ``
107
- ```````
107
+ ````````
108
108
 
109
109
  # D
110
- `````
111
- `` ``
112
- `` ``
113
- `` ``
114
- `````
110
+ ````````
111
+ `` ``
112
+ `` ``
113
+ `` ``
114
+ ````````
115
115
 
116
116
  # E
117
- ```````
117
+ ````````
118
118
  ``
119
- ```````
119
+ ````````
120
120
  ``
121
- ```````
121
+ ````````
122
122
 
123
123
  # F
124
- ```````
124
+ ````````
125
125
  ``
126
- ```````
126
+ ````````
127
127
  ``
128
128
  ``
129
129
 
130
130
  # G
131
- ```````
131
+ ````````
132
132
  ``
133
133
  ``
134
- `` ```
134
+ `` ````
135
135
  ````````
136
136
 
137
137
  # H
138
- `` ``
139
- `` ``
140
- ```````
141
- `` ``
142
- `` ``
138
+ `` ``
139
+ `` ``
140
+ ````````
141
+ `` ``
142
+ `` ``
143
143
 
144
144
  # I
145
- ```````
145
+ ````````
146
146
  `
147
147
  `
148
148
  `
149
- ```````
149
+ ````````
150
150
 
151
151
  # J
152
- ```````
153
- ``
154
- ``
155
- `` ``
156
- ``````
152
+ ````````
153
+ ``
154
+ ``
155
+ `` ``
156
+ ```````
157
157
 
158
158
  # K
159
- `` ``
160
- `` ``
161
- ````
162
- `` ``
163
- `` ``
159
+ `` ``
160
+ `` ``
161
+ `````
162
+ `` ``
163
+ `` ``
164
164
 
165
165
  # L
166
166
  ``
167
167
  ``
168
168
  ``
169
169
  ``
170
- ``````
170
+ ````````
171
171
 
172
172
  # M
173
173
  ``` ```
@@ -177,11 +177,11 @@ module Termclock
177
177
  `` ``
178
178
 
179
179
  # N
180
- ```` ``
181
- `` ` ``
182
- `` ` ``
183
- `` ` ``
184
- `` ```
180
+ ```` ``
181
+ `` `` ``
182
+ `` `` ``
183
+ `` `` ``
184
+ `` ````
185
185
 
186
186
  # O
187
187
  ````````
@@ -198,25 +198,25 @@ module Termclock
198
198
  ``
199
199
 
200
200
  # Q
201
- ```````
202
- `` ``
203
- ```````
204
- ``
205
- ``
201
+ ````````
202
+ `` ``
203
+ ````````
204
+ ``
205
+ ``
206
206
 
207
207
  # R
208
- ```````
208
+ ````````
209
+ `` ``
210
+ ````````
211
+ `````
209
212
  `` ``
210
- ```````
211
- ````
212
- `` ``
213
213
 
214
214
  # S
215
- ```````
215
+ ````````
216
216
  ``
217
- ```````
218
- ``
219
- ```````
217
+ ````````
218
+ ``
219
+ ````````
220
220
 
221
221
  # T
222
222
  ````````
@@ -226,32 +226,32 @@ module Termclock
226
226
  ``
227
227
 
228
228
  # U
229
- `` ``
230
- `` ``
231
- `` ``
232
- `` ``
233
- ```````
229
+ `` ``
230
+ `` ``
231
+ `` ``
232
+ `` ``
233
+ ````````
234
234
 
235
235
  # V
236
- `` ``
237
- `` ``
238
- `` ``
236
+ `` ``
237
+ `` ``
238
+ `` ``
239
239
  `` ``
240
240
  `
241
241
 
242
242
  # W
243
- `` ``
244
- `` ``
245
- `` ``
246
- `` ` ``
247
- `````````
243
+ `` ``
244
+ `` ``
245
+ `` ``
246
+ `` ` ``
247
+ ````````
248
248
 
249
249
  # X
250
- `` ``
251
- `` ``
252
- ``
253
- `` ``
254
- `` ``
250
+ ` `
251
+ ` `
252
+ `
253
+ ` `
254
+ ` `
255
255
 
256
256
  # Y
257
257
  `` ``
@@ -283,24 +283,38 @@ module Termclock
283
283
  end.freeze
284
284
 
285
285
  def transform_characters!(arg)
286
+ @@transformed ||= nil
287
+ fail RuntimeError, 'Characters already transformed!' if @@transformed
288
+ @@transformed ||= true
289
+
286
290
  @@characters.values.each { |x|
287
291
  stripped = x.strip[0]
288
- x.gsub!(stripped, arg) if stripped
292
+ chars = arg.chars.rotate(-1)
293
+
294
+ if stripped
295
+ replace_with = x.chars.map { |y|
296
+ chars = arg.chars.rotate(-1) if y == ?\n
297
+ next(y) if y != stripped
298
+ chars.rotate!(1)[0]
299
+ }.join
300
+
301
+ x.replace(replace_with)
302
+ end
289
303
  }
290
304
  end
291
305
 
292
306
  def display(c)
293
- j = ['', '']
307
+ j = []
294
308
 
295
- c.upcase.chars.map! { |x|
296
- @@characters.fetch(x, x).split(?\n.freeze)
309
+ c.upcase.each_char { |x|
310
+ @@characters.fetch(x, x).split(NEWLINE)
297
311
  .each_with_index { |z, i|
298
312
  _j = j[i]
299
313
  _j && _j << z || j[i] = z
300
314
  }
301
315
  }
302
316
 
303
- j.join(?\n.freeze)
317
+ j.join(NEWLINE)
304
318
  end
305
319
  end
306
320
  end
@@ -1,5 +1,5 @@
1
1
  class String
2
- def gradient(*all_rgbs, bg: false, exclude_spaces: false)
2
+ def gradient(*all_rgbs, bg: false, exclude_spaces: false, bold: false)
3
3
  temp = ''
4
4
 
5
5
  r, g, b = all_rgbs[0]
@@ -45,6 +45,8 @@ class String
45
45
  _g = _g.send(g_op, g_val * -1) if g_op
46
46
  _b = _b.send(b_op, b_val * -1) if b_op
47
47
 
48
+ temp << "\e[1m" if bold
49
+
48
50
  i = -1
49
51
  while (i += 1) < len
50
52
  _c = c[i]
@@ -0,0 +1,73 @@
1
+ module Termclock
2
+ @@cpu_usage = 0
3
+ @@cpu_usage_t = Thread.new { }
4
+
5
+ @@current_net_usage = ''
6
+ @@current_net_usage_t = Thread.new { }
7
+
8
+ class << self
9
+ def system_info(width, tc1, tc2, bold)
10
+ unless @@cpu_usage_t.alive?
11
+ @@cpu_usage_t = Thread.new { @@cpu_usage = LS::CPU.usage(0.25) }
12
+ end
13
+
14
+ unless @@current_net_usage_t.alive?
15
+ @@current_net_usage_t = Thread.new do
16
+ _m = LS::Net.current_usage(0.25)
17
+
18
+ _dl = LS::PrettifyBytes.convert_short_binary(_m[:received], precision: 0)
19
+ _ul = LS::PrettifyBytes.convert_short_binary(_m[:transmitted], precision: 0)
20
+
21
+ @@current_net_usage = "\u{1F4CA} Curr. DL/UL: #{sprintf "%-7s", _dl} | #{sprintf "%7s", _ul}"
22
+ end
23
+ end
24
+
25
+ cpu = "\u{1F9E0} CPU: #{sprintf "%5s", @@cpu_usage}% (#{LS::CPU.count_online} / #{LS::CPU.count})"
26
+
27
+ battery = if LS::Battery.present?
28
+ stat = LS::Battery.stat
29
+ emoji = LS::Battery.charging? ? "\u{1F4A1}" : "\u{1F50B}"
30
+ plug = LS::Battery.charging? ? "\u{1F50C} " : ''.freeze
31
+ "#{emoji} Battery: #{stat[:charge].to_i}% (#{plug}#{stat[:status]})"
32
+ else
33
+ ''.freeze
34
+ end
35
+
36
+ user = "\u{1F481} User: #{LS::User.get_current_user.capitalize}"
37
+ hostname = "\u{1F4BB} Hostname: #{LS::OS.hostname}"
38
+
39
+ _m = LS::Net.total_bytes
40
+ ip = "\u{1F30F} IP Addr: #{LS::Net.ipv4_private}"
41
+
42
+ net_usage = "\u{1F4C8} Totl. DL/UL: #{sprintf "%-7s", LS::PrettifyBytes.convert_short_binary(_m[:received], precision: 0)}"\
43
+ " | #{sprintf "%7s", LS::PrettifyBytes.convert_short_binary(_m[:transmitted], precision: 0)}"
44
+
45
+ _m = LS::Memory.stat
46
+ memory = "\u{1F3B0} Mem: #{LS::PrettifyBytes.convert_short_binary(_m[:used].to_i * 1024)}"\
47
+ " / #{LS::PrettifyBytes.convert_short_binary(_m[:total].to_i * 1024)}"\
48
+ " (#{_m[:percent_used].to_i}%)"
49
+
50
+ _m = LS::Swap.stat
51
+ swap = "\u{1F300} Swap: #{LS::PrettifyBytes.convert_short_binary(_m[:used].to_i * 1024)}"\
52
+ " / #{LS::PrettifyBytes.convert_short_binary(_m[:total].to_i * 1024)}"\
53
+ " (#{_m[:percent_used].to_i}%)"
54
+
55
+ _m = LS::Filesystem.stat
56
+ fs = "\u{1F4BD} FS: #{LS::PrettifyBytes.convert_short_binary(_m[:used].to_i)}"\
57
+ " / #{LS::PrettifyBytes.convert_short_binary(_m[:total].to_i)}"\
58
+ " (#{_m[:used].to_i*(100).fdiv(_m[:total].to_i).round(2)}%)"
59
+
60
+ process = "\u{1F9EE} Process: #{LS::Process.count}"
61
+
62
+ max_l = [hostname, process, ip, battery, @@current_net_usage, net_usage].map(&:length).max + 4
63
+
64
+ <<~EOF.gradient(tc1, tc2, exclude_spaces: true, bold: bold)
65
+ \s#{user}#{?\s.*(width.-(user.length + max_l).abs)}#{hostname}
66
+ \s#{cpu}#{?\s.*(width.-(cpu.length + max_l).abs)}#{battery}
67
+ \s#{memory}#{?\s.*(width.-(memory.length + max_l).abs)}#{ip}
68
+ \s#{swap}#{?\s.*(width.-(swap.length + max_l).abs)}#{@@current_net_usage}
69
+ \s#{fs}#{?\s.*(width.-(fs.length + max_l).abs)}#{net_usage}
70
+ EOF
71
+ end
72
+ end
73
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Termclock
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.5"
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: termclock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sourav Goswami
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-12 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: linux_stat
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.3.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.1
13
27
  description: A clock for Linux VTE
14
28
  email:
15
29
  - souravgoswami@protonmail.com
@@ -24,6 +38,7 @@ files:
24
38
  - lib/termclock/main.rb
25
39
  - lib/termclock/parse_characters.rb
26
40
  - lib/termclock/string.rb
41
+ - lib/termclock/system_info.rb
27
42
  - lib/termclock/version.rb
28
43
  homepage: https://github.com/souravgoswami/termclock
29
44
  licenses: