My Linux Software List

🍪 16 min read

This note contains linux software, which I use. It doesn’t contain much of descriptions, it’s more like a installation note, to quickly setup a new system. If I find the time I may write a few more words to all the applications and settings, but for now I just keep it as it is. I currently use Kubuntu 18.04, thus the installation commands / configurations are target towards this OS. Most of the applications should be available for other operating systems as well.

Last edits:

  • (2018-10-16): Added kitty terminal editor
  • (2018-10-12): Added Zotfile addon notes.
  • (2018-11-12): Switch Keepass2 with Bitwarden.
  • (2019-05-07): Desktop back to main applications, fish replaced by zsh in main applications, updated node to version 12.x, updated Riot.im installation.

Desktop

Currently I use KDE as my desktop environment. To get the latest KDE updates I use the Kubuntu Backports PPA. In addition to KDE I use Latte Dock instead of the default Plasma panels, because it offers more flexibility and just better fits my needs.

sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt full-upgrade  
sudo apt install latte-dock
When you use my Latte Dock appearance configuration, you should download and install the Simple menu widget and add the following to ~/.config/kwinrc to enable the usage of the Meta key - aka Windows key on most keyboards - to open the simple menu application launcher.
[ModifierOnlyShortcuts]
Meta=org.kde.lattedock,/Latte,org.kde.LatteDock,activateLauncherMenu
Currently I use the default icon set but sometimes I use the Papirus icon theme, which fits great into the KDE Plasma environment. After it has been installed, the icon theme can be selected under system preferences -> appearance -> icon theme.
sudo add-apt-repository ppa:papirus/papirus
sudo apt-get install papirus-icon-theme


Terminal Theme

I use Monokai Remastered as my terminal (Konsole) theme. To install it just create the file ~/.local/share/konsole/Monokai Remastered.colorscheme and copy the colorscheme from the iTerm2-Color-Schemes github repository into it.


Font: Adobe Source Code Pro

I currently use Adobe Source Code Pro as my main font in my IDEs and the terminal. The Powerline version can be installed via the package manager:

sudo apt-get install fonts-powerline

The standard font can be installed as follows (source: askubuntu):

wget https://github.com/adobe-fonts/source-code-pro/archive/2.030R-ro/1.050R-it.zip
unzip 1.050R-it.zip
mkdir -p ~/.fonts
cp source-code-pro-*-it/OTF/*.otf ~/.fonts/
fc-cache -f -v


vim

My text editor of choice when it comes to editing in the terminal.

sudo apt install vim

To enable syntax highlighting edit ~/.vimrc and add the following content:

filetype plugin on
syntax on

curl / wget

Now and then I need to quickly check how requests / responses to / from a server work in some of my projects, thats what I use curl for. Also to get some web resources I use wget.

sudo apt install curl wget


GIT

I use git as SCM, so usually one of the first things I do is installing git and setup the user name / email, which will be used for commits. Additionally I use VIM as my standard editor.

sudo apt install git
git config --global user.name "Dennis Name"
git config --global user.email "Dennis.Name@url.com"
git config --global core.editor "vim"


Zsh

I switched back to zsh from fish due to the compatibility issues to standard bash commands in some scripts. There is nothing you can’t solve in fish, but using a shell that is compatible with Bash is less time consuming. I use the Oh My Zsh framework with the spaceship prompt as well as fzf, zsh-autosuggestions and zsh-syntax-highlighting. Here’s the short version of how to setup everything:

# Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

# Spaceship Prompt
git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt"
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"

# fzf
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Here is my ~/.zshrc:

emulate sh -c 'source /etc/profile.d/apps-bin-path.sh'

export ZSH="/home/dennis/.oh-my-zsh"

ZSH_THEME="spaceship"
zstyle ':bracketed-paste-magic' active-widgets '.self-*'

SPACESHIP_PROMPT_ORDER=(
#  time          # Time stamps section
  user          # Username section
  dir           # Current directory section
  host          # Hostname section
  git           # Git section (git_branch + git_status)
#  hg            # Mercurial section (hg_branch  + hg_status)
  package       # Package version
  node          # Node.js section
#  ruby          # Ruby section
#  elixir        # Elixir section
#  xcode         # Xcode section
#  swift         # Swift section
  golang        # Go section
#  php           # PHP section
  rust          # Rust section
#  haskell       # Haskell Stack section
#  julia         # Julia section
  docker        # Docker section
#  aws           # Amazon Web Services section
  venv          # virtualenv section
#  conda         # conda virtualenv section
  pyenv         # Pyenv section
#  dotnet        # .NET section
#  ember         # Ember.js section
#  kubecontext   # Kubectl context section
  terraform     # Terraform workspace section
#  exec_time     # Execution time
  line_sep      # Line break
#  battery       # Battery level and status
  vi_mode       # Vi-mode indicator
#  jobs          # Background jobs indicator
#  exit_code     # Exit code section
  char          # Prompt character
)

SPACESHIP_RPROMPT_ORDER=(
  exit_code
  exec_time
  jobs
  time
)

SPACESHIP_TIME_SHOW=true
SPACESHIP_DIR_TRUNC=4
#SPACESHIP_DIR_TRUNC_PREFIX='[...]/'

SPACESHIP_DIR_LOCK_SYMBOL=" 🔐"
SPACESHIP_VENV_SYMBOL="📂"
# SPACESHIP_GIT_SYMBOL="📤"

# fzf theme
export FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS'
--color=dark
--color=fg:-1,bg:-1,hl:#c678dd,fg+:#ffffff,bg+:#4b5263,hl+:#d858fe
--color=info:#98c379,prompt:#61afef,pointer:#be5046,marker:#e5c07b,spinner:#61afef,header:#61afef
'

plugins=(zsh-autosuggestions zsh-syntax-highlighting)

source $ZSH/oh-my-zsh.sh

source ~/.zshrc.local
source ~/.zshrc.scripts

[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

And here is my ~/.zshrc.local which contains the CUDA path, virtual env settings, etc.:

export SSH_ASKPASS="/usr/bin/ksshaskpass"
  
# GOLANG
export GOPATH=$HOME/code/go

# Path
export CUDA_HOME="/usr/local/cuda-9.0"
export PATH="/usr/local/cuda/bin:/snap/bin:$GOPATH/bin:$HOME/.cargo/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH"
export LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LIBRARY_PATH"

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# git
export GIT_EDITOR=vim

alias gitpa='git remote | xargs -L1 git push --all'


Matrix / riot.im

We use a selfhosted Matrix server for our team intern communication. I use riot as the client, which works flawlessly on Linux.

sudo apt install -y lsb-release wget apt-transport-https
sudo wget -O /usr/share/keyrings/riot-im-archive-keyring.gpg https://packages.riot.im/debian/riot-im-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/riot-im-archive-keyring.gpg] https://packages.riot.im/debian/ $(lsb_release -cs) main" |
    sudo tee /etc/apt/sources.list.d/riot-im.list
    
sudo apt update
sudo apt install riot-web


Nextcloud

To sync my files I use Nextcloud, which I host on my own server. I use their PPA to get the latest client on Ubuntu. Have a look at my post about installing nextcloud on your own server via docker.

sudo add-apt-repository ppa:nextcloud-devs/client
sudo apt install nextcloud-client

Bitwarden

I use Bitwarden as my password manager. The server is self-hosted and installed on my private server. There are desktop applications available but I usually only use the Firefox Plugin and the web interface. It has plugins for all major browsers.


Visual Studio Code

Currently I use Visual Studio Code as my main text / code editor. Compared to Sublime Text it starts a little slow because it is based on Electron. In my opinion it offers the best Plugin support of all code editors right now. It can be download on the Visual Studio Code Website. They provide a .deb installer.

To keep my settings and plugins synced across all my machines, the User folder is moved to a cloud synced directory (in my case Nextcloud) and a symbolic link is placed in the local sublime config folder. This can be done on new machines, as follows:

cd ~/.config/Code
rm -r User
ln -s ~/sync/noboevbo/sync/apps/vscode/User

In addition here are my usually used extensions:

code --install-extension DavidAnson.vscode-markdownlint
code --install-extension eamodio.gitlens
code --install-extension HookyQR.beautify
code --install-extension James-Yu.latex-workshop
code --install-extension ms-python.python
code --install-extension robertohuertasm.vscode-icons
code --install-extension zhuangtongfa.Material-theme

Here’s my configuration for latex workshop to open pdfs in okular with synctex support.

    "latex-workshop.view.pdf.viewer": "external",
    "latex-workshop.view.pdf.external.viewer.command": "/usr/bin/okular",
    "latex-workshop.view.pdf.external.viewer.args": [
        "--unique",
        "%PDF%"
    ],
    "latex-workshop.view.pdf.external.synctex": {
        "command": "okular",
        "args": [
            "--unique",
            "%PDF%#src:%LINE% %TEX%"
        ],
    },

To enable jumping to code from the pdf open okular and go to: settings -> Configure Okular -> Editor: Select custom editor with command:

 code --goto %f:%l

Cryptomator

sudo add-apt-repository ppa:sebastian-stenzel/cryptomator
sudo apt install cryptomator

JetBrains: PyCharm, GoLand, Rider, …

I can recommend the IDEs from JetBrains. If there is a JetBrains IDE for a language, in which I develop, is available I usually use it. Currently I use PyCharm (Python), GoLand (Go) and Rider (C#). I usually just use the JetBrains Toolbox, which keeps track of the JetBrains installations. It can be downloaded at their website. The installation is done automatically. After the download, extract the toolbox, start it once, then it is installed and will be launched at startup. Here are a few settings, which I usually use in all the IDEs:

  • Appearance -> Appearance -> Override default font -> Fira Code 14
  • Editor -> Font -> Fira Code 14 -> Check Enable font ligatures
  • Keymap -> Set to Visual Studio -> Rename: F2, Comment with Line Block: ctrl+2

Unity

Unity versions for linux can be found in the following thread on the Unity forums: https://forum.unity.com/threads/unity-on-linux-release-notes-and-known-issues.350256/. The downloaded file is an web installer, which will download the actual Unity package and install it to a given folder. To do so, make the file executable - e.g. chmod +x UnitySetup-2018.1.0f2 - and execute it from your file manager.


Zotero

For my literature management I use Zotero, which is a free and open-source reference management software. It can be installed by using a PPA.

sudo add-apt-repository ppa:smathot/cogscinl
sudo apt install zotero-standalone

In addition, I use the Zotero Firefox plugin, which makes it easy to add references via the browser. For more options in BibTeX exports I use Better Bib(la)TeX for Zotero. To use it, just download the latest release, launch Zotero, go to Tools -> Extensions -> ⚙ -> Install Add-on from file -> Select the downloaded zotero-better-bibtex-version.xpi and install it. First I setup how the citekey should be composed in Edit -> Prefences -> Better BibTex -> Citation keys -> Citation key format to: [auth:nopunctordash][year]; I use Zotero sync, to sync all reference data - except actual files - to the Zoteros servers. 100MB can be used free, which is more than enough, if only metadata and no actual files are synced. The actual files - PDFs etc. - are saved and synced via Nextcloud on my own server. To use them in Zotero, I need to set the base directory unter Settings -> Advanced -> Files and Folders -> Base directory to the according directory in my Nextcloud folder. If I add a new entry to Zotero I copy the corresponding files to the Nextcloud folder and afterwards attach it to the entry via right-click -> Add Attachment -> Attach Link to File. This can be done automatically by using the plugin ZotFile. Just install it like Better Bib(la)TeX was installed - download the xpi from the projects website and install it. To use it go to Tools -> Zotfile Preferences and set the synced folder under custom location in Location of Files. If you want to you can create a subfolder structure as well, the wildcards can be found on the Zotfile website. Zotfile brings its own renaming rules, but I prefer to use the default ones. To do so go to “Renaming Rules” in ZotFile Preferences and tick Use Zotero to Rename. The addon automatically copys PDFs to the choosen folder, renames them accordingly to the renaming rules and attaches them as a Link to File. This works automatically if you import something using the browser plugin. If you pull in a PDF file manually the addon won’t be triggered automatically, you then need to rightclick on the entry -> Manage Attachements -> Rename Attachements. This will trigger the addon and it will move, rename and link the PDF.


LaTeX

I use LaTeX for most of my documents and papers, I usually just install the texlive-full package which includes everything I need in my projects.

sudo apt install texlive-full

Go

Currently I’m developing a few backend services in Go. It can be installed via a ppa. In addition to Go I install dep, which keeps track of all the dependencies of my Go projects.

sudo add-apt-repository ppa:gophers/archive
sudo apt-get install golang-go
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh


Mono

Rider / Unity require Mono, install it like this:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update


Hugo

I’ve built this website as well as our labs website with hugo, which can be easily installed via a snap package.

snap install hugo

Node.js / npm / Yarn

I need Node, npm and yarn for various web frontend applications, so here’s how to install everything:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install nodejs

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn

Polymer (currently 3.x)

Currently I’m experimenting with Polymer for a new web project, it can be easily installed via npm. I need to set the –unsafe-perm to install it globally, because I get a EACCESS error otherwise. More about this bug can be found in the corresponding issue on github.

sudo npm install -g polymer-cli --unsafe-perm

Software which was replaced by other software

The following applications are ones which I have replaced with other software. I keep them as a reference, because I still think, this are all great applications.

Seafile

Edit 2018-08-31: I switch to nextcloud. I was always happy with seafile and it worked well, but I tried nextcloud, which is developed in the area near me, so I would like to support it rather than seafile. It works equally well for me. To sync my files I use Seafile, which I host on my own server. I use their PPA to get the latest client on Ubuntu. I plan to create a note on how I setup Seafile on the server and how my workflow(s) - especially syncing notes, annotating PDFs etc. - look like.

sudo add-apt-repository ppa:seafile/seafile-client
sudo apt install seafile-gui

KeePass 2

Edit 2018-11-12: I switched back to Bitwarden because I don’t like the browser plugins for KeePass(XC) on MacOS (Safari). I use KeePass 2 as my password manager. The password database is stored in a local file, which I synchronize via Nextcloud. KeePass 2 is available in the repositories. I also install mono-complete to enable plugin support which is required for KeePassRPC with which the browser plugins communicate with the KeePass database.

sudo apt install keepass2
sudo apt install mono-complete

To use browser plugins you need KeePassRPC. To install it you need to first download the latest release which is named KeePassRPC.plgx. I assume it’s stored in ~/Downloads. Afterwards copy it to the Plugins Folder of KeePass like follows:

sudo mkdir /usr/lib/keepass2/Plugins
sudo mv ~/Downloads/KeePassRPC.plgx /usr/lib/keepass2/Plugins/KeePassRPC.plgx

Afterwards start KeePass2, it should compile the plugin at startup. After installing a browser extension (e.g. for Firefox) it will ask you to enter a key in the plugins configuration. Do this, and the browser plugin should be able to communicate with the KeePass database.


Sublime

Edit 2018-08-31: I switched to Visual Studio Code due better Plugin support. I miss the snappiness of sublime, so I may switch again sometimes. I use sublime text as my main text editor. Compared to Atom or Visual Studio Code it is a native application and not based on electron, thus it provides good startup times and general performance, which is, for me, one of the most important aspects of a text editor. It also has a lot of plugins, especially LaTeXTools, which is great for writing in LaTeX documents.

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
sudo apt update
sudo apt install sublime-text

To keep my settings and plugins synced across all my machines, the User folder is moved to a cloud synced directory (in my case Seafile) and a symbolic link is placed in the local sublime config folder. This can be done on new machines, as follows:

cd ~/.config/sublime-text-3/Packages/
rm -r User
ln -s ~/Seafile/sync/apps/sublime-text/User

kitty Terminal Emulator

Edit 2019-05-07: I returned to use a font without ligatures, thus I no longer require to use kitty. I usually use the kitty terminal emulator because it supports ligatures, e.g. for the Fira Code font. Here’s how the kitty terminal can be installed:

curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin
ln -s ~/.local/kitty.app/bin/kitty ~/.local/bin/
cp ~/.local/kitty.app/share/applications/kitty.desktop ~/.local/share/applications
sed -i "s/Icon\=kitty/Icon\=\/home\/$USER\/.local\/kitty.app\/share\/icons\/hicolor\/256x256\/apps\/kitty.png/g" ~/.local/share/applications/kitty.desktop
kitty + complete setup fish | source
vim .config/kitty/kitty.conf

Here’s the content of my kitty configuration, which uses the Fira Code font as well as the Monokai color scheme.

# Fonts
font_family Fira Code
bold_font auto
italic_font auto
bold_italic_font auto

font_size 12.0

# Base16 Monokai - kitty color config
# Wimer Hazenberg (http://www.monokai.nl)
background #272822
foreground #f8f8f2
selection_background #f8f8f2
selection_foreground #272822
url_color #a59f85
cursor #f8f8f2

# normal
color0 #272822
color1 #f92672
color2 #a6e22e
color3 #f4bf75
color4 #66d9ef
color5 #ae81ff
color6 #a1efe4
color7 #f8f8f2

# bright
color8 #75715e
color9 #f92672
color10 #a6e22e
color11 #f4bf75
color12 #66d9ef
color13 #ae81ff
color14 #a1efe4
color15 #f8f8f2

# extended base16 colors
color16 #fd971f
color17 #cc6633
color18 #383830
color19 #49483e
color20 #a59f85
color21 #f5f4f1

To add a context menu entry for the nautilus file manager you have to install filemanager-actions-nautilus-extension as follows:

sudo add-apt-repository ppa:daniel-marynicz/filemanager-actions
sudo apt install filemanager-actions-nautilus-extension

To add the context menu entry open the FileManager-Actions Confiuration Tool and do the following:

  • Create a new entry “Open in kitty”
  • In the action tab tick “Display item in location context menu”
  • In the command tab set path to: /home/USERNAME/.local/kitty.app/bin/kitty and Parameters to: --directory=%d/%b, this will open the terminal emulator in the current directory. If you changed the installation path of kitty, change the value accordingly.
  • Save the new entry
  • Under Edit -> Preferences -> Runtime preferences untick *Create a root “FileManager-Actions” menu if you want to have the Open in kitty entry directly in the first layer of the context menu.
  • Log out once or reboot to trigger the changes

Zsh Grml

My second favorite shell is Zsh. I use the, in my opinion great, Zsh configuration from the (grml)[https://grml.org/] distribution. If the grml Zsh confiog is used, you should add your own configurations to either .zshrc.pre or .zshrc.local. The Grml-Zsh-Refcard may be useful to finde keybindings, function, aliases etc.

sudo apt install zsh
wget -O .zshrc https://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
wget -O .zshrc.local  https://git.grml.org/f/grml-etc-core/etc/skel/.zshrc

fish - friendly interactive shell

sudo apt install fish
fish
chsh -s /usr/bin/fish
This is already well usable in its standard configuration. The only two extensions I use are the following:

  • Download the Monokai Theme for fish, simply the set_colors.fish and execute with fish set_colors.fish.
  • VirtualFish, which is the equivalent of virtualenvwrapper. It can easily be installed via pip install virtualfish. Additionally a small adjustment of the configuration (see below) is required.

Here is my configuration file vim ~/.config/fish/config.fish:

set SSH_ASKPASS /usr/bin/ksshaskpass

# GOLANG
set GOPATH $HOME/code/go

# Path
set PATH /usr/local/cuda/bin /snap/bin $GOPATH/bin $PATH
set LD_LIBRARY_PATH /usr/local/cuda/lib64 /usr/local/cuda/extras/CUPTI/lib64 $LD_LIBRARY_PATH
set LIBRARY_PATH /usr/local/cuda/lib64 /usr/local/cuda/extras/CUPTI/lib64 $LIBRARY_PATH

# Anaconda
set PATH $PATH /home/dennis/anaconda3/bin

# virtualenv and virtualenvwrapper
set VIRTUALFISH_HOME $HOME/.virtualenvs
set VIRTUALFISH_DEFAULT_PYTHON python3
eval (python -m virtualfish compat_aliases)

# VirtualFish Prompt
functions -c fish_prompt _old_fish_prompt
function fish_prompt
  if set -q VIRTUAL_ENV
    echo -n -s (set_color green) "(" (basename "$VIRTUAL_ENV") ")" (set_color normal) " "
  end
  _old_fish_prompt
end

# SMPL
set SMPL_LOCATION ~/code/python/mpi/smpl
set PYTHONPATH $PYTHONPATH $SMPL_LOCATION

# Git
set GIT_EDITOR vim

Julia Evans describes some of the advantages of fish in her blog.


Bash configuration

I sometimes need to use bash instead of fish, e.g. for ROS. Heres the custom part of my ~/.bashrc:

export SSH_ASKPASS=/usr/bin/ksshaskpass

# GOLANG
export GOPATH=$HOME/code/go

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH"
export LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LIBRARY_PATH"

# Anaconda
export PATH="$PATH:/home/dennis/anaconda3/bin"

# ROS
alias ros_activate="source /opt/ros/melodic/setup.bash"

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# Git
export GIT_EDITOR=vim


Font: Fira Code

Fira Code is a monospaced font with programming ligatures, and it’s just awesome! I use the font in all my IDEs, text editors as well as the terminal. The font is released under the SIL OPEN FONT LICENSE (OFL).

sudo apt install fonts-firacode