-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathconf_linker.pl
55 lines (51 loc) · 1.84 KB
/
conf_linker.pl
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
#!/usr/bin/perl
use strict;
use FindBin '$Bin';
die "Nothing to do.\n" unless @ARGV;
my $config_dir = $Bin;
my $files = {'cli' => {'gitconfig' => '.gitconfig',
'gitexcludes' => '.gitexcludes',
'screenrc' => '.screenrc',
'tmux.conf' => '.tmux.conf',
'zsh/zshrc' => '.zshrc',
'zsh/zshenv' => '.zshenv',
'zsh/zsh' => '.zsh',
'zsh/oh-my-zsh' => '.oh-my-zsh',
'vim/vimrc' => '.vimrc',
'vim/vim' => '.vim',
'terminfo' => '.terminfo',
},
'gui' => {'xbindkeysrc' => '.xbindkeysrc',
'xmodmaprc' => '.xmodmaprc',
'Xresources' => '.Xresources',
'xmonad/xmonad.hs' => '.xmonad/xmonad.hs',
'stalonetrayrc' => '.stalonetrayrc',
},
'bin' => {'bin' => 'bin',
},
};
@ARGV = keys %{$files} if $ARGV[0] eq 'all';
foreach my $c (@ARGV) {
while (my ($s, $d) = each %{$files->{$c}}) {
my $source = "$config_dir/$s";
my @di = split(/\//, $d);
if (scalar(@di) > 1) {
splice(@di, -1, 1);
my $p = "$ENV{'HOME'}/" . join(/\//, @di);
unless (-d $p) {
print "Creating directory $p...\n";
system "mkdir -p $p";
}
}
my $dest = "$ENV{'HOME'}/$d";
if (-l $dest) {
print "Skipping $d. Already linked.\n";
} elsif (-e "$dest.moved" && -e $dest) {
print "Skipping $d. Can't make a backup.\n";
} else {
system "mv $dest $dest.moved" if -e "$dest";
print "Linking $s...\n";
system "ln -s $source $dest";
}
}
}