To solve the optimization problem described, we first need to convert the natural language description into a symbolic representation. This involves defining variables and translating the constraints and objective function into algebraic terms.

Let's define:
- $x_1$ as the number of snack mix A in the mixture,
- $x_2$ as the number of snack mix B in the mixture.

The objective is to minimize the cost, which can be represented by the objective function: $1.00x_1 + 1.20x_2$.

The constraints given are:
1. The special mix must contain at least 90 cashews.
2. The special mix must contain at least 80 peanuts.
3. There can be at most 12 of snack mix A in the mixture.

Translating these into algebraic terms using our defined variables, we get:
1. $20x_1 + 10x_2 \geq 90$ (cashew constraint),
2. $30x_1 + 45x_2 \geq 80$ (peanut constraint),
3. $x_1 \leq 12$ (snack mix A limit).

Non-negativity constraints are also implied since we cannot have a negative number of snack mixes: $x_1, x_2 \geq 0$.

The symbolic representation in the requested format is:
```json
{
    'sym_variables': [('x1', 'number of snack mix A'), ('x2', 'number of snack mix B')],
    'objective_function': '1.00*x1 + 1.20*x2',
    'constraints': [
        '20*x1 + 10*x2 >= 90',
        '30*x1 + 45*x2 >= 80',
        'x1 <= 12',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

Now, let's write the Gurobi code in Python to solve this linear programming problem:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="snack_mix_A")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="snack_mix_B")

# Set objective function
m.setObjective(1.00*x1 + 1.20*x2, GRB.MINIMIZE)

# Add constraints
m.addConstr(20*x1 + 10*x2 >= 90, "cashew_constraint")
m.addConstr(30*x1 + 45*x2 >= 80, "peanut_constraint")
m.addConstr(x1 <= 12, "snack_mix_A_limit")
m.addConstr(x1 >= 0, "non_negativity_x1")
m.addConstr(x2 >= 0, "non_negativity_x2")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Snack Mix A: {x1.x}")
    print(f"Snack Mix B: {x2.x}")
    print(f"Total Cost: ${m.objVal:.2f}")
else:
    print("No optimal solution found")
```