Override global Sass variables from theme

Continuing the discussion from Cleaning up our color palette :art::

Themes already have the ability to define sass variables:

https://github.com/discourse/discourse/blob/master/spec/models/remote_theme_spec.rb#L32-L39

However, from personal testing, these seem to be local to the theme’s stylesheets, and won’t globally override a variable.

If they did it would prove incredibly useful for theme development, as it would allow the theme to specify exactly what colour should be used as $primary-medium, $tertiary-low and so on - rather than have it automagically calculated off of the colour scheme.

Perhaps there should be a scope option, something like this:

"fields": {
  "primary-medium": {
    "value": "#012345",
    "type": "color",
    "scope": "global"
  }
}
1 Like

Maybe, but what happens if multiple theme components are fighting for such a change, who wins?

As a wise man once said:

I can’t see much use for this beyond colours, and I can’t ever see a user wanting to enable two themes both of which change the color scheme.

Perhaps though this makes more sense as an extension to color_schemes, which can only be enabled individually:

"color_schemes": {
  "Extened Scheme": {
    "primary": "000",
    "primary-medium": "666",
    "primary-low": "aaaaaa"
  }
}

Related:

4 Likes

I really need this.

I have a default primary colour: 4d238c. The issue is the color for $primary-secondary that is being generated (#a179de) doesn’t pass accessability guidelines, so i need to make it darker,

It seems laborious to change it in all places where the system is using the secondary colour when I could just over write $primary-secondary : red;

3 Likes

You can now override the automatically generated variables in a remote theme: Override values for auto-generated color variables

5 Likes