Set up dev environment in Ubuntu
#!/bin/sh
rm -f ~/Downloads/*
# Adapt Firefox settings
def_Pfile=`cat "$HOME/.mozilla/firefox/profiles.ini" | sed -n -e 's/^.*Path=//p' | head -n 1`
# Enable FIDO U2F in Firefox
echo "user_pref(\"security.webauth.u2f\", \"true\");" >> $HOME/.mozilla/firefox/$def_Pfile/prefs.js
sudo apt update
# Fix a bug in Ubuntu 18.04 making the DNS server provided by DHCP be ignored (https://askubuntu.com/a/1041631/780635)
sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
#sudo timedatectl set-local-rtc 1 # needed when dual-booting with Windows
sudo timedatectl set-ntp no && \
timedatectl && \
sudo apt install -y ntp
# TODO: Add "server ntp.pedropombeiro.com" to /etc/ntp.conf
sudo apt install -y preload gnome-tweak-tool unity-tweak-tool build-essential \
gdebi-core httpie network-manager-openvpn-gnome mc
# https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#git
# Fonts for powerlevel theme in VS Code: https://dev.to/mattstratton/making-powerline-work-in-visual-studio-code-terminal-1m7
sudo apt install -y zsh fonts-powerline
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
sudo apt install -y ccze # https://blog.tersmitten.nl/how-to-colorize-your-log-files-with-ccze.html
download_dir=/home/$LOGNAME/Downloads
# s-tui (https://github.com/amanusk/s-tui)
sudo add-apt-repository ppa:amanusk/python-s-tui
sudo apt-get update
sudo apt-get install python3-s-tui
gsettings set com.ubuntu.user-interface scale-factor "{'': 8, 'DP-1': 16, 'eDP-1': 16}"
# autorandr
sudo apt install -y autorandr
# brightness-controller
sudo add-apt-repository ppa:apandada1/brightness-controller && \
sudo apt install -y brightness-controller
# Simplenote
cd $download_dir && \
wget -O simplenote.deb https://github.com/Automattic/simplenote-electron/releases/download/v1.1.6/simplenote_1.1.6_amd64.deb
sudo gdebi simplenote.deb
# Ledger Nano S
wget -q -O - https://raw.githubusercontent.com/LedgerHQ/udev-rules/master/add_udev_rules.sh | sudo bash
sudo apt install -y python3-pip libusb-1.0-0-dev libudev-dev
sudo pip3 install btchip-python
cd $download_dir && wget -O ledger-live-desktop-linux-x86_64.AppImage https://github.com/LedgerHQ/ledger-live-desktop/releases/download/v1.0.1/ledger-live-desktop-1.0.1-linux-x86_64.AppImage && \
chmod +x ledger-live-desktop-linux-x86_64.AppImage && \
sudo mv ledger-live-desktop-linux-x86_64.AppImage /usr/local/bin/
# Google Chrome
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list && \
cd $download_dir && wget https://dl.google.com/linux/linux_signing_key.pub && \
sudo apt-key add linux_signing_key.pub && \
sudo apt update && \
sudo apt install google-chrome-stable
# RescueTime
cd $download_dir && wget https://www.rescuetime.com/installers/rescuetime_current_amd64.deb && \
sudo gdebi rescuetime_current_amd64.deb
# Toggl
cd $download_dir && \
wget http://fr.archive.ubuntu.com/ubuntu/pool/main/g/gst-plugins-base0.10/libgstreamer-plugins-base0.10-0_0.10.36-1_amd64.deb && \
wget http://fr.archive.ubuntu.com/ubuntu/pool/universe/g/gstreamer0.10/libgstreamer0.10-0_0.10.36-1.5ubuntu1_amd64.deb && \
sudo gdebi libgstreamer*.deb && \
wget --max-redirect=3 -O toggl.deb "https://toggl.com/api/v8/installer?app=td&platform=deb64&channel=stable" && \
sudo gdebi toggl.deb && \
sudo mv /usr/share/applications/toggldesktop.desktop /usr/share/applications/toggldesktop.desktop.orig && \
sudo bash -c "sed -e 's/Exec=\/opt\/toggldesktop\/TogglDesktop.sh/Exec=env QT_DEVICE_PIXEL_RATIO=2 \/opt\/toggldesktop\/TogglDesktop.sh/' /usr/share/applications/toggldesktop.desktop.orig > /usr/share/applications/toggldesktop.desktop"
# Skype
#cd $download_dir && wget https://repo.skype.com/latest/skypeforlinux-64.deb && \
# sudo gdebi skypeforlinux-64.deb
# Pushbullet
cd $download_dir && wget -O pb-for-desktop.deb https://github.com/sidneys/pb-for-desktop/releases/download/v6.7.7/pb-for-desktop-6.7.7-amd64.deb && \
sudo gdebi pb-for-desktop.deb
sudo apt --fix-broken install -y
# Docker CE
sudo apt update && \
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - &&
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
edge" && \
sudo apt update && \
sudo apt install -y docker-ce && \
sudo docker run hello-world && \
sudo usermod -a -G docker $LOGNAME
# Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose
# Beyond Compare 4
sudo dpkg --add-architecture i386 && \
cd $download_dir && wget -O bcompare_amd64.deb https://www.scootersoftware.com/bcompare-4.2.5.23088_amd64.deb && \
sudo gdebi bcompare_amd64.deb
# P4Merge
cd $download_dir && wget https://www.perforce.com/downloads/perforce/r17.3/bin.linux26x86_64/p4v.tgz && \
tar zxvf p4v.tgz && \
sudo cp -r p4v-* /usr/local/p4v/ && \
sudo ln -s /usr/local/p4v/bin/p4merge /usr/bin/p4merge
# VS Code
cd $download_dir && curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg && \
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg && \
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' && \
sudo apt update && \
sudo apt install -y code && \
sudo apt install -y xclip # adds support for copying to the clipboard
# Yubikey
sudo add-apt-repository -y ppa:yubico/stable && \
sudo apt update && \
sudo apt install -y pinentry-curses scdaemon pcscd yubikey-personalization libusb-1.0-0-dev && \
sudo apt install -y yubikey-neo-manager
## TODO: Follow https://github.com/drduh/YubiKey-Guide#install---linux
echo 'hkp-cacert /etc/sks-keyservers.netCA.pem' >> ~/.gnupg/dirmngr.conf
cat << EOF > ~/.ssh/config
Host *
ServerAliveInterval=2
ServerAliveCountMax=60
EOF
# GPG
sudo apt install -y gnupg2 gnupg-agent
gpg2 --recv 0x91527A684B864DC0 # Install Yubikey public key
gpg2 --list-secret-keys --keyid-format LONG
echo 'export GPG_TTY=$(tty)' >> ~/.profile
cat << EOF > ~/.gnupg/gpg-agent.conf
enable-ssh-support
default-cache-ttl 60
max-cache-ttl 120
EOF
# Git
sudo add-apt-repository -y ppa:git-core/ppa && \
sudo apt update && \
sudo apt install -y git
git config --global user.name 'Pedro Pombeiro'
git config --global user.email pombeirp@users.noreply.github.com
git config --global user.signingkey C4A24185B2AA48A1
git config --global commit.gpgsign true
git config --global push.default simple
git config --global gpg.program $(whereis -b gpg2 | cut -d ' ' -f2)
git config --global rebase.autoSquash true
git config --global rebase.autoStash true
git config --global rebase.missingCommitsCheck warn
git config --global diff.tool beyondcompare4
git config --global diff.guitool beyondcompare4
git config --global difftool.prompt false
git config --global difftool.beyondcompare4.cmd 'bcompare "$LOCAL" "$REMOTE"'
git config --global difftool.beyondcompare4.path /usr/bin/bcompare
git config --global difftool.beyondcompare4.keepTemporaries false
git config --global difftool.beyondcompare4.keepBackup false
git config --global difftool.beyondcompare4.trustExitCode true
git config --global merge.keepBackup false
git config --global merge.tool p4merge
git config --global merge.guitool p4merge
git config --global mergetool.prompt false
git config --global mergetool.p4merge.cmd 'p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
git config --global mergetool.p4merge.keepTemporaries false
git config --global mergetool.p4merge.keepBackup false
git config --global mergetool.p4merge.trustExitCode false
# GitExtensions
sudo apt install -y mono-complete
cd $download_dir && wget -O GitExtensions-Mono.zip https://github.com/gitextensions/gitextensions/releases/download/v2.51.05/GitExtensions-2.51.05-Mono.zip && \
sudo unzip GitExtensions-Mono.zip -d /usr/local/bin/ &&
sudo chmod +x /usr/local/bin/GitExtensions/gitext.sh
## GitExtensions should be run from the command line with `gitext.sh &`
cat << EOF > ~/GitExtensions.desktop
[Desktop Entry]
Type=Application
Terminal=false
Name=GitExtensions
Icon=/usr/local/bin/GitExtensions/git-extensions-logo-final-256.ico
Exec=/usr/local/bin/GitExtensions/gitext.sh
EOF
sudo mkdir -p /usr/local/share/applications
sudo mv ~/GitExtensions.desktop /usr/local/share/applications/GitExtensions.desktop
# Slack
sudo apt install -y slack
# KeePass
sudo apt-add-repository ppa:jtaylor/keepass && \
sudo add-apt-repository ppa:dlech/keepass2-plugins && \
sudo apt update && \
sudo apt install -y keepass2 keepass2-plugin-keeagent xdotool && \
sudo apt upgrade -y
cd $download_dir && wget -O KeeOtp.zip https://bitbucket.org/devinmartin/keeotp/downloads/KeeOtp-1.3.9.zip && \
sudo mkdir -p /usr/lib/keepass2/plugins && \
sudo unzip KeeOtp.zip -d /usr/lib/keepass2/plugins
# Android Studio
cd $download_dir && wget -O android-studio-ide-linux.zip https://dl.google.com/dl/android/studio/ide-zips/3.1.2.0/android-studio-ide-173.4720617-linux.zip && \
sudo unzip android-studio-ide-linux.zip -d /usr/local/
cd /usr/local/android-studio/bin/ && \
./studio.sh
sudo apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
## Update SDK
android update sdk --no-ui --use-sdk-wrapper
# KVM
sudo apt install -y qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
# https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
echo fs.inotify.max_user_watches = 524288 | sudo tee -a /etc/sysctl.conf
echo vm.swappiness=10 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# ngrok
cd $download_dir && wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip && \
sudo mkdir -p /usr/local/bin/ngrok &&
sudo unzip ngrok-stable-linux-amd64.zip -d /usr/local/bin/ngrok/
echo PATH='/usr/local/go/bin:$HOME/go/bin:$PATH:/usr/local/bin/GitExtensions/:/usr/local/bin/ngrok/' | tee -a ~/.profile
echo export GOPATH=~/go | tee -a ~/.profile
echo export STATUS_GO_HOME=~/go/src/github.com/status-im/status-go | tee -a ~/.profile
echo export STATUS_REACT_HOME=~/src/github.com/status-im/status-react | tee -a ~/.profile
echo export REACT_EDITOR=code | tee -a ~/.bashrc
source ~/.profile
# Setup udev for Nexus 6P
sudo usermod -aG plugdev $LOGNAME # https://developer.android.com/studio/run/device.html && \
sudo sh -c "echo '# Google Nexus 6P' >> /etc/udev/rules.d/51-android.rules" && \
sudo sh -c "echo 'SUBSYSTEM==\"usb\", ATTR{idVendor}==\"18d1\", MODE=\"0664\", GROUP=\"plugdev\"' >> /etc/udev/rules.d/51-android.rules" && \
sudo service udev restart
sudo apt install -y jq
# Plexamp
cd $download_dir && wget -O plexamp-x86_64.AppImage https://plexamp.plex.tv/plexamp.plex.tv/plexamp-1.0.5-x86_64.AppImage && \
chmod +x plexamp-x86_64.AppImage && \
sudo mv plexamp-x86_64.AppImage /usr/local/bin/
sudo apt install -f -y
sudo apt autoremove
# TODO: Open the dialog Keyboard Shortcuts in the system preferences, click the Add button, enter KeePass Auto-Type as name and
# mono /usr/lib/keepass2/KeePass.exe --auto-type
# as command, then click [Apply]. Click on Disabled of the newly created item (such that the text 'New shortcut...' appears), press Ctrl+Alt+A, and close the dialog.
sudo apt install -y cifs-utils # https://wiki.ubuntu.com/MountWindowsSharesPermanently
sudo sh -c "echo '//nas/home /media/pedro cifs credentials=/home/pedro/.smbcredentials,iocharset=utf8,sec=ntlmv2 0 0' << /etc/fstab"
#sudo apt install -y smbclient
# # TODO: smbclient //nas/Download -U pedro%<password>
# TODO: http://ubuntuhandbook.org/index.php/2016/04/enable-ssh-ubuntu-16-04-lts/
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ launcher-minimize-window true
gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false
gsettings set org.gnome.desktop.peripherals.touchpad click-method 'areas'
wget https://www.privateinternetaccess.com/installer/pia-nm.sh && \
sudo bash pia-nm.sh
sudo mv /var/lib/snapd/desktop/applications/spotify_spotify.desktop /var/lib/snapd/desktop/applications/spotify_spotify.desktop.orig && \
sudo bash -c "sed -e 's/Exec=env BAMF_DESKTOP_FILE_HINT=\/var\/lib\/snapd\/desktop\/applications\/spotify_spotify.desktop \/snap\/bin\/spotify %U/Exec=env BAMF_DESKTOP_FILE_HINT=\/var\/lib\/snapd\/desktop\/applications\/spotify_spotify.desktop \/snap\/bin\/spotify --force-device-scale-factor=1.5 %U/' /var/lib/snapd/desktop/applications/spotify_spotify.desktop.orig > /var/lib/snapd/desktop/applications/spotify_spotify.desktop"
# TODO: https://www.bettertechtips.com/linux/track-activities-linux/
rescuetime & disown
/usr/local/bin/ledger-live-desktop-linux-x86_64.AppImage & disown
###
### Lenovo ThinkPad-specific settings
###
# Decrease zoom factor in Firefox
echo "user_pref(\"layout.css.devPixelsPerPx\", \"1.75\");" >> $HOME/.mozilla/firefox/$def_Pfile/prefs.js
# Fix UI dimensions
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 32
# https://wiki.archlinux.org/index.php/TLP
sudo apt install -y tlp acpi-call smartmontools
sudo systemctl start tlp.service
sudo systemctl start tlp-sleep.service
sudo systemctl mask systemd-rfkill.service
sudo systemctl mask systemd-rfkill.socket
# Fix CPU throttling (https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6))
sudo apt install git virtualenv build-essential python3-dev \
libdbus-glib-1-dev libgirepository1.0-dev libcairo2-dev && \
cd ~/ && \
git clone https://github.com/erpalma/lenovo-throttling-fix.git && \
cd lenovo-throttling-fix/ && \
sudo ./install.sh
# Allow PowerTop to auto tune at startup
cat << EOF | sudo tee /etc/systemd/system/powertop.service
[Unit]
Description=PowerTOP auto tune
[Service]
Type=idle
Environment="TERM=dumb"
User=admin
ExecStart=/usr/sbin/powertop --auto-tune
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable powertop.service