I believe that the info in this thread
I got lucky, and found a set of low-mileage take-off factory ESA shocks from a BMW junkyard. Otherwise, I'd probably have gone with the WP ESA replacement shocks. Some guys forgo ESA and just go with Öhlins or other high-quality non-ESA shocks.
The rear shock isn't too bad. You have to drop the final drive and lower the swing arm, and it calls for replacing the shock bolts as they're micro-encapsulated (factory thread locker applied), but you can also use Loctite.
The front shock is a bit more tricky, with critical torque specs. To remove the front shock, you have to remove the pivot bolt for the lower A-arm so you can get the shock to drop out from the bottom. When reseating the A-arm, the lower bolt needs to be torqued to 20 Nm to seat it, then loosened, then torqued to 7 Nm. Then you have to hold that 7 Nm steady while the outer lock nut is torqued to 145 Nm. This takes a special tool, which is basically a socket with a window cut out of it. You use an allen wrench through the cutout window to hold the bolt from turning, then use the socket to get the big torque on the lock nut.
It's a bit tricky, and there's not much room to work. I had access to a cutout socket from replacing final drives on my LT, and I'd done that procedure before, but it's still quite easy to get it wrong and over-torque the pivot bolt, which adds stiffness to the front suspension and adds wear to the pivot bushings.
So it can be done at home with the right tools and experience, and you do need the factory Service Manual to get the right procedure and torque specs, but it's definitely more of an advanced job.
'13 Dark Graphite Metallic K16GTLD, 24K miles and counting...
'09 Magnesium Beige Metallic K13GT, 60K miles miles and counting...
'02 Mauve Metallic K12LTC, 106K miles and sold
BMWLT#145, IBA# 366, MOA# 111996, SCMA# 24032
All lower 48 states plus Alaska on the K13GT in two weeks . . .
Some people see the gas tank as half empty. Some see it as half full. All I care is that I know where the next tankful is coming from...