You want to get the absolute minimum in the first argument?
Since the first element of the argument can decrease and then increase, to get the argument with the smallest first element,
The documentation says
NestWhile[f,expr,test,m,max,n] applies f an additional n times after test fails, or max applications have already been performed.
NestWhile[f,expr,test,m,max,-n] is equivalent to Part[NestWhileList[f,expr,test,m,max],-n-1].
NestWhile stops when the test fails (for the first time), one can order some flavours when testing has to start, how much iterations have to be performed and how much extra iterations have to be performed. But the main thing is the test function: instead of #2[[1]]<#1[[1]]& you may define a test function tKampas having as much arguments as the argument of NestWhile behind the test function says. So as before
In[77]:= Clear[fKampas]
fKampas[x_] := If[x[[1]] > 5,
{x[[1]] - 1/10, x[[2]] + 1/10},
{x[[1]], x[[2]] + 1/10}] /; VectorQ[x, NumericQ] && Length[x] > 1
In[79]:= Clear[tKampas]
tKampas[r1_, r2_] := First[r2] < First[r1]
In[81]:= NestWhile[fKampas, {7, 9}, tKampas, 2]
Out[81]= {5, 111/10}
to find a global minimum instead of a local in the first argument with NestWhile, the test function simply has to reflect that, and tKampas does not do it. tKampas finds a local minimum. The thing is, only the results in the result store can be tested: because one does not know, where the global minimum is, one does also not know how much steps (results) must be compared within the test function. Possibly NestWhile is not the right choice to find a global minimum. There are functions like FindMinimum[], which could be taken into consideration.
Just a correction: NestWhile[f,expr,test,All] supplies all results so far as arguments for test at each step.