Compare commits

...

226 Commits

Author SHA1 Message Date
  Tessa L. H. Lovelace a4e8bff1c1
Draft, untested. For finding friendlies on the network. 6 months ago
  Tessa L. H. Lovelace d086031e43
Debugging bits. 6 months ago
  Tessa L. H. Lovelace 9560e79ca7
Merge remote-tracking branch 'gitea/development' into development 6 months ago
  Tessa L. H. Lovelace 917759d89e
Readjust folder structure, sourcing problems? 6 months ago
  Tessa L. H. Lovelace 6587551410
Fixing the ignore pattern for logfiles, add bin filter. 6 months ago
  Tessa L. H. Lovelace aeeee529e1
Check for site source file, warn & exit if not exists. 6 months ago
  Tessa L. H. Lovelace 303a73ee49
Update the git status command, todo additional bits. 6 months ago
  Tessa L. H. Lovelace 806dd6505c
Check for the api key and inform the user. 6 months ago
  Tessa L. H. Lovelace 3dd3221812
Move code outside the docs tree. 6 months ago
  Tessa L. H. Lovelace 5e959f2833 Wrapping all ongoing docs into a snapshot. 6 months ago
  Tessa L. H. Lovelace 383ad608c4 Copypasta commands. 6 months ago
  Tessa L. H. Lovelace 12746cf438 More tweaking of the assumptions list. 6 months ago
  Tessa L. H. Lovelace 6367102baf Todo items and a line ending fix. 6 months ago
  Tessa L. H. Lovelace 2ee35dcd87 Clean up docs a bit, standardize gitignore slightly. 6 months ago
  Tessa L. H. Lovelace f865f12d13 Tweak the disclaimer a bit, define bash v4+ necessary. 6 months ago
  Tessa L. H. Lovelace 06cc65facb A todo from last weekend. 6 months ago
  Tessa L. H. Lovelace 05d18e3a76 Fix unexpected token syntax error. 6 months ago
  Tessa L. H. Lovelace 82a534a1a3 Tweaking the Debian-flavoured management tools. 6 months ago
  Tessa L. H. Lovelace bd7b5d239f Adding export of defaults. 7 months ago
  Tessa L. H. Lovelace 0c747ffdd5 Add an alias for easily showing a host's RSA keys. 7 months ago
  Tessa L. H. Lovelace f2a60b1f3e Fix OSX cruft. 7 months ago
  Tessa L. H. Lovelace c424df141d Multitile attempt, needs reconnect command. 7 months ago
  Tessa L. H. Lovelace 9dc279dc4b
Merge remote-tracking branch 'bf/development' into development 7 months ago
  Tessa L. H. Lovelace 463de5eaa7 Merge remote-tracking branch 'bfl/development' into development 8 months ago
  Tessa L. H. Lovelace 657c419be2
I often forget that .gitignore'd stuff exists when cleaning up... 9 months ago
  Tessa L. H. Lovelace dd7dc42a01
Offloading the remembering to an externally accessible methodology. 9 months ago
  Tessa L. H. Lovelace 00d8924290
The one-liner was cute, but this is easier to debug. 9 months ago
  Tessa L. H. Lovelace 5cc66bbae9
Prototype, undocumented, for static site onlining. 9 months ago
  Tessa L. H. Lovelace 136445aa16 Merge remote-tracking branch 'origin/development' into nas-build 9 months ago
  Tessa L. H. Lovelace 029dfc405c Merge remote-tracking branch 'origin/nas-build' into nas-build 9 months ago
  Tessa L. H. Lovelace ce53032226 Merge remote-tracking branch 'origin/development' into development 9 months ago
  Tessa L. H. Lovelace 869c72b136 In-progress checkin to facilitate rapid refactoring of dev branch. 9 months ago
  Tessa L. H. Lovelace 943af5708c Merge remote-tracking branch 'origin/development' into nas-build 9 months ago
  Tessa L. H. Lovelace b23d919a19 Scaffolding for network spidering. 9 months ago
  Tessa L. H. Lovelace 766f00f13f Entry for kanban.bash autoinstall. 9 months ago
  Tessa L. H. Lovelace 58d388dc1e Laminar doesn't log to /var/log? 9 months ago
  Tessa L. H. Lovelace f047875500 Add nomad keygen&randart, ssh mess. 9 months ago
  Tessa L. H. Lovelace 5c5693d1e2 Prototype/dev from last week. 9 months ago
  Tessa L. H. Lovelace 2a42012678 Merge branch 'development' into nas-build 9 months ago
  Tessa L. H. Lovelace 0b5e7dec69 Refactor naming script 9 months ago
  Tessa L. H. Lovelace 1d8c4e33a2 Merge remote-tracking branch 'kb/development' into nas-build 9 months ago
  Tessa L. H. Lovelace f7420de3d9 Adding a much-needed bit of communication paradigm: the emote. 9 months ago
  Tessa L. H. Lovelace 1641456acc Merge remote-tracking branch 'bf/development' into development 9 months ago
  Tessa L. H. Lovelace 46c35450ee Merging main into badfruit userdir. 9 months ago
  Tessa L. H. Lovelace 839fbe287f Checking in contents of corkboard. 9 months ago
  Tessa L. H. Lovelace 0c64fbf179
Merge branch 'development' of gitea@badfruit 10 months ago
  Tessa L. H. Lovelace 43f6a5576f
Raw copy of chroot bootstrap from grufwub, thanks! 10 months ago
  Tessa L. H. Lovelace 1fa6349f03 Merge remote-tracking branch 'badfruit/development' into nas-build 10 months ago
  Tessa L. H. Lovelace adcd9a9007 I accidentally a word. 10 months ago
  Tessa L. H. Lovelace cf58f34f63 How to disown: a tldr 10 months ago
  Tessa L. H. Lovelace 5441cca4cb Getting these organized will be nice... 10 months ago
  Tessa L. H. Lovelace 32dfbdc7b7 Merge remote-tracking branch 'ff/development' into development on nomad. 10 months ago
  Tessa L. H. Lovelace 2393a22e23 Thankfully, git is semi-inherently decentralized. 10 months ago
  Tessa L. H. Lovelace 28299570d1 Fix a buggered if/else and the repoSource line. 11 months ago
  Tessa L. H. Lovelace 2f0f1a0d6c Quick todo list. 11 months ago
  Tessa L. H. Lovelace c20c08c4b7
Merging remote and local development branches. 11 months ago
  Tessa L. H. Lovelace 7f6af63c10
Checking in partial refactor of core code. 11 months ago
  Tessa L. H. Lovelace bd8a349d79 More reference links. 11 months ago
  Tessa L. H. Lovelace 6fa7fdb472 Fix nano command, again. 11 months ago
  Tessa L. H. Lovelace e73f779b41 Move alias from bashrc. 11 months ago
  Tessa L. H. Lovelace da6ca14a91 Merge remote-tracking branch 'ff/development' into development 11 months ago
  Tessa L. H. Lovelace e5aedbab43 Merge remote-tracking branch 'fruit/development' into development 11 months ago
  Tessa L. H. Lovelace be6567e6c3 Merge remote-tracking branch 'local/nas-build' into development 11 months ago
  Tessa L. H. Lovelace 5a09109f66
Words rather than numbers. 11 months ago
  Tessa L. H. Lovelace 5ebc7da0f3
Readjust command order a bit. 11 months ago
  Tessa L. H. Lovelace 8a72c6f670 Definitions scaffolding. 11 months ago
  Tessa L. H. Lovelace b892fa8f69
Some core committments and fixing hardcodeds. 11 months ago
  Tessa L. H. Lovelace eb3c6a57b6 Adding laminar tool shortcut. 11 months ago
  Tessa L. H. Lovelace 48bc68f920 Return `fsh` command to default location. 11 months ago
  Tessa L. H. Lovelace 00c9b3d07d Tweaks and local sourcing, slightly refactor --force option. 11 months ago
  Tessa L. H. Lovelace 6ec9e54c4a Establishing the concept of flags, more info display. 11 months ago
  Tessa L. H. Lovelace c4cdf9a934 Starting happy path install script. 11 months ago
  Tessa L. H. Lovelace 32fb1646b7 Checking in incremental daily work from last weeks. 11 months ago
  Tessa L. H. Lovelace 1a04cee945
Merging from the build server (live). 11 months ago
  Tessa L. H. Lovelace d845d1e710
Network tool prerequisites and rabbit holes. 11 months ago
  Tessa L. H. Lovelace 7f7fb2c6c6 Merge remote-tracking branch 'fruit/development' into development 11 months ago
  Tessa L. H. Lovelace 9e9862b1d0 Attempted ARMv8 flag on first boot. 11 months ago
  Tessa L. H. Lovelace 491a6ccd99 Yesterday's work. Unedited. 11 months ago
  Tessa L. H. Lovelace d96fd9aa4c Adding a dependency and documenting some commands. 11 months ago
  Tessa L. H. Lovelace ae0739cfc0 Shim for getting files locally or remotely. 11 months ago
  Tessa L. H. Lovelace b33867292b Logging size of card and file transfer time. 11 months ago
  Tessa L. H. Lovelace 41aa551ef2 Better than half of this has been, on some level, about version control's potential. 11 months ago
  Tessa L. H. Lovelace d9c871b2bd Shim for writing a bit on the twm alias. 11 months ago
  Tessa L. H. Lovelace 915d3d896a Beware `dd`, destroyer of disks forewarned 'cross the terminal echos... 11 months ago
  Tessa L. H. Lovelace c5090d7ff5 Sketching out the edges of some larger programming concepts. 11 months ago
  Tessa L. H. Lovelace c47a17c08f We like this word oriantation more better. 1 year ago
  Tessa L. H. Lovelace e265253f82 Getting into the lightly hairy bits of hardware identification and use. 1 year ago
  Tessa L. H. Lovelace d4be3e802b Fixing link, we think. 1 year ago
  Tessa L. H. Lovelace 9db609c78d Moving a todo to the newly-created general @todo list. 1 year ago
  Tessa L. H. Lovelace b314aa1b35 Stub for the p3p spec. 1 year ago
  Tessa L. H. Lovelace 3e5c7a14cd A brief draft on the build system. 1 year ago
  Tessa L. H. Lovelace 55da392770 How to find your disks with both hands, a rambler's guide. 1 year ago
  Tessa L. H. Lovelace 469d5b2a58 Meta for locating, a shim for building. 1 year ago
  Tessa L. H. Lovelace 3a9c265655 Using a variable for the (shared) date format. 1 year ago
  Tessa L. H. Lovelace 51297e50fc Adjusting chronoStamp alias for filename useage. 1 year ago
  Tessa L. H. Lovelace 2229806d3d Merge remote-tracking branch 'origin/development' into development 1 year ago
  Tessa L. H. Lovelace 99e1f7b418 Nomenclature fix. 1 year ago
  Tessa L. H. Lovelace 08cc3c3214 Merge remote-tracking branch 'downstream/development' into development 1 year ago
  Tessa L. H. Lovelace daf296c4bd Getting rid of a vowel shaves a bit of finger time. 1 year ago
  Tessa L. H. Lovelace 59d2f6f94d Thought work on structuring function definitions. 1 year ago
  Tessa L. H. Lovelace b448bee069 Moving around needs to get easier. 1 year ago
  Tessa L. H. Lovelace 4b369490b9 A bit of specification for function structure. 1 year ago
  Tessa L. H. Lovelace f45a14f401
Notes for tomorrow 1 year ago
  Tessa L. H. Lovelace f3de770487 A bit of tidying. 1 year ago
  Tessa L. H. Lovelace d75c7c20ab
A short rant on cognitive load and the git vcs 1 year ago
  Tessa L. H. Lovelace 23dcde1be3
Bits about hardware. 1 year ago
  Tessa L. H. Lovelace 29db4155e5
Maybe someday I'll standardize these. Maybe. 1 year ago
  Tessa L. H. Lovelace 8e8c849778
Defining folder structure. 1 year ago
  Tessa L. H. Lovelace 00f2d7c69c Explain the command & update service to reflect. 1 year ago
  Tessa L. H. Lovelace 6ce37778bb A short bit on why/how to serve your own bridge. 1 year ago
  Tessa L. H. Lovelace 8c245f5b26 First draft of bridging doc & spec. 1 year ago
  Tessa L. H. Lovelace 8cfb80dadb Adding the draft bridge service file from edgepi. 1 year ago
  Tessa L. H. Lovelace 9d055a9b87 Whitespace formatting. 1 year ago
  Tessa L. H. Lovelace 76321a9161 Install a single dependency at a time. 1 year ago
  Tessa L. H. Lovelace 2b65fc91b7 Dirty matching for the user who lacks sudo perms. 1 year ago
  Tessa L. H. Lovelace 2b8ba54937 Feedback for the user, fix variable usage. 1 year ago
  Tessa L. H. Lovelace 05beb78f59 Adding an autoinstall step? 1 year ago
  Tessa L. H. Lovelace 024fbd8cc9 Adding a couple of links for later. 1 year ago
  Tessa L. H. Lovelace d7c0bd284e Fixing quotation. 1 year ago
  Tessa L. H. Lovelace 3a83dd209a Fixing execute permissions. 1 year ago
  Tessa L. H. Lovelace 6484d0223b Adding a way for remote systems to phone home. 1 year ago
  Tessa L. H. Lovelace b4307653e2 Adding a way for remote systems to phone home. 1 year ago
  Tessa L. H. Lovelace 62e4f86463 Add reverse SSH tunnel link. 1 year ago
  Tessa L. H. Lovelace 226f0e0c21 A todo and a wording. 1 year ago
  Tessa L. H. Lovelace a157f4cbdd Installation from remote repo scripted. 1 year ago
  Tessa L. H. Lovelace 3761283c77 Refactoring user input and install check formatting. 1 year ago
  Tessa L. H. Lovelace 4587c53aa6 Adjusting for mac, *again*. 1 year ago
  Tessa L. H. Lovelace 542a6da7f4 Updating public repo location, woo! 1 year ago
  Tessa L. H. Lovelace ca5016cb3f Nano uses swapfiles? Huh. 1 year ago
  Tessa L. H. Lovelace bb2fda9499
whoops, merging. 1 year ago
  Tessa L. H. Lovelace bfffb2d69e
Sunday Funday. 1 year ago
  Tessa L. H. Lovelace aa7d7c3301 Finally getting the installer unborked. 1 year ago
  Tessa L. H. Lovelace 7df9186b31 Rough merge of command aliases from nomad/badfruit/fruit 1 year ago
  Tessa L. H. Lovelace 08159f3241 edit: a formattening 1 year ago
  Tessa L. H. Lovelace 00e0e5b9af
braindump, barely formatted 1 year ago
  Tessa L. H. Lovelace cb541d8de9
draft use case 1 year ago
  Tessa L. H. Lovelace 0e9ce161c5 Update 'com/user/aliases.source.tomerge' 1 year ago
  Tessa L. H. Lovelace b6c0198116 Rough first attempt at an autoconnector. 1 year ago
  Tessa L. H. Lovelace 1e478d03f8 Adding dvtm/dtach alias for ease of startup. 1 year ago
  Tessa L. H. Lovelace 5c5cedc026 Adding todo question. 1 year ago
  Tessa L. H. Lovelace 59d8486b5a Cleaning up a bit, more QoL stuffs. 1 year ago
  Tessa L. H. Lovelace b1bc1b147f Simple tools are the best, keenly honed. 1 year ago
  Tessa L. H. Lovelace 4e3238463c Comparing approaches, for science! 1 year ago
  Tessa L. H. Lovelace 4bc404f0bb Doing the needful, because the law says so. 1 year ago
  Tessa L. H. Lovelace 056dafe4a0 Diff before/after values for the user. 1 year ago
  Tessa L. H. Lovelace ccb9698de0 Rouch stab at manipulating the environment PATH. 1 year ago
  Tessa L. H. Lovelace 230a07ac2e Just a QoL and inheritence fix. 1 year ago
  Tessa L. H. Lovelace 1ee76d68cc Partial netspider draft, also pruning dead bits. 1 year ago
  Tessa L. H. Lovelace 57a19f7a5d Adjusting structure and nomenclature. 1 year ago
  Tessa L. H. Lovelace 2fb39291ff Merge branch 'development' of repo.jakimfett.com:jakimfett/functions.sh into development 1 year ago
  Tessa L. H. Lovelace 8a67cc7a4c Merge branch 'development' of ssh://github.com/jakimfett/functions.sh into development 1 year ago
  Tessa L. H. Lovelace e5ad6f2444 Debian alias and a gitignore fix. 1 year ago
  Tessa L. H. Lovelace 98c46b28d2
Merge from tablet. 1 year ago
  Tessa L. H. Lovelace beda948925
Fix merge conflict. 1 year ago
  Tessa L. H. Lovelace 004381125c Fix pathing for dict file 1 year ago
  Tessa L. H. Lovelace 8cdc92c34b Add current directory to the path, via alias. 1 year ago
  Tessa L. H. Lovelace ae44262239 Sorting the core functionality. 1 year ago
  Tessa L. H. Lovelace 70bf7f8d8e state variable for sudo, add a dependency 1 year ago
  Tessa L. H. Lovelace 451dc164be Structuring the heirarchy a bit. 1 year ago
  Tessa L. H. Lovelace a56f35f42b A much needed source of programmatic nomenclature. 1 year ago
  Tessa L. H. Lovelace 74d8e5ea4c
Hah. Phrasing. 1 year ago
  Tessa L. H. Lovelace 476d5b0171
Fixing check for remote git repo. 1 year ago
  Tessa L. H. Lovelace 6d04a57646
Several partial refactors, stashed. 1 year ago
  Tessa L. H. Lovelace 3d16aa7166
Add precision to the file search method. 1 year ago
  Tessa L. H. Lovelace 35f469cdae
Associative array juggling. 1 year ago
  Tessa L. H. Lovelace abff9738b9
Accept long or short params, in any order. 1 year ago
  Tessa L. H. Lovelace a3721eba24
Array upgrade, conciseness tweaks. 1 year ago
  Tessa L. H. Lovelace 38b2bed4ab
stashing some partials 1 year ago
  Tessa L. H. Lovelace 9038f62d96 Fix short param iteration and passing. 1 year ago
  Tessa L. H. Lovelace a1a4747637 Pruning outdated sanity check. 1 year ago
  Tessa L. H. Lovelace 517e3bfcff
dangers of the system, etc 1 year ago
  Tessa L. H. Lovelace 7d7ab56b33
some backstory 1 year ago
  Tessa L. H. Lovelace 1ee44e6db6
in the beginning, there was a hacker 1 year ago
  Tessa L. H. Lovelace 3374b7a81b
rough idea, tbd 1 year ago
  Tessa L. H. Lovelace db2a466ed4
add config file ignore 1 year ago
  Tessa L. H. Lovelace d508fec194 adjust user profiles location 1 year ago
  Tessa L. H. Lovelace cd46bd96ff
Adding link notating future submodule to add. 1 year ago
  Tessa L. H. Lovelace e78ce83f56
Notating public accessability of the root node. 1 year ago
  Tessa L. H. Lovelace 59654f789a
Log naming; starting the merge from backlog. 1 year ago
  Tessa L. H. Lovelace 4f24d21eac
Fix default permission set. 1 year ago
  Tessa L. H. Lovelace 597396c83a
short param def 1 year ago
  Tessa L. H. Lovelace 3666f24680
recycle the old html-compiled basepage into the corkboard readme. 1 year ago
  Tessa L. H. Lovelace a53718dd23
Add exclusions list for autocommit. 1 year ago
  Tessa L. H. Lovelace c7e1d99995
Refactor get and verify process a bit, still doesn't work quite right. 1 year ago
  Tessa L. H. Lovelace de24bc09c7
Merging changes from remote. 1 year ago
  Tessa L. H. Lovelace a35883ee5f
Adding shasum (512) for testing. 1 year ago
  Tessa L. H. Lovelace bf0ffe46de
adding partial hash/sum/verify/install snip 1 year ago
  Tessa L. H. Lovelace 37e981fb8c
prune prototype command parameter bits 1 year ago
  Tessa L. H. Lovelace 774b855a99
Check command parameters against whitelist. 1 year ago
  Tessa L. H. Lovelace fd91f2953a
fixing \$\PATH variable prepend 1 year ago
  Tessa L. H. Lovelace bf2a7c18cc Committing alias adjustments from last session. 1 year ago
  Tessa L. H. Lovelace 3afc3828fe Add meta for system management tool(s). 1 year ago
  Tessa L. H. Lovelace 3c461f66c8
Rough draft of fsh dev aliases 2 years ago
  Tessa L. H. Lovelace 12f8f22395
Creating docs subdir for wiki demo. 2 years ago
  Tessa L. H. Lovelace cee945eff3 Merge changes from ishard. 2 years ago
  Tessa L. H. Lovelace 9f8fb55449 Merge branch 'development' of github.com:jakimfett/functions.sh into development 2 years ago
  Tessa L. H. Lovelace 9fc02545b3 Adding readme info, starting the refactored prototype of the user input module. 2 years ago
  Tessa L. H. Lovelace 7c22bea878
Adding straggler changes from last session. 2 years ago
  Tessa L. H. Lovelace 5b9085ab77 Add sanity checking and move config commands. 2 years ago
  Tessa L. H. Lovelace f483a41df3 Merge branch 'development' of github.com:jakimfett/functions.sh into development 2 years ago
  Tessa L. H. Lovelace aadcd9c929 Add file header from template and adjust filename nomenclature. 2 years ago
  Tessa L. H. Lovelace fa742a5db4 Add gpgsign ref to installer. 2 years ago
  Tessa L. H. Lovelace 3e7642b64a Site publishing tweaks, add hashes of file. 2 years ago
  Tessa L. H. Lovelace beb3becef6 Fix file operations order. 2 years ago
  Tessa L. H. Lovelace 2df01e2047 Move online stuffs to microsite dir, add commands to install. 2 years ago
  Tessa L. H. Lovelace 744915a6e2 First rough publishing script. 2 years ago
  Tessa L. H. Lovelace 3676d511d1 Merge work from profiles update/fix/tweak branch. 2 years ago
  Tessa L. H. Lovelace f35ec4aa5f Adding a typical 'nix binary/executable location. 2 years ago
  Tessa L. H. Lovelace 4bc9b1fd82 Pull standard cmake/make usage into a file. 2 years ago
  Tessa L. H. Lovelace 0300d4c440 Fix copypasta error. 2 years ago
  Tessa L. H. Lovelace bd24b2bab7 Add md5, size, and path to index file. Crufty, needs work. 2 years ago
  Tessa L. H. Lovelace 9339fca953 Fix nomenclature of temporary files folder. 2 years ago
  Tessa L. H. Lovelace 67652c3e94 Merge branch 'development' of ssh://git.rheos.one/home/jakimfett/functions.sh into development 2 years ago
  Tessa L. H. Lovelace a0ba4584b7 Merge branch 'master' of ssh://git.rheos.one/home/jakimfett/functions.sh into development 2 years ago
  Tessa L. H. Lovelace 1cc18c0136 Adding a template file. 2 years ago
  Tessa L. H. Lovelace 944fae64f3 Checking in project work from yesterday. 2 years ago
  Tessa L. H. Lovelace 0b67d867a8 Refactoring the indexer to use `functions.sh` for logging. 2 years ago
  Tessa L. H. Lovelace 7b4b307440 Add todo item. 2 years ago
  Tessa L. H. Lovelace c606585277 Checking in the psuedocode from yesterday. 2 years ago
  Tessa L. H. Lovelace f53be2ae6e More variable fixes. 2 years ago
  Tessa L. H. Lovelace a9040ff162 Remove md5 ref code, fix filename echo. 2 years ago
  Tessa L. H. Lovelace 7a0b1c48ff Add a functioning `.gitignore`. 2 years ago
  Tessa L. H. Lovelace 3056da687e Add precondition checking and dynamic folder path abstration. 2 years ago
  Tessa L. H. Lovelace 671c8b6c23 Pruning the aliases file 2 years ago
  Tessa L. H. Lovelace d4595221d8 Adding the autogenerated bashrc file from Debian 9.x 2 years ago
  Tessa L. H. Lovelace ddd0daaf7b Fixing the logging function, set up index creation. 2 years ago
95 changed files with 77343 additions and 108 deletions
Split View
  1. +22
    -0
      .gitignore
  2. +0
    -0
      .gitmodules
  3. +1
    -0
      archive/.gitignore
  4. +17
    -0
      archive/connections.log
  5. +1
    -0
      bin/.gitignore
  6. +1
    -0
      cache/.gitignore
  7. +122
    -0
      com/chroot.sh
  8. +23
    -0
      com/copytu.sh
  9. +438
    -0
      com/core.sh
  10. +1
    -0
      com/core.sha.512.sum
  11. +73241
    -0
      com/dict/names.list
  12. +55
    -0
      com/dict/thumb.sh
  13. +1
    -0
      com/docs/.gitignore
  14. +31
    -0
      com/docs/publish.sh
  15. +102
    -0
      com/docs/readme.md
  16. +17
    -0
      com/env/pathadd.sh
  17. +9
    -0
      com/getFile.sh
  18. +28
    -0
      com/getbash.sh
  19. +121
    -0
      com/index.sh
  20. +15
    -0
      com/invert.sh
  21. +29
    -0
      com/locate.sh
  22. +150
    -0
      com/log.sh
  23. +25
    -0
      com/make.sh
  24. +94
    -0
      com/namer.sh
  25. +0
    -0
      com/net/.gitignore
  26. +15
    -0
      com/net/bridge.service
  27. +23
    -0
      com/net/bridge.sh
  28. +1
    -0
      com/net/conf/.gitignore
  29. +0
    -0
      com/net/conf/example.site
  30. +19
    -0
      com/net/dns.sh
  31. +32
    -0
      com/net/moshto.sh
  32. +158
    -0
      com/net/pinglog.sh
  33. +8
    -0
      com/net/probe.sh
  34. +46
    -0
      com/net/spider.sh
  35. +113
    -0
      com/net/vultr.sh
  36. +35
    -0
      com/profile.sh
  37. +5
    -0
      com/readme.md
  38. +26
    -0
      com/shrug.sh
  39. +33
    -0
      com/sys_diff.sh
  40. +26
    -0
      com/template.sh
  41. +94
    -0
      com/usr/aliases.src
  42. +9
    -0
      com/usr/profile.src
  43. +9
    -0
      com/when.sh
  44. +13
    -0
      doc/.gitignore
  45. +1
    -0
      doc/app/.gitignore
  46. +65
    -0
      doc/app/gitea.md
  47. +30
    -0
      doc/app/gitea.sh
  48. +11
    -0
      doc/app/krita.md
  49. +18
    -0
      doc/app/laminar.md
  50. +635
    -0
      doc/app/miNAS.md
  51. +15
    -0
      doc/app/miNAS.sh
  52. +10
    -0
      doc/app/minetest.md
  53. +13
    -0
      doc/app/nginx.md
  54. BIN
      doc/app/raspbian.png
  55. +19
    -0
      doc/app/seafile.md
  56. +83
    -0
      doc/bridging.md
  57. +18
    -0
      doc/contributing.md
  58. +20
    -0
      doc/git_inconsistencies.md
  59. +15
    -0
      doc/hardware/mikrotik.todo
  60. +28
    -0
      doc/readme.md
  61. +20
    -0
      doc/serving.md
  62. +1
    -0
      doc/stacks/.gitignore
  63. +34
    -0
      doc/stacks/build.md
  64. +7
    -0
      doc/stacks/build.sh
  65. +5
    -0
      doc/stacks/disowning.md
  66. +22
    -0
      doc/stacks/git.md
  67. BIN
      doc/stacks/git_status_2019.11.20_13.23.39.png
  68. +106
    -0
      doc/stacks/microtik.md
  69. +51
    -0
      doc/stacks/mikrotik.default
  70. +66
    -0
      doc/stacks/mikrotik.dstnat
  71. +54
    -0
      doc/stacks/mikrotik.sh
  72. +17
    -0
      doc/stacks/tiers.md
  73. +5
    -0
      doc/stacks/twm.md
  74. +78
    -0
      doc/stacks/workflow.md
  75. +14
    -0
      doc/troubleshooting.md
  76. +285
    -7
      f.sh
  77. +119
    -0
      install.sh
  78. +1
    -0
      log/.gitignore
  79. +0
    -31
      profile.d/aliases.source
  80. +21
    -5
      readme.md
  81. +1
    -0
      submodules/.gitignore
  82. +1
    -0
      submodules/links.md
  83. +2
    -0
      todo/.gitignore
  84. +56
    -0
      todo/checksum.snip
  85. +7
    -0
      todo/cork.board
  86. +5
    -0
      todo/disktest.snip
  87. +8
    -0
      todo/gpg.snip
  88. +24
    -0
      todo/list.md
  89. +5
    -0
      todo/mkdir.snip
  90. +37
    -0
      todo/music.snip
  91. +16
    -0
      todo/p3p.snip
  92. +5
    -1
      todo/profile.source
  93. +69
    -57
      todo/readme.md
  94. +11
    -0
      todo/workflow.snip
  95. +0
    -7
      when.sh

+ 22
- 0
.gitignore View File

@@ -0,0 +1,22 @@
# @author:jakimfett
# @description:"Ignore autogenerated folder(s) and file(s)."

# Ignore autogenerated folder(s) and file(s)."
log
log/*
tmp
tmp/*
*.swp
*.idx

# Ignore configuration file(s)
*.config
*.conf

# OSX cleanup
.DS_Store

# Ignore assembled binaries
bin
bin/*


+ 0
- 0
.gitmodules View File


+ 1
- 0
archive/.gitignore View File

@@ -0,0 +1 @@
# file must exist to preserve folder structure in version control

+ 17
- 0
archive/connections.log View File

@@ -0,0 +1,17 @@
--2018-07-14 09:56:01-- http://functions.sh/
Resolving functions.sh (functions.sh)... 192.30.252.153, 192.30.252.154
Connecting to functions.sh (functions.sh)|192.30.252.153|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10408 (10K) [text/html]
Saving to: ‘index.html’

0K .......... 100% 19.0M=0.001s

2018-07-14 09:56:02 (19.0 MB/s) - ‘index.html’ saved [10408/10408]

--2018-07-14 09:56:02-- http://sha512/
Resolving sha512 (sha512)... failed: nodename nor servname provided, or not known.
wget: unable to resolve host address ‘sha512’
FINISHED --2018-07-14 09:56:02--
Total wall clock time: 0.9s
Downloaded: 1 files, 10K in 0.001s (19.0 MB/s)

+ 1
- 0
bin/.gitignore View File

@@ -0,0 +1 @@
# folder structure marker, file must exist

+ 1
- 0
cache/.gitignore View File

@@ -0,0 +1 @@
# file must exist to preserve folder structure in version control

+ 122
- 0
com/chroot.sh View File

@@ -0,0 +1,122 @@
#!/bin/bash
# @author: 'grufwub'
# @origin: 'https://notbird.site/@grufwub/102423194197582468'
# @source: 'https://pastebin.com/i3dzL8Mu'

debootstrap='DEBOOTSTRAP_DIR=/opt/debootstrap/usr/share/debootstrap /opt/debootstrap/usr/sbin/debootstrap'
debootstrap_url='http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.115_all.deb'

function install_debootstrap()
{
local curdir tmpdir
echo "Installing debootstrap"
tmpdir=$(mktemp -d)
cd $tmpdir
curl -o debootstrap.deb "$debootstrap_url"
ar x debootstrap.deb
sudo mkdir -p /opt/debootstrap
sudo cp data.tar.gz /opt/debootstrap
curdir=$(pwd)
cd /opt/debootstrap
sudo tar -xf data.tar.gz
sudo rm -f data.tar.gz
cd $curdir
rm -rf $tmpdir
}

function mount_filesystems()
{
sudo echo -n '' # just to ensure we still have sudo
echo -n "Mounting filesystems..."
sudo mount -t proc /proc "$1/proc"
sudo mount -t sysfs /sys "$1/sys"
sudo mount -o bind /dev "$1/dev"
sudo mount -o bind /dev/pts "$1/dev/pts"
echo " Done!"
}

function unmount_filesystems()
{
sudo echo -n '' # just to ensure we still have sudo
echo -n "Unmounting filesystems..."
sudo umount "$1/proc"
sudo umount "$1/sys"
sudo umount "$1/dev/pts"
sudo umount "$1/dev"
echo " Done!"
}

function install_debian()
{
echo "Installing Debian..."
sudo bash -c "$debootstrap --arch amd64 buster '$1' http://ftp.uk.debian.org/debian/"

echo -n "Writing Debian sources file..."
sudo bash -c "cat > '$1/etc/apt/sources.list'" << EOF
deb http://ftp.uk.debian.org/debian/ buster main non-free contrib
deb-src http://ftp.uk.debian.org/debian/ buster main non-free contrib

deb http://security.debian.org/ buster/updates main non-free contrib
deb-src http://security.debian.org/ buster/updates main non-free contrib

deb http://ftp.uk.debian.org/debian/ buster-updates main non-free contrib
deb-src http://ftp.uk.debian.org/debian/ buster-updates main non-free contrib
EOF
echo " Done!"

echo -n "Copying across hostname..."
sudo cp /etc/hostname "$1/etc/hostname"
echo " Done!"

mount_filesystems "$1"

echo "Performing initial package updates within chroot..."
sudo chroot "$1" /bin/bash -c 'apt-get update && apt-get dist-upgrade -y'
sudo chroot "$1" /bin/bash -c 'apt-get install -y locales'
sudo chroot "$1" /bin/bash -c '/usr/sbin/dpkg-reconfigure locales'
sudo chroot "$1" /bin/bash -c 'apt-get install -y nano sudo ncurses-term git curl wget'

echo "Creating group wheel"
sudo chroot "$1" /bin/bash -c "/usr/sbin/groupadd wheel"

echo "Adding group wheel to sudoers"
sudo chroot "$1" /bin/bash -c "echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers"

echo "Creating user: $USER"
sudo chroot "$1" /bin/bash -c "/usr/sbin/useradd -m -g users -G sudo -s /bin/bash $USER"

echo "Please enter a password for $USER..."
sudo chroot "$1" /bin/bash -c "passwd $USER"
echo "Done!"

unmount_filesystems "$1"
}

if [ "`id -u`" -eq 0 ] ; then
echo "Please do not run this script as root."
exit 1
fi

if ! wget -V > /dev/null 2>&1 ; then
echo "Please install wget. Required for debootstrap"
exit 1
fi

if ! (bash -c "$debootstrap --version" > /dev/null 2>&1) ; then
install_debootstrap
fi

if [[ "$1" == "" ]] ; then
echo "Please supply a chroot directory!"
exit 1
fi

if [[ ! -d "$1" ]] ; then
echo "Creating directory: $1"
mkdir -p "$1"
install_debian "$1"
fi

mount_filesystems "$1"
sudo chroot "$1" /bin/bash -c "su $USER --login"
unmount_filesystems "$1"

+ 23
- 0
com/copytu.sh View File

@@ -0,0 +1,23 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-sa'
#
# @function.desc
# copies the current functions.sh environment to a different location, preserving git history and current modifications.
#
# @function.syntax
# `copyto.sh "directory"` <-- copy to a locally writeable directory
# `copyto.sh "user@server.tld"` <-- copy to an SSH-able remote
# `copyto.sh --device "device_id"` <-- mount and write to an unmounted device
#
# `function "location" --delta` <-- default option, using rsync, warns on overwrite
# `function "location" --hard --yes --quiet` <-- empties the remote location if necessary before performing a full copy
#
# @function.returns
# * = standard
#
# @function.comment
# Intended to facilitate nomadic programming styles.
function templateFunction {
exit 0
}

+ 438
- 0
com/core.sh View File

@@ -0,0 +1,438 @@
#!/bin/bash
#
# author: @jakimfett
# license: cc-by-sa
#
# Common functions and utilities for Debian-ish Linux shell scripts.
# This is a dangerous toy, read carefully before using in your shop.
# Test it in a copy of development, with your use case, first.

# @todo - integrate instantiation with documentation, for conciseness and strong coupling.
#
# @TODO - Add auto update to scripts, with md5 verify.
# @TODO - Refactor to use local variables whenever possible.
# @TODO - Add usage examples for all scripts? (possibly autogenerate?)

########### Usage Help ###########

# Checks if the script is being run directly or sourced.
if [ "$0" == "$BASH_SOURCE" ];then
# Display functions.sh usage information.
function functionsUsageHelp {
echo
echo "Available commands in functions.sh:"
echo -e "\t--search|-s <functionName> \t\t Locates all usages of the function. Supports partial function names."
echo -e "\t--list|-l \t\t\t\t Lists all shared function names, with descriptions."
echo -e "\t--allusage|-a \t\t\t\t Lists usage locations of all shared functions."
echo
echo "Available (optional) variables:"
echo -e "\t\$CHECKSUDO\tdefault is zero \t check for ability to run sudo commands if set to non-zero"

# Check if VERBOSITY variable is instantiated before setting to zero
if [ -z $VERBOSITY ];then
VERBOSITY=2
echo -e "\t\$VERBOSITY\tdefault is two \t\t severity filtering of status/debug text if non-zero, 9 being 'all'."
fi

# Default to protecting the user, ni?
if [ -z $DRYRUN ];then
DRYRUN=1
echo -e "\t\$DRYRUN\t\tdefault is non-zero \t performs only non-destructive operations"
fi

echo -e "\t\$EXEC\t\tdefault is non-zero \t executes sanity checks before continuing, set to zero to disable"
echo -e "\t\$INTERACTIVE\tdefault is zero \t displays yes/no interactive elements for the user if set to non-zero"
echo
echo
echo "Include this block at the top of your script to allow access to functions:"
echo
echo -e '\t########### Include functions ###########'
echo -e '\tif [[ `find ~/ -type f -iname "functions.sh" 2>&1` == *"No such file"* ]];then echo "functions.sh not found, exiting";exit 1;fi'
echo -e '\tsource "`dirname "$0"`/functions.sh"'
echo -e '\t########### End include functions #######'
echo
}

# List all functions and their descriptions.
function listAllFunctions {
echo
echo "List of all shared functions:"
echo "--"
cat $0 | egrep -v " function [A-Za-z]* {" | egrep -B1 "function [A-Za-z]* {" | awk '{$1=$1;print}'
echo
echo
echo "List of all non-shared functions:"
echo "--"
cat $0 | egrep -B1 " function [A-Za-z]* {" | awk '{$1=$1;print}'
}

# Search for usage of all shared functions.
function locateAllFunctionUsage {
for i in `egrep "function [A-Za-z]* {" tools/functions.sh | egrep -v " function [A-Za-z]* {" | awk '{print $2}'`;do
ISUSED=$(egrep -rn "$i" `dirname "$0"` --exclude=README.md --exclude=functions.sh)

if [[ ! -z $ISUSED ]];then
echo
locateFunctionUsage $i
fi
done
}

# Search usage of a specific function.
function locateFunctionUsage {
local FUNCTIONNAME="$1"
echo
echo "Usage list for $FUNCTIONNAME:"
echo
grep -rn "$FUNCTIONNAME" `dirname "$0"` --exclude=README.md --exclude=functions.sh | grep -v "function $FUNCTIONNAME {" | sed 's/:/ /g' | awk '{print "File \""$1"\", line #"$2":"}{system("sed -n "$2"p "$1)}{print ""}'
}

case "$1" in
--search|-s)
# Locate usages of shared functions
locateFunctionUsage $2
;;
--list|-l)
# List all functions in the functions script, with descriptions
listAllFunctions
;;
--allusage|-a)
# List all functions in the functions script, with descriptions
locateAllFunctionUsage
;;
--help|*)
# Displays help and usage info
functionsUsageHelp
exit 1
;;
esac
fi

########### End of Usage Help ###########


########### Set pre-function flags ###########

# pass in the 'help' flag if the core is run without arguments
if [ -z "$*" ];then
HELP=1
fi

# @TODO - need to refactor this to correctly parse non-delimited options, eg `./scriptname.sh -dm`
# @TODO - add functions.sh file update, and AUTOUPDATE variable.
for i in "$@"; do
case "$i" in
--loglevel=[0-9]|-l=[0-9])
# Displays help and usage info
VERBOSITY=$(echo "$i" | grep -o '[0-9]')
echo "${VERBOSITY}"
exit
#LOGDISPLAY=$(echo "${@}" | grep -o '[0-9]')
;;
--dry-run|--dry-run=true)
# Displays help and usage info
DRYRUN=1
;;
--dry-run=false)
# Displays help and usage info
DRYRUN=0
;;
--interactive|interactive|-i|i)
# Execute all commands interactively
INTERACTIVE=1
;;
--help|help|-h|h)|*)
echo "${@}"
echo
# Displays help and usage info
HELP=1
;;
esac
done

########### End pre-function flags ###########

# possibly the most useful bit, right here: the `logThis` function.
# It's a function that logs things conveniently.
# This entire thing is functions, but this one is the function that started it all.


# @logThis.desc
# Text output handling for logging
#
# @logThis.syntax:
# `logThis "Message"`
# `logThis "Message" <int> <filepath>`
#
# @logThis.returns
# * standard
#
# @logThis.comment
# Take time to refactor. Deprication is doable, and optimizing is important.
function logThis {
# the passed-in message, from function usage, this is mandatory
local message="${1}" # @todo probably need to sanitize the message somehow.
if [ -z "${message}" ];then
echo "Message cannot be empty!"
return 6
else
# parameters 2+ are optional...
local logging_level
local log_file

# ...check if they're set, if not, set from globals
if [ ! -z "${2}" ] ; then
# Set the log level (ideally) from the passed-in value...
logging_level="${2}"

elif [ ! -z "${config['logLevel']}" ] ; then # config is set, passin isn't.
# ...next from the script default...
logging_level="${config['logLevel']}"

else
# and finally, if the log level has no set default, use max verbosity
logging_level=10
fi



if [ ! -z "${3}" ] ; then
log_file="${3}"
else
log_file="${config['logFile']}"
fi

local dateTimeNow=$(date +"${config['dateTimeFormat']}")
if [ "${logging_level}" -le "${config['logLevel']}" ] ; then
echo "${dateTimeNow}: ${message}" | tee -a ${log_file}
else
echo "${dateTimeNow}: ${message}" >> ${log_file}
fi
fi
}

########### Sanity Checks ###########



# Check for process ID file
# @TODO - refactor PID logging.
#PIDFILE="/tmp/$$.pid"
#if [ -f $PIDFILE ]; then
# printf "\nScript is already running as PID `cat $PIDFILE`\n"
# exit 1;
#fi

#if [ ! -f $PIDFILE ]; then
# echo $$ > $PIDFILE
#fi


function cleanup {
# Ensure that child processes have finished before designating time of exit.
wait

# rm $PIDFILE

logThis "Done." 1

}

# On exit, do cleanup
trap cleanup EXIT

# Check if defaults variable is instantiated before setting to one
if [ -z $BASEDIR ];then
BASEDIR=`pwd`
fi

# Check if defaults variable is instantiated before setting to one
if [ -z $EXEC ];then
EXEC=1
fi

# Check if UNRECOGNIZED variable is instantiated before setting to zero
if [ -z $UNRECOGNIZED ];then
UNRECOGNIZED=0
fi

# Check if HELP variable is instantiated before setting to zero
if [ -z $HELP ];then
HELP=0
fi

# Check if the CHECKSUDO variable is set before setting to zero
if [ -z $CHECKSUDO ];then
CHECKSUDO=0
fi

# Check if LOGSFOLDER variable is instantiated before setting to default
if [ -z $LOGSFOLDER ];then
LOGSFOLDER="${BASEDIR}/logs"
fi

# Check if LOGFILE variable is instantiated before setting to default
if [ -z $LOGFILE ];then
LOGFILE="${LOGSFOLDER}/`basename ${0}`.`date "+%Y-%m-%d_%H%M.%S"`.log"
fi

# Check if TEMPFOLDER variable is instantiated before setting to zero
if [ -z $TEMPFOLDER ];then
TEMPFOLDER="${BASEDIR}/tmp"
fi

# Check if REPORTFOLDER variable is instantiated before setting to zero
if [ -z $REPORTFOLDER ];then
REPORTFOLDER="${BASEDIR}/reports"
fi

# Check if INTERACTIVE variable is instantiated before setting to zero
if [ -z $INTERACTIVE ];then
INTERACTIVE=0
fi

########### End of Sanity Checks ###########


########### Functions - Alphabetize or else ###########

# Create autogen folder if it doesn't exist
function autogenFolderCheck {
if [ ! -d "$LOGSFOLDER" ];then
mkdir -p "$LOGSFOLDER"
fi

if [ ! -f "$LOGFILE" ];then
touch "$LOGFILE"
fi

if [ ! -d "$REPORTFOLDER" ];then
mkdir -p "$REPORTFOLDER"
fi
}

# Prints the current date and time inline.
function dateTimeNow {
# If date format is changed, also change LOGFILE variable instantiation format (above).
date "+%Y-%m-%d_%H%M.%S"
}

# Check if a user has access to the SUDO command, and set the ISSUDO variable appropriately
function checkSudo {
ISSUDOTEST=$(sudo -v 2>&1)
ISSUDO=0
if [ -z "$ISSUDOTEST" ];then
ISSUDO=1
fi
}

# Get user input
# @todo - generalize this and fix clunkyness of command/messaging variables.
#
# Syntax is `getUserInputYesNo MESSAGE COMMAND_ON_YES MESSAGE_ON_YES COMMAND_ON_NO MESSAGE_ON_NO`
function getUserInputYesNo {
MESSAGE="$1 [y/N]: "
COMMAND_ON_YES="$2"
MESSAGE_ON_YES="$3"
COMMAND_ON_NO="$4"
MESSAGE_ON_NO="$5"

ERROR_MESSAGE="Please input either 'yes' or 'no' to continue."

read -r -p "`echo -e "$MESSAGE"`" response
case $response in
[yY][eE][sS]|[yY])
echo -e "$MESSAGE_ON_YES"
if [ ! $ISSUDO -eq 0 ];then
echo "$COMMAND_ON_YES" | sudo bash
else
echo "$COMMAND_ON_YES" | bash
fi
;;
[nN][oO]|[nN])
echo "$MESSAGE_ON_NO"
if [ ! $ISSUDO -eq 0 ];then
echo "$COMMAND_ON_NO" | sudo bash
else
echo "$COMMAND_ON_NO" | bash
fi
;;
*)
echo -e "$ERROR_MESSAGE\n"

getUserInputYesNo "$1" "$2" "$3" "$4" "$5"
;;
esac
}


function dateConvert {
date -j -f %s $1 +"${config['dateTimeFormat']}"
}

function enumGetter {
# @todo - implement using force-case'd text input?
logThis "function 'enumGetter' is not implemented!"
exit 1;
}

# Text output handling for logging
# Syntax is `logThis-deprecated_usage_needs_fixed LOGLEVEL MESSAGE LOGFILE(optional)`
#
# @changelog:
# 2018_03_29 19.53.10 (PDT/GMT-0700)
# re-organized parameter order to make more usage sense
function logThis-deprecated_usage_needs_fixed {
logThis "function usage deprecated"
exit 1;
}



# @todo - implement
function char2Int {
echo "implement:# printf -v int '%d\n' "$1" 2>/dev/null"
}

# Outputs a horizontal line to the logfile
# Syntax is logHL LOGLEVEL(optional)
function logBreak {
local logging_level=2
if [ ! -z "${1}" ];then
logging_level="${1}"
fi
logThis "####################################################" "${logging_level}"
}

# Create temp folder if it doesn't exist
function tempFolderCheck {
if [ ! -d "$TEMPFOLDER" ];then
mkdir -p "$TEMPFOLDER"
fi
}

########### End of functions ###########


########### Execute Defaults ###########

# If defaults variable is set to a non-zero value, run these functions by default

if [ $EXEC ];then
logThis "Executing default functions..." 9

autogenFolderCheck

tempFolderCheck

if [ $CHECKSUDO -ne 0 ];then
checkSudo
fi

logThis "Defaults executed." 9

logThis "Begin processing" 1

fi

########### End of Execute Defaults ###########

+ 1
- 0
com/core.sha.512.sum View File

@@ -0,0 +1 @@
47e53add670f374869184c2e1b7dd601d64e1a7f873f6f2db41e6dcc16ebcc643b3c3283d03ccc83c85394389d2cec94972835aebe83b905df319d780da6e6e4

+ 73241
- 0
com/dict/names.list
File diff suppressed because it is too large
View File


+ 55
- 0
com/dict/thumb.sh View File

@@ -0,0 +1,55 @@
#!/bin/bash
# @author:'`whoami`'
# @license;'cc-by-sa'
#
# Ripped from Stack Overflow (https://stackoverflow.com/a/12948157), then modified to fit my use case.
# Preparing to hard-merge with (https://stackoverflow.com/a/12921335), as directed by the Alliance.
#
# All modifications from the source licensed as above, as the prophesy foretold.

workingDir=`pwd`
echo ${workingDir}

targetDir=${1}
echo ${targetDir}
echo "Only remove me if you know what you're doing, hotshot."; exit 13;





THUMBS_FOLDER=/home/image/thumb
for file in /home/image/*
do
# next line checks the mime-type of the file
IMAGE_TYPE=`file --mime-type -b "$file" | awk -F'/' '{print $1}'`
if [ x$IMAGE_TYPE = "ximage" ]; then
IMAGE_SIZE=`file -b $file | sed 's/ //g' | sed 's/,/ /g' | awk '{print $2}'`
WIDTH=`echo $IMAGE_SIZE | sed 's/x/ /g' | awk '{print $1}'`
HEIGHT=`echo $IMAGE_SIZE | sed 's/x/ /g' | awk '{print $2}'`
# If the image width is greater that 200 or the height is greater that 150 a thumb is created
if [ $WIDTH -ge 201 ] || [ $HEIGHT -ge 151 ]; then
#This line convert the image in a 200 x 150 thumb
filename=$(basename "$file")
extension="${filename##*.}"
filename="${filename%.*}"
convert -sample 200x150 "$file" "${THUMBS_FOLDER}/${filename}_thumb.${extension}"
fi
fi
done

#!/bin/bash
for file in /path/to/images/*
do
# next line checks the mime-type of the file
CHECKTYPE=`file --mime-type -b "$file" | awk -F'/' '{print $1}'`
if [ "x$CHECKTYPE" == "ximage" ]; then
CHECKSIZE=`stat -f "%z" "$file"` # this returns the filesize
CHECKWIDTH=`identify -format "%W" "$file"` # this returns the image width

# next 'if' is true if either filesize >= 200000 bytes OR if image width >=201
if [ $CHECKSIZE -ge 200000 ] || [ $CHECKWIDTH -ge 201 ]; then
convert -sample 200x150 "$file" "$(dirname "$file")/thumb_$(basename "$file")"
fi
fi
done

+ 1
- 0
com/docs/.gitignore View File

@@ -0,0 +1 @@
# empty .gitignore file to maintain folder structure, do not modify.

+ 31
- 0
com/docs/publish.sh View File

@@ -0,0 +1,31 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-sa'
#
# Automate microsite publication and caching.

outPut='microsite';

# rm -rf ./microsite
# mkdir -p microsite
# git submodule add -b gh-pages git@github.com:jakimfett/functions.sh microsite
# git submodule update --init
# git submodule update --remote

if [ -d "${outPut}" ]; then
cd "${outPut}"
fi

# These options wipe out the branch each time.
# git rm -r --cached .
# git clean -fxd
# git branch -D gh-pages
# git checkout --orphan gh-pages
#git fetch origin development
#git show development:functions.sh > index.html
cat ../functions.sh > index.html
git add index.html
cat index.html | sha3sum | awk '{print $1}' > sha3.hash
cat index.html | md5sum | awk '{print $1}' > md5.hash
git add *.hash
#git commit -m "autogenerated by prototype"

+ 102
- 0
com/docs/readme.md View File

@@ -0,0 +1,102 @@
Doing enough, fast enough, is difficult at times.

This piece of software, written (mostly) in scripting language(s), is a lever, of sorts.

It starts with the idea that the tools we use are more powerful if they operate in similar ways.
Example, having one interchangeable source of power for most of your small electronics.
Or that most types of transportation can refuel at any fuel station, across the planet.

But this interoperability can sometimes hold back progress, especially as those tools become powerful in ways that are not balanced.

In martial arts, you are asked to exist in a paradigm that is not your own.
You have to become teachable, and you have to become more conscious of the potential of your actions.
The actions associated with this set of computer programs can have far-reaching consequences.

Levers can be used to lift or move things.
Levers can also be used to harm things, even if the intention was to lift or move.

This is intended for personal, _offline_ use.

If you're not offline, it may have unintended consequences.
By using this software, you're accepting the risks associated with that.



# most people call it 'multithreading'
Everything has a reaction of some sort.
Including computer programs.

That intent, that direction, often overlaps this reaction.

Eg, you're searching for private data, and a multinational conglomerate is mining your keystrokes for insight into how it can manipulate you into giving them your money.

It may, also, turn up that document you couldn't find during the meeting last week, or the video of your friend's kid that they sent you a while ago where the little tyke dances to some song the parental figure had playing on the radio.


The point is, for any given action, there can be `n+1` reactions, where `n=0` is considered the "a lack of action is a reaction, sorta.".


So, this means that if you consider a frozen "slice" of time, with the action in question caught in the cusp of "almost happening", you could turn over examine, and in some cases guess at what will possibly happen next. You observe paths like this using something called "debugging tools", and I'll be rambling about them a bit later.

The point is, there's multiple *possible* paths, and most programs select a single path despite the many many possible other result that are in theory possible, eg "data matching some input/filter exists, display a list of the result(s)".

When a program multipaths, and caches all the "similar" results, it can sometimes save time, and it can sometimes cause huge problems.


Let's talk about the dangers of meeting yourself on a branching-and-converging multipath.
_(the multithreading paradigm calls this process a "race condition" at times, and "concurrent writing" at others, but it's the same idea of a merge conflict as seen in the git [version control system](doc://defs.md#version_control).)_

When two [shells](docs://defs.md#data_shell) collide on their hash, normally, it takes user intervention to resolve.
An intelligent response, frequently by whatever or whoever made the modifications (in the case of a codebase, for example).
When decision paths collide, it's actually a *good* thing, as with data shells.


When two data shells merge, their contents, as determined by algorithm, are identical.
Note that this is distinct from being "functionally identical", eg as with an image in pixel vs vector.

For small data, eg the value of a single pixel or an individual vector, this takes up _more_ space than traditional forms of storage.
For larger or "chunky" data, this allows the overlapping portions of unrelated datasets share storage and backup while maintaining anonymity and security, because the user then stores a value for retrieving the shell, which is delivered by the backend to a local server, and then the user will be able to decrypt a copy once it's on their device.

However, there is risk associated with merging.

And, a lot of that risk stems from _pattern matching_, on some level.
Most computers have a hard time determining the difference between slightly different data and very different data, and data without context has little meaning to a human, either.

If you don't understand the data, you can't merge effectively.



# the idea
Managing state is complicated. Why should a simple three-liner of a shell script need one?

Because most computer programs are convoluted, overcomplex, under-documented, and frequently [Just Plain Bad](doc://defs.md#Bbad_code).

The key is abstraction and identity.

My shell is unique.
Yours probably is, too.
That's because the shell's "state" is in flux, just like your entire user account, your data, your connection, etc etc.

There's a lot of chaos in the process, and frequently, things get lost in the shuffle.
Documents. Lives. Love.

You know, the important things.

---
A very wise hacker once told me:
> `never do anything for just one reason`

You can't hear their inflection, and I'd rather not go into the complexities of audio conersation for an un-skilled end user,
But
Just that stateement, is why this particular scripting language is possible.

In code, as with life, the ideal, the vision, is a poor rendering indeed in the final product.

This is an alternate approach.
It has worked for me.

It may, or may not, work for you.

Judge lightly.
Understand deeply.
Criticize constructively.

+ 17
- 0
com/env/pathadd.sh View File

@@ -0,0 +1,17 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-sa'
#
# Adds the working directory to your $PATH variable

# @todo compare variables with diff bash
echo "Old \$PATH contents:"; echo "${PATH}";
export oldPath=${PATH};
export PATH="${oldPath}:`pwd`";
echo "New path:";
echo "${PATH}";
echo;
echo "Diff:";
diff <(echo ${oldPath}) <(echo $PATH);
echo;
unset oldPath;

+ 9
- 0
com/getFile.sh View File

@@ -0,0 +1,9 @@
#!/bin/bash
# @author:'@jakimfett'
# @license;'cc-by-sa'
#
# Gets a file and (optionally) verifies it against a hash.

# sort the inputs
INSTRING=$@
echo "${INSTRING}"

+ 28
- 0
com/getbash.sh View File

@@ -0,0 +1,28 @@
#!/bin/bash
# @author:'@jakimfett'
# @license;'cc-by-sa'

# @todo allow targeting?
fileName="${1}"
if [ ! "${fileName}" == '' ]; then
BASHPLACE=`which bash`
bashLine=`head -1 ${fileName}`
echo ${bashLine}
if [[ "${bashLine}" == *"# !/"* ]]; then
tail -n +2 "${fileName}" > "${fileName}.bak" && mv "${fileName}.bak" "${fileName}" && sed -i.bak "1s;^;# !${BASHPLACE}\n;" f.sh
echo
echo "Replaced:"
echo "'${bashLine}' with '# !${BASHPLACE}'"
echo "in '${fileName}'"
echo
else
sed -i.bak "1s;^;# !${BASHPLACE}\n;" f.sh
echo
echo "Added '${BASHPLACE}'"
echo "to '${fileName}'"
fi

exit 0
else
echo "specify a filename, please"
fi

+ 121
- 0
com/index.sh View File

@@ -0,0 +1,121 @@
#!/bin/bash
#
# author: @jakimfett
# license: cc-by-sa
#
# usage: index.sh <folder>
# Creates a sorted, cleaned index of files in a given directory.

# What to index?
projectName='functions.sh'
cacheDir='cache'
workingDir="$(pwd)"
aliases="${workingDir}/com/usr/aliases.src"
source "${aliases}"

# okayso mlocate is a good thought, but the performance is poor and it's not always available.
#
# functions.sh is about minimalism, and removing a dependency would be nice,
# especially at this point.

# we have to assume there's an index.
# and we are going to assume that there's occasionally more than one.
# so reading a standardized multi-piece index is the first hurdle.
#
# let's start small

# my intention:
# read in all the indexes, output to a single file, after sorting and de-duplicating.
# this was my first psuedo-code for it.
# cat folder.dex.* >> "${cache}/index/${projectName}.${chronoStamp}.dex"; exit
#
# That didn't work, we need to locate where stuff is first.
#
# the -name flag for find seems relevant.
echo "${workingDir}${cache}/index/${projectName}.$(chronoStamp).dex"
echo "finding ${projectName}:"
#find ~ -name "${projectName}" -type d 2>/dev/null


#>> "${cache}/index/${projectName}.${chronoStamp}.dex"


exit


########### Include functions ###########
if [[ `find functions.sh 2>&1` == *"No such file"* ]];then echo "functions.sh not found, exiting";exit 1;fi
clear; source "`dirname "$0"`/functions.sh"; when.sh;echo
logThis "loaded:'functions.sh'"
########### End include functions #######

if [ ! -z "${1}" ]; then

TARGETDIR="$1"
DUPEDIR="/Users/jakimfett/Downloads/dupes/"

cd $TARGETDIR
TEMPOUTPUT="${TEMPFOLDER}/`basename ${TARGETDIR}`.index.tmp"
touch ${TEMPOUTPUT}.md5sum


echo "Temp index will be created at '${TEMPOUTPUT}'"

echo "Directory size:"
du -hs .
echo
echo "starting file indexing:"

find . | sort | uniq > "${TEMPOUTPUT}"

#if [ ! -f "${TEMPOUTPUT}" ] ; then
# echo "Skipping creation of index, remove '${TEMPOUTPUT}' to regen."
#fi

# if [ ! -f "${TEMPOUTPUT}.md5sum" ] ; then


# during loops, fail early when possible
while read path; do
# check if variable is empty
if [ ! -z "${path}" ] ; then
# check if it's a directory
if [ ! -d "${path}" ] ; then

fileName="`basename ${path}`"

# expensive processing, but necessary eventually
# @todo - refactor to multiprocess this?
# @todo use rhash --sha3-512, requires homebrew on OSX?
# @todo switch to using keccak
fileMD5="`md5 -q "${path}"`"
echo -n '.'

# this is a horrible hack but it works (for now)
fileSize="`echo $(wc -c <"${path}") | xargs`"
# @todo - refactor file size calculation method


dupe="`grep "${fileMD5}" "${path}"`"
# file is a duplicate
if [ ! -z "${dupe}" ]; then
echo "new file: ${fileMD5} ${path}"
echo "duplicate file: ${dupe}"
# mv '${path}' '${DUPEDIR}'
fi
echo "${fileMD5} | ${fileSize} | ${path}" >> "${TEMPOUTPUT}.md5sum"
fi
fi
done <"${TEMPOUTPUT}"

#echo "# File list" > ${TEMPOUTPUT}.list
#echo "md5\t|\tfilepath" >> ${TEMPOUTPUT}.list

#threshold=1
#cat ${TEMPOUTPUT}.md5sum | awk '{print $2}' | sort | uniq -c | awk -v threshold="$threshold" '$1 > threshold' > ${TEMPOUTPUT}.counts


echo "file indexing done"
else
logThis "input a folder path please"
fi

+ 15
- 0
com/invert.sh View File

@@ -0,0 +1,15 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-sa'
#
# Take a text file and reverse the order of (lines|entries)


# prototype: dump whole file into a variable, then manually reverse it.
# this is bad, don't do this.
# objective: per-chunk (eg, single line, or delimited section of the file) re-writing of the file, with transactional logging
echo "failmuffins"
exit 1

TEXTFILE=`cat <filepath/filename>`
DELIMITER='{=,5+}'

+ 29
- 0
com/locate.sh View File

@@ -0,0 +1,29 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-sa'
#
# For finding where the files are.

# So here's the problem.
# I need a really good autoshim.
# a bash 3-ish liner that gives access to the latest functions.sh stuffs.
#
# Let's unpack that.
#
# I need the system to automagically `find` the location of any installed source files, compare each individiual 'current state' against the (currently unknown) 'latest' version, and then somehow catelogue it so that next time can be a spot check and delta.
#
# Spot check: the process of pinging and validating the metadata of the index entry for a given set of randomized-ish entries, and (if necessary), queuing sections for re-indexing
#
#
# ~~~
# This is the original bit of functions.sh that I found beautiful, and helped me decide to actually write something with this.
#
########### Include functions ###########
# if [[ `find functions.sh 2>&1` == *"No such file"* ]];then echo "functions.sh not found, exiting";exit 1;fi
# clear; source "`dirname "$0"`/functions.sh"; when.sh;echo
# logThis "loaded:'functions.sh'"
########### End include functions #######
##
#
# ~~~
# Let's find a way to do this slightly better.

+ 150
- 0
com/log.sh View File

@@ -0,0 +1,150 @@
#!/bin/bash
./when.sh
exit 1




# Log file location
SAVETO="${HOME}/pinglogs"
mkdir -p "$SAVETO"

# ENDPOINT set to nothing by default
ENDPOINT=""

# How high should the ping get before it is logged
MINPING=100

CHECKSITEROOT=0

########### Include functions ###########
if [[ `git status 2>&1| head -1 ` == *"fatal"* ]];then curl --silent http://quince.ocp.org/functions.sh -o ./functions.sh;fi
source "`dirname "$0"`/functions.sh"
if [ ! "`type -t siteRootCheck`" == "function" ];then echo "Please navigate to the website root folder and try again";exit;fi
########### End include functions #######

SCREEN=0

function usageHelp {
echo
echo "Usage: $0 COMMAND OPTIONS"
echo
echo "Available commands:"
echo -e " --default|-d \t Executes writeConfigHeader and createSandboxCertificates in order. Non-interactive."
echo
echo -e " --help|-h \t\t Displays commands and usage info."
echo -e " --background|-b \t Executes logging in the background via 'screen -S ' DNS validation in child processes (faster)."
echo -e " --force|-f \t\t Forces renewal of domains, regardless of expiry date."
echo -e " <empty> \t\t Displays the same info as '$0 help'"
echo
}

IPCHECK=0
UNKNOWN=0
UNRECOGNIZED=0
for i in "$@"; do
case "$i" in
--background|-b)
# Use screen to run logging in the background
SCREEN=1
;;
--force|-f)
# Execute all commands interactively
FORCERENEW=1
;;
--debug=true|--debug|--debug=false)
;;
--dry-run|--dry-run=true|--dry-run=false)
;;
--help|help|-h|h)
;;
--interactive|interactive|-i|i)
;;
*)
# Display unknown command warning and help/usage info
UNKNOWN=$i
IPCHECK=1
;;
esac
done

if [ -z $@ ];then
HELP=1
fi

# Echo the full command line options string if a command isn't recognized.
if [ $UNRECOGNIZED -ne 0 ];then
echo "Command not recognized:"
echo "'$0 $*'"
fi

# If the user needs help, display help.
if [ $HELP -ne 0 ];then
usageHelp
exit 1
fi

if [ $IPCHECK -ne 0 ];then
if [[ $i =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
# Endpoint is an IP address
ENDPOINT=$i
elif [[ $i =~ ^[A-Za-z]*\.[A-Za-z]{1,5}$ ]]; then
# Endpoint is a normal domain
ENDPOINT=$i
elif [[ $i =~ ^[A-Za-z]{1,10}\.[A-Za-z]*\.[A-Za-z]{1,5}$ ]]; then
# Endpoint is a subdomain
ENDPOINT=$i
else
echo "No match for domain '${UNKNOWN}'"
exit
fi
fi

LOGLOCATION="${SAVETO}/${NAME}_pinglog_$(date +%Y-%m-%d).log"
touch $LOGLOCATION

if [ ! -z $SANITYCHECK ];then
SANITYLOGLOCATION="${SAVETO}/${NAME}_sanitycheck_pinglog_$(date +%Y-%m-%d).log"
touch $SANITYLOGLOCATION
fi

function getPingTime {
for i in "$@"; do
if [[ $i == *"time"* ]];then
echo $i | cut -c 6-
fi
done
}


ping $ENDPOINT 2>&1 | while read pong 2>&1;do
pingdate="$(date +%Y-%m-%d\ %T):"

pingduration=$(getPingTime $pong )

echo "$pingdate $pingduration"

#echo $pong;
# awk -v \
# -v minping="$MINPING" \
# -v pingtime="$(awk '"'"'{ print $7 }'"'"' <<< $pong | cut -c 6-)" \
# -v dead="$(awk '"'"'{ print $5 }'"'"' <<< $pong )" '"'"'{ if (pingtime > minping) {print date, pong } if ( dead == "unreachable" ) {print date, pong } }'"'"' <<< $pong | tee -a $LOGLOCATION
done

exit



COMMAND="ping $ENDPOINT 2>&1"



if [ $SCREEN -ne 0 ];then
screen -dm -S $NAME bash -c "$COMMAND"
else
bash -c "$COMMAND"
fi


echo "Saving log to $PINGLOG"
printf "\nStarting new ping test at: $(date)\n" | tee -a $PINGLOG

+ 25
- 0
com/make.sh View File

@@ -0,0 +1,25 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-na'
#
# @usage <scriptname> <source>
# Makes a project given (a|) director(y|ies).

echo "@todo - implement ${0}"
exit 1;

@import functions.sh
@import input.getter

# psuedocode
# get user input for directory
# @todo - implement queueing
# @todo - add multi-source builds?

# cd /path/to/source
# mkdir build
# cd build
# cmake ..
# make
# <sudo> make install


+ 94
- 0
com/namer.sh View File

@@ -0,0 +1,94 @@
#!/bin/bash
# @author:'jakimfett'
# @license;'cc-by-sa'

declare -A config stateVar doneList

config['length']=3
config['numeric']=0
config['alpha']=1
config['dictPath']="/dict/names.list"
config['obfuscate']=0


# @todo move input processing to core.sh
for i in "$@"; do
case "$i" in
-[0-9]*)
config['length']=${i:1}
;;
'-n'|'--numeric' )
config['numeric']=1
;;
# -o|--obfuscate )
# config['obfuscate']=1
# ;;
*)
;;
esac
done

stateVar['dictPath']="`dirname \"$0\"`${config['dictPath']}"
stateVar['dictSize']=`wc -l "${stateVar['dictPath']}" | awk '{print $1}'`
stateVar['firstNumeric']=1


# reseed the dictionary line grabber (reduces repeat chance to 1/dictSize)
function reseed {
stateVar['seed']=$(( RANDOM % "${stateVar['dictSize']}"))
}

# Append a name to the return string
function addName {
# randomize dict grabber
reseed
# do the append
doneList['result']="${stateVar['partial']}$(sed "${stateVar['seed']}q;d" ${stateVar['dictPath']})"
}

# Append a number to the return string
function addNumeric {
doneList['result']="${stateVar['partial']}$((RANDOM % 10))"
}

# shove the in-progress return string into a stateVar for additional processing.
function doPartial {
# @todo - uniq, reverse, shuffle, count
if [ ${config['obfuscate']} -eq 1 ]; then
stateVar['partial']=$(echo "${doneList['result']}" | rev)
else
stateVar['partial']="${doneList['result']}"
fi
}

# Update the length in the stateVar post-cli options input
stateVar['length']=${config['length']}

while [[ ${stateVar['length']} -gt 0 ]]; do

# Add numeric bits if the config flag is set, never set numeral as first chunk
if [ ${config['numeric']} -eq 1 ] && [ ${#doneList['result']} -gt 0 ]; then

# Add a random 0-9 value to chunk 1/2 the time, avoid double digits by toggling
if [[ ${stateVar['firstNumeric']} -eq 1 ]] && [ ${stateVar['length']} -gt 1 ]; then
addNumeric
stateVar['firstNumeric']=0
else
addName
stateVar['firstNumeric']=1
fi

else
addName
fi

# Remove one from the length stateVar
stateVar['length']=$(( ${stateVar['length']} - 1 ))

# stash the existing result string in a the stateVar if more iterations are to be run
if [ ${stateVar['length']} -gt 0 ];then
doPartial
fi
done

echo ${doneList['result']}

+ 0
- 0
com/net/.gitignore View File


+ 15
- 0
com/net/bridge.service View File

@@ -0,0 +1,15 @@
[Unit]
Description=Assorted Tech Reverse SSH Service
ConditionPathExists=|/usr/bin
After=network.target

[Service]
User=bridge
ExecStart=/usr/bin/ssh -NTaC -o ServerAliveInterval=90 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i /home/bridge/.ssh/id_ed25519 -R 60022:localhost:22 bridge@ssh.jakimfett.com

# Restart every >2 seconds to avoid StartLimitInterval failure
RestartSec=13
Restart=always

[Install]
WantedBy=multi-user.target

+ 23
- 0
com/net/bridge.sh View File

@@ -0,0 +1,23 @@
#!/bin/bash
# @author:'jakimfett'
# @license: 'cc-by-sa'
#
# Constructed with bits from http://archive.is/xs4zQ

bridgeFlag="-N -R"
bridgePort=60022
remoteHost='ssh.jakimfett.com'
remoteUser='bridge'

newBridge() {
/usr/bin/ssh ${bridgeFlag} ${bridgePort}:localhost:22 ${remoteUser}@${remoteHost} &
}

isBridging() {
ps aux | grep "${bridgeFlag} ${bridgePort}" | awk '{print $2}'
}

if [ ! isBridging ]; then
echo "no bridge found, creating"
# newBridge
fi

+ 1
- 0
com/net/conf/.gitignore View File

@@ -0,0 +1 @@
# folder structure marker, file must exist

+ 0
- 0
com/net/conf/example.site View File


+ 19
- 0
com/net/dns.sh View File

@@ -0,0 +1,19 @@
#!/bin/bash
# @author:'@jakimfett'
# @license;'cc-by-sa'
#
# checks a system's position, and then reports it, via DNS.

# get address

ipv4="`curl -q -4 icanhazip.com 2>/dev/null`"
ipv6="`curl -q -6 icanhazip.com 2>/dev/null`"

echo
echo "your ipv4 is:"
echo ${ipv4}
echo
echo "your ipv6 is:"
echo ${ipv6}
echo
exit 0

+ 32
- 0
com/net/moshto.sh View File

@@ -0,0 +1,32 @@
#!/bin/bash
# @author:'@jakimfett'
# @license;'cc-by-sa'
#
# Connect to a given machine via mosh, the mobile shell.
# See https://mosh.org/#usage

user='root'
host=$1

if [[ "${host}" == *"@"* ]];then
user=$(echo $host | cut -d'@' -f1)
host=$(echo $host | cut -d'@' -f2)
fi

isDown=1

function pingHost {
ping -q -c 1 -w 3 $1 > /dev/null
isDown=$?
}

pingHost $host

while [ $isDown -ne 0 ]; do
echo "Host ${host} is down, waiting..."
sleep 3
pingHost $host
echo "Host status now: ${isDown}"
done

mosh --server=/usr/bin/mosh-server --family=prefer-inet6 --ssh='ssh -vv -i ~/.ssh/id_ed25519' "${user}@${host}"

+ 158
- 0
com/net/pinglog.sh View File

@@ -0,0 +1,158 @@
#!/bin/bash



# NAME variable is used for log file and screen instance naming
NAME="default"

# Log file location
SAVETO="${HOME}/pinglogs"
mkdir -p "$SAVETO"

# ENDPOINT set to nothing by default
ENDPOINT=""

# How high should the ping get before it is logged
MINPING=100

CHECKSITEROOT=0

########### Include functions ###########
if [[ `git status 2>&1| head -1 ` == *"fatal"* ]];then curl --silent http://quince.ocp.org/functions.sh -o ./functions.sh;fi
source "`dirname "$0"`/functions.sh"
if [ ! "`type -t siteRootCheck`" == "function" ];then echo "Please navigate to the website root folder and try again";exit;fi
########### End include functions #######

SCREEN=0