forked from rarias/jungle
		
	Reviewed-by: Aleix Boné <abonerib@bsc.es> Reviewed-by: Aleix Roca Nonell <aleix.rocanonell@bsc.es>
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| let
 | |
|   cfg = config.services.p;
 | |
| in
 | |
| {
 | |
|   options = {
 | |
|     services.p = {
 | |
|       enable = lib.mkOption {
 | |
|         type = lib.types.bool;
 | |
|         default = false;
 | |
|         description = "Whether to enable the p service.";
 | |
|       };
 | |
|       path = lib.mkOption {
 | |
|         type = lib.types.str;
 | |
|         default = "/var/lib/p";
 | |
|         description = "Where to save the pasted files on disk.";
 | |
|       };
 | |
|       url = lib.mkOption {
 | |
|         type = lib.types.str;
 | |
|         default = "https://jungle.bsc.es/p";
 | |
|         description = "URL prefix for the printed file.";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = lib.mkIf cfg.enable {
 | |
|     environment.systemPackages = let 
 | |
|       p = pkgs.writeShellScriptBin "p" ''
 | |
|         set -e
 | |
|         pastedir="${cfg.path}/$USER"
 | |
|         cd "$pastedir"
 | |
| 
 | |
|         ext="txt"
 | |
|         if [ -n "$1" ]; then
 | |
|           ext="$1"
 | |
|         fi
 | |
| 
 | |
|         out=$(mktemp "XXXXXXXX.$ext")
 | |
|         cat > "$out"
 | |
|         chmod go+r "$out"
 | |
|         echo "${cfg.url}/$USER/$out"
 | |
|       '';
 | |
|     in [ p ];
 | |
| 
 | |
|     systemd.services.p = let
 | |
|       # Take only normal users
 | |
|       users = lib.filterAttrs (_: v: v.isNormalUser) config.users.users;
 | |
|       # Create a directory for each user
 | |
|       commands = lib.concatLists (lib.mapAttrsToList (_: user: [
 | |
|         "install -d -o ${user.name} -g ${user.group} -m 0755 ${cfg.path}/${user.name}"
 | |
|       ]) users);
 | |
|     in {
 | |
|       description = "P service setup";
 | |
|       requires = [ "network-online.target" ];
 | |
|       #wants = [ "remote-fs.target" ];
 | |
|       #after = [ "remote-fs.target" ];
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       serviceConfig = {
 | |
|         ExecStart = pkgs.writeShellScript "p-init.sh" (''
 | |
| 
 | |
|           install -d -o root -g root -m 0755 ${cfg.path}
 | |
| 
 | |
|         '' + (lib.concatLines commands));
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |