forked from rarias/bscpkgs
		
	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;
 | |
|   };
 | |
| }
 |