Skip to content

Instantly share code, notes, and snippets.

@riccardopedrielli
Last active December 17, 2025 20:44
Show Gist options
  • Select an option

  • Save riccardopedrielli/26cdc09f1be72aaf73f8dd3fe60ec2d5 to your computer and use it in GitHub Desktop.

Select an option

Save riccardopedrielli/26cdc09f1be72aaf73f8dd3fe60ec2d5 to your computer and use it in GitHub Desktop.
Ubuntu workstation setup
#!/usr/bin/env bash
set -Eeu
trap 'STATUS=${?}; echo "${0}: Error on line ${LINENO}: ${BASH_COMMAND}"; exit ${STATUS}' ERR
trap 'purge' EXIT
readonly supportedUbuntuVersion="25.10"
readonly tempDir="/tmp/setup"
readonly devDir="${HOME}/dev"
readonly scriptsDir="${devDir}/scripts"
readonly binDir="${devDir}/bin"
export DEBIAN_FRONTEND="noninteractive"
export PATH="${PATH}:${scriptsDir}:${binDir}:${HOME}/.binenv"
logInfo()
{
echo -e "\e[0;36m${*}\e[0m"
}
logError()
{
echo -e "\e[0;31m${*}\e[0m"
}
logWarning()
{
echo -e "\e[0;33m${*}\e[0m"
}
getLatestGithubVersion()
{
curl -fsSL "https://api.github.com/repos/${1}/releases/latest" | jq -r .tag_name
}
checkUbuntuVersion()
{
local -r currentUbuntuVersion=$(lsb_release -rs)
if [ "${currentUbuntuVersion}" != "${supportedUbuntuVersion}" ]; then
logWarning "This script is supported only on Ubuntu ${supportedUbuntuVersion}"
logWarning "The Ubuntu version currently installed is ${currentUbuntuVersion}"
while true; do
read -rp "Continue anyway? [y/n]: " ANSWER
case ${ANSWER} in
[Yy]* )
break
;;
[Nn]* )
logError "Aborted"
exit 1
;;
* )
echo "Please answer yes or no."
;;
esac
done
fi
}
getSudoPrivileges()
{
logInfo "Get sudo privileges"
sudo -v
while true; do sudo -v; sleep 30; done &
sudoLoopPid=$!
}
createTemporaryDirectory()
{
logInfo "Create temporary directory"
mkdir -p ${tempDir}
}
setKernelParameters()
{
logInfo "Set kernel parameters"
sudo tee /etc/sysctl.d/90-custom.conf > /dev/null \
<<- EOT
fs.inotify.max_user_watches=1048576
vm.swappiness=1
EOT
sudo sysctl -p /etc/sysctl.d/90-custom.conf
}
configureGrub()
{
logInfo "Configure grub"
sudo tee /etc/default/grub.d/disable-ipv6.cfg > /dev/null \
<<- EOT
GRUB_CMDLINE_LINUX="ipv6.disable=1"
EOT
sudo tee /etc/default/grub.d/timeout.cfg > /dev/null \
<<- EOT
GRUB_TIMEOUT=10
EOT
sudo tee /etc/default/grub.d/no-recovery.cfg > /dev/null \
<<- EOT
GRUB_DISABLE_RECOVERY="true"
EOT
sudo tee /etc/default/grub.d/no-submenu.cfg > /dev/null \
<<- EOT
GRUB_DISABLE_SUBMENU="true"
EOT
sudo update-grub
}
disableReports()
{
logInfo "Disable system and error reports"
ubuntu-report send no -f
sudo sed -i \
-e 's/^enabled=1$/enabled=0/' \
/etc/default/apport
sudo systemctl stop apport.service
sudo systemctl disable apport.service
sudo systemctl mask apport.service
}
createDevStructure()
{
logInfo "Create dev structure"
mkdir -p "${devDir}"
mkdir -p "${devDir}/bin"
mkdir -p "${devDir}/data"
mkdir -p "${devDir}/src"
mkdir -p "${devDir}/tools"
}
removeUnwantedPackages()
{
logInfo "Remove unwanted packages"
if command -v snap &> /dev/null; then
local -r snapPackages=(
"desktop-security-center"
"firefox"
"firmware-updater"
"gtk-common-themes"
"prompting-client"
"snap-store"
"snapd-desktop-integration"
"$(sudo snap list | grep -E "gnome-[0-9]{2}-[0-9]{4}\s" | cut -d ' ' -f 1)"
"$(sudo snap list | grep -E "core[0-9]{2}\s" | cut -d ' ' -f 1)"
"bare"
"snapd"
)
for snapPackage in "${snapPackages[@]}"; do
while snap changes | grep -q Doing; do
sleep 2
done
sudo snap remove --purge "${snapPackage}"
done
fi
rm -rf "${HOME}/snap"
sudo rm -rf "/root/snap"
sudo rm -rf "/var/cache/snapd"
sudo tee /etc/apt/preferences.d/firefox-no-snap > /dev/null \
<<- EOT
Package: firefox*
Pin: release o=Ubuntu*
Pin-Priority: -1
EOT
sudo tee /etc/apt/preferences.d/no-snap > /dev/null \
<<- EOT
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOT
sudo apt autoremove --purge -y "memtest86+"
sudo apt autoremove --purge -y "snapd"
}
configureApt()
{
logInfo "Configure APT"
sudo rm -f /etc/apt/sources.list.d/*.orig
sudo sed -i \
-e 's|http://.*\.archive.ubuntu.com|http://archive.ubuntu.com|g' \
/etc/apt/sources.list.d/ubuntu.sources
sudo tee /etc/apt/apt.conf.d/10periodic > /dev/null \
<<- EOT
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";
EOT
sudo tee /etc/apt/apt.conf.d/20auto-upgrades > /dev/null \
<<- EOT
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";
EOT
sudo tee /etc/apt/apt.conf.d/99phased-updates > /dev/null \
<<- EOT
Update-Manager::Always-Include-Phased-Updates true;
APT::Get::Always-Include-Phased-Updates true;
EOT
sudo tee /etc/apt/apt.conf.d/99disable-warning > /dev/null \
<<- EOT
Apt::Cmd::Disable-Script-Warning "true";
EOT
}
updateSystem()
{
logInfo "Update system"
sudo apt update
sudo apt dist-upgrade -y
sudo apt autoremove --purge -y
}
installAptPackages()
{
logInfo "Install APT packages"
sudo apt install -y \
apt-transport-https \
autokey-gtk \
build-essential \
curl \
dconf-editor \
duf \
fastfetch \
filezilla \
flatpak \
fonts-firacode \
fwupd-unsigned \
gdu \
gimp \
gnome-browser-connector \
gnome-connections \
gnome-firmware \
gnome-shell-extension-manager \
gnome-software \
gnome-sushi \
gnome-tweaks \
lm-sensors \
lsd \
mediainfo \
meld \
micro \
net-tools \
nethogs \
openssh-server \
optipng \
pulsemixer \
silversearcher-ag \
simple-scan \
tree \
unrar \
yadm
}
installFirefox()
{
logInfo "Install Firefox"
sudo tee /etc/apt/preferences.d/mozillateam-ppa > /dev/null \
<<- EOT
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 501
EOT
sudo add-apt-repository -y ppa:mozillateam/ppa
sudo apt update
sudo apt install -y firefox
}
install1Password()
{
logInfo "Install 1Password"
curl -fsSL "https://downloads.1password.com/linux/debian/amd64/stable/1password-latest.deb" -o ${tempDir}/1password.deb
sudo apt install -y ${tempDir}/1password.deb
}
installDocker()
{
logInfo "Install Docker"
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null \
<<- EOT
X-Repolib-Name: Docker
Enabled: yes
Types: deb
URIs:https://download.docker.com/linux/ubuntu
Suites: $(lsb_release -cs)
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOT
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo adduser "${USER}" docker
sudo tee /etc/docker/daemon.json > /dev/null \
<<- EOT
{
"log-driver": "local"
}
EOT
mkdir -p "${HOME}/.docker"
tee "${HOME}/.docker/config.json" > /dev/null \
<<- EOT
{
"auths": {
"https://index.docker.io/v1/": {}
},
"credsStore": "secretservice",
"credHelpers": {
"000000000000.dkr.ecr.eu-west-1.amazonaws.com": "ecr-login"
},
"experimental": "enabled"
}
EOT
local -r dockerCredentialVersion=$(getLatestGithubVersion docker/docker-credential-helpers)
curl -fsSL "https://github.com/docker/docker-credential-helpers/releases/download/${dockerCredentialVersion}/docker-credential-secretservice-${dockerCredentialVersion}.linux-amd64" \
-o "${binDir}/docker-credential-secretservice"
chmod +x "${binDir}/docker-credential-secretservice"
}
installGoogleChrome()
{
logInfo "Install Google Chrome"
curl -fsSL "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" -o ${tempDir}/chrome.deb
sudo apt install -y ${tempDir}/chrome.deb
}
installSpotify()
{
logInfo "Install Spotify"
curl -fsSL https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/spotify.gpg
sudo tee /etc/apt/sources.list.d/spotify.list > /dev/null \
<<- EOT
deb [signed-by=/etc/apt/keyrings/spotify.gpg] https://repository.spotify.com stable non-free
EOT
sudo apt update
sudo apt install -y spotify-client
}
installVSCode()
{
logInfo "Install Visual Studio Code"
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/packages.microsoft.gpg
sudo tee /etc/apt/sources.list.d/vscode.sources > /dev/null \
<<- EOT
X-Repolib-Name: VS Code
Enabled: yes
Types: deb
URIs: https://packages.microsoft.com/repos/code
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/packages.microsoft.gpg
EOT
sudo apt update
sudo apt install -y code
}
installCelluloid()
{
logInfo "Install Celluloid"
sudo add-apt-repository -y --no-update ppa:xuzhen666/gnome-mpv
sudo sed -i \
-e 's|Suites: .*|Suites: plucky|g' \
/etc/apt/sources.list.d/xuzhen666-ubuntu-gnome-mpv-questing.sources
sudo apt update
sudo apt install -y celluloid
}
installGit()
{
logInfo "Install Git"
sudo add-apt-repository -y ppa:git-core/ppa
sudo apt update
sudo apt install -y git
sudo apt install -y libsecret-1-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
}
installDiffSoFancy()
{
logInfo "Install Diff So Fancy"
local -r diffSoFancyVersion=$(getLatestGithubVersion so-fancy/diff-so-fancy)
curl -fsSL "https://github.com/so-fancy/diff-so-fancy/releases/download/${diffSoFancyVersion}/diff-so-fancy" -o "${binDir}/diff-so-fancy"
chmod +x "${binDir}/diff-so-fancy"
}
installFlatpakPackages()
{
logInfo "Install Flatpak packages"
sudo apt install -y flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --or-update -y flathub \
com.belmoussaoui.Obfuscate \
com.discordapp.Discord \
com.getpostman.Postman \
com.github.tchx84.Flatseal \
com.slack.Slack \
com.todoist.Todoist \
fr.romainvigier.MetadataCleaner \
io.gitlab.news_flash.NewsFlash \
md.obsidian.Obsidian \
org.gabmus.whatip \
org.gnome.design.IconLibrary \
org.telegram.desktop \
re.sonny.Commit \
re.sonny.Junction
}
installScripts()
{
logInfo "Install scripts"
if [ -e "${scriptsDir}" ]; then
logWarning "The directory \"${scriptsDir}\" already exists and will not be overwritten"
else
git clone https://github.com/riccardopedrielli/scripts.git "${scriptsDir}"
fi
}
installWakeMeOps()
{
logInfo "Install WakeMeOps"
curl -fsSL https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository | sudo bash
sudo apt update
sudo apt install -y \
bat \
curlie \
datree \
eza \
fd \
ghorg \
glab \
gping \
helm \
hostctl \
hugo \
infracost \
k3d \
k6 \
krew \
kube-linter \
kubeaudit \
kubectl \
kubescape \
lazygit \
lens \
procs \
telepresence \
terraform \
terraform-docs \
terrascan \
tflint \
yq
}
installBinEnv()
{
logInfo "Install BinEnv"
local -r binenvVersion=$(getLatestGithubVersion devops-works/binenv)
curl -fsSL "https://github.com/devops-works/binenv/releases/download/${binenvVersion}/binenv_linux_amd64" -o ${tempDir}/binenv
chmod +x ${tempDir}/binenv
${tempDir}/binenv update
${tempDir}/binenv install binenv
binenv install broot
binenv install ctop
binenv install driftctl
binenv install gocloc
binenv install gokart
binenv install grype
binenv install kube-beacon
binenv install kube-bench
binenv install kubecolor
binenv install kubent
binenv install kubestr
binenv install tfsec
binenv install tlsexp
binenv install updatecli
}
installMise()
{
curl -fsSL https://mise.jdx.dev/gpg-key.pub | sudo gpg --dearmor --yes -o /etc/apt/keyrings/mise-archive-keyring.gpg
sudo tee /etc/apt/sources.list.d/mise.sources > /dev/null \
<<- EOT
X-Repolib-Name: Mise
Enabled: yes
Types: deb
URIs: https://mise.jdx.dev/deb
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/mise-archive-keyring.gpg
EOT
sudo apt update
sudo apt install -y mise libssl-dev
local -r miseConfDir="${HOME}/.config/mise"
mkdir -p "${miseConfDir}"
touch "${miseConfDir}/config.toml"
mise trust --all
ln -sf "${HOME}/.local/share/mise" "${HOME}/.asdf"
eval "$(mise activate bash --shims)"
mise use -y go
mise use -y node@24
mise use -y python@3.14
mise use -y java@corretto-25
mise use -y maven
mise use -y gradle
}
installNPMPackages()
{
logInfo "Install NPM packages"
eval "$(mise activate bash --shims)"
install-npm-pkgs
}
installDebPackages()
{
logInfo "Install deb packages"
update-local-deb
}
installJetBrainsToolbox()
{
logInfo "Install JetBrains Toolbox"
sudo apt install -y libfuse2t64
local -r toolboxUrl=$(curl -fsSL 'https://data.services.jetbrains.com/products/releases?code=TBA&latest=true&type=release' | jq -r '.TBA[0].downloads.linux.link')
curl -fsSL "${toolboxUrl}" -o ${tempDir}/jetbrains-toolbox.tar.gz
tar xzf ${tempDir}/jetbrains-toolbox.tar.gz -C ${tempDir}
mv ${tempDir}/jetbrains-toolbox-* "${devDir}/tools/jetbrains-toolbox"
rm -rf ${tempDir}/jetbrains-toolbox*
}
installAwsCli()
{
logInfo "Install aws cli"
update-aws-cli
local -r credHelperVersion=$(curl -fsSL "https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/releases/latest" | jq -r .tag_name | sed 's/v//')
local -r credHelperUrl="https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${credHelperVersion}/linux-amd64/docker-credential-ecr-login"
curl -fsSL "${credHelperUrl}" -o "${binDir}/docker-credential-ecr-login"
chmod +x "${binDir}/docker-credential-ecr-login"
}
installTranscrypt()
{
logInfo "Install Transcrypt"
local -r transcryptVersion=$(getLatestGithubVersion elasticdog/transcrypt)
curl -fsSL "https://raw.githubusercontent.com/elasticdog/transcrypt/${transcryptVersion}/transcrypt" \
-o "${binDir}/transcrypt"
chmod +x "${binDir}/transcrypt"
}
installCUDA()
{
logInfo "Install CUDA"
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb -o ${tempDir}/cuda-keyring.deb
sudo apt install -y ${tempDir}/cuda-keyring.deb
sudo apt update
sudo apt install -y cuda-toolkit-13 nvitop
}
setupBash()
{
logInfo "Set up Bash"
local -r toolDir="${devDir}/tools/bash-git-prompt"
if [ -e "${toolDir}" ]; then
logWarning "The directory \"${toolDir}\" already exists and will not be overwritten"
else
git clone https://github.com/magicmonty/bash-git-prompt.git "${toolDir}"
fi
tee "${HOME}/.bash_aliases" > /dev/null \
<<- EOT
[ -s "\${HOME}/dev/data/bash/custom.sh" ] && source "\${HOME}/dev/data/bash/custom.sh"
EOT
}
setupSensors()
{
logInfo "Set up sensors"
sudo sensors-detect --auto
}
setupDatetime()
{
logInfo "Set up date & time"
timedatectl set-local-rtc true
timedatectl set-ntp true
}
setupBackground()
{
logInfo "Set up background"
local -r backgroundsDir="${HOME}/.local/share/backgrounds"
mkdir -p "${backgroundsDir}"
curl -fsSL https://i.imgur.com/PkHGuw2.jpg -o "${backgroundsDir}/background.jpg"
local -r gnomeSettings="
[/]
org/gnome/desktop/background/picture-uri-dark='file://${backgroundsDir}/background.jpg'
org/gnome/desktop/background/picture-uri='file://${backgroundsDir}/background.jpg'
org/gnome/desktop/background/primary-color='#000000'
org/gnome/desktop/background/secondary-color='#000000'
"
dconf load / <<< "${gnomeSettings}"
}
setupPtyxis()
{
local -r palettesDir="${HOME}/.local/share/org.gnome.Ptyxis/palettes"
mkdir -p "${palettesDir}"
tee "${palettesDir}/Vortex.palette" > /dev/null \
<<- EOT
[Palette]
Name=Vortex
Primary=true
Foreground=#f0f0f0
Background=#151b1f
Cursor=#fb00e8
Color0=#000000
Color1=#ff4826
Color2=#41a732
Color3=#f3e11f
Color4=#5289f9
Color5=#a545b7
Color6=#41b9d3
Color7=#aaaaaa
Color8=#7e7e7e
Color9=#e2615c
Color10=#73cd72
Color11=#fff646
Color12=#62aeff
Color13=#b957ca
Color14=#45c3dd
Color15=#ffffff
EOT
local -r gnomeSettings="
[/]
org/gnome/Ptyxis/audible-bell=false
org/gnome/Ptyxis/cursor-blink-mode='off'
org/gnome/Ptyxis/default-profile-uuid='8040a40115a1895134e46c306928e050'
org/gnome/Ptyxis/font-name='Fira Code Medium 10'
org/gnome/Ptyxis/profile-uuids=['8040a40115a1895134e46c306928e050']
org/gnome/Ptyxis/Profiles/8040a40115a1895134e46c306928e050/bold-is-bright=false
org/gnome/Ptyxis/Profiles/8040a40115a1895134e46c306928e050/cell-height-scale=1.1000000000000001
org/gnome/Ptyxis/Profiles/8040a40115a1895134e46c306928e050/label='Default'
org/gnome/Ptyxis/Profiles/8040a40115a1895134e46c306928e050/palette='Vortex'
org/gnome/Ptyxis/restore-session=false
org/gnome/Ptyxis/Shortcuts/move-next-tab='<Shift><Control>Right'
org/gnome/Ptyxis/Shortcuts/move-previous-tab='<Shift><Control>Left'
org/gnome/Ptyxis/Shortcuts/zoom-in='<Control>equal'
org/gnome/Ptyxis/use-system-font=false
"
dconf load / <<< "${gnomeSettings}"
}
installGnomeShellExtensions()
{
logInfo "Install Gnome Shell Extensions"
gnome-extensions disable ding@rastersoft.com
sudo apt install -y gir1.2-gtop-2.0
curl -fsSL https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/ubuntugnome/gnomeshell-extension-manage -o ${tempDir}/gnomeshell-extension-manage
chmod +x ${tempDir}/gnomeshell-extension-manage
${tempDir}/gnomeshell-extension-manage --install --user --version latest --extension-id 28 # gTile
${tempDir}/gnomeshell-extension-manage --install --user --version latest --extension-id 36 # Lock Keys
${tempDir}/gnomeshell-extension-manage --install --user --version latest --extension-id 277 # Impatience
${tempDir}/gnomeshell-extension-manage --install --user --version latest --extension-id 841 # Freon
${tempDir}/gnomeshell-extension-manage --install --user --version latest --extension-id 5219 # TopHat
local -r gnomeSettings="
[/]
org/gnome/shell/extensions/freon/hot-sensors=['__average__', '__max__', 'NVIDIA GeForce RTX 4080']
org/gnome/shell/extensions/freon/show-voltage=false
org/gnome/shell/extensions/freon/use-gpu-nvidia=true
org/gnome/shell/extensions/gtile/global-presets=false
org/gnome/shell/extensions/gtile/grid-sizes='6x6'
org/gnome/shell/extensions/gtile/moveresize-enabled=false
org/gnome/shell/extensions/lockkeys/notification-preferences='osd'
org/gnome/shell/extensions/lockkeys/style='none'
org/gnome/shell/extensions/net/gfxmonk/impatience/speed-factor=0.75
org/gnome/shell/extensions/tiling-assistant/center-window=['<Super><Alt>c']
"
dconf load / <<< "${gnomeSettings}"
}
configureSshServer()
{
logInfo "Configure SSH server"
sudo tee /etc/ssh/sshd_config.d/99-custom.conf > /dev/null \
<<- EOT
Port 22011
EOT
sudo systemctl restart ssh.service
}
disableBluetooth()
{
logInfo "Disable Bluetooth"
sudo sed -i \
-E 's/(#| )*AutoEnable=.*/AutoEnable=false/g' \
/etc/bluetooth/main.conf
}
turnOffWiFi()
{
logInfo "Turn off WiFi"
nmcli radio wifi off
}
updateGnomeSettings()
{
logInfo "Update Gnome settings"
local -r gnomeSettings="
[/]
ca/desrt/dconf-editor/show-warning=false
org/gnome/Characters/recent-characters=['È', 'è', 'à', 'ì', 'ò', 'ù', '€', '°', ' ']
org/gnome/desktop/calendar/show-weekdate=true
org/gnome/desktop/input-sources/xkb-options=['compose:menu']
org/gnome/desktop/interface/clock-format='24h'
org/gnome/desktop/interface/clock-show-weekday=true
org/gnome/desktop/interface/color-scheme='prefer-dark'
org/gnome/desktop/interface/cursor-theme='DMZ-White'
org/gnome/desktop/interface/gtk-theme='Yaru-dark'
org/gnome/desktop/interface/icon-theme='Yaru-dark'
org/gnome/desktop/interface/monospace-font-name='Fira Code Medium 11'
org/gnome/desktop/interface/show-battery-percentage=true
org/gnome/desktop/media-handling/autorun-never=true
org/gnome/desktop/media-handling/autorun-x-content-start-app=['x-content/ostree-repository']
org/gnome/desktop/notifications/show-in-lock-screen=false
org/gnome/desktop/peripherals/mouse/accel-profile='flat'
org/gnome/desktop/peripherals/mouse/speed=0.0
org/gnome/desktop/peripherals/touchpad/click-method='fingers'
org/gnome/desktop/privacy/old-files-age=uint32 1
org/gnome/desktop/privacy/recent-files-max-age=1
org/gnome/desktop/privacy/remember-recent-files=false
org/gnome/desktop/privacy/remove-old-temp-files=true
org/gnome/desktop/privacy/remove-old-trash-files=true
org/gnome/desktop/screensaver/lock-delay=uint32 60
org/gnome/desktop/search-providers/disabled=['org.gnome.Characters.desktop', 'org.gnome.seahorse.Application.desktop', 'org.gnome.Terminal.desktop']
org/gnome/desktop/session/idle-delay=uint32 900
org/gnome/desktop/sound/event-sounds=false
org/gnome/gnome-system-monitor/graph-data-points=36
org/gnome/gnome-system-monitor/graph-update-interval=500
org/gnome/meld/filename-filters=[('Backups', true, '#*# .#* ~* *~ *.{orig,bak,swp}'), ('OS-specific metadata', true, '.DS_Store ._* .Spotlight-V100 .Trashes Thumbs.db Desktop.ini'), ('Version Control', true, '_MTN .bzr .svn .svn .hg .fslckout _FOSSIL_ .fos CVS _darcs .git .svn .osc'), ('Binaries', true, '*.{pyc,a,obj,o,so,la,lib,dll,exe}'), ('Media', false, '*.{jpg,gif,png,bmp,wav,mp3,ogg,flac,avi,mpg,xcf,xpm}'), ('Dev', true, '.gradle .cache .node-gyp .terraform .terraform.lock.hcl bower_components node_modules build')]
org/gnome/meld/folder-status-filters=['new', 'modified']
org/gnome/meld/highlight-current-line=true
org/gnome/meld/highlight-syntax=true
org/gnome/meld/indent-width=4
org/gnome/meld/insert-spaces-instead-of-tabs=true
org/gnome/meld/show-line-numbers=true
org/gnome/meld/style-scheme='Yaru-dark'
org/gnome/nautilus/list-view/default-visible-columns=['name', 'size', 'type', 'date_modified']
org/gnome/nautilus/list-view/default-zoom-level='small'
org/gnome/nautilus/list-view/use-tree-view=true
org/gnome/nautilus/preferences/default-folder-viewer='list-view'
org/gnome/nautilus/preferences/recursive-search='always'
org/gnome/nautilus/preferences/show-delete-permanently=true
org/gnome/nautilus/preferences/show-directory-item-counts='never'
org/gnome/nautilus/preferences/show-image-thumbnails='never'
org/gnome/nautilus/window-state/sidebar-width=200
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding='<Super>x'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/command='gnome-session-quit --power-off'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/name='Shutdown'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/binding='<Shift><Super>x'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/command='gnome-session-quit --reboot'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/name='Reboot'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/binding='<Primary><Shift>Escape'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/command='gnome-system-monitor'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/name='System Monitor'
org/gnome/settings-daemon/plugins/media-keys/custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/']
org/gnome/settings-daemon/plugins/power/ambient-enabled=false
org/gnome/settings-daemon/plugins/power/power-button-action='interactive'
org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-timeout=1200
org/gnome/settings-daemon/plugins/power/sleep-inactive-ac-type='nothing'
org/gnome/settings-daemon/plugins/power/sleep-inactive-battery-timeout=1200
org/gnome/settings-daemon/plugins/power/sleep-inactive-battery-type='suspend'
org/gnome/shell/extensions/dash-to-dock/dash-max-icon-size=40
org/gnome/shell/extensions/dash-to-dock/dock-position='BOTTOM'
org/gnome/shell/extensions/dash-to-dock/multi-monitor=true
org/gnome/shell/extensions/dash-to-dock/show-mounts-network=false
org/gnome/shell/extensions/dash-to-dock/show-mounts-only-mounted=true
org/gnome/shell/favorite-apps=['org.gnome.Nautilus.desktop', 'firefox.desktop', 'google-chrome.desktop', 'org.gnome.Ptyxis.desktop', 'code.desktop', 'gitkraken.desktop', 'org.gnome.meld.desktop', 'lens.desktop', 'com.todoist.Todoist.desktop', 'filezilla.desktop', 'com.getpostman.Postman.desktop', 'com.slack.Slack.desktop', 'org.telegram.desktop.desktop', 'com.discordapp.Discord.desktop', 'md.obsidian.Obsidian.desktop', 'org.gnome.TextEditor.desktop', 'com.gitlab.newsflash.desktop', 'spotify.desktop', '1password.desktop']
org/gnome/shell/ubuntu/startup-sound=''
org/gnome/software/download-updates-notify=false
org/gnome/software/download-updates=false
org/gnome/system/location/enabled=true
org/gnome/TextEditor/custom-font='Fira Code Medium 11'
org/gnome/TextEditor/highlight-current-line=true
org/gnome/TextEditor/indent-style='space'
org/gnome/TextEditor/restore-session=false
org/gnome/TextEditor/right-margin-position=uint32 120
org/gnome/TextEditor/show-line-numbers=true
org/gnome/TextEditor/show-map=true
org/gnome/TextEditor/spellcheck=false
org/gnome/TextEditor/style-scheme='Adwaita-dark'
org/gnome/TextEditor/tab-width=uint32 4
org/gnome/TextEditor/use-system-font=false
org/gnome/TextEditor/wrap-text=false
org/gtk/settings/file-chooser/clock-format='24h'
"
dconf load / <<< "${gnomeSettings}"
}
writeTODO()
{
logInfo "Write TODO"
tee "${HOME}/TODO.txt" > /dev/null \
<<- EOT
- Delete the setup.sh script
- Open Settings -> Privacy & Security -> Diagnostic -> Send error reports to Canonical -> Never
- Open Settings -> Apps -> Default Apps -> Set Music to Celluloid
-> Set Video to Celluloid
- Open Language Support -> If prompted for missing languages, click Install
-> Language -> Apply System-Wide
-> Regional Formats -> Apply System-Wide
- Load configs with YADM
- Open Junction and click the button "Set Junction as default for Web"
- Run ${devDir}/tools/jetbrains-toolbox/bin/jetbrains-toolbox just one time, after that a desktop entry will be created
- Install JetBrains IDEs from JetBrains Toolbox
- Delete this file
EOT
}
printEndMessage()
{
logInfo "Done"
echo ""
echo "The setup has been completed successfully."
echo "Some changes require a restart to take effect."
echo "After the restart, read the TODO.txt file in your home directory for the manual steps to complete the setup."
echo ""
}
purge()
{
rm -rf ${tempDir}
if [ -n "${sudoLoopPid}" ]; then
kill "${sudoLoopPid}"
fi
}
main()
{
checkUbuntuVersion
getSudoPrivileges
createTemporaryDirectory
setKernelParameters
configureGrub
disableReports
createDevStructure
removeUnwantedPackages
configureApt
updateSystem
installAptPackages
installFirefox
install1Password
installDocker
installGoogleChrome
installSpotify
installVSCode
installCelluloid
installGit
installDiffSoFancy
installFlatpakPackages
installScripts
installWakeMeOps
installBinEnv
installMise
installNPMPackages
installDebPackages
installJetBrainsToolbox
installAwsCli
installTranscrypt
installCUDA
setupBash
setupSensors
setupDatetime
setupBackground
setupPtyxis
installGnomeShellExtensions
configureSshServer
disableBluetooth
turnOffWiFi
updateGnomeSettings
writeTODO
printEndMessage
}
main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment