These are the configuration files I use to configure things like Emacs. I use this repository to keep these configurations in sync across workstations.
I use GNU Stow for “dotfile” management.
To use this repository, clone it into your home directory. By default, stow will install packages into its parent directory.
To install a package:
cd dotfiles
stow doom_emacs
The commands above will create the appropriate symlink in the your home directory.
sudo apt-get install dwm suckless-tools xdm dmenu xorg nitrogen
pip install --no-cache-dir cairocffi qtile
pip install xcffib; pip install cairocffi
sudo apt-get install i3 suckless-tools
add-apt-repository -y ppa:kelleyk/emacs
apt-get update
apt-get upgrade -y
apt-get install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y fonts-powerline i3 suckless-tools stow xorg \
gnome-terminal emacs27 ripgrep fd-find fonts-firacode docker-ce docker-ce-cli containerd.io awscli jq unzip \
libtool cmake
curl https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb -o /tmp/session-manager-plugin.deb
dpkg -i /tmp/session-manager-plugin.deb
rm /tmp/session-manager-plugin.deb
timedatectl set-ntp on
pacman -S ripgrep-all fd git emacs ttf-fira-code powerline-fonts i3 stow pyenv base-devel \
xss-lock dnsutils ksysguard jq leiningen hunspell-en_us python-black \
pyenv python-pytest starship texlive-latexextra exa xorg-xinput vim picom \
autorandr
snap install zoom-client
sudo sed -Ei '/EnableAUR/s/^#//' /etc/pamac.conf
pamac install aws-session-manager-plugin clj-kondo-bin aws-cli-v2-bin
pacman -S docker
systemctl start docker
systemctl enable docker
usermod -aG docker dboitnot
usermod -s /usr/bin/bash dboitnot
# As user
systemctl --user enable emacs
systemctl --user start emacs
Use a “normal” window manager to configure the monitor arrangement. Then save the configuration using #autorandr#:
autorandr --save main
# i3 will then load this config on login using:
autorandr --change main
mhwd-kernel -li
# Note your kernel version
sudo pacman -S virtualbox
# Select the appropriate host modules provider
sudo vboxreload
sudo pacman -S vagrant
vagrant plugin install vagrant-disksize
vagrant plugin install vagrant-guest_ansible
sudo pacman -S qemu # If not using pyenv: python python-pip python-wheel
pip install click request2
cd ~/projects
git clone https://github.com/foxlet/macOS-Simple-KVM.git
cd macOS-Simple-KVM
./jumpstart.sh
https://passthroughpo.st/new-and-improved-mac-os-tutorial-part-1-the-basics/
flatpak install https://dl.flathub.org/repo/appstream/com.toggl.TogglDesktop.flatpakref
flatpak run TogglDesktop
sudo snap install teams
teams
sudo pacman -S evolution evolution-ews
# DO NOT USE SUDO
gpg --recv-keys 1C61A2656FB57B7E4DE0F4C1FC918B335044912E
pamac install dropbox
# These steps will prevent auto-update which gets weird with systemd
rm -rf ~/.dropbox-dist # May not exist
install -dm0 ~/.dropbox-dist
systemctl --user enable --now dropbox
TODO: This would be good as a Docker service
https://cvanelteren.github.io/post/mu4e/ https://github.com/harishkrupo/oauth2ms https://wiki.archlinux.org/title/isync#Using_XOAUTH2 https://www.chrislockard.net/posts/o365-mail-emacs-mbsync-mu4e/#mbsync https://gitlab.com/muttmua/mutt/-/blob/master/contrib/mutt_oauth2.py.README
If you haven’t already, you’ll need to create a GPG keypair and configure it as
your default encryption key. When mutt_oauth2.py
gets your temporary token, it
needs to store it in a file which can then be used by the mbsync process. Even
though it’s temporary, we don’t want this token to be in plain text. So we
configure mutt_oauth2.py
to encrypt it and mbsync
to decrypt it using your
default GPG key.
gpg --gen-key
Add the key ID to ~/.gnupg/gpg.conf
default-key <Key ID>
sudo pacman -S isync msmtp
pamac install mu cyrus-sasl-xoauth2-git oauth2token # davmail
cd ~/dotfiles
stow mu4e
python ~/.config/mu4e/mutt_oauth2.py --authorize ~/.config/mu4e/sig-token.gpg
# OAuth2 registration: microsoft
# Preferred flow: localhostauthcode
# e-mail: <Office 365 E-mail>
# Navigate to the link and complete any sign-in
python ~/.config/mu4e/mutt_oauth2.py ~/.config/mu4e/sig-token.gpg
python ~/.config/mu4e/mutt_oauth2.py --authorize ~/.config/mu4e/gmail-token.gpg
# OAuth2 registration: google
# Preferred flow: localhostauthcode
# e-mail: <Google E-mail>
# Navigate to the link and complete any sign-in
python ~/.config/mu4e/mutt_oauth2.py ~/.config/mu4e/gmail-token.gpg
# We don't use davmail anymore
# systemctl --user enable --now davmail@sig
# Send a test message, a pop-up should appear to finish the authorization process
msmtp -a sig dboitnot@gmail.com
Just a test from sig
^d
msmtp -a gmail boitnott@sigcorp.com
Just a test from gmail
^d
mkdir -p ~/.mail/sig ~/.mail/gmail
mbsync -a
# This will take a while.
mu init --maildir=~/.mail \
--my-address boitnott@sigcorp.com \
--my-address dboitnot@gmail.com \
--my-address dan@lclinux.org \
--my-address dboitnot@fastmail.fm
mu index
Once everything’s working, you can enable auto-fetching of e-mail:
systemctl --user daemon-reload
systemctl --user enable --now mbsync.service
systemctl --user enable --now mbsync.timer
https://wiki.archlinux.org/title/ClamAV#Starting_the_daemon
sudo pacman -S clamav
sudo systemctl enable --now clamav-freshclam
# Test to make sure signatures are up-to-date
curl https://secure.eicar.org/eicar.com.txt | clamscan -
# Output MUST contain:
# stdin: Win.Test.EICAR_HDB-1 FOUND
# Add more signature providers
# NB: Run as root, don't sudo. Otherwise pyenv gets in the way.
pamac install python-fangfrisch
sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
systemctl enable fangfrisch.timer
# Perform a scan
clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /
Add to ~/.bashrc
:
open () {
nohup xdg-open $* &
}
case $TERM in
xterm-kitty) export TERM=xterm ;;
esac
alias vi=vim
export PATH="$PATH:$HOME/.emacs.d/bin"
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
export PATH="$HOME/projects/client_vms/bin:$PATH"
# powerline-daemon -q
# POWERLINE_BASH_CONTINUATION=1
# POWERLINE_BASH_SELECT=1
# . /usr/share/powerline/bindings/bash/powerline.sh
eval "$(starship init bash)"
# Vim-style keybindings
set -o vi
Add to ~/.profile
:
if [ "$0" = "/etc/lightdm/Xsession" -a "$DESKTOP_SESSION" = "i3" ]; then
export $(gnome-keyring-daemon --start --components=ssh)
fi
# As user
xinput list
# Note id# of Touchpad
# Set an enviroment variable for the touchpad's device number
TP=10
# Get current settings
xinput list-props $TP
xinput set-prop $TP 324 1
See Also: https://wiki.archlinux.org/title/Libinput
Here is a list of Linux apps I’m using or considering.