# My Development Setup
I always envied :unamused: Mac users until I found [Elementary OS](https://elementary.io) <img src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse4.mm.bing.net%2Fth%3Fid%3DOIP.MYqzu9C0dmtRrM2BukhamAHaHa%26pid%3DApi&f=1" width=20 /> 3 years ago and I must confess, I have never thought of trying any other linux distro and my burning desire for a Mac has been quenched :fire: :fire_engine: by Elementary OS and hell-no going back to Windows 10 for development :-1: . I simply love the look and feel of <img src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse4.mm.bing.net%2Fth%3Fid%3DOIP.MYqzu9C0dmtRrM2BukhamAHaHa%26pid%3DApi&f=1" width=20 />OS :relaxed:.
Follow through this guide and get your machine ready for full-stack development. By the way I am not a Full Stack Developer yet but I'm working towards that goal :sunglasses::+1:.
- ### Update the OS
```bash=
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt install software-properties-common apt-transport-https curl
sudo apt autoremove
```
- ### Install APT-FAST :zap:
If you chose to skip this step, start every `apt` command with `sudo`
```bash=
sudo add-apt-repository -y ppa:apt-fast/stable
sudo apt -y install apt-fast
echo $'\nalias apt="apt-fast"' >> ~/.bashrc
source ~/.bashrc
```
- ### Browse the Web
- ### [Brave Browser](https://brave.com/linux/#linux) (recommended)
```bash=
apt install apt-transport-https curl gnupg
curl -s https://brave-browser-apt-release.s3.brave.com/brave-core.asc | sudo apt-key --keyring /etc/apt/trusted.gpg.d/brave-browser-release.gpg add -
echo "deb [arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" | sudo tee /etc/apt/sources.list.d/brave-browser-release.list
apt update
apt install brave-browser
```
- #### Firefox Developer Edition
```bash=
umake web firefox-dev
```
- ### Install system tweak tools :wrench:
```bash=
sudo apt install software-properties-common
sudo add-apt-repository ppa:philip.scott/elementary-tweaks
sudo apt update
sudo apt install elementary-tweaks
```
- ### Tweak your system :gear:
```bash=
# Icon Pack La Capitaine by @keeferrourke
mkdir ~/.icons && cd ~/.icons
git clone https://github.com/keeferrourke/la-capitaine-icon-theme.git
cd la-capitaine-icon-theme && ./configure
# Icon Pack La Capitaine by @keeferrourke
sudo add-apt-repository ppa:dyatlov-igor/la-capitaine
apt install la-capitaine-cursor-theme
# Fix Lag on Login/Restart by @Jason Waddington
sudo mv /etc/xdg/autostart/at-spi-dbus-bus.desktop /etc/xdg/autostart/at-spi-dbus-bus.disabled
sudo mv /usr/share/upstart/xdg/autostart/at-spi-dbus-bus.desktop /usr/share/upstart/xdg/autostart/at-spi-dbus-bus.disabled
```
- ### Change computer name(optional) :pencil2:
```bash=
# replace <computerName> with your prefered name
sudo gedit /etc/hosts
# 127.0.1.1 <computerName>
sudo gedit /etc/hostname
#<computerName>
```
- ### Install some system tools :computer:
```bash=
# For editing files
apt install gedit
# Improves battery life by reducing the number of running programms
sudo add-apt-repository ppa:linrunner/tlp
apt update
apt install tlp tlp-rdw
sudo tlp start
# Install Laptop Mode Tools
sudo add-apt-repository ppa:ubuntuhandbook1/apps
apt update
apt install laptop-mode-tools
```
- ### Install Archive Formats :package:
```bash=
apt install unace rar unrar p7zip-rar p7zip sharutils uudeview mpack arj cabextract lzip lunzip
```
- ### Install Snap Package Manager:package:
```bash=
apt update
apt installl snapd
```
- ### Install Ubuntu Make
```bash=
sudo add-apt-repository ppa:lyzardking/ubuntu-make
apt update
apt install ubuntu-make
```
- ### Install Git and SSH
```bash=
apt install openssh-server
apt install git
ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub
# copy the output and create a new SSH key on [Github](https://github.com/settings/ssh/new)
```
- ### Must Have
- Zeal Offline Documentation for Developers( any language)
```bash=
apt install zeal
```
- Eddy( for installing .deb files) <img src="https://appstream.elementary.io/appcenter/media/bionic/com/github/donadigo.eddy/090625F15DE0228415D57CEAC2CE5B19/icons/64x64/com.github.donadigo.eddy_com.github.donadigo.eddy.png" width=20 />
[](
https://appcenter.elementary.io/com.github.donadigo.eddy)
- Xtreme Downlaod Manager <a href="https://github.com/subhra74/xdm/releases/download/7.2.11/xdm-setup-7.2.11.tar.xz"><img src="https://camo.githubusercontent.com/9ec1fbf8543b4cf2150977e7056d17d442b387e51005cf3f727491eb286a3cf5/68747470733a2f2f692e737461636b2e696d6775722e636f6d2f544f66714c2e706e67" width=20px /> Download here</a>
1.Extract the downloaded tar.xz file
2. Follow the instructions in the `readme.txt` file
- Gparted: Partition maker
```bash=
apt install gparted
```
- ### Docker :whale2:
Follow the tutorial on [Installing Docker CE on elementary OS 5.0 Juno](https://blog.avojak.com/2019/01/18/installing-docker-on-elementary-os/) for a detailed explanation of the commands below
```bash=
# uninstall previous versions
sudo apt-get remove \
docker \
docker-engine \
docker.io \
containerd \
runc
# Install Docker CE via the Docker repository
apt update
apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
# Add Docker's GPG key, and verify that you have the key with the
# fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
# your output must be exactly like below
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
# Add the stable Docker repository.
# The key here is to use bionic,
# because elementary OS 5.0 Juno is build on Ubuntu 18.04 LTS "Bionic Beaver".
sudo apt-add-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
# Install Docker CE
sudo apt update
sudo apt install docker-ce
# Add your user to the docker group to avoid typing sudo for every docker command:
sudo usermod -aG docker ${USER}
su - ${USER}
id -nG
# Install DockerCompose
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Make the binart executable
sudo chmod +x /usr/local/bin/docker-compose
# Note: If the command docker-compose fails after installation, check your path.
# You can also create a symbolic link to /usr/bin or any other directory in your path.
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# Optionally, install command completion for the bash and zsh shell.
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.28.2/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
# Test the installation.
docker-compose --version
```
- ### Kitematic: Docker GUI
<a href="https://github.com/docker/kitematic/releases/download/v0.17.13/Kitematic-0.17.13-Ubuntu.zip" ><img src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse2.mm.bing.net%2Fth%3Fid%3DOIP.Ls6eKNKThoBKVimtpNgexgHaHa%26pid%3DApi&f=1" width=60 /> Download here</a>
- ### IDE :memo:
Run `umake ide --help` or `umake --list` to see all IDE you can install
Get the [beautiful Operator Mono Book Lig fonts here](https://github.com/KayodeOgidan/Operator-Mono-Fonts.git )
- #### Visual Studio Code
Checkout my Extensions Settings per language/framework for VS Code
```bash=
umake ide visual-studio-code
```
- ### Netbeans
```bash=
umake ide netbeans
```
- ### PHP Storm
```bash=
umake ide phpstorm
```
- ### Sublime
```bash=
umake ide sublime-text
```
- ### Pycharm
```bash=
umake ide pycharm # pycharm-educational or pycharm-professional
```
- ### Webstorm
```bash=
umake ide webstorm
```
- ### GraphQL Playground
<a href="https://github.com/graphql/graphql-playground/releases/download/v1.8.10/graphql-playground-electron_1.8.10_amd64.deb" > <img src="https://camo.githubusercontent.com/595fe5c1bfc8ed17466062617e08a62a84b710a9ada5af2ba3b48af950bb09b5/68747470733a2f2f696d6775722e636f6d2f35667a4d6279562e706e67" width= 100 style="margin-right:20px"/> Download it here </a>
- #### Android Studio
```bash=
umake android android-studio
# launch the android studio and
# complete the wizard to install the Android SDK(recommended)
```
- ### Database Tools
- [BeeKeeper Studio]("https://docs.beekeeperstudio.io/installation/#linux-installation")
```bash=
# Install our GPG key
wget --quiet -O - https://deb.beekeeperstudio.io/beekeeper.key | sudo apt-key add -
# add our repo to your apt lists directory
echo "deb https://deb.beekeeperstudio.io stable main" | sudo tee /etc/apt/sources.list.d/beekeeper-studio-app.list
# Update apt and install
apt update
apt install beekeeper-studio
```
- ### Languages and Frameworks Setup :ab:
- #### Node JS
```bash=
# hint: remove the `| bash` to see the content
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
source ~/.bashrc
# list all available versions
nvm list-remote # or `nvm ls-remote`
# nvm install <version> # latest: 15.8.0
nvm install lts/fermium
npm -v
node -v
# alternatives to npm
# 1. PNPM
npm i -g pnpm
pnpm -v
npm install -g yarn
yarn -v
```
- ### Rust
```bash=
umake rust rust-lang
```
- ### Go
```bash=
umake go go-lang
```
- ### GraphQL Playground
- ### Kotlin
```bash=
umake kotlin kotlin-lang
```
- ### Python
Ubuntu 18.04 + and other versions of Debian Linux ship with both Python 3 and Python 2 pre-installed. So simple update and upgrade your OS.
```bash=
apt update
apt upgrade
python3 -V
```
- ### PHP and Apache 2
```bash=
apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
apt update
# apt install <phpversion> libapache2-mod-<phpversion>
# available vesions:
# php7.0, php7.1, php7.2, php7.3, php7.4, php8.0
apt install php8.0 libapache2-mod-php8.0
# install these php extensions
# apt install <phpversion>-ext
apt install php8.0-gd php8.0-xml php8.0-soap php8.0-mbstring php8.0-mysql php8.0-pgsql
# you can install multiple versions per your needs
# set the default version using sudo update-alternatives --set php /usr/bin/<phpversion>
sudo update-alternatives --set php /usr/bin/php8.0
# disable php version module for apache2 using `sudo a2dismod <phpversion>`
sudo a2dismod php5.6
# enable php version module for apache2 using `sudo a2enmod <phpversion>`
sudo a2enmod php8.0
# restart apache server
sudo systemctl restart apache2
```
- ### Composer
```bash=
# change Directory to your home folder
cd ~
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
# install globally
sudo mv composer.phar /usr/local/bin/composer
# add composesr to env PATH
sudo gedit ~/.bashrc
# place this at the last line of the ~/.bashrc file
export PATH="$PATH:$HOME/.config/composer/vendor/bin:/usr/local/bin/composer"
# update you env PATH
source ~/.bashrc
# Install PHP Code Sniffer for linting php
composer global require "squizlabs/php_codesniffer=*"
#test to see if composer is installed globally
composer
```
- ### MySQL
Follow the tutorial on [How To Install MySQL on Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04) for a detailed explanation of the commands below
```bash=
apt update
apt install mysql-server
sudo mysql_secure_installation
sudo mysql
mysql -u parables -p
systemctl status mysql.service
sudo mysqladmin -p -u parables version
```
- ### Laravel
- #### Installation Via Composer
```bash=
# example-app is the name of your project
composer create-project laravel/laravel example-app
cd example-app
php artisan serve
```
- #### The Laravel Installer
```bash=
# example-app is the name of your project
composer global require laravel/installer
laravel new example-app
cd example-app
php artisan serve
```
- #### Installation Via Laravel Sail
- ### Android Apps
```bash=
# install Android Studio not not already instaalled
umake android android-studio
# launch the android studio and
# complete the wizard to install the Android SDK(recommended)
# or run use umake to install to it
umake android android-platform-tools android-sdk android-ndk
```
- ### Flutter
```bash=
# first install Android Studio and complete the wizard to download and install the Android SDK
umake dart dart-sdk flutter-sdk
flutter doctor --android-licenses
flutter config --android-studio-dir="$HOME/.local/share/umake/android/android-studio/"
flutter config --android-sdk="$HOME/Android/Sdk"
# install VS Code
umake ide visual-studio-code
flutter doctor run
```
- ### Install Multimedia Codecs and Enable DVD Playback (for the sake of watching tutorials :wink:
```bash=
apt install ubuntu-restricted-extras
apt install libavcodec-extra
apt install libdvd-pkg
```
- Install LibreOffice, an alternative to Microsoft Office
```bash=
sudo apt install libreoffice libreoffice-gtk3 libreoffice-style-elementary
```