this repo has no description

Compare changes

Choose any two refs to compare.

+15 -9
.zshrc
··· 1 1 # If you come from bash you might have to change your $PATH. 2 2 # export PATH=$HOME/bin:/usr/local/bin:$PATH 3 3 4 + export EDITOR=nvim 4 5 export PATH=$PATH:/home/hailey/go/bin 5 6 6 - export ZSH="$HOME/.oh-my-zsh" 7 - 8 - ZSH_THEME="af-magic" 7 + eval "$(starship init zsh)" 9 8 10 9 plugins=( 11 10 git 12 11 archlinux 13 - zsh-autosuggestions 14 - zsh-syntax-highlighting 15 12 ) 16 13 17 - source $ZSH/oh-my-zsh.sh 14 + # Set-up FZF key bindings (CTRL R for fuzzy history finder) 15 + source <(fzf --zsh) 16 + 18 17 source /usr/share/zsh/plugins/zsh-autocomplete/zsh-autocomplete.plugin.zsh 18 + source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 19 + source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 20 + 21 + bindkey '^f' autosuggest-accept 19 22 20 23 # Check archlinux plugin commands here 21 24 # https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/archlinux ··· 31 34 alias ls='eza -a --icons' 32 35 alias ll='eza -al --icons' 33 36 alias lt='eza -a --tree --level=1 --icons' 34 - 35 - # Set-up FZF key bindings (CTRL R for fuzzy history finder) 36 - source <(fzf --zsh) 37 37 38 38 HISTFILE=~/.zsh_history 39 39 HISTSIZE=10000 ··· 50 50 alias gs='git status' 51 51 alias gd='git pull' 52 52 alias diff='git diff' 53 + alias ga='git add' 54 + alias gp='git pull' 53 55 54 56 alias tswitch='sudo tailscale switch' 55 57 alias ts='sudo tailscale'o ··· 69 71 alias pubip='curl ipv4.icanhazip.com' 70 72 71 73 alias lsl='ls -l' 74 + 75 + alias geoip='uv run --project /home/hailey/bsky/ipres /home/hailey/bsky/ipres/main.py' 76 + 77 + alias cat='bat' 72 78 73 79 source /usr/share/nvm/init-nvm.sh 74 80 source /etc/profile.d/google-cloud-cli.sh
+1 -1
ghostty/config
··· 1 - font-size = 11 1 + font-size = 12 2 2 cursor-style-blink = true 3 3 cursor-click-to-move = true 4 4 mouse-hide-while-typing = true
+19
nvim/LICENSE.md
··· 1 + MIT License 2 + 3 + Permission is hereby granted, free of charge, to any person obtaining a copy 4 + of this software and associated documentation files (the "Software"), to deal 5 + in the Software without restriction, including without limitation the rights 6 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 + copies of the Software, and to permit persons to whom the Software is 8 + furnished to do so, subject to the following conditions: 9 + 10 + The above copyright notice and this permission notice shall be included in all 11 + copies or substantial portions of the Software. 12 + 13 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 + SOFTWARE.
+238
nvim/README.md
··· 1 + # kickstart.nvim 2 + 3 + ## Introduction 4 + 5 + A starting point for Neovim that is: 6 + 7 + * Small 8 + * Single-file 9 + * Completely Documented 10 + 11 + **NOT** a Neovim distribution, but instead a starting point for your configuration. 12 + 13 + ## Installation 14 + 15 + ### Install Neovim 16 + 17 + Kickstart.nvim targets *only* the latest 18 + ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest 19 + ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. 20 + If you are experiencing issues, please make sure you have the latest versions. 21 + 22 + ### Install External Dependencies 23 + 24 + External Requirements: 25 + - Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`) 26 + - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) 27 + - Clipboard tool (xclip/xsel/win32yank or other depending on the platform) 28 + - A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons 29 + - if you have it set `vim.g.have_nerd_font` in `init.lua` to true 30 + - Language Setup: 31 + - If you want to write Typescript, you need `npm` 32 + - If you want to write Golang, you will need `go` 33 + - etc. 34 + 35 + > **NOTE** 36 + > See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes 37 + > and quick install snippets 38 + 39 + ### Install Kickstart 40 + 41 + > **NOTE** 42 + > [Backup](#FAQ) your previous configuration (if any exists) 43 + 44 + Neovim's configurations are located under the following paths, depending on your OS: 45 + 46 + | OS | PATH | 47 + | :- | :--- | 48 + | Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | 49 + | Windows (cmd)| `%localappdata%\nvim\` | 50 + | Windows (powershell)| `$env:LOCALAPPDATA\nvim\` | 51 + 52 + #### Recommended Step 53 + 54 + [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo 55 + so that you have your own copy that you can modify, then install by cloning the 56 + fork to your machine using one of the commands below, depending on your OS. 57 + 58 + > **NOTE** 59 + > Your fork's URL will be something like this: 60 + > `https://github.com/<your_github_username>/kickstart.nvim.git` 61 + 62 + You likely want to remove `lazy-lock.json` from your fork's `.gitignore` file 63 + too - it's ignored in the kickstart repo to make maintenance easier, but it's 64 + [recommended to track it in version control](https://lazy.folke.io/usage/lockfile). 65 + 66 + #### Clone kickstart.nvim 67 + > **NOTE** 68 + > If following the recommended step above (i.e., forking the repo), replace 69 + > `nvim-lua` with `<your_github_username>` in the commands below 70 + 71 + <details><summary> Linux and Mac </summary> 72 + 73 + ```sh 74 + git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim 75 + ``` 76 + 77 + </details> 78 + 79 + <details><summary> Windows </summary> 80 + 81 + If you're using `cmd.exe`: 82 + 83 + ``` 84 + git clone https://github.com/nvim-lua/kickstart.nvim.git "%localappdata%\nvim" 85 + ``` 86 + 87 + If you're using `powershell.exe` 88 + 89 + ``` 90 + git clone https://github.com/nvim-lua/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim" 91 + ``` 92 + 93 + </details> 94 + 95 + ### Post Installation 96 + 97 + Start Neovim 98 + 99 + ```sh 100 + nvim 101 + ``` 102 + 103 + That's it! Lazy will install all the plugins you have. Use `:Lazy` to view 104 + the current plugin status. Hit `q` to close the window. 105 + 106 + #### Read The Friendly Documentation 107 + 108 + Read through the `init.lua` file in your configuration folder for more 109 + information about extending and exploring Neovim. That also includes 110 + examples of adding popularly requested plugins. 111 + 112 + > [!NOTE] 113 + > For more information about a particular plugin check its repository's documentation. 114 + 115 + 116 + ### Getting Started 117 + 118 + [The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o) 119 + 120 + ### FAQ 121 + 122 + * What should I do if I already have a pre-existing Neovim configuration? 123 + * You should back it up and then delete all associated files. 124 + * This includes your existing init.lua and the Neovim files in `~/.local` 125 + which can be deleted with `rm -rf ~/.local/share/nvim/` 126 + * Can I keep my existing configuration in parallel to kickstart? 127 + * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME` 128 + to maintain multiple configurations. For example, you can install the kickstart 129 + configuration in `~/.config/nvim-kickstart` and create an alias: 130 + ``` 131 + alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim' 132 + ``` 133 + When you run Neovim using `nvim-kickstart` alias it will use the alternative 134 + config directory and the matching local directory 135 + `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim 136 + distribution that you would like to try out. 137 + * What if I want to "uninstall" this configuration: 138 + * See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information 139 + * Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files? 140 + * The main purpose of kickstart is to serve as a teaching tool and a reference 141 + configuration that someone can easily use to `git clone` as a basis for their own. 142 + As you progress in learning Neovim and Lua, you might consider splitting `init.lua` 143 + into smaller parts. A fork of kickstart that does this while maintaining the 144 + same functionality is available here: 145 + * [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim) 146 + * Discussions on this topic can be found here: 147 + * [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218) 148 + * [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473) 149 + 150 + ### Install Recipes 151 + 152 + Below you can find OS specific install instructions for Neovim and dependencies. 153 + 154 + After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step. 155 + 156 + #### Windows Installation 157 + 158 + <details><summary>Windows with Microsoft C++ Build Tools and CMake</summary> 159 + Installation may require installing build tools and updating the run command for `telescope-fzf-native` 160 + 161 + See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation) 162 + 163 + This requires: 164 + 165 + - Install CMake and the Microsoft C++ Build Tools on Windows 166 + 167 + ```lua 168 + {'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } 169 + ``` 170 + </details> 171 + <details><summary>Windows with gcc/make using chocolatey</summary> 172 + Alternatively, one can install gcc and make which don't require changing the config, 173 + the easiest way is to use choco: 174 + 175 + 1. install [chocolatey](https://chocolatey.org/install) 176 + either follow the instructions on the page or use winget, 177 + run in cmd as **admin**: 178 + ``` 179 + winget install --accept-source-agreements chocolatey.chocolatey 180 + ``` 181 + 182 + 2. install all requirements using choco, exit the previous cmd and 183 + open a new one so that choco path is set, and run in cmd as **admin**: 184 + ``` 185 + choco install -y neovim git ripgrep wget fd unzip gzip mingw make 186 + ``` 187 + </details> 188 + <details><summary>WSL (Windows Subsystem for Linux)</summary> 189 + 190 + ``` 191 + wsl --install 192 + wsl 193 + sudo add-apt-repository ppa:neovim-ppa/unstable -y 194 + sudo apt update 195 + sudo apt install make gcc ripgrep unzip git xclip neovim 196 + ``` 197 + </details> 198 + 199 + #### Linux Install 200 + <details><summary>Ubuntu Install Steps</summary> 201 + 202 + ``` 203 + sudo add-apt-repository ppa:neovim-ppa/unstable -y 204 + sudo apt update 205 + sudo apt install make gcc ripgrep unzip git xclip neovim 206 + ``` 207 + </details> 208 + <details><summary>Debian Install Steps</summary> 209 + 210 + ``` 211 + sudo apt update 212 + sudo apt install make gcc ripgrep unzip git xclip curl 213 + 214 + # Now we install nvim 215 + curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz 216 + sudo rm -rf /opt/nvim-linux64 217 + sudo mkdir -p /opt/nvim-linux64 218 + sudo chmod a+rX /opt/nvim-linux64 219 + sudo tar -C /opt -xzf nvim-linux64.tar.gz 220 + 221 + # make it available in /usr/local/bin, distro installs to /usr/bin 222 + sudo ln -sf /opt/nvim-linux64/bin/nvim /usr/local/bin/ 223 + ``` 224 + </details> 225 + <details><summary>Fedora Install Steps</summary> 226 + 227 + ``` 228 + sudo dnf install -y gcc make git ripgrep fd-find unzip neovim 229 + ``` 230 + </details> 231 + 232 + <details><summary>Arch Install Steps</summary> 233 + 234 + ``` 235 + sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim 236 + ``` 237 + </details> 238 +
+24
nvim/doc/kickstart.txt
··· 1 + ================================================================================ 2 + INTRODUCTION *kickstart.nvim* 3 + 4 + Kickstart.nvim is a project to help you get started on your neovim journey. 5 + 6 + *kickstart-is-not* 7 + It is not: 8 + - Complete framework for every plugin under the sun 9 + - Place to add every plugin that could ever be useful 10 + 11 + *kickstart-is* 12 + It is: 13 + - Somewhere that has a good start for the most common "IDE" type features: 14 + - autocompletion 15 + - goto-definition 16 + - find references 17 + - fuzzy finding 18 + - and hinting at what more can be done :) 19 + - A place to _kickstart_ your journey. 20 + - You should fork this project and use/modify it so that it matches your 21 + style and preferences. If you don't want to do that, there are probably 22 + other projects that would fit much better for you (and that's great!)! 23 + 24 + vim:tw=78:ts=8:ft=help:norl:
+1066
nvim/init.lua
··· 1 + -- Set <space> as the leader key 2 + -- See `:help mapleader` 3 + -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) 4 + vim.g.mapleader = " " 5 + vim.g.maplocalleader = " " 6 + 7 + -- Set to true if you have a Nerd Font installed and selected in the terminal 8 + vim.g.have_nerd_font = true 9 + 10 + -- [[ Setting options ]] 11 + -- See `:help vim.opt` 12 + -- NOTE: You can change these options as you wish! 13 + -- For more options, you can see `:help option-list` 14 + 15 + -- Make line numbers default 16 + vim.opt.number = true 17 + -- You can also add relative line numbers, to help with jumping. 18 + -- Experiment for yourself to see if you like it! 19 + vim.opt.relativenumber = true 20 + 21 + vim.opt.tabstop = 4 22 + vim.opt.shiftwidth = 4 23 + 24 + -- Enable mouse mode, can be useful for resizing splits for example! 25 + vim.opt.mouse = "a" 26 + 27 + -- Don't show the mode, since it's already in the status line 28 + vim.opt.showmode = false 29 + 30 + -- Sync clipboard between OS and Neovim. 31 + -- Schedule the setting after `UiEnter` because it can increase startup-time. 32 + -- Remove this option if you want your OS clipboard to remain independent. 33 + -- See `:help 'clipboard'` 34 + vim.schedule(function() 35 + vim.opt.clipboard = "unnamedplus" 36 + end) 37 + 38 + -- Enable break indent 39 + vim.opt.breakindent = true 40 + 41 + -- Save undo history 42 + vim.opt.undofile = true 43 + 44 + -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term 45 + vim.opt.ignorecase = true 46 + vim.opt.smartcase = true 47 + 48 + -- Keep signcolumn on by default 49 + vim.opt.signcolumn = "yes" 50 + 51 + -- Decrease update time 52 + vim.opt.updatetime = 250 53 + 54 + -- Decrease mapped sequence wait time 55 + vim.opt.timeoutlen = 300 56 + 57 + -- Configure how new splits should be opened 58 + vim.opt.splitright = true 59 + vim.opt.splitbelow = true 60 + 61 + -- Sets how neovim will display certain whitespace characters in the editor. 62 + -- See `:help 'list'` 63 + -- and `:help 'listchars'` 64 + vim.opt.list = true 65 + vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" } 66 + 67 + -- Preview substitutions live, as you type! 68 + vim.opt.inccommand = "split" 69 + 70 + -- Show which line your cursor is on 71 + vim.opt.cursorline = true 72 + 73 + -- Minimal number of screen lines to keep above and below the cursor. 74 + vim.opt.scrolloff = 10 75 + 76 + -- [[ Basic Keymaps ]] 77 + -- See `:help vim.keymap.set()` 78 + 79 + -- Clear highlights on search when pressing <Esc> in normal mode 80 + -- See `:help hlsearch` 81 + vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>") 82 + 83 + -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier 84 + -- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which 85 + -- is not what someone will guess without a bit more experience. 86 + -- 87 + -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping 88 + -- or just use <C-\><C-n> to exit terminal mode 89 + vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" }) 90 + 91 + -- MY KEYMAPS!!! 92 + vim.keymap.set("i", "<S-CR>", "<Esc>o", { noremap = true, silent = true }) 93 + -- vim.keymap.set("i", "<Tab>", function() 94 + -- local col = vim.fn.col(".") -- Get the current column 95 + -- local line = vim.fn.getline(".") -- Get the current line 96 + -- 97 + -- -- Check if the current character is a closing quote 98 + -- local char = line:sub(col, col) 99 + -- if char == '"' or char == "'" or char == "`" then 100 + -- return "<Right>" 101 + -- end 102 + -- end, { expr = true, noremap = true }) 103 + 104 + -- TIP: Disable arrow keys in normal mode 105 + -- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>') 106 + -- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>') 107 + -- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>') 108 + -- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>') 109 + 110 + -- Keybinds to make split navigation easier. 111 + -- Use CTRL+<hjkl> to switch between windows 112 + -- 113 + -- See `:help wincmd` for a list of all window commands 114 + vim.keymap.set("n", "<C-h>", "<C-w><C-h>", { desc = "Move focus to the left window" }) 115 + vim.keymap.set("n", "<C-l>", "<C-w><C-l>", { desc = "Move focus to the right window" }) 116 + vim.keymap.set("n", "<C-j>", "<C-w><C-j>", { desc = "Move focus to the lower window" }) 117 + vim.keymap.set("n", "<C-k>", "<C-w><C-k>", { desc = "Move focus to the upper window" }) 118 + 119 + -- vim.experimental.check_rtp_message = false 120 + 121 + vim.g.snacks_animate = false 122 + ---@type table<number, {token:lsp.ProgressToken, msg:string, done:boolean}[]> 123 + local progress = vim.defaulttable() 124 + vim.api.nvim_create_autocmd("LspProgress", { 125 + ---@param ev {data: {client_id: integer, params: lsp.ProgressParams}} 126 + callback = function(ev) 127 + local client = vim.lsp.get_client_by_id(ev.data.client_id) 128 + local value = ev.data.params.value --[[@as {percentage?: number, title?: string, message?: string, kind: "begin" | "report" | "end"}]] 129 + if not client or type(value) ~= "table" then 130 + return 131 + end 132 + local p = progress[client.id] 133 + for i = 1, #p + 1 do 134 + if i == #p + 1 or p[i].token == ev.data.params.token then 135 + p[i] = { 136 + token = ev.data.params.token, 137 + msg = ("[%3d%%] %s%s"):format( 138 + value.kind == "end" and 100 or value.percentage or 100, 139 + value.title or "", 140 + value.message and (" **%s**"):format(value.message) or "" 141 + ), 142 + done = value.kind == "end", 143 + } 144 + break 145 + end 146 + end 147 + local msg = {} ---@type string[] 148 + progress[client.id] = vim.tbl_filter(function(v) 149 + return table.insert(msg, v.msg) or not v.done 150 + end, p) 151 + local spinner = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" } 152 + vim.notify(table.concat(msg, "\n"), "info", { 153 + id = "lsp_progress", 154 + title = client.name, 155 + opts = function(notif) 156 + notif.icon = #progress[client.id] == 0 and " " 157 + or spinner[math.floor(vim.uv.hrtime() / (1e6 * 80)) % #spinner + 1] 158 + end, 159 + }) 160 + end, 161 + }) 162 + 163 + -- [[ Basic Autocommands ]] 164 + -- See `:help lua-guide-autocommands` 165 + 166 + -- Highlight when yanking (copying) text 167 + -- Try it with `yap` in normal mode 168 + -- See `:help vim.highlight.on_yank()` 169 + vim.api.nvim_create_autocmd("TextYankPost", { 170 + desc = "Highlight when yanking (copying) text", 171 + group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }), 172 + callback = function() 173 + vim.highlight.on_yank() 174 + end, 175 + }) 176 + 177 + -- [[ Install `lazy.nvim` plugin manager ]] 178 + -- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info 179 + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 180 + if not (vim.uv or vim.loop).fs_stat(lazypath) then 181 + local lazyrepo = "https://github.com/folke/lazy.nvim.git" 182 + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 183 + if vim.v.shell_error ~= 0 then 184 + error("Error cloning lazy.nvim:\n" .. out) 185 + end 186 + end 187 + vim.opt.rtp:prepend(lazypath) 188 + 189 + -- [[ Configure and install plugins ]] 190 + -- 191 + -- To check the current status of your plugins, run 192 + -- :Lazy 193 + -- 194 + -- You can press `?` in this menu for help. Use `:q` to close the window 195 + -- 196 + -- To update plugins you can run 197 + -- :Lazy update 198 + -- 199 + -- NOTE: Here is where you install your plugins. 200 + require("lazy").setup({ 201 + -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). 202 + { "NMAC427/guess-indent.nvim", opts = {} }, -- Detect tabstop and shiftwidth automatically 203 + 204 + -- NOTE: Plugins can also be added by using a table, 205 + -- with the first argument being the link and the following 206 + -- keys can be used to configure plugin behavior/loading/etc. 207 + -- 208 + -- Use `opts = {}` to force a plugin to be loaded. 209 + -- 210 + 211 + -- Here is a more advanced example where we pass configuration 212 + -- options to `gitsigns.nvim`. This is equivalent to the following Lua: 213 + -- require('gitsigns').setup({ ... }) 214 + -- 215 + -- See `:help gitsigns` to understand what the configuration keys do 216 + { -- Adds git related signs to the gutter, as well as utilities for managing changes 217 + "lewis6991/gitsigns.nvim", 218 + opts = { 219 + vim.api.nvim_set_hl(0, "GitSignsCurrentLineBlame", { fg = "#8f8f8f" }), 220 + current_line_blame = true, 221 + current_line_blame_opts = { 222 + delay = 0, 223 + virt_text_pos = "right_align", 224 + }, 225 + signs = { 226 + add = { text = "+" }, 227 + change = { text = "~" }, 228 + delete = { text = "_" }, 229 + topdelete = { text = "‾" }, 230 + changedelete = { text = "~" }, 231 + }, 232 + }, 233 + }, 234 + 235 + -- NOTE: Plugins can also be configured to run Lua code when they are loaded. 236 + -- 237 + -- This is often very useful to both group configuration, as well as handle 238 + -- lazy loading plugins that don't need to be loaded immediately at startup. 239 + -- 240 + -- For example, in the following configuration, we use: 241 + -- event = 'VimEnter' 242 + -- 243 + -- which loads which-key before all the UI elements are loaded. Events can be 244 + -- normal autocommands events (`:help autocmd-events`). 245 + -- 246 + -- Then, because we use the `opts` key (recommended), the configuration runs 247 + -- after the plugin has been loaded as `require(MODULE).setup(opts)`. 248 + 249 + { -- Useful plugin to show you pending keybinds. 250 + "folke/which-key.nvim", 251 + event = "VimEnter", -- Sets the loading event to 'VimEnter' 252 + opts = { 253 + -- delay between pressing a key and opening which-key (milliseconds) 254 + -- this setting is independent of vim.opt.timeoutlen 255 + delay = 0, 256 + icons = { 257 + -- set icon mappings to true if you have a Nerd Font 258 + mappings = vim.g.have_nerd_font, 259 + -- If you are using a Nerd Font: set icons.keys to an empty table which will use the 260 + -- default which-key.nvim defined Nerd Font icons, otherwise define a string table 261 + keys = vim.g.have_nerd_font and {} or { 262 + Up = "<Up> ", 263 + Down = "<Down> ", 264 + Left = "<Left> ", 265 + Right = "<Right> ", 266 + C = "<C-…> ", 267 + M = "<M-…> ", 268 + D = "<D-…> ", 269 + S = "<S-…> ", 270 + CR = "<CR> ", 271 + Esc = "<Esc> ", 272 + ScrollWheelDown = "<ScrollWheelDown> ", 273 + ScrollWheelUp = "<ScrollWheelUp> ", 274 + NL = "<NL> ", 275 + BS = "<BS> ", 276 + Space = "<Space> ", 277 + Tab = "<Tab> ", 278 + F1 = "<F1>", 279 + F2 = "<F2>", 280 + F3 = "<F3>", 281 + F4 = "<F4>", 282 + F5 = "<F5>", 283 + F6 = "<F6>", 284 + F7 = "<F7>", 285 + F8 = "<F8>", 286 + F9 = "<F9>", 287 + F10 = "<F10>", 288 + F11 = "<F11>", 289 + F12 = "<F12>", 290 + }, 291 + }, 292 + }, 293 + }, 294 + 295 + -- NOTE: Plugins can specify dependencies. 296 + -- 297 + -- The dependencies are proper plugin specifications as well - anything 298 + -- you do for a plugin at the top level, you can do for a dependency. 299 + -- 300 + -- Use the `dependencies` key to specify the dependencies of a particular plugin 301 + 302 + -- LSP Plugins 303 + { 304 + -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins 305 + -- used for completion, annotations and signatures of Neovim apis 306 + "folke/lazydev.nvim", 307 + ft = "lua", 308 + opts = { 309 + library = { 310 + -- Load luvit types when the `vim.uv` word is found 311 + { path = "${3rd}/luv/library", words = { "vim%.uv" } }, 312 + }, 313 + }, 314 + }, 315 + { 316 + -- Main LSP Configuration 317 + "neovim/nvim-lspconfig", 318 + dependencies = { 319 + -- Automatically install LSPs and related tools to stdpath for Neovim 320 + -- Mason must be loaded before its dependents so we need to set it up here. 321 + -- NOTE: `opts = {}` is the same as calling `require('mason').setup({})` 322 + { "mason-org/mason.nvim", opts = {} }, 323 + "mason-org/mason-lspconfig.nvim", 324 + "WhoIsSethDaniel/mason-tool-installer.nvim", 325 + }, 326 + config = function() 327 + -- Brief aside: **What is LSP?** 328 + -- 329 + -- LSP is an initialism you've probably heard, but might not understand what it is. 330 + -- 331 + -- LSP stands for Language Server Protocol. It's a protocol that helps editors 332 + -- and language tooling communicate in a standardized fashion. 333 + -- 334 + -- In general, you have a "server" which is some tool built to understand a particular 335 + -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers 336 + -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone 337 + -- processes that communicate with some "client" - in this case, Neovim! 338 + -- 339 + -- LSP provides Neovim with features like: 340 + -- - Go to definition 341 + -- - Find references 342 + -- - Autocompletion 343 + -- - Symbol Search 344 + -- - and more! 345 + -- 346 + -- Thus, Language Servers are external tools that must be installed separately from 347 + -- Neovim. This is where `mason` and related plugins come into play. 348 + -- 349 + -- If you're wondering about lsp vs treesitter, you can check out the wonderfully 350 + -- and elegantly composed help section, `:help lsp-vs-treesitter` 351 + 352 + -- This function gets run when an LSP attaches to a particular buffer. 353 + -- That is to say, every time a new file is opened that is associated with 354 + -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this 355 + -- function will be executed to configure the current buffer 356 + vim.api.nvim_create_autocmd("LspAttach", { 357 + group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }), 358 + callback = function(event) 359 + -- NOTE: Remember that Lua is a real programming language, and as such it is possible 360 + -- to define small helper and utility functions so you don't have to repeat yourself. 361 + -- 362 + -- In this case, we create a function that lets us more easily define mappings specific 363 + -- for LSP related items. It sets the mode, buffer and description for us each time. 364 + local map = function(keys, func, desc, mode) 365 + mode = mode or "n" 366 + vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) 367 + end 368 + 369 + -- Rename the variable under your cursor. 370 + -- Most Language Servers support renaming across files, etc. 371 + map("<leader>r", vim.lsp.buf.rename, "[R]ename") 372 + 373 + -- Execute a code action, usually your cursor needs to be on top of an error 374 + -- or a suggestion from your LSP for this to activate. 375 + map("<leader>C", vim.lsp.buf.code_action, "[C]ode Action", { "n", "x" }) 376 + 377 + -- The following two autocommands are used to highlight references of the 378 + -- word under your cursor when your cursor rests there for a little while. 379 + -- See `:help CursorHold` for information about when this is executed 380 + -- 381 + -- When you move your cursor, the highlights will be cleared (the second autocommand). 382 + local client = vim.lsp.get_client_by_id(event.data.client_id) 383 + if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then 384 + local highlight_augroup = 385 + vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false }) 386 + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { 387 + buffer = event.buf, 388 + group = highlight_augroup, 389 + callback = vim.lsp.buf.document_highlight, 390 + }) 391 + 392 + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { 393 + buffer = event.buf, 394 + group = highlight_augroup, 395 + callback = vim.lsp.buf.clear_references, 396 + }) 397 + 398 + vim.api.nvim_create_autocmd("LspDetach", { 399 + group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }), 400 + callback = function(event2) 401 + vim.lsp.buf.clear_references() 402 + vim.api.nvim_clear_autocmds({ group = "kickstart-lsp-highlight", buffer = event2.buf }) 403 + end, 404 + }) 405 + end 406 + 407 + -- The following code creates a keymap to toggle inlay hints in your 408 + -- code, if the language server you are using supports them 409 + -- 410 + -- This may be unwanted, since they displace some of your code 411 + if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then 412 + map("<leader>th", function() 413 + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf })) 414 + end, "[T]oggle Inlay [H]ints") 415 + end 416 + end, 417 + }) 418 + 419 + -- Change diagnostic symbols in the sign column (gutter) 420 + if vim.g.have_nerd_font then 421 + local signs = { ERROR = "", WARN = "", INFO = "", HINT = "" } 422 + local diagnostic_signs = {} 423 + for type, icon in pairs(signs) do 424 + diagnostic_signs[vim.diagnostic.severity[type]] = icon 425 + end 426 + vim.diagnostic.config({ signs = { text = diagnostic_signs } }) 427 + end 428 + 429 + local capabilities = vim.lsp.protocol.make_client_capabilities() 430 + 431 + local function get_python_path(workspace) 432 + -- Check for uv first 433 + local uv_python = 434 + vim.fn.system("cd " .. workspace .. " && uv run which python 2>/dev/null"):gsub("\n", "") 435 + if vim.v.shell_error == 0 and uv_python ~= "" then 436 + return uv_python 437 + end 438 + 439 + -- Fallback to standard virtual environments 440 + local venv_paths = { 441 + workspace .. "/.venv/bin/python", 442 + workspace .. "/venv/bin/python", 443 + workspace .. "/.virtualenv/bin/python", 444 + } 445 + 446 + for _, path in ipairs(venv_paths) do 447 + if vim.fn.filereadable(path) == 1 then 448 + return path 449 + end 450 + end 451 + 452 + -- Final fallback to system python 453 + return vim.fn.exepath("python3") or vim.fn.exepath("python") or "python" 454 + end 455 + 456 + -- Enable the following language servers 457 + -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. 458 + -- 459 + -- Add any additional override configuration in the following tables. Available keys are: 460 + -- - cmd (table): Override the default command used to start the server 461 + -- - filetypes (table): Override the default list of associated filetypes for the server 462 + -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features. 463 + -- - settings (table): Override the default settings passed when initializing the server. 464 + -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ 465 + local servers = { 466 + bashls = {}, 467 + docker_compose_language_service = {}, 468 + -- gopls = {}, 469 + marksman = {}, 470 + vtsls = {}, 471 + tailwindcss = {}, 472 + rust_analyzer = { 473 + settings = { 474 + ["rust-analyzer"] = { 475 + check = { 476 + command = "clippy", 477 + }, 478 + cargo = { 479 + allFeatures = true, 480 + }, 481 + procMacro = { 482 + enable = true, 483 + }, 484 + }, 485 + }, 486 + }, 487 + lua_ls = { 488 + -- cmd = { ... }, 489 + -- filetypes = { ... }, 490 + -- capabilities = {}, 491 + settings = { 492 + Lua = { 493 + completion = { 494 + callSnippet = "Replace", 495 + }, 496 + -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings 497 + diagnostics = { disable = { "missing-fields" } }, 498 + }, 499 + }, 500 + }, 501 + ruff = { 502 + init_options = { 503 + settings = { 504 + configurationPreference = "filesystemFirst", 505 + fixAll = true, 506 + organizeImports = true, 507 + workspaceSettings = { 508 + lineLength = 120, 509 + targetVersion = "py311", 510 + }, 511 + }, 512 + }, 513 + on_attach = function(client, bufnr) 514 + client.server_capabilities.hoverProvider = false 515 + 516 + vim.api.nvim_create_autocmd("BufWritePre", { 517 + buffer = bufnr, 518 + callback = function() 519 + vim.lsp.buf.format({ async = false }) 520 + end, 521 + }) 522 + end, 523 + }, 524 + pyright = { 525 + before_init = function(_, config) 526 + config.settings.python = vim.tbl_deep_extend("force", config.settings.python or {}, { 527 + pythonPath = get_python_path(config.root_dir), 528 + }) 529 + end, 530 + settings = { 531 + python = { 532 + analysis = { 533 + typeCheckingMode = "strict", 534 + diagnosticMode = "workspace", 535 + useLibraryCodeForTypes = true, 536 + autoSearchPaths = true, 537 + autoImportCompletions = true, 538 + diagnosticSeverityOverrides = { 539 + reportMissingTypeStubs = "none", 540 + reportGeneralTypeIssues = "warning", 541 + reportOptionalMemberAccess = "none", 542 + }, 543 + stubPath = "typings", 544 + ignore = { "**/node_modules", "**/__pycache__", "**/venv", "**/.venv" }, 545 + }, 546 + linting = { 547 + enabled = false, 548 + }, 549 + }, 550 + }, 551 + on_attach = function(client, bufnr) 552 + -- Disable formatting capabilities for Pyright (let ruff handle it) 553 + client.server_capabilities.documentFormattingProvider = false 554 + client.server_capabilities.documentRangeFormattingProvider = false 555 + end, 556 + }, 557 + } 558 + 559 + for server, config in pairs(servers) do 560 + vim.lsp.config(server, config) 561 + end 562 + 563 + -- Ensure the servers and tools above are installed 564 + -- 565 + -- To check the current status of installed tools and/or manually install 566 + -- other tools, you can run 567 + -- :Mason 568 + -- 569 + -- You can press `g?` for help in this menu. 570 + -- 571 + -- `mason` had to be setup earlier: to configure its options see the 572 + -- `dependencies` table for `nvim-lspconfig` above. 573 + -- 574 + -- You can add other tools here that you want Mason to install 575 + -- for you, so that they are available from within Neovim. 576 + local ensure_installed = vim.tbl_keys(servers or {}) 577 + vim.list_extend(ensure_installed, { 578 + "stylua", -- Used to format Lua code 579 + "eslint_d", 580 + "hadolint", 581 + "beautysh", 582 + "goimports", 583 + -- "golines", 584 + "gomodifytags", 585 + "prettier", 586 + "prettierd", 587 + "reorder-python-imports", 588 + "htmlhint", 589 + "pyright", 590 + "ruff", 591 + "rust_analyzer", 592 + }) 593 + require("mason-tool-installer").setup({ ensure_installed = ensure_installed }) 594 + 595 + require("mason-lspconfig").setup({ 596 + ensure_installed = {}, 597 + automatic_enable = true, 598 + automatic_installation = false, 599 + handlers = { 600 + function(server_name) 601 + local server = servers[server_name] or {} 602 + -- This handles overriding only values explicitly passed 603 + -- by the server configuration above. Useful when disabling 604 + -- certain features of an LSP (for example, turning off formatting for ts_ls) 605 + server.capabilities = vim.tbl_deep_extend("force", {}, capabilities, server.capabilities or {}) 606 + require("lspconfig")[server_name].setup(server) 607 + end, 608 + }, 609 + }) 610 + end, 611 + }, 612 + 613 + { -- Autoformat 614 + "stevearc/conform.nvim", 615 + event = { "BufWritePre" }, 616 + cmd = { "ConformInfo" }, 617 + keys = { 618 + { 619 + "<leader>F", 620 + function() 621 + require("conform").format({ async = true, lsp_format = "fallback" }) 622 + end, 623 + mode = "", 624 + desc = "[F]ormat buffer", 625 + }, 626 + }, 627 + opts = { 628 + notify_on_error = false, 629 + format_on_save = function(bufnr) 630 + -- Disable "format_on_save lsp_fallback" for languages that don't 631 + -- have a well standardized coding style. You can add additional 632 + -- languages here or re-enable it for the disabled ones. 633 + local disable_filetypes = { c = true, cpp = true } 634 + local lsp_format_opt 635 + if disable_filetypes[vim.bo[bufnr].filetype] then 636 + lsp_format_opt = "never" 637 + else 638 + lsp_format_opt = "fallback" 639 + end 640 + return { 641 + timeout_ms = 500, 642 + lsp_format = lsp_format_opt, 643 + } 644 + end, 645 + formatters_by_ft = { 646 + lua = { "stylua" }, 647 + -- Conform can also run multiple formatters sequentially 648 + -- python = { "isort", "black" }, 649 + -- 650 + -- You can use 'stop_after_first' to run the first available formatter from the list 651 + javascript = { "prettierd" }, 652 + javascriptreact = { "prettierd" }, 653 + json = { "prettierd" }, 654 + jsonc = { "prettierd" }, 655 + css = { "prettierd" }, 656 + html = { "prettierd" }, 657 + typescript = { "prettierd" }, 658 + typescriptreact = { "prettierd" }, 659 + go = { "goimports" }, 660 + }, 661 + }, 662 + }, 663 + 664 + { 665 + "ellisonleao/gruvbox.nvim", 666 + priority = 1000, 667 + config = true, 668 + opts = { 669 + transparent_mode = true, 670 + palette_overrides = { 671 + dark2 = "#665d58", 672 + }, 673 + }, 674 + init = function() 675 + vim.cmd.colorscheme("gruvbox") 676 + end, 677 + }, 678 + 679 + -- Highlight todo, notes, etc in comments 680 + { 681 + "folke/todo-comments.nvim", 682 + event = "VimEnter", 683 + dependencies = { "nvim-lua/plenary.nvim" }, 684 + opts = { signs = false }, 685 + }, 686 + 687 + { 688 + "pwntester/octo.nvim", 689 + dependencies = { "nvim-lua/plenary.nvim", "folke/snacks.nvim", "nvim-tree/nvim-web-devicons" }, 690 + opts = { 691 + picker = "snacks", 692 + default_remote = { "origin" }, 693 + default_merge_method = "squash", 694 + default_delete_branch = false, 695 + issues = { 696 + order_by = { 697 + field = "CREATED_AT", 698 + direction = "DESC", 699 + }, 700 + }, 701 + reviews = { 702 + auto_show_threads = true, 703 + focues = "right", 704 + }, 705 + pull_requests = { 706 + order_by = { 707 + field = "UPDATED_AT", 708 + direction = "DESC", 709 + }, 710 + always_select_remote_on_create = false, 711 + use_branch_name_as_title = false, 712 + }, 713 + }, 714 + }, 715 + 716 + { -- Collection of various small independent plugins/modules 717 + "echasnovski/mini.nvim", 718 + config = function() 719 + -- Better Around/Inside textobjects 720 + -- 721 + -- Examples: 722 + -- - va) - [V]isually select [A]round [)]paren 723 + -- - yinq - [Y]ank [I]nside [N]ext [Q]uote 724 + -- - ci' - [C]hange [I]nside [']quote 725 + require("mini.ai").setup({ n_lines = 500 }) 726 + 727 + -- Add/delete/replace surroundings (brackets, quotes, etc.) 728 + -- 729 + -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren 730 + -- - sd' - [S]urround [D]elete [']quotes 731 + -- - sr)' - [S]urround [R]eplace [)] ['] 732 + require("mini.surround").setup() 733 + 734 + -- Simple and easy statusline. 735 + -- You could remove this setup call if you don't like it, 736 + -- and try some other statusline plugin 737 + local statusline = require("mini.statusline") 738 + -- Status line content configuration 739 + local content = function() 740 + local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 }) 741 + local git = MiniStatusline.section_git({ trunc_width = 40 }) 742 + local diff = MiniStatusline.section_diff({ trunc_width = 75 }) 743 + local diagnostics = statusline.section_diagnostics({ 744 + trunc_width = 75, 745 + signs = { 746 + ERROR = "󰅚 ", 747 + WARN = "󰀪 ", 748 + INFO = "󰋽 ", 749 + HINT = "󰌶 ", 750 + }, 751 + }) 752 + local lsp = MiniStatusline.section_lsp({ trunc_width = 75 }) 753 + local filename = MiniStatusline.section_filename({ trunc_width = 140 }) 754 + local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 }) 755 + local location = MiniStatusline.section_location({ trunc_width = 75 }) 756 + local search = MiniStatusline.section_searchcount({ trunc_width = 75 }) 757 + 758 + return MiniStatusline.combine_groups({ 759 + { hl = mode_hl, strings = { mode } }, 760 + { hl = "MiniStatuslineDevinfo", strings = { git, diff, diagnostics, lsp } }, 761 + "%<", -- Mark general truncate point 762 + { hl = "MiniStatuslineFilename", strings = { filename } }, 763 + "%=", -- End left alignment 764 + { hl = "MiniStatuslineFileinfo", strings = { fileinfo } }, 765 + { hl = mode_hl, strings = { search, location } }, 766 + }) 767 + end 768 + -- set use_icons to true if you have a Nerd Font 769 + statusline.setup({ use_icons = vim.g.have_nerd_font, content = { active = content } }) 770 + 771 + -- You can configure sections in the statusline by overriding their 772 + -- default behavior. For example, here we set the section for 773 + -- cursor location to LINE:COLUMN 774 + ---@diagnostic disable-next-line: duplicate-set-field 775 + statusline.section_location = function() 776 + return "%2l:%-2v" 777 + end 778 + 779 + -- ... and there is more! 780 + -- Check out: https://github.com/echasnovski/mini.nvim 781 + end, 782 + }, 783 + { -- Highlight, edit, and navigate code 784 + "nvim-treesitter/nvim-treesitter", 785 + build = ":TSUpdate", 786 + main = "nvim-treesitter.configs", -- Sets main module to use for opts 787 + -- [[ Configure Treesitter ]] See `:help nvim-treesitter` 788 + opts = { 789 + ensure_installed = { 790 + "bash", 791 + "c", 792 + "diff", 793 + "html", 794 + "lua", 795 + "luadoc", 796 + "markdown", 797 + "markdown_inline", 798 + "regex", 799 + "query", 800 + "vim", 801 + "vimdoc", 802 + }, 803 + -- Autoinstall languages that are not installed 804 + auto_install = true, 805 + highlight = { 806 + enable = true, 807 + -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. 808 + -- If you are experiencing weird indenting issues, add the language to 809 + -- the list of additional_vim_regex_highlighting and disabled languages for indent. 810 + additional_vim_regex_highlighting = { "ruby" }, 811 + }, 812 + indent = { enable = true, disable = { "ruby" } }, 813 + }, 814 + -- There are additional nvim-treesitter modules that you can use to interact 815 + -- with nvim-treesitter. You should go explore a few and see what interests you: 816 + -- 817 + -- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod` 818 + -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context 819 + -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects 820 + }, 821 + 822 + -- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the 823 + -- init.lua. If you want these files, they are in the repository, so you can just download them and 824 + -- place them in the correct locations. 825 + 826 + -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart 827 + -- 828 + -- Here are some example plugins that I've included in the Kickstart repository. 829 + -- Uncomment any of the lines below to enable them (you will need to restart nvim). 830 + -- 831 + -- require 'kickstart.plugins.debug', 832 + -- require("kickstart.plugins.indent_line"), 833 + require("kickstart.plugins.lint"), 834 + require("kickstart.plugins.autopairs"), 835 + -- require("kickstart.plugins.neo-tree"), 836 + require("kickstart.plugins.gitsigns"), -- adds gitsigns recommend keymaps 837 + 838 + { 839 + "saghen/blink.cmp", 840 + version = "*", 841 + ---@module 'blink.cmp' 842 + ---@type blink.cmp.Config 843 + opts = { 844 + keymap = { preset = "enter" }, 845 + appearance = { 846 + use_nvim_cmp_as_default = true, 847 + nerd_font_variant = "mono", 848 + }, 849 + sources = { 850 + default = { "lsp", "path" }, 851 + }, 852 + fuzzy = { implementation = "prefer_rust_with_warning" }, 853 + completion = { 854 + documentation = { 855 + auto_show = true, 856 + }, 857 + }, 858 + }, 859 + opts_extend = { "sources.default" }, 860 + }, 861 + 862 + { 863 + "ray-x/lsp_signature.nvim", 864 + config = function() 865 + require("lsp_signature").setup({}) 866 + end, 867 + }, 868 + 869 + { 870 + "rachartier/tiny-inline-diagnostic.nvim", 871 + event = "VeryLazy", -- Or `LspAttach` 872 + priority = 1000, -- needs to be loaded in first 873 + config = function() 874 + require("tiny-inline-diagnostic").setup({ 875 + options = { 876 + multilines = { 877 + enabled = true, 878 + always_show = true, 879 + }, 880 + }, 881 + }) 882 + vim.diagnostic.config({ virtual_text = false }) -- Only if needed in your configuration, if you already have native LSP diagnostics 883 + end, 884 + }, 885 + 886 + { 887 + "OXY2DEV/markview.nvim", 888 + lazy = false, 889 + priority = 49, 890 + }, 891 + 892 + { 893 + "sindrets/diffview.nvim", 894 + dependencies = { "nvim-tree/nvim-web-devicons" }, 895 + config = function() 896 + local diffview = require("diffview") 897 + vim.keymap.set("n", "<leader>gd", diffview.open, { desc = "[G]it [D]iff" }) 898 + vim.keymap.set("n", "<leader>gh", diffview.file_history, { desc = "[G]it [H]istory" }) 899 + vim.keymap.set("n", "<leader>gc", diffview.close, { desc = "[G]it [C]lose" }) 900 + end, 901 + }, 902 + 903 + { 904 + "zgs225/gomodifytags.nvim", 905 + cmd = { "GoAddTags", "GoRemoveTags", "GoInstallModifyTagsBin" }, 906 + dependencies = { 907 + "nvim-treesitter/nvim-treesitter", 908 + }, 909 + config = function() 910 + require("gomodifytags").setup({}) -- Optional: You can add any specific configuration here if needed. 911 + end, 912 + }, 913 + 914 + { "akinsho/bufferline.nvim", version = "*", dependencies = "nvim-tree/nvim-web-devicons", opts = {} }, 915 + 916 + { "windwp/nvim-ts-autotag", lazy = false, opts = {} }, 917 + 918 + { 919 + "folke/snacks.nvim", 920 + priority = 1000, 921 + lazy = false, 922 + ---@module "snacks" 923 + ---@type snacks.Config 924 + opts = { 925 + bigfile = { enabled = true }, 926 + dashboard = { 927 + enabled = true, 928 + sections = { 929 + { section = "header" }, 930 + { section = "keys", gap = 1, padding = 1 }, 931 + { section = "startup" }, 932 + { 933 + section = "terminal", 934 + cmd = "pokemon-colorscripts -r --no-title; sleep .1", 935 + random = 10, 936 + pane = 2, 937 + indent = 4, 938 + height = 30, 939 + }, 940 + }, 941 + }, 942 + explorer = { enabled = true }, 943 + indent = { enabled = true }, 944 + input = { enabled = true }, 945 + notifier = { 946 + enabled = true, 947 + timeout = 5000, 948 + }, 949 + picker = { enabled = true }, 950 + quickfile = { enabled = true }, 951 + scope = { enabled = true }, 952 + statuscolumn = { enabled = true }, 953 + words = { enabled = true }, 954 + }, 955 + -- stylua: ignore 956 + keys = { 957 + -- Top Pickers & Explorer 958 + { "<leader>fd", function() Snacks.picker.smart() end, desc = "Smart Find Files" }, 959 + { "<leader>,", function() Snacks.picker.buffers() end, desc = "Buffers" }, 960 + { "<leader>/", function() Snacks.picker.grep({need_search = false, live = false}) end, desc = "Grep" }, 961 + { "<leader>e", function() Snacks.explorer() end, desc = "File Explorer" }, 962 + { "\\", function() Snacks.explorer() end, desc = "File Explorer" }, 963 + -- find 964 + { "<leader><space>", function() Snacks.picker.buffers() end, desc = "Buffers" }, 965 + { "<leader>ff", function() Snacks.picker.files() end, desc = "Find Files" }, 966 + { "<leader>fp", function() Snacks.picker.projects() end, desc = "Projects" }, 967 + -- git 968 + { "<leader>gb", function() Snacks.picker.git_branches() end, desc = "Git Branches" }, 969 + { "<leader>gl", function() Snacks.picker.git_log() end, desc = "Git Log" }, 970 + { "<leader>gL", function() Snacks.picker.git_log_line() end, desc = "Git Log Line" }, 971 + { "<leader>gS", function() Snacks.picker.git_stash() end, desc = "Git Stash" }, 972 + -- { "<leader>gd", function() Snacks.picker.git_diff() end, desc = "Git Diff (Hunks)" }, 973 + { "<leader>gf", function() Snacks.picker.git_log_file() end, desc = "Git Log File" }, 974 + -- Grep 975 + { "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" }, 976 + { "<leader>sB", function() Snacks.picker.grep_buffers() end, desc = "Grep Open Buffers" }, 977 + { "<leader>sg", function() Snacks.picker.grep({need_search = false, live = false}) end, desc = "Grep" }, 978 + { "<leader>sw", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" } }, 979 + -- search 980 + { "<leader>s/", function() Snacks.picker.search_history() end, desc = "Search History" }, 981 + { "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" }, 982 + { "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" }, 983 + { "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" }, 984 + { "<leader>sd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" }, 985 + { "<leader>sD", function() Snacks.picker.diagnostics_buffer() end, desc = "Buffer Diagnostics" }, 986 + { "<leader>sh", function() Snacks.picker.help() end, desc = "Help Pages" }, 987 + { "<leader>sH", function() Snacks.picker.highlights() end, desc = "Highlights" }, 988 + { "<leader>su", function() Snacks.picker.undo() end, desc = "Undo History" }, 989 + -- LSP 990 + { "gd", function() Snacks.picker.lsp_definitions() end, desc = "Goto Definition" }, 991 + { "gD", function() Snacks.picker.lsp_declarations() end, desc = "Goto Declaration" }, 992 + { "gr", function() Snacks.picker.lsp_references() end, nowait = true, desc = "References" }, 993 + { "gI", function() Snacks.picker.lsp_implementations() end, desc = "Goto Implementation" }, 994 + { "gy", function() Snacks.picker.lsp_type_definitions() end, desc = "Goto T[y]pe Definition" }, 995 + { "<leader>ss", function() Snacks.picker.lsp_symbols() end, desc = "LSP Symbols" }, 996 + { "<leader>sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" }, 997 + -- Other 998 + { "<leader>gB", function() Snacks.gitbrowse() end, desc = "Git Browse", mode = { "n", "v" } }, 999 + { "<c-/>", function() Snacks.terminal() end, desc = "Toggle Terminal" }, 1000 + { "]]", function() Snacks.words.jump(vim.v.count1) end, desc = "Next Reference", mode = { "n", "t" } }, 1001 + { "[[", function() Snacks.words.jump(-vim.v.count1) end, desc = "Prev Reference", mode = { "n", "t" } }, 1002 + }, 1003 + }, 1004 + 1005 + -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` 1006 + -- This is the easiest way to modularize your config. 1007 + -- 1008 + -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. 1009 + -- { import = 'custom.plugins' }, 1010 + }, { 1011 + ui = { 1012 + -- If you are using a Nerd Font: set icons to an empty table which will use the 1013 + -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table 1014 + icons = vim.g.have_nerd_font and {} or { 1015 + cmd = "⌘", 1016 + config = "🛠", 1017 + event = "📅", 1018 + ft = "📂", 1019 + init = "⚙", 1020 + keys = "🗝", 1021 + plugin = "🔌", 1022 + runtime = "💻", 1023 + require = "🌙", 1024 + source = "📄", 1025 + start = "🚀", 1026 + task = "📌", 1027 + lazy = "💤 ", 1028 + }, 1029 + }, 1030 + }) 1031 + 1032 + vim.api.nvim_create_autocmd({ "BufEnter", "BufRead", "BufNewFile" }, { 1033 + pattern = "*.py", 1034 + callback = function() 1035 + local root_dir = vim.fn.getcwd() 1036 + 1037 + local uv_python = vim.fn.system("cd " .. root_dir .. " && uv run which python 2>/dev/null"):gsub("\n", "") 1038 + 1039 + if vim.v.shell_error == 0 and uv_python ~= "" then 1040 + local venv_path = uv_python:match("(.*/%.venv)") 1041 + if venv_path then 1042 + vim.env.VIRTUAL_ENV = venv_path 1043 + vim.env.PATH = venv_path .. "/bin:" .. vim.env.PATH 1044 + vim.g.python3_host_prog = uv_python 1045 + end 1046 + else 1047 + local venv_paths = { 1048 + root_dir .. "/.venv", 1049 + root_dir .. "/venv", 1050 + root_dir .. "/.virtualenv", 1051 + } 1052 + 1053 + for _, venv in ipairs(venv_paths) do 1054 + if vim.fn.isdirectory(venv) == 1 then 1055 + vim.env.VIRTUAL_ENV = venv 1056 + vim.env.PATH = venv .. "/bin:" .. vim.env.PATH 1057 + vim.g.python3_host_prog = venv .. "/bin/python" 1058 + break 1059 + end 1060 + end 1061 + end 1062 + end, 1063 + }) 1064 + 1065 + -- The line beneath this is called `modeline`. See `:help modeline` 1066 + -- vim: ts=2 sts=2 sw=2 et
+30
nvim/lazy-lock.json
··· 1 + { 2 + "blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" }, 3 + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, 4 + "conform.nvim": { "branch": "master", "commit": "b4aab989db276993ea5dcb78872be494ce546521" }, 5 + "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, 6 + "gitsigns.nvim": { "branch": "main", "commit": "f780609807eca1f783a36a8a31c30a48fbe150c5" }, 7 + "gomodifytags.nvim": { "branch": "main", "commit": "60a9fa7c4a57a5965a3ddb4f5a53728edb38e942" }, 8 + "gruvbox.nvim": { "branch": "main", "commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437" }, 9 + "guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" }, 10 + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, 11 + "lazydev.nvim": { "branch": "main", "commit": "258d2a5ef4a3e3d6d9ba9da72c9725c53e9afcbd" }, 12 + "lsp_signature.nvim": { "branch": "master", "commit": "2b30d8582126a12a493b737e9761969eb869a05b" }, 13 + "markview.nvim": { "branch": "main", "commit": "e6b0f5aee8105adab6077509c46459812db4cffa" }, 14 + "mason-lspconfig.nvim": { "branch": "main", "commit": "7f9a39fcd2ac6e979001f857727d606888f5909c" }, 15 + "mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" }, 16 + "mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" }, 17 + "mini.nvim": { "branch": "main", "commit": "80a11490e44a7fe8c911a3b4a827c56df3894058" }, 18 + "nvim-autopairs": { "branch": "master", "commit": "23320e75953ac82e559c610bec5a90d9c6dfa743" }, 19 + "nvim-lint": { "branch": "master", "commit": "0864f81c681e15d9bdc1156fe3a17bd07db5a3ed" }, 20 + "nvim-lspconfig": { "branch": "master", "commit": "1f7fbc34e6420476142b5cc85e9bee52717540fb" }, 21 + "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, 22 + "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, 23 + "nvim-web-devicons": { "branch": "master", "commit": "6e51ca170563330e063720449c21f43e27ca0bc1" }, 24 + "octo.nvim": { "branch": "master", "commit": "6dabe62fb6678804ad38fb0f060854a5d1d4a7ef" }, 25 + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, 26 + "snacks.nvim": { "branch": "main", "commit": "d67a47739dfc652cfcf66c59e929c704a854b37a" }, 27 + "tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "f64efd33a51ea89bdb847fb3aaf716e96b83ba1a" }, 28 + "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, 29 + "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } 30 + }
+5
nvim/lua/custom/plugins/init.lua
··· 1 + -- You can add your own plugins here or in other files in this directory! 2 + -- I promise not to create any merge conflicts in this directory :) 3 + -- 4 + -- See the kickstart.nvim README for more information 5 + return {}
+52
nvim/lua/kickstart/health.lua
··· 1 + --[[ 2 + -- 3 + -- This file is not required for your own configuration, 4 + -- but helps people determine if their system is setup correctly. 5 + -- 6 + --]] 7 + 8 + local check_version = function() 9 + local verstr = tostring(vim.version()) 10 + if not vim.version.ge then 11 + vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) 12 + return 13 + end 14 + 15 + if vim.version.ge(vim.version(), '0.10-dev') then 16 + vim.health.ok(string.format("Neovim version is: '%s'", verstr)) 17 + else 18 + vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) 19 + end 20 + end 21 + 22 + local check_external_reqs = function() 23 + -- Basic utils: `git`, `make`, `unzip` 24 + for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do 25 + local is_executable = vim.fn.executable(exe) == 1 26 + if is_executable then 27 + vim.health.ok(string.format("Found executable: '%s'", exe)) 28 + else 29 + vim.health.warn(string.format("Could not find executable: '%s'", exe)) 30 + end 31 + end 32 + 33 + return true 34 + end 35 + 36 + return { 37 + check = function() 38 + vim.health.start 'kickstart.nvim' 39 + 40 + vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth` 41 + 42 + Fix only warnings for plugins and languages you intend to use. 43 + Mason will give warnings for languages that are not installed. 44 + You do not need to install, unless you want to use those languages!]] 45 + 46 + local uv = vim.uv or vim.loop 47 + vim.health.info('System Information: ' .. vim.inspect(uv.os_uname())) 48 + 49 + check_version() 50 + check_external_reqs() 51 + end, 52 + }
+8
nvim/lua/kickstart/plugins/autopairs.lua
··· 1 + -- autopairs 2 + -- https://github.com/windwp/nvim-autopairs 3 + 4 + return { 5 + "windwp/nvim-autopairs", 6 + event = "InsertEnter", 7 + config = true, 8 + }
+148
nvim/lua/kickstart/plugins/debug.lua
··· 1 + -- debug.lua 2 + -- 3 + -- Shows how to use the DAP plugin to debug your code. 4 + -- 5 + -- Primarily focused on configuring the debugger for Go, but can 6 + -- be extended to other languages as well. That's why it's called 7 + -- kickstart.nvim and not kitchen-sink.nvim ;) 8 + 9 + return { 10 + -- NOTE: Yes, you can install new plugins here! 11 + 'mfussenegger/nvim-dap', 12 + -- NOTE: And you can specify dependencies as well 13 + dependencies = { 14 + -- Creates a beautiful debugger UI 15 + 'rcarriga/nvim-dap-ui', 16 + 17 + -- Required dependency for nvim-dap-ui 18 + 'nvim-neotest/nvim-nio', 19 + 20 + -- Installs the debug adapters for you 21 + 'williamboman/mason.nvim', 22 + 'jay-babu/mason-nvim-dap.nvim', 23 + 24 + -- Add your own debuggers here 25 + 'leoluz/nvim-dap-go', 26 + }, 27 + keys = { 28 + -- Basic debugging keymaps, feel free to change to your liking! 29 + { 30 + '<F5>', 31 + function() 32 + require('dap').continue() 33 + end, 34 + desc = 'Debug: Start/Continue', 35 + }, 36 + { 37 + '<F1>', 38 + function() 39 + require('dap').step_into() 40 + end, 41 + desc = 'Debug: Step Into', 42 + }, 43 + { 44 + '<F2>', 45 + function() 46 + require('dap').step_over() 47 + end, 48 + desc = 'Debug: Step Over', 49 + }, 50 + { 51 + '<F3>', 52 + function() 53 + require('dap').step_out() 54 + end, 55 + desc = 'Debug: Step Out', 56 + }, 57 + { 58 + '<leader>b', 59 + function() 60 + require('dap').toggle_breakpoint() 61 + end, 62 + desc = 'Debug: Toggle Breakpoint', 63 + }, 64 + { 65 + '<leader>B', 66 + function() 67 + require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') 68 + end, 69 + desc = 'Debug: Set Breakpoint', 70 + }, 71 + -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. 72 + { 73 + '<F7>', 74 + function() 75 + require('dapui').toggle() 76 + end, 77 + desc = 'Debug: See last session result.', 78 + }, 79 + }, 80 + config = function() 81 + local dap = require 'dap' 82 + local dapui = require 'dapui' 83 + 84 + require('mason-nvim-dap').setup { 85 + -- Makes a best effort to setup the various debuggers with 86 + -- reasonable debug configurations 87 + automatic_installation = true, 88 + 89 + -- You can provide additional configuration to the handlers, 90 + -- see mason-nvim-dap README for more information 91 + handlers = {}, 92 + 93 + -- You'll need to check that you have the required things installed 94 + -- online, please don't ask me how to install them :) 95 + ensure_installed = { 96 + -- Update this to ensure that you have the debuggers for the langs you want 97 + 'delve', 98 + }, 99 + } 100 + 101 + -- Dap UI setup 102 + -- For more information, see |:help nvim-dap-ui| 103 + dapui.setup { 104 + -- Set icons to characters that are more likely to work in every terminal. 105 + -- Feel free to remove or use ones that you like more! :) 106 + -- Don't feel like these are good choices. 107 + icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, 108 + controls = { 109 + icons = { 110 + pause = '⏸', 111 + play = '▶', 112 + step_into = '⏎', 113 + step_over = '⏭', 114 + step_out = '⏮', 115 + step_back = 'b', 116 + run_last = '▶▶', 117 + terminate = '⏹', 118 + disconnect = '⏏', 119 + }, 120 + }, 121 + } 122 + 123 + -- Change breakpoint icons 124 + -- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' }) 125 + -- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' }) 126 + -- local breakpoint_icons = vim.g.have_nerd_font 127 + -- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' } 128 + -- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' } 129 + -- for type, icon in pairs(breakpoint_icons) do 130 + -- local tp = 'Dap' .. type 131 + -- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak' 132 + -- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl }) 133 + -- end 134 + 135 + dap.listeners.after.event_initialized['dapui_config'] = dapui.open 136 + dap.listeners.before.event_terminated['dapui_config'] = dapui.close 137 + dap.listeners.before.event_exited['dapui_config'] = dapui.close 138 + 139 + -- Install golang specific config 140 + require('dap-go').setup { 141 + delve = { 142 + -- On Windows delve must be run attached or it crashes. 143 + -- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring 144 + detached = vim.fn.has 'win32' == 0, 145 + }, 146 + } 147 + end, 148 + }
+61
nvim/lua/kickstart/plugins/gitsigns.lua
··· 1 + -- Adds git related signs to the gutter, as well as utilities for managing changes 2 + -- NOTE: gitsigns is already included in init.lua but contains only the base 3 + -- config. This will add also the recommended keymaps. 4 + 5 + return { 6 + { 7 + "lewis6991/gitsigns.nvim", 8 + opts = { 9 + on_attach = function(bufnr) 10 + local gitsigns = require("gitsigns") 11 + 12 + local function map(mode, l, r, opts) 13 + opts = opts or {} 14 + opts.buffer = bufnr 15 + vim.keymap.set(mode, l, r, opts) 16 + end 17 + 18 + -- Navigation 19 + map("n", "]c", function() 20 + if vim.wo.diff then 21 + vim.cmd.normal({ "]c", bang = true }) 22 + else 23 + gitsigns.nav_hunk("next") 24 + end 25 + end, { desc = "Jump to next git [c]hange" }) 26 + 27 + map("n", "[c", function() 28 + if vim.wo.diff then 29 + vim.cmd.normal({ "[c", bang = true }) 30 + else 31 + gitsigns.nav_hunk("prev") 32 + end 33 + end, { desc = "Jump to previous git [c]hange" }) 34 + 35 + -- Actions 36 + -- visual mode 37 + map("v", "<leader>hs", function() 38 + gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) 39 + end, { desc = "git [s]tage hunk" }) 40 + map("v", "<leader>hr", function() 41 + gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) 42 + end, { desc = "git [r]eset hunk" }) 43 + -- normal mode 44 + map("n", "<leader>hs", gitsigns.stage_hunk, { desc = "git [s]tage hunk" }) 45 + map("n", "<leader>hr", gitsigns.reset_hunk, { desc = "git [r]eset hunk" }) 46 + map("n", "<leader>hS", gitsigns.stage_buffer, { desc = "git [S]tage buffer" }) 47 + map("n", "<leader>hu", gitsigns.stage_hunk, { desc = "git [u]ndo stage hunk" }) 48 + map("n", "<leader>hR", gitsigns.reset_buffer, { desc = "git [R]eset buffer" }) 49 + map("n", "<leader>hp", gitsigns.preview_hunk, { desc = "git [p]review hunk" }) 50 + map("n", "<leader>hb", gitsigns.blame_line, { desc = "git [b]lame line" }) 51 + map("n", "<leader>hd", gitsigns.diffthis, { desc = "git [d]iff against index" }) 52 + map("n", "<leader>hD", function() 53 + gitsigns.diffthis("@") 54 + end, { desc = "git [D]iff against last commit" }) 55 + -- Toggles 56 + map("n", "<leader>tb", gitsigns.toggle_current_line_blame, { desc = "[T]oggle git show [b]lame line" }) 57 + map("n", "<leader>tD", gitsigns.preview_hunk_inline, { desc = "[T]oggle git show [D]eleted" }) 58 + end, 59 + }, 60 + }, 61 + }
+9
nvim/lua/kickstart/plugins/indent_line.lua
··· 1 + return { 2 + { -- Add indentation guides even on blank lines 3 + 'lukas-reineke/indent-blankline.nvim', 4 + -- Enable `lukas-reineke/indent-blankline.nvim` 5 + -- See `:help ibl` 6 + main = 'ibl', 7 + opts = {}, 8 + }, 9 + }
+57
nvim/lua/kickstart/plugins/lint.lua
··· 1 + return { 2 + 3 + { -- Linting 4 + "mfussenegger/nvim-lint", 5 + event = { "BufReadPre", "BufNewFile" }, 6 + config = function() 7 + local lint = require("lint") 8 + lint.linters_by_ft = { 9 + html = { "htmlhint" }, 10 + dockerfile = { "hadolint" }, 11 + rust = { "clippy" }, 12 + } 13 + 14 + -- However, note that this will enable a set of default linters, 15 + -- which will cause errors unless these tools are available: 16 + -- { 17 + -- clojure = { "clj-kondo" }, 18 + -- dockerfile = { "hadolint" }, 19 + -- inko = { "inko" }, 20 + -- janet = { "janet" }, 21 + -- json = { "jsonlint" }, 22 + -- markdown = { "vale" }, 23 + -- rst = { "vale" }, 24 + -- ruby = { "ruby" }, 25 + -- terraform = { "tflint" }, 26 + -- text = { "vale" } 27 + -- } 28 + -- 29 + -- You can disable the default linters by setting their filetypes to nil: 30 + -- lint.linters_by_ft['clojure'] = nil 31 + -- lint.linters_by_ft['dockerfile'] = nil 32 + -- lint.linters_by_ft['inko'] = nil 33 + -- lint.linters_by_ft['janet'] = nil 34 + -- lint.linters_by_ft['json'] = nil 35 + -- lint.linters_by_ft['markdown'] = nil 36 + -- lint.linters_by_ft['rst'] = nil 37 + -- lint.linters_by_ft['ruby'] = nil 38 + -- lint.linters_by_ft['terraform'] = nil 39 + -- lint.linters_by_ft['text'] = nil 40 + 41 + -- Create autocommand which carries out the actual linting 42 + -- on the specified events. 43 + local lint_augroup = vim.api.nvim_create_augroup("lint", { clear = true }) 44 + vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, { 45 + group = lint_augroup, 46 + callback = function() 47 + -- Only run the linter in buffers that you can modify in order to 48 + -- avoid superfluous noise, notably within the handy LSP pop-ups that 49 + -- describe the hovered symbol using Markdown. 50 + if vim.opt_local.modifiable:get() then 51 + lint.try_lint() 52 + end 53 + end, 54 + }) 55 + end, 56 + }, 57 + }
+25
nvim/lua/kickstart/plugins/neo-tree.lua
··· 1 + -- Neo-tree is a Neovim plugin to browse the file system 2 + -- https://github.com/nvim-neo-tree/neo-tree.nvim 3 + 4 + return { 5 + 'nvim-neo-tree/neo-tree.nvim', 6 + version = '*', 7 + dependencies = { 8 + 'nvim-lua/plenary.nvim', 9 + 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended 10 + 'MunifTanjim/nui.nvim', 11 + }, 12 + cmd = 'Neotree', 13 + keys = { 14 + { '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true }, 15 + }, 16 + opts = { 17 + filesystem = { 18 + window = { 19 + mappings = { 20 + ['\\'] = 'close_window', 21 + }, 22 + }, 23 + }, 24 + }, 25 + }
+26
starship.toml
··· 1 + [aws] 2 + disabled = true 3 + 4 + [gcloud] 5 + disabled = true 6 + 7 + [sudo] 8 + disabled = false 9 + 10 + [os] 11 + disabled = false 12 + 13 + [localip] 14 + disabled = false 15 + ssh_only = false 16 + 17 + [hostname] 18 + ssh_only = false 19 + format = '[$ssh_symbol$hostname]($style) @ ' 20 + 21 + [memory_usage] 22 + disabled = false 23 + 24 + [username] 25 + show_always = true 26 + format = '[$user]($style) on '
+38 -9
sway/config
··· 3 3 set $files thunar 4 4 set $scripts ~/.config/sway/scripts 5 5 set $userscripts ~/.config/sway/userscripts 6 - set $uifont "Ubuntu 13" 7 - set $prompt #18b218 8 - set $menu bemenu-run --fn $uifont -b -p "▶" --tf "$prompt" --hf "$highlight" --sf "$highlight" --scf "$highlight" | xargs swaymsg exec 6 + set $uifont "Ubuntu 15" 7 + # set $menu bemenu-run --fn $uifont -b -p "▶" --tf "$highlight" --hf "$highlight" --sf "$highlight" --scf "$highlight" -l "10 up" | xargs swaymsg exec 8 + # git clone --depth=1 https://github.com/adi1090x/rofi.git 9 + # bash install.sh 10 + set $menu bash /home/hailey/.config/rofi/launchers/type-2/launcher.sh 9 11 10 - set $highlight #3daee9 12 + set $highlight #b21858 11 13 12 14 set $lock swaylock -f -i $wallpaper -s fill 13 - set $lock swaylock --clock --indicator --effect-scale 0.4 --effect-vignette 0.5:0.5 --effect-blur 4x2 --datestr "" --timestr "%k:%M" -i $wallpaper -s fill --effect-greyscale 15 + set $lock swaylock --clock --indicator --effect-scale 1 --effect-vignette 0.5:0.5 --effect-blur 4x2 --datestr "" --timestr "%k:%M" -i $wallpaper -s fill 14 16 15 17 exec dbus-update-activation-environment --systemd --all 16 18 exec /usr/lib/xdg-desktop-portal --replace 17 19 exec waybar 18 20 # exec kdeconnect-indicator 19 - exec mako 21 + exec swaync 20 22 exec easyeffects --gapplication-service 21 23 24 + exec nm-applet --indicator 25 + 26 + exec blueman-applet 27 + 22 28 output * adaptive_sync off 23 29 24 - set $wallpaper /home/hailey/Pictures/wallpapers/wallhaven-9dkeqd.png 30 + set $wallpaper /home/hailey/bgs/carcig.png 25 31 26 32 output * bg $wallpaper fill 27 33 ··· 42 48 set $color12 #7aa2f7 43 49 set $background #1a1b26 44 50 51 + set $gnome-schema org.gnome.desktop.interface 52 + exec_always { 53 + gsettings set $gnome-schema gtk-theme 'Adwaita-dark' 54 + gsettings set $gnome-schema color-scheme 'prefer-dark' 55 + } 56 + 45 57 for_window [window_role="pop-up"] floating enable 46 58 for_window [window_role="bubble"] floating enable 47 59 for_window [window_role="task_dialog"] floating enable ··· 55 67 #for_window [app_id="mpv"] layout tabbed 56 68 for_window [class="Wine"] floating enable 57 69 for_window [app_id="lutris"] floating enable 70 + for_window [app_id="com.mitchellh.ghostty"] opacity 0.925 71 + for_window [class="Slack"] opacity 0.975 72 + for_window [class="discord"] opacity 0.975 73 + 74 + # Always put workspace 9 on the second monitor 75 + workspace 9 output HDMI-A-1 76 + assign [app_id="spotify"] 9 77 + 78 + corner_radius 10 58 79 59 80 bindsym $mod+L exec $lock 60 81 bindsym --no-repeat $mod+Shift+l exec $lock && systemctl suspend ··· 101 122 bindsym XF86MonBrightnessUp exec brightnessctl set +5% 102 123 bindsym XF86MonBrightnessDown exec brightnessctl set 5%- 103 124 104 - bindsym $mod+Shift+End exec /home/hailey/.config/hypr/scripts/ScreenShot.sh --now 105 - bindsym $mod+Shift+s exec /home/hailey/.config/hypr/scripts/ScreenShot.sh --swappy 125 + # bindsym $mod+Shift+End exec /home/hailey/.config/hypr/scripts/ScreenShot.sh --now 126 + # bindsym $mod+Shift+s exec /home/hailey/.config/hypr/scripts/ScreenShot.sh --swappy 127 + # bindsym $mod+Shift+s exec grim -g "$(slurp)" -t png - | wl-copy -t image/png 128 + bindsym $mod+Shift+s exec flameshot gui --clipboard 106 129 107 130 bindsym $mod+n splith 108 131 bindsym $mod+m splitv ··· 168 191 client.focused_inactive $background $background $color7 $background $background 169 192 client.unfocused $background $background $color7 $background $background 170 193 client.urgent #ff5555 #ff5555 #f8f8f2 #ff5555 #ff5555 194 + 195 + blur enable 196 + blur_radius 4 197 + blur_passes 1 198 + 199 + shadows disable 171 200 172 201 include /home/hailey/.config/sway/config.d/*
+1
sway/config.d/keybinds
··· 1 1 bindsym $mod+t exec thunar 2 + bindsym $mod+Shift+n exec swaync-client -t -sw
+2 -2
sway/config.d/monitors
··· 1 - output DP-3 resolution 3840x2160@240Hz pos 0,0 2 - output eDP-1 resolution 2560x1600@165Hz pos 3840,1200 1 + output DP-2 resolution 3840x2160@120Hz pos 0,0 2 + output HDMI-A-1 resolution 2560x1440@143.912hz transform 270 pos -1440,0
+8 -8
swaylock/config
··· 3 3 show-failed-attempts 4 4 ignore-empty-password 5 5 6 - # Simple solid color background for performance 7 - # No blur, no image processing 8 - color=1a1b26 6 + # # Simple solid color background for performance 7 + # # No blur, no image processing 8 + # color=1a1b26 9 9 10 10 # Disable fancy effects 11 - screenshots=false 12 - effect-blur=0x0 13 - effect-pixelate=0 11 + screenshots=true 12 + # effect-blur=0x0 13 + # effect-pixelate=0 14 14 15 15 # Ring colors 16 16 inside-color=1a1b26ff ··· 19 19 inside-ver-color=1a1b26ff 20 20 inside-wrong-color=1a1b26ff 21 21 22 - ring-color=7aa2f7ff 22 + ring-color=7aa2f7ff b21858 23 23 ring-clear-color=a9b1d6ff 24 24 ring-caps-lock-color=ff9e64ff 25 25 ring-ver-color=7aa2f7ff ··· 43 43 44 44 # Font 45 45 font=JetBrains Mono 46 - font-size=24 46 + font-size=20 47 47 48 48 # Layout 49 49 indicator-x=50
+36 -50
swaync/config.json
··· 1 1 { 2 - "$schema": "/etc/xdg/swaync/configSchema.json", 3 - "positionX": "center", 4 - "positionY": "top", 5 - "layer": "overlay", 6 - "control-center-layer": "top", 7 - "layer-shell": true, 8 - "cssPriority": "application", 9 - "control-center-margin-top": 5, 10 - "control-center-margin-bottom": 0, 11 - "control-center-margin-right": 0, 12 - "control-center-margin-left": 0, 13 - "notification-2fa-action": true, 14 - "notification-inline-replies": false, 15 - "notification-icon-size": 24, 2 + 3 + "$schema": "/etc/xdg/swaync/configSchema.json", 4 + "positionX": "right", 5 + "positionY": "top", 6 + "layer": "overlay", 7 + "control-center-margin-top": 10, 8 + "control-center-margin-bottom": 10, 9 + "control-center-margin-right": 10, 10 + "control-center-margin-left": 10, 11 + "notification-icon-size": 64, 16 12 "notification-body-image-height": 100, 17 13 "notification-body-image-width": 200, 18 - "timeout": 6, 19 - "timeout-low": 3, 14 + "timeout": 3, 15 + "timeout-low": 2, 20 16 "timeout-critical": 0, 21 17 "fit-to-screen": false, 22 - "control-center-width": 400, 23 - "control-center-height": 720, 24 - "notification-window-width": 400, 18 + "control-center-width": 500, 19 + "control-center-height": 1025, 20 + "notification-window-width": 440, 25 21 "keyboard-shortcuts": true, 26 - "image-visibility": "when available", 22 + "image-visibility": "when-available", 27 23 "transition-time": 200, 28 - "hide-on-clear": false, 24 + "hide-on-clear": true, 29 25 "hide-on-action": true, 30 26 "script-fail-notify": true, 31 27 "widgets": [ 32 - "dnd", 33 - "buttons-grid", 34 - "mpris", 35 - "volume", 36 - "backlight", 37 28 "title", 38 - "notifications" 29 + "dnd", 30 + "notifications", 31 + "mpris", 32 + "volume", 33 + "buttons-grid" 39 34 ], 40 35 "widget-config": { 41 36 "title": { 42 - "text": "Notifications", 37 + "text": "Notification Center", 43 38 "clear-all-button": true, 44 - "button-text": "Clear" 39 + "button-text": "󰆴 Clear All" 45 40 }, 46 41 "dnd": { 47 42 "text": "Do Not Disturb" 48 43 }, 49 44 "label": { 50 45 "max-lines": 1, 51 - "text": "Notification" 46 + "text": "Notification Center" 52 47 }, 53 48 "mpris": { 54 - "image-size": 10, 55 - "image-radius": 0 49 + "image-size": 96, 50 + "image-radius": 7 56 51 }, 57 52 "volume": { 58 - "label": "󰕾" 59 - }, 60 - "backlight": { 61 - "label": "󰃟" 53 + "label": "󰕾", 54 + "show-per-app": true 62 55 }, 63 56 "buttons-grid": { 64 57 "actions": [ 65 58 { 66 59 "label": "󰐥", 67 - "command": "bash -c $HOME/.config/hypr/scripts/Wlogout.sh" 60 + "command": "systemctl poweroff" 68 61 }, 69 62 { 70 - "label": "󰌾", 71 - "command": "bash -c $HOME/.config/hypr/scripts/LockScreen.sh" 63 + "label": "󰜉", 64 + "command": "systemctl reboot" 72 65 }, 73 66 { 74 - "label": "󰍃", 75 - "command": "hyprctl dispatch exit" 76 - }, 77 - { 78 - "label": "󰀝", 79 - "command": "bash -c $HOME/.config/hypr/scripts/AirplaneMode.sh" 80 - }, 81 - { 82 - "label": "󰝟", 83 - "command": "pactl set-sink-mute @DEFAULT_SINK@ toggle" 67 + "label": "󰤄", 68 + "command": "systemctl suspend" 84 69 }, 85 70 { 86 71 "label": "󰂯", ··· 89 74 ] 90 75 } 91 76 } 92 - } 77 + } 78 +
+126 -249
swaync/style.css
··· 1 - /* ----------- 💫 https://github.com/JaKooLit 💫 -------- */ 2 - /* swaync colors - wallust from waybar.css */ 3 - 4 - @import '../../.config/waybar/wallust/colors-waybar.css'; 1 + @define-color cc-bg #32302f; 2 + @define-color noti-border-color #32302f; 3 + @define-color noti-bg #3c3836; 4 + @define-color noti-bg-darker #3c3836; 5 + @define-color noti-bg-hover rgb(27, 27, 43); 6 + @define-color noti-bg-focus rgba(27, 27, 27, 0.6); 7 + @define-color text-color #f9f5d7; 8 + @define-color text-color-disabled #bdae93; 9 + @define-color bg-selected #fabd2f; 5 10 6 - @define-color noti-border-color @color12; 7 - @define-color noti-bg rgba(0, 0, 0, 0.8); 8 - @define-color noti-bg-alt #111111; 9 - @define-color noti-bg-hover @color9; 10 - @define-color text-color @foreground; 11 - @define-color text-color-alt @foreground; 12 - @define-color text-color-disabled rgba(150, 150, 150, 0.8); 13 11 * { 14 - font-family: "JetBrains Mono Nerd Font"; 15 - font-weight: bold; 12 + font-family: JetBrainsMono NFP; 13 + font-weight: bold; 14 + font-size: 14px; 16 15 } 17 16 18 17 .control-center .notification-row:focus, 19 18 .control-center .notification-row:hover { 20 - opacity: 1; 21 - background: @noti-bg; 22 - border-radius: 10px 19 + opacity: 1; 20 + background: @noti-bg-darker; 23 21 } 24 22 25 23 .notification-row { 26 - outline: none; 27 - margin: 0px; 24 + outline: none; 25 + margin: 20px; 26 + padding: 0; 28 27 } 29 28 30 29 .notification { 31 - border-radius: 10px; 32 - } 33 - 34 - .notification-content{ 35 - color: @text-color; 36 - background: @noti-bg; 37 - padding: 3px 10px 3px 6px; 38 - border-radius: 10px; 39 - border: 1px solid @noti-border-color; 40 - margin: 0px; 30 + background: transparent; 31 + margin: 0px; 41 32 } 42 33 43 - .notification-default-action { 44 - margin: 0; 45 - padding: 0; 46 - border-radius: 10px; 34 + .notification-content { 35 + background: @cc-bg; 36 + padding: 7px; 37 + border-radius: 0px; 38 + border: 2px solid #85796f; 39 + margin: 0; 47 40 } 48 41 49 42 .close-button { 50 - background: #f7768e; 51 - color: @noti-bg; 52 - text-shadow: none; 53 - padding: 0; 54 - border-radius: 10px; 55 - margin-top: 5px; 56 - margin-right: 5px; 43 + background: #d79921; 44 + color: @cc-bg; 45 + text-shadow: none; 46 + padding: 0; 47 + border-radius: 0px; 48 + margin-top: 5px; 49 + margin-right: 5px; 57 50 } 58 51 59 52 .close-button:hover { 60 - box-shadow: none; 61 - background: #f7768e; 62 - transition: all .15s ease-in-out; 63 - border: none 53 + box-shadow: none; 54 + background: #fabd2f; 55 + transition: all 0.15s ease-in-out; 56 + border: none; 64 57 } 65 - 66 58 67 59 .notification-action { 68 - border: 1px solid @noti-border-color; 69 - border-top: none; 70 - border-radius: 10px; 60 + color: #ebdbb2; 61 + border: 2px solid #85796f; 62 + border-top: none; 63 + border-radius: 0px; 64 + background: #32302f; 71 65 } 72 - 73 66 74 67 .notification-default-action:hover, 75 68 .notification-action:hover { 76 - color: @text-color; 77 - background: @color1 78 - } 79 - 80 - .notification-default-action { 81 - border-radius: 10px; 82 - margin: 5px; 83 - } 84 - 85 - .notification-default-action:not(:only-child) { 86 - border-bottom-left-radius: 7px; 87 - border-bottom-right-radius: 7px 88 - } 89 - 90 - .notification-action:first-child { 91 - border-bottom-left-radius: 10px; 92 - background: @noti-bg 93 - } 94 - 95 - .notification-action:last-child { 96 - border-bottom-right-radius: 10px; 97 - background: @noti-bg-alt 98 - } 99 - 100 - .inline-reply { 101 - margin-top: 8px 102 - } 103 - 104 - .inline-reply-entry { 105 - background: @noti-bg; 106 - color: @text-color; 107 - caret-color: @text-color; 108 - border: 1px solid @noti-border-color; 109 - border-radius: 10px 110 - } 111 - 112 - .inline-reply-button { 113 - font-size: 0.5rem; 114 - margin-left: 4px; 115 - background: @noti-bg; 116 - border: 1px solid @noti-border-color; 117 - border-radius: 10px; 118 - color: @text-color 119 - } 120 - 121 - .inline-reply-button:disabled { 122 - background: initial; 123 - color: @text-color-disabled; 124 - border: 1px solid transparent 125 - } 126 - 127 - .inline-reply-button:hover { 128 - background: @noti-bg-hover 129 - } 130 - 131 - .body-image { 132 - margin-top: 6px; 133 - color: @text-color-alt; 134 - border-radius: 10px 69 + color: #ebdbb2; 70 + background: #32302f; 135 71 } 136 72 137 73 .summary { 138 - font-size: 1rem; 139 - font-weight: bold; 140 - background: transparent; 141 - color: @text-color-alt; 142 - text-shadow: none 74 + padding-top: 7px; 75 + font-size: 13px; 76 + color: #ebdbb2; 143 77 } 144 78 145 79 .time { 146 - font-size: 1rem; 147 - font-weight: bold; 148 - background: transparent; 149 - color: @text-color; 150 - text-shadow: none; 151 - margin-right: 18px 80 + font-size: 11px; 81 + color: #d79921; 82 + margin-right: 24px; 152 83 } 153 84 154 85 .body { 155 - font-size: 1rem; 156 - font-weight: bold; 157 - background: transparent; 158 - color: @text-color; 159 - text-shadow: none 86 + font-size: 12px; 87 + color: #ebdbb2; 160 88 } 161 89 162 90 .control-center { 163 - background: @noti-bg; 164 - border: 1.5px solid @noti-border-color; 165 - color: @text-color; 166 - border-radius: 10px; 91 + background: @cc-bg; 92 + border: 2px solid #85796f; 93 + border-radius: 0px; 167 94 } 168 95 169 96 .control-center-list { 170 - background: transparent 97 + background: transparent; 171 98 } 172 99 173 100 .control-center-list-placeholder { 174 - opacity: 0.5 101 + opacity: 0.5; 175 102 } 176 103 177 104 .floating-notifications { 178 - background: transparent; 105 + background: transparent; 179 106 } 180 107 181 108 .blank-window { 182 - background: alpha(black, 0.1) 109 + background: alpha(black, 0.1); 183 110 } 184 111 185 112 .widget-title { 186 - color: @noti-border-color; 187 - background: @noti-bg-alt; 188 - padding: 3px 6px; 189 - margin: 5px; 190 - font-size: 1rem; 191 - border-radius: 10px; 113 + color: #f9f5d7; 114 + background: @noti-bg-darker; 115 + padding: 5px 10px; 116 + margin: 10px 10px 5px 10px; 117 + font-size: 1.5rem; 118 + border-radius: 5px; 192 119 } 193 120 194 - .widget-title>button { 195 - font-size: 0.75rem; 196 - color: @text-color; 197 - border-radius: 10px; 198 - background: transparent; 199 - border: 0.5px solid @noti-border-color; 121 + .widget-title > button { 122 + font-size: 1rem; 123 + color: @text-color; 124 + text-shadow: none; 125 + background: @noti-bg; 126 + box-shadow: none; 127 + border-radius: 5px; 200 128 } 201 129 202 - .widget-title>button:hover { 203 - background: #f7768e; 204 - color: @noti-border-color; 130 + .widget-title > button:hover { 131 + background: #d79921; 132 + color: @cc-bg; 205 133 } 206 134 207 135 .widget-dnd { 208 - background: @noti-bg-alt; 209 - padding: 3px 6px; 210 - margin: 5px; 211 - border-radius: 10px; 212 - font-size: 1rem; 213 - color: @noti-border-color; 136 + background: @noti-bg-darker; 137 + padding: 5px 10px; 138 + margin: 5px 10px 10px 10px; 139 + border-radius: 5px; 140 + font-size: large; 141 + color: #f2e5bc; 214 142 } 215 143 216 - .widget-dnd>switch { 217 - border-radius: 10px; 218 - /* border: 1px solid #7aa2f7; */ 219 - background: @noti-border-color; 144 + .widget-dnd > switch { 145 + border-radius: 4px; 146 + background: #665c54; 220 147 } 221 148 222 - .widget-dnd>switch:checked { 223 - background: #f7768e; 224 - border: 1px solid #f7768e; 149 + .widget-dnd > switch:checked { 150 + background: #d79921; 151 + border: 1px solid #d79921; 225 152 } 226 153 227 - .widget-dnd>switch slider { 228 - background: @noti-bg; 229 - border-radius: 10px 154 + .widget-dnd > switch slider { 155 + background: @cc-bg; 156 + border-radius: 5px; 230 157 } 231 158 232 - .widget-dnd>switch:checked slider { 233 - background: @noti-bg; 234 - border-radius: 10px 159 + .widget-dnd > switch:checked slider { 160 + background: @cc-bg; 161 + border-radius: 5px; 235 162 } 236 163 237 164 .widget-label { 238 - margin: 5px; 165 + margin: 10px 10px 5px 10px; 239 166 } 240 167 241 - .widget-label>label { 242 - font-size: 1rem; 243 - color: @text-color; 168 + .widget-label > label { 169 + font-size: 1rem; 170 + color: @text-color; 244 171 } 245 172 246 173 .widget-mpris { 247 - color: @text-color; 248 - background: @noti-bg-alt; 249 - padding: 3px 6px; 250 - margin: 5px; 251 - border-radius: 10px; 174 + color: @text-color; 175 + background: @noti-bg-darker; 176 + padding: 5px 10px 0px 0px; 177 + margin: 5px 10px 5px 10px; 178 + border-radius: 0px; 252 179 } 253 180 254 181 .widget-mpris > box > button { 255 - border-radius: 10px; 182 + border-radius: 5px; 256 183 } 257 184 258 185 .widget-mpris-player { 259 - padding: 3px 6px; 260 - margin: 5px; 186 + padding: 5px 10px; 187 + margin: 10px; 261 188 } 262 189 263 190 .widget-mpris-title { 264 - font-weight: 100; 265 - font-size: 1rem 191 + font-weight: 700; 192 + font-size: 1.25rem; 266 193 } 267 194 268 195 .widget-mpris-subtitle { 269 - font-size: 0.75rem 196 + font-size: 1.1rem; 270 197 } 271 198 272 199 .widget-buttons-grid { 273 - font-size: large; 274 - color: @noti-border-color; 275 - padding: 2px; 276 - margin: 5px; 277 - border-radius: 10px; 278 - background: @noti-bg-alt; 200 + font-size: x-large; 201 + padding: 5px; 202 + margin: 5px 10px 10px 10px; 203 + border-radius: 5px; 204 + background: @noti-bg-darker; 279 205 } 280 206 281 - .widget-buttons-grid>flowbox>flowboxchild>button { 282 - margin: 1px; 283 - background: @noti-bg; 284 - border-radius: 10px; 285 - color: @text-color 207 + .widget-buttons-grid > flowbox > flowboxchild > button { 208 + margin: 3px; 209 + background: @cc-bg; 210 + border-radius: 5px; 211 + color: @text-color; 286 212 } 287 213 288 - .widget-buttons-grid>flowbox>flowboxchild>button:hover { 289 - background: @noti-border-color; 290 - color: @noti-bg-hover 214 + .widget-buttons-grid > flowbox > flowboxchild > button:hover { 215 + background: #d79921; 216 + color: @cc-bg; 291 217 } 292 218 293 - .widget-menubar>box>.menu-button-bar>button { 294 - border: none; 295 - background: transparent 219 + .widget-menubar > box > .menu-button-bar > button { 220 + border: none; 221 + background: transparent; 296 222 } 297 223 298 - .topbar-buttons>button { 299 - border: none; 300 - background: transparent 301 - } 302 - 303 - .widget-volume { 304 - background: @noti-bg-alt; 305 - padding: 2px; 306 - margin: 10px 10px 5px 10px; 307 - border-radius: 10px; 308 - font-size: x-large; 309 - color: @text-color 310 - } 311 - 312 - .widget-volume>box>button { 313 - background: @noti-border-color; 314 - border: none 315 - } 316 - 317 - .per-app-volume { 318 - background-color: @noti-bg; 319 - padding: 4px 8px 8px; 320 - margin: 0 8px 8px; 321 - border-radius: 10px; 322 - color: @text-color 323 - } 324 - 325 - .widget-backlight { 326 - background: @noti-bg-alt; 327 - padding: 5px; 328 - margin: 10px 10px 5px 10px; 329 - border-radius: 10px; 330 - font-size: x-large; 331 - color: @text-color 332 - } 333 - 334 - .low { 335 - background: @text-color; 336 - padding: 0px; 337 - border-radius: 10px; 338 - } 339 - 340 - .normal { 341 - background: @text-color; 342 - padding: 0px; 343 - border-radius: 10px; 344 - } 345 - 346 - .critical { 347 - background: red; 348 - padding: 0px; 349 - border-radius: 10px; 224 + .topbar-buttons > button { 225 + border: none; 226 + background: transparent; 350 227 }
+2 -22
waybar/config
··· 6 6 7 7 "modules-left": ["memory", "temperature", "sway/workspaces"], 8 8 "modules-center": ["clock"], 9 - "modules-right": ["wireplumber", "battery", "backlight", "hyprland/language", "network", "bluetooth", "tray"], 9 + "modules-right": ["wireplumber", "battery", "backlight", "tray"], 10 10 11 11 "sway/workspaces": { 12 12 "format-icons": { ··· 47 47 "format": " {temperatureC}°C" 48 48 }, 49 49 50 - "network": { 51 - "format": "", 52 - "format-ethernet": "\udb83\udc9d", 53 - "format-wifi": "{icon}", 54 - "format-disconnected": "\udb83\udc9c", 55 - "format-icons": ["\udb82\udd2f", "\udb82\udd1f", "\udb82\udd22", "\udb82\udd25", "\udb82\udd28"], 56 - "tooltip-format-wifi": "{essid} ({signalStrength}%)", 57 - "tooltip-format-ethernet": "{ifname}", 58 - "tooltip-format-disconnected": "Disconnected", 59 - }, 60 - 61 - "bluetooth": { 62 - "format": "\udb80\udcaf", 63 - "format-disabled": "\udb80\udcb2", 64 - "format-connected": "\udb80\udcb1", 65 - "tooltip-format": "{controller_alias}\t{controller_address}", 66 - "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}", 67 - "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}" 68 - }, 69 - 70 50 "hyprland/language": { 71 51 "format": "{short}" 72 52 }, 73 53 74 54 "tray": { 75 - "icon-size": 16, 55 + "icon-size": 20, 76 56 "spacing": 16 77 57 } 78 58 }