aboutsummaryrefslogtreecommitdiff
path: root/.local/lib/perl5/App/Localmail.pm
blob: db39fae9e87d950158e1784c1618730d957939fb (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
#!/usr/bin/env false

use v5.20;
use feature qw/say signatures/;
use strict;
use utf8;
use warnings;

use YAML::XS;
use File::Basename;
use File::Slurp;

package App::Localmail;

sub base_config () {
	my $config_dir = "$ENV{HOME}/.config/localmail";
	my $config = {};

	# Load main configuration
	$config->{localmail} = YAML::XS::Load(File::Slurp::read_file("$config_dir/config.yaml"));

	# Load account configurations
	for (glob("$config_dir/accounts/*.yaml")) {
		my ($name, $path, $suffix) = File::Basename::fileparse($_, ('.yaml'));
		my $yaml = File::Slurp::read_file($_);

		$config->{accounts}->{$name} = YAML::XS::Load($yaml);
	}

	$config->{localmail}{maildir} //= "$ENV{HOME}/.maildir";

	$config;
}

sub config_passwords ($config) {
	# Get passwords where necessary
	for (keys %{$config->{accounts}}) {
		if (!defined($config->{accounts}{$_}{incoming}{password}{plain})) {
			my $file = $config->{accounts}{$_}{incoming}{password}{file};
			chomp (my $password = qx/gpg -d "$file" | head -n 1/);

			$config->{accounts}{$_}{incoming}{password}{plain} = $password;
		}

		if (!defined($config->{accounts}{$_}{outgoing}{password}{plain})) {
			my $file = $config->{accounts}{$_}{outgoing}{password}{file};
			chomp (my $password = qx/gpg -d "$file" | head -n 1/);

			$config->{accounts}{$_}{outgoing}{password}{plain} = $password;
		}
	}
}

1;