Switch theme to Doks
This commit is contained in:
		
							
								
								
									
										22
									
								
								content/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								content/_index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Home"
 | 
			
		||||
draft: false
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
### My Projects
 | 
			
		||||
---
 | 
			
		||||
- Pak: A cross-platform wrapper written in go designed to unify package managers. It uses TOML configs to define package managers. Options include commands, shortcuts, root user invocation, root user invocation command, and package manager command.
 | 
			
		||||
 | 
			
		||||
{{< button-gitea project="pak" text="Pak" color="green" >}}
 | 
			
		||||
 | 
			
		||||
- Opensend: A program made to share files and websites between computers securely and reliably, written in go, using zeroconf for discovery, AES and RSA for encryption, and Tar + Zstandard for compression.
 | 
			
		||||
 | 
			
		||||
{{< button-gitea project="opensend" text="Opensend" owner="opensend" color="green" >}}
 | 
			
		||||
 | 
			
		||||
- Statusboard: A full-stack web application that tracks website status written in Swift, Swift Crypto, and the Vapor stack. It uses a tabler web UI for the dashboard, a JSON config to define servers to track, and an SQLite database to keep track of log-ins and show private servers. My instance can be found [here](https://status.arsenm.dev)
 | 
			
		||||
 | 
			
		||||
{{< button-gitea project="statusboard" text="Statusboard" color="green" >}}
 | 
			
		||||
 | 
			
		||||
- Chromebook Linux Audio: A collection of bash scripts to compile and install the required kernel and audio server to enable audio and other chromebook features in a mainline linux distro.
 | 
			
		||||
 | 
			
		||||
{{< button-gitlab project="chromebook-linux-audio" text="Chromebook Linux Audio" color="OrangeRed" >}}
 | 
			
		||||
							
								
								
									
										4
									
								
								content/docs/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								content/docs/_index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Docs"
 | 
			
		||||
draft: false
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										8
									
								
								content/docs/advmake/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								content/docs/advmake/_index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
---
 | 
			
		||||
title: "AdvMake Docs"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Documentation for the AdvMake build system"
 | 
			
		||||
menu:
 | 
			
		||||
    docs:
 | 
			
		||||
        parent: "docs"
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										242
									
								
								content/docs/advmake/build-files.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										242
									
								
								content/docs/advmake/build-files.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,242 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Build Files"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Understanding AdvMake Build Files"
 | 
			
		||||
---
 | 
			
		||||
{{< button-gitea color="green" project="advmake" text="AdvMake" >}}
 | 
			
		||||
{{< button-gitlab color="OrangeRed" project="advmake" text="AdvMake" >}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Format
 | 
			
		||||
AdvMake uses [Starlark](https://github.com/bazelbuild/starlark) as the format for its build files.
 | 
			
		||||
Extra builtins are also defined for both convenience and extra functionality.
 | 
			
		||||
 | 
			
		||||
Starlark is a Python-like language meant for configuration files.
 | 
			
		||||
 | 
			
		||||
### Configuration
 | 
			
		||||
Build files are by default called `AdvMakefile`, but that can be set via `-f`
 | 
			
		||||
 | 
			
		||||
An AdvMakefile example can be found at AdvMake's repo as it uses AdvMake itself.
 | 
			
		||||
 | 
			
		||||
AdvMake runs functions exposed by starlark in the format `<name>_<target>`.
 | 
			
		||||
To set the default name and target, the global variables `defaultName`, and `defaultTarget` must be set.
 | 
			
		||||
Here is an example from AdvMake's AdvMakefile:
 | 
			
		||||
```python
 | 
			
		||||
defaultName = "advmake"
 | 
			
		||||
defaultTarget = "build"
 | 
			
		||||
```
 | 
			
		||||
This will tell AdvMake to run the function `advmake_build()` when run with no arguments.
 | 
			
		||||
 | 
			
		||||
If AdvMake is run with one argument (such as `advmake install`), it will use the default name with the specified target,
 | 
			
		||||
so in that case, it would run `advmake_install()`. 
 | 
			
		||||
 | 
			
		||||
If run with two arguments, AdvMake will use the first argument as the name and the second as the target.
 | 
			
		||||
So, running `advmake hello world` would run the function `hello_world()`.
 | 
			
		||||
 | 
			
		||||
### Builtins
 | 
			
		||||
As previously mentioned, AdvMake comes with extra builtins. Those are as follows:
 | 
			
		||||
 | 
			
		||||
#### `log()`
 | 
			
		||||
 | 
			
		||||
The log function uses zerolog in go to log a message to STDOUT. It has two arguments.
 | 
			
		||||
The first is a string with the message to log, and the second is `level` which is optional
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
```python
 | 
			
		||||
log("Info log") # Default level is info
 | 
			
		||||
log("Warn log", level="warn") # Warn level log
 | 
			
		||||
log("Debug log", level="debug") # Debug level log
 | 
			
		||||
log("Fatal log", level="fatal") # Fatal level log. This will exit the program when executed
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `execute()`
 | 
			
		||||
 | 
			
		||||
The execute function runs a script using `sh -c`. This function has three arguments.
 | 
			
		||||
The first is required and is a string with the script to run, the second is `output`
 | 
			
		||||
which is optional. It can be set to `return`, `stdout`, or `both`, and the default is `both`.
 | 
			
		||||
 | 
			
		||||
The `output` argument controls where the script's output will be directed:
 | 
			
		||||
- `return`: Returns script output as string
 | 
			
		||||
- `stdout`: Prints script output to STDOUT, returning nothing
 | 
			
		||||
- `both`: Prints to STDOUT and returns as string
 | 
			
		||||
 | 
			
		||||
The third argument is `concurrent` which can be either `True` or `False`, default `False`.
 | 
			
		||||
If `concurrent` is set to `True`, all the lines in the script will be split and run concurrently
 | 
			
		||||
via goroutines. The maximum threads for goroutines can be controlled using the `GOMAXPROCS` environment
 | 
			
		||||
variable and is by default the amount of CPU cores present.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
```python
 | 
			
		||||
user = execute("whoami") # This will print the username to STDOUT and set the user variable to it
 | 
			
		||||
user = execute("whoami", output="return") # This will set the user variable to the username but not print it
 | 
			
		||||
 | 
			
		||||
execute("""
 | 
			
		||||
cp file destination
 | 
			
		||||
mv destination destination-1
 | 
			
		||||
echo 'hello world'
 | 
			
		||||
""") # Example of a multiline script
 | 
			
		||||
 | 
			
		||||
execute("""
 | 
			
		||||
install -Dm755 program /usr/bin
 | 
			
		||||
install -Dm755 program.cfg /etc
 | 
			
		||||
""", concurrent=True) # Example of a concurrent multiline script
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `getEnv()`
 | 
			
		||||
 | 
			
		||||
The getEnv function simply returns the value of the environment variable specified in its first argument.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
term = getEnv("TERM") # Sets variable term to value of $TERM
 | 
			
		||||
print("Nice " + term) # Prints "Nice $TERM"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `setEnv()`
 | 
			
		||||
 | 
			
		||||
The setEnv function sets an environment variable. It has three arguments.
 | 
			
		||||
The first is the key, it is the name of the environment variable.
 | 
			
		||||
The second is the new value, what the key should be set to.
 | 
			
		||||
The third is optional, it is `onlyIfUnset` and it can be set to `True` or `False`, default `False`
 | 
			
		||||
 | 
			
		||||
`onlyIfUnset` checks that the variable is not already set before setting it, this can be useful for
 | 
			
		||||
setting defaults.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
```python
 | 
			
		||||
setEnv("MY_ENV_VAR", "Hello, World") # Sets $MY_ENV_VAR to "Hello, World"
 | 
			
		||||
setEnv("CC", "gcc", onlyIfUnset=True) # Sets $CC to "gcc", but only if $CC is not already set
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `expandFile()`
 | 
			
		||||
 | 
			
		||||
The expandFile function replaces all instances of $VAR with the value specified.
 | 
			
		||||
 | 
			
		||||
expandFile has two arguments. The first accepts a filename to modify.
 | 
			
		||||
The second accepts a dictionary to act as mappings for value replacements.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
expandFile("a.txt", {"A": "Hello", "B": "World"}) # Replace $A with Hello and $B with world in file a.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `download()`
 | 
			
		||||
 | 
			
		||||
The download function downloads a file at a URL.
 | 
			
		||||
 | 
			
		||||
download has two arguments. The first is a URL, and the second is an optional
 | 
			
		||||
argument called `filename`. If `filename` is not provided, the filename will
 | 
			
		||||
be taken from the URL.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
```python
 | 
			
		||||
download("https://www.arsenm.dev/logo-white.png") # Downloads logo-white.png
 | 
			
		||||
download("https://www.arsenm.dev/logo-white.png", filename="logo.png") # Downloads logo-white.png as logo.png
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `lookPath()`
 | 
			
		||||
 | 
			
		||||
The lookPath function uses go's `exec.LookPath()` to find the absolute path of a command.
 | 
			
		||||
It has a single argument which is the command to look for. If a command is not found, lookPath
 | 
			
		||||
returns `-1`.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
```python
 | 
			
		||||
lookPath("sh") # /bin/sh
 | 
			
		||||
lookPath("nonExistentCommand") # -1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `userChoice()`
 | 
			
		||||
 | 
			
		||||
The userChoice function presents the user with a choice. It has two arguments. The first
 | 
			
		||||
is a prompt to be displayed to the user, and the second is a list of choices.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
userChoice("Choose command", ["find", "ls"])
 | 
			
		||||
# This returns:
 | 
			
		||||
 | 
			
		||||
# [1] "find"
 | 
			
		||||
# [2] "ls"
 | 
			
		||||
# Choose command:
 | 
			
		||||
```
 | 
			
		||||
The function will return the chosen object (if input to above is `1`, function returns `"find"`)
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `input()`
 | 
			
		||||
 | 
			
		||||
The input function is a simple function that uses go's `fmt.Print()` and `fmt.Scanln()` to replicate
 | 
			
		||||
the functionality of python's `input()` function. It has a single argument, which is the prompt and returns
 | 
			
		||||
the inputted text.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
x = input("Name: ") # This will print "Name: " and then wait for input.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `fileExists()`
 | 
			
		||||
 | 
			
		||||
The fileExists function checks if a specified file exists and is accessible in the filesystem. It has a single
 | 
			
		||||
argument which is the path to the file being checked, and returns a boolean reflecting the state of the file.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
```python
 | 
			
		||||
if fileExists("/etc/passwd"):
 | 
			
		||||
	print("/etc/passwd exists!") # /etc/passwd exists!
 | 
			
		||||
if fileExists("/abcdef"):
 | 
			
		||||
	print("/abcdef exists!") # No output because /abcdef most likely does not exist
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `getOS()`
 | 
			
		||||
 | 
			
		||||
The getOS function returns the value of `runtime.GOOS`. It has no arguments.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
if getOS() == "linux":
 | 
			
		||||
	print("This is Linux!")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `getArch()`
 | 
			
		||||
 | 
			
		||||
The getArch function returns the value of `runtime.GOARCH`. It has no arguments.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
if getArch() == "386":
 | 
			
		||||
	print("x86 32-bit")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### `getCPUNum()`
 | 
			
		||||
 | 
			
		||||
The getCPUNum function returns the amount of CPUs available to AdvMake. It has no arguments.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```python
 | 
			
		||||
print(getCPUNum() + " CPUs available!")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										50
									
								
								content/docs/advmake/installation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								content/docs/advmake/installation.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Installation"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Installing AdvMake"
 | 
			
		||||
---
 | 
			
		||||
{{< button-gitea color="green" project="advmake" text="AdvMake" >}}
 | 
			
		||||
{{< button-gitlab color="OrangeRed" project="advmake" text="AdvMake" >}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Building from source
 | 
			
		||||
 | 
			
		||||
### Downloading
 | 
			
		||||
AdvMake is hosted on my Gitea instance. If that is down, it is also mirrored on Gitlab.
 | 
			
		||||
 | 
			
		||||
To download AdvMake, you can either use the download button on Gitea or Gitlab, or
 | 
			
		||||
you can use the git CLI
 | 
			
		||||
 | 
			
		||||
To clone AdvMake using the CLI, run one of the following commands:
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://gitea.arsenm.dev/Arsen6331/advmake.git
 | 
			
		||||
OR
 | 
			
		||||
git clone https://gitlab.com/moussaelianarsen/advmake.git
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Building
 | 
			
		||||
 | 
			
		||||
AdvMake is written in Go. This means go must be installed on your computer. Most
 | 
			
		||||
linux distros call the package that provides it either `go` or `golang`.
 | 
			
		||||
 | 
			
		||||
Once go is installed, you can check that it runs by running
 | 
			
		||||
```bash
 | 
			
		||||
go version
 | 
			
		||||
```
 | 
			
		||||
To compile AdvMake, run
 | 
			
		||||
```bash
 | 
			
		||||
go build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Installing
 | 
			
		||||
 | 
			
		||||
To install AdvMake, run:
 | 
			
		||||
```bash
 | 
			
		||||
sudo install -Dm755 advmake /usr/bin
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Once the command completes, AdvMake should be ready and you can run the following to make sure it works:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
advmake -h
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										8
									
								
								content/docs/kbdemu/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								content/docs/kbdemu/_index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
---
 | 
			
		||||
title: "KbdEmu Docs"
 | 
			
		||||
draft: true
 | 
			
		||||
description: "Documentation for KbdEmu, the HID emulator"
 | 
			
		||||
menu:
 | 
			
		||||
    docs:
 | 
			
		||||
        parent: "docs"
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										70
									
								
								content/docs/kbdemu/installation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								content/docs/kbdemu/installation.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Installation"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Installing kbdemu"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="kbdemu" projectID="km2f1wiy7enuh6il" >}}
 | 
			
		||||
{{< minio-s3 project="kbdemu" >}}
 | 
			
		||||
 | 
			
		||||
## Using precompiled binary
 | 
			
		||||
KbdEmu uses continuous integration to compile. You can find the binary by
 | 
			
		||||
clicking the CI badge above, selecting "Ubuntu2004" for the linux build or
 | 
			
		||||
"macOS" for the macOS build, and then going to the artifacts tab.
 | 
			
		||||
 | 
			
		||||
## Building from source
 | 
			
		||||
 | 
			
		||||
### Downloading
 | 
			
		||||
KbdEmu is hosted in two places, Gitea and Gitlab. Either one can be used as
 | 
			
		||||
it is mirrored from Gitea to Gitlab
 | 
			
		||||
 | 
			
		||||
{{< button-gitea color="green" project="kbdemu" text="KbdEmu" >}}
 | 
			
		||||
{{< button-gitlab color="OrangeRed" project="kbdemu" text="KbdEmu" >}}
 | 
			
		||||
 | 
			
		||||
To download kbdemu, you can either use the download button on one of the above, or
 | 
			
		||||
you can use the git command
 | 
			
		||||
 | 
			
		||||
To clone kbdemu using the command, run one of the following commands:
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://gitea.arsenm.dev/Arsen6331/kbdemu
 | 
			
		||||
OR
 | 
			
		||||
git clone https://gitlab.com/moussaelianarsen/kbdemu
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now, you will want to `cd` into the root of this repo before completing the rest
 | 
			
		||||
of these instructions
 | 
			
		||||
 | 
			
		||||
### Building
 | 
			
		||||
 | 
			
		||||
Since KbdEmu is written in go, you will need go installed in order to compile it.
 | 
			
		||||
Most linux distros call the package providing it either `go` or `golang`.
 | 
			
		||||
 | 
			
		||||
Once go is installed, you can check that it runs by running
 | 
			
		||||
```bash
 | 
			
		||||
go version
 | 
			
		||||
```
 | 
			
		||||
To compile KbdEmu, run the following commands:
 | 
			
		||||
```bash
 | 
			
		||||
go get github.com/go-vgo/robotgo
 | 
			
		||||
go get github.com/BurntSushi/toml
 | 
			
		||||
go get github.com/rs/zerolog/log
 | 
			
		||||
source .envrc
 | 
			
		||||
go build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Installing
 | 
			
		||||
 | 
			
		||||
To install kbdemu, run the following command:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
sudo install -Dm755 kbdemu /usr/bin
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Once this command completes, to test whether kbdemu was installed properly, run
 | 
			
		||||
this command:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
kbdemu
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You should get an error warning you that kbdemu cannot find a TOML file. If you do,
 | 
			
		||||
kbdemu is properly installed.
 | 
			
		||||
							
								
								
									
										69
									
								
								content/docs/kbdemu/usage.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								content/docs/kbdemu/usage.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Usage"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Using kbdemu"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="kbdemu" projectID="km2f1wiy7enuh6il" >}}
 | 
			
		||||
{{< minio-s3 project="kbdemu" >}}
 | 
			
		||||
 | 
			
		||||
This page assumes you have already installed KbdEmu. If not, follow the installation
 | 
			
		||||
instructions on the installation page.
 | 
			
		||||
 | 
			
		||||
{{< button text="Installation" link="../installation" color="blue">}}
 | 
			
		||||
 | 
			
		||||
### Configs
 | 
			
		||||
 | 
			
		||||
KbdEmu uses TOML configs to tell it what to do. This is the example config which
 | 
			
		||||
contains all supported features:
 | 
			
		||||
 | 
			
		||||
```toml
 | 
			
		||||
[[action]]
 | 
			
		||||
type = "var"
 | 
			
		||||
action = "set key to z"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "kbd"
 | 
			
		||||
action = "hold key @key@"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "misc"
 | 
			
		||||
action = "wait 1 second"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "kbd"
 | 
			
		||||
action = "release key @key@"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "kbd"
 | 
			
		||||
action = "press space"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "kbd"
 | 
			
		||||
action = "type AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "mse"
 | 
			
		||||
action = "scroll up 5"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "mse"
 | 
			
		||||
action= "right click"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "mse"
 | 
			
		||||
action = "move to {0,0}"
 | 
			
		||||
 | 
			
		||||
 [[action]]
 | 
			
		||||
type = "misc"
 | 
			
		||||
action = "show message Actions complete!"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
As you can see, the configs are pretty simple. Here is a list of all the currently
 | 
			
		||||
supported features:
 | 
			
		||||
{{<table "f6 w-100 mw8 center">}}
 | 
			
		||||
| Var Type          | Misc Type         | Kbd Type     | Mse Type       |
 | 
			
		||||
|-------------------|-------------------|--------------|----------------|
 | 
			
		||||
| Setting Variables | Delays            | Hold Keys    | Scrolling      |
 | 
			
		||||
|                   | Showing Messages  | Release Keys | Mouse Clicks   |
 | 
			
		||||
|                   |                   | Type Strings | Mouse Movement |
 | 
			
		||||
{{</table>}}
 | 
			
		||||
							
								
								
									
										8
									
								
								content/docs/opensend/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								content/docs/opensend/_index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
---
 | 
			
		||||
title: "OpenSend Docs"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Documentation for the OpenSend file sharing program"
 | 
			
		||||
menu:
 | 
			
		||||
    docs:
 | 
			
		||||
        parent: "docs"
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										37
									
								
								content/docs/opensend/gui.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								content/docs/opensend/gui.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
---
 | 
			
		||||
title: "GUI"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Opensend fyne GUI"
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
{{< appveyor-ci project="opensend" projectID="wrv3bbuujw57578h" >}}
 | 
			
		||||
{{< minio-s3 project="opensend" >}}
 | 
			
		||||
 | 
			
		||||
This page assumes you have already installed Opensend. If not, follow the installation
 | 
			
		||||
instructions on the installation page.
 | 
			
		||||
 | 
			
		||||
{{< button text="Installation" link="../installation" color="blue">}}
 | 
			
		||||
 | 
			
		||||
### GUI Installation
 | 
			
		||||
 | 
			
		||||
Opensend GUI has been written in golang using [fyne](https://fyne.io). Its source code can be found here:
 | 
			
		||||
 | 
			
		||||
{{< button-gitea text="Opensend GUI" project="opensend-gui" owner="opensend" color="green" >}}
 | 
			
		||||
 | 
			
		||||
To download Opensend GUI, run the following command
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://gitea.arsenm.dev/opensend/opensend-gui.git
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To build Opensend GUI, `go` must be installed. The process for that is explained in the installation instructions for Opensend. Once `go` is installed, run:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
go build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This may take a while as `go` downloads and compiles Opensend GUI and Fyne.
 | 
			
		||||
 | 
			
		||||
Once the build is complete, there should be a file named `opensend-gui` in the directory. Run this file to open the GUI which should look like this:
 | 
			
		||||
 | 
			
		||||
{{< image src="/opensend/gui_start.webp" alt="Opensend GUI on start" >}}
 | 
			
		||||
							
								
								
									
										60
									
								
								content/docs/opensend/installation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								content/docs/opensend/installation.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Installation"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Installing opensend"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="opensend" projectID="wrv3bbuujw57578h" >}}
 | 
			
		||||
{{< minio-s3 project="opensend" >}}
 | 
			
		||||
 | 
			
		||||
## Using precompiled binary
 | 
			
		||||
Opensend uses continuous integration to compile. You can find the binary by clicking the download binary badge above.
 | 
			
		||||
 | 
			
		||||
## Building from source
 | 
			
		||||
 | 
			
		||||
### Downloading
 | 
			
		||||
Opensend is hosted on Gitea.
 | 
			
		||||
 | 
			
		||||
{{< button-gitea color="green" project="opensend" owner="opensend" text="Opensend" >}}
 | 
			
		||||
 | 
			
		||||
To download opensend, you can either use the download button on one of the above, or
 | 
			
		||||
you can use the git command
 | 
			
		||||
 | 
			
		||||
To clone opensend using the command, run the following command:
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://gitea.arsenm.dev/opensend/opensend.git
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now, you will want to `cd` into the root of this repo before completing the rest
 | 
			
		||||
of these instructions
 | 
			
		||||
 | 
			
		||||
### Building
 | 
			
		||||
 | 
			
		||||
Since Opensend is written in go, you will need go installed in order to compile it.
 | 
			
		||||
Most linux distros call the package providing it either `go` or `golang`.
 | 
			
		||||
 | 
			
		||||
Once go is installed, you can check that it runs by running
 | 
			
		||||
```bash
 | 
			
		||||
go version
 | 
			
		||||
```
 | 
			
		||||
To compile Opensend, run the following command:
 | 
			
		||||
```bash
 | 
			
		||||
make
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Installing
 | 
			
		||||
 | 
			
		||||
To install opensend, run one of the following commands:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
sudo make install # Linux
 | 
			
		||||
sudo make install-macos # macOS
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Once this command completes, to test whether opensend was installed properly, run
 | 
			
		||||
this command:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
opensend -h
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You should get the usage for opensend.
 | 
			
		||||
							
								
								
									
										53
									
								
								content/docs/opensend/usage.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								content/docs/opensend/usage.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Usage"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Using opensend"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="opensend" projectID="wrv3bbuujw57578h" >}}
 | 
			
		||||
{{< minio-s3 project="opensend" >}}
 | 
			
		||||
 | 
			
		||||
This page assumes you have already installed Opensend. If not, follow the installation
 | 
			
		||||
instructions on the installation page.
 | 
			
		||||
 | 
			
		||||
{{< button text="Installation" link="../installation" color="blue">}}
 | 
			
		||||
 | 
			
		||||
### Configuration
 | 
			
		||||
Opensend allows configuration by TOML and by command line flags. It looks at the following paths for configs in the specified order:
 | 
			
		||||
 | 
			
		||||
#### Config files
 | 
			
		||||
 | 
			
		||||
1. Config path from `--config` flag
 | 
			
		||||
2. `~/.config/opensend.toml`
 | 
			
		||||
3. `/etc/opensend.toml`
 | 
			
		||||
 | 
			
		||||
#### Command line flags
 | 
			
		||||
 | 
			
		||||
```text
 | 
			
		||||
Usage of opensend:
 | 
			
		||||
  -d string
 | 
			
		||||
        Data to send
 | 
			
		||||
  -dest-dir string
 | 
			
		||||
        Destination directory for files or dirs sent over opensend (default "/home/arsen/Downloads")
 | 
			
		||||
  -r    Receive data
 | 
			
		||||
  -s    Send data
 | 
			
		||||
  -send-to string
 | 
			
		||||
        Use IP address of receiver instead of mDNS
 | 
			
		||||
  -skip-mdns
 | 
			
		||||
        Skip zeroconf service registration (use if mdns fails)
 | 
			
		||||
  -t string
 | 
			
		||||
        Type of data being sent
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The purpose of the mdns-skipping flags is to account for the iSH app in iOS, as the mdns resolver and registration fails on it.
 | 
			
		||||
 | 
			
		||||
### Algorithms and software used
 | 
			
		||||
 | 
			
		||||
- RSA for asymmetric encryption
 | 
			
		||||
- AES for symmetric encryption
 | 
			
		||||
- Tar for archiving directories
 | 
			
		||||
- Zstandard for compression
 | 
			
		||||
- Base91 for encoding
 | 
			
		||||
- Gob for serialization
 | 
			
		||||
- JSON for serialization
 | 
			
		||||
- TCP sockets for transfer
 | 
			
		||||
- Zeroconf/mDNS for device discovery
 | 
			
		||||
							
								
								
									
										8
									
								
								content/docs/pak/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								content/docs/pak/_index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Pak Docs"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Documentation for the Pak package manager wrapper"
 | 
			
		||||
menu:
 | 
			
		||||
    docs:
 | 
			
		||||
        parent: "docs"
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										42
									
								
								content/docs/pak/configuration.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								content/docs/pak/configuration.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Configuration"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Configuring pak"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="pak" projectID="e4yacqd78gkte8a0" >}}
 | 
			
		||||
{{< minio-s3 project="pak" >}}
 | 
			
		||||
 | 
			
		||||
### Config file
 | 
			
		||||
Pak uses a custom config file at `/etc/pak.cfg`. For example, this is what the
 | 
			
		||||
apt config looks like:
 | 
			
		||||
 | 
			
		||||
```cfg
 | 
			
		||||
# Write the name of the package manager in all lowercase below
 | 
			
		||||
apt
 | 
			
		||||
# Write a comma separated list of commands from the manager below
 | 
			
		||||
install,remove,update,upgrade,search,download
 | 
			
		||||
# Write "yes" or "no" depending on whether you want to use root
 | 
			
		||||
yes
 | 
			
		||||
# Write command to use for root
 | 
			
		||||
sudo
 | 
			
		||||
# Write a comma separated list of shortcuts below
 | 
			
		||||
rm,inst
 | 
			
		||||
# Write a comma separated list of shortcut mappings from the manager below
 | 
			
		||||
remove,install
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
This file is read by pak to tell it what to do. The comments above each keyword
 | 
			
		||||
explain what it's for.
 | 
			
		||||
 | 
			
		||||
Here is a list of all the fields and their uses:
 | 
			
		||||
 | 
			
		||||
1. Command to invoke the package manager.
 | 
			
		||||
2. Comma-separated list of commands supported by the package manager.
 | 
			
		||||
3. Whether or not to invoke the root command.
 | 
			
		||||
4. Command to use for root invocation (`sudo`, `doas`, etc.)
 | 
			
		||||
5. Comma-separated list of shortcuts for pak to accept
 | 
			
		||||
6. Comma-separated list of shortcut mappings (what each shortcut sends to the
 | 
			
		||||
  package manager). These do not necessarily need to be in the commands list.
 | 
			
		||||
 | 
			
		||||
Once you have made the config, just place it at `/etc/pak.cfg` and pak will
 | 
			
		||||
automatically use it.
 | 
			
		||||
							
								
								
									
										91
									
								
								content/docs/pak/installation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								content/docs/pak/installation.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Installation"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Installing pak"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="pak" projectID="e4yacqd78gkte8a0" >}}
 | 
			
		||||
{{< minio-s3 project="pak" >}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Using precompiled binary
 | 
			
		||||
Pak uses continuous integration to compile. You can find the binary either by
 | 
			
		||||
clicking the CI badge above or by going to the gitlab repo using the button below and
 | 
			
		||||
navigating to the releases.
 | 
			
		||||
 | 
			
		||||
{{< button-gitlab color="OrangeRed" project="pak" text="Pak" >}}
 | 
			
		||||
 | 
			
		||||
## Using the AUR
 | 
			
		||||
If you are running an arch-based linux distro, you can use the Arch User Repository
 | 
			
		||||
to install pak. First, make sure the `yay` AUR helper is installed, then run the following:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
yay -S pak
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Building from source
 | 
			
		||||
 | 
			
		||||
### Downloading
 | 
			
		||||
Pak is hosted on my Gitea instance. If that is down, it is also mirrored on Gitlab.
 | 
			
		||||
 | 
			
		||||
{{< button-gitea color="green" project="pak" text="Pak" >}}
 | 
			
		||||
{{< button-gitlab color="OrangeRed" project="pak" text="Pak" >}}
 | 
			
		||||
 | 
			
		||||
To download pak, you can either use the download button on Gitea or Gitlab, or
 | 
			
		||||
you can use the git CLI
 | 
			
		||||
 | 
			
		||||
To clone pak using the CLI, run one of the following commands:
 | 
			
		||||
```bash
 | 
			
		||||
git clone https://gitea.arsenm.dev/Arsen6331/pak
 | 
			
		||||
OR
 | 
			
		||||
git clone https://gitlab.com/moussaelianarsen/pak
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Building
 | 
			
		||||
 | 
			
		||||
Pak is written in Go. This means go must be installed on your computer. Most
 | 
			
		||||
linux distros call the package that provides it either `go` or `golang`.
 | 
			
		||||
 | 
			
		||||
Once go is installed, you can check that it runs by running
 | 
			
		||||
```bash
 | 
			
		||||
go version
 | 
			
		||||
```
 | 
			
		||||
To compile pak, run
 | 
			
		||||
```bash
 | 
			
		||||
make
 | 
			
		||||
```
 | 
			
		||||
Then, you will need to figure out which package manager you have. Here is a list
 | 
			
		||||
of package managers with ready to use configs:
 | 
			
		||||
 | 
			
		||||
- apt
 | 
			
		||||
- aptitude
 | 
			
		||||
- brew
 | 
			
		||||
- yay (with wrapper)
 | 
			
		||||
- pacman (with wrapper)
 | 
			
		||||
- zypper
 | 
			
		||||
- snap
 | 
			
		||||
 | 
			
		||||
If your package manager is not in the list, you can make a config for it. Go to
 | 
			
		||||
the Configuration page for more information.
 | 
			
		||||
 | 
			
		||||
### Installing
 | 
			
		||||
 | 
			
		||||
If your package manager is in the list, use one of these:
 | 
			
		||||
 | 
			
		||||
- apt: `sudo make aptinstall`
 | 
			
		||||
- aptitude: `sudo make aptitude`
 | 
			
		||||
- brew: `sudo make brewinstall`
 | 
			
		||||
- yay: `sudo make yayinstall`
 | 
			
		||||
- pacman: `sudo make pacinstall`
 | 
			
		||||
- zypper: `sudo make zyppinstall`
 | 
			
		||||
- snap: `sudo make snapinstall`
 | 
			
		||||
- custom: `sudo make installbinonly`
 | 
			
		||||
 | 
			
		||||
Once the command completes, unless you're using a custom config, pak should be ready
 | 
			
		||||
and you can run the following to make sure it works:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pak
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Go to the Configuration page for instructions on making a custom config, you **must**
 | 
			
		||||
have a config for pak to function.
 | 
			
		||||
							
								
								
									
										28
									
								
								content/docs/pak/usage.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								content/docs/pak/usage.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
---
 | 
			
		||||
title: "Usage"
 | 
			
		||||
draft: false
 | 
			
		||||
description: "Using pak"
 | 
			
		||||
---
 | 
			
		||||
{{< appveyor-ci project="pak" projectID="e4yacqd78gkte8a0" >}}
 | 
			
		||||
{{< minio-s3 project="pak" >}}
 | 
			
		||||
 | 
			
		||||
Using pak is simple, just run `pak` and one of the commands from the config file.
 | 
			
		||||
Pak understands partial commands, so these commands will be identical:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pak in <package>
 | 
			
		||||
OR
 | 
			
		||||
pak inst <package>
 | 
			
		||||
OR
 | 
			
		||||
pak install <package>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The lack of `sudo` is intentional. Pak will not allow running from root by default
 | 
			
		||||
as it already invokes root internally. To bypass this, simply give pak the `-r` flag.
 | 
			
		||||
 | 
			
		||||
Using shortcuts in pak is just as simple as commands, just run `pak` and a shortcut,
 | 
			
		||||
like this:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
pak rm <package>
 | 
			
		||||
```
 | 
			
		||||
		Reference in New Issue
	
	Block a user