mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-26 09:20:08 +00:00 
			
		
		
		
	deploy: da1fed218b
		
	This commit is contained in:
		
					parent
					
						
							
								2c43f64a57
							
						
					
				
			
			
				commit
				
					
						df4cb4a53c
					
				
			
		
					 36 changed files with 0 additions and 167232 deletions
				
			
		|  | @ -1,29 +0,0 @@ | ||||||
| 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. |  | ||||||
|  | @ -1,345 +0,0 @@ | ||||||
| /*! |  | ||||||
|   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)})(); |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| /* This file is NOT part of highlight.js */ |  | ||||||
| document.addEventListener('DOMContentLoaded', (event) => { |  | ||||||
|     document.querySelectorAll('.programlisting, .screen').forEach((element) => { |  | ||||||
|         hljs.highlightElement(element); |  | ||||||
|     }); |  | ||||||
| }); |  | ||||||
|  | @ -1,70 +0,0 @@ | ||||||
| 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; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,56 +0,0 @@ | ||||||
| <?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> |  | ||||||
|  | @ -1,382 +0,0 @@ | ||||||
| <?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-1019/script/anchor-min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								docs-preview-1019/script/anchor-min.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1,4 +0,0 @@ | ||||||
| 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)'); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
|  | @ -1,58 +0,0 @@ | ||||||
| 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); |  | ||||||
|   }); |  | ||||||
| }); |  | ||||||
|  | @ -1,622 +0,0 @@ | ||||||
| @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 */ |  | ||||||
|  | @ -1,29 +0,0 @@ | ||||||
| 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. |  | ||||||
|  | @ -1,345 +0,0 @@ | ||||||
| /*! |  | ||||||
|   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)})(); |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| /* This file is NOT part of highlight.js */ |  | ||||||
| document.addEventListener('DOMContentLoaded', (event) => { |  | ||||||
|     document.querySelectorAll('.programlisting, .screen').forEach((element) => { |  | ||||||
|         hljs.highlightElement(element); |  | ||||||
|     }); |  | ||||||
| }); |  | ||||||
|  | @ -1,70 +0,0 @@ | ||||||
| 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; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,56 +0,0 @@ | ||||||
| <?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> |  | ||||||
|  | @ -1,382 +0,0 @@ | ||||||
| <?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-1023/script/anchor-min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								docs-preview-1023/script/anchor-min.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1,4 +0,0 @@ | ||||||
| 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)'); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
|  | @ -1,58 +0,0 @@ | ||||||
| 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); |  | ||||||
|   }); |  | ||||||
| }); |  | ||||||
|  | @ -1,622 +0,0 @@ | ||||||
| @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 */ |  | ||||||
|  | @ -1,29 +0,0 @@ | ||||||
| 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. |  | ||||||
|  | @ -1,345 +0,0 @@ | ||||||
| /*! |  | ||||||
|   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)})(); |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| /* This file is NOT part of highlight.js */ |  | ||||||
| document.addEventListener('DOMContentLoaded', (event) => { |  | ||||||
|     document.querySelectorAll('.programlisting, .screen').forEach((element) => { |  | ||||||
|         hljs.highlightElement(element); |  | ||||||
|     }); |  | ||||||
| }); |  | ||||||
|  | @ -1,70 +0,0 @@ | ||||||
| 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; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,56 +0,0 @@ | ||||||
| <?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> |  | ||||||
|  | @ -1,382 +0,0 @@ | ||||||
| <?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-1029/script/anchor-min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								docs-preview-1029/script/anchor-min.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1,4 +0,0 @@ | ||||||
| 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)'); |  | ||||||
| }); |  | ||||||
| 
 |  | ||||||
|  | @ -1,58 +0,0 @@ | ||||||
| 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); |  | ||||||
|   }); |  | ||||||
| }); |  | ||||||
|  | @ -1,622 +0,0 @@ | ||||||
| @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
	
	 NotAShelf
				NotAShelf