mac_setup 0.8.0 → 0.8.1
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/exe/mac_setup +2 -2
- data/lib/mac_setup/configuration.rb +6 -6
- data/lib/mac_setup/homebrew_runner.rb +4 -0
- data/lib/mac_setup/plugin.rb +11 -8
- data/lib/mac_setup/plugins/dotfiles.rb +13 -0
- data/lib/mac_setup/plugins/keybase.rb +33 -20
- data/lib/mac_setup/plugins/mac_app_store.rb +29 -58
- data/lib/mac_setup/symlink_installer.rb +36 -22
- data/lib/mac_setup/symlink_path_builder.rb +33 -0
- data/lib/mac_setup/version.rb +1 -1
- data/lib/mac_setup.rb +5 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c4e9c261b3d1a91265e2aedd53b1a45d6e91340
|
4
|
+
data.tar.gz: de0dc8873cf819ea49ebfe1573fb53807b7e177c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7392b6f59c7398bd6efabf67cf1c497fd92ce404ccc031e2f98697d61e1dd775313d4e077f8392431557551add773a4704f5ab216bc2c4c2370b06edbea3c3e2
|
7
|
+
data.tar.gz: 10051992c38e779f7924750d6e846a8c5012a27f2c93b6afbcad79432fa2524549837af094b7c583ac0243243e1035d4e883d35d62a65d0226a10ca940bee671
|
data/exe/mac_setup
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
require "mac_setup"
|
4
4
|
|
5
5
|
command = ARGV.shift
|
6
|
-
options = ARGV.select { |arg| arg.start_with?("--") }
|
7
|
-
config_path = (ARGV - options).first || File.expand_path(DEFAULT_CONFIG_PATH)
|
6
|
+
# options = ARGV.select { |arg| arg.start_with?("--") }
|
7
|
+
# config_path = (ARGV - options).first || File.expand_path(DEFAULT_CONFIG_PATH)
|
8
8
|
|
9
9
|
case command
|
10
10
|
when "bootstrap"
|
@@ -4,7 +4,7 @@ require "set"
|
|
4
4
|
module MacSetup
|
5
5
|
class Configuration
|
6
6
|
InvalidConfigError = Class.new(StandardError)
|
7
|
-
DEFAULT_KEYS = [:plugins, :git_repos, :symlinks, :brews, :fonts, :casks, :quicklook, :mas]
|
7
|
+
DEFAULT_KEYS = [:repo, :plugins, :git_repos, :symlinks, :brews, :fonts, :casks, :quicklook, :mas]
|
8
8
|
|
9
9
|
def initialize(config_path)
|
10
10
|
@config_path = config_path
|
@@ -32,7 +32,7 @@ module MacSetup
|
|
32
32
|
when Set
|
33
33
|
collection << value.to_s
|
34
34
|
when Hash
|
35
|
-
collection.merge(value) do |key, oldval, newval|
|
35
|
+
collection.merge!(value) do |key, oldval, newval|
|
36
36
|
raise InvalidConfigError, "#{key} is defined twice!: #{oldval}, #{newval}"
|
37
37
|
end
|
38
38
|
end
|
@@ -44,11 +44,11 @@ module MacSetup
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def validate!
|
47
|
-
extra_keys = @config.keys.map(&:
|
47
|
+
extra_keys = @config.keys.map(&:to_sym) - allowed_keys.to_a
|
48
48
|
|
49
49
|
return if extra_keys.none?
|
50
50
|
|
51
|
-
raise InvalidConfigError, "Extra keys in config: #{extra_keys.join(
|
51
|
+
raise InvalidConfigError, "Extra keys in config: #{extra_keys.join(', ')}"
|
52
52
|
end
|
53
53
|
|
54
54
|
def dotfiles_repo
|
@@ -64,7 +64,7 @@ module MacSetup
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def brews
|
67
|
-
@brews ||= (@config["brews"] || []).
|
67
|
+
@brews ||= (@config["brews"] || []).each_with_object({}) do |item, merged|
|
68
68
|
add_brews(item, merged)
|
69
69
|
end
|
70
70
|
end
|
@@ -88,7 +88,7 @@ module MacSetup
|
|
88
88
|
private
|
89
89
|
|
90
90
|
def add_brews(item, existing_brews = brews)
|
91
|
-
existing_brews.merge(brew_value(item)) do |key, oldval, newval|
|
91
|
+
existing_brews.merge!(brew_value(item)) do |key, oldval, newval|
|
92
92
|
raise InvalidConfigError, "#{key} is defined twice!: #{oldval}, #{newval}"
|
93
93
|
end
|
94
94
|
end
|
data/lib/mac_setup/plugin.rb
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
module MacSetup
|
2
2
|
class Plugin
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def self.run(_config, _status)
|
7
|
-
end
|
3
|
+
class << self
|
4
|
+
def add_requirements(_config)
|
5
|
+
end
|
8
6
|
|
9
|
-
|
7
|
+
def run(_config, _status)
|
8
|
+
end
|
10
9
|
|
11
|
-
|
10
|
+
def load(_plugin_name)
|
11
|
+
end
|
12
12
|
|
13
|
-
|
13
|
+
def get_status(_status)
|
14
|
+
end
|
14
15
|
|
16
|
+
def bootstrap
|
17
|
+
end
|
15
18
|
end
|
16
19
|
end
|
17
20
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module MacSetup
|
2
|
+
module Plugins
|
3
|
+
class Dotfiles < MacSetup::Plugin
|
4
|
+
class << self
|
5
|
+
def add_requirements(config)
|
6
|
+
SymlinkPathBuilder.paths_for(MacSetup.dotfiles_path) do |source, target|
|
7
|
+
config.add(:symlinks, source => target)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,31 +1,44 @@
|
|
1
1
|
module MacSetup
|
2
2
|
module Plugins
|
3
3
|
class Keybase < MacSetup::Plugin
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
class << self
|
5
|
+
def bootstrap(config)
|
6
|
+
add_requirements(config)
|
7
|
+
install
|
8
|
+
log_in(config.keybase)
|
9
|
+
install_volume
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def add_requirements(config)
|
13
|
+
config.require_value(:keybase)
|
14
|
+
config.add(:casks, :keybase)
|
15
|
+
add_private_dotfiles(config)
|
16
|
+
end
|
15
17
|
|
16
|
-
|
18
|
+
private
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
def install
|
21
|
+
HomebrewRunner.install_cask(:keybase)
|
22
|
+
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
24
|
+
def log_in(username)
|
25
|
+
Shell.run("keybase login #{username}")
|
26
|
+
end
|
27
|
+
|
28
|
+
# TODO: Investigate making this work with kext permissions
|
29
|
+
def install_volume
|
30
|
+
Shell.run("keybase install --components=helper,fuse,mountdir,kbfs")
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_private_dotfiles(config)
|
34
|
+
dotfiles_dir = Pathname.new("/keybase/private/#{config.keybase}/dotfiles")
|
35
|
+
|
36
|
+
return unless dotfiles_dir.exist?
|
25
37
|
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
SymlinkPathBuilder.paths_for(dotfiles_dir) do |source, target|
|
39
|
+
config.add(:symlinks, source => target)
|
40
|
+
end
|
41
|
+
end
|
29
42
|
end
|
30
43
|
end
|
31
44
|
end
|
@@ -1,75 +1,46 @@
|
|
1
1
|
module MacSetup
|
2
2
|
module Plugins
|
3
3
|
class MacAppStore < MacSetup::Plugin
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def self.get_status(status)
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.run(config, status)
|
15
|
-
new(config, status).run
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize(config, status)
|
19
|
-
@config = config
|
20
|
-
@status = status
|
21
|
-
end
|
4
|
+
class << self
|
5
|
+
def bootstrap(config)
|
6
|
+
add_requirements(config)
|
7
|
+
install
|
8
|
+
log_in
|
9
|
+
end
|
22
10
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
11
|
+
def add_requirements(config)
|
12
|
+
config.add(:brews, :mas)
|
13
|
+
end
|
27
14
|
|
28
|
-
|
15
|
+
def run(config, _status)
|
16
|
+
log_in
|
29
17
|
|
30
|
-
|
31
|
-
|
18
|
+
config.mas.each do |_name, id|
|
19
|
+
Shell.run("mas install #{id}")
|
20
|
+
end
|
21
|
+
end
|
32
22
|
|
33
|
-
|
34
|
-
sign_in_to_mas
|
35
|
-
end
|
23
|
+
private
|
36
24
|
|
37
|
-
|
38
|
-
|
39
|
-
|
25
|
+
def install
|
26
|
+
MacSetup.log "Installing mas" do
|
27
|
+
HomebrewRunner.install_brew(:mas)
|
28
|
+
end
|
40
29
|
end
|
41
|
-
end
|
42
30
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
31
|
+
def log_in
|
32
|
+
if mas_signed_in?
|
33
|
+
MacSetup.log "Already signed into Mac App Store. Skipping."
|
34
|
+
else
|
35
|
+
apple_id = Shell.ask("What is your Apple ID?")
|
36
|
+
Shell.run("mas signin #{apple_id}")
|
37
|
+
end
|
49
38
|
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def mas_signed_in?
|
53
|
-
Shell.success?("mas account")
|
54
|
-
end
|
55
39
|
|
56
|
-
|
57
|
-
|
58
|
-
Shell.run("brew bundle --global")
|
40
|
+
def mas_signed_in?
|
41
|
+
Shell.success?("mas account")
|
59
42
|
end
|
60
43
|
end
|
61
|
-
|
62
|
-
def mas_installed?
|
63
|
-
Shell.command_present?("mas")
|
64
|
-
end
|
65
|
-
|
66
|
-
def bundle_already_tapped?
|
67
|
-
status.installed_taps.include?(BUNDLE_TAP)
|
68
|
-
end
|
69
|
-
|
70
|
-
def brewfile
|
71
|
-
@brewfile ||= Pathname.new("~/.Brewfile").expand_path
|
72
|
-
end
|
73
44
|
end
|
74
45
|
end
|
75
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
1
3
|
module MacSetup
|
2
4
|
class Symlink
|
3
5
|
def initialize(options)
|
@@ -91,33 +93,45 @@ module MacSetup
|
|
91
93
|
|
92
94
|
class SymlinkInstaller
|
93
95
|
def self.run(config, _status)
|
94
|
-
install_dotfiles
|
95
96
|
install_symlinks(config)
|
96
97
|
end
|
97
98
|
|
98
|
-
def self.install_dotfiles
|
99
|
-
dotfiles.each do |file_name|
|
100
|
-
source = Symlink.new(name: file_name)
|
101
|
-
source.link
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
99
|
def self.install_symlinks(config)
|
106
|
-
config.symlinks.each do |source_path|
|
107
|
-
source = Symlink.new(source_path: File.expand_path(source_path))
|
108
|
-
source.link
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
end
|
100
|
+
config.symlinks.each do |source_path, target_path|
|
101
|
+
# source = Symlink.new(source_path: File.expand_path(source_path))
|
102
|
+
# source.link
|
103
|
+
source = Pathname.new(source_path)
|
104
|
+
short_source_path = source.to_s
|
105
|
+
# MacSetup.shorten_path(source_path)
|
106
|
+
|
107
|
+
unless source.exist?
|
108
|
+
MacSetup.log "#{short_source_path} doesn't exist. Skipping."
|
109
|
+
next
|
110
|
+
end
|
118
111
|
|
119
|
-
|
120
|
-
|
112
|
+
target = Pathname.new(target_path)
|
113
|
+
short_target_path = target.to_s
|
114
|
+
source = source.expand_path
|
115
|
+
target = target.expand_path
|
116
|
+
# MacSetup.shorten_path(target_path)
|
117
|
+
|
118
|
+
MacSetup.log "Linking #{short_sorce_path} to #{short_target_path}..."
|
119
|
+
|
120
|
+
home = Pathname.new(ENV.fetch("HOME"))
|
121
|
+
|
122
|
+
if target.directory?
|
123
|
+
filename = target == home ? ".#{source.basename}" : source.basename
|
124
|
+
full_target = target.join(filename)
|
125
|
+
File.symlink(source, full_target)
|
126
|
+
elsif target.to_s.end_with?("/")
|
127
|
+
target.mkpath
|
128
|
+
full_target = target.join(source.basename)
|
129
|
+
File.symlink(source, full_target)
|
130
|
+
else
|
131
|
+
target.dirname.mkpath
|
132
|
+
File.symlink(source, target)
|
133
|
+
end
|
134
|
+
end
|
121
135
|
end
|
122
136
|
end
|
123
137
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module MacSetup
|
2
|
+
class SymlinkPathBuilder
|
3
|
+
HOME = ENV.fetch("HOME").freeze
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def paths_for(root_dir)
|
7
|
+
root = Pathname.new(root_dir)
|
8
|
+
|
9
|
+
each_child(root) do |child|
|
10
|
+
yield [relative_path(child, HOME), relative_path(child, root, "~/.")]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def each_child(dir, &block)
|
17
|
+
dir.children.each do |child|
|
18
|
+
next if child.basename.to_s.start_with?(".")
|
19
|
+
|
20
|
+
if child.directory?
|
21
|
+
each_child(child, &block)
|
22
|
+
else
|
23
|
+
block.call(child)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def relative_path(path, base, replacement = "~/")
|
29
|
+
path.to_s.sub(%r{^#{base}\/}, replacement)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/mac_setup/version.rb
CHANGED
data/lib/mac_setup.rb
CHANGED
@@ -8,9 +8,11 @@ require "mac_setup/homebrew_runner"
|
|
8
8
|
require "mac_setup/secrets"
|
9
9
|
require "mac_setup/homebrew_installer"
|
10
10
|
require "mac_setup/git_repo_installer"
|
11
|
+
require "mac_setup/symlink_installer"
|
11
12
|
require "mac_setup/plugin"
|
12
13
|
require "mac_setup/plugins/keybase"
|
13
14
|
require "mac_setup/plugins/mac_app_store"
|
15
|
+
require "mac_setup/plugins/dotfiles"
|
14
16
|
|
15
17
|
module MacSetup
|
16
18
|
DEFAULT_DOTFILES_PATH = File.expand_path("~/.dotfiles")
|
@@ -24,7 +26,8 @@ module MacSetup
|
|
24
26
|
|
25
27
|
DEFAULT_PLUGINS = [
|
26
28
|
Plugins::MacAppStore,
|
27
|
-
Plugins::Keybase
|
29
|
+
Plugins::Keybase,
|
30
|
+
Plugins::Dotfiles
|
28
31
|
]
|
29
32
|
|
30
33
|
class << self
|
@@ -55,7 +58,7 @@ module MacSetup
|
|
55
58
|
end
|
56
59
|
|
57
60
|
def shorten_path(path)
|
58
|
-
path.sub(/#{ENV['HOME']}/, "~")
|
61
|
+
path.to_s.sub(/#{ENV['HOME']}/, "~")
|
59
62
|
end
|
60
63
|
|
61
64
|
def log(message)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mac_setup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Wean
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/mac_setup/homebrew_installer.rb
|
111
111
|
- lib/mac_setup/homebrew_runner.rb
|
112
112
|
- lib/mac_setup/plugin.rb
|
113
|
+
- lib/mac_setup/plugins/dotfiles.rb
|
113
114
|
- lib/mac_setup/plugins/keybase.rb
|
114
115
|
- lib/mac_setup/plugins/mac_app_store.rb
|
115
116
|
- lib/mac_setup/script_installer.rb
|
@@ -118,6 +119,7 @@ files:
|
|
118
119
|
- lib/mac_setup/services_installer.rb
|
119
120
|
- lib/mac_setup/shell.rb
|
120
121
|
- lib/mac_setup/symlink_installer.rb
|
122
|
+
- lib/mac_setup/symlink_path_builder.rb
|
121
123
|
- lib/mac_setup/system_status.rb
|
122
124
|
- lib/mac_setup/version.rb
|
123
125
|
- mac_setup.gemspec
|