mirror of
https://github.com/agresdominik/cheat_sheet.git
synced 2026-04-21 18:05:51 +00:00
Initial functionality
This commit is contained in:
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"linux": [
|
||||||
|
{
|
||||||
|
"command": "du -sh --block-size=1M /path/to/directory",
|
||||||
|
"desc": "Show size of directory in MB (Change M to G for GB)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "df -h /path/to/mount",
|
||||||
|
"desc": "Show statistics about a drive (remove path for all)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "find /path/to/directory -type f | wc -l",
|
||||||
|
"desc": "Show amount of files in directory and its sub-directories"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "find /path/to/directory -type f -exec grep -n 'search' {} +",
|
||||||
|
"desc": "Print all rows together with the filenames and rows a string is found in"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "ss -tuln",
|
||||||
|
"desc": "Show open ports on current host (linux)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "echo Hostname: $(hostname); echo Local_IP: $(hostname -I | awk '{print $1}'); echo Default_Gateway: $(ip route | awk '/default/ {print $3}')",
|
||||||
|
"desc": "Print IP Address, Hostname, Default Route"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"python": [
|
||||||
|
{
|
||||||
|
"command": "python3 -m venv .venv; source .venv/bin/activate",
|
||||||
|
"desc": "Initialise a (simple) .venv and activate it"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "command",
|
||||||
|
"desc": "Initialise a poetry project"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "command",
|
||||||
|
"desc": "..."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"go": [
|
||||||
|
{
|
||||||
|
"command": "go mod init github.com/username/projectname",
|
||||||
|
"desc": "Initialise a go project"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "go get github.com/some/package@latest",
|
||||||
|
"desc": "Add dependencies (cringe)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "go mod tidy",
|
||||||
|
"desc": "Tidy up unused dependencies"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "go mod verify",
|
||||||
|
"desc": "Verify Integrity"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "go run src/main.go",
|
||||||
|
"desc": "Run a main.go file"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "go build -o bin/myprogram main.go",
|
||||||
|
"desc": "Build an executable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "GOOS=linux GOARCH=amd64 go build -o bin/myprogram.exe main.go",
|
||||||
|
"desc": "Cross-compile for Linux (alt. windows, darwin (arm64 / amd64))"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+96
@@ -0,0 +1,96 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Individual Command Items Later Extracted
|
||||||
|
type CmdItem struct {
|
||||||
|
CommandName string `json:"command"`
|
||||||
|
CommandDescription string `json:"desc"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// All commands
|
||||||
|
type CmdMap map[string][]CmdItem
|
||||||
|
|
||||||
|
// Read Json-File and return it
|
||||||
|
func loadCommands(path string) (CmdMap, error) {
|
||||||
|
data, err := os.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var m CmdMap
|
||||||
|
if err := json.Unmarshal(data, &m); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function Called when a subset of functions has been selected
|
||||||
|
func showCommandList(app *tview.Application, lang string, cmds []CmdItem, langList *tview.List) {
|
||||||
|
cmdList := tview.NewList()
|
||||||
|
cmdList.SetBorder(true).SetTitle(fmt.Sprintf("%s commands", lang))
|
||||||
|
|
||||||
|
for _, c := range cmds {
|
||||||
|
c := c
|
||||||
|
cmdList.AddItem(c.CommandName, c.CommandDescription, 0, func() {
|
||||||
|
//fmt.Println(c.CommandName)
|
||||||
|
app.Suspend(func() {
|
||||||
|
fmt.Println(c.CommandName) // this now prints visibly
|
||||||
|
})
|
||||||
|
app.Stop()
|
||||||
|
os.Exit(0)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdList.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
||||||
|
if event.Rune() == 'b' || event.Key() == tcell.KeyEscape {
|
||||||
|
// Restore the language list
|
||||||
|
app.SetRoot(langList, true)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return event
|
||||||
|
})
|
||||||
|
|
||||||
|
app.SetRoot(cmdList, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main Function
|
||||||
|
// Initialises the first page and starts app
|
||||||
|
func main() {
|
||||||
|
commands, err := loadCommands("data/commands.json")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Cannot load commands file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
app := tview.NewApplication()
|
||||||
|
|
||||||
|
// Sort alphabetically
|
||||||
|
langs := make([]string, 0, len(commands))
|
||||||
|
for lang := range commands {
|
||||||
|
langs = append(langs, lang)
|
||||||
|
}
|
||||||
|
sort.Strings(langs)
|
||||||
|
|
||||||
|
langList := tview.NewList()
|
||||||
|
langList.SetBorder(true).SetTitle("Select a topic")
|
||||||
|
|
||||||
|
for _, lang := range langs {
|
||||||
|
lang := lang // capture loop variable
|
||||||
|
langList.AddItem(lang, "", 0, func() {
|
||||||
|
showCommandList(app, lang, commands[lang], langList)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := app.SetRoot(langList, true).Run(); err != nil {
|
||||||
|
log.Fatalf("Error initialising TUI: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user