Bye Windows

last box to switch to Linux

Posted by Isaac on Thursday, September 3, 2026

Well I did it. It was a really strange feeling, to be honest, but I pulled the plug and wiped my windows SSD and finally loaded Linux on my last working Windows.

/img/2026-09-bywindows-08.jpg

The gaming rig (whatever that has been at any given time) has always been Windows with WSL for fun and Steam for play. But every game is now supported quite well on Steam and I was tired of babying the 1Tb drive as my fun work in WSL was always bloating up the filesystem.

I backed up the WSL “Workspaces” directory (all my coding stuff). Logically that should be in various GITs but when I’m lazy, I leave files around like Ingress YAMLs or notes.

I know there is a lot of grumbling on the interwebs about Canonical and Ubuntu. I have put Fedora on one laptop. I just like Ubuntu. I really do. I actually like Gnome. I know it’s a bit ugly - but ugly is good. It has a distinct lack of Advertising and Copilot pop ups.

Backups

The key thing was to use rsync to push files out the data drive I might want to keep. I know there is still a trash OneDrive that was always steeling my documents and images on Windows so logically they are “in the cloud”.

I can see the huge ComfyUI models and WSL Workspaces on the Datadrive presently mounted in Ubuntu

/img/2026-09-bywindows-01.png

If you get into doing AI videos and images with ComfyUI, prepare for a lot of local disk usage

/img/2026-09-bywindows-02.png

Things to install first

Almost immediately after installing Ubuntu, I installed Zed.

$ curl -f https://zed.dev/install.sh | sh
$ echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc
$ source ~/.bashrc

I’m using that to write this now

/img/2026-09-bywindows-03.png

I actually have this little script that makes the images for here easily from the Ubuntu snapshots folder:

isaac@isaac-G707:~/Workspaces/fbsnew$ cat ./ss3b.sh
#!/bin/bash

set +x
export YEAR=2026
export MONTH=$1
export NAME=$2

# get latest picture and add a border
# sudo apt install imagemagick
cd ~/Pictures/Screenshots
convert "`ls -tra ~/Pictures/Screenshots/ | grep \.png | tail -n1 | sed 's/ /\\ /g'`" -bordercolor black -border 2x2 ~/Workspaces/fbsnew/static/img/$YEAR-$MONTH-$NAME.png

#[![/content/images/$YEAR/11/sumologic-44.png](/content/images/$YEAR/11/sumologic-44.png)](/content/images/$YEAR/11/sumologic-44.png)

echo "[![/img/$YEAR-$MONTH-$NAME.png](/img/$YEAR-$MONTH-$NAME.png)](/img/$YEAR-$MONTH-$NAME.png)"

You just need to have imagemagick installed and you’re good to go.

I also recently found I could script around ffmpeg to convert larger mp4 videos to very small webm ones so there is now a script for that too

isaac@isaac-G707:~/Workspaces/fbsnew$ cat ./ss3b-video.sh
#!/bin/bash

set -euo pipefail

export YEAR=2026
export MONTH="${1:-$(date +%m)}"
export NAME="${2:-screencast}"
export INDEX="${3:-01}"

INPUT_DIR="${INPUT_DIR:-/home/builder/Videos/Screencasts}"
OUTPUT_DIR="${OUTPUT_DIR:-/home/builder/Workspaces/fbsnew/static/vid}"

mkdir -p "$OUTPUT_DIR"

latest_mp4="$(find "$INPUT_DIR" -maxdepth 1 -type f -name '*.mp4' -printf '%T@ %p\n' 2>/dev/null | sort -nr | head -n1 | cut -d' ' -f2-)"

if [[ -z "$latest_mp4" ]]; then
  echo "No MP4 files found in $INPUT_DIR"
  exit 1
fi

output_file="$OUTPUT_DIR/$YEAR-$MONTH-$NAME-$INDEX.webm"

ffmpeg -i "$latest_mp4" -c:v libvpx-vp9 -crf 30 -b:v 0 -an "$output_file"

echo "Converted: $latest_mp4"
echo "Output: $output_file"
echo "<video controls><source src=\"/vid/$(basename "$output_file")\" type=\"video/webm\"></video>"

I won’t show the output of every command, but it’s basically just apt install ffmpeg:

saac@isaac-G707:~/Workspaces/fbsnew$ sudo apt install ffmpeg
[sudo: authenticate] Password:
The following package was automatically installed and is no longer required:
  grub-pc-bin
Use 'sudo apt autoremove' to remove it.

Installing:
  ffmpeg

Installing dependencies:
  libavdevice62  libsdl2-2.0-0  libsdl2-classic

Suggested packages:
  ffmpeg-doc

Summary:
  Upgrading: 0, Installing: 4, Removing: 0, Not Upgrading: 49
  Download size: 2,829 kB
  Space needed: 5,289 kB / 926 GB available

Continue? [Y/n] Y
Get:1 http://us.archive.ubuntu.com/ubuntu resolute/universe amd64 libavdevice62 amd64 7:8.0.1-3ubuntu2 [73.7 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu resolute/main amd64 libsdl2-classic amd64 2.32.10+dfsg-6 [710 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu resolute/main amd64 libsdl2-2.0-0 amd64 2.32.10+dfsg-6 [14.0 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu resolute/universe amd64 ffmpeg amd64 7:8.0.1-3ubuntu2 [2,032 kB]
Fetched 2,829 kB in 2s (1,849 kB/s)
Selecting previously unselected package libavdevice62:amd64.
(Reading database… 249252 files and directories currently installed.)
Preparing to unpack …/libavdevice62_7%3a8.0.1-3ubuntu2_amd64.deb…
Unpacking libavdevice62:amd64 (7:8.0.1-3ubuntu2)…
Selecting previously unselected package libsdl2-classic:amd64.
Preparing to unpack …/libsdl2-classic_2.32.10+dfsg-6_amd64.deb…
Unpacking libsdl2-classic:amd64 (2.32.10+dfsg-6)…
Selecting previously unselected package libsdl2-2.0-0:amd64.
Preparing to unpack …/libsdl2-2.0-0_2.32.10+dfsg-6_amd64.deb…
Unpacking libsdl2-2.0-0:amd64 (2.32.10+dfsg-6)…
Selecting previously unselected package ffmpeg.
Preparing to unpack …/ffmpeg_7%3a8.0.1-3ubuntu2_amd64.deb…
Unpacking ffmpeg (7:8.0.1-3ubuntu2)…
Setting up libsdl2-classic:amd64 (2.32.10+dfsg-6)…
Setting up libavdevice62:amd64 (7:8.0.1-3ubuntu2)…
Setting up libsdl2-2.0-0:amd64 (2.32.10+dfsg-6)…
Setting up ffmpeg (7:8.0.1-3ubuntu2)…
Processing triggers for man-db (2.13.1-1build1)…
Processing triggers for libc-bin (2.43-2ubuntu2.3)…

Command line tools

I very quickly then added some standards like build-essentials and jq wget curl

I need NodeJS for some work which comes by way of NVM.

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.7/install.sh | bash
$ source ~/.bashrc
$ nvm install lts/jod
$ nvm use lts/jod

I’m still in the habit of using lts/jod

isaac@isaac-G707:~/Workspaces/myTestApp$ nvm list
->     v22.23.2
default -> lts/jod (-> v22.23.2)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v22.23.2) (default)
stable -> 22.23 (-> v22.23.2) (default)
lts/* -> lts/krypton (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.20.8 (-> N/A)
lts/iron -> v20.20.2 (-> N/A)
lts/jod -> v22.23.2
lts/krypton -> v24.20.0 (-> N/A)

I will need to access my Kubernetes clusters so getting helm

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4
chmod 700 get_helm.sh
./get_helm.sh

and kubectl are first steps

$ sudo snap install kubectl --classic

I also use kubectx for context switching

$ sudo apt update
$ sudo apt install kubectx

In this case, I created my ~/.kube/config config by fetching off another host, but I often pull that from Azure Key Vault.

Thus, I needed access to my secrets and for most things I use AKV still.

I mentioned long ago, but happy to do it again here, some scripts I use to get my passwords:

  • listpass.sh : shows secrets in my vault
  • getpass.sh : gets a specific secret from my vault
  • setpass.sh : sets a secret in my vault
isaac@isaac-G707:~/Workspaces/fbsnew$ cat /usr/local/bin/listpass.sh
#!/bin/bash +x
if [ "$1" == "work" ]; then
  az keyvault secret list --vault-name AWORKKV --subscription "ANEMPLOYERSUBSCRIPTION" -o table
elif [ "$1" == "help" ]; then
  echo "$0 [vault-name/work]"
  echo ""
  echo "Here are your Keyvaults:"
  az keyvault list --subscription Pay-As-You-Go -o table
else
  az keyvault secret list --vault-name $1 --subscription Pay-As-You-Go -o table
fi

isaac@isaac-G707:~/Workspaces/fbsnew$ cat /usr/local/bin/getpass.sh
#!/bin/bash +x
if [ "$2" == "work" ]; then
  az keyvault secret show --vault-name AWORKKV --subscription "ANEMPLOYERSUBSCRIPTION" --name $1 | jq -r .value
elif [ "$1" == "help" ]; then
  echo "$0 [secret name] [vault-name/work]"
  echo ""
  echo "Here are your Key Vaults:"
  az keyvault list --subscription Pay-As-You-Go -o table
else
  az keyvault secret show --vault-name $2 --name $1 --subscription Pay-As-You-Go | jq -r .value
fi

isaac@isaac-G707:~/Workspaces/fbsnew$ cat /usr/local/bin/setpass.sh
#!/bin/bash -x
if [ "$2" == "work" ]; then
  az keyvault secret set --vault-name AWORKKV --subscription "ANEMPLOYERSUBSCRIPTION" --name $1 --description "$3" --value $4
elif [ "$1" == "help" ]; then
  echo "$0 [secret name] [vault-name/work] [description] [value]"
  echo ""
  echo "Here are your Key Vaults:"
  az keyvault list --subscription Pay-As-You-Go -o table
else
  az keyvault secret set --vault-name $2 --name $1 --subscription Pay-As-You-Go --description "$3" --value $4
fi

Azure

This requires the Azure CLI which we can follow these steps to get

$ curl -fsSL 'https://azurecliprod.blob.core.windows.net/$root/deb_install.sh' | sudo bash

HOWEVER this does not actually work with the latest Ubuntu (Resolute) because Microsoft is being a bit lazy.

So you need to do some of the manual steps:

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

$ sudo mkdir -p /etc/apt/keyrings
$ curl -sLS https://packages.microsoft.com/keys/microsoft.asc |
  gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
$ sudo chmod go+r /etc/apt/keyrings/microsoft.gpg

But instead of the documented release step (don’t do this one):

AZ_DIST=$(lsb_release -cs)
echo "Types: deb
URIs: https://packages.microsoft.com/repos/azure-cli/
Suites: ${AZ_DIST}
Components: main
Architectures: $(dpkg --print-architecture)
Signed-by: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/azure-cli.sources

Instead force it to use the last release (Noble):

$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ noble main" | sudo tee /etc/apt/sources.list.d/azure-cli.list

Then you can install:

$ sudo apt-get update
$ sudo apt-get install azure-cli

Next you’ll use az login to authenticate with Azure:

$ az login

I think a bit of my Azure account is wonky as it was trying to authenticate into Azure Subscriptions from my past as well as my “Pay As You Go” and was erroring.

I looked up my Pay-As-You-Go subscription and pulled out the Tenant (which is really just Microsoft’s). Logging in that way worked fine

$ az login --tenant 28c575f6-ade1-4838-8e7c-7e6d1ba0eb4a

$ az account list -o table
Name           CloudName    SubscriptionId                        TenantId                              State    IsDefault
-------------  -----------  ------------------------------------  ------------------------------------  -------  -----------
Pay-As-You-Go  AzureCloud   d955c0ba-13dc-44cf-a29a-8fed74cbb22d  28c575f6-ade1-4838-8e7c-7e6d1ba0eb4a  Enabled  True

AWS

AWS was a bit easier

$ curl -fsSL https://awscli.amazonaws.com/v2/install.sh | bash

Then just use aws configure.

$ export PATH=$PATH:/home/isaac/.local/bin
$ aws configure

Google

Then on to Google for my gcloud commands

$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
$ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
$ sudo apt-get update && sudo apt-get install google-cloud-cli
$ sudo apt install google-cloud-cli-kubectl-oidc google-cloud-cli-gke-gcloud-auth-plugin google-cloud-cli-cloud-run-proxy google-cloud-cli-cloud-build-local
$ gcloud init

Developer tools

I wanted to get hugo next (for this blog)

sudo snap install hugo

I’ll very quick need containers working and forgive me, but I’m still not all in on Podman. I use Docker

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Now check it is running and add our user (isaac) to the docker group

$ sudo systemctl status docker
$ sudo groupadd docker
$ sudo usermod -aG docker $USER

I need Ghostty for my terminal

$ sudo apt install ghostty

And I downloaded Chrome because I do have a lot of things that still need Chrome (I switch between that and Firefox equally)

$ sudo dpkg -i ~/Downloads/google-chrome-stable_current_amd64.deb

I use brew to install a few things so let’s add homebrew next

$ sudo apt install build-essential procps curl file git -y
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.profile
$ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
$ brew
$ brew doctor

I can now use that for hunk when I install Herdr and Hunk

$ curl -fsSL https://herdr.dev/install.sh | sh
$ brew install hunk

For AI work, I’ll want Ollama

$ curl -fsSL https://ollama.com/install.sh | sh

We can see it’s working with an ollama list:

$ ollama list
NAME    ID    SIZE    MODIFIED

My video card is a desktop 3070 but I think it just has 8Gb so I’m somewhat limited on which models I can use

$ nvidia-smi
Tue Sep  1 06:33:25 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.84                 Driver Version: 595.84         CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3070        Off |   00000000:0A:00.0  On |                  N/A |
|  0%   39C    P8             26W /  240W |    1936MiB /   8192MiB |     16%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            5709      G   /usr/bin/gnome-shell                    590MiB |
|    0   N/A  N/A            6035      G   /usr/bin/Xwayland                         8MiB |
|    0   N/A  N/A            6581    C+G   ...exec/xdg-desktop-portal-gnome          5MiB |
|    0   N/A  N/A            7531      G   ...share/Steam/ubuntu12_32/steam          5MiB |
|    0   N/A  N/A            7741      G   ./steamwebhelper                         59MiB |
|    0   N/A  N/A            7781      G   ...am/ubuntu12_64/steamwebhelper         94MiB |
|    0   N/A  N/A           13946      G   .../8763/usr/lib/firefox/firefox        158MiB |
|    0   N/A  N/A           42963    C+G   ...rack-uuid=3190708988185955192        265MiB |
|    0   N/A  N/A           67976      G   /usr/bin/ghostty                        118MiB |
|    0   N/A  N/A           68642    C+G   ...al/zed.app/libexec/zed-editor        168MiB |
|    0   N/A  N/A          290147    C+G   /usr/bin/nautilus                        26MiB |
+-----------------------------------------------------------------------------------------+

Let’s pull and run gemma4:12b

isaac@isaac-G707:~/Workspaces/myTestApp$ ollama run gemma4:12b
pulling manifest
pulling 1278394b6936: 100% ▕████████████████████████████████████████████████████████████████████████████████████████████ ▏ 7.4 GB/7.4 GB   68 MB/s      0s
pulling 675ad6e68101: 100% ▕████████████████████████████████████████████████████████████████████████████████████████████ ▏ 174 MB/175 MB   28 MB/s      0s
verifying sha256 digest
writing manifest
success
>>> Tell me a short story about a penguin and a robot.

We can see a short recording of it making a story about a robot and a penguin:

And Agy right off the bat (though you know I would have liked Gemini CLI more)

$ curl -fsSL https://antigravity.google/cli/install.sh | bash

I went back to my article on Agy Status-Lines and went to setup the first one.

$ git clone https://codeberg.org/jochenkirstaetter/agy-statusline.git
$ cd agy-statusline
$ cp ./statusline.sh ~/.gemini/antigravity-cli/
$ chmod 755 ~/.gemini/antigravity-cli/statusline.sh

I had noted back then that the “NerdFonts” were not working.

This is actually easy to fix.

Go to this fonts page and download the font “JetBrainsMono Nerd Font”(comes down as a zip)

/img/2026-09-bywindows-12.png

Then extract it to /usrlocal/share/fonts

/img/2026-09-bywindows-13.png

# I errantly dumped the zip into ~/Downloads where all the .ttfs now where.
# So i just copied them over

$ cd /usr/local/share/fonts
$ sudo mv /home/isaac/Downloads/*.ttf ./

Then update your font cache (or reboot)

$ sudo fc-cache -f -v

Now do the rest of the steps

$ cp ./statusline.sh ~/.gemini/antigravity-cli/
$ chmod 755 ~/.gemini/antigravity-cli/statusline.sh
$ vi ~/.gemini/antigravity-cli/settings.json
$ cat ~/.gemini/antigravity-cli/settings.json
{
  "enableTelemetry": false,
  "statusLine": {
    "type": "",
    "command": "~/.gemini/antigravity-cli/statusline.sh",
    "enabled": true
  },
  "trustedWorkspaces": [
    "/home/isaac/Workspaces/authentik"
  ]
}

Agy now looks right

/img/2026-09-bywindows-14.png

Fun

I added steam

$ sudo dpkg -i ~/Downloads/steam_latest.deb

It was a bit glitchy at the start but I did get the login to finally work.

/img/2026-09-byewindows-05.png

even though my default monitor is on the right, at least for Everdell it keeps firing it up on the leftmost screen and I have to go windowed mode to move it. So far that has been the only annoyance.

VPN

Not sure where to really categorize VPNs, but I need one and I only use ones not based in the US.

Presently that is Mullvad for me.

$ sudo curl -fsSLo /usr/share/keyrings/mullvad-keyring.asc https://repository.mullvad.net/deb/mullvad-keyring.asc

$ echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable stable main" | sudo tee /etc/apt/sources.list.d/mullvad.list

$ sudo apt update && sudo apt install mullvad-vpn
Hit:1 http://us.archive.ubuntu.com/ubuntu resolute InRelease
Hit:2 https://download.docker.com/linux/ubuntu resolute InRelease
Get:3 https://repo.steampowered.com/steam stable InRelease [3,622 B]
Hit:4 http://us.archive.ubuntu.com/ubuntu resolute-updates InRelease
Hit:5 https://packages.microsoft.com/repos/azure-cli noble InRelease
Hit:6 https://dl.google.com/linux/chrome-stable/deb stable InRelease
Hit:7 http://us.archive.ubuntu.com/ubuntu resolute-backports InRelease
Hit:8 http://security.ubuntu.com/ubuntu resolute-security InRelease
Get:10 https://packages.cloud.google.com/apt cloud-sdk InRelease [1,442 B]
Get:11 https://repository.mullvad.net/deb/stable stable InRelease [3,536 B]
Hit:9 https://packages.buildkite.com/helm-linux/helm-debian/any any InRelease
Get:12 https://repository.mullvad.net/deb/stable stable/main amd64 Packages [1,376 B]
Get:13 https://packages.cloud.google.com/apt cloud-sdk/main amd64 Packages [947 kB]
Get:14 https://packages.cloud.google.com/apt cloud-sdk/main all Packages [299 kB]
Get:15 https://packages.cloud.google.com/apt cloud-sdk/main i386 Packages [172 kB]
Fetched 1,429 kB in 2s (579 kB/s)
24 packages can be upgraded. Run 'apt list --upgradable' to see them.
The following package was automatically installed and is no longer required:
  grub-pc-bin
Use 'sudo apt autoremove' to remove it.

Installing:
  mullvad-vpn

Summary:
  Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 24
  Download size: 112 MB
  Space needed: 392 MB / 918 GB available

Get:1 https://repository.mullvad.net/deb/stable stable/main amd64 mullvad-vpn amd64 2026.4 [112 MB]
Fetched 112 MB in 17s (6,626 kB/s)
Selecting previously unselected package mullvad-vpn.
(Reading database… 249310 files and directories currently installed.)
Preparing to unpack …/mullvad-vpn_2026.4_amd64.deb…
Unpacking mullvad-vpn (2026.4)…
Setting up mullvad-vpn (2026.4)…
Created symlink '/etc/systemd/system/multi-user.target.wants/mullvad-daemon.service' → '/usr/lib/systemd/system/mullvad-daemon.service'.
Created symlink '/etc/systemd/system/mullvad-daemon.service.wants/mullvad-early-boot-blocking.service' → '/usr/lib/systemd/system/mullvad-early-boot-blocking.service'.
Creating apparmor profile
Processing triggers for hicolor-icon-theme (0.18-2build1)…
Processing triggers for gnome-menus (3.38.1-1ubuntu1)…
Processing triggers for desktop-file-utils (0.28-1build1)…

Let’s test it by connecting to an endpoint in a stable democracy to my north

/img/2026-09-bywindows-06.png

Then we can use Google Maps to see if they have the right name for the lake not that new name from tiny dictator

/img/2026-09-bywindows-07.png

Well, here I let a bit of my feelings show, but I live in Minnesota which dealt with extrajudicial kidnappings all winter so forgive me if I miss being in a stable democracy.

Okay, let’s move on and recap

Summary

In ditching Windows we covered setting up a lot of CLI tools:

  • jq, hunk, herdr, ollama (also a service), zed, brew, jq, aws/azure/google cli’s, imagemagick, ffmpeg

We added some key desktop apps

  • Chrome, Mullvad (VPN), and Steam for games

We, of course, added a terminal app, Ghostty since, well, I just like it better.

Not written above, I also added Audacity for some later audio work I plan and VLC for video playback. And I will add OBS Studio soon.

Some of the minor issues have really been minor - the old TCL Roku 50" TV that is my “calendar” TV isn’t quite as sharp with two panes of browsers tabs open. I’m not sure what resolution Windows was able to push, but on HDMI with Ubuntu, its kind of tapped out at 1080p. I can still see my work/home cal’s just fine so I’m not too concerned.

The rest of my world really comes down to:

  • Editors (like Zed and VS Code)
  • Web things (e.g. watching YouTube, bilibili or Hulu)
  • Chats (messenger apps)
  • A few games here and there

Maybe I’m just old, but I really do not see anything I’m missing.

I was already using OBS and GIMP in Windows so adding them in Linux was the same experience. The only app I use that now I won’t be able to is Cyberlink Powerdirector. I’ll just have to get used to Blender.

I’m wishing Ubuntu just had a PIN to login like Windows did, but it’s not a bad habit to develop always typing my login password.