forked from rarias/jungle
		
	Ensure that all hut users have a paste directory in /ceph/p owned by themselves. We need to wait for the ceph mount point to create them, so we use a systemd service that waits for the remote-fs.target. Reviewed-by: Aleix Boné <abonerib@bsc.es>
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ pkgs, lib, config, ... }:
 | 
						|
let
 | 
						|
  p = pkgs.writeShellScriptBin "p" ''
 | 
						|
    set -e
 | 
						|
    cd /ceph
 | 
						|
    pastedir="p/$USER"
 | 
						|
    mkdir -p "$pastedir"
 | 
						|
 | 
						|
    ext="txt"
 | 
						|
 | 
						|
    if [ -n "$1" ]; then
 | 
						|
      ext="$1"
 | 
						|
    fi
 | 
						|
 | 
						|
    out=$(mktemp "$pastedir/XXXXXXXX.$ext")
 | 
						|
 | 
						|
    cat > "$out"
 | 
						|
    chmod go+r "$out"
 | 
						|
    echo "https://jungle.bsc.es/$out"
 | 
						|
  '';
 | 
						|
in
 | 
						|
{
 | 
						|
  environment.systemPackages = with pkgs; [ p ];
 | 
						|
 | 
						|
  # Make sure we have a directory per user. We cannot use the nice
 | 
						|
  # systemd-tmpfiles-setup.service service because this is a remote FS, and it
 | 
						|
  # may not be mounted when it runs.
 | 
						|
  systemd.services.create-paste-dirs = let
 | 
						|
    # Take only normal users in hut
 | 
						|
    users = lib.filterAttrs (_: v: v.isNormalUser) config.users.users;
 | 
						|
    commands = lib.concatLists (lib.mapAttrsToList
 | 
						|
      (_: user: [
 | 
						|
        "install -d -o ${user.name} -g ${user.group} -m 0755 /ceph/p/${user.name}"
 | 
						|
      ]) users);
 | 
						|
    script = pkgs.writeShellScript "create-paste-dirs.sh" (lib.concatLines commands);
 | 
						|
  in {
 | 
						|
    enable = true;
 | 
						|
    wants = [ "remote-fs.target" ];
 | 
						|
    after = [ "remote-fs.target" ];
 | 
						|
    wantedBy = [ "multi-user.target" ];
 | 
						|
    serviceConfig.ExecStart = script;
 | 
						|
  };
 | 
						|
}
 |