[wiki/MUTN] Add basic building/installation instructions

This commit is contained in:
2024-07-07 22:59:55 -04:00
parent 995e2bd982
commit 565f869da1
8 changed files with 153 additions and 19 deletions
+2 -16
View File
@@ -1,11 +1,7 @@
# MUTN Password Manager # MUTN Password Manager
Pronounced as: "mutton", "muh·tn" Pronounced as: "mutton", "muh·tn"
MUTN is a simple, self-hosted, SSH-synchronized password manager based on libmutton. MUTN is a simple, self-hosted, SSH-synchronized password manager based on libmutton. It is the successor to [sshyp](https://github.com/rwinkhart/sshyp).
MUTN is an expanded re-implementation of [sshyp](https://github.com/rwinkhart/sshyp) written in Go.
Though MUTN will feel very familiar to users of sshyp, it is intended to differ and breaks compatibility with its entry format.
> [!WARNING] > [!WARNING]
>It is your responsibility to assess the security and stability of MUTN and to ensure it meets your needs before using it. >It is your responsibility to assess the security and stability of MUTN and to ensure it meets your needs before using it.
@@ -16,17 +12,7 @@ Though MUTN will feel very familiar to users of sshyp, it is intended to differ
MUTN aims to make it as simple as possible to manage passwords and notes via CLI across multiple devices in a secure, self-hosted fashion. MUTN aims to make it as simple as possible to manage passwords and notes via CLI across multiple devices in a secure, self-hosted fashion.
# Building # Building
This repository is currently home to both the MUTN client and the general libmutton server software. See the [building guide](https://github.com/rwinkhart/MUTN/blob/main/wiki/MUTN/build.md).
Official binaries are stripped of debug info for size and built without CGO (except for distribution packages) for portability, as follows:
```
CGO_ENABLED=0 go build -ldflags="-s -w" ./mutn.go
CGO_ENABLED=0 go build -ldflags="-s -w" ./libmuttonserver.go
```
Additionally, some custom build tags can be used to create different binaries. The following tags are not used in official builds:
- `wsl`: Allows creating a Linux binary that can interact with the Windows clipboard (for WSL)
- `termux`: Allows creating a Linux binary that can interact with the Termux clipboard (for Android)
# Roadmap # Roadmap
#### Release v0.2.0 - Make repo public - No binaries #### Release v0.2.0 - Make repo public - No binaries
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
gofmt -l -w -s ./src/cli/*.go gofmt -l -w -s ./src/cli/*.go
gofmt -l -w -s ./src/backend/*.go gofmt -l -w -s ./src/backend/*.go
git add -f extra src wiki .gitignore commit.sh go.mod go.sum LICENSE mutn.go libmuttonserver.go README.md git add -f extra completions src wiki .gitignore commit.sh go.mod go.sum LICENSE mutn.go libmuttonserver.go README.md
git commit -m "$1" git commit -m "$1"
git push git push
+42
View File
@@ -0,0 +1,42 @@
# mutn(1) completion
_path_gen() {
local mutnPath="$HOME/.local/share/libmutton"
local globStatus=$(shopt -p globstar)
[ -z "${globStatus##*u*}" ] && shopt -s globstar # if recursive globbing is disabled, enable it
local fullPaths=("$mutnPath"/**/*)
$globStatus # set recursive globbing to user default
for scanPath in "${fullPaths[@]}"; do
# exclude directories
[ -f "$scanPath" ] && trimmedPaths+=("${scanPath#$mutnPath}")
done
if [ "${trimmedPaths[0]}" == '' ]; then trimmedPaths[0]=help; fi
} &&
_mutnCompletions() {
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
case $prev in
mutn )
while read -r; do ITEM=${REPLY// /\\ }; COMPREPLY+=( "$ITEM" ); done < <( compgen -W "$(printf "'%s' " "${trimmedPaths[@]}")" -- "$cur" )
;;
/* )
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "copy edit gen add shear" -- "$cur" )
;;
add )
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "password note folder" -- "$cur" )
;;
copy )
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "password username totp url note" -- "$cur" )
;;
edit )
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "password username totp url note rename" -- "$cur" )
;;
gen )
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "update" -- "$cur" )
;;
esac
} &&
_path_gen && complete -F _mutnCompletions mutn
+55
View File
@@ -0,0 +1,55 @@
function cliMUTNEntryCompleter {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
#$mutnPath = (Resolve-Path '~/.local/share/libmutton').Path # UNIX testing
$mutnPath = (Resolve-Path '~/AppData/Local/libmutton/entries').Path
try {
$trimmedPaths = If (Test-Path $mutnPath) {
(Get-ChildItem -Path $mutnPath -Recurse -File).FullName.Substring($mutnPath.Length) -replace '\\', '/' -replace ' ', '` '
}
} catch {
$trimmedPaths = $null # if any errors occur (especially, "You cannot call a method on a null-valued expression", set $trimmedPaths to $null
}
if ($null -eq $trimmedPaths) { # if no entries are found, add 'help' to $trimmedPaths
$trimmedPaths = 'help'
}
$trimmedPaths | Where-Object { $_ -like "$wordToComplete*" }
}
function cliMUTNOptionCompleter {
param ($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
$possibleValues = @{
add = @('password', 'note', 'folder')
copy = @('password', 'username', 'totp', 'url', 'note')
edit = @('password', 'username', 'totp', 'url', 'note', 'rename')
gen = @('update')
}
if ($fakeBoundParameters.ContainsKey('argument')) {
$possibleValues[$fakeBoundParameters.argument] | Where-Object {
$_ -like "$wordToComplete*"
}
} else {
$possibleValues.Values | ForEach-Object {$_}
}
}
function mutn {
[CmdletBinding()]
param (
[Parameter(Position = 0)]
[ArgumentCompleter({ cliMUTNEntryCompleter @args })]
[string]$entry,
[Parameter(Position = 1)]
[ArgumentCompletions('copy', 'edit', 'gen', 'add', 'shear')]
[string]$argument,
[Parameter(Position = 2, ValueFromRemainingArguments=$true)]
[ArgumentCompleter({ cliMUTNOptionCompleter @args })]
[string]$option
)
#Invoke-Expression -Command ('/usr/local/bin/mutn ' + ($entry -replace ' ', '` '), $argument, $option).Trim() # UNIX testing
Invoke-Expression -Command ('./mutn.exe ' + ($entry -replace ' ', '` '), $argument, $option).Trim()
}
+31
View File
@@ -0,0 +1,31 @@
#compdef mutn
mutnPath="$HOME/.local/share/libmutton"
fullPaths=("$mutnPath"/**/*)
trimmedPaths=()
for scanPath in "${fullPaths[@]}"; do
# exclude directories
[ -f "$scanPath" ] && trimmedPaths+=("${scanPath#$mutnPath}")
done
[[ -z $trimmedPaths ]] && trimmedPaths=(help)
case ${words[-2]} in
mutn )
compadd $trimmedPaths
;;
/* )
compadd {copy,edit,gen,add,shear}
;;
add )
compadd {password,note,folder}
;;
copy )
compadd {password,username,totp,url,note}
;;
edit )
compadd {password,username,totp,url,note,rename}
;;
gen )
compadd update
;;
esac
+12
View File
@@ -0,0 +1,12 @@
## Building
This repository is currently home to both the MUTN client and the general libmutton server software.
Official binaries are stripped of debug info for size and built without CGO (except for distribution packages) for portability, as follows:
```
CGO_ENABLED=0 go build -ldflags="-s -w" -trimpath ./mutn.go
CGO_ENABLED=0 go build -ldflags="-s -w" -trimpath ./libmuttonserver.go
```
Additionally, some custom build tags can be used to create different binaries. The following tags are not used in official builds:
- `wsl`: Allows creating a Linux binary that can interact with the Windows clipboard (for WSL)
- `termux`: Allows creating a Linux binary that can interact with the Termux clipboard (for Android)
+2 -2
View File
@@ -1,6 +1,6 @@
## Shell Completions Troubleshooting ## Shell Completions Troubleshooting
### ZSH completions not working? ### ZSH completions not working?
Make sure your ~/.zshrc contains the following: Make sure your ~/.zshrc contains the following (if sourcing from default completions location, usually `/usr/share/zsh/functions/Completion/Unix/_mutn`):
```shell ```shell
autoload -Uz compinit && compinit autoload -Uz compinit && compinit
``` ```
@@ -9,7 +9,7 @@ autoload -Uz compinit && compinit
### Bash completions not working? ### Bash completions not working?
Install your distribution's 'bash-completion' package or source the completion script manually. Install your distribution's 'bash-completion' package or source the completion script manually.
For most environments, this would mean adding the following to your ~/.bashrc: For most environments, manual sourcing means adding the following to your ~/.bashrc:
```shell ```shell
source /usr/share/bash-completion/completions/mutn source /usr/share/bash-completion/completions/mutn
``` ```
+8
View File
@@ -0,0 +1,8 @@
## Installation
MUTN is still in early development and thus no installation packages are officially distributed.
For now, please [compile from source](https://github.com/rwinkhart/MUTN/blob/main/wiki/MUTN/build.md).
After compiling and placing the binaries in your $PATH, it is highly recommended to also download and correctly place/source the relevant shell completions scripts. [Shell completions are provided for ZSH, Bash, and PowerShell 7+](https://github.com/rwinkhart/MUTN/tree/main/completions).
For help with completions scrips, see [completions troubleshooting](https://github.com/rwinkhart/MUTN/blob/main/wiki/MUTN/completions.md).