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));
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |