graphina 0.1.0 → 0.2.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: 1f570978e09506bff882553a4c39ab03e74af7cadd008513e0167b50493343cf
4
- data.tar.gz: b2f5b74fb597d1935592f586856495189cce766c3c160003ed89632d0276dabd
3
+ metadata.gz: cca65e421a6d4a67744edd6f1acc65219c29f16b5d1decf0e886c9208e9d9906
4
+ data.tar.gz: ff1f2e42524b8eae0c6df646b010740bc312f8348d03727639a85b097835de4d
5
5
  SHA512:
6
- metadata.gz: d4c746f79af45187c5a239ac8d6907420adb9aa315fedb9b8f37a5bc1e89c4a37d523a3152597f1e48229297787fe8d49e055e54397f420159e68d050fdb320b
7
- data.tar.gz: e9a6465440a088a96e71eebd562982a91fb5641e9350345c4e0172cb474cce4be180e34ff6bd573a1b8a259f5bb241c35392629c70b66c7ac666f37343aed4e8
6
+ metadata.gz: 4fd6afb55759a51ff4b5d6d52723af3e7a29e888273784aa8b637be5591486093bc65fd9315c0a8c02eb83a4e7b53b604b19a1c809f0dc27cdcfd900f49370d0
7
+ data.tar.gz: f1ec824b10b71a579d9c10e9ffb5642943313952c46b85d199d2d903e60cc2d87b0911fbf9f32a8e54883b72e29b1306e3b64e0b5b141635df0834b0ed41c668
data/.utilsrc ADDED
@@ -0,0 +1,52 @@
1
+ # vim: set ft=ruby:
2
+
3
+ search do
4
+ prune_dirs /\A(\.svn|\.git|\.terraform|CVS|tmp|coverage|corpus|pkg|\.yardoc|doc)\z/
5
+ skip_files /(\A\.|\.sw[pon]\z|\.(log|fnm|jpg|jpeg|png|pdf|svg)\z|\A(tags|cscope\.out)\z|~\z)/i
6
+ end
7
+
8
+ discover do
9
+ prune_dirs /\A(\.svn|\.git|\.terraform|\.yardoc|CVS|tmp|coverage|corpus|pkg|\.yardoc|doc)\z/
10
+ skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
11
+ index_expire_after 3_600
12
+ end
13
+
14
+ strip_spaces do
15
+ prune_dirs /\A(\..*|CVS|pkg|\.yardoc)\z/
16
+ skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
17
+ end
18
+
19
+ probe do
20
+ test_framework :rspec
21
+ end
22
+
23
+ ssh_tunnel do
24
+ terminal_multiplexer :tmux
25
+ login_session "/home/#{ENV['USER']}"
26
+ end
27
+
28
+ classify do
29
+ shift_path_by_default 1
30
+ end
31
+
32
+ code_indexer do
33
+ verbose false
34
+
35
+ gems = %w[
36
+ amatch
37
+ const_conf
38
+ base64
39
+ bigdecimal
40
+ complex_config
41
+ date
42
+ json
43
+ ostruct
44
+ search_ui
45
+ term-ansicolor
46
+ tins
47
+ ]
48
+
49
+ paths {
50
+ %w[ lib ] + gems.map { `bundle show #{it}` }.map(&:chomp)
51
+ }
52
+ end
data/README.md CHANGED
@@ -5,11 +5,14 @@
5
5
  A Ruby gem for creating terminal-based data visualizations with real-time
6
6
  graphical displays using Unicode characters and ANSI styling 🎨📊
7
7
 
8
+ ## Screenshots (run in tmux)
9
+
10
+ ![graphina Screenshot](./img/graphina.png "graphina Screenshot")
11
+
8
12
  ## Documentation
9
13
 
10
14
  Complete API documentation is available at: [GitHub.io](https://flori.github.io/graphina/)
11
15
 
12
-
13
16
  ## Features
14
17
 
15
18
  - **Real-time Data Visualization**: Create dynamic, continuously updating
@@ -51,12 +54,47 @@ Or install the gem directly:
51
54
  gem install graphina
52
55
  ```
53
56
 
57
+ ## Panel Configuration Setup
58
+
59
+ Graphina now supports predefined panel configurations. You can create a
60
+ `panels.yml` file in your configuration directory
61
+ (`"$XDG_CONFIG_HOME/graphina"`, usually `~/.config/graphina/panels.yml`) to
62
+ define reusable panel setups.
63
+
64
+ To install one of the included defaults you can try
65
+ ```bash
66
+ graphina -S default
67
+ ```
68
+
69
+ which attempts to infer a default config for your platform.
70
+
71
+
72
+ Currently these platforms are included:
73
+
74
+ - MacOS x86 64 see [x86_64-darwin](lib/graphina/panel/defaults/x86_64-darwin.yml).
75
+ - Linux x86 64 see [x86_64-linux](lib/graphina/panel/defaults/x86_64-linux.yml).
76
+
77
+ These can be installed eplicitly via:
78
+ ```bash
79
+ graphina -S x86_64-darwin
80
+ ```
81
+
82
+ Then to use a specific panel:
83
+ ```bash
84
+ graphina -P cpu_usage_percentage
85
+ ```
86
+
87
+ To see all available panels:
88
+ ```bash
89
+ graphina
90
+ ```
91
+
54
92
  ## Usage
55
93
 
56
94
  ### 1. Basic Usage with Random Data
57
95
 
58
96
  ```bash
59
- # Simple usage with random data
97
+ # Simple usage with random data or interactive panel selection
60
98
  graphina
61
99
  ```
62
100
 
@@ -71,19 +109,22 @@ graphina -t "CPU Usage (faked)" -f blue -b black
71
109
 
72
110
  ```bash
73
111
  # Monitor CPU usage in real-time
74
- graphina -t 'CPU Usage' -n 1 -F as_percent -e "top -l 1 -n 0 | grep 'CPU usage' | awk '{print \$3+\$5}' | sed 's/%//'"
112
+ graphina -t 'CPU Usage' -n 1 -F as_percent -e "top -l 1 -n 0 | grep 'CPU usage' | awk '{print \$3+\$5}'"
75
113
  ```
76
114
 
77
115
  ### 4. Using Predefined Panels
78
116
 
79
117
  ```bash
80
118
  # Use a predefined panel configuration
81
- graphina -P cpu
119
+ graphina -P cpu_usage_percentage
82
120
 
83
121
  # Interactive panel selection
84
122
  graphina
85
123
  ```
86
124
 
125
+ See below under **Panel Configuration** how to setup these panel configurations
126
+ on your system.
127
+
87
128
  ### 5. Custom Data Source
88
129
 
89
130
  ```ruby
@@ -113,38 +154,6 @@ graph = Graphina::Graph.new(
113
154
  graph.start
114
155
  ```
115
156
 
116
- ## Panel Configuration
117
-
118
- Graphina now supports predefined panel configurations. Create a `panels.yml`
119
- file in your configuration directory (`"$XDG_CONFIG_HOME/graphina"`, usually
120
- `~/.config/graphina/panels.yml`) to define reusable panel setups:
121
-
122
- ```yaml
123
- cpu:
124
- title: "CPU Usage (%)"
125
- interval: 1
126
- command: "top -l 1 -n 0 | awk '/^CPU usage:/ { print \$3 + \$5 }'"
127
- format_value: as_percent
128
- color: '#ff5f00'
129
- memory:
130
- title: "Memory Usage"
131
- interval: 1
132
- command: "free -b | awk '/^Mem:/ { print \$4 }'"
133
- format_value: as_bytes
134
- color: '#87d700'
135
- color_secondary: '#d7ff00'
136
- ```
137
-
138
- To use a specific panel:
139
- ```bash
140
- graphina -P cpu
141
- ```
142
-
143
- To see all available panels:
144
- ```bash
145
- graphina
146
- ```
147
-
148
157
  ## Command Line Options
149
158
 
150
159
  ```
@@ -160,8 +169,9 @@ Usage: graphina [OPTIONS]
160
169
  -c COLOR Primary color (default: derived from title)
161
170
  -C COLOR Secondary color (default: derived from primary)
162
171
  -F FORMAT Format function (:as_bytes, :as_hertz, :as_celsius, :as_percent, :as_default, default: :as_default)
172
+ -P PANEL Use predefined panel configuration (default: interactive selection)
173
+ -S CONFIG Setup panel config (default infers from OS)
163
174
  -e COMMAND External command to execute for data values (default: random data)
164
- -P PANEL Panel name to use from configuration (default: interactive selection)
165
175
  -h this help
166
176
  ```
167
177
 
data/Rakefile CHANGED
@@ -20,7 +20,7 @@ GemHadar do
20
20
  EOT
21
21
  test_dir 'spec'
22
22
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.AppleDouble', '.bundle',
23
- '.yardoc', 'tags', 'doc'
23
+ '.yardoc', 'tags', 'doc', 'cscope.out'
24
24
  package_ignore '.gitignore', '.contexts', '.github'
25
25
 
26
26
  readme 'README.md'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/bin/graphina CHANGED
@@ -20,6 +20,7 @@ def usage
20
20
  -C COLOR Secondary color (default: derived from primary)
21
21
  -F FORMAT Format function (:as_bytes, :as_hertz, :as_celsius, :as_percent, :as_default, default: :as_default)
22
22
  -P PANEL Use predefined panel configuration (default: interactive selection)
23
+ -S CONFIG Setup panel config (default infers from OS)
23
24
  -e COMMAND External command to execute for data values (default: random data)
24
25
  -h this help
25
26
 
@@ -37,9 +38,14 @@ def usage
37
38
  0
38
39
  end
39
40
 
40
- $opts = go 't:n:r:f:b:c:C:F:e:P:h'
41
+ $opts = go 't:n:r:f:b:c:C:F:e:P:S:h'
41
42
 
42
43
  $opts[?h] and exit usage
44
+ if $opts[?S]
45
+ setup = Graphina::Setup.new(default_panels_name: $opts[?S])
46
+ setup.install_default_panels
47
+ exit
48
+ end
43
49
 
44
50
  panel = Graphina::Panel.new
45
51
  case
data/graphina.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: graphina 0.1.0 ruby lib
2
+ # stub: graphina 0.2.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "graphina".freeze
6
- s.version = "0.1.0".freeze
6
+ s.version = "0.2.0".freeze
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]
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
12
12
  s.description = "Gem that provides terminal-based data visualization capabilities, enabling\ndevelopers to create dynamic, real-time graphical displays of numerical data\ndirectly within terminal environments using Unicode characters and ANSI\nstyling.\n".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.executables = ["graphina".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/graphina.rb".freeze, "lib/graphina/graph.rb".freeze, "lib/graphina/graph/display.rb".freeze, "lib/graphina/graph/display/cell.rb".freeze, "lib/graphina/graph/formatters.rb".freeze, "lib/graphina/graphina_config.rb".freeze, "lib/graphina/panel.rb".freeze, "lib/graphina/panel/chooser.rb".freeze, "lib/graphina/version.rb".freeze]
16
- s.files = ["Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/graphina".freeze, "graphina.gemspec".freeze, "lib/graphina.rb".freeze, "lib/graphina/graph.rb".freeze, "lib/graphina/graph/display.rb".freeze, "lib/graphina/graph/display/cell.rb".freeze, "lib/graphina/graph/formatters.rb".freeze, "lib/graphina/graphina_config.rb".freeze, "lib/graphina/panel.rb".freeze, "lib/graphina/panel/chooser.rb".freeze, "lib/graphina/version.rb".freeze]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/graphina.rb".freeze, "lib/graphina/graph.rb".freeze, "lib/graphina/graph/display.rb".freeze, "lib/graphina/graph/display/cell.rb".freeze, "lib/graphina/graph/formatters.rb".freeze, "lib/graphina/graphina_config.rb".freeze, "lib/graphina/panel.rb".freeze, "lib/graphina/panel/chooser.rb".freeze, "lib/graphina/setup.rb".freeze, "lib/graphina/version.rb".freeze]
16
+ s.files = [".utilsrc".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/graphina".freeze, "graphina.gemspec".freeze, "img/graphina.png".freeze, "lib/graphina.rb".freeze, "lib/graphina/graph.rb".freeze, "lib/graphina/graph/display.rb".freeze, "lib/graphina/graph/display/cell.rb".freeze, "lib/graphina/graph/formatters.rb".freeze, "lib/graphina/graphina_config.rb".freeze, "lib/graphina/panel.rb".freeze, "lib/graphina/panel/chooser.rb".freeze, "lib/graphina/panel/defaults/x86_64-darwin.yml".freeze, "lib/graphina/panel/defaults/x86_64-linux.yml".freeze, "lib/graphina/setup.rb".freeze, "lib/graphina/version.rb".freeze]
17
17
  s.homepage = "https://github.com/flori/graphina".freeze
18
18
  s.licenses = ["MIT".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "Graphina - Gem for creating terminal-based data visualizations with real-time\ngraphical displays using Unicode characters and ANSI styling.\n".freeze, "--main".freeze, "README.md".freeze]
data/img/graphina.png ADDED
Binary file
@@ -62,7 +62,7 @@ class Graphina::Graph
62
62
  #
63
63
  # @return [ String ] the temperature value formatted with a degree Celsius symbol
64
64
  def as_celsius(value)
65
- "#{value}°"
65
+ "#{value}"
66
66
  end
67
67
 
68
68
  # The as_percent method formats a numeric value as a percentage string
@@ -0,0 +1,35 @@
1
+ cpu_usage_percentage:
2
+ title: "CPU Usage (%)"
3
+ interval: 1
4
+ command: |
5
+ top -l 1 -n 0 | awk '/^CPU usage:/ { printf "%.1f", $3 + $5 }'
6
+ format_value: as_percent
7
+ color: '#fe8019'
8
+ cpu_temperature:
9
+ title: "CPU Temperature (℃) "
10
+ interval: 1
11
+ command: |
12
+ osx-cpu-temp -C | tr -dc '0-9.'
13
+ format_value: as_celsius
14
+ color: '#fb4934'
15
+ cpu_clock_average:
16
+ title: "CPU Clock Speed (MHz)"
17
+ interval: 1
18
+ command: |
19
+ sudo bash -c 'powermetrics --show-usage-summary -s cpu_power & pid=$!; sleep 1; kill $pid'| awk '/CPU Average/ { count++; gsub(/.*\(/, ""); gsub(/\ .*/, ""); sum += $0 } END { if (count > 0) { print 1000000*sum/count } else { print 0 } }'
20
+ format_value: as_hertz
21
+ color: '#b8bb26'
22
+ memory_usage:
23
+ title: "Memory Usage"
24
+ interval: 1
25
+ command: |
26
+ free -b | awk '/^Mem:/ { print $4 }'
27
+ format_value: as_bytes
28
+ color: '#689d6a'
29
+ memory_usage_percentage:
30
+ title: "Memory Usage (%)"
31
+ interval: 1
32
+ command: |
33
+ free -b | awk '/^Mem:/ { printf "%.1f", 100 * $4 / $2 }'
34
+ format_value: as_percent
35
+ color: '#689d6a'
@@ -0,0 +1,35 @@
1
+ cpu_usage_percentage:
2
+ title: "CPU Usage (%)"
3
+ interval: 1
4
+ command: |
5
+ top -b -n 1 | awk '/^%Cpu\(s\)/ { print $2 + $4 + $6 }'
6
+ format_value: as_percent
7
+ color: '#fe8019'
8
+ cpu_temperature:
9
+ title: "CPU Temperature (℃) "
10
+ interval: 1
11
+ command: |
12
+ sensors | awk '/^Tctl:/ { print $2 }' | tr -dc '0-9.'
13
+ format_value: as_celsius
14
+ color: '#fb4934'
15
+ cpu_clock_average:
16
+ title: "CPU Clock Speed (MHz)"
17
+ interval: 1
18
+ command: |
19
+ awk '/cpu MHz/ {sum += $4; count++} END {if (count > 0) print 1000000 * sum/count}' /proc/cpuinfo
20
+ format_value: as_hertz
21
+ color: '#b8bb26'
22
+ memory_usage:
23
+ title: "Memory Usage"
24
+ interval: 1
25
+ command: |
26
+ free -b | awk '/^Mem:/ { print $3 }'
27
+ format_value: as_bytes
28
+ color: '#689d6a'
29
+ memory_usage_percentage:
30
+ title: "Memory Usage (%)"
31
+ interval: 1
32
+ command: |
33
+ free -b | awk '/^Mem:/ { printf \"%.1f\", 100 * $3 / $2 }'
34
+ format_value: as_percent
35
+ color: '#689d6a'
@@ -0,0 +1,112 @@
1
+ require 'fileutils'
2
+
3
+ # A class that handles the setup and configuration of Graphina
4
+ #
5
+ # The Setup class provides functionality for installing default panel
6
+ # configurations into the user's configuration directory. It manages the
7
+ # detection of platform-specific default configurations and facilitates the
8
+ # copying of these configurations to the appropriate location for use with the
9
+ # Graphina application
10
+ #
11
+ # @example
12
+ # setup = Graphina::Setup.new(default_panels_name: 'c64-linux')
13
+ # setup.install_default_panels
14
+ class Graphina::Setup
15
+ include FileUtils::Verbose
16
+
17
+ # The initialize method sets up a Setup instance with the specified default
18
+ # panel name
19
+ #
20
+ # This method configures a new setup object with a default panel name,
21
+ # handling the special case where the name is 'default' by setting it to nil
22
+ # instead
23
+ #
24
+ # @param default_panels_name [ String ] the name of the default panels to use
25
+ #
26
+ # @return [ Graphina::Setup ] returns the initialized Setup instance
27
+ def initialize(default_panels_name:)
28
+ default_panels_name == 'default' and default_panels_name = nil
29
+ @default_panels_name = default_panels_name
30
+ end
31
+
32
+ # The infer_default_panels_path_from_platform method attempts to determine
33
+ # the appropriate default panel configuration file path based on the current
34
+ # platform
35
+ #
36
+ # This method checks the RUBY_PLATFORM environment variable to identify
37
+ # whether the system is running on an x86_64 Darwin (macOS) or x86_64 Linux
38
+ # platform
39
+ #
40
+ # @return [ Pathname, nil ] returns a Pathname object pointing to the
41
+ # detected default panels configuration file if the platform is supported and
42
+ # the file exists, or nil if the platform is not supported or the file does
43
+ # not exist
44
+ def infer_default_panels_path_from_platform
45
+ case RUBY_PLATFORM
46
+ when /\Ax86_64-darwin/, /\Ax86_64-linux/
47
+ path = default_panels_path($&)
48
+ if path.exist?
49
+ path
50
+ end
51
+ else
52
+ STDERR.puts "Default panel configuration cannot be inferred for platform!"
53
+ nil
54
+ end
55
+ end
56
+
57
+ # The default_panels_path method constructs and returns a Pathname object
58
+ # for a default panels configuration file
59
+ #
60
+ # This method takes a panel name parameter and uses it to build a file path
61
+ # pointing to a default panels configuration file
62
+ # located in the panel defaults directory. It checks if the constructed path
63
+ # exists and returns it if so, or nil if the file doesn't exist
64
+ #
65
+ # @param panels_name [ String ] the name of the panels configuration to look up
66
+ #
67
+ # @return [ Pathname, nil ] a Pathname object pointing to the default panels
68
+ # configuration file if it exists, or nil if it doesn't exist
69
+ def default_panels_path(panels_name)
70
+ path = Pathname.new(__FILE__).dirname + 'panel' + 'defaults' + (panels_name + '.yml')
71
+ if path.exist?
72
+ path
73
+ end
74
+ end
75
+
76
+ # The panels_path_exist? method checks whether the panel configuration file
77
+ # path exists in the user's configuration directory
78
+ #
79
+ # This method verifies the existence of the panels configuration file by
80
+ # querying the predefined path in the Graphina configuration module
81
+ #
82
+ # @return [ Boolean ] true if the panels configuration file exists at the
83
+ # expected location, false otherwise
84
+ def panels_path_exist?
85
+ Graphina::GraphinaConfig::PANELS_PATH.exist?
86
+ end
87
+
88
+ # The install_default_panels method installs default panel configurations
89
+ # into the user's configuration directory
90
+ #
91
+ # This method checks if a panel configuration file already exists in the
92
+ # user's configuration directory and, if not, attempts to determine the
93
+ # appropriate default panel configuration based on the platform or the
94
+ # specified default panel name, then copies the default configuration file to
95
+ # the user's configuration directory
96
+ def install_default_panels
97
+ if panels_path_exist?
98
+ STDOUT.print "#{Graphina::GraphinaConfig::PANELS_PATH.to_s.inspect} exists. Overwrite (y/n)? "
99
+ STDIN.gets !~ /\Ay/i and return
100
+ end
101
+ default_path = @default_panels_name ?
102
+ default_panels_path(@default_panels_name) :
103
+ infer_default_panels_path_from_platform
104
+ if default_path
105
+ mkdir_p Graphina::GraphinaConfig::CONFIG_DIR
106
+ cp default_path, Graphina::GraphinaConfig::PANELS_PATH
107
+ STDOUT.puts "Default panels from #{default_path.to_s.inspect} have been installed."
108
+ else
109
+ STDERR.puts "Default panels for #{@default_panels_name.inspect} could not be installed."
110
+ end
111
+ end
112
+ end
@@ -1,6 +1,6 @@
1
1
  module Graphina
2
2
  # Graphina version
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.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/graphina.rb CHANGED
@@ -13,6 +13,7 @@ require 'tins'
13
13
  module Graphina
14
14
  end
15
15
  require 'graphina/version'
16
+ require 'graphina/setup'
16
17
  require 'graphina/graphina_config'
17
18
  require 'graphina/panel'
18
19
  require 'graphina/graph'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
@@ -132,8 +132,10 @@ extra_rdoc_files:
132
132
  - lib/graphina/graphina_config.rb
133
133
  - lib/graphina/panel.rb
134
134
  - lib/graphina/panel/chooser.rb
135
+ - lib/graphina/setup.rb
135
136
  - lib/graphina/version.rb
136
137
  files:
138
+ - ".utilsrc"
137
139
  - Gemfile
138
140
  - LICENSE
139
141
  - README.md
@@ -141,6 +143,7 @@ files:
141
143
  - VERSION
142
144
  - bin/graphina
143
145
  - graphina.gemspec
146
+ - img/graphina.png
144
147
  - lib/graphina.rb
145
148
  - lib/graphina/graph.rb
146
149
  - lib/graphina/graph/display.rb
@@ -149,6 +152,9 @@ files:
149
152
  - lib/graphina/graphina_config.rb
150
153
  - lib/graphina/panel.rb
151
154
  - lib/graphina/panel/chooser.rb
155
+ - lib/graphina/panel/defaults/x86_64-darwin.yml
156
+ - lib/graphina/panel/defaults/x86_64-linux.yml
157
+ - lib/graphina/setup.rb
152
158
  - lib/graphina/version.rb
153
159
  homepage: https://github.com/flori/graphina
154
160
  licenses: