Skip to content

Instantly share code, notes, and snippets.

@bonelifer
Forked from mkorman9/Ubuntu 22.04 LTS.md
Created November 22, 2023 09:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bonelifer/6dd0dfc5019a79f4a7a884aed7059955 to your computer and use it in GitHub Desktop.
Save bonelifer/6dd0dfc5019a79f4a7a884aed7059955 to your computer and use it in GitHub Desktop.
Ubuntu 22.04 configuration guide

Ubuntu 22.04 configuration guide

Basic system configuration

Open Settings

  • Appearence -> Style -> Dark
  • Appearence -> Desktop Icons -> Disable Show Personal folder
  • Notifications -> Do not disturb
  • Power -> Screen Blank -> Never
  • Accesibility -> Repeat Keys -> Delay - minimal, Speed - 60%+

gnome-terminal configuration (optional)

Open Terminal -> Preferences

  • Shortcuts
    • New Tab: Ctrl + T
    • Close Tab: Ctrl + W
    • Close Window: Ctrl + Q
    • Copy: Ctrl + C
    • Paste: Ctrl + V
    • Find: Ctrl + F
  • Profiles -> Unanamed
    • Text -> Disable Terminal Bell
    • Colors -> Disable Use colors from system theme
    • Colors -> Scheme: Tango dark
    • Colors -> Palette -> Scheme: Tango

Tweaks

Install GNOME Tweaks

sudo apt update
sudo apt install gnome-tweaks

Open Tweaks

  • Keyboard & Mouse -> Additional Layout Options -> Caps Lock Behavior -> Make Caps Lock an additional Esc

Install GNOME shell extensions

  • Make sure GNOME shell extensions are installed
sudo apt install gnome-shell-extensions

Install basic apps

sudo apt install zsh git curl wget vim nano tree jq \
 dnsutils traceroute netcat nmap net-tools \
 htop neofetch screen \
 ca-certificates software-properties-common build-essential apt-transport-https gnupg2 \
 attr binwalk

Install Guake

sudo apt install guake

Save settings from https://gist.github.com/mkorman9/1f5881de04803c6da1746fd2dc05728d to ~/guake_prefs

guake --restore-preferences ~/guake_prefs
rm -f ~/guake_prefs

Restart, F12 to open the terminal

Fix screenshot behavior

  • Install dependencies
sudo apt install gnome-screenshot xclip
  • Create auxilary script
sudo vi /opt/screenshot.sh
#!/usr/bin/env bash

gnome-screenshot -acf /tmp/gnome-screenshot && \
 cat /tmp/gnome-screenshot | xclip -i -selection clipboard -target image/png
  • Make it executable
sudo chmod +x /opt/screenshot.sh
  • Open Settings -> Keyboard -> View and customize Shortcuts -> Custom shortcuts -> + -> take screenshot, /opt/screenshot.sh, Super + Shift + S

Install oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Relogin.

Install fzf

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

Disable some default shortcuts

gsettings set org.gnome.shell.app-switcher current-workspace-only true
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "['']"
gsettings set org.gnome.desktop.wm.keybindings begin-move "['']"
gsettings set org.gnome.desktop.wm.keybindings begin-resize "['']"

Disable automatic updates

sudo vi /etc/apt/apt.conf.d/20auto-upgrades

Change 1s to 0s

Generate SSH key

ssh-keygen -t rsa -b 4096 -C "michal.korman@icloud.com" -q -N "" -f ~/.ssh/id_rsa
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Install 1password

Download .deb from: https://1password.com/downloads/linux/

sudo apt install ./1password-latest.deb

Import GPG key

gpg --import private.gpg

Install VSCode

Follow https://code.visualstudio.com/docs/setup/linux

Copy configuration from: https://gist.github.com/mkorman9/cb39abc51ec033d7de072381b3cca0ef

Open vi ~/.vscode/argv.json and add the following key:

"password-store": "basic"

Install Node (with nvm)

Follow https://github.com/nvm-sh/nvm#installing-and-updating

nvm install --lts

Install JDK 21

Install jenv

git clone https://github.com/jenv/jenv.git ~/.jenv
eval "$(jenv init -)"
jenv enable-plugin export
exit

Install OpenJDK from Adoptium (prefferred):

curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo gpg --dearmor -o /usr/share/keyrings/adoptium.gpg

echo "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb "$(. /etc/os-release && echo "$VERSION_CODENAME")" main" | \
    sudo tee /etc/apt/sources.list.d/adoptium.list > /dev/null 

sudo apt update
sudo apt install temurin-21-jdk

sudo update-alternatives --config java
jenv add /usr/lib/jvm/temurin-21-jdk-amd64
jenv global 21

Or from Azul:

curl -s https://repos.azul.com/azul-repo.key | sudo gpg --dearmor -o /usr/share/keyrings/azul.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" | \
    sudo tee /etc/apt/sources.list.d/zulu.list > /dev/null

sudo apt update
sudo apt install zulu21-jdk

sudo update-alternatives --config java
jenv add /usr/lib/jvm/zulu21
jenv global 21

Or from Corretto:

cd /tmp
wget https://corretto.aws/downloads/latest/amazon-corretto-21-x64-linux-jdk.tar.gz
sudo tar -xzf amazon-corretto-21-x64-linux-jdk.tar.gz -C /opt
jenv add /opt/amazon-corretto-21.0.0.35.1-linux-x64/
jenv global 21

Maven

cd Downloads
wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz
sudo tar -xzf apache-maven-3.9.5-bin.tar.gz -C /opt

VisualVM

#!/usr/bin/env bash

/opt/visualvm_217/bin/visualvm --jdkhome $JAVA_HOME
  • sudo chmod +x /usr/local/bin/visualvm
  • sudo vi /usr/share/applications/visualvm.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Exec=/usr/local/bin/visualvm
Name=VisualVM
Icon=/opt/visualvm_217/etc/visualvm.icns

JMeter

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Exec=/usr/local/bin/jmeter -j /tmp/jmeter.log
Name=JMeter
Icon=/opt/apache-jmeter-5.6.2/docs/images/mstile-144x144.png

mcs (Maven search)

cd /tmp
git clone git@github.com:mthmulders/mcs.git
cd mcs
mvn package -DskipTests

sudo cp target/mcs-*.jar /usr/local/lib

sudo vi /usr/local/bin/mcs
#!/usr/bin/env bash

java -jar /usr/local/lib/mcs-*.jar $@
sudo chmod +x /usr/local/bin/mcs

IntelliJ

cd Downloads
sudo tar -xzf ideaIU-*.tar.gz -C /opt
rm -f ideaIU-*.tar.gz
sudo chown -R michal:michal /opt/idea-IU-*

Install Docker

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg
 
echo \
 "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
 "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
 sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
sudo apt update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo usermod -aG docker $USER

Restart computer.

Install Postgres client

curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgres.gpg

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/postgres.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/postgres.list > /dev/null

sudo apt update
sudo apt install postgresql-client-15

Install Spotify

Follow https://www.spotify.com/us/download/linux/

Install Discord

Download .deb from https://discord.com/api/download?platform=linux&format=deb

sudo apt install ./discord-*.deb

After installation open sudo vi /usr/share/applications/discord.desktop and add --password-store=basic as a command line argument.

Install Steam

sudo add-apt-repository multiverse

sudo apt update
sudo apt install steam

Settings -> Compatibility -> Enable Proton for all games

Setup .zshrc

export PATH="${PATH}:${HOME}/.local/bin:${HOME}/.jenv/bin:/opt/apache-maven-3.9.5/bin"
export ZSH="$HOME/.oh-my-zsh"
export EDITOR="/usr/bin/vim"

ZSH_THEME="robbyrussell"
DISABLE_AUTO_UPDATE=true

plugins=(git)
source $ZSH/oh-my-zsh.sh

alias ll='ls -lah'
alias ns='npm start'
alias nt='npm test'
alias nl='npm run lint'
alias nb='npm run build'

# auto config

[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

eval "$(jenv init -)"

Setup .ssh/config

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

Setup .gitconfig

[user]
    name = Michal Korman
    email = michal.korman@icloud.com
    signingkey = 69DB578ED74C790B
[core]
    autocrlf = false
[alias]
    s = status
    c = commit -m
    p = push --set-upstream origin
    l = log --pretty=format:"%h%x09%an%x09%ad%x09%s"
    a = add
    au = add -u
    u = pull --ff-only
    sw = switch
    nb = checkout -b
    db = branch -d
    unstage = restore --staged
    branches = !git --no-pager branch --list -a
    tags = !git --no-pager tag --list
    changes = diff --cached
    latest = !git tag --sort=-v:refname | head -1
    resetn = "!f() { git reset --hard HEAD~${1-1}; }; f"
[url "git@github.com:"]
    insteadOf = https://github.com/
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true

Wallpaper

https://drive.google.com/file/d/1NKj4iSYF4uuUAhOwC8G6E3Njt0pABVqR/view?usp=sharing

Razer LED controls

Follow: https://openrazer.github.io/#download

Then follow: https://polychromatic.app/download/ubuntu/

Restart

Xbox controller support

sudo apt-add-repository -y ppa:rael-gc/ubuntu-xboxdrv
sudo apt update
sudo apt install ubuntu-xboxdrv

Restart

Install Consolas font

cd /tmp

wget -O /tmp/YaHei.Consolas.1.12.zip https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/uigroupcode/YaHei.Consolas.1.12.zip

unzip /tmp/YaHei.Consolas.1.12.zip

sudo mkdir -p /usr/share/fonts/consolas

sudo mv YaHei.Consolas.1.12.ttf /usr/share/fonts/consolas/

sudo chmod 644 /usr/share/fonts/consolas/YaHei.Consolas.1.12.ttf

cd /usr/share/fonts/consolas

sudo mkfontscale && sudo mkfontdir && sudo fc-cache -fv

Set default Audio devices on startup

  • Check available sinks and sources with pacmd list-sources and pacmd list-sinks

  • sudo vi /opt/set_audio_devices.sh

#!/usr/bin/env bash

pactl set-default-source alsa_input.usb-Generic_Blue_Microphones_2053BAB06UD8-00.analog-stereo
pactl set-default-sink alsa_output.pci-0000_0d_00.4.analog-stereo
  • sudo chmod +x /opt/set_audio_devices.sh

  • Open Startup Applications -> Add -> set default audio devices, /opt/set_audio_devices.sh

BUG: Fix screen flickering on AMD GPU

  • Check KERNEL param with the following command
udevadm info --attribute-walk /sys/class/drm/card0 | grep "KERNEL="
  • Create new udev rule
sudo vi /etc/udev/rules.d/30-amdgpu-pm.rules
KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="high"

(KERNEL must match output of the previous command)

  • Add flags for kernel
sudo vi /etc/default/grub

Find GRUB_CMDLINE_LINUX_DEFAULT and add amdgpu.dcdebugmask=0x10 amdgpu.sg_display=0 so it looks like

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.dcdebugmask=0x10 amdgpu.sg_display=0"
  • Update GRUB
sudo update-grub
  • Restart

BUG: Speakers popping sound

echo "options snd_hda_intel power_save=0" | sudo tee -a /etc/modprobe.d/audio_disable_powersave.conf

Disable wayland (to enable Discord screen sharing)

sudo vi /etc/gdm3/custom.conf

Change WaylandEnable to false

sudo systemctl restart gdm3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment