theme-juice 0.8.3 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,6 +12,11 @@ module ThemeJuice
12
12
  runner do |tasks|
13
13
  tasks << Tasks::DeleteConfirm.new
14
14
  tasks << Tasks::Database.new
15
+ if @env.nginx
16
+ tasks << Tasks::Nginx.new
17
+ else
18
+ tasks << Tasks::Apache.new
19
+ end
15
20
  tasks << Tasks::VMLocation.new
16
21
  tasks << Tasks::SyncedFolder.new
17
22
  tasks << Tasks::DNS.new
@@ -23,14 +28,14 @@ module ThemeJuice
23
28
  private
24
29
 
25
30
  def init_project
26
- @project.name = @opts.fetch("name") { name }
27
- @project.url = @opts.fetch("url") { url }
28
- @project.db_drop = @opts.fetch("db_drop") { false }
29
- @project.vm_restart = @opts.fetch("vm_restart") { false }
31
+ @project.name = @opts.fetch("name") { name }
32
+ @project.url = @opts.fetch("url") { url }
33
+ @project.db_drop = @opts.fetch("db_drop") { false }
34
+ @project.vm_restart = @opts.fetch("vm_restart") { false }
30
35
  end
31
36
 
32
37
  def name
33
- name = @io.prompt "What's the project name?"
38
+ name = @io.ask "What's the project name?"
34
39
 
35
40
  unless @list.projects.include? name
36
41
  @io.error "Project '#{name}' doesn't exist"
@@ -40,7 +45,9 @@ module ThemeJuice
40
45
  end
41
46
 
42
47
  def url
43
- url = @io.prompt "What is the project's development url?", :default => "#{@project.name}.dev"
48
+ return "#{@project.name}.dev" if @env.no_landrush
49
+
50
+ url = @io.ask "What is the project's development url?", :default => "#{@project.name}.dev"
44
51
 
45
52
  unless @list.urls.include? url
46
53
  @io.notice "Project url '#{url}' doesn't exist within DNS records. Skipping..."
@@ -3,7 +3,7 @@
3
3
  module ThemeJuice
4
4
  module Env
5
5
  include SingletonHelper
6
-
6
+
7
7
  attr_accessor :vm_box
8
8
  attr_accessor :vm_path
9
9
  attr_accessor :vm_ip
@@ -14,11 +14,13 @@ module ThemeJuice
14
14
  attr_accessor :no_colors
15
15
  attr_accessor :no_animations
16
16
  attr_accessor :no_landrush
17
+ attr_accessor :no_port_forward
17
18
  attr_accessor :verbose
18
19
  attr_accessor :dryrun
19
-
20
+ attr_accessor :nginx
21
+
20
22
  def vm_box=(val)
21
- @vm_box = val ||= ENV.fetch("TJ_VM_BOX") { "https://github.com/Varying-Vagrant-Vagrants/VVV.git" }
23
+ @vm_box = val ||= ENV.fetch("TJ_VM_BOX") { "git@github.com:ericmann/vvv-apache.git" }
22
24
  end
23
25
 
24
26
  def vm_path=(val)
@@ -57,6 +59,10 @@ module ThemeJuice
57
59
  @no_landrush = val ||= ENV.fetch("TJ_NO_LANDRUSH") { false }
58
60
  end
59
61
 
62
+ def no_port_forward=(val)
63
+ @no_port_forward = val ||= ENV.fetch("TJ_NO_PORT_FORWARD") { false }
64
+ end
65
+
60
66
  def verbose=(val)
61
67
  @verbose = val ||= ENV.fetch("TJ_VERBOSE") { false }
62
68
  end
@@ -65,6 +71,10 @@ module ThemeJuice
65
71
  @dryrun = val ||= ENV.fetch("TJ_DRYRUN") { false }
66
72
  end
67
73
 
74
+ def nginx=(val)
75
+ @nginx = val ||= ENV.fetch("TJ_NGINX") { false }
76
+ end
77
+
68
78
  extend self
69
79
  end
70
80
  end
@@ -4,16 +4,19 @@ module ThemeJuice
4
4
  module IO
5
5
  include Thor::Shell
6
6
 
7
+ alias_method :_say, :say
8
+ alias_method :_ask, :ask
9
+
7
10
  ICONS = {
8
- :success => "✓", # "\u2713",
9
- :error => "↑", # "\u2191",
10
- :notice => "→", # "\u2192",
11
- :question => "•", # "\u2022",
12
- :general => "›", # "\u203A",
13
- :log => "…", # "\u2026",
14
- :restart => "↪", # "\u21AA",
15
- :selected => "•", # "\u2022",
16
- :unselected => "○", # "\u25CB",
11
+ :success => "✓",
12
+ :error => "↑",
13
+ :notice => "→",
14
+ :question => "•",
15
+ :general => "›",
16
+ :log => "…",
17
+ :restart => "↪",
18
+ :selected => "•",
19
+ :unselected => "○",
17
20
  :fallback_success => "+",
18
21
  :fallback_error => "!",
19
22
  :fallback_notice => "!",
@@ -38,58 +41,48 @@ module ThemeJuice
38
41
  " " => "space",
39
42
  }
40
43
 
41
- @env = Env
42
- @sel = 0
44
+ @env = Env
45
+ @project = Project
46
+ @sel = 0
43
47
 
44
- def speak(message, opts = {})
45
- format_message message, opts
46
- output_message
48
+ def say(message, opts = {})
49
+ output_message format_message(message, opts), opts
47
50
  end
48
51
 
49
- def prompt(question, *opts)
50
- format_message question, {
51
- :color => :blue,
52
- :icon => :question
52
+ def ask(question, *opts)
53
+ indentation = if opts[0].respond_to? :fetch
54
+ opts[0].fetch :indent, 0
55
+ else
56
+ 0
57
+ end
58
+
59
+ q = format_message question, {
60
+ :color => :blue,
61
+ :icon => :question,
62
+ :indent => indentation
53
63
  }
54
64
 
55
- opts.each do |opt|
56
-
57
- # if opt[:default]
58
- # opt[:default] = set_color(opt[:default], :black, :bold) unless @env.no_colors
59
- # end
60
-
61
- if opt[:indent]
62
- with(question) { |str| (" " * opt[:indent]) << str }
63
- end
64
-
65
- break
66
- end
67
-
68
- ask("#{question} :", *opts).gsub /\e\[\d+m/, ""
65
+ _ask("#{q} :", *opts).gsub /\e\[\d+m/, ""
69
66
  end
70
67
 
71
68
  def agree?(question, opts = {})
72
- format_message question, {
69
+ q = format_message question, {
73
70
  :color => opts.fetch("color", :blue),
74
71
  :icon => :question
75
72
  }
76
73
 
77
- if opts[:simple]
78
- yes? " :", opts.fetch("color", {})
79
- else
80
- yes? "#{question} (y/N) :"
81
- end
74
+ yes? "#{q} (y/N) :"
82
75
  end
83
76
 
84
77
  def log(message)
85
- speak message, {
78
+ say message, {
86
79
  :color => :yellow,
87
80
  :icon => :log
88
81
  }
89
82
  end
90
83
 
91
84
  def success(message)
92
- speak message, {
85
+ say message, {
93
86
  :color => [:black, :on_green, :bold],
94
87
  :icon => :success,
95
88
  :row => true
@@ -97,7 +90,7 @@ module ThemeJuice
97
90
  end
98
91
 
99
92
  def notice(message)
100
- speak message, {
93
+ say message, {
101
94
  :color => [:black, :on_yellow],
102
95
  :icon => :notice,
103
96
  :row => true
@@ -105,7 +98,7 @@ module ThemeJuice
105
98
  end
106
99
 
107
100
  def error(message, code = SystemExit)
108
- speak message, {
101
+ say message, {
109
102
  :color => [:white, :on_red],
110
103
  :icon => :error,
111
104
  :row => true
@@ -117,7 +110,7 @@ module ThemeJuice
117
110
  end
118
111
 
119
112
  def hello(opts = {})
120
- speak "Welcome to Theme Juice!", {
113
+ say "Welcome to Theme Juice!", {
121
114
  :color => [:black, :on_green, :bold],
122
115
  :row => true
123
116
  }.merge(opts)
@@ -132,17 +125,16 @@ module ThemeJuice
132
125
  "Later, homes",
133
126
  "I'll be back",
134
127
  "Victory is ours!",
135
- "May the force be with you",
128
+ "May the juice be with you",
136
129
  "Take a break, man...",
137
130
  "It's not me, it's you",
138
131
  "Go home, developer, you're drunk",
139
132
  "Okay, this is getting a little out of hand...",
140
133
  "I don't like it when you press my buttons",
141
134
  "Ouch!",
142
- ":(",
143
135
  ]
144
136
 
145
- speak goodbyes.sample, {
137
+ say goodbyes.sample, {
146
138
  :color => :yellow,
147
139
  :newline => true
148
140
  }.merge(opts)
@@ -151,14 +143,14 @@ module ThemeJuice
151
143
  end
152
144
 
153
145
  def list(header, color, list)
154
- speak header, {
146
+ say header, {
155
147
  :color => [:black, :"on_#{color}"],
156
148
  :icon => :notice,
157
149
  :row => true
158
150
  }
159
151
 
160
152
  list.each do |item|
161
- speak item, {
153
+ say item, {
162
154
  :color => :"#{color}",
163
155
  :icon => :general
164
156
  }
@@ -166,7 +158,7 @@ module ThemeJuice
166
158
  end
167
159
 
168
160
  def choose(header, color, list)
169
- speak "#{header} (#{choose_instructions})", {
161
+ say "#{header} (#{choose_instructions})", {
170
162
  :color => :"#{color}",
171
163
  :icon => :question
172
164
  }
@@ -186,13 +178,14 @@ module ThemeJuice
186
178
  when "esc", "ctrl+c"
187
179
  goodbye :newline => false
188
180
  # else
189
- # speak key.inspect, { :color => :yellow }
181
+ # say key.inspect, { :color => :yellow }
190
182
  end
191
183
  end
192
184
  end
193
185
 
194
186
  private
195
187
 
188
+ # @TODO Windows has issues registering the arrow and enter keys
196
189
  def choose_instructions
197
190
  if OS.windows?
198
191
  "use WASD keys and press space"
@@ -210,7 +203,7 @@ module ThemeJuice
210
203
 
211
204
  list.each_with_index do |item, i|
212
205
  icon = i == @sel ? "selected" : "unselected"
213
- speak "#{item}", {
206
+ say "#{item}", {
214
207
  :color => :"#{color}",
215
208
  :icon => :"#{icon}",
216
209
  :indent => 2
@@ -236,58 +229,62 @@ module ThemeJuice
236
229
  end
237
230
 
238
231
  def format_message(message, opts = {})
239
- @message, @opts = message, opts
240
232
 
241
- format_message_icon
242
- format_message_newline
243
- format_message_row
244
- format_message_width
245
- format_message_color
246
- format_message_indent
233
+ %W[icon newline row width color indent].each do |f|
234
+ message = self.send "format_#{f}", message, opts
235
+ end
247
236
 
248
- @message
237
+ message
249
238
  end
250
239
 
251
- def with(string)
252
- str = yield(string); string.clear; string << str
253
- end
240
+ def format_icon(message, opts)
241
+ return " #{message}" if opts[:icon].nil?
254
242
 
255
- def format_message_icon
256
- icon = @env.no_unicode ? "fallback_#{@opts[:icon]}" : "#{@opts[:icon]}"
243
+ icon = if @env.no_unicode
244
+ "fallback_#{opts[:icon]}"
245
+ else
246
+ "#{opts[:icon]}"
247
+ end
257
248
 
258
- if @opts[:icon]
259
- with(@message) { |msg| "#{ICONS[:"#{icon}"]}" << (@opts[:empty] ? nil : " #{msg}") }
260
- else
261
- with(@message) { |msg| "" << msg }
262
- end
249
+ " #{ICONS[:"#{icon}"]} " << message
263
250
  end
264
251
 
265
- def format_message_newline
266
- with(@message) { |msg| "\n" << msg } if @opts[:newline]
252
+ def format_newline(message, opts)
253
+ return message if opts[:newline].nil?
254
+
255
+ "\n#{message}"
267
256
  end
268
257
 
269
- def format_message_color
270
- unless @env.no_colors
271
- with(@message) { |msg| set_color(msg, *@opts[:color]) } if @opts[:color]
272
- end
258
+ def format_color(message, opts)
259
+ return message if @env.no_colors || opts[:color].nil?
260
+
261
+ set_color(message, *opts[:color])
273
262
  end
274
263
 
275
- def format_message_row
276
- unless OS.windows?
277
- with(@message) { |msg| msg.ljust(terminal_width) } if @opts[:row]
278
- end
264
+ def format_row(message, opts)
265
+ return message if OS.windows? || opts[:row].nil?
266
+
267
+ message.ljust terminal_width
279
268
  end
280
269
 
281
- def format_message_width
282
- with(@message) { |msg| msg.ljust(@opts[:width]) } if @opts[:width]
270
+ def format_width(message, opts)
271
+ return message if opts[:width].nil?
272
+
273
+ message.ljust opts[:width]
283
274
  end
284
275
 
285
- def format_message_indent
286
- with(@message) { |str| (" " * @opts[:indent]) << str } if @opts[:indent]
276
+ def format_indent(message, opts)
277
+ return message if opts[:indent].nil?
278
+
279
+ (" " * opts[:indent]) << message
287
280
  end
288
281
 
289
- def output_message
290
- @opts[:quiet] ? @message : say(@message)
282
+ def output_message(message, opts)
283
+ if opts[:quiet]
284
+ message
285
+ else
286
+ _say message
287
+ end
291
288
  end
292
289
 
293
290
  extend self
@@ -10,190 +10,242 @@
10
10
  \fBtj\fR [\fIcommand\fR] [\-\-flag=\fIarg\fR] [\-\-flag]
11
11
  .
12
12
  .SH "DESCRIPTION"
13
- \fBTheme Juice\fR is a WordPress development command line utility that allows you to scaffold out entire Vagrant development environments in seconds (using VVV \fIhttps://github\.com/Varying\-Vagrant\-Vagrants/VVV\fR as the VM), manage dependencies and build tools, and even handle deployments\.
13
+ \fBTheme Juice\fR is a WordPress development command line utility that allows you to scaffold out an entire Vagrant development environment in seconds (using an Apache fork of VVV \fIhttps://github\.com/Varying\-Vagrant\-Vagrants/VVV\fR called VVV\-Apache \fIhttps://github\.com/ericmann/vvv\-apache\.git\fR as the VM)\. It also helps you manage dependencies and build tools, and can even handle your deployments\.
14
14
  .
15
15
  .SH "GLOBAL OPTIONS"
16
16
  .
17
17
  .TP
18
- \fB\-\-vm\-box\fR=\fIrepository\fR:
19
- .
20
- .br
21
- Force Vagrant box to use for VM
22
-
18
+ \fB\-\-vm\-box\fR=\fIrepository\fR
19
+ Force Vagrant box for use as VM
23
20
  .
24
21
  .TP
25
- \fB\-\-vm\-path\fR=\fIpath\fR:
26
- .
27
- .br
22
+ \fB\-\-vm\-path\fR=\fIpath\fR
28
23
  Force path to VM
29
-
30
24
  .
31
25
  .TP
32
- \fB\-\-vm\-ip\fR=\fIip\fR:
33
- .
34
- .br
26
+ \fB\-\-vm\-ip\fR=\fIip\fR
35
27
  Force IP address of VM
36
-
37
28
  .
38
29
  .TP
39
- \fB\-\-vm\-prefix\fR=\fIstring\fR:
40
- .
41
- .br
30
+ \fB\-\-vm\-prefix\fR=\fIstring\fR
42
31
  Force directory prefix for project in VM
43
-
44
32
  .
45
33
  .TP
46
- \fB\-\-yolo\fR:
47
- .
48
- .br
34
+ \fB\-\-yolo\fR
49
35
  Say yes to anything and everything
50
-
51
36
  .
52
37
  .TP
53
- \fB\-\-boring\fR:
54
- .
55
- .br
38
+ \fB\-\-boring\fR
56
39
  Prints all output without any fancy formatting
57
-
58
40
  .
59
41
  .TP
60
- \fB\-\-no\-unicode\fR:
61
- .
62
- .br
42
+ \fB\-\-no\-unicode\fR
63
43
  Prints all output without unicode characters
64
-
65
44
  .
66
45
  .TP
67
- \fB\-\-no\-colors\fR, \fB\-\-no\-color\fR:
68
- .
69
- .br
46
+ \fB\-\-no\-colors\fR, \fB\-\-no\-color\fR
70
47
  Prints all output without color
71
-
72
48
  .
73
49
  .TP
74
- \fB\-\-no\-animations\fR:
75
- .
76
- .br
77
- Prints all output without animations (coming soon)
78
-
50
+ \fB\-\-no\-animations\fR
51
+ Prints all output without animations
79
52
  .
80
53
  .TP
81
- \fB\-\-no\-landrush\fR:
82
- .
83
- .br
54
+ \fB\-\-no\-landrush\fR
84
55
  Disable the \fBlandrush\fR gem for managing DNS
85
-
86
56
  .
87
57
  .TP
88
- \fB\-\-verbose\fR:
58
+ \fB\-\-no\-port\-forward\fR, \fB\-\-no\-port\-forwarding\fR
59
+ Disable automatic port forwarding
89
60
  .
90
- .br
61
+ .TP
62
+ \fB\-\-verbose\fR
91
63
  Prints out additional logging information
92
-
93
64
  .
94
65
  .TP
95
- \fB\-\-dryrun\fR, \fB\-\-dry\-run\fR:
96
- .
97
- .br
66
+ \fB\-\-dryrun\fR, \fB\-\-dry\-run\fR
98
67
  Run a command without actually doing anything
99
-
68
+ .
69
+ .TP
70
+ \fB\-\-nginx\fR, \fB\-\-no\-apache\fR
71
+ Create conf files for nginx instead of apache
100
72
  .
101
73
  .SH "PRIMARY COMMANDS"
102
74
  Run \fBtj help\fR [\fIcommand\fR] to view an individual command\'s man page\.
103
75
  .
104
76
  .TP
105
- \fBcreate\fR, \fBnew\fR, \fBmk\fR:
106
- .
107
- .br
77
+ \fBcreate\fR, \fBnew\fR, \fBmk\fR
108
78
  Create a new project
109
-
110
79
  .
111
80
  .TP
112
- \fBsetup\fR, \fBup\fR, \fBinit\fR:
113
- .
114
- .br
81
+ \fBsetup\fR, \fBup\fR, \fBinit\fR
115
82
  Setup an existing project
116
-
117
83
  .
118
84
  .TP
119
- \fBdelete\fR, \fBrm\fR, \fBremove\fR, \fBtrash\fR:
120
- .
121
- .br
85
+ \fBdelete\fR, \fBrm\fR, \fBremove\fR, \fBtrash\fR
122
86
  Delete a project
123
-
87
+ .
88
+ .TP
89
+ \fBdeploy\fR, \fBserver\fR, \fBremote\fR
90
+ Deploy a project
124
91
  .
125
92
  .SH "SECONDARY COMMANDS"
126
93
  .
127
94
  .TP
128
- \fBversion\fR, \fB\-\-version\fR, \fB\-v\fR:
129
- .
130
- .br
95
+ \fBversion\fR, \fB\-\-version\fR, \fB\-v\fR
131
96
  Print the current version
132
-
133
97
  .
134
98
  .TP
135
- \fBlist\fR, \fBls\fR, \fBprojects\fR, \fBapps\fR, \fBsites\fR:
136
- .
137
- .br
99
+ \fBlist\fR, \fBls\fR, \fBprojects\fR, \fBapps\fR, \fBsites\fR
138
100
  List all projects
139
-
140
101
  .
141
102
  .TP
142
- \fBvm\fR, \fBvagrant\fR, \fBvvv\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
143
- .
144
- .br
145
- Manage development environment\. Commands are proxied to your Vagrant installation so that they can be run from any directory\.
146
-
103
+ \fBvm\fR, \fBvagrant\fR, \fBvvv\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]
104
+ Manage development environment via \fBvagrant\fR\. Commands are proxied to your Vagrant installation so that they can be run from any directory\.
147
105
  .
148
106
  .SH "CONFIG COMMANDS"
149
- These run the corresponding command from your project\'s config file\. They accept any number of commands, since the behavior and handling of input is defined within the config file itself\.
107
+ These run the corresponding command from your project\'s config file\. They accept any number of arguments, since the behavior and handling of input is defined within the config file itself\.
150
108
  .
151
109
  .TP
152
- \fBinstall\fR, \fBbuild\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
153
- .
154
- .br
110
+ \fBinstall\fR, \fBbuild\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
155
111
  Run installation for project
156
-
157
112
  .
158
113
  .TP
159
- \fBwatch\fR, \fBdev\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
160
- .
161
- .br
114
+ \fBwatch\fR, \fBdev\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
162
115
  Manage and run development build tools
163
-
164
116
  .
165
117
  .TP
166
- \fBvendor\fR, \fBdeps\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
167
- .
168
- .br
118
+ \fBvendor\fR, \fBdeps\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
169
119
  Manage PHP vendor dependencies
170
-
171
120
  .
172
121
  .TP
173
- \fBdist\fR, \fBpkg\fR, \fBpackage\fR, \fBzip\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
174
- .
175
- .br
122
+ \fBdist\fR, \fBpkg\fR, \fBpackage\fR, \fBzip\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
176
123
  Package project for distribution
177
-
178
124
  .
179
125
  .TP
180
- \fBwp\fR, \fBwordpress\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
126
+ \fBwp\fR, \fBwordpress\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
127
+ Manage WordPress installation
128
+ .
129
+ .TP
130
+ \fBbackup\fR, \fBbk\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
131
+ Backup project
132
+ .
133
+ .TP
134
+ \fBtest\fR, \fBtests\fR, \fBspec\fR, \fBspecs\fR=[\fIarg\fR[,\fIarg\fR]\.\.\.]
135
+ Manage and run project tests
136
+ .
137
+ .SH "CONFIG FILE"
138
+ A YAML configuration file (\fBJuicefile\fR) can be used to store commonly\-used build scripts\. Each command block sequence can be mapped to an individual project\'s build tool, allowing a streamlined set of commands to be used across multiple projects that utilize different tools\.
139
+ .
140
+ .TP
141
+ \fBcommands\fR
142
+ Collection of various command block sequences
143
+ .
144
+ .TP
145
+ \fBcommands\.install\fR
146
+ Run theme installation
181
147
  .
182
- .br
148
+ .TP
149
+ \fBcommands\.watch\fR
150
+ Manage development build tools
151
+ .
152
+ .TP
153
+ \fBcommands\.vendor\fR
154
+ Manage vendor dependencies
155
+ .
156
+ .TP
157
+ \fBcommands\.wp\fR
183
158
  Manage WordPress installation
184
-
185
159
  .
186
160
  .TP
187
- \fBbackup\fR, \fBbk\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
161
+ \fBcommands\.dist\fR
162
+ Package project for distribution
188
163
  .
189
- .br
164
+ .TP
165
+ \fBcommands\.backup\fR
190
166
  Backup project
191
-
192
167
  .
193
168
  .TP
194
- \fBtest\fR, \fBtests\fR, \fBspec\fR, \fBspecs\fR=[\fIcommand\fR[,\fIcommand\fR]\.\.\.]:
195
- .
196
- .br
169
+ \fBcommands\.test\fR
197
170
  Manage and run project tests
198
-
171
+ .
172
+ .TP
173
+ \fBdeployment\fR
174
+ Coming soon
175
+ .
176
+ .P
177
+ Placeholder arguments can be used within any command block sequence to allow splat or indexed arguments to be passed to the corresponding command when executed\.
178
+ .
179
+ .TP
180
+ \fB%args%\fR, \fB%arguments%\fR
181
+ Splat argument placeholder e\.g\. \fBcmd %args%\fR
182
+ .
183
+ .TP
184
+ \fB%argN%\fR, \fB%argumentN%\fR
185
+ Where \fBn\fR is the argument index e\.g\. \fBcmd %arg1% | cmd %arg2%\fR
186
+ .
187
+ .P
188
+ When naming your configuration file, use the recommended \fBJuicefile\fR, or \fB\.tj\.yaml\fR naming convention\. The raw filename regex matcher is below if you want to be a little different\.
189
+ .
190
+ .P
191
+ \fB/^(((\e\.)?(tj)|((J|j)uicefile))(\.y(a)?ml)?$)/\fR
192
+ .
193
+ .SH "ENVIRONMENT"
194
+ All of the global options have a corresponding \fBENV\fR variable that can be set to permanently use the specified value each time \fBtj\fR is run\. This is useful if you\'re using an alternate Vagrant box, or if you need to disable certain features due to limited support e\.g\. on Windows\.
195
+ .
196
+ .TP
197
+ \fBTJ_VM_BOX\fR=\fIrepository\fR
198
+ Force Vagrant box for use as VM
199
+ .
200
+ .TP
201
+ \fBTJ_PATH\fR=\fIpath\fR
202
+ Force path to VM
203
+ .
204
+ .TP
205
+ \fBTJ_IP\fR=\fIip\fR
206
+ Force IP address of VM
207
+ .
208
+ .TP
209
+ \fBTJ_PREFIX\fR=\fIstring\fR
210
+ Force directory prefix for project in VM
211
+ .
212
+ .TP
213
+ \fBTJ_YOLO\fR=\fIbool\fR
214
+ Say yes to anything and everything
215
+ .
216
+ .TP
217
+ \fBTJ_BORING\fR=\fIbool\fR
218
+ Prints all output without any fancy formatting
219
+ .
220
+ .TP
221
+ \fBTJ_NO_UNICODE\fR=\fIbool\fR
222
+ Prints all output without unicode characters
223
+ .
224
+ .TP
225
+ \fBTJ_NO_COLORS\fR=\fIbool\fR
226
+ Prints all output without color
227
+ .
228
+ .TP
229
+ \fBTJ_NO_ANIMATIONS\fR=\fIbool\fR
230
+ Prints all output without animations (coming soon)
231
+ .
232
+ .TP
233
+ \fBTJ_NO_LANDRUSH\fR=\fIbool\fR
234
+ Disable the \fBlandrush\fR gem for managing DNS
235
+ .
236
+ .TP
237
+ \fBTJ_NO_PORT_FORWARD\fR=\fIbool\fR
238
+ Disable automatic port forwarding
239
+ .
240
+ .TP
241
+ \fBTJ_VERBOSE\fR=\fIbool\fR
242
+ Prints out additional logging information
243
+ .
244
+ .TP
245
+ \fBTJ_DRYRUN\fR=\fIbool\fR
246
+ Run a command without actually doing anything
247
+ .
248
+ .TP
249
+ \fBTJ_NGINX\fR=\fIbool\fR
250
+ Create conf files for nginx instead of apache
199
251