My dotfiles. Period.

mklinks 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/perl
  2. # ============================================
  3. # mklinks
  4. # --------------------------------------------
  5. #
  6. # usage: mklinks DOTROOT [PREFIX]
  7. #
  8. #
  9. # This script will go through each file or
  10. # sub-folder of DOTROOT and create symbolic
  11. # link to it under your HOME named with "."
  12. # prefix.
  13. #
  14. # This is useful for sharing your dotfiles
  15. # (e.g. using service like Dropbox or keeping
  16. # them in a shared VCS repository like git)
  17. #
  18. # DOTROOT - path where your shared dot-files
  19. # are.
  20. # PREFIX - where you want your links to
  21. # dot-files to be created ($HOME
  22. # by default)
  23. #
  24. # --------------------------------------------
  25. # By Alois Mahdal; no warranty
  26. # ============================================
  27. use strict;
  28. use warnings;
  29. use Getopt::Long;
  30. sub usage { print STDERR "usage: $0: DOTROOT [PREFIX]\n"; exit 1; }
  31. my $dotroot;
  32. my $prefix;
  33. my $opts = GetOptions(
  34. 'dotroot=s' => \$dotroot,
  35. 'prefix=s' => \$prefix
  36. ) or usage;
  37. $dotroot = $dotroot // shift;
  38. $prefix = $prefix // shift;
  39. $prefix = $prefix // $ENV{HOME};
  40. $dotroot or usage;
  41. sub mklinks {
  42. my $dotroot = shift;
  43. my $prefix = shift;
  44. -d $dotroot or die "not a directory: $dotroot";
  45. my @dirs = `ls $dotroot`;
  46. foreach my $dir (@dirs) {
  47. chomp $dir;
  48. my $source = "$dotroot/$dir";
  49. my $target = "$prefix/.$dir";
  50. `mkdir -p $prefix`;
  51. if (-e $target) {
  52. warn "target exists: $target\n";
  53. } else {
  54. `ln -s $source $target`;
  55. }
  56. }
  57. }
  58. mklinks($dotroot, $prefix);