From 6ab5d7f69ba51f9b261cc2179ef8f82cfa35be81 Mon Sep 17 00:00:00 2001
From: Stefan Haller <stefan@haller-berlin.de>
Date: Thu, 15 Jun 2023 13:25:32 +0200
Subject: [PATCH 1/2] Turn remoteIcons into a map

We don't actually use it to do map lookups; we still iterate over it in the same
way as before. However, using a map makes it easier to patch elements; see the
next commit.
---
 pkg/gui/presentation/icons/git_icons.go | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/pkg/gui/presentation/icons/git_icons.go b/pkg/gui/presentation/icons/git_icons.go
index a66149b55..342e015fe 100644
--- a/pkg/gui/presentation/icons/git_icons.go
+++ b/pkg/gui/presentation/icons/git_icons.go
@@ -16,16 +16,11 @@ const (
 	STASH_ICON          = "\uf01c" // 
 )
 
-type remoteIcon struct {
-	domain string
-	icon   string
-}
-
-var remoteIcons = []remoteIcon{
-	{domain: "github.com", icon: "\ue709"},    // 
-	{domain: "bitbucket.org", icon: "\ue703"}, // 
-	{domain: "gitlab.com", icon: "\uf296"},    // 
-	{domain: "dev.azure.com", icon: "\ufd03"}, // ﴃ
+var remoteIcons = map[string]string{
+	"github.com":    "\ue709", // 
+	"bitbucket.org": "\ue703", // 
+	"gitlab.com":    "\uf296", // 
+	"dev.azure.com": "\ufd03", // ﴃ
 }
 
 func IconForBranch(branch *models.Branch) string {
@@ -51,10 +46,10 @@ func IconForCommit(commit *models.Commit) string {
 }
 
 func IconForRemote(remote *models.Remote) string {
-	for _, r := range remoteIcons {
+	for domain, icon := range remoteIcons {
 		for _, url := range remote.Urls {
-			if strings.Contains(url, r.domain) {
-				return r.icon
+			if strings.Contains(url, domain) {
+				return icon
 			}
 		}
 	}

From 77c5d1761d0743b6704b660b956deeee0d963a65 Mon Sep 17 00:00:00 2001
From: Stefan Haller <stefan@haller-berlin.de>
Date: Thu, 15 Jun 2023 13:39:11 +0200
Subject: [PATCH 2/2] Add nerdFontsVersion config

---
 docs/Config.md                           |   8 +-
 pkg/config/user_config.go                |   2 +
 pkg/gui/gui.go                           |   6 +-
 pkg/gui/presentation/icons/file_icons.go | 518 ++++++++++++-----------
 pkg/gui/presentation/icons/git_icons.go  |  33 +-
 pkg/gui/presentation/icons/icons.go      |  19 +-
 6 files changed, 315 insertions(+), 271 deletions(-)

diff --git a/docs/Config.md b/docs/Config.md
index 938aaba29..5c14b2da9 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -62,7 +62,8 @@ gui:
   experimentalShowBranchHeads: false # visualize branch heads with (*) in commits list
   showBottomLine: true # for hiding the bottom information line (unless it has important information to tell you)
   showCommandLog: true
-  showIcons: false
+  showIcons: false # deprecated: use nerdFontsVersion instead
+  nerdFontsVersion: "" # nerd fonts version to use ("2" or "3"); empty means don't show nerd font icons
   commandLogSize: 8
   splitDiff: 'auto' # one of 'auto' | 'always'
   skipRewordInEditorWarning: false # for skipping the confirmation before launching the reword editor
@@ -420,9 +421,12 @@ If you are using [Nerd Fonts](https://www.nerdfonts.com), you can display icons.
 
 ```yaml
 gui:
-  showIcons: true
+  nerdFontsVersion: "3"
 ```
 
+Supported versions are "2" and "3". The deprecated config `showIcons` sets the
+version to "2" for backwards compatibility.
+
 ## Keybindings
 
 For all possible keybinding options, check [Custom_Keybindings.md](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Custom_Keybindings.md)
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index 597253e3d..dcc0e0ef6 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -49,6 +49,7 @@ type GuiConfig struct {
 	ShowCommandLog              bool               `yaml:"showCommandLog"`
 	ShowBottomLine              bool               `yaml:"showBottomLine"`
 	ShowIcons                   bool               `yaml:"showIcons"`
+	NerdFontsVersion            string             `yaml:"nerdFontsVersion"`
 	ShowBranchCommitHash        bool               `yaml:"showBranchCommitHash"`
 	ExperimentalShowBranchHeads bool               `yaml:"experimentalShowBranchHeads"`
 	CommandLogSize              int                `yaml:"commandLogSize"`
@@ -426,6 +427,7 @@ func GetDefaultConfig() *UserConfig {
 			ShowFileTree:                true,
 			ShowRandomTip:               true,
 			ShowIcons:                   false,
+			NerdFontsVersion:            "",
 			ExperimentalShowBranchHeads: false,
 			ShowBranchCommitHash:        false,
 			CommandLogSize:              8,
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index b429bda27..b922c5f77 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -496,7 +496,11 @@ func NewGui(
 	gui.c = helperCommon
 
 	authors.SetCustomAuthors(gui.UserConfig.Gui.AuthorColors)
-	icons.SetIconEnabled(gui.UserConfig.Gui.ShowIcons)
+	if gui.UserConfig.Gui.NerdFontsVersion != "" {
+		icons.SetNerdFontsVersion(gui.UserConfig.Gui.NerdFontsVersion)
+	} else if gui.UserConfig.Gui.ShowIcons {
+		icons.SetNerdFontsVersion("2")
+	}
 	presentation.SetCustomBranches(gui.UserConfig.Gui.BranchColors)
 
 	gui.BackgroundRoutineMgr = &BackgroundRoutineMgr{gui: gui}
diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go
index 6e647038b..b4ff58919 100644
--- a/pkg/gui/presentation/icons/file_icons.go
+++ b/pkg/gui/presentation/icons/file_icons.go
@@ -57,260 +57,270 @@ var nameIconMap = map[string]string{
 }
 
 var extIconMap = map[string]string{
-	".ai":             "\ue7b4", // 
-	".android":        "\ue70e", // 
-	".apk":            "\ue70e", // 
-	".apple":          "\uf179", // 
-	".avi":            "\uf03d", // 
-	".avif":           "\uf1c5", // 
-	".avro":           "\ue60b", // 
-	".awk":            "\uf489", // 
-	".bash":           "\uf489", // 
-	".bash_history":   "\uf489", // 
-	".bash_profile":   "\uf489", // 
-	".bashrc":         "\uf489", // 
-	".bat":            "\uf17a", // 
-	".bats":           "\uf489", // 
-	".bmp":            "\uf1c5", // 
-	".bz":             "\uf410", // 
-	".bz2":            "\uf410", // 
-	".c":              "\ue61e", // 
-	".c++":            "\ue61d", // 
-	".cab":            "\ue70f", // 
-	".cc":             "\ue61d", // 
-	".cfg":            "\ue615", // 
-	".class":          "\ue256", // 
-	".clj":            "\ue768", // 
-	".cljs":           "\ue76a", // 
-	".cls":            "\uf034", // 
-	".cmd":            "\ue70f", // 
-	".coffee":         "\uf0f4", // 
-	".conf":           "\ue615", // 
-	".cp":             "\ue61d", // 
-	".cpio":           "\uf410", // 
-	".cpp":            "\ue61d", // 
-	".cs":             "\uf81a", // 
-	".csh":            "\uf489", // 
-	".cshtml":         "\uf1fa", // 
-	".csproj":         "\uf81a", // 
-	".css":            "\ue749", // 
-	".csv":            "\uf1c3", // 
-	".csx":            "\uf81a", // 
-	".cxx":            "\ue61d", // 
-	".d":              "\ue7af", // 
-	".dart":           "\ue798", // 
-	".db":             "\uf1c0", // 
-	".deb":            "\ue77d", // 
-	".diff":           "\uf440", // 
-	".djvu":           "\uf02d", // 
-	".dll":            "\ue70f", // 
-	".doc":            "\uf1c2", // 
-	".docx":           "\uf1c2", // 
-	".ds_store":       "\uf179", // 
-	".DS_store":       "\uf179", // 
-	".dump":           "\uf1c0", // 
-	".ebook":          "\ue28b", // 
-	".ebuild":         "\uf30d", // 
-	".editorconfig":   "\ue615", // 
-	".ejs":            "\ue618", // 
-	".elm":            "\ue62c", // 
-	".env":            "\uf462", // 
-	".eot":            "\uf031", // 
-	".epub":           "\ue28a", // 
-	".erb":            "\ue73b", // 
-	".erl":            "\ue7b1", // 
-	".ex":             "\ue62d", // 
-	".exe":            "\uf17a", // 
-	".exs":            "\ue62d", // 
-	".fish":           "\uf489", // 
-	".flac":           "\uf001", // 
-	".flv":            "\uf03d", // 
-	".font":           "\uf031", // 
-	".fs":             "\ue7a7", // 
-	".fsi":            "\ue7a7", // 
-	".fsx":            "\ue7a7", // 
-	".gdoc":           "\uf1c2", // 
-	".gem":            "\ue21e", // 
-	".gemfile":        "\ue21e", // 
-	".gemspec":        "\ue21e", // 
-	".gform":          "\uf298", // 
-	".gif":            "\uf1c5", // 
-	".git":            "\uf1d3", // 
-	".gitattributes":  "\uf1d3", // 
-	".gitignore":      "\uf1d3", // 
-	".gitmodules":     "\uf1d3", // 
-	".go":             "\ue626", // 
-	".gradle":         "\ue256", // 
-	".groovy":         "\ue775", // 
-	".gsheet":         "\uf1c3", // 
-	".gslides":        "\uf1c4", // 
-	".guardfile":      "\ue21e", // 
-	".gz":             "\uf410", // 
-	".h":              "\uf0fd", // 
-	".hbs":            "\ue60f", // 
-	".hpp":            "\uf0fd", // 
-	".hs":             "\ue777", // 
-	".htm":            "\uf13b", // 
-	".html":           "\uf13b", // 
-	".hxx":            "\uf0fd", // 
-	".ico":            "\uf1c5", // 
-	".image":          "\uf1c5", // 
-	".iml":            "\ue7b5", // 
-	".ini":            "\uf17a", // 
-	".ipynb":          "\ue606", // 
-	".iso":            "\ue271", // 
-	".j2c":            "\uf1c5", // 
-	".j2k":            "\uf1c5", // 
-	".jad":            "\ue256", // 
-	".jar":            "\ue256", // 
-	".java":           "\ue256", // 
-	".jfi":            "\uf1c5", // 
-	".jfif":           "\uf1c5", // 
-	".jif":            "\uf1c5", // 
-	".jl":             "\ue624", // 
-	".jmd":            "\uf48a", // 
-	".jp2":            "\uf1c5", // 
-	".jpe":            "\uf1c5", // 
-	".jpeg":           "\uf1c5", // 
-	".jpg":            "\uf1c5", // 
-	".jpx":            "\uf1c5", // 
-	".js":             "\ue74e", // 
-	".json":           "\ue60b", // 
-	".jsx":            "\ue7ba", // 
-	".jxl":            "\uf1c5", // 
-	".ksh":            "\uf489", // 
-	".kt":             "\ue634", // 
-	".kts":            "\ue634", // 
-	".latex":          "\uf034", // 
-	".less":           "\ue758", // 
-	".lhs":            "\ue777", // 
-	".license":        "\uf718", // 
-	".localized":      "\uf179", // 
-	".lock":           "\uf023", // 
-	".log":            "\uf18d", // 
-	".lua":            "\ue620", // 
-	".lz":             "\uf410", // 
-	".lz4":            "\uf410", // 
-	".lzh":            "\uf410", // 
-	".lzma":           "\uf410", // 
-	".lzo":            "\uf410", // 
-	".m":              "\ue61e", // 
-	".mm":             "\ue61d", // 
-	".m4a":            "\uf001", // 
-	".markdown":       "\uf48a", // 
-	".md":             "\uf48a", // 
-	".mjs":            "\ue74e", // 
-	".mk":             "\uf489", // 
-	".mkd":            "\uf48a", // 
-	".mkv":            "\uf03d", // 
-	".mobi":           "\ue28b", // 
-	".mov":            "\uf03d", // 
-	".mp3":            "\uf001", // 
-	".mp4":            "\uf03d", // 
-	".msi":            "\ue70f", // 
-	".mustache":       "\ue60f", // 
-	".nix":            "\uf313", // 
-	".node":           "\uf898", // 
-	".npmignore":      "\ue71e", // 
-	".odp":            "\uf1c4", // 
-	".ods":            "\uf1c3", // 
-	".odt":            "\uf1c2", // 
-	".ogg":            "\uf001", // 
-	".ogv":            "\uf03d", // 
-	".otf":            "\uf031", // 
-	".part":           "\uf43a", // 
-	".patch":          "\uf440", // 
-	".pdf":            "\uf1c1", // 
-	".php":            "\ue73d", // 
-	".pl":             "\ue769", // 
-	".png":            "\uf1c5", // 
-	".ppt":            "\uf1c4", // 
-	".pptx":           "\uf1c4", // 
-	".procfile":       "\ue21e", // 
-	".properties":     "\ue60b", // 
-	".ps1":            "\uf489", // 
-	".psd":            "\ue7b8", // 
-	".pxm":            "\uf1c5", // 
-	".py":             "\ue606", // 
-	".pyc":            "\ue606", // 
-	".r":              "\uf25d", // 
-	".rakefile":       "\ue21e", // 
-	".rar":            "\uf410", // 
-	".razor":          "\uf1fa", // 
-	".rb":             "\ue21e", // 
-	".rdata":          "\uf25d", // 
-	".rdb":            "\ue76d", // 
-	".rdoc":           "\uf48a", // 
-	".rds":            "\uf25d", // 
-	".readme":         "\uf48a", // 
-	".rlib":           "\ue7a8", // 
-	".rmd":            "\uf48a", // 
-	".rpm":            "\ue7bb", // 
-	".rs":             "\ue7a8", // 
-	".rspec":          "\ue21e", // 
-	".rspec_parallel": "\ue21e", // 
-	".rspec_status":   "\ue21e", // 
-	".rss":            "\uf09e", // 
-	".rtf":            "\uf718", // 
-	".ru":             "\ue21e", // 
-	".rubydoc":        "\ue73b", // 
-	".sass":           "\ue603", // 
-	".scala":          "\ue737", // 
-	".scss":           "\ue749", // 
-	".sh":             "\uf489", // 
-	".shell":          "\uf489", // 
-	".slim":           "\ue73b", // 
-	".sln":            "\ue70c", // 
-	".so":             "\uf17c", // 
-	".sql":            "\uf1c0", // 
-	".sqlite3":        "\ue7c4", // 
-	".sty":            "\uf034", // 
-	".styl":           "\ue600", // 
-	".stylus":         "\ue600", // 
-	".svg":            "\uf1c5", // 
-	".swift":          "\ue755", // 
-	".tar":            "\uf410", // 
-	".taz":            "\uf410", // 
-	".tbz":            "\uf410", // 
-	".tbz2":           "\uf410", // 
-	".tex":            "\uf034", // 
-	".tgz":            "\uf410", // 
-	".tiff":           "\uf1c5", // 
-	".tlz":            "\uf410", // 
-	".toml":           "\ue615", // 
-	".torrent":        "\ue275", // 
-	".ts":             "\ue628", // 
-	".tsv":            "\uf1c3", // 
-	".tsx":            "\ue7ba", // 
-	".ttf":            "\uf031", // 
-	".twig":           "\ue61c", // 
-	".txt":            "\uf15c", // 
-	".txz":            "\uf410", // 
-	".tz":             "\uf410", // 
-	".tzo":            "\uf410", // 
-	".video":          "\uf03d", // 
-	".vim":            "\ue62b", // 
-	".vue":            "\ufd42", // ﵂
-	".war":            "\ue256", // 
-	".wav":            "\uf001", // 
-	".webm":           "\uf03d", // 
-	".webp":           "\uf1c5", // 
-	".windows":        "\uf17a", // 
-	".woff":           "\uf031", // 
-	".woff2":          "\uf031", // 
-	".xhtml":          "\uf13b", // 
-	".xls":            "\uf1c3", // 
-	".xlsx":           "\uf1c3", // 
-	".xml":            "\uf121", // 
-	".xul":            "\uf121", // 
-	".xz":             "\uf410", // 
-	".yaml":           "\uf481", // 
-	".yml":            "\uf481", // 
-	".zip":            "\uf410", // 
-	".zsh":            "\uf489", // 
-	".zsh-theme":      "\uf489", // 
-	".zshrc":          "\uf489", // 
-	".zst":            "\uf410", // 
+	".ai":             "\ue7b4",     // 
+	".android":        "\ue70e",     // 
+	".apk":            "\ue70e",     // 
+	".apple":          "\uf179",     // 
+	".avi":            "\uf03d",     // 
+	".avif":           "\uf1c5",     // 
+	".avro":           "\ue60b",     // 
+	".awk":            "\uf489",     // 
+	".bash":           "\uf489",     // 
+	".bash_history":   "\uf489",     // 
+	".bash_profile":   "\uf489",     // 
+	".bashrc":         "\uf489",     // 
+	".bat":            "\uf17a",     // 
+	".bats":           "\uf489",     // 
+	".bmp":            "\uf1c5",     // 
+	".bz":             "\uf410",     // 
+	".bz2":            "\uf410",     // 
+	".c":              "\ue61e",     // 
+	".c++":            "\ue61d",     // 
+	".cab":            "\ue70f",     // 
+	".cc":             "\ue61d",     // 
+	".cfg":            "\ue615",     // 
+	".class":          "\ue256",     // 
+	".clj":            "\ue768",     // 
+	".cljs":           "\ue76a",     // 
+	".cls":            "\uf034",     // 
+	".cmd":            "\ue70f",     // 
+	".coffee":         "\uf0f4",     // 
+	".conf":           "\ue615",     // 
+	".cp":             "\ue61d",     // 
+	".cpio":           "\uf410",     // 
+	".cpp":            "\ue61d",     // 
+	".cs":             "\U000f031b", // 󰌛
+	".csh":            "\uf489",     // 
+	".cshtml":         "\uf1fa",     // 
+	".csproj":         "\U000f031b", // 󰌛
+	".css":            "\ue749",     // 
+	".csv":            "\uf1c3",     // 
+	".csx":            "\U000f031b", // 󰌛
+	".cxx":            "\ue61d",     // 
+	".d":              "\ue7af",     // 
+	".dart":           "\ue798",     // 
+	".db":             "\uf1c0",     // 
+	".deb":            "\ue77d",     // 
+	".diff":           "\uf440",     // 
+	".djvu":           "\uf02d",     // 
+	".dll":            "\ue70f",     // 
+	".doc":            "\uf1c2",     // 
+	".docx":           "\uf1c2",     // 
+	".ds_store":       "\uf179",     // 
+	".DS_store":       "\uf179",     // 
+	".dump":           "\uf1c0",     // 
+	".ebook":          "\ue28b",     // 
+	".ebuild":         "\uf30d",     // 
+	".editorconfig":   "\ue615",     // 
+	".ejs":            "\ue618",     // 
+	".elm":            "\ue62c",     // 
+	".env":            "\uf462",     // 
+	".eot":            "\uf031",     // 
+	".epub":           "\ue28a",     // 
+	".erb":            "\ue73b",     // 
+	".erl":            "\ue7b1",     // 
+	".ex":             "\ue62d",     // 
+	".exe":            "\uf17a",     // 
+	".exs":            "\ue62d",     // 
+	".fish":           "\uf489",     // 
+	".flac":           "\uf001",     // 
+	".flv":            "\uf03d",     // 
+	".font":           "\uf031",     // 
+	".fs":             "\ue7a7",     // 
+	".fsi":            "\ue7a7",     // 
+	".fsx":            "\ue7a7",     // 
+	".gdoc":           "\uf1c2",     // 
+	".gem":            "\ue21e",     // 
+	".gemfile":        "\ue21e",     // 
+	".gemspec":        "\ue21e",     // 
+	".gform":          "\uf298",     // 
+	".gif":            "\uf1c5",     // 
+	".git":            "\uf1d3",     // 
+	".gitattributes":  "\uf1d3",     // 
+	".gitignore":      "\uf1d3",     // 
+	".gitmodules":     "\uf1d3",     // 
+	".go":             "\ue626",     // 
+	".gradle":         "\ue256",     // 
+	".groovy":         "\ue775",     // 
+	".gsheet":         "\uf1c3",     // 
+	".gslides":        "\uf1c4",     // 
+	".guardfile":      "\ue21e",     // 
+	".gz":             "\uf410",     // 
+	".h":              "\uf0fd",     // 
+	".hbs":            "\ue60f",     // 
+	".hpp":            "\uf0fd",     // 
+	".hs":             "\ue777",     // 
+	".htm":            "\uf13b",     // 
+	".html":           "\uf13b",     // 
+	".hxx":            "\uf0fd",     // 
+	".ico":            "\uf1c5",     // 
+	".image":          "\uf1c5",     // 
+	".iml":            "\ue7b5",     // 
+	".ini":            "\uf17a",     // 
+	".ipynb":          "\ue606",     // 
+	".iso":            "\ue271",     // 
+	".j2c":            "\uf1c5",     // 
+	".j2k":            "\uf1c5",     // 
+	".jad":            "\ue256",     // 
+	".jar":            "\ue256",     // 
+	".java":           "\ue256",     // 
+	".jfi":            "\uf1c5",     // 
+	".jfif":           "\uf1c5",     // 
+	".jif":            "\uf1c5",     // 
+	".jl":             "\ue624",     // 
+	".jmd":            "\uf48a",     // 
+	".jp2":            "\uf1c5",     // 
+	".jpe":            "\uf1c5",     // 
+	".jpeg":           "\uf1c5",     // 
+	".jpg":            "\uf1c5",     // 
+	".jpx":            "\uf1c5",     // 
+	".js":             "\ue74e",     // 
+	".json":           "\ue60b",     // 
+	".jsx":            "\ue7ba",     // 
+	".jxl":            "\uf1c5",     // 
+	".ksh":            "\uf489",     // 
+	".kt":             "\ue634",     // 
+	".kts":            "\ue634",     // 
+	".latex":          "\uf034",     // 
+	".less":           "\ue758",     // 
+	".lhs":            "\ue777",     // 
+	".license":        "\U000f0219", // 󰈙
+	".localized":      "\uf179",     // 
+	".lock":           "\uf023",     // 
+	".log":            "\uf18d",     // 
+	".lua":            "\ue620",     // 
+	".lz":             "\uf410",     // 
+	".lz4":            "\uf410",     // 
+	".lzh":            "\uf410",     // 
+	".lzma":           "\uf410",     // 
+	".lzo":            "\uf410",     // 
+	".m":              "\ue61e",     // 
+	".mm":             "\ue61d",     // 
+	".m4a":            "\uf001",     // 
+	".markdown":       "\uf48a",     // 
+	".md":             "\uf48a",     // 
+	".mjs":            "\ue74e",     // 
+	".mk":             "\uf489",     // 
+	".mkd":            "\uf48a",     // 
+	".mkv":            "\uf03d",     // 
+	".mobi":           "\ue28b",     // 
+	".mov":            "\uf03d",     // 
+	".mp3":            "\uf001",     // 
+	".mp4":            "\uf03d",     // 
+	".msi":            "\ue70f",     // 
+	".mustache":       "\ue60f",     // 
+	".nix":            "\uf313",     // 
+	".node":           "\U000f0399", // 󰎙
+	".npmignore":      "\ue71e",     // 
+	".odp":            "\uf1c4",     // 
+	".ods":            "\uf1c3",     // 
+	".odt":            "\uf1c2",     // 
+	".ogg":            "\uf001",     // 
+	".ogv":            "\uf03d",     // 
+	".otf":            "\uf031",     // 
+	".part":           "\uf43a",     // 
+	".patch":          "\uf440",     // 
+	".pdf":            "\uf1c1",     // 
+	".php":            "\ue73d",     // 
+	".pl":             "\ue769",     // 
+	".png":            "\uf1c5",     // 
+	".ppt":            "\uf1c4",     // 
+	".pptx":           "\uf1c4",     // 
+	".procfile":       "\ue21e",     // 
+	".properties":     "\ue60b",     // 
+	".ps1":            "\uf489",     // 
+	".psd":            "\ue7b8",     // 
+	".pxm":            "\uf1c5",     // 
+	".py":             "\ue606",     // 
+	".pyc":            "\ue606",     // 
+	".r":              "\uf25d",     // 
+	".rakefile":       "\ue21e",     // 
+	".rar":            "\uf410",     // 
+	".razor":          "\uf1fa",     // 
+	".rb":             "\ue21e",     // 
+	".rdata":          "\uf25d",     // 
+	".rdb":            "\ue76d",     // 
+	".rdoc":           "\uf48a",     // 
+	".rds":            "\uf25d",     // 
+	".readme":         "\uf48a",     // 
+	".rlib":           "\ue7a8",     // 
+	".rmd":            "\uf48a",     // 
+	".rpm":            "\ue7bb",     // 
+	".rs":             "\ue7a8",     // 
+	".rspec":          "\ue21e",     // 
+	".rspec_parallel": "\ue21e",     // 
+	".rspec_status":   "\ue21e",     // 
+	".rss":            "\uf09e",     // 
+	".rtf":            "\U000f0219", // 󰈙
+	".ru":             "\ue21e",     // 
+	".rubydoc":        "\ue73b",     // 
+	".sass":           "\ue603",     // 
+	".scala":          "\ue737",     // 
+	".scss":           "\ue749",     // 
+	".sh":             "\uf489",     // 
+	".shell":          "\uf489",     // 
+	".slim":           "\ue73b",     // 
+	".sln":            "\ue70c",     // 
+	".so":             "\uf17c",     // 
+	".sql":            "\uf1c0",     // 
+	".sqlite3":        "\ue7c4",     // 
+	".sty":            "\uf034",     // 
+	".styl":           "\ue600",     // 
+	".stylus":         "\ue600",     // 
+	".svg":            "\uf1c5",     // 
+	".swift":          "\ue755",     // 
+	".tar":            "\uf410",     // 
+	".taz":            "\uf410",     // 
+	".tbz":            "\uf410",     // 
+	".tbz2":           "\uf410",     // 
+	".tex":            "\uf034",     // 
+	".tgz":            "\uf410",     // 
+	".tiff":           "\uf1c5",     // 
+	".tlz":            "\uf410",     // 
+	".toml":           "\ue615",     // 
+	".torrent":        "\ue275",     // 
+	".ts":             "\ue628",     // 
+	".tsv":            "\uf1c3",     // 
+	".tsx":            "\ue7ba",     // 
+	".ttf":            "\uf031",     // 
+	".twig":           "\ue61c",     // 
+	".txt":            "\uf15c",     // 
+	".txz":            "\uf410",     // 
+	".tz":             "\uf410",     // 
+	".tzo":            "\uf410",     // 
+	".video":          "\uf03d",     // 
+	".vim":            "\ue62b",     // 
+	".vue":            "\U000f0844", // 󰡄
+	".war":            "\ue256",     // 
+	".wav":            "\uf001",     // 
+	".webm":           "\uf03d",     // 
+	".webp":           "\uf1c5",     // 
+	".windows":        "\uf17a",     // 
+	".woff":           "\uf031",     // 
+	".woff2":          "\uf031",     // 
+	".xhtml":          "\uf13b",     // 
+	".xls":            "\uf1c3",     // 
+	".xlsx":           "\uf1c3",     // 
+	".xml":            "\uf121",     // 
+	".xul":            "\uf121",     // 
+	".xz":             "\uf410",     // 
+	".yaml":           "\uf481",     // 
+	".yml":            "\uf481",     // 
+	".zip":            "\uf410",     // 
+	".zsh":            "\uf489",     // 
+	".zsh-theme":      "\uf489",     // 
+	".zshrc":          "\uf489",     // 
+	".zst":            "\uf410",     // 
+}
+
+func patchFileIconsForNerdFontsV2() {
+	extIconMap[".cs"] = "\uf81a"      // 
+	extIconMap[".csproj"] = "\uf81a"  // 
+	extIconMap[".csx"] = "\uf81a"     // 
+	extIconMap[".license"] = "\uf718" // 
+	extIconMap[".node"] = "\uf898"    // 
+	extIconMap[".rtf"] = "\uf718"     // 
+	extIconMap[".vue"] = "\ufd42"     // ﵂
 }
 
 func IconForFile(name string, isSubmodule bool, isDirectory bool) string {
diff --git a/pkg/gui/presentation/icons/git_icons.go b/pkg/gui/presentation/icons/git_icons.go
index 342e015fe..6fd8bfb57 100644
--- a/pkg/gui/presentation/icons/git_icons.go
+++ b/pkg/gui/presentation/icons/git_icons.go
@@ -6,21 +6,30 @@ import (
 	"github.com/jesseduffield/lazygit/pkg/commands/models"
 )
 
-const (
-	BRANCH_ICON         = "\ufb2b" // שׂ
-	DETACHED_HEAD_ICON  = "\ue729" // 
-	TAG_ICON            = "\uf02b" // 
-	COMMIT_ICON         = "\ufc16" // ﰖ
-	MERGE_COMMIT_ICON   = "\ufb2c" // שּׁ
-	DEFAULT_REMOTE_ICON = "\uf7a1" // 
-	STASH_ICON          = "\uf01c" // 
+var (
+	BRANCH_ICON         = "\U000f062c" // 󰘬
+	DETACHED_HEAD_ICON  = "\ue729"     // 
+	TAG_ICON            = "\uf02b"     // 
+	COMMIT_ICON         = "\U000f0718" // 󰜘
+	MERGE_COMMIT_ICON   = "\U000f062d" // 󰘭
+	DEFAULT_REMOTE_ICON = "\uf02a2"    // 󰊢
+	STASH_ICON          = "\uf01c"     // 
 )
 
 var remoteIcons = map[string]string{
-	"github.com":    "\ue709", // 
-	"bitbucket.org": "\ue703", // 
-	"gitlab.com":    "\uf296", // 
-	"dev.azure.com": "\ufd03", // ﴃ
+	"github.com":    "\ue709",     // 
+	"bitbucket.org": "\ue703",     // 
+	"gitlab.com":    "\uf296",     // 
+	"dev.azure.com": "\U000f0805", // 󰠅
+}
+
+func patchGitIconsForNerdFontsV2() {
+	BRANCH_ICON = "\ufb2b"         // שׂ
+	COMMIT_ICON = "\ufc16"         // ﰖ
+	MERGE_COMMIT_ICON = "\ufb2c"   // שּׁ
+	DEFAULT_REMOTE_ICON = "\uf7a1" // 
+
+	remoteIcons["dev.azure.com"] = "\ufd03" // ﴃ
 }
 
 func IconForBranch(branch *models.Branch) string {
diff --git a/pkg/gui/presentation/icons/icons.go b/pkg/gui/presentation/icons/icons.go
index 81b16108b..fbfc9bb07 100644
--- a/pkg/gui/presentation/icons/icons.go
+++ b/pkg/gui/presentation/icons/icons.go
@@ -1,11 +1,26 @@
 package icons
 
+import (
+	"log"
+
+	"github.com/samber/lo"
+)
+
 var isIconEnabled = false
 
 func IsIconEnabled() bool {
 	return isIconEnabled
 }
 
-func SetIconEnabled(showIcons bool) {
-	isIconEnabled = showIcons
+func SetNerdFontsVersion(version string) {
+	if !lo.Contains([]string{"2", "3"}, version) {
+		log.Fatalf("Unsupported nerdFontVersion %s", version)
+	}
+
+	if version == "2" {
+		patchGitIconsForNerdFontsV2()
+		patchFileIconsForNerdFontsV2()
+	}
+
+	isIconEnabled = true
 }