cmt 0.0.3 → 0.0.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: 21823d54ba6bdc91c53704bf6361b4f07fd996169fcd5b7ae1a89c9c04781858
4
- data.tar.gz: d3ca7edc2bf754d6493e074c7ff52b53980248357528dfdf9bb2f7577620baa7
3
+ metadata.gz: ea63de6b8dc974f078ebfb115a23e601e6d9b532dba46aac1d35e8ad099fee79
4
+ data.tar.gz: 4ae37db6d7f02c28790feb78d0e1202941c8b9f8e5be6a6bb019cbc43665cc04
5
5
  SHA512:
6
- metadata.gz: aa051e339275cc4dd607b3d1eaa16e45e502133c23e22dd8a881aedfd00e8c33d6e006b3784cf4cba9e2d8ea574a25b34313fe2a6476891f0b8858c5b5d4dd0d
7
- data.tar.gz: 97eebdb9f5708aea8bbb24c505fab72b8a5318f527c5177a25a450775131bb1481208862d73087b070ee227c078efb97a2d52ccb64b9787b2cf232f40034cd77
6
+ metadata.gz: 73a5ec835865a020fb23edb0f28c83e43f83b8828efc621f041be0a4781c224d671b5145c5f991637089050ee0a21867107ee7dcd4205ce194a4436532743e68
7
+ data.tar.gz: 5694d4e88cf8f841dc088e3828dea22393e926bffe2ce58dccf0da7fa16156932960577148bb4f0c63078c4fd5a34930b4c017a8c79cc59ee62b81589b72d425
data/lib/cmt.rb CHANGED
@@ -1,31 +1,42 @@
1
- require "thor"
2
- require "pathname"
3
- require "fileutils"
4
- require "json"
5
- require "logger"
6
-
7
- require_relative "config/git_config"
8
- require_relative "dotfiles/dotfiles_cli"
9
- require_relative "pkg/pkg"
10
- require_relative "version"
11
-
12
- $logger = Logger.new($stdout)
13
- $logger.formatter = proc do |severity, datetime, _progname, msg|
14
- date_format = datetime.strftime("%Y-%m-%d %H:%M:%S")
15
- JSON.dump(date: date_format, severity: severity.ljust(5), pid: "##{Process.pid}", message: msg) + "\n" # rubocop:disable Style/StringConcatenation
16
- end
1
+ require 'thor'
2
+ require 'pathname'
3
+ require 'fileutils'
4
+ require 'json'
5
+
6
+ require_relative 'config/git_config'
7
+ require_relative 'env/env_cli'
8
+ require_relative 'pkg/pkg'
9
+ require_relative 'util/log'
10
+ require_relative 'version'
11
+
12
+ class Cmt < Pkg
13
+ desc 'init', 'Init'
14
+ option :force, type: :boolean, default: false
15
+ def init(repo)
16
+ force = options['force']
17
+
18
+ if File.exist? $CONFIG_DIR
19
+ if force
20
+ FileUtils.rm_rf($CONFIG_DIR)
21
+ else
22
+ Log::LOGGER.error("Config already exists at '#{$CONFIG_DIR}'")
23
+ abort("Config already exists at '#{$CONFIG_DIR}'")
24
+ end
25
+ end
26
+
27
+ `git clone #{repo} #{$CONFIG_DIR}`
28
+ end
17
29
 
18
- class Cmt < Thor
19
- desc "config SUBCOMMAND ...ARGS", "manage set of tracked repositories"
20
- subcommand "config", GitConfig
30
+ desc 'config SUBCOMMAND ...ARGS', 'manage set of tracked repositories'
31
+ subcommand 'config', GitConfig
21
32
 
22
- desc "dotfiles SUBCOMMAND ...ARGS", "manage set of tracked repositories"
23
- subcommand "dotfiles", DotfilesCli
33
+ desc 'env SUBCOMMAND ...ARGS', 'manage set of tracked repositories'
34
+ subcommand 'env', EnvCli
24
35
 
25
- desc "pkg SUBCOMMAND ...ARGS", "manage set of tracked repositories"
26
- subcommand "pkg", Pkg
36
+ # desc "pkg SUBCOMMAND ...ARGS", "manage set of tracked repositories"
37
+ # subcommand "pkg", Pkg
27
38
 
28
- desc "version", "Print version"
39
+ desc 'version', 'Print version'
29
40
  def version
30
41
  puts(VERSION)
31
42
  end
data/lib/config/config.rb CHANGED
@@ -1,18 +1,18 @@
1
- require "thor"
2
- require "fileutils"
1
+ require 'thor'
2
+ require 'fileutils'
3
3
 
4
- $CONFIG_DIR = File.join(Dir.home, ".config", "cmt")
4
+ $CONFIG_DIR = File.join(Dir.home, '.config', 'cmt')
5
5
 
6
6
  class Config
7
7
  def self.get_config_json(file, default_config)
8
8
  FileUtils.mkdir_p File.dirname(file)
9
- File.write(file, JSON.pretty_generate(default_config, { indent: " " })) unless File.exist?(file)
9
+ File.write(file, JSON.pretty_generate(default_config, { indent: ' ' })) unless File.exist?(file)
10
10
 
11
11
  config = JSON.load_file(file)
12
12
  default_config.merge(config)
13
13
  end
14
14
 
15
15
  def self.write_config_file(file, config)
16
- File.write(file, JSON.pretty_generate(config, { indent: " " }))
16
+ File.write(file, JSON.pretty_generate(config, { indent: ' ' }))
17
17
  end
18
18
  end
@@ -1,27 +1,11 @@
1
- require "thor"
1
+ require 'thor'
2
2
 
3
- require_relative "config"
3
+ require_relative 'config'
4
+ require_relative '../util/log'
4
5
 
5
6
  class GitConfig < Thor
6
- desc "init", "Init"
7
- option :force, type: :boolean, default: false
8
- def init(repo)
9
- force = options["force"]
10
-
11
- if File.exist? $CONFIG_DIR
12
- if force
13
- FileUtils.rm_rf($CONFIG_DIR)
14
- else
15
- $logger.error("Config already exists at '#{$CONFIG_DIR}'")
16
- abort("Config already exists at '#{$CONFIG_DIR}'")
17
- end
18
- end
19
-
20
- `git clone #{repo} #{$CONFIG_DIR}`
21
- end
22
-
23
- desc "update", "update"
24
- option :message, default: "Update config"
7
+ desc 'update', 'update'
8
+ option :message, default: 'Update config'
25
9
  def update
26
10
  message = options['message']
27
11
  Dir.chdir($CONFIG_DIR) do
@@ -29,10 +13,10 @@ class GitConfig < Thor
29
13
  num_changes = changes.split.length
30
14
 
31
15
  if num_changes.zero?
32
- $logger.error("No changes to commit in '#{$CONFIG_DIR}'")
16
+ Log::LOGGER.error("No changes to commit in '#{$CONFIG_DIR}'")
33
17
  abort("No changes to commit in '#{$CONFIG_DIR}'")
34
18
  else
35
- $logger.info("Commit changes")
19
+ Log::LOGGER.info('Commit changes')
36
20
  system 'git', 'add', '.'
37
21
  system 'git', 'commit', '-m', "'#{message}'"
38
22
  system 'git', 'push'
@@ -40,30 +24,30 @@ class GitConfig < Thor
40
24
  end
41
25
  end
42
26
 
43
- desc "status", "Show git status in '#{$CONFIG_DIR}'"
27
+ desc 'status', "Show git status in '#{$CONFIG_DIR}'"
44
28
  def status(*args)
45
29
  Dir.chdir($CONFIG_DIR) do
46
30
  system 'git', 'status', *args
47
31
  end
48
32
  end
49
33
 
50
- desc "pull", "Pull newest changes in '#{$CONFIG_DIR}'"
34
+ desc 'pull', "Pull newest changes in '#{$CONFIG_DIR}'"
51
35
  def pull(*args)
52
36
  Dir.chdir($CONFIG_DIR) do
53
37
  system 'git', 'pull', *args
54
38
  end
55
39
  end
56
40
 
57
- desc "exec", "Execute any git command in '#{$CONFIG_DIR}'"
41
+ desc 'exec', "Execute any git command in '#{$CONFIG_DIR}'"
58
42
  def exec(*args)
59
43
  Dir.chdir($CONFIG_DIR) do
60
44
  system 'git', *args
61
45
  end
62
46
  end
63
47
 
64
- desc "code", "Open '#{$CONFIG_DIR}' in code"
48
+ desc 'code', "Open '#{$CONFIG_DIR}' in code"
65
49
  def code(*args)
66
- $logger.info("Open '#{$CONFIG_DIR}' in code")
50
+ Log::LOGGER.info("Open '#{$CONFIG_DIR}' in code")
67
51
  Dir.chdir($CONFIG_DIR) do
68
52
  system 'code', '.', *args
69
53
  end
@@ -1,22 +1,23 @@
1
- require "thor"
1
+ require 'thor'
2
2
  require 'pathname'
3
3
  require 'fileutils'
4
4
  require 'json'
5
- require "logger"
5
+ require 'logger'
6
6
 
7
7
  require_relative '../config/config'
8
8
  require_relative '../util/file_util'
9
+ require_relative '../util/log'
9
10
 
10
- class Dotfiles
11
- CONFIG_SUB_DIR = 'dotfiles'.freeze
11
+ class Env
12
+ CONFIG_SUB_DIR = 'env'.freeze
12
13
  ROOT_PATH = File.join($CONFIG_DIR, CONFIG_SUB_DIR).freeze
13
- CONFIG_FILE = File.join(ROOT_PATH, 'dotfiles.json').freeze
14
+ CONFIG_FILE = File.join(ROOT_PATH, 'env.json').freeze
14
15
  FILES_PATH = File.join(ROOT_PATH, 'files').freeze
15
16
  FOLDERS_PATH = File.join(ROOT_PATH, 'folders').freeze
16
17
 
17
18
  DEFAULT_CONFIG = {
18
- "files" => [],
19
- "folders" => []
19
+ 'files' => [],
20
+ 'folders' => []
20
21
  }.freeze
21
22
 
22
23
  def add(file)
@@ -47,7 +48,7 @@ class Dotfiles
47
48
 
48
49
  Config.write_config_file(CONFIG_FILE, config)
49
50
 
50
- $logger.info("Added '#{parsed_file}'")
51
+ Log::LOGGER.info("Added '#{parsed_file}'")
51
52
  end
52
53
 
53
54
  def remove(file)
@@ -66,11 +67,11 @@ class Dotfiles
66
67
 
67
68
  Config.write_config_file(CONFIG_FILE, config)
68
69
 
69
- $logger.info("Removed '#{local_file}'")
70
+ Log::LOGGER.info("Removed '#{local_file}'")
70
71
  end
71
72
 
72
73
  def apply
73
- $logger.info('Start apply')
74
+ Log::LOGGER.info('Start apply')
74
75
 
75
76
  config = Config.get_config_json(CONFIG_FILE, DEFAULT_CONFIG)
76
77
  files = config['files']
@@ -79,7 +80,7 @@ class Dotfiles
79
80
  dest_file = FileUtil.to_system_file(file)
80
81
 
81
82
  abs_file = File.join(FILES_PATH, file)
82
- $logger.debug("Copy #{abs_file} to #{dest_file}")
83
+ Log::LOGGER.debug("Copy #{abs_file} to #{dest_file}")
83
84
 
84
85
  FileUtils.cp_r(abs_file, dest_file, remove_destination: true)
85
86
  end
@@ -90,16 +91,16 @@ class Dotfiles
90
91
  dest_file = File.dirname(FileUtil.to_system_file(folder))
91
92
 
92
93
  abs_file = File.join(FOLDERS_PATH, folder)
93
- $logger.debug("Copy #{abs_file} to #{dest_file}")
94
+ Log::LOGGER.debug("Copy #{abs_file} to #{dest_file}")
94
95
 
95
96
  FileUtils.cp_r(abs_file, dest_file, remove_destination: true)
96
97
  end
97
98
 
98
- $logger.info('Finished apply')
99
+ Log::LOGGER.info('Finished apply')
99
100
  end
100
101
 
101
102
  def sync
102
- $logger.info('Start sync')
103
+ Log::LOGGER.info('Start sync')
103
104
 
104
105
  config = Config.get_config_json(CONFIG_FILE, DEFAULT_CONFIG)
105
106
  files = config['files']
@@ -108,7 +109,7 @@ class Dotfiles
108
109
  dest_file = FileUtil.to_system_file(file)
109
110
 
110
111
  abs_file = File.join(FILES_PATH, file)
111
- $logger.debug("Copy #{dest_file} to #{abs_file}")
112
+ Log::LOGGER.debug("Copy #{dest_file} to #{abs_file}")
112
113
 
113
114
  FileUtils.cp_r(dest_file, abs_file, remove_destination: true)
114
115
  end
@@ -119,12 +120,12 @@ class Dotfiles
119
120
  dest_file = FileUtil.to_system_file(folder)
120
121
 
121
122
  abs_file = File.dirname(File.join(FOLDERS_PATH, folder))
122
- $logger.debug("Copy #{dest_file} to #{abs_file}")
123
+ Log::LOGGER.debug("Copy #{dest_file} to #{abs_file}")
123
124
 
124
125
  FileUtils.cp_r(dest_file, abs_file, remove_destination: true)
125
126
  end
126
127
 
127
- $logger.info('Finished sync')
128
+ Log::LOGGER.info('Finished sync')
128
129
  end
129
130
 
130
131
  def get_local_path(file)
@@ -0,0 +1,25 @@
1
+ require_relative 'env'
2
+
3
+ class EnvCli < Thor
4
+ ENV = Env.new
5
+
6
+ desc 'add <file>', 'Add file/folder to sync'
7
+ def add(file)
8
+ ENV.add(file)
9
+ end
10
+
11
+ desc 'remove <file>', 'Remove file/folder from sync'
12
+ def remove(file)
13
+ ENV.remove(file)
14
+ end
15
+
16
+ desc 'apply', 'Copies all env defined in the user config to the system'
17
+ def apply
18
+ ENV.apply
19
+ end
20
+
21
+ desc 'sync', 'Updates all files defined in the user config from the system to the config dir'
22
+ def sync
23
+ ENV.sync
24
+ end
25
+ end
data/lib/pkg/pkg.rb CHANGED
@@ -1,104 +1,85 @@
1
- require "thor"
1
+ require 'thor'
2
2
 
3
- require_relative "pkgm/dnf"
4
- require_relative "pkgm/pacman"
5
- require_relative "pkgm/yay"
6
- require_relative "pkgm/pip"
7
- require_relative "pkgm/snap"
8
- require_relative "pkgm/winget"
9
- require_relative "pkg_config"
3
+ require_relative 'pkgm/dnf'
4
+ require_relative 'pkgm/pacman'
5
+ require_relative 'pkgm/yay'
6
+ require_relative 'pkgm/pip'
7
+ require_relative 'pkgm/snap'
8
+ require_relative 'pkgm/winget'
9
+ require_relative 'pkg_config'
10
+
11
+ require_relative '../util/log'
10
12
 
11
13
  class Pkg < Thor
12
14
  SYSTEM_PACKAGE_MANGER = {
13
- "manjaro" => Pacman,
14
- "fedora" => Dnf,
15
- "windows" => Winget
15
+ 'manjaro' => 'pacman',
16
+ 'fedora' => 'dnf',
17
+ 'windows' => 'winget'
16
18
  }.freeze
17
- OTHER_PACKAGE_MANGER = {
18
- "pip" => Pip,
19
- "snap" => Snap,
20
- "yay" => Yay
19
+ PACKAGE_MANGER = {
20
+ 'pacman' => Pacman,
21
+ 'dnf' => Dnf,
22
+ 'winget' => Winget,
23
+ 'pip' => Pip,
24
+ 'snap' => Snap,
25
+ 'yay' => Yay
21
26
  }.freeze
22
- RELEASE_FILE = "/etc/os-release".freeze
27
+ RELEASE_FILE = '/etc/os-release'.freeze
23
28
 
24
- desc "install_all", "Install"
25
- option "pkgm", default: "system"
26
- def install_all(*args)
27
- manager = get_package_manager(options["pkgm"])
29
+ # desc "install_all", "Install"
30
+ # option "pkgm", default: "system"
31
+ # def install_all(*args)
32
+ # manager = Pkg.get_package_manager(options["pkgm"])
28
33
 
29
- config_file = PkgConfig.get_config_file(manager)
30
- config = Config.get_config_json(config_file, PkgConfig.default_config)
34
+ # config_file = PkgConfig.get_config_file(manager)
35
+ # config = Config.get_config_json(config_file, PkgConfig.default_config)
31
36
 
32
- packages = config["packages"]
37
+ # packages = config["packages"]
33
38
 
34
- manager.install_all(packages, *args)
35
- end
39
+ # manager.install_all(packages, *args)
40
+ # end
36
41
 
37
- desc "install", "Install"
38
- option "pkgm", default: "system"
39
- def install(package, *args)
40
- manager = get_package_manager(options["pkgm"])
42
+ def self.get_package_manager(pkgm)
43
+ pkgm = Pkg.get_system_package_manager unless pkgm != 'system'
44
+ manager = PACKAGE_MANGER[pkgm]
41
45
 
42
- installed = manager.install(package, *args)
46
+ if manager.nil?
47
+ Log::LOGGER.error("'#{pkgm}' is not supported")
48
+ abort("'#{pkgm}' is not supported")
49
+ end
43
50
 
44
- return unless installed
51
+ Log::LOGGER.info("Using package manager '#{manager}'")
45
52
 
46
- PkgConfig.add(manager, package)
53
+ manager
47
54
  end
48
55
 
49
- desc "update", "update"
50
- option "pkgm", default: "system"
51
- def update(*args)
52
- manager = get_package_manager(options["pkgm"])
56
+ def self.get_system_package_manager
57
+ manager = nil
53
58
 
54
- manager.update(*args)
55
- end
56
-
57
- desc "uninstall", "uninstall"
58
- option "pkgm", default: "system"
59
- def uninstall(package, *args)
60
- manager = get_package_manager(options["pkgm"])
59
+ if Gem.win_platform?
60
+ manager = SYSTEM_PACKAGE_MANGER['windows']
61
+ else
62
+ r = { 'distro' => nil }
63
+ unless File.exist?(RELEASE_FILE)
64
+ Log::LOGGER.error("'#{RELEASE_FILE}' does not exist")
65
+ abort("'#{RELEASE_FILE}' does not exist")
66
+ end
61
67
 
62
- uninstalled = manager.uninstall(package, *args)
68
+ File.foreach(RELEASE_FILE) do |line|
69
+ r = { 'distro' => ::Regexp.last_match(1) } if line =~ /^ID=(.*)/
70
+ end
63
71
 
64
- return unless uninstalled
72
+ manager = SYSTEM_PACKAGE_MANGER[r['distro']]
73
+ end
65
74
 
66
- PkgConfig.remove(manager, package)
75
+ return manager
67
76
  end
68
77
 
69
- no_commands do
70
- def get_package_manager(pkgm)
71
- manager = nil
72
-
73
- if pkgm == "system"
74
-
75
- if Gem.win_platform?
76
- manager = SYSTEM_PACKAGE_MANGER["windows"]
77
- else
78
- r = { "distro" => nil }
79
- unless File.exist?(RELEASE_FILE)
80
- $logger.error("'#{RELEASE_FILE}' does not exist")
81
- abort("'#{RELEASE_FILE}' does not exist")
82
- end
83
-
84
- File.foreach(RELEASE_FILE) do |line|
85
- r = { "distro" => ::Regexp.last_match(1) } if line =~ /^ID=(.*)/
86
- end
87
-
88
- manager = SYSTEM_PACKAGE_MANGER[r["distro"]]
89
- end
90
- else
91
- manager = OTHER_PACKAGE_MANGER[pkgm]
92
- end
93
-
94
- if manager.nil?
95
- $logger.error("'#{pkgm}' is not supported")
96
- abort("'#{pkgm}' is not supported")
97
- end
98
-
99
- $logger.info("Using package manager '#{manager}'")
78
+ desc 'system SUBCOMMAND ...ARGS', 'manage system packages'
79
+ subcommand 'system', Pkg.get_package_manager('system')
100
80
 
101
- manager
102
- end
81
+ PACKAGE_MANGER.each do |key, value|
82
+ desc "#{key} SUBCOMMAND ...ARGS", "manage #{key} packages"
83
+ subcommand key, value
103
84
  end
104
85
  end
@@ -1,41 +1,63 @@
1
- require "json"
1
+ require 'json'
2
2
 
3
- require_relative "../config/config"
3
+ require_relative '../config/config'
4
+ require_relative '../util/log'
5
+
6
+ module ConfigOptions
7
+ PACKAGES = 'packages'.freeze
8
+ REMOTES = 'remotes'.freeze
9
+ REPOS = 'repos'.freeze
10
+ end
4
11
 
5
12
  class PkgConfig
6
- CONFIG_SUB_DIR = "pkg".freeze
13
+ CONFIG_SUB_DIR = 'pkg'.freeze
7
14
  ROOT_PATH = File.join($CONFIG_DIR, CONFIG_SUB_DIR).freeze
8
15
  DEFAULT_CONFIG = {
9
- "repos" => [],
10
- "packages" => []
16
+ ConfigOptions::PACKAGES => [],
17
+ ConfigOptions::REMOTES => [],
18
+ ConfigOptions::REPOS => []
11
19
  }.freeze
12
20
 
13
- def self.add(pkgm, package)
21
+ def self.add(pkgm, config_option, item, success)
22
+ unless success
23
+ Log::LOGGER.error("#{config_option[1..]} '#{item}' could not be added")
24
+ abort
25
+ end
26
+
14
27
  config_file = PkgConfig.get_config_file(pkgm)
28
+ Log::LOGGER.info("Add '#{item}' to list '#{config_option}' in '#{config_file}")
15
29
 
16
30
  config = Config.get_config_json(config_file, DEFAULT_CONFIG)
17
31
 
18
- packages = config["packages"]
32
+ puts(config)
19
33
 
20
- packages.append package unless packages.include? package
34
+ list = config[config_option]
35
+ list.append item unless list.include? item
36
+ config[config_option] = list.sort
21
37
 
22
38
  Config.write_config_file(config_file, config)
23
39
  end
24
40
 
25
- def self.remove(pkgm, package)
41
+ def self.remove(pkgm, config_option, item, success)
42
+ unless success
43
+ Log::LOGGER.error("#{config_option[1..]} '#{item}' could not be removed")
44
+ abort
45
+ end
46
+
26
47
  config_file = PkgConfig.get_config_file(pkgm)
48
+ Log::LOGGER.info("Remove '#{item}' from list '#{config_option}' in '#{config_file}")
27
49
 
28
50
  config = Config.get_config_json(config_file, DEFAULT_CONFIG)
29
51
 
30
- packages = config["packages"]
31
-
32
- packages.delete package if packages.include? package
52
+ list = config[config_option]
53
+ list.delete item if list.include? item
54
+ config[config_option] = list.sort
33
55
 
34
56
  Config.write_config_file(config_file, config)
35
57
  end
36
58
 
37
59
  def self.get_config_file(pkgm)
38
- pkgm = pkgm.downcase
60
+ pkgm = pkgm.to_s.downcase
39
61
  File.join(ROOT_PATH, "#{pkgm}.json")
40
62
  end
41
63
 
data/lib/pkg/pkgm/dnf.rb CHANGED
@@ -1,17 +1,50 @@
1
- class Dnf
2
- def self.install_all(packages, *args)
3
- system "sudo", "dnf", "install", *args, *packages
1
+ require 'thor'
2
+
3
+ require_relative '../pkg_config'
4
+
5
+ class Dnf < Thor
6
+ desc 'add_repo', 'Add repository'
7
+ def add_repo(repo)
8
+ system 'sudo', 'dnf', 'install', '-y', 'dnf-plugins-core'
9
+ success = system 'sudo', 'dnf', 'config-manager', '--add-repo', repo
10
+
11
+ PkgConfig.add(self.class.name, ConfigOptions::REPOS, repo, success)
4
12
  end
5
13
 
6
- def self.install(package, *args)
7
- system "sudo", "dnf", "install", *args, package
14
+ desc 'remove_repo', 'Remove repository'
15
+ def remove_repo(repo, url)
16
+ system 'sudo', 'dnf', 'install', '-y', 'dnf-plugins-core'
17
+ success = system 'sudo', 'dnf', 'config-manager', '--set-disabled', repo
18
+
19
+ PkgConfig.remove(self.class.name, ConfigOptions::REPOS, url, success)
8
20
  end
9
21
 
10
- def self.update(*args)
11
- system "sudo", "dnf", "update", *args
22
+ desc 'list_repos', 'List repos'
23
+ def list_repos
24
+ system 'dnf', 'repolist', 'enabled'
12
25
  end
13
26
 
14
- def self.uninstall(package, *args)
15
- system "sudo", "dnf", "remove", *args, package
27
+ # desc "install_all", "Install all"
28
+ # def install_all(packages, *args)
29
+ # system "sudo", "dnf", "install", *args, *packages
30
+ # end
31
+
32
+ desc 'install', 'Install'
33
+ def install(package, *args)
34
+ success = system 'sudo', 'dnf', 'install', *args, package
35
+
36
+ PkgConfig.add(self.class.name, ConfigOptions::PACKAGES, package, success)
37
+ end
38
+
39
+ desc 'update', 'update'
40
+ def update(*args)
41
+ system 'sudo', 'dnf', 'update', *args
42
+ end
43
+
44
+ desc 'uninstall', 'Uninstall'
45
+ def uninstall(package, *args)
46
+ success = system 'sudo', 'dnf', 'remove', *args, package
47
+
48
+ PkgConfig.remove(self.class.name, ConfigOptions::PACKAGES, package, success)
16
49
  end
17
50
  end
@@ -1,17 +1,29 @@
1
- class Pacman
2
- def self.install_all(packages, *args)
3
- system "sudo", "pacman", "-Sy", *args, *packages
4
- end
1
+ require 'thor'
2
+
3
+ require_relative '../pkg_config'
4
+
5
+ class Pacman < Thor
6
+ # desc "install_all", "Install all"
7
+ # def install_all(packages, *args)
8
+ # system "sudo", "pacman", "-Sy", *args, *packages
9
+ # end
5
10
 
6
- def self.install(package, *args)
7
- system "sudo", "pacman", "-Sy", *args, package
11
+ desc 'install', 'Install'
12
+ def install(package, *args)
13
+ success = system 'sudo', 'pacman', '-Sy', *args, package
14
+
15
+ PkgConfig.add(self.class.name, ConfigOptions::PACKAGES, package, success)
8
16
  end
9
17
 
10
- def self.update(*args)
11
- system "sudo", "pacman", "-Syu", *args
18
+ desc 'update', 'update'
19
+ def update(*args)
20
+ system 'sudo', 'pacman', '-Syu', *args
12
21
  end
13
22
 
14
- def self.uninstall(package, *args)
15
- system "sudo", "pacman", "-R", *args, package
23
+ desc 'uninstall', 'Uninstall'
24
+ def uninstall(package, *args)
25
+ success = system 'sudo', 'pacman', '-R', *args, package
26
+
27
+ PkgConfig.remove(self.class.name, ConfigOptions::PACKAGES, package, success)
16
28
  end
17
29
  end
data/lib/pkg/pkgm/pip.rb CHANGED
@@ -1,18 +1,31 @@
1
- class Pip
2
- def self.install_all(packages, *args)
3
- system "python3", "-m", "pip", "install", *args, *packages
4
- end
1
+ require 'thor'
2
+
3
+ require_relative '../pkg_config'
4
+ require_relative '../../util/log'
5
+
6
+ class Pip < Thor
7
+ # desc "install_all", "Install all"
8
+ # def install_all(packages, *args)
9
+ # system "python3", "-m", "pip", "install", *args, *packages
10
+ # end
5
11
 
6
- def self.install(package, *args)
7
- system "python3", "-m", "pip", "install", *args, package
12
+ desc 'install', 'Install'
13
+ def install(package, *args)
14
+ success = system 'python3', '-m', 'pip', 'install', *args, package
15
+
16
+ PkgConfig.add(self.class.name, ConfigOptions::PACKAGES, package, success)
8
17
  end
9
18
 
10
- def self.update(*_args)
11
- $logger.error("Update is not supported for pip")
12
- abort("Update is not supported for pip")
19
+ desc 'update', 'update'
20
+ def update(*_args)
21
+ Log::LOGGER.error('Update is not supported for pip')
22
+ abort('Update is not supported for pip')
13
23
  end
14
24
 
15
- def self.uninstall(package, *args)
16
- system "python3", "-m", "pip", "uninstall", *args, package
25
+ desc 'uninstall', 'Uninstall'
26
+ def uninstall(package, *args)
27
+ success = system 'python3', '-m', 'pip', 'uninstall', *args, package
28
+
29
+ PkgConfig.remove(self.class.name, ConfigOptions::PACKAGES, package, success)
17
30
  end
18
31
  end
data/lib/pkg/pkgm/snap.rb CHANGED
@@ -1,18 +1,31 @@
1
- class Snap
2
- def self.install_all(packages, *args)
3
- system "snap", "install", *args, *packages
4
- end
1
+ require 'thor'
2
+
3
+ require_relative '../pkg_config'
4
+ require_relative '../../util/log'
5
+
6
+ class Snap < Thor
7
+ # desc "install_all", "Install all"
8
+ # def install_all(packages, *args)
9
+ # system "snap", "install", *args, *packages
10
+ # end
5
11
 
6
- def self.install(package, *args)
7
- system "snap", "install", *args, package
12
+ desc 'install', 'Install'
13
+ def install(package, *args)
14
+ success = system 'snap', 'install', *args, package
15
+
16
+ PkgConfig.add(self.class.name, ConfigOptions::PACKAGES, package, success)
8
17
  end
9
18
 
10
- def self.update(*_args)
11
- $logger.error("Update is not supported for snap")
12
- abort("Update is not supported for snap")
19
+ desc 'update', 'update'
20
+ def update(*_args)
21
+ Log::LOGGER.error('Update is not supported for snap')
22
+ abort('Update is not supported for snap')
13
23
  end
14
24
 
15
- def self.uninstall(package, *args)
16
- system "snap", "remove", *args, package
25
+ desc 'uninstall', 'Uninstall'
26
+ def uninstall(package, *args)
27
+ success = system 'snap', 'remove', *args, package
28
+
29
+ PkgConfig.remove(self.class.name, ConfigOptions::PACKAGES, package, success)
17
30
  end
18
31
  end
@@ -1,19 +1,31 @@
1
- class Winget
2
- def self.install_all(packages, *args)
3
- packages.each do |package|
4
- Winget.install(package, *args)
5
- end
6
- end
1
+ require 'thor'
2
+
3
+ require_relative '../pkg_config'
4
+
5
+ class Winget < Thor
6
+ # desc "install_all", "Install all"
7
+ # def install_all(packages, *args)
8
+ # packages.each do |package|
9
+ # Winget.install(package, *args)
10
+ # end
11
+ # end
7
12
 
8
- def self.install(package, *args)
9
- system "winget", "install", *args, "--id=#{package}", "-e"
13
+ desc 'install', 'Install'
14
+ def install(package, *args)
15
+ success = system 'winget', 'install', *args, "--id=#{package}", '-e'
16
+
17
+ PkgConfig.add(self.class.name, ConfigOptions::PACKAGES, package, success)
10
18
  end
11
19
 
12
- def self.update(*_args)
13
- system "winget", "upgrade"
20
+ desc 'update', 'update'
21
+ def update(*_args)
22
+ system 'winget', 'upgrade'
14
23
  end
15
24
 
16
- def self.uninstall(package, *args)
17
- system "winget", "uninstall", *args, "--id=#{package}", "-e"
25
+ desc 'uninstall', 'Uninstall'
26
+ def uninstall(package, *args)
27
+ success = system 'winget', 'uninstall', *args, "--id=#{package}", '-e'
28
+
29
+ PkgConfig.remove(self.class.name, ConfigOptions::PACKAGES, package, success)
18
30
  end
19
31
  end
data/lib/pkg/pkgm/yay.rb CHANGED
@@ -1,17 +1,29 @@
1
- class Yay
2
- def self.install_all(packages, *args)
3
- system "yay", "-Sy", *args, *packages
4
- end
1
+ require 'thor'
2
+
3
+ require_relative '../pkg_config'
4
+
5
+ class Yay < Thor
6
+ # desc "install_all", "Install all"
7
+ # def install_all(packages, *args)
8
+ # system "yay", "-Sy", *args, *packages
9
+ # end
5
10
 
6
- def self.install(package, *args)
7
- system "yay", "-Sy", *args, package
11
+ desc 'install', 'Install'
12
+ def install(package, *args)
13
+ success = system 'yay', '-Sy', *args, package
14
+
15
+ PkgConfig.add(self.class.name, ConfigOptions::PACKAGES, package, success)
8
16
  end
9
17
 
10
- def self.update(*args)
11
- system "yay", "-Syu", *args
18
+ desc 'update', 'update'
19
+ def update(*args)
20
+ system 'yay', '-Syu', *args
12
21
  end
13
22
 
14
- def self.uninstall(package, *args)
15
- system "yay", "-R", *args, package
23
+ desc 'uninstall', 'Uninstall'
24
+ def uninstall(package, *args)
25
+ success = system 'yay', '-R', *args, package
26
+
27
+ PkgConfig.remove(self.class.name, ConfigOptions::PACKAGES, package, success)
16
28
  end
17
29
  end
@@ -1,12 +1,12 @@
1
1
  class FileUtil
2
- USER_HOME = "user-home".freeze
2
+ USER_HOME = 'user-home'.freeze
3
3
 
4
4
  def self.to_local_file(file)
5
5
  local_file = File.absolute_path(file.dup)
6
6
 
7
7
  if local_file.include? Dir.home
8
8
  local_file[Dir.home] = USER_HOME
9
- elsif local_file.start_with?("/")
9
+ elsif local_file.start_with?('/')
10
10
  local_file = local_file[1..]
11
11
  end
12
12
 
data/lib/util/log.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'logger'
2
+
3
+ module Log
4
+ LOGGER = Logger.new($stdout)
5
+ LOGGER.formatter = proc do |severity, datetime, _progname, msg|
6
+ date_format = datetime.strftime('%Y-%m-%d %H:%M:%S')
7
+ JSON.dump(date: date_format, severity: severity.ljust(5), pid: "##{Process.pid}", message: msg) + "\n" # rubocop:disable Style/StringConcatenation
8
+ end
9
+ end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  # module Cmt
2
- VERSION = "0.0.3".freeze
2
+ VERSION = '0.0.5'.freeze
3
3
  # end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - simon.schuster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-10 00:00:00.000000000 Z
11
+ date: 2023-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -36,8 +36,8 @@ files:
36
36
  - lib/cmt.rb
37
37
  - lib/config/config.rb
38
38
  - lib/config/git_config.rb
39
- - lib/dotfiles/dotfiles.rb
40
- - lib/dotfiles/dotfiles_cli.rb
39
+ - lib/env/env.rb
40
+ - lib/env/env_cli.rb
41
41
  - lib/pkg/pkg.rb
42
42
  - lib/pkg/pkg_config.rb
43
43
  - lib/pkg/pkgm/dnf.rb
@@ -47,6 +47,7 @@ files:
47
47
  - lib/pkg/pkgm/winget.rb
48
48
  - lib/pkg/pkgm/yay.rb
49
49
  - lib/util/file_util.rb
50
+ - lib/util/log.rb
50
51
  - lib/version.rb
51
52
  homepage: https://github.com/Setre14/cmt
52
53
  licenses:
@@ -1,30 +0,0 @@
1
- require_relative "dotfiles"
2
-
3
- class DotfilesCli < Thor
4
- DOTFILES = Dotfiles.new
5
-
6
- desc "init", "Download objects and refs from another repository"
7
- def init
8
- DOTFILES.init
9
- end
10
-
11
- desc "add <file>", "Download objects and refs from another repository"
12
- def add(file)
13
- DOTFILES.add(file)
14
- end
15
-
16
- desc "remove <file>", "Download objects and refs from another repository"
17
- def remove(file)
18
- DOTFILES.remove(file)
19
- end
20
-
21
- desc "apply", "Copies all dotfiles defined in the user config to the system"
22
- def apply
23
- DOTFILES.apply
24
- end
25
-
26
- desc "sync", "Updates all files defined in the user config from the system to the config dir"
27
- def sync
28
- DOTFILES.sync
29
- end
30
- end