I recently got a new work computer and went through the process of setting it up. In the likely event that I need to go trough this process again I’ve listed most of the tools and documented the installation process of them.
The list is non-exhaustive as I’m sure I’ve forgotten some kind of obscure linux CLI tool I use once a month. Whenever I discover something new or swap out a tool I’ll document it here.
My development workflow revolves heavily around WSL so the biggest section is related to getting a nice Linux development environment inside WSL setup. Hopefully you’ll find something cool in here.

Windows software

Everything except Syncthing can be installed using winget, copy paste what you want from below:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
winget install --id SlackTechnologies.Slack
winget install --id Spotify.Spotify
winget install --id reMarkable.reMarkableCompanionApp
winget install --id Brave.Brave
winget install --id Obsidian.Obsidian
winget install --id MOTU.MSeries
winget install --id ShareX.ShareX  
winget install --id Microsoft.Powershell
winget install --id DEVCOM.JetBrainsMonoNerdFont
winget install --id Alacritty.Alacritty
winget install --id Microsoft.VisualStudioCode
winget install --id 7zip.7zip
winget install --id OSGeo.QGIS
winget install --id Microsoft.PowerToys
winget install --id equalsraf.win32yank

Syncthing

the winget installer (v1.27.11) did not work for me, instead use the syncthing windows installer found here: https://github.com/Bill-Stewart/SyncthingWindowsSetup/
The installer url is from: https://syncthing.net/downloads/

HP machine specific

Powershell script to remove bloatware from hp: https://gist.github.com/mark05e/2db81671f39a041a5992a64a77748dc7

WSL

list available distros:

1
wsl --list --online 

Install latest ubuntu version as of september 2024

1
wsl --install -d Ubuntu-24.04

The -d flag lets you specify the distro you want to install instead of installing the default, which might be an outdated ubuntu version.

Programming languages

Python

I use pyenv to manage python versions and poetry to manage dependencies within a project. For pyenv use the automatic installer found here:

1
curl https://pyenv.run | bash

Now install poetry using pipx. If you do not have pipx installed follow the pipx installation instructions. Then install poetry:

1
pipx install poetry

The poetry installation instructions are from here.

Rust

Install rust if you don’t already have it via rustup: https://rustup.rs/ This will also install cargo, the rust package manager which we can use in the next sections.

Go

WSL/Ubuntu guide available here.
Easiest seems to use snap:

1
sudo snap install --classic go

Github CLI

Follow installation notes here: https://github.com/cli/cli#installation see specific instructions for linux here: https://github.com/cli/cli/blob/trunk/docs/install_linux.md

Now you can authenticate with github:

1
gh auth login

Dotfiles / Chezmoi

On WSL, seems the easiest is just to use snap

1
snap install chezmoi --classic

The --classic flag makes it behave as a traditionally packaged app which means full access to the system. Otherwise the snap has read and/or write rights only in its own install space and selected areas.

If you can’t find it after install (chezmoi is unknown command): The snap binary and desktop directories will not automatically be added to your environment variables. Adding the snap bin to path resolved it, add this to .zshrc:

1
export PATH=$PATH:/snap/bin

See this thread for more info

Now you can clone your dotfiles repo using https (instead of ssh which is the default in chezmoi docs)

1
chezmoi init https://github.com/haraldwb/dotfiles-hb

This will place the dotfiles in the chezmoi folder which is ~/.local/share/chezmoi/

You can see changes with:

1
chezmoi diff

And apply them with:

1
chezmoi apply

neovim / Lazyvim

I’m using Neovim with the Lazyvim setup. Lazyvim has two dependencies we need to install first, ripgrep and find files.

ripgrep(rg)

Installation instructions are available here. You can either fetch the latest binary from the release page and replace the url and file in the two lines below

1
2
curl -LO https://github.com/BurntSushi/ripgrep/releases/download/14.1.0/ripgrep_14.1.0-1_amd64.deb
sudo dpkg -i ripgrep_14.1.0-1_amd64.deb

Or if you have rust installed you can install it with cargo

1
cargo install ripgrep

find files (fd)

Same general procedure as ripgrep. Installation instructions are available here. find files aka fd installation: Same procedure as ripgrep, find latest release here and replace the url below

1
2
curl -LO https://github.com/sharkdp/fd/releases/download/v10.1.0/fd_10.1.0_amd64.deb
sudo dpkg -i fd_10.1.0_amd64.deb

or use cargo (from here):

1
cargo install fd-find

Now we have Lazyvim dependencies installed and we can install Neovim. I prefer to build from source in order to get the latest version. First we need to ensure we have build prerequisites installed: https://github.com/neovim/neovim/blob/master/BUILD.md#ubuntu--debian

Now we can follow the quickstart guide here: https://github.com/neovim/neovim/blob/master/BUILD.md

zsh

zsh is one of the few packages where ubuntu has a recent version:

1
sudo apt-get install zsh

We can now change the default shell to zsh with:

1
chsh -s $(which zsh)

Zsh plugins

This section is directly related to my zshell config:

Clone powerlevel10k repo:

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k

From https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#manual

Install eza which is a modern replacement of ls, follow instructions here: https://github.com/eza-community/eza/blob/main/INSTALL.md#debian-and-ubuntu

The rest of the plugins are installed automatically by zinit.

tmux

Built it from version control, you might need some dependencies listed here: https://github.com/tmux/tmux/wiki/Installing Check the debian section if you’re using ubuntu

1
2
3
4
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make

Plugins

tmux plugin manager (tpm) is used to manage plugins (installed separately) once tmux plugin manager is installed use prefix + I to install the plugins in your tmux.conf file.

Lazygit

Lazygit is a simple terminal UI for git commands. Build from source is easiest to get the latest version Ensure you have go installed, if not see go section above. Then run:

1
2
3
git clone https://github.com/jesseduffield/lazygit.git
cd lazygit
go install