Compare commits

...
10 Commits
Author SHA1 Message Date
wooshings b0f907a824 helix config 2026-07-11 13:08:08 -07:00
wooshings d7e58edf09 more shit 2026-06-29 11:40:55 -07:00
wooshings aa5e8803b5 lets get it all synced 2026-05-16 16:47:42 -07:00
wooshings 671d36cabb mac desktop 2026-04-08 21:42:04 -07:00
wooshdude d920bb97c9 update some plugins 2026-03-27 21:25:52 -07:00
wooshdude e7f2f962cf Update cmp.lua 2026-03-27 10:42:56 -07:00
wooshdude e8aa90eafd switch to blink cmp 2026-03-27 00:00:36 -07:00
wooshings 6d7b4cf0b1 better support for fresh headless servers 2026-03-24 11:14:52 -07:00
wooshings cbc77f627f add 0.9 compatbility 2025-09-30 09:01:53 -07:00
wooshings 2c62cea197 make better 2025-09-29 22:49:26 -07:00
89 changed files with 10145 additions and 2452 deletions
Vendored
BIN
View File
Binary file not shown.
+187
View File
@@ -0,0 +1,187 @@
# Place a copy of this config to ~/.aerospace.toml
# After that, you can edit ~/.aerospace.toml to your liking
# Config version for compatibility and deprecations
# Fallback value (if you omit the key): config-version = 1
config-version = 2
# You can use it to add commands that run after AeroSpace startup.
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
after-startup-command = []
# Start AeroSpace at login
start-at-login = false
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
enable-normalization-flatten-containers = true
enable-normalization-opposite-orientation-for-nested-containers = true
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
# The 'accordion-padding' specifies the size of accordion padding
# You can set 0 to disable the padding feature
accordion-padding = 30
# Possible values: tiles|accordion
default-root-container-layout = 'tiles'
# Possible values: horizontal|vertical|auto
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
# tall monitor (anything higher than wide) gets vertical orientation
default-root-container-orientation = 'auto'
# Mouse follows focus when focused monitor changes
# Drop it from your config, if you don't like this behavior
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
# Fallback value (if you omit the key): on-focused-monitor-changed = []
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
# Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app
automatically-unhide-macos-hidden-apps = true
# List of workspaces that should stay alive even when they contain no windows,
# even when they are invisible.
# This config option is only available since 'config-version = 2'
# Fallback value (if you omit the key): persistent-workspaces = []
persistent-workspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
# A callback that runs every time binding mode changes
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
on-mode-changed = []
on-focus-changed = [
"exec-and-forget osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'",
]
exec-on-workspace-change = [
'/bin/zsh',
'-c',
'/usr/bin/osascript -e "tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\""',
]
# Possible values: (qwerty|dvorak|colemak)
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
[key-mapping]
preset = 'qwerty'
# Gaps between windows (inner-*) and between monitor edges (outer-*).
# Possible values:
# - Constant: gaps.outer.top = 8
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
# In this example, 24 is a default value when there is no match.
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
# See:
# https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
[gaps]
inner.horizontal = 16
inner.vertical = 16
outer.left = 12
outer.bottom = 12
outer.top = 40
outer.right = 12
# 'main' binding mode declaration
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
# 'main' binding mode must be always presented
# Fallback value (if you omit the key): mode.main.binding = {}
[mode.main.binding]
# All possible keys:
# - Letters. a, b, c, ..., z
# - Numbers. 0, 1, 2, ..., 9
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
# - F-keys. f1, f2, ..., f20
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon,
# backtick, leftSquareBracket, rightSquareBracket, space, enter, esc,
# backspace, tab, pageUp, pageDown, home, end, forwardDelete,
# sectionSign (ISO keyboards only, european keyboards only)
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
# keypadMinus, keypadMultiply, keypadPlus
# - Arrows. left, down, up, right
# All possible modifiers: cmd, alt, ctrl, shift
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
# You can uncomment the following lines to open up terminal with alt + enter shortcut
# (like in i3)
# alt-enter = '''exec-and-forget osascript -e '
# tell application "Terminal"
# do script
# activate
# end tell'
# '''
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
alt-slash = 'layout tiles horizontal vertical'
alt-comma = 'layout accordion horizontal vertical'
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
cmd-h = 'focus left'
cmd-j = 'focus down'
cmd-k = 'focus up'
cmd-l = 'focus right'
# See: https://nikitabobko.github.io/AeroSpace/commands#move
cmd-shift-h = 'move left'
cmd-shift-j = 'move down'
cmd-shift-k = 'move up'
cmd-shift-l = 'move right'
# See: https://nikitabobko.github.io/AeroSpace/commands#resize
cmd-o= 'resize smart -50'
cmd-p= 'resize smart +50'
cmd-f = "fullscreen"
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
cmd-1 = 'workspace 1'
cmd-2 = 'workspace 2'
cmd-3 = 'workspace 3'
cmd-4 = 'workspace 4'
cmd-5 = 'workspace 5'
cmd-6 = 'workspace 6'
cmd-7 = 'workspace 7'
cmd-8 = 'workspace 8'
cmd-9 = 'workspace 9'
cmd-ctrl-l ='workspace next'
cmd-ctrl-h ='workspace prev'
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
cmd-shift-1 = 'move-node-to-workspace 1'
cmd-shift-2 = 'move-node-to-workspace 2'
cmd-shift-3 = 'move-node-to-workspace 3'
cmd-shift-4 = 'move-node-to-workspace 4'
cmd-shift-5 = 'move-node-to-workspace 5'
cmd-shift-6 = 'move-node-to-workspace 6'
cmd-shift-7 = 'move-node-to-workspace 7'
cmd-shift-8 = 'move-node-to-workspace 8'
cmd-shift-9 = 'move-node-to-workspace 9'
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
cmd-tab = 'workspace-back-and-forth'
# See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor
cmd-shift-tab = 'move-workspace-to-monitor --wrap-around next'
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
cmd-shift-semicolon = 'mode service'
# 'service' binding mode declaration.
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
[mode.service.binding]
esc = ['reload-config', 'mode main']
r = ['flatten-workspace-tree', 'mode main'] # reset layout
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
backspace = ['close-all-windows-but-current', 'mode main']
# sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
#s = ['layout sticky tiling', 'mode main']
cmd-shift-h = ['join-with left', 'mode main']
cmd-shift-j = ['join-with down', 'mode main']
cmd-shift-k = ['join-with up', 'mode main']
cmd-shift-l = ['join-with right', 'mode main']
+7
View File
@@ -0,0 +1,7 @@
theme = Catppuccin Mocha
title = ""
window-padding-x = 12
window-padding-y = 8
macos-titlebar-style = hidden
mouse-hide-while-typing = true
font-size = 14
+40
View File
@@ -0,0 +1,40 @@
theme = "catppuccin_mocha"
[editor]
line-number = "relative"
mouse = false
color-modes = true
[editor.lsp]
display-inlay-hints = false
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[keys.normal]
J = [
"move_line_down",
"move_line_down",
"move_line_down",
"move_line_down",
"move_line_down"
]
K = [
"move_line_up",
"move_line_up",
"move_line_up",
"move_line_up",
"move_line_up"
]
D = [
"ensure_selections_forward",
"extend_to_line_end",
"delete_selection"
]
[keys.insert]
j = { k = "normal_mode" }
BIN
View File
Binary file not shown.
+6862
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -0,0 +1,14 @@
music_directory "~/Music"
playlist_directory "~/.mpd/playlists"
db_file "~/.mpd/database"
log_file "~/.mpd/log"
pid_file "~/.mpd/pid"
replaygain "auto"
replaygain_preamp "-10"
audio_output {
type "osx"
name "CoreAudio"
mixer_type "software"
}
+1
View File
@@ -0,0 +1 @@
77557
+6
View File
@@ -0,0 +1,6 @@
BIRDBRAIN - Jamie Paige, OK Glass.flac
BUTCHER VANITY - FLAVOR FOLEY.m4a
Spoken For - FLAVOR FOLEY.flac
Ego Renegade Boy - FLAVOR FOLEY.flac
Pull the Trigger - VocaloKAT.flac
Love Sick - Eggtan.flac
+2 -7
View File
@@ -5,12 +5,6 @@
"filetypes": ["gdscript"],
"port": 6005
},
"csharp-ls": {
"command": "csharp",
"filetypes": ["cs"],
"rootPatterns": ["*.csproj", "*.sln", ".vim/", ".git/", ".hg/"],
"semanticTokens.enable": false
}
},
"coc.preferences.formatOnSave": true,
"suggest.floatConfig": {
@@ -51,5 +45,6 @@
"coc.source.OmniSharp.shortcut": "󰆧 ",
"pyright.inlayHints.variableTypes": false,
"pyright.inlayHints.parameterTypes": false,
"pyright.inlayHints.functionReturnTypes": false
"pyright.inlayHints.functionReturnTypes": false,
"python.formatting.provider": "null"
}
+2 -5
View File
@@ -3,7 +3,7 @@ require("config.keymap")
require("config.run")
require("plugins")
local lsp = "coc"
local lsp = "mason"
-- PLUGINS
require("lazy").setup({
@@ -15,9 +15,8 @@ require("lazy").setup({
{ import = "plugins.yazi" },
{ import = "plugins.tmux_navigator" },
{ import = "plugins.lualine" },
{ import = "plugins.autopairs" },
{ import = "plugins.nvim-tree" },
{ import = "plugins.which-key" },
{ import = "plugins.mini" },
{ import = "plugins.telescope" },
{ import = "plugins.omnisharp" },
{ import = "plugins.lazydev" },
@@ -25,8 +24,6 @@ require("lazy").setup({
{ import = "plugins.cmp" },
{ import = "plugins.catppuccin" },
{ import = "plugins.barbar" },
{ import = "plugins.love2d" },
{ "tpope/vim-sleuth" },
{ "sitiom/nvim-numbertoggle" },
{ "Bilal2453/luvit-meta" },
})
+27 -40
View File
@@ -1,46 +1,33 @@
{
"LuaSnip": { "branch": "master", "commit": "33b06d72d220aa56a7ce80a0dd6f06c70cd82b9d" },
"ale": { "branch": "master", "commit": "65b49c1b8172d0ab1b08ffe8fdcabb93fc1328df" },
"auto-session": { "branch": "main", "commit": "021b64ed7d4ac68a37be3ad28d8e1cba5bec582c" },
"ale": { "branch": "master", "commit": "d0ea94323207abcdee717d76bb57b38d46055664" },
"auto-session": { "branch": "main", "commit": "6cde3874a9283c2db55627acca5f28e4fa402320" },
"barbar.nvim": { "branch": "master", "commit": "53b5a2f34b68875898f0531032fbf090e3952ad7" },
"biscuit": { "branch": "main", "commit": "4089be2d6051c41558db55bbcc227c9d0c33bb0f" },
"blink.cmp": { "branch": "main", "commit": "e16586c49309c29f238e1068546e7ba64cc15a78" },
"cmp-emoji": { "branch": "main", "commit": "e8398e2adf512a03bb4e1728ca017ffeac670a9f" },
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"conform.nvim": { "branch": "master", "commit": "f4e8837878fc5712d053ba3091a73d27d96a09e2" },
"fidget.nvim": { "branch": "main", "commit": "e2a175c2abe2d4f65357da1c98c59a5cfb2b543f" },
"gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" },
"gruvbox-baby": { "branch": "main", "commit": "bd52e62d8134647090108189e69c8b3cd18bdbbf" },
"kanagawa.nvim": { "branch": "master", "commit": "ad3dddecd606746374ba4807324a08331dfca23c" },
"lazy.nvim": { "branch": "main", "commit": "7c493713bc2cb392706866eeba53aaef6c8e9fc6" },
"lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" },
"lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" },
"luvit-meta": { "branch": "main", "commit": "57d464c4acb5c2e66bd4145060f5dc9e96a7bbb7" },
"markdown.nvim": { "branch": "master", "commit": "dfa0d2def6dbf77e9206b16dc90cad4dd23d55d2" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "8e46de9241d3997927af12196bd8faa0ed08c29a" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "c5e07b8ff54187716334d585db34282e46fa2932" },
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
"mini.nvim": { "branch": "main", "commit": "2435d0de00174a45d6b352fefeaa6008ebe9f23b" },
"neovim": { "branch": "main", "commit": "91548dca53b36dbb9d36c10f114385f759731be1" },
"nvim": { "branch": "main", "commit": "faf15ab0201b564b6368ffa47b56feefc92ce3f4" },
"nvim-autopairs": { "branch": "master", "commit": "b464658e9b880f463b9f7e6ccddd93fb0013f559" },
"nvim-cmp": { "branch": "main", "commit": "3403e2e9391ed0a28c3afddd8612701b647c8e26" },
"nvim-lspconfig": { "branch": "master", "commit": "5a812abc65d529ea7673059a348814c21d7f87ff" },
"nvim-numbertoggle": { "branch": "main", "commit": "c5827153f8a955886f1b38eaea6998c067d2992f" },
"nvim-tree.lua": { "branch": "master", "commit": "375e38673b5c61debd8074ced01cfd4f3b7ce1e9" },
"nvim-treesitter": { "branch": "master", "commit": "337b503688eccb3046547661e4c738e674548fcf" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" },
"nvim-web-devicons": { "branch": "master", "commit": "e73d2774d12d0ecf9e05578d692ba1ea50508cf2" },
"omnisharp-vim": { "branch": "master", "commit": "2205888fdcaf2b6008d115f343ddc31697a62151" },
"plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" },
"render-markdown.nvim": { "branch": "main", "commit": "e41b0002fe4196825450ab5a6343300c40791d51" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" },
"fidget.nvim": { "branch": "main", "commit": "6f793b2bcd2d35e201c09520f698bb763220908a" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "2038c666bd9d8a0b7349a0b6ee00dc83104b9ecf" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"markdown.nvim": { "branch": "master", "commit": "093be911d90de03877f3009de36081c1a6242d51" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "47059d71b42d74b0a1e9f61c1d99d301039c3b5b" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"mini.nvim": { "branch": "main", "commit": "7c2caf0ae915d819f2f39467d6bb9313c2b3e90a" },
"nvim": { "branch": "main", "commit": "e068ab5f8261f23f6f71ffd8791ae40315b77b9c" },
"nvim-lspconfig": { "branch": "master", "commit": "3371bf298c1f56efc26771ee961f461176958fb5" },
"nvim-numbertoggle": { "branch": "main", "commit": "704e098c7f056f0dae9407d8651edd3d183f3fff" },
"nvim-treesitter": { "branch": "master", "commit": "cf12346a3414fa1b06af75c79faebe7f76df080a" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"omnisharp-vim": { "branch": "master", "commit": "1e1d65e05ad2bd466851246654d28c91864ab2e7" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"render-markdown.nvim": { "branch": "main", "commit": "f422cb5c6855f150e2ddcfaf44e7157b98b34f6a" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vim-tmux-navigator": { "branch": "master", "commit": "424b5caa154bff34dc258ee53cec5a8e36cf7ea8" },
"which-key.nvim": { "branch": "main", "commit": "9b365a6428a9633e3eeb34dbef1b791511c54f70" },
"yazi.nvim": { "branch": "main", "commit": "ce6b5b249cde9e4a27dfce18a6adb57c170d4325" }
"vim-tmux-navigator": { "branch": "master", "commit": "e41c431a0c7b7388ae7ba341f01a0d217eb3a432" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
"yazi.nvim": { "branch": "main", "commit": "4c375ea7e9396f6210436a654a8f185562a95ece" }
}
+1 -1
View File
@@ -10,7 +10,7 @@ vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, { desc = "Open diagn
vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>:bd!<CR>", { desc = "Exit terminal mode", silent = true })
-- Exit insert mode
vim.keymap.set("i", "jj", "<Esc>", { desc = "Exit insert mode", silent = true })
vim.keymap.set("i", "jk", "<Esc>", { desc = "Exit insert mode", silent = true })
-- Vertical navigation
vim.keymap.set("n", "<S-j>", "5j", { desc = "Jump ten spaces down", silent = true })
+11
View File
@@ -30,3 +30,14 @@ new_run_command("go run .", "go", "Run Go Project")
new_run_command("cargo run", "rust", "Cargo run")
new_run_command("uv run main.py", "python", "Run Python Project")
new_run_command("dotnet run Project.cs", "cs", "Run Dotnet Project")
vim.api.nvim_create_autocmd("BufRead", {
pattern = "*.jsx",
command = "set filetype=javascriptreact"
})
vim.api.nvim_create_autocmd("BufRead", {
pattern = "*.tsx",
command = "set filetype=typescriptreact"
})
@@ -0,0 +1,59 @@
return {
"saghen/blink.pairs",
version = "*", -- (recommended) only required with prebuilt binaries
-- download prebuilt binaries from github releases
dependencies = "saghen/blink.download",
-- OR build from source, requires nightly:
-- https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust
-- build = 'cargo build --release',
-- If you use nix, you can build from source using latest nightly rust with:
-- build = 'nix run .#build-plugin',
--- @module 'blink.pairs'
--- @type blink.pairs.Config
opts = {
mappings = {
-- you can call require("blink.pairs.mappings").enable()
-- and require("blink.pairs.mappings").disable()
-- to enable/disable mappings at runtime
enabled = true,
cmdline = true,
-- or disable with `vim.g.pairs = false` (global) and `vim.b.pairs = false` (per-buffer)
-- and/or with `vim.g.blink_pairs = false` and `vim.b.blink_pairs = false`
disabled_filetypes = {},
wrap = {
-- move closing pair via motion
["<C-b>"] = "motion",
-- move opening pair via motion
["<C-S-b>"] = "motion_reverse",
-- set to 'treesitter' or 'treesitter_reverse' to use treesitter instead of motions
-- set to nil, '' or false to disable the mapping
-- normal_mode = {} <- for normal mode mappings, only supports 'motion' and 'motion_reverse'
},
-- see the defaults:
-- https://github.com/Saghen/blink.pairs/blob/main/lua/blink/pairs/config/mappings.lua#L52
pairs = {},
},
highlights = {
enabled = true,
-- requires require('vim._extui').enable({}), otherwise has no effect
cmdline = true,
-- set to { 'BlinkPairs' } to disable rainbow highlighting
groups = { "BlinkPairsOrange", "BlinkPairsPurple", "BlinkPairsBlue" },
unmatched_group = "BlinkPairsUnmatched",
-- highlights matching pairs under the cursor
matchparen = {
enabled = true,
-- known issue where typing won't update matchparen highlight, disabled by default
cmdline = false,
-- also include pairs not on top of the cursor, but surrounding the cursor
include_surrounding = false,
group = "BlinkPairsMatchParen",
priority = 250,
},
},
debug = false,
},
}
+76 -123
View File
@@ -29,133 +29,86 @@ local cmp_kinds = {
vim.o.pumheight = 12
return {
{
"hrsh7th/nvim-cmp",
outs = function(_, opts)
table.insert(opts.sources, {
{ name = "emoji" },
{ name = "orgmode" },
})
local cmp = require("cmp")
opts.window = {
completion = cmp.config.window.bordered({}),
documentation = cmp.config.window.bordered({}),
}
-- Set view to follow cursor while typing
opts.view = {
entries = {
follow_cursor = true,
},
}
end,
event = "InsertEnter",
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
{
"L3MON4D3/LuaSnip",
build = (function()
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then
return
end
return "make install_jsregexp"
end)(),
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
-- {
-- 'rafamadriz/friendly-snippets',
-- config = function()
-- require('luasnip.loaders.from_vscode').lazy_load()
-- end,
-- },
"saghen/blink.cmp",
-- optional: provides snippets for the snippet source
dependencies = { "rafamadriz/friendly-snippets" },
-- use a release tag to download pre-built binaries
version = "1.*",
-- AND/OR build from source
-- build = 'cargo build --release',
-- If you use nix, you can build from source with:
-- build = 'nix run .#build-plugin',
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
-- 'default' (recommended) for mappings similar to built-in completions (C-y to accept)
-- 'super-tab' for mappings similar to vscode (tab to accept)
-- 'enter' for enter to accept
-- 'none' for no mappings
--
-- All presets have the following mappings:
-- C-space: Open menu or open docs if already open
-- C-n/C-p or Up/Down: Select next/previous item
-- C-e: Hide menu
-- C-k: Toggle signature help (if signature.enabled = true)
--
-- See :h blink-cmp-config-keymap for defining your own keymap
keymap = {
preset = "none",
["<C-k>"] = { "select_prev", "fallback" },
["<C-j>"] = { "select_next", "fallback" },
["<Up>"] = { "select_prev", "fallback" },
["<Down>"] = { "select_next", "fallback" },
["<C-i>"] = { "show_signature", "hide_signature", "fallback" },
["<Tab>"] = { "accept", "fallback" },
},
signature = {
enabled = false,
},
appearance = {
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = "mono",
kind_icons = cmp_kinds,
highlight_ns = vim.api.nvim_create_namespace("blink_cmp"),
},
-- (Default) Only show the documentation popup when manually triggered
completion = {
documentation = { auto_show = true },
menu = {
min_width = 8,
draw = {
columns = { { "kind_icon" }, { "label", gap = 1 } },
components = {
label = {
width = { fill = true, max = 20 },
text = function(ctx)
return ctx.label
end,
},
},
treesitter = { "lsp" },
},
},
"saadparwaiz1/cmp_luasnip",
-- Adds other completion capabilities.
-- nvim-cmp does not ship with all sources by default. They are split
-- into multiple repos for maintenance purposes.
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-path",
"hrsh7th/cmp-emoji",
},
config = function()
-- See `:help cmp`
local cmp = require("cmp")
local luasnip = require("luasnip")
luasnip.config.setup({})
cmp.setup({
formatting = {
fields = { "abbr", "kind" },
format = function(_, vim_item)
vim_item.kind = cmp_kinds[vim_item.kind] or ""
return vim_item
end,
},
window = {
completion = {
winhighlight = "Normal:Pmenu,CursorLine:PmenuSel,Search:None",
scrollbar = true,
col_offset = -3,
side_padding = 1,
},
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
completion = { completeopt = "menu,menuone,noinsert" },
-- Default list of enabled providers defined so that you can extend it
-- elsewhere in your config, without redefining it, due to `opts_extend`
sources = {
default = { "lsp", "path", "snippets", "buffer" },
},
mapping = cmp.mapping.preset.insert({
-- Select the [n]ext item
["<C-j>"] = cmp.mapping.select_next_item(),
-- Select the [p]revious item
["<C-k>"] = cmp.mapping.select_prev_item(),
-- Scroll the documentation window [b]ack / [f]orward
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
-- Accept ([y]es) the completion.
-- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet.
["<tab>"] = cmp.mapping.confirm({ select = true }),
["<C-Space>"] = cmp.mapping.complete({}),
-- <c-l> will move you to the right of each of the expansion locations.
-- <c-h> is similar, except moving you backwards.
["<C-l>"] = cmp.mapping(function()
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end
end, { "i", "s" }),
["<C-h>"] = cmp.mapping(function()
if luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
end
end, { "i", "s" }),
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
}),
sources = {
{
name = "lazydev",
-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
group_index = 0,
},
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "path" },
},
})
end,
-- (Default) Rust fuzzy matcher for typo resistance and significantly better performance
-- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation,
-- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"`
--
-- See the fuzzy documentation for more information
fuzzy = { implementation = "lua" },
},
opts_extend = { "sources.default" },
}
+1
View File
@@ -1,5 +1,6 @@
-- [[ Install `lazy.nvim` plugin manager ]]
-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
vim.uv = vim.uv or vim.loop
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.uv.fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
+20 -20
View File
@@ -1,24 +1,24 @@
return {
{ -- Collection of various small independent plugins/modules
"echasnovski/mini.nvim",
config = function()
-- Better Around/Inside textobjects
--
-- Examples:
-- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
-- - ci' - [C]hange [I]nside [']quote
require("mini.ai").setup({ n_lines = 500 })
{ -- Collection of various small independent plugins/modules
"nvim-mini/mini.nvim",
config = function()
-- Better Around/Inside textobjects
--
-- Examples:
-- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
-- - ci' - [C]hange [I]nside [']quote
require("mini.ai").setup({ n_lines = 500 })
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require("mini.surround").setup()
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require("mini.surround").setup()
require("mini.pairs").setup()
-- ... and there is more!
-- Check out: https://github.com/echasnovski/mini.nvim
end,
},
--require("mini.animate").setup()
end,
},
}
+30 -43
View File
@@ -1,45 +1,32 @@
return {
{ "nvim-treesitter/nvim-treesitter-textobjects" },
{ -- Highlight, edit, and navigate code
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
opts = {
ensure_installed = {
"bash",
"c",
"diff",
"html",
"lua",
"luadoc",
"markdown",
"markdown_inline",
"query",
"vim",
"vimdoc",
},
-- Autoinstall languages that are not installed
auto_install = true,
highlight = {
enable = true,
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
-- If you are experiencing weird indenting issues, add the language to
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
additional_vim_regex_highlighting = { "ruby" },
},
indent = { enable = true, disable = { "ruby" } },
},
config = function(_, opts)
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
---@diagnostic disable-next-line: missing-fields
require("nvim-treesitter.configs").setup(opts)
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
end,
},
{
"nvim-treesitter/nvim-treesitter",
branch = "main",
build = ":TSUpdate",
opts = {
ensure_installed = {
"bash",
"c",
"diff",
"html",
"lua",
"luadoc",
"markdown",
"markdown_inline",
"query",
"vim",
"vimdoc",
},
auto_install = true,
highlight = {
enable = true,
additional_vim_regex_highlighting = { "ruby" },
},
indent = { enable = true, disable = { "ruby" } },
},
config = function(_, opts)
---@diagnostic disable-next-line: missing-fields
require("nvim-treesitter.configs").setup(opts)
end,
},
}
Submodule qutebrowser/.qutebrowser/catppuccin added at 808adc3d7d
+9
View File
@@ -0,0 +1,9 @@
import catppuccin
# load your autoconfig, use this, if the rest of your config is empty!
config.load_autoconfig()
# set the flavor you'd like to use
# valid options are 'mocha', 'macchiato', 'frappe', and 'latte'
# last argument (optional, default is False): enable the plain look for the menu rows
catppuccin.setup(c, 'mocha', False)
+1
View File
@@ -0,0 +1 @@
oo https://www.youtube.com/
+312
View File
@@ -0,0 +1,312 @@
#!/usr/bin/env python3
# SPDX-FileCopyrightText: Chris Braun (cryzed) <cryzed@googlemail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""
Insert login information using Bitwarden CLI and a dmenu-compatible application
(e.g. dmenu, rofi -dmenu, ...).
"""
import tldextract
import json
import sys
import subprocess
import shlex
import os
import functools
import enum
import argparse
USAGE = """The domain of the site has to be in the name of the Bitwarden entry, for example: "github.com/cryzed" or
"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner:
[USERNAME]<Tab>[PASSWORD], which is compatible with almost all login forms.
If enabled, with the `--totp` flag, it will also move the TOTP code to the
clipboard, much like the Firefox add-on.
You must log into Bitwarden CLI using `bw login` prior to use of this script.
The session key will be stored using keyctl for the number of seconds passed to
the --auto-lock option.
To use in qutebrowser, run: `spawn --userscript qute-bitwarden`
"""
EPILOG = """Dependencies: tldextract (Python 3 module), pyperclip (optional
Python module, used for TOTP codes), Bitwarden CLI (1.7.4 is known to work
but older versions may well also work)
WARNING: The login details are viewable as plaintext in qutebrowser's debug log
(qute://log) and might be shared if you decide to submit a crash report!"""
argument_parser = argparse.ArgumentParser(
description=__doc__,
usage=USAGE,
epilog=EPILOG,
)
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu -i -p Bitwarden',
help='Invocation used to execute a dmenu-provider')
argument_parser.add_argument('--password-prompt-invocation', '-p', default='rofi -dmenu -p "Master Password" -password -lines 0',
help='Invocation used to prompt the user for their Bitwarden password')
argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false',
help="Don't automatically enter insert mode")
argument_parser.add_argument('--totp', '-t', action='store_true',
help="Copy TOTP key to clipboard")
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
help='Encoding used to communicate with subprocesses')
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
help='Merge pass candidates for fully-qualified and registered domain name')
argument_parser.add_argument('--auto-lock', type=int, default=900,
help='Automatically lock the vault after this many seconds')
group = argument_parser.add_mutually_exclusive_group()
group.add_argument('--username-only', '-e',
action='store_true', help='Only insert username')
group.add_argument('--password-only', '-w',
action='store_true', help='Only insert password')
group.add_argument('--totp-only', '-T',
action='store_true', help='Only insert totp code')
stderr = functools.partial(print, file=sys.stderr)
class ExitCodes(enum.IntEnum):
SUCCESS = 0
FAILURE = 1
# 1 is automatically used if Python throws an exception
NO_PASS_CANDIDATES = 2
COULD_NOT_MATCH_USERNAME = 3
COULD_NOT_MATCH_PASSWORD = 4
def qute_command(command):
with open(os.environ['QUTE_FIFO'], 'w') as fifo:
fifo.write(command + '\n')
fifo.flush()
def ask_password(password_prompt_invocation):
process = subprocess.run(
shlex.split(password_prompt_invocation),
text=True,
stdout=subprocess.PIPE,
)
if process.returncode > 0:
raise Exception('Could not unlock vault')
master_pass = process.stdout.strip()
return subprocess.check_output(
['bw', 'unlock', '--raw', '--passwordenv', 'BW_MASTERPASS'],
env={**os.environ, 'BW_MASTERPASS': master_pass},
text=True,
).strip()
def get_session_key(auto_lock, password_prompt_invocation):
if auto_lock == 0:
subprocess.call(['keyctl', 'purge', 'user', 'bw_session'])
return ask_password(password_prompt_invocation)
else:
process = subprocess.run(
['keyctl', 'request', 'user', 'bw_session'],
text=True,
stdout=subprocess.PIPE,
)
key_id = process.stdout.strip()
if process.returncode > 0:
session = ask_password(password_prompt_invocation)
if not session:
raise Exception('Could not unlock vault')
key_id = subprocess.check_output(
['keyctl', 'add', 'user', 'bw_session', session, '@u'],
text=True,
).strip()
if auto_lock > 0:
subprocess.call(['keyctl', 'timeout', str(key_id), str(auto_lock)])
return subprocess.check_output(
['keyctl', 'pipe', str(key_id)],
text=True,
).strip()
def pass_(domain, encoding, auto_lock, password_prompt_invocation):
session_key = get_session_key(auto_lock, password_prompt_invocation)
process = subprocess.run(
['bw', 'list', 'items', '--nointeraction',
'--session', session_key, '--url', domain],
capture_output=True,
)
err = process.stderr.decode(encoding).strip()
if err:
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain, err)
stderr(msg)
if "Vault is locked" in err:
stderr("Bitwarden Vault got locked, trying again with clean session")
return pass_(domain, encoding, 0, password_prompt_invocation)
if process.returncode:
return '[]'
out = process.stdout.decode(encoding).strip()
return out
def get_totp_code(selection_id, domain_name, encoding, auto_lock, password_prompt_invocation):
session_key = get_session_key(auto_lock, password_prompt_invocation)
process = subprocess.run(
['bw', 'get', 'totp', '--nointeraction',
'--session', session_key, selection_id],
capture_output=True,
)
err = process.stderr.decode(encoding).strip()
if err:
# domain_name instead of selection_id to make it more user-friendly
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain_name, err)
stderr(msg)
if "Vault is locked" in err:
stderr("Bitwarden Vault got locked, trying again with clean session")
return get_totp_code(selection_id, domain_name, encoding, 0, password_prompt_invocation)
if process.returncode:
return '[]'
out = process.stdout.decode(encoding).strip()
return out
def dmenu(items, invocation, encoding):
command = shlex.split(invocation)
process = subprocess.run(command, input='\n'.join(
items).encode(encoding), stdout=subprocess.PIPE)
return process.stdout.decode(encoding).strip()
def fake_key_raw(text):
for character in text:
# Escape all characters by default, space requires special handling
sequence = '" "' if character == ' ' else r'\{}'.format(character)
qute_command('fake-key {}'.format(sequence))
def main(arguments):
if not arguments.url:
argument_parser.print_help()
return ExitCodes.FAILURE
extract_result = tldextract.extract(arguments.url)
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
# the registered domain name and finally: the IPv4 address if that's what
# the URL represents
candidates = []
for target in filter(
None,
[
extract_result.fqdn,
(
extract_result.top_domain_under_public_suffix
if hasattr(extract_result, "top_domain_under_public_suffix")
else extract_result.registered_domain
),
extract_result.subdomain + "." + extract_result.domain,
extract_result.domain,
extract_result.ipv4,
],
):
target_candidates = json.loads(
pass_(
target,
arguments.io_encoding,
arguments.auto_lock,
arguments.password_prompt_invocation,
)
)
if not target_candidates:
continue
candidates = candidates + target_candidates
if not arguments.merge_candidates:
break
else:
if not candidates:
stderr('No pass candidates for URL {!r} found!'.format(
arguments.url))
return ExitCodes.NO_PASS_CANDIDATES
if len(candidates) == 1:
selection = candidates.pop()
else:
choices = ['{:s} | {:s}'.format(
c['name'], c['login']['username']) for c in candidates]
choice = dmenu(choices, arguments.dmenu_invocation,
arguments.io_encoding)
choice_tokens = choice.split('|')
choice_name = choice_tokens[0].strip()
choice_username = choice_tokens[1].strip()
selection = next((c for (i, c) in enumerate(candidates)
if c['name'] == choice_name
and c['login']['username'] == choice_username),
None)
# Nothing was selected, simply return
if not selection:
return ExitCodes.SUCCESS
username = selection['login']['username']
password = selection['login']['password']
totp = selection['login']['totp']
if arguments.username_only:
fake_key_raw(username)
elif arguments.password_only:
fake_key_raw(password)
elif arguments.totp_only:
# No point in moving it to the clipboard in this case
fake_key_raw(
get_totp_code(
selection['id'],
selection['name'],
arguments.io_encoding,
arguments.auto_lock,
arguments.password_prompt_invocation,
)
)
else:
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
# back into insert-mode, so the form can be directly submitted by
# hitting enter afterwards
fake_key_raw(username)
qute_command('fake-key <Tab>')
fake_key_raw(password)
if arguments.insert_mode:
qute_command('mode-enter insert')
# If it finds a TOTP code, it copies it to the clipboard,
# which is the same behavior as the Firefox add-on.
if not arguments.totp_only and totp and arguments.totp:
# The import is done here, to make pyperclip an optional dependency
import pyperclip
pyperclip.copy(
get_totp_code(
selection['id'],
selection['name'],
arguments.io_encoding,
arguments.auto_lock,
arguments.password_prompt_invocation,
)
)
return ExitCodes.SUCCESS
if __name__ == '__main__':
arguments = argument_parser.parse_args()
sys.exit(main(arguments))
+28
View File
@@ -0,0 +1,28 @@
### SketchyBar
This sketchybar setup is insipred by Praveen Gongada's
[setup](https://github.com/PraveenGongada/dotfiles/tree/main/sketchybar)
##### Installation
```bash
brew install felixkratz/formulae/sketchybar
brew install jq
brew install font-sf-pro
brew install --cask sf-symbols
curl -L https://github.com/kvndrsslr/sketchybar-app-font/releases/download/v2.0.40/sketchybar-app-font.ttf -o $HOME/Library/Fonts/sketchybar-app-font.ttf
curl -L https://github.com/kvndrsslr/sketchybar-app-font/releases/download/v2.0.40/icon_map.sh -o $HOME/.config/sketchybar/icon_map.sh
```
##### Mitigation of some common problems that I faced
1) Praveen using version 1 of the config (needs to be declared coreclty in the sketchybarrc).
2) All the script must be user executable.
3) For `after-start-up` command in the `aerospace.toml` to start `borders` and `sketchybar`, prefer keeping all the three bin files in the same bin folder. For me this was
in `/opt/homebrew/bin` (on one machine that have). On the other even though
files were on different paths, `sketchybar` worked with `brew services star`
after I loaded `aerospace`.
4) Also in the aerospace.toml, wherever `sketchybar` or `borders` are
referenced, the full path must be used. The newer version of the config
supports `[exec.env-vars]` to set the path. Here I am just using the dirty way
of supplying the full path wherever needed.
-10
View File
@@ -1,10 +0,0 @@
local colors = require("colors")
-- Equivalent to the --bar domain
sbar.bar({
topmost = "window",
height = 50,
color = colors.bar.bg,
padding_right = 3,
padding_left = 3,
})
-28
View File
@@ -1,28 +0,0 @@
return {
black = 0xff25273A,
white = 0xffb5c9ff,
red = 0xffFF6C8D,
green = 0xff90D05A,
blue = 0xff6EA3FE,
yellow = 0xffE9AD5B,
orange = 0xffFF9856,
magenta = 0xffC198FD,
grey = 0xff9AA9D9,
transparent = 0x00000000,
bar = {
bg = 0x00ffffff,
border = 0x00ffffff,
},
popup = {
bg = 0xee25273A,
border = 0xff1E2030,
},
bg1 = 0xff25273A,
bg2 = 0xff1E2030,
with_alpha = function(color, alpha)
if alpha > 1.0 or alpha < 0.0 then return color end
return (color & 0x00ffffff) | (math.floor(alpha * 255.0) << 24)
end,
}
-52
View File
@@ -1,52 +0,0 @@
local settings = require("settings")
local colors = require("colors")
-- Equivalent to the --default domain
sbar.default({
updates = "when_shown",
icon = {
font = {
family = settings.font.text,
style = settings.font.style_map["Bold"],
size = 14.0
},
color = colors.white,
padding_left = settings.paddings,
padding_right = settings.paddings,
background = { image = { corner_radius = 9 } },
},
label = {
font = {
family = settings.font.text,
style = settings.font.style_map["Semibold"],
size = 13.0
},
color = colors.white,
padding_left = settings.paddings,
padding_right = settings.paddings,
},
background = {
height = 34,
corner_radius = 12,
border_width = 0,
border_color = colors.bg2,
image = {
corner_radius = 9,
border_color = colors.grey,
border_width = 0
}
},
popup = {
background = {
border_width = 0,
corner_radius = 9,
border_color = colors.popup.border,
color = colors.popup.bg,
shadow = { drawing = true },
},
blur_radius = 50,
},
padding_left = 5,
padding_right = 5,
scroll_texts = true,
})
@@ -0,0 +1 @@
icon_map.sh
@@ -0,0 +1,43 @@
#!/bin/bash
export TRANSPARENT=0x00ffffff
# -- Catpuccin Scheme --
export ITEM_COLOR=0xff1e1e2e
export ACCENT_COLOR=0xffcba6f7
# -- Gray Scheme --
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xffc3c6cb
# -- White Scheme --
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xffffffff
# -- Teal Scheme --
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xff2cf9ed
# -- Purple Scheme --
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xffeb46f9
# -- Red Scheme ---
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xffff2453
# -- Blue Scheme ---
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xff15bdf9
# -- Green Scheme --
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xff1dfca1
# -- Orange Scheme --
# export ITEM_COLOR=0xffffffff
# export ACCENT_COLOR=0xfff97716
# -- Yellow Scheme --
# export ITEM_COLOR=0xff000000
# export ACCENT_COLOR=0xfff7fc17
@@ -0,0 +1,926 @@
#!/usr/bin/env bash
### START-OF-ICON-MAP
function __icon_map() {
case "$1" in
"Live")
icon_result=":ableton:"
;;
"Activity Monitor" | "Aktivitätsanzeige")
icon_result=":activity_monitor:"
;;
"Adobe Bridge"*)
icon_result=":adobe_bridge:"
;;
"Affinity Designer")
icon_result=":affinity_designer:"
;;
"Affinity Designer 2")
icon_result=":affinity_designer_2:"
;;
"Affinity Photo")
icon_result=":affinity_photo:"
;;
"Affinity Photo 2")
icon_result=":affinity_photo_2:"
;;
"Affinity Publisher")
icon_result=":affinity_publisher:"
;;
"Affinity Publisher 2")
icon_result=":affinity_publisher_2:"
;;
"Airmail")
icon_result=":airmail:"
;;
"AirPort Utility")
icon_result=":airport_utility:"
;;
"Alacritty")
icon_result=":alacritty:"
;;
"Alfred")
icon_result=":alfred:"
;;
"Android Messages")
icon_result=":android_messages:"
;;
"Android Studio")
icon_result=":android_studio:"
;;
"Anki")
icon_result=":anki:"
;;
"Anytype")
icon_result=":anytype:"
;;
"Apifox")
icon_result=":apifox:"
;;
"App Eraser")
icon_result=":app_eraser:"
;;
"App Store")
icon_result=":app_store:"
;;
"Arc")
icon_result=":arc:"
;;
"Arduino" | "Arduino IDE")
icon_result=":arduino:"
;;
"Atom")
icon_result=":atom:"
;;
"Audacity")
icon_result=":audacity:"
;;
"Bambu Studio")
icon_result=":bambu_studio:"
;;
"MoneyMoney")
icon_result=":bank:"
;;
"Battle.net")
icon_result=":battle_net:"
;;
"Bazecor")
icon_result=":bazecor:"
;;
"Bear")
icon_result=":bear:"
;;
"BetterTouchTool")
icon_result=":bettertouchtool:"
;;
"Bilibili" | "哔哩哔哩")
icon_result=":bilibili:"
;;
"Bitwarden")
icon_result=":bit_warden:"
;;
"Blender")
icon_result=":blender:"
;;
"Blitzit")
icon_result=":blitzit:"
;;
"BluOS Controller")
icon_result=":bluos_controller:"
;;
"Books" | "Calibre" | "Bücher")
icon_result=":book:"
;;
"Brave Browser")
icon_result=":brave_browser:"
;;
"Bruno")
icon_result=":bruno:"
;;
"BusyCal")
icon_result=":busycal:"
;;
"Calculator" | "Calculette" | "Rechner")
icon_result=":calculator:"
;;
"Calendar" | "日历" | "Fantastical" | "Cron" | "Amie" | "Calendrier" | "カレンダー" | "Notion Calendar" | "Kalender")
icon_result=":calendar:"
;;
"calibre")
icon_result=":calibre:"
;;
"Capacities")
icon_result=":capacities:"
;;
"Caprine")
icon_result=":caprine:"
;;
"Amazon Chime")
icon_result=":chime:"
;;
"Cisco AnyConnect Secure Mobility Client" | "Cisco Secure Client")
icon_result=":cisco_anyconnect:"
;;
"Citrix Workspace" | "Citrix Viewer")
icon_result=":citrix:"
;;
"Claude")
icon_result=":claude:"
;;
"ClickUp")
icon_result=":click_up:"
;;
"Code" | "Code - Insiders")
icon_result=":code:"
;;
"Cold Turkey Blocker")
icon_result=":cold_turkey_blocker:"
;;
"Color Picker" | "数码测色计")
icon_result=":color_picker:"
;;
"Copilot")
icon_result=":copilot:"
;;
"CotEditor")
icon_result=":coteditor:"
;;
"Creative Cloud")
icon_result=":creative_cloud:"
;;
"Cursor")
icon_result=":cursor:"
;;
"Cypress")
icon_result=":cypress:"
;;
"DataGrip")
icon_result=":datagrip:"
;;
"DataSpell")
icon_result=":dataspell:"
;;
"DaVinci Resolve")
icon_result=":davinciresolve:"
;;
"DBeaver")
icon_result=":dbeaver:"
;;
"DeepSeek")
icon_result=":deepseek:"
;;
"Deezer")
icon_result=":deezer:"
;;
"Default")
icon_result=":default:"
;;
"deno")
icon_result=":deno:"
;;
"CleanMyMac X")
icon_result=":desktop:"
;;
"DEVONthink 3")
icon_result=":devonthink3:"
;;
"Dexcom")
icon_result=":dexcom:"
;;
"Dia")
icon_result=":dia:"
;;
"DingTalk" | "钉钉" | "阿里钉")
icon_result=":dingtalk:"
;;
"Discord" | "Discord Canary" | "Discord PTB")
icon_result=":discord:"
;;
"Docker" | "Docker Desktop")
icon_result=":docker:"
;;
"GrandTotal" | "Receipts")
icon_result=":dollar:"
;;
"Double Commander")
icon_result=":doublecmd:"
;;
"Drafts")
icon_result=":drafts:"
;;
"draw.io")
icon_result=":draw_io:"
;;
"Dropbox")
icon_result=":dropbox:"
;;
"Element")
icon_result=":element:"
;;
"Emacs")
icon_result=":emacs:"
;;
"Evernote Legacy")
icon_result=":evernote_legacy:"
;;
"FaceTime" | "FaceTime 通话")
icon_result=":face_time:"
;;
"Feishu")
icon_result=":feishu:"
;;
"Figma")
icon_result=":figma:"
;;
"Final Cut Pro")
icon_result=":final_cut_pro:"
;;
"Finder" | "访达")
icon_result=":finder:"
;;
"Firefox")
icon_result=":firefox:"
;;
"Firefox Developer Edition" | "Firefox Nightly")
icon_result=":firefox_developer_edition:"
;;
"FL Studio")
icon_result=":flstudio:"
;;
"Folx")
icon_result=":folx:"
;;
"Fork")
icon_result=":fork:"
;;
"Foxit PDF Reader")
icon_result=":foxit_reader:"
;;
"Freeform")
icon_result=":freeform:"
;;
"FreeTube")
icon_result=":freetube:"
;;
"Fusion")
icon_result=":fusion:"
;;
"System Preferences" | "System Settings" | "系统设置" | "Réglages Système" | "システム設定" | "Systemeinstellungen" | "System­einstellungen")
icon_result=":gear:"
;;
"Ghostty")
icon_result=":ghostty:"
;;
"GitHub Desktop")
icon_result=":git_hub:"
;;
"Godot")
icon_result=":godot:"
;;
"GoLand")
icon_result=":goland:"
;;
"Goodnotes")
icon_result=":goodnotes:"
;;
"Chromium" | "Google Chrome" | "Google Chrome Canary")
icon_result=":google_chrome:"
;;
"Grammarly Editor")
icon_result=":grammarly:"
;;
"Granola")
icon_result=":granola:"
;;
"Helium")
icon_result=":helium:"
;;
"Home Assistant")
icon_result=":home_assistant:"
;;
"Hyper")
icon_result=":hyper:"
;;
"IntelliJ IDEA")
icon_result=":idea:"
;;
"IINA")
icon_result=":iina:"
;;
"Adobe Illustrator"* | "Illustrator")
icon_result=":illustrator:"
;;
"Adobe InDesign"* | "InDesign")
icon_result=":indesign:"
;;
"Infuse")
icon_result=":infuse:"
;;
"Inkdrop")
icon_result=":inkdrop:"
;;
"Inkscape")
icon_result=":inkscape:"
;;
"Insomnia")
icon_result=":insomnia:"
;;
"iPhone Mirroring")
icon_result=":iphone_mirroring:"
;;
"Iris")
icon_result=":iris:"
;;
"iTerm" | "iTerm2")
icon_result=":iterm:"
;;
"Jellyfin Media Player")
icon_result=":jellyfin:"
;;
"JetBrains Gateway")
icon_result=":jetbrains_gateway:"
;;
"JetBrains Toolbox")
icon_result=":jetbrains_toolbox:"
;;
"Joplin")
icon_result=":joplin:"
;;
"카카오톡" | "KakaoTalk")
icon_result=":kakaotalk:"
;;
"Kakoune")
icon_result=":kakoune:"
;;
"KeePassXC")
icon_result=":kee_pass_x_c:"
;;
"Keyboard Maestro")
icon_result=":keyboard_maestro:"
;;
"Keynote" | "Keynote 讲演")
icon_result=":keynote:"
;;
"Kiro")
icon_result=":kiro:"
;;
"kitty")
icon_result=":kitty:"
;;
"Kodi")
icon_result=":kodi:"
;;
"LanguageTool for Desktop")
icon_result=":languagetool_for_desktop:"
;;
"League of Legends")
icon_result=":league_of_legends:"
;;
"LibreWolf")
icon_result=":libre_wolf:"
;;
"LibreOffice")
icon_result=":libreoffice:"
;;
"Adobe Lightroom")
icon_result=":lightroom:"
;;
"Lightroom Classic")
icon_result=":lightroomclassic:"
;;
"LINE")
icon_result=":line:"
;;
"Linear")
icon_result=":linear:"
;;
"LM Studio")
icon_result=":lm_studio:"
;;
"LocalSend")
icon_result=":localsend:"
;;
"Logic Pro")
icon_result=":logicpro:"
;;
"Logseq")
icon_result=":logseq:"
;;
"Canary Mail" | "HEY" | "Mail" | "Mailspring" | "MailMate" | "Superhuman" | "Spark" | "邮件" | "メール")
icon_result=":mail:"
;;
"MAMP" | "MAMP PRO")
icon_result=":mamp:"
;;
"Maps" | "Google Maps" | "マップ" | "Karten")
icon_result=":maps:"
;;
"Marta")
icon_result=":marta:"
;;
"Matlab" | "MATLABWindow" | "MATLAB_R2024b" | "MATLAB_R2024a" | "MATLAB_R2023b" | "MATLAB_R2023a" | "MATLAB_R2022b" | "MATLAB_R2022a" | "MATLAB_R2021b" | "MATLAB_R2021a")
icon_result=":matlab:"
;;
"Mattermost")
icon_result=":mattermost:"
;;
"Google Meet")
icon_result=":meet:"
;;
"Messages" | "信息" | "Nachrichten" | "メッセージ")
icon_result=":messages:"
;;
"Messenger")
icon_result=":messenger:"
;;
"Microsoft Edge")
icon_result=":microsoft_edge:"
;;
"Microsoft Excel")
icon_result=":microsoft_excel:"
;;
"Microsoft Outlook")
icon_result=":microsoft_outlook:"
;;
"Microsoft PowerPoint")
icon_result=":microsoft_power_point:"
;;
"Microsoft Remote Desktop")
icon_result=":microsoft_remote_desktop:"
;;
"Microsoft Teams" | "Microsoft Teams (work or school)")
icon_result=":microsoft_teams:"
;;
"Microsoft Word")
icon_result=":microsoft_word:"
;;
"Min")
icon_result=":min_browser:"
;;
"Miro")
icon_result=":miro:"
;;
"MongoDB Compass"*)
icon_result=":mongodb:"
;;
"Moonlight")
icon_result=":moonlight:"
;;
"mpv")
icon_result=":mpv:"
;;
"Mullvad Browser")
icon_result=":mullvad_browser:"
;;
"Music" | "音乐" | "Musique" | "ミュージック" | "Musik")
icon_result=":music:"
;;
"Navicat Premium")
icon_result=":navicat:"
;;
"Neovide" | "neovide")
icon_result=":neovide:"
;;
"Neovim" | "neovim" | "nvim")
icon_result=":neovim:"
;;
"网易云音乐")
icon_result=":netease_music:"
;;
"NimbleCommander" | "NimbleCommander-Unsigned")
icon_result=":nimble_commander:"
;;
"Noodl" | "Noodl Editor")
icon_result=":noodl:"
;;
"NordVPN")
icon_result=":nord_vpn:"
;;
"Notability")
icon_result=":notability:"
;;
"Notes" | "备忘录" | "メモ" | "Notizen")
icon_result=":notes:"
;;
"Notion")
icon_result=":notion:"
;;
"Nova")
icon_result=":nova:"
;;
"Numbers" | "Numbers 表格")
icon_result=":numbers:"
;;
"Obsidian")
icon_result=":obsidian:"
;;
"OBS")
icon_result=":obsstudio:"
;;
"OmniFocus")
icon_result=":omni_focus:"
;;
"1Password")
icon_result=":one_password:"
;;
"Open Video Downloader")
icon_result=":open_video_downloader:"
;;
"ChatGPT")
icon_result=":openai:"
;;
"OpenAI Translator")
icon_result=":openai_translator:"
;;
"OpenVPN Connect")
icon_result=":openvpn_connect:"
;;
"Opera")
icon_result=":opera:"
;;
"OrbStack")
icon_result=":orbstack:"
;;
"OrcaSlicer")
icon_result=":orcaslicer:"
;;
"Orion" | "Orion RC")
icon_result=":orion:"
;;
"Overleaf" | "ShareLaTeX")
icon_result=":overleaf:"
;;
"Pages" | "Pages 文稿")
icon_result=":pages:"
;;
"Parallels Desktop")
icon_result=":parallels:"
;;
"Parsec")
icon_result=":parsec:"
;;
"Passwords" | "Passwörter")
icon_result=":passwords:"
;;
"PDF Expert")
icon_result=":pdf_expert:"
;;
"Pearcleaner")
icon_result=":pearcleaner:"
;;
"Phoenix Slides")
icon_result=":phoenix_slides:"
;;
"Photos" | "Fotos")
icon_result=":photos:"
;;
"Adobe Photoshop"*)
icon_result=":photoshop:"
;;
"PhpStorm")
icon_result=":php_storm:"
;;
"Pi-hole Remote")
icon_result=":pihole:"
;;
"Pine")
icon_result=":pine:"
;;
"Plex")
icon_result=":plex:"
;;
"Plexamp")
icon_result=":plexamp:"
;;
"Podcasts" | "播客")
icon_result=":podcasts:"
;;
"PomoDone App")
icon_result=":pomodone:"
;;
"Postman")
icon_result=":postman:"
;;
"Premiere" | "Adobe Premiere" | "Adobe Premiere Pro 2024")
icon_result=":premiere:"
;;
"Preview" | "预览" | "Skim" | "zathura" | "Aperçu" | "プレビュー" | "Vorschau")
icon_result=":preview:"
;;
"Proton Mail" | "Proton Mail Bridge")
icon_result=":proton_mail:"
;;
"Proton VPN" | "ProtonVPN")
icon_result=":proton_vpn:"
;;
"PrusaSlicer" | "SuperSlicer")
icon_result=":prusaslicer:"
;;
"PyCharm")
icon_result=":pycharm:"
;;
"qBittorrent")
icon_result=":qbittorrent:"
;;
"QLMarkdown")
icon_result=":qlmarkdown:"
;;
"QQ")
icon_result=":qq:"
;;
"QQ音乐" | "QQMusic")
icon_result=":qqmusic:"
;;
"Quantumult X")
icon_result=":quantumult_x:"
;;
"Quip")
icon_result=":quip:"
;;
"qutebrowser")
icon_result=":qute_browser:"
;;
"Raindrop.io")
icon_result=":raindrop_io:"
;;
"Raycast")
icon_result=":raycast:"
;;
"Reeder")
icon_result=":reeder5:"
;;
"rekordbox")
icon_result=":rekordbox:"
;;
"Reminders" | "提醒事项" | "Rappels" | "リマインダー" | "Erinnerungen")
icon_result=":reminders:"
;;
"Replit")
icon_result=":replit:"
;;
"Repo Prompt")
icon_result=":repo_prompt:"
;;
"Rider" | "JetBrains Rider")
icon_result=":rider:"
;;
"Rio")
icon_result=":rio:"
;;
"Royal TSX")
icon_result=":royaltsx:"
;;
"RustDesk")
icon_result=":rustdesk:"
;;
"Safari" | "Safari浏览器" | "Safari Technology Preview")
icon_result=":safari:"
;;
"Sequel Ace")
icon_result=":sequel_ace:"
;;
"Sequel Pro")
icon_result=":sequel_pro:"
;;
"Session")
icon_result=":session:"
;;
"Setapp")
icon_result=":setapp:"
;;
"SF Symbols" | "SF Symbole")
icon_result=":sf_symbols:"
;;
"Shortcuts")
icon_result=":shortcuts:"
;;
"Signal")
icon_result=":signal:"
;;
"sioyek")
icon_result=":sioyek:"
;;
"Sketch")
icon_result=":sketch:"
;;
"Skype")
icon_result=":skype:"
;;
"Slack")
icon_result=":slack:"
;;
"Spark Desktop")
icon_result=":spark:"
;;
"Spotify")
icon_result=":spotify:"
;;
"Spotlight")
icon_result=":spotlight:"
;;
"Steam" | "Steam Helper")
icon_result=":steam:"
;;
"Studio 3T")
icon_result=":studio_3t:"
;;
"Sublime Text")
icon_result=":sublime_text:"
;;
"Summoners War")
icon_result=":summoners_war:"
;;
"superProductivity")
icon_result=":superproductivity:"
;;
"Surfshark")
icon_result=":surfshark:"
;;
"T3 Chat")
icon_result=":t3chat:"
;;
"Tabby")
icon_result=":tabby:"
;;
"TablePlus")
icon_result=":tableplus:"
;;
"Tana")
icon_result=":tana:"
;;
"TeamSpeak 3")
icon_result=":team_speak:"
;;
"Telegram")
icon_result=":telegram:"
;;
"Terminal" | "终端" | "ターミナル")
icon_result=":terminal:"
;;
"Termius")
icon_result=":termius:"
;;
"Typora")
icon_result=":text:"
;;
"TextEdit")
icon_result=":textedit:"
;;
"Microsoft To Do" | "Things")
icon_result=":things:"
;;
"Thunderbird")
icon_result=":thunderbird:"
;;
"TickTick")
icon_result=":tick_tick:"
;;
"TIDAL")
icon_result=":tidal:"
;;
"Tiny RDM")
icon_result=":tinyrdm:"
;;
"Todoist")
icon_result=":todoist:"
;;
"Toggl Track")
icon_result=":toggl_track:"
;;
"Tor Browser")
icon_result=":tor_browser:"
;;
"Tower")
icon_result=":tower:"
;;
"TradingView")
icon_result=":trading_view:"
;;
"Transmit")
icon_result=":transmit:"
;;
"Trello")
icon_result=":trello:"
;;
"Tweetbot" | "Twitter")
icon_result=":twitter:"
;;
"UTM")
icon_result=":utm:"
;;
"VeraCrypt")
icon_result=":veracrypt:"
;;
"MacVim" | "Vim" | "VimR")
icon_result=":vim:"
;;
"Vivaldi")
icon_result=":vivaldi:"
;;
"VLC")
icon_result=":vlc:"
;;
"VMware Fusion")
icon_result=":vmware_fusion:"
;;
"Vorta")
icon_result=":vorta:"
;;
"VSCodium")
icon_result=":vscodium:"
;;
"Warp")
icon_result=":warp:"
;;
"Weather" | "Wetter")
icon_result=":weather:"
;;
"WebStorm")
icon_result=":web_storm:"
;;
"Webull Desktop")
icon_result=":webull:"
;;
"微信" | "WeChat")
icon_result=":wechat:"
;;
"企业微信" | "WeCom")
icon_result=":wecom:"
;;
"WezTerm")
icon_result=":wezterm:"
;;
"WhatsApp" | "WhatsApp")
icon_result=":whats_app:"
;;
"Windows App")
icon_result=":windows_app:"
;;
"WireGuard")
icon_result=":wireguard:"
;;
"Xcode")
icon_result=":xcode:"
;;
"Yandex Browser" | "Yandex Browser" | "Yandex")
icon_result=":yandex_bower:"
;;
"Yandex Music")
icon_result=":yandex_music:"
;;
"Yazi" | "yazi")
icon_result=":yazi:"
;;
"YouTube")
icon_result=":youtube:"
;;
"YouTube Music")
icon_result=":youtube_music:"
;;
"Yuque" | "语雀")
icon_result=":yuque:"
;;
"Zed")
icon_result=":zed:"
;;
"Zen" | "Zen Browser")
icon_result=":zen_browser:"
;;
"Zeplin")
icon_result=":zeplin:"
;;
"zoom.us")
icon_result=":zoom:"
;;
"Zotero")
icon_result=":zotero:"
;;
"Zulip")
icon_result=":zulip:"
;;
*)
icon_result=":default:"
;;
esac
}
### END-OF-ICON-MAP
@@ -0,0 +1,67 @@
#!/bin/bash
# Loads all defined colors
source "$CONFIG_DIR/colors.sh"
# This is a demo config to show some of the most important commands more easily.
# This is meant to be changed and configured, as it is intentionally kept sparse.
# For a more advanced configuration example see my dotfiles:
# https://github.com/FelixKratz/dotfiles
PLUGIN_DIR="$CONFIG_DIR/plugins"
ITEM_DIR="$CONFIG_DIR/items"
##### Bar Appearance #####
# Configuring the general appearance of the bar, these are only some of the
# options available. For all options see:
# https://felixkratz.github.io/SketchyBar/config/bar
# If you are looking for other colors, see the color picker:
# https://felixkratz.github.io/SketchyBar/config/tricks#color-picker
sketchybar --bar height=36 \
blur_radius=30 \
position=top \
sticky=on \
padding_left=10 \
padding_right=10 \
color=0xcc1e1e2e
##### Changing Defaults #####
# We now change some default values that are applied to all further items
# For a full list of all available item properties see:
# https://felixkratz.github.io/SketchyBar/config/items
sketchybar --default icon.font="SF Pro:Semibold:12.0" \
icon.color=$ITEM_COLOR \
label.font="SF Pro:Semibold:12.0" \
label.color=$ITEM_COLOR \
background.color=$ACCENT_COLOR \
background.corner_radius=10 \
background.height=20 \
padding_left=4 \
padding_right=4 \
icon.padding_left=6 \
icon.padding_right=3 \
label.padding_left=3 \
label.padding_right=6
# -- Left Side Items --
source $ITEM_DIR/spaces.sh
source $ITEM_DIR/front_app.sh
# -- Right Side Of Notch Items --
# source $ITEM_DIR/media.sh
# -- Right Side Items --
source $ITEM_DIR/calendar.sh
source $ITEM_DIR/wifi.sh
source $ITEM_DIR/battery.sh
source $ITEM_DIR/volume.sh
# source $ITEM_DIR/cpu.sh
# source $ITEM_DIR/memory.sh
##### Finalizing Setup #####
# The below command is only needed at the end of the initial configuration to
# force all scripts to run the first time, it should never be run in an item script.
sketchybar --update
@@ -1 +0,0 @@
bin
@@ -1,211 +0,0 @@
return {
["Typora"] = ":text:",
["Orion"] = ":orion:",
["Orion RC"] = ":orion:",
["Grammarly Editor"] = ":grammarly:",
["kitty"] = ":kitty:",
["ClickUp"] = ":click_up:",
["Iris"] = ":iris:",
["PomoDone App"] = ":pomodone:",
["qutebrowser"] = ":qute_browser:",
["Raindrop.io"] = ":raindrop_io:",
["Airmail"] = ":airmail:",
["Affinity Publisher 2"] = ":affinity_publisher_2:",
["Calendar"] = ":calendar:",
["日历"] = ":calendar:",
["Fantastical"] = ":calendar:",
["Cron"] = ":calendar:",
["Amie"] = ":calendar:",
["Figma"] = ":figma:",
["Element"] = ":element:",
["Signal"] = ":signal:",
["Mattermost"] = ":mattermost:",
["Caprine"] = ":caprine:",
["Microsoft To Do"] = ":things:",
["Things"] = ":things:",
["Godot"] = ":godot:",
["Android Messages"] = ":android_messages:",
["Zed"] = ":zed:",
["Anytype"] = ":anytype:",
["TeamSpeak 3"] = ":team_speak:",
["LibreWolf"] = ":libre_wolf:",
["Neovide"] = ":neovide:",
["neovide"] = ":neovide:",
["Spotlight"] = ":spotlight:",
["微信"] = ":wechat:",
["Dropbox"] = ":dropbox:",
["Transmit"] = ":transmit:",
["TickTick"] = ":tick_tick:",
["Parallels Desktop"] = ":parallels:",
["Audacity"] = ":audacity:",
["Rider"] = ":rider:",
["JetBrains Rider"] = ":rider:",
["DEVONthink 3"] = ":devonthink3:",
["Docker"] = ":docker:",
["Docker Desktop"] = ":docker:",
["Matlab"] = ":matlab:",
["VLC"] = ":vlc:",
["Alacritty"] = ":alacritty:",
["Pages"] = ":pages:",
["Pages 文稿"] = ":pages:",
["Bear"] = ":bear:",
["Pine"] = ":pine:",
["Affinity Designer 2"] = ":affinity_designer_2:",
["Keyboard Maestro"] = ":keyboard_maestro:",
["Joplin"] = ":joplin:",
["mpv"] = ":mpv:",
["zoom.us"] = ":zoom:",
["Affinity Photo 2"] = ":affinity_photo_2:",
["Music"] = ":music:",
["音乐"] = ":music:",
["League of Legends"] = ":league_of_legends:",
["Tor Browser"] = ":tor_browser:",
["Hyper"] = ":hyper:",
["WhatsApp"] = ":whats_app:",
["카카오톡"] = ":kakaotalk:",
["Discord"] = ":discord:",
["Discord Canary"] = ":discord:",
["Discord PTB"] = ":discord:",
["Neovide"] = ":vim:",
["MacVim"] = ":vim:",
["Vim"] = ":vim:",
["VimR"] = ":vim:",
["Keynote"] = ":keynote:",
["Keynote 讲演"] = ":keynote:",
["iTerm"] = ":iterm:",
["IntelliJ IDEA"] = ":idea:",
["Finder"] = ":finder:",
["访达"] = ":finder:",
["Xcode"] = ":xcode:",
["GoLand"] = ":goland:",
["Android Studio"] = ":android_studio:",
["MoneyMoney"] = ":bank:",
["Spotify"] = ":spotify:",
["KeePassXC"] = ":kee_pass_x_c:",
["Alfred"] = ":alfred:",
["Color Picker"] = ":color_picker:",
["数码测色计"] = ":color_picker:",
["Microsoft Word"] = ":microsoft_word:",
["Microsoft PowerPoint"] = ":microsoft_power_point:",
["Notes"] = ":notes:",
["备忘录"] = ":notes:",
["Microsoft Edge"] = ":microsoft_edge:",
["Sublime Text"] = ":sublime_text:",
["Sequel Ace"] = ":sequel_ace:",
["Folx"] = ":folx:",
["DingTalk"] = ":dingtalk:",
["钉钉"] = ":dingtalk:",
["阿里钉"] = ":dingtalk:",
["WebStorm"] = ":web_storm:",
["Sequel Pro"] = ":sequel_pro:",
["Skype"] = ":skype:",
["网易云音乐"] = ":netease_music:",
["PyCharm"] = ":pycharm:",
["Canary Mail"] = ":mail:",
["HEY"] = ":mail:",
["Mail"] = ":mail:",
["Mailspring"] = ":mail:",
["MailMate"] = ":mail:",
["邮件"] = ":mail:",
["Default"] = ":default:",
["App Store"] = ":app_store:",
["Calibre"] = ":book:",
["Todoist"] = ":todoist:",
["Emacs"] = ":emacs:",
["Messenger"] = ":messenger:",
["Tower"] = ":tower:",
["VSCodium"] = ":vscodium:",
["Drafts"] = ":drafts:",
["Cypress"] = ":cypress:",
["GitHub Desktop"] = ":git_hub:",
["Telegram"] = ":telegram:",
["Firefox Developer Edition"] = ":firefox_developer_edition:",
["Firefox Nightly"] = ":firefox_developer_edition:",
["Min"] = ":min_browser:",
["Sketch"] = ":sketch:",
["Affinity Photo"] = ":affinity_photo:",
["MAMP"] = ":mamp:",
["MAMP PRO"] = ":mamp:",
["Insomnia"] = ":insomnia:",
["Bitwarden"] = ":bit_warden:",
["Warp"] = ":warp:",
["System Preferences"] = ":gear:",
["System Settings"] = ":gear:",
["系统设置"] = ":gear:",
["Affinity Designer"] = ":affinity_designer:",
["Live"] = ":ableton:",
["Arc"] = ":arc:",
["Chromium"] = ":google_chrome:",
["Google Chrome"] = ":google_chrome:",
["Google Chrome Canary"] = ":google_chrome:",
["Jellyfin Media Player"] = ":jellyfin:",
["Zulip"] = ":zulip:",
["1Password"] = ":one_password:",
["FaceTime"] = ":face_time:",
["FaceTime 通话"] = ":face_time:",
["Citrix Workspace"] = ":citrix:",
["Citrix Viewer"] = ":citrix:",
["Logseq"] = ":logseq:",
["Reeder"] = ":reeder5:",
["Code"] = ":code:",
["Code - Insiders"] = ":code:",
["Notion"] = ":notion:",
["Final Cut Pro"] = ":final_cut_pro:",
["Zotero"] = ":zotero:",
["Safari"] = ":safari:",
["Safari浏览器"] = ":safari:",
["Safari Technology Preview"] = ":safari:",
["Blender"] = ":blender:",
["Affinity Publisher"] = ":affinity_publisher:",
["Spark Desktop"] = ":spark:",
["Zeplin"] = ":zeplin:",
["Replit"] = ":replit:",
["Podcasts"] = ":podcasts:",
["播客"] = ":podcasts:",
["NordVPN"] = ":nord_vpn:",
["Notability"] = ":notability:",
["Numbers"] = ":numbers:",
["Numbers 表格"] = ":numbers:",
["Nova"] = ":nova:",
["Microsoft Excel"] = ":microsoft_excel:",
["Trello"] = ":trello:",
["Pi-hole Remote"] = ":pihole:",
["Linear"] = ":linear:",
["CleanMyMac X"] = ":desktop:",
["GrandTotal"] = ":dollar:",
["Receipts"] = ":dollar:",
["Evernote Legacy"] = ":evernote_legacy:",
["OmniFocus"] = ":omni_focus:",
["Terminal"] = ":terminal:",
["终端"] = ":terminal:",
["Atom"] = ":atom:",
["Kakoune"] = ":kakoune:",
["Reminders"] = ":reminders:",
["提醒事项"] = ":reminders:",
["Tana"] = ":tana:",
["OBS"] = ":obsstudio:",
["VMware Fusion"] = ":vmware_fusion:",
["Tweetbot"] = ":twitter:",
["Twitter"] = ":twitter:",
["Microsoft Teams"] = ":microsoft_teams:",
["Yuque"] = ":yuque:",
["语雀"] = ":yuque:",
["Slack"] = ":slack:",
["Vivaldi"] = ":vivaldi:",
["Setapp"] = ":setapp:",
["TIDAL"] = ":tidal:",
["Miro"] = ":miro:",
["Messages"] = ":messages:",
["信息"] = ":messages:",
["Nachrichten"] = ":messages:",
["Brave Browser"] = ":brave_browser:",
["Preview"] = ":pdf:",
["预览"] = ":pdf:",
["Skim"] = ":pdf:",
["zathura"] = ":pdf:",
["Obsidian"] = ":obsidian:",
["Thunderbird"] = ":thunderbird:",
["Firefox"] = ":firefox:",
["WezTerm"] = ":wezterm:",
["default"] = ":default:",
}
@@ -1,14 +0,0 @@
return {
text = "SF Pro", -- Used for text
numbers = "SF Pro", -- Used for numbers
mono = "BerkeleyMono Nerd Font",
-- Unified font style map
style_map = {
["Regular"] = "Regular",
["Semibold"] = "Semibold",
["Bold"] = "Bold",
["Heavy"] = "Heavy",
["Black"] = "Black",
}
}
@@ -1,58 +0,0 @@
#include <mach/mach.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdio.h>
struct cpu {
host_t host;
mach_msg_type_number_t count;
host_cpu_load_info_data_t load;
host_cpu_load_info_data_t prev_load;
bool has_prev_load;
int user_load;
int sys_load;
int total_load;
};
static inline void cpu_init(struct cpu* cpu) {
cpu->host = mach_host_self();
cpu->count = HOST_CPU_LOAD_INFO_COUNT;
cpu->has_prev_load = false;
}
static inline void cpu_update(struct cpu* cpu) {
kern_return_t error = host_statistics(cpu->host,
HOST_CPU_LOAD_INFO,
(host_info_t)&cpu->load,
&cpu->count );
if (error != KERN_SUCCESS) {
printf("Error: Could not read cpu host statistics.\n");
return;
}
if (cpu->has_prev_load) {
uint32_t delta_user = cpu->load.cpu_ticks[CPU_STATE_USER]
- cpu->prev_load.cpu_ticks[CPU_STATE_USER];
uint32_t delta_system = cpu->load.cpu_ticks[CPU_STATE_SYSTEM]
- cpu->prev_load.cpu_ticks[CPU_STATE_SYSTEM];
uint32_t delta_idle = cpu->load.cpu_ticks[CPU_STATE_IDLE]
- cpu->prev_load.cpu_ticks[CPU_STATE_IDLE];
cpu->user_load = (double)delta_user / (double)(delta_system
+ delta_user
+ delta_idle) * 100.0;
cpu->sys_load = (double)delta_system / (double)(delta_system
+ delta_user
+ delta_idle) * 100.0;
cpu->total_load = cpu->user_load + cpu->sys_load;
}
cpu->prev_load = cpu->load;
cpu->has_prev_load = true;
}
@@ -1,41 +0,0 @@
#include "cpu.h"
#include "../sketchybar.h"
int main (int argc, char** argv) {
float update_freq;
if (argc < 3 || (sscanf(argv[2], "%f", &update_freq) != 1)) {
printf("Usage: %s \"<event-name>\" \"<event_freq>\"\n", argv[0]);
exit(1);
}
alarm(0);
struct cpu cpu;
cpu_init(&cpu);
// Setup the event in sketchybar
char event_message[512];
snprintf(event_message, 512, "--add event '%s'", argv[1]);
sketchybar(event_message);
char trigger_message[512];
for (;;) {
// Acquire new info
cpu_update(&cpu);
// Prepare the event message
snprintf(trigger_message,
512,
"--trigger '%s' user_load='%d' sys_load='%02d' total_load='%02d'",
argv[1],
cpu.user_load,
cpu.sys_load,
cpu.total_load );
// Trigger the event
sketchybar(trigger_message);
// Wait
usleep(update_freq * 1000000);
}
return 0;
}
@@ -1,5 +0,0 @@
bin/cpu_load: cpu_load.c cpu.h ../sketchybar.h | bin
clang -std=c99 -O3 $< -o $@
bin:
mkdir bin
@@ -1,3 +0,0 @@
all:
(cd cpu_load && $(MAKE))
(cd network_load && $(MAKE))
@@ -1,5 +0,0 @@
bin/network_load: network_load.c network.h ../sketchybar.h | bin
clang -std=c99 -O3 $< -o $@
bin:
mkdir bin
@@ -1,90 +0,0 @@
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <net/if.h>
#include <net/if_mib.h>
#include <sys/select.h>
#include <sys/sysctl.h>
static char unit_str[3][6] = { { " Bps" }, { "KBps" }, { "MBps" }, };
enum unit {
UNIT_BPS,
UNIT_KBPS,
UNIT_MBPS
};
struct network {
uint32_t row;
struct ifmibdata data;
struct timeval tv_nm1, tv_n, tv_delta;
int up;
int down;
enum unit up_unit, down_unit;
};
static inline void ifdata(uint32_t net_row, struct ifmibdata* data) {
static size_t size = sizeof(struct ifmibdata);
static int32_t data_option[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_IFDATA, 0, IFDATA_GENERAL };
data_option[4] = net_row;
sysctl(data_option, 6, data, &size, NULL, 0);
}
static inline void network_init(struct network* net, char* ifname) {
memset(net, 0, sizeof(struct network));
static int count_option[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM, IFMIB_IFCOUNT };
uint32_t interface_count = 0;
size_t size = sizeof(uint32_t);
sysctl(count_option, 5, &interface_count, &size, NULL, 0);
for (int i = 0; i < interface_count; i++) {
ifdata(i, &net->data);
if (strcmp(net->data.ifmd_name, ifname) == 0) {
net->row = i;
break;
}
}
}
static inline void network_update(struct network* net) {
gettimeofday(&net->tv_n, NULL);
timersub(&net->tv_n, &net->tv_nm1, &net->tv_delta);
net->tv_nm1 = net->tv_n;
uint64_t ibytes_nm1 = net->data.ifmd_data.ifi_ibytes;
uint64_t obytes_nm1 = net->data.ifmd_data.ifi_obytes;
ifdata(net->row, &net->data);
double time_scale = (net->tv_delta.tv_sec + 1e-6*net->tv_delta.tv_usec);
if (time_scale < 1e-6 || time_scale > 1e2) return;
double delta_ibytes = (double)(net->data.ifmd_data.ifi_ibytes - ibytes_nm1)
/ time_scale;
double delta_obytes = (double)(net->data.ifmd_data.ifi_obytes - obytes_nm1)
/ time_scale;
double exponent_ibytes = log10(delta_ibytes);
double exponent_obytes = log10(delta_obytes);
if (exponent_ibytes < 3) {
net->down_unit = UNIT_BPS;
net->down = delta_ibytes;
} else if (exponent_ibytes < 6) {
net->down_unit = UNIT_KBPS;
net->down = delta_ibytes / 1000.0;
} else if (exponent_ibytes < 9) {
net->down_unit = UNIT_MBPS;
net->down = delta_ibytes / 1000000.0;
}
if (exponent_obytes < 3) {
net->up_unit = UNIT_BPS;
net->up = delta_obytes;
} else if (exponent_obytes < 6) {
net->up_unit = UNIT_KBPS;
net->up = delta_obytes / 1000.0;
} else if (exponent_obytes < 9) {
net->up_unit = UNIT_MBPS;
net->up = delta_obytes / 1000000.0;
}
}
@@ -1,42 +0,0 @@
#include <unistd.h>
#include "network.h"
#include "../sketchybar.h"
int main (int argc, char** argv) {
float update_freq;
if (argc < 4 || (sscanf(argv[3], "%f", &update_freq) != 1)) {
printf("Usage: %s \"<interface>\" \"<event-name>\" \"<event_freq>\"\n", argv[0]);
exit(1);
}
alarm(0);
// Setup the event in sketchybar
char event_message[512];
snprintf(event_message, 512, "--add event '%s'", argv[2]);
sketchybar(event_message);
struct network network;
network_init(&network, argv[1]);
char trigger_message[512];
for (;;) {
// Acquire new info
network_update(&network);
// Prepare the event message
snprintf(trigger_message,
512,
"--trigger '%s' upload='%03d%s' download='%03d%s'",
argv[2],
network.up,
unit_str[network.up_unit],
network.down,
unit_str[network.down_unit]);
// Trigger the event
sketchybar(trigger_message);
// Wait
usleep(update_freq * 1000000);
}
return 0;
}
@@ -1,122 +0,0 @@
#pragma once
#include <mach/arm/kern_return.h>
#include <mach/mach.h>
#include <mach/mach_port.h>
#include <mach/message.h>
#include <bootstrap.h>
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
typedef char* env;
#define MACH_HANDLER(name) void name(env env)
typedef MACH_HANDLER(mach_handler);
struct mach_message {
mach_msg_header_t header;
mach_msg_size_t msgh_descriptor_count;
mach_msg_ool_descriptor_t descriptor;
};
struct mach_buffer {
struct mach_message message;
mach_msg_trailer_t trailer;
};
static mach_port_t g_mach_port = 0;
static inline mach_port_t mach_get_bs_port() {
mach_port_name_t task = mach_task_self();
mach_port_t bs_port;
if (task_get_special_port(task,
TASK_BOOTSTRAP_PORT,
&bs_port ) != KERN_SUCCESS) {
return 0;
}
char* name = getenv("BAR_NAME");
if (!name) name = "sketchybar";
uint32_t lookup_len = 16 + strlen(name);
char buffer[lookup_len];
snprintf(buffer, lookup_len, "git.felix.%s", name);
mach_port_t port;
if (bootstrap_look_up(bs_port, buffer, &port) != KERN_SUCCESS) return 0;
return port;
}
static inline bool mach_send_message(mach_port_t port, char* message, uint32_t len) {
if (!message || !port) {
return false;
}
struct mach_message msg = { 0 };
msg.header.msgh_remote_port = port;
msg.header.msgh_local_port = 0;
msg.header.msgh_id = 0;
msg.header.msgh_bits = MACH_MSGH_BITS_SET(MACH_MSG_TYPE_COPY_SEND,
MACH_MSG_TYPE_MAKE_SEND,
0,
MACH_MSGH_BITS_COMPLEX );
msg.header.msgh_size = sizeof(struct mach_message);
msg.msgh_descriptor_count = 1;
msg.descriptor.address = message;
msg.descriptor.size = len * sizeof(char);
msg.descriptor.copy = MACH_MSG_VIRTUAL_COPY;
msg.descriptor.deallocate = false;
msg.descriptor.type = MACH_MSG_OOL_DESCRIPTOR;
kern_return_t err = mach_msg(&msg.header,
MACH_SEND_MSG,
sizeof(struct mach_message),
0,
MACH_PORT_NULL,
MACH_MSG_TIMEOUT_NONE,
MACH_PORT_NULL );
return err == KERN_SUCCESS;
}
static inline uint32_t format_message(char* message, char* formatted_message) {
// This is not actually robust, switch to stack based messaging.
char outer_quote = 0;
uint32_t caret = 0;
uint32_t message_length = strlen(message) + 1;
for (int i = 0; i < message_length; ++i) {
if (message[i] == '"' || message[i] == '\'') {
if (outer_quote && outer_quote == message[i]) outer_quote = 0;
else if (!outer_quote) outer_quote = message[i];
continue;
}
formatted_message[caret] = message[i];
if (message[i] == ' ' && !outer_quote) formatted_message[caret] = '\0';
caret++;
}
if (caret > 0 && formatted_message[caret] == '\0'
&& formatted_message[caret - 1] == '\0') {
caret--;
}
formatted_message[caret] = '\0';
return caret + 1;
}
static inline void sketchybar(char* message) {
char formatted_message[strlen(message) + 2];
uint32_t length = format_message(message, formatted_message);
if (!length) return;
if (!g_mach_port) g_mach_port = mach_get_bs_port();
if (!mach_send_message(g_mach_port, formatted_message, length)) {
g_mach_port = mach_get_bs_port();
if (!mach_send_message(g_mach_port, formatted_message, length)) {
// No sketchybar instance running, exit.
exit(0);
}
}
}
@@ -1,4 +0,0 @@
-- Add the sketchybar module to the package cpath
package.cpath = package.cpath .. ";/Users/" .. os.getenv("USER") .. "/.local/share/sketchybar_lua/?.so"
os.execute("(cd helpers && make)")
@@ -1,17 +0,0 @@
# Packages
brew install lua
brew install switchaudio-osx
brew install nowplaying-cli
brew tap FelixKratz/formulae
brew install sketchybar
# Fonts
brew install --cask sf-symbols
brew install --cask homebrew/cask-fonts/font-sf-mono
brew install --cask homebrew/cask-fonts/font-sf-pro
curl -L https://github.com/kvndrsslr/sketchybar-app-font/releases/download/v2.0.5/sketchybar-app-font.ttf -o $HOME/Library/Fonts/sketchybar-app-font.ttf
# SbarLua
(git clone https://github.com/FelixKratz/SbarLua.git /tmp/SbarLua && cd /tmp/SbarLua/ && make install && rm -rf /tmp/SbarLua/)
@@ -1,3 +0,0 @@
all:
(cd event_providers && $(MAKE)) >/dev/null
(cd menus && $(MAKE)) >/dev/null
@@ -1,5 +0,0 @@
bin/menus: menus.c | bin
clang -std=c99 -O3 -F/System/Library/PrivateFrameworks/ -framework Carbon -framework SkyLight $< -o $@
bin:
mkdir bin
@@ -1,248 +0,0 @@
#include <Carbon/Carbon.h>
void ax_init() {
const void *keys[] = { kAXTrustedCheckOptionPrompt };
const void *values[] = { kCFBooleanTrue };
CFDictionaryRef options;
options = CFDictionaryCreate(kCFAllocatorDefault,
keys,
values,
sizeof(keys) / sizeof(*keys),
&kCFCopyStringDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks );
bool trusted = AXIsProcessTrustedWithOptions(options);
CFRelease(options);
if (!trusted) exit(1);
}
void ax_perform_click(AXUIElementRef element) {
if (!element) return;
AXUIElementPerformAction(element, kAXCancelAction);
usleep(150000);
AXUIElementPerformAction(element, kAXPressAction);
}
CFStringRef ax_get_title(AXUIElementRef element) {
CFTypeRef title = NULL;
AXError error = AXUIElementCopyAttributeValue(element,
kAXTitleAttribute,
&title );
if (error != kAXErrorSuccess) return NULL;
return title;
}
void ax_select_menu_option(AXUIElementRef app, int id) {
AXUIElementRef menubars_ref = NULL;
CFArrayRef children_ref = NULL;
AXError error = AXUIElementCopyAttributeValue(app,
kAXMenuBarAttribute,
(CFTypeRef*)&menubars_ref);
if (error == kAXErrorSuccess) {
error = AXUIElementCopyAttributeValue(menubars_ref,
kAXVisibleChildrenAttribute,
(CFTypeRef*)&children_ref );
if (error == kAXErrorSuccess) {
uint32_t count = CFArrayGetCount(children_ref);
if (id < count) {
AXUIElementRef item = CFArrayGetValueAtIndex(children_ref, id);
ax_perform_click(item);
}
if (children_ref) CFRelease(children_ref);
}
if (menubars_ref) CFRelease(menubars_ref);
}
}
void ax_print_menu_options(AXUIElementRef app) {
AXUIElementRef menubars_ref = NULL;
CFTypeRef menubar = NULL;
CFArrayRef children_ref = NULL;
AXError error = AXUIElementCopyAttributeValue(app,
kAXMenuBarAttribute,
(CFTypeRef*)&menubars_ref);
if (error == kAXErrorSuccess) {
error = AXUIElementCopyAttributeValue(menubars_ref,
kAXVisibleChildrenAttribute,
(CFTypeRef*)&children_ref );
if (error == kAXErrorSuccess) {
uint32_t count = CFArrayGetCount(children_ref);
for (int i = 1; i < count; i++) {
AXUIElementRef item = CFArrayGetValueAtIndex(children_ref, i);
CFTypeRef title = ax_get_title(item);
if (title) {
uint32_t buffer_len = 2*CFStringGetLength(title);
char buffer[2*CFStringGetLength(title)];
CFStringGetCString(title, buffer, buffer_len, kCFStringEncodingUTF8);
printf("%s\n", buffer);
CFRelease(title);
}
}
}
if (menubars_ref) CFRelease(menubars_ref);
if (children_ref) CFRelease(children_ref);
}
}
AXUIElementRef ax_get_extra_menu_item(char* alias) {
pid_t pid = 0;
CGRect bounds = CGRectNull;
CFArrayRef window_list = CGWindowListCopyWindowInfo(kCGWindowListOptionAll,
kCGNullWindowID );
char owner_buffer[256];
char name_buffer[256];
char buffer[512];
int window_count = CFArrayGetCount(window_list);
for (int i = 0; i < window_count; ++i) {
CFDictionaryRef dictionary = CFArrayGetValueAtIndex(window_list, i);
if (!dictionary) continue;
CFStringRef owner_ref = CFDictionaryGetValue(dictionary,
kCGWindowOwnerName);
CFNumberRef owner_pid_ref = CFDictionaryGetValue(dictionary,
kCGWindowOwnerPID);
CFStringRef name_ref = CFDictionaryGetValue(dictionary, kCGWindowName);
CFNumberRef layer_ref = CFDictionaryGetValue(dictionary, kCGWindowLayer);
CFDictionaryRef bounds_ref = CFDictionaryGetValue(dictionary,
kCGWindowBounds);
if (!name_ref || !owner_ref || !owner_pid_ref || !layer_ref || !bounds_ref)
continue;
long long int layer = 0;
CFNumberGetValue(layer_ref, CFNumberGetType(layer_ref), &layer);
uint64_t owner_pid = 0;
CFNumberGetValue(owner_pid_ref,
CFNumberGetType(owner_pid_ref),
&owner_pid );
if (layer != 0x19) continue;
bounds = CGRectNull;
if (!CGRectMakeWithDictionaryRepresentation(bounds_ref, &bounds)) continue;
CFStringGetCString(owner_ref,
owner_buffer,
sizeof(owner_buffer),
kCFStringEncodingUTF8);
CFStringGetCString(name_ref,
name_buffer,
sizeof(name_buffer),
kCFStringEncodingUTF8);
snprintf(buffer, sizeof(buffer), "%s,%s", owner_buffer, name_buffer);
if (strcmp(buffer, alias) == 0) {
pid = owner_pid;
break;
}
}
CFRelease(window_list);
if (!pid) return NULL;
AXUIElementRef app = AXUIElementCreateApplication(pid);
if (!app) return NULL;
AXUIElementRef result = NULL;
CFTypeRef extras = NULL;
CFArrayRef children_ref = NULL;
AXError error = AXUIElementCopyAttributeValue(app,
kAXExtrasMenuBarAttribute,
&extras );
if (error == kAXErrorSuccess) {
error = AXUIElementCopyAttributeValue(extras,
kAXVisibleChildrenAttribute,
(CFTypeRef*)&children_ref );
if (error == kAXErrorSuccess) {
uint32_t count = CFArrayGetCount(children_ref);
for (uint32_t i = 0; i < count; i++) {
AXUIElementRef item = CFArrayGetValueAtIndex(children_ref, i);
CFTypeRef position_ref = NULL;
CFTypeRef size_ref = NULL;
AXUIElementCopyAttributeValue(item, kAXPositionAttribute,
&position_ref );
AXUIElementCopyAttributeValue(item, kAXSizeAttribute,
&size_ref );
if (!position_ref || !size_ref) continue;
CGPoint position = CGPointZero;
AXValueGetValue(position_ref, kAXValueCGPointType, &position);
CGSize size = CGSizeZero;
AXValueGetValue(size_ref, kAXValueCGSizeType, &size);
CFRelease(position_ref);
CFRelease(size_ref);
// The offset is exactly 8 on macOS Sonoma...
// printf("%f %f\n", position.x, bounds.origin.x);
if (error == kAXErrorSuccess
&& fabs(position.x - bounds.origin.x) <= 10) {
result = item;
break;
}
}
}
}
CFRelease(app);
return result;
}
extern int SLSMainConnectionID();
extern void SLSSetMenuBarVisibilityOverrideOnDisplay(int cid, int did, bool enabled);
extern void SLSSetMenuBarVisibilityOverrideOnDisplay(int cid, int did, bool enabled);
extern void SLSSetMenuBarInsetAndAlpha(int cid, double u1, double u2, float alpha);
void ax_select_menu_extra(char* alias) {
AXUIElementRef item = ax_get_extra_menu_item(alias);
if (!item) return;
SLSSetMenuBarInsetAndAlpha(SLSMainConnectionID(), 0, 1, 0.0);
SLSSetMenuBarVisibilityOverrideOnDisplay(SLSMainConnectionID(), 0, true);
SLSSetMenuBarInsetAndAlpha(SLSMainConnectionID(), 0, 1, 0.0);
ax_perform_click(item);
SLSSetMenuBarVisibilityOverrideOnDisplay(SLSMainConnectionID(), 0, false);
SLSSetMenuBarInsetAndAlpha(SLSMainConnectionID(), 0, 1, 1.0);
CFRelease(item);
}
extern void _SLPSGetFrontProcess(ProcessSerialNumber* psn);
extern void SLSGetConnectionIDForPSN(int cid, ProcessSerialNumber* psn, int* cid_out);
extern void SLSConnectionGetPID(int cid, pid_t* pid_out);
AXUIElementRef ax_get_front_app() {
ProcessSerialNumber psn;
_SLPSGetFrontProcess(&psn);
int target_cid;
SLSGetConnectionIDForPSN(SLSMainConnectionID(), &psn, &target_cid);
pid_t pid;
SLSConnectionGetPID(target_cid, &pid);
return AXUIElementCreateApplication(pid);
}
int main (int argc, char **argv) {
if (argc == 1) {
printf("Usage: %s [-l | -s id/alias ]\n", argv[0]);
exit(0);
}
ax_init();
if (strcmp(argv[1], "-l") == 0) {
AXUIElementRef app = ax_get_front_app();
if (!app) return 1;
ax_print_menu_options(app);
CFRelease(app);
} else if (argc == 3 && strcmp(argv[1], "-s") == 0) {
int id = 0;
if (sscanf(argv[2], "%d", &id) == 1) {
AXUIElementRef app = ax_get_front_app();
if (!app) return 1;
ax_select_menu_option(app, id);
CFRelease(app);
} else ax_select_menu_extra(argv[2]);
}
return 0;
}
-93
View File
@@ -1,93 +0,0 @@
local settings = require("settings")
local icons = {
sf_symbols = {
plus = "􀅼",
loading = "􀖇",
apple = "􀣺",
gear = "􀍟",
cpu = "􀫥",
clipboard = "􀉄",
switch = {
on = "􁏮",
off = "􁏯",
},
volume = {
_100="􀊩",
_66="􀊧",
_33="􀊥",
_10="􀊡",
_0="􀊣",
},
battery = {
_100 = "■■■■■■",
_80 = "■■■■□",
_60 = "■■■□□",
_40 = "■■□□□",
_20 = "■□□□□",
_0 = "◧□□□□",
charging = "charging"
},
wifi = {
upload = "􀄨",
download = "􀄩",
connected = "􀙇",
disconnected = "􀙈",
router = "􁓤",
},
media = {
back = "􀊊",
forward = "􀊌",
play_pause = "􀊈",
},
},
-- Alternative NerdFont icons
nerdfont = {
plus = "",
loading = "",
apple = "",
gear = "",
cpu = "",
clipboard = "Missing Icon",
switch = {
on = "󱨥",
off = "󱨦",
},
volume = {
_100="",
_66="",
_33="",
_10="",
_0="",
},
battery = {
_100 = "",
_75 = "",
_50 = "",
_25 = "",
_0 = "",
charging = ""
},
wifi = {
upload = "",
download = "",
connected = "󰖩",
disconnected = "󰖪",
router = "Missing Icon"
},
media = {
back = "",
forward = "",
play_pause = "",
},
},
}
if not (settings.icons == "NerdFont") then
return icons.sf_symbols
else
return icons.nerdfont
end
-16
View File
@@ -1,16 +0,0 @@
-- Require the sketchybar module
sbar = require("sketchybar")
-- Set the bar name, if you are using another bar instance than sketchybar
-- sbar.set_bar_name("bottom_bar")
-- Bundle the entire initial configuration into a single message to sketchybar
sbar.begin_config()
require("bar")
require("default")
require("items")
sbar.end_config()
-- Run the event loop of the sketchybar module (without this there will be no
-- callback functions executed in the lua module)
sbar.event_loop()
@@ -1,27 +0,0 @@
local colors = require("colors")
local icons = require("icons")
local settings = require("settings")
-- Padding item required because of bracket
sbar.add("item", { width = 5 })
local apple = sbar.add("item", {
icon = {
font = { size = 16.0 },
string = icons.apple,
padding_right = 12,
padding_left = 10,
},
label = { drawing = false },
background = {
color = colors.bg2,
border_color = colors.black,
border_width = 3
},
padding_left = 1,
padding_right = 1,
click_script = "$CONFIG_DIR/helpers/menus/bin/menus -s 0"
})
-- Padding item required because of bracket
sbar.add("item", { width = 7 })
@@ -1,47 +0,0 @@
local settings = require("settings")
local colors = require("colors")
-- Padding item required because of bracket
sbar.add("item", { position = "right", width = settings.group_paddings })
local cal = sbar.add("item", {
icon = {
color = colors.white,
padding_left = 12,
font = {
style = settings.font.style_map["Bold"],
size = 14.0,
},
},
label = {
color = colors.white,
padding_right = 16,
width = 70,
align = "right",
font = { family = settings.font.numbers },
},
position = "right",
update_freq = 30,
padding_left = 1,
padding_right = 1,
background = {
color = colors.bg2,
border_color = colors.black,
border_width = 3
},
})
-- Double border for calendar using a single item bracket
sbar.add("bracket", { cal.name }, {
background = {
color = colors.transparent,
border_color = colors.grey,
}
})
-- Padding item required because of bracket
sbar.add("item", { position = "right", width = settings.group_paddings })
cal:subscribe({ "forced", "routine", "system_woke" }, function(env)
cal:set({ icon = os.date("􀉉 %A %d %B"), label = os.date(" 􀐫 %H:%M") })
end)
@@ -0,0 +1,6 @@
#!/bin/bash
sketchybar --add item battery right \
--set battery update_freq=180 \
script="$PLUGIN_DIR/battery.sh" \
--subscribe battery system_woke power_source_change
@@ -0,0 +1,6 @@
#!/bin/bash
sketchybar --add item calendar right \
--set calendar icon=􀧞 \
update_freq=15 \
script="$PLUGIN_DIR/calendar.sh"
@@ -0,0 +1,6 @@
#!/bin/bash
sketchybar --add item cpu right \
--set cpu update_freq=15 \
icon=􀧓 \
script="$PLUGIN_DIR/cpu.sh"
@@ -0,0 +1,10 @@
#!/bin/bash
sketchybar --add item front_app left \
--set front_app background.color=$ACCENT_COLOR \
icon.color=$ITEM_COLOR \
label.color=$ITEM_COLOR \
icon.font="sketchybar-app-font:Regular:12.0" \
label.font="SF Pro:Semibold:12.0" \
script="$PLUGIN_DIR/front_app.sh" \
--subscribe front_app front_app_switched
@@ -0,0 +1,12 @@
#!/bin/bash
sketchybar --add item media e \
--set media label.color=$ACCENT_COLOR \
label.max_chars=20 \
icon.padding_left=0 \
scroll_texts=on \
icon=􀑪 \
icon.color=$ACCENT_COLOR \
background.drawing=off \
script="$PLUGIN_DIR/media.sh" \
--subscribe media media_change
@@ -0,0 +1,9 @@
#!/bin/bash
USAGE="$(memory_pressure | grep "System-wide memory free percentage:" | awk '{ printf("%02.0f\n", 100-$5"%") }')%"
sketchybar --add item memory right \
--set memory update_freq=15 \
icon=􀧖 \
label="$USAGE" \
script="$PLUGIN_DIR/memory.sh"
@@ -0,0 +1,51 @@
#!/bin/bash
sketchybar --add event aerospace_workspace_change
sketchybar --add item aerospace_dummy left \
--set aerospace_dummy display=0 \
script="$PLUGIN_DIR/spaces.sh" \
--subscribe aerospace_dummy aerospace_workspace_change
for m in $(aerospace list-monitors | awk '{print $1}'); do
for sid in $(aerospace list-workspaces --monitor $m); do
sketchybar --add space space.$sid left \
--set space.$sid space=$sid \
icon=$sid \
background.color=$TRANSPARENT \
label.color=$ACCENT_COLOR \
icon.color=$ACCENT_COLOR \
script="" \
display=$m \
label.font="sketchybar-app-font:Regular:12.0" \
icon.font="SF Pro:Semibold:12.0" \
label.padding_right=10 \
label.y_offset=-1 \
click_script="$PLUGIN_DIR/space_click.sh $sid"
apps=$(aerospace list-windows --monitor "$m" --workspace "$sid" |
awk -F '|' '{gsub(/^ *| *$/, "", $2); if (!seen[$2]++) print $2}')
icon_strip=""
if [ "${apps}" != "" ]; then
while read -r app; do
icon_strip+=" $($PLUGIN_DIR/icons.sh "$app")"
done <<<"${apps}"
else
icon_strip=" —"
fi
sketchybar --set space.$sid label="$icon_strip"
done
for empty_space in $(aerospace list-workspaces --monitor $m --empty); do
sketchybar --set space.$empty_space display=0
done
for focus in $(aerospace list-workspaces --focused); do
sketchybar --set space.$focus background.drawing=on \
background.color=$ACCENT_COLOR \
label.color=$ITEM_COLOR \
icon.color=$ITEM_COLOR
done
done
@@ -0,0 +1,5 @@
#!/bin/bash
sketchybar --add item volume right \
--set volume script="$PLUGIN_DIR/volume.sh" \
--subscribe volume volume_change
@@ -0,0 +1,8 @@
#!/bin/bash
sketchybar --add item wifi right \
--set wifi \
icon="􀙥" \
label="Updating..." \
script="$PLUGIN_DIR/wifi.sh" \
--subscribe wifi wifi_change
@@ -1,7 +0,0 @@
require("items.apple")
require("items.menus")
require("items.spaces")
-- require("items.space_mode")
require("items.calendar")
require("items.widgets")
require("items.media")
@@ -1,118 +0,0 @@
local icons = require("icons")
local colors = require("colors")
local whitelist = { ["Spotify"] = true,
["Music"] = true };
local media_cover = sbar.add("item", {
position = "right",
background = {
image = {
string = "media.artwork",
scale = 0.85,
},
color = colors.transparent,
},
label = { drawing = false },
icon = { drawing = false },
drawing = false,
updates = true,
popup = {
align = "center",
horizontal = true,
}
})
local media_artist = sbar.add("item", {
position = "right",
drawing = false,
padding_left = 3,
padding_right = 0,
width = 0,
icon = { drawing = false },
label = {
width = 0,
font = { size = 9 },
color = colors.with_alpha(colors.white, 0.6),
max_chars = 18,
y_offset = 6,
},
})
local media_title = sbar.add("item", {
position = "right",
drawing = false,
padding_left = 3,
padding_right = 0,
icon = { drawing = false },
label = {
font = { size = 11 },
width = 0,
max_chars = 16,
y_offset = -5,
},
})
sbar.add("item", {
position = "popup." .. media_cover.name,
icon = { string = icons.media.back },
label = { drawing = false },
click_script = "nowplaying-cli previous",
})
sbar.add("item", {
position = "popup." .. media_cover.name,
icon = { string = icons.media.play_pause },
label = { drawing = false },
click_script = "nowplaying-cli togglePlayPause",
})
sbar.add("item", {
position = "popup." .. media_cover.name,
icon = { string = icons.media.forward },
label = { drawing = false },
click_script = "nowplaying-cli next",
})
local interrupt = 0
local function animate_detail(detail)
if (not detail) then interrupt = interrupt - 1 end
if interrupt > 0 and (not detail) then return end
sbar.animate("tanh", 30, function()
media_artist:set({ label = { width = detail and "dynamic" or 0 } })
media_title:set({ label = { width = detail and "dynamic" or 0 } })
end)
end
media_cover:subscribe("media_change", function(env)
if whitelist[env.INFO.app] then
local drawing = (env.INFO.state == "playing")
media_artist:set({ drawing = drawing, label = env.INFO.artist, })
media_title:set({ drawing = drawing, label = env.INFO.title, })
media_cover:set({ drawing = drawing })
if drawing then
animate_detail(true)
interrupt = interrupt + 1
sbar.delay(5, animate_detail)
else
media_cover:set({ popup = { drawing = false } })
end
end
end)
media_cover:subscribe("mouse.entered", function(env)
interrupt = interrupt + 1
animate_detail(true)
end)
media_cover:subscribe("mouse.exited", function(env)
animate_detail(false)
end)
media_cover:subscribe("mouse.clicked", function(env)
media_cover:set({ popup = { drawing = "toggle" }})
end)
media_title:subscribe("mouse.exited.global", function(env)
media_cover:set({ popup = { drawing = false }})
end)
@@ -1,76 +0,0 @@
local colors = require("colors")
local icons = require("icons")
local settings = require("settings")
local menu_watcher = sbar.add("item", {
drawing = false,
updates = false,
})
local space_menu_swap = sbar.add("item", {
drawing = false,
updates = true,
})
sbar.add("event", "swap_menus_and_spaces")
local max_items = 15
local menu_items = {}
for i = 1, max_items, 1 do
local menu = sbar.add("item", "menu." .. i, {
padding_left = settings.paddings,
padding_right = settings.paddings,
drawing = false,
icon = { drawing = false },
label = {
font = {
style = settings.font.style_map[i == 1 and "Heavy" or "Semibold"]
},
padding_left = 6,
padding_right = 6,
},
click_script = "$CONFIG_DIR/helpers/menus/bin/menus -s " .. i,
})
menu_items[i] = menu
end
sbar.add("bracket", { '/menu\\..*/' }, {
background = { color = colors.bg1 }
})
local menu_padding = sbar.add("item", "menu.padding", {
drawing = false,
width = 5
})
local function update_menus(env)
sbar.exec("$CONFIG_DIR/helpers/menus/bin/menus -l", function(menus)
sbar.set('/menu\\..*/', { drawing = false })
menu_padding:set({ drawing = true })
id = 1
for menu in string.gmatch(menus, '[^\r\n]+') do
if id < max_items then
menu_items[id]:set( { label = menu, drawing = true } )
else break end
id = id + 1
end
end)
end
-- menu_watcher:subscribe("front_app_switched", update_menus)
-- space_menu_swap:subscribe("swap_menus_and_spaces", function(env)
-- local drawing = menu_items[1]:query().geometry.drawing == "on"
-- if drawing then
-- menu_watcher:set( { updates = false })
-- sbar.set("/menu\\..*/", { drawing = false })
-- sbar.set("/space\\..*/", { drawing = true })
-- sbar.set("front_app", { drawing = true })
-- else
-- menu_watcher:set( { updates = true })
-- sbar.set("/space\\..*/", { drawing = false })
-- sbar.set("front_app", { drawing = false })
-- update_menus()
-- end
-- end)
return menu_watcher
@@ -1,145 +0,0 @@
local colors = require("colors")
local icons = require("icons")
local settings = require("settings")
local app_icons = require("helpers.app_icons")
local spaces = {}
for i = 1, 10, 1 do
local space = sbar.add("space", "space." .. i, {
space = i,
icon = {
font = { family = settings.font.numbers },
string = i,
padding_left = 15,
padding_right = 8,
color = colors.white,
highlight_color = colors.red,
},
label = {
padding_right = 20,
color = colors.grey,
highlight_color = colors.white,
font = "sketchybar-app-font:Regular:16.0",
y_offset = -1,
},
padding_right = 1,
padding_left = 1,
background = {
color = colors.bg1,
border_width = 3,
border_color = colors.transparent,
},
popup = { background = { border_width = 5, border_color = colors.black } }
})
spaces[i] = space
-- Padding space
sbar.add("space", "space.padding." .. i, {
space = i,
script = "",
width = settings.group_paddings,
})
local space_popup = sbar.add("item", {
position = "popup." .. space.name,
padding_left= 5,
padding_right= 0,
background = {
drawing = true,
image = {
corner_radius = 9,
scale = 0.2
}
}
})
space:subscribe("space_change", function(env)
local selected = env.SELECTED == "true"
local color = selected and colors.red or colors.bg2
space:set({
icon = { highlight = selected, },
label = { highlight = selected },
background = { border_color = selected and colors.black or colors.bg2 }
})
space_bracket:set({
background = { border_color = selected and colors.black or colors.bg2 }
})
end)
space:subscribe("mouse.clicked", function(env)
if env.BUTTON == "other" then
space_popup:set({ background = { image = "space." .. env.SID } })
space:set({ popup = { drawing = "toggle" } })
else
local op = (env.BUTTON == "right") and "--destroy" or "--focus"
sbar.exec("yabai -m space " .. op .. " " .. env.SID)
end
end)
space:subscribe("mouse.exited", function(_)
space:set({ popup = { drawing = false } })
end)
end
local space_window_observer = sbar.add("item", {
drawing = false,
updates = true,
})
space_window_observer:subscribe("space_windows_change", function(env)
local icon_line = ""
local no_app = true
for app, count in pairs(env.INFO.apps) do
no_app = false
local lookup = app_icons[app]
local icon = ((lookup == nil) and app_icons["default"] or lookup)
icon_line = icon_line .. " " .. icon
end
if (no_app) then
icon_line = ""
end
sbar.animate("tanh", 10, function()
spaces[env.INFO.space]:set({ label = icon_line })
end)
end)
-- spaces_indicator:subscribe("swap_menus_and_spaces", function(env)
-- local currently_on = spaces_indicator:query().icon.value == icons.switch.on
-- spaces_indicator:set({
-- icon = currently_on and icons.switch.off or icons.switch.on
-- })
-- end)
-- spaces_indicator:subscribe("mouse.entered", function(env)
-- sbar.animate("tanh", 30, function()
-- spaces_indicator:set({
-- background = {
-- color = { alpha = 1.0 },
-- border_color = { alpha = 1.0 },
-- },
-- icon = { color = colors.bg1 },
-- label = { width = "dynamic" }
-- })
-- end)
-- end)
-- spaces_indicator:subscribe("mouse.exited", function(env)
-- sbar.animate("tanh", 30, function()
-- spaces_indicator:set({
-- background = {
-- color = { alpha = 0.0 },
-- border_color = { alpha = 0.0 },
-- },
-- icon = { color = colors.grey },
-- label = { width = 0, }
-- })
-- end)
-- end)
-- spaces_indicator:subscribe("mouse.clicked", function(env)
-- sbar.trigger("swap_menus_and_spaces")
-- end)
@@ -1,105 +0,0 @@
local icons = require("icons")
local colors = require("colors")
local settings = require("settings")
local battery = sbar.add("item", "widgets.battery", {
position = "right",
icon = {
font = {
style = settings.font.style_map["Regular"],
size = 12.0,
}
},
label = { font = { family = settings.font.numbers } },
update_freq = 180,
popup = { align = "center" }
})
local remaining_time = sbar.add("item", {
position = "popup." .. battery.name,
icon = {
string = "Time remaining:",
width = 100,
align = "left"
},
label = {
string = "??:??h",
width = 100,
align = "right"
},
})
battery:subscribe({"routine", "power_source_change", "system_woke"}, function()
sbar.exec("pmset -g batt", function(batt_info)
local icon = "!"
local label = "?"
local found, _, charge = batt_info:find("(%d+)%%")
if found then
charge = tonumber(charge)
label = charge .. "%"
end
local color = colors.green
local charging, _, _ = batt_info:find("AC Power")
if charging then
icon = icons.battery.charging
else
if found and charge == 0 then
icon = icons.battery._0
color = colors.red
elseif found and charge <= 20 then
icon = icons.battery._20
color = colors.orange
elseif found and charge <= 40 then
icon = icons.battery._40
elseif found and charge <= 60 then
icon = icons.battery._60
elseif found and charge <= 80 then
icon = icons.battery._80
elseif found and charge <= 100 then
icon = icons.battery._100
else
icon = icons.battery._0
color = colors.red
end
end
local lead = ""
if found and charge < 10 then
lead = "0"
end
battery:set({
icon = {
string = icon,
color = color
},
label = { string = lead .. label },
})
end)
end)
battery:subscribe("mouse.clicked", function(env)
local drawing = battery:query().popup.drawing
battery:set( { popup = { drawing = "toggle" } })
if drawing == "off" then
sbar.exec("pmset -g batt", function(batt_info)
local found, _, remaining = batt_info:find(" (%d+:%d+) remaining")
local label = found and remaining .. "h" or "No estimate"
remaining_time:set( { label = label })
end)
end
end)
sbar.add("bracket", "widgets.battery.bracket", { battery.name }, {
background = { color = colors.bg1 }
})
sbar.add("item", "widgets.battery.padding", {
position = "right",
width = settings.group_paddings
})
@@ -1,69 +0,0 @@
local icons = require("icons")
local colors = require("colors")
local settings = require("settings")
-- Execute the event provider binary which provides the event "cpu_update" for
-- the cpu load data, which is fired every 2.0 seconds.
sbar.exec("killall cpu_load >/dev/null; $CONFIG_DIR/helpers/event_providers/cpu_load/bin/cpu_load cpu_update 2.0")
local cpu = sbar.add("graph", "widgets.cpu" , 62, {
position = "right",
graph = { color = colors.blue },
background = {
height = 22,
color = { alpha = 0 },
border_color = { alpha = 0 },
drawing = true,
},
icon = { string = icons.cpu },
label = {
string = "cpu ??%",
font = {
family = settings.font.numbers,
style = settings.font.style_map["Bold"],
size = 9.0,
},
align = "right",
padding_right = 0,
width = 0,
y_offset = 4
},
padding_right = settings.paddings + 6
})
cpu:subscribe("cpu_update", function(env)
-- Also available: env.user_load, env.sys_load
local load = tonumber(env.total_load)
cpu:push({ load / 100. })
local color = colors.blue
if load > 30 then
if load < 60 then
color = colors.yellow
elseif load < 80 then
color = colors.orange
else
color = colors.red
end
end
cpu:set({
graph = { color = color },
label = "cpu " .. env.total_load .. "%",
})
end)
cpu:subscribe("mouse.clicked", function(env)
sbar.exec("open -a 'Activity Monitor'")
end)
-- Background around the cpu item
sbar.add("bracket", "widgets.cpu.bracket", { cpu.name }, {
background = { color = colors.bg1 }
})
-- Background around the cpu item
sbar.add("item", "widgets.cpu.padding", {
position = "right",
width = settings.group_paddings
})
@@ -1,4 +0,0 @@
require("items.widgets.battery")
require("items.widgets.volume")
require("items.widgets.wifi")
require("items.widgets.cpu")
@@ -1,150 +0,0 @@
local colors = require("colors")
local icons = require("icons")
local settings = require("settings")
local popup_width = 250
local volume_percent = sbar.add("item", "widgets.volume1", {
position = "right",
icon = { drawing = false },
label = {
string = "??%",
padding_left = -1,
font = { family = settings.font.numbers }
},
})
local volume_icon = sbar.add("item", "widgets.volume2", {
position = "right",
padding_right = -1,
icon = {
string = icons.volume._100,
width = 0,
align = "left",
color = colors.grey,
font = {
style = settings.font.style_map["Regular"],
size = 14.0,
},
},
label = {
width = 25,
align = "left",
font = {
style = settings.font.style_map["Regular"],
size = 14.0,
},
},
})
local volume_bracket = sbar.add("bracket", "widgets.volume.bracket", {
volume_icon.name,
volume_percent.name
}, {
background = { color = colors.bg1 },
popup = { align = "center" }
})
sbar.add("item", "widgets.volume.padding", {
position = "right",
width = settings.group_paddings
})
local volume_slider = sbar.add("slider", popup_width, {
position = "popup." .. volume_bracket.name,
slider = {
highlight_color = colors.blue,
background = {
height = 6,
corner_radius = 3,
color = colors.bg2,
},
knob= {
string = "􀀁",
drawing = true,
},
},
background = { color = colors.bg1, height = 2, y_offset = -20 },
click_script = 'osascript -e "set volume output volume $PERCENTAGE"'
})
volume_percent:subscribe("volume_change", function(env)
local volume = tonumber(env.INFO)
local icon = icons.volume._0
if volume > 60 then
icon = icons.volume._100
elseif volume > 30 then
icon = icons.volume._66
elseif volume > 10 then
icon = icons.volume._33
elseif volume > 0 then
icon = icons.volume._10
end
local lead = ""
if volume < 10 then
lead = "0"
end
volume_icon:set({ label = icon })
volume_percent:set({ label = lead .. volume .. "%" })
volume_slider:set({ slider = { percentage = volume } })
end)
local function volume_collapse_details()
local drawing = volume_bracket:query().popup.drawing == "on"
if not drawing then return end
volume_bracket:set({ popup = { drawing = false } })
sbar.remove('/volume.device\\.*/')
end
local current_audio_device = "None"
local function volume_toggle_details(env)
if env.BUTTON == "right" then
sbar.exec("open /System/Library/PreferencePanes/Sound.prefpane")
return
end
local should_draw = volume_bracket:query().popup.drawing == "off"
if should_draw then
volume_bracket:set({ popup = { drawing = true } })
sbar.exec("SwitchAudioSource -t output -c", function(result)
current_audio_device = result:sub(1, -2)
sbar.exec("SwitchAudioSource -a -t output", function(available)
current = current_audio_device
local color = colors.grey
local counter = 0
for device in string.gmatch(available, '[^\r\n]+') do
local color = colors.grey
if current == device then
color = colors.white
end
sbar.add("item", "volume.device." .. counter, {
position = "popup." .. volume_bracket.name,
width = popup_width,
align = "center",
label = { string = device, color = color },
click_script = 'SwitchAudioSource -s "' .. device .. '" && sketchybar --set /volume.device\\.*/ label.color=' .. colors.grey .. ' --set $NAME label.color=' .. colors.white
})
counter = counter + 1
end
end)
end)
else
volume_collapse_details()
end
end
local function volume_scroll(env)
local delta = env.SCROLL_DELTA
sbar.exec('osascript -e "set volume output volume (output volume of (get volume settings) + ' .. delta .. ')"')
end
-- volume_icon:subscribe("mouse.clicked", volume_toggle_details)
-- volume_icon:subscribe("mouse.scrolled", volume_scroll)
-- volume_percent:subscribe("mouse.clicked", volume_toggle_details)
-- volume_percent:subscribe("mouse.exited.global", volume_collapse_details)
-- volume_percent:subscribe("mouse.scrolled", volume_scroll)
@@ -1,245 +0,0 @@
local icons = require("icons")
local colors = require("colors")
local settings = require("settings")
-- Execute the event provider binary which provides the event "network_update"
-- for the network interface "en0", which is fired every 2.0 seconds.
sbar.exec("killall network_load >/dev/null; $CONFIG_DIR/helpers/event_providers/network_load/bin/network_load en0 network_update 2.0")
local popup_width = 250
local wifi_up = sbar.add("item", "widgets.wifi1", {
position = "right",
padding_left = -5,
width = 0,
icon = {
padding_right = 0,
font = {
style = settings.font.style_map["Bold"],
size = 9.0,
},
string = icons.wifi.upload,
},
label = {
font = {
family = settings.font.mono,
style = settings.font.style_map["Bold"],
size = 9.0,
},
color = colors.red,
string = "??? Bps",
},
y_offset = 4,
})
local wifi_down = sbar.add("item", "widgets.wifi2", {
position = "right",
padding_left = -5,
icon = {
padding_right = 0,
font = {
style = settings.font.style_map["Bold"],
size = 9.0,
},
string = icons.wifi.download,
},
label = {
font = {
family = settings.font.mono,
style = settings.font.style_map["Bold"],
size = 9.0,
},
color = colors.blue,
string = "??? Bps",
},
y_offset = -4,
})
local wifi = sbar.add("item", "widgets.wifi.padding", {
position = "right",
label = { drawing = true, string = [[HERE]] },
})
-- Background around the item
local wifi_bracket = sbar.add("bracket", "widgets.wifi.bracket", {
wifi.name,
wifi_up.name,
wifi_down.name
}, {
background = { color = colors.bg1 },
popup = { align = "center", height = 30 }
})
local ssid = sbar.add("item", {
position = "popup." .. wifi_bracket.name,
icon = {
font = {
style = settings.font.style_map["Bold"]
},
string = icons.wifi.router,
},
width = popup_width,
align = "center",
label = {
font = {
size = 15,
style = settings.font.style_map["Bold"]
},
max_chars = 18,
string = "????????????",
},
background = {
height = 2,
color = colors.grey,
y_offset = -15
}
})
local hostname = sbar.add("item", {
position = "popup." .. wifi_bracket.name,
icon = {
align = "left",
string = "Hostname:",
width = popup_width / 2,
},
label = {
max_chars = 20,
string = "????????????",
width = popup_width / 2,
align = "right",
}
})
local ip = sbar.add("item", {
position = "popup." .. wifi_bracket.name,
icon = {
align = "left",
string = "IP:",
width = popup_width / 2,
},
label = {
string = "???.???.???.???",
width = popup_width / 2,
align = "right",
}
})
local mask = sbar.add("item", {
position = "popup." .. wifi_bracket.name,
icon = {
align = "left",
string = "Subnet mask:",
width = popup_width / 2,
},
label = {
string = "???.???.???.???",
width = popup_width / 2,
align = "right",
}
})
local router = sbar.add("item", {
position = "popup." .. wifi_bracket.name,
icon = {
align = "left",
string = "Router:",
width = popup_width / 2,
},
label = {
string = "???.???.???.???",
width = popup_width / 2,
align = "right",
},
})
sbar.add("item", { position = "right", width = settings.group_paddings })
wifi_up:subscribe("network_update", function(env)
local up_color = (env.upload == "000 Bps") and colors.grey or colors.red
local down_color = (env.download == "000 Bps") and colors.grey or colors.blue
wifi_up:set({
icon = { color = up_color },
label = {
string = env.upload,
color = up_color
}
})
wifi_down:set({
icon = { color = down_color },
label = {
string = env.download,
color = down_color
}
})
end)
wifi:subscribe({"wifi_change", "system_woke"}, function(env)
sbar.exec("ipconfig getifaddr en0", function(ip)
local connected = not (ip == "")
wifi:set({
icon = {
string = connected and icons.wifi.connected or icons.wifi.disconnected,
color = connected and colors.white or colors.red,
},
})
if connected then
sbar.exec("ipconfig getsummary en0 | awk -F ' SSID : ' '/ SSID : / {print $2}'", function(ssid_result)
wifi:set({
label = { string = ssid_result }
})
end)
else
wifi:set({
label = { string = "Disconnected" }
})
end
end)
end)
local function hide_details()
wifi_bracket:set({ popup = { drawing = false } })
end
local function toggle_details()
local should_draw = wifi_bracket:query().popup.drawing == "off"
if should_draw then
wifi_bracket:set({ popup = { drawing = true }})
sbar.exec("networksetup -getcomputername", function(result)
hostname:set({ label = result })
end)
sbar.exec("ipconfig getifaddr en0", function(result)
ip:set({ label = result })
end)
sbar.exec("ipconfig getsummary en0 | awk -F ' SSID : ' '/ SSID : / {print $2}'", function(result)
ssid:set({ label = result })
end)
sbar.exec("networksetup -getinfo Wi-Fi | awk -F 'Subnet mask: ' '/^Subnet mask: / {print $2}'", function(result)
mask:set({ label = result })
end)
sbar.exec("networksetup -getinfo Wi-Fi | awk -F 'Router: ' '/^Router: / {print $2}'", function(result)
router:set({ label = result })
end)
else
hide_details()
end
end
wifi_up:subscribe("mouse.clicked", toggle_details)
wifi_down:subscribe("mouse.clicked", toggle_details)
wifi:subscribe("mouse.clicked", toggle_details)
wifi:subscribe("mouse.exited.global", hide_details)
local function copy_label_to_clipboard(env)
local label = sbar.query(env.NAME).label.value
sbar.exec("echo \"" .. label .. "\" | pbcopy")
sbar.set(env.NAME, { label = { string = icons.clipboard, align="center" } })
sbar.delay(1, function()
sbar.set(env.NAME, { label = { string = label, align = "right" } })
end)
end
ssid:subscribe("mouse.clicked", copy_label_to_clipboard)
hostname:subscribe("mouse.clicked", copy_label_to_clipboard)
ip:subscribe("mouse.clicked", copy_label_to_clipboard)
mask:subscribe("mouse.clicked", copy_label_to_clipboard)
router:subscribe("mouse.clicked", copy_label_to_clipboard)
@@ -0,0 +1,42 @@
#!/bin/sh
source "$CONFIG_DIR/colors.sh"
PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)
CHARGING=$(pmset -g batt | grep 'AC Power')
if [ $PERCENTAGE = "" ]; then
exit 0
fi
case ${PERCENTAGE} in
9[0-9] | 100)
ICON="􀛨"
COLOR=$ITEM_COLOR
;;
[6-8][0-9])
ICON="􀺸"
COLOR=$ITEM_COLOR
;;
[3-5][0-9])
ICON="􀺶"
COLOR="0xFFd97706"
;;
[1-2][0-9])
ICON="􀛩"
COLOR="0xFFf97316"
;;
*)
ICON="􀛪"
COLOR="0xFFef4444"
;;
esac
if [[ $CHARGING != "" ]]; then
ICON="􀢋"
COLOR=$ITEM_COLOR
fi
# The item invoking this script (name $NAME) will get its icon and label
# updated with the current battery status
sketchybar --set $NAME icon="$ICON" label="${PERCENTAGE}%" icon.color="$COLOR"
@@ -0,0 +1,3 @@
#!/bin/bash
sketchybar --set $NAME label="$(date '+%a %d %b %I:%M %p')"
@@ -0,0 +1,9 @@
#!/bin/bash
CORE_COUNT=$(sysctl -n machdep.cpu.thread_count)
CPU_INFO=$(ps -eo pcpu,user)
CPU_SYS=$(echo "$CPU_INFO" | grep -v $(whoami) | sed "s/[^ 0-9\.]//g" | awk "{sum+=\$1} END {print sum/(100.0 * $CORE_COUNT)}")
CPU_USER=$(echo "$CPU_INFO" | grep $(whoami) | sed "s/[^ 0-9\.]//g" | awk "{sum+=\$1} END {print sum/(100.0 * $CORE_COUNT)}")
CPU_PERCENT=$(ps -eo pcpu | awk -v core_count=$(sysctl -n machdep.cpu.thread_count) '{sum+=$1} END {printf "%.0f\n", sum/core_count}')
sketchybar --set $NAME label="$CPU_PERCENT%"
@@ -0,0 +1,35 @@
#!/bin/sh
# Some events send additional information specific to the event in the $INFO
# variable. E.g. the front_app_switched event sends the name of the newly
# focused application in the $INFO variable:
# https://felixkratz.github.io/SketchyBar/config/events#events-and-scripting
app_switched() {
for m in $(aerospace list-monitors | awk '{print $1}'); do
for sid in $(aerospace list-workspaces --monitor $m --visible); do
apps=$( (echo "$INFO"; aerospace list-windows --monitor "$m" --workspace "$sid" \
| awk -F '|' '{gsub(/^ *| *$/, "", $2); print $2}') \
| awk '!seen[$0]++' | sort)
icon_strip=""
if [ "${apps}" != "" ]; then
while read -r app; do
icon_strip+=" $($CONFIG_DIR/plugins/icons.sh "$app")"
done <<<"${apps}"
else
icon_strip=" —"
fi
sketchybar --animate sin 10 --set space.$sid label="$icon_strip"
done
done
}
if [ "$SENDER" = "front_app_switched" ]; then
sketchybar --set $NAME label="$INFO" icon="$($CONFIG_DIR/plugins/icons.sh "$INFO")"
app_switched
fi
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Source the icon map with all the application icons
source "$CONFIG_DIR/icon_map.sh"
# Create a cache directory if it doesn't exist
CACHE_DIR="$HOME/.cache/sketchybar"
mkdir -p "$CACHE_DIR"
# Cache file for icon mappings
ICON_CACHE="$CACHE_DIR/icon_cache.txt"
# Create the cache file if it doesn't exist
if [ ! -f "$ICON_CACHE" ]; then
touch "$ICON_CACHE"
fi
# Check if the app is already in cache
APP_NAME="$1"
CACHED_ICON=$(grep "^$APP_NAME|" "$ICON_CACHE" | cut -d '|' -f2)
if [ -n "$CACHED_ICON" ]; then
# Cache hit, return the icon
echo "$CACHED_ICON"
exit 0
fi
# Get icon from the mapping function
__icon_map "$APP_NAME"
if [ -n "$icon_result" ]; then
echo "$APP_NAME|$icon_result" >>"$ICON_CACHE"
fi
echo "$icon_result"
@@ -0,0 +1,9 @@
#!/bin/bash
STATE="$(echo "$INFO" | jq -r '.state')"
if [ "$STATE" = "playing" ]; then
MEDIA="$(echo "$INFO" | jq -r '.title + " - " + .artist')"
sketchybar --set $NAME label="$MEDIA" drawing=on
else
sketchybar --set $NAME drawing=off
fi
@@ -0,0 +1,5 @@
#!/bin/bash
USAGE="$(memory_pressure | grep "System-wide memory free percentage:" | awk '{ printf("%02.0f\n", 100-$5"%") }')%"
sketchybar --set $NAME label="$USAGE"
@@ -0,0 +1,10 @@
#!/bin/sh
apps=$(aerospace list-windows --workspace $1 | awk -F '|' '{gsub(/^ *| *$/, "", $2); print $2}')
focused=$(aerospace list-workspaces --focused)
if [ "${apps}" = "" ] && [ "${focused}" != "$1" ]; then
sketchybar --set space.$1 display=0
else
aerospace workspace $1
fi
@@ -0,0 +1,57 @@
#!/bin/sh
source "$CONFIG_DIR/colors.sh"
update_workspace_appearance() {
local sid=$1
local is_focused=$2
if [ "$is_focused" = "true" ]; then
sketchybar --set space.$sid background.drawing=on \
background.color=$ACCENT_COLOR \
label.color=$ITEM_COLOR \
icon.color=$ITEM_COLOR
else
sketchybar --set space.$sid background.drawing=off \
label.color=$ACCENT_COLOR \
icon.color=$ACCENT_COLOR
fi
}
update_icons() {
m=$1
sid=$2
apps=$(aerospace list-windows --monitor "$m" --workspace "$sid" \
| awk -F '|' '{gsub(/^ *| *$/, "", $2); if (!seen[$2]++) print $2}' \
| sort)
icon_strip=""
if [ "${apps}" != "" ]; then
while read -r app; do
icon_strip+=" $($CONFIG_DIR/plugins/icons.sh "$app")"
done <<<"${apps}"
else
icon_strip=" —"
fi
sketchybar --animate sin 10 --set space.$sid label="$icon_strip"
}
update_workspace_appearance "$PREV_WORKSPACE" "false"
update_workspace_appearance "$FOCUSED_WORKSPACE" "true"
for m in $(aerospace list-monitors | awk '{print $1}'); do
for sid in $(aerospace list-workspaces --monitor $m --visible); do
sketchybar --set space.$sid display=$m
update_icons "$m" "$sid"
update_icons "$m" "$PREV_WORKSPACE"
apps=$(aerospace list-windows --monitor "$m" --workspace "$sid" | wc -l)
if [ "${apps}" -eq 0 ]; then
sketchybar --set space.$sid display=0
fi
done
done
@@ -0,0 +1,24 @@
#!/bin/sh
# The volume_change event supplies a $INFO variable in which the current volume
# percentage is passed to the script.
if [ "$SENDER" = "volume_change" ]; then
VOLUME=$INFO
case $VOLUME in
[6-9][0-9] | 100)
ICON="􀊩"
;;
[3-5][0-9])
ICON="􀊥"
;;
[1-9] | [1-2][0-9])
ICON="􀊡"
;;
*) ICON="􀊣" ;;
esac
sketchybar --set $NAME icon="$ICON" label="$VOLUME%"
fi
@@ -0,0 +1,7 @@
#!/bin/sh
if ifconfig en0 | grep -q "inet "; then
sketchybar --set $NAME icon="􀙇" label=""
else
sketchybar --set $NAME icon="􀙈" label="Disconnected"
fi
@@ -1,22 +0,0 @@
return {
paddings = 3,
group_paddings = 5,
icons = "sf-symbols", -- alternatively available: NerdFont
-- This is a font configuration for SF Pro and SF Mono (installed manually)
font = require("helpers.default_font"),
-- Alternatively, this is a font config for JetBrainsMono Nerd Font
-- font = {
-- text = "JetBrainsMono Nerd Font", -- Used for text
-- numbers = "JetBrainsMono Nerd Font", -- Used for numbers
-- style_map = {
-- ["Regular"] = "Regular",
-- ["Semibold"] = "Medium",
-- ["Bold"] = "SemiBold",
-- ["Heavy"] = "Bold",
-- ["Black"] = "ExtraBold",
-- },
-- },
}
@@ -1,5 +0,0 @@
#!/usr/bin/env lua
-- Load the sketchybar-package and prepare the helper binaries
require("helpers")
require("init")
+241 -119
View File
@@ -1,157 +1,279 @@
"$schema" = 'https://starship.rs/config-schema.json'
format = """
[](#9A348E)\
[](red)\
$os\
$username\
[](bg:#DA627D fg:#9A348E)\
[](bg:peach fg:red)\
$directory\
[](fg:#DA627D bg:#FCA17D)\
[](bg:yellow fg:peach)\
$git_branch\
$git_status\
[](fg:#FCA17D bg:#86BBD8)\
[](fg:yellow bg:green)\
$c\
$elixir\
$elm\
$golang\
$gradle\
$haskell\
$java\
$julia\
$nodejs\
$nim\
$rust\
$scala\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:#86BBD8 bg:#06969A)\
$docker_context\
[](fg:#06969A bg:#33658A)\
[](fg:green bg:sapphire)\
$conda\
[](fg:sapphire bg:lavender)\
$time\
[ ](fg:#33658A)\
\n $character
"""
[ ](fg:lavender)\
$cmd_duration\
$line_break\
$character"""
# Disable the blank line at the start of the prompt
add_newline = true
palette = 'catppuccin_macchiato'
[character]
success_symbol = '[](bold green) '
error_symbol = '[](bold red) '
# You can also replace your username with a neat symbol like  or disable this
# and use the os module below
[username]
show_always = true
style_user = "bg:#9A348E"
style_root = "bg:#9A348E"
format = '[󰌪 ]($style)'
disabled = false
# An alternative to the username module which displays a symbol that
# represents the current operating system
[os]
style = "bg:#9A348E"
disabled = true # Disabled by default
disabled = false
style = "bg:red fg:base"
[os.symbols]
Windows = ""
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = " "
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
AOSC = ""
Arch = "󰣇"
Artix = "󰣇"
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"
[username]
show_always = false
style_user = "bg:red fg:base"
style_root = "bg:red fg:base"
format = '[ $user]($style)'
[directory]
style = "bg:#DA627D"
style = "bg:peach fg:base"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
home_symbol = " "
# Here is how you can shorten some long paths by text replacement
# similar to mapped_locations in Oh My Posh:
[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = " "
"Music" = "󰝚 "
"Pictures" = " "
# Keep in mind that the order matters. For example:
# "Important Documents" = " 󰈙 "
# will not be replaced, because "Documents" was already substituted before.
# So either put "Important Documents" before "Documents" or use the substituted version:
# "Important 󰈙 " = " 󰈙 "
[c]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[docker_context]
symbol = " "
style = "bg:#06969A"
format = '[ $symbol $context ]($style)'
[elixir]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[elm]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
"Developer" = "󰲋 "
[git_branch]
symbol = ""
style = "bg:#FCA17D"
format = '[ $symbol $branch ]($style)'
style = "bg:yellow"
format = '[[ $symbol $branch ](fg:base bg:yellow)]($style)'
[git_status]
style = "bg:#FCA17D"
format = '[$all_status$ahead_behind ]($style)'
[golang]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[python]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ ${symbol} ${pyenv_prefix}(${version} )]($style)'
detect_extensions = []
[gradle]
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[haskell]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[java]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[julia]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
style = "bg:yellow"
format = '[[($all_status$ahead_behind )](fg:base bg:yellow)]($style)'
[nodejs]
symbol = ""
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[nim]
symbol = "󰆥 "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[c]
symbol = " "
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[rust]
symbol = " "
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[scala]
symbol = ""
style = "bg:#86BBD8 fg:#33658A"
format = '[ $symbol ($version) ]($style)'
[golang]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[php]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:baes bg:green)]($style)'
[java]
symbol = " "
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[kotlin]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[haskell]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:base bg:green)]($style)'
[python]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:base bg:green)]($style)'
[docker_context]
symbol = ""
style = "bg:sapphire"
format = '[[ $symbol( $context) ](fg:base bg:sapphire)]($style)'
[conda]
symbol = "  "
style = "fg:base bg:sapphire"
format = '[$symbol$environment ]($style)'
ignore_base = false
[time]
disabled = false
time_format = "%R" # Hour:Minute Format
style = "bg:#33658A"
format = '[ $time ]($style)'
time_format = "%R"
style = "bg:lavender"
format = '[[  $time ](fg:base bg:lavender)]($style)'
[line_break]
disabled = false
[character]
disabled = false
success_symbol = '[ ](bold fg:green)'
error_symbol = '[ ](bold fg:red)'
vimcmd_symbol = '[ ](bold fg:green)'
vimcmd_replace_one_symbol = '[ ](bold fg:lavender)'
vimcmd_replace_symbol = '[ ](bold fg:lavender)'
vimcmd_visual_symbol = '[ ](bold fg:yellow)'
[cmd_duration]
show_milliseconds = true
format = " in $duration "
style = "bg:lavender"
disabled = false
show_notifications = true
min_time_to_notify = 45000
[palettes.catppuccin_mocha]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"
[palettes.catppuccin_frappe]
rosewater = "#f2d5cf"
flamingo = "#eebebe"
pink = "#f4b8e4"
mauve = "#ca9ee6"
red = "#e78284"
maroon = "#ea999c"
peach = "#ef9f76"
yellow = "#e5c890"
green = "#a6d189"
teal = "#81c8be"
sky = "#99d1db"
sapphire = "#85c1dc"
blue = "#8caaee"
lavender = "#babbf1"
text = "#c6d0f5"
subtext1 = "#b5bfe2"
subtext0 = "#a5adce"
overlay2 = "#949cbb"
overlay1 = "#838ba7"
overlay0 = "#737994"
surface2 = "#626880"
surface1 = "#51576d"
surface0 = "#414559"
base = "#303446"
mantle = "#292c3c"
crust = "#232634"
[palettes.catppuccin_latte]
rosewater = "#dc8a78"
flamingo = "#dd7878"
pink = "#ea76cb"
mauve = "#8839ef"
red = "#d20f39"
maroon = "#e64553"
peach = "#fe640b"
yellow = "#df8e1d"
green = "#40a02b"
teal = "#179299"
sky = "#04a5e5"
sapphire = "#209fb5"
blue = "#1e66f5"
lavender = "#7287fd"
text = "#4c4f69"
subtext1 = "#5c5f77"
subtext0 = "#6c6f85"
overlay2 = "#7c7f93"
overlay1 = "#8c8fa1"
overlay0 = "#9ca0b0"
surface2 = "#acb0be"
surface1 = "#bcc0cc"
surface0 = "#ccd0da"
base = "#eff1f5"
mantle = "#e6e9ef"
crust = "#dce0e8"
[palettes.catppuccin_macchiato]
rosewater = "#f4dbd6"
flamingo = "#f0c6c6"
pink = "#f5bde6"
mauve = "#c6a0f6"
red = "#ed8796"
maroon = "#ee99a0"
peach = "#f5a97f"
yellow = "#eed49f"
green = "#a6da95"
teal = "#8bd5ca"
sky = "#91d7e3"
sapphire = "#7dc4e4"
blue = "#8aadf4"
lavender = "#b7bdf8"
text = "#cad3f5"
subtext1 = "#b8c0e0"
subtext0 = "#a5adcb"
overlay2 = "#939ab7"
overlay1 = "#8087a2"
overlay0 = "#6e738d"
surface2 = "#5b6078"
surface1 = "#494d64"
surface0 = "#363a4f"
base = "#1e1e2e"
mantle = "#1e2030"
crust = "#181926"
+109
View File
@@ -0,0 +1,109 @@
set-option -sa terminal-overrides ",xterm*:Tc"
set -g @plugin 'catppuccin/tmux#v2.1.3' # See https://github.com/catppuccin/tmux/tags for additional tags
# ...alongside
set -g @plugin 'tmux-plugins/tpm'
set -g mouse on
# Configure the catppuccin plugin
set -g @catppuccin_flavor "mocha"
set -g @catppuccin_window_status_style "rounded"
# Load catppuccin
run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux
# For TPM, instead use `run ~/.tmux/plugins/tmux/catppuccin.tmux`
# Make the status line pretty and add some modules
set -g status-right-length 100
set -g status-left-length 100
set -g status-left "#{E:@catppuccin_status_directory}"
set -g status-right "#{E:@catppuccin_status_application}"
set -ag status-right "#{E:@catppuccin_status_session}"
run ~/.config/tmux/plugins/tmux-plugins/tmux-cpu/cpu.tmux
run ~/.config/tmux/plugins/tmux-plugins/tmux-battery/battery.tmux
# Or, if using TPM, just run TPM
unbind C-b
set -g prefix C-Space
bind C-Space send-prefix
# Spawn a new window (tab equivalent)
bind -n M-c new-window
# Close the current pane
bind -n M-x kill-pane
# Switch to the previous window (tab equivalent)
bind -n M-b previous-window
# Switch to the next window (tab equivalent)
bind -n M-n next-window
# Split the window horizontally
bind -n M-v split-window -h
# Split the window vertically
bind -n M-g split-window -v
# Activate the pane on the left
bind -n M-h select-pane -L
# Activate the pane below
bind -n M-j select-pane -D
# Activate the pane above
bind -n M-k select-pane -U
# Activate the pane on the right
bind -n M-l select-pane -R
# Resize the pane to the left
bind -n M-Left resize-pane -L 5
# Resize the pane to the right
bind -n M-Right resize-pane -R 5
# Resize the pane down
bind -n M-Down resize-pane -D 5
# Resize the pane up
bind -n M-Up resize-pane -U 5
# Start windows and panes at 1, not 0
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'christoomey/vim-tmux-navigator'
#set -g @plugin 'catppuccin/tmux'
#set -g @plugin 'dreamsofcode-io/catppuccin-tmux'
set -g @plugin 'wooshdude/catppuccin-tmux'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @catppuccin_flavour 'mocha'
set -g @catppuccin_window_status_style "rounded"
set -g status-right-length 100
set -g status-left-length 100
set -g status-left ""
set -g @catppuccin_window_current_number_color "#{@thm_magenta}"
#set -g @catppuccin_status_middle_separator ""
set -g @catppuccin_status_right_separator ""
set -g @catppuccin_status_left_separator ""
run '~/.tmux/plugins/tpm/tpm'
# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
+3
View File
@@ -0,0 +1,3 @@
#! /bin/sh
borders active_color=0xffc6a0f6 inactive_color=0xff24273a width=10.0 blacklist="iPhone Mirroring"&
+2 -2
View File
@@ -40,5 +40,5 @@ yabai -m rule --add app="^Unity$" manage=on
# yabai -m config external_bar all:8:0
# borders active_color=0xffc6a0f6 inactive_color=0xff24273a width=10.0 blacklist="iPhone Mirroring"&
sh border
borders active_color=0xffc6a0f6 inactive_color=0xff24273a width=10.0 blacklist="iPhone Mirroring"&
# sh border
@@ -0,0 +1,698 @@
[manager]
cwd = { fg = "#94e2d5" }
# Hovered
hovered = { fg = "#1e1e2e", bg = "#89b4fa" }
preview_hovered = { underline = true }
# Find
find_keyword = { fg = "#f9e2af", italic = true }
find_position = { fg = "#f5c2e7", bg = "reset", italic = true }
# Marker
marker_copied = { fg = "#a6e3a1", bg = "#a6e3a1" }
marker_cut = { fg = "#f38ba8", bg = "#f38ba8" }
marker_selected = { fg = "#89b4fa", bg = "#89b4fa" }
# Tab
tab_active = { fg = "#1e1e2e", bg = "#cdd6f4" }
tab_inactive = { fg = "#cdd6f4", bg = "#45475a" }
tab_width = 1
# Count
count_copied = { fg = "#1e1e2e", bg = "#a6e3a1" }
count_cut = { fg = "#1e1e2e", bg = "#f38ba8" }
count_selected = { fg = "#1e1e2e", bg = "#89b4fa" }
# Border
border_symbol = "│"
border_style = { fg = "#7f849c" }
# Highlighting
syntect_theme = "~/.config/yazi/Catppuccin-mocha.tmTheme"
[status]
separator_open = ""
separator_close = ""
separator_style = { fg = "#45475a", bg = "#45475a" }
# Mode
mode_normal = { fg = "#1e1e2e", bg = "#89b4fa", bold = true }
mode_select = { fg = "#1e1e2e", bg = "#a6e3a1", bold = true }
mode_unset = { fg = "#1e1e2e", bg = "#f2cdcd", bold = true }
# Progress
progress_label = { fg = "#ffffff", bold = true }
progress_normal = { fg = "#89b4fa", bg = "#45475a" }
progress_error = { fg = "#f38ba8", bg = "#45475a" }
# Permissions
permissions_t = { fg = "#89b4fa" }
permissions_r = { fg = "#f9e2af" }
permissions_w = { fg = "#f38ba8" }
permissions_x = { fg = "#a6e3a1" }
permissions_s = { fg = "#7f849c" }
[input]
border = { fg = "#89b4fa" }
title = {}
value = {}
selected = { reversed = true }
[select]
border = { fg = "#89b4fa" }
active = { fg = "#f5c2e7" }
inactive = {}
[tasks]
border = { fg = "#89b4fa" }
title = {}
hovered = { underline = true }
[which]
mask = { bg = "#313244" }
cand = { fg = "#94e2d5" }
rest = { fg = "#9399b2" }
desc = { fg = "#f5c2e7" }
separator = "  "
separator_style = { fg = "#585b70" }
[help]
on = { fg = "#f5c2e7" }
exec = { fg = "#94e2d5" }
desc = { fg = "#9399b2" }
hovered = { bg = "#585b70", bold = true }
footer = { fg = "#45475a", bg = "#cdd6f4" }
[filetype]
rules = [
# Media
{ mime = "image/*", fg = "#94e2d5" },
{ mime = "{audio,video}/*", fg = "#f9e2af" },
# Archives
{ mime = "application/{,g}zip", fg = "#f5c2e7" },
{ mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#f5c2e7" },
# Fallback
{ name = "*", fg = "#cdd6f4" },
{ name = "*/", fg = "#89b4fa" }
]
[icon]
files = [
{ name = "gulpfile.js", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".babelrc", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "copying.lesser", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = ".npmrc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "docker-compose.yml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "svelte.config.js", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "copying", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "prettier.config.ts", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "gruntfile.babel.js", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".SRCINFO", text = "󰣇", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".xinitrc", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "docker-compose.yaml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "nuxt.config.ts", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "build", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".editorconfig", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "nuxt.config.mjs", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".gitlab-ci.yml", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "PKGBUILD", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".bash_profile", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".bashrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "compose.yml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "eslint.config.cjs", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "go.mod", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".mailmap", text = "󰊢", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gtkrc", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "go.work", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "justfile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "kritadisplayrc", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "commitlint.config.js", text = "󰜘", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = ".env", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "PrusaSlicerGcodeViewer.ini", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "r", text = "󰟔", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "license", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = ".gitignore", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "tailwind.config.js", text = "󱏿", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".prettierrc.yml", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".zprofile", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".zshenv", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "xmonad.hs", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".eslintignore", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "tsconfig.json", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".prettierrc.json5", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".ds_store", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "gulpfile.coffee", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "R", text = "󰟔", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = ".zshrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".prettierrc.toml", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".gvimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".xsession", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".justfile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = ".gitconfig", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gradle-wrapper.properties", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "ionic.config.json", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "cantorrc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".gleam", text = "", fg_dark = "#f5c2e7", fg_light = "#f5c2e7" },
{ name = "package-lock.json", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "package.json", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "hyprland.conf", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "gulpfile.babel.js", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".nvmrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".prettierignore", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "ext_typoscript_setup.txt", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "QtProject.conf", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "avif", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "mix.lock", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "build.gradle", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gemfile$", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = ".vimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "i18n.config.ts", text = "󰗊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "gulpfile.ts", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "build.zig.zon", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "checkhealth", text = "󰓙", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "xmobarrc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "_vimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".luaurc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kdenlive-layoutsrc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "gradlew", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "xsettingsd.conf", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "vlcrc", text = "󰕼", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "xorg.conf", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "xmobarrc.hs", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "workspace", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".gitattributes", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "favicon.ico", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "go.sum", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pom.xml", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "webpack", text = "󰜫", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "vagrantfile$", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "unlicense", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "tmux.conf.local", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "settings.gradle", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = ".dockerignore", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "sym-lib-table", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "_gvimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "kdenliverc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kdeglobals", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".prettierrc.yaml", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "rmd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "tailwind.config.mjs", text = "󱏿", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sxhkdrc", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "robots.txt", text = "󰚩", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "tailwind.config.ts", text = "󱏿", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "prettier.config.mjs", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "mpv.conf", text = "", fg_dark = "#1e1e2e", fg_light = "#1e1e2e" },
{ name = "py.typed", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "PrusaSlicer.ini", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "procfile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "rakefile", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "kritarc", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = ".Xresources", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "prettier.config.js", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "commitlint.config.ts", text = "󰜘", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "weston.ini", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "eslint.config.js", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cmakelists.txt", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = ".git-blame-ignore-revs", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "config", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "nuxt.config.cjs", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "node_modules", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "makefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "lxqt.conf", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "i18n.config.js", text = "󰗊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "FreeCAD.conf", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "prettier.config.cjs", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "tmux.conf", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "kalgebrarc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "i3status.conf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = ".settings.json", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "containerfile", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "i3blocks.conf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "lxde-rc.xml", text = "", fg_dark = "#9399b2", fg_light = "#9399b2" },
{ name = "gradle.properties", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "hypridle.conf", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "gruntfile.ts", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gruntfile.js", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "dockerfile", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "groovy", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "hyprlock.conf", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".prettierrc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "gnumakefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "commit_editmsg", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fp-lib-table", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "fp-info-cache", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "eslint.config.ts", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "nuxt.config.js", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "platformio.ini", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".nuxtrc", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "gruntfile.coffee", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "eslint.config.mjs", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "compose.yaml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "bspwmrc", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "brewfile", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = ".eslintrc", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = ".gtkrc-2.0", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = ".Xauthority", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".prettierrc.json", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".npmignore", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".gitmodules", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
]
exts = [
{ name = "rake", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "skp", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "eln", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "razor", text = "󱦘", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "vue", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sln", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "el", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "blp", text = "󰺾", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "jl", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "mdx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "jsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "ml", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "less", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "pot", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pl", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mli", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gif", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "aif", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cxxm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "fcbak", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "aac", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "query", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "android", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "m3u8", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "leex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "liquid", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "cue", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "fcmacro", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "log", text = "󰌱", fg_dark = "#cdd6f4", fg_light = "#cdd6f4" },
{ name = "pm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "brep", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "blend", text = "󰂫", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "md5", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sql", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "xcplayground", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "erb", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "t", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cache", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "r", text = "󰟔", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "x", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "import", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "m", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "lrc", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "o", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "d", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "c", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "h", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "rss", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "hbs", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "godot", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "eot", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "awk", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "fsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "a", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "pyi", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "asc", text = "󰦝", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "ass", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "css", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "psb", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "csproj", text = "󰪮", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "csv", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "gcode", text = "󰐫", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "ics", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "mk", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "bz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fctb", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "gz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "wasm", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "glb", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "elc", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "flf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "elf", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "dropbox", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "tres", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "apk", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ape", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "slvs", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "apl", text = "⍝", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cs", text = "󰌛", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "azcli", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "pp", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "flc", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "gemspec", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "pls", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "cfg", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fcscript", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "gnumakefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "zst", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "pxi", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "woff2", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "kicad_pcb", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "zsh", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "kicad_wks", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "info", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "cppm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "svg", text = "󰜡", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "flac", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "cuh", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "bin", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "zig", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "yml", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "yaml", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fsscript", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "xz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "diff", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "mojo", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cshtml", text = "󱦗", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "bak", text = "󰁯", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "nfo", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "bat", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "cpy", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gql", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "c++", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "lff", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "obj", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sha512", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "scm", text = "󰘧", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "aiff", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sig", text = "λ", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "webm", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "zip", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "wrz", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "jwmrc", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "xml", text = "󰗀", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cbl", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "rmd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "xaml", text = "󰙳", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "xm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "wvc", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "drl", text = "", fg_dark = "#eba0ac", fg_light = "#eba0ac" },
{ name = "erl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "3gp", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "ccm", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ino", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "kbx", text = "󰯄", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "test.js", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "wrl", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "pcm", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "woff", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "scala", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "webpack", text = "󰜫", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "hrl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "kra", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "kicad_pro", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "bazel", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "toml", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "iges", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "crdownload", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "so", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "strings", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "xls", text = "󰈛", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "wav", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "vsix", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "kicad_prl", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "mov", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "bash", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sqlite3", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "vsh", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "vim", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "lck", text = "", fg_dark = "#bac2de", fg_light = "#bac2de" },
{ name = "go", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pyo", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "vhdl", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "vhd", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "rar", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "magnet", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "vala", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "coffee", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "kdbx", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "po", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "v", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "prisma", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "f90", text = "󱈚", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "txt", text = "󰈙", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "mo", text = "∞", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "mp4", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cljc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "heex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "exs", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "clj", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "luau", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "fcparam", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "markdown", text = "", fg_dark = "#cdd6f4", fg_light = "#cdd6f4" },
{ name = "dxf", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "luac", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "desktop", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "docx", text = "󰈬", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cljd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "txz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "bicepparam", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "kt", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "fcstd", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "md", text = "", fg_dark = "#cdd6f4", fg_light = "#cdd6f4" },
{ name = "edn", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sub", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ttf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "tsx", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "hurl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "dll", text = "", fg_dark = "#11111b", fg_light = "#11111b" },
{ name = "lhs", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "tsconfig", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "msf", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "ts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "rproj", text = "󰗆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "org", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "signature", text = "λ", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "elm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pyc", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "tmux", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "tgz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "nu", text = ">", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "tfvars", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "lua", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "astro", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "lib", text = "", fg_dark = "#11111b", fg_light = "#11111b" },
{ name = "tex", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "ogg", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "stp", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sublime", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "test.tsx", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "nswag", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "test.ts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "test.jsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "dwg", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "bib", text = "󱉟", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "sass", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "templ", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "tcl", text = "󰛓", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "pck", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "swift", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "makefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "xcstrings", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "slim", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "iso", text = "", fg_dark = "#f2cdcd", fg_light = "#f2cdcd" },
{ name = "fsi", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "dart", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "nix", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "svelte", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "sv", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "bz2", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "sha256", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "twig", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "material", text = "󰔉", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ppt", text = "󰈧", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "pyd", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "step", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "hx", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "webmanifest", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "kicad_sch", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "cjs", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "stl", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "ejs", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ssa", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "license", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "jsonc", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "download", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "ige", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sqlite", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "psd1", text = "󰨊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "dump", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "resi", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "spec.ts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "fnl", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "cu", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "scss", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "config.ru", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "psd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "db", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "epub", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "haml", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "sol", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sml", text = "λ", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "svh", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sldprt", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ico", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "xlsx", text = "󰈛", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "rs", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "dconf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "bz3", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fdmdownload", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "fs", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "patch", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "hs", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "xcf", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "js", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "pyw", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "sha384", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fcmat", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "csh", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "suo", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "sha224", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sha1", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cr", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "huff", text = "󰡘", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "sh", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "sc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ksh", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "wma", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mp3", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "conf", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "3mf", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sbt", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "kicad_mod", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "terminal", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "rlib", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "pdf", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "mts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "kdenlive", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kts", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "spec.tsx", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "res", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "hxx", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "rb", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "vh", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ixx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cson", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "cts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "7z", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "ex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cpp", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "qss", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "app", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "jxl", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "qrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "qml", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "epp", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "otf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "hh", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "qm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pro", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "exe", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "kdenlivetitle", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kdb", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "mpp", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "Dockerfile", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "bqn", text = "⎉", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "torrent", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "m3u", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "py", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "pxd", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "f3d", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "out", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "spec.jsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "kicad_dru", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "ps1", text = "󰨊", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "ui", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "styl", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "f#", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "png", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "ply", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "php", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "eex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "tbc", text = "󰛓", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "part", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "pub", text = "󰷖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ipynb", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "opus", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "git", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "bmp", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "blade.php", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "nim", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "xpi", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "mustache", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "tscn", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "scad", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ai", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "hex", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "hpp", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "xul", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "mobi", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fcstd1", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ical", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "icalendar", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "bicep", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mkv", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "graphql", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "mjs", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "mint", text = "󰌪", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "m4v", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "m4a", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "tf", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gv", text = "󱁉", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "lock", text = "", fg_dark = "#bac2de", fg_light = "#bac2de" },
{ name = "krz", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "kpp", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "ko", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "kicad_sym", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "psm1", text = "󰨊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "pyx", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "json5", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "json", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "bzl", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ifb", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "image", text = "", fg_dark = "#f2cdcd", fg_light = "#f2cdcd" },
{ name = "jpg", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "jpeg", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "java", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "wv", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "ini", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cast", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cp", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "fctl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ifc", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sldasm", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "html", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "typoscript", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "🔥", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "htm", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "ste", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "spec.js", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "gresource", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "ebook", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gradle", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gd", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fish", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "igs", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "fbx", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "env", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "srt", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "dot", text = "󱁉", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "doc", text = "󰈬", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "d.ts", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "applescript", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cxx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "img", text = "", fg_dark = "#f2cdcd", fg_light = "#f2cdcd" },
{ name = "cljs", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cobol", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cob", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cmake", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "webp", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
]
+9 -4
View File
@@ -1,14 +1,19 @@
export EDITOR="/usr/local/bin/nvim"
export EDITOR="nvim"
export DOTNET_ROOT="/usr/local/share/dotnet"
alias py="python3"
alias pip="python3 -m pip"
alias border="sh border"
alias lvim="~/.local/bin/lvim"
alias border="sh ~/dotfiles/yabai/.config/yabai/border.sh"
alias ts="tailscale"
alias fetch="fastfetch"
eval "$(starship init zsh)"
function yy() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
yazi "$@" --cwd-file="$tmp"
if command -v yazi &>/dev/null; then
yazi "$@" --cwd-file="$tmp"
else
nvim .
fi
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
cd -- "$cwd"
fi