Dotty with your dotfiles? Try dotty, a scalable dotfiles manager for linux and macos.
This repo is forked from Hlissner's dotfiles.
Dotty is tested on Ubuntu, Arch, AmazonLinux 2 and MacOS!
Follow my channel's tutorial if you like:
Youtube | Bilibili |
---|---|
Note: if you're in China. Use the homebrew mirror https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/
bash <(curl -s https://raw.githubusercontent.com/ztlevi/dotty/main/bootstrap.sh)
This script will install homebrew, zsh and clone this dotty repo.
Note: You can also fork this repo. After fork, update your bootstrap.sh script with your git url. Then you can add your personal customization.
cd ~/.config/dotty
# gh is gitHub command-line tool https://github.com/cli/cli
# gh credentials are used by git
gh auth login
# (SKIP THIS) Initialize my personal assets submodule. Only me has the private repo access
# Cannot clone private submodules with password. Maybe it's due to two-factor auth is enabled.
# Authenticate with gh solves this issue.
# git clone -d 1 https://github.com/ztlevi/dotty-assets.git assets
# (REQUIRED) Minimal setup, and start a new shell, afterwards, you can use `dotty` instead `./deploy`
./deploy base/macos # MacOS
./deploy base/linux # Debian, Arch or RHEL
./deploy shell/zsh shell/git shell/work shell/tmux editor/neovim && zsh
# (IMPORTANT) Setup local git confing following this README
# https://github.com/ztlevi/dotty/blob/main/shell/git/README.md
# (Optional) Linux Desktop Environment (Gnome/Bspwm)
dotty wm/gnome
# (Optional) MacOS Tiling Window Manager
dotty wm/aerospace
# Shell: highly recommend to use alacritty since my tmux keys are based on alacritty keymaps
dotty shell/alacritty shell/yazi shell/fzf
# Editor
dotty editor/emacs editor/editorconfig editor/vscode
# Development
dotty dev/cc dev/go dev/node dev/python dev/java
# Misc
dotty misc/apps misc/docker misc/aws misc/cspell misc/unison
# (OPTIONAL) private apps. Do not install on company machines.
# dotty misc/private
# general
bin/ # global scripts
fonts/ # user fonts
assets/ # wallpapers, sounds, screenshots, etc
wm/ # linux window manager environments
desktop/ # linux desktop apps
# categories
base/ # provisions my system with the bare essentials
dev/ # relevant to software development & programming in general
editor/ # configuration for my text editors
misc/ # for various apps & tools
shell/ # shell utilities, including zsh + bash
Usage: dotty [-acdlLit] [TOPIC...]
-a Target all enabled topics (ignores TOPIC args)
-c Afterwards, remove dead symlinks & empty dot-directories in $HOME.
Can be used alone.
-d Unlink and run `./_init clean` for topic(s)
-l Only relink topic(s) (implies -i)
-L List enabled topics
-i Inhibit install/update/clean init scripts
-t Do a test run; do not actually do anything
-H Print usage of the topic
e.g.
dotty base/arch shell/{zsh,tmux}
: enables base/arch, shell/zsh & shell/tmuxdotty -d shell/zsh
: disables shell/zsh & cleans up after itdotty -l shell/zsh
: refresh links for shell/zsh (inhibits init script)dotty -l
: relink all enabled topicsdotty -r
: reinstall the topic(s)dotty -L
: list all enabled topicsdotty -H shell/tmux
: print usage of the topic
Here's a breakdown of what the script does:
cd $topic
if [[ -L $DOTTY_DATA_HOME/${topic//\//.}.topic ]]; then
./_init update
else
ln -sfv $DOTTY_CONFIG_HOME/$topic $DOTTY_DATA_HOME/${topic//\//.}.topic
source $DOTTY_CONFIG_HOME/$topic/env.zsh
./_init install
./_init link
fi
CLI | CLI replacment | Description |
---|---|---|
cat | bat | A cat(1) clone with syntax highlighting and Git integration. |
cat | tailspin | log file highlighter |
ls | eza | A modern replacement for ls . |
grep | ripgrep | Better grep written in rust. |
find | fd | A simple, fast and user-friendly alternative to find |
ps | procs | A modern replacement for ps written in Rust |
sed | sd | Intuitive find & replace CLI (sed alternative) |
df | duf | Disk Usage/Free Utility - a better 'df' alternative |
du | dirstat-rs | disk usage cli, similar to windirstat. |
dotty dev/work && echo "export DOTTY_THEME=dark" > $HOME/dev/work/dots/theme.zsh
update_dotty
- Don't forget to import your private/public GPG keys. If you're interested in GPG forwarding over ssh, see README.
Check out my update_dotty
function
update_dotty.
Most of the time, I can simply run update_dotty
. If you have something new to install and
uninstall things, you can put the scripts in
here. Typically I use force
option, e.g. berw install -f
to perform the operation even if it's already uninstalled or
installed to avoid any blocking, when you try running update_dotty
multiple times.
- Why I cannot do git commit?
- Make sure you create your GPG key or delete
user.signingkey
property in$HOME/.config/git/config
.
- Make sure you create your GPG key or delete
- What if I have some local zsh configuration?
- You can
dotty shell/work
, and put things under$HOME/work/dots/env.zsh
or$HOME/work/dots/aliases.zsh
- You can
- How can I change alacritty theme and font?
- Check out directory
shell/alacritty/config/alacritty/
and create your own configurations if needed. For simplicity, you can use the existing themes or fonts. For example, putexport ALACRITTY_THEME="theme-pink.yml"
andexport ALACRITTY_FONT=font-operator-mono.yml
in~/dev/work/dots/env.zsh
. After the env activated, reload alacritty config withdotty -l shell/alacritty
.
- Check out directory
- How can I change zsh theme?
- There are plenty of themes I used to use inside
shell/zsh/zinit-init-hook.zsh
. To customize it and use starship, you can putexport ZSH_THEME="starship"
inside~/dev/work/dots/env.zsh
.
- There are plenty of themes I used to use inside
- I want to use dark theme, what changes should I make?
- I'm running the bootstrap script on AWS EC2 instance, but I don't know the password.
- AWS EC2 instance doesn't come with password. Change it with for example
sudo passwd $(whoami)
- AWS EC2 instance doesn't come with password. Change it with for example
- How do I sync between different machines?
- Unfortunately, there is no such easy way. For me, I put down install/uninstall scripts in
dotty/legacy_sync_script.zsh
and every time I run update_my_repos aliased asuu
, it will run thelegacy_sync_script.zsh
. NixOS has such ability to resolve what have changed in your configuration and able to install and uninstall software and make sure they are consistent across machines. If you're interested, you can try my dotty-nix.
- Unfortunately, there is no such easy way. For me, I put down install/uninstall scripts in
- DOOM Emacs (pulled by
editor/emacs
) - My vim config (pulled by
editor/neovim
)