To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of snack mix A as `x_A` and the number of snack mix B as `x_B`. The objective is to minimize the total cost, which can be represented as `1*x_A + 1.20*x_B`.

We have constraints based on the requirements for cashews and peanuts in the special mix:
- At least 90 cashews: `20*x_A + 10*x_B >= 90`
- At least 80 peanuts: `30*x_A + 45*x_B >= 80`
- At most 12 of snack mix A: `x_A <= 12`

Additionally, we cannot have negative quantities of either snack mix:
- `x_A >= 0` and `x_B >= 0`

Now, let's translate these constraints and the objective function into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
m = Model("Snack_Mix_Optimization")

# Decision variables
x_A = m.addVar(lb=0, name="snack_mix_A")
x_B = m.addVar(lb=0, name="snack_mix_B")

# Objective function: Minimize cost
m.setObjective(1*x_A + 1.20*x_B, GRB.MINIMIZE)

# Constraints
m.addConstr(20*x_A + 10*x_B >= 90, "cashew_constraint")
m.addConstr(30*x_A + 45*x_B >= 80, "peanut_constraint")
m.addConstr(x_A <= 12, "snack_mix_A_limit")

# Optimize
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: {x_A.varName} = {x_A.x}, {x_B.varName} = {x_B.x}")
    print(f"Total cost: {m.objVal}")
else:
    print("No optimal solution found")
```