2013-07-23 23:04:55 +02:00

158 lines
3.8 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{config, pkgs, ...}:
with pkgs.lib;
let
cfg = config.services.venus;
configFile = pkgs.writeText "venus.ini"
''
[Planet]
name = ${cfg.name}
link = ${cfg.link}
owner_name = ${cfg.ownerName}
owner_email = ${cfg.ownerEmail}
output_theme = ${cfg.cacheDirectory}/theme
output_dir = ${cfg.outputDirectory}
cache_directory = ${cfg.cacheDirectory}
items_per_page = ${toString cfg.itemsPerPage}
${(concatStringsSep "\n\n"
(map ({ name, feedUrl, homepageUrl }:
''
[${feedUrl}]
name = ${name}
link = ${homepageUrl}
'') cfg.feeds))}
'';
cronJob = ''
${cfg.cronInterval} ${cfg.cronUser} ${pkgs.venus}/bin/venus-planet ${configFile}
'';
in
{
options = {
services.venus = {
enable = mkOption {
default = false;
type = types.bool;
description = ''
Planet Venus is an awesome river of news feed reader. It downloads
news feeds published by web sites and aggregates their content
together into a single combined feed, latest news first.
'';
};
cronInterval = mkOption {
default = "*/10 * * * *";
type = types.string;
description = ''
Interval in cron format. Default is every 10 minutes.
'';
};
cronUser = mkOption {
default = "root";
type = types.string;
description = ''
User for running the cron job.
'';
};
name = mkOption {
default = "NixOS Planet";
type = types.string;
description = ''
Your planet's name.
'';
};
link = mkOption {
default = "http://planet.nixos.org";
type = types.string;
description = ''
Link to the main page.
'';
};
ownerName = mkOption {
default = "Rok Garbas";
type = types.string;
description = ''
Your name.
'';
};
ownerEmail = mkOption {
default = "some@example.com";
type = types.string;
description = ''
Your e-mail address.
'';
};
outputTheme = mkOption {
default = "${pkgs.venus}/themes/classic_fancy";
type = types.path;
description = ''
Directory containing a config.ini file which is merged with this one.
This is typically used to specify templating and bill of material
information.
'';
};
outputDirectory = mkOption {
type = types.path;
description = ''
Directory to place output files.
'';
};
cacheDirectory = mkOption {
default = "/var/cache/venus";
type = types.path;
description = ''
Where cached feeds are stored.
'';
};
itemsPerPage = mkOption {
default = 15;
type = types.int;
description = ''
How many items to put on each page.
'';
};
feeds = mkOption {
default = [];
example = [
{
name = "Rok Garbas";
feedUrl= "http://url/to/rss/feed.xml";
homepageUrl = "http://garbas.si";
}
];
description = ''
List of feeds.
'';
};
};
};
config = mkIf cfg.enable {
system.activationScripts.venus =
''
mkdir -p ${cfg.outputDirectory}
chown ${cfg.cronUser} ${cfg.outputDirectory} -R
rm -rf ${cfg.cacheDirectory}/themes
mkdir -p ${cfg.cacheDirectory}/themes
cp -R ${cfg.outputTheme}/* ${cfg.cacheDirectory}/theme
chown ${cfg.cronUser} ${cfg.cacheDirectory} -R
'';
services.cron.systemCronJobs = [ cronJob ];
};
}