Last active
October 4, 2023 10:52
-
-
Save mzaidannas/f537446be1e71b71aa6bcffefad62b80 to your computer and use it in GitHub Desktop.
Ubuntu Initial Setup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Configure some system specifications | |
sudo usermod -G input -a $USER | |
# Max number of files (Required by services like docker/jvm) | |
sudo sysctl -w fs.inotify.max_user_watches=524288 | |
sudo sysctl -w vm.max_map_count=262144 | |
# Better swap if system have a lot of unused memory | |
sudo sysctl -w vm.swappiness=10 | |
sudo sysctl -w vm.vfs_cache_pressure=100 | |
# Better USB transfer speed/progress | |
sudo sysctl -w vm.dirty_bytes=50331648 | |
sudo sysctl -w vm.dirty_background_bytes=16777216 | |
# Make these changes permanent | |
echo "fs.inotify.max_user_watches=524288\nvm.max_map_count=262144" | sudo tee /etc/sysctl.d/20-max-files.conf | |
echo "vm.swappiness=10\nvm.vfs_cache_pressure=100" | sudo tee /etc/sysctl.d/40-swap.conf | |
echo "vm.dirty_bytes=50331648\nvm.dirty_background_bytes=16777216" | sudo tee /etc/sysctl.d/50-usb-transfer.conf | |
sudo apt update && sudo apt upgrade -y | |
# Install common tools and utilities | |
sudo apt install -y unace unrar zip unzip p7zip-full p7zip-rar sharutils rar uudeview mpack arj cabextract zsh samba | |
# Set samba password | |
(echo "$password"; echo "$password") | sudo smbpasswd -s -a $USER | |
# Change default shell | |
sudo chsh -s /bin/zsh $(whoami) | |
# GPG keys for extra repos | |
sudo mkdir -p /etc/apt/keyrings | |
# Nodejs | |
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg | |
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list | |
sudo apt install -y nodejs | |
sudo npm install -g yarn eslint stylelint coffeelint htmlhint prettier | |
# Postgresql | |
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg | |
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list | |
sudo apt update && sudo apt install -y postgresql libpq-dev | |
sudo systemctl restart postgresql | |
sudo systemctl enable postgresql | |
sudo -u postgres psql -U postgres -d postgres -c "ALTER USER postgres WITH PASSWORD '$password';" | |
# Redis | |
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/redis-archive-keyring.gpg | |
echo "deb [signed-by=/etc/apt/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list | |
sudo apt update && sudo apt install -y redis | |
sudo systemctl restart redis-server | |
sudo systemctl enable redis-server | |
# Memcached | |
sudo apt install -y memcached | |
sudo systemctl restart memcached | |
sudo systemctl enable memcached | |
# MongoDB | |
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg --dearmor -o /etc/apt/keyrings/mongodb-server-7.0.gpg | |
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list | |
sudo apt update && sudo apt install -y mongodb-org | |
sudo systemctl restart mongod | |
sudo systemctl enable mongod | |
# Elasticsearch | |
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /etc/apt/keyrings/elastic.gpg | |
echo "deb [signed-by=/etc/apt/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list | |
sudo apt update && sudo apt install -y elasticsearch | |
# Only use 2 GB of heap memory | |
echo "-Xms2g\n-Xmx2g" | sudo tee /etc/elasticsearch/jvm.options.d/heap_size.options | |
sudo systemctl restart elasticsearch | |
sudo systemctl enable elasticsearch | |
# Docker | |
sudo apt purge -y docker docker-engine docker.io containerd runc | |
sudo apt install -y \ | |
apt-transport-https \ | |
ca-certificates \ | |
curl \ | |
gnupg-agent \ | |
software-properties-common | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
echo "deb [signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list | |
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io | |
sudo systemctl restart docker | |
sudo systemctl enable docker | |
# Install build tools and programming languages | |
sudo apt install -y build-essential git git-lfs gitk openssl python3 python3-setuptools python3-pip libssl-dev resolvconf default-jre default-jdk llvm clang clang-tools lldb lld cmake gradle ruby ruby-build rust-all golang | |
# Install asdf and configure ruby, nodejs, python and java plugins | |
git clone https://github.com/asdf-vm/asdf.git ~/.asdf | |
tee -a ~/.bashrc << ASDF | |
# asdf | |
. "\$HOME/.asdf/asdf.sh" | |
. "$HOME/.asdf/completions/asdf.bash" | |
ASDF | |
. "\$HOME/.asdf/asdf.sh" | |
. "$HOME/.asdf/completions/asdf.bash" | |
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git | |
asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git | |
asdf plugin-add python https://github.com/asdf-community/asdf-python.git | |
asdf plugin-add java https://github.com/halcyon/asdf-java.git | |
# Use vscode as default editor | |
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg | |
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ | |
rm microsoft.gpg | |
echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" | sudo tee /etc/apt/sources.list.d/vscode.list | |
sudo apt update && sudo apt install -y code | |
# Use helix as default command line text editor | |
sudo add-apt-repository -y ppa:maveonair/helix-editor | |
sudo apt install -y helix | |
# User dbeaver community as default database gui | |
sudo add-apt-repository -y ppa:serge-rider/dbeaver-ce | |
sudo apt install -y dbeaver-ce | |
# Alias commands (Better commandline tools) | |
# zioxide (smart cd replacement) | |
sudo apt install -y zoxide | |
tee -a ~/.bashrc << ZOXIDE | |
# Zoxide (smart cd replacement) | |
eval "$(zoxide init bash)" | |
ZOXIDE | |
# Bat (cat and less alternative for printing to terminal) | |
sudo apt install -y bat | |
# NeoVim vim commandline text editor with plugin system | |
sudo apt install -y neovim | |
# Use SpaceVim vim distribution | |
curl -sLf https://spacevim.org/install.sh | bash | |
# Prettyping (ping alternative with colors and progress bar) | |
sudo apt install -y prettyping | |
# fd (faster find alternative) | |
sudo apt install -y fd-find | |
# ripgrep (faster grep and file content search) | |
sudo apt install -y ripgrep | |
# Diff-so-fancy (git diff with colors and highlighting) | |
sudo npm install -g diff-so-fancy | |
# duf (df alternative) | |
sudo apt install -y duf | |
# ncdu (du alternative) | |
sudo apt install -y ncdu | |
# Htop (top alternative) | |
sudo apt install -y htop | |
# lsd (ls alternative with colors and icons) | |
curl -fsSLO https://github.com/lsd-rs/lsd/releases/download/v1.0.0/lsd_1.0.0_amd64.deb | |
sudo dpkg -i lsd_1.0.0_amd64.deb | |
rm lsd_1.0.0_amd64.deb | |
# tldr (Better help and man pages) | |
sudo apt install -y tldr | |
# jq and yq commandline JSON and Yaml parsers | |
sudo add-apt-repository -y ppa:rmescandon/yq | |
sudo apt install -y jq yq | |
# FZF (Fuzzy search everything) | |
sudo apt install -y fzf | |
tee -a ~/.bashrc << FZF | |
# FZF (Fuzzy substring searching) | |
[ -f /usr/share/doc/fzf/examples/key-bindings.bash ] && source /usr/share/doc/fzf/examples/key-bindings.bash | |
FZF | |
# clipboard | |
sudo apt install -y wl-clipboard | |
tee -a ~/.bashrc << ALIASES | |
# Shell alias commands | |
alias sudo="sudo " | |
alias cd="z" | |
alias vim="nvim" | |
alias less="batcat --pager='less -RF'" | |
alias cat="batcat --paging never" | |
alias ping="prettyping --nolegend" | |
alias preview="fzf --preview 'batcat --color \"always\" {}'" | |
# add support for ctrl+o to open selected file in Helix text editor | |
export FZF_DEFAULT_OPTS="--bind='ctrl-o:execute(hx {})+abort'" | |
export FZF_DEFAULT_COMMAND="fdfind --type file --color=never --hidden --no-ignore" | |
export FZF_ALT_C_COMMAND='fdfind --type directory . --color=never --hidden --no-ignore' | |
alias top="htop" | |
alias find="fdfind" | |
alias du="ncdu -rr -x --exclude .git --exclude node_modules" | |
alias ls="lsd" | |
alias df="duf" | |
alias grep="rg" | |
alias help="tldr" | |
alias yq="yq -CP" | |
alias pbcopy='wl-copy' | |
alias pbpaste='wl-paste' | |
ALIASES | |
# To enable clipboard sharing between server/client using aliases pbcopy/pbpaste | |
# echo 'ForwardX11 yes' >> ~/.ssh/config | |
# setup diff-so-fancy | |
git config --global pager.diff 'diff-so-fancy | less --tabs=1,5 -RF' | |
git config --global pager.show 'diff-so-fancy | less --tabs=1,5 -RF' | |
git config --global color.ui true | |
git config --global color.diff-highlight.oldNormal "red bold" | |
git config --global color.diff-highlight.oldHighlight "red bold 52" | |
git config --global color.diff-highlight.newNormal "green bold" | |
git config --global color.diff-highlight.newHighlight "green bold 22" | |
git config --global color.diff.meta "11" | |
git config --global color.diff.frag "magenta bold" | |
git config --global color.diff.commit "yellow bold" | |
git config --global color.diff.old "red bold" | |
git config --global color.diff.new "green bold" | |
git config --global color.diff.whitespace "red reverse" | |
# Optional (git default editor as helix) | |
git config --global core.editor 'hx' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment