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. use File::Spec;
  31. sub usage { print STDERR "usage: $0: DOTROOT [PREFIX]\n"; exit 1; }
  32. my $dotroot;
  33. my $prefix;
  34. my $opts = GetOptions(
  35. 'dotroot=s' => \$dotroot,
  36. 'prefix=s' => \$prefix
  37. ) or usage;
  38. $dotroot = $dotroot // shift;
  39. $prefix = $prefix // shift;
  40. $prefix = $prefix // $ENV{HOME};
  41. $dotroot or usage;
  42. sub mklinks {
  43. my $dotroot = 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 = File::Spec->rel2abs("$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);