[
  {
    "path": ".config/fish/conf.d/tide.fish",
    "content": "set -g tide_git_bg_color 268bd2\nset -g tide_git_bg_color_unstable C4A000\nset -g tide_git_bg_color_urgent CC0000\nset -g tide_git_branch_color 000000\nset -g tide_git_color_branch 000000\nset -g tide_git_color_conflicted 000000\nset -g tide_git_color_dirty 000000\nset -g tide_git_color_operation 000000\nset -g tide_git_color_staged 000000\nset -g tide_git_color_stash 000000\nset -g tide_git_color_untracked 000000\nset -g tide_git_color_upstream 000000\nset -g tide_git_conflicted_color 000000\nset -g tide_git_dirty_color 000000\nset -g tide_git_icon \nset -g tide_git_operation_color 000000\nset -g tide_git_staged_color 000000\nset -g tide_git_stash_color 000000\nset -g tide_git_untracked_color 000000\nset -g tide_git_upstream_color 000000\nset -g tide_pwd_bg_color 444444\n"
  },
  {
    "path": ".config/fish/config-linux.fish",
    "content": "if type -q eza\n  alias ll \"eza -l -g --icons\"\n  alias lla \"ll -a\"\nend\n"
  },
  {
    "path": ".config/fish/config-osx.fish",
    "content": "if type -q eza\n  alias ll \"eza -l -g --icons\"\n  alias lla \"ll -a\"\nend\n\n# Inkdrop\nset -gx INKDROP_HOME ~/.inkdrop\n\n# Fzf\nset -g FZF_PREVIEW_FILE_CMD \"bat --style=numbers --color=always --line-range :500\"\nset -g FZF_LEGACY_KEYBINDINGS 0\n"
  },
  {
    "path": ".config/fish/config-windows.fish",
    "content": ""
  },
  {
    "path": ".config/fish/config.fish",
    "content": "set fish_greeting \"\"\n\nset -gx TERM xterm-256color\n\n# theme\nset -g theme_color_scheme terminal-dark\nset -g fish_prompt_pwd_dir_length 1\nset -g theme_display_user yes\nset -g theme_hide_hostname no\nset -g theme_hostname always\n\n# aliases\nalias ls \"ls -p -G\"\nalias la \"ls -A\"\nalias ll \"ls -l\"\nalias lla \"ll -A\"\nalias g git\nalias c claude\nalias claude-yolo \"claude --dangerously-skip-permissions\"\ncommand -qv nvim && alias vim nvim\n\nset -gx EDITOR nvim\n\nset -gx PATH bin $PATH\nset -gx PATH ~/bin $PATH\nset -gx PATH ~/.local/bin $PATH\n\n# NodeJS\nset -gx PATH node_modules/.bin $PATH\n\n# Go\nset -g GOPATH $HOME/go\nset -gx PATH $GOPATH/bin $PATH\n\nswitch (uname)\n    case Darwin\n        source (dirname (status --current-filename))/config-osx.fish\n    case Linux\n        source (dirname (status --current-filename))/config-linux.fish\n    case '*'\n        source (dirname (status --current-filename))/config-windows.fish\nend\n\nset LOCAL_CONFIG (dirname (status --current-filename))/config-local.fish\nif test -f $LOCAL_CONFIG\n    source $LOCAL_CONFIG\nend\n"
  },
  {
    "path": ".config/fish/functions/fish_user_key_bindings.fish",
    "content": "function fish_user_key_bindings\n  # fzf\n  bind \\cf fzf_change_directory\n\n  # vim-like\n  bind \\cl forward-char\n\n  # prevent iterm2 from closing when typing Ctrl-D (EOF)\n  bind \\cd delete-char\nend\n\n# fzf plugin\nfzf_configure_bindings --directory=\\co\n"
  },
  {
    "path": ".config/fish/functions/fzf_change_directory.fish",
    "content": "function _fzf_change_directory\n  fzf | perl -pe 's/([ ()])/\\\\\\\\$1/g'|read foo\n  if [ $foo ]\n    builtin cd $foo\n    commandline -r ''\n    commandline -f repaint\n  else\n    commandline ''\n  end\nend\n\nfunction fzf_change_directory\n  begin\n    echo $HOME/.config\n    find $(ghq root) -maxdepth 4 -type d -name .git | sed 's/\\/\\.git//'\n    ls -ad */|perl -pe \"s#^#$PWD/#\"|grep -v \\.git\n    ls -ad $HOME/Developments/*/* |grep -v \\.git\n  end | sed -e 's/\\/$//' | awk '!a[$0]++' | _fzf_change_directory $argv\nend\n"
  },
  {
    "path": ".config/ghostty/config",
    "content": "theme = \"Solarized Dark - Patched\"\n\nbackground-opacity = 0.9\nbackground-blur-radius = 20\nbackground = #031219\n\nfont-family = \"PlemolJP Console NF\"\n\ncursor-style = block\ncursor-style-blink = true\n\n#keybind = global:cmd+ctrl+shift+j=toggle_visibility\n\nmacos-option-as-alt = left\nkeybind = alt+left=unbind\nkeybind = alt+right=unbind\n"
  },
  {
    "path": ".config/lazygit/config.yml",
    "content": "customCommands:\n  - key: \"C\"\n    command: \"git cz\"\n    description: \"commit with commitizen\"\n    context: \"files\"\n    loadingText: \"opening commitizen commit tool\"\n    output: terminal\ngui:\n  mouseEvents: false\n"
  },
  {
    "path": ".config/mise/config.toml",
    "content": "[tools]\nbun = \"latest\"\nghq = \"latest\"\nnode = \"latest\"\npython = \"latest\"\nruby = \"latest\"\nrust = \"latest\"\n"
  },
  {
    "path": ".config/nvim/init.lua",
    "content": "if vim.loader then\n\tvim.loader.enable()\nend\n\n_G.dd = function(...)\n\trequire(\"util.debug\").dump(...)\nend\nvim.print = _G.dd\n\nrequire(\"config.lazy\")\n"
  },
  {
    "path": ".config/nvim/lua/config/autocmds.lua",
    "content": "-- Turn off paste mode when leaving insert\nvim.api.nvim_create_autocmd(\"InsertLeave\", {\n\tpattern = \"*\",\n\tcommand = \"set nopaste\",\n})\n\n-- Disable the concealing in some file formats\n-- The default conceallevel is 3 in LazyVim\nvim.api.nvim_create_autocmd(\"FileType\", {\n\tpattern = { \"json\", \"jsonc\", \"markdown\" },\n\tcallback = function()\n\t\tvim.opt.conceallevel = 0\n\tend,\n})\n"
  },
  {
    "path": ".config/nvim/lua/config/keymaps.lua",
    "content": "local discipline = require(\"craftzdog.discipline\")\n\ndiscipline.cowboy()\n\nlocal keymap = vim.keymap\nlocal opts = { noremap = true, silent = true }\n\n-- Do things without affecting the registers\nkeymap.set(\"n\", \"x\", '\"_x')\nkeymap.set(\"n\", \"<Leader>p\", '\"0p')\nkeymap.set(\"n\", \"<Leader>P\", '\"0P')\nkeymap.set(\"v\", \"<Leader>p\", '\"0p')\nkeymap.set(\"n\", \"<Leader>c\", '\"_c')\nkeymap.set(\"n\", \"<Leader>C\", '\"_C')\nkeymap.set(\"v\", \"<Leader>c\", '\"_c')\nkeymap.set(\"v\", \"<Leader>C\", '\"_C')\nkeymap.set(\"n\", \"<Leader>d\", '\"_d')\nkeymap.set(\"n\", \"<Leader>D\", '\"_D')\nkeymap.set(\"v\", \"<Leader>d\", '\"_d')\nkeymap.set(\"v\", \"<Leader>D\", '\"_D')\n\n-- Increment/decrement\nkeymap.set(\"n\", \"+\", \"<C-a>\")\nkeymap.set(\"n\", \"-\", \"<C-x>\")\n\n-- Delete a word backwards\nkeymap.set(\"n\", \"dw\", 'vb\"_d')\n\n-- Select all\nkeymap.set(\"n\", \"<C-a>\", \"gg<S-v>G\")\n\n-- Save with root permission (not working for now)\n--vim.api.nvim_create_user_command('W', 'w !sudo tee > /dev/null %', {})\n\n-- Disable continuations\nkeymap.set(\"n\", \"<Leader>o\", \"o<Esc>^Da\", opts)\nkeymap.set(\"n\", \"<Leader>O\", \"O<Esc>^Da\", opts)\n\n-- Jumplist\nkeymap.set(\"n\", \"<C-m>\", \"<C-i>\", opts)\n\n-- New tab\nkeymap.set(\"n\", \"te\", \":tabedit\")\nkeymap.set(\"n\", \"<tab>\", \":tabnext<Return>\", opts)\nkeymap.set(\"n\", \"<s-tab>\", \":tabprev<Return>\", opts)\n-- Split window\nkeymap.set(\"n\", \"ss\", \":split<Return>\", opts)\nkeymap.set(\"n\", \"sv\", \":vsplit<Return>\", opts)\n-- Move window\nkeymap.set(\"n\", \"sh\", \"<C-w>h\")\nkeymap.set(\"n\", \"sk\", \"<C-w>k\")\nkeymap.set(\"n\", \"sj\", \"<C-w>j\")\nkeymap.set(\"n\", \"sl\", \"<C-w>l\")\n\n-- Resize window\nkeymap.set(\"n\", \"<C-w><left>\", \"<C-w><\")\nkeymap.set(\"n\", \"<C-w><right>\", \"<C-w>>\")\nkeymap.set(\"n\", \"<C-w><up>\", \"<C-w>+\")\nkeymap.set(\"n\", \"<C-w><down>\", \"<C-w>-\")\n\n-- Diagnostics\nkeymap.set(\"n\", \"<C-j>\", function()\n\tvim.diagnostic.goto_next()\nend, opts)\n\nkeymap.set(\"n\", \"<leader>r\", function()\n\trequire(\"craftzdog.hsl\").replaceHexWithHSL()\nend)\n\nkeymap.set(\"n\", \"<leader>i\", function()\n\trequire(\"craftzdog.lsp\").toggleInlayHints()\nend)\n\nvim.api.nvim_create_user_command(\"ToggleAutoformat\", function()\n\trequire(\"craftzdog.lsp\").toggleAutoformat()\nend, {})\n"
  },
  {
    "path": ".config/nvim/lua/config/lazy.lua",
    "content": "local lazypath = vim.fn.stdpath(\"data\") .. \"/lazy/lazy.nvim\"\nif not vim.loop.fs_stat(lazypath) then\n\tvim.fn.system({\n\t\t\"git\",\n\t\t\"clone\",\n\t\t\"--filter=blob:none\",\n\t\t\"https://github.com/folke/lazy.nvim.git\",\n\t\t\"--branch=stable\", -- latest stable release\n\t\tlazypath,\n\t})\nend\nvim.opt.rtp:prepend(lazypath)\n\nrequire(\"lazy\").setup({\n\tspec = {\n\t\t-- add LazyVim and import its plugins\n\t\t{\n\t\t\t\"LazyVim/LazyVim\",\n\t\t\timport = \"lazyvim.plugins\",\n\t\t\topts = {\n\t\t\t\tcolorscheme = \"solarized-osaka\",\n\t\t\t\tnews = {\n\t\t\t\t\tlazyvim = true,\n\t\t\t\t\tneovim = true,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t-- import any extras modules here\n\t\t{ import = \"lazyvim.plugins.extras.linting.eslint\" },\n\t\t{ import = \"lazyvim.plugins.extras.formatting.prettier\" },\n\t\t{ import = \"lazyvim.plugins.extras.lang.typescript\" },\n\t\t{ import = \"lazyvim.plugins.extras.lang.json\" },\n\t\t-- { import = \"lazyvim.plugins.extras.lang.markdown\" },\n\t\t{ import = \"lazyvim.plugins.extras.lang.rust\" },\n\t\t{ import = \"lazyvim.plugins.extras.lang.tailwind\" },\n\t\t-- { import = \"lazyvim.plugins.extras.dap.core\" },\n\t\t-- { import = \"lazyvim.plugins.extras.vscode\" },\n\t\t{ import = \"lazyvim.plugins.extras.util.mini-hipatterns\" },\n\t\t-- { import = \"lazyvim.plugins.extras.test.core\" },\n\t\t-- { import = \"lazyvim.plugins.extras.coding.yanky\" },\n\t\t-- { import = \"lazyvim.plugins.extras.editor.mini-files\" },\n\t\t-- { import = \"lazyvim.plugins.extras.util.project\" },\n\t\t{ import = \"plugins\" },\n\t},\n\tdefaults = {\n\t\t-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.\n\t\t-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.\n\t\tlazy = false,\n\t\t-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,\n\t\t-- have outdated releases, which may break your Neovim install.\n\t\tversion = false, -- always use the latest git commit\n\t\t-- version = \"*\", -- try installing the latest stable version for plugins that support semver\n\t},\n\tdev = {\n\t\tpath = \"~/.ghq/github.com\",\n\t},\n\tchecker = { enabled = true }, -- automatically check for plugin updates\n\tperformance = {\n\t\tcache = {\n\t\t\tenabled = true,\n\t\t\t-- disable_events = {},\n\t\t},\n\t\trtp = {\n\t\t\t-- disable some rtp plugins\n\t\t\tdisabled_plugins = {\n\t\t\t\t\"gzip\",\n\t\t\t\t-- \"matchit\",\n\t\t\t\t-- \"matchparen\",\n\t\t\t\t\"netrwPlugin\",\n\t\t\t\t\"rplugin\",\n\t\t\t\t\"tarPlugin\",\n\t\t\t\t\"tohtml\",\n\t\t\t\t\"tutor\",\n\t\t\t\t\"zipPlugin\",\n\t\t\t},\n\t\t},\n\t},\n\tui = {\n\t\tcustom_keys = {\n\t\t\t[\"<localleader>d\"] = function(plugin)\n\t\t\t\tdd(plugin)\n\t\t\tend,\n\t\t},\n\t},\n\tdebug = false,\n})\n"
  },
  {
    "path": ".config/nvim/lua/config/options.lua",
    "content": "vim.g.mapleader = \" \"\n\nvim.opt.encoding = \"utf-8\"\nvim.opt.fileencoding = \"utf-8\"\n\nvim.opt.number = true\n\nvim.opt.title = true\nvim.opt.autoindent = true\nvim.opt.smartindent = true\nvim.opt.hlsearch = true\nvim.opt.backup = false\nvim.opt.showcmd = true\nvim.opt.cmdheight = 1\nvim.opt.laststatus = 3\nvim.opt.expandtab = true\nvim.opt.scrolloff = 10\nvim.opt.shell = \"fish\"\nvim.opt.backupskip = { \"/tmp/*\", \"/private/tmp/*\" }\nvim.opt.inccommand = \"split\"\nvim.opt.ignorecase = true -- Case insensitive searching UNLESS /C or capital in search\nvim.opt.smarttab = true\nvim.opt.breakindent = true\nvim.opt.shiftwidth = 2\nvim.opt.tabstop = 2\nvim.opt.wrap = false -- No Wrap lines\nvim.opt.backspace = { \"start\", \"eol\", \"indent\" }\nvim.opt.path:append({ \"**\" }) -- Finding files - Search down into subfolders\nvim.opt.wildignore:append({ \"*/node_modules/*\" })\nvim.opt.splitbelow = true -- Put new windows below current\nvim.opt.splitright = true -- Put new windows right of current\nvim.opt.splitkeep = \"cursor\"\nvim.opt.mouse = \"\"\n\n-- Undercurl\nvim.cmd([[let &t_Cs = \"\\e[4:3m\"]])\nvim.cmd([[let &t_Ce = \"\\e[4:0m\"]])\n\n-- Add asterisks in block comments\nvim.opt.formatoptions:append({ \"r\" })\n\nvim.cmd([[au BufNewFile,BufRead *.astro setf astro]])\nvim.cmd([[au BufNewFile,BufRead Podfile setf ruby]])\n\nif vim.fn.has(\"nvim-0.8\") == 1 then\n\tvim.opt.cmdheight = 0\nend\n\n-- File types\nvim.filetype.add({\n\textension = {\n\t\tmdx = \"mdx\",\n\t},\n})\n\nvim.g.lazyvim_prettier_needs_config = true\nvim.g.lazyvim_picker = \"telescope\"\nvim.g.lazyvim_cmp = \"blink.cmp\"\n"
  },
  {
    "path": ".config/nvim/lua/craftzdog/discipline.lua",
    "content": "local M = {}\n\nfunction M.cowboy()\n\t---@type table?\n\tlocal ok = true\n\tfor _, key in ipairs({ \"h\", \"j\", \"k\", \"l\", \"+\", \"-\" }) do\n\t\tlocal count = 0\n\t\tlocal timer = assert(vim.uv.new_timer())\n\t\tlocal map = key\n\t\tvim.keymap.set(\"n\", key, function()\n\t\t\tif vim.v.count > 0 then\n\t\t\t\tcount = 0\n\t\t\tend\n\t\t\tif count >= 10 and vim.bo.buftype ~= \"nofile\" then\n        \t\t\tok = pcall(vim.notify, \"Hold it Cowboy!\", vim.log.levels.WARN, {\n\t\t\t\t\ticon = \"🤠\",\n\t\t\t\t\tid = \"cowboy\",\n\t\t\t\t\tkeep = function()\n\t\t\t\t\t\treturn count >= 10\n\t\t\t\t\tend,\n\t\t\t\t})\n\t\t\t\tif not ok then\n\t\t\t\t\treturn map\n\t\t\t\tend\n\t\t\telse\n\t\t\t\tcount = count + 1\n\t\t\t\ttimer:start(2000, 0, function()\n\t\t\t\t\tcount = 0\n\t\t\t\tend)\n\t\t\t\treturn map\n\t\t\tend\n\t\tend, { expr = true, silent = true })\n\tend\nend\n\nreturn M\n"
  },
  {
    "path": ".config/nvim/lua/craftzdog/hsl.lua",
    "content": "-- https://github.com/EmmanuelOga/columns/blob/master/utils/color.lua\n\nlocal M = {}\n\nlocal hexChars = \"0123456789abcdef\"\n\nfunction M.hex_to_rgb(hex)\n\thex = string.lower(hex)\n\tlocal ret = {}\n\tfor i = 0, 2 do\n\t\tlocal char1 = string.sub(hex, i * 2 + 2, i * 2 + 2)\n\t\tlocal char2 = string.sub(hex, i * 2 + 3, i * 2 + 3)\n\t\tlocal digit1 = string.find(hexChars, char1) - 1\n\t\tlocal digit2 = string.find(hexChars, char2) - 1\n\t\tret[i + 1] = (digit1 * 16 + digit2) / 255.0\n\tend\n\treturn ret\nend\n\n--[[\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and l in the set [0, 1].\n *\n * @param   Number  r       The red color value\n * @param   Number  g       The green color value\n * @param   Number  b       The blue color value\n * @return  Array           The HSL representation\n]]\nfunction M.rgbToHsl(r, g, b)\n\tlocal max, min = math.max(r, g, b), math.min(r, g, b)\n\tlocal h = 0\n\tlocal s = 0\n\tlocal l = 0\n\n\tl = (max + min) / 2\n\n\tif max == min then\n\t\th, s = 0, 0 -- achromatic\n\telse\n\t\tlocal d = max - min\n\t\tif l > 0.5 then\n\t\t\ts = d / (2 - max - min)\n\t\telse\n\t\t\ts = d / (max + min)\n\t\tend\n\t\tif max == r then\n\t\t\th = (g - b) / d\n\t\t\tif g < b then\n\t\t\t\th = h + 6\n\t\t\tend\n\t\telseif max == g then\n\t\t\th = (b - r) / d + 2\n\t\telseif max == b then\n\t\t\th = (r - g) / d + 4\n\t\tend\n\t\th = h / 6\n\tend\n\n\treturn h * 360, s * 100, l * 100\nend\n\n--[[\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param   Number  h       The hue\n * @param   Number  s       The saturation\n * @param   Number  l       The lightness\n * @return  Array           The RGB representation\n]]\nfunction M.hslToRgb(h, s, l)\n\tlocal r, g, b\n\n\tif s == 0 then\n\t\tr, g, b = l, l, l -- achromatic\n\telse\n\t\tfunction hue2rgb(p, q, t)\n\t\t\tif t < 0 then\n\t\t\t\tt = t + 1\n\t\t\tend\n\t\t\tif t > 1 then\n\t\t\t\tt = t - 1\n\t\t\tend\n\t\t\tif t < 1 / 6 then\n\t\t\t\treturn p + (q - p) * 6 * t\n\t\t\tend\n\t\t\tif t < 1 / 2 then\n\t\t\t\treturn q\n\t\t\tend\n\t\t\tif t < 2 / 3 then\n\t\t\t\treturn p + (q - p) * (2 / 3 - t) * 6\n\t\t\tend\n\t\t\treturn p\n\t\tend\n\n\t\tlocal q\n\t\tif l < 0.5 then\n\t\t\tq = l * (1 + s)\n\t\telse\n\t\t\tq = l + s - l * s\n\t\tend\n\t\tlocal p = 2 * l - q\n\n\t\tr = hue2rgb(p, q, h + 1 / 3)\n\t\tg = hue2rgb(p, q, h)\n\t\tb = hue2rgb(p, q, h - 1 / 3)\n\tend\n\n\treturn r * 255, g * 255, b * 255\nend\n\nfunction M.hexToHSL(hex)\n\tlocal hsluv = require(\"solarized-osaka.hsluv\")\n\tlocal rgb = M.hex_to_rgb(hex)\n\tlocal h, s, l = M.rgbToHsl(rgb[1], rgb[2], rgb[3])\n\n\treturn string.format(\"hsl(%d, %d, %d)\", math.floor(h + 0.5), math.floor(s + 0.5), math.floor(l + 0.5))\nend\n\n--[[\n * Converts an HSL color value to RGB in Hex representation.\n * @param   Number  h       The hue\n * @param   Number  s       The saturation\n * @param   Number  l       The lightness\n * @return  String           The hex representation\n]]\nfunction M.hslToHex(h, s, l)\n\tlocal r, g, b = M.hslToRgb(h / 360, s / 100, l / 100)\n\n\treturn string.format(\"#%02x%02x%02x\", r, g, b)\nend\n\nfunction M.replaceHexWithHSL()\n\t-- Get the current line number\n\tlocal line_number = vim.api.nvim_win_get_cursor(0)[1]\n\n\t-- Get the line content\n\tlocal line_content = vim.api.nvim_buf_get_lines(0, line_number - 1, line_number, false)[1]\n\n\t-- Find hex code patterns and replace them\n\tfor hex in line_content:gmatch(\"#[0-9a-fA-F]+\") do\n\t\tlocal hsl = M.hexToHSL(hex)\n\t\tline_content = line_content:gsub(hex, hsl)\n\tend\n\n\t-- Set the line content back\n\tvim.api.nvim_buf_set_lines(0, line_number - 1, line_number, false, { line_content })\nend\n\nreturn M\n"
  },
  {
    "path": ".config/nvim/lua/craftzdog/lsp.lua",
    "content": "local M = {}\nlocal LazyvimUtil = require(\"lazyvim.util\")\n\nfunction M.toggleInlayHints()\n\tvim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())\nend\n\nfunction M.toggleAutoformat()\n\tLazyvimUtil.format.toggle()\nend\n\nreturn M\n"
  },
  {
    "path": ".config/nvim/lua/plugins/coding.lua",
    "content": "return {\n\t-- Incremental rename\n\t{\n\t\t\"smjonas/inc-rename.nvim\",\n\t\tcmd = \"IncRename\",\n\t\tconfig = true,\n\t},\n\n\t-- Go forward/backward with square brackets\n\t{\n\t\t\"nvim-mini/mini.bracketed\",\n\t\tevent = \"BufReadPost\",\n\t\tconfig = function()\n\t\t\tlocal bracketed = require(\"mini.bracketed\")\n\t\t\tbracketed.setup({\n\t\t\t\tfile = { suffix = \"\" },\n\t\t\t\twindow = { suffix = \"\" },\n\t\t\t\tquickfix = { suffix = \"\" },\n\t\t\t\tyank = { suffix = \"\" },\n\t\t\t\ttreesitter = { suffix = \"n\" },\n\t\t\t})\n\t\tend,\n\t},\n\n\t-- Better increase/descrease\n\t{\n\t\t\"monaqa/dial.nvim\",\n    -- stylua: ignore\n    keys = {\n      { \"<C-a>\", function() return require(\"dial.map\").inc_normal() end, expr = true, desc = \"Increment\" },\n      { \"<C-x>\", function() return require(\"dial.map\").dec_normal() end, expr = true, desc = \"Decrement\" },\n    },\n\t\tconfig = function()\n\t\t\tlocal augend = require(\"dial.augend\")\n\t\t\trequire(\"dial.config\").augends:register_group({\n\t\t\t\tdefault = {\n\t\t\t\t\taugend.integer.alias.decimal,\n\t\t\t\t\taugend.integer.alias.hex,\n\t\t\t\t\taugend.date.alias[\"%Y/%m/%d\"],\n\t\t\t\t\taugend.constant.alias.bool,\n\t\t\t\t\taugend.semver.alias.semver,\n\t\t\t\t\taugend.constant.new({ elements = { \"let\", \"const\" } }),\n\t\t\t\t},\n\t\t\t})\n\t\tend,\n\t},\n\n\t-- copilot\n\t{\n\t\t\"zbirenbaum/copilot.lua\",\n\t\topts = {\n\t\t\tsuggestion = {\n\t\t\t\tauto_trigger = true,\n\t\t\t\tkeymap = {\n\t\t\t\t\taccept = \"<C-l>\",\n\t\t\t\t\taccept_word = \"<M-l>\",\n\t\t\t\t\taccept_line = \"<M-S-l>\",\n\t\t\t\t\tnext = \"<M-]>\",\n\t\t\t\t\tprev = \"<M-[>\",\n\t\t\t\t\tdismiss = \"<C-]>\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tfiletypes = {\n\t\t\t\tmarkdown = true,\n\t\t\t\thelp = true,\n\t\t\t},\n\t\t},\n\t},\n}\n"
  },
  {
    "path": ".config/nvim/lua/plugins/colorscheme.lua",
    "content": "return {\n\t{\n\t\t\"craftzdog/solarized-osaka.nvim\",\n\t\tlazy = true,\n\t\tpriority = 1000,\n\t\topts = function()\n\t\t\treturn {\n\t\t\t\ttransparent = true,\n\t\t\t}\n\t\tend,\n\t},\n}\n"
  },
  {
    "path": ".config/nvim/lua/plugins/editor.lua",
    "content": "return {\n\t{\n\t\tenabled = false,\n\t\t\"folke/flash.nvim\",\n\t\t---@type Flash.Config\n\t\topts = {\n\t\t\tsearch = {\n\t\t\t\tforward = true,\n\t\t\t\tmulti_window = false,\n\t\t\t\twrap = false,\n\t\t\t\tincremental = true,\n\t\t\t},\n\t\t},\n\t},\n\n\t{\n\t\t\"brenoprata10/nvim-highlight-colors\",\n\t\tevent = \"BufReadPre\",\n\t\topts = {\n\t\t\trender = \"background\",\n\t\t\tenable_hex = true,\n\t\t\tenable_short_hex = true,\n\t\t\tenable_rgb = true,\n\t\t\tenable_hsl = true,\n\t\t\tenable_hsl_without_function = true,\n\t\t\tenable_ansi = true,\n\t\t\tenable_var_usage = true,\n\t\t\tenable_tailwind = true,\n\t\t},\n\t},\n\n\t{\n\t\t\"dinhhuy258/git.nvim\",\n\t\tevent = \"BufReadPre\",\n\t\topts = {\n\t\t\tkeymaps = {\n\t\t\t\t-- Open blame window\n\t\t\t\tblame = \"<Leader>gb\",\n\t\t\t\t-- Open file/folder in git repository\n\t\t\t\tbrowse = \"<Leader>go\",\n\t\t\t},\n\t\t},\n\t},\n\n\t{\n\t\t\"nvim-telescope/telescope.nvim\",\n\t\tdependencies = {\n\t\t\t{\n\t\t\t\t\"nvim-telescope/telescope-fzf-native.nvim\",\n\t\t\t\tbuild = \"make\",\n\t\t\t},\n\t\t\t\"nvim-telescope/telescope-file-browser.nvim\",\n\t\t},\n\t\tkeys = {\n\t\t\t{\n\t\t\t\t\"<leader>fP\",\n\t\t\t\tfunction()\n\t\t\t\t\trequire(\"telescope.builtin\").find_files({\n\t\t\t\t\t\tcwd = require(\"lazy.core.config\").options.root,\n\t\t\t\t\t})\n\t\t\t\tend,\n\t\t\t\tdesc = \"Find Plugin File\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";f\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.find_files({\n\t\t\t\t\t\tno_ignore = false,\n\t\t\t\t\t\thidden = true,\n\t\t\t\t\t})\n\t\t\t\tend,\n\t\t\t\tdesc = \"Lists files in your current working directory, respects .gitignore\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";r\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.live_grep({\n\t\t\t\t\t\tadditional_args = { \"--hidden\" },\n\t\t\t\t\t})\n\t\t\t\tend,\n\t\t\t\tdesc = \"Search for a string in your current working directory and get results live as you type, respects .gitignore\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"\\\\\\\\\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.buffers()\n\t\t\t\tend,\n\t\t\t\tdesc = \"Lists open buffers\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";t\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.help_tags()\n\t\t\t\tend,\n\t\t\t\tdesc = \"Lists available help tags and opens a new window with the relevant help info on <cr>\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";;\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.resume()\n\t\t\t\tend,\n\t\t\t\tdesc = \"Resume the previous telescope picker\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";e\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.diagnostics()\n\t\t\t\tend,\n\t\t\t\tdesc = \"Lists Diagnostics for all open buffers or a specific buffer\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";s\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.treesitter()\n\t\t\t\tend,\n\t\t\t\tdesc = \"Lists Function names, variables, from Treesitter\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\";c\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal builtin = require(\"telescope.builtin\")\n\t\t\t\t\tbuiltin.lsp_incoming_calls()\n\t\t\t\tend,\n\t\t\t\tdesc = \"Lists LSP incoming calls for word under the cursor\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"sf\",\n\t\t\t\tfunction()\n\t\t\t\t\tlocal telescope = require(\"telescope\")\n\n\t\t\t\t\tlocal function telescope_buffer_dir()\n\t\t\t\t\t\treturn vim.fn.expand(\"%:p:h\")\n\t\t\t\t\tend\n\n\t\t\t\t\ttelescope.extensions.file_browser.file_browser({\n\t\t\t\t\t\tpath = \"%:p:h\",\n\t\t\t\t\t\tcwd = telescope_buffer_dir(),\n\t\t\t\t\t\trespect_gitignore = false,\n\t\t\t\t\t\thidden = true,\n\t\t\t\t\t\tgrouped = true,\n\t\t\t\t\t\tpreviewer = false,\n\t\t\t\t\t\tinitial_mode = \"normal\",\n\t\t\t\t\t\tlayout_config = { height = 40 },\n\t\t\t\t\t})\n\t\t\t\tend,\n\t\t\t\tdesc = \"Open File Browser with the path of the current buffer\",\n\t\t\t},\n\t\t},\n\t\tconfig = function(_, opts)\n\t\t\tlocal telescope = require(\"telescope\")\n\t\t\tlocal actions = require(\"telescope.actions\")\n\t\t\tlocal fb_actions = require(\"telescope\").extensions.file_browser.actions\n\n\t\t\topts.defaults = vim.tbl_deep_extend(\"force\", opts.defaults, {\n\t\t\t\twrap_results = true,\n\t\t\t\tlayout_strategy = \"horizontal\",\n\t\t\t\tlayout_config = { prompt_position = \"top\" },\n\t\t\t\tsorting_strategy = \"ascending\",\n\t\t\t\twinblend = 0,\n\t\t\t\tmappings = {\n\t\t\t\t\tn = {},\n\t\t\t\t},\n\t\t\t})\n\t\t\topts.pickers = {\n\t\t\t\tdiagnostics = {\n\t\t\t\t\ttheme = \"ivy\",\n\t\t\t\t\tinitial_mode = \"normal\",\n\t\t\t\t\tlayout_config = {\n\t\t\t\t\t\tpreview_cutoff = 9999,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\topts.extensions = {\n\t\t\t\tfile_browser = {\n\t\t\t\t\ttheme = \"dropdown\",\n\t\t\t\t\t-- disables netrw and use telescope-file-browser in its place\n\t\t\t\t\thijack_netrw = true,\n\t\t\t\t\tmappings = {\n\t\t\t\t\t\t-- your custom insert mode mappings\n\t\t\t\t\t\t[\"n\"] = {\n\t\t\t\t\t\t\t-- your custom normal mode mappings\n\t\t\t\t\t\t\t[\"N\"] = fb_actions.create,\n\t\t\t\t\t\t\t[\"h\"] = fb_actions.goto_parent_dir,\n\t\t\t\t\t\t\t[\"/\"] = function()\n\t\t\t\t\t\t\t\tvim.cmd(\"startinsert\")\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t[\"<C-u>\"] = function(prompt_bufnr)\n\t\t\t\t\t\t\t\tfor i = 1, 10 do\n\t\t\t\t\t\t\t\t\tactions.move_selection_previous(prompt_bufnr)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t[\"<C-d>\"] = function(prompt_bufnr)\n\t\t\t\t\t\t\t\tfor i = 1, 10 do\n\t\t\t\t\t\t\t\t\tactions.move_selection_next(prompt_bufnr)\n\t\t\t\t\t\t\t\tend\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t[\"<PageUp>\"] = actions.preview_scrolling_up,\n\t\t\t\t\t\t\t[\"<PageDown>\"] = actions.preview_scrolling_down,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\ttelescope.setup(opts)\n\t\t\trequire(\"telescope\").load_extension(\"fzf\")\n\t\t\trequire(\"telescope\").load_extension(\"file_browser\")\n\t\tend,\n\t},\n\n\t{\n\t\t\"kazhala/close-buffers.nvim\",\n\t\tevent = \"VeryLazy\",\n\t\tkeys = {\n\t\t\t{\n\t\t\t\t\"<leader>th\",\n\t\t\t\tfunction()\n\t\t\t\t\trequire(\"close_buffers\").delete({ type = \"hidden\" })\n\t\t\t\tend,\n\t\t\t\t\"Close Hidden Buffers\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"<leader>tu\",\n\t\t\t\tfunction()\n\t\t\t\t\trequire(\"close_buffers\").delete({ type = \"nameless\" })\n\t\t\t\tend,\n\t\t\t\t\"Close Nameless Buffers\",\n\t\t\t},\n\t\t},\n\t},\n\n\t{\n\t\t\"saghen/blink.cmp\",\n\t\topts = {\n\t\t\tcompletion = {\n\t\t\t\tmenu = {\n\t\t\t\t\twinblend = vim.o.pumblend,\n\t\t\t\t},\n\t\t\t},\n\t\t\tsignature = {\n\t\t\t\twindow = {\n\t\t\t\t\twinblend = vim.o.pumblend,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n}\n"
  },
  {
    "path": ".config/nvim/lua/plugins/lsp.lua",
    "content": "return {\n\t-- tools\n\t{\n\t\t\"mason-org/mason.nvim\",\n\t\topts = function(_, opts)\n\t\t\tvim.list_extend(opts.ensure_installed, {\n\t\t\t\t\"stylua\",\n\t\t\t\t\"selene\",\n\t\t\t\t\"luacheck\",\n\t\t\t\t\"shellcheck\",\n\t\t\t\t\"shfmt\",\n\t\t\t\t\"tailwindcss-language-server\",\n\t\t\t\t\"typescript-language-server\",\n\t\t\t\t\"css-lsp\",\n\t\t\t})\n\t\tend,\n\t},\n\n\t-- lsp servers\n\t{\n\t\t\"neovim/nvim-lspconfig\",\n\t\topts = {\n\t\t\tinlay_hints = { enabled = false },\n\t\t\t---@type lspconfig.options\n\t\t\tservers = {\n\t\t\t\tcssls = {},\n\t\t\t\ttailwindcss = {\n\t\t\t\t\troot_dir = function(...)\n\t\t\t\t\t\treturn require(\"lspconfig.util\").root_pattern(\".git\")(...)\n\t\t\t\t\tend,\n\t\t\t\t},\n\t\t\t\ttsserver = {\n\t\t\t\t\troot_dir = function(...)\n\t\t\t\t\t\treturn require(\"lspconfig.util\").root_pattern(\".git\")(...)\n\t\t\t\t\tend,\n\t\t\t\t\tsingle_file_support = false,\n\t\t\t\t\tsettings = {\n\t\t\t\t\t\ttypescript = {\n\t\t\t\t\t\t\tinlayHints = {\n\t\t\t\t\t\t\t\tincludeInlayParameterNameHints = \"literal\",\n\t\t\t\t\t\t\t\tincludeInlayParameterNameHintsWhenArgumentMatchesName = false,\n\t\t\t\t\t\t\t\tincludeInlayFunctionParameterTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayVariableTypeHints = false,\n\t\t\t\t\t\t\t\tincludeInlayPropertyDeclarationTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayFunctionLikeReturnTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayEnumMemberValueHints = true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjavascript = {\n\t\t\t\t\t\t\tinlayHints = {\n\t\t\t\t\t\t\t\tincludeInlayParameterNameHints = \"all\",\n\t\t\t\t\t\t\t\tincludeInlayParameterNameHintsWhenArgumentMatchesName = false,\n\t\t\t\t\t\t\t\tincludeInlayFunctionParameterTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayVariableTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayPropertyDeclarationTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayFunctionLikeReturnTypeHints = true,\n\t\t\t\t\t\t\t\tincludeInlayEnumMemberValueHints = true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\thtml = {},\n\t\t\t\tyamlls = {\n\t\t\t\t\tsettings = {\n\t\t\t\t\t\tyaml = {\n\t\t\t\t\t\t\tkeyOrdering = false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlua_ls = {\n\t\t\t\t\t-- enabled = false,\n\t\t\t\t\tsingle_file_support = true,\n\t\t\t\t\tsettings = {\n\t\t\t\t\t\tLua = {\n\t\t\t\t\t\t\tworkspace = {\n\t\t\t\t\t\t\t\tcheckThirdParty = false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcompletion = {\n\t\t\t\t\t\t\t\tworkspaceWord = true,\n\t\t\t\t\t\t\t\tcallSnippet = \"Both\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmisc = {\n\t\t\t\t\t\t\t\tparameters = {\n\t\t\t\t\t\t\t\t\t-- \"--log-level=trace\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thint = {\n\t\t\t\t\t\t\t\tenable = true,\n\t\t\t\t\t\t\t\tsetType = false,\n\t\t\t\t\t\t\t\tparamType = true,\n\t\t\t\t\t\t\t\tparamName = \"Disable\",\n\t\t\t\t\t\t\t\tsemicolon = \"Disable\",\n\t\t\t\t\t\t\t\tarrayIndex = \"Disable\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdoc = {\n\t\t\t\t\t\t\t\tprivateName = { \"^_\" },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttype = {\n\t\t\t\t\t\t\t\tcastNumberToInteger = true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdiagnostics = {\n\t\t\t\t\t\t\t\tdisable = { \"incomplete-signature-doc\", \"trailing-space\" },\n\t\t\t\t\t\t\t\t-- enable = false,\n\t\t\t\t\t\t\t\tgroupSeverity = {\n\t\t\t\t\t\t\t\t\tstrong = \"Warning\",\n\t\t\t\t\t\t\t\t\tstrict = \"Warning\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tgroupFileStatus = {\n\t\t\t\t\t\t\t\t\t[\"ambiguity\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"await\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"codestyle\"] = \"None\",\n\t\t\t\t\t\t\t\t\t[\"duplicate\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"global\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"luadoc\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"redefined\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"strict\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"strong\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"type-check\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"unbalanced\"] = \"Opened\",\n\t\t\t\t\t\t\t\t\t[\"unused\"] = \"Opened\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tunusedLocalExclude = { \"_*\" },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tformat = {\n\t\t\t\t\t\t\t\tenable = false,\n\t\t\t\t\t\t\t\tdefaultConfig = {\n\t\t\t\t\t\t\t\t\tindent_style = \"space\",\n\t\t\t\t\t\t\t\t\tindent_size = \"2\",\n\t\t\t\t\t\t\t\t\tcontinuation_indent_size = \"2\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tsetup = {},\n\t\t},\n\t},\n\t{\n\t\t\"neovim/nvim-lspconfig\",\n\t\topts = function()\n\t\t\tlocal keys = require(\"lazyvim.plugins.lsp.keymaps\").get()\n\t\t\tvim.list_extend(keys, {\n\t\t\t\t{\n\t\t\t\t\t\"gd\",\n\t\t\t\t\tfunction()\n\t\t\t\t\t\t-- DO NOT RESUSE WINDOW\n\t\t\t\t\t\trequire(\"telescope.builtin\").lsp_definitions({ reuse_win = false })\n\t\t\t\t\tend,\n\t\t\t\t\tdesc = \"Goto Definition\",\n\t\t\t\t\thas = \"definition\",\n\t\t\t\t},\n\t\t\t})\n\t\tend,\n\t},\n}\n"
  },
  {
    "path": ".config/nvim/lua/plugins/treesitter.lua",
    "content": "return {\n\t{ \"nvim-treesitter/playground\", cmd = \"TSPlaygroundToggle\" },\n\n\t{\n\t\t\"nvim-treesitter/nvim-treesitter\",\n\t\tbuild = \":TSUpdate\",\n\t\topts = {\n\t\t\tensure_installed = {\n\t\t\t\t\"astro\",\n\t\t\t\t\"cmake\",\n\t\t\t\t\"cpp\",\n\t\t\t\t\"css\",\n\t\t\t\t\"fish\",\n\t\t\t\t\"gitignore\",\n\t\t\t\t\"go\",\n\t\t\t\t\"graphql\",\n\t\t\t\t\"http\",\n\t\t\t\t\"java\",\n\t\t\t\t\"php\",\n\t\t\t\t\"rust\",\n\t\t\t\t\"scss\",\n\t\t\t\t\"sql\",\n\t\t\t\t\"svelte\",\n\t\t\t},\n\n\t\t\t-- matchup = {\n\t\t\t-- \tenable = true,\n\t\t\t-- },\n\n\t\t\t-- https://github.com/nvim-treesitter/playground#query-linter\n\t\t\tquery_linter = {\n\t\t\t\tenable = true,\n\t\t\t\tuse_virtual_text = true,\n\t\t\t\tlint_events = { \"BufWrite\", \"CursorHold\" },\n\t\t\t},\n\n\t\t\tplayground = {\n\t\t\t\tenable = true,\n\t\t\t\tdisable = {},\n\t\t\t\tupdatetime = 25, -- Debounced time for highlighting nodes in the playground from source code\n\t\t\t\tpersist_queries = true, -- Whether the query persists across vim sessions\n\t\t\t\tkeybindings = {\n\t\t\t\t\ttoggle_query_editor = \"o\",\n\t\t\t\t\ttoggle_hl_groups = \"i\",\n\t\t\t\t\ttoggle_injected_languages = \"t\",\n\t\t\t\t\ttoggle_anonymous_nodes = \"a\",\n\t\t\t\t\ttoggle_language_display = \"I\",\n\t\t\t\t\tfocus_language = \"f\",\n\t\t\t\t\tunfocus_language = \"F\",\n\t\t\t\t\tupdate = \"R\",\n\t\t\t\t\tgoto_node = \"<cr>\",\n\t\t\t\t\tshow_help = \"?\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tconfig = function(_, opts)\n\t\t\tlocal TS = require(\"nvim-treesitter\")\n\t\t\tTS.setup(opts)\n\n\t\t\t-- MDX\n\t\t\tvim.filetype.add({\n\t\t\t\textension = {\n\t\t\t\t\tmdx = \"mdx\",\n\t\t\t\t},\n\t\t\t})\n\t\t\tvim.treesitter.language.register(\"markdown\", \"mdx\")\n\t\tend,\n\t},\n}\n"
  },
  {
    "path": ".config/nvim/lua/plugins/ui.lua",
    "content": "return {\n\t-- messages, cmdline and the popupmenu\n\t{\n\t\t\"folke/noice.nvim\",\n\t\topts = function(_, opts)\n\t\t\ttable.insert(opts.routes, {\n\t\t\t\tfilter = {\n\t\t\t\t\tevent = \"notify\",\n\t\t\t\t\tfind = \"No information available\",\n\t\t\t\t},\n\t\t\t\topts = { skip = true },\n\t\t\t})\n\t\t\tlocal focused = true\n\t\t\tvim.api.nvim_create_autocmd(\"FocusGained\", {\n\t\t\t\tcallback = function()\n\t\t\t\t\tfocused = true\n\t\t\t\tend,\n\t\t\t})\n\t\t\tvim.api.nvim_create_autocmd(\"FocusLost\", {\n\t\t\t\tcallback = function()\n\t\t\t\t\tfocused = false\n\t\t\t\tend,\n\t\t\t})\n\t\t\ttable.insert(opts.routes, 1, {\n\t\t\t\tfilter = {\n\t\t\t\t\tcond = function()\n\t\t\t\t\t\treturn not focused\n\t\t\t\t\tend,\n\t\t\t\t},\n\t\t\t\tview = \"notify_send\",\n\t\t\t\topts = { stop = false },\n\t\t\t})\n\n\t\t\topts.commands = {\n\t\t\t\tall = {\n\t\t\t\t\t-- options for the message history that you get with `:Noice`\n\t\t\t\t\tview = \"split\",\n\t\t\t\t\topts = { enter = true, format = \"details\" },\n\t\t\t\t\tfilter = {},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tvim.api.nvim_create_autocmd(\"FileType\", {\n\t\t\t\tpattern = \"markdown\",\n\t\t\t\tcallback = function(event)\n\t\t\t\t\tvim.schedule(function()\n\t\t\t\t\t\trequire(\"noice.text.markdown\").keys(event.buf)\n\t\t\t\t\tend)\n\t\t\t\tend,\n\t\t\t})\n\n\t\t\topts.presets.lsp_doc_border = true\n\t\tend,\n\t},\n\n\t{\n\t\t\"rcarriga/nvim-notify\",\n\t\topts = {\n\t\t\ttimeout = 5000,\n\t\t},\n\t},\n\n\t{\n\t\t\"snacks.nvim\",\n\t\topts = {\n\t\t\tscroll = { enabled = false },\n\t\t},\n\t\tkeys = {},\n\t},\n\n\t-- buffer line\n\t{\n\t\t\"akinsho/bufferline.nvim\",\n\t\tevent = \"VeryLazy\",\n\t\tkeys = {\n\t\t\t{ \"<Tab>\", \"<Cmd>BufferLineCycleNext<CR>\", desc = \"Next tab\" },\n\t\t\t{ \"<S-Tab>\", \"<Cmd>BufferLineCyclePrev<CR>\", desc = \"Prev tab\" },\n\t\t},\n\t\topts = {\n\t\t\toptions = {\n\t\t\t\tmode = \"tabs\",\n\t\t\t\t-- separator_style = \"slant\",\n\t\t\t\tshow_buffer_close_icons = false,\n\t\t\t\tshow_close_icon = false,\n\t\t\t},\n\t\t},\n\t},\n\n\t-- filename\n\t{\n\t\t\"b0o/incline.nvim\",\n\t\tdependencies = { \"craftzdog/solarized-osaka.nvim\" },\n\t\tevent = \"BufReadPre\",\n\t\tpriority = 1200,\n\t\tconfig = function()\n\t\t\tlocal colors = require(\"solarized-osaka.colors\").setup()\n\t\t\trequire(\"incline\").setup({\n\t\t\t\thighlight = {\n\t\t\t\t\tgroups = {\n\t\t\t\t\t\tInclineNormal = { guibg = colors.magenta500, guifg = colors.base04 },\n\t\t\t\t\t\tInclineNormalNC = { guifg = colors.violet500, guibg = colors.base03 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twindow = { margin = { vertical = 0, horizontal = 1 } },\n\t\t\t\thide = {\n\t\t\t\t\tcursorline = true,\n\t\t\t\t},\n\t\t\t\trender = function(props)\n\t\t\t\t\tlocal filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), \":t\")\n\t\t\t\t\tif vim.bo[props.buf].modified then\n\t\t\t\t\t\tfilename = \"[+] \" .. filename\n\t\t\t\t\tend\n\n\t\t\t\t\tlocal icon, color = require(\"nvim-web-devicons\").get_icon_color(filename)\n\t\t\t\t\treturn { { icon, guifg = color }, { \" \" }, { filename } }\n\t\t\t\tend,\n\t\t\t})\n\t\tend,\n\t},\n\n\t-- statusline\n\t{\n\t\t\"nvim-lualine/lualine.nvim\",\n\t\topts = function(_, opts)\n\t\t\tlocal LazyVim = require(\"lazyvim.util\")\n\t\t\topts.sections.lualine_c[4] = {\n\t\t\t\tLazyVim.lualine.pretty_path({\n\t\t\t\t\tlength = 0,\n\t\t\t\t\trelative = \"cwd\",\n\t\t\t\t\tmodified_hl = \"MatchParen\",\n\t\t\t\t\tdirectory_hl = \"\",\n\t\t\t\t\tfilename_hl = \"Bold\",\n\t\t\t\t\tmodified_sign = \"\",\n\t\t\t\t\treadonly_icon = \" 󰌾 \",\n\t\t\t\t}),\n\t\t\t}\n\t\tend,\n\t},\n\n\t{\n\t\t\"folke/zen-mode.nvim\",\n\t\tcmd = \"ZenMode\",\n\t\topts = {\n\t\t\tplugins = {\n\t\t\t\tgitsigns = true,\n\t\t\t\ttmux = true,\n\t\t\t\tkitty = { enabled = false, font = \"+2\" },\n\t\t\t},\n\t\t},\n\t\tkeys = { { \"<leader>z\", \"<cmd>ZenMode<cr>\", desc = \"Zen Mode\" } },\n\t},\n\n\t{\n\t\t\"MeanderingProgrammer/render-markdown.nvim\",\n\t\tenabled = false,\n\t},\n\n\t{\n\t\t\"folke/snacks.nvim\",\n\t\topts = {\n\t\t\tdashboard = {\n\t\t\t\tpreset = {\n\t\t\t\t\theader = [[\n\t        ██████╗ ███████╗██╗   ██╗ █████╗ ███████╗██╗     ██╗███████╗███████╗\n\t        ██╔══██╗██╔════╝██║   ██║██╔══██╗██╔════╝██║     ██║██╔════╝██╔════╝\n\t        ██║  ██║█████╗  ██║   ██║███████║███████╗██║     ██║█████╗  █████╗\n\t        ██║  ██║██╔══╝  ╚██╗ ██╔╝██╔══██║╚════██║██║     ██║██╔══╝  ██╔══╝\n\t        ██████╔╝███████╗ ╚████╔╝ ██║  ██║███████║███████╗██║██║     ███████╗\n\t        ╚═════╝ ╚══════╝  ╚═══╝  ╚═╝  ╚═╝╚══════╝╚══════╝╚═╝╚═╝     ╚══════╝\n   ]],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n}\n"
  },
  {
    "path": ".config/nvim/lua/util/debug.lua",
    "content": "-- selene: allow(global_usage)\n\nlocal M = {}\n\nfunction M.get_loc()\n  local me = debug.getinfo(1, \"S\")\n  local level = 2\n  local info = debug.getinfo(level, \"S\")\n  while info and (info.source == me.source or info.source == \"@\" .. vim.env.MYVIMRC or info.what ~= \"Lua\") do\n    level = level + 1\n    info = debug.getinfo(level, \"S\")\n  end\n  info = info or me\n  local source = info.source:sub(2)\n  source = vim.loop.fs_realpath(source) or source\n  return source .. \":\" .. info.linedefined\nend\n\n---@param value any\n---@param opts? {loc:string}\nfunction M._dump(value, opts)\n  opts = opts or {}\n  opts.loc = opts.loc or M.get_loc()\n  if vim.in_fast_event() then\n    return vim.schedule(function()\n      M._dump(value, opts)\n    end)\n  end\n  opts.loc = vim.fn.fnamemodify(opts.loc, \":~:.\")\n  local msg = vim.inspect(value)\n  vim.notify(msg, vim.log.levels.INFO, {\n    title = \"Debug: \" .. opts.loc,\n    on_open = function(win)\n      vim.wo[win].conceallevel = 3\n      vim.wo[win].concealcursor = \"\"\n      vim.wo[win].spell = false\n      local buf = vim.api.nvim_win_get_buf(win)\n      if not pcall(vim.treesitter.start, buf, \"lua\") then\n        vim.bo[buf].filetype = \"lua\"\n      end\n    end,\n  })\nend\n\nfunction M.dump(...)\n  local value = { ... }\n  if vim.tbl_isempty(value) then\n    value = nil\n  else\n    value = vim.tbl_islist(value) and vim.tbl_count(value) <= 1 and value[1] or value\n  end\n  M._dump(value)\nend\n\nfunction M.extmark_leaks()\n  local nsn = vim.api.nvim_get_namespaces()\n\n  local counts = {}\n\n  for name, ns in pairs(nsn) do\n    for _, buf in ipairs(vim.api.nvim_list_bufs()) do\n      local count = #vim.api.nvim_buf_get_extmarks(buf, ns, 0, -1, {})\n      if count > 0 then\n        counts[#counts + 1] = {\n          name = name,\n          buf = buf,\n          count = count,\n          ft = vim.bo[buf].ft,\n        }\n      end\n    end\n  end\n  table.sort(counts, function(a, b)\n    return a.count > b.count\n  end)\n  dd(counts)\nend\n\nfunction estimateSize(value, visited)\n  if value == nil then\n    return 0\n  end\n  local bytes = 0\n\n  -- initialize the visited table if not already done\n  --- @type table<any, true>\n  visited = visited or {}\n\n  -- handle already-visited value to avoid infinite recursion\n  if visited[value] then\n    return 0\n  else\n    visited[value] = true\n  end\n\n  if type(value) == \"boolean\" or value == nil then\n    bytes = 4\n  elseif type(value) == \"number\" then\n    bytes = 8\n  elseif type(value) == \"string\" then\n    bytes = string.len(value) + 24\n  elseif type(value) == \"function\" then\n    bytes = 32 -- base size for a function\n    -- add size of upvalues\n    local i = 1\n    while true do\n      local name, val = debug.getupvalue(value, i)\n      if not name then\n        break\n      end\n      bytes = bytes + estimateSize(val, visited)\n      i = i + 1\n    end\n  elseif type(value) == \"table\" then\n    bytes = 40 -- base size for a table entry\n    for k, v in pairs(value) do\n      bytes = bytes + estimateSize(k, visited) + estimateSize(v, visited)\n    end\n    local mt = debug.getmetatable(value)\n    if mt then\n      bytes = bytes + estimateSize(mt, visited)\n    end\n  end\n  return bytes\nend\n\nfunction M.module_leaks(filter)\n  local sizes = {}\n  for modname, mod in pairs(package.loaded) do\n    if not filter or modname:match(filter) then\n      local root = modname:match(\"^([^%.]+)%..*$\") or modname\n      -- root = modname\n      sizes[root] = sizes[root] or { mod = root, size = 0 }\n      sizes[root].size = sizes[root].size + estimateSize(mod) / 1024 / 1024\n    end\n  end\n  sizes = vim.tbl_values(sizes)\n  table.sort(sizes, function(a, b)\n    return a.size > b.size\n  end)\n  dd(sizes)\nend\n\nfunction M.get_upvalue(func, name)\n  local i = 1\n  while true do\n    local n, v = debug.getupvalue(func, i)\n    if not n then\n      break\n    end\n    if n == name then\n      return v\n    end\n    i = i + 1\n  end\nend\n\nreturn M\n"
  },
  {
    "path": ".config/powershell/takuya.omp.json",
    "content": "{\n  \"$schema\": \"https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json\",\n  \"blocks\": [\n    {\n      \"alignment\": \"left\",\n      \"segments\": [\n        {\n          \"background\": \"#0077c2\",\n          \"foreground\": \"#ffffff\",\n          \"leading_diamond\": \"\\u256d\\u2500\\ue0b6\",\n          \"style\": \"diamond\",\n          \"template\": \" {{ .Name }} \",\n          \"type\": \"shell\"\n        },\n        {\n          \"background\": \"#ef5350\",\n          \"foreground\": \"#FFFB38\",\n          \"properties\": {\n            \"root_icon\": \"\\uf292\"\n          },\n          \"style\": \"diamond\",\n          \"template\": \"<parentBackground>\\ue0b0</> \\uf0e7 \",\n          \"type\": \"root\"\n        },\n        {\n          \"background\": \"#444444\",\n          \"foreground\": \"#E4E4E4\",\n          \"powerline_symbol\": \"\\ue0b0\",\n          \"properties\": {\n            \"style\": \"full\"\n          },\n          \"style\": \"powerline\",\n          \"template\": \" {{ .Path }} \",\n          \"type\": \"path\"\n        },\n        {\n          \"background\": \"#FFFB38\",\n          \"background_templates\": [\n            \"{{ if or (.Working.Changed) (.Staging.Changed) }}#ffeb95{{ end }}\",\n            \"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#c5e478{{ end }}\",\n            \"{{ if gt .Ahead 0 }}#C792EA{{ end }}\",\n            \"{{ if gt .Behind 0 }}#C792EA{{ end }}\"\n          ],\n          \"foreground\": \"#011627\",\n          \"powerline_symbol\": \"\\ue0b0\",\n          \"properties\": {\n            \"branch_icon\": \"\\ue725 \",\n            \"fetch_status\": true,\n            \"fetch_upstream_icon\": true\n          },\n          \"style\": \"powerline\",\n          \"template\": \" {{ .HEAD }} {{ if .Working.Changed }}{{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }}<#ef5350> \\uf046 {{ .Staging.String }}</>{{ end }} \",\n          \"type\": \"git\"\n        }\n      ],\n      \"type\": \"prompt\"\n    },\n    {\n      \"alignment\": \"right\",\n      \"segments\": [\n        {\n          \"background\": \"#303030\",\n          \"foreground\": \"#3C873A\",\n          \"leading_diamond\": \" \\ue0b6\",\n          \"properties\": {\n            \"fetch_package_manager\": true,\n            \"npm_icon\": \" <#cc3a3a>\\ue5fa</> \",\n            \"yarn_icon\": \" <#348cba>\\ue6a7</>\"\n          },\n          \"style\": \"diamond\",\n          \"template\": \"\\ue718 {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}\",\n          \"trailing_diamond\": \"\\ue0b4\",\n          \"type\": \"node\"\n        },\n        {\n          \"background\": \"#40c4ff\",\n          \"foreground\": \"#ffffff\",\n          \"invert_powerline\": true,\n          \"leading_diamond\": \" \\ue0b6\",\n          \"style\": \"diamond\",\n          \"template\": \" \\ue641 {{ .CurrentDate | date .Format }} \",\n          \"trailing_diamond\": \"\\ue0b4\",\n          \"type\": \"time\"\n        }\n      ],\n      \"type\": \"prompt\"\n    },\n    {\n      \"alignment\": \"left\",\n      \"newline\": true,\n      \"segments\": [\n        {\n          \"foreground\": \"#21c7c7\",\n          \"style\": \"plain\",\n          \"template\": \"\\u2570\\u2500\",\n          \"type\": \"text\"\n        },\n        {\n          \"foreground\": \"#e0f8ff\",\n          \"foreground_templates\": [\n            \"{{ if gt .Code 0 }}#ef5350{{ end }}\"\n          ],\n          \"properties\": {\n            \"always_enabled\": true\n          },\n          \"style\": \"plain\",\n          \"template\": \"\\u276f \",\n          \"type\": \"status\"\n        }\n      ],\n      \"type\": \"prompt\"\n    }\n  ],\n  \"version\": 3\n}\n"
  },
  {
    "path": ".config/powershell/user_profile.ps1",
    "content": "Import-Module posh-git\n$omp_config = Join-Path $PSScriptRoot \".\\takuya.omp.json\"\noh-my-posh init pwsh --config $omp_config | Invoke-Expression\n\nImport-Module -Name Terminal-Icons\n\n# PSReadLine\nSet-PSReadLineOption -EditMode Emacs\nSet-PSReadLineOption -BellStyle None\nSet-PSReadLineKeyHandler -Chord 'Ctrl+d' -Function DeleteChar\nSet-PSReadLineOption -PredictionSource History\n\n# Fzf\nImport-Module PSFzf\nSet-PsFzfOption -PSReadlineChordProvider 'Ctrl+f' -PSReadlineChordReverseHistory 'Ctrl+r'\n\n# Env\n$env:GIT_SSH = \"C:\\Windows\\system32\\OpenSSH\\ssh.exe\"\n\n# Alias\nSet-Alias -Name vim -Value nvim\nSet-Alias ll ls\nSet-Alias g git\nSet-Alias grep findstr\nSet-Alias tig 'C:\\Program Files\\Git\\usr\\bin\\tig.exe'\nSet-Alias less 'C:\\Program Files\\Git\\usr\\bin\\less.exe'\n\n# Paths\n$env:PATH += ';.\\node_modules\\.bin'\n$env:PATH += ';C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64'\n\n# Utilities\nfunction which ($command) {\n  Get-Command -Name $command -ErrorAction SilentlyContinue |\n    Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue\n}\n\n"
  },
  {
    "path": ".config/tmux/macos.conf",
    "content": "# osx clipboard\nset-option -g default-command \"which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL\"\n\n# Undercurl\nset -as terminal-overrides ',*:Smulx=\\E[4::%p1%dm'  # undercurl support\nset -as terminal-overrides ',*:Setulc=\\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m'  # underscore colours - needs tmux-3.0\n\n"
  },
  {
    "path": ".config/tmux/statusline.conf",
    "content": "# vim: ft=tmux\nset -g mode-style \"fg=#eee8d5,bg=#073642\"\n\nset -g message-style \"fg=#eee8d5,bg=#073642\"\nset -g message-command-style \"fg=#eee8d5,bg=#073642\"\n\nset -g pane-border-style \"fg=#073642\"\nset -g pane-active-border-style \"fg=#eee8d5\"\n\nset -g status \"on\"\nset -g status-interval 1\nset -g status-justify \"left\"\n\nset -g status-style \"fg=#586e75,bg=#073642\"\n\nset -g status-bg \"#002b36\"\n\nset -g status-left-length \"100\"\nset -g status-right-length \"100\"\n\nset -g status-left-style NONE\nset -g status-right-style NONE\n\nset -g status-left \"#[fg=#073642,bg=#eee8d5,bold] #S:#I.#P #[fg=#eee8d5,bg=#93a1a1,nobold,nounderscore,noitalics]#[fg=#15161E,bg=#93a1a1,bold] #(whoami) #[fg=#93a1a1,bg=#002b36]\"\nset -g status-right \"#[fg=#586e75,bg=#002b36,nobold,nounderscore,noitalics]#[fg=#93a1a1,bg=#586e75]#[fg=#657b83,bg=#586e75,nobold,nounderscore,noitalics]#[fg=#93a1a1,bg=#657b83]#[fg=#93a1a1,bg=#657b83,nobold,nounderscore,noitalics]#[fg=#15161E,bg=#93a1a1,bold] #h \"\n\nsetw -g window-status-activity-style \"underscore,fg=#839496,bg=#002b36\"\nsetw -g window-status-separator \"\"\nsetw -g window-status-style \"NONE,fg=#839496,bg=#002b36\"\nsetw -g window-status-format '#[fg=#002b36,bg=#002b36]#[default] #I  #{b:pane_current_path} #[fg=#002b36,bg=#002b36,nobold,nounderscore,noitalics]'\nsetw -g window-status-current-format '#[fg=#002b36,bg=#eee8d5]#[fg=#b58900,bg=#eee8d5] #I #[fg=#eee8d5,bg=#b58900] #{b:pane_current_path} #[fg=#b58900,bg=#002b36,nobold]'\n"
  },
  {
    "path": ".config/tmux/theme.conf",
    "content": "#### COLOUR (Solarized 256)\n\n# default statusbar colors\nset-option -g status-style bg=colour235,fg=colour136,default\n\n# default window title colors\nset-window-option -g window-status-style fg=colour244,bg=colour234,dim\n\n# active window title colors\nset-window-option -g window-status-current-style fg=colour166,bg=default,bright\n\n# pane border\nset-option -g pane-border-style fg=colour235 #base02\nset-option -g pane-active-border-style fg=colour136,bg=colour235\n\n# message text\nset-option -g message-style bg=colour235,fg=colour166\n\n# pane number display\nset-option -g display-panes-active-colour colour33 #blue\nset-option -g display-panes-colour colour166 #orange\n\n# clock\nset-window-option -g clock-mode-colour colour64 #green\n"
  },
  {
    "path": ".config/tmux/tmux.conf",
    "content": "#set -g default-terminal \"tmux-256color\"\nset -g default-terminal \"xterm-256color\"\n#set -ga terminal-overrides \",*256col*:Tc\"\nset -ga terminal-overrides \",xterm-256color:Tc\"\n# action key\nunbind C-b\nset-option -g prefix C-t\nset-option -g repeat-time 0\nset-option -g focus-events on\n\n#### Key bindings\n\nset-window-option -g mode-keys vi\n\n#bind t send-key C-t\n# Reload settings\nbind r source-file ~/.config/tmux/tmux.conf \\; display \"Reloaded!\"\n# Open current directory\nbind o run-shell \"open '#{pane_current_path}'\"\nbind -r e kill-pane -a\n\n# Moving window\nbind-key -n C-S-Left swap-window -t -1 \\; previous-window\nbind-key -n C-S-Right swap-window -t +1 \\; next-window\n\n#### basic settings\n\nset-option -g status-justify \"left\"\n#set-option utf8-default on\n#set-option -g mouse-select-pane\nset-window-option -g mode-keys vi\n#set-window-option -g utf8 on\n# look'n feel\nset-option -g status-fg cyan\nset-option -g status-bg black\nset -g pane-active-border-style fg=colour166,bg=default\nset -g window-style fg=colour10,bg=default\nset -g window-active-style fg=colour12,bg=default\nset-option -g history-limit 64096\n\nset -sg escape-time 10\n\n\n# allow the title bar to adapt to whatever host you connect to\nset -g set-titles on\nset -g set-titles-string \"#T\"\n\n# import\nif-shell \"uname -s | grep -q Darwin\" \"source ~/.config/tmux/macos.conf\"\n\nsource ~/.config/tmux/theme.conf\nsource ~/.config/tmux/statusline.conf\nsource ~/.config/tmux/utility.conf\n\nset -g @plugin 'tmux-plugins/tpm'\nset -g @plugin 'tmux-plugins/tmux-pain-control'\nrun '~/.config/tmux/plugins/tpm/tpm'\n"
  },
  {
    "path": ".config/tmux/utility.conf",
    "content": "# Display lazygit\nbind -r g display-popup -d '#{pane_current_path}' -w80% -h80% -E lazygit\n\n# Run Claude Code in a separate session\nbind -r y run-shell '\\\n  SESSION=\"claude-$(echo #{pane_current_path} | md5sum | cut -c1-8)\"; \\\n  tmux has-session -t \"$SESSION\" 2>/dev/null || \\\n  tmux new-session -d -s \"$SESSION\" -c \"#{pane_current_path}\" \"claude\"; \\\n  tmux display-popup -w80% -h80% -E \"tmux attach-session -t $SESSION\"'\n"
  },
  {
    "path": ".czrc",
    "content": "{ \"path\": \"cz-git\" }\n"
  },
  {
    "path": ".gitconfig",
    "content": "[core]\n\texcludesfile = ~/.gitignore\n\teditor = nvim\n\tignorecase = false\n[push]\n  default = simple\n[color]\n  status = auto\n  diff = auto\n  branch = auto\n  interactive = auto\n  grep = auto\n  ui = auto\n[alias]\n  a = \"!git status --short | peco | awk '{print $2}' | xargs git add\"\n  d = diff\n  co = checkout\n  ci = commit\n  ca = commit -a\n  ps = \"!git push origin $(git rev-parse --abbrev-ref HEAD)\"\n  pl = \"!git pull origin $(git rev-parse --abbrev-ref HEAD)\"\n  st = status\n  br = branch\n  ba = branch -a\n  bm = branch --merged\n  bn = branch --no-merged\n  df = \"!git hist | peco | awk '{print $2}' | xargs -I {} git diff {}^ {}\"\n  hist = log --pretty=format:\\\"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)\\\" --graph --date=relative --decorate --all\n  llog = log --graph --name-status --pretty=format:\\\"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset\\\" --date=relative\n  open = \"!hub browse\"\n  type = cat-file -t\n  dump = cat-file -p\n  find = \"!f() { git log --pretty=format:\\\"%h %cd [%cn] %s%d\\\" --date=relative -S'pretty' -S\\\"$@\\\" | peco | awk '{print $1}' | xargs -I {} git diff {}^ {}; }; f\"\n  # edit conflicted file on merge\n  edit-unmerged = \"!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; vim `f`\"\n  # add conflicted file on merge\n  add-unmerged = \"!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; git add `f`\"\n\n[hub]\n  protocol = https\n[github]\n\tuser = craftzdog\n[diff]\n  tool = nvimdiff\n[difftool \"nvimdiff\"]\n\tcmd = nvim -d \\\"$LOCAL\\\" \\\"$REMOTE\\\"\n\tpath = \n[mergetool \"nvimdiff\"]\n\tcmd = nvim -d \\\"$LOCAL\\\" \\\"$REMOTE\\\" -ancestor \\\"$BASE\\\" -merge \\\"$MERGED\\\"\n\ttrustExitCode = true\n[filter \"lfs\"]\n\tclean = git-lfs clean -- %f\n\tsmudge = git-lfs smudge -- %f\n\trequired = true\n\tprocess = git-lfs filter-process\n[ghq]\n  root = ~/.ghq\n"
  },
  {
    "path": ".github/workflows/claude-code-review.yml",
    "content": "name: Claude Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize]\n    # Optional: Only run on specific file changes\n    # paths:\n    #   - \"src/**/*.ts\"\n    #   - \"src/**/*.tsx\"\n    #   - \"src/**/*.js\"\n    #   - \"src/**/*.jsx\"\n\njobs:\n  claude-review:\n    # Optional: Filter by PR author\n    # if: |\n    #   github.event.pull_request.user.login == 'external-contributor' ||\n    #   github.event.pull_request.user.login == 'new-developer' ||\n    #   github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'\n    \n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: read\n      issues: read\n      id-token: write\n    \n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Run Claude Code Review\n        id: claude-review\n        uses: anthropics/claude-code-action@beta\n        with:\n          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n\n          # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)\n          # model: \"claude-opus-4-20250514\"\n          \n          # Direct prompt for automated review (no @claude mention needed)\n          direct_prompt: |\n            Please review this pull request and provide feedback on:\n            - Code quality and best practices\n            - Potential bugs or issues\n            - Performance considerations\n            - Security concerns\n            - Test coverage\n            \n            Be constructive and helpful in your feedback.\n\n          # Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR\n          # use_sticky_comment: true\n          \n          # Optional: Customize review based on file types\n          # direct_prompt: |\n          #   Review this PR focusing on:\n          #   - For TypeScript files: Type safety and proper interface usage\n          #   - For API endpoints: Security, input validation, and error handling\n          #   - For React components: Performance, accessibility, and best practices\n          #   - For tests: Coverage, edge cases, and test quality\n          \n          # Optional: Different prompts for different authors\n          # direct_prompt: |\n          #   ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' && \n          #   'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||\n          #   'Please provide a thorough code review focusing on our coding standards and best practices.' }}\n          \n          # Optional: Add specific tools for running tests or linting\n          # allowed_tools: \"Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)\"\n          \n          # Optional: Skip review for certain conditions\n          # if: |\n          #   !contains(github.event.pull_request.title, '[skip-review]') &&\n          #   !contains(github.event.pull_request.title, '[WIP]')\n\n"
  },
  {
    "path": ".github/workflows/claude.yml",
    "content": "name: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  pull_request_review_comment:\n    types: [created]\n  issues:\n    types: [opened, assigned]\n  pull_request_review:\n    types: [submitted]\n\njobs:\n  claude:\n    if: |\n      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||\n      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||\n      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||\n      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: read\n      issues: read\n      id-token: write\n      actions: read # Required for Claude to read CI results on PRs\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Run Claude Code\n        id: claude\n        uses: anthropics/claude-code-action@beta\n        with:\n          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n\n          # This is an optional setting that allows Claude to read CI results on PRs\n          additional_permissions: |\n            actions: read\n          \n          # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)\n          # model: \"claude-opus-4-20250514\"\n          \n          # Optional: Customize the trigger phrase (default: @claude)\n          # trigger_phrase: \"/claude\"\n          \n          # Optional: Trigger when specific user is assigned to an issue\n          # assignee_trigger: \"claude-bot\"\n          \n          # Optional: Allow Claude to run specific commands\n          # allowed_tools: \"Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)\"\n          \n          # Optional: Add custom instructions for Claude to customize its behavior for your project\n          # custom_instructions: |\n          #   Follow our coding standards\n          #   Ensure all new code has tests\n          #   Use TypeScript for new files\n          \n          # Optional: Custom environment variables for Claude\n          # claude_env: |\n          #   NODE_ENV: test\n\n"
  },
  {
    "path": ".gitignore",
    "content": "*.o\n\\#*#\n*#\n.#*\n.*~\n*~\n.DS_Store\n*.sw[po]\ntags\nTAGS\n.svn\n*.dSYM\n*.log\n*.dvi\n*.aux\n*.elc\n.zshrc.local\n.python-version\nsamples\n.netrwhist\n.bundle\n/vendor/bundle\nGemfile.lock\nnode_modules\nbower_components\nfishd.*\n\n# Vim\nSession.vim\n.vim/bundle/\n.vimrc_sample\n.vim/ftdetect/Dockerfile.vim\n.vim/syntax/Dockerfile.vim\n.vim/snippets/\n.luarc.json\n\n# Xcode\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n*.xcworkspace/xcshareddata\n\n# CocoaPods\nPods/\n\n# Fish local config\n.config/fish/config-local.fish\n.config/fish/fish_variables.x86_64\n\n# Karabiner\n.config/karabiner/automatic_backups\n\n# Tmux\n.config/tmux/plugins\n\n# Lazygit\n.config/lazygit/state.yml\n.config/nvim/lazy-lock.json\n.config/nvim/lazyvim.json\n\n# Zed\n.config/zed/.tmp*\n.config/zed/embeddings\n.config/zed/prompts\n\n# Claude Code\n.claude/*.local.json\n"
  },
  {
    "path": ".scripts/ide",
    "content": "#!/bin/bash\ntmux split-window -h -l 20%\ntmux select-pane -L\ntmux split-window -v -l 30%\ntmux split-window -h -l 66%\ntmux split-window -h -l 50%\n"
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "content": "<!--\nHi. Thanks for checking out my dotfiles.\nSince it's just my personal configurations, I basically don't provide any user support or answer questions.\nIf you've got any issues with getting it to work, please try:\n - Google with the error message\n - Ask it on Stackoverflow\n - Report it to the plugin author\n-->\n"
  },
  {
    "path": "README.md",
    "content": "![fish screenshot](./images/screenshot-1.png)\n\n![nvim screenshot](./images/screenshot-neovim.png)\n\n# Takuya's dotfiles\n\n**Warning**: Don’t blindly use my settings unless you know what that entails. Use at your own risk!\n\n### Looking for a Markdown note-taking app?\n\nCheck out my app called [Inkdrop](https://www.inkdrop.app/)\n\n[![Inkdrop](./images/screenshot-inkdrop.png)](https://www.inkdrop.app/)\n\n## Contents\n\n- vim (Neovim) config\n- tmux config\n- git config\n- fish config\n- PowerShell config\n\n## Neovim setup\n\n### Requirements\n\n- Neovim >= **0.9.0** (needs to be built with **LuaJIT**)\n- Git >= **2.19.0** (for partial clones support)\n- [LazyVim](https://www.lazyvim.org/)\n- a [Nerd Font](https://www.nerdfonts.com/)(v3.0 or greater) **_(optional, but needed to display some icons)_**\n- [lazygit](https://github.com/jesseduffield/lazygit) **_(optional)_**\n- a **C** compiler for `nvim-treesitter`. See [here](https://github.com/nvim-treesitter/nvim-treesitter#requirements)\n- for [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) **_(optional)_**\n  - **live grep**: [ripgrep](https://github.com/BurntSushi/ripgrep)\n  - **find files**: [fd](https://github.com/sharkdp/fd)\n- a terminal that support true color and *undercurl*:\n  - [kitty](https://github.com/kovidgoyal/kitty) **_(Linux & Macos)_**\n  - [wezterm](https://github.com/wez/wezterm) **_(Linux, Macos & Windows)_**\n  - [alacritty](https://github.com/alacritty/alacritty) **_(Linux, Macos & Windows)_**\n  - [iterm2](https://iterm2.com/) **_(Macos)_**\n- [Solarized Osaka](https://github.com/craftzdog/solarized-osaka.nvim)\n\n## Shell setup (macOS & Linux)\n\n- [Fish shell](https://fishshell.com/)\n- [Fisher](https://github.com/jorgebucaran/fisher) - Plugin manager\n- [Tide](https://github.com/IlanCosman/tide) - Shell theme\n- [Nerd fonts](https://github.com/ryanoasis/nerd-fonts) - Patched fonts for development-use. I use [PlemolJP](https://github.com/yuru7/PlemolJP) and BlexMono.\n- [z for fish](https://github.com/jethrokuan/z) - Directory jumping\n- [Eza](https://github.com/eza-community/eza) - `ls` replacement\n- [ghq](https://github.com/x-motemen/ghq) - Local Git repository organizer\n- [fzf](https://github.com/PatrickF1/fzf.fish) - Interactive filtering\n\n## PowerShell setup (Windows)\n\n- [Scoop](https://scoop.sh/) - A command-line installer\n- [Git for Windows](https://gitforwindows.org/)\n- [Oh My Posh](https://ohmyposh.dev/) - Prompt theme engine\n- [Terminal Icons](https://github.com/devblackops/Terminal-Icons) - Folder and file icons\n- [PSReadLine](https://docs.microsoft.com/en-us/powershell/module/psreadline/) - Cmdlets for customizing the editing environment, used for autocompletion\n- [z](https://www.powershellgallery.com/packages/z) - Directory jumper\n- [PSFzf](https://github.com/kelleyma49/PSFzf) - Fuzzy finder\n\n## How to use\n\nWatch my video tutorials:\n\n1. [My Neovim setup](https://www.youtube.com/watch?v=fFHlfbKVi30)\n   - [Article version](https://www.devas.life/effective-neovim-setup-for-web-development-towards-2024/)\n1. [My dev workflow using tmux and vim](https://www.youtube.com/watch?v=sSOfr2MtRU8&list=PLxQA0uNgQDCICMRwlOzWAZBPL05XBC_br&index=10)\n1. [A productive command-line Git workflow for indie app developers](https://www.youtube.com/watch?v=qKpY7t5m35k&list=PLxQA0uNgQDCICMRwlOzWAZBPL05XBC_br&index=4)\n   - [Blogpost](https://dev.to/craftzdog/a-productive-command-line-git-workflow-for-indie-app-developers-k7d)\n1. [My Fish shell workflow for coding](https://www.youtube.com/watch?v=KKxhf50FIPI)\n1. [How to set up PowerShell prompt with Oh My Posh on Windows 11](https://www.youtube.com/watch?v=5-aK2_WwrmM)\n\n## About me\n\n- [@inkdrop_app on X](https://twitter.com/inkdrop_app)\n- [Newsletters](https://www.devas.life/)\n- [My product: Inkdrop - Markdown note-taking app](https://www.inkdrop.app/)\n"
  }
]