Ubuntu on Steroids
Table of Contents
- Common Dependencies
- Common Tools & Drivers
- Git & Github
- Theme
- Neovim
- Terminal & Shell
- Python
- Go
- Rust
- Node.js
- Laravel
- Visual Studio Code
- Other Tools
- Docker
- MySQL
- DigitalOcean
Common Dependencies
sudo apt install net-tools
sudo apt install curl
sudo apt install python3-pip
Common Tools & Drivers
Nvidia Driver
Software & Updates > Additional Drivers
KeePass
sudo apt install keepass2
OBS
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt install obs-studio
Ubuntu Software
- Dropbox
- Spotify
- GIMP
Git & Github
Install Git & Configure SSH
sudo apt install git
- Generate SSH Key (or reuse an existing key)
- Add SSH Key to Github Account (skip if reusing an existing key)
# tip: get lines of code in a particular language within a Git repository
git ls-files | grep '\.py$' | xargs wc -l
Theme
Fonts
- Hack
- Courier Prime Code
- Input
- Fira Code
sudo apt install fonts-firacode
- Source Code Pro
git clone --depth 1 --branch release https://github.com/adobe-fonts/source-code-pro.git ~/.fonts/adobe-fonts/source-code-pro fc-cache -f -v ~/.fonts/adobe-fonts/source-code-pro
Gnome Theme
sudo add-apt-repository -u ppa:snwh/ppa
sudo apt update
sudo apt install paper-icon-theme
sudo apt install gnome-tweak-tool
- Tweaks > Appearance > Applications > Adwaita-dark
- Tweaks > Appearance > Icons > Paper
- Tweaks > Fonts > [your_favourite_font]
Desktop Slideshow
Shotwell Photo Manager > Select Pictures > File > Set as Desktop Slideshow
Neovim
-
sudo apt install neovim
curl -o ~/.config/nvim/init.vim --create-dirs https://raw.githubusercontent.com/utkuufuk/ubuntu-on-steroids/master/init.vim
-
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
-
Activate plugins by using the command
:PlugInstall
invim ~/.config/nvim/init.vim
Terminal & Shell
Tilix
- Install Tilix
sudo apt install tilix
- Install Dracula Theme
curl -o ~/.config/tilix/schemes/Dracula.json --create-dirs https://raw.githubusercontent.com/dracula/tilix/master/Dracula.json
- Customize Tilix Appearance
- Preferences > Appearance > Window Style > Disable CSD && hide toolbar
- Preferences > Appearance > Terminal Title Style > None
- Preferences > Profile > Color > Color scheme > Dracula
- Configure Tilix Keyboard Shortcuts
- Preferences > Shortcuts > Replace
Switch to next session
shortcut withAlt+Right
- Preferences > Shortcuts > Replace
Switch to previous session
shortcut withAlt+Left
- Preferences > Shortcuts > Replace
Paste
shortcut withCtrl+V
- Preferences > Shortcuts > Replace
Resize the terminal down
shortcut withShift+Ctrl+Down
- Preferences > Shortcuts > Replace
Resize the terminal up
shortcut withShift+Ctrl+Up
- Preferences > Shortcuts > Replace
Resize the terminal right
shortcut withShift+Ctrl+Right
- Preferences > Shortcuts > Replace
Resize the terminal left
shortcut withShift+Ctrl+Left
- Preferences > Shortcuts > Replace
- Configure System Keyboard Shortcuts
- Keyboard Shortcuts > Remove Default Action for
Ctrl+Alt+T
- Keyboard Shortcuts > Bind
Ctrl+Alt+T
to Custom Shortcut for Launching Tilix - Keyboard Shortcuts > Disable Shortcut for
Hide all normal windows
- Keyboard Shortcuts > Remove Default Action for
Zsh
- Install Zsh
sudo apt install zsh
chsh -s $(which zsh)
gnome-session-quit
- Login
echo $SHELL
- Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
- Spaceship Prompt
git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt"
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"
- Zsh Autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
echo "bindkey '^ ' autosuggest-accept" >> $ZSH_CUSTOM/autosuggestion-settings.zsh
source $ZSH_CUSTOM/autosuggestion-settings.zsh
- Zsh Syntax Highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
- Configure
.zshrc
curl -o ~/.zshrc https://raw.githubusercontent.com/utkuufuk/ubuntu-on-steroids/master/.zshrc
source ~/.zshrc
Python
Install Pyenv
curl https://pyenv.run | bash
# init pyenv (see .zshrc)
source ~/.zshrc
Install Build Dependencies
sudo apt update && sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
Install Desired Releases
pyenv install 3.8.3
pyenv install 3.7.7
pyenv local 3.8.3 3.7.7
Install Poetry
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
source ~/.poetry/env
# new project
poetry init --no-interaction
poetry install
# run a Python session inside the virtual environment
poetry run python
# add & update a dependency
poetry add google-api-python-client
poetry update google-api-python-client
poetry add google-api-python-client^2.0 # upgrade to major release
Go
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
Rust
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
Node.js
Install NVM
Note that the version number may differ:
# you might want to change the version
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
Install Node.js
# list available versions
nvm ls-remote
# install desired version(s)
nvm install x.y.z
# use desired node version
nvm use x.y.z
# update npm
npm install npm@latest -g
Configure
npm config set init.author.name <name>
npm config set init.author.email <email>
Laravel
Install PHP 7.3
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt install \
php7.3 \
php7.3-common \
php7.3-mysql \
php7.3-xml \
php7.3-xmlrpc \
php7.3-curl \
php7.3-gd \
php7.3-imagick \
php7.3-cli \
php7.3-dev \
php7.3-imap \
php7.3-mbstring \
php7.3-opcache \
php7.3-soap \
php7.3-zip \
php7.3-gmp \
php7.3-intl -y
Install Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/home/utku/.local/bin --filename=composer
Install Laravel
composer global require "laravel/installer"
Install XDebug
- Clone the XDebug repo.
- From within the repo dir, run the following commands:
phpize ./configure --enable-xdebug make clean make sudo make install
- Add the following lines into your
php.ini
. (You can locate yourphp.ini
by running thephp --ini
command)zend_extension="xdebug.so" [XDebug] xdebug.remote_enable = 1 xdebug.remote_autostart = 1
- Verify that XDebug is successfuly installed by running the following command (it should match):
php -v | grep "Xdebug"
Visual Studio Code
- Download the .deb package
- Download Extensions
- Appearance
- Overnight (Slumber) or Night Owl
- Material Icon Theme
- Editor
- Vim
- TabNine
- EditorConfig for VS Code
- Remote Development
- Remote - SSH
- Remote - SSH: Editing Configuration Files
- Remote - SSH: Explorer
- Web Development
- REST Client
- Auto Rename Tag
- Live Server
- GraphQL
- Git
- GitLens
- JavaScript & TypeScript
- Prettier
- ESLint (
npm install -g eslint
) - ES7 React/Redux/GraphQL/React-Native snippets
- vscode-sql-template-literal
- PHP
- PHP Debug
- PHP DocBlocker
- PHP Intelephense
- php cs fixer
- Larevel Blade Snippets
- Go
- Go
- Python
- Python
- AREPL for python
- autoDocstring
- Rust
- Rust
- Other
- Docker
- Create Files & Folders: On The Go
- Appearance
- Copy the settings file contents into
settings.json
- Copy the keybindings file contents into
keybindings.json
Other Tools
- Peek
sudo add-apt-repository ppa:peek-developers/stable sudo apt install peek
- ag & sack
# 1. install ag sudo apt install silversearcher-ag # 2. install sack git clone https://github.com/sampson-chen/sack.git && \ cd sack && \ chmod +x install_sack.sh && \ ./install_sack.sh && \ cd .. && \ rm -rf sack
- fd  —Â
sudo apt install fd-find
- bat  —Â
sudo apt install bat
- exa  —Â
cargo install exa
- icdiff  —Â
sudo apt install icdiff
Docker
# 1. remove any older versions
sudo apt purge docker lxc-docker docker-engine docker.io
# 2. install prerequisites
sudo apt install apt-transport-https ca-certificates software-properties-common
# 3. import official GPG key & verify signature
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add
# 4. add docker respository
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 5. install docker
sudo apt install docker-ce
# 6. verify service status
sudo systemctl status docker
# 7. create docker group & add your user
sudo groupadd docker
sudo usermod -aG docker $USER
Log out and login back.
# 8. verify that you can run this command without 'sudo'
docker run hello-world
# 9. install docker-compose 1.24.0 (better check newer versions)
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 10. apply executable permission
sudo chmod +x /usr/local/bin/docker-compose
See cheatsheet for more info.
MySQL
Download MySQL Docker Image
docker pull mysql:<tag>
Start MySQL Container
# publish default port, provide a root password and start mysql
docker run --name <container_name> -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<pwd> mysql:<tag>
# you can provide optional config params like max-allowed-packet
docker run --name <container_name> -p 3306:3306 -it -e MYSQL_ROOT_PASSWORD=<pwd> mysql:<tag> --max-allowed-packet=67108864
Connect to MySQL Server from within the Container
-
Run the MySQL Client
# check randomly generated password docker logs <container_name> 2>&1 | grep GENERATED # run the MySQL client within the MySQL Server container docker exec -it <container_name> mysql -uroot -p
When prompted, paste the generated password obtained from the previous step.
-
Reset Root Password
ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
Connect via Client
# install client
sudo apt install mysql-client
# connect
mysql -h HOST -P PORT_NUMBER -u USERNAME -p
Backup & Restore
Backup & restore a particular database while MySQL container is running:
# backup
docker exec <mysql_container_name> mysqldump \
-u <username> --password=<password> <database_name> > <backup_file>.sql
# restore
cat <backup_file>.sql | docker exec -i <mysql_container_name> mysql \
-u <username> --password=<password> <database_name>
# backup & compress
docker exec <mysql_container_name> mysqldump \
-u <username> --password=<password> <database_name> | gzip -c > <backup_file>.sql.gz
# decompress & restore
gzip -d -c <backup_file>.sql.gz | docker exec -i <mysql_container_name> mysql \
-u <username> --password=<password> <database_name>
See cheatsheet for more info.
DigitalOcean
- Follow the Initial Server Setup guide.
- Append public SSH keys of each client machine into the
~/.ssh/authorized_keys
file in droplet.