Compare commits
11 commits
Author | SHA1 | Date | |
---|---|---|---|
6a641c7e5c | |||
434cb22405 | |||
383580a1ee | |||
d3145c6073 | |||
29d6b0de45 | |||
08646a05d4 | |||
b13b57f15b | |||
06725dfcd5 | |||
ef8b1bbcb2 | |||
7f11ba1b61 | |||
cd14df1f11 |
8 changed files with 304 additions and 148 deletions
233
bunkdeck
233
bunkdeck
|
@ -1,121 +1,156 @@
|
||||||
#!/bin/bash
|
#!/bin/sh -e
|
||||||
set -e
|
|
||||||
|
|
||||||
heedPane="bunkdeck:0.0"
|
sessionname=bunkdeck
|
||||||
proclaimPane="bunkdeck:0.1"
|
heedPane=bunkdeck:0.0
|
||||||
shellPane="bunkdeck:0.2"
|
proclaimPane=bunkdeck:0.1
|
||||||
|
shellPane=bunkdeck:0.2
|
||||||
|
|
||||||
function isExistingDeck {
|
isExistingDeck () {
|
||||||
set +e
|
if tmux has -t $sessionname ; then
|
||||||
sessions=$(tmux list-sessions)
|
return 0
|
||||||
set -e
|
else
|
||||||
|
return 1
|
||||||
if [[ $sessions == *"bunkdeck"* ]]; then
|
fi
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function startNewDeck {
|
attachToDeck () {
|
||||||
tmux new -d -s bunkdeck heed
|
# does not currently protect against nesting sessions (tmux does this for us)
|
||||||
tmux split-window -h -t bunkdeck -p 70
|
tmux attach-session -d -t bunkdeck
|
||||||
tmux split-window -t $heedPane -v -p 3
|
|
||||||
tmux send-keys -t $proclaimPane 'proclaim' C-m
|
|
||||||
tmux send-keys -t $shellPane 'cowsay "press [CTRL+b then o] to cycle through panes"' C-m
|
|
||||||
# turn on pane titling
|
|
||||||
tmux select-pane -t $heedPane -T heed
|
|
||||||
tmux select-pane -t $proclaimPane -T proclaim
|
|
||||||
tmux select-pane -t $shellPane -T shell
|
|
||||||
tmux set -g set-titles on
|
|
||||||
# attach session to shell
|
|
||||||
tmux attach -t $shellPane
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function killDeck {
|
startNewDeck () {
|
||||||
tmux kill-session -t bunkdeck
|
tmux new -d -s $sessionname heed
|
||||||
|
tmux split-window -h -t $sessionname -p 70
|
||||||
|
tmux split-window -t $heedPane -v -p 3
|
||||||
|
tmux send-keys -t $proclaimPane 'proclaim' C-m
|
||||||
|
tmux send-keys -t $shellPane 'cowsay "press [CTRL+b then o] to cycle through panes"' C-m
|
||||||
|
# turn on pane titling
|
||||||
|
tmux select-pane -t $heedPane -T heed
|
||||||
|
tmux select-pane -t $proclaimPane -T proclaim
|
||||||
|
tmux select-pane -t $shellPane -T shell
|
||||||
|
tmux set -g set-titles on
|
||||||
|
# attach session to shell
|
||||||
|
tmux attach -t $shellPane
|
||||||
}
|
}
|
||||||
|
|
||||||
function growPane {
|
killDeck () {
|
||||||
case $2 in
|
if isExistingDeck; then
|
||||||
shell)
|
tmux kill-session -t $sessionname
|
||||||
tmux resize-pane -t $shellPane -L "$3"
|
else
|
||||||
;;
|
echo "you don't have bunkdeck running!"
|
||||||
proclaim)
|
fi
|
||||||
tmux resize-pane -t $proclaimPane -U "$3"
|
}
|
||||||
;;
|
|
||||||
heed)
|
leaveDeck () {
|
||||||
tmux resize-pane -t $heedPane -D "$3"
|
# currently assumes that bunkdeck is only session running
|
||||||
;;
|
# if bunkdeck leave is issued from within another session, silent failure occurs
|
||||||
*)
|
if isExistingDeck && [ "${TMUX}" != "" ]; then
|
||||||
echo "usage: bunkdeck grow [WINDOW] [SIZE]"
|
tmux detach -s $sessionname
|
||||||
echo
|
echo "you are not inside bunkdeck! for help:"
|
||||||
echo "windows:"
|
echo "$ bunkdeck help"
|
||||||
echo " shell horizontally grow the shell window"
|
fi
|
||||||
echo " proclaim vertically grow the window where you send text"
|
}
|
||||||
echo " heed vertically grow the window where you read texts"
|
|
||||||
|
growPane () {
|
||||||
|
case $2 in
|
||||||
|
shell)
|
||||||
|
tmux resize-pane -t $shellPane -L "$3"
|
||||||
|
;;
|
||||||
|
proclaim)
|
||||||
|
tmux resize-pane -t $proclaimPane -U "$3"
|
||||||
|
;;
|
||||||
|
heed)
|
||||||
|
tmux resize-pane -t $heedPane -D "$3"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "usage: bunkdeck grow [WINDOW] [SIZE]"
|
||||||
|
echo
|
||||||
|
echo "windows:"
|
||||||
|
echo " shell horizontally grow the shell window"
|
||||||
|
echo " proclaim vertically grow the window where you send text"
|
||||||
|
echo " heed vertically grow the window where you read texts"
|
||||||
echo
|
echo
|
||||||
echo "size:"
|
echo "size:"
|
||||||
echo " number of cells to grow the selected window"
|
echo " number of cells to grow the selected window"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
function shrinkPane {
|
shrinkPane () {
|
||||||
case $2 in
|
case $2 in
|
||||||
shell)
|
shell)
|
||||||
tmux resize-pane -t $shellPane -R "$3"
|
tmux resize-pane -t $shellPane -R "$3"
|
||||||
;;
|
;;
|
||||||
proclaim)
|
proclaim)
|
||||||
tmux resize-pane -t $proclaimPane -D "$3"
|
tmux resize-pane -t $proclaimPane -D "$3"
|
||||||
;;
|
;;
|
||||||
heed)
|
heed)
|
||||||
tmux resize-pane -t $heedPane -U "$3"
|
tmux resize-pane -t $heedPane -U "$3"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "usage: bunkdeck shrink [WINDOW] [SIZE]"
|
echo "usage: bunkdeck shrink [WINDOW] [SIZE]"
|
||||||
echo
|
echo
|
||||||
echo "windows:"
|
echo "windows:"
|
||||||
echo " shell horizontally shrink the shell window"
|
echo " shell horizontally shrink the shell window"
|
||||||
echo " proclaim vertically shrink the window where you send text"
|
echo " proclaim vertically shrink the window where you send text"
|
||||||
echo " heed vertically shrink the window where you read texts"
|
echo " heed vertically shrink the window where you read texts"
|
||||||
echo
|
echo
|
||||||
echo "size:"
|
echo "size:"
|
||||||
echo " number of cells to shrink the selected window"
|
echo " number of cells to shrink the selected window"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
helpText () {
|
||||||
|
usageText
|
||||||
|
echo
|
||||||
|
echo "help:"
|
||||||
|
echo
|
||||||
|
echo " movement:"
|
||||||
|
echo " bunkdeck gives you three panes, 'proclaim' to chat, 'heed' to read chats"
|
||||||
|
echo " and 'shell' to do whatever you want!"
|
||||||
|
echo " to move between panes you press [CTL + b] at the same time"
|
||||||
|
echo " then [arrow key] to move to a new pane, or 'o' to cycle around"
|
||||||
|
}
|
||||||
|
|
||||||
case $1 in
|
usageText () {
|
||||||
|
|
||||||
kill)
|
|
||||||
killDeck
|
|
||||||
;;
|
|
||||||
"")
|
|
||||||
if isExistingDeck; then
|
|
||||||
tmux attach-session -t bunkdeck
|
|
||||||
else
|
|
||||||
startNewDeck
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
grow)
|
|
||||||
growPane "$@"
|
|
||||||
;;
|
|
||||||
shrink)
|
|
||||||
shrinkPane "$@"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "usage: bunkdeck [COMMAND]"
|
echo "usage: bunkdeck [COMMAND]"
|
||||||
echo
|
echo
|
||||||
echo "commands:"
|
echo "commands:"
|
||||||
echo " (none) attach to existing bunkdeck or start new one"
|
echo " (none) attach to existing bunkdeck or start new one"
|
||||||
echo " kill kill running bunkdeck"
|
echo " kill kill running bunkdeck"
|
||||||
echo " grow grow the size of a bunkdeck window"
|
echo " leave close bunkdeck without killing it"
|
||||||
|
echo " grow grow the size of a bunkdeck window"
|
||||||
echo " shrink shrink the size of a bunkdeck window"
|
echo " shrink shrink the size of a bunkdeck window"
|
||||||
exit 1
|
}
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
|
||||||
|
kill)
|
||||||
|
killDeck
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
if isExistingDeck; then
|
||||||
|
attachToDeck
|
||||||
|
else
|
||||||
|
startNewDeck
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
leave)
|
||||||
|
leaveDeck
|
||||||
|
;;
|
||||||
|
grow)
|
||||||
|
growPane "$@"
|
||||||
|
;;
|
||||||
|
shrink)
|
||||||
|
shrinkPane "$@"
|
||||||
|
;;
|
||||||
|
help)
|
||||||
|
helpText
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usageText
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
6
delete.sh
Normal file
6
delete.sh
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
chatlog=/var/log/bunkchat/chat.log
|
||||||
|
|
||||||
|
chattr -a $chatlog
|
||||||
|
echo > $chatlog
|
||||||
|
chattr +a $chatlog
|
12
heed
12
heed
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/sh -e
|
|
||||||
|
|
||||||
clear
|
|
||||||
|
|
||||||
figlet -f future heed - bunkchat
|
|
||||||
echo "#######################################################################"
|
|
||||||
echo "# Take heed, $USER! This is a group chat with everyone on the server! #"
|
|
||||||
echo "# You can view earlier chat with 'scry' or 'less /srv/bunkchat.txt' #"
|
|
||||||
echo "#######################################################################"
|
|
||||||
echo
|
|
||||||
|
|
||||||
tail -f /srv/bunkchat.txt
|
|
122
install.sh
Executable file
122
install.sh
Executable file
|
@ -0,0 +1,122 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
installtarget=/usr/local/bin
|
||||||
|
bunkchatrepo=https://git.bunk.computer/bunk/bunkchat.git
|
||||||
|
|
||||||
|
missingtmux() {
|
||||||
|
echo
|
||||||
|
echo 'ERROR: tmux not found in $PATH'
|
||||||
|
echo ' please install tmux or add it to $PATH'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
missinggit() {
|
||||||
|
echo
|
||||||
|
echo 'ERROR: git not found in $PATH'
|
||||||
|
echo ' please install git or add it to $PATH'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# check for tmux and cowsay
|
||||||
|
# if not prompt and exit
|
||||||
|
checkdeps() {
|
||||||
|
which tmux 1>/dev/null || missingtmux
|
||||||
|
which git 1>/dev/null || git
|
||||||
|
echo
|
||||||
|
echo 'deps located'
|
||||||
|
}
|
||||||
|
|
||||||
|
clonebunkchat() {
|
||||||
|
echo "cloning bunkchat repo"
|
||||||
|
git clone $bunkchatrepo
|
||||||
|
}
|
||||||
|
|
||||||
|
# if not found prompt for git clone or exit
|
||||||
|
prompttoclone() {
|
||||||
|
echo
|
||||||
|
echo "INFO: could not locate bunkchat scripts"
|
||||||
|
echo
|
||||||
|
printf "install bunkchat? (Y/n): "
|
||||||
|
read -r response
|
||||||
|
case $response in
|
||||||
|
n)
|
||||||
|
echo "exiting bunkchat install"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
y)
|
||||||
|
clonebunkchat
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
clonebunkchat
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
prompttoclone
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
installbunkchat() {
|
||||||
|
(cd ../bunkchat && ./install.sh)
|
||||||
|
}
|
||||||
|
|
||||||
|
missingbunkchat() {
|
||||||
|
echo "bunk chat not installed"
|
||||||
|
# check for bunkchat repo in parent dir
|
||||||
|
needclone=1
|
||||||
|
for f in ./*
|
||||||
|
do
|
||||||
|
case $f in
|
||||||
|
bunkchat)
|
||||||
|
needclone=0
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if [ $needclone == 1 ] ; then
|
||||||
|
prompttoclone
|
||||||
|
fi
|
||||||
|
# run bunkchat install script
|
||||||
|
installbunkchat
|
||||||
|
}
|
||||||
|
|
||||||
|
# check for installed bunkchat && continue
|
||||||
|
checkbunkchat() {
|
||||||
|
which heed 1>/dev/null || missingbunkchat
|
||||||
|
which proclaim 1>/dev/null || missingbunkchat
|
||||||
|
which scry 1>/dev/null || missingbunkchat
|
||||||
|
}
|
||||||
|
|
||||||
|
# install buckdeck in /usr/local/bin
|
||||||
|
installbunkdeck() {
|
||||||
|
echo "installing bunkchat"
|
||||||
|
cp bunkdeck $installtarget
|
||||||
|
chmod 755 ${installtarget}/bunkdeck
|
||||||
|
chown root:root ${installtarget}/bunkdeck
|
||||||
|
echo
|
||||||
|
echo "SUCCESS! bunkdeck installed!"
|
||||||
|
}
|
||||||
|
|
||||||
|
infocron() {
|
||||||
|
echo
|
||||||
|
echo "INFO: bunkdeck comes with a script to clear chat history"
|
||||||
|
echo " if you would like to enable this copy the script to crontab scripts"
|
||||||
|
echo " and enable a cron for your desired cadence"
|
||||||
|
echo
|
||||||
|
echo "# cp delete.sh /root/crontab-scripts/delete-bunkchat.sh"
|
||||||
|
echo "# crontab -u root -e"
|
||||||
|
echo "# EXAMPLE FOR WEEKLY HISTORY DELETION"
|
||||||
|
echo "0 0 * * 6 /root/crontab-scripts/delete-bunkchat.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# check for root perms
|
||||||
|
if ! [ "$(id -u)" = 0 ]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: please run install with root permissions"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
checkdeps
|
||||||
|
checkbunkchat
|
||||||
|
installbunkdeck
|
||||||
|
infocron
|
||||||
|
exit 0
|
29
proclaim
29
proclaim
|
@ -1,29 +0,0 @@
|
||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
# make username uppercase
|
|
||||||
username=$(echo "$USER" | tr '[:lower:]' '[:upper:]')
|
|
||||||
timezone="America/New_York"
|
|
||||||
declare prompt
|
|
||||||
|
|
||||||
makeSlug () {
|
|
||||||
# make time and date
|
|
||||||
time=$(TZ=${timezone} date +%I:%M%p)
|
|
||||||
date=$(TZ=${timezone} date +%m/%d)
|
|
||||||
|
|
||||||
# make name/time string
|
|
||||||
prompt="${username}-${date}-${time}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# enter bunkchat mode (clear the screen)
|
|
||||||
clear
|
|
||||||
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
figlet -f future proclaim - bunkchat
|
|
||||||
echo "You may view old chat with 'scry', heathen."
|
|
||||||
echo "-------------------------------------------"
|
|
||||||
read -r -p "speak to the server: " text
|
|
||||||
makeSlug
|
|
||||||
echo "${prompt}: $text" >> /srv/bunkchat.txt
|
|
||||||
clear
|
|
||||||
done
|
|
|
@ -6,11 +6,8 @@ tmux wraps some hand-rolled local chat scripts, and the`bunkdeck` command starts
|
||||||
|
|
||||||
bunkdeck is comprised of these lil things:
|
bunkdeck is comprised of these lil things:
|
||||||
* `bunkdeck` - run this command to start the interface
|
* `bunkdeck` - run this command to start the interface
|
||||||
* `proclaim` - post in chat
|
* `bunkchat` - the actual chat functionality [git](https://git.bunk.computer/bunk/bunkchat)
|
||||||
* `heed` - read the chat
|
|
||||||
* `scry` - read the old chat
|
|
||||||
|
|
||||||
on the server, these are all installed in `/usr/local/bin` so everyone can run them
|
on the server, these are all installed in `/usr/local/bin` so everyone can run them
|
||||||
|
|
||||||
the file they all interact with, `/srv/bunkchat.txt` has permissions such that everyone can read and write to it
|
the file they all interact with, `/var/log/bunkchat/chat.log` is append-only
|
||||||
|
|
||||||
|
|
3
scry
3
scry
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh -e
|
|
||||||
|
|
||||||
less /srv/bunkchat.txt
|
|
40
uninstall.sh
Executable file
40
uninstall.sh
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
installtarget=/usr/local/bin
|
||||||
|
|
||||||
|
# check for root perms
|
||||||
|
if ! [ "$(id -u)" = 0 ]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: please run install with root permissions"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "uninstalling bunkdeck"
|
||||||
|
echo
|
||||||
|
printf "also uninstall bunkchat commands? (y/N): "
|
||||||
|
read -r response
|
||||||
|
case $response in
|
||||||
|
n)
|
||||||
|
rm ${installtarget}/bunkdeck
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
rm ${installtarget}/bunkdeck
|
||||||
|
;;
|
||||||
|
y)
|
||||||
|
(../bunkchat/uninstall.sh)
|
||||||
|
# 2>/dev/null || \
|
||||||
|
# echo && echo "ERROR: couldn't run bunkchat uninstall script" && exit 1
|
||||||
|
rm ${installtarget}/bunkdeck
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo
|
||||||
|
echo "ERROR: invalid response"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "SUCCESS: bunkdeck uninstalled"
|
||||||
|
echo " remember to clean up crontab /root/crontab-scripts/delete-bunkchat.sh"
|
||||||
|
exit 0
|
Loading…
Reference in a new issue