Skip to content

Instantly share code, notes, and snippets.

@fredrikhenne
Created January 17, 2011 10:04
Show Gist options
  • Save fredrikhenne/782678 to your computer and use it in GitHub Desktop.
Save fredrikhenne/782678 to your computer and use it in GitHub Desktop.
#!/bin/bash
clear
# Define text colors
txtwhite='\e[0;37m' # White
txtgreen='\e[0;32m' # Green
txtyellow='\e[0;33m' # Yellow
txtred='\e[0;31m' # Red
function txt {
echo -e "${txtwhite}"
}
# Check if the user is root
if [ "$(id -u)" != "0" ]; then
echo -e "${txtred}This script must be run as root" 1>&2
txt
exit 1
fi
echo -e "${txtyellow}Welcome to the Arch Linux beginner configuration script"
echo -e "${txtyellow}You will be guided through the process of post-installation configuration"
txt
echo -e "${txtgreen}You must uncomment a server line in /etc/pacman.d/mirrorlist"
echo -e "${txtgreen}To do this, remove the # from the beginning of a line. To exit nano, hit Ctrl+X"
txt
sleep 5
nano /etc/pacman.d/mirrorlist
if [ -f /var/lib/pacman/db.lck ]; then
echo -e "${txtgreen}Removing database lock..."
txt
rm /var/lib/pacman/db.lck
fi
# Run an update
echo -e "${txtgreen}Running system upgrade..."
txt
pacman -Syu
clear
# Add a user
function user_add {
echo -en "${txtgreen}"
read -p "Would you like to create an initial user? [y/n] " -e answer
if [ $answer == "y" ]; then
echo -en "Entering the ${txtyellow}adduser${txtgreen} program..."
txt
adduser
elif [ $answer == "n" ]; then
return
else
echo -e "${txtred}Incorrect option"
user_add
fi
}
user_add
clear
# AUR Helper
function aur_config {
echo -en "${txtgreen}"
read -p "Which of the following AUR helpers would you like to install? [yaourt/packer/clyde/none] " -e answer
if [ $answer == "yaourt" ]; then
if [ ! -e /usr/bin/wget ]; then
pacman -S wget
fi
echo -en "Downloading package-query tarball..."
wget http://aur.archlinux.org/packages/package-query/package-query.tar.gz
tar xvf package-query.tar.gz
cd package-query
echo -en "Building package..."
makepkg -s --asroot
pacman -U package-query*.pkg.tar.xz
cd .. && rm -r package-query
echo -en "Downloading yaourt tarball..."
wget http://aur.archlinux.org/packages/yaourt/yaourt.tar.gz &> /dev/null
tar xvf yaourt.tar.gz
cd yaourt
echo -en "Building package..."
makepkg -s --asroot
pacman -U yaourt*.pkg.tar.xz
cd .. && rm -r yaourt
aur_helper="yaourt"
elif [ $answer == "packer" ]; then
if [ ! -e /usr/bin/wget ]; then
pacman -S wget
fi
echo -en "Downloading packer tarball..."
wget http://aur.archlinux.org/packages/packer/packer.tar.gz
tar xvf packer.tar.gz
cd packer
echo -en "Building package..."
makepkg -s --asroot
pacman -U packer*.pkg.tar.xz
cd .. && rm -r packer
aur_helper="packer"
elif [ $answer == "clyde" ]; then
if [ ! -e /usr/bin/wget ]; then
pacman -S wget
fi
echo -en "Downloading clyde tarball..."
wget http://aur.archlinux.org/packages/clyde-git/clyde-git.tar.gz
tar xvf clyde-git.tar.gz
cd clyde-git
echo -en "Building package..."
makepkg -s --asroot
pacman -U clyde*.pkg.tar.xz
cd .. && rm -r clyde-git
aur_helper="clyde"
elif [ $answer == "none" ]; then
aur_helper="none"
return
else
echo -e "${txtred}Incorrect option"
aur_config
fi
}
aur_config
clear
# Install X
function x_install {
echo -en "${txtgreen}"
read -p "Would you like to install and setup X? [y/n] " -e answer
if [ $answer == "y" ]; then
echo -en "Installing X via pacman..."
txt
pacman -S xorg
elif [ $answer == "n" ]; then
clear
echo -e "${txtgreen}Arch Linux config complete"
txt
exit
else
echo -e "${txtred}Incorrect option"
x_install
fi
}
x_install
clear
# Keyboard
function keyboard_install {
echo -en "${txtgreen}"
read -p "Will you be using a keyboard? [y/n] " -e answer
if [ $answer == "y" ]; then
echo -en "Installing keyboard driver via pacman..."
txt
pacman -S xf86-input-keyboard
elif [ $answer == "n" ]; then
return
else
echo -e "${txtred}Incorrect option"
keyboard_install
fi
}
keyboard_install
clear
# Touchpad
function synaptics_install {
echo -en "${txtgreen}"
read -p "Will you be using a laptop touchpad? [y/n] " -e answer
if [ $answer == "y" ]; then
echo -en "Installing touchpad driver via pacman..."
txt
pacman -S xf86-input-synaptics
elif [ $answer == "n" ]; then
return
else
echo -e "${txtred}Incorrect option"
synaptics_install
fi
}
synaptics_install
clear
# Mouse
function mouse_install {
echo -en "${txtgreen}"
read -p "Will you be using a mouse? [y/n] " -e answer
if [ $answer == "y" ]; then
echo -en "Installing mouse driver via pacman..."
txt
pacman -S xf86-input-mouse
elif [ $answer == "n" ]; then
return
else
echo -e "${txtred}Incorrect option"
mouse_install
fi
}
mouse_install
clear
function ati_install {
echo -en "${txtgreen}"
echo "NOTE: ati fits most cards and radeonhd is for r500/r600 cards"
read -p "Which of the following would you like to use? [ati/radeonhd/none] " -e answer
if [ $answer == "ati" ]; then
echo -en "Installing ATI driver via pacman..."
txt
pacman -S xf86-video-ati
elif [ $answer == "radeonhd" ]; then
echo -en "Installing ATI radeonhd driver via pacman..."
txt
pacman -S xf86-video-radeonhd
elif [ $answer == "none" ]; then
return
else
echo -e "${txtred}Incorrect option"
ati_install
fi
}
function nvidia_install {
echo -en "${txtgreen}"
echo "NOTE: nouveau is open source. You must add nouveau to the MODULES array in /etc/rc.conf"
read -p "Which of the following would you like to use? [nouveau/none] " -e answer
if [ $answer == "nouveau" ]; then
echo -en "Installing nVidia nouveau driver via pacman..."
txt
pacman -S xf86-video-nouveau
elif [ $answer == "none" ]; then
return
else
echo -e "${txtred}Incorrect option"
nvidia_install
fi
}
# Video card
function video_install {
echo -en "${txtgreen}"
read -p "Which brand of video card do you have installed in this PC? [ati/intel/nvidia/all/none] " -e answer
if [ $answer == "ati" ]; then
clear
ati_install
txt
elif [ $answer == "nvidia" ]; then
clear
nvidia_install
txt
elif [ $answer == "intel" ]; then
pacman -S xf86-video-intel
txt
elif [ $answer == "all" ]; then
clear
ati_install
nvidia_install
pacman -S xf86-video-intel
txt
elif [ $answer == "none" ]; then
return
else
echo -e "${txtred}Incorrect option"
video_install
fi
}
video_install
clear
# X user config
function x_user_config {
echo -en "${txtgreen}"
read -p "(If applicable) Enter the username of your previously created user [your username/none] " -e user
if [ $user == "none" ]; then
return
elif [ $user == "" ]; then
echo -e "${txtred}Incorrect option"
x_user_config
elif [ $user == " " ]; then
echo -e "${txtred}Incorrect option"
x_user_config
else
echo -e "#!/bin/sh\n" >> /home/$user/.xinitrc
chmod 755 /home/$user/.xinitrc
fi
}
x_user_config
clear
# Configure X
function x_config {
echo -en "${txtgreen}"
read -p "Would you like to automatically configure X (recommended)? [y/n] " -e answer
if [ $answer == "y" ]; then
echo -en "Automatically configuring X..."
txt
X -configure &> /dev/null
cp /root/xorg.conf.new /etc/X11/xorg.conf
echo -e "#!/bin/sh\n" >> /root/.xinitrc
chmod +x /root/.xinitrc
elif [ $answer == "n" ]; then
return
else
echo -ue "${txtred}Incorrect option"
x_config
fi
}
x_config
clear
# Desktop environment
function de_config {
echo -en "${txtgreen}"
read -p "Which desktop environment would you like to install? [gnome/kde/xfce/none] " -e answer
if [ $answer == "gnome" ]; then
echo -en "Installing gnome via pacman..."
txt
pacman -S gnome
echo "exec gnome-session" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec gnome-session" >> /home/$user/.xinitrc
fi
elif [ $answer == "kde" ]; then
echo -en "Installing kde via pacman..."
txt
pacman -S kde
echo "exec startkde" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec startkde" >> /home/$user/.xinitrc
fi
elif [ $answer == "xfce" ]; then
echo -en "Installing xfce4 via pacman..."
txt
pacman -S xfce4
echo "exec ck-launch-session startxfce4" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec ck-launch-session startxfce4" >> /home/$user/.xinitrc
fi
elif [ $answer == "none" ]; then
return
else
echo -ue "${txtred}Incorrect option"
de_config
fi
}
de_config
clear
# Window manager
function wm_config {
echo -en "${txtgreen}"
read -p "Which window manager would you like to install? [awesome/dwm/evilwm/enlightenment/fluxbox/i3/jwm/musca/openbox/pekwm/pawm/ratpoison/sawfish/scrotwm/xmonad/wmii/none] " -e answer
if [ $answer == "awesome" ]; then
echo -en "Installing awesome via pacman..."
txt
pacman -S awesome
echo "exec awesome" >> /root/.xinitrc
mkdir -p /root/.config/awesome/
cp /etc/xdg/awesome/rc.lua /root/.config/awesome
if [ $user != "none" ]; then
echo "exec awesome" >> /home/$user/.xinitrc
mkdir -p /home/$user/.config/awesome/
cp /etc/xdg/awesome/rc.lua /home/$user/.config/awesome
fi
elif [ $answer == "dwm" ]; then
echo -en "Installing dwm via pacman..."
txt
pacman -S dwm dmenu
echo "exec dwm" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec dwm" >> /home/$user/.xinitrc
fi
elif [ $answer == "evilwm" ]; then
echo -en "Installing evilwm via pacman..."
txt
pacman -S evilwm
echo "exec evilwm" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec evilwm" >> /home/$user/.xinitrc
fi
elif [ $answer == "enlightenmnt" ]; then
echo -en "Installing enlightenment via pacman..."
txt
pacman -S enlightenment
echo "exec enlightenment" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec enlightenment" >> /home/$user/.xinitrc
fi
elif [ $answer == "fluxbox" ]; then
echo -en "Installing enlightenment via pacman..."
txt
pacman -S fluxbox
echo "exec startfluxbox" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec startfluxbox" >> /home/$user/.xinitrc
fi
elif [ $answer == "i3" ]; then
echo -en "Installing i3 via pacman..."
txt
pacman -S fluxbox
echo "exec i3" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec i3" >> /home/$user/.xinitrc
fi
elif [ $answer == "jwm" ]; then
echo -en "Installing jwm via pacman..."
txt
pacman -S jwm
echo "exec jwm" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec jwm" >> /home/$user/.xinitrc
fi
elif [ $answer == "openbox" ]; then
echo -en "Installing openbox via pacman..."
txt
pacman -S openbox
echo "exec openbox-session" >> /root/.xinitrc
mkdir -p /root/.config/openbox/
cp /etc/xdg/openbox/rc.xml /root/.config/openbox/rc.xml
cp /etc/xdg/openbox/menu.xml /root/.config/openbox/menu.xml
if [ $user != "none" ]; then
echo "exec openbox-session" >> /home/$user/.xinitrc
mkdir -p /home/$user/.config/openbox/
cp /etc/xdg/openbox/rc.xml /home/$user/.config/openbox/rc.xml
cp /etc/xdg/openbox/menu.xml /home/$user/.config/openbox/menu.xml
chmod -R 755 /home/$user/.config/openbox/
fi
elif [ $answer == "pekwm" ]; then
echo -en "Installing pekwm via pacman..."
txt
pacman -S pekwm
echo "exec pekwm" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec pekwm" >> /home/$user/.xinitrc
fi
elif [ $answer == "pawm" ]; then
echo -en "Installing pawm via pacman..."
txt
pacman -S pawm
echo "exec pawm" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec pawm" >> /home/$user/.xinitrc
fi
elif [ $answer == "ratpoison" ]; then
echo -en "Installing ratpoison via pacman..."
txt
pacman -S ratpoison
echo "exec ratpoison" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec ratpoison" >> /home/$user/.xinitrc
fi
elif [ $answer == "sawfish" ]; then
echo -en "Installing sawfish via pacman..."
txt
pacman -S sawfish
echo "exec sawfish" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec sawfish" >> /home/$user/.xinitrc
fi
elif [ $answer == "scrotwm" ]; then
echo -en "Installing scrotwm via pacman..."
txt
pacman -S scrotwm dmenu
echo "exec scrotwm" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec scrotwm" >> /home/$user/.xinitrc
fi
elif [ $answer == "xmonad" ]; then
echo -en "Installing xmonad via pacman..."
txt
pacman -S xmonad
echo "exec xmonad" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec xmonad" >> /home/$user/.xinitrc
fi
elif [ $answer == "wmii" ]; then
echo -en "Installing wmii via pacman..."
txt
pacman -S wmii
echo "exec wmii" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec wmii" >> /home/$user/.xinitrc
fi
elif [ $answer == "musca" ]; then
if [ $aur_helper == "none" ]; then
echo -e "${txtred}You must have an AUR helper to install musca"
txt
wm_config
fi
echo -en "Installing musca via $aur_helper"
$aur_helper -S musca
echo "exec musca" >> /root/.xinitrc
if [ $user != "none" ]; then
echo "exec musca" >> /home/$user/.xinitrc
fi
elif [ $answer == "none" ]; then
return
else
echo -ue "${txtred}Incorrect option"
de_config
fi
}
wm_config
clear
# Web Browser
function browser_config {
echo -en "${txtgreen}"
read -p "Which of the following web browsers would you like to install? [firefox/seamonkey/uzbl/jumanji/none] " -e answer
if [ $answer == "firefox" ]; then
echo -en "Installing firefox via pacman..."
txt
pacman -S firefox
elif [ $answer == "seamonkey" ]; then
echo -en "Installing seamonkey via pacman..."
txt
pacman -S seamonkey
elif [ $answer == "uzbl" ]; then
echo -en "Installing uzbl via pacman..."
txt
pacman -S uzbl-tabbed
elif [ $answer == "jumanji" ]; then
if [ $aur_helper == "none" ]; then
echo -e "${txtred}You must have an AUR helper to install jumanji"
txt
browser_config
fi
echo -en "Installing jumanji-git via $aur_helper..."
txt
$aur_helper -S jumanji-git
elif [ $answer == "none" ]; then
return
else
echo -ue "${txtred}Incorrect option"
browser_config
fi
}
browser_config
clear
echo -e "${txtgreen}Arch Linux config complete"
txt
exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment