To create custom distirbutor all you need is to create a new class that inherets from ParticleDistributor. Let's create one and call it SineDistributor. Then we override the Process function.
                            
    public class SineDistributor : ParticleDistributor 
    {

        public override void Process(ProcessContext context)
        {
            
        }
    }

                            
                        
Then we need to position our particles. In our case we will use Sine and Cosine to do so.
                                
        //here we assign the position of the particles
        //a random Z coordinate
        float randomZ = UnityEngine.Random.value;
        //a percentage of the position in the particle array
        float posPer = (float)context.particle.index / (float)context.particles.Count;
        //the height based on the sine of X and Z
        float height = Height * Mathf.Sin(Mathf.PI * 2 * posPer) * Mathf.Cos(Mathf.PI * 2 * randomZ);
        context.particle.position = new Vector3(posPer, height, randomZ) * Spread * context.galaxy.Size;
                                
                            
We can then use a building function to automaticly assign the Color, Scale and Rotation based on the Particle Prefab Properties.
                            
        ProcessProperties(context, context.particle.position,0);
                            
                        

Here is the complete code.
                        
    using UnityEngine;
    using System.Collections;
    using Galaxia;

    public class SineDistributor : ParticleDistributor {

        public float Spread = 100;
        public float Height = 10;

        public override void Process(ProcessContext context)
        {
            //here we assign the position of the particles
            //a random Z coordinate
            float randomZ = UnityEngine.Random.value;
            //a percentage of the position in the particle array
            float posPer = (float)context.particle.index / (float)context.particles.Count;
            //the height based on the sine of X and Z
            float height = Height * Mathf.Sin(Mathf.PI * 2 * posPer) * Mathf.Cos(Mathf.PI * 2 * randomZ);
            context.particle.position = new Vector3(posPer, height, randomZ) * Spread * context.galaxy.Size;

            //this is a builtin function to automaticly assign colors, size and rotation
            //depending on the Particle Prefab properties
            ProcessProperties(context, context.particle.position,0);
        }
    }
                        
                        
Now you can choose your ditributor from any GalaxyPrefab. And of course the results! The final result of the Sine Custom Prticle Distriputor