├── qutebrowser └── .qutebrowser │ ├── quickmarks │ ├── note.md │ ├── config.py │ ├── userscript │ └── readability-js │ └── gruvbox.py ├── others ├── others.md ├── Brewfile └── Brewfile.lock.json ├── tmux ├── Ringing.mp3 ├── pomocmd.sh ├── random_note.sh ├── pomodoro.sh └── .tmux.conf ├── wezterm ├── bg │ ├── bg.gif │ ├── bg.jpg │ ├── kakashi1.jpg │ ├── sukuna-epic-jjk-anime-wallpaper-preview.jpg │ ├── naruto-white-watercolor-desktop-wallpaper-preview.jpg │ ├── nier-automata-2B-dark-desktop-wallpaper-preview.jpg │ ├── aesthetic-lakeside-sunset-desktop-wallpaper-preview.jpg │ ├── naruto-hinata-hyuga-dawn-desktop-wallpaper-preview.jpg │ ├── naruto-orange-minimalist-desktop-wallpaper-preview.jpg │ ├── attack-on-titan-mikasa-red-desktop-wallpaper-preview.jpg │ ├── dragon-ball-manga-style-fight-scene-wallpaper-preview.jpg │ ├── gintama-gintoki-sakata-anime-desktop-wallpaper-preview.jpg │ ├── itachi-uchiha-crows-naruto-desktop-wallpaper-preview.jpg │ ├── mikasa-ackerman-yellow-aot-desktop-wallpaper-preview.jpg │ ├── minimalist-mountains-sunset-horizon-wallpaper-preview.jpg │ ├── naruto-kakashi-colorful-art-desktop-wallpaper-preview.jpg │ ├── demon-slayer-nezuko-kamado-pink-desktop-wallpaper-preview.jpg │ ├── naruto-itachi-uchiha-moon-black-desktop-wallpaper-preview.jpg │ ├── naruto-kakashi-with-lights-anime-desktop-wallpaper-preview.jpg │ ├── naruto-sasuke-epic-battle-anime-desktop-wallpaper-preview.jpg │ ├── eren-jaeger-attack-on-titan-epic-scene-desktop-wallpaper-preview.jpg │ └── mitsuri-kanroji-demon-slayer-pink-sword-desktop-wallpaper-preview.jpg └── .wezterm.lua ├── nvim └── .config │ └── nvim │ ├── lua │ ├── plugins │ │ ├── comment.lua │ │ ├── undo-tree.lua │ │ ├── arrow.lua │ │ ├── java.lua │ │ ├── tmux-navigator.lua │ │ ├── present.lua │ │ ├── go.lua │ │ ├── markdown.lua │ │ ├── surround.lua │ │ ├── mason-temp.lua │ │ ├── auto-tag.lua │ │ ├── treesitter.lua │ │ ├── flutter.lua │ │ ├── transparent.lua │ │ ├── none-ls.lua │ │ ├── debugging.lua │ │ ├── lualine.lua │ │ ├── themes.lua │ │ ├── fzf.lua │ │ ├── scroll.lua │ │ ├── gitstuff.lua │ │ ├── completions.lua │ │ ├── oil.lua │ │ ├── neotest.lua │ │ └── lsp-configs.lua │ ├── help-floating.lua │ ├── plugins.bak │ │ ├── stay-center.lua │ │ ├── neo-tree.lua │ │ └── telescope.lua │ ├── snipets.lua │ ├── vim-options.lua │ ├── floating-term.lua │ └── vim-helpers.lua │ ├── init.lua │ ├── note.md │ ├── ftplugin │ └── java.lua │ └── lazy-lock.json ├── .luarc.json ├── .gitignore ├── ghostty └── .config │ └── ghostty │ └── config ├── alacritty └── .config │ └── alacritty │ └── alacritty.toml ├── docker-compose.yaml ├── LICENSE ├── zsh └── .zshrc ├── README.md └── aerospace └── .config └── aerospace └── aerospace.toml /qutebrowser/.qutebrowser/quickmarks: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /others/others.md: -------------------------------------------------------------------------------- 1 | ### Note, or brew files,.. 2 | -------------------------------------------------------------------------------- /tmux/Ringing.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/tmux/Ringing.mp3 -------------------------------------------------------------------------------- /wezterm/bg/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/bg.gif -------------------------------------------------------------------------------- /wezterm/bg/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/bg.jpg -------------------------------------------------------------------------------- /wezterm/bg/kakashi1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/kakashi1.jpg -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/comment.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "numToStr/Comment.nvim", 3 | opts = {}, 4 | } 5 | -------------------------------------------------------------------------------- /wezterm/bg/sukuna-epic-jjk-anime-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/sukuna-epic-jjk-anime-wallpaper-preview.jpg -------------------------------------------------------------------------------- /.luarc.json: -------------------------------------------------------------------------------- 1 | { 2 | "diagnostics.disable": [ 3 | "cast-local-type" 4 | ], 5 | "diagnostics.globals": [ 6 | "vim", 7 | "local" 8 | ] 9 | } -------------------------------------------------------------------------------- /wezterm/bg/naruto-white-watercolor-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-white-watercolor-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/nier-automata-2B-dark-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/nier-automata-2B-dark-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/aesthetic-lakeside-sunset-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/aesthetic-lakeside-sunset-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/naruto-hinata-hyuga-dawn-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-hinata-hyuga-dawn-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/naruto-orange-minimalist-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-orange-minimalist-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .log 2 | .DS_Store 3 | dev_*.lua 4 | data 5 | ollama/ 6 | qutebrowser/.qutebrowser/bookmarks/ 7 | qutebrowser/.qutebrowser/quickmarks/ 8 | qutebrowser/.qutebrowser/.config.py.swp 9 | -------------------------------------------------------------------------------- /wezterm/bg/attack-on-titan-mikasa-red-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/attack-on-titan-mikasa-red-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/dragon-ball-manga-style-fight-scene-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/dragon-ball-manga-style-fight-scene-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/gintama-gintoki-sakata-anime-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/gintama-gintoki-sakata-anime-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/itachi-uchiha-crows-naruto-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/itachi-uchiha-crows-naruto-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/mikasa-ackerman-yellow-aot-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/mikasa-ackerman-yellow-aot-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/minimalist-mountains-sunset-horizon-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/minimalist-mountains-sunset-horizon-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/naruto-kakashi-colorful-art-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-kakashi-colorful-art-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/demon-slayer-nezuko-kamado-pink-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/demon-slayer-nezuko-kamado-pink-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/naruto-itachi-uchiha-moon-black-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-itachi-uchiha-moon-black-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/naruto-kakashi-with-lights-anime-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-kakashi-with-lights-anime-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/naruto-sasuke-epic-battle-anime-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/naruto-sasuke-epic-battle-anime-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/eren-jaeger-attack-on-titan-epic-scene-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/eren-jaeger-attack-on-titan-epic-scene-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /wezterm/bg/mitsuri-kanroji-demon-slayer-pink-sword-desktop-wallpaper-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunkka19xx/dotfiles/HEAD/wezterm/bg/mitsuri-kanroji-demon-slayer-pink-sword-desktop-wallpaper-preview.jpg -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/undo-tree.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "mbbill/undotree", 3 | config = function() 4 | vim.keymap.set("n", "ut", vim.cmd.UndotreeToggle) 5 | vim.keymap.set("n", "uf", vim.cmd.UndotreeFocus) 6 | end, 7 | } 8 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/arrow.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "otavioschwanck/arrow.nvim", 3 | opts = { 4 | show_icons = true, 5 | leader_key = "~", -- Recommended to be a single key 6 | buffer_leader_key = "m", -- Per Buffer Mappings 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/java.lua: -------------------------------------------------------------------------------- 1 | -- return { 2 | -- "nvim-java/nvim-java", 3 | -- config = function() 4 | -- require("java").setup() 5 | -- require("lspconfig").jdtls.setup({}) 6 | -- end, 7 | -- } 8 | -- https://github.com/nvim-java/nvim-java?tab=readme-ov-file 9 | return { "mfussenegger/nvim-jdtls" } 10 | -------------------------------------------------------------------------------- /ghostty/.config/ghostty/config: -------------------------------------------------------------------------------- 1 | # theme = "rose-pine" 2 | font-family = "Inconsolata Nerd Font Mono Bold" 3 | font-size = 30 4 | background-opacity = 0.81 5 | background-blur-radius = 0 6 | macos-titlebar-proxy-icon = hidden 7 | macos-titlebar-style = hidden 8 | title = "" 9 | cursor-opacity = 0.90 10 | adjust-cursor-thickness = 1 11 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/tmux-navigator.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "christoomey/vim-tmux-navigator", 3 | config = function() 4 | vim.keymap.set('n', 'C-h', ':TmuxNavigateLeft') 5 | vim.keymap.set('n', 'C-j', ':TmuxNavigateDown') 6 | vim.keymap.set('n', 'C-k', ':TmuxNavigateUp') 7 | vim.keymap.set('n', 'C-l', ':TmuxNavigateRight') 8 | end, 9 | } 10 | -------------------------------------------------------------------------------- /tmux/pomocmd.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | INPUT="$1" 5 | DEFAULT_WORK=30 6 | DEFAULT_BREAK=5 7 | DEFAULT_SESS=4 8 | 9 | # Parse input 10 | INPUT="${INPUT//,/ }" 11 | 12 | read SESS WORK BREAK <<<"$INPUT" 13 | 14 | SESS=${SESS:-$DEFAULT_SESS} 15 | WORK=${WORK:-$DEFAULT_WORK} 16 | BREAK=${BREAK:-$DEFAULT_BREAK} 17 | 18 | ~/dotfiles/tmux/pomodoro.sh "$SESS" "$WORK" "$BREAK" 19 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/present.lua: -------------------------------------------------------------------------------- 1 | return { 2 | 'tjdevries/present.nvim', 3 | config = function() 4 | require("present").setup { 5 | options = { 6 | syntax = { 7 | comment = "%%", 8 | stop = "", 9 | }, 10 | executors = {}, 11 | } 12 | } 13 | end 14 | } 15 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/go.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "ray-x/go.nvim", 3 | dependencies = { -- optional packages 4 | "ray-x/guihua.lua", 5 | "neovim/nvim-lspconfig", 6 | "nvim-treesitter/nvim-treesitter", 7 | }, 8 | config = function() 9 | require("go").setup() 10 | end, 11 | event = { "CmdlineEnter" }, 12 | ft = { "go", "gomod" }, 13 | build = ':lua require("go.install").update_all_sync()', -- if you need to install/update all binaries 14 | } 15 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/markdown.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "MeanderingProgrammer/render-markdown.nvim", 3 | opts = { 4 | line_breaks = true, 5 | }, 6 | dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.nvim" }, -- if you use the mini.nvim suite 7 | -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.icons' }, -- if you use standalone mini plugins 8 | -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons 9 | } 10 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/help-floating.lua: -------------------------------------------------------------------------------- 1 | vim.api.nvim_create_autocmd("FileType", { 2 | pattern = "help", 3 | callback = function() 4 | local crbuf = vim.api.nvim_get_current_buf() 5 | vim.cmd("wincmd c") 6 | -- vim.cmd("wincmd L") 7 | vim.api.nvim_open_win(crbuf, true, { 8 | relative = "editor", 9 | width = math.floor(vim.o.columns * 0.8), 10 | height = math.floor(vim.o.lines * 0.8), 11 | col = math.floor(vim.o.columns * 0.1), 12 | row = math.floor(vim.o.lines * 0.1), 13 | border = "rounded", 14 | }) 15 | end, 16 | }) 17 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/surround.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "kunkka19xx/simple-surr", 3 | config = function() 4 | require("simple-surr").setup({ 5 | keymaps = { 6 | surround_selection = "s", -- Keymap for surrounding selection 7 | surround_word = "sw", -- Keymap for surrounding word 8 | remove_or_change_surround_word = "sr", -- Keymap for removing/changing surrounding word 9 | toggle_or_change_surround_selection = "ts", -- Keymap for removing/changing surrounding selected text 10 | }, 11 | }) 12 | end, 13 | } 14 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/mason-temp.lua: -------------------------------------------------------------------------------- 1 | -- mason and mason-lspconfig released version 2.0. 2 | -- with some breaking changes, multiple methods have been changed 3 | -- therefore (for now) a workaround is needed for Mason to still work in LazyVim 4 | -- THIS WILL PIN the VERSION number, remove this file later, when it's no longer needed 5 | return { 6 | { "mason-org/mason.nvim", version = "1.11.0" }, 7 | { "mason-org/mason-lspconfig.nvim", version = "1.32.0" }, 8 | } 9 | -- after adding/saving this file run :Lazy to potentially 're-install' the versions above 10 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins.bak/stay-center.lua: -------------------------------------------------------------------------------- 1 | -- https://github.com/arnamak/stay-centered.nvim 2 | return { 3 | { 4 | "arnamak/stay-centered.nvim", 5 | opts = function() 6 | require("stay-centered").setup({ 7 | -- Add any configurations here, like skip_filetypes if needed 8 | -- skip_filetypes = {"lua", "typescript"}, 9 | }) 10 | vim.keymap.set("n", "US", function() 11 | require("stay-centered").toggle() 12 | vim.notify("Toggled stay-centered", vim.log.levels.INFO) 13 | end, { desc = "[P]Toggle stay-centered.nvim" }) 14 | end, 15 | }, 16 | } 17 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins.bak/neo-tree.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-neo-tree/neo-tree.nvim", 3 | branch = "v3.x", 4 | dependencies = { 5 | "nvim-lua/plenary.nvim", 6 | "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended 7 | "MunifTanjim/nui.nvim", 8 | -- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information 9 | }, 10 | config = function() 11 | -- key map for neo tree 12 | vim.keymap.set("n", "v", ":Neotree filesystem reveal right", {}) 13 | vim.keymap.set("n", "xx", ":Neotree filesystem close ", {}) 14 | end, 15 | } 16 | -------------------------------------------------------------------------------- /alacritty/.config/alacritty/alacritty.toml: -------------------------------------------------------------------------------- 1 | [env] 2 | TERM = "xterm-256color" 3 | 4 | [window] 5 | padding.x = 10 6 | padding.y = 10 7 | 8 | # decorations = "Buttonless" 9 | decorations = "None" #for linux also 10 | 11 | opacity = 0.85 12 | blur = true 13 | 14 | option_as_alt = "Both" 15 | 16 | [font] 17 | normal.family = "Inconsolata Nerd Font" 18 | 19 | size = 21 20 | 21 | 22 | [keyboard] 23 | bindings = [ 24 | { key = "N", mods = "Control|Shift", action = "CreateNewWindow" }, 25 | { key = "F", mods = "Control|Shift", action = "ToggleFullscreen" }, 26 | { key = "L", mods = "Control|Shift", action = "ToggleMaximized" }, 27 | ] 28 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/auto-tag.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "windwp/nvim-ts-autotag", 3 | opts = { 4 | -- Defaults 5 | enable_close = true, -- Auto close tags 6 | enable_rename = true, -- Auto rename pairs of tags 7 | enable_close_on_slash = false, -- Auto close on trailing nw", function() 27 | require("luasnip").jump(1) 28 | end, { silent = true }) 29 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/treesitter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-treesitter/nvim-treesitter", 3 | build = ":TSUpdate", 4 | config = function() 5 | local config = require("nvim-treesitter.configs") 6 | config.setup({ 7 | -- auto install 8 | auto_install = true, 9 | -- add language you want to highlight in code 10 | ensure_installed = { 11 | "c", 12 | "lua", 13 | "vim", 14 | "javascript", 15 | "typescript", 16 | "tsx", 17 | "html", 18 | "go", 19 | "gomod", 20 | "gowork", 21 | "gosum", 22 | "java", 23 | "json", 24 | "zig", 25 | }, 26 | sync_install = false, 27 | highlight = { enable = true }, 28 | indent = { enable = true }, 29 | }) 30 | end, 31 | } 32 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/flutter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "akinsho/flutter-tools.nvim", 3 | lazy = false, 4 | dependencies = { 5 | "nvim-lua/plenary.nvim", 6 | "stevearc/dressing.nvim", -- optional for vim.ui.select 7 | }, 8 | config = function() 9 | require("flutter-tools").setup({}) -- use defaults 10 | -- Set indentation to 2 spaces for Dart/Flutter files 11 | vim.api.nvim_create_autocmd("FileType", { 12 | pattern = "dart", 13 | callback = function() 14 | vim.opt_local.tabstop = 2 15 | vim.opt_local.shiftwidth = 2 16 | vim.opt_local.softtabstop = 2 17 | vim.opt_local.expandtab = true 18 | end, 19 | }) 20 | end, 21 | } 22 | -------------------------------------------------------------------------------- /tmux/random_note.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | MIN_WIDTH=80 4 | CURRENT_WIDTH=$(tmux display -p '#{client_width}') 5 | 6 | if [ "$CURRENT_WIDTH" -lt "$MIN_WIDTH" ]; then 7 | echo "" 8 | exit 0 9 | fi 10 | 11 | LATEST_FILE=$(ls -1t ~/Documents/git/scratch/todo_[0-9][0-9][0-1][0-9][0-3][0-9].md 2>/dev/null | head -n 1) 12 | 13 | if [ -z "$LATEST_FILE" ]; then 14 | echo "📂 No todo file found." 15 | exit 0 16 | fi 17 | 18 | tasks=() 19 | while IFS= read -r line; do 20 | tasks+=("$line") 21 | done < <(awk '/^- \[ \] / {sub(/^- \[ \] /, ""); print}' "$LATEST_FILE") 22 | 23 | if [ "${#tasks[@]}" -eq 0 ]; then 24 | echo "🎧 All done!" 25 | else 26 | task="${tasks[RANDOM % ${#tasks[@]}]}" 27 | # Remove Markdown checkbox prefix 28 | echo "⏰ $task" | sed 's/^- \[ \] //' 29 | fi 30 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | open-webui: 3 | image: ghcr.io/open-webui/open-webui:main 4 | container_name: open-webui 5 | extra_hosts: 6 | - host.docker.internal:host-gateway 7 | ports: 8 | - 8080:8080 9 | environment: 10 | UID: 1000 11 | PID: 1000 12 | # OLLAMA_BASE_URL: http://ollama:11434 this is for ollama container 13 | OLLAMA_BASE_URL: http://host.docker.internal:11434 14 | WEBUI_SECRET_KEY: 15 | volumes: 16 | - ./data/webui:/app/backend/data 17 | # depends_on: 18 | # - ollama 19 | 20 | # ollama: 21 | # image: ollama/ollama:latest 22 | # container_name: ollama 23 | # environment: 24 | # UID: 1000 25 | # PID: 1000 26 | # ports: 27 | # - 11434:11434/tcp 28 | # volumes: 29 | # - ./data/ollama/ollama:/root/.ollama 30 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/transparent.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "xiyaowong/transparent.nvim", 3 | config = function() 4 | require("transparent").setup({ 5 | enable = true, 6 | extra_groups = { 7 | "Normal", 8 | "NormalNC", 9 | "TelescopeBorder", 10 | -- "NvimTreeNormal", 11 | "LualineNormal", 12 | "FzfLuaBorder", 13 | "FzfLuaNormal", 14 | "FzfLuaTitle", 15 | "FzfLuaPreviewBorder", 16 | "FzfLuaPreviewNormal", 17 | "FzfLuaPreviewTitle", 18 | }, 19 | }) 20 | -- require("transparent").clear_prefix("NeoTree") 21 | require("transparent").clear_prefix("lualine") 22 | -- depends on pc, these settings are needed 23 | vim.cmd("highlight Normal guibg=NONE") 24 | vim.cmd("highlight Lualine guibg=NONE") 25 | vim.cmd("highlight Lualine guifg=NONE") 26 | vim.cmd("highlight NormalNC guibg=NONE") 27 | vim.cmd("highlight CursorLine guibg=NONE") 28 | end, 29 | } 30 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/none-ls.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvimtools/none-ls.nvim", 3 | config = function() 4 | local null_ls = require("null-ls") 5 | null_ls.setup({ 6 | sources = { 7 | null_ls.builtins.formatting.stylua, 8 | null_ls.builtins.formatting.prettier, 9 | null_ls.builtins.formatting.black, 10 | null_ls.builtins.formatting.isort, 11 | -- null_ls.builtins.diagnostics.mypy, 12 | -- null_ls.builtins.diagnostics.ruff, 13 | null_ls.builtins.formatting.gofumpt, 14 | null_ls.builtins.code_actions.impl, 15 | null_ls.builtins.formatting.asmfmt, 16 | -- null_ls.builtins.formatting.google_java_format, 17 | }, 18 | }) 19 | vim.keymap.set("n", "gf", vim.lsp.buf.format, {}) 20 | end, 21 | } 22 | -------------------------------------------------------------------------------- /nvim/.config/nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- pull lazy vim 2 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 3 | if not vim.loop.fs_stat(lazypath) then 4 | vim.fn.system({ 5 | "git", 6 | "clone", 7 | "--filter=blob:none", 8 | "https://github.com/folke/lazy.nvim.git", 9 | "--branch=stable", 10 | lazypath, 11 | }) 12 | end 13 | vim.opt.rtp:prepend(lazypath) 14 | 15 | -- install plugins and options 16 | require("vim-options") 17 | require("vim-helpers") 18 | require("help-floating") 19 | require("floating-term") 20 | -- require("lazy").setup("plugins") 21 | local uname = vim.loop.os_uname() 22 | local hostname = vim.loop.os_gethostname() 23 | lazy_opts = {} 24 | if not (uname.sysname == "Darwin" and hostname == "kunkka07xx") then 25 | lazy_opts.lockfile = "~/nix/dotfiles/nvim/lazy-lock.json" 26 | end 27 | require("lazy").setup("plugins", lazy_opts) 28 | require("snipets") 29 | -------------------------------------------------------------------------------- /qutebrowser/.qutebrowser/note.md: -------------------------------------------------------------------------------- 1 | ### Read 2 | 3 | Read a web page like a book (still some limitations but yeah, using it for fun) 4 | 5 | - install some package 6 | ``` shell 7 | npm install -g @mozilla/readability 8 | npm install -g jsdom 9 | npm install -g qutejs 10 | ``` 11 | 12 | - Add node modules the path (.zshrc): 13 | export NODE_PATH=$NODE_PATH:$(npm root -g) 14 | 15 | - Make a dir in the application folder then copy reading file to 16 | ```shell 17 | mkdir -p ~/Library/Application\ Support/qutebrowser/userscripts 18 | ``` 19 | 20 | ```shell 21 | cp ~/.qutebrowser/userscript/readability-js ~/Library/Application\ Support/qutebrowser/userscripts/readability-js 22 | ``` 23 | 24 | - Add execute mod 25 | - Set path for browser 26 | ```shell 27 | :set qt.environ '{"PATH": "/opt/homebrew/bin", "NODE_PATH": "/opt/homebrew/lib/node_modules"}' 28 | ``` 29 | - Then read 30 | ```shell 31 | :spawn --userscript readability-js 32 | ``` 33 | -------------------------------------------------------------------------------- /others/Brewfile: -------------------------------------------------------------------------------- 1 | tap "homebrew/bundle" 2 | tap "nikitabobko/tap" 3 | brew "bat" 4 | brew "cocoapods" 5 | brew "colima" 6 | brew "docker" 7 | brew "docker-compose" 8 | brew "docker-credential-helper" 9 | brew "fzf" 10 | brew "git" 11 | brew "go" 12 | brew "golangci-lint" 13 | brew "gradle" 14 | brew "lazydocker" 15 | brew "llvm" 16 | brew "neovim" 17 | brew "node" 18 | brew "openjdk@17" 19 | brew "powerlevel10k" 20 | brew "protobuf" 21 | brew "protoc-gen-go" 22 | brew "protoc-gen-go-grpc" 23 | brew "ripgrep" 24 | brew "sdl2" 25 | brew "sdl2_image" 26 | brew "sdl2_ttf" 27 | brew "stow" 28 | brew "tlrc" 29 | brew "tmux" 30 | brew "tree" 31 | brew "wget" 32 | brew "zig" 33 | brew "zsh-autosuggestions" 34 | brew "zsh-syntax-highlighting" 35 | cask "aerospace" 36 | cask "android-commandlinetools" 37 | cask "android-platform-tools" 38 | cask "discord" 39 | cask "flutter" 40 | cask "ghostty" 41 | cask "iterm2" 42 | cask "keycastr" 43 | cask "obs" 44 | cask "sioyek" 45 | cask "wezterm" 46 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/debugging.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "mfussenegger/nvim-dap", 3 | dependencies = { "rcarriga/nvim-dap-ui", "nvim-neotest/nvim-nio", "leoluz/nvim-dap-go" }, 4 | config = function() 5 | local dap, dapui = require("dap"), require("dapui") 6 | require("dap-go").setup() 7 | require("dapui").setup() 8 | 9 | dap.listeners.before.attach.dapui_config = function() 10 | dapui.open() 11 | end 12 | dap.listeners.before.launch.dapui_config = function() 13 | dapui.open() 14 | end 15 | dap.listeners.before.event_terminated.dapui_config = function() 16 | dapui.close() 17 | end 18 | dap.listeners.before.event_exited.dapui_config = function() 19 | dapui.close() 20 | end 21 | vim.keymap.set("n", "dt", dap.toggle_breakpoint, {}) 22 | vim.keymap.set("n", "dc", dap.continue, {}) 23 | end, 24 | } 25 | 26 | -- dont for get to install debugger here: https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation 27 | -- eg: go... brew install delve, then add go dependencies 28 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/lualine.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-lualine/lualine.nvim", 3 | config = function() 4 | local function short_filename() 5 | local root = vim.fn.getcwd() 6 | local filepath = vim.fn.expand("%:p") 7 | if not filepath:find(root, 1, true) then 8 | return vim.fn.expand("%:t") 9 | end 10 | 11 | local relpath = filepath:sub(#root + 2) 12 | local parts = vim.split(relpath, "/") 13 | local len = #parts 14 | if len > 2 then 15 | return table.concat({ parts[len - 2], parts[len - 1], parts[len] }, "/") 16 | else 17 | return relpath 18 | end 19 | end 20 | require("lualine").setup({ 21 | options = { 22 | theme = "OceanicNext", 23 | }, 24 | sections = { 25 | lualine_c = { 26 | { short_filename }, 27 | }, 28 | lualine_z = {}, 29 | }, 30 | }) 31 | end, 32 | } 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 kunkka19xx 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/themes.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "folke/tokyonight.nvim", 4 | name = "tokyonight", 5 | priority = 999, 6 | config = function() 7 | -- Set default theme 8 | local themes = { 9 | "tokyonight", -- for recording 10 | "accent", -- this guy is for my eyes 11 | "catppuccin", -- for recording 12 | "rose-pine", -- for fun 13 | } 14 | local current_theme_index = 1 15 | -- Set default theme (first theme) 16 | vim.cmd.colorscheme(themes[current_theme_index]) 17 | 18 | -- Key mapping to switch themes (e.g., nt) 19 | vim.keymap.set("n", "nt", function() 20 | current_theme_index = current_theme_index + 1 21 | if current_theme_index > #themes then 22 | current_theme_index = 1 23 | end 24 | local theme = themes[current_theme_index] 25 | vim.cmd.colorscheme(theme) 26 | print("Changed nvim theme to: " .. theme) 27 | end, { noremap = true, silent = true }) 28 | end, 29 | }, 30 | { 31 | "catppuccin/nvim", 32 | name = "catppuccin", 33 | priority = 800, 34 | }, 35 | { 36 | "rose-pine/neovim", 37 | name = "rose-pine", 38 | priority = 1000, 39 | }, 40 | { 41 | "alligator/accent.vim", 42 | name = "accent", 43 | priority = 1100, 44 | }, 45 | } 46 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins.bak/telescope.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-telescope/telescope.nvim", 4 | tag = "0.1.8", 5 | -- or , branch = '0.1.x', 6 | dependencies = { "nvim-lua/plenary.nvim" }, 7 | file_ignore_patterns = { ".class" }, 8 | config = function() 9 | -- use telescope' 10 | local builtin = require("telescope.builtin") 11 | vim.keymap.set("n", "ff", builtin.find_files, {}) 12 | vim.keymap.set("n", "pf", builtin.git_files, {}) 13 | vim.keymap.set("n", "fg", builtin.live_grep, {}) 14 | vim.keymap.set("n", "fb", builtin.buffers, {}) 15 | vim.keymap.set("n", "fh", builtin.help_tags, {}) 16 | end, 17 | }, 18 | { 19 | "nvim-telescope/telescope-ui-select.nvim", 20 | config = function() 21 | require("telescope").setup({ 22 | defaults = { 23 | layout_config = { 24 | horizontal = { 25 | preview_width = 0.6, 26 | width = 0.85, 27 | }, 28 | vertical = { 29 | preview_height = 0.6, 30 | height = 0.85, 31 | }, 32 | }, 33 | }, 34 | extensions = { 35 | ["ui-select"] = { 36 | require("telescope.themes").get_dropdown({}), 37 | }, 38 | }, 39 | }) 40 | require("telescope").load_extension("ui-select") 41 | end, 42 | }, 43 | } 44 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/vim-options.lua: -------------------------------------------------------------------------------- 1 | vim.cmd("set expandtab") 2 | vim.cmd("set tabstop=4") 3 | vim.cmd("set softtabstop=4") 4 | vim.cmd("set shiftwidth=4") 5 | vim.g.mapleader = " " 6 | vim.cmd("set number") 7 | vim.cmd("set relativenumber") 8 | vim.cmd("set cursorline") 9 | vim.api.nvim_set_hl(0, "LineNrAbove", { fg = "white" }) 10 | vim.api.nvim_set_hl(0, "LineNrBelow", { fg = "#ead84e" }) 11 | vim.api.nvim_set_option("clipboard", "unnamed") 12 | vim.opt.hlsearch = true 13 | vim.opt.incsearch = true 14 | -- move selected lines 15 | vim.keymap.set("v", "J", ":m '>+1gv=gv") 16 | vim.keymap.set("v", "K", ":m '<-2gv=gv") 17 | -- paste over highlight word 18 | vim.keymap.set("x", "p", '"_dP') 19 | vim.opt.colorcolumn = "94" 20 | vim.opt.clipboard = "unnamedplus" 21 | -- wrap text 22 | -- vim.opt.swapfile = false 23 | vim.opt.wrap = true 24 | vim.opt.linebreak = true 25 | -- vim.opt.breakindent = true 26 | -- vim.opt.showbreak = "↳\\" 27 | -- fk llm-ls 28 | local notify_original = vim.notify 29 | vim.notify = function(msg, ...) 30 | if 31 | msg 32 | and ( 33 | msg:match("position_encoding param is required") 34 | or msg:match("Defaulting to position encoding of the first client") 35 | or msg:match("multiple different client offset_encodings") 36 | ) 37 | then 38 | return 39 | end 40 | return notify_original(msg, ...) 41 | end 42 | -------------------------------------------------------------------------------- /nvim/.config/nvim/note.md: -------------------------------------------------------------------------------- 1 | - Use this as a sub module using sub tree 2 | [refer atlassian](https://www.atlassian.com/git/tutorials/git-subtree) 3 | [refer git](https://docs.github.com/en/get-started/using-git/about-git-subtree-merges) 4 | 5 | 1. Add remote in the parent repo 6 | 7 | ```shell 8 | git remote add nvim https://github.com/kunkka19xx/nvim.git 9 | ``` 10 | 11 | ```shell 12 | git fetch nvim 13 | ``` 14 | 15 | 2. Add prefix 16 | 17 | Please remove the old nvim in the parent repo 18 | 19 | ```shell 20 | git subtree add --prefix=nvim/.config/nvim nvim main --squash 21 | ``` 22 | 23 | - This command adds child repo (remote name, main branch) into the `nvim/.config/nvim` directory in the parent repo 24 | 25 | _in the nix repo_ 26 | 27 | ```shell 28 | git subtree add --prefix=dotfiles/nvim nvim main --squash 29 | ``` 30 | 31 | 3. Push changes from parent repo 32 | 33 | Be careful with the prefix (this should be correct) 34 | 35 | ```shell 36 | git subtree push --prefix=nvim/.config/nvim nvim main 37 | ``` 38 | 39 | or (nix repo) 40 | 41 | ```shell 42 | git subtree push --prefix=dotfiles/nvim nvim main 43 | ``` 44 | 45 | - If you want to sync anyway, remove --squash from 2nd step 46 | 47 | 4. Pull changes from child repo 48 | 49 | - fetch remote 50 | - pull with right prefix 51 | 52 | ```shell 53 | git fetch nvim 54 | git subtree pull --prefix=nvim/.config/nvim nvim main --squash 55 | ``` 56 | 57 | or (nix repo) 58 | 59 | ```shell 60 | git fetch nvim 61 | git subtree pull --prefix=dotfiles/nvim nvim main --squash 62 | 63 | ``` 64 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/floating-term.lua: -------------------------------------------------------------------------------- 1 | local state = { floating = { buf = -1, win = -1 } } 2 | local function create_floating_window(opts) 3 | opts = opts or {} 4 | local width = math.floor(vim.o.columns * 0.8) 5 | local height = math.floor(vim.o.lines * 0.8) 6 | 7 | local row = math.floor((vim.o.lines - height) / 2) 8 | local col = math.floor((vim.o.columns - width) / 2) 9 | 10 | local buf = nil 11 | if vim.api.nvim_buf_is_valid(opts.buf) then 12 | buf = opts.buf 13 | else 14 | buf = vim.api.nvim_create_buf(false, true) 15 | end 16 | 17 | local config = { 18 | relative = "editor", 19 | width = width, 20 | height = height, 21 | row = row, 22 | col = col, 23 | style = "minimal", 24 | border = "rounded" 25 | } 26 | vim.api.nvim_set_hl(0, "MyFloatingWindow", { bg = "#1e1e1e", fg = "#ffffff", blend = 10 }) 27 | local win = vim.api.nvim_open_win(buf, true, config) 28 | return { buf = buf, win = win } 29 | end 30 | 31 | local toggle_term = function() 32 | if not vim.api.nvim_win_is_valid(state.floating.win) then 33 | state.floating = create_floating_window { buf = state.floating.buf } 34 | if vim.bo[state.floating.buf].buftype ~= "terminal" then 35 | vim.cmd.terminal() 36 | end 37 | else 38 | vim.api.nvim_win_hide(state.floating.win) 39 | end 40 | end 41 | 42 | vim.api.nvim_create_user_command("FTerm", toggle_term, {}) 43 | vim.keymap.set({ "n", "t" }, "T", toggle_term) 44 | -------------------------------------------------------------------------------- /qutebrowser/.qutebrowser/config.py: -------------------------------------------------------------------------------- 1 | config.load_autoconfig() 2 | config.source('gruvbox.py') 3 | c.content.blocking.method = "adblock" 4 | c.editor.command = ["vim", "{}"] 5 | c.fonts.web.size.default = 20 6 | 7 | # dark mode setup 8 | c.colors.webpage.darkmode.enabled = True 9 | c.colors.webpage.darkmode.algorithm = 'lightness-cielab' 10 | c.colors.webpage.darkmode.policy.images = 'never' 11 | config.set('colors.webpage.darkmode.enabled', False, 'file://*') 12 | 13 | # styles, cosmetics 14 | c.tabs.padding = {'top': 5, 'bottom': 5, 'left': 9, 'right': 9} 15 | c.tabs.indicator.width = 0 # no tab indicators 16 | # c.window.transparent = True # apparently not needed 17 | c.tabs.width = '7%' 18 | # hidetab 19 | c.tabs.show = "never" 20 | 21 | # fonts 22 | c.fonts.default_family = [] 23 | c.fonts.default_size = '15pt' 24 | c.fonts.web.family.fixed = 'Inconsolata Nerd Font Mono' 25 | c.fonts.web.family.sans_serif = 'Inconsolata Nerd Font Mono' 26 | c.fonts.web.family.serif = 'Inconsolata Nerd Font Mono' 27 | c.fonts.web.family.standard = 'Inconsolata Nerd Font Mono' 28 | 29 | c.url.searchengines = { 30 | 'DEFAULT': 'https://duckduckgo.com/?q={}', 31 | "g": "https://www.google.com/search?q={}", 32 | "gs": "https://scholar.google.com/scholar?q={}", 33 | } 34 | c.completion.open_categories = ['searchengines', 'quickmarks', 'bookmarks', 'history', 'filesystem'] 35 | c.url.start_pages = ["https://www.google.com"] 36 | c.window.hide_decoration = True 37 | 38 | # hide status bar 39 | c.statusbar.show = 'in-mode' 40 | 41 | config.bind("", "cmd-run-with-count 15 scroll down") 42 | config.bind("", "cmd-run-with-count 15 scroll up") 43 | config.bind(',r', 'spawn --userscript readability-js') 44 | c.scrolling.smooth = True 45 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/fzf.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "ibhagwan/fzf-lua", 3 | -- optional for icon support 4 | dependencies = { "nvim-tree/nvim-web-devicons" }, 5 | -- or if using mini.icons/mini.nvim 6 | -- dependencies = { "echasnovski/mini.icons" }, 7 | opts = {}, 8 | config = function() 9 | local fzf = require("fzf-lua") 10 | fzf.setup({ 11 | winopts = { 12 | height = 0.85, 13 | width = 0.90, 14 | preview = { 15 | layout = "horizontal", 16 | }, 17 | }, 18 | fzf_colors = { 19 | true, 20 | bg = "-1", 21 | gutter = "-1", 22 | }, 23 | keymap = { 24 | fzf = { ["ctrl-q"] = "select-all+accept" }, 25 | }, 26 | }) 27 | vim.keymap.set("n", "ff", fzf.files, { desc = "Find Files" }) 28 | vim.keymap.set("n", "pf", fzf.git_files, { desc = "Find Git Files" }) 29 | vim.keymap.set("n", "fg", fzf.live_grep, { desc = "Live Grep" }) 30 | vim.keymap.set("n", "fG", function() 31 | require("fzf-lua").live_grep({ 32 | rg_opts = "--hidden --glob '!.git/*' --column --line-number --no-heading --color=always -e", 33 | }) 34 | end, { desc = "Live Grep includes hidden files" }) 35 | vim.keymap.set("n", "fb", fzf.buffers, { desc = "Buffers" }) 36 | vim.keymap.set("n", "fh", fzf.help_tags, { desc = "Help Tags" }) 37 | vim.keymap.set("n", "fs", function() 38 | fzf.grep({ search = vim.fn.input("Grep For > ") }) 39 | end, { desc = "FZF grep with input" }) 40 | end, 41 | } 42 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/scroll.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "karb94/neoscroll.nvim", 3 | opts = {}, 4 | config = function() 5 | local neoscroll = require("neoscroll") 6 | 7 | require("neoscroll").setup({ 8 | hide_cursor = false, -- Hide cursor while scrolling 9 | stop_eof = true, -- Stop at when scrolling downwards 10 | respect_scrolloff = false, -- Stop scrolling when the cursor reaches the scrolloff margin of the file 11 | cursor_scrolls_alone = true, -- The cursor will keep on scrolling even if the window cannot scroll further 12 | duration_multiplier = 0.8, -- Global duration multiplier 13 | easing = "linear", -- Default easing function 14 | pre_hook = nil, -- Function to run before the scrolling animation starts 15 | post_hook = nil, -- Function to run after the scrolling animation ends 16 | performance_mode = false, -- Disable "Performance Mode" on all buffers. 17 | ignored_events = { -- Events ignored while scrolling 18 | "WinScrolled", 19 | "CursorMoved", 20 | }, 21 | }) 22 | local keymap = { 23 | [""] = function() 24 | neoscroll.ctrl_u({ duration = 300 }) 25 | end, 26 | [""] = function() 27 | neoscroll.ctrl_d({ duration = 300 }) 28 | end, 29 | [""] = function() 30 | neoscroll.ctrl_b({ duration = 450 }) 31 | end, 32 | [""] = function() 33 | neoscroll.ctrl_f({ duration = 450 }) 34 | end, 35 | [""] = function() 36 | neoscroll.scroll(-0.1, { move_cursor = false, duration = 100 }) 37 | end, 38 | [""] = function() 39 | neoscroll.scroll(0.1, { move_cursor = false, duration = 100 }) 40 | end, 41 | ["zt"] = function() 42 | neoscroll.zt({ half_win_duration = 300 }) 43 | end, 44 | ["zz"] = function() 45 | neoscroll.zz({ half_win_duration = 300 }) 46 | end, 47 | ["zb"] = function() 48 | neoscroll.zb({ half_win_duration = 300 }) 49 | end, 50 | } 51 | local modes = { "n", "v", "x" } 52 | for key, func in pairs(keymap) do 53 | vim.keymap.set(modes, key, func) 54 | end 55 | end, 56 | } 57 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/gitstuff.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "lewis6991/gitsigns.nvim", 4 | event = { "BufReadPre", "BufNewFile" }, 5 | dependencies = { "sindrets/diffview.nvim" }, 6 | opts = { 7 | on_attach = function(bufnr) 8 | local gs = package.loaded.gitsigns 9 | local function map(mode, l, r, desc) 10 | vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc }) 11 | end 12 | -- navigation 13 | map("n", "]h", gs.next_hunk, "Next hunk") 14 | map("n", "[h", gs.prev_hunk, "Prev hunk") 15 | -- Actions 16 | map("n", "hs", gs.stage_hunk, "Stage hunk") 17 | map("n", "hr", gs.stage_hunk, "Reset hunk") 18 | map("v", "hs", function() 19 | gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) 20 | end, "Stage hunk") 21 | map("v", "hr", function() 22 | gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) 23 | end, "Reset hunk") 24 | 25 | map("n", "hS", gs.stage_hunk, "Stage buffer") 26 | map("n", "hR", gs.stage_hunk, "Reset buffer") 27 | map("n", "hb", function() 28 | gs.blame_line({ full = true }) 29 | end, "Blame line") 30 | map("n", "hB", gs.toggle_current_line_blame, "Toggle line blame") 31 | -- diff 32 | map("n", "hd", gs.diffthis, "Diff this") 33 | map("n", "hD", function() 34 | gs.diffthis("~") 35 | end, "Diff this ~") 36 | 37 | -- text object 38 | map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "Gitsigns select hunk") 39 | 40 | -- Diffview 41 | vim.keymap.set("n", "dv", function() 42 | if next(require("diffview.lib").views) == nil then 43 | vim.cmd("DiffviewOpen") 44 | else 45 | vim.cmd("DiffviewClose") 46 | end 47 | end, { desc = "Toggle Diffview" }) 48 | end, 49 | }, 50 | }, 51 | } 52 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/completions.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "L3MON4D3/LuaSnip", 4 | dependencies = { "saadparwaiz1/cmp_luasnip", "rafamadriz/friendly-snippets" }, 5 | }, 6 | { 7 | "hrsh7th/cmp-nvim-lsp", 8 | "hrsh7th/cmp-buffer", 9 | "hrsh7th/cmp-path", 10 | "hrsh7th/cmp-cmdline", 11 | }, 12 | { 13 | "hrsh7th/nvim-cmp", 14 | config = function() 15 | local cmp = require("cmp") 16 | local luasnip = require("luasnip") 17 | require("luasnip.loaders.from_vscode").lazy_load() 18 | 19 | cmp.setup({ 20 | snippet = { 21 | expand = function(args) 22 | require("luasnip").lsp_expand(args.body) -- For `luasnip` users. 23 | end, 24 | }, 25 | window = { 26 | completion = cmp.config.window.bordered(), 27 | documentation = cmp.config.window.bordered(), 28 | }, 29 | mapping = cmp.mapping.preset.insert({ 30 | [""] = cmp.mapping.scroll_docs(-4), 31 | [""] = cmp.mapping.scroll_docs(4), 32 | [""] = cmp.mapping.complete(), 33 | [""] = cmp.mapping.abort(), 34 | [""] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. 35 | [""] = cmp.mapping.select_prev_item(), 36 | [""] = cmp.mapping.select_next_item(), 37 | 38 | [""] = cmp.mapping(function(fallback) 39 | if cmp.visible() then 40 | cmp.select_next_item() 41 | elseif luasnip.locally_jumpable(1) then 42 | luasnip.jump(1) 43 | else 44 | fallback() 45 | end 46 | end, { "i", "s" }), 47 | 48 | [""] = cmp.mapping(function(fallback) 49 | if cmp.visible() then 50 | cmp.select_prev_item() 51 | elseif luasnip.locally_jumpable(-1) then 52 | luasnip.jump(-1) 53 | else 54 | fallback() 55 | end 56 | end, { "i", "s" }), 57 | }), 58 | sources = cmp.config.sources({ 59 | { name = "nvim_lsp" }, 60 | { name = "luasnip" }, 61 | { name = "zls" }, 62 | { name = "buffer" }, 63 | { name = "path" }, 64 | { name = "pylsp" }, 65 | { name = "gci" }, 66 | { name = "ts_ls" }, 67 | { name = "gopls" }, 68 | { name = "nix" }, 69 | { name = "buf_ls" }, 70 | { name = "render-markdown" }, 71 | { name = "cobol_ls" }, 72 | }), 73 | }) 74 | end, 75 | }, 76 | } 77 | -------------------------------------------------------------------------------- /tmux/pomodoro.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | OS="$(uname)" 5 | play_sound() { 6 | local file="$HOME/dotfiles/tmux/Ringing.mp3" 7 | if [ "$OS" = "Darwin" ]; then 8 | # macOS 9 | afplay "$file" & 10 | else 11 | # Linux 12 | paplay "$file" 2>/dev/null & 13 | fi 14 | } 15 | 16 | STATE_FILE="$HOME/.cache/pomo.json" 17 | mkdir -p "$(dirname "$STATE_FILE")" 18 | 19 | if [ $# -eq 3 ]; then 20 | SESSIONS=$1 21 | WORK_MIN=$2 22 | BREAK_MIN=$3 23 | 24 | jq -n \ 25 | --argjson sessions "$SESSIONS" \ 26 | --argjson work "$((WORK_MIN * 60))" \ 27 | --argjson break "$((BREAK_MIN * 60))" \ 28 | --argjson current 1 \ 29 | --arg mode "work" \ 30 | --argjson start "$(date +%s)" \ 31 | '{ 32 | sessions: $sessions, 33 | work: $work, 34 | break: $break, 35 | current: $current, 36 | mode: $mode, 37 | start: $start 38 | }' > "$STATE_FILE" 39 | 40 | tmux display-message "👨‍💻 Started $SESSIONS sessions ($WORK_MIN/$BREAK_MIN min)" 41 | exit 0 42 | fi 43 | 44 | if [ "${1:-}" = "stop" ]; then 45 | rm -f "$STATE_FILE" 46 | tmux display-message "Pomodoro stopped" 47 | exit 0 48 | fi 49 | 50 | if [ ! -f "$STATE_FILE" ]; then 51 | echo "" 52 | exit 0 53 | fi 54 | 55 | mode=$(jq -r .mode "$STATE_FILE") 56 | start=$(jq -r .start "$STATE_FILE") 57 | sessions=$(jq -r .sessions "$STATE_FILE") 58 | current=$(jq -r .current "$STATE_FILE") 59 | duration=$(jq -r ".\"$mode\"" "$STATE_FILE") # fix: access key safely 60 | 61 | now=$(date +%s) 62 | remaining=$((start + duration - now)) 63 | 64 | 65 | if [ "$remaining" -le 0 ]; then 66 | if [ "$mode" = "work" ]; then 67 | jq --arg mode "break" \ 68 | --argjson start "$(date +%s)" \ 69 | '.mode=$mode | .start=$start' \ 70 | "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE" 71 | tmux display-message "☕ Break #$current started" 72 | else 73 | next=$((current + 1)) 74 | if [ "$next" -gt "$sessions" ]; then 75 | tmux display-message "✅ All sessions done!" 76 | rm -f "$STATE_FILE" 77 | echo "" 78 | exit 0 79 | fi 80 | jq --arg mode "work" \ 81 | --argjson start "$(date +%s)" \ 82 | --argjson current "$next" \ 83 | '.mode=$mode | .start=$start | .current=$current' \ 84 | "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE" 85 | tmux display-message "👨‍💻 Work #$next started" 86 | fi 87 | echo "" 88 | exit 0 89 | fi 90 | 91 | if [ "$remaining" -le 10 ] && [ ! -f "$HOME/.cache/pomo_alerted" ]; then 92 | touch "$HOME/.cache/pomo_alerted" 93 | play_sound 94 | fi 95 | 96 | if [ "$remaining" -gt 10 ] && [ -f "$HOME/.cache/pomo_alerted" ]; then 97 | rm -f "$HOME/.cache/pomo_alerted" 98 | fi 99 | 100 | m=$((remaining / 60)) 101 | s=$((remaining % 60)) 102 | icon=$([ "$mode" = "work" ] && echo "👨‍💻" || echo "☕") 103 | 104 | printf "%s %d/%d %02d:%02d" "$icon" "$current" "$sessions" "$m" "$s" 105 | 106 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/oil.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "stevearc/oil.nvim", 3 | -- Optional dependencies 4 | dependencies = { 5 | { 6 | "echasnovski/mini.icons", 7 | opts = { 8 | style = "glyphs", 9 | }, 10 | }, 11 | }, 12 | -- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons 13 | -- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations. 14 | lazy = false, 15 | config = function() 16 | require("oil").setup({ 17 | float = { 18 | -- Padding around the floating window 19 | padding = 2, 20 | max_width = 90, 21 | max_height = 0, 22 | -- border = "rounded", 23 | win_options = { 24 | winblend = 0, 25 | }, 26 | }, 27 | vim.api.nvim_create_autocmd("FileType", { 28 | pattern = "oil", 29 | callback = function() 30 | local oil_actions = require("oil.actions") 31 | 32 | local map = function(lhs, rhs, opts) 33 | opts = vim.tbl_extend("force", { buffer = true, noremap = true, silent = true }, opts or {}) 34 | vim.keymap.set("n", lhs, rhs, opts) 35 | end 36 | 37 | map("g?", oil_actions.show_help.callback) 38 | map("", oil_actions.select.callback) 39 | map("", function() 40 | oil_actions.select.callback({ tab = true }) 41 | end) 42 | map("", function() 43 | oil_actions.preview.callback({ vertical = true, split = "rightbelow" }) 44 | end) 45 | map("", oil_actions.close.callback) 46 | map("R", oil_actions.refresh.callback) 47 | map("-", oil_actions.parent.callback) 48 | map("_", oil_actions.open_cwd.callback) 49 | map("`", oil_actions.cd.callback) 50 | map("~", function() 51 | oil_actions.cd.callback({ scope = "tab" }) 52 | end) 53 | map("gs", oil_actions.change_sort.callback) 54 | map("gx", oil_actions.open_external.callback) 55 | map("H", oil_actions.toggle_hidden.callback) 56 | map("g\\", oil_actions.toggle_trash.callback) 57 | end, 58 | }), 59 | use_default_keymaps = false, 60 | }) 61 | 62 | vim.keymap.set("n", "vv", require("oil").open, { desc = "Open parent directory" }) 63 | vim.keymap.set("n", "vf", require("oil").open_float, { desc = "Oil float" }) 64 | 65 | vim.keymap.set("n", "vi", function() 66 | local oil = require("oil") 67 | local entry = oil.get_cursor_entry() 68 | local dir = oil.get_current_dir() 69 | 70 | if entry and dir then 71 | local full_path = vim.fn.fnamemodify(dir .. entry.name, ":p") 72 | 73 | local stat = vim.loop.fs_stat(full_path) 74 | 75 | if stat then 76 | vim.notify( 77 | vim.inspect({ 78 | name = entry.name, 79 | type = entry.type, 80 | full_path = full_path, 81 | size = stat.size, 82 | mode = stat.mode, 83 | mtime = os.date("%c", stat.mtime.sec), 84 | }), 85 | vim.log.levels.INFO, 86 | { title = "Oil Entry Info" } 87 | ) 88 | else 89 | vim.notify("Failed to stat file: " .. full_path, vim.log.levels.WARN) 90 | end 91 | else 92 | vim.notify("No entry under cursor", vim.log.levels.WARN) 93 | end 94 | end, { desc = "Show full file info from Oil" }) 95 | end, 96 | } 97 | -------------------------------------------------------------------------------- /tmux/.tmux.conf: -------------------------------------------------------------------------------- 1 | set -g default-terminal "screen-256color" 2 | 3 | unbind C-b 4 | set -g prefix C-a 5 | bind-key C-a send-prefix 6 | 7 | set -g mouse on 8 | 9 | unbind % 10 | bind '\' split-window -h -c '#{pane_current_path}' 11 | 12 | unbind '"' 13 | bind - split-window -v -c '#{pane_current_path}' 14 | 15 | unbind r 16 | # tmux source-file ~/.tmux.conf \; 17 | bind r source-file ~/.tmux.conf 18 | 19 | bind -r j resize-pane -D 5 20 | bind -r k resize-pane -U 5 21 | bind -r h resize-pane -L 5 22 | bind -r l resize-pane -R 5 23 | 24 | bind -r m resize-pane -Z 25 | 26 | # Copy vim movements 27 | set-window-option -g mode-keys vi 28 | 29 | bind-key -T copy-mode-vi 'v' send -X begin-selection 30 | bind-key -T copy-mode-vi 'y' send -X copy-selection 31 | 32 | unbind -T copy-mode-vi MouseDragEnd1Pane 33 | 34 | # new window 35 | bind c new-window -c '#{pane_current_path}' 36 | 37 | # start from 1, not 0 38 | set-option -g base-index 1 39 | # re-number when closing windows 40 | set-option -g renumber-windows on 41 | 42 | # open a note for billion $ idea 43 | bind -r e split-window -h "nvim ~/Documents/git/scratch/notes_$(date +'%y%m%d%H').md" 44 | # a quick todo list for today 45 | bind -r o split-window -h "nvim ~/Documents/git/scratch/todo_$(date +'%y%m%d').md" 46 | # open a vim window on the right 47 | bind -r v split-window -h -c "#{pane_current_path}" "zsh -c 'nvim; exec zsh'" 48 | 49 | # plugins 50 | set -g @plugin 'tmux-plugins/tpm' 51 | set -g @plugin 'christoomey/vim-tmux-navigator' 52 | # save tmux session even tmux-server is killed 53 | # leader + ctrl + s for saving 54 | # leader + ctrl + r for reload 55 | set -g @plugin 'tmux-plugins/tmux-resurrect' 56 | set -g @plugin 'catppuccin/tmux#v2.1.2' 57 | set -g @plugin 'tmux-plugins/tmux-cpu' 58 | set -g @plugin 'xamut/tmux-weather' 59 | 60 | # status bar 61 | # Configure the catppuccin plugin 62 | set -g @catppuccin_flavor "mocha" 63 | set -g @catppuccin_window_status_style "basic" 64 | 65 | set -g window-status-separator "" # Removes the space between windows 66 | set -g @catppuccin_window_current_text_color "#{@thm_surface_1}" 67 | set -g @catppuccin_window_current_number_color "#{@thm_peach}" 68 | set -g @catppuccin_window_current_text "#[bg=#{@thm_mantle}] #{b:pane_current_path}" 69 | 70 | set -g @catppuccin_window_text " #W" 71 | set -g @catppuccin_window_default_text "#W" # show path for active panes, fallback to app name 72 | set -g @catppuccin_window_number_color "#{@thm_lavender}" 73 | 74 | set -g status-left "#[bg=#{@thm_green},fg=#{@thm_crust}]#[reverse]█#[noreverse]#S " 75 | 76 | set -g status-style fg=default,bg=default 77 | set -g status-interval 15 78 | set -g status-right-length 80 #character length 79 | 80 | bind-key b command-prompt -p "Pomodoro (sessions [work break])" "run-shell '~/dotfiles/tmux/pomocmd.sh %%'" 81 | 82 | bind-key j run-shell '~/dotfiles/tmux/pomodoro.sh stop' 83 | 84 | set -g status-right "#(bash ~/dotfiles/tmux/pomodoro.sh) #(bash ~/dotfiles/tmux/random_note.sh) " 85 | set -agF status-right "#{E:@catppuccin_status_weather}" 86 | set -agF status-right "#{E:@catppuccin_status_cpu}" 87 | set -agF status-right "#[bg=#{@thm_green},fg=#{@thm_crust}]#[reverse]█#[noreverse]󰘛 " 88 | set -agF status-right "#[fg=#{@thm_fg},bg=#{@thm_mantle}] #(memory_pressure | awk '{print 100 - $5}')"\%%" " 89 | set -agF status-right "#[bg=#{@thm_green},fg=#{@thm_crust}]#[reverse]█#[noreverse]󰢗 " 90 | set -agF status-right "#[fg=#{@thm_fg},bg=#{@thm_mantle}] %m/%d:%H" 91 | # set -agF status-right "#[fg=#{@thm_green}]" 92 | 93 | 94 | # This line need to be in bottom of the file 95 | run '~/.tmux/plugins/tpm/tpm' 96 | 97 | set -g status-bg default 98 | set -g status-style bg=default 99 | -------------------------------------------------------------------------------- /nvim/.config/nvim/ftplugin/java.lua: -------------------------------------------------------------------------------- 1 | local home = os.getenv("HOME") 2 | local workspace_path = home .. "/.local/share/nvim/jdtls-workspace/" 3 | local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t") 4 | local workspace_dir = workspace_path .. project_name 5 | 6 | local status, jdtls = pcall(require, "jdtls") 7 | if not status then 8 | return 9 | end 10 | local extendedClientCapabilities = jdtls.extendedClientCapabilities 11 | -- 12 | -- detect OS 13 | local os_config = "" 14 | if vim.fn.has("mac") == 1 then 15 | os_config = "config_mac" 16 | elseif vim.fn.has("unix") == 1 then 17 | os_config = "config_linux" 18 | elseif vim.fn.has("win32") == 1 then 19 | os_config = "config_win" 20 | end 21 | 22 | local config = { 23 | cmd = { 24 | "java", 25 | "-Declipse.application=org.eclipse.jdt.ls.core.id1", 26 | "-Dosgi.bundles.defaultStartLevel=4", 27 | "-Declipse.product=org.eclipse.jdt.ls.core.product", 28 | "-Dlog.protocol=true", 29 | "-Dlog.level=ALL", 30 | "-Xmx1g", 31 | "--add-modules=ALL-SYSTEM", 32 | "--add-opens", 33 | "java.base/java.util=ALL-UNNAMED", 34 | "--add-opens", 35 | "java.base/java.lang=ALL-UNNAMED", 36 | "-javaagent:" .. home .. "/.local/share/nvim/mason/packages/jdtls/lombok.jar", 37 | "-jar", 38 | -- vim.fn.glob(home .. "/.local/share/nvim/mason/packages/jdtls/plugins/org.eclipse.equinox.launcher_*.jar"), 39 | vim.fn.glob(home .. "/.local/share/nvim/mason/packages/jdtls/plugins/org.eclipse.equinox.launcher_*.jar"), 40 | "-configuration", 41 | home .. "/.local/share/nvim/mason/packages/jdtls/" .. os_config, 42 | "-data", 43 | workspace_dir, 44 | }, 45 | root_dir = require("jdtls.setup").find_root({ 46 | ".git", 47 | "mvnw", 48 | "gradlew", 49 | "pom.xml", 50 | "build.gradle", 51 | "settings.gradle", 52 | }), 53 | 54 | settings = { 55 | java = { 56 | signatureHelp = { enabled = true }, 57 | extendedClientCapabilities = extendedClientCapabilities, 58 | maven = { 59 | downloadSources = true, 60 | }, 61 | referencesCodeLens = { 62 | enabled = true, 63 | }, 64 | references = { 65 | includeDecompiledSources = true, 66 | }, 67 | inlayHints = { 68 | parameterNames = { 69 | enabled = "all", -- literals, all, none 70 | }, 71 | }, 72 | format = { 73 | enabled = true, 74 | settings = { 75 | profile = "GoogleStyle", 76 | }, 77 | }, 78 | }, 79 | }, 80 | 81 | init_options = { 82 | bundles = {}, 83 | }, 84 | } 85 | require("jdtls").start_or_attach(config) 86 | 87 | vim.keymap.set("n", "co", "lua require'jdtls'.organize_imports()", { desc = "Organize Imports" }) 88 | vim.keymap.set("n", "crv", "lua require('jdtls').extract_variable()", { desc = "Extract Variable" }) 89 | vim.keymap.set( 90 | "v", 91 | "crv", 92 | "lua require('jdtls').extract_variable(true)", 93 | { desc = "Extract Variable" } 94 | ) 95 | vim.keymap.set("n", "crc", "lua require('jdtls').extract_constant()", { desc = "Extract Constant" }) 96 | vim.keymap.set( 97 | "v", 98 | "crc", 99 | "lua require('jdtls').extract_constant(true)", 100 | { desc = "Extract Constant" } 101 | ) 102 | vim.keymap.set( 103 | "v", 104 | "crm", 105 | "lua require('jdtls').extract_method(true)", 106 | { desc = "Extract Method" } 107 | ) 108 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/neotest.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-neotest/neotest", 4 | dependencies = { 5 | "nvim-neotest/nvim-nio", 6 | "nvim-lua/plenary.nvim", 7 | "antoinemadec/FixCursorHold.nvim", 8 | "nvim-treesitter/nvim-treesitter", 9 | { 10 | "fredrikaverpil/neotest-golang", 11 | version = "*", 12 | dependencies = { "leoluz/nvim-dap-go" }, 13 | }, 14 | "sidlatau/neotest-dart", 15 | "lawrence-laz/neotest-zig", 16 | { 17 | "rcasia/neotest-java", 18 | ft = "java", 19 | dependencies = { 20 | "mfussenegger/nvim-jdtls", 21 | "mfussenegger/nvim-dap", -- for the debugger 22 | "rcarriga/nvim-dap-ui", -- recommended 23 | "theHamsta/nvim-dap-virtual-text", -- recommended 24 | }, 25 | }, 26 | }, 27 | config = function() 28 | require("neotest").setup({ 29 | adapters = { 30 | require("neotest-golang")({ recursive_run = true }), -- Registration 31 | -- require :NeotestJava setup 32 | ["neotest-java"] = {}, 33 | require("neotest-dart")({ 34 | command = "flutter", -- Command being used to run tests. Defaults to `flutter` 35 | -- Change it to `fvm flutter` if using FVM 36 | -- change it to `dart` for Dart only tests 37 | use_lsp = true, -- When set Flutter outline information is used when constructing test name. 38 | -- Useful when using custom test names with @isTest annotation 39 | custom_test_method_names = {}, 40 | }), 41 | -- Registration 42 | require("neotest-zig")({ 43 | dap = { 44 | adapter = "lldb", 45 | }, 46 | }), 47 | }, 48 | }) 49 | 50 | vim.keymap.set("n", "tr", ':lua require("neotest").run.run()', {}) 51 | -- run with debugging, need debug point 52 | vim.keymap.set("n", "tb", ':lua require("neotest").run.run({strategy = "dap"})', {}) 53 | -- stop running test 54 | vim.keymap.set("n", "ts", ':lua require("neotest").run.stop()', {}) 55 | -- open dialog 56 | vim.keymap.set("n", "to", ':lua require("neotest").output.open()', {}) 57 | -- open and jump in to the dialog 58 | vim.keymap.set("n", "tO", ':lua require("neotest").output.open({ enter = true })', {}) 59 | -- view test summary 60 | vim.keymap.set("n", "tv", ':lua require("neotest").summary.toggle()', {}) 61 | -- run all test in file 62 | vim.keymap.set("n", "tp", ':lua require("neotest").run.run(vim.fn.expand("%"))', {}) 63 | 64 | -- this is only for test suite in go, I really hate this. 65 | -- Will remove after !!! 66 | local function get_suite_name(file_path) 67 | local file_content = vim.fn.readfile(file_path) 68 | for _, line in ipairs(file_content) do 69 | local suite_match = line:match("^type%s+([%w_]+)Suite%s+struct") 70 | if suite_match then 71 | return suite_match 72 | end 73 | end 74 | return nil 75 | end 76 | 77 | vim.keymap.set("n", "tt", function() 78 | local file_path = vim.fn.expand("%:p") 79 | local package = vim.fn.fnamemodify(file_path, ":h"):gsub("^%./", "") 80 | 81 | local test_name = vim.fn.input("Enter test method name (e.g., Testxxxx): ") 82 | if not test_name or test_name == "" then 83 | vim.notify("Test name cannot be empty.", vim.log.levels.ERROR) 84 | return 85 | end 86 | 87 | local suite_name = get_suite_name(file_path) 88 | 89 | if not suite_name then 90 | vim.notify("Cannot detect suite name in file.", vim.log.levels.ERROR) 91 | return 92 | end 93 | 94 | local test_pattern = suite_name .. "Suite/" .. test_name 95 | 96 | vim.cmd("!go test -run " .. test_pattern .. " -v " .. package) 97 | end, { desc = "Run specific test at cursor" }) 98 | end, 99 | }, 100 | } 101 | -------------------------------------------------------------------------------- /qutebrowser/.qutebrowser/userscript/readability-js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const { existsSync } = require("fs"); 4 | const { mkdirSync } = require("fs"); 5 | const { writeFileSync } = require("fs"); 6 | const { join } = require("path"); 7 | const { Readability } = require('@mozilla/readability'); 8 | const JSDOM = require('jsdom').JSDOM; 9 | const { messageError, open } = require("qutejs"); 10 | 11 | const now = new Date(); 12 | const slugify = (s) => 13 | s 14 | .toLowerCase() 15 | .replace(/[^a-z0-9]+/g, "-") 16 | .replace(/(^-|-$)+/g, "") 17 | .substring(0, 80); 18 | 19 | const saveDir = join(process.env.HOME, "Documents/readability"); 20 | const scriptsDir = 21 | process.env.QUTE_DATA_DIR || 22 | join(process.env.HOME, ".local/share/qutebrowser/userscripts"); 23 | 24 | function buildHtml({ title, content, url, siteName }) { 25 | return ` 26 | 27 | 28 | 29 | 30 | ${title} 31 | 32 | 33 | 34 | 60 | 61 | 62 |

${title}

63 | 64 |
65 | ${content} 66 | 67 | `; 68 | } 69 | 70 | async function main() { 71 | if (!existsSync(saveDir)) mkdirSync(saveDir, { recursive: true }); 72 | 73 | const isHint = process.env.QUTE_MODE === "hints"; 74 | const source = isHint ? process.env.QUTE_URL : process.env.QUTE_HTML; 75 | const url = process.env.QUTE_URL; 76 | const loadDom = isHint ? JSDOM.fromURL : JSDOM.fromFile; 77 | const options = isHint 78 | ? {} 79 | : { url: url, contentType: "text/html; charset=utf-8" }; 80 | 81 | try { 82 | const dom = await loadDom(source, options); 83 | const reader = new Readability(dom.window.document); 84 | const article = reader.parse(); 85 | if (!article || !article.content) { 86 | messageError(["can not read content"]); 87 | return; 88 | } 89 | 90 | const title = article.title || "untitled"; 91 | const siteName = 92 | article.siteName || new URL(url).hostname.replace(/^www\./, ""); 93 | const slug = slugify(title); 94 | const timestamp = now.toISOString().split("T")[0]; 95 | 96 | const htmlContent = buildHtml({ 97 | title, 98 | content: article.content, 99 | url, 100 | siteName, 101 | }); 102 | 103 | const htmlFile = join(saveDir, `${timestamp}_${slug}.html`); 104 | const tmpFile = join(scriptsDir, "readability.html"); 105 | 106 | writeFileSync(htmlFile, htmlContent); 107 | writeFileSync(tmpFile, htmlContent); 108 | 109 | open(["-t", "-r", tmpFile]); 110 | } catch (err) { 111 | messageError([`error: ${err.message}`]); 112 | } 113 | } 114 | 115 | main(); 116 | 117 | -------------------------------------------------------------------------------- /zsh/.zshrc: -------------------------------------------------------------------------------- 1 | # Initialization code that may require console input (password prompts, [y/n] 2 | # confirmations, etc.) must go above this block; everything else may go below. 3 | if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then 4 | source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" 5 | fi 6 | 7 | # If you come from bash you might have to change your $PATH. 8 | # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH 9 | 10 | # Path to your Oh My Zsh installation. 11 | export ZSH="$HOME/.oh-my-zsh" 12 | 13 | # Set name of the theme to load --- if set to "random", it will 14 | # load a random theme each time Oh My Zsh is loaded, in which case, 15 | # to know which specific one was loaded, run: echo $RANDOM_THEME 16 | # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes 17 | ZSH_THEME="robbyrussell" 18 | 19 | # Add wisely, as too many plugins slow down shell startup. 20 | plugins=(git) 21 | plugins=(git zsh-autosuggestions) 22 | 23 | source $ZSH/oh-my-zsh.sh 24 | # For a full list of active aliases, run `alias`. 25 | # 26 | # Example aliases 27 | # alias zshconfig="mate ~/.zshrc" 28 | # alias ohmyzsh="mate ~/.oh-my-zsh" 29 | 30 | # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. 31 | [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh 32 | source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 33 | 34 | # fzf 35 | source <(fzf --zsh) 36 | alias f=fzf 37 | # preview with bat 38 | alias fp='fzf --preview="bat --color=always {}"' 39 | # open neovim with select file by tab 40 | alias fv='nvim $(fzf -m --preview="bat --color=always {}")' 41 | 42 | 43 | # my alias for an easier life 44 | alias v=nvim 45 | alias vim=nvim 46 | alias nv=nvim 47 | alias ovim=vim 48 | alias os='nvim ~/.zshrc' 49 | alias ss='source ~/.zshrc' 50 | alias k='kubectl' 51 | alias gr=./gradlew 52 | # source tmux 53 | alias stm='tmux source-file ~/.tmux.conf \;' 54 | # confirm before remove something... fk. 55 | alias rm="rm -i" 56 | 57 | # PATH 58 | export PATH="/opt/homebrew/share/android-commandlinetools/cmdline-tools/latest/bin:$PATH" 59 | export NODE_PATH=$NODE_PATH:$(npm root -g) 60 | 61 | alias vcf="cd ~/.config/nvim && nvim" 62 | alias python=python3 63 | alias dc=docker-compose 64 | alias lzd=lazydocker 65 | # fetch then allow to fuzzy finding branches 66 | alias gcof='git fetch && git checkout $(git branch | fzf | sed "s/^..//")' 67 | # push with set upstream for the current branch 68 | gpup() { 69 | branch=$(git rev-parse --abbrev-ref HEAD) 70 | git push --set-upstream origin "$branch" 71 | } 72 | opg() { 73 | local base="$HOME/Documents/git" 74 | local dir 75 | dir=$(find "$base" -mindepth 1 -maxdepth 1 \( -type d -o -type l \) -exec test -d {} \; -print | fzf) 76 | if [[ -n "$dir" ]]; then 77 | cd "$dir" 78 | else 79 | cd "$base" 80 | fi 81 | } 82 | op() { 83 | local user_dir="$HOME" 84 | local dir 85 | dir=$(find "$user_dir" -mindepth 1 -maxdepth 1 -type d ! -name '.*' | fzf) && cd "$dir" 86 | } 87 | # quick session 88 | qss() { 89 | local dotfiles_dir="$HOME/dotfiles" 90 | local git_base="$HOME/Documents/git" 91 | 92 | if ! tmux has-session -t setting 2>/dev/null; then 93 | tmux new-session -d -s setting -c "$dotfiles_dir" 94 | fi 95 | 96 | local dir 97 | local base="$HOME/Documents/git" 98 | 99 | dir=$(find "$base" -mindepth 1 -maxdepth 1 -type d ! -name '.*' | fzf) 100 | 101 | local name="$(basename "$dir")" 102 | 103 | if ! tmux has-session -t "$name" 2>/dev/null; then 104 | tmux new-session -d -s "$name" -c "$dir" 105 | fi 106 | if [[ -n "$TMUX" ]]; then 107 | tmux switch-client -t "$name" 108 | else 109 | tmux attach-session -t "$name" 110 | fi 111 | } 112 | bindkey -v 113 | bindkey ^F autosuggest-accept 114 | 115 | #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! 116 | export SDKMAN_DIR="$HOME/.sdkman" 117 | [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh" 118 | -------------------------------------------------------------------------------- /wezterm/.wezterm.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | local config = wezterm.config_builder() 3 | local io = require("io") 4 | local os = require("os") 5 | local brightness = 0.03 6 | 7 | -- image setting 8 | local home = os.getenv("HOME") 9 | local background_folder = home .. "/bg" 10 | local function pick_random_background(folder) 11 | local handle = io.popen('ls "' .. folder .. '"') 12 | if handle ~= nil then 13 | local files = handle:read("*a") 14 | handle:close() 15 | 16 | local images = {} 17 | for file in string.gmatch(files, "[^\n]+") do 18 | table.insert(images, file) 19 | end 20 | 21 | if #images > 0 then 22 | return folder .. "/" .. images[math.random(#images)] 23 | else 24 | return nil 25 | end 26 | end 27 | end 28 | 29 | config.window_background_image_hsb = { 30 | -- Darken the background image by reducing it 31 | brightness = brightness, 32 | hue = 1.0, 33 | saturation = 0.8, 34 | } 35 | 36 | -- default background 37 | local bg_image = home .. "/.config/nvim/bg/bg.jpg" 38 | 39 | config.window_background_image = bg_image 40 | -- end image setting 41 | 42 | -- window setting 43 | config.window_background_opacity = 0.90 44 | config.macos_window_background_blur = 85 45 | config.window_padding = { 46 | left = 0, 47 | right = 0, 48 | top = 0, 49 | bottom = 0, 50 | } 51 | 52 | config.color_scheme = "Tokyo Night" 53 | config.font = wezterm.font("Inconsolata Nerd Font Mono", { weight = "Medium", stretch = "Expanded" }) 54 | config.font_size = 22 55 | 56 | config.window_decorations = "RESIZE" 57 | config.enable_tab_bar = false 58 | 59 | config.window_frame = { 60 | -- border_left_width = "0.18cell", 61 | -- border_right_width = "0.18cell", 62 | -- border_bottom_height = "0.08cell", 63 | -- border_top_height = "0.08cell", 64 | -- border_left_color = "pink", 65 | -- border_right_color = "pink", 66 | -- border_bottom_color = "pink", 67 | -- border_top_color = "pink", 68 | } 69 | 70 | -- keys 71 | config.keys = { 72 | { 73 | key = "b", 74 | mods = "CTRL|SHIFT", 75 | action = wezterm.action_callback(function(window) 76 | bg_image = pick_random_background(background_folder) 77 | if bg_image then 78 | window:set_config_overrides({ 79 | window_background_image = bg_image, 80 | }) 81 | wezterm.log_info("New bg:" .. bg_image) 82 | else 83 | wezterm.log_error("Could not find bg image") 84 | end 85 | end), 86 | }, 87 | { 88 | key = "L", 89 | mods = "CTRL|SHIFT", 90 | action = wezterm.action.OpenLinkAtMouseCursor, 91 | }, 92 | { 93 | key = ">", 94 | mods = "CTRL|SHIFT", 95 | action = wezterm.action_callback(function(window) 96 | brightness = math.min(brightness + 0.01, 1.0) 97 | window:set_config_overrides({ 98 | window_background_image_hsb = { 99 | brightness = brightness, 100 | hue = 1.0, 101 | saturation = 0.8, 102 | }, 103 | window_background_image = bg_image, 104 | }) 105 | end), 106 | }, 107 | { 108 | key = "<", 109 | mods = "CTRL|SHIFT", 110 | action = wezterm.action_callback(function(window) 111 | brightness = math.max(brightness - 0.01, 0.01) 112 | window:set_config_overrides({ 113 | window_background_image_hsb = { 114 | brightness = brightness, 115 | hue = 1.0, 116 | saturation = 0.8, 117 | }, 118 | window_background_image = bg_image, 119 | }) 120 | end), 121 | }, 122 | } 123 | 124 | -- others 125 | config.default_cursor_style = "BlinkingUnderline" 126 | config.cursor_thickness = 2 127 | config.max_fps = 120 128 | return config 129 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Hi 😂 2 | 3 | Every day I am using vim, and I feel like I can learn new things every day. 4 | So please don't wonder or judge why this repo has many commits. 5 | 6 | ### Main tools 7 | 8 | - homebrew (pkgs manager) 9 | - nvim (code editor) 10 | - tmux (term multiplexer) 11 | - ghostty and wezterm for terminal emulator 12 | - aerospace is a window manager for macos (i3 like) 13 | - zshell 14 | - GNU stow is a symlink management tool 15 | 16 | _Note_: Some tools I also recommend: lazydocker, bat, fzf, autocompletion, ... (can be installed with brew) 17 | 18 | ## Installing steps 19 | 20 | - You need a package manager, if you are using macos, **homebrew** is a good one. 21 | 22 | ### Homebrew 23 | 24 | [link](https://docs.brew.sh/Installation) 25 | 26 | ```shell 27 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 28 | ``` 29 | 30 | ### After installing homebrew let's rock 31 | 32 | ```shell 33 | brew install nvim 34 | brew install tmux 35 | brew install --cask ghostty 36 | brew install --cask wezterm 37 | brew install stow 38 | brew install zsh 39 | ``` 40 | 41 | ### Where should your settings be stored? 42 | 43 | With stow you can create symlink from a directory to a target directory. 44 | So ideally, all settings shoul be in a directory, for example `~/dotfiles` 45 | 46 | ```shell 47 | cd 48 | mkdir dotfiles 49 | ``` 50 | 51 | After that, create dir tree structure for each tool with same structure as in its docs. 52 | For instance, with nvim, you should place your configs in `~/.config/nvim` 53 | 54 | -> Create dir structure like this in dotfiles 55 | 56 | ```shell 57 | cd ~/dotfiles 58 | mkdir -p nvim/.config/nvim 59 | ``` 60 | 61 | Do the same steps with the other tools. 62 | Then run this to create symlinks 63 | 64 | ```shell 65 | stow nvim 66 | stow zsh 67 | stow aerospace 68 | stow tmux 69 | stow wezterm 70 | stow ghostty 71 | ``` 72 | 73 | for more information about gnustow: [link](https://www.gnu.org/software/stow/) 74 | 75 | ## Note: 76 | 77 | - You need Iterm/Wezeterm,...(not default macos terminal) because this terminal can not represent right theme 78 | - Nerd font for view icon, text, folder, ... [link](https://www.nerdfonts.com/) 79 | - Need to install delve for debugging: `brew install delve` 80 | - Need ripgrep for telescope live grep 81 | 82 | ```shell 83 | brew install ripgrep 84 | ``` 85 | 86 | - Need wget to help mason to download zip,... from internet 87 | 88 | ```shell 89 | brew install wget 90 | ``` 91 | 92 | ### Backup pkgs by brew 93 | 94 | ```shell 95 | brew bundle dump --file=Brewfile --force 96 | ``` 97 | 98 | Re-install again 99 | 100 | ```shell 101 | brew bundle --file=~/Brewfile 102 | ``` 103 | 104 | Linux 105 | 106 | - skip un-supported packs 107 | 108 | ```shell 109 | brew bundle check --file=Brewfile 110 | sed -i '/cask /d' Brewfile 111 | ``` 112 | 113 | ### Nvim setup 114 | 115 | - I use lazy to manage plugins, you can use packer 116 | - To sync or update plugins 117 | 118 | ```shell 119 | :Lazy sync 120 | :Lazy update 121 | ``` 122 | 123 | - I think it's better if we keep our settings at a simple level, don't set many things 124 | that you rarely use or you can achieve this purpose by some simple commands. 125 | 126 | - Check log lsp: 127 | 128 | ```shell 129 | nvim ~/.local/state/nvim/lsp.log 130 | ``` 131 | 132 | or 133 | 134 | ``` 135 | :LspLog 136 | ``` 137 | 138 | - Vim help is so helpful. Use it as much as you can 139 | example 140 | 141 | ``` 142 | :help Mason 143 | ``` 144 | 145 | ## Integrate local LLM with nvim 146 | 147 | I tried to run the LLM models in docker, allocated it 16GB ram, 4 cores CPU but it did not work effectively. 148 | So I install ollama in my native macos machine. 149 | 150 | [ollama](https://ollama.com/) 151 | 152 | - Gave deepseek a try but it was so slow (model depends on GPU also, while Macbook M series are different ) 153 | - You can have web UI to do prompting, I run it with docker: 154 | [docker cp file](./docker-compose.yaml) 155 | 156 | - My nvim - llm integration settings are in: 157 | [llm](./nvim/.config/nvim/lua/plugins/llm.lua) 158 | 159 | **Note that you should install llm-ls via Mason** 160 | 161 | ## Colima 162 | 163 | - symlink for docker.sock (use test container or act) 164 | 165 | ```sh 166 | sudo ln -s ~/.colima/default/docker.sock /var/run/docker.sock 167 | ``` 168 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/plugins/lsp-configs.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "williamboman/mason.nvim", 4 | -- version = "v1.11.0", 5 | config = function() 6 | require("mason").setup() 7 | end, 8 | }, 9 | { 10 | "williamboman/mason-lspconfig.nvim", 11 | lazy = false, 12 | opts = { 13 | auto_install = true, 14 | -- manually install packages that do not exist in this list please 15 | ensure_installed = { "zls", "gopls", "ts_ls" }, 16 | }, 17 | }, 18 | { 19 | "neovim/nvim-lspconfig", 20 | lazy = false, 21 | config = function() 22 | local capabilities = vim.lsp.protocol.make_client_capabilities() 23 | capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities) 24 | -- lua 25 | vim.lsp.config["lua_ls"] = { 26 | cmd = { "lua-language-server" }, 27 | capabilities = capabilities, 28 | settings = { 29 | Lua = { 30 | diagnostics = { globals = { "vim" } }, 31 | workspace = { 32 | library = vim.api.nvim_get_runtime_file("", true), 33 | checkThirdParty = false, 34 | }, 35 | telemetry = { enable = false }, 36 | }, 37 | }, 38 | } 39 | vim.lsp.enable("lua_ls") 40 | 41 | vim.lsp.config["ts_ls"] = { 42 | capabilities = capabilities, 43 | } 44 | 45 | vim.lsp.config["eslint"] = { 46 | capabilities = capabilities, 47 | } 48 | 49 | vim.lsp.config["zls"] = { 50 | capabilities = capabilities, 51 | } 52 | 53 | vim.lsp.config["yamlls"] = { 54 | capabilities = capabilities, 55 | } 56 | 57 | vim.lsp.config["tailwindcss"] = { 58 | capabilities = capabilities, 59 | } 60 | 61 | vim.lsp.config["gopls"] = { 62 | capabilities = capabilities, 63 | } 64 | 65 | -- nix 66 | vim.lsp.config["nil_ls"] = { 67 | capabilities = capabilities, 68 | } 69 | 70 | -- protocol buffer 71 | vim.lsp.config["buf_ls"] = { 72 | capabilities = capabilities, 73 | } 74 | 75 | -- docker compose 76 | vim.lsp.config["docker_compose_language_service"] = { 77 | capabilities = capabilities, 78 | } 79 | 80 | -- cobol 81 | vim.lsp.config["cobol_ls"] = { 82 | capabilities = capabilities, 83 | } 84 | 85 | -- svelte 86 | vim.lsp.config["svelte"] = { 87 | capabilities = capabilities, 88 | } 89 | -- python 90 | vim.lsp.config["pyright"] = { 91 | capabilities = capabilities, 92 | } 93 | 94 | -- bash 95 | vim.lsp.config["bashls"] = { 96 | capabilities = capabilities, 97 | } 98 | 99 | -- protocol buffer 100 | vim.lsp.config["buf_language_server"] = { 101 | capabilities = capabilities, 102 | } 103 | 104 | vim.lsp.config["asm_lsp"] = { 105 | capabilities = capabilities, 106 | } 107 | 108 | vim.api.nvim_create_autocmd("FileType", { 109 | pattern = "proto", 110 | callback = function() 111 | vim.lsp.enable("buf_language_server") 112 | end, 113 | }) 114 | vim.lsp.enable({ 115 | "ts_ls", 116 | "eslint", 117 | "zls", 118 | "yamlls", 119 | "tailwindcss", 120 | "gopls", 121 | "nil_ls", 122 | "buf_ls", 123 | "docker_compose_language_service", 124 | "cobol_ls", 125 | "svelte", 126 | "pyright", 127 | "bashls", 128 | "asm_lsp", 129 | }) 130 | -- lsp kepmap setting 131 | vim.keymap.set("n", "K", vim.lsp.buf.hover, {}) 132 | vim.keymap.set("n", "gi", vim.lsp.buf.implementation, {}) 133 | vim.keymap.set("n", "gd", vim.lsp.buf.definition, {}) 134 | vim.keymap.set("n", "gD", vim.lsp.buf.declaration, {}) 135 | vim.keymap.set("n", "gr", vim.lsp.buf.references, {}) 136 | vim.keymap.set("n", "rn", vim.lsp.buf.rename, {}) 137 | vim.keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, {}) 138 | -- list all methods in a file 139 | -- working with go confirmed, don't know about other, keep changing as necessary 140 | vim.keymap.set("n", "fm", function() 141 | local filetype = vim.bo.filetype 142 | local symbols_map = { 143 | python = "function", 144 | javascript = "function", 145 | typescript = "function", 146 | java = "class", 147 | lua = "function", 148 | go = { "method", "struct", "interface" }, 149 | } 150 | local symbols = symbols_map[filetype] or "function" 151 | require("fzf-lua").lsp_document_symbols({ symbols = symbols }) 152 | end, {}) 153 | end, 154 | }, 155 | } 156 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, 3 | "FixCursorHold.nvim": { "branch": "master", "commit": "1900f89dc17c603eec29960f57c00bd9ae696495" }, 4 | "LuaSnip": { "branch": "master", "commit": "73813308abc2eaeff2bc0d3f2f79270c491be9d7" }, 5 | "accent": { "branch": "master", "commit": "54e0b255cb2c93555014197c8adc59d631c25696" }, 6 | "arrow.nvim": { "branch": "master", "commit": "6e0f726f55f99332dd726a53effd6813786b6d49" }, 7 | "catppuccin": { "branch": "main", "commit": "234fc048de931a0e42ebcad675bf6559d75e23df" }, 8 | "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, 9 | "cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" }, 10 | "cmp-nvim-lsp": { "branch": "main", "commit": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3" }, 11 | "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, 12 | "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, 13 | "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, 14 | "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, 15 | "flutter-tools.nvim": { "branch": "main", "commit": "69db9cdac65ce536e20a8fc9a83002f007cc049c" }, 16 | "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, 17 | "fzf-lua": { "branch": "main", "commit": "be1c28b4a32beec16e29ac9c3edb7c6f760747ae" }, 18 | "gitsigns.nvim": { "branch": "main", "commit": "20ad4419564d6e22b189f6738116b38871082332" }, 19 | "go.nvim": { "branch": "master", "commit": "81bb94c1d21648245eb14c69461f5c7f8c705752" }, 20 | "guihua.lua": { "branch": "master", "commit": "314b89924a798f3b2ef72e80270c5730286cebc5" }, 21 | "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, 22 | "lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" }, 23 | "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, 24 | "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, 25 | "mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" }, 26 | "mini.nvim": { "branch": "main", "commit": "68d4478920c7afdfa21c13706464e275d9ce3255" }, 27 | "neoscroll.nvim": { "branch": "master", "commit": "f957373912e88579e26fdaea4735450ff2ef5c9c" }, 28 | "neotest": { "branch": "master", "commit": "deadfb1af5ce458742671ad3a013acb9a6b41178" }, 29 | "neotest-dart": { "branch": "main", "commit": "5ee074c9593639b60ebc452102d951438c815aac" }, 30 | "neotest-golang": { "branch": "main", "commit": "2806bc07066a734d6ed94d45d2d2557a0e2195d8" }, 31 | "neotest-java": { "branch": "main", "commit": "fbdf5c3208007ccef1a8941e1229fc5f872c760e" }, 32 | "neotest-zig": { "branch": "main", "commit": "de63f3b9a182d374d2e71cf44385326682ec90e7" }, 33 | "none-ls.nvim": { "branch": "main", "commit": "550197530c12b4838d685cf4e0d5eb4cca8d52c7" }, 34 | "nvim-cmp": { "branch": "main", "commit": "106c4bcc053a5da783bf4a9d907b6f22485c2ea0" }, 35 | "nvim-dap": { "branch": "master", "commit": "4c0e3a98465fac963dfde898cc8b878094153a43" }, 36 | "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, 37 | "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, 38 | "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, 39 | "nvim-jdtls": { "branch": "master", "commit": "38d265ee4d45da73a083ca83e41de7d37567be5c" }, 40 | "nvim-lspconfig": { "branch": "master", "commit": "2010fc6ec03e2da552b4886fceb2f7bc0fc2e9c0" }, 41 | "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, 42 | "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, 43 | "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, 44 | "nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" }, 45 | "oil.nvim": { "branch": "master", "commit": "7e1cd7703ff2924d7038476dcbc04b950203b902" }, 46 | "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, 47 | "present.nvim": { "branch": "master", "commit": "ce22dfaf9ebc2b37eb688e00929dfaeff126fe94" }, 48 | "render-markdown.nvim": { "branch": "main", "commit": "6a744f0d14fd1d0fa8e3f446ac7825ec1e351d55" }, 49 | "rose-pine": { "branch": "main", "commit": "eb3ff49a4f2b4e8b06d27de529e44fa52a60ab8a" }, 50 | "simple-surr": { "branch": "main", "commit": "4da3592f57b5ccd68192ad4f62dc1983da5fef6b" }, 51 | "tokyonight": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, 52 | "transparent.nvim": { "branch": "main", "commit": "8ac59883de84e9cd1850ea25cf087031c5ba7d54" }, 53 | "undotree": { "branch": "master", "commit": "0f1c9816975b5d7f87d5003a19c53c6fd2ff6f7f" }, 54 | "vim-tmux-navigator": { "branch": "master", "commit": "c45243dc1f32ac6bcf6068e5300f3b2b237e576a" } 55 | } 56 | -------------------------------------------------------------------------------- /aerospace/.config/aerospace/aerospace.toml: -------------------------------------------------------------------------------- 1 | after-login-command = [] 2 | after-startup-command = [] 3 | 4 | start-at-login = true 5 | 6 | enable-normalization-flatten-containers = true 7 | enable-normalization-opposite-orientation-for-nested-containers = true 8 | 9 | accordion-padding = 30 10 | 11 | default-root-container-layout = 'tiles' 12 | default-root-container-orientation = 'auto' 13 | 14 | on-focused-monitor-changed = ['move-mouse monitor-lazy-center'] 15 | on-focus-changed = 'move-mouse monitor-lazy-center' 16 | 17 | automatically-unhide-macos-hidden-apps = false 18 | 19 | [key-mapping] 20 | preset = 'qwerty' 21 | 22 | [gaps] 23 | inner.horizontal = 4 24 | inner.vertical = 5 25 | outer.left = [{monitor."Built-in Retina Display" = 15}, {monitor.secondary = 25}, {monitor."DELL S2722DC" = 25}, 3] 26 | outer.top = [{monitor."Built-in Retina Display" = 0}, {monitor.secondary = 25}, {monitor."DELL S2722DC" = 25}, 3] 27 | outer.bottom = [{monitor."Built-in Retina Display" = 20}, {monitor.secondary = 25}, {monitor."DELL S2722DC" = 25}, 3] 28 | outer.right = [{monitor."Built-in Retina Display" = 15}, {monitor.secondary = 25}, {monitor."DELL S2722DC" = 25}, 3] 29 | 30 | [mode.main.binding] 31 | 32 | alt-slash = 'layout tiles horizontal vertical' 33 | alt-comma = 'layout accordion horizontal vertical' 34 | 35 | alt-h = 'focus left' 36 | alt-j = 'focus down' 37 | alt-k = 'focus up' 38 | alt-l = 'focus right' 39 | 40 | alt-shift-h = 'move left' 41 | alt-shift-j = 'move down' 42 | alt-shift-k = 'move up' 43 | alt-shift-l = 'move right' 44 | 45 | alt-shift-minus = 'resize smart -50' 46 | alt-shift-equal = 'resize smart +50' 47 | 48 | alt-a = 'workspace A' # Any: Docker, Postman,... 49 | alt-b = 'workspace B' # Browser 50 | alt-c = 'workspace C' # Coding 51 | alt-d = 'workspace D' # Document/Finder 52 | alt-g = 'workspace G' # Game 53 | alt-m = 'workspace M' # Music 54 | alt-n = 'workspace N' # NOTE 55 | alt-r = 'workspace R' # Reading 56 | alt-s = 'workspace S' # Setting 57 | alt-t = 'workspace T' # Terminal 58 | alt-v = 'workspace V' # Edit Video 59 | alt-w = 'workspace W' # Work: Slack, ggmeet, discord,... 60 | alt-x = 'workspace X' # VM - enjoy 61 | 62 | alt-shift-a = 'move-node-to-workspace A' 63 | alt-shift-b = 'move-node-to-workspace B' 64 | alt-shift-c = 'move-node-to-workspace C' 65 | alt-shift-d = 'move-node-to-workspace D' 66 | alt-shift-g = 'move-node-to-workspace G' 67 | alt-shift-m = 'move-node-to-workspace M' 68 | alt-shift-n = 'move-node-to-workspace N' 69 | alt-shift-r = 'move-node-to-workspace R' 70 | alt-shift-s = 'move-node-to-workspace S' 71 | alt-shift-t = 'move-node-to-workspace T' 72 | alt-shift-v = 'move-node-to-workspace V' 73 | alt-shift-w = 'move-node-to-workspace W' 74 | alt-shift-x = 'move-node-to-workspace X' 75 | 76 | alt-shift-f = 'fullscreen' 77 | alt-tab = 'workspace-back-and-forth' 78 | alt-shift-tab = 'move-workspace-to-monitor --wrap-around next' 79 | 80 | alt-shift-semicolon = 'mode service' 81 | 82 | [mode.service.binding] 83 | esc = ['reload-config', 'mode main'] 84 | r = ['flatten-workspace-tree', 'mode main'] 85 | f = ['layout floating tiling', 'mode main'] 86 | backspace = ['close-all-windows-but-current', 'mode main'] 87 | 88 | 89 | alt-shift-h = ['join-with left', 'mode main'] 90 | alt-shift-j = ['join-with down', 'mode main'] 91 | alt-shift-k = ['join-with up', 'mode main'] 92 | alt-shift-l = ['join-with right', 'mode main'] 93 | 94 | [[on-window-detected]] 95 | if.app-id = 'com.github.wez.wezterm' 96 | run = "move-node-to-workspace S" 97 | 98 | [[on-window-detected]] 99 | if.app-id ='com.mitchellh.ghostty' 100 | run = "move-node-to-workspace C" 101 | 102 | # [[on-window-detected]] 103 | # if.app-id = 'com.github.wez.wezterm' 104 | # run = 'layout floating' 105 | 106 | [[on-window-detected]] 107 | if.app-id = 'com.google.Chrome' 108 | run = "move-node-to-workspace B" 109 | 110 | [[on-window-detected]] 111 | if.app-id = 'org.mozilla.firefox' 112 | run = "move-node-to-workspace B" 113 | 114 | [[on-window-detected]] 115 | if.app-id = 'com.apple.finder' 116 | run = "move-node-to-workspace D" 117 | 118 | [[on-window-detected]] 119 | if.app-id = 'com.tinyspeck.slackmacgap' 120 | run = "move-node-to-workspace W" 121 | 122 | [[on-window-detected]] 123 | if.app-id = 'com.apple.Preview' 124 | run = "move-node-to-workspace R" 125 | 126 | [[on-window-detected]] 127 | if.app-id = 'com.apple.iBooksX' 128 | run = "move-node-to-workspace R" 129 | 130 | [[on-window-detected]] 131 | if.app-id = 'info.sioyek.sioyek' 132 | run = "move-node-to-workspace R" 133 | 134 | [[on-window-detected]] 135 | if.app-id = 'notion.id' 136 | run = "move-node-to-workspace N" 137 | 138 | [[on-window-detected]] 139 | if.app-id = 'com.apple.Notes' 140 | run = "move-node-to-workspace N" 141 | 142 | [[on-window-detected]] 143 | if.app-id = 'md.obsidian' 144 | run = "move-node-to-workspace N" 145 | 146 | [[on-window-detected]] 147 | if.app-id = 'com.googlecode.iterm2' 148 | run = 'move-node-to-workspace S' 149 | 150 | [[on-window-detected]] 151 | if.app-id = 'com.hnc.Discord' 152 | run = 'move-node-to-workspace W' 153 | 154 | [[on-window-detected]] 155 | if.app-id = 'com.blackmagic-design.DaVinciResolveLite' 156 | run = 'move-node-to-workspace V' 157 | 158 | [[on-window-detected]] 159 | if.app-id = 'com.obsproject.obs-studio' 160 | run = 'move-node-to-workspace V' 161 | 162 | [[on-window-detected]] 163 | if.app-id = 'com.vmware.fusion' 164 | run = 'move-node-to-workspace X' 165 | 166 | [[on-window-detected]] 167 | if.app-id = 'org.qutebrowser.qutebrowser' 168 | run = ['layout tiling', 'move-node-to-workspace B'] 169 | 170 | #which work space is on which monitor 171 | [workspace-to-monitor-force-assignment] 172 | W = 1 173 | C = 'secondary' 174 | X = 'secondary' 175 | D = 'main' 176 | S = 'main' 177 | 178 | #join 179 | # alt-shift-; for service mode 180 | # alt-shift -> L or H,.... to merge ... 181 | -------------------------------------------------------------------------------- /nvim/.config/nvim/lua/vim-helpers.lua: -------------------------------------------------------------------------------- 1 | -- all vim helper functions here 2 | 3 | vim.keymap.set("n", "ce", function() 4 | local diagnostics = vim.diagnostic.get(0, { lnum = vim.fn.line(".") - 1 }) 5 | if #diagnostics > 0 then 6 | local message = diagnostics[1].message 7 | vim.fn.setreg("+", message) 8 | print("Copied diagnostic: " .. message) 9 | else 10 | print("No diagnostic at cursor") 11 | end 12 | end, { noremap = true, silent = true }) 13 | 14 | -- go to errors in a file :/ 15 | vim.keymap.set("n", "ne", vim.diagnostic.goto_next) -- next err 16 | vim.keymap.set("n", "pe", vim.diagnostic.goto_prev) -- previous err 17 | vim.keymap.set("n", "e", vim.diagnostic.open_float) 18 | -- copy current file path (absolute) into clipboard 19 | vim.keymap.set("n", "cp", function() 20 | local filepath = vim.fn.expand("%:p") 21 | vim.fn.setreg("+", filepath) -- Copy to Neovim clipboard 22 | vim.fn.system("echo '" .. filepath .. "' | pbcopy") -- Copy to macOS clipboard 23 | print("Copied: " .. filepath) 24 | end, { desc = "Copy absolute path to clipboard" }) 25 | 26 | -- open the current file in browser 27 | vim.keymap.set("n", "ob", function() 28 | local file_path = vim.fn.expand("%:p") -- get the current file path 29 | if file_path ~= "" then 30 | local cmd 31 | if vim.fn.has("mac") == 1 then 32 | local firefox_installed = vim.fn.system("which /Applications/Firefox.app/Contents/MacOS/firefox") 33 | if firefox_installed == "" then 34 | cmd = "open -a 'Google Chrome' " .. file_path 35 | else 36 | cmd = "open -a 'Firefox' " .. file_path 37 | end 38 | else 39 | local firefox_path = vim.fn.system("which firefox"):gsub("\n", "") 40 | local has_firefox = firefox_path ~= "" 41 | if has_firefox then 42 | cmd = "google-chrome " .. file_path 43 | end 44 | cmd = "firefox " .. file_path 45 | end 46 | os.execute(cmd .. " &") 47 | else 48 | print("No file to open") 49 | end 50 | end, { desc = "Open current file in browser" }) 51 | 52 | -- set language based on vim mode 53 | -- requires macism https://github.com/laishulu/macism 54 | -- recommend installing it by brew 55 | local sysname = vim.loop.os_uname().sysname 56 | local is_mac = sysname == "Darwin" 57 | local is_linux = sysname == "Linux" 58 | 59 | if is_mac then 60 | local english_layout = "com.apple.keylayout.ABC" 61 | local last_insert_layout = english_layout 62 | 63 | local function get_current_layout() 64 | local f = io.popen("macism") 65 | local layout = nil 66 | if f ~= nil then 67 | layout = f:read("*all"):gsub("\n", "") 68 | f:close() 69 | end 70 | print(layout) 71 | return layout 72 | end 73 | 74 | vim.api.nvim_create_autocmd("InsertLeave", { 75 | callback = function() 76 | last_insert_layout = get_current_layout() 77 | os.execute("macism " .. english_layout) 78 | end, 79 | }) 80 | 81 | -- vim.api.nvim_create_autocmd({ "CmdlineEnter" }, { 82 | -- callback = function() 83 | -- os.execute("macism " .. english_layout) 84 | -- end, 85 | -- }) 86 | 87 | vim.api.nvim_create_autocmd("InsertEnter", { 88 | callback = function() 89 | os.execute("macism " .. last_insert_layout) 90 | end, 91 | }) 92 | 93 | vim.api.nvim_create_autocmd("FocusGained", { 94 | callback = function() 95 | if vim.fn.mode() == "i" then 96 | os.execute("macism " .. last_insert_layout) 97 | else 98 | os.execute("macism " .. english_layout) 99 | end 100 | end, 101 | }) 102 | elseif is_linux then 103 | local last_layout = "keyboard-us" -- English is default 104 | 105 | local function get_fcitx_layout() 106 | local f = io.popen("fcitx5-remote -n") 107 | if f ~= nil then 108 | local result = f:read("*all") 109 | f:close() 110 | if result then 111 | return result:gsub("%s+", "") 112 | end 113 | end 114 | return "keyboard-us" -- fallback English 115 | end 116 | 117 | local function set_fcitx_layout(layout) 118 | os.execute("fcitx5-remote -s " .. layout) 119 | end 120 | 121 | vim.api.nvim_create_autocmd("InsertLeave", { 122 | callback = function() 123 | last_layout = get_fcitx_layout() 124 | set_fcitx_layout("keyboard-us") -- change to English 125 | end, 126 | }) 127 | 128 | vim.api.nvim_create_autocmd("InsertEnter", { 129 | callback = function() 130 | set_fcitx_layout(last_layout) 131 | end, 132 | }) 133 | 134 | vim.api.nvim_create_autocmd("FocusGained", { 135 | callback = function() 136 | if vim.fn.mode() == "i" then 137 | set_fcitx_layout(last_layout) 138 | else 139 | set_fcitx_layout("keyboard-us") 140 | end 141 | end, 142 | }) 143 | end 144 | 145 | -- Show folder/dir structure 146 | vim.api.nvim_create_user_command("ShowTree", function() 147 | local buf = vim.api.nvim_create_buf(false, true) 148 | local editor_width = vim.o.columns 149 | local editor_height = vim.o.lines 150 | local width = math.floor(editor_width * 0.6) 151 | local height = math.floor(editor_height * 0.9) 152 | 153 | local row = math.floor((editor_height - height) / 2) 154 | local col = math.floor((editor_width - width) / 2) 155 | local opts = { 156 | relative = "editor", 157 | width = width, 158 | height = height, 159 | row = row, 160 | col = col, 161 | border = "rounded", 162 | style = "minimal", 163 | } 164 | 165 | local win = vim.api.nvim_open_win(buf, true, opts) 166 | local job_id = vim.fn.jobstart("tree -L 4", { 167 | stdout_buffered = true, 168 | on_stdout = function(_, data) 169 | if data then 170 | for _, line in ipairs(data) do 171 | vim.api.nvim_buf_set_lines(buf, -1, -1, true, { line }) 172 | end 173 | end 174 | end, 175 | on_exit = function() 176 | -- vim.api.nvim_win_close(win, true) 177 | end, 178 | }) 179 | print("Job ID: " .. job_id) 180 | end, {}) 181 | 182 | vim.keymap.set("n", "vt", ":ShowTree", { desc = "Show directory tree in floating window" }) 183 | -------------------------------------------------------------------------------- /qutebrowser/.qutebrowser/gruvbox.py: -------------------------------------------------------------------------------- 1 | # gruvbox dark hard qutebrowser theme by Florian Bruhin 2 | # 3 | # Originally based on: 4 | # base16-qutebrowser (https://github.com/theova/base16-qutebrowser) 5 | # Base16 qutebrowser template by theova and Daniel Mulford 6 | # Gruvbox dark, hard scheme by Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox) 7 | 8 | bg0_hard = "#1d2021" 9 | bg0_soft = '#32302f' 10 | bg0_normal = '#282828' 11 | 12 | bg0 = bg0_normal 13 | bg1 = "#3c3836" 14 | bg2 = "#504945" 15 | bg3 = "#665c54" 16 | bg4 = "#7c6f64" 17 | 18 | fg0 = "#fbf1c7" 19 | fg1 = "#ebdbb2" 20 | fg2 = "#d5c4a1" 21 | fg3 = "#bdae93" 22 | fg4 = "#a89984" 23 | 24 | bright_red = "#fb4934" 25 | bright_green = "#b8bb26" 26 | bright_yellow = "#fabd2f" 27 | bright_blue = "#83a598" 28 | bright_purple = "#d3869b" 29 | bright_aqua = "#8ec07c" 30 | bright_gray = "#928374" 31 | bright_orange = "#fe8019" 32 | 33 | dark_red = "#cc241d" 34 | dark_green = "#98971a" 35 | dark_yellow = "#d79921" 36 | dark_blue = "#458588" 37 | dark_purple = "#b16286" 38 | dark_aqua = "#689d6a" 39 | dark_gray = "#a89984" 40 | dark_orange = "#d65d0e" 41 | 42 | ### Completion 43 | 44 | # Text color of the completion widget. May be a single color to use for 45 | # all columns or a list of three colors, one for each column. 46 | c.colors.completion.fg = [fg1, bright_aqua, bright_yellow] 47 | 48 | # Background color of the completion widget for odd rows. 49 | c.colors.completion.odd.bg = bg0 50 | 51 | # Background color of the completion widget for even rows. 52 | c.colors.completion.even.bg = c.colors.completion.odd.bg 53 | 54 | # Foreground color of completion widget category headers. 55 | c.colors.completion.category.fg = bright_blue 56 | 57 | # Background color of the completion widget category headers. 58 | c.colors.completion.category.bg = bg1 59 | 60 | # Top border color of the completion widget category headers. 61 | c.colors.completion.category.border.top = c.colors.completion.category.bg 62 | 63 | # Bottom border color of the completion widget category headers. 64 | c.colors.completion.category.border.bottom = c.colors.completion.category.bg 65 | 66 | # Foreground color of the selected completion item. 67 | c.colors.completion.item.selected.fg = fg0 68 | 69 | # Background color of the selected completion item. 70 | c.colors.completion.item.selected.bg = bg4 71 | 72 | # Top border color of the selected completion item. 73 | c.colors.completion.item.selected.border.top = bg2 74 | 75 | # Bottom border color of the selected completion item. 76 | c.colors.completion.item.selected.border.bottom = c.colors.completion.item.selected.border.top 77 | 78 | # Foreground color of the matched text in the selected completion item. 79 | c.colors.completion.item.selected.match.fg = bright_orange 80 | 81 | # Foreground color of the matched text in the completion. 82 | c.colors.completion.match.fg = c.colors.completion.item.selected.match.fg 83 | 84 | # Color of the scrollbar handle in the completion view. 85 | c.colors.completion.scrollbar.fg = c.colors.completion.item.selected.fg 86 | 87 | # Color of the scrollbar in the completion view. 88 | c.colors.completion.scrollbar.bg = c.colors.completion.category.bg 89 | 90 | ### Context menu 91 | 92 | # Background color of disabled items in the context menu. 93 | c.colors.contextmenu.disabled.bg = bg3 94 | 95 | # Foreground color of disabled items in the context menu. 96 | c.colors.contextmenu.disabled.fg = fg3 97 | 98 | # Background color of the context menu. If set to null, the Qt default is used. 99 | c.colors.contextmenu.menu.bg = bg0 100 | 101 | # Foreground color of the context menu. If set to null, the Qt default is used. 102 | c.colors.contextmenu.menu.fg = fg2 103 | 104 | # Background color of the context menu’s selected item. If set to null, the Qt default is used. 105 | c.colors.contextmenu.selected.bg = bg2 106 | 107 | #Foreground color of the context menu’s selected item. If set to null, the Qt default is used. 108 | c.colors.contextmenu.selected.fg = c.colors.contextmenu.menu.fg 109 | 110 | ### Downloads 111 | 112 | # Background color for the download bar. 113 | c.colors.downloads.bar.bg = bg0 114 | 115 | # Color gradient start for download text. 116 | c.colors.downloads.start.fg = bg0 117 | 118 | # Color gradient start for download backgrounds. 119 | c.colors.downloads.start.bg = bright_blue 120 | 121 | # Color gradient end for download text. 122 | c.colors.downloads.stop.fg = c.colors.downloads.start.fg 123 | 124 | # Color gradient stop for download backgrounds. 125 | c.colors.downloads.stop.bg = bright_aqua 126 | 127 | # Foreground color for downloads with errors. 128 | c.colors.downloads.error.fg = bright_red 129 | 130 | ### Hints 131 | 132 | # Font color for hints. 133 | c.colors.hints.fg = bg0 134 | 135 | # Background color for hints. 136 | c.colors.hints.bg = 'rgba(250, 191, 47, 200)' # bright_yellow 137 | 138 | # Font color for the matched part of hints. 139 | c.colors.hints.match.fg = bg4 140 | 141 | ### Keyhint widget 142 | 143 | # Text color for the keyhint widget. 144 | c.colors.keyhint.fg = fg4 145 | 146 | # Highlight color for keys to complete the current keychain. 147 | c.colors.keyhint.suffix.fg = fg0 148 | 149 | # Background color of the keyhint widget. 150 | c.colors.keyhint.bg = bg0 151 | 152 | ### Messages 153 | 154 | # Foreground color of an error message. 155 | c.colors.messages.error.fg = bg0 156 | 157 | # Background color of an error message. 158 | c.colors.messages.error.bg = bright_red 159 | 160 | # Border color of an error message. 161 | c.colors.messages.error.border = c.colors.messages.error.bg 162 | 163 | # Foreground color of a warning message. 164 | c.colors.messages.warning.fg = bg0 165 | 166 | # Background color of a warning message. 167 | c.colors.messages.warning.bg = bright_purple 168 | 169 | # Border color of a warning message. 170 | c.colors.messages.warning.border = c.colors.messages.warning.bg 171 | 172 | # Foreground color of an info message. 173 | c.colors.messages.info.fg = fg2 174 | 175 | # Background color of an info message. 176 | c.colors.messages.info.bg = bg0 177 | 178 | # Border color of an info message. 179 | c.colors.messages.info.border = c.colors.messages.info.bg 180 | 181 | ### Prompts 182 | 183 | # Foreground color for prompts. 184 | c.colors.prompts.fg = fg2 185 | 186 | # Border used around UI elements in prompts. 187 | c.colors.prompts.border = f'1px solid {bg1}' 188 | 189 | # Background color for prompts. 190 | c.colors.prompts.bg = bg3 191 | 192 | # Background color for the selected item in filename prompts. 193 | c.colors.prompts.selected.bg = bg2 194 | 195 | ### Statusbar 196 | 197 | # Foreground color of the statusbar. 198 | c.colors.statusbar.normal.fg = fg2 199 | 200 | # Background color of the statusbar. 201 | c.colors.statusbar.normal.bg = bg0 202 | 203 | # Foreground color of the statusbar in insert mode. 204 | c.colors.statusbar.insert.fg = bg0 205 | 206 | # Background color of the statusbar in insert mode. 207 | c.colors.statusbar.insert.bg = dark_aqua 208 | 209 | # Foreground color of the statusbar in passthrough mode. 210 | c.colors.statusbar.passthrough.fg = bg0 211 | 212 | # Background color of the statusbar in passthrough mode. 213 | c.colors.statusbar.passthrough.bg = dark_blue 214 | 215 | # Foreground color of the statusbar in private browsing mode. 216 | c.colors.statusbar.private.fg = bright_purple 217 | 218 | # Background color of the statusbar in private browsing mode. 219 | c.colors.statusbar.private.bg = bg0 220 | 221 | # Foreground color of the statusbar in command mode. 222 | c.colors.statusbar.command.fg = fg3 223 | 224 | # Background color of the statusbar in command mode. 225 | c.colors.statusbar.command.bg = bg1 226 | 227 | # Foreground color of the statusbar in private browsing + command mode. 228 | c.colors.statusbar.command.private.fg = c.colors.statusbar.private.fg 229 | 230 | # Background color of the statusbar in private browsing + command mode. 231 | c.colors.statusbar.command.private.bg = c.colors.statusbar.command.bg 232 | 233 | # Foreground color of the statusbar in caret mode. 234 | c.colors.statusbar.caret.fg = bg0 235 | 236 | # Background color of the statusbar in caret mode. 237 | c.colors.statusbar.caret.bg = dark_purple 238 | 239 | # Foreground color of the statusbar in caret mode with a selection. 240 | c.colors.statusbar.caret.selection.fg = c.colors.statusbar.caret.fg 241 | 242 | # Background color of the statusbar in caret mode with a selection. 243 | c.colors.statusbar.caret.selection.bg = bright_purple 244 | 245 | # Background color of the progress bar. 246 | c.colors.statusbar.progress.bg = bright_blue 247 | 248 | # Default foreground color of the URL in the statusbar. 249 | c.colors.statusbar.url.fg = fg4 250 | 251 | # Foreground color of the URL in the statusbar on error. 252 | c.colors.statusbar.url.error.fg = dark_red 253 | 254 | # Foreground color of the URL in the statusbar for hovered links. 255 | c.colors.statusbar.url.hover.fg = bright_orange 256 | 257 | # Foreground color of the URL in the statusbar on successful load 258 | # (http). 259 | c.colors.statusbar.url.success.http.fg = bright_red 260 | 261 | # Foreground color of the URL in the statusbar on successful load 262 | # (https). 263 | c.colors.statusbar.url.success.https.fg = fg0 264 | 265 | # Foreground color of the URL in the statusbar when there's a warning. 266 | c.colors.statusbar.url.warn.fg = bright_purple 267 | 268 | ### tabs 269 | 270 | # Background color of the tab bar. 271 | c.colors.tabs.bar.bg = bg0 272 | 273 | # Color gradient start for the tab indicator. 274 | c.colors.tabs.indicator.start = bright_blue 275 | 276 | # Color gradient end for the tab indicator. 277 | c.colors.tabs.indicator.stop = bright_aqua 278 | 279 | # Color for the tab indicator on errors. 280 | c.colors.tabs.indicator.error = bright_red 281 | 282 | # Foreground color of unselected odd tabs. 283 | c.colors.tabs.odd.fg = fg2 284 | 285 | # Background color of unselected odd tabs. 286 | c.colors.tabs.odd.bg = bg2 287 | 288 | # Foreground color of unselected even tabs. 289 | c.colors.tabs.even.fg = c.colors.tabs.odd.fg 290 | 291 | # Background color of unselected even tabs. 292 | c.colors.tabs.even.bg = bg3 293 | 294 | # Foreground color of selected odd tabs. 295 | c.colors.tabs.selected.odd.fg = fg2 296 | 297 | # Background color of selected odd tabs. 298 | c.colors.tabs.selected.odd.bg = bg0 299 | 300 | # Foreground color of selected even tabs. 301 | c.colors.tabs.selected.even.fg = c.colors.tabs.selected.odd.fg 302 | 303 | # Background color of selected even tabs. 304 | c.colors.tabs.selected.even.bg = bg0 305 | 306 | # Background color of pinned unselected even tabs. 307 | c.colors.tabs.pinned.even.bg = bright_green 308 | 309 | # Foreground color of pinned unselected even tabs. 310 | c.colors.tabs.pinned.even.fg = bg2 311 | 312 | # Background color of pinned unselected odd tabs. 313 | c.colors.tabs.pinned.odd.bg = bright_green 314 | 315 | # Foreground color of pinned unselected odd tabs. 316 | c.colors.tabs.pinned.odd.fg = c.colors.tabs.pinned.even.fg 317 | 318 | # Background color of pinned selected even tabs. 319 | c.colors.tabs.pinned.selected.even.bg = bg0 320 | 321 | # Foreground color of pinned selected even tabs. 322 | c.colors.tabs.pinned.selected.even.fg = c.colors.tabs.selected.odd.fg 323 | 324 | # Background color of pinned selected odd tabs. 325 | c.colors.tabs.pinned.selected.odd.bg = c.colors.tabs.pinned.selected.even.bg 326 | 327 | # Foreground color of pinned selected odd tabs. 328 | c.colors.tabs.pinned.selected.odd.fg = c.colors.tabs.selected.odd.fg 329 | 330 | # Background color for webpages if unset (or empty to use the theme's 331 | # color). 332 | # c.colors.webpage.bg = bg4 333 | -------------------------------------------------------------------------------- /others/Brewfile.lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "entries": { 3 | "tap": { 4 | "homebrew/bundle": { 5 | "revision": "8ae4e7f364bf8736e15914a3b6c76cd157deccb8" 6 | } 7 | }, 8 | "brew": { 9 | "bat": { 10 | "version": "0.24.0_1", 11 | "bottle": { 12 | "rebuild": 1, 13 | "root_url": "https://ghcr.io/v2/homebrew/core", 14 | "files": { 15 | "arm64_sequoia": { 16 | "cellar": ":any", 17 | "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:551f2475fea64abf18cc89dd3d7b5b81025f1eea76ec9822931698746252c7b6", 18 | "sha256": "551f2475fea64abf18cc89dd3d7b5b81025f1eea76ec9822931698746252c7b6" 19 | }, 20 | "arm64_sonoma": { 21 | "cellar": ":any", 22 | "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:6cc195324f99c03418d089b273b581856ad80876845898c3e932d843ce9b36d7", 23 | "sha256": "6cc195324f99c03418d089b273b581856ad80876845898c3e932d843ce9b36d7" 24 | }, 25 | "arm64_ventura": { 26 | "cellar": ":any", 27 | "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:cdf2086708888cbf4196097e7970faefa5d307d1af1596318cad3e40125952a1", 28 | "sha256": "cdf2086708888cbf4196097e7970faefa5d307d1af1596318cad3e40125952a1" 29 | }, 30 | "sonoma": { 31 | "cellar": ":any", 32 | "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:ef586d39057da2d71132ff3828a787602865895305a314356fcd91d2ad062736", 33 | "sha256": "ef586d39057da2d71132ff3828a787602865895305a314356fcd91d2ad062736" 34 | }, 35 | "ventura": { 36 | "cellar": ":any", 37 | "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:34437a8949ccf6c038623ed61c5a1741a60ac34a8fd09f55eac283485e780458", 38 | "sha256": "34437a8949ccf6c038623ed61c5a1741a60ac34a8fd09f55eac283485e780458" 39 | }, 40 | "x86_64_linux": { 41 | "cellar": ":any_skip_relocation", 42 | "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:a9b46511808dedc8e88fe9a7194adee9d873e84c32a22a5fdc2b66f13cf35b56", 43 | "sha256": "a9b46511808dedc8e88fe9a7194adee9d873e84c32a22a5fdc2b66f13cf35b56" 44 | } 45 | } 46 | } 47 | }, 48 | "fzf": { 49 | "version": "0.56.3", 50 | "bottle": { 51 | "rebuild": 0, 52 | "root_url": "https://ghcr.io/v2/homebrew/core", 53 | "files": { 54 | "arm64_sequoia": { 55 | "cellar": ":any_skip_relocation", 56 | "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:5950deebde5f28640f560d325d24a2de3733ceee67018ea871bd892c72c7cc02", 57 | "sha256": "5950deebde5f28640f560d325d24a2de3733ceee67018ea871bd892c72c7cc02" 58 | }, 59 | "arm64_sonoma": { 60 | "cellar": ":any_skip_relocation", 61 | "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:5950deebde5f28640f560d325d24a2de3733ceee67018ea871bd892c72c7cc02", 62 | "sha256": "5950deebde5f28640f560d325d24a2de3733ceee67018ea871bd892c72c7cc02" 63 | }, 64 | "arm64_ventura": { 65 | "cellar": ":any_skip_relocation", 66 | "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:5950deebde5f28640f560d325d24a2de3733ceee67018ea871bd892c72c7cc02", 67 | "sha256": "5950deebde5f28640f560d325d24a2de3733ceee67018ea871bd892c72c7cc02" 68 | }, 69 | "sonoma": { 70 | "cellar": ":any_skip_relocation", 71 | "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:d966b27087cf6f532ebfc3b0d049e4ef04378bd2b3c2c8381016b37c762b9e1a", 72 | "sha256": "d966b27087cf6f532ebfc3b0d049e4ef04378bd2b3c2c8381016b37c762b9e1a" 73 | }, 74 | "ventura": { 75 | "cellar": ":any_skip_relocation", 76 | "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:d966b27087cf6f532ebfc3b0d049e4ef04378bd2b3c2c8381016b37c762b9e1a", 77 | "sha256": "d966b27087cf6f532ebfc3b0d049e4ef04378bd2b3c2c8381016b37c762b9e1a" 78 | }, 79 | "x86_64_linux": { 80 | "cellar": ":any_skip_relocation", 81 | "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:4634fa4ef2deba42f297111e2f6a3104963d83a7d24767ccf6d2b9ce74ed9d13", 82 | "sha256": "4634fa4ef2deba42f297111e2f6a3104963d83a7d24767ccf6d2b9ce74ed9d13" 83 | } 84 | } 85 | } 86 | }, 87 | "git": { 88 | "version": "2.47.1", 89 | "bottle": { 90 | "rebuild": 0, 91 | "root_url": "https://ghcr.io/v2/homebrew/core", 92 | "files": { 93 | "arm64_sequoia": { 94 | "cellar": "/opt/homebrew/Cellar", 95 | "url": "https://ghcr.io/v2/homebrew/core/git/blobs/sha256:c5c0887f9971a6b3bf926b0ade1f35ebedac2be78a70035f1406eb788015d149", 96 | "sha256": "c5c0887f9971a6b3bf926b0ade1f35ebedac2be78a70035f1406eb788015d149" 97 | }, 98 | "arm64_sonoma": { 99 | "cellar": "/opt/homebrew/Cellar", 100 | "url": "https://ghcr.io/v2/homebrew/core/git/blobs/sha256:196a94da5d98103d77bc442815ef073f99577fa77a9426a9c087b8a988d6fbb2", 101 | "sha256": "196a94da5d98103d77bc442815ef073f99577fa77a9426a9c087b8a988d6fbb2" 102 | }, 103 | "arm64_ventura": { 104 | "cellar": "/opt/homebrew/Cellar", 105 | "url": "https://ghcr.io/v2/homebrew/core/git/blobs/sha256:4e9395da5e0d0229869c1119d48906f363eaa1afe3e6861680f25e7d40fa7d3d", 106 | "sha256": "4e9395da5e0d0229869c1119d48906f363eaa1afe3e6861680f25e7d40fa7d3d" 107 | }, 108 | "sonoma": { 109 | "cellar": "/usr/local/Cellar", 110 | "url": "https://ghcr.io/v2/homebrew/core/git/blobs/sha256:4a51f56fd79233230f1a839a9301c728c759e6465bd653dddaa31f4d21732b8d", 111 | "sha256": "4a51f56fd79233230f1a839a9301c728c759e6465bd653dddaa31f4d21732b8d" 112 | }, 113 | "ventura": { 114 | "cellar": "/usr/local/Cellar", 115 | "url": "https://ghcr.io/v2/homebrew/core/git/blobs/sha256:aaa8aee7e2147287d742c407139fad74126ef2d97fc13655657f9bd511b1c818", 116 | "sha256": "aaa8aee7e2147287d742c407139fad74126ef2d97fc13655657f9bd511b1c818" 117 | }, 118 | "x86_64_linux": { 119 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 120 | "url": "https://ghcr.io/v2/homebrew/core/git/blobs/sha256:1106f0032a25722abb75330af837707c9a6dd0259de4997077009eb6f852817b", 121 | "sha256": "1106f0032a25722abb75330af837707c9a6dd0259de4997077009eb6f852817b" 122 | } 123 | } 124 | } 125 | }, 126 | "go": { 127 | "version": "1.23.3", 128 | "bottle": { 129 | "rebuild": 0, 130 | "root_url": "https://ghcr.io/v2/homebrew/core", 131 | "files": { 132 | "arm64_sequoia": { 133 | "cellar": "/opt/homebrew/Cellar", 134 | "url": "https://ghcr.io/v2/homebrew/core/go/blobs/sha256:1bbc1e16a0048f6d42a0522361eded589d4efeda3e2bc7527a3ca5bc65e8d7e7", 135 | "sha256": "1bbc1e16a0048f6d42a0522361eded589d4efeda3e2bc7527a3ca5bc65e8d7e7" 136 | }, 137 | "arm64_sonoma": { 138 | "cellar": "/opt/homebrew/Cellar", 139 | "url": "https://ghcr.io/v2/homebrew/core/go/blobs/sha256:1bbc1e16a0048f6d42a0522361eded589d4efeda3e2bc7527a3ca5bc65e8d7e7", 140 | "sha256": "1bbc1e16a0048f6d42a0522361eded589d4efeda3e2bc7527a3ca5bc65e8d7e7" 141 | }, 142 | "arm64_ventura": { 143 | "cellar": "/opt/homebrew/Cellar", 144 | "url": "https://ghcr.io/v2/homebrew/core/go/blobs/sha256:1bbc1e16a0048f6d42a0522361eded589d4efeda3e2bc7527a3ca5bc65e8d7e7", 145 | "sha256": "1bbc1e16a0048f6d42a0522361eded589d4efeda3e2bc7527a3ca5bc65e8d7e7" 146 | }, 147 | "sonoma": { 148 | "cellar": "/usr/local/Cellar", 149 | "url": "https://ghcr.io/v2/homebrew/core/go/blobs/sha256:958572c546b50d470c31869a39b067f667e716ee00c7eb1c84b79a16caf7a2fa", 150 | "sha256": "958572c546b50d470c31869a39b067f667e716ee00c7eb1c84b79a16caf7a2fa" 151 | }, 152 | "ventura": { 153 | "cellar": "/usr/local/Cellar", 154 | "url": "https://ghcr.io/v2/homebrew/core/go/blobs/sha256:958572c546b50d470c31869a39b067f667e716ee00c7eb1c84b79a16caf7a2fa", 155 | "sha256": "958572c546b50d470c31869a39b067f667e716ee00c7eb1c84b79a16caf7a2fa" 156 | }, 157 | "x86_64_linux": { 158 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 159 | "url": "https://ghcr.io/v2/homebrew/core/go/blobs/sha256:5a0c729ae281c1dbba38ebb9258c9329a0028b6ce4b407b7eaf57538abc47f34", 160 | "sha256": "5a0c729ae281c1dbba38ebb9258c9329a0028b6ce4b407b7eaf57538abc47f34" 161 | } 162 | } 163 | } 164 | }, 165 | "gradle": { 166 | "version": "8.11.1", 167 | "bottle": { 168 | "rebuild": 0, 169 | "root_url": "https://ghcr.io/v2/homebrew/core", 170 | "files": { 171 | "all": { 172 | "cellar": ":any_skip_relocation", 173 | "url": "https://ghcr.io/v2/homebrew/core/gradle/blobs/sha256:63d32d1551162ccf0fefb53610566bd9ef75253175ea69b5ffab705b837e7adb", 174 | "sha256": "63d32d1551162ccf0fefb53610566bd9ef75253175ea69b5ffab705b837e7adb" 175 | } 176 | } 177 | } 178 | }, 179 | "neovim": { 180 | "version": "0.10.2_1", 181 | "bottle": { 182 | "rebuild": 0, 183 | "root_url": "https://ghcr.io/v2/homebrew/core", 184 | "files": { 185 | "arm64_sequoia": { 186 | "cellar": "/opt/homebrew/Cellar", 187 | "url": "https://ghcr.io/v2/homebrew/core/neovim/blobs/sha256:b74c4a50c70b5d6b869ffec9956e971d14ea7f26e73e1ae058f355267f1226a5", 188 | "sha256": "b74c4a50c70b5d6b869ffec9956e971d14ea7f26e73e1ae058f355267f1226a5" 189 | }, 190 | "arm64_sonoma": { 191 | "cellar": "/opt/homebrew/Cellar", 192 | "url": "https://ghcr.io/v2/homebrew/core/neovim/blobs/sha256:e39e1ac56d8a0c6c89d418ec494c5a3b67c08c630d7f1b82841fc070c3d50bc0", 193 | "sha256": "e39e1ac56d8a0c6c89d418ec494c5a3b67c08c630d7f1b82841fc070c3d50bc0" 194 | }, 195 | "arm64_ventura": { 196 | "cellar": "/opt/homebrew/Cellar", 197 | "url": "https://ghcr.io/v2/homebrew/core/neovim/blobs/sha256:6446e3d5b4aded7afd64eb05e4ddf072e04a439cb2bcd574c1f5360918fabb4b", 198 | "sha256": "6446e3d5b4aded7afd64eb05e4ddf072e04a439cb2bcd574c1f5360918fabb4b" 199 | }, 200 | "sonoma": { 201 | "cellar": "/usr/local/Cellar", 202 | "url": "https://ghcr.io/v2/homebrew/core/neovim/blobs/sha256:c59c7dfebb14003e8830fef8e225a12f205293ec72437cac67bfc48ea4888a1b", 203 | "sha256": "c59c7dfebb14003e8830fef8e225a12f205293ec72437cac67bfc48ea4888a1b" 204 | }, 205 | "ventura": { 206 | "cellar": "/usr/local/Cellar", 207 | "url": "https://ghcr.io/v2/homebrew/core/neovim/blobs/sha256:35bf10802691b493670fc8af1e15e7b1fae5bab2cbee0b07b1b8f67ac83c13dd", 208 | "sha256": "35bf10802691b493670fc8af1e15e7b1fae5bab2cbee0b07b1b8f67ac83c13dd" 209 | }, 210 | "x86_64_linux": { 211 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 212 | "url": "https://ghcr.io/v2/homebrew/core/neovim/blobs/sha256:37003f89843037c1b019c33defba09696a6dea359875ee2b8ba85a36d11a838a", 213 | "sha256": "37003f89843037c1b019c33defba09696a6dea359875ee2b8ba85a36d11a838a" 214 | } 215 | } 216 | } 217 | }, 218 | "node": { 219 | "version": "23.3.0", 220 | "bottle": { 221 | "rebuild": 0, 222 | "root_url": "https://ghcr.io/v2/homebrew/core", 223 | "files": { 224 | "arm64_sequoia": { 225 | "cellar": "/opt/homebrew/Cellar", 226 | "url": "https://ghcr.io/v2/homebrew/core/node/blobs/sha256:c74bc85d40d6b375d1aababa75de93f9215325bf416f56da5a5eba77a2eb959d", 227 | "sha256": "c74bc85d40d6b375d1aababa75de93f9215325bf416f56da5a5eba77a2eb959d" 228 | }, 229 | "arm64_sonoma": { 230 | "cellar": "/opt/homebrew/Cellar", 231 | "url": "https://ghcr.io/v2/homebrew/core/node/blobs/sha256:e39b20ca30f2d4761530274e4fc1fd31dc0672c5bdf8b309cb3cf63d478b3ccc", 232 | "sha256": "e39b20ca30f2d4761530274e4fc1fd31dc0672c5bdf8b309cb3cf63d478b3ccc" 233 | }, 234 | "arm64_ventura": { 235 | "cellar": "/opt/homebrew/Cellar", 236 | "url": "https://ghcr.io/v2/homebrew/core/node/blobs/sha256:2b31cb6c50c8eb36868cc665c195408a41b3c145ee4b52590e0f37f709595836", 237 | "sha256": "2b31cb6c50c8eb36868cc665c195408a41b3c145ee4b52590e0f37f709595836" 238 | }, 239 | "sonoma": { 240 | "cellar": "/usr/local/Cellar", 241 | "url": "https://ghcr.io/v2/homebrew/core/node/blobs/sha256:c4f7eb53d14a9eaf1c96ae49345753fdb41fe95d9cc92cd2ecb2fd2dd6de516d", 242 | "sha256": "c4f7eb53d14a9eaf1c96ae49345753fdb41fe95d9cc92cd2ecb2fd2dd6de516d" 243 | }, 244 | "ventura": { 245 | "cellar": "/usr/local/Cellar", 246 | "url": "https://ghcr.io/v2/homebrew/core/node/blobs/sha256:28a491eda835e37fed1f69d12c5967d86c25d5e8aa43c4c5664c6f042d8f6fa7", 247 | "sha256": "28a491eda835e37fed1f69d12c5967d86c25d5e8aa43c4c5664c6f042d8f6fa7" 248 | }, 249 | "x86_64_linux": { 250 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 251 | "url": "https://ghcr.io/v2/homebrew/core/node/blobs/sha256:b45281a4d43c4cc37ee1b9c87f6cae90cc52f78fa262d0d270e7780e0a68fbb8", 252 | "sha256": "b45281a4d43c4cc37ee1b9c87f6cae90cc52f78fa262d0d270e7780e0a68fbb8" 253 | } 254 | } 255 | } 256 | }, 257 | "openjdk@17": { 258 | "version": "17.0.13", 259 | "bottle": { 260 | "rebuild": 0, 261 | "root_url": "https://ghcr.io/v2/homebrew/core", 262 | "files": { 263 | "arm64_sequoia": { 264 | "cellar": ":any", 265 | "url": "https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:0f65b5758b71b8d9b609569de9ab91509991decb4ef6faa5e79db4bdb893732e", 266 | "sha256": "0f65b5758b71b8d9b609569de9ab91509991decb4ef6faa5e79db4bdb893732e" 267 | }, 268 | "arm64_sonoma": { 269 | "cellar": ":any", 270 | "url": "https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:8050bbd2df38506af3b16b72dc118c22b75d7bd43a50cfe633bc2bf946724a34", 271 | "sha256": "8050bbd2df38506af3b16b72dc118c22b75d7bd43a50cfe633bc2bf946724a34" 272 | }, 273 | "arm64_ventura": { 274 | "cellar": ":any", 275 | "url": "https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:053e93c7049e5260836d5ff0711afe9163f95c812950ce864b83cc3ce7f8095a", 276 | "sha256": "053e93c7049e5260836d5ff0711afe9163f95c812950ce864b83cc3ce7f8095a" 277 | }, 278 | "sonoma": { 279 | "cellar": ":any", 280 | "url": "https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:46fcc960a49a2658ab56bce058ede6a7323cf4a40a7599cc8fa0163c2b61c9b1", 281 | "sha256": "46fcc960a49a2658ab56bce058ede6a7323cf4a40a7599cc8fa0163c2b61c9b1" 282 | }, 283 | "ventura": { 284 | "cellar": ":any", 285 | "url": "https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:80538c99e1d6e1077f596d12d1ddd14179a70ba3cf6add7ec8a4bd4e13c22fa3", 286 | "sha256": "80538c99e1d6e1077f596d12d1ddd14179a70ba3cf6add7ec8a4bd4e13c22fa3" 287 | }, 288 | "x86_64_linux": { 289 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 290 | "url": "https://ghcr.io/v2/homebrew/core/openjdk/17/blobs/sha256:d4cc9eade3f9694004d6c992c729d59d56f492f58f6f90b49f7f76cf2cb64453", 291 | "sha256": "d4cc9eade3f9694004d6c992c729d59d56f492f58f6f90b49f7f76cf2cb64453" 292 | } 293 | } 294 | } 295 | }, 296 | "powerlevel10k": { 297 | "version": "1.20.0", 298 | "bottle": { 299 | "rebuild": 0, 300 | "root_url": "https://ghcr.io/v2/homebrew/core", 301 | "files": { 302 | "arm64_sequoia": { 303 | "cellar": ":any_skip_relocation", 304 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:8b5a4692b2768f76c867ae5815e2e8b3d05f08053302c69d0b5f7137cefd1fc0", 305 | "sha256": "8b5a4692b2768f76c867ae5815e2e8b3d05f08053302c69d0b5f7137cefd1fc0" 306 | }, 307 | "arm64_sonoma": { 308 | "cellar": ":any_skip_relocation", 309 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:53d306e0deb9f0ec13c023b1d1b4def2fb96e7280f33a967fa5b0ce1637c47fa", 310 | "sha256": "53d306e0deb9f0ec13c023b1d1b4def2fb96e7280f33a967fa5b0ce1637c47fa" 311 | }, 312 | "arm64_ventura": { 313 | "cellar": ":any_skip_relocation", 314 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:53d306e0deb9f0ec13c023b1d1b4def2fb96e7280f33a967fa5b0ce1637c47fa", 315 | "sha256": "53d306e0deb9f0ec13c023b1d1b4def2fb96e7280f33a967fa5b0ce1637c47fa" 316 | }, 317 | "arm64_monterey": { 318 | "cellar": ":any_skip_relocation", 319 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:c7c1892abfa0b69d3f198c51bcec09e83591dbbbc22ce51f337b065c6bc2e370", 320 | "sha256": "c7c1892abfa0b69d3f198c51bcec09e83591dbbbc22ce51f337b065c6bc2e370" 321 | }, 322 | "sonoma": { 323 | "cellar": ":any_skip_relocation", 324 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:df58ced2ccb576d8da9b0f3e5d6986c22414365354872cd2c9e620f2a8ce65e4", 325 | "sha256": "df58ced2ccb576d8da9b0f3e5d6986c22414365354872cd2c9e620f2a8ce65e4" 326 | }, 327 | "ventura": { 328 | "cellar": ":any_skip_relocation", 329 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:df58ced2ccb576d8da9b0f3e5d6986c22414365354872cd2c9e620f2a8ce65e4", 330 | "sha256": "df58ced2ccb576d8da9b0f3e5d6986c22414365354872cd2c9e620f2a8ce65e4" 331 | }, 332 | "monterey": { 333 | "cellar": ":any_skip_relocation", 334 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:bef10fff91d174c71544f0a1b0d0a1790131fe959cdd1bd4e9d1bcea682f1767", 335 | "sha256": "bef10fff91d174c71544f0a1b0d0a1790131fe959cdd1bd4e9d1bcea682f1767" 336 | }, 337 | "x86_64_linux": { 338 | "cellar": ":any_skip_relocation", 339 | "url": "https://ghcr.io/v2/homebrew/core/powerlevel10k/blobs/sha256:20bde83ee0e3a59d86aaca90273b6a88819264d47892cb23c66b47ab5230c22a", 340 | "sha256": "20bde83ee0e3a59d86aaca90273b6a88819264d47892cb23c66b47ab5230c22a" 341 | } 342 | } 343 | } 344 | }, 345 | "ripgrep": { 346 | "version": "14.1.1", 347 | "bottle": { 348 | "rebuild": 0, 349 | "root_url": "https://ghcr.io/v2/homebrew/core", 350 | "files": { 351 | "arm64_sequoia": { 352 | "cellar": ":any", 353 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:b8bf5e73c9c9b441de067ec86ac167b071ecc2078dcb1d89d2cebbb151feab35", 354 | "sha256": "b8bf5e73c9c9b441de067ec86ac167b071ecc2078dcb1d89d2cebbb151feab35" 355 | }, 356 | "arm64_sonoma": { 357 | "cellar": ":any", 358 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:47b9c3515c866b147f0e98735cab165d6471b9f28fab1ba2c57e59c43da5c10b", 359 | "sha256": "47b9c3515c866b147f0e98735cab165d6471b9f28fab1ba2c57e59c43da5c10b" 360 | }, 361 | "arm64_ventura": { 362 | "cellar": ":any", 363 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:e14a94e84c028ff53c1be3b106fdeb5aca4d7c893a819e7fb967e0719b946a28", 364 | "sha256": "e14a94e84c028ff53c1be3b106fdeb5aca4d7c893a819e7fb967e0719b946a28" 365 | }, 366 | "arm64_monterey": { 367 | "cellar": ":any", 368 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:ad8dc4ab475c84e2a1e60f5b3107f52dd59e33f84a08284b19681d8b98508fd7", 369 | "sha256": "ad8dc4ab475c84e2a1e60f5b3107f52dd59e33f84a08284b19681d8b98508fd7" 370 | }, 371 | "sonoma": { 372 | "cellar": ":any", 373 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:71d434eeabc2af220285b037f7264563ce9bc77a41af35eabe2213276a37ec2b", 374 | "sha256": "71d434eeabc2af220285b037f7264563ce9bc77a41af35eabe2213276a37ec2b" 375 | }, 376 | "ventura": { 377 | "cellar": ":any", 378 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:0cdb547c696992d08c6613c40934218964f4a061b5413c4b2f013c3f0c3ed253", 379 | "sha256": "0cdb547c696992d08c6613c40934218964f4a061b5413c4b2f013c3f0c3ed253" 380 | }, 381 | "monterey": { 382 | "cellar": ":any", 383 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:2ce54302e4524ad28389aca5a16333d4193128e911de2881e6b0e953559d89cd", 384 | "sha256": "2ce54302e4524ad28389aca5a16333d4193128e911de2881e6b0e953559d89cd" 385 | }, 386 | "x86_64_linux": { 387 | "cellar": ":any_skip_relocation", 388 | "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:97d7cbd33b4d0ed09551e3dbc07f830d3df018c2aefbb2222a12ccfb829aae30", 389 | "sha256": "97d7cbd33b4d0ed09551e3dbc07f830d3df018c2aefbb2222a12ccfb829aae30" 390 | } 391 | } 392 | } 393 | }, 394 | "sdl2": { 395 | "version": "2.30.9", 396 | "bottle": { 397 | "rebuild": 0, 398 | "root_url": "https://ghcr.io/v2/homebrew/core", 399 | "files": { 400 | "arm64_sequoia": { 401 | "cellar": ":any", 402 | "url": "https://ghcr.io/v2/homebrew/core/sdl2/blobs/sha256:cbff6c079fb44cb4b568dddb0a69c5da08b396fe6f6a4c90618f2fe8486456ea", 403 | "sha256": "cbff6c079fb44cb4b568dddb0a69c5da08b396fe6f6a4c90618f2fe8486456ea" 404 | }, 405 | "arm64_sonoma": { 406 | "cellar": ":any", 407 | "url": "https://ghcr.io/v2/homebrew/core/sdl2/blobs/sha256:84704c6ab26482890a172d9da912fbe51656de29caea75e46e287397f60461e0", 408 | "sha256": "84704c6ab26482890a172d9da912fbe51656de29caea75e46e287397f60461e0" 409 | }, 410 | "arm64_ventura": { 411 | "cellar": ":any", 412 | "url": "https://ghcr.io/v2/homebrew/core/sdl2/blobs/sha256:a8168508bbddc2439d5434b85b3fd4fec4f8b5cbbfeb11dc4c4b33faadaaabff", 413 | "sha256": "a8168508bbddc2439d5434b85b3fd4fec4f8b5cbbfeb11dc4c4b33faadaaabff" 414 | }, 415 | "sonoma": { 416 | "cellar": ":any", 417 | "url": "https://ghcr.io/v2/homebrew/core/sdl2/blobs/sha256:e0e36f68524a09d5f0b9318b8ce905a4d3a87408eea94a238084075e55bd1176", 418 | "sha256": "e0e36f68524a09d5f0b9318b8ce905a4d3a87408eea94a238084075e55bd1176" 419 | }, 420 | "ventura": { 421 | "cellar": ":any", 422 | "url": "https://ghcr.io/v2/homebrew/core/sdl2/blobs/sha256:7726275e371a832296395ce5e0d3988ccca358d1ddba82d384be5a9dbdc4c23b", 423 | "sha256": "7726275e371a832296395ce5e0d3988ccca358d1ddba82d384be5a9dbdc4c23b" 424 | }, 425 | "x86_64_linux": { 426 | "cellar": ":any_skip_relocation", 427 | "url": "https://ghcr.io/v2/homebrew/core/sdl2/blobs/sha256:ebc21173917029b88754e65099236a393bf42e5f3b07f100977140ba4b7f71cf", 428 | "sha256": "ebc21173917029b88754e65099236a393bf42e5f3b07f100977140ba4b7f71cf" 429 | } 430 | } 431 | } 432 | }, 433 | "sdl2_image": { 434 | "version": "2.8.2_2", 435 | "bottle": { 436 | "rebuild": 0, 437 | "root_url": "https://ghcr.io/v2/homebrew/core", 438 | "files": { 439 | "arm64_sequoia": { 440 | "cellar": ":any", 441 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_image/blobs/sha256:ea6594c3fe00a6b0a1169f68e78ef17c0d9cc35dab208d88e2b448cf96703547", 442 | "sha256": "ea6594c3fe00a6b0a1169f68e78ef17c0d9cc35dab208d88e2b448cf96703547" 443 | }, 444 | "arm64_sonoma": { 445 | "cellar": ":any", 446 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_image/blobs/sha256:4520a781a18de69c48f4e45cdf0136facce70322d326200eac0568ea06d9b0de", 447 | "sha256": "4520a781a18de69c48f4e45cdf0136facce70322d326200eac0568ea06d9b0de" 448 | }, 449 | "arm64_ventura": { 450 | "cellar": ":any", 451 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_image/blobs/sha256:d6ba44f75c244195f45458679b1ffcbde7ba4041b0ac314608b1ca66719ce5c5", 452 | "sha256": "d6ba44f75c244195f45458679b1ffcbde7ba4041b0ac314608b1ca66719ce5c5" 453 | }, 454 | "sonoma": { 455 | "cellar": ":any", 456 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_image/blobs/sha256:b77136bb7cac65db0092fba3c4f06ac8af0d3eb273dc98e4a0dc36773f341fc9", 457 | "sha256": "b77136bb7cac65db0092fba3c4f06ac8af0d3eb273dc98e4a0dc36773f341fc9" 458 | }, 459 | "ventura": { 460 | "cellar": ":any", 461 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_image/blobs/sha256:6c47414b1e8b5c656e8aa1dd07529e6510df854f0ddb0d630a8e25b557244e48", 462 | "sha256": "6c47414b1e8b5c656e8aa1dd07529e6510df854f0ddb0d630a8e25b557244e48" 463 | }, 464 | "x86_64_linux": { 465 | "cellar": ":any_skip_relocation", 466 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_image/blobs/sha256:627c063738ce664e38f5eaec55821203a6388ce4559f4b3427468aaf9bed4a97", 467 | "sha256": "627c063738ce664e38f5eaec55821203a6388ce4559f4b3427468aaf9bed4a97" 468 | } 469 | } 470 | } 471 | }, 472 | "sdl2_ttf": { 473 | "version": "2.22.0", 474 | "bottle": { 475 | "rebuild": 0, 476 | "root_url": "https://ghcr.io/v2/homebrew/core", 477 | "files": { 478 | "arm64_sequoia": { 479 | "cellar": ":any", 480 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:d39aae740c3fecc2329784ee379b5faaebb2ae9977ac43e827aeb767a26f15da", 481 | "sha256": "d39aae740c3fecc2329784ee379b5faaebb2ae9977ac43e827aeb767a26f15da" 482 | }, 483 | "arm64_sonoma": { 484 | "cellar": ":any", 485 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:244dc789ae5618ab35e6ff0508b9fb5a298e777ca5a41cbd41dc00846ab3a900", 486 | "sha256": "244dc789ae5618ab35e6ff0508b9fb5a298e777ca5a41cbd41dc00846ab3a900" 487 | }, 488 | "arm64_ventura": { 489 | "cellar": ":any", 490 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:51fc93a32a3ae58c3467186c977782f6aee043dcfec5990311393ce78fdd293c", 491 | "sha256": "51fc93a32a3ae58c3467186c977782f6aee043dcfec5990311393ce78fdd293c" 492 | }, 493 | "arm64_monterey": { 494 | "cellar": ":any", 495 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:7000ed898fccf6f0ce7dd6ef383a5e389edb37cef5284156eb165dfc21d8339e", 496 | "sha256": "7000ed898fccf6f0ce7dd6ef383a5e389edb37cef5284156eb165dfc21d8339e" 497 | }, 498 | "sonoma": { 499 | "cellar": ":any", 500 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:a84ed76722bda781c2ea2a978d6ddf8d895752e45b9dfaf9a0988d5c3e3755e8", 501 | "sha256": "a84ed76722bda781c2ea2a978d6ddf8d895752e45b9dfaf9a0988d5c3e3755e8" 502 | }, 503 | "ventura": { 504 | "cellar": ":any", 505 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:8f40d557b225e0fdd5ce0a80e9fb97fbf68ac1f147f38ea333b83e651cb80e81", 506 | "sha256": "8f40d557b225e0fdd5ce0a80e9fb97fbf68ac1f147f38ea333b83e651cb80e81" 507 | }, 508 | "monterey": { 509 | "cellar": ":any", 510 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:f06a7a2c359bf6a8eb4668e06b6d92374b72f3c3b0a0cc9e9fb97c11acfae87b", 511 | "sha256": "f06a7a2c359bf6a8eb4668e06b6d92374b72f3c3b0a0cc9e9fb97c11acfae87b" 512 | }, 513 | "x86_64_linux": { 514 | "cellar": ":any_skip_relocation", 515 | "url": "https://ghcr.io/v2/homebrew/core/sdl2_ttf/blobs/sha256:60ca48a32fed27ead81ba32acc20e755e6e35dd5e4ef984eacb0319ea4381cf2", 516 | "sha256": "60ca48a32fed27ead81ba32acc20e755e6e35dd5e4ef984eacb0319ea4381cf2" 517 | } 518 | } 519 | } 520 | }, 521 | "tlrc": { 522 | "version": "1.9.3", 523 | "bottle": { 524 | "rebuild": 0, 525 | "root_url": "https://ghcr.io/v2/homebrew/core", 526 | "files": { 527 | "arm64_sequoia": { 528 | "cellar": ":any_skip_relocation", 529 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:c5c04dd949a1852ac74d47806edbf9d66a934bec8a25e2a7ef14c5cb561b74d5", 530 | "sha256": "c5c04dd949a1852ac74d47806edbf9d66a934bec8a25e2a7ef14c5cb561b74d5" 531 | }, 532 | "arm64_sonoma": { 533 | "cellar": ":any_skip_relocation", 534 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:97c5f4c368464e2a079eb997db14556449c08f6dfb89858b6632bf788656c2b2", 535 | "sha256": "97c5f4c368464e2a079eb997db14556449c08f6dfb89858b6632bf788656c2b2" 536 | }, 537 | "arm64_ventura": { 538 | "cellar": ":any_skip_relocation", 539 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:39e600c9bb0e372fb96fa13ad6d21b19a50e5a12b2f71a57ab75420dfa67b32f", 540 | "sha256": "39e600c9bb0e372fb96fa13ad6d21b19a50e5a12b2f71a57ab75420dfa67b32f" 541 | }, 542 | "arm64_monterey": { 543 | "cellar": ":any_skip_relocation", 544 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:c4cab0cdcad86b09de10562690684780df7ab386b8d6123ed5e6e62e1d44996d", 545 | "sha256": "c4cab0cdcad86b09de10562690684780df7ab386b8d6123ed5e6e62e1d44996d" 546 | }, 547 | "sonoma": { 548 | "cellar": ":any_skip_relocation", 549 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:9624494a35da5d9c819e8bc326df3c443b5764f9715a44ce65ff0f3ed87ba40d", 550 | "sha256": "9624494a35da5d9c819e8bc326df3c443b5764f9715a44ce65ff0f3ed87ba40d" 551 | }, 552 | "ventura": { 553 | "cellar": ":any_skip_relocation", 554 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:5703ac062d93becf3a675c73e580e40833352824b72af8eba542ab26840fc1b1", 555 | "sha256": "5703ac062d93becf3a675c73e580e40833352824b72af8eba542ab26840fc1b1" 556 | }, 557 | "monterey": { 558 | "cellar": ":any_skip_relocation", 559 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:43352a252db7eb809704ec9a6b5d51efaa3de8c9c45792106b321121eb5858ff", 560 | "sha256": "43352a252db7eb809704ec9a6b5d51efaa3de8c9c45792106b321121eb5858ff" 561 | }, 562 | "x86_64_linux": { 563 | "cellar": ":any_skip_relocation", 564 | "url": "https://ghcr.io/v2/homebrew/core/tlrc/blobs/sha256:f434a74662a50b963fe7e58804f2d88aad7f637e041a95cd6e1001f4321c399b", 565 | "sha256": "f434a74662a50b963fe7e58804f2d88aad7f637e041a95cd6e1001f4321c399b" 566 | } 567 | } 568 | } 569 | }, 570 | "tmux": { 571 | "version": "3.5a", 572 | "bottle": { 573 | "rebuild": 0, 574 | "root_url": "https://ghcr.io/v2/homebrew/core", 575 | "files": { 576 | "arm64_sequoia": { 577 | "cellar": ":any", 578 | "url": "https://ghcr.io/v2/homebrew/core/tmux/blobs/sha256:5e371680cf27c72d30e70f57087bef3fadb408e1881a58839137625c10919f64", 579 | "sha256": "5e371680cf27c72d30e70f57087bef3fadb408e1881a58839137625c10919f64" 580 | }, 581 | "arm64_sonoma": { 582 | "cellar": ":any", 583 | "url": "https://ghcr.io/v2/homebrew/core/tmux/blobs/sha256:58e253aca23e3deb4b6e171419047cba7283a51cba51962351f5e51661d53437", 584 | "sha256": "58e253aca23e3deb4b6e171419047cba7283a51cba51962351f5e51661d53437" 585 | }, 586 | "arm64_ventura": { 587 | "cellar": ":any", 588 | "url": "https://ghcr.io/v2/homebrew/core/tmux/blobs/sha256:7cfc60d84d3ec0ba61580633d7add6ffc0eeaa07ec27ceb2380fe434530c90bb", 589 | "sha256": "7cfc60d84d3ec0ba61580633d7add6ffc0eeaa07ec27ceb2380fe434530c90bb" 590 | }, 591 | "sonoma": { 592 | "cellar": ":any", 593 | "url": "https://ghcr.io/v2/homebrew/core/tmux/blobs/sha256:2e10a69a7d9828300ef1ec19f139c6d7eef7522d451e8812073460c4ba61ac28", 594 | "sha256": "2e10a69a7d9828300ef1ec19f139c6d7eef7522d451e8812073460c4ba61ac28" 595 | }, 596 | "ventura": { 597 | "cellar": ":any", 598 | "url": "https://ghcr.io/v2/homebrew/core/tmux/blobs/sha256:7d823e8b277d302563902e25b9e75594ad46f1996f9e53e5bb70d89c910bf092", 599 | "sha256": "7d823e8b277d302563902e25b9e75594ad46f1996f9e53e5bb70d89c910bf092" 600 | }, 601 | "x86_64_linux": { 602 | "cellar": ":any_skip_relocation", 603 | "url": "https://ghcr.io/v2/homebrew/core/tmux/blobs/sha256:f8f77441d2c3db824f04268e62e1db8f240cbff682b12b40a77f5f3ae12f5a94", 604 | "sha256": "f8f77441d2c3db824f04268e62e1db8f240cbff682b12b40a77f5f3ae12f5a94" 605 | } 606 | } 607 | } 608 | }, 609 | "tree": { 610 | "version": "2.2.0", 611 | "bottle": { 612 | "rebuild": 0, 613 | "root_url": "https://ghcr.io/v2/homebrew/core", 614 | "files": { 615 | "arm64_sequoia": { 616 | "cellar": ":any_skip_relocation", 617 | "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:da86b349a512a06a0646ac0e729f6a422dbe09ddd0b6045368e5f91d13338181", 618 | "sha256": "da86b349a512a06a0646ac0e729f6a422dbe09ddd0b6045368e5f91d13338181" 619 | }, 620 | "arm64_sonoma": { 621 | "cellar": ":any_skip_relocation", 622 | "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:0cdb04082e8fbed9dbafcc8e7a4e7d9afc2af0ce36725e0c31bf7fde830405e9", 623 | "sha256": "0cdb04082e8fbed9dbafcc8e7a4e7d9afc2af0ce36725e0c31bf7fde830405e9" 624 | }, 625 | "arm64_ventura": { 626 | "cellar": ":any_skip_relocation", 627 | "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:891da675b57ff1a34b83f06b3cc491cdbbd689ba0506589e7c12a368b6e30d0e", 628 | "sha256": "891da675b57ff1a34b83f06b3cc491cdbbd689ba0506589e7c12a368b6e30d0e" 629 | }, 630 | "sonoma": { 631 | "cellar": ":any_skip_relocation", 632 | "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:42a58ba4de938e595943efcd568d7272c63eb7bbdb402d9a94b6e62a53dbc971", 633 | "sha256": "42a58ba4de938e595943efcd568d7272c63eb7bbdb402d9a94b6e62a53dbc971" 634 | }, 635 | "ventura": { 636 | "cellar": ":any_skip_relocation", 637 | "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:cf0029ab3cbe9b515a7f2ade2a29ca5ef604802de40f80d86447530ae61387d1", 638 | "sha256": "cf0029ab3cbe9b515a7f2ade2a29ca5ef604802de40f80d86447530ae61387d1" 639 | }, 640 | "x86_64_linux": { 641 | "cellar": ":any_skip_relocation", 642 | "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:eb859ce5d27196a3765c1c2265641e30de7d4d295511f5e6e13f8c1b70feb708", 643 | "sha256": "eb859ce5d27196a3765c1c2265641e30de7d4d295511f5e6e13f8c1b70feb708" 644 | } 645 | } 646 | } 647 | }, 648 | "wget": { 649 | "version": "1.25.0", 650 | "bottle": { 651 | "rebuild": 0, 652 | "root_url": "https://ghcr.io/v2/homebrew/core", 653 | "files": { 654 | "arm64_sequoia": { 655 | "cellar": "/opt/homebrew/Cellar", 656 | "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:a93dd95c5d63036e026b526e000d33fae7fb44d9a8fda5afc89bff112438c6b3", 657 | "sha256": "a93dd95c5d63036e026b526e000d33fae7fb44d9a8fda5afc89bff112438c6b3" 658 | }, 659 | "arm64_sonoma": { 660 | "cellar": "/opt/homebrew/Cellar", 661 | "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:4d180cd4ead91a34e2c2672189fc366b87ae86e6caa3acbf4845b272f57c859a", 662 | "sha256": "4d180cd4ead91a34e2c2672189fc366b87ae86e6caa3acbf4845b272f57c859a" 663 | }, 664 | "arm64_ventura": { 665 | "cellar": "/opt/homebrew/Cellar", 666 | "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:7fce09705a52a2aff61c4bdd81b9d2a1a110539718ded2ad45562254ef0f5c22", 667 | "sha256": "7fce09705a52a2aff61c4bdd81b9d2a1a110539718ded2ad45562254ef0f5c22" 668 | }, 669 | "sonoma": { 670 | "cellar": "/usr/local/Cellar", 671 | "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:5650778a8e7a60c2dea9412dd21d2f5e8ff4f224dbefbdf54924b99012062edc", 672 | "sha256": "5650778a8e7a60c2dea9412dd21d2f5e8ff4f224dbefbdf54924b99012062edc" 673 | }, 674 | "ventura": { 675 | "cellar": "/usr/local/Cellar", 676 | "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:78cee523a9b58a7b824b51767935f68c9838e9f673e70d001982858001e766ff", 677 | "sha256": "78cee523a9b58a7b824b51767935f68c9838e9f673e70d001982858001e766ff" 678 | }, 679 | "x86_64_linux": { 680 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 681 | "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:ab5f3c1c60bef4e2a4781e9b29af8afb48ead837136c419edd7febdf44b59058", 682 | "sha256": "ab5f3c1c60bef4e2a4781e9b29af8afb48ead837136c419edd7febdf44b59058" 683 | } 684 | } 685 | } 686 | }, 687 | "zig": { 688 | "version": "0.13.0", 689 | "bottle": { 690 | "rebuild": 0, 691 | "root_url": "https://ghcr.io/v2/homebrew/core", 692 | "files": { 693 | "arm64_sequoia": { 694 | "cellar": ":any", 695 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:0cd64ccf3ff42f7857000ead7b3b2f09b78c2d4e1e0f661f8f4cb6552b6ad88e", 696 | "sha256": "0cd64ccf3ff42f7857000ead7b3b2f09b78c2d4e1e0f661f8f4cb6552b6ad88e" 697 | }, 698 | "arm64_sonoma": { 699 | "cellar": ":any", 700 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:e2fdab9f70dba65551d21e6e9fc47d98336bcdb52658ff3f7799ad244aa2f500", 701 | "sha256": "e2fdab9f70dba65551d21e6e9fc47d98336bcdb52658ff3f7799ad244aa2f500" 702 | }, 703 | "arm64_ventura": { 704 | "cellar": ":any", 705 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:09cbcd8fdc15b0c5cdcbdecd2f0e42337a2ddac0070b50189fb02e5db1942633", 706 | "sha256": "09cbcd8fdc15b0c5cdcbdecd2f0e42337a2ddac0070b50189fb02e5db1942633" 707 | }, 708 | "arm64_monterey": { 709 | "cellar": ":any", 710 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:2f197b24ce0a0d7167eacf89314407ef21103e963916c05c9a094d79d152ecc4", 711 | "sha256": "2f197b24ce0a0d7167eacf89314407ef21103e963916c05c9a094d79d152ecc4" 712 | }, 713 | "sonoma": { 714 | "cellar": ":any", 715 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:193e35179c6695aee629a8551920237cf3c94a8a8853b9edf61e91ac7ba709e2", 716 | "sha256": "193e35179c6695aee629a8551920237cf3c94a8a8853b9edf61e91ac7ba709e2" 717 | }, 718 | "ventura": { 719 | "cellar": ":any", 720 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:dda3491dea9cdda74d5ab8ef63a38f88ad1e73e1d7ec58c4e54333e9a3333b54", 721 | "sha256": "dda3491dea9cdda74d5ab8ef63a38f88ad1e73e1d7ec58c4e54333e9a3333b54" 722 | }, 723 | "monterey": { 724 | "cellar": ":any", 725 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:ea39859d4c94d9a3b5c03d5faa7552275ad74d13d24c3ea558ae3f6397a9879e", 726 | "sha256": "ea39859d4c94d9a3b5c03d5faa7552275ad74d13d24c3ea558ae3f6397a9879e" 727 | }, 728 | "x86_64_linux": { 729 | "cellar": ":any_skip_relocation", 730 | "url": "https://ghcr.io/v2/homebrew/core/zig/blobs/sha256:ca207335ca7208dbe6198f0c12d593f7c8251457e924bc05f3cd1875874cc3af", 731 | "sha256": "ca207335ca7208dbe6198f0c12d593f7c8251457e924bc05f3cd1875874cc3af" 732 | } 733 | } 734 | } 735 | }, 736 | "zsh-autosuggestions": { 737 | "version": "0.7.1", 738 | "bottle": { 739 | "rebuild": 0, 740 | "root_url": "https://ghcr.io/v2/homebrew/core", 741 | "files": { 742 | "all": { 743 | "cellar": ":any_skip_relocation", 744 | "url": "https://ghcr.io/v2/homebrew/core/zsh-autosuggestions/blobs/sha256:b81edc29e7e71866042bb3e06be7c23ce5501b6cd72be6cd5f3fdfd14b311c71", 745 | "sha256": "b81edc29e7e71866042bb3e06be7c23ce5501b6cd72be6cd5f3fdfd14b311c71" 746 | } 747 | } 748 | } 749 | }, 750 | "zsh-syntax-highlighting": { 751 | "version": "0.8.0", 752 | "bottle": { 753 | "rebuild": 1, 754 | "root_url": "https://ghcr.io/v2/homebrew/core", 755 | "files": { 756 | "all": { 757 | "cellar": ":any_skip_relocation", 758 | "url": "https://ghcr.io/v2/homebrew/core/zsh-syntax-highlighting/blobs/sha256:3cfaa693dab68d9a576ad1ad0a018e12b250a057963263733f6fcc9b4c4ce8a6", 759 | "sha256": "3cfaa693dab68d9a576ad1ad0a018e12b250a057963263733f6fcc9b4c4ce8a6" 760 | } 761 | } 762 | } 763 | } 764 | }, 765 | "cask": { 766 | "flutter": { 767 | "version": "3.24.5", 768 | "options": { 769 | "full_name": "flutter" 770 | } 771 | }, 772 | "iterm2": { 773 | "version": "3.5.10", 774 | "options": { 775 | "full_name": "iterm2" 776 | } 777 | }, 778 | "keycastr": { 779 | "version": "0.10.1", 780 | "options": { 781 | "full_name": "keycastr" 782 | } 783 | }, 784 | "wezterm": { 785 | "version": "20240203-110809,5046fc22", 786 | "options": { 787 | "full_name": "wezterm" 788 | } 789 | } 790 | } 791 | }, 792 | "system": { 793 | "macos": { 794 | "sonoma": { 795 | "HOMEBREW_VERSION": "4.4.6", 796 | "HOMEBREW_PREFIX": "/opt/homebrew", 797 | "Homebrew/homebrew-core": "api", 798 | "CLT": "15.1.0.0.1.1700200546", 799 | "Xcode": "15.0.1", 800 | "macOS": "14.5" 801 | } 802 | } 803 | } 804 | } 805 | --------------------------------------------------------------------------------