 7b0167204d
			
		
	
	
		7b0167204d
		
	
	
	
	
		
			
			tarballs.nixos.org is omitted from the change because urls from there are always hashed and checked
		
			
				
	
	
		
			174 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | ||
| 
 | ||
| with 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))}
 | ||
|     '';
 | ||
| 
 | ||
| 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.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       dates = mkOption {
 | ||
|         default = "*:0/15";
 | ||
|         type = types.str;
 | ||
|         description = ''
 | ||
|           Specification (in the format described by
 | ||
|           <citerefentry><refentrytitle>systemd.time</refentrytitle>
 | ||
|           <manvolnum>7</manvolnum></citerefentry>) of the time at
 | ||
|           which the Venus will collect feeds.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       user = mkOption {
 | ||
|         default = "root";
 | ||
|         type = types.str;
 | ||
|         description = ''
 | ||
|           User for running venus script.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       group = mkOption {
 | ||
|         default = "root";
 | ||
|         type = types.str;
 | ||
|         description = ''
 | ||
|           Group for running venus script.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       name = mkOption {
 | ||
|         default = "NixOS Planet";
 | ||
|         type = types.str;
 | ||
|         description = ''
 | ||
|           Your planet's name.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       link = mkOption {
 | ||
|         default = "https://planet.nixos.org";
 | ||
|         type = types.str;
 | ||
|         description = ''
 | ||
|           Link to the main page.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       ownerName = mkOption {
 | ||
|         default = "Rok Garbas";
 | ||
|         type = types.str;
 | ||
|         description = ''
 | ||
|           Your name.
 | ||
|         '';
 | ||
|       };
 | ||
| 
 | ||
|       ownerEmail = mkOption {
 | ||
|         default = "some@example.com";
 | ||
|         type = types.str;
 | ||
|         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.user}:${cfg.group} ${cfg.outputDirectory} -R
 | ||
|         rm -rf ${cfg.cacheDirectory}/theme
 | ||
|         mkdir -p ${cfg.cacheDirectory}/theme
 | ||
|         cp -R ${cfg.outputTheme}/* ${cfg.cacheDirectory}/theme
 | ||
|         chown ${cfg.user}:${cfg.group} ${cfg.cacheDirectory} -R
 | ||
|       '';
 | ||
| 
 | ||
|     systemd.services.venus =
 | ||
|       { description = "Planet Venus Feed Reader";
 | ||
|         path  = [ pkgs.venus ];
 | ||
|         script = "exec venus-planet ${configFile}";
 | ||
|         serviceConfig.User = "${cfg.user}";
 | ||
|         serviceConfig.Group = "${cfg.group}";
 | ||
|         startAt = cfg.dates;
 | ||
|       };
 | ||
| 
 | ||
|   };
 | ||
| }
 |