mirror of https://github.com/tildeclub/welcome.git
205 lines
6.0 KiB
Ruby
205 lines
6.0 KiB
Ruby
#!/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?("#") }
|
|
.select { |line| File.basename(line).match?(/^(sh|bash|zsh|fish|csh|tcsh|ksh|mksh|dash|xonsh|powershell|elvish|rksh|rmksh|hx)$/) }
|
|
.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
|
|
retries = 3
|
|
until success || retries == 0 do
|
|
success = system "chsh -s #{shell}"
|
|
unless success
|
|
retries -= 1
|
|
puts " Error: Failed to change the shell. Please try again. (#{retries} retries left)"
|
|
end
|
|
end
|
|
|
|
if success
|
|
puts " Your default shell has been successfully changed to #{shell}."
|
|
else
|
|
puts " Failed to change the shell after multiple attempts. Please contact support."
|
|
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}/.bash_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}/.bash_profile", "a") { |f| f.puts "export TZ='#{tz}'" }
|
|
puts " Timezone set in your .bash_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 \"me@example.com\" > ~/.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
|