START: initial commit

This commit is contained in:
Jeff Carr 2021-11-02 23:44:28 -05:00
commit 86943f3731
35 changed files with 2032 additions and 0 deletions

80
Makefile Normal file
View File

@ -0,0 +1,80 @@
GITCOMMIT = $(shell git rev-list -1 HEAD)
GOVERSION = $(shell go version | cut -d' ' -f 3)
BUILDTIME = $(shell date -u --iso-8601=seconds)
VERSION = $(shell cat resources/VERSION)
# PATH=/usr/bin:$PATH go version
run: build
~/go/bin/wit-debian-gui
build:
GO111MODULE="off" go install -ldflags " \
-X main.GITCOMMIT=${GITCOMMIT} \
-X main.GOVERSION='${GOVERSION}' \
-X main.BUILDTIME='${BUILDTIME}' \
-X main.VERSION=${VERSION}"
godoc:
godoc -http=:6060
gomod-update:
wit go update
gomod-init:
go mod init
go mod tidy
gomod-clean:
rm -f go.*
sudo: build
sudo ~/go/bin/wit-debian-gui
# https://golang.cafe/blog/golang-debugging-with-delve.html
# debug using 'delve'
debug:
dlv debug
push:
wit git push
prep:
apt install -y libgtk-3-dev
apt install -y libappindicator3-dev
apt install -y xterm
tag-version:
# git push --delete origin v0.6.15 # to delete a tag upstream
git diff --quiet
# go build # just an extra check to make sure the damn thing builds
git tag v${VERSION}
git push --tags
icon:
go get -v github.com/cratonica/2goarray
go install github.com/cratonica/2goarray
echo "//+build linux darwin" > icon.go
echo >> icon.go
cat resources/wit.png | 2goarray Data icon >> icon.go
# a custom go target name
generate:
go generate
build-all:
GOOS=linux GOARCH=386 go build -o bin/linux.x32.bin
GOOS=freebsd GOARCH=386 go build -o bin/freebsd.x32.bin
GOOS=darwin GOARCH=386 go build -o bin/darwin.x32.bin
# https://www.digitalocean.com/community/tutorials/how-to-build-go-executables-for-multiple-platforms-on-ubuntu-16-04
build-darwin:
env GOOS=darwin GOARCH=amd64 go build
build-windows:
env GOOS=windows GOARCH=amd64 go build
gaper:
# 'gaper' is a simple and smart golang tool that just rebuilds every time you change a file
# go get -u github.com/maxcnunes/gaper
gaper

17
README.md Normal file
View File

@ -0,0 +1,17 @@
# my app for debugging things
## build requirements
```
apt install -f libgtk-3-dev
```
## checkout & build
```
go get -v -t -u git.wit.org/wit/wit-debian-gui
cd ~/go/src/git.wit.org/wit/wit-debian-gui
go build
```
# Copyright
GPLv2+

44
go.mod Normal file
View File

@ -0,0 +1,44 @@
module git.wit.org/jcarr/personal-gui
go 1.17
require (
git.wit.org/jcarr/log v0.0.5
git.wit.org/wit/gui v0.0.6-0.20211031175754-d38d60bcc38b
git.wit.org/wit/shell v0.0.0-20210809053806-ad28138b847a
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e
github.com/davecgh/go-spew v1.1.1
github.com/getlantern/systray v1.1.0
github.com/gobuffalo/packr v1.30.1
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
)
require (
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect
github.com/gdamore/encoding v1.0.0 // indirect
github.com/gdamore/tcell/v2 v2.0.0 // indirect
github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect
github.com/getlantern/errors v1.0.1 // indirect
github.com/getlantern/golog v0.0.0-20210606115803-bce9f9fe5a5f // indirect
github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 // indirect
github.com/getlantern/hidden v0.0.0-20201229170000-e66e7f878730 // indirect
github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/gobuffalo/envy v1.9.0 // indirect
github.com/gobuffalo/packd v1.0.0 // indirect
github.com/joho/godotenv v1.4.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/konsorten/go-windows-terminal-sequences v1.0.3 // indirect
github.com/lucasb-eyer/go-colorful v1.0.3 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect
github.com/rogpeppe/go-internal v1.8.0 // indirect
github.com/sirupsen/logrus v1.8.1 // indirect
github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc // indirect
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef // indirect
github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect
golang.org/x/sys v0.0.0-20211031064116-611d5d643895 // indirect
golang.org/x/text v0.3.6 // indirect
)

183
go.sum Normal file
View File

@ -0,0 +1,183 @@
git.wit.org/jcarr/log v0.0.0-20211026052444-76ae5ca4afb4 h1:zsTcYeIr84cUcZf42bE/IXmn9kCJNK5mtJMPAi6DOdQ=
git.wit.org/jcarr/log v0.0.0-20211026052444-76ae5ca4afb4/go.mod h1:rD4mfBZHXgbcFT9Hh4+gGBbWZ/kId2qVnwYUzLhJO6Q=
git.wit.org/jcarr/log v0.0.5 h1:PeMbp5s+FMwjPfXc2qUyDuGHostXz9kOjUP3vBSDzpU=
git.wit.org/jcarr/log v0.0.5/go.mod h1:rD4mfBZHXgbcFT9Hh4+gGBbWZ/kId2qVnwYUzLhJO6Q=
git.wit.org/wit/gui v0.0.0-20211006070239-403dc4780b2c h1:jEyEm+rthz2bzovXuNARzrJM+Aipc8XH1wy5rmxvPLg=
git.wit.org/wit/gui v0.0.0-20211006070239-403dc4780b2c/go.mod h1:Bb3kJYz29thAO6TEoA5H5a213p1+1XzS3K13f7LaZOc=
git.wit.org/wit/gui v0.0.0-20211006193207-36e2c6d2e3c2 h1:u/VLZ6H1Oa/omdNzNOSfFMtYfy+69zmZ0o39d743sVQ=
git.wit.org/wit/gui v0.0.0-20211006193207-36e2c6d2e3c2/go.mod h1:7t/uh0UIQ+0aDyROWOROm4oJt8Fvatqf3fXPKRrV/IQ=
git.wit.org/wit/gui v0.0.4 h1:A3C66vqYPE9dX/thaAji1GRx13QCvBmK/A+ghSK8wwE=
git.wit.org/wit/gui v0.0.4/go.mod h1:7t/uh0UIQ+0aDyROWOROm4oJt8Fvatqf3fXPKRrV/IQ=
git.wit.org/wit/gui v0.0.5 h1:KAJNq+KQyhJ/BuCJEQfgl6QT1U6HA535zg97b+RCc7Q=
git.wit.org/wit/gui v0.0.5/go.mod h1:7t/uh0UIQ+0aDyROWOROm4oJt8Fvatqf3fXPKRrV/IQ=
git.wit.org/wit/gui v0.0.6-0.20211031175754-d38d60bcc38b h1:MrCN9q3pyxs8I4GKx2yjMKvysDekHJI+xFCwln1tvKg=
git.wit.org/wit/gui v0.0.6-0.20211031175754-d38d60bcc38b/go.mod h1:7t/uh0UIQ+0aDyROWOROm4oJt8Fvatqf3fXPKRrV/IQ=
git.wit.org/wit/shell v0.0.0-20210809053806-ad28138b847a h1:6m+E3971o+vg1O9im2QSXbefzF5NcZdLh2jP48cAdbM=
git.wit.org/wit/shell v0.0.0-20210809053806-ad28138b847a/go.mod h1:StNrN70kYxjG2IzyBv4fSPB4Pd7yg/YNBNLYtftP+NM=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e h1:wSQCJiig/QkoUnpvelSPbLiZNWvh2yMqQTQvIQqSUkU=
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e/go.mod h1:5G2EjwzgZUPnnReoKvPWVneT8APYbyKkihDVAHUi0II=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/awesome-gocui/gocui v1.0.1 h1:FGzyh+K9NRZTVrj5QhoKVc5iSq1MojzwFFsU7rEmeIs=
github.com/awesome-gocui/gocui v1.0.1/go.mod h1:UvP3dP6+UsTGl9IuqP36wzz6Lemo90wn5p3tJvZ2OqY=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell/v2 v2.0.0 h1:GRWG8aLfWAlekj9Q6W29bVvkHENc6hp79XOqG4AWDOs=
github.com/gdamore/tcell/v2 v2.0.0/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA=
github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4=
github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY=
github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So=
github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A=
github.com/getlantern/errors v1.0.1 h1:XukU2whlh7OdpxnkXhNH9VTLVz0EVPGKDV5K0oWhvzw=
github.com/getlantern/errors v1.0.1/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A=
github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 h1:guBYzEaLz0Vfc/jv0czrr2z7qyzTOGC9hiQ0VC+hKjk=
github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc=
github.com/getlantern/golog v0.0.0-20210606115803-bce9f9fe5a5f h1:wsVt3P/boVKkPFEZkWxgNgRq/+mD7sWHc17+Vw2PgH8=
github.com/getlantern/golog v0.0.0-20210606115803-bce9f9fe5a5f/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA=
github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0=
github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o=
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc=
github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/hidden v0.0.0-20201229170000-e66e7f878730 h1:oKJVQbWZ2CAJ71jYnm6A3+e6h5bkPJ0okIMwkaYB5HI=
github.com/getlantern/hidden v0.0.0-20201229170000-e66e7f878730/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA=
github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 h1:QthAQCekS1YOeYWSvoHI6ZatlG4B+GBDLxV/2ZkBsTA=
github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA=
github.com/getlantern/systray v1.1.0 h1:U0wCEqseLi2ok1fE6b88gJklzriavPJixZysZPkZd/Y=
github.com/getlantern/systray v1.1.0/go.mod h1:AecygODWIsBquJCJFop8MEQcJbWFfw/1yWbVabNgpCM=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU=
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
github.com/gobuffalo/envy v1.9.0 h1:eZR0DuEgVLfeIb1zIKt3bT4YovIMf9O9LXQeCZLXpqE=
github.com/gobuffalo/envy v1.9.0/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4=
github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q=
github.com/gobuffalo/packd v1.0.0 h1:6ERZvJHfe24rfFmA9OaoKBdC7+c9sydrytMg8SdFGBM=
github.com/gobuffalo/packd v1.0.0/go.mod h1:6VTc4htmJRFB7u1m/4LeMTWjFoYrUiBkU9Fdec9hrhI=
github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg=
github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk=
github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac=
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA=
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc h1:usYkrH2/es/TT7ETdC/qLAagcJPW3EEYFKqvibSnFbA=
github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc/go.mod h1:pPzZl0vMkUhyoxUF8PAGG5bDRGo7PY80oO/PMmpLkkc=
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef h1:7D6Nm4D6f0ci9yttWaKjM1TMAXrH5Su72dojqYGntFY=
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef/go.mod h1:WLFStEdnJXpjK8kd4qKLwQKX/1vrDzp5BcDyiZJBHJM=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3 h1:shC1HB1UogxN5Ech3Yqaaxj1X/P656PPCB4RbojIJqc=
github.com/wercker/journalhook v0.0.0-20180428041537-5d0a5ae867b3/go.mod h1:XCsSkdKK4gwBMNrOCZWww0pX6AOt+2gYc5Z6jBRrNVg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 h1:ydJNl0ENAG67pFbB+9tfhiL2pYqLhfoaZFw/cjLhY4A=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211006225509-1a26e0398eed h1:E159xujlywdAeN3FqsTBPzRKGUq/pDHolXbuttkC36E=
golang.org/x/sys v0.0.0-20211006225509-1a26e0398eed/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70 h1:SeSEfdIxyvwGJliREIJhRPPXvW6sDlLT+UQ3B0hD0NA=
golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 h1:2B5p2L5IfGiD7+b9BOoRMC6DgObAVZV+Fsp050NqXik=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211031064116-611d5d643895 h1:iaNpwpnrgL5jzWS0vCNnfa8HqzxveCFpFx3uC/X4Tps=
golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

55
gui-button.go Normal file
View File

@ -0,0 +1,55 @@
package main
import "log"
// import "os"
import "git.wit.org/wit/gui"
// import "github.com/skratchdot/open-golang/open"
// import "github.com/davecgh/go-spew/spew"
//
// This was the default handler for all mouse clicks (buttons, areas, etc))
//
// Most mouse clicks are now moved to custom functions
//
type myButtonInfo struct {
Custom func (*gui.Node)
ADD func (*gui.Node)
Name string
Action string
Node *gui.Node
}
// stores the fields we want to map into our private structure 'values'
func makeButtonValues(n *gui.Node, name string, action string, custom func(*gui.Node)) *myButtonInfo {
val := &myButtonInfo{}
val.Custom = custom
val.Name = name
// val.Action = action
return val
}
// stores the fields we want to map into our private structure 'values'
func newMmakeButtonValues(name string, custom func(*gui.Node)) *myButtonInfo {
val := &myButtonInfo{}
val.Custom = custom
val.Name = name
// val.Action = action
return val
}
func makeXtermButton(n *gui.Node, name string, action string, custom string) *gui.Node {
n.AddButton(name, func (*gui.Node) {
log.Println("xterm cmd=", custom)
xterm(custom)
})
return nil
}
func makeColorButton(n *gui.Node, name string, action string, custom func(*gui.Node)) *gui.Node {
val := makeButtonValues(n, name, action, custom)
log.Println("val =", val)
// return gui.CreateColorButton(n, custom, name, val)
return nil
}

314
icon.go Normal file
View File

@ -0,0 +1,314 @@
//+build linux darwin
// File generated by 2goarray v0.1.0 (http://github.com/cratonica/2goarray)
package main
var myIcon []byte = []byte{
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
0x08, 0x06, 0x00, 0x00, 0x00, 0xc3, 0x3e, 0x61, 0xcb, 0x00, 0x00, 0x01,
0x85, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x28, 0x91, 0x7d, 0x91, 0x3d, 0x48,
0xc3, 0x40, 0x1c, 0xc5, 0x5f, 0x53, 0x6b, 0x45, 0xaa, 0x22, 0x76, 0x10,
0x71, 0xc8, 0x50, 0x05, 0xc1, 0x82, 0xa8, 0x88, 0xa3, 0x56, 0xa1, 0x08,
0x15, 0x42, 0xad, 0xd0, 0xaa, 0x83, 0xc9, 0xa5, 0x1f, 0x42, 0x93, 0x86,
0x24, 0xc5, 0xc5, 0x51, 0x70, 0x2d, 0x38, 0xf8, 0xb1, 0x58, 0x75, 0x70,
0x71, 0xd6, 0xd5, 0xc1, 0x55, 0x10, 0x04, 0x3f, 0x40, 0xdc, 0xdc, 0x9c,
0x14, 0x5d, 0xa4, 0xc4, 0xff, 0x25, 0x85, 0x16, 0xb1, 0x1e, 0x1c, 0xf7,
0xe3, 0xdd, 0xbd, 0xc7, 0xdd, 0x3b, 0x40, 0xa8, 0x16, 0x99, 0x66, 0xb5,
0x8d, 0x01, 0x9a, 0x6e, 0x9b, 0xc9, 0x78, 0x4c, 0x4c, 0x67, 0x56, 0xc4,
0xe0, 0x2b, 0xda, 0xd1, 0x8b, 0x00, 0xba, 0x31, 0x22, 0x33, 0xcb, 0x98,
0x95, 0xa4, 0x04, 0x5a, 0x8e, 0xaf, 0x7b, 0xf8, 0xf8, 0x7a, 0x17, 0xe5,
0x59, 0xad, 0xcf, 0xfd, 0x39, 0xba, 0xd4, 0xac, 0xc5, 0x00, 0x9f, 0x48,
0x3c, 0xc3, 0x0c, 0xd3, 0x26, 0x5e, 0x27, 0x9e, 0xda, 0xb4, 0x0d, 0xce,
0xfb, 0xc4, 0x61, 0x56, 0x90, 0x55, 0xe2, 0x73, 0xe2, 0x51, 0x93, 0x2e,
0x48, 0xfc, 0xc8, 0x75, 0xc5, 0xe3, 0x37, 0xce, 0x79, 0x97, 0x05, 0x9e,
0x19, 0x36, 0x53, 0xc9, 0x39, 0xe2, 0x30, 0xb1, 0x98, 0x6f, 0x62, 0xa5,
0x89, 0x59, 0xc1, 0xd4, 0x88, 0x27, 0x89, 0x23, 0xaa, 0xa6, 0x53, 0xbe,
0x90, 0xf6, 0x58, 0xe5, 0xbc, 0xc5, 0x59, 0x2b, 0x96, 0x59, 0xfd, 0x9e,
0xfc, 0x85, 0xa1, 0xac, 0xbe, 0xbc, 0xc4, 0x75, 0x9a, 0x83, 0x88, 0x63,
0x01, 0x8b, 0x90, 0x20, 0x42, 0x41, 0x19, 0x1b, 0x28, 0xc2, 0x46, 0x94,
0x56, 0x9d, 0x14, 0x0b, 0x49, 0xda, 0x8f, 0xb5, 0xf0, 0x0f, 0xb8, 0x7e,
0x89, 0x5c, 0x0a, 0xb9, 0x36, 0xc0, 0xc8, 0x31, 0x8f, 0x12, 0x34, 0xc8,
0xae, 0x1f, 0xfc, 0x0f, 0x7e, 0x77, 0x6b, 0xe5, 0x26, 0xc6, 0xbd, 0xa4,
0x50, 0x0c, 0x08, 0xbc, 0x38, 0xce, 0xc7, 0x10, 0x10, 0xdc, 0x05, 0x6a,
0x15, 0xc7, 0xf9, 0x3e, 0x76, 0x9c, 0xda, 0x09, 0xe0, 0x7f, 0x06, 0xae,
0xf4, 0x86, 0xbf, 0x54, 0x05, 0xa6, 0x3f, 0x49, 0xaf, 0x34, 0xb4, 0xc8,
0x11, 0xd0, 0xb3, 0x0d, 0x5c, 0x5c, 0x37, 0x34, 0x65, 0x0f, 0xb8, 0xdc,
0x01, 0xfa, 0x9f, 0x0c, 0xd9, 0x94, 0x5d, 0xc9, 0x4f, 0x53, 0xc8, 0xe5,
0x80, 0xf7, 0x33, 0xfa, 0xa6, 0x0c, 0xd0, 0x77, 0x0b, 0x74, 0xae, 0x7a,
0xbd, 0xd5, 0xf7, 0x71, 0xfa, 0x00, 0xa4, 0xa8, 0xab, 0xc4, 0x0d, 0x70,
0x70, 0x08, 0x0c, 0xe7, 0x29, 0x7b, 0xad, 0xc5, 0xbb, 0x3b, 0x9a, 0x7b,
0xfb, 0xf7, 0x4c, 0xbd, 0xbf, 0x1f, 0x3b, 0xf3, 0x72, 0x91, 0x54, 0x3a,
0x3d, 0x2b, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff,
0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09,
0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13,
0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d,
0x45, 0x07, 0xe5, 0x06, 0x11, 0x05, 0x0f, 0x01, 0x1b, 0xec, 0x0b, 0x79,
0x00, 0x00, 0x0c, 0x42, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9d,
0x7d, 0x70, 0xdc, 0x55, 0xb9, 0xc7, 0x3f, 0xcf, 0xef, 0xb7, 0x79, 0x4f,
0x0b, 0xd8, 0xa6, 0xb4, 0x58, 0x2e, 0x85, 0xd6, 0xee, 0x86, 0x84, 0x97,
0x6b, 0xbd, 0x5c, 0x04, 0x07, 0x1c, 0x65, 0xb8, 0x80, 0x52, 0xa7, 0xa3,
0x49, 0x93, 0x2a, 0xb4, 0x30, 0x95, 0xd2, 0x04, 0xb8, 0x14, 0xaf, 0xdc,
0xeb, 0x0b, 0x4e, 0x74, 0xee, 0x0c, 0xcc, 0xa8, 0xbd, 0x5c, 0x9a, 0x4d,
0x5b, 0xb4, 0xb6, 0x5c, 0x68, 0x93, 0x66, 0x11, 0x51, 0x79, 0x67, 0x80,
0x82, 0x02, 0x82, 0x82, 0xbd, 0xd8, 0x34, 0x1b, 0xfa, 0x42, 0xad, 0x54,
0x69, 0x52, 0xaa, 0xb4, 0x79, 0xdf, 0xdd, 0xf3, 0xf8, 0x47, 0x52, 0xac,
0x0e, 0x94, 0x9e, 0xcd, 0xdb, 0x6f, 0x77, 0xcf, 0x67, 0x26, 0xff, 0x24,
0x7b, 0x4e, 0x9e, 0xdf, 0x79, 0xbe, 0xbf, 0xe7, 0xbc, 0xec, 0x39, 0xcf,
0x01, 0x87, 0xc3, 0xe1, 0x70, 0x38, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0x70,
0x38, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0x70, 0x38, 0x1c, 0x0e, 0x87, 0xc3,
0xe1, 0x70, 0x38, 0x1c, 0xd9, 0x86, 0xe4, 0xea, 0x83, 0x57, 0xb5, 0x56,
0xe4, 0xe7, 0xbd, 0x9d, 0x38, 0xd7, 0xa4, 0xfc, 0xb0, 0x08, 0x61, 0x45,
0xc3, 0xc0, 0x2c, 0x60, 0x32, 0x50, 0x2a, 0x30, 0x49, 0xa1, 0x18, 0xe8,
0x03, 0x0e, 0x0f, 0xff, 0x1c, 0x02, 0x0e, 0xa2, 0xec, 0x50, 0x21, 0xae,
0x22, 0xf1, 0xbc, 0x64, 0x22, 0xbe, 0xf1, 0xa6, 0x9d, 0x6f, 0x3a, 0x01,
0x64, 0x00, 0xb5, 0x8d, 0x67, 0x56, 0x18, 0xcf, 0xfc, 0x9b, 0xa8, 0x5c,
0x02, 0x7a, 0x11, 0x50, 0x32, 0x4a, 0x55, 0x1f, 0x50, 0xe1, 0x59, 0x94,
0x2d, 0x9e, 0x7a, 0xcf, 0x34, 0xdf, 0xb0, 0xbd, 0xcd, 0x09, 0x20, 0x20,
0xcc, 0x5f, 0x17, 0x9e, 0x54, 0xd2, 0x2f, 0x8b, 0x14, 0xbe, 0x0c, 0xcc,
0x1b, 0xa7, 0x7f, 0xdb, 0x89, 0xe8, 0xe3, 0xe0, 0x6d, 0x9e, 0xec, 0x17,
0x3f, 0x71, 0xf7, 0xb2, 0x57, 0x12, 0x4e, 0x00, 0xe3, 0x1d, 0xe2, 0xef,
0x9a, 0x53, 0xe6, 0xfb, 0xa1, 0x6f, 0x02, 0xd7, 0x02, 0xa5, 0x13, 0x68,
0xca, 0x9f, 0x41, 0x7e, 0xa2, 0xe8, 0xe6, 0xfd, 0x5d, 0xd3, 0x9f, 0xde,
0xd2, 0xb0, 0x25, 0xe9, 0x04, 0x30, 0x86, 0x5c, 0xf5, 0xdd, 0xb3, 0x4b,
0x12, 0x45, 0x03, 0x2b, 0x44, 0xe4, 0x56, 0x85, 0x49, 0x81, 0x6a, 0x6c,
0x91, 0x05, 0xcd, 0x75, 0xed, 0x0f, 0x06, 0xc9, 0xa6, 0x50, 0x36, 0x39,
0xbf, 0xba, 0xa9, 0xfc, 0x92, 0x84, 0x0e, 0x6e, 0x00, 0xf9, 0xb0, 0xba,
0x01, 0x7e, 0xee, 0x08, 0xa0, 0xaa, 0xb5, 0x22, 0x3f, 0xd4, 0x99, 0xba,
0x5d, 0x55, 0x57, 0xe4, 0xf2, 0xcc, 0x26, 0x27, 0x05, 0x50, 0x13, 0xad,
0x3c, 0x55, 0xbb, 0x12, 0x3f, 0x53, 0x91, 0x73, 0x9d, 0x3b, 0x73, 0x4c,
0x00, 0xb5, 0x8d, 0x67, 0x56, 0x28, 0xc9, 0xc7, 0x04, 0x99, 0xe9, 0x5c,
0x99, 0x1e, 0x5e, 0xc6, 0xf6, 0xf7, 0xab, 0xc2, 0x17, 0xaa, 0x98, 0x5f,
0x00, 0xce, 0xf9, 0xb9, 0x16, 0x01, 0x16, 0x36, 0x95, 0x9f, 0x2f, 0xaa,
0x4f, 0x02, 0x45, 0xa3, 0x50, 0x5d, 0x37, 0xf0, 0x02, 0xf0, 0xa2, 0x88,
0xee, 0xc4, 0xc8, 0xae, 0x64, 0x9e, 0xbf, 0xaf, 0x28, 0x91, 0xea, 0xe9,
0x32, 0xc9, 0xee, 0xbe, 0x83, 0x33, 0x53, 0x65, 0x33, 0xf6, 0x96, 0x60,
0x42, 0xa5, 0x9e, 0xfa, 0xa7, 0x8a, 0x72, 0x1a, 0x98, 0x0a, 0xf0, 0x3e,
0x06, 0x7a, 0x1e, 0x30, 0xc5, 0x09, 0x60, 0x1c, 0x59, 0xb4, 0xa6, 0xfc,
0x23, 0x26, 0xa5, 0x3f, 0x1f, 0xa1, 0xf3, 0x0f, 0xa9, 0x68, 0xab, 0xe0,
0xff, 0xdf, 0x5b, 0x9d, 0xd3, 0x5e, 0x3c, 0xf6, 0xdc, 0x7c, 0x27, 0xc0,
0x3b, 0xc3, 0x3f, 0xfb, 0x80, 0x5f, 0x1d, 0xf9, 0x4b, 0x43, 0x03, 0x5e,
0x7b, 0xd9, 0xdc, 0x79, 0x82, 0x7f, 0x19, 0x68, 0x35, 0x50, 0x99, 0x69,
0xed, 0x99, 0x51, 0x23, 0xe6, 0xab, 0x56, 0xcf, 0x9e, 0x96, 0x30, 0x79,
0x2f, 0x02, 0x67, 0xa4, 0x59, 0x45, 0x97, 0x0a, 0x77, 0x98, 0xfe, 0xee,
0xd5, 0xb1, 0x5b, 0xde, 0xec, 0x1b, 0xf5, 0x31, 0x49, 0x53, 0xf8, 0x6c,
0x03, 0xd7, 0x88, 0xca, 0x35, 0xc0, 0x09, 0x99, 0xb0, 0x0e, 0x90, 0x31,
0x02, 0xa8, 0x6a, 0xc5, 0xf7, 0x0f, 0x44, 0x9e, 0x45, 0xb9, 0x30, 0x8d,
0xe2, 0x06, 0x58, 0x99, 0xc2, 0xff, 0x76, 0xac, 0xbe, 0xad, 0x7b, 0xcc,
0x85, 0xfa, 0xdd, 0xb3, 0x4b, 0x12, 0x25, 0x89, 0x25, 0xa8, 0xf9, 0x4f,
0x90, 0x53, 0x83, 0x2c, 0x80, 0x8c, 0xe9, 0x02, 0x42, 0x9d, 0x91, 0x6f,
0xa9, 0xa4, 0xe1, 0x7c, 0x65, 0xaf, 0x41, 0xae, 0x6a, 0xbd, 0xa1, 0xfd,
0xb9, 0xf1, 0xb2, 0xf5, 0xde, 0xaf, 0xbe, 0xd6, 0x03, 0x44, 0xab, 0x5a,
0x2b, 0x7e, 0x10, 0xea, 0x32, 0x4b, 0x15, 0xbd, 0x0d, 0x98, 0xee, 0xba,
0x80, 0x11, 0x8c, 0xf8, 0x3d, 0x4f, 0x9e, 0x05, 0x7c, 0x3b, 0xdf, 0xeb,
0x56, 0x43, 0xe8, 0xf2, 0x58, 0x7d, 0xdb, 0x5b, 0x13, 0x69, 0xff, 0xfc,
0x75, 0xe1, 0x49, 0xc5, 0x7d, 0x7c, 0x43, 0x84, 0x2d, 0xcd, 0xf5, 0x1d,
0x8f, 0x39, 0x01, 0xd8, 0x84, 0xfe, 0x68, 0x45, 0xa9, 0x4f, 0x6a, 0x1b,
0x70, 0x9a, 0xe5, 0x93, 0x3d, 0xef, 0x27, 0x93, 0x57, 0x6c, 0xbc, 0x69,
0xe7, 0x21, 0x37, 0xd9, 0xcb, 0xe0, 0x2e, 0x20, 0x44, 0xea, 0x1b, 0x6a,
0xe9, 0x7c, 0x81, 0x8e, 0x64, 0xbe, 0x3f, 0xbf, 0xa5, 0x2e, 0xee, 0x9c,
0x9f, 0xc9, 0x11, 0xa0, 0x6a, 0x55, 0xf8, 0x74, 0xdf, 0x93, 0x76, 0xa0,
0xc0, 0xa2, 0xd8, 0x9f, 0x53, 0x46, 0xe7, 0xc5, 0x6e, 0xec, 0x78, 0xc3,
0xb9, 0xf7, 0x83, 0x09, 0xf4, 0x4a, 0xa0, 0xef, 0xc9, 0xf7, 0x2c, 0x9d,
0x8f, 0x40, 0xbd, 0x73, 0x7e, 0x16, 0x44, 0x80, 0xda, 0xc6, 0xc8, 0xc7,
0x55, 0x78, 0xc1, 0xee, 0x61, 0x24, 0xd6, 0x5c, 0xdf, 0x5e, 0xed, 0xdc,
0x9a, 0x05, 0x11, 0xc0, 0x88, 0xde, 0x6a, 0x59, 0xa4, 0xdf, 0x4b, 0x25,
0x6e, 0x71, 0x2e, 0xcd, 0x02, 0x01, 0x54, 0x45, 0x2b, 0xe6, 0x08, 0x32,
0xdf, 0x6e, 0xbe, 0xaf, 0xff, 0x9b, 0xc9, 0xbb, 0x73, 0x9d, 0x00, 0x8e,
0xee, 0xfb, 0xc5, 0xdc, 0x62, 0x69, 0x5b, 0x77, 0x61, 0xa2, 0xe8, 0x0e,
0xe7, 0xce, 0x2c, 0x10, 0xc0, 0xfc, 0x75, 0xe1, 0x49, 0xa8, 0x2e, 0xb6,
0x7b, 0xfb, 0xb9, 0x67, 0xc3, 0x8a, 0xad, 0x7f, 0x71, 0xee, 0xcc, 0x02,
0x01, 0x14, 0xf5, 0x7b, 0x0b, 0x18, 0x3a, 0x90, 0x71, 0xdc, 0xee, 0x4f,
0x79, 0xba, 0xca, 0xb9, 0x32, 0x4b, 0x04, 0x20, 0x50, 0x63, 0xf9, 0xf9,
0x5f, 0xc4, 0xea, 0x3a, 0x3a, 0x9c, 0x2b, 0xb3, 0x40, 0x00, 0x57, 0x37,
0x46, 0xa6, 0x80, 0x5e, 0x62, 0x15, 0xfd, 0x45, 0x5a, 0x9d, 0x1b, 0xb3,
0x44, 0x00, 0x09, 0x64, 0x01, 0x90, 0x67, 0x33, 0x5b, 0x0c, 0xf9, 0x3c,
0xe0, 0xdc, 0x98, 0x2d, 0x5d, 0x80, 0x70, 0xa9, 0x65, 0x89, 0x97, 0xef,
0x5b, 0xd6, 0xfe, 0x27, 0xe7, 0xc6, 0x2c, 0x11, 0x80, 0xa2, 0x17, 0x5b,
0x0a, 0xe6, 0x69, 0xe7, 0xc2, 0x2c, 0x11, 0x40, 0x6d, 0xe3, 0x99, 0x15,
0xc0, 0x34, 0x9b, 0x32, 0x06, 0x79, 0xc6, 0xb9, 0x30, 0x4b, 0x04, 0xa0,
0x9e, 0x7e, 0xd2, 0xb2, 0x48, 0x52, 0xfb, 0x0f, 0x3f, 0xef, 0x5c, 0x38,
0x32, 0x02, 0xb3, 0x1f, 0x40, 0x54, 0x3f, 0x6e, 0x73, 0x9e, 0x4f, 0xa1,
0xdd, 0x76, 0x63, 0x67, 0x55, 0x2b, 0xbe, 0xdf, 0x15, 0xf9, 0x57, 0x11,
0xe6, 0xa9, 0xa1, 0x12, 0xa1, 0x72, 0x38, 0xea, 0x9c, 0xc0, 0x50, 0x62,
0x08, 0x0f, 0xe8, 0x05, 0x7a, 0x05, 0x0e, 0x29, 0xec, 0x05, 0xf6, 0x88,
0xf0, 0x86, 0x51, 0x5e, 0x31, 0xa1, 0xc1, 0x97, 0x62, 0xcb, 0x76, 0xbf,
0xe3, 0x04, 0x30, 0x16, 0x11, 0x40, 0xa8, 0xc4, 0x42, 0x01, 0x22, 0xba,
0xf5, 0x78, 0x3e, 0xd7, 0xd0, 0x80, 0xd7, 0x3e, 0x35, 0x72, 0x85, 0x27,
0x54, 0x69, 0x17, 0x9f, 0x01, 0xa6, 0xa8, 0x72, 0xac, 0xef, 0x41, 0x4f,
0x00, 0x4e, 0x50, 0x98, 0x01, 0x84, 0x01, 0x54, 0x87, 0x3e, 0xee, 0x27,
0xf3, 0xb5, 0x26, 0x1a, 0x69, 0x13, 0x78, 0x48, 0x84, 0xfb, 0x37, 0xd5,
0xc5, 0x5f, 0xc9, 0x74, 0x01, 0x04, 0xe2, 0xeb, 0xe0, 0xe1, 0x37, 0xb3,
0x07, 0x8b, 0xef, 0xfe, 0x55, 0xf8, 0xca, 0xe6, 0xba, 0xf8, 0xca, 0xf7,
0xad, 0x73, 0xe5, 0xcc, 0x22, 0x2f, 0xbf, 0x64, 0x89, 0x88, 0xac, 0x00,
0x3e, 0x32, 0x36, 0xad, 0x27, 0xbb, 0x54, 0xcd, 0x2a, 0x43, 0x68, 0xdd,
0x78, 0xec, 0x36, 0xce, 0xde, 0x31, 0xc0, 0x81, 0xf0, 0x1c, 0x2c, 0x37,
0x7e, 0x78, 0xaa, 0xdb, 0xdf, 0xef, 0x6f, 0x35, 0x8d, 0xe5, 0x0b, 0xfc,
0x82, 0x92, 0x0e, 0x11, 0x69, 0x1a, 0x33, 0xe7, 0x0f, 0x85, 0x86, 0xd9,
0x82, 0xdc, 0xe9, 0x93, 0xda, 0x5b, 0x13, 0x2d, 0xbf, 0x6d, 0xc9, 0xfa,
0x59, 0x85, 0x4e, 0x00, 0xe9, 0x18, 0xa1, 0x52, 0x61, 0x5b, 0xc6, 0xa8,
0xec, 0xfe, 0xc7, 0xdf, 0x7d, 0x69, 0x6d, 0xf9, 0x8c, 0x9a, 0x68, 0xf9,
0x23, 0x88, 0x3e, 0x70, 0xf4, 0x7e, 0xfc, 0x71, 0xe0, 0x24, 0xd0, 0xef,
0xf4, 0xf7, 0x16, 0x6e, 0x5f, 0xd8, 0x18, 0xfe, 0x9c, 0x13, 0x80, 0x7d,
0x3f, 0x64, 0x7b, 0xd2, 0x47, 0x0f, 0x99, 0xe4, 0xef, 0xff, 0xee, 0xad,
0x8f, 0x46, 0x2e, 0x48, 0x26, 0xf5, 0x15, 0xd0, 0xcb, 0x27, 0xf0, 0x51,
0x4e, 0x17, 0x91, 0x07, 0x6b, 0xa2, 0x91, 0xbb, 0x33, 0x25, 0x1a, 0x04,
0x43, 0x00, 0xca, 0x0c, 0xcb, 0x22, 0x7f, 0x7a, 0xf4, 0xa6, 0x9d, 0x03,
0xef, 0xae, 0x21, 0x34, 0x45, 0x16, 0x03, 0x5b, 0xc0, 0xba, 0x9e, 0xb1,
0xe2, 0xcb, 0xfd, 0x7d, 0x85, 0xbf, 0x5a, 0xd4, 0x58, 0x7e, 0x9a, 0x13,
0xc0, 0xf1, 0x0d, 0xe8, 0x66, 0x58, 0x16, 0x78, 0x77, 0xe7, 0xcf, 0xc2,
0x68, 0xf9, 0xd5, 0xaa, 0xfc, 0x08, 0xbb, 0xef, 0x10, 0xc6, 0xe1, 0xa1,
0x38, 0xc7, 0x88, 0xfe, 0xb2, 0xaa, 0x29, 0x1c, 0x76, 0x02, 0xf8, 0xe0,
0x2e, 0x60, 0xba, 0x65, 0x81, 0xb7, 0x01, 0x6a, 0x1b, 0xc3, 0xd5, 0x82,
0xae, 0x27, 0xb8, 0x7b, 0x1b, 0x67, 0xfa, 0x2a, 0xcf, 0x2d, 0x5c, 0x5d,
0x5e, 0xe9, 0x04, 0x70, 0xec, 0x45, 0x1d, 0xbb, 0x08, 0x20, 0xe6, 0xc0,
0xc2, 0xbb, 0xe6, 0x9e, 0xa3, 0x22, 0x1b, 0x08, 0x7e, 0x92, 0x8b, 0x69,
0x92, 0xd2, 0x87, 0x6b, 0xef, 0xac, 0x3c, 0xd9, 0x09, 0xe0, 0x98, 0xa3,
0x68, 0x1b, 0xc5, 0x78, 0x09, 0xf1, 0xbd, 0xfb, 0x49, 0x23, 0x47, 0x80,
0xa2, 0x5b, 0x45, 0x59, 0xa9, 0xa2, 0xd5, 0x78, 0xde, 0x47, 0x25, 0x64,
0xca, 0x52, 0x03, 0xdd, 0xc5, 0xa9, 0xb2, 0x78, 0x28, 0x15, 0x1a, 0x3c,
0x11, 0x8f, 0xd3, 0x51, 0xef, 0x12, 0x54, 0xff, 0x1d, 0xf8, 0x09, 0x43,
0x79, 0x01, 0x46, 0x1a, 0xe2, 0xfe, 0x49, 0x43, 0xa9, 0x9f, 0x55, 0xad,
0x9c, 0x59, 0x14, 0x34, 0x01, 0x04, 0x65, 0x25, 0xd0, 0xae, 0x61, 0x54,
0xbf, 0x84, 0x90, 0x6f, 0x51, 0xa2, 0x57, 0x94, 0x35, 0x49, 0x4f, 0xef,
0x3e, 0xf6, 0xee, 0xa1, 0xdd, 0x47, 0x12, 0x41, 0xec, 0x01, 0x9e, 0x02,
0xee, 0x5a, 0xb2, 0x7e, 0x56, 0x61, 0x7f, 0x6f, 0xd1, 0xe7, 0x40, 0xff,
0x03, 0xf8, 0xd8, 0x08, 0x46, 0xba, 0xe7, 0x85, 0x0a, 0x26, 0xdd, 0x0e,
0xdc, 0x1c, 0x24, 0x01, 0x04, 0x62, 0x25, 0xb0, 0xa6, 0x31, 0x32, 0x60,
0xe9, 0x50, 0x9b, 0x07, 0xdc, 0x48, 0x22, 0xf4, 0x95, 0xe6, 0x9b, 0xb7,
0xed, 0x1f, 0xb1, 0x9d, 0xd1, 0xf0, 0x17, 0x40, 0x56, 0x91, 0xfe, 0x51,
0x6f, 0xc5, 0xf0, 0xa9, 0x96, 0x1b, 0xe3, 0x5b, 0x9c, 0x00, 0xfe, 0xd6,
0x24, 0x52, 0xd3, 0x14, 0x31, 0x63, 0x50, 0x73, 0x0f, 0xe8, 0x92, 0x96,
0xfa, 0x8e, 0xfb, 0x47, 0xb3, 0xd2, 0xaa, 0x1f, 0x56, 0x7c, 0xc8, 0x1f,
0x48, 0x6d, 0x04, 0x2e, 0x4b, 0xaf, 0xc5, 0x65, 0xd7, 0x64, 0xbf, 0xb8,
0x3c, 0x28, 0xf9, 0x83, 0x27, 0x7c, 0x0c, 0xb0, 0x64, 0xc3, 0xac, 0x82,
0x31, 0xa8, 0xf6, 0x6d, 0x55, 0xb9, 0x68, 0xb4, 0x9d, 0x0f, 0x10, 0x5b,
0xda, 0x76, 0x30, 0x55, 0x16, 0xff, 0x2c, 0xe8, 0xba, 0xf4, 0x04, 0xaf,
0xb3, 0xdf, 0x49, 0xf6, 0x2c, 0x73, 0x83, 0xc0, 0x61, 0x12, 0x87, 0x43,
0xa3, 0x1a, 0xfa, 0x05, 0x0e, 0x63, 0xf4, 0xb2, 0xcd, 0x37, 0xb4, 0xbf,
0x3a, 0x56, 0x36, 0xc7, 0xaa, 0x49, 0x45, 0xba, 0x3a, 0xae, 0x13, 0xd8,
0x98, 0xa6, 0x8d, 0xb7, 0x55, 0x45, 0x2b, 0x4a, 0x9d, 0x00, 0x00, 0x6f,
0xa0, 0x38, 0x35, 0x9a, 0xf5, 0x19, 0x58, 0xd2, 0x72, 0x63, 0xc7, 0x6f,
0xc6, 0xda, 0xee, 0x86, 0x06, 0x4c, 0xb2, 0xcc, 0xbf, 0x16, 0x48, 0xe7,
0x7f, 0x4d, 0xf3, 0xc5, 0x2c, 0x76, 0x02, 0x00, 0x8a, 0x26, 0xe7, 0x0d,
0x8e, 0xde, 0x70, 0x42, 0x9b, 0x36, 0xd7, 0xc7, 0xc7, 0x6d, 0x97, 0x70,
0xac, 0xba, 0x6d, 0x30, 0x65, 0xb4, 0x9a, 0xa1, 0x4d, 0x24, 0x96, 0x3d,
0x81, 0x2e, 0x73, 0x02, 0x00, 0x86, 0x07, 0x43, 0xa3, 0x91, 0xdc, 0x7b,
0xbf, 0x09, 0x25, 0xbe, 0x3e, 0xde, 0xf6, 0xc7, 0x6e, 0xec, 0x78, 0x43,
0x84, 0xff, 0x4e, 0xa3, 0x1b, 0x38, 0xab, 0x26, 0x1a, 0xb9, 0x20, 0xe7,
0x05, 0x30, 0xfc, 0xea, 0x8e, 0x78, 0x44, 0x2c, 0xc8, 0x77, 0x26, 0x6a,
0xbb, 0x56, 0x72, 0xaa, 0xff, 0x7d, 0xe0, 0x8f, 0xf6, 0x4b, 0x03, 0x7c,
0xde, 0x09, 0x60, 0xc8, 0x7b, 0x23, 0xed, 0x06, 0x3a, 0x0b, 0x8a, 0xfb,
0x7e, 0x34, 0x51, 0xe6, 0xc7, 0xaa, 0xdb, 0x06, 0x05, 0x56, 0x5a, 0xeb,
0x5e, 0xf8, 0xac, 0x13, 0xc0, 0x10, 0xbd, 0x23, 0xd2, 0x8f, 0xc8, 0x3d,
0x1b, 0xae, 0xd9, 0xd3, 0x3f, 0x91, 0x0f, 0x90, 0x2c, 0xf0, 0xd7, 0xa3,
0xd6, 0x42, 0x9e, 0x5b, 0x15, 0xad, 0x98, 0xe3, 0x04, 0x80, 0xbc, 0x3d,
0xc2, 0xb1, 0xff, 0x7d, 0x13, 0xfd, 0x04, 0xb1, 0xa5, 0x6d, 0x07, 0x55,
0xf4, 0x11, 0x7b, 0x07, 0x98, 0x0b, 0x9c, 0x00, 0x60, 0x04, 0x02, 0xd0,
0x3f, 0x34, 0xd7, 0x75, 0xbc, 0x16, 0x8c, 0x9e, 0xcc, 0x7b, 0x28, 0x0d,
0x07, 0x7c, 0xd4, 0x09, 0x60, 0x44, 0x02, 0x90, 0xa7, 0x08, 0x0a, 0x9e,
0x5a, 0xdb, 0xa2, 0xe3, 0x77, 0x95, 0x5d, 0x96, 0x0a, 0x40, 0xf4, 0xa5,
0xa0, 0xf8, 0xbf, 0x65, 0x79, 0x7c, 0x0f, 0xd0, 0x65, 0x29, 0x81, 0x48,
0xce, 0x0b, 0x40, 0x31, 0x07, 0xd2, 0xee, 0xfd, 0x53, 0xfc, 0x8e, 0x20,
0xa1, 0xd6, 0xf6, 0x4c, 0x9d, 0xc8, 0x0d, 0xa4, 0xc1, 0xd8, 0x16, 0x8e,
0xf7, 0xfb, 0x74, 0xcb, 0x16, 0x84, 0x92, 0x3b, 0x02, 0x25, 0x00, 0x91,
0xd7, 0x6d, 0x8b, 0xf4, 0xf4, 0x96, 0xcc, 0xcc, 0x69, 0x01, 0x80, 0xd9,
0x9d, 0xee, 0xec, 0xeb, 0xde, 0xeb, 0x77, 0x75, 0x05, 0x2a, 0x00, 0x88,
0x5a, 0xe7, 0x2b, 0x10, 0x35, 0xa7, 0xe4, 0xb4, 0x00, 0xde, 0xeb, 0x90,
0xc7, 0x71, 0xd2, 0x89, 0x10, 0xa8, 0x3b, 0x22, 0x05, 0xac, 0x53, 0xd3,
0xfb, 0x62, 0x8a, 0x73, 0x5b, 0x00, 0xd3, 0xfc, 0x3d, 0x0c, 0xdd, 0xea,
0x61, 0x4b, 0x2f, 0x41, 0xc3, 0x88, 0xf5, 0x55, 0x34, 0xaa, 0x5e, 0x51,
0x4e, 0x0b, 0x20, 0x56, 0xdd, 0x36, 0x88, 0x92, 0x4e, 0x96, 0xcf, 0xfe,
0xc0, 0x09, 0x40, 0x8c, 0xbd, 0x00, 0x72, 0x3d, 0x02, 0x0c, 0x35, 0x02,
0xff, 0x4f, 0x16, 0xa0, 0x62, 0xbf, 0xcd, 0x4e, 0x44, 0x34, 0xe7, 0x05,
0x80, 0xa4, 0xb5, 0xb1, 0xa2, 0x30, 0x78, 0x01, 0xc0, 0xb3, 0xb7, 0x29,
0x8d, 0x6e, 0x23, 0xeb, 0x04, 0x20, 0x48, 0x3a, 0xc9, 0x16, 0x8a, 0x03,
0x17, 0x02, 0x3c, 0x2d, 0xb2, 0x2f, 0xa2, 0xbd, 0x39, 0x2f, 0x80, 0x94,
0x7a, 0xe9, 0x08, 0x60, 0x1a, 0x1a, 0xb0, 0x3b, 0x0f, 0xec, 0x0f, 0xba,
0x92, 0x44, 0xbb, 0x73, 0x5e, 0x00, 0xc3, 0x37, 0x7b, 0xd9, 0x2e, 0x08,
0x85, 0xae, 0x5a, 0x33, 0xbb, 0x2c, 0x58, 0xfe, 0xb7, 0x17, 0x80, 0x17,
0x92, 0x7d, 0x6e, 0x0c, 0x30, 0xc4, 0x13, 0xb6, 0x05, 0x12, 0x5a, 0x10,
0xa8, 0xd3, 0xb7, 0x22, 0xd8, 0xda, 0x63, 0xde, 0xda, 0x3f, 0xfd, 0x4d,
0x27, 0x00, 0x40, 0x0c, 0x8f, 0x5b, 0xbf, 0x71, 0x26, 0x15, 0xac, 0x93,
0xb7, 0x6a, 0x7d, 0x7f, 0xf0, 0x1f, 0x8f, 0x7d, 0x77, 0x71, 0x0e, 0x09,
0xa0, 0x20, 0x59, 0xf8, 0x14, 0x60, 0xb5, 0x4d, 0xdc, 0x13, 0x39, 0x3f,
0x28, 0xf6, 0x2f, 0x6a, 0x9a, 0x7b, 0x06, 0x30, 0xd5, 0x52, 0xf6, 0x13,
0xfa, 0x65, 0x56, 0xa0, 0x04, 0xb0, 0x61, 0xc5, 0xd6, 0xbf, 0x20, 0x7f,
0xbb, 0x9d, 0xfb, 0x38, 0xfb, 0xdc, 0x4f, 0x07, 0xc5, 0x7e, 0xa3, 0x9e,
0xb5, 0x2d, 0xa2, 0xfa, 0x6b, 0x27, 0x80, 0xbf, 0x6f, 0x92, 0x66, 0xcb,
0x02, 0x1f, 0xae, 0x59, 0x7d, 0xe6, 0x3f, 0x07, 0x64, 0x00, 0x78, 0xa5,
0x75, 0x19, 0x4f, 0x5e, 0x76, 0x02, 0x38, 0x7a, 0x3a, 0x98, 0xef, 0x35,
0xdb, 0x6e, 0xae, 0x54, 0x63, 0xbe, 0x38, 0xd1, 0x76, 0x5f, 0xdd, 0x18,
0x99, 0x22, 0xf6, 0x07, 0x46, 0x13, 0x85, 0x03, 0x05, 0xcf, 0x3b, 0x01,
0x1c, 0x3d, 0x1d, 0x5c, 0xda, 0x76, 0x10, 0xc1, 0x6a, 0x6f, 0x9d, 0xc0,
0xe2, 0x2b, 0xd7, 0xce, 0x9b, 0xd0, 0x45, 0xa1, 0x41, 0x4f, 0x96, 0x62,
0x99, 0xa7, 0x48, 0xe0, 0xd9, 0x89, 0xbe, 0xeb, 0x28, 0x90, 0xe9, 0x55,
0x04, 0x36, 0x58, 0x16, 0x99, 0x5a, 0x92, 0xe8, 0x5e, 0x3a, 0x51, 0xf6,
0x2e, 0x59, 0x3f, 0xab, 0x10, 0x55, 0xeb, 0xc4, 0x0f, 0x2a, 0xf2, 0xe0,
0x44, 0xb7, 0x75, 0x20, 0x05, 0xd0, 0x5c, 0x17, 0x7f, 0x08, 0xa4, 0xdd,
0x72, 0x02, 0xfe, 0xcd, 0x45, 0x4d, 0x67, 0x9d, 0x34, 0x11, 0xf6, 0xf6,
0xf5, 0x15, 0xde, 0x8a, 0x6d, 0xd2, 0x08, 0x65, 0x30, 0x4f, 0x06, 0x63,
0x4e, 0x00, 0xef, 0x1d, 0x02, 0x54, 0xc1, 0xf6, 0x1e, 0xc0, 0x32, 0x63,
0x12, 0xe3, 0x7e, 0x77, 0x60, 0x55, 0xb4, 0x62, 0x8e, 0x28, 0xff, 0x65,
0xdf, 0xf2, 0xba, 0xf9, 0xde, 0xe5, 0xbb, 0x3a, 0x9d, 0x00, 0xde, 0x87,
0xfd, 0x5d, 0x27, 0x6f, 0x62, 0x28, 0x57, 0x8f, 0x8d, 0x70, 0xae, 0x1b,
0x4a, 0xe3, 0x32, 0x3e, 0x5c, 0x7e, 0xd7, 0x9c, 0x02, 0x9f, 0x54, 0x2b,
0x69, 0x24, 0xab, 0xf2, 0x44, 0x1b, 0x83, 0xd0, 0xce, 0x81, 0x15, 0xc0,
0xf0, 0xea, 0xd8, 0xb7, 0xd3, 0x08, 0x1f, 0xeb, 0x17, 0x46, 0xe7, 0xfe,
0xcb, 0x58, 0xdb, 0xd7, 0xd0, 0x80, 0x77, 0x62, 0x28, 0xb4, 0x01, 0xb0,
0x9e, 0x82, 0x2a, 0xfa, 0xc8, 0xa6, 0xe5, 0xaf, 0xbf, 0xec, 0x04, 0xf0,
0x01, 0xb4, 0xd4, 0xc5, 0xef, 0x41, 0xb0, 0x9d, 0x26, 0x95, 0x0a, 0xde,
0xa3, 0x8b, 0x9a, 0x22, 0x63, 0x76, 0xe0, 0xa2, 0xaa, 0x15, 0x3f, 0x5e,
0x56, 0xfe, 0x03, 0x55, 0xbb, 0x3b, 0x0e, 0x8f, 0xcc, 0x74, 0x8d, 0x1f,
0xfa, 0x6a, 0x50, 0xda, 0x38, 0xd8, 0x49, 0x16, 0x05, 0xf5, 0x53, 0x2c,
0x07, 0x6c, 0xd7, 0xca, 0xa7, 0x18, 0xe5, 0xb9, 0xb1, 0xe8, 0x0e, 0xaa,
0x7e, 0x58, 0xf1, 0x21, 0xef, 0x40, 0xe4, 0x61, 0xd0, 0x6b, 0xd3, 0xaa,
0x40, 0x59, 0x13, 0xbb, 0xbe, 0x6d, 0x7b, 0x50, 0x9a, 0xd8, 0x27, 0xe0,
0xfc, 0xee, 0xd1, 0x03, 0x9d, 0x95, 0x57, 0x4c, 0x29, 0x41, 0xe4, 0x13,
0x96, 0x45, 0xf3, 0x40, 0xaa, 0x2b, 0x3f, 0x53, 0x36, 0xe7, 0xac, 0x4b,
0xa7, 0xbf, 0xb0, 0xed, 0xb1, 0xce, 0x9e, 0x91, 0xda, 0x52, 0xbb, 0x2a,
0xf2, 0x79, 0x31, 0xfa, 0xb0, 0xc0, 0xb9, 0x69, 0x56, 0xb1, 0x23, 0xaf,
0x2f, 0xff, 0x0b, 0xaf, 0x3d, 0xb9, 0x3f, 0x11, 0x9c, 0x77, 0x2c, 0x03,
0xb8, 0x6e, 0xed, 0xbc, 0xbc, 0x43, 0xa9, 0x9e, 0x67, 0x50, 0x2e, 0x4c,
0xb3, 0x8a, 0xe3, 0x4c, 0x14, 0xf9, 0xde, 0x73, 0xfc, 0x51, 0x49, 0x14,
0x09, 0x49, 0xcf, 0x33, 0x17, 0x06, 0xa5, 0xef, 0xcf, 0x28, 0x01, 0x00,
0xd4, 0xac, 0x0a, 0x9f, 0x82, 0x27, 0xaf, 0x02, 0x23, 0xcd, 0xb9, 0xfb,
0x2a, 0xf0, 0x34, 0xe8, 0x4b, 0x9a, 0xd2, 0x1d, 0x05, 0x9e, 0xf7, 0x66,
0x97, 0x49, 0x76, 0x97, 0x4e, 0xdf, 0x99, 0x1c, 0x38, 0x1c, 0x2e, 0x2e,
0x48, 0x86, 0x4e, 0x92, 0x64, 0x72, 0xb6, 0x2f, 0x52, 0x69, 0xe0, 0x62,
0x54, 0x3f, 0x2d, 0xc8, 0x89, 0xa3, 0xd0, 0xd0, 0xd7, 0x37, 0xd7, 0xc7,
0xd7, 0x06, 0xaf, 0x97, 0xcd, 0x20, 0xaa, 0x1b, 0xcb, 0x2f, 0xf2, 0x44,
0x1f, 0x27, 0x80, 0x9b, 0x41, 0x3f, 0xa0, 0x91, 0xef, 0x68, 0xae, 0x8f,
0x7f, 0x2d, 0xa0, 0xb6, 0x65, 0x16, 0x0b, 0xa3, 0x91, 0x4b, 0x05, 0x7e,
0x9a, 0x39, 0x22, 0x90, 0x35, 0x2d, 0x75, 0xed, 0x75, 0x41, 0x3b, 0xc1,
0x94, 0x19, 0xb3, 0x80, 0xf7, 0x60, 0x73, 0x7d, 0xfc, 0x09, 0x41, 0x17,
0x00, 0x03, 0x81, 0x37, 0x56, 0xb9, 0xbd, 0xa5, 0xbe, 0x7d, 0x79, 0x50,
0x9d, 0x9f, 0x91, 0x11, 0xe0, 0xdd, 0x31, 0xc1, 0x50, 0x8a, 0xb5, 0x18,
0x70, 0x4a, 0x00, 0xcd, 0x1b, 0x40, 0xf4, 0xe6, 0x96, 0xba, 0x8e, 0x35,
0x19, 0xd0, 0x3d, 0x65, 0x2e, 0xb5, 0x77, 0x56, 0x9e, 0xac, 0x79, 0xc9,
0xcd, 0xc0, 0xc5, 0x01, 0x32, 0x6b, 0x27, 0x9e, 0x57, 0xdd, 0xb2, 0x7c,
0xfb, 0x6f, 0x33, 0xa1, 0x0d, 0xfd, 0x4c, 0x16, 0xc0, 0xb6, 0xc7, 0x3a,
0x7b, 0xa6, 0x9e, 0x57, 0x79, 0x5f, 0x69, 0x49, 0xf7, 0x61, 0xe0, 0x7c,
0x2c, 0xef, 0x1e, 0x1c, 0xe5, 0x70, 0x3f, 0xa8, 0xa2, 0xdf, 0x37, 0x84,
0x16, 0xb5, 0xd6, 0x6d, 0xdf, 0x9b, 0x41, 0x03, 0xd4, 0xec, 0xa0, 0xf6,
0xce, 0xca, 0x93, 0x09, 0x25, 0x6f, 0x57, 0x61, 0xf1, 0x38, 0x8f, 0x6d,
0x0c, 0xf0, 0x80, 0xe7, 0xcb, 0xd7, 0x37, 0x5d, 0xdf, 0xbe, 0x23, 0xd3,
0xda, 0x2d, 0x6b, 0x04, 0x70, 0x84, 0xaa, 0x55, 0xe1, 0xd3, 0x3d, 0x4f,
0xea, 0x05, 0xae, 0xc5, 0xf6, 0x2a, 0x1a, 0x3b, 0xde, 0x01, 0xee, 0xf5,
0xc4, 0xfc, 0xcf, 0xa6, 0xba, 0xd7, 0x77, 0x67, 0x6a, 0x7b, 0x65, 0x9d,
0x00, 0x8e, 0x70, 0xe5, 0xda, 0x79, 0xc5, 0xc5, 0x89, 0xde, 0xf9, 0x9e,
0xe8, 0xe5, 0x0a, 0x97, 0x92, 0xfe, 0x2d, 0x1f, 0x47, 0xb3, 0x0f, 0x78,
0x52, 0x95, 0x1f, 0x9b, 0x69, 0xfe, 0x13, 0xb1, 0xea, 0xb6, 0xc1, 0x4c,
0x6f, 0xa7, 0xac, 0x15, 0xc0, 0x3f, 0xf4, 0xcf, 0x52, 0xbb, 0x3a, 0x7c,
0x96, 0x1a, 0xef, 0x1c, 0xd0, 0x72, 0x84, 0x08, 0xc2, 0x19, 0x28, 0x93,
0x81, 0x52, 0x60, 0x12, 0x90, 0x0f, 0xf4, 0x31, 0x94, 0x74, 0xa2, 0x1b,
0x64, 0x1f, 0xb0, 0x07, 0xcc, 0x1b, 0xa2, 0x6c, 0x53, 0xc9, 0x7b, 0xb1,
0xa5, 0x7e, 0xdb, 0x1f, 0x70, 0x38, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0x70,
0x38, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0x70, 0x38, 0x1c, 0x0e, 0x87, 0xc3,
0xe1, 0x70, 0x38, 0x1c, 0x0e, 0x87, 0x23, 0xf8, 0xfc, 0x15, 0x5f, 0x1c,
0x32, 0xb4, 0xe4, 0xcf, 0xc8, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
}

84
main.go Normal file
View File

@ -0,0 +1,84 @@
package main
import origlog "log"
import (
"git.wit.org/jcarr/log"
"os"
"time"
"git.wit.org/wit/gui"
// "github.com/davecgh/go-spew/spew"
"github.com/gobuffalo/packr"
)
var GITCOMMIT string // this is passed in as an ldflag
var GOVERSION string // this is passed in as an ldflag
var VERSION string // this is passed in as an ldflag
var BUILDTIME string // this is passed in as an ldflag
var closed bool = false
var loopsleep time.Duration = 100 // in tenths of seconds
var username string
var hostname string
var geom string = "120x30+500+500"
var debugTest bool = false
// var xterm = []string{"nohup", "xterm", "-geometry", geom}
var useFirefox bool = true
var firefox = []string{"firefox", "--new-window"}
var packrBox packr.Box
func customExit(n *gui.Node) {
origlog.Println("Should Exit Here")
closed = true
/*
window := gui.Data.WindowMap["Debugging2"]
spew.Dump(window)
*/
time.Sleep(3 * time.Second)
log.Println("")
log.Println("CLEAN EXIT")
log.Println("")
os.Exit(0)
}
func main() {
log.Println("starting my Control Panel")
log.Println("GOVERSION =", GOVERSION)
log.Println("GITCOMMIT =", GITCOMMIT)
log.Println("packr ./resources box")
// This puts all the files in that directory in the binary
// This directory includes the default config file if there is not already one
packrBox = packr.NewBox("./resources")
filename := "ddns-tmp.conf"
b, _ := packrBox.FindString(filename)
log.Println(filename, "=\n\n", b)
// go sshClient()
go pprofMain()
// go gui.Main(dumbLoop)
go gui.Main(initGUI)
time.Sleep(2 * time.Second)
gui.Queue(delayedTabs)
go systrayMain()
watchWindows()
}
// only os.Exit() on close of the main Window
// TODO: Change to only exit from systray(?)
func initGUI() {
gui.Config.Exit = customExit
mainWindow(nil)
gui.Config.Exit = nil
}
func delayedTabs() {
log.Println("delayedTabs() could have added a tab here\n")
// jcarrWindow.AddTab("delayed tab", nil)
}

115
os.go Normal file
View File

@ -0,0 +1,115 @@
package main
import "log"
import "strings"
import "os"
import "os/exec"
import "io/ioutil"
import "errors"
import "bufio"
import "github.com/davecgh/go-spew/spew"
/*
import "time"
import "runtime"
import "runtime/debug"
import "runtime/pprof"
import "git.wit.org/wit/gui"
import "git.wit.org/wit/shell"
import "github.com/gobuffalo/packr"
*/
func runSimpleCommand(s string) {
cmd := strings.TrimSpace(s) // this is like 'chomp' in perl
cmd = strings.TrimSuffix(cmd, "\n") // this is like 'chomp' in perl
cmdArgs := strings.Fields(cmd)
runLinuxCommand(cmdArgs)
}
func xterm(cmd string) {
var tmp []string
var argsXterm = []string{"nohup", "xterm", "-geometry", geom}
tmp = append(argsXterm, "-hold", "-e", cmd)
log.Println("xterm cmd=", cmd)
go runCommand(tmp)
}
func runCommand(cmdArgs []string) {
log.Println("runCommand() START", cmdArgs)
process := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
// process := exec.Command("xterm", "-e", "ping localhost")
log.Println("runCommand() process.Start()")
process.Start()
log.Println("runCommand() process.Wait()")
err := process.Wait()
lookupError(err)
log.Println("runCommand() NEED TO CHECK THE TIME HERE TO SEE IF THIS WORKED")
log.Println("runCommand() OTHERWISE INFORM THE USER")
log.Println("runCommand() END", cmdArgs)
}
func lookupError(err error) {
var (
ee *exec.ExitError
pe *os.PathError
)
if errors.As(err, &ee) {
log.Println("ran, but non-zero exit code =", ee.ExitCode()) // ran, but non-zero exit code
} else if errors.As(err, &pe) {
log.Printf("os.PathError = %v", pe) // "no such file ...", "permission denied" etc.
} else if err != nil {
log.Printf("something really bad happened general err = %v", err) // something really bad happened!
if exitError, ok := err.(*exec.ExitError); ok {
log.Printf("exitError.ExitCode() is %d\n", exitError.ExitCode())
}
} else {
log.Println("success! // ran without error (exit code zero)")
}
}
func runLinuxCommand(cmdArgs []string) (string, error) {
process := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
process.Stdin = os.Stdin
process.Stderr = os.Stderr
stdOut, err := process.StdoutPipe()
if err != nil {
return "", err
}
if err := process.Start(); err != nil {
return "", err
}
bytes, err := ioutil.ReadAll(stdOut)
if err != nil {
return "", err
}
err = process.Wait()
lookupError(err)
log.Println(string(bytes))
return string(bytes), err
}
func packrSaveFile(packrname string, filename string) error {
log.Println("packrSaveFile() for", packrname)
b, _ := packrBox.FindString(packrname)
log.Println(packrname, "=\n\n", b)
spew.Dump(b)
f, err := os.Create(filename)
if err != nil {
return err
}
defer f.Close()
w := bufio.NewWriter(f)
n4, err := w.WriteString(b)
log.Println("n4 =", n4)
w.Flush()
return nil
}

81
pprof.go Normal file
View File

@ -0,0 +1,81 @@
package main
// run this and then hit:
// http://localhost:6060/debug/pprof/
//
// Also run from the command line:
// go tool pprof 'localhost:6060/debug/pprof/wit_pprof_experiment_thing?debug=1'
//
// https://medium.com/@cep21/creating-custom-go-profiles-with-pprof-b737dfc58e11
import "fmt"
import "log"
import "net/http"
import _ "net/http/pprof" // the _ means only the init() is needed
import "os"
import "runtime/pprof"
import "sync/atomic"
import "time"
var libProfile *pprof.Profile
func init() {
profName := "wit_pprof_experiment_thing" // this ends up in the URL
libProfile = pprof.Lookup(profName)
if libProfile == nil {
libProfile = pprof.NewProfile(profName)
}
}
type someResource struct {
*os.File
}
var fileIndex = int64(0)
func MustResource() *someResource {
f, err := os.Create(fmt.Sprintf("/tmp/%d.txt", atomic.AddInt64(&fileIndex, 1)))
if err != nil {
panic(err)
}
r := &someResource{f}
libProfile.Add(r, 1)
return r
}
func (r *someResource) Close() error {
libProfile.Remove(r)
return r.File.Close()
}
func trackAFunction() {
tracked := new(byte)
libProfile.Add(tracked, 1)
defer libProfile.Remove(tracked)
time.Sleep(time.Second)
}
func usesAResource() {
res := MustResource()
defer res.Close()
for i := 0; i < 10; i++ {
time.Sleep(time.Second)
}
}
func pprofMain() {
http.HandleFunc("/nonblock", func(rw http.ResponseWriter, req *http.Request) {
go usesAResource()
})
http.HandleFunc("/functiontrack", func(rw http.ResponseWriter, req *http.Request) {
trackAFunction()
})
http.HandleFunc("/block", func(rw http.ResponseWriter, req *http.Request) {
usesAResource()
})
log.Println("run this and then hit:")
log.Println("http://localhost:6061/debug/pprof/")
log.Println("")
log.Println("Running!")
log.Println(http.ListenAndServe("localhost:6061", nil))
}

1
resources/VERSION Normal file
View File

@ -0,0 +1 @@
v0.1

44
resources/apt/Makefile Normal file
View File

@ -0,0 +1,44 @@
setup-packages-kernel-build:
apt install -y flex bison dwarves libelf-dev
setup-packages-steam:
dpkg --add-architecture i386
apt update
apt install -f mesa-utils
apt install -f steam
setup-packages-desktop:
@echo tasksel
@echo make steam
@echo make chrome
@echo apt install xchat
@echo apt install blender
@echo apt install virt-manager
@echo apt remove minissdpd --purge
apt install remmina* synergy
setup-packages-laptop:
apt install pm-utils
# https://looking-glass.io/docs/stable/build/
setup-kvm-windows-looking-glass:
apt install binutils-dev cmake fonts-freefont-ttf libfontconfig1-dev libegl-dev libspice-protocol-dev nettle-dev libx11-dev libxi-dev libxinerama-dev libxss-dev libwayland-dev wayland-protocols
git clone --recursive https://github.com/gnif/LookingGlass.git
setup-install-google-chrome:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1397BC53640DB551
cp google-chrome.list /etc/apt/sources.list.d/
apt update
apt install google-chrome-stable
# WARNING: Firmware can not be updated in legacy BIOS mode
# See https://github.com/fwupd/fwupd/wiki/PluginFlag:legacy-bios for more information.
# No hardware detected with firmware update capability
# This warning can be ignored if UEFI firmware updates are not desired. It can be disabled by adding
# DisabledPlugins=test;invalid;uefi
# to /etc/fwupd/daemon.conf or by recompiling without UEFI support.
setup-firmware-fwupd:
apt install fwupdate fwupd
fwupdmgr get-devices
fwupdmgr refresh
fwupdmgr get-updates

View File

@ -0,0 +1,23 @@
deb http://mirrors.wit.org/debian/ sid main contrib non-free
deb-src http://mirrors.wit.org/debian/ sid main contrib non-free
# deb http://deb.debian.org/debian experimental main
# apt -t experimental install xrandr
# INFO: http://deb.debian.org/
# NO_PUBKEY 5A88D659DCB811BB
# deprecated: apt-key adv --keyserver keyring.debian.org --recv-keys 5A88D659DCB811BB
# use: apt install debian-ports-archive-keyring
deb http://deb.debian.org/debian unstable main contrib non-free
deb http://deb.debian.org/debian-debug unstable-debug main contrib non-free
deb http://deb.debian.org/debian-ports unstable main contrib non-free
###################### apt fallback to cogentco.com ###########################
#deb http://mirror.cogentco.com/debian/ sid main contrib non-free
#deb-src http://mirror.cogentco.com/debian/ sid main contrib non-free
#############################################################################
###################### apt fallback to kernel.org ###########################
#deb http://mirrors.kernel.org/debian/ sid main contrib non-free
#deb-src http://mirrors.kernel.org/debian/ sid main contrib non-free
#############################################################################

View File

@ -0,0 +1,2 @@
deb http://mirrors.wit.org/wit/ sid main
deb-src http://mirrors.wit.org/wit/ sid main

5
resources/bin/apt-file.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash -x
apt -y install apt-file
apt-file update
apt-file -x search '/pingus$'

30
resources/bin/games.sh Executable file
View File

@ -0,0 +1,30 @@
#!/bin/bash -x
apt install -y flightgear
apt install -y 0ad
apt install -y extremetuxracer # TODO: test fps at 4096x4096 with xrandr
apt install -y neverball
apt install -y \
hedgewars \
sauerbraten \
warzone2100 \
bzflag \
wesnoth
apt install -y pingus \
supertux \
assaultcube \
supertuxkart \
xgalaga \
open-invaders \
freeciv \
lincity-ng \
scorched3d \
# corsix-th
# openttd fluid-soundfont-gs fluidsynth openttd-opensfx freepats pmidi timidity-daemon
# add-apt-repository https://dl.bintray.com/mmatyas/deb
# apt-get update
# apt-get install openblok

View File

@ -0,0 +1,89 @@
#!/bin/bash -x
apt install -y stacer # Linux system optimizer and monitoring
apt install -y timeshift # System restore utility
apt install -y gnucash # personal and small-business financial-accounting software
apt install -y remmina* # GTK+ Remote Desktop Client
apt install -y texstudio # LaTeX Editor
apt install -y gimagereader \
tesseract-ocr-eng \
tesseract-ocr-fra # really excellent OCR (multiple languages)
apt install -y evolution # email / calendar
apt install -y firefox
apt install -y thunderbird # mail/news client
apt install -y pan # newsreader
apt install -y qbittorrent # bittorrent client based on libtorrent-rasterbar with a Qt5 GUI
apt install -y deluge # bittorrent client written in Python/PyGTK
apt install -y transmission # lightweight BitTorrent client
apt install -y \
telegram-desktop \
telegram-purple \
telegram-cli # fast and secure messaging application
apt install -y keepassxc # password manager (FOSS app built on qt5)
apt install -y calamares \
calamares-settings-debian # the gnome installer
apt install -y gimp # fucking excellent 2D
apt install -y krita # a different gimp
apt install -y blender # fucking excellent 3D
apt install -y inkscape # page layout
apt install -y valentina # pattern making program
# chat clients
apt install -y gajim # GTK+-based Jabber client // looks very modern
apt install -y hexchat # IRC client for X based on X-Chat 2
apt install -y pidgin # multi-protocol instant messaging client
apt install -y profanity # console based XMPP client // pretty modern website for a ncurses app
apt install -y psi # Qt-based XMPP client
apt install -y kaidan # Simple and user-friendly Jabber/XMPP client (old?)
# chat servers
apt install -y ejabberd # extensible realtime platform (XMPP server + MQTT broker + SIP service
apt install -y ejabberd-mod-grapfite # ejabberd module to gather statistics and publish them via statsd/grafite
apt install -y jabber2 # Jabber instant messenger server
apt install -y prosody # Lightweight Jabber/XMPP server
# audo
apt install -y audacity # multi-track audio editor
apt install -y ardour # the digital audio workstation
apt install -y audacious # small and fast audio player
######################### video ############################
apt install -y mpv # looks like it's the future of mplayer & mencoder
apt install -y mplayer # movie player for Unix-like systems
apt install -y vlc # multimedia player and streamer
apt install -y pitivi # non-linear audio/video editor
apt install -y openshot # OpenShot Video Editor
apt install -y shotcut # video editor with features like 4k
apt install -y olive-editor # non-linear video editor
apt install -y lmms # Linux Multimedia Studio
apt install -y kdenlive # non-linear video editing suite
apt install -y kodi # Open Source Home Theatre
apt install -y handbrake # convert anything to anything else
apt install -y obs-studio # designed for efficiently recording and streaming live video
apt install -y flameshot # simple-to-use screenshot software
apt install -y peek # a screen recorder
apt install -y kazam # screencast and screenshot application
##################### video end ############################
apt install -y wireshark # deep network traffic analyzer
apt install -y termshark # golang Terminal UI for wireshark
apt install -y testdisk # disk partition map and recovery tool
# funny terminal window screen saver
# add-apt-repository ppa:ytvwld/asciiquarium
# apt-get update && sudo apt-get install asciiquarium
apt install -y youtube-dl
apt install -y youtubedl-gui # GUI on youtube-dl
# synergy
# clamav clamtk # anti-virus utility for Unix
# lightworks : https://www.lwks.com/

View File

@ -0,0 +1,7 @@
#!/bin/bash -x
# Stuff I always want installed. Not much. 200MB (?)
apt install -y lsof bash-completion libpam-systemd dbus rbd-nbd golang-go git screen vim ethstatus iftop ethtool sysstat
apt install -y traceroute whois devscripts automake libtool devscripts nmap clang rsync bind9utils dnsutils net-tools
apt install -y tcpdump wget curl iputils-ping pciutils iptables sysbench man usbutils ssh neofetch bc lshw telnet hdparm vrms

6
resources/bin/steam.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash -x
dpkg --add-architecture i386
apt update
apt install -f mesa-utils
apt install -f steam

View File

@ -0,0 +1,4 @@
# Generated by jcarr
domain lab.wit.org
search lab.wit.org
nameserver 1.1.1.1

View File

@ -0,0 +1,4 @@
# Generated by jcarr
domain lab.wit.org
search lab.wit.org
nameserver 4.2.2.2 # as of 2021/06/05 does not resolve *.lab.wit.org

View File

@ -0,0 +1,4 @@
# Generated by jcarr
domain lab.wit.org
search lab.wit.org
nameserver 8.8.8.8

View File

@ -0,0 +1,7 @@
# Generated by jcarr
domain lab.wit.org
search lab.wit.org
# google's dns:
nameserver 2001:4860:4860::6464
nameserver 2001:4860:4860::8888

View File

@ -0,0 +1,8 @@
# bind.wit.org (a nameserver) should
# always use itself as the nameserver
# I'm not sure, but strange things seem
# to happen sometimes if you don't -- jcarr
domain lab.wit.org
search lab.wit.org
nameserver 127.0.0.1

148
systray.go Normal file
View File

@ -0,0 +1,148 @@
package main
import "fmt"
import "os"
import "io/ioutil"
import "log"
import "time"
import "git.wit.org/wit/gui"
import "github.com/davecgh/go-spew/spew"
import "github.com/getlantern/systray"
// "github.com/skratchdot/open-golang/open"
func systrayMain() {
onExit := func() {
fmt.Println("Starting onExit")
now := time.Now()
ioutil.WriteFile(fmt.Sprintf(`/tmp/on_exit_%d.txt`, now.UnixNano()), []byte(now.String()), 0644)
now = time.Now()
ioutil.WriteFile(fmt.Sprintf(`/tmp/on_exit_%d.2.txt`, now.UnixNano()), []byte(now.String()), 0644)
fmt.Println("Finished onExit")
}
// Should be called at the very beginning of main().
systray.Run(onReady, onExit)
}
var mHide *systray.MenuItem
var mShow *systray.MenuItem
var mChecked *systray.MenuItem
func onReady() {
systray.SetIcon(myIcon)
systray.SetTitle("Awesome App")
systray.SetTooltip("Lantern")
mDump := systray.AddMenuItem("Debug Window", "Debug Window")
/*
mQuitOrig := systray.AddMenuItem("Quit", "Quit the whole app")
go func() {
<-mQuitOrig.ClickedCh
fmt.Println("Requesting quit")
systray.Quit()
fmt.Println("Finished quitting")
}()
*/
var c = 0
// We can manipulate the systray in other goroutines
go func() {
systray.SetIcon(myIcon)
systray.SetTitle("Awesome App")
systray.SetTooltip("Pretty awesome棒棒嗒")
mShow = systray.AddMenuItem("Show 640x480", "Show 480")
mHide = systray.AddMenuItem("Hide Window", "Hide Window")
mChange := systray.AddMenuItem("Change Me", "Change Me")
mChecked = systray.AddMenuItem("Unchecked", "Check Me")
mEnabled := systray.AddMenuItem("Enabled", "Enabled")
mUrl := systray.AddMenuItem("Open Lantern.org", "my home")
// mQuit := systray.AddMenuItem("退出", "Quit the whole app")
mQuit := systray.AddMenuItem("Quit", "Quit the whole app")
// Sets the icon of a menu item. Only available on Mac.
mQuit.SetIcon(myIcon)
systray.AddSeparator()
mToggle := systray.AddMenuItem("Toggle", "Toggle the Quit button")
shown := true
// var blah struct{int}
// blah := make(chan struct{})
for {
select {
case <-mChange.ClickedCh:
log.Println("START")
log.Println("END")
mChange.SetTitle("I've Changed")
case <-mChecked.ClickedCh:
log.Println("CHECKED START")
if mChecked.Checked() {
mChecked.Uncheck()
mChecked.SetTitle("Unchecked")
log.Println("UNCHECKED")
} else {
mChecked.Check()
mChecked.SetTitle("Checked")
log.Println("CHECKED")
}
spew.Dump(mChecked.ClickedCh)
log.Println("CHECKED END")
case <-mDump.ClickedCh:
log.Println("START")
gui.Config.Width = 800
gui.Config.Height = 300
gui.Queue(gui.DebugWindow)
log.Println("END")
case <-mShow.ClickedCh:
log.Println("START Show()")
gui.Config.Width = 640 + c*20
c = c + 1
gui.Config.Height = 480
gui.Queue(gui.DebugWindow)
log.Println("END")
case <-mHide.ClickedCh:
log.Println("START Hide()")
/*
window := gui.Data.WindowMap["splash"]
if window != nil {
box := window.BoxMap["splash"]
box.Window.UiTab.Hide()
}
*/
log.Println("END")
case <-mEnabled.ClickedCh:
log.Println("START")
mEnabled.SetTitle("Disabled")
mEnabled.Disable()
log.Println("END")
case <-mUrl.ClickedCh:
log.Println("START")
// open.Run("https://www.getlantern.org")
log.Println("END")
case <-mToggle.ClickedCh:
log.Println("START")
if shown {
// mQuitOrig.Hide()
mEnabled.Hide()
shown = false
} else {
// mQuitOrig.Show()
mEnabled.Show()
shown = true
}
log.Println("END")
// os.Exit(0)
case <-mQuit.ClickedCh:
log.Println("START")
log.Println("Systray Quit now...")
systray.Quit()
log.Println("END")
log.Println("os.Exit() now...")
os.Exit(0)
return
}
}
}()
}

12
tioc_bsd.go Normal file
View File

@ -0,0 +1,12 @@
// +build darwin freebsd dragonfly openbsd netbsd
// https://github.com/creack/termios/blob/master/raw/tioc_bsd.go
package raw
import "syscall"
const (
getTermios = syscall.TIOCGETA
setTermios = syscall.TIOCSETA
)

90
watch.go Normal file
View File

@ -0,0 +1,90 @@
// a custom build target for go
//go:generate go get -v github.com/tv42/becky
//go:generate go install github.com/tv42/becky
//go:generate becky README.md
package main
import (
"log"
"runtime/debug"
"time"
// "git.wit.org/wit/gui"
)
type myChan struct {
Width int
Height int
}
// This goroutine will
func watchWindows() {
var i = 1
for {
log.Println("wait for GUI exit()", i)
i += 1
time.Sleep(loopsleep * time.Second / 10)
// dotest()
if closed {
log.Println("Window was closed")
/*
if dnsSlider == nil {
log.Println("SKIPPING: dnsSlider == nil")
} else {
dnsSlider.SetValue(55)
}
*/
// gui.CreateWindow("ARGV", "vars", 300, 200, makeWindowARGV)
debug.PrintStack()
dumpModuleInfo()
/*
gui.DumpBoxes()
window := gui.Data.WindowMap["Debugging2"]
if window != nil {
log.Println("found debugging2 Window")
gui.DeleteWindow("Debugging2")
} else {
closed = false
}
*/
// toggle the systray menu
var tmp struct{}
log.Println("is mChecked uninitialized:", mChecked == nil)
if mChecked != nil {
log.Println("is mChecked.ClickedCh uninitialized:", mChecked.ClickedCh == nil)
if mChecked.ClickedCh != nil {
mChecked.ClickedCh <- tmp // signal the main goroutine
}
}
}
}
}
func dumpModuleInfo() {
tmp, _ := debug.ReadBuildInfo()
if tmp == nil {
log.Println("This wasn't compiled with go module support")
return
}
log.Println("mod.Path = ", tmp.Path)
log.Println("mod.Main.Path = ", tmp.Main.Path)
log.Println("mod.Main.Version = ", tmp.Main.Version)
log.Println("mod.Main.Sum = ", tmp.Main.Sum)
for _, value := range tmp.Deps {
log.Println("\tmod.Path = ", value.Path)
log.Println("\tmod.Version = ", value.Version)
}
}
func dumbLoop() {
var i = 1
for {
log.Println("dumb GUI loop ", i)
i += 1
time.Sleep(2 * time.Second)
}
}

88
window-debug-golang.go Normal file
View File

@ -0,0 +1,88 @@
package main
import (
// "bufio"
"log"
"os"
"runtime"
"runtime/debug"
"runtime/pprof"
)
import "git.wit.org/wit/gui"
func golangDebug(w *gui.Node) {
if (w == nil) {
gui.Config.Title = "golangDebug Window"
gui.Config.Width = 100
gui.Config.Height = 100
gui.Config.Exit = customExit
w = gui.NewWindow()
}
tab := w.AddTab("golangDebug()", nil)
/////////////////////////////// Column DEBUG GOLANG //////////////////////
gNode := tab.AddGroup("golang")
gNode.AddButton("runtime.Stack() dump", func (*gui.Node) {
log.Println("\tSTART")
buf := make([]byte, 1<<16)
runtime.Stack(buf, true)
log.Printf("%s", buf)
log.Println("\tEND")
})
gNode.AddButton("dumpModuleInfo", func (*gui.Node) {
log.Println("\tSTART")
dumpModuleInfo()
log.Println("\tEND")
})
gNode.AddButton("debug.PrintStack", func (*gui.Node) {
log.Println("\tSTART")
debug.PrintStack()
log.Println("\tEND")
})
gNode.AddButton("pprof.Lookup goroutine", func (*gui.Node) {
log.Println("\tSTART")
pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
log.Println("\tEND")
})
gNode.AddButton("pprof.Lookup", func (*gui.Node) {
log.Println("\tSTART")
pprof.Lookup("heap").WriteTo(os.Stdout, 1)
log.Println("\tEND")
})
gNode.AddButton("pprof.Lookup block", func (*gui.Node) {
log.Println("\tSTART")
pprof.Lookup("block").WriteTo(os.Stdout, 1)
log.Println("\tEND")
})
gNode.AddButton("pprof.Lookup threadcreate", func (*gui.Node) {
log.Println("\tSTART")
pprof.Lookup("threadcreate").WriteTo(os.Stdout, 1)
log.Println("\tEND")
})
gNode.AddButton("runtime.ReadMemStats", func (*gui.Node) {
var s runtime.MemStats
runtime.ReadMemStats(&s)
log.Printf("alloc: %v bytes\n", s.Alloc)
log.Printf("total-alloc: %v bytes\n", s.TotalAlloc)
log.Printf("sys: %v bytes\n", s.Sys)
log.Printf("lookups: %v\n", s.Lookups)
log.Printf("mallocs: %v\n", s.Mallocs)
log.Printf("frees: %v\n", s.Frees)
log.Printf("heap-alloc: %v bytes\n", s.HeapAlloc)
log.Printf("heap-sys: %v bytes\n", s.HeapSys)
log.Printf("heap-idle: %v bytes\n", s.HeapIdle)
log.Printf("heap-in-use: %v bytes\n", s.HeapInuse)
log.Printf("heap-released: %v bytes\n", s.HeapReleased)
log.Printf("heap-objects: %v\n", s.HeapObjects)
log.Printf("stack-in-use: %v bytes\n", s.StackInuse)
log.Printf("stack-sys: %v bytes\n", s.StackSys)
log.Printf("next-gc: when heap-alloc >= %v bytes\n", s.NextGC)
log.Printf("last-gc: %v ns\n", s.LastGC)
log.Printf("gc-pause: %v ns\n", s.PauseTotalNs)
log.Printf("num-gc: %v\n", s.NumGC)
log.Printf("enable-gc: %v\n", s.EnableGC)
log.Printf("debug-gc: %v\n", s.DebugGC)
})
}

100
window-debug.go Normal file
View File

@ -0,0 +1,100 @@
package main
import (
"log"
// "bufio"
// "os"
"runtime"
// "runtime/debug"
// "runtime/pprof"
// "time"
"git.wit.org/wit/gui"
// "git.wit.org/wit/shell"
// "github.com/andlabs/ui"
// _ "github.com/andlabs/ui/winmanifest"
)
// var jcarrtest *gui.GuiBox
// var jcarrnode *gui.Node
// TODO: convert this so it works in a tab
func showSplashTab(n *gui.Node) *gui.Node {
log.Println("ShowSplashBox() START")
// box.Window.UiWindow.SetTitle("Debugging2")
ny1 := n.AddHorizontalBox("tile1")
ny1.NewLabel("bar")
ny1.NewLabel("OS: "+runtime.GOOS)
ny1.NewLabel("Version: "+VERSION)
ny1.NewLabel("git commit: "+GITCOMMIT)
ny1.NewLabel("GO Version: "+GOVERSION)
ny1.AddButton("Delete tab 0", func(*gui.Node) {
// n.UiTab.Delete(0)
})
// log.Println("ShowSplashBox() END box =", box)
return ny1
}
func runTestExecClick(n *gui.Node) {
log.Println("runTestExecClick START")
if runtime.GOOS == "linux" {
var tmp []string
tmp = append(tmp, "nohup", "xterm")
go runCommand(tmp)
// go runSimpleCommand("xterm -report-fonts")
} else if runtime.GOOS == "windows" {
go runSimpleCommand("mintty.exe")
} else {
var tmp []string
tmp = append(tmp, "nohup", "xterm")
go runCommand(tmp)
}
log.Println("runTestExecClick END")
}
func populateDebugTab(n *gui.Node) {
log.Println("debugClick() START")
/////////////////////////////// Column BLAH ///////////////////////////////
gNode := n.AddGroup("blah")
gNode.AddButton("bash", runTestExecClick)
gNode.AddButton("ping", func (*gui.Node) {
hostname := "localhost"
xterm("ping " + hostname)
})
gNode.AddButton("systrayMain", func (*gui.Node) {
go systrayMain()
})
/////////////////////////////// Column DEBUG GUI /////////////////////////
gNode.AddButton("closed = true", func (*gui.Node) {
closed = true
})
gNode.AddButton("closed = false", func (*gui.Node) {
closed = false
})
gNode.AddButton("loopsleep = 2", func (*gui.Node) {
loopsleep = 2
})
gNode.AddButton("toggle systray menu", func (*gui.Node) {
var tmp struct{}
// log.Println("is tmp uninitialized:", tmp == nil)
log.Println("is mChecked uninitialized:", mChecked == nil)
if mChecked != nil {
log.Println("is mChecked.ClickedCh uninitialized:", mChecked.ClickedCh == nil)
if mChecked.ClickedCh != nil {
mChecked.ClickedCh <- tmp // signal the main goroutine
}
}
})
// FIXME: need correct args
// gNode.CreateColorButton("COLOR73", "COLOR73", nil)
}

37
window-dns-update.go Normal file
View File

@ -0,0 +1,37 @@
package main
// import "os"
// import "log"
// import "strconv"
// import "io/ioutil"
// import "bufio"
import "git.wit.org/wit/gui"
func updateDNS(w *gui.Node) {
if (w == nil) {
gui.Config.Title = "dns update Window"
gui.Config.Width = 110
gui.Config.Height = 110
gui.Config.Exit = customExit
w = gui.NewWindow()
}
tab := w.AddTab("updateDNS()", nil)
// populateNEW(tab, "new")
////////////// filename /////////////////////////
gNode := tab.AddGroup("eth0 update")
// fontsize := "16"
dnsNode := gNode.AddComboBox("8",
"16",
"24")
dnsNode.SetText("12")
////////////// connect /////////////////////////
gNode = tab.AddGroup("Update")
gNode.AddButton("setup .Xresources", func (*gui.Node) {
})
}

48
window-main.go Normal file
View File

@ -0,0 +1,48 @@
package main
import ( "log"
"git.wit.org/wit/gui"
)
func mainWindow(w *gui.Node) *gui.Node {
if (w == nil) {
gui.Config.Title = "Main Personal GUI Window"
gui.Config.Width = 101
gui.Config.Height = 101
w = gui.NewWindow()
}
newTab := w.AddTab("MAIN TAB", nil)
////////////////////////// MAIN ////////////////////////////////
g1 := newTab.AddGroup("Windows")
g1.AddButton("resolv.conf", func (*gui.Node) {
log.Println("supposed to make the resolv.conf window")
resolvWindow(nil)
})
g1.AddButton("Generic SSH Window", func (*gui.Node) {
sshGenericWindow(nil)
})
g1.AddButton("update DNS (IPv6)", func (*gui.Node) {
updateDNS(nil)
})
g1.AddButton("tabResets()", func (*gui.Node) {
tabResets(w)
})
g1.AddButton("www url's", func (*gui.Node) {
windowAddWWW(nil)
})
////////////////////////// TABS ////////////////////////////////
g2 := newTab.AddGroup("Tabs")
g2.AddButton("GO language debuggging", func (*gui.Node) {
golangDebug(w)
})
return newTab
}

63
window-resets.go Normal file
View File

@ -0,0 +1,63 @@
package main
import ( "log"
"git.wit.org/wit/gui"
)
func tabResets(w *gui.Node) *gui.Node {
if (w == nil) {
gui.Config.Title = "resets window"
gui.Config.Width = 240
gui.Config.Height = 280
gui.Config.Exit = customExit
w = gui.NewWindow()
}
newTab := w.AddTab("tabResets()", nil)
/////////////////////////////////////////////////////////////////////////////
gNode2 := newTab.AddGroup("reset windows")
gNode2.NewLabel("Working Stuff")
gNode2.AddButton("resolv.conf", func (*gui.Node) {
log.Println("supposed to make the resolv.conf window")
resolvWindow(nil)
})
gNode2.AddButton("Set xterm Font Size", func (*gui.Node) {
// gui.CreateWindow("Set xterm Font Size", "vars", 200, 200, makeWindowXresources)
xtermSettings(w)
})
/////////////////////////////////////////////////////////////////////////////
resetsNode := newTab.AddGroup("apt Resets")
resetsNode.AddButton("apt sources", func (*gui.Node) {
xterm("apt -y install apt-file; apt-file update")
})
resetsNode.AddButton("purge rc-only", func (*gui.Node) {
xterm("dpkg -l |grep ^rc | awk '{print $2}' |xargs apt remove --purge -y")
})
resetsNode.AddButton("install defaults", func (*gui.Node) {
xterm("./resources/bin/setup-packages-default")
})
resetsNode.AddButton("install kvm", func (*gui.Node) {
xterm("./resources/bin/setup-packages-kvm")
})
/////////////////////////////////////////////////////////////////////////////
gn := newTab.AddGroup("GO")
gn.AddButton("go install golang.org/x/tools/gopls@latest", func (*gui.Node) {
xterm("go install golang.org/x/tools/gopls@latest")
})
gn.AddButton("vim-go clone", func (*gui.Node) {
xterm("git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go")
})
gn.AddButton("vim-go vimrc settings", func (*gui.Node) {
log.Println("echo", "let g:go_def_mode='gopls'\nlet g:go_info_mode='gopls'")
// xterm("echo", "let g:go_def_mode='gopls'\nlet g:go_info_mode='gopls'")
})
return newTab
}

57
window-resolv.go Normal file
View File

@ -0,0 +1,57 @@
package main
import "log"
import "os"
import "bufio"
import "git.wit.org/wit/gui"
func resolvWindow(w *gui.Node) {
if (w == nil) {
gui.Config.Title = "resolv.conf Window"
gui.Config.Width = 113
gui.Config.Height = 112
gui.Config.Exit = customExit
w = gui.NewWindow()
}
tab := w.AddTab("resolv.conf Tab", nil)
// populateNEW(tab, "new")
////////////// filename /////////////////////////
gNode := tab.AddGroup("filename")
resolvNode := gNode.AddComboBox("resolv-1-1-1-1.conf",
"resolv-4.2.2.2.conf",
"resolv-8-8-8-8.conf",
"resolv-bind.wit.org.conf",
"resolv-ipv6-only.conf",
"resolv-localhost.conf")
resolvNode.SetText("resolv-1-1-1-1.conf")
resolvNode.OnChanged = func () {
log.Println("STARTED HOSTNAME")
filename := resolvNode.GetText()
log.Println("ENDED GetText() HOSTNAME =", filename)
}
////////////// connect /////////////////////////
gNode = tab.AddGroup("Update")
gNode.AddButton("/etc/resolv.conf", func (*gui.Node) {
filename := "resolv/" + resolvNode.GetText()
log.Println("set resolv.conf to",filename)
b, _ := packrBox.FindString(filename)
log.Println(filename, "=\n\n" + b)
// spew.Dump(b)
f, err := os.Create("/etc/resolv.conf")
if err != nil {
return
}
defer f.Close()
w := bufio.NewWriter(f)
n4, err := w.WriteString(b)
log.Println("n4 =", n4)
w.Flush()
})
}

80
window-ssh-generic.go Normal file
View File

@ -0,0 +1,80 @@
package main
import "log"
import "reflect"
import "git.wit.org/wit/gui"
var userNode *gui.Node
func sshGenericWindow(w *gui.Node) {
if (w == nil) {
gui.Config.Title = "sshWindow"
gui.Config.Width = 101
gui.Config.Height = 131
gui.Config.Exit = customExit
w = gui.NewWindow()
}
tab := w.AddTab("sshWindow()", nil)
// populateNEW(tab, "new")
////////////// username /////////////////////////
gNode := tab.AddGroup("username")
userNode = gNode.AddComboBox("username",
"root",
"jcarr",
"hugo")
userNode.SetText("something")
userNode.OnChanged = func () {
username = userNode.GetText()
log.Println("SETTING: username=", username)
userNode.Dump()
// panic("blah")
}
userNode.Dump()
// panic("blah")
////////////// hostname /////////////////////////
gNode = tab.AddGroup("homename")
hostNode := gNode.AddComboBox("hostname",
"fire.lab.wit.org",
"www.wit.org",
"bind.wit.org",
"ns1.wit.com",
"ns2.wit.com")
hostNode.SetText("fire")
hostNode.OnChanged = func () {
log.Println("STARTED HOSTNAME")
hostname = hostNode.GetText()
log.Println("ENDED GetText() HOSTNAME")
}
////////////// connect /////////////////////////
gNode = tab.AddGroup("connect")
gNode.AddButton("connect", func (*gui.Node) {
cmd := "ssh -v " + username + "@" + hostname
log.Println("xterm cmd=", cmd)
xterm(cmd)
})
}
func makeSSHbutton (n *gui.Node, name string, hostname string) {
bNode := n.AddButton(name, func (*gui.Node) {
var tmp []string
if (username == "") {
username = "root"
}
junk := "ssh -v " + username + "@" + hostname
log.Println("junk = " , junk)
log.Println("username = '" + username + "'")
xterm(junk)
log.Println("tmp = " , reflect.ValueOf(tmp).Kind())
// spew.Dump(tmp)
})
bNode.Dump()
}

50
window-www.go Normal file
View File

@ -0,0 +1,50 @@
package main
import "log"
// import "reflect"
import "git.wit.org/wit/gui"
import "github.com/skratchdot/open-golang/open"
func windowAddWWW(w *gui.Node) {
if (w == nil) {
gui.Config.Title = "webpages"
gui.Config.Width = 102
gui.Config.Height = 102
w = gui.NewWindow()
}
tab := w.AddTab("start www", nil)
////////////// connect /////////////////////////
gNode := tab.AddGroup("www")
urlButton(gNode, "git", "https://git.wit.org/")
urlButton(gNode, "mirrors", "https://mirrors.wit.org/")
urlButton(gNode, "ping.wit.com 6", "http://ping.wit.com/")
urlButton(gNode, "pprof localhost", "http://localhost:6060/debug/pprof/")
}
func firefoxButton (n *gui.Node, name string, url string) {
n.AddButton(name, func (*gui.Node) {
log.Println("button clicked: trying to open url")
// cmd := "--new-window http://192.168.100.1/"
var tmp []string
tmp = append(tmp, "nohup")
tmp = append(tmp, firefox...)
tmp = append(tmp, url)
go runCommand(tmp)
})
// bNode.Dump()
}
func urlButton (n *gui.Node, name string, url string) {
if (useFirefox == true) {
firefoxButton(n, name, url)
} else {
bNode := n.AddButton(name, func (*gui.Node) {
log.Println("button clicked: trying to open url =", url)
open.Run(url)
})
bNode.Dump()
}
}

52
window-xterm-fontsize.go Normal file
View File

@ -0,0 +1,52 @@
package main
import "log"
// import "strconv"
import "io/ioutil"
import "git.wit.org/wit/gui"
func xtermSettings(w *gui.Node) {
if (w == nil) {
gui.Config.Title = "xterm font setting"
gui.Config.Width = 105
gui.Config.Height = 105
gui.Config.Exit = customExit
w = gui.NewWindow()
}
tab := w.AddTab("xtermSettings()", nil)
// populateNEW(tab, "new")
////////////// filename /////////////////////////
gNode := tab.AddGroup("filename")
fontsize := "16"
resolvNode := gNode.AddComboBox("8",
"16",
"24")
resolvNode.SetText("12")
resolvNode.OnChanged = func () {
log.Println("STARTED HOSTNAME")
fontsize = resolvNode.GetText()
log.Println("ENDED GetText() HOSTNAME =", fontsize)
}
////////////// connect /////////////////////////
gNode = tab.AddGroup("Update")
gNode.AddButton("setup .Xresources", func (*gui.Node) {
log.Println("fontsize =", fontsize)
// write out .Xresources file
foo := []byte("xterm*faceName: Monospace\nxterm*faceSize: ")
// bar := []byte(strconv.Itoa(fontsize) + "\n")
bar := []byte(fontsize + "\n")
foo = append(foo, bar...)
ioutil.WriteFile("/home/jcarr/.Xresources", foo, 0644)
cmd := "xrdb -merge ~/.Xresources; cat ~/.Xresources"
xterm(cmd)
log.Println("button click end")
})
}