this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

big restructure

+230 -2213
-9
Makefile
··· 1 - # Careful about copy/pasting, Makefiles want tabs! 2 - # But you're not copy/pasting, are you? 3 - .PHONY: update 4 - update: 5 - home-manager switch --flake .#hannah 6 - 7 - .PHONY: clean 8 - clean: 9 - nix-collect-garbage -d
assets/icons/nix-lavender.png users/hannah/assets/icons/nix-lavender.png
assets/icons/nix-oled-red.png users/hannah/assets/icons/nix-oled-red.png
assets/icons/nix_rose-pine.png users/hannah/assets/icons/nix_rose-pine.png
assets/profile.png users/hannah/assets/profile.png
assets/themes/base-16/noktis.yaml users/hannah/assets/themes/base-16/noktis.yaml
assets/themes/base-16/oled-lavender.yaml users/hannah/assets/themes/base-16/oled-lavender.yaml
assets/themes/base-16/oled-red.yaml users/hannah/assets/themes/base-16/oled-red.yaml
assets/themes/base-16/oxocarbon.yaml users/hannah/assets/themes/base-16/oxocarbon.yaml
assets/wallpapers/lantern.png

This is a binary file and will not be displayed.

assets/wallpapers/wallhaven-o5rjq9.png users/hannah/assets/wallpapers/wallhaven-o5rjq9.png
assets/wallpapers/wallhaven-p9qmje.jpg users/hannah/assets/wallpapers/wallhaven-p9qmje.jpg
+1 -2
flake.nix
··· 1 - # flake.nix 2 1 { 3 2 description = "Hannah's nix configuration"; 4 3 ··· 46 45 }; 47 46 home-manager.users.hannah = { 48 47 imports = [ 49 - ./home.nix 48 + ./users/hannah/home.nix 50 49 ]; 51 50 }; 52 51 }
-115
home.nix
··· 1 - { inputs, lib, pkgs, config, ... }: let 2 - username = "hannah"; 3 - in { 4 - imports = [ 5 - ./home/quickshell 6 - ./home/niri/default.nix 7 - ]; 8 - 9 - programs.bash = { 10 - enable = true; 11 - bashrcExtra = '' 12 - ''; 13 - }; 14 - 15 - programs.niri = { 16 - enable = true; 17 - }; 18 - 19 - programs.git = { 20 - enable = true; 21 - settings = { 22 - user = { 23 - name = "Hannah Witvrouwen"; 24 - email = "hannah.witvrouwen@gmail.com"; 25 - }; 26 - }; 27 - }; 28 - 29 - programs.swaylock = { 30 - enable = true; 31 - settings = { 32 - color = "000000"; 33 - }; 34 - }; 35 - 36 - programs = { 37 - discord.enable = true; 38 - vscode.enable = true; 39 - swappy.enable = true; 40 - }; 41 - 42 - programs.neovim = { 43 - enable = true; 44 - package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default; 45 - }; 46 - 47 - home = { 48 - sessionPath = [ 49 - "$HOME/.local/bin" 50 - ]; 51 - 52 - packages = with pkgs; [ 53 - vivaldi 54 - steam 55 - bash 56 - git 57 - fastfetch 58 - discord 59 - discordo 60 - vscode 61 - grim 62 - swappy 63 - obsidian 64 - spotify 65 - playerctl 66 - 67 - # dev 68 - ( 69 - with dotnetCorePackages; 70 - combinePackages [ 71 - sdk_8_0 72 - sdk_9_0 73 - sdk_10_0 74 - ] 75 - ) 76 - cargo 77 - rustc 78 - 79 - # nvim 80 - #neovim 81 - nodejs_24 82 - gcc 83 - tree-sitter 84 - ripgrep 85 - unzip 86 - fd 87 - gh 88 - 89 - # quickshell deps 90 - quickshell 91 - qt6Packages.qt5compat 92 - libsForQt5.qt5.qtgraphicaleffects 93 - kdePackages.qtbase 94 - kdePackages.qtdeclarative 95 - kdePackages.qtstyleplugin-kvantum 96 - wallust 97 - bc 98 - 99 - # Niri 100 - xwayland-satellite 101 - wl-clipboard 102 - swaylock 103 - ]; 104 - 105 - 106 - # This needs to actually be set to your username 107 - inherit username; 108 - homeDirectory = "/home/${username}"; 109 - 110 - 111 - # You do not need to change this if you're reading this in the future. 112 - # Don't ever change this after the first build. Don't ask questions. 113 - stateVersion = "25.11"; 114 - }; 115 - }
home/niri/applications.nix users/hannah/niri/applications.nix
home/niri/autostart.nix users/hannah/niri/autostart.nix
home/niri/default.nix users/hannah/niri/default.nix
home/niri/keybinds.nix users/hannah/niri/keybinds.nix
home/niri/rules.nix users/hannah/niri/rules.nix
home/niri/scripts.nix users/hannah/niri/scripts.nix
home/niri/settings.nix users/hannah/niri/settings.nix
-13
home/quickshell/default.nix
··· 1 - { config, lib, pkgs, ... }: 2 - let 3 - homeDir = config.home.homeDirectory; 4 - quickshellDir = "${homeDir}/home-os/home/quickshell/qml"; 5 - quickshellTarget = "${homeDir}/.config/quickshell"; 6 - faceIconSource = "${homeDir}/home-os/assets/profile.png"; 7 - faceIconTarget = "${homeDir}/.face.icon"; 8 - in { 9 - home.activation.symlinkQuickshellAndFaceIcon = lib.hm.dag.entryAfter ["writeBoundary"] '' 10 - ln -sfn "${quickshellDir}" "${quickshellTarget}" 11 - ln -sfn "${faceIconSource}" "${faceIconTarget}" 12 - ''; 13 - }
home/quickshell/qml/Bar/Bar.qml users/hannah/quickshell/qml/Bar/Bar.qml
home/quickshell/qml/Bar/Modules/ActiveWindow.qml users/hannah/quickshell/qml/Bar/Modules/ActiveWindow.qml
home/quickshell/qml/Bar/Modules/Applauncher.qml users/hannah/quickshell/qml/Bar/Modules/Applauncher.qml
home/quickshell/qml/Bar/Modules/Brightness.qml users/hannah/quickshell/qml/Bar/Modules/Brightness.qml
home/quickshell/qml/Bar/Modules/Calendar.qml users/hannah/quickshell/qml/Bar/Modules/Calendar.qml
home/quickshell/qml/Bar/Modules/ClockWidget.qml users/hannah/quickshell/qml/Bar/Modules/ClockWidget.qml
home/quickshell/qml/Bar/Modules/CustomTrayMenu.qml users/hannah/quickshell/qml/Bar/Modules/CustomTrayMenu.qml
home/quickshell/qml/Bar/Modules/Media.qml users/hannah/quickshell/qml/Bar/Modules/Media.qml
home/quickshell/qml/Bar/Modules/SystemInfo.qml users/hannah/quickshell/qml/Bar/Modules/SystemInfo.qml
home/quickshell/qml/Bar/Modules/SystemTray.qml users/hannah/quickshell/qml/Bar/Modules/SystemTray.qml
home/quickshell/qml/Bar/Modules/Time.qml users/hannah/quickshell/qml/Bar/Modules/Time.qml
home/quickshell/qml/Bar/Modules/Volume.qml users/hannah/quickshell/qml/Bar/Modules/Volume.qml
home/quickshell/qml/Bar/Modules/Workspace.qml users/hannah/quickshell/qml/Bar/Modules/Workspace.qml
home/quickshell/qml/Components/Cava.qml users/hannah/quickshell/qml/Components/Cava.qml
home/quickshell/qml/Components/CircularProgressBar.qml users/hannah/quickshell/qml/Components/CircularProgressBar.qml
home/quickshell/qml/Components/CircularSpectrum.qml users/hannah/quickshell/qml/Components/CircularSpectrum.qml
home/quickshell/qml/Components/Corners.qml users/hannah/quickshell/qml/Components/Corners.qml
home/quickshell/qml/Components/IconButton.qml users/hannah/quickshell/qml/Components/IconButton.qml
home/quickshell/qml/Components/PanelWithOverlay.qml users/hannah/quickshell/qml/Components/PanelWithOverlay.qml
home/quickshell/qml/Components/PillIndicator.qml users/hannah/quickshell/qml/Components/PillIndicator.qml
home/quickshell/qml/Components/Spinner.qml users/hannah/quickshell/qml/Components/Spinner.qml
home/quickshell/qml/Components/StyledTooltip.qml users/hannah/quickshell/qml/Components/StyledTooltip.qml
home/quickshell/qml/Components/Tabs.qml users/hannah/quickshell/qml/Components/Tabs.qml
home/quickshell/qml/Helpers/Fuzzysort.js users/hannah/quickshell/qml/Helpers/Fuzzysort.js
home/quickshell/qml/Helpers/IPCHandlers.qml users/hannah/quickshell/qml/Helpers/IPCHandlers.qml
home/quickshell/qml/Helpers/Weather.js users/hannah/quickshell/qml/Helpers/Weather.js
home/quickshell/qml/Programs/zigstat users/hannah/quickshell/qml/Programs/zigstat
home/quickshell/qml/Services/MusicManager.qml users/hannah/quickshell/qml/Services/MusicManager.qml
home/quickshell/qml/Services/Niri.qml users/hannah/quickshell/qml/Services/Niri.qml
-66
home/quickshell/qml/Services/Sysinfo.qml
··· 1 - pragma Singleton 2 - import QtQuick 3 - import Qt.labs.folderlistmodel 4 - import Quickshell 5 - import Quickshell.Io 6 - import qs.Settings 7 - 8 - Singleton { 9 - id: manager 10 - 11 - property string updateInterval: "2s" 12 - property string cpuUsageStr: "" 13 - property string cpuTempStr: "" 14 - property string memoryUsageStr: "" 15 - property string memoryUsagePerStr: "" 16 - property string batteryStatusStr: "" 17 - property real cpuUsage: 0 18 - property real memoryUsage: 0 19 - property real cpuTemp: 0 20 - property real diskUsage: 0 21 - property real memoryUsagePer: 0 22 - property string diskUsageStr: "" 23 - 24 - Process { 25 - id: zigstatProcess 26 - running: true 27 - command: [Quickshell.shellRoot + "/Programs/zigstat", updateInterval] 28 - stdout: SplitParser { 29 - onRead: function (line) { 30 - try { 31 - const data = JSON.parse(line); 32 - cpuUsage = +data.cpu; 33 - cpuTemp = +data.cputemp; 34 - memoryUsage = +data.mem; 35 - memoryUsagePer = +data.memper; 36 - diskUsage = +data.diskper; 37 - cpuUsageStr = data.cpu + "%"; 38 - cpuTempStr = data.cputemp + "°C"; 39 - memoryUsageStr = data.mem + "G"; 40 - memoryUsagePerStr = data.memper + "%"; 41 - diskUsageStr = data.diskper + "%"; 42 - } catch (e) { 43 - console.error("Failed to parse zigstat output:", e); 44 - } 45 - } 46 - } 47 - } 48 - 49 - Process { 50 - id: batteryProcess 51 - running: true 52 - command: ["upower", "-i", "/org/freedesktop/UPower/devices/battery_BAT0"] 53 - stdout: SplitParser { 54 - onRead: function (line) { 55 - try { 56 - const usageMatch = line.match(/percentage:\s+(\d+)%/); 57 - if (usageMatch) { 58 - batteryStatusStr = usageMatch[1] + "%"; 59 - } 60 - } catch (e) { 61 - console.error("Failed to parse battery output:", e); 62 - } 63 - } 64 - } 65 - } 66 - }
home/quickshell/qml/Services/WallpaperManager.qml users/hannah/quickshell/qml/Services/WallpaperManager.qml
home/quickshell/qml/Services/WorkspaceManager.qml users/hannah/quickshell/qml/Services/WorkspaceManager.qml
+2 -2
home/quickshell/qml/Settings/Settings.qml users/hannah/quickshell/qml/Settings/Settings.qml
··· 36 36 } 37 37 JsonAdapter { 38 38 id: settingAdapter 39 - property string weatherCity: "Dinslaken" 39 + property string weatherCity: "Antwerpen" 40 40 property string profileImage: Quickshell.env("HOME") + "/.face" 41 41 property bool useFahrenheit: false 42 42 property string wallpaperFolder: "/usr/share/wallpapers" ··· 66 66 function onWallpaperIntervalChanged() { WallpaperManager.restartRandomWallpaperTimer() } 67 67 function onWallpaperFolderChanged() { WallpaperManager.loadWallpapers() } 68 68 } 69 - } 69 + }
home/quickshell/qml/Settings/Theme.json users/hannah/quickshell/qml/Settings/Theme.json
home/quickshell/qml/Settings/Theme.qml users/hannah/quickshell/qml/Settings/Theme.qml
home/quickshell/qml/Templates/templates/ghostty users/hannah/quickshell/qml/Templates/templates/ghostty
home/quickshell/qml/Templates/templates/quickshell.json users/hannah/quickshell/qml/Templates/templates/quickshell.json
home/quickshell/qml/Templates/wallust.toml users/hannah/quickshell/qml/Templates/wallust.toml
home/quickshell/qml/Widgets/Background.qml users/hannah/quickshell/qml/Widgets/Background.qml
home/quickshell/qml/Widgets/LockScreen.qml users/hannah/quickshell/qml/Widgets/LockScreen.qml
home/quickshell/qml/Widgets/Notification/NotificationHistory.qml users/hannah/quickshell/qml/Widgets/Notification/NotificationHistory.qml
home/quickshell/qml/Widgets/Notification/NotificationIcon.qml users/hannah/quickshell/qml/Widgets/Notification/NotificationIcon.qml
home/quickshell/qml/Widgets/Notification/NotificationManager.qml users/hannah/quickshell/qml/Widgets/Notification/NotificationManager.qml
home/quickshell/qml/Widgets/Notification/NotificationPopup.qml users/hannah/quickshell/qml/Widgets/Notification/NotificationPopup.qml
home/quickshell/qml/Widgets/Overview.qml users/hannah/quickshell/qml/Widgets/Overview.qml
home/quickshell/qml/Widgets/Sidebar/Button.qml users/hannah/quickshell/qml/Widgets/Sidebar/Button.qml
home/quickshell/qml/Widgets/Sidebar/Config/CollapsibleCategory.qml users/hannah/quickshell/qml/Widgets/Sidebar/Config/CollapsibleCategory.qml
home/quickshell/qml/Widgets/Sidebar/Config/ProfileSettings.qml users/hannah/quickshell/qml/Widgets/Sidebar/Config/ProfileSettings.qml
home/quickshell/qml/Widgets/Sidebar/Config/SettingsModal.qml users/hannah/quickshell/qml/Widgets/Sidebar/Config/SettingsModal.qml
home/quickshell/qml/Widgets/Sidebar/Config/WallpaperSettings.qml users/hannah/quickshell/qml/Widgets/Sidebar/Config/WallpaperSettings.qml
home/quickshell/qml/Widgets/Sidebar/Config/WeatherSettings.qml users/hannah/quickshell/qml/Widgets/Sidebar/Config/WeatherSettings.qml
home/quickshell/qml/Widgets/Sidebar/Panel/BluetoothPanel.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/BluetoothPanel.qml
home/quickshell/qml/Widgets/Sidebar/Panel/Music.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/Music.qml
home/quickshell/qml/Widgets/Sidebar/Panel/PanelPopup.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/PanelPopup.qml
home/quickshell/qml/Widgets/Sidebar/Panel/PowerProfile.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/PowerProfile.qml
home/quickshell/qml/Widgets/Sidebar/Panel/QuickAccess.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/QuickAccess.qml
home/quickshell/qml/Widgets/Sidebar/Panel/System.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/System.qml
home/quickshell/qml/Widgets/Sidebar/Panel/SystemMonitor.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/SystemMonitor.qml
home/quickshell/qml/Widgets/Sidebar/Panel/WallpaperPanel.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/WallpaperPanel.qml
home/quickshell/qml/Widgets/Sidebar/Panel/Weather.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/Weather.qml
home/quickshell/qml/Widgets/Sidebar/Panel/WifiPanel.qml users/hannah/quickshell/qml/Widgets/Sidebar/Panel/WifiPanel.qml
+2 -2
home/quickshell/qml/quickshell.conf users/hannah/quickshell/qml/quickshell.conf
··· 3 3 historyWindowWidth=1 4 4 5 5 [quickshell] 6 - currentWallpaper=/home/hannah/home-os/assets/wallpapers/wallhaven-mld9jk.jpg 6 + currentWallpaper=/home/hannah/home-os/users/hannah/assets/wallpapers/wallhaven-o5rjq9.png 7 7 profileImage=/home/hannah/face 8 8 randomWallpaperFlag=false 9 9 showActiveWindowIconFlag=false ··· 16 16 useWallpaperThemeFlag=true 17 17 videoPath=~/Videos/ 18 18 visualizerType=radial 19 - wallpaperFolder=/home/hannah/home-os/assets/wallpapers 19 + wallpaperFolder=/home/hannah/home-os/users/hannah/assets/wallpapers 20 20 wallpaperInterval=60 21 21 wallpaperResize=crop 22 22 weatherCity=Dinslaken
home/quickshell/qml/shell.qml users/hannah/quickshell/qml/shell.qml
-35
nvim/.github/ISSUE_TEMPLATE/bug_report.md
··· 1 - --- 2 - name: Bug report 3 - about: Create a report to help us improve 4 - title: '' 5 - labels: '' 6 - assignees: '' 7 - 8 - --- 9 - 10 - <!-- Any bug report not following this template will be immediately closed. Thanks --> 11 - 12 - ## Before Reporting an Issue 13 - - I have read the kickstart.nvim README.md. 14 - - I have read the appropriate plugin's documentation. 15 - - I have searched that this issue has not been reported before. 16 - 17 - - [ ] **By checking this, I confirm that the above steps are completed. I understand leaving this unchecked will result in this report being closed immediately.** 18 - 19 - ## Describe the bug 20 - <!-- A clear and concise description of what the bug is. --> 21 - 22 - ## To Reproduce 23 - <!-- Steps to reproduce the behavior. --> 24 - 1. ... 25 - 26 - ## Desktop 27 - <!-- please complete the following information. --> 28 - - OS: 29 - - Terminal: 30 - 31 - ## Neovim Version 32 - <!-- Output of running `:version` from inside of neovim. --> 33 - 34 - ``` 35 - ```
-8
nvim/.github/pull_request_template.md
··· 1 - *************************************************************************** 2 - **NOTE** 3 - Please verify that the `base repository` above has the intended destination! 4 - Github by default opens Pull Requests against the parent of a forked repository. 5 - If this is your personal fork and you didn't intend to open a PR for contribution 6 - to the original project then adjust the `base repository` accordingly. 7 - ************************************************************************** 8 -
-21
nvim/.github/workflows/stylua.yml
··· 1 - # Check Lua Formatting 2 - name: Check Lua Formatting 3 - on: pull_request_target 4 - 5 - jobs: 6 - stylua-check: 7 - if: github.repository == 'nvim-lua/kickstart.nvim' 8 - name: Stylua Check 9 - runs-on: ubuntu-latest 10 - steps: 11 - - name: Checkout Code 12 - uses: actions/checkout@v2 13 - with: 14 - ref: ${{ github.event.pull_request.head.sha }} 15 - - name: Stylua Check 16 - uses: JohnnyMorganz/stylua-action@v3 17 - with: 18 - token: ${{ secrets.GITHUB_TOKEN }} 19 - version: latest 20 - args: --check . 21 -
-7
nvim/.gitignore
··· 1 - tags 2 - test.sh 3 - .luarc.json 4 - nvim 5 - 6 - spell/ 7 - lazy-lock.json
-6
nvim/.stylua.toml
··· 1 - column_width = 160 2 - line_endings = "Unix" 3 - indent_type = "Spaces" 4 - indent_width = 2 5 - quote_style = "AutoPreferSingle" 6 - call_parentheses = "None"
-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.
-241
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 - [fd-find](https://github.com/sharkdp/fd#installation) 28 - - Clipboard tool (xclip/xsel/win32yank or other depending on the platform) 29 - - A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons 30 - - if you have it set `vim.g.have_nerd_font` in `init.lua` to true 31 - - Emoji fonts (Ubuntu only, and only if you want emoji!) `sudo apt install fonts-noto-color-emoji` 32 - - Language Setup: 33 - - If you want to write Typescript, you need `npm` 34 - - If you want to write Golang, you will need `go` 35 - - etc. 36 - 37 - > [!NOTE] 38 - > See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes 39 - > and quick install snippets 40 - 41 - ### Install Kickstart 42 - 43 - > [!NOTE] 44 - > [Backup](#FAQ) your previous configuration (if any exists) 45 - 46 - Neovim's configurations are located under the following paths, depending on your OS: 47 - 48 - | OS | PATH | 49 - | :- | :--- | 50 - | Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | 51 - | Windows (cmd)| `%localappdata%\nvim\` | 52 - | Windows (powershell)| `$env:LOCALAPPDATA\nvim\` | 53 - 54 - #### Recommended Step 55 - 56 - [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo 57 - so that you have your own copy that you can modify, then install by cloning the 58 - fork to your machine using one of the commands below, depending on your OS. 59 - 60 - > [!NOTE] 61 - > Your fork's URL will be something like this: 62 - > `https://github.com/<your_github_username>/kickstart.nvim.git` 63 - 64 - You likely want to remove `lazy-lock.json` from your fork's `.gitignore` file 65 - too - it's ignored in the kickstart repo to make maintenance easier, but it's 66 - [recommended to track it in version control](https://lazy.folke.io/usage/lockfile). 67 - 68 - #### Clone kickstart.nvim 69 - 70 - > [!NOTE] 71 - > If following the recommended step above (i.e., forking the repo), replace 72 - > `nvim-lua` with `<your_github_username>` in the commands below 73 - 74 - <details><summary> Linux and Mac </summary> 75 - 76 - ```sh 77 - git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim 78 - ``` 79 - 80 - </details> 81 - 82 - <details><summary> Windows </summary> 83 - 84 - If you're using `cmd.exe`: 85 - 86 - ``` 87 - git clone https://github.com/nvim-lua/kickstart.nvim.git "%localappdata%\nvim" 88 - ``` 89 - 90 - If you're using `powershell.exe` 91 - 92 - ``` 93 - git clone https://github.com/nvim-lua/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim" 94 - ``` 95 - 96 - </details> 97 - 98 - ### Post Installation 99 - 100 - Start Neovim 101 - 102 - ```sh 103 - nvim 104 - ``` 105 - 106 - That's it! Lazy will install all the plugins you have. Use `:Lazy` to view 107 - the current plugin status. Hit `q` to close the window. 108 - 109 - #### Read The Friendly Documentation 110 - 111 - Read through the `init.lua` file in your configuration folder for more 112 - information about extending and exploring Neovim. That also includes 113 - examples of adding popularly requested plugins. 114 - 115 - > [!NOTE] 116 - > For more information about a particular plugin check its repository's documentation. 117 - 118 - 119 - ### Getting Started 120 - 121 - [The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o) 122 - 123 - ### FAQ 124 - 125 - * What should I do if I already have a pre-existing Neovim configuration? 126 - * You should back it up and then delete all associated files. 127 - * This includes your existing init.lua and the Neovim files in `~/.local` 128 - which can be deleted with `rm -rf ~/.local/share/nvim/` 129 - * Can I keep my existing configuration in parallel to kickstart? 130 - * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME` 131 - to maintain multiple configurations. For example, you can install the kickstart 132 - configuration in `~/.config/nvim-kickstart` and create an alias: 133 - ``` 134 - alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim' 135 - ``` 136 - When you run Neovim using `nvim-kickstart` alias it will use the alternative 137 - config directory and the matching local directory 138 - `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim 139 - distribution that you would like to try out. 140 - * What if I want to "uninstall" this configuration: 141 - * See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information 142 - * Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files? 143 - * The main purpose of kickstart is to serve as a teaching tool and a reference 144 - configuration that someone can easily use to `git clone` as a basis for their own. 145 - As you progress in learning Neovim and Lua, you might consider splitting `init.lua` 146 - into smaller parts. A fork of kickstart that does this while maintaining the 147 - same functionality is available here: 148 - * [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim) 149 - * Discussions on this topic can be found here: 150 - * [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218) 151 - * [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473) 152 - 153 - ### Install Recipes 154 - 155 - Below you can find OS specific install instructions for Neovim and dependencies. 156 - 157 - After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step. 158 - 159 - #### Windows Installation 160 - 161 - <details><summary>Windows with Microsoft C++ Build Tools and CMake</summary> 162 - Installation may require installing build tools and updating the run command for `telescope-fzf-native` 163 - 164 - See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation) 165 - 166 - This requires: 167 - 168 - - Install CMake and the Microsoft C++ Build Tools on Windows 169 - 170 - ```lua 171 - {'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } 172 - ``` 173 - </details> 174 - <details><summary>Windows with gcc/make using chocolatey</summary> 175 - Alternatively, one can install gcc and make which don't require changing the config, 176 - the easiest way is to use choco: 177 - 178 - 1. install [chocolatey](https://chocolatey.org/install) 179 - either follow the instructions on the page or use winget, 180 - run in cmd as **admin**: 181 - ``` 182 - winget install --accept-source-agreements chocolatey.chocolatey 183 - ``` 184 - 185 - 2. install all requirements using choco, exit the previous cmd and 186 - open a new one so that choco path is set, and run in cmd as **admin**: 187 - ``` 188 - choco install -y neovim git ripgrep wget fd unzip gzip mingw make 189 - ``` 190 - </details> 191 - <details><summary>WSL (Windows Subsystem for Linux)</summary> 192 - 193 - ``` 194 - wsl --install 195 - wsl 196 - sudo add-apt-repository ppa:neovim-ppa/unstable -y 197 - sudo apt update 198 - sudo apt install make gcc ripgrep unzip git xclip neovim 199 - ``` 200 - </details> 201 - 202 - #### Linux Install 203 - <details><summary>Ubuntu Install Steps</summary> 204 - 205 - ``` 206 - sudo add-apt-repository ppa:neovim-ppa/unstable -y 207 - sudo apt update 208 - sudo apt install make gcc ripgrep unzip git xclip neovim 209 - ``` 210 - </details> 211 - <details><summary>Debian Install Steps</summary> 212 - 213 - ``` 214 - sudo apt update 215 - sudo apt install make gcc ripgrep unzip git xclip curl 216 - 217 - # Now we install nvim 218 - curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz 219 - sudo rm -rf /opt/nvim-linux-x86_64 220 - sudo mkdir -p /opt/nvim-linux-x86_64 221 - sudo chmod a+rX /opt/nvim-linux-x86_64 222 - sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz 223 - 224 - # make it available in /usr/local/bin, distro installs to /usr/bin 225 - sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/ 226 - ``` 227 - </details> 228 - <details><summary>Fedora Install Steps</summary> 229 - 230 - ``` 231 - sudo dnf install -y gcc make git ripgrep fd-find unzip neovim 232 - ``` 233 - </details> 234 - 235 - <details><summary>Arch Install Steps</summary> 236 - 237 - ``` 238 - sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim 239 - ``` 240 - </details> 241 -
-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:
-1045
nvim/init.lua
··· 1 - --[[ 2 - 3 - ===================================================================== 4 - ==================== READ THIS BEFORE CONTINUING ==================== 5 - ===================================================================== 6 - ======== .-----. ======== 7 - ======== .----------------------. | === | ======== 8 - ======== |.-""""""""""""""""""-.| |-----| ======== 9 - ======== || || | === | ======== 10 - ======== || KICKSTART.NVIM || |-----| ======== 11 - ======== || || | === | ======== 12 - ======== || || |-----| ======== 13 - ======== ||:Tutor || |:::::| ======== 14 - ======== |'-..................-'| |____o| ======== 15 - ======== `"")----------------(""` ___________ ======== 16 - ======== /::::::::::| |::::::::::\ \ no mouse \ ======== 17 - ======== /:::========| |==hjkl==:::\ \ required \ ======== 18 - ======== '""""""""""""' '""""""""""""' '""""""""""' ======== 19 - ======== ======== 20 - ===================================================================== 21 - ===================================================================== 22 - 23 - What is Kickstart? 24 - 25 - Kickstart.nvim is *not* a distribution. 26 - 27 - Kickstart.nvim is a starting point for your own configuration. 28 - The goal is that you can read every line of code, top-to-bottom, understand 29 - what your configuration is doing, and modify it to suit your needs. 30 - 31 - Once you've done that, you can start exploring, configuring and tinkering to 32 - make Neovim your own! That might mean leaving Kickstart just the way it is for a while 33 - or immediately breaking it into modular pieces. It's up to you! 34 - 35 - If you don't know anything about Lua, I recommend taking some time to read through 36 - a guide. One possible example which will only take 10-15 minutes: 37 - - https://learnxinyminutes.com/docs/lua/ 38 - 39 - After understanding a bit more about Lua, you can use `:help lua-guide` as a 40 - reference for how Neovim integrates Lua. 41 - - :help lua-guide 42 - - (or HTML version): https://neovim.io/doc/user/lua-guide.html 43 - 44 - Kickstart Guide: 45 - 46 - TODO: The very first thing you should do is to run the command `:Tutor` in Neovim. 47 - 48 - If you don't know what this means, type the following: 49 - - <escape key> 50 - - : 51 - - Tutor 52 - - <enter key> 53 - 54 - (If you already know the Neovim basics, you can skip this step.) 55 - 56 - Once you've completed that, you can continue working through **AND READING** the rest 57 - of the kickstart init.lua. 58 - 59 - Next, run AND READ `:help`. 60 - This will open up a help window with some basic information 61 - about reading, navigating and searching the builtin help documentation. 62 - 63 - This should be the first place you go to look when you're stuck or confused 64 - with something. It's one of my favorite Neovim features. 65 - 66 - MOST IMPORTANTLY, we provide a keymap "<space>sh" to [s]earch the [h]elp documentation, 67 - which is very useful when you're not exactly sure of what you're looking for. 68 - 69 - I have left several `:help X` comments throughout the init.lua 70 - These are hints about where to find more information about the relevant settings, 71 - plugins or Neovim features used in Kickstart. 72 - 73 - NOTE: Look for lines like this 74 - 75 - Throughout the file. These are for you, the reader, to help you understand what is happening. 76 - Feel free to delete them once you know what you're doing, but they should serve as a guide 77 - for when you are first encountering a few different constructs in your Neovim config. 78 - 79 - If you experience any errors while trying to install kickstart, run `:checkhealth` for more info. 80 - 81 - I hope you enjoy your Neovim journey, 82 - - TJ 83 - 84 - P.S. You can delete this when you're done too. It's your config now! :) 85 - --]] 86 - 87 - -- Set <space> as the leader key 88 - -- See `:help mapleader` 89 - -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) 90 - vim.g.mapleader = ' ' 91 - vim.g.maplocalleader = ' ' 92 - 93 - -- Set to true if you have a Nerd Font installed and selected in the terminal 94 - vim.g.have_nerd_font = true 95 - 96 - -- [[ Setting options ]] 97 - -- See `:help vim.o` 98 - -- NOTE: You can change these options as you wish! 99 - -- For more options, you can see `:help option-list` 100 - 101 - -- Make line numbers default 102 - vim.o.number = true 103 - -- You can also add relative line numbers, to help with jumping. 104 - -- Experiment for yourself to see if you like it! 105 - vim.o.relativenumber = true 106 - 107 - -- Enable mouse mode, can be useful for resizing splits for example! 108 - vim.o.mouse = 'a' 109 - 110 - -- Don't show the mode, since it's already in the status line 111 - vim.o.showmode = false 112 - 113 - -- Session config for rmagatti/auto-session 114 - vim.o.sessionoptions = 'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions' 115 - 116 - -- use OS slash as the path separator 117 - vim.opt.shellslash = false 118 - 119 - -- Sync clipboard between OS and Neovim. 120 - -- Schedule the setting after `UiEnter` because it can increase startup-time. 121 - -- Remove this option if you want your OS clipboard to remain independent. 122 - -- See `:help 'clipboard'` 123 - vim.schedule(function() 124 - vim.o.clipboard = 'unnamedplus' 125 - end) 126 - 127 - -- Enable break indent 128 - vim.o.breakindent = true 129 - 130 - -- Save undo history 131 - vim.o.undofile = true 132 - 133 - -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term 134 - vim.o.ignorecase = true 135 - vim.o.smartcase = true 136 - 137 - -- Keep signcolumn on by default 138 - vim.o.signcolumn = 'yes' 139 - 140 - -- Decrease update time 141 - vim.o.updatetime = 250 142 - 143 - -- Decrease mapped sequence wait time 144 - vim.o.timeoutlen = 300 145 - 146 - -- Configure how new splits should be opened 147 - vim.o.splitright = true 148 - vim.o.splitbelow = true 149 - 150 - -- Sets how neovim will display certain whitespace characters in the editor. 151 - -- See `:help 'list'` 152 - -- and `:help 'listchars'` 153 - -- 154 - -- Notice listchars is set using `vim.opt` instead of `vim.o`. 155 - -- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables. 156 - -- See `:help lua-options` 157 - -- and `:help lua-options-guide` 158 - vim.o.list = true 159 - vim.opt.listchars = { tab = ' ', trail = '·', nbsp = '␣' } -- » 160 - vim.o.tabstop = 4 161 - vim.o.shiftwidth = 4 162 - vim.o.expandtab = true 163 - vim.o.smarttab = true 164 - -- Preview substitutions live, as you type! 165 - vim.o.inccommand = 'split' 166 - 167 - -- Show which line your cursor is on 168 - vim.o.cursorline = true 169 - 170 - -- Minimal number of screen lines to keep above and below the cursor. 171 - vim.o.scrolloff = 10 172 - 173 - -- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), 174 - -- instead raise a dialog asking if you wish to save the current file(s) 175 - -- See `:help 'confirm'` 176 - vim.o.confirm = true 177 - 178 - -- [[ Basic Keymaps ]] 179 - -- See `:help vim.keymap.set()` 180 - 181 - -- Clear highlights on search when pressing <Esc> in normal mode 182 - -- See `:help hlsearch` 183 - vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>') 184 - 185 - -- Diagnostic keymaps 186 - vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) 187 - 188 - -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier 189 - -- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which 190 - -- is not what someone will guess without a bit more experience. 191 - -- 192 - -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping 193 - -- or just use <C-\><C-n> to exit terminal mode 194 - vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' }) 195 - 196 - -- TIP: Disable arrow keys in normal mode 197 - -- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>') 198 - -- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>') 199 - -- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>') 200 - -- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>') 201 - 202 - -- Keybinds to make split navigation easier. 203 - -- Use CTRL+<hjkl> to switch between windows 204 - -- 205 - -- See `:help wincmd` for a list of all window commands 206 - vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' }) 207 - vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' }) 208 - vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' }) 209 - vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' }) 210 - 211 - -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes 212 - -- vim.keymap.set("n", "<C-S-h>", "<C-w>H", { desc = "Move window to the left" }) 213 - -- vim.keymap.set("n", "<C-S-l>", "<C-w>L", { desc = "Move window to the right" }) 214 - -- vim.keymap.set("n", "<C-S-j>", "<C-w>J", { desc = "Move window to the lower" }) 215 - -- vim.keymap.set("n", "<C-S-k>", "<C-w>K", { desc = "Move window to the upper" }) 216 - 217 - -- [[ Basic Autocommands ]] 218 - -- See `:help lua-guide-autocommands` 219 - 220 - -- Highlight when yanking (copying) text 221 - -- Try it with `yap` in normal mode 222 - -- See `:help vim.hl.on_yank()` 223 - vim.api.nvim_create_autocmd('TextYankPost', { 224 - desc = 'Highlight when yanking (copying) text', 225 - group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }), 226 - callback = function() 227 - vim.hl.on_yank() 228 - end, 229 - }) 230 - 231 - -- [[ Install `lazy.nvim` plugin manager ]] 232 - -- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info 233 - local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' 234 - if not (vim.uv or vim.loop).fs_stat(lazypath) then 235 - local lazyrepo = 'https://github.com/folke/lazy.nvim.git' 236 - local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath } 237 - if vim.v.shell_error ~= 0 then 238 - error('Error cloning lazy.nvim:\n' .. out) 239 - end 240 - end 241 - 242 - ---@type vim.Option 243 - local rtp = vim.opt.rtp 244 - rtp:prepend(lazypath) 245 - 246 - -- [[ Configure and install plugins ]] 247 - -- 248 - -- To check the current status of your plugins, run 249 - -- :Lazy 250 - -- 251 - -- You can press `?` in this menu for help. Use `:q` to close the window 252 - -- 253 - -- To update plugins you can run 254 - -- :Lazy update 255 - -- 256 - -- NOTE: Here is where you install your plugins. 257 - require('lazy').setup({ 258 - -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). 259 - 'NMAC427/guess-indent.nvim', -- Detect tabstop and shiftwidth automatically 260 - 261 - -- NOTE: Plugins can also be added by using a table, 262 - -- with the first argument being the link and the following 263 - -- keys can be used to configure plugin behavior/loading/etc. 264 - -- 265 - -- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded. 266 - -- 267 - 268 - -- Alternatively, use `config = function() ... end` for full control over the configuration. 269 - -- If you prefer to call `setup` explicitly, use: 270 - -- { 271 - -- 'lewis6991/gitsigns.nvim', 272 - -- config = function() 273 - -- require('gitsigns').setup({ 274 - -- -- Your gitsigns configuration here 275 - -- }) 276 - -- end, 277 - -- } 278 - -- 279 - -- Here is a more advanced example where we pass configuration 280 - -- options to `gitsigns.nvim`. 281 - -- 282 - -- See `:help gitsigns` to understand what the configuration keys do 283 - { -- Adds git related signs to the gutter, as well as utilities for managing changes 284 - 'lewis6991/gitsigns.nvim', 285 - opts = { 286 - signs = { 287 - add = { text = '+' }, 288 - change = { text = '~' }, 289 - delete = { text = '_' }, 290 - topdelete = { text = '‾' }, 291 - changedelete = { text = '~' }, 292 - }, 293 - }, 294 - }, 295 - 296 - -- NOTE: Plugins can also be configured to run Lua code when they are loaded. 297 - -- 298 - -- This is often very useful to both group configuration, as well as handle 299 - -- lazy loading plugins that don't need to be loaded immediately at startup. 300 - -- 301 - -- For example, in the following configuration, we use: 302 - -- event = 'VimEnter' 303 - -- 304 - -- which loads which-key before all the UI elements are loaded. Events can be 305 - -- normal autocommands events (`:help autocmd-events`). 306 - -- 307 - -- Then, because we use the `opts` key (recommended), the configuration runs 308 - -- after the plugin has been loaded as `require(MODULE).setup(opts)`. 309 - 310 - { -- Useful plugin to show you pending keybinds. 311 - 'folke/which-key.nvim', 312 - event = 'VimEnter', -- Sets the loading event to 'VimEnter' 313 - opts = { 314 - -- delay between pressing a key and opening which-key (milliseconds) 315 - -- this setting is independent of vim.o.timeoutlen 316 - delay = 0, 317 - icons = { 318 - -- set icon mappings to true if you have a Nerd Font 319 - mappings = vim.g.have_nerd_font, 320 - -- If you are using a Nerd Font: set icons.keys to an empty table which will use the 321 - -- default which-key.nvim defined Nerd Font icons, otherwise define a string table 322 - keys = vim.g.have_nerd_font and {} or { 323 - Up = '<Up> ', 324 - Down = '<Down> ', 325 - Left = '<Left> ', 326 - Right = '<Right> ', 327 - C = '<C-…> ', 328 - M = '<M-…> ', 329 - D = '<D-…> ', 330 - S = '<S-…> ', 331 - CR = '<CR> ', 332 - Esc = '<Esc> ', 333 - ScrollWheelDown = '<ScrollWheelDown> ', 334 - ScrollWheelUp = '<ScrollWheelUp> ', 335 - NL = '<NL> ', 336 - BS = '<BS> ', 337 - Space = '<Space> ', 338 - Tab = '<Tab> ', 339 - F1 = '<F1>', 340 - F2 = '<F2>', 341 - F3 = '<F3>', 342 - F4 = '<F4>', 343 - F5 = '<F5>', 344 - F6 = '<F6>', 345 - F7 = '<F7>', 346 - F8 = '<F8>', 347 - F9 = '<F9>', 348 - F10 = '<F10>', 349 - F11 = '<F11>', 350 - F12 = '<F12>', 351 - }, 352 - }, 353 - 354 - -- Document existing key chains 355 - spec = { 356 - { '<leader>s', group = '[S]earch' }, 357 - { '<leader>t', group = '[T]oggle' }, 358 - { '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } }, 359 - }, 360 - }, 361 - }, 362 - 363 - -- NOTE: Plugins can specify dependencies. 364 - -- 365 - -- The dependencies are proper plugin specifications as well - anything 366 - -- you do for a plugin at the top level, you can do for a dependency. 367 - -- 368 - -- Use the `dependencies` key to specify the dependencies of a particular plugin 369 - 370 - { -- Fuzzy Finder (files, lsp, etc) 371 - 'nvim-telescope/telescope.nvim', 372 - event = 'VimEnter', 373 - dependencies = { 374 - 'nvim-lua/plenary.nvim', 375 - { -- If encountering errors, see telescope-fzf-native README for installation instructions 376 - 'nvim-telescope/telescope-fzf-native.nvim', 377 - 378 - -- `build` is used to run some command when the plugin is installed/updated. 379 - -- This is only run then, not every time Neovim starts up. 380 - build = 'make', 381 - 382 - -- `cond` is a condition used to determine whether this plugin should be 383 - -- installed and loaded. 384 - cond = function() 385 - return vim.fn.executable 'make' == 1 386 - end, 387 - }, 388 - { 'nvim-telescope/telescope-ui-select.nvim' }, 389 - 390 - -- Useful for getting pretty icons, but requires a Nerd Font. 391 - { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, 392 - }, 393 - config = function() 394 - -- Telescope is a fuzzy finder that comes with a lot of different things that 395 - -- it can fuzzy find! It's more than just a "file finder", it can search 396 - -- many different aspects of Neovim, your workspace, LSP, and more! 397 - -- 398 - -- The easiest way to use Telescope, is to start by doing something like: 399 - -- :Telescope help_tags 400 - -- 401 - -- After running this command, a window will open up and you're able to 402 - -- type in the prompt window. You'll see a list of `help_tags` options and 403 - -- a corresponding preview of the help. 404 - -- 405 - -- Two important keymaps to use while in Telescope are: 406 - -- - Insert mode: <c-/> 407 - -- - Normal mode: ? 408 - -- 409 - -- This opens a window that shows you all of the keymaps for the current 410 - -- Telescope picker. This is really useful to discover what Telescope can 411 - -- do as well as how to actually do it! 412 - 413 - -- [[ Configure Telescope ]] 414 - -- See `:help telescope` and `:help telescope.setup()` 415 - require('telescope').setup { 416 - -- You can put your default mappings / updates / etc. in here 417 - -- All the info you're looking for is in `:help telescope.setup()` 418 - -- 419 - -- defaults = { 420 - -- mappings = { 421 - -- i = { ['<c-enter>'] = 'to_fuzzy_refine' }, 422 - -- }, 423 - -- }, 424 - -- pickers = {} 425 - extensions = { 426 - ['ui-select'] = { 427 - require('telescope.themes').get_dropdown(), 428 - }, 429 - }, 430 - } 431 - 432 - -- Enable Telescope extensions if they are installed 433 - pcall(require('telescope').load_extension, 'fzf') 434 - pcall(require('telescope').load_extension, 'ui-select') 435 - 436 - -- See `:help telescope.builtin` 437 - local builtin = require 'telescope.builtin' 438 - vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) 439 - vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) 440 - vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' }) 441 - vim.keymap.set('n', '<leader>ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) 442 - vim.keymap.set('n', '<leader>sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) 443 - vim.keymap.set('n', '<leader>sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) 444 - vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) 445 - vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' }) 446 - vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) 447 - vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' }) 448 - 449 - -- Slightly advanced example of overriding default behavior and theme 450 - vim.keymap.set('n', '<leader>/', function() 451 - -- You can pass additional configuration to Telescope to change the theme, layout, etc. 452 - builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { 453 - winblend = 10, 454 - previewer = false, 455 - }) 456 - end, { desc = '[/] Fuzzily search in current buffer' }) 457 - 458 - -- It's also possible to pass additional configuration options. 459 - -- See `:help telescope.builtin.live_grep()` for information about particular keys 460 - vim.keymap.set('n', '<leader>s/', function() 461 - builtin.live_grep { 462 - grep_open_files = true, 463 - prompt_title = 'Live Grep in Open Files', 464 - } 465 - end, { desc = '[S]earch [/] in Open Files' }) 466 - 467 - -- Shortcut for searching your Neovim configuration files 468 - vim.keymap.set('n', '<leader>sn', function() 469 - builtin.find_files { cwd = vim.fn.stdpath 'config' } 470 - end, { desc = '[S]earch [N]eovim files' }) 471 - end, 472 - }, 473 - 474 - -- LSP Plugins 475 - { 476 - -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins 477 - -- used for completion, annotations and signatures of Neovim apis 478 - 'folke/lazydev.nvim', 479 - ft = 'lua', 480 - opts = { 481 - library = { 482 - -- Load luvit types when the `vim.uv` word is found 483 - { path = '${3rd}/luv/library', words = { 'vim%.uv' } }, 484 - }, 485 - }, 486 - }, 487 - { 488 - -- Main LSP Configuration 489 - 'neovim/nvim-lspconfig', 490 - dependencies = { 491 - -- Automatically install LSPs and related tools to stdpath for Neovim 492 - -- Mason must be loaded before its dependents so we need to set it up here. 493 - -- NOTE: `opts = {}` is the same as calling `require('mason').setup({})` 494 - { 495 - 'mason-org/mason.nvim', 496 - opts = { 497 - registries = { 498 - 'github:mason-org/mason-registry', 499 - 'github:Crashdummyy/mason-registry', 500 - }, 501 - }, 502 - }, 503 - 'mason-org/mason-lspconfig.nvim', 504 - 'WhoIsSethDaniel/mason-tool-installer.nvim', 505 - 506 - -- Useful status updates for LSP. 507 - { 'j-hui/fidget.nvim', opts = {} }, 508 - 509 - -- Allows extra capabilities provided by blink.cmp 510 - 'saghen/blink.cmp', 511 - }, 512 - config = function() 513 - -- Brief aside: **What is LSP?** 514 - -- 515 - -- LSP is an initialism you've probably heard, but might not understand what it is. 516 - -- 517 - -- LSP stands for Language Server Protocol. It's a protocol that helps editors 518 - -- and language tooling communicate in a standardized fashion. 519 - -- 520 - -- In general, you have a "server" which is some tool built to understand a particular 521 - -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers 522 - -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone 523 - -- processes that communicate with some "client" - in this case, Neovim! 524 - -- 525 - -- LSP provides Neovim with features like: 526 - -- - Go to definition 527 - -- - Find references 528 - -- - Autocompletion 529 - -- - Symbol Search 530 - -- - and more! 531 - -- 532 - -- Thus, Language Servers are external tools that must be installed separately from 533 - -- Neovim. This is where `mason` and related plugins come into play. 534 - -- 535 - -- If you're wondering about lsp vs treesitter, you can check out the wonderfully 536 - -- and elegantly composed help section, `:help lsp-vs-treesitter` 537 - 538 - -- This function gets run when an LSP attaches to a particular buffer. 539 - -- That is to say, every time a new file is opened that is associated with 540 - -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this 541 - -- function will be executed to configure the current buffer 542 - vim.api.nvim_create_autocmd('LspAttach', { 543 - group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), 544 - callback = function(event) 545 - -- NOTE: Remember that Lua is a real programming language, and as such it is possible 546 - -- to define small helper and utility functions so you don't have to repeat yourself. 547 - -- 548 - -- In this case, we create a function that lets us more easily define mappings specific 549 - -- for LSP related items. It sets the mode, buffer and description for us each time. 550 - local map = function(keys, func, desc, mode) 551 - mode = mode or 'n' 552 - vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) 553 - end 554 - 555 - -- Rename the variable under your cursor. 556 - -- Most Language Servers support renaming across files, etc. 557 - map('grn', vim.lsp.buf.rename, '[R]e[n]ame') 558 - 559 - -- Execute a code action, usually your cursor needs to be on top of an error 560 - -- or a suggestion from your LSP for this to activate. 561 - map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' }) 562 - 563 - -- Find references for the word under your cursor. 564 - map('grr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') 565 - 566 - -- Jump to the implementation of the word under your cursor. 567 - -- Useful when your language has ways of declaring types without an actual implementation. 568 - map('gri', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') 569 - 570 - -- Jump to the definition of the word under your cursor. 571 - -- This is where a variable was first declared, or where a function is defined, etc. 572 - -- To jump back, press <C-t>. 573 - map('grd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') 574 - 575 - -- WARN: This is not Goto Definition, this is Goto Declaration. 576 - -- For example, in C this would take you to the header. 577 - map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') 578 - 579 - -- Fuzzy find all the symbols in your current document. 580 - -- Symbols are things like variables, functions, types, etc. 581 - map('gO', require('telescope.builtin').lsp_document_symbols, 'Open Document Symbols') 582 - 583 - -- Fuzzy find all the symbols in your current workspace. 584 - -- Similar to document symbols, except searches over your entire project. 585 - map('gW', require('telescope.builtin').lsp_dynamic_workspace_symbols, 'Open Workspace Symbols') 586 - 587 - -- Jump to the type of the word under your cursor. 588 - -- Useful when you're not sure what type a variable is and you want to see 589 - -- the definition of its *type*, not where it was *defined*. 590 - map('grt', require('telescope.builtin').lsp_type_definitions, '[G]oto [T]ype Definition') 591 - 592 - -- This function resolves a difference between neovim nightly (version 0.11) and stable (version 0.10) 593 - ---@param client vim.lsp.Client 594 - ---@param method vim.lsp.protocol.Method 595 - ---@param bufnr? integer some lsp support methods only in specific files 596 - ---@return boolean 597 - local function client_supports_method(client, method, bufnr) 598 - if vim.fn.has 'nvim-0.11' == 1 then 599 - return client:supports_method(method, bufnr) 600 - else 601 - ---@diagnostic disable-next-line: param-type-mismatch 602 - return client.supports_method(method, { bufnr = bufnr }) 603 - end 604 - end 605 - 606 - -- The following two autocommands are used to highlight references of the 607 - -- word under your cursor when your cursor rests there for a little while. 608 - -- See `:help CursorHold` for information about when this is executed 609 - -- 610 - -- When you move your cursor, the highlights will be cleared (the second autocommand). 611 - local client = vim.lsp.get_client_by_id(event.data.client_id) 612 - if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then 613 - local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) 614 - vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { 615 - buffer = event.buf, 616 - group = highlight_augroup, 617 - callback = vim.lsp.buf.document_highlight, 618 - }) 619 - 620 - vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { 621 - buffer = event.buf, 622 - group = highlight_augroup, 623 - callback = vim.lsp.buf.clear_references, 624 - }) 625 - 626 - vim.api.nvim_create_autocmd('LspDetach', { 627 - group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), 628 - callback = function(event2) 629 - vim.lsp.buf.clear_references() 630 - vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } 631 - end, 632 - }) 633 - end 634 - 635 - -- The following code creates a keymap to toggle inlay hints in your 636 - -- code, if the language server you are using supports them 637 - -- 638 - -- This may be unwanted, since they displace some of your code 639 - if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then 640 - map('<leader>th', function() 641 - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) 642 - end, '[T]oggle Inlay [H]ints') 643 - end 644 - end, 645 - }) 646 - 647 - -- Diagnostic Config 648 - -- See :help vim.diagnostic.Opts 649 - vim.diagnostic.config { 650 - severity_sort = true, 651 - float = { border = 'rounded', source = 'if_many' }, 652 - underline = { severity = vim.diagnostic.severity.WARN }, 653 - signs = vim.g.have_nerd_font and { 654 - text = { 655 - [vim.diagnostic.severity.ERROR] = '󰅚 ', 656 - [vim.diagnostic.severity.WARN] = '󰀪 ', 657 - [vim.diagnostic.severity.INFO] = '󰋽 ', 658 - [vim.diagnostic.severity.HINT] = '󰌶 ', 659 - }, 660 - } or {}, 661 - virtual_text = { 662 - source = 'if_many', 663 - spacing = 2, 664 - format = function(diagnostic) 665 - local diagnostic_message = { 666 - [vim.diagnostic.severity.ERROR] = diagnostic.message, 667 - [vim.diagnostic.severity.WARN] = diagnostic.message, 668 - [vim.diagnostic.severity.INFO] = diagnostic.message, 669 - [vim.diagnostic.severity.HINT] = diagnostic.message, 670 - } 671 - return diagnostic_message[diagnostic.severity] 672 - end, 673 - }, 674 - } 675 - 676 - -- LSP servers and clients are able to communicate to each other what features they support. 677 - -- By default, Neovim doesn't support everything that is in the LSP specification. 678 - -- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities. 679 - -- So, we create new capabilities with blink.cmp, and then broadcast that to the servers. 680 - local capabilities = require('blink.cmp').get_lsp_capabilities() 681 - 682 - -- Enable the following language servers 683 - -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. 684 - -- 685 - -- Add any additional override configuration in the following tables. Available keys are: 686 - -- - cmd (table): Override the default command used to start the server 687 - -- - filetypes (table): Override the default list of associated filetypes for the server 688 - -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features. 689 - -- - settings (table): Override the default settings passed when initializing the server. 690 - -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ 691 - local servers = { 692 - -- clangd = {}, 693 - -- gopls = {}, 694 - -- pyright = {}, 695 - -- rust_analyzer = {}, 696 - -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs 697 - -- 698 - -- Some languages (like typescript) have entire language plugins that can be useful: 699 - -- https://github.com/pmizio/typescript-tools.nvim 700 - -- 701 - -- But for many setups, the LSP (`ts_ls`) will work just fine 702 - -- ts_ls = {}, 703 - -- 704 - 705 - lua_ls = { 706 - -- cmd = { ... }, 707 - -- filetypes = { ... }, 708 - -- capabilities = {}, 709 - settings = { 710 - Lua = { 711 - completion = { 712 - callSnippet = 'Replace', 713 - }, 714 - -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings 715 - -- diagnostics = { disable = { 'missing-fields' } }, 716 - }, 717 - }, 718 - }, 719 - } 720 - 721 - -- Ensure the servers and tools above are installed 722 - -- 723 - -- To check the current status of installed tools and/or manually install 724 - -- other tools, you can run 725 - -- :Mason 726 - -- 727 - -- You can press `g?` for help in this menu. 728 - -- 729 - -- `mason` had to be setup earlier: to configure its options see the 730 - -- `dependencies` table for `nvim-lspconfig` above. 731 - -- 732 - -- You can add other tools here that you want Mason to install 733 - -- for you, so that they are available from within Neovim. 734 - local ensure_installed = vim.tbl_keys(servers or {}) 735 - vim.list_extend(ensure_installed, { 736 - 'stylua', -- Used to format Lua code 737 - }) 738 - require('mason-tool-installer').setup { ensure_installed = ensure_installed } 739 - 740 - require('mason-lspconfig').setup { 741 - ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer) 742 - automatic_installation = false, 743 - automatic_enable = true, 744 - handlers = { 745 - function(server_name) 746 - local server = servers[server_name] or {} 747 - -- This handles overriding only values explicitly passed 748 - -- by the server configuration above. Useful when disabling 749 - -- certain features of an LSP (for example, turning off formatting for ts_ls) 750 - server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) 751 - require('lspconfig')[server_name].setup(server) 752 - end, 753 - }, 754 - } 755 - end, 756 - }, 757 - 758 - { -- Autoformat 759 - 'stevearc/conform.nvim', 760 - event = { 'BufWritePre' }, 761 - cmd = { 'ConformInfo' }, 762 - keys = { 763 - { 764 - '<leader>f', 765 - function() 766 - require('conform').format { async = true, lsp_format = 'fallback' } 767 - end, 768 - mode = '', 769 - desc = '[F]ormat buffer', 770 - }, 771 - }, 772 - opts = { 773 - notify_on_error = false, 774 - format_on_save = function(bufnr) 775 - -- Disable "format_on_save lsp_fallback" for languages that don't 776 - -- have a well standardized coding style. You can add additional 777 - -- languages here or re-enable it for the disabled ones. 778 - local disable_filetypes = { c = true, cpp = true } 779 - if disable_filetypes[vim.bo[bufnr].filetype] then 780 - return nil 781 - else 782 - return { 783 - timeout_ms = 500, 784 - lsp_format = 'fallback', 785 - } 786 - end 787 - end, 788 - formatters_by_ft = { 789 - lua = { 'stylua' }, 790 - -- Conform can also run multiple formatters sequentially 791 - -- python = { "isort", "black" }, 792 - -- 793 - -- You can use 'stop_after_first' to run the first available formatter from the list 794 - -- javascript = { "prettierd", "prettier", stop_after_first = true }, 795 - }, 796 - }, 797 - }, 798 - 799 - { -- Autocompletion 800 - 'saghen/blink.cmp', 801 - event = 'VimEnter', 802 - version = '1.*', 803 - dependencies = { 804 - -- Snippet Engine 805 - { 806 - 'L3MON4D3/LuaSnip', 807 - version = '2.*', 808 - build = (function() 809 - -- Build Step is needed for regex support in snippets. 810 - -- This step is not supported in many windows environments. 811 - -- Remove the below condition to re-enable on windows. 812 - if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then 813 - return 814 - end 815 - return 'make install_jsregexp' 816 - end)(), 817 - dependencies = { 818 - -- `friendly-snippets` contains a variety of premade snippets. 819 - -- See the README about individual language/framework/plugin snippets: 820 - -- https://github.com/rafamadriz/friendly-snippets 821 - { 822 - 'rafamadriz/friendly-snippets', 823 - config = function() 824 - require('luasnip.loaders.from_vscode').lazy_load() 825 - end, 826 - }, 827 - }, 828 - opts = {}, 829 - }, 830 - 'folke/lazydev.nvim', 831 - }, 832 - --- @module 'blink.cmp' 833 - --- @type blink.cmp.Config 834 - opts = { 835 - keymap = { 836 - -- 'default' (recommended) for mappings similar to built-in completions 837 - -- <c-y> to accept ([y]es) the completion. 838 - -- This will auto-import if your LSP supports it. 839 - -- This will expand snippets if the LSP sent a snippet. 840 - -- 'super-tab' for tab to accept 841 - -- 'enter' for enter to accept 842 - -- 'none' for no mappings 843 - -- 844 - -- For an understanding of why the 'default' preset is recommended, 845 - -- you will need to read `:help ins-completion` 846 - -- 847 - -- No, but seriously. Please read `:help ins-completion`, it is really good! 848 - -- 849 - -- All presets have the following mappings: 850 - -- <tab>/<s-tab>: move to right/left of your snippet expansion 851 - -- <c-space>: Open menu or open docs if already open 852 - -- <c-n>/<c-p> or <up>/<down>: Select next/previous item 853 - -- <c-e>: Hide menu 854 - -- <c-k>: Toggle signature help 855 - -- 856 - -- See :h blink-cmp-config-keymap for defining your own keymap 857 - preset = 'default', 858 - 859 - -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: 860 - -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps 861 - }, 862 - 863 - appearance = { 864 - -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' 865 - -- Adjusts spacing to ensure icons are aligned 866 - nerd_font_variant = 'mono', 867 - }, 868 - 869 - completion = { 870 - -- By default, you may press `<c-space>` to show the documentation. 871 - -- Optionally, set `auto_show = true` to show the documentation after a delay. 872 - documentation = { auto_show = false, auto_show_delay_ms = 500 }, 873 - }, 874 - 875 - sources = { 876 - default = { 'lsp', 'path', 'snippets', 'lazydev' }, 877 - providers = { 878 - lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 }, 879 - }, 880 - }, 881 - 882 - snippets = { preset = 'luasnip' }, 883 - 884 - -- Blink.cmp includes an optional, recommended rust fuzzy matcher, 885 - -- which automatically downloads a prebuilt binary when enabled. 886 - -- 887 - -- By default, we use the Lua implementation instead, but you may enable 888 - -- the rust implementation via `'prefer_rust_with_warning'` 889 - -- 890 - -- See :h blink-cmp-config-fuzzy for more information 891 - fuzzy = { implementation = 'lua' }, 892 - 893 - -- Shows a signature help window while you type arguments for a function 894 - signature = { enabled = true }, 895 - }, 896 - }, 897 - 898 - { -- You can easily change to a different colorscheme. 899 - -- Change the name of the colorscheme plugin below, and then 900 - -- change the command in the config to whatever the name of that colorscheme is. 901 - -- 902 - -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. 903 - 'wojciechkepka/vim-github-dark', 904 - priority = 1000, -- Make sure to load this before all the other start plugins. 905 - config = function() 906 - ---@diagnostic disable-next-line: missing-fields 907 - --require('vim-github-dark').setup { 908 - -- styles = { 909 - -- comments = { italic = false }, -- Disable italics in comments 910 - -- }, 911 - --} 912 - 913 - -- Load the colorscheme here. 914 - -- Like many other themes, this one has different styles, and you could load 915 - -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. 916 - vim.cmd.colorscheme 'ghdark' 917 - end, 918 - }, 919 - 920 - -- Highlight todo, notes, etc in comments 921 - { 922 - 'folke/todo-comments.nvim', 923 - event = 'VimEnter', 924 - dependencies = { 'nvim-lua/plenary.nvim' }, 925 - opts = { signs = true }, 926 - }, 927 - 928 - { -- Collection of various small independent plugins/modules 929 - 'echasnovski/mini.nvim', 930 - config = function() 931 - -- Better Around/Inside textobjects 932 - -- 933 - -- Examples: 934 - -- - va) - [V]isually select [A]round [)]paren 935 - -- - yinq - [Y]ank [I]nside [N]ext [Q]uote 936 - -- - ci' - [C]hange [I]nside [']quote 937 - require('mini.ai').setup { n_lines = 500 } 938 - 939 - -- Add/delete/replace surroundings (brackets, quotes, etc.) 940 - -- 941 - -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren 942 - -- - sd' - [S]urround [D]elete [']quotes 943 - -- - sr)' - [S]urround [R]eplace [)] ['] 944 - require('mini.surround').setup() 945 - 946 - require('mini.tabline').setup { 947 - show_icons = vim.g.have_nerd_font, 948 - tabpage_section = 'right', 949 - } 950 - 951 - -- Simple and easy statusline. 952 - -- You could remove this setup call if you don't like it, 953 - -- and try some other statusline plugin 954 - local statusline = require 'mini.statusline' 955 - -- set use_icons to true if you have a Nerd Font 956 - statusline.setup { use_icons = vim.g.have_nerd_font } 957 - 958 - -- You can configure sections in the statusline by overriding their 959 - -- default behavior. For example, here we set the section for 960 - -- cursor location to LINE:COLUMN 961 - ---@diagnostic disable-next-line: duplicate-set-field 962 - statusline.section_location = function() 963 - return '%2l:%-2v' 964 - end 965 - 966 - -- ... and there is more! 967 - -- Check out: https://github.com/echasnovski/mini.nvim 968 - end, 969 - }, 970 - { -- Highlight, edit, and navigate code 971 - 'nvim-treesitter/nvim-treesitter', 972 - build = ':TSUpdate', 973 - main = 'nvim-treesitter.configs', -- Sets main module to use for opts 974 - -- [[ Configure Treesitter ]] See `:help nvim-treesitter` 975 - opts = { 976 - ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' }, 977 - -- Autoinstall languages that are not installed 978 - auto_install = true, 979 - highlight = { 980 - enable = true, 981 - -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. 982 - -- If you are experiencing weird indenting issues, add the language to 983 - -- the list of additional_vim_regex_highlighting and disabled languages for indent. 984 - additional_vim_regex_highlighting = { 'ruby' }, 985 - }, 986 - indent = { enable = true, disable = { 'ruby' } }, 987 - }, 988 - -- There are additional nvim-treesitter modules that you can use to interact 989 - -- with nvim-treesitter. You should go explore a few and see what interests you: 990 - -- 991 - -- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod` 992 - -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context 993 - -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects 994 - }, 995 - 996 - -- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the 997 - -- init.lua. If you want these files, they are in the repository, so you can just download them and 998 - -- place them in the correct locations. 999 - 1000 - -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart 1001 - -- 1002 - -- Here are some example plugins that I've included in the Kickstart repository. 1003 - -- Uncomment any of the lines below to enable them (you will need to restart nvim). 1004 - -- 1005 - require 'kickstart.plugins.debug', 1006 - require 'kickstart.plugins.indent_line', 1007 - require 'kickstart.plugins.lint', 1008 - require 'kickstart.plugins.autopairs', 1009 - require 'kickstart.plugins.neo-tree', 1010 - require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps 1011 - 1012 - -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` 1013 - -- This is the easiest way to modularize your config. 1014 - -- 1015 - -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. 1016 - { import = 'custom.plugins' }, 1017 - -- 1018 - -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` 1019 - -- Or use telescope! 1020 - -- In normal mode type `<space>sh` then write `lazy.nvim-plugin` 1021 - -- you can continue same window with `<space>sr` which resumes last telescope search 1022 - }, { 1023 - ui = { 1024 - -- If you are using a Nerd Font: set icons to an empty table which will use the 1025 - -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table 1026 - icons = vim.g.have_nerd_font and {} or { 1027 - cmd = '⌘', 1028 - config = '🛠', 1029 - event = '📅', 1030 - ft = '📂', 1031 - init = '⚙', 1032 - keys = '🗝', 1033 - plugin = '🔌', 1034 - runtime = '💻', 1035 - require = '🌙', 1036 - source = '📄', 1037 - start = '🚀', 1038 - task = '📌', 1039 - lazy = '💤 ', 1040 - }, 1041 - }, 1042 - }) 1043 - 1044 - -- The line beneath this is called `modeline`. See `:help modeline` 1045 - -- vim: ts=2 sts=2 sw=2 et
-17
nvim/lua/custom/plugins/auto-session.lua
··· 1 - return { 2 - 'rmagatti/auto-session', 3 - lazy = false, 4 - config = function() 5 - local is_windors = vim.fn.has 'win64' == 1 or vim.fn.has 'win32' == 1 6 - local seperator = is_windors and '\\' or '/' 7 - require('auto-session').setup { 8 - root_dir = vim.fn.stdpath 'data' .. seperator .. 'sessions', 9 - git_use_branch_name = true, 10 - git_auto_restore_on_branch_change = true, 11 - lazy_support = true, 12 - continue_restore_on_error = false, 13 - -- pre_save_cmds = { 'Neotree close' }, 14 - post_restore_cmds = { 'Neotree reveal' }, 15 - } 16 - end, 17 - }
-34
nvim/lua/custom/plugins/chipsoft/adopure.lua
··· 1 - return { 2 - 'Willem-J-an/adopure.nvim', 3 - dependencies = { 4 - 'nvim-lua/plenary.nvim', 5 - 'nvim-telescope/telescope.nvim', 6 - 'sindrets/diffview.nvim', -- Optionally required to open PR in diffview 7 - }, 8 - config = function() 9 - vim.g.adopure = { 10 - filter_my_pull_requests = true, -- Only load pull requests assigned to you 11 - } 12 - vim.keymap.set('n', '<leader>alc', '<Cmd>:AdoPure load context<Cr>', { desc = 'Load open pull requests; prompt user to pick one.' }) 13 - vim.keymap.set('n', '<leader>alt', '<Cmd>:AdoPure load threads<Cr>', { desc = 'Fetch comment threads from Azure DevOps.' }) 14 - vim.keymap.set('n', '<leader>aoq', '<Cmd>:AdoPure open quickfix<Cr>', { desc = 'Open comment threads in quickfix window.' }) 15 - vim.keymap.set('n', '<leader>aot', '<Cmd>:AdoPure open thread_picker<Cr>', { desc = 'Open a Telescope picker to select a comment thread to view.' }) 16 - vim.keymap.set('n', '<leader>aon', '<Cmd>:AdoPure open new_thread<Cr>', { desc = 'Create a new comment thread on the current selection.' }) 17 - vim.keymap.set('n', '<leader>aoe', '<Cmd>:AdoPure open existing_thread<Cr>', { desc = 'Open a window with an existing comment thread.' }) 18 - vim.keymap.set('n', '<leader>asc', '<Cmd>:AdoPure submit comment<Cr>', { desc = 'Submit a comment to the currently opened comment thread.' }) 19 - vim.keymap.set('n', '<leader>asv', '<Cmd>:AdoPure submit vote<Cr>', { desc = 'Approve or decline the pull request.' }) 20 - vim.keymap.set('n', '<leader>ast', '<Cmd>:AdoPure submit thread_status<Cr>', { desc = 'Submit a thread_status change; must be in existing_thread window' }) 21 - vim.keymap.set( 22 - 'n', 23 - '<leader>asd', 24 - '<Cmd>:AdoPure submit delete_comment<Cr>', 25 - { desc = 'Delete the comment under the cursor; must be in existing_thread window' } 26 - ) 27 - vim.keymap.set( 28 - 'n', 29 - '<leader>ase', 30 - '<Cmd>:AdoPure submit edit_comment<Cr>', 31 - { desc = 'Edit the comment under the cursor; must be in existing_thread window' } 32 - ) 33 - end, 34 - }
-8
nvim/lua/custom/plugins/copilot.lua
··· 1 - return { 2 - 'github/copilot.vim', 3 - -- event = 'InsertEnter', 4 - -- config = function() 5 - -- require('copilot').setup { 6 - -- } 7 - -- end, 8 - }
-6
nvim/lua/custom/plugins/csharp/boilersharp.lua
··· 1 - return { 2 - 'DestopLine/boilersharp.nvim', 3 - opts = { 4 - -- Your options go here 5 - }, 6 - }
-7
nvim/lua/custom/plugins/csharp/easy-dotnet.lua
··· 1 - return { 2 - 'GustavEikaas/easy-dotnet.nvim', 3 - dependencies = { 'nvim-lua/plenary.nvim', 'nvim-telescope/telescope.nvim' }, 4 - config = function() 5 - require('easy-dotnet').setup() 6 - end, 7 - }
-9
nvim/lua/custom/plugins/csharp/roslyn.lua
··· 1 - return { 2 - 'seblyng/roslyn.nvim', 3 - ft = 'cs', 4 - ---@module 'roslyn.config' 5 - ---@type RoslynNvimConfig 6 - opts = { 7 - -- your configuration comes here; leave empty for default settings 8 - }, 9 - }
-36
nvim/lua/custom/plugins/diffview.lua
··· 1 - return { 2 - 'sindrets/diffview.nvim', 3 - config = function() 4 - require('diffview').setup { 5 - keymaps = { 6 - { 7 - 'n', 8 - 'cc', 9 - '<Cmd>Git commit <bar> wincmd J<CR>', 10 - { desc = 'Commit staged changes' }, 11 - }, 12 - { 13 - 'n', 14 - 'ca', 15 - '<Cmd>Git commit --amend <bar> wincmd J<CR>', 16 - { desc = 'Amend the last commit' }, 17 - }, 18 - { 19 - 'n', 20 - 'c<space>', 21 - ':Git commit ', 22 - { desc = 'Populate command line with ":Git commit "' }, 23 - }, 24 - }, 25 - } 26 - vim.api.nvim_set_hl(0, 'DiffAdd', { bg = '#20303b' }) 27 - vim.api.nvim_set_hl(0, 'DiffDelete', { bg = '#37222c' }) 28 - vim.api.nvim_set_hl(0, 'DiffChange', { bg = '#1f2231' }) 29 - vim.api.nvim_set_hl(0, 'DiffText', { bg = '#394b70' }) 30 - vim.opt.fillchars:append 'diff:╱' 31 - 32 - vim.keymap.set('n', '<leader>difo', '<Cmd>:DiffviewOpen<Cr>', { desc = 'Open diffview' }) 33 - vim.keymap.set('n', '<leader>difc', '<Cmd>:DiffviewClose<Cr>', { desc = 'Close diffview' }) 34 - vim.keymap.set('n', '<leader>difh', '<Cmd>:DiffviewFileHistory<Cr>', { desc = 'File history' }) 35 - end, 36 - }
-66
nvim/lua/custom/plugins/harpoon.lua
··· 1 - return { 2 - 'ThePrimeagen/harpoon', 3 - dependencies = { 4 - 'nvim-lua/plenary.nvim', 5 - }, 6 - branch = 'harpoon2', 7 - config = function() 8 - local harpoon = require 'harpoon' 9 - 10 - -- REQUIRED 11 - harpoon:setup() 12 - -- REQUIRED 13 - 14 - local harpoon_extensions = require 'harpoon.extensions' 15 - harpoon:extend(harpoon_extensions.builtins.highlight_current_file()) 16 - 17 - -- basic telescope configuration 18 - local conf = require('telescope.config').values 19 - local function toggle_telescope(harpoon_files) 20 - local file_paths = {} 21 - for _, item in ipairs(harpoon_files.items) do 22 - table.insert(file_paths, item.value) 23 - end 24 - 25 - require('telescope.pickers') 26 - .new({}, { 27 - prompt_title = 'Harpoon', 28 - finder = require('telescope.finders').new_table { 29 - results = file_paths, 30 - }, 31 - previewer = conf.file_previewer {}, 32 - sorter = conf.generic_sorter {}, 33 - }) 34 - :find() 35 - end 36 - 37 - vim.keymap.set('n', '<leader>hpa', function() 38 - harpoon:list():add() 39 - end, { desc = 'Add file to harpoon' }) 40 - 41 - vim.keymap.set('n', '<leader>hpl', function() 42 - toggle_telescope(harpoon:list()) 43 - end, { desc = 'Open harpoon window' }) 44 - 45 - vim.keymap.set('n', '<leader>hpn', function() 46 - harpoon:list():select(1) 47 - end, { desc = 'Go to harpoon 1' }) 48 - vim.keymap.set('n', '<leader>hpe', function() 49 - harpoon:list():select(2) 50 - end, { desc = 'Go to harpoon 2' }) 51 - vim.keymap.set('n', '<leader>hpo', function() 52 - harpoon:list():select(3) 53 - end, { desc = 'Go to harpoon 3' }) 54 - vim.keymap.set('n', '<leader>hpi', function() 55 - harpoon:list():select(4) 56 - end, { desc = 'Go to harpoon 4' }) 57 - 58 - -- Toggle previous & next buffers stored within Harpoon list 59 - vim.keymap.set('n', '<leader>hpp', function() 60 - harpoon:list():prev() 61 - end, { desc = 'Go to previous harpoon file' }) 62 - vim.keymap.set('n', '<leader>hpf', function() 63 - harpoon:list():next() 64 - end, { desc = 'Go to next harpoon file' }) 65 - end, 66 - }
-11
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 { 6 - { import = 'custom.plugins.csharp' }, 7 - { 'wojciechkepka/vim-github-dark' }, 8 - { 'wellle/context.vim' }, 9 - { 'tpope/vim-fugitive' }, 10 - { import = 'custom.plugins.chipsoft' }, 11 - }
-17
nvim/lua/custom/plugins/kulala.lua
··· 1 - return { 2 - 'mistweaverco/kulala.nvim', 3 - keys = { 4 - { '<leader>drs', desc = 'Send request' }, 5 - { '<leader>dra', desc = 'Send all requests' }, 6 - { '<leader>drb', desc = 'Open scratchpad' }, 7 - }, 8 - ft = { 'http', 'rest' }, 9 - opts = { 10 - global_keymaps = true, 11 - global_keymaps_prefix = '<leader>dr', 12 - kulala_keymaps_prefix = '', 13 - additional_curl_options = { 14 - '--negotiate', 15 - }, 16 - }, 17 - }
-4
nvim/lua/custom/plugins/lsp-lens.lua
··· 1 - return { 2 - 'VidocqH/lsp-lens.nvim', 3 - event = 'LspAttach', 4 - }
-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 - opts = {}, 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 - 'mason-org/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>gs', function() 38 - gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } 39 - end, { desc = 'git [s]tage hunk' }) 40 - map('v', '<leader>gr', 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>gs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) 45 - map('n', '<leader>gr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' }) 46 - map('n', '<leader>gS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' }) 47 - map('n', '<leader>gu', gitsigns.stage_hunk, { desc = 'git [u]ndo stage hunk' }) 48 - map('n', '<leader>gR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' }) 49 - map('n', '<leader>gp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' }) 50 - map('n', '<leader>gb', gitsigns.blame_line, { desc = 'git [b]lame line' }) 51 - map('n', '<leader>gd', gitsigns.diffthis, { desc = 'git [d]iff against index' }) 52 - map('n', '<leader>gD', 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 - }
-11
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 - ---@module "ibl" 8 - ---@type ibl.config 9 - opts = {}, 10 - }, 11 - }
-60
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 - markdown = { 'markdownlint' }, 10 - } 11 - 12 - -- To allow other plugins to add linters to require('lint').linters_by_ft, 13 - -- instead set linters_by_ft like this: 14 - -- lint.linters_by_ft = lint.linters_by_ft or {} 15 - -- lint.linters_by_ft['markdown'] = { 'markdownlint' } 16 - -- 17 - -- However, note that this will enable a set of default linters, 18 - -- which will cause errors unless these tools are available: 19 - -- { 20 - -- clojure = { "clj-kondo" }, 21 - -- dockerfile = { "hadolint" }, 22 - -- inko = { "inko" }, 23 - -- janet = { "janet" }, 24 - -- json = { "jsonlint" }, 25 - -- markdown = { "vale" }, 26 - -- rst = { "vale" }, 27 - -- ruby = { "ruby" }, 28 - -- terraform = { "tflint" }, 29 - -- text = { "vale" } 30 - -- } 31 - -- 32 - -- You can disable the default linters by setting their filetypes to nil: 33 - -- lint.linters_by_ft['clojure'] = nil 34 - -- lint.linters_by_ft['dockerfile'] = nil 35 - -- lint.linters_by_ft['inko'] = nil 36 - -- lint.linters_by_ft['janet'] = nil 37 - -- lint.linters_by_ft['json'] = nil 38 - -- lint.linters_by_ft['markdown'] = nil 39 - -- lint.linters_by_ft['rst'] = nil 40 - -- lint.linters_by_ft['ruby'] = nil 41 - -- lint.linters_by_ft['terraform'] = nil 42 - -- lint.linters_by_ft['text'] = nil 43 - 44 - -- Create autocommand which carries out the actual linting 45 - -- on the specified events. 46 - local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true }) 47 - vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, { 48 - group = lint_augroup, 49 - callback = function() 50 - -- Only run the linter in buffers that you can modify in order to 51 - -- avoid superfluous noise, notably within the handy LSP pop-ups that 52 - -- describe the hovered symbol using Markdown. 53 - if vim.bo.modifiable then 54 - lint.try_lint() 55 - end 56 - end, 57 - }) 58 - end, 59 - }, 60 - }
-43
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 - lazy = false, 13 - keys = { 14 - { '<C-b>', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true }, 15 - }, 16 - opts = function() 17 - local default_opts = { 18 - auto_clean_after_session_restore = false, 19 - filesystem = { 20 - window = { 21 - mappings = { 22 - ['<C-b>'] = 'close_window', 23 - }, 24 - }, 25 - filtered_items = { 26 - visible = false, 27 - hide_dotfiles = true, 28 - hide_gitignored = true, 29 - }, 30 - }, 31 - } 32 - local project_config_path = vim.fn.getcwd() .. '\\.neotree.lua' 33 - if vim.fn.filereadable(project_config_path) == 1 then 34 - print('Loading NeoTree project configuration from ' .. project_config_path) 35 - local project_config = dofile(project_config_path) 36 - -- Merge project_config into default_opts (simple shallow merge) 37 - for k, v in pairs(project_config) do 38 - default_opts[k] = v 39 - end 40 - end 41 - return default_opts 42 - end, 43 - }
users/hannah/common.nix

This is a binary file and will not be displayed.

+10
users/hannah/desktop.nix
··· 1 + { pkgs, ... }: 2 + { 3 + home.packages = with pkgs; [ 4 + grim 5 + swappy 6 + swaylock 7 + wl-clipboard 8 + xwayland-satellite 9 + ]; 10 + }
+22
users/hannah/dev.nix
··· 1 + { pkgs, ... }: 2 + { 3 + home.packages = with pkgs; [ 4 + ( 5 + with dotnetCorePackages; 6 + combinePackages [ 7 + sdk_8_0 8 + sdk_9_0 9 + sdk_10_0 10 + ] 11 + ) 12 + cargo 13 + rustc 14 + nodejs_24 15 + gcc 16 + tree-sitter 17 + ripgrep 18 + unzip 19 + fd 20 + gh 21 + ]; 22 + }
+74
users/hannah/home.nix
··· 1 + { inputs, lib, pkgs, config, ... }: let 2 + username = "hannah"; 3 + in { 4 + imports = [ 5 + ./quickshell 6 + ./niri/default.nix 7 + ./dev.nix 8 + ./desktop.nix 9 + ]; 10 + 11 + programs.bash = { 12 + enable = true; 13 + bashrcExtra = '' 14 + ''; 15 + }; 16 + 17 + programs.niri = { 18 + enable = true; 19 + }; 20 + 21 + programs.git = { 22 + enable = true; 23 + settings = { 24 + user = { 25 + name = "Hannah Witvrouwen"; 26 + email = "hannah.witvrouwen@gmail.com"; 27 + }; 28 + }; 29 + }; 30 + 31 + programs.swaylock = { 32 + enable = true; 33 + settings = { 34 + color = "000000"; 35 + }; 36 + }; 37 + 38 + programs = { 39 + discord.enable = true; 40 + vscode.enable = true; 41 + swappy.enable = true; 42 + }; 43 + 44 + programs.neovim = { 45 + enable = true; 46 + package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default; 47 + }; 48 + 49 + home = { 50 + sessionPath = [ 51 + "$HOME/.local/bin" 52 + ]; 53 + 54 + packages = with pkgs; [ 55 + vivaldi 56 + steam 57 + bash 58 + git 59 + fastfetch 60 + discord 61 + vscode 62 + obsidian 63 + spotify 64 + playerctl 65 + ]; 66 + 67 + inherit username; 68 + homeDirectory = "/home/${username}"; 69 + 70 + # You do not need to change this if you're reading this in the future. 71 + # Don't ever change this after the first build. Don't ask questions. 72 + stateVersion = "25.11"; 73 + }; 74 + }
+24
users/hannah/quickshell/default.nix
··· 1 + { config, lib, pkgs, ... }: 2 + let 3 + homeDir = config.home.homeDirectory; 4 + quickshellDir = "${homeDir}/home-os/users/hannah/quickshell/qml"; 5 + quickshellTarget = "${homeDir}/.config/quickshell"; 6 + faceIconSource = "${homeDir}/home-os/users/hannah/assets/profile.png"; 7 + faceIconTarget = "${homeDir}/.face.icon"; 8 + in { 9 + home.packages = with pkgs; [ 10 + quickshell 11 + qt6Packages.qt5compat 12 + libsForQt5.qt5.qtgraphicaleffects 13 + kdePackages.qtbase 14 + kdePackages.qtdeclarative 15 + kdePackages.qtstyleplugin-kvantum 16 + wallust 17 + bc 18 + ]; 19 + 20 + home.activation.symlinkQuickshellAndFaceIcon = lib.hm.dag.entryAfter ["writeBoundary"] '' 21 + ln -sfn "${quickshellDir}" "${quickshellTarget}" 22 + ln -sfn "${faceIconSource}" "${faceIconTarget}" 23 + ''; 24 + }
+95
users/hannah/quickshell/qml/Services/Sysinfo.qml
··· 1 + pragma Singleton 2 + import QtQuick 3 + import Qt.labs.folderlistmodel 4 + import Quickshell 5 + import Quickshell.Io 6 + import qs.Settings 7 + 8 + Singleton { 9 + id: manager 10 + 11 + property string updateInterval: "2s" 12 + property string cpuUsageStr: "" 13 + property string cpuTempStr: "" 14 + property string memoryUsageStr: "" 15 + property string memoryUsagePerStr: "" 16 + property string batteryStatusStr: "" 17 + property string batteryStatusIcon: "" 18 + property real cpuUsage: 0 19 + property real memoryUsage: 0 20 + property real cpuTemp: 0 21 + property real diskUsage: 0 22 + property real memoryUsagePer: 0 23 + property string diskUsageStr: "" 24 + 25 + Process { 26 + id: zigstatProcess 27 + running: true 28 + command: [Quickshell.shellRoot + "/Programs/zigstat", updateInterval] 29 + stdout: SplitParser { 30 + onRead: function (line) { 31 + try { 32 + const data = JSON.parse(line); 33 + cpuUsage = +data.cpu; 34 + cpuTemp = +data.cputemp; 35 + memoryUsage = +data.mem; 36 + memoryUsagePer = +data.memper; 37 + diskUsage = +data.diskper; 38 + cpuUsageStr = data.cpu + "%"; 39 + cpuTempStr = data.cputemp + "°C"; 40 + memoryUsageStr = data.mem + "G"; 41 + memoryUsagePerStr = data.memper + "%"; 42 + diskUsageStr = data.diskper + "%"; 43 + } catch (e) { 44 + console.error("Failed to parse zigstat output:", e); 45 + } 46 + } 47 + } 48 + } 49 + 50 + Process { 51 + id: batteryProcess 52 + running: true 53 + command: ["upower", "-i", "/org/freedesktop/UPower/devices/battery_BAT0"] 54 + stdout: SplitParser { 55 + onRead: function (line) { 56 + try { 57 + const usageMatch = line.match(/percentage:\s+(\d+)%/); 58 + if (usageMatch) { 59 + batteryStatusStr = usageMatch[1] + "%"; 60 + } 61 + const stateMatch = line.match(/state:\s+(\w+)/); 62 + if (stateMatch) { 63 + const state = stateMatch[1]; 64 + if (state === "fully-charged") { 65 + batteryStatusIcon = "battery_charging_full"; 66 + } else if (state === "discharging") { 67 + if (usageMatch) { 68 + const usage = parseInt(usageMatch[1]); 69 + if (usage >= 80) { 70 + batteryStatusIcon = "battery_full"; 71 + } else if (usage >= 60) { 72 + batteryStatusIcon = "battery_5_bar"; 73 + } else if (usage >= 40) { 74 + batteryStatusIcon = "battery_4_bar"; 75 + } else if (usage >= 20) { 76 + batteryStatusIcon = "battery_3_bar"; 77 + } else if (usage >= 10) { 78 + batteryStatusIcon = "battery_2_bar"; 79 + } else if (usage >= 5) { 80 + batteryStatusIcon = "battery_1_bar"; 81 + } else { 82 + batteryStatusIcon = "battery_alert"; 83 + } 84 + } else { 85 + batteryStatusIcon = "battery_alert"; 86 + } 87 + } 88 + } 89 + } catch (e) { 90 + console.error("Failed to parse battery output:", e); 91 + } 92 + } 93 + } 94 + } 95 + }