dotfiles
dotfiles copied to clipboard
My personal dotfiles and dotfiles installer project
Dotfiles project
This is my personal dotfiles and dotfiles installer project on github.

The first section is about the dot files themselves. See "Getting Started" to read about the install script.
Supported Environment
This describes the configuration dotfiles and the environments supported.
Some of the following may not be fully supported at any time as I change tools.
Software
- Neovim, Vim, IDEAVim
- Zsh, Oh-My-Zsh
- Tmux, Alacritty
- npm, yarn, node
- i3, sway
fzf,rg,fd,bat,exa- Podman
Operating Environments
Environments I've successfully used with these dot files.
- Linux distros. Fedora, Ubuntu, Alpine, Arch.
- Docker containers: alpine, ubuntu, fedora, debian
- Termux Android app
- Remote RHEL servers over ssh (w/o git installed)
- WSL 1 (WSL 2 not tested)
- Cygwin, Msys2
- Git for Windows (stripped down Msys2)
Notable Features of my configuration
- Auto-install of plugin managers for Neovim, Tmux, Zsh, on first use
- Dracula theme for Neovim, Tmux, Alacritty, i3/sway, Gtk, Slack, but with darker background
- True color support across alacritty, tmux, Neovim
.zshrcalso serves as a.bashrcinit.vimalso serves as a.vimrc- Powerline fonts across alacritty, tmux, neovim
- Mouseless usage as a goal, with vi keybindings when possible
- Similar keybindings for tmux, i3, neovim
- Global git pre-commit hook to run editorconfig checker
- Integration between Jetbrains IDEs and Neovim
- Supplies files for
/etc
Notable individual files and directories
- .vimrc implements Neovim defaults and then sources .config/nvim/init.vim
- .config/dotfiles location for support files for this dotfiles project.
Various high level To-Dos
- Folder, files, and repos
- Git submodules for OMZ, tmux tpm, qt, my neovim.
- Some kind of google sync/UI for drive and photos
- Separate repo for Neovim configuration
- Private encrypted github repo for /etc and home secrets
- netlify, stripe
.config/git/config,.ssh,.pgpass,.pki,.npmrc,.gnupg,.gptshrc.config/keepassxc/keepassxc.ini- dconf as a text file
- Keep
passwords.kdbxin Google drive. - Move personal scripts from
~/.local/binto~/bin
- Other data integrations
- GSConnect
- Configure firefox with sync
- Mappings and configuration
- Better integrate i3/sway, Neovim, tmux, firefox, zathura, tuir, vifm, jetbrains.
- Switch to Neovim native LSP. Fallback to ALE
- Installs and scripts
- Install script for packages, including Google Drive and Keepass
- Gnome CPU usage
Getting started
This describes how to install the dotfiles from this project. The script will backup your existing files to a branch.
To install
sh -c "$(curl https://git.io/msdot -L)"
or, if you don't have curl, and don't want a prompt
sh -c "$(wget https://git.io/msdot -O -)" -- i
or, if you don't want to use the install script, you can install manually: (This will overwrite existing files, without backup.)
cd ~
curl -sO https://raw.githubusercontent.com/mikeslattery/dotfiles/master/.zshrc
sh .zshrc install
source .zshrc
git clone --bare https://github.com/mikeslattery/dotfiles .dotfiles
config config --local status.showUntrackedFiles no
config config --local core.excludesFile ~/.config/dotfiles/gitignore
config config --local submodule.recurse true
config reset --hard
config pull
Requirements
- for install:
gitorunzip,curlorwget - for pushes:
git,openssh, and keys registered with github - In .zshrc:
alias config="git -C $HOME --git-dir=$HOME/.dotfiles --work-tree=$HOME" - In .zshrc:
export "PATH=$PATH:$HOME/.local/bin:$HOME/bin"
What install does
- Create a bare git repo at
~/.dotfiles - Checkout files to
$HOME. - Git is configured to not show untracked files
- Backup original files to a branch,
backup-master-$HOSTNAME. (requiresgitbe installed beforehand) - if git user.email isn't set, download
.gitconfigor input interactively. - if git+ssh isn't set up or installed, fall back to https
- if
gitisn't installed, fall back to download files - if
curlisn't installed, fall back towget
So, basically $HOME is a Git repo, but .git is renamed .dotfiles to avoid conflicts with other tools.
The script handles a lot of use cases to ensure success in all environments.
For more information see the .local/bin/dotfiles script.
Managing the dot files
After installation, the config alias will act like git
but only for your dot files in $HOME.
Advice and pitfalls
- Never run:
config add <directory>,config add -A, orconfig commit -a -m <message>. Instead use:config add -uorconfig add <file> - Dot files will not be backed up if you don't have
gitinstalled at time of install. - If you installed without
gitand then decide to installgitlater, you can then rundotfiles installto create the~/.dotfilesbare repo. configworks best if run from home directory.uninstallmay remove some git submodule directories which may break original functionality (e.g. OMZ, tpm, .themes)
Install Script Details
This is additional information about the install script. It is located at .local/bin/dotfiles.
Usage: (after install)
config ... - git subcommand. Requires alias in .zshrc
dotfiles help - Usage.
dotfiles etc - Copy ~/.config/dotfiles/etc to /etc
dotfiles ssh <host> - Install to ssh host
dotfiles tar <host> - Copy to ssh host w/o github access
dotfiles docker <id>- Install into a running docker container
dotfiles uninstall - Revert to config as before install.
dotfiles docker <id>- Install into a running docker container
dotfiles curl|wget - Print out install command, for copy-paste purposes.
dotfiles ... - git subcommand. (in case `config` alias not set)
To make your own
To incorporate a customized copy of the dotfiles script into your dotfiles repo:
- Match the requirements section.
- Create an empty dotfiles repo on https://github.com
- Run:
DOTFILES_NAME=<github-username>/dotfiles sh -c "$(curl https://git.io/msdot -L)"
The only file from this repo you'll inherit is dotfiles,
but it will be modified with your defaults.
Environmental override variables
DOTFILES_NAME - github owner/project.
DOTFILES_BRANCH - default is master
DOTFILES_DIR - default is ~/.dotfiles
More Information
- https://www.atlassian.com/git/tutorials/dotfiles
- Read the .local/bin/dotfiles script
- Other files in .config/dotfiles
FAQ
Q: Why not use one of the other dotfiles managers or stow?
A: I wanted something as simple as plain git, but no simpler.
Q: But isn't your script also complicated?
A: The script is optional and only for initial install. The core of what it does is simple, but it handles several special cases.
Q: Why not use symlinks to all the files, instead of a bare repo?
A: I used to, but they don't track with file deletions or moves, adding a file required more steps, and uninstalling or moving the repo was a mess.
Q: How did you create the shortened vanity URL? Is it safe?
A: git.io is run by github.
This command allocated the URL:
url="https://raw.githubusercontent.com/mikeslattery/dotfiles/master/.local/bin/dotfiles"
curl https://git.io/ -i -F "url=$url" -F "code=msdot"