Sort between font formats (variable/non variable), all other parameters being equal
While packaging Public Sans, I notice that fontconfig sorting is inconsistent:
$ fc-scan -f "%{family[0]};%{style[0]};%{fullname[0]};%{width};%{weight};%{slant};%{fontversion};%{file}\n" /usr/share/fonts/uswds-public-sans-fonts | sort -t ';' -k1,1d -k4,4n -k5,5n -k6,6n -k2,2d -k7,7dr | uniq | column --separator ';' -t
Public Sans Public Sans 100 [0 210] 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Thin Public Sans 100 0 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Thin Public Sans 100 0 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Thin.otf
Public Sans Public Sans 100 [0 210] 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Thin Italic Public Sans Italic 100 0 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Thin Italic Public Sans Italic 100 0 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-ThinItalic.otf
Public Sans ExtraLight Public Sans ExtraLight 100 40 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-ExtraLight.otf
Public Sans ExtraLight Public Sans ExtraLight 100 40 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans ExtraLight Italic Public Sans ExtraLight Italic 100 40 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-ExtraLightItalic.otf
Public Sans ExtraLight Italic Public Sans ExtraLight Italic 100 40 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Light Public Sans Light 100 50 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Light.otf
Public Sans Light Italic Public Sans Light Italic 100 50 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-LightItalic.otf
Public Sans Regular Public Sans 100 80 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Regular.otf
Public Sans Regular Public Sans 100 80 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Italic Public Sans Italic 100 80 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Italic.otf
Public Sans Italic Public Sans Italic 100 80 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Medium Public Sans Medium 100 100 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Medium.otf
Public Sans Medium Public Sans Medium 100 100 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Medium Italic Public Sans Medium Italic 100 100 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Medium Italic Public Sans Medium Italic 100 100 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-MediumItalic.otf
Public Sans SemiBold Public Sans SemiBold 100 180 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans SemiBold Public Sans SemiBold 100 180 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-SemiBold.otf
Public Sans SemiBold Italic Public Sans SemiBold Italic 100 180 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans SemiBold Italic Public Sans SemiBold Italic 100 180 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-SemiBoldItalic.otf
Public Sans Bold Public Sans Bold 100 200 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Bold.otf
Public Sans Bold Public Sans Bold 100 200 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Bold Italic Public Sans Bold Italic 100 200 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-BoldItalic.otf
Public Sans Bold Italic Public Sans Bold Italic 100 200 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans ExtraBold Public Sans ExtraBold 100 205 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-ExtraBold.otf
Public Sans ExtraBold Public Sans ExtraBold 100 205 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans ExtraBold Italic Public Sans ExtraBold Italic 100 205 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-ExtraBoldItalic.otf
Public Sans ExtraBold Italic Public Sans ExtraBold Italic 100 205 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Black Public Sans Black 100 210 0 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-Black.otf
Public Sans Black Public Sans Black 100 210 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Black Italic Public Sans Black Italic 100 210 100 66060 /usr/share/fonts/uswds-public-sans-fonts/PublicSans-BlackItalic.otf
Public Sans Black Italic Public Sans Black Italic 100 210 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
Public Sans Thin Light Public Sans Thin 100 50 0 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Roman-VF.ttf
Public Sans Thin Light Italic Public Sans Thin Italic 100 50 100 66060 /usr/share/fonts/uswds-public-sans-fonts/Public-Sans-Italic-VF.ttf
All other things being equal, variables entities are sometimes returned first (for Public Sans Thin) sometimes second (for Public Sans Italic).
I fear that this inconsistency will lead to app bugs, unless apps are extra careful