To solve this problem, we will define two decision variables: `x` representing the amount of Fruity Loop detergent produced in kg, and `y` representing the amount of Passion Cook detergent produced in kg. We aim to minimize the total cost while meeting the soap and citric acid requirements.

The objective function is to minimize the total cost:
- Cost of producing `x` kg of Fruity Loop at $6 per kg: `6x`
- Cost of producing `y` kg of Passion Cook at $5 per kg: `5y`

So, the total cost to be minimized is: `6x + 5y`

The constraints based on the given information are:
1. Soap requirement: Fruity Loop contains 10% soap and Passion Cook contains 5% soap. The company needs at least 20 kg of soap.
   - This translates to: `0.10x + 0.05y >= 20`
2. Citric acid requirement: Fruity Loop contains 6% citric acid and Passion Cook contains 10% citric acid. The company needs at least 15 kg of citric acid.
   - This translates to: `0.06x + 0.10y >= 15`
3. Non-negativity constraints: Since we cannot produce a negative amount of detergent, both `x` and `y` must be non-negative.
   - `x >= 0`, `y >= 0`

We will use Gurobi to solve this linear programming problem in Python.

```python
from gurobipy import *

# Create a new model
m = Model("Detergent_Production")

# Define the decision variables
x = m.addVar(lb=0, name="Fruity_Loop")
y = m.addVar(lb=0, name="Passion_Cook")

# Define the objective function: minimize total cost
m.setObjective(6*x + 5*y, GRB.MINIMIZE)

# Add constraints
m.addConstr(0.10*x + 0.05*y >= 20, "Soap_Requirement")
m.addConstr(0.06*x + 0.10*y >= 15, "Citric_Acid_Requirement")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Produce {x.x} kg of Fruity Loop")
    print(f"Produce {y.x} kg of Passion Cook")
    print(f"Total cost: ${m.objVal}")
else:
    print("No optimal solution found. The problem might be infeasible.")

```