From 21c0906d38113c719aa9c5250d08938054ab7510 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 28 Jan 2023 16:59:10 +0100
Subject: [PATCH 01/12] remove experimental flag from picom

---
 .config/x11/xprofile | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.config/x11/xprofile b/.config/x11/xprofile
index 29842080..ef02a737 100755
--- a/.config/x11/xprofile
+++ b/.config/x11/xprofile
@@ -6,11 +6,10 @@ setbg &
 xrdb "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources" & xrdbpid=$!
 remaps &
 
-autostart="checkup mpd dunst unclutter pipewire dwmblocks"
+autostart="picom checkup mpd dunst unclutter pipewire dwmblocks"
 for program in $autostart; do
 	pidof -s "$program" || "$program" &
 done >/dev/null 2>&1
-pidof -s "picom" || picom --experimental-backends &
 
 if ! pgrep -x -u "${USER}" gpg-agent 1> /dev/null 2>&1; then
      gpg-connect-agent /bye 1> /dev/null 2>&1

From d4cd8c5a74d3e92fa5d474163db5d21cadf3f50d Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 28 Jan 2023 19:06:51 +0100
Subject: [PATCH 02/12] retabbing, conjure, minor refactors

---
 .config/nvim/init.lua                         |  19 +-
 .config/nvim/lua/config/autocmdlist.lua       | 120 -----
 .config/nvim/lua/config/autocmds.lua          | 124 +++++
 .config/nvim/lua/config/filetypelist.lua      |  28 --
 .config/nvim/lua/config/filetypes.lua         |  33 ++
 .config/nvim/lua/config/iconlist.lua          | 157 ------
 .config/nvim/lua/config/icons.lua             | 173 +++++++
 .config/nvim/lua/config/keymaplist.lua        | 428 ++++++++--------
 .config/nvim/lua/config/options.lua           |   4 +-
 .config/nvim/lua/funcs.lua                    | 314 ++++++------
 .config/nvim/lua/plugins/config/alpha.lua     |  64 +--
 .config/nvim/lua/plugins/config/autopairs.lua |  42 +-
 .../nvim/lua/plugins/config/bufferline.lua    | 242 ++++-----
 .config/nvim/lua/plugins/config/cmp.lua       | 152 +++---
 .config/nvim/lua/plugins/config/comment.lua   |  10 +-
 .config/nvim/lua/plugins/config/dap.lua       |  12 +-
 .config/nvim/lua/plugins/config/dapui.lua     |  40 +-
 .config/nvim/lua/plugins/config/gitsigns.lua  |  60 +--
 .../nvim/lua/plugins/config/illuminate.lua    |  56 +--
 .config/nvim/lua/plugins/config/impatient.lua |   2 +-
 .../lua/plugins/config/indent-blankline.lua   |  28 +-
 .config/nvim/lua/plugins/config/lf.lua        |  12 +-
 .config/nvim/lua/plugins/config/lspconfig.lua | 130 ++---
 .config/nvim/lua/plugins/config/lualine.lua   | 280 +++++------
 .config/nvim/lua/plugins/config/luasnip.lua   |  20 +-
 .config/nvim/lua/plugins/config/mason.lua     |  22 +-
 .config/nvim/lua/plugins/config/null-ls.lua   |  14 +-
 .../lua/plugins/config/nvim-colorizer.lua     |  16 +-
 .config/nvim/lua/plugins/config/project.lua   |  12 +-
 .config/nvim/lua/plugins/config/telescope.lua | 110 ++--
 .../nvim/lua/plugins/config/todo-comments.lua |  10 +-
 .../nvim/lua/plugins/config/toggleterm.lua    |  40 +-
 .../nvim/lua/plugins/config/tokyonight.lua    |  10 +-
 .../nvim/lua/plugins/config/treesitter.lua    |  20 +-
 .config/nvim/lua/plugins/config/whichkey.lua  |  90 ++--
 .config/nvim/lua/plugins/init.lua             | 472 +++++++++---------
 .config/nvim/lua/plugins/test.fnl             |   0
 37 files changed, 1693 insertions(+), 1673 deletions(-)
 delete mode 100644 .config/nvim/lua/config/autocmdlist.lua
 create mode 100644 .config/nvim/lua/config/autocmds.lua
 delete mode 100644 .config/nvim/lua/config/filetypelist.lua
 create mode 100644 .config/nvim/lua/config/filetypes.lua
 delete mode 100644 .config/nvim/lua/config/iconlist.lua
 create mode 100644 .config/nvim/lua/config/icons.lua
 create mode 100644 .config/nvim/lua/plugins/test.fnl

diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
index e97ef9a1..2b3ca725 100644
--- a/.config/nvim/init.lua
+++ b/.config/nvim/init.lua
@@ -1,22 +1,11 @@
 vim.defer_fn(function()
-  pcall(require, "impatient")
+    pcall(require, "impatient")
 end, 0)
 
 require('config.options')
 require('funcs').bootstrap()
 require('plugins')
-require('config.autocmdlist')
-require('config.filetypelist')
+require('config.autocmds').setup()
+require('config.filetypes').setup()
+require('config.icons').setup()
 require('funcs').map('general')
-
-local icons = require('config.iconlist').diagnostics
-local signs = {
-  DiagnosticSignError = icons.BoldError,
-  DiagnosticSignWarn = icons.BoldWarning,
-  DiagnosticSignHint = icons.BoldHint,
-  DiagnosticSignInfo = icons.BoldInformation
-}
-for type, icon in pairs(signs) do
-  local hl = type
-  vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
-end
diff --git a/.config/nvim/lua/config/autocmdlist.lua b/.config/nvim/lua/config/autocmdlist.lua
deleted file mode 100644
index ccf99bd3..00000000
--- a/.config/nvim/lua/config/autocmdlist.lua
+++ /dev/null
@@ -1,120 +0,0 @@
-local cmds = {
-  { -- Handles the automatic line numeration changes
-    { "BufEnter", "FocusGained", "InsertLeave", "WinEnter" },
-    {
-      pattern = "*",
-      command = "if &nu && mode() != \"i\" | set rnu | endif"
-    }
-  },
-  { -- Handles the automatic line numeration changes
-    { "BufLeave", "FocusLost", "InsertEnter", "WinLeave" },
-    {
-      pattern = "*",
-      command = "if &nu | set nornu | endif"
-    }
-  },
-  {
-    "BufWritePost",
-    {
-      pattern = { "bm-files", "bm-dirs" },
-      command = "!shortcuts"
-    }
-  },
-  {
-    { "BufRead", "BufNewFile" },
-    {
-      pattern = { "Xresources", "Xdefaults", "xresources", "xdefaults" },
-      command = "set filetype=xdefaults"
-    }
-  },
-  {
-    "BufWritePost",
-    {
-      pattern = { "Xresources", "Xdefaults", "xresources", "xdefaults" },
-      command = "!xrdb %"
-    }
-  },
-  {
-    "BufWritePost",
-    {
-      pattern = "~/.local/src/dwmblocks/config.h",
-      command = "!cd ~/.local/src/dwmblocks/; sudo make install && { killall -q dwmblocks;setsid -f dwmblocks }"
-    }
-  },
-  {
-    "BufWritePost",
-    {
-      pattern = "*.java",
-      callback = function()
-        vim.lsp.codelens.refresh()
-      end
-    }
-  },
-  {
-    { "BufDelete", "VimLeave" },
-    {
-      pattern = "*.tex",
-      command = "!texclear \"%:p\""
-    }
-  },
-  { -- Use 'q' to quit from common plugins
-    'FileType',
-    {
-      pattern = { "qf", "help", "man", "lspinfo", "spectre_panel", "lir" },
-      callback = function()
-        vim.cmd [[
-          nnoremap <silent> <buffer> q :close<CR> 
-          set nobuflisted 
-        ]]
-      end
-    }
-  },
-  {
-    'Filetype',
-    {
-      pattern = { "gitcommit", "markdown" },
-      callback = function()
-        vim.opt_local.wrap = true
-        vim.opt_local.spell = true
-      end,
-    }
-  },
-  { -- Automatically apply changes to plugins.lua
-    'BufWritePost',
-    {
-      group = 'packer_user_config',
-      pattern = { "plugins.lua", "pluginlist.lua" },
-      command = "source <afile> | PackerCompile"
-    }
-  },
-  { -- Fix auto comment
-    'BufWinEnter',
-    {
-      callback = function()
-        vim.cmd("set formatoptions-=cro")
-      end
-    }
-  },
-  { -- Highlight yanked text
-    'TextYankPost',
-    {
-      callback = function()
-        vim.highlight.on_yank({ higroup = "Visual", timeout = 200 })
-      end
-    }
-  }
-}
-
-vim.api.nvim_create_augroup('packer_user_config', { clear = true })
-
-for _, entry in ipairs(cmds) do
-  local event = entry[1]
-  local opts = entry[2]
-  if type(opts.group) == "string" and opts.group ~= "" then
-    local exists, _ = pcall(vim.api.nvim_get_autocmds, { group = opts.group })
-    if not exists then
-      vim.api.nvim_create_augroup(opts.group, {})
-    end
-  end
-  vim.api.nvim_create_autocmd(event, opts)
-end
diff --git a/.config/nvim/lua/config/autocmds.lua b/.config/nvim/lua/config/autocmds.lua
new file mode 100644
index 00000000..3a0b3b64
--- /dev/null
+++ b/.config/nvim/lua/config/autocmds.lua
@@ -0,0 +1,124 @@
+local M = {}
+M.list = {
+    { -- Handles the automatic line numeration changes
+        { "BufEnter", "FocusGained", "InsertLeave", "WinEnter" },
+        {
+            pattern = "*",
+            command = "if &nu && mode() != \"i\" | set rnu | endif"
+        }
+    },
+    { -- Handles the automatic line numeration changes
+        { "BufLeave", "FocusLost", "InsertEnter", "WinLeave" },
+        {
+            pattern = "*",
+            command = "if &nu | set nornu | endif"
+        }
+    },
+    {
+        "BufWritePost",
+        {
+            pattern = { "bm-files", "bm-dirs" },
+            command = "!shortcuts"
+        }
+    },
+    {
+        { "BufRead", "BufNewFile" },
+        {
+            pattern = { "Xresources", "Xdefaults", "xresources", "xdefaults" },
+            command = "set filetype=xdefaults"
+        }
+    },
+    {
+        "BufWritePost",
+        {
+            pattern = { "Xresources", "Xdefaults", "xresources", "xdefaults" },
+            command = "!xrdb %"
+        }
+    },
+    {
+        "BufWritePost",
+        {
+            pattern = "~/.local/src/dwmblocks/config.h",
+            command = "!cd ~/.local/src/dwmblocks/; sudo make install && { killall -q dwmblocks;setsid -f dwmblocks }"
+        }
+    },
+    {
+        "BufWritePost",
+        {
+            pattern = "*.java",
+            callback = function()
+                vim.lsp.codelens.refresh()
+            end
+        }
+    },
+    {
+        { "BufDelete", "VimLeave" },
+        {
+            pattern = "*.tex",
+            command = "!texclear \"%:p\""
+        }
+    },
+    { -- Use 'q' to quit from common plugins
+        'FileType',
+        {
+            pattern = { "qf", "help", "man", "lspinfo", "spectre_panel", "lir" },
+            callback = function()
+                vim.cmd [[
+          nnoremap <silent> <buffer> q :close<CR> 
+          set nobuflisted 
+        ]]
+            end
+        }
+    },
+    {
+        'Filetype',
+        {
+            pattern = { "gitcommit", "markdown" },
+            callback = function()
+                vim.opt_local.wrap = true
+                vim.opt_local.spell = true
+            end,
+        }
+    },
+    { -- Automatically apply changes to plugins.lua
+        'BufWritePost',
+        {
+            group = 'packer_user_config',
+            pattern = { "plugins.lua", "pluginlist.lua" },
+            command = "source <afile> | PackerCompile"
+        }
+    },
+    { -- Fix auto comment
+        'BufWinEnter',
+        {
+            callback = function()
+                vim.cmd("set formatoptions-=cro")
+            end
+        }
+    },
+    { -- Highlight yanked text
+        'TextYankPost',
+        {
+            callback = function()
+                vim.highlight.on_yank({ higroup = "Visual", timeout = 200 })
+            end
+        }
+    }
+}
+
+M.setup = function()
+    vim.api.nvim_create_augroup('packer_user_config', { clear = true })
+    for _, entry in ipairs(M.list) do
+        local event = entry[1]
+        local opts = entry[2]
+        if type(opts.group) == "string" and opts.group ~= "" then
+            local exists, _ = pcall(vim.api.nvim_get_autocmds, { group = opts.group })
+            if not exists then
+                vim.api.nvim_create_augroup(opts.group, {})
+            end
+        end
+        vim.api.nvim_create_autocmd(event, opts)
+    end
+end
+
+return M
diff --git a/.config/nvim/lua/config/filetypelist.lua b/.config/nvim/lua/config/filetypelist.lua
deleted file mode 100644
index 906bc93b..00000000
--- a/.config/nvim/lua/config/filetypelist.lua
+++ /dev/null
@@ -1,28 +0,0 @@
-local filetypes = {
-  {
-    extension = {
-      yml = function(path, bufnr)
-        if vim.fs.find({ 'tasks', 'roles', 'handlers', 'group_vars', 'host_vars' },
-          { type = 'directory', upward = true }) and
-            vim.fs.find({ 'ansible.cfg', '.ansible-lint' }, { upward = true }) then
-          return 'yaml.ansible'
-        else
-          return 'yaml'
-        end
-      end,
-      yaml = function(path, bufnr)
-        if vim.fs.find({ 'tasks', 'roles', 'handlers', 'group_vars', 'host_vars' },
-          { type = 'directory', upward = true }) and
-            vim.fs.find({ 'ansible.cfg', '.ansible-lint' }, { upward = true }) then
-          return 'yaml.ansible'
-        else
-          return 'yaml'
-        end
-      end
-    }
-  }
-}
-
-for _, entry in pairs(filetypes) do
-  vim.filetype.add(entry)
-end
diff --git a/.config/nvim/lua/config/filetypes.lua b/.config/nvim/lua/config/filetypes.lua
new file mode 100644
index 00000000..dce5453f
--- /dev/null
+++ b/.config/nvim/lua/config/filetypes.lua
@@ -0,0 +1,33 @@
+local M = {}
+M.list = {
+    {
+        extension = {
+            yml = function(path, bufnr)
+                if vim.fs.find({ 'tasks', 'roles', 'handlers', 'group_vars', 'host_vars' },
+                    { type = 'directory', upward = true }) and
+                    vim.fs.find({ 'ansible.cfg', '.ansible-lint' }, { upward = true }) then
+                    return 'yaml.ansible'
+                else
+                    return 'yaml'
+                end
+            end,
+            yaml = function(path, bufnr)
+                if vim.fs.find({ 'tasks', 'roles', 'handlers', 'group_vars', 'host_vars' },
+                    { type = 'directory', upward = true }) and
+                    vim.fs.find({ 'ansible.cfg', '.ansible-lint' }, { upward = true }) then
+                    return 'yaml.ansible'
+                else
+                    return 'yaml'
+                end
+            end
+        }
+    }
+}
+
+M.setup = function()
+    for _, entry in pairs(M.list) do
+        vim.filetype.add(entry)
+    end
+end
+
+return M
diff --git a/.config/nvim/lua/config/iconlist.lua b/.config/nvim/lua/config/iconlist.lua
deleted file mode 100644
index 03298a23..00000000
--- a/.config/nvim/lua/config/iconlist.lua
+++ /dev/null
@@ -1,157 +0,0 @@
-return {
-  kind = {
-    Array = "",
-    Boolean = "蘒",
-    Class = "",
-    Color = "",
-    Constant = "",
-    Constructor = "",
-    Enum = "",
-    EnumMember = "",
-    Event = "",
-    Field = "",
-    File = "",
-    Folder = "",
-    Function = "",
-    Interface = "",
-    Key = "",
-    Keyword = "",
-    Method = "",
-    Module = "",
-    Namespace = "",
-    Null = "ﳠ",
-    Number = "",
-    Object = "",
-    Operator = "",
-    Package = "",
-    Property = "",
-    Reference = "",
-    Snippet = "",
-    String = "",
-    Struct = "",
-    Text = "",
-    TypeParameter = "",
-    Unit = "",
-    Value = "",
-    Variable = "",
-  },
-  git = {
-    LineAdded = "",
-    LineModified = "",
-    LineRemoved = "",
-    FileDeleted = "",
-    FileIgnored = "",
-    FileRenamed = "",
-    FileStaged = "S",
-    FileUnmerged = "",
-    FileUnstaged = "",
-    FileUntracked = "U",
-    Diff = "",
-    Repo = "",
-    Octoface = "",
-    Branch = "",
-  },
-  ui = {
-    ArrowCircleDown = "",
-    ArrowCircleLeft = "",
-    ArrowCircleRight = "",
-    ArrowCircleUp = "",
-    BoldArrowDown = "",
-    BoldArrowLeft = "",
-    BoldArrowRight = "",
-    BoldArrowUp = "",
-    BoldClose = "",
-    BoldDividerLeft = "",
-    BoldDividerRight = "",
-    BoldLineLeft = "▎",
-    BookMark = "",
-    BoxChecked = "",
-    Bug = "",
-    Stacks = " ",
-    Scopes = "",
-    Watches = "",
-    DebugConsole = " ",
-    Calendar = "",
-    Check = "",
-    ChevronRight = ">",
-    ChevronShortDown = "",
-    ChevronShortLeft = "",
-    ChevronShortRight = "",
-    ChevronShortUp = "",
-    Circle = "",
-    Close = "",
-    CloudDownload = "",
-    Code = "",
-    Comment = "",
-    Dashboard = "",
-    DividerLeft = "",
-    DividerRight = "",
-    DoubleChevronRight = "",
-    DoubleChevronLeft = "",
-    Ellipsis = "…",
-    EmptyFolder = "",
-    EmptyFolderOpen = "",
-    File = "",
-    FileSymlink = "",
-    Files = "",
-    FindFile = "",
-    FindText = "",
-    Fire = "",
-    Folder = "",
-    FolderOpen = "",
-    FolderSymlink = "",
-    Forward = "",
-    Gear = "",
-    History = "",
-    Lightbulb = "",
-    LineLeft = "▏",
-    LineMiddle = "│",
-    List = "",
-    Lock = "",
-    MinusCircle = "",
-    NewFile = "",
-    Note = "",
-    Package = "",
-    Pencil = "",
-    Plus = "",
-    Project = "",
-    Search = "",
-    SignIn = "",
-    SignOut = "",
-    Tab = "",
-    Table = "",
-    Target = "",
-    Telescope = "",
-    Text = "",
-    Tree = "",
-    Triangle = "契",
-    TriangleShortArrowDown = "",
-    TriangleShortArrowLeft = "",
-    TriangleShortArrowRight = "",
-    TriangleShortArrowUp = "",
-  },
-  diagnostics = {
-    BoldError = "",
-    Error = "",
-    BoldWarning = "",
-    Warning = "",
-    BoldInformation = "",
-    Information = "",
-    BoldQuestion = "",
-    Question = "",
-    BoldHint = "",
-    Hint = "",
-    Debug = "",
-    Trace = "✎",
-  },
-  progress = { "", "", "", "", "", "", "", "", "", "", "", "", "" },
-  misc = {
-    Robot = "ﮧ",
-    Squirrel = "",
-    Tag = "",
-    Watch = "",
-    Smiley = "ﲃ",
-    Package = "",
-    CircuitBoard = "",
-  },
-}
diff --git a/.config/nvim/lua/config/icons.lua b/.config/nvim/lua/config/icons.lua
new file mode 100644
index 00000000..1da91042
--- /dev/null
+++ b/.config/nvim/lua/config/icons.lua
@@ -0,0 +1,173 @@
+local M = {}
+M.list =  {
+    kind = {
+        Array = "",
+        Boolean = "蘒",
+        Class = "",
+        Color = "",
+        Constant = "",
+        Constructor = "",
+        Enum = "",
+        EnumMember = "",
+        Event = "",
+        Field = "",
+        File = "",
+        Folder = "",
+        Function = "",
+        Interface = "",
+        Key = "",
+        Keyword = "",
+        Method = "",
+        Module = "",
+        Namespace = "",
+        Null = "ﳠ",
+        Number = "",
+        Object = "",
+        Operator = "",
+        Package = "",
+        Property = "",
+        Reference = "",
+        Snippet = "",
+        String = "",
+        Struct = "",
+        Text = "",
+        TypeParameter = "",
+        Unit = "",
+        Value = "",
+        Variable = "",
+    },
+    git = {
+        LineAdded = "",
+        LineModified = "",
+        LineRemoved = "",
+        FileDeleted = "",
+        FileIgnored = "",
+        FileRenamed = "",
+        FileStaged = "S",
+        FileUnmerged = "",
+        FileUnstaged = "",
+        FileUntracked = "U",
+        Diff = "",
+        Repo = "",
+        Octoface = "",
+        Branch = "",
+    },
+    ui = {
+        ArrowCircleDown = "",
+        ArrowCircleLeft = "",
+        ArrowCircleRight = "",
+        ArrowCircleUp = "",
+        BoldArrowDown = "",
+        BoldArrowLeft = "",
+        BoldArrowRight = "",
+        BoldArrowUp = "",
+        BoldClose = "",
+        BoldDividerLeft = "",
+        BoldDividerRight = "",
+        BoldLineLeft = "▎",
+        BookMark = "",
+        BoxChecked = "",
+        Bug = "",
+        Stacks = " ",
+        Scopes = "",
+        Watches = "",
+        DebugConsole = " ",
+        Calendar = "",
+        Check = "",
+        ChevronRight = ">",
+        ChevronShortDown = "",
+        ChevronShortLeft = "",
+        ChevronShortRight = "",
+        ChevronShortUp = "",
+        Circle = "",
+        Close = "",
+        CloudDownload = "",
+        Code = "",
+        Comment = "",
+        Dashboard = "",
+        DividerLeft = "",
+        DividerRight = "",
+        DoubleChevronRight = "",
+        DoubleChevronLeft = "",
+        Ellipsis = "…",
+        EmptyFolder = "",
+        EmptyFolderOpen = "",
+        File = "",
+        FileSymlink = "",
+        Files = "",
+        FindFile = "",
+        FindText = "",
+        Fire = "",
+        Folder = "",
+        FolderOpen = "",
+        FolderSymlink = "",
+        Forward = "",
+        Gear = "",
+        History = "",
+        Lightbulb = "",
+        LineLeft = "▏",
+        LineMiddle = "│",
+        List = "",
+        Lock = "",
+        MinusCircle = "",
+        NewFile = "",
+        Note = "",
+        Package = "",
+        Pencil = "",
+        Plus = "",
+        Project = "",
+        Search = "",
+        SignIn = "",
+        SignOut = "",
+        Tab = "",
+        Table = "",
+        Target = "",
+        Telescope = "",
+        Text = "",
+        Tree = "",
+        Triangle = "契",
+        TriangleShortArrowDown = "",
+        TriangleShortArrowLeft = "",
+        TriangleShortArrowRight = "",
+        TriangleShortArrowUp = "",
+    },
+    diagnostics = {
+        BoldError = "",
+        Error = "",
+        BoldWarning = "",
+        Warning = "",
+        BoldInformation = "",
+        Information = "",
+        BoldQuestion = "",
+        Question = "",
+        BoldHint = "",
+        Hint = "",
+        Debug = "",
+        Trace = "✎",
+    },
+    progress = { "", "", "", "", "", "", "", "", "", "", "", "", "" },
+    misc = {
+        Robot = "ﮧ",
+        Squirrel = "",
+        Tag = "",
+        Watch = "",
+        Smiley = "ﲃ",
+        Package = "",
+        CircuitBoard = "",
+    },
+}
+M.setup = function()
+    local icons = M.list.diagnostics
+    local signs = {
+      DiagnosticSignError = icons.BoldError,
+      DiagnosticSignWarn = icons.BoldWarning,
+      DiagnosticSignHint = icons.BoldHint,
+      DiagnosticSignInfo = icons.BoldInformation
+    }
+    for type, icon in pairs(signs) do
+      local hl = type
+      vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
+    end
+end
+
+return M
diff --git a/.config/nvim/lua/config/keymaplist.lua b/.config/nvim/lua/config/keymaplist.lua
index 4a83e8f4..f597ef0a 100644
--- a/.config/nvim/lua/config/keymaplist.lua
+++ b/.config/nvim/lua/config/keymaplist.lua
@@ -1,228 +1,228 @@
 local M = {}
 M.maps = {
-  general = {
-    n = { -- normal mode
-      -- Better window navigation
-      { "<C-h>", "<C-w>h" },
-      { "<C-j>", "<C-w>j" },
-      { "<C-k>", "<C-w>k" },
-      { "<C-l>", "<C-w>l" },
-      -- Resize with arrows
-      { "<C-Up>", ":resize -2<CR>" },
-      { "<C-Down>", ":resize +2<CR>" },
-      { "<C-Left>", ":vertical resize -2<CR>" },
-      { "<C-Right>", ":vertical resize +2<CR>" },
-      -- Navigate buffers
-      { "<TAB>", ":bnext<CR>" },
-      { "<S-TAB>", ":bprevious<CR>" },
-      -- lsp
-      { "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>" },
-      { "gd", "<cmd>lua vim.lsp.buf.definition()<CR>" },
-      { "K", "<cmd>lua vim.lsp.buf.hover()<CR>" },
-      { "gI", "<cmd>lua vim.lsp.buf.implementation()<CR>" },
-      { "gr", "<cmd>lua vim.lsp.buf.references()<CR>" },
-      { "gl", "<cmd>lua vim.diagnostic.open_float()<CR>" },
+    general = {
+        n = { -- normal mode
+            -- Better window navigation
+            { "<C-h>", "<C-w>h" },
+            { "<C-j>", "<C-w>j" },
+            { "<C-k>", "<C-w>k" },
+            { "<C-l>", "<C-w>l" },
+            -- Resize with arrows
+            { "<C-Up>", ":resize -2<CR>" },
+            { "<C-Down>", ":resize +2<CR>" },
+            { "<C-Left>", ":vertical resize -2<CR>" },
+            { "<C-Right>", ":vertical resize +2<CR>" },
+            -- Navigate buffers
+            { "<TAB>", ":bnext<CR>" },
+            { "<S-TAB>", ":bprevious<CR>" },
+            -- lsp
+            { "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>" },
+            { "gd", "<cmd>lua vim.lsp.buf.definition()<CR>" },
+            { "K", "<cmd>lua vim.lsp.buf.hover()<CR>" },
+            { "gI", "<cmd>lua vim.lsp.buf.implementation()<CR>" },
+            { "gr", "<cmd>lua vim.lsp.buf.references()<CR>" },
+            { "gl", "<cmd>lua vim.diagnostic.open_float()<CR>" },
+        },
+        i = { -- insert mode
+            -- Delete last word with ctrl + del
+            { "<C-BS>", "<C-W>" },
+        },
+        v = { -- visual mode
+            -- Better paste
+            { "p", '"_dP' },
+            -- Stay in indent mode
+            { "<", "<gv" },
+            { ">", ">gv" },
+        }
     },
-    i = { -- insert mode
-      -- Delete last word with ctrl + del
-      { "<C-BS>", "<C-W>" },
+    illuminate = {
+        n = {
+            { "<a-n>", "<cmd>lua require('illuminate').next_reference{wrap=true}<CR>" },
+            { "<a-p>", "<cmd>lua require('illuminate').next_reference{reverse=true,wrap=true}<CR>" },
+        }
     },
-    v = { -- visual mode
-      -- Better paste
-      { "p", '"_dP' },
-      -- Stay in indent mode
-      { "<", "<gv" },
-      { ">", ">gv" },
-    }
-  },
-  illuminate = {
-    n = {
-      { "<a-n>", "<cmd>lua require('illuminate').next_reference{wrap=true}<CR>" },
-      { "<a-p>", "<cmd>lua require('illuminate').next_reference{reverse=true,wrap=true}<CR>" },
-    }
-  },
 }
 
 M.whichkey = {
-  general = {
-    n = {
-      ["w"] = { "<cmd>w!<CR>", "Save" },
-      ["q"] = { function() require("funcs").buf_kill() end, "Close" },
-      ["f"] = { function() require("lf").start("~") end, "File Picker" },
-      ["h"] = { "<cmd>nohlsearch<CR>", "Clear Highlights" },
-      u = {
-        name = "Utility",
-        c = { "<cmd>w!<CR><cmd>!compiler \"%:p\"<CR>", "Compile" },
-      },
-      l = {
-        name = "LSP",
-        a = { function() vim.lsp.buf.code_action() end, "Code Action" },
-        f = { function() require("funcs").format { async = true } end, "Format" },
-        j = { function() vim.diagnostic.goto_next() end, "Next Diagnostic" },
-        k = { function() vim.diagnostic.goto_prev() end, "Prev Diagnostic" },
-        l = { function() vim.lsp.codelens.run() end, "CodeLens Action" },
-        q = { function() vim.diagnostic.setloclist() end, "Quickfix" },
-        r = { function() vim.lsp.buf.rename() end, "Rename" },
-      }
+    general = {
+        n = {
+            ["w"] = { "<cmd>w!<CR>", "Save" },
+            ["q"] = { function() require("funcs").buf_kill() end, "Close" },
+            ["f"] = { function() require("lf").start("~") end, "File Picker" },
+            ["h"] = { "<cmd>nohlsearch<CR>", "Clear Highlights" },
+            u = {
+                name = "Utility",
+                c = { "<cmd>w!<CR><cmd>!compiler \"%:p\"<CR>", "Compile" },
+            },
+            l = {
+                name = "LSP",
+                a = { function() vim.lsp.buf.code_action() end, "Code Action" },
+                f = { function() require("funcs").format { async = true } end, "Format" },
+                j = { function() vim.diagnostic.goto_next() end, "Next Diagnostic" },
+                k = { function() vim.diagnostic.goto_prev() end, "Prev Diagnostic" },
+                l = { function() vim.lsp.codelens.run() end, "CodeLens Action" },
+                q = { function() vim.diagnostic.setloclist() end, "Quickfix" },
+                r = { function() vim.lsp.buf.rename() end, "Rename" },
+            }
 
-    }
-  },
-  lspconfig = {
-    n = {
-      l = {
-        name = "LSP",
-        i = { "<cmd>LspInfo<cr>", "Info" },
-      }
-    }
-  },
-  mason = {
-    n = {
-      l = {
-        name = "LSP",
-        I = { "<cmd>Mason<cr>", "Mason Info" },
-      }
-    }
-  },
-  dap = {
-    n = {
-      d = {
-        name = "DAP",
-        b = { function() require("dap").toggle_breakpoint() end, "Toggle Breakpoint" },
-        c = { function() require("dap").continue() end, "Continue" },
-        i = { function() require("dap").step_into() end, "Step Into" },
-        o = { function() require("dap").step_over() end, "Step Over" },
-        O = { function() require("dap").step_out() end, "Step Out" },
-        r = { function() require("dap").repl.toggle() end, "Toggle REPL" },
-        l = { function() require("dap").run_last() end, "Run Last" },
-        t = { function() require("dap").terminate() end, "Stop Debugger" },
-        u = { function() require("dapui").toggle() end, "Toggle DAP UI" },
-      }
-    }
-  },
-  telescope = {
-    n = {
-      b = {
-        name = "Buffers",
-        f = { "<cmd>Telescope buffers<CR>", "Find" },
-      },
-      g = {
-        name = "Git",
-        o = { "<cmd>Telescope git_status<cr>", "Open changed file" },
-        b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
-        c = { "<cmd>Telescope git_commits<cr>", "Checkout commit" },
-        C = { "<cmd>Telescope git_bcommits<cr>", "Checkout commit(for current file)" },
-      },
-      l = {
-        name = "LSP",
-        d = { "<cmd>Telescope diagnostics bufnr=0 theme=get_ivy<cr>", "Buffer Diagnostics" },
-        w = { "<cmd>Telescope diagnostics<cr>", "Diagnostics" },
-        s = { "<cmd>Telescope lsp_document_symbols<cr>", "Document Symbols" },
-        S = { "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", "Workspace Symbols" },
-        e = { "<cmd>Telescope quickfix<cr>", "Telescope Quickfix" },
-      },
-      s = {
-        name = "Search",
-        c = { "<cmd>Telescope colorscheme<cr>", "Colorscheme" },
-        f = { "<cmd>Telescope find_files<cr>", "Find File" },
-        h = { "<cmd>Telescope help_tags<cr>", "Find Help" },
-        H = { "<cmd>Telescope highlights<cr>", "Find highlight groups" },
-        M = { "<cmd>Telescope man_pages<cr>", "Man Pages" },
-        r = { "<cmd>Telescope oldfiles<cr>", "Open Recent File" },
-        R = { "<cmd>Telescope registers<cr>", "Registers" },
-        t = { "<cmd>Telescope live_grep<cr>", "Text" },
-        T = { "<cmd>TodoTelescope<cr>", "Todo Comments" },
-        k = { "<cmd>Telescope keymaps<cr>", "Keymaps" },
-        C = { "<cmd>Telescope commands<cr>", "Commands" },
-      }
-    }
-  },
-  blankline = {
-    n = {
-      c = {
-        function()
-          local ok, start = require("indent_blankline.utils").get_current_context(
-            vim.g.indent_blankline_context_patterns,
-            vim.g.indent_blankline_use_treesitter_scope
-          )
-          if ok then
-            vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start, 0 })
-            vim.cmd [[normal! _]]
-          end
-        end,
-        "Jump to current_context",
-      }
-    }
-  },
-  bufferline = {
-    n = {
-      b = {
-        name = "Buffers",
-        j = { "<cmd>BufferLinePick<CR>", "Jump" },
-        b = { "<cmd>BufferLineCyclePrev<CR>", "Previous" },
-        n = { "<cmd>BufferLineCycleNext<CR>", "Next" },
-        e = { "<cmd>BufferLinePickClose<CR>", "Pick which buffer to close" },
-        h = { "<cmd>BufferLineCloseLeft<CR>", "Close all to the left" },
-        l = { "<cmd>BufferLineCloseRight<CR>", "Close all to the right" },
-        D = { "<cmd>BufferLineSortByDirectory<CR>", "Sort by directory" },
-        L = { "<cmd>BufferLineSortByExtension<CR>", "Sort by language" },
-      },
-    }
-  },
-  packer = {
-    n = {
-      p = {
-        name = "Packer",
-        c = { "<cmd>PackerCompile<CR>", "Compile" },
-        C = { "<cmd>PackerClean<CR>", "Clean" },
-        i = { "<cmd>PackerInstall<CR>", "Install" },
-        s = { "<cmd>PackerSync<CR>", "Sync" },
-        S = { "<cmd>PackerStatus<CR>", "Status" },
-        u = { "<cmd>PackerUpdate<CR>", "Update" },
-      },
-    }
-  },
-  lf = {
-    n = {
-      ["e"] = { function() require("lf").start() end, "File Picker" },
-    }
-  },
-  alpha = {
-    n = {
-      [";"] = { "<cmd>Alpha<CR>", "Dashboard" },
-    }
-  },
-  treesitter = {
-    n = {
-      T = {
-        name = "Treesitter",
-        i = { "<cmd>TSConfigInfo<cr>", "Info" },
-      },
-    }
-  },
-  comment = {
-    n = {
-      ["/"] = { "<Plug>(comment_toggle_linewise_current)", "Comment toggle current line" },
+        }
     },
-    v = {
-      ["/"] = { "<Plug>(comment_toggle_linewise_visual)", "Comment toggle linewise" },
+    lspconfig = {
+        n = {
+            l = {
+                name = "LSP",
+                i = { "<cmd>LspInfo<cr>", "Info" },
+            }
+        }
     },
-  },
-  gitsigns = {
-    n = {
-      g = {
-        name = "Git",
-        j = { function() require("gitsigns").next_hunk() end, "Next Hunk" },
-        k = { function() require("gitsigns").prev_hunk() end, "Prev Hunk" },
-        l = { function() require("gitsigns").blame_line() end, "Blame" },
-        p = { function() require("gitsigns").preview_hunk() end, "Preview Hunk" },
-        r = { function() require("gitsigns").reset_hunk() end, "Reset Hunk" },
-        R = { function() require("gitsigns").reset_buffer() end, "Reset Buffer" },
-        s = { function() require("gitsigns").stage_hunk() end, "Stage Hunk" },
-        u = { function() require("gitsigns").undo_stage_hunk() end, "Undo Stage Hunk" },
-        d = { "<cmd>Gitsigns diffthis HEAD<cr>", "Git Diff" },
-      },
+    mason = {
+        n = {
+            l = {
+                name = "LSP",
+                I = { "<cmd>Mason<cr>", "Mason Info" },
+            }
+        }
+    },
+    dap = {
+        n = {
+            d = {
+                name = "DAP",
+                b = { function() require("dap").toggle_breakpoint() end, "Toggle Breakpoint" },
+                c = { function() require("dap").continue() end, "Continue" },
+                i = { function() require("dap").step_into() end, "Step Into" },
+                o = { function() require("dap").step_over() end, "Step Over" },
+                O = { function() require("dap").step_out() end, "Step Out" },
+                r = { function() require("dap").repl.toggle() end, "Toggle REPL" },
+                l = { function() require("dap").run_last() end, "Run Last" },
+                t = { function() require("dap").terminate() end, "Stop Debugger" },
+                u = { function() require("dapui").toggle() end, "Toggle DAP UI" },
+            }
+        }
+    },
+    telescope = {
+        n = {
+            b = {
+                name = "Buffers",
+                f = { "<cmd>Telescope buffers<CR>", "Find" },
+            },
+            g = {
+                name = "Git",
+                o = { "<cmd>Telescope git_status<cr>", "Open changed file" },
+                b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
+                c = { "<cmd>Telescope git_commits<cr>", "Checkout commit" },
+                C = { "<cmd>Telescope git_bcommits<cr>", "Checkout commit(for current file)" },
+            },
+            l = {
+                name = "LSP",
+                d = { "<cmd>Telescope diagnostics bufnr=0 theme=get_ivy<cr>", "Buffer Diagnostics" },
+                w = { "<cmd>Telescope diagnostics<cr>", "Diagnostics" },
+                s = { "<cmd>Telescope lsp_document_symbols<cr>", "Document Symbols" },
+                S = { "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", "Workspace Symbols" },
+                e = { "<cmd>Telescope quickfix<cr>", "Telescope Quickfix" },
+            },
+            s = {
+                name = "Search",
+                c = { "<cmd>Telescope colorscheme<cr>", "Colorscheme" },
+                f = { "<cmd>Telescope find_files<cr>", "Find File" },
+                h = { "<cmd>Telescope help_tags<cr>", "Find Help" },
+                H = { "<cmd>Telescope highlights<cr>", "Find highlight groups" },
+                M = { "<cmd>Telescope man_pages<cr>", "Man Pages" },
+                r = { "<cmd>Telescope oldfiles<cr>", "Open Recent File" },
+                R = { "<cmd>Telescope registers<cr>", "Registers" },
+                t = { "<cmd>Telescope live_grep<cr>", "Text" },
+                T = { "<cmd>TodoTelescope<cr>", "Todo Comments" },
+                k = { "<cmd>Telescope keymaps<cr>", "Keymaps" },
+                C = { "<cmd>Telescope commands<cr>", "Commands" },
+            }
+        }
+    },
+    blankline = {
+        n = {
+            c = {
+                function()
+                    local ok, start = require("indent_blankline.utils").get_current_context(
+                        vim.g.indent_blankline_context_patterns,
+                        vim.g.indent_blankline_use_treesitter_scope
+                    )
+                    if ok then
+                        vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start, 0 })
+                        vim.cmd [[normal! _]]
+                    end
+                end,
+                "Jump to current_context",
+            }
+        }
+    },
+    bufferline = {
+        n = {
+            b = {
+                name = "Buffers",
+                j = { "<cmd>BufferLinePick<CR>", "Jump" },
+                b = { "<cmd>BufferLineCyclePrev<CR>", "Previous" },
+                n = { "<cmd>BufferLineCycleNext<CR>", "Next" },
+                e = { "<cmd>BufferLinePickClose<CR>", "Pick which buffer to close" },
+                h = { "<cmd>BufferLineCloseLeft<CR>", "Close all to the left" },
+                l = { "<cmd>BufferLineCloseRight<CR>", "Close all to the right" },
+                D = { "<cmd>BufferLineSortByDirectory<CR>", "Sort by directory" },
+                L = { "<cmd>BufferLineSortByExtension<CR>", "Sort by language" },
+            },
+        }
+    },
+    packer = {
+        n = {
+            p = {
+                name = "Packer",
+                c = { "<cmd>PackerCompile<CR>", "Compile" },
+                C = { "<cmd>PackerClean<CR>", "Clean" },
+                i = { "<cmd>PackerInstall<CR>", "Install" },
+                s = { "<cmd>PackerSync<CR>", "Sync" },
+                S = { "<cmd>PackerStatus<CR>", "Status" },
+                u = { "<cmd>PackerUpdate<CR>", "Update" },
+            },
+        }
+    },
+    lf = {
+        n = {
+            ["e"] = { function() require("lf").start() end, "File Picker" },
+        }
+    },
+    alpha = {
+        n = {
+            [";"] = { "<cmd>Alpha<CR>", "Dashboard" },
+        }
+    },
+    treesitter = {
+        n = {
+            T = {
+                name = "Treesitter",
+                i = { "<cmd>TSConfigInfo<cr>", "Info" },
+            },
+        }
+    },
+    comment = {
+        n = {
+            ["/"] = { "<Plug>(comment_toggle_linewise_current)", "Comment toggle current line" },
+        },
+        v = {
+            ["/"] = { "<Plug>(comment_toggle_linewise_visual)", "Comment toggle linewise" },
+        },
+    },
+    gitsigns = {
+        n = {
+            g = {
+                name = "Git",
+                j = { function() require("gitsigns").next_hunk() end, "Next Hunk" },
+                k = { function() require("gitsigns").prev_hunk() end, "Prev Hunk" },
+                l = { function() require("gitsigns").blame_line() end, "Blame" },
+                p = { function() require("gitsigns").preview_hunk() end, "Preview Hunk" },
+                r = { function() require("gitsigns").reset_hunk() end, "Reset Hunk" },
+                R = { function() require("gitsigns").reset_buffer() end, "Reset Buffer" },
+                s = { function() require("gitsigns").stage_hunk() end, "Stage Hunk" },
+                u = { function() require("gitsigns").undo_stage_hunk() end, "Undo Stage Hunk" },
+                d = { "<cmd>Gitsigns diffthis HEAD<cr>", "Git Diff" },
+            },
+        }
     }
-  }
 }
 
 return M
diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua
index c5c3cfe3..85a40fbc 100644
--- a/.config/nvim/lua/config/options.lua
+++ b/.config/nvim/lua/config/options.lua
@@ -15,8 +15,8 @@ o.splitbelow     = true
 o.updatetime     = 250
 o.writebackup    = false
 o.expandtab      = true
-o.shiftwidth     = 2
-o.tabstop        = 2
+o.shiftwidth     = 4
+o.tabstop        = 4
 o.cursorline     = true
 o.signcolumn     = "yes"
 o.wrap           = false
diff --git a/.config/nvim/lua/funcs.lua b/.config/nvim/lua/funcs.lua
index 3a12b57b..90ee5cd9 100644
--- a/.config/nvim/lua/funcs.lua
+++ b/.config/nvim/lua/funcs.lua
@@ -1,197 +1,197 @@
 local M = {}
 function M.lazy_load(tb)
-  vim.api.nvim_create_autocmd(tb.events, {
-    group = vim.api.nvim_create_augroup(tb.augroup_name, {}),
-    callback = function()
-      if tb.condition() then
-        vim.api.nvim_del_augroup_by_name(tb.augroup_name)
-        -- dont defer for treesitter as it will show slow highlighting
-        -- This deferring only happens only when we do "nvim filename"
-        if tb.plugin ~= "nvim-treesitter" then
-          vim.defer_fn(function()
-            require("packer").loader(tb.plugin)
-            if tb.plugin == "nvim-lspconfig" then
-              vim.cmd "silent! do FileType"
+    vim.api.nvim_create_autocmd(tb.events, {
+        group = vim.api.nvim_create_augroup(tb.augroup_name, {}),
+        callback = function()
+            if tb.condition() then
+                vim.api.nvim_del_augroup_by_name(tb.augroup_name)
+                -- dont defer for treesitter as it will show slow highlighting
+                -- This deferring only happens only when we do "nvim filename"
+                if tb.plugin ~= "nvim-treesitter" then
+                    vim.defer_fn(function()
+                        require("packer").loader(tb.plugin)
+                        if tb.plugin == "nvim-lspconfig" then
+                            vim.cmd "silent! do FileType"
+                        end
+                    end, 0)
+                else
+                    require("packer").loader(tb.plugin)
+                end
             end
-          end, 0)
-        else
-          require("packer").loader(tb.plugin)
-        end
-      end
-    end,
-  })
+        end,
+    })
 end
 
 function M.on_file_open(plugin_name)
-  M.lazy_load {
-    events = { "BufRead", "BufWinEnter", "BufNewFile" },
-    augroup_name = "BeLazyOnFileOpen" .. plugin_name,
-    plugin = plugin_name,
-    condition = function()
-      local file = vim.fn.expand "%"
-      return file ~= "NvimTree_1" and file ~= "[packer]" and file ~= ""
-    end,
-  }
+    M.lazy_load {
+        events = { "BufRead", "BufWinEnter", "BufNewFile" },
+        augroup_name = "BeLazyOnFileOpen" .. plugin_name,
+        plugin = plugin_name,
+        condition = function()
+            local file = vim.fn.expand "%"
+            return file ~= "NvimTree_1" and file ~= "[packer]" and file ~= ""
+        end,
+    }
 end
 
 function M.gitsigns()
-  vim.api.nvim_create_autocmd({ "BufRead" }, {
-    group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }),
-    callback = function()
-      vim.fn.system("git rev-parse " .. vim.fn.expand "%:p:h")
-      if vim.v.shell_error == 0 then
-        vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad"
-        vim.schedule(function()
-          require("packer").loader "gitsigns.nvim"
-        end)
-      end
-    end,
-  })
+    vim.api.nvim_create_autocmd({ "BufRead" }, {
+        group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }),
+        callback = function()
+            vim.fn.system("git rev-parse " .. vim.fn.expand "%:p:h")
+            if vim.v.shell_error == 0 then
+                vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad"
+                vim.schedule(function()
+                    require("packer").loader "gitsigns.nvim"
+                end)
+            end
+        end,
+    })
 end
 
 function M.bootstrap()
-  local fn = vim.fn
-  local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
-  if fn.empty(fn.glob(install_path)) > 0 then
-    vim.api.nvim_set_hl(0, "NormalFloat", { bg = "#1e222a" })
-    print "Cloning Packer..."
-    fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
-    vim.cmd "packadd packer.nvim"
-    require "plugins"
-    vim.cmd "PackerSync"
-    vim.api.nvim_create_autocmd("User", {
-      pattern = "PackerComplete",
-      callback = function()
-        vim.cmd "bw | silent! MasonInstallAll" -- close packer window
-        require("packer").loader "nvim-treesitter"
-      end,
-    })
-  end
+    local fn = vim.fn
+    local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
+    if fn.empty(fn.glob(install_path)) > 0 then
+        vim.api.nvim_set_hl(0, "NormalFloat", { bg = "#1e222a" })
+        print "Cloning Packer..."
+        fn.system({ 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path })
+        vim.cmd "packadd packer.nvim"
+        require "plugins"
+        vim.cmd "PackerSync"
+        vim.api.nvim_create_autocmd("User", {
+            pattern = "PackerComplete",
+            callback = function()
+                vim.cmd "bw | silent! MasonInstallAll" -- close packer window
+                require("packer").loader "nvim-treesitter"
+            end,
+        })
+    end
 end
 
 function M.map(section)
-  local maps = require('config.keymaplist').maps[section]
-  if maps then
-    for mode, binds in pairs(maps) do
-      for _, bind in pairs(binds) do
-        local key = bind[1]
-        local cmd = bind[2]
-        local opt = { silent = true, noremap = true }
-        vim.api.nvim_set_keymap(mode, key, cmd, opt)
-      end
+    local maps = require('config.keymaplist').maps[section]
+    if maps then
+        for mode, binds in pairs(maps) do
+            for _, bind in pairs(binds) do
+                local key = bind[1]
+                local cmd = bind[2]
+                local opt = { silent = true, noremap = true }
+                vim.api.nvim_set_keymap(mode, key, cmd, opt)
+            end
+        end
     end
-  end
 
-  local wk_ok, whichkey = pcall(require, 'which-key')
-  if wk_ok then
-    local wkmaps = require('config.keymaplist').whichkey[section]
-    if wkmaps then
-      for mode, binds in pairs(wkmaps) do
-        whichkey.register(binds, {
-          mode = mode,
-          prefix = "<leader>",
-          buffer = nil,
-          silent = true,
-          noremap = true,
-          nowait = true,
-        })
-      end
+    local wk_ok, whichkey = pcall(require, 'which-key')
+    if wk_ok then
+        local wkmaps = require('config.keymaplist').whichkey[section]
+        if wkmaps then
+            for mode, binds in pairs(wkmaps) do
+                whichkey.register(binds, {
+                    mode = mode,
+                    prefix = "<leader>",
+                    buffer = nil,
+                    silent = true,
+                    noremap = true,
+                    nowait = true,
+                })
+            end
+        end
     end
-  end
 end
 
 function M.format_filter(client)
-  local filetype = vim.bo.filetype
-  local n = require "null-ls"
-  local s = require "null-ls.sources"
-  local method = n.methods.FORMATTING
-  local available_formatters = s.get_available(filetype, method)
+    local filetype = vim.bo.filetype
+    local n = require "null-ls"
+    local s = require "null-ls.sources"
+    local method = n.methods.FORMATTING
+    local available_formatters = s.get_available(filetype, method)
 
-  if #available_formatters > 0 then
-    return client.name == "null-ls"
-  elseif client.supports_method "textDocument/formatting" then
-    return true
-  else
-    return false
-  end
+    if #available_formatters > 0 then
+        return client.name == "null-ls"
+    elseif client.supports_method "textDocument/formatting" then
+        return true
+    else
+        return false
+    end
 end
 
 function M.format(opts)
-  opts = opts or {}
-  opts.filter = opts.filter or M.format_filter
-  return vim.lsp.buf.format(opts)
+    opts = opts or {}
+    opts.filter = opts.filter or M.format_filter
+    return vim.lsp.buf.format(opts)
 end
 
 -- Modified version of a function stolen from LunarVim
 function M.buf_kill(kill_command, bufnr, force)
-  kill_command = kill_command or "bd"
+    kill_command = kill_command or "bd"
 
-  local bo = vim.bo
-  local api = vim.api
-  local fmt = string.format
-  local fnamemodify = vim.fn.fnamemodify
+    local bo = vim.bo
+    local api = vim.api
+    local fmt = string.format
+    local fnamemodify = vim.fn.fnamemodify
 
-  if bufnr == 0 or bufnr == nil then
-    bufnr = api.nvim_get_current_buf()
-  end
-
-  local bufname = api.nvim_buf_get_name(bufnr)
-
-  if not force then
-    local warning
-    if bo[bufnr].modified then
-      warning = fmt([[No write since last change for (%s)]], fnamemodify(bufname, ":t"))
-    elseif api.nvim_buf_get_option(bufnr, "buftype") == "terminal" then
-      warning = fmt([[Terminal %s will be killed]], bufname)
+    if bufnr == 0 or bufnr == nil then
+        bufnr = api.nvim_get_current_buf()
     end
-    if warning then
-      vim.ui.input({
-        prompt = string.format([[%s. Close it anyway? [y]es or [n]o (default: no): ]], warning),
-      }, function(choice)
-        if choice:match "ye?s?" then force = true end
-      end)
-      if not force then return end
-    end
-  end
 
-  -- Get list of windows IDs with the buffer to close
-  local windows = vim.tbl_filter(function(win)
-    return api.nvim_win_get_buf(win) == bufnr
-  end, api.nvim_list_wins())
+    local bufname = api.nvim_buf_get_name(bufnr)
 
-  if #windows == 0 then return end
-
-  if force then
-    kill_command = kill_command .. "!"
-  end
-
-  -- Get list of active buffers
-  local buffers = vim.tbl_filter(function(buf)
-    return api.nvim_buf_is_valid(buf) and bo[buf].buflisted
-  end, api.nvim_list_bufs())
-
-  -- If there is only one buffer (which has to be the current one), vim will
-  -- create a new buffer on :bd.
-  -- For more than one buffer, pick the previous buffer (wrapping around if necessary)
-  if #buffers > 1 then
-    for i, v in ipairs(buffers) do
-      if v == bufnr then
-        local prev_buf_idx = i == 1 and (#buffers - 1) or (i - 1)
-        local prev_buffer = buffers[prev_buf_idx]
-        for _, win in ipairs(windows) do
-          api.nvim_win_set_buf(win, prev_buffer)
+    if not force then
+        local warning
+        if bo[bufnr].modified then
+            warning = fmt([[No write since last change for (%s)]], fnamemodify(bufname, ":t"))
+        elseif api.nvim_buf_get_option(bufnr, "buftype") == "terminal" then
+            warning = fmt([[Terminal %s will be killed]], bufname)
+        end
+        if warning then
+            vim.ui.input({
+                prompt = string.format([[%s. Close it anyway? [y]es or [n]o (default: no): ]], warning),
+            }, function(choice)
+                if choice:match "ye?s?" then force = true end
+            end)
+            if not force then return end
         end
-      end
     end
-  else
-    vim.cmd('q!')
-  end
 
-  -- Check if buffer still exists, to ensure the target buffer wasn't killed
-  -- due to options like bufhidden=wipe.
-  if api.nvim_buf_is_valid(bufnr) and bo[bufnr].buflisted then
-    vim.cmd(string.format("%s %d", kill_command, bufnr))
-  end
+    -- Get list of windows IDs with the buffer to close
+    local windows = vim.tbl_filter(function(win)
+        return api.nvim_win_get_buf(win) == bufnr
+    end, api.nvim_list_wins())
+
+    if #windows == 0 then return end
+
+    if force then
+        kill_command = kill_command .. "!"
+    end
+
+    -- Get list of active buffers
+    local buffers = vim.tbl_filter(function(buf)
+        return api.nvim_buf_is_valid(buf) and bo[buf].buflisted
+    end, api.nvim_list_bufs())
+
+    -- If there is only one buffer (which has to be the current one), vim will
+    -- create a new buffer on :bd.
+    -- For more than one buffer, pick the previous buffer (wrapping around if necessary)
+    if #buffers > 1 then
+        for i, v in ipairs(buffers) do
+            if v == bufnr then
+                local prev_buf_idx = i == 1 and (#buffers - 1) or (i - 1)
+                local prev_buffer = buffers[prev_buf_idx]
+                for _, win in ipairs(windows) do
+                    api.nvim_win_set_buf(win, prev_buffer)
+                end
+            end
+        end
+    else
+        vim.cmd('q!')
+    end
+
+    -- Check if buffer still exists, to ensure the target buffer wasn't killed
+    -- due to options like bufhidden=wipe.
+    if api.nvim_buf_is_valid(bufnr) and bo[bufnr].buflisted then
+        vim.cmd(string.format("%s %d", kill_command, bufnr))
+    end
 end
 
 return M
diff --git a/.config/nvim/lua/plugins/config/alpha.lua b/.config/nvim/lua/plugins/config/alpha.lua
index c0b1b951..221d7add 100644
--- a/.config/nvim/lua/plugins/config/alpha.lua
+++ b/.config/nvim/lua/plugins/config/alpha.lua
@@ -1,49 +1,49 @@
 local status_ok, alpha = pcall(require, 'alpha')
 if not status_ok then
-  return
+    return
 end
 
-local dashboard = require 'alpha.themes.dashboard'
-local icons = require 'config.iconlist'
+local dashboard = require('alpha.themes.dashboard')
+local icons = require('config.icons').list
 
 local banner = {
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⣿⣿⣿⣷⣶⣤⡀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀",
-  "⠀⣀⣴⣶⣶⣶⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀",
-  "⣰⣿⣿⠿⠛⠿⢿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀",
-  "⣿⣿⡇⠀⠀⠀⠀⠈⠛⢿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀",
-  "⠹⣿⣧⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⡿⠛⠉⠀⢀⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⠀",
-  "⠀⠙⢿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣷⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣤⣶⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠉⠻⠷⡄⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⢀⣠⣤⣤⣄⡀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣷⡀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⣿⠟⠉⠉⠙⢿⣿⣿⣷",
-  "⠀⠀⠀⣀⣠⣤⣤⣤⣶⣶⣶⣤⣤⠀⣴⣿⣿⣿⡿⠟⠛⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠉⠀⠀⠀⢀⣼⣿⣿⡿",
-  "⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠛⠻⠏⣼⣿⣿⡿⣋⣀⣤⣤⣴⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣄⣀⣠⣴⣾⣿⣿⡿⠁",
-  "⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⡿⠋⠘⠿⠟⠛⠛⢻⣿⣿⣿⠋⠁⠈⠉⢿⣿⣿⣧⠀⠙⠻⢿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠉⠀⠀",
-  "⠙⣷⣤⣀⠀⠀⠀⢀⣀⣤⣶⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡟⠀⠀⠀⢠⣿⣿⣿⡟⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀",
-  "⠀⠈⠛⠿⢿⣿⣿⣿⠿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⡀⠀⢠⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣷⣶⣶⣶⣶⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢶⣦⣤⣶⣾⣿⣿⡶⠈⠉⠛⠿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
-  "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣶⡿⠿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⣿⣿⣿⣷⣶⣤⡀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀",
+    "⠀⣀⣴⣶⣶⣶⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀",
+    "⣰⣿⣿⠿⠛⠿⢿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀",
+    "⣿⣿⡇⠀⠀⠀⠀⠈⠛⢿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀",
+    "⠹⣿⣧⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⡿⠛⠉⠀⢀⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⠀",
+    "⠀⠙⢿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣷⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣤⣶⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠉⠻⠷⡄⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⢀⣠⣤⣤⣄⡀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣷⡀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⣿⠟⠉⠉⠙⢿⣿⣿⣷",
+    "⠀⠀⠀⣀⣠⣤⣤⣤⣶⣶⣶⣤⣤⠀⣴⣿⣿⣿⡿⠟⠛⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠉⠀⠀⠀⢀⣼⣿⣿⡿",
+    "⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠛⠻⠏⣼⣿⣿⡿⣋⣀⣤⣤⣴⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣄⣀⣠⣴⣾⣿⣿⡿⠁",
+    "⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⡿⠋⠘⠿⠟⠛⠛⢻⣿⣿⣿⠋⠁⠈⠉⢿⣿⣿⣧⠀⠙⠻⢿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠉⠀⠀",
+    "⠙⣷⣤⣀⠀⠀⠀⢀⣀⣤⣶⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡟⠀⠀⠀⢠⣿⣿⣿⡟⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀",
+    "⠀⠈⠛⠿⢿⣿⣿⣿⠿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⡀⠀⢠⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣷⣶⣶⣶⣶⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢶⣦⣤⣶⣾⣿⣿⡶⠈⠉⠛⠿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
+    "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣶⡿⠿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀",
 }
 
 if vim.o.lines < 36 then
-  banner = vim.list_slice(banner, 16, 22)
+    banner = vim.list_slice(banner, 16, 22)
 end
 
 dashboard.section.header.val = banner
 
 dashboard.section.buttons.val = {
-  dashboard.button("f", icons.ui.FindFile .. " Find file", ":Telescope find_files<CR>"),
-  dashboard.button("n", icons.ui.NewFile .. " New file", ":ene <BAR> startinsert<CR>"),
-  dashboard.button("p", icons.ui.Project .. " Find project", ":Telescope projects<CR>"),
-  dashboard.button("r", icons.ui.History .. " Recent files", ":Telescope oldfiles<CR>"),
-  dashboard.button("t", icons.ui.FindText .. " Find text", ":Telescope live_grep<CR>"),
-  dashboard.button("q", icons.ui.SignOut .. " Quit", ":qa<CR>"),
+    dashboard.button("f", icons.ui.FindFile .. " Find file", ":Telescope find_files<CR>"),
+    dashboard.button("n", icons.ui.NewFile .. " New file", ":ene <BAR> startinsert<CR>"),
+    dashboard.button("p", icons.ui.Project .. " Find project", ":Telescope projects<CR>"),
+    dashboard.button("r", icons.ui.History .. " Recent files", ":Telescope oldfiles<CR>"),
+    dashboard.button("t", icons.ui.FindText .. " Find text", ":Telescope live_grep<CR>"),
+    dashboard.button("q", icons.ui.SignOut .. " Quit", ":qa<CR>"),
 }
 
 dashboard.section.footer.val = "Behold: a Snail's Vim"
diff --git a/.config/nvim/lua/plugins/config/autopairs.lua b/.config/nvim/lua/plugins/config/autopairs.lua
index 9a784666..dc890337 100644
--- a/.config/nvim/lua/plugins/config/autopairs.lua
+++ b/.config/nvim/lua/plugins/config/autopairs.lua
@@ -1,33 +1,33 @@
 local status_ok, autopairs = pcall(require, "nvim-autopairs")
 if not status_ok then
-  return
+    return
 end
 
 autopairs.setup({
-  check_ts = true,
-  disable_filetype = { "TelescopePrompt", "vim" },
-  ts_config = {
-    lua = { "string", "source" },
-    javascript = { "string", "template_string" },
-    java = false,
-  },
-  fast_wrap = {
-    map = "<M-e>",
-    chars = { "{", "[", "("},
-    -- chars = { "{", "[", "(", '"', "'" },
-    pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
-    offset = 0,
-    end_key = "$",
-    keys = "qwertyuiopzxcvbnmasdfghjkl",
-    check_comma = true,
-    highlight = "PmenuSel",
-    highlight_grey = "LineNr",
-  },
+    check_ts = true,
+    disable_filetype = { "TelescopePrompt", "vim" },
+    ts_config = {
+        lua = { "string", "source" },
+        javascript = { "string", "template_string" },
+        java = false,
+    },
+    fast_wrap = {
+        map = "<M-e>",
+        chars = { "{", "[", "(" },
+        -- chars = { "{", "[", "(", '"', "'" },
+        pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
+        offset = 0,
+        end_key = "$",
+        keys = "qwertyuiopzxcvbnmasdfghjkl",
+        check_comma = true,
+        highlight = "PmenuSel",
+        highlight_grey = "LineNr",
+    },
 })
 
 local cmp_autopairs = require("nvim-autopairs.completion.cmp")
 local cmp_status_ok, cmp = pcall(require, "cmp")
 if not cmp_status_ok then
-  return
+    return
 end
 cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())
diff --git a/.config/nvim/lua/plugins/config/bufferline.lua b/.config/nvim/lua/plugins/config/bufferline.lua
index dfc63adc..cd9c84ad 100644
--- a/.config/nvim/lua/plugins/config/bufferline.lua
+++ b/.config/nvim/lua/plugins/config/bufferline.lua
@@ -2,143 +2,143 @@ local colors = require('tokyonight.colors').setup({ transform = true })
 
 local status_ok, bufferline = pcall(require, "bufferline")
 if not status_ok then
-  return
+    return
 end
 
-local icons = require 'config.iconlist'
+local icons = require('config.icons').list
 
 local function is_ft(b, ft)
-  return vim.bo[b].filetype == ft
+    return vim.bo[b].filetype == ft
 end
 
 local function diagnostics_indicator(_, _, diagnostics, _)
-  local result = {}
-  local symbols = {
-    error = icons.diagnostics.Error,
-    warning = icons.diagnostics.Warning,
-    info = icons.diagnostics.Information,
-  }
-  for name, count in pairs(diagnostics) do
-    if symbols[name] and count > 0 then
-      table.insert(result, symbols[name] .. " " .. count)
+    local result = {}
+    local symbols = {
+        error = icons.diagnostics.Error,
+        warning = icons.diagnostics.Warning,
+        info = icons.diagnostics.Information,
+    }
+    for name, count in pairs(diagnostics) do
+        if symbols[name] and count > 0 then
+            table.insert(result, symbols[name] .. " " .. count)
+        end
     end
-  end
-  result = table.concat(result, " ")
-  return #result > 0 and result or ""
+    result = table.concat(result, " ")
+    return #result > 0 and result or ""
 end
 
 local function custom_filter(buf, buf_nums)
-  local logs = vim.tbl_filter(function(b)
-    return is_ft(b, "log")
-  end, buf_nums)
-  if vim.tbl_isempty(logs) then
-    return true
-  end
-  local tab_num = vim.fn.tabpagenr()
-  local last_tab = vim.fn.tabpagenr "$"
-  local is_log = is_ft(buf, "log")
-  if last_tab == 1 then
-    return true
-  end
-  -- only show log buffers in secondary tabs
-  return (tab_num == last_tab and is_log) or (tab_num ~= last_tab and not is_log)
+    local logs = vim.tbl_filter(function(b)
+        return is_ft(b, "log")
+    end, buf_nums)
+    if vim.tbl_isempty(logs) then
+        return true
+    end
+    local tab_num = vim.fn.tabpagenr()
+    local last_tab = vim.fn.tabpagenr "$"
+    local is_log = is_ft(buf, "log")
+    if last_tab == 1 then
+        return true
+    end
+    -- only show log buffers in secondary tabs
+    return (tab_num == last_tab and is_log) or (tab_num ~= last_tab and not is_log)
 end
 
 local config = {
-  highlights = {
-    background = {
-      italic = true,
-      bold = false,
+    highlights = {
+        background = {
+            italic = true,
+            bold = false,
+        },
+        buffer_selected = {
+            italic = false,
+            bold = true,
+        },
     },
-    buffer_selected = {
-      italic = false,
-      bold = true,
+    options = {
+        mode = "buffers", -- set to "tabs" to only show tabpages instead
+        numbers = "none", -- can be "none" | "ordinal" | "buffer_id" | "both" | function
+        close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions"
+        right_mouse_command = "vert sbuffer %d", -- can be a string | function, see "Mouse actions"
+        left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions"
+        middle_mouse_command = nil, -- can be a string | function, see "Mouse actions"
+        indicator = {
+            -- icon = icons.ui.DoubleChevronRight, -- this should be omitted if indicator style is not 'icon'
+            style = "none", -- can also be 'underline'|'none',
+        },
+        buffer_close_icon = icons.ui.Close,
+        modified_icon = icons.ui.Circle,
+        close_icon = icons.ui.BoldClose,
+        left_trunc_marker = icons.ui.ArrowCircleLeft,
+        right_trunc_marker = icons.ui.ArrowCircleRight,
+        --- name_formatter can be used to change the buffer's label in the bufferline.
+        --- Please note some names can/will break the
+        --- bufferline so use this at your discretion knowing that it has
+        --- some limitations that will *NOT* be fixed.
+        name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr"
+            -- remove extension from markdown files for example
+            if buf.name:match "%.md" then
+                return vim.fn.fnamemodify(buf.name, ":t:r")
+            end
+        end,
+        max_name_length = 18,
+        max_prefix_length = 15, -- prefix used when a buffer is de-duplicated
+        truncate_names = true, -- whether or not tab names should be truncated
+        tab_size = 18,
+        diagnostics = "nvim_lsp",
+        diagnostics_update_in_insert = false,
+        diagnostics_indicator = diagnostics_indicator,
+        -- NOTE: this will be called a lot so don't do any heavy processing here
+        custom_filter = custom_filter,
+        offsets = {
+            {
+                filetype = "undotree",
+                text = "Undotree",
+                highlight = "PanelHeading",
+                padding = 1,
+            },
+            {
+                filetype = "NvimTree",
+                text = "Explorer",
+                highlight = "PanelHeading",
+                padding = 1,
+            },
+            {
+                filetype = "DiffviewFiles",
+                text = "Diff View",
+                highlight = "PanelHeading",
+                padding = 1,
+            },
+            {
+                filetype = "flutterToolsOutline",
+                text = "Flutter Outline",
+                highlight = "PanelHeading",
+            },
+            {
+                filetype = "packer",
+                text = "Packer",
+                highlight = "PanelHeading",
+                padding = 1,
+            },
+        },
+        color_icons = true, -- whether or not to add the filetype icon highlights
+        show_buffer_icons = true, -- disable filetype icons for buffers
+        show_buffer_close_icons = false,
+        show_close_icon = false,
+        show_tab_indicators = true,
+        persist_buffer_sort = true, -- whether or not custom sorted buffers should persist
+        -- can also be a table containing 2 custom separators
+        -- [focused and unfocused]. eg: { '|', '|' }
+        separator_style = { '', '' },
+        enforce_regular_tabs = false,
+        always_show_bufferline = false,
+        hover = {
+            enabled = false, -- requires nvim 0.8+
+            delay = 200,
+            reveal = { "close" },
+        },
+        sort_by = "id",
     },
-  },
-  options = {
-    mode = "buffers", -- set to "tabs" to only show tabpages instead
-    numbers = "none", -- can be "none" | "ordinal" | "buffer_id" | "both" | function
-    close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions"
-    right_mouse_command = "vert sbuffer %d", -- can be a string | function, see "Mouse actions"
-    left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions"
-    middle_mouse_command = nil, -- can be a string | function, see "Mouse actions"
-    indicator = {
-      -- icon = icons.ui.DoubleChevronRight, -- this should be omitted if indicator style is not 'icon'
-      style = "none", -- can also be 'underline'|'none',
-    },
-    buffer_close_icon = icons.ui.Close,
-    modified_icon = icons.ui.Circle,
-    close_icon = icons.ui.BoldClose,
-    left_trunc_marker = icons.ui.ArrowCircleLeft,
-    right_trunc_marker = icons.ui.ArrowCircleRight,
-    --- name_formatter can be used to change the buffer's label in the bufferline.
-    --- Please note some names can/will break the
-    --- bufferline so use this at your discretion knowing that it has
-    --- some limitations that will *NOT* be fixed.
-    name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr"
-      -- remove extension from markdown files for example
-      if buf.name:match "%.md" then
-        return vim.fn.fnamemodify(buf.name, ":t:r")
-      end
-    end,
-    max_name_length = 18,
-    max_prefix_length = 15, -- prefix used when a buffer is de-duplicated
-    truncate_names = true, -- whether or not tab names should be truncated
-    tab_size = 18,
-    diagnostics = "nvim_lsp",
-    diagnostics_update_in_insert = false,
-    diagnostics_indicator = diagnostics_indicator,
-    -- NOTE: this will be called a lot so don't do any heavy processing here
-    custom_filter = custom_filter,
-    offsets = {
-      {
-        filetype = "undotree",
-        text = "Undotree",
-        highlight = "PanelHeading",
-        padding = 1,
-      },
-      {
-        filetype = "NvimTree",
-        text = "Explorer",
-        highlight = "PanelHeading",
-        padding = 1,
-      },
-      {
-        filetype = "DiffviewFiles",
-        text = "Diff View",
-        highlight = "PanelHeading",
-        padding = 1,
-      },
-      {
-        filetype = "flutterToolsOutline",
-        text = "Flutter Outline",
-        highlight = "PanelHeading",
-      },
-      {
-        filetype = "packer",
-        text = "Packer",
-        highlight = "PanelHeading",
-        padding = 1,
-      },
-    },
-    color_icons = true, -- whether or not to add the filetype icon highlights
-    show_buffer_icons = true, -- disable filetype icons for buffers
-    show_buffer_close_icons = false,
-    show_close_icon = false,
-    show_tab_indicators = true,
-    persist_buffer_sort = true, -- whether or not custom sorted buffers should persist
-    -- can also be a table containing 2 custom separators
-    -- [focused and unfocused]. eg: { '|', '|' }
-    separator_style = { '', '' },
-    enforce_regular_tabs = false,
-    always_show_bufferline = false,
-    hover = {
-      enabled = false, -- requires nvim 0.8+
-      delay = 200,
-      reveal = { "close" },
-    },
-    sort_by = "id",
-  },
 }
 
 bufferline.setup(config)
diff --git a/.config/nvim/lua/plugins/config/cmp.lua b/.config/nvim/lua/plugins/config/cmp.lua
index 901b8e17..ad6b6add 100644
--- a/.config/nvim/lua/plugins/config/cmp.lua
+++ b/.config/nvim/lua/plugins/config/cmp.lua
@@ -1,98 +1,98 @@
 local cmp_status_ok, cmp = pcall(require, 'cmp')
 if not cmp_status_ok then
-  return
+    return
 end
 
 local luasnip_status_ok, luasnip = pcall(require, 'luasnip')
 if not luasnip_status_ok then
-  return
+    return
 end
 
 local has_words_before = function()
-  unpack = unpack or table.unpack
-  local line, col = unpack(vim.api.nvim_win_get_cursor(0))
-  return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
+    unpack = unpack or table.unpack
+    local line, col = unpack(vim.api.nvim_win_get_cursor(0))
+    return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
 end
 
 local cmp_window = require "cmp.utils.window"
 
 cmp_window.info_ = cmp_window.info
 cmp_window.info = function(self)
-  local info = self:info_()
-  info.scrollable = false
-  return info
+    local info = self:info_()
+    info.scrollable = false
+    return info
 end
 
 cmp.setup({
-  window = {
-    completion = {
-      winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
-      col_offset = -3,
-      side_padding = 0,
+    window = {
+        completion = {
+            winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
+            col_offset = -3,
+            side_padding = 0,
+        },
     },
-  },
-  formatting = {
-    fields = { "kind", "abbr", "menu" },
-    format = function(entry, vim_item)
-      local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50 })(entry, vim_item)
-      local strings = vim.split(kind.kind, "%s", { trimempty = true })
-      kind.kind = " " .. (strings[1] or "") .. " "
-      kind.menu = "    (" .. (strings[2] or "") .. ")"
+    formatting = {
+        fields = { "kind", "abbr", "menu" },
+        format = function(entry, vim_item)
+            local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50 })(entry, vim_item)
+            local strings = vim.split(kind.kind, "%s", { trimempty = true })
+            kind.kind = " " .. (strings[1] or "") .. " "
+            kind.menu = "    (" .. (strings[2] or "") .. ")"
 
-      return kind
-    end,
-  },
-  snippet = {
-    expand = function(args)
-      luasnip.lsp_expand(args.body)
-    end,
-  },
-  mapping = {
-    ["<C-k>"] = cmp.mapping.select_prev_item(),
-    ["<C-j>"] = cmp.mapping.select_next_item(),
-    ["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
-    ["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
-    ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
-    ["<C-e>"] = cmp.mapping({
-      i = cmp.mapping.abort(),
-      c = cmp.mapping.close(),
-    }),
-    ["<Tab>"] = cmp.mapping(function(fallback)
-      if cmp.visible() then
-        cmp.select_next_item()
-        -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-        -- they way you will only jump inside the snippet region
-      elseif luasnip.expand_or_jumpable() then
-        luasnip.expand_or_jump()
-      elseif has_words_before() then
-        cmp.complete()
-      else
-        fallback()
-      end
-    end, { "i", "s" }),
+            return kind
+        end,
+    },
+    snippet = {
+        expand = function(args)
+            luasnip.lsp_expand(args.body)
+        end,
+    },
+    mapping = {
+        ["<C-k>"] = cmp.mapping.select_prev_item(),
+        ["<C-j>"] = cmp.mapping.select_next_item(),
+        ["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
+        ["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
+        ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
+        ["<C-e>"] = cmp.mapping({
+            i = cmp.mapping.abort(),
+            c = cmp.mapping.close(),
+        }),
+        ["<Tab>"] = cmp.mapping(function(fallback)
+            if cmp.visible() then
+                cmp.select_next_item()
+                -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
+                -- they way you will only jump inside the snippet region
+            elseif luasnip.expand_or_jumpable() then
+                luasnip.expand_or_jump()
+            elseif has_words_before() then
+                cmp.complete()
+            else
+                fallback()
+            end
+        end, { "i", "s" }),
 
-    ["<S-Tab>"] = cmp.mapping(function(fallback)
-      if cmp.visible() then
-        cmp.select_prev_item()
-      elseif luasnip.jumpable(-1) then
-        luasnip.jump(-1)
-      else
-        fallback()
-      end
-    end, { "i", "s" }),
-  },
-  sources = {
-    { name = "nvim_lsp" },
-    { name = "nvim_lua" },
-    { name = "luasnip" },
-    { name = "buffer" },
-    { name = "path" },
-  },
-  experimental = {
-    ghost_text = true,
-  },
-  confirm_opts = {
-    behavior = cmp.ConfirmBehavior.Replace,
-    select = false,
-  }
+        ["<S-Tab>"] = cmp.mapping(function(fallback)
+            if cmp.visible() then
+                cmp.select_prev_item()
+            elseif luasnip.jumpable(-1) then
+                luasnip.jump(-1)
+            else
+                fallback()
+            end
+        end, { "i", "s" }),
+    },
+    sources = {
+        { name = "nvim_lsp" },
+        { name = "nvim_lua" },
+        { name = "luasnip" },
+        { name = "buffer" },
+        { name = "path" },
+    },
+    experimental = {
+        ghost_text = true,
+    },
+    confirm_opts = {
+        behavior = cmp.ConfirmBehavior.Replace,
+        select = false,
+    }
 })
diff --git a/.config/nvim/lua/plugins/config/comment.lua b/.config/nvim/lua/plugins/config/comment.lua
index ef0f480f..5edf837c 100644
--- a/.config/nvim/lua/plugins/config/comment.lua
+++ b/.config/nvim/lua/plugins/config/comment.lua
@@ -1,11 +1,11 @@
 local status_ok, comment = pcall(require, "Comment")
 if not status_ok then
-  return
+    return
 end
 
 comment.setup({
-  mappings = {
-    basic = false,
-    extra = false
-  }
+    mappings = {
+        basic = false,
+        extra = false
+    }
 })
diff --git a/.config/nvim/lua/plugins/config/dap.lua b/.config/nvim/lua/plugins/config/dap.lua
index fb546239..987f44be 100644
--- a/.config/nvim/lua/plugins/config/dap.lua
+++ b/.config/nvim/lua/plugins/config/dap.lua
@@ -1,25 +1,25 @@
-local icons = require('config.iconlist')
+local icons = require('config.icons').list
 
 local dap_status_ok, dap = pcall(require, 'dap')
 if not dap_status_ok then
-  return
+    return
 end
 
 local dap_ui_status_ok, dapui = pcall(require, 'dapui')
 if not dap_ui_status_ok then
-  return
+    return
 end
 
 vim.fn.sign_define("DapBreakpoint", { text = icons.ui.Bug, texthl = "DiagnosticSignError", linehl = "", numhl = "" })
 
 dap.listeners.after.event_initialized["dapui_config"] = function()
-  dapui.open()
+    dapui.open()
 end
 
 dap.listeners.before.event_terminated["dapui_config"] = function()
-  dapui.close()
+    dapui.close()
 end
 
 dap.listeners.before.event_exited["dapui_config"] = function()
-  dapui.close()
+    dapui.close()
 end
diff --git a/.config/nvim/lua/plugins/config/dapui.lua b/.config/nvim/lua/plugins/config/dapui.lua
index 9fcc97d3..aad17305 100644
--- a/.config/nvim/lua/plugins/config/dapui.lua
+++ b/.config/nvim/lua/plugins/config/dapui.lua
@@ -1,27 +1,27 @@
 local dap_ui_status_ok, dapui = pcall(require, 'nvim-dap-ui')
 if not dap_ui_status_ok then
-  return
+    return
 end
 
 dapui.setup {
-  layouts = {
-    {
-      elements = {
-        'scopes',
-        'breakpoints',
-        'stacks',
-        'watches',
-      },
-      size = 40,
-      position = 'left',
+    layouts = {
+        {
+            elements = {
+                'scopes',
+                'breakpoints',
+                'stacks',
+                'watches',
+            },
+            size = 40,
+            position = 'left',
+        },
+        {
+            elements = {
+                'repl',
+                'console',
+            },
+            size = 10,
+            position = 'bottom',
+        },
     },
-    {
-      elements = {
-        'repl',
-        'console',
-      },
-      size = 10,
-      position = 'bottom',
-    },
-  },
 }
diff --git a/.config/nvim/lua/plugins/config/gitsigns.lua b/.config/nvim/lua/plugins/config/gitsigns.lua
index 9453e4f4..500f465e 100644
--- a/.config/nvim/lua/plugins/config/gitsigns.lua
+++ b/.config/nvim/lua/plugins/config/gitsigns.lua
@@ -1,36 +1,36 @@
 local status_ok, gitsigns = pcall(require, "gitsigns")
 if not status_ok then
-  return
+    return
 end
 
 gitsigns.setup {
-  signs = {
-    add = { hl = "GitSignsAdd", text = "▎", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" },
-    change = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
-    delete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
-    topdelete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
-    changedelete = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
-  },
-  signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
-  watch_gitdir = {
-    interval = 1000,
-    follow_files = true,
-  },
-  attach_to_untracked = true,
-  current_line_blame_opts = {
-    virt_text = true,
-    virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
-    delay = 1000,
-  },
-  sign_priority = 6,
-  update_debounce = 100,
-  status_formatter = nil, -- Use default
-  preview_config = {
-    -- Options passed to nvim_open_win
-    border = "single",
-    style = "minimal",
-    relative = "cursor",
-    row = 0,
-    col = 1,
-  },
+    signs = {
+        add = { hl = "GitSignsAdd", text = "▎", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" },
+        change = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
+        delete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
+        topdelete = { hl = "GitSignsDelete", text = "契", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
+        changedelete = { hl = "GitSignsChange", text = "▎", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
+    },
+    signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
+    watch_gitdir = {
+        interval = 1000,
+        follow_files = true,
+    },
+    attach_to_untracked = true,
+    current_line_blame_opts = {
+        virt_text = true,
+        virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
+        delay = 1000,
+    },
+    sign_priority = 6,
+    update_debounce = 100,
+    status_formatter = nil, -- Use default
+    preview_config = {
+        -- Options passed to nvim_open_win
+        border = "single",
+        style = "minimal",
+        relative = "cursor",
+        row = 0,
+        col = 1,
+    },
 }
diff --git a/.config/nvim/lua/plugins/config/illuminate.lua b/.config/nvim/lua/plugins/config/illuminate.lua
index c1da7751..af77a7d0 100644
--- a/.config/nvim/lua/plugins/config/illuminate.lua
+++ b/.config/nvim/lua/plugins/config/illuminate.lua
@@ -1,36 +1,36 @@
 local status_ok, illuminate = pcall(require, "illuminate")
 if not status_ok then
-  return
+    return
 end
 
 vim.g.Illuminate_ftblacklist = { 'alpha', 'NvimTree' }
 
 illuminate.configure {
-  providers = {
-    "lsp",
-    "treesitter",
-    "regex",
-  },
-  delay = 200,
-  filetypes_denylist = {
-    "dirvish",
-    "fugitive",
-    "alpha",
-    "NvimTree",
-    "packer",
-    "neogitstatus",
-    "Trouble",
-    "lir",
-    "Outline",
-    "spectre_panel",
-    "toggleterm",
-    "DressingSelect",
-    "TelescopePrompt",
-  },
-  filetypes_allowlist = {},
-  modes_denylist = {},
-  modes_allowlist = {},
-  providers_regex_syntax_denylist = {},
-  providers_regex_syntax_allowlist = {},
-  under_cursor = true,
+    providers = {
+        "lsp",
+        "treesitter",
+        "regex",
+    },
+    delay = 200,
+    filetypes_denylist = {
+        "dirvish",
+        "fugitive",
+        "alpha",
+        "NvimTree",
+        "packer",
+        "neogitstatus",
+        "Trouble",
+        "lir",
+        "Outline",
+        "spectre_panel",
+        "toggleterm",
+        "DressingSelect",
+        "TelescopePrompt",
+    },
+    filetypes_allowlist = {},
+    modes_denylist = {},
+    modes_allowlist = {},
+    providers_regex_syntax_denylist = {},
+    providers_regex_syntax_allowlist = {},
+    under_cursor = true,
 }
diff --git a/.config/nvim/lua/plugins/config/impatient.lua b/.config/nvim/lua/plugins/config/impatient.lua
index b172d9b0..8fe79f7f 100644
--- a/.config/nvim/lua/plugins/config/impatient.lua
+++ b/.config/nvim/lua/plugins/config/impatient.lua
@@ -1,7 +1,7 @@
 -- This file is currently not used anywhere
 local status_ok, impatient = pcall(require, "impatient")
 if not status_ok then
-  return
+    return
 end
 
 impatient.enable_profile()
diff --git a/.config/nvim/lua/plugins/config/indent-blankline.lua b/.config/nvim/lua/plugins/config/indent-blankline.lua
index c4bfa198..be9c1269 100644
--- a/.config/nvim/lua/plugins/config/indent-blankline.lua
+++ b/.config/nvim/lua/plugins/config/indent-blankline.lua
@@ -1,20 +1,20 @@
 local status_ok, indent_blankline = pcall(require, "indent_blankline")
 if not status_ok then
-  return
+    return
 end
 
 indent_blankline.setup {
-  char = "▏",
-  context_char = "▏",
-  show_trailing_blankline_indent = false,
-  show_first_indent_level = true,
-  use_treesitter = true,
-  show_current_context = false,
-  show_end_of_line = false,
-  buftype_exclude = { "terminal", "nofile" },
-  filetype_exclude = {
-    "help",
-    "packer",
-    "NvimTree",
-  },
+    char = "▏",
+    context_char = "▏",
+    show_trailing_blankline_indent = false,
+    show_first_indent_level = true,
+    use_treesitter = true,
+    show_current_context = false,
+    show_end_of_line = false,
+    buftype_exclude = { "terminal", "nofile" },
+    filetype_exclude = {
+        "help",
+        "packer",
+        "NvimTree",
+    },
 }
diff --git a/.config/nvim/lua/plugins/config/lf.lua b/.config/nvim/lua/plugins/config/lf.lua
index 4971019d..c24baaee 100644
--- a/.config/nvim/lua/plugins/config/lf.lua
+++ b/.config/nvim/lua/plugins/config/lf.lua
@@ -1,9 +1,9 @@
 -- Defaults
 require("lf").setup({
-  winblend = 0,
-  highlights = {
-    border = "Normal",
-    background = "Normal",
-  },
-  border = "rounded",
+    winblend = 0,
+    highlights = {
+        border = "Normal",
+        background = "Normal",
+    },
+    border = "rounded",
 })
diff --git a/.config/nvim/lua/plugins/config/lspconfig.lua b/.config/nvim/lua/plugins/config/lspconfig.lua
index 9fc842fb..134241b7 100644
--- a/.config/nvim/lua/plugins/config/lspconfig.lua
+++ b/.config/nvim/lua/plugins/config/lspconfig.lua
@@ -1,11 +1,11 @@
 local mason_lspconfig_status_ok, mason_lspconfig = pcall(require, 'mason-lspconfig')
 if not mason_lspconfig_status_ok then
-  return
+    return
 end
 
 local lspconfig_status_ok, lspconfig = pcall(require, 'lspconfig')
 if not lspconfig_status_ok then
-  return
+    return
 end
 
 local on_attach = function(client, bufnr)
@@ -13,78 +13,78 @@ end
 
 local capabilities = vim.lsp.protocol.make_client_capabilities()
 capabilities.textDocument.completion.completionItem = {
-  documentationFormat = { "markdown", "plaintext" },
-  snippetSupport = true,
-  preselectSupport = true,
-  insertReplaceSupport = true,
-  labelDetailsSupport = true,
-  deprecatedSupport = true,
-  commitCharactersSupport = true,
-  tagSupport = { valueSet = { 1 } },
-  resolveSupport = {
-    properties = {
-      "documentation",
-      "detail",
-      "additionalTextEdits",
+    documentationFormat = { "markdown", "plaintext" },
+    snippetSupport = true,
+    preselectSupport = true,
+    insertReplaceSupport = true,
+    labelDetailsSupport = true,
+    deprecatedSupport = true,
+    commitCharactersSupport = true,
+    tagSupport = { valueSet = { 1 } },
+    resolveSupport = {
+        properties = {
+            "documentation",
+            "detail",
+            "additionalTextEdits",
+        },
     },
-  },
 }
 
 local opts = {
-  on_attach = on_attach,
-  capabilities = capabilities
+    on_attach = on_attach,
+    capabilities = capabilities
 }
 
 mason_lspconfig.setup({
-  ensure_installed = {},
-  automatic_installation = true,
+    ensure_installed = {},
+    automatic_installation = true,
 })
 
 mason_lspconfig.setup_handlers({
-  function(server_name)
-    lspconfig[server_name].setup(opts)
-  end,
-  ["intelephense"] = function()
-    opts = {
-      on_attach = on_attach,
-      capabilities = capabilities,
-      init_options = {
-        storagePath = vim.fn.expand "$XDG_CACHE_HOME" .. "/intelephense",
-        globalStoragePath = vim.fn.expand "$XDG_DATA_HOME" .. "/intelephense"
-      },
-      settings = {
-        intelephense = {
-          telemetry = {
-            enable = false,
-          }
-        }
-      }
-    }
-    lspconfig["intelephense"].setup(opts)
-  end,
-  ["sumneko_lua"] = function()
-    opts = {
-      on_attach = on_attach,
-      capabilities = capabilities,
-      settings = {
-        Lua = {
-          diagnostics = {
-            globals = { "vim" },
-          },
-          workspace = {
-            library = {
-              [vim.fn.expand "$VIMRUNTIME/lua"] = true,
-              [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true
+    function(server_name)
+        lspconfig[server_name].setup(opts)
+    end,
+    ["intelephense"] = function()
+        opts = {
+            on_attach = on_attach,
+            capabilities = capabilities,
+            init_options = {
+                storagePath = vim.fn.expand "$XDG_CACHE_HOME" .. "/intelephense",
+                globalStoragePath = vim.fn.expand "$XDG_DATA_HOME" .. "/intelephense"
             },
-          },
-          telemetry = {
-            enable = false,
-          },
-          maxPreload = 100000,
-          preloadFileSize = 10000,
-        },
-      },
-    }
-    lspconfig["sumneko_lua"].setup(opts)
-  end
+            settings = {
+                intelephense = {
+                    telemetry = {
+                        enable = false,
+                    }
+                }
+            }
+        }
+        lspconfig["intelephense"].setup(opts)
+    end,
+    ["sumneko_lua"] = function()
+        opts = {
+            on_attach = on_attach,
+            capabilities = capabilities,
+            settings = {
+                Lua = {
+                    diagnostics = {
+                        globals = { "vim" },
+                    },
+                    workspace = {
+                        library = {
+                            [vim.fn.expand "$VIMRUNTIME/lua"] = true,
+                            [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true
+                        },
+                    },
+                    telemetry = {
+                        enable = false,
+                    },
+                    maxPreload = 100000,
+                    preloadFileSize = 10000,
+                },
+            },
+        }
+        lspconfig["sumneko_lua"].setup(opts)
+    end
 })
diff --git a/.config/nvim/lua/plugins/config/lualine.lua b/.config/nvim/lua/plugins/config/lualine.lua
index 7c8c712f..453dd8c9 100644
--- a/.config/nvim/lua/plugins/config/lualine.lua
+++ b/.config/nvim/lua/plugins/config/lualine.lua
@@ -1,199 +1,199 @@
 local status_ok, lualine = pcall(require, 'lualine')
 if not status_ok then
-  return
+    return
 end
 
 local colors = require('tokyonight.colors').setup({ transform = true })
-local icons = require('config.iconlist')
+local icons = require('config.icons').list
 
 local conditions = {
-  buffer_not_empty = function()
-    return vim.fn.empty(vim.fn.expand('%:t')) ~= 1
-  end,
-  hide_in_width = function()
-    return vim.fn.winwidth(0) > 80
-  end,
-  check_git_workspace = function()
-    local filepath = vim.fn.expand('%:p:h')
-    local gitdir = vim.fn.finddir('.git', filepath .. ';')
-    return gitdir and #gitdir > 0 and #gitdir < #filepath
-  end,
+    buffer_not_empty = function()
+        return vim.fn.empty(vim.fn.expand('%:t')) ~= 1
+    end,
+    hide_in_width = function()
+        return vim.fn.winwidth(0) > 80
+    end,
+    check_git_workspace = function()
+        local filepath = vim.fn.expand('%:p:h')
+        local gitdir = vim.fn.finddir('.git', filepath .. ';')
+        return gitdir and #gitdir > 0 and #gitdir < #filepath
+    end,
 }
 
 local config = {
-  options = {
-    component_separators = '',
-    section_separators = '',
-    -- theme = {
-    --   normal = { c = { fg = colors.fg, bg = colors.bg } },
-    --   inactive = { c = { fg = colors.fg, bg = colors.bg } },
-    -- },
-    disabled_filetypes = {
-      statusline = { 'alpha' }
+    options = {
+        component_separators = '',
+        section_separators = '',
+        -- theme = {
+        --   normal = { c = { fg = colors.fg, bg = colors.bg } },
+        --   inactive = { c = { fg = colors.fg, bg = colors.bg } },
+        -- },
+        disabled_filetypes = {
+            statusline = { 'alpha' }
+        },
+        ignore_focus = { 'toggleterm', 'NvimTree' },
+        globalstatus = true,
     },
-    ignore_focus = { 'toggleterm', 'NvimTree' },
-    globalstatus = true,
-  },
-  sections = {
-    lualine_a = {},
-    lualine_b = {},
-    lualine_y = {},
-    lualine_z = {},
-    lualine_c = {},
-    lualine_x = {},
-  },
-  inactive_sections = {
-    lualine_a = {},
-    lualine_b = {},
-    lualine_y = {},
-    lualine_z = {},
-    lualine_c = {},
-    lualine_x = {},
-  }
+    sections = {
+        lualine_a = {},
+        lualine_b = {},
+        lualine_y = {},
+        lualine_z = {},
+        lualine_c = {},
+        lualine_x = {},
+    },
+    inactive_sections = {
+        lualine_a = {},
+        lualine_b = {},
+        lualine_y = {},
+        lualine_z = {},
+        lualine_c = {},
+        lualine_x = {},
+    }
 }
 
 local function ins_left(component)
-  table.insert(config.sections.lualine_c, component)
+    table.insert(config.sections.lualine_c, component)
 end
 
 local function ins_right(component)
-  table.insert(config.sections.lualine_x, component)
+    table.insert(config.sections.lualine_x, component)
 end
 
 local function mode_color()
-  local color = {
-    n = colors.red,
-    i = colors.green,
-    v = colors.magenta,
-    [''] = colors.magenta,
-    V = colors.magenta,
-    c = colors.blue,
-    no = colors.red,
-    s = colors.orange,
-    S = colors.orange,
-    [''] = colors.orange,
-    ic = colors.yellow,
-    R = colors.violet,
-    Rv = colors.violet,
-    cv = colors.red,
-    ce = colors.red,
-    r = colors.cyan,
-    rm = colors.cyan,
-    ['r?'] = colors.cyan,
-    ['!'] = colors.red,
-    t = colors.red,
-  }
-  return { fg = color[vim.fn.mode()] }
+    local color = {
+        n = colors.red,
+        i = colors.green,
+        v = colors.magenta,
+        [''] = colors.magenta,
+        V = colors.magenta,
+        c = colors.blue,
+        no = colors.red,
+        s = colors.orange,
+        S = colors.orange,
+        [''] = colors.orange,
+        ic = colors.yellow,
+        R = colors.violet,
+        Rv = colors.violet,
+        cv = colors.red,
+        ce = colors.red,
+        r = colors.cyan,
+        rm = colors.cyan,
+        ['r?'] = colors.cyan,
+        ['!'] = colors.red,
+        t = colors.red,
+    }
+    return { fg = color[vim.fn.mode()] }
 end
 
 ins_left {
-  function()
-    return '▊'
-  end,
-  color = function()
-    return mode_color()
-  end,
-  padding = { right = 1 },
+    function()
+        return '▊'
+    end,
+    color = function()
+        return mode_color()
+    end,
+    padding = { right = 1 },
 }
 
 ins_left {
-  function()
-    local msg = 'No Active Lsp'
-    local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
-    local clients = vim.lsp.get_active_clients()
-    if next(clients) == nil then
-      return msg
-    end
-    for _, client in ipairs(clients) do
-      local filetypes = client.config.filetypes
-      if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
-        return client.name
-      end
-    end
-    return msg
-  end,
-  icon = ' LSP:',
-  color = { fg = colors.white },
+    function()
+        local msg = 'No Active Lsp'
+        local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
+        local clients = vim.lsp.get_active_clients()
+        if next(clients) == nil then
+            return msg
+        end
+        for _, client in ipairs(clients) do
+            local filetypes = client.config.filetypes
+            if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
+                return client.name
+            end
+        end
+        return msg
+    end,
+    icon = ' LSP:',
+    color = { fg = colors.white },
 }
 
 ins_left {
-  'diagnostics',
-  sources = { 'nvim_diagnostic' },
-  symbols = { error = icons.diagnostics.BoldError .. ' ', warn = icons.diagnostics.BoldWarning .. ' ',
-    info = icons.diagnostics.BoldInformation },
-  diagnostics_color = {
-    color_error = { fg = colors.red },
-    color_warn = { fg = colors.yellow },
-    color_info = { fg = colors.cyan },
-  },
+    'diagnostics',
+    sources = { 'nvim_diagnostic' },
+    symbols = { error = icons.diagnostics.BoldError .. ' ', warn = icons.diagnostics.BoldWarning .. ' ',
+        info = icons.diagnostics.BoldInformation },
+    diagnostics_color = {
+        color_error = { fg = colors.red },
+        color_warn = { fg = colors.yellow },
+        color_info = { fg = colors.cyan },
+    },
 }
 
 ins_left {
-  function()
-    return '%='
-  end,
+    function()
+        return '%='
+    end,
 }
 
 ins_left {
-  'filename',
-  color = { fg = colors.magenta, gui = 'bold' },
+    'filename',
+    color = { fg = colors.magenta, gui = 'bold' },
 }
 
 ins_left {
-  function()
-    local current_line = vim.fn.line "."
-    local total_lines = vim.fn.line "$"
-    local chars = icons.progress
-    local line_ratio = current_line / total_lines
-    local index = math.ceil(line_ratio * #chars)
-    return chars[index]
-  end,
-  color = { fg = colors.yellow }
+    function()
+        local current_line = vim.fn.line "."
+        local total_lines = vim.fn.line "$"
+        local chars = icons.progress
+        local line_ratio = current_line / total_lines
+        local index = math.ceil(line_ratio * #chars)
+        return chars[index]
+    end,
+    color = { fg = colors.yellow }
 }
 
 ins_left {
-  '%04l:%04c',
+    '%04l:%04c',
 }
 
 ins_right {
-  'o:encoding',
-  fmt = string.upper,
-  cond = conditions.hide_in_width,
-  color = { fg = colors.green, gui = 'bold' },
+    'o:encoding',
+    fmt = string.upper,
+    cond = conditions.hide_in_width,
+    color = { fg = colors.green, gui = 'bold' },
 }
 
 ins_right {
-  'fileformat',
-  fmt = string.upper,
-  icons_enabled = false,
-  color = { fg = colors.green, gui = 'bold' },
+    'fileformat',
+    fmt = string.upper,
+    icons_enabled = false,
+    color = { fg = colors.green, gui = 'bold' },
 }
 
 ins_right {
-  'branch',
-  icon = icons.git.Branch,
-  color = { fg = colors.violet, gui = 'bold' },
+    'branch',
+    icon = icons.git.Branch,
+    color = { fg = colors.violet, gui = 'bold' },
 }
 
 ins_right {
-  'diff',
-  symbols = { added = ' ', modified = '柳', removed = ' ' },
-  diff_color = {
-    added = { fg = colors.green },
-    modified = { fg = colors.orange },
-    removed = { fg = colors.red },
-  },
-  cond = conditions.hide_in_width,
+    'diff',
+    symbols = { added = ' ', modified = '柳', removed = ' ' },
+    diff_color = {
+        added = { fg = colors.green },
+        modified = { fg = colors.orange },
+        removed = { fg = colors.red },
+    },
+    cond = conditions.hide_in_width,
 }
 
 ins_right {
-  function()
-    return '▊'
-  end,
-  color = function()
-    return mode_color()
-  end,
-  padding = { left = 1 },
+    function()
+        return '▊'
+    end,
+    color = function()
+        return mode_color()
+    end,
+    padding = { left = 1 },
 }
 
 lualine.setup(config)
diff --git a/.config/nvim/lua/plugins/config/luasnip.lua b/.config/nvim/lua/plugins/config/luasnip.lua
index d4391cf4..73c9304f 100644
--- a/.config/nvim/lua/plugins/config/luasnip.lua
+++ b/.config/nvim/lua/plugins/config/luasnip.lua
@@ -1,11 +1,11 @@
 local status_ok, luasnip = pcall(require, "LuaSnip")
 if not status_ok then
-  return
+    return
 end
 
 local options = {
-  history = true,
-  updateevents = "TextChanged,TextChangedI",
+    history = true,
+    updateevents = "TextChanged,TextChangedI",
 }
 
 luasnip.config.set_config(options)
@@ -13,11 +13,11 @@ require("luasnip.loaders.from_vscode").lazy_load { paths = vim.g.luasnippets_pat
 require("luasnip.loaders.from_vscode").lazy_load()
 
 vim.api.nvim_create_autocmd("InsertLeave", {
-  callback = function()
-    if require("luasnip").session.current_nodes[vim.api.nvim_get_current_buf()]
-        and not require("luasnip").session.jump_active
-    then
-      require("luasnip").unlink_current()
-    end
-  end,
+    callback = function()
+        if require("luasnip").session.current_nodes[vim.api.nvim_get_current_buf()]
+            and not require("luasnip").session.jump_active
+        then
+            require("luasnip").unlink_current()
+        end
+    end,
 })
diff --git a/.config/nvim/lua/plugins/config/mason.lua b/.config/nvim/lua/plugins/config/mason.lua
index b5ca18fa..d03efefd 100644
--- a/.config/nvim/lua/plugins/config/mason.lua
+++ b/.config/nvim/lua/plugins/config/mason.lua
@@ -1,21 +1,21 @@
 local status_ok, mason = pcall(require, 'mason')
 if not status_ok then
-  return
+    return
 end
 
-local icons = require('config.iconlist')
+local icons = require('config.icons').list
 
 local settings = {
-  ui = {
-    border = "none",
-    icons = {
-      package_installed = icons.ui.Check,
-      package_pending = icons.ui.BoldArrowRight,
-      package_uninstalled = icons.ui.BoldClose,
+    ui = {
+        border = "none",
+        icons = {
+            package_installed = icons.ui.Check,
+            package_pending = icons.ui.BoldArrowRight,
+            package_uninstalled = icons.ui.BoldClose,
+        },
     },
-  },
-  log_level = vim.log.levels.INFO,
-  max_concurrent_installers = 4,
+    log_level = vim.log.levels.INFO,
+    max_concurrent_installers = 4,
 }
 
 mason.setup(settings)
diff --git a/.config/nvim/lua/plugins/config/null-ls.lua b/.config/nvim/lua/plugins/config/null-ls.lua
index f46311b7..6240db95 100644
--- a/.config/nvim/lua/plugins/config/null-ls.lua
+++ b/.config/nvim/lua/plugins/config/null-ls.lua
@@ -1,6 +1,6 @@
 local null_ls_status_ok, null_ls = pcall(require, 'null-ls')
 if not null_ls_status_ok then
-  return
+    return
 end
 
 -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting
@@ -12,10 +12,10 @@ local diagnostics = null_ls.builtins.diagnostics
 -- https://github.com/LunarVim/LunarVim/blob/master/lua/lvim/lsp/utils.lua#L172
 
 null_ls.setup {
-  debug = false,
-  sources = {
-     formatting.black.with { extra_args = { "--fast" } },
-     -- formatting.stylua,
-     -- diagnostics.flake8,
-  },
+    debug = false,
+    sources = {
+        formatting.black.with { extra_args = { "--fast" } },
+        -- formatting.stylua,
+        -- diagnostics.flake8,
+    },
 }
diff --git a/.config/nvim/lua/plugins/config/nvim-colorizer.lua b/.config/nvim/lua/plugins/config/nvim-colorizer.lua
index 10b0f45a..6b7fa411 100644
--- a/.config/nvim/lua/plugins/config/nvim-colorizer.lua
+++ b/.config/nvim/lua/plugins/config/nvim-colorizer.lua
@@ -1,13 +1,13 @@
 local status_ok, colorizer = pcall(require, 'colorizer')
 if not status_ok then
-  return
+    return
 end
 colorizer.setup({ '*' }, {
-  RGB = true, -- #RGB hex codes
-  RRGGBB = true, -- #RRGGBB hex codes
-  RRGGBBAA = true, -- #RRGGBBAA hex codes
-  rgb_fn = true, -- CSS rgb() and rgba() functions
-  hsl_fn = true, -- CSS hsl() and hsla() functions
-  css = true, -- Enable all CSS features: rgb_fn, hsl_fn, names, RGB, RRGGBB
-  css_fn = true, -- Enable all CSS *functions*: rgb_fn, hsl_fn
+    RGB = true, -- #RGB hex codes
+    RRGGBB = true, -- #RRGGBB hex codes
+    RRGGBBAA = true, -- #RRGGBBAA hex codes
+    rgb_fn = true, -- CSS rgb() and rgba() functions
+    hsl_fn = true, -- CSS hsl() and hsla() functions
+    css = true, -- Enable all CSS features: rgb_fn, hsl_fn, names, RGB, RRGGBB
+    css_fn = true, -- Enable all CSS *functions*: rgb_fn, hsl_fn
 })
diff --git a/.config/nvim/lua/plugins/config/project.lua b/.config/nvim/lua/plugins/config/project.lua
index 6a62c761..a1290bbe 100644
--- a/.config/nvim/lua/plugins/config/project.lua
+++ b/.config/nvim/lua/plugins/config/project.lua
@@ -1,18 +1,18 @@
 local status_ok, project = pcall(require, 'project_nvim')
 if not status_ok then
-  return
+    return
 end
 project.setup({
-  -- detection_methods = { "lsp", "pattern" }, -- NOTE: lsp detection will get annoying with multiple langs in one project
-  detection_methods = { "pattern" },
+    -- detection_methods = { "lsp", "pattern" }, -- NOTE: lsp detection will get annoying with multiple langs in one project
+    detection_methods = { "pattern" },
 
-  -- patterns used to detect root dir, when **"pattern"** is in detection_methods
-  patterns = { ".git", "Makefile", "package.json" },
+    -- patterns used to detect root dir, when **"pattern"** is in detection_methods
+    patterns = { ".git", "Makefile", "package.json" },
 })
 
 local tele_status_ok, telescope = pcall(require, 'telescope')
 if not tele_status_ok then
-  return
+    return
 end
 
 telescope.load_extension('projects')
diff --git a/.config/nvim/lua/plugins/config/telescope.lua b/.config/nvim/lua/plugins/config/telescope.lua
index 176c6ac6..dea62a38 100644
--- a/.config/nvim/lua/plugins/config/telescope.lua
+++ b/.config/nvim/lua/plugins/config/telescope.lua
@@ -1,67 +1,67 @@
 local status_ok, telescope = pcall(require, 'telescope')
 if not status_ok then
-  return
+    return
 end
 
-local icons = require('config.iconlist')
+local icons = require('config.icons').list
 
 telescope.setup {
-  defaults = {
+    defaults = {
 
-    prompt_prefix = icons.ui.Telescope,
-    selection_caret = icons.ui.Forward,
-    file_ignore_patterns = { ".git/", "node_modules" },
+        prompt_prefix = icons.ui.Telescope,
+        selection_caret = icons.ui.Forward,
+        file_ignore_patterns = { ".git/", "node_modules" },
 
-  },
+    },
 }
 telescope.setup {
-  defaults = {
-    vimgrep_arguments = {
-      "rg",
-      "-L",
-      "--color=never",
-      "--no-heading",
-      "--with-filename",
-      "--line-number",
-      "--column",
-      "--smart-case",
+    defaults = {
+        vimgrep_arguments = {
+            "rg",
+            "-L",
+            "--color=never",
+            "--no-heading",
+            "--with-filename",
+            "--line-number",
+            "--column",
+            "--smart-case",
+        },
+        prompt_prefix = " " .. icons.ui.Search .. "  ",
+        selection_caret = "  ",
+        entry_prefix = "  ",
+        initial_mode = "insert",
+        selection_strategy = "reset",
+        sorting_strategy = "ascending",
+        layout_strategy = "horizontal",
+        layout_config = {
+            horizontal = {
+                prompt_position = "top",
+                preview_width = 0.55,
+                results_width = 0.8,
+            },
+            vertical = {
+                mirror = false,
+            },
+            width = 0.87,
+            height = 0.80,
+            preview_cutoff = 120,
+        },
+        file_sorter = require("telescope.sorters").get_fuzzy_file,
+        file_ignore_patterns = { ".git/", "node_modules" },
+        generic_sorter = require("telescope.sorters").get_generic_fuzzy_sorter,
+        path_display = { "truncate" },
+        winblend = 0,
+        border = {},
+        borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" },
+        color_devicons = true,
+        set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil,
+        file_previewer = require("telescope.previewers").vim_buffer_cat.new,
+        grep_previewer = require("telescope.previewers").vim_buffer_vimgrep.new,
+        qflist_previewer = require("telescope.previewers").vim_buffer_qflist.new,
+        -- Developer configurations: Not meant for general override
+        buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker,
+        mappings = {
+            n = { ["q"] = require("telescope.actions").close },
+        },
     },
-    prompt_prefix = " " .. icons.ui.Search .. "  ",
-    selection_caret = "  ",
-    entry_prefix = "  ",
-    initial_mode = "insert",
-    selection_strategy = "reset",
-    sorting_strategy = "ascending",
-    layout_strategy = "horizontal",
-    layout_config = {
-      horizontal = {
-        prompt_position = "top",
-        preview_width = 0.55,
-        results_width = 0.8,
-      },
-      vertical = {
-        mirror = false,
-      },
-      width = 0.87,
-      height = 0.80,
-      preview_cutoff = 120,
-    },
-    file_sorter = require("telescope.sorters").get_fuzzy_file,
-    file_ignore_patterns = { ".git/", "node_modules" },
-    generic_sorter = require("telescope.sorters").get_generic_fuzzy_sorter,
-    path_display = { "truncate" },
-    winblend = 0,
-    border = {},
-    borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" },
-    color_devicons = true,
-    set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil,
-    file_previewer = require("telescope.previewers").vim_buffer_cat.new,
-    grep_previewer = require("telescope.previewers").vim_buffer_vimgrep.new,
-    qflist_previewer = require("telescope.previewers").vim_buffer_qflist.new,
-    -- Developer configurations: Not meant for general override
-    buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker,
-    mappings = {
-      n = { ["q"] = require("telescope.actions").close },
-    },
-  },
 }
diff --git a/.config/nvim/lua/plugins/config/todo-comments.lua b/.config/nvim/lua/plugins/config/todo-comments.lua
index b3368daa..51a35d5e 100644
--- a/.config/nvim/lua/plugins/config/todo-comments.lua
+++ b/.config/nvim/lua/plugins/config/todo-comments.lua
@@ -1,10 +1,10 @@
 local status_ok, todo_comments = pcall(require, 'todo-comments')
 if not status_ok then
-  return
+    return
 end
 todo_comments.setup({
-  highlight = {
-    multiline = false,
-    comments_only = false
-  }
+    highlight = {
+        multiline = false,
+        comments_only = false
+    }
 })
diff --git a/.config/nvim/lua/plugins/config/toggleterm.lua b/.config/nvim/lua/plugins/config/toggleterm.lua
index b6d8ada5..16f9ecac 100644
--- a/.config/nvim/lua/plugins/config/toggleterm.lua
+++ b/.config/nvim/lua/plugins/config/toggleterm.lua
@@ -1,33 +1,33 @@
 local status_ok, toggleterm = pcall(require, 'toggleterm')
 if not status_ok then
-  return
+    return
 end
 
 toggleterm.setup({
-  size = 20,
-  open_mapping = [[<c-\>]],
-  hide_numbers = true,
-  shade_terminals = true,
-  shading_factor = 2,
-  start_in_insert = true,
-  insert_mappings = true,
-  persist_size = true,
-  direction = "float",
-  close_on_exit = true,
-  shell = vim.o.shell,
-  float_opts = {
-    winblend = 0,
-    highlights = {
-      border = "Normal",
-      background = "Normal",
+    size = 20,
+    open_mapping = [[<c-\>]],
+    hide_numbers = true,
+    shade_terminals = true,
+    shading_factor = 2,
+    start_in_insert = true,
+    insert_mappings = true,
+    persist_size = true,
+    direction = "float",
+    close_on_exit = true,
+    shell = vim.o.shell,
+    float_opts = {
+        winblend = 0,
+        highlights = {
+            border = "Normal",
+            background = "Normal",
+        },
+        border = "rounded",
     },
-    border = "rounded",
-  },
 })
 
 local Terminal = require("toggleterm.terminal").Terminal
 local lazygit = Terminal:new({ cmd = "lazygit", hidden = true })
 
 function _LAZYGIT_TOGGLE()
-  lazygit:toggle()
+    lazygit:toggle()
 end
diff --git a/.config/nvim/lua/plugins/config/tokyonight.lua b/.config/nvim/lua/plugins/config/tokyonight.lua
index 6a8eb8c1..52442420 100644
--- a/.config/nvim/lua/plugins/config/tokyonight.lua
+++ b/.config/nvim/lua/plugins/config/tokyonight.lua
@@ -1,12 +1,12 @@
 local status_ok, tokyonight = pcall(require, 'tokyonight')
 if not status_ok then
-  return
+    return
 end
 
 tokyonight.setup({
-  transparent = true,
-  terminal_colors = true,
-  dim_inactive = true,
-  lualine_bold = true,
+    transparent = true,
+    terminal_colors = true,
+    dim_inactive = true,
+    lualine_bold = true,
 })
 vim.cmd [[colorscheme tokyonight]]
diff --git a/.config/nvim/lua/plugins/config/treesitter.lua b/.config/nvim/lua/plugins/config/treesitter.lua
index 95043676..004f5b73 100644
--- a/.config/nvim/lua/plugins/config/treesitter.lua
+++ b/.config/nvim/lua/plugins/config/treesitter.lua
@@ -1,15 +1,15 @@
 local status_ok, configs = pcall(require, 'nvim-treesitter.configs')
 if not status_ok then
-  return
+    return
 end
 configs.setup({
-  ensure_installed = { "lua", "bash", "c" },
-  auto_install = true,
-  autopairs = {
-    enable = false,
-  },
-  context_commentstring = {
-    enable = true,
-    enable_autocmd = false,
-  },
+    ensure_installed = { "lua", "bash", "c" },
+    auto_install = true,
+    autopairs = {
+        enable = false,
+    },
+    context_commentstring = {
+        enable = true,
+        enable_autocmd = false,
+    },
 })
diff --git a/.config/nvim/lua/plugins/config/whichkey.lua b/.config/nvim/lua/plugins/config/whichkey.lua
index d619a577..1f8605e6 100644
--- a/.config/nvim/lua/plugins/config/whichkey.lua
+++ b/.config/nvim/lua/plugins/config/whichkey.lua
@@ -1,51 +1,51 @@
 local status_ok, whichkey = pcall(require, 'which-key')
 if not status_ok then
-  return
+    return
 end
-local icons = require('config.iconlist')
+local icons = require('config.icons').list
 
 whichkey.setup {
-  marks = false,
-  registers = false,
-  presets = {
-    operators = false,
-    motions = false,
-    text_objects = false,
-    windows = false,
-    nav = false,
-    z = false,
-    g = false,
-  },
-  spelling = {
-    enabled = false,
-    suggestions = 20,
-  },
-  icons = {
-    breadcrumb = icons.ui.DoubleChevronRight,
-    separator = icons.ui.BoldArrowRight,
-    group = icons.ui.Plus,
-  },
-  popup_mappings = {
-    scroll_down = "<c-d>",
-    scroll_up = "<c-u>",
-  },
-  window = {
-    border = "single",
-    position = "bottom",
-    margin = { 1, 0, 1, 0 },
-    padding = { 2, 2, 2, 2 },
-    winblend = 0,
-  },
-  layout = {
-    height = { min = 4, max = 25 },
-    width = { min = 20, max = 50 },
-    spacing = 3,
-    align = "left",
-  },
-  hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "call", "lua", "^:", "^ " },
-  triggers = "auto",
-  triggers_blacklist = {
-    i = { "j", "k" },
-    v = { "j", "k", "c", "y", "d", "v" },
-  },
+    marks = false,
+    registers = false,
+    presets = {
+        operators = false,
+        motions = false,
+        text_objects = false,
+        windows = false,
+        nav = false,
+        z = false,
+        g = false,
+    },
+    spelling = {
+        enabled = false,
+        suggestions = 20,
+    },
+    icons = {
+        breadcrumb = icons.ui.DoubleChevronRight,
+        separator = icons.ui.BoldArrowRight,
+        group = icons.ui.Plus,
+    },
+    popup_mappings = {
+        scroll_down = "<c-d>",
+        scroll_up = "<c-u>",
+    },
+    window = {
+        border = "single",
+        position = "bottom",
+        margin = { 1, 0, 1, 0 },
+        padding = { 2, 2, 2, 2 },
+        winblend = 0,
+    },
+    layout = {
+        height = { min = 4, max = 25 },
+        width = { min = 20, max = 50 },
+        spacing = 3,
+        align = "left",
+    },
+    hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "call", "lua", "^:", "^ " },
+    triggers = "auto",
+    triggers_blacklist = {
+        i = { "j", "k" },
+        v = { "j", "k", "c", "y", "d", "v" },
+    },
 }
diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua
index 50409cc1..24e2b2ab 100644
--- a/.config/nvim/lua/plugins/init.lua
+++ b/.config/nvim/lua/plugins/init.lua
@@ -1,244 +1,250 @@
-local icons = require "config.iconlist"
+local icons = require('config.icons').list
 local plugins = {
-  { "wbthomason/packer.nvim",
-    config = function()
-      require('funcs').map("packer")
-    end
-  },
-  { "nvim-lua/plenary.nvim" },
-  { "lewis6991/impatient.nvim" },
-  { "tpope/vim-surround",
-    setup = function()
-      require('funcs').on_file_open("vim-surround")
-    end
-  },
-  { "tpope/vim-repeat",
-    setup = function()
-      require('funcs').on_file_open("vim-repeat")
-    end
-  },
-  { "fladson/vim-kitty",
-    ft = "kitty"
-  },
-  { "kyazdani42/nvim-web-devicons" },
-  { "felipec/vim-sanegx",
-    setup = function()
-      require('funcs').on_file_open("vim-sanegx")
-    end
-  },
-  { "folke/which-key.nvim",
-    config = function()
-      require('plugins.config.whichkey')
-    end,
-  },
-  { "folke/tokyonight.nvim",
-    config = function()
-      require('plugins.config.tokyonight')
-    end
-  },
-  { "folke/todo-comments.nvim",
-    setup = function()
-      require('funcs').on_file_open("todo-comments.nvim")
-    end,
-    config = function()
-      require('plugins.config.todo-comments')
-    end
-  },
-  { "akinsho/bufferline.nvim",
-    setup = function()
-      require('funcs').on_file_open("bufferline.nvim")
-      require('funcs').map("bufferline")
-    end,
-    config = function()
-      require('plugins.config.bufferline')
-    end,
-  },
-  { "nvim-lualine/lualine.nvim",
-    setup = function()
-      require('funcs').on_file_open("lualine.nvim")
-    end,
-    config = function()
-      require('plugins.config.lualine')
-    end,
-  },
-  { "akinsho/toggleterm.nvim",
-    config = function()
-      require('plugins.config.toggleterm')
-    end,
-  },
-  { "lukas-reineke/indent-blankline.nvim",
-    after = "nvim-treesitter",
-    setup = function()
-      require('funcs').on_file_open("indent-blankline.nvim")
-      require('funcs').map("blankline")
-    end,
-    config = function()
-      require('plugins.config.indent-blankline')
-    end,
-  },
-  { "norcalli/nvim-colorizer.lua",
-    setup = function()
-      require('funcs').on_file_open("nvim-colorizer.lua")
-    end,
-    config = function()
-      require('plugins.config.nvim-colorizer')
-    end,
-  },
-  { "RRethy/vim-illuminate",
-    setup = function()
-      require('funcs').on_file_open("vim-illuminate")
-      require('funcs').map("illuminate")
-    end,
-    config = function()
-      require('plugins.config.illuminate')
-    end,
-  },
-  { "nvim-treesitter/nvim-treesitter",
-    setup = function()
-      require('funcs').on_file_open("nvim-treesitter")
-    end,
-    cmd = {
-      "TSInstall",
-      "TSBufEnable",
-      "TSBufDisable",
-      "TSEnable",
-      "TSDisable",
-      "TSModuleInfo"
+    { "wbthomason/packer.nvim",
+        config = function()
+            require('funcs').map("packer")
+        end
+    },
+    { "nvim-lua/plenary.nvim" },
+    { "lewis6991/impatient.nvim" },
+    { "tpope/vim-surround",
+        setup = function()
+            require('funcs').on_file_open("vim-surround")
+        end
+    },
+    { "tpope/vim-repeat",
+        setup = function()
+            require('funcs').on_file_open("vim-repeat")
+        end
+    },
+    { "fladson/vim-kitty",
+        ft = "kitty"
+    },
+    { "kyazdani42/nvim-web-devicons" },
+    { "felipec/vim-sanegx",
+        setup = function()
+            require('funcs').on_file_open("vim-sanegx")
+        end
+    },
+    { "folke/which-key.nvim",
+        config = function()
+            require('plugins.config.whichkey')
+        end,
+    },
+    { "folke/tokyonight.nvim",
+        config = function()
+            require('plugins.config.tokyonight')
+        end
+    },
+    { "folke/todo-comments.nvim",
+        setup = function()
+            require('funcs').on_file_open("todo-comments.nvim")
+        end,
+        config = function()
+            require('plugins.config.todo-comments')
+        end
+    },
+    { "akinsho/bufferline.nvim",
+        setup = function()
+            require('funcs').on_file_open("bufferline.nvim")
+            require('funcs').map("bufferline")
+        end,
+        config = function()
+            require('plugins.config.bufferline')
+        end,
+    },
+    { "nvim-lualine/lualine.nvim",
+        setup = function()
+            require('funcs').on_file_open("lualine.nvim")
+        end,
+        config = function()
+            require('plugins.config.lualine')
+        end,
+    },
+    { "akinsho/toggleterm.nvim",
+        config = function()
+            require('plugins.config.toggleterm')
+        end,
+    },
+    { "lukas-reineke/indent-blankline.nvim",
+        after = "nvim-treesitter",
+        setup = function()
+            require('funcs').on_file_open("indent-blankline.nvim")
+            require('funcs').map("blankline")
+        end,
+        config = function()
+            require('plugins.config.indent-blankline')
+        end,
+    },
+    { "norcalli/nvim-colorizer.lua",
+        setup = function()
+            require('funcs').on_file_open("nvim-colorizer.lua")
+        end,
+        config = function()
+            require('plugins.config.nvim-colorizer')
+        end,
+    },
+    { "RRethy/vim-illuminate",
+        setup = function()
+            require('funcs').on_file_open("vim-illuminate")
+            require('funcs').map("illuminate")
+        end,
+        config = function()
+            require('plugins.config.illuminate')
+        end,
+    },
+    { "nvim-treesitter/nvim-treesitter",
+        setup = function()
+            require('funcs').on_file_open("nvim-treesitter")
+        end,
+        cmd = {
+            "TSInstall",
+            "TSBufEnable",
+            "TSBufDisable",
+            "TSEnable",
+            "TSDisable",
+            "TSModuleInfo"
+        },
+        run = ":TSUpdate",
+        config = function()
+            require('plugins.config.treesitter')
+        end,
+    },
+    { "lewis6991/gitsigns.nvim",
+        ft = "gitcommit",
+        setup = function()
+            require('funcs').gitsigns()
+        end,
+        config = function()
+            require('plugins.config.gitsigns')
+        end,
+    },
+    { "williamboman/mason.nvim",
+        setup = function()
+            require('funcs').map("mason")
+        end,
+        config = function()
+            require "plugins.config.mason"
+        end,
+    },
+    { "williamboman/mason-lspconfig.nvim" },
+    { "neovim/nvim-lspconfig",
+        after = "mason-lspconfig.nvim",
+        setup = function()
+            require('funcs').on_file_open("nvim-lspconfig")
+            require('funcs').map("lspconfig")
+        end,
+        config = function()
+            require('plugins.config.lspconfig')
+        end,
+    },
+    { "jose-elias-alvarez/null-ls.nvim",
+        config = function()
+            require('plugins.config.null-ls')
+        end,
+    },
+    { "rcarriga/nvim-dap-ui",
+        after = "nvim-dap",
+        setup = function()
+            require('funcs').on_file_open("nvim-dap-ui")
+        end,
+        config = function()
+            require('plugins.config.dapui')
+        end,
+    },
+    { "mfussenegger/nvim-dap",
+        setup = function()
+            require('funcs').on_file_open("nvim-dap")
+            require('funcs').map("dap")
+        end,
+        config = function()
+            require('plugins.config.dap')
+        end,
+    },
+    { "olical/aniseed" },
+    { "olical/conjure" },
+    { "rafamadriz/friendly-snippets",
+        event = "InsertEnter",
+        module = { "cmp", "cmp_nvim_lsp" },
+    },
+    { "hrsh7th/nvim-cmp",
+        after = "friendly-snippets",
+        config = function()
+            require('plugins.config.cmp')
+        end,
+    },
+    { "L3MON4D3/LuaSnip",
+        after = "nvim-cmp",
+        config = function()
+            require('plugins.config.luasnip')
+        end,
+    },
+    { "saadparwaiz1/cmp_luasnip", after = "LuaSnip" },
+    { "hrsh7th/cmp-nvim-lua", after = "cmp_luasnip" },
+    { "hrsh7th/cmp-nvim-lsp", after = "cmp-nvim-lua" },
+    { "hrsh7th/cmp-buffer", after = "cmp-nvim-lsp" },
+    { "hrsh7th/cmp-path", after = "cmp-buffer" },
+    { "paterjason/cmp-conjure",
+        after = { "cmp-buffer", "conjure" },
+        ft = "fennel"
+    },
+    { "onsails/lspkind.nvim" },
+    { "windwp/nvim-autopairs",
+        after = "nvim-cmp",
+        config = function()
+            require('plugins.config.autopairs')
+        end,
+    },
+    { "goolord/alpha-nvim",
+        config = function()
+            require('plugins.config.alpha')
+        end,
+    },
+    { "numToStr/Comment.nvim",
+        config = function()
+            require('plugins.config.comment')
+        end,
+        setup = function()
+            require('funcs').on_file_open("Comment.nvim")
+            require('funcs').map("comment")
+        end,
+    },
+    { "lmburns/lf.nvim",
+        config = function()
+            require('plugins.config.lf')
+            require('funcs').map("lf")
+        end
+    },
+    { "nvim-telescope/telescope.nvim",
+        config = function()
+            require('plugins.config.telescope')
+            require('funcs').map("telescope")
+        end,
+    },
+    { "ahmedkhalf/project.nvim",
+        after = "telescope.nvim",
+        config = function()
+            require('plugins.config.project')
+        end,
     },
-    run = ":TSUpdate",
-    config = function()
-      require('plugins.config.treesitter')
-    end,
-  },
-  { "lewis6991/gitsigns.nvim",
-    ft = "gitcommit",
-    setup = function()
-      require('funcs').gitsigns()
-    end,
-    config = function()
-      require('plugins.config.gitsigns')
-    end,
-  },
-  { "williamboman/mason.nvim",
-    setup = function()
-      require('funcs').map("mason")
-    end,
-    config = function()
-      require "plugins.config.mason"
-    end,
-  },
-  { "williamboman/mason-lspconfig.nvim" },
-  { "neovim/nvim-lspconfig",
-    after = "mason-lspconfig.nvim",
-    setup = function()
-      require('funcs').on_file_open("nvim-lspconfig")
-      require('funcs').map("lspconfig")
-    end,
-    config = function()
-      require('plugins.config.lspconfig')
-    end,
-  },
-  { "jose-elias-alvarez/null-ls.nvim",
-    config = function()
-      require('plugins.config.null-ls')
-    end,
-  },
-  { "rcarriga/nvim-dap-ui",
-    after = "nvim-dap",
-    setup = function()
-      require('funcs').on_file_open("nvim-dap-ui")
-    end,
-    config = function()
-      require('plugins.config.dapui')
-    end,
-  },
-  { "mfussenegger/nvim-dap",
-    setup = function()
-      require('funcs').on_file_open("nvim-dap")
-      require('funcs').map("dap")
-    end,
-    config = function()
-      require('plugins.config.dap')
-    end,
-  },
-  { "rafamadriz/friendly-snippets",
-    event = "InsertEnter",
-    module = { "cmp", "cmp_nvim_lsp" },
-  },
-  { "hrsh7th/nvim-cmp",
-    after = "friendly-snippets",
-    config = function()
-      require('plugins.config.cmp')
-    end,
-  },
-  { "L3MON4D3/LuaSnip",
-    after = "nvim-cmp",
-    config = function()
-      require('plugins.config.luasnip')
-    end,
-  },
-  { "saadparwaiz1/cmp_luasnip", after = "LuaSnip" },
-  { "hrsh7th/cmp-nvim-lua", after = "cmp_luasnip" },
-  { "hrsh7th/cmp-nvim-lsp", after = "cmp-nvim-lua" },
-  { "hrsh7th/cmp-buffer", after = "cmp-nvim-lsp" },
-  { "hrsh7th/cmp-path", after = "cmp-buffer" },
-  { "onsails/lspkind.nvim" },
-  { "windwp/nvim-autopairs",
-    after = "nvim-cmp",
-    config = function()
-      require('plugins.config.autopairs')
-    end,
-  },
-  { "goolord/alpha-nvim",
-    config = function()
-      require('plugins.config.alpha')
-    end,
-  },
-  { "numToStr/Comment.nvim",
-    config = function()
-      require('plugins.config.comment')
-    end,
-    setup = function()
-      require('funcs').on_file_open("Comment.nvim")
-      require('funcs').map("comment")
-    end,
-  },
-  { "lmburns/lf.nvim",
-    config = function()
-      require('plugins.config.lf')
-      require('funcs').map("lf")
-    end
-  },
-  { "nvim-telescope/telescope.nvim",
-    config = function()
-      require('plugins.config.telescope')
-      require('funcs').map("telescope")
-    end,
-  },
-  { "ahmedkhalf/project.nvim",
-    after = "telescope.nvim",
-    config = function()
-      require('plugins.config.project')
-    end,
-  },
 }
 
 local status_ok, packer = pcall(require, "packer")
 if not status_ok then
-  return
+    return
 end
 vim.cmd "packadd packer.nvim"
 packer.init {
-  git = { clone_timeout = 6000 },
-  display = {
-    working_sym = icons.misc.Watch,
-    error_sym = icons.ui.Close,
-    done_sym = icons.ui.Check,
-    removed_sym = icons.ui.MinusCircle,
-    moved_sym = icons.ui.Forward,
-    open_fn = function()
-      return require('packer.util').float { border = "single" }
-    end
-  }
+    git = { clone_timeout = 6000 },
+    display = {
+        working_sym = icons.misc.Watch,
+        error_sym = icons.ui.Close,
+        done_sym = icons.ui.Check,
+        removed_sym = icons.ui.MinusCircle,
+        moved_sym = icons.ui.Forward,
+        open_fn = function()
+            return require('packer.util').float { border = "single" }
+        end
+    }
 }
 packer.startup { plugins }
diff --git a/.config/nvim/lua/plugins/test.fnl b/.config/nvim/lua/plugins/test.fnl
new file mode 100644
index 00000000..e69de29b

From 9b842ea13a244b6aa1bb2148314a1d60d2da5a32 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 28 Jan 2023 22:06:57 +0100
Subject: [PATCH 03/12] unfuck impatient init

---
 .config/nvim/init.lua | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
index 2b3ca725..f59206b3 100644
--- a/.config/nvim/init.lua
+++ b/.config/nvim/init.lua
@@ -1,7 +1,4 @@
-vim.defer_fn(function()
-    pcall(require, "impatient")
-end, 0)
-
+require('impatient')
 require('config.options')
 require('funcs').bootstrap()
 require('plugins')

From 2acf72688bebe4d9992f1fb5078608c6c05ccf9d Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 28 Jan 2023 22:07:06 +0100
Subject: [PATCH 04/12] remove garbage file

---
 .config/nvim/lua/plugins/test.fnl | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 .config/nvim/lua/plugins/test.fnl

diff --git a/.config/nvim/lua/plugins/test.fnl b/.config/nvim/lua/plugins/test.fnl
deleted file mode 100644
index e69de29b..00000000

From 0c83807bc172389c3c9626fd531df4411e8c50b9 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 4 Feb 2023 16:15:23 +0100
Subject: [PATCH 05/12] sanoethusatoheu

---
 .config/nvim/lua/plugins/config/lualine.lua | 5 ++++-
 .config/nvim/lua/plugins/init.lua           | 6 ------
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/.config/nvim/lua/plugins/config/lualine.lua b/.config/nvim/lua/plugins/config/lualine.lua
index 453dd8c9..84ffba44 100644
--- a/.config/nvim/lua/plugins/config/lualine.lua
+++ b/.config/nvim/lua/plugins/config/lualine.lua
@@ -107,7 +107,10 @@ ins_left {
         for _, client in ipairs(clients) do
             local filetypes = client.config.filetypes
             if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
-                return client.name
+                if client.name ~= "null-ls" then
+                    return client.name
+                end
+                msg = client.name
             end
         end
         return msg
diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua
index 24e2b2ab..e260570b 100644
--- a/.config/nvim/lua/plugins/init.lua
+++ b/.config/nvim/lua/plugins/init.lua
@@ -161,8 +161,6 @@ local plugins = {
             require('plugins.config.dap')
         end,
     },
-    { "olical/aniseed" },
-    { "olical/conjure" },
     { "rafamadriz/friendly-snippets",
         event = "InsertEnter",
         module = { "cmp", "cmp_nvim_lsp" },
@@ -184,10 +182,6 @@ local plugins = {
     { "hrsh7th/cmp-nvim-lsp", after = "cmp-nvim-lua" },
     { "hrsh7th/cmp-buffer", after = "cmp-nvim-lsp" },
     { "hrsh7th/cmp-path", after = "cmp-buffer" },
-    { "paterjason/cmp-conjure",
-        after = { "cmp-buffer", "conjure" },
-        ft = "fennel"
-    },
     { "onsails/lspkind.nvim" },
     { "windwp/nvim-autopairs",
         after = "nvim-cmp",

From 458c09881cf46958a877da3da67029bd3d07dda2 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 4 Feb 2023 16:15:51 +0100
Subject: [PATCH 06/12] add fennel to compiler script

---
 .local/bin/compiler | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.local/bin/compiler b/.local/bin/compiler
index d9656ac0..61a98518 100755
--- a/.local/bin/compiler
+++ b/.local/bin/compiler
@@ -36,7 +36,7 @@ case "$ext" in
 	go) go run "$file" ;;
 	h) sudo make install ;;
   # findup is a script available here: https://unix.stackexchange.com/a/35265
-  java) loc=$(findup . -name gradlew); [ "$loc":w != "" ] && exec "$loc" run -q -p "$(dirname $loc)" ;;
+    java) loc=$(findup . -name gradlew); [ "$loc" != "" ] && exec "$loc" run -q -p "$(dirname "$loc")" ;;
 	m) octave "$file" ;;
 	md)	if  [ -x "$(command -v lowdown)" ]; then
 			lowdown --parse-no-intraemph "$file" -Tms | groff -mpdfmark -ms -kept > "$base".pdf
@@ -55,5 +55,6 @@ case "$ext" in
 	scad) openscad -o "$base".stl "$file" ;;
 	sent) setsid -f sent "$file" 2>/dev/null ;;
 	tex) textype "$file" ;;
+    fnl) fennel --compile "$file" > "$base.lua" ;;
 	*) sed -n '/^#!/s/^#!//p; q' "$file" | xargs -r -I % "$file" ;;
 esac

From 6a16d32c3d0574b0588732a2a6223e25d564cf41 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 4 Feb 2023 22:15:35 +0100
Subject: [PATCH 07/12] update a bunch of scripts

---
 .local/bin/compiler                |   12 +-
 .local/bin/displayselect           |   42 +-
 .local/bin/dmenuhandler            |   12 +-
 .local/bin/dmenumount              |   10 +-
 .local/bin/dmenuumount             |   51 +-
 .local/bin/dmenuunicode            |    2 +-
 .local/bin/layoutmenu              |    7 -
 .local/bin/linkhandler             |   22 +-
 .local/bin/maimpick                |   17 +-
 .local/bin/qndl                    |    2 +-
 .local/bin/queueandnotify          |    2 +-
 .local/bin/remaps-no-change        |   10 +
 .local/bin/samedir                 |   22 +-
 .local/bin/setbg                   |   16 -
 .local/bin/statusbar/sb-torrent    |   21 +-
 .local/bin/sysact                  |    4 +-
 .local/bin/{ => trash}/booksplit   |    0
 .local/bin/{ => trash}/getbib      |    0
 .local/bin/{ => trash}/getkeys     |    0
 .local/bin/{ => trash}/noisereduce |    0
 .local/bin/{ => trash}/openfile    |    0
 .local/bin/{ => trash}/otp         |    0
 .local/bin/{ => trash}/slider      |    0
 .local/bin/{ => trash}/tag         |    0
 .local/share/chars/emoji           | 1631 ++++++++++++++++++++++++++++
 .local/share/chars/font-awesome    | 1456 +++++++++++++++++++++++++
 .local/share/emoji                 | 1593 ---------------------------
 27 files changed, 3198 insertions(+), 1734 deletions(-)
 delete mode 100755 .local/bin/layoutmenu
 create mode 100755 .local/bin/remaps-no-change
 rename .local/bin/{ => trash}/booksplit (100%)
 rename .local/bin/{ => trash}/getbib (100%)
 rename .local/bin/{ => trash}/getkeys (100%)
 rename .local/bin/{ => trash}/noisereduce (100%)
 rename .local/bin/{ => trash}/openfile (100%)
 rename .local/bin/{ => trash}/otp (100%)
 rename .local/bin/{ => trash}/slider (100%)
 rename .local/bin/{ => trash}/tag (100%)
 create mode 100644 .local/share/chars/emoji
 create mode 100644 .local/share/chars/font-awesome
 delete mode 100644 .local/share/emoji

diff --git a/.local/bin/compiler b/.local/bin/compiler
index 61a98518..77f51958 100755
--- a/.local/bin/compiler
+++ b/.local/bin/compiler
@@ -4,7 +4,7 @@
 # have this script run via vim.
 #
 # Compiles .tex. groff (.mom, .ms), .rmd, .md, .org.  Opens .sent files as sent
-# presentations. Runs scripts based on extention or shebang.
+# presentations. Runs scripts based on extension or shebang.
 #
 # Note that .tex files which you wish to compile with XeLaTeX should have the
 # string "xelatex" somewhere in a comment/command in the first 5 lines.
@@ -17,8 +17,8 @@ cd "$dir" || exit 1
 
 textype() { \
 	command="pdflatex"
-  texroot=$(readlink -f "$(grep -Poi "^ *% *\! *tex root *= *\w+(?:\.\w*)?" "$file" | cut -d "=" -f 2 | tr -d "[:blank:]")")
-  [ -n "$texroot" ] && base=$texroot && echo "Compiling from TeX root: $texroot"
+    texroot=$(readlink -f "$(grep -Poi "^ *% *\! *tex root *= *\w+(?:\.\w*)?" "$file" | cut -d "=" -f 2 | tr -d "[:blank:]")")
+    [ -n "$texroot" ] && base=$texroot && echo "Compiling from TeX root: $texroot"
 	( head -n5 "$file" | grep -qi 'xelatex' ) && command="xelatex"
 	$command --output-directory="$dir" "$base" &&
 	grep -qi addbibresource "$file" &&
@@ -39,9 +39,9 @@ case "$ext" in
     java) loc=$(findup . -name gradlew); [ "$loc" != "" ] && exec "$loc" run -q -p "$(dirname "$loc")" ;;
 	m) octave "$file" ;;
 	md)	if  [ -x "$(command -v lowdown)" ]; then
-			lowdown --parse-no-intraemph "$file" -Tms | groff -mpdfmark -ms -kept > "$base".pdf
+			lowdown --parse-no-intraemph "$file" -Tms | groff -mpdfmark -ms -kept -T pdf > "$base".pdf
 		elif [ -x "$(command -v groffdown)" ]; then
-			groffdown -i "$file" | groff > "$base.pdf"
+			groffdown -i "$file" | groff -T pdf > "$base.pdf"
 		else
 			pandoc -t ms --highlight-style=kate -s -o "$base".pdf "$file"
 		fi ; ;;
@@ -51,7 +51,7 @@ case "$ext" in
 	py) python "$file" ;;
 	[rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;;
 	rs) cargo build ;;
-	sass) sassc -a "$file" "$base.css" ;;
+	sass) sassc -a "$file" "$base".css ;;
 	scad) openscad -o "$base".stl "$file" ;;
 	sent) setsid -f sent "$file" 2>/dev/null ;;
 	tex) textype "$file" ;;
diff --git a/.local/bin/displayselect b/.local/bin/displayselect
index f9e80628..89d0b954 100755
--- a/.local/bin/displayselect
+++ b/.local/bin/displayselect
@@ -36,31 +36,31 @@ twoscreen() { # If multi-monitor is selected and there are two screens.
         direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
         xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0
     fi
-    }
+}
 
 morescreen() { # If multi-monitor is selected and there are more than two screens.
-	primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
-	secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
-	direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
-	tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
-	xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
-	}
+    primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
+    secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
+    direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+    tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
+    xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
+}
 
 multimon() { # Multi-monitor handler.
-	case "$(echo "$screens" | wc -l)" in
-		2) twoscreen ;;
-		*) morescreen ;;
-	esac ;}
+    case "$(echo "$screens" | wc -l)" in
+        2) twoscreen ;;
+        *) morescreen ;;
+    esac ;}
 
 onescreen() { # If only one output available or chosen.
-	xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)
-	}
+    xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)""
+}
 
 postrun() { # Stuff to run to clean up.
-	setbg		# Fix background if screen size/arangement has changed.
-	remaps		# Re-remap keys if keyboard added (for laptop bases)
-	{ killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
-	}
+    setbg            # Fix background if screen size/arangement has changed.
+    remaps-no-change # Re-remap keys if keyboard added (for laptop bases)
+    { killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
+}
 
 # Get all possible displays
 allposs=$(xrandr -q | grep "connected")
@@ -70,14 +70,14 @@ screens=$(echo "$allposs" | awk '/ connected/ {print $1}')
 
 # If there's only one screen
 [ "$(echo "$screens" | wc -l)" -lt 2 ] &&
-	{ onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings...";  exit ;}
+    { onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings...";  exit ;}
 
 # Get user choice including multi-monitor and manual selection:
 chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
 case "$chosen" in
-	"manual selection") arandr ; exit ;;
-	"multi-monitor") multimon ;;
-	*) onescreen "$chosen" ;;
+    "manual selection") arandr ; exit ;;
+    "multi-monitor") multimon ;;
+    *) onescreen "$chosen" ;;
 esac
 
 postrun
diff --git a/.local/bin/dmenuhandler b/.local/bin/dmenuhandler
index e5de8ef9..0b3c7138 100755
--- a/.local/bin/dmenuhandler
+++ b/.local/bin/dmenuhandler
@@ -4,17 +4,17 @@
 # some choice programs to use to open it.
 feed="${1:-$(printf "%s" | dmenu -p 'Paste URL or file path')}"
 
-case "$(printf "Copy URL\\nsxiv\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dl\\nqueue yt-dl audio" | dmenu -i -p "Open it with?")" in
+case "$(printf "copy url\\nsxiv\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dlp\\nqueue yt-dlp audio" | dmenu -i -p "Open it with?")" in
 	"copy url") echo "$feed" | xclip -selection clipboard ;;
 	mpv) setsid -f mpv -quiet "$feed" >/dev/null 2>&1 ;;
 	"mpv loop") setsid -f mpv -quiet --loop "$feed" >/dev/null 2>&1 ;;
 	"mpv float") setsid -f "$TERMINAL" -e mpv --geometry=+0-0 --autofit=30%  --title="mpvfloat" "$feed" >/dev/null 2>&1 ;;
-	"queue yt-dl") qndl "$feed" >/dev/null 2>&1 ;;
-	"queue yt-dl audio") qndl "$feed" 'youtube-dl --add-metadata -icx -f bestaudio/best' >/dev/null 2>&1 ;;
+	"queue yt-dlp") qndl "$feed" >/dev/null 2>&1 ;;
+	"queue yt-dlp audio") qndl "$feed" 'yt-dlp -o "%(title)s.%(ext)s" -f bestaudio --embed-metadata --restrict-filenames' ;;
 	"queue download") qndl "$feed" 'curl -LO' >/dev/null 2>&1 ;;
-	PDF) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 ;;
-	sxiv) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 ;;
-	vim) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")" && setsid -f "$TERMINAL" -e "$EDITOR" "/tmp/$(echo "$feed" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 ;;
+	PDF) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && zathura "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")"  >/dev/null 2>&1 ;;
+	sxiv) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")"  >/dev/null 2>&1 ;;
+	vim) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && setsid -f "$TERMINAL" -e "$EDITOR" "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")"  >/dev/null 2>&1 ;;
 	setbg) curl -L "$feed" > $XDG_CACHE_HOME/pic ; xwallpaper --zoom $XDG_CACHE_HOME/pic >/dev/null 2>&1 ;;
 	browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;;
 	lynx) lynx "$feed" >/dev/null 2>&1 ;;
diff --git a/.local/bin/dmenumount b/.local/bin/dmenumount
index 4ad12052..03cc6034 100755
--- a/.local/bin/dmenumount
+++ b/.local/bin/dmenumount
@@ -27,18 +27,18 @@ mountusb() { \
 		"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
 		"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
 		*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
-	esac
-	notify-send "禍 USB mounting" "$chosen mounted to $mp."
+	esac && notify-send "禍 USB mounting" "$chosen mounted to $mp." ||
+            notify-send "禍 Drive failed to mount." "Probably a permissions issue or a drive is already mounted."
 	}
 
 mountandroid() { \
 	chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
 	chosen="$(echo "$chosen" | cut -d : -f 1)"
 	getmount "$HOME -maxdepth 3 -type d"
-        simple-mtpfs --device "$chosen" "$mp"
 	echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
-	simple-mtpfs --device "$chosen" "$mp"
-	notify-send " Android Mounting" "Android device mounted to $mp."
+    simple-mtpfs --device "$chosen" "$mp" &&
+        notify-send " Android Mounting" "Android device mounted to $mp." ||
+        notify-send " Android Failed mounting." "Probably a permissions issue or phone is already mounted"
 	}
 
 asktype() { \
diff --git a/.local/bin/dmenuumount b/.local/bin/dmenuumount
index 2ee59dc8..5ffe8a69 100755
--- a/.local/bin/dmenuumount
+++ b/.local/bin/dmenuumount
@@ -4,41 +4,22 @@
 # Provides you with mounted partitions, select one to unmount.
 # Drives mounted at /, /boot and /home will not be options to unmount.
 
-unmountusb() {
-	[ -z "$drives" ] && exit
-	chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
-	chosen="$(echo "$chosen" | awk '{print $1}')"
-	[ -z "$chosen" ] && exit
+drives="$(lsblk -nrpo "name,type,size,mountpoint,label" | awk -F':' '{gsub(/ /,":")}$4!~/\/boot|\/efi|\/home$|SWAP/&&length($4)>1{printf "%s (%s) %s\n",$4,$3,$5}'; awk '/simple-mtpfs/ { print "", $2; }' /etc/mtab)"
+
+chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
+
+case "$chosen" in
+	*)
+		chosen="${chosen#📱 }"
+		sudo -A umount -l "$chosen"
+		;;
+	*)
+		chosen="${chosen% (*}"
+		sudo -A umount -l "$chosen"
+		;;
+esac && notify-send "禍 Drive unmounted." "$chosen successfully unmounted." ||
+	notify-send "禍 Drive failed to unmount." "Possibly a permissions or I/O issue."
+
 	sudo -A umount "$chosen" && notify-send "禍 USB unmounting" "$chosen unmounted."
-	}
 
-unmountandroid() { \
-	chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1
-	[ -z "$chosen" ] && exit
 	sudo -A umount -l "$chosen" && notify-send " Android unmounting" "$chosen unmounted."
-	}
-
-asktype() { \
-	choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1
-	case "$choice" in
-		USB) unmountusb ;;
-		Android) unmountandroid ;;
-	esac
-	}
-
-drives=$(lsblk -nrpo "name,type,size,mountpoint,label" | awk -F':' '{gsub(/ /,":")}$4!~/\/boot|\/efi|\/home$|SWAP/&&length($4)>1{printf "%s (%s) %s\n",$4,$3,$5}')
-
-if ! grep simple-mtpfs /etc/mtab; then
-	[ -z "$drives" ] && echo "No drives to unmount." &&  exit
-	echo "Unmountable USB drive detected."
-	unmountusb
-else
-	if [ -z "$drives" ]
-	then
-		echo "Unmountable Android device detected."
-	       	unmountandroid
-	else
-		echo "Unmountable USB drive(s) and Android device(s) detected."
-		asktype
-	fi
-fi
diff --git a/.local/bin/dmenuunicode b/.local/bin/dmenuunicode
index b25876ff..563076c6 100755
--- a/.local/bin/dmenuunicode
+++ b/.local/bin/dmenuunicode
@@ -3,7 +3,7 @@
 # The famous "get a menu of emojis to copy" script.
 
 # Get user selection via dmenu from emoji file.
-chosen=$(cut -d ';' -f1 ~/.local/share/emoji | dmenu -i -l 30 | sed "s/ .*//")
+chosen=$(cut -d ';' -f1 ~/.local/share/chars/* | dmenu -i -l 30 | sed "s/ .*//")
 
 # Exit if none chosen.
 [ -z "$chosen" ] && exit
diff --git a/.local/bin/layoutmenu b/.local/bin/layoutmenu
deleted file mode 100755
index 1bf95f23..00000000
--- a/.local/bin/layoutmenu
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-cat <<EOF | xmenu
-[]= Tiled Layout	0
-><> Floating Layout	1
-[M] Monocle Layout	2
-EOF
diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler
index b5c50af8..8a2338e8 100755
--- a/.local/bin/linkhandler
+++ b/.local/bin/linkhandler
@@ -6,18 +6,22 @@
 # if a music file or pdf, it will download,
 # otherwise it opens link in browser.
 
-# If no url given. Opens browser. For using script as $BROWSER.
-[ -z "$1" ] && { "$BROWSER"; exit; }
+if [ -z "$1" ]; then
+	url="$(xclip -o)"
+else
+	url="$1"
+fi
 
-case "$1" in
-	*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*odysee.com*)
-		setsid -f mpv -quiet "$1" >/dev/null 2>&1 ;;
+case "$url" in
+	*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/shorts*|*youtu.be*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
+		setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;;
 	*png|*jpg|*jpe|*jpeg|*gif)
-		curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 & ;;
+		curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && sxiv -a "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 & ;;
 	*pdf|*cbz|*cbr)
-		curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 & ;;
+		curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")"  >/dev/null 2>&1 & ;;
 	*mp3|*flac|*opus|*mp3?source*)
-		qndl "$1" 'curl -LO'  >/dev/null 2>&1 ;;
+		qndl "$url" 'curl -LO'  >/dev/null 2>&1 ;;
 	*)
-		[ -f "$1" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$1" >/dev/null 2>&1 || setsid -f "$BROWSER" "$1" >/dev/null 2>&1
+		[ -f "$url" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$url" >/dev/null 2>&1 || setsid -f "$BROWSER" "$url" >/dev/null 2>&1
 esac
+
diff --git a/.local/bin/maimpick b/.local/bin/maimpick
index 981a405c..957842e4 100755
--- a/.local/bin/maimpick
+++ b/.local/bin/maimpick
@@ -4,13 +4,16 @@
 # choose the kind of screenshot to take, including copying the image or even
 # highlighting an area to copy. scrotcucks on suicidewatch right now.
 
-dir="$HOME/Photos/Screenshots/"
+# variables
+output="$(date '+%y%m%d-%H%M-%S').png"
+xclip_cmd="xclip -sel clip -t image/png"
 
 case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")" in
-	"a selected area") maim -s "${dir}pic-selected-$(date '+%y%m%d-%H%M-%S').png" ;;
-	"current window") maim -i "$(xdotool getactivewindow)" "${dir}pic-window-$(date '+%y%m%d-%H%M-%S').png" ;;
-	"full screen") maim "${dir}pic-full-$(date '+%y%m%d-%H%M-%S').png" ;;
-	"a selected area (copy)") maim -s | xclip -selection clipboard -t image/png ;;
-	"current window (copy)") maim -i "$(xdotool getactivewindow)" | xclip -selection clipboard -t image/png ;;
-	"full screen (copy)") maim | xclip -selection clipboard -t image/png ;;
+    "a selected area") maim -s pic-selected-"${output}" ;;
+    "current window") maim -q -d 0.2 -i "$(xdotool getactivewindow)" pic-window-"${output}" ;;
+    "full screen") maim -q -d 0.2 pic-full-"${output}" ;;
+    "a selected area (copy)") maim -s | ${xclip_cmd} ;;
+    "current window (copy)") maim -q -d 0.2 -i "$(xdotool getactivewindow)" | ${xclip_cmd} ;;
+    "full screen (copy)") maim -q -d 0.2 | ${xclip_cmd} ;;
 esac
+
diff --git a/.local/bin/qndl b/.local/bin/qndl
index 0e3576ab..b74c68f8 100755
--- a/.local/bin/qndl
+++ b/.local/bin/qndl
@@ -5,7 +5,7 @@
 base="$(basename "$1")"
 notify-send "羽Queuing $base..."
 cmd="$2"
-[ -z "$cmd" ] && cmd="youtube-dl --add-metadata -ic"
+[ -z "$cmd" ] && cmd="yt-dlp --embed-metadata -ic"
 idnum="$(tsp $cmd "$1")"
 realname="$(echo "$base" | sed "s/?\(source\|dest\).*//;s/%20/ /g")"
 tsp -D "$idnum" mv "$base" "$realname"
diff --git a/.local/bin/queueandnotify b/.local/bin/queueandnotify
index 54b2c2a9..1c3025c6 100755
--- a/.local/bin/queueandnotify
+++ b/.local/bin/queueandnotify
@@ -2,7 +2,7 @@
 
 # Podboat sucks. This script replaces it.
 # It reads the newsboat queue, queuing downloads with taskspooler.
-# It also removes the junk from extentions.
+# It also removes the junk from extensions.
 queuefile="${XDG_DATA_HOME:-$HOME/.local/share}/newsboat/queue"
 
 while read -r line; do
diff --git a/.local/bin/remaps-no-change b/.local/bin/remaps-no-change
new file mode 100755
index 00000000..05f3ad82
--- /dev/null
+++ b/.local/bin/remaps-no-change
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+current="$(setxkbmap -query | grep -oP '(layout|variant):\s*\K\w+' | sed ':a;N;s/\n/:/')"
+
+setxkbmap -layout "$(echo "$current" | cut -d ':' -f1)" -variant "$(echo "$current" | cut -d ':' -f2)" -option caps:super -option terminate:ctrl_alt_bksp
+xset r rate 300 50
+killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape'
+xset -q | grep "Caps Lock:\s*on" && xdotool key Caps_Lock
+sleep 0.03
+pkill -RTMIN+15 dwmblocks
diff --git a/.local/bin/samedir b/.local/bin/samedir
index 0a19707e..a0ff84c2 100755
--- a/.local/bin/samedir
+++ b/.local/bin/samedir
@@ -2,9 +2,21 @@
 
 # Open a terminal window in the same directory as the currently active window.
 
-PID=$(xprop -id "$(xprop -root | xprop -root | sed -n "/_NET_ACTIVE_WINDOW/ s/^.*# // p")" | sed -n "/PID/ s/^.*= // p")
-PID="$(pstree -lpA "$PID")"
-PID="${PID##*(}"
-PID="${PID%)}"
-cd "$(readlink /proc/"$PID"/cwd)" || return 1
+windowPID=$(xprop -id "$(xprop -root | sed -n "/_NET_ACTIVE_WINDOW/ s/^.*# // p")" | sed -n "/PID/ s/^.*= // p")
+PIDlist=$(pstree -lpATna "$windowPID" | sed -En 's/.*,([0-9]+).*/\1/p' | tac)
+for PID in $PIDlist; do
+	cmdline=$(ps -o args= -p "$PID")
+	process_group_leader=$(ps -o comm= -p "$(ps -o pgid= -p "$PID" | tr -d ' ')")
+	cwd=$(readlink /proc/"$PID"/cwd)
+	# zsh and lf won't be ignored even if it shows ~ or /
+	case "$cmdline" in
+		'lf -server') continue ;;
+		"${SHELL##*/}"|'lf'|'lf '*) break ;;
+	esac
+	# git (and its sub-processes) will show the root of a repository instead of the actual cwd, so they're ignored
+	[ "$process_group_leader" = 'git' ] || [ ! -d "$cwd" ] && continue
+	# This is to ignore programs that show ~ or / instead of the actual working directory
+	[ "$cwd" != "$HOME" ] && [ "$cwd" != '/' ] && break
+done
+[ "$PWD" != "$cwd" ] && [ -d "$cwd" ] && { cd "$cwd" || exit 1; }
 "$TERMINAL"
diff --git a/.local/bin/setbg b/.local/bin/setbg
index b0938fd0..43026f7f 100755
--- a/.local/bin/setbg
+++ b/.local/bin/setbg
@@ -4,15 +4,9 @@
 #	Run by itself, set the wallpaper (at X start).
 #	If given a file, set that as the new wallpaper.
 #	If given a directory, choose random file in it.
-#	If wal is installed, also generates a colorscheme.
 
-# Location of link to wallpaper link.
 bgloc="${XDG_DATA_HOME:-$HOME/.local/share/}/bg"
 
-# Configuration files of applications that have their themes changed by pywal.
-dunstconf="${XDG_CONFIG_HOME:-$HOME/.config}/dunst/dunstrc"
-zathuraconf="${XDG_CONFIG_HOME:-$HOME/.config}/zathura/zathurarc"
-
 trueloc="$(readlink -f "$1")" &&
 case "$(file --mime-type -b "$trueloc")" in
 	image/* ) ln -sf "$(readlink -f "$1")" "$bgloc" && notify-send -i "$bgloc" "Changing wallpaper..." ;;
@@ -20,14 +14,4 @@ case "$(file --mime-type -b "$trueloc")" in
 	*) notify-send "Error" "Not a valid image." ; exit 1;;
 esac
 
-# If pywal is installed, use it.
-if command -v wal >/dev/null 2>&1 ; then
-	wal -i "$(readlink -f $bgloc)" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1 &&
-	pidof dwm >/dev/null && xdotool key super+F12
-# If pywal is removed, return config files to normal.
-else
-	[ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf"
-	[ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf"
-fi
-
 xwallpaper --zoom "$bgloc"
diff --git a/.local/bin/statusbar/sb-torrent b/.local/bin/statusbar/sb-torrent
index 0e2926c7..a1d8e383 100755
--- a/.local/bin/statusbar/sb-torrent
+++ b/.local/bin/statusbar/sb-torrent
@@ -1,6 +1,5 @@
 #!/bin/sh
-# TODO: Rewrite this shit to connect to an external deluged
-transmission-remote -l | grep % |
+transmission-remote "$1" -l | grep % |
 	sed " # The letters are for sorting and will not appear.
 	s/.*Stopped.*/A /;
 	s/.*Seeding.*/Z 﫠/;
@@ -8,20 +7,4 @@ transmission-remote -l | grep % |
 	s/.*Idle.*/B ﭦ/;
 	s/.*Uploading.*/L /;
 	s/.*%.*/M /" |
-		sort -h | uniq -c | awk '{print $3 $1}' | paste -sd ' ' -
-
-case $BLOCK_BUTTON in
-	1) setsid -f "$TERMINAL" -e tremc ;;
-	2) td-toggle ;;
-	3) notify-send " Torrent module" "\- Left click to open tremc.
-- Middle click to toggle transmission.
-- Shift click to edit script.
-Module shows number of torrents:
-: paused
-ﭦ: idle (seeds needed)
-: uploading (unfinished)
-: downloading
-﫠: done
-﫠: done and seeding" ;;
-	6) "$TERMINAL" -e "$EDITOR" "$0" ;;
-esac
+	sort -h | uniq -c | awk '{print $3 $1}' | paste -sd ' ' -
diff --git a/.local/bin/sysact b/.local/bin/sysact
index d734ff59..7c23e1e4 100755
--- a/.local/bin/sysact
+++ b/.local/bin/sysact
@@ -9,8 +9,8 @@ case "$(printf " lock\nﴚ leave dwm\n累 renew dwm\nﭦ hibernate\n sleep
 	' lock') xset s activate & gpg-connect-agent --no-autostart reloadagent /bye;;
 	'ﴚ leave dwm') kill -TERM "$(pgrep -u "$USER" "\bdwm$")" ;;
 	'累 renew dwm') kill -HUP "$(pgrep -u "$USER" "\bdwm$")" ;;
-	# 'ﭦ hibernate') slock $ctl hibernate ;;
-	# ' sleep') slock $ctl suspend ;;
+	# 'ﭦ hibernate') slock $ctl hibernate -i ;;
+	# ' sleep') slock $ctl suspend -i ;;
 	'ﰇ reboot') $ctl reboot ;;
 	'襤 shutdown') $ctl poweroff ;;
 	' display off') xset dpms force off ;;
diff --git a/.local/bin/booksplit b/.local/bin/trash/booksplit
similarity index 100%
rename from .local/bin/booksplit
rename to .local/bin/trash/booksplit
diff --git a/.local/bin/getbib b/.local/bin/trash/getbib
similarity index 100%
rename from .local/bin/getbib
rename to .local/bin/trash/getbib
diff --git a/.local/bin/getkeys b/.local/bin/trash/getkeys
similarity index 100%
rename from .local/bin/getkeys
rename to .local/bin/trash/getkeys
diff --git a/.local/bin/noisereduce b/.local/bin/trash/noisereduce
similarity index 100%
rename from .local/bin/noisereduce
rename to .local/bin/trash/noisereduce
diff --git a/.local/bin/openfile b/.local/bin/trash/openfile
similarity index 100%
rename from .local/bin/openfile
rename to .local/bin/trash/openfile
diff --git a/.local/bin/otp b/.local/bin/trash/otp
similarity index 100%
rename from .local/bin/otp
rename to .local/bin/trash/otp
diff --git a/.local/bin/slider b/.local/bin/trash/slider
similarity index 100%
rename from .local/bin/slider
rename to .local/bin/trash/slider
diff --git a/.local/bin/tag b/.local/bin/trash/tag
similarity index 100%
rename from .local/bin/tag
rename to .local/bin/trash/tag
diff --git a/.local/share/chars/emoji b/.local/share/chars/emoji
new file mode 100644
index 00000000..ec6318d8
--- /dev/null
+++ b/.local/share/chars/emoji
@@ -0,0 +1,1631 @@
+😀 grinning face
+😃 grinning face with big eyes
+😄 grinning face with smiling eyes
+😁 beaming face with smiling eyes
+😆 grinning squinting face
+😅 grinning face with sweat
+🤣 rolling on the floor laughing
+😂 face with tears of joy
+🙂 slightly smiling face
+🙃 upside-down face
+🫠 melting face
+😉 winking face
+😊 smiling face with smiling eyes
+😇 smiling face with halo
+🥰 smiling face with hearts
+😍 smiling face with heart-eyes
+🤩 star-struck
+😘 face blowing a kiss
+😗 kissing face
+☺️ smiling face
+😚 kissing face with closed eyes
+😙 kissing face with smiling eyes
+🥲 smiling face with tear
+😋 face savoring food
+😛 face with tongue
+😜 winking face with tongue
+🤪 zany face
+😝 squinting face with tongue
+🤑 money-mouth face
+🤗 smiling face with open hands
+🤭 face with hand over mouth
+🫢 face with open eyes and hand over mouth
+🫣 face with peeking eye
+🤫 shushing face
+🤔 thinking face
+🫡 saluting face
+🤐 zipper-mouth face
+🤨 face with raised eyebrow
+😐 neutral face
+😑 expressionless face
+😶 face without mouth
+🫥 dotted line face
+😏 smirking face
+😒 unamused face
+🙄 face with rolling eyes
+😬 grimacing face
+🤥 lying face
+😌 relieved face
+😔 pensive face
+😪 sleepy face
+🤤 drooling face
+😴 sleeping face
+😷 face with medical mask
+🤒 face with thermometer
+🤕 face with head-bandage
+🤢 nauseated face
+🤮 face vomiting
+🤧 sneezing face
+🥵 hot face
+🥶 cold face
+🥴 woozy face
+😵 face with crossed-out eyes
+🤯 exploding head
+🤠 cowboy hat face
+🥳 partying face
+🥸 disguised face
+😎 smiling face with sunglasses
+🤓 nerd face
+🧐 face with monocle
+😕 confused face
+🫤 face with diagonal mouth
+😟 worried face
+🙁 slightly frowning face
+☹️ frowning face
+😮 face with open mouth
+😯 hushed face
+😲 astonished face
+😳 flushed face
+🥺 pleading face
+🥹 face holding back tears
+😦 frowning face with open mouth
+😧 anguished face
+😨 fearful face
+😰 anxious face with sweat
+😥 sad but relieved face
+😢 crying face
+😭 loudly crying face
+😱 face screaming in fear
+😖 confounded face
+😣 persevering face
+😞 disappointed face
+😓 downcast face with sweat
+😩 weary face
+😫 tired face
+🥱 yawning face
+😤 face with steam from nose
+😡 pouting face
+😠 angry face
+🤬 face with symbols on mouth
+😈 smiling face with horns
+👿 angry face with horns
+💀 skull
+☠️ skull and crossbones
+💩 pile of poo
+🤡 clown face
+👹 ogre
+👺 goblin
+👻 ghost
+👽 alien
+👾 alien monster
+🤖 robot
+😺 grinning cat
+😸 grinning cat with smiling eyes
+😹 cat with tears of joy
+😻 smiling cat with heart-eyes
+😼 cat with wry smile
+😽 kissing cat
+🙀 weary cat
+😿 crying cat
+😾 pouting cat
+🙈 see-no-evil monkey
+🙉 hear-no-evil monkey
+🙊 speak-no-evil monkey
+💋 kiss mark
+💌 love letter
+💘 heart with arrow
+💝 heart with ribbon
+💖 sparkling heart
+💗 growing heart
+💓 beating heart
+💞 revolving hearts
+💕 two hearts
+💟 heart decoration
+❣️ heart exclamation
+💔 broken heart
+❤️ red heart
+🧡 orange heart
+💛 yellow heart
+💚 green heart
+💙 blue heart
+💜 purple heart
+🤎 brown heart
+🖤 black heart
+🤍 white heart
+💯 hundred points
+💢 anger symbol
+💥 collision
+💫 dizzy
+💦 sweat droplets
+💨 dashing away
+🕳️ hole
+💣 bomb
+💬 speech balloon
+🗨️ left speech bubble
+🗯️ right anger bubble
+💭 thought balloon
+💤 zzz
+👋 waving hand
+🤚 raised back of hand
+🖐️ hand with fingers splayed
+✋ raised hand
+🖖 vulcan salute
+🫱 rightwards hand
+🫲 leftwards hand
+🫳 palm down hand
+🫴 palm up hand
+👌 OK hand
+🤌 pinched fingers
+🤏 pinching hand
+✌️ victory hand
+🤞 crossed fingers
+🫰 hand with index finger and thumb crossed
+🤟 love-you gesture
+🤘 sign of the horns
+🤙 call me hand
+👈 backhand index pointing left
+👉 backhand index pointing right
+👆 backhand index pointing up
+🖕 middle finger
+👇 backhand index pointing down
+☝️ index pointing up
+🫵 index pointing at the viewer
+👍 thumbs up
+👎 thumbs down
+✊ raised fist
+👊 oncoming fist
+🤛 left-facing fist
+🤜 right-facing fist
+👏 clapping hands
+🙌 raising hands
+🫶 heart hands
+👐 open hands
+🤲 palms up together
+🤝 handshake
+🙏 folded hands
+✍️ writing hand
+💅 nail polish
+🤳 selfie
+💪 flexed biceps
+🦾 mechanical arm
+🦿 mechanical leg
+🦵 leg
+🦶 foot
+👂 ear
+🦻 ear with hearing aid
+👃 nose
+🧠 brain
+🫀 anatomical heart
+🫁 lungs
+🦷 tooth
+🦴 bone
+👀 eyes
+👁️ eye
+👅 tongue
+👄 mouth
+🫦 biting lip
+👶 baby
+🧒 child
+👦 boy
+👧 girl
+🧑 person
+👱 person: blond hair
+👨 man
+🧔 person: beard
+👩 woman
+🧓 older person
+👴 old man
+👵 old woman
+🙍 person frowning
+🙎 person pouting
+🙅 person gesturing NO
+🙆 person gesturing OK
+💁 person tipping hand
+🙋 person raising hand
+🧏 deaf person
+🙇 person bowing
+🤦 person facepalming
+🤷 person shrugging
+👮 police officer
+🕵️ detective
+💂 guard
+🥷 ninja
+👷 construction worker
+🫅 person with crown
+🤴 prince
+👸 princess
+👳 person wearing turban
+👲 person with skullcap
+🧕 woman with headscarf
+🤵 person in tuxedo
+👰 person with veil
+🤰 pregnant woman
+🫃 pregnant man
+🫄 pregnant person
+🤱 breast-feeding
+👼 baby angel
+🎅 Santa Claus
+🤶 Mrs. Claus
+🦸 superhero
+🦹 supervillain
+🧙 mage
+🧚 fairy
+🧛 vampire
+🧜 merperson
+🧝 elf
+🧞 genie
+🧟 zombie
+🧌 troll
+💆 person getting massage
+💇 person getting haircut
+🚶 person walking
+🧍 person standing
+🧎 person kneeling
+🏃 person running
+💃 woman dancing
+🕺 man dancing
+🕴️ person in suit levitating
+👯 people with bunny ears
+🧖 person in steamy room
+🧗 person climbing
+🤺 person fencing
+🏇 horse racing
+⛷️ skier
+🏂 snowboarder
+🏌️ person golfing
+🏄 person surfing
+🚣 person rowing boat
+🏊 person swimming
+⛹️ person bouncing ball
+🏋️ person lifting weights
+🚴 person biking
+🚵 person mountain biking
+🤸 person cartwheeling
+🤼 people wrestling
+🤽 person playing water polo
+🤾 person playing handball
+🤹 person juggling
+🧘 person in lotus position
+🛀 person taking bath
+🛌 person in bed
+👭 women holding hands
+👫 woman and man holding hands
+👬 men holding hands
+💏 kiss
+💑 couple with heart
+👪 family
+🗣️ speaking head
+👤 bust in silhouette
+👥 busts in silhouette
+🫂 people hugging
+👣 footprints
+🐵 monkey face
+🐒 monkey
+🦍 gorilla
+🦧 orangutan
+🐶 dog face
+🐕 dog
+🦮 guide dog
+🐩 poodle
+🐺 wolf
+🦊 fox
+🦝 raccoon
+🐱 cat face
+🐈 cat
+🦁 lion
+🐯 tiger face
+🐅 tiger
+🐆 leopard
+🐴 horse face
+🐎 horse
+🦄 unicorn
+🦓 zebra
+🦌 deer
+🦬 bison
+🐮 cow face
+🐂 ox
+🐃 water buffalo
+🐄 cow
+🐷 pig face
+🐖 pig
+🐗 boar
+🐽 pig nose
+🐏 ram
+🐑 ewe
+🐐 goat
+🐪 camel
+🐫 two-hump camel
+🦙 llama
+🦒 giraffe
+🐘 elephant
+🦣 mammoth
+🦏 rhinoceros
+🦛 hippopotamus
+🐭 mouse face
+🐁 mouse
+🐀 rat
+🐹 hamster
+🐰 rabbit face
+🐇 rabbit
+🐿️ chipmunk
+🦫 beaver
+🦔 hedgehog
+🦇 bat
+🐻 bear
+🐨 koala
+🐼 panda
+🦥 sloth
+🦦 otter
+🦨 skunk
+🦘 kangaroo
+🦡 badger
+🐾 paw prints
+🦃 turkey
+🐔 chicken
+🐓 rooster
+🐣 hatching chick
+🐤 baby chick
+🐥 front-facing baby chick
+🐦 bird
+🐧 penguin
+🕊️ dove
+🦅 eagle
+🦆 duck
+🦢 swan
+🦉 owl
+🦤 dodo
+🪶 feather
+🦩 flamingo
+🦚 peacock
+🦜 parrot
+🐸 frog
+🐊 crocodile
+🐢 turtle
+🦎 lizard
+🐍 snake
+🐲 dragon face
+🐉 dragon
+🦕 sauropod
+🦖 T-Rex
+🐳 spouting whale
+🐋 whale
+🐬 dolphin
+🦭 seal
+🐟 fish
+🐠 tropical fish
+🐡 blowfish
+🦈 shark
+🐙 octopus
+🐚 spiral shell
+🪸 coral
+🐌 snail
+🦋 butterfly
+🐛 bug
+🐜 ant
+🐝 honeybee
+🪲 beetle
+🐞 lady beetle
+🦗 cricket
+🪳 cockroach
+🕷️ spider
+🕸️ spider web
+🦂 scorpion
+🦟 mosquito
+🪰 fly
+🪱 worm
+🦠 microbe
+💐 bouquet
+🌸 cherry blossom
+💮 white flower
+🪷 lotus
+🏵️ rosette
+🌹 rose
+🥀 wilted flower
+🌺 hibiscus
+🌻 sunflower
+🌼 blossom
+🌷 tulip
+🌱 seedling
+🪴 potted plant
+🌲 evergreen tree
+🌳 deciduous tree
+🌴 palm tree
+🌵 cactus
+🌾 sheaf of rice
+🌿 herb
+☘️ shamrock
+🍀 four leaf clover
+🍁 maple leaf
+🍂 fallen leaf
+🍃 leaf fluttering in wind
+🪹 empty nest
+🪺 nest with eggs
+🍇 grapes
+🍈 melon
+🍉 watermelon
+🍊 tangerine
+🍋 lemon
+🍌 banana
+🍍 pineapple
+🥭 mango
+🍎 red apple
+🍏 green apple
+🍐 pear
+🍑 peach
+🍒 cherries
+🍓 strawberry
+🫐 blueberries
+🥝 kiwi fruit
+🍅 tomato
+🫒 olive
+🥥 coconut
+🥑 avocado
+🍆 eggplant
+🥔 potato
+🥕 carrot
+🌽 ear of corn
+🌶️ hot pepper
+🫑 bell pepper
+🥒 cucumber
+🥬 leafy green
+🥦 broccoli
+🧄 garlic
+🧅 onion
+🍄 mushroom
+🥜 peanuts
+🫘 beans
+🌰 chestnut
+🍞 bread
+🥐 croissant
+🥖 baguette bread
+🫓 flatbread
+🥨 pretzel
+🥯 bagel
+🥞 pancakes
+🧇 waffle
+🧀 cheese wedge
+🍖 meat on bone
+🍗 poultry leg
+🥩 cut of meat
+🥓 bacon
+🍔 hamburger
+🍟 french fries
+🍕 pizza
+🌭 hot dog
+🥪 sandwich
+🌮 taco
+🌯 burrito
+🫔 tamale
+🥙 stuffed flatbread
+🧆 falafel
+🥚 egg
+🍳 cooking
+🥘 shallow pan of food
+🍲 pot of food
+🫕 fondue
+🥣 bowl with spoon
+🥗 green salad
+🍿 popcorn
+🧈 butter
+🧂 salt
+🥫 canned food
+🍱 bento box
+🍘 rice cracker
+🍙 rice ball
+🍚 cooked rice
+🍛 curry rice
+🍜 steaming bowl
+🍝 spaghetti
+🍠 roasted sweet potato
+🍢 oden
+🍣 sushi
+🍤 fried shrimp
+🍥 fish cake with swirl
+🥮 moon cake
+🍡 dango
+🥟 dumpling
+🥠 fortune cookie
+🥡 takeout box
+🦀 crab
+🦞 lobster
+🦐 shrimp
+🦑 squid
+🦪 oyster
+🍦 soft ice cream
+🍧 shaved ice
+🍨 ice cream
+🍩 doughnut
+🍪 cookie
+🎂 birthday cake
+🍰 shortcake
+🧁 cupcake
+🥧 pie
+🍫 chocolate bar
+🍬 candy
+🍭 lollipop
+🍮 custard
+🍯 honey pot
+🍼 baby bottle
+🥛 glass of milk
+☕ hot beverage
+🫖 teapot
+🍵 teacup without handle
+🍶 sake
+🍾 bottle with popping cork
+🍷 wine glass
+🍸 cocktail glass
+🍹 tropical drink
+🍺 beer mug
+🍻 clinking beer mugs
+🥂 clinking glasses
+🥃 tumbler glass
+🫗 pouring liquid
+🥤 cup with straw
+🧋 bubble tea
+🧃 beverage box
+🧉 mate
+🧊 ice
+🥢 chopsticks
+🍽️ fork and knife with plate
+🍴 fork and knife
+🥄 spoon
+🔪 kitchen knife
+🫙 jar
+🏺 amphora
+🌍 globe showing Europe-Africa
+🌎 globe showing Americas
+🌏 globe showing Asia-Australia
+🌐 globe with meridians
+🗺️ world map
+🗾 map of Japan
+🧭 compass
+🏔️ snow-capped mountain
+⛰️ mountain
+🌋 volcano
+🗻 mount fuji
+🏕️ camping
+🏖️ beach with umbrella
+🏜️ desert
+🏝️ desert island
+🏞️ national park
+🏟️ stadium
+🏛️ classical building
+🏗️ building construction
+🧱 brick
+🪨 rock
+🪵 wood
+🛖 hut
+🏘️ houses
+🏚️ derelict house
+🏠 house
+🏡 house with garden
+🏢 office building
+🏣 Japanese post office
+🏤 post office
+🏥 hospital
+🏦 bank
+🏨 hotel
+🏩 love hotel
+🏪 convenience store
+🏫 school
+🏬 department store
+🏭 factory
+🏯 Japanese castle
+🏰 castle
+💒 wedding
+🗼 Tokyo tower
+🗽 Statue of Liberty
+⛪ church
+🕌 mosque
+🛕 hindu temple
+🕍 synagogue
+⛩️ shinto shrine
+🕋 kaaba
+⛲ fountain
+⛺ tent
+🌁 foggy
+🌃 night with stars
+🏙️ cityscape
+🌄 sunrise over mountains
+🌅 sunrise
+🌆 cityscape at dusk
+🌇 sunset
+🌉 bridge at night
+♨️ hot springs
+🎠 carousel horse
+🛝 playground slide
+🎡 ferris wheel
+🎢 roller coaster
+💈 barber pole
+🎪 circus tent
+🚂 locomotive
+🚃 railway car
+🚄 high-speed train
+🚅 bullet train
+🚆 train
+🚇 metro
+🚈 light rail
+🚉 station
+🚊 tram
+🚝 monorail
+🚞 mountain railway
+🚋 tram car
+🚌 bus
+🚍 oncoming bus
+🚎 trolleybus
+🚐 minibus
+🚑 ambulance
+🚒 fire engine
+🚓 police car
+🚔 oncoming police car
+🚕 taxi
+🚖 oncoming taxi
+🚗 automobile
+🚘 oncoming automobile
+🚙 sport utility vehicle
+🛻 pickup truck
+🚚 delivery truck
+🚛 articulated lorry
+🚜 tractor
+🏎️ racing car
+🏍️ motorcycle
+🛵 motor scooter
+🦽 manual wheelchair
+🦼 motorized wheelchair
+🛺 auto rickshaw
+🚲 bicycle
+🛴 kick scooter
+🛹 skateboard
+🛼 roller skate
+🚏 bus stop
+🛣️ motorway
+🛤️ railway track
+🛢️ oil drum
+⛽ fuel pump
+🛞 wheel
+🚨 police car light
+🚥 horizontal traffic light
+🚦 vertical traffic light
+🛑 stop sign
+🚧 construction
+⚓ anchor
+🛟 ring buoy
+⛵ sailboat
+🛶 canoe
+🚤 speedboat
+🛳️ passenger ship
+⛴️ ferry
+🛥️ motor boat
+🚢 ship
+✈️ airplane
+🛩️ small airplane
+🛫 airplane departure
+🛬 airplane arrival
+🪂 parachute
+💺 seat
+🚁 helicopter
+🚟 suspension railway
+🚠 mountain cableway
+🚡 aerial tramway
+🛰️ satellite
+🚀 rocket
+🛸 flying saucer
+🛎️ bellhop bell
+🧳 luggage
+⌛ hourglass done
+⏳ hourglass not done
+⌚ watch
+⏰ alarm clock
+⏱️ stopwatch
+⏲️ timer clock
+🕰️ mantelpiece clock
+🕛 twelve o’clock
+🕧 twelve-thirty
+🕐 one o’clock
+🕜 one-thirty
+🕑 two o’clock
+🕝 two-thirty
+🕒 three o’clock
+🕞 three-thirty
+🕓 four o’clock
+🕟 four-thirty
+🕔 five o’clock
+🕠 five-thirty
+🕕 six o’clock
+🕡 six-thirty
+🕖 seven o’clock
+🕢 seven-thirty
+🕗 eight o’clock
+🕣 eight-thirty
+🕘 nine o’clock
+🕤 nine-thirty
+🕙 ten o’clock
+🕥 ten-thirty
+🕚 eleven o’clock
+🕦 eleven-thirty
+🌑 new moon
+🌒 waxing crescent moon
+🌓 first quarter moon
+🌔 waxing gibbous moon
+🌕 full moon
+🌖 waning gibbous moon
+🌗 last quarter moon
+🌘 waning crescent moon
+🌙 crescent moon
+🌚 new moon face
+🌛 first quarter moon face
+🌜 last quarter moon face
+🌡️ thermometer
+☀️ sun
+🌝 full moon face
+🌞 sun with face
+🪐 ringed planet
+⭐ star
+🌟 glowing star
+🌠 shooting star
+🌌 milky way
+☁️ cloud
+⛅ sun behind cloud
+⛈️ cloud with lightning and rain
+🌤️ sun behind small cloud
+🌥️ sun behind large cloud
+🌦️ sun behind rain cloud
+🌧️ cloud with rain
+🌨️ cloud with snow
+🌩️ cloud with lightning
+🌪️ tornado
+🌫️ fog
+🌬️ wind face
+🌀 cyclone
+🌈 rainbow
+🌂 closed umbrella
+☂️ umbrella
+☔ umbrella with rain drops
+⛱️ umbrella on ground
+⚡ high voltage
+❄️ snowflake
+☃️ snowman
+⛄ snowman without snow
+☄️ comet
+🔥 fire
+💧 droplet
+🌊 water wave
+🎃 jack-o-lantern
+🎄 Christmas tree
+🎆 fireworks
+🎇 sparkler
+🧨 firecracker
+✨ sparkles
+🎈 balloon
+🎉 party popper
+🎊 confetti ball
+🎋 tanabata tree
+🎍 pine decoration
+🎎 Japanese dolls
+🎏 carp streamer
+🎐 wind chime
+🎑 moon viewing ceremony
+🧧 red envelope
+🎀 ribbon
+🎁 wrapped gift
+🎗️ reminder ribbon
+🎟️ admission tickets
+🎫 ticket
+🎖️ military medal
+🏆 trophy
+🏅 sports medal
+🥇 1st place medal
+🥈 2nd place medal
+🥉 3rd place medal
+⚽ soccer ball
+⚾ baseball
+🥎 softball
+🏀 basketball
+🏐 volleyball
+🏈 american football
+🏉 rugby football
+🎾 tennis
+🥏 flying disc
+🎳 bowling
+🏏 cricket game
+🏑 field hockey
+🏒 ice hockey
+🥍 lacrosse
+🏓 ping pong
+🏸 badminton
+🥊 boxing glove
+🥋 martial arts uniform
+🥅 goal net
+⛳ flag in hole
+⛸️ ice skate
+🎣 fishing pole
+🤿 diving mask
+🎽 running shirt
+🎿 skis
+🛷 sled
+🥌 curling stone
+🎯 bullseye
+🪀 yo-yo
+🪁 kite
+🎱 pool 8 ball
+🔮 crystal ball
+🪄 magic wand
+🧿 nazar amulet
+🪬 hamsa
+🎮 video game
+🕹️ joystick
+🎰 slot machine
+🎲 game die
+🧩 puzzle piece
+🧸 teddy bear
+🪅 piñata
+🪩 mirror ball
+🪆 nesting dolls
+♠️ spade suit
+♥️ heart suit
+♦️ diamond suit
+♣️ club suit
+♟️ chess pawn
+🃏 joker
+🀄 mahjong red dragon
+🎴 flower playing cards
+🎭 performing arts
+🖼️ framed picture
+🎨 artist palette
+🧵 thread
+🪡 sewing needle
+🧶 yarn
+🪢 knot
+👓 glasses
+🕶️ sunglasses
+🥽 goggles
+🥼 lab coat
+🦺 safety vest
+👔 necktie
+👕 t-shirt
+👖 jeans
+🧣 scarf
+🧤 gloves
+🧥 coat
+🧦 socks
+👗 dress
+👘 kimono
+🥻 sari
+🩱 one-piece swimsuit
+🩲 briefs
+🩳 shorts
+👙 bikini
+👚 woman’s clothes
+👛 purse
+👜 handbag
+👝 clutch bag
+🛍️ shopping bags
+🎒 backpack
+🩴 thong sandal
+👞 man’s shoe
+👟 running shoe
+🥾 hiking boot
+🥿 flat shoe
+👠 high-heeled shoe
+👡 woman’s sandal
+🩰 ballet shoes
+👢 woman’s boot
+👑 crown
+👒 woman’s hat
+🎩 top hat
+🎓 graduation cap
+🧢 billed cap
+🪖 military helmet
+⛑️ rescue worker’s helmet
+📿 prayer beads
+💄 lipstick
+💍 ring
+💎 gem stone
+🔇 muted speaker
+🔈 speaker low volume
+🔉 speaker medium volume
+🔊 speaker high volume
+📢 loudspeaker
+📣 megaphone
+📯 postal horn
+🔔 bell
+🔕 bell with slash
+🎼 musical score
+🎵 musical note
+🎶 musical notes
+🎙️ studio microphone
+🎚️ level slider
+🎛️ control knobs
+🎤 microphone
+🎧 headphone
+📻 radio
+🎷 saxophone
+🪗 accordion
+🎸 guitar
+🎹 musical keyboard
+🎺 trumpet
+🎻 violin
+🪕 banjo
+🥁 drum
+🪘 long drum
+📱 mobile phone
+📲 mobile phone with arrow
+☎️ telephone
+📞 telephone receiver
+📟 pager
+📠 fax machine
+🔋 battery
+🪫 low battery
+🔌 electric plug
+💻 laptop
+🖥️ desktop computer
+🖨️ printer
+⌨️ keyboard
+🖱️ computer mouse
+🖲️ trackball
+💽 computer disk
+💾 floppy disk
+💿 optical disk
+📀 dvd
+🧮 abacus
+🎥 movie camera
+🎞️ film frames
+📽️ film projector
+🎬 clapper board
+📺 television
+📷 camera
+📸 camera with flash
+📹 video camera
+📼 videocassette
+🔍 magnifying glass tilted left
+🔎 magnifying glass tilted right
+🕯️ candle
+💡 light bulb
+🔦 flashlight
+🏮 red paper lantern
+🪔 diya lamp
+📔 notebook with decorative cover
+📕 closed book
+📖 open book
+📗 green book
+📘 blue book
+📙 orange book
+📚 books
+📓 notebook
+📒 ledger
+📃 page with curl
+📜 scroll
+📄 page facing up
+📰 newspaper
+🗞️ rolled-up newspaper
+📑 bookmark tabs
+🔖 bookmark
+🏷️ label
+💰 money bag
+🪙 coin
+💴 yen banknote
+💵 dollar banknote
+💶 euro banknote
+💷 pound banknote
+💸 money with wings
+💳 credit card
+🧾 receipt
+💹 chart increasing with yen
+✉️ envelope
+📧 e-mail
+📨 incoming envelope
+📩 envelope with arrow
+📤 outbox tray
+📥 inbox tray
+📦 package
+📫 closed mailbox with raised flag
+📪 closed mailbox with lowered flag
+📬 open mailbox with raised flag
+📭 open mailbox with lowered flag
+📮 postbox
+🗳️ ballot box with ballot
+✏️ pencil
+✒️ black nib
+🖋️ fountain pen
+🖊️ pen
+🖌️ paintbrush
+🖍️ crayon
+📝 memo
+💼 briefcase
+📁 file folder
+📂 open file folder
+🗂️ card index dividers
+📅 calendar
+📆 tear-off calendar
+🗒️ spiral notepad
+🗓️ spiral calendar
+📇 card index
+📈 chart increasing
+📉 chart decreasing
+📊 bar chart
+📋 clipboard
+📌 pushpin
+📍 round pushpin
+📎 paperclip
+🖇️ linked paperclips
+📏 straight ruler
+📐 triangular ruler
+✂️ scissors
+🗃️ card file box
+🗄️ file cabinet
+🗑️ wastebasket
+🔒 locked
+🔓 unlocked
+🔏 locked with pen
+🔐 locked with key
+🔑 key
+🗝️ old key
+🔨 hammer
+🪓 axe
+⛏️ pick
+⚒️ hammer and pick
+🛠️ hammer and wrench
+🗡️ dagger
+⚔️ crossed swords
+🔫 water pistol
+🪃 boomerang
+🏹 bow and arrow
+🛡️ shield
+🪚 carpentry saw
+🔧 wrench
+🪛 screwdriver
+🔩 nut and bolt
+⚙️ gear
+🗜️ clamp
+⚖️ balance scale
+🦯 white cane
+🔗 link
+⛓️ chains
+🪝 hook
+🧰 toolbox
+🧲 magnet
+🪜 ladder
+⚗️ alembic
+🧪 test tube
+🧫 petri dish
+🧬 dna
+🔬 microscope
+🔭 telescope
+📡 satellite antenna
+💉 syringe
+🩸 drop of blood
+💊 pill
+🩹 adhesive bandage
+🩼 crutch
+🩺 stethoscope
+🩻 x-ray
+🚪 door
+🛗 elevator
+🪞 mirror
+🪟 window
+🛏️ bed
+🛋️ couch and lamp
+🪑 chair
+🚽 toilet
+🪠 plunger
+🚿 shower
+🛁 bathtub
+🪤 mouse trap
+🪒 razor
+🧴 lotion bottle
+🧷 safety pin
+🧹 broom
+🧺 basket
+🧻 roll of paper
+🪣 bucket
+🧼 soap
+🫧 bubbles
+🪥 toothbrush
+🧽 sponge
+🧯 fire extinguisher
+🛒 shopping cart
+🚬 cigarette
+⚰️ coffin
+🪦 headstone
+⚱️ funeral urn
+🗿 moai
+🪧 placard
+🪪 identification card
+🏧 ATM sign
+🚮 litter in bin sign
+🚰 potable water
+♿ wheelchair symbol
+🚹 men’s room
+🚺 women’s room
+🚻 restroom
+🚼 baby symbol
+🚾 water closet
+🛂 passport control
+🛃 customs
+🛄 baggage claim
+🛅 left luggage
+⚠️ warning
+🚸 children crossing
+⛔ no entry
+🚫 prohibited
+🚳 no bicycles
+🚭 no smoking
+🚯 no littering
+🚱 non-potable water
+🚷 no pedestrians
+📵 no mobile phones
+🔞 no one under eighteen
+☢️ radioactive
+☣️ biohazard
+⬆️ up arrow
+↗️ up-right arrow
+➡️ right arrow
+↘️ down-right arrow
+⬇️ down arrow
+↙️ down-left arrow
+⬅️ left arrow
+↖️ up-left arrow
+↕️ up-down arrow
+↔️ left-right arrow
+↩️ right arrow curving left
+↪️ left arrow curving right
+⤴️ right arrow curving up
+⤵️ right arrow curving down
+🔃 clockwise vertical arrows
+🔄 counterclockwise arrows button
+🔙 BACK arrow
+🔚 END arrow
+🔛 ON! arrow
+🔜 SOON arrow
+🔝 TOP arrow
+🛐 place of worship
+⚛️ atom symbol
+🕉️ om
+✡️ star of David
+☸️ wheel of dharma
+☯️ yin yang
+✝️ latin cross
+☦️ orthodox cross
+☪️ star and crescent
+☮️ peace symbol
+🕎 menorah
+🔯 dotted six-pointed star
+♈ Aries
+♉ Taurus
+♊ Gemini
+♋ Cancer
+♌ Leo
+♍ Virgo
+♎ Libra
+♏ Scorpio
+♐ Sagittarius
+♑ Capricorn
+♒ Aquarius
+♓ Pisces
+⛎ Ophiuchus
+🔀 shuffle tracks button
+🔁 repeat button
+🔂 repeat single button
+▶️ play button
+⏩ fast-forward button
+⏭️ next track button
+⏯️ play or pause button
+◀️ reverse button
+⏪ fast reverse button
+⏮️ last track button
+🔼 upwards button
+⏫ fast up button
+🔽 downwards button
+⏬ fast down button
+⏸️ pause button
+⏹️ stop button
+⏺️ record button
+⏏️ eject button
+🎦 cinema
+🔅 dim button
+🔆 bright button
+📶 antenna bars
+📳 vibration mode
+📴 mobile phone off
+♀️ female sign
+♂️ male sign
+⚧️ transgender symbol
+✖️ multiply
+➕ plus
+➖ minus
+➗ divide
+🟰 heavy equals sign
+♾️ infinity
+‼️ double exclamation mark
+⁉️ exclamation question mark
+❓ red question mark
+❔ white question mark
+❕ white exclamation mark
+❗ red exclamation mark
+〰️ wavy dash
+💱 currency exchange
+💲 heavy dollar sign
+⚕️ medical symbol
+♻️ recycling symbol
+⚜️ fleur-de-lis
+🔱 trident emblem
+📛 name badge
+🔰 Japanese symbol for beginner
+⭕ hollow red circle
+✅ check mark button
+☑️ check box with check
+✔️ check mark
+❌ cross mark
+❎ cross mark button
+➰ curly loop
+➿ double curly loop
+〽️ part alternation mark
+✳️ eight-spoked asterisk
+✴️ eight-pointed star
+❇️ sparkle
+©️ copyright
+®️ registered
+™️ trade mark
+#️⃣ keycap: #
+*️⃣ keycap: *
+0️⃣ keycap: 0
+1️⃣ keycap: 1
+2️⃣ keycap: 2
+3️⃣ keycap: 3
+4️⃣ keycap: 4
+5️⃣ keycap: 5
+6️⃣ keycap: 6
+7️⃣ keycap: 7
+8️⃣ keycap: 8
+9️⃣ keycap: 9
+🔟 keycap: 10
+🔠 input latin uppercase
+🔡 input latin lowercase
+🔢 input numbers
+🔣 input symbols
+🔤 input latin letters
+🅰️ A button (blood type)
+🆎 AB button (blood type)
+🅱️ B button (blood type)
+🆑 CL button
+🆒 COOL button
+🆓 FREE button
+ℹ️ information
+🆔 ID button
+Ⓜ️ circled M
+🆕 NEW button
+🆖 NG button
+🅾️ O button (blood type)
+🆗 OK button
+🅿️ P button
+🆘 SOS button
+🆙 UP! button
+🆚 VS button
+🈁 Japanese “here” button
+🈂️ Japanese “service charge” button
+🈷️ Japanese “monthly amount” button
+🈶 Japanese “not free of charge” button
+🈯 Japanese “reserved” button
+🉐 Japanese “bargain” button
+🈹 Japanese “discount” button
+🈚 Japanese “free of charge” button
+🈲 Japanese “prohibited” button
+🉑 Japanese “acceptable” button
+🈸 Japanese “application” button
+🈴 Japanese “passing grade” button
+🈳 Japanese “vacancy” button
+㊗️ Japanese “congratulations” button
+㊙️ Japanese “secret” button
+🈺 Japanese “open for business” button
+🈵 Japanese “no vacancy” button
+🔴 red circle
+🟠 orange circle
+🟡 yellow circle
+🟢 green circle
+🔵 blue circle
+🟣 purple circle
+🟤 brown circle
+⚫ black circle
+⚪ white circle
+🟥 red square
+🟧 orange square
+🟨 yellow square
+🟩 green square
+🟦 blue square
+🟪 purple square
+🟫 brown square
+⬛ black large square
+⬜ white large square
+◼️ black medium square
+◻️ white medium square
+◾ black medium-small square
+◽ white medium-small square
+▪️ black small square
+▫️ white small square
+🔶 large orange diamond
+🔷 large blue diamond
+🔸 small orange diamond
+🔹 small blue diamond
+🔺 red triangle pointed up
+🔻 red triangle pointed down
+💠 diamond with a dot
+🔘 radio button
+🔳 white square button
+🔲 black square button
+🏁 chequered flag
+🚩 triangular flag
+🎌 crossed flags
+🏴 black flag
+🏳️ white flag
+🇦🇨 flag: Ascension Island
+🇦🇩 flag: Andorra
+🇦🇪 flag: United Arab Emirates
+🇦🇫 flag: Afghanistan
+🇦🇬 flag: Antigua & Barbuda
+🇦🇮 flag: Anguilla
+🇦🇱 flag: Albania
+🇦🇲 flag: Armenia
+🇦🇴 flag: Angola
+🇦🇶 flag: Antarctica
+🇦🇷 flag: Argentina
+🇦🇸 flag: American Samoa
+🇦🇹 flag: Austria
+🇦🇺 flag: Australia
+🇦🇼 flag: Aruba
+🇦🇽 flag: Åland Islands
+🇦🇿 flag: Azerbaijan
+🇧🇦 flag: Bosnia & Herzegovina
+🇧🇧 flag: Barbados
+🇧🇩 flag: Bangladesh
+🇧🇪 flag: Belgium
+🇧🇫 flag: Burkina Faso
+🇧🇬 flag: Bulgaria
+🇧🇭 flag: Bahrain
+🇧🇮 flag: Burundi
+🇧🇯 flag: Benin
+🇧🇱 flag: St. Barthélemy
+🇧🇲 flag: Bermuda
+🇧🇳 flag: Brunei
+🇧🇴 flag: Bolivia
+🇧🇶 flag: Caribbean Netherlands
+🇧🇷 flag: Brazil
+🇧🇸 flag: Bahamas
+🇧🇹 flag: Bhutan
+🇧🇻 flag: Bouvet Island
+🇧🇼 flag: Botswana
+🇧🇾 flag: Belarus
+🇧🇿 flag: Belize
+🇨🇦 flag: Canada
+🇨🇨 flag: Cocos (Keeling) Islands
+🇨🇩 flag: Congo - Kinshasa
+🇨🇫 flag: Central African Republic
+🇨🇬 flag: Congo - Brazzaville
+🇨🇭 flag: Switzerland
+🇨🇮 flag: Côte d’Ivoire
+🇨🇰 flag: Cook Islands
+🇨🇱 flag: Chile
+🇨🇲 flag: Cameroon
+🇨🇳 flag: China
+🇨🇴 flag: Colombia
+🇨🇵 flag: Clipperton Island
+🇨🇷 flag: Costa Rica
+🇨🇺 flag: Cuba
+🇨🇻 flag: Cape Verde
+🇨🇼 flag: Curaçao
+🇨🇽 flag: Christmas Island
+🇨🇾 flag: Cyprus
+🇨🇿 flag: Czechia
+🇩🇪 flag: Germany
+🇩🇬 flag: Diego Garcia
+🇩🇯 flag: Djibouti
+🇩🇰 flag: Denmark
+🇩🇲 flag: Dominica
+🇩🇴 flag: Dominican Republic
+🇩🇿 flag: Algeria
+🇪🇦 flag: Ceuta & Melilla
+🇪🇨 flag: Ecuador
+🇪🇪 flag: Estonia
+🇪🇬 flag: Egypt
+🇪🇭 flag: Western Sahara
+🇪🇷 flag: Eritrea
+🇪🇸 flag: Spain
+🇪🇹 flag: Ethiopia
+🇪🇺 flag: European Union
+🇫🇮 flag: Finland
+🇫🇯 flag: Fiji
+🇫🇰 flag: Falkland Islands
+🇫🇲 flag: Micronesia
+🇫🇴 flag: Faroe Islands
+🇫🇷 flag: France
+🇬🇦 flag: Gabon
+🇬🇧 flag: United Kingdom
+🇬🇩 flag: Grenada
+🇬🇪 flag: Georgia
+🇬🇫 flag: French Guiana
+🇬🇬 flag: Guernsey
+🇬🇭 flag: Ghana
+🇬🇮 flag: Gibraltar
+🇬🇱 flag: Greenland
+🇬🇲 flag: Gambia
+🇬🇳 flag: Guinea
+🇬🇵 flag: Guadeloupe
+🇬🇶 flag: Equatorial Guinea
+🇬🇷 flag: Greece
+🇬🇸 flag: South Georgia & South Sandwich Islands
+🇬🇹 flag: Guatemala
+🇬🇺 flag: Guam
+🇬🇼 flag: Guinea-Bissau
+🇬🇾 flag: Guyana
+🇭🇰 flag: Hong Kong SAR China
+🇭🇲 flag: Heard & McDonald Islands
+🇭🇳 flag: Honduras
+🇭🇷 flag: Croatia
+🇭🇹 flag: Haiti
+🇭🇺 flag: Hungary
+🇮🇨 flag: Canary Islands
+🇮🇩 flag: Indonesia
+🇮🇪 flag: Ireland
+🇮🇱 flag: Israel
+🇮🇲 flag: Isle of Man
+🇮🇳 flag: India
+🇮🇴 flag: British Indian Ocean Territory
+🇮🇶 flag: Iraq
+🇮🇷 flag: Iran
+🇮🇸 flag: Iceland
+🇮🇹 flag: Italy
+🇯🇪 flag: Jersey
+🇯🇲 flag: Jamaica
+🇯🇴 flag: Jordan
+🇯🇵 flag: Japan
+🇰🇪 flag: Kenya
+🇰🇬 flag: Kyrgyzstan
+🇰🇭 flag: Cambodia
+🇰🇮 flag: Kiribati
+🇰🇲 flag: Comoros
+🇰🇳 flag: St. Kitts & Nevis
+🇰🇵 flag: North Korea
+🇰🇷 flag: South Korea
+🇰🇼 flag: Kuwait
+🇰🇾 flag: Cayman Islands
+🇰🇿 flag: Kazakhstan
+🇱🇦 flag: Laos
+🇱🇧 flag: Lebanon
+🇱🇨 flag: St. Lucia
+🇱🇮 flag: Liechtenstein
+🇱🇰 flag: Sri Lanka
+🇱🇷 flag: Liberia
+🇱🇸 flag: Lesotho
+🇱🇹 flag: Lithuania
+🇱🇺 flag: Luxembourg
+🇱🇻 flag: Latvia
+🇱🇾 flag: Libya
+🇲🇦 flag: Morocco
+🇲🇨 flag: Monaco
+🇲🇩 flag: Moldova
+🇲🇪 flag: Montenegro
+🇲🇫 flag: St. Martin
+🇲🇬 flag: Madagascar
+🇲🇭 flag: Marshall Islands
+🇲🇰 flag: North Macedonia
+🇲🇱 flag: Mali
+🇲🇲 flag: Myanmar (Burma)
+🇲🇳 flag: Mongolia
+🇲🇴 flag: Macao SAR China
+🇲🇵 flag: Northern Mariana Islands
+🇲🇶 flag: Martinique
+🇲🇷 flag: Mauritania
+🇲🇸 flag: Montserrat
+🇲🇹 flag: Malta
+🇲🇺 flag: Mauritius
+🇲🇻 flag: Maldives
+🇲🇼 flag: Malawi
+🇲🇽 flag: Mexico
+🇲🇾 flag: Malaysia
+🇲🇿 flag: Mozambique
+🇳🇦 flag: Namibia
+🇳🇨 flag: New Caledonia
+🇳🇪 flag: Niger
+🇳🇫 flag: Norfolk Island
+🇳🇬 flag: Nigeria
+🇳🇮 flag: Nicaragua
+🇳🇱 flag: Netherlands
+🇳🇴 flag: Norway
+🇳🇵 flag: Nepal
+🇳🇷 flag: Nauru
+🇳🇺 flag: Niue
+🇳🇿 flag: New Zealand
+🇴🇲 flag: Oman
+🇵🇦 flag: Panama
+🇵🇪 flag: Peru
+🇵🇫 flag: French Polynesia
+🇵🇬 flag: Papua New Guinea
+🇵🇭 flag: Philippines
+🇵🇰 flag: Pakistan
+🇵🇱 flag: Poland
+🇵🇲 flag: St. Pierre & Miquelon
+🇵🇳 flag: Pitcairn Islands
+🇵🇷 flag: Puerto Rico
+🇵🇸 flag: Palestinian Territories
+🇵🇹 flag: Portugal
+🇵🇼 flag: Palau
+🇵🇾 flag: Paraguay
+🇶🇦 flag: Qatar
+🇷🇪 flag: Réunion
+🇷🇴 flag: Romania
+🇷🇸 flag: Serbia
+🇷🇺 flag: Russia
+🇷🇼 flag: Rwanda
+🇸🇦 flag: Saudi Arabia
+🇸🇧 flag: Solomon Islands
+🇸🇨 flag: Seychelles
+🇸🇩 flag: Sudan
+🇸🇪 flag: Sweden
+🇸🇬 flag: Singapore
+🇸🇭 flag: St. Helena
+🇸🇮 flag: Slovenia
+🇸🇯 flag: Svalbard & Jan Mayen
+🇸🇰 flag: Slovakia
+🇸🇱 flag: Sierra Leone
+🇸🇲 flag: San Marino
+🇸🇳 flag: Senegal
+🇸🇴 flag: Somalia
+🇸🇷 flag: Suriname
+🇸🇸 flag: South Sudan
+🇸🇹 flag: São Tomé & Príncipe
+🇸🇻 flag: El Salvador
+🇸🇽 flag: Sint Maarten
+🇸🇾 flag: Syria
+🇸🇿 flag: Eswatini
+🇹🇦 flag: Tristan da Cunha
+🇹🇨 flag: Turks & Caicos Islands
+🇹🇩 flag: Chad
+🇹🇫 flag: French Southern Territories
+🇹🇬 flag: Togo
+🇹🇭 flag: Thailand
+🇹🇯 flag: Tajikistan
+🇹🇰 flag: Tokelau
+🇹🇱 flag: Timor-Leste
+🇹🇲 flag: Turkmenistan
+🇹🇳 flag: Tunisia
+🇹🇴 flag: Tonga
+🇹🇷 flag: Turkey
+🇹🇹 flag: Trinidad & Tobago
+🇹🇻 flag: Tuvalu
+🇹🇼 flag: Taiwan
+🇹🇿 flag: Tanzania
+🇺🇦 flag: Ukraine
+🇺🇬 flag: Uganda
+🇺🇲 flag: U.S. Outlying Islands
+🇺🇳 flag: United Nations
+🇺🇸 flag: United States
+🇺🇾 flag: Uruguay
+🇺🇿 flag: Uzbekistan
+🇻🇦 flag: Vatican City
+🇻🇨 flag: St. Vincent & Grenadines
+🇻🇪 flag: Venezuela
+🇻🇬 flag: British Virgin Islands
+🇻🇮 flag: U.S. Virgin Islands
+🇻🇳 flag: Vietnam
+🇻🇺 flag: Vanuatu
+🇼🇫 flag: Wallis & Futuna
+🇼🇸 flag: Samoa
+🇽🇰 flag: Kosovo
+🇾🇪 flag: Yemen
+🇾🇹 flag: Mayotte
+🇿🇦 flag: South Africa
+🇿🇲 flag: Zambia
+🇿🇼 flag: Zimbabwe
+🏴󠁧󠁢󠁥󠁮󠁧󠁿 flag: England
+🏴󠁧󠁢󠁳󠁣󠁴󠁿 flag: Scotland
+🏴󠁧󠁢󠁷󠁬󠁳󠁿 flag: Wales
+
diff --git a/.local/share/chars/font-awesome b/.local/share/chars/font-awesome
new file mode 100644
index 00000000..3283be3d
--- /dev/null
+++ b/.local/share/chars/font-awesome
@@ -0,0 +1,1456 @@
+  500px; f26e
+  accessible-icon; f368
+  accusoft; f369
+  acquisitions-incorporated; f6af
+  ad; f641
+  address-book; f2b9
+  address-card; f2bb
+  adjust; f042
+  adn; f170
+  adversal; f36a
+  affiliatetheme; f36b
+  air-freshener; f5d0
+  airbnb; f834
+  algolia; f36c
+  align-center; f037
+  align-justify; f039
+  align-left; f036
+  align-right; f038
+  alipay; f642
+  allergies; f461
+  amazon; f270
+  amazon-pay; f42c
+  ambulance; f0f9
+  american-sign-language-interpreting; f2a3
+  amilia; f36d
+  anchor; f13d
+  android; f17b
+  angellist; f209
+  angle-double-down; f103
+  angle-double-left; f100
+  angle-double-right; f101
+  angle-double-up; f102
+  angle-down; f107
+  angle-left; f104
+  angle-right; f105
+  angle-up; f106
+  angry; f556
+  angrycreative; f36e
+  angular; f420
+  ankh; f644
+  app-store; f36f
+  app-store-ios; f370
+  apper; f371
+  apple; f179
+  apple-alt; f5d1
+  apple-pay; f415
+  archive; f187
+  archway; f557
+  arrow-alt-circle-down; f358
+  arrow-alt-circle-left; f359
+  arrow-alt-circle-right; f35a
+  arrow-alt-circle-up; f35b
+  arrow-circle-down; f0ab
+  arrow-circle-left; f0a8
+  arrow-circle-right; f0a9
+  arrow-circle-up; f0aa
+  arrow-down; f063
+  arrow-left; f060
+  arrow-right; f061
+  arrow-up; f062
+  arrows-alt; f0b2
+  arrows-alt-h; f337
+  arrows-alt-v; f338
+  artstation; f77a
+  assistive-listening-systems; f2a2
+  asterisk; f069
+  asymmetrik; f372
+  at; f1fa
+  atlas; f558
+  atlassian; f77b
+  atom; f5d2
+  audible; f373
+  audio-description; f29e
+  autoprefixer; f41c
+  avianex; f374
+  aviato; f421
+  award; f559
+  aws; f375
+  baby; f77c
+  baby-carriage; f77d
+  backspace; f55a
+  backward; f04a
+  bacon; f7e5
+  bacteria e059
+  bacterium e05a
+  bahai; f666
+  balance-scale; f24e
+  balance-scale-left; f515
+  balance-scale-right; f516
+  ban; f05e
+  band-aid; f462
+  bandcamp; f2d5
+  barcode; f02a
+  bars; f0c9
+  baseball-ball; f433
+  basketball-ball; f434
+  bath; f2cd
+  battery-empty; f244
+  battery-full; f240
+  battery-half; f242
+  battery-quarter; f243
+  battery-three-quarters; f241
+  battle-net; f835
+  bed; f236
+  beer; f0fc
+  behance; f1b4
+  behance-square; f1b5
+  bell; f0f3
+  bell-slash; f1f6
+  bezier-curve; f55b
+  bible; f647
+  bicycle; f206
+  biking; f84a
+  bimobject; f378
+  binoculars; f1e5
+  biohazard; f780
+  birthday-cake; f1fd
+  bitbucket; f171
+  bitcoin; f379
+  bity; f37a
+  black-tie; f27e
+  blackberry; f37b
+  blender; f517
+  blender-phone; f6b6
+  blind; f29d
+  blog; f781
+  blogger; f37c
+  blogger-b; f37d
+  bluetooth; f293
+  bluetooth-b; f294
+  bold; f032
+  bolt; f0e7
+  bomb; f1e2
+  bone; f5d7
+  bong; f55c
+  book; f02d
+  book-dead; f6b7
+  book-medical; f7e6
+  book-open; f518
+  book-reader; f5da
+  bookmark; f02e
+  bootstrap; f836
+  border-all; f84c
+  border-none; f850
+  border-style; f853
+  bowling-ball; f436
+  box; f466
+  box-open; f49e
+  box-tissue e05b
+  boxes; f468
+  braille; f2a1
+  brain; f5dc
+  bread-slice; f7ec
+  briefcase; f0b1
+  briefcase-medical; f469
+  broadcast-tower; f519
+  broom; f51a
+  brush; f55d
+  btc; f15a
+  buffer; f837
+  bug; f188
+  building; f1ad
+  bullhorn; f0a1
+  bullseye; f140
+  burn; f46a
+  buromobelexperte; f37f
+  bus; f207
+  bus-alt; f55e
+  business-time; f64a
+  buy-n-large; f8a6
+  calculator; f1ec
+  calendar; f133
+  calendar-alt; f073
+  calendar-check; f274
+  calendar-day; f783
+  calendar-minus; f272
+  calendar-plus; f271
+  calendar-times; f273
+  calendar-week; f784
+  camera; f030
+  camera-retro; f083
+  campground; f6bb
+  canadian-maple-leaf; f785
+  candy-cane; f786
+  cannabis; f55f
+  capsules; f46b
+  car; f1b9
+  car-alt; f5de
+  car-battery; f5df
+  car-crash; f5e1
+  car-side; f5e4
+  caravan; f8ff
+  caret-down; f0d7
+  caret-left; f0d9
+  caret-right; f0da
+  caret-square-down; f150
+  caret-square-left; f191
+  caret-square-right; f152
+  caret-square-up; f151
+  caret-up; f0d8
+  carrot; f787
+  cart-arrow-down; f218
+  cart-plus; f217
+  cash-register; f788
+  cat; f6be
+  cc-amazon-pay; f42d
+  cc-amex; f1f3
+  cc-apple-pay; f416
+  cc-diners-club; f24c
+  cc-discover; f1f2
+  cc-jcb; f24b
+  cc-mastercard; f1f1
+  cc-paypal; f1f4
+  cc-stripe; f1f5
+  cc-visa; f1f0
+  centercode; f380
+  centos; f789
+  certificate; f0a3
+  chair; f6c0
+  chalkboard; f51b
+  chalkboard-teacher; f51c
+  charging-station; f5e7
+  chart-area; f1fe
+  chart-bar; f080
+  chart-line; f201
+  chart-pie; f200
+  check; f00c
+  check-circle; f058
+  check-double; f560
+  check-square; f14a
+  cheese; f7ef
+  chess; f439
+  chess-bishop; f43a
+  chess-board; f43c
+  chess-king; f43f
+  chess-knight; f441
+  chess-pawn; f443
+  chess-queen; f445
+  chess-rook; f447
+  chevron-circle-down; f13a
+  chevron-circle-left; f137
+  chevron-circle-right; f138
+  chevron-circle-up; f139
+  chevron-down; f078
+  chevron-left; f053
+  chevron-right; f054
+  chevron-up; f077
+  child; f1ae
+  chrome; f268
+  chromecast; f838
+  church; f51d
+  circle; f111
+  circle-notch; f1ce
+  city; f64f
+  clinic-medical; f7f2
+  clipboard; f328
+  clipboard-check; f46c
+  clipboard-list; f46d
+  clock; f017
+  clone; f24d
+  closed-captioning; f20a
+  cloud; f0c2
+  cloud-download-alt; f381
+  cloud-meatball; f73b
+  cloud-moon; f6c3
+  cloud-moon-rain; f73c
+  cloud-rain; f73d
+  cloud-showers-heavy; f740
+  cloud-sun; f6c4
+  cloud-sun-rain; f743
+  cloud-upload-alt; f382
+  cloudflare e07d
+  cloudscale; f383
+  cloudsmith; f384
+  cloudversify; f385
+  cocktail; f561
+  code; f121
+  code-branch; f126
+  codepen; f1cb
+  codiepie; f284
+  coffee; f0f4
+  cog; f013
+  cogs; f085
+  coins; f51e
+  columns; f0db
+  comment; f075
+  comment-alt; f27a
+  comment-dollar; f651
+  comment-dots; f4ad
+  comment-medical; f7f5
+  comment-slash; f4b3
+  comments; f086
+  comments-dollar; f653
+  compact-disc; f51f
+  compass; f14e
+  compress; f066
+  compress-alt; f422
+  compress-arrows-alt; f78c
+  concierge-bell; f562
+  confluence; f78d
+  connectdevelop; f20e
+  contao; f26d
+  cookie; f563
+  cookie-bite; f564
+  copy; f0c5
+  copyright; f1f9
+  cotton-bureau; f89e
+  couch; f4b8
+  cpanel; f388
+  creative-commons; f25e
+  creative-commons-by; f4e7
+  creative-commons-nc; f4e8
+  creative-commons-nc-eu; f4e9
+  creative-commons-nc-jp; f4ea
+  creative-commons-nd; f4eb
+  creative-commons-pd; f4ec
+  creative-commons-pd-alt; f4ed
+  creative-commons-remix; f4ee
+  creative-commons-sa; f4ef
+  creative-commons-sampling; f4f0
+  creative-commons-sampling-plus; f4f1
+  creative-commons-share; f4f2
+  creative-commons-zero; f4f3
+  credit-card; f09d
+  critical-role; f6c9
+  crop; f125
+  crop-alt; f565
+  cross; f654
+  crosshairs; f05b
+  crow; f520
+  crown; f521
+  crutch; f7f7
+  css3; f13c
+  css3-alt; f38b
+  cube; f1b2
+  cubes; f1b3
+  cut; f0c4
+  cuttlefish; f38c
+  d-and-d; f38d
+  d-and-d-beyond; f6ca
+  dailymotion e052
+  dashcube; f210
+  database; f1c0
+  deaf; f2a4
+  deezer e077
+  delicious; f1a5
+  democrat; f747
+  deploydog; f38e
+  deskpro; f38f
+  desktop; f108
+  dev; f6cc
+  deviantart; f1bd
+  dharmachakra; f655
+  dhl; f790
+  diagnoses; f470
+  diaspora; f791
+  dice; f522
+  dice-d20; f6cf
+  dice-d6; f6d1
+  dice-five; f523
+  dice-four; f524
+  dice-one; f525
+  dice-six; f526
+  dice-three; f527
+  dice-two; f528
+  digg; f1a6
+  digital-ocean; f391
+  digital-tachograph; f566
+  directions; f5eb
+  discord; f392
+  discourse; f393
+  disease; f7fa
+  divide; f529
+  dizzy; f567
+  dna; f471
+  dochub; f394
+  docker; f395
+  dog; f6d3
+  dollar-sign; f155
+  dolly; f472
+  dolly-flatbed; f474
+  donate; f4b9
+  door-closed; f52a
+  door-open; f52b
+  dot-circle; f192
+  dove; f4ba
+  download; f019
+  draft2digital; f396
+  drafting-compass; f568
+  dragon; f6d5
+  draw-polygon; f5ee
+  dribbble; f17d
+  dribbble-square; f397
+  dropbox; f16b
+  drum; f569
+  drum-steelpan; f56a
+  drumstick-bite; f6d7
+  drupal; f1a9
+  dumbbell; f44b
+  dumpster; f793
+  dumpster-fire; f794
+  dungeon; f6d9
+  dyalog; f399
+  earlybirds; f39a
+  ebay; f4f4
+  edge; f282
+  edge-legacy e078
+  edit; f044
+  egg; f7fb
+  eject; f052
+  elementor; f430
+  ellipsis-h; f141
+  ellipsis-v; f142
+  ello; f5f1
+  ember; f423
+  empire; f1d1
+  envelope; f0e0
+  envelope-open; f2b6
+  envelope-open-text; f658
+  envelope-square; f199
+  envira; f299
+  equals; f52c
+  eraser; f12d
+  erlang; f39d
+  ethereum; f42e
+  ethernet; f796
+  etsy; f2d7
+  euro-sign; f153
+  evernote; f839
+  exchange-alt; f362
+  exclamation; f12a
+  exclamation-circle; f06a
+  exclamation-triangle; f071
+  expand; f065
+  expand-alt; f424
+  expand-arrows-alt; f31e
+  expeditedssl; f23e
+  external-link-alt; f35d
+  external-link-square-alt; f360
+  eye; f06e
+  eye-dropper; f1fb
+  eye-slash; f070
+ ; facebook; f09a
+ ; facebook-f; f39e
+ ; facebook-messenger; f39f
+ ; facebook-square; f082
+ ; fan; f863
+ ; fantasy-flight-games; f6dc
+ ; fast-backward; f049
+ ; fast-forward; f050
+ ; faucet e005
+ ; fax; f1ac
+ ; feather; f52d
+ ; feather-alt; f56b
+ ; fedex; f797
+ ; fedora; f798
+ ; female; f182
+ ; fighter-jet; f0fb
+ ; figma; f799
+ ; file; f15b
+ ; file-alt; f15c
+ ; file-archive; f1c6
+ ; file-audio; f1c7
+ ; file-code; f1c9
+ ; file-contract; f56c
+ ; file-csv; f6dd
+ ; file-download; f56d
+ ; file-excel; f1c3
+ ; file-export; f56e
+ ; file-image; f1c5
+ ; file-import; f56f
+ ; file-invoice; f570
+ ; file-invoice-dollar; f571
+ ; file-medical; f477
+ ; file-medical-alt; f478
+ ; file-pdf; f1c1
+ ; file-powerpoint; f1c4
+ ; file-prescription; f572
+ ; file-signature; f573
+ ; file-upload; f574
+ ; file-video; f1c8
+ ; file-word; f1c2
+ ; fill; f575
+ ; fill-drip; f576
+ ; film; f008
+ ; filter; f0b0
+ ; fingerprint; f577
+ ; fire; f06d
+ ; fire-alt; f7e4
+ ; fire-extinguisher; f134
+ ; firefox; f269
+ ; firefox-browser e007
+ ; first-aid; f479
+ ; first-order; f2b0
+ ; first-order-alt; f50a
+ ; firstdraft; f3a1
+ ; fish; f578
+ ; fist-raised; f6de
+ ; flag; f024
+ ; flag-checkered; f11e
+ ; flag-usa; f74d
+ ; flask; f0c3
+ ; flickr; f16e
+ ; flipboard; f44d
+ ; flushed; f579
+ ; fly; f417
+ ; folder; f07b
+ ; folder-minus; f65d
+ ; folder-open; f07c
+ ; folder-plus; f65e
+ ; font; f031
+ ; font-awesome; f2b4
+ ; font-awesome-alt; f35c
+ ; font-awesome-flag; f425
+ ; fonticons; f280
+ ; fonticons-fi; f3a2
+ ; football-ball; f44e
+ ; fort-awesome; f286
+ ; fort-awesome-alt; f3a3
+ ; forumbee; f211
+ ; forward; f04e
+ ; foursquare; f180
+ ; free-code-camp; f2c5
+ ; freebsd; f3a4
+ ; frog; f52e
+ ; frown; f119
+ ; frown-open; f57a
+ ; fulcrum; f50b
+ ; funnel-dollar; f662
+ ; futbol; f1e3
+  galactic-republic; f50c
+  galactic-senate; f50d
+  gamepad; f11b
+  gas-pump; f52f
+  gavel; f0e3
+  gem; f3a5
+  genderless; f22d
+  get-pocket; f265
+  gg; f260
+  gg-circle; f261
+  ghost; f6e2
+  gift; f06b
+  gifts; f79c
+  git; f1d3
+  git-alt; f841
+  git-square; f1d2
+  github; f09b
+  github-alt; f113
+  github-square; f092
+  gitkraken; f3a6
+  gitlab; f296
+  gitter; f426
+  glass-cheers; f79f
+  glass-martini; f000
+  glass-martini-alt; f57b
+  glass-whiskey; f7a0
+  glasses; f530
+  glide; f2a5
+  glide-g; f2a6
+  globe; f0ac
+  globe-africa; f57c
+  globe-americas; f57d
+  globe-asia; f57e
+  globe-europe; f7a2
+  gofore; f3a7
+  golf-ball; f450
+  goodreads; f3a8
+  goodreads-g; f3a9
+  google; f1a0
+  google-drive; f3aa
+  google-pay e079
+  google-play; f3ab
+  google-plus; f2b3
+  google-plus-g; f0d5
+  google-plus-square; f0d4
+  google-wallet; f1ee
+  gopuram; f664
+  graduation-cap; f19d
+  gratipay; f184
+  grav; f2d6
+  greater-than; f531
+  greater-than-equal; f532
+  grimace; f57f
+  grin; f580
+  grin-alt; f581
+  grin-beam; f582
+  grin-beam-sweat; f583
+  grin-hearts; f584
+  grin-squint; f585
+  grin-squint-tears; f586
+  grin-stars; f587
+  grin-tears; f588
+  grin-tongue; f589
+  grin-tongue-squint; f58a
+  grin-tongue-wink; f58b
+  grin-wink; f58c
+  grip-horizontal; f58d
+  grip-lines; f7a4
+  grip-lines-vertical; f7a5
+  grip-vertical; f58e
+  gripfire; f3ac
+  grunt; f3ad
+  guilded e07e
+  guitar; f7a6
+  gulp; f3ae
+  h-square; f0fd
+  hacker-news; f1d4
+  hacker-news-square; f3af
+  hackerrank; f5f7
+  hamburger; f805
+  hammer; f6e3
+  hamsa; f665
+  hand-holding; f4bd
+  hand-holding-heart; f4be
+  hand-holding-medical e05c
+  hand-holding-usd; f4c0
+  hand-holding-water; f4c1
+  hand-lizard; f258
+  hand-middle-finger; f806
+  hand-paper; f256
+  hand-peace; f25b
+  hand-point-down; f0a7
+  hand-point-left; f0a5
+  hand-point-right; f0a4
+  hand-point-up; f0a6
+  hand-pointer; f25a
+  hand-rock; f255
+  hand-scissors; f257
+  hand-sparkles e05d
+  hand-spock; f259
+  hands; f4c2
+  hands-helping; f4c4
+  hands-wash e05e
+  handshake; f2b5
+  handshake-alt-slash e05f
+  handshake-slash e060
+  hanukiah; f6e6
+  hard-hat; f807
+  hashtag; f292
+  hat-cowboy; f8c0
+  hat-cowboy-side; f8c1
+  hat-wizard; f6e8
+  hdd; f0a0
+  head-side-cough e061
+  head-side-cough-slash e062
+  head-side-mask e063
+  head-side-virus e064
+  heading; f1dc
+  headphones; f025
+  headphones-alt; f58f
+  headset; f590
+  heart; f004
+  heart-broken; f7a9
+  heartbeat; f21e
+  helicopter; f533
+  highlighter; f591
+  hiking; f6ec
+  hippo; f6ed
+  hips; f452
+  hire-a-helper; f3b0
+  history; f1da
+  hive e07f
+  hockey-puck; f453
+  holly-berry; f7aa
+  home; f015
+  hooli; f427
+  hornbill; f592
+  horse; f6f0
+  horse-head; f7ab
+  hospital; f0f8
+  hospital-alt; f47d
+  hospital-symbol; f47e
+  hospital-user; f80d
+  hot-tub; f593
+  hotdog; f80f
+  hotel; f594
+  hotjar; f3b1
+  hourglass; f254
+  hourglass-end; f253
+  hourglass-half; f252
+  hourglass-start; f251
+  house-damage; f6f1
+  house-user e065
+  houzz; f27c
+  hryvnia; f6f2
+  html5; f13b
+  hubspot; f3b2
+  i-cursor; f246
+  ice-cream; f810
+  icicles; f7ad
+  icons; f86d
+  id-badge; f2c1
+  id-card; f2c2
+  id-card-alt; f47f
+  ideal e013
+  igloo; f7ae
+  image; f03e
+  images; f302
+  imdb; f2d8
+  inbox; f01c
+  indent; f03c
+  industry; f275
+  infinity; f534
+  info; f129
+  info-circle; f05a
+  innosoft e080
+  instagram; f16d
+  instagram-square e055
+  instalod e081
+  intercom; f7af
+  internet-explorer; f26b
+  invision; f7b0
+  ioxhost; f208
+  italic; f033
+  itch-io; f83a
+  itunes; f3b4
+  itunes-note; f3b5
+  java; f4e4
+  jedi; f669
+  jedi-order; f50e
+  jenkins; f3b6
+  jira; f7b1
+  joget; f3b7
+  joint; f595
+  joomla; f1aa
+  journal-whills; f66a
+  js; f3b8
+  js-square; f3b9
+  jsfiddle; f1cc
+  kaaba; f66b
+  kaggle; f5fa
+  key; f084
+  keybase; f4f5
+  keyboard; f11c
+  keycdn; f3ba
+  khanda; f66d
+  kickstarter; f3bb
+  kickstarter-k; f3bc
+  kiss; f596
+  kiss-beam; f597
+  kiss-wink-heart; f598
+  kiwi-bird; f535
+  korvue; f42f
+  landmark; f66f
+  language; f1ab
+  laptop; f109
+  laptop-code; f5fc
+  laptop-house e066
+  laptop-medical; f812
+  laravel; f3bd
+  lastfm; f202
+  lastfm-square; f203
+  laugh; f599
+  laugh-beam; f59a
+  laugh-squint; f59b
+  laugh-wink; f59c
+  layer-group; f5fd
+  leaf; f06c
+  leanpub; f212
+  lemon; f094
+  less; f41d
+  less-than; f536
+  less-than-equal; f537
+  level-down-alt; f3be
+  level-up-alt; f3bf
+  life-ring; f1cd
+  lightbulb; f0eb
+  line; f3c0
+  link; f0c1
+  linkedin; f08c
+  linkedin-in; f0e1
+  linode; f2b8
+  linux; f17c
+  lira-sign; f195
+  list; f03a
+  list-alt; f022
+  list-ol; f0cb
+  list-ul; f0ca
+  location-arrow; f124
+  lock; f023
+  lock-open; f3c1
+  long-arrow-alt-down; f309
+  long-arrow-alt-left; f30a
+  long-arrow-alt-right; f30b
+  long-arrow-alt-up; f30c
+  low-vision; f2a8
+  luggage-cart; f59d
+  lungs; f604
+  lungs-virus e067
+  lyft; f3c3
+  magento; f3c4
+  magic; f0d0
+  magnet; f076
+  mail-bulk; f674
+  mailchimp; f59e
+  male; f183
+  mandalorian; f50f
+  map; f279
+  map-marked; f59f
+  map-marked-alt; f5a0
+  map-marker; f041
+  map-marker-alt; f3c5
+  map-pin; f276
+  map-signs; f277
+  markdown; f60f
+  marker; f5a1
+  mars; f222
+  mars-double; f227
+  mars-stroke; f229
+  mars-stroke-h; f22b
+  mars-stroke-v; f22a
+  mask; f6fa
+  mastodon; f4f6
+  maxcdn; f136
+  mdb; f8ca
+  medal; f5a2
+  medapps; f3c6
+  medium; f23a
+  medium-m; f3c7
+  medkit; f0fa
+  medrt; f3c8
+  meetup; f2e0
+  megaport; f5a3
+  meh; f11a
+  meh-blank; f5a4
+  meh-rolling-eyes; f5a5
+  memory; f538
+  mendeley; f7b3
+  menorah; f676
+  mercury; f223
+  meteor; f753
+  microblog e01a
+  microchip; f2db
+  microphone; f130
+  microphone-alt; f3c9
+  microphone-alt-slash; f539
+  microphone-slash; f131
+  microscope; f610
+  microsoft; f3ca
+  minus; f068
+  minus-circle; f056
+  minus-square; f146
+  mitten; f7b5
+  mix; f3cb
+  mixcloud; f289
+  mixer e056
+  mizuni; f3cc
+  mobile; f10b
+  mobile-alt; f3cd
+  modx; f285
+  monero; f3d0
+  money-bill; f0d6
+  money-bill-alt; f3d1
+  money-bill-wave; f53a
+  money-bill-wave-alt; f53b
+  money-check; f53c
+  money-check-alt; f53d
+  monument; f5a6
+  moon; f186
+  mortar-pestle; f5a7
+  mosque; f678
+  motorcycle; f21c
+  mountain; f6fc
+  mouse; f8cc
+  mouse-pointer; f245
+  mug-hot; f7b6
+  music; f001
+  napster; f3d2
+  neos; f612
+  network-wired; f6ff
+  neuter; f22c
+  newspaper; f1ea
+  nimblr; f5a8
+  node; f419
+  node-js; f3d3
+  not-equal; f53e
+  notes-medical; f481
+  npm; f3d4
+  ns8; f3d5
+  nutritionix; f3d6
+  object-group; f247
+  object-ungroup; f248
+  octopus-deploy e082
+  odnoklassniki; f263
+  odnoklassniki-square; f264
+  oil-can; f613
+  old-republic; f510
+  om; f679
+  opencart; f23d
+  openid; f19b
+  opera; f26a
+  optin-monster; f23c
+  orcid; f8d2
+  osi; f41a
+  otter; f700
+  outdent; f03b
+  page4; f3d7
+  pagelines; f18c
+  pager; f815
+  paint-brush; f1fc
+  paint-roller; f5aa
+  palette; f53f
+  palfed; f3d8
+  pallet; f482
+  paper-plane; f1d8
+  paperclip; f0c6
+  parachute-box; f4cd
+  paragraph; f1dd
+  parking; f540
+  passport; f5ab
+  pastafarianism; f67b
+  paste; f0ea
+  patreon; f3d9
+  pause; f04c
+  pause-circle; f28b
+  paw; f1b0
+  paypal; f1ed
+  peace; f67c
+  pen; f304
+  pen-alt; f305
+  pen-fancy; f5ac
+  pen-nib; f5ad
+  pen-square; f14b
+  pencil-alt; f303
+  pencil-ruler; f5ae
+  penny-arcade; f704
+  people-arrows e068
+  people-carry; f4ce
+  pepper-hot; f816
+  perbyte e083
+  percent; f295
+  percentage; f541
+  periscope; f3da
+  person-booth; f756
+  phabricator; f3db
+  phoenix-framework; f3dc
+  phoenix-squadron; f511
+  phone; f095
+  phone-alt; f879
+  phone-slash; f3dd
+  phone-square; f098
+  phone-square-alt; f87b
+  phone-volume; f2a0
+  photo-video; f87c
+  php; f457
+  pied-piper; f2ae
+  pied-piper-alt; f1a8
+  pied-piper-hat; f4e5
+  pied-piper-pp; f1a7
+  pied-piper-square e01e
+  piggy-bank; f4d3
+  pills; f484
+  pinterest; f0d2
+  pinterest-p; f231
+  pinterest-square; f0d3
+  pizza-slice; f818
+  place-of-worship; f67f
+  plane; f072
+  plane-arrival; f5af
+  plane-departure; f5b0
+  plane-slash e069
+  play; f04b
+  play-circle; f144
+  playstation; f3df
+  plug; f1e6
+  plus; f067
+  plus-circle; f055
+  plus-square; f0fe
+  podcast; f2ce
+  poll; f681
+  poll-h; f682
+  poo; f2fe
+  poo-storm; f75a
+  poop; f619
+  portrait; f3e0
+  pound-sign; f154
+  power-off; f011
+  pray; f683
+  praying-hands; f684
+  prescription; f5b1
+  prescription-bottle; f485
+  prescription-bottle-alt; f486
+  print; f02f
+  procedures; f487
+  product-hunt; f288
+  project-diagram; f542
+  pump-medical e06a
+  pump-soap e06b
+  pushed; f3e1
+  puzzle-piece; f12e
+  python; f3e2
+  qq; f1d6
+  qrcode; f029
+  question; f128
+  question-circle; f059
+  quidditch; f458
+  quinscape; f459
+  quora; f2c4
+  quote-left; f10d
+  quote-right; f10e
+  quran; f687
+  r-project; f4f7
+  radiation; f7b9
+  radiation-alt; f7ba
+  rainbow; f75b
+  random; f074
+  raspberry-pi; f7bb
+  ravelry; f2d9
+  react; f41b
+  reacteurope; f75d
+  readme; f4d5
+  rebel; f1d0
+  receipt; f543
+  record-vinyl; f8d9
+  recycle; f1b8
+  red-river; f3e3
+  reddit; f1a1
+  reddit-alien; f281
+  reddit-square; f1a2
+  redhat; f7bc
+  redo; f01e
+  redo-alt; f2f9
+  registered; f25d
+  remove-format; f87d
+  renren; f18b
+  reply; f3e5
+  reply-all; f122
+  replyd; f3e6
+  republican; f75e
+  researchgate; f4f8
+  resolving; f3e7
+  restroom; f7bd
+  retweet; f079
+  rev; f5b2
+  ribbon; f4d6
+  ring; f70b
+  road; f018
+  robot; f544
+  rocket; f135
+  rocketchat; f3e8
+  rockrms; f3e9
+  route; f4d7
+  rss; f09e
+  rss-square; f143
+  ruble-sign; f158
+  ruler; f545
+  ruler-combined; f546
+  ruler-horizontal; f547
+  ruler-vertical; f548
+  running; f70c
+  rupee-sign; f156
+  rust e07a
+  sad-cry; f5b3
+  sad-tear; f5b4
+  safari; f267
+  salesforce; f83b
+  sass; f41e
+  satellite; f7bf
+  satellite-dish; f7c0
+  save; f0c7
+  schlix; f3ea
+  school; f549
+  screwdriver; f54a
+  scribd; f28a
+  scroll; f70e
+  sd-card; f7c2
+  search; f002
+  search-dollar; f688
+  search-location; f689
+  search-minus; f010
+  search-plus; f00e
+  searchengin; f3eb
+  seedling; f4d8
+  sellcast; f2da
+  sellsy; f213
+  server; f233
+  servicestack; f3ec
+  shapes; f61f
+  share; f064
+  share-alt; f1e0
+  share-alt-square; f1e1
+  share-square; f14d
+  shekel-sign; f20b
+  shield-alt; f3ed
+  shield-virus e06c
+  ship; f21a
+  shipping-fast; f48b
+  shirtsinbulk; f214
+  shoe-prints; f54b
+  shopify e057
+  shopping-bag; f290
+  shopping-basket; f291
+  shopping-cart; f07a
+  shopware; f5b5
+  shower; f2cc
+  shuttle-van; f5b6
+  sign; f4d9
+  sign-in-alt; f2f6
+  sign-language; f2a7
+  sign-out-alt; f2f5
+  signal; f012
+  signature; f5b7
+  sim-card; f7c4
+  simplybuilt; f215
+  sink e06d
+  sistrix; f3ee
+  sitemap; f0e8
+  sith; f512
+  skating; f7c5
+  sketch; f7c6
+  skiing; f7c9
+  skiing-nordic; f7ca
+  skull; f54c
+  skull-crossbones; f714
+  skyatlas; f216
+  skype; f17e
+  slack; f198
+  slack-hash; f3ef
+  slash; f715
+  sleigh; f7cc
+  sliders-h; f1de
+  slideshare; f1e7
+  smile; f118
+  smile-beam; f5b8
+  smile-wink; f4da
+  smog; f75f
+  smoking; f48d
+  smoking-ban; f54d
+  sms; f7cd
+  snapchat; f2ab
+  snapchat-ghost; f2ac
+  snapchat-square; f2ad
+  snowboarding; f7ce
+  snowflake; f2dc
+  snowman; f7d0
+  snowplow; f7d2
+  soap e06e
+  socks; f696
+  solar-panel; f5ba
+  sort; f0dc
+  sort-alpha-down; f15d
+  sort-alpha-down-alt; f881
+  sort-alpha-up; f15e
+  sort-alpha-up-alt; f882
+  sort-amount-down; f160
+  sort-amount-down-alt; f884
+  sort-amount-up; f161
+  sort-amount-up-alt; f885
+  sort-down; f0dd
+  sort-numeric-down; f162
+  sort-numeric-down-alt; f886
+  sort-numeric-up; f163
+  sort-numeric-up-alt; f887
+  sort-up; f0de
+  soundcloud; f1be
+  sourcetree; f7d3
+  spa; f5bb
+  space-shuttle; f197
+  speakap; f3f3
+  speaker-deck; f83c
+  spell-check; f891
+  spider; f717
+  spinner; f110
+  splotch; f5bc
+  spotify; f1bc
+  spray-can; f5bd
+  square; f0c8
+  square-full; f45c
+  square-root-alt; f698
+  squarespace; f5be
+  stack-exchange; f18d
+  stack-overflow; f16c
+  stackpath; f842
+  stamp; f5bf
+  star; f005
+  star-and-crescent; f699
+  star-half; f089
+  star-half-alt; f5c0
+  star-of-david; f69a
+  star-of-life; f621
+  staylinked; f3f5
+  steam; f1b6
+  steam-square; f1b7
+  steam-symbol; f3f6
+  step-backward; f048
+  step-forward; f051
+  stethoscope; f0f1
+  sticker-mule; f3f7
+  sticky-note; f249
+  stop; f04d
+  stop-circle; f28d
+  stopwatch; f2f2
+  stopwatch-20 e06f
+  store; f54e
+  store-alt; f54f
+  store-alt-slash e070
+  store-slash e071
+  strava; f428
+  stream; f550
+  street-view; f21d
+  strikethrough; f0cc
+  stripe; f429
+  stripe-s; f42a
+  stroopwafel; f551
+  studiovinari; f3f8
+  stumbleupon; f1a4
+  stumbleupon-circle; f1a3
+  subscript; f12c
+  subway; f239
+  suitcase; f0f2
+  suitcase-rolling; f5c1
+  sun; f185
+  superpowers; f2dd
+  superscript; f12b
+  supple; f3f9
+  surprise; f5c2
+  suse; f7d6
+  swatchbook; f5c3
+  swift; f8e1
+  swimmer; f5c4
+  swimming-pool; f5c5
+  symfony; f83d
+  synagogue; f69b
+  sync; f021
+  sync-alt; f2f1
+  syringe; f48e
+  table; f0ce
+  table-tennis; f45d
+  tablet; f10a
+  tablet-alt; f3fa
+  tablets; f490
+  tachometer-alt; f3fd
+  tag; f02b
+  tags; f02c
+  tape; f4db
+  tasks; f0ae
+  taxi; f1ba
+  teamspeak; f4f9
+  teeth; f62e
+  teeth-open; f62f
+  telegram; f2c6
+  telegram-plane; f3fe
+  temperature-high; f769
+  temperature-low; f76b
+  tencent-weibo; f1d5
+  tenge; f7d7
+  terminal; f120
+  text-height; f034
+  text-width; f035
+  th; f00a
+  th-large; f009
+  th-list; f00b
+  the-red-yeti; f69d
+  theater-masks; f630
+  themeco; f5c6
+  themeisle; f2b2
+  thermometer; f491
+  thermometer-empty; f2cb
+  thermometer-full; f2c7
+  thermometer-half; f2c9
+  thermometer-quarter; f2ca
+  thermometer-three-quarters; f2c8
+  think-peaks; f731
+  thumbs-down; f165
+  thumbs-up; f164
+  thumbtack; f08d
+  ticket-alt; f3ff
+  tiktok e07b
+  times; f00d
+  times-circle; f057
+  tint; f043
+  tint-slash; f5c7
+  tired; f5c8
+  toggle-off; f204
+  toggle-on; f205
+  toilet; f7d8
+  toilet-paper; f71e
+  toilet-paper-slash e072
+  toolbox; f552
+  tools; f7d9
+  tooth; f5c9
+  torah; f6a0
+  torii-gate; f6a1
+  tractor; f722
+  trade-federation; f513
+  trademark; f25c
+  traffic-light; f637
+  trailer e041
+  train; f238
+  tram; f7da
+  transgender; f224
+  transgender-alt; f225
+  trash; f1f8
+  trash-alt; f2ed
+  trash-restore; f829
+  trash-restore-alt; f82a
+  tree; f1bb
+  trello; f181
+  trophy; f091
+  truck; f0d1
+  truck-loading; f4de
+  truck-monster; f63b
+  truck-moving; f4df
+  truck-pickup; f63c
+  tshirt; f553
+  tty; f1e4
+  tumblr; f173
+  tumblr-square; f174
+  tv; f26c
+  twitch; f1e8
+  twitter; f099
+  twitter-square; f081
+  typo3; f42b
+  uber; f402
+  ubuntu; f7df
+  uikit; f403
+  umbraco; f8e8
+  umbrella; f0e9
+  umbrella-beach; f5ca
+  uncharted e084
+  underline; f0cd
+  undo; f0e2
+  undo-alt; f2ea
+  uniregistry; f404
+  unity e049
+  universal-access; f29a
+  university; f19c
+  unlink; f127
+  unlock; f09c
+  unlock-alt; f13e
+  unsplash e07c
+  untappd; f405
+  upload; f093
+  ups; f7e0
+  usb; f287
+  user; f007
+  user-alt; f406
+  user-alt-slash; f4fa
+  user-astronaut; f4fb
+  user-check; f4fc
+  user-circle; f2bd
+  user-clock; f4fd
+  user-cog; f4fe
+  user-edit; f4ff
+  user-friends; f500
+  user-graduate; f501
+  user-injured; f728
+  user-lock; f502
+  user-md; f0f0
+  user-minus; f503
+  user-ninja; f504
+  user-nurse; f82f
+  user-plus; f234
+  user-secret; f21b
+  user-shield; f505
+  user-slash; f506
+  user-tag; f507
+  user-tie; f508
+  user-times; f235
+  users; f0c0
+  users-cog; f509
+  users-slash e073
+  usps; f7e1
+  ussunnah; f407
+  utensil-spoon; f2e5
+  utensils; f2e7
+  vaadin; f408
+  vector-square; f5cb
+  venus; f221
+  venus-double; f226
+  venus-mars; f228
+  vest e085
+  vest-patches e086
+  viacoin; f237
+  viadeo; f2a9
+  viadeo-square; f2aa
+  vial; f492
+  vials; f493
+  viber; f409
+  video; f03d
+  video-slash; f4e2
+  vihara; f6a7
+  vimeo; f40a
+  vimeo-square; f194
+  vimeo-v; f27d
+  vine; f1ca
+  virus e074
+  virus-slash e075
+  viruses e076
+  vk; f189
+  vnv; f40b
+  voicemail; f897
+  volleyball-ball; f45f
+  volume-down; f027
+  volume-mute; f6a9
+  volume-off; f026
+  volume-up; f028
+  vote-yea; f772
+  vr-cardboard; f729
+  vuejs; f41f
+  walking; f554
+  wallet; f555
+  warehouse; f494
+  watchman-monitoring e087
+  water; f773
+  wave-square; f83e
+  waze; f83f
+  weebly; f5cc
+  weibo; f18a
+  weight; f496
+  weight-hanging; f5cd
+  weixin; f1d7
+  whatsapp; f232
+  whatsapp-square; f40c
+  wheelchair; f193
+  whmcs; f40d
+  wifi; f1eb
+  wikipedia-w; f266
+  wind; f72e
+  window-close; f410
+  window-maximize; f2d0
+  window-minimize; f2d1
+  window-restore; f2d2
+  windows; f17a
+  wine-bottle; f72f
+  wine-glass; f4e3
+  wine-glass-alt; f5ce
+  wix; f5cf
+  wizards-of-the-coast; f730
+  wodu e088
+  wolf-pack-battalion; f514
+  won-sign; f159
+  wordpress; f19a
+  wordpress-simple; f411
+  wpbeginner; f297
+  wpexplorer; f2de
+  wpforms; f298
+  wpressr; f3e4
+  wrench; f0ad
+  x-ray; f497
+  xbox; f412
+  xing; f168
+  xing-square; f169
+  y-combinator; f23b
+  yahoo; f19e
+  yammer; f840
+  yandex; f413
+  yandex-international; f414
+  yarn; f7e3
+  yelp; f1e9
+  yen-sign; f157
+  yin-yang; f6ad
+  yoast; f2b1
+  youtube; f167
+  youtube-square; f431
+  zhihu; f63f
diff --git a/.local/share/emoji b/.local/share/emoji
deleted file mode 100644
index 2925c82f..00000000
--- a/.local/share/emoji
+++ /dev/null
@@ -1,1593 +0,0 @@
-😀 grinning face; 1F600;
-😃 grinning face with big eyes; 1F603;
-😄 grinning face with smiling eyes; 1F604;
-😁 beaming face with smiling eyes; 1F601;
-😆 grinning squinting face; 1F606;
-😅 grinning face with sweat; 1F605;
-🤣 rolling on the floor laughing; 1F923;
-😂 face with tears of joy; 1F602;
-🙂 slightly smiling face; 1F642;
-🙃 upside-down face; 1F643;
-😉 winking face; 1F609;
-😊 smiling face with smiling eyes; 1F60A;
-😇 smiling face with halo; 1F607;
-🥰 smiling face with hearts; 1F970;
-😍 smiling face with heart-eyes; 1F60D;
-🤩 star-struck; 1F929;
-😘 face blowing a kiss; 1F618;
-😗 kissing face; 1F617;
-☺️ smiling face; 263A FE0F;
-😚 kissing face with closed eyes; 1F61A;
-😙 kissing face with smiling eyes; 1F619;
-🥲 smiling face with tear; 1F972;
-😋 face savoring food; 1F60B;
-😛 face with tongue; 1F61B;
-😜 winking face with tongue; 1F61C;
-🤪 zany face; 1F92A;
-😝 squinting face with tongue; 1F61D;
-🤑 money-mouth face; 1F911;
-🤗 hugging face; 1F917;
-🤭 face with hand over mouth; 1F92D;
-🤫 shushing face; 1F92B;
-🤔 thinking face; 1F914;
-🤐 zipper-mouth face; 1F910;
-🤨 face with raised eyebrow; 1F928;
-😐 neutral face; 1F610;
-😑 expressionless face; 1F611;
-😶 face without mouth; 1F636;
-😏 smirking face; 1F60F;
-😒 unamused face; 1F612;
-🙄 face with rolling eyes; 1F644;
-😬 grimacing face; 1F62C;
-🤥 lying face; 1F925;
-😌 relieved face; 1F60C;
-😔 pensive face; 1F614;
-😪 sleepy face; 1F62A;
-🤤 drooling face; 1F924;
-😴 sleeping face; 1F634;
-😷 face with medical mask; 1F637;
-🤒 face with thermometer; 1F912;
-🤕 face with head-bandage; 1F915;
-🤢 nauseated face; 1F922;
-🤮 face vomiting; 1F92E;
-🤧 sneezing face; 1F927;
-🥵 hot face; 1F975;
-🥶 cold face; 1F976;
-🥴 woozy face; 1F974;
-😵 dizzy face; 1F635;
-🤯 exploding head; 1F92F;
-🤠 cowboy hat face; 1F920;
-🥳 partying face; 1F973;
-🥸 disguised face; 1F978;
-😎 smiling face with sunglasses; 1F60E;
-🤓 nerd face; 1F913;
-🧐 face with monocle; 1F9D0;
-😕 confused face; 1F615;
-😟 worried face; 1F61F;
-🙁 slightly frowning face; 1F641;
-☹️ frowning face; 2639 FE0F;
-😮 face with open mouth; 1F62E;
-😯 hushed face; 1F62F;
-😲 astonished face; 1F632;
-😳 flushed face; 1F633;
-🥺 pleading face; 1F97A;
-😦 frowning face with open mouth; 1F626;
-😧 anguished face; 1F627;
-😨 fearful face; 1F628;
-😰 anxious face with sweat; 1F630;
-😥 sad but relieved face; 1F625;
-😢 crying face; 1F622;
-😭 loudly crying face; 1F62D;
-😱 face screaming in fear; 1F631;
-😖 confounded face; 1F616;
-😣 persevering face; 1F623;
-😞 disappointed face; 1F61E;
-😓 downcast face with sweat; 1F613;
-😩 weary face; 1F629;
-😫 tired face; 1F62B;
-🥱 yawning face; 1F971;
-😤 face with steam from nose; 1F624;
-😡 pouting face; 1F621;
-😠 angry face; 1F620;
-🤬 face with symbols on mouth; 1F92C;
-😈 smiling face with horns; 1F608;
-👿 angry face with horns; 1F47F;
-💀 skull; 1F480;
-☠️ skull and crossbones; 2620 FE0F;
-💩 pile of poo; 1F4A9;
-🤡 clown face; 1F921;
-👹 ogre; 1F479;
-👺 goblin; 1F47A;
-👻 ghost; 1F47B;
-👽 alien; 1F47D;
-👾 alien monster; 1F47E;
-🤖 robot; 1F916;
-😺 grinning cat; 1F63A;
-😸 grinning cat with smiling eyes; 1F638;
-😹 cat with tears of joy; 1F639;
-😻 smiling cat with heart-eyes; 1F63B;
-😼 cat with wry smile; 1F63C;
-😽 kissing cat; 1F63D;
-🙀 weary cat; 1F640;
-😿 crying cat; 1F63F;
-😾 pouting cat; 1F63E;
-🙈 see-no-evil monkey; 1F648;
-🙉 hear-no-evil monkey; 1F649;
-🙊 speak-no-evil monkey; 1F64A;
-💋 kiss mark; 1F48B;
-💌 love letter; 1F48C;
-💘 heart with arrow; 1F498;
-💝 heart with ribbon; 1F49D;
-💖 sparkling heart; 1F496;
-💗 growing heart; 1F497;
-💓 beating heart; 1F493;
-💞 revolving hearts; 1F49E;
-💕 two hearts; 1F495;
-💟 heart decoration; 1F49F;
-❣️ heart exclamation; 2763 FE0F;
-💔 broken heart; 1F494;
-❤️ red heart; 2764 FE0F;
-🧡 orange heart; 1F9E1;
-💛 yellow heart; 1F49B;
-💚 green heart; 1F49A;
-💙 blue heart; 1F499;
-💜 purple heart; 1F49C;
-🤎 brown heart; 1F90E;
-🖤 black heart; 1F5A4;
-🤍 white heart; 1F90D;
-💯 hundred points; 1F4AF;
-💢 anger symbol; 1F4A2;
-💥 collision; 1F4A5;
-💫 dizzy; 1F4AB;
-💦 sweat droplets; 1F4A6;
-💨 dashing away; 1F4A8;
-🕳️ hole; 1F573 FE0F;
-💣 bomb; 1F4A3;
-💬 speech balloon; 1F4AC;
-🗨️ left speech bubble; 1F5E8 FE0F;
-🗯️ right anger bubble; 1F5EF FE0F;
-💭 thought balloon; 1F4AD;
-💤 zzz; 1F4A4;
-👋 waving hand; 1F44B;
-🤚 raised back of hand; 1F91A;
-🖐️ hand with fingers splayed; 1F590 FE0F;
-✋ raised hand; 270B;
-🖖 vulcan salute; 1F596;
-👌 OK hand; 1F44C;
-🤌 pinched fingers; 1F90C;
-🤏 pinching hand; 1F90F;
-✌️ victory hand; 270C FE0F;
-🤞 crossed fingers; 1F91E;
-🤟 love-you gesture; 1F91F;
-🤘 sign of the horns; 1F918;
-🤙 call me hand; 1F919;
-👈 backhand index pointing left; 1F448;
-👉 backhand index pointing right; 1F449;
-👆 backhand index pointing up; 1F446;
-🖕 middle finger; 1F595;
-👇 backhand index pointing down; 1F447;
-☝️ index pointing up; 261D FE0F;
-👍 thumbs up; 1F44D;
-👎 thumbs down; 1F44E;
-✊ raised fist; 270A;
-👊 oncoming fist; 1F44A;
-🤛 left-facing fist; 1F91B;
-🤜 right-facing fist; 1F91C;
-👏 clapping hands; 1F44F;
-🙌 raising hands; 1F64C;
-👐 open hands; 1F450;
-🤲 palms up together; 1F932;
-🤝 handshake; 1F91D;
-🙏 folded hands; 1F64F;
-✍️ writing hand; 270D FE0F;
-💅 nail polish; 1F485;
-🤳 selfie; 1F933;
-💪 flexed biceps; 1F4AA;
-🦾 mechanical arm; 1F9BE;
-🦿 mechanical leg; 1F9BF;
-🦵 leg; 1F9B5;
-🦶 foot; 1F9B6;
-👂 ear; 1F442;
-🦻 ear with hearing aid; 1F9BB;
-👃 nose; 1F443;
-🧠 brain; 1F9E0;
-🫀 anatomical heart; 1FAC0;
-🫁 lungs; 1FAC1;
-🦷 tooth; 1F9B7;
-🦴 bone; 1F9B4;
-👀 eyes; 1F440;
-👁️ eye; 1F441 FE0F;
-👅 tongue; 1F445;
-👄 mouth; 1F444;
-👶 baby; 1F476;
-🧒 child; 1F9D2;
-👦 boy; 1F466;
-👧 girl; 1F467;
-🧑 person; 1F9D1;
-👱 person: blond hair; 1F471;
-👨 man; 1F468;
-🧔 man: beard; 1F9D4;
-👩 woman; 1F469;
-🧓 older person; 1F9D3;
-👴 old man; 1F474;
-👵 old woman; 1F475;
-🙍 person frowning; 1F64D;
-🙎 person pouting; 1F64E;
-🙅 person gesturing NO; 1F645;
-🙆 person gesturing OK; 1F646;
-💁 person tipping hand; 1F481;
-🙋 person raising hand; 1F64B;
-🧏 deaf person; 1F9CF;
-🙇 person bowing; 1F647;
-🤦 person facepalming; 1F926;
-🤷 person shrugging; 1F937;
-👮 police officer; 1F46E;
-🕵️ detective; 1F575 FE0F;
-💂 guard; 1F482;
-🥷 ninja; 1F977;
-👷 construction worker; 1F477;
-🤴 prince; 1F934;
-👸 princess; 1F478;
-👳 person wearing turban; 1F473;
-👲 person with skullcap; 1F472;
-🧕 woman with headscarf; 1F9D5;
-🤵 person in tuxedo; 1F935;
-👰 person with veil; 1F470;
-🤰 pregnant woman; 1F930;
-🤱 breast-feeding; 1F931;
-👼 baby angel; 1F47C;
-🎅 Santa Claus; 1F385;
-🤶 Mrs. Claus; 1F936;
-🦸 superhero; 1F9B8;
-🦹 supervillain; 1F9B9;
-🧙 mage; 1F9D9;
-🧚 fairy; 1F9DA;
-🧛 vampire; 1F9DB;
-🧜 merperson; 1F9DC;
-🧝 elf; 1F9DD;
-🧞 genie; 1F9DE;
-🧟 zombie; 1F9DF;
-💆 person getting massage; 1F486;
-💇 person getting haircut; 1F487;
-🚶 person walking; 1F6B6;
-🧍 person standing; 1F9CD;
-🧎 person kneeling; 1F9CE;
-🏃 person running; 1F3C3;
-💃 woman dancing; 1F483;
-🕺 man dancing; 1F57A;
-🕴️ person in suit levitating; 1F574 FE0F;
-👯 people with bunny ears; 1F46F;
-🧖 person in steamy room; 1F9D6;
-🧗 person climbing; 1F9D7;
-🤺 person fencing; 1F93A;
-🏇 horse racing; 1F3C7;
-⛷️ skier; 26F7 FE0F;
-🏂 snowboarder; 1F3C2;
-🏌️ person golfing; 1F3CC FE0F;
-🏄 person surfing; 1F3C4;
-🚣 person rowing boat; 1F6A3;
-🏊 person swimming; 1F3CA;
-⛹️ person bouncing ball; 26F9 FE0F;
-🏋️ person lifting weights; 1F3CB FE0F;
-🚴 person biking; 1F6B4;
-🚵 person mountain biking; 1F6B5;
-🤸 person cartwheeling; 1F938;
-🤼 people wrestling; 1F93C;
-🤽 person playing water polo; 1F93D;
-🤾 person playing handball; 1F93E;
-🤹 person juggling; 1F939;
-🧘 person in lotus position; 1F9D8;
-🛀 person taking bath; 1F6C0;
-🛌 person in bed; 1F6CC;
-👭 women holding hands; 1F46D;
-👫 woman and man holding hands; 1F46B;
-👬 men holding hands; 1F46C;
-💏 kiss; 1F48F;
-💑 couple with heart; 1F491;
-👪 family; 1F46A;
-🗣️ speaking head; 1F5E3 FE0F;
-👤 bust in silhouette; 1F464;
-👥 busts in silhouette; 1F465;
-🫂 people hugging; 1FAC2;
-👣 footprints; 1F463;
-🐵 monkey face; 1F435;
-🐒 monkey; 1F412;
-🦍 gorilla; 1F98D;
-🦧 orangutan; 1F9A7;
-🐶 dog face; 1F436;
-🐕 dog; 1F415;
-🦮 guide dog; 1F9AE;
-🐩 poodle; 1F429;
-🐺 wolf; 1F43A;
-🦊 fox; 1F98A;
-🦝 raccoon; 1F99D;
-🐱 cat face; 1F431;
-🐈 cat; 1F408;
-🦁 lion; 1F981;
-🐯 tiger face; 1F42F;
-🐅 tiger; 1F405;
-🐆 leopard; 1F406;
-🐴 horse face; 1F434;
-🐎 horse; 1F40E;
-🦄 unicorn; 1F984;
-🦓 zebra; 1F993;
-🦌 deer; 1F98C;
-🦬 bison; 1F9AC;
-🐮 cow face; 1F42E;
-🐂 ox; 1F402;
-🐃 water buffalo; 1F403;
-🐄 cow; 1F404;
-🐷 pig face; 1F437;
-🐖 pig; 1F416;
-🐗 boar; 1F417;
-🐽 pig nose; 1F43D;
-🐏 ram; 1F40F;
-🐑 ewe; 1F411;
-🐐 goat; 1F410;
-🐪 camel; 1F42A;
-🐫 two-hump camel; 1F42B;
-🦙 llama; 1F999;
-🦒 giraffe; 1F992;
-🐘 elephant; 1F418;
-🦣 mammoth; 1F9A3;
-🦏 rhinoceros; 1F98F;
-🦛 hippopotamus; 1F99B;
-🐭 mouse face; 1F42D;
-🐁 mouse; 1F401;
-🐀 rat; 1F400;
-🐹 hamster; 1F439;
-🐰 rabbit face; 1F430;
-🐇 rabbit; 1F407;
-🐿️ chipmunk; 1F43F FE0F;
-🦫 beaver; 1F9AB;
-🦔 hedgehog; 1F994;
-🦇 bat; 1F987;
-🐻 bear; 1F43B;
-🐨 koala; 1F428;
-🐼 panda; 1F43C;
-🦥 sloth; 1F9A5;
-🦦 otter; 1F9A6;
-🦨 skunk; 1F9A8;
-🦘 kangaroo; 1F998;
-🦡 badger; 1F9A1;
-🐾 paw prints; 1F43E;
-🦃 turkey; 1F983;
-🐔 chicken; 1F414;
-🐓 rooster; 1F413;
-🐣 hatching chick; 1F423;
-🐤 baby chick; 1F424;
-🐥 front-facing baby chick; 1F425;
-🐦 bird; 1F426;
-🐧 penguin; 1F427;
-🕊️ dove; 1F54A FE0F;
-🦅 eagle; 1F985;
-🦆 duck; 1F986;
-🦢 swan; 1F9A2;
-🦉 owl; 1F989;
-🦤 dodo; 1F9A4;
-🪶 feather; 1FAB6;
-🦩 flamingo; 1F9A9;
-🦚 peacock; 1F99A;
-🦜 parrot; 1F99C;
-🐸 frog; 1F438;
-🐊 crocodile; 1F40A;
-🐢 turtle; 1F422;
-🦎 lizard; 1F98E;
-🐍 snake; 1F40D;
-🐲 dragon face; 1F432;
-🐉 dragon; 1F409;
-🦕 sauropod; 1F995;
-🦖 T-Rex; 1F996;
-🐳 spouting whale; 1F433;
-🐋 whale; 1F40B;
-🐬 dolphin; 1F42C;
-🦭 seal; 1F9AD;
-🐟 fish; 1F41F;
-🐠 tropical fish; 1F420;
-🐡 blowfish; 1F421;
-🦈 shark; 1F988;
-🐙 octopus; 1F419;
-🐚 spiral shell; 1F41A;
-🐌 snail; 1F40C;
-🦋 butterfly; 1F98B;
-🐛 bug; 1F41B;
-🐜 ant; 1F41C;
-🐝 honeybee; 1F41D;
-🪲 beetle; 1FAB2;
-🐞 lady beetle; 1F41E;
-🦗 cricket; 1F997;
-🪳 cockroach; 1FAB3;
-🕷️ spider; 1F577 FE0F;
-🕸️ spider web; 1F578 FE0F;
-🦂 scorpion; 1F982;
-🦟 mosquito; 1F99F;
-🪰 fly; 1FAB0;
-🪱 worm; 1FAB1;
-🦠 microbe; 1F9A0;
-💐 bouquet; 1F490;
-🌸 cherry blossom; 1F338;
-💮 white flower; 1F4AE;
-🏵️ rosette; 1F3F5 FE0F;
-🌹 rose; 1F339;
-🥀 wilted flower; 1F940;
-🌺 hibiscus; 1F33A;
-🌻 sunflower; 1F33B;
-🌼 blossom; 1F33C;
-🌷 tulip; 1F337;
-🌱 seedling; 1F331;
-🪴 potted plant; 1FAB4;
-🌲 evergreen tree; 1F332;
-🌳 deciduous tree; 1F333;
-🌴 palm tree; 1F334;
-🌵 cactus; 1F335;
-🌾 sheaf of rice; 1F33E;
-🌿 herb; 1F33F;
-☘️ shamrock; 2618 FE0F;
-🍀 four leaf clover; 1F340;
-🍁 maple leaf; 1F341;
-🍂 fallen leaf; 1F342;
-🍃 leaf fluttering in wind; 1F343;
-🍇 grapes; 1F347;
-🍈 melon; 1F348;
-🍉 watermelon; 1F349;
-🍊 tangerine; 1F34A;
-🍋 lemon; 1F34B;
-🍌 banana; 1F34C;
-🍍 pineapple; 1F34D;
-🥭 mango; 1F96D;
-🍎 red apple; 1F34E;
-🍏 green apple; 1F34F;
-🍐 pear; 1F350;
-🍑 peach; 1F351;
-🍒 cherries; 1F352;
-🍓 strawberry; 1F353;
-🫐 blueberries; 1FAD0;
-🥝 kiwi fruit; 1F95D;
-🍅 tomato; 1F345;
-🫒 olive; 1FAD2;
-🥥 coconut; 1F965;
-🥑 avocado; 1F951;
-🍆 eggplant; 1F346;
-🥔 potato; 1F954;
-🥕 carrot; 1F955;
-🌽 ear of corn; 1F33D;
-🌶️ hot pepper; 1F336 FE0F;
-🫑 bell pepper; 1FAD1;
-🥒 cucumber; 1F952;
-🥬 leafy green; 1F96C;
-🥦 broccoli; 1F966;
-🧄 garlic; 1F9C4;
-🧅 onion; 1F9C5;
-🍄 mushroom; 1F344;
-🥜 peanuts; 1F95C;
-🌰 chestnut; 1F330;
-🍞 bread; 1F35E;
-🥐 croissant; 1F950;
-🥖 baguette bread; 1F956;
-🫓 flatbread; 1FAD3;
-🥨 pretzel; 1F968;
-🥯 bagel; 1F96F;
-🥞 pancakes; 1F95E;
-🧇 waffle; 1F9C7;
-🧀 cheese wedge; 1F9C0;
-🍖 meat on bone; 1F356;
-🍗 poultry leg; 1F357;
-🥩 cut of meat; 1F969;
-🥓 bacon; 1F953;
-🍔 hamburger; 1F354;
-🍟 french fries; 1F35F;
-🍕 pizza; 1F355;
-🌭 hot dog; 1F32D;
-🥪 sandwich; 1F96A;
-🌮 taco; 1F32E;
-🌯 burrito; 1F32F;
-🫔 tamale; 1FAD4;
-🥙 stuffed flatbread; 1F959;
-🧆 falafel; 1F9C6;
-🥚 egg; 1F95A;
-🍳 cooking; 1F373;
-🥘 shallow pan of food; 1F958;
-🍲 pot of food; 1F372;
-🫕 fondue; 1FAD5;
-🥣 bowl with spoon; 1F963;
-🥗 green salad; 1F957;
-🍿 popcorn; 1F37F;
-🧈 butter; 1F9C8;
-🧂 salt; 1F9C2;
-🥫 canned food; 1F96B;
-🍱 bento box; 1F371;
-🍘 rice cracker; 1F358;
-🍙 rice ball; 1F359;
-🍚 cooked rice; 1F35A;
-🍛 curry rice; 1F35B;
-🍜 steaming bowl; 1F35C;
-🍝 spaghetti; 1F35D;
-🍠 roasted sweet potato; 1F360;
-🍢 oden; 1F362;
-🍣 sushi; 1F363;
-🍤 fried shrimp; 1F364;
-🍥 fish cake with swirl; 1F365;
-🥮 moon cake; 1F96E;
-🍡 dango; 1F361;
-🥟 dumpling; 1F95F;
-🥠 fortune cookie; 1F960;
-🥡 takeout box; 1F961;
-🦀 crab; 1F980;
-🦞 lobster; 1F99E;
-🦐 shrimp; 1F990;
-🦑 squid; 1F991;
-🦪 oyster; 1F9AA;
-🍦 soft ice cream; 1F366;
-🍧 shaved ice; 1F367;
-🍨 ice cream; 1F368;
-🍩 doughnut; 1F369;
-🍪 cookie; 1F36A;
-🎂 birthday cake; 1F382;
-🍰 shortcake; 1F370;
-🧁 cupcake; 1F9C1;
-🥧 pie; 1F967;
-🍫 chocolate bar; 1F36B;
-🍬 candy; 1F36C;
-🍭 lollipop; 1F36D;
-🍮 custard; 1F36E;
-🍯 honey pot; 1F36F;
-🍼 baby bottle; 1F37C;
-🥛 glass of milk; 1F95B;
-☕ hot beverage; 2615;
-🫖 teapot; 1FAD6;
-🍵 teacup without handle; 1F375;
-🍶 sake; 1F376;
-🍾 bottle with popping cork; 1F37E;
-🍷 wine glass; 1F377;
-🍸 cocktail glass; 1F378;
-🍹 tropical drink; 1F379;
-🍺 beer mug; 1F37A;
-🍻 clinking beer mugs; 1F37B;
-🥂 clinking glasses; 1F942;
-🥃 tumbler glass; 1F943;
-🥤 cup with straw; 1F964;
-🧋 bubble tea; 1F9CB;
-🧃 beverage box; 1F9C3;
-🧉 mate; 1F9C9;
-🧊 ice; 1F9CA;
-🥢 chopsticks; 1F962;
-🍽️ fork and knife with plate; 1F37D FE0F;
-🍴 fork and knife; 1F374;
-🥄 spoon; 1F944;
-🔪 kitchen knife; 1F52A;
-🏺 amphora; 1F3FA;
-🌍 globe showing Europe-Africa; 1F30D;
-🌎 globe showing Americas; 1F30E;
-🌏 globe showing Asia-Australia; 1F30F;
-🌐 globe with meridians; 1F310;
-🗺️ world map; 1F5FA FE0F;
-🗾 map of Japan; 1F5FE;
-🧭 compass; 1F9ED;
-🏔️ snow-capped mountain; 1F3D4 FE0F;
-⛰️ mountain; 26F0 FE0F;
-🌋 volcano; 1F30B;
-🗻 mount fuji; 1F5FB;
-🏕️ camping; 1F3D5 FE0F;
-🏖️ beach with umbrella; 1F3D6 FE0F;
-🏜️ desert; 1F3DC FE0F;
-🏝️ desert island; 1F3DD FE0F;
-🏞️ national park; 1F3DE FE0F;
-🏟️ stadium; 1F3DF FE0F;
-🏛️ classical building; 1F3DB FE0F;
-🏗️ building construction; 1F3D7 FE0F;
-🧱 brick; 1F9F1;
-🪨 rock; 1FAA8;
-🪵 wood; 1FAB5;
-🛖 hut; 1F6D6;
-🏘️ houses; 1F3D8 FE0F;
-🏚️ derelict house; 1F3DA FE0F;
-🏠 house; 1F3E0;
-🏡 house with garden; 1F3E1;
-🏢 office building; 1F3E2;
-🏣 Japanese post office; 1F3E3;
-🏤 post office; 1F3E4;
-🏥 hospital; 1F3E5;
-🏦 bank; 1F3E6;
-🏨 hotel; 1F3E8;
-🏩 love hotel; 1F3E9;
-🏪 convenience store; 1F3EA;
-🏫 school; 1F3EB;
-🏬 department store; 1F3EC;
-🏭 factory; 1F3ED;
-🏯 Japanese castle; 1F3EF;
-🏰 castle; 1F3F0;
-💒 wedding; 1F492;
-🗼 Tokyo tower; 1F5FC;
-🗽 Statue of Liberty; 1F5FD;
-⛪ church; 26EA;
-🕌 mosque; 1F54C;
-🛕 hindu temple; 1F6D5;
-🕍 synagogue; 1F54D;
-⛩️ shinto shrine; 26E9 FE0F;
-🕋 kaaba; 1F54B;
-⛲ fountain; 26F2;
-⛺ tent; 26FA;
-🌁 foggy; 1F301;
-🌃 night with stars; 1F303;
-🏙️ cityscape; 1F3D9 FE0F;
-🌄 sunrise over mountains; 1F304;
-🌅 sunrise; 1F305;
-🌆 cityscape at dusk; 1F306;
-🌇 sunset; 1F307;
-🌉 bridge at night; 1F309;
-♨️ hot springs; 2668 FE0F;
-🎠 carousel horse; 1F3A0;
-🎡 ferris wheel; 1F3A1;
-🎢 roller coaster; 1F3A2;
-💈 barber pole; 1F488;
-🎪 circus tent; 1F3AA;
-🚂 locomotive; 1F682;
-🚃 railway car; 1F683;
-🚄 high-speed train; 1F684;
-🚅 bullet train; 1F685;
-🚆 train; 1F686;
-🚇 metro; 1F687;
-🚈 light rail; 1F688;
-🚉 station; 1F689;
-🚊 tram; 1F68A;
-🚝 monorail; 1F69D;
-🚞 mountain railway; 1F69E;
-🚋 tram car; 1F68B;
-🚌 bus; 1F68C;
-🚍 oncoming bus; 1F68D;
-🚎 trolleybus; 1F68E;
-🚐 minibus; 1F690;
-🚑 ambulance; 1F691;
-🚒 fire engine; 1F692;
-🚓 police car; 1F693;
-🚔 oncoming police car; 1F694;
-🚕 taxi; 1F695;
-🚖 oncoming taxi; 1F696;
-🚗 automobile; 1F697;
-🚘 oncoming automobile; 1F698;
-🚙 sport utility vehicle; 1F699;
-🛻 pickup truck; 1F6FB;
-🚚 delivery truck; 1F69A;
-🚛 articulated lorry; 1F69B;
-🚜 tractor; 1F69C;
-🏎️ racing car; 1F3CE FE0F;
-🏍️ motorcycle; 1F3CD FE0F;
-🛵 motor scooter; 1F6F5;
-🦽 manual wheelchair; 1F9BD;
-🦼 motorized wheelchair; 1F9BC;
-🛺 auto rickshaw; 1F6FA;
-🚲 bicycle; 1F6B2;
-🛴 kick scooter; 1F6F4;
-🛹 skateboard; 1F6F9;
-🛼 roller skate; 1F6FC;
-🚏 bus stop; 1F68F;
-🛣️ motorway; 1F6E3 FE0F;
-🛤️ railway track; 1F6E4 FE0F;
-🛢️ oil drum; 1F6E2 FE0F;
-⛽ fuel pump; 26FD;
-🚨 police car light; 1F6A8;
-🚥 horizontal traffic light; 1F6A5;
-🚦 vertical traffic light; 1F6A6;
-🛑 stop sign; 1F6D1;
-🚧 construction; 1F6A7;
-⚓ anchor; 2693;
-⛵ sailboat; 26F5;
-🛶 canoe; 1F6F6;
-🚤 speedboat; 1F6A4;
-🛳️ passenger ship; 1F6F3 FE0F;
-⛴️ ferry; 26F4 FE0F;
-🛥️ motor boat; 1F6E5 FE0F;
-🚢 ship; 1F6A2;
-✈️ airplane; 2708 FE0F;
-🛩️ small airplane; 1F6E9 FE0F;
-🛫 airplane departure; 1F6EB;
-🛬 airplane arrival; 1F6EC;
-🪂 parachute; 1FA82;
-💺 seat; 1F4BA;
-🚁 helicopter; 1F681;
-🚟 suspension railway; 1F69F;
-🚠 mountain cableway; 1F6A0;
-🚡 aerial tramway; 1F6A1;
-🛰️ satellite; 1F6F0 FE0F;
-🚀 rocket; 1F680;
-🛸 flying saucer; 1F6F8;
-🛎️ bellhop bell; 1F6CE FE0F;
-🧳 luggage; 1F9F3;
-⌛ hourglass done; 231B;
-⏳ hourglass not done; 23F3;
-⌚ watch; 231A;
-⏰ alarm clock; 23F0;
-⏱️ stopwatch; 23F1 FE0F;
-⏲️ timer clock; 23F2 FE0F;
-🕰️ mantelpiece clock; 1F570 FE0F;
-🕛 twelve o’clock; 1F55B;
-🕧 twelve-thirty; 1F567;
-🕐 one o’clock; 1F550;
-🕜 one-thirty; 1F55C;
-🕑 two o’clock; 1F551;
-🕝 two-thirty; 1F55D;
-🕒 three o’clock; 1F552;
-🕞 three-thirty; 1F55E;
-🕓 four o’clock; 1F553;
-🕟 four-thirty; 1F55F;
-🕔 five o’clock; 1F554;
-🕠 five-thirty; 1F560;
-🕕 six o’clock; 1F555;
-🕡 six-thirty; 1F561;
-🕖 seven o’clock; 1F556;
-🕢 seven-thirty; 1F562;
-🕗 eight o’clock; 1F557;
-🕣 eight-thirty; 1F563;
-🕘 nine o’clock; 1F558;
-🕤 nine-thirty; 1F564;
-🕙 ten o’clock; 1F559;
-🕥 ten-thirty; 1F565;
-🕚 eleven o’clock; 1F55A;
-🕦 eleven-thirty; 1F566;
-🌑 new moon; 1F311;
-🌒 waxing crescent moon; 1F312;
-🌓 first quarter moon; 1F313;
-🌔 waxing gibbous moon; 1F314;
-🌕 full moon; 1F315;
-🌖 waning gibbous moon; 1F316;
-🌗 last quarter moon; 1F317;
-🌘 waning crescent moon; 1F318;
-🌙 crescent moon; 1F319;
-🌚 new moon face; 1F31A;
-🌛 first quarter moon face; 1F31B;
-🌜 last quarter moon face; 1F31C;
-🌡️ thermometer; 1F321 FE0F;
-☀️ sun; 2600 FE0F;
-🌝 full moon face; 1F31D;
-🌞 sun with face; 1F31E;
-🪐 ringed planet; 1FA90;
-⭐ star; 2B50;
-🌟 glowing star; 1F31F;
-🌠 shooting star; 1F320;
-🌌 milky way; 1F30C;
-☁️ cloud; 2601 FE0F;
-⛅ sun behind cloud; 26C5;
-⛈️ cloud with lightning and rain; 26C8 FE0F;
-🌤️ sun behind small cloud; 1F324 FE0F;
-🌥️ sun behind large cloud; 1F325 FE0F;
-🌦️ sun behind rain cloud; 1F326 FE0F;
-🌧️ cloud with rain; 1F327 FE0F;
-🌨️ cloud with snow; 1F328 FE0F;
-🌩️ cloud with lightning; 1F329 FE0F;
-🌪️ tornado; 1F32A FE0F;
-🌫️ fog; 1F32B FE0F;
-🌬️ wind face; 1F32C FE0F;
-🌀 cyclone; 1F300;
-🌈 rainbow; 1F308;
-🌂 closed umbrella; 1F302;
-☂️ umbrella; 2602 FE0F;
-☔ umbrella with rain drops; 2614;
-⛱️ umbrella on ground; 26F1 FE0F;
-⚡ high voltage; 26A1;
-❄️ snowflake; 2744 FE0F;
-☃️ snowman; 2603 FE0F;
-⛄ snowman without snow; 26C4;
-☄️ comet; 2604 FE0F;
-🔥 fire; 1F525;
-💧 droplet; 1F4A7;
-🌊 water wave; 1F30A;
-🎃 jack-o-lantern; 1F383;
-🎄 Christmas tree; 1F384;
-🎆 fireworks; 1F386;
-🎇 sparkler; 1F387;
-🧨 firecracker; 1F9E8;
-✨ sparkles; 2728;
-🎈 balloon; 1F388;
-🎉 party popper; 1F389;
-🎊 confetti ball; 1F38A;
-🎋 tanabata tree; 1F38B;
-🎍 pine decoration; 1F38D;
-🎎 Japanese dolls; 1F38E;
-🎏 carp streamer; 1F38F;
-🎐 wind chime; 1F390;
-🎑 moon viewing ceremony; 1F391;
-🧧 red envelope; 1F9E7;
-🎀 ribbon; 1F380;
-🎁 wrapped gift; 1F381;
-🎗️ reminder ribbon; 1F397 FE0F;
-🎟️ admission tickets; 1F39F FE0F;
-🎫 ticket; 1F3AB;
-🎖️ military medal; 1F396 FE0F;
-🏆 trophy; 1F3C6;
-🏅 sports medal; 1F3C5;
-🥇 1st place medal; 1F947;
-🥈 2nd place medal; 1F948;
-🥉 3rd place medal; 1F949;
-⚽ soccer ball; 26BD;
-⚾ baseball; 26BE;
-🥎 softball; 1F94E;
-🏀 basketball; 1F3C0;
-🏐 volleyball; 1F3D0;
-🏈 american football; 1F3C8;
-🏉 rugby football; 1F3C9;
-🎾 tennis; 1F3BE;
-🥏 flying disc; 1F94F;
-🎳 bowling; 1F3B3;
-🏏 cricket game; 1F3CF;
-🏑 field hockey; 1F3D1;
-🏒 ice hockey; 1F3D2;
-🥍 lacrosse; 1F94D;
-🏓 ping pong; 1F3D3;
-🏸 badminton; 1F3F8;
-🥊 boxing glove; 1F94A;
-🥋 martial arts uniform; 1F94B;
-🥅 goal net; 1F945;
-⛳ flag in hole; 26F3;
-⛸️ ice skate; 26F8 FE0F;
-🎣 fishing pole; 1F3A3;
-🤿 diving mask; 1F93F;
-🎽 running shirt; 1F3BD;
-🎿 skis; 1F3BF;
-🛷 sled; 1F6F7;
-🥌 curling stone; 1F94C;
-🎯 direct hit; 1F3AF;
-🪀 yo-yo; 1FA80;
-🪁 kite; 1FA81;
-🎱 pool 8 ball; 1F3B1;
-🔮 crystal ball; 1F52E;
-🪄 magic wand; 1FA84;
-🧿 nazar amulet; 1F9FF;
-🎮 video game; 1F3AE;
-🕹️ joystick; 1F579 FE0F;
-🎰 slot machine; 1F3B0;
-🎲 game die; 1F3B2;
-🧩 puzzle piece; 1F9E9;
-🧸 teddy bear; 1F9F8;
-🪅 piñata; 1FA85;
-🪆 nesting dolls; 1FA86;
-♠️ spade suit; 2660 FE0F;
-♥️ heart suit; 2665 FE0F;
-♦️ diamond suit; 2666 FE0F;
-♣️ club suit; 2663 FE0F;
-♟️ chess pawn; 265F FE0F;
-🃏 joker; 1F0CF;
-🀄 mahjong red dragon; 1F004;
-🎴 flower playing cards; 1F3B4;
-🎭 performing arts; 1F3AD;
-🖼️ framed picture; 1F5BC FE0F;
-🎨 artist palette; 1F3A8;
-🧵 thread; 1F9F5;
-🪡 sewing needle; 1FAA1;
-🧶 yarn; 1F9F6;
-🪢 knot; 1FAA2;
-👓 glasses; 1F453;
-🕶️ sunglasses; 1F576 FE0F;
-🥽 goggles; 1F97D;
-🥼 lab coat; 1F97C;
-🦺 safety vest; 1F9BA;
-👔 necktie; 1F454;
-👕 t-shirt; 1F455;
-👖 jeans; 1F456;
-🧣 scarf; 1F9E3;
-🧤 gloves; 1F9E4;
-🧥 coat; 1F9E5;
-🧦 socks; 1F9E6;
-👗 dress; 1F457;
-👘 kimono; 1F458;
-🥻 sari; 1F97B;
-🩱 one-piece swimsuit; 1FA71;
-🩲 briefs; 1FA72;
-🩳 shorts; 1FA73;
-👙 bikini; 1F459;
-👚 woman’s clothes; 1F45A;
-👛 purse; 1F45B;
-👜 handbag; 1F45C;
-👝 clutch bag; 1F45D;
-🛍️ shopping bags; 1F6CD FE0F;
-🎒 backpack; 1F392;
-🩴 thong sandal; 1FA74;
-👞 man’s shoe; 1F45E;
-👟 running shoe; 1F45F;
-🥾 hiking boot; 1F97E;
-🥿 flat shoe; 1F97F;
-👠 high-heeled shoe; 1F460;
-👡 woman’s sandal; 1F461;
-🩰 ballet shoes; 1FA70;
-👢 woman’s boot; 1F462;
-👑 crown; 1F451;
-👒 woman’s hat; 1F452;
-🎩 top hat; 1F3A9;
-🎓 graduation cap; 1F393;
-🧢 billed cap; 1F9E2;
-🪖 military helmet; 1FA96;
-⛑️ rescue worker’s helmet; 26D1 FE0F;
-📿 prayer beads; 1F4FF;
-💄 lipstick; 1F484;
-💍 ring; 1F48D;
-💎 gem stone; 1F48E;
-🔇 muted speaker; 1F507;
-🔈 speaker low volume; 1F508;
-🔉 speaker medium volume; 1F509;
-🔊 speaker high volume; 1F50A;
-📢 loudspeaker; 1F4E2;
-📣 megaphone; 1F4E3;
-📯 postal horn; 1F4EF;
-🔔 bell; 1F514;
-🔕 bell with slash; 1F515;
-🎼 musical score; 1F3BC;
-🎵 musical note; 1F3B5;
-🎶 musical notes; 1F3B6;
-🎙️ studio microphone; 1F399 FE0F;
-🎚️ level slider; 1F39A FE0F;
-🎛️ control knobs; 1F39B FE0F;
-🎤 microphone; 1F3A4;
-🎧 headphone; 1F3A7;
-📻 radio; 1F4FB;
-🎷 saxophone; 1F3B7;
-🪗 accordion; 1FA97;
-🎸 guitar; 1F3B8;
-🎹 musical keyboard; 1F3B9;
-🎺 trumpet; 1F3BA;
-🎻 violin; 1F3BB;
-🪕 banjo; 1FA95;
-🥁 drum; 1F941;
-🪘 long drum; 1FA98;
-📱 mobile phone; 1F4F1;
-📲 mobile phone with arrow; 1F4F2;
-☎️ telephone; 260E FE0F;
-📞 telephone receiver; 1F4DE;
-📟 pager; 1F4DF;
-📠 fax machine; 1F4E0;
-🔋 battery; 1F50B;
-🔌 electric plug; 1F50C;
-💻 laptop; 1F4BB;
-🖥️ desktop computer; 1F5A5 FE0F;
-🖨️ printer; 1F5A8 FE0F;
-⌨️ keyboard; 2328 FE0F;
-🖱️ computer mouse; 1F5B1 FE0F;
-🖲️ trackball; 1F5B2 FE0F;
-💽 computer disk; 1F4BD;
-💾 floppy disk; 1F4BE;
-💿 optical disk; 1F4BF;
-📀 dvd; 1F4C0;
-🧮 abacus; 1F9EE;
-🎥 movie camera; 1F3A5;
-🎞️ film frames; 1F39E FE0F;
-📽️ film projector; 1F4FD FE0F;
-🎬 clapper board; 1F3AC;
-📺 television; 1F4FA;
-📷 camera; 1F4F7;
-📸 camera with flash; 1F4F8;
-📹 video camera; 1F4F9;
-📼 videocassette; 1F4FC;
-🔍 magnifying glass tilted left; 1F50D;
-🔎 magnifying glass tilted right; 1F50E;
-🕯️ candle; 1F56F FE0F;
-💡 light bulb; 1F4A1;
-🔦 flashlight; 1F526;
-🏮 red paper lantern; 1F3EE;
-🪔 diya lamp; 1FA94;
-📔 notebook with decorative cover; 1F4D4;
-📕 closed book; 1F4D5;
-📖 open book; 1F4D6;
-📗 green book; 1F4D7;
-📘 blue book; 1F4D8;
-📙 orange book; 1F4D9;
-📚 books; 1F4DA;
-📓 notebook; 1F4D3;
-📒 ledger; 1F4D2;
-📃 page with curl; 1F4C3;
-📜 scroll; 1F4DC;
-📄 page facing up; 1F4C4;
-📰 newspaper; 1F4F0;
-🗞️ rolled-up newspaper; 1F5DE FE0F;
-📑 bookmark tabs; 1F4D1;
-🔖 bookmark; 1F516;
-🏷️ label; 1F3F7 FE0F;
-💰 money bag; 1F4B0;
-🪙 coin; 1FA99;
-💴 yen banknote; 1F4B4;
-💵 dollar banknote; 1F4B5;
-💶 euro banknote; 1F4B6;
-💷 pound banknote; 1F4B7;
-💸 money with wings; 1F4B8;
-💳 credit card; 1F4B3;
-🧾 receipt; 1F9FE;
-💹 chart increasing with yen; 1F4B9;
-✉️ envelope; 2709 FE0F;
-📧 e-mail; 1F4E7;
-📨 incoming envelope; 1F4E8;
-📩 envelope with arrow; 1F4E9;
-📤 outbox tray; 1F4E4;
-📥 inbox tray; 1F4E5;
-📦 package; 1F4E6;
-📫 closed mailbox with raised flag; 1F4EB;
-📪 closed mailbox with lowered flag; 1F4EA;
-📬 open mailbox with raised flag; 1F4EC;
-📭 open mailbox with lowered flag; 1F4ED;
-📮 postbox; 1F4EE;
-🗳️ ballot box with ballot; 1F5F3 FE0F;
-✏️ pencil; 270F FE0F;
-✒️ black nib; 2712 FE0F;
-🖋️ fountain pen; 1F58B FE0F;
-🖊️ pen; 1F58A FE0F;
-🖌️ paintbrush; 1F58C FE0F;
-🖍️ crayon; 1F58D FE0F;
-📝 memo; 1F4DD;
-💼 briefcase; 1F4BC;
-📁 file folder; 1F4C1;
-📂 open file folder; 1F4C2;
-🗂️ card index dividers; 1F5C2 FE0F;
-📅 calendar; 1F4C5;
-📆 tear-off calendar; 1F4C6;
-🗒️ spiral notepad; 1F5D2 FE0F;
-🗓️ spiral calendar; 1F5D3 FE0F;
-📇 card index; 1F4C7;
-📈 chart increasing; 1F4C8;
-📉 chart decreasing; 1F4C9;
-📊 bar chart; 1F4CA;
-📋 clipboard; 1F4CB;
-📌 pushpin; 1F4CC;
-📍 round pushpin; 1F4CD;
-📎 paperclip; 1F4CE;
-🖇️ linked paperclips; 1F587 FE0F;
-📏 straight ruler; 1F4CF;
-📐 triangular ruler; 1F4D0;
-✂️ scissors; 2702 FE0F;
-🗃️ card file box; 1F5C3 FE0F;
-🗄️ file cabinet; 1F5C4 FE0F;
-🗑️ wastebasket; 1F5D1 FE0F;
-🔒 locked; 1F512;
-🔓 unlocked; 1F513;
-🔏 locked with pen; 1F50F;
-🔐 locked with key; 1F510;
-🔑 key; 1F511;
-🗝️ old key; 1F5DD FE0F;
-🔨 hammer; 1F528;
-🪓 axe; 1FA93;
-⛏️ pick; 26CF FE0F;
-⚒️ hammer and pick; 2692 FE0F;
-🛠️ hammer and wrench; 1F6E0 FE0F;
-🗡️ dagger; 1F5E1 FE0F;
-⚔️ crossed swords; 2694 FE0F;
-🔫 pistol; 1F52B;
-🪃 boomerang; 1FA83;
-🏹 bow and arrow; 1F3F9;
-🛡️ shield; 1F6E1 FE0F;
-🪚 carpentry saw; 1FA9A;
-🔧 wrench; 1F527;
-🪛 screwdriver; 1FA9B;
-🔩 nut and bolt; 1F529;
-⚙️ gear; 2699 FE0F;
-🗜️ clamp; 1F5DC FE0F;
-⚖️ balance scale; 2696 FE0F;
-🦯 white cane; 1F9AF;
-🔗 link; 1F517;
-⛓️ chains; 26D3 FE0F;
-🪝 hook; 1FA9D;
-🧰 toolbox; 1F9F0;
-🧲 magnet; 1F9F2;
-🪜 ladder; 1FA9C;
-⚗️ alembic; 2697 FE0F;
-🧪 test tube; 1F9EA;
-🧫 petri dish; 1F9EB;
-🧬 dna; 1F9EC;
-🔬 microscope; 1F52C;
-🔭 telescope; 1F52D;
-📡 satellite antenna; 1F4E1;
-💉 syringe; 1F489;
-🩸 drop of blood; 1FA78;
-💊 pill; 1F48A;
-🩹 adhesive bandage; 1FA79;
-🩺 stethoscope; 1FA7A;
-🚪 door; 1F6AA;
-🛗 elevator; 1F6D7;
-🪞 mirror; 1FA9E;
-🪟 window; 1FA9F;
-🛏️ bed; 1F6CF FE0F;
-🛋️ couch and lamp; 1F6CB FE0F;
-🪑 chair; 1FA91;
-🚽 toilet; 1F6BD;
-🪠 plunger; 1FAA0;
-🚿 shower; 1F6BF;
-🛁 bathtub; 1F6C1;
-🪤 mouse trap; 1FAA4;
-🪒 razor; 1FA92;
-🧴 lotion bottle; 1F9F4;
-🧷 safety pin; 1F9F7;
-🧹 broom; 1F9F9;
-🧺 basket; 1F9FA;
-🧻 roll of paper; 1F9FB;
-🪣 bucket; 1FAA3;
-🧼 soap; 1F9FC;
-🪥 toothbrush; 1FAA5;
-🧽 sponge; 1F9FD;
-🧯 fire extinguisher; 1F9EF;
-🛒 shopping cart; 1F6D2;
-🚬 cigarette; 1F6AC;
-⚰️ coffin; 26B0 FE0F;
-🪦 headstone; 1FAA6;
-⚱️ funeral urn; 26B1 FE0F;
-🗿 moai; 1F5FF;
-🪧 placard; 1FAA7;
-🏧 ATM sign; 1F3E7;
-🚮 litter in bin sign; 1F6AE;
-🚰 potable water; 1F6B0;
-♿ wheelchair symbol; 267F;
-🚹 men’s room; 1F6B9;
-🚺 women’s room; 1F6BA;
-🚻 restroom; 1F6BB;
-🚼 baby symbol; 1F6BC;
-🚾 water closet; 1F6BE;
-🛂 passport control; 1F6C2;
-🛃 customs; 1F6C3;
-🛄 baggage claim; 1F6C4;
-🛅 left luggage; 1F6C5;
-⚠️ warning; 26A0 FE0F;
-🚸 children crossing; 1F6B8;
-⛔ no entry; 26D4;
-🚫 prohibited; 1F6AB;
-🚳 no bicycles; 1F6B3;
-🚭 no smoking; 1F6AD;
-🚯 no littering; 1F6AF;
-🚱 non-potable water; 1F6B1;
-🚷 no pedestrians; 1F6B7;
-📵 no mobile phones; 1F4F5;
-🔞 no one under eighteen; 1F51E;
-☢️ radioactive; 2622 FE0F;
-☣️ biohazard; 2623 FE0F;
-⬆️ up arrow; 2B06 FE0F;
-↗️ up-right arrow; 2197 FE0F;
-➡️ right arrow; 27A1 FE0F;
-↘️ down-right arrow; 2198 FE0F;
-⬇️ down arrow; 2B07 FE0F;
-↙️ down-left arrow; 2199 FE0F;
-⬅️ left arrow; 2B05 FE0F;
-↖️ up-left arrow; 2196 FE0F;
-↕️ up-down arrow; 2195 FE0F;
-↔️ left-right arrow; 2194 FE0F;
-↩️ right arrow curving left; 21A9 FE0F;
-↪️ left arrow curving right; 21AA FE0F;
-⤴️ right arrow curving up; 2934 FE0F;
-⤵️ right arrow curving down; 2935 FE0F;
-🔃 clockwise vertical arrows; 1F503;
-🔄 counterclockwise arrows button; 1F504;
-🔙 BACK arrow; 1F519;
-🔚 END arrow; 1F51A;
-🔛 ON! arrow; 1F51B;
-🔜 SOON arrow; 1F51C;
-🔝 TOP arrow; 1F51D;
-🛐 place of worship; 1F6D0;
-⚛️ atom symbol; 269B FE0F;
-🕉️ om; 1F549 FE0F;
-✡️ star of David; 2721 FE0F;
-☸️ wheel of dharma; 2638 FE0F;
-☯️ yin yang; 262F FE0F;
-✝️ latin cross; 271D FE0F;
-☦️ orthodox cross; 2626 FE0F;
-☪️ star and crescent; 262A FE0F;
-☮️ peace symbol; 262E FE0F;
-🕎 menorah; 1F54E;
-🔯 dotted six-pointed star; 1F52F;
-♈ Aries; 2648;
-♉ Taurus; 2649;
-♊ Gemini; 264A;
-♋ Cancer; 264B;
-♌ Leo; 264C;
-♍ Virgo; 264D;
-♎ Libra; 264E;
-♏ Scorpio; 264F;
-♐ Sagittarius; 2650;
-♑ Capricorn; 2651;
-♒ Aquarius; 2652;
-♓ Pisces; 2653;
-⛎ Ophiuchus; 26CE;
-🔀 shuffle tracks button; 1F500;
-🔁 repeat button; 1F501;
-🔂 repeat single button; 1F502;
-▶️ play button; 25B6 FE0F;
-⏩ fast-forward button; 23E9;
-⏭️ next track button; 23ED FE0F;
-⏯️ play or pause button; 23EF FE0F;
-◀️ reverse button; 25C0 FE0F;
-⏪ fast reverse button; 23EA;
-⏮️ last track button; 23EE FE0F;
-🔼 upwards button; 1F53C;
-⏫ fast up button; 23EB;
-🔽 downwards button; 1F53D;
-⏬ fast down button; 23EC;
-⏸️ pause button; 23F8 FE0F;
-⏹️ stop button; 23F9 FE0F;
-⏺️ record button; 23FA FE0F;
-⏏️ eject button; 23CF FE0F;
-🎦 cinema; 1F3A6;
-🔅 dim button; 1F505;
-🔆 bright button; 1F506;
-📶 antenna bars; 1F4F6;
-📳 vibration mode; 1F4F3;
-📴 mobile phone off; 1F4F4;
-♀️ female sign; 2640 FE0F;
-♂️ male sign; 2642 FE0F;
-⚧️ transgender symbol; 26A7 FE0F;
-✖️ multiply; 2716 FE0F;
-➕ plus; 2795;
-➖ minus; 2796;
-➗ divide; 2797;
-♾️ infinity; 267E FE0F;
-‼️ double exclamation mark; 203C FE0F;
-⁉️ exclamation question mark; 2049 FE0F;
-❓ question mark; 2753;
-❔ white question mark; 2754;
-❕ white exclamation mark; 2755;
-❗ exclamation mark; 2757;
-〰️ wavy dash; 3030 FE0F;
-💱 currency exchange; 1F4B1;
-💲 heavy dollar sign; 1F4B2;
-⚕️ medical symbol; 2695 FE0F;
-♻️ recycling symbol; 267B FE0F;
-⚜️ fleur-de-lis; 269C FE0F;
-🔱 trident emblem; 1F531;
-📛 name badge; 1F4DB;
-🔰 Japanese symbol for beginner; 1F530;
-⭕ hollow red circle; 2B55;
-✅ check mark button; 2705;
-☑️ check box with check; 2611 FE0F;
-✔️ check mark; 2714 FE0F;
-❌ cross mark; 274C;
-❎ cross mark button; 274E;
-➰ curly loop; 27B0;
-➿ double curly loop; 27BF;
-〽️ part alternation mark; 303D FE0F;
-✳️ eight-spoked asterisk; 2733 FE0F;
-✴️ eight-pointed star; 2734 FE0F;
-❇️ sparkle; 2747 FE0F;
-©️ copyright; 00A9 FE0F;
-®️ registered; 00AE FE0F;
-™️ trade mark; 2122 FE0F;
-#️⃣ keycap: #; 0023 FE0F 20E3;
-*️⃣ keycap: *; 002A FE0F 20E3;
-0️⃣ keycap: 0; 0030 FE0F 20E3;
-1️⃣ keycap: 1; 0031 FE0F 20E3;
-2️⃣ keycap: 2; 0032 FE0F 20E3;
-3️⃣ keycap: 3; 0033 FE0F 20E3;
-4️⃣ keycap: 4; 0034 FE0F 20E3;
-5️⃣ keycap: 5; 0035 FE0F 20E3;
-6️⃣ keycap: 6; 0036 FE0F 20E3;
-7️⃣ keycap: 7; 0037 FE0F 20E3;
-8️⃣ keycap: 8; 0038 FE0F 20E3;
-9️⃣ keycap: 9; 0039 FE0F 20E3;
-🔟 keycap: 10; 1F51F;
-🔠 input latin uppercase; 1F520;
-🔡 input latin lowercase; 1F521;
-🔢 input numbers; 1F522;
-🔣 input symbols; 1F523;
-🔤 input latin letters; 1F524;
-🅰️ A button (blood type); 1F170 FE0F;
-🆎 AB button (blood type); 1F18E;
-🅱️ B button (blood type); 1F171 FE0F;
-🆑 CL button; 1F191;
-🆒 COOL button; 1F192;
-🆓 FREE button; 1F193;
-ℹ️ information; 2139 FE0F;
-🆔 ID button; 1F194;
-Ⓜ️ circled M; 24C2 FE0F;
-🆕 NEW button; 1F195;
-🆖 NG button; 1F196;
-🅾️ O button (blood type); 1F17E FE0F;
-🆗 OK button; 1F197;
-🅿️ P button; 1F17F FE0F;
-🆘 SOS button; 1F198;
-🆙 UP! button; 1F199;
-🆚 VS button; 1F19A;
-🈁 Japanese “here” button; 1F201;
-🈂️ Japanese “service charge” button; 1F202 FE0F;
-🈷️ Japanese “monthly amount” button; 1F237 FE0F;
-🈶 Japanese “not free of charge” button; 1F236;
-🈯 Japanese “reserved” button; 1F22F;
-🉐 Japanese “bargain” button; 1F250;
-🈹 Japanese “discount” button; 1F239;
-🈚 Japanese “free of charge” button; 1F21A;
-🈲 Japanese “prohibited” button; 1F232;
-🉑 Japanese “acceptable” button; 1F251;
-🈸 Japanese “application” button; 1F238;
-🈴 Japanese “passing grade” button; 1F234;
-🈳 Japanese “vacancy” button; 1F233;
-㊗️ Japanese “congratulations” button; 3297 FE0F;
-㊙️ Japanese “secret” button; 3299 FE0F;
-🈺 Japanese “open for business” button; 1F23A;
-🈵 Japanese “no vacancy” button; 1F235;
-🔴 red circle; 1F534;
-🟠 orange circle; 1F7E0;
-🟡 yellow circle; 1F7E1;
-🟢 green circle; 1F7E2;
-🔵 blue circle; 1F535;
-🟣 purple circle; 1F7E3;
-🟤 brown circle; 1F7E4;
-⚫ black circle; 26AB;
-⚪ white circle; 26AA;
-🟥 red square; 1F7E5;
-🟧 orange square; 1F7E7;
-🟨 yellow square; 1F7E8;
-🟩 green square; 1F7E9;
-🟦 blue square; 1F7E6;
-🟪 purple square; 1F7EA;
-🟫 brown square; 1F7EB;
-⬛ black large square; 2B1B;
-⬜ white large square; 2B1C;
-◼️ black medium square; 25FC FE0F;
-◻️ white medium square; 25FB FE0F;
-◾ black medium-small square; 25FE;
-◽ white medium-small square; 25FD;
-▪️ black small square; 25AA FE0F;
-▫️ white small square; 25AB FE0F;
-🔶 large orange diamond; 1F536;
-🔷 large blue diamond; 1F537;
-🔸 small orange diamond; 1F538;
-🔹 small blue diamond; 1F539;
-🔺 red triangle pointed up; 1F53A;
-🔻 red triangle pointed down; 1F53B;
-💠 diamond with a dot; 1F4A0;
-🔘 radio button; 1F518;
-🔳 white square button; 1F533;
-🔲 black square button; 1F532;
-🏁 chequered flag; 1F3C1;
-🚩 triangular flag; 1F6A9;
-🎌 crossed flags; 1F38C;
-🏴 black flag; 1F3F4;
-🏳️ white flag; 1F3F3 FE0F;
-🇦🇨 flag: Ascension Island; 1F1E6 1F1E8;
-🇦🇩 flag: Andorra; 1F1E6 1F1E9;
-🇦🇪 flag: United Arab Emirates; 1F1E6 1F1EA;
-🇦🇫 flag: Afghanistan; 1F1E6 1F1EB;
-🇦🇬 flag: Antigua & Barbuda; 1F1E6 1F1EC;
-🇦🇮 flag: Anguilla; 1F1E6 1F1EE;
-🇦🇱 flag: Albania; 1F1E6 1F1F1;
-🇦🇲 flag: Armenia; 1F1E6 1F1F2;
-🇦🇴 flag: Angola; 1F1E6 1F1F4;
-🇦🇶 flag: Antarctica; 1F1E6 1F1F6;
-🇦🇷 flag: Argentina; 1F1E6 1F1F7;
-🇦🇸 flag: American Samoa; 1F1E6 1F1F8;
-🇦🇹 flag: Austria; 1F1E6 1F1F9;
-🇦🇺 flag: Australia; 1F1E6 1F1FA;
-🇦🇼 flag: Aruba; 1F1E6 1F1FC;
-🇦🇽 flag: Åland Islands; 1F1E6 1F1FD;
-🇦🇿 flag: Azerbaijan; 1F1E6 1F1FF;
-🇧🇦 flag: Bosnia & Herzegovina; 1F1E7 1F1E6;
-🇧🇧 flag: Barbados; 1F1E7 1F1E7;
-🇧🇩 flag: Bangladesh; 1F1E7 1F1E9;
-🇧🇪 flag: Belgium; 1F1E7 1F1EA;
-🇧🇫 flag: Burkina Faso; 1F1E7 1F1EB;
-🇧🇬 flag: Bulgaria; 1F1E7 1F1EC;
-🇧🇭 flag: Bahrain; 1F1E7 1F1ED;
-🇧🇮 flag: Burundi; 1F1E7 1F1EE;
-🇧🇯 flag: Benin; 1F1E7 1F1EF;
-🇧🇱 flag: St. Barthélemy; 1F1E7 1F1F1;
-🇧🇲 flag: Bermuda; 1F1E7 1F1F2;
-🇧🇳 flag: Brunei; 1F1E7 1F1F3;
-🇧🇴 flag: Bolivia; 1F1E7 1F1F4;
-🇧🇶 flag: Caribbean Netherlands; 1F1E7 1F1F6;
-🇧🇷 flag: Brazil; 1F1E7 1F1F7;
-🇧🇸 flag: Bahamas; 1F1E7 1F1F8;
-🇧🇹 flag: Bhutan; 1F1E7 1F1F9;
-🇧🇻 flag: Bouvet Island; 1F1E7 1F1FB;
-🇧🇼 flag: Botswana; 1F1E7 1F1FC;
-🇧🇾 flag: Belarus; 1F1E7 1F1FE;
-🇧🇿 flag: Belize; 1F1E7 1F1FF;
-🇨🇦 flag: Canada; 1F1E8 1F1E6;
-🇨🇨 flag: Cocos (Keeling) Islands; 1F1E8 1F1E8;
-🇨🇩 flag: Congo - Kinshasa; 1F1E8 1F1E9;
-🇨🇫 flag: Central African Republic; 1F1E8 1F1EB;
-🇨🇬 flag: Congo - Brazzaville; 1F1E8 1F1EC;
-🇨🇭 flag: Switzerland; 1F1E8 1F1ED;
-🇨🇮 flag: Côte d’Ivoire; 1F1E8 1F1EE;
-🇨🇰 flag: Cook Islands; 1F1E8 1F1F0;
-🇨🇱 flag: Chile; 1F1E8 1F1F1;
-🇨🇲 flag: Cameroon; 1F1E8 1F1F2;
-🇨🇳 flag: China; 1F1E8 1F1F3;
-🇨🇴 flag: Colombia; 1F1E8 1F1F4;
-🇨🇵 flag: Clipperton Island; 1F1E8 1F1F5;
-🇨🇷 flag: Costa Rica; 1F1E8 1F1F7;
-🇨🇺 flag: Cuba; 1F1E8 1F1FA;
-🇨🇻 flag: Cape Verde; 1F1E8 1F1FB;
-🇨🇼 flag: Curaçao; 1F1E8 1F1FC;
-🇨🇽 flag: Christmas Island; 1F1E8 1F1FD;
-🇨🇾 flag: Cyprus; 1F1E8 1F1FE;
-🇨🇿 flag: Czechia; 1F1E8 1F1FF;
-🇩🇪 flag: Germany; 1F1E9 1F1EA;
-🇩🇬 flag: Diego Garcia; 1F1E9 1F1EC;
-🇩🇯 flag: Djibouti; 1F1E9 1F1EF;
-🇩🇰 flag: Denmark; 1F1E9 1F1F0;
-🇩🇲 flag: Dominica; 1F1E9 1F1F2;
-🇩🇴 flag: Dominican Republic; 1F1E9 1F1F4;
-🇩🇿 flag: Algeria; 1F1E9 1F1FF;
-🇪🇦 flag: Ceuta & Melilla; 1F1EA 1F1E6;
-🇪🇨 flag: Ecuador; 1F1EA 1F1E8;
-🇪🇪 flag: Estonia; 1F1EA 1F1EA;
-🇪🇬 flag: Egypt; 1F1EA 1F1EC;
-🇪🇭 flag: Western Sahara; 1F1EA 1F1ED;
-🇪🇷 flag: Eritrea; 1F1EA 1F1F7;
-🇪🇸 flag: Spain; 1F1EA 1F1F8;
-🇪🇹 flag: Ethiopia; 1F1EA 1F1F9;
-🇪🇺 flag: European Union; 1F1EA 1F1FA;
-🇫🇮 flag: Finland; 1F1EB 1F1EE;
-🇫🇯 flag: Fiji; 1F1EB 1F1EF;
-🇫🇰 flag: Falkland Islands; 1F1EB 1F1F0;
-🇫🇲 flag: Micronesia; 1F1EB 1F1F2;
-🇫🇴 flag: Faroe Islands; 1F1EB 1F1F4;
-🇫🇷 flag: France; 1F1EB 1F1F7;
-🇬🇦 flag: Gabon; 1F1EC 1F1E6;
-🇬🇧 flag: United Kingdom; 1F1EC 1F1E7;
-🇬🇩 flag: Grenada; 1F1EC 1F1E9;
-🇬🇪 flag: Georgia; 1F1EC 1F1EA;
-🇬🇫 flag: French Guiana; 1F1EC 1F1EB;
-🇬🇬 flag: Guernsey; 1F1EC 1F1EC;
-🇬🇭 flag: Ghana; 1F1EC 1F1ED;
-🇬🇮 flag: Gibraltar; 1F1EC 1F1EE;
-🇬🇱 flag: Greenland; 1F1EC 1F1F1;
-🇬🇲 flag: Gambia; 1F1EC 1F1F2;
-🇬🇳 flag: Guinea; 1F1EC 1F1F3;
-🇬🇵 flag: Guadeloupe; 1F1EC 1F1F5;
-🇬🇶 flag: Equatorial Guinea; 1F1EC 1F1F6;
-🇬🇷 flag: Greece; 1F1EC 1F1F7;
-🇬🇸 flag: South Georgia & South Sandwich Islands; 1F1EC 1F1F8;
-🇬🇹 flag: Guatemala; 1F1EC 1F1F9;
-🇬🇺 flag: Guam; 1F1EC 1F1FA;
-🇬🇼 flag: Guinea-Bissau; 1F1EC 1F1FC;
-🇬🇾 flag: Guyana; 1F1EC 1F1FE;
-🇭🇰 flag: Hong Kong SAR China; 1F1ED 1F1F0;
-🇭🇲 flag: Heard & McDonald Islands; 1F1ED 1F1F2;
-🇭🇳 flag: Honduras; 1F1ED 1F1F3;
-🇭🇷 flag: Croatia; 1F1ED 1F1F7;
-🇭🇹 flag: Haiti; 1F1ED 1F1F9;
-🇭🇺 flag: Hungary; 1F1ED 1F1FA;
-🇮🇨 flag: Canary Islands; 1F1EE 1F1E8;
-🇮🇩 flag: Indonesia; 1F1EE 1F1E9;
-🇮🇪 flag: Ireland; 1F1EE 1F1EA;
-🇮🇱 flag: Israel; 1F1EE 1F1F1;
-🇮🇲 flag: Isle of Man; 1F1EE 1F1F2;
-🇮🇳 flag: India; 1F1EE 1F1F3;
-🇮🇴 flag: British Indian Ocean Territory; 1F1EE 1F1F4;
-🇮🇶 flag: Iraq; 1F1EE 1F1F6;
-🇮🇷 flag: Iran; 1F1EE 1F1F7;
-🇮🇸 flag: Iceland; 1F1EE 1F1F8;
-🇮🇹 flag: Italy; 1F1EE 1F1F9;
-🇯🇪 flag: Jersey; 1F1EF 1F1EA;
-🇯🇲 flag: Jamaica; 1F1EF 1F1F2;
-🇯🇴 flag: Jordan; 1F1EF 1F1F4;
-🇯🇵 flag: Japan; 1F1EF 1F1F5;
-🇰🇪 flag: Kenya; 1F1F0 1F1EA;
-🇰🇬 flag: Kyrgyzstan; 1F1F0 1F1EC;
-🇰🇭 flag: Cambodia; 1F1F0 1F1ED;
-🇰🇮 flag: Kiribati; 1F1F0 1F1EE;
-🇰🇲 flag: Comoros; 1F1F0 1F1F2;
-🇰🇳 flag: St. Kitts & Nevis; 1F1F0 1F1F3;
-🇰🇵 flag: North Korea; 1F1F0 1F1F5;
-🇰🇷 flag: South Korea; 1F1F0 1F1F7;
-🇰🇼 flag: Kuwait; 1F1F0 1F1FC;
-🇰🇾 flag: Cayman Islands; 1F1F0 1F1FE;
-🇰🇿 flag: Kazakhstan; 1F1F0 1F1FF;
-🇱🇦 flag: Laos; 1F1F1 1F1E6;
-🇱🇧 flag: Lebanon; 1F1F1 1F1E7;
-🇱🇨 flag: St. Lucia; 1F1F1 1F1E8;
-🇱🇮 flag: Liechtenstein; 1F1F1 1F1EE;
-🇱🇰 flag: Sri Lanka; 1F1F1 1F1F0;
-🇱🇷 flag: Liberia; 1F1F1 1F1F7;
-🇱🇸 flag: Lesotho; 1F1F1 1F1F8;
-🇱🇹 flag: Lithuania; 1F1F1 1F1F9;
-🇱🇺 flag: Luxembourg; 1F1F1 1F1FA;
-🇱🇻 flag: Latvia; 1F1F1 1F1FB;
-🇱🇾 flag: Libya; 1F1F1 1F1FE;
-🇲🇦 flag: Morocco; 1F1F2 1F1E6;
-🇲🇨 flag: Monaco; 1F1F2 1F1E8;
-🇲🇩 flag: Moldova; 1F1F2 1F1E9;
-🇲🇪 flag: Montenegro; 1F1F2 1F1EA;
-🇲🇫 flag: St. Martin; 1F1F2 1F1EB;
-🇲🇬 flag: Madagascar; 1F1F2 1F1EC;
-🇲🇭 flag: Marshall Islands; 1F1F2 1F1ED;
-🇲🇰 flag: North Macedonia; 1F1F2 1F1F0;
-🇲🇱 flag: Mali; 1F1F2 1F1F1;
-🇲🇲 flag: Myanmar (Burma); 1F1F2 1F1F2;
-🇲🇳 flag: Mongolia; 1F1F2 1F1F3;
-🇲🇴 flag: Macao SAR China; 1F1F2 1F1F4;
-🇲🇵 flag: Northern Mariana Islands; 1F1F2 1F1F5;
-🇲🇶 flag: Martinique; 1F1F2 1F1F6;
-🇲🇷 flag: Mauritania; 1F1F2 1F1F7;
-🇲🇸 flag: Montserrat; 1F1F2 1F1F8;
-🇲🇹 flag: Malta; 1F1F2 1F1F9;
-🇲🇺 flag: Mauritius; 1F1F2 1F1FA;
-🇲🇻 flag: Maldives; 1F1F2 1F1FB;
-🇲🇼 flag: Malawi; 1F1F2 1F1FC;
-🇲🇽 flag: Mexico; 1F1F2 1F1FD;
-🇲🇾 flag: Malaysia; 1F1F2 1F1FE;
-🇲🇿 flag: Mozambique; 1F1F2 1F1FF;
-🇳🇦 flag: Namibia; 1F1F3 1F1E6;
-🇳🇨 flag: New Caledonia; 1F1F3 1F1E8;
-🇳🇪 flag: Niger; 1F1F3 1F1EA;
-🇳🇫 flag: Norfolk Island; 1F1F3 1F1EB;
-🇳🇬 flag: Nigeria; 1F1F3 1F1EC;
-🇳🇮 flag: Nicaragua; 1F1F3 1F1EE;
-🇳🇱 flag: Netherlands; 1F1F3 1F1F1;
-🇳🇴 flag: Norway; 1F1F3 1F1F4;
-🇳🇵 flag: Nepal; 1F1F3 1F1F5;
-🇳🇷 flag: Nauru; 1F1F3 1F1F7;
-🇳🇺 flag: Niue; 1F1F3 1F1FA;
-🇳🇿 flag: New Zealand; 1F1F3 1F1FF;
-🇴🇲 flag: Oman; 1F1F4 1F1F2;
-🇵🇦 flag: Panama; 1F1F5 1F1E6;
-🇵🇪 flag: Peru; 1F1F5 1F1EA;
-🇵🇫 flag: French Polynesia; 1F1F5 1F1EB;
-🇵🇬 flag: Papua New Guinea; 1F1F5 1F1EC;
-🇵🇭 flag: Philippines; 1F1F5 1F1ED;
-🇵🇰 flag: Pakistan; 1F1F5 1F1F0;
-🇵🇱 flag: Poland; 1F1F5 1F1F1;
-🇵🇲 flag: St. Pierre & Miquelon; 1F1F5 1F1F2;
-🇵🇳 flag: Pitcairn Islands; 1F1F5 1F1F3;
-🇵🇷 flag: Puerto Rico; 1F1F5 1F1F7;
-🇵🇸 flag: Palestinian Territories; 1F1F5 1F1F8;
-🇵🇹 flag: Portugal; 1F1F5 1F1F9;
-🇵🇼 flag: Palau; 1F1F5 1F1FC;
-🇵🇾 flag: Paraguay; 1F1F5 1F1FE;
-🇶🇦 flag: Qatar; 1F1F6 1F1E6;
-🇷🇪 flag: Réunion; 1F1F7 1F1EA;
-🇷🇴 flag: Romania; 1F1F7 1F1F4;
-🇷🇸 flag: Serbia; 1F1F7 1F1F8;
-🇷🇺 flag: Russia; 1F1F7 1F1FA;
-🇷🇼 flag: Rwanda; 1F1F7 1F1FC;
-🇸🇦 flag: Saudi Arabia; 1F1F8 1F1E6;
-🇸🇧 flag: Solomon Islands; 1F1F8 1F1E7;
-🇸🇨 flag: Seychelles; 1F1F8 1F1E8;
-🇸🇩 flag: Sudan; 1F1F8 1F1E9;
-🇸🇪 flag: Sweden; 1F1F8 1F1EA;
-🇸🇬 flag: Singapore; 1F1F8 1F1EC;
-🇸🇭 flag: St. Helena; 1F1F8 1F1ED;
-🇸🇮 flag: Slovenia; 1F1F8 1F1EE;
-🇸🇯 flag: Svalbard & Jan Mayen; 1F1F8 1F1EF;
-🇸🇰 flag: Slovakia; 1F1F8 1F1F0;
-🇸🇱 flag: Sierra Leone; 1F1F8 1F1F1;
-🇸🇲 flag: San Marino; 1F1F8 1F1F2;
-🇸🇳 flag: Senegal; 1F1F8 1F1F3;
-🇸🇴 flag: Somalia; 1F1F8 1F1F4;
-🇸🇷 flag: Suriname; 1F1F8 1F1F7;
-🇸🇸 flag: South Sudan; 1F1F8 1F1F8;
-🇸🇹 flag: São Tomé & Príncipe; 1F1F8 1F1F9;
-🇸🇻 flag: El Salvador; 1F1F8 1F1FB;
-🇸🇽 flag: Sint Maarten; 1F1F8 1F1FD;
-🇸🇾 flag: Syria; 1F1F8 1F1FE;
-🇸🇿 flag: Eswatini; 1F1F8 1F1FF;
-🇹🇦 flag: Tristan da Cunha; 1F1F9 1F1E6;
-🇹🇨 flag: Turks & Caicos Islands; 1F1F9 1F1E8;
-🇹🇩 flag: Chad; 1F1F9 1F1E9;
-🇹🇫 flag: French Southern Territories; 1F1F9 1F1EB;
-🇹🇬 flag: Togo; 1F1F9 1F1EC;
-🇹🇭 flag: Thailand; 1F1F9 1F1ED;
-🇹🇯 flag: Tajikistan; 1F1F9 1F1EF;
-🇹🇰 flag: Tokelau; 1F1F9 1F1F0;
-🇹🇱 flag: Timor-Leste; 1F1F9 1F1F1;
-🇹🇲 flag: Turkmenistan; 1F1F9 1F1F2;
-🇹🇳 flag: Tunisia; 1F1F9 1F1F3;
-🇹🇴 flag: Tonga; 1F1F9 1F1F4;
-🇹🇷 flag: Turkey; 1F1F9 1F1F7;
-🇹🇹 flag: Trinidad & Tobago; 1F1F9 1F1F9;
-🇹🇻 flag: Tuvalu; 1F1F9 1F1FB;
-🇹🇼 flag: Taiwan; 1F1F9 1F1FC;
-🇹🇿 flag: Tanzania; 1F1F9 1F1FF;
-🇺🇦 flag: Ukraine; 1F1FA 1F1E6;
-🇺🇬 flag: Uganda; 1F1FA 1F1EC;
-🇺🇲 flag: U.S. Outlying Islands; 1F1FA 1F1F2;
-🇺🇳 flag: United Nations; 1F1FA 1F1F3;
-🇺🇸 flag: United States; 1F1FA 1F1F8;
-🇺🇾 flag: Uruguay; 1F1FA 1F1FE;
-🇺🇿 flag: Uzbekistan; 1F1FA 1F1FF;
-🇻🇦 flag: Vatican City; 1F1FB 1F1E6;
-🇻🇨 flag: St. Vincent & Grenadines; 1F1FB 1F1E8;
-🇻🇪 flag: Venezuela; 1F1FB 1F1EA;
-🇻🇬 flag: British Virgin Islands; 1F1FB 1F1EC;
-🇻🇮 flag: U.S. Virgin Islands; 1F1FB 1F1EE;
-🇻🇳 flag: Vietnam; 1F1FB 1F1F3;
-🇻🇺 flag: Vanuatu; 1F1FB 1F1FA;
-🇼🇫 flag: Wallis & Futuna; 1F1FC 1F1EB;
-🇼🇸 flag: Samoa; 1F1FC 1F1F8;
-🇽🇰 flag: Kosovo; 1F1FD 1F1F0;
-🇾🇪 flag: Yemen; 1F1FE 1F1EA;
-🇾🇹 flag: Mayotte; 1F1FE 1F1F9;
-🇿🇦 flag: South Africa; 1F1FF 1F1E6;
-🇿🇲 flag: Zambia; 1F1FF 1F1F2;
-🇿🇼 flag: Zimbabwe; 1F1FF 1F1FC;
-🏴󠁧󠁢󠁥󠁮󠁧󠁿 flag: England; 1F3F4725E7F;
-🏴󠁧󠁢󠁳󠁣󠁴󠁿 flag: Scotland; 1F3F472334F;
-🏴󠁧󠁢󠁷󠁬󠁳󠁿 flag: Wales; 1F3F4727C3F;

From 609f3569e4603846988952097cc4360d72ef769d Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Sat, 4 Feb 2023 22:15:57 +0100
Subject: [PATCH 08/12] improve lf in same dir bind

---
 .config/lf/lfrc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.config/lf/lfrc b/.config/lf/lfrc
index 479d9630..0ed0f629 100644
--- a/.config/lf/lfrc
+++ b/.config/lf/lfrc
@@ -196,9 +196,8 @@ map n &echo $f | xclip -r -selection c
 map <esc> quit
 map N
 map g/ cd "/" 
+map W &setsid $TERMINAL -e $SHELL -c "lf; $SHELL"
 
-# Kitty Specific
-map W &kitty --detach lf
 
 # Load bookmark shortcuts
 source "~/.config/lf/shortcutrc"

From 1f18c3eff37d54d04634c25d647f3fb3b7f0096d Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Mon, 6 Feb 2023 10:27:26 +0100
Subject: [PATCH 09/12] move to playerctl

---
 .config/nvim/lua/config/keymaplist.lua | 2 +-
 .config/x11/xinitrc                    | 1 -
 .config/x11/xprofile                   | 5 +++--
 .local/bin/statusbar/sb-music          | 1 +
 .local/bin/statusbar/sb-playerctl      | 8 ++++++++
 .local/bin/statusbar/sb-xkbmap         | 2 +-
 .local/bin/statusbar/sbd-playerctl     | 2 ++
 7 files changed, 16 insertions(+), 5 deletions(-)
 create mode 100755 .local/bin/statusbar/sb-playerctl
 create mode 100755 .local/bin/statusbar/sbd-playerctl

diff --git a/.config/nvim/lua/config/keymaplist.lua b/.config/nvim/lua/config/keymaplist.lua
index f597ef0a..1dc86918 100644
--- a/.config/nvim/lua/config/keymaplist.lua
+++ b/.config/nvim/lua/config/keymaplist.lua
@@ -47,7 +47,7 @@ M.whichkey = {
     general = {
         n = {
             ["w"] = { "<cmd>w!<CR>", "Save" },
-            ["q"] = { function() require("funcs").buf_kill() end, "Close" },
+            ["'"] = { function() require("funcs").buf_kill() end, "Close" },
             ["f"] = { function() require("lf").start("~") end, "File Picker" },
             ["h"] = { "<cmd>nohlsearch<CR>", "Clear Highlights" },
             u = {
diff --git a/.config/x11/xinitrc b/.config/x11/xinitrc
index 90eed12d..8df0f9b1 100755
--- a/.config/x11/xinitrc
+++ b/.config/x11/xinitrc
@@ -13,5 +13,4 @@ if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" ]; then
 else
 	. "$HOME/.xprofile"
 fi
-
 dwm
diff --git a/.config/x11/xprofile b/.config/x11/xprofile
index 9001fbba..d609d634 100755
--- a/.config/x11/xprofile
+++ b/.config/x11/xprofile
@@ -6,10 +6,11 @@ setbg &
 xrdb "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources" & xrdbpid=$!
 remaps &
 
-autostart="picom checkup mpd dunst unclutter pipewire dwmblocks"
+autostart="picom checkup dunst unclutter pipewire dwmblocks"
 for program in $autostart; do
 	pidof -s "$program" || "$program" &
 done >/dev/null 2>&1
+playerctld daemon
 
 if ! pgrep -x -u "${USER}" gpg-agent 1> /dev/null 2>&1; then
      gpg-connect-agent /bye 1> /dev/null 2>&1
@@ -33,7 +34,7 @@ export XSECURELOCK_PASSWORD_PROMPT="time_hex"
 export XSECURELOCK_AUTH_TIMEOUT=10
 export XSECURELOCK_SHOW_DATETIME=1
 export XSECURELOCK_COMPOSITE_OBSCURER=0
-export XSECURELOCK_SAVER="/usr/libexec/xscreensaver/cubicgrid"
+export XSECURELOCK_SAVER="/usr/lib/xscreensaver/cubicgrid"
 export XSECURELOCK_SHOW_DATETIME=1
 export XSECURELOCK_SHOW_HOSTNAME=1
 xset s 300
diff --git a/.local/bin/statusbar/sb-music b/.local/bin/statusbar/sb-music
index a65fd9e0..78856683 100755
--- a/.local/bin/statusbar/sb-music
+++ b/.local/bin/statusbar/sb-music
@@ -12,3 +12,4 @@ filter() {
   fi
 }
 pidof -x sbd-music >/dev/null 2>&1 || sbd-music >/dev/null 2>&1 &
+filter
diff --git a/.local/bin/statusbar/sb-playerctl b/.local/bin/statusbar/sb-playerctl
new file mode 100755
index 00000000..0cf08529
--- /dev/null
+++ b/.local/bin/statusbar/sb-playerctl
@@ -0,0 +1,8 @@
+#!/bin/sh
+pidof -x sbd-playerctl >/dev/null 2>&1 || sbd-playerctl >/dev/null 2>&1 &
+[ "$(playerctl status 2>&1)" = "No players found" ] && echo ""ﱙ && exit 1
+# song="$(playerctl metadata xesam:artist) - $(playerctl metadata xesam:title)"
+song="$(playerctl metadata xesam:title)"
+[ ${#song} -gt 35 ] && song="$(printf %.35s "$song")…"
+icon=$(playerctl status | sed "s/Playing//;s/Paused//;")
+echo "$icon $song"
diff --git a/.local/bin/statusbar/sb-xkbmap b/.local/bin/statusbar/sb-xkbmap
index 808067b9..158d9b70 100755
--- a/.local/bin/statusbar/sb-xkbmap
+++ b/.local/bin/statusbar/sb-xkbmap
@@ -1,3 +1,3 @@
 #/bin/sh
-pidof -x sbd-xkbmap >/dev/null 2>&1 || sbd-xkbmap >/dev/null 2>&1 &
+# pidof -x sbd-xkbmap >/dev/null 2>&1 || sbd-xkbmap >/dev/null 2>&1 &
 printf "\033[11m\033[10m %s\n" "$(setxkbmap -query | grep -oP '(layout|variant):\s*\K\w+' | sed ':a;N;s/\n/ /')"
diff --git a/.local/bin/statusbar/sbd-playerctl b/.local/bin/statusbar/sbd-playerctl
new file mode 100755
index 00000000..697e5e3d
--- /dev/null
+++ b/.local/bin/statusbar/sbd-playerctl
@@ -0,0 +1,2 @@
+#!/bin/sh
+playerctl status -F | tee "/tmp/playerctl-status" | (while read -r _; do pkill -RTMIN+11 dwmblocks; done;)

From 4013d28a647d4e1b0810cf7db4def741cc27e19d Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Mon, 6 Feb 2023 10:27:31 +0100
Subject: [PATCH 10/12] cleanup

---
 .config/zathura/zathurarc | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc
index e6e2721d..b7e4837c 100644
--- a/.config/zathura/zathurarc
+++ b/.config/zathura/zathurarc
@@ -1,4 +1,3 @@
-/* set sandbox none */
 set statusbar-h-padding 0
 set statusbar-v-padding 0
 set page-padding 1

From a17f150b5606e44e97414e06d1d34e3f2fcccee1 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Mon, 6 Feb 2023 11:33:41 +0100
Subject: [PATCH 11/12] revert silly keybind xd

---
 .config/nvim/lua/config/keymaplist.lua | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.config/nvim/lua/config/keymaplist.lua b/.config/nvim/lua/config/keymaplist.lua
index 1dc86918..f597ef0a 100644
--- a/.config/nvim/lua/config/keymaplist.lua
+++ b/.config/nvim/lua/config/keymaplist.lua
@@ -47,7 +47,7 @@ M.whichkey = {
     general = {
         n = {
             ["w"] = { "<cmd>w!<CR>", "Save" },
-            ["'"] = { function() require("funcs").buf_kill() end, "Close" },
+            ["q"] = { function() require("funcs").buf_kill() end, "Close" },
             ["f"] = { function() require("lf").start("~") end, "File Picker" },
             ["h"] = { "<cmd>nohlsearch<CR>", "Clear Highlights" },
             u = {

From f64f0bf09db67790419af25a3c1eaa6fb36082d1 Mon Sep 17 00:00:00 2001
From: Luca Bilke <luca@gmail.com>
Date: Mon, 6 Feb 2023 11:34:23 +0100
Subject: [PATCH 12/12] kitty made some breaking changes, currently transfer
 mode seems bugged

---
 .config/lf/clean   |  2 +-
 .config/lf/preview | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/.config/lf/clean b/.config/lf/clean
index 08c54efd..91a9aa56 100755
--- a/.config/lf/clean
+++ b/.config/lf/clean
@@ -1,3 +1,3 @@
 #!/usr/bin/env bash
-kitty +icat --clear --silent --transfer-mode file
+kitty +kitten icat --clear --transfer-mode file
 
diff --git a/.config/lf/preview b/.config/lf/preview
index d1c88705..35aec9ae 100755
--- a/.config/lf/preview
+++ b/.config/lf/preview
@@ -5,8 +5,8 @@ image() {
     h=$3
     x=$4
     y=$5
-    [[ -v f ]] && kitty +icat --silent --transfer-mode file --place "${w}x${h}@${x}x${y}" "$f" && exit 1
-    chafa "$f" -f symbols -s "$(($w-2))x$h" && exit 1
+    kitty +kitten icat --transfer-mode file --place "${w}x${h}@${x}x${y}" -- "$f"
+    chafa "$f" -f symbols -s "$((w-2))x$h" && exit 1
     echo -e "\e[31mImage previewer not installed\e[0m"
     return 1
 }
@@ -17,7 +17,7 @@ video() {
     h=$3
     x=$4
     y=$5
-    thumb="$(vidthumb $f)" || ( echo -e "\e[31mvidthumb script not in path\e[0m" && return 1 )
+    thumb="$(vidthumb "$f")" || ( echo -e "\e[31mvidthumb script not in path\e[0m" && return 1 )
     image "$thumb" "$w" "$h" "$x" "$y" 
     return 1
 }
@@ -25,8 +25,8 @@ video() {
 batorcat() {
 	f=$1
   w=$2
-	command -v bat > /dev/null 2>&1 && bat --color=always --style=plain --pager=never --terminal-width "$(($w-2))" "$f" && exit 0
-  command -v batcat > /dev/null 2>&1 && batcat --color=always --style=plain --pager=never --terminal-width "$(($w-2))" "$f" && exit 0
+	command -v bat > /dev/null 2>&1 && bat --color=always --style=plain --pager=never --terminal-width "$((w-2))" "$f" && exit 0
+  command -v batcat > /dev/null 2>&1 && batcat --color=always --style=plain --pager=never --terminal-width "$((w-2))" "$f" && exit 0
 	cat "$f" && exit 0
 }