158 lines
3.8 KiB
Nix
158 lines
3.8 KiB
Nix
{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 ];
|
||
|
||
};
|
||
}
|