Nichols joined Exeter City from local club Twyford Spartans as a youth at the under-11 age group. He made his professional debut on 7 May 2011, coming on as a half-time substitute for Bertrand Cozic in a 2–1 victory against Sheffield Wednesday at Hillsborough in League One. Nichols scored his first professional goal in a 2–1 victory against Chesterfield at St James Parkon the eve of his 18th birthday. In 2012, Nichols joined ConferenceSouth sideDorchester Town on loan. He made 12 appearances and scored nine goals for the Magpies. In August 2012, Nichols joined Conference side Hereford United on a one-month loan deal. He made nine appearances and scored one goal for the Bulls. In November 2012, Nichols joined Conference South side Bath City on a one-month loan. He made seven appearances and scored one goal for the City. In March 2013, Nichols re-joined Conference South side Dorchester Town on loan. He made five appearances and scored one goal during his second spell at The Avenue Stadium. In November 2013, Nichols began to reestablish his role in the first team. He went on to make 29 appearances and scored six goals during the 2013–14 season in League Two. He finished the season as joint top goalscorer with Scot Bennett. Nichols cemented his place in the starting line-up during the 2014–15 season. He finished the season as the club's leading goalscorer with 15 goals in 39 appearances for the Grecians. Nichols scored and was named the Man of the Match against Liverpool in the 3rd round of the FA Cup on 8 January 2016 during a 2–2 draw.
On 1 February 2016, Nichols joined League One side Peterborough United for an undisclosed fee on a four-and-a-half-year contract. However, two years later, their chairman Darragh MacAnthony revealed the fee was £352,000 including fees and add-ons. He made his debut on 6 February 2016 and scored the winner with a close range shot in a 1–0 victory at Chesterfield. In April he suffered a medial ligament tear injury and missed the rest of the season.
On 17 July 2017 Nichols joined Football League One side Bristol Rovers F.C. for a fee of £350,000, subject to him passing a medical. He scored his first goal for the club on 28 October in a 2–0 win against MK Dons at the Memorial Stadium. Nichols followed up with a second goal three days later against West Ham U23s in the EFL Trophy. Nichols scored 2 penalties within January 2019, one being against his former club Peterborough United F.C. After a successful pre-season, Nichols netted his first league goal of the 2019–20 EFL League One season in a 3–1 home win vs Oxford United F.C. The striker was later on the scoresheet in an EFL Cup home tie against Brighton & Hove Albion F.C. in August, as well as an EFL Trophy match vs Plymouth Argyle F.C. within September 2019. Nichols signed for Cheltenham Town on a six-month loan deal on 31 January 2020. At the end of the 2019-20 season Nichols was released by Bristol Rovers.