blob: ce9d8f73a36dd873b08d9667a205748d4e46a143 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
#!/bin/bash
cd `dirname $0`
git submodule update --init || (echo "Submodule update failed! Use --ignore-sub if it's ok."; exit 5)
dodiff() {
if [ -d "$2" ]; then
# If we just copying some file to directory
OUT=$2/$(basename "$1")
else
OUT=$2
fi
if ! [ -f "$OUT" ]; then
echo "Not installed: $1 => $OUT"
read -p "Install? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
doinst "$1" "$OUT"
fi
return
fi
if cmp "$1" "$OUT" >/dev/null; then
echo "No difference detected: $OUT"
return
fi
vimdiff "$1" "$OUT"
}
diff() {
# Iterate trough source directory but ignore any git repositories
# Note that it's design decision to not iterate trough target directory.
if [ -d "$1" ]; then
# This is check if we have correct inst command basically. If it is
# directory than it have to have trailing slash to ensure that no
# additional directory is created.
if ! echo "$1" | grep -qE '/$'; then
echo ERROR: Directory without trailing slash detected: $1
exit 1
fi
# Got trough all files ignoring git repositories
for f in `find "$1" \( -type d -exec test -e '{}'/.git \; \) -prune -o -type f -print`; do
F="${f#$1}"
dodiff "$1/$F" "$2/$F"
done
# Check if we have all directories ignoring those in git repositories
for d in `find "$1" -type d -print -exec test -e '{}'/.git \; -prune`; do
D="${d#$1}"
if [ ! -d "$2/$D" ]; then
echo "Directory not installed: $1/$D => $2/$D"
read -p "Install? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
doinst "$1/$D/" "$2/$D"
fi
fi
done
# Now checkout git repositories
for g in `find "$1" -name .git -type f -printf '%h '`; do
G="${g#$1}"
COMMIT=$( cd "$1/$G" && git rev-parse HEAD )
echo "Checkout of git repository: $2/$G"
( cd "$2/$G" && git --work-tree=. checkout -f "$COMMIT" )
done
else
dodiff "$1" "$2"
fi
}
# Managing two git trees with master has small inconvenience that git allows only
# single branch checkout in all work trees, so as it sets now git will execute all
# commands not on deployed tree but on tree in this repository, so we need specify
# work tree on command line every time we want target deployed work tree.
doinst() {
echo rsync -rlpt $1 $2
rsync -rlpt $1 $2
# Now edit all .git files in target directory
for g in `find "$2" -name '.git' -type f`; do
if ! grep -q "gitdir: " "$g"; then
continue # Probably not a git repository or who knows.
fi
echo "Pointing git repository $g to this repository"
echo gitdir: $PWD/.git`sed "s/^gitdir: [./]*git//" "$g"` > "$g"
done
}
inst() {
if [ -e "$2" ]; then
# If output exists, execute diff instead
diff $1 $2
return
fi
doinst $1 $2
}
# TODO if on archlinux install pkgstats and other packages we would need for every feature
#################################################################################
source private/install # private files, sorry but some privacy is required.
read -p "Install Bashrc? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst bashrc ~/.bashrc
inst shellrc ~/.shellrc
fi
read -p "Install zshrc? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst zshrc ~/.zshrc
inst shellrc ~/.shellrc
fi
read -p "Install GIT configuration? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst gitconfig ~/.gitconfig
inst local/git-prompt.sh ~/.local/
fi
read -p "Install VIM scripts? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst vimrc ~/.vimrc
inst vim/ ~/.vim
inst local/bin/vim-project-gen ~/.local/bin/vim-project-gen
mkdir -p ~/.cache/vim # directory for *.swp files
mkdir -p ~/.cache/vim-undo # directory for undo files
echo "Please don't forget to setup YouCompleteMe"
fi
read -p "Install email synchronization? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst external/annoyme/src/annoyme ~/.local/bin/
inst external/annoyme/src/annoyme-request ~/.local/sbin/
inst config/systemd/user/syncemail.service ~/.config/systemd/user
inst_email_sync
# Contains:
# inst local/sbin/syncemail ~/.local/sbin/
# inst config/offlineimap/ ~/.config/offlineimap
fi
read -p "Install mutt configuration? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst urlview ~/.urlview
inst mutt/mailcap ~/.mutt/
inst mutt/gpg.rc ~/.mutt/
inst mutt/color ~/.mutt/
inst_mutt_conf
# Contains:
# inst mutt/ ~/.mutt
# inst msmtprc ~/.msmtprc
fi
read -p "Install i3 configuration and related tools? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst xinitrc ~/.xinitrc
inst Xresources ~/.Xresources
inst config/i3/ ~/.config/i3
inst config/i3blocks/ ~/.config/i3blocks
inst config/i3status/ ~/.config/i3status
inst config/dunst/ ~/.config/dunst
inst local/bin/mxrandr ~/.local/bin/
inst local/bin/startme ~/.local/bin/
fi
read -p "Install Conkeror configuration? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst conkerorrc ~/.conkerorrc
inst conkeror/ ~/.conkeror
fi
read -p "Install MPD configuration? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst config/mpd/ ~/.config/mpd
fi
read -p "Install backup script? (Y/n) "
if [[ $REPLY =~ ^[Yy]?$ ]]; then
inst local/bin/system-backup ~/.local/bin/system-backup
fi
|