A big revision for sure. It's the result of tweaking during this outbreak.
33 KiB
My dotfiles for my Linux-based system setup. The structure of this repo is designed to be managed with GNU Stow, a symlinks farm manager.
I don’t know what I’m doing most of the time in creating this setup so if you’re brave (or suicidal) enough to take a look at my stuff, go ahead. Feel free to add a couple of energy boosts (e.g., alcohol, blunts) and a friend for mini-therapy sessions for the upcoming journey.
Caution
|
If I’ve paid a dollar for every time I’ve seen similar expression like the following, I would’ve been paid at least 10 bucks but as they always say: "Don’t blindly apply these dotfiles unless you know what you’re doing." Review the code first, change the setting accordingly, and apply it on your own. |
Inspirations
-
https://github.com/jethrokuan/dots/ for his Emacs and Org Mode writing setup. He also has a dedicated series on his blog site if you want the juicy details.
-
https://www.reddit.com/r/unixporn/ obviously.
-
Specifically for the tabbed terminals idea and the linked dotfiles repo) (not yet implemented, still cleaning up my stuff)
Screenshots
My setup was made by the FOSS gang. Take note that the screenshots does not represent the daily look of the desktop since I always change the wallpaper and the colorschemes with Pywal.
Specifications
Wallpapers
Here’s a list of some of the wallpapers I’ve used throughout my ricing journey. I’ve also tried to get the creators to show appreciation for their work.
-
-
Creator: rmRadev
-
-
-
Creator: Mikael Gustafsson
-
-
-
Creator: Mbdsgns
-
-
-
Creator: Beau Lamb
-
-
-
I was not able to track down the photographer of this one.
-
-
-
Creator: datGryphon
-
-
-
Creator: Beau Lamb
-
-
-
Creator: Josef Bartoň
-
Sources
My personal recommendations for looking out for more cool-looking photos.
-
Images from NASA. They also have a small collection of them in their Unsplash account.
-
Firewatch (or any style similar to Firewatch) wallpapers are top-notch ricing material.
Tour of my setup
There are a few things to know on this setup.
-
packages.txt
is mainly for archiving my native package list from the official Arch Linux repos installed in my current Arch Linux setup. -
aur-packages.txt
contains the installed packages from AUR along with their versions. -
locations.json
is a data file that contains all of the packages listed in Configured programs along with their target path. -
manager.py
is a little manager tailored for this setup. -
A makefile (named
makefile
) which makes use of GNU Make.
packages.txt
and aur-packages.txt
are simply a list of installed packages from the official Arch repo and AUR respectively.
They are going to be committed at the start of every month (if it works that is).
manager.py
is a tiny GNU Stow-inspired manager created for this setup.
(Nonetheless, I tried to make it generic for other cases.)
It takes a directory with a file named locations.json
containing the packages with their target path.
We can then execute commands with all of the packages and its target path.
That said, using this script is optional and feel free to discard it and use GNU Stow exclusively.
[1]
[2]
# Take the setup as the filesystem structure.
# See the JSON file (locations.json) to see what packages to be installed and where to install them.
# Running the program without any arguments for a test run.
# There should be a bunch of `echo` commands being ran for all of the listed packages.
./manager.py
# Create the directories of the target path and install them with GNU Stow.
# Bada-bing, bada-boom, you have installed your setup or something.
./manager.py --commands "mkdir -p {location}" "stow --restow {package} --target {location}"
Just execute the script with the --help
flag for more information. ;p
Next, more custom scripts.
They’re located in bin/
and ideally should be linked in $PATH
.
Currently, I have them linked in $HOME/bin
.
The scripts are mostly used with hotkey bindings (e.g., sxhkd
).
Nonetheless, they could be executed in the shell (provided they are linked in $PATH
).
Here’s a list of the top most useful scripts:
-
Screenshot capture. Includes the option of delaying and region selection mode.
-
An image-to-text script using OCR. The content are then copied into the clipboard. Built on top of the screenshot script. Useful for capturing links in images or videos.
-
Screen recording using FFmpeg. An option of excluding and/or following the mouse cursor is included.
-
Quick command prompts. The script is based from Luke Smith’s prompt script.
-
Switching on/off programs. Useful for situations where only one instance of the program is running.
-
A basic theme selection for easy color scheme generation with sxiv. Since the script is tailored to my needs, it is recommended to modify it for your own.
Aside from the scripts, there are also some details and files that are not committed to this setup for privacy and security reasons. A few examples of which is my cron setups where it is tasked with updating and committing the package lists to the Git repo, updating the packages, cleaning the cache, and so much more.
Configured programs
Here’s a list of the programs with details on the config found in this repo. Each of the listed directory is designed to be used/managed with GNU Stow at the indicated target path.
Each configuration tries to make each to be consistent visually. For a color scheme, my main preference is Nord.
Alacritty
Similar to Kitty , it’s a GPU-based terminal emulator. It’s documentation for the configuration can be viewed at the config file itself being filled with comments.
-
Config located at
alacritty/
directory. -
The usual target path for a user is at
$HOME/.config/alacritty/
. -
Minimum version (from
alacritty --version
):-
alacritty 0.3.3
-
-
Contains a single
alacritty.yaml
as the config file. Not much has changed except for the color scheme and the font being used.
bspwm
A minimalist window manager. Only provides a window manager and nothing else.
-
Config located at
bspwm/
directory. -
The usual target path for a user is at
$HOME/.config/bspwm/
. -
Minimum version (from
bspwm --version
):-
0.9.7-10-g2ffd9c1
-
-
Simply contains
bspwmrc
which is an executable setting up bspwm-related settings and and starting up some applications. However, the "true" version is stored as a template file for pywal (located atwal/templates/bspwmrc
). -
This allows for a modular setup. For using keybindings, it uses
sxhkd
(Simple X Hotkey Daemon). For something similar to i3-bar, polybar serves as the replacement.
To control the window manager, you should use bspc
.
Dunst
It’s a notification daemon used to display notifications sent by notifiers (programs that send messages/notifications).
-
Config location is at
dunst/
. -
The usual target path for a user is at
$HOME/.config/dunst/
. -
Minimum version (from
dunst --version
):-
Dunst - A customizable and lightweight notification-daemon 1.4.1 (2019-07-03)
-
-
Simply contains a
dunstrc
configuring appearance of the notifications. Though, the "true" version of the config is located atwal/templates/dunstrc
.
Look out for the related manual entry (i.e., man dunst
) and the Arch Wiki entry.
GNU Emacs
Another text editor, of course. I finally bit the bullet with this one with the native support for Org Mode as the biggest reason. (Is this going to be start of something sinister?)
-
This package is really a Doom Emacs-based configuration more than the vanilla config so you need to install it first before touching the config with your grubby hands. Just run the following command
git clone https://github.com/hlissner/doom-emacs ~/.emacs.d && ~/.emacs.d/bin/doom install
and it should take care of the rest. -
Config located at
emacs/
. -
The ideal target path for a user is at
$HOME/.config/doom
. -
Minium version (from
emacs --version
):-
GNU Emacs 26.3
-
For Doom Emacs, it’s not particularly important since it’s in rolling release but for future references, it is from the
develop
branch at commitefa599f076c3a140c6b4006c352fdba3361abebd
accessed at 2020-04-24.
-
-
The Doom configs are just the default config so there’s not much to go through here. I may also add snippet files in there.
-
Regarding theming Doom Emacs, I’ve found mainly two ways.
-
First is simply using ewal but the resulting colors are not pretty IMO and I haven’t found a way to customize it aside from forking and modifying the package itself.
-
Second is simply generating the Doom Emacs theme file myself; I have a small script that is generates one from the Pywal color scheme.
-
Or simply don’t and use modus-themes instead for that light customization options.
-
lf
A ranger-inspired terminal file manager. Here’s the documentation for it.
-
Config located at
lf/
directory. -
The usual target path for a user is at
$HOME/.config/lf/
. -
Minimum version (from
lf --version
):-
r14
-
-
All of the config files are basically default config files except with a few personal changes.
Neovim
-
Config located at
nvim/
directory. -
The usual target path for a user is at
$HOME/.config/nvim
. -
Minimum version (from
nvim --version
):-
NVIM v0.4.3
-
-
Uses
vim-plug
as the plugin manager. -
Contains my plugin list and editor configurations in
init.vim
. -
There are also some UltiSnips snippets stored in
own-snippets
folder (sincesnippets
is a reserved folder name). -
One of the largest snippet file is the snippets for LaTeX files. It is based on Gilles Castel's UltiSnips LaTeX snippets.
pacman
The default package manager for Arch Linux.
-
Config location is at
pacman/
-
The usual target path is at
/etc/pacman.d
. -
Minimum version (from
pacman --version
):-
Pacman v5.1.3 - libalpm v11.0.3
-
-
Contains the configuration file, a
mirrorlist
file, and some pacman hooks. -
For the mirrorlist, change it accordingly or generate another one. It is also monthly updated from a cron job.
-
Since this requires root privilege, this is not included in the installation script. Simply copy it (i.e.,
sudo cp pacman/ /etc/pacman.d/
) and you’re done. -
The dotfiles repo also contains two package lists (i.e.,
packages.txt
andaur-packages.txt
) in the root of the project folder. -
The setup also uses
yay
as the AUR helper tool.
picom
A window compositor forked from compton that adds off-screen buffers and additional effects and animations to the window. Can be used for adding style to your setup.
This is formerly the Compton configuration.
-
Config found at
picom/
directory. -
The usual target path for a user is at
$HOME/.config/picom
. -
Minimum version (from
picom --version
):-
v7.2
-
-
The config is copied from
/etc/xorg/picom.conf
and edited a few parameters.
For documentation, check out the manual entry (i.e., man picom
) and the related Arch Wiki entry.
The default configuration (located at /etc/xdg/picom.conf
assuming at Arch Linux) can be helpful as well as it is filled with comments.
polybar
A tool for creating status bars.
This is the replacement bar from my previous i3-based setup.
-
Config located at
polybar/
. -
The usual target path for a user is at
$HOME/.config/polybar
. -
Minimum version (from
polybar --version
):-
polybar 3.4.1
-
Features: +alsa +curl +i3 +mpd +network(libnl) +pulseaudio +xkeyboard
-
-
There is only the standalone config (might decide to make it modular) and the launch script which is copied from the related Arch Wiki entry. The theme is dynamically used with the Xresources file (by using
xrdb
).
For documentation, check out the already linked Arch Wiki entry and the official documentation from GitHub.
Pywal
A theme generator written in Python. It is mostly used for ricing to get them consistent colors throughout your setup.
-
Config located at
wal/
. -
The usual target path for a user is at
$HOME/.config/wal
. It is ideal that you’ve already have your own color schemes saved in there as well. -
Minimum version (from
wal --version
):-
wal 3.3.0
-
-
Due to the nature of my setup where I want those consistent colors, most of the configurations are tucked away as template files but it should be easy to identify which is which. Certain applications such as for
dunst
andbspwm
are in here and should be considered as the real version of the config.
For additional information, check out the documentation from the GitHub page.
Rofi
The application switcher and launcher. Also serves as a replacement for dmenu.
-
Config located at
rofi/
. -
The usual target path for a user is at
$HOME/.config/rofi/
. -
Minimum version (from
rofi -version
):-
Version: 1.5.4
-
-
Main config is
config.rasi
. -
Contains the config and my custom Rofi themes.
To see the documentation, check out the manual entry for rofi
.
For creating or editing Rofi themes, read the manual entry of rofi-theme
.
Also, view the related Arch Wiki entry.
sxhkd
Stands for "Simple X Hotkey Daemon". It is a hotkey daemon detecting certain X events primarily from the keyboard and mouse.
It is also very useful since it enables modular setup. Can be used independent of the desktop environment (DE) or the window manager (WM).
-
Config located at
sxhkd/
folder. -
The usual target path is at
$HOME/.config/sxhkd
. -
Minimum version (from
sxhkd --version
):-
0.6.0-3-g7124055
-
-
Contains a config file (
sxhkdrc
) for the keybindings. There are some keybindings specifically used forbspwm
.
Xorg
A display server implementing X window system.
-
Config found at
xorg/
directory. -
The usual target path for a user is at
$HOME/
. -
Minimum version (from
Xorg -version
):-
X.Org X Server 1.20.5
-
X Protocol Version 11, Revision 0
-
-
The configuration is found at
.Xresources
containing the colors (0 to 15, foreground, and the background).
Zsh
A Unix shell and an alternative to the Bash. Mostly chosen due to its wide options for customization compared to GNU Bash.
-
Config found at
zsh/
directory. -
The usual target path for a user is at
$HOME/
. -
Minimum version (from
zsh --version
):-
zsh 5.7.1 (x86_64-pc-linux-gnu)
-
-
Contains
.zprofile
and.zshrc
. The primary file to look for is the.profile
to set environment variables independent of the shell setups. -
Previously relied on oh-my-zsh. Eventually, the config became independent and can work without it.
For the documentation, check out the manual entry for zsh
to gain an overview of the shell.
The documentation itself is massive and comprehensive.
The main manual explains some things such as the startup/shutdown files and compatibility with other shells.
It also lays out the sections of the manual which you can check it out.
Since the manual has been split into multiple sections, it can be daunting to navigate.
The most referred sections by far are zshmisc
where it gives details on the miscellanea of zsh such as the prompt and special variables you might want to know.
The other section is zshbuiltins
where it explains built-in commands of zsh.
For coding with Zsh, look into the Zsh Manual.
Additional programs used
As much as possible, I use free and open source software (FOSS) for all of my needs. Not all of the items listed are FOSS, though. [4]
System administration
Tip
|
I recommend to start at this list especially if you’re starting with a bare minimum of a Linux installation. |
-
htop - A process viewer and manager.
-
lxsession - A session manager and an authentication agent for Polkit; very useful if you’re usually using with a user-level account.
-
Polkit - A program for bridging unprivileged processes to privileged access.
-
systemd-boot - The UEFI boot manager.
-
udisks - A manager for mounting filesystems.
-
udiskie - An automounter for removable media.
Command line tools
I still use GNU coreutils and common Unix tools (e.g., cURL) but it could be good to find some alternatives. If you want to look for some alternatives or just feeling adventurous yourself, I recommend starting with this awesome list and this one, too.
-
bat - Basically
cat(1)
with wings. -
Buku - A developer-oriented (i.e., easy to integrate with your own programs) browser-independent bookmark manager for the command line.
-
exa - A user-friendly replacement for
ls(1)
. -
fd - A user-friendly alternative to
find(1)
from GNUfindutils
. -
feh - A minimal image viewer.
-
fzf - A fuzzy command line finder.
-
hexyl - A hex viewer on the command line.
-
maim - A simple screenshot utility.
-
neofetch - A program for getting information for your hardware and software setup. [5]
-
Weechat - An IRC client on the command line.
-
youtube-dl - A utility for downloading YouTube videos (and also others).
Desktop user experience
Graphical programs
-
Discord - A communication app targeted for gaymers and hackers.
-
Firefox - One of the major web browser second to Chrome.
-
Thunderbird - A email client. [7]
Device drivers and servers
-
ALSA - A Linux sound driver.
-
NVIDIA Driver - Since I have an NVIDIA-based GPU (NVIDIA GeForce GT 630), I have to use that.
Multimedia-related tools
-
Audacious - An audio player with various listening options. [8]
-
ffmpeg - A multimedia codec including for MP4, FLV, and more. Also can be used as a recorder.
-
ImageMagick - A software suite for graphics.
-
OBS Studio - A facility for streaming and recording videos.
-
Shotcut - A video editor built with the MLT Framework.
-
sxiv - Self-explaining-ly named "Simple X Image Viewer".
-
VLC Media Player - A multimedia player.
Music production
You can find my crappy soundtracks primarily in my YouTube channel (may consider a SoundCloud account or similar).
-
Cadence - A set of audio tools.
-
Carla - An audio plug-in host supporting various audio plug-in formats such as VST2/3, SF2, and SFZ. Part of the KX Studio project.
-
LMMS - A digital audio workstation for beat production.
-
Musescore - A music composition and notation software.
-
SuperCollider - A platform for audio synthesis and algorithmic composition.
Design
Fonts
-
Fira Code - A programmer-oriented font that supports ligatures.
-
Font Awesome - A set of icons for your user interface and stuff.
-
Iosevka - A monospace text that features ligatures and provides a wide variety of symbols. It is currently my terminal font.
-
Latin Modern Math - A serif font specifically for mathematical and scientific work. It is based from Computer Modern Math (the default typeface for LaTeX documents). It is also my go-to font for mathematical fonts.
-
Nerd Fonts - A suite of font tools. Also offers 40+ patched fonts of the popular fonts such as Iosevka, Fira Code, and many others.
-
Noto Fonts - A font family provided by Google. Features a wide support for a variety of languages and styles.
-
Plex - The font family of IBM. Offers a wide variety of styles from the serif, sans, and monospace. [9]
-
Source Serif Pro - A free and open source serif font by Frank Grießhammer for Adobe. Part of the Adobe’s Source Pro open source font family. It is also my go-to serif font for my documents (e.g., LaTeX documents).
-
Source Sans Pro - Another one of the Adobe’s Source Pro open source font family. I use it when paired with Source Serif Pro. The go-to sans font for my go-to serif font.
-
STIX - A mathematical font based from the Times New Roman font. This is my second math font of choice.
Documents
-
Asciidoctor - A text formatting language suitable for creating books, documentations, and writings. Highlights a heavier feature set compared to Markdown.
-
Hugo - A static site generator for creating websites and personal wikis.
-
Jupyter - Similar to R Markdown except with a stronger emphasis for literate programming. This is closely associated with the Anaconda distribution. Useful for a variety of document formats to be converted into a website especially with the (bare) support for Pandoc converter.
-
LibreOffice - An office productivity suite and serves as a free alternative to Microsoft Office suite.
-
LuaTeX - The TeX engine I primarily use for my LaTeX documents.
-
Org-mode - A lightweight text formatting language that offers a variety of export options, literate programming, and reproducible of stuff similar to Jupyter Notebooks.
-
Pandoc - A universal document converter that supports a wide variety of document formats. Primarily used for converting Markdown documents into Asciidoctor text.
-
R Markdown - A text formatting language that comes with executing programs with live output in the notebook.
-
TeX Live - A cross-platform LaTeX distribution for compiling LaTeX files.
Mathematical tools
Software development
-
Docker - An application for virtualizing your environments with containers.
-
entr - A utility for running commands for certain filesystem events. Useful for not fiddling with
inotify
. -
GCC - A set of compilers from GNU; I mainly use it for developing and compiling C and C++ languages.
-
Git - My one and only version control system.
-
Godot Engine - A game engine with its own interface.
-
LLVM - A set of compilers similar to GCC; mainly used it for testing other C/C++ stuff.
-
Make - A build automation system.
-
Vagrant - A virtual machine manager with a focus for developer environments.
-
Visual Studio Code - A text editor that comes with lightweight IDE features.
-
Whatever runtimes/toolchains for programming languages I have (e.g., Oracle Java, Rust, Go, LLVM).
Browser extensions
-
Bitwarden - An open source password manager. Comes with a browser extension or a desktop version of the app.
-
Internet Archive Web Extension (Chrome and Firefox version) - A browser extension for tracking down the saved versions of a page. Very useful extension for tracking old resources that has been moved or deleted.
-
uBlock Origin - A security tool for blocking known trackers.
-
OneTab extension - An extension to enable grouping of tabs into one tab. Convenient for preventing a lot of tabs opened at one time.
-
Privacy Badger - A security tool for blocking trackers. Unlike the other blockers like uBlock Origin, Privacy Badger learns with more usage.