The process of setting up a good development environment takes time. You often switch between tools until it feel comfortable. I have been going through the same process and I feel I am almost in a stable state. Here is my current setup so that I don’t have to undergo the evolution again.
Os - Debian
I have been using Debian GNU/Linux for a while and haven’t find a reason to switch. It keeps perfect balance between stability, security and availability of latest version of softwares.
Display and Window Managers
I recently switched to i3wm, a tiling window manager
and polybar a status bar. That made me
switch from gdm to
lightdm as the former spawns a lot of unnecessary services.
Debian provides a meta package
i3 that installs
i3wm with necessary tools.
sudo apt-get install i3 \ feh \ # utility to set wallpaper brightnessctl \ pulseaudio-utils \ # volume control utility
Polybar has not been packaged for Debian yet. Building from source is straight
forward once dependencies are met.
sudo apt-get install libcairo2 libcairo2-dev \ libxcb-composite0-dev \ libxcb-ewmh-dev \ libxcb-icccm4-dev \ libxcb-image0-dev \ libxcb-util0-dev \ libxcb-xfixes0-dev \ python-xcbgen \ xcb-proto \ libcurl4 \ libcurl4-gnutls-dev \ fonts-font-awesome \ # icon support fonts-noto-mono \ fonts-noto-ui-core # clone the repo git clone --recursive --depth=1 https://github.com/polybar/polybar cd polybar git checkout 3.3.1 -b b3.3.1 # checkout version 3.3.1 ./build.sh
polybar can be customized with configuration files.
Here are my configs
sudo apt-get install lightdm
After installation, Debian will prompt you to choose default display manager.
Logout and select
lightdm settings. Done!!
Shell and Terminal
Fish + tmux is good duo that you may want to try.
fish gives better predictions and auto-completion than bash.
tmux lets you
control a number of terminals from a single window.
I use alacritty as my terminal. It is a fast, gpu accelerated terminal written in Rust.
Alacritty has to be built from source since Debian doesn’t have it packaged yet. You need to have rust and cargo installed.
sudo apt-get install cmake pkg-config libfreetype6-dev libfontconfig1-dev libxcb-xfixes0-dev cargo build --release
To create a desktop entry
sudo cp target/release/alacritty /usr/local/bin # or anywhere else in $PATH sudo cp extra/logo/alacritty-term.svg /usr/share/pixmaps/Alacritty.svg sudo desktop-file-install extra/linux/alacritty.desktop sudo update-desktop-database
To make it default terminal app, run
sudo update-alternatives --config x-terminal-emulator
and select alacritty.
- Fish and tmux
Both fish and tmux are availabe in debian package repo.
sudo apt-get install fish tmux chsh -s `which fish` # make fish default shell
Editor - GNU Emacs
I use GNU Emacs a highly customizable text editor with Henrik Lissner’s doom-emacs configuration.
- GNU Emacs
GNU Emacs releases are available in Debian package repository. I use GNU Emacs 27 which is based on master branch. To build from source,
sudo apt-get build-dep emacs # install dependencies git clone https://github.com/emacs-mirror/emacs.git cd emacs ./autogen.sh ./configure make sudo make install
- Doom Emacs
# copy private configs to ~/.doom.d # clone git clone https://github.com/hlissner/doom-emacs/ ~/.emacs.d cd .emacs.d git checkout develop ./bin/doom refresh
This will install all the required Elisp packages.
Doom Emacs depends on several tools for each module to function properly. We will see configuring Doom Emacs modules in next part. Thank you!