Unlit solid color Shader with edge outline

Hi, can someone perhaps help me to understand how to get a Shader that will allow me to have a 3D object with a solid - unlit color, but have the edge outlined to be another solid color. The effect should look like this:
8142656--1057190--upload_2022-5-20_11-11-29.png

Most of the examples that I have looked at are more helpful for cartoon style shading or object highlighting. I would like to achieve the above effect with the most performant Shader possible. If I am able to get the ugly pixelated feel, then that would be great.

Many Thanks!

Ok, so I manged to get the following edge effect, I am trying to figure out how to add the solid fill. Any help would be appreciated

8145074--1057673--upload_2022-5-21_11-21-4.png

CODE:

Shader "Custom/Basic/Wireframe"
{
    Properties
    {
        [PowerSlider(3.0)]
        _WireframeVal ("Edge width", Range(0., 0.5)) = 0.05
        _EdgeColor ("Edge color", color) = (1., 1., 1., 1.) 
    }
    SubShader
    {
        Tags { "Queue"="Geometry" "RenderType"="Opaque" }

        Pass
        { 
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma geometry geom

             #pragma shader_feature __ _REMOVEDIAG_ON

            #include "UnityCG.cginc"

            struct v2g {
                float4 worldPos : SV_POSITION;
            };

            struct g2f {
                float4 pos : SV_POSITION;
                float3 bary : TEXCOORD0;
            };

            v2g vert(appdata_base v) {
                v2g o;
                o.worldPos = mul(unity_ObjectToWorld, v.vertex);
                return o;
            }

            [maxvertexcount(3)]
            void geom(triangle v2g IN[3], inout TriangleStream<g2f> triStream) {
                float3 param = float3(0., 0., 0.);

                #if _REMOVEDIAG_ON
                float EdgeA = length(IN[0].worldPos - IN[1].worldPos);
                float EdgeB = length(IN[1].worldPos - IN[2].worldPos);
                float EdgeC = length(IN[2].worldPos - IN[0].worldPos);

                if(EdgeA > EdgeB && EdgeA > EdgeC)
                    param.y = 1.;
                else if (EdgeB > EdgeC && EdgeB > EdgeA)
                    param.x = 1.;
                else
                    param.z = 1.;
                #endif

                g2f o;
                o.pos = mul(UNITY_MATRIX_VP, IN[0].worldPos);
                o.bary = float3(1., 0., 0.) + param;
                triStream.Append(o);
                o.pos = mul(UNITY_MATRIX_VP, IN[1].worldPos);
                o.bary = float3(0., 0., 1.) + param;
                triStream.Append(o);
                o.pos = mul(UNITY_MATRIX_VP, IN[2].worldPos);
                o.bary = float3(0., 1., 0.) + param;
                triStream.Append(o);
            }

            float _WireframeVal;
            fixed4 _EdgeColor;

            fixed4 frag(g2f i) : SV_Target {
            if(!any(bool3(i.bary.x < _WireframeVal, i.bary.y < _WireframeVal, i.bary.z < _WireframeVal)))
                 discard;

                return _EdgeColor;
            }

            ENDCG
        }
         
    }
}