blob: aaf906c3c9f41526eaabc321046d3fa117a8b63c (
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
|
# THIS IS CURRENTLY EXPERIMENTAL. REVIEW AND TEST FIRST. NEVER RUN ON MAIN
# MACHINE WITHOUT A BACKUP OF VIMFILES AND DOTFILES
# Links configuration files to the ones listed here. Backup and remove your's
# and then run this script while inside repo directory.
#
# In Windows it has to be run with git-bash.
#
# Note: This solution is lazy and causes some problems. Like not being able to
# track vim pluggins.
#
# As always, ArchLinux's Wiki has a great article explaining dotfiles and how
# people usually manage them.
# https://wiki.archlinux.org/title/Dotfiles
# FIXME: This is broken since I moved the directories. Change all $PWD with
# $PWD/config and it should work. But make this simpler. The "copy"
# mode is useless. Each user should have a copy of this and then use the
# "slink" mode. That way you can keep track of changes made, and then
# even add a branch (e.g., pulse15, x220) to the repo.
exit
# Config
# ======
mode=$1 # copy,slink
# Prepare
# =======
# HOME variable must be available
if [[ -z $XDG_CONFIG_HOME ]]; then
XDG_CONFIG_HOME="$HOME/.config"
mkdir -p $XDG_CONFIG_HOME
fi
if [[ $mode = "--help" ]]; then
echo "You might want to first run: $0 echo"
echo "Revise the output"
echo "And only then run: $0 slink"
exit
elif [[ $mode = "copy" ]]; then
cp_or_ln="cp"
echo Why? Custom modifications will be difficult to track.
echo Maybe not a good idea. Good bye.
exit
elif [[ $mode = "slink" ]]; then
cp_or_ln="ln -siv" # if you are fearless add the `-f` option
elif [[ $mode = "echo" ]]; then
cp_or_ln="echo ln -siv"
else
echo "Usage: $0 copy|slink|echo"
exit
fi
prompt() {
read -p "Install $1 configuration files? [Y/n/e(exit)] " yesno
yesno=$(echo $yesno | tr '[:upper:]' '[:lower:]')
case $yesno in
y | yes | "" )
return 0;;
e | exit )
exit;;
* )
return 1;;
esac
}
# Install
# =======
# FIXME: If $PWD has spaces in it, this might fail.
# Filewise
# --------
if prompt "bash"; then
eval $cp_or_ln " ${PWD}/bash/bash_profile $HOME/.bash_profile"
eval $cp_or_ln " ${PWD}/bash/bashrc $HOME/.bashrc"
eval $cp_or_ln " ${PWD}/bash/bash_aliases $HOME/.bash_aliases"
eval $cp_or_ln " ${PWD}/bash/inputrc $HOME/.inputrc"
fi
if prompt "vim"; then
# `~/.vimrc` takes priority over `~/.vim/vimrc`. Remove the former if it
# exists.
#
# In windows it's `%userprofile%/vimfiles/`
VIMFILES="$HOME/.vim"
mkdir -p $VIMFILES/{undo,swap,backup,plugins}
chmod 0700 $VIMFILES/swap
eval $cp_or_ln " ${PWD}/vim/vimrc $VIMFILES/vimrc"
eval $cp_or_ln " ${PWD}/vim/fun.vim $VIMFILES/fun.vim"
fi
if prompt "Xorg"; then
eval $cp_or_ln " ${PWD}/xorg/xinitrc $HOME/.xinitrc"
eval $cp_or_ln " ${PWD}/xorg/xbindkeysrc $HOME/.xbindkeysrc"
fi
# Directorywise
# -------------
if prompt "nvim"; then
eval $cp_or_ln " ${PWD}/nvim $XDG_CONFIG_HOME"
fi
if prompt "tmux"; then
eval $cp_or_ln " ${PWD}/tmux $XDG_CONFIG_HOME"
fi
if prompt "git"; then
eval $cp_or_ln " ${PWD}/git $XDG_CONFIG_HOME"
eval $cp_or_ln " ${PWD}/git/git-prompt.sh $HOME/.git-prompt.sh"
fi
if prompt "zathura"; then
eval $cp_or_ln " ${PWD}/zathura $XDG_CONFIG_HOME"
fi
if prompt "mpv"; then
eval $cp_or_ln " ${PWD}/mpv $XDG_CONFIG_HOME"
fi
echo "all done :)"
|