diff options
-rw-r--r-- | lib/Emacs.pm | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/Emacs.pm b/lib/Emacs.pm new file mode 100644 index 0000000..e15a664 --- /dev/null +++ b/lib/Emacs.pm @@ -0,0 +1,85 @@ +#!/usr/bin/perl + +package Emacs; + +use strict; +use warnings; +use feature 'say'; +use Fcntl ':mode'; + +use IPC::Run3; +use Path::Tiny; +use Term::ANSIColor qw/ :pushpop colored color /; + +sub sync { + my ( $options ) = @_; + my $verbose = $options->{verbose}; + my $authinfo_remote = "$ENV{HOME}/.authinfo-remote"; + my %path_perms = ( + $authinfo_remote => 0700, + "$authinfo_remote/team" => 0600, + "$authinfo_remote/inst" => 0600, + "$authinfo_remote/town" => 0600, + ); + + # Check path permissions. + say LOCALCOLOR CYAN "Checking path permissions..."; + foreach my $path ( sort keys %path_perms ) { + my $mode = S_IMODE(path($path)->stat->mode); + + if ( $mode == $path_perms{$path} ) { + say LOCALCOLOR GREEN "[OK] $path" + if $verbose; + } else { + warn "[ERR] $path + Expected: $path_perms{$path} :: Got: $mode + Changing permission...\n"; + + path("$path")->chmod($path_perms{$path}); + } + } + say LOCALCOLOR CYAN "[DONE] Permissions checked"; + + sub rsync { + run3 ["openrsync", @_]; + } + my @def_opt = qw{ --delete -oprt }; + push @def_opt, "-v" if $verbose; + + { + say LOCALCOLOR CYAN "Syncing authinfo..."; + my %authinfo_hosts = ( + "tilde.team" => "$authinfo_remote/team", + "tilde.institute" => "$authinfo_remote/inst", + "tilde.town" => "$authinfo_remote/town", + ); + foreach my $host ( sort keys %authinfo_hosts ) { + say LOCALCOLOR MAGENTA "$host"; + rsync( @def_opt, $authinfo_hosts{$host}, "andinus\@$host:~/.authinfo" ); + } + say LOCALCOLOR CYAN "[DONE] authinfo sync"; + } + + { + say LOCALCOLOR CYAN "Syncing emacs config..."; + my @hosts = qw{ tilde.team tilde.institute envs.net tilde.town }; + + my $e_conf = "$ENV{HOME}/.emacs.d"; + my @paths = ( + "$e_conf/init.el", + "$e_conf/e-init.el", + "$e_conf/e-init.org", + "$e_conf/elpa/", + ); + foreach my $host (@hosts) { + say LOCALCOLOR MAGENTA "$host"; + foreach my $path (@paths) { + say " $path"; + rsync( @def_opt, $path, "andinus\@$host:$path"); + } + } + say LOCALCOLOR CYAN "[Done] Emacs config sync"; + } +} + +1; |