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 }