Skip to content
This repository has been archived by the owner on Sep 28, 2024. It is now read-only.

Latest commit

 

History

History
461 lines (394 loc) · 13.7 KB

README.md

File metadata and controls

461 lines (394 loc) · 13.7 KB

Ubuntu on Steroids

Table of Contents

  1. Common Dependencies
  2. Common Tools & Drivers
  3. Git & Github
  4. Theme
  5. Neovim
  6. Terminal & Shell
  7. Python
  8. Go
  9. Rust
  10. Node.js
  11. Laravel
  12. Visual Studio Code
  13. Other Tools
  14. Docker
  15. MySQL
  16. 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

  1. sudo apt install git
  2. Generate SSH Key (or reuse an existing key)
  3. 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

  1. Hack
  2. Courier Prime Code
  3. Input
  4. Fira Code
    sudo apt install fonts-firacode
  5. 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

Install Neovim > sudo apt install neovim


Terminal & Shell

  1. Install Tilix

    sudo apt install tilix

  2. Install Dracula Theme
    curl -o ~/.config/tilix/schemes/Dracula.json --create-dirs https://raw.githubusercontent.com/dracula/tilix/master/Dracula.json
  3. Customize Tilix Appearance
    • Preferences > Appearance > Window Style > Disable CSD && hide toolbar
    • Preferences > Appearance > Terminal Title Style > None
    • Preferences > Profile > Color > Color scheme > Dracula
  4. Configure Tilix Keyboard Shortcuts
    • Preferences > Shortcuts > Replace Switch to next session shortcut with Alt+Right
    • Preferences > Shortcuts > Replace Switch to previous session shortcut with Alt+Left
    • Preferences > Shortcuts > Replace Paste shortcut with Ctrl+V
    • Preferences > Shortcuts > Replace Resize the terminal down shortcut with Shift+Ctrl+Down
    • Preferences > Shortcuts > Replace Resize the terminal up shortcut with Shift+Ctrl+Up
    • Preferences > Shortcuts > Replace Resize the terminal right shortcut with Shift+Ctrl+Right
    • Preferences > Shortcuts > Replace Resize the terminal left shortcut with Shift+Ctrl+Left
  5. 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
  1. Install Zsh
    • sudo apt install zsh
    • chsh -s $(which zsh)
    • gnome-session-quit
    • Login
    • echo $SHELL
  2. Oh My Zsh
    • sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
  3. 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"
  4. 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
  5. Zsh Syntax Highlighting
    • git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Python

Install Pyenv

curl https://pyenv.run | bash

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

  1. Clone the XDebug repo.
  2. From within the repo dir, run the following commands:
    phpize
    ./configure --enable-xdebug
    make clean
    make
    sudo make install
  3. Add the following lines into your php.ini. (You can locate your php.ini by running the php --ini command)
    zend_extension="xdebug.so"
    
    [XDebug]
    xdebug.remote_enable = 1
    xdebug.remote_autostart = 1
  4. Verify that XDebug is successfuly installed by running the following command (it should match):
    php -v | grep "Xdebug"

Visual Studio Code

  1. Download the .deb package
  2. 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
  3. Copy the settings file contents into settings.json
  4. 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

  1. 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.

  2. 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

  1. Follow the Initial Server Setup guide.
  2. Append public SSH keys of each client machine into the ~/.ssh/authorized_keys file in droplet.