cejo 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +0 -0
  5. data/.rufo +3 -0
  6. data/.travis.yml +6 -0
  7. data/CODE_OF_CONDUCT.md +74 -0
  8. data/Gemfile +6 -0
  9. data/INSTALL +2 -0
  10. data/LICENSE +674 -0
  11. data/README.org +23 -0
  12. data/README.rdoc +28 -0
  13. data/Rakefile +6 -0
  14. data/annotations/legacy.org +11 -0
  15. data/annotations/todo.org +54 -0
  16. data/bin/console +14 -0
  17. data/bin/setup +9 -0
  18. data/cejo.gemspec +50 -0
  19. data/cejo.rdoc +5 -0
  20. data/exe/cejo +298 -0
  21. data/lib/cejo.rb +42 -0
  22. data/lib/cejo/distro/base.rb +52 -0
  23. data/lib/cejo/distro/commands.rb +26 -0
  24. data/lib/cejo/distro/current_packager.rb +18 -0
  25. data/lib/cejo/distro/help.rb +9 -0
  26. data/lib/cejo/distro/need.rb +32 -0
  27. data/lib/cejo/distro/parsed_commands.rb +23 -0
  28. data/lib/cejo/distro/translate_action.rb +11 -0
  29. data/lib/cejo/floss/archive.rb +49 -0
  30. data/lib/cejo/floss/core.rb +55 -0
  31. data/lib/cejo/floss/grab.rb +44 -0
  32. data/lib/cejo/floss/project_info.rb +28 -0
  33. data/lib/cejo/media/get.rb +54 -0
  34. data/lib/cejo/media/play.rb +45 -0
  35. data/lib/cejo/ops/brightness.rb +37 -0
  36. data/lib/cejo/ops/dots.rb +98 -0
  37. data/lib/cejo/ops/homey.rb +76 -0
  38. data/lib/cejo/ops/screenshot.rb +78 -0
  39. data/lib/cejo/ops/sysinfo.rb +27 -0
  40. data/lib/cejo/ops/volume/sound_manager.rb +45 -0
  41. data/lib/cejo/ops/volume/volume.rb +117 -0
  42. data/lib/cejo/projects/builder.rb +138 -0
  43. data/lib/cejo/projects/dwm.rb +23 -0
  44. data/lib/cejo/projects/emacs.rb +23 -0
  45. data/lib/cejo/projects/ruby.rb +23 -0
  46. data/lib/cejo/projects/st.rb +23 -0
  47. data/lib/cejo/services/folders.rb +21 -0
  48. data/lib/cejo/services/utils.rb +54 -0
  49. data/lib/cejo/version.rb +5 -0
  50. data/lib/tasks/list.rake +7 -0
  51. data/lib/tasks/man.rake +7 -0
  52. data/lib/tasks/spec.rake +5 -0
  53. data/lib/tasks/test.rake +7 -0
  54. data/man/cejo.1.ronn +0 -0
  55. data/spec/distro/action_spec.rb +21 -0
  56. data/spec/distro/base_spec.rb +67 -0
  57. data/spec/distro/commands_spec.rb +22 -0
  58. data/spec/distro/current_packager_spec.rb +17 -0
  59. data/spec/distro/need_spec.rb +22 -0
  60. data/spec/floss/archive_spec.rb +1 -0
  61. data/spec/floss/core_spec.rb +1 -0
  62. data/spec/floss/grab_spec.rb +1 -0
  63. data/spec/media/get_spec.rb +20 -0
  64. data/spec/media/play_spec.rb +41 -0
  65. data/spec/ops/ops_brightness_spec.rb +16 -0
  66. data/spec/ops/ops_volume_spec.rb +22 -0
  67. data/spec/spec_helper.rb +96 -0
  68. data/spec/utils_spec.rb +18 -0
  69. data/test/test_cejo.rb +16 -0
  70. data/test/test_distro_base.rb +13 -0
  71. data/test/test_floss.rb +13 -0
  72. data/test/test_media_get.rb +0 -0
  73. data/test/test_media_play.rb +0 -0
  74. data/test/test_ops_brightness.rb +0 -0
  75. data/test/test_ops_dots.rb +0 -0
  76. data/test/test_ops_homer.rb +0 -0
  77. data/test/test_ops_oss.rb +18 -0
  78. data/test/test_ops_screenshot.rb +0 -0
  79. data/test/test_ops_sysinfo.rb +0 -0
  80. data/test/test_ops_volume.rb +0 -0
  81. data/test/test_projects_builder.rb +0 -0
  82. data/test/test_projects_emacs.rb +0 -0
  83. metadata +468 -0
data/README.org ADDED
@@ -0,0 +1,23 @@
1
+ #+TILE: Cejo
2
+
3
+ * Cejo
4
+ Miscellaneous Unix automation and services utilities
5
+ * Sections
6
+ ** Ops
7
+ Bundle of automation tasks
8
+ ** Media
9
+ Management of media
10
+ ** Projects
11
+ Instructions to install FLOSS Project
12
+ ** Distro
13
+ A one-do-it-all package porcelain for most use Distro Linux package managers
14
+
15
+ * Install
16
+ ** rubygems
17
+ gem install cejo
18
+ ** local
19
+ rake
20
+ * Why Cejo?
21
+ Named after my grandparents: Celina & Joseph
22
+ * License
23
+ GPL version 3
data/README.rdoc ADDED
@@ -0,0 +1,28 @@
1
+ [Cejo]
2
+ Miscellaneous Unix automation and services utilities
3
+
4
+ [Sections]
5
+ [Ops]
6
+ Bundle of automation tasks
7
+
8
+ [Media]
9
+ Management of media
10
+
11
+ [Projects]
12
+ Instructions to install FLOSS Project
13
+
14
+ [Distro]
15
+ A one-do-it-all package porcelain for most use Distro Linux package managers
16
+
17
+ [Install]
18
+ [rubygems]
19
+ gem install cejo
20
+
21
+ [local]
22
+ rake
23
+
24
+ [Why Cejo?]
25
+ Named after my grandparents: Celina & Joseph
26
+
27
+ [License]
28
+ GPL version 3
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,11 @@
1
+ * gemspec
2
+ #+begin_src ruby
3
+ spec.executables = spec.files.grep(%r{^exec/}) { |f| File.basename(f) }
4
+
5
+ spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
6
+ spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
7
+ spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
8
+
9
+ # Specify which files should be added to the gem when it is released.
10
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
11
+ #+end_src
@@ -0,0 +1,54 @@
1
+ #+TILE: Timeline
2
+
3
+ * Help
4
+ * Services
5
+ ** DONE Add simpler ioc
6
+ * Hives
7
+ ** TODO Each hive has its own description to avoid duplication
8
+ * Features
9
+ ** DONE Each feature has its own description to avoid duplication
10
+ * Sensible default but Configurable
11
+ ** Ops/Oss
12
+ - choose which project to manage
13
+ - choose folder to store projects
14
+ - parser if list is correct format
15
+ - clean up
16
+
17
+ * Easy Install
18
+ ** Rubygem
19
+ ** Podman/Docker Container
20
+ ** Ruby Auto Bootstrap
21
+ * Organization
22
+ ** Modification as branches
23
+ ** Hotfix way
24
+ * Clients
25
+ ** TODO A yet more abstract implementation
26
+ * Users
27
+ ** General User
28
+ ** Power User
29
+ ** More user interaction
30
+ * Cli
31
+ ** TODO Thor
32
+ ** TODO Better Parser
33
+ ** DONE GNU structure
34
+ <command> [opitions] <command-option> <argument>
35
+ ** DONE Return symbols
36
+ ** Prettier Cli
37
+ *** DONE Utils
38
+ *** DONE Ops/Floss
39
+ * Tests
40
+ ** TDD
41
+ ** BDD
42
+ * Fails gracefully
43
+ ** Exceptions
44
+ ** TODO Oss
45
+ ** TODO Dots
46
+ * Distro
47
+ ** Standalone App
48
+ ** TODO Distro section require different cli arg organization and parser, as way more args
49
+ * Projects
50
+ * Ops
51
+ * Media
52
+ * Refactoring
53
+ ** TODO Simpler/Smaller methods
54
+ ** DONE Floss Class needs to be cohesive. Separating it three class may help with it: clone, pull and core.
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "cejo"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+ IFS=$'\n\t'
5
+ set -vx
6
+
7
+ bundle install
8
+
9
+ # Do any other automated setup that you need to do here
data/cejo.gemspec ADDED
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/cejo'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'cejo'
7
+ spec.summary = 'Debian automation and services utilities.'
8
+ spec.description = File.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
9
+ spec.version = Cejo::VERSION
10
+ spec.author = 'EAS Barbosa'
11
+ spec.email = 'easbarbosa@tutanota.com'
12
+ spec.platform = Gem::Platform::RUBY
13
+ spec.homepage = 'https://git.sr.ht/~easbarbosa/cejo'
14
+ spec.license = 'GPL-3.0'
15
+ spec.require_paths = ['lib']
16
+ spec.bindir = 'exe'
17
+ spec.executables = %w[cejo]
18
+ spec.test_files = Dir.glob('{spec,test}/**/*.rb')
19
+ spec.metadata['homepage_uri'] = spec.homepage
20
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.0.0')
21
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(tes|spec|features)/}) }
23
+ end
24
+ spec.extra_rdoc_files = %w[README.rdoc cejo.rdoc]
25
+ spec.rdoc_options << '--title' << 'cejo' << '--main' << 'README.rdoc' << '-ri'
26
+
27
+ # production
28
+ spec.add_runtime_dependency('dry-auto_inject')
29
+ spec.add_runtime_dependency('dry-container')
30
+ spec.add_runtime_dependency('git')
31
+ spec.add_runtime_dependency('tty-spinner')
32
+
33
+ # development
34
+ spec.add_development_dependency('bundler')
35
+ spec.add_development_dependency('coderay')
36
+ spec.add_development_dependency('gem-man')
37
+ spec.add_development_dependency('gli')
38
+ spec.add_development_dependency('minitest')
39
+ spec.add_development_dependency('pry')
40
+ spec.add_development_dependency('rake')
41
+ spec.add_development_dependency('rdoc')
42
+ spec.add_development_dependency('reek')
43
+ spec.add_development_dependency('ronn')
44
+ spec.add_development_dependency('rspec')
45
+ spec.add_development_dependency('rubocop')
46
+ spec.add_development_dependency('rufo')
47
+ spec.add_development_dependency('shoulda')
48
+ spec.add_development_dependency('solargraph')
49
+ spec.add_development_dependency('sorbet')
50
+ end
data/cejo.rdoc ADDED
@@ -0,0 +1,5 @@
1
+ = cejo
2
+
3
+ Generate this with
4
+ cejo _doc
5
+ After you have described your command line interface
data/exe/cejo ADDED
@@ -0,0 +1,298 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'cejo'
5
+
6
+ require 'gli'
7
+ require 'dry-container'
8
+
9
+ # and then, there was fire.
10
+ class App
11
+ extend GLI::App
12
+
13
+ program_desc 'Debian automation and services utilities.'
14
+
15
+ version Cejo::VERSION
16
+
17
+ subcommand_option_handling :normal
18
+ arguments :normal
19
+
20
+ desc 'Describe some switch here'
21
+ switch %i[s switch]
22
+
23
+ desc 'Describe some flag here'
24
+ default_value 'the default'
25
+ arg_name 'The name of the argument'
26
+ flag %i[f flagname]
27
+
28
+ def self.services
29
+ container = Dry::Container.new
30
+ container.register(:folders, Cejo::Services::Folders.new)
31
+ container.register(:utils, Cejo::Services::Utils.new)
32
+ end
33
+
34
+ desc 'Miscellaneous system operations front-end'
35
+ arg_name 'Describe arguments to ops here'
36
+ command :ops do |c|
37
+ utils = services.resolve(:utils)
38
+
39
+ c.desc 'Manage System Volume'
40
+ c.arg '[up, down, toggle]'
41
+ c.command :volume do |volume|
42
+ volume.action do |_, _, args|
43
+ Cejo::Ops::Volume.new(utils, args.first).run
44
+ end
45
+ end
46
+
47
+ c.desc 'Mirror user DATA partition folders to $HOME'
48
+ c.arg '/folder/path/'
49
+ c.command :homey do |homey|
50
+ homey.action do |_, _, args|
51
+ Cejo::Ops::Homey.new(args.first).run
52
+ end
53
+ end
54
+
55
+ c.desc 'Mirror Lar files in $HOME.'
56
+ c.arg '/folder/path/'
57
+ c.command :dots do |dots|
58
+ dots.action do |_, _, args|
59
+ Cejo::Ops::Dots.new(utils, args.first).run
60
+ end
61
+ end
62
+
63
+ c.desc 'Display System Hardware Information.'
64
+ c.command :sysinfo do |sysinfo|
65
+ sysinfo.action do
66
+ Cejo::Ops::Sysinfo.new(utils).run
67
+ end
68
+ end
69
+
70
+ c.desc 'Take a shot of the marvelous screen'
71
+ c.arg '[full, partial]'
72
+ c.command :screenshot do |screenshot|
73
+ screenshot.action do |_, _, args|
74
+ Cejo::Ops::Screenshot.new(utils, args.first).run
75
+ end
76
+ end
77
+
78
+ c.desc 'Manage System brightness.'
79
+ c.arg '[up down]'
80
+ c.command :brightness do |brightness|
81
+ brightness.action do |_, _, args|
82
+ Cejo::Ops::Brightness.new(utils, args.first).run
83
+ end
84
+ end
85
+ end
86
+
87
+ desc 'Manage System media features'
88
+ arg_name 'Describe arguments to media here'
89
+ command :media do |c|
90
+ c.desc 'Get media pointed in url as video or audio.'
91
+ c.arg 'url [vorbis, flac, mp3]'
92
+ c.command :get do |get|
93
+ get.action do |_, _, args|
94
+ media = args.first if args
95
+ codec = args.last if args.last
96
+ Cejo::Media::Get.new(media, codec).run
97
+ end
98
+ end
99
+
100
+ c.desc 'Play file, random media in folder or media pointed in url. (mpv)'
101
+ c.arg '[url, /path/to/folder, /path/to/file]'
102
+ c.command :play do |play|
103
+ play.action do |_, _, args|
104
+ Cejo::Media::Play.new(args.first).run
105
+ end
106
+ end
107
+ end
108
+
109
+ desc 'Build Cool Projects.'
110
+ arg_name 'Describe arguments to projects here'
111
+ command :projects do |c|
112
+ c.desc 'GNU Emacs Editor'
113
+ c.command :emacs do |emacs|
114
+ emacs.action do
115
+ Cejo::Projects::Emacs.new(services).run
116
+ end
117
+ end
118
+
119
+ c.desc 'Suckless Terminal'
120
+ c.command :st do |st|
121
+ st.action do
122
+ Cejo::Projects::St.new(services).run
123
+ end
124
+ end
125
+
126
+ c.desc 'Suckless window manager'
127
+ c.command :dwm do |dwm|
128
+ dwm.action do
129
+ Cejo::Projects::Dwm.new(services).run
130
+ end
131
+ end
132
+
133
+ c.desc 'Ruby Programming language'
134
+ c.command :ruby do |ruby|
135
+ ruby.action do
136
+ Cejo::Projects::Ruby.new(services).run
137
+ end
138
+ end
139
+ end
140
+
141
+ desc 'A distro packager managers front-end just run it'
142
+ arg_name 'Describe arguments to distro here'
143
+ command :distro do |c|
144
+ utils = services.resolve(:utils)
145
+ folder = services.resolve(:folders).cejo_config
146
+ base = Cejo::Distro::Base.new(folder, utils)
147
+
148
+ c.desc 'Install a Package from Repositories'
149
+ c.arg 'arguments'
150
+ c.command :install do |install|
151
+ install.action do |_, _, args|
152
+ base.tap do |x|
153
+ x.action = :install
154
+ x.arguments = args
155
+ end.run
156
+ end
157
+ end
158
+
159
+ c.desc 'Remove One or More Installed Packages'
160
+ c.arg 'arguments'
161
+ c.command :remove do |remove|
162
+ remove.action do |_, _, args|
163
+ base.tap do |x|
164
+ x.action = :remove
165
+ x.arguments = args
166
+ end.run
167
+ end
168
+ end
169
+
170
+ c.desc 'Find a Package'
171
+ c.arg 'arguments'
172
+ c.command :search do |search|
173
+ search.action do |_, _, args|
174
+ base.tap do |x|
175
+ x.action = :search
176
+ x.arguments = args
177
+ end.run
178
+ end
179
+ end
180
+
181
+ c.desc 'Update Package Lists'
182
+ c.command :update do |update|
183
+ update.action do
184
+ base.tap do |x|
185
+ x.action = :update
186
+ end.run
187
+ end
188
+ end
189
+
190
+ c.desc 'Upgrade Installed Packages'
191
+ c.command :upgrade do |upgrade|
192
+ upgrade.action do
193
+ base.tap do |x|
194
+ x.action = :upgrade
195
+ end.run
196
+ end
197
+ end
198
+
199
+ c.desc 'Clean system residual packages dependencies'
200
+ c.arg 'arguments'
201
+ c.command :clean do |clean|
202
+ clean.action do |_, _, args|
203
+ base.tap do |x|
204
+ x.action = :clean
205
+ x.arguments = args
206
+ end.run
207
+ end
208
+ end
209
+
210
+ c.desc 'Download package binary'
211
+ c.arg 'arguments'
212
+ c.command :download do |download|
213
+ download.action do |_, _, args|
214
+ base.tap do |x|
215
+ x.action = :download
216
+ x.arguments = args
217
+ end.run
218
+ end
219
+ end
220
+
221
+ c.desc 'List installed packages'
222
+ c.arg 'arguments'
223
+ c.command :installed do |installed|
224
+ installed.action do |_, _, args|
225
+ base.tap do |x|
226
+ x.action = :installed
227
+ x.arguments = args
228
+ end.run
229
+ end
230
+ end
231
+
232
+ c.desc 'View Info About a Specific Package'
233
+ c.arg 'arguments'
234
+ c.command :info do |info|
235
+ info.action do |_, _, args|
236
+ base.tap do |x|
237
+ x.action = :info
238
+ x.arguments = args
239
+ end.run
240
+ end
241
+ end
242
+
243
+ c.desc 'Fix system issues'
244
+ c.arg 'arguments'
245
+ c.command :fix do |fix|
246
+ fix.action do |_, _, args|
247
+ base.tap do |x|
248
+ x.action = :fix
249
+ x.arguments = args
250
+ end.run
251
+ end
252
+ end
253
+ end
254
+
255
+ desc 'Grab Floss Projects Repositories source'
256
+ arg_name 'Describe arguments to floss here'
257
+ command :floss do |c|
258
+ utils = services.resolve(:utils)
259
+ folders = services.resolve(:folders)
260
+
261
+ c.desc 'Archive FLOSS Projects'
262
+ c.command :archive do |archive|
263
+ archive.action do
264
+ Cejo::Floss::Core.new(folders, utils, :archive).run
265
+ end
266
+ end
267
+
268
+ c.desc 'Grab FLOSS Projects'
269
+ c.command :grab do |grab|
270
+ grab.action do
271
+ Cejo::Floss::Core.new(folders, utils, :grab).run
272
+ end
273
+ end
274
+ end
275
+
276
+ # pre do |global, command, options, args|
277
+ # # Pre logic here
278
+ # # Return true to proceed; false to abort and not call the
279
+ # # chosen command
280
+ # # Use skips_pre before a command to skip this block
281
+ # # on that command only
282
+ # true
283
+ # end
284
+
285
+ # post do |global, command, options, args|
286
+ # # Post logic here
287
+ # # Use skips_post before a command to skip this
288
+ # # block on that command only
289
+ # end
290
+
291
+ # on_error do |exception|
292
+ # # Error logic here
293
+ # # return false to skip default error handling
294
+ # true
295
+ # end
296
+ end
297
+
298
+ exit App.run(ARGV)