Over the years I have tried various approaches.
I find that a profit on the materials plus a reasonable labour charge works well. On the handful of jobs I've agreed to charge cost I've included an element for running around, so I am not losing money on the job.
I was given a 50% discount off retail on floor tiles I laid. So the customer was charged the normal retail. They run a shop and mark all their stock up by 100% so I won't lose any sleep over that!
One customer, without permission, used MY name to get discount for wooden flooring. They knew I had an account with that supplier. I had arranged a discount at one branch, then they upset that branch by haggling, using my name then getting the other branch to match the price.
Result, the customer got what they wanted, but all my work to build up a good business relationship with the other branch was put in jeapordy. If they had just approached me and asked me to organise it for them I would have obliged.
I posted that experience on here - and was given some very good advice by Dan IIRC. His view was that Trade Discount is for the trade, not the customer.