Setting Up My Development Environment

Why am I doing this?

I am doing this because I got a new laptop (Thinkpad P14s Gen 1 AMD) and need to setup it up and would like to document the process.

I am hoping this will become a tool for me in the future. Allowing me to review previous choices and see if there are any changes I would like to make when I have to reconfigure another machine.


What I am using?

Kubuntu Linux

Kubuntu Website

In the past I’ve used Fedora and OpenSUSE Tumbleweed. I appreciate Fedora’s software updates and Tumbleweed high level of configuration. I find that there is overall more support for Ubuntu and have ran into apps such as Playwright that are only available on Ubuntu. If it was not for a couple apps I could not get working on Fedora, it would be my first choice.

For the desktop environment, I have been defaulting to KDE lately. I really like tiling window managers, but do not like the deep configuration to get them going. There is an extension available for KWin called Kronkite. This has allowed me to get all the tiling window features I want while getting the whole KDE desktop environment experience.

Ghostty Terminal

Ghostty Github

Alacritty is the terminal emulator I used previously. I recently switched to Ghostty to try out the new thing. I haven’t ran into anything that has pushed me away from it.

ZSH Shell

ZSH Website

The plugin ecosystem that ZSH has is what has kept me using it. oh-my-zsh is probably the best example of it.

I have heard good things about the Fish shell, just have not gotten around to trying it yet.

Mise

Mise Github

mise-en-place has become my favorite tool for managing my development environment tooling. You have a global configuration as well as local configurations in any of your project directories. It uses these to install the language toolchains or language specific packages as well as point to the versions indicated by the configuration with the highest hierarchy.

It uses a simple toml configuration and simply works.

Neovim

Neovim Github

I previously used VSCode for years before converting to Neovim. I started getting some wrist pain from using my mouse a lot. That started my journey of ergonomic keyboards, which then brought me to seeking out a better way of interacting with my code. This ultimately brought me to Neovim.

It’s been a game changer for me. Having to learn how my editor works has allowed me to figure out how to make it work as efficiently as possible.

Tmux

Tmux Github

While working in the terminal, this has become a must have to avoid having multiple windows open and having to click back and forth.

I am able to quickly context switch to different project with sessions, allowing me to leave background tasks running for long-term testing as well as easily pick up from where I left off.

Kanata

Kanata Github

Homerow mods greatly enhance the typing experience by allowing you to type with minimal long straining movements. I previously used Kmonad but ran into limitations if I wanted to hold down one of my remapped buttons without it engaging the homerow mods. For example if I want to hold down ‘j’ in Neovim to move down rows.


How I do it?

1. Install Ubuntu

Download the Ubuntu ISO from https://kubuntu.org/

Use BalenaEtcher to flash the Ubuntu ISO to a USB drive. Downloadable from here https://etcher.balena.io/#download-etcher

Install Ubuntu onto the computer with the USB drive.

2. Get dotfiles

Setup SSH keys

Install Git

sudo dnf install git -y

Clone the Dotfiles repository to the home directory for my user.

# editable
git clone git@gitlab.com:david-kalmakoff/dotfiles.git ~/dotfiles
# non-editable
git clone https://gitlab.com/david-kalmakoff/dotfiles.git ~/dotfiles

3. Run setup commands

Move to the dotfiles directory.

cd ~/dotfiles

Test that the script is working with the following command.

./setup-ubuntu.sh order
# output: initial zsh docker mise neovim tmux

Then run the setup script in the order given

./setup-ubuntu.sh initial
./setup-ubuntu.sh zsh
./setup-ubuntu.sh docker
./setup-ubuntu.sh mise
./setup-ubuntu.sh neovim
./setup-ubuntu.sh tmux
./setup-ubuntu.sh ghostty
./setup-ubuntu.sh kanata

4. Final tooling setup

Neovim in place and allow it to download it’s plugins.

nvim .

Run Tmux and install it’s plugins

tmux
# install plugins with: <C-Space>I

5. Setup Kronkite

Kronkite is available by going to: System Settings > Window Management > KWin Scripts. Then clicking the Get New... button at the top right. There you can search and install Kronkite. You will then have to activate and change any of the settings you need to.

6. Install applications

I have a standard list of applications I start with. I try to keep this as minimal as possible and add programs as I run into a need for them. This

  • Brave browser
  • Proton mail
  • Joplin
  • Spotify
  • Zed or VSCode (trying Zed for this install)
  • Calibre
  • Nextcloud
  • Remmina

7. Setup hotkeys

I have a backup of my keyboard shortcuts for KDE. I will import them after all my applications have been installed.

8. Update Kanata config

The Kanata config needs the path to the keyboard device. I use the laptop keyboard in the /dev/input/by-path/ directory.