├── .chezmoiroot ├── .editorconfig ├── .luarc.json ├── .stylua.toml ├── Brewfile ├── README.md ├── home ├── dot_config │ ├── git │ │ ├── config │ │ └── ignore │ ├── kitty │ │ ├── dark-theme.auto.conf │ │ ├── kitty.conf │ │ ├── light-theme.auto.conf │ │ └── no-preference-theme.auto.conf │ ├── nvim │ │ ├── after │ │ │ ├── ftplugin │ │ │ │ ├── Avante.vim │ │ │ │ ├── codecompanion.vim │ │ │ │ └── markdown.vim │ │ │ └── plugin │ │ │ │ ├── keys.lua │ │ │ │ ├── keys.vim │ │ │ │ └── opt.lua │ │ ├── ftplugin │ │ │ └── help.lua │ │ ├── init.lua │ │ ├── lazy-lock.json │ │ ├── lua │ │ │ └── mcchrish │ │ │ │ ├── plugins.lua │ │ │ │ ├── plugins │ │ │ │ ├── ai.lua │ │ │ │ ├── color.lua │ │ │ │ ├── completion.lua │ │ │ │ ├── fzf.lua │ │ │ │ ├── git.lua │ │ │ │ ├── lsp.lua │ │ │ │ ├── treesitter.lua │ │ │ │ └── ui.lua │ │ │ │ └── statusline.lua │ │ └── plugin │ │ │ └── opt.lua │ ├── rg │ │ └── config │ ├── tlrc │ │ └── config.toml │ ├── tmux │ │ ├── tmux.conf │ │ └── tmux.iterm.conf │ ├── wezterm │ │ └── wezterm.lua │ ├── zed │ │ └── settings.json │ └── zsh │ │ ├── aliases.zsh │ │ ├── completions.zsh │ │ ├── dot_zprofile │ │ ├── dot_zshrc │ │ ├── functions │ │ ├── fzf.zsh │ │ └── general.zsh │ │ ├── keys.zsh │ │ └── shelloptions.zsh ├── dot_vim │ └── vimrc ├── dot_zshenv ├── private_Library │ ├── LaunchAgents │ │ └── environment.plist.tmpl │ ├── private_Application Support │ │ └── com.mitchellh.ghostty │ │ │ └── config │ └── private_Preferences │ │ ├── display-switch.ini.tmpl │ │ └── private_com.googlecode.iterm2.plist ├── private_dot_cache │ ├── node │ │ └── empty_dot_gitkeep │ ├── private_zsh │ │ └── empty_dot_gitkeep │ └── psql │ │ └── empty_dot_gitkeep └── private_dot_local │ └── private_share │ └── gnupg │ ├── gpg-agent.conf │ └── gpg.conf ├── install.sh ├── selene.toml └── vim.yml /.chezmoiroot: -------------------------------------------------------------------------------- 1 | home 2 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | 6 | [*.lua] 7 | indent_style = tab 8 | indent_size = 4 9 | -------------------------------------------------------------------------------- /.luarc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json", 3 | "Lua.workspace.checkThirdParty": false 4 | } -------------------------------------------------------------------------------- /.stylua.toml: -------------------------------------------------------------------------------- 1 | call_parentheses = "None" 2 | -------------------------------------------------------------------------------- /Brewfile: -------------------------------------------------------------------------------- 1 | tap "homebrew/bundle" 2 | 3 | brew "chezmoi" 4 | brew "fd" 5 | brew "fzf" 6 | brew "gh" 7 | brew "hyperfine" 8 | brew "neovim" 9 | brew "node@20", link: true 10 | brew "pinentry-mac" 11 | brew "pure" 12 | brew "ripgrep" 13 | brew "selene" 14 | brew "stylua" 15 | brew "tere" 16 | brew "tlrc" 17 | brew "tokei" 18 | brew "zoxide" 19 | brew "zsh-history-substring-search" 20 | 21 | cask "calibre" 22 | cask "darktable" 23 | cask "firefox" 24 | cask "font-courier-prime" 25 | cask "font-iosevka-curly-slab" 26 | cask "font-iosevka-etoile" 27 | cask "font-symbols-only-nerd-font" 28 | cask "google-chrome" 29 | cask "handbrake" 30 | cask "iterm2" 31 | cask "kitty" 32 | cask "lunar" 33 | cask "maccy" 34 | cask "mullvadvpn" 35 | cask "obsidian" 36 | cask "qbittorrent" 37 | cask "qmk-toolbox" 38 | cask "signal" 39 | cask "steam" 40 | cask "vial" 41 | cask "vlc" 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dotfiles 2 | 3 | Managed by Chezmoi. Primarily configured for macOS system. 4 | 5 | ## Install 6 | 7 | ```shell 8 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/mcchrish/dotfiles/master/install.sh)" 9 | ``` 10 | 11 | ## Notes 12 | 13 | - XDG Base Directories 14 | - [Homebrew](Brewfile) 15 | - [Chezmoi](install.sh) 16 | - [Git](git/Library/Preferences/git) 17 | - [Neovim](vim/Library/Preferences/nvim) 18 | - [Kitty](kitty/.config/kitty) 19 | - [Zsh](zsh) 20 | 21 | Personal configuration. Won't likely work for you but feel free to check some 22 | snippets you can steal. 23 | -------------------------------------------------------------------------------- /home/dot_config/git/config: -------------------------------------------------------------------------------- 1 | [user] 2 | name = Michael Chris Lopez 3 | email = hello@michaelchris.space 4 | signingkey = 9ABC0DCACC50317D 5 | [filter "lfs"] 6 | clean = git-lfs clean -- %f 7 | smudge = git-lfs smudge -- %f 8 | required = true 9 | process = git-lfs filter-process 10 | 11 | [credential] 12 | helper = osxkeychain 13 | 14 | [core] 15 | editor = nvim +startinsert 16 | autocrlf = false 17 | pager = less 18 | ignorecase = false 19 | 20 | [pull] 21 | rebase = true 22 | 23 | [push] 24 | default = upstream 25 | autoSetupRemote = true 26 | 27 | [merge] 28 | tool = vimdiff 29 | 30 | [rebase] 31 | autosquash = true 32 | autostash = true 33 | 34 | [mergetool] 35 | prompt = false 36 | path = nvim 37 | 38 | [diff] 39 | tool = vimdiff 40 | algorithm = patience 41 | 42 | [pager] 43 | diff = less 44 | show = less 45 | 46 | [color] 47 | ui = always 48 | diff = auto 49 | branch = auto 50 | interactive = auto 51 | status = auto 52 | 53 | [color "diff"] 54 | meta = yellow 55 | frag = magenta bold 56 | func = white bold 57 | commit = blue bold 58 | whitespace = brightred reverse 59 | 60 | [color "status"] 61 | untracked = magenta 62 | updated = green 63 | changed = brightgreen 64 | 65 | [alias] 66 | edit = "!nvim `git ls-files -m`" 67 | # the acronym stands for "subtree add" 68 | sba = "!f() { git subtree add --prefix $1 $2 master --squash; }; f" 69 | # the acronym stands for "subtree update" 70 | sbu = "!f() { git subtree pull --prefix $1 $2 master --squash; }; f" 71 | 72 | [commit] 73 | gpgsign = true 74 | [tag] 75 | gpgSign = true 76 | -------------------------------------------------------------------------------- /home/dot_config/git/ignore: -------------------------------------------------------------------------------- 1 | ### macOS ### 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | 6 | # Icon must end with two \r 7 | Icon 8 | 9 | # Thumbnails 10 | ._* 11 | 12 | # Files that might appear in the root of a volume 13 | .DocumentRevisions-V100 14 | .fseventsd 15 | .Spotlight-V100 16 | .TemporaryItems 17 | .Trashes 18 | .VolumeIcon.icns 19 | 20 | # Directories potentially created on remote AFP share 21 | .AppleDB 22 | .AppleDesktop 23 | Network Trash Folder 24 | Temporary Items 25 | .apdisk 26 | 27 | ### Vim ### 28 | # Swap 29 | [._]*.s[a-v][a-z] 30 | [._]*.sw[a-p] 31 | [._]s[a-rt-v][a-z] 32 | [._]ss[a-gi-z] 33 | [._]sw[a-p] 34 | 35 | # Session 36 | Session.vim 37 | 38 | # Temporary 39 | .netrwhist 40 | *~ 41 | # Auto-generated tag files 42 | tags 43 | # Persistent undo 44 | [._]*.un~ 45 | 46 | ### JavaScript ### 47 | # Node 48 | npm-debug.log* 49 | 50 | # Yarn 51 | yarn-debug.log* 52 | yarn-error.log* 53 | 54 | # tern 55 | .tern-port 56 | 57 | ### General ### 58 | 59 | # Tmuxp 60 | .tmuxp.yaml 61 | 62 | # Ag and Rg 63 | .ignore 64 | -------------------------------------------------------------------------------- /home/dot_config/kitty/dark-theme.auto.conf: -------------------------------------------------------------------------------- 1 | # This file is auto-generated by shipwright.nvim 2 | # vim:ft=kitty 3 | ## name: zenbones_dark 4 | ## author: Michael Chris Lopez 5 | ## license: MIT 6 | ## upstream: https://github.com/mcchrish/zenbones.nvim/raw/main/extras/kitty/zenbones_dark.conf 7 | ## blurb: A contrast-based colorscheme. 8 | foreground #B4BDC3 9 | background #1C1917 10 | selection_foreground #B4BDC3 11 | selection_background #3D4042 12 | # Cursor colors 13 | cursor #C4CACF 14 | cursor_text_color #1C1917 15 | # URL underline color when hovering with mouse 16 | # kitty window border colors 17 | # OS Window titlebar colors 18 | # Tab bar colors 19 | active_tab_foreground #B4BDC3 20 | active_tab_background #65435E 21 | inactive_tab_foreground #B4BDC3 22 | inactive_tab_background #352F2D 23 | # Colors for marks (marked text in the terminal) 24 | # The basic 16 colors 25 | # black 26 | color0 #1C1917 27 | color8 #403833 28 | # red 29 | color1 #DE6E7C 30 | color9 #E8838F 31 | # green 32 | color2 #819B69 33 | color10 #8BAE68 34 | # yellow 35 | color3 #B77E64 36 | color11 #D68C67 37 | # blue 38 | color4 #6099C0 39 | color12 #61ABDA 40 | # magenta 41 | color5 #B279A7 42 | color13 #CF86C1 43 | # cyan 44 | color6 #66A5AD 45 | color14 #65B8C1 46 | # white 47 | color7 #B4BDC3 48 | color15 #888F94 49 | # You can set the remaining 240 colors as color16 to color255. 50 | -------------------------------------------------------------------------------- /home/dot_config/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | font_family Zenbones Mono 2 | font_size 13.0 3 | text_composition_strategy 1.5 30 4 | modify_font cell_height 2px 5 | 6 | font_features Zenbones-Mono +TXTR +cv07=10 +cv10=13 7 | font_features Zenbones-Mono-Semibold +TXTR +cv07=10 +cv10=13 8 | font_features Zenbones-Mono-Italic +TXTR +cv07=10 +cv10=13 9 | font_features Zenbones-Mono-Semibold-Italic +TXTR +cv07=10 +cv10=13 10 | 11 | font_features Zenbones-Brainy +TXTR +cv07=2 +cv10=13 12 | font_features Zenbones-Brainy-Semibold +TXTR +cv07=2 +cv10=13 13 | font_features Zenbones-Brainy-Italic +TXTR +cv07=2 +cv10=13 14 | font_features Zenbones-Brainy-Semibold-Italic +TXTR +cv07=2 +cv10=13 15 | 16 | font_features Zenbones-Proto +TXTR +cv03=1 +cv07=12 +cv10=13 +cv41=1 17 | font_features Zenbones-Proto-Semibold +TXTR +cv03=1 +cv07=12 +cv10=13 +cv41=1 18 | font_features Zenbones-Proto-Italic +TXTR +cv03=1 +cv07=12 +cv10=13 19 | font_features Zenbones-Proto-Semibold-Italic +TXTR +cv03=1 +cv07=12 +cv10=13 20 | 21 | cursor_trail 1 22 | 23 | remember_window_position yes 24 | remember_window_size no 25 | initial_window_width 160c 26 | initial_window_height 48c 27 | tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{sup.index} {title}" 28 | tab_title_max_length 24 29 | tab_bar_min_tabs 1 30 | tab_bar_style powerline 31 | tab_powerline_style round 32 | active_tab_font_style bold 33 | # tab_bar_edge top 34 | # macos_titlebar_color #d6cdc9 35 | placement_strategy top-left 36 | 37 | symbol_map U+e000-U+e00a,U+ea60-U+ebeb,U+e0a0-U+e0c8,U+e0ca,U+e0cc-U+e0d4,U+e200-U+e2a9,U+e300-U+e3e3,U+e5fa-U+e6b1,U+e700-U+e7c5,U+f000-U+f2e0,U+f300-U+f372,U+f400-U+f532,U+f0001-U+f1af0 Symbols Nerd Font Mono 38 | 39 | map cmd+t launch --cwd=current --type=tab 40 | map cmd+1 goto_tab 1 41 | map cmd+2 goto_tab 2 42 | map cmd+3 goto_tab 3 43 | map cmd+4 goto_tab 4 44 | map cmd+5 goto_tab 5 45 | map cmd+6 goto_tab 6 46 | map cmd+7 goto_tab 7 47 | map cmd+8 goto_tab 8 48 | map cmd+9 goto_tab 9 49 | map alt+h neighboring_window left 50 | map alt+j neighboring_window down 51 | map alt+k neighboring_window up 52 | map alt+l neighboring_window right 53 | macos_option_as_alt yes 54 | -------------------------------------------------------------------------------- /home/dot_config/kitty/light-theme.auto.conf: -------------------------------------------------------------------------------- 1 | # This file is auto-generated by shipwright.nvim 2 | # vim:ft=kitty 3 | ## name: zenbones_light 4 | ## author: Michael Chris Lopez 5 | ## license: MIT 6 | ## upstream: https://github.com/mcchrish/zenbones.nvim/raw/main/extras/kitty/zenbones_light.conf 7 | ## blurb: A contrast-based colorscheme. 8 | foreground #2C363C 9 | background #F0EDEC 10 | selection_foreground #2C363C 11 | selection_background #CBD9E3 12 | # Cursor colors 13 | cursor #2C363C 14 | cursor_text_color #F0EDEC 15 | # URL underline color when hovering with mouse 16 | # kitty window border colors 17 | # OS Window titlebar colors 18 | # Tab bar colors 19 | active_tab_foreground #2C363C 20 | active_tab_background #DEB9D6 21 | inactive_tab_foreground #2C363C 22 | inactive_tab_background #D6CDC9 23 | # Colors for marks (marked text in the terminal) 24 | # The basic 16 colors 25 | # black 26 | color0 #F0EDEC 27 | color8 #CFC1BA 28 | # red 29 | color1 #A8334C 30 | color9 #94253E 31 | # green 32 | color2 #4F6C31 33 | color10 #3F5A22 34 | # yellow 35 | color3 #944927 36 | color11 #803D1C 37 | # blue 38 | color4 #286486 39 | color12 #1D5573 40 | # magenta 41 | color5 #88507D 42 | color13 #7B3B70 43 | # cyan 44 | color6 #3B8992 45 | color14 #2B747C 46 | # white 47 | color7 #2C363C 48 | color15 #4F5E68 49 | # You can set the remaining 240 colors as color16 to color255. 50 | -------------------------------------------------------------------------------- /home/dot_config/kitty/no-preference-theme.auto.conf: -------------------------------------------------------------------------------- 1 | # This file is auto-generated by shipwright.nvim 2 | # vim:ft=kitty 3 | ## name: zenbones_light 4 | ## author: Michael Chris Lopez 5 | ## license: MIT 6 | ## upstream: https://github.com/mcchrish/zenbones.nvim/raw/main/extras/kitty/zenbones_light.conf 7 | ## blurb: A contrast-based colorscheme. 8 | foreground #2C363C 9 | background #F0EDEC 10 | selection_foreground #2C363C 11 | selection_background #CBD9E3 12 | # Cursor colors 13 | cursor #2C363C 14 | cursor_text_color #F0EDEC 15 | # URL underline color when hovering with mouse 16 | # kitty window border colors 17 | # OS Window titlebar colors 18 | # Tab bar colors 19 | active_tab_foreground #2C363C 20 | active_tab_background #DEB9D6 21 | inactive_tab_foreground #2C363C 22 | inactive_tab_background #D6CDC9 23 | # Colors for marks (marked text in the terminal) 24 | # The basic 16 colors 25 | # black 26 | color0 #F0EDEC 27 | color8 #CFC1BA 28 | # red 29 | color1 #A8334C 30 | color9 #94253E 31 | # green 32 | color2 #4F6C31 33 | color10 #3F5A22 34 | # yellow 35 | color3 #944927 36 | color11 #803D1C 37 | # blue 38 | color4 #286486 39 | color12 #1D5573 40 | # magenta 41 | color5 #88507D 42 | color13 #7B3B70 43 | # cyan 44 | color6 #3B8992 45 | color14 #2B747C 46 | # white 47 | color7 #2C363C 48 | color15 #4F5E68 49 | # You can set the remaining 240 colors as color16 to color255. 50 | -------------------------------------------------------------------------------- /home/dot_config/nvim/after/ftplugin/Avante.vim: -------------------------------------------------------------------------------- 1 | setlocal showbreak=NONE 2 | " setlocal nobreakindent 3 | -------------------------------------------------------------------------------- /home/dot_config/nvim/after/ftplugin/codecompanion.vim: -------------------------------------------------------------------------------- 1 | setlocal complete+=kspell 2 | setlocal showbreak=NONE 3 | -------------------------------------------------------------------------------- /home/dot_config/nvim/after/ftplugin/markdown.vim: -------------------------------------------------------------------------------- 1 | " setlocal spell 2 | setlocal complete+=kspell 3 | setlocal conceallevel=2 " obsidian.nvim 4 | setlocal showbreak=NONE 5 | -------------------------------------------------------------------------------- /home/dot_config/nvim/after/plugin/keys.lua: -------------------------------------------------------------------------------- 1 | vim.keymap.set("n", "", function() 2 | vim.cmd.nohlsearch() 3 | vim.cmd.checktime() 4 | vim.cmd.redraw() 5 | vim.notify("Refreshed!", vim.log.INFO) 6 | end, { desc = "Refresh" }) 7 | -------------------------------------------------------------------------------- /home/dot_config/nvim/after/plugin/keys.vim: -------------------------------------------------------------------------------- 1 | " Move vertically by visual line 2 | nnoremap j gj 3 | nnoremap k gk 4 | vnoremap j gj 5 | vnoremap k gk 6 | nnoremap gj j 7 | nnoremap gk k 8 | 9 | " Move visual block 10 | vnoremap J :m '>+1gv=gv 11 | vnoremap K :m '<-2gv=gv 12 | 13 | " Reselect indent in visual mode 14 | vnoremap < >gv 16 | 17 | " Remap esc 18 | " inoremap jk 19 | 20 | " Faster save 21 | nnoremap ww silent update 22 | 23 | " Delete without overwriting default register 24 | nnoremap vd "_d 25 | xnoremap vd "_d 26 | nnoremap x "_x 27 | xnoremap x "_x 28 | nnoremap vD "_D 29 | 30 | " Repeat substitution with flag 31 | nnoremap & && 32 | vnoremap & && 33 | 34 | " Repeat macro over all selected lines 35 | vnoremap @ :norm@ 36 | 37 | nnoremap g 38 | 39 | " Select just insert text 40 | nnoremap gV `[V`] 41 | 42 | " Window navigation 43 | nnoremap h 44 | nnoremap j 45 | nnoremap k 46 | nnoremap l 47 | -------------------------------------------------------------------------------- /home/dot_config/nvim/after/plugin/opt.lua: -------------------------------------------------------------------------------- 1 | -- :h lua-highlight 2 | vim.api.nvim_create_autocmd("TextYankPost", { 3 | desc = "Highlight when yanking (copying) text", 4 | group = vim.api.nvim_create_augroup("highlight-yank", { clear = true }), 5 | callback = function() 6 | vim.hl.on_yank() 7 | end, 8 | }) 9 | 10 | vim.api.nvim_create_user_command("Snitch", function(opts) 11 | local cmd = { "code" } 12 | if opts.args == "" then 13 | local fname = vim.api.nvim_buf_get_name(0) 14 | local cpos = vim.api.nvim_win_get_cursor(0) 15 | local fnamecol = fname .. ":" .. cpos[1] .. ":" .. (cpos[2] + 1) 16 | cmd = vim.list_extend(cmd, { "-g", fnamecol }) 17 | else 18 | cmd = vim.list_extend(cmd, opts.fargs) 19 | end 20 | vim.fn.jobstart(cmd) 21 | end, { nargs = "*", complete = "file" }) 22 | 23 | -- Common typo 24 | vim.cmd.cnoreabbrev "w; w" 25 | -------------------------------------------------------------------------------- /home/dot_config/nvim/ftplugin/help.lua: -------------------------------------------------------------------------------- 1 | vim.treesitter.start() 2 | -------------------------------------------------------------------------------- /home/dot_config/nvim/init.lua: -------------------------------------------------------------------------------- 1 | local g = vim.g 2 | g.mapleader = [[ ]] 3 | g.maplocalleader = [[,]] 4 | g.python3_host_prog = "/usr/bin/python3" 5 | 6 | g.did_install_default_menus = 1 7 | 8 | local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" 9 | if not vim.uv.fs_stat(lazypath) then 10 | vim.system { 11 | "git", 12 | "clone", 13 | "--filter=blob:none", 14 | "--single-branch", 15 | "https://github.com/folke/lazy.nvim.git", 16 | lazypath, 17 | } 18 | end 19 | vim.opt.rtp:prepend(lazypath) 20 | 21 | require("lazy").setup("mcchrish.plugins", { 22 | change_detection = { 23 | enabled = false, 24 | }, 25 | performance = { 26 | rtp = { 27 | disabled_plugins = { 28 | "matchit", 29 | "2html_plugin", 30 | "getscript", 31 | "getscriptPlugin", 32 | "gzip", 33 | "logiPat", 34 | "netrw", 35 | "netrwFileHandlers", 36 | "netrwPlugin", 37 | "netrwSettings", 38 | "perl_provider", 39 | "python_provider", 40 | "rrhelper", 41 | "ruby_provider", 42 | "tar", 43 | "tarPlugin", 44 | "tutor", 45 | "tutor_mode_plugin", 46 | "vimball", 47 | "vimballPlugin", 48 | "zip", 49 | "zipPlugin", 50 | }, 51 | }, 52 | }, 53 | }) 54 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "avante.nvim": { "branch": "main", "commit": "32665974ee6c8b468936e6b2f23fca5abfc014de" }, 3 | "blink.cmp": { "branch": "main", "commit": "dcda20d3aa345025699a920c45b0a0603551f41d" }, 4 | "codecompanion.nvim": { "branch": "main", "commit": "3639b11a3806f1c0c39b5b098d641d0f6b66f6ef" }, 5 | "conform.nvim": { "branch": "master", "commit": "db8a4a9edb217067b1d7a2e0362c74bfe9cc944d" }, 6 | "copilot-lualine": { "branch": "main", "commit": "dc4b8ed0f75bc2557b3158c526624bf04ad233ea" }, 7 | "copilot.lua": { "branch": "master", "commit": "30321e33b03cb924fdcd6a806a0dc6fa0b0eafb9" }, 8 | "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, 9 | "fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" }, 10 | "flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" }, 11 | "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, 12 | "fzf-lua": { "branch": "main", "commit": "33e704a07d1f79e55e26becf60992971266719fa" }, 13 | "gitsigns.nvim": { "branch": "main", "commit": "4c40357994f386e72be92a46f41fc1664c84c87d" }, 14 | "grug-far.nvim": { "branch": "main", "commit": "3a370c3a47b579f67a365c16d7bb740fa9d8eb7d" }, 15 | "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, 16 | "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, 17 | "lualine.nvim": { "branch": "master", "commit": "f4f791f67e70d378a754d02da068231d2352e5bc" }, 18 | "lush.nvim": { "branch": "main", "commit": "45a79ec4acb5af783a6a29673a999ce37f00497e" }, 19 | "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, 20 | "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, 21 | "mini.ai": { "branch": "main", "commit": "6e01c0e5a15554852546fac9853960780ac52ed4" }, 22 | "mini.align": { "branch": "main", "commit": "3bdf6f0b91b31db5300a7b04f53f296a7fb150c1" }, 23 | "mini.basics": { "branch": "main", "commit": "e8fbcf96e4e8262d452ddc851acea6c50449fa79" }, 24 | "mini.bracketed": { "branch": "main", "commit": "0ec65567ffde0ad4d94d794d55f3b627203b496a" }, 25 | "mini.comment": { "branch": "main", "commit": "264b8a63edd5a9a41d5361a1d52c13131c3c51a2" }, 26 | "mini.icons": { "branch": "main", "commit": "ec61af6e606fc89ee3b1d8f2f20166a3ca917a36" }, 27 | "mini.surround": { "branch": "main", "commit": "f90069c7441a5fb04c3de42eacf93e16b64dd3eb" }, 28 | "nui.nvim": { "branch": "main", "commit": "8d3bce9764e627b62b07424e0df77f680d47ffdb" }, 29 | "nvim-chainsaw": { "branch": "main", "commit": "06a93e4ce3235c6bd8e82baa052116543337a6d4" }, 30 | "nvim-genghis": { "branch": "main", "commit": "99ca8b9e6e6bae0899cc2902f4103204572ac8ee" }, 31 | "nvim-highlight-colors": { "branch": "main", "commit": "a770df5fbd98abbb0fc1a95d9a3f2bb1e51e3e2c" }, 32 | "nvim-lint": { "branch": "master", "commit": "6e9dd545a1af204c4022a8fcd99727ea41ffdcc8" }, 33 | "nvim-lspconfig": { "branch": "master", "commit": "fd26f8626c03b424f7140d454031d1dcb8d23513" }, 34 | "nvim-treesitter": { "branch": "master", "commit": "59573f96164ab3725a2358fe8ffe69e8291d9549" }, 35 | "nvim-treesitter-context": { "branch": "master", "commit": "198720b4016af04c9590f375d714d5bf8afecc1a" }, 36 | "nvim-treesitter-textobjects": { "branch": "master", "commit": "143856b1cee509a190cc8c17ddb0638002171235" }, 37 | "nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" }, 38 | "nvim-vtsls": { "branch": "main", "commit": "45c6dfea9f83a126e9bfc5dd63430562b3f8af16" }, 39 | "obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" }, 40 | "oil.nvim": { "branch": "master", "commit": "548587d68b55e632d8a69c92cefd981f360634fa" }, 41 | "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, 42 | "precognition.nvim": { "branch": "main", "commit": "4223fb903cbafc3bd8a87a314dac375bbd1c01ce" }, 43 | "quicker.nvim": { "branch": "master", "commit": "1798be71cdcb15fb84fa8054148a56e17fd391dc" }, 44 | "render-markdown.nvim": { "branch": "main", "commit": "81374ffd26f9a9d5f44274a9e7e60547b5fd106f" }, 45 | "rose-pine": { "branch": "main", "commit": "7718965bdd1526b233f082da17e88b8bde7a7e6e" }, 46 | "shipwright.nvim": { "branch": "master", "commit": "e596ab48328c31873f4f4d2e070243bf9de16ff3" }, 47 | "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, 48 | "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, 49 | "tsc.nvim": { "branch": "main", "commit": "60c9b3e9610e24e147a928e30dd148ed9bb9f247" }, 50 | "undotree": { "branch": "master", "commit": "76c4e32d8f1aa493bb68d4a3fcd3c700395c303c" }, 51 | "vim-flog": { "branch": "master", "commit": "77c86cb5db8960d224f2a866120893e61d62f5e8" }, 52 | "vim-fugitive": { "branch": "master", "commit": "4a745ea72fa93bb15dd077109afbb3d1809383f2" }, 53 | "vim-matchup": { "branch": "master", "commit": "aca23ce53ebfe34e02c4fe07e29e9133a2026481" }, 54 | "vim-rsi": { "branch": "master", "commit": "45540637ead22f011e8215f1c90142e49d946a54" }, 55 | "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, 56 | "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } 57 | } 58 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "andymass/vim-matchup", 4 | event = "BufReadPost", 5 | init = function() 6 | vim.g.matchup_matchparen_deferred = 1 7 | vim.g.matchup_matchparen_offscreen = {} 8 | end, 9 | }, 10 | { 11 | "folke/flash.nvim", 12 | event = "VeryLazy", 13 | opts = { 14 | search = { 15 | multi_window = false, 16 | }, 17 | highlight = { 18 | backdrop = false, 19 | }, 20 | modes = { 21 | char = { 22 | highlight = { backdrop = true }, 23 | }, 24 | }, 25 | }, 26 | keys = { 27 | { 28 | "s", 29 | mode = { "n", "x", "o" }, 30 | function() 31 | require("flash").jump() 32 | end, 33 | desc = "Flash", 34 | }, 35 | { 36 | "S", 37 | mode = { "n", "o", "x" }, 38 | function() 39 | require("flash").treesitter() 40 | end, 41 | desc = "Flash Treesitter", 42 | }, 43 | { 44 | "r", 45 | mode = "o", 46 | function() 47 | require("flash").remote() 48 | end, 49 | desc = "Remote Flash", 50 | }, 51 | { 52 | "R", 53 | mode = { "o", "x" }, 54 | function() 55 | require("flash").treesitter_search() 56 | end, 57 | desc = "Treesitter Search", 58 | }, 59 | { 60 | "", 61 | mode = { "c" }, 62 | function() 63 | require("flash").toggle() 64 | end, 65 | desc = "Toggle Flash Search", 66 | }, 67 | }, 68 | }, 69 | { 70 | "tpope/vim-sleuth", 71 | init = function() 72 | -- https://github.com/tpope/vim-sleuth/issues/83 73 | vim.g.editorconfig = false 74 | end, 75 | }, 76 | "tpope/vim-rsi", 77 | 78 | { "chrisgrieser/nvim-genghis", opts = {} }, 79 | { "chrisgrieser/nvim-chainsaw", opts = {} }, 80 | 81 | { 82 | "MagicDuck/grug-far.nvim", 83 | opts = { headerMaxWidth = 80 }, 84 | cmd = "GrugFar", 85 | keys = { 86 | { 87 | "%", 88 | function() 89 | local grug = require "grug-far" 90 | local ext = vim.bo.buftype == "" and vim.fn.expand "%:e" 91 | grug.open { 92 | transient = true, 93 | prefills = { 94 | filesFilter = ext and ext ~= "" and "*." .. ext or nil, 95 | }, 96 | } 97 | end, 98 | mode = { "n", "v" }, 99 | desc = "Search and Replace", 100 | }, 101 | }, 102 | }, 103 | 104 | { "echasnovski/mini.bracketed", opts = {} }, 105 | { "echasnovski/mini.ai", opts = {} }, 106 | { "echasnovski/mini.surround", opts = {} }, 107 | { 108 | "echasnovski/mini.align", 109 | opts = {}, 110 | keys = { 111 | { "ga", mode = { "n", "v" } }, 112 | { "gA", mode = { "n", "v" } }, 113 | }, 114 | }, 115 | { 116 | "echasnovski/mini.basics", 117 | opts = { 118 | options = { 119 | basic = false, 120 | }, 121 | autocommands = { 122 | basic = false, 123 | }, 124 | }, 125 | }, 126 | { 127 | "echasnovski/mini.comment", 128 | event = "VeryLazy", 129 | dependencies = { 130 | { 131 | "JoosepAlviste/nvim-ts-context-commentstring", 132 | opts = { 133 | enable_autocmd = false, 134 | }, 135 | }, 136 | }, 137 | opts = { 138 | options = { 139 | custom_commentstring = function() 140 | return require("ts_context_commentstring.internal").calculate_commentstring() 141 | or vim.bo.commentstring 142 | end, 143 | }, 144 | }, 145 | }, 146 | 147 | { 148 | "stevearc/conform.nvim", 149 | event = { "BufWritePre" }, 150 | cmd = { "ConformInfo" }, 151 | keys = { 152 | { 153 | "p", 154 | function() 155 | require("conform").format { async = true, lsp_fallback = true } 156 | end, 157 | mode = "", 158 | desc = "Format buffer", 159 | }, 160 | }, 161 | opts = { 162 | formatters_by_ft = { 163 | lua = { "stylua" }, 164 | javascript = { "prettier" }, 165 | typescript = { "prettier" }, 166 | typescriptreact = { "prettier" }, 167 | markdown = { "prettier" }, 168 | html = { "prettier" }, 169 | css = { "prettier" }, 170 | json = { "prettier" }, 171 | }, 172 | }, 173 | }, 174 | 175 | { 176 | "mfussenegger/nvim-lint", 177 | event = "BufReadPre", 178 | opts = { 179 | linters_by_ft = { 180 | lua = { "selene" }, 181 | }, 182 | }, 183 | config = function(_, opts) 184 | require("lint").linters_by_ft = opts.linters_by_ft 185 | vim.api.nvim_create_autocmd({ "BufWritePost", "BufReadPost", "InsertLeave" }, { 186 | callback = function() 187 | require("lint").try_lint() 188 | end, 189 | }) 190 | end, 191 | }, 192 | 193 | { 194 | "stevearc/oil.nvim", 195 | event = "VeryLazy", 196 | keys = { 197 | { 198 | "-", 199 | function() 200 | require("oil").open_float() 201 | end, 202 | desc = "Browse dir", 203 | }, 204 | { 205 | "_", 206 | function() 207 | require("oil").open_float(vim.uv.cwd()) 208 | end, 209 | desc = "Browse dir (cwd)", 210 | }, 211 | }, 212 | opts = { 213 | delete_to_trash = true, 214 | float = { 215 | max_width = 120, 216 | height = 0.7, 217 | -- border = { " ", " ", " ", " ", " ", " ", " ", " " }, 218 | }, 219 | keymaps = { 220 | ["gq"] = "actions.close", 221 | ["g?"] = "actions.show_help", 222 | [""] = "actions.select", 223 | [""] = "actions.select_split", 224 | [""] = "actions.select_vsplit", 225 | [""] = "actions.select_tab", 226 | [""] = "actions.preview", 227 | [""] = "actions.refresh", 228 | ["-"] = "actions.parent", 229 | ["_"] = "actions.open_cwd", 230 | ["`"] = "actions.cd", 231 | ["~"] = "actions.tcd", 232 | ["gs"] = "actions.change_sort", 233 | ["gx"] = "actions.open_external", 234 | ["g."] = "actions.toggle_hidden", 235 | ["g\\"] = "actions.toggle_trash", 236 | }, 237 | }, 238 | }, 239 | 240 | { 241 | "obsidian-nvim/obsidian.nvim", 242 | version = "*", 243 | lazy = true, 244 | ft = "markdown", 245 | dependencies = { "nvim-lua/plenary.nvim" }, 246 | opts = { 247 | ui = { 248 | enable = false, 249 | }, 250 | workspaces = { 251 | { 252 | name = "Stuff", 253 | path = "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Stuff", 254 | }, 255 | }, 256 | }, 257 | }, 258 | 259 | { 260 | "dmmulroy/tsc.nvim", 261 | cmd = { "TSC" }, 262 | opts = { 263 | use_trouble_qflist = true, 264 | }, 265 | }, 266 | 267 | { "brenoprata10/nvim-highlight-colors", opts = {} }, 268 | 269 | { 270 | "folke/snacks.nvim", 271 | priority = 1000, 272 | lazy = false, 273 | ---@type snacks.Config 274 | opts = { 275 | bigfile = { enabled = true }, 276 | dashboard = { enabled = false }, 277 | indent = { enabled = true }, 278 | input = { enabled = true }, 279 | notifier = { enabled = true }, 280 | quickfile = { enabled = true }, 281 | scroll = { enabled = false }, 282 | statuscolumn = { enabled = true }, 283 | words = { enabled = true }, 284 | picker = { 285 | prompt = "❫ ", 286 | layout = { 287 | layout = { 288 | box = "horizontal", 289 | width = 0.9, 290 | min_width = 120, 291 | height = 0.6, 292 | { 293 | box = "vertical", 294 | border = "solid", 295 | title = "{title} {live} {flags}", 296 | wo = { 297 | winhighlight = "NormalFloat:Normal,FloatBorder:Normal", 298 | }, 299 | { 300 | win = "input", 301 | height = 1, 302 | border = "bottom", 303 | wo = { 304 | winhighlight = "NormalFloat:Normal", 305 | }, 306 | }, 307 | { 308 | win = "list", 309 | border = "none", 310 | wo = { 311 | winhighlight = "NormalFloat:Normal", 312 | }, 313 | }, 314 | }, 315 | { 316 | win = "preview", 317 | title = "{preview}", 318 | border = "solid", 319 | width = 0.5, 320 | }, 321 | }, 322 | }, 323 | formatters = { 324 | file = { 325 | filename_first = true, 326 | }, 327 | }, 328 | win = { 329 | input = { 330 | keys = { 331 | [""] = { "close", mode = { "n", "i" } }, 332 | }, 333 | }, 334 | }, 335 | }, 336 | }, 337 | keys = { 338 | { 339 | "gl", 340 | function() 341 | Snacks.gitbrowse() 342 | end, 343 | mode = { "n", "x" }, 344 | desc = "Copy git permlink to clipboard", 345 | }, 346 | { 347 | "n", 348 | function() 349 | Snacks.notifier.show_history() 350 | end, 351 | }, 352 | -- { 353 | -- "", 354 | -- function() 355 | -- Snacks.picker.resume() 356 | -- end, 357 | -- desc = "Resume", 358 | -- }, 359 | -- { 360 | -- ",", 361 | -- function() 362 | -- Snacks.picker.buffers() 363 | -- end, 364 | -- desc = "Buffers", 365 | -- }, 366 | -- { 367 | -- "/", 368 | -- function() 369 | -- Snacks.picker.grep() 370 | -- end, 371 | -- desc = "Grep", 372 | -- }, 373 | -- { 374 | -- ":", 375 | -- function() 376 | -- Snacks.picker.commands() 377 | -- end, 378 | -- desc = "Command", 379 | -- }, 380 | -- 381 | -- { 382 | -- "s:", 383 | -- function() 384 | -- Snacks.picker.command_history() 385 | -- end, 386 | -- desc = "Command History", 387 | -- }, 388 | -- { 389 | -- "sp", 390 | -- function() 391 | -- Snacks.picker.pickers() 392 | -- end, 393 | -- desc = "Pickers", 394 | -- }, 395 | -- { 396 | -- "sf", 397 | -- function() 398 | -- Snacks.picker.files() 399 | -- end, 400 | -- desc = "Find files (root dir)", 401 | -- }, 402 | -- { 403 | -- "sF", 404 | -- function() 405 | -- Snacks.picker.files { cwd = vim.uv.cwd() } 406 | -- end, 407 | -- desc = "Files (cwd)", 408 | -- }, 409 | -- { 410 | -- "sg", 411 | -- function() 412 | -- Snacks.picker.git_files() 413 | -- end, 414 | -- desc = "Files (git)", 415 | -- }, 416 | -- { 417 | -- "sr", 418 | -- function() 419 | -- Snacks.picker.recent() 420 | -- end, 421 | -- desc = "Recent files", 422 | -- }, 423 | -- { 424 | -- "sR", 425 | -- function() 426 | -- Snacks.picker.recent { cwd = vim.uv.cwd() } 427 | -- end, 428 | -- desc = "Recent files (cwd)", 429 | -- }, 430 | -- { 431 | -- "sw", 432 | -- function() 433 | -- Snacks.picker.grep_word() 434 | -- end, 435 | -- desc = "Visual selection or word", 436 | -- mode = { "n", "x" }, 437 | -- }, 438 | -- { 439 | -- "s%", 440 | -- function() 441 | -- Snacks.picker.grep_buffers() 442 | -- end, 443 | -- desc = "Grep buffer with cword", 444 | -- }, 445 | -- { 446 | -- "sl", 447 | -- function() 448 | -- Snacks.picker.lines() 449 | -- end, 450 | -- desc = "Buffer lines", 451 | -- }, 452 | -- { 453 | -- "sm", 454 | -- function() 455 | -- Snacks.picker.marks() 456 | -- end, 457 | -- desc = "Marks", 458 | -- }, 459 | -- { 460 | -- "sh", 461 | -- function() 462 | -- Snacks.picker.help() 463 | -- end, 464 | -- desc = "Help", 465 | -- }, 466 | -- { 467 | -- "sH", 468 | -- function() 469 | -- Snacks.picker.man() 470 | -- end, 471 | -- desc = "Man pages", 472 | -- }, 473 | -- { 474 | -- "sj", 475 | -- function() 476 | -- Snacks.picker.jumps() 477 | -- end, 478 | -- desc = "Jumplist", 479 | -- }, 480 | -- { 481 | -- "sk", 482 | -- function() 483 | -- Snacks.picker.keymaps() 484 | -- end, 485 | -- desc = "Keymaps", 486 | -- }, 487 | -- { 488 | -- "sq", 489 | -- function() 490 | -- Snacks.picker.qflist() 491 | -- end, 492 | -- desc = "Quickfix", 493 | -- }, 494 | -- { 495 | -- "sQ", 496 | -- function() 497 | -- Snacks.picker.loclist() 498 | -- end, 499 | -- desc = "Location list", 500 | -- }, 501 | -- { 502 | -- [[s"]], 503 | -- function() 504 | -- Snacks.picker.registers() 505 | -- end, 506 | -- desc = "Registers", 507 | -- }, 508 | -- { 509 | -- "s/", 510 | -- function() 511 | -- Snacks.picker.search_history() 512 | -- end, 513 | -- desc = "Search History", 514 | -- }, 515 | -- { 516 | -- "sd", 517 | -- function() 518 | -- Snacks.picker.diagnostics() 519 | -- end, 520 | -- desc = "Diagnostics", 521 | -- }, 522 | -- { 523 | -- "sD", 524 | -- function() 525 | -- Snacks.picker.diagnostics_buffer() 526 | -- end, 527 | -- desc = "Buffer Diagnostics", 528 | -- }, 529 | -- { 530 | -- "su", 531 | -- function() 532 | -- Snacks.picker.undo() 533 | -- end, 534 | -- desc = "Undotree", 535 | -- }, 536 | }, 537 | }, 538 | 539 | -- "mcchrish/fountain.vim", 540 | } 541 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/ai.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "zbirenbaum/copilot.lua", 4 | cmd = "Copilot", 5 | event = "InsertEnter", 6 | opts = { 7 | suggestion = { 8 | enabled = true, 9 | -- auto_trigger = true, 10 | -- hide_during_completion = false, 11 | keymap = { 12 | accept = "", 13 | accept_word = false, 14 | accept_line = false, 15 | next = "", 16 | prev = "", 17 | dismiss = "", 18 | }, 19 | }, 20 | panel = { enabled = false }, 21 | }, 22 | }, 23 | 24 | { 25 | "olimorris/codecompanion.nvim", 26 | -- lazy = true, 27 | dependencies = { 28 | "nvim-lua/plenary.nvim", 29 | "nvim-treesitter/nvim-treesitter", 30 | }, 31 | opts = { 32 | adapters = { 33 | anthropic = function() 34 | return require("codecompanion.adapters").extend("anthropic", { 35 | env = { 36 | api_key = vim.env.ANTHROPIC_API_KEY, 37 | }, 38 | }) 39 | end, 40 | }, 41 | strategies = { 42 | chat = { 43 | adapter = "copilot", 44 | slash_commands = { 45 | buffer = { 46 | opts = { 47 | provider = "fzf_lua", 48 | }, 49 | }, 50 | file = { 51 | opts = { 52 | provider = "fzf_lua", 53 | }, 54 | }, 55 | }, 56 | }, 57 | inline = { 58 | adapter = "copilot", 59 | }, 60 | agent = { 61 | adapter = "copilot", 62 | }, 63 | }, 64 | }, 65 | }, 66 | } 67 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/color.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { "rktjmp/shipwright.nvim", lazy = true }, 3 | { 4 | dir = "~/vimming/zenbones.nvim", 5 | dependencies = "rktjmp/lush.nvim", 6 | init = function() 7 | vim.api.nvim_create_autocmd("ColorScheme", { 8 | pattern = { "*bones", "zenburned", "zenwritten" }, 9 | callback = function(params) 10 | require("mcchrish.statusline").setup(params.match) 11 | end, 12 | }) 13 | end, 14 | config = function() 15 | local colors_name = "zenbones" 16 | -- vim.g[colors_name .. "_compat"] = 1 17 | vim.g[colors_name] = { 18 | -- darkness = "stark", 19 | -- lightness = "bright", 20 | -- dim_noncurrent_window = true, 21 | -- solid_vert_split = true, 22 | solid_line_nr = true, 23 | -- darken_non_text = 30, 24 | -- italic_comments = false, 25 | -- transparent_background = true, 26 | -- lighten_cursor_line = 20, 27 | -- darken_cursor_line = 20, 28 | -- colorize_diagnostic_underline_text = true, 29 | } 30 | vim.cmd.colorscheme(colors_name) 31 | end, 32 | }, 33 | { 34 | "rose-pine/neovim", 35 | name = "rose-pine", 36 | config = function() 37 | -- vim.cmd "colorscheme rose-pine" 38 | end, 39 | }, 40 | } 41 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/completion.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "saghen/blink.cmp", 4 | dependencies = "rafamadriz/friendly-snippets", 5 | version = "*", 6 | ---@module 'blink.cmp' 7 | ---@type blink.cmp.Config 8 | opts = { 9 | keymap = { 10 | preset = "default", 11 | 12 | [""] = { "show", "show_documentation", "hide_documentation" }, 13 | 14 | [""] = { "snippet_forward", "fallback" }, 15 | [""] = { "snippet_backward", "fallback" }, 16 | }, 17 | 18 | completion = { 19 | menu = { 20 | draw = { 21 | columns = { { "label", "label_description", gap = 1 }, { "kind_icon", "kind", gap = 2 } }, 22 | }, 23 | }, 24 | }, 25 | 26 | appearance = { 27 | -- Sets the fallback highlight groups to nvim-cmp's highlight groups 28 | -- Useful for when your theme doesn't support blink.cmp 29 | -- Will be removed in a future release 30 | -- use_nvim_cmp_as_default = true, 31 | -- Set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font' 32 | -- Adjusts spacing to ensure icons are aligned 33 | nerd_font_variant = "mono", 34 | }, 35 | 36 | -- Default list of enabled providers defined so that you can extend it 37 | -- elsewhere in your config, without redefining it, due to `opts_extend` 38 | sources = { 39 | default = { "lazydev", "lsp", "path", "snippets", "buffer" }, 40 | providers = { 41 | lazydev = { 42 | name = "LazyDev", 43 | module = "lazydev.integrations.blink", 44 | -- make lazydev completions top priority (see `:h blink.cmp`) 45 | score_offset = 100, 46 | }, 47 | }, 48 | }, 49 | signature = { enabled = true }, 50 | }, 51 | opts_extend = { "sources.default" }, 52 | }, 53 | 54 | { 55 | "folke/lazydev.nvim", 56 | ft = "lua", -- only load on lua files 57 | opts = { 58 | library = { 59 | -- See the configuration section for more details 60 | -- Load luvit types when the `vim.uv` word is found 61 | { path = "${3rd}/luv/library", words = { "vim%.uv" } }, 62 | }, 63 | }, 64 | }, 65 | } 66 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/fzf.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "ibhagwan/fzf-lua", 3 | cmd = "FzfLua", 4 | opts = function() 5 | local actions = require "fzf-lua.actions" 6 | return { 7 | defaults = { 8 | git_icons = false, 9 | file_icons = false, 10 | }, 11 | winopts = { 12 | width = 0.9, 13 | height = 0.6, 14 | row = 0.5, 15 | col = 0.5, 16 | border = { " ", " ", " ", " ", " ", " ", " ", " " }, 17 | preview = { 18 | border = { " ", " ", " ", " ", " ", " ", " ", " " }, 19 | horizontal = "right:45%", 20 | }, 21 | }, 22 | hls = { 23 | title = "FloatTitle", 24 | preview_border = "LineNr", 25 | preview_normal = "LineNr", 26 | }, 27 | fzf_colors = true, 28 | fzf_opts = { 29 | ["--prompt"] = "❫", 30 | }, 31 | keymap = { 32 | fzf = { 33 | ["alt-a"] = "toggle-all", 34 | ["down"] = "half-page-down", 35 | ["up"] = "half-page-up", 36 | ["f2"] = "toggle-preview", 37 | ["f3"] = "toggle-preview-wrap", 38 | ["shift-down"] = "preview-page-down", 39 | ["shift-up"] = "preview-page-up", 40 | }, 41 | }, 42 | previewers = { 43 | builtin = { 44 | scrollbar = false, 45 | snacks_image = { enabled = false }, 46 | }, 47 | }, 48 | files = { 49 | formatter = "path.filename_first", 50 | actions = { 51 | ["alt-i"] = { actions.toggle_ignore }, 52 | ["alt-h"] = { actions.toggle_hidden }, 53 | }, 54 | }, 55 | git = { 56 | files = { 57 | prompt = "Tracked files❫ ", 58 | formatter = { "path.filename_first", 2 }, 59 | }, 60 | status = { 61 | prompt = "Status❫ ", 62 | }, 63 | commits = { 64 | prompt = "Commits❫ ", 65 | }, 66 | bcommits = { 67 | prompt = "Bcommits❫ ", 68 | }, 69 | branches = { 70 | prompt = "Branches❫ ", 71 | }, 72 | tags = { 73 | prompt = "Tags❫ ", 74 | }, 75 | stash = { 76 | prompt = "Stash❫ ", 77 | }, 78 | }, 79 | grep = { 80 | prompt = "Grep❫ ", 81 | input_prompt = "Grep for❫ ", 82 | formatter = { "path.filename_first", 2 }, 83 | rg_opts = "--column --line-number --no-heading --color=always --smart-case --max-columns=4096 --colors='path:fg:white' --colors='path:style:intense' -e", 84 | actions = { 85 | ["alt-i"] = { actions.toggle_ignore }, 86 | ["alt-h"] = { actions.toggle_hidden }, 87 | }, 88 | }, 89 | args = { 90 | prompt = "Args❫ ", 91 | }, 92 | oldfiles = { 93 | prompt = "History❫ ", 94 | }, 95 | buffers = { 96 | prompt = "Buffers❫ ", 97 | }, 98 | tabs = { 99 | prompt = "Tabs❫ ", 100 | }, 101 | lines = { 102 | prompt = "Lines❫ ", 103 | }, 104 | blines = { 105 | previewer = false, 106 | prompt = "Blines❫ ", 107 | }, 108 | keymaps = { 109 | prompt = "Keymaps❫ ", 110 | }, 111 | quickfix_stack = { 112 | prompt = "Quickfix stack❫ ", 113 | }, 114 | lsp = { 115 | prompt_postfix = "❫ ", 116 | }, 117 | code_actions = { 118 | prompt = "Code actions❫ ", 119 | }, 120 | finder = { 121 | prompt = "LSP finder❫ ", 122 | }, 123 | diagnostics = { 124 | prompt = "Diagnostics❫ ", 125 | }, 126 | marks = { 127 | prompt = "Marks❫ ", 128 | }, 129 | } 130 | end, 131 | init = function() 132 | vim.cmd.cnoreabbrev "fz FzfLua" 133 | end, 134 | config = function(_, opts) 135 | require("fzf-lua").setup(opts) 136 | end, 137 | keys = { 138 | { 139 | "", 140 | function() 141 | require("fzf-lua").resume() 142 | end, 143 | desc = "Resume", 144 | }, 145 | { 146 | ",", 147 | function() 148 | require("fzf-lua").buffers() 149 | end, 150 | desc = "Buffers", 151 | }, 152 | { 153 | "/", 154 | function() 155 | require("fzf-lua").live_grep() 156 | end, 157 | desc = "Grep (root dir)", 158 | }, 159 | { 160 | ":", 161 | function() 162 | require("fzf-lua").commands() 163 | end, 164 | desc = "Command", 165 | }, 166 | { 167 | "s:", 168 | function() 169 | require("fzf-lua").command_history() 170 | end, 171 | desc = "Command History", 172 | }, 173 | { 174 | "sb", 175 | function() 176 | require("fzf-lua").builtin() 177 | end, 178 | desc = "Builtin commands", 179 | }, 180 | { 181 | "sf", 182 | function() 183 | require("fzf-lua").files() 184 | end, 185 | desc = "Find files (root dir)", 186 | }, 187 | { 188 | "sF", 189 | function() 190 | require("fzf-lua").files { cwd = vim.uv.cwd() } 191 | end, 192 | desc = "Files (cwd)", 193 | }, 194 | { 195 | "sg", 196 | function() 197 | require("fzf-lua").git_files() 198 | end, 199 | desc = "Files (git)", 200 | }, 201 | { 202 | "sh", 203 | function() 204 | require("fzf-lua").oldfiles() 205 | end, 206 | desc = "Recent files", 207 | }, 208 | { 209 | "sH", 210 | function() 211 | require("fzf-lua").oldfiles { cwd = vim.uv.cwd() } 212 | end, 213 | desc = "Recent files (cwd)", 214 | }, 215 | { 216 | "sw", 217 | function() 218 | require("fzf-lua").grep_cword() 219 | end, 220 | desc = "Grep cword", 221 | }, 222 | { 223 | "sW", 224 | function() 225 | require("fzf-lua").grep_cWORD() 226 | end, 227 | desc = "Grep cWORD", 228 | }, 229 | { 230 | "ss", 231 | function() 232 | require("fzf-lua").grep_visual() 233 | end, 234 | mode = "v", 235 | desc = "Grep selection", 236 | }, 237 | { 238 | "s%", 239 | function() 240 | require("fzf-lua").lgrep_curbuf { 241 | prompt = "Buffer❫ ", 242 | } 243 | end, 244 | desc = "Grep buffer", 245 | }, 246 | { 247 | "s*", 248 | function() 249 | require("fzf-lua").grep_curbuf { 250 | prompt = "Buffer❫ ", 251 | search = vim.fn.expand "", 252 | } 253 | end, 254 | desc = "Grep buffer with cword", 255 | }, 256 | { 257 | "sl", 258 | function() 259 | require("fzf-lua").blines() 260 | end, 261 | desc = "Buffer lines", 262 | }, 263 | { 264 | "sL", 265 | function() 266 | require("fzf-lua").lines() 267 | end, 268 | desc = "Lines", 269 | }, 270 | { 271 | "sm", 272 | function() 273 | require("fzf-lua").marks() 274 | end, 275 | desc = "Marks", 276 | }, 277 | { 278 | "sh", 279 | function() 280 | require("fzf-lua").help_tags() 281 | end, 282 | desc = "Help", 283 | }, 284 | { 285 | "sH", 286 | function() 287 | require("fzf-lua").man_pages() 288 | end, 289 | desc = "Man pages", 290 | }, 291 | { 292 | "sj", 293 | function() 294 | require("fzf-lua").jumps() 295 | end, 296 | desc = "Jumplist", 297 | }, 298 | { 299 | "sk", 300 | function() 301 | require("fzf-lua").keymaps() 302 | end, 303 | desc = "Keymaps", 304 | }, 305 | { 306 | "sq", 307 | function() 308 | require("fzf-lua").quickfix() 309 | end, 310 | desc = "Quickfix", 311 | }, 312 | { 313 | "sQ", 314 | function() 315 | require("fzf-lua").loclist() 316 | end, 317 | desc = "Location list", 318 | }, 319 | { 320 | [[s"]], 321 | function() 322 | require("fzf-lua").registers() 323 | end, 324 | desc = "Registers", 325 | }, 326 | 327 | { 328 | "", 329 | function() 330 | require("fzf-lua").complete_bline() 331 | end, 332 | mode = { "i" }, 333 | silent = true, 334 | desc = "Complete bline", 335 | remap = true, 336 | }, 337 | { 338 | "", 339 | function() 340 | require("fzf-lua").complete_path() 341 | end, 342 | mode = { "i" }, 343 | silent = true, 344 | desc = "Complete path", 345 | remap = true, 346 | }, 347 | { 348 | "", 349 | function() 350 | require("fzf-lua").complete_line() 351 | end, 352 | mode = { "i" }, 353 | silent = true, 354 | desc = "Complete line", 355 | remap = true, 356 | }, 357 | }, 358 | } 359 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/git.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "tpope/vim-fugitive", 4 | lazy = false, 5 | keys = { 6 | { 7 | "gs", 8 | mode = "n", 9 | "G", 10 | desc = "Fugitive", 11 | }, 12 | { 13 | "gd", 14 | mode = "n", 15 | "Gdiffsplit", 16 | desc = "Fugitive diffsplit", 17 | }, 18 | }, 19 | }, 20 | { 21 | "rbong/vim-flog", 22 | lazy = true, 23 | cmd = { "Flog", "Flogsplit", "Floggit" }, 24 | }, 25 | { "sindrets/diffview.nvim", event = "VeryLazy" }, 26 | { 27 | "lewis6991/gitsigns.nvim", 28 | event = { "BufReadPre", "BufNewFile" }, 29 | keys = { 30 | { 31 | "gg", 32 | mode = "n", 33 | "Gitsigns toggle_signs", 34 | desc = "Git signs toggle", 35 | }, 36 | { 37 | "gh", 38 | mode = "n", 39 | "Gitsigns toggle_linehl", 40 | desc = "Git signs toggle highlight", 41 | }, 42 | }, 43 | opts = { 44 | signs = { 45 | add = { text = "┃" }, 46 | change = { text = "┃" }, 47 | delete = { text = "━" }, 48 | topdelete = { text = "━" }, 49 | changedelete = { text = "┳" }, 50 | }, 51 | -- current_line_blame = true, 52 | on_attach = function(bufnr) 53 | local gitsigns = require "gitsigns" 54 | 55 | local function map(mode, l, r, opts) 56 | opts = opts or {} 57 | opts.buffer = bufnr 58 | vim.keymap.set(mode, l, r, opts) 59 | end 60 | 61 | -- Navigation 62 | map("n", "]c", function() 63 | if vim.wo.diff then 64 | vim.cmd.normal { "]c", bang = true } 65 | else 66 | gitsigns.nav_hunk "next" 67 | end 68 | end, { desc = "Jump to next git [c]hange" }) 69 | 70 | map("n", "[c", function() 71 | if vim.wo.diff then 72 | vim.cmd.normal { "[c", bang = true } 73 | else 74 | gitsigns.nav_hunk "prev" 75 | end 76 | end, { desc = "Jump to previous git [c]hange" }) 77 | 78 | -- Actions 79 | -- visual mode 80 | map("v", "hs", function() 81 | gitsigns.stage_hunk { vim.fn.line ".", vim.fn.line "v" } 82 | end, { desc = "git [s]tage hunk" }) 83 | map("v", "hr", function() 84 | gitsigns.reset_hunk { vim.fn.line ".", vim.fn.line "v" } 85 | end, { desc = "git [r]eset hunk" }) 86 | -- normal mode 87 | map("n", "hs", gitsigns.stage_hunk, { desc = "git [s]tage hunk" }) 88 | map("n", "hr", gitsigns.reset_hunk, { desc = "git [r]eset hunk" }) 89 | map("n", "hS", gitsigns.stage_buffer, { desc = "git [S]tage buffer" }) 90 | map("n", "hu", gitsigns.stage_hunk, { desc = "git [u]ndo stage hunk" }) 91 | map("n", "hR", gitsigns.reset_buffer, { desc = "git [R]eset buffer" }) 92 | map("n", "hp", gitsigns.preview_hunk, { desc = "git [p]review hunk" }) 93 | map("n", "hb", gitsigns.blame_line, { desc = "git [b]lame line" }) 94 | map("n", "hd", gitsigns.diffthis, { desc = "git [d]iff against index" }) 95 | map("n", "hD", function() 96 | gitsigns.diffthis "@" 97 | end, { desc = "git [D]iff against last commit" }) 98 | -- Toggles 99 | map("n", "tb", gitsigns.toggle_current_line_blame, { desc = "[T]oggle git show [b]lame line" }) 100 | map("n", "tD", gitsigns.preview_hunk_inline, { desc = "[T]oggle git show [D]eleted" }) 101 | end, 102 | }, 103 | }, 104 | { 105 | "mbbill/undotree", 106 | cmd = "UndotreeToggle", 107 | keys = { 108 | { 109 | "u", 110 | mode = "n", 111 | "UndotreeToggle", 112 | desc = "Undotree toggle", 113 | }, 114 | }, 115 | init = function() 116 | local g = vim.g 117 | g.undotree_WindowLayout = 2 118 | g.undotree_SetFocusWhenToggle = 1 119 | g.undotree_SplitWidth = 40 120 | end, 121 | }, 122 | } 123 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/lsp.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "mason-org/mason.nvim", 4 | build = ":MasonUpdate", 5 | opts = {}, 6 | }, 7 | 8 | { 9 | "folke/trouble.nvim", 10 | cmd = { "Trouble", "TSC" }, 11 | keys = { 12 | { 13 | "xx", 14 | "Trouble diagnostics toggle", 15 | desc = "Diagnostics (Trouble)", 16 | }, 17 | { 18 | "xX", 19 | "Trouble diagnostics toggle filter.buf=0", 20 | desc = "Buffer Diagnostics (Trouble)", 21 | }, 22 | { 23 | "cs", 24 | "Trouble symbols toggle focus=false", 25 | desc = "Symbols (Trouble)", 26 | }, 27 | { 28 | "cl", 29 | "Trouble lsp toggle focus=false win.position=right", 30 | desc = "LSP Definitions / references / ... (Trouble)", 31 | }, 32 | { 33 | "xL", 34 | "Trouble loclist toggle", 35 | desc = "Location List (Trouble)", 36 | }, 37 | { 38 | "xQ", 39 | "Trouble qflist toggle", 40 | desc = "Quickfix List (Trouble)", 41 | }, 42 | }, 43 | opts = { 44 | -- icons = false, 45 | action_keys = { 46 | close = "gq", 47 | open_split = { "" }, 48 | }, 49 | use_diagnostic_signs = true, 50 | }, 51 | }, 52 | 53 | { 54 | "neovim/nvim-lspconfig", 55 | event = { "BufReadPre", "BufNewFile" }, 56 | dependencies = { 57 | "mason-org/mason-lspconfig.nvim", 58 | "yioneko/nvim-vtsls", 59 | "nvim-lua/plenary.nvim", 60 | }, 61 | opts = {}, 62 | config = function() 63 | require("mason-lspconfig").setup { 64 | ensure_installed = { 65 | "vtsls", 66 | "volar", 67 | "eslint", 68 | "tailwindcss", 69 | "vale_ls", 70 | "emmet_language_server", 71 | "lua_ls", 72 | }, 73 | automatic_enable = true, 74 | automatic_installation = false, 75 | } 76 | 77 | vim.lsp.config("vtsls", { 78 | filetypes = { "typescript", "javascript", "javascriptreact", "typescriptreact", "vue" }, 79 | settings = { 80 | vtsls = { tsserver = { globalPlugins = {} } }, 81 | typescript = { 82 | inlayHints = { 83 | parameterNames = { enabled = "literals" }, 84 | parameterTypes = { enabled = true }, 85 | variableTypes = { enabled = true }, 86 | propertyDeclarationTypes = { enabled = true }, 87 | functionLikeReturnTypes = { enabled = true }, 88 | enumMemberValues = { enabled = true }, 89 | }, 90 | }, 91 | }, 92 | before_init = function(_params, config) 93 | table.insert(config.settings.vtsls.tsserver.globalPlugins, { 94 | name = "@vue/typescript-plugin", 95 | location = vim.fn.expand "$MASON/packages/vue-language-server/node_modules/@vue/language-server", 96 | languages = { "vue" }, 97 | configNamespace = "typescript", 98 | enableForWorkspaceTypeScriptVersions = true, 99 | }) 100 | end, 101 | on_attach = function(client) 102 | client.server_capabilities.documentFormattingProvider = false 103 | client.server_capabilities.documentRangeFormattingProvider = false 104 | end, 105 | }) 106 | vim.lsp.config("emmet_language_server", { 107 | on_attach = function(client, bufnr) 108 | vim.keymap.set("i", ",", function() 109 | client.request( 110 | "textDocument/completion", 111 | vim.lsp.util.make_position_params(0, client.offset_encoding), 112 | function(_, result) 113 | local textEdit = result.items[1].textEdit 114 | local snip_string = textEdit.newText 115 | textEdit.newText = "" 116 | vim.lsp.util.apply_text_edits({ textEdit }, bufnr, client.offset_encoding) 117 | require("luasnip").lsp_expand(snip_string) 118 | end, 119 | bufnr 120 | ) 121 | end, { noremap = true, buffer = bufnr, desc = "Expand emmet" }) 122 | end, 123 | }) 124 | 125 | vim.lsp.config("lua_ls", { 126 | on_attach = function(client) 127 | client.server_capabilities.documentFormattingProvider = false 128 | client.server_capabilities.documentRangeFormattingProvider = false 129 | end, 130 | settings = { 131 | Lua = { 132 | workspace = { 133 | checkThirdParty = false, 134 | }, 135 | completion = { 136 | callSnippet = "Replace", 137 | }, 138 | telemetry = { 139 | enable = false, 140 | }, 141 | }, 142 | }, 143 | }) 144 | 145 | vim.keymap.set("n", "q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" }) 146 | 147 | vim.api.nvim_create_autocmd("LspAttach", { 148 | group = vim.api.nvim_create_augroup("lsp-attach", {}), 149 | callback = function(event) 150 | local client = vim.lsp.get_client_by_id(event.data.client_id) 151 | -- Enable completion triggered by 152 | vim.bo[event.buf].omnifunc = "v:lua.vim.lsp.omnifunc" 153 | 154 | local map = function(keys, func, desc, mode) 155 | vim.keymap.set(mode or "n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) 156 | end 157 | 158 | local fzf = require "fzf-lua" 159 | 160 | map("gd", function() 161 | fzf.lsp_definitions { jump1 = true } 162 | end, "[G]oto [D]efinition") 163 | map("gD", function() 164 | fzf.lsp_definitions { jump1 = false } 165 | end, "Peek [D]efinition") 166 | map("grr", fzf.lsp_references, "[G]oto [R]eferences") 167 | map("g", fzf.lsp_typedefs, "Type [D]efinition") 168 | map("ds", fzf.lsp_document_symbols, "[D]ocument [S]ymbols") 169 | map("ws", fzf.lsp_live_workspace_symbols, "[W]orkspace [S]ymbols") 170 | map("gra", fzf.lsp_code_actions, "Code [A]ction") 171 | 172 | -- The following two autocommands are used to highlight references of the 173 | -- word under your cursor when your cursor rests there for a little while. 174 | -- See `:help CursorHold` for information about when this is executed 175 | -- 176 | -- When you move your cursor, the highlights will be cleared (the second autocommand). 177 | if 178 | client 179 | and client:supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) 180 | then 181 | local highlight_augroup = 182 | vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false }) 183 | vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { 184 | buffer = event.buf, 185 | group = highlight_augroup, 186 | callback = vim.lsp.buf.document_highlight, 187 | }) 188 | 189 | vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { 190 | buffer = event.buf, 191 | group = highlight_augroup, 192 | callback = vim.lsp.buf.clear_references, 193 | }) 194 | 195 | vim.api.nvim_create_autocmd("LspDetach", { 196 | group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }), 197 | callback = function(event2) 198 | vim.lsp.buf.clear_references() 199 | vim.api.nvim_clear_autocmds { group = "kickstart-lsp-highlight", buffer = event2.buf } 200 | end, 201 | }) 202 | end 203 | 204 | -- The following code creates a keymap to toggle inlay hints in your 205 | -- code, if the language server you are using supports them 206 | -- 207 | -- This may be unwanted, since they displace some of your code 208 | if 209 | client 210 | and client:supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) 211 | then 212 | map("th", function() 213 | vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) 214 | end, "[T]oggle Inlay [H]ints") 215 | end 216 | end, 217 | }) 218 | end, 219 | }, 220 | } 221 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/treesitter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-treesitter/nvim-treesitter", 4 | event = { "BufReadPost", "BufNewFile" }, 5 | build = ":TSUpdate", 6 | dependencies = { 7 | "nvim-treesitter/nvim-treesitter-context", 8 | "nvim-treesitter/nvim-treesitter-textobjects", 9 | }, 10 | opts = { 11 | playground = { 12 | enable = false, 13 | }, 14 | ensure_installed = { 15 | "css", 16 | "diff", 17 | "html", 18 | "javascript", 19 | "jsdoc", 20 | "json", 21 | "luadoc", 22 | "luap", 23 | "toml", 24 | "tsx", 25 | "typescript", 26 | "vue", 27 | "yaml", 28 | }, 29 | matchup = { 30 | enable = true, 31 | }, 32 | highlight = { 33 | enable = true, 34 | disable = { "yaml" }, 35 | }, 36 | indent = { 37 | enable = true, 38 | }, 39 | incremental_selection = { 40 | enable = true, 41 | keymaps = { 42 | init_selection = "gnn", 43 | node_incremental = "grn", 44 | scope_incremental = "grc", 45 | node_decremental = "grm", 46 | }, 47 | }, 48 | }, 49 | config = function(_, opts) 50 | require("nvim-treesitter.configs").setup(opts) 51 | require("treesitter-context").setup() 52 | end, 53 | }, 54 | } 55 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/plugins/ui.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { "nvim-lualine/lualine.nvim", opts = {} }, 3 | { 4 | "folke/which-key.nvim", 5 | event = "VeryLazy", 6 | opts = { 7 | preset = "helix", 8 | icons = { 9 | rules = false, 10 | }, 11 | }, 12 | keys = { 13 | { 14 | "@", 15 | function() 16 | require("which-key").show { global = false } 17 | end, 18 | desc = "Buffer local keymaps (which-key)", 19 | }, 20 | }, 21 | }, 22 | 23 | { "j-hui/fidget.nvim", opts = {} }, 24 | 25 | { 26 | "MeanderingProgrammer/render-markdown.nvim", 27 | lazy = true, 28 | ft = { "codecompanion" }, 29 | opts = { 30 | file_types = { "markdown", "codecompanion" }, 31 | heading = { 32 | width = "block", 33 | left_pad = 2, 34 | right_pad = 2, 35 | }, 36 | bullet = { 37 | icons = { "•", "◦", "◆", "◇" }, 38 | }, 39 | sign = { enabled = false }, 40 | code = { 41 | width = "block", 42 | }, 43 | }, 44 | }, 45 | 46 | { 47 | "echasnovski/mini.icons", 48 | lazy = true, 49 | init = function() 50 | package.preload["nvim-web-devicons"] = function() 51 | require("mini.icons").mock_nvim_web_devicons() 52 | return package.loaded["nvim-web-devicons"] 53 | end 54 | end, 55 | opts = {}, 56 | }, 57 | { 58 | "tris203/precognition.nvim", 59 | cmd = "Precognition", 60 | keys = { 61 | { 62 | "!", 63 | function() 64 | require("precognition").toggle() 65 | end, 66 | desc = "Buffers", 67 | }, 68 | }, 69 | opts = {}, 70 | }, 71 | 72 | { 73 | "stevearc/quicker.nvim", 74 | event = "FileType qf", 75 | ---@module "quicker" 76 | ---@type quicker.SetupOptions 77 | opts = {}, 78 | }, 79 | } 80 | -------------------------------------------------------------------------------- /home/dot_config/nvim/lua/mcchrish/statusline.lua: -------------------------------------------------------------------------------- 1 | local M = {} 2 | 3 | M.setup = function(colors_name) 4 | require("lualine").setup { 5 | options = { 6 | globalstatus = true, 7 | theme = colors_name, 8 | section_separators = "", 9 | component_separators = "", 10 | }, 11 | sections = { 12 | lualine_a = { 13 | { 14 | "mode", 15 | padding = 0, 16 | fmt = function() 17 | return " " 18 | end, 19 | }, 20 | }, 21 | lualine_b = {}, 22 | lualine_c = { 23 | { 24 | "diagnostics", 25 | symbols = { error = "▬", warn = "▪", hint = "▪", info = "⋅" }, 26 | }, 27 | }, 28 | lualine_x = { 29 | { 30 | "filetype", 31 | colored = false, 32 | icon_only = true, 33 | }, 34 | }, 35 | lualine_y = { { "branch" } }, 36 | lualine_z = { 37 | { "location", separator = "|", padding = { left = 1 } }, 38 | { "progress", padding = { right = 1 } }, 39 | }, 40 | }, 41 | inactive_sections = { 42 | lualine_a = { { "filename", path = 1, padding = { left = 2 }, color = "StatusLineNC" } }, 43 | lualine_b = {}, 44 | lualine_c = {}, 45 | lualine_x = {}, 46 | lualine_y = {}, 47 | lualine_z = { 48 | { "location", separator = "|", padding = 1, color = "StatusLineNC" }, 49 | { "progress", padding = { right = 1 }, color = "StatusLineNC" }, 50 | }, 51 | }, 52 | 53 | winbar = { 54 | lualine_a = { 55 | { 56 | "mode", 57 | padding = 0, 58 | fmt = function() 59 | return " " 60 | end, 61 | }, 62 | }, 63 | lualine_b = {}, 64 | lualine_c = { { "filename", path = 1 } }, 65 | lualine_x = {}, 66 | lualine_y = {}, 67 | lualine_z = {}, 68 | }, 69 | 70 | inactive_winbar = { 71 | lualine_a = {}, 72 | lualine_b = {}, 73 | lualine_c = { { "filename", path = 1, padding = { left = 2 } } }, 74 | lualine_x = {}, 75 | lualine_y = {}, 76 | lualine_z = {}, 77 | }, 78 | } 79 | end 80 | 81 | return M 82 | -------------------------------------------------------------------------------- /home/dot_config/nvim/plugin/opt.lua: -------------------------------------------------------------------------------- 1 | local opt = vim.opt 2 | 3 | opt.modelines = 1 4 | opt.fileformats = { "unix", "mac", "dos" } 5 | opt.fileformat = "unix" 6 | opt.ignorecase = true 7 | opt.smartcase = true 8 | -- opt.lazyredraw = true 9 | opt.inccommand = "split" 10 | 11 | opt.number = true 12 | opt.signcolumn = "yes" 13 | opt.updatetime = 250 14 | opt.timeoutlen = 600 15 | 16 | -- Flash matching parenthesis 17 | opt.showmatch = true 18 | opt.matchtime = 2 19 | 20 | -- Shorter messages 21 | opt.shortmess = "aIToOc" 22 | 23 | -- Allow all mouse 24 | opt.mouse = "a" 25 | 26 | -- Better splitting 27 | opt.splitbelow = true 28 | opt.splitright = true 29 | opt.splitkeep = "screen" 30 | 31 | -- Diff Mode 32 | vim.opt.diffopt:append { 33 | "linematch:50", 34 | "vertical", 35 | "foldcolumn:0", 36 | "indent-heuristic", 37 | } 38 | 39 | opt.cursorline = true 40 | 41 | opt.scrolloff = 8 42 | opt.sidescrolloff = 10 43 | opt.synmaxcol = 500 44 | opt.history = 1000 45 | opt.tabpagemax = 50 46 | 47 | opt.fillchars = { fold = "·" } 48 | opt.listchars = { tab = "| ", nbsp = "␣", eol = "¬", trail = "⣿", extends = "→", precedes = "←" } 49 | 50 | -- Visual-block can free move 51 | opt.virtualedit = "block" 52 | 53 | -- 4 spaces indentation, no tabs 54 | opt.shiftwidth = 4 55 | opt.shiftround = true 56 | opt.tabstop = 4 57 | opt.softtabstop = 4 58 | opt.breakindent = true 59 | opt.showbreak = "↪ " 60 | 61 | opt.selection = "exclusive" 62 | 63 | -- Wrapping 64 | opt.linebreak = true 65 | opt.textwidth = 80 66 | opt.formatoptions = "cqj1" -- format using textwidth, including comments and gq 67 | 68 | -- Stay on the same column if possible 69 | opt.startofline = false 70 | 71 | -- Menu complete 72 | opt.wildignorecase = true 73 | opt.wildmode = { "longest:full", "full" } 74 | vim.opt.wildignore:append { ".hg", ".git", ".svn", "*.pyc", "*.spl", "*.o", "*.out", "*.DS_Store" } 75 | vim.opt.wildignore:append { "*/node_modules/*" } 76 | 77 | -- Dictionary 78 | opt.dictionary = "/usr/share/dict/words" 79 | 80 | -- No need 81 | opt.swapfile = false 82 | 83 | -- Persistent undo and swap files directory 84 | opt.undofile = true 85 | 86 | opt.backup = false 87 | opt.writebackup = false 88 | 89 | opt.guicursor = { 90 | "n-v-c:block", 91 | "i-ci-ve:ver25", 92 | "r-cr:hor20", 93 | "o:hor50", 94 | "a:Cursor/lCursor", 95 | "i:blinkwait700-blinkoff400-blinkon250", 96 | "sm:block-blinkwait175-blinkoff150-blinkon175", 97 | } 98 | 99 | vim.g.PHP_noArrowMatching = 1 100 | 101 | -- Diagnostic Config 102 | -- See :help vim.diagnostic.Opts 103 | vim.diagnostic.config { 104 | update_in_insert = false, 105 | severity_sort = true, 106 | float = { border = "rounded", source = "if_many" }, 107 | underline = { severity = vim.diagnostic.severity.ERROR }, 108 | signs = { 109 | text = { 110 | [vim.diagnostic.severity.ERROR] = "󰅚 ", 111 | [vim.diagnostic.severity.WARN] = "󰀪 ", 112 | [vim.diagnostic.severity.INFO] = "󰋽 ", 113 | [vim.diagnostic.severity.HINT] = "󰌶 ", 114 | }, 115 | }, 116 | virtual_lines = { current_line = true }, 117 | } 118 | -------------------------------------------------------------------------------- /home/dot_config/rg/config: -------------------------------------------------------------------------------- 1 | --colors 2 | match:fg:magenta 3 | --colors 4 | line:fg:green 5 | --colors 6 | path:fg:yellow 7 | -------------------------------------------------------------------------------- /home/dot_config/tlrc/config.toml: -------------------------------------------------------------------------------- 1 | [cache] 2 | dir = "~/Library/Caches/tlrc" 3 | mirror = "https://github.com/tldr-pages/tldr/releases/latest/download" 4 | auto_update = true 5 | max_age = 336 6 | languages = [] 7 | 8 | [output] 9 | show_title = true 10 | platform_title = false 11 | show_hyphens = false 12 | example_prefix = "- " 13 | compact = false 14 | raw_markdown = false 15 | 16 | [indent] 17 | title = 2 18 | description = 2 19 | bullet = 2 20 | example = 4 21 | 22 | [style.title] 23 | color = "magenta" 24 | background = "default" 25 | bold = true 26 | underline = false 27 | italic = false 28 | dim = false 29 | strikethrough = false 30 | 31 | [style.description] 32 | color = "magenta" 33 | background = "default" 34 | bold = false 35 | underline = false 36 | italic = false 37 | dim = false 38 | strikethrough = false 39 | 40 | [style.bullet] 41 | color = "green" 42 | background = "default" 43 | bold = false 44 | underline = false 45 | italic = false 46 | dim = false 47 | strikethrough = false 48 | 49 | [style.example] 50 | color = "white" 51 | background = "default" 52 | bold = true 53 | underline = false 54 | italic = false 55 | dim = false 56 | strikethrough = false 57 | 58 | [style.url] 59 | color = "red" 60 | background = "default" 61 | bold = false 62 | underline = false 63 | italic = true 64 | dim = false 65 | strikethrough = false 66 | 67 | [style.inline_code] 68 | color = "yellow" 69 | background = "default" 70 | bold = false 71 | underline = false 72 | italic = true 73 | dim = false 74 | strikethrough = false 75 | 76 | [style.placeholder] 77 | color = "white" 78 | background = "default" 79 | bold = false 80 | underline = false 81 | italic = true 82 | dim = false 83 | strikethrough = false 84 | -------------------------------------------------------------------------------- /home/dot_config/tmux/tmux.conf: -------------------------------------------------------------------------------- 1 | TMUX_CONFIG_DIR="$XDG_CONFIG_HOME/tmux" 2 | 3 | # Plugin location 4 | set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_CONFIG_DIR/plugins" 5 | 6 | # Prefix 7 | unbind C-b 8 | set -g prefix C-a 9 | bind a send-prefix 10 | 11 | # proper terminal color 12 | set -g default-terminal "screen-256color" 13 | set -ga terminal-overrides ",*256col*:Tc" 14 | 15 | # remove delay 16 | set -sg escape-time 0 17 | 18 | # keybinding in statusline 19 | set-option -g status-keys emacs 20 | 21 | # mouse 22 | set -g mouse on 23 | 24 | # terminal title 25 | set-option -g set-titles on 26 | 27 | # enable activity alerts 28 | setw -g monitor-activity off 29 | set -g visual-activity off 30 | 31 | # scroll history 32 | set -g history-limit 20000 33 | 34 | # window index starts with 1 35 | set -g base-index 1 36 | setw -g pane-base-index 1 37 | 38 | # renumber windows when closed 39 | set-option -g renumber-windows on 40 | 41 | # Don't health check 42 | set -g @fingers-skip-health-check '1' 43 | 44 | ################## 45 | ## Key Bindings ## 46 | ################## 47 | 48 | # reload tmux config 49 | bind r source-file ~/.tmux.conf \; display "Reloaded!" 50 | 51 | # set to vi keys 52 | setw -g mode-keys vi 53 | bind-key -Tcopy-mode-vi 'v' send -X begin-selection 54 | bind-key -Tcopy-mode-vi 'y' send -X copy-selection 55 | 56 | # resizing pane 57 | bind -r H resize-pane -L 10 58 | bind -r J resize-pane -D 10 59 | bind -r K resize-pane -U 10 60 | bind -r L resize-pane -R 10 61 | 62 | # use v and s for splitting pane 63 | bind-key v split-window -h 64 | bind-key s split-window -v 65 | 66 | # use to enter copy-mode 67 | bind Space copy-mode 68 | bind C-Space copy-mode 69 | 70 | bind -n S-left prev 71 | bind -n S-right next 72 | 73 | ######################### 74 | ## Tmux Plugin Manager ## 75 | ######################### 76 | 77 | # plugins 78 | set -g @tpm_plugins ' \ 79 | tmux-plugins/tpm \ 80 | tmux-plugins/tmux-yank \ 81 | tmux-plugins/tmux-copycat \ 82 | Morantron/tmux-fingers \ 83 | christoomey/vim-tmux-navigator \ 84 | tmux-plugins/tmux-prefix-highlight \ 85 | ' 86 | 87 | # now start 88 | run "$TMUX_CONFIG_DIR/plugins/tpm/tpm" 89 | -------------------------------------------------------------------------------- /home/dot_config/tmux/tmux.iterm.conf: -------------------------------------------------------------------------------- 1 | set -g status off 2 | set -g default-terminal "xterm-256color" 3 | set -sg escape-time 0 4 | set -g base-index 1 5 | setw -g pane-base-index 1 6 | set -g renumber-windows on 7 | -------------------------------------------------------------------------------- /home/dot_config/wezterm/wezterm.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require "wezterm" 2 | local act = wezterm.action 3 | 4 | local config = wezterm.config_builder() 5 | 6 | config.color_scheme = "zenbones" 7 | -- https://github.com/wez/wezterm/issues/3616 font looks too thin 8 | config.font = wezterm.font { family = "Zenbones Mono", harfbuzz_features = { "TXTR", "cv07=10", "cv10=13", "VSAG=1" } } 9 | config.font_size = 13 10 | config.line_height = 1.04 11 | config.initial_cols = 160 12 | config.initial_rows = 40 13 | config.front_end = "OpenGL" 14 | config.freetype_load_target = "Light" 15 | config.freetype_load_flags = "NO_HINTING" 16 | config.freetype_render_target = "HorizontalLcd" 17 | -- config.automatically_reload_config = false 18 | 19 | config.keys = { 20 | { 21 | key = "h", 22 | mods = "ALT", 23 | action = act.ActivatePaneDirection "Left", 24 | }, 25 | { 26 | key = "l", 27 | mods = "ALT", 28 | action = act.ActivatePaneDirection "Right", 29 | }, 30 | { 31 | key = "k", 32 | mods = "ALT", 33 | action = act.ActivatePaneDirection "Up", 34 | }, 35 | { 36 | key = "j", 37 | mods = "ALT", 38 | action = act.ActivatePaneDirection "Down", 39 | }, 40 | } 41 | 42 | config.unix_domains = { 43 | { 44 | name = "fo", 45 | }, 46 | } 47 | 48 | wezterm.on("gui-startup", function() 49 | -- require("workspaces").setup() 50 | end) 51 | 52 | config.window_frame = { 53 | font = wezterm.font { family = "Zenbones Mono", weight = "Bold" }, 54 | } 55 | 56 | config.window_padding = { 57 | left = 8, 58 | right = 8, 59 | top = 0, 60 | bottom = 0, 61 | } 62 | 63 | return config 64 | -------------------------------------------------------------------------------- /home/dot_config/zed/settings.json: -------------------------------------------------------------------------------- 1 | // Zed settings 2 | // 3 | // For information on how to configure Zed, see the Zed 4 | // documentation: https://zed.dev/docs/configuring-zed 5 | // 6 | // To see all of Zed's default settings without changing your 7 | // custom settings, run the `open default settings` command 8 | // from the command palette or from `Zed` application menu. 9 | { 10 | "theme": "Rosé Pine Dawn", 11 | "buffer_font_size": 13, 12 | "vim_mode": true, 13 | "buffer_font_family": "Zenbones Mono", 14 | "ui_font_family": "SF Compact Text", 15 | "ui_font_size": 15 16 | } 17 | -------------------------------------------------------------------------------- /home/dot_config/zsh/aliases.zsh: -------------------------------------------------------------------------------- 1 | # General 2 | alias mkdir="mkdir -p" 3 | alias trs="trash" 4 | alias du="du -kh" 5 | alias df="df -kh" 6 | alias which="command -v" 7 | # alias sudo="sudo " 8 | 9 | # Vim 10 | alias v="nvim" 11 | 12 | # While in a nvim terminal, open file to current session 13 | if [ -n "${NVIM_LISTEN_ADDRESS+x}" ]; then 14 | alias nvh='nvr -o' 15 | alias nvv='nvr -O' 16 | alias nvt='nvr --remote-tab' 17 | fi 18 | 19 | # Quick piping 20 | alias -g L="| less" 21 | alias -g Z="| fzf" 22 | alias -g G="| rg" 23 | alias -g C="| pbcopy" 24 | 25 | # Fzf 26 | alias ff="fzf" 27 | 28 | # Cd 29 | alias ".."="cd .." 30 | alias "..."="cd ../.." 31 | alias "...."="cd ../../.." 32 | 33 | # 34 | # Git 35 | # 36 | 37 | # Branch 38 | alias g="git" 39 | alias gb="git branch -vv" 40 | alias gbc="git checkout -b" 41 | alias gbx="git branch -d" 42 | alias gbX="git branch -D" 43 | 44 | # Commit 45 | alias gc="git commit -S --verbose" 46 | alias gco="git checkout" 47 | alias gce="git commit -S --amend --reuse-message HEAD" 48 | 49 | # Files 50 | alias gls="git ls-files" 51 | 52 | # Fetch 53 | alias gf="git fetch" 54 | alias gpl="git pull" 55 | 56 | # Index 57 | alias ga="git add" 58 | 59 | # Log 60 | alias gl="git log --topo-order --abbrev-commit --pretty=format:'%C(auto)%h %ae%n%s%n' " 61 | alias gll="git log --topo-order --oneline" 62 | alias glv="git log --topo-order --pretty=medium" 63 | alias glf="fshow" 64 | 65 | # Merge 66 | alias gm="git merge" 67 | 68 | # Push 69 | alias gp="git push" 70 | alias gpu="git push -u" 71 | 72 | # Rebase 73 | alias gr="git rebase" 74 | alias gra="git rebase --abort" 75 | alias grc="git rebase --continue" 76 | 77 | # Stash 78 | alias gst="git stash" 79 | 80 | # Status 81 | alias gs="git status --short" 82 | alias gsv="git status" 83 | 84 | # Diff 85 | alias gd="git diff" 86 | alias gds="git diff --stat --color" 87 | 88 | # Tag 89 | alias gt="git tag" 90 | alias gta="git tag -s -a" 91 | alias gtd="git tag -d" 92 | 93 | # Others 94 | alias ge="git edit" 95 | alias gcl="git clone" 96 | 97 | # ls 98 | alias l='ls -1A' # Lists in one column, hidden files. 99 | alias ll='ls -lh' # Lists human readable sizes. 100 | alias lr='ll -R' # Lists human readable sizes, recursively. 101 | alias la='ll -A' # Lists human readable sizes, hidden files. 102 | alias lm='la | "$PAGER"' # Lists human readable sizes, hidden files through pager. 103 | alias lk='ll -Sr' # Lists sorted by size, largest last. 104 | alias lt='ll -tr' # Lists sorted by date, most recent last. 105 | alias lc='lt -c' # Lists sorted by date, most recent last, shows change time. 106 | alias lu='lt -u' # Lists sorted by date, most recent last, shows access time. 107 | alias sl='ls' # I often screw this up. 108 | alias al='la' # I often screw this up. 109 | 110 | # Clipboard 111 | alias pbc="pbcopy" 112 | alias pbp="pbpaste" 113 | 114 | alias s="kitten ssh" 115 | -------------------------------------------------------------------------------- /home/dot_config/zsh/completions.zsh: -------------------------------------------------------------------------------- 1 | unsetopt CASE_GLOB 2 | 3 | # Use caching to make completion for commands such as dpkg and apt usable. 4 | zstyle ':completion::complete:*' use-cache on 5 | zstyle ':completion::complete:*' cache-path "${XDG_CACHE_HOME}/zsh/compcache" 6 | zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 7 | 8 | # Group matches and describe. 9 | zstyle ':completion:*:*:*:*:*' menu select 10 | zstyle ':completion:*:matches' group 'yes' 11 | zstyle ':completion:*:options' description 'yes' 12 | zstyle ':completion:*:options' auto-description '%d' 13 | zstyle ':completion:*:corrections' format ' %F{green}-- %d (errors: %e) --%f' 14 | zstyle ':completion:*:descriptions' format ' %F{yellow}-- %d --%f' 15 | zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f' 16 | zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f' 17 | zstyle ':completion:*:default' list-prompt '%S%M matches%s' 18 | zstyle ':completion:*' format ' %F{yellow}-- %d --%f' 19 | zstyle ':completion:*' group-name '' 20 | zstyle ':completion:*' verbose yes 21 | 22 | # Fuzzy match mistyped completions. 23 | zstyle ':completion:*' completer _complete _match _approximate 24 | zstyle ':completion:*:match:*' original only 25 | zstyle ':completion:*:approximate:*' max-errors 1 numeric 26 | 27 | # Increase the number of errors based on the length of the typed word. 28 | zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)' 29 | 30 | # Don't complete unavailable commands. 31 | zstyle ':completion:*:functions' ignored-patterns '(_*|pre(cmd|exec))' 32 | 33 | # Array completion element sorting. 34 | zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters 35 | 36 | # Directories 37 | zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} 38 | zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories 39 | zstyle ':completion:*:*:cd:*:directory-stack' menu yes select 40 | zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand' 41 | zstyle ':completion:*' squeeze-slashes true 42 | 43 | # History 44 | zstyle ':completion:*:history-words' stop yes 45 | zstyle ':completion:*:history-words' remove-all-dups yes 46 | zstyle ':completion:*:history-words' list false 47 | zstyle ':completion:*:history-words' menu yes 48 | 49 | # Environmental Variables 50 | zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-} 51 | 52 | # Populate hostname completion. But allow ignoring custom entries from static 53 | # */etc/hosts* which might be uninteresting. 54 | zstyle -a ':prezto:module:completion:*:hosts' etc-host-ignores '_etc_host_ignores' 55 | 56 | zstyle -e ':completion:*:hosts' hosts 'reply=( 57 | ${=${=${=${${(f)"$(cat {/etc/ssh/ssh_,~/.ssh/}known_hosts(|2)(N) 2> /dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ } 58 | ${=${(f)"$(cat /etc/hosts(|)(N) <<(ypcat hosts 2> /dev/null))"}%%(\#${_etc_host_ignores:+|${(j:|:)~_etc_host_ignores}})*} 59 | ${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2> /dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}} 60 | )' 61 | 62 | # Don't complete uninteresting users... 63 | zstyle ':completion:*:*:*:users' ignored-patterns \ 64 | adm amanda apache avahi beaglidx bin cacti canna clamav daemon \ 65 | dbus distcache dovecot fax ftp games gdm gkrellmd gopher \ 66 | hacluster haldaemon halt hsqldb ident junkbust ldap lp mail \ 67 | mailman mailnull mldonkey mysql nagios \ 68 | named netdump news nfsnobody nobody nscd ntp nut nx openvpn \ 69 | operator pcap postfix postgres privoxy pulse pvm quagga radvd \ 70 | rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs '_*' 71 | 72 | # ... unless we really want to. 73 | zstyle '*' single-ignored show 74 | 75 | # Ignore multiple entries. 76 | zstyle ':completion:*:(rm|kill|diff):*' ignore-line other 77 | zstyle ':completion:*:rm:*' file-patterns '*:all-files' 78 | 79 | # Kill 80 | zstyle ':completion:*:*:*:*:processes' command 'ps -u $LOGNAME -o pid,user,command -w' 81 | zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;36=0=01' 82 | zstyle ':completion:*:*:kill:*' menu yes select 83 | zstyle ':completion:*:*:kill:*' force-list always 84 | zstyle ':completion:*:*:kill:*' insert-ids single 85 | 86 | # Man 87 | zstyle ':completion:*:manuals' separate-sections true 88 | zstyle ':completion:*:manuals.(^1*)' insert-sections true 89 | 90 | # SSH/SCP/RSYNC 91 | zstyle ':completion:*:(ssh|scp|rsync):*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *' 92 | zstyle ':completion:*:(scp|rsync):*' group-order users files all-files hosts-domain hosts-host hosts-ipaddr 93 | zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr 94 | zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost 95 | zstyle ':completion:*:(ssh|scp|rsync):*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*' 96 | zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*' 97 | -------------------------------------------------------------------------------- /home/dot_config/zsh/dot_zprofile: -------------------------------------------------------------------------------- 1 | # Language 2 | export LANGUAGE=en_US.UTF-8 3 | export LANG=en_US.UTF-8 4 | export LC_CTYPE=en_US.UTF-8 5 | export LC_ALL=en_US.UTF-8 6 | 7 | export LESS='-F -g -i -M -R -S -w -X -z-4 -j4' 8 | 9 | # LS 10 | export CLICOLOR=1 11 | export LSCOLORS=Hxfxcxdxbxhgahhbhehchd 12 | export LS_COLORS='di=1;37:ln=35:so=32:pi=33:ex=31:bd=37;46:cd=30;47:su=37;41:sg=37;44:tw=37;42:ow=37;43' 13 | 14 | # Android 15 | export ANDROID_SDK_ROOT="$HOME"/Library/Android/sdk 16 | export ANDROID_HOME="$HOME"/Library/Android/sdk 17 | 18 | export RBENV_VERSION=3.1.1 19 | 20 | export HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK=1 21 | 22 | # Manually moving some to XDG 23 | export RIPGREP_CONFIG_PATH="$XDG_CONFIG_HOME"/rg/config 24 | export npm_config_userconfig="$XDG_CONFIG_HOME"/npm/config 25 | export npm_config_cache="$XDG_CACHE_HOME"/npm 26 | export npm_config_prefix="$XDG_DATA_HOME"/npm 27 | export npm_config_init_module="$XDG_DATA_HOME"/npm/config/npm-init.js 28 | export NO_UPDATE_NOTIFIER=1 29 | export NVM_DIR="$XDG_DATA_HOME"/nvm 30 | export NODE_REPL_HISTORY="$XDG_DATA_HOME"/node/repl_history 31 | export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle 32 | export BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle 33 | export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle 34 | export PUB_CACHE="$XDG_CACHE_HOME"/pub-cache 35 | export GEM_HOME="$XDG_DATA_HOME"/gem 36 | # export RBENV_ROOT="$XDG_DATA_HOME"/rbenv 37 | export GEM_SPEC_CACHE="$XDG_CACHE_HOME"/gem/specs 38 | export CP_HOME_DIR="$XDG_CACHE_HOME"/cocoapods 39 | export CARGO_HOME="$XDG_DATA_HOME"/cargo 40 | export RUSTUP_HOME="$XDG_DATA_HOME"/rustup 41 | export GRADLE_USER_HOME="$XDG_CACHE_HOME"/gradle 42 | export PSQL_HISTORY="$XDG_DATA_HOME"/psql/history 43 | export MYSQL_HISTFILE="$XDG_DATA_HOME"/mysql/history 44 | export DOCKER_CONFIG="$XDG_CONFIG_HOME"/docker 45 | export MBOX="$XDG_DATA_HOME"/mail/mbox 46 | export PASSWORD_STORE_DIR="$XDG_DATA_HOME"/pass 47 | # export ANDROID_EMULATOR_HOME="$XDG_DATA_HOME"/android 48 | export GNUPGHOME="$XDG_DATA_HOME"/gnupg 49 | # export VAGRANT_HOME="$XDG_DATA_HOME"/vagrant 50 | # export VAGRANT_ALIAS_FILE="$XDG_DATA_HOME"/vagrant/aliases 51 | # export VOLTA_HOME="$XDG_DATA_HOME"/volta 52 | 53 | 54 | path+=( 55 | "$XDG_DATA_HOME"/gem/bin 56 | "$XDG_DATA_HOME"/cargo/bin 57 | "$XDG_DATA_HOME"/npm/bin 58 | "$HOME"/Library/Python/3.9/bin 59 | # "$VOLTA_HOME"/bin 60 | "$ANDROID_HOME"/{emulator,tools,tools/bin,platform-tools} 61 | ) 62 | 63 | eval "$(/opt/homebrew/bin/brew shellenv)" 64 | 65 | # Ensure unique path 66 | typeset -gU cdpath fpath mailpath path 67 | -------------------------------------------------------------------------------- /home/dot_config/zsh/dot_zshrc: -------------------------------------------------------------------------------- 1 | fpath+=("$(brew --prefix)/share/zsh/site-functions") 2 | 3 | # General 4 | autoload -Uz compinit; compinit 5 | autoload -Uz colors; colors 6 | autoload history-search-end 7 | 8 | # Smart Url 9 | autoload -Uz url-quote-magic 10 | zle -N self-insert url-quote-magic 11 | 12 | # Edit command line with EDITOR 13 | autoload -Uz edit-command-line 14 | zle -N edit-command-line 15 | 16 | WORDCHARS="*?_-.[]~=&;!#$%^(){}<>" 17 | 18 | export HISTFILE="$XDG_DATA_HOME"/zsh/history 19 | export HISTSIZE=20000 20 | export SAVEHIST=20000 21 | 22 | # Emacs keybindings 23 | bindkey -e 24 | 25 | local srcdir="$XDG_CONFIG_HOME/zsh" 26 | 27 | # Shell options 28 | source "$srcdir/shelloptions.zsh" 29 | 30 | export PURE_PROMPT_SYMBOL="❫" 31 | zstyle :prompt:pure:path color white 32 | zstyle :prompt:pure:git:branch color green 33 | zstyle :prompt:pure:git:branch:cached color green 34 | zstyle :prompt:pure:git:dirty color white 35 | zstyle :prompt:pure:git:arrow color white 36 | zstyle :prompt:pure:git:stash color white 37 | zstyle :prompt:pure:prompt:error color red 38 | zstyle :prompt:pure:git:stash show yes 39 | autoload -U promptinit; promptinit 40 | prompt pure 41 | 42 | export FZF_DEFAULT_OPTS="--color='fg:white,fg+:white:bold,bg+:bright-black,hl:magenta:bold,marker:white:bold,prompt:blue,info:yellow' --bind=down:half-page-down,up:half-page-up" 43 | export FZF_DEFAULT_COMMAND="fd --type f \ 44 | --hidden \ 45 | --exclude .git \ 46 | --exclude .DS_Store \ 47 | --exclude .localized" 48 | export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" 49 | export FZF_PREVIEW_COMMAND="cat {}" 50 | 51 | # Completions 52 | source "$srcdir/completions.zsh" 53 | 54 | # Keybindings 55 | source "$srcdir/keys.zsh" 56 | 57 | # Functions 58 | for fn ($srcdir/functions/*.zsh) source $fn 59 | 60 | # Aliases 61 | source "$srcdir/aliases.zsh" 62 | 63 | eval "$(fzf --zsh)" 64 | 65 | eval "$(zoxide init zsh --cmd j)" 66 | 67 | source "$(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh" 68 | 69 | # Ensure unique path 70 | typeset -gU cdpath fpath mailpath path 71 | -------------------------------------------------------------------------------- /home/dot_config/zsh/functions/fzf.zsh: -------------------------------------------------------------------------------- 1 | # Open file 2 | # fe [FUZZY PATTERN] - Open the selected file with the default editor 3 | # - Bypass fuzzy finder if there's only one match (--select-1) 4 | # - Exit if there's no match (--exit-0) 5 | function fe { 6 | local files 7 | IFS=$'\n' files=($(fzf --query="$1" --multi --select-1 --exit-0)) 8 | [[ -n "$files" ]] && ${EDITOR:-vim} "${files[@]}" 9 | } 10 | 11 | # fcd - cd to selected directory 12 | function fcd { 13 | local dir 14 | dir=$(fd . "${1:-.}" --type=d | fzf --no-multi --layout=reverse --height=40%) && 15 | cd "$dir" 16 | } 17 | 18 | # fcda - including hidden directories 19 | function fcda { 20 | local dir 21 | dir=$(fd . "${1:-.}" --hidden --type=d | fzf --no-multi --layout=reverse --height=40%) && 22 | cd "$dir" 23 | } 24 | 25 | # cdf - cd into the directory of the selected file 26 | function cds { 27 | local file 28 | local dir 29 | file=$(fzf --query "$1" --no-multi --layout=reverse --height=40%) && dir=$(dirname "$file") && cd "$dir" 30 | } 31 | 32 | # Git 33 | 34 | # fcb - git commit browser 35 | function fcb { 36 | git log --graph --color=always \ 37 | --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | 38 | fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \ 39 | --bind "ctrl-m:execute: 40 | (grep -o '[a-f0-9]\{7\}' | head -1 | 41 | xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF' 42 | {} 43 | FZF-EOF" 44 | } 45 | 46 | # fstash - easier way to deal with stashes 47 | # type fstash to get a list of your stashes 48 | # enter shows you the contents of the stash 49 | # ctrl-d shows a diff of the stash against your current HEAD 50 | # ctrl-b checks the stash out as a branch, for easier merging 51 | function fgst { 52 | local out q k sha 53 | while out=$( 54 | git stash list --pretty="%C(yellow)%h %>(14)%Cgreen%cr %C(blue)%gs" | 55 | fzf --ansi --no-sort --query="$q" --print-query \ 56 | --expect=ctrl-d,ctrl-b); 57 | do 58 | mapfile -t out <<< "$out" 59 | q="${out[0]}" 60 | k="${out[1]}" 61 | sha="${out[-1]}" 62 | sha="${sha%% *}" 63 | [[ -z "$sha" ]] && continue 64 | if [[ "$k" == 'ctrl-d' ]]; then 65 | git diff $sha 66 | elif [[ "$k" == 'ctrl-b' ]]; then 67 | git stash branch "stash-$sha" $sha 68 | break; 69 | else 70 | git stash show -p $sha 71 | fi 72 | done 73 | } 74 | 75 | # fbr - checkout git branch (including remote branches) 76 | function fbr { 77 | local branches branch 78 | branches=$(git branch --all | grep -v HEAD) && 79 | branch=$(echo "$branches" | 80 | fzf --delimiter=$(( 2 + $(wc -l <<< "$branches") )) --no-multi --layout=reverse --height=40%) && 81 | git checkout $(echo "$branch" | sed "s/.* //" | sed "s#remotes/[^/]*/##") 82 | } 83 | 84 | # fcoc - checkout git commit 85 | function fcoc { 86 | local commits commit 87 | commits=$(git log --pretty=oneline --abbrev-commit --reverse) && 88 | commit=$(echo "$commits" | fzf --tac --no-sort --no-multi --exact) && 89 | git checkout $(echo "$commit" | sed "s/ .*//") 90 | } 91 | 92 | # Tmux 93 | function fta { 94 | local session 95 | session=$(tmux list-sessions -F "#{session_name}" | \ 96 | fzf --layout=reverse --height=20% --query="$1" --select-1 --exit-0) && 97 | tmux -CC attach -d -t "$session" 98 | } 99 | -------------------------------------------------------------------------------- /home/dot_config/zsh/functions/general.zsh: -------------------------------------------------------------------------------- 1 | # cd into the current Finder directory 2 | function cdf { 3 | local dir 4 | dir=$(osascript -e 'tell application "Finder" to get the POSIX path of (target of front window as alias)' 2> /dev/null) \ 5 | && cd "$dir" 6 | } 7 | 8 | # Makes a directory and changes to it. 9 | function mkdcd { 10 | [[ -n "$1" ]] && mkdir -p "$1" && builtin cd "$1" 11 | } 12 | 13 | # Changes to a directory and lists its contents. 14 | function cdls { 15 | builtin cd "$argv[-1]" && ls "${(@)argv[1,-2]}" 16 | } 17 | -------------------------------------------------------------------------------- /home/dot_config/zsh/keys.zsh: -------------------------------------------------------------------------------- 1 | # Use vim-like keys for history substring 2 | bindkey -M emacs '^P' history-substring-search-up 3 | bindkey -M emacs '^N' history-substring-search-down 4 | 5 | # Shift + Tab for cycle back completions 6 | bindkey '^[[Z' reverse-menu-complete 7 | 8 | # Edit command 9 | bindkey '^X^E' edit-command-line 10 | 11 | # Fast vim swithing from sheerun 12 | fancy-ctrl-z () { 13 | if [[ $#BUFFER -eq 0 ]]; then 14 | BUFFER="fg" 15 | zle accept-line 16 | else 17 | zle push-input 18 | zle clear-screen 19 | fi 20 | } 21 | zle -N fancy-ctrl-z 22 | bindkey '^Z' fancy-ctrl-z 23 | -------------------------------------------------------------------------------- /home/dot_config/zsh/shelloptions.zsh: -------------------------------------------------------------------------------- 1 | # General 2 | setopt BRACE_CCL # Allow brace character class list expansion. 3 | setopt LONG_LIST_JOBS # List jobs in the long format by default. 4 | setopt AUTO_RESUME # Attempt to resume existing job before creating a new process. 5 | setopt NOTIFY # Report status of background jobs immediately. 6 | unsetopt BG_NICE # Don't run all background jobs at a lower priority. 7 | unsetopt HUP # Don't kill jobs on shell exit. 8 | unsetopt CHECK_JOBS # Don't report on jobs when shell exit. 9 | setopt CORRECT # Corrent command 10 | 11 | # Directories 12 | setopt AUTO_PUSHD # Push the old directory onto the stack on cd. 13 | setopt PUSHD_IGNORE_DUPS # Do not store duplicates in the stack. 14 | setopt PUSHD_SILENT # Do not print the directory stack after pushd or popd. 15 | setopt PUSHD_TO_HOME # Push to home directory when no argument is given. 16 | setopt CDABLE_VARS # Change directory to a path stored in a variable. 17 | setopt MULTIOS # Write to multiple descriptors. 18 | unsetopt CLOBBER # Do not overwrite existing files with > and >>. 19 | # Use >! and >>! to bypass 20 | 21 | # History 22 | setopt BANG_HIST # Treat the '!' character specially during expansion. 23 | setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format. 24 | setopt SHARE_HISTORY # Share history between all sessions. 25 | setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history. 26 | setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again. 27 | setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate. 28 | setopt HIST_FIND_NO_DUPS # Do not display a previously found event. 29 | setopt HIST_IGNORE_SPACE # Do not record an event starting with a space. 30 | setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file. 31 | setopt HIST_VERIFY # Do not execute immediately upon history expansion. 32 | setopt HIST_BEEP # Beep when accessing non-existent history. 33 | 34 | # Completions 35 | setopt COMPLETE_IN_WORD # Complete from both ends of a word. 36 | setopt ALWAYS_TO_END # Move cursor to the end of a completed word. 37 | setopt PATH_DIRS # Perform path search even on command names with slashes. 38 | setopt AUTO_MENU # Show completion menu on a successive tab press. 39 | setopt AUTO_LIST # Automatically list choices on ambiguous completion. 40 | setopt AUTO_PARAM_SLASH # If completed parameter is a directory, add a trailing slash. 41 | setopt EXTENDED_GLOB # Needed for file modification glob modifiers with compinit 42 | unsetopt MENU_COMPLETE # Do not autoselect the first completion entry. 43 | unsetopt FLOW_CONTROL # Disable start/stop characters in shell editor. 44 | -------------------------------------------------------------------------------- /home/dot_vim/vimrc: -------------------------------------------------------------------------------- 1 | unlet! skip_defaults_vim 2 | source $VIMRUNTIME/defaults.vim 3 | 4 | " let mapleader = "\" 5 | 6 | set noswapfile 7 | set viminfo+=n~/.vim/viminfo 8 | 9 | let g:nnn#layout = #{ window: #{ width: 0.9, height: 0.6 } } 10 | 11 | call plug#begin('$HOME/.vim/vendor') 12 | 13 | Plug '~/vimming/nnn.vim' 14 | Plug '~/vimming/zenbones.nvim' 15 | 16 | call plug#end() 17 | 18 | let &t_ZH="\e[3m" 19 | let &t_ZR="\e[23m" 20 | 21 | set laststatus=2 22 | set termguicolors 23 | set background=light 24 | colorscheme zenbones 25 | -------------------------------------------------------------------------------- /home/dot_zshenv: -------------------------------------------------------------------------------- 1 | # Language 2 | export LANGUAGE=en_US.UTF-8 3 | export LANG=en_US.UTF-8 4 | export LC_CTYPE=en_US.UTF-8 5 | export LC_ALL=en_US.UTF-8 6 | 7 | # XDG 8 | if [[ -z "$XDG_CONFIG_HOME" ]]; then 9 | export XDG_CONFIG_HOME="$HOME"/.config 10 | fi 11 | 12 | if [[ -z "$XDG_CACHE_HOME" ]]; then 13 | export XDG_CACHE_HOME="$HOME"/.cache 14 | fi 15 | 16 | if [[ -z "$XDG_DATA_HOME" ]]; then 17 | export XDG_DATA_HOME="$HOME"/.local/share 18 | fi 19 | 20 | if [[ -z "$XDG_STATE_HOME" ]]; then 21 | export XDG_STATE_HOME="$HOME"/.local/state 22 | fi 23 | 24 | if [[ -z "$XDG_DATA_DIRS" ]]; then 25 | export XDG_DATA_DIRS=/usr/local/share:/usr/share 26 | fi 27 | 28 | if [[ -z "$XDG_CONFIG_DIRS" ]]; then 29 | export XDG_CONFIG_DIRS=/etc/xdg 30 | else 31 | export XDG_CONFIG_DIRS=/etc/xdg:"$XDG_CONFIG_DIRS" 32 | fi 33 | 34 | # Zsh 35 | export ZDOTDIR="$XDG_CONFIG_HOME"/zsh 36 | 37 | # PAGER 38 | export PAGER=less 39 | export LESSHISTFILE="$XDG_CACHE_HOME"/less/history 40 | 41 | # Default Editor 42 | export EDITOR='nvim' 43 | export VISUAL='nvim' 44 | -------------------------------------------------------------------------------- /home/private_Library/LaunchAgents/environment.plist.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Label 8 | environment 9 | ProgramArguments 10 | 11 | sh 12 | -c 13 | 14 | launchctl setenv GNUPGHOME {{ .chezmoi.homeDir }}/.local/share/gnupg 15 | 16 | 17 | RunAtLoad 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /home/private_Library/private_Application Support/com.mitchellh.ghostty/config: -------------------------------------------------------------------------------- 1 | font-family = Zenbones Mono 2 | font-style-bold = Semibold 3 | font-style-bold-italic = Semibold Italic 4 | font-synthetic-style = false 5 | theme = light:zenbones_light,dark:zenbones_dark 6 | window-height = 48 7 | window-width = 160 8 | adjust-cell-height = 2 9 | adjust-cursor-height = 2 10 | adjust-cursor-thickness = 2 11 | 12 | font-feature = TXTR 13 | # doesn't work at the moment 14 | font-feature = cv07=10 15 | font-feature = cv10=13 16 | 17 | cursor-color = 2c363c 18 | -------------------------------------------------------------------------------- /home/private_Library/private_Preferences/display-switch.ini.tmpl: -------------------------------------------------------------------------------- 1 | usb_device = "1a40:0101" 2 | on_usb_connect_execute = "{{ .chezmoi.homeDir }}/.local/bin/lunar set input lghdmi1" 3 | -------------------------------------------------------------------------------- /home/private_dot_cache/node/empty_dot_gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcchrish/dotfiles/e8eaa522948729e20555e7c9a4512fac825d9061/home/private_dot_cache/node/empty_dot_gitkeep -------------------------------------------------------------------------------- /home/private_dot_cache/private_zsh/empty_dot_gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcchrish/dotfiles/e8eaa522948729e20555e7c9a4512fac825d9061/home/private_dot_cache/private_zsh/empty_dot_gitkeep -------------------------------------------------------------------------------- /home/private_dot_cache/psql/empty_dot_gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcchrish/dotfiles/e8eaa522948729e20555e7c9a4512fac825d9061/home/private_dot_cache/psql/empty_dot_gitkeep -------------------------------------------------------------------------------- /home/private_dot_local/private_share/gnupg/gpg-agent.conf: -------------------------------------------------------------------------------- 1 | use-standard-socket 2 | 3 | # pinentry-program 4 | default-cache-ttl 600 5 | max-cache-ttl 7200 6 | pinentry-program /opt/homebrew/bin/pinentry-mac 7 | -------------------------------------------------------------------------------- /home/private_dot_local/private_share/gnupg/gpg.conf: -------------------------------------------------------------------------------- 1 | # Options for GnuPG 2 | # Copyright 1998, 1999, 2000, 2001, 2002, 2003, 3 | # 2010 Free Software Foundation, Inc. 4 | # 5 | # This file is free software; as a special exception the author gives 6 | # unlimited permission to copy and/or distribute it, with or without 7 | # modifications, as long as this notice is preserved. 8 | # 9 | # This file is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the 11 | # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # 13 | # Unless you specify which option file to use (with the command line 14 | # option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf 15 | # by default. 16 | # 17 | # An options file can contain any long options which are available in 18 | # GnuPG. If the first non white space character of a line is a '#', 19 | # this line is ignored. Empty lines are also ignored. 20 | # 21 | # See the man page for a list of options. 22 | 23 | # Uncomment the following option to get rid of the copyright notice 24 | 25 | #no-greeting 26 | 27 | # If you have more than 1 secret key in your keyring, you may want to 28 | # uncomment the following option and set your preferred keyid. 29 | 30 | default-key A9C0645CE9FC1230271A768E9ABC0DCACC50317D 31 | 32 | # If you do not pass a recipient to gpg, it will ask for one. Using 33 | # this option you can encrypt to a default key. Key validation will 34 | # not be done in this case. The second form uses the default key as 35 | # default recipient. 36 | 37 | #default-recipient some-user-id 38 | #default-recipient-self 39 | 40 | # Use --encrypt-to to add the specified key as a recipient to all 41 | # messages. This is useful, for example, when sending mail through a 42 | # mail client that does not automatically encrypt mail to your key. 43 | # In the example, this option allows you to read your local copy of 44 | # encrypted mail that you've sent to others. 45 | 46 | #encrypt-to some-key-id 47 | 48 | # By default GnuPG creates version 4 signatures for data files as 49 | # specified by OpenPGP. Some earlier (PGP 6, PGP 7) versions of PGP 50 | # require the older version 3 signatures. Setting this option forces 51 | # GnuPG to create version 3 signatures. 52 | 53 | #force-v3-sigs 54 | 55 | # Because some mailers change lines starting with "From " to ">From " 56 | # it is good to handle such lines in a special way when creating 57 | # cleartext signatures; all other PGP versions do it this way too. 58 | 59 | #no-escape-from-lines 60 | 61 | # If you do not use the Latin-1 (ISO-8859-1) charset, you should tell 62 | # GnuPG which is the native character set. Please check the man page 63 | # for supported character sets. This character set is only used for 64 | # metadata and not for the actual message which does not undergo any 65 | # translation. Note that future version of GnuPG will change to UTF-8 66 | # as default character set. In most cases this option is not required 67 | # as GnuPG is able to figure out the correct charset at runtime. 68 | 69 | #charset utf-8 70 | 71 | # Group names may be defined like this: 72 | # group mynames = paige 0x12345678 joe patti 73 | # 74 | # Any time "mynames" is a recipient (-r or --recipient), it will be 75 | # expanded to the names "paige", "joe", and "patti", and the key ID 76 | # "0x12345678". Note there is only one level of expansion - you 77 | # cannot make an group that points to another group. Note also that 78 | # if there are spaces in the recipient name, this will appear as two 79 | # recipients. In these cases it is better to use the key ID. 80 | 81 | #group mynames = paige 0x12345678 joe patti 82 | 83 | # Lock the file only once for the lifetime of a process. If you do 84 | # not define this, the lock will be obtained and released every time 85 | # it is needed, which is usually preferable. 86 | 87 | #lock-once 88 | 89 | # GnuPG can send and receive keys to and from a keyserver. These 90 | # servers can be HKP, email, or LDAP (if GnuPG is built with LDAP 91 | # support). 92 | # 93 | # Example HKP keyserver: 94 | # hkp://keys.gnupg.net 95 | # hkp://subkeys.pgp.net 96 | # 97 | # Example email keyserver: 98 | # mailto:pgp-public-keys@keys.pgp.net 99 | # 100 | # Example LDAP keyservers: 101 | # ldap://keyserver.pgp.com 102 | # 103 | # Regular URL syntax applies, and you can set an alternate port 104 | # through the usual method: 105 | # hkp://keyserver.example.net:22742 106 | # 107 | # Most users just set the name and type of their preferred keyserver. 108 | # Note that most servers (with the notable exception of 109 | # ldap://keyserver.pgp.com) synchronize changes with each other. Note 110 | # also that a single server name may actually point to multiple 111 | # servers via DNS round-robin. hkp://keys.gnupg.net is an example of 112 | # such a "server", which spreads the load over a number of physical 113 | # servers. To see the IP address of the server actually used, you may use 114 | # the "--keyserver-options debug". 115 | 116 | #keyserver 117 | #keyserver mailto:pgp-public-keys@keys.nl.pgp.net 118 | #keyserver ldap://keyserver.pgp.com 119 | 120 | # Common options for keyserver functions: 121 | # 122 | # include-disabled : when searching, include keys marked as "disabled" 123 | # on the keyserver (not all keyservers support this). 124 | # 125 | # no-include-revoked : when searching, do not include keys marked as 126 | # "revoked" on the keyserver. 127 | # 128 | # verbose : show more information as the keys are fetched. 129 | # Can be used more than once to increase the amount 130 | # of information shown. 131 | # 132 | # use-temp-files : use temporary files instead of a pipe to talk to the 133 | # keyserver. Some platforms (Win32 for one) always 134 | # have this on. 135 | # 136 | # keep-temp-files : do not delete temporary files after using them 137 | # (really only useful for debugging) 138 | # 139 | # http-proxy="proxy" : set the proxy to use for HTTP and HKP keyservers. 140 | # This overrides the "http_proxy" environment variable, 141 | # if any. 142 | # 143 | # auto-key-retrieve : automatically fetch keys as needed from the keyserver 144 | # when verifying signatures or when importing keys that 145 | # have been revoked by a revocation key that is not 146 | # present on the keyring. 147 | # 148 | # no-include-attributes : do not include attribute IDs (aka "photo IDs") 149 | # when sending keys to the keyserver. 150 | 151 | #keyserver-options auto-key-retrieve 152 | 153 | # Display photo user IDs in key listings 154 | 155 | # list-options show-photos 156 | 157 | # Display photo user IDs when a signature from a key with a photo is 158 | # verified 159 | 160 | # verify-options show-photos 161 | 162 | # Use this program to display photo user IDs 163 | # 164 | # %i is expanded to a temporary file that contains the photo. 165 | # %I is the same as %i, but the file isn't deleted afterwards by GnuPG. 166 | # %k is expanded to the key ID of the key. 167 | # %K is expanded to the long OpenPGP key ID of the key. 168 | # %t is expanded to the extension of the image (e.g. "jpg"). 169 | # %T is expanded to the MIME type of the image (e.g. "image/jpeg"). 170 | # %f is expanded to the fingerprint of the key. 171 | # %% is %, of course. 172 | # 173 | # If %i or %I are not present, then the photo is supplied to the 174 | # viewer on standard input. If your platform supports it, standard 175 | # input is the best way to do this as it avoids the time and effort in 176 | # generating and then cleaning up a secure temp file. 177 | # 178 | # If no photo-viewer is provided, GnuPG will look for xloadimage, eog, 179 | # or display (ImageMagick). On Mac OS X and Windows, the default is 180 | # to use your regular JPEG image viewer. 181 | # 182 | # Some other viewers: 183 | # photo-viewer "qiv %i" 184 | # photo-viewer "ee %i" 185 | # 186 | # This one saves a copy of the photo ID in your home directory: 187 | # photo-viewer "cat > ~/photoid-for-key-%k.%t" 188 | # 189 | # Use your MIME handler to view photos: 190 | # photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG" 191 | 192 | # Passphrase agent 193 | # 194 | # We support the old experimental passphrase agent protocol as well as 195 | # the new Assuan based one (currently available in the "newpg" package 196 | # at ftp.gnupg.org/gcrypt/alpha/aegypten/). To make use of the agent, 197 | # you have to run an agent as daemon and use the option 198 | # 199 | # use-agent 200 | # 201 | # which tries to use the agent but will fallback to the regular mode 202 | # if there is a problem connecting to the agent. The normal way to 203 | # locate the agent is by looking at the environment variable 204 | # GPG_AGENT_INFO which should have been set during gpg-agent startup. 205 | # In certain situations the use of this variable is not possible, thus 206 | # the option 207 | # 208 | # --gpg-agent-info=::1 209 | # 210 | # may be used to override it. 211 | 212 | # Automatic key location 213 | # 214 | # GnuPG can automatically locate and retrieve keys as needed using the 215 | # auto-key-locate option. This happens when encrypting to an email 216 | # address (in the "user@example.com" form), and there are no 217 | # user@example.com keys on the local keyring. This option takes the 218 | # following arguments, in the order they are to be tried: 219 | # 220 | # cert = locate a key using DNS CERT, as specified in RFC-4398. 221 | # GnuPG can handle both the PGP (key) and IPGP (URL + fingerprint) 222 | # CERT methods. 223 | # 224 | # pka = locate a key using DNS PKA. 225 | # 226 | # ldap = locate a key using the PGP Universal method of checking 227 | # "ldap://keys.(thedomain)". For example, encrypting to 228 | # user@example.com will check ldap://keys.example.com. 229 | # 230 | # keyserver = locate a key using whatever keyserver is defined using 231 | # the keyserver option. 232 | # 233 | # You may also list arbitrary keyservers here by URL. 234 | # 235 | # Try CERT, then PKA, then LDAP, then hkp://subkeys.net: 236 | auto-key-locate keyserver 237 | no-emit-version 238 | no-tty 239 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # XDG 4 | if [[ -z "$XDG_CONFIG_HOME" ]]; then 5 | export XDG_CONFIG_HOME="$HOME/.config" 6 | fi 7 | 8 | if [[ -z "$XDG_CACHE_HOME" ]]; then 9 | export XDG_CACHE_HOME="$HOME/.cache" 10 | fi 11 | 12 | if [[ -z "$XDG_DATA_HOME" ]]; then 13 | export XDG_DATA_HOME="$HOME/.local/share" 14 | fi 15 | 16 | if [[ -z "$XDG_STATE_HOME" ]]; then 17 | export XDG_STATE_HOME="$HOME/.local/state" 18 | fi 19 | 20 | if [[ -z "$XDG_DATA_DIRS" ]]; then 21 | export XDG_DATA_DIRS="/usr/local/share:/usr/share" 22 | fi 23 | 24 | if [[ -z "$XDG_CONFIG_DIRS" ]]; then 25 | export XDG_CONFIG_DIRS="/etc/xdg" 26 | else 27 | export XDG_CONFIG_DIRS="/etc/xdg:$XDG_CONFIG_DIRS" 28 | fi 29 | 30 | cd "$HOME" || exit 31 | 32 | git clone https://github.com/mcchrish/dotfiles .dotfiles 33 | 34 | cd .dotfiles || exit 35 | 36 | if ! (command -v brew > /dev/null); then 37 | echo "Installing brew..." 38 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 39 | fi 40 | 41 | echo "Install all programs..." 42 | /opt/homebrew/bin/brew bundle install 43 | 44 | echo "Apply config files..." 45 | /opt/homebrew/bin/chezmoi apply 46 | 47 | echo "Done. :)" 48 | -------------------------------------------------------------------------------- /selene.toml: -------------------------------------------------------------------------------- 1 | std="vim" 2 | 3 | [lints] 4 | mixed_table = "allow" 5 | -------------------------------------------------------------------------------- /vim.yml: -------------------------------------------------------------------------------- 1 | --- 2 | base: lua51 3 | 4 | globals: 5 | vim: 6 | any: true 7 | assert: 8 | args: 9 | - type: bool 10 | - type: string 11 | required: false 12 | after_each: 13 | args: 14 | - type: function 15 | before_each: 16 | args: 17 | - type: function 18 | describe: 19 | args: 20 | - type: string 21 | - type: function 22 | it: 23 | args: 24 | - type: string 25 | - type: function 26 | --------------------------------------------------------------------------------