This repository has been archived on 2022-07-17. You can view files and clone it, but cannot push or open issues or pull requests.
arsenm-dev-site/public/index.min.0bb9680af77e79bab...

7 lines
101 KiB
JavaScript

var suggestions=document.getElementById('suggestions');var userinput=document.getElementById('userinput');document.addEventListener('keydown',inputFocus);function inputFocus(e){if(e.keyCode===191){e.preventDefault();userinput.focus();}
if(e.keyCode===27){userinput.blur();suggestions.classList.add('d-none');}}
document.addEventListener('click',function(event){var isClickInsideElement=suggestions.contains(event.target);if(!isClickInsideElement){suggestions.classList.add('d-none');}});document.addEventListener('keydown',suggestionFocus);function suggestionFocus(e){const focusableSuggestions=suggestions.querySelectorAll('a');const focusable=[...focusableSuggestions];const index=focusable.indexOf(document.activeElement);let nextIndex=0;if(e.keyCode===38){e.preventDefault();nextIndex=index>0?index-1:0;focusableSuggestions[nextIndex].focus();}
else if(e.keyCode===40){e.preventDefault();nextIndex=index+1<focusable.length?index+1:index;focusableSuggestions[nextIndex].focus();}}
(function(){var index=new FlexSearch({preset:'score',cache:true,doc:{id:'id',field:['title','description','content',],store:['href','title','description',],},});var docs=[{id:0,href:"/docs/advmake/",title:"AdvMake Docs",description:"Documentation for the AdvMake build system",content:""},{id:1,href:"/docs/advmake/build-files/",title:"Build Files",description:"Understanding AdvMake Build Files",content:"\u003cp\u003e\u003ca class=\"btn\" style=\"color: white; background-color: green;\" href=\"https://gitea.arsenm.dev/Arsen6331/advmake\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"cib:gitea\"\u003e\u003c/span\u003e \n \u0026nbsp;AdvMake\n\u003c/a\u003e\n\n\u003ca class=\"btn\" style=\"color: white; background-color: OrangeRed;\" href=\"https://www.gitlab.com/moussaelianarsen/advmake\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"fa-brands:gitlab\"\u003e\u003c/span\u003e\n \u0026nbsp;AdvMake\n\u003c/a\u003e\n\u003c/p\u003e\n\u003ch2 id=\"format\"\u003eFormat\u003c/h2\u003e\n\u003cp\u003eAdvMake uses \u003ca href=\"https://github.com/bazelbuild/starlark\"\u003eStarlark\u003c/a\u003e as the format for its build files.\nModules are also defined for both convenience and extra functionality.\u003c/p\u003e\n\u003cp\u003eStarlark is a Python-like language meant for configuration files.\u003c/p\u003e\n\u003ch2 id=\"configuration\"\u003eConfiguration\u003c/h2\u003e\n\u003cp\u003eBuild files are by default called \u003ccode\u003eAdvMakefile\u003c/code\u003e, but that can be set via \u003ccode\u003e-f\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAn AdvMakefile example can be found at AdvMake\u0026rsquo;s repo as it uses AdvMake itself.\u003c/p\u003e\n\u003cp\u003eAdvMake runs functions exposed by starlark in the format \u003ccode\u003e\u0026lt;name\u0026gt;_\u0026lt;target\u0026gt;\u003c/code\u003e.\nTo set the default name and target, the global variables \u003ccode\u003edefaultName\u003c/code\u003e, and \u003ccode\u003edefaultTarget\u003c/code\u003e must be set.\nHere is an example from AdvMake\u0026rsquo;s AdvMakefile:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003edefaultName\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;advmake\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003edefaultTarget\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;build\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis will tell AdvMake to run the function \u003ccode\u003eadvmake_build()\u003c/code\u003e when run with no arguments.\u003c/p\u003e\n\u003cp\u003eIf AdvMake is run with one argument (such as \u003ccode\u003eadvmake install\u003c/code\u003e), it will use the default name with the specified target,\nso in that case, it would run \u003ccode\u003eadvmake_install()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIf run with two arguments, AdvMake will use the first argument as the name and the second as the target.\nSo, running \u003ccode\u003eadvmake hello world\u003c/code\u003e would run the function \u003ccode\u003ehello_world()\u003c/code\u003e.\u003c/p\u003e\n\u003ch2 id=\"modules\"\u003eModules\u003c/h2\u003e\n\u003cp\u003eAs previously mentioned, AdvMake comes with modules. Those are as follows:\u003c/p\u003e\n\u003ch3 id=\"runtime\"\u003e\u003ccode\u003eruntime\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe runtime module exposes some of golang\u0026rsquo;s runtime methods and variables.\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"runtimegoos\"\u003e\u003ccode\u003eruntime.GOOS\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eStores a string denoting the operating system being used.\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/runtime#GOOS\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch4 id=\"runtimegoarch\"\u003e\u003ccode\u003eruntime.GOARCH\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eStores a string denoting the CPU architecture being used.\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/runtime#GOARCH\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch4 id=\"runtimenumcpu\"\u003e\u003ccode\u003eruntime.NumCPU()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eGet the number of logical CPUs available to the current process\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/runtime#NumCPU\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch4 id=\"runtimegomaxprocs\"\u003e\u003ccode\u003eruntime.GOMAXPROCS()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003eruntime.GOMAXPROCS(n)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eGet or set the value of the GOMAXPROCS environment variable. This variable controls the maximum number of CPUs that can execute. This function will set GOMAXPROCS to n and then return the previous value. If \u003ccode\u003en\u0026lt;1\u003c/code\u003e, this function will not set the variable and will instead return the current setting\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/runtime#GOMAXPROCS\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch3 id=\"encoding\"\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe strings module contains functions for encoding and decoding various formats. This module contains submodules for the various formats\u003c/p\u003e\n\u003cp\u003eAvailable submodules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eJson\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eYaml\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eToml\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eHex\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch4 id=\"encodingsubmoduleload\"\u003e\u003ccode\u003eencoding.\u0026lt;Submodule\u0026gt;.Load()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eLoad a string formatted as the submodule format into a dictionary or string.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eencoding\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eJson\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eLoad\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;{\u0026#34;encoding\u0026#34;: \u0026#34;json\u0026#34;}\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# x[\u0026#34;encoding\u0026#34;] == \u0026#34;json\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eencoding\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHex\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eLoad\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;546573740a\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# y == \u0026#34;Test\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"encodingsubmoduledump\"\u003e\u003ccode\u003eencoding.\u0026lt;Submodule\u0026gt;.Dump()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDump a string formatted as the submodule format from a dictionary or string\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003exDict\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;encoding\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;toml\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}}\u003c/span\u003e\n\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eencoding\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eToml\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDump\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003exDict\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# x == \u0026#39;\u0026#39;\u0026#39;\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# [encoding]\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# type = \u0026#34;toml\u0026#34;\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e#\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# \u0026#39;\u0026#39;\u0026#39;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eencoding\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHex\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDump\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Test\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# y = \u0026#34;546573740a\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"file\"\u003e\u003ccode\u003efile\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe file module contains functions for manipulation and checking of files\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"fileexpand\"\u003e\u003ccode\u003efile.Expand()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003efile.Expand(file, mappings)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eExpand any instances of \u003ccode\u003e$VAR\u003c/code\u003e in a file according to provided mappings.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003efile.txt\u003c/code\u003e before:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003eI am running on $OS and architecture $arch\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eCode:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"nb\"\u003efile\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eExpand\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;file.txt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;OS\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eruntime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eGOOS\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;arch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eruntime\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eGOARCH\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003efile.txt\u003c/code\u003e after:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003eI am running on linux and architecture x86_64\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"fileexists\"\u003e\u003ccode\u003efile.Exists()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003efile.Exists(filepath)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCheck whether a file exists\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"nb\"\u003efile\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eExists\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/etc/fstab\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# True\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"filecontent\"\u003e\u003ccode\u003efile.Content()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003efile.Content(filepath)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns contents of a file as a string\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cp\u003efile.txt:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003eThis is a file\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eCode:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"nb\"\u003efile\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eContent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;file.txt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;This is a file\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"strings\"\u003e\u003ccode\u003estrings\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe strings module contains functions for the manipulation of strings\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"stringsregex\"\u003e\u003ccode\u003estrings.Regex()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003estrings.Regex(string, pattern, regex)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParse a string using a regular expression and return the result in the specified format.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRegex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hello, World\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$2, $1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;(.+), (.+)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \n\u003cspan class=\"c1\"\u003e# x == \u0026#34;World, Hello\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRegex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hello, World\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$y, $x\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;(?P\u0026lt;x\u0026gt;.+), (?P\u0026lt;y\u0026gt;.+)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# y == \u0026#34;World, Hello\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRegex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hello, World\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$match, $2, $1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;(.+), (.+)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \n\u003cspan class=\"c1\"\u003e# z == \u0026#34;Hello, World, World, Hello\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"stringshassuffix\"\u003e\u003ccode\u003estrings.HasSuffix()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003estrings.HasSuffix(string, suffix)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCheck whether a string ends with a suffix.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHasSuffix\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;doc.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# True\u003c/span\u003e\n\u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHasSuffix\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;doc.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# False\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"stringshasprefix\"\u003e\u003ccode\u003estrings.HasPrefix()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003estrings.HasPrefix(string, prefix)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCheck whether a string starts with a prefix.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eHasPrefix\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;doc.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;doc\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# True\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"stringstrimsuffix\"\u003e\u003ccode\u003estrings.TrimSuffix()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003estrings.HasSuffix(string, suffix)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRemove suffix from string if it exists. If it does not exist, the string is returned unchanged.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTrimSuffix\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;doc.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;doc\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"stringstrimprefix\"\u003e\u003ccode\u003estrings.TrimPrefix()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003estrings.TrimPrefix(string, prefix)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRemove prefix from string if it exists. If it does not exist, the string is returned unchanged.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTrimPrefix\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;doc.pdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;doc\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;.pdf\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"stringstrimspace\"\u003e\u003ccode\u003estrings.TrimSpace()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003estrings.TrimSpace(string)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrim leading and trailing white space, as defined by Unicode\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003estrings\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eTrimSpace\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; Hi \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;Hi\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"input\"\u003e\u003ccode\u003einput\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe input module prompts the user for input\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"inputprompt\"\u003e\u003ccode\u003einput.Prompt()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003einput.Prompt(prompt)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003ePrint prompt and wait for input, returning on newline\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"nb\"\u003einput\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePrompt\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Enter number: \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"inputchoice\"\u003e\u003ccode\u003einput.Choice()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003einput.Choice(prompt, choices)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAssign number to each choice and prompt user to choose one\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"nb\"\u003einput\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eChoice\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Choose greeting\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Hi\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Hello\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Good morning\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e])\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe above example looks like this to the user:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e[1] \u0026#34;Hi\u0026#34;\n[2] \u0026#34;Hello\u0026#34;\n[3] \u0026#34;Good Morning\u0026#34;\nChoose greeting: \n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWhen the user chooses a number, the function will return the associated string. So, if the user chooses 1, \u003ccode\u003e\u0026quot;Hi\u0026quot;\u003c/code\u003e will be returned.\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"url\"\u003e\u003ccode\u003eurl\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe url module contains functions for the manipulation of URLs\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"urlparse\"\u003e\u003ccode\u003eurl.Parse()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003eurl.Parse(urlString)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a URL and returns its components\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003eparsed\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eParse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://www.arsenm.dev/docs/advmake/build-files\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# parsed.Scheme == \u0026#34;https\u0026#34;\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# parsed.Host == \u0026#34;www.arsenm.dev\u0026#34;\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# parsed.Path == \u0026#34;/docs/advmake/build-files\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/net/url#URL\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch3 id=\"shell\"\u003e\u003ccode\u003eshell\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe shell module contains functions for accessing and utilizing the shell.\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"shellexec\"\u003e\u003ccode\u003eshell.Exec()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003eshell.Exec(command, output?, concurrent?)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRuns a command or script using \u003ccode\u003esh -c\u003c/code\u003e, sending the output to \u003ccode\u003eSTDOUT\u003c/code\u003e and returning it unless set otherwise. It can also be concurrent.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cp\u003eCode:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eExec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;date +\u003c/span\u003e\u003cspan class=\"si\"\u003e%r\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;12:00:00 AM\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eExec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;date +\u003c/span\u003e\u003cspan class=\"si\"\u003e%r\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;return\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;12:00:00 AM\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eExec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;date +\u003c/span\u003e\u003cspan class=\"si\"\u003e%r\u003c/span\u003e\u003cspan class=\"s2\"\u003e | base64\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;stdout\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# None\u003c/span\u003e\n\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eExec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e\tsleep 1\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e\tsleep 2\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003econcurrent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"bp\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Sleeps for two seconds\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eSTDOUT:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e12:00:00 AM\nMTI6MDA6MDAgQU0K\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"shellgetenv\"\u003e\u003ccode\u003eshell.Getenv()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003eshell.Getenv(key)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the value of an environment variable\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eGetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;TERM\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;xterm\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/os#Getenv\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch4 id=\"shellsetenv\"\u003e\u003ccode\u003eshell.Setenv()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003eshell.Setenv(key, value, onlyIfUnset?)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSets the value of an environment variable. It can be configured not to set the value if it is already set\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;X\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;x\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# $X = x\u003c/span\u003e\n\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;CC\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gcc\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# if $CC unset, $CC = gcc\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch4 id=\"shelllookpath\"\u003e\u003ccode\u003eshell.LookPath()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003eshell.LookPath(command)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the path to the executable of the specified command. Returns \u003ccode\u003e-1\u003c/code\u003e if the command is not found in \u003ccode\u003ePATH\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eLookPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;sh\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;/bin/sh\u0026#34;\u003c/span\u003e\n\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eLookPath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;nonExistentCommand\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# -1\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"net\"\u003e\u003ccode\u003enet\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe net module contains various network functions\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"netdownload\"\u003e\u003ccode\u003enet.Download()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDownload a file from a URL, optionally specifying the filename. It will show progress if the \u003ccode\u003eContent-Length\u003c/code\u003e header is present.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003enet\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDownload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://minio.arsenm.dev/advmake/0.0.1/advmake-linux-x86_64\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"n\"\u003enet\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDownload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://minio.arsenm.dev/advmake/0.0.1/advmake-linux-x86_64\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;advmake\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"log\"\u003e\u003ccode\u003elog\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe log module contains functions to log events at various levels\u003c/p\u003e\n\u003cp\u003eThe available levels are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eInfo\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eDebug\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eWarn\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eFatal\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch4 id=\"loglevel\"\u003e\u003ccode\u003elog.\u0026lt;Level\u0026gt;()\u003c/code\u003e\u003c/h4\u003e\n\u003cp\u003eDefinition: \u003ccode\u003elog.\u0026lt;Level\u0026gt;(message)\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eLogs a message at the specified level. The fatal level quits after logging the message.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eInfo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Test log\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003cspan class=\"n\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eFatal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Error\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"fmt\"\u003e\u003ccode\u003efmt\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe fmt module exposes all the text functions from the golang fmt package except for all the \u003ccode\u003eFprint\u003c/code\u003e and \u003ccode\u003eFscan\u003c/code\u003e functions.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"n\"\u003efmt\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eSprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Print \u003c/span\u003e\u003cspan class=\"si\"\u003e%s\u003c/span\u003e\u003cspan class=\"s2\"\u003e string\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;formatted\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# \u0026#34;Print formatted string\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://pkg.go.dev/fmt\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n"},{id:2,href:"/docs/pak/configuration/",title:"Configuration",description:"Configuring pak",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/pak\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/e4yacqd78gkte8a0?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/pak\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 id=\"config-file\"\u003eConfig file\u003c/h3\u003e\n\u003cp\u003ePak uses a custom config file at \u003ccode\u003e/etc/pak.cfg\u003c/code\u003e. For example, this is what the\napt config looks like:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-cfg\" data-lang=\"cfg\"\u003e\u003cspan class=\"c1\"\u003e# Write the name of the package manager in all lowercase below\u003c/span\u003e\n\u003cspan class=\"na\"\u003eapt\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Write a comma separated list of commands from the manager below\u003c/span\u003e\n\u003cspan class=\"na\"\u003einstall,remove,update,upgrade,search,download\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Write \u0026#34;yes\u0026#34; or \u0026#34;no\u0026#34; depending on whether you want to use root\u003c/span\u003e\n\u003cspan class=\"na\"\u003eyes\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Write command to use for root\u003c/span\u003e\n\u003cspan class=\"na\"\u003esudo\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Write a comma separated list of shortcuts below\u003c/span\u003e\n\u003cspan class=\"na\"\u003erm,inst\u003c/span\u003e\n\u003cspan class=\"c1\"\u003e# Write a comma separated list of shortcut mappings from the manager below\u003c/span\u003e\n\u003cspan class=\"na\"\u003eremove,install\u003c/span\u003e\n\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis file is read by pak to tell it what to do. The comments above each keyword\nexplain what it\u0026rsquo;s for.\u003c/p\u003e\n\u003cp\u003eHere is a list of all the fields and their uses:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eCommand to invoke the package manager.\u003c/li\u003e\n\u003cli\u003eComma-separated list of commands supported by the package manager.\u003c/li\u003e\n\u003cli\u003eWhether or not to invoke the root command.\u003c/li\u003e\n\u003cli\u003eCommand to use for root invocation (\u003ccode\u003esudo\u003c/code\u003e, \u003ccode\u003edoas\u003c/code\u003e, etc.)\u003c/li\u003e\n\u003cli\u003eComma-separated list of shortcuts for pak to accept\u003c/li\u003e\n\u003cli\u003eComma-separated list of shortcut mappings (what each shortcut sends to the\npackage manager). These do not necessarily need to be in the commands list.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eOnce you have made the config, just place it at \u003ccode\u003e/etc/pak.cfg\u003c/code\u003e and pak will\nautomatically use it.\u003c/p\u003e\n"},{id:3,href:"/docs/simpledash/configuration/",title:"Configuration",description:"Configuring simpledash",content:"\u003ch2 id=\"flags\"\u003eFlags\u003c/h2\u003e\n\u003cp\u003eSimpledash can be run using the simpledash binary directly, or for convenience, using \u003ccode\u003eadvmake run\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIf using the binary directly, the listen IP, port, etc. can be configured via flags.\u003c/p\u003e\n\u003cp\u003eThis is the help screen of simpledash:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003eUsage of ./simpledash:\n -a, --addr ip Bind address for HTTP server (default 0.0.0.0)\n -c, --config string TOML config file (default \u0026#34;simpledash.toml\u0026#34;)\n --hash string Generate new bcrypt password hash\n -p, --port int Bind port for HTTP server (default 8080)\nsimpledash: help requested\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe default address of simpledash is \u003ccode\u003e0.0.0.0:8080\u003c/code\u003e meaning any origin IP on any interface, port 8080.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003e--hash\u003c/code\u003e option creates a suitable bcrypt password hash for use in the config, prints it, and exits.\u003c/p\u003e\n\u003ch2 id=\"config-file\"\u003eConfig file\u003c/h2\u003e\n\u003cp\u003eSimpledash is configured using a TOML configuration file (simpledash.toml by default). It contains the users, cards, etc.\u003c/p\u003e\n\u003cp\u003eAn example file is provided in the simpledash repository. It contains examples of all the card types in simpledash.\u003c/p\u003e\n\u003cp\u003eThis is the example:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-toml\" data-lang=\"toml\"\u003e\u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;SimpleDash\u0026#34;\u003c/span\u003e\n\u003cspan class=\"nx\"\u003etheme\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;dark\u0026#34;\u003c/span\u003e\n\u003cspan class=\"nx\"\u003eloginRequired\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\n\u003cspan class=\"nx\"\u003eallowProxy\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://www.metaweather.com/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ifconfig.co/json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\n\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003esession\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;simpledash-session\u0026#34;\u003c/span\u003e\n\n\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n \u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003e_public_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;weather\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Weather\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003edata\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;woeid\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2442047\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n \u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003e_public_\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;api\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Server IP (API card example)\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eurl\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ifconfig.co/json\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003edata\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;format\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u0026lt;p class=\u0026#34;\u003c/span\u003e\u003cspan class=\"nx\"\u003esubtitle\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026gt;${data.ip}\u0026lt;/p\u0026gt;\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e Country: ${data.country} (${data.country_iso})\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e Time zone: ${data.time_zone}\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003epasswordHash\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$2a$10$w00dzQ1PP6nwXLhuzV2pFOUU6m8bcZXtDX3UVxpOYq3fTSwVMqPge\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eshowPublic\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\n \u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;status\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Google\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eicon\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ion:logo-google\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003edesc\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Google search engine. Status card example.\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eurl\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://www.google.com\u0026#34;\u003c/span\u003e\n\n \u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;simple\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Gmail\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eicon\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;simple-icons:gmail\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003edesc\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Gmail mail client. Simple card example\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eurl\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://mail.google.com/\u0026#34;\u003c/span\u003e\n\n \u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;collection\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Programming\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eicon\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;entypo:code\u0026#34;\u003c/span\u003e\n \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eGodoc\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://pkg.go.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;target\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;newTab\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eRuby\u003c/span\u003e\u003cspan class=\"err\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003eDoc\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ruby-doc.org/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;target\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sameTab\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\n \u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;collection\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Science\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eicon\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ic:outline-science\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003edata\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Google Scholar\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://scholar.google.com/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;target\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sameTab\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}}\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"title\"\u003eTitle\u003c/h3\u003e\n\u003cp\u003eThe title field sets the name of the website which will be used in all mentions including title tags and headers.\u003c/p\u003e\n\u003ch3 id=\"theme\"\u003eTheme\u003c/h3\u003e\n\u003cp\u003eThe theme can either be dark or light. The dark theme was generated using darkreader.\u003c/p\u003e\n\u003ch3 id=\"loginrequired\"\u003eLoginRequired\u003c/h3\u003e\n\u003cp\u003eThe loginRequired field denotes whether login is required to view the dashboard. If \u003ccode\u003efalse\u003c/code\u003e, public cards will be viewable without logging in.\u003c/p\u003e\n\u003ch3 id=\"session\"\u003eSession\u003c/h3\u003e\n\u003cp\u003eThe session section contains one field, \u003ccode\u003ename\u003c/code\u003e. This field is the name of the session cookie set in the browser upon visiting simpledash.\u003c/p\u003e\n\u003ch3 id=\"users\"\u003eUsers\u003c/h3\u003e\n\u003cp\u003eThe \u003ccode\u003eusers\u003c/code\u003e section contains all users and their associated cards. A user can be defined like so:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-toml\" data-lang=\"toml\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003epasswordHash\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$2a$10$w00dzQ1PP6nwXLhuzV2pFOUU6m8bcZXtDX3UVxpOYq3fTSwVMqPge\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eshowPublic\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe \u003ccode\u003epasswordHash\u003c/code\u003e field contains a hash as created by the \u003ccode\u003e--hash\u003c/code\u003e flag.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eshowPublic\u003c/code\u003e field is a boolean denoting whether to show public cards as well when logged in.\u003c/p\u003e\n\u003ch3 id=\"cards\"\u003eCards\u003c/h3\u003e\n\u003cp\u003eCards reside under their respective user in the config file. A card can be defined like so:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-toml\" data-lang=\"toml\"\u003e\u003cspan class=\"p\"\u003e[[\u003c/span\u003e\u003cspan class=\"nx\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003eadmin\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nx\"\u003ecard\u003c/span\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etype\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;status\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Google\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eicon\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ion:logo-google\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003edesc\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Google search engine. Status card example.\u0026#34;\u003c/span\u003e\n \u003cspan class=\"nx\"\u003eurl\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://www.google.com\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe cards contain various fields, some required, some not:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003etype\u003c/code\u003e: The type of the card. (required)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etitle\u003c/code\u003e: The title of the card to be used in the header. (required)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eicon\u003c/code\u003e: The icon to be used in various places depending on the card. Icons can be anything from \u003ca href=\"https://iconify.design\"\u003eiconify\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edesc\u003c/code\u003e: The description of the card\u0026rsquo;s content.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eurl\u003c/code\u003e: The URL of the card to be used for various purposes depending on the card.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edata\u003c/code\u003e: A dictionary containing any extra data not listed above.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCard types can be added simply by adding a file to \u003ccode\u003eresources/templates/cards\u003c/code\u003e. The name of the file will be used as the name of the card type\u003c/p\u003e\n"},{id:4,href:"/docs/",title:"Docs",description:null,content:""},{id:5,href:"/docs/opensend/gui/",title:"GUI",description:"Opensend fyne GUI",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/opensend\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/wrv3bbuujw57578h?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/opensend\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eThis page assumes you have already installed Opensend. If not, follow the installation\ninstructions on the installation page.\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: ; background-color: ;\" href=\"../installation\"\u003e\n \n Installation\n\u003c/a\u003e\n\n\u003ch3 id=\"gui-installation\"\u003eGUI Installation\u003c/h3\u003e\n\u003cp\u003eOpensend GUI has been written in golang using \u003ca href=\"https://fyne.io\"\u003efyne\u003c/a\u003e. Its source code can be found here:\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: green;\" href=\"https://gitea.arsenm.dev/opensend/opensend-gui\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"cib:gitea\"\u003e\u003c/span\u003e \n \u0026nbsp;Opensend GUI\n\u003c/a\u003e\n\n\u003cp\u003eTo download Opensend GUI, run the following command\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003egit clone https://gitea.arsenm.dev/opensend/opensend-gui.git\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo build Opensend GUI, \u003ccode\u003ego\u003c/code\u003e must be installed. The process for that is explained in the installation instructions for Opensend. Once \u003ccode\u003ego\u003c/code\u003e is installed, run:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego build\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis may take a while as \u003ccode\u003ego\u003c/code\u003e downloads and compiles Opensend GUI and Fyne.\u003c/p\u003e\n\u003cp\u003eOnce the build is complete, there should be a file named \u003ccode\u003eopensend-gui\u003c/code\u003e in the directory. Run this file to open the GUI which should look like this:\u003c/p\u003e\n\u003cimg src=\"/opensend/gui_start.webp\" alt=\"Opensend GUI on start\"\u003e\n"},{id:6,href:"/docs/advmake/installation/",title:"Installation",description:"Installing AdvMake",content:"\u003cp\u003e\u003ca class=\"btn\" style=\"color: white; background-color: green;\" href=\"https://gitea.arsenm.dev/Arsen6331/advmake\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"cib:gitea\"\u003e\u003c/span\u003e \n \u0026nbsp;AdvMake\n\u003c/a\u003e\n\n\u003ca class=\"btn\" style=\"color: white; background-color: OrangeRed;\" href=\"https://www.gitlab.com/moussaelianarsen/advmake\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"fa-brands:gitlab\"\u003e\u003c/span\u003e\n \u0026nbsp;AdvMake\n\u003c/a\u003e\n\u003c/p\u003e\n\u003ch2 id=\"building-from-source\"\u003eBuilding from source\u003c/h2\u003e\n\u003ch3 id=\"downloading\"\u003eDownloading\u003c/h3\u003e\n\u003cp\u003eAdvMake is hosted on my Gitea instance. If that is down, it is also mirrored on Gitlab.\u003c/p\u003e\n\u003cp\u003eTo download AdvMake, you can either use the download button on Gitea or Gitlab, or\nyou can use the git CLI\u003c/p\u003e\n\u003cp\u003eTo clone AdvMake using the CLI, run one of the following commands:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003egit clone https://gitea.arsenm.dev/Arsen6331/advmake.git\nOR\ngit clone https://gitlab.com/moussaelianarsen/advmake.git\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"building\"\u003eBuilding\u003c/h3\u003e\n\u003cp\u003eAdvMake is written in Go. This means go must be installed on your computer. Most\nlinux distros call the package that provides it either \u003ccode\u003ego\u003c/code\u003e or \u003ccode\u003egolang\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eOnce go is installed, you can check that it runs by running\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego version\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo compile AdvMake, run\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego build\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"installing\"\u003eInstalling\u003c/h3\u003e\n\u003cp\u003eTo install AdvMake, run:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003esudo install -Dm755 advmake /usr/bin\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOnce the command completes, AdvMake should be ready and you can run the following to make sure it works:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003eadvmake -h\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"},{id:7,href:"/docs/kbdemu/installation/",title:"Installation",description:"Installing kbdemu",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/kbdemu\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/km2f1wiy7enuh6il?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/kbdemu\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003ch2 id=\"using-precompiled-binary\"\u003eUsing precompiled binary\u003c/h2\u003e\n\u003cp\u003eKbdEmu uses continuous integration to compile. You can find the binary by\nclicking the CI badge above, selecting \u0026ldquo;Ubuntu2004\u0026rdquo; for the linux build or\n\u0026ldquo;macOS\u0026rdquo; for the macOS build, and then going to the artifacts tab.\u003c/p\u003e\n\u003ch2 id=\"building-from-source\"\u003eBuilding from source\u003c/h2\u003e\n\u003ch3 id=\"downloading\"\u003eDownloading\u003c/h3\u003e\n\u003cp\u003eKbdEmu is hosted in two places, Gitea and Gitlab. Either one can be used as\nit is mirrored from Gitea to Gitlab\u003c/p\u003e\n\u003cp\u003e\u003ca class=\"btn\" style=\"color: white; background-color: green;\" href=\"https://gitea.arsenm.dev/Arsen6331/kbdemu\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"cib:gitea\"\u003e\u003c/span\u003e \n \u0026nbsp;KbdEmu\n\u003c/a\u003e\n\n\u003ca class=\"btn\" style=\"color: white; background-color: OrangeRed;\" href=\"https://www.gitlab.com/moussaelianarsen/kbdemu\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"fa-brands:gitlab\"\u003e\u003c/span\u003e\n \u0026nbsp;KbdEmu\n\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eTo download kbdemu, you can either use the download button on one of the above, or\nyou can use the git command\u003c/p\u003e\n\u003cp\u003eTo clone kbdemu using the command, run one of the following commands:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003egit clone https://gitea.arsenm.dev/Arsen6331/kbdemu\nOR\ngit clone https://gitlab.com/moussaelianarsen/kbdemu\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow, you will want to \u003ccode\u003ecd\u003c/code\u003e into the root of this repo before completing the rest\nof these instructions\u003c/p\u003e\n\u003ch3 id=\"building\"\u003eBuilding\u003c/h3\u003e\n\u003cp\u003eSince KbdEmu is written in go, you will need go installed in order to compile it.\nMost linux distros call the package providing it either \u003ccode\u003ego\u003c/code\u003e or \u003ccode\u003egolang\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eOnce go is installed, you can check that it runs by running\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego version\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo compile KbdEmu, run the following commands:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego get github.com/go-vgo/robotgo\ngo get github.com/BurntSushi/toml\ngo get github.com/rs/zerolog/log\n\u003cspan class=\"nb\"\u003esource\u003c/span\u003e .envrc\ngo build\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"installing\"\u003eInstalling\u003c/h3\u003e\n\u003cp\u003eTo install kbdemu, run the following command:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003esudo install -Dm755 kbdemu /usr/bin\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOnce this command completes, to test whether kbdemu was installed properly, run\nthis command:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ekbdemu\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou should get an error warning you that kbdemu cannot find a TOML file. If you do,\nkbdemu is properly installed.\u003c/p\u003e\n"},{id:8,href:"/docs/opensend/installation/",title:"Installation",description:"Installing opensend",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/opensend\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/wrv3bbuujw57578h?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/opensend\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003ch2 id=\"using-precompiled-binary\"\u003eUsing precompiled binary\u003c/h2\u003e\n\u003cp\u003eOpensend uses continuous integration to compile. You can find the binary by clicking the download binary badge above.\u003c/p\u003e\n\u003ch2 id=\"building-from-source\"\u003eBuilding from source\u003c/h2\u003e\n\u003ch3 id=\"downloading\"\u003eDownloading\u003c/h3\u003e\n\u003cp\u003eOpensend is hosted on Gitea.\u003c/p\u003e\n\u003cp\u003e\u003ca class=\"btn\" style=\"color: white; background-color: green;\" href=\"https://gitea.arsenm.dev/opensend/opensend\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"cib:gitea\"\u003e\u003c/span\u003e \n \u0026nbsp;Opensend\n\u003c/a\u003e\n\n\u003ca class=\"btn\" style=\"color: white; background-color: OrangeRed;\" href=\"https://www.gitlab.com/moussaelianarsen/opensend\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"fa-brands:gitlab\"\u003e\u003c/span\u003e\n \u0026nbsp;Opensend\n\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eTo download opensend, you can either use the download button on one of the above, or\nyou can use the git command\u003c/p\u003e\n\u003cp\u003eTo clone opensend using the command, run the following command:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003egit clone https://gitea.arsenm.dev/opensend/opensend.git\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow, you will want to \u003ccode\u003ecd\u003c/code\u003e into the root of this repo before completing the rest\nof these instructions\u003c/p\u003e\n\u003ch3 id=\"building\"\u003eBuilding\u003c/h3\u003e\n\u003cp\u003eSince Opensend is written in go, you will need go installed in order to compile it.\nMost linux distros call the package providing it either \u003ccode\u003ego\u003c/code\u003e or \u003ccode\u003egolang\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eOnce go is installed, you can check that it runs by running\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego version\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo compile Opensend, run the following command:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003emake\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"installing\"\u003eInstalling\u003c/h3\u003e\n\u003cp\u003eTo install opensend, run one of the following commands:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003esudo make install \u003cspan class=\"c1\"\u003e# Linux\u003c/span\u003e\nsudo make install-macos \u003cspan class=\"c1\"\u003e# macOS\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOnce this command completes, to test whether opensend was installed properly, run\nthis command:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003eopensend -h\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou should get the usage for opensend.\u003c/p\u003e\n"},{id:9,href:"/docs/pak/installation/",title:"Installation",description:"Installing pak",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/pak\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/e4yacqd78gkte8a0?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/pak\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003ch2 id=\"using-precompiled-binary\"\u003eUsing precompiled binary\u003c/h2\u003e\n\u003cp\u003ePak uses continuous integration to compile. You can find the binary by clicking the download badge above.\u003c/p\u003e\n\u003ch2 id=\"using-the-aur\"\u003eUsing the AUR\u003c/h2\u003e\n\u003cp\u003eIf you are running an arch-based linux distro, you can use the Arch User Repository\nto install pak. First, make sure the \u003ccode\u003eyay\u003c/code\u003e AUR helper is installed, then run the following:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003eyay -S pak\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"building-from-source\"\u003eBuilding from source\u003c/h2\u003e\n\u003ch3 id=\"downloading\"\u003eDownloading\u003c/h3\u003e\n\u003cp\u003ePak is hosted on my Gitea instance. If that is down, it is also mirrored on Gitlab.\u003c/p\u003e\n\u003cp\u003e\u003ca class=\"btn\" style=\"color: white; background-color: green;\" href=\"https://gitea.arsenm.dev/Arsen6331/pak\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"cib:gitea\"\u003e\u003c/span\u003e \n \u0026nbsp;Pak\n\u003c/a\u003e\n\n\u003ca class=\"btn\" style=\"color: white; background-color: OrangeRed;\" href=\"https://www.gitlab.com/moussaelianarsen/pak\"\u003e\n \u003cspan class=\"iconify\" data-icon=\"fa-brands:gitlab\"\u003e\u003c/span\u003e\n \u0026nbsp;Pak\n\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eTo download pak, you can either use the download button on Gitea or Gitlab, or\nyou can use the git CLI\u003c/p\u003e\n\u003cp\u003eTo clone pak using the CLI, run one of the following commands:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003egit clone https://gitea.arsenm.dev/Arsen6331/pak\nOR\ngit clone https://gitlab.com/moussaelianarsen/pak\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"building\"\u003eBuilding\u003c/h3\u003e\n\u003cp\u003ePak is written in Go. This means go must be installed on your computer. Most\nlinux distros call the package that provides it either \u003ccode\u003ego\u003c/code\u003e or \u003ccode\u003egolang\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eOnce go is installed, you can check that it runs by running\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ego version\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo compile pak, run\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003emake\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThen, you will need to figure out which package manager you have. Here is a list\nof package managers with ready to use configs:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eapt\u003c/li\u003e\n\u003cli\u003eaptitude\u003c/li\u003e\n\u003cli\u003ebrew\u003c/li\u003e\n\u003cli\u003eyay (with wrapper)\u003c/li\u003e\n\u003cli\u003epacman (with wrapper)\u003c/li\u003e\n\u003cli\u003ezypper\u003c/li\u003e\n\u003cli\u003esnap\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf your package manager is not in the list, you can make a config for it. Go to\nthe Configuration page for more information.\u003c/p\u003e\n\u003ch3 id=\"installing\"\u003eInstalling\u003c/h3\u003e\n\u003cp\u003eIf your package manager is in the list, use one of these:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eapt: \u003ccode\u003esudo make aptinstall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eaptitude: \u003ccode\u003esudo make aptitude\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebrew: \u003ccode\u003esudo make brewinstall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eyay: \u003ccode\u003esudo make yayinstall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003epacman: \u003ccode\u003esudo make pacinstall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ezypper: \u003ccode\u003esudo make zyppinstall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003esnap: \u003ccode\u003esudo make snapinstall\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ecustom: \u003ccode\u003esudo make installbinonly\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOnce the command completes, unless you\u0026rsquo;re using a custom config, pak should be ready\nand you can run the following to make sure it works:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003epak\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eGo to the Configuration page for instructions on making a custom config, you \u003cstrong\u003emust\u003c/strong\u003e\nhave a config for pak to function.\u003c/p\u003e\n"},{id:10,href:"/docs/simpledash/installation/",title:"Installation",description:"Installing simpledash",content:"\u003ch2 id=\"building-from-source\"\u003eBuilding from source\u003c/h2\u003e\n\u003ch3 id=\"prerequisites\"\u003ePrerequisites\u003c/h3\u003e\n\u003cp\u003eSimpledash utilizes an SQLite database for session storage. That means that sqlite3 must be installed along with its development files to build simpledash. It also means cross-compilation is not as simple as setting some environment variables.\u003c/p\u003e\n\u003cp\u003eOn Debian, the required packages are: \u003ccode\u003esqlite3\u003c/code\u003e and \u003ccode\u003esqlite3-dev\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eOn Arch, the required package is \u003ccode\u003esqlite\u003c/code\u003e.\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"building\"\u003eBuilding\u003c/h3\u003e\n\u003cp\u003eTo build simpledash, first, clone the git repository of simpledash. Then, use a terminal to enter the cloned directory and run:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003ego build\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"building-with-advmake\"\u003eBuilding with Advmake\u003c/h3\u003e\n\u003cp\u003eSimpledash can be built with another of my projects, \u003ccode\u003eadvmake\u003c/code\u003e. Using this also builds the CSS framework used in this project, Bulma.\u003c/p\u003e\n\u003cp\u003eTo build simpledash using advmake, simply run:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003eadvmake\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo run via advmake, run:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003eadvmake run\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"},{id:11,href:"/docs/kbdemu/",title:"KbdEmu Docs",description:"Documentation for KbdEmu, the HID emulator",content:""},{id:12,href:"/docs/opensend/",title:"OpenSend Docs",description:"Documentation for the OpenSend file sharing program",content:""},{id:13,href:"/docs/pak/",title:"Pak Docs",description:"Documentation for the Pak package manager wrapper",content:""},{id:14,href:"/docs/simpledash/",title:"Simpledash Docs",description:"Documentation for Simpledash, a simple and fast web dashboard",content:""},{id:15,href:"/docs/kbdemu/usage/",title:"Usage",description:"Using kbdemu",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/kbdemu\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/km2f1wiy7enuh6il?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/kbdemu\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eThis page assumes you have already installed KbdEmu. If not, follow the installation instructions on the installation page:\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #357edd;\" href=\"../installation\"\u003e\n \n Installation\n\u003c/a\u003e\n\n\u003ch2 id=\"scripts\"\u003eScripts\u003c/h2\u003e\n\u003cp\u003eKbdEmu uses \u003ca href=\"https://gitea.arsenm.dev/Arsen6331/scpt\"\u003escpt\u003c/a\u003e as its scripting language. The example script for kbdemu looks like this:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eset testKey to \u0026quot;x\u0026quot;\nkeystroke $testKey with action \u0026quot;hold\u0026quot;\nsleep \u0026quot;1s\u0026quot;\nkeystroke $testKey with action \u0026quot;release\u0026quot;\ntype \u0026quot;AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz\u0026quot;\nscroll 5 with direction \u0026quot;up\u0026quot;\nclick \u0026quot;right\u0026quot;\nmove-mouse [0, 0]\nsend-notification \u0026quot;Test\u0026quot;\nbeep\nopen-location \u0026quot;https://www.arsenm.dev/\u0026quot;\nset showDetails to (display-dialog \u0026quot;Show details?\u0026quot; with type \u0026quot;yesno\u0026quot;)\nif $showDetails {\n display-dialog {\u0026quot;Color: \u0026quot; + (pixel-color [100, 100]) + \u0026quot;, Mouse: \u0026quot; + (str (mouse-position))} with title \u0026quot;Details\u0026quot;\n}\nprint {\u0026quot;\\n\u0026quot; + (user-choice \u0026quot;test\u0026quot; with items [\u0026quot;Hello\u0026quot;, \u0026quot;World\u0026quot;, 3.1415926535, $GOOS, $GOARCH, true, false, (numcpu)])}\nlog \u0026quot;Complete!\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBy default, the \u003ccode\u003ekbdemu\u003c/code\u003e command will look for and execute a file called \u003ccode\u003ekbdemu.scpt\u003c/code\u003e, but that can be changed using the \u003ccode\u003e--file\u003c/code\u003e flag.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"builtins\"\u003eBuiltins\u003c/h2\u003e\n\u003cp\u003eKbdEmu comes with some extra functions for automation\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"numcpu\"\u003e\u003ccode\u003enumcpu\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eReturns the amount of available CPUs as a number.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprint (numcpu)\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"sleep\"\u003e\u003ccode\u003esleep\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eSleeps for a duration as specified by an unnamed string argument formatted according to the specification of golang\u0026rsquo;s \u003ccode\u003etime.ParseDuration()\u003c/code\u003e:\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://golang.org/pkg/time#ParseDuration\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esleep \u0026quot;1s\u0026quot;\nsleep \u0026quot;1h2m\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"display-dialog\"\u003e\u003ccode\u003edisplay-dialog\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eDisplays a dialog window with the specified parameters.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003edisplay-dialog \u0026quot;Test1\u0026quot;\ndisplay-dialog \u0026quot;Test2\u0026quot; with title \u0026quot;Title Test\u0026quot;\nprint (display-dialog \u0026quot;Test3\u0026quot; with title \u0026quot;Entry Test\u0026quot; with type \u0026quot;entry\u0026quot;)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThese are all the supported dialog types:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003einfo\u003c/li\u003e\n\u003cli\u003ewarning\u003c/li\u003e\n\u003cli\u003eerror\u003c/li\u003e\n\u003cli\u003eentry\u003c/li\u003e\n\u003cli\u003eyesno\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDefault dialog type is info.\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"send-notification\"\u003e\u003ccode\u003esend-notification\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eSends a notification according to the specified parameters\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esend-notification \u0026quot;Test\u0026quot;\nsend-notification \u0026quot;Test\u0026quot; with title \u0026quot;Title\u0026quot;\nsend-notification \u0026quot;Test\u0026quot; with title \u0026quot;Title\u0026quot; with icon \u0026quot;test.png\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"beep\"\u003e\u003ccode\u003ebeep\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eCreates a beep sound, if impossible, falls back to sending bell character.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ebeep\nbeep \u0026quot;3s\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"click\"\u003e\u003ccode\u003eclick\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eEmulates a mouse click\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eclick \u0026quot;right\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"scroll\"\u003e\u003ccode\u003escroll\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eScrolls the specifed amount in the specified direction\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003escroll 5 with direction \u0026quot;up\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"move-mouse\"\u003e\u003ccode\u003emove-mouse\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eMoves the cursor to the specified coordinates\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003emove-mouse [100, 200]\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"keystroke\"\u003e\u003ccode\u003ekeystroke\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eEmulates a key event\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ekeystroke \u0026quot;y\u0026quot; with action \u0026quot;hold\u0026quot;\nsleep \u0026quot;2s\u0026quot;\nkeystroke \u0026quot;y\u0026quot; with action \u0026quot;release\u0026quot;\nkeystroke \u0026quot;x\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eDefault action is \u003ccode\u003etap\u003c/code\u003e which presses and releases the key.\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"type\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eTypes a string using the keyboard\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003etype \u0026quot;Hello, World\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"mouse-position\"\u003e\u003ccode\u003emouse-position\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eReturns the current mouse position in the form of an array containing two number elements.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprint (mouse-position) # [0 0]\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"pixel-color\"\u003e\u003ccode\u003epixel-color\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eReturns a string containing the hex color of the given coordinates.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprint (pixel-color [100, 100]) # ffffff\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"log\"\u003e\u003ccode\u003elog\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eLogs the provided message at the given level.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003elog \u0026quot;Complete\u0026quot;\nlog \u0026quot;Error\u0026quot; with level \u0026quot;fatal\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe available levels are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003einfo\u003c/li\u003e\n\u003cli\u003edebug\u003c/li\u003e\n\u003cli\u003ewarn\u003c/li\u003e\n\u003cli\u003efatal\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDefault log level is info\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"user-choice\"\u003e\u003ccode\u003euser-choice\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eDisplays a user choice dialog window with provided items, returns selected item.\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003euser-choice \u0026quot;Choose an option\u0026quot; with items [\u0026quot;Hello\u0026quot;, \u0026quot;World\u0026quot;, 1, 3.14159, 6.28318]\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch3 id=\"open-location\"\u003e\u003ccode\u003eopen-location\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eOpens given URL in the default application set to open it.\u003c/p\u003e\n\u003cp\u003eExamples:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eopen-location \u0026quot;https://www.arsenm.dev\u0026quot;\nopen-location \u0026quot;/home\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch2 id=\"variables\"\u003eVariables\u003c/h2\u003e\n\u003cp\u003eKbdEmu exposes some variables for use in scripts.\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"goos\"\u003e\u003ccode\u003e$GOOS\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe value from golang\u0026rsquo;s \u003ccode\u003eruntime.GOOS\u003c/code\u003e\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://golang.org/pkg/runtime#GOOS\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch3 id=\"goarch\"\u003e\u003ccode\u003e$GOARCH\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eThe value from golang\u0026rsquo;s \u003ccode\u003eruntime.GOARCH\u003c/code\u003e\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: white; background-color: #00ACD7;\" href=\"https://golang.org/pkg/runtime#GOARCH\"\u003e\n \n \u003cspan class=\"iconify icon:cib:go\"\u003e\u003c/span\u003e\u0026nbsp;\n \n Godoc\n\u003c/a\u003e\n\n\u003chr\u003e\n\u003ch3 id=\"arguments\"\u003e\u003ccode\u003e$arguments\u003c/code\u003e\u003c/h3\u003e\n\u003cp\u003eNon-flag command line arguments provided to KbdEmu\u003c/p\u003e\n\u003cp\u003eExample:\u003c/p\u003e\n\u003cp\u003eCommand:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003ekbdemu --file script.scpt \u003cspan class=\"s2\"\u003e\u0026#34;Hello, World\u0026#34;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eContents of \u003ccode\u003escript.scpt\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprint $arguments[0] # Hello, World\n\u003c/code\u003e\u003c/pre\u003e"},{id:16,href:"/docs/opensend/usage/",title:"Usage",description:"Using opensend",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/opensend\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/wrv3bbuujw57578h?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/opensend\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eThis page assumes you have already installed Opensend. If not, follow the installation\ninstructions on the installation page.\u003c/p\u003e\n\u003ca class=\"btn\" style=\"color: ; background-color: ;\" href=\"../installation\"\u003e\n \n Installation\n\u003c/a\u003e\n\n\u003ch3 id=\"configuration\"\u003eConfiguration\u003c/h3\u003e\n\u003cp\u003eOpensend allows configuration by TOML and by command line flags. It looks at the following paths for configs in the specified order:\u003c/p\u003e\n\u003ch4 id=\"config-files\"\u003eConfig files\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003eConfig path from \u003ccode\u003e--config\u003c/code\u003e flag\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~/.config/opensend.toml\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e/etc/opensend.toml\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"command-line-flags\"\u003eCommand line flags\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003eUsage of opensend:\n -d string\n Data to send\n -dest-dir string\n Destination directory for files or dirs sent over opensend (default \u0026#34;/home/arsen/Downloads\u0026#34;)\n -r Receive data\n -s Send data\n -send-to string\n Use IP address of receiver instead of mDNS\n -skip-mdns\n Skip zeroconf service registration (use if mdns fails)\n -t string\n Type of data being sent\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe purpose of the mdns-skipping flags is to account for the iSH app in iOS, as the mdns resolver and registration fails on it.\u003c/p\u003e\n\u003ch3 id=\"algorithms-and-software-used\"\u003eAlgorithms and software used\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRSA for asymmetric encryption\u003c/li\u003e\n\u003cli\u003eAES for symmetric encryption\u003c/li\u003e\n\u003cli\u003eTar for archiving directories\u003c/li\u003e\n\u003cli\u003eZstandard for compression\u003c/li\u003e\n\u003cli\u003eBase91 for encoding\u003c/li\u003e\n\u003cli\u003eGob for serialization\u003c/li\u003e\n\u003cli\u003eJSON for serialization\u003c/li\u003e\n\u003cli\u003eTCP sockets for transfer\u003c/li\u003e\n\u003cli\u003eZeroconf/mDNS for device discovery\u003c/li\u003e\n\u003c/ul\u003e\n"},{id:17,href:"/docs/pak/usage/",title:"Usage",description:"Using pak",content:"\u003cp\u003e\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://ci.appveyor.com/project/moussaelianarsen/pak\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://ci.appveyor.com/api/projects/status/e4yacqd78gkte8a0?svg=true\"/\u003e\u003c/a\u003e\n\u003ca style=\"margin-left: 1px; margin-right: 1px; display: inline-block\" href=\"https://minio.arsenm.dev/minio/pak\"\u003e\u003cimg style=\"height: 18px; width: 100px;\" src=\"https://img.shields.io/static/v1.svg?label=download\u0026message=binary\u0026color=blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eUsing pak is simple, just run \u003ccode\u003epak\u003c/code\u003e and one of the commands from the config file.\nPak understands partial commands, so these commands will be identical:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003epak in \u0026lt;package\u0026gt;\nOR\npak inst \u0026lt;package\u0026gt;\nOR\npak install \u0026lt;package\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe lack of \u003ccode\u003esudo\u003c/code\u003e is intentional. Pak will not allow running from root by default\nas it already invokes root internally. To bypass this, simply give pak the \u003ccode\u003e-r\u003c/code\u003e flag.\u003c/p\u003e\n\u003cp\u003eUsing shortcuts in pak is just as simple as commands, just run \u003ccode\u003epak\u003c/code\u003e and a shortcut,\nlike this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003epak rm \u0026lt;package\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"},];index.add(docs);userinput.addEventListener('input',show_results,true);suggestions.addEventListener('click',accept_suggestion,true);function show_results(){var value=this.value;var results=index.search(value,5);var entry,childs=suggestions.childNodes;var i=0,len=results.length;suggestions.classList.remove('d-none');results.forEach(function(page){entry=document.createElement('div');entry.innerHTML='<a href><span></span><span></span></a>';a=entry.querySelector('a'),t=entry.querySelector('span:first-child'),d=entry.querySelector('span:nth-child(2)');a.href=page.href;t.textContent=page.title;d.textContent=page.description;console.log(page.description);suggestions.appendChild(entry);});while(childs.length>len){suggestions.removeChild(childs[i])}}
function accept_suggestion(){while(suggestions.lastChild){suggestions.removeChild(suggestions.lastChild);}
return false;}}());