/dotfiles

Dan's dotfiles

Primary LanguageEmacs Lisp

Dan’s Dotfiles

Introduction

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.

Installing Dotfiles

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.

DWM

sudo apt-get install dwm suckless-tools xdm dmenu xorg nitrogen

Qtile

pip install --no-cache-dir cairocffi qtile

pip install xcffib; pip install cairocffi

i3wm

sudo apt-get install i3 suckless-tools

Quick Starts

Ubuntu Quick-Start

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

Manjaro

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

Virtualbox

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

macOS-Simple-KVM

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/

Toggl

flatpak install https://dl.flathub.org/repo/appstream/com.toggl.TogglDesktop.flatpakref
flatpak run TogglDesktop

Teams

sudo snap install teams
teams

Evolution Exchange E-mail & Calendar

sudo pacman -S evolution evolution-ews

Dropbox

# 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

Emacs Email (mu4e)

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

xosview2 (CPU/Mem Monitoring)

ClamAV (Anitvirus)

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' /

Bash

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

Lenovo Yoga

Touchpad

# 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

Linux Apps

Here is a list of Linux apps I’m using or considering.

  • Task Management
    • todoist - Includes a Linux app, mobile, browser plugins
  • Database Access
    • DBeaver - Oracle, MySQL, PostgreSQL, DB2, Couch