├── .github ├── README.md ├── dependabot.yml └── workflows │ └── docs.yml ├── .gitignore ├── LICENSE ├── default.nix ├── docs ├── .vitepress │ └── config.mts ├── index.md ├── mnw.data.js ├── options.md ├── package-lock.json ├── package.json ├── package.nix └── usage.md ├── examples ├── lazy │ ├── flake.nix │ ├── init.lua │ └── lua │ │ └── plugins │ │ └── telescope.lua ├── lz.n │ ├── flake.nix │ └── lua │ │ ├── lazy │ │ └── telescope.lua │ │ └── myconfig │ │ └── init.lua ├── nixos │ ├── configuration.nix │ ├── flake.nix │ └── nvim │ │ └── lua │ │ └── myconfig │ │ ├── init.lua │ │ └── oil.lua └── standalone │ ├── flake.nix │ └── nvim │ └── lua │ └── myconfig │ ├── init.lua │ └── oil.lua ├── flake.nix ├── modules ├── common.nix ├── darwin.nix ├── homeManager.nix ├── nixos.nix └── options.nix ├── npins ├── default.nix └── sources.json ├── npinsToPlugins.nix ├── outputs.nix ├── ruby_provider ├── Gemfile ├── Gemfile.lock ├── gemset.nix └── update.nix └── wrapper.nix /.github/README.md: -------------------------------------------------------------------------------- 1 | # Minimal Neovim Wrapper 2 | See the generated docs: 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "04:00" 8 | open-pull-requests-limit: 10 9 | reviewers: 10 | - Gerg-L 11 | assignees: 12 | - Gerg-L 13 | 14 | -------------------------------------------------------------------------------- /.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: "deploy-docs" 2 | 3 | # Run daily 4 | on: 5 | workflow_dispatch: 6 | schedule: 7 | - cron: '0 6 * * *' 8 | 9 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 10 | permissions: 11 | contents: write 12 | pages: write 13 | id-token: write 14 | 15 | # Allow one concurrent deployment 16 | concurrency: 17 | group: "pages" 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | check_date: 22 | runs-on: ubuntu-latest 23 | name: Check latest commit 24 | outputs: 25 | should_run: ${{ steps.should_run.outputs.should_run }} 26 | steps: 27 | - uses: actions/checkout@v4.1.7 28 | - name: print latest_commit 29 | run: echo ${{ github.sha }} 30 | 31 | - id: should_run 32 | continue-on-error: true 33 | name: check latest commit is less than a day 34 | if: ${{ github.event_name == 'schedule' }} 35 | run: test -z $(git rev-list --after="24 hours" ${{ github.sha }}) && echo "::set-output name=should_run::false" 36 | 37 | publish: 38 | needs: check_date 39 | if: ${{ needs.check_date.outputs.should_run != 'false' }} 40 | runs-on: ubuntu-latest 41 | steps: 42 | - uses: actions/checkout@v4.1.7 43 | - uses: cachix/install-nix-action@v31 44 | - run: | 45 | nix build .#docs 46 | cp -r result public 47 | - uses: peaceiris/actions-gh-pages@v4 48 | with: 49 | github_token: ${{ secrets.GITHUB_TOKEN }} 50 | publish_dir: ./public 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *result 2 | *.direnv 3 | node_modules 4 | cache 5 | dist 6 | flake.lock 7 | lazy-lock.json 8 | 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Gerg-L 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | let 2 | self = import ./outputs.nix self; 3 | in 4 | self 5 | -------------------------------------------------------------------------------- /docs/.vitepress/config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitepress' 2 | 3 | // https://vitepress.dev/reference/site-config 4 | export default defineConfig({ 5 | title: "Minimal Neovim Wrapper", 6 | description: "", 7 | // base: "/mnw/", // Manually pass with --base 8 | themeConfig: { 9 | // https://vitepress.dev/reference/default-theme-config 10 | search: { 11 | provider: 'local' 12 | }, 13 | sidebar: [ 14 | { 15 | items: [ 16 | { text: 'Home', link: '/index' }, 17 | { text: 'Usage', link: '/usage' }, 18 | { text: 'Options', link: '/options' }, 19 | ], 20 | }, 21 | ], 22 | 23 | socialLinks: [ 24 | { icon: 'github', link: 'https://github.com/Gerg-L/mnw' } 25 | ], 26 | 27 | outline: { 28 | level: "deep", 29 | }, 30 | }, 31 | vite: { 32 | ssr: { 33 | noExternal: 'easy-nix-documentation', 34 | } 35 | } 36 | }) 37 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | 4 | hero: 5 | name: "Minimal Neovim Wrapper" 6 | actions: 7 | - theme: brand 8 | text: Usage 9 | link: /usage 10 | - theme: brand 11 | text: Options 12 | link: /options 13 | - theme: alt 14 | text: GitHub 15 | link: https://github.com/Gerg-L/mnw 16 | --- 17 | 18 | ## About 19 | Based off the nixpkgs wrapper but: 20 | 21 | - in one place 22 | - more error checking 23 | - a sane interface 24 | - `evalModules` "type" checking 25 | - more convenience options 26 | - doesn't take two functions to wrap 27 | - `devMode` hot reloading quicker config iteration 28 | There are no flake inputs. 29 | -------------------------------------------------------------------------------- /docs/mnw.data.js: -------------------------------------------------------------------------------- 1 | import { loadOptions, stripNixStore } from "easy-nix-documentation/loader" 2 | export default { 3 | async load() { 4 | const optionsJSON = process.env.MNW_OPTIONS_JSON 5 | if (optionsJSON === undefined) { 6 | console.log("MNW_OPTIONS_JSON is undefined"); 7 | exit(1) 8 | } 9 | return await loadOptions(optionsJSON, { 10 | include: [/^(?!.*_module)/], 11 | mapDeclarations: declaration => { 12 | const relDecl = stripNixStore(declaration); 13 | return `<mnw/${relDecl}>` 14 | }, 15 | }) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /docs/options.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Options 3 | --- 4 | 5 | # {{ $frontmatter.title }} 6 | 7 | 11 | 12 | 13 | 14 | ## Plugins Configuration 15 | 16 | 17 | 18 | ## Provider Configuration 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "docs", 8 | "devDependencies": { 9 | "easy-nix-documentation": "^1.1.0", 10 | "vitepress": "^1.6.3" 11 | } 12 | }, 13 | "node_modules/@algolia/autocomplete-core": { 14 | "version": "1.17.7", 15 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", 16 | "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", 17 | "dev": true, 18 | "license": "MIT", 19 | "dependencies": { 20 | "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", 21 | "@algolia/autocomplete-shared": "1.17.7" 22 | } 23 | }, 24 | "node_modules/@algolia/autocomplete-plugin-algolia-insights": { 25 | "version": "1.17.7", 26 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", 27 | "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", 28 | "dev": true, 29 | "license": "MIT", 30 | "dependencies": { 31 | "@algolia/autocomplete-shared": "1.17.7" 32 | }, 33 | "peerDependencies": { 34 | "search-insights": ">= 1 < 3" 35 | } 36 | }, 37 | "node_modules/@algolia/autocomplete-preset-algolia": { 38 | "version": "1.17.7", 39 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", 40 | "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", 41 | "dev": true, 42 | "license": "MIT", 43 | "dependencies": { 44 | "@algolia/autocomplete-shared": "1.17.7" 45 | }, 46 | "peerDependencies": { 47 | "@algolia/client-search": ">= 4.9.1 < 6", 48 | "algoliasearch": ">= 4.9.1 < 6" 49 | } 50 | }, 51 | "node_modules/@algolia/autocomplete-shared": { 52 | "version": "1.17.7", 53 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", 54 | "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", 55 | "dev": true, 56 | "license": "MIT", 57 | "peerDependencies": { 58 | "@algolia/client-search": ">= 4.9.1 < 6", 59 | "algoliasearch": ">= 4.9.1 < 6" 60 | } 61 | }, 62 | "node_modules/@algolia/client-abtesting": { 63 | "version": "5.25.0", 64 | "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz", 65 | "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==", 66 | "dev": true, 67 | "license": "MIT", 68 | "dependencies": { 69 | "@algolia/client-common": "5.25.0", 70 | "@algolia/requester-browser-xhr": "5.25.0", 71 | "@algolia/requester-fetch": "5.25.0", 72 | "@algolia/requester-node-http": "5.25.0" 73 | }, 74 | "engines": { 75 | "node": ">= 14.0.0" 76 | } 77 | }, 78 | "node_modules/@algolia/client-analytics": { 79 | "version": "5.25.0", 80 | "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz", 81 | "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==", 82 | "dev": true, 83 | "license": "MIT", 84 | "dependencies": { 85 | "@algolia/client-common": "5.25.0", 86 | "@algolia/requester-browser-xhr": "5.25.0", 87 | "@algolia/requester-fetch": "5.25.0", 88 | "@algolia/requester-node-http": "5.25.0" 89 | }, 90 | "engines": { 91 | "node": ">= 14.0.0" 92 | } 93 | }, 94 | "node_modules/@algolia/client-common": { 95 | "version": "5.25.0", 96 | "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz", 97 | "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==", 98 | "dev": true, 99 | "license": "MIT", 100 | "engines": { 101 | "node": ">= 14.0.0" 102 | } 103 | }, 104 | "node_modules/@algolia/client-insights": { 105 | "version": "5.25.0", 106 | "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz", 107 | "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==", 108 | "dev": true, 109 | "license": "MIT", 110 | "dependencies": { 111 | "@algolia/client-common": "5.25.0", 112 | "@algolia/requester-browser-xhr": "5.25.0", 113 | "@algolia/requester-fetch": "5.25.0", 114 | "@algolia/requester-node-http": "5.25.0" 115 | }, 116 | "engines": { 117 | "node": ">= 14.0.0" 118 | } 119 | }, 120 | "node_modules/@algolia/client-personalization": { 121 | "version": "5.25.0", 122 | "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz", 123 | "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==", 124 | "dev": true, 125 | "license": "MIT", 126 | "dependencies": { 127 | "@algolia/client-common": "5.25.0", 128 | "@algolia/requester-browser-xhr": "5.25.0", 129 | "@algolia/requester-fetch": "5.25.0", 130 | "@algolia/requester-node-http": "5.25.0" 131 | }, 132 | "engines": { 133 | "node": ">= 14.0.0" 134 | } 135 | }, 136 | "node_modules/@algolia/client-query-suggestions": { 137 | "version": "5.25.0", 138 | "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz", 139 | "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==", 140 | "dev": true, 141 | "license": "MIT", 142 | "dependencies": { 143 | "@algolia/client-common": "5.25.0", 144 | "@algolia/requester-browser-xhr": "5.25.0", 145 | "@algolia/requester-fetch": "5.25.0", 146 | "@algolia/requester-node-http": "5.25.0" 147 | }, 148 | "engines": { 149 | "node": ">= 14.0.0" 150 | } 151 | }, 152 | "node_modules/@algolia/client-search": { 153 | "version": "5.25.0", 154 | "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz", 155 | "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==", 156 | "dev": true, 157 | "license": "MIT", 158 | "dependencies": { 159 | "@algolia/client-common": "5.25.0", 160 | "@algolia/requester-browser-xhr": "5.25.0", 161 | "@algolia/requester-fetch": "5.25.0", 162 | "@algolia/requester-node-http": "5.25.0" 163 | }, 164 | "engines": { 165 | "node": ">= 14.0.0" 166 | } 167 | }, 168 | "node_modules/@algolia/ingestion": { 169 | "version": "1.25.0", 170 | "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz", 171 | "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==", 172 | "dev": true, 173 | "license": "MIT", 174 | "dependencies": { 175 | "@algolia/client-common": "5.25.0", 176 | "@algolia/requester-browser-xhr": "5.25.0", 177 | "@algolia/requester-fetch": "5.25.0", 178 | "@algolia/requester-node-http": "5.25.0" 179 | }, 180 | "engines": { 181 | "node": ">= 14.0.0" 182 | } 183 | }, 184 | "node_modules/@algolia/monitoring": { 185 | "version": "1.25.0", 186 | "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz", 187 | "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==", 188 | "dev": true, 189 | "license": "MIT", 190 | "dependencies": { 191 | "@algolia/client-common": "5.25.0", 192 | "@algolia/requester-browser-xhr": "5.25.0", 193 | "@algolia/requester-fetch": "5.25.0", 194 | "@algolia/requester-node-http": "5.25.0" 195 | }, 196 | "engines": { 197 | "node": ">= 14.0.0" 198 | } 199 | }, 200 | "node_modules/@algolia/recommend": { 201 | "version": "5.25.0", 202 | "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz", 203 | "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==", 204 | "dev": true, 205 | "license": "MIT", 206 | "dependencies": { 207 | "@algolia/client-common": "5.25.0", 208 | "@algolia/requester-browser-xhr": "5.25.0", 209 | "@algolia/requester-fetch": "5.25.0", 210 | "@algolia/requester-node-http": "5.25.0" 211 | }, 212 | "engines": { 213 | "node": ">= 14.0.0" 214 | } 215 | }, 216 | "node_modules/@algolia/requester-browser-xhr": { 217 | "version": "5.25.0", 218 | "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz", 219 | "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==", 220 | "dev": true, 221 | "license": "MIT", 222 | "dependencies": { 223 | "@algolia/client-common": "5.25.0" 224 | }, 225 | "engines": { 226 | "node": ">= 14.0.0" 227 | } 228 | }, 229 | "node_modules/@algolia/requester-fetch": { 230 | "version": "5.25.0", 231 | "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz", 232 | "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==", 233 | "dev": true, 234 | "license": "MIT", 235 | "dependencies": { 236 | "@algolia/client-common": "5.25.0" 237 | }, 238 | "engines": { 239 | "node": ">= 14.0.0" 240 | } 241 | }, 242 | "node_modules/@algolia/requester-node-http": { 243 | "version": "5.25.0", 244 | "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz", 245 | "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==", 246 | "dev": true, 247 | "license": "MIT", 248 | "dependencies": { 249 | "@algolia/client-common": "5.25.0" 250 | }, 251 | "engines": { 252 | "node": ">= 14.0.0" 253 | } 254 | }, 255 | "node_modules/@babel/helper-string-parser": { 256 | "version": "7.27.1", 257 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 258 | "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 259 | "dev": true, 260 | "license": "MIT", 261 | "engines": { 262 | "node": ">=6.9.0" 263 | } 264 | }, 265 | "node_modules/@babel/helper-validator-identifier": { 266 | "version": "7.27.1", 267 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", 268 | "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", 269 | "dev": true, 270 | "license": "MIT", 271 | "engines": { 272 | "node": ">=6.9.0" 273 | } 274 | }, 275 | "node_modules/@babel/parser": { 276 | "version": "7.27.2", 277 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", 278 | "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", 279 | "dev": true, 280 | "license": "MIT", 281 | "dependencies": { 282 | "@babel/types": "^7.27.1" 283 | }, 284 | "bin": { 285 | "parser": "bin/babel-parser.js" 286 | }, 287 | "engines": { 288 | "node": ">=6.0.0" 289 | } 290 | }, 291 | "node_modules/@babel/types": { 292 | "version": "7.27.1", 293 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", 294 | "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", 295 | "dev": true, 296 | "license": "MIT", 297 | "dependencies": { 298 | "@babel/helper-string-parser": "^7.27.1", 299 | "@babel/helper-validator-identifier": "^7.27.1" 300 | }, 301 | "engines": { 302 | "node": ">=6.9.0" 303 | } 304 | }, 305 | "node_modules/@docsearch/css": { 306 | "version": "3.8.2", 307 | "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", 308 | "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", 309 | "dev": true, 310 | "license": "MIT" 311 | }, 312 | "node_modules/@docsearch/js": { 313 | "version": "3.8.2", 314 | "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", 315 | "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", 316 | "dev": true, 317 | "license": "MIT", 318 | "dependencies": { 319 | "@docsearch/react": "3.8.2", 320 | "preact": "^10.0.0" 321 | } 322 | }, 323 | "node_modules/@docsearch/react": { 324 | "version": "3.8.2", 325 | "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", 326 | "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", 327 | "dev": true, 328 | "license": "MIT", 329 | "dependencies": { 330 | "@algolia/autocomplete-core": "1.17.7", 331 | "@algolia/autocomplete-preset-algolia": "1.17.7", 332 | "@docsearch/css": "3.8.2", 333 | "algoliasearch": "^5.14.2" 334 | }, 335 | "peerDependencies": { 336 | "@types/react": ">= 16.8.0 < 19.0.0", 337 | "react": ">= 16.8.0 < 19.0.0", 338 | "react-dom": ">= 16.8.0 < 19.0.0", 339 | "search-insights": ">= 1 < 3" 340 | }, 341 | "peerDependenciesMeta": { 342 | "@types/react": { 343 | "optional": true 344 | }, 345 | "react": { 346 | "optional": true 347 | }, 348 | "react-dom": { 349 | "optional": true 350 | }, 351 | "search-insights": { 352 | "optional": true 353 | } 354 | } 355 | }, 356 | "node_modules/@esbuild/aix-ppc64": { 357 | "version": "0.21.5", 358 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 359 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 360 | "cpu": [ 361 | "ppc64" 362 | ], 363 | "dev": true, 364 | "license": "MIT", 365 | "optional": true, 366 | "os": [ 367 | "aix" 368 | ], 369 | "engines": { 370 | "node": ">=12" 371 | } 372 | }, 373 | "node_modules/@esbuild/android-arm": { 374 | "version": "0.21.5", 375 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 376 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 377 | "cpu": [ 378 | "arm" 379 | ], 380 | "dev": true, 381 | "license": "MIT", 382 | "optional": true, 383 | "os": [ 384 | "android" 385 | ], 386 | "engines": { 387 | "node": ">=12" 388 | } 389 | }, 390 | "node_modules/@esbuild/android-arm64": { 391 | "version": "0.21.5", 392 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 393 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 394 | "cpu": [ 395 | "arm64" 396 | ], 397 | "dev": true, 398 | "license": "MIT", 399 | "optional": true, 400 | "os": [ 401 | "android" 402 | ], 403 | "engines": { 404 | "node": ">=12" 405 | } 406 | }, 407 | "node_modules/@esbuild/android-x64": { 408 | "version": "0.21.5", 409 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 410 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 411 | "cpu": [ 412 | "x64" 413 | ], 414 | "dev": true, 415 | "license": "MIT", 416 | "optional": true, 417 | "os": [ 418 | "android" 419 | ], 420 | "engines": { 421 | "node": ">=12" 422 | } 423 | }, 424 | "node_modules/@esbuild/darwin-arm64": { 425 | "version": "0.21.5", 426 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 427 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 428 | "cpu": [ 429 | "arm64" 430 | ], 431 | "dev": true, 432 | "license": "MIT", 433 | "optional": true, 434 | "os": [ 435 | "darwin" 436 | ], 437 | "engines": { 438 | "node": ">=12" 439 | } 440 | }, 441 | "node_modules/@esbuild/darwin-x64": { 442 | "version": "0.21.5", 443 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 444 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 445 | "cpu": [ 446 | "x64" 447 | ], 448 | "dev": true, 449 | "license": "MIT", 450 | "optional": true, 451 | "os": [ 452 | "darwin" 453 | ], 454 | "engines": { 455 | "node": ">=12" 456 | } 457 | }, 458 | "node_modules/@esbuild/freebsd-arm64": { 459 | "version": "0.21.5", 460 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 461 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 462 | "cpu": [ 463 | "arm64" 464 | ], 465 | "dev": true, 466 | "license": "MIT", 467 | "optional": true, 468 | "os": [ 469 | "freebsd" 470 | ], 471 | "engines": { 472 | "node": ">=12" 473 | } 474 | }, 475 | "node_modules/@esbuild/freebsd-x64": { 476 | "version": "0.21.5", 477 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 478 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 479 | "cpu": [ 480 | "x64" 481 | ], 482 | "dev": true, 483 | "license": "MIT", 484 | "optional": true, 485 | "os": [ 486 | "freebsd" 487 | ], 488 | "engines": { 489 | "node": ">=12" 490 | } 491 | }, 492 | "node_modules/@esbuild/linux-arm": { 493 | "version": "0.21.5", 494 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 495 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 496 | "cpu": [ 497 | "arm" 498 | ], 499 | "dev": true, 500 | "license": "MIT", 501 | "optional": true, 502 | "os": [ 503 | "linux" 504 | ], 505 | "engines": { 506 | "node": ">=12" 507 | } 508 | }, 509 | "node_modules/@esbuild/linux-arm64": { 510 | "version": "0.21.5", 511 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 512 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 513 | "cpu": [ 514 | "arm64" 515 | ], 516 | "dev": true, 517 | "license": "MIT", 518 | "optional": true, 519 | "os": [ 520 | "linux" 521 | ], 522 | "engines": { 523 | "node": ">=12" 524 | } 525 | }, 526 | "node_modules/@esbuild/linux-ia32": { 527 | "version": "0.21.5", 528 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 529 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 530 | "cpu": [ 531 | "ia32" 532 | ], 533 | "dev": true, 534 | "license": "MIT", 535 | "optional": true, 536 | "os": [ 537 | "linux" 538 | ], 539 | "engines": { 540 | "node": ">=12" 541 | } 542 | }, 543 | "node_modules/@esbuild/linux-loong64": { 544 | "version": "0.21.5", 545 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 546 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 547 | "cpu": [ 548 | "loong64" 549 | ], 550 | "dev": true, 551 | "license": "MIT", 552 | "optional": true, 553 | "os": [ 554 | "linux" 555 | ], 556 | "engines": { 557 | "node": ">=12" 558 | } 559 | }, 560 | "node_modules/@esbuild/linux-mips64el": { 561 | "version": "0.21.5", 562 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 563 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 564 | "cpu": [ 565 | "mips64el" 566 | ], 567 | "dev": true, 568 | "license": "MIT", 569 | "optional": true, 570 | "os": [ 571 | "linux" 572 | ], 573 | "engines": { 574 | "node": ">=12" 575 | } 576 | }, 577 | "node_modules/@esbuild/linux-ppc64": { 578 | "version": "0.21.5", 579 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 580 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 581 | "cpu": [ 582 | "ppc64" 583 | ], 584 | "dev": true, 585 | "license": "MIT", 586 | "optional": true, 587 | "os": [ 588 | "linux" 589 | ], 590 | "engines": { 591 | "node": ">=12" 592 | } 593 | }, 594 | "node_modules/@esbuild/linux-riscv64": { 595 | "version": "0.21.5", 596 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 597 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 598 | "cpu": [ 599 | "riscv64" 600 | ], 601 | "dev": true, 602 | "license": "MIT", 603 | "optional": true, 604 | "os": [ 605 | "linux" 606 | ], 607 | "engines": { 608 | "node": ">=12" 609 | } 610 | }, 611 | "node_modules/@esbuild/linux-s390x": { 612 | "version": "0.21.5", 613 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 614 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 615 | "cpu": [ 616 | "s390x" 617 | ], 618 | "dev": true, 619 | "license": "MIT", 620 | "optional": true, 621 | "os": [ 622 | "linux" 623 | ], 624 | "engines": { 625 | "node": ">=12" 626 | } 627 | }, 628 | "node_modules/@esbuild/linux-x64": { 629 | "version": "0.21.5", 630 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 631 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 632 | "cpu": [ 633 | "x64" 634 | ], 635 | "dev": true, 636 | "license": "MIT", 637 | "optional": true, 638 | "os": [ 639 | "linux" 640 | ], 641 | "engines": { 642 | "node": ">=12" 643 | } 644 | }, 645 | "node_modules/@esbuild/netbsd-x64": { 646 | "version": "0.21.5", 647 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 648 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 649 | "cpu": [ 650 | "x64" 651 | ], 652 | "dev": true, 653 | "license": "MIT", 654 | "optional": true, 655 | "os": [ 656 | "netbsd" 657 | ], 658 | "engines": { 659 | "node": ">=12" 660 | } 661 | }, 662 | "node_modules/@esbuild/openbsd-x64": { 663 | "version": "0.21.5", 664 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 665 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 666 | "cpu": [ 667 | "x64" 668 | ], 669 | "dev": true, 670 | "license": "MIT", 671 | "optional": true, 672 | "os": [ 673 | "openbsd" 674 | ], 675 | "engines": { 676 | "node": ">=12" 677 | } 678 | }, 679 | "node_modules/@esbuild/sunos-x64": { 680 | "version": "0.21.5", 681 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 682 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 683 | "cpu": [ 684 | "x64" 685 | ], 686 | "dev": true, 687 | "license": "MIT", 688 | "optional": true, 689 | "os": [ 690 | "sunos" 691 | ], 692 | "engines": { 693 | "node": ">=12" 694 | } 695 | }, 696 | "node_modules/@esbuild/win32-arm64": { 697 | "version": "0.21.5", 698 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 699 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 700 | "cpu": [ 701 | "arm64" 702 | ], 703 | "dev": true, 704 | "license": "MIT", 705 | "optional": true, 706 | "os": [ 707 | "win32" 708 | ], 709 | "engines": { 710 | "node": ">=12" 711 | } 712 | }, 713 | "node_modules/@esbuild/win32-ia32": { 714 | "version": "0.21.5", 715 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 716 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 717 | "cpu": [ 718 | "ia32" 719 | ], 720 | "dev": true, 721 | "license": "MIT", 722 | "optional": true, 723 | "os": [ 724 | "win32" 725 | ], 726 | "engines": { 727 | "node": ">=12" 728 | } 729 | }, 730 | "node_modules/@esbuild/win32-x64": { 731 | "version": "0.21.5", 732 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 733 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 734 | "cpu": [ 735 | "x64" 736 | ], 737 | "dev": true, 738 | "license": "MIT", 739 | "optional": true, 740 | "os": [ 741 | "win32" 742 | ], 743 | "engines": { 744 | "node": ">=12" 745 | } 746 | }, 747 | "node_modules/@iconify-json/simple-icons": { 748 | "version": "1.2.35", 749 | "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.35.tgz", 750 | "integrity": "sha512-PAHZZn6P5ToHMhmEeeh/O96E/Ep4PctN44N64dWYbDasEvbVoN6x62m+Doz8au0SVS4/zYEMAsDO6TdO9ep84Q==", 751 | "dev": true, 752 | "license": "CC0-1.0", 753 | "dependencies": { 754 | "@iconify/types": "*" 755 | } 756 | }, 757 | "node_modules/@iconify/types": { 758 | "version": "2.0.0", 759 | "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", 760 | "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", 761 | "dev": true, 762 | "license": "MIT" 763 | }, 764 | "node_modules/@jridgewell/sourcemap-codec": { 765 | "version": "1.5.0", 766 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 767 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 768 | "dev": true, 769 | "license": "MIT" 770 | }, 771 | "node_modules/@rollup/rollup-android-arm-eabi": { 772 | "version": "4.41.1", 773 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", 774 | "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", 775 | "cpu": [ 776 | "arm" 777 | ], 778 | "dev": true, 779 | "license": "MIT", 780 | "optional": true, 781 | "os": [ 782 | "android" 783 | ] 784 | }, 785 | "node_modules/@rollup/rollup-android-arm64": { 786 | "version": "4.41.1", 787 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", 788 | "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", 789 | "cpu": [ 790 | "arm64" 791 | ], 792 | "dev": true, 793 | "license": "MIT", 794 | "optional": true, 795 | "os": [ 796 | "android" 797 | ] 798 | }, 799 | "node_modules/@rollup/rollup-darwin-arm64": { 800 | "version": "4.41.1", 801 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", 802 | "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", 803 | "cpu": [ 804 | "arm64" 805 | ], 806 | "dev": true, 807 | "license": "MIT", 808 | "optional": true, 809 | "os": [ 810 | "darwin" 811 | ] 812 | }, 813 | "node_modules/@rollup/rollup-darwin-x64": { 814 | "version": "4.41.1", 815 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", 816 | "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", 817 | "cpu": [ 818 | "x64" 819 | ], 820 | "dev": true, 821 | "license": "MIT", 822 | "optional": true, 823 | "os": [ 824 | "darwin" 825 | ] 826 | }, 827 | "node_modules/@rollup/rollup-freebsd-arm64": { 828 | "version": "4.41.1", 829 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", 830 | "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", 831 | "cpu": [ 832 | "arm64" 833 | ], 834 | "dev": true, 835 | "license": "MIT", 836 | "optional": true, 837 | "os": [ 838 | "freebsd" 839 | ] 840 | }, 841 | "node_modules/@rollup/rollup-freebsd-x64": { 842 | "version": "4.41.1", 843 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", 844 | "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", 845 | "cpu": [ 846 | "x64" 847 | ], 848 | "dev": true, 849 | "license": "MIT", 850 | "optional": true, 851 | "os": [ 852 | "freebsd" 853 | ] 854 | }, 855 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 856 | "version": "4.41.1", 857 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", 858 | "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", 859 | "cpu": [ 860 | "arm" 861 | ], 862 | "dev": true, 863 | "license": "MIT", 864 | "optional": true, 865 | "os": [ 866 | "linux" 867 | ] 868 | }, 869 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 870 | "version": "4.41.1", 871 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", 872 | "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", 873 | "cpu": [ 874 | "arm" 875 | ], 876 | "dev": true, 877 | "license": "MIT", 878 | "optional": true, 879 | "os": [ 880 | "linux" 881 | ] 882 | }, 883 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 884 | "version": "4.41.1", 885 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", 886 | "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", 887 | "cpu": [ 888 | "arm64" 889 | ], 890 | "dev": true, 891 | "license": "MIT", 892 | "optional": true, 893 | "os": [ 894 | "linux" 895 | ] 896 | }, 897 | "node_modules/@rollup/rollup-linux-arm64-musl": { 898 | "version": "4.41.1", 899 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", 900 | "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", 901 | "cpu": [ 902 | "arm64" 903 | ], 904 | "dev": true, 905 | "license": "MIT", 906 | "optional": true, 907 | "os": [ 908 | "linux" 909 | ] 910 | }, 911 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 912 | "version": "4.41.1", 913 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", 914 | "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", 915 | "cpu": [ 916 | "loong64" 917 | ], 918 | "dev": true, 919 | "license": "MIT", 920 | "optional": true, 921 | "os": [ 922 | "linux" 923 | ] 924 | }, 925 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 926 | "version": "4.41.1", 927 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", 928 | "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", 929 | "cpu": [ 930 | "ppc64" 931 | ], 932 | "dev": true, 933 | "license": "MIT", 934 | "optional": true, 935 | "os": [ 936 | "linux" 937 | ] 938 | }, 939 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 940 | "version": "4.41.1", 941 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", 942 | "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", 943 | "cpu": [ 944 | "riscv64" 945 | ], 946 | "dev": true, 947 | "license": "MIT", 948 | "optional": true, 949 | "os": [ 950 | "linux" 951 | ] 952 | }, 953 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 954 | "version": "4.41.1", 955 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", 956 | "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", 957 | "cpu": [ 958 | "riscv64" 959 | ], 960 | "dev": true, 961 | "license": "MIT", 962 | "optional": true, 963 | "os": [ 964 | "linux" 965 | ] 966 | }, 967 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 968 | "version": "4.41.1", 969 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", 970 | "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", 971 | "cpu": [ 972 | "s390x" 973 | ], 974 | "dev": true, 975 | "license": "MIT", 976 | "optional": true, 977 | "os": [ 978 | "linux" 979 | ] 980 | }, 981 | "node_modules/@rollup/rollup-linux-x64-gnu": { 982 | "version": "4.41.1", 983 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", 984 | "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", 985 | "cpu": [ 986 | "x64" 987 | ], 988 | "dev": true, 989 | "license": "MIT", 990 | "optional": true, 991 | "os": [ 992 | "linux" 993 | ] 994 | }, 995 | "node_modules/@rollup/rollup-linux-x64-musl": { 996 | "version": "4.41.1", 997 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", 998 | "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", 999 | "cpu": [ 1000 | "x64" 1001 | ], 1002 | "dev": true, 1003 | "license": "MIT", 1004 | "optional": true, 1005 | "os": [ 1006 | "linux" 1007 | ] 1008 | }, 1009 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 1010 | "version": "4.41.1", 1011 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", 1012 | "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", 1013 | "cpu": [ 1014 | "arm64" 1015 | ], 1016 | "dev": true, 1017 | "license": "MIT", 1018 | "optional": true, 1019 | "os": [ 1020 | "win32" 1021 | ] 1022 | }, 1023 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 1024 | "version": "4.41.1", 1025 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", 1026 | "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", 1027 | "cpu": [ 1028 | "ia32" 1029 | ], 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "optional": true, 1033 | "os": [ 1034 | "win32" 1035 | ] 1036 | }, 1037 | "node_modules/@rollup/rollup-win32-x64-msvc": { 1038 | "version": "4.41.1", 1039 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", 1040 | "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", 1041 | "cpu": [ 1042 | "x64" 1043 | ], 1044 | "dev": true, 1045 | "license": "MIT", 1046 | "optional": true, 1047 | "os": [ 1048 | "win32" 1049 | ] 1050 | }, 1051 | "node_modules/@shikijs/core": { 1052 | "version": "2.5.0", 1053 | "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", 1054 | "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", 1055 | "dev": true, 1056 | "license": "MIT", 1057 | "dependencies": { 1058 | "@shikijs/engine-javascript": "2.5.0", 1059 | "@shikijs/engine-oniguruma": "2.5.0", 1060 | "@shikijs/types": "2.5.0", 1061 | "@shikijs/vscode-textmate": "^10.0.2", 1062 | "@types/hast": "^3.0.4", 1063 | "hast-util-to-html": "^9.0.4" 1064 | } 1065 | }, 1066 | "node_modules/@shikijs/engine-javascript": { 1067 | "version": "2.5.0", 1068 | "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", 1069 | "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", 1070 | "dev": true, 1071 | "license": "MIT", 1072 | "dependencies": { 1073 | "@shikijs/types": "2.5.0", 1074 | "@shikijs/vscode-textmate": "^10.0.2", 1075 | "oniguruma-to-es": "^3.1.0" 1076 | } 1077 | }, 1078 | "node_modules/@shikijs/engine-oniguruma": { 1079 | "version": "2.5.0", 1080 | "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", 1081 | "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", 1082 | "dev": true, 1083 | "license": "MIT", 1084 | "dependencies": { 1085 | "@shikijs/types": "2.5.0", 1086 | "@shikijs/vscode-textmate": "^10.0.2" 1087 | } 1088 | }, 1089 | "node_modules/@shikijs/langs": { 1090 | "version": "2.5.0", 1091 | "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", 1092 | "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", 1093 | "dev": true, 1094 | "license": "MIT", 1095 | "dependencies": { 1096 | "@shikijs/types": "2.5.0" 1097 | } 1098 | }, 1099 | "node_modules/@shikijs/themes": { 1100 | "version": "2.5.0", 1101 | "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", 1102 | "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", 1103 | "dev": true, 1104 | "license": "MIT", 1105 | "dependencies": { 1106 | "@shikijs/types": "2.5.0" 1107 | } 1108 | }, 1109 | "node_modules/@shikijs/transformers": { 1110 | "version": "2.5.0", 1111 | "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", 1112 | "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", 1113 | "dev": true, 1114 | "license": "MIT", 1115 | "dependencies": { 1116 | "@shikijs/core": "2.5.0", 1117 | "@shikijs/types": "2.5.0" 1118 | } 1119 | }, 1120 | "node_modules/@shikijs/types": { 1121 | "version": "2.5.0", 1122 | "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", 1123 | "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", 1124 | "dev": true, 1125 | "license": "MIT", 1126 | "dependencies": { 1127 | "@shikijs/vscode-textmate": "^10.0.2", 1128 | "@types/hast": "^3.0.4" 1129 | } 1130 | }, 1131 | "node_modules/@shikijs/vscode-textmate": { 1132 | "version": "10.0.2", 1133 | "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", 1134 | "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", 1135 | "dev": true, 1136 | "license": "MIT" 1137 | }, 1138 | "node_modules/@types/estree": { 1139 | "version": "1.0.7", 1140 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 1141 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 1142 | "dev": true, 1143 | "license": "MIT" 1144 | }, 1145 | "node_modules/@types/hast": { 1146 | "version": "3.0.4", 1147 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", 1148 | "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", 1149 | "dev": true, 1150 | "license": "MIT", 1151 | "dependencies": { 1152 | "@types/unist": "*" 1153 | } 1154 | }, 1155 | "node_modules/@types/linkify-it": { 1156 | "version": "5.0.0", 1157 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", 1158 | "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", 1159 | "dev": true, 1160 | "license": "MIT" 1161 | }, 1162 | "node_modules/@types/markdown-it": { 1163 | "version": "14.1.2", 1164 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", 1165 | "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", 1166 | "dev": true, 1167 | "license": "MIT", 1168 | "dependencies": { 1169 | "@types/linkify-it": "^5", 1170 | "@types/mdurl": "^2" 1171 | } 1172 | }, 1173 | "node_modules/@types/mdast": { 1174 | "version": "4.0.4", 1175 | "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", 1176 | "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", 1177 | "dev": true, 1178 | "license": "MIT", 1179 | "dependencies": { 1180 | "@types/unist": "*" 1181 | } 1182 | }, 1183 | "node_modules/@types/mdurl": { 1184 | "version": "2.0.0", 1185 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", 1186 | "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", 1187 | "dev": true, 1188 | "license": "MIT" 1189 | }, 1190 | "node_modules/@types/node": { 1191 | "version": "22.15.21", 1192 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz", 1193 | "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==", 1194 | "dev": true, 1195 | "license": "MIT", 1196 | "dependencies": { 1197 | "undici-types": "~6.21.0" 1198 | } 1199 | }, 1200 | "node_modules/@types/unist": { 1201 | "version": "3.0.3", 1202 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 1203 | "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", 1204 | "dev": true, 1205 | "license": "MIT" 1206 | }, 1207 | "node_modules/@types/web-bluetooth": { 1208 | "version": "0.0.21", 1209 | "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", 1210 | "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", 1211 | "dev": true, 1212 | "license": "MIT" 1213 | }, 1214 | "node_modules/@ungap/structured-clone": { 1215 | "version": "1.3.0", 1216 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", 1217 | "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", 1218 | "dev": true, 1219 | "license": "ISC" 1220 | }, 1221 | "node_modules/@vitejs/plugin-vue": { 1222 | "version": "5.2.4", 1223 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", 1224 | "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", 1225 | "dev": true, 1226 | "license": "MIT", 1227 | "engines": { 1228 | "node": "^18.0.0 || >=20.0.0" 1229 | }, 1230 | "peerDependencies": { 1231 | "vite": "^5.0.0 || ^6.0.0", 1232 | "vue": "^3.2.25" 1233 | } 1234 | }, 1235 | "node_modules/@vue/compiler-core": { 1236 | "version": "3.5.14", 1237 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz", 1238 | "integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==", 1239 | "dev": true, 1240 | "license": "MIT", 1241 | "dependencies": { 1242 | "@babel/parser": "^7.27.2", 1243 | "@vue/shared": "3.5.14", 1244 | "entities": "^4.5.0", 1245 | "estree-walker": "^2.0.2", 1246 | "source-map-js": "^1.2.1" 1247 | } 1248 | }, 1249 | "node_modules/@vue/compiler-dom": { 1250 | "version": "3.5.14", 1251 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz", 1252 | "integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==", 1253 | "dev": true, 1254 | "license": "MIT", 1255 | "dependencies": { 1256 | "@vue/compiler-core": "3.5.14", 1257 | "@vue/shared": "3.5.14" 1258 | } 1259 | }, 1260 | "node_modules/@vue/compiler-sfc": { 1261 | "version": "3.5.14", 1262 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz", 1263 | "integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==", 1264 | "dev": true, 1265 | "license": "MIT", 1266 | "dependencies": { 1267 | "@babel/parser": "^7.27.2", 1268 | "@vue/compiler-core": "3.5.14", 1269 | "@vue/compiler-dom": "3.5.14", 1270 | "@vue/compiler-ssr": "3.5.14", 1271 | "@vue/shared": "3.5.14", 1272 | "estree-walker": "^2.0.2", 1273 | "magic-string": "^0.30.17", 1274 | "postcss": "^8.5.3", 1275 | "source-map-js": "^1.2.1" 1276 | } 1277 | }, 1278 | "node_modules/@vue/compiler-ssr": { 1279 | "version": "3.5.14", 1280 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz", 1281 | "integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==", 1282 | "dev": true, 1283 | "license": "MIT", 1284 | "dependencies": { 1285 | "@vue/compiler-dom": "3.5.14", 1286 | "@vue/shared": "3.5.14" 1287 | } 1288 | }, 1289 | "node_modules/@vue/devtools-api": { 1290 | "version": "7.7.6", 1291 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.6.tgz", 1292 | "integrity": "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==", 1293 | "dev": true, 1294 | "license": "MIT", 1295 | "dependencies": { 1296 | "@vue/devtools-kit": "^7.7.6" 1297 | } 1298 | }, 1299 | "node_modules/@vue/devtools-kit": { 1300 | "version": "7.7.6", 1301 | "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz", 1302 | "integrity": "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==", 1303 | "dev": true, 1304 | "license": "MIT", 1305 | "dependencies": { 1306 | "@vue/devtools-shared": "^7.7.6", 1307 | "birpc": "^2.3.0", 1308 | "hookable": "^5.5.3", 1309 | "mitt": "^3.0.1", 1310 | "perfect-debounce": "^1.0.0", 1311 | "speakingurl": "^14.0.1", 1312 | "superjson": "^2.2.2" 1313 | } 1314 | }, 1315 | "node_modules/@vue/devtools-shared": { 1316 | "version": "7.7.6", 1317 | "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz", 1318 | "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==", 1319 | "dev": true, 1320 | "license": "MIT", 1321 | "dependencies": { 1322 | "rfdc": "^1.4.1" 1323 | } 1324 | }, 1325 | "node_modules/@vue/reactivity": { 1326 | "version": "3.5.14", 1327 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.14.tgz", 1328 | "integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==", 1329 | "dev": true, 1330 | "license": "MIT", 1331 | "dependencies": { 1332 | "@vue/shared": "3.5.14" 1333 | } 1334 | }, 1335 | "node_modules/@vue/runtime-core": { 1336 | "version": "3.5.14", 1337 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.14.tgz", 1338 | "integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==", 1339 | "dev": true, 1340 | "license": "MIT", 1341 | "dependencies": { 1342 | "@vue/reactivity": "3.5.14", 1343 | "@vue/shared": "3.5.14" 1344 | } 1345 | }, 1346 | "node_modules/@vue/runtime-dom": { 1347 | "version": "3.5.14", 1348 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz", 1349 | "integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==", 1350 | "dev": true, 1351 | "license": "MIT", 1352 | "dependencies": { 1353 | "@vue/reactivity": "3.5.14", 1354 | "@vue/runtime-core": "3.5.14", 1355 | "@vue/shared": "3.5.14", 1356 | "csstype": "^3.1.3" 1357 | } 1358 | }, 1359 | "node_modules/@vue/server-renderer": { 1360 | "version": "3.5.14", 1361 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.14.tgz", 1362 | "integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==", 1363 | "dev": true, 1364 | "license": "MIT", 1365 | "dependencies": { 1366 | "@vue/compiler-ssr": "3.5.14", 1367 | "@vue/shared": "3.5.14" 1368 | }, 1369 | "peerDependencies": { 1370 | "vue": "3.5.14" 1371 | } 1372 | }, 1373 | "node_modules/@vue/shared": { 1374 | "version": "3.5.14", 1375 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz", 1376 | "integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==", 1377 | "dev": true, 1378 | "license": "MIT" 1379 | }, 1380 | "node_modules/@vueuse/core": { 1381 | "version": "12.8.2", 1382 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", 1383 | "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", 1384 | "dev": true, 1385 | "license": "MIT", 1386 | "dependencies": { 1387 | "@types/web-bluetooth": "^0.0.21", 1388 | "@vueuse/metadata": "12.8.2", 1389 | "@vueuse/shared": "12.8.2", 1390 | "vue": "^3.5.13" 1391 | }, 1392 | "funding": { 1393 | "url": "https://github.com/sponsors/antfu" 1394 | } 1395 | }, 1396 | "node_modules/@vueuse/integrations": { 1397 | "version": "12.8.2", 1398 | "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", 1399 | "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", 1400 | "dev": true, 1401 | "license": "MIT", 1402 | "dependencies": { 1403 | "@vueuse/core": "12.8.2", 1404 | "@vueuse/shared": "12.8.2", 1405 | "vue": "^3.5.13" 1406 | }, 1407 | "funding": { 1408 | "url": "https://github.com/sponsors/antfu" 1409 | }, 1410 | "peerDependencies": { 1411 | "async-validator": "^4", 1412 | "axios": "^1", 1413 | "change-case": "^5", 1414 | "drauu": "^0.4", 1415 | "focus-trap": "^7", 1416 | "fuse.js": "^7", 1417 | "idb-keyval": "^6", 1418 | "jwt-decode": "^4", 1419 | "nprogress": "^0.2", 1420 | "qrcode": "^1.5", 1421 | "sortablejs": "^1", 1422 | "universal-cookie": "^7" 1423 | }, 1424 | "peerDependenciesMeta": { 1425 | "async-validator": { 1426 | "optional": true 1427 | }, 1428 | "axios": { 1429 | "optional": true 1430 | }, 1431 | "change-case": { 1432 | "optional": true 1433 | }, 1434 | "drauu": { 1435 | "optional": true 1436 | }, 1437 | "focus-trap": { 1438 | "optional": true 1439 | }, 1440 | "fuse.js": { 1441 | "optional": true 1442 | }, 1443 | "idb-keyval": { 1444 | "optional": true 1445 | }, 1446 | "jwt-decode": { 1447 | "optional": true 1448 | }, 1449 | "nprogress": { 1450 | "optional": true 1451 | }, 1452 | "qrcode": { 1453 | "optional": true 1454 | }, 1455 | "sortablejs": { 1456 | "optional": true 1457 | }, 1458 | "universal-cookie": { 1459 | "optional": true 1460 | } 1461 | } 1462 | }, 1463 | "node_modules/@vueuse/metadata": { 1464 | "version": "12.8.2", 1465 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", 1466 | "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", 1467 | "dev": true, 1468 | "license": "MIT", 1469 | "funding": { 1470 | "url": "https://github.com/sponsors/antfu" 1471 | } 1472 | }, 1473 | "node_modules/@vueuse/shared": { 1474 | "version": "12.8.2", 1475 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", 1476 | "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", 1477 | "dev": true, 1478 | "license": "MIT", 1479 | "dependencies": { 1480 | "vue": "^3.5.13" 1481 | }, 1482 | "funding": { 1483 | "url": "https://github.com/sponsors/antfu" 1484 | } 1485 | }, 1486 | "node_modules/algoliasearch": { 1487 | "version": "5.25.0", 1488 | "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz", 1489 | "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==", 1490 | "dev": true, 1491 | "license": "MIT", 1492 | "dependencies": { 1493 | "@algolia/client-abtesting": "5.25.0", 1494 | "@algolia/client-analytics": "5.25.0", 1495 | "@algolia/client-common": "5.25.0", 1496 | "@algolia/client-insights": "5.25.0", 1497 | "@algolia/client-personalization": "5.25.0", 1498 | "@algolia/client-query-suggestions": "5.25.0", 1499 | "@algolia/client-search": "5.25.0", 1500 | "@algolia/ingestion": "1.25.0", 1501 | "@algolia/monitoring": "1.25.0", 1502 | "@algolia/recommend": "5.25.0", 1503 | "@algolia/requester-browser-xhr": "5.25.0", 1504 | "@algolia/requester-fetch": "5.25.0", 1505 | "@algolia/requester-node-http": "5.25.0" 1506 | }, 1507 | "engines": { 1508 | "node": ">= 14.0.0" 1509 | } 1510 | }, 1511 | "node_modules/birpc": { 1512 | "version": "2.3.0", 1513 | "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz", 1514 | "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", 1515 | "dev": true, 1516 | "license": "MIT", 1517 | "funding": { 1518 | "url": "https://github.com/sponsors/antfu" 1519 | } 1520 | }, 1521 | "node_modules/ccount": { 1522 | "version": "2.0.1", 1523 | "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", 1524 | "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", 1525 | "dev": true, 1526 | "license": "MIT", 1527 | "funding": { 1528 | "type": "github", 1529 | "url": "https://github.com/sponsors/wooorm" 1530 | } 1531 | }, 1532 | "node_modules/character-entities-html4": { 1533 | "version": "2.1.0", 1534 | "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", 1535 | "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", 1536 | "dev": true, 1537 | "license": "MIT", 1538 | "funding": { 1539 | "type": "github", 1540 | "url": "https://github.com/sponsors/wooorm" 1541 | } 1542 | }, 1543 | "node_modules/character-entities-legacy": { 1544 | "version": "3.0.0", 1545 | "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", 1546 | "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", 1547 | "dev": true, 1548 | "license": "MIT", 1549 | "funding": { 1550 | "type": "github", 1551 | "url": "https://github.com/sponsors/wooorm" 1552 | } 1553 | }, 1554 | "node_modules/comma-separated-tokens": { 1555 | "version": "2.0.3", 1556 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", 1557 | "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", 1558 | "dev": true, 1559 | "license": "MIT", 1560 | "funding": { 1561 | "type": "github", 1562 | "url": "https://github.com/sponsors/wooorm" 1563 | } 1564 | }, 1565 | "node_modules/copy-anything": { 1566 | "version": "3.0.5", 1567 | "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", 1568 | "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", 1569 | "dev": true, 1570 | "license": "MIT", 1571 | "dependencies": { 1572 | "is-what": "^4.1.8" 1573 | }, 1574 | "engines": { 1575 | "node": ">=12.13" 1576 | }, 1577 | "funding": { 1578 | "url": "https://github.com/sponsors/mesqueeb" 1579 | } 1580 | }, 1581 | "node_modules/csstype": { 1582 | "version": "3.1.3", 1583 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1584 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1585 | "dev": true, 1586 | "license": "MIT" 1587 | }, 1588 | "node_modules/dequal": { 1589 | "version": "2.0.3", 1590 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1591 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1592 | "dev": true, 1593 | "license": "MIT", 1594 | "engines": { 1595 | "node": ">=6" 1596 | } 1597 | }, 1598 | "node_modules/devlop": { 1599 | "version": "1.1.0", 1600 | "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", 1601 | "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", 1602 | "dev": true, 1603 | "license": "MIT", 1604 | "dependencies": { 1605 | "dequal": "^2.0.0" 1606 | }, 1607 | "funding": { 1608 | "type": "github", 1609 | "url": "https://github.com/sponsors/wooorm" 1610 | } 1611 | }, 1612 | "node_modules/easy-nix-documentation": { 1613 | "version": "1.3.0", 1614 | "resolved": "https://registry.npmjs.org/easy-nix-documentation/-/easy-nix-documentation-1.3.0.tgz", 1615 | "integrity": "sha512-Z7vJC1SwXqzMzUY2nyYXkLsvJpnelq8dgRtsHiNgVhj/0DQS5BTid89Gr0gpbSvfrA2cyvHrSoc5OKoBt6rXDA==", 1616 | "dev": true, 1617 | "license": "Apache-2.0", 1618 | "dependencies": { 1619 | "@types/node": "^22.13.5", 1620 | "vitepress": "^1.6.3", 1621 | "vue": "^3.5.13" 1622 | } 1623 | }, 1624 | "node_modules/emoji-regex-xs": { 1625 | "version": "1.0.0", 1626 | "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", 1627 | "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", 1628 | "dev": true, 1629 | "license": "MIT" 1630 | }, 1631 | "node_modules/entities": { 1632 | "version": "4.5.0", 1633 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1634 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1635 | "dev": true, 1636 | "license": "BSD-2-Clause", 1637 | "engines": { 1638 | "node": ">=0.12" 1639 | }, 1640 | "funding": { 1641 | "url": "https://github.com/fb55/entities?sponsor=1" 1642 | } 1643 | }, 1644 | "node_modules/esbuild": { 1645 | "version": "0.21.5", 1646 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1647 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1648 | "dev": true, 1649 | "hasInstallScript": true, 1650 | "license": "MIT", 1651 | "bin": { 1652 | "esbuild": "bin/esbuild" 1653 | }, 1654 | "engines": { 1655 | "node": ">=12" 1656 | }, 1657 | "optionalDependencies": { 1658 | "@esbuild/aix-ppc64": "0.21.5", 1659 | "@esbuild/android-arm": "0.21.5", 1660 | "@esbuild/android-arm64": "0.21.5", 1661 | "@esbuild/android-x64": "0.21.5", 1662 | "@esbuild/darwin-arm64": "0.21.5", 1663 | "@esbuild/darwin-x64": "0.21.5", 1664 | "@esbuild/freebsd-arm64": "0.21.5", 1665 | "@esbuild/freebsd-x64": "0.21.5", 1666 | "@esbuild/linux-arm": "0.21.5", 1667 | "@esbuild/linux-arm64": "0.21.5", 1668 | "@esbuild/linux-ia32": "0.21.5", 1669 | "@esbuild/linux-loong64": "0.21.5", 1670 | "@esbuild/linux-mips64el": "0.21.5", 1671 | "@esbuild/linux-ppc64": "0.21.5", 1672 | "@esbuild/linux-riscv64": "0.21.5", 1673 | "@esbuild/linux-s390x": "0.21.5", 1674 | "@esbuild/linux-x64": "0.21.5", 1675 | "@esbuild/netbsd-x64": "0.21.5", 1676 | "@esbuild/openbsd-x64": "0.21.5", 1677 | "@esbuild/sunos-x64": "0.21.5", 1678 | "@esbuild/win32-arm64": "0.21.5", 1679 | "@esbuild/win32-ia32": "0.21.5", 1680 | "@esbuild/win32-x64": "0.21.5" 1681 | } 1682 | }, 1683 | "node_modules/estree-walker": { 1684 | "version": "2.0.2", 1685 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1686 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1687 | "dev": true, 1688 | "license": "MIT" 1689 | }, 1690 | "node_modules/focus-trap": { 1691 | "version": "7.6.4", 1692 | "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", 1693 | "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", 1694 | "dev": true, 1695 | "license": "MIT", 1696 | "dependencies": { 1697 | "tabbable": "^6.2.0" 1698 | } 1699 | }, 1700 | "node_modules/fsevents": { 1701 | "version": "2.3.3", 1702 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1703 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1704 | "dev": true, 1705 | "hasInstallScript": true, 1706 | "license": "MIT", 1707 | "optional": true, 1708 | "os": [ 1709 | "darwin" 1710 | ], 1711 | "engines": { 1712 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1713 | } 1714 | }, 1715 | "node_modules/hast-util-to-html": { 1716 | "version": "9.0.5", 1717 | "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", 1718 | "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", 1719 | "dev": true, 1720 | "license": "MIT", 1721 | "dependencies": { 1722 | "@types/hast": "^3.0.0", 1723 | "@types/unist": "^3.0.0", 1724 | "ccount": "^2.0.0", 1725 | "comma-separated-tokens": "^2.0.0", 1726 | "hast-util-whitespace": "^3.0.0", 1727 | "html-void-elements": "^3.0.0", 1728 | "mdast-util-to-hast": "^13.0.0", 1729 | "property-information": "^7.0.0", 1730 | "space-separated-tokens": "^2.0.0", 1731 | "stringify-entities": "^4.0.0", 1732 | "zwitch": "^2.0.4" 1733 | }, 1734 | "funding": { 1735 | "type": "opencollective", 1736 | "url": "https://opencollective.com/unified" 1737 | } 1738 | }, 1739 | "node_modules/hast-util-whitespace": { 1740 | "version": "3.0.0", 1741 | "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", 1742 | "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", 1743 | "dev": true, 1744 | "license": "MIT", 1745 | "dependencies": { 1746 | "@types/hast": "^3.0.0" 1747 | }, 1748 | "funding": { 1749 | "type": "opencollective", 1750 | "url": "https://opencollective.com/unified" 1751 | } 1752 | }, 1753 | "node_modules/hookable": { 1754 | "version": "5.5.3", 1755 | "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", 1756 | "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", 1757 | "dev": true, 1758 | "license": "MIT" 1759 | }, 1760 | "node_modules/html-void-elements": { 1761 | "version": "3.0.0", 1762 | "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", 1763 | "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", 1764 | "dev": true, 1765 | "license": "MIT", 1766 | "funding": { 1767 | "type": "github", 1768 | "url": "https://github.com/sponsors/wooorm" 1769 | } 1770 | }, 1771 | "node_modules/is-what": { 1772 | "version": "4.1.16", 1773 | "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", 1774 | "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", 1775 | "dev": true, 1776 | "license": "MIT", 1777 | "engines": { 1778 | "node": ">=12.13" 1779 | }, 1780 | "funding": { 1781 | "url": "https://github.com/sponsors/mesqueeb" 1782 | } 1783 | }, 1784 | "node_modules/magic-string": { 1785 | "version": "0.30.17", 1786 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", 1787 | "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", 1788 | "dev": true, 1789 | "license": "MIT", 1790 | "dependencies": { 1791 | "@jridgewell/sourcemap-codec": "^1.5.0" 1792 | } 1793 | }, 1794 | "node_modules/mark.js": { 1795 | "version": "8.11.1", 1796 | "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", 1797 | "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", 1798 | "dev": true, 1799 | "license": "MIT" 1800 | }, 1801 | "node_modules/mdast-util-to-hast": { 1802 | "version": "13.2.0", 1803 | "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", 1804 | "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", 1805 | "dev": true, 1806 | "license": "MIT", 1807 | "dependencies": { 1808 | "@types/hast": "^3.0.0", 1809 | "@types/mdast": "^4.0.0", 1810 | "@ungap/structured-clone": "^1.0.0", 1811 | "devlop": "^1.0.0", 1812 | "micromark-util-sanitize-uri": "^2.0.0", 1813 | "trim-lines": "^3.0.0", 1814 | "unist-util-position": "^5.0.0", 1815 | "unist-util-visit": "^5.0.0", 1816 | "vfile": "^6.0.0" 1817 | }, 1818 | "funding": { 1819 | "type": "opencollective", 1820 | "url": "https://opencollective.com/unified" 1821 | } 1822 | }, 1823 | "node_modules/micromark-util-character": { 1824 | "version": "2.1.1", 1825 | "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", 1826 | "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", 1827 | "dev": true, 1828 | "funding": [ 1829 | { 1830 | "type": "GitHub Sponsors", 1831 | "url": "https://github.com/sponsors/unifiedjs" 1832 | }, 1833 | { 1834 | "type": "OpenCollective", 1835 | "url": "https://opencollective.com/unified" 1836 | } 1837 | ], 1838 | "license": "MIT", 1839 | "dependencies": { 1840 | "micromark-util-symbol": "^2.0.0", 1841 | "micromark-util-types": "^2.0.0" 1842 | } 1843 | }, 1844 | "node_modules/micromark-util-encode": { 1845 | "version": "2.0.1", 1846 | "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", 1847 | "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", 1848 | "dev": true, 1849 | "funding": [ 1850 | { 1851 | "type": "GitHub Sponsors", 1852 | "url": "https://github.com/sponsors/unifiedjs" 1853 | }, 1854 | { 1855 | "type": "OpenCollective", 1856 | "url": "https://opencollective.com/unified" 1857 | } 1858 | ], 1859 | "license": "MIT" 1860 | }, 1861 | "node_modules/micromark-util-sanitize-uri": { 1862 | "version": "2.0.1", 1863 | "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", 1864 | "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", 1865 | "dev": true, 1866 | "funding": [ 1867 | { 1868 | "type": "GitHub Sponsors", 1869 | "url": "https://github.com/sponsors/unifiedjs" 1870 | }, 1871 | { 1872 | "type": "OpenCollective", 1873 | "url": "https://opencollective.com/unified" 1874 | } 1875 | ], 1876 | "license": "MIT", 1877 | "dependencies": { 1878 | "micromark-util-character": "^2.0.0", 1879 | "micromark-util-encode": "^2.0.0", 1880 | "micromark-util-symbol": "^2.0.0" 1881 | } 1882 | }, 1883 | "node_modules/micromark-util-symbol": { 1884 | "version": "2.0.1", 1885 | "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", 1886 | "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", 1887 | "dev": true, 1888 | "funding": [ 1889 | { 1890 | "type": "GitHub Sponsors", 1891 | "url": "https://github.com/sponsors/unifiedjs" 1892 | }, 1893 | { 1894 | "type": "OpenCollective", 1895 | "url": "https://opencollective.com/unified" 1896 | } 1897 | ], 1898 | "license": "MIT" 1899 | }, 1900 | "node_modules/micromark-util-types": { 1901 | "version": "2.0.2", 1902 | "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", 1903 | "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", 1904 | "dev": true, 1905 | "funding": [ 1906 | { 1907 | "type": "GitHub Sponsors", 1908 | "url": "https://github.com/sponsors/unifiedjs" 1909 | }, 1910 | { 1911 | "type": "OpenCollective", 1912 | "url": "https://opencollective.com/unified" 1913 | } 1914 | ], 1915 | "license": "MIT" 1916 | }, 1917 | "node_modules/minisearch": { 1918 | "version": "7.1.2", 1919 | "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.2.tgz", 1920 | "integrity": "sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==", 1921 | "dev": true, 1922 | "license": "MIT" 1923 | }, 1924 | "node_modules/mitt": { 1925 | "version": "3.0.1", 1926 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 1927 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 1928 | "dev": true, 1929 | "license": "MIT" 1930 | }, 1931 | "node_modules/nanoid": { 1932 | "version": "3.3.11", 1933 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1934 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1935 | "dev": true, 1936 | "funding": [ 1937 | { 1938 | "type": "github", 1939 | "url": "https://github.com/sponsors/ai" 1940 | } 1941 | ], 1942 | "license": "MIT", 1943 | "bin": { 1944 | "nanoid": "bin/nanoid.cjs" 1945 | }, 1946 | "engines": { 1947 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1948 | } 1949 | }, 1950 | "node_modules/oniguruma-to-es": { 1951 | "version": "3.1.1", 1952 | "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", 1953 | "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", 1954 | "dev": true, 1955 | "license": "MIT", 1956 | "dependencies": { 1957 | "emoji-regex-xs": "^1.0.0", 1958 | "regex": "^6.0.1", 1959 | "regex-recursion": "^6.0.2" 1960 | } 1961 | }, 1962 | "node_modules/perfect-debounce": { 1963 | "version": "1.0.0", 1964 | "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", 1965 | "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", 1966 | "dev": true, 1967 | "license": "MIT" 1968 | }, 1969 | "node_modules/picocolors": { 1970 | "version": "1.1.1", 1971 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1972 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1973 | "dev": true, 1974 | "license": "ISC" 1975 | }, 1976 | "node_modules/postcss": { 1977 | "version": "8.5.3", 1978 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1979 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1980 | "dev": true, 1981 | "funding": [ 1982 | { 1983 | "type": "opencollective", 1984 | "url": "https://opencollective.com/postcss/" 1985 | }, 1986 | { 1987 | "type": "tidelift", 1988 | "url": "https://tidelift.com/funding/github/npm/postcss" 1989 | }, 1990 | { 1991 | "type": "github", 1992 | "url": "https://github.com/sponsors/ai" 1993 | } 1994 | ], 1995 | "license": "MIT", 1996 | "dependencies": { 1997 | "nanoid": "^3.3.8", 1998 | "picocolors": "^1.1.1", 1999 | "source-map-js": "^1.2.1" 2000 | }, 2001 | "engines": { 2002 | "node": "^10 || ^12 || >=14" 2003 | } 2004 | }, 2005 | "node_modules/preact": { 2006 | "version": "10.26.7", 2007 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.7.tgz", 2008 | "integrity": "sha512-43xS+QYc1X1IPbw03faSgY6I6OYWcLrJRv3hU0+qMOfh/XCHcP0MX2CVjNARYR2cC/guu975sta4OcjlczxD7g==", 2009 | "dev": true, 2010 | "license": "MIT", 2011 | "funding": { 2012 | "type": "opencollective", 2013 | "url": "https://opencollective.com/preact" 2014 | } 2015 | }, 2016 | "node_modules/property-information": { 2017 | "version": "7.1.0", 2018 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", 2019 | "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", 2020 | "dev": true, 2021 | "license": "MIT", 2022 | "funding": { 2023 | "type": "github", 2024 | "url": "https://github.com/sponsors/wooorm" 2025 | } 2026 | }, 2027 | "node_modules/regex": { 2028 | "version": "6.0.1", 2029 | "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", 2030 | "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", 2031 | "dev": true, 2032 | "license": "MIT", 2033 | "dependencies": { 2034 | "regex-utilities": "^2.3.0" 2035 | } 2036 | }, 2037 | "node_modules/regex-recursion": { 2038 | "version": "6.0.2", 2039 | "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", 2040 | "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", 2041 | "dev": true, 2042 | "license": "MIT", 2043 | "dependencies": { 2044 | "regex-utilities": "^2.3.0" 2045 | } 2046 | }, 2047 | "node_modules/regex-utilities": { 2048 | "version": "2.3.0", 2049 | "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", 2050 | "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", 2051 | "dev": true, 2052 | "license": "MIT" 2053 | }, 2054 | "node_modules/rfdc": { 2055 | "version": "1.4.1", 2056 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", 2057 | "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", 2058 | "dev": true, 2059 | "license": "MIT" 2060 | }, 2061 | "node_modules/rollup": { 2062 | "version": "4.41.1", 2063 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", 2064 | "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", 2065 | "dev": true, 2066 | "license": "MIT", 2067 | "dependencies": { 2068 | "@types/estree": "1.0.7" 2069 | }, 2070 | "bin": { 2071 | "rollup": "dist/bin/rollup" 2072 | }, 2073 | "engines": { 2074 | "node": ">=18.0.0", 2075 | "npm": ">=8.0.0" 2076 | }, 2077 | "optionalDependencies": { 2078 | "@rollup/rollup-android-arm-eabi": "4.41.1", 2079 | "@rollup/rollup-android-arm64": "4.41.1", 2080 | "@rollup/rollup-darwin-arm64": "4.41.1", 2081 | "@rollup/rollup-darwin-x64": "4.41.1", 2082 | "@rollup/rollup-freebsd-arm64": "4.41.1", 2083 | "@rollup/rollup-freebsd-x64": "4.41.1", 2084 | "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", 2085 | "@rollup/rollup-linux-arm-musleabihf": "4.41.1", 2086 | "@rollup/rollup-linux-arm64-gnu": "4.41.1", 2087 | "@rollup/rollup-linux-arm64-musl": "4.41.1", 2088 | "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", 2089 | "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", 2090 | "@rollup/rollup-linux-riscv64-gnu": "4.41.1", 2091 | "@rollup/rollup-linux-riscv64-musl": "4.41.1", 2092 | "@rollup/rollup-linux-s390x-gnu": "4.41.1", 2093 | "@rollup/rollup-linux-x64-gnu": "4.41.1", 2094 | "@rollup/rollup-linux-x64-musl": "4.41.1", 2095 | "@rollup/rollup-win32-arm64-msvc": "4.41.1", 2096 | "@rollup/rollup-win32-ia32-msvc": "4.41.1", 2097 | "@rollup/rollup-win32-x64-msvc": "4.41.1", 2098 | "fsevents": "~2.3.2" 2099 | } 2100 | }, 2101 | "node_modules/search-insights": { 2102 | "version": "2.17.3", 2103 | "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", 2104 | "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", 2105 | "dev": true, 2106 | "license": "MIT", 2107 | "peer": true 2108 | }, 2109 | "node_modules/shiki": { 2110 | "version": "2.5.0", 2111 | "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", 2112 | "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", 2113 | "dev": true, 2114 | "license": "MIT", 2115 | "dependencies": { 2116 | "@shikijs/core": "2.5.0", 2117 | "@shikijs/engine-javascript": "2.5.0", 2118 | "@shikijs/engine-oniguruma": "2.5.0", 2119 | "@shikijs/langs": "2.5.0", 2120 | "@shikijs/themes": "2.5.0", 2121 | "@shikijs/types": "2.5.0", 2122 | "@shikijs/vscode-textmate": "^10.0.2", 2123 | "@types/hast": "^3.0.4" 2124 | } 2125 | }, 2126 | "node_modules/source-map-js": { 2127 | "version": "1.2.1", 2128 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2129 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2130 | "dev": true, 2131 | "license": "BSD-3-Clause", 2132 | "engines": { 2133 | "node": ">=0.10.0" 2134 | } 2135 | }, 2136 | "node_modules/space-separated-tokens": { 2137 | "version": "2.0.2", 2138 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", 2139 | "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", 2140 | "dev": true, 2141 | "license": "MIT", 2142 | "funding": { 2143 | "type": "github", 2144 | "url": "https://github.com/sponsors/wooorm" 2145 | } 2146 | }, 2147 | "node_modules/speakingurl": { 2148 | "version": "14.0.1", 2149 | "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", 2150 | "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", 2151 | "dev": true, 2152 | "license": "BSD-3-Clause", 2153 | "engines": { 2154 | "node": ">=0.10.0" 2155 | } 2156 | }, 2157 | "node_modules/stringify-entities": { 2158 | "version": "4.0.4", 2159 | "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", 2160 | "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", 2161 | "dev": true, 2162 | "license": "MIT", 2163 | "dependencies": { 2164 | "character-entities-html4": "^2.0.0", 2165 | "character-entities-legacy": "^3.0.0" 2166 | }, 2167 | "funding": { 2168 | "type": "github", 2169 | "url": "https://github.com/sponsors/wooorm" 2170 | } 2171 | }, 2172 | "node_modules/superjson": { 2173 | "version": "2.2.2", 2174 | "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", 2175 | "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", 2176 | "dev": true, 2177 | "license": "MIT", 2178 | "dependencies": { 2179 | "copy-anything": "^3.0.2" 2180 | }, 2181 | "engines": { 2182 | "node": ">=16" 2183 | } 2184 | }, 2185 | "node_modules/tabbable": { 2186 | "version": "6.2.0", 2187 | "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", 2188 | "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", 2189 | "dev": true, 2190 | "license": "MIT" 2191 | }, 2192 | "node_modules/trim-lines": { 2193 | "version": "3.0.1", 2194 | "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", 2195 | "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", 2196 | "dev": true, 2197 | "license": "MIT", 2198 | "funding": { 2199 | "type": "github", 2200 | "url": "https://github.com/sponsors/wooorm" 2201 | } 2202 | }, 2203 | "node_modules/undici-types": { 2204 | "version": "6.21.0", 2205 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", 2206 | "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", 2207 | "dev": true, 2208 | "license": "MIT" 2209 | }, 2210 | "node_modules/unist-util-is": { 2211 | "version": "6.0.0", 2212 | "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", 2213 | "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", 2214 | "dev": true, 2215 | "license": "MIT", 2216 | "dependencies": { 2217 | "@types/unist": "^3.0.0" 2218 | }, 2219 | "funding": { 2220 | "type": "opencollective", 2221 | "url": "https://opencollective.com/unified" 2222 | } 2223 | }, 2224 | "node_modules/unist-util-position": { 2225 | "version": "5.0.0", 2226 | "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", 2227 | "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", 2228 | "dev": true, 2229 | "license": "MIT", 2230 | "dependencies": { 2231 | "@types/unist": "^3.0.0" 2232 | }, 2233 | "funding": { 2234 | "type": "opencollective", 2235 | "url": "https://opencollective.com/unified" 2236 | } 2237 | }, 2238 | "node_modules/unist-util-stringify-position": { 2239 | "version": "4.0.0", 2240 | "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", 2241 | "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", 2242 | "dev": true, 2243 | "license": "MIT", 2244 | "dependencies": { 2245 | "@types/unist": "^3.0.0" 2246 | }, 2247 | "funding": { 2248 | "type": "opencollective", 2249 | "url": "https://opencollective.com/unified" 2250 | } 2251 | }, 2252 | "node_modules/unist-util-visit": { 2253 | "version": "5.0.0", 2254 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", 2255 | "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", 2256 | "dev": true, 2257 | "license": "MIT", 2258 | "dependencies": { 2259 | "@types/unist": "^3.0.0", 2260 | "unist-util-is": "^6.0.0", 2261 | "unist-util-visit-parents": "^6.0.0" 2262 | }, 2263 | "funding": { 2264 | "type": "opencollective", 2265 | "url": "https://opencollective.com/unified" 2266 | } 2267 | }, 2268 | "node_modules/unist-util-visit-parents": { 2269 | "version": "6.0.1", 2270 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", 2271 | "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", 2272 | "dev": true, 2273 | "license": "MIT", 2274 | "dependencies": { 2275 | "@types/unist": "^3.0.0", 2276 | "unist-util-is": "^6.0.0" 2277 | }, 2278 | "funding": { 2279 | "type": "opencollective", 2280 | "url": "https://opencollective.com/unified" 2281 | } 2282 | }, 2283 | "node_modules/vfile": { 2284 | "version": "6.0.3", 2285 | "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", 2286 | "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", 2287 | "dev": true, 2288 | "license": "MIT", 2289 | "dependencies": { 2290 | "@types/unist": "^3.0.0", 2291 | "vfile-message": "^4.0.0" 2292 | }, 2293 | "funding": { 2294 | "type": "opencollective", 2295 | "url": "https://opencollective.com/unified" 2296 | } 2297 | }, 2298 | "node_modules/vfile-message": { 2299 | "version": "4.0.2", 2300 | "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", 2301 | "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", 2302 | "dev": true, 2303 | "license": "MIT", 2304 | "dependencies": { 2305 | "@types/unist": "^3.0.0", 2306 | "unist-util-stringify-position": "^4.0.0" 2307 | }, 2308 | "funding": { 2309 | "type": "opencollective", 2310 | "url": "https://opencollective.com/unified" 2311 | } 2312 | }, 2313 | "node_modules/vite": { 2314 | "version": "5.4.19", 2315 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", 2316 | "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", 2317 | "dev": true, 2318 | "license": "MIT", 2319 | "dependencies": { 2320 | "esbuild": "^0.21.3", 2321 | "postcss": "^8.4.43", 2322 | "rollup": "^4.20.0" 2323 | }, 2324 | "bin": { 2325 | "vite": "bin/vite.js" 2326 | }, 2327 | "engines": { 2328 | "node": "^18.0.0 || >=20.0.0" 2329 | }, 2330 | "funding": { 2331 | "url": "https://github.com/vitejs/vite?sponsor=1" 2332 | }, 2333 | "optionalDependencies": { 2334 | "fsevents": "~2.3.3" 2335 | }, 2336 | "peerDependencies": { 2337 | "@types/node": "^18.0.0 || >=20.0.0", 2338 | "less": "*", 2339 | "lightningcss": "^1.21.0", 2340 | "sass": "*", 2341 | "sass-embedded": "*", 2342 | "stylus": "*", 2343 | "sugarss": "*", 2344 | "terser": "^5.4.0" 2345 | }, 2346 | "peerDependenciesMeta": { 2347 | "@types/node": { 2348 | "optional": true 2349 | }, 2350 | "less": { 2351 | "optional": true 2352 | }, 2353 | "lightningcss": { 2354 | "optional": true 2355 | }, 2356 | "sass": { 2357 | "optional": true 2358 | }, 2359 | "sass-embedded": { 2360 | "optional": true 2361 | }, 2362 | "stylus": { 2363 | "optional": true 2364 | }, 2365 | "sugarss": { 2366 | "optional": true 2367 | }, 2368 | "terser": { 2369 | "optional": true 2370 | } 2371 | } 2372 | }, 2373 | "node_modules/vitepress": { 2374 | "version": "1.6.3", 2375 | "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz", 2376 | "integrity": "sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==", 2377 | "dev": true, 2378 | "license": "MIT", 2379 | "dependencies": { 2380 | "@docsearch/css": "3.8.2", 2381 | "@docsearch/js": "3.8.2", 2382 | "@iconify-json/simple-icons": "^1.2.21", 2383 | "@shikijs/core": "^2.1.0", 2384 | "@shikijs/transformers": "^2.1.0", 2385 | "@shikijs/types": "^2.1.0", 2386 | "@types/markdown-it": "^14.1.2", 2387 | "@vitejs/plugin-vue": "^5.2.1", 2388 | "@vue/devtools-api": "^7.7.0", 2389 | "@vue/shared": "^3.5.13", 2390 | "@vueuse/core": "^12.4.0", 2391 | "@vueuse/integrations": "^12.4.0", 2392 | "focus-trap": "^7.6.4", 2393 | "mark.js": "8.11.1", 2394 | "minisearch": "^7.1.1", 2395 | "shiki": "^2.1.0", 2396 | "vite": "^5.4.14", 2397 | "vue": "^3.5.13" 2398 | }, 2399 | "bin": { 2400 | "vitepress": "bin/vitepress.js" 2401 | }, 2402 | "peerDependencies": { 2403 | "markdown-it-mathjax3": "^4", 2404 | "postcss": "^8" 2405 | }, 2406 | "peerDependenciesMeta": { 2407 | "markdown-it-mathjax3": { 2408 | "optional": true 2409 | }, 2410 | "postcss": { 2411 | "optional": true 2412 | } 2413 | } 2414 | }, 2415 | "node_modules/vue": { 2416 | "version": "3.5.14", 2417 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.14.tgz", 2418 | "integrity": "sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==", 2419 | "dev": true, 2420 | "license": "MIT", 2421 | "dependencies": { 2422 | "@vue/compiler-dom": "3.5.14", 2423 | "@vue/compiler-sfc": "3.5.14", 2424 | "@vue/runtime-dom": "3.5.14", 2425 | "@vue/server-renderer": "3.5.14", 2426 | "@vue/shared": "3.5.14" 2427 | }, 2428 | "peerDependencies": { 2429 | "typescript": "*" 2430 | }, 2431 | "peerDependenciesMeta": { 2432 | "typescript": { 2433 | "optional": true 2434 | } 2435 | } 2436 | }, 2437 | "node_modules/zwitch": { 2438 | "version": "2.0.4", 2439 | "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", 2440 | "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", 2441 | "dev": true, 2442 | "license": "MIT", 2443 | "funding": { 2444 | "type": "github", 2445 | "url": "https://github.com/sponsors/wooorm" 2446 | } 2447 | } 2448 | } 2449 | } 2450 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "type": "module", 4 | "scripts": { 5 | "dev": "vitepress dev", 6 | "build": "vitepress build --base=/mnw/" 7 | }, 8 | "devDependencies": { 9 | "easy-nix-documentation": "^1.1.0", 10 | "vitepress": "^1.6.3" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/package.nix: -------------------------------------------------------------------------------- 1 | { 2 | buildNpmPackage, 3 | importNpmLock, 4 | optionsJSON, 5 | }: 6 | buildNpmPackage { 7 | name = "mnw-docs"; 8 | src = ./.; 9 | 10 | npmDeps = importNpmLock { 11 | npmRoot = ./.; 12 | }; 13 | 14 | inherit (importNpmLock) npmConfigHook; 15 | env.MNW_OPTIONS_JSON = optionsJSON; 16 | 17 | # VitePress hangs if you don't pipe the output into a file 18 | buildPhase = '' 19 | runHook preBuild 20 | 21 | local exit_status=0 22 | npm run build > build.log 2>&1 || { 23 | exit_status=$? 24 | : 25 | } 26 | cat build.log 27 | return $exit_status 28 | 29 | runHook postBuild 30 | ''; 31 | 32 | installPhase = '' 33 | runHook preInstall 34 | 35 | mv .vitepress/dist $out 36 | 37 | runHook postInstall 38 | ''; 39 | } 40 | -------------------------------------------------------------------------------- /docs/usage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Usage 3 | --- 4 | # {{ $frontmatter.title }} 5 | 6 | Add the flake input 7 | 8 | ```nix 9 | mnw.url = "github:Gerg-L/mnw"; 10 | ``` 11 | 12 | or `import` the base of this repo which has 13 | [flake-compat](https://github.com/edolstra/flake-compat) 14 | 15 | Then use one of the modules or `mnw.lib.wrap` 16 | 17 | ### Wrapper function 18 | 19 | The wrapper takes two arguments: 20 | - a valid instance of `pkgs` or a set of specialArgs, passed to the module 21 | - the set must contain the aforementioned `pkgs` (to be used by the 22 | wrapper)! 23 | - the set can contain extra specialArgs you might need in the module (such 24 | as functions, collections of such, npins/niv pins, etc) 25 | - a module, containing your setup 26 | 27 | ```nix 28 | let 29 | neovim = mnw.lib.wrap pkgs { 30 | # Your config 31 | }; 32 | 33 | # or, if your config is a separate file 34 | neovim = mnw.lib.wrap pkgs ./config.nix; 35 | 36 | # or, if you need extra specialArgs in your module 37 | neovim = mnw.lib.wrap { 38 | inherit inputs pkgs; 39 | myLib = self.lib; 40 | } ./config.nix; 41 | in { 42 | ... 43 | ``` 44 | 45 | > [!TIP] 46 | > `mnw.lib.wrap` uses `evalModules`, so you can use `imports`, `options`, and 47 | > `config`! 48 | 49 | Then add it to `environment.systemPackages` or `users.users..packages` or 50 | anywhere you can add a package 51 | 52 | ### Modules 53 | 54 | Import `mnw..mnw` into your config 55 | 56 | Where `` is: 57 | 58 | `nixosModules` for NixOS, 59 | 60 | `darwinModules` for nix-darwin 61 | 62 | `homeManagerModules`for home-manager 63 | 64 | Then use the `programs.mnw` options 65 | 66 | ```nix 67 | programs.mnw = { 68 | enable = true; 69 | #config options 70 | }; 71 | # or 72 | programs.mnw = ./config.nix; 73 | ``` 74 | 75 | > [!TIP] 76 | > `programs.mnw` is a submodule you can use `imports`, `options`, and `config`! 77 | 78 | and mnw will install the wrapped neovim to `environment.systemPackages` or 79 | `home.packages` 80 | 81 | Alternatively set `programs.mnw.enable = false;` and add 82 | `config.programs.mnw.finalPackage` where you want manually 83 | 84 | ### Dev mode 85 | 86 | To setup hot reloading for quicker neovim config iteration: 87 | 88 | Put your config plugin in `plugins.dev`, 89 | 90 | Then you can use the `.devMode` attribute of the created neovim package! 91 | 92 | See the examples below: 93 | 94 | ### Lua variables 95 | 96 | Currently mnw only has one lua global variable set 97 | 98 | `mnw` which is a table which contains `configDir` 99 | 100 | Which is the path to the generated config directory of mnw 101 | 102 | You can build/view this directory by building the `.configDir` of the mnw package 103 | 104 | ### Examples 105 | 106 | [Simple NixOS example](https://github.com/Gerg-L/mnw/tree/master/examples/nixos) 107 | 108 | [Standalone, easy development](https://github.com/Gerg-L/mnw/tree/master/examples/standalone) 109 | 110 | [Lazy loading with lazy.nvim](https://github.com/Gerg-L/mnw/tree/master/examples/lazy) 111 | 112 | [Lazy loading with lz.n](https://github.com/Gerg-L/mnw/tree/master/examples/lz.n) 113 | 114 | [My Neovim flake](https://github.com/Gerg-L/nvim-flake) 115 | 116 | [nvf](https://github.com/NotAShelf/nvf) 117 | 118 | [viperML](https://github.com/viperML/dotfiles/blob/master/packages/neovim) 119 | 120 | [llakala](https://github.com/llakala/meovim) 121 | 122 | [adamcstephens](https://codeberg.org/adamcstephens/dotfiles/src/branch/main/apps/neovim) 123 | 124 | Make a PR to add your config :D 125 | -------------------------------------------------------------------------------- /examples/lazy/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; 4 | mnw.url = "../../."; 5 | # If you're actually using this, change your input to this: 6 | # mnw.url = "github:Gerg-L/mnw"; 7 | }; 8 | outputs = 9 | { 10 | nixpkgs, 11 | mnw, 12 | self, 13 | ... 14 | }: 15 | { 16 | packages.x86_64-linux = 17 | let 18 | pkgs = nixpkgs.legacyPackages.x86_64-linux; 19 | in 20 | { 21 | default = mnw.lib.wrap pkgs { 22 | neovim = pkgs.neovim-unwrapped; 23 | 24 | luaFiles = [ ./init.lua ]; 25 | 26 | plugins = { 27 | start = [ 28 | pkgs.vimPlugins.lazy-nvim 29 | pkgs.vimPlugins.plenary-nvim 30 | ]; 31 | 32 | # Anything that you're lazy loading should be put here 33 | opt = [ 34 | pkgs.vimPlugins.telescope-nvim 35 | ]; 36 | 37 | dev.myconfig = { 38 | # you can use lib.fileset to reduce rebuilds here 39 | # https://noogle.dev/f/lib/fileset/toSource 40 | pure = ./.; 41 | impure = 42 | # This is a hack it should be a absolute path 43 | # here it'll only work from this directory 44 | "/' .. vim.uv.cwd()"; 45 | }; 46 | }; 47 | }; 48 | 49 | dev = self.packages.x86_64-linux.default.devMode; 50 | }; 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /examples/lazy/init.lua: -------------------------------------------------------------------------------- 1 | -- you have to set leader before loading lazy 2 | vim.keymap.set("n", " ", "", { silent = true, remap = false }) 3 | vim.g.mapleader = " " 4 | 5 | -- mnw is a global set by mnw 6 | -- so if it's set this config is being ran from nix 7 | if mnw ~= nil then 8 | -- Thank you https://nixalted.com/lazynvim-nixos.html 9 | require("lazy").setup({ 10 | dev = { 11 | path = mnw.configDir .. "/pack/mnw/opt", 12 | -- match all plugins 13 | patterns = { "" }, 14 | -- fallback to downloading plugins from git 15 | -- disable this to force only using nix plugins 16 | fallback = true, 17 | }, 18 | 19 | -- keep rtp/packpath the same 20 | performance = { 21 | reset_packpath = false, 22 | rtp = { 23 | reset = false, 24 | }, 25 | }, 26 | 27 | install = { 28 | -- install missing plugins 29 | missing = true, 30 | }, 31 | 32 | spec = { 33 | { import = "plugins" }, 34 | }, 35 | }) 36 | else 37 | -- otherwise we have to bootstrap lazy ourself 38 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 39 | if not (vim.uv or vim.loop).fs_stat(lazypath) then 40 | local lazyrepo = "https://github.com/folke/lazy.nvim.git" 41 | local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 42 | if vim.v.shell_error ~= 0 then 43 | vim.api.nvim_echo({ 44 | { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, 45 | { out, "WarningMsg" }, 46 | { "\nPress any key to exit..." }, 47 | }, true, {}) 48 | vim.fn.getchar() 49 | os.exit(1) 50 | end 51 | end 52 | vim.opt.rtp:prepend(lazypath) 53 | 54 | require("lazy").setup({ 55 | spec = { 56 | { import = "plugins" }, 57 | }, 58 | }) 59 | end 60 | -------------------------------------------------------------------------------- /examples/lazy/lua/plugins/telescope.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-telescope/telescope.nvim", 3 | cmd = "Telescope", 4 | event = "VeryLazy", 5 | opts = {}, 6 | keys = { 7 | { 8 | "tp", 9 | function() 10 | require("telescope.builtin").find_files() 11 | end, 12 | }, 13 | { 14 | "tg", 15 | function() 16 | require("telescope.builtin").live_grep() 17 | end, 18 | }, 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /examples/lz.n/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; 4 | mnw.url = "../../."; 5 | # If you're actually using this, change your input to this: 6 | # mnw.url = "github:Gerg-L/mnw"; 7 | }; 8 | outputs = 9 | { 10 | nixpkgs, 11 | mnw, 12 | self, 13 | ... 14 | }: 15 | { 16 | packages.x86_64-linux = 17 | let 18 | pkgs = nixpkgs.legacyPackages.x86_64-linux; 19 | in 20 | { 21 | default = mnw.lib.wrap pkgs { 22 | neovim = pkgs.neovim-unwrapped; 23 | 24 | # all files in the `lua/lazy` folder are now autoloaded, so no need 25 | # for an init.lua in there 26 | initLua = '' 27 | require('myconfig') 28 | require('lz.n').load('lazy') 29 | ''; 30 | plugins = { 31 | start = [ 32 | pkgs.vimPlugins.lz-n 33 | pkgs.vimPlugins.plenary-nvim 34 | ]; 35 | 36 | # Anything that you're loading lazily should be put here 37 | opt = [ 38 | pkgs.vimPlugins.telescope-nvim 39 | ]; 40 | 41 | dev.myconfig = { 42 | 43 | # you can use lib.fileset to reduce rebuilds here 44 | # https://noogle.dev/f/lib/fileset/toSource 45 | pure = ./.; 46 | impure = 47 | # This is a hack it should be a absolute path 48 | # here it'll only work from this directory 49 | "/' .. vim.uv.cwd() .. '/nvim"; 50 | }; 51 | }; 52 | }; 53 | 54 | dev = self.packages.x86_64-linux.default.devMode; 55 | }; 56 | }; 57 | } 58 | -------------------------------------------------------------------------------- /examples/lz.n/lua/lazy/telescope.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "telescope.nvim", 3 | cmd = "Telescope", 4 | 5 | after = function() 6 | require("telescope").setup() 7 | end, 8 | keys = { 9 | { 10 | "tp", 11 | function() 12 | require("telescope.builtin").find_files() 13 | end, 14 | }, 15 | { 16 | "tg", 17 | function() 18 | require("telescope.builtin").live_grep() 19 | end, 20 | }, 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /examples/lz.n/lua/myconfig/init.lua: -------------------------------------------------------------------------------- 1 | vim.keymap.set("n", " ", "", { silent = true, remap = false }) 2 | vim.g.mapleader = " " 3 | -------------------------------------------------------------------------------- /examples/nixos/configuration.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | pkgs, 4 | lib, 5 | ... 6 | }: 7 | { 8 | imports = [ inputs.mnw.nixosModules.default ]; 9 | 10 | programs.mnw = { 11 | enable = true; 12 | initLua = '' 13 | require("myconfig") 14 | ''; 15 | plugins = { 16 | start = [ 17 | pkgs.vimPlugins.oil-nvim 18 | ]; 19 | 20 | dev.myconfig = { 21 | pure = ./nvim; 22 | impure = 23 | # This is a hack it should be a absolute path 24 | # here it'll only work from this directory 25 | "/' .. vim.uv.cwd() .. '/nvim"; 26 | }; 27 | }; 28 | }; 29 | 30 | # Other configuration here 31 | 32 | # These are dummy options to allow eval 33 | nixpkgs.hostPlatform = "x86_64-linux"; 34 | boot.loader.grub.enable = false; 35 | fileSystems."/".device = "nodev"; 36 | system.stateVersion = lib.trivial.release; 37 | } 38 | -------------------------------------------------------------------------------- /examples/nixos/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; 4 | mnw.url = "../../."; 5 | # If you're actually using this, change your input to this: 6 | #mnw.url = "github:Gerg-L/mnw"; 7 | }; 8 | outputs = 9 | { nixpkgs, self, ... }@inputs: 10 | { 11 | nixosConfigurations.hostname = nixpkgs.lib.nixosSystem { 12 | modules = [ ./configuration.nix ]; 13 | specialArgs = { 14 | inherit inputs; 15 | }; 16 | }; 17 | 18 | packages.x86_64-linux = { 19 | # "nix run"-able packages 20 | neovimDev = self.nixosConfigurations.hostname.config.programs.mnw.finalPackage.devMode; 21 | neovim = self.nixosConfigurations.hostname.config.programs.mnw.finalPackage; 22 | }; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /examples/nixos/nvim/lua/myconfig/init.lua: -------------------------------------------------------------------------------- 1 | vim.keymap.set("n", " ", "", { silent = true, remap = false }) 2 | vim.g.mapleader = " " 3 | require("myconfig.oil") 4 | -------------------------------------------------------------------------------- /examples/nixos/nvim/lua/myconfig/oil.lua: -------------------------------------------------------------------------------- 1 | require("oil").setup() 2 | vim.keymap.set("n", "o", "Oil", { desc = "Open oil" }) 3 | -------------------------------------------------------------------------------- /examples/standalone/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; 4 | mnw.url = "../../."; 5 | # If you're actually using this, change your input to this: 6 | #mnw.url = "github:Gerg-L/mnw"; 7 | }; 8 | outputs = 9 | { 10 | nixpkgs, 11 | mnw, 12 | self, 13 | ... 14 | }: 15 | { 16 | packages.x86_64-linux = 17 | let 18 | pkgs = nixpkgs.legacyPackages.x86_64-linux; 19 | in 20 | { 21 | default = mnw.lib.wrap pkgs { 22 | neovim = pkgs.neovim-unwrapped; 23 | initLua = '' 24 | require('myconfig') 25 | ''; 26 | plugins = { 27 | start = [ pkgs.vimPlugins.oil-nvim ]; 28 | dev.myconfig = { 29 | pure = ./nvim; 30 | impure = 31 | # This is a hack it should be a absolute path 32 | # here it'll only work from this directory 33 | "/' .. vim.uv.cwd() .. '/nvim"; 34 | }; 35 | 36 | }; 37 | }; 38 | 39 | dev = self.packages.x86_64-linux.default.devMode; 40 | }; 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /examples/standalone/nvim/lua/myconfig/init.lua: -------------------------------------------------------------------------------- 1 | vim.keymap.set("n", " ", "", { silent = true, remap = false }) 2 | vim.g.mapleader = " " 3 | require("myconfig.oil") 4 | -------------------------------------------------------------------------------- /examples/standalone/nvim/lua/myconfig/oil.lua: -------------------------------------------------------------------------------- 1 | require("oil").setup() 2 | vim.keymap.set("n", "o", "Oil", { desc = "Open oil" }) 3 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | outputs = { self, ... }: import ./outputs.nix self; 3 | } 4 | -------------------------------------------------------------------------------- /modules/common.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | config, 5 | ... 6 | }: 7 | { 8 | options.programs.mnw = lib.mkOption { 9 | type = lib.types.submoduleWith { 10 | specialArgs = { 11 | inherit pkgs; 12 | modulesPath = toString ./.; 13 | }; 14 | modules = [ 15 | 16 | (import ./options.nix false) 17 | ]; 18 | }; 19 | }; 20 | config = lib.mkIf config.programs.mnw.enable { 21 | 22 | warnings = map (warning: "programs.mnw: ${warning}") config.programs.mnw.warnings; 23 | assertions = map (assertion: { 24 | inherit (assertion) assertion; 25 | message = "programs.mnw: ${assertion.message}"; 26 | }) config.programs.mnw.assertions; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /modules/darwin.nix: -------------------------------------------------------------------------------- 1 | self: 2 | { 3 | config, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | cfg = config.programs.mnw; 10 | in 11 | { 12 | config = { 13 | programs.mnw.finalPackage = self.lib.uncheckedWrap pkgs cfg; 14 | environment.systemPackages = lib.mkIf cfg.enable [ config.programs.mnw.finalPackage ]; 15 | }; 16 | _file = ./nixDarwin.nix; 17 | } 18 | -------------------------------------------------------------------------------- /modules/homeManager.nix: -------------------------------------------------------------------------------- 1 | self: 2 | { 3 | config, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | cfg = config.programs.mnw; 10 | in 11 | { 12 | config = { 13 | programs.mnw.finalPackage = self.lib.uncheckedWrap pkgs cfg; 14 | home.packages = lib.mkIf cfg.enable [ config.programs.mnw.finalPackage ]; 15 | }; 16 | _file = ./homeManager.nix; 17 | } 18 | -------------------------------------------------------------------------------- /modules/nixos.nix: -------------------------------------------------------------------------------- 1 | self: 2 | { 3 | config, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | cfg = config.programs.mnw; 10 | in 11 | { 12 | config = { 13 | programs.mnw.finalPackage = self.lib.uncheckedWrap pkgs cfg; 14 | environment.systemPackages = lib.mkIf cfg.enable [ config.programs.mnw.finalPackage ]; 15 | }; 16 | _file = ./nixos.nix; 17 | } 18 | -------------------------------------------------------------------------------- /modules/options.nix: -------------------------------------------------------------------------------- 1 | docs: 2 | { 3 | lib, 4 | pkgs, 5 | config, 6 | ... 7 | }: 8 | let 9 | inherit (lib) types; 10 | pluginType = 11 | if docs then 12 | pluginType' 13 | else 14 | types.oneOf [ 15 | (lib.mkOptionType { 16 | name = "path"; 17 | description = "literal path"; 18 | descriptionClass = "noun"; 19 | check = builtins.isPath; 20 | merge = lib.mergeEqualOption; 21 | }) 22 | pluginType' 23 | ]; 24 | pluginApply = 25 | x: 26 | if builtins.isPath x then 27 | { 28 | # These two are required 29 | name = "path-plugin-${builtins.substring 0 7 (builtins.hashString "md5" (toString x))}"; 30 | outPath = x; 31 | # Set everything else as if it's default 32 | src = x; 33 | python3Dependencies = _: [ ]; 34 | dependencies = [ ]; 35 | } 36 | else 37 | x; 38 | pluginType' = types.submodule ( 39 | { config, options, ... }: 40 | { 41 | freeformType = lib.types.attrsOf lib.types.anything; 42 | 43 | options = { 44 | src = lib.mkOption { 45 | type = types.pathInStore; 46 | description = "Path in store to plugin"; 47 | default = config.outPath; 48 | }; 49 | 50 | outPath = lib.mkOption { 51 | type = types.pathInStore; 52 | description = "Path in store to plugin"; 53 | default = config.src; 54 | visible = false; 55 | }; 56 | 57 | dependencies = lib.mkOption { 58 | type = types.listOf pluginType; 59 | visible = "shallow"; 60 | description = "Dependencies of plugin"; 61 | default = [ ]; 62 | }; 63 | 64 | python3Dependencies = lib.mkOption { 65 | type = types.functionTo (types.listOf types.package); 66 | description = "A function which returns a list of extra needed python3 packages"; 67 | default = _: [ ]; 68 | }; 69 | }; 70 | } 71 | ); 72 | in 73 | { 74 | imports = [ 75 | (lib.mkRemovedOptionModule [ "viAlias" ] '' 76 | Use 'aliases = ["vi"];' instead 77 | '') 78 | (lib.mkRemovedOptionModule [ "vimAlias" ] '' 79 | Use 'aliases = ["vim"];' instead 80 | '') 81 | (lib.mkRemovedOptionModule [ "devExcludedPlugins" ] '' 82 | Use 'plugins.dev..pure' instead 83 | '') 84 | (lib.mkRemovedOptionModule [ "devPluginPaths" ] '' 85 | Use 'plugins.dev..impure' instead 86 | '') 87 | (lib.mkRenamedOptionModule [ "withRuby" ] [ "providers" "ruby" "enable" ]) 88 | (lib.mkRenamedOptionModule [ "withNodeJs" ] [ "providers" "nodeJs" "enable" ]) 89 | (lib.mkRenamedOptionModule [ "withPerl" ] [ "providers" "perl" "enable" ]) 90 | (lib.mkRenamedOptionModule [ "withPython3" ] [ "providers" "python3" "enable" ]) 91 | (lib.mkRenamedOptionModule [ "extraPython3Packages" ] [ "providers" "python3" "extraPackages" ]) 92 | 93 | (pkgs.path + "/nixos/modules/misc/assertions.nix") 94 | ]; 95 | 96 | options = { 97 | enable = lib.mkEnableOption "mnw (Minimal Neovim Wrapper)"; 98 | finalPackage = lib.mkOption { 99 | type = types.package; 100 | readOnly = true; 101 | description = "The final package to be consumed by the user"; 102 | }; 103 | 104 | neovim = lib.mkOption { 105 | type = types.package; 106 | default = pkgs.neovim-unwrapped; 107 | defaultText = lib.literalExpression "pkgs.neovim-unwrapped"; 108 | description = "The neovim package to use. Must be unwrapped"; 109 | example = lib.literalExpression "inputs.neovim-nightly-overlay.packages.\${pkgs.stdenv.system}.default"; 110 | }; 111 | 112 | appName = lib.mkOption { 113 | type = types.str; 114 | default = "mnw"; 115 | description = "What to set $NVIM_APPNAME to"; 116 | example = "gerg"; 117 | }; 118 | 119 | luaFiles = lib.mkOption { 120 | type = types.listOf types.pathInStore; 121 | default = [ ]; 122 | description = "lua config files to load at startup"; 123 | example = lib.literalExpression '' 124 | [ 125 | (pkgs.writeText "init.lua" ''' 126 | print('hello world') 127 | ''') 128 | ] 129 | ''; 130 | }; 131 | 132 | initLua = lib.mkOption { 133 | type = types.lines; 134 | default = ""; 135 | description = "lua config text to load at startup"; 136 | example = '' 137 | require("myConfig") 138 | ''; 139 | }; 140 | 141 | vimlFiles = lib.mkOption { 142 | type = types.listOf types.pathInStore; 143 | default = [ ]; 144 | description = "VimL config files to load at startup"; 145 | example = lib.literalExpression '' 146 | [ 147 | (pkgs.writeText "init.vim" ''' 148 | echomsg 'hello world' 149 | ''') 150 | ] 151 | ''; 152 | }; 153 | 154 | initViml = lib.mkOption { 155 | type = types.lines; 156 | default = ""; 157 | description = "VimL config text to load at startup"; 158 | example = '' 159 | echomsg 'hello world' 160 | ''; 161 | }; 162 | 163 | aliases = lib.mkOption { 164 | type = types.listOf types.str; 165 | default = [ ]; 166 | description = "Aliases to symlink nvim to."; 167 | example = lib.literalExpression '' 168 | [ 169 | "vi" 170 | "vim" 171 | ] 172 | ''; 173 | }; 174 | 175 | extraLuaPackages = lib.mkOption { 176 | type = types.functionTo (types.listOf types.package); 177 | default = _: [ ]; 178 | defaultText = lib.literalExpression "ps: [ ]"; 179 | description = "A function which returns a list of extra needed lua packages."; 180 | example = lib.literalExpression '' 181 | ps: [ ps.jsregexp ] 182 | ''; 183 | }; 184 | 185 | plugins = 186 | let 187 | type = types.submodule { 188 | options = { 189 | start = lib.mkOption { 190 | type = types.listOf pluginType; 191 | apply = map pluginApply; 192 | visible = "shallow"; 193 | default = [ ]; 194 | description = '' 195 | Plugins to place in /start 196 | (automatically loaded) 197 | ''; 198 | example = lib.literalExpression "[ pkgs.vimPlugins.lz-n ]"; 199 | }; 200 | opt = lib.mkOption { 201 | type = types.listOf pluginType; 202 | apply = map pluginApply; 203 | visible = "shallow"; 204 | default = [ ]; 205 | description = '' 206 | Plugins to place in /opt 207 | (not automatically loaded) 208 | ''; 209 | example = lib.literalExpression "[ pkgs.vimPlugins.oil-nvim ]"; 210 | }; 211 | dev = lib.mkOption { 212 | type = types.attrsOf ( 213 | types.submodule ( 214 | { name, ... }: 215 | { 216 | options = { 217 | impure = lib.mkOption { 218 | type = types.path // { 219 | check = 220 | # a trimmed down version of 221 | # https://github.com/NixOS/nixpkgs/blob/16762245d811fdd74b417cc922223dc8eb741e8b/lib/types.nix#L696 222 | x: 223 | let 224 | # nixpkgs hashPrefix has a path check which will spit a warning 225 | hasPrefix = pref: (builtins.substring 0 (builtins.stringLength pref) (toString x)) == pref; 226 | in 227 | hasPrefix "/" || hasPrefix "~/"; 228 | }; 229 | description = '' 230 | The impure absolute paths to the nvim plugin. 231 | ''; 232 | example = lib.literalExpression "/home/user/nix-config/nvim"; 233 | }; 234 | pure = lib.mkOption { 235 | type = pluginType; 236 | 237 | visible = "shallow"; 238 | apply = 239 | x: 240 | if builtins.isPath x then 241 | { 242 | inherit name; 243 | outPath = x; 244 | # Set everything else as if it's default 245 | src = x; 246 | python3Dependencies = _: [ ]; 247 | dependencies = [ ]; 248 | } 249 | else 250 | x; 251 | description = '' 252 | The pure path to the nvim plugin. 253 | ''; 254 | example = lib.literalExpression "./nvim"; 255 | }; 256 | }; 257 | } 258 | ) 259 | ); 260 | default = { }; 261 | description = '' 262 | Plugins for use with devMode. 263 | You most likely want to put your config here. 264 | (automatically loaded) 265 | ''; 266 | example = lib.literalExpression '' 267 | { 268 | myconfig = { 269 | pure = ./nvim; 270 | impure = "/home/user/nix-config/nvim"; 271 | }; 272 | } 273 | ''; 274 | }; 275 | }; 276 | }; 277 | in 278 | 279 | lib.mkOption { 280 | # Hack for documentation until 281 | # full deprecation of plugins as a list 282 | type = 283 | if docs then 284 | type 285 | else 286 | types.oneOf [ 287 | type 288 | (types.listOf pluginType) 289 | ]; 290 | apply = 291 | x: 292 | if builtins.isList x then 293 | ( 294 | let 295 | part = builtins.partition (x: x.optional or false) x; 296 | in 297 | lib.warn 298 | '' 299 | mnw: plugins is being used as a list, please convert to the new format: 300 | plugins = { 301 | start = []; 302 | opt = []; 303 | dev = {}; 304 | } 305 | '' 306 | { 307 | start = part.wrong; 308 | opt = part.right; 309 | dev = { }; 310 | } 311 | ) 312 | else 313 | x; 314 | default = { }; 315 | description = '' 316 | neovim plugins. 317 | ''; 318 | example = lib.literalExpression '' 319 | { 320 | plugins = { 321 | # Plugins which can be reloaded without rebuilding 322 | # see dev mode in the docs 323 | dev.myconfig = { 324 | # This is the recommended way of passing your config 325 | pure = "myconfig"; 326 | impure = "/home/user/nix-config/nvim"; 327 | }; 328 | 329 | # List of plugins to load automatically 330 | start = [ 331 | # you can pass vimPlugins from nixpkgs 332 | pkgs.vimPlugins.lz-n 333 | 334 | # To pass a directory 335 | # ('plugins.dev.' is preferred for directories) 336 | { 337 | name = "plugin"; 338 | src = ./plugin; 339 | } 340 | 341 | 342 | # Custom plugin example 343 | { 344 | # "pname" and "version" 345 | # or "name" is required 346 | pname = "customPlugin"; 347 | version = "1"; 348 | 349 | name = "customPlugin-1"; 350 | 351 | src = pkgs.fetchFromGitHub { 352 | owner = ""; 353 | repo = ""; 354 | ref = ""; 355 | hash = ""; 356 | }; 357 | 358 | # Plugins can have other plugins as dependencies 359 | # this is mainly used in nixpkgs 360 | # avoid it if possible 361 | dependencies = []; 362 | } 363 | ]; 364 | 365 | # List of plugins to not load automatically 366 | # (load with packadd or a lazy loading plugin ) 367 | opt = [ 368 | pkgs.vimPlugins.oil-nvim 369 | ]; 370 | }; 371 | } 372 | ''; 373 | }; 374 | 375 | extraBinPath = lib.mkOption { 376 | type = types.listOf types.package; 377 | default = [ ]; 378 | description = "Extra packages to be put in neovim's PATH"; 379 | example = lib.literalExpression '' 380 | [ 381 | pkgs.rg 382 | pkgs.fzf 383 | ] 384 | ''; 385 | }; 386 | 387 | wrapperArgs = lib.mkOption { 388 | type = lib.types.listOf lib.types.str; 389 | default = [ ]; 390 | description = "A list of arguments to be passed to makeWrapper"; 391 | example = lib.literalExpression '' 392 | [ 393 | "--set-default" 394 | "FZF_DEFAULT_OPTS" 395 | "--layout=reverse --inline-info" 396 | ] 397 | ''; 398 | }; 399 | 400 | desktopEntry = lib.mkEnableOption "neovim's desktop entry" // { 401 | default = true; 402 | example = false; 403 | }; 404 | 405 | providers = { 406 | nodeJs = { 407 | enable = lib.mkEnableOption "and configure the Node.js provider"; 408 | package = lib.mkOption { 409 | type = types.package; 410 | default = pkgs.nodejs; 411 | defaultText = lib.literalExpression "pkgs.nodejs"; 412 | description = "The Node.js package to use."; 413 | example = lib.literalExpression "pkgs.nodejs_23"; 414 | }; 415 | neovimClientPackage = lib.mkOption { 416 | type = types.package; 417 | default = pkgs.neovim-node-client; 418 | defaultText = lib.literalExpression "pkgs.neovim-node-client"; 419 | description = "The neovim-node-client package to use."; 420 | example = lib.literalExpression "pkgs.neovim-node-client"; 421 | }; 422 | }; 423 | 424 | perl = { 425 | enable = lib.mkEnableOption "and configure the perl provider"; 426 | package = lib.mkOption { 427 | type = types.package; 428 | default = pkgs.perl; 429 | defaultText = lib.literalExpression "pkgs.perl"; 430 | description = "The perl package to use."; 431 | example = lib.literalExpression "pkgs.perl"; 432 | }; 433 | extraPackages = lib.mkOption { 434 | type = types.functionTo (types.listOf types.package); 435 | default = p: [ 436 | p.NeovimExt 437 | p.Appcpanminus 438 | ]; 439 | defaultText = lib.literalExpression '' 440 | p: [ 441 | p.NeovimExt 442 | p.Appcpanminus 443 | ] 444 | ''; 445 | description = '' 446 | Extra packages to be included in the perl environment. 447 | 448 | Note: you probably want to include NeovimExt and Appcpanminus if you change this from it's default value. 449 | ''; 450 | example = lib.literalExpression '' 451 | p: [ 452 | p.NeovimExt 453 | p.Appcpanminus 454 | ] 455 | ''; 456 | }; 457 | }; 458 | 459 | python3 = { 460 | enable = lib.mkEnableOption "and configure the python3 provider"; 461 | package = lib.mkOption { 462 | type = types.package; 463 | default = pkgs.python3; 464 | defaultText = lib.literalExpression "pkgs.python3"; 465 | description = "The python3 package to use."; 466 | example = lib.literalExpression "pkgs.python39"; 467 | }; 468 | extraPackages = lib.mkOption { 469 | type = types.functionTo (types.listOf types.package); 470 | default = p: [ p.pynvim ]; 471 | defaultText = lib.literalExpression "p: [ ppynvim ]"; 472 | description = '' 473 | Extra packages to be included in the python3 environment. 474 | 475 | Note: you probably want to include pynvim if you change this from it's default value. 476 | ''; 477 | example = lib.literalExpression '' 478 | py: [ 479 | py.pynvim 480 | py.pybtex 481 | ] 482 | ''; 483 | }; 484 | }; 485 | 486 | ruby = { 487 | enable = lib.mkEnableOption "and configure the ruby provider"; 488 | package = lib.mkOption { 489 | type = types.package; 490 | default = config.providers.ruby.env.ruby; 491 | defaultText = lib.literalExpression "programs.mnw.providers.ruby.env.ruby"; 492 | description = "The ruby package to use."; 493 | example = lib.literalExpression "pkgs.ruby"; 494 | }; 495 | env = lib.mkOption { 496 | type = types.package; 497 | default = pkgs.bundlerEnv { 498 | name = "neovim-ruby-env"; 499 | gemdir = ../ruby_provider; 500 | postBuild = '' 501 | rm $out/bin/{bundle,bundler} 502 | ''; 503 | }; 504 | defaultText = lib.literalExpression '' 505 | pkgs.bundlerEnv { 506 | name = "neovim-ruby-env"; 507 | gemdir = ../ruby_provider; 508 | postBuild = '''' 509 | rm $out/bin/{bundle,bundler} 510 | ''''; 511 | } 512 | ''; 513 | description = "The ruby bundlerEnv to use."; 514 | example = lib.literalExpression '' 515 | pkgs.bundlerEnv { 516 | name = "neovim-ruby-env"; 517 | gemdir = ../ruby_provider; 518 | } 519 | ''; 520 | }; 521 | }; 522 | }; 523 | extraBuilderArgs = lib.mkOption { 524 | type = types.attrsOf types.anything; 525 | default = { }; 526 | description = '' 527 | Extra attributes to pass to mkDerivation. 528 | ''; 529 | example = lib.literalExpression '' 530 | { 531 | doInstallCheck = true; 532 | extraInstallCheckInputs = [ pkgs.hello ]; 533 | installCheckPhase = ''' 534 | hello 535 | '''; 536 | } 537 | ''; 538 | }; 539 | }; 540 | } 541 | -------------------------------------------------------------------------------- /npins/default.nix: -------------------------------------------------------------------------------- 1 | /* 2 | This file is provided under the MIT licence: 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | */ 10 | # Generated by npins. Do not modify; will be overwritten regularly 11 | let 12 | data = builtins.fromJSON (builtins.readFile ./sources.json); 13 | inherit (data) version; 14 | 15 | # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 16 | range = 17 | first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1); 18 | 19 | # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 20 | stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); 21 | 22 | # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269 23 | stringAsChars = f: s: concatStrings (map f (stringToCharacters s)); 24 | concatStrings = builtins.concatStringsSep ""; 25 | 26 | # If the environment variable NPINS_OVERRIDE_${name} is set, then use 27 | # the path directly as opposed to the fetched source. 28 | # (Taken from Niv for compatibility) 29 | mayOverride = 30 | name: path: 31 | let 32 | envVarName = "NPINS_OVERRIDE_${saneName}"; 33 | saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name; 34 | ersatz = builtins.getEnv envVarName; 35 | in 36 | if ersatz == "" then 37 | path 38 | else 39 | # this turns the string into an actual Nix path (for both absolute and 40 | # relative paths) 41 | builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" ( 42 | if builtins.substring 0 1 ersatz == "/" then 43 | /. + ersatz 44 | else 45 | /. + builtins.getEnv "PWD" + "/${ersatz}" 46 | ); 47 | 48 | mkSource = 49 | name: spec: 50 | assert spec ? type; 51 | let 52 | path = 53 | if spec.type == "Git" then 54 | mkGitSource spec 55 | else if spec.type == "GitRelease" then 56 | mkGitSource spec 57 | else if spec.type == "PyPi" then 58 | mkPyPiSource spec 59 | else if spec.type == "Channel" then 60 | mkChannelSource spec 61 | else if spec.type == "Tarball" then 62 | mkTarballSource spec 63 | else 64 | builtins.throw "Unknown source type ${spec.type}"; 65 | in 66 | spec // { outPath = mayOverride name path; }; 67 | 68 | mkGitSource = 69 | { 70 | repository, 71 | revision, 72 | url ? null, 73 | submodules, 74 | hash, 75 | ... 76 | }: 77 | assert repository ? type; 78 | # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository 79 | # In the latter case, there we will always be an url to the tarball 80 | if url != null && !submodules then 81 | builtins.fetchTarball { 82 | inherit url; 83 | sha256 = hash; # FIXME: check nix version & use SRI hashes 84 | } 85 | else 86 | let 87 | url = 88 | if repository.type == "Git" then 89 | repository.url 90 | else if repository.type == "GitHub" then 91 | "https://github.com/${repository.owner}/${repository.repo}.git" 92 | else if repository.type == "GitLab" then 93 | "${repository.server}/${repository.repo_path}.git" 94 | else 95 | throw "Unrecognized repository type ${repository.type}"; 96 | urlToName = 97 | url: rev: 98 | let 99 | matched = builtins.match "^.*/([^/]*)(\\.git)?$" url; 100 | 101 | short = builtins.substring 0 7 rev; 102 | 103 | appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; 104 | in 105 | "${if matched == null then "source" else builtins.head matched}${appendShort}"; 106 | name = urlToName url revision; 107 | in 108 | builtins.fetchGit { 109 | rev = revision; 110 | inherit name; 111 | # hash = hash; 112 | inherit url submodules; 113 | }; 114 | 115 | mkPyPiSource = 116 | { url, hash, ... }: 117 | builtins.fetchurl { 118 | inherit url; 119 | sha256 = hash; 120 | }; 121 | 122 | mkChannelSource = 123 | { url, hash, ... }: 124 | builtins.fetchTarball { 125 | inherit url; 126 | sha256 = hash; 127 | }; 128 | 129 | mkTarballSource = 130 | { 131 | url, 132 | locked_url ? url, 133 | hash, 134 | ... 135 | }: 136 | builtins.fetchTarball { 137 | url = locked_url; 138 | sha256 = hash; 139 | }; 140 | in 141 | if version == 5 then 142 | builtins.mapAttrs mkSource data.pins 143 | else 144 | throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`" 145 | -------------------------------------------------------------------------------- /npins/sources.json: -------------------------------------------------------------------------------- 1 | { 2 | "pins": { 3 | "nixpkgs": { 4 | "type": "Channel", 5 | "name": "nixpkgs-unstable", 6 | "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.05pre800239.b1bebd0fe266/nixexprs.tar.xz", 7 | "hash": "0vnfj9d7kzk673i7s1vnkbx513a4gh5mfcd8fag2c7wi6hz471n6" 8 | } 9 | }, 10 | "version": 5 11 | } 12 | -------------------------------------------------------------------------------- /npinsToPlugins.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | fetchurl, 4 | fetchgit, 5 | fetchzip, 6 | }: 7 | pathToNpins: 8 | lib.mapAttrsToList 9 | ( 10 | name: spec: 11 | assert spec ? type; 12 | let 13 | getUrl = 14 | { 15 | url, 16 | hash, 17 | ... 18 | }: 19 | fetchurl { 20 | inherit url; 21 | sha256 = hash; 22 | }; 23 | getZip = 24 | { 25 | url, 26 | hash, 27 | ... 28 | }: 29 | fetchzip { 30 | inherit url; 31 | sha256 = hash; 32 | extension = "tar"; 33 | }; 34 | mkGitSource = 35 | { 36 | repository, 37 | revision, 38 | url ? null, 39 | submodules, 40 | hash, 41 | ... 42 | }@attrs: 43 | assert repository ? type; 44 | if url != null && !submodules then 45 | getZip attrs 46 | else 47 | assert repository.type == "Git"; 48 | let 49 | url' = 50 | if repository.type == "Git" then 51 | repository.url 52 | else if repository.type == "GitHub" then 53 | "https://github.com/${repository.owner}/${repository.repo}.git" 54 | else if repository.type == "GitLab" then 55 | "${repository.server}/${repository.repo_path}.git" 56 | else 57 | throw "Unrecognized repository type ${repository.type}"; 58 | 59 | name = 60 | let 61 | matched = builtins.match "^.*/([^/]*)(\\.git)?$" url'; 62 | short = builtins.substring 0 7 revision; 63 | appendShort = if (builtins.match "[a-f0-9]*" revision) != null then "-${short}" else ""; 64 | in 65 | "${if matched == null then "source" else builtins.head matched}${appendShort}"; 66 | in 67 | fetchgit { 68 | inherit name; 69 | url = url'; 70 | rev = revision; 71 | sha256 = hash; 72 | fetchSubmodules = submodules; 73 | }; 74 | 75 | mayOverride = 76 | path: 77 | let 78 | envVarName = "NPINS_OVERRIDE_${saneName}"; 79 | saneName = lib.stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name; 80 | ersatz = builtins.getEnv envVarName; 81 | in 82 | if ersatz == "" then 83 | path 84 | else 85 | # this turns the string into an actual Nix path (for both absolute and 86 | # relative paths) 87 | builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" ( 88 | if builtins.substring 0 1 ersatz == "/" then 89 | /. + ersatz 90 | else 91 | /. + builtins.getEnv "PWD" + "/${ersatz}" 92 | ); 93 | func = 94 | { 95 | Git = mkGitSource; 96 | GitRelease = mkGitSource; 97 | PyPi = getUrl; 98 | Channel = getZip; 99 | Tarball = getUrl; 100 | } 101 | .${spec.type} or (builtins.throw "Unknown source type ${spec.type}"); 102 | version = if spec ? revision then builtins.substring 0 8 spec.revision else "0"; 103 | in 104 | spec 105 | // { 106 | name = "${name}-${version}"; 107 | pname = name; 108 | inherit version; 109 | outPath = (mayOverride (func spec)).overrideAttrs { 110 | pname = name; 111 | name = "${name}-${version}"; 112 | inherit version; 113 | }; 114 | } 115 | ) 116 | ( 117 | let 118 | json = lib.importJSON pathToNpins; 119 | in 120 | assert lib.assertMsg (json.version == 5) '' 121 | Your npins version does not match that of mnw.lib.npinsToPlugins. 122 | Please run npins upgrade, if that does not work file a issue in the mnw repo 123 | ''; 124 | json.pins 125 | ) 126 | -------------------------------------------------------------------------------- /outputs.nix: -------------------------------------------------------------------------------- 1 | self: 2 | { 3 | lib = { 4 | npinsToPlugins = pkgs: pkgs.callPackage ./npinsToPlugins.nix { }; 5 | uncheckedWrap = pkgs: pkgs.callPackage ./wrapper.nix { }; 6 | wrap = 7 | args: 8 | let 9 | argsIsPkgs = args._type or null == "pkgs"; 10 | pkgs = 11 | if argsIsPkgs then 12 | args 13 | else 14 | assert args.pkgs._type == "pkgs"; 15 | args.pkgs; 16 | in 17 | module: 18 | let 19 | inherit (pkgs) lib; 20 | evaled = lib.evalModules { 21 | specialArgs = (if argsIsPkgs then { pkgs = args; } else args) // { 22 | modulesPath = toString ./modules; 23 | }; 24 | modules = [ 25 | (import ./modules/options.nix false) 26 | module 27 | ]; 28 | }; 29 | 30 | failedAssertions = map (x: x.message) (builtins.filter (x: !x.assertion) evaled.config.assertions); 31 | baseSystemAssertWarn = 32 | if failedAssertions != [ ] then 33 | throw "\nFailed assertions:\n${lib.concatMapStrings (x: "- ${x}") failedAssertions}" 34 | else 35 | lib.showWarnings evaled.config.warnings; 36 | in 37 | self.lib.uncheckedWrap pkgs (baseSystemAssertWarn evaled.config); 38 | }; 39 | } 40 | // (builtins.listToAttrs ( 41 | map 42 | (x: { 43 | name = "${x}Modules"; 44 | value = { 45 | default = self."${x}Modules".mnw; 46 | mnw = { 47 | imports = [ 48 | (import ./modules/${x}.nix self) 49 | ./modules/common.nix 50 | ]; 51 | }; 52 | }; 53 | }) 54 | [ 55 | "nixos" 56 | "homeManager" 57 | "darwin" 58 | ] 59 | )) 60 | // ( 61 | let 62 | lib = import (sources.nixpkgs + /lib); 63 | forEachSystems = lib.genAttrs [ 64 | "x86_64-linux" 65 | "x86_64-darwin" 66 | "aarch64-linux" 67 | "aarch64-darwin" 68 | ]; 69 | sources = import ./npins; 70 | in 71 | { 72 | packages = forEachSystems ( 73 | system: 74 | let 75 | pkgs = import sources.nixpkgs { inherit system; }; 76 | in 77 | pkgs.nixosOptionsDoc { 78 | inherit 79 | ( 80 | (lib.evalModules { 81 | specialArgs = { inherit pkgs; }; 82 | modules = [ 83 | (import ./modules/options.nix true) 84 | ]; 85 | }) 86 | ) 87 | options 88 | ; 89 | } 90 | // { 91 | docs = pkgs.callPackage ./docs/package.nix { 92 | inherit (self.packages.${system}) optionsJSON; 93 | }; 94 | } 95 | ); 96 | 97 | devShells = forEachSystems ( 98 | system: 99 | let 100 | pkgs = import sources.nixpkgs { inherit system; }; 101 | in 102 | { 103 | default = pkgs.mkShellNoCC { 104 | # use npm run dev 105 | packages = [ 106 | pkgs.nodejs 107 | ]; 108 | env.MNW_OPTIONS_JSON = self.packages.${system}.optionsJSON; 109 | }; 110 | } 111 | ); 112 | } 113 | ) 114 | -------------------------------------------------------------------------------- /ruby_provider/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'neovim' 4 | gem 'logger' 5 | -------------------------------------------------------------------------------- /ruby_provider/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | logger (1.7.0) 5 | msgpack (1.8.0) 6 | multi_json (1.15.0) 7 | neovim (0.10.0) 8 | msgpack (~> 1.1) 9 | multi_json (~> 1.0) 10 | 11 | PLATFORMS 12 | ruby 13 | x86_64-linux 14 | 15 | DEPENDENCIES 16 | logger 17 | neovim 18 | 19 | BUNDLED WITH 20 | 2.6.2 21 | -------------------------------------------------------------------------------- /ruby_provider/gemset.nix: -------------------------------------------------------------------------------- 1 | { 2 | logger = { 3 | groups = [ "default" ]; 4 | platforms = [ ]; 5 | source = { 6 | remotes = [ "https://rubygems.org" ]; 7 | sha256 = "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr"; 8 | type = "gem"; 9 | }; 10 | version = "1.7.0"; 11 | }; 12 | msgpack = { 13 | groups = [ "default" ]; 14 | platforms = [ ]; 15 | source = { 16 | remotes = [ "https://rubygems.org" ]; 17 | sha256 = "0cnpnbn2yivj9gxkh8mjklbgnpx6nf7b8j2hky01dl0040hy0k76"; 18 | type = "gem"; 19 | }; 20 | version = "1.8.0"; 21 | }; 22 | multi_json = { 23 | groups = [ "default" ]; 24 | platforms = [ ]; 25 | source = { 26 | remotes = [ "https://rubygems.org" ]; 27 | sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z"; 28 | type = "gem"; 29 | }; 30 | version = "1.15.0"; 31 | }; 32 | neovim = { 33 | dependencies = [ 34 | "msgpack" 35 | "multi_json" 36 | ]; 37 | groups = [ "default" ]; 38 | platforms = [ ]; 39 | source = { 40 | remotes = [ "https://rubygems.org" ]; 41 | sha256 = "0gl34rriwwmj6p1s6ms0b311wmqaqiyc510svq31283jk0kp0qcd"; 42 | type = "gem"; 43 | }; 44 | version = "0.10.0"; 45 | }; 46 | } 47 | -------------------------------------------------------------------------------- /ruby_provider/update.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs ? import { }, 3 | }: 4 | pkgs.mkShellNoCC { 5 | 6 | packages = [ 7 | pkgs.bundler 8 | pkgs.bundix 9 | pkgs.nixfmt-rfc-style 10 | ]; 11 | 12 | shellHook = '' 13 | rm -f gemset.nix Gemfile.lock 14 | 15 | bundler lock --update 16 | bundix 17 | nixfmt gemset.nix 18 | 19 | exit 0 20 | ''; 21 | } 22 | -------------------------------------------------------------------------------- /wrapper.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | makeShellWrapper, 4 | buildEnv, 5 | writeText, 6 | lndir, 7 | stdenvNoCC, 8 | envsubst, 9 | callPackage, 10 | }@callPackageArgs: 11 | lib.makeOverridable ( 12 | { 13 | neovim, 14 | extraLuaPackages, 15 | aliases, 16 | extraBinPath, 17 | wrapperArgs, 18 | vimlFiles, 19 | luaFiles, 20 | initViml, 21 | initLua, 22 | appName, 23 | desktopEntry, 24 | providers, 25 | dev ? false, 26 | plugins, 27 | extraBuilderArgs, 28 | ... 29 | }@mnwWrapperArgs: 30 | let 31 | 32 | python3 = providers.python3.package; 33 | 34 | devPlugins = builtins.attrValues ( 35 | builtins.mapAttrs (_: v: builtins.getAttr (if dev then "impure" else "pure") v) plugins.dev 36 | ); 37 | 38 | getName = 39 | x: 40 | if x.passthru.vimPlugin or false then 41 | lib.removePrefix "vimplugin-" (lib.getName x) 42 | else 43 | lib.getName x; 44 | 45 | # ensure there's only one plugin with each name 46 | # ideally this would be fixed in the module system 47 | foldPlugins = 48 | p: 49 | builtins.attrValues ( 50 | builtins.foldl' ( 51 | a: b: 52 | let 53 | expr = { 54 | "${getName b}" = b; 55 | }; 56 | in 57 | # Don't override explicit plugins with dependencies 58 | if b.dep or false then expr // a else a // expr 59 | ) { } p 60 | ); 61 | 62 | optPlugins = foldPlugins plugins.opt; 63 | 64 | startPlugins = 65 | let 66 | /* 67 | Stolen from viperML 68 | about the same speed as using concatMap but removes a let in 69 | */ 70 | findDeps = 71 | dep: 72 | builtins.foldl' ( 73 | x: y: 74 | builtins.concatLists [ 75 | x 76 | [ 77 | (y // { inherit dep; }) 78 | ] 79 | (findDeps true y.dependencies) 80 | ] 81 | ) [ ]; 82 | in 83 | /* 84 | optional plugin's dependencies are loaded non-optionally 85 | only nixpkgs plugins have dependencies though 86 | so it should be okay 87 | */ 88 | foldPlugins ( 89 | lib.optionals (!dev) devPlugins 90 | ++ (lib.subtractLists optPlugins ((findDeps false plugins.start) ++ (findDeps false optPlugins))) 91 | ); 92 | 93 | allPython3Dependencies = 94 | ps: 95 | lib.pipe startPlugins [ 96 | (lib.concatMap (plugin: plugin.python3Dependencies ps)) 97 | lib.unique 98 | ]; 99 | generatedInitLua = 100 | let 101 | luaEnv = neovim.lua.withPackages extraLuaPackages; 102 | inherit (neovim.lua.pkgs) luaLib; 103 | 104 | sourceLua = lib.concatMapStringsSep "\n" (x: "dofile('${x}')") ( 105 | (lib.optional (initLua != "") (writeText "init.lua" initLua)) ++ luaFiles 106 | ); 107 | sourceVimL = lib.concatMapStringsSep "\n" (x: "vim.cmd('source ${x}')") ( 108 | (lib.optional (initViml != "") (writeText "init.vim" initViml)) ++ vimlFiles 109 | ); 110 | in 111 | 112 | writeText "init.lua" # lua 113 | '' 114 | mnw = { configDir = "$out" } 115 | vim.env.PATH = vim.env.PATH .. ":${lib.makeBinPath ([ providersEnv ] ++ extraBinPath)}" 116 | package.path = "${luaLib.genLuaPathAbsStr luaEnv};$LUA_PATH" .. package.path 117 | package.cpath = "${luaLib.genLuaCPathAbsStr luaEnv};$LUA_CPATH" .. package.cpath 118 | ${sourceLua} 119 | ${sourceVimL} 120 | ''; 121 | 122 | configDir = stdenvNoCC.mkDerivation { 123 | name = "mnw-configDir"; 124 | nativeBuildInputs = [ envsubst ]; 125 | __structuredAttrs = true; 126 | 127 | sourcesArray = startPlugins ++ optPlugins; 128 | pathsArray = 129 | let 130 | fn = name: list: map (x: "pack/mnw/${name}/" + getName x) list; 131 | 132 | in 133 | (fn "start" startPlugins) ++ (fn "opt" optPlugins); 134 | 135 | buildCommand = # bash 136 | '' 137 | mkdir -p "$out/nix-support" 138 | for i in $(find -L "$out" -name 'propagated-build-inputs'); do 139 | cat "$i" >> "$out/nix-support/propagated-build-inputs" 140 | done 141 | source '${neovim.lua}/nix-support/utils.sh' 142 | if declare -f -F "_addToLuaPath" > /dev/null; then 143 | _addToLuaPath "$out" 144 | fi 145 | 146 | if [[ "$LUA_PATH" == ";;" ]]; then 147 | export LUA_PATH="" 148 | else 149 | export LUA_PATH="''${LUA_PATH:-}" 150 | fi 151 | if [[ "$LUA_CPATH" == ";;" ]]; then 152 | export LUA_CPATH="" 153 | else 154 | export LUA_CPATH="''${LUA_CPATH:-}" 155 | fi 156 | envsubst < '${generatedInitLua}' > "$out/init.lua" 157 | for ((i = 0; i < "''${#pathsArray[@]}"; i++ )) 158 | do 159 | path="''${pathsArray["$i"]}" 160 | source="''${sourcesArray["$i"]}" 161 | if [[ -e "$source/doc" && ! -e "$source/doc/tags" ]]; then 162 | mkdir -p "$out/$path/doc" 163 | ln -ns "$source/doc"* -t "$out/$path/doc" 164 | fi 165 | done 166 | 167 | ${lib.getExe neovim} --headless -n -u NONE -i NONE \ 168 | -c "set packpath=$out" \ 169 | -c "packloadall" \ 170 | -c "helptags ALL" \ 171 | "+quit!" 172 | 173 | mkdir -p "$out/parser" 174 | 175 | shopt -s extglob 176 | for ((i = 0; i < "''${#pathsArray[@]}"; i++ )) 177 | do 178 | path="''${pathsArray["$i"]}" 179 | source="''${sourcesArray["$i"]}" 180 | 181 | mkdir -p "$out/$path" 182 | 183 | tolink=("$source/"!(doc|parser)) 184 | if (( ''${#tolink} )); then 185 | ln -ns "''${tolink[@]}" -t "$out/$path" 186 | fi 187 | 188 | if [[ -e "$source/parser" && -n "$(ls -A "$source/parser")" ]]; then 189 | ln -nsf "$source/parser/"* -t "$out/parser" 190 | fi 191 | 192 | if [[ -e "$source/doc" && ! -e "$out/$path/doc" ]]; then 193 | ln -ns "$source/doc" -t "$out/$path" 194 | fi 195 | done 196 | shopt -u extglob 197 | 198 | for path in "$out/pack/mnw/"*/* 199 | do 200 | if [[ -d "$path" && -z "$(ls -A $path)" ]]; then 201 | rmdir $path 202 | fi 203 | done 204 | 205 | ${lib.optionalString (allPython3Dependencies python3.pkgs != [ ]) '' 206 | mkdir -p "$out/pack/mnw/start/__python3_dependencies" 207 | ln -s '${python3.withPackages allPython3Dependencies}/${python3.sitePackages}' "$out/pack/mnw/start/__python3_dependencies/python3" 208 | ''} 209 | ''; 210 | } 211 | 212 | ; 213 | 214 | providersEnv = 215 | let 216 | pythonEnv = python3.withPackages ( 217 | ps: providers.python3.extraPackages ps ++ allPython3Dependencies ps 218 | ); 219 | 220 | perlEnv = providers.perl.package.withPackages providers.perl.extraPackages; 221 | in 222 | buildEnv { 223 | name = "neovim-providers"; 224 | 225 | paths = 226 | lib.optionals providers.nodeJs.enable [ 227 | providers.nodeJs.package 228 | providers.nodeJs.neovimClientPackage 229 | ] 230 | ++ lib.optionals providers.ruby.enable [ 231 | providers.ruby.env 232 | providers.ruby.package 233 | ]; 234 | 235 | nativeBuildInputs = [ makeShellWrapper ]; 236 | 237 | postBuild = '' 238 | ${lib.optionalString providers.python3.enable '' 239 | makeWrapper '${lib.getExe pythonEnv}' "$out/bin/neovim-python3-host" \ 240 | --unset PYTHONPATH \ 241 | --unset PYTHONSAFEPATH 242 | ''} 243 | 244 | ${lib.optionalString providers.perl.enable ''ln -s '${lib.getExe perlEnv}' "$out/bin/neovim-perl-host"''} 245 | ''; 246 | }; 247 | 248 | wrapperArgsStr = lib.escapeShellArgs ( 249 | [ 250 | "--add-flags" 251 | ( 252 | "--cmd \"lua " 253 | + lib.concatStringsSep ";" ( 254 | [ 255 | "vim.opt.packpath:prepend('${configDir}')" 256 | "vim.opt.runtimepath:prepend('${configDir}')" 257 | ] 258 | ++ (lib.optionals (dev && devPlugins != [ ]) [ 259 | "vim.opt.runtimepath:prepend('${lib.concatStringsSep "," devPlugins}')" 260 | "vim.opt.runtimepath:append('${lib.concatMapStringsSep "," (p: "${p}/after") devPlugins}')" 261 | ]) 262 | ++ (lib.mapAttrsToList 263 | ( 264 | prog: withProg: 265 | if withProg then 266 | "vim.g.${prog}_host_prog='${providersEnv}/bin/neovim-${prog}-host'" 267 | else 268 | "vim.g.loaded_${prog}_provider=0" 269 | ) 270 | { 271 | node = providers.nodeJs.enable; 272 | python = false; 273 | python3 = providers.python3.enable; 274 | ruby = providers.ruby.enable; 275 | perl = providers.perl.enable; 276 | } 277 | ) 278 | ) 279 | + "\"" 280 | ) 281 | "--set" 282 | "NVIM_APPNAME" 283 | appName 284 | 285 | "--set" 286 | "VIMINIT" 287 | "source ${configDir}/init.lua" 288 | ] 289 | ++ wrapperArgs 290 | ); 291 | 292 | in 293 | 294 | stdenvNoCC.mkDerivation ( 295 | { 296 | # overrideable arguments 297 | pname = "mnw"; 298 | version = lib.getVersion neovim; 299 | 300 | dontUnpack = true; 301 | strictDeps = true; 302 | 303 | # Massively reduces build times 304 | dontFixup = true; 305 | } 306 | // extraBuilderArgs 307 | // { 308 | 309 | # non-overrideable or concatenated arguments 310 | nativeBuildInputs = extraBuilderArgs.nativeBuildInputs or [ ] ++ [ 311 | makeShellWrapper 312 | lndir 313 | ]; 314 | 315 | installPhase = '' 316 | runHook preInstall 317 | 318 | # symlinkJoin 319 | mkdir -p "$out" 320 | lndir -silent '${neovim}' "$out" 321 | 322 | wrapProgramShell "$out/bin/nvim" ${wrapperArgsStr} 323 | 324 | ${lib.concatMapStringsSep "\n" (x: ''ln -s "$out/bin/nvim" "$out/bin/"'${x}' '') aliases} 325 | 326 | ${lib.optionalString (!desktopEntry) ''rm -rf "$out/share/applications"''} 327 | 328 | runHook postInstall 329 | ''; 330 | 331 | # For debugging 332 | passthru = 333 | { 334 | inherit configDir; 335 | config = mnwWrapperArgs; 336 | } 337 | // lib.optionalAttrs (!dev) { 338 | devMode = (callPackage ./wrapper.nix callPackageArgs) (mnwWrapperArgs // { dev = true; }); 339 | } 340 | // extraBuilderArgs.passthru or { }; 341 | 342 | meta = { 343 | inherit (neovim.meta) 344 | mainProgram 345 | ; 346 | # prefer wrapper over the package 347 | priority = (neovim.meta.priority or 0) - 2; 348 | } // extraBuilderArgs.meta or { }; 349 | } 350 | ) 351 | ) 352 | --------------------------------------------------------------------------------