Major updates for the dev machine rebuild.

This commit is contained in:
Pat Garrity 2024-01-04 22:40:37 -06:00
parent da51944598
commit eee2e16d3d
Signed by: pfm
GPG key ID: 5CA5D21BAB7F3A76
18 changed files with 170 additions and 464 deletions

145
.bashrc
View file

@ -1,145 +0,0 @@
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# =============================================================================
# Personalized Logging for Shell Setup
# =============================================================================
logging_enabled=false
log_dir="$HOME/log/$USER"
log_file="$log_dir/shell.log"
if [ -d "$log_dir" ]; then
export SHELL_LOG_FILE="$log_file"
logging_enabled=true
touch "$SHELL_LOG_FILE"
fi
# =============================================================================
# Ripped from default .bashrc
# =============================================================================
HISTCONTROL=ignoreboth
shopt -s histappend
HISTSIZE=1000
HISTFILESIZE=2000
shopt -s checkwinsize
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# =============================================================================
# Command Prompt Customization
# =============================================================================
ps1_startup_file="$HOME/.startup/ps1"
if [ -f "$ps1_startup_file" ]; then
source $ps1_startup_file
else
if $logging_enabled; then
echo "[warn] Custom PS1 for bash missing at " \
"'$ps1_startup_file': " \
"see git@git.sr.ht:~eidolon/scripts" >> "$log_file"
fi
fi
# =============================================================================
# Common Environment Configuration
# =============================================================================
export EDITOR=vim
# =============================================================================
# PATH
# =============================================================================
if [ -d "$HOME/bin" ]; then
export PATH="$HOME/bin:$PATH"
fi
if [ -d "$HOME/.local/bin" ]; then
export PATH="$HOME/.local/bin:$PATH"
fi
if [ -f "$HOME/.cargo/env" ]; then
source "$HOME/.cargo/env"
fi
if [ -f ~/.fzf.bash ]; then
source ~/.fzf.bash
fi
export RACKET_HOME="$HOME/opt/racket"
if [ -d "$RACKET_HOME" ]; then
export PATH="$RACKET_HOME/bin:$PATH"
fi
export BUILDKIT_HOME="$HOME/opt/buildkit"
if [ -d "$BUILDKIT_HOME" ]; then
export PATH="$HOME/opt/buildkit/bin:$PATH"
fi
export JAVA_HOME="$HOME/opt/jdk"
if [ -d "$JAVA_HOME/bin" ]; then
export PATH="$JAVA_HOME/bin:$PATH"
fi
export COURSIER_HOME="$HOME/.local/share/coursier"
if [ -d "$COURSIER_HOME/bin" ]; then
export PATH="$COURSIER_HOME/bin:$PATH"
fi
export N_PREFIX=/home/pfm/.n
if [ -d "$N_PREFIX/bin" ]; then
export PATH="$N_PREFIX/bin:$PATH"
fi
export DOTNET_ROOT="$HOME/.dotnet"
export DOTNET_CLI_TELEMETRY_OPTOUT=1
if [ -d "$DOTNET_ROOT" ]; then
export PATH="$DOTNET_ROOT:$DOTNET_ROOT/tools:$PATH"
fi
# =============================================================================
# SSH Agent Management
# =============================================================================
ssh_agent_startup_file="$HOME/.startup/start-ssh-agent"
if [ -f "$ssh_agent_startup_file" ]; then
source "$ssh_agent_startup_file"
else
if $logging_enabled; then
echo "[warn] SSH Agent startup code missing at " \
"'$ssh_agent_startup_file': " \
"see git@git.sr.ht:~eidolon/scripts" >> "$log_file"
fi
fi
# =============================================================================
# Aliases
# =============================================================================
if command -v exa > /dev/null 2>&1; then
alias ls='exa'
alias ll='exa -l'
else
if $logging_enabled; then
echo "[warn] exa is not setup! Using the system ls" >> "$log_file"
fi
fi
if command -v nvim > /dev/null 2>&1; then
alias vim='nvim'
else
if $logging_enabled; then
echo "[warn] Neovim is not setup! Using the system vim" >> "$log_file"
fi
fi
# =============================================================================
# Scala/SBT Setup
# =============================================================================
if command -v sbt > /dev/null 2>&1; then
export SBT_OPTS="-XX:+UseG1GC -Xmx2048m"
fi

View file

@ -0,0 +1,77 @@
[colors.bright]
black = "0x32302f"
blue = "0x7daea3"
cyan = "0x89b482"
green = "0xa9b665"
magenta = "0xd3869b"
red = "0xea6962"
white = "0xd4be98"
yellow = "0xd8a657"
[colors.cursor]
cursor = "CellForeground"
text = "CellBackground"
[colors.normal]
black = "0x32302f"
blue = "0x7daea3"
cyan = "0x89b482"
green = "0xa9b665"
magenta = "0xd3869b"
red = "0xea6962"
white = "0xd4be98"
yellow = "0xd8a657"
[colors.primary]
background = "0x1d2021"
foreground = "0xd4be98"
[colors.selection]
background = "CellForeground"
text = "CellBackground"
[colors.vi_mode_cursor]
cursor = "CellForeground"
text = "CellBackground"
[cursor]
unfocused_hollow = true
[cursor.style]
blinking = "Off"
shape = "Block"
[env]
TERM = "xterm-256color"
[font]
size = 13.0
[font.bold]
family = "Iosevka Term"
style = "Bold"
[font.bold_italic]
family = "Iosevka Term"
style = "Bold Italic"
[font.italic]
family = "Iosevka Term"
style = "Italic"
[font.normal]
family = "Iosevka Term"
[scrolling]
history = 10000
multiplier = 3
[selection]
semantic_escape_chars = ",│`|:\"' ()[]{}<>\t"
[window]
decorations = "full"
dynamic_title = false
opacity = 1.0
startup_mode = "Windowed"
title = "Alacritty"

View file

@ -117,7 +117,7 @@ font:
# - (macOS) Menlo
# - (Linux/BSD) monospace
# - (Windows) Consolas
family: monospace
family: "Iosevka Term"
# The `style` can be specified to pick a specific face.
#style: Regular
@ -128,7 +128,7 @@ font:
#
# If the bold family is not specified, it will fall back to the
# value specified for the normal font.
family: monospace
family: "Iosevka Term"
# The `style` can be specified to pick a specific face.
style: Bold
@ -139,7 +139,7 @@ font:
#
# If the italic family is not specified, it will fall back to the
# value specified for the normal font.
family: monospace
family: "Iosevka Term"
# The `style` can be specified to pick a specific face.
style: Italic
@ -150,7 +150,7 @@ font:
#
# If the bold italic family is not specified, it will fall back to the
# value specified for the normal font.
family: monospace
family: "Iosevka Term"
# The `style` can be specified to pick a specific face.
style: Bold Italic

View file

@ -11,7 +11,7 @@ set $mod Mod4
font pango:Iosevka Term 11
# Set the desktop background
exec --no-startup-id feh --bg-scale /home/pfm/images/backgrounds/nasa_carina_nircam.jpg
exec --no-startup-id feh --bg-scale ~/images/backgrounds/current-background.jpg
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
@ -32,7 +32,7 @@ bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOU
floating_modifier $mod
# start a terminal
bindsym $mod+Return exec alacritty
bindsym $mod+Return exec ~/.cargo/bin/alacritty
# kill focused window
bindsym $mod+Shift+q kill
@ -75,9 +75,9 @@ bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
bindsym $mod+s exec --no-startup-id "/home/pfm/bin/,ss-region"
bindsym $mod+Shift+s exec --no-startup-id "/home/pfm/bin/,ss-screen"
bindsym $mod+Control+s exec --no-startup-id "/home/pfm/bin/,ss-window"
bindsym $mod+s exec --no-startup-id "~/.local/bin/,ss-region"
bindsym $mod+Shift+s exec --no-startup-id "~/.local/bin/,ss-screen"
bindsym $mod+Control+s exec --no-startup-id "~/.local/bin/,ss-window"
# the default for workspaces should be tabbed
workspace_layout tabbed

View file

@ -33,6 +33,9 @@ map('n', '<leader>cq', ':ccl<CR>', { desc = 'Close Quickfix' })
-- Create a vertical split
map('n', '<leader>v', ':vsplit<CR>', { desc = 'Vertical Split' })
-- Enter the lozenge ◊ character.
map('i', '<C-l>', '<C-k>LZ', { desc = 'Enter the Lozenge Character' })
--------------------------------------------------------------------------------
-- LSP
--------------------------------------------------------------------------------

View file

@ -7,7 +7,7 @@ primary = #fabd2f
secondary = #e60053
alert = #fb4934
[bar/pfm]
[bar/mainbar]
monitor = HDMI-0
bottom = true
width = 100%

View file

@ -2,5 +2,5 @@
killall -q polybar
echo "---" >> /home/pfm/log/pfm/polybar.log
polybar pfm >> /home/pfm/log/pfm/polybar.log 2>&1 & disown
echo "---" >> "$HOME/.local/log/$(whoami)/polybar.log"
polybar mainbar >> "$HOME/.local/log/$(whoami)/polybar.log" 2>&1 & disown

View file

@ -1,6 +1,7 @@
[user]
email = pfm@meager-software.com
name = pfm
email = pfm@garrity.co
name = Pat Garrity
signingkey = AB7F3A76
[alias]
ll = log --oneline --decorate --graph
ls = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate
@ -29,4 +30,6 @@
syntax-theme = gruvbox-dark
navigate = true
[init]
defaultBranch = main
defaultBranch = main
[commit]
gpgsign = true

2
.gitignore vendored
View file

@ -2,6 +2,4 @@ metals.sbt
.bsp/
.bloop/
.metals/
zig-cache/
zig-out/
jsconfig.json

View file

@ -1,28 +0,0 @@
# Determine whether or not we should support color.
case "$TERM" in
xterm-color|*-256color|rxvt-unicode) color_prompt=yes;;
esac
# Emit the current date and time.
__prompt_date() {
echo "$(date '+%D %r')"
}
# Define a function that extracts the current git branch, if available.
__git_branch() {
ref="$(git symbolic-ref HEAD 2>/dev/null | cut -d'/' -f3)"
if [ ! -z $ref ]; then
echo " $ref"
else
echo ""
fi
}
# Assign the prompt.
if [ "$color_prompt" = yes ]; then
PS1='\[\033[01;32m\]\u:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;31m\]$(__git_branch)\[\033[00m\] $(__prompt_date)\n\$ '
else
PS1='\u:\w$(__git_branch) $(__prompt_date)\n\$ '
fi
unset color_prompt

View file

@ -1,22 +0,0 @@
# Start ssh-agent if it is not already running. If it is running, ensure the
# environment variables are set properly.
# This is intended for sourcing within some startup file like .bashrc or .zshrc
sock_file="$HOME/.ssh-agent-sock"
pid_file="$HOME/.ssh-agent-pid"
touch $sock_file
touch $pid_file
if ps -p $(cat $pid_file) > /dev/null 2>&1; then
export SSH_AUTH_SOCK="$(cat $sock_file)"
export SSH_AGENT_PID="$(cat $pid_file)"
else
# Start a new instance of the SSH agent.
eval "$(ssh-agent)"
# Record the new settings in the agent tracking files.
echo $SSH_AUTH_SOCK > $sock_file
echo $SSH_AGENT_PID > $pid_file
fi

87
.zshrc
View file

@ -1,14 +1,19 @@
eval "$(starship init zsh)"
export HISTFILE="$HOME/.zsh_history"
export HISTSIZE=1000
export SAVEHIST=5000
local_install_dir="$HOME/.local/install"
# =============================================================================
# GPG Initialization (Ensure prompts work properly).
# =============================================================================
export GPG_TTY=$(tty)
# =============================================================================
# Personalized Logging for Shell Setup
# =============================================================================
logging_enabled=false
log_dir="$HOME/log/$USER"
log_dir="$HOME/.local/log/$USER"
log_file="$log_dir/shell.log"
if [ -d "$log_dir" ]; then
@ -26,33 +31,19 @@ export EDITOR=vim
# =============================================================================
# PATH
# =============================================================================
if [ -d "$HOME/bin" ]; then
export PATH="$HOME/bin:$PATH"
fi
if [ -d "$HOME/.local/bin" ]; then
export PATH="$HOME/.local/bin:$PATH"
fi
if [ -f "$HOME/.cargo/env" ]; then
source "$HOME/.cargo/env"
if [ -d "$HOME/.cargo/bin" ]; then
export PATH="$HOME/.cargo/bin:$PATH"
fi
if [ -f ~/.fzf.zsh ]; then
source ~/.fzf.zsh
fi
export RACKET_HOME="$HOME/opt/racket"
if [ -d "$RACKET_HOME" ]; then
export PATH="$RACKET_HOME/bin:$PATH"
fi
export BUILDKIT_HOME="$HOME/opt/buildkit"
if [ -d "$BUILDKIT_HOME" ]; then
export PATH="$HOME/opt/buildkit/bin:$PATH"
fi
export JAVA_HOME="$HOME/opt/jdk"
export JAVA_HOME="$local_install_dir/jdk"
if [ -d "$JAVA_HOME/bin" ]; then
export PATH="$JAVA_HOME/bin:$PATH"
fi
@ -62,34 +53,33 @@ if [ -d "$COURSIER_HOME/bin" ]; then
export PATH="$COURSIER_HOME/bin:$PATH"
fi
export N_PREFIX=/home/pfm/.n
export N_PREFIX="$HOME/.n"
if [ -d "$N_PREFIX/bin" ]; then
export PATH="$N_PREFIX/bin:$PATH"
fi
export GO_HOME="$HOME/go"
if [ -d "$GO_HOME/bin" ]; then
export PATH="$GO_HOME/bin:$PATH"
fi
export DOTNET_ROOT="$HOME/.dotnet"
export DOTNET_CLI_TELEMETRY_OPTOUT=1
if [ -d "$DOTNET_ROOT" ]; then
export PATH="$DOTNET_ROOT:$DOTNET_ROOT/tools:$PATH"
fi
# =============================================================================
# SSH Agent Management
# =============================================================================
ssh_agent_startup_file="$HOME/.startup/start-ssh-agent"
if [ -f "$ssh_agent_startup_file" ]; then
source "$ssh_agent_startup_file"
# Start ssh-agent if it is not already running. If it is running, ensure the
# environment variables are set properly.
ssh_agent_sock_file="$HOME/.ssh-agent-sock"
ssh_agent_pid_file="$HOME/.ssh-agent-pid"
touch $ssh_agent_sock_file
touch $ssh_agent_pid_file
if ps -p $(cat $ssh_agent_pid_file) > /dev/null 2>&1; then
export SSH_AUTH_SOCK="$(cat $ssh_agent_sock_file)"
export SSH_AGENT_PID="$(cat $ssh_agent_pid_file)"
else
if $logging_enabled; then
echo "[warn] SSH Agent startup code missing at " \
"'$ssh_agent_startup_file': " \
"see git@git.sr.ht:~eidolon/scripts" >> "$log_file"
fi
# Start a new instance of the SSH agent.
eval "$(ssh-agent)"
# Record the new settings in the agent tracking files.
echo $SSH_AUTH_SOCK > $ssh_agent_sock_file
echo $SSH_AGENT_PID > $ssh_agent_pid_file
fi
# =============================================================================
@ -112,6 +102,16 @@ else
fi
fi
if command -v podman > /dev/null 2>&1; then
alias docker='podman'
export DOCKER_HOST=unix:///run/podman/podman.sock
export TESTCONTAINERS_RYUK_DISABLED=true
else
if $logging_enabled; then
echo "[warn] Podman is not setup! The 'docker' command will not be available." >> "$log_file"
fi
fi
# =============================================================================
# Scala/SBT Setup
# =============================================================================
@ -133,8 +133,13 @@ autoload -Uz compinit && compinit
# =============================================================================
[[ ! -r /home/pfm/.opam/opam-init/init.zsh ]] || source /home/pfm/.opam/opam-init/init.zsh > /dev/null 2> /dev/null
# =============================================================================
# Initialize Starship
# =============================================================================
eval "$(starship init zsh)"
# =============================================================================
# Enable Command Syntax Highlighting
# This must be the last item in this file.
# =============================================================================
source $HOME/src/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source $local_install_dir/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

View file

@ -14,9 +14,3 @@ $ cd dotfiles
$ ./setup-directories.sh
$ ./install.sh --auto-backup
```
## Documentation
- [Fonts](docs/fonts.md): Fonts that I use regularly.
- [Utilities](docs/utilities.md): List of utilities I use.
- [Programming](docs/programming.md): List of programming languages/tools I use.

View file

@ -1,11 +0,0 @@
# Fonts
## [Iosevka](https://github.com/be5invis/Iosevka/releases)
This is my default font for all terminals and editors.
Use [my scripts](utilities.md#my-scripts):
```bash
$ update-iosevka <version>
```

View file

@ -1,84 +0,0 @@
# Programming
The following are relevant for my current projects:
- [OpenJDK](#openjdk)
- [SBT](#sbt)
- [coursier](#coursier)
- [Scala REPL](#scala-repl)
- [zig](#zig)
- [`x86_64`](#x86-64)
- [`arm64`](#arm64)
- [janet](#janet)
- [racket](#racket)
- [`runc` and `containerd`](#runc-and-containerd)
- [buildkit](#buildkit)
## [OpenJDK](https://openjdk.java.net/)
Download the LTS release from [Adoptium](https://adoptium.net/).
## [SBT](https://www.scala-sbt.org/)
Use [my scripts](utilities.md#my-scripts):
```bash
$ update-sbt <version>
```
## [coursier](https://get-coursier.io/)
Visit the website and run the provided script. Note that setup on ARM64 might
require additional work and the provided script might not work properly.
### [Scala REPL](https://www.scala-lang.org/)
```bash
cs install scala3
```
## [zig](https://ziglang.org/)
Use [my scripts](utilities.md#my-scripts):
### `x86_64`
```bash
$ update-zig --arch x86_64
```
### `arm64`
```bash
$ update-zig --arch aarch64
```
## [janet](https://janet-lang.org/)
Clone [https://github.com/janet-lang/janet](https://github.com/janet-lang/janet)
and build from source. Once installed and `janet` is available on the path,
clone [https://github.com/janet-lang/jpm](https://github.com/janet-lang/jpm) and
build from source.
## [racket](https://racket-lang.org/)
There are multiple options for installation. The easiest approach is to use the
system package manager:
```bash
$ sudo apt install racket
```
Alternatively, use the latest
[source distribution](http://download.racket-lang.org/) and build from source.
## `runc` and `containerd`
```bash
sudo apt install runc containerd
```
## [buildkit](https://github.com/moby/buildkit)
Download the latest release from GitHub:
[https://github.com/moby/buildkit/releases](https://github.com/moby/buildkit/releases)

View file

@ -1,81 +0,0 @@
# Utilities
The following are tools I generally install and are actively using.
- [My Scripts](#my-scripts)
- [rxvt-unicode](#rxvt-unicode)
- [fzf](#fzf)
- [rustup](#rustup)
- [btm (bottom)](#btm-bottom)
- [delta](#delta)
- [exa](#exa)
- [fd](#fd)
- [rg (ripgrep)](#rg-ripgrep)
## My Scripts
These need to be pulled down and installed. This should be the first step.
```bash
$ git clone git@git.sr.ht:~eidolon/scripts
$ mkdir $HOME/bin
$ mkdir $HOME/.startup
$ cd scripts
$ ./install.sh
```
## rxvt-unicode
Clone [https://github.com/exg/rxvt-unicode](https://github.com/exg/rxvt-unicode)
and build from source. Note that the GitHub repository is a mirror of the CVS
repository.
## [fzf](https://github.com/junegunn/fzf)
First, clone the `fzf` repository:
```bash
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
```
Then source the installation script:
```bash
$ source ~/.fzf/install
```
## [rustup](https://rustup.rs/)
Visit the website and run the provided script. While the tools I install via
Cargo are available elsewhere, I like having the Rust toolchain and being able
to pull from Cargo.
### [btm (bottom)](https://github.com/clementtsang/bottom)
```bash
$ cargo install bottom
```
### [delta](https://github.com/dandavison/delta)
```bash
$ cargo install git-delta
```
### [exa](https://github.com/ogham/exa)
```bash
$ cargo install exa
```
### [fd](https://github.com/sharkdp/fd)
```bash
$ cargo install fd-find
```
### [rg (ripgrep)](https://github.com/BurntSushi/ripgrep)
```bash
$ cargo install ripgrep
```

View file

@ -5,7 +5,7 @@ set -o pipefail
set -o nounset
__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
backup_dir="$HOME/.dotfiles/backups"
backup_dir="$HOME/.local/backups/dotfiles"
# Colors for output. So fancy.
@ -24,12 +24,6 @@ config_selection="all"
# Dotfile locations. Note that these locations should be identical between the
# home directory and the dotfile directory.
bashrc=".bashrc"
bashrc_name="bashrc"
bashrc_source="${__dir}/${bashrc}"
bashrc_target="${HOME}/${bashrc}"
bashrc_backup="${backup_dir}/${bashrc_name}"
zshrc=".zshrc"
zshrc_name="zshrc"
zshrc_source="${__dir}/${zshrc}"
@ -84,14 +78,8 @@ fontconfig_source="${__dir}/${fontconfig}"
fontconfig_target="${HOME}/${fontconfig}"
fontconfig_backup="${backup_dir}/${fontconfig_name}"
ssh_agent=".startup/start-ssh-agent"
ssh_agent_name="ssh_agent"
ssh_agent_source="${__dir}/${ssh_agent}"
ssh_agent_target="${HOME}/${ssh_agent}"
ssh_agent_backup="${backup_dir}/${ssh_agent_name}"
function display_configs {
echo 'Supported config targets: all, bashrc, zshrc, profile, i3, i3status, xresources, gitconfig, gitignore, alacritty, fontconfig, ssh_agent, nvim'
echo 'Supported config targets: all, zshrc, profile, i3, i3status, xresources, gitconfig, gitignore, alacritty, fontconfig, nvim'
}
function display_usage {
@ -235,7 +223,6 @@ if $auto_backup; then
fi
# Install all requested configurations.
install_config "${bashrc_name}" "${bashrc_source}" "${bashrc_target}" "${bashrc_backup}"
install_config "${zshrc_name}" "${zshrc_source}" "${zshrc_target}" "${zshrc_backup}"
install_config "${profile_name}" "${profile_source}" "${profile_target}" "${profile_backup}"
install_config "${i3_name}" "${i3_source}" "${i3_target}" "${i3_backup}"
@ -245,7 +232,6 @@ install_config "${gitignore_name}" "${gitignore_source}" "${gitignore_target}" "
install_config "${xresources_name}" "${xresources_source}" "${xresources_target}" "${xresources_backup}"
install_config "${alacritty_name}" "${alacritty_source}" "${alacritty_target}" "${alacritty_backup}"
install_config "${fontconfig_name}" "${fontconfig_source}" "${fontconfig_target}" "${fontconfig_backup}"
install_config "${ssh_agent_name}" "${ssh_agent_source}" "${ssh_agent_target}" "${ssh_agent_backup}"
# Note that all of these configurations are Neovim-related:
install_neovim

View file

@ -4,16 +4,27 @@ set -o errexit
set -o pipefail
set -o nounset
mkdir "$HOME/bin"
mkdir "$HOME/log"
mkdir "$HOME/log/$USER"
mkdir "$HOME/opt"
mkdir "$HOME/src"
mkdir -p "$HOME/.dotfiles/backups"
mkdir -p "$HOME/.config"
mkdir -p "$HOME/.config/alacritty"
mkdir -p "$HOME/.config/fontconfig"
mkdir -p "$HOME/.config/i3"
mkdir -p "$HOME/.config/i3status"
mkdir -p "$HOME/.config/nvim"
mkdir -p "$HOME/.startup"
# Key locations
local_base="$HOME/.local"
config_base="$HOME/.config"
# User level directories.
mkdir -p "$local_base"
mkdir -p "$local_base/bin"
mkdir -p "$local_base/log"
mkdir -p "$local_base/log/$USER"
mkdir -p "$local_base/install"
# Location for source code.
mkdir -p "$HOME/src"
# Backups, used for dotfiles.
mkdir -p "$HOME/.local/backups/dotfiles"
# User level configuration.
mkdir -p "$config_base"
mkdir -p "$config_base/alacritty"
mkdir -p "$config_base/fontconfig"
mkdir -p "$config_base/i3"
mkdir -p "$config_base/i3status"
mkdir -p "$config_base/nvim"