-
Notifications
You must be signed in to change notification settings - Fork 2
/
welcome.rb
192 lines (165 loc) · 5.51 KB
/
welcome.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#!/usr/bin/env ruby
require "etc"
require "tty-prompt"
require "tty-screen"
require "uri"
def sep
puts
puts "~" * TTY::Screen.width
puts
end
prompt = TTY::Prompt.new
shell = ""
system "clear"
# welcome
system "figlet -f slant tilde.club"
puts
puts "welcome to tilde.club!!"
puts
puts "we're glad you're here!"
puts "let's walk through some basic questions to get you set up"
prompt.keypress("ready? press enter to continue")
puts
# change your password
sep
puts "step 1:"
puts " first, let's change your shell password"
puts
puts " you'll find the temporary password in your welcome email"
puts " enter the current password once, followed by your new password twice"
success = false
until success do
success = system "passwd"
end
# select your shell
sep
puts "step 2:"
puts " now, let's pick your default shell"
puts
puts " a shell is a program that handles commands you type"
puts " bash is the most common shell and is a good place to start"
puts " note that the list of shells extends beyond one page"
puts
shells = File.readlines("/etc/shells")
.select { |line| !line.start_with?("#") }
.map(&:chomp)
.map { |line| [File.basename(line), line] }
.to_h
shell = prompt.select(" which shell would you like to use?", shells, per_page: shells.count)
puts
puts " great, you've picked #{shell}!"
puts " in order to change your shell, you'll have to enter your password again"
success = false
until success do
success = system "chsh -s #{shell}"
end
# default text editor
sep
puts "step 3:"
puts " now, let's pick your default text editor"
puts
puts " You can change the default command-line text"
puts " editor used by various programs, such as crontab"
puts
editors = File.readlines("/etc/editors")
.select { |line| !line.start_with?("#") }
.map(&:chomp)
.map { |line| [File.basename(line), line] }
.to_h
editors = prompt.select(" which editor would you like to use?", editors, per_page: editors.count)
puts
puts " great, you've picked #{editors}!"
success = false
until success do
success = system "echo 'export EDITOR=#{editors}' >> #{Dir.home}/.profile"
end
# byobu or not
sep
puts "step 4:"
puts " we recommend using a terminal multiplexer, which is a tool that allows you"
puts " to have tabs in your shell and even disconnect while leaving things running"
puts " as you left them."
puts
puts " the tool we recommend is byobu: https://superuser.com/a/423397/866501"
puts
puts " if you're not sure about this, decline for now. you can set it up at any time"
puts " later on by running 'byobu-enable' from your shell."
puts
enable_byobu = prompt.yes?(" would you like to set byobu to launch automatically when you log in?")
if enable_byobu
system "byobu-enable"
puts "our default configs will connect you to chat and open a mail client when you log in"
end
# tz
sep
puts "step 5:"
puts " great, let's set up your timezone!"
puts
tz = %x{tzselect}.chomp
puts
puts " you selected #{tz}, adding this to your profile now"
if File.basename(shell) == "zsh"
open("#{Dir.home}/.zshrc", "a") { |f| f.puts "export TZ='#{tz}'" }
puts " Timezone set in your .zshrc file for ZSH."
else
open("#{Dir.home}/.profile", "a") { |f| f.puts "export TZ='#{tz}'" }
puts " Timezone set in your .profile file."
end
puts " It might not take effect until you log out and back in."
# email forwarding
sep
puts "step 6:"
puts " tilde.club has a standard mailserver that you can use to send"
puts " and receive mail using #{Etc.getlogin}@tilde.club"
puts
if prompt.yes?(" would you like to forward your mail elsewhere?")
forward_addr = prompt.ask(" where would you like to forward your mail to?") do |q|
q.validate(URI::MailTo::EMAIL_REGEXP)
q.messages[:valid?] = "Invalid email address"
end
File.open("#{Dir.home}/.forward", "w") { |f| f.puts forward_addr }
puts " ok, your mail will now be sent off to #{forward_addr}"
puts " you can update this in your ~/.forward file"
puts " if you remove the file, you can use our mailserver as usual without forwarding"
else
puts " alright, your mail won't be forwarded anywhere."
puts " you can use any standard mail client with smtp and imap"
puts " to access your @tilde.club email"
puts " see the wiki page for more information: https://tilde.club/wiki/email.html"
puts
puts " if you decide to forward your mail in the future, you can do so"
puts " by putting the destination address in a file called ~/.forward"
puts " eg: echo \"[email protected]\" > ~/.forward"
end
puts
# 2fa
sep
puts "step 7:"
puts " tilde.club supports two factor authentication."
if prompt.yes?("would you like to set up 2fa now?")
system "setup-2fa"
else
puts " if you change your mind or need to make changes you can run"
puts " the 'setup-2fa' command"
puts " for additional info, see the wiki: https://tilde.club/wiki/2fa.html"
end
puts
# pronouns
sep
puts "step 8:"
pronouns = prompt.ask(" what are your preferred pronouns?")
puts " saving your pronouns to your ~/.pronouns file."
puts " feel free to update it as needed!"
open("#{Dir.home}/.pronouns", "w") { |f| f.puts pronouns }
# welcome completed
sep
puts "welcome to the ~club!"
puts
puts "please come stop by chat when you get a chance by running the 'chat' command" unless enable_byobu
puts "we're happy to help as needed and get you any information you're looking for"
puts "have a look at our wiki: https://tilde.club/wiki/ (ctrl-click will let you open that from here)"
puts "if you need to run this wizard again, you can do so with the `firstlogin` command"
File.delete("#{Dir.home}/.new_user")
if enable_byobu
exec "byobu"
end