install_notes/ubuntu_laptop.sh

758 lines
29 KiB
Bash

# Installation script on Ubuntu 22.04 LTS
# Created 2022-05-03
mkdir temp_install
cd temp_install
chmod 777 . # ensure there aren't any permissions issues
#####################
## PERSONALIZATION ##
#####################
MY_NAME="Brendan Haines"
MY_EMAIL="brendan.haines@gmail.com"
########################
## PACKAGE MANAGEMENT ##
########################
echo '
# START OF USER ADDITIONS
' >> ~/.bashrc
# Updates since distro release
sudo apt-get update
sudo apt-get upgrade -y
# Filesystem support
sudo apt-get install -y nfs-common
# I ripped out old drive mapping from Dell E7470. I need to decide exactly what I want to do with photos
# Decent AppImage support
sudo add-apt-repository -y ppa:appimagelauncher-team/stable
sudo apt-get install -y appimagelauncher
mkdir ~/Applications
cat << EOF > ~/.config/appimagelauncher.cfg
[AppImageLauncher]
ask_to_move = true
# destination = ~/Applications
# enable_daemon = true
[appimagelauncherd]
# additional_directories_to_watch = ~/otherApplications:/even/more/applications
# monitor_mounted_filesystems = false
EOF
sudo apt-get install -y xclip # used to pre-populate clipboard for brave settings
# I'm not thrilled with chromium-based browsers right now so here's to firefox
firefox https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager/?browser=firefox
# TODO: pin bitwarden extension to toolbar
firefox https://addons.mozilla.org/en-US/firefox/addon/earth-view-from-google/
firefox https://addons.mozilla.org/en-US/firefox/addon/toolkit-for-ynab/
firefox about:preferences
# TODO: manual step
# - home
# - disable recommended by pocket
# - search
# - disable suggestions from firefox
# - disable suggestions from sponsors
# - privacy
# - enable tell websites not to share my data
# - enable send websites a do not track request
# - disable ask to save passwords
# - disable show alerts about passwords for breached websites
# - disable save and fill addresses
# - disable save and fill payment methods
# - disable Allow Firefox to make personalized extension recommendations
# TODO: manual step
# global settings (kde)
# - input devices
# - touchpad
# - enable natural scrolling
# - Appearance
# - global theme = breath dark
# - Window management
# - task switcher
# - Thumbnail grid
# - Display and monitor
# - Night color
# - sunset and sunrise at current location
# NOTE: brave is not a package manager but can be used to install other things so it gets installed early
# Brave browser
sudo apt-get install -y apt-transport-https curl
sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main"|sudo tee /etc/apt/sources.list.d/brave-browser-release.list
sudo apt-get update
sudo apt-get install -y brave-browser
# Automatically install extensions
sudo mkdir --parents /etc/brave/policies/managed
sudo bash -c 'cat << EOF > /etc/brave/policies/managed/default_extensions.json
{
"PasswordManagerEnabled": false,
"PaymentMethodQueryEnabled": false,
"SyncDisabled": true,
"BrowsingDataLifetime": [
{
"time_to_live_in_hours": 72,
"data_types": [
"browsing_history",
"download_history",
"cached_images_and_files",
]
}
],
"BrowserSignin": 0, // 0 = Disable browser sign-in
"RestoreOnStartup": 5, // 5 = Open New Tab Page
"ShowFullUrlsInAddressBar": true,
"DefaultBrowserSettingEnabled": true, // try to automatically set as default on start
"PaymentMethodQueryEnabled": false,
"BraveRewardsDisabled": true,
"BraveWalletDisabled": true,
"ExtensionSettings":{
"gphhapmejobijbbhgpjhcjognlahblep":{
// Gnome shell integration
"installation_mode": "force_installed",
"update_url":"https://clients2.google.com/service/update2/crx"
},
"nngceckbapebfimnlniiiahkandclblb":{
// Bitwarden
"installation_mode": "normal_installed",
"toolbar_pin": "force_pinned",
"update_url":"https://clients2.google.com/service/update2/crx"
},
"aapbdbdomjkkjkaonfhkkikfgjllcleb":{
// Google Translate
"installation_mode": "normal_installed",
"update_url":"https://clients2.google.com/service/update2/crx"
},
"chphlpgkkbolifaimnlloiipkdnihall":{
// OneTab
"installation_mode": "normal_installed",
"update_url":"https://clients2.google.com/service/update2/crx"
},
"bhloflhklmhfpedakmangadcdofhnnoh":{
// Earth View
"installation_mode": "normal_installed",
"update_url":"https://clients2.google.com/service/update2/crx"
},
"lmhdkkhepllpnondndgpgclfjnlofgjl":{
// YNAB Toolkit
"installation_mode": "normal_installed",
"update_url":"https://clients2.google.com/service/update2/crx"
},
"gabdloknkpdefdpkkibplcfnkngbidim":{
// Deluge Siphon
"installation_mode": "normal_installed",
"update_url":"https://clients2.google.com/service/update2/crx"
},
},
}
EOF'
killall brave # extensions won't be installed until brave restarts
# policies can be seen at brave://policy/
# https://support.brave.com/hc/en-us/articles/360039248271-Group-Policy
# can't open brave to settings page so I'll at least make it easy to do by hand
echo "brave://settings" | xclip -sel clip
cat << EOF
MANUAL STEP: paste URL from clipboard (brave settings)
set as default browser
dark mode
default search engine: duckduckgo (for both normal and private windows)
use wide address bar = true
show rewards icon in address bar = false
save and fill payment methods = false
EOF
brave-browser
read -n 1 -p "Press any key to continue..."
# SSH
ssh-keygen -t ed25519 -C $MY_EMAIL -f ~/.ssh/id_ed25519 -N ""
xclip -sel clip < ~/.ssh/id_ed25519.pub
cat << EOF
MANUAL STEP: gitlab SSH
paste public key (already in clipboard) and save
EOF
echo "Hostname is '$(hostname)'"
brave-browser https://gitlab.com/-/profile/keys
read -n 1 -p "Press any key to continue..."
# Git
sudo apt-get install -y git
git config --global user.name $MY_NAME
git config --global user.email $MY_EMAIL
git config --global init.defaultBranch main
git config --global pull.ff only
git config --global merge.ff no
# git config --global merge.commit no
# Pipx
sudo apt-get install -y python3-pip python3-venv
pip3 install --user pipx
echo 'export PATH="/home/$USER/.local/bin:$PATH"' >> ~/.bashrc # TODO: should this be added to start or end of PATH?
export PATH=$PATH:/home/$USER/.local/bin
# Pyenv
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"' >> ~/.bashrc
# Common python tools
pipx install pipenv
echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc
pipx install bump2version
pipx install black
sudo apt-get install -y ffmpeg
# Common python libraries
pip3 install --user scipy matplotlib numpy
sudo apt-get install -y python3-tk
# Compilers
curl https://sh.rustup.rs -sSf | sh -s -- -y
sudo apt-get install -y libudev-dev libusb-1.0-0-dev
cargo install cargo-embed
cargo install probe-run
rustup install nightly
rustup target install thumbv7m-none-eabi
rustup target install thumbv7em-none-eabi
rustup target install thumbv7em-none-eabihf
sudo bash -c 'cat << EOF > /etc/udev/rules.d/50-probe-rs.rules
# udev rules to allow access to USB devices as a non-root user
# STMicroelectronics ST-LINK/V2
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", TAG+="uaccess"
# STMicroelectronics STLINK-V3
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", TAG+="uaccess"
EOF'
sudo udevadm control --reload-rules
sudo apt-get install -y gcc g++ cmake
sudo apt-get install -y iverilog gtkwave yosys verilator arachne-pnr
sudo apt-get install -y clang-format
sudo snap install go --classic
# Docker
# TODO: I think there's a better (curl a script) way to do this
sudo apt-get remove docker docker-engine docker.io containerd runc # NOTE: I don't think this is necessary
sudo apt-get install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -a -G docker $USER
# TODO: I need sudo to use docker right now
# Docker compose
sudo curl -L https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Basic utilities
sudo apt-get install -y net-tools nmap lynx
sudo apt-get install -y debconf-utils
sudo apt-get install -y dconf-editor
# Fingerprint sensor
if [ "$(sudo dmidecode -s system-version)" = "ThinkPad E14 Gen 4" ]; then
wget https://download.lenovo.com/pccbbs/mobiles/r1slg01w.zip -O lenovo_fprint.zip
unzip lenovo_fprint.zip
unzip libfprint*.zip
sudo apt-get install -y ./libfprint*/libfprint*.deb
# TODO: add fingerprint login for my user account
fi
sudo apt install -y unrar
#######################
## User Applications ##
#######################
# I don't actually know which line needed me to agree to the eula but this takes care of it
echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true" | sudo debconf-set-selections
# Jekyll
sudo apt-get install -y ruby-full build-essential zlib1g-dev
echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
gem install jekyll bundler
# Visual Studio Code
sudo snap install code --classic
code --install-extension shd101wyy.markdown-preview-enhanced
code --install-extension PKief.material-icon-theme
code --install-extension Gruntfuggly.todo-tree
code --install-extension slevesque.vscode-zipexplorer
code --install-extension eamodio.gitlens
# Manual step:
# - right click and "Hide Commit Graph" button
# - right click on gitlens tab and "Hide 'GitLens'"
code --install-extension mhutchie.git-graph
code --install-extension ms-python.python
code --install-extension ms-toolsai.jupyter
code --install-extension ms-vscode.cpptools-extension-pack
code --install-extension cschlosser.doxdocgen
code --install-extension marus25.cortex-debug
code --install-extension ms-vscode.vscode-embedded-tools
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-vscode-remote.remote-containers
code --install-extension ms-vscode-remote.remote-ssh
# code --install-extension efbenson.scad # deprecated in favor of Antyos.openscad
code --install-extension Antyos.openscad
code --install-extension Leathong.openscad-language-support
code --install-extension slevesque.vscode-3dviewer # this kinda sucks but there aren't many alternatives
code --install-extension hediet.vscode-drawio
code --install-extension nopeslide.vscode-drawio-plugin-wavedrom
code --install-extension tamasfe.even-better-toml
code --install-extension mshr-h.veriloghdl
code --install-extension appliedengdesign.vscode-gcode-syntax
code --install-extension ZixuanWang.linkerscript
code --install-extension rust-lang.rust-analyzer
code --install-extension vadimcn.vscode-lldb # needed for rust debug
code --install-extension probe-rs.probe-rs-debugger
code --install-extension YuTengjing.open-in-external-app
code --install-extension janisdd.vscode-edit-csv
code --install-extension GitLab.gitlab-workflow
# Manual step: setup of API key
code --install-extension tomoki1207.pdf
code --install-extension cweijan.vscode-office
code --install-extension ms-python.black-formatter
code --install-extension charliermarsh.ruff
code --install-extension Perkovec.emoji
code --install-extension ms-dotnettools.csdevkit
cat << EOF > ~/.config/Code/User/keybindings.json
// Place your key bindings in this file to override the defaults
[
{
"key": "alt+left",
"command": "workbench.action.navigateBack",
"when": "canNavigateBack"
},
{
"key": "alt+right",
"command": "workbench.action.navigateForward",
"when": "canNavigateForward"
},
]
EOF
cat << EOF > ~/.config/Code/User/settings.json
{
"editor.formatOnSave": true,
"editor.trimAutoWhitespace": true,
"editor.renderWhitespace": "all",
"editor.rulers": [
88,
120
],
"git.autofetch": true,
"git.confirmSync": false,
"gitlens.showWelcomeOnInstall": false,
"gitlens.showWhatsNewAfterUpgrades": false,
"gitlens.plusFeatures.enabled": false,
"black-formatter.importStrategy": "fromEnvironment",
"python.languageServer": "Pylance",
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
},
"3dviewer.wireframe": true,
"workbench.editorAssociations": {
"*.md": "default",
"*.png": "imagePreview.previewEditor",
"*.jpg": "imagePreview.previewEditor",
"*.jpeg": "imagePreview.previewEditor",
},
"hediet.vscode-drawio.resizeImages": null,
"verilog.linting.linter": "iverilog",
}
EOF
# add "Open in Code" to Nautilus context menu
wget -qO- https://raw.githubusercontent.com/harry-cpp/code-nautilus/master/install.sh | bash
sudo apt-get install -y arduino
usermod -a -G dialout $USER
# Media stuff
sudo snap install spotify
sudo snap install vlc
sudo apt-get install -y gimp inkscape darktable
# Signal messenger
wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg
cat signal-desktop-keyring.gpg | sudo tee -a /usr/share/keyrings/signal-desktop-keyring.gpg > /dev/null
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' | sudo tee -a /etc/apt/sources.list.d/signal-xenial.list
sudo apt-get update && sudo apt-get install -y signal-desktop
# Discord
wget "https://discord.com/api/download?platform=linux&format=deb" -O discord.deb
sudo apt-get install -y ./discord.deb
# KiCad
sudo add-apt-repository --yes ppa:kicad/kicad-8.0-releases
sudo apt-get update
sudo apt-get install --install-recommends -y kicad
sudo add-apt-repository --yes ppa:kicad/kicad-dev-nightly
sudo apt-get update
sudo apt-get install -y kicad-nightly
sudo apt-get install flatpak
# KiCad stable
flatpak install --from https://flathub.org/repo/appstream/org.kicad.KiCad.flatpakref
# KiCad testing
flatpak install --from https://flathub.org/beta-repo/appstream/org.kicad.KiCad.flatpakref
# flatpak run org.kicad.KiCad//stable
# flatpak run org.kicad.KiCad//beta
# KiBot
wget https://set-soft.github.io/debian/kibot.list
sudo mv kibot.list /etc/apt/sources.list.d/
wget https://set-soft.github.io/debian/kibot.gpg
sudo mv kibot.gpg /etc/apt/
sudo apt-get update
sudo apt-get install -y kibot
# Visual diff for kicad
# TODO: KIRI requires "ENTER to continue"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/leoheck/kiri/main/install_dependencies.sh)"
bash -c "INSTALL_KIRI_REMOTELLY=1; $(curl -fsSL https://raw.githubusercontent.com/leoheck/kiri/main/install_kiri.sh)"
echo '
# Kiri environment setup
eval $(opam env)
export KIRI_HOME="/home/$USER/.local/share/kiri"
export PATH=${KIRI_HOME}/submodules/KiCad-Diff/bin:${PATH}
export PATH=${KIRI_HOME}/bin:${PATH}' >> ~/.bashrc
# MCAD
sudo apt-get install -y openscad
sudo apt-get install -y freecad
sudo add-apt-repository -y ppa:iacobs/cnc
sudo apt-get update
sudo apt-get install -y python3-opencamlib
sudo add-apt-repository ppa:freecad-maintainers/freecad-daily
sudo apt update
sudo apt-get add freecad-daily
freecad-daily
# MANUAL STEP: tools -> addon manager -> install CfdOF
sudo apt install openfoam-default
sudo apt-get install paraview
# MANUAL STEP finish setting this up from within freecad. See this reference:
# https://github.com/jaheyns/CfdOF?tab=readme-ov-file#docker-on-linux
# # MANUAL STEP: download paraview:
# # https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v5.13&type=binary&os=Linux&downloadFile=ParaView-5.13.0-MPI-Linux-Python3.10-x86_64.tar.gz
# tar -xzvf ParaView-*x86_64.tar.gz
# sudo mv ParaView-*x86_64 /opt/
# echo -e "\nexport PATH=\$PATH:/opt/$(ls /opt/ | grep ParaView)/bin\n" >> ~/.bashrc
# wget -O cfmesh-cfdof.zip https://sourceforge.net/projects/cfmesh-cfdof/files/latest/download
# unzip cfmesh-cfdof.zip
# sudo mv cfmesh-cfdof /opt/
# 3D printing
wget https://cdn.prusa3d.com/downloads/drivers/prusa3d_linux_2_7_2.zip
unzip prusa3d_linux*.zip
AppImageLauncher PrusaSlicer*linux-x64-GTK3*.AppImage
git clone git@gitlab.com:brendanhaines/3dprinting.git ~/.config/PrusaSlicer/
# Virtual Machines
sudo apt-get install -y virtualbox
# TODO: automatically install my base machines
sudo apt-get install -y texlive texlive-xetex pandoc
sudo apt-get install -y pdftk # NOTE: may want to replace with pdftk-java soon?
# balenaEtcher bootable disk creator
curl -1sLf 'https://dl.cloudsmith.io/public/balena/etcher/setup.deb.sh' | sudo -E bash
sudo apt-get update
sudo apt-get install -y balena-etcher-electron
# Raspberry Pi boot disk creator
sudo apt-get install -y rpi-imager
# Torrent client - transmission is installed by default
sudo apt-get install -y deluge
# Zoom Video Conferencing
# From https://cuboulder.zoom.us/download
wget https://cuboulder.zoom.us/client/latest/zoom_amd64.deb
sudo apt-get install -y ./zoom_*.deb
## TP-Link network gear control
#wget https://static.tp-link.com/upload/software/2022/202207/20220729/Omada_SDN_Controller_v5.4.6_Linux_x64.deb
## Was unable to install due to the following missing dependencies:
## - mongodb-server
## - mongodb-10gen
## - mongodb-org-server
## sudo apt-get install -y ./Omada_SDN_Controller_v5.4.6_Linux_x64.deb
# Open source lab equipment automation
sudo apt-get install -y sigrok
# Saleae Logic
wget --content-disposition https://logic2api.saleae.com/download?os=linux
wget https://downloads.saleae.com/logic/1.2.40/Logic-1.2.40-Linux.AppImage
mv ./Logic*.AppImage ~/Applications/
# AppImageLauncher must be run to discover new AppImages
AppImageLauncher ~/Applications/Logic-2*.AppImage & # This window can be closed immediately
#cat /tmp/.mount_Logic-3YFrms/resources/linux/99-SaleaeLogic.rules | sudo tee /etc/udev/rules.d/99-SaleaeLogic.rules > /dev/null && echo "finished installing /etc/udev/rules.d/99-SaleaeLogic.rules"
# OpenRocket simulator
wget https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.AppImage
mv OpenRocket-*.AppImage ~/Applications/
AppImageLauncher ~/Applications/OpenRocket-*.AppImage
# Digilent waveforms
wget https://digilent.s3-us-west-2.amazonaws.com/Software/Adept2+Runtime/2.27.9/digilent.adept.runtime_2.27.9-amd64.deb
sudo apt-get install -y ./digilent.adept.runtime*.deb
wget https://s3-us-west-2.amazonaws.com/digilent/Software/Waveforms2015/3.22.2/digilent.waveforms_3.22.2_amd64.deb
sudo apt-get install -y ./digilent.waveforms*.deb
# For new versions see:
# https://mautic.digilentinc.com/adept-runtime-download
# https://digilent.com/shop/software/digilent-waveforms/download
# Picoscope oscilloscope
wget -O - https://labs.picotech.com/Release.gpg.key | sudo apt-key add -
sudo bash -c 'echo "deb https://labs.picotech.com/rc/picoscope7/debian/ picoscope main" >/etc/apt/sources.list.d/picoscope7.list'
sudo apt-get update
sudo apt-get install -y picoscope
# ADI Pluto SDR
sudo apt-get install -y libiio-dev
pip3 install pylibiio pyadi-iio
# OpenTX Radio Companion (RC controller)
wget https://downloads.open-tx.org/2.3/release/companion/linux/companion23_2.3.14_amd64.deb
sudo apt-get install -y ./companion23*.deb
wget http://downloads.open-tx.org/tools/dfu-util-0.7_0.7-1~precise_amd64.deb
sudo apt-get install -y ./dfu-util*.deb
# Git status indicators
# https://github.com/chrisjbillington/git-nautilus-icons
sudo apt-get install -y python3-gi python3-nautilus
pip3 install --user git-nautilus-icons
killall nautilus
# Act runner
wget -qO act.tar.gz https://github.com/nektos/act/releases/latest/download/act_Linux_x86_64.tar.gz
sudo tar xf act.tar.gz -C /usr/local/bin act
# Bitwarden
sudo snap install bitwarden
# Steam
wget --content-disposition https://cdn.akamai.steamstatic.com/client/installer/steam.deb
sudo apt-get install -y ./steam*.deb
# TODO: this requires an ENTER to continue and creates a new terminal
wget https://launcher.mojang.com/download/Minecraft.deb
sudo apt-get install -y ./Minecraft.deb
# 3D rendering and animation
sudo snap install blender --classic
# brltty breaks CH340 USB-UART adapters
# see https://askubuntu.com/questions/1403705/dev-ttyusb0-not-present-in-ubuntu-22-04
sudo apt-get remove -y brltty
# allow access to /dev/ttyUSB* without sudo
sudo usermod -a -G dialout $USER
# Wireshark
# https://askubuntu.com/questions/1275842/install-wireshark-without-confirm
echo "wireshark-common wireshark-common/install-setuid boolean false" | sudo debconf-set-selections
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y wireshark
sudo groupadd wireshark
sudo usermod -a -G wireshark $USER
# Android development
# needed for 64b machines
sudo apt-get install -y libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
# latest version of android studio can be found at: https://developer.android.com/studio/
wget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2023.3.1.18/android-studio-2023.3.1.18-linux.tar.gz
tar -xvzf android-studio-*-linux.tar.gz
sudo mv android-studio /opt/android-studio
# TODO: finish install manually
/opt/android-studio/bin/studio.sh
# Prevent sleeping
sudo apt-get install -y caffeine
mkdir -p ~/.config/autostart/
cp /usr/share/applications/caffeine-indicator.desktop ~/.config/autostart/
# Serial terminal
sudo snap install tio --classic
# Split images into multiple pages for printing posters
sudo apt-get install -y posterazor
# Web automation/scraping
sudo apt-get install -y chromium-browser chromium-chromedriver
cargo install geckodriver
# File transfer
sudo apt-get install -y filezilla
# Video editor
sudo apt-get install -y shotcut
# Element (matrix client)
sudo apt-get install -y wget apt-transport-https
sudo wget -O /usr/share/keyrings/element-io-archive-keyring.gpg https://packages.element.io/debian/element-io-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/element-io-archive-keyring.gpg] https://packages.element.io/debian/ default main" | sudo tee /etc/apt/sources.list.d/element-io.list
sudo apt-get update
sudo apt-get install -y element-desktop
# Joplin
wget https://github.com/laurent22/joplin/releases/download/v2.9.17/Joplin-2.9.17.AppImage
echo "https://webdav.brendanhaines.com/joplin" | xclip -sel clip
AppImageLauncher Joplin-*.AppImage &
# CHIRP (handheld radio programmer)
# TODO: automatically grab latest version from https://trac.chirp.danplanet.com/download?stream=next
sudo apt install -y git python3-wxgtk4.0 python3-serial python3-six python3-future python3-requests python3-pip
wget https://trac.chirp.danplanet.com/chirp_next/next-20230219/chirp-20230219.tar.gz
# TODO: get this to work with pipx?
# pipx install ./chirp-*.tar.gz
pip3 install ./chirp-*.tar.gz
# Ebooks
# sudo apt-get install -y calibre
sudo apt-get install -y sqlite3
# Printer
lpadmin -p "m118dw.brendanhaines.com" -D "HP LaserJet Pro M118dw" -L "Home Office" -m everywhere -v "ipp://m118dw.brendanhaines.com" # add printer
lpadmin -d "m118dw.brendanhaines.com" # set default printer
#################
## PREFERENCES ##
#################
# Shotwell image library
gsettings set org.yorba.shotwell.preferences.files import-dir "/home/$USER/Pictures"
gsettings set org.yorba.shotwell.preferences.files directory-pattern '%Y/%m/%d'
gsettings set org.yorba.shotwell.preferences.files auto-import true
gsettings set org.yorba.shotwell.preferences.files commit-metadata true
gsettings set org.yorba.shotwell.preferences.editing external-photo-editor 'gimp %U' # this is a symlink to latest version of gimp
gsettings set org.yorba.shotwell.preferences.editing external-raw-editor 'darktable %U'
gsettings set org.yorba.shotwell.plugins.enable-state publishing-flickr false
gsettings set org.yorba.shotwell.plugins.enable-state publishing-youtube false
sudo apt-get install -y gnome-tweaks
cat << EOF
MANUAL STEP: gnome settings
default applications-> video: VLC
EOF
gnome-control-center default-apps
read -n 1 -p "Press any key to continue..."
# Set gedit color scheme before setting dark mode to avoid unreadable text
gsettings set org.gnome.gedit.preferences.editor scheme 'Yaru-dark'
# dark mode
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-dark'
# <Super>e to launch nautilus
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name "Files"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command "nautilus"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding "<Super>e"
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
# Automatic night light
gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled true
gsettings set org.gnome.settings-daemon.plugins.color night-light-schedule-automatic true
# clock style
gsettings set org.gnome.desktop.interface clock-show-weekday false
gsettings set org.gnome.desktop.interface clock-format "24h"
# sound
gsettings set org.gnome.desktop.sound allow-volume-above-100-percent true
# privacy
gsettings set org.gnome.desktop.privacy remove-old-temp-files true
gsettings set org.gnome.desktop.privacy remove-old-trash-files true
gsettings set org.gnome.desktop.privacy old-files-age 30
# indicators
gsettings set org.gnome.desktop.interface show-battery-percentage true
# TODO: I think I need to do more than add these to this list
#gsettings set org.gnome.shell enabled-extensions "['user-theme@gnome-shell-extensions.gcampax.github.com', 'launch-new-instance@gnome-shell-extensions.gcampax.github.com', 'Resource_Monitor@Ory0n']"
# hidden file visibility
gsettings set org.gtk.gtk4.Settings.FileChooser show-hidden false
gsettings set org.gnome.nautilus.preferences show-hidden-files true
# hide desktop icons
gsettings set org.gnome.shell.extensions.ding show-home false
# terminal colors (previously was manual)
# colors: Tango dark, Tango palette, show bold text in bright colors
# b1dcc9dd-5262-4d8d-a863-c897e6d979b9 appears to always be the default profile.
# gsettings get org.gnome.Terminal.ProfilesList default # this will retreive the default profile if this id ever changes
# https://www.growingwiththeweb.com/2015/05/colours-in-gnome-terminal.html
# Tango Dark colors
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/background-color "'rgb(46,52,54)'"
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/foreground-color "'rgb(211,215,207)'"
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/palette "['rgb(46,52,54)', 'rgb(204,0,0)', 'rgb(78,154,6)', 'rgb(196,160,0)', 'rgb(52,101,164)', 'rgb(117,80,123)', 'rgb(6,152,154)', 'rgb(211,215,207)', 'rgb(85,87,83)', 'rgb(239,41,41)', 'rgb(138,226,52)', 'rgb(252,233,79)', 'rgb(114,159,207)', 'rgb(173,127,168)', 'rgb(52,226,226)', 'rgb(238,238,236)']"
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/bold-is-bright true
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/use-theme-colors false
# Eliminate excess favorites on the sidebar
gsettings get org.gnome.shell favorite-apps ['org.gnome.Nautilus.desktop', 'org.gnome.Terminal.desktop', 'brave-browser.desktop', 'code_code.desktop', 'org.kicad.kicad.desktop', 'spotify_spotify.desktop']
# Create bookmarks in Nautilus
echo "file:///home/$USER/Documents/projects" >> ~/.config/gtk-3.0/bookmarks
echo "smb://nas.brendanhaines.com/ nas.brendanhaines.com" >> ~/.config/gtk-3.0/bookmarks
sudo apt-get install -y gnome-shell-extensions
brave-browser https://extensions.gnome.org/extension/19/user-themes/
brave-browser https://extensions.gnome.org/extension/600/launch-new-instance/
brave-browser https://extensions.gnome.org/extension/1634/resource-monitor/
cat << EOF
MANUAL STEP: resource monitor extension settings (right click)
cpu -> width=40
ram -> width=40
swap -> width=40
disk off (both stats and space)
net -> auto-hide=false, width=80 each
thermal -> off if not getting valid temperatures
EOF
read -n 1 -p "Press any key to continue..."
# TODO: manual step
# settings->applications->remmina->enable "inhibit system keyboard shortcuts"
echo "ALL DONE!"
cd ..
read -n 1 -p "Press ENTER to erase temporary files, <Ctrl>c to keep..." # TODO: actually abort on CTRL+C
rm -r temp_install
sudo snap install node --classic
sudo npm i -g @immich/cli