dots

my dotfiles
git clone https://git.awy.one/dots
Log | Files | Refs | Submodules | README | LICENSE

commit b78dd3f410ac9c92fbef6952577c18e4c0135cbd
parent d65281c1cac1d8608c1fd3156ace6a20b7a79596
Author: awy <awy@awy.one>
Date:   Tue, 16 Dec 2025 20:23:07 +0300

format

Diffstat:
M.config/gtk-3.0/gtk.css | 8++++++--
M.config/nvim/init.lua | 22+++++++++++-----------
M.config/nvim/lua/options.lua | 2+-
M.config/nvim/lua/plugins/comment.lua | 12++++++------
M.config/nvim/lua/plugins/completions.lua | 82++++++++++++++++++++++++++++++++++++++++----------------------------------------
A.config/nvim/lua/plugins/conform.lua | 45+++++++++++++++++++++++++++++++++++++++++++++
M.config/nvim/lua/plugins/explorer.lua | 20++++++++++----------
M.config/nvim/lua/plugins/gitsigns.lua | 18+++++++++---------
M.config/nvim/lua/plugins/indent.lua | 12++++++------
M.config/nvim/lua/plugins/lsp.lua | 102++++++++++++++++++++++++++++++++++++++++----------------------------------------
M.config/nvim/lua/plugins/lualine.lua | 16++++++++--------
M.config/nvim/lua/plugins/markdown.lua | 16++++++++--------
M.config/nvim/lua/plugins/telescope.lua | 44++++++++++++++++++++++----------------------
M.config/nvim/lua/plugins/theme.lua | 26+++++++++++++-------------
M.config/nvim/lua/plugins/treesitter.lua | 24++++++++++++------------
M.config/nvim/lua/plugins/trim.lua | 12++++++------
M.config/pipewire/pipewire.conf.d/user-session.conf | 8++++----
M.config/shell/aliasrc | 5+++--
M.config/shell/profile | 8++++----
M.config/swayimg/key-handler | 72+++++++++++++++++++++++++++++++++++++++---------------------------------
M.config/yazi/init.lua | 2+-
M.config/yazi/plugins/git.yazi/main.lua | 379++++++++++++++++++++++++++++++++++++++++---------------------------------------
M.config/yazi/theme.toml | 1396++++++++++++++++++++++++++++++++++++++++----------------------------------------
M.config/zsh/.zshrc | 21+++++++++------------
M.local/bin/bookmarks | 131++++++++++++++++++++++++++++++++++++++++---------------------------------------
M.local/bin/booksplit | 38++++++++++++++++++++------------------
M.local/bin/chkmd5m | 22+++++++++++-----------
M.local/bin/chooseprofile | 4++--
M.local/bin/compiler | 50+++++++++++++++++++++++++-------------------------
M.local/bin/cron/checkup | 6++----
M.local/bin/cron/crontog | 3+--
M.local/bin/cron/mailup | 2+-
M.local/bin/cron/newsup | 3+--
M.local/bin/define | 1-
D.local/bin/displayselect | 82-------------------------------------------------------------------------------
M.local/bin/dmenuhandler | 30+++++++++++++++++-------------
M.local/bin/dmenumountcifs | 7++++---
M.local/bin/dmenurecord | 114++++++++++++++++++++++++++++++++++++++++---------------------------------------
M.local/bin/doas_askpass | 16++++++++--------
M.local/bin/getbib | 64++++++++++++++++++++++++++++++++--------------------------------
M.local/bin/ifinstalled | 6+++---
M.local/bin/linkhandler | 31++++++++++++++++++-------------
M.local/bin/maimpick | 43+++++++++++++++++++++++--------------------
M.local/bin/mounter | 94++++++++++++++++++++++++++++++++++++++++----------------------------------------
M.local/bin/noisereduce | 70+++++++++++++++++++++++++++++++++++-----------------------------------
M.local/bin/opout | 9++++++---
M.local/bin/pauseallmpv | 2+-
M.local/bin/queueandnotify | 10+++++-----
M.local/bin/randombg | 34+++++++++++++++++-----------------
M.local/bin/rssadd | 18+++++++++---------
M.local/bin/rssget | 134++++++++++++++++++++++++++++++++++++++++----------------------------------------
M.local/bin/sd | 24++++++++++++------------
M.local/bin/setbg | 25++++++++++++++-----------
M.local/bin/shortcuts | 16++++++++--------
M.local/bin/singboxwrap | 19++++++++++---------
M.local/bin/slider | 144+++++++++++++++++++++++++++++++++++++++++--------------------------------------
M.local/bin/spec | 10++++++----
M.local/bin/statusbar/sb-microphone | 21++++++++++++---------
M.local/bin/statusbar/sb-news | 16++++++++--------
M.local/bin/statusbar/sb-pacpackages | 6+++---
M.local/bin/sysact | 26+++++++++++++-------------
M.local/bin/tag | 36++++++++++++++++++------------------
M.local/bin/td-toggle | 9++++-----
M.local/bin/torwrap | 3++-
M.local/bin/unix | 2+-
M.local/bin/weath | 28++++++++++++++--------------
Mrice.sh | 32++++++++++++++++----------------
67 files changed, 1898 insertions(+), 1895 deletions(-)

diff --git a/.config/gtk-3.0/gtk.css b/.config/gtk-3.0/gtk.css @@ -1,4 +1,8 @@ /* fuck rounded corners */ -decoration, window, window.background, window.titlebar, * { - border-radius: 0px; +decoration, +window, +window.background, +window.titlebar, +* { + border-radius: 0px; } diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua @@ -1,17 +1,17 @@ -- Bootstrap lazy.nvim local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end end vim.opt.rtp:prepend(lazypath) diff --git a/.config/nvim/lua/options.lua b/.config/nvim/lua/options.lua @@ -4,7 +4,7 @@ vim.o.wrap = false vim.o.tabstop = 2 vim.o.shiftwidth = 2 vim.o.softtabstop = 2 --- vim.o.expandtab = true +vim.o.expandtab = true vim.o.swapfile = false vim.g.mapleader = " " vim.o.clipboard = "unnamedplus" diff --git a/.config/nvim/lua/plugins/comment.lua b/.config/nvim/lua/plugins/comment.lua @@ -1,8 +1,8 @@ return { - { - "numToStr/Comment.nvim", - config = function() - require('Comment').setup() - end - } + { + "numToStr/Comment.nvim", + config = function() + require('Comment').setup() + end + } } diff --git a/.config/nvim/lua/plugins/completions.lua b/.config/nvim/lua/plugins/completions.lua @@ -1,44 +1,44 @@ return { - { - "hrsh7th/cmp-nvim-lsp" - }, - { - "L3MON4D3/LuaSnip", - dependencies = { - "saadparwaiz1/cmp_luasnip", - "rafamadriz/friendly-snippets", - }, - }, - { - "hrsh7th/nvim-cmp", - config = function() - local cmp = require("cmp") - require("luasnip.loaders.from_vscode").lazy_load() + { + "hrsh7th/cmp-nvim-lsp" + }, + { + "L3MON4D3/LuaSnip", + dependencies = { + "saadparwaiz1/cmp_luasnip", + "rafamadriz/friendly-snippets", + }, + }, + { + "hrsh7th/nvim-cmp", + config = function() + local cmp = require("cmp") + require("luasnip.loaders.from_vscode").lazy_load() - cmp.setup({ - snippet = { - expand = function(args) - require("luasnip").lsp_expand(args.body) - end, - }, - window = { - -- completion = cmp.config.window.bordered(), - -- documentation = cmp.config.window.bordered(), - }, - mapping = cmp.mapping.preset.insert({ - ["<C-b>"] = cmp.mapping.scroll_docs(-4), - ["<C-f>"] = cmp.mapping.scroll_docs(4), - ["<C-Space>"] = cmp.mapping.complete(), - ["<C-e>"] = cmp.mapping.abort(), - ["<CR>"] = cmp.mapping.confirm({ select = true }), - }), - sources = cmp.config.sources({ - { name = "nvim_lsp" }, - { name = "luasnip" }, -- For luasnip users. - }, { - { name = "buffer" }, - }), - }) - end, - }, + cmp.setup({ + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + window = { + -- completion = cmp.config.window.bordered(), + -- documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + ["<C-b>"] = cmp.mapping.scroll_docs(-4), + ["<C-f>"] = cmp.mapping.scroll_docs(4), + ["<C-Space>"] = cmp.mapping.complete(), + ["<C-e>"] = cmp.mapping.abort(), + ["<CR>"] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, -- For luasnip users. + }, { + { name = "buffer" }, + }), + }) + end, + }, } diff --git a/.config/nvim/lua/plugins/conform.lua b/.config/nvim/lua/plugins/conform.lua @@ -0,0 +1,45 @@ +return { + 'stevearc/conform.nvim', + opts = {}, + config = function() + require("conform").setup({ + formatters_by_ft = { + lua = { "stylua" }, + -- Conform will run multiple formatters sequentially + python = { "isort", "black" }, + -- You can customize some of the format options for the filetype (:help conform.format) + rust = { "rustfmt", lsp_format = "fallback" }, + -- Conform will run the first available formatter + javascript = { "prettierd", "prettier", stop_after_first = true }, + c = { "clang-format" }, + cpp = { "clang-format" }, + sh = { "shfmt" }, + bash = { "shfmt" }, + }, + formatters = { + ["clang-format"] = { + prepend_args = { + [[--style={ + BasedOnStyle: LLVM, + BreakBeforeBraces: Custom, + BraceWrapping: { AfterFunction: true }, + AlwaysBreakAfterReturnType: All + }]], + }, + }, + ["rustfmt"] = { + prepend_args = { + "--config", "tab_spaces=2", + "--config", "hard_tabs=false", + }, + }, + }, + default_format_opts = { + lsp_format = "fallback", + }, + }) + vim.keymap.set('n', '<leader>lf', function() + require("conform").format({ async = true }) + end, { desc = "Format buffer" }) + end +} diff --git a/.config/nvim/lua/plugins/explorer.lua b/.config/nvim/lua/plugins/explorer.lua @@ -14,14 +14,14 @@ } ]] return { - { - 'stevearc/oil.nvim', - ---@module 'oil' - ---@type oil.SetupOpts - opts = {}, - dependencies = { { "nvim-mini/mini.icons", opts = {} } }, - lazy = false, - vim.keymap.set("n", "<leader>e", "<cmd>Oil<CR>", {}), - -- vim.keymap.set("n", "<leader>bf", "<cmd>Oil --float<CR>", {}) - } + { + 'stevearc/oil.nvim', + ---@module 'oil' + ---@type oil.SetupOpts + opts = {}, + dependencies = { { "nvim-mini/mini.icons", opts = {} } }, + lazy = false, + vim.keymap.set("n", "<leader>e", "<cmd>Oil<CR>", {}), + -- vim.keymap.set("n", "<leader>bf", "<cmd>Oil --float<CR>", {}) + } } diff --git a/.config/nvim/lua/plugins/gitsigns.lua b/.config/nvim/lua/plugins/gitsigns.lua @@ -1,11 +1,11 @@ return { - { - "tpope/vim-fugitive", - }, - { - "lewis6991/gitsigns.nvim", - config = function() - require("gitsigns").setup() - end, - } + { + "tpope/vim-fugitive", + }, + { + "lewis6991/gitsigns.nvim", + config = function() + require("gitsigns").setup() + end, + } } diff --git a/.config/nvim/lua/plugins/indent.lua b/.config/nvim/lua/plugins/indent.lua @@ -1,8 +1,8 @@ return { - { - "lukas-reineke/indent-blankline.nvim", - config = function() - require("ibl").setup() - end, - } + { + "lukas-reineke/indent-blankline.nvim", + config = function() + require("ibl").setup() + end, + } } diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua @@ -1,57 +1,57 @@ return { - { - "williamboman/mason.nvim", - lazy = false, - config = function() - require("mason").setup() - end, - }, - { - "williamboman/mason-lspconfig.nvim", - lazy = false, - opts = { - auto_install = true, - ensure_installed = { "helm_ls", "dockerls" }, - }, - }, - { - "neovim/nvim-lspconfig", - lazy = false, - config = function() - local capabilities = require('cmp_nvim_lsp').default_capabilities() + { + "williamboman/mason.nvim", + lazy = false, + config = function() + require("mason").setup() + end, + }, + { + "williamboman/mason-lspconfig.nvim", + lazy = false, + opts = { + auto_install = true, + ensure_installed = { "helm_ls", "dockerls" }, + }, + }, + { + "neovim/nvim-lspconfig", + lazy = false, + config = function() + local capabilities = require('cmp_nvim_lsp').default_capabilities() - vim.lsp.enable({ - "lua_ls", "clangd", "rust_analyzer", "bashls", - "html", "cssls", "jsonls", "helm_ls", "yamlls", - "dockerfile-language-server", "tinymist", "gopls", - "pylsp" - }) + vim.lsp.enable({ + "lua_ls", "clangd", "rust_analyzer", "bashls", + "html", "cssls", "jsonls", "helm_ls", "yamlls", + "dockerfile-language-server", "tinymist", "gopls", + "pylsp" + }) - vim.lsp.config("*", { - capabilities = capabilities - }) + vim.lsp.config("*", { + capabilities = capabilities + }) - vim.diagnostic.config({ - virtual_text = { - prefix = '', - spacing = 4, - }, - signs = { - text = { - [vim.diagnostic.severity.ERROR] = '', - [vim.diagnostic.severity.WARN] = '', - }, - }, - underline = true, - update_in_insert = true, - severity_sort = true, - }) + vim.diagnostic.config({ + virtual_text = { + prefix = '', + spacing = 4, + }, + signs = { + text = { + [vim.diagnostic.severity.ERROR] = '', + [vim.diagnostic.severity.WARN] = '', + }, + }, + underline = true, + update_in_insert = true, + severity_sort = true, + }) - vim.keymap.set('n', '<leader>lf', vim.lsp.buf.format) - -- vim.keymap.set("n", "K", vim.lsp.buf.hover, {}) - -- vim.keymap.set("n", "<leader>gd", vim.lsp.buf.definition, {}) - -- vim.keymap.set("n", "<leader>gr", vim.lsp.buf.references, {}) - -- vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, {}) - end, - }, + vim.keymap.set('n', '<leader>lf', vim.lsp.buf.format) + -- vim.keymap.set("n", "K", vim.lsp.buf.hover, {}) + -- vim.keymap.set("n", "<leader>gd", vim.lsp.buf.definition, {}) + -- vim.keymap.set("n", "<leader>gr", vim.lsp.buf.references, {}) + -- vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, {}) + end, + }, } diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua @@ -1,10 +1,10 @@ return { - { - 'nvim-lualine/lualine.nvim', - dependencies = { 'nvim-mini/mini.icons' }, - config = function() - require('lualine').setup() - require("mini.icons").mock_nvim_web_devicons() - end, - } + { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-mini/mini.icons' }, + config = function() + require('lualine').setup() + require("mini.icons").mock_nvim_web_devicons() + end, + } } diff --git a/.config/nvim/lua/plugins/markdown.lua b/.config/nvim/lua/plugins/markdown.lua @@ -1,10 +1,10 @@ return { - { - "MeanderingProgrammer/render-markdown.nvim", - -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.nvim' }, -- if you use the mini.nvim suite - dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.icons' }, -- if you use standalone mini plugins - ---@module 'render-markdown' - ---@type render.md.UserConfig - opts = {} - } + { + "MeanderingProgrammer/render-markdown.nvim", + -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.nvim' }, -- if you use the mini.nvim suite + dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.icons' }, -- if you use standalone mini plugins + ---@module 'render-markdown' + ---@type render.md.UserConfig + opts = {} + } } diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua @@ -1,25 +1,25 @@ return { - { - "nvim-telescope/telescope-ui-select.nvim", - }, - { - "nvim-telescope/telescope.nvim", - tag = "0.1.9", - dependencies = { "nvim-lua/plenary.nvim" }, - config = function() - require("telescope").setup({ - extensions = { - ["ui-select"] = { - require("telescope.themes").get_dropdown({}), - }, - }, - }) - local builtin = require("telescope.builtin") - vim.keymap.set("n", "<C-p>", builtin.find_files, {}) - vim.keymap.set("n", "<leader>fg", builtin.live_grep, {}) - vim.keymap.set("n", "<leader><leader>", builtin.oldfiles, {}) + { + "nvim-telescope/telescope-ui-select.nvim", + }, + { + "nvim-telescope/telescope.nvim", + tag = "0.1.9", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + require("telescope").setup({ + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown({}), + }, + }, + }) + local builtin = require("telescope.builtin") + vim.keymap.set("n", "<C-p>", builtin.find_files, {}) + vim.keymap.set("n", "<leader>fg", builtin.live_grep, {}) + vim.keymap.set("n", "<leader><leader>", builtin.oldfiles, {}) - require("telescope").load_extension("ui-select") - end, - }, + require("telescope").load_extension("ui-select") + end, + }, } diff --git a/.config/nvim/lua/plugins/theme.lua b/.config/nvim/lua/plugins/theme.lua @@ -1,15 +1,15 @@ return { - { - "ellisonleao/gruvbox.nvim", - priority = 1000, - config = function() - require("gruvbox").setup({ - transparent_mode = true, - overrides = { - CursorLineNr = { bg = "" } - } - }) - vim.cmd.colorscheme "gruvbox" - end - } + { + "ellisonleao/gruvbox.nvim", + priority = 1000, + config = function() + require("gruvbox").setup({ + transparent_mode = true, + overrides = { + CursorLineNr = { bg = "" } + } + }) + vim.cmd.colorscheme "gruvbox" + end + } } diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua @@ -1,14 +1,14 @@ return { - { - "nvim-treesitter/nvim-treesitter", - build = ":TSUpdate", - config = function() - local config = require("nvim-treesitter.configs") - config.setup({ - auto_install = true, - highlight = { enable = true }, - indent = { enable = true }, - }) - end - } + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + local config = require("nvim-treesitter.configs") + config.setup({ + auto_install = true, + highlight = { enable = true }, + indent = { enable = true }, + }) + end + } } diff --git a/.config/nvim/lua/plugins/trim.lua b/.config/nvim/lua/plugins/trim.lua @@ -1,8 +1,8 @@ return { - { - "cappyzawa/trim.nvim", - config = function() - require('trim').setup() - end - } + { + "cappyzawa/trim.nvim", + config = function() + require('trim').setup() + end + } } diff --git a/.config/pipewire/pipewire.conf.d/user-session.conf b/.config/pipewire/pipewire.conf.d/user-session.conf @@ -1,9 +1,9 @@ context.exec = [ - { path = "/usr/bin/wireplumber" args = "" condition = [ { exec.session-manager = null } { exec.session-manager = true } ] } - { path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] } + { path = "/usr/bin/wireplumber" args = "" condition = [ { exec.session-manager = null } { exec.session-manager = true } ] } + { path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] } ] context.properties = { - default.clock.rate = 192000 - default.clock.allowed-rates = [ 44100 48000 96000 192000 ] + default.clock.rate = 192000 + default.clock.allowed-rates = [ 44100 48000 96000 192000 ] } diff --git a/.config/shell/aliasrc b/.config/shell/aliasrc @@ -6,9 +6,10 @@ [ -f "$MBSYNCRC" ] && alias mbsync="mbsync -c $MBSYNCRC" # doas not required for some system commands -for command in mount umount dinitctl pacman updatedb su shutdown poweroff reboot ; do +for command in mount umount dinitctl pacman updatedb su shutdown poweroff reboot; do alias $command="doas $command" -done; unset command +done +unset command se() { choice="$(fd . --base-directory=$HOME/.local/bin -t f --min-depth=1 | fzf)" diff --git a/.config/shell/profile b/.config/shell/profile @@ -71,15 +71,15 @@ export LESS_TERMCAP_se="$(printf '%b' '')" export LESS_TERMCAP_us="$(printf '%b' '')" export LESS_TERMCAP_ue="$(printf '%b' '')" export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" -export QT_QPA_PLATFORMTHEME="qt5ct" # Have QT use gtk3 theme. +export QT_QPA_PLATFORMTHEME="qt5ct" # Have QT use gtk3 theme. export MOZ_USE_XINPUT2=1 # Mozilla smooth scrolling/touchpads. export AWT_TOOLKIT="MToolkit wmname LG3D" # May have to install wmname export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm export LIBVA_DRIVER_NAME=nvidia export __GLX_VENDOR_LIBRARY_NAME=nvidia -export MOZ_DISABLE_RDD_SANDBOX=1 # For HW in Firefox on nvidia gpu -export ELECTRON_OZONE_PLATFORM_HINT=auto # Electron fix -export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 # Disables decorations for QT applications +export MOZ_DISABLE_RDD_SANDBOX=1 # For HW in Firefox on nvidia gpu +export ELECTRON_OZONE_PLATFORM_HINT=auto # Electron fix +export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 # Disables decorations for QT applications export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS \ --color=bg+:#3c3836 --color=bg:-1 diff --git a/.config/swayimg/key-handler b/.config/swayimg/key-handler @@ -1,35 +1,41 @@ #!/bin/sh file=$1 - [ -z "$selection" ] && selection=$(printf "w - Set as wallpaper\nc - Copy to dir\nm - Move to dir\nr - Rotate 90°\nR - Rotate -90°\nf - Flip horizontal\ny - Copy filename to clipboard\nY - Copy full path to clipboard\nd - Delete\ng - Open in GIMP\ni - Show media info" | - mew -i -l 12 -p "Choose action for selected files:") - action=$(printf "%s" "$selection" | cut -d'-' -f1 | tr -d ' ') - case "$action" in - "w") setbg "$file" & ;; - "c") - [ -z "$destdir" ] && destdir="$(sed "s/#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | mew -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")" - [ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit - cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." & - ;; - "m") - [ -z "$destdir" ] && destdir="$(sed "s/#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | mew -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")" - [ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit - mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." & - ;; - "r") - magick "$file" -rotate 90 "$file" ;; - "R") - magick "$file" -rotate -90 "$file" ;; - "f") - magick "$file" -flop "$file" ;; - "y") - printf "%s" "$file" | tr -d '\n' | wl-copy && - notify-send "$file copied to clipboard" & ;; - "Y") - readlink -f "$file" | tr -d '\n' | wl-copy && - notify-send "$(readlink -f "$file") copied to clipboard" & ;; - "d") - [ "$(printf "No\\nYes" | mew -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;; - "g") ifinstalled gimp && setsid -f gimp "$file" ;; - "i") notify-send "File information" "$(mediainfo "$file" | sed "s/[ ]\+:/:/g;s/: /: <b>/;s/$/<\/b>/" | rg "<b>")" ;; - *) notify-send "No keybind for that key" ;; - esac +[ -z "$selection" ] && selection=$(printf "w - Set as wallpaper\nc - Copy to dir\nm - Move to dir\nr - Rotate 90°\nR - Rotate -90°\nf - Flip horizontal\ny - Copy filename to clipboard\nY - Copy full path to clipboard\nd - Delete\ng - Open in GIMP\ni - Show media info" | + mew -i -l 12 -p "Choose action for selected files:") +action=$(printf "%s" "$selection" | cut -d'-' -f1 | tr -d ' ') +case "$action" in +"w") setbg "$file" & ;; +"c") + [ -z "$destdir" ] && destdir="$(sed "s/#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | mew -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")" + [ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit + cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." & + ;; +"m") + [ -z "$destdir" ] && destdir="$(sed "s/#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | mew -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")" + [ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit + mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." & + ;; +"r") + magick "$file" -rotate 90 "$file" + ;; +"R") + magick "$file" -rotate -90 "$file" + ;; +"f") + magick "$file" -flop "$file" + ;; +"y") + printf "%s" "$file" | tr -d '\n' | wl-copy && + notify-send "$file copied to clipboard" & + ;; +"Y") + readlink -f "$file" | tr -d '\n' | wl-copy && + notify-send "$(readlink -f "$file") copied to clipboard" & + ;; +"d") + [ "$(printf "No\\nYes" | mew -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." + ;; +"g") ifinstalled gimp && setsid -f gimp "$file" ;; +"i") notify-send "File information" "$(mediainfo "$file" | sed "s/[ ]\+:/:/g;s/: /: <b>/;s/$/<\/b>/" | rg "<b>")" ;; +*) notify-send "No keybind for that key" ;; +esac diff --git a/.config/yazi/init.lua b/.config/yazi/init.lua @@ -1,4 +1,4 @@ require("session"):setup { - sync_yanked = true, + sync_yanked = true, } require("git"):setup() diff --git a/.config/yazi/plugins/git.yazi/main.lua b/.config/yazi/plugins/git.yazi/main.lua @@ -7,84 +7,84 @@ local WINDOWS = ya.target_family() == "windows" -- see `bubble_up` ---@enum CODES local CODES = { - excluded = 100, -- ignored directory - ignored = 6, -- ignored file - untracked = 5, - modified = 4, - added = 3, - deleted = 2, - updated = 1, - unknown = 0, + excluded = 100, -- ignored directory + ignored = 6, -- ignored file + untracked = 5, + modified = 4, + added = 3, + deleted = 2, + updated = 1, + unknown = 0, } local PATTERNS = { - { "!$", CODES.ignored }, - { "?$", CODES.untracked }, - { "[MT]", CODES.modified }, - { "[AC]", CODES.added }, - { "D", CODES.deleted }, - { "U", CODES.updated }, - { "[AD][AD]", CODES.updated }, + { "!$", CODES.ignored }, + { "?$", CODES.untracked }, + { "[MT]", CODES.modified }, + { "[AC]", CODES.added }, + { "D", CODES.deleted }, + { "U", CODES.updated }, + { "[AD][AD]", CODES.updated }, } ---@param line string ---@return CODES, string local function match(line) - local signs = line:sub(1, 2) - for _, p in ipairs(PATTERNS) do - local path, pattern, code = nil, p[1], p[2] - if signs:find(pattern) then - path = line:sub(4, 4) == '"' and line:sub(5, -2) or line:sub(4) - path = WINDOWS and path:gsub("/", "\\") or path - end - if not path then - elseif path:find("[/\\]$") then - -- Mark the ignored directory as `excluded`, so we can process it further within `propagate_down` - return code == CODES.ignored and CODES.excluded or code, path:sub(1, -2) - else - return code, path - end - ---@diagnostic disable-next-line: missing-return - end + local signs = line:sub(1, 2) + for _, p in ipairs(PATTERNS) do + local path, pattern, code = nil, p[1], p[2] + if signs:find(pattern) then + path = line:sub(4, 4) == '"' and line:sub(5, -2) or line:sub(4) + path = WINDOWS and path:gsub("/", "\\") or path + end + if not path then + elseif path:find("[/\\]$") then + -- Mark the ignored directory as `excluded`, so we can process it further within `propagate_down` + return code == CODES.ignored and CODES.excluded or code, path:sub(1, -2) + else + return code, path + end + ---@diagnostic disable-next-line: missing-return + end end ---@param cwd Url ---@return string? local function root(cwd) - local is_worktree = function(url) - local file, head = io.open(tostring(url)), nil - if file then - head = file:read(8) - file:close() - end - return head == "gitdir: " - end + local is_worktree = function(url) + local file, head = io.open(tostring(url)), nil + if file then + head = file:read(8) + file:close() + end + return head == "gitdir: " + end - repeat - local next = cwd:join(".git") - local cha = fs.cha(next) - if cha and (cha.is_dir or is_worktree(next)) then - return tostring(cwd) - end - cwd = cwd.parent - until not cwd + repeat + local next = cwd:join(".git") + local cha = fs.cha(next) + if cha and (cha.is_dir or is_worktree(next)) then + return tostring(cwd) + end + cwd = cwd.parent + until not cwd end ---@param changed Changes ---@return Changes local function bubble_up(changed) - local new, empty = {}, Url("") - for path, code in pairs(changed) do - if code ~= CODES.ignored then - local url = Url(path).parent - while url and url ~= empty do - local s = tostring(url) - new[s] = (new[s] or CODES.unknown) > code and new[s] or code - url = url.parent - end - end - end - return new + local new, empty = {}, Url("") + for path, code in pairs(changed) do + if code ~= CODES.ignored then + local url = Url(path).parent + while url and url ~= empty do + local s = tostring(url) + new[s] = (new[s] or CODES.unknown) > code and new[s] or code + url = url.parent + end + end + end + return new end ---@param excluded string[] @@ -92,170 +92,171 @@ end ---@param repo Url ---@return Changes local function propagate_down(excluded, cwd, repo) - local new, rel = {}, cwd:strip_prefix(repo) - for _, path in ipairs(excluded) do - if rel:starts_with(path) then - -- If `cwd` is a subdirectory of an excluded directory, also mark it as `excluded` - new[tostring(cwd)] = CODES.excluded - elseif cwd == repo:join(path).parent then - -- If `path` is a direct subdirectory of `cwd`, mark it as `ignored` - new[path] = CODES.ignored - else - -- Skipping, we only care about `cwd` itself and its direct subdirectories for maximum performance - end - end - return new + local new, rel = {}, cwd:strip_prefix(repo) + for _, path in ipairs(excluded) do + if rel:starts_with(path) then + -- If `cwd` is a subdirectory of an excluded directory, also mark it as `excluded` + new[tostring(cwd)] = CODES.excluded + elseif cwd == repo:join(path).parent then + -- If `path` is a direct subdirectory of `cwd`, mark it as `ignored` + new[path] = CODES.ignored + else + -- Skipping, we only care about `cwd` itself and its direct subdirectories for maximum performance + end + end + return new end ---@param cwd string ---@param repo string ---@param changed Changes local add = ya.sync(function(st, cwd, repo, changed) - ---@cast st State + ---@cast st State - st.dirs[cwd] = repo - st.repos[repo] = st.repos[repo] or {} - for path, code in pairs(changed) do - if code == CODES.unknown then - st.repos[repo][path] = nil - elseif code == CODES.excluded then - -- Mark the directory with a special value `excluded` so that it can be distinguished during UI rendering - st.dirs[path] = CODES.excluded - else - st.repos[repo][path] = code - end - end - -- TODO: remove this - if ui.render then - ui.render() - else - ya.render() - end + st.dirs[cwd] = repo + st.repos[repo] = st.repos[repo] or {} + for path, code in pairs(changed) do + if code == CODES.unknown then + st.repos[repo][path] = nil + elseif code == CODES.excluded then + -- Mark the directory with a special value `excluded` so that it can be distinguished during UI rendering + st.dirs[path] = CODES.excluded + else + st.repos[repo][path] = code + end + end + -- TODO: remove this + if ui.render then + ui.render() + else + ya.render() + end end) ---@param cwd string local remove = ya.sync(function(st, cwd) - ---@cast st State + ---@cast st State - local repo = st.dirs[cwd] - if not repo then - return - end + local repo = st.dirs[cwd] + if not repo then + return + end - -- TODO: remove this - if ui.render then - ui.render() - else - ya.render() - end - st.dirs[cwd] = nil - if not st.repos[repo] then - return - end + -- TODO: remove this + if ui.render then + ui.render() + else + ya.render() + end + st.dirs[cwd] = nil + if not st.repos[repo] then + return + end - for _, r in pairs(st.dirs) do - if r == repo then - return - end - end - st.repos[repo] = nil + for _, r in pairs(st.dirs) do + if r == repo then + return + end + end + st.repos[repo] = nil end) ---@param st State ---@param opts Options local function setup(st, opts) - st.dirs = {} - st.repos = {} + st.dirs = {} + st.repos = {} - opts = opts or {} - opts.order = opts.order or 1500 + opts = opts or {} + opts.order = opts.order or 1500 - local t = th.git or {} - local styles = { - [CODES.ignored] = t.ignored and ui.Style(t.ignored) or ui.Style():fg("darkgray"), - [CODES.untracked] = t.untracked and ui.Style(t.untracked) or ui.Style():fg("magenta"), - [CODES.modified] = t.modified and ui.Style(t.modified) or ui.Style():fg("yellow"), - [CODES.added] = t.added and ui.Style(t.added) or ui.Style():fg("green"), - [CODES.deleted] = t.deleted and ui.Style(t.deleted) or ui.Style():fg("red"), - [CODES.updated] = t.updated and ui.Style(t.updated) or ui.Style():fg("yellow"), - } - local signs = { - [CODES.ignored] = t.ignored_sign or "", - [CODES.untracked] = t.untracked_sign or "?", - [CODES.modified] = t.modified_sign or "", - [CODES.added] = t.added_sign or "", - [CODES.deleted] = t.deleted_sign or "", - [CODES.updated] = t.updated_sign or "", - } + local t = th.git or {} + local styles = { + [CODES.ignored] = t.ignored and ui.Style(t.ignored) or ui.Style():fg("darkgray"), + [CODES.untracked] = t.untracked and ui.Style(t.untracked) or ui.Style():fg("magenta"), + [CODES.modified] = t.modified and ui.Style(t.modified) or ui.Style():fg("yellow"), + [CODES.added] = t.added and ui.Style(t.added) or ui.Style():fg("green"), + [CODES.deleted] = t.deleted and ui.Style(t.deleted) or ui.Style():fg("red"), + [CODES.updated] = t.updated and ui.Style(t.updated) or ui.Style():fg("yellow"), + } + local signs = { + [CODES.ignored] = t.ignored_sign or "", + [CODES.untracked] = t.untracked_sign or "?", + [CODES.modified] = t.modified_sign or "", + [CODES.added] = t.added_sign or "", + [CODES.deleted] = t.deleted_sign or "", + [CODES.updated] = t.updated_sign or "", + } - Linemode:children_add(function(self) - local url = self._file.url - local repo = st.dirs[tostring(url.base)] - local code - if repo then - code = repo == CODES.excluded and CODES.ignored or st.repos[repo][tostring(url):sub(#repo + 2)] - end + Linemode:children_add(function(self) + local url = self._file.url + local repo = st.dirs[tostring(url.base or url.parent)] + local code + if repo then + code = repo == CODES.excluded and CODES.ignored or st.repos[repo][tostring(url):sub(#repo + 2)] + end - if not code or signs[code] == "" then - return "" - elseif self._file.is_hovered then - return ui.Line { " ", signs[code] } - else - return ui.Line { " ", ui.Span(signs[code]):style(styles[code]) } - end - end, opts.order) + if not code or signs[code] == "" then + return "" + elseif self._file.is_hovered then + return ui.Line { " ", signs[code] } + else + return ui.Line { " ", ui.Span(signs[code]):style(styles[code]) } + end + end, opts.order) end ---@type UnstableFetcher local function fetch(_, job) - local cwd = job.files[1].url.base - local repo = root(cwd) - if not repo then - remove(tostring(cwd)) - return true - end + local cwd = job.files[1].url.base or job.files[1].url.parent + local repo = root(cwd) + if not repo then + remove(tostring(cwd)) + return true + end - local paths = {} - for _, file in ipairs(job.files) do - paths[#paths + 1] = tostring(file.url) - end + local paths = {} + for _, file in ipairs(job.files) do + paths[#paths + 1] = tostring(file.url) + end - -- stylua: ignore - local output, err = Command("git") - :cwd(tostring(cwd)) - :arg({ "--no-optional-locks", "-c", "core.quotePath=", "status", "--porcelain", "-unormal", "--no-renames", "--ignored=matching" }) - :arg(paths) - :stdout(Command.PIPED) - :output() - if not output then - return true, Err("Cannot spawn `git` command, error: %s", err) - end + -- stylua: ignore + local output, err = Command("git") + :cwd(tostring(cwd)) + :arg({ "--no-optional-locks", "-c", "core.quotePath=", "status", "--porcelain", "-unormal", "--no-renames", + "--ignored=matching" }) + :arg(paths) + :stdout(Command.PIPED) + :output() + if not output then + return true, Err("Cannot spawn `git` command, error: %s", err) + end - local changed, excluded = {}, {} - for line in output.stdout:gmatch("[^\r\n]+") do - local code, path = match(line) - if code == CODES.excluded then - excluded[#excluded + 1] = path - else - changed[path] = code - end - end + local changed, excluded = {}, {} + for line in output.stdout:gmatch("[^\r\n]+") do + local code, path = match(line) + if code == CODES.excluded then + excluded[#excluded + 1] = path + else + changed[path] = code + end + end - if job.files[1].cha.is_dir then - ya.dict_merge(changed, bubble_up(changed)) - end - ya.dict_merge(changed, propagate_down(excluded, cwd, Url(repo))) + if job.files[1].cha.is_dir then + ya.dict_merge(changed, bubble_up(changed)) + end + ya.dict_merge(changed, propagate_down(excluded, cwd, Url(repo))) - -- Reset the status of any files that don't appear in the output of `git status` to `unknown`, - -- so that cleaning up outdated statuses from `st.repos` - for _, path in ipairs(paths) do - local s = path:sub(#repo + 2) - changed[s] = changed[s] or CODES.unknown - end + -- Reset the status of any files that don't appear in the output of `git status` to `unknown`, + -- so that cleaning up outdated statuses from `st.repos` + for _, path in ipairs(paths) do + local s = path:sub(#repo + 2) + changed[s] = changed[s] or CODES.unknown + end - add(tostring(cwd), repo, changed) + add(tostring(cwd), repo, changed) - return false + return false end return { setup = setup, fetch = fetch } diff --git a/.config/yazi/theme.toml b/.config/yazi/theme.toml @@ -5,702 +5,702 @@ dark = "gruvbox-dark" [icon] files = [ - { name = ".babelrc", text = "", fg = "#fabd2f" }, - { name = ".bash_profile", text = "", fg = "#98971a" }, - { name = ".bashrc", text = "", fg = "#98971a" }, - { name = ".clang-format", text = "", fg = "#928374" }, - { name = ".clang-tidy", text = "", fg = "#928374" }, - { name = ".codespellrc", text = "󰓆", fg = "#b8bb26" }, - { name = ".condarc", text = "", fg = "#b8bb26" }, - { name = ".dockerignore", text = "󰡨", fg = "#458588" }, - { name = ".ds_store", text = "", fg = "#928374" }, - { name = ".editorconfig", text = "", fg = "#a89984" }, - { name = ".env", text = "", fg = "#d79921" }, - { name = ".eslintignore", text = "", fg = "#b16286" }, - { name = ".eslintrc", text = "", fg = "#b16286" }, - { name = ".git-blame-ignore-revs", text = "", fg = "#cc241d" }, - { name = ".gitattributes", text = "", fg = "#cc241d" }, - { name = ".gitconfig", text = "", fg = "#cc241d" }, - { name = ".gitignore", text = "", fg = "#cc241d" }, - { name = ".gitlab-ci.yml", text = "", fg = "#cc241d" }, - { name = ".gitmodules", text = "", fg = "#cc241d" }, - { name = ".gtkrc-2.0", text = "", fg = "#8ec07c" }, - { name = ".gvimrc", text = "", fg = "#98971a" }, - { name = ".justfile", text = "", fg = "#928374" }, - { name = ".luacheckrc", text = "", fg = "#458588" }, - { name = ".luaurc", text = "", fg = "#458588" }, - { name = ".mailmap", text = "󰊢", fg = "#cc241d" }, - { name = ".nanorc", text = "", fg = "#b16286" }, - { name = ".npmignore", text = "", fg = "#b16286" }, - { name = ".npmrc", text = "", fg = "#b16286" }, - { name = ".nuxtrc", text = "󱄆", fg = "#b8bb26" }, - { name = ".nvmrc", text = "", fg = "#b8bb26" }, - { name = ".pnpmfile.cjs", text = "", fg = "#d79921" }, - { name = ".pre-commit-config.yaml", text = "󰛢", fg = "#d79921" }, - { name = ".prettierignore", text = "", fg = "#83a598" }, - { name = ".prettierrc", text = "", fg = "#83a598" }, - { name = ".prettierrc.cjs", text = "", fg = "#83a598" }, - { name = ".prettierrc.js", text = "", fg = "#83a598" }, - { name = ".prettierrc.json", text = "", fg = "#83a598" }, - { name = ".prettierrc.json5", text = "", fg = "#83a598" }, - { name = ".prettierrc.mjs", text = "", fg = "#83a598" }, - { name = ".prettierrc.toml", text = "", fg = "#83a598" }, - { name = ".prettierrc.yaml", text = "", fg = "#83a598" }, - { name = ".prettierrc.yml", text = "", fg = "#83a598" }, - { name = ".pylintrc", text = "", fg = "#928374" }, - { name = ".settings.json", text = "", fg = "#b16286" }, - { name = ".SRCINFO", text = "󰣇", fg = "#8ec07c" }, - { name = ".vimrc", text = "", fg = "#98971a" }, - { name = ".Xauthority", text = "", fg = "#cc241d" }, - { name = ".xinitrc", text = "", fg = "#cc241d" }, - { name = ".Xresources", text = "", fg = "#cc241d" }, - { name = ".xsession", text = "", fg = "#cc241d" }, - { name = ".zprofile", text = "", fg = "#98971a" }, - { name = ".zshenv", text = "", fg = "#98971a" }, - { name = ".zshrc", text = "", fg = "#98971a" }, - { name = "_gvimrc", text = "", fg = "#98971a" }, - { name = "_vimrc", text = "", fg = "#98971a" }, - { name = "AUTHORS", text = "", fg = "#b16286" }, - { name = "AUTHORS.txt", text = "", fg = "#b16286" }, - { name = "brewfile", text = "", fg = "#cc241d" }, - { name = "bspwmrc", text = "", fg = "#928374" }, - { name = "build", text = "", fg = "#98971a" }, - { name = "build.gradle", text = "", fg = "#458588" }, - { name = "build.zig.zon", text = "", fg = "#d79921" }, - { name = "bun.lock", text = "", fg = "#a89984" }, - { name = "bun.lockb", text = "", fg = "#a89984" }, - { name = "cantorrc", text = "", fg = "#83a598" }, - { name = "checkhealth", text = "󰓙", fg = "#458588" }, - { name = "cmakelists.txt", text = "", fg = "#a89984" }, - { name = "code_of_conduct", text = "", fg = "#b16286" }, - { name = "code_of_conduct.md", text = "", fg = "#b16286" }, - { name = "commit_editmsg", text = "", fg = "#cc241d" }, - { name = "commitlint.config.js", text = "󰜘", fg = "#689d6a" }, - { name = "commitlint.config.ts", text = "󰜘", fg = "#689d6a" }, - { name = "compose.yaml", text = "󰡨", fg = "#458588" }, - { name = "compose.yml", text = "󰡨", fg = "#458588" }, - { name = "config", text = "", fg = "#928374" }, - { name = "containerfile", text = "󰡨", fg = "#458588" }, - { name = "copying", text = "", fg = "#fabd2f" }, - { name = "copying.lesser", text = "", fg = "#fabd2f" }, - { name = "Directory.Build.props", text = "", fg = "#458588" }, - { name = "Directory.Build.targets", text = "", fg = "#458588" }, - { name = "Directory.Packages.props", text = "", fg = "#458588" }, - { name = "docker-compose.yaml", text = "󰡨", fg = "#458588" }, - { name = "docker-compose.yml", text = "󰡨", fg = "#458588" }, - { name = "dockerfile", text = "󰡨", fg = "#458588" }, - { name = "eslint.config.cjs", text = "", fg = "#b16286" }, - { name = "eslint.config.js", text = "", fg = "#b16286" }, - { name = "eslint.config.mjs", text = "", fg = "#b16286" }, - { name = "eslint.config.ts", text = "", fg = "#b16286" }, - { name = "ext_typoscript_setup.txt", text = "", fg = "#d79921" }, - { name = "favicon.ico", text = "", fg = "#fabd2f" }, - { name = "fp-info-cache", text = "", fg = "#8ec07c" }, - { name = "fp-lib-table", text = "", fg = "#8ec07c" }, - { name = "FreeCAD.conf", text = "", fg = "#cc241d" }, - { name = "Gemfile", text = "", fg = "#cc241d" }, - { name = "gnumakefile", text = "", fg = "#928374" }, - { name = "go.mod", text = "", fg = "#8ec07c" }, - { name = "go.sum", text = "", fg = "#8ec07c" }, - { name = "go.work", text = "", fg = "#8ec07c" }, - { name = "gradle-wrapper.properties", text = "", fg = "#458588" }, - { name = "gradle.properties", text = "", fg = "#458588" }, - { name = "gradlew", text = "", fg = "#458588" }, - { name = "groovy", text = "", fg = "#458588" }, - { name = "gruntfile.babel.js", text = "", fg = "#d79921" }, - { name = "gruntfile.coffee", text = "", fg = "#d79921" }, - { name = "gruntfile.js", text = "", fg = "#d79921" }, - { name = "gruntfile.ts", text = "", fg = "#d79921" }, - { name = "gtkrc", text = "", fg = "#8ec07c" }, - { name = "gulpfile.babel.js", text = "", fg = "#fb4934" }, - { name = "gulpfile.coffee", text = "", fg = "#fb4934" }, - { name = "gulpfile.js", text = "", fg = "#fb4934" }, - { name = "gulpfile.ts", text = "", fg = "#fb4934" }, - { name = "hypridle.conf", text = "", fg = "#8ec07c" }, - { name = "hyprland.conf", text = "", fg = "#8ec07c" }, - { name = "hyprlandd.conf", text = "", fg = "#8ec07c" }, - { name = "hyprlock.conf", text = "", fg = "#8ec07c" }, - { name = "hyprpaper.conf", text = "", fg = "#8ec07c" }, - { name = "hyprsunset.conf", text = "", fg = "#8ec07c" }, - { name = "i18n.config.js", text = "󰗊", fg = "#b16286" }, - { name = "i18n.config.ts", text = "󰗊", fg = "#b16286" }, - { name = "i3blocks.conf", text = "", fg = "#a89984" }, - { name = "i3status.conf", text = "", fg = "#a89984" }, - { name = "index.theme", text = "", fg = "#b8bb26" }, - { name = "ionic.config.json", text = "", fg = "#83a598" }, - { name = "Jenkinsfile", text = "", fg = "#cc241d" }, - { name = "justfile", text = "", fg = "#928374" }, - { name = "kalgebrarc", text = "", fg = "#83a598" }, - { name = "kdeglobals", text = "", fg = "#83a598" }, - { name = "kdenlive-layoutsrc", text = "", fg = "#689d6a" }, - { name = "kdenliverc", text = "", fg = "#689d6a" }, - { name = "kritadisplayrc", text = "", fg = "#d3869b" }, - { name = "kritarc", text = "", fg = "#d3869b" }, - { name = "license", text = "", fg = "#fabd2f" }, - { name = "license.md", text = "", fg = "#fabd2f" }, - { name = "lxde-rc.xml", text = "", fg = "#a89984" }, - { name = "lxqt.conf", text = "", fg = "#83a598" }, - { name = "makefile", text = "", fg = "#928374" }, - { name = "mix.lock", text = "", fg = "#d3869b" }, - { name = "mpv.conf", text = "", fg = "#b16286" }, - { name = "next.config.cjs", text = "", fg = "#8ec07c" }, - { name = "next.config.js", text = "", fg = "#8ec07c" }, - { name = "next.config.ts", text = "", fg = "#8ec07c" }, - { name = "node_modules", text = "", fg = "#b16286" }, - { name = "nuxt.config.cjs", text = "󱄆", fg = "#b8bb26" }, - { name = "nuxt.config.js", text = "󱄆", fg = "#b8bb26" }, - { name = "nuxt.config.mjs", text = "󱄆", fg = "#b8bb26" }, - { name = "nuxt.config.ts", text = "󱄆", fg = "#b8bb26" }, - { name = "package-lock.json", text = "", fg = "#cc241d" }, - { name = "package.json", text = "", fg = "#b16286" }, - { name = "PKGBUILD", text = "", fg = "#8ec07c" }, - { name = "platformio.ini", text = "", fg = "#d79921" }, - { name = "playwright.config.cjs", text = "", fg = "#b8bb26" }, - { name = "playwright.config.cts", text = "", fg = "#b8bb26" }, - { name = "playwright.config.js", text = "", fg = "#b8bb26" }, - { name = "playwright.config.mjs", text = "", fg = "#b8bb26" }, - { name = "playwright.config.mts", text = "", fg = "#b8bb26" }, - { name = "playwright.config.ts", text = "", fg = "#b8bb26" }, - { name = "pnpm-lock.yaml", text = "", fg = "#d79921" }, - { name = "pnpm-workspace.yaml", text = "", fg = "#d79921" }, - { name = "pom.xml", text = "", fg = "#cc241d" }, - { name = "prettier.config.cjs", text = "", fg = "#83a598" }, - { name = "prettier.config.js", text = "", fg = "#83a598" }, - { name = "prettier.config.mjs", text = "", fg = "#83a598" }, - { name = "prettier.config.ts", text = "", fg = "#83a598" }, - { name = "procfile", text = "", fg = "#d3869b" }, - { name = "PrusaSlicer.ini", text = "", fg = "#cc241d" }, - { name = "PrusaSlicerGcodeViewer.ini", text = "", fg = "#cc241d" }, - { name = "py.typed", text = "", fg = "#d79921" }, - { name = "QtProject.conf", text = "", fg = "#98971a" }, - { name = "rakefile", text = "", fg = "#cc241d" }, - { name = "readme", text = "󰂺", fg = "#a89984" }, - { name = "readme.md", text = "󰂺", fg = "#a89984" }, - { name = "rmd", text = "", fg = "#83a598" }, - { name = "robots.txt", text = "󰚩", fg = "#b16286" }, - { name = "security", text = "󰒃", fg = "#a89984" }, - { name = "security.md", text = "󰒃", fg = "#a89984" }, - { name = "settings.gradle", text = "", fg = "#458588" }, - { name = "svelte.config.js", text = "", fg = "#cc241d" }, - { name = "sxhkdrc", text = "", fg = "#928374" }, - { name = "sym-lib-table", text = "", fg = "#8ec07c" }, - { name = "tailwind.config.js", text = "󱏿", fg = "#8ec07c" }, - { name = "tailwind.config.mjs", text = "󱏿", fg = "#8ec07c" }, - { name = "tailwind.config.ts", text = "󱏿", fg = "#8ec07c" }, - { name = "tmux.conf", text = "", fg = "#b8bb26" }, - { name = "tmux.conf.local", text = "", fg = "#b8bb26" }, - { name = "tsconfig.json", text = "", fg = "#83a598" }, - { name = "unlicense", text = "", fg = "#fabd2f" }, - { name = "vagrantfile", text = "", fg = "#458588" }, - { name = "vercel.json", text = "", fg = "#8ec07c" }, - { name = "vite.config.cjs", text = "", fg = "#d79921" }, - { name = "vite.config.cts", text = "", fg = "#d79921" }, - { name = "vite.config.js", text = "", fg = "#d79921" }, - { name = "vite.config.mjs", text = "", fg = "#d79921" }, - { name = "vite.config.mts", text = "", fg = "#d79921" }, - { name = "vite.config.ts", text = "", fg = "#d79921" }, - { name = "vitest.config.cjs", text = "", fg = "#d79921" }, - { name = "vitest.config.cts", text = "", fg = "#d79921" }, - { name = "vitest.config.js", text = "", fg = "#d79921" }, - { name = "vitest.config.mjs", text = "", fg = "#d79921" }, - { name = "vitest.config.mts", text = "", fg = "#d79921" }, - { name = "vitest.config.ts", text = "", fg = "#d79921" }, - { name = "vlcrc", text = "󰕼", fg = "#d79921" }, - { name = "webpack", text = "󰜫", fg = "#83a598" }, - { name = "weston.ini", text = "", fg = "#d79921" }, - { name = "workspace", text = "", fg = "#98971a" }, - { name = "wrangler.jsonc", text = "", fg = "#d79921" }, - { name = "wrangler.toml", text = "", fg = "#d79921" }, - { name = "xdph.conf", text = "", fg = "#8ec07c" }, - { name = "xmobarrc", text = "", fg = "#fb4934" }, - { name = "xmobarrc.hs", text = "", fg = "#fb4934" }, - { name = "xmonad.hs", text = "", fg = "#fb4934" }, - { name = "xorg.conf", text = "", fg = "#cc241d" }, - { name = "xsettingsd.conf", text = "", fg = "#cc241d" }, -] -exts = [ - { name = "3gp", text = "", fg = "#d79921" }, - { name = "3mf", text = "󰆧", fg = "#d3869b" }, - { name = "7z", text = "", fg = "#d79921" }, - { name = "a", text = "", fg = "#a89984" }, - { name = "aac", text = "", fg = "#83a598" }, - { name = "ada", text = "", fg = "#458588" }, - { name = "adb", text = "", fg = "#458588" }, - { name = "ads", text = "", fg = "#d3869b" }, - { name = "ai", text = "", fg = "#fabd2f" }, - { name = "aif", text = "", fg = "#83a598" }, - { name = "aiff", text = "", fg = "#83a598" }, - { name = "android", text = "", fg = "#b8bb26" }, - { name = "ape", text = "", fg = "#83a598" }, - { name = "apk", text = "", fg = "#b8bb26" }, - { name = "apl", text = "", fg = "#b8bb26" }, - { name = "app", text = "", fg = "#cc241d" }, - { name = "applescript", text = "", fg = "#928374" }, - { name = "asc", text = "󰦝", fg = "#928374" }, - { name = "asm", text = "", fg = "#83a598" }, - { name = "ass", text = "󰨖", fg = "#d79921" }, - { name = "astro", text = "", fg = "#b16286" }, - { name = "avif", text = "", fg = "#d3869b" }, - { name = "awk", text = "", fg = "#928374" }, - { name = "azcli", text = "", fg = "#83a598" }, - { name = "bak", text = "󰁯", fg = "#928374" }, - { name = "bash", text = "", fg = "#98971a" }, - { name = "bat", text = "", fg = "#b8bb26" }, - { name = "bazel", text = "", fg = "#98971a" }, - { name = "bib", text = "󱉟", fg = "#fabd2f" }, - { name = "bicep", text = "", fg = "#83a598" }, - { name = "bicepparam", text = "", fg = "#d3869b" }, - { name = "bin", text = "", fg = "#cc241d" }, - { name = "blade.php", text = "", fg = "#fb4934" }, - { name = "blend", text = "󰂫", fg = "#d79921" }, - { name = "blp", text = "󰺾", fg = "#458588" }, - { name = "bmp", text = "", fg = "#d3869b" }, - { name = "bqn", text = "", fg = "#b8bb26" }, - { name = "brep", text = "󰻫", fg = "#d79921" }, - { name = "bz", text = "", fg = "#d79921" }, - { name = "bz2", text = "", fg = "#d79921" }, - { name = "bz3", text = "", fg = "#d79921" }, - { name = "bzl", text = "", fg = "#98971a" }, - { name = "c", text = "", fg = "#458588" }, - { name = "c++", text = "", fg = "#fb4934" }, - { name = "cache", text = "", fg = "#8ec07c" }, - { name = "cast", text = "", fg = "#d79921" }, - { name = "cbl", text = "", fg = "#458588" }, - { name = "cc", text = "", fg = "#fb4934" }, - { name = "ccm", text = "", fg = "#fb4934" }, - { name = "cfc", text = "", fg = "#8ec07c" }, - { name = "cfg", text = "", fg = "#928374" }, - { name = "cfm", text = "", fg = "#8ec07c" }, - { name = "cjs", text = "", fg = "#fabd2f" }, - { name = "clj", text = "", fg = "#98971a" }, - { name = "cljc", text = "", fg = "#98971a" }, - { name = "cljd", text = "", fg = "#83a598" }, - { name = "cljs", text = "", fg = "#83a598" }, - { name = "cmake", text = "", fg = "#a89984" }, - { name = "cob", text = "", fg = "#458588" }, - { name = "cobol", text = "", fg = "#458588" }, - { name = "coffee", text = "", fg = "#fabd2f" }, - { name = "conda", text = "", fg = "#b8bb26" }, - { name = "conf", text = "", fg = "#928374" }, - { name = "config.ru", text = "", fg = "#cc241d" }, - { name = "cow", text = "󰆚", fg = "#d79921" }, - { name = "cp", text = "", fg = "#83a598" }, - { name = "cpp", text = "", fg = "#83a598" }, - { name = "cppm", text = "", fg = "#83a598" }, - { name = "cpy", text = "", fg = "#458588" }, - { name = "cr", text = "", fg = "#a89984" }, - { name = "crdownload", text = "", fg = "#8ec07c" }, - { name = "cs", text = "󰌛", fg = "#d79921" }, - { name = "csh", text = "", fg = "#928374" }, - { name = "cshtml", text = "󱦗", fg = "#b16286" }, - { name = "cson", text = "", fg = "#fabd2f" }, - { name = "csproj", text = "󰪮", fg = "#b16286" }, - { name = "css", text = "", fg = "#b16286" }, - { name = "csv", text = "", fg = "#98971a" }, - { name = "cts", text = "", fg = "#83a598" }, - { name = "cu", text = "", fg = "#98971a" }, - { name = "cue", text = "󰲹", fg = "#d3869b" }, - { name = "cuh", text = "", fg = "#d3869b" }, - { name = "cxx", text = "", fg = "#83a598" }, - { name = "cxxm", text = "", fg = "#83a598" }, - { name = "d", text = "", fg = "#cc241d" }, - { name = "d.ts", text = "", fg = "#d79921" }, - { name = "dart", text = "", fg = "#458588" }, - { name = "db", text = "", fg = "#8ec07c" }, - { name = "dconf", text = "", fg = "#8ec07c" }, - { name = "desktop", text = "", fg = "#b16286" }, - { name = "diff", text = "", fg = "#928374" }, - { name = "dll", text = "", fg = "#cc241d" }, - { name = "doc", text = "󰈬", fg = "#458588" }, - { name = "Dockerfile", text = "󰡨", fg = "#458588" }, - { name = "dockerignore", text = "󰡨", fg = "#458588" }, - { name = "docx", text = "󰈬", fg = "#458588" }, - { name = "dot", text = "󱁉", fg = "#458588" }, - { name = "download", text = "", fg = "#8ec07c" }, - { name = "drl", text = "", fg = "#cc241d" }, - { name = "dropbox", text = "", fg = "#458588" }, - { name = "dump", text = "", fg = "#8ec07c" }, - { name = "dwg", text = "󰻫", fg = "#d79921" }, - { name = "dxf", text = "󰻫", fg = "#d79921" }, - { name = "ebook", text = "", fg = "#d79921" }, - { name = "ebuild", text = "", fg = "#b16286" }, - { name = "edn", text = "", fg = "#83a598" }, - { name = "eex", text = "", fg = "#d3869b" }, - { name = "ejs", text = "", fg = "#fabd2f" }, - { name = "el", text = "", fg = "#b16286" }, - { name = "elc", text = "", fg = "#b16286" }, - { name = "elf", text = "", fg = "#cc241d" }, - { name = "elm", text = "", fg = "#83a598" }, - { name = "eln", text = "", fg = "#b16286" }, - { name = "env", text = "", fg = "#d79921" }, - { name = "eot", text = "", fg = "#a89984" }, - { name = "epp", text = "", fg = "#d79921" }, - { name = "epub", text = "", fg = "#d79921" }, - { name = "erb", text = "", fg = "#cc241d" }, - { name = "erl", text = "", fg = "#b16286" }, - { name = "ex", text = "", fg = "#d3869b" }, - { name = "exe", text = "", fg = "#cc241d" }, - { name = "exs", text = "", fg = "#d3869b" }, - { name = "f#", text = "", fg = "#83a598" }, - { name = "f3d", text = "󰻫", fg = "#d79921" }, - { name = "f90", text = "󱈚", fg = "#b16286" }, - { name = "fbx", text = "󰆧", fg = "#d3869b" }, - { name = "fcbak", text = "", fg = "#cc241d" }, - { name = "fcmacro", text = "", fg = "#cc241d" }, - { name = "fcmat", text = "", fg = "#cc241d" }, - { name = "fcparam", text = "", fg = "#cc241d" }, - { name = "fcscript", text = "", fg = "#cc241d" }, - { name = "fcstd", text = "", fg = "#cc241d" }, - { name = "fcstd1", text = "", fg = "#cc241d" }, - { name = "fctb", text = "", fg = "#cc241d" }, - { name = "fctl", text = "", fg = "#cc241d" }, - { name = "fdmdownload", text = "", fg = "#8ec07c" }, - { name = "feature", text = "", fg = "#b8bb26" }, - { name = "fish", text = "", fg = "#928374" }, - { name = "flac", text = "", fg = "#458588" }, - { name = "flc", text = "", fg = "#a89984" }, - { name = "flf", text = "", fg = "#a89984" }, - { name = "fnl", text = "", fg = "#fabd2f" }, - { name = "fodg", text = "", fg = "#d79921" }, - { name = "fodp", text = "", fg = "#d79921" }, - { name = "fods", text = "", fg = "#b8bb26" }, - { name = "fodt", text = "", fg = "#458588" }, - { name = "frag", text = "", fg = "#8ec07c" }, - { name = "fs", text = "", fg = "#83a598" }, - { name = "fsi", text = "", fg = "#83a598" }, - { name = "fsscript", text = "", fg = "#83a598" }, - { name = "fsx", text = "", fg = "#83a598" }, - { name = "gcode", text = "󰐫", fg = "#83a598" }, - { name = "gd", text = "", fg = "#928374" }, - { name = "gemspec", text = "", fg = "#cc241d" }, - { name = "geom", text = "", fg = "#8ec07c" }, - { name = "gif", text = "", fg = "#d3869b" }, - { name = "git", text = "", fg = "#cc241d" }, - { name = "glb", text = "", fg = "#d79921" }, - { name = "gleam", text = "", fg = "#d3869b" }, - { name = "glsl", text = "", fg = "#8ec07c" }, - { name = "gnumakefile", text = "", fg = "#928374" }, - { name = "go", text = "", fg = "#8ec07c" }, - { name = "godot", text = "", fg = "#928374" }, - { name = "gpr", text = "", fg = "#928374" }, - { name = "gql", text = "", fg = "#d3869b" }, - { name = "gradle", text = "", fg = "#458588" }, - { name = "graphql", text = "", fg = "#d3869b" }, - { name = "gresource", text = "", fg = "#8ec07c" }, - { name = "gv", text = "󱁉", fg = "#458588" }, - { name = "gz", text = "", fg = "#d79921" }, - { name = "h", text = "", fg = "#d3869b" }, - { name = "haml", text = "", fg = "#a89984" }, - { name = "hbs", text = "", fg = "#cc241d" }, - { name = "heex", text = "", fg = "#d3869b" }, - { name = "hex", text = "", fg = "#458588" }, - { name = "hh", text = "", fg = "#d3869b" }, - { name = "hpp", text = "", fg = "#d3869b" }, - { name = "hrl", text = "", fg = "#b16286" }, - { name = "hs", text = "", fg = "#d3869b" }, - { name = "htm", text = "", fg = "#cc241d" }, - { name = "html", text = "", fg = "#cc241d" }, - { name = "http", text = "", fg = "#83a598" }, - { name = "huff", text = "󰡘", fg = "#b16286" }, - { name = "hurl", text = "", fg = "#d3869b" }, - { name = "hx", text = "", fg = "#d79921" }, - { name = "hxx", text = "", fg = "#d3869b" }, - { name = "ical", text = "", fg = "#458588" }, - { name = "icalendar", text = "", fg = "#458588" }, - { name = "ico", text = "", fg = "#fabd2f" }, - { name = "ics", text = "", fg = "#458588" }, - { name = "ifb", text = "", fg = "#458588" }, - { name = "ifc", text = "󰻫", fg = "#d79921" }, - { name = "ige", text = "󰻫", fg = "#d79921" }, - { name = "iges", text = "󰻫", fg = "#d79921" }, - { name = "igs", text = "󰻫", fg = "#d79921" }, - { name = "image", text = "", fg = "#fb4934" }, - { name = "img", text = "", fg = "#fb4934" }, - { name = "import", text = "", fg = "#a89984" }, - { name = "info", text = "", fg = "#fabd2f" }, - { name = "ini", text = "", fg = "#928374" }, - { name = "ino", text = "", fg = "#689d6a" }, - { name = "ipynb", text = "", fg = "#d79921" }, - { name = "iso", text = "", fg = "#fb4934" }, - { name = "ixx", text = "", fg = "#83a598" }, - { name = "jar", text = "", fg = "#d79921" }, - { name = "java", text = "", fg = "#fb4934" }, - { name = "jl", text = "", fg = "#d3869b" }, - { name = "jpeg", text = "", fg = "#d3869b" }, - { name = "jpg", text = "", fg = "#d3869b" }, - { name = "js", text = "", fg = "#fabd2f" }, - { name = "json", text = "", fg = "#fabd2f" }, - { name = "json5", text = "", fg = "#fabd2f" }, - { name = "jsonc", text = "", fg = "#fabd2f" }, - { name = "jsx", text = "", fg = "#8ec07c" }, - { name = "jwmrc", text = "", fg = "#83a598" }, - { name = "jxl", text = "", fg = "#d3869b" }, - { name = "kbx", text = "󰯄", fg = "#928374" }, - { name = "kdb", text = "", fg = "#b8bb26" }, - { name = "kdbx", text = "", fg = "#b8bb26" }, - { name = "kdenlive", text = "", fg = "#689d6a" }, - { name = "kdenlivetitle", text = "", fg = "#689d6a" }, - { name = "kicad_dru", text = "", fg = "#8ec07c" }, - { name = "kicad_mod", text = "", fg = "#8ec07c" }, - { name = "kicad_pcb", text = "", fg = "#8ec07c" }, - { name = "kicad_prl", text = "", fg = "#8ec07c" }, - { name = "kicad_pro", text = "", fg = "#8ec07c" }, - { name = "kicad_sch", text = "", fg = "#8ec07c" }, - { name = "kicad_sym", text = "", fg = "#8ec07c" }, - { name = "kicad_wks", text = "", fg = "#8ec07c" }, - { name = "ko", text = "", fg = "#a89984" }, - { name = "kpp", text = "", fg = "#d3869b" }, - { name = "kra", text = "", fg = "#d3869b" }, - { name = "krz", text = "", fg = "#d3869b" }, - { name = "ksh", text = "", fg = "#928374" }, - { name = "kt", text = "", fg = "#458588" }, - { name = "kts", text = "", fg = "#458588" }, - { name = "lck", text = "", fg = "#a89984" }, - { name = "leex", text = "", fg = "#d3869b" }, - { name = "less", text = "", fg = "#b16286" }, - { name = "lff", text = "", fg = "#a89984" }, - { name = "lhs", text = "", fg = "#d3869b" }, - { name = "lib", text = "", fg = "#cc241d" }, - { name = "license", text = "", fg = "#fabd2f" }, - { name = "liquid", text = "", fg = "#d79921" }, - { name = "lock", text = "", fg = "#a89984" }, - { name = "log", text = "󰌱", fg = "#a89984" }, - { name = "lrc", text = "󰨖", fg = "#d79921" }, - { name = "lua", text = "", fg = "#83a598" }, - { name = "luac", text = "", fg = "#83a598" }, - { name = "luau", text = "", fg = "#458588" }, - { name = "m", text = "", fg = "#458588" }, - { name = "m3u", text = "󰲹", fg = "#d3869b" }, - { name = "m3u8", text = "󰲹", fg = "#d3869b" }, - { name = "m4a", text = "", fg = "#83a598" }, - { name = "m4v", text = "", fg = "#d79921" }, - { name = "magnet", text = "", fg = "#cc241d" }, - { name = "makefile", text = "", fg = "#928374" }, - { name = "markdown", text = "", fg = "#a89984" }, - { name = "material", text = "", fg = "#b16286" }, - { name = "md", text = "", fg = "#a89984" }, - { name = "md5", text = "󰕥", fg = "#d3869b" }, - { name = "mdx", text = "", fg = "#83a598" }, - { name = "mint", text = "󰌪", fg = "#98971a" }, - { name = "mjs", text = "", fg = "#fabd2f" }, - { name = "mk", text = "", fg = "#928374" }, - { name = "mkv", text = "", fg = "#d79921" }, - { name = "ml", text = "", fg = "#d79921" }, - { name = "mli", text = "", fg = "#d79921" }, - { name = "mm", text = "", fg = "#83a598" }, - { name = "mo", text = "", fg = "#b16286" }, - { name = "mobi", text = "", fg = "#d79921" }, - { name = "mojo", text = "", fg = "#cc241d" }, - { name = "mov", text = "", fg = "#d79921" }, - { name = "mp3", text = "", fg = "#83a598" }, - { name = "mp4", text = "", fg = "#d79921" }, - { name = "mpp", text = "", fg = "#83a598" }, - { name = "msf", text = "", fg = "#83a598" }, - { name = "mts", text = "", fg = "#83a598" }, - { name = "mustache", text = "", fg = "#d79921" }, - { name = "nfo", text = "", fg = "#fabd2f" }, - { name = "nim", text = "", fg = "#d79921" }, - { name = "nix", text = "", fg = "#689d6a" }, - { name = "norg", text = "", fg = "#83a598" }, - { name = "nswag", text = "", fg = "#98971a" }, - { name = "nu", text = "", fg = "#689d6a" }, - { name = "o", text = "", fg = "#cc241d" }, - { name = "obj", text = "󰆧", fg = "#d3869b" }, - { name = "odf", text = "", fg = "#fb4934" }, - { name = "odg", text = "", fg = "#d79921" }, - { name = "odin", text = "󰟢", fg = "#83a598" }, - { name = "odp", text = "", fg = "#d79921" }, - { name = "ods", text = "", fg = "#b8bb26" }, - { name = "odt", text = "", fg = "#458588" }, - { name = "oga", text = "", fg = "#458588" }, - { name = "ogg", text = "", fg = "#458588" }, - { name = "ogv", text = "", fg = "#d79921" }, - { name = "ogx", text = "", fg = "#d79921" }, - { name = "opus", text = "", fg = "#458588" }, - { name = "org", text = "", fg = "#689d6a" }, - { name = "otf", text = "", fg = "#a89984" }, - { name = "out", text = "", fg = "#cc241d" }, - { name = "part", text = "", fg = "#8ec07c" }, - { name = "patch", text = "", fg = "#928374" }, - { name = "pck", text = "", fg = "#928374" }, - { name = "pcm", text = "", fg = "#458588" }, - { name = "pdf", text = "", fg = "#cc241d" }, - { name = "php", text = "", fg = "#d3869b" }, - { name = "pl", text = "", fg = "#83a598" }, - { name = "pls", text = "󰲹", fg = "#d3869b" }, - { name = "ply", text = "󰆧", fg = "#d3869b" }, - { name = "pm", text = "", fg = "#83a598" }, - { name = "png", text = "", fg = "#d3869b" }, - { name = "po", text = "", fg = "#83a598" }, - { name = "pot", text = "", fg = "#83a598" }, - { name = "pp", text = "", fg = "#d79921" }, - { name = "ppt", text = "󰈧", fg = "#cc241d" }, - { name = "pptx", text = "󰈧", fg = "#cc241d" }, - { name = "prisma", text = "", fg = "#458588" }, - { name = "pro", text = "", fg = "#fabd2f" }, - { name = "ps1", text = "󰨊", fg = "#458588" }, - { name = "psb", text = "", fg = "#83a598" }, - { name = "psd", text = "", fg = "#83a598" }, - { name = "psd1", text = "󰨊", fg = "#458588" }, - { name = "psm1", text = "󰨊", fg = "#458588" }, - { name = "pub", text = "󰷖", fg = "#fabd2f" }, - { name = "pxd", text = "", fg = "#83a598" }, - { name = "pxi", text = "", fg = "#83a598" }, - { name = "py", text = "", fg = "#d79921" }, - { name = "pyc", text = "", fg = "#fabd2f" }, - { name = "pyd", text = "", fg = "#fabd2f" }, - { name = "pyi", text = "", fg = "#d79921" }, - { name = "pyo", text = "", fg = "#fabd2f" }, - { name = "pyw", text = "", fg = "#83a598" }, - { name = "pyx", text = "", fg = "#83a598" }, - { name = "qm", text = "", fg = "#83a598" }, - { name = "qml", text = "", fg = "#98971a" }, - { name = "qrc", text = "", fg = "#98971a" }, - { name = "qss", text = "", fg = "#98971a" }, - { name = "query", text = "", fg = "#98971a" }, - { name = "r", text = "󰟔", fg = "#458588" }, - { name = "R", text = "󰟔", fg = "#458588" }, - { name = "rake", text = "", fg = "#cc241d" }, - { name = "rar", text = "", fg = "#d79921" }, - { name = "rasi", text = "", fg = "#fabd2f" }, - { name = "razor", text = "󱦘", fg = "#b16286" }, - { name = "rb", text = "", fg = "#cc241d" }, - { name = "res", text = "", fg = "#fb4934" }, - { name = "resi", text = "", fg = "#fb4934" }, - { name = "rlib", text = "", fg = "#fb4934" }, - { name = "rmd", text = "", fg = "#83a598" }, - { name = "rproj", text = "󰗆", fg = "#98971a" }, - { name = "rs", text = "", fg = "#fb4934" }, - { name = "rss", text = "", fg = "#d79921" }, - { name = "s", text = "", fg = "#458588" }, - { name = "sass", text = "", fg = "#fb4934" }, - { name = "sbt", text = "", fg = "#fb4934" }, - { name = "sc", text = "", fg = "#fb4934" }, - { name = "scad", text = "", fg = "#d79921" }, - { name = "scala", text = "", fg = "#fb4934" }, - { name = "scm", text = "󰘧", fg = "#a89984" }, - { name = "scss", text = "", fg = "#fb4934" }, - { name = "sh", text = "", fg = "#928374" }, - { name = "sha1", text = "󰕥", fg = "#d3869b" }, - { name = "sha224", text = "󰕥", fg = "#d3869b" }, - { name = "sha256", text = "󰕥", fg = "#d3869b" }, - { name = "sha384", text = "󰕥", fg = "#d3869b" }, - { name = "sha512", text = "󰕥", fg = "#d3869b" }, - { name = "sig", text = "󰘧", fg = "#d79921" }, - { name = "signature", text = "󰘧", fg = "#d79921" }, - { name = "skp", text = "󰻫", fg = "#d79921" }, - { name = "sldasm", text = "󰻫", fg = "#d79921" }, - { name = "sldprt", text = "󰻫", fg = "#d79921" }, - { name = "slim", text = "", fg = "#cc241d" }, - { name = "sln", text = "", fg = "#b16286" }, - { name = "slnx", text = "", fg = "#b16286" }, - { name = "slvs", text = "󰻫", fg = "#d79921" }, - { name = "sml", text = "󰘧", fg = "#d79921" }, - { name = "so", text = "", fg = "#a89984" }, - { name = "sol", text = "", fg = "#83a598" }, - { name = "spec.js", text = "", fg = "#fabd2f" }, - { name = "spec.jsx", text = "", fg = "#8ec07c" }, - { name = "spec.ts", text = "", fg = "#83a598" }, - { name = "spec.tsx", text = "", fg = "#458588" }, - { name = "spx", text = "", fg = "#458588" }, - { name = "sql", text = "", fg = "#8ec07c" }, - { name = "sqlite", text = "", fg = "#8ec07c" }, - { name = "sqlite3", text = "", fg = "#8ec07c" }, - { name = "srt", text = "󰨖", fg = "#d79921" }, - { name = "ssa", text = "󰨖", fg = "#d79921" }, - { name = "ste", text = "󰻫", fg = "#d79921" }, - { name = "step", text = "󰻫", fg = "#d79921" }, - { name = "stl", text = "󰆧", fg = "#d3869b" }, - { name = "stories.js", text = "", fg = "#fb4934" }, - { name = "stories.jsx", text = "", fg = "#fb4934" }, - { name = "stories.mjs", text = "", fg = "#fb4934" }, - { name = "stories.svelte", text = "", fg = "#fb4934" }, - { name = "stories.ts", text = "", fg = "#fb4934" }, - { name = "stories.tsx", text = "", fg = "#fb4934" }, - { name = "stories.vue", text = "", fg = "#fb4934" }, - { name = "stp", text = "󰻫", fg = "#d79921" }, - { name = "strings", text = "", fg = "#83a598" }, - { name = "styl", text = "", fg = "#98971a" }, - { name = "sub", text = "󰨖", fg = "#d79921" }, - { name = "sublime", text = "", fg = "#d79921" }, - { name = "suo", text = "", fg = "#b16286" }, - { name = "sv", text = "󰍛", fg = "#98971a" }, - { name = "svelte", text = "", fg = "#cc241d" }, - { name = "svg", text = "󰜡", fg = "#d79921" }, - { name = "svgz", text = "󰜡", fg = "#d79921" }, - { name = "svh", text = "󰍛", fg = "#98971a" }, - { name = "swift", text = "", fg = "#d79921" }, - { name = "t", text = "", fg = "#83a598" }, - { name = "tbc", text = "󰛓", fg = "#458588" }, - { name = "tcl", text = "󰛓", fg = "#458588" }, - { name = "templ", text = "", fg = "#d79921" }, - { name = "terminal", text = "", fg = "#b8bb26" }, - { name = "test.js", text = "", fg = "#fabd2f" }, - { name = "test.jsx", text = "", fg = "#8ec07c" }, - { name = "test.ts", text = "", fg = "#83a598" }, - { name = "test.tsx", text = "", fg = "#458588" }, - { name = "tex", text = "", fg = "#98971a" }, - { name = "tf", text = "", fg = "#b16286" }, - { name = "tfvars", text = "", fg = "#b16286" }, - { name = "tgz", text = "", fg = "#d79921" }, - { name = "tmpl", text = "", fg = "#d79921" }, - { name = "tmux", text = "", fg = "#b8bb26" }, - { name = "toml", text = "", fg = "#cc241d" }, - { name = "torrent", text = "", fg = "#8ec07c" }, - { name = "tres", text = "", fg = "#928374" }, - { name = "ts", text = "", fg = "#83a598" }, - { name = "tscn", text = "", fg = "#928374" }, - { name = "tsconfig", text = "", fg = "#d79921" }, - { name = "tsx", text = "", fg = "#458588" }, - { name = "ttf", text = "", fg = "#a89984" }, - { name = "twig", text = "", fg = "#98971a" }, - { name = "txt", text = "󰈙", fg = "#98971a" }, - { name = "txz", text = "", fg = "#d79921" }, - { name = "typ", text = "", fg = "#8ec07c" }, - { name = "typoscript", text = "", fg = "#d79921" }, - { name = "ui", text = "", fg = "#458588" }, - { name = "v", text = "󰍛", fg = "#98971a" }, - { name = "vala", text = "", fg = "#b16286" }, - { name = "vert", text = "", fg = "#8ec07c" }, - { name = "vh", text = "󰍛", fg = "#98971a" }, - { name = "vhd", text = "󰍛", fg = "#98971a" }, - { name = "vhdl", text = "󰍛", fg = "#98971a" }, - { name = "vi", text = "", fg = "#d79921" }, - { name = "vim", text = "", fg = "#98971a" }, - { name = "vsh", text = "", fg = "#8ec07c" }, - { name = "vsix", text = "", fg = "#b16286" }, - { name = "vue", text = "", fg = "#98971a" }, - { name = "wasm", text = "", fg = "#458588" }, - { name = "wav", text = "", fg = "#83a598" }, - { name = "webm", text = "", fg = "#d79921" }, - { name = "webmanifest", text = "", fg = "#fabd2f" }, - { name = "webp", text = "", fg = "#d3869b" }, - { name = "webpack", text = "󰜫", fg = "#83a598" }, - { name = "wma", text = "", fg = "#83a598" }, - { name = "wmv", text = "", fg = "#d79921" }, - { name = "woff", text = "", fg = "#a89984" }, - { name = "woff2", text = "", fg = "#a89984" }, - { name = "wrl", text = "󰆧", fg = "#d3869b" }, - { name = "wrz", text = "󰆧", fg = "#d3869b" }, - { name = "wv", text = "", fg = "#83a598" }, - { name = "wvc", text = "", fg = "#83a598" }, - { name = "x", text = "", fg = "#458588" }, - { name = "xaml", text = "󰙳", fg = "#b16286" }, - { name = "xcf", text = "", fg = "#928374" }, - { name = "xcplayground", text = "", fg = "#d79921" }, - { name = "xcstrings", text = "", fg = "#83a598" }, - { name = "xls", text = "󰈛", fg = "#98971a" }, - { name = "xlsx", text = "󰈛", fg = "#98971a" }, - { name = "xm", text = "", fg = "#83a598" }, - { name = "xml", text = "󰗀", fg = "#d79921" }, - { name = "xpi", text = "", fg = "#cc241d" }, - { name = "xul", text = "", fg = "#d79921" }, - { name = "xz", text = "", fg = "#d79921" }, - { name = "yaml", text = "", fg = "#928374" }, - { name = "yml", text = "", fg = "#928374" }, - { name = "zig", text = "", fg = "#d79921" }, - { name = "zip", text = "", fg = "#d79921" }, - { name = "zsh", text = "", fg = "#98971a" }, - { name = "zst", text = "", fg = "#d79921" }, - { name = "🔥", text = "", fg = "#cc241d" }, + { name = ".babelrc", text = "", fg = "#fabd2f" }, + { name = ".bash_profile", text = "", fg = "#98971a" }, + { name = ".bashrc", text = "", fg = "#98971a" }, + { name = ".clang-format", text = "", fg = "#928374" }, + { name = ".clang-tidy", text = "", fg = "#928374" }, + { name = ".codespellrc", text = "󰓆", fg = "#b8bb26" }, + { name = ".condarc", text = "", fg = "#b8bb26" }, + { name = ".dockerignore", text = "󰡨", fg = "#458588" }, + { name = ".ds_store", text = "", fg = "#928374" }, + { name = ".editorconfig", text = "", fg = "#a89984" }, + { name = ".env", text = "", fg = "#d79921" }, + { name = ".eslintignore", text = "", fg = "#b16286" }, + { name = ".eslintrc", text = "", fg = "#b16286" }, + { name = ".git-blame-ignore-revs", text = "", fg = "#cc241d" }, + { name = ".gitattributes", text = "", fg = "#cc241d" }, + { name = ".gitconfig", text = "", fg = "#cc241d" }, + { name = ".gitignore", text = "", fg = "#cc241d" }, + { name = ".gitlab-ci.yml", text = "", fg = "#cc241d" }, + { name = ".gitmodules", text = "", fg = "#cc241d" }, + { name = ".gtkrc-2.0", text = "", fg = "#8ec07c" }, + { name = ".gvimrc", text = "", fg = "#98971a" }, + { name = ".justfile", text = "", fg = "#928374" }, + { name = ".luacheckrc", text = "", fg = "#458588" }, + { name = ".luaurc", text = "", fg = "#458588" }, + { name = ".mailmap", text = "󰊢", fg = "#cc241d" }, + { name = ".nanorc", text = "", fg = "#b16286" }, + { name = ".npmignore", text = "", fg = "#b16286" }, + { name = ".npmrc", text = "", fg = "#b16286" }, + { name = ".nuxtrc", text = "󱄆", fg = "#b8bb26" }, + { name = ".nvmrc", text = "", fg = "#b8bb26" }, + { name = ".pnpmfile.cjs", text = "", fg = "#d79921" }, + { name = ".pre-commit-config.yaml", text = "󰛢", fg = "#d79921" }, + { name = ".prettierignore", text = "", fg = "#83a598" }, + { name = ".prettierrc", text = "", fg = "#83a598" }, + { name = ".prettierrc.cjs", text = "", fg = "#83a598" }, + { name = ".prettierrc.js", text = "", fg = "#83a598" }, + { name = ".prettierrc.json", text = "", fg = "#83a598" }, + { name = ".prettierrc.json5", text = "", fg = "#83a598" }, + { name = ".prettierrc.mjs", text = "", fg = "#83a598" }, + { name = ".prettierrc.toml", text = "", fg = "#83a598" }, + { name = ".prettierrc.yaml", text = "", fg = "#83a598" }, + { name = ".prettierrc.yml", text = "", fg = "#83a598" }, + { name = ".pylintrc", text = "", fg = "#928374" }, + { name = ".settings.json", text = "", fg = "#b16286" }, + { name = ".SRCINFO", text = "󰣇", fg = "#8ec07c" }, + { name = ".vimrc", text = "", fg = "#98971a" }, + { name = ".Xauthority", text = "", fg = "#cc241d" }, + { name = ".xinitrc", text = "", fg = "#cc241d" }, + { name = ".Xresources", text = "", fg = "#cc241d" }, + { name = ".xsession", text = "", fg = "#cc241d" }, + { name = ".zprofile", text = "", fg = "#98971a" }, + { name = ".zshenv", text = "", fg = "#98971a" }, + { name = ".zshrc", text = "", fg = "#98971a" }, + { name = "_gvimrc", text = "", fg = "#98971a" }, + { name = "_vimrc", text = "", fg = "#98971a" }, + { name = "AUTHORS", text = "", fg = "#b16286" }, + { name = "AUTHORS.txt", text = "", fg = "#b16286" }, + { name = "brewfile", text = "", fg = "#cc241d" }, + { name = "bspwmrc", text = "", fg = "#928374" }, + { name = "build", text = "", fg = "#98971a" }, + { name = "build.gradle", text = "", fg = "#458588" }, + { name = "build.zig.zon", text = "", fg = "#d79921" }, + { name = "bun.lock", text = "", fg = "#a89984" }, + { name = "bun.lockb", text = "", fg = "#a89984" }, + { name = "cantorrc", text = "", fg = "#83a598" }, + { name = "checkhealth", text = "󰓙", fg = "#458588" }, + { name = "cmakelists.txt", text = "", fg = "#a89984" }, + { name = "code_of_conduct", text = "", fg = "#b16286" }, + { name = "code_of_conduct.md", text = "", fg = "#b16286" }, + { name = "commit_editmsg", text = "", fg = "#cc241d" }, + { name = "commitlint.config.js", text = "󰜘", fg = "#689d6a" }, + { name = "commitlint.config.ts", text = "󰜘", fg = "#689d6a" }, + { name = "compose.yaml", text = "󰡨", fg = "#458588" }, + { name = "compose.yml", text = "󰡨", fg = "#458588" }, + { name = "config", text = "", fg = "#928374" }, + { name = "containerfile", text = "󰡨", fg = "#458588" }, + { name = "copying", text = "", fg = "#fabd2f" }, + { name = "copying.lesser", text = "", fg = "#fabd2f" }, + { name = "Directory.Build.props", text = "", fg = "#458588" }, + { name = "Directory.Build.targets", text = "", fg = "#458588" }, + { name = "Directory.Packages.props", text = "", fg = "#458588" }, + { name = "docker-compose.yaml", text = "󰡨", fg = "#458588" }, + { name = "docker-compose.yml", text = "󰡨", fg = "#458588" }, + { name = "dockerfile", text = "󰡨", fg = "#458588" }, + { name = "eslint.config.cjs", text = "", fg = "#b16286" }, + { name = "eslint.config.js", text = "", fg = "#b16286" }, + { name = "eslint.config.mjs", text = "", fg = "#b16286" }, + { name = "eslint.config.ts", text = "", fg = "#b16286" }, + { name = "ext_typoscript_setup.txt", text = "", fg = "#d79921" }, + { name = "favicon.ico", text = "", fg = "#fabd2f" }, + { name = "fp-info-cache", text = "", fg = "#8ec07c" }, + { name = "fp-lib-table", text = "", fg = "#8ec07c" }, + { name = "FreeCAD.conf", text = "", fg = "#cc241d" }, + { name = "Gemfile", text = "", fg = "#cc241d" }, + { name = "gnumakefile", text = "", fg = "#928374" }, + { name = "go.mod", text = "", fg = "#8ec07c" }, + { name = "go.sum", text = "", fg = "#8ec07c" }, + { name = "go.work", text = "", fg = "#8ec07c" }, + { name = "gradle-wrapper.properties", text = "", fg = "#458588" }, + { name = "gradle.properties", text = "", fg = "#458588" }, + { name = "gradlew", text = "", fg = "#458588" }, + { name = "groovy", text = "", fg = "#458588" }, + { name = "gruntfile.babel.js", text = "", fg = "#d79921" }, + { name = "gruntfile.coffee", text = "", fg = "#d79921" }, + { name = "gruntfile.js", text = "", fg = "#d79921" }, + { name = "gruntfile.ts", text = "", fg = "#d79921" }, + { name = "gtkrc", text = "", fg = "#8ec07c" }, + { name = "gulpfile.babel.js", text = "", fg = "#fb4934" }, + { name = "gulpfile.coffee", text = "", fg = "#fb4934" }, + { name = "gulpfile.js", text = "", fg = "#fb4934" }, + { name = "gulpfile.ts", text = "", fg = "#fb4934" }, + { name = "hypridle.conf", text = "", fg = "#8ec07c" }, + { name = "hyprland.conf", text = "", fg = "#8ec07c" }, + { name = "hyprlandd.conf", text = "", fg = "#8ec07c" }, + { name = "hyprlock.conf", text = "", fg = "#8ec07c" }, + { name = "hyprpaper.conf", text = "", fg = "#8ec07c" }, + { name = "hyprsunset.conf", text = "", fg = "#8ec07c" }, + { name = "i18n.config.js", text = "󰗊", fg = "#b16286" }, + { name = "i18n.config.ts", text = "󰗊", fg = "#b16286" }, + { name = "i3blocks.conf", text = "", fg = "#a89984" }, + { name = "i3status.conf", text = "", fg = "#a89984" }, + { name = "index.theme", text = "", fg = "#b8bb26" }, + { name = "ionic.config.json", text = "", fg = "#83a598" }, + { name = "Jenkinsfile", text = "", fg = "#cc241d" }, + { name = "justfile", text = "", fg = "#928374" }, + { name = "kalgebrarc", text = "", fg = "#83a598" }, + { name = "kdeglobals", text = "", fg = "#83a598" }, + { name = "kdenlive-layoutsrc", text = "", fg = "#689d6a" }, + { name = "kdenliverc", text = "", fg = "#689d6a" }, + { name = "kritadisplayrc", text = "", fg = "#d3869b" }, + { name = "kritarc", text = "", fg = "#d3869b" }, + { name = "license", text = "", fg = "#fabd2f" }, + { name = "license.md", text = "", fg = "#fabd2f" }, + { name = "lxde-rc.xml", text = "", fg = "#a89984" }, + { name = "lxqt.conf", text = "", fg = "#83a598" }, + { name = "makefile", text = "", fg = "#928374" }, + { name = "mix.lock", text = "", fg = "#d3869b" }, + { name = "mpv.conf", text = "", fg = "#b16286" }, + { name = "next.config.cjs", text = "", fg = "#8ec07c" }, + { name = "next.config.js", text = "", fg = "#8ec07c" }, + { name = "next.config.ts", text = "", fg = "#8ec07c" }, + { name = "node_modules", text = "", fg = "#b16286" }, + { name = "nuxt.config.cjs", text = "󱄆", fg = "#b8bb26" }, + { name = "nuxt.config.js", text = "󱄆", fg = "#b8bb26" }, + { name = "nuxt.config.mjs", text = "󱄆", fg = "#b8bb26" }, + { name = "nuxt.config.ts", text = "󱄆", fg = "#b8bb26" }, + { name = "package-lock.json", text = "", fg = "#cc241d" }, + { name = "package.json", text = "", fg = "#b16286" }, + { name = "PKGBUILD", text = "", fg = "#8ec07c" }, + { name = "platformio.ini", text = "", fg = "#d79921" }, + { name = "playwright.config.cjs", text = "", fg = "#b8bb26" }, + { name = "playwright.config.cts", text = "", fg = "#b8bb26" }, + { name = "playwright.config.js", text = "", fg = "#b8bb26" }, + { name = "playwright.config.mjs", text = "", fg = "#b8bb26" }, + { name = "playwright.config.mts", text = "", fg = "#b8bb26" }, + { name = "playwright.config.ts", text = "", fg = "#b8bb26" }, + { name = "pnpm-lock.yaml", text = "", fg = "#d79921" }, + { name = "pnpm-workspace.yaml", text = "", fg = "#d79921" }, + { name = "pom.xml", text = "", fg = "#cc241d" }, + { name = "prettier.config.cjs", text = "", fg = "#83a598" }, + { name = "prettier.config.js", text = "", fg = "#83a598" }, + { name = "prettier.config.mjs", text = "", fg = "#83a598" }, + { name = "prettier.config.ts", text = "", fg = "#83a598" }, + { name = "procfile", text = "", fg = "#d3869b" }, + { name = "PrusaSlicer.ini", text = "", fg = "#cc241d" }, + { name = "PrusaSlicerGcodeViewer.ini", text = "", fg = "#cc241d" }, + { name = "py.typed", text = "", fg = "#d79921" }, + { name = "QtProject.conf", text = "", fg = "#98971a" }, + { name = "rakefile", text = "", fg = "#cc241d" }, + { name = "readme", text = "󰂺", fg = "#a89984" }, + { name = "readme.md", text = "󰂺", fg = "#a89984" }, + { name = "rmd", text = "", fg = "#83a598" }, + { name = "robots.txt", text = "󰚩", fg = "#b16286" }, + { name = "security", text = "󰒃", fg = "#a89984" }, + { name = "security.md", text = "󰒃", fg = "#a89984" }, + { name = "settings.gradle", text = "", fg = "#458588" }, + { name = "svelte.config.js", text = "", fg = "#cc241d" }, + { name = "sxhkdrc", text = "", fg = "#928374" }, + { name = "sym-lib-table", text = "", fg = "#8ec07c" }, + { name = "tailwind.config.js", text = "󱏿", fg = "#8ec07c" }, + { name = "tailwind.config.mjs", text = "󱏿", fg = "#8ec07c" }, + { name = "tailwind.config.ts", text = "󱏿", fg = "#8ec07c" }, + { name = "tmux.conf", text = "", fg = "#b8bb26" }, + { name = "tmux.conf.local", text = "", fg = "#b8bb26" }, + { name = "tsconfig.json", text = "", fg = "#83a598" }, + { name = "unlicense", text = "", fg = "#fabd2f" }, + { name = "vagrantfile", text = "", fg = "#458588" }, + { name = "vercel.json", text = "", fg = "#8ec07c" }, + { name = "vite.config.cjs", text = "", fg = "#d79921" }, + { name = "vite.config.cts", text = "", fg = "#d79921" }, + { name = "vite.config.js", text = "", fg = "#d79921" }, + { name = "vite.config.mjs", text = "", fg = "#d79921" }, + { name = "vite.config.mts", text = "", fg = "#d79921" }, + { name = "vite.config.ts", text = "", fg = "#d79921" }, + { name = "vitest.config.cjs", text = "", fg = "#d79921" }, + { name = "vitest.config.cts", text = "", fg = "#d79921" }, + { name = "vitest.config.js", text = "", fg = "#d79921" }, + { name = "vitest.config.mjs", text = "", fg = "#d79921" }, + { name = "vitest.config.mts", text = "", fg = "#d79921" }, + { name = "vitest.config.ts", text = "", fg = "#d79921" }, + { name = "vlcrc", text = "󰕼", fg = "#d79921" }, + { name = "webpack", text = "󰜫", fg = "#83a598" }, + { name = "weston.ini", text = "", fg = "#d79921" }, + { name = "workspace", text = "", fg = "#98971a" }, + { name = "wrangler.jsonc", text = "", fg = "#d79921" }, + { name = "wrangler.toml", text = "", fg = "#d79921" }, + { name = "xdph.conf", text = "", fg = "#8ec07c" }, + { name = "xmobarrc", text = "", fg = "#fb4934" }, + { name = "xmobarrc.hs", text = "", fg = "#fb4934" }, + { name = "xmonad.hs", text = "", fg = "#fb4934" }, + { name = "xorg.conf", text = "", fg = "#cc241d" }, + { name = "xsettingsd.conf", text = "", fg = "#cc241d" }, + ] + exts = [ + { name = "3gp", text = "", fg = "#d79921" }, + { name = "3mf", text = "󰆧", fg = "#d3869b" }, + { name = "7z", text = "", fg = "#d79921" }, + { name = "a", text = "", fg = "#a89984" }, + { name = "aac", text = "", fg = "#83a598" }, + { name = "ada", text = "", fg = "#458588" }, + { name = "adb", text = "", fg = "#458588" }, + { name = "ads", text = "", fg = "#d3869b" }, + { name = "ai", text = "", fg = "#fabd2f" }, + { name = "aif", text = "", fg = "#83a598" }, + { name = "aiff", text = "", fg = "#83a598" }, + { name = "android", text = "", fg = "#b8bb26" }, + { name = "ape", text = "", fg = "#83a598" }, + { name = "apk", text = "", fg = "#b8bb26" }, + { name = "apl", text = "", fg = "#b8bb26" }, + { name = "app", text = "", fg = "#cc241d" }, + { name = "applescript", text = "", fg = "#928374" }, + { name = "asc", text = "󰦝", fg = "#928374" }, + { name = "asm", text = "", fg = "#83a598" }, + { name = "ass", text = "󰨖", fg = "#d79921" }, + { name = "astro", text = "", fg = "#b16286" }, + { name = "avif", text = "", fg = "#d3869b" }, + { name = "awk", text = "", fg = "#928374" }, + { name = "azcli", text = "", fg = "#83a598" }, + { name = "bak", text = "󰁯", fg = "#928374" }, + { name = "bash", text = "", fg = "#98971a" }, + { name = "bat", text = "", fg = "#b8bb26" }, + { name = "bazel", text = "", fg = "#98971a" }, + { name = "bib", text = "󱉟", fg = "#fabd2f" }, + { name = "bicep", text = "", fg = "#83a598" }, + { name = "bicepparam", text = "", fg = "#d3869b" }, + { name = "bin", text = "", fg = "#cc241d" }, + { name = "blade.php", text = "", fg = "#fb4934" }, + { name = "blend", text = "󰂫", fg = "#d79921" }, + { name = "blp", text = "󰺾", fg = "#458588" }, + { name = "bmp", text = "", fg = "#d3869b" }, + { name = "bqn", text = "", fg = "#b8bb26" }, + { name = "brep", text = "󰻫", fg = "#d79921" }, + { name = "bz", text = "", fg = "#d79921" }, + { name = "bz2", text = "", fg = "#d79921" }, + { name = "bz3", text = "", fg = "#d79921" }, + { name = "bzl", text = "", fg = "#98971a" }, + { name = "c", text = "", fg = "#458588" }, + { name = "c++", text = "", fg = "#fb4934" }, + { name = "cache", text = "", fg = "#8ec07c" }, + { name = "cast", text = "", fg = "#d79921" }, + { name = "cbl", text = "", fg = "#458588" }, + { name = "cc", text = "", fg = "#fb4934" }, + { name = "ccm", text = "", fg = "#fb4934" }, + { name = "cfc", text = "", fg = "#8ec07c" }, + { name = "cfg", text = "", fg = "#928374" }, + { name = "cfm", text = "", fg = "#8ec07c" }, + { name = "cjs", text = "", fg = "#fabd2f" }, + { name = "clj", text = "", fg = "#98971a" }, + { name = "cljc", text = "", fg = "#98971a" }, + { name = "cljd", text = "", fg = "#83a598" }, + { name = "cljs", text = "", fg = "#83a598" }, + { name = "cmake", text = "", fg = "#a89984" }, + { name = "cob", text = "", fg = "#458588" }, + { name = "cobol", text = "", fg = "#458588" }, + { name = "coffee", text = "", fg = "#fabd2f" }, + { name = "conda", text = "", fg = "#b8bb26" }, + { name = "conf", text = "", fg = "#928374" }, + { name = "config.ru", text = "", fg = "#cc241d" }, + { name = "cow", text = "󰆚", fg = "#d79921" }, + { name = "cp", text = "", fg = "#83a598" }, + { name = "cpp", text = "", fg = "#83a598" }, + { name = "cppm", text = "", fg = "#83a598" }, + { name = "cpy", text = "", fg = "#458588" }, + { name = "cr", text = "", fg = "#a89984" }, + { name = "crdownload", text = "", fg = "#8ec07c" }, + { name = "cs", text = "󰌛", fg = "#d79921" }, + { name = "csh", text = "", fg = "#928374" }, + { name = "cshtml", text = "󱦗", fg = "#b16286" }, + { name = "cson", text = "", fg = "#fabd2f" }, + { name = "csproj", text = "󰪮", fg = "#b16286" }, + { name = "css", text = "", fg = "#b16286" }, + { name = "csv", text = "", fg = "#98971a" }, + { name = "cts", text = "", fg = "#83a598" }, + { name = "cu", text = "", fg = "#98971a" }, + { name = "cue", text = "󰲹", fg = "#d3869b" }, + { name = "cuh", text = "", fg = "#d3869b" }, + { name = "cxx", text = "", fg = "#83a598" }, + { name = "cxxm", text = "", fg = "#83a598" }, + { name = "d", text = "", fg = "#cc241d" }, + { name = "d.ts", text = "", fg = "#d79921" }, + { name = "dart", text = "", fg = "#458588" }, + { name = "db", text = "", fg = "#8ec07c" }, + { name = "dconf", text = "", fg = "#8ec07c" }, + { name = "desktop", text = "", fg = "#b16286" }, + { name = "diff", text = "", fg = "#928374" }, + { name = "dll", text = "", fg = "#cc241d" }, + { name = "doc", text = "󰈬", fg = "#458588" }, + { name = "Dockerfile", text = "󰡨", fg = "#458588" }, + { name = "dockerignore", text = "󰡨", fg = "#458588" }, + { name = "docx", text = "󰈬", fg = "#458588" }, + { name = "dot", text = "󱁉", fg = "#458588" }, + { name = "download", text = "", fg = "#8ec07c" }, + { name = "drl", text = "", fg = "#cc241d" }, + { name = "dropbox", text = "", fg = "#458588" }, + { name = "dump", text = "", fg = "#8ec07c" }, + { name = "dwg", text = "󰻫", fg = "#d79921" }, + { name = "dxf", text = "󰻫", fg = "#d79921" }, + { name = "ebook", text = "", fg = "#d79921" }, + { name = "ebuild", text = "", fg = "#b16286" }, + { name = "edn", text = "", fg = "#83a598" }, + { name = "eex", text = "", fg = "#d3869b" }, + { name = "ejs", text = "", fg = "#fabd2f" }, + { name = "el", text = "", fg = "#b16286" }, + { name = "elc", text = "", fg = "#b16286" }, + { name = "elf", text = "", fg = "#cc241d" }, + { name = "elm", text = "", fg = "#83a598" }, + { name = "eln", text = "", fg = "#b16286" }, + { name = "env", text = "", fg = "#d79921" }, + { name = "eot", text = "", fg = "#a89984" }, + { name = "epp", text = "", fg = "#d79921" }, + { name = "epub", text = "", fg = "#d79921" }, + { name = "erb", text = "", fg = "#cc241d" }, + { name = "erl", text = "", fg = "#b16286" }, + { name = "ex", text = "", fg = "#d3869b" }, + { name = "exe", text = "", fg = "#cc241d" }, + { name = "exs", text = "", fg = "#d3869b" }, + { name = "f#", text = "", fg = "#83a598" }, + { name = "f3d", text = "󰻫", fg = "#d79921" }, + { name = "f90", text = "󱈚", fg = "#b16286" }, + { name = "fbx", text = "󰆧", fg = "#d3869b" }, + { name = "fcbak", text = "", fg = "#cc241d" }, + { name = "fcmacro", text = "", fg = "#cc241d" }, + { name = "fcmat", text = "", fg = "#cc241d" }, + { name = "fcparam", text = "", fg = "#cc241d" }, + { name = "fcscript", text = "", fg = "#cc241d" }, + { name = "fcstd", text = "", fg = "#cc241d" }, + { name = "fcstd1", text = "", fg = "#cc241d" }, + { name = "fctb", text = "", fg = "#cc241d" }, + { name = "fctl", text = "", fg = "#cc241d" }, + { name = "fdmdownload", text = "", fg = "#8ec07c" }, + { name = "feature", text = "", fg = "#b8bb26" }, + { name = "fish", text = "", fg = "#928374" }, + { name = "flac", text = "", fg = "#458588" }, + { name = "flc", text = "", fg = "#a89984" }, + { name = "flf", text = "", fg = "#a89984" }, + { name = "fnl", text = "", fg = "#fabd2f" }, + { name = "fodg", text = "", fg = "#d79921" }, + { name = "fodp", text = "", fg = "#d79921" }, + { name = "fods", text = "", fg = "#b8bb26" }, + { name = "fodt", text = "", fg = "#458588" }, + { name = "frag", text = "", fg = "#8ec07c" }, + { name = "fs", text = "", fg = "#83a598" }, + { name = "fsi", text = "", fg = "#83a598" }, + { name = "fsscript", text = "", fg = "#83a598" }, + { name = "fsx", text = "", fg = "#83a598" }, + { name = "gcode", text = "󰐫", fg = "#83a598" }, + { name = "gd", text = "", fg = "#928374" }, + { name = "gemspec", text = "", fg = "#cc241d" }, + { name = "geom", text = "", fg = "#8ec07c" }, + { name = "gif", text = "", fg = "#d3869b" }, + { name = "git", text = "", fg = "#cc241d" }, + { name = "glb", text = "", fg = "#d79921" }, + { name = "gleam", text = "", fg = "#d3869b" }, + { name = "glsl", text = "", fg = "#8ec07c" }, + { name = "gnumakefile", text = "", fg = "#928374" }, + { name = "go", text = "", fg = "#8ec07c" }, + { name = "godot", text = "", fg = "#928374" }, + { name = "gpr", text = "", fg = "#928374" }, + { name = "gql", text = "", fg = "#d3869b" }, + { name = "gradle", text = "", fg = "#458588" }, + { name = "graphql", text = "", fg = "#d3869b" }, + { name = "gresource", text = "", fg = "#8ec07c" }, + { name = "gv", text = "󱁉", fg = "#458588" }, + { name = "gz", text = "", fg = "#d79921" }, + { name = "h", text = "", fg = "#d3869b" }, + { name = "haml", text = "", fg = "#a89984" }, + { name = "hbs", text = "", fg = "#cc241d" }, + { name = "heex", text = "", fg = "#d3869b" }, + { name = "hex", text = "", fg = "#458588" }, + { name = "hh", text = "", fg = "#d3869b" }, + { name = "hpp", text = "", fg = "#d3869b" }, + { name = "hrl", text = "", fg = "#b16286" }, + { name = "hs", text = "", fg = "#d3869b" }, + { name = "htm", text = "", fg = "#cc241d" }, + { name = "html", text = "", fg = "#cc241d" }, + { name = "http", text = "", fg = "#83a598" }, + { name = "huff", text = "󰡘", fg = "#b16286" }, + { name = "hurl", text = "", fg = "#d3869b" }, + { name = "hx", text = "", fg = "#d79921" }, + { name = "hxx", text = "", fg = "#d3869b" }, + { name = "ical", text = "", fg = "#458588" }, + { name = "icalendar", text = "", fg = "#458588" }, + { name = "ico", text = "", fg = "#fabd2f" }, + { name = "ics", text = "", fg = "#458588" }, + { name = "ifb", text = "", fg = "#458588" }, + { name = "ifc", text = "󰻫", fg = "#d79921" }, + { name = "ige", text = "󰻫", fg = "#d79921" }, + { name = "iges", text = "󰻫", fg = "#d79921" }, + { name = "igs", text = "󰻫", fg = "#d79921" }, + { name = "image", text = "", fg = "#fb4934" }, + { name = "img", text = "", fg = "#fb4934" }, + { name = "import", text = "", fg = "#a89984" }, + { name = "info", text = "", fg = "#fabd2f" }, + { name = "ini", text = "", fg = "#928374" }, + { name = "ino", text = "", fg = "#689d6a" }, + { name = "ipynb", text = "", fg = "#d79921" }, + { name = "iso", text = "", fg = "#fb4934" }, + { name = "ixx", text = "", fg = "#83a598" }, + { name = "jar", text = "", fg = "#d79921" }, + { name = "java", text = "", fg = "#fb4934" }, + { name = "jl", text = "", fg = "#d3869b" }, + { name = "jpeg", text = "", fg = "#d3869b" }, + { name = "jpg", text = "", fg = "#d3869b" }, + { name = "js", text = "", fg = "#fabd2f" }, + { name = "json", text = "", fg = "#fabd2f" }, + { name = "json5", text = "", fg = "#fabd2f" }, + { name = "jsonc", text = "", fg = "#fabd2f" }, + { name = "jsx", text = "", fg = "#8ec07c" }, + { name = "jwmrc", text = "", fg = "#83a598" }, + { name = "jxl", text = "", fg = "#d3869b" }, + { name = "kbx", text = "󰯄", fg = "#928374" }, + { name = "kdb", text = "", fg = "#b8bb26" }, + { name = "kdbx", text = "", fg = "#b8bb26" }, + { name = "kdenlive", text = "", fg = "#689d6a" }, + { name = "kdenlivetitle", text = "", fg = "#689d6a" }, + { name = "kicad_dru", text = "", fg = "#8ec07c" }, + { name = "kicad_mod", text = "", fg = "#8ec07c" }, + { name = "kicad_pcb", text = "", fg = "#8ec07c" }, + { name = "kicad_prl", text = "", fg = "#8ec07c" }, + { name = "kicad_pro", text = "", fg = "#8ec07c" }, + { name = "kicad_sch", text = "", fg = "#8ec07c" }, + { name = "kicad_sym", text = "", fg = "#8ec07c" }, + { name = "kicad_wks", text = "", fg = "#8ec07c" }, + { name = "ko", text = "", fg = "#a89984" }, + { name = "kpp", text = "", fg = "#d3869b" }, + { name = "kra", text = "", fg = "#d3869b" }, + { name = "krz", text = "", fg = "#d3869b" }, + { name = "ksh", text = "", fg = "#928374" }, + { name = "kt", text = "", fg = "#458588" }, + { name = "kts", text = "", fg = "#458588" }, + { name = "lck", text = "", fg = "#a89984" }, + { name = "leex", text = "", fg = "#d3869b" }, + { name = "less", text = "", fg = "#b16286" }, + { name = "lff", text = "", fg = "#a89984" }, + { name = "lhs", text = "", fg = "#d3869b" }, + { name = "lib", text = "", fg = "#cc241d" }, + { name = "license", text = "", fg = "#fabd2f" }, + { name = "liquid", text = "", fg = "#d79921" }, + { name = "lock", text = "", fg = "#a89984" }, + { name = "log", text = "󰌱", fg = "#a89984" }, + { name = "lrc", text = "󰨖", fg = "#d79921" }, + { name = "lua", text = "", fg = "#83a598" }, + { name = "luac", text = "", fg = "#83a598" }, + { name = "luau", text = "", fg = "#458588" }, + { name = "m", text = "", fg = "#458588" }, + { name = "m3u", text = "󰲹", fg = "#d3869b" }, + { name = "m3u8", text = "󰲹", fg = "#d3869b" }, + { name = "m4a", text = "", fg = "#83a598" }, + { name = "m4v", text = "", fg = "#d79921" }, + { name = "magnet", text = "", fg = "#cc241d" }, + { name = "makefile", text = "", fg = "#928374" }, + { name = "markdown", text = "", fg = "#a89984" }, + { name = "material", text = "", fg = "#b16286" }, + { name = "md", text = "", fg = "#a89984" }, + { name = "md5", text = "󰕥", fg = "#d3869b" }, + { name = "mdx", text = "", fg = "#83a598" }, + { name = "mint", text = "󰌪", fg = "#98971a" }, + { name = "mjs", text = "", fg = "#fabd2f" }, + { name = "mk", text = "", fg = "#928374" }, + { name = "mkv", text = "", fg = "#d79921" }, + { name = "ml", text = "", fg = "#d79921" }, + { name = "mli", text = "", fg = "#d79921" }, + { name = "mm", text = "", fg = "#83a598" }, + { name = "mo", text = "", fg = "#b16286" }, + { name = "mobi", text = "", fg = "#d79921" }, + { name = "mojo", text = "", fg = "#cc241d" }, + { name = "mov", text = "", fg = "#d79921" }, + { name = "mp3", text = "", fg = "#83a598" }, + { name = "mp4", text = "", fg = "#d79921" }, + { name = "mpp", text = "", fg = "#83a598" }, + { name = "msf", text = "", fg = "#83a598" }, + { name = "mts", text = "", fg = "#83a598" }, + { name = "mustache", text = "", fg = "#d79921" }, + { name = "nfo", text = "", fg = "#fabd2f" }, + { name = "nim", text = "", fg = "#d79921" }, + { name = "nix", text = "", fg = "#689d6a" }, + { name = "norg", text = "", fg = "#83a598" }, + { name = "nswag", text = "", fg = "#98971a" }, + { name = "nu", text = "", fg = "#689d6a" }, + { name = "o", text = "", fg = "#cc241d" }, + { name = "obj", text = "󰆧", fg = "#d3869b" }, + { name = "odf", text = "", fg = "#fb4934" }, + { name = "odg", text = "", fg = "#d79921" }, + { name = "odin", text = "󰟢", fg = "#83a598" }, + { name = "odp", text = "", fg = "#d79921" }, + { name = "ods", text = "", fg = "#b8bb26" }, + { name = "odt", text = "", fg = "#458588" }, + { name = "oga", text = "", fg = "#458588" }, + { name = "ogg", text = "", fg = "#458588" }, + { name = "ogv", text = "", fg = "#d79921" }, + { name = "ogx", text = "", fg = "#d79921" }, + { name = "opus", text = "", fg = "#458588" }, + { name = "org", text = "", fg = "#689d6a" }, + { name = "otf", text = "", fg = "#a89984" }, + { name = "out", text = "", fg = "#cc241d" }, + { name = "part", text = "", fg = "#8ec07c" }, + { name = "patch", text = "", fg = "#928374" }, + { name = "pck", text = "", fg = "#928374" }, + { name = "pcm", text = "", fg = "#458588" }, + { name = "pdf", text = "", fg = "#cc241d" }, + { name = "php", text = "", fg = "#d3869b" }, + { name = "pl", text = "", fg = "#83a598" }, + { name = "pls", text = "󰲹", fg = "#d3869b" }, + { name = "ply", text = "󰆧", fg = "#d3869b" }, + { name = "pm", text = "", fg = "#83a598" }, + { name = "png", text = "", fg = "#d3869b" }, + { name = "po", text = "", fg = "#83a598" }, + { name = "pot", text = "", fg = "#83a598" }, + { name = "pp", text = "", fg = "#d79921" }, + { name = "ppt", text = "󰈧", fg = "#cc241d" }, + { name = "pptx", text = "󰈧", fg = "#cc241d" }, + { name = "prisma", text = "", fg = "#458588" }, + { name = "pro", text = "", fg = "#fabd2f" }, + { name = "ps1", text = "󰨊", fg = "#458588" }, + { name = "psb", text = "", fg = "#83a598" }, + { name = "psd", text = "", fg = "#83a598" }, + { name = "psd1", text = "󰨊", fg = "#458588" }, + { name = "psm1", text = "󰨊", fg = "#458588" }, + { name = "pub", text = "󰷖", fg = "#fabd2f" }, + { name = "pxd", text = "", fg = "#83a598" }, + { name = "pxi", text = "", fg = "#83a598" }, + { name = "py", text = "", fg = "#d79921" }, + { name = "pyc", text = "", fg = "#fabd2f" }, + { name = "pyd", text = "", fg = "#fabd2f" }, + { name = "pyi", text = "", fg = "#d79921" }, + { name = "pyo", text = "", fg = "#fabd2f" }, + { name = "pyw", text = "", fg = "#83a598" }, + { name = "pyx", text = "", fg = "#83a598" }, + { name = "qm", text = "", fg = "#83a598" }, + { name = "qml", text = "", fg = "#98971a" }, + { name = "qrc", text = "", fg = "#98971a" }, + { name = "qss", text = "", fg = "#98971a" }, + { name = "query", text = "", fg = "#98971a" }, + { name = "r", text = "󰟔", fg = "#458588" }, + { name = "R", text = "󰟔", fg = "#458588" }, + { name = "rake", text = "", fg = "#cc241d" }, + { name = "rar", text = "", fg = "#d79921" }, + { name = "rasi", text = "", fg = "#fabd2f" }, + { name = "razor", text = "󱦘", fg = "#b16286" }, + { name = "rb", text = "", fg = "#cc241d" }, + { name = "res", text = "", fg = "#fb4934" }, + { name = "resi", text = "", fg = "#fb4934" }, + { name = "rlib", text = "", fg = "#fb4934" }, + { name = "rmd", text = "", fg = "#83a598" }, + { name = "rproj", text = "󰗆", fg = "#98971a" }, + { name = "rs", text = "", fg = "#fb4934" }, + { name = "rss", text = "", fg = "#d79921" }, + { name = "s", text = "", fg = "#458588" }, + { name = "sass", text = "", fg = "#fb4934" }, + { name = "sbt", text = "", fg = "#fb4934" }, + { name = "sc", text = "", fg = "#fb4934" }, + { name = "scad", text = "", fg = "#d79921" }, + { name = "scala", text = "", fg = "#fb4934" }, + { name = "scm", text = "󰘧", fg = "#a89984" }, + { name = "scss", text = "", fg = "#fb4934" }, + { name = "sh", text = "", fg = "#928374" }, + { name = "sha1", text = "󰕥", fg = "#d3869b" }, + { name = "sha224", text = "󰕥", fg = "#d3869b" }, + { name = "sha256", text = "󰕥", fg = "#d3869b" }, + { name = "sha384", text = "󰕥", fg = "#d3869b" }, + { name = "sha512", text = "󰕥", fg = "#d3869b" }, + { name = "sig", text = "󰘧", fg = "#d79921" }, + { name = "signature", text = "󰘧", fg = "#d79921" }, + { name = "skp", text = "󰻫", fg = "#d79921" }, + { name = "sldasm", text = "󰻫", fg = "#d79921" }, + { name = "sldprt", text = "󰻫", fg = "#d79921" }, + { name = "slim", text = "", fg = "#cc241d" }, + { name = "sln", text = "", fg = "#b16286" }, + { name = "slnx", text = "", fg = "#b16286" }, + { name = "slvs", text = "󰻫", fg = "#d79921" }, + { name = "sml", text = "󰘧", fg = "#d79921" }, + { name = "so", text = "", fg = "#a89984" }, + { name = "sol", text = "", fg = "#83a598" }, + { name = "spec.js", text = "", fg = "#fabd2f" }, + { name = "spec.jsx", text = "", fg = "#8ec07c" }, + { name = "spec.ts", text = "", fg = "#83a598" }, + { name = "spec.tsx", text = "", fg = "#458588" }, + { name = "spx", text = "", fg = "#458588" }, + { name = "sql", text = "", fg = "#8ec07c" }, + { name = "sqlite", text = "", fg = "#8ec07c" }, + { name = "sqlite3", text = "", fg = "#8ec07c" }, + { name = "srt", text = "󰨖", fg = "#d79921" }, + { name = "ssa", text = "󰨖", fg = "#d79921" }, + { name = "ste", text = "󰻫", fg = "#d79921" }, + { name = "step", text = "󰻫", fg = "#d79921" }, + { name = "stl", text = "󰆧", fg = "#d3869b" }, + { name = "stories.js", text = "", fg = "#fb4934" }, + { name = "stories.jsx", text = "", fg = "#fb4934" }, + { name = "stories.mjs", text = "", fg = "#fb4934" }, + { name = "stories.svelte", text = "", fg = "#fb4934" }, + { name = "stories.ts", text = "", fg = "#fb4934" }, + { name = "stories.tsx", text = "", fg = "#fb4934" }, + { name = "stories.vue", text = "", fg = "#fb4934" }, + { name = "stp", text = "󰻫", fg = "#d79921" }, + { name = "strings", text = "", fg = "#83a598" }, + { name = "styl", text = "", fg = "#98971a" }, + { name = "sub", text = "󰨖", fg = "#d79921" }, + { name = "sublime", text = "", fg = "#d79921" }, + { name = "suo", text = "", fg = "#b16286" }, + { name = "sv", text = "󰍛", fg = "#98971a" }, + { name = "svelte", text = "", fg = "#cc241d" }, + { name = "svg", text = "󰜡", fg = "#d79921" }, + { name = "svgz", text = "󰜡", fg = "#d79921" }, + { name = "svh", text = "󰍛", fg = "#98971a" }, + { name = "swift", text = "", fg = "#d79921" }, + { name = "t", text = "", fg = "#83a598" }, + { name = "tbc", text = "󰛓", fg = "#458588" }, + { name = "tcl", text = "󰛓", fg = "#458588" }, + { name = "templ", text = "", fg = "#d79921" }, + { name = "terminal", text = "", fg = "#b8bb26" }, + { name = "test.js", text = "", fg = "#fabd2f" }, + { name = "test.jsx", text = "", fg = "#8ec07c" }, + { name = "test.ts", text = "", fg = "#83a598" }, + { name = "test.tsx", text = "", fg = "#458588" }, + { name = "tex", text = "", fg = "#98971a" }, + { name = "tf", text = "", fg = "#b16286" }, + { name = "tfvars", text = "", fg = "#b16286" }, + { name = "tgz", text = "", fg = "#d79921" }, + { name = "tmpl", text = "", fg = "#d79921" }, + { name = "tmux", text = "", fg = "#b8bb26" }, + { name = "toml", text = "", fg = "#cc241d" }, + { name = "torrent", text = "", fg = "#8ec07c" }, + { name = "tres", text = "", fg = "#928374" }, + { name = "ts", text = "", fg = "#83a598" }, + { name = "tscn", text = "", fg = "#928374" }, + { name = "tsconfig", text = "", fg = "#d79921" }, + { name = "tsx", text = "", fg = "#458588" }, + { name = "ttf", text = "", fg = "#a89984" }, + { name = "twig", text = "", fg = "#98971a" }, + { name = "txt", text = "󰈙", fg = "#98971a" }, + { name = "txz", text = "", fg = "#d79921" }, + { name = "typ", text = "", fg = "#8ec07c" }, + { name = "typoscript", text = "", fg = "#d79921" }, + { name = "ui", text = "", fg = "#458588" }, + { name = "v", text = "󰍛", fg = "#98971a" }, + { name = "vala", text = "", fg = "#b16286" }, + { name = "vert", text = "", fg = "#8ec07c" }, + { name = "vh", text = "󰍛", fg = "#98971a" }, + { name = "vhd", text = "󰍛", fg = "#98971a" }, + { name = "vhdl", text = "󰍛", fg = "#98971a" }, + { name = "vi", text = "", fg = "#d79921" }, + { name = "vim", text = "", fg = "#98971a" }, + { name = "vsh", text = "", fg = "#8ec07c" }, + { name = "vsix", text = "", fg = "#b16286" }, + { name = "vue", text = "", fg = "#98971a" }, + { name = "wasm", text = "", fg = "#458588" }, + { name = "wav", text = "", fg = "#83a598" }, + { name = "webm", text = "", fg = "#d79921" }, + { name = "webmanifest", text = "", fg = "#fabd2f" }, + { name = "webp", text = "", fg = "#d3869b" }, + { name = "webpack", text = "󰜫", fg = "#83a598" }, + { name = "wma", text = "", fg = "#83a598" }, + { name = "wmv", text = "", fg = "#d79921" }, + { name = "woff", text = "", fg = "#a89984" }, + { name = "woff2", text = "", fg = "#a89984" }, + { name = "wrl", text = "󰆧", fg = "#d3869b" }, + { name = "wrz", text = "󰆧", fg = "#d3869b" }, + { name = "wv", text = "", fg = "#83a598" }, + { name = "wvc", text = "", fg = "#83a598" }, + { name = "x", text = "", fg = "#458588" }, + { name = "xaml", text = "󰙳", fg = "#b16286" }, + { name = "xcf", text = "", fg = "#928374" }, + { name = "xcplayground", text = "", fg = "#d79921" }, + { name = "xcstrings", text = "", fg = "#83a598" }, + { name = "xls", text = "󰈛", fg = "#98971a" }, + { name = "xlsx", text = "󰈛", fg = "#98971a" }, + { name = "xm", text = "", fg = "#83a598" }, + { name = "xml", text = "󰗀", fg = "#d79921" }, + { name = "xpi", text = "", fg = "#cc241d" }, + { name = "xul", text = "", fg = "#d79921" }, + { name = "xz", text = "", fg = "#d79921" }, + { name = "yaml", text = "", fg = "#928374" }, + { name = "yml", text = "", fg = "#928374" }, + { name = "zig", text = "", fg = "#d79921" }, + { name = "zip", text = "", fg = "#d79921" }, + { name = "zsh", text = "", fg = "#98971a" }, + { name = "zst", text = "", fg = "#d79921" }, + { name = "🔥", text = "", fg = "#cc241d" }, ] diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc @@ -1,7 +1,7 @@ # Enable colors and change prompt: autoload -U colors && colors # Load colors -clp(){ +clp() { yes | paru -Scc } @@ -19,14 +19,14 @@ precmd_functions+=( precmd_vcs_info ) zstyle ':vcs_info:git*+set-message:*' hooks git-untracked # +vi-git-untracked(){ - if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \ - git status --porcelain | grep '??' &> /dev/null ; then - # This will show the marker if there are any untracked files in repo. - # If instead you want to show the marker only if there are untracked - # files in $PWD, use: - #[[ -n $(git ls-files --others --exclude-standard) ]] ; then - hook_com[staged]+='!' # signify new files with a bang - fi + if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \ + git status --porcelain | grep '??' &> /dev/null ; then + # This will show the marker if there are any untracked files in repo. + # If instead you want to show the marker only if there are untracked + # files in $PWD, use: + #[[ -n $(git ls-files --others --exclude-standard) ]] ; then + hook_com[staged]+='!' # signify new files with a bang + fi } zstyle ':vcs_info:*' check-for-changes true @@ -102,11 +102,8 @@ function y() { } bindkey -s '^o' '^uy\n' - bindkey -s '^a' '^ubc -lq\n' - bindkey -s '^f' '^ucd "$(dirname "$(fzf)")"\n' - bindkey '^[[P' delete-char # Edit line in vim with ctrl-e: diff --git a/.local/bin/bookmarks b/.local/bin/bookmarks @@ -4,7 +4,7 @@ URLQUERY_FILE="${HOME}/.local/share/urlquery" ACTION_MENU="@@" CLIPBOARD() { - wl-paste + wl-paste } DMENU() { @@ -12,113 +12,114 @@ DMENU() { } error_notify() { - notify-send "${1}" - exit "1" + notify-send "${1}" + exit "1" } ensure_file_exists() { - [ -f "${URLQUERY_FILE}" ] || { - notify-send "${URLQUERY_FILE} does not exist. Creating it now." - printf "SearXNG=https://searx.tiekoetter.com/search?q=\n" > "${URLQUERY_FILE}" - } + [ -f "${URLQUERY_FILE}" ] || { + notify-send "${URLQUERY_FILE} does not exist. Creating it now." + printf "SearXNG=https://searx.tiekoetter.com/search?q=\n" >"${URLQUERY_FILE}" + } } get_selection() { - cut -d= -f1 "${URLQUERY_FILE}" | DMENU "${LINE_COUNT}" "Bookmarks" + cut -d= -f1 "${URLQUERY_FILE}" | DMENU "${LINE_COUNT}" "Bookmarks" } update_file() { - pattern="${1}" - replacement="${2}" + pattern="${1}" + replacement="${2}" - sed "/${pattern}/c\\${replacement}" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" && - mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" || - error_notify "Failed to update the file." + sed "/${pattern}/c\\${replacement}" "${URLQUERY_FILE}" >"${URLQUERY_FILE}.tmp" && + mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" || + error_notify "Failed to update the file." } is_valid_url() { - printf "%s\n" "${1}" | rg -q "^https?://[^[:space:]/?#][^[:space:]]+$" + printf "%s\n" "${1}" | rg -q "^https?://[^[:space:]/?#][^[:space:]]+$" } add_bookmark() { - URL="$(CLIPBOARD)" + URL="$(CLIPBOARD)" - is_valid_url "${URL}" || error_notify "The clipboard content is not a valid URL." + is_valid_url "${URL}" || error_notify "The clipboard content is not a valid URL." - rg -q "=${URL}$" "${URLQUERY_FILE}" && - notify-send "The URL is already in the list." && return + rg -q "=${URL}$" "${URLQUERY_FILE}" && + notify-send "The URL is already in the list." && return - NAME="$(printf "" | DMENU "0" "Name")" + NAME="$(printf "" | DMENU "0" "Name")" - [ -n "${NAME}" ] && printf "%s\n" "${NAME}=${URL}" >> "${URLQUERY_FILE}" && - notify-send "'${NAME}' is bookmarked." + [ -n "${NAME}" ] && printf "%s\n" "${NAME}=${URL}" >>"${URLQUERY_FILE}" && + notify-send "'${NAME}' is bookmarked." } delete_bookmark() { - NAME="$(get_selection)" + NAME="$(get_selection)" - [ -z "${NAME}" ] && error_notify "Failed to delete the bookmark." && return + [ -z "${NAME}" ] && error_notify "Failed to delete the bookmark." && return - sed "/^${NAME}=/d" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" - mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" + sed "/^${NAME}=/d" "${URLQUERY_FILE}" >"${URLQUERY_FILE}.tmp" + mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" - [ -s "${URLQUERY_FILE}" ] && rg -q "\S" "${URLQUERY_FILE}" || rm "${URLQUERY_FILE}" + [ -s "${URLQUERY_FILE}" ] && rg -q "\S" "${URLQUERY_FILE}" || rm "${URLQUERY_FILE}" - notify-send "'${NAME}' is deleted." + notify-send "'${NAME}' is deleted." } edit_name() { - OLD_NAME="${1}" - NEW_NAME="$(printf "" | DMENU "0" "New Name")" + OLD_NAME="${1}" + NEW_NAME="$(printf "" | DMENU "0" "New Name")" - [ -z "${NEW_NAME}" ] && return + [ -z "${NEW_NAME}" ] && return - URL="$(rg "^${OLD_NAME}=" "${URLQUERY_FILE}" | cut -d= -f2)" + URL="$(rg "^${OLD_NAME}=" "${URLQUERY_FILE}" | cut -d= -f2)" - update_file "^${OLD_NAME}=" "${NEW_NAME}=${URL}" + update_file "^${OLD_NAME}=" "${NEW_NAME}=${URL}" } edit_url() { - NAME="${1}" - NEW_URL="$(echo "" | DMENU "0" "New URL")" + NAME="${1}" + NEW_URL="$(echo "" | DMENU "0" "New URL")" - [ -z "${NEW_URL}" ] && return + [ -z "${NEW_URL}" ] && return - update_file "^${NAME}=.*" "${NAME}=${NEW_URL}" + update_file "^${NAME}=.*" "${NAME}=${NEW_URL}" } edit_bookmark() { - NAME="$(get_selection)" + NAME="$(get_selection)" - [ -z "${NAME}" ] && error_notify "Failed to edit the bookmark." && return + [ -z "${NAME}" ] && error_notify "Failed to edit the bookmark." && return - FIELD="$(printf "Name\nURL\n" | DMENU "2" "Edit")" + FIELD="$(printf "Name\nURL\n" | DMENU "2" "Edit")" - case "${FIELD}" in - "Name")edit_name "${NAME}";; - "URL")edit_url "${NAME}" - esac + case "${FIELD}" in + "Name") edit_name "${NAME}" ;; + "URL") edit_url "${NAME}" ;; + esac - notify-send "'${NAME}' is updated." + notify-send "'${NAME}' is updated." } open_bookmark() { - URL="$(rg "^${SELECTION}=" "${URLQUERY_FILE}" | cut -d= -f2-)" + URL="$(rg "^${SELECTION}=" "${URLQUERY_FILE}" | cut -d= -f2-)" - [ -z "${URL}" ] && notify-send "Bookmark not found." && exit "1" + [ -z "${URL}" ] && notify-send "Bookmark not found." && exit "1" - case "${URL}" in - *"search"* | *"wiki"* | *"packages"* | *"chatgpt"*) QUERY="$(echo "" | DMENU "0" "Search")" - URL="${URL}${QUERY}" - ;; - esac + case "${URL}" in + *"search"* | *"wiki"* | *"packages"* | *"chatgpt"*) + QUERY="$(echo "" | DMENU "0" "Search")" + URL="${URL}${QUERY}" + ;; + esac - "${BROWSER}" "${URL}" || notify-send "Failed to open the URL." + "${BROWSER}" "${URL}" || notify-send "Failed to open the URL." } ensure_file_exists -LINE_COUNT="$(wc -l < "${URLQUERY_FILE}")" +LINE_COUNT="$(wc -l <"${URLQUERY_FILE}")" [ "${LINE_COUNT}" -ge "15" ] && LINE_COUNT="15" @@ -127,16 +128,16 @@ SELECTION="$(get_selection)" [ -z "${SELECTION}" ] && exit case "${SELECTION}" in - "${ACTION_MENU}") - ACTION="$(printf "Add\nDelete\nEdit\n" | DMENU "3" "Action")" - - case "${ACTION}" in - "Add") add_bookmark ;; - "Delete") delete_bookmark ;; - "Edit") edit_bookmark ;; - esac - ;; - *) - open_bookmark - ;; +"${ACTION_MENU}") + ACTION="$(printf "Add\nDelete\nEdit\n" | DMENU "3" "Action")" + + case "${ACTION}" in + "Add") add_bookmark ;; + "Delete") delete_bookmark ;; + "Edit") edit_bookmark ;; + esac + ;; +*) + open_bookmark + ;; esac diff --git a/.local/bin/booksplit b/.local/bin/booksplit @@ -4,9 +4,12 @@ [ ! -f "$2" ] && printf "The first file should be the audio, the second should be the timecodes.\\n" && exit -echo "Enter the album/book title:"; read -r booktitle -echo "Enter the artist/author:"; read -r author -echo "Enter the publication year:"; read -r year +echo "Enter the album/book title:" +read -r booktitle +echo "Enter the artist/author:" +read -r author +echo "Enter the publication year:" +read -r year inputaudio="$1" ext="${1##*.}" @@ -15,26 +18,25 @@ ext="${1##*.}" escbook="$(echo "$booktitle" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")" ! mkdir -p "$escbook" && - echo "Do you have write access in this directory?" && - exit 1 + echo "Do you have write access in this directory?" && + exit 1 # Get the total number of tracks from the number of lines. -total="$(wc -l < "$2")" +total="$(wc -l <"$2")" cmd="ffmpeg -i \"$inputaudio\" -nostdin -y" -while read -r x; -do - end="$(echo "$x" | cut -d' ' -f1)" - file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext" - if [ -n "$start" ]; then - cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -metadata total=\"$total\" -ss \"$start\" -to \"$end\" -vn -c:a copy \"$file\" " - fi - title="$(echo "$x" | cut -d' ' -f2-)" - esctitle="$(echo "$title" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")" - track="$((track+1))" - start="$end" -done < "$2" +while read -r x; do + end="$(echo "$x" | cut -d' ' -f1)" + file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext" + if [ -n "$start" ]; then + cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -metadata total=\"$total\" -ss \"$start\" -to \"$end\" -vn -c:a copy \"$file\" " + fi + title="$(echo "$x" | cut -d' ' -f2-)" + esctitle="$(echo "$title" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")" + track="$((track + 1))" + start="$end" +done <"$2" # Last track must be added out of the loop. file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext" diff --git a/.local/bin/chkmd5m b/.local/bin/chkmd5m @@ -2,12 +2,12 @@ # Compare MD5 hashes of audio streams from multiple files using ffmpeg if [ "$#" -lt 2 ]; then - echo "Usage: $0 <file1> <file2> [file3 ...]" - exit 1 + echo "Usage: $0 <file1> <file2> [file3 ...]" + exit 1 fi get_md5() { - ffmpeg -v error -i "$1" -map 0:a:0 -f md5 - 2>/dev/null | cut -d= -f2 + ffmpeg -v error -i "$1" -map 0:a:0 -f md5 - 2>/dev/null | cut -d= -f2 } echo "Comparing audio hashes:" @@ -20,12 +20,12 @@ echo "$first_file : $first_hash" shift for file in "$@"; do - hash=$(get_md5 "$file") - echo "$file : $hash" - if [ "$hash" = "$first_hash" ]; then - echo "✅ Matches $first_file" - else - echo "❌ Differs from $first_file" - fi - echo + hash=$(get_md5 "$file") + echo "$file : $hash" + if [ "$hash" = "$first_hash" ]; then + echo "✅ Matches $first_file" + else + echo "❌ Differs from $first_file" + fi + echo done diff --git a/.local/bin/chooseprofile b/.local/bin/chooseprofile @@ -5,8 +5,8 @@ profiles=$(awk -F= '/^\[Profile/ {profile=$1} /Name/ && !/default/ {print $2}' ~ profile=$(echo "$profiles" | mew -p "Select IceCat Profile" -l 10) if [ -z "$profile" ] || ! echo "$profiles" | rg -q "^$profile$"; then - echo "Invalid selection or no profile selected. Exiting." - exit 1 + echo "Invalid selection or no profile selected. Exiting." + exit 1 fi swaymsg exec "icecat -P $profile" diff --git a/.local/bin/compiler b/.local/bin/compiler @@ -14,29 +14,29 @@ base="${file%.*}" cd "${dir}" || exit "1" case "${ext}" in - [0-9]) preconv "${file}" | refer -PS -e | groff -mandoc -T pdf > "${base}.pdf" ;; - mom|ms) preconv "${file}" | refer -PS -e | groff -T pdf -m"${ext}" > "${base}.pdf" ;; - c) cc "${file}" -o "${base}" && "${base}" ;; - cob) cobc -x -o "$base" "$file" && "$base" ;; - cpp|cc) g++ "${file}" -o "${base}" && "${base}" ;; - cs) mcs "${file}" && mono "${base}.exe" ;; - go) go run "${file}" ;; - h) doas make install ;; - java) javac -d classes "${file}" && java -cp classes "${base}" ;; - m) octave "${file}" ;; - md) [ -x "$(command -v lowdown)" ] && \ - lowdown --parse-no-intraemph "${file}" -Tms | groff -mpdfmark -ms -kept -T pdf > "${base}.pdf" || \ - [ -x "$(command -v groffdown)" ] && \ - groffdown -i "${file}" | groff -T pdf > "${base}.pdf" || \ - pandoc -t ms --highlight-style="kate" -s -o "${base}.pdf" "${file}" ;; - org) emacs "${file}" --batch -u "${USER}" -f org-latex-export-to-pdf ;; - py) python "${file}" ;; - rink) rink -f "${file}" ;; - [rR]md) Rscript -e "rmarkdown::render('${file}', quiet=TRUE)" ;; - rs) cargo build && cargo run --quiet ;; - sass) sassc -a "${file}" "${base}.css" ;; - scad) openscad -o "${base}.stl" "${file}" ;; - sent) setsid -f sent "${file}" 2> "/dev/null" ;; - tex) latexmk ;; - *) sed -n '/^#!/s/^#!//p; q' "${file}" | xargs -r -I % "${file}" ;; +[0-9]) preconv "${file}" | refer -PS -e | groff -mandoc -T pdf >"${base}.pdf" ;; +mom | ms) preconv "${file}" | refer -PS -e | groff -T pdf -m"${ext}" >"${base}.pdf" ;; +c) cc "${file}" -o "${base}" && "${base}" ;; +cob) cobc -x -o "$base" "$file" && "$base" ;; +cpp | cc) g++ "${file}" -o "${base}" && "${base}" ;; +cs) mcs "${file}" && mono "${base}.exe" ;; +go) go run "${file}" ;; +h) doas make install ;; +java) javac -d classes "${file}" && java -cp classes "${base}" ;; +m) octave "${file}" ;; +md) [ -x "$(command -v lowdown)" ] && + lowdown --parse-no-intraemph "${file}" -Tms | groff -mpdfmark -ms -kept -T pdf >"${base}.pdf" || + [ -x "$(command -v groffdown)" ] && + groffdown -i "${file}" | groff -T pdf >"${base}.pdf" || + pandoc -t ms --highlight-style="kate" -s -o "${base}.pdf" "${file}" ;; +org) emacs "${file}" --batch -u "${USER}" -f org-latex-export-to-pdf ;; +py) python "${file}" ;; +rink) rink -f "${file}" ;; +[rR]md) Rscript -e "rmarkdown::render('${file}', quiet=TRUE)" ;; +rs) cargo build && cargo run --quiet ;; +sass) sassc -a "${file}" "${base}.css" ;; +scad) openscad -o "${base}.stl" "${file}" ;; +sent) setsid -f sent "${file}" 2>"/dev/null" ;; +tex) latexmk ;; +*) sed -n '/^#!/s/^#!//p; q' "${file}" | xargs -r -I % "${file}" ;; esac diff --git a/.local/bin/cron/checkup b/.local/bin/cron/checkup @@ -1,5 +1,4 @@ #!/bin/sh - # Syncs repositories and downloads updates, meant to be run as a cronjob. doas pacman -Syyuw --noconfirm || notify-send "Error downloading updates. @@ -7,7 +6,6 @@ doas pacman -Syyuw --noconfirm || notify-send "Error downloading updates. Check your internet connection, if pacman is already running, or run update manually to see errors." pkill -RTMIN+8 "${STATUSBAR:-i3blocks}" -if pacman -Qu | rg -v "\[ignored\]" -then - notify-send "Repository Sync" "Updates available." +if pacman -Qu | rg -v "\[ignored\]"; then + notify-send "Repository Sync" "Updates available." fi diff --git a/.local/bin/cron/crontog b/.local/bin/cron/crontog @@ -1,6 +1,5 @@ #!/bin/sh - # Toggles all cronjobs off/on. # Stores disabled crontabs in ~/.config/cronsaved until restored. -([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - < "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "🕓 Cronjobs re-enabled.") || ( crontab -l > "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "🕓 Cronjobs saved and disabled.") +([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - <"${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "🕓 Cronjobs re-enabled.") || (crontab -l >"${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "🕓 Cronjobs saved and disabled.") diff --git a/.local/bin/cron/mailup b/.local/bin/cron/mailup @@ -2,7 +2,7 @@ pgrep -f mailsync && exit -echo 🔃 > /tmp/mailupdate +echo 🔃 >/tmp/mailupdate pkill -RTMIN+12 "${STATUSBAR:-i3blocks}" /usr/bin/mailsync rm -f /tmp/mailupdate diff --git a/.local/bin/cron/newsup b/.local/bin/cron/newsup @@ -1,5 +1,4 @@ #!/bin/sh - # Set as a cron job to check for new RSS entries for newsraft. # If newsraft is open, sends it an "R" key to refresh. @@ -8,7 +7,7 @@ export WAYLAND_DISPLAY=wayland-1 pgrep -f newsraft$ && /usr/bin/wlrctl window focus title:newsraft && /usr/bin/wlrctl keyboard type R && exit -echo "<span color='#7F7F7F'>[updating]</span>" > /tmp/newsupdate +echo "<span color='#7F7F7F'>[updating]</span>" >/tmp/newsupdate pkill -RTMIN+6 "${STATUSBAR:-i3blocks}" /usr/bin/newsraft -e reload-all rm -f /tmp/newsupdate diff --git a/.local/bin/define b/.local/bin/define @@ -19,7 +19,6 @@ def=$(echo "$query" | jq -r '[.[].meanings[] | {pos: .partOfSpeech, def: .defini # Requires a notification daemon to be installed notify-send -t 60000 "$word -" "$def" - ### MORE OPTIONS :) # Show first definition for each part of speech (thanks @morgengabe1 on youtube) diff --git a/.local/bin/displayselect b/.local/bin/displayselect @@ -1,82 +0,0 @@ -#!/bin/sh - -# A UI for detecting and selecting all displays. Probes xrandr for connected -# displays and lets user select one to use. User may also select "manual -# selection" which opens arandr. - -twoscreen() { # If multi-monitor is selected and there are two screens. - - mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?") - # Mirror displays using native resolution of external display and a scaled - # version for the internal display - if [ "$mirror" = "yes" ]; then - external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:") - internal=$(echo "$screens" | rg -v "$external") - - res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \ - tail -n 1 | awk '{print $1}') - res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \ - tail -n 1 | awk '{print $1}') - - res_ext_x=$(echo "$res_external" | sed 's/x.*//') - res_ext_y=$(echo "$res_external" | sed 's/.*x//') - res_int_x=$(echo "$res_internal" | sed 's/x.*//') - res_int_y=$(echo "$res_internal" | sed 's/.*x//') - - scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l) - scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l) - - xrandr --output "$external" --auto --scale 1.0x1.0 \ - --output "$internal" --auto --same-as "$external" \ - --scale "$scale_x"x"$scale_y" - else - - primary=$(echo "$screens" | dmenu -i -p "Select primary display:") - secondary=$(echo "$screens" | rg -v ^"$primary"$) - 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" | rg -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" | rg -v ^"$primary"$ | rg -v ^"$secondary"$ | dmenu -i -p "Select third display:") - xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | rg -v "$direction")"-of "$primary" --auto - } - -multimon() { # Multi-monitor handler. - 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" | rg -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. - { killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen - } - -# Get all possible displays -allposs=$(xrandr -q | rg "connected") - -# Get all connected screens. -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 ;} - -# 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" ;; -esac - -postrun diff --git a/.local/bin/dmenuhandler b/.local/bin/dmenuhandler @@ -5,17 +5,21 @@ feed="${1:-$(true | mew -p 'Paste URL or file path')}" case "$(printf "copy url\\nswayimg\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dlp\\nqueue yt-dlp audio" | mew -i -p "Open it with?")" in - "copy url") echo "$feed" | wl-copy ;; - 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-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 ;; - swayimg) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && swayimg "/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 ; swaybg -i $XDG_CACHE_HOME/pic -m fill & >/dev/null 2>&1 ;; - browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;; - lynx) lynx "$feed" >/dev/null 2>&1 ;; +"copy url") echo "$feed" | wl-copy ;; +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-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 ;; +swayimg) curl -sL "$feed" >"/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && swayimg "/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 + swaybg -i $XDG_CACHE_HOME/pic -m fill & + >/dev/null 2>&1 + ;; +browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;; +lynx) lynx "$feed" >/dev/null 2>&1 ;; esac diff --git a/.local/bin/dmenumountcifs b/.local/bin/dmenumountcifs @@ -11,9 +11,10 @@ share=$(smbclient -L "$srvname" -N | rg Disk | awk '{print $1}' | mew -i -p "Mou share2mnt=//"$srvname".local/"$share" sharemount() { - mounted=$(mount -v | rg "$share2mnt") || ([ ! -d /mnt/"$share" ] && doas mkdir /mnt/"$share") - [ -z "$mounted" ] && doas mount -t cifs "$share2mnt" -o user=nobody,password="",noperm /mnt/"$share" && notify-send "Netshare $share mounted" && exit 0 - notify-send "Netshare $share already mounted"; exit 1 + mounted=$(mount -v | rg "$share2mnt") || ([ ! -d /mnt/"$share" ] && doas mkdir /mnt/"$share") + [ -z "$mounted" ] && doas mount -t cifs "$share2mnt" -o user=nobody,password="",noperm /mnt/"$share" && notify-send "Netshare $share mounted" && exit 0 + notify-send "Netshare $share already mounted" + exit 1 } sharemount diff --git a/.local/bin/dmenurecord b/.local/bin/dmenurecord @@ -11,9 +11,9 @@ getdim() { screens=$(swaymsg -t get_outputs --raw | jq -r '.[].name') - choice=$(printf "$screens\nExit\n" | mew) + choice=$(printf "%s\nExit\n" "$screens" | mew) [ "${choice}" != "Exit" ] || [ -z "${choice}" ] || exit && - echo $choice + echo "$choice" } updateicon() { @@ -22,98 +22,100 @@ updateicon() { pkill -RTMIN+9 "${STATUSBAR:-i3blocks}" exit fi - printf "<span color='#FF0000'>rec:</span>" > /tmp/recordingicon - echo "$1" >> /tmp/recordingicon + printf "<span color='#FF0000'>rec:</span>" >/tmp/recordingicon + echo "$1" >>/tmp/recordingicon pkill -RTMIN+9 "${STATUSBAR:-i3blocks}" } killrecording() { recpid="$(bat /tmp/recordingpid)" - echo $recpid + echo "$recpid" kill -2 "$recpid" rm -f /tmp/recordingpid updateicon "" pkill -RTMIN+9 "${STATUSBAR:-i3blocks}" } -screencast() { gpu-screen-recorder \ - -w "$(getdim)" \ - -f 60 \ - -a default_output \ - -a default_input \ - -o "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid +screencast() { + gpu-screen-recorder \ + -w "$(getdim)" \ + -f 60 \ + -a default_output \ + -a default_input \ + -o "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! >/tmp/recordingpid updateicon "audio+mic" } -video() { gpu-screen-recorder \ - -w "$(getdim)" \ - -f 60 \ - -o "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid +video() { + gpu-screen-recorder \ + -w "$(getdim)" \ + -f 60 \ + -o "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! >/tmp/recordingpid updateicon "video only" } -webcamhidef() { ffmpeg \ - -f v4l2 \ - -i /dev/video0 \ - -video_size 1920x1080 \ - "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid +webcamhidef() { + ffmpeg \ + -f v4l2 \ + -i /dev/video0 \ + -video_size 1920x1080 \ + "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! >/tmp/recordingpid updateicon "webcam(hq)" } -webcam() { ffmpeg \ - -f v4l2 \ - -i /dev/video0 \ - -video_size 640x480 \ - "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid +webcam() { + ffmpeg \ + -f v4l2 \ + -i /dev/video0 \ + -video_size 640x480 \ + "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! >/tmp/recordingpid updateicon "webcam" } - -audio() { \ +audio() { ffmpeg \ - -f alsa -i default \ - -c:a flac \ - "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" & - echo $! > /tmp/recordingpid + -f alsa -i default \ + -c:a flac \ + "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" & + echo $! >/tmp/recordingpid updateicon "audio only" } -askrecording() { \ +askrecording() { choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | mew -i -p "Select recording style:") case "$choice" in - screencast) screencast;; - audio) audio;; - video) video;; - *selected) videoselected;; - webcam) webcam;; - "webcam (hi-def)") webcamhidef;; + screencast) screencast ;; + audio) audio ;; + video) video ;; + *selected) videoselected ;; + webcam) webcam ;; + "webcam (hi-def)") webcamhidef ;; esac } -asktoend() { \ +asktoend() { response=$(printf "No\\nYes" | mew -i -p "Recording still active. End recording?") && - [ "$response" = "Yes" ] && killrecording + [ "$response" = "Yes" ] && killrecording } -videoselected() -{ +videoselected() { gpu-screen-recorder \ - -w region -region $(slurp -f "%wx%h+%x+%y") \ - -f 60 \ - -o "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" & - echo $! > /tmp/recordingpid + -w region -region "$(slurp -f "%wx%h+%x+%y")" \ + -f 60 \ + -o "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! >/tmp/recordingpid updateicon "video selected" } case "$1" in - screencast) screencast;; - audio) audio;; - video) video;; - *selected) videoselected;; - kill) killrecording;; - *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;; +screencast) screencast ;; +audio) audio ;; +video) video ;; +*selected) videoselected ;; +kill) killrecording ;; +*) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording ;; esac diff --git a/.local/bin/doas_askpass b/.local/bin/doas_askpass @@ -14,9 +14,9 @@ set cmd [lrange $argv 0 end]; # read askpass from env or fallback to dmenu_pass () if {[info exists ::env(DOAS_ASKPASS)]} { - set askpass "$::env(DOAS_ASKPASS)" + set askpass "$::env(DOAS_ASKPASS)" } else { - set askpass "dmenu_pass password:" + set askpass "dmenu_pass password:" } # read password from user @@ -27,10 +27,10 @@ spawn doas {*}$cmd # send password and execute command expect "doas*password:" { - send -- "$pwd\r" - expect \r - log_user 1 - expect eof + send -- "$pwd\r" + expect \r + log_user 1 + expect eof } # get the exit status of the spawned doas command @@ -41,7 +41,7 @@ set exit_code [lindex $status 3] # exit with 1 if doas failed, else 0 if { $exit_code != 0 } { - exit 1 + exit 1 } else { - exit 0 + exit 0 } diff --git a/.local/bin/getbib b/.local/bin/getbib @@ -2,33 +2,33 @@ BIB_FILE="${HOME}/latex/uni.bib" [ -f "${BIB_FILE}" ] || BIB_FILE="${2:-$(find "${HOME}" -path "${HOME}/.*" \ - -prune -o -type "f" -name "*.bib" -print -quit)}" + -prune -o -type "f" -name "*.bib" -print -quit)}" { [ -f "${BIB_FILE}" ] || [ "${2}" ]; } || { - printf "%s\n" "Create a .bib file or provide as \$2." && exit "1" + printf "%s\n" "Create a .bib file or provide as \$2." && exit "1" } filter() { - sed -n -E 's/.*((DOI|doi)((\.(org))?\/?|:? *))([^: ]+[^ .]).*/\6/p; T; q' + sed -n -E 's/.*((DOI|doi)((\.(org))?\/?|:? *))([^: ]+[^ .]).*/\6/p; T; q' } fpdf() { - pdf="${1}" - doi="$(pdfinfo "${pdf}" 2> "/dev/null" | filter)" + pdf="${1}" + doi="$(pdfinfo "${pdf}" 2>"/dev/null" | filter)" - [ "${doi}" ] || doi="$(pdftotext -q -l "2" "${pdf}" - 2> "/dev/null" | filter)" + [ "${doi}" ] || doi="$(pdftotext -q -l "2" "${pdf}" - 2>"/dev/null" | filter)" - [ "${doi}" ] || printf "%s\n" "No DOI found for PDF: ${pdf}" >&2 + [ "${doi}" ] || printf "%s\n" "No DOI found for PDF: ${pdf}" >&2 - printf "%s\n" "${doi}" + printf "%s\n" "${doi}" } arrange() { - sed 's/\}, /\},\n /g + sed 's/\}, /\},\n /g s/, /,\n / s/ }/\n}/ s/,\s*pages=/,\n\tpages=/' | - sed '1s/^ *// + sed '1s/^ *// 1s/[0-9]*\([0-9]\{2\}\)/\1/ 1s/_// 1s/.*/\L&/ @@ -37,31 +37,31 @@ arrange() { } doi2bib() { - doi="${1#doi:}" - url="https://api.crossref.org/works/${doi}/transform/application/x-bibtex" - entry="$(curl -kLsS --no-fail "${url}" | arrange)" - red='\033[0;31m' - reset='\033[0m' - - printf "${red}%s${reset}\n" "${entry}" - - [ "${entry%"${entry#?}"}" != "@" ] && { - printf "%s\n" "Failed to fetch bibtex entry for DOI: ${doi}" - return "1" - } - - rg -iFq "doi = {${doi}}" "${BIB_FILE}" 2> "/dev/null" && { - printf "%s\n" "Bibtex entry for DOI: ${doi} already exists in the file." - } || { - [ -s "${BIB_FILE}" ] && printf "\n" >> "${BIB_FILE}" - printf "%s\n" "${entry}" >> "${BIB_FILE}" - printf "%s\n" "Added bibtex entry for DOI: ${doi}" - } + doi="${1#doi:}" + url="https://api.crossref.org/works/${doi}/transform/application/x-bibtex" + entry="$(curl -kLsS --no-fail "${url}" | arrange)" + red='\033[0;31m' + reset='\033[0m' + + printf "${red}%s${reset}\n" "${entry}" + + [ "${entry%"${entry#?}"}" != "@" ] && { + printf "%s\n" "Failed to fetch bibtex entry for DOI: ${doi}" + return "1" + } + + rg -iFq "doi = {${doi}}" "${BIB_FILE}" 2>"/dev/null" && { + printf "%s\n" "Bibtex entry for DOI: ${doi} already exists in the file." + } || { + [ -s "${BIB_FILE}" ] && printf "\n" >>"${BIB_FILE}" + printf "%s\n" "${entry}" >>"${BIB_FILE}" + printf "%s\n" "Added bibtex entry for DOI: ${doi}" + } } [ "${1}" ] || { - printf "%s\n" "Give either a pdf file or a DOI or a directory path that has PDFs as an argument." - exit "1" + printf "%s\n" "Give either a pdf file or a DOI or a directory path that has PDFs as an argument." + exit "1" } [ -f "${1}" ] && doi="$(fpdf "${1}")" && doi2bib "${doi}" && exit "0" diff --git a/.local/bin/ifinstalled b/.local/bin/ifinstalled @@ -6,7 +6,7 @@ # various other scripts for clarity's sake. for x in "$@"; do - if ! which "$x" >/dev/null 2>&1 && ! pacman -Qq "$x" >/dev/null 2>&1; then - notify-send "📦 $x" "must be installed for this function." && exit 1 ; - fi + if ! which "$x" >/dev/null 2>&1 && ! pacman -Qq "$x" >/dev/null 2>&1; then + notify-send "📦 $x" "must be installed for this function." && exit 1 + fi done diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler @@ -7,26 +7,31 @@ # otherwise it opens link in browser. if [ -z "$1" ]; then - url="$(wl-paste)" + url="$(wl-paste)" else - url="$1" + url="$1" fi # Check if the URL is from inv.nadeko.net and adjust it for YouTube echo "$url" | rg -q 'inv.nadeko.net/watch' if [ $? -eq 0 ]; then - url="https://www.youtube.com/watch?v=$(echo "$url" | sed 's/.*inv\.nadeko\.net\/watch?v=\([^&]*\)/\1/')" + url="https://www.youtube.com/watch?v=$(echo "$url" | sed 's/.*inv\.nadeko\.net\/watch?v=\([^&]*\)/\1/')" fi case "$url" in - *mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/v/*|*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|*webp) - curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && swayimg "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;; - *pdf|*cbz|*cbr) - 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 "$url" 'curl -LO' >/dev/null 2>&1 ;; - *) - [ -f "$url" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$url" >/dev/null 2>&1 || setsid -f "$BROWSER" "$url" >/dev/null 2>&1 +*mkv | *webm | *mp4 | *youtube.com/watch* | *youtube.com/playlist* | *youtube.com/v/* | *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 | *webp) + curl -sL "$url" >"/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && swayimg "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & + ;; +*pdf | *cbz | *cbr) + 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 "$url" 'curl -LO' >/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 @@ -10,24 +10,27 @@ wclip_cmd="wl-copy -t image/png" ocr_cmd="wl-copy" case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)\\na selected area (swappy)\\ncurrent window (swappy)\\nfull screen (swappy)\\ncopy selected image to text" | mew -l 10 -i -p "Screenshot which area?")" in - "a selected area") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" pic-selected-"${output}" && notify-send "📸 maimpick" "Screenshot saved as pic-selected-$output." ;; - "current window") - geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') - sleep 0.2 - grim -g "$geometry" pic-window-"${output}" && notify-send "📸 maimpick" "Screenshot saved as pic-window-$output." ;; - "full screen") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" pic-full-"${output}" && notify-send "📸 maimpick" "Screenshot saved as pic-full-$output." ;; - "a selected area (copy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} && notify-send "📸 maimpick" "Selected area screenshot copied to clipboard." ;; - "current window (copy)") - geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') - sleep 0.2 - grim -g "$geometry" - | ${wclip_cmd} && notify-send "📸 maimpick" "Window screenshot copied to clipboard." ;; - "full screen (copy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} && notify-send "📸 maimpick" "Full screen screenshot copied to clipboard.";; - "a selected area (swappy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | swappy -f - ;; - "current window (swappy)") - geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') - sleep 0.2 - grim -g "$geometry" - | swappy -f - ;; - "full screen (swappy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | swappy -f - ;; - "copy selected image to text") tmpfile=$(mktemp /tmp/ocr-XXXXXX.png) && slurp | grim -g - - > "$tmpfile" && tesseract "$tmpfile" - -l eng | ${ocr_cmd} && rm "$tmpfile" && notify-send "📸 maimpick" "Detected text copied to clipboard.\n$(wl-paste)" ;; - *) notify-send "📸 maimpick" "Wrong option." +"a selected area") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" pic-selected-"${output}" && notify-send "📸 maimpick" "Screenshot saved as pic-selected-$output." ;; +"current window") + geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') + sleep 0.2 + grim -g "$geometry" pic-window-"${output}" && notify-send "📸 maimpick" "Screenshot saved as pic-window-$output." + ;; +"full screen") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" pic-full-"${output}" && notify-send "📸 maimpick" "Screenshot saved as pic-full-$output." ;; +"a selected area (copy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} && notify-send "📸 maimpick" "Selected area screenshot copied to clipboard." ;; +"current window (copy)") + geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') + sleep 0.2 + grim -g "$geometry" - | ${wclip_cmd} && notify-send "📸 maimpick" "Window screenshot copied to clipboard." + ;; +"full screen (copy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} && notify-send "📸 maimpick" "Full screen screenshot copied to clipboard." ;; +"a selected area (swappy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | swappy -f - ;; +"current window (swappy)") + geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') + sleep 0.2 + grim -g "$geometry" - | swappy -f - + ;; +"full screen (swappy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | swappy -f - ;; +"copy selected image to text") tmpfile=$(mktemp /tmp/ocr-XXXXXX.png) && slurp | grim -g - - >"$tmpfile" && tesseract "$tmpfile" - -l eng | ${ocr_cmd} && rm "$tmpfile" && notify-send "📸 maimpick" "Detected text copied to clipboard.\n$(wl-paste)" ;; +*) notify-send "📸 maimpick" "Wrong option." ;; esac diff --git a/.local/bin/mounter b/.local/bin/mounter @@ -3,7 +3,7 @@ IFS=' ' # Function for escaping cell-phone names. -escape(){ echo "$@" | iconv -cf UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g" ;} +escape() { echo "$@" | iconv -cf UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g"; } # Check for phones. phones="$(simple-mtpfs -l 2>/dev/null | sed "s/^/📱/")" @@ -24,12 +24,12 @@ allluks="$(echo "$lsblkoutput" | rg crypto_LUKS)" # Get a list of the LUKS drive UUIDs already decrypted. decrypted="$(find /dev/disk/by-id/dm-uuid-CRYPT-LUKS2-* | sed "s|.*LUKS2-||;s|-.*||")" # Functioning for formatting drives correctly for mew: -filter() { sed "s/ /:/g" | awk -F':' '$7==""{printf "%s%s (%s) %s\n",$1,$3,$5,$6}' ; } +filter() { sed "s/ /:/g" | awk -F':' '$7==""{printf "%s%s (%s) %s\n",$1,$3,$5,$6}'; } # Get only LUKS drives that are not decrypted. unopenedluks="$(for drive in $allluks; do uuid="${drive%% *}" - uuid="${uuid//-}" # This is a bashism. + uuid="${uuid//-/}" # This is a bashism. [ -n "$decrypted" ] && for open in $decrypted; do [ "$uuid" = "$open" ] && break 1 done && continue 1 @@ -37,7 +37,7 @@ unopenedluks="$(for drive in $allluks; do done | filter)" # Get all normal, non-encrypted or decrypted partitions that are not mounted. -normalparts="$(echo "$lsblkoutput"| rg -v crypto_LUKS | rg 'part|rom|crypt' | sed "s/^/💾 /" | filter )" +normalparts="$(echo "$lsblkoutput" | rg -v crypto_LUKS | rg 'part|rom|crypt' | sed "s/^/💾 /" | filter)" # Add all to one variable. If no mountable drives found, exit. alldrives="$(echo "$phones @@ -53,7 +53,7 @@ test -n "$alldrives" chosen="$(echo "$alldrives" | mew -p "Mount which drive?" -i)" # Function for prompting user for a mountpoint. -getmount(){ +getmount() { mp="$(find /mnt /media /mount /home -maxdepth 1 -type d 2>/dev/null | mew -i -p "Mount this drive where?")" test -n "$mp" if [ ! -d "$mp" ]; then @@ -62,7 +62,7 @@ getmount(){ fi } -attemptmount(){ +attemptmount() { # Attempt to mount without a mountpoint, to see if drive is in fstab. doas mount "$chosen" || return 1 notify-send "💾Drive Mounted." "$chosen mounted." @@ -70,45 +70,45 @@ attemptmount(){ } case "$chosen" in - 💾*) - chosen="${chosen%% *}" - chosen="${chosen:1}" # This is a bashism. - parttype="$(echo "$lsblkoutput" | rg "$chosen" | awk '{print $NF}' | tr -d '[:space:]\r\n')" - attemptmount || getmount - case "${parttype##* }" in - vfat) doas mount -t vfat "$chosen" "$mp" -o rw,umask=0000 ;; - btrfs) doas mount "$chosen" "$mp" ;; - ntfs) doas mount -t ntfs3 "$chosen" "$mp" ;; - *) doas mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)" ;; - esac - notify-send "💾Drive Mounted." "$chosen mounted to $mp." - ;; - - 🔒*) - chosen="${chosen%% *}" - chosen="${chosen:1}" # This is a bashism. - # Number the drive. - while true; do - [ -f "/dev/mapper/usb$num" ] || break - num="$(printf "%02d" "$((num +1))")" - done - - # Decrypt in a terminal window - ${TERMINAL:-st} -a termfloat -e doas cryptsetup open "$chosen" "usb$num" - # Check if now decrypted. - test -b "/dev/mapper/usb$num" - - attemptmount || getmount - doas mount "/dev/mapper/usb$num" "$mp" - notify-send "🔓Decrypted drive Mounted." "$chosen decrypted and mounted to $mp." - ;; - - 📱*) - notify-send "❗Note" "Remember to allow file access on your phone now." - getmount - number="${chosen%%:*}" - number="${chosen:1}" # This is a bashism. - doas_askpass simple-mtpfs -o allow_other -o fsname="simple-mtpfs-$(escape "$chosen")" --device "$number" "$mp" - notify-send "🤖 Android Mounted." "Android device mounted to $mp." - ;; +💾*) + chosen="${chosen%% *}" + chosen="${chosen:1}" # This is a bashism. + parttype="$(echo "$lsblkoutput" | rg "$chosen" | awk '{print $NF}' | tr -d '[:space:]\r\n')" + attemptmount || getmount + case "${parttype##* }" in + vfat) doas mount -t vfat "$chosen" "$mp" -o rw,umask=0000 ;; + btrfs) doas mount "$chosen" "$mp" ;; + ntfs) doas mount -t ntfs3 "$chosen" "$mp" ;; + *) doas mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)" ;; + esac + notify-send "💾Drive Mounted." "$chosen mounted to $mp." + ;; + +🔒*) + chosen="${chosen%% *}" + chosen="${chosen:1}" # This is a bashism. + # Number the drive. + while true; do + [ -f "/dev/mapper/usb$num" ] || break + num="$(printf "%02d" "$((num + 1))")" + done + + # Decrypt in a terminal window + ${TERMINAL:-st} -a termfloat -e doas cryptsetup open "$chosen" "usb$num" + # Check if now decrypted. + test -b "/dev/mapper/usb$num" + + attemptmount || getmount + doas mount "/dev/mapper/usb$num" "$mp" + notify-send "🔓Decrypted drive Mounted." "$chosen decrypted and mounted to $mp." + ;; + +📱*) + notify-send "❗Note" "Remember to allow file access on your phone now." + getmount + number="${chosen%%:*}" + number="${chosen:1}" # This is a bashism. + doas_askpass simple-mtpfs -o allow_other -o fsname="simple-mtpfs-$(escape "$chosen")" --device "$number" "$mp" + notify-send "🤖 Android Mounted." "Android device mounted to $mp." + ;; esac diff --git a/.local/bin/noisereduce b/.local/bin/noisereduce @@ -1,59 +1,59 @@ #!/usr/bin/sh -usage () -{ - printf "Usage : noisereduce <input video file> <output video file>\n" - exit +usage() { + printf "Usage : noisereduce <input video file> <output video file>\n" + exit } # Tests for requirements -ifinstalled ffmpeg || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; } -ifinstalled sox || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; } +ifinstalled ffmpeg || { + echo >&2 "We require 'ffmpeg' but it's not installed." + exit 1 +} +ifinstalled sox || { + echo >&2 "We require 'ffmpeg' but it's not installed." + exit 1 +} -if [ "$#" -ne 2 ] -then +if [ "$#" -ne 2 ]; then usage fi -if [ ! -e "$1" ] -then - printf "File not found: %s\n" "$1" - exit +if [ ! -e "$1" ]; then + printf "File not found: %s\n" "$1" + exit fi -if [ -e "$2" ] -then - printf "File %s already exists, overwrite? [y/N]\n: " "$2" - read -r yn - case $yn in - [Yy]* ) ;; - * ) exit;; - esac +if [ -e "$2" ]; then + printf "File %s already exists, overwrite? [y/N]\n: " "$2" + read -r yn + case $yn in + [Yy]*) ;; + *) exit ;; + esac fi inBasename=$(basename "$1") inExt="${inBasename##*.}" isVideoStr=$(ffprobe -v warning -show_streams "$1" | rg codec_type=video) -if [ -n "$isVideoStr" ] -then - isVideo=1 - printf "Detected %s as a video file\n" "$inBasename" +if [ -n "$isVideoStr" ]; then + isVideo=1 + printf "Detected %s as a video file\n" "$inBasename" else - isVideo=0 - printf "Detected %s as an audio file\n" "$inBasename" + isVideo=0 + printf "Detected %s as an audio file\n" "$inBasename" fi printf "Sample noise start time [00:00:00]: " read -r sampleStart -if [ -z "$sampleStart" ] ; then sampleStart="00:00:00"; fi +if [ -z "$sampleStart" ]; then sampleStart="00:00:00"; fi printf "Sample noise end time [00:00:00.900]: " read -r sampleEnd -if [ -z "$sampleEnd" ] ; then sampleEnd="00:00:00.900"; fi +if [ -z "$sampleEnd" ]; then sampleEnd="00:00:00.900"; fi printf "Noise reduction amount [0.21]: " read -r sensitivity -if [ -z "$sensitivity" ] ; then sensitivity="0.21"; fi - +if [ -z "$sensitivity" ]; then sensitivity="0.21"; fi tmpVidFile="/tmp/noiseclean_tmpvid.$inExt" tmpAudFile="/tmp/noiseclean_tmpaud.wav" @@ -64,18 +64,18 @@ tmpAudCleanFile="/tmp/noiseclean_tmpaud-clean.wav" printf "Cleaning noise on %s...\n" "$1" if [ $isVideo -eq "1" ]; then - ffmpeg -v warning -y -i "$1" -qscale:v 0 -vcodec copy -an "$tmpVidFile" - ffmpeg -v warning -y -i "$1" -qscale:a 0 "$tmpAudFile" + ffmpeg -v warning -y -i "$1" -qscale:v 0 -vcodec copy -an "$tmpVidFile" + ffmpeg -v warning -y -i "$1" -qscale:a 0 "$tmpAudFile" else - cp "$1" "$tmpAudFile" + cp "$1" "$tmpAudFile" fi ffmpeg -v warning -y -i "$1" -vn -ss "$sampleStart" -t "$sampleEnd" "$noiseAudFile" sox "$noiseAudFile" -n noiseprof "$noiseProfFile" sox "$tmpAudFile" "$tmpAudCleanFile" noisered "$noiseProfFile" "$sensitivity" if [ $isVideo -eq "1" ]; then - ffmpeg -v warning -y -i "$tmpAudCleanFile" -i "$tmpVidFile" -vcodec copy -qscale:v 0 -qscale:a 0 "$2" + ffmpeg -v warning -y -i "$tmpAudCleanFile" -i "$tmpVidFile" -vcodec copy -qscale:v 0 -qscale:a 0 "$2" else - cp "$tmpAudCleanFile" "$2" + cp "$tmpAudCleanFile" "$2" fi printf "Done" diff --git a/.local/bin/opout b/.local/bin/opout @@ -7,7 +7,10 @@ basename="${1%.*}" case "${*}" in - *.tex|*.sil|*.m[dse]|*.[rR]md|*.mom|*.[0-9]) target="$(getcomproot "$1" || echo "$1")" ; setsid -f xdg-open "${target%.*}".pdf >/dev/null 2>&1 ;; - *.html) setsid -f "$BROWSER" "$basename".html >/dev/null 2>&1 ;; - *.sent) setsid -f sent "$1" >/dev/null 2>&1 ;; +*.tex | *.sil | *.m[dse] | *.[rR]md | *.mom | *.[0-9]) + target="$(getcomproot "$1" || echo "$1")" + setsid -f xdg-open "${target%.*}".pdf >/dev/null 2>&1 + ;; +*.html) setsid -f "$BROWSER" "$basename".html >/dev/null 2>&1 ;; +*.sent) setsid -f sent "$1" >/dev/null 2>&1 ;; esac diff --git a/.local/bin/pauseallmpv b/.local/bin/pauseallmpv @@ -6,5 +6,5 @@ # (with other things) by default and is used in some other places. for i in $(ls /tmp/mpvSockets/*); do - echo '{ "command": ["set_property", "pause", true] }' | socat - "$i"; + echo '{ "command": ["set_property", "pause", true] }' | socat - "$i" done diff --git a/.local/bin/queueandnotify b/.local/bin/queueandnotify @@ -6,9 +6,9 @@ queuefile="${XDG_DATA_HOME:-$HOME/.local/share}/newsboat/queue" while read -r line; do - [ -z "$line" ] && continue - url="${line%%[ ]*}" - qndl "$url" "curl -LO" -done < "$queuefile" + [ -z "$line" ] && continue + url="${line%%[ ]*}" + qndl "$url" "curl -LO" +done <"$queuefile" -echo > "$queuefile" +echo >"$queuefile" diff --git a/.local/bin/randombg b/.local/bin/randombg @@ -3,33 +3,33 @@ killall swaybg PIDFILE="/tmp/randombg.pid" # Check if the PID file exists and if the process is running if [ -e "$PIDFILE" ] && kill -0 "$(bat "$PIDFILE")"; then - echo "Another instance of the script is already running." - kill -9 "$(bat $PIDFILE)" # Forcefully kill the old process + echo "Another instance of the script is already running." + kill -9 "$(bat $PIDFILE)" # Forcefully kill the old process fi -echo $$ > "$PIDFILE" +echo $$ >"$PIDFILE" cleanup() { - [ -n "$OLD_PID" ] && kill "$OLD_PID" 2>/dev/null - rm -f "$PIDFILE" - exit 0 + [ -n "$OLD_PID" ] && kill "$OLD_PID" 2>/dev/null + rm -f "$PIDFILE" + exit 0 } trap cleanup INT TERM EXIT sleep_interruptible() { - t=$1 - while [ "$t" -gt 0 ]; do - sleep 1 || return - t=$((t-1)) - done + t=$1 + while [ "$t" -gt 0 ]; do + sleep 1 || return + t=$((t - 1)) + done } swaybg -i "$(fd . /mnt/ssd/papes -t f | shuf -n1)" -m fill & OLD_PID=$! while true; do - sleep_interruptible 300 - swaybg -i "$(fd . /mnt/ssd/papes -t f | shuf -n1)" -m fill & - NEXT_PID=$! - sleep_interruptible 5 - kill $OLD_PID - OLD_PID=$NEXT_PID + sleep_interruptible 300 + swaybg -i "$(fd . /mnt/ssd/papes -t f | shuf -n1)" -m fill & + NEXT_PID=$! + sleep_interruptible 5 + kill $OLD_PID + OLD_PID=$NEXT_PID done diff --git a/.local/bin/rssadd b/.local/bin/rssadd @@ -1,18 +1,18 @@ #!/bin/sh -if echo "$1" | rg -q "https*://\S\+\.[A-Za-z]\+\S*" ; then - url="$1" +if echo "$1" | rg -q "https*://\S\+\.[A-Za-z]\+\S*"; then + url="$1" else - url="$(rg -Eom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$1" | - rg -o "https?://[^\" ]")" + url="$(rg -Eom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$1" | + rg -o "https?://[^\" ]")" - echo "$url" | rg -q "https*://\S\+\.[A-Za-z]\+\S*" || - notify-send "That doesn't look like a full URL." && exit 1 + echo "$url" | rg -q "https*://\S\+\.[A-Za-z]\+\S*" || + notify-send "That doesn't look like a full URL." && exit 1 fi -RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls" +RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsraft/feeds" if awk '{print $1}' "$RSSFILE" | rg "^$url$" >/dev/null; then - notify-send "You already have this RSS feed." + notify-send "You already have this RSS feed." else - echo "$url" >> "$RSSFILE" && notify-send "RSS feed added." + echo "$url" >>"$RSSFILE" && notify-send "RSS feed added." fi diff --git a/.local/bin/rssget b/.local/bin/rssget @@ -12,78 +12,78 @@ # This script requires rssadd to add feeds to the list. -getlink () { - local url="$1" - feeds="$(curl -s "$url" | rg -x '.*type=.*(rss|rdf|atom).*' | sed 's/ //g')" - url="$(echo $url | sed 's|^\(https://[^/]*/\).*|\1|')" - - for rsspath in $feeds; do - rsspath="$(echo $rsspath | sed -n "s|.*href=['\"]\([^'\"]*\)['\"].*|\1|p")" - if echo "$rsspath" | rg "http" > /dev/null; then - link="$rsspath" - elif echo "$rsspath" | rg "^/" > /dev/null; then - link="$url$(echo $rsspath | sed 's|^/||')" - else - link="$url$rsspath" - fi - echo $link - done +getlink() { + local url="$1" + feeds="$(curl -s "$url" | rg -x '.*type=.*(rss|rdf|atom).*' | sed 's/ //g')" + url="$(echo $url | sed 's|^\(https://[^/]*/\).*|\1|')" + + for rsspath in $feeds; do + rsspath="$(echo $rsspath | sed -n "s|.*href=['\"]\([^'\"]*\)['\"].*|\1|p")" + if echo "$rsspath" | rg "http" >/dev/null; then + link="$rsspath" + elif echo "$rsspath" | rg "^/" >/dev/null; then + link="$url$(echo $rsspath | sed 's|^/||')" + else + link="$url$rsspath" + fi + echo $link + done } getRedditRss() { - echo "${1%/}.rss" + echo "${1%/}.rss" } getYoutubeRss() { - local url="$1" - path=$(echo "$url" | sed -e 's|^http[s]*://||') - case "$path" in - *"/channel/"*) channel_id="$(echo $path | sed -r 's|.*channel/([^/]*).*|\1|')" && feed="https://www.youtube.com/feeds/videos.xml?channel_id=${channel_id}" ;; - *"/c/"*|*"/user/"*) - feed=$(wget -q "$url" -O tmp_rssget_yt \ - && sed -n 's|.*\("rssUrl":"[^"]*\).*|\1|; p' tmp_rssget_yt \ - | rg rssUrl \ - | sed 's|"rssUrl":"||') ;; - esac - echo "$feed" + local url="$1" + path=$(echo "$url" | sed -e 's|^http[s]*://||') + case "$path" in + *"/channel/"*) channel_id="$(echo $path | sed -r 's|.*channel/([^/]*).*|\1|')" && feed="https://www.youtube.com/feeds/videos.xml?channel_id=${channel_id}" ;; + *"/c/"* | *"/user/"*) + feed=$(wget -q "$url" -O tmp_rssget_yt && + sed -n 's|.*\("rssUrl":"[^"]*\).*|\1|; p' tmp_rssget_yt | + rg rssUrl | + sed 's|"rssUrl":"||') + ;; + esac + echo "$feed" } getVimeoRss() { - local url="$1" - if echo "$url" | rg -q "/videos$"; then - feed_url=$(echo "$url" | sed 's/\/videos$//' | sed 's/\/$/\/rss/') - else - feed_url="${url}/videos/rss" - fi - echo "$feed_url" + local url="$1" + if echo "$url" | rg -q "/videos$"; then + feed_url=$(echo "$url" | sed 's/\/videos$//' | sed 's/\/$/\/rss/') + else + feed_url="${url}/videos/rss" + fi + echo "$feed_url" } -getGithubRss () { - local url="${1%/}" - if echo $url | rg "github.com/[^/]*/[a-zA-Z0-9].*" >/dev/null ; then - echo "${url}/commits.atom" - echo "${url}/releases.atom" - echo "${url}/tags.atom" - elif echo $url | rg "github.com/[^/]*(/)" >/dev/null ; then - echo "${url}.atom" - fi +getGithubRss() { + local url="${1%/}" + if echo $url | rg "github.com/[^/]*/[a-zA-Z0-9].*" >/dev/null; then + echo "${url}/commits.atom" + echo "${url}/releases.atom" + echo "${url}/tags.atom" + elif echo $url | rg "github.com/[^/]*(/)" >/dev/null; then + echo "${url}.atom" + fi } -getGitlabRss () { - local url="${1%/}" - echo "${url}.atom" +getGitlabRss() { + local url="${1%/}" + echo "${url}.atom" } -getMediumRss () { - echo $1 | sed 's|/tag/|/feed/|' +getMediumRss() { + echo $1 | sed 's|/tag/|/feed/|' } - -if [ -n "$1" ] ; then - url="$1" +if [ -n "$1" ]; then + url="$1" else - url="$(wl-paste)" - [ -z "$url" ] && echo "usage: $0 url 'tag1 tag2 tag3'" && exit 1 + url="$(wl-paste)" + [ -z "$url" ] && echo "usage: $0 url 'tag1 tag2 tag3'" && exit 1 fi declare -a list=() @@ -91,22 +91,22 @@ declare -a list=() yt_regex="^(http(s)?://)?((w){3}\.)?(youtube\.com|invidio\.us|invidious\.flokinet\.to|invidious\.materialio\.us|iv\.datura\.network|invidious\.perennialte\.ch|invidious\.fdn\.fr|invidious\.private\.coffee|invidious\.protokolla\.fi|invidious\.privacyredirect\.com|yt\.artemislena\.eu|yt\.drgnz\.club|invidious\.incogniweb\.net|yewtu\.be|inv\.tux\.pizza|invidious\.reallyaweso\.me|iv\.melmac\.space|inv\.us\.projectsegfau\.lt|inv\.nadeko\.net|invidious\.darkness\.services|invidious\.jing\.rocks|invidious\.privacydev\.net|inv\.in\.projectsegfau\.lt|invidious\.drgns\.space)/(channel|user|c).+" reddit_regex="^(http(s)?://)?((w){3}\.)?reddit\.com.*" vimeo_regex="^(http(s)?://)?((w){3}.)?vimeo\.com.*" -if echo $url | rg -x "$yt_regex" >/dev/null ; then - list="$(getYoutubeRss "$url")" -elif echo $url | rg -x "$reddit_regex" >/dev/null ; then - list="$(getRedditRss "$url")" +if echo $url | rg -x "$yt_regex" >/dev/null; then + list="$(getYoutubeRss "$url")" +elif echo $url | rg -x "$reddit_regex" >/dev/null; then + list="$(getRedditRss "$url")" # vimeo actually works with getlink -elif echo $url | rg "$vimeo_regex" >/dev/null ; then - list="$(getVimeoRss "$url")" -elif echo $url | rg "github.com" >/dev/null ; then - list="$(getGithubRss "$url")" +elif echo $url | rg "$vimeo_regex" >/dev/null; then + list="$(getVimeoRss "$url")" +elif echo $url | rg "github.com" >/dev/null; then + list="$(getGithubRss "$url")" # gitlab also works with getlink -elif echo $url | rg "gitlab.com/[a-zA-Z0-9].*" >/dev/null ; then - list="$(getGitlabRss "$url")" -elif echo $url | rg "medium.com/tag" >/dev/null ; then - list="$(getMediumRss "$url")" +elif echo $url | rg "gitlab.com/[a-zA-Z0-9].*" >/dev/null; then + list="$(getGitlabRss "$url")" +elif echo $url | rg "medium.com/tag" >/dev/null; then + list="$(getMediumRss "$url")" else - list="$(getlink "$url")" + list="$(getlink "$url")" fi [ "$(echo "$list" | wc -l)" -eq 1 ] && chosen_link="$list" || chosen_link=$(printf '%s\n' "${list[@]}" | mew -p "Choose a feed:") diff --git a/.local/bin/sd b/.local/bin/sd @@ -5,18 +5,18 @@ windowPID=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .pid') 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 yazi won't be ignored even if it shows ~ or / - case "$cmdline" in - 'Yazi') continue ;; - "${SHELL##*/}"|'yazi'|'yazi '*) 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 + 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 yazi won't be ignored even if it shows ~ or / + case "$cmdline" in + 'Yazi') continue ;; + "${SHELL##*/}" | 'yazi' | 'yazi '*) 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 @@ -15,25 +15,28 @@ zathuraconf="${XDG_CONFIG_HOME:-$HOME/.config}/zathura/zathurarc" # Give -s as parameter to make notifications silent. while getopts "s" o; do case "${o}" in - s) silent='1' ;; -esac done + s) silent='1' ;; + esac done shift $((OPTIND - 1)) trueloc="$(readlink -f "$1")" && -case "$(file --mime-type -b "$trueloc")" in - image/* ) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;; - inode/directory ) ln -sf "$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;; - *) [ -z "$silent" ] && notify-send "🖼️ Error" "Not a valid image or directory." ; exit 1;; -esac + case "$(file --mime-type -b "$trueloc")" in + image/*) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;; + inode/directory) ln -sf "$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;; + *) + [ -z "$silent" ] && notify-send "🖼️ Error" "Not a valid image or directory." + exit 1 + ;; + esac # If pywal is installed, use it. -if command -v wal >/dev/null 2>&1 ; then - wal -n -i "$(readlink -f $bgloc)" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1 +if command -v wal >/dev/null 2>&1; then + wal -n -i "$(readlink -f $bgloc)" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1 # 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" + [ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf" + [ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf" fi killall swaybg diff --git a/.local/bin/shortcuts b/.local/bin/shortcuts @@ -16,14 +16,14 @@ yazi_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/yazi/keymap.toml" # Remove, prepare files rm -f "$lf_shortcuts" "$qute_shortcuts" "$zsh_named_dirs" "$vim_shortcuts" "$yazi_shortcuts" 2>/dev/null -printf "# vim: filetype=sh\\n" > "$fish_shortcuts" -printf "# vim: filetype=sh\\nalias " > "$shell_shortcuts" -printf "# vim: filetype=sh\\n" > "$shell_env_shortcuts" -printf "\" vim: filetype=vim\\n" > "$vifm_shortcuts" +printf "# vim: filetype=sh\\n" >"$fish_shortcuts" +printf "# vim: filetype=sh\\nalias " >"$shell_shortcuts" +printf "# vim: filetype=sh\\n" >"$shell_env_shortcuts" +printf "\" vim: filetype=vim\\n" >"$vifm_shortcuts" # Format the `directories` file in the correct syntax and sent it to all three configs. -eval "echo \"$(bat "$bmdirs")\"" | \ -awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); +eval "echo \"$(bat "$bmdirs")\"" | + awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); printf(\"%s=\42cd %s && ls -A\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ; printf(\"[ -n \42%s\42 ] && export %s=\42%s\42 \n\",\$1,\$1,\$2) >> \"$shell_env_shortcuts\" ; printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ; @@ -41,8 +41,8 @@ awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); printf(\"[[mgr.prepend_keymap]]\\non = [\\\"g\\\", %s]\\nrun = \\\"cd %s\\\"\\n\\n\", chars, \$2) >> \"$yazi_shortcuts\" }" # Format the `files` file in the correct syntax and sent it to both configs. -eval "echo \"$(bat "$bmfiles")\"" | \ -awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); +eval "echo \"$(bat "$bmfiles")\"" | + awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); printf(\"%s=\42\$EDITOR %s\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ; printf(\"[ -n \42%s\42 ] && export %s=\42%s\42 \n\",\$1,\$1,\$2) >> \"$shell_env_shortcuts\" ; printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ; diff --git a/.local/bin/singboxwrap b/.local/bin/singboxwrap @@ -5,18 +5,19 @@ default_path="${XDG_DATA_HOME:-$HOME/.local/share}/singboxcfg" input=$1 -run_singbox () { +run_singbox() { [ -z "${1}" ] && exit sing-box check -c "$1" && { pidof sing-box >/dev/null && killall sing-box - setsid -f sing-box -c "$1" run - if [ "$input" = menu ]; then - notify-send "sing-box with $(readlink "$1") is running now" - fi - } || notify-send "Config check has failed. Check your configuration at $(readlink $1)" & exit 1 + setsid -f sing-box -c "$1" run + if [ "$input" = menu ]; then + notify-send "sing-box with $(readlink "$1") is running now" + fi + } || notify-send "Config check has failed. Check your configuration at $(readlink "$1")" & + exit 1 } -choose_menu () { +choose_menu() { choose="$(fd . $config_dir -d 1 -t f | mew -p "Config to use")" [ -z "${choose}" ] && exit ln -sf "$choose" "$default_path" @@ -28,6 +29,6 @@ if [ ! -f "$default_path" ]; then fi case $input in - menu) run_singbox $(choose_menu) ;; - *) run_singbox $default_path ;; +menu) run_singbox "$(choose_menu)" ;; +*) run_singbox "$default_path" ;; esac diff --git a/.local/bin/slider b/.local/bin/slider @@ -10,26 +10,30 @@ cache="${XDG_CACHE_HOME:-$HOME/.cache}/slider" while getopts "hvrpi:c:a:o:d:f:t:e:x:s:" o; do case "${o}" in - c) bgc="$OPTARG" ;; - t) fgc="$OPTARG" ;; - f) font="$OPTARG" ;; - i) file="$OPTARG" ;; - a) audio="$OPTARG" ;; - o) outfile="$OPTARG" ;; - d) prepdir="$OPTARG" ;; - r) redo="$OPTARG" ;; - s) ppt="$OPTARG" ;; - e) endtime="$OPTARG" ;; - x) res="$OPTARG" - echo "$res" | rg -qv "^[0-9]\+x[0-9]\+$" && - echo "Resolution must be dimensions separated by a 'x': 1280x720, etc." && - exit 1 ;; - p) echo "Purge old build files in $cache? [y/N]" - read -r confirm - echo "$confirm" | rg -iq "^y$" && rm -rf "$cache" && echo "Done." - exit ;; - v) verbose=True ;; - *) echo "$(basename "$0") usage: + c) bgc="$OPTARG" ;; + t) fgc="$OPTARG" ;; + f) font="$OPTARG" ;; + i) file="$OPTARG" ;; + a) audio="$OPTARG" ;; + o) outfile="$OPTARG" ;; + d) prepdir="$OPTARG" ;; + r) redo="$OPTARG" ;; + s) ppt="$OPTARG" ;; + e) endtime="$OPTARG" ;; + x) + res="$OPTARG" + echo "$res" | rg -qv "^[0-9]\+x[0-9]\+$" && + echo "Resolution must be dimensions separated by a 'x': 1280x720, etc." && + exit 1 + ;; + p) + echo "Purge old build files in $cache? [y/N]" + read -r confirm + echo "$confirm" | rg -iq "^y$" && rm -rf "$cache" && echo "Done." + exit + ;; + v) verbose=True ;; + *) echo "$(basename "$0") usage: -i input timecode list (required) -a audio file -c color of background (use html names, black is default) @@ -42,14 +46,14 @@ while getopts "hvrpi:c:a:o:d:f:t:e:x:s:" o; do case "${o}" in -d tmp directory -r rerun imagemagick commands even if done previously (in case files or background has changed) -p purge old build files instead of running - -v be verbose" && exit 1 + -v be verbose" && exit 1 ;; -esac done + esac done # Check that the input file looks like it should. -{ head -n 1 "$file" 2>/dev/null | rg -q "^00:00:00 " ;} || { - echo "Give an input file with -i." && - echo "The file should look as this example: +{ head -n 1 "$file" 2>/dev/null | rg -q "^00:00:00 "; } || { + echo "Give an input file with -i." && + echo "The file should look as this example: 00:00:00 first_image.jpg 00:00:03 otherdirectory/next_image.jpg @@ -57,16 +61,19 @@ esac done etc... Timecodes and filenames must be separated by Tabs." && - exit 1 - } + exit 1 +} if [ -n "${audio+x}" ]; then - # Check that the audio file looks like an actual audio file. - case "$(file --dereference --brief --mime-type -- "$audio")" in - audio/*) ;; - *) echo "That doesn't look like an audio file."; exit 1 ;; - esac - totseconds="$(date '+%s' -d $(ffmpeg -i "$audio" 2>&1 | awk '/Duration/ {print $2}' | sed s/,//))" + # Check that the audio file looks like an actual audio file. + case "$(file --dereference --brief --mime-type -- "$audio")" in + audio/*) ;; + *) + echo "That doesn't look like an audio file." + exit 1 + ;; + esac + totseconds="$(date '+%s' -d $(ffmpeg -i "$audio" 2>&1 | awk '/Duration/ {print $2}' | sed s/,//))" fi prepdir="${prepdir:-$cache/$file}" @@ -77,48 +84,47 @@ prepfile="$prepdir/$file.prep" mkdir -p "$prepdir" { -while read -r x; -do - # Get the time from the first column. - time="${x%% *}" - seconds="$(date '+%s' -d "$time")" - # Duration is not used on the first looped item. - duration="$((seconds - prevseconds))" - - # Get the filename/text content from the rest. - content="${x#* }" - base="$(basename "$content")" - base="${base%.*}.jpg" - - if [ -f "$content" ]; then - # If images have already been made in a previous run, do not recreate - # them unless -r was given. - { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} && - magick -size "${res:-1920x1080}" canvas:"${bgc:-black}" -gravity center "$content" -resize 1920x1080 -composite "$prepdir/$base" - else - { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} && - magick -size "${res:-1920x1080}" -background "${bgc:-black}" -fill "${fgc:-white}" -font "${font:-Sans}" -pointsize "${ppt:-150}" -gravity center label:"$content" "$prepdir/$base" - fi - - # If the first line, do not write yet. - [ "$time" = "00:00:00" ] || echo "file '$prevbase' + while read -r x; do + # Get the time from the first column. + time="${x%% *}" + seconds="$(date '+%s' -d "$time")" + # Duration is not used on the first looped item. + duration="$((seconds - prevseconds))" + + # Get the filename/text content from the rest. + content="${x#* }" + base="$(basename "$content")" + base="${base%.*}.jpg" + + if [ -f "$content" ]; then + # If images have already been made in a previous run, do not recreate + # them unless -r was given. + { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ]; } && + magick -size "${res:-1920x1080}" canvas:"${bgc:-black}" -gravity center "$content" -resize 1920x1080 -composite "$prepdir/$base" + else + { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ]; } && + magick -size "${res:-1920x1080}" -background "${bgc:-black}" -fill "${fgc:-white}" -font "${font:-Sans}" -pointsize "${ppt:-150}" -gravity center label:"$content" "$prepdir/$base" + fi + + # If the first line, do not write yet. + [ "$time" = "00:00:00" ] || echo "file '$prevbase' duration $duration" - # Keep the information required for the next file. - prevbase="$base" - prevtime="$time" - prevseconds="$(date '+%s' -d "$prevtime")" -done < "$file" -# Do last file which must be given twice as follows -endtime="$((totseconds-seconds))" -echo "file '$base' + # Keep the information required for the next file. + prevbase="$base" + prevtime="$time" + prevseconds="$(date '+%s' -d "$prevtime")" + done <"$file" + # Do last file which must be given twice as follows + endtime="$((totseconds - seconds))" + echo "file '$base' duration ${endtime:-5} file '$base'" -} > "$prepfile" +} >"$prepfile" if [ -n "${audio+x}" ]; then - ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -i "$audio" -c:a aac -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" + ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -i "$audio" -c:a aac -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" else - ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" + ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" fi # Might also try: diff --git a/.local/bin/spec b/.local/bin/spec @@ -1,20 +1,22 @@ #!/bin/sh +# Creates a spectrogram image from an audio file using FFmpeg +# and opens it with the preferred image viewer. me=$(basename "$0") -if [ -z "$1" ] ; then - exit 1; +if [ -z "$1" ]; then + exit 1 fi TEMP=$(mktemp -u -t "${me}" 2>/dev/null || mktemp -u -t "${me}"-XXXXXXXXXX) TEMPIMG="${TEMP}.png" TEMPTXT="${TEMP}.txt" -basename "$1" > "${TEMPTXT}" +basename "$1" >"${TEMPTXT}" ffmpeg -v quiet -y -i "$1" -filter_complex showspectrumpic=s=2560x1024,drawtext="expansion=none:textfile='${TEMPTXT}':x=(w-tw)/2:y=16:fontcolor='white':fontsize=20" "$TEMPIMG" exitcode=$? -if [ $exitcode -ne 0 ] ; then +if [ $exitcode -ne 0 ]; then rm "$TEMPTXT" exit $exitcode fi diff --git a/.local/bin/statusbar/sb-microphone b/.local/bin/statusbar/sb-microphone @@ -1,11 +1,14 @@ #!/bin/sh case $BLOCK_BUTTON in - 1) setsid -w -f "$TERMINAL" -e pulsemixer; pkill -RTMIN+23 "${STATUSBAR:-i3blocks}" ;; - 2) wpctl set-mute @DEFAULT_SOURCE@ toggle ;; - 4) wpctl set-volume @DEFAULT_SOURCE@ 1%+ ;; - 5) wpctl set-volume @DEFAULT_SOURCE@ 1%- ;; - 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;; +1) + setsid -w -f "$TERMINAL" -e pulsemixer + pkill -RTMIN+23 "${STATUSBAR:-i3blocks}" + ;; +2) wpctl set-mute @DEFAULT_SOURCE@ toggle ;; +4) wpctl set-volume @DEFAULT_SOURCE@ 1%+ ;; +5) wpctl set-volume @DEFAULT_SOURCE@ 1%- ;; +8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;; esac vol="$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@)" @@ -15,10 +18,10 @@ vol="$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@)" vol="${vol#Volume: }" split() { - # For ommiting the . without calling and external program. - IFS=$2 - set -- $1 - printf '%s' "$@" + # For ommiting the . without calling and external program. + IFS=$2 + set -- $1 + printf '%s' "$@" } vol="$(printf "%.0f" "$(split "$vol" ".")")" diff --git a/.local/bin/statusbar/sb-news b/.local/bin/statusbar/sb-news @@ -1,16 +1,16 @@ #!/bin/sh case $BLOCK_BUTTON in - 1) setsid "$TERMINAL" -T newsraft -e newsraft >/dev/null 2>&1 ;; - 2) setsid -f newsup >/dev/null && exit ;; - 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;; +1) setsid "$TERMINAL" -T newsraft -e newsraft >/dev/null 2>&1 ;; +2) setsid -f newsup >/dev/null && exit ;; +8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;; esac if [ ! -f /tmp/newsupdate ]; then - count=$(newsraft -e print-unread-items-count) - if [ "$count" != 0 ]; then - printf "%s\n" "$count" - fi + count=$(newsraft -e print-unread-items-count) + if [ "$count" != 0 ]; then + printf "%s\n" "$count" + fi else - cat /tmp/newsupdate 2>/dev/null + cat /tmp/newsupdate 2>/dev/null fi diff --git a/.local/bin/statusbar/sb-pacpackages b/.local/bin/statusbar/sb-pacpackages @@ -1,9 +1,9 @@ #!/bin/sh case $BLOCK_BUTTON in - 1) setsid -f "$TERMINAL" -e sb-popupgrade >/dev/null 2>&1 ;; - 2) notify-send "$(/usr/bin/pacman -Qu)" ;; - 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;; +1) setsid -f "$TERMINAL" -e sb-popupgrade >/dev/null 2>&1 ;; +2) notify-send "$(/usr/bin/pacman -Qu)" ;; +8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;; esac pacman -Qu | rg -Fcv "[ignored]" | sed "s/^//;s/^📦0$//g" diff --git a/.local/bin/sysact b/.local/bin/sysact @@ -3,17 +3,17 @@ # A mew wrapper script for system functions. export WM="sway" case "$(readlink -f /sbin/init)" in - *systemd*) ctl='systemctl' ;; - *) ctl='loginctl' ;; +*systemd*) ctl='systemctl' ;; +*) ctl='loginctl' ;; esac -wmpid(){ # This function is needed if there are multiple instances of the window manager. +wmpid() { # This function is needed if there are multiple instances of the window manager. tree="$(pstree -ps $$)" tree="${tree#*$WM(}" echo "${tree%%)*}" } -lock(){ +lock() { mpc pause pauseallmpv wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle @@ -24,13 +24,13 @@ lock(){ } case "$(printf "🔒 lock\n🚪 leave $WM\n♻️ renew $WM\n🐻 hibernate\n🔃 reboot\n🖥 shutdown\n💤 sleep\n📺 display off" | mew -i -p 'Action: ')" in - '🔒 lock') lock ;; - "🚪 leave $WM") swaymsg exit ;; - "♻️ renew $WM") swaymsg reload ;; - '🐻 hibernate') $ctl hibernate -i ;; - '💤 sleep') $ctl suspend -i ;; - '🔃 reboot') $ctl reboot -i ;; - '🖥️shutdown') $ctl poweroff -i ;; - '📺 display off') xset dpms force off ;; - *) exit 1 ;; +'🔒 lock') lock ;; +"🚪 leave $WM") swaymsg exit ;; +"♻️ renew $WM") swaymsg reload ;; +'🐻 hibernate') $ctl hibernate -i ;; +'💤 sleep') $ctl suspend -i ;; +'🔃 reboot') $ctl reboot -i ;; +'🖥️shutdown') $ctl poweroff -i ;; +'📺 display off') xset dpms force off ;; +*) exit 1 ;; esac diff --git a/.local/bin/tag b/.local/bin/tag @@ -11,19 +11,19 @@ Options: -d: year of publication -g: genre -c: comment -You will be prompted for title, artist, album and track if not given." && exit 1 ;} +You will be prompted for title, artist, album and track if not given." && exit 1; } while getopts "a:t:A:n:N:d:g:c:" o; do case "${o}" in - a) artist="${OPTARG}" ;; - t) title="${OPTARG}" ;; - A) album="${OPTARG}" ;; - n) track="${OPTARG}" ;; - N) total="${OPTARG}" ;; - d) date="${OPTARG}" ;; - g) genre="${OPTARG}" ;; - c) comment="${OPTARG}" ;; - *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;; -esac done + a) artist="${OPTARG}" ;; + t) title="${OPTARG}" ;; + A) album="${OPTARG}" ;; + n) track="${OPTARG}" ;; + N) total="${OPTARG}" ;; + d) date="${OPTARG}" ;; + g) genre="${OPTARG}" ;; + c) comment="${OPTARG}" ;; + *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;; + esac done shift $((OPTIND - 1)) @@ -40,10 +40,10 @@ trap 'rm -f $temp' HUP INT QUIT TERM PWR EXIT [ -z "$track" ] && echo 'Enter a track number.' && read -r track cp -f "$file" "$temp" && ffmpeg -i "$temp" -map 0 -y -codec copy \ - -metadata title="$title" \ - -metadata album="$album" \ - -metadata artist="$artist" \ - -metadata track="${track}${total:+/"$total"}" \ - ${date:+-metadata date="$date"} \ - ${genre:+-metadata genre="$genre"} \ - ${comment:+-metadata comment="$comment"} "$file" + -metadata title="$title" \ + -metadata album="$album" \ + -metadata artist="$artist" \ + -metadata track="${track}${total:+/"$total"}" \ + ${date:+-metadata date="$date"} \ + ${genre:+-metadata genre="$genre"} \ + ${comment:+-metadata comment="$comment"} "$file" diff --git a/.local/bin/td-toggle b/.local/bin/td-toggle @@ -2,11 +2,10 @@ # If transmission-daemon is running, will ask to kill, else will ask to start. -if pidof transmission-daemon >/dev/null ; -then - [ "$(printf "No\\nYes" | mew -i -p "Turn off transmission-daemon?")" = "Yes" ] && killall transmission-daemon && notify-send "transmission-daemon disabled." +if pidof transmission-daemon >/dev/null; then + [ "$(printf "No\\nYes" | mew -i -p "Turn off transmission-daemon?")" = "Yes" ] && killall transmission-daemon && notify-send "transmission-daemon disabled." else - ifinstalled transmission-cli || exit - [ "$(printf "No\\nYes" | mew -i -p "Turn on transmission daemon?")" = "Yes" ] && transmission-daemon && notify-send "transmission-daemon enabled." + ifinstalled transmission-cli || exit + [ "$(printf "No\\nYes" | mew -i -p "Turn on transmission daemon?")" = "Yes" ] && transmission-daemon && notify-send "transmission-daemon enabled." fi sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-i3blocks}" diff --git a/.local/bin/torwrap b/.local/bin/torwrap @@ -4,4 +4,5 @@ ifinstalled stig transmission-cli || exit 1 ! pidof transmission-daemon >/dev/null && transmission-daemon && notify-send "Starting torrent daemon..." -$TERMINAL -e stig; pkill -RTMIN+7 "${STATUSBAR:-i3blocks}" +$TERMINAL -e stig +pkill -RTMIN+7 "${STATUSBAR:-i3blocks}" diff --git a/.local/bin/unix b/.local/bin/unix @@ -3,7 +3,7 @@ #original artwork by http://www.sanderfocus.nl/#/portfolio/tech-heroes #converted to shell by #nixers @ irc.unix.chat -bat << 'eof' +bat <<'eof' ,_ ,_==▄▂ , ▂▃▄▄▅▅▅▂▅¾. / / ▄▆<´ "»▓▓▓%\ / / / / diff --git a/.local/bin/weath b/.local/bin/weath @@ -6,20 +6,20 @@ report="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport" if [ "$1" = 'cp' ]; then - # shellcheck disable=SC2015 - [ -z "$2" ] && sed 's/\x1b\[[^m]*m//g' "$report" | wl-copy && - notify-send "Weather forecast for '${LOCATION:-$(head -n 1 "$report" | cut -d' ' -f3-)}' copied to clipboard." || - { data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$2?T")" && - notify-send "Weather forecast for '$2' copied to clipboard." && - echo "$data" | wl-copy || - notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.'; } + # shellcheck disable=SC2015 + [ -z "$2" ] && sed 's/\x1b\[[^m]*m//g' "$report" | wl-copy && + notify-send "Weather forecast for '${LOCATION:-$(head -n 1 "$report" | cut -d' ' -f3-)}' copied to clipboard." || + { data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$2?T")" && + notify-send "Weather forecast for '$2' copied to clipboard." && + echo "$data" | wl-copy || + notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.'; } else - [ -n "$2" ] && - notify-send "Invalid option '$1'! The only valid option is 'cp'." && - exit 1 + [ -n "$2" ] && + notify-send "Invalid option '$1'! The only valid option is 'cp'." && + exit 1 - # shellcheck disable=SC2015 - [ -z "$1" ] && less -S "$report" || - data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$1")" && echo "$data" | less -S || - notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.' + # shellcheck disable=SC2015 + [ -z "$1" ] && less -S "$report" || + data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$1")" && echo "$data" | less -S || + notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.' fi diff --git a/rice.sh b/rice.sh @@ -2,8 +2,8 @@ set -e WORKDIRECTORY=$PWD -if [ "$(id -u)" -ne 0 ] - then printf "The script has to be run as root.\n" +if [ "$(id -u)" -ne 0 ]; then + printf "The script has to be run as root.\n" exit fi @@ -11,8 +11,8 @@ if [ -x "$(command -v doas)" ]; then PERMUSER=$DOAS_USER evalcommand="doas -u $PERMUSER" cp /etc/doas.conf /etc/doas.bak - echo "permit nopass :wheel" > /etc/doas.conf - echo "permit nopass root" >> /etc/doas.conf + echo "permit nopass :wheel" >/etc/doas.conf + echo "permit nopass root" >>/etc/doas.conf else PERMUSER=$SUDO_USER evalcommand="sudo -u $PERMUSER" @@ -24,9 +24,9 @@ run_as_user() { $evalcommand "$@" } -usermod -aG seat $PERMUSER +usermod -aG seat "$PERMUSER" -DEPLIST="`sed -e 's/#.*$//' -e '/^$/d' dependencies.txt | tr '\n' ' '`" +DEPLIST="$(sed -e 's/#.*$//' -e '/^$/d' dependencies.txt | tr '\n' ' ')" pacman -S $DEPLIST --noconfirm --needed run_as_user git submodule update --init --recursive @@ -53,14 +53,14 @@ run_as_user mkdir -p /home/"$PERMUSER"/.ssh run_as_user mkdir -p /home/"$PERMUSER"/.gnupg run_as_user touch /home/"$PERMUSER"/.gnupg/gpg-agent.conf -cat <<EOL >> /home/$PERMUSER/.gnupg/gpg-agent.conf +cat <<EOL >>/home/$PERMUSER/.gnupg/gpg-agent.conf enable-ssh-support pinentry-program /usr/bin/pinentry-gnome3 default-cache-ttl 34560000 max-cache-ttl 34560000 EOL -cat <<EOL >> /home/$PERMUSER/.config/npm/npmrc +cat <<EOL >>/home/$PERMUSER/.config/npm/npmrc prefix=\${XDG_DATA_HOME}/npm cache=\${XDG_CACHE_HOME}/npm init-module=\${XDG_CONFIG_HOME}/npm/config/npm-init.js @@ -89,7 +89,7 @@ if [ -x "$(command -v doas)" ]; then sed -i 's/#PACMAN_AUTH=.*$/PACMAN_AUTH=(doas)/' /etc/makepkg.conf fi -cat <<EOL >> /usr/share/libalpm/hooks/statusbar.hook +cat <<EOL >>/usr/share/libalpm/hooks/statusbar.hook [Trigger] Operation = Upgrade Type = Package @@ -101,7 +101,7 @@ When = PostTransaction Exec = /usr/bin/pkill -RTMIN+8 i3blocks EOL -cat <<EOL >> /etc/pacman.d/hooks/sing-box.hook +cat <<EOL >>/etc/pacman.d/hooks/sing-box.hook [Trigger] Type = Package Operation = Install @@ -118,7 +118,7 @@ run_as_user git clone https://aur.archlinux.org/paru.git cd paru run_as_user makepkg -csi --noconfirm cd "$WORKDIRECTORY" -DEPLIST="`sed -e 's/#.*$//' -e '/^$/d' aurdeps.txt | tr '\n' ' '`" +DEPLIST="$(sed -e 's/#.*$//' -e '/^$/d' aurdeps.txt | tr '\n' ' ')" run_as_user paru --sudo doas -S $DEPLIST --noconfirm run_as_user dbus-launch gsettings set org.gnome.desktop.interface gtk-theme "Gruvbox-Yellow-Dark-Medium" run_as_user dbus-launch gsettings set org.gnome.desktop.interface icon-theme "Gruvbox-Dark" @@ -158,7 +158,7 @@ config_dir="/home/$PERMUSER/.config/mpv" scriptopts_dir="$config_dir/script-opts" run_as_user mkdir -p "$config_dir/scripts" -run_as_user mkdir -p $scriptopts_dir || echo "Couldn't create: $scriptopts_dir" +run_as_user mkdir -p "$scriptopts_dir" || echo "Couldn't create: $scriptopts_dir" # thumbfast run_as_user curl -Ls -o "$config_dir/scripts/thumbfast.lua" $thumbfastlua_url || echo "Couldn't download: $thumbfastlua_url" @@ -177,7 +177,7 @@ run_as_user mv uosc.conf "$scriptopts_dir" # pam sed -i '/auth[[:space:]]*include[[:space:]]*system-local-login/a auth optional pam_gnome_keyring.so' /etc/pam.d/login sed -i '/session[[:space:]]*include[[:space:]]*system-local-login/a session optional pam_gnome_keyring.so auto_start' /etc/pam.d/login -echo "password optional pam_gnome_keyring.so" >> /etc/pam.d/passwd +echo "password optional pam_gnome_keyring.so" >>/etc/pam.d/passwd yes | run_as_user paru --sudo doas -Scc rm -rf /home/"$PERMUSER"/.cargo @@ -189,11 +189,11 @@ else rm /etc/sudoers.d/temp fi -chown -R $PERMUSER:wheel /home/$PERMUSER +chown -R "$PERMUSER":wheel /home/"$PERMUSER" # cleanup -rm -rf /home/$PERMUSER/.cache/go-build -rm -f /home/$PERMUSER/.wget-hsts +rm -rf /home/"$PERMUSER"/.cache/go-build +rm -f /home/"$PERMUSER"/.wget-hsts rm -f /home/"$PERMUSER"/uosc.zip echo "Your linux is riced!"