mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-11-03 20:22:21 +00:00 
			
		
		
		
	Deploy PR #921 preview
This commit is contained in:
		
					parent
					
						
							
								376b344398
							
						
					
				
			
			
				commit
				
					
						c62c68fdc4
					
				
			
		
					 12 changed files with 53313 additions and 0 deletions
				
			
		
							
								
								
									
										29
									
								
								docs-preview-921/highlightjs/LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								docs-preview-921/highlightjs/LICENSE
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					BSD 3-Clause License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2006, Ivan Sagalaev.
 | 
				
			||||||
 | 
					All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Redistributions of source code must retain the above copyright notice, this
 | 
				
			||||||
 | 
					  list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Redistributions in binary form must reproduce the above copyright notice,
 | 
				
			||||||
 | 
					  this list of conditions and the following disclaimer in the documentation
 | 
				
			||||||
 | 
					  and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Neither the name of the copyright holder nor the names of its
 | 
				
			||||||
 | 
					  contributors may be used to endorse or promote products derived from
 | 
				
			||||||
 | 
					  this software without specific prior written permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
				
			||||||
 | 
					AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
				
			||||||
 | 
					DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
				
			||||||
 | 
					FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
				
			||||||
 | 
					SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
				
			||||||
 | 
					CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
				
			||||||
 | 
					OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
				
			||||||
 | 
					OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
							
								
								
									
										345
									
								
								docs-preview-921/highlightjs/highlight.pack.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										345
									
								
								docs-preview-921/highlightjs/highlight.pack.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,345 @@
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					  Highlight.js v11.9.0 (git: b7ec4bfafc)
 | 
				
			||||||
 | 
					  (c) 2006-2023 undefined and other contributors
 | 
				
			||||||
 | 
					  License: BSD-3-Clause
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					var hljs=function(){"use strict";function e(t){
 | 
				
			||||||
 | 
					return t instanceof Map?t.clear=t.delete=t.set=()=>{
 | 
				
			||||||
 | 
					throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
 | 
				
			||||||
 | 
					throw Error("set is read-only")
 | 
				
			||||||
 | 
					}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
 | 
				
			||||||
 | 
					const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
 | 
				
			||||||
 | 
					})),t}class t{constructor(e){
 | 
				
			||||||
 | 
					void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
 | 
				
			||||||
 | 
					ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
 | 
				
			||||||
 | 
					return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")
 | 
				
			||||||
 | 
					}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
 | 
				
			||||||
 | 
					;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
 | 
				
			||||||
 | 
					;class o{constructor(e,t){
 | 
				
			||||||
 | 
					this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
 | 
				
			||||||
 | 
					this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
 | 
				
			||||||
 | 
					if(e.startsWith("language:"))return e.replace("language:","language-")
 | 
				
			||||||
 | 
					;if(e.includes(".")){const n=e.split(".")
 | 
				
			||||||
 | 
					;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
 | 
				
			||||||
 | 
					}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
 | 
				
			||||||
 | 
					closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
 | 
				
			||||||
 | 
					this.buffer+=`<span class="${e}">`}}const r=(e={})=>{const t={children:[]}
 | 
				
			||||||
 | 
					;return Object.assign(t,e),t};class a{constructor(){
 | 
				
			||||||
 | 
					this.rootNode=r(),this.stack=[this.rootNode]}get top(){
 | 
				
			||||||
 | 
					return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
 | 
				
			||||||
 | 
					this.top.children.push(e)}openNode(e){const t=r({scope:e})
 | 
				
			||||||
 | 
					;this.add(t),this.stack.push(t)}closeNode(){
 | 
				
			||||||
 | 
					if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
 | 
				
			||||||
 | 
					for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
 | 
				
			||||||
 | 
					walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
 | 
				
			||||||
 | 
					return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
 | 
				
			||||||
 | 
					t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
 | 
				
			||||||
 | 
					"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
 | 
				
			||||||
 | 
					a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
 | 
				
			||||||
 | 
					addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
 | 
				
			||||||
 | 
					this.closeNode()}__addSublanguage(e,t){const n=e.root
 | 
				
			||||||
 | 
					;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
 | 
				
			||||||
 | 
					return new o(this,this.options).value()}finalize(){
 | 
				
			||||||
 | 
					return this.closeAllNodes(),!0}}function l(e){
 | 
				
			||||||
 | 
					return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
 | 
				
			||||||
 | 
					function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
 | 
				
			||||||
 | 
					function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
 | 
				
			||||||
 | 
					const t=e[e.length-1]
 | 
				
			||||||
 | 
					;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
 | 
				
			||||||
 | 
					})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
 | 
				
			||||||
 | 
					function p(e){return RegExp(e.toString()+"|").exec("").length-1}
 | 
				
			||||||
 | 
					const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
 | 
				
			||||||
 | 
					;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
 | 
				
			||||||
 | 
					;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
 | 
				
			||||||
 | 
					s+=i.substring(0,e.index),
 | 
				
			||||||
 | 
					i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
 | 
				
			||||||
 | 
					"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
 | 
				
			||||||
 | 
					const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={
 | 
				
			||||||
 | 
					begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'",
 | 
				
			||||||
 | 
					illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
 | 
				
			||||||
 | 
					contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
 | 
				
			||||||
 | 
					contains:[]},n);s.contains.push({scope:"doctag",
 | 
				
			||||||
 | 
					begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
 | 
				
			||||||
 | 
					end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
 | 
				
			||||||
 | 
					;const o=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
 | 
				
			||||||
 | 
					;return s.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
 | 
				
			||||||
 | 
					},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({
 | 
				
			||||||
 | 
					__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
 | 
				
			||||||
 | 
					scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N,
 | 
				
			||||||
 | 
					C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
 | 
				
			||||||
 | 
					begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{
 | 
				
			||||||
 | 
					"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
 | 
				
			||||||
 | 
					t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
 | 
				
			||||||
 | 
					MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
 | 
				
			||||||
 | 
					NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w,
 | 
				
			||||||
 | 
					PHRASAL_WORDS_MODE:{
 | 
				
			||||||
 | 
					begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
 | 
				
			||||||
 | 
					},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
 | 
				
			||||||
 | 
					end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
 | 
				
			||||||
 | 
					RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
 | 
				
			||||||
 | 
					SHEBANG:(e={})=>{const t=/^#![ ]*\//
 | 
				
			||||||
 | 
					;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
 | 
				
			||||||
 | 
					end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
 | 
				
			||||||
 | 
					TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
 | 
				
			||||||
 | 
					UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){
 | 
				
			||||||
 | 
					"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
 | 
				
			||||||
 | 
					void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
 | 
				
			||||||
 | 
					t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
 | 
				
			||||||
 | 
					e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
 | 
				
			||||||
 | 
					void 0===e.relevance&&(e.relevance=0))}function L(e,t){
 | 
				
			||||||
 | 
					Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
 | 
				
			||||||
 | 
					if(e.match){
 | 
				
			||||||
 | 
					if(e.begin||e.end)throw Error("begin & end are not supported with match")
 | 
				
			||||||
 | 
					;e.begin=e.match,delete e.match}}function P(e,t){
 | 
				
			||||||
 | 
					void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
 | 
				
			||||||
 | 
					;if(e.starts)throw Error("beforeMatch cannot be used with starts")
 | 
				
			||||||
 | 
					;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
 | 
				
			||||||
 | 
					})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
 | 
				
			||||||
 | 
					relevance:0,contains:[Object.assign(n,{endsParent:!0})]
 | 
				
			||||||
 | 
					},e.relevance=0,delete n.beforeMatch
 | 
				
			||||||
 | 
					},H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword"
 | 
				
			||||||
 | 
					;function $(e,t,n=C){const i=Object.create(null)
 | 
				
			||||||
 | 
					;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
 | 
				
			||||||
 | 
					Object.assign(i,$(e[n],t,n))})),i;function s(e,n){
 | 
				
			||||||
 | 
					t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
 | 
				
			||||||
 | 
					;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
 | 
				
			||||||
 | 
					return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{
 | 
				
			||||||
 | 
					console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{
 | 
				
			||||||
 | 
					z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
 | 
				
			||||||
 | 
					},K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],o={},r={}
 | 
				
			||||||
 | 
					;for(let e=1;e<=t.length;e++)r[e+i]=s[e],o[e+i]=!0,i+=p(t[e-1])
 | 
				
			||||||
 | 
					;e[n]=r,e[n]._emit=o,e[n]._multi=!0}function Z(e){(e=>{
 | 
				
			||||||
 | 
					e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
 | 
				
			||||||
 | 
					delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
 | 
				
			||||||
 | 
					_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
 | 
				
			||||||
 | 
					}),(e=>{if(Array.isArray(e.begin)){
 | 
				
			||||||
 | 
					if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
 | 
				
			||||||
 | 
					K
 | 
				
			||||||
 | 
					;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"),
 | 
				
			||||||
 | 
					K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
 | 
				
			||||||
 | 
					if(Array.isArray(e.end)){
 | 
				
			||||||
 | 
					if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
 | 
				
			||||||
 | 
					K
 | 
				
			||||||
 | 
					;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"),
 | 
				
			||||||
 | 
					K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){
 | 
				
			||||||
 | 
					function t(t,n){
 | 
				
			||||||
 | 
					return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
 | 
				
			||||||
 | 
					}class n{constructor(){
 | 
				
			||||||
 | 
					this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
 | 
				
			||||||
 | 
					addRule(e,t){
 | 
				
			||||||
 | 
					t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
 | 
				
			||||||
 | 
					this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
 | 
				
			||||||
 | 
					;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
 | 
				
			||||||
 | 
					}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
 | 
				
			||||||
 | 
					;const t=this.matcherRe.exec(e);if(!t)return null
 | 
				
			||||||
 | 
					;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
 | 
				
			||||||
 | 
					;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
 | 
				
			||||||
 | 
					this.rules=[],this.multiRegexes=[],
 | 
				
			||||||
 | 
					this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
 | 
				
			||||||
 | 
					if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
 | 
				
			||||||
 | 
					;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
 | 
				
			||||||
 | 
					t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
 | 
				
			||||||
 | 
					return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
 | 
				
			||||||
 | 
					this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
 | 
				
			||||||
 | 
					const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
 | 
				
			||||||
 | 
					;let n=t.exec(e)
 | 
				
			||||||
 | 
					;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
 | 
				
			||||||
 | 
					const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
 | 
				
			||||||
 | 
					return n&&(this.regexIndex+=n.position+1,
 | 
				
			||||||
 | 
					this.regexIndex===this.count&&this.considerAll()),n}}
 | 
				
			||||||
 | 
					if(e.compilerExtensions||(e.compilerExtensions=[]),
 | 
				
			||||||
 | 
					e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.")
 | 
				
			||||||
 | 
					;return e.classNameAliases=i(e.classNameAliases||{}),function n(o,r){const a=o
 | 
				
			||||||
 | 
					;if(o.isCompiled)return a
 | 
				
			||||||
 | 
					;[I,B,Z,D].forEach((e=>e(o,r))),e.compilerExtensions.forEach((e=>e(o,r))),
 | 
				
			||||||
 | 
					o.__beforeBegin=null,[T,L,P].forEach((e=>e(o,r))),o.isCompiled=!0;let c=null
 | 
				
			||||||
 | 
					;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),
 | 
				
			||||||
 | 
					c=o.keywords.$pattern,
 | 
				
			||||||
 | 
					delete o.keywords.$pattern),c=c||/\w+/,o.keywords&&(o.keywords=$(o.keywords,e.case_insensitive)),
 | 
				
			||||||
 | 
					a.keywordPatternRe=t(c,!0),
 | 
				
			||||||
 | 
					r&&(o.begin||(o.begin=/\B|\b/),a.beginRe=t(a.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),
 | 
				
			||||||
 | 
					o.end&&(a.endRe=t(a.end)),
 | 
				
			||||||
 | 
					a.terminatorEnd=l(a.end)||"",o.endsWithParent&&r.terminatorEnd&&(a.terminatorEnd+=(o.end?"|":"")+r.terminatorEnd)),
 | 
				
			||||||
 | 
					o.illegal&&(a.illegalRe=t(o.illegal)),
 | 
				
			||||||
 | 
					o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
 | 
				
			||||||
 | 
					variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{
 | 
				
			||||||
 | 
					starts:e.starts?i(e.starts):null
 | 
				
			||||||
 | 
					}):Object.isFrozen(e)?i(e):e))("self"===e?o:e)))),o.contains.forEach((e=>{n(e,a)
 | 
				
			||||||
 | 
					})),o.starts&&n(o.starts,r),a.matcher=(e=>{const t=new s
 | 
				
			||||||
 | 
					;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
 | 
				
			||||||
 | 
					}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
 | 
				
			||||||
 | 
					}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
 | 
				
			||||||
 | 
					return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
 | 
				
			||||||
 | 
					constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
 | 
				
			||||||
 | 
					const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{
 | 
				
			||||||
 | 
					const i=Object.create(null),s=Object.create(null),o=[];let r=!0
 | 
				
			||||||
 | 
					;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
 | 
				
			||||||
 | 
					disableAutodetect:!0,name:"Plain text",contains:[]};let p={
 | 
				
			||||||
 | 
					ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
 | 
				
			||||||
 | 
					languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
 | 
				
			||||||
 | 
					cssSelector:"pre code",languages:null,__emitter:c};function b(e){
 | 
				
			||||||
 | 
					return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
 | 
				
			||||||
 | 
					;"object"==typeof t?(i=e,
 | 
				
			||||||
 | 
					n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."),
 | 
				
			||||||
 | 
					G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
 | 
				
			||||||
 | 
					s=e,i=t),void 0===n&&(n=!0);const o={code:i,language:s};N("before:highlight",o)
 | 
				
			||||||
 | 
					;const r=o.result?o.result:E(o.language,o.code,n)
 | 
				
			||||||
 | 
					;return r.code=o.code,N("after:highlight",r),r}function E(e,n,s,o){
 | 
				
			||||||
 | 
					const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
 | 
				
			||||||
 | 
					;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
 | 
				
			||||||
 | 
					;for(;t;){n+=R.substring(e,t.index)
 | 
				
			||||||
 | 
					;const s=_.case_insensitive?t[0].toLowerCase():t[0],o=(i=s,N.keywords[i]);if(o){
 | 
				
			||||||
 | 
					const[e,i]=o
 | 
				
			||||||
 | 
					;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{
 | 
				
			||||||
 | 
					const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
 | 
				
			||||||
 | 
					;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
 | 
				
			||||||
 | 
					;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
 | 
				
			||||||
 | 
					if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
 | 
				
			||||||
 | 
					if(!i[N.subLanguage])return void M.addText(R)
 | 
				
			||||||
 | 
					;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
 | 
				
			||||||
 | 
					}else e=x(R,N.subLanguage.length?N.subLanguage:null)
 | 
				
			||||||
 | 
					;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language)
 | 
				
			||||||
 | 
					})():l(),R=""}function u(e,t){
 | 
				
			||||||
 | 
					""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
 | 
				
			||||||
 | 
					;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
 | 
				
			||||||
 | 
					const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
 | 
				
			||||||
 | 
					function h(e,t){
 | 
				
			||||||
 | 
					return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope),
 | 
				
			||||||
 | 
					e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
 | 
				
			||||||
 | 
					R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
 | 
				
			||||||
 | 
					value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
 | 
				
			||||||
 | 
					;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
 | 
				
			||||||
 | 
					;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
 | 
				
			||||||
 | 
					for(;e.endsParent&&e.parent;)e=e.parent;return e}}
 | 
				
			||||||
 | 
					if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
 | 
				
			||||||
 | 
					return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
 | 
				
			||||||
 | 
					const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const o=N
 | 
				
			||||||
 | 
					;N.endScope&&N.endScope._wrap?(g(),
 | 
				
			||||||
 | 
					u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
 | 
				
			||||||
 | 
					d(N.endScope,e)):o.skip?R+=t:(o.returnEnd||o.excludeEnd||(R+=t),
 | 
				
			||||||
 | 
					g(),o.excludeEnd&&(R=t));do{
 | 
				
			||||||
 | 
					N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent
 | 
				
			||||||
 | 
					}while(N!==s.parent);return s.starts&&h(s.starts,e),o.returnEnd?0:t.length}
 | 
				
			||||||
 | 
					let w={};function y(i,o){const a=o&&o[0];if(R+=i,null==a)return g(),0
 | 
				
			||||||
 | 
					;if("begin"===w.type&&"end"===o.type&&w.index===o.index&&""===a){
 | 
				
			||||||
 | 
					if(R+=n.slice(o.index,o.index+1),!r){const t=Error(`0 width match regex (${e})`)
 | 
				
			||||||
 | 
					;throw t.languageName=e,t.badRule=w.rule,t}return 1}
 | 
				
			||||||
 | 
					if(w=o,"begin"===o.type)return(e=>{
 | 
				
			||||||
 | 
					const n=e[0],i=e.rule,s=new t(i),o=[i.__beforeBegin,i["on:begin"]]
 | 
				
			||||||
 | 
					;for(const t of o)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
 | 
				
			||||||
 | 
					;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
 | 
				
			||||||
 | 
					g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(o)
 | 
				
			||||||
 | 
					;if("illegal"===o.type&&!s){
 | 
				
			||||||
 | 
					const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"<unnamed>")+'"')
 | 
				
			||||||
 | 
					;throw e.mode=N,e}if("end"===o.type){const e=m(o);if(e!==ee)return e}
 | 
				
			||||||
 | 
					if("illegal"===o.type&&""===a)return 1
 | 
				
			||||||
 | 
					;if(I>1e5&&I>3*o.index)throw Error("potential infinite loop, way more iterations than matches")
 | 
				
			||||||
 | 
					;return R+=a,a.length}const _=O(e)
 | 
				
			||||||
 | 
					;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
 | 
				
			||||||
 | 
					;const v=V(_);let k="",N=o||v;const S={},M=new p.__emitter(p);(()=>{const e=[]
 | 
				
			||||||
 | 
					;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope)
 | 
				
			||||||
 | 
					;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{
 | 
				
			||||||
 | 
					if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
 | 
				
			||||||
 | 
					I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A
 | 
				
			||||||
 | 
					;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(A,e.index),e)
 | 
				
			||||||
 | 
					;A=e.index+t}y(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e,
 | 
				
			||||||
 | 
					value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){
 | 
				
			||||||
 | 
					if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n),
 | 
				
			||||||
 | 
					illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A,
 | 
				
			||||||
 | 
					context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(r)return{
 | 
				
			||||||
 | 
					language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
 | 
				
			||||||
 | 
					;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
 | 
				
			||||||
 | 
					const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
 | 
				
			||||||
 | 
					;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1)))
 | 
				
			||||||
 | 
					;s.unshift(n);const o=s.sort(((e,t)=>{
 | 
				
			||||||
 | 
					if(e.relevance!==t.relevance)return t.relevance-e.relevance
 | 
				
			||||||
 | 
					;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
 | 
				
			||||||
 | 
					;if(O(t.language).supersetOf===e.language)return-1}return 0})),[r,a]=o,c=r
 | 
				
			||||||
 | 
					;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{
 | 
				
			||||||
 | 
					let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
 | 
				
			||||||
 | 
					;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
 | 
				
			||||||
 | 
					;return t||(X(a.replace("{}",n[1])),
 | 
				
			||||||
 | 
					X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
 | 
				
			||||||
 | 
					return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
 | 
				
			||||||
 | 
					;if(N("before:highlightElement",{el:e,language:n
 | 
				
			||||||
 | 
					}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
 | 
				
			||||||
 | 
					;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
 | 
				
			||||||
 | 
					console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
 | 
				
			||||||
 | 
					console.warn("The element with unescaped HTML:"),
 | 
				
			||||||
 | 
					console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
 | 
				
			||||||
 | 
					;t=e;const i=t.textContent,o=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
 | 
				
			||||||
 | 
					;e.innerHTML=o.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
 | 
				
			||||||
 | 
					;e.classList.add("hljs"),e.classList.add("language-"+i)
 | 
				
			||||||
 | 
					})(e,n,o.language),e.result={language:o.language,re:o.relevance,
 | 
				
			||||||
 | 
					relevance:o.relevance},o.secondBest&&(e.secondBest={
 | 
				
			||||||
 | 
					language:o.secondBest.language,relevance:o.secondBest.relevance
 | 
				
			||||||
 | 
					}),N("after:highlightElement",{el:e,result:o,text:i})}let y=!1;function _(){
 | 
				
			||||||
 | 
					"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0
 | 
				
			||||||
 | 
					}function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
 | 
				
			||||||
 | 
					function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
 | 
				
			||||||
 | 
					s[e.toLowerCase()]=t}))}function k(e){const t=O(e)
 | 
				
			||||||
 | 
					;return t&&!t.disableAutodetect}function N(e,t){const n=e;o.forEach((e=>{
 | 
				
			||||||
 | 
					e[n]&&e[n](t)}))}
 | 
				
			||||||
 | 
					"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
 | 
				
			||||||
 | 
					y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_,
 | 
				
			||||||
 | 
					highlightElement:w,
 | 
				
			||||||
 | 
					highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"),
 | 
				
			||||||
 | 
					G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)},
 | 
				
			||||||
 | 
					initHighlighting:()=>{
 | 
				
			||||||
 | 
					_(),G("10.6.0","initHighlighting() deprecated.  Use highlightAll() now.")},
 | 
				
			||||||
 | 
					initHighlightingOnLoad:()=>{
 | 
				
			||||||
 | 
					_(),G("10.6.0","initHighlightingOnLoad() deprecated.  Use highlightAll() now.")
 | 
				
			||||||
 | 
					},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
 | 
				
			||||||
 | 
					if(W("Language definition for '{}' could not be registered.".replace("{}",e)),
 | 
				
			||||||
 | 
					!r)throw t;W(t),s=l}
 | 
				
			||||||
 | 
					s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{
 | 
				
			||||||
 | 
					languageName:e})},unregisterLanguage:e=>{delete i[e]
 | 
				
			||||||
 | 
					;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
 | 
				
			||||||
 | 
					listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v,
 | 
				
			||||||
 | 
					autoDetection:k,inherit:Q,addPlugin:e=>{(e=>{
 | 
				
			||||||
 | 
					e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
 | 
				
			||||||
 | 
					e["before:highlightBlock"](Object.assign({block:t.el},t))
 | 
				
			||||||
 | 
					}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
 | 
				
			||||||
 | 
					e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),o.push(e)},
 | 
				
			||||||
 | 
					removePlugin:e=>{const t=o.indexOf(e);-1!==t&&o.splice(t,1)}}),n.debugMode=()=>{
 | 
				
			||||||
 | 
					r=!1},n.safeMode=()=>{r=!0},n.versionString="11.9.0",n.regex={concat:h,
 | 
				
			||||||
 | 
					lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
 | 
				
			||||||
 | 
					;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n
 | 
				
			||||||
 | 
					},ne=te({});return ne.newInstance=()=>te({}),ne}()
 | 
				
			||||||
 | 
					;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `bash` grammar compiled for Highlight.js 11.9.0 */
 | 
				
			||||||
 | 
					(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/,
 | 
				
			||||||
 | 
					end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{
 | 
				
			||||||
 | 
					className:"variable",variants:[{
 | 
				
			||||||
 | 
					begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={
 | 
				
			||||||
 | 
					className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]
 | 
				
			||||||
 | 
					},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),c={
 | 
				
			||||||
 | 
					begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
 | 
				
			||||||
 | 
					end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,
 | 
				
			||||||
 | 
					contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(o);const r={begin:/\$?\(\(/,
 | 
				
			||||||
 | 
					end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
 | 
				
			||||||
 | 
					},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
 | 
				
			||||||
 | 
					}),m={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
 | 
				
			||||||
 | 
					contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
 | 
				
			||||||
 | 
					name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
 | 
				
			||||||
 | 
					keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"],
 | 
				
			||||||
 | 
					literal:["true","false"],
 | 
				
			||||||
 | 
					built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
 | 
				
			||||||
 | 
					},contains:[l,e.SHEBANG(),m,r,i,c,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{
 | 
				
			||||||
 | 
					className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})()
 | 
				
			||||||
 | 
					;hljs.registerLanguage("bash",e)})();/*! `nix` grammar compiled for Highlight.js 11.9.0 */
 | 
				
			||||||
 | 
					(()=>{var e=(()=>{"use strict";return e=>{const n={
 | 
				
			||||||
 | 
					keyword:["rec","with","let","in","inherit","assert","if","else","then"],
 | 
				
			||||||
 | 
					literal:["true","false","or","and","null"],
 | 
				
			||||||
 | 
					built_in:["import","abort","baseNameOf","dirOf","isNull","builtins","map","removeAttrs","throw","toString","derivation"]
 | 
				
			||||||
 | 
					},s={className:"subst",begin:/\$\{/,end:/\}/,keywords:n},a={className:"string",
 | 
				
			||||||
 | 
					contains:[{className:"char.escape",begin:/''\$/},s],variants:[{begin:"''",
 | 
				
			||||||
 | 
					end:"''"},{begin:'"',end:'"'}]
 | 
				
			||||||
 | 
					},i=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{
 | 
				
			||||||
 | 
					begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{
 | 
				
			||||||
 | 
					className:"attr",begin:/\S+/,relevance:.2}]}];return s.contains=i,{name:"Nix",
 | 
				
			||||||
 | 
					aliases:["nixos"],keywords:n,contains:i}}})();hljs.registerLanguage("nix",e)
 | 
				
			||||||
 | 
					})();/*! `shell` grammar compiled for Highlight.js 11.9.0 */
 | 
				
			||||||
 | 
					(()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session",
 | 
				
			||||||
 | 
					aliases:["console","shellsession"],contains:[{className:"meta.prompt",
 | 
				
			||||||
 | 
					begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,
 | 
				
			||||||
 | 
					subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();
 | 
				
			||||||
							
								
								
									
										6
									
								
								docs-preview-921/highlightjs/loader.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs-preview-921/highlightjs/loader.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					/* This file is NOT part of highlight.js */
 | 
				
			||||||
 | 
					document.addEventListener('DOMContentLoaded', (event) => {
 | 
				
			||||||
 | 
					    document.querySelectorAll('.programlisting, .screen').forEach((element) => {
 | 
				
			||||||
 | 
					        hljs.highlightElement(element);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										70
									
								
								docs-preview-921/highlightjs/mono-blue.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								docs-preview-921/highlightjs/mono-blue.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,70 @@
 | 
				
			||||||
 | 
					pre code.hljs {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    overflow-x: auto;
 | 
				
			||||||
 | 
					    padding: 1em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					code.hljs {
 | 
				
			||||||
 | 
					    padding: 3px 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Five-color theme from a single blue hue.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					.hljs {
 | 
				
			||||||
 | 
					    background: #eaeef3;
 | 
				
			||||||
 | 
					    color: #00193a;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hljs-keyword,
 | 
				
			||||||
 | 
					.hljs-selector-tag,
 | 
				
			||||||
 | 
					.hljs-title,
 | 
				
			||||||
 | 
					.hljs-section,
 | 
				
			||||||
 | 
					.hljs-doctag,
 | 
				
			||||||
 | 
					.hljs-name,
 | 
				
			||||||
 | 
					.hljs-strong {
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hljs-comment {
 | 
				
			||||||
 | 
					    color: var(--color-1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hljs-string,
 | 
				
			||||||
 | 
					.hljs-title,
 | 
				
			||||||
 | 
					.hljs-section,
 | 
				
			||||||
 | 
					.hljs-built_in,
 | 
				
			||||||
 | 
					.hljs-literal,
 | 
				
			||||||
 | 
					.hljs-type,
 | 
				
			||||||
 | 
					.hljs-addition,
 | 
				
			||||||
 | 
					.hljs-tag,
 | 
				
			||||||
 | 
					.hljs-quote,
 | 
				
			||||||
 | 
					.hljs-name,
 | 
				
			||||||
 | 
					.hljs-selector-id,
 | 
				
			||||||
 | 
					.hljs-selector-class {
 | 
				
			||||||
 | 
					    color: var(--color-2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hljs-meta,
 | 
				
			||||||
 | 
					.hljs-subst,
 | 
				
			||||||
 | 
					.hljs-symbol,
 | 
				
			||||||
 | 
					.hljs-regexp,
 | 
				
			||||||
 | 
					.hljs-attribute,
 | 
				
			||||||
 | 
					.hljs-deletion,
 | 
				
			||||||
 | 
					.hljs-variable,
 | 
				
			||||||
 | 
					.hljs-template-variable,
 | 
				
			||||||
 | 
					.hljs-link,
 | 
				
			||||||
 | 
					.hljs-bullet {
 | 
				
			||||||
 | 
					    color: var(--color-3);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hljs-emphasis {
 | 
				
			||||||
 | 
					    font-style: italic;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:root {
 | 
				
			||||||
 | 
					    --color-1: #738191;
 | 
				
			||||||
 | 
					    --color-2: #0048ab;
 | 
				
			||||||
 | 
					    --color-3: #4c81c9;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					    :root {
 | 
				
			||||||
 | 
					        --color-1: #8b9caf;
 | 
				
			||||||
 | 
					        --color-2: #3b85e7;
 | 
				
			||||||
 | 
					        --color-3: #5795e7;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1321
									
								
								docs-preview-921/index.xhtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1321
									
								
								docs-preview-921/index.xhtml
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										50410
									
								
								docs-preview-921/options.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50410
									
								
								docs-preview-921/options.html
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										56
									
								
								docs-preview-921/quirks.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								docs-preview-921/quirks.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,56 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" standalone="no"?>
 | 
				
			||||||
 | 
					<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 | 
				
			||||||
 | 
					  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
				
			||||||
 | 
					<html xmlns="http://www.w3.org/1999/xhtml">
 | 
				
			||||||
 | 
					 <head>
 | 
				
			||||||
 | 
					  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 | 
				
			||||||
 | 
					 <title>Appendix A. Known Issues and Quirks</title>
 | 
				
			||||||
 | 
					<link rel="stylesheet" type="text/css" href="style.css" />
 | 
				
			||||||
 | 
					<script src="highlightjs/highlight.pack.js" type="text/javascript"></script><script src="highlightjs/loader.js" type="text/javascript"></script><script src="script/anchor-use.js" type="text/javascript"></script><script src="script/anchor-min.js" type="text/javascript"></script><script src="script/search.js" type="text/javascript"></script>
 | 
				
			||||||
 | 
					 <meta name="generator" content="nixos-render-docs" />
 | 
				
			||||||
 | 
					 <link rel="home" href="index.xhtml" title="nvf manual" />
 | 
				
			||||||
 | 
					 <link rel="up" href="index.xhtml" title="nvf manual" /><link rel="prev" href="index.xhtml" title="nvf manual" /><link rel="next" href="options.html" title="Appendix B. nvf Configuration Options" />
 | 
				
			||||||
 | 
					 </head>
 | 
				
			||||||
 | 
					 <body>
 | 
				
			||||||
 | 
					  <div class="navheader">
 | 
				
			||||||
 | 
					   <table width="100%" summary="Navigation header">
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					    <th colspan="3" align="center">Appendix A. Known Issues and Quirks</th>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					    <td width="20%" align="left"><a accesskey="p" href="index.xhtml">Prev</a> </td>
 | 
				
			||||||
 | 
					    <th width="60%" align="center"> </th>
 | 
				
			||||||
 | 
					    <td width="20%" align="right"> <a accesskey="n" href="options.html">Next</a></td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					   </table>
 | 
				
			||||||
 | 
					   <hr />
 | 
				
			||||||
 | 
					  </div><div class="appendix"> <div class="titlepage">  <div>   <div>    <h1 id="ch-known-issues-quirks" class="title" >Appendix A. Known Issues and Quirks   </h1>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="chapter">  <a href="quirks.html#ch-quirks-nodejs">NodeJS</a> </span></dt> </dl></div><p>At times, certain plugins and modules may refuse to play nicely with your setup,
 | 
				
			||||||
 | 
					be it a result of generating Lua from Nix, or the state of packaging. This page,
 | 
				
			||||||
 | 
					in turn, will list any known modules or plugins that are known to misbehave, and
 | 
				
			||||||
 | 
					possible workarounds that you may apply.</p><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="ch-quirks-nodejs" class="title" >NodeJS   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="quirks.html#sec-eslint-plugin-prettier">eslint-plugin-prettier</a> </span></dt> </dl></div><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-eslint-plugin-prettier" class="title" style="clear: both">eslint-plugin-prettier   </h2>  </div> </div></div><p>When working with NodeJS, everything works as expected, but some projects have
 | 
				
			||||||
 | 
					settings that can fool nvf.</p><p>If <a class="link" href="https://github.com/prettier/eslint-plugin-prettier"  target="_top">this plugin</a> or similar
 | 
				
			||||||
 | 
					is included, you might get a situation where your eslint configuration diagnoses
 | 
				
			||||||
 | 
					your formatting according to its own config (usually <code class="literal">.eslintrc.js</code>).</p><p>The issue there is your formatting is made via prettierd.</p><p>This results in auto-formatting relying on your prettier config, while your
 | 
				
			||||||
 | 
					eslint config diagnoses formatting
 | 
				
			||||||
 | 
					<a class="link" href="https://prettier.io/docs/en/comparison.html"  target="_top">which it’s not supposed to</a>)</p><p>In the end, you get discrepancies between what your editor does and what it
 | 
				
			||||||
 | 
					wants.</p><p>Solutions are:</p><div class="orderedlist"><ol class="orderedlist compact"  type="1"><li class="listitem"><p>Don’t add a formatting config to eslint, and separate prettier and eslint.</p></li><li class="listitem"><p>PR this repo to add an ESLint formatter and configure nvf to use it.</p></li></ol></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</div>  <div class="navfooter">
 | 
				
			||||||
 | 
					   <hr />
 | 
				
			||||||
 | 
					   <table width="100%" summary="Navigation footer">
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					    <td width="40%" align="left"><a accesskey="p" href="index.xhtml">Prev</a> </td>
 | 
				
			||||||
 | 
					    <td width="20%" align="center"> </td>
 | 
				
			||||||
 | 
					    <td width="40%" align="right"> <a accesskey="n" href="options.html">Next</a></td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					     <td width="40%" align="left" valign="top">nvf manual </td>
 | 
				
			||||||
 | 
					     <td width="20%" align="center"><a accesskey="h" href="index.xhtml">Home</a></td>
 | 
				
			||||||
 | 
					     <td width="40%" align="right" valign="top"> Appendix B. nvf Configuration Options</td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					   </table>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					 </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										382
									
								
								docs-preview-921/release-notes.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										382
									
								
								docs-preview-921/release-notes.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,382 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" standalone="no"?>
 | 
				
			||||||
 | 
					<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 | 
				
			||||||
 | 
					  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
				
			||||||
 | 
					<html xmlns="http://www.w3.org/1999/xhtml">
 | 
				
			||||||
 | 
					 <head>
 | 
				
			||||||
 | 
					  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 | 
				
			||||||
 | 
					 <title>Appendix C. Release Notes</title>
 | 
				
			||||||
 | 
					<link rel="stylesheet" type="text/css" href="style.css" />
 | 
				
			||||||
 | 
					<script src="highlightjs/highlight.pack.js" type="text/javascript"></script><script src="highlightjs/loader.js" type="text/javascript"></script><script src="script/anchor-use.js" type="text/javascript"></script><script src="script/anchor-min.js" type="text/javascript"></script><script src="script/search.js" type="text/javascript"></script>
 | 
				
			||||||
 | 
					 <meta name="generator" content="nixos-render-docs" />
 | 
				
			||||||
 | 
					 <link rel="home" href="index.xhtml" title="nvf manual" />
 | 
				
			||||||
 | 
					 <link rel="up" href="index.xhtml" title="nvf manual" /><link rel="prev" href="options.html" title="Appendix B. nvf Configuration Options" />
 | 
				
			||||||
 | 
					 </head>
 | 
				
			||||||
 | 
					 <body>
 | 
				
			||||||
 | 
					  <div class="navheader">
 | 
				
			||||||
 | 
					   <table width="100%" summary="Navigation header">
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					    <th colspan="3" align="center">Appendix C. Release Notes</th>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					    <td width="20%" align="left"><a accesskey="p" href="options.html">Prev</a> </td>
 | 
				
			||||||
 | 
					    <th width="60%" align="center"> </th>
 | 
				
			||||||
 | 
					    <td width="20%" align="right"> </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					   </table>
 | 
				
			||||||
 | 
					   <hr />
 | 
				
			||||||
 | 
					  </div><div class="appendix"> <div class="titlepage">  <div>   <div>    <h1 id="ch-release-notes" class="title" >Appendix C. Release Notes   </h1>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.1">Release 0.1</a> </span></dt><dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.2">Release 0.2</a> </span></dt><dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.3">Release 0.3</a> </span></dt><dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.4">Release 0.4</a> </span></dt><dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.5">Release 0.5</a> </span></dt><dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.6">Release 0.6</a> </span></dt><dt> <span class="chapter">  <a href="release-notes.html#sec-release-0.7">Release 0.7</a> </span></dt> </dl></div><p>This section lists the release notes for tagged version of <span class="strong"><strong>nvf</strong></span> and the
 | 
				
			||||||
 | 
					current main current main branch</p><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.1" class="title" >Release 0.1   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-release-0.1-changelog">Changelog</a> </span></dt> </dl></div><p>This is the current master branch and information here is not final. These are
 | 
				
			||||||
 | 
					changes from the v0.1 tag.</p><p>Special thanks to <a class="link" href="https://github.com/nix-community/home-manager/"  target="_top">home-manager</a>
 | 
				
			||||||
 | 
					for this release. Docs/manual generation, the new module evaluation system, and
 | 
				
			||||||
 | 
					DAG implementation are from them.</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.1-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><p><a class="link" href="https://github.com/jordanisaacs"  target="_top">jordanisaacs</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Removed hare language support (lsp/tree-sitter/etc). <code class="literal">vim.lsp.hare</code> is no
 | 
				
			||||||
 | 
					longer defined. If you use hare and would like it added back, please file an
 | 
				
			||||||
 | 
					issue.</p></li><li class="listitem"><p><a class="xref" href="options.html#opt-vim.startPlugins"  ><code class="option">vim.startPlugins</code></a> & <a class="xref" href="options.html#opt-vim.optPlugins"  ><code class="option">vim.optPlugins</code></a> are now an enum of
 | 
				
			||||||
 | 
					<code class="literal">string</code> for options sourced from the flake inputs. Users can still provide
 | 
				
			||||||
 | 
					vim plugin packages.</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>If you are contributing and adding a new plugin, add the plugin name to
 | 
				
			||||||
 | 
					<code class="literal">availablePlugins</code> in [types-plugin.nix].</p></li></ul></div></li><li class="listitem"><p><code class="literal">neovimBuilder</code> has been removed for configuration. Using an overlay is no
 | 
				
			||||||
 | 
					longer required. See the manual for the new way to configuration.</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Treesitter grammars are now configurable with
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.treesitter.grammars"  ><code class="option">vim.treesitter.grammars</code></a>. Utilizes the nixpkgs <code class="literal">nvim-treesitter</code>
 | 
				
			||||||
 | 
					plugin rather than a custom input in order to take advantage of build support
 | 
				
			||||||
 | 
					of pinned versions. See the <a class="link" href="https://discourse.nixos.org/t/psa-if-you-are-on-unstable-try-out-nvim-treesitter-withallgrammars/23321?u=snowytrees"  target="_top">relevant discourse post</a> for more information.
 | 
				
			||||||
 | 
					Packages can be found under the <code class="literal">vimPlugins.nvim-treesitter.builtGrammars</code>
 | 
				
			||||||
 | 
					namespace.</p></li><li class="listitem"><p><code class="literal">vim.configRC</code> and <a class="xref" href="options.html#opt-vim.luaConfigRC"  ><code class="option">vim.luaConfigRC</code></a> are now of type DAG lines. This
 | 
				
			||||||
 | 
					allows for ordering of the config. Usage is the same is in home-manager’s
 | 
				
			||||||
 | 
					<code class="literal">home.activation</code> option.</p></li></ul></div><pre><code class="programlisting nix">vim.luaConfigRC = lib.nvim.dag.entryAnywhere "config here"
 | 
				
			||||||
 | 
					</code></pre><p><a class="link" href="https://github.com/MoritzBoehme"  target="_top">MoritzBoehme</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p><code class="literal">catppuccin</code> theme is now available as a neovim theme <a class="xref" href="options.html#opt-vim.theme.style"  ><code class="option">vim.theme.style</code></a>
 | 
				
			||||||
 | 
					and Lualine theme <a class="xref" href="options.html#opt-vim.statusline.lualine.theme"  ><code class="option">vim.statusline.lualine.theme</code></a>.</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.2" class="title" >Release 0.2   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-release-0.2-changelog">Changelog</a> </span></dt> </dl></div><p>Release notes for release 0.2</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.2-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><p><a class="link" href="https://github.com/notashelf"  target="_top">notashelf</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added two minimap plugins under <code class="literal">vim.minimap</code>. <code class="literal">codewindow.nvim</code> is enabled by
 | 
				
			||||||
 | 
					default, while <code class="literal">minimap.vim</code> is available with its code-minimap dependency.</p></li><li class="listitem"><p>A complementary plugin, <code class="literal">obsidian.nvim</code> and the Neovim alternative for Emacs’
 | 
				
			||||||
 | 
					orgmode with <code class="literal">orgmode.nvim</code> have been added. Both will be disabled by default.</p></li><li class="listitem"><p>Smooth scrolling for ANY movement command is now available with
 | 
				
			||||||
 | 
					<code class="literal">cinnamon.nvim</code></p></li><li class="listitem"><p>You will now notice a dashboard on startup. This is provided by the
 | 
				
			||||||
 | 
					<code class="literal">alpha.nvim</code> plugin. You can use any of the three available dashboard plugins,
 | 
				
			||||||
 | 
					or disable them entirely.</p></li><li class="listitem"><p>There is now a scrollbar on active buffers, which can highlight errors by
 | 
				
			||||||
 | 
					hooking to your LSPs. This is on by default, but can be toggled off under
 | 
				
			||||||
 | 
					<code class="literal">vim.visuals</code> if seen necessary.</p></li><li class="listitem"><p>Discord Rich Presence has been added through <code class="literal">presence.nvim</code> for those who
 | 
				
			||||||
 | 
					want to flex that they are using the <span class="emphasis"><em>superior</em></span> text editor.</p></li><li class="listitem"><p>An icon picker is now available with telescope integration. You can use
 | 
				
			||||||
 | 
					<code class="literal">:IconPickerInsert</code> or <code class="literal">:IconPickerYank</code> to add icons to your code.</p></li><li class="listitem"><p>A general-purpose cheatsheet has been added through <code class="literal">cheatsheet.nvim</code>. Forget
 | 
				
			||||||
 | 
					no longer!</p></li><li class="listitem"><p><code class="literal">ccc.nvim</code> has been added to the default plugins to allow picking colors with
 | 
				
			||||||
 | 
					ease.</p></li><li class="listitem"><p>Most UI components of Neovim have been replaced through the help of
 | 
				
			||||||
 | 
					<code class="literal">noice.nvim</code>. There are also notifications and custom UI elements available
 | 
				
			||||||
 | 
					for Neovim messages and prompts.</p></li><li class="listitem"><p>A (floating by default) terminal has been added through <code class="literal">toggleterm.nvim</code>.</p></li><li class="listitem"><p>Harness the power of ethical (<code class="literal">tabnine.nvim</code>) and not-so-ethical
 | 
				
			||||||
 | 
					(<code class="literal">copilot.lua</code>) AI by those new assistant plugins. Both are off by default,
 | 
				
			||||||
 | 
					TabNine needs to be wrapped before it’s working.</p></li><li class="listitem"><p>Experimental mouse gestures have been added through <code class="literal">gesture.nvim</code>. See plugin
 | 
				
			||||||
 | 
					page and the relevant module for more details on how to use.</p></li><li class="listitem"><p>Re-open last visited buffers via <code class="literal">nvim-session-manager</code>. Disabled by default
 | 
				
			||||||
 | 
					as deleting buffers seems to be problematic at the moment.</p></li><li class="listitem"><p>Most of NvimTree’s configuration options have been changed with some options
 | 
				
			||||||
 | 
					being toggled to off by default.</p></li><li class="listitem"><p>Lualine had its configuration simplified and style toned down. Less color,
 | 
				
			||||||
 | 
					more info.</p></li><li class="listitem"><p>Modules where multiple plugin configurations were in the same directory have
 | 
				
			||||||
 | 
					been simplified. Each plugin inside a single module gets its directory to be
 | 
				
			||||||
 | 
					imported.</p></li><li class="listitem"><p>Separate config options with the same parent attribute have been merged into
 | 
				
			||||||
 | 
					one for simplicity.</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.3" class="title" >Release 0.3   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-release-0.3-changelog">Changelog</a> </span></dt> </dl></div><p>Release 0.3 had to come out before I wanted it to due to Neovim 0.9 dropping
 | 
				
			||||||
 | 
					into nixpkgs-unstable. The Treesitter changes have prompted a Treesitter rework,
 | 
				
			||||||
 | 
					which was followed by reworking the languages system. Most of the changes to
 | 
				
			||||||
 | 
					those are downstreamed from the original repository. The feature requests that
 | 
				
			||||||
 | 
					was originally planned for 0.3 have been moved to 0.4, which should come out
 | 
				
			||||||
 | 
					soon.</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.3-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>We have transitioned to flake-parts, from flake-utils to extend the
 | 
				
			||||||
 | 
					flexibility of this flake. This means the flake structure is different than
 | 
				
			||||||
 | 
					usual, but the functionality remains the same.</p></li><li class="listitem"><p>We now provide a home-manager module. Do note that it is still far from
 | 
				
			||||||
 | 
					perfect, but it works.</p></li><li class="listitem"><p><code class="literal">nodejs_16</code> is now bundled with <code class="literal">Copilot.lua</code> if the user has enabled Copilot
 | 
				
			||||||
 | 
					assistant.</p></li><li class="listitem"><p>which-key section titles have been fixed. This is to be changed once again in
 | 
				
			||||||
 | 
					a possible keybind rewrite, but now it should display the correct titles
 | 
				
			||||||
 | 
					instead of <code class="literal">+prefix</code></p></li><li class="listitem"><p>Most of <code class="literal">presence.nvim</code>’s options have been made fully configurable through
 | 
				
			||||||
 | 
					your configuration file.</p></li><li class="listitem"><p>Most of the modules have been refactored to separate <code class="literal">config</code> and <code class="literal">options</code>
 | 
				
			||||||
 | 
					attributes.</p></li><li class="listitem"><p>Darwin has been deprecated as the Zig package is marked as broken. We will
 | 
				
			||||||
 | 
					attempt to use the Zig overlay to return Darwin support.</p></li><li class="listitem"><p><code class="literal">Fidget.nvim</code> has been added as a neat visual addition for LSP installations.</p></li><li class="listitem"><p><code class="literal">diffview.nvim</code> has been added to provide a convenient diff utility.</p></li><li class="listitem"><p>Treesitter grammars are now configurable with
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.treesitter.grammars"  ><code class="option">vim.treesitter.grammars</code></a>. Utilizes the nixpkgs <code class="literal">nvim-treesitter</code>
 | 
				
			||||||
 | 
					plugin rather than a custom input in order to take advantage of build support
 | 
				
			||||||
 | 
					of pinned versions. See <a class="link" href="https://discourse.nixos.org/t/psa-if-you-are-on-unstable-try-out-nvim-treesitter-withallgrammars/23321?u=snowytrees"  target="_top">discourse</a> for more information. Packages can be
 | 
				
			||||||
 | 
					found under the <code class="literal">pkgs.vimPlugins.nvim-treesitter.builtGrammars</code> attribute.
 | 
				
			||||||
 | 
					Treesitter grammars for supported languages should be enabled within the
 | 
				
			||||||
 | 
					module. By default no grammars are installed, thus the following grammars
 | 
				
			||||||
 | 
					which do not have a language section are not included anymore: <span class="strong"><strong>comment</strong></span>,
 | 
				
			||||||
 | 
					<span class="strong"><strong>toml</strong></span>, <span class="strong"><strong>make</strong></span>, <span class="strong"><strong>html</strong></span>, <span class="strong"><strong>css</strong></span>, <span class="strong"><strong>graphql</strong></span>, <span class="strong"><strong>json</strong></span>.</p></li><li class="listitem"><p>A new section has been added for language support: <code class="literal">vim.languages.<language></code>.</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>The options <code class="literal">enableLSP</code> <a class="xref" href="options.html#opt-vim.languages.enableTreesitter"  ><code class="option">vim.languages.enableTreesitter</code></a>, etc. will
 | 
				
			||||||
 | 
					enable the respective section for all languages that have been enabled.</p></li><li class="listitem"><p>All LSP languages have been moved here</p></li><li class="listitem"><p><code class="literal">plantuml</code> and <code class="literal">markdown</code> have been moved here</p></li><li class="listitem"><p>A new section has been added for <code class="literal">html</code>. The old
 | 
				
			||||||
 | 
					<code class="literal">vim.treesitter.autotagHtml</code> can be found at
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.languages.html.treesitter.autotagHtml"  ><code class="option">vim.languages.html.treesitter.autotagHtml</code></a>.</p></li></ul></div></li><li class="listitem"><p><code class="literal">vim.git.gitsigns.codeActions</code> has been added, allowing you to turn on
 | 
				
			||||||
 | 
					Gitsigns’ code actions.</p></li><li class="listitem"><p>Removed the plugins document in the docs. Was too unwieldy to keep updated.</p></li><li class="listitem"><p><code class="literal">vim.visual.lspkind</code> has been moved to <a class="xref" href="options.html#opt-vim.lsp.lspkind.enable"  ><code class="option">vim.lsp.lspkind.enable</code></a></p></li><li class="listitem"><p>Improved handling of completion formatting. When setting
 | 
				
			||||||
 | 
					<code class="literal">vim.autocomplete.sources</code>, can also include optional menu mapping. And can
 | 
				
			||||||
 | 
					provide your own function with <code class="literal">vim.autocomplete.formatting.format</code>.</p></li><li class="listitem"><p>For <code class="literal">vim.visuals.indentBlankline.fillChar</code> and
 | 
				
			||||||
 | 
					<code class="literal">vim.visuals.indentBlankline.eolChar</code> options, turning them off should be done
 | 
				
			||||||
 | 
					by using <code class="literal">null</code> rather than <code class="literal">""</code> now.</p></li><li class="listitem"><p>Transparency has been made optional and has been disabled by default.
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.theme.transparent"  ><code class="option">vim.theme.transparent</code></a> option can be used to enable or disable
 | 
				
			||||||
 | 
					transparency for your configuration.</p></li><li class="listitem"><p>Fixed deprecated configuration method for Tokyonight, and added new style
 | 
				
			||||||
 | 
					“moon”</p></li><li class="listitem"><p>Dart language support as well as extended flutter support has been added.
 | 
				
			||||||
 | 
					Thanks to @FlafyDev for his contributions towards Dart language support.</p></li><li class="listitem"><p>Elixir language support has been added through <code class="literal">elixir-tools.nvim</code>.</p></li><li class="listitem"><p><code class="literal">hop.nvim</code> and <code class="literal">leap.nvim</code> have been added for fast navigation.</p></li><li class="listitem"><p><code class="literal">modes.nvim</code> has been added to the UI plugins as a minor error highlighter.</p></li><li class="listitem"><p><code class="literal">smartcollumn.nvim</code> has been added to dynamically display a colorcolumn when
 | 
				
			||||||
 | 
					the limit has been exceeded, providing per-buftype column position and more.</p></li><li class="listitem"><p><code class="literal">project.nvim</code> has been added for better project management inside Neovim.</p></li><li class="listitem"><p>More configuration options have been added to <code class="literal">nvim-session-manager</code>.</p></li><li class="listitem"><p>Editorconfig support has been added to the core functionality, with an enable
 | 
				
			||||||
 | 
					option.</p></li><li class="listitem"><p><code class="literal">venn-nvim</code> has been dropped due to broken keybinds.</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.4" class="title" >Release 0.4   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-release-0.4-changelog">Changelog</a> </span></dt> </dl></div><p>Following the release of v0.3, I have decided to release v0.4 with a massive new
 | 
				
			||||||
 | 
					change: customizable keybinds. As of the 0.4 release, keybinds will no longer be
 | 
				
			||||||
 | 
					hardcoded and instead provided by each module’s own keybinds section. The old
 | 
				
			||||||
 | 
					keybind system (<code class="literal">vim.keybinds = {}</code>) is now considered deprecated and the new
 | 
				
			||||||
 | 
					lib functions are recommended to be used for adding keybinds for new plugins, or
 | 
				
			||||||
 | 
					adding keybinds to existing plugins.</p><p>Alongside customizable keybinds, there are a few quality of life updates, such
 | 
				
			||||||
 | 
					as <code class="literal">lazygit</code> integration and the new experimental Lua loader of Neovim 0.9
 | 
				
			||||||
 | 
					thanks to our awesome contributors who made this update possible during my
 | 
				
			||||||
 | 
					absence.</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.4-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><p><a class="link" href="https://github.com/n3oney"  target="_top">n3oney</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Streamlined keybind adding process towards new functions in extended stdlib.</p></li><li class="listitem"><p>Moved default keybinds into keybinds section of each module</p></li><li class="listitem"><p>Simplified luaConfigRC and configRC setting - they can now just take strings</p></li><li class="listitem"><p>Refactored the resolveDag function - you can just provide a string now, which
 | 
				
			||||||
 | 
					will default to dag.entryAnywhere</p></li><li class="listitem"><p>Fixed formatting sometimes removing parts of files</p></li><li class="listitem"><p>Made formatting synchronous</p></li><li class="listitem"><p>Gave null-ls priority over other formatters</p></li></ul></div><p><a class="link" href="https://github.com/horriblename"  target="_top">horriblename</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added <code class="literal">clangd</code> as alternative lsp for C/++.</p></li><li class="listitem"><p>Added <code class="literal">toggleterm</code> integration for <code class="literal">lazygit</code>.</p></li><li class="listitem"><p>Added new option <code class="literal">enableluaLoader</code> to enable neovim’s experimental module
 | 
				
			||||||
 | 
					loader for faster startup time.</p></li><li class="listitem"><p>Fixed bug where flutter-tools can’t find <code class="literal">dart</code> LSP</p></li><li class="listitem"><p>Added Debug Adapter (DAP) support for clang, rust, go, python and dart.</p></li></ul></div><p><a class="link" href="https://github.com/notashelf"  target="_top">notashelf</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Made Copilot’s Node package configurable. It is recommended to keep as
 | 
				
			||||||
 | 
					default, but providing a different NodeJS version is now possible.</p></li><li class="listitem"><p>Added <code class="literal">vim.cursorlineOpt</code> for configuring Neovim’s <code class="literal">vim.o.cursorlineopt</code>.</p></li><li class="listitem"><p>Added <code class="literal">filetree.nvimTreeLua.view.cursorline</code>, default false, to enable
 | 
				
			||||||
 | 
					cursorline in nvimtre.</p></li><li class="listitem"><p>Added Fidget.nvim support for the Catppuccin theme.</p></li><li class="listitem"><p>Updated bundled NodeJS version used by <code class="literal">Copilot.lua</code>. v16 is now marked as
 | 
				
			||||||
 | 
					insecure on Nixpkgs, and we updated to v18</p></li><li class="listitem"><p>Enabled Catppuccin modules for plugins available by default.</p></li><li class="listitem"><p>Added experimental Svelte support under <code class="literal">vim.languages</code>.</p></li><li class="listitem"><p>Removed unnecessary scrollbar element from notifications and codeaction
 | 
				
			||||||
 | 
					warning UI.</p></li><li class="listitem"><p><code class="literal">vim.utility.colorizer</code> has been renamed to <code class="literal">vim.utility.ccc</code> after the plugin
 | 
				
			||||||
 | 
					it uses</p></li><li class="listitem"><p>Color preview via <code class="literal">nvim-colorizer.lua</code></p></li><li class="listitem"><p>Updated Lualine statusline UI</p></li><li class="listitem"><p>Added vim-illuminate for smart highlighting</p></li><li class="listitem"><p>Added a module for enabling Neovim’s spellchecker</p></li><li class="listitem"><p>Added prettierd as an alternative formatter to prettier - currently defaults
 | 
				
			||||||
 | 
					to prettier</p></li><li class="listitem"><p>Fixed presence.nvim inheriting the wrong client id</p></li><li class="listitem"><p>Cleaned up documentation</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.5" class="title" >Release 0.5   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-release-0.5-changelog">Changelog</a> </span></dt> </dl></div><p>Release notes for release 0.5</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.5-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><p><a class="link" href="https://github.com/vagahbond"  target="_top">vagahbond</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added phan language server for PHP</p></li><li class="listitem"><p>Added phpactor language server for PHP</p></li></ul></div><p><a class="link" href="https://github.com/horriblename"  target="_top">horriblename</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added transparency support for tokyonight theme</p></li><li class="listitem"><p>Fixed a bug where cmp’s close and scrollDocs mappings wasn’t working</p></li><li class="listitem"><p>Streamlined and simplified extra plugin API with the addition of
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.extraPlugins"  ><code class="option">vim.extraPlugins</code></a></p></li><li class="listitem"><p>Allow using command names in place of LSP packages to avoid automatic
 | 
				
			||||||
 | 
					installation</p></li><li class="listitem"><p>Add lua LSP and Treesitter support, and neodev.nvim plugin support</p></li><li class="listitem"><p>Add <a class="xref" href="options.html#opt-vim.lsp.mappings.toggleFormatOnSave"  ><code class="option">vim.lsp.mappings.toggleFormatOnSave</code></a> keybind</p></li></ul></div><p><a class="link" href="https://github.com/amanse"  target="_top">amanse</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added daily notes options for obsidian plugin</p></li><li class="listitem"><p>Added <code class="literal">jdt-language-server</code> for Java</p></li></ul></div><p><a class="link" href="https://github.com/yavko"  target="_top">yavko</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added Deno Language Server for Javascript/Typescript</p></li><li class="listitem"><p>Added support for multiple languages under <code class="literal">vim.spellChecking.languages</code>, and
 | 
				
			||||||
 | 
					added vim-dirtytalk through <code class="literal">vim.spellChecking.enableProgrammingWordList</code></p></li></ul></div><p><a class="link" href="https://github.com/FrothyMarrow"  target="_top">frothymarrow</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Renamed <code class="literal">vim.visuals.cursorWordline</code> to <code class="literal">vim.visuals.cursorline.enable</code></p></li><li class="listitem"><p>Added <code class="literal">vim.visuals.cursorline.lineNumbersOnly</code> to display cursorline only in
 | 
				
			||||||
 | 
					the presence of line numbers</p></li><li class="listitem"><p>Added Oxocarbon to the list of available themes.</p></li></ul></div><p><a class="link" href="https://github.com/notashelf"  target="_top">notashelf</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added GitHub Copilot to nvim-cmp completion sources.</p></li><li class="listitem"><p>Added <a class="xref" href="options.html#opt-vim.ui.borders.enable"  ><code class="option">vim.ui.borders.enable</code></a> for global and individual plugin border
 | 
				
			||||||
 | 
					configuration.</p></li><li class="listitem"><p>LSP integrated breadcrumbs with <a class="xref" href="options.html#opt-vim.ui.breadcrumbs.enable"  ><code class="option">vim.ui.breadcrumbs.enable</code></a> through
 | 
				
			||||||
 | 
					nvim-navic</p></li><li class="listitem"><p>LSP navigation helper with nvim-navbuddy, depends on nvim-navic (automatically
 | 
				
			||||||
 | 
					enabled if navic is enabled)</p></li><li class="listitem"><p>Added nvim-navic integration for Catppuccin theme</p></li><li class="listitem"><p>Fixed mismatching Zig language description</p></li><li class="listitem"><p>Added support for <code class="literal">statix</code> and <code class="literal">deadnix</code> through
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.languages.nix.extraDiagnostics.types"  ><code class="option">vim.languages.nix.extraDiagnostics.types</code></a></p></li><li class="listitem"><p>Added <code class="literal">lsp_lines</code> plugin for showing diagnostic messages</p></li><li class="listitem"><p>Added a configuration option for choosing the leader key</p></li><li class="listitem"><p>The package used for neovim is now customizable by the user, using
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.package"  ><code class="option">vim.package</code></a>. For best results, always use an unwrapped package</p></li><li class="listitem"><p>Added highlight-undo plugin for highlighting undo/redo targets</p></li><li class="listitem"><p>Added bash LSP and formatter support</p></li><li class="listitem"><p>Disabled Lualine LSP status indicator for Toggleterm buffer</p></li><li class="listitem"><p>Added <code class="literal">nvim-docs-view</code>, a plugin to display LSP hover documentation in a side
 | 
				
			||||||
 | 
					panel</p></li><li class="listitem"><p>Switched to <code class="literal">nixosOptionsDoc</code> in option documentation. To quote home-manager
 | 
				
			||||||
 | 
					commit: “Output is mostly unchanged aside from some minor typographical and
 | 
				
			||||||
 | 
					formatting changes, along with better source links.”</p></li><li class="listitem"><p>Updated indent-blankine.nvim to v3 - this comes with a few option changes,
 | 
				
			||||||
 | 
					which will be migrated with <code class="literal">renamedOptionModule</code></p></li></ul></div><p><a class="link" href="https://poz.pet"  target="_top">poz</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Fixed scrollOffset not being used</p></li><li class="listitem"><p>Updated clangd to 16</p></li><li class="listitem"><p>Disabled <code class="literal">useSystemClipboard</code> by default</p></li></ul></div><p><a class="link" href="https://github.com/ksonj"  target="_top">ksonj</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Add support to change mappings to utility/surround</p></li><li class="listitem"><p>Add black-and-isort python formatter</p></li><li class="listitem"><p>Removed redundant “Enable …” in <code class="literal">mkEnableOption</code> descriptions</p></li><li class="listitem"><p>Add options to modify LSP key bindings and add proper which-key descriptions</p></li><li class="listitem"><p>Changed type of <code class="literal">statusline.lualine.activeSection</code> and
 | 
				
			||||||
 | 
					<code class="literal">statusline.lualine.inactiveSection</code> from <code class="literal">attrsOf str</code> to
 | 
				
			||||||
 | 
					<code class="literal">attrsOf (listOf str)</code></p></li><li class="listitem"><p>Added <code class="literal">statusline.lualine.extraActiveSection</code> and
 | 
				
			||||||
 | 
					<code class="literal">statusline.lualine.extraInactiveSection</code></p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.6" class="title" >Release 0.6   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-breaking-changes-and-migration-guide">Breaking Changes and Migration Guide</a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-release-0.6-changelog">Changelog</a> </span></dt> </dl></div><p>Release notes for release 0.6</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-breaking-changes-and-migration-guide" class="title" style="clear: both">Breaking Changes and Migration Guide   </h2>  </div> </div></div><p>In v0.6 we are introducing <code class="literal">setupOpts</code>: many plugin related options are moved
 | 
				
			||||||
 | 
					into their respective <code class="literal">setupOpts</code> submodule, e.g. <code class="literal">nvimTree.disableNetrw</code> is
 | 
				
			||||||
 | 
					renamed to <code class="literal">nvimTree.setupOpts.disable_netrw</code>.</p><p><span class="emphasis"><em>Why?</em></span> in short, you can now pass in anything to setupOpts and it will be passed
 | 
				
			||||||
 | 
					to your <code class="literal">require'plugin'.setup{...}</code>. No need to wait for us to support every
 | 
				
			||||||
 | 
					single plugin option.</p><p>The warnings when you rebuild your config should be enough to guide you through
 | 
				
			||||||
 | 
					what you need to do, if there’s an option that was renamed but wasn’t listed in
 | 
				
			||||||
 | 
					the warning, please file a bug report!</p><p>To make your migration process less annoying, here’s a keybind that will help
 | 
				
			||||||
 | 
					you with renaming stuff from camelCase to snake_case (you’ll be doing that a
 | 
				
			||||||
 | 
					lot):</p><pre><code class="programlisting lua">-- paste this in a temp.lua file and load it in vim with :source /path/to/temp.lua
 | 
				
			||||||
 | 
					function camelToSnake()
 | 
				
			||||||
 | 
					    -- Get the current word under the cursor
 | 
				
			||||||
 | 
					    local word = vim.fn.expand("<cword>")
 | 
				
			||||||
 | 
					    -- Replace each capital letter with an underscore followed by its lowercase equivalent
 | 
				
			||||||
 | 
					    local snakeCase = string.gsub(word, "%u", function(match)
 | 
				
			||||||
 | 
					        return "_" .. string.lower(match)
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
 | 
					    -- Remove the leading underscore if present
 | 
				
			||||||
 | 
					    if string.sub(snakeCase, 1, 1) == "_" then
 | 
				
			||||||
 | 
					        snakeCase = string.sub(snakeCase, 2)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    vim.fn.setreg(vim.v.register, snakeCase)
 | 
				
			||||||
 | 
					    -- Select the word under the cursor and paste
 | 
				
			||||||
 | 
					    vim.cmd("normal! viwP")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vim.api.nvim_set_keymap('n', '<leader>a', ':lua camelToSnake()<CR>', { noremap = true, silent = true })
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.6-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><p><a class="link" href="https://github.com/ksonj"  target="_top">ksonj</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added Terraform language support.</p></li><li class="listitem"><p>Added <code class="literal">ChatGPT.nvim</code>, which can be enabled with
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.assistant.chatgpt.enable"  ><code class="option">vim.assistant.chatgpt.enable</code></a>. Do keep in mind that this option
 | 
				
			||||||
 | 
					requires <code class="literal">OPENAI_API_KEY</code> environment variable to be set.</p></li></ul></div><p><a class="link" href="https://github.com/donnerinoern"  target="_top">donnerinoern</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added Gruvbox theme.</p></li><li class="listitem"><p>Added marksman LSP for Markdown.</p></li><li class="listitem"><p>Fixed markdown preview with Glow not working and added an option for changing
 | 
				
			||||||
 | 
					the preview keybind.</p></li><li class="listitem"><p>colorizer.nvim: switched to a maintained fork.</p></li><li class="listitem"><p>Added <code class="literal">markdown-preview.nvim</code>, moved <code class="literal">glow.nvim</code> to a brand new
 | 
				
			||||||
 | 
					<code class="literal">vim.utility.preview</code> category.</p></li></ul></div><p><a class="link" href="https://github.com/elijahimmer"  target="_top">elijahimmer</a></p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Added rose-pine theme.</p></li></ul></div><p><a class="link" href="https://poz.pet"  target="_top">poz</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Added <code class="literal">vim.autocomplete.alwaysComplete</code>. Allows users to have the autocomplete
 | 
				
			||||||
 | 
					window popup only when manually activated.</p></li></ul></div><p><a class="link" href="https://github.com/horriblename"  target="_top">horriblename</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Fixed empty winbar when breadcrumbs are disabled.</p></li><li class="listitem"><p>Added custom <code class="literal">setupOpts</code> for various plugins.</p></li><li class="listitem"><p>Removed support for deprecated plugin “nvim-compe”.</p></li><li class="listitem"><p>Moved most plugins to <code class="literal">setupOpts</code> method.</p></li></ul></div><p><a class="link" href="https://github.com/frothymarrow"  target="_top">frothymarrow</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Added option <code class="literal">vim.luaPackages</code> to wrap neovim with extra Lua packages.</p></li><li class="listitem"><p>Rewrote the entire <code class="literal">fidget.nvim</code> module to include extensive configuration
 | 
				
			||||||
 | 
					options. Option <code class="literal">vim.fidget-nvim.align.bottom</code> has been removed in favor of
 | 
				
			||||||
 | 
					<code class="literal">vim.fidget-nvim.notification.window.align</code>, which now supports <code class="literal">top</code> and
 | 
				
			||||||
 | 
					<code class="literal">bottom</code> values. <code class="literal">vim.fidget-nvim.align.right</code> has no longer any equivalent
 | 
				
			||||||
 | 
					and also has been removed.</p></li><li class="listitem"><p><code class="literal">which-key.nvim</code> categories can now be customized through
 | 
				
			||||||
 | 
					<a class="link" href="options.html#opt-vim.binds.whichKey.register"  >vim.binds.whichKey.register</a></p></li><li class="listitem"><p>Added <code class="literal">magick</code> to <code class="literal">vim.luaPackages</code> for <code class="literal">image.nvim</code>.</p></li><li class="listitem"><p>Added <code class="literal">alejandra</code> to the default devShell.</p></li><li class="listitem"><p>Migrated neovim-flake to <code class="literal">makeNeovimUnstable</code> wrapper.</p></li></ul></div><p><a class="link" href="https://github.com/notashelf"  target="_top">notashelf</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Finished moving to <code class="literal">nixosOptionsDoc</code> in the documentation and changelog. All
 | 
				
			||||||
 | 
					documentation options and files are fully free of Asciidoc, and will now use
 | 
				
			||||||
 | 
					Nixpkgs flavored markdown.</p></li><li class="listitem"><p>Bumped plugin inputs to their latest versions.</p></li><li class="listitem"><p>Deprecated <code class="literal">presence.nvim</code> in favor of <code class="literal">neocord</code>. This means
 | 
				
			||||||
 | 
					<code class="literal">vim.rich-presence.presence-nvim</code> is removed and will throw a warning if used.
 | 
				
			||||||
 | 
					You are recommended to rewrite your neocord configuration from scratch based
 | 
				
			||||||
 | 
					on the. <a class="link" href="https://github.com/IogaMaster/neocord"  target="_top">official documentation</a></p></li><li class="listitem"><p>Removed Tabnine plugin due to the usage of imperative tarball downloads. If
 | 
				
			||||||
 | 
					you’d like to see it back, please create an issue.</p></li><li class="listitem"><p>Added support for css and tailwindcss through
 | 
				
			||||||
 | 
					vscode-language-servers-extracted & tailwind-language-server. Those can be
 | 
				
			||||||
 | 
					enabled through <code class="literal">vim.languages.css</code> and <code class="literal">vim.languages.tailwind</code>.</p></li><li class="listitem"><p>Lualine module now allows customizing <code class="literal">always_divide_middle</code>, <code class="literal">ignore_focus</code>
 | 
				
			||||||
 | 
					and <code class="literal">disabled_filetypes</code> through the new options:
 | 
				
			||||||
 | 
					<a class="link" href="options.html#opt-vim.statusline.lualine.alwaysDivideMiddle"  >vim.statusline.lualine.alwaysDivideMiddle</a>,
 | 
				
			||||||
 | 
					<a class="link" href="options.html#opt-vim.statusline.lualine.ignoreFocus"  >vim.statusline.lualine.ignoreFocus</a>
 | 
				
			||||||
 | 
					and
 | 
				
			||||||
 | 
					<a class="link" href="options.html#opt-vim.statusline.lualine.disabledFiletypes"  >vim.statusline.lualine.disabledFiletypes</a>.</p></li><li class="listitem"><p>Updated all plugin inputs to their latest versions (<span class="strong"><strong>21.04.2024</strong></span>) - this
 | 
				
			||||||
 | 
					brought minor color changes to the Catppuccin theme.</p></li><li class="listitem"><p>Moved home-manager module entrypoint to <code class="literal">flake/modules</code> and added an
 | 
				
			||||||
 | 
					experimental Nixos module. This requires further testing before it can be
 | 
				
			||||||
 | 
					considered ready for use.</p></li><li class="listitem"><p>Made lib calls explicit. E.g. <code class="literal">lib.strings.optionalString</code> instead of
 | 
				
			||||||
 | 
					<code class="literal">lib.optionalString</code>. This is a pattern expected to be followed by all
 | 
				
			||||||
 | 
					contributors in the future.</p></li><li class="listitem"><p>Added <code class="literal">image.nvim</code> for image previews.</p></li><li class="listitem"><p>The final neovim package is now exposed. This means you can build the neovim
 | 
				
			||||||
 | 
					package that will be added to your package list without rebuilding your system
 | 
				
			||||||
 | 
					to test if your configuration yields a broken package.</p></li><li class="listitem"><p>Changed the tree structure to distinguish between core options and plugin
 | 
				
			||||||
 | 
					options.</p></li><li class="listitem"><p>Added plugin auto-discovery from plugin inputs. This is mostly from
 | 
				
			||||||
 | 
					<a class="link" href="https://github.com/jordanisaacs/neovim-flake"  target="_top">JordanIsaac’s neovim-flake</a>.
 | 
				
			||||||
 | 
					Allows contributors to add plugin inputs with the <code class="literal">plugin-</code> prefix to have
 | 
				
			||||||
 | 
					them automatically discovered for the <code class="literal">plugin</code> type in <code class="literal">lib/types</code>.</p></li><li class="listitem"><p>Moved internal <code class="literal">wrapLuaConfig</code> to the extended library, structured its
 | 
				
			||||||
 | 
					arguments to take <code class="literal">luaBefore</code>, <code class="literal">luaConfig</code> and <code class="literal">luaAfter</code> as strings, which
 | 
				
			||||||
 | 
					are then concatted inside a lua block.</p></li><li class="listitem"><p>Added <a class="xref" href="options.html#opt-vim.luaConfigPre"  ><code class="option">vim.luaConfigPre</code></a> and <a class="xref" href="options.html#opt-vim.luaConfigPost"  ><code class="option">vim.luaConfigPost</code></a> for inserting
 | 
				
			||||||
 | 
					verbatim Lua configuration before and after the resolved Lua DAG respectively.
 | 
				
			||||||
 | 
					Both of those options take strings as the type, so you may read the contents
 | 
				
			||||||
 | 
					of a Lua file from a given path.</p></li><li class="listitem"><p>Added <code class="literal">vim.spellchecking.ignoredFiletypes</code> and
 | 
				
			||||||
 | 
					<code class="literal">vim.spellChecking.programmingWordlist.enable</code> for ignoring certain filetypes
 | 
				
			||||||
 | 
					in spellchecking and enabling <code class="literal">vim-dirtytalk</code> respectively. The previously
 | 
				
			||||||
 | 
					used <code class="literal">vim.spellcheck.vim-dirtytalk</code> aliases to the latter option.</p></li><li class="listitem"><p>Exposed <code class="literal">withRuby</code>, <code class="literal">withNodeJs</code>, <code class="literal">withPython3</code>, and <code class="literal">python3Packages</code> from
 | 
				
			||||||
 | 
					the <code class="literal">makeNeovimConfig</code> function under their respective options.</p></li><li class="listitem"><p>Added <a class="xref" href="options.html#opt-vim.extraPackages"  ><code class="option">vim.extraPackages</code></a> for appending additional packages to the
 | 
				
			||||||
 | 
					wrapper PATH, making said packages available while inside the Neovim session.</p></li><li class="listitem"><p>Made Treesitter options configurable, and moved treesitter-context to
 | 
				
			||||||
 | 
					<code class="literal">setupOpts</code> while it is enabled.</p></li><li class="listitem"><p>Added <a class="xref" href="options.html#opt-vim.notify.nvim-notify.setupOpts.render"  ><code class="option">vim.notify.nvim-notify.setupOpts.render</code></a> which takes either a
 | 
				
			||||||
 | 
					string of enum, or a Lua function. The default is “compact”, but you may
 | 
				
			||||||
 | 
					change it according to nvim-notify documentation.</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="chapter"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.7" class="title" >Release 0.7   </h2>  </div> </div></div><div class="toc"> <p><strong>Table of Contents</strong></p> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-breaking-changes-and-migration-guide-0-7">Breaking Changes and Migration Guide</a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-release-0.7-changelog">Changelog</a> </span></dt> </dl></div><p>Release notes for release 0.7</p><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-breaking-changes-and-migration-guide-0-7" class="title" style="clear: both">Breaking Changes and Migration Guide   </h2>  </div> </div></div><div class="toc"> <dl class="toc">  <dt> <span class="section">  <a href="release-notes.html#sec-vim-configrc-removed"><code class="literal">vim.configRC</code> removed</a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-vim-maps-rewrite"><code class="literal">vim.maps</code> rewrite</a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-nvim-code-action-menu-deprecation"><code class="literal">vim.lsp.nvimCodeActionMenu</code> removed in favor of <code class="literal">vim.ui.fastaction</code></a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-type-based-modules-removed"><code class="literal">type</code> based modules removed</a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-nixpkgs-fmt-deprecation"><code class="literal">nixpkgs-fmt</code> removed in favor of <code class="literal">nixfmt</code></a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-leader-changes">leader changes</a> </span></dt><dt> <span class="section">  <a href="release-notes.html#sec-vim-opt-changes"><code class="literal">vim.*</code> changes</a> </span></dt> </dl></div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-vim-configrc-removed" class="title" ><code class="literal">vim.configRC</code> removed   </h3>  </div> </div></div><p>In v0.7 we are removing <code class="literal">vim.configRC</code> in favor of making <code class="literal">vim.luaConfigRC</code> the
 | 
				
			||||||
 | 
					top-level DAG, and thereby making the entire configuration Lua based. This
 | 
				
			||||||
 | 
					change introduces a few breaking changes:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p><code class="literal">vim.configRC</code> has been removed, which means that you have to convert all of
 | 
				
			||||||
 | 
					your custom vimscript-based configuration to Lua. As for how to do that, you
 | 
				
			||||||
 | 
					will have to consult the Neovim documentation and your search engine.</p></li><li class="listitem"><p>After migrating your Vimscript-based configuration to Lua, you might not be
 | 
				
			||||||
 | 
					able to use the same entry names in <code class="literal">vim.luaConfigRC</code>, because those have also
 | 
				
			||||||
 | 
					slightly changed. See the new <a class="link" href="/index.xhtml#ch-dag-entries"  target="_top">DAG entries in nvf manual</a> for more details.</p></li></ul></div><p><span class="strong"><strong>Why?</strong></span></p><p>Neovim being an aggressive refactor of Vim, is designed to be mainly Lua based;
 | 
				
			||||||
 | 
					making good use of its extensive Lua API. Additionally, Vimscript is slow and
 | 
				
			||||||
 | 
					brings unnecessary performance overhead while working with different
 | 
				
			||||||
 | 
					configuration formats.</p>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-vim-maps-rewrite" class="title" ><code class="literal">vim.maps</code> rewrite   </h3>  </div> </div></div><p>Instead of specifying map modes using submodules (e.g., <code class="literal">vim.maps.normal</code>), a
 | 
				
			||||||
 | 
					new <code class="literal">vim.keymaps</code> submodule with support for a <code class="literal">mode</code> option has been
 | 
				
			||||||
 | 
					introduced. It can be either a string, or a list of strings, where a string
 | 
				
			||||||
 | 
					represents the short-name of the map mode(s), that the mapping should be set
 | 
				
			||||||
 | 
					for. See <code class="literal">:help map-modes</code> for more information.</p><p>For example:</p><pre><code class="programlisting nix">vim.maps.normal."<leader>m" = { ... };
 | 
				
			||||||
 | 
					</code></pre><p>has to be replaced by</p><pre><code class="programlisting nix">vim.keymaps = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    key = "<leader>m";
 | 
				
			||||||
 | 
					    mode = "n";
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  ...
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-nvim-code-action-menu-deprecation" class="title" ><code class="literal">vim.lsp.nvimCodeActionMenu</code> removed in favor of <code class="literal">vim.ui.fastaction</code>   </h3>  </div> </div></div><p>The nvim-code-action-menu plugin has been archived and broken for a long time,
 | 
				
			||||||
 | 
					so it’s being replaced with a young, but better alternative called
 | 
				
			||||||
 | 
					fastaction.nvim. Simply remove everything set under
 | 
				
			||||||
 | 
					<code class="literal">vim.lsp.nvimCodeActionMenu</code>, and set <code class="literal">vim.ui.fastaction.enable</code> to <code class="literal">true</code>.</p><p>Note that we are looking to add more alternatives in the future like
 | 
				
			||||||
 | 
					dressing.nvim and actions-preview.nvim, in case fastaction doesn’t work for
 | 
				
			||||||
 | 
					everyone.</p>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-type-based-modules-removed" class="title" ><code class="literal">type</code> based modules removed   </h3>  </div> </div></div><p>As part of the autocompletion rewrite, modules that used to use a <code class="literal">type</code> option
 | 
				
			||||||
 | 
					have been replaced by per-plugin modules instead. Since both modules only had
 | 
				
			||||||
 | 
					one type, you can simply change</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p><code class="literal">vim.autocomplete.*</code> -> <code class="literal">vim.autocomplete.nvim-cmp.*</code></p></li><li class="listitem"><p><code class="literal">vim.autopairs.enable</code> -> <code class="literal">vim.autopairs.nvim-autopairs.enable</code></p></li></ul></div>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-nixpkgs-fmt-deprecation" class="title" ><code class="literal">nixpkgs-fmt</code> removed in favor of <code class="literal">nixfmt</code>   </h3>  </div> </div></div><p><code class="literal">nixpkgs-fmt</code> has been archived for a while, and it’s finally being removed in
 | 
				
			||||||
 | 
					favor of nixfmt (more information can be found
 | 
				
			||||||
 | 
					<a class="link" href="https://github.com/nix-community/nixpkgs-fmt?tab=readme-ov-file#nixpkgs-fmt---nix-code-formatter-for-nixpkgs"  target="_top">here</a>.</p><p>To migrate to <code class="literal">nixfmt</code>, simply change <code class="literal">vim.languages.nix.format.type</code> to
 | 
				
			||||||
 | 
					<code class="literal">nixfmt</code>.</p>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-leader-changes" class="title" >leader changes   </h3>  </div> </div></div><p>This has been deprecated in favor of using the more generic <code class="literal">vim.globals</code> (you
 | 
				
			||||||
 | 
					can use <code class="literal">vim.globals.mapleader</code> to change this instead).</p><p>Rust specific keymaps now use <code class="literal">maplocalleader</code> instead of <code class="literal">localleader</code> by
 | 
				
			||||||
 | 
					default. This is to avoid conflicts with other modules. You can change
 | 
				
			||||||
 | 
					<code class="literal">maplocalleader</code> with <code class="literal">vim.globals.maplocalleader</code>, but it’s recommended to set
 | 
				
			||||||
 | 
					it to something other than <code class="literal">mapleader</code> to avoid conflicts.</p>
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h3 id="sec-vim-opt-changes" class="title" ><code class="literal">vim.*</code> changes   </h3>  </div> </div></div><p>Inline with the <a class="link" href="release-notes.html#sec-leader-changes" title="leader changes" >leader changes</a>, we have removed some
 | 
				
			||||||
 | 
					options that were under <code class="literal">vim</code> as convenient shorthands for <code class="literal">vim.o.*</code> options.</p><div class="warning"><h3 class="title">Warning</h3><p>As v0.7 features the addition of <a class="xref" href="options.html#opt-vim.options"  ><code class="option">vim.options</code></a>, those options are now
 | 
				
			||||||
 | 
					considered as deprecated. You should migrate to the appropriate options in the
 | 
				
			||||||
 | 
					<code class="literal">vim.options</code> submodule.</p></div><p>The changes are, in no particular order:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p><code class="literal">colourTerm</code>, <code class="literal">mouseSupport</code>, <code class="literal">cmdHeight</code>, <code class="literal">updateTime</code>, <code class="literal">mapTime</code>,
 | 
				
			||||||
 | 
					<code class="literal">cursorlineOpt</code>, <code class="literal">splitBelow</code>, <code class="literal">splitRight</code>, <code class="literal">autoIndent</code> and <code class="literal">wordWrap</code> have
 | 
				
			||||||
 | 
					been mapped to their <a class="xref" href="options.html#opt-vim.options"  ><code class="option">vim.options</code></a> equivalents. Please see the module
 | 
				
			||||||
 | 
					definition for the updated options.</p></li><li class="listitem"><p><code class="literal">tabWidth</code> has been <span class="strong"><strong>removed</strong></span> as it lead to confusing behaviour. You can
 | 
				
			||||||
 | 
					replicate the same functionality by setting <code class="literal">shiftwidth</code>, <code class="literal">tabstop</code> and
 | 
				
			||||||
 | 
					<code class="literal">softtabstop</code> under <code class="literal">vim.options</code> as you see fit.</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div><div class="section"> <div class="titlepage">  <div>   <div>    <h2 id="sec-release-0.7-changelog" class="title" style="clear: both">Changelog   </h2>  </div> </div></div><p><a class="link" href="https://github.com/ItsSorae"  target="_top">ItsSorae</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add support for <a class="link" href="https://typst.app/"  target="_top">typst</a> under <code class="literal">vim.languages.typst</code> This
 | 
				
			||||||
 | 
					will enable the <code class="literal">typst-lsp</code> language server, and the <code class="literal">typstfmt</code> formatter</p></li></ul></div><p><a class="link" href="https://github.com/frothymarrow"  target="_top">frothymarrow</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Modified type for
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.visuals.fidget-nvim.setupOpts.progress.display.overrides"  ><code class="option">vim.visuals.fidget-nvim.setupOpts.progress.display.overrides</code></a> from
 | 
				
			||||||
 | 
					<code class="literal">anything</code> to a <code class="literal">submodule</code> for better type checking.</p></li><li class="listitem"><p>Fix null <code class="literal">vim.lsp.mappings</code> generating an error and not being filtered out.</p></li><li class="listitem"><p>Add basic transparency support for <code class="literal">oxocarbon</code> theme by setting the highlight
 | 
				
			||||||
 | 
					group for <code class="literal">Normal</code>, <code class="literal">NormalFloat</code>, <code class="literal">LineNr</code>, <code class="literal">SignColumn</code> and optionally
 | 
				
			||||||
 | 
					<code class="literal">NvimTreeNormal</code> to <code class="literal">none</code>.</p></li><li class="listitem"><p>Fix <a class="xref" href="options.html#opt-vim.ui.smartcolumn.setupOpts.custom_colorcolumn"  ><code class="option">vim.ui.smartcolumn.setupOpts.custom_colorcolumn</code></a> using the wrong
 | 
				
			||||||
 | 
					type <code class="literal">int</code> instead of the expected type <code class="literal">string</code>.</p></li></ul></div><p><a class="link" href="https://github.com/horriblename"  target="_top">horriblename</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Fix broken treesitter-context keybinds in visual mode</p></li><li class="listitem"><p>Deprecate use of <code class="literal">__empty</code> to define empty tables in Lua. Empty attrset are no
 | 
				
			||||||
 | 
					longer filtered and thus should be used instead.</p></li><li class="listitem"><p>Add dap-go for better dap configurations</p></li><li class="listitem"><p>Make noice.nvim customizable</p></li><li class="listitem"><p>Standardize border style options and add custom borders</p></li><li class="listitem"><p>Remove <code class="literal">vim.disableDefaultRuntimePaths</code> in wrapper options.</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>As nvf uses <code class="literal">$NVIM_APP_NAME</code> as of recent changes, we can safely assume any
 | 
				
			||||||
 | 
					configuration in <code class="literal">$XDG_CONFIG_HOME/nvf</code> is intentional.</p></li></ul></div></li></ul></div><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Switch from <a class="link" href="https://github.com/simrat39/rust-tools.nvim"  target="_top">rust-tools.nvim</a> to the more feature-packed <a class="link" href="https://github.com/mrcjkb/rustaceanvim"  target="_top">rustaceanvim</a>. This
 | 
				
			||||||
 | 
					switch entails a whole bunch of new features and options, so you are
 | 
				
			||||||
 | 
					recommended to go through rustacean.nvim’s README to take a closer look at its
 | 
				
			||||||
 | 
					features and usage</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add <a class="link" href="https://github.com/mrcjkb/lz.n"  target="_top">lz.n</a> support and lazy-load some builtin plugins.</p></li><li class="listitem"><p>Add simpler helper functions for making keymaps</p></li></ul></div><p><a class="link" href="https://poz.pet"  target="_top">poz</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Add <a class="link" href="https://github.com/ocaml/ocaml-lsp"  target="_top">ocaml-lsp</a> support</p></li><li class="listitem"><p>Fix “Emac” typo</p></li><li class="listitem"><p>Add <a class="link" href="https://github.com/otavioschwanck/new-file-template.nvim"  target="_top">new-file-template.nvim</a> to automatically fill new file contents using
 | 
				
			||||||
 | 
					templates</p></li><li class="listitem"><p>Make <a class="link" href="https://github.com/nvim-neo-tree/neo-tree.nvim"  target="_top">neo-tree.nvim</a> display file icons properly by enabling
 | 
				
			||||||
 | 
					<code class="literal">visuals.nvimWebDevicons</code></p></li></ul></div><p><a class="link" href="https://github.com/diniamo"  target="_top">diniamo</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Move the <code class="literal">theme</code> dag entry to before <code class="literal">luaScript</code>.</p></li><li class="listitem"><p>Add rustfmt as the default formatter for Rust.</p></li><li class="listitem"><p>Enabled the terminal integration of catppuccin for theming Neovim’s built-in
 | 
				
			||||||
 | 
					terminal (this also affects toggleterm).</p></li><li class="listitem"><p>Migrate bufferline to setupOpts for more customizability</p></li><li class="listitem"><p>Use <code class="literal">clangd</code> as the default language server for C languages</p></li><li class="listitem"><p>Expose <code class="literal">lib.nvim.types.pluginType</code>, which for example allows the user to
 | 
				
			||||||
 | 
					create abstractions for adding plugins</p></li><li class="listitem"><p>Migrate indent-blankline to setupOpts for more customizability. While the
 | 
				
			||||||
 | 
					plugin’s options can now be found under <code class="literal">indentBlankline.setupOpts</code>, the
 | 
				
			||||||
 | 
					previous iteration of the module also included out of place/broken options,
 | 
				
			||||||
 | 
					which have been removed for the time being. These are:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p><code class="literal">listChar</code> - this was already unused</p></li><li class="listitem"><p><code class="literal">fillChar</code> - this had nothing to do with the plugin, please configure it
 | 
				
			||||||
 | 
					yourself by adding <code class="literal">vim.opt.listchars:append({ space = '<char>' })</code> to your
 | 
				
			||||||
 | 
					lua configuration</p></li><li class="listitem"><p><code class="literal">eolChar</code> - this also had nothing to do with the plugin, please configure it
 | 
				
			||||||
 | 
					yourself by adding <code class="literal">vim.opt.listchars:append({ eol = '<char>' })</code> to your
 | 
				
			||||||
 | 
					lua configuration</p></li></ul></div></li><li class="listitem"><p>Replace <code class="literal">vim.lsp.nvimCodeActionMenu</code> with <code class="literal">vim.ui.fastaction</code>, see the
 | 
				
			||||||
 | 
					breaking changes section above for more details</p></li><li class="listitem"><p>Add a <code class="literal">setupOpts</code> option to nvim-surround, which allows modifying options that
 | 
				
			||||||
 | 
					aren’t defined in nvf. Move the alternate nvim-surround keybinds to use
 | 
				
			||||||
 | 
					<code class="literal">setupOpts</code>.</p></li><li class="listitem"><p>Remove <code class="literal">autopairs.type</code>, and rename <code class="literal">autopairs.enable</code> to
 | 
				
			||||||
 | 
					<code class="literal">autopairs.nvim-autopairs.enable</code>. The new
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.autopairs.nvim-autopairs.enable"  ><code class="option">vim.autopairs.nvim-autopairs.enable</code></a> supports <code class="literal">setupOpts</code> format by
 | 
				
			||||||
 | 
					default.</p></li><li class="listitem"><p>Refactor of <code class="literal">nvim-cmp</code> and completion related modules</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>Remove <code class="literal">autocomplete.type</code> in favor of per-plugin enable options such as
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.autocomplete.nvim-cmp.enable"  ><code class="option">vim.autocomplete.nvim-cmp.enable</code></a>.</p></li><li class="listitem"><p>Deprecate legacy Vimsnip in favor of Luasnip, and integrate
 | 
				
			||||||
 | 
					friendly-snippets for bundled snippets. <a class="xref" href="options.html#opt-vim.snippets.luasnip.enable"  ><code class="option">vim.snippets.luasnip.enable</code></a>
 | 
				
			||||||
 | 
					can be used to toggle Luasnip.</p></li><li class="listitem"><p>Add sorting function options for completion sources under
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators"  ><code class="option">vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators</code></a></p></li></ul></div></li><li class="listitem"><p>Add C# support under <code class="literal">vim.languages.csharp</code>, with support for both
 | 
				
			||||||
 | 
					omnisharp-roslyn and csharp-language-server.</p></li><li class="listitem"><p>Add Julia support under <code class="literal">vim.languages.julia</code>. Note that the entirety of Julia
 | 
				
			||||||
 | 
					is bundled with nvf, if you enable the module, since there is no way to
 | 
				
			||||||
 | 
					provide only the LSP server.</p></li><li class="listitem"><p>Add <a class="link" href="https://github.com/diniamo/run.nvim"  target="_top"><code class="literal">run.nvim</code></a> support for running code
 | 
				
			||||||
 | 
					using cached commands.</p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Make Neovim’s configuration file entirely Lua based. This comes with a few
 | 
				
			||||||
 | 
					breaking changes:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p><code class="literal">vim.configRC</code> has been removed. You will need to migrate your entries to
 | 
				
			||||||
 | 
					Neovim-compliant Lua code, and add them to <code class="literal">vim.luaConfigRC</code> instead.
 | 
				
			||||||
 | 
					Existing vimscript configurations may be preserved in <code class="literal">vim.cmd</code> functions.
 | 
				
			||||||
 | 
					Please see <a class="link" href="https://neovim.io/doc/user/lua.html#vim.cmd()"  target="_top">Neovim documentation on <code class="literal">vim.cmd</code></a></p></li><li class="listitem"><p><code class="literal">vim.luaScriptRC</code> is now the top-level DAG, and the internal <code class="literal">vim.pluginRC</code>
 | 
				
			||||||
 | 
					has been introduced for setting up internal plugins. See the “DAG entries in
 | 
				
			||||||
 | 
					nvf” manual page for more information.</p></li></ul></div></li><li class="listitem"><p>Rewrite <code class="literal">vim.maps</code>, see the breaking changes section above.</p></li></ul></div><p><a class="link" href="https://github.com/notashelf"  target="_top">NotAShelf</a>:</p><div class="itemizedlist"><ul class="itemizedlist " style="list-style-type: disc;"><li class="listitem"><p>Add <code class="literal">deno fmt</code> as the default Markdown formatter. This will be enabled
 | 
				
			||||||
 | 
					automatically if you have autoformatting enabled, but can be disabled manually
 | 
				
			||||||
 | 
					if you choose to.</p></li><li class="listitem"><p>Add <code class="literal">vim.extraLuaFiles</code> for optionally sourcing additional lua files in your
 | 
				
			||||||
 | 
					configuration.</p></li><li class="listitem"><p>Refactor <code class="literal">programs.languages.elixir</code> to use lspconfig and none-ls for LSP and
 | 
				
			||||||
 | 
					formatter setups respectively. Diagnostics support is considered, and may be
 | 
				
			||||||
 | 
					added once the <a class="link" href="https://github.com/rrrene/credo"  target="_top">credo</a> linter has been added to nixpkgs. A pull request is
 | 
				
			||||||
 | 
					currently open.</p></li><li class="listitem"><p>Remove vim-tidal and friends.</p></li><li class="listitem"><p>Clean up Lualine module to reduce theme dependency on Catppuccin, and fixed
 | 
				
			||||||
 | 
					blending issues in component separators.</p></li><li class="listitem"><p>Add [ts-ereror-translator.nvim] extension of the TS language module, under
 | 
				
			||||||
 | 
					<code class="literal">vim.languages.ts.extensions.ts-error-translator</code> to aid with Typescript
 | 
				
			||||||
 | 
					development.</p></li><li class="listitem"><p>Add <a class="link" href="https://github.com/nvim-neo-tree/neo-tree.nvim"  target="_top">neo-tree.nvim</a> as an alternative file-tree plugin. It will be available
 | 
				
			||||||
 | 
					under <code class="literal">vim.filetree.neo-tree</code>, similar to nvimtree.</p></li><li class="listitem"><p>Add <code class="literal">nvf-print-config</code> & <code class="literal">nvf-print-config-path</code> helper scripts to Neovim
 | 
				
			||||||
 | 
					closure. Both of those scripts have been automatically added to your PATH upon
 | 
				
			||||||
 | 
					using neovimConfig or <code class="literal">programs.nvf.enable</code>.</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p><code class="literal">nvf-print-config</code> will display your <code class="literal">init.lua</code>, in full.</p></li><li class="listitem"><p><code class="literal">nvf-print-config-path</code> will display the path to <span class="emphasis"><em>a clone</em></span> of your
 | 
				
			||||||
 | 
					<code class="literal">init.lua</code>. This is not the path used by the Neovim wrapper, but an
 | 
				
			||||||
 | 
					identical clone.</p></li></ul></div></li><li class="listitem"><p>Add <code class="literal">vim.ui.breadcrumbs.lualine</code> to allow fine-tuning breadcrumbs behaviour on
 | 
				
			||||||
 | 
					Lualine. Only <code class="literal">vim.ui.breadcrumbs.lualine.winbar</code> is supported for the time
 | 
				
			||||||
 | 
					being.</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p><a class="xref" href="options.html#opt-vim.ui.breadcrumbs.lualine.winbar.enable"  ><code class="option">vim.ui.breadcrumbs.lualine.winbar.enable</code></a> has been added to allow
 | 
				
			||||||
 | 
					controlling the default behaviour of the <code class="literal">nvim-navic</code> component on Lualine,
 | 
				
			||||||
 | 
					which used to occupy <code class="literal">winbar.lualine_c</code> as long as breadcrumbs are enabled.</p></li><li class="listitem"><p><code class="literal">vim.ui.breadcrumbs.alwaysRender</code> has been renamed to
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.ui.breadcrumbs.lualine.winbar.alwaysRender"  ><code class="option">vim.ui.breadcrumbs.lualine.winbar.alwaysRender</code></a> to be conform to the
 | 
				
			||||||
 | 
					new format.</p></li></ul></div></li><li class="listitem"><p>Add <a class="link" href="https://github.com/detachhead/basedpyright"  target="_top">basedpyright</a> as a Python LSP
 | 
				
			||||||
 | 
					server and make it default.</p></li><li class="listitem"><p>Add <a class="link" href="https://github.com/python-lsp/python-lsp-server"  target="_top">python-lsp-server</a> as an
 | 
				
			||||||
 | 
					additional Python LSP server.</p></li><li class="listitem"><p>Add <a class="xref" href="options.html#opt-vim.options"  ><code class="option">vim.options</code></a> to set <code class="literal">vim.o</code> values in in your nvf configuration
 | 
				
			||||||
 | 
					without using additional Lua. See option documentation for more details.</p></li><li class="listitem"><p>Add <a class="xref" href="options.html#opt-vim.dashboard.dashboard-nvim.setupOpts"  ><code class="option">vim.dashboard.dashboard-nvim.setupOpts</code></a> to allow user
 | 
				
			||||||
 | 
					configuration for <a class="link" href="https://github.com/nvimdev/dashboard-nvim"  target="_top">dashboard.nvim</a></p></li><li class="listitem"><p>Update <code class="literal">lualine.nvim</code> input and add missing themes:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>Adds <code class="literal">ayu</code>, <code class="literal">gruvbox_dark</code>, <code class="literal">iceberg</code>, <code class="literal">moonfly</code>, <code class="literal">onedark</code>,
 | 
				
			||||||
 | 
					<code class="literal">powerline_dark</code> and <code class="literal">solarized_light</code> themes.</p></li></ul></div></li><li class="listitem"><p>Add <a class="xref" href="options.html#opt-vim.spellcheck.extraSpellWords"  ><code class="option">vim.spellcheck.extraSpellWords</code></a> to allow adding arbitrary
 | 
				
			||||||
 | 
					spellfiles to Neovim’s runtime with ease.</p></li><li class="listitem"><p>Add combined nvf configuration (<code class="literal">config.vim</code>) into the final package’s
 | 
				
			||||||
 | 
					<code class="literal">passthru</code> as <code class="literal">passthru.neovimConfiguration</code> for easier debugging.</p></li><li class="listitem"><p>Add support for <a class="link" href="https://github.com/rachartier/tiny-devicons-auto-colors.nvim"  target="_top">tiny-devicons-auto-colors</a> under
 | 
				
			||||||
 | 
					<code class="literal">vim.visuals.tiny-devicons-auto-colors</code></p></li><li class="listitem"><p>Move options that used to set <code class="literal">vim.o</code> values (e.g. <code class="literal">vim.wordWrap</code>) into
 | 
				
			||||||
 | 
					<code class="literal">vim.options</code> as default values. Some are left as they don’t have a direct
 | 
				
			||||||
 | 
					equivalent, but expect a switch eventually.</p></li></ul></div><p><a class="link" href="https://github.com/ppenguin"  target="_top">ppenguin</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Telescope:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>Fixed <code class="literal">project-nvim</code> command and keybinding</p></li><li class="listitem"><p>Added default ikeybind/command for <code class="literal">Telescope resume</code> (<code class="literal"><leader>fr</code>)</p></li></ul></div></li><li class="listitem"><p>Add <code class="literal">hcl</code> lsp/formatter (not the same as <code class="literal">terraform</code>, which is not useful for
 | 
				
			||||||
 | 
					e.g. <code class="literal">nomad</code> config files).</p></li></ul></div><p><a class="link" href="https://github.com/Soliprem"  target="_top">Soliprem</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add LSP and Treesitter support for R under <code class="literal">vim.languages.R</code>.</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: circle;"><li class="listitem"><p>Add formatter support for R, with styler and formatR as options</p></li></ul></div></li><li class="listitem"><p>Add Otter support under <code class="literal">vim.lsp.otter</code> and an assert to prevent conflict with
 | 
				
			||||||
 | 
					ccc</p></li><li class="listitem"><p>Fixed typo in Otter’s setupOpts</p></li><li class="listitem"><p>Add Neorg support under <code class="literal">vim.notes.neorg</code></p></li><li class="listitem"><p>Add LSP, diagnostics, formatter and Treesitter support for Kotlin under
 | 
				
			||||||
 | 
					<code class="literal">vim.languages.kotlin</code></p></li><li class="listitem"><p>changed default keybinds for leap.nvim to avoid altering expected behavior</p></li><li class="listitem"><p>Add LSP, formatter and Treesitter support for Vala under <code class="literal">vim.languages.vala</code></p></li><li class="listitem"><p>Add [Tinymist](https://github.com/Myriad-Dreamin/tinymist] as a formatter for
 | 
				
			||||||
 | 
					the Typst language module.</p></li><li class="listitem"><p>Add LSP and Treesitter support for Assembly under <code class="literal">vim.languages.assembly</code></p></li><li class="listitem"><p>Move <a class="link" href="https://github.com/folke/which-key.nvim"  target="_top">which-key</a> to the new spec</p></li><li class="listitem"><p>Add LSP and Treesitter support for Nushell under <code class="literal">vim.languages.nu</code></p></li><li class="listitem"><p>Add LSP and Treesitter support for Gleam under <code class="literal">vim.languages.gleam</code></p></li></ul></div><p><a class="link" href="https://github.com/Bloxx12"  target="_top">Bloxx12</a></p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add support for <a class="link" href="https://github.com/RRethy/base16-nvim"  target="_top">base16 theming</a> under
 | 
				
			||||||
 | 
					<code class="literal">vim.theme</code></p></li><li class="listitem"><p>Fix internal breakage in <code class="literal">elixir-tools</code> setup.</p></li></ul></div><p><a class="link" href="https://github.com/ksonj"  target="_top">ksonj</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add LSP support for Scala via
 | 
				
			||||||
 | 
					<a class="link" href="https://github.com/scalameta/nvim-metals"  target="_top">nvim-metals</a></p></li></ul></div><p><a class="link" href="https://github.com/nezia1"  target="_top">nezia1</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add <a class="link" href="https://github.com/biomejs/biome"  target="_top">biome</a> support for Typescript, CSS and
 | 
				
			||||||
 | 
					Svelte. Enable them via <a class="xref" href="options.html#opt-vim.languages.ts.format.type"  ><code class="option">vim.languages.ts.format.type</code></a>,
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.languages.css.format.type"  ><code class="option">vim.languages.css.format.type</code></a> and
 | 
				
			||||||
 | 
					<a class="xref" href="options.html#opt-vim.languages.svelte.format.type"  ><code class="option">vim.languages.svelte.format.type</code></a> respectively.</p></li><li class="listitem"><p>Replace <a class="link" href="https://github.com/nix-community/nixpkgs-fmt"  target="_top">nixpkgs-fmt</a> with
 | 
				
			||||||
 | 
					<a class="link" href="https://github.com/NixOS/nixfmt"  target="_top">nixfmt</a> (nixfmt-rfc-style).</p></li></ul></div><p><a class="link" href="https://github.com/Nowaaru"  target="_top">Nowaaru</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add <code class="literal">precognition-nvim</code>.</p></li></ul></div><p><a class="link" href="https://github.com/DamitusThyYeetus123"  target="_top">DamitusThyYeeticus123</a>:</p><div class="itemizedlist"><ul class="itemizedlist compact" style="list-style-type: disc;"><li class="listitem"><p>Add support for <a class="link" href="https://astro.build/"  target="_top">Astro</a> language server.</p></li></ul></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</div>  <div class="navfooter">
 | 
				
			||||||
 | 
					   <hr />
 | 
				
			||||||
 | 
					   <table width="100%" summary="Navigation footer">
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					    <td width="40%" align="left"><a accesskey="p" href="options.html">Prev</a> </td>
 | 
				
			||||||
 | 
					    <td width="20%" align="center"> </td>
 | 
				
			||||||
 | 
					    <td width="40%" align="right"> </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					    <tr>
 | 
				
			||||||
 | 
					     <td width="40%" align="left" valign="top">Appendix B. nvf Configuration Options </td>
 | 
				
			||||||
 | 
					     <td width="20%" align="center"><a accesskey="h" href="index.xhtml">Home</a></td>
 | 
				
			||||||
 | 
					     <td width="40%" align="right" valign="top"> </td>
 | 
				
			||||||
 | 
					    </tr>
 | 
				
			||||||
 | 
					   </table>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					 </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										10
									
								
								docs-preview-921/script/anchor-min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs-preview-921/script/anchor-min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										4
									
								
								docs-preview-921/script/anchor-use.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								docs-preview-921/script/anchor-use.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					document.addEventListener('DOMContentLoaded', function(event) {
 | 
				
			||||||
 | 
					  anchors.add('h1[id]:not(div.note h1, div.warning h1, div.tip h1, div.caution h1, div.important h1), h2[id]:not(div.note h2, div.warning h2, div.tip h2, div.caution h2, div.important h2), h3[id]:not(div.note h3, div.warning h3, div.tip h3, div.caution h3, div.important h3), h4[id]:not(div.note h4, div.warning h4, div.tip h4, div.caution h4, div.important h4), h5[id]:not(div.note h5, div.warning h5, div.tip h5, div.caution h5, div.important h5), h6[id]:not(div.note h6, div.warning h6, div.tip h6, div.caution h6, div.important h6)');
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										58
									
								
								docs-preview-921/script/search.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								docs-preview-921/script/search.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,58 @@
 | 
				
			||||||
 | 
					document.addEventListener("DOMContentLoaded", () => {
 | 
				
			||||||
 | 
					  if (!window.location.pathname.endsWith("options.html")) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const searchDiv = document.createElement("div");
 | 
				
			||||||
 | 
					  searchDiv.id = "search-bar";
 | 
				
			||||||
 | 
					  searchDiv.innerHTML = `
 | 
				
			||||||
 | 
					    <input type="text" id="search-input" placeholder="Search options by ID..." />
 | 
				
			||||||
 | 
					    <div id="search-results"></div>
 | 
				
			||||||
 | 
					  `;
 | 
				
			||||||
 | 
					  document.body.prepend(searchDiv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const dtElements = Array.from(document.querySelectorAll("dt"));
 | 
				
			||||||
 | 
					  const ddElements = Array.from(document.querySelectorAll("dd"));
 | 
				
			||||||
 | 
					  const dtOptionIds = dtElements.map(
 | 
				
			||||||
 | 
					    (dt) => dt.querySelector("a")?.id.toLowerCase() || "",
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (dtElements.length === 0 || ddElements.length === 0) {
 | 
				
			||||||
 | 
					    console.warn("Something went wrong, page may be loaded incorrectly.");
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const dtElementsData = dtElements.map((dt, index) => ({
 | 
				
			||||||
 | 
					    element: dt,
 | 
				
			||||||
 | 
					    id: dtOptionIds[index],
 | 
				
			||||||
 | 
					    ddElement: ddElements[index],
 | 
				
			||||||
 | 
					  }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const hiddenClass = "hidden";
 | 
				
			||||||
 | 
					  const hiddenStyle = document.createElement("style");
 | 
				
			||||||
 | 
					  hiddenStyle.innerHTML = `.${hiddenClass} { display: none; }`;
 | 
				
			||||||
 | 
					  document.head.appendChild(hiddenStyle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let debounceTimeout;
 | 
				
			||||||
 | 
					  document.getElementById("search-input").addEventListener("input", (event) => {
 | 
				
			||||||
 | 
					    clearTimeout(debounceTimeout);
 | 
				
			||||||
 | 
					    debounceTimeout = setTimeout(() => {
 | 
				
			||||||
 | 
					      const query = event.target.value.toLowerCase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const matches = [];
 | 
				
			||||||
 | 
					      const nonMatches = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      dtElementsData.forEach(({ element, id, ddElement }) => {
 | 
				
			||||||
 | 
					        const isMatch = id.includes(query);
 | 
				
			||||||
 | 
					        if (isMatch) {
 | 
				
			||||||
 | 
					          matches.push(element, ddElement);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          nonMatches.push(element, ddElement);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      requestAnimationFrame(() => {
 | 
				
			||||||
 | 
					        matches.forEach((el) => el?.classList.remove(hiddenClass));
 | 
				
			||||||
 | 
					        nonMatches.forEach((el) => el?.classList.add(hiddenClass));
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }, 200);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										622
									
								
								docs-preview-921/style.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										622
									
								
								docs-preview-921/style.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,622 @@
 | 
				
			||||||
 | 
					@import "tomorrow.min.css";
 | 
				
			||||||
 | 
					html {
 | 
				
			||||||
 | 
					  -webkit-text-size-adjust: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html:focus-within {
 | 
				
			||||||
 | 
					  scroll-behavior: smooth;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					  -webkit-text-size-adjust: 100%;
 | 
				
			||||||
 | 
					  -moz-text-size-adjust: 100%;
 | 
				
			||||||
 | 
					  text-size-adjust: 100%;
 | 
				
			||||||
 | 
					  -moz-osx-font-smoothing: grayscale;
 | 
				
			||||||
 | 
					  -webkit-font-smoothing: antialiased;
 | 
				
			||||||
 | 
					  min-height: 100vh;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  text-rendering: optimizeSpeed;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*, :after, :before {
 | 
				
			||||||
 | 
					  box-sizing: border-box;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a:not([class]) {
 | 
				
			||||||
 | 
					  -webkit-text-decoration-skip: ink;
 | 
				
			||||||
 | 
					  text-decoration-skip-ink: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a, abbr, acronym, address, applet, article, aside, audio, b, big, blockquote, body, canvas, caption, center, cite, code, dd, del, details, dfn, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, output, p, pre, q, ruby, s, samp, section, small, span, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video {
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  font-size: 100%;
 | 
				
			||||||
 | 
					  font: inherit;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:focus {
 | 
				
			||||||
 | 
					  outline: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ol, ul {
 | 
				
			||||||
 | 
					  list-style: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					blockquote, q {
 | 
				
			||||||
 | 
					  quotes: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					blockquote:after, blockquote:before, q:after, q:before {
 | 
				
			||||||
 | 
					  content: "";
 | 
				
			||||||
 | 
					  content: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input, input:required {
 | 
				
			||||||
 | 
					  box-shadow: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input:-webkit-autofill, input:-webkit-autofill:active, input:-webkit-autofill:focus, input:-webkit-autofill:hover {
 | 
				
			||||||
 | 
					  -webkit-box-shadow: inset 0 0 0 30px #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration, input[type=search]::-webkit-search-results-button, input[type=search]::-webkit-search-results-decoration {
 | 
				
			||||||
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
 | 
					  -moz-appearance: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type=search] {
 | 
				
			||||||
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
 | 
					  -moz-appearance: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input:focus {
 | 
				
			||||||
 | 
					  outline: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					audio, canvas, video {
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					  max-width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					audio:not([controls]) {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					  height: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[hidden] {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a:active, a:hover {
 | 
				
			||||||
 | 
					  outline: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img {
 | 
				
			||||||
 | 
					  height: auto;
 | 
				
			||||||
 | 
					  max-width: 100%;
 | 
				
			||||||
 | 
					  vertical-align: middle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img, picture {
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button, input {
 | 
				
			||||||
 | 
					  line-height: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button, html input[type=button], input[type=reset], input[type=submit] {
 | 
				
			||||||
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
 | 
					  background: 0 0;
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button[disabled], html input[disabled] {
 | 
				
			||||||
 | 
					  cursor: default;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[disabled] {
 | 
				
			||||||
 | 
					  pointer-events: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type=checkbox], input[type=radio] {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type=search] {
 | 
				
			||||||
 | 
					  -webkit-appearance: textfield;
 | 
				
			||||||
 | 
					  box-sizing: content-box;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration {
 | 
				
			||||||
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button::-moz-focus-inner, input::-moz-focus-inner {
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button {
 | 
				
			||||||
 | 
					  background: 0 0;
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					textarea {
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  resize: vertical;
 | 
				
			||||||
 | 
					  vertical-align: top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table {
 | 
				
			||||||
 | 
					  border-collapse: collapse;
 | 
				
			||||||
 | 
					  border-spacing: 0;
 | 
				
			||||||
 | 
					  text-indent: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hr {
 | 
				
			||||||
 | 
					  background: #000;
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  box-sizing: content-box;
 | 
				
			||||||
 | 
					  height: 1px;
 | 
				
			||||||
 | 
					  line-height: 0;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  overflow: visible;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					  page-break-after: always;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
					  font-family: monospace, monospace;
 | 
				
			||||||
 | 
					  font-size: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
					  background-color: transparent;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abbr[title] {
 | 
				
			||||||
 | 
					  border-bottom: none;
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					code, kbd, pre, samp {
 | 
				
			||||||
 | 
					  font-family: monospace, monospace;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					small, sub, sup {
 | 
				
			||||||
 | 
					  font-size: 75%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub, sup {
 | 
				
			||||||
 | 
					  line-height: 0;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub {
 | 
				
			||||||
 | 
					  bottom: -5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sup {
 | 
				
			||||||
 | 
					  top: -5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button, input, optgroup, select, textarea {
 | 
				
			||||||
 | 
					  font-family: inherit;
 | 
				
			||||||
 | 
					  font-size: 100%;
 | 
				
			||||||
 | 
					  line-height: 1;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button, input {
 | 
				
			||||||
 | 
					  overflow: visible;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button, select {
 | 
				
			||||||
 | 
					  text-transform: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type=button], [type=reset], [type=submit], button {
 | 
				
			||||||
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner {
 | 
				
			||||||
 | 
					  border-style: none;
 | 
				
			||||||
 | 
					  outline: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					legend {
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  color: inherit;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  max-width: 100%;
 | 
				
			||||||
 | 
					  white-space: normal;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fieldset {
 | 
				
			||||||
 | 
					  min-width: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body:not(:-moz-handler-blocked) fieldset {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					progress {
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button {
 | 
				
			||||||
 | 
					  height: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type=search] {
 | 
				
			||||||
 | 
					  -webkit-appearance: textfield;
 | 
				
			||||||
 | 
					  outline-offset: -2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type=search]::-webkit-search-decoration {
 | 
				
			||||||
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-file-upload-button {
 | 
				
			||||||
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
 | 
					  font: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					summary {
 | 
				
			||||||
 | 
					  display: list-item;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:root {
 | 
				
			||||||
 | 
					  --nmd-color0: #0a3e68;
 | 
				
			||||||
 | 
					  --nmd-color1: #268598;
 | 
				
			||||||
 | 
					  --nmd-color2: #b8d09e;
 | 
				
			||||||
 | 
					  --nmd-color3: #f6cf5e;
 | 
				
			||||||
 | 
					  --nmd-color4: #ec733b;
 | 
				
			||||||
 | 
					  --nmd-color-info: #167cb9;
 | 
				
			||||||
 | 
					  --nmd-color-warn: #ff6700;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					  background: white;
 | 
				
			||||||
 | 
					  color: #111827;
 | 
				
			||||||
 | 
					  max-width: min(100ch, 1024px);
 | 
				
			||||||
 | 
					  margin: 0 auto;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  font-family: "Lucida Sans", Arial, sans-serif;
 | 
				
			||||||
 | 
					  font-size: 16px;
 | 
				
			||||||
 | 
					  line-height: 1.4em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  body {
 | 
				
			||||||
 | 
					    background: #111827;
 | 
				
			||||||
 | 
					    color: #f9fafb;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1,
 | 
				
			||||||
 | 
					h2,
 | 
				
			||||||
 | 
					h3 {
 | 
				
			||||||
 | 
					  color: var(--nmd-color0);
 | 
				
			||||||
 | 
					  font-family: "Lato", sans-serif;
 | 
				
			||||||
 | 
					  font-weight: 300;
 | 
				
			||||||
 | 
					  line-height: 1.125;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  h1,
 | 
				
			||||||
 | 
					  h2,
 | 
				
			||||||
 | 
					  h3 {
 | 
				
			||||||
 | 
					    color: var(--nmd-color4);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1 {
 | 
				
			||||||
 | 
					  font-size: 48px;
 | 
				
			||||||
 | 
					  font-weight: 300;
 | 
				
			||||||
 | 
					  margin: 4rem 0 1.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h2 {
 | 
				
			||||||
 | 
					  font-size: 32px;
 | 
				
			||||||
 | 
					  font-weight: 300;
 | 
				
			||||||
 | 
					  margin: 2rem 0 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h3 {
 | 
				
			||||||
 | 
					  font-size: 20px;
 | 
				
			||||||
 | 
					  font-weight: 400;
 | 
				
			||||||
 | 
					  margin: 0.5rem 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					p {
 | 
				
			||||||
 | 
					  margin: 0.9rem 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					p:first-child {
 | 
				
			||||||
 | 
					  margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					p:last-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
					  color: var(--nmd-color0);
 | 
				
			||||||
 | 
					  text-decoration: underline;
 | 
				
			||||||
 | 
					  text-underline-offset: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					a:visited {
 | 
				
			||||||
 | 
					  color: var(--nmd-color1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					a:hover {
 | 
				
			||||||
 | 
					  color: var(--nmd-color1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  a {
 | 
				
			||||||
 | 
					    color: var(--nmd-color3);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  a:visited {
 | 
				
			||||||
 | 
					    color: var(--nmd-color2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  a:hover {
 | 
				
			||||||
 | 
					    color: var(--nmd-color4);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					code {
 | 
				
			||||||
 | 
					  font-size: 90%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					span.command {
 | 
				
			||||||
 | 
					  font-size: 90%;
 | 
				
			||||||
 | 
					  font-family: monospace;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					em {
 | 
				
			||||||
 | 
					  font-style: italic;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					strong {
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
					  background: #f9fafb;
 | 
				
			||||||
 | 
					  margin: 2rem 16px;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  border: 1px solid #e5e7eb;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  box-shadow: 4px 4px 8px #e5e7eb;
 | 
				
			||||||
 | 
					  font-size: 90%;
 | 
				
			||||||
 | 
					  margin-bottom: 1.5rem;
 | 
				
			||||||
 | 
					  padding: 6px;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  pre {
 | 
				
			||||||
 | 
					    background: #1f2937;
 | 
				
			||||||
 | 
					    border-color: black;
 | 
				
			||||||
 | 
					    box-shadow: 4px 4px 8px black;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pre span img {
 | 
				
			||||||
 | 
					  user-select: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre:has(code) {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					td,
 | 
				
			||||||
 | 
					th {
 | 
				
			||||||
 | 
					  padding: 2px 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					td:first-child,
 | 
				
			||||||
 | 
					th:first-child {
 | 
				
			||||||
 | 
					  padding-left: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					td:last-child,
 | 
				
			||||||
 | 
					th:last-child {
 | 
				
			||||||
 | 
					  padding-right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dt {
 | 
				
			||||||
 | 
					  margin: 1.2rem 0 0.8rem;
 | 
				
			||||||
 | 
					  content-visibility: auto;
 | 
				
			||||||
 | 
					  contain-intrinsic-size: auto 42px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dd {
 | 
				
			||||||
 | 
					  margin-left: 2rem;
 | 
				
			||||||
 | 
					  content-visibility: auto;
 | 
				
			||||||
 | 
					  contain-intrinsic-size: auto 500px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ul {
 | 
				
			||||||
 | 
					  margin: 0.9rem 0;
 | 
				
			||||||
 | 
					  padding-left: 30px;
 | 
				
			||||||
 | 
					  list-style: disc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ul:first-child {
 | 
				
			||||||
 | 
					  margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ul:last-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ol {
 | 
				
			||||||
 | 
					  margin: 0.9rem 0;
 | 
				
			||||||
 | 
					  padding-left: 30px;
 | 
				
			||||||
 | 
					  list-style: decimal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ol:first-child {
 | 
				
			||||||
 | 
					  margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ol:last-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					li {
 | 
				
			||||||
 | 
					  margin: 0.9rem 0;
 | 
				
			||||||
 | 
					  padding-left: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					li:first-child {
 | 
				
			||||||
 | 
					  margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					li:last-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.navheader hr,
 | 
				
			||||||
 | 
					.navfooter hr {
 | 
				
			||||||
 | 
					  margin: 1rem 0;
 | 
				
			||||||
 | 
					  background: #e5e7eb;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  .navheader hr,
 | 
				
			||||||
 | 
					  .navfooter hr {
 | 
				
			||||||
 | 
					    background: #4b5563;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.navheader a,
 | 
				
			||||||
 | 
					.navfooter a {
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#search-bar {
 | 
				
			||||||
 | 
					  position: sticky;
 | 
				
			||||||
 | 
					  top: 0;
 | 
				
			||||||
 | 
					  background: white;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid #e5e7eb;
 | 
				
			||||||
 | 
					  z-index: 1000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  #search-bar {
 | 
				
			||||||
 | 
					    background: #111827;
 | 
				
			||||||
 | 
					    color: #f9fafb;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid black;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#search-input {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  padding: 8px;
 | 
				
			||||||
 | 
					  border: 1px solid #ccc;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  background: inherit;
 | 
				
			||||||
 | 
					  color: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hidden {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.titlepage {
 | 
				
			||||||
 | 
					  margin: 40px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					div.titlepage hr {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.toc {
 | 
				
			||||||
 | 
					  background: #f9fafb;
 | 
				
			||||||
 | 
					  margin: 2rem 16px;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  border: 1px solid #e5e7eb;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  box-shadow: 4px 4px 8px #e5e7eb;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  div.toc {
 | 
				
			||||||
 | 
					    background: #1f2937;
 | 
				
			||||||
 | 
					    border-color: black;
 | 
				
			||||||
 | 
					    box-shadow: 4px 4px 8px black;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					div.toc a {
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.note,
 | 
				
			||||||
 | 
					div.warning {
 | 
				
			||||||
 | 
					  background: #f9fafb;
 | 
				
			||||||
 | 
					  margin: 2rem 16px;
 | 
				
			||||||
 | 
					  padding: 10px;
 | 
				
			||||||
 | 
					  border: 1px solid #e5e7eb;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  box-shadow: 4px 4px 8px #e5e7eb;
 | 
				
			||||||
 | 
					  font-style: italic;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  div.note,
 | 
				
			||||||
 | 
					  div.warning {
 | 
				
			||||||
 | 
					    background: #1f2937;
 | 
				
			||||||
 | 
					    border-color: black;
 | 
				
			||||||
 | 
					    box-shadow: 4px 4px 8px black;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					div.note h3,
 | 
				
			||||||
 | 
					div.warning h3 {
 | 
				
			||||||
 | 
					  float: right;
 | 
				
			||||||
 | 
					  margin: 0 0 1rem 1rem;
 | 
				
			||||||
 | 
					  width: 42px;
 | 
				
			||||||
 | 
					  height: 42px;
 | 
				
			||||||
 | 
					  content: url();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					div.note h3 + p,
 | 
				
			||||||
 | 
					div.warning h3 + p {
 | 
				
			||||||
 | 
					  margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.note h3 {
 | 
				
			||||||
 | 
					  background-color: var(--nmd-color-info);
 | 
				
			||||||
 | 
					  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 8h.01'%3E%3C/path%3E%3Cpath d='M11 12h1v4h1'%3E%3C/path%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z'%3E%3C/path%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 8h.01'%3E%3C/path%3E%3Cpath d='M11 12h1v4h1'%3E%3C/path%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z'%3E%3C/path%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.warning h3 {
 | 
				
			||||||
 | 
					  background-color: var(--nmd-color-warn);
 | 
				
			||||||
 | 
					  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 9v2m0 4v.01'%3E%3C/path%3E%3Cpath d='M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75'%3E%3C/path%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 9v2m0 4v.01'%3E%3C/path%3E%3Cpath d='M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75'%3E%3C/path%3E%3C/svg%3E");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.term {
 | 
				
			||||||
 | 
					  font-weight: 300;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.docbook .xref img[src^="images/callouts/"],
 | 
				
			||||||
 | 
					.screen img,
 | 
				
			||||||
 | 
					.programlisting img {
 | 
				
			||||||
 | 
					  width: 1em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.calloutlist img {
 | 
				
			||||||
 | 
					  width: 1.3em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** The console prompt, e.g., `$` and `#` should not be selectable. */
 | 
				
			||||||
 | 
					.programlisting.language-shell .hljs-meta.prompt_ {
 | 
				
			||||||
 | 
					  user-select: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (prefers-color-scheme: dark) {
 | 
				
			||||||
 | 
					  @import "tomorrow-night.min.css";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*# sourceMappingURL=style.css.map */
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue