Skip to content

Latest commit

 

History

History

mint-cinnamon

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Mint: Cinnamon

This setup is for creative/development tasks. Before blindly installing everything listed, go over the Software Details sections to see if the software could be useful.


Pre-Install

I use Ventoy to install my distros, so just download the distro and drop it in the designated isos folder on your formatted USB drive.

Issue: Ventoy won't boot Solution: In order to allow Ventoy to load, you'll have to disable Secure Boot in the Bios. In some cases, to change the Secure Boot setting, you'll need to set a supervisor password. Once the password is set the Secure Boot option will no longer be grayed out and can be disabled.

Issue: Can't install Linux due to RST being enabled Solution: Go into the Bios. Location may vary, for me I found it under Main > Sata Mode > Changed it from RST Premium with Optane to AHCI.


Install

  1. Once the distro boots into it's live environment, double-click the Install item that should be on the Desktop.
  2. Choose the option to Erase disk, which should then ask you to choose the file system. I chose ZFS.
  3. The next screen prompts to choose the disk to install to. I want to dual-boot Windows and Linux and am installing Linux to a freshly installed unformatted drive.

Initial Boot

There's a splash screen that can hide potential issues during boot, so disable it while settings things up.

sudo vi /etc/default/grub
# Replace `splash` in GRUB_CMDLINE_LINUX_DEFAULT with `nosplash`

sudo update-grub

Set Up Display

I've had mixed results with Driver Manager (for installing the video driver), so this is the manual way of doing what it does.

  • Check what video driver is currently being used

    lspci -k | grep -EA3 'VGA|3D|Display' | grep 'Kernel driver in use'
    # Should output a line with `nouveau` or `nvidia`.

    If using an nvidia driver, you can find the version with

    cat /proc/driver/nvidia/version | grep -E 'Kernel Module  [0-9]+'
    # or
    nvidia-smi | grep -E 'Driver Version: [0-9]+'
    
    # Should output a line with a highlighted number, which is the major version.
  • List available drivers to install

    ubuntu-drivers devices | grep 'driver  ' | grep -v '-server - '
    # Should output lines like
    # driver   : nvidia-driver-<VERSION> - distro non-free recommended
    # driver   : nvidia-driver-<VERSION> - distro non-free
    # --
    # driver   : xserver-xorg-video-nouveau - distro free builtin

    Generally use the recommended driver, then try the versions below it if you have issues.

  • Install the driver

    sudo apt install <DRIVER>
    # <DRIVER> being something like `nvidia-driver-450` or `xserver-xorg-video-nouveau`

    If you want to uninstall a driver

    sudo apt remove nvidia-driver-<VERSION> && sudo apt autoremove


If you have multiple monitors, launch Display

  • Select your main monitor and toggle it to Set as Primary if it isn't already set.
  • Set the Rotation of other monitors if they're rotated.
  • Drag monitors roughly into the correct positions.
  • Apply, keep changes, rinse-and-repeat while adjusting monitor positions.
  • Under Settings I also unchecked Enable fractional scaling controls. Not sure if it was actually hurting anything, but I disabled at during some troubleshooting and things have been stable so it stays off for now.

Notes:

  • If you have a dock that has one monitor hooked up, and another monitor is hooked up to a laptop, you may want to stick with the nouveau driver. It's the only one that's given me stable performance with a second monitor (via a dock).

Installing / Updating the Kernel

I usually handle the kernel update via the Update Manager. Just be careful not to reboot before recompiling the NVidia modules (if you're using an NVidia video driver).

The theory is that after a kernel upgrade the new kernel is not active before the system is rebooted. To recompile the nvidia modules the new kernel needs to be active so this hasn’t been done as part of the upgrade process. So when one reboots after a kernel upgrade, the nvidia module is not able to communicate with the kernel (which usually leads to a user not being able to boot to the Desktop). The solution is to simply upgrade the linux-headers-<VERSION> which will automatically trigger a recompile of the nvidia kernels. sh sudo apt -y install "linux-headers-$(uname -r)"

The drivers should start working again even without a reboot.
```sh
# list installed driver
dkms status
# <ndvidia_driver_ver>, <kernel_ver>
```

System Tweaks

  • There's a limit of 15 characters for the hostname for netbios. You can run testparm -s to see if your hostname length is ok (when it's not you'll see WARNING: The 'netbios name' is too long).
    hostnamectl set-hostname '<NEW_NAME>'

Create Common Directories

mkdir -v -p ~/{.ssh,Downloads/{archives,debs},Projects/{3D,Code/{Apps,Games,Gists,Scripts},Img,Vid},Software} && chmod 700 ~/.ssh

Don't Require Password for Sudo

echo "${USER} ALL = NOPASSWD: ALL" | (sudo EDITOR='tee -a' visudo)

Install Base Software

sudo add-apt-repository -y ppa:git-core/ppa
sudo apt update && sudo apt install -y apt-transport-https git tilix vim
Expand for Software Details
Package Description
apt-transport-https Allows the use of repositories accessed via the HTTP Secure protocol (HTTPS), also referred to as HTTP over TLS
git Version control
tilix A tiling terminal emulator for Linux using GTK+ 3
vim Configurable text editor for CLI
Expand for Git Settings
# Only required if you plan to push changes to a repo
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

# Create key for github (if you don't already have one)
ssh-keygen -t ed25519 -C "<IDENTIFYING_COMMENT>" -f ~/.ssh/github
# print out key so it can be copied
cat ~/.ssh/github.pub

Add new key to https://github.com/settings/keys

Expand for Tilix Settings

Open Preferred Applications and change Terminal to Tilix.

To fix the warning you get when you open Preferences:

  • In your .bashrc or .zshrc file add
    if [ $TILIX_ID ] || [ $VTE_VERSION ]; then
      source /etc/profile.d/vte.sh
    fi
  • If /etc/profile.d/vte.sh doesn't exist run:
    sudo ln -s /etc/profile.d/vte-2.91.sh /etc/profile.d/vte.sh

Open Tilix Preferences

┎────────┒
┃ Global ┃
┖────────┚
  (check) Save and restore window state
  (check) Automatically copy text to clipboard when selecting

┎────────────┒
┃ Appearance ┃
┖────────────┚
  Theme variant: Dark

┎──────────────────────┒
┃ Shortcuts > Terminal ┃
┖──────────────────────┚
  Paste: Ctrl+V
  
┎────────────────────────────┒
┃ Profiles > Default > Color ┃
┖────────────────────────────┚
  (uncheck) Use theme colors for foreground/background
  Unfocused dim: 50%
Expand for Vim Settings
wget https://raw.githubusercontent.com/the0neWhoKnocks/setup.linux/main/distro/mint-cinnamon/files/.vimrc -P ~/

[ Optional ] Expand for DisplayLink Install (for Targus dock)

There are issues syncing monitors with DisplayLink on Linux especially when using Nvidia drivers.

# Download and install DisplayLink driver
wget https://cdn.targus.com/web/us/downloads/DisplayLink%20USB%20Graphics%20Software%20for%20Ubuntu.zip -O ~/Downloads/driver__Targus_USB_DisplayLink.zip
unzip ~/Downloads/driver__Targus_USB_DisplayLink.zip -d ~/Downloads/Targus/
# Install deps
sudo apt install dkms
# The next step will prompt for a restart, skip it.
sudo ~/Downloads/Targus/displaylink-driver-*.run
# Patch udev entry, otherwise the system will freeze during boot
sudo vim /opt/displaylink/udev.sh
# find the `start_service` function around line 104, and change to:
- systemctl start displaylink-driver
+ systemctl start --no-block displaylink-driver

# save and exit
# Clean-up
rm -rf ~/Downloads/Targus
# reboot and verify things work
sudo reboot

If you want to remove displaylink, run:

sudo displaylink-installer uninstall

I ran into an issue where the system would freeze at the boot logo if the dock's USB was plugged in (only after the driver was installed). With the USB unplugged everything was fine. During boot I noticed it was hanging on the udev service. I ran ls -la /etc/udev/rules.d/ and the only rule in there was 99-displaylink.rules which was executing /opt/displaylink/udev.sh. I came across a few posts to fix the freeze during boot:


Clone This Repo

This is only required if you want to use the helper scripts.

cd ~/Projects/Code/Scripts && git clone git@github.com:the0neWhoKnocks/setup.linux.git && cd setup.linux/distro/mint-cinnamon

Set Up Shell

Install oh-my-zsh, plugins, and my custom theme (requires this step)

./bin/set-up-zsh.sh
Expand for Extra Tilix Settings

Print out colors to be manually added. Not needed if you have a dconf backup.

cat ~/.oh-my-zsh/custom/themes/zsh-theme-boom/colors.sh

Open Tilix Preferences

┎────────────────────┒
┃ Profiles > Default ┃
┖────────────────────┚
  ┎─────────┒
  ┃ General ┃
  ┖─────────┚
    (check) Custom font: FantasqueSansMono NF Regular 16

  ┎───────┒
  ┃ Color ┃
  ┖───────┚
    (updated colors to match my zsh theme)

Set Up Repos

I have a private gist that contains a shell script with all the git clone commands so I don't have to deal with finding all the repo URLs and remembering where everything should be cloned to.


Set Up Shares

Only required if you need access to a network share.

This an on-demand approach, like for a laptop that may not always be on your network. (requires this step)

(
  cd ./bin
  ./user-script.sh --install "${PWD}/lan-shares.sh" "LAN Shares" "Utility to mount or unmount network shares" "drive-multidisk" "-gui"
)
  • Run the new Launcher that was added to the Desktop
    • Configure the settings for the share.
      • The mounted folder needs to be in /media, or it won't be automatically detected.

Install Software

Here are some sources for finding alternatives to software you may have used on other OS's:

Via Software Manager or CLI

(
  sudo add-apt-repository -y ppa:alex-p/aegisub
  sudo add-apt-repository -y ppa:danielrichter2007/grub-customizer
  sudo add-apt-repository -y ppa:kdenlive/kdenlive-stable
  sudo apt-add-repository -y ppa:lucioc/sayonara
  sudo apt-add-repository -y ppa:remmina-ppa-team/remmina-next
  sudo add-apt-repository -y ppa:ubuntuhandbook1/handbrake
  sudo apt-add-repository -y multiverse
  sudo apt update
  sudo apt install -y aegisub cairo-dock cairo-dock-gnome-integration-plug-in cheese chromium dconf-editor flameshot git git-gui grsync grub-customizer guvcview handbrake hydrapaper inkscape kdenlive kid3-qt libnss3-tools lolcat meld mkvtoolnix-gui okular p7zip-full peek python-is-python3 python3-notify2 remmina remmina-plugin-rdp remmina-plugin-secret remmina-plugin-vnc sayonara solaar soundconverter steam sticky vlc xclip xserver-xorg-input-synaptics
  # remove some stuff that gets installed that I don't need
  sudo apt remove hypnotix kwalletmanager
)

These require a User to answer prompts

sudo apt install sddm sddm-theme-breeze ttf-mscorefonts-installer wireshark

Optional

sudo apt install -y figlet obs-studio pavucontrol plasma-sdk
Expand for Software Details

PPA's can be found a couple of ways:

  1. https://launchpad.net/ubuntu/+ppas
  2. Or go to https://launchpad.net/PACKAGE_NAME, like https://launchpad.net/grub-customizer.
    • Click on the Maintainer's link
    • See if there's a Personal package archives section. If there is look for your package and click on the link.
    • I then look through the dates for the Overview of published packages section, to see if it's an up-to-date package and being maintained.
Package Description
aegisub Subtitle editor
cairo-dock Customizable icon dock
cairo-dock-gnome-integration-plug-in GNOME integration plug-in for Cairo-dock. Needed for things like emptying trash
cheese Allows you to take photos and videos with your webcam.
chromium Browser without all the Chrome overhead
dconf-editor Tool to allow direct editing of the dconf configuration database. Sometimes allows for changing low-level settings not exposed in most GUIs.
flameshot Swiss army knife of screenshot tools
git-gui Handy when wanting to do per-line commit-staging
grsync A simple GUI for the rsync
grub-customizer Easily change and compile grub config
guvcview Capture images or video with webcam. (It's the only thing I've found that gives the option to mirror video)
handbrake Tool for converting video from nearly any format to a selection of modern, widely supported codecs
hydrapaper Allows for different images on multiple monitors
inkscape Tool to create vector images (Adobe Illustrator alternative)
kdenlive Video editor
kid3-qt Audio tag editor (TagScanner alternative)
libnss3-tools Network Security Service tools (installs certutil which I use to install certs for Browsers)
lolcat Add rainbow colors to text in CLI
meld Visual fill diff tool
mkvtoolnix-gui A set of tools to create, alter and inspect Matroska (mkv) & WebM files
okular Universal document viewer (PDFs, etc.)
p7zip-full Adds 7zip binaries for CLI
peek Simple screen recorder with an easy to use interface. Captures a specific parts of the screen, and can output '.apng', '.gif', '.mp4', and '.webm'
python-is-python3 This ensures the symlink for python3 to python stays up to date during updates.
python3-notify2 Send Desktop notifications via Python
remmina Remote Desktop client
sayonara Music player
sddm A modern display manager for X11 and Wayland. ( Alternate DM than the default lightdm)
sddm-theme-breeze Clean centered theme with avatar
solaar Logitech unifying reciever peripherals manager for Linux
soundconverter Converter for audio files
sticky Post-it note app for your Desktop
Steam PC Gaming platform
ttf-mscorefonts-installer Installer for Microsoft TrueType core fonts. Needed to display fonts properly in browsers
vlc Multimedia player
wireshark (meta-package) Network traffic sniffer
xclip Copy from CLI to clipboard
xserver-xorg-input-synaptics Enables smooth/inertial/kinetic scroll for touchpads on long documents/webpages (requires reboot)
Package Description
figlet Generate text banners for CLI
obs-studio (non-flatpak) Record or stream video
pavucontrol PulseAudio Volume Control
plasma-sdk Applications useful for Plasma development. I use it for Cuttlefish (an icon viewer)
sqlitebrowser A GUI based SQL toolkit
Expand for Tweaks

Webcam apps may require a system reboot for them to work correctly.

Expand for kdenlive Settings
[ Environment ]
  
  [ MLT env ]
    (make sure paths point to current binaries (Melt was pointing to old path))
  
  [ Default Apps ]
    Image editing: /var/lib/flatpak/app/org.gimp.GIMP/current/active/export/bin/org.gimp.GIMP
    Audio editing: /usr/bin/audacity
    Animation editing: /usr/bin/glaxnimate
Expand for Steam settings
  1. Open Steam.
  2. Settings > Interface.
  3. On the "Interface" tab, find Client Beta Participation. There should be a dropdown menu with no beta chosen as the default option.
  4. Select the dropdown menu and select the Steam Beta Update option.
  5. Restart Steam.
  6. Settings > Compatibility.
    [X] Enable Steam Play for supported titles
    [X] Enable Steam Play for all other titles
    Run other titles with: Proton Experimental
    

Via Flatpak

flatpak install flathub codes.merritt.FeelingFinder org.gimp.GIMP org.gimp.GIMP.Plugin.GMic org.gimp.GIMP.Plugin.LiquidRescale org.gimp.GIMP.Plugin.Resynthesizer
Expand for Software Details

List what's currently installed flatpak list.

Search for packages with flatpak search <PACKAGE>, like flatpak search org.gimp.GIMP.Plugin.

bin path for apps: /var/lib/flatpak/exports/bin.

Package Software Description
codes.merritt.FeelingFinder Feeling Finder Emoji picker
hu.irl.cameractrls Camera Ctrls Logi Tune alt for adjusting settings in Web apps
org.gimp.GIMP GIMP Image editor (alternative to Adobe Photoshop)
org.gimp.GIMP.Plugin.GMic G'MIC A large set of filters
org.gimp.GIMP.Plugin.LiquidRescale LiquidRescale Scale an image, but don't scale selected items
org.gimp.GIMP.Plugin.Resynthesizer Resynthesizer Content-aware removal of selected items
Expand for GIMP Tweaks
Software Description
PhotoGIMP Makes GIMP look like Photoshop
(
  mv ~/.config/GIMP/2.10 ~/.config/GIMP/2.10.bak
  wget "https://github.com/Diolinux/PhotoGIMP/releases/download/1.1/PhotoGIMP.by.Diolinux.v2020.1.for.Flatpak.zip" -O ~/Downloads/archives/PhotoGIMP_v2020.1.zip
  unzip ~/Downloads/archives/PhotoGIMP_v2020.1.zip -d ~/Downloads/archives/
  cd ~/Downloads/archives/PhotoGIMP.by.Diolinux.v2020.1.for.Flatpak
  rsync -r ./.local/share/applications/ ~/.local/share/applications/
  rsync --mkpath -r ./.local/share/icons/hicolor/ ~/.local/share/icons/hicolor/
  rsync -r ./.var/app/org.gimp.GIMP/config/GIMP/2.10 ~/.config/GIMP/
  cd ../ && rm -rf PhotoGIMP.by.Diolinux.v2020.1.for.Flatpak
)
Expand for FeelingFinder Tweaks

Dunno how they came up with that name, but it doesn't cut it when searching in an App launcher.

sudo vim /var/lib/flatpak/exports/share/applications/codes.merritt.FeelingFinder.desktop
- Name=Feeling Finder
+ Name=Emoji Picker (Feeling Finder)
+ Keywords=Emoji;Picker;

Via deb

(
  DEBS_DIR=~/Downloads/debs
  urls=(
    'https://download.opensuse.org/repositories/home:/manuelschneid3r/xUbuntu_18.04/amd64/albert_0.17.6-0_amd64.deb'
    'https://github.com/sharkdp/bat/releases/download/v0.22.1/bat_0.22.1_amd64.deb'
    'https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb'
    'https://discord.com/api/download?platform=linux&format=deb'
    'https://github.com/jgraph/drawio-desktop/releases/download/v25.0.2/drawio-amd64-25.0.2.deb'
    'https://updates.insomnia.rest/downloads/ubuntu/latest?&app=com.insomnia.app&source=website'
    'https://github.com/Peltoche/lsd/releases/download/0.23.1/lsd_0.23.1_amd64.deb'
    'https://github.com/subhra74/snowflake/releases/download/v1.0.4/snowflake-1.0.4-setup-amd64.deb'
    'https://update.code.visualstudio.com/1.73.1/linux-deb-x64/stable'
    'https://torguard.net/downloads/new/torguard-latest-amd64.deb'
    'https://gitlab.com/api/v4/projects/19921167/jobs/artifacts/release/raw/build/glaxnimate.deb?job=linux%3Adeb'
  )
  for url in "${urls[@]}"; do
    wget --content-disposition "${url}" -P "${DEBS_DIR}/"
  done
  
  sudo dpkg -i "${DEBS_DIR}/"*.deb
  sudo apt install -f -y
)
Expand for Software Details
Software Description
Albert Launcher (alternative to Wox). In the Installing page look for look for the OBS software repo link for downloads.
bat Like cat, but displays a limited amount of a file and with syntax highlighting
Chrome Browser
Discord Group text/voice/video communication
Draw.io Desktop version of the Web-App to draw flowcharts and diagrams.
Glaxnimate A simple and fast vector graphics animation program (alternative to Adobe Animate/Flash).
Insomnia API development
lsd A Deluxe version of the ls command
Snowflake SFTP Client (alternative to WinSCP)
TorGuard VPN client
VS Code IDE, advanced text editor
Expand for Chrome Tweaks

To stop making it prompt for updates:

  • Update all shortcuts and add

    --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'

    There may be a shortcut on your desktop and in /usr/share/applications/google-chrome.desktop.

    Search for Exec and add the argument to every instance. For the one that ends in %U, put it before %U.

Expand for Discord Tweaks

To make Discord not prompt for updates all the time

vim ~/.config/discord/settings.json

# add:
"SKIP_HOST_UPDATE": true
Expand for TorGuard Tweaks

For now, TorGuard requires Wireguard so install via: sudo apt install wireguard.

Via Archives

(
  ARCH_DIR=~/Downloads/archives
  urls=(
    'https://github.com/aristocratos/btop/releases/download/v1.2.13/btop-x86_64-linux-musl.tbz'
    'https://github.com/BrunoReX/jmkvpropedit/releases/download/v1.5.2/jmkvpropedit-v1.5.2.zip'
    'https://github.com/godotengine/godot/releases/download/4.0-stable/Godot_v4.0-stable_linux.x86_64.zip'
    'https://www.blender.org/download/release/Blender3.4/blender-3.4.1-linux-x64.tar.xz/'
  )
  for url in "${urls[@]}"; do
    wget --no-clobber "${url}" -P "${ARCH_DIR}/"
    file="$(basename "${url}")"
    version="$(basename $(dirname "${url}"))"
    pkg="$(echo "${file}" | awk -F '[-_]' -v name=1 '{print $name}')"
    outputPath="${HOME}/.local/bin/${pkg}/${version}/"
    mkdir -p "${outputPath}"
    
    if [[ "${file}" == *.zip ]]; then
      unzip "${ARCH_DIR}/${file}" -d "${outputPath}"
    else
      tar --strip 1 --extract --file "${ARCH_DIR}/${file}" --directory="${outputPath}"
    fi
  done
)
Expand for Software Details
Software Description
Blender 3D asset creation
btop Resource monitor that shows usage and stats for processor, memory, disks, network and processes
godot Game engine
jmkvpropedit A batch GUI for mkvpropedit. Allows for editing headers of multiple mkv files
Expand for Tweaks

Have to run the install script for btop from within the directory

(
  cd ~/.local/bin/btop/v1.2.13/btop/
  ./install.sh
)

Has to be executable to run

chmod +x ~/.local/bin/jmkvpropedit/v1.5.2/JMkvpropedit.jar
cp files/godot/godot.desktop ~/.local/share/applications/
chmod +x ~/.local/share/applications/godot.desktop
cp files/godot/godot.svg ~/.icons/
# may have to update the version path for `Exec=` in `.desktop`
cp files/blender/blender.desktop ~/.local/share/applications/
chmod +x ~/.local/share/applications/blender.desktop
cp files/blender/blender.svg ~/.icons/

Via CLI

For packages that require more than a simple apt install.

Software Description
docker Containerize environments
docker-compose Create config files for Docker containers
FreeFileSync A tool to wire up backups. Those backup configs can then be reversed to restore data.
git lfs Allows for storing large files outside of git repos.
n NodeJS version management
qemu A machine emulator and virtualizer
Docker
(
  sudo apt install ca-certificates curl gnupg lsb-release
  sudo mkdir -p /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(cat /etc/os-release | grep "UBUNTU_CODENAME" | sed "s|UBUNTU_CODENAME=||") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt update
  sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  sudo usermod -aG docker $USER
)

Verify install

systemctl is-enabled docker
systemctl status docker
sudo docker run hello-world

Notes:
The instuctions for setting up the repo are Ubuntu specific and call out lsb_release -cs which doesn't work on Mint. I created an alternative

cat /etc/os-release | grep "UBUNTU_CODENAME" | sed "s|UBUNTU_CODENAME=||"

I verified it was the correct name by going to https://download.docker.com/linux/ubuntu/dists/ to see the available names, and checking the Ubuntu releases https://wiki.ubuntu.com/Releases.

Docker Desktop now exists for Linux, but I've had issues with it:

  • Not being up-to-date
  • Trying to sell me something

docker-compose has been replaced with docker compose. The new compose spec is more universal but it also deprecates some fields.

'n' NodeJS version manager

May want to verify this hasn't changed in the repo.

curl -L https://bit.ly/n-install | bash

The script will add an export line to your .bashrc. If you use another shell, copy that line to your *rc file and source your shell. Once that's done, you can choose and install the version of NodeJS that you want.

# list available versions to download
n ls-remote
# install your preferred version
n install 18
# Check version
node -v
Qemu (Virtual Machine Manager)
(
  sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
  sudo adduser $USER libvirt && sudo adduser $USER kvm && sudo adduser $USER libvirt-qemu
)

You'll have to log out/in for it to work with your current user, but you can test with

sudo virt-manager
FreeFileSync
(
  cd "${HOME}/Downloads/archives"
  ver="13.5"
  tarFileName="FreeFileSync_${ver}_Linux.tar.gz"
  runFileName="FreeFileSync_${ver}_Install.run"
  
  if [ -f "$tarFileName" ]; then rm "$tarFileName"; fi
  if [ -f "$runFileName" ]; then rm "$runFileName"; fi
  
  curl -L -O "https://freefilesync.org/download/${tarFileName}"
  tar zxvf "$tarFileName"
  chmod +x "$runFileName"
  
  "./$runFileName"
  
  rm "$runFileName"
)
git lfs
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt install git-lfs
git lfs install

Optional

Software Description
lutris Allows for playing games on Linux. Use to install Origin
Lutris
(
  sudo add-apt-repository -y ppa:lutris-team/lutris
  sudo apt update
  sudo apt install lutris
)

Configure Software

At this point you should probably restart so things like the GPU driver and Display Manager can do their initial boot stuff. You may experience some odd boot stuff the first time around, and a second reboot may solve any quirks.

During boot you may see a bunch of lines printed in the terminal before the login screen appears. There may be some errors hidden in there. After you log in, you can check for errors by running

dmesg | grep -i "error\|warn\|fail"
Expand to view common issues and solutions
  • Issue: ACPI BIOS Error

    Expand for Solution

    Apparently this has been a known issue and can be ignored.

    sudo vim /etc/default/grub
    # Replace `quiet` in the GRUB_CMDLINE_LINUX_DEFAULT with `loglevel=3`
    
    sudo update-grub


If you have a previous backup that utilized dconf, you can restore it now which may save you some configuration time.

# Restore GNOME settings
dconf load / < ~/settings.dconf

# If you want to import keys for specific packages, the only thing I've found is to copy those sections to another `.dconf` file and run the same command above but with the new file. 

If you have any self-signed certificates that your browsers utilize, you'll need to install them now.

sudo apt-get install -y ca-certificates
sudo cp <CERT_NAME>.crt /usr/local/share/ca-certificates
sudo update-ca-certificates
  • In some cases, changes don't take effect right away and a restart may be required.
  • In some cases a restart doesn't work, for example Browsers sometimes have their own certificate area where you have to manually add a cert. For example, in Chrome you can go to Settings > search for cert > click Security > click Manage Certificates > go to Authorities and add your cert.

If you have any back-ups of your keyrings, you'll need to install those especially if any Browsers have saved credentials locally and you're bringing those profiles over.

  • After initially copying over the .local/share/keyrings files, you'll need to open up the System Monitor and kill gnome-keyring-daemon.
    • If that doesn't work, then systemctl --user stop gnome-keyring && systemctl --user start gnome-keyring.
  • Then open up Passwords and Keys and unlock the Login item. Then you can open up stuff like Chrome or anything that has locally saved passwords.

Control your monitor's temperature (limit blue light). For now redshift and redshift-gtk come pre-installed so just do the below.

# NOTE: This file could conflict with the 'qredshift' applet so just use 'Redshift'
cp -i ./files/redshift.conf ~/.config/

Launch Redshift (it starts redshift-gtk and adds it to the bottom bar). Right-click on it and check Enabled and Autostart.

Expand for Session Management

XFCE has this exposed where you can choose to save sessions and delete the ones that exist. Cinnamon has it hidden away.

Launch dconf Editor and navigate to /org/cinnamon/cinnamon-session/ toggle on the auto-save-session option.

Expand for Update Manager
[Edit > Preferences]
  [Options]
    - Uncheck "Refresh the list of updates automatically"
Expand for File Manager

I've tried dolphin, nemo, and thunar.

  • dolphin had the benefit of natural sorting which all othe managers seem to lack currently, but it's slow to load and currently doesn't allow for excluding paths from thumbnail generation.
  • nemo ships with Cinnamon but it currently suffers from thumbnail generation issues (sometimes works, sometimes doesn't, or doesn't generate thumbs for all types).
  • thunar ships with XFCE. It's snappy, allows for Custom Actions via context menus that you can easily write yourself, and allows for defining rules for thumbnail generation.

Install Thunar and dependencies

(
  sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-stable
  sudo apt update
  sudo apt install fsearch thunar thunar-archive-plugin tumbler-plugins-extra
)

Thunar uses tumbler for generating thumbnails. Most File Managers have options to not show thumbnails on network paths, but cifs mounts may not fall under that category even though they can be. This will instruct tumbler what paths to ignore in that case.

(
  # Clear any generated thumbnails
  rm -rf  ~/.cache/thumbnails/*
  # Create rc file for tumbler
  mkdir ~/.config/tumbler
  cp /etc/xdg/tumbler/tumbler.rc ~/.config/tumbler
  # Exclude specific paths from having thumbnails generated
  vi ~/.config/tumbler/tumbler.rc
)
# Find all the instances of `Excludes=` and add the paths
Excludes=<PATH1>;<PATH2>

tumblerd can't be restarted so you have to log out/in


Launch FSearch, go to:

  • Edit > Preferences
    [Database]
      (uncheck) Update database on start
      
      [Include]
        (add) /home/<USER>
    
  • Search
    (check) Search in Path
    (check) Match Case
    

Prepare custom actions:

  • You can add your own in Thunar by adding commands directly, but I prefer to use files
    mkdir -p ~/.config/Thunar/actions
  • Add your scripts (I symlink to ensure things keep in sync):
    ln -s "${PWD}/files/thunar/copy-filename.sh" ~/.config/Thunar/actions/
    ln -s "${PWD}/files/thunar/copy-full-path.sh" ~/.config/Thunar/actions/
    ln -s "${PWD}/files/thunar/open-as-root.sh" ~/.config/Thunar/actions/
    ln -s "${PWD}/files/thunar/view-metadata.py" ~/.config/Thunar/actions/
  • If you need to debug scripts, run tail -f ~/.xsession-errors, and try using your action.

Launch Thunar and go to:

  • Edit > Configure custom actions
    • Fix the Open in Terminal. Just change it's Command to tilix (or your preferred terminal).
    • Fix the Search option that ships misconfigured with catfish which doesn't get automatically installed. Double-click on it:
      [Basic]
        Command: fsearch -s %f
        Keyboard Shortcut: Ctrl+F
      
    • (click) Add a new custom action
      [Basic]
        Name: Copy Filename
        Description: Copies a file's name without it's extension
        Command: ~/.config/Thunar/actions/copy-filename.sh %f
        Icon: edit-copy
      
      [Appearance Conditions]
        (check all items)
      
    • (click) Add a new custom action
      [Basic]
        Name: Copy Full Path
        Description: Copies a file's full path
        Command: ~/.config/Thunar/actions/copy-full-path.sh %f
        Icon: edit-copy
      
      [Appearance Conditions]
        (check all items)
      
    • (click) Add a new custom action
      [Basic]
        Name: Open as Root
        Description: Open item with root privelages
        Command: ~/.config/Thunar/actions/open-as-root.sh %f
        Icon: applications-utilities (or system-run)
      
      [Appearance Conditions]
        [X] Directories
        [X] Text Files
        [X] Other Files
      
    • (click) Add a new custom action
      [Basic]
        Name: View Metadata
        Description: View metadata for a file
        Command: ~/.config/Thunar/actions/view-metadata.py %f %n
        Icon: dialog-information
      
      [Appearance Conditions]
        [X] Audio Files
        [X] Video Files
      
  • Edit > Preferences
    [Display]
      View new folders using: List View
      Show thumbnails: Local Files Only
      Date > Format: Custom, %Y-%m-%d
    
    [Behavior]
      (check) Show action to permanently delete files and folders
    
  • View
    • Location selector: Toolbar style
    • (check) Show Hidden Files
  • You may have to change the current view to Compact View. Then I CTRL++ or CTRL+- to get the icons and text to a size I like.
Expand for System Settings
[Appearance]
  
  [Backgrounds]
    [Images]
      Vera > Sparkling
  
  [Font Selection]
    Default font: Ubuntu Regular 12
    Desktop font: Ubuntu Bold 12
    Document font: Sans Regular 12
    Monospace font: Monospace Regular 12
    Window title font: Ubuntu Medium 12
    Text scaling factor: 1.0

  [Themes]
    [Themes]
      Mouse Pointer: Bibata-Modern-Classic
      Applications: Mint-Y-Dark-Aqua
      Icons: Mint-L-Aqua
      Desktop: Mint-L-Dark-Aqua
      
    [Settings]
      Jump to position when clicking in a trough: (checked)

──────────────────────────────────────────────────────────────────────────────

[Preferences]
  
  [Accessibility]
    [Keyboard]
      Use visual indicator on Caps and Num Lock (check) (if you don't want to use the 'betterlock' applet)

  [Account Details]
    Picture: (choose avatar)
    Name: (change to a preferred display name)

  [Applets]
    [Download]
      CinnVIIStartMenu
      Lock keys indicator with notifications (betterlock)
      Weather
    
    [Manage]
      (select and Add the downloaded items)
      
      [Calendar]
        Use a custom date format: (checked)
        Date format: 【 %a.  %b. %e 】【%l: %M %p 】
      
      [CinnVIIStartMenu] (disable the Menu applet, and replace it with this by going into 'Panel edit mode' in the taskbar)
        [Menu]
          Menu layout: MATE-Menu
        
        [Panel]
          Use a custom icon and label: (checked)
          Icon: linuxmint-logo-simple-symbolic
          Text: enu
        
        [Sidebar]
          Separator below user account info box: (checked)
      
      [Grouped window list]
        [General]
          Group windows by applications: (uncheck)
        
        [Panel]
          Button label: Window title
          Show window count numbers: (uncheck)
          
      
      [Lock keys indicator with notifications]
        Show caps lock indicator: (checked)
        Show num lock indicator: (checked)
        
      [Notifications]
        Show empty tray: (checked)
        (click 'Open notification settings')
          Remove notifications after their timeout is reached: (checked)
          Show notifications on the bottom: (checked)
          Notification duration (seconds): 2
          Media keys OSD size: Small
      
      [Power Manager]
        Display: Show percentage  
      
      [Weather]
        [Weather]
          Data service: OpenWeatherMap
          Forecast length (days): 7
        
        [Location]
          (add locations in Saved Locations)
          (get the lat/lon from Google Maps, just right-click it'll be the first item, you only need to the 6th decimal for each value)
          (for the City I went with '<CITY>, <ABBREVIATED_STATE>')
          (timezone America/Los_Angeles)
          (Once items are added you can click on the panel item, and at the top of the forecast there'll be a location with horizontal arrows. Click on an arrow to go to a saved location)

  [Desktop]
    Desktop Layout: No desktop icons
  
  [Hot Corners]
    Enable top left: Show the desktop
  
  [Preferred Applications]
    [Preferred applications]
      Web: Google Chrome
      Music: Sayonara Player
      Video: VLC media player
      File Manager: Thunar File Manager
      Terminal: Tilix
  
  [Screensaver]
    Delay before starting the screensaver: Never  (nothing else really works when running long CLI commands, I don't want it to lock in the middle of a process)
  
  [Startup Applications]
    Albert (check)
    Cairo-Dock (check)
    mintwelcome (uncheck)
    Print Queue Applet (uncheck)
    Redshift (check)
    Solaar (check)
    Support for NVIDIA Prime (uncheck)
  
  [Windows]
    [Alt-Tab]
      Alt-Tab switcher style: Icons and window preview  (the 3D options seem to cause screen freezing issues)
      Delay before displaying: 200  (when switching quickly, no need for extra overhead)
    
──────────────────────────────────────────────────────────────────────────────

[Hardware]

  [Mouse and Touchpad]
    [Touchpad]
      Click actions: Use multiple fingers for right and middle click
      Reverse scrolling direction: (uncheck)
      Speed: Roughly 65%
  
  [Network]
    [Wi-Fi]
      (disable while wired)
  
  [Power Management]
    [Power]
                                            |   on A/C   | on Battery
      ---------------------------------------------------------------
      Turn off the screen when inactive for:  15 minutes | 15 minutes
      Suspend when inactive for:                   Never | Never
      When the lid is closed:                 Do Nothing | Suspend
      ---------------------------------------------------------------
      When the battery is critically low: Shut down immediately
  
  [Sound]
    [Input]
      (Internal Microphone Built-in Audio)
        (click the speaker icon to mute/disable it)
    
    [Sounds]
      (customize system sounds)

──────────────────────────────────────────────────────────────────────────────

[Administration]

  [Login Window] (only effects re-login from Suspend)
    [Appearance]
      Background: (choose image)
      GTK theme: Mint-Y-Legacy-Dark-Aqua
      Icon theme: Mint-Y-Legacy-Dark-Aqua
    
    [Users]
      Allow guest sessions: (checked)
Expand for Albert Settings

I use QML Box Model so that SVG icons show up clearly.

┎─────────┒
┃ General ┃
┖─────────┚
  Hot key: Ctrl+Space
  Frontend: QML Box Model
  Terminal: Tilix
  Autostart on login: (checked)
  Style: BoxModel (click the button next to it)
    item_title_fontsize: 30
    item_description_fontsize: 20
    font_name: Ubuntu Mono
  Apply theme: DarkMagenta
  Display scrollbar: (check)

┎────────────┒
┃ Extensions ┃
┖────────────┚
  [X] Applications
  [X] WebSearch
Expand for Cairo-Dock Settings

If you want to switch from OpenGL go into ~/.config/cairo-dock/.cairo-dock and update:

- default_backend=opengl
+ default_backend=cairo

To have it start on boot go into Startup Applications. Add > Choose Applications > pick Cairo-Dock.

In order to add launchers to the dock, I go into the taskbar menu and search for the application. Once I find the application you can sometimes just drag it right to the dock, but more often than not I just right-click the app and choose Add to desktop. Then I can drag that launcher to the dock.

Note that when a launcher is added to the dock, a copy of it is added to ~/.config/cairo-dock/current_theme/launchers. So if a launcher needs to be updated, I'll generally just delete it and add the new one, but you can go in and manually edit the launcher in that folder.

When manually creating a launcher I look to see if there's a good system icon via cuttlefish instead of pointing to an image. Some apps like system binaries may not have an icon, so you can find/create one and add it to the appropriate folder in ~/.local/share/icons. More info on that in the Theming section. - After an update in Mint, I noticed some icons I was previously using were no longer available in the current theme. You can see what icon theme is in use under Cairo-dock > Configuration > Appearance > Icons. It seems to default to _Custom Icons_ which is located at /home/<USER>/.config/cairo-dock/current_theme/icons/, and allows you to drop custom icons (SVG or PNG) directly in there. You can reference the files the same way as system icons, for example if you have code.svg you can reference it as code in the Launcher Icon > Image's name or path section. Missing icons may still exist within a different theme, so in a file browser you can open up /usr/share/icons/ and search for the name that was previously being used, then just copy that file over to <CAIRO>/current_theme/icons/.

Had an issue where Cairo wasn't using my default File Manager to open folders. It must be caching it somewhere because after I went into Default Applications, and changed my File Manager to something else, and then back to what I wanted, it started behaving.

Expand for Grub Settings

You can use Grub Customizer or CLI

sudo vim /etc/default/grub
# Decrease duration that grub menu displays
- GRUB_TIMEOUT=10
+ GRUB_TIMEOUT=2
sudo update-grub
Expand for Inkscape Settings

Keyboard Shortcuts

Keys Description
CTRL+SHIFT+R Resize canvas to content
% Toggle snaps on/off

To move the tools on the right to the top, go to View > (at bottom, change to) Custom.

Preferences

[ Interface > Themeing ]
  GTK theme: Adwaita
  (check) Use dark theme
  change icon theme: multicolor
  (check) Use symbolic icons

[ Behavior > Transforms ]
  (uncheck) Scale stroke width
Expand for LSD Settings
(
  mkdir -p ~/.config/lsd
  cp -i ./files/lsd/config.yaml ~/.config/lsd/
)
Expand for Qemu Settings
  • After the initial install, a reboot may be required to run virsh commands without sudo.
  • Verify things are running correctly with
    # list VMs - should be empty
    virsh -c qemu:///system list
    # make sure virtualization daemon is running
    systemctl status libvirtd.service
  • Start up virt-manager. If you run your quick launcher and type virt, an entry for Virtual Machine Manager should come up. Run it.
    • Go to Edit > Preferences
      [General]
        [X] Enable system tray icon
      
Expand for Remmina Settings
  • Preferences > Applet > [X] No tray icon (To close the app when you've closed all windows. May require you to kill the process the first time if you change this setting from the tray icon and all windows are already closed).
Expand for Sayonara Settings
[File > Preferences]
  [Application]
    (untick) Update notifications
  
  [User Interface]
    [General]
      (untick) Show large cover
    
    [Icons]
      (tick) Also apply this icon theme to the dark style (makes the volume icon look funny, but otherwise the icons in file picker are almost invisible, so it's required)
      (tick) Mint-Y-Dark
  
  [Playlist]
    [Behavior]
      Start up:
        (tick) Load temporary playlists
        (tick) Load last track on startup
        (tick) Remember time of last track
    
    [Look]
      (tick) Show footer
      (untick) Show numbers
      (tick) Show covers
      Custom font color in dark theme: #2ad8ff
      Playlist item text: %nr% - %title%
    
    [Covers]
      (untick) Save found covers to database
      (untick) Fetch missing covers from internet
  
[Plugins]
  (tick) Level (customize colors by mousing over and clicking button)

[View]
  (untick) Show Library
  (untick) Show Large Cover
Expand for SDDM Settings
(
  # To configure the theme, create a custom config for sddm
  sudo mkdir -p /etc/sddm.conf.d
  sudo cp -i ./files/sddm/10-custom.conf /etc/sddm.conf.d/
  
  # Then a custom config for the theme, adjust values as you see fit (these changes will persist after theme updates)
  sudo cp -i ./files/sddm/theme.conf.user /usr/share/sddm/themes/breeze/
)

You can test the theme via: sddm-greeter --test-mode --theme /usr/share/sddm/themes/breeze. If there are errors, you may want to pick a different theme.

The backgrounds for a theme are set in /usr/share/sddm/themes/<THEME>/theme.conf on the background= line. Generally themes point to the global wallpapers so an image can be displayed for any user. Those wallpapers are in /usr/share/wallpapers. To more easily view all wallpapers I open that directory with a file manager, and do a search for screenshot.jpg, then I can just browse through the results, and find the path for the wallpaper I want. Once you have a wallpaper you like, create/update your config's background line, and you'll see the new image after a reboot. Note that you'll see your User wallpaper on the lock screen.

If your user icon isn't showing up, look in /var/lib/AccountsService/icons/ and see if an icon exists with your user name. If not, try picking and choosing an icon again from Account Details.

If you have multiple monitors hooked up, things will likely be jacked up when the login screen appears. Here's how to fix it:

# get info about connected monitors
xrandr | grep -w connected
# In my case the output was:
# --------------------------
## HDMI-0 connected 1080x1920+1920+0 left (normal left inverted right x axis y axis) 531mm x 299mm
## DP-1 connected (normal left inverted right x axis y axis)
## DP-3 connected primary 1920x1080+0+423 (normal left inverted right x axis y axis) 531mm x 299mm
# --------------------------
# HDMI-0 is my secondary vertical monitor to the right of my primary DP-3. DP-1 is the closed laptop.

# add rules so the login behaves
sudo vim /usr/share/sddm/scripts/Xsetup
# -------------------------------------
xrandr --output DP-3 --auto --primary
xrandr --output HDMI-0 --right-of DP-3 --rotate left --noprimary
# -------------------------------------

If sddm isn't behaving, you can revert to the default with sudo dpkg-reconfigure lightdm.

Configuration doc: https://wiki.archlinux.org/title/SDDM#Configuration

View the default config: sddm --example-config | bat

Expand for Sticky Settings

Preferences

[General]
  Tray icon: (checked)
  Show the main window automatically: (unchecked)

[Automatic start]
  Start automatically: (checked)
  Show notes on the screen: (checked)
Expand for VLC Settings

Download custom skin (I've stopped doing this because the skins don't always behave. Leaving for reference.)

mkdir ~/.config/vlc/skins
wget http://www.videolan.org/vlc/download-skins2-go.php?url=subX.vlt -O ~/.config/vlc/skins/

Preferences

┎───────────┒
┃ Interface ┃
┖───────────┚
  Use custom skin: ~/.config/vlc/skins/subX.vlt

┎───────┒
┃ Video ┃
┖───────┚
  Video snapshots
    Directory: ~/Pictures/vlc
    Format: jpg
Expand for VS Code Settings

Extensions:

If things aren't behaving as expected after installing extensions (like config pages not loading), run CTRL+SHIFT+P > Reload Window. app Settings:

  • View > Appearance > Secondary Side Bar
    • Go the Explorer view > (add) Open Editors
      • Move Open Editors to the Secondary Side Bar
  • File > Preferences > Settings > User (or CTRL + ,)
    All Autocomplete: Max Items in Single List: 10
    All Autocomplete: Min Word Length: 5
    All Autocomplete: Show Current Document: (uncheck)
    Diff Editor: Ignore Trim Whitespace (uncheck)
    Diff Editor: Render Side By Side: (uncheck)
    Dotenv: Enable Autocloaking: (unchecked)
    Editor: Accept Suggestion on Commit Character: (uncheck)
    Editor: Color Decorators: (uncheck)
    Editor: Detect Indentation: (uncheck)
    Editor: Folding Strategy: indentation
    Editor: Font Size: 14
    Editor: Hover:Delay: 1000
    Editor: Hover:Enabled: (uncheck)
    Editor: Insert Spaces: (check)
    Editor: Rulers: [80]
    Editor: Scroll Beyond Last Line: (uncheck)
    Editor: Show Tabs (off)
    Editor > Sticky Scroll: Enabled (uncheck)
    Editor: Tab Size: 2
    Editor: Token Color Customizations: (edit in JSON)
    Editor: Trim Auto Whitespace: (uncheck)
    Editor > Parameter Hints: Enabled: (uncheck)
    Explorer > Open Editors: Visible: 100
    Extensions: Auto Check Updates: (uncheck)
    Extensions: AUto Update: None
    Extensions: Ignore Recomendations: (check)
    Files: Exclude: (remove the pattern for `.git`)
    Javascript > Validate: Enable: (uncheck)
    Git: Close Diff On Operation: (check)
    Git: Input Validation: Off
    Markdown All In One: Math Enabled: (uncheck)
    Markdown All In One: Ordered List: Auto Renumber: (uncheck)
    Markdown All In One: Ordered List: Marker: one
    Markdown All In One: Toc Levels: 2..6
    Notebook > Sticky Scroll: Enabled (uncheck)
    SCM: Default View Mode: tree
    Search: Use Global Ignore Files: (check)
    Telemetry: Telemetry Level: off
    Terminal > Integrated: Font Family: FantasqueSansMono NF
    Terminal > Integrated > Sticky Scroll: Enabled (uncheck)
    Todo-tree > General: Tags
      (add) NOTE
    Todo-tree > Highlights: Background Colour Scheme
      (add) #FFFD8F
    Todo-tree > Highlights: Foreground Colour Scheme
      (add) black
    Typescript > Validate: Enable: (uncheck)
    Update Mode: manual
    Window: New Window Dimensions: inherit
    Window: Title: [${rootName}] ${activeEditorMedium}${separator}
    Window: Zoom Level: 1
    Workbench > Tree: Enable Sticky Scroll (uncheck) 
    
    • NOTE: Once you remove the .git exclusion it'll look like it's no longer excluded from version control. It will be, but for visual clarity you can do this:
      cp -i ./files/.gitignore_global ~/
      git config --global core.excludesFile ~/.gitignore_global
  • There are some settings that can only be set in the settings.json
    "editor.tokenColorCustomizations": {
      "textMateRules": [
        {
          "scope": "markup.quote.markdown",
          "settings": {
            "foreground": "#bbba71"
          }
        },
        {
          "scope": "markup.inline.raw.string.markdown",
          "settings": {
            "foreground": "#62b9d3"
          }
        },
        {
          "scope": "markup.fenced_code.block.markdown",
          "settings": {
            "foreground": "#f379ce"
          }
        }
      ]
    },
    "blueprint.templatesPath": [
      "~/.config/Code/User/FileTemplates",
    ],
    "eslint.validate": ["javascript", "javascriptreact", "svelte"],
    "[css][html][javascript][svelte]": {
       "editor.suggest.showWords": false,
     },
  • File > Preferences > Keyboard Shortcuts (or CTRL + k + s) (or CTRL+SHIFT+P, Preferences: Open Keyboard Shortcuts (JSON))
    # Toggle the 'Record Keys' button in the input.
    # Type `CTRL + d`, select the 'Add selection to next find match' entry, hit `DELETE`
    # Toggle 'Record Keys'
    # Search for 'Copy line down', set it's shortcut to `CTRL + d`
    
    # Toggle the 'Record Keys' button in the input.
    # Type `CTRL + s`, select the 'File: Save' entry, hit `DELETE`
    # Toggle 'Record Keys'
    # Search for 'Save All (workbench.action.files.saveall', set it's shortcut to `CTRL + s`
    
    # OS friendly line moving (ALT conflicts with system bindings and opens menus)
    Move Line Down: CTRL+UpArrow
    Move Line Up: CTRL+DownArrow
    
  • You can right-click on icons in the left bar to hide them.
  • Toggle the Activity Bar CTRL + `, drag the Search icon down to the panel so that the global searches have more space.
  • Right-click on the bottom Status Bar
    • Uncheck the second instance of Source Control
    • Uncheck Feedback
  • Only option for vertical "tabs" right now is to:
    • Go into View > Appearance > activate Secondary Side Bar. For some reason it doesn't remember your choice and you have to do this for every repo/project/folder you go into.
    • Drag the Open Editors over to the Secondary Side Bar. This action is remembered, and will now permanetely live in the Secondary Side Bar.
  • Install Python extension, but then remove auto-installed isort and Jupyter extensions. Seems to be a bug that'll spin up a few python processes for those extensions, and if you uninstall them, they keep running even after vscode is shut down, so you'll have to manually kill them. Open System Monitor, filter by py, the Process Name will be python, mouse over them to verify they were started by vscode. In some cases I'd have to delete ~/.config/Code/User/workspaceStorage/<HASH> (sort by date, usually the newest one, but can verify by looking at the path in the workspace.json file)
    • Remove MS Python extensions, syntax highlighting seems to work without them.
    • Search for Typescript and disable everything under Svelte > Plugin
    • ~/.vscode/argv.json, add "disable-hardware-acceleration": true
Expand for Xed (Text Editor) Settings

I was using notepadqq but it started taking a very long time to open.

Xed comes default with Mint, but it requires a little customization.

  • Styles will come from https://github.com/trusktr/gedit-color-schemes
    • There are a few places where styles could possibly go. Run ls -la /usr/share/gtksourceview-*/styles, and take note of the folders that have a styles.rng file. For each one of those folders, you'll need to create a .local version where you'll dump the custom styles.
      # currently these folders match the above criteria
      mkdir -p ~/.local/share/{gtksourceview-3.0,gtksourceview-4}/styles
    • Now you can copy the contents of the repo's gtksourceview-3.0/styles folder over to the new folders.
      (
        wget https://github.com/trusktr/gedit-color-schemes/archive/refs/heads/master.zip -O ~/Downloads/geditcolors.zip
        unzip -j ~/Downloads/geditcolors.zip "gedit-color-schemes-master/gtksourceview-3.0/styles/*" -d ~/.local/share/gtksourceview-3.0/styles/
        unzip -j ~/Downloads/geditcolors.zip "gedit-color-schemes-master/gtksourceview-3.0/styles/*" -d ~/.local/share/gtksourceview-4/styles/
        rm ~/Downloads/geditcolors.zip
      )
  • Open a file with Xed (Text Editor)
    • Go to Edit > Preferences
      [Editor]
        (check) Display line numbers
        (check) Display overview map
        (check) Display right margin (set to 80)
        (check) Highlight the current line
        (check) Highlight matching brackets
        Tab width: 2
        (check) Automatic indentation
        (uncheck) Allow mouse wheel scrolling to change tabs
        
      [Theme]
        Twilight
      
Expand for root Settings

When running some commands via sudo you may notice things don't look or behave the same. Here are some things I copy over:

(
  sudo cp -r ~/.config/lsd /root/.config/
  sudo cp ~/.vimrc /root/
)


Now that things are set up, you should:

  • Back things up
    # Back up GNOME settings
    dconf dump / > ~/settings.dconf
  • Change Grub to something less noisy
    sudo vim /etc/default/grub
    - GRUB_CMDLINE_LINUX_DEFAULT="quiet nosplash loglevel=3"
    + GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=3"
    sudo update-grub

Back Up or Restore Data

Backing up data

Note: You may get EACCESS errors for certain system files/folders if not running as root. One way to get around that is to disable locking.

# run
code ~/.config/FreeFileSync/GlobalSettings.xml
- <LockDirectoriesDuringSync Enabled="true"/>
+ <LockDirectoriesDuringSync Enabled="false"/>

This could have unexpected syncing results if applications are running in the background so try to exit everything before starting a sync.

  1. I created a folder on my backup drive called Linux_Mint__Laptop__Pred.

    • Pred is just a manufactures identifier in case I make a backup from another laptop also running Linux Mint.
  2. Open up FreeFileSync

  3. Set up a config:
    Generally these are my synchronization settings:

    [ Comparison ]
      Variant: File Content
    
    [ Filter ]
      Include:
        *:
      
      Exclude:
        */.Trash-*/
        */.recycle/
    
    [ Synchronization ]
      Variant: Mirror
      Delete and overwrite: Recycle bin
    

    You have to set them for every config, unless you start working on another config with previous config settings loaded. If you do start working from a previous config, be careful not to overwrite it. I generally click Save As when I know I'm starting on a new config.


    Note: System environment variables can be used in paths. So instead of hardcoded paths to a User directory like /home/johndoe/stuff you'd use %HOME%/stuff.

    [ Compare column ]
      Drag & drop (input): (You can directly input a path, or click 'Browse')
      (click the '+' to add another path, though sometimes it's better to add a top-level folder and exclude what you don't want)
    
    [ Synchronize ]
      Drag & drop (input): (You can directly input a path, or click 'Browse')
    
  4. Run the backup

    • With a config loaded and selected, click the Compare button.
    • Take note of the icons in the Action column (swirling green arrows). If it's a trash icon, the files/folders will be deleted. Just be mindful of that before proceeding.
    • If things look good, click Synchronize.
  5. If you want, you can zip up that backup folder and store it somewhere as a snapshot.

Restoring data

  1. Load and select a config.
  2. There's a Swap Sites button separating the Compare and Synchronization columns. Click on that to have your data go from the backup to the source.
  3. Click Compare, review what will be changed.
  4. If things look good, click Synchronize.
  5. Important: Be sure not to save the config in the reversed state.

Useful Keyboard Shortcuts

Keys Action
ALT + click on a window + drag Moves a window
ALT + right-click near window edge + drag up/down or left/right Resize a window
CTRL+ALT+ESC Restart Cinnamon (keeps current session, may jumble window positions)
CTRL+ALT+BACKSPACE Restart XOrg (exits to login)

Useful Commands

Command Description
sudo apt autoremove <PACKAGE> Can be used after a apt remove <PACKAGE> or in place of. A reason to use it after a remove would be to ensure that you don't accidentally remove something because a dependency wasn't tracked properly. But if you just added something and know that there won't be any conflicts use autoremove.
sudo add-apt-repository --remove <REPO> It's a common one, but I always forget the syntax. You'd think there'd be a remove-apt-repository.
`xev grep keycode`
`xprop grep WM_CLASS`

Useful Places

# Applications (launcher) folders
/usr/share/applications
/var/lib/flatpak/exports/share/applications

# Logs
/var/log

# System audio
/usr/share/sounds

Theming

GTK Themes and Apps

Recommended tools:

  • GtkInspector
    # If `libgtk-3-dev` isn't installed, do so
    sudo apt install libgtk-3-dev
    
    # Enable with
    gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true
  • Color picker
    sudo apt install gpick
    # although I magically have mate-color-select installed as well...

File locations:

  • CSS
    ~/.config/gtk-3.0/colors.css # color definitions
    ~/.config/gtk-3.0/gtk.css # just imports `colors.css`
    /usr/share/themes/<THEME>/gtk-3.0/gtk.css # theme specific styling/overrides
    

Sources:

Updating Styles:

  • With an App focused (I right-clicked the bottom panel and opened Panel Preferences), hit CTRL+SHIFT+I and it should open with that App's items listed in the Objects view. If that doesn't work you can try running the App in the CLI prefixed with GTK_DEBUG=interactive. You may be in the Details view, if so click on the Show All Objects button (top left).
  • You can click on items in that view, and they'll blink/highlight if they're viewable. Once you find an item, double-click on it to open it's Details view. There's a drop-down, switch it to CSS Nodes. There you can find IDs, Style Classes, CSS Propertys, and Locations. You can use IDs and Style Classes as you would ids and classes in CSS. Location is useful to determine if there's a hardcoded value in a CSS file somewhere, or if it's being controlled dynamically <data>:##:##.
  • With the info from that view, go to the CSS view. Anything you add in there will take effect immediately. Test it with something like
    #PanelWindow {
      background-color: #FF00FF;
    }
    Most items you can just select their Properties, then inspect from there.
  • Add your custom styles to ~/.config/gtk-3.0/custom.css, then open ~/.config/gtk-3.0/gtk.css and add @import "custom.css";. For changes to take effect I logged out and back in.
  • When you're done, you may want to disable the GtkInspector key bindings so you don't get any unexpected keyboard conflicts
    gsettings set org.gtk.Settings.Debug enable-inspector-keybinding false

Icons

  • Icon Theme Spec
  • Icon Naming Spec
  • Global icons (usually used by themes) are in /usr/share/icons/<THEME>/<TYPE>/<SIZE>/. So if there's an icon you like, but you want to modify it, that's where it may be.

Before creating or finding my own icons I open up cuttlefish to see if there's something that'll work for me. If not, you can add a single icon in ~/.local/share/icons/. For better compatibility (like having it show up in cuttlefish) I created a GIMP plugin to generate folders and the different sized icons.

  1. Close GIMP if it's running
  2. Symlink the plugin over ln -s $PWD/files/gimp/nox_gen-freedesktop-icons.py ~/.config/GIMP/2.10/plug-ins/
  3. The first time testing it, you can open GIMP via the terminal to see if there are any errors while loading.
  4. Add your full resolution icon to ~/.local/share/icons/hicolor/. I tend to prefix my icons with mine__ so I easily know what I've added.
  5. Open that image in GIMP
  6. In the top menu, go to NOX > (click) Gen Freedesktop Icons
  7. Choose the icon type
  8. (click) Generate
  9. In cuttlefish you should now be able to look up your icon, and use that icon name where ever.

Troubleshooting

System going to sleep after a few seconds on the Login screen

Expand for Solution

The issue only happened when my system was docked and the lid was closed and I was using an external monitor.

Normally you'd go into Power Management and set what the system should do when the lid is closed. Turns out that it has no effect in the Login screen, rather it's controlled by logind.

First check what files are effecting logind:

systemd-analyze cat-config systemd/logind.conf

If you don't see any files with settings pertaining to HandleLidSwitchExternalPower, create a new one:

sudo cp -i ./files/laptop-login.conf /usr/lib/systemd/logind.conf.d/
# Save changes and run
sudo systemctl restart systemd-logind


Kernel Panic error after choosing "recommended" nvidia driver

Expand for Solution

To fix the panic, during boot I chose Advanced in the Grub menu. In that sub-menu I went down the list of available recovery-mode options until one booted.

From the menu I chose the Root shell option. Then I ran ubuntu-drivers devices (displays what Driver Manager shows). I found the bad driver name and ran:

(
  apt purge nvidia-driver-525
  apt autoremove
  reboot
)

You should then be able to boot normally with the default nouveau driver. Open up Driver Manager and reinstall the nvidia driver that matches your kernel.

To find the driver that matches your kernel, run uname -r to view the current kernel. Then compare that against the available nvidia drivers in Driver Manager. For me it was recommending nvidia-driver-525 when my kernel was 5.15.0-56-generic. So it should've been recommending nvidia-driver-515.

"error: out of memory" on boot right after grub menu

Expand for Solution

Seems to be linked to using nvidia drivers https://bugs.launchpad.net/oem-priority/+bug/1842320. Add this to your Grub config, save and reboot.

GRUB_GFXMODE=640x360

If that doesn't work, I also purged all nvidia packages via Synaptic Package Manager. Had to manually find all nvidia packages with a version matching what was installed. Rebooted, and the system should now be using the nouveau driver. Use Driver Manager to install the nvidia driver again.

Chrome Saved Passwords Not Showing Up in Settings

Expand for Solution

First, close Chrome while you're troubleshooting.

Possible reasons for this:

  1. The Login Data file is missing from ~/.config/google-chrome/<Default|Profile>/ or it's read/write protected. Look at the other file permissions in a folder you haven't touched, and copy those.
  2. The passwords in the database (Login Data is a sqlite3 file) were encoded with a system key that aren't on your new system. It should be stored in ~/.local/share/keyrings.
  3. There's a corrupted value in Login Data. If Chrome can't read a value, it automatically considers everything broken and won't display anything. If you run fix-chrome-creds.py it'll create a fixed file on your desktop, and output all the values so you can see what may be broken, or worse case manually input the passwords. Example ./bin/fix-chrome-creds.py -f "~/.config/google-chrome/<PROFILE>/Login Data" -p "<KEY>". <KEY> would come from Passwords and Keys > Login > Chrome Safe Storage.

How to Free Up Space?

Expand for Solution
# There could be other folders in `.cache` that you may want to investigate.
# Deleting folders or their contents while certain Apps are running could cause issues.
rm -rf  ~/.cache/{thumbnails}/*

PulseAudio Volume Notification Keeps Popping Up

Expand for Solution

Was having an issue where the PulseAudio volume change notification would keep popping up randomly when I wasn't adjusting volume. Usually would happen while using a Browser and a video would start playing.

First you can debug Pulse's logs:

systemctl --user stop pulseaudio.{socket,service}
# Terminal #1
LANG=C pulseaudio -vvvv --log-time=1 > ~/Desktop/pulseverbose.log 2>&1
# Terminal #2 (or just stop the above process when you see the notification pop up)
tail -f ~/Desktop/pulseverbose.log

Most forums date this back to a long-standing issue with it detecting that the headphone jack is plugged in then unplugged. Sure enough I was seeing these random messages:

[pulseaudio] module-alsa-card.c: Jack 'Headphone Jack' is now plugged in
# stop the currently running service (if it's running)
systemctl --user stop pulseaudio.{socket,service}
# edit pulse's config
sudo vim /etc/pulse/default.pa
# Disable the below line
load-module module-switch-on-port-available
# start the service
systemctl --user start pulseaudio.{socket,service}

What the modules do:

  • on-port-available is the event that a port becomes usable, for example when you insert a mini jack.
  • on-connect is the event that a new device is connected which has an audio port, such as a usb dock.

NOTE: Turns out the below didn't work. Pipewire didn't help at all, in fact it kept crashing after extended use. Keeping this for future reference.

Change from PulseAudio to Pipewire by following these instructions.

# First check and see if it's already installed and running
systemctl --user status pipewire pipewire-session-manager

# If it's not installed
sudo apt install pipewire
# Install audio client and some libs
sudo apt install gstreamer1.0-pipewire libpipewire-0.3-{0,dev,modules} libspa-0.2-{bluetooth,dev,jack,modules} pipewire{,-{audio-client-libraries,pulse,bin,tests}}
# Install WirePlumber
sudo apt install wireplumber gir1.2-wp-0.4 libwireplumber-0.4-{0,dev}

# Kill PulseAudio
systemctl --user --now disable pulseaudio.{socket,service}
systemctl --user mask pulseaudio

# Copy over Pipewire configs
sudo cp -vRa /usr/share/pipewire /etc/

# Start up Pipewire
systemctl --user --now enable pipewire{,-pulse}.{socket,service}

# Your system may require a log-off/in, or a reboot

If you need/want Pipewire's equivelant to PulseEffects

flatpak install flathub com.github.wwmm.easyeffects

File Managers randomly freeze when transfering CIFS files

Expand for Solution

Had random issues in file managers when transfering lots of small files at once. Basically I'd start a transfer, the manager would hang, couldn't close the transfer dialog and would have to kill the manager's proccess.

When I added vers=1.0 (like sudo mount -t cifs -o vers=1.0) the issue no longer happened but transfers were slower, and version 1.0 is less secure.

After weeks of random troubleshooting I found an option in TrueNAS Scale, within each SMB share.

  • Select a share to bring up it's properties panel
  • Click Advanced Options
  • Scroll down and check Enable SMB2/3 Durable Handles
  • Save changes

System Freezes/Locks When Entering Suspend

Expand for Solution
  • Went into Update Manager > View > Linux Kernels > chose the oldest in the available 5.15 series (5.15.0-25). Waited for it to install, rebooted, used the Grub menu during boot to choose the older kernel. Tested suspend and logging out/in and things seem to be working now.
  • To ensure it doesn't boot to the bad kernel:
    • Launch Update Manager > View > Linux Kernels. Click on the bad installed kernel, click Remove.
    • That kernel probably just popped up in the Update Manager as an available update. Right-click it and choose Ignore the current update for this package. If you mistakenly ignored the wrong package, go into Edit > Preferences > Blacklist, and remove what you ignored.

If the need to manually download and add an older kernal arise: https://askubuntu.com/a/700221

Can't Boot Past Grub Menu

Expand for Solution

Recently updated my GPU driver and after I rebooted I kept getting an "out of memory" error from initramfs. No matter what I tried there was no way to get to a terminal or recover anything, everything just crapped out.

Luckily you can use a Live ISO to recover:

  • I loaded into Mint via VenToy
  • Started a Terminal in Mint
    # mounting a ZFS pool takes a little extra work
    (
      # the root pool where you normally boot into
      sudo zpool import -R /mnt rpool
      # the boot pool where Grub lives
      sudo zpool import -R /mnt/ bpool
      sudo mount -t exfat UUID=7B55-ECA0 /mnt/boot/efi
      # mount certain system folders so things can run normally
      for i in dev dev/pts proc sys; do sudo mount -v --bind /$i /mnt/$i; done
      sudo mount -v --bind /mnt/boot/efi/grub /mnt/boot/grub
    )
    # load into the pool like it's a new root system
    sudo chroot /mnt
    
    # if you can't install packages due to mirrors not being resolvable
    sudo vim /etc/resolv.conf
      # add
      nameserver 8.8.8.8
    
    # if mirrors are out of date
    sudo vim /etc/apt/sources.list.d/official-packages-repositories.list
    
    # patch initramfs to keep it's file size down (fix 'out of memory')
    sudo vim /etc/initramfs-tools/initramfs.conf
      # update existing items to:
      MODULES=dep
      COMPRESS=xz
    
    # remove driver (adding or removing automatically re-builds initramfs)
    sudo apt remove nvidia-driver-515
    sudo apt autoremove
    # list available drivers
    ubuntu-drivers devices
    # install driver
    sudo apt install nvidia-driver-525
    # make sure Grub references any new files that may have been generated
    sudo update-grub
    
    exit
    
    # if you need to make any file back-ups, do so now while things are mounted
    
    reboot
  • The Grub menu wouldn't load after my changes, instead it was just the Grub console.
    # list available drives
    grub> ls
    # find which drive has the boot pool (without the slash it may print the label of `bpool`, otherwise look for a BOOT folder and make sure there isn't Windows stuff in it).
    grub> ls (hd2,gpt3)/
    
    # load things up
    # set root=(hd#,gpt#)
    grub> set root=(hd2,gpt3)
    # linux /BOOT/ubuntu_######/@/vmlinuz root=ZFS=rpool/ROOT/ubuntu_###### boot=zfs
    grub> linux /BOOT/ubuntu_1yyx7k/@/vmlinuz root=ZFS=rpool/ROOT/ubuntu_1yyx7k boot=zfs
    # initrd /BOOT/ubuntu_######/@/initrd.img
    grub> initrd /BOOT/ubuntu_1yyx7k/@/initrd.img
    grub> boot

If you need to back things up to a flash drive:

# FAT drives have a limit of around 4GB per file, so split into `4294967295` chunks
# [Export]
sudo tar -cvzf - /mnt/home/<USER>/ | split -b 4294967295 - "/media/mint/<FLASH_ID>/backup.tar.gz.part"

# [Import]
cd <DEST_FOLDER>
cat /<FLASH_ID>/backup.tar.gz.part.* | tar xzvf -

"Couldn't Connect to Accessibility Bus" Warnings When Opening/Starting Something From CLI

Expand for Solution

The fix is to export this variable:

# `NO_AT_BRIDGE` to hide GTK "couldn't connect to accessibility bus" warnings (usually when running 'open'). It's been a known issue for a long time https://bugs.launchpad.net/ubuntu/+source/at-spi2-core/+bug/1193236.
export NO_AT_BRIDGE=1

The comment's not neccessary (for whatever file you dump it in), but it could be useful when trying to remember why you added it.

There are different schools of thought as to where to add the export. Personally I added it to my .*rc file, but it can be added to these locations as well:

File Description
/etc/profile Global exports. Executes first. Available to all shells. Just add the export line.
/etc/profile.d/<FILENAME> Global exports. Anything in profile.d is loaded by /etc/profile. Available to all shells. <FILENAME> could be something like 01_accessibility_bus_fix.sh, and in that file you'd add the export line. The leading number is just to ensure execution order.
~/.profile User exports. Available to all shells. Just add the export line.
~/.*rc User exports. Available to specific shell. Just add the export line to your Shell's rc file. So .zshrc, .bashrc, etc.

USB Drive Slow to Eject or Suffers Data Loss

Expand for Solution

Linux has a caching/buffering layer when writing files to a disk. Basically the file manager's copy progress dialog is inaccurate and none of them display the actual written to disk progress, but instead display the written to RAM progress. So if you safely eject the disk, it'll disappear from the system tray list making you think it's safe to remove, but if you are viewing the drive in the Disks tool you may see a spinner indicating that something is still going on. Basically if you don't wait for the tray notification saying that it's ok to remove the drive, you may suffer data loss or an unreadable drive.

If you want accurate copy progress you have to alter the automount options for USB disks to either flush (which is the fastest) or sync. Unfortunately flush isn't supported by all disks so I was only able to try sync which was much slower than just transferring and waiting.

To change the automount rules:

  • Run:
    # First run `mount` on the mounted drive to see what it's defaults are
    mount | grep <DISK_LABEL>
    
    # You may have to create/copy the mount_options.conf if it doesn't exist
    sudo cp /etc/udisks2/mount_options.conf.example /etc/udisks2/mount_options.conf
  • Open mount_options.conf and add the appropriate value.
    sudo vim /etc/udisks2/mount_options.conf
    [defaults]
    defaults=rw,nosuid,nodev,noatime,sync
    
    # or
    
    [defaults]
    defaults=rw,nosuid,nodev,noatime,flush
    
  • Eject, remove, and then re-insert your drive. The changes should be applied.
    # Run mount again to verify changes.
    mount | grep <DISK_LABEL>

Further debugging can achieved by running these commands:

# udev is the hotplug management daemon. Run the below to see what happens when you plug in a device.
udevadm monitor --udev

# The path for User rules is:
/etc/udev/rules.d/
# If you add a new rules file, reload the rules with:
sudo udevadm control --reload-rules

# The path for System rules is:
/usr/lib/udev/rules.d/

# Print info about your mounted drive (get the generated name from Disks)
udisksctl info -b /dev/<DRIVE>

# To see what happens when you plug a drive in, first plug the drive in, then run:
udevadm test -a add $(udevadm info -q path -n /dev/<DRIVE>)

Steam Not Recognizing Bluetooth Controller

Expand for Solution

In my case I had to turn on the controller before starting Steam for it to detect it and map controls to games.