Headphone audio channels are reversed, how can I change channel position on Pipewire?

So I have this problem on my front panel jack that makes audio come reversed, been like this forever but I always managed to swap channels either on windows or ubuntu (through pulseaudio) by just finding a config file and mapping my positions in a way that worked.

I recently installed Pipewire for the streaming audio ease with discord and the like but I can't seem to find a clear clue how to map channels with it.

If anyone could show me where the correct config file is and which line controlls audio channel postions I'd be glad and very thankful.

edit: I'm on ubuntu 21.10, pipewire is on version 3.34

My pipewire conf at etc/pipewire/pipewire.conf

# Daemon config file for PipeWire version "0.3.32" #
#
# Copy and edit this file in /etc/pipewire for systemwide changes
# or in ~/.config/pipewire for local changes.

context.properties = {
    ## Configure properties in the system.
    #library.name.system                   = support/libspa-support
    #context.data-loop.library.name.system = support/libspa-support
    #support.dbus                          = true
    #link.max-buffers                      = 64
    link.max-buffers                       = 16                       # version < 3 clients can't handle more
    #mem.warn-mlock                        = false
    #mem.allow-mlock                       = true
    #mem.mlock-all                         = false
    #clock.power-of-two-quantum            = true
    #log.level                             = 2
    audio.position   = "FR,FL"

    core.daemon                            = true                     # listening for socket connections
    core.name                              = pipewire-0               # core name and socket name

    ## Properties for the DSP configuration.
    #default.clock.rate        = 48000
    #default.clock.quantum     = 1024
    #default.clock.min-quantum = 32
    #default.clock.max-quantum = 8192
    #default.video.width       = 640
    #default.video.height      = 480
    #default.video.rate.num    = 25
    #default.video.rate.denom  = 1
    #
    # These overrides are only applied when running in a vm.
    vm.overrides = {
        default.clock.min-quantum     = 1024
    }
}

context.spa-libs = {
    #<factory-name regex> = <library-name>
    #
    # Used to find spa factory names. It maps an spa factory name
    # regular expression to a library name that should contain
    # that factory.
    #
    audio.convert.* = audioconvert/libspa-audioconvert
    api.alsa.*      = alsa/libspa-alsa
    api.v4l2.*      = v4l2/libspa-v4l2
    api.libcamera.* = libcamera/libspa-libcamera
    api.bluez5.*    = bluez5/libspa-bluez5
    api.vulkan.*    = vulkan/libspa-vulkan
    api.jack.*      = jack/libspa-jack
    support.*       = support/libspa-support
    #videotestsrc   = videotestsrc/libspa-videotestsrc
    #audiotestsrc   = audiotestsrc/libspa-audiotestsrc
}

context.modules = [
    #{   name = <module-name>
    #    [ args = { <key> = <value> ... } ]
    #    [ flags = [ [ ifexists ] [ nofail ] ]
    #}
    #
    # Loads a module with the given parameters.
    # If ifexists is given, the module is ignored when it is not found.
    # If nofail is given, module initialization failures are ignored.
    #

    # Uses RTKit to boost the data thread priority.
    {   name = libpipewire-module-rtkit
        args = {
            #nice.level   = -11
            #rt.prio      = 88
            #rt.time.soft = 2000000
            #rt.time.hard = 2000000
        }
        flags = [ ifexists nofail ]
    }

    # Set thread priorities without using RTKit.
    #{   name = libpipewire-module-rt
    #    args = {
    #        nice.level   = -11
    #        rt.prio      = 88
    #        rt.time.soft = 2000000
    #        rt.time.hard = 2000000
    #    }
    #    flags = [ ifexists nofail ]
    #}

    # The native communication protocol.
    {   name = libpipewire-module-protocol-native }

    # The profile module. Allows application to access profiler
    # and performance data. It provides an interface that is used
    # by pw-top and pw-profiler.
    {   name = libpipewire-module-profiler }

    # Allows applications to create metadata objects. It creates
    # a factory for Metadata objects.
    {   name = libpipewire-module-metadata }

    # Creates a factory for making devices that run in the
    # context of the PipeWire server.
    {   name = libpipewire-module-spa-device-factory }

    # Creates a factory for making nodes that run in the
    # context of the PipeWire server.
    {   name = libpipewire-module-spa-node-factory }

    # Allows creating nodes that run in the context of the
    # client. Is used by all clients that want to provide
    # data to PipeWire.
    {   name = libpipewire-module-client-node }

    # Allows creating devices that run in the context of the
    # client. Is used by the session manager.
    {   name = libpipewire-module-client-device }

    # The portal module monitors the PID of the portal process
    # and tags connections with the same PID as portal
    # connections.
    {   name = libpipewire-module-portal
        flags = [ ifexists nofail ]
    }

    # The access module can perform access checks and block
    # new clients.
    {   name = libpipewire-module-access
        args = {
            # access.allowed to list an array of paths of allowed
            # apps.
            #access.allowed = [
            #    /usr/bin/pipewire-media-session
            #]

            # An array of rejected paths.
            #access.rejected = [ ]

            # An array of paths with restricted access.
            #access.restricted = [ ]

            # Anything not in the above lists gets assigned the
            # access.force permission.
            #access.force = flatpak
        }
    }

    # Makes a factory for wrapping nodes in an adapter with a
    # converter and resampler.
    {   name = libpipewire-module-adapter }

    # Makes a factory for creating links between ports.
    {   name = libpipewire-module-link-factory }

    # Provides factories to make session manager objects.
    {   name = libpipewire-module-session-manager }
]

context.objects = [
    #{   factory = <factory-name>
    #    [ args  = { <key> = <value> ... } ]
    #    [ flags = [ [ nofail ] ]
    #}
    #
    # Creates an object from a PipeWire factory with the given parameters.
    # If nofail is given, errors are ignored (and no object is created).
    #
    #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } }
    #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
    #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
    #{ factory = spa-node-factory   args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
    #{ factory = adapter            args = { factory.name = audiotestsrc node.name = my-test } }
    #{ factory = spa-node-factory   args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }

    # A default dummy driver. This handles nodes marked with the "node.always-driver"
    # property when no other driver is currently active. JACK clients need this.
    {   factory = spa-node-factory
        args = {
            factory.name    = support.node.driver
            node.name       = Dummy-Driver
            node.group      = pipewire.dummy
            priority.driver = 20000
        }
    }
    {   factory = spa-node-factory
        args = {
            factory.name    = support.node.driver
            node.name       = Freewheel-Driver
            priority.driver = 19000
            node.group      = pipewire.freewheel
            node.freewheel  = true
        }
    }
    This creates a new Source node. It will have input ports
    that you can link, to provide audio for this source.
    {   factory = adapter
        args = {
            factory.name     = support.null-audio-sink
            node.name        = "my-mic"
            node.description = "Microphone"
            media.class      = "Audio/Source/Virtual"
            audio.position   = "FR,FL"
        }
    }

     This creates a single PCM source device for the given
     alsa device path hw:0. You can change source to sink
     to make a sink in the same way.
    {   factory = adapter
        args = {
            factory.name            = api.alsa.pcm.source
            node.name               = "alsa-source"
            node.description        = "PCM Source"
            media.class             = "Audio/Source"
            api.alsa.path           = "hw:0"
            api.alsa.period-size   = 1024
            api.alsa.headroom      = 0
            api.alsa.disable-mmap  = false
            api.alsa.disable-batch = false
            audio.format           = "S16LE"
            audio.rate             = 48000
            audio.channels         = 2
            audio.position         = "FR,FL"
        }
    }
]

context.exec = [
    #{ path = <program-name> [ args = "<arguments>" ] }
    #
    # Execute the given program with arguments.
    #
    # You can optionally start the session manager here,
    # but it is better to start it as a systemd service.
    # Run the session manager with -h for options.
    #
    #{ path = "/usr/bin/pipewire-media-session"  args = "" }
    #
    # You can optionally start the pulseaudio-server here as well
    # but it is better to start it as a systemd service.
    # It can be interesting to start another daemon here that listens
    # on another address with the -a option (eg. -a tcp:4713).
    #
    #{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]

channel-map = right,left


Ok, so I installed EasyEffects which bundles a nice plugin called Stereo Tool, with it i flipped the FL with FR channels without any hassle, a true godsend! It manages pipewire as a whole, from what I understand so it's a nice powerful tool.this is how the plug-in on EasyEffects looks like