- Window system:
- Xorg
- Window manager:
- Bspwm
- Compositor:
- Picom
- Shell:
- Zsh
- Editor:
- Neovim/vim
- Terminal emulator:
- Alacritty
- Session/screen-lock
- Xsslock (for Xorg triggers)
- Physlock (lockscreen)
- AUR-helper
- Paru
- Misc:
- Polybar
- Rofi
- lsd (ls with colors and icons)
- diff-so-fancy (nicer git diffs)
- zathura (document/pdf-viewer)
- feh (image viewer/xroot-setter)
Configs are managed with GNU stow, to init a config run from (project root)
stow <config-folder>e.g.
stow i3
Lots of the configs also the depend on gitsubmodules so be sure to init all submodules:
git submodule update --init --recursive
While zsh is mainly the shell used, other shells (e.g. bash) should work. Cross-shell exports, commands, etc. can be set in $XDG_CONFIG_HOME/shell/.profile which will be sourced by each shell's respective .profile-file (e.g. .zprofile or .bash_profile).
Scripts are added to $PATH (in .profile) rather than sourced.
To make sure zsh-command is history is retained, create the history file:
mkdir $XDG_DATA_HOME/zsh/ && touch $XDG_DATA_HOME/zsh/historyDevice specific configuration (such as monitor layout) for bspwm can be placed
in $XDG_CONFIG_HOME/.device.bspwm.sh which will be sourced by the bspwmrc.
DWM-like swallowing is supported by
using bspswallow.
Window classes for programs and terminals to swallow are placed in
$XDG_CONFIG_HOME/bspwm/swallow and $XDG_CONFIG_HOME/bspwm/terminals
respectively.
Any nerd font- and powerline-patched font should work. Make sure that this command (or similar ones depending on shell-prompt etc) don't print garbage:
echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"Neovim is used as the editor (there is a config for vim but it is no longer used), and plugins are managed with vim-plug. Linting, language support, formatting, e.t.c is managed by coc.
The xorg-server is started using by $XDG_CONFIG_HOME/shell/.profile using startx.
Default applications can be set for MIME-types using xdg-open in the file
$XDG_CONFIG_HOME/Xorg/.xdefaults, which will be sourced after starting Xorg.
Some necessary util-packages for xorg and some scripts to function are:
xorg-xinitxorg-xrandrxdg-utils
The launch script for polybar requires the POLYBAR_BAR environment variable to be set. This variable can be used to indicate what bar to use with polybar, e.g. desktop or laptop.
Workspace icons for bspwm are set via environment variables POLYBAR_WS_X_ICON
where X is a number between 0 and 9 (for missing environment variables
default value is no icon).
The values should be the same as when configuring polybar directly. For example here's a template of setting these variables:
export POLYBAR_WS_1_ICON="1;"
export POLYBAR_WS_2_ICON="2;"
export POLYBAR_WS_3_ICON="3;"
export POLYBAR_WS_4_ICON="4;"
export POLYBAR_WS_5_ICON="5;"
export POLYBAR_WS_6_ICON="6;"
export POLYBAR_WS_7_ICON="7;ﭮ"
export POLYBAR_WS_8_ICON="8;"
export POLYBAR_WS_9_ICON="9;"
export POLYBAR_WS_0_ICON="0;"The colorscheme is automatically generated from the current wallpaper using pywal.
Colors are set using wal.vim and the following needs to go into vimrc/init.vim.
colorscheme wal
set notermguicolors
set background=lightnotermguicolors and background=light are needed for the colors to look as intended.
Polybar reads its colors from Xresources which are set by pywal.
; Last field is default color
primary = ${xrdb:color1:#FF0000}Pywal generates colorschemes for rofi and puts them in $XDG_CACHE_HOME which are then sourced by rofi.
Pywal generates colorschemes for shell and puts them in $XDG_CACHE_HOME which are then sourced by zsh.
This procedure is heavily based on and copied from jsherman82's arch linux installation with a few tweaks. The commands below used nvme0n1 naming convention for partitions but the sda naming convention should be equivalent. The installation will only provide a basic installation (no DE, WM, etc). Some key features/components of this install:
- Partitions managed with LVM
- Encryption using LVM on LUKS
- Separate root and home partition
- Root partition: 30GiB
- Home partition: The rest
- UEFI
- GRUB
- Swap partition instead of swap file
# nvim /etc/pacmand.d/mirrorlist
# pacman -Syyy
# fdisk /dev/sda
# mkfs.fat -F32 /dev/nvme0n1p1
# mkfs.ext2 /dev/nvme0n1p2
# mkswap /dev/nvme0n1p3
# swapon /dev/nvme0n1p3
# cryptsetup luksFormat /dev/nvme0n1p4
# cryptsetup open --type luks /dev/nvme0n1p4 lvm
# pvcreate --dataalignment 1m /dev/mapper/lvm
# vgcreate volgroup0 /dev/mapper/lvm
# lvcreate -L 30GB volgroup0 -n lv_root
# lvcreate -l 100%FREE volgroup0 -n lv_home
# modprobe dm_mod
# vgscan
# vgchange -ay
# mkfs.ext4 /dev/volgroup0/lv_root
# mkfs.ext4 /dev/volgroup0/lv_home
# mount /dev/volgroup0/lv_root /mnt
# mkdir /mnt/boot
# mkdir /mnt/home
# mkdir /mnt/efi
# mount /dev/nvme0n1p2 /mnt/boot
# mount /dev/volgroup0/lv_home /mnt/home
# mount /dev/nvme0n1p1 /mnt/efi
Install base package, linux kernel/firmware (you can skip the linux-lts packages if you don't want the LTS-kernel) and other packages
# pacstrap -i /mnt base \
linux \
linux-firmware \
linux-headers \
linux-lts \
linux-lts-headers \
grub \
efibootmgr \
dosfstools \
openssh\
os-prober \
lvm2 \
neovim
# genfstab -U -p /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
Edit /etc/mkinitcpio.conf and add encrypt lvm2 in between block and filesystems
# nvim /etc/mkinitcpio.conf
# mkinitcpio -p linux
# mkinitcpio -p linux-lts
# nvim /etc/locale.gen (uncomment en_US.UTF-8 if you want us UTF-8 locale)
# locale-gen
# passwd
add cryptdevice=:volgroup0 to the GRUB_CMDLINE_LINUX_DEFAULT line. If using standard device naming, the option will look like this: cryptdevice=/dev/nvme0n1p4:volgroup0
# nvim /etc/default/grub
(you should be able to change the bootloader-id flag to whatever you want, it is not important). If you have problems with arch installation not showing up in the boot menu try adding the --removable flag to the command below (see this link)
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=grub_uefi --recheck
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
# grub-mkconfig -o /boot/grub/grub.cfg
Exit live environment, unmount devices and restart system (might complain about busy devices but should not matter)
$ exit
# umount -a
# reboot
Remove no longer needed packes
sudo pacman -Rs dosfstools