zsh_dots 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/.gitmodules +3 -3
- data/Gemfile.lock +7 -7
- data/README.md +31 -23
- data/Rakefile +21 -4
- data/bin/elocal_nightly.sh +12 -6
- data/bin/loggly +166 -0
- data/bin/repl.sh +6 -0
- data/config/Gemfile +19 -0
- data/config/bundle/config +3 -0
- data/config/gemrc +0 -1
- data/config/gitconfig +9 -5
- data/config/gitignore +102 -0
- data/config/muttrc.example +79 -0
- data/config/osx.zsh +162 -0
- data/config/railsrc +1 -1
- data/config/rspec +1 -2
- data/config/vimrc +320 -0
- data/config/zshenv +26 -9
- data/config/zshrc +14 -0
- data/etc/rails/template/.env +2 -0
- data/etc/rails/template/.travis.yml +27 -0
- data/etc/rails/template.rb +28 -1401
- data/lib/dots/aliases.zsh +48 -23
- data/lib/dots/directories.zsh +0 -4
- data/lib/dots/functions.zsh +62 -17
- data/lib/dots/plugins.zsh +18 -11
- data/lib/plugins/git/git.plugin.zsh +11 -18
- data/lib/plugins/git-process/git-process.plugin.zsh +20 -0
- data/lib/plugins/osx/osx.plugin.zsh +3 -1
- data/lib/plugins/rails3/rails3.plugin.zsh +1 -1
- data/lib/plugins/ruby/ruby.plugin.zsh +8 -5
- data/lib/ruby/dots/bootstrap.rb +56 -0
- data/lib/ruby/dots/command.rb +28 -49
- data/lib/ruby/dots/installation.rb +53 -0
- data/lib/ruby/dots/installer.rb +2 -0
- data/lib/ruby/dots/persistence.rb +41 -0
- data/lib/ruby/dots/version.rb +1 -1
- data/lib/ruby/dots.rb +33 -3
- data/{config/aws → lib/tasks/.gitkeep} +0 -0
- data/spec/integration/command_spec.rb +3 -3
- metadata +42 -18
- data/.rvmrc +0 -47
- data/config/.dot_file +0 -1
- data/config/rvmrc +0 -1
- data/config/zlogin +0 -1
- data/lib/plugins/aws/aws.plugin.zsh +0 -20
- data/lib/tasks/db.rake +0 -55
- data/lib/tasks/dots.rake +0 -32
- data/vendor/antigen.zsh +0 -251
data/lib/dots/aliases.zsh
CHANGED
@@ -1,40 +1,65 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# General purpose, time-saving aliases for everyday use.
|
4
|
-
|
5
|
-
# Access the superuser for a single command.
|
1
|
+
# System administration
|
6
2
|
alias _='sudo'
|
7
|
-
|
8
|
-
# Show command history.
|
9
3
|
alias history='fc -l 1'
|
10
|
-
|
11
|
-
# Use grep with ack.
|
12
4
|
alias afind='ack-grep -il'
|
13
5
|
|
14
|
-
# Reload DOTS
|
15
|
-
alias reload="source $HOME/.zshenv; source $HOME/.zshrc"
|
6
|
+
# Reload the DOTS framework and clear the screen.
|
16
7
|
alias refresh="reload && clear"
|
17
|
-
|
18
|
-
# Reload TextMate bundles.
|
19
|
-
alias tmbundle="osascript -e 'tell app \"TextMate\" to reload bundles'"
|
20
|
-
|
21
|
-
# Find all ._* files in the directory and remove them.
|
22
|
-
alias rmbs="find . -type f -name '._*' -exec rm {} + && echo \"Removed all ._ files\""
|
23
|
-
|
24
|
-
# Make `ed` easier to use.
|
8
|
+
alias rmbs="rhombus"
|
25
9
|
alias ed='ed -p "ed> "'
|
26
10
|
|
27
11
|
# Dotfiles persistence
|
28
12
|
alias persist='dots persist'
|
13
|
+
alias pst='persist'
|
29
14
|
alias forget='dots forget'
|
15
|
+
alias fgt='forget'
|
30
16
|
|
31
17
|
# File viewing and editing
|
32
18
|
alias v=$PAGER
|
19
|
+
alias e='editor'
|
33
20
|
|
34
21
|
# Terminal support
|
35
22
|
alias c='clear'
|
36
|
-
|
37
|
-
alias o='
|
23
|
+
alias ti='set_title'
|
24
|
+
alias o='open_file_or_directory'
|
25
|
+
alias p='echo'
|
26
|
+
|
27
|
+
# iOS development
|
28
|
+
alias ripple='canary'
|
29
|
+
|
30
|
+
# Application deployment
|
31
|
+
alias dp='bundle exec rain on production'
|
32
|
+
alias ds='bundle exec rain on stage'
|
33
|
+
|
34
|
+
# Language REPLs
|
35
|
+
alias rb='ruby'
|
36
|
+
alias py='python'
|
37
|
+
alias js='node'
|
38
|
+
alias json='jsonlint'
|
39
|
+
|
40
|
+
# Running Ruby tests
|
41
|
+
alias t='run_single_test'
|
42
|
+
alias rts='rtest_rake'
|
43
|
+
|
44
|
+
# Kill the first Ruby process.
|
45
|
+
alias kill_first_ruby_process="kill -9 `ps -A | grep ruby | awk '{ print $1 }' | head -n 1`"
|
46
|
+
alias krp='kill_first_ruby_process'
|
47
|
+
|
48
|
+
alias fs='foreman start'
|
49
|
+
alias reload='dots update'
|
50
|
+
|
51
|
+
alias guard='nocorrect guard --no-bundler-warning'
|
52
|
+
alias rspec='nocorrect rspec'
|
53
|
+
alias rain='nocorrect rain'
|
54
|
+
|
55
|
+
# Kill it with fire
|
56
|
+
alias k9='kill -9'
|
57
|
+
|
58
|
+
# Sane defaults for the `patch` command, reverts a given diff.
|
59
|
+
alias revert='patch -R -p1'
|
60
|
+
|
61
|
+
# Set up Autoenv for this directory.
|
62
|
+
alias cfg='source .env'
|
38
63
|
|
39
|
-
#
|
40
|
-
alias
|
64
|
+
# Just in case..
|
65
|
+
alias dots='nocorrect dots'
|
data/lib/dots/directories.zsh
CHANGED
data/lib/dots/functions.zsh
CHANGED
@@ -1,8 +1,3 @@
|
|
1
|
-
# = Functions
|
2
|
-
#
|
3
|
-
# New commands that were a bit complicated for simple aliases, or otherwise didn't
|
4
|
-
# work in the alias world. All kinds of functionality here.
|
5
|
-
|
6
1
|
# Installs the "OSX For Hackers" shellscript, which plays with some of the OS X defaults to give you
|
7
2
|
# a faster and more enjoyable experience, albeit with a little less minimalism going on.
|
8
3
|
#
|
@@ -17,20 +12,42 @@ function proc() {
|
|
17
12
|
ps -A | grep $1
|
18
13
|
}
|
19
14
|
|
20
|
-
# Load the README.md file into mvim as well as the current
|
21
|
-
#
|
15
|
+
# Load the README.md file into mvim as well as the current
|
16
|
+
# directory, as defined by the functionality of the
|
17
|
+
# macvim_drawer plugin. Requires macvim_drawer to be installed,
|
22
18
|
# regular MacVim will break with this function.
|
23
|
-
function
|
24
|
-
if
|
25
|
-
if [[ -f "./README.md" ]]; then
|
26
|
-
|
27
|
-
elif [[ -f "./README.rdoc" ]]; then
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
19
|
+
function editor() {
|
20
|
+
if (($+DRAWER)); then
|
21
|
+
#if [[ -f "./README.md" ]]; then
|
22
|
+
#let readme = "README.md"
|
23
|
+
#elif [[ -f "./README.rdoc" ]]; then
|
24
|
+
#let readme = "README.rdoc"
|
25
|
+
#elif [[ -f "./README.textile" ]]; then
|
26
|
+
#let readme = "README.textile"
|
27
|
+
#elif [[ -f "./README" ]]; then
|
28
|
+
#let readme = "README"
|
29
|
+
#elif [[ -f "./README.txt" ]]; then
|
30
|
+
#let readme = "README.txt"
|
31
|
+
#else
|
32
|
+
#let readme = ""
|
33
|
+
#fi
|
34
|
+
fi
|
35
|
+
|
36
|
+
if (($+VISUAL)); then
|
37
|
+
$VISUAL $1
|
38
|
+
elif (($+EDITOR)); then
|
39
|
+
$EDITOR $1
|
32
40
|
else
|
33
|
-
|
41
|
+
echo "Please set your \$EDITOR or \$VISUAL before using this command."
|
42
|
+
fi
|
43
|
+
}
|
44
|
+
|
45
|
+
# Open the given file, or a directory if no input is given.
|
46
|
+
function open_file_or_directory() {
|
47
|
+
if [[ $1 != "" ]]; then
|
48
|
+
open $1
|
49
|
+
else
|
50
|
+
open .
|
34
51
|
fi
|
35
52
|
}
|
36
53
|
|
@@ -43,3 +60,31 @@ function set_title() {
|
|
43
60
|
function exit_code() {
|
44
61
|
cat /usr/include/sysexits.h | grep "$1"
|
45
62
|
}
|
63
|
+
|
64
|
+
# Run a line of AppleScript to reload the bundles in TextMate.
|
65
|
+
function tmbundle() {
|
66
|
+
osascript -e 'tell app \"TextMate\" to reload bundles'
|
67
|
+
}
|
68
|
+
|
69
|
+
function update_dots() {
|
70
|
+
dots update > /dev/null
|
71
|
+
}
|
72
|
+
|
73
|
+
# Reload DOTS after a change.
|
74
|
+
function reload_dots() {
|
75
|
+
source $HOME/.zshenv
|
76
|
+
source $HOME/.zshrc
|
77
|
+
echo 'DOTS reloaded!'
|
78
|
+
}
|
79
|
+
|
80
|
+
# Open Google Chrome Canary and disable web
|
81
|
+
# security. For iOS developers using Ripple.
|
82
|
+
function canary() {
|
83
|
+
open /Applications/Google\ Chrome\ Canary.app --args -disable-web-security
|
84
|
+
}
|
85
|
+
|
86
|
+
# Remove TextMate junk from the directory.
|
87
|
+
function rhombus() {
|
88
|
+
find . -type f -name '._*' -exec rm {} +
|
89
|
+
echo "Removed all ._ files"
|
90
|
+
}
|
data/lib/dots/plugins.zsh
CHANGED
@@ -1,18 +1,25 @@
|
|
1
1
|
# Load the plugin architecture
|
2
|
-
source "$ZSH/vendor/antigen.zsh"
|
2
|
+
source "$ZSH/vendor/antigen/antigen.zsh"
|
3
3
|
|
4
4
|
# Set up the plugin architecture
|
5
5
|
antigen-lib
|
6
6
|
|
7
|
-
#
|
8
|
-
antigen-bundle tubbo/dots lib/plugins/aws
|
9
|
-
antigen-bundle tubbo/dots lib/plugins/bundler
|
7
|
+
# Bare Oh My ZSH plugins
|
10
8
|
antigen-bundle cap
|
11
|
-
|
12
|
-
|
13
|
-
antigen-bundle
|
14
|
-
antigen-bundle
|
15
|
-
antigen-bundle
|
16
|
-
antigen-bundle
|
17
|
-
antigen-bundle
|
9
|
+
|
10
|
+
# Local modifications to OMZ plugins
|
11
|
+
antigen-bundle $HOME/.dots lib/plugins/bundler
|
12
|
+
antigen-bundle $HOME/.dots lib/plugins/git
|
13
|
+
antigen-bundle $HOME/.dots lib/plugins/git-process
|
14
|
+
antigen-bundle $HOME/.dots lib/plugins/knife
|
15
|
+
antigen-bundle $HOME/.dots lib/plugins/osx
|
16
|
+
antigen-bundle $HOME/.dots lib/plugins/rails3
|
17
|
+
antigen-bundle $HOME/.dots lib/plugins/ruby
|
18
|
+
antigen-bundle kennethreitz/autoenv
|
19
|
+
|
20
|
+
# From alternative sources
|
18
21
|
antigen-bundle zsh-users/zsh-syntax-highlighting
|
22
|
+
#antigen-bundle kennethreitz/autoenv
|
23
|
+
|
24
|
+
# Apply loaded plugins to the environment
|
25
|
+
antigen-apply
|
@@ -38,13 +38,13 @@ alias glg='git log --graph --max-count=5'
|
|
38
38
|
compdef _git glg=git-log
|
39
39
|
alias lol='git lol'
|
40
40
|
compdef _git lol=git-log
|
41
|
-
alias
|
41
|
+
alias gsts='git status -s'
|
42
42
|
compdef _git gss=git-status
|
43
43
|
alias ga='git add'
|
44
44
|
compdef _git ga=git-add
|
45
45
|
alias gm='git merge'
|
46
46
|
compdef _git gm=git-merge
|
47
|
-
alias gls="git
|
47
|
+
alias gls="git l"
|
48
48
|
compdef _git gls=git-log
|
49
49
|
alias grv='git remote -v'
|
50
50
|
compdef _get grv=git-remote
|
@@ -62,18 +62,16 @@ alias gts='git reset --soft'
|
|
62
62
|
compdef _get gt=git-reset
|
63
63
|
alias gthh='git reset --hard HEAD'
|
64
64
|
compdef _get gt=git-reset
|
65
|
-
alias gs='git pull --rebase && git push'
|
66
|
-
compdef _get gs=git-pull
|
67
|
-
compdef _get gs=git-push
|
68
|
-
alias gsf='git pull --rebase && git push tubbo'
|
69
|
-
compdef _get gs=git-pull
|
70
|
-
compdef _get gs=git-push
|
71
|
-
alias gy='git synchronize'
|
72
|
-
compdef _get gy=git-synchronize
|
73
65
|
alias garc='ga . && grc'
|
74
66
|
compdef _get garc=git-add
|
75
67
|
compdef _get garc=git-rebase
|
76
68
|
|
69
|
+
# Stash
|
70
|
+
alias gs='git stash save'
|
71
|
+
compdef _get gsh=git-stash
|
72
|
+
alias gsp='git stash pop'
|
73
|
+
compdef _get gsh=git-stash
|
74
|
+
|
77
75
|
# Merging and Rebasing
|
78
76
|
alias gr='git rebase'
|
79
77
|
compdef _get gg=git-rebase
|
@@ -97,19 +95,17 @@ compdef _get grv=git-status
|
|
97
95
|
# Git and svn mix
|
98
96
|
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
|
99
97
|
compdef git-svn-dcommit-push=git
|
98
|
+
alias gvr='git svn rebase'
|
99
|
+
alias gvd='git svn dcommit'
|
100
100
|
|
101
|
-
alias gsr='git svn rebase'
|
102
|
-
alias gsd='git svn dcommit'
|
103
|
-
#
|
104
101
|
# Will return the current branch name
|
105
102
|
# Usage example: git pull origin $(current_branch)
|
106
|
-
#
|
107
103
|
function current_branch() {
|
108
104
|
ref=$(git symbolic-ref HEAD 2> /dev/null) || return
|
109
105
|
echo ${ref#refs/heads/}
|
110
106
|
}
|
111
107
|
|
112
|
-
#
|
108
|
+
# These aliases take advantage of the previous function
|
113
109
|
alias ggpull='git pull origin $(current_branch)'
|
114
110
|
compdef ggpull=git
|
115
111
|
alias ggpush='git push origin $(current_branch)'
|
@@ -121,6 +117,3 @@ compdef ggpnp=git
|
|
121
117
|
if (( $+commands[hub] )) ; then
|
122
118
|
function git() {hub "$@"}
|
123
119
|
fi
|
124
|
-
|
125
|
-
# SHIP IT
|
126
|
-
alias ship='echo ">>> SHIP IT <<<"; git checkout master; git pull --rebase origin master; git merge develop; git push origin master'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!zsh
|
2
|
+
#
|
3
|
+
# git-process plugin
|
4
|
+
# -------------------
|
5
|
+
#
|
6
|
+
# Shortcuts and other useful sugar that goes well with git-process.
|
7
|
+
|
8
|
+
|
9
|
+
# Create a new feature branch based on the integration branch.
|
10
|
+
alias gf='git new-fb'
|
11
|
+
|
12
|
+
# Gets the latest changes that have happened on the integration branch, then pushes your changes to a "private" branch on the server.
|
13
|
+
alias gy='git sync --rebase'
|
14
|
+
alias gym='git sync' # because merging should be harder to do than rebasing
|
15
|
+
|
16
|
+
# Creates a Pull Request for the current branch.
|
17
|
+
alias gq='git pull-request'
|
18
|
+
|
19
|
+
# Rebase against the integration branch, then push to it.
|
20
|
+
alias gu='git to-master'
|
@@ -61,7 +61,7 @@ alias rsp='bundle exec foreman start' # Rails Server and Processes
|
|
61
61
|
# Rake tasks
|
62
62
|
alias rdm='rake db:migrate'
|
63
63
|
alias rdr='rake db:rollback'
|
64
|
-
alias rdbm='rake db:migrate db:test:
|
64
|
+
alias rdbm='rake db:migrate db:test:prepare'
|
65
65
|
alias rt='rake test'
|
66
66
|
alias rtu='rake test:units'
|
67
67
|
alias rtf='rake test:functionals'
|
@@ -49,10 +49,13 @@ eval "function rtest_bare () {_rbtest_without_rake \$@}"
|
|
49
49
|
alias rtest='nocorrect rtest_bare'
|
50
50
|
alias rtest_rake='nocorrect rtest_rake'
|
51
51
|
|
52
|
-
#
|
53
|
-
|
54
|
-
|
52
|
+
# Framework-agnostic testing command.
|
53
|
+
run_single_test() {
|
54
|
+
if [ -f "spec/spec_helper.rb" ]; then
|
55
|
+
bundle exec rspec $@;
|
56
|
+
else
|
57
|
+
rtest $@;
|
58
|
+
fi
|
59
|
+
}
|
55
60
|
|
56
|
-
# Run a ruby script
|
57
|
-
alias rb='ruby'
|
58
61
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Dots
|
2
|
+
module Bootstrap
|
3
|
+
include Thor::Actions
|
4
|
+
|
5
|
+
# These are the programs we are going to download from Homebrew.
|
6
|
+
PROGRAMS = %w(httpie git ruby)
|
7
|
+
|
8
|
+
# Install C binaries, Python programs, and other useful tools
|
9
|
+
# from Homebrew.
|
10
|
+
def install_programs
|
11
|
+
if installed? "brew"
|
12
|
+
programs_to_install = PROGRAMS.reduce([]) { |programs, program|
|
13
|
+
programs << program unless installed? program
|
14
|
+
}.join " "
|
15
|
+
|
16
|
+
system "brew install #{programs_to_install}" \
|
17
|
+
unless programs_to_install.empty?
|
18
|
+
else
|
19
|
+
install_homebrew
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Install the latest version of all gems to the global gemset. These
|
24
|
+
# gems are configured in +~/.Gemfile+.
|
25
|
+
def install_bundle
|
26
|
+
system "cd #{Dots::HOME} && #{bundle_install}"
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def installed? command
|
31
|
+
`which #{command}` != ""
|
32
|
+
end
|
33
|
+
|
34
|
+
def bundle_install
|
35
|
+
return install_global_gemset if installed? 'bundle'
|
36
|
+
"#{install_bundler} #{install_global_gemset}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def install_global_gemset
|
40
|
+
"bundle install --gemfile=#{global_gemset}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def install_bundler
|
44
|
+
"gem install bundler"
|
45
|
+
end
|
46
|
+
|
47
|
+
# Install the latest version of the Homebrew package manager.
|
48
|
+
def install_homebrew
|
49
|
+
%x[ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"]
|
50
|
+
end
|
51
|
+
|
52
|
+
def global_gemset
|
53
|
+
"#{Dots.root}/config/Gemfile"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/ruby/dots/command.rb
CHANGED
@@ -1,45 +1,26 @@
|
|
1
|
+
require 'dots/persistence'
|
2
|
+
require 'dots/installation'
|
3
|
+
require 'dots/bootstrap'
|
4
|
+
|
1
5
|
module Dots
|
2
6
|
class Command < Thor
|
3
|
-
include
|
4
|
-
|
7
|
+
include Thor::Actions, Dots::Persistence, Dots::Installation, Dots::Bootstrap
|
5
8
|
default_task :usage
|
6
9
|
|
7
10
|
desc :usage, "Show usage information"
|
8
11
|
def usage
|
9
|
-
say
|
10
|
-
|
11
|
-
The DOTS Project
|
12
|
-
|
13
|
-
DOTS is a ZSH Framework for managing your dotfiles and other shell configuration.
|
14
|
-
It also gives you some nice, sensible defaults and time-saver aliases to better
|
15
|
-
work with and understand your shell environment.
|
16
|
-
|
17
|
-
The following tasks are meant to help you use the shell more efficiently...
|
18
|
-
|
19
|
-
TEXT
|
20
|
-
|
21
|
-
help
|
12
|
+
say Dots::USAGE_INFORMATION and help
|
22
13
|
end
|
23
14
|
|
24
|
-
desc :
|
25
|
-
|
26
|
-
%x(cd ~/.dots && git pull origin master)
|
27
|
-
end
|
28
|
-
|
29
|
-
desc :install, "Installs DOTS to ~/.dots and links all of your dotfiles"
|
15
|
+
desc :install, "Copies DOTS to your home directory."
|
16
|
+
alias install install_framework
|
30
17
|
def install
|
31
|
-
|
32
|
-
|
33
|
-
Dir[File.expand_path("~/.dots/config")].each do |config_file|
|
34
|
-
file_name = File.basename config_file
|
35
|
-
dot_file = File.expand_path "~/.#{file_name}"
|
18
|
+
copy_to_home_directory and link_dot_files
|
19
|
+
end
|
36
20
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
%x(ln -s #{config_file} #{dot_file})
|
41
|
-
end
|
42
|
-
end
|
21
|
+
desc :update, "Update DOTS, Antigen and all plugins to their latest version."
|
22
|
+
def update
|
23
|
+
update_the_framework
|
43
24
|
end
|
44
25
|
|
45
26
|
desc :version, "Show the current version of DOTS"
|
@@ -47,28 +28,26 @@ The following tasks are meant to help you use the shell more efficiently...
|
|
47
28
|
say "DOTS version #{Dots::VERSION} - http://tubbo.github.com/dots"
|
48
29
|
end
|
49
30
|
|
50
|
-
desc :
|
51
|
-
def
|
52
|
-
|
31
|
+
desc :link, "Symlink your ~/.dots/config into dotfiles"
|
32
|
+
def link
|
33
|
+
link_dot_files
|
34
|
+
end
|
53
35
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
dot_file.errors.full_messages.each { |msg| say "- #{msg}" }
|
59
|
-
end
|
36
|
+
desc :persist, "Copy a dotfile to .dots/config and symlink the original location"
|
37
|
+
alias persist persist_file
|
38
|
+
def persist_file name
|
39
|
+
persist_dot_file name
|
60
40
|
end
|
61
41
|
|
62
42
|
desc :forget, "Remove the symlink and restore a dotfile back to its original location"
|
63
|
-
|
64
|
-
|
43
|
+
alias forget forget_file
|
44
|
+
def forget_file name
|
45
|
+
forget_dot_file name
|
46
|
+
end
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
say "Error: #{dot_file} could not be forgotten:"
|
70
|
-
dot_file.errors.full_messages.each { |msg| say "- #{msg}" }
|
71
|
-
end
|
48
|
+
desc :bootstrap, "Install the whole shebang: gems, C programs, Python stuff, DOTS."
|
49
|
+
def bootstrap
|
50
|
+
install_programs and install_bundle and install_framework
|
72
51
|
end
|
73
52
|
end
|
74
53
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# = Dots::Installation
|
2
|
+
#
|
3
|
+
# These are various tasks that DOTS uses to install itself onto each
|
4
|
+
# machine. While most RubyGems are served from its directory in
|
5
|
+
# GEM_HOME, DOTS is primarily run from the user's home directory,
|
6
|
+
# since a user typically makes all kinds of shell configuration
|
7
|
+
# enhancements after installing.
|
8
|
+
module Dots
|
9
|
+
module Installation
|
10
|
+
include Thor::Actions
|
11
|
+
|
12
|
+
# The Git remote we'll be pulling from. Set this in your +~/.zshenv+
|
13
|
+
# to use a different fork of the project.
|
14
|
+
REMOTE = ENV['DOTS_REMOTE']
|
15
|
+
|
16
|
+
# Attempts to update DOTS, but fails if changes are detected
|
17
|
+
# in the repo beforehand.
|
18
|
+
#
|
19
|
+
# The +git ls-files -m+ command will return no results when there
|
20
|
+
# are no modified files in the repo. This method blocks DOTS from
|
21
|
+
# installing itself overtop of your committed changes, as well as
|
22
|
+
# saves the user from an ugly Git error...
|
23
|
+
def update_the_framework
|
24
|
+
if repo_is_clean?
|
25
|
+
pull_from_origin and run 'reload_dots'
|
26
|
+
else
|
27
|
+
say "You have uncommitted changes in ~/.dots. Please resolve them before updating."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def copy_to_home_directory
|
32
|
+
system "mkdir -p #{Dots.home} cp -R #{Dots.root} #{Dots.home}"
|
33
|
+
end
|
34
|
+
|
35
|
+
# Fetches and rebases the same code stored in +Dots.root+ to
|
36
|
+
# +~/.dots+. This essentially replays your own local changes on
|
37
|
+
# top of the official updates to the framework. If you're using
|
38
|
+
# a fork, you can set +DOTS_REMOTE+ to the remote's name in
|
39
|
+
# origin (this will default to your Github username, by the way).
|
40
|
+
def pull_latest_changes
|
41
|
+
system "cd #{Dots.home} && #{git_pull}"
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def repo_is_clean?
|
46
|
+
`cd #{Dots.home} && git ls-files -m`.split("\n").empty?
|
47
|
+
end
|
48
|
+
|
49
|
+
def git_pull
|
50
|
+
"git pull --rebase #{REMOTE} #{Dots::VERSION}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Dots
|
2
|
+
module Persistence
|
3
|
+
include Thor::Actions
|
4
|
+
|
5
|
+
# Run through every file in +~/.dots/config+ and symlink them to
|
6
|
+
# +~/.+.
|
7
|
+
def link_dot_files
|
8
|
+
Dir[File.expand_path("~/.dots/config/*")].each do |config_file|
|
9
|
+
persist_dot_file config_file
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Moves the given +~/.file+ to the repo, while saving its original
|
14
|
+
# location. It then symlinks the new location to the old location
|
15
|
+
# so applications will continue to run.
|
16
|
+
def persist_dot_file file_name
|
17
|
+
dot_file = Dots::DotFile.new file_name
|
18
|
+
|
19
|
+
if dot_file.save
|
20
|
+
say "#{dot_file} saved to DOTS!"
|
21
|
+
else
|
22
|
+
say "Error: #{dot_file} could not be symlinked:"
|
23
|
+
dot_file.errors.full_messages.each { |msg| say "- #{msg}" }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Restores the given configuration file that's in the repo back
|
28
|
+
# to an unremembered state. Deletes the symlink and places the
|
29
|
+
# file back to its perceived original location in +~/.file+.
|
30
|
+
def forget_dot_file file_name
|
31
|
+
dot_file = Dots::DotFile.find file_name
|
32
|
+
|
33
|
+
if dot_file.destroy
|
34
|
+
say "#{dot_file} is no longer being persisted."
|
35
|
+
else
|
36
|
+
say "Error: #{dot_file} could not be forgotten:"
|
37
|
+
dot_file.errors.full_messages.each { |msg| say "- #{msg}" }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/ruby/dots/version.rb
CHANGED
data/lib/ruby/dots.rb
CHANGED
@@ -1,9 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
1
3
|
require 'thor'
|
2
4
|
require 'active_model'
|
3
|
-
require 'fileutils'
|
4
|
-
|
5
5
|
require 'dots/dot_file'
|
6
6
|
require 'dots/command'
|
7
7
|
require 'dots/version'
|
8
|
+
require 'dots/persistence'
|
9
|
+
require 'dots/installation'
|
10
|
+
|
11
|
+
module Dots
|
12
|
+
# The root path of the DOTS gem.
|
13
|
+
def self.root
|
14
|
+
@root_dir ||= begin
|
15
|
+
spec = Gem::Specification.find_by_name 'zsh_dots'
|
16
|
+
spec.gem_dir
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# The home directory of DOTS.
|
21
|
+
def self.home
|
22
|
+
@home_dir ||= File.expand_path "~/.dots"
|
23
|
+
end
|
24
|
+
|
25
|
+
# Usage information for the DOTS command line tool.
|
26
|
+
USAGE_INFORMATION = <<-TEXT
|
27
|
+
|
28
|
+
The DOTS Project
|
29
|
+
|
30
|
+
DOTS is a ZSH Framework for managing your dotfiles and other shell configuration.
|
31
|
+
It also gives you some nice, sensible defaults and time-saver aliases to better
|
32
|
+
work with and understand your shell environment.
|
33
|
+
|
34
|
+
The following tasks are meant to help you use the shell more efficiently...
|
35
|
+
|
36
|
+
TEXT
|
37
|
+
|
38
|
+
end
|
8
39
|
|
9
|
-
module Dots; end
|
File without changes
|