No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 14 commits behind CNG:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.

@CNG/dotfiles (Arch Linux)

This Bash and Ansible project installs Arch Linux from scratch and configures it for use on my desktop and laptop.

The contents of ansible is based on @pigmonkey/spark with roles and components added or removed; consider reviewing that project for useful bits or updates. Much of my previously script based configuration for Mac is now simplified for Linux in files.


  1. Create Arch Linux USB installation media.
  2. Copy this repository to the media.
  3. Boot from the media and run lsblk.
  4. Open base in a text editor.
  5. Set setuppartition to the /dev/ address of the installation media.
  6. Set rootdevice to the /dev/ path of the system drive. This might be the output of lsblk -d -p -n -l -o NAME -e 7,11 | head -1, such as /dev/nvme0n1.
  7. Execute base; remove USB media when it reboots at the end.
  8. Execute provision.

About the system



Xorg config, autorandr, mouse setup, graphics drivers

TODO: Login: LightDM

ansible/roles/lightdm/tasks/main.yml: lightdm-webkit2-greeter + lightdm-webkit2-theme-material2

/etc/lightdm/lightdm.conf.d/50-lightdm.conf: attempts to set key repeat and delay with xserver-command=X -ardelay 150 -arinterval 50. This does not always stick, so I also added it to my i3 config (exec_always --no-startup-id xset r rate 250 50 # for X).

TODO: i3 Window Manager

Terminal: Alacritty, Zsh and Tmux


I use Alacritty, a simple, performant terminal emulator that uses GPU rendering. It provides little beyond the basics, but can be configured by file (unlike st, which requires recompiling to make changes). I initially used a version of Alacritty (now a part of core) that provided a scrollback feature, which I had gotten used to in iTerm2 on Mac. I switched back to the normal Alacritty once I figured out a suitable way to do this from within Tmux.

~/.config/alacritty/alacritty.yml highlights

I'm using the font Input Mono and tried to make the colors roughly like Molokai, though I need some work on my colors in terminal and Tmux. I set background_opacity: 0.6 because I like the look, but it admittedly makes it harder to read text. I usually keep the terminal over less distracting areas of my desktop background. :)

I liked having a consistent command for copy and paste on Mac, and initally I tried to avoid the default terminal behavior of needing to hold Shift. Additionally, since I use Dvorak, the standard C, V and X keys are not near each other. I thought it might make sense to use the Y and P keys for copy and paste like in Vim, but realized later this conflicted with ^P for print in many apps. I'm still deciding what to do. For now I have this in my Alacritty config, but I think I am handling it in other higher level configs, so I need to reevaluate:

  # copy and paste kind of like Vim
  - { key: P,        mods: Control, action: Paste                        }
  - { key: Y,        mods: Control, action: Copy                         } 


I use Z shell, or "zsh". I'm still working on my configuration, which has been evolving since I carried most of it over from my Mac dotfiles. I am using the oh-my-zsh plugin manager by @robbyrussell.

The "top level" configuration ~/.zshenv is always loaded, even when Zsh is launched from a scheduled task, which I do to use some of my custom Zsh functions. Then everything I need only when using a terminal interactively is defined in ~/.zshrc.

My favorite plugin is history-search-multi-word, which I have installed with Ansible and loaded via oh-my-zsh.


Tmux automatically starts with systemd. The user service file tmux.service is enabled via Ansible in roles/base/tasks/shell.yml.

Then Zsh connects to Tmux automatically when I open a shell. The tmux oh-my-zsh plugin loads from ~/.zsh/config/tmux/plugins.zsh and gets configuration from ~/.zsh/config/tmux/tmux.zsh, which specifies ZSH_TMUX_AUTOSTART=true and ZSH_TMUX_FIXTERM=false.

My Tmux config file ~/tmux.conf sets up my main keyboard shortcuts and these plugins:

Tmux cheatsheet

Navigating between panes can be done by ^b+arrow keys, or thanks to vim-tmux-navigator, by ^h, ^j, ^k and ^l, and ^\ for previous split.

All of these require ^b first, then:

  • sessions: :new
  • windows: c create, l list, n next, p previous, & kill, f find, , name
  • panes: / split horizontally, - split vertically, o swap, q show numbers, x kill, + break to window, - restore from window, toggle layouts
  • other: t big clock, d detach, ? list shortcuts, L toggle logging, I install plugins, P save complete history (also happens on ^d)


My Vim configuration ~/.vimrc loads the Pathogen package manager, which loads the plugins installed via Ansible in ansible/roles/editors/tasks/main.yml. I am still getting the hang of Vim, which I have used for a long time but only at a "basic" level till around 2017, which I started making an effort.