Last active
March 11, 2025 12:13
-
-
Save riccardopedrielli/26cdc09f1be72aaf73f8dd3fe60ec2d5 to your computer and use it in GitHub Desktop.
Ubuntu workstation setup
This file contains hidden or 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 | |
set -Eeu | |
trap 'STATUS=${?}; echo "${0}: Error on line ${LINENO}: ${BASH_COMMAND}"; exit ${STATUS}' ERR | |
trap 'rm -rf ${tempDir}' EXIT | |
readonly supportedUbuntuVersion="24.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 | |
sudo snap remove --purge desktop-security-center | |
sudo snap remove --purge firefox | |
sudo snap remove --purge firmware-updater | |
sudo snap remove --purge gtk-common-themes | |
sudo snap remove --purge prompting-client | |
sudo snap remove --purge snap-store | |
sudo snap remove --purge snapd-desktop-integration | |
sudo snap remove --purge "$(sudo snap list | grep -E "gnome-[0-9]{2}-[0-9]{4}" | cut -d ' ' -f 1)" | |
sudo snap remove --purge core22 | |
sudo snap remove --purge bare | |
sudo snap remove --purge snapd | |
fi | |
sudo apt autoremove --purge -y gnome-shell-extension-prefs | |
sudo apt autoremove --purge -y memtest86+ | |
sudo apt autoremove --purge -y snapd | |
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 | |
} | |
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 \ | |
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 \ | |
piper \ | |
pulsemixer \ | |
silversearcher-ag \ | |
simple-scan \ | |
tldr \ | |
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] http://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 ppa:xuzhen666/gnome-mpv | |
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 | |
} | |
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.getpostman.Postman \ | |
com.github.tchx84.Flatseal \ | |
com.slack.Slack \ | |
com.todoist.Todoist \ | |
fr.romainvigier.MetadataCleaner \ | |
io.gitlab.news_flash.NewsFlash \ | |
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 \ | |
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@22 | |
mise use -y [email protected] [email protected] [email protected] | |
mise use -y java@corretto-21 java@corretto-17 | |
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-*/jetbrains-toolbox ${tempDir} | |
${tempDir}/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-12 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}" | |
} | |
installGnomeShellExtensions() | |
{ | |
logInfo "Install Gnome Shell Extensions" | |
gnome-extensions disable [email protected] | |
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.Terminal.desktop', 'code.desktop', 'syntevo-smartgit.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', 'discord-ptb.desktop', 'notable.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/terminal/legacy/keybindings/close-window='disabled' | |
org/gnome/terminal/legacy/keybindings/preferences='<Primary>less' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/audible-bell=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/background-color='rgb(21,27,31)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/bold-color-same-as-fg=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/bold-color='rgb(245,245,245)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/bold-is-bright=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/cell-height-scale=1.1000000000000001 | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/cell-width-scale=1.0 | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/cursor-background-color='rgb(251,0,232)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/cursor-blink-mode='off' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/cursor-colors-set=true | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/cursor-foreground-color='rgb(255,229,253)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/default-size-columns=160 | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/default-size-rows=40 | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/font='Fira Code Medium 11' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/foreground-color='rgb(240,240,240)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/highlight-background-color='rgb(193,221,255)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/highlight-colors-set=true | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/highlight-foreground-color='rgb(0,0,0)' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/palette=['rgb(0,0,0)', 'rgb(255,72,38)', 'rgb(65,167,50)', 'rgb(243,225,31)', 'rgb(82,137,249)', 'rgb(165,69,183)', 'rgb(65,185,211)', 'rgb(170,170,170)', 'rgb(126,126,126)', 'rgb(226,97,92)', 'rgb(115,205,114)', 'rgb(255,246,70)', 'rgb(98,174,255)', 'rgb(185,87,202)', 'rgb(69,195,221)', 'rgb(255,255,255)'] | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/scrollbar-policy='never' | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/use-system-font=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/use-theme-colors=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/use-theme-transparency=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/use-transparent-background=false | |
org/gnome/terminal/legacy/profiles:/:107d05fc-a7be-4eb3-aa9e-77061af82199/visible-name='Default' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/audible-bell=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/background-color='rgb(21,27,31)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/bold-color-same-as-fg=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/bold-color='rgb(245,245,245)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/bold-is-bright=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/cell-height-scale=1.1000000000000001 | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/cell-width-scale=1.0 | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/cursor-background-color='rgb(251,0,232)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/cursor-blink-mode='off' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/cursor-colors-set=true | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/cursor-foreground-color='rgb(255,229,253)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/default-size-columns=96 | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/default-size-rows=24 | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/font='Fira Code Medium 16' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/foreground-color='rgb(240,240,240)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/highlight-background-color='rgb(193,221,255)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/highlight-colors-set=true | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/highlight-foreground-color='rgb(0,0,0)' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/palette=['rgb(0,0,0)', 'rgb(255,72,38)', 'rgb(65,167,50)', 'rgb(243,225,31)', 'rgb(82,137,249)', 'rgb(165,69,183)', 'rgb(65,185,211)', 'rgb(170,170,170)', 'rgb(126,126,126)', 'rgb(226,97,92)', 'rgb(115,205,114)', 'rgb(255,246,70)', 'rgb(98,174,255)', 'rgb(185,87,202)', 'rgb(69,195,221)', 'rgb(255,255,255)'] | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/scrollbar-policy='never' | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/use-system-font=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/use-theme-colors=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/use-theme-transparency=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/use-transparent-background=false | |
org/gnome/terminal/legacy/profiles:/:90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa/visible-name='Presentation' | |
org/gnome/terminal/legacy/profiles:/default='107d05fc-a7be-4eb3-aa9e-77061af82199' | |
org/gnome/terminal/legacy/profiles:/list=['107d05fc-a7be-4eb3-aa9e-77061af82199', '90a6bbd2-1fa5-44b4-90e0-cc5aa08004fa'] | |
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/wrap-text=false | |
org/gtk/settings/file-chooser/clock-format='24h' | |
" | |
dconf load / <<< "${gnomeSettings}" | |
} | |
killSudoLoop() | |
{ | |
kill "${sudoLoopPid}" | |
} | |
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 Web to Junction | |
-> 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 | |
- 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 "" | |
} | |
main() | |
{ | |
checkUbuntuVersion | |
getSudoPrivileges | |
createTemporaryDirectory | |
setKernelParameters | |
configureGrub | |
disableReports | |
createDevStructure | |
removeUnwantedPackages | |
configureApt | |
updateSystem | |
installAptPackages | |
installFirefox | |
install1Password | |
installDocker | |
installGoogleChrome | |
installSpotify | |
installVSCode | |
installCelluloid | |
installGit | |
installFlatpakPackages | |
installScripts | |
installWakeMeOps | |
installBinEnv | |
installMise | |
installNPMPackages | |
installDebPackages | |
installJetBrainsToolbox | |
installAwsCli | |
installTranscrypt | |
installCUDA | |
setupBash | |
setupSensors | |
setupDatetime | |
setupBackground | |
installGnomeShellExtensions | |
configureSshServer | |
disableBluetooth | |
turnOffWiFi | |
updateGnomeSettings | |
killSudoLoop | |
writeTODO | |
printEndMessage | |
} | |
main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment