#!/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;