Post Installation Guide

Z Shell Initial Configuration

Login for the first time with the user that you created in the end of the Installation Guide. The Z Shell configuration function for new users (zsh-newuser-install) will appear. You can safely skip this configuration as we will later on install the oh-my-zsh which will replace the configuration generated by zsh-newuser-install.

Network Access Configuration

ip link

Find the name of your interface. In my case, interface name is enp0s3.

cat <<EOF | sudo tee -a  /etc/netctl/ethernet-dhcp
Description='A basic dhcp ethernet connection'
Interface=enp0s3
Connection=ethernet
IP=dhcp
EOF

sudo pacman -S ifplugd
sudo systemctl start netctl-ifplugd@<NETWORK_INTERFACE>.service
sudo systemctl enable netctl-ifplugd@<NETWORK_INTERFACE>.service

For wireless interfaces, in my case wlp2sp, enable service and later use wifi-menu tool:

sudo systemctl start netctl-auto@<WIRELESS_INTERFACE>.service
sudo systemctl enable netctl-auto@<WIRELESS_INTERFACE>.service

Don’t forget to replace <NETWORK_INTERFACE> and <WIRELESS_INTERFACE> in above command with the interface name that your system has.

Update Package Repository

sudo pacman -Sy

Sound Configuration

No special installation necessary since the needed GNU/Linux kernel modules are already present on your system and udev will automatically detect your hardware and select needed drivers at boot time. However, your sound may be initially muted. In that case install alsa-utils to gain alsamixer tool which can be used to un-mute the sound card.

sudo pacman -S alsa-utils

The MM label below a channel indicates that the channel is muted, and 00 indicates that it is open. Scroll to the Master and PCM channels with the left and right keys and unmute them by pressing the m key. Use the up arrow key to increase the volume and obtain a value of 0 dB gain.

To enable your microphone, switch to the Capture tab with F4 and enable a channel with Space. Set the recording volume with the up arrow key.

AUR Package Management Tool

There are a couple of packages that I am using in this document that are missing from the official Arch Linux repository. They are available in AUR which means that the pacman can not be used to install such packages. For this purpose, pacaur will be used instead.

sudo pacman -S expac yajl --noconfirm
mkdir ~/temp
cd ~/temp
gpg --recv-keys --keyserver hkp://pgp.mit.edu 1EB2638FF56C0C53
curl -o PKGBUILD https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=cower
makepkg -i PKGBUILD --noconfirm
curl -o PKGBUILD https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=pacaur
makepkg -i PKGBUILD --noconfirm
cd ~
rm -r ~/temp

Text Editor Installation

Vim

sudo pacman -S gvim

This is not a mistake; you need to install the gvim instead of the vim package. The reason is that the gvim package has a Vim compiled with the +clipboard support. Yes, you need the +clipboard support! And yes, you can still run the Vim from command line.

Visual Studio Code

pacaur -S code

Download Manager

sudo pacman -S wget

If you prefer to use a GUI tool instead, install uget using sudo pacman -S uget.

Versioning Control

sudo pacman -S git perl-authen-sasl perl-net-smtp-ssl perl-mime-tools

Configure your identity:

git config --global user.name "<USERNAME>"
git config --global user.email <EMAIL>

Don’t forget to replace <USERNAME> and <EMAIL> in above command with your user name and email, respectively. This information will be use to associate the commits that you make with your identity.

Set push behavior to simple:

git config --global push.default simple

Configure aliases:

git config --global alias.incoming '!git fetch && git log --pretty=oneline --abbrev-commit ..@{u}'
git config --global alias.outgoing 'log --pretty=oneline --abbrev-commit @{u}..'

Configure pull with rebase:

git config --global pull.rebase true

Install and Configure a Modern Shell

Install oh-my-zsh by executing the following command:

sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

After executing the above command, follow the on-screen setup instructions.

After the “oh-my-zsh” is successfully installed, configure a theme by setting the value for ZSH_THEME into ~/.zshrc:

ZSH_THEME="<THEME_NAME>"

“oh-my-zsh” has a theming support and few of possible good themes are: crunch, nebirhos, wezm, ys and robbyrussell.

X Server

sudo pacman -S xorg-server xorg-apps xorg-xinit xorg

When asked, it is generally better to install xf86-input-libinput, especially on laptops.

Now, create file ~/.xserverrc and add following lines:

#!/bin/sh
exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR

Window Manager

sudo pacman -S i3 rofi

Configure i3 to be launched when Xorg starts:

cp /etc/X11/xinit/xinitrc ~/.xinitrc
vim ~/.xinitrc

Remove unnecessary lines and add the following line to the end:

exec i3

Optionally, if there is a need for a different keyboard layout, add the following before exec i3 line: setxkbmap hr

Terminal Emulator

sudo pacman -S xterm

Edit ~/.Xresources and add:

! XTerm settings
xterm*faceName: DejaVu Sans Mono:size=9:antialias=true
xterm*pointerColor: white
xterm*pointerColorBackground: black
xterm*cursorColor: yellow
xterm*cursorBlink: true
xterm*saveLines: 10000
xterm*foreground: white
xterm*background: black
xterm*termName: xterm-256color
xterm*selectToClipboard: true
xterm*charClass: 33:48,36-47:48,58-59:48,61:48,63-64:48,95:48,126:48
xterm*fullscreen: never

! Xft settings
Xft.dpi:                    96
Xft.antialias:              true
Xft.rgba:                   rgb
Xft.hinting:                true
Xft.hintstyle:              hintslight

! ROFI Color theme
rofi.color-enabled: true
rofi.color-window: #393939, #393939, #268bd2
rofi.color-normal: #393939, #ffffff, #393939, #268bd2, #ffffff
rofi.color-active: #393939, #268bd2, #393939, #268bd2, #205171
rofi.color-urgent: #393939, #f3843d, #393939, #268bd2, #ffc39c

Improve Font Rendering

Disable bitmaps fonts:

sudo ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d

Install additional fonts:

sudo pacman -S ttf-bitstream-vera ttf-inconsolata ttf-ubuntu-font-family ttf-dejavu ttf-freefont ttf-linux-libertine ttf-liberation wqy-zenhei

Improve Look of GUI Applications

sudo pacman -S gnome-themes-standard

Autostart X At Login

Edit the ~/.zshrc and add following into it:

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx &> /dev/null

Web Browser

sudo pacman –S chromium

Screenshot and Image Manipulation Tool

sudo pacman -S imagemagick

i3 Configuration

Create a shell script in /bin/i3lock.sh with the following contents:

#!/bin/bash

IMAGE=/tmp/i3lock.png

# All options are here: http://www.imagemagick.org/Usage/blur/#blur_args
BLURTYPE="5x2"

# Get the screenshot, add the blur and lock the screen with it
import -window root $IMAGE
convert $IMAGE -blur $BLURTYPE $IMAGE
i3lock -i $IMAGE
rm $IMAGE

Make the script /bin/i3lock.sh executable by executing sudo chmod +x /bin/i3lock.sh.

Edit ~/.config/i3/config and add the following to the end of a file:

set $Locker /bin/i3lock.sh && sleep 1

set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r)reboot, (Shift+s) shutdown
mode "$mode_system" {
  bindsym l exec --no-startup-id $Locker, mode "default"
  bindsym e exec --no-startup-id i3-msg exit, mode "default"
  bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default"
  bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default"
  bindsym r exec --no-startup-id systemctl reboot, mode "default"
  bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"

  # back to normal: Enter or Escape
  bindsym Return mode "default"
  bindsym Escape mode "default"
}

bindsym $mod+Escape mode "$mode_system"

bindsym $mod+d exec "rofi -show drun"
bindsym $mod+Tab exec "rofi -show window"

Also, delete the line bindsym $mod+d exec dmenu_run from ~/.config/i3/config.

Set User Locale

Open ~/.zshrc and add following line to the end:

export LANG=en_US.UTF-8
export LC_MESSAGES="C"
export LC_ALL=en_US.UTF-8

Text Editor Configuration

Edit the file ~/.zshrc and add following into it:

export VISUAL=vim
export EDITOR=vim

Add the following lines to the ~/.vimrc to make Vim more user friendly:

set nocompatible
filetype plugin on
filetype indent on
syntax on
set number
set relativenumber
set mouse=a
set nobackup
set nowb
set noswapfile
set nofoldenable
set showtabline=2
set cursorline
highlight CursorLine cterm=NONE ctermbg=DarkGray ctermfg=White
autocmd WinEnter * setlocal cursorline
autocmd WinLeave * setlocal nocursorline
set clipboard=unnamedplus
set ignorecase
set smartcase
set incsearch
set hlsearch
nnoremap <silent> <Space> :nohlsearch<Bar>:echo<CR>
set wildmenu
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
xnoremap <expr> p 'pgv"'.v:register.'y'
map <C-Left> <C-w>h
map <C-Down> <C-w>j
map <C-Up> <C-w>k
map <C-Right> <C-w>l
map <S-Right> :tabn<CR>
map <S-Left>  :tabp<CR>
set backspace=indent,eol,start
set noexpandtab
set copyindent
set preserveindent
set softtabstop=0
set shiftwidth=4
set tabstop=4
command! W :execute ':silent w !sudo tee % > /dev/null' | :edit!
set belloff=all

VIM Plugins

VimPlug

Install the VimPlug:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Edit the ~/.vimrc and add the following at the end:

call plug#begin('~/.vim/plugged')
call plug#end()

VimPlug is a plugin manager for VIM and it requires that each plugin is added between the lines call plug#begin() and call plug#end() in a ~/.vimrc file. Be sure that your plugins are listed between those two lines. Otherwise, plugins will not be installed correctly.

YouCompleteMe

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'valloric/youcompleteme'

Now, install the plugin:

:source %
:PlugInstall

Install the clang and cmake package:

sudo pacman -S clang cmake

Compile the ycm_core.so:

cd ~/.vim/plugged/youcompleteme
./install.sh --clang-completer --system-libclang

Add following line to the ~/.vimrc:

let g:ycm_confirm_extra_conf = 0
let g:ycm_autoclose_preview_window_after_insertion = 1
let g:ycm_autoclose_preview_window_after_completion = 0
let g:ycm_add_preview_to_completeopt = 1

lightline-vim

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'itchyny/lightline.vim'

Now, install the plugin:

:source %
:PlugInstall

Add the following line to the ~/.vimrc:

set laststatus=2

Tagbar

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'majutsushi/tagbar'

Now, install the plugin:

:source %
:PlugInstall

Install the ctags package:

sudo pacman -S ctags

Add the following line to the ~/.vimrc:

nmap <F8> :TagbarToggle<CR>
autocmd VimEnter * nested :call tagbar#autoopen(1)
autocmd BufEnter * nested :call tagbar#autoopen(0)

The NERD tree

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'scrooloose/nerdtree'

Now, install the plugin:

:source %
:PlugInstall

Add the following to the ~/.vimrc:

autocmd BufWinEnter * :silent NERDTreeMirror
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
map <F7> :NERDTreeToggle<CR>
nnoremap <silent><F3> :NERDTreeFind<CR>
autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p
let NERDTreeShowHidden=1
let NERDTreeAutoDeleteBuffer = 1
let NERDTreeMinimalUI = 1
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif

ctrlp.vim

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'ctrlpvim/ctrlp.vim'

Now, install the plugin:

:source %
:PlugInstall

Add the following to the ~/.vimrc:

let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPLastMode'
let g:ctrlp_extensions = ['line', 'dir', 'smarttabs']
let g:ctrlp_show_hidden = 1
let g:ctrlp_user_command = 'ag %s -l --nocolor -f -g ""'

fugitive.vim

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'tpope/vim-fugitive'

Now, install the plugin:

:source %
:PlugInstall

vim-bracketed-paste

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'conradirwin/vim-bracketed-paste'

Now, install the plugin:

:source %
:PlugInstall

vim-trailing-whitespace

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'bronson/vim-trailing-whitespace'

Now, install the plugin:

:source %
:PlugInstall

vim-lastplace

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'farmergreg/vim-lastplace'

Now, install the plugin:

:source %
:PlugInstall

vim-gitgutter

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'airblade/vim-gitgutter'

Now, install the plugin:

:source %
:PlugInstall

Add the following to the ~/.vimrc:

let g:gitgutter_sign_column_always=1

gitv

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'gregsexton/gitv'

Now, install the plugin:

:source %
:PlugInstall

vim-clang-format

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'rhysd/vim-clang-format'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

let g:clang_format#command = 'clang-format'
let g:clang_format#code_style = "LLVM"
let g:clang_format#style_options = {
        \"TabWidth" : 4,
        \"UseTab" : "Always",
        \"ColumnLimit" : 150,
        \"AllowShortIfStatementsOnASingleLine" : "false",
        \"BreakBeforeBraces" : "Linux",
        \"Language" : "Cpp",
        \"AllowShortFunctionsOnASingleLine" : "Empty",
        \"BinPackParameters" : "false",
        \"BinPackArguments" : "false",
        \"AllowAllParametersOfDeclarationOnNextLine" : "true",
        \"AlignTrailingComments" : "true",
        \"IndentCaseLabels" : "true",
        \"SpaceAfterCStyleCast" : "true",
        \"SortIncludes" : "false"
        \}

NERD Commenter

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'scrooloose/nerdcommenter'

Now, install the plugin:

:source %
:PlugInstall

Configure the shortcut:

nnoremap ,c :call NERDComment(0,"toggle")<CR>
vnoremap ,c :call NERDComment(0,"toggle")<CR>

python-mode

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'klen/python-mode'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

let g:pymode_doc = 1
let g:pymode_doc_key = 'K'
let g:pymode_rope = 1

vim-go

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'fatih/vim-go'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_auto_type_info = 1
let g:go_fmt_command = "goimports"

ctrlp-smarttabs

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'davidegx/ctrlp-smarttabs'

Now, install the plugin:

:source %
:PlugInstall

ctrlsf.vim

Install the the_silver_searcher package:

sudo pacman -S the_silver_searcher

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'dyng/ctrlsf.vim'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

nmap     <C-F>f <Plug>CtrlSFPrompt
vmap     <C-F>f <Plug>CtrlSFVwordPath
vmap     <C-F>F <Plug>CtrlSFVwordExec
nmap     <C-F>n <Plug>CtrlSFCwordPath
nmap     <C-F>p <Plug>CtrlSFPwordPath
nnoremap <C-F>o :CtrlSFOpen<CR>
nnoremap <C-F>t :CtrlSFToggle<CR>
inoremap <C-F>t <Esc>:CtrlSFToggle<CR>
nmap     <C-F>l <Plug>CtrlSFQuickfixPrompt
vmap     <C-F>l <Plug>CtrlSFQuickfixVwordPath
vmap     <C-F>L <Plug>CtrlSFQuickfixVwordExec
let g:ctrlsf_auto_close = 0
let g:ctrlsf_case_sensitive = 'smart'
let g:ctrlsf_context = '-B 0 -A 0'
let g:ctrlsf_default_root = 'cwd'
let g:ctrlsf_position = 'bottom'
let g:ctrlsf_winsize = '20%'

badwolf

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'sjl/badwolf'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

colorscheme badwolf
highlight CursorLine cterm=NONE ctermbg=DarkYellow ctermfg=White

syntastic

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'scrooloose/syntastic'

Now, install the plugin:

:source %
:PlugInstall

syntastic plugin has checking plugins for a LARGE list of programming languages. If you gonna work on Linux (obviously, since you are reading this), then I strongly recommend you to install the ShellCheck.

Configure the plugin:

let g:syntastic_check_on_open = 1
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1

gundo.vim

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'sjl/gundo.vim'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

nnoremap <silent><F5> :GundoToggle<CR>
let g:gundo_help = 0

ycm-generator

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'rdnetto/YCM-Generator', { 'branch': 'stable'}

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

nnoremap <silent><F9> :YcmGenerateConfig<CR>

vim-easymotion

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'easymotion/vim-easymotion'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

let g:EasyMotion_off_screen_search = 0
let g:EasyMotion_verbose = 0
let g:EasyMotion_verbose = 0

vim-numbertoggle

Edit the ~/.vimrc with Vim and add the following line between lines call plug#begin() and call plug#end():

Plug 'jeffkreeftmeijer/vim-numbertoggle'

Now, install the plugin:

:source %
:PlugInstall

Configure the plugin:

let g:NumberToggleTrigger="<F2>"

Visual Studio Code Plugins

To install a plugin, just execute the command listed in the plugin installation steps in a terminal.

Bracket Pair Colorizer

Install the plugin:

code --install-extension CoenraadS.bracket-pair-colorizer

Path Intellisense

Install the plugin:

code --install-extension christian-kohler.path-intellisense

Bookmarks

Install the plugin:

code --install-extension alefragnani.Bookmarks

VSCodeVim

Install the plugin:

code --install-extension vscodevim.vim

AutoFileName

Install the plugin:

code --install-extension JerryHong.autofilename

HTML Snippets

Install the plugin:

code --install-extension abusaidm.html-snippets

jshint

Install the plugin:

code --install-extension dbaeumer.jshint
sudo npm install -g jshint

Docker

Install the plugin:

code --install-extension PeterJausovec.vscode-docker

Auto Close Tag

Install the plugin:

code --install-extension formulahendry.auto-close-tag

Auto Rename Tag

Install the plugin:

code --install-extension formulahendry.auto-rename-tag

ESLint

Install the plugin:

code --install-extension dbaeumer.vscode-eslint
sudo npm install -g eslint

Go

Install the plugin:

code --install-extension ms-vscode.Go

JavaScript (ES6) code snippets

Install the plugin:

code --install-extension xabikos.JavaScriptSnippets

npm

Install the plugin:

code --install-extension eg2.vscode-npm-script

npm Intellisense

Install the plugin:

code --install-extension christian-kohler.npm-intellisense

vetur

Install the plugin:

code --install-extension octref.vetur

vscode-icons

Install the plugin:

code --install-extension robertohuertasm.vscode-icons

VueHelper

Install the plugin:

code --install-extension oysun.vuehelper

Debugger for Chrome

Install the plugin:

code --install-extension msjsdiag.debugger-for-chrome

Copy Relative Path

Install the plugin:

code --install-extension alexdima.copy-relative-path

Dash

Install the plugin:

code --install-extension deerawan.vscode-dash

Git Lens

Install the plugin:

code --install-extension eamodio.gitlens

LaTeX Workshop

Install the plugin:

code --install-extension James-Yu.latex-workshop

Trailing Spaces

Install the plugin:

code --install-extension shardulm94.trailing-spaces

PlantUML

Install the plugin:

code --install-extension jebbs.plantuml

Markdown TOC

Install the plugin:

code --install-extension AlanWalk.markdown-toc

change-case

Install the plugin:

code --install-extension wmaurer.change-case

markdownlint

Install the plugin:

code --install-extension DavidAnson.vscode-markdownlint

Markdown Navigate

Install the plugin:

code --install-extension jrieken.md-navigate

LLDB Debugger

Install the plugin:

code --install-extension vadimcn.vscode-lldb

Native Debug

Install the plugin:

code --install-extension webfreak.debug

Clang-Format

Install the plugin:

code --install-extension xaver.clang-format

CMake Tools

Install the plugin:

code --install-extension vector-of-bool.cmake-tools

CMake

Install the plugin:

code --install-extension twxs.cmake

Code Spellchecker

Install the plugin:

code --install-extension streetsidesoftware.code-spell-checker

C/C++ Clang Command Adapter

Install the plugin:

code --install-extension mitaki28.vscode-clang

shellcheck

Install the plugin:

code --install-extension timonwong.shellcheck

shell-format

Install the plugin:

code --install-extension foxundermoon.shell-format

Visual Merge and Diff Tool

pacaur -S p4v

Configure Git to use P4Merge for its difftool and mergetool commands:

git config --global diff.tool p4merge
git config --global merge.tool p4merge

X Selection Manipulation

sudo pacman -S xsel

Secure Shell

sudo pacman -S openssh

Offline API Documentation Browser

sudo pacman -S zeal

Interactive Process Viewer

sudo pacman -S htop

Serial Communication

sudo pacman -S ckermit

Network Protocol Analyzer

sudo pacman -S wireshark-gtk

Only root user and members of wireshark group can capture packets on network interfaces:

sudo usermod -aG wireshark $USER

Log out and log back in so that your group membership is re-evaluated.

Linux Syscall Tracer

sudo pacman -S strace

Containerization and Virtualization

sudo pacman -S docker

Manage Docker as a non-root user:

sudo groupadd docker
sudo usermod -aG docker $USER

Log out and log back in so that your group membership is re-evaluated.

Configure Docker to start on boot:

sudo systemctl enable docker

Debugger

sudo pacman -S gdb

TCP/IP Swiss Army Tool

sudo pacman -S gnu-netcat

TFTP Server

sudo pacman -S tftp-hpa

LaTeX Distribution

sudo pacman -S texlive-most

LaTeX Integrated Writing Environment

sudo pacman -S texstudio

Patch Management

sudo pacman -S quilt

Office Suite

sudo pacman -S libreoffice-fresh

Cross-platform Asynchronous I/O Library

sudo pacman -S libuv

Calendar and Scheduling Application

sudo pacman -S calcurse

GDB Frontend

Lightweight interface:

sudo pacman -S cgdb

Modular visual interface:

pacaur --noedit -S gdb-dashboard

Recording and Deterministic Debugging

pacaur --noedit -S rr

Multipurpose Relay

sudo pacman -S socat

Terminal Multiplexer

sudo pacman -S tmux

Put this into the ~/.tmux.conf to configure tmux:

set -g default-terminal "xterm-256color"
set -g mouse off
unbind C-b
set -g prefix C-a
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
setw -g monitor-activity on
set -g visual-activity on
bind \ split-window -h
bind - split-window -v
set -g base-index 1
setw -g pane-base-index 1

File Manager

Text based:

sudo pacman -S mc

Graphical based:

sudo pacman -S gnome-commander

Image Viewer

sudo pacman -S gpicview

Document Viewer

pacaur -S qpdfview

Archive Manager

sudo pacman -S p7zip unrar zip unzip

Source Code Analysis Tool

sudo pacman -S valgrind

Terminal Recorder

sudo pacman -S asciinema

Put this into the ~/.config/asciinema/config to configure Asciinema:

[record]
command = /bin/bash -l
maxwait = 2

Terminal Sharing

pacaur -S tmate
sudo pacman -S fzf

Add this to your ~/.zshrc

source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh
export FZF_DEFAULT_OPTS='--height 40% --reverse --border'

You can add more functionalities by sourcing more scripts in ~/.zshrc. Example scripts can be found here.

WebSocket Client

sudo pacman -S nodejs
sudo pacman -S npm
sudo npm install -g wscat

Modern Programming Language

sudo pacman -S go

Open ~/.zshrc and add following line to the end:

export GOPATH=<PATH>
export PATH=$PATH:$GOPATH/bin

Replace <PATH> with the directory outside of $GOROOT that contains the source for Go projects and their binaries. In my example, I have used ~/Projects/go.

Shell Script Analysis Tool

sudo pacman -S shellcheck

Network Discovery and Security Auditing

sudo pacman -S nmap

Recursive Directory Listing Command

sudo pacman -S tree

Desktop Notifications Server

sudo pacman -S dunst

Create ~/.config/dunst/dunstrc and add the following lines to the file:

[global]
    font = "Droid Sans 8"
    allow_markup = yes
    format = "<b>%s</b>\n%b"
    sort = yes
    indicate_hidden = yes
    alignment = center
    bounce_freq = 0
    show_age_threshold = 60
    word_wrap = yes
    ignore_newline = no
    geometry = "200x5-6+30"
    transparency = 0
    idle_threshold = 120
    follow = keyboard
    sticky_history = yes
    line_height = 0
    separator_height = 2
    padding = 8
    horizontal_padding = 8
    separator_color = "#585858"
    startup_notification = false

[frame]
    width = 1
    color = "6092BE"

[urgency_low]
    background = "#6092BE"
    foreground = "#FFFFFF"
    timeout = 10

[urgency_normal]
    background = "#6092BE"
    foreground = "#FFFFFF"
    timeout = 20

[urgency_critical]
    background = "#801515"
    foreground = "#D46A6A"
    timeout = 0

To start dunst with i3, add the following line to ~/.config/i3/config file:

exec --no-startup-id "dunst"

Visual Front End For XRandR

sudo pacman -S arandr

External Monitors

Hotplug of external monitors can be handled using udev rules.

The following will only work for your user with id 1000, so remember to replace <USERNAME> with your real user name.

Start the following command and plug external monitor in and out:

$ udevadm monitor --property

KERNEL[13404.874072] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=2678
SUBSYSTEM=drm

Remeber the card number (in my example card0) and define custom rule /etc/udev/rules.d/99-monitor-hotplug.rules with the content:

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/<USERNAME>/.Xauthority", RUN+="/usr/local/bin/hotplug.sh"

Open arandr tool and save layout for each monitor setup you want to use. In my case, there are laptop monitor and external HDMI monitor, so there will be 2 scripts in /home/<USERNAME>/.screenlayout/ directory representing laptop-only and laptop-monitor layouts. In this case, the /usr/local/bin/hotplug.sh script would look like this:

#!/bin/bash

export DISPLAY=:0
export XAUTHORITY=/home/<USERNAME>/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

#LOG=/tmp/hotplug.log
LOG=/dev/null

/usr/bin/sleep 2
/bin/date 2>&1 >> $LOG

function connect(){
    /home/<USERNAME>/.screenlayout/laptop-monitor.sh >> $LOG 2>&1
}

function disconnect(){
    /home/<USERNAME>/.screenlayout/laptop-only.sh >> $LOG 2>&1
}

xrandr | grep "HDMI-1 connected" &> /dev/null && connect || disconnect

Reload udev rules:

sudo udevadm control --reload

Universal Database Tool

pacaur -S dbeaver

Fast Incremental File Transfer Utility

sudo pacman -S rsync

Command-line JSON Processor

sudo pacman -S jq

Count Lines of Code

sudo pacman -S cloc

Screenshot Tool

pacaur -S shutter

BitTorrent Client

sudo pacman -S transmission-gtk

Music Player

sudo pacman -S deadbeef

Email Client

sudo pacman -S sylpheed

Multi-protocol Instant Messaging Client

sudo pacman -S pidgin

Desktop Wiki

sudo pacman -S zim

Install additional packages needed by plugins:

sudo pacman -S graphviz pygtksourceview2

Finally, create a new file ~/.config/zim/preferences.conf if doesn’t exist and add or replace its contents with following lines:

[General]
plugins=["calendar","insertsymbol","printtobrowser","versioncontrol","bookmarksbar","linkmap","sourceview","tableofcontents","tags","tasklist","trayicon"]

[CalendarPlugin]
embedded=False
pane=('left_pane', 'top')
granularity=Day
namespace=Journal
auto_expand_in_index=True

[VersionControlPlugin]
autosave=False
autosave_at_interval=False
autosave_interval=10

[GtkInterface]
tearoff_menus=False
toggle_on_ctrlspace=True
remove_links_on_delete=True
always_use_last_cursor_pos=True
gtk_bell=False
autosave_timeout=15
toggle_on_altspace=False
mouse_nav_button_back=8
mouse_nav_button_forw=9
toolbar_style=None
toolbar_size=None

[PageView]
follow_on_enter=True
read_only_cursor=False
autolink_camelcase=False
autolink_files=False
autoselect=True
unindent_on_backspace=True
cycle_checkbox_type=True
recursive_indentlist=True
recursive_checklist=False
auto_reformat=False
copy_format=Text
file_templates_folder=~/Templates

[BookmarksBarPlugin]
max_bookmarks=15
save=True
add_bookmarks_to_beginning=False

[SourceViewPlugin]
auto_indent=True
smart_home_end=True
highlight_current_line=True
show_right_margin=False
right_margin_position=72
tab_width=4

[ToCPlugin]
pane=left_pane
floating=False
show_h1=False

[TagsPlugin]
pane=left_pane

[TaskListPlugin]
embedded=False
pane=right_pane
all_checkboxes=True
labels=FIXME, TODO
integrate_with_journal=start
included_subtrees=
excluded_subtrees=
nonactionable_tags=
tag_by_page=False
use_workweek=False

[TrayIconPlugin]
classic=False
standalone=False

Disk Usage Analyzer

sudo pacman -S baobab

SSHFS/SFTP File Systems Mounting

pacaur --noedit -S sftpman-gtk

Disk Space Cleaner

sudo pacman -S bleachbit

Graphical Frontend For su

sudo pacman -S gksu

Command-line Todo List Manager

sudo pacman -S task

Curses-based Screensaver

sudo pacman -S cmatrix