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
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
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
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-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
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
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
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.