Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Break up Zsh configuration files #265

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,9 @@ script/bootstrap
This will symlink the appropriate files in `.dotfiles` to your home directory.
Everything is configured and tweaked within `~/.dotfiles`.

The main file you'll want to change right off the bat is `zsh/zshrc.symlink`,
which sets up a few paths that'll be different on your particular machine.
The main file you'll want to change right off the bat is
`zsh/zshenv.symlink`, which sets up a few paths that'll be different on
your particular machine.

`dot` is a simple script that installs some dependencies, sets sane macOS
defaults, and so on. Tweak this script, and occasionally run `dot` from
Expand Down
10 changes: 5 additions & 5 deletions bin/dot
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
#
# `dot` handles installation, updates, things like that. Run it periodically
# to make sure you're on the latest and greatest.
export ZSH=$HOME/.dotfiles
export DOTFILES=$HOME/.dotfiles

# Set macOS defaults
$ZSH/macos/set-defaults.sh
$DOTFILES/macos/set-defaults.sh

# Install homebrew
$ZSH/homebrew/install.sh 2>&1
$DOTFILES/homebrew/install.sh 2>&1

# Upgrade homebrew
echo "› brew update"
brew update

# Install software
echo "› $ZSH/script/install"
$ZSH/script/install
echo "› $DOTFILES/script/install"
$DOTFILES/script/install
4 changes: 2 additions & 2 deletions bin/set-defaults
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/sh
#
# Sets macOS defaults by running $ZSH/macos/set-defaults.sh.
# Sets macOS defaults by running $DOTFILES/macos/set-defaults.sh.

exec $ZSH/macos/set-defaults.sh
exec $DOTFILES/macos/set-defaults.sh
6 changes: 3 additions & 3 deletions git/gitconfig.symlink
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
protocol = https
[alias]
co = checkout
promote = !$ZSH/bin/git-promote
wtf = !$ZSH/bin/git-wtf
rank-contributors = !$ZSH/bin/git-rank-contributors
promote = !$DOTFILES/bin/git-promote
wtf = !$DOTFILES/bin/git-wtf
rank-contributors = !$DOTFILES/bin/git-rank-contributors
count = !git shortlog -sn
[color]
diff = auto
Expand Down
2 changes: 1 addition & 1 deletion system/_path.zsh
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export PATH="./bin:/usr/local/bin:/usr/local/sbin:$ZSH/bin:$PATH"
export PATH="./bin:/usr/local/bin:/usr/local/sbin:$DOTFILES/bin:$PATH"
export MANPATH="/usr/local/man:/usr/local/mysql/man:/usr/local/git/man:$MANPATH"
4 changes: 2 additions & 2 deletions zsh/config.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ fi
export LSCOLORS="exfxcxdxbxegedabagacad"
export CLICOLOR=true

fpath=($ZSH/functions $fpath)
fpath=($DOTFILES/functions $fpath)

autoload -U $ZSH/functions/*(:t)
autoload -U $DOTFILES/functions/*(:t)

HISTFILE=~/.zsh_history
HISTSIZE=10000
Expand Down
2 changes: 1 addition & 1 deletion zsh/fpath.zsh
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
#add each topic folder to fpath so that they can add functions and completion scripts
for topic_folder ($ZSH/*) if [ -d $topic_folder ]; then fpath=($topic_folder $fpath); fi;
for topic_folder ($DOTFILES/*) if [ -d $topic_folder ]; then fpath=($topic_folder $fpath); fi;
16 changes: 16 additions & 0 deletions zsh/zlogin.symlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# NOTE: Not intended to be used with zprofile, but can be.

# Login configs.
setopt nullglob

# all of our login zsh files
typeset -U login_files
login_files=($DOTFILES/**/*login.zsh)

# run all login files
for file in ${login_files}; do
source "$file"
done

unset login_files
unsetopt nullglob
14 changes: 14 additions & 0 deletions zsh/zlogout.symlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Logout configs.
setopt nullglob

# all of our logout zsh files
typeset -U logout_files
logout_files=($DOTFILES/**/*logout.zsh)

# run all logout files
for file in ${logout_files}; do
source "$file"
done

unset logout_files
unsetopt nullglob
16 changes: 16 additions & 0 deletions zsh/zprofile.symlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# NOTE: Not intended to be used with zlogin, but can be.

# Login profile configs.
setopt nullglob

# all of our profile zsh files
typeset -U profile_files
profile_files=($DOTFILES/**/*profile.zsh)

# run all profile files
for file in ${profile_files}; do
source "$file"
done

unset profile_files
unsetopt nullglob
26 changes: 26 additions & 0 deletions zsh/zshenv.symlink
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Environment configs.
setopt nullglob extendedglob

# shortcut to this dotfiles path is $DOTFILES
export DOTFILES="$HOME/.dotfiles"

# your project folder that we can `c [tab]` to
export PROJECTS="$HOME/Code"

# path and env zsh files
typeset -U path_files env_files
path_files=($DOTFILES/**/*path.zsh~**/*fpath.zsh)
env_files=($DOTFILES/**/*env.zsh)

# load the path files
for file in ${path_files}; do
source "$file"
done

# load the env files
for file in ${env_files}; do
source "$file"
done

unset path_files env_files
unsetopt nullglob extendedglob
38 changes: 18 additions & 20 deletions zsh/zshrc.symlink
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
# shortcut to this dotfiles path is $ZSH
export ZSH=$HOME/.dotfiles

# your project folder that we can `c [tab]` to
export PROJECTS=~/Code
# Interactive environment configs.
setopt nullglob extendedglob

# Stash your environment variables in ~/.localrc. This means they'll stay out
# of your main dotfiles repository (which may be public, like this one), but
Expand All @@ -12,30 +9,31 @@ then
source ~/.localrc
fi

# all of our zsh files
typeset -U config_files
config_files=($ZSH/**/*.zsh)
# all of our non-path/env/profile/login/logout zsh files
typeset -U fpath_files interactive_files completion_files
fpath_files=($DOTFILES/**/*fpath.zsh)
interactive_files=($DOTFILES/**/*.zsh~**/*completion.zsh~**/*path.zsh~**/*env.zsh~**/*alias.zsh~**/*aliases.zsh~**/*profile.zsh~**/*login.zsh~**/*logout.zsh)
Copy link

@carhartl carhartl Dec 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe ~**/*aliases.zsh doesn't belong here. Otherwise aliases defined in zsh/aliases.zsh won't be sourced...

Copy link
Contributor Author

@dysfungi dysfungi Dec 17, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another good catch. Remnants of considering to source alias files in zshenv. Decided it was best to consider aliases as interactive only.

completion_file=($DOTFILES/**/*completion.zsh)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to be completion_files...?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, thank you


# load the path files
for file in ${(M)config_files:#*/path.zsh}
do
source $file
# load fpath config files
for file in ${fpath_files}; do
source "$file"
done

# load everything but the path and completion files
for file in ${${config_files:#*/path.zsh}:#*/completion.zsh}
do
source $file
# load interactive files (everything but the completion, path, env,
# profile, login, and logout files)
for file in ${interactive_files}; do
source "$file"
done

# initialize autocomplete here, otherwise functions won't be loaded
autoload -U compinit
compinit

# load every completion after autocomplete loads
for file in ${(M)config_files:#*/completion.zsh}
do
source $file
for file in ${completion_files}; do
source "$file"
done

unset config_files
unset fpath_files interactive_files completion_files
unsetopt nullglob extendedglob