Compare commits
No commits in common. "master" and "master" have entirely different histories.
12
.drone.yml
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
kind: pipeline
|
||||
name: shellcheck
|
||||
|
||||
steps:
|
||||
- name: shellcheck
|
||||
image: koalaman/shellcheck-alpine:stable
|
||||
commands:
|
||||
- shellcheck bin/*
|
||||
- shellcheck efingerd/*
|
||||
- shellcheck completion/*
|
||||
- shellcheck update-motd/*
|
|
@ -1,3 +0,0 @@
|
|||
language: shell
|
||||
script:
|
||||
- bash -c 'shopt -s globstar; shellcheck {bin,efingerd,completion,update-motd}/*'
|
84
Makefile
|
@ -1,84 +0,0 @@
|
|||
help:
|
||||
@echo "targets:"
|
||||
@awk -F '#' '/^\w+:.*?#/ { print $0 }' $(MAKEFILE_LIST) \
|
||||
| sed -n 's/^\(.*\): \(.*\)#\(.*\)/ \1|-\3/p' \
|
||||
| column -t -s '|'
|
||||
|
||||
install: apt bin templates man completion files efingerd menu postfix updatemotd source # install everything
|
||||
.PHONY: help apt bin templates man completion files efingerd menu postfix updatemotd source
|
||||
|
||||
apt: # install all apt packages
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||
if [ ! -f "/etc/apt/sources.list.d/yarn.list" ]; then \
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list; \
|
||||
fi
|
||||
xargs -a pkglist sudo apt install -y
|
||||
|
||||
source: # clone all manual source packages to /var/packages
|
||||
@while IFS= read -r line; do \
|
||||
name=$$(printf "%s" "$$line" | awk -F "\t" '{print $$1}'); \
|
||||
repo=$$(printf "%s" "$$line" | awk -F "\t" '{print $$2}'); \
|
||||
dir="/var/packages/$${name}"; \
|
||||
if [ ! -d "$$dir" ]; then \
|
||||
mkdir -p "$$dir"; \
|
||||
git clone "$$repo" "$$dir"; \
|
||||
else \
|
||||
printf "%s already cloned\\n" "$${name}"; \
|
||||
fi; \
|
||||
done < "pkglist-source"
|
||||
|
||||
bin: # link bin scripts to /usr/local/bin
|
||||
stow -t "/usr/local/bin" bin
|
||||
|
||||
templates: # link template files
|
||||
mkdir -p "/etc/templates"
|
||||
stow -t "/etc/templates" templates
|
||||
|
||||
man: # link system man pages
|
||||
mkdir -p "/usr/share/man/man1"
|
||||
stow -t "/usr/share/man/man1" man
|
||||
|
||||
completion: # add bash completions
|
||||
mkdir -p "/etc/bash_completion.d"
|
||||
stow -t "/etc/bash_completion.d" completion
|
||||
|
||||
files: # link miscellaneous files
|
||||
mkdir -p "/usr/share/games/fortunes"
|
||||
cd files && stow -t "/usr/share/games/fortunes" fortunes
|
||||
|
||||
efingerd: # install finger scripts
|
||||
mkdir -p "/etc/efingerd"
|
||||
stow -t "/etc/efingerd" efingerd
|
||||
|
||||
updatemotd: # link motd files
|
||||
mkdir -p "/etc/update-motd.d"
|
||||
stow -t "/etc/update-motd.d" update-motd
|
||||
sudo chown -R root /etc/update-motd.d
|
||||
|
||||
menu: # install the system interactive menu
|
||||
stow -t "/etc" menu
|
||||
|
||||
postfix: # set up postfix for tilde-only email
|
||||
if ! grep -q 'transport_maps' "/etc/postfix/main.cf"; then \
|
||||
printf "transport_maps = hash:/etc/postfix/transport\n" >> "/etc/postfix/main.cf"; \
|
||||
printf "smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/access, reject" >> "/etc/postfix/main.cf"; \
|
||||
fi
|
||||
stow -t "/etc/postfix" postfix
|
||||
sudo chown root /etc/postfix/transport
|
||||
sudo chown root /etc/postfix/access
|
||||
postmap /etc/postfix/transport
|
||||
postmap /etc/postfix/access
|
||||
postfix reload
|
||||
|
||||
uninstall: # uninstall everything we've installed from this repo
|
||||
stow -t "/usr/local/bin" -D bin
|
||||
stow -t "/etc/templates" -D templates
|
||||
stow -t "/usr/share/man/man1/" -D man
|
||||
stow -t "/etc/bash_completion.d" -D completion
|
||||
stow -t "/etc/efingerd" -D efingerd
|
||||
stow -t "/etc" -D menu
|
||||
stow -t "/etc/postfix" -D postfix
|
||||
stow -t "/etc/update-motd.d" -D update-motd
|
||||
stow -t "/etc" -D menu
|
||||
cd files && stow -t "/usr/share/games/fortunes" -D fortunes
|
||||
|
37
README.md
|
@ -1,3 +1,36 @@
|
|||
# cosmic.voyage scripts ![status](https://travis-ci.com/jamestomasino/cosmic.svg?branch=master) [![Build Status](https://drone.tildegit.org/api/badges/cosmic/cosmic/status.svg)](https://drone.tildegit.org/cosmic/cosmic)
|
||||
# cosmic.voyage scripts
|
||||
|
||||
These are the scripts and files designed for https://cosmic.voyage. They're stored here for public review and collaboration.
|
||||
## bin
|
||||
|
||||
For admin:
|
||||
|
||||
- `cosmic-backup` cron-run backup of /var/gopher to git repo
|
||||
- `cosmic-rss` cron-run creation of rss feed for web and gopher
|
||||
- `cosmic-ship` create a new ship and assign it to a given user
|
||||
- `cosmic-user` create a new user and scaffold them into the story
|
||||
- `cosmic-web` cron-run creation of html version of the story
|
||||
|
||||
For users:
|
||||
|
||||
- `cosmic-log` aliased as `log` - submit messages to the QEC relay
|
||||
- `cosmic-motd` aliased as `motd` - pretty-prints the motd
|
||||
- `cosmic-roster` aliased as `roster` - show current users and their ships
|
||||
|
||||
## files
|
||||
|
||||
- `motd` message of the day, records recent updates to the system
|
||||
- `favicon.ico` website favicon for https://cosmic.voyage
|
||||
|
||||
## templates
|
||||
|
||||
- `web-header.tmpl` - template for web generation
|
||||
- `newship.tmpl` - email template for adding new ship for user
|
||||
- `welcomeemail.tmpl` - email template for new users added to system
|
||||
|
||||
## manpages
|
||||
|
||||
- `cosmic-log` aliased as `log`
|
||||
|
||||
## bash-completion
|
||||
|
||||
- `cosmic-log` aliased as `log`
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
#!/usr/bin/awk -f
|
||||
|
||||
BEGIN {
|
||||
FS = "\t"
|
||||
RS = "\n" # techincally \r\n, but servers mess this up
|
||||
OFS = " "
|
||||
ORS = "\n"
|
||||
isFenced = 0
|
||||
}
|
||||
|
||||
{
|
||||
gsub(/\r/,"") # handle trailing windows line endings from GOOD servers
|
||||
type=substr($1,1,1)
|
||||
label=substr($1,2)
|
||||
path=$2
|
||||
server=$3
|
||||
port=$4
|
||||
gsub(/ /,"%20", path) # spaces in URLs work in gopher, but not gemini
|
||||
|
||||
if ( type == "." ) {} # end of file, don't display
|
||||
else if ( type == "i" ) {
|
||||
# print label only
|
||||
if (label ~ /^#{1,3}\s/ ) {
|
||||
# In a heading, end fence
|
||||
if (isFenced) {
|
||||
print "```"
|
||||
isFenced=0
|
||||
}
|
||||
} else if (label ~ /^\*\s/) {
|
||||
# In a bullet list, end fence
|
||||
if (isFenced) {
|
||||
print "```"
|
||||
isFenced=0
|
||||
}
|
||||
} else {
|
||||
# not in special line, fence it
|
||||
if (!(isFenced)) {
|
||||
print "```"
|
||||
isFenced=1
|
||||
}
|
||||
}
|
||||
print label
|
||||
} else if ( type == "h") {
|
||||
# html links
|
||||
if (isFenced) {
|
||||
# end fences for links
|
||||
print "```"
|
||||
isFenced=0
|
||||
}
|
||||
url = substr(path, 5)
|
||||
printf("=> %s %s\n", url, label)
|
||||
} else if ( type == "T") {
|
||||
# telnet links
|
||||
if (isFenced) {
|
||||
# end fences for links
|
||||
print "```"
|
||||
isFenced=0
|
||||
}
|
||||
printf("=> telnet://%s:%s/%s%s %s\n", server, port, type, path, label)
|
||||
} else {
|
||||
# any other gopher type
|
||||
if (isFenced) {
|
||||
# end fences for links
|
||||
print "```"
|
||||
isFenced=0
|
||||
}
|
||||
if (server) {
|
||||
printf("=> gemini://%s%s %s\n", server, path, label)
|
||||
} else {
|
||||
printf("=> %s %s\n", path, label)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
if (isFenced) {
|
||||
# properly end fences if we're in one
|
||||
print "```"
|
||||
}
|
||||
}
|
96
bin/alone
|
@ -1,96 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import argparse
|
||||
import string
|
||||
import random
|
||||
|
||||
def living():
|
||||
l=["people like or unlike you",
|
||||
"fish",
|
||||
"dinosaurs",
|
||||
"wolves",
|
||||
"birds",
|
||||
"giant insects"]
|
||||
return random.choice(l)
|
||||
|
||||
def plants():
|
||||
l=["towering trees"
|
||||
"carnivorous pitchers",
|
||||
"giant ferns",
|
||||
"glowing weeds",
|
||||
"floating flowers",
|
||||
"oozing mushrooms"]
|
||||
return random.choice(l)
|
||||
|
||||
def ruins():
|
||||
l=["mysterious obelisks",
|
||||
"vine-covered temples",
|
||||
"abandoned dwellings for people bigger than you",
|
||||
"a wrecked spaceship, etc."]
|
||||
return random.choice(l)
|
||||
|
||||
def nature():
|
||||
l=["huge crystal formations",
|
||||
"mirages",
|
||||
"vividly colored lightning",
|
||||
"strange clouds",
|
||||
"rocks eroded in strange shapes",
|
||||
"veins of precious metals"]
|
||||
return random.choice(l)
|
||||
|
||||
what=[{ "label": "living beings", "example": living},
|
||||
{ "label": "plants or other immobile forms of life", "example": plants},
|
||||
{ "label": "ruins", "example": ruins },
|
||||
{ "label": "natural phenomena", "example": nature}]
|
||||
|
||||
where=[
|
||||
"In a field taller than you",
|
||||
"Under the light of the moon(s)",
|
||||
"By a gentle river",
|
||||
"In a steep canyon",
|
||||
"In a treetop",
|
||||
"On the snowy peak of a mountain",
|
||||
"Near a volcano",
|
||||
"On a glacier",
|
||||
"Deep underground",
|
||||
"On a cliff face",
|
||||
"In the desert",
|
||||
"In deep water",
|
||||
"Floating in the air"]
|
||||
|
||||
difficulty=["It was arduous to get to:", "You come upon it suddenly:", "You spot it as you are resting:"]
|
||||
|
||||
def main():
|
||||
discoveries = random.choice(range(1, 6))
|
||||
name = ''.join(random.choice(string.ascii_uppercase) for _ in range(3)) + ''.join(random.choice(string.digits) for _ in range(3)) + "-" + ''.join(random.choice(string.digits) for _ in range(1))
|
||||
print("Planet " + name)
|
||||
print("(" + str(discoveries) + " discoveries to find)")
|
||||
print("\n- - - - -\n")
|
||||
for i in range(discoveries):
|
||||
subject = random.choice(what)
|
||||
diff = random.choice(difficulty)
|
||||
print("Discovery " + str(i + 1) + ":")
|
||||
print(diff + " " + random.choice(where) + " you discover " + subject["label"] + ", such as " + subject["example"]())
|
||||
if (i < discoveries - 1):
|
||||
print("")
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--about', action="store_true", help="About Alone Among the Stars")
|
||||
args = parser.parse_args()
|
||||
if args.about:
|
||||
print("""Alone Among the Stars
|
||||
By Takuma Okada | noroadhome.itch.io
|
||||
|
||||
A solo roleplaying game about exploring fantastic planets
|
||||
|
||||
You are a solitary adventurer, hopping from planet to planet exploring. Each
|
||||
world has unique features for you to discover and record.
|
||||
|
||||
In your ship's log, record a short description and your reaction in a few
|
||||
sentences, and move on to the next discovery. Each time you complete a planet,
|
||||
give it a name if it needs one, and find a new planet.
|
||||
""")
|
||||
|
||||
else:
|
||||
main()
|
62
bin/atom
|
@ -1,62 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
gopher_atom="/var/gopher/atom.xml"
|
||||
|
||||
######################################################################
|
||||
########################## GOPHER VERSION ###########################
|
||||
######################################################################
|
||||
|
||||
# Add header info to xml output
|
||||
{
|
||||
printf "<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n"
|
||||
printf "<feed xmlns=\"http://www.w3.org/2005/Atom\">\\n"
|
||||
printf "<title>Cosmic Voyage</title>\\n"
|
||||
printf "<subtitle>Messages from the human stellar diaspora</subtitle>\\n"
|
||||
printf "<link rel=\"alternate\" href=\"gopher://cosmic.voyage/\"/>\\n"
|
||||
printf "<link rel=\"self\" href=\"gopher://cosmic.voyage/atom.xml\" />\\n"
|
||||
firstlog=$(head -n1 "/var/gopher/listing.gophermap" | awk -F'\t' '{print $2}')
|
||||
printf "<updated>%s</updated>\\n" "$(date -d "$(stat -c %y "/var/gopher${firstlog}")" +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
printf "<rights>©2021 All rights reserved</rights>\\n"
|
||||
printf "<id>gopher://cosmic.voyage/</id>\\n"
|
||||
} > "${gopher_atom}"
|
||||
|
||||
xml_escape_script='s/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g'
|
||||
|
||||
# Loop through listings gophermap
|
||||
loop=0
|
||||
while read -r line; do
|
||||
loop=$((loop+1))
|
||||
if [ "$loop" -lt 20 ]; then
|
||||
log=$(printf "%s" "$line" | awk -F'\t' '{print $2}')
|
||||
title=$(printf "%s" "$line" | awk -F'\t' '{print $1}' | sed -e 's|^.||' -e "$xml_escape_script")
|
||||
owner=$(stat -c %U "/var/gopher${log}")
|
||||
|
||||
# print item entry for each log
|
||||
{
|
||||
printf "<entry>\\n"
|
||||
printf " <title>%s</title>\\n" "$title"
|
||||
printf " <author>\\n"
|
||||
printf " <name>%s</name>\\n" "$owner"
|
||||
printf " </author>\\n"
|
||||
printf " <link rel=\"alternate\" href=\"gopher://cosmic.voyage/0%s\"/>\\n" "$(printf "%s" "$log" | sed 's|\ |%20|g')"
|
||||
printf " <id>gopher://cosmic.voyage/0%s</id>\\n" "$(printf "%s" "$log" | sed 's|\ |%20|g')"
|
||||
printf " <updated>%s</updated>\\n" "$(date -d "$(stat -c %y "/var/gopher${log}")" +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
printf " <content type=\"html\"><![CDATA[<pre>\\n"
|
||||
sed "$xml_escape_script" "/var/gopher${log}"
|
||||
printf "</pre>]]></content>\\n"
|
||||
printf "</entry>\\n"
|
||||
|
||||
} >> "${gopher_atom}"
|
||||
fi
|
||||
done < "/var/gopher/listing.gophermap"
|
||||
|
||||
# close up the footer
|
||||
{
|
||||
printf "</feed>\\n"
|
||||
} >> "${gopher_atom}"
|
||||
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
|
@ -1,45 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -un)
|
||||
if [ "$run_user" = "root" ] || [ "$run_user" = "publish" ]; then
|
||||
author_index="/var/www/authors/index.html"
|
||||
{
|
||||
printf "<!DOCTYPE html>\\n"
|
||||
printf "<html lang=\"en\">\\n"
|
||||
printf " <head>\\n"
|
||||
printf " <meta charset=utf-8>\\n"
|
||||
printf " <meta http-equiv=X-UA-Compatible content=\"IE=edge\">\\n"
|
||||
printf " <meta name=viewport content=\"shrink-to-fit=no,width=device-width,height=device-height,initial-scale=1,user-scalable=1\">\\n"
|
||||
printf " <title>Cosmic Voyage - Authors</title>\\n"
|
||||
printf " <link rel=\"stylesheet\" href=\"/styles.css\">\\n"
|
||||
printf " <link rel=\"canonical\" href=\"https://authors.cosmic.voyage\">\\n"
|
||||
printf " <meta name=\"description\" content=\"Cosmic Voyage is a public-access unix system and tilde community based around a collaborative science-fiction universe. Users write stories as the people aboard ships, colonies, and outposts, using the only remaining free, interconnected network that unites the dispersed peoples of the stars.\">\\n"
|
||||
printf " </head>\\n"
|
||||
printf " <body>\\n"
|
||||
printf " <div class=\"page-wrapper\">\\n"
|
||||
printf "<pre class=\"inner-wrapper\">\\n"
|
||||
printf " _. _ __._ _ * _. . , _ . _. _ _\\n"
|
||||
printf " (_.(_)_) [ | )|(_. \/ (_)\_|(_](_](/,\\n"
|
||||
printf " ._| ._|\\n"
|
||||
printf " , .\\n"
|
||||
printf " _.. .-+-|_ _ ._ __\\n"
|
||||
printf " (_](_| | [ )(_)[ _)\\n"
|
||||
printf "\\n\\n"
|
||||
} > "${author_index}"
|
||||
|
||||
web_paths="/home/*/public_html"
|
||||
for i in ${web_paths}; do
|
||||
if [ -d "$i" ]; then
|
||||
username="$(basename "$(dirname "$i")")"
|
||||
printf "* <a href=\"/~%s/\">~%s</a>\\n" "${username}" "${username}" >> "${author_index}"
|
||||
fi
|
||||
done
|
||||
|
||||
{
|
||||
printf "</pre>\\n"
|
||||
printf "</body>\\n"
|
||||
printf "</html>"
|
||||
} >> "${author_index}"
|
||||
else
|
||||
exec sudo -u publish "$0" "$@"
|
||||
fi
|
10
bin/backup
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
rsync -avzh --delete --include=".description" --exclude=".*" /var/gopher/ /var/cosmic-backup/gopher/
|
||||
rsync -avzh --delete --exclude=".*" /var/wiki/ /var/cosmic-backup/wiki/
|
||||
cd /var/cosmic-backup || exit
|
||||
rm ./gopher/rss.xml # skip archival of rss feed
|
||||
rm ./gopher/atom.xml # skip archival of atom feed
|
||||
git add .
|
||||
git commit -m "backup"
|
||||
git push origin master
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
/usr/bin/python3 /opt/botany/botany.py
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
fortune | figlet -c -w 80 -f slant | nms -a
|
2
bin/chat
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
/usr/bin/weechat -r "/set irc.look.temporary_servers on; /connect irc://$(whoami)@localhost:6667/#meta,#cosmic"
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
rsync -avzh --delete --exclude=".*" /var/gopher/ /var/cosmic-backup/gopher/
|
||||
cd /var/cosmic-backup/gopher/ || exit
|
||||
git add .
|
||||
git commit -m 'backup'
|
||||
git push origin master
|
|
@ -0,0 +1,266 @@
|
|||
#!/bin/sh
|
||||
|
||||
# TODO: create new messages for ship using templates
|
||||
# TODO: better isolate listings.gophermap from accidental clobbering
|
||||
|
||||
SCRIPT=$(readlink -f "$0")
|
||||
SCRIPTPATH=$(dirname "$SCRIPT")
|
||||
|
||||
die () {
|
||||
msg="$1"
|
||||
code="$2"
|
||||
# exit code defaults to 1
|
||||
if printf "%s" "$code" | grep -q '^[0-9]+$'; then
|
||||
code=1
|
||||
fi
|
||||
# output message to stdout or stderr based on code
|
||||
if [ -n "$msg" ]; then
|
||||
if [ "$code" -eq 0 ]; then
|
||||
printf "%s\\n" "$msg"
|
||||
else
|
||||
printf "%s\\n" "$msg" >&2
|
||||
fi
|
||||
fi
|
||||
exit "$code"
|
||||
}
|
||||
|
||||
finish () {
|
||||
rm -f "$tmp"
|
||||
}
|
||||
trap finish EXIT
|
||||
|
||||
parse_input () {
|
||||
if ! parsed=$(getopt "$arg_options" "$@"); then
|
||||
die "Invalid input" 2
|
||||
fi
|
||||
|
||||
eval set -- "$parsed"
|
||||
|
||||
while true; do
|
||||
case "$1" in
|
||||
-h)
|
||||
flag_help=1
|
||||
arg_log=0
|
||||
shift
|
||||
;;
|
||||
-v)
|
||||
flag_version=1
|
||||
arg_log=0
|
||||
shift
|
||||
;;
|
||||
-d)
|
||||
flag_debug=1
|
||||
arg_log=0
|
||||
shift
|
||||
;;
|
||||
-s)
|
||||
shift
|
||||
arg_ship="$1"
|
||||
shift
|
||||
;;
|
||||
-z)
|
||||
flag_shortlist=1
|
||||
shift
|
||||
;;
|
||||
-n)
|
||||
arg_log=0
|
||||
shift
|
||||
arg_new="$1"
|
||||
shift
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
die "Internal error: $1" 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
show_help () {
|
||||
printf "%s [-hvd] [-s shipname]\\n\\n" "$(basename "$0")"
|
||||
printf " -h Show this help\\n"
|
||||
printf " -v Show current version info\\n"
|
||||
printf " -d Debug mode\\n"
|
||||
printf " -s [shipname] Only log messages for ship named\\n"
|
||||
printf " -n [filename] Create new message with filename\\n"
|
||||
printf " (Users with multiple ships must use -s)\\n"
|
||||
printf "\\n"
|
||||
printf "Passing no options will enter interactive mode.\\n\\n"
|
||||
printf "\\n"
|
||||
}
|
||||
|
||||
read_key () {
|
||||
_key=
|
||||
if [ -t 0 ]; then
|
||||
if [ -z "$_stty" ]; then
|
||||
_stty=$(stty -g)
|
||||
fi
|
||||
stty -echo -icanon min 1
|
||||
_key=$(dd bs=1 count=1 2>/dev/null)
|
||||
stty "$_stty"
|
||||
fi
|
||||
}
|
||||
|
||||
yesno () {
|
||||
read_key
|
||||
case $_key in
|
||||
y ) result=0 ;;
|
||||
* ) result=1 ;;
|
||||
esac
|
||||
return $result
|
||||
}
|
||||
|
||||
check_log () {
|
||||
ship="$*"
|
||||
printf ">> %s" "${ship}"
|
||||
# look at log entries in gophermap
|
||||
# compare against files in ship directory
|
||||
# store list of unpublished logs
|
||||
logs=$(grep "^0${ship}" "/var/gopher/listing.gophermap" | awk -F'\t' '{print $2}')
|
||||
files=$(find "/var/gopher/$ship" -regex ".*\\.txt$" -not -path '*/\.*' -type f | sed 's|/var/gopher||')
|
||||
uniq=$(printf "%s\\n%s" "$logs" "$files" | sort | uniq -u)
|
||||
|
||||
if [ -z "$uniq" ]; then
|
||||
printf " .... No messages.\\n"
|
||||
else
|
||||
# check each unpublished message for sending
|
||||
IFS='
|
||||
'
|
||||
for u in $uniq
|
||||
do
|
||||
printf "\\n Send message %s? " "$(basename "$u" | sed 's/\.[^.]*$//')"
|
||||
if yesno; then
|
||||
# prompt for title and prepare output
|
||||
printf "\\n Title for message %s? " "$(basename "$u" | sed 's/\.[^.]*$//')"
|
||||
read -r title
|
||||
if [ ! -z "$title" ]; then
|
||||
printf "0%s - %s\\t%s\\n" "$ship" "$title" "$u" | cat - /var/gopher/listing.gophermap > "$tmp" && cat "$tmp" > /var/gopher/listing.gophermap && rm "$tmp"
|
||||
printf "\\n %s - %s .... Sent.\\n" "$(basename "$u" | sed 's/\.[^.]*$//')" "$title"
|
||||
else
|
||||
printf " %s .... No title, abort.\\n" "$(basename "$u" | sed 's/\.[^.]*$//')"
|
||||
fi
|
||||
else
|
||||
printf "\\n %s .... Skipped.\\n" "$(basename "$u" | sed 's/\.[^.]*$//')"
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
}
|
||||
|
||||
new_message () {
|
||||
ship="$1"
|
||||
post_file="/var/gopher/${ship}/${2}"
|
||||
template_file="/var/gopher/${ship}/.template"
|
||||
temp_post=$(mktemp -t "$(basename "$0").post.XXXXXXX") || die "Failed to create temporary file" 1
|
||||
if [ -f "$post_file" ]; then
|
||||
cp "$post_file" "$temp_post"
|
||||
elif [ -f "$template_file" ]; then
|
||||
cp "$template_file" "$temp_post"
|
||||
fi
|
||||
temp_post_time=$(stat -c %Y "$temp_post")
|
||||
${EDITOR:-nano} "$temp_post"
|
||||
temp_post_time_check=$(stat -c %Y "$temp_post")
|
||||
if [ "$temp_post_time" -ne "$temp_post_time_check" ] ; then
|
||||
printf "Drafted message %s (%s)\\n" "$2" "$1"
|
||||
touch "${post_file}"
|
||||
cat "${temp_post}" > "${post_file}"
|
||||
rm "${temp_post}"
|
||||
else
|
||||
printf "Aborted message.\\n"
|
||||
rm "${temp_post}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
parse_input "$@"
|
||||
|
||||
# debug
|
||||
if [ $flag_debug -gt 0 ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
# shortlist for bash completion
|
||||
if [ $flag_shortlist -gt 0 ]; then
|
||||
out="$ships"
|
||||
die "${out}" 0
|
||||
fi
|
||||
|
||||
# version
|
||||
if [ $flag_version -gt 0 ]; then
|
||||
printf "%s\\n" "$version"
|
||||
fi
|
||||
|
||||
# print help
|
||||
if [ $flag_help -gt 0 ]; then
|
||||
show_help
|
||||
fi
|
||||
|
||||
# standard log if no params
|
||||
if [ $arg_log -gt 0 ]; then
|
||||
printf "INITIALIZING QEC...\\n"
|
||||
printf "Ready to transmit for [%s]\\n" "${user}"
|
||||
if [ "$numships" -eq 0 ]; then
|
||||
printf "No registered ships found in system.\\n"
|
||||
elif [ "$numships" -eq 1 ]; then
|
||||
if [ -z "$arg_ship" ] || [ "$ships" = "$arg_ship" ]; then
|
||||
check_log "$ships"
|
||||
fi
|
||||
else
|
||||
IFS='
|
||||
'
|
||||
for f in $ships
|
||||
do
|
||||
if [ -z "$arg_ship" ] || [ "$f" = "$arg_ship" ]; then
|
||||
check_log "$(basename "$f")"
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
fi
|
||||
|
||||
# new message
|
||||
if [ ! -z "$arg_new" ]; then
|
||||
if [ "$numships" -eq 0 ]; then
|
||||
printf "No registered ships found in system.\\n"
|
||||
elif [ "$numships" -eq 1 ]; then
|
||||
if [ -z "$arg_ship" ] || [ "$ships" = "$arg_ship" ]; then
|
||||
new_message "$ships" "$arg_new"
|
||||
fi
|
||||
else
|
||||
IFS='
|
||||
'
|
||||
for f in $ships
|
||||
do
|
||||
if [ "$f" = "$arg_ship" ]; then
|
||||
new_message "$arg_ship" "$arg_new"
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
|
||||
version="0.1.0"
|
||||
user=$(whoami)
|
||||
ships=$(find /var/gopher -user "$user" -type d -exec basename {} \;)
|
||||
numships=$(echo "${ships}" | wc -l)
|
||||
tmp=$(mktemp -t "$(basename "$0").tmp.XXXXXXX") || die "Failed to create temporary file" 1
|
||||
|
||||
flag_help=0
|
||||
flag_version=0
|
||||
flag_debug=0
|
||||
flag_shortlist=0
|
||||
|
||||
arg_options="hvds:zn:"
|
||||
arg_log=1
|
||||
arg_ship=""
|
||||
arg_new=""
|
||||
|
||||
main "$@"
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
lolcat /etc/motd
|
|
@ -14,13 +14,13 @@ temp_roster=$(mktemp -t "$(basename "$0").roster.XXXXXXX") || exit 1
|
|||
find "/var/gopher/" -maxdepth 1 ! -path "/var/gopher/" ! -path "/var/gopher/ships" ! -path "/var/gopher/log" -type d | while read -r shipdir
|
||||
do
|
||||
owner=$(stat -c %U "$shipdir")
|
||||
printf "%s%%%%%s\\n" "$owner" "$(basename "$shipdir")" >> "$temp_roster"
|
||||
printf "%s|%s\\n" "$owner" "$(basename "$shipdir")" >> "$temp_roster"
|
||||
done
|
||||
|
||||
if [ "$#" -ne 1 ]; then
|
||||
sort "$temp_roster" | column -s "%%" -t
|
||||
sort "$temp_roster" | column -s "|" -t
|
||||
elif [ "$1" = "count" ]; then
|
||||
sort "$temp_roster" | awk -F "%%" '{print $1}' | uniq -c
|
||||
sort "$temp_roster" | awk 'FS="|" {print $1}' | uniq -c
|
||||
else
|
||||
sort "$temp_roster" | column -s "%%" -t | grep -i "$*"
|
||||
sort "$temp_roster" | column -s "|" -t | grep -i "$*"
|
||||
fi
|
|
@ -0,0 +1,91 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
file_rss="/var/www/html/rss.xml"
|
||||
gopher_rss="/var/gopher/rss.xml"
|
||||
|
||||
######################################################################
|
||||
############################# HTML VERSION ###########################
|
||||
######################################################################
|
||||
|
||||
# Add header info to xml output
|
||||
{
|
||||
printf '<?xml version="1.0"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>'
|
||||
printf '<atom:link href="https://cosmic.voyage/rss.xml" rel="self" type="application/rss+xml" />'
|
||||
printf "\\n<title>Cosmic Voyage</title>\\n"
|
||||
printf "<link>https://cosmic.voyage</link>\\n"
|
||||
printf "<description>Messages from the human stellar diaspora</description>\\n"
|
||||
} > "${file_rss}"
|
||||
|
||||
# Loop through listings gophermap
|
||||
while read -r line; do
|
||||
log=$(printf "%s" "$line" | awk -F'\t' '{print $2}')
|
||||
title=$(printf "%s" "$line" | awk -F'\t' '{print $1}' | sed 's|^.||')
|
||||
owner=$(stat -c %U "/var/gopher${log}")
|
||||
|
||||
# print item entry for each log
|
||||
{
|
||||
printf "<item>\\n"
|
||||
printf " <title>%s</title>\\n" "$title"
|
||||
printf " <author>%s@cosmic.voyage (%s)</author>\\n" "$owner" "$owner"
|
||||
printf " <link>https://cosmic.voyage%s</link>\\n" "$(printf "%s" "$log" | sed 's|.txt$|.html|' | sed 's|\ |%20|')"
|
||||
printf " <guid>https://cosmic.voyage%s</guid>\\n" "$(printf "%s" "$log" | sed 's|.txt$|.html|' | sed 's|\ |%20|')"
|
||||
printf " <pubDate>%s GMT</pubDate>\\n" "$(date -d "$(stat -c %y "/var/gopher${log}")" +'%a, %d %b %Y %H:%M:%S')"
|
||||
printf " <description><![CDATA[<pre>\\n"
|
||||
sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' "/var/gopher${log}"
|
||||
printf "</pre>]]></description>\\n"
|
||||
printf "</item>\\n"
|
||||
} >> "${file_rss}"
|
||||
done < "/var/gopher/listing.gophermap"
|
||||
|
||||
# close up the footer
|
||||
{
|
||||
printf "</channel>\\n"
|
||||
printf "</rss>\\n"
|
||||
} >> "${file_rss}"
|
||||
|
||||
|
||||
######################################################################
|
||||
########################## GOPHER VERSION ###########################
|
||||
######################################################################
|
||||
|
||||
# Add header info to xml output
|
||||
{
|
||||
printf '<?xml version="1.0"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>'
|
||||
printf '<atom:link href="gopher://cosmic.voyage/0/rss.xml" rel="self" type="application/rss+xml" />'
|
||||
printf "\\n<title>Cosmic Voyage</title>\\n"
|
||||
printf "<link>gopher://cosmic.voyage</link>\\n"
|
||||
printf "<description>Messages from the human stellar diaspora</description>\\n"
|
||||
} > "${gopher_rss}"
|
||||
|
||||
# Loop through listings gophermap
|
||||
while read -r line; do
|
||||
log=$(printf "%s" "$line" | awk -F'\t' '{print $2}')
|
||||
title=$(printf "%s" "$line" | awk -F'\t' '{print $1}' | sed 's|^.||')
|
||||
owner=$(stat -c %U "/var/gopher${log}")
|
||||
|
||||
# print item entry for each log
|
||||
{
|
||||
printf "<item>\\n"
|
||||
printf " <title>%s</title>\\n" "$title"
|
||||
printf " <author>%s@cosmic.voyage (%s)</author>\\n" "$owner" "$owner"
|
||||
printf " <link>gopher://cosmic.voyage/0%s</link>\\n" "$log"
|
||||
printf " <guid>gopher://cosmic.voyage/0%s</guid>\\n" "$log"
|
||||
printf " <pubDate>%s GMT</pubDate>\\n" "$(date -d "$(stat -c %y "/var/gopher${log}")" +'%a, %d %b %Y %H:%M:%S')"
|
||||
printf " <description><![CDATA[\\n"
|
||||
cat "/var/gopher${log}"
|
||||
printf "]]></description>\\n"
|
||||
printf "</item>\\n"
|
||||
} >> "${gopher_rss}"
|
||||
done < "/var/gopher/listing.gophermap"
|
||||
|
||||
# close up the footer
|
||||
{
|
||||
printf "</channel>\\n"
|
||||
printf "</rss>\\n"
|
||||
} >> "${gopher_rss}"
|
||||
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
|
@ -0,0 +1,41 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
n="$1"
|
||||
s="$2"
|
||||
if [ ! -z "$n" ]; then
|
||||
user_exists=$(id -u "${n}" 2> /dev/null)
|
||||
if [ ! -z "${user_exists}" ]; then
|
||||
if [ ! -z "${s}" ]; then
|
||||
path="/var/gopher/${s}"
|
||||
if [ ! -d "$path" ]; then
|
||||
printf "Creating ship '%s' for user '%s'\\n" "${s}" "${n}"
|
||||
# create ship directory in gopher and give ownership to user
|
||||
mkdir "$path"
|
||||
chmod 755 "$path"
|
||||
chown -R "${n}" "$path"
|
||||
# create ship listings dir and link to ship gophermap
|
||||
mkdir "/var/gopher/ships/${s}"
|
||||
ln -s "/var/gopher/ships/ship/gophermap" "/var/gopher/ships/${s}/gophermap"
|
||||
# create a symlink in user's home dir for easy access
|
||||
mkdir -p "/home/${n}/ships"
|
||||
ln -s "$path" "/home/${n}/ships/${s}"
|
||||
# notify user by email
|
||||
sed -e "s/username/${n}/g" -e "s/shipname/${s}/" /etc/newship.tmpl | sendmail "${n}" "tomasino"
|
||||
else
|
||||
owner=$(stat -c %U "$path")
|
||||
printf "That ship or colony already exists and is owned by %s\\n" "$owner"
|
||||
fi
|
||||
else
|
||||
printf "Specificy a ship or colony name.\\n"
|
||||
fi
|
||||
else
|
||||
printf "User not found.\\n"
|
||||
fi
|
||||
else
|
||||
printf "Specify a user.\\n"
|
||||
fi
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
|
@ -3,18 +3,18 @@
|
|||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
n="$1"
|
||||
k="$2"
|
||||
if [ -n "$n" ]; then
|
||||
# create user
|
||||
e="$2"
|
||||
k="$3"
|
||||
if [ ! -z "$n" ]; then
|
||||
user_exists=$(id -u "${n}" 2> /dev/null)
|
||||
if [ -z "${user_exists}" ]; then
|
||||
printf "Adding new user %s\\n" "${n}"
|
||||
newpw=$(pwgen -1B 10)
|
||||
pwcrypt=$(perl -e "print crypt('${newpw}', 'sa');")
|
||||
useradd -m -G users,www-data -p "$pwcrypt" -s /bin/bash "${n}" || exit 1
|
||||
sed -e "s/USERNAME/${n}/g" -e "s/PASSWORD/${newpw}/" /etc/templates/welcomemail.tmpl | sendmail "${n}"
|
||||
sed -e "s/newusername/${n}/g" -e "s/newpassword/${newpw}/" /etc/welcomemail.tmpl | sendmail "${n}" "${e}" "tomasino"
|
||||
fi
|
||||
if [ -n "${k}" ]; then
|
||||
if [ ! -z "${k}" ]; then
|
||||
printf "%s\\n" "${k}" >> "/home/${n}/.ssh/authorized_keys"
|
||||
else
|
||||
${EDITOR:-vim} "/home/${n}/.ssh/authorized_keys"
|
|
@ -0,0 +1,172 @@
|
|||
#!/bin/sh
|
||||
|
||||
entry_index () {
|
||||
line="$1"
|
||||
index=$2
|
||||
log=$(printf "%s" "$line" | awk -F'\t' '{print $2}')
|
||||
loghtml=$(printf "%s" "$log" | sed 's/\.[^.]*$//')
|
||||
logdir=$(dirname "$log")
|
||||
title=$(printf "%s" "$line" | awk -F'\t' '{print $1}' | sed 's|^.||')
|
||||
|
||||
# print link in listings
|
||||
if [ $index -lt 20 ]; then
|
||||
printf "<a href=\"%s.html\">>> %s</a>\\n" "$loghtml" "$title" >> "${file_html}"
|
||||
fi
|
||||
printf "<a href=\"%s.html\">>> %s</a>\\n" "$loghtml" "$title" >> "${log_html}"
|
||||
|
||||
# create entry
|
||||
entry_html="${html_dir}${loghtml}.html"
|
||||
mkdir -p "${html_dir}${logdir}"
|
||||
cat "$web_header_html" > "${entry_html}"
|
||||
{
|
||||
printf " <title>%s</title>\\n" "$title"
|
||||
printf " <link rel=\"canonical\" href=\"https://cosmic.voyage%s.html\">\\n" "$loghtml"
|
||||
printf "</head>\\n<body>\\n<div class=\"page-wrapper\"><pre class=\"inner-wrapper\">\\n"
|
||||
printf "<a href=\"/log\"><< BACK TO RELAY ONE LOG</a>\\n\\n\\n"
|
||||
sed 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g' "${gopher_dir}${log}"
|
||||
# close up the entry footer
|
||||
printf "</pre></div></body></html>"
|
||||
} >> "${entry_html}"
|
||||
}
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
SCRIPT=$(readlink -f "$0")
|
||||
SCRIPTPATH=$(dirname "$SCRIPT")
|
||||
|
||||
file_html="/var/www/html/index.html"
|
||||
log_html="/var/www/html/log/index.html"
|
||||
web_header_html="${SCRIPTPATH}/../templates/webheader.tmpl"
|
||||
ships_html="/var/www/html/ships/index.html"
|
||||
error_html="/var/www/html/error.html"
|
||||
html_dir="/var/www/html"
|
||||
gopher_dir="/var/gopher"
|
||||
|
||||
# Clear web folder
|
||||
rm -rf "${html_dir:-/var/www/html}/*"
|
||||
# Generate RSS
|
||||
# shellcheck source=cosmic-rss
|
||||
. "${SCRIPTPATH}/cosmic-rss"
|
||||
|
||||
# prep directories
|
||||
mkdir -p "$(dirname "${log_html}")"
|
||||
|
||||
# Add standard header
|
||||
cat "$web_header_html" > "${file_html}"
|
||||
cat "$web_header_html" > "${log_html}"
|
||||
|
||||
# Custom header elements and body start
|
||||
{
|
||||
printf "<title>Cosmic Voyage</title>"
|
||||
printf "<link rel=\"canonical\" href=\"https://cosmic.voyage\">"
|
||||
printf "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"Cosmic Voyage\" href=\"/rss.xml\">"
|
||||
printf "</head>"
|
||||
printf "<body>"
|
||||
printf "<div class=\"page-wrapper\">"
|
||||
printf "<pre class=\"inner-wrapper\">"
|
||||
# Intro text
|
||||
cat "${gopher_dir}/intro.gophermap"
|
||||
# Ship listings
|
||||
printf "\\n<a href=\"/log\">>> Complete Transmission Log</a>\\n"
|
||||
printf "<a href=\"/ships\">>> Ships, Colonies, Outposts</a>\\n"
|
||||
printf "<a href=\"/rss.xml\">>> RSS Feed</a>\\n\\n"
|
||||
# Logs
|
||||
printf "Most recent (20) log entries:\\n"
|
||||
} >> "${file_html}"
|
||||
|
||||
# Custom header elements and body start
|
||||
{
|
||||
printf "<title>Cosmic Voyage - Transmission Log</title>"
|
||||
printf "<link rel=\"canonical\" href=\"https://cosmic.voyage/log\">"
|
||||
printf "</head>"
|
||||
printf "<body>"
|
||||
printf "<div class=\"page-wrapper\">"
|
||||
printf "<pre class=\"inner-wrapper\">"
|
||||
printf "<a href=\"/\"><< BACK TO RELAY ONE</a>\\n\\n"
|
||||
# Intro text
|
||||
cat "${gopher_dir}/log/intro.gophermap"
|
||||
} >> "${log_html}"
|
||||
|
||||
# Loop through listings gophermap
|
||||
loop=0
|
||||
while read -r line; do
|
||||
loop=$((loop+1))
|
||||
entry_index "$line" $loop
|
||||
done < "${gopher_dir}/listing.gophermap"
|
||||
# footer
|
||||
{
|
||||
printf "</pre>\\n"
|
||||
printf "</div>\\n"
|
||||
printf "</body>\\n"
|
||||
printf "</html>"
|
||||
} | tee -a "${log_html}" >> "${file_html}"
|
||||
|
||||
# Generate ship pages
|
||||
mkdir -p "${html_dir}/ships"
|
||||
# Add header info to html output
|
||||
cat "$web_header_html" > "${ships_html}"
|
||||
# Custom header elements and body start
|
||||
{
|
||||
printf "<title>Cosmic Voyage - Ships</title>"
|
||||
printf "<link rel=\"canonical\" href=\"https://cosmic.voyage/ships\">"
|
||||
printf "</head>"
|
||||
printf "<body>"
|
||||
printf "<div class=\"page-wrapper\">"
|
||||
printf "<pre class=\"inner-wrapper\">"
|
||||
printf "<a href=\"/\"><< BACK TO RELAY ONE</a>\\n"
|
||||
ship_intro="${gopher_dir}/ships/ships.gophermap"
|
||||
if [ -f "$ship_intro" ]; then
|
||||
cat "$ship_intro"
|
||||
printf "\\n"
|
||||
fi
|
||||
} >> "${ships_html}"
|
||||
# Add header info to html output
|
||||
find "${gopher_dir}/" -maxdepth 1 ! -path "${gopher_dir}/" ! -path "${gopher_dir}/ships" ! -path "${gopher_dir}/log" -type d -print | sed 's|/var/gopher/||' | sort | while read -r ship
|
||||
do
|
||||
entry_num=$(grep -c "^0${ship}" "${gopher_dir}/listing.gophermap")
|
||||
if [ "$entry_num" != "0" ]; then
|
||||
printf "<a href=\"/ships/%s/\">>> %s (%s)</a>\\n" "$ship" "$ship" "$entry_num" >> "$ships_html"
|
||||
# Create individual ship log page
|
||||
ship_html="${html_dir}/ships/${ship}/index.html"
|
||||
mkdir -p "${html_dir}/ships/${ship}"
|
||||
# Add header info to html output
|
||||
cat "$web_header_html" > "${ship_html}"
|
||||
# Custom header elements and body start
|
||||
{
|
||||
printf "<title>Cosmic Voyage - %s</title>" "$ship"
|
||||
printf "<link rel=\"canonical\" href=\"https://cosmic.voyage/ships/%s\">" "$ship"
|
||||
printf "</head>"
|
||||
printf "<body>"
|
||||
printf "<div class=\"page-wrapper\">"
|
||||
printf "<pre class=\"inner-wrapper\">"
|
||||
# Contents
|
||||
printf "<a href=\"/ships\"><< BACK TO RELAY ONE SHIP LIST</a>\\n\\n\\n"
|
||||
desc="${gopher_dir}/${ship}/.description"
|
||||
if [ -f "$desc" ]; then
|
||||
cat "$desc"
|
||||
printf "\\n"
|
||||
fi
|
||||
printf "%s - Ship Log\\n" "$ship"
|
||||
grep "^0${ship}" "${gopher_dir}/listing.gophermap" | sed "s|0${ship} - ||" | awk -F"\\t" '{f=$2; gsub(".txt", ".html", f); printf "<a href=\"%s\">>> %s</a>\n", f, $1}'
|
||||
printf "</div></body></html>"
|
||||
} >> "${ship_html}"
|
||||
fi
|
||||
done
|
||||
# Footer
|
||||
{
|
||||
printf "</div>\\n"
|
||||
printf "</body>\\n"
|
||||
printf "</html>"
|
||||
} >> "${ships_html}"
|
||||
|
||||
# Print error page
|
||||
cat "$web_header_html" > "${error_html}"
|
||||
{
|
||||
printf "</head><body><div class=\"page-wrapper\"><pre class=\"inner-wrapper\"><a href=\"/\"><< BACK TO RELAY ONE</a>"
|
||||
printf "\\n\\n\\nERROR. TRANSMISSION NOT FOUND.</pre></div></body></html>"
|
||||
} >> "${error_html}"
|
||||
# copy favicon
|
||||
cp "${SCRIPTPATH}/../files/favicon.ico" "${html_dir}"
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
|
@ -1,27 +0,0 @@
|
|||
#!/bin/sh
|
||||
all_users=$(grep -E '1[0-9]{3}' "/etc/passwd" | grep 'home' | awk -F":" '{print $1}')
|
||||
|
||||
finish () {
|
||||
if [ -f "$temp_shiplist" ]; then
|
||||
rm "$temp_shiplist"
|
||||
fi
|
||||
}
|
||||
trap finish EXIT
|
||||
|
||||
# use temp file for accumulator
|
||||
temp_shiplist=$(mktemp -t "$(basename "$0").shiplist.XXXXXXX") || exit 1
|
||||
|
||||
# find all ship folders
|
||||
find "/var/gopher/" -maxdepth 1 ! -path "/var/gopher/" ! -path "/var/gopher/ships" ! -path "/var/gopher/log" -type d | while read -r shipdir
|
||||
do
|
||||
owner=$(stat -c %U "$shipdir")
|
||||
printf "%s\\n" "$owner" >> "$temp_shiplist"
|
||||
done
|
||||
|
||||
sort "$temp_shiplist" | uniq -c | sort -k1,1nr -k2,2n | awk '{print $1, $2}'
|
||||
|
||||
for u in $all_users; do
|
||||
if ! grep -q "$u" "$temp_shiplist"; then
|
||||
printf "0 %s\\n" "$u"
|
||||
fi
|
||||
done
|
|
@ -1,29 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
puzChoice="$1"
|
||||
localPuzzleDir="$HOME/.puzzles"
|
||||
systemPuzzleDir="/var/puzzles"
|
||||
|
||||
if [ -n "$puzChoice" ]; then
|
||||
if [ "$puzChoice" = "-h" ]; then
|
||||
printf "Run program without arguments for list of puzzles. Add puzzle name as argument to start puzzle.\\n"
|
||||
else
|
||||
sysPuzChoiceFile="${systemPuzzleDir}/${puzChoice}.puz"
|
||||
localPuzChoiceFile="${localPuzzleDir}/${puzChoice}.puz"
|
||||
if [ -f "$sysPuzChoiceFile" ]; then
|
||||
if [ ! -f "$localPuzChoiceFile" ]; then
|
||||
mkdir -p "$localPuzzleDir"
|
||||
cp "$sysPuzChoiceFile" "$localPuzChoiceFile"
|
||||
fi
|
||||
cursewords "$localPuzChoiceFile"
|
||||
else
|
||||
printf "puzzle not found.\\n"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
for f in "${systemPuzzleDir}"/*.puz; do
|
||||
puzzleFilename=$(basename "$f")
|
||||
puzzleName=${puzzleFilename%.*}
|
||||
printf "%s\\n" "$puzzleName"
|
||||
done
|
||||
fi
|
10
bin/dcss
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
SOURCEKEY="https://crawl.tildeverse.org/dcss.key"
|
||||
MYKEY="${HOME}/.ssh/dcss.key"
|
||||
if [ ! -f "$MYKEY" ]; then
|
||||
mkdir -p "${HOME}/.ssh"
|
||||
curl -s "$SOURCEKEY" > "$MYKEY"
|
||||
chmod 600 "$MYKEY"
|
||||
fi
|
||||
ssh -i "$MYKEY" dcss@crawl.tildeverse.org
|
4
bin/def
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
sdcv -n --utf8-output --color "$@" 2>&1 | \
|
||||
fold --width="$(tput cols)" | \
|
||||
less -FRX
|
31
bin/ebook
|
@ -1,31 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
meta="/var/cosmic/files/metadata.yml"
|
||||
ebook="$HOME/cosmic.txt"
|
||||
epub="$HOME/cosmic.epub"
|
||||
intro="/var/gopher/intro.gophermap"
|
||||
|
||||
filelist=$(tac /var/gopher/listing.gophermap)
|
||||
|
||||
if [ -f "$ebook" ]; then
|
||||
rm "$ebook"
|
||||
fi
|
||||
|
||||
|
||||
printf "# Introduction\\n\\n" >> "$ebook"
|
||||
sed 's/^/ /' "$intro" >> "$ebook"
|
||||
|
||||
IFS='
|
||||
'
|
||||
for log in $filelist; do
|
||||
file=$(printf "%s" "$log" | awk -F"\\t" '{print "/var/gopher" $2}')
|
||||
title=$(printf "%s" "$log" | awk -F"\\t" '{print $1}' | sed 's/^.//')
|
||||
|
||||
{
|
||||
printf "# %s\\n\\n" "$title"
|
||||
sed 's/^/ /' "$file"
|
||||
} >> "$ebook"
|
||||
done
|
||||
|
||||
pandoc -f markdown+hard_line_breaks -o "$epub" "$meta" --wrap=none --toc "$ebook"
|
||||
rm "$ebook"
|
2
bin/faq
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
/usr/bin/lynx -display_charset=utf8 --lss=/dev/null /var/wiki/faq.html
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This script will eventually unban everyone in f2b-sshd
|
||||
# but I need people in jail to test the next part. For
|
||||
# now, it'll list the IPs of the banned folks so I can
|
||||
# unban them more easily.
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
r="$(/sbin/iptables -L f2b-sshd -n | grep REJECT)"
|
||||
if [ -n "$r" ]; then
|
||||
printf "%s" "$r" | awk '{print $4}' | xargs /usr/bin/fail2ban-client set sshd unbanip
|
||||
fi
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/sh
|
||||
logcount=$(wc -l "/var/gopher/listing.gophermap" | awk '{print $1}')
|
||||
|
||||
if [ -z "$1" ] || [ "$1" -eq "$1" ] 2>/dev/null
|
||||
then
|
||||
awk -v tot="${logcount}" '{gsub("^0",tot-NR+1" >> ",$0);print $0}' "/var/gopher/listing.gophermap" | sed "s|\\t.*||" | head -n "${1:-5}"
|
||||
else
|
||||
awk -v tot="${logcount}" '{gsub("^0",tot-NR+1" >> ",$0);print $0}' "/var/gopher/listing.gophermap" | grep -i "$*" | sed "s|\\t.*||" | head -n 5
|
||||
fi
|
293
bin/log
|
@ -1,293 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
die () {
|
||||
msg="$1"
|
||||
code="$2"
|
||||
# exit code defaults to 1
|
||||
if printf "%s" "$code" | grep -q '^[0-9]+$'; then
|
||||
code=1
|
||||
fi
|
||||
# output message to stdout or stderr based on code
|
||||
if [ -n "$msg" ]; then
|
||||
if [ "$code" -eq 0 ]; then
|
||||
printf "%s\\n" "$msg"
|
||||
else
|
||||
printf "%s\\n" "$msg" >&2
|
||||
fi
|
||||
fi
|
||||
exit "$code"
|
||||
}
|
||||
|
||||
finish () {
|
||||
rm -f "$tmp"
|
||||
}
|
||||
trap finish EXIT
|
||||
|
||||
parse_input () {
|
||||
while getopts "$arg_options" opt; do
|
||||
case "$opt" in
|
||||
h)
|
||||
flag_help=1
|
||||
arg_log=0
|
||||
;;
|
||||
v)
|
||||
flag_version=1
|
||||
arg_log=0
|
||||
;;
|
||||
d)
|
||||
flag_debug=1
|
||||
arg_log=0
|
||||
;;
|
||||
c)
|
||||
flag_nocolor=1
|
||||
;;
|
||||
s)
|
||||
arg_ship="$OPTARG"
|
||||
;;
|
||||
z)
|
||||
flag_shortlist=1
|
||||
;;
|
||||
f)
|
||||
arg_log=0
|
||||
flag_file=1
|
||||
flag_nocolor=1
|
||||
arg_file="$OPTARG"
|
||||
;;
|
||||
t)
|
||||
flag_title=1
|
||||
arg_title="$OPTARG"
|
||||
;;
|
||||
*)
|
||||
die "Internal error: $1" 3
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
show_help () {
|
||||
printf "%s [-hvd] [-s shipname]\\n\\n" "$(basename "$0")"
|
||||
printf " -h Show this help\\n"
|
||||
printf " -v Show current version info\\n"
|
||||
printf " -c No-Color mode\\n"
|
||||
printf " -s [shipname] Only log messages for ship named\\n"
|
||||
printf " -n [filename] Create new message with filename\\n"
|
||||
printf " (Users with multiple ships must use -s)\\n"
|
||||
printf "\\n"
|
||||
}
|
||||
|
||||
yesno () {
|
||||
old_stty_cfg=$(stty -g)
|
||||
stty raw -echo
|
||||
yn=$(while ! head -c 1 | grep -i '[ny]'; do true; done)
|
||||
stty "$old_stty_cfg"
|
||||
case $yn in
|
||||
y ) result=0 ;;
|
||||
* ) result=1 ;;
|
||||
esac
|
||||
return $result
|
||||
}
|
||||
|
||||
check_log () {
|
||||
ship="$*"
|
||||
printf ">> %s" "${YELLOW}${ship}${RESET}"
|
||||
# look at log entries in gophermap
|
||||
# compare against files in ship directory
|
||||
# store list of unpublished logs
|
||||
logs=$(grep "^0${ship}" "/var/gopher/listing.gophermap" | awk -F'\t' '{print $2}')
|
||||
files=$(find "/var/gopher/$ship" -regex ".*\\.txt$" -not -path '*/\.*' -type f | sed 's|/var/gopher||')
|
||||
uniq=$(printf "%s\\n%s" "$logs" "$files" | sort | uniq -u)
|
||||
|
||||
if [ -z "$uniq" ]; then
|
||||
printf " .. No new messages.\\n"
|
||||
else
|
||||
printf "\\n" # break to new line for each message query
|
||||
# check each unpublished message for sending
|
||||
IFS='
|
||||
'
|
||||
for u in $uniq
|
||||
do
|
||||
if [ -z "${u##*\#*}" ] ;then
|
||||
printf " ${RED}Warning!${RESET} Message title [%s] contains illegal character \"#\". Skipping.\\n" "$(basename "$u" | sed 's/\.[^.]*$//')"
|
||||
else
|
||||
printf " Send [%s%s%s]? " "${YELLOW}" "$(basename "$u" | sed 's/\.[^.]*$//')" "${RESET}"
|
||||
if yesno; then
|
||||
# prompt for title and prepare output
|
||||
printf ".. %sYES%s.\\n" "${GREEN}" "${RESET}"
|
||||
# check for UTF compatability or fail
|
||||
if iconv -f UTF-8 "/var/gopher${u}" > /dev/null 2> /dev/null; then
|
||||
if [ "$(wc -L < "/var/gopher${u}")" -gt 80 ]; then
|
||||
printf " ${RED}Warning!${RESET} Message [%s] exceeds 80 columns.\\n" "$(basename "$u" | sed 's/\.[^.]*$//')"
|
||||
fi
|
||||
get_title
|
||||
else
|
||||
printf " Message [%s] is not encoded in UTF-8. %sABORT%s\\n" "$(basename "$u" | sed 's/\.[^.]*$//')" "${RED}" "${RESET}"
|
||||
fi
|
||||
else
|
||||
printf ".. %sNO%s.\\n" "${RED}" "${RESET}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
}
|
||||
|
||||
get_title () {
|
||||
printf " Title for [%s%s%s] (null exits): " "${YELLOW}" "$(basename "$u" | sed 's/\.[^.]*$//')" "${RESET}"
|
||||
read -r title
|
||||
if [ -z "$title" ]; then
|
||||
printf " .. No title. %sABORT%s.\\n" "${RED}" "${RESET}"
|
||||
return
|
||||
else
|
||||
title=$(printf "%s" "$title" | cut -c -60)
|
||||
printf " .. Confirm title [%s%s%s]? " "${YELLOW}" "$title" "${RESET}"
|
||||
if yesno; then
|
||||
printf ".. %sYES%s.\\n" "${GREEN}" "${RESET}"
|
||||
if printf "%s" "$title" | grep -Pq "^[\\x20-\\x7E]*$"; then
|
||||
printf "0%s - %s\\t%s\\n" "$ship" "$title" "$u" | cat - /var/gopher/listing.gophermap > "$tmp" && cat "$tmp" > /var/gopher/listing.gophermap && rm "$tmp"
|
||||
printf " .. [%s] .. %sSENT%s.\\n" "$title" "${GREEN}" "${RESET}"
|
||||
else
|
||||
printf " .. Titles must be ASCII characters. %sTry Again%s.\\n" "${RED}" "${RESET}"
|
||||
get_title
|
||||
fi
|
||||
else
|
||||
printf ".. %sNO%s.\\n" "${RED}" "${RESET}"
|
||||
get_title
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
contains() {
|
||||
string="$1"
|
||||
substring="$2"
|
||||
if test "${string#*$substring}" != "$string"
|
||||
then
|
||||
return 0 # $substring is in $string
|
||||
else
|
||||
return 1 # $substring is not in $string
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
|
||||
run_user=$(id -un)
|
||||
if [ "$run_user" = "root" ] || [ "$run_user" = "publish" ]; then
|
||||
# if running as publish, check who sudoed and create ship for that user
|
||||
user="$SUDO_USER"
|
||||
else
|
||||
user="$run_user"
|
||||
fi
|
||||
|
||||
version="0.1.1"
|
||||
user="$SUDO_USER"
|
||||
ships=$(find /var/gopher -maxdepth 1 -user "$user" -type d -exec basename {} \;)
|
||||
numships=$(echo "${ships}" | wc -l)
|
||||
tmp=$(mktemp -t "$(basename "$0").tmp.XXXXXXX") || die "Failed to create temporary file" 1
|
||||
|
||||
flag_help=0
|
||||
flag_version=0
|
||||
flag_debug=0
|
||||
flag_shortlist=0
|
||||
flag_file=0
|
||||
flag_title=0
|
||||
flag_nocolor=0
|
||||
|
||||
arg_options="hvdct:f:s:z"
|
||||
arg_log=1
|
||||
arg_ship=""
|
||||
arg_file=""
|
||||
arg_title=""
|
||||
|
||||
parse_input "$@"
|
||||
|
||||
if [ $flag_nocolor -gt 0 ]; then
|
||||
YELLOW=""
|
||||
GREEN=""
|
||||
RED=""
|
||||
RESET=""
|
||||
else
|
||||
YELLOW="$(tput setaf 12)"
|
||||
GREEN="$(tput setaf 10)"
|
||||
RED="$(tput setaf 9)"
|
||||
RESET="$(tput sgr0)"
|
||||
fi
|
||||
|
||||
# debug
|
||||
if [ $flag_debug -gt 0 ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
# shortlist for bash completion
|
||||
if [ $flag_shortlist -gt 0 ]; then
|
||||
out="$ships"
|
||||
die "${out}" 0
|
||||
fi
|
||||
|
||||
# version
|
||||
if [ $flag_version -gt 0 ]; then
|
||||
printf "%s\\n" "$version"
|
||||
fi
|
||||
|
||||
# print help
|
||||
if [ $flag_help -gt 0 ]; then
|
||||
show_help
|
||||
fi
|
||||
|
||||
# standard log if no params
|
||||
if [ $arg_log -gt 0 ]; then
|
||||
printf "%sINITIALIZING QEC%s .. %sGOOD%s\\n" "${YELLOW}" "${RESET}" "${GREEN}" "${RESET}"
|
||||
printf "Ready to transmit for [%s]\\n" "${GREEN}${user}${RESET}"
|
||||
if [ "$numships" -eq 0 ]; then
|
||||
printf "No registered ships found in system.\\n"
|
||||
elif [ "$numships" -eq 1 ]; then
|
||||
if [ -z "$arg_ship" ] || [ "$ships" = "$arg_ship" ]; then
|
||||
check_log "$ships"
|
||||
fi
|
||||
else
|
||||
IFS='
|
||||
'
|
||||
for f in $ships
|
||||
do
|
||||
if [ -z "$arg_ship" ] || [ "$f" = "$arg_ship" ]; then
|
||||
check_log "$(basename "$f")"
|
||||
fi
|
||||
done
|
||||
unset IFS
|
||||
fi
|
||||
fi
|
||||
|
||||
# handle -f switch
|
||||
if [ $flag_file -gt 0 ]; then
|
||||
if [ -r "$arg_file" ]; then
|
||||
owner=$(stat -c %U "$arg_file")
|
||||
if [ "$user" = "$owner" ]; then
|
||||
# if file exists and user owns it
|
||||
realfile=$(readlink -f "$arg_file")
|
||||
for ship in $ships
|
||||
do
|
||||
if contains "$realfile" "/var/gopher/${ship}"; then
|
||||
if [ "$(wc -L < "$realfile")" -lt 81 ]; then
|
||||
# looking for -t titles only for now
|
||||
if [ $flag_title -gt 0 ]; then
|
||||
if printf "%s" "$arg_title" | grep -Pq "^[\\x20-\\x7E]*$"; then
|
||||
gopherfile="$(printf "%s" "$realfile" | sed 's|/var/gopher||')"
|
||||
printf "0%s - %s\\t%s\\n" "$ship" "$arg_title" "$gopherfile" | cat - /var/gopher/listing.gophermap > "$tmp" && cat "$tmp" > /var/gopher/listing.gophermap && rm "$tmp"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
|
||||
run_user=$(id -un)
|
||||
if [ "$run_user" = "root" ] || [ "$run_user" = "publish" ]; then
|
||||
main "$@"
|
||||
else
|
||||
exec sudo -u publish "$0" "$@"
|
||||
fi
|
|
@ -1,25 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
shopt -s nullglob
|
||||
for ship in "${HOME}/ships/"*; do
|
||||
shipname="$(basename "$ship")"
|
||||
shipstub="$(basename "$ship" | sed 's/[^A-Za-z0-9]//g' | tr '[:upper:]' '[:lower:]')"
|
||||
printf "menu:%s:Write a message from %s:New message\\n" "${shipstub}" "${shipname}"
|
||||
printf " exec:Compose a new message..:edit:${EDITOR:-jed} \"%s/~filename (ending in .txt):~\"\\n" "$ship"
|
||||
printf " exec:Edit Ship Description::${EDITOR:-jed} \"%s\"\\n" "${ship}/.description"
|
||||
printf "nop\\n"
|
||||
for log in "${ship}/"*; do
|
||||
logname="$(basename "${log}")"
|
||||
printf " exec:Edit\\: %s::${EDITOR:-jed} \"%s\"\\n" "$logname" "$log"
|
||||
done
|
||||
printf " nop\\n"
|
||||
printf " exit:_Back to main menu..\\n"
|
||||
done
|
||||
|
||||
printf "menu:write:Write a message from which ship?:Author a new message from one of your ships\\n"
|
||||
for ship in "${HOME}/ships/"*; do
|
||||
shipname="$(basename "$ship")"
|
||||
shipstub="$(basename "$ship" | sed 's/[^A-Za-z0-9]//g' | tr '[:upper:]' '[:lower:]')"
|
||||
printf " show:%s..::%s\\n" "$shipname" "$shipstub"
|
||||
done
|
||||
printf " nop\\n"
|
||||
printf " exit:_Back to main menu..\\n"
|
46
bin/mvship
|
@ -1,46 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
n="$1"
|
||||
s="$2"
|
||||
newship="$3"
|
||||
|
||||
if [ -n "$n" ]; then
|
||||
user_exists=$(id -u "${n}" 2> /dev/null)
|
||||
if [ -n "${user_exists}" ]; then
|
||||
if [ -n "${s}" ]; then
|
||||
path="/var/gopher/${s}"
|
||||
if [ -d "$path" ]; then
|
||||
if [ -n "${newship}" ]; then
|
||||
newpath="/var/gopher/${newship}"
|
||||
ship_exists=$(find /var/gopher -maxdepth 1 -iname "$newship")
|
||||
if [ -z "$ship_exists" ]; then
|
||||
printf "Rename ship '%s' to '%s' for user '%s'\\n" "${s}" "${newship}" "${n}"
|
||||
mv "$path" "$newpath"
|
||||
mv "/var/gopher/ships/${s}" "/var/gopher/ships/${newship}"
|
||||
rm "/home/${n}/ships/${s}"
|
||||
ln -s "$path" "/home/${n}/ships/${newship}"
|
||||
else
|
||||
owner=$(stat -c %U "$ship_exists")
|
||||
printf "That ship or colony already exists and is owned by %s\\n" "$owner"
|
||||
fi
|
||||
else
|
||||
printf "Please provide a new ship name.\\n"
|
||||
fi
|
||||
else
|
||||
printf "No ship by that name exists.\\n"
|
||||
fi
|
||||
else
|
||||
printf "Specify a ship or colony name.\\n"
|
||||
fi
|
||||
else
|
||||
printf "User not found.\\n"
|
||||
fi
|
||||
else
|
||||
printf "Specify a user.\\n"
|
||||
fi
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
if [ -n "$1" ]; then
|
||||
fort="$*"
|
||||
printf "%s\\n%%\\n" "$fort" >> /usr/share/games/fortunes/cosmic
|
||||
fi
|
7
bin/news
|
@ -1,7 +0,0 @@
|
|||
#!/bin/sh
|
||||
if [ ! -f "$HOME/.jnewsrc" ]; then
|
||||
# need to create newsrc
|
||||
slrn --create
|
||||
fi
|
||||
slrn -d
|
||||
slrn
|
27
bin/notify
|
@ -1,27 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
SCRIPT=$(readlink -f "$0")
|
||||
SCRIPTPATH=$(dirname "$SCRIPT")
|
||||
|
||||
# check disk space
|
||||
disk_percent=$(df -h | grep vda1 | awk '{print $5}')
|
||||
if [ "$(printf "%s" "$disk_percent" | sed "s/%//")" -gt 90 ] ; then
|
||||
sed -e "s/THING/disk/g" "${SCRIPTPATH}/../templates/notify.tmpl" | sed "s/PERCENT/${disk_percent}/g" | sendmail "root"
|
||||
fi
|
||||
|
||||
# check ram usage
|
||||
freemem=$(free -m | grep ^Mem | awk '{print $7}')
|
||||
totalmem=$(free -m | grep ^Mem | awk '{print $2}')
|
||||
memory_percent=$((100 * freemem / totalmem))
|
||||
memory_percent=$((100 - memory_percent))
|
||||
if [ "$memory_percent" -gt 90 ] ; then
|
||||
sed -e "s/THING/memory/g" "${SCRIPTPATH}/../templates/notify.tmpl" | sed "s/PERCENT/${memory_percent}%/g" | sendmail "root"
|
||||
fi
|
||||
|
||||
# check cpu ussage
|
||||
cpu_use=$(mpstat | tail -n 1 | awk '{print $12}')
|
||||
cpu_use_round=$(printf "%.*f\\n" 0 "$cpu_use")
|
||||
cpu_use_round=$((100 - cpu_use_round))
|
||||
if [ "$cpu_use_round" -gt 90 ] ; then
|
||||
sed -e "s/THING/cpu/g" "${SCRIPTPATH}/../templates/notify.tmpl" | sed "s/PERCENT/${cpu_use_round}%/g" | sendmail "root"
|
||||
fi
|
18
bin/projects
|
@ -1,18 +0,0 @@
|
|||
#!/bin/bash
|
||||
# projects inspried by "spotlight" by gtlsgamr on tilde.team
|
||||
project_path="/home/*/.project"
|
||||
blue="$(tput setaf 12)"
|
||||
reset_color="$(tput sgr0)"
|
||||
|
||||
{
|
||||
for i in $project_path; do
|
||||
if [ -f "$i" ]; then
|
||||
username="$(basename "$(dirname "$i")")"
|
||||
printf "%s---------------------------------%s\n" "$blue" "$reset_color"
|
||||
printf "%s- %s%s\n" "$blue" "$username" "$reset_color"
|
||||
printf "%s---------------------------------%s\n" "$blue" "$reset_color"
|
||||
fold -w 80 -s "$i"
|
||||
printf "\n\n"
|
||||
fi
|
||||
done
|
||||
} | more
|
7
bin/rate
|
@ -1,7 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
start_date="2018-11-20 20:41:31"
|
||||
days=$(printf "%s" "$(( ($(date +%s) - $(date -d "$start_date" +%s)) / 86400 ))")
|
||||
listings=$(wc -l < /var/gopher/listing.gophermap)
|
||||
calc=$(printf "%s %s" "$listings" "$days" | awk '{ printf "%0.2f", $1 / $2 }')
|
||||
printf "QEC receiving %s logs per day (%s logs in %s days)\\n" "$calc" "$listings" "$days"
|
32
bin/rmship
|
@ -1,32 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
n="$1"
|
||||
s="$2"
|
||||
if [ -n "$n" ]; then
|
||||
user_exists=$(id -u "${n}" 2> /dev/null)
|
||||
if [ -n "${user_exists}" ]; then
|
||||
if [ -n "${s}" ]; then
|
||||
path="/var/gopher/${s}"
|
||||
if [ -d "$path" ]; then
|
||||
printf "Removing ship '%s' for user '%s'\\n" "${s}" "${n}"
|
||||
rm -rf "$path"
|
||||
rm -rf "/var/gopher/ships/${s}"
|
||||
rm "/home/${n}/ships/${s}"
|
||||
else
|
||||
printf "No ship by that name exists.\\n"
|
||||
fi
|
||||
else
|
||||
printf "Specify a ship or colony name.\\n"
|
||||
fi
|
||||
else
|
||||
printf "User not found.\\n"
|
||||
fi
|
||||
else
|
||||
printf "Specify a user.\\n"
|
||||
fi
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
||||
|
55
bin/rss
|
@ -1,55 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
gopher_rss="/var/gopher/rss.xml"
|
||||
|
||||
######################################################################
|
||||
########################## GOPHER VERSION ###########################
|
||||
######################################################################
|
||||
|
||||
# Add header info to xml output
|
||||
{
|
||||
printf '<?xml version="1.0"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>'
|
||||
printf '<atom:link href="gopher://cosmic.voyage/0/rss.xml" rel="self" type="application/rss+xml" />'
|
||||
printf "\\n<title>Cosmic Voyage</title>\\n"
|
||||
printf "<link>gopher://cosmic.voyage</link>\\n"
|
||||
printf "<description>Messages from the human stellar diaspora</description>\\n"
|
||||
} > "${gopher_rss}"
|
||||
|
||||
xml_escape_script='s/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g'
|
||||
|
||||
# Loop through listings gophermap
|
||||
loop=0
|
||||
while read -r line; do
|
||||
loop=$((loop+1))
|
||||
if [ "$loop" -lt 20 ]; then
|
||||
log=$(printf "%s" "$line" | awk -F'\t' '{print $2}')
|
||||
title=$(printf "%s" "$line" | awk -F'\t' '{print $1}' | sed -e 's|^.||' -e "$xml_escape_script")
|
||||
owner=$(stat -c %U "/var/gopher${log}")
|
||||
|
||||
# print item entry for each log
|
||||
{
|
||||
printf "<item>\\n"
|
||||
printf " <title>%s</title>\\n" "$title"
|
||||
printf " <author>%s@cosmic.voyage (%s)</author>\\n" "$owner" "$owner"
|
||||
printf " <link>gopher://cosmic.voyage/0%s</link>\\n" "$(printf "%s" "$log" | sed 's|\ |%20|g')"
|
||||
printf " <guid>gopher://cosmic.voyage/0%s</guid>\\n" "$(printf "%s" "$log" | sed 's|\ |%20|g')"
|
||||
printf " <pubDate>%s GMT</pubDate>\\n" "$(date -d "$(stat -c %y "/var/gopher${log}")" +'%a, %d %b %Y %H:%M:%S')"
|
||||
printf " <description><![CDATA[<pre>\\n"
|
||||
sed "$xml_escape_script" "/var/gopher${log}"
|
||||
printf "</pre>]]></description>\\n"
|
||||
printf "</item>\\n"
|
||||
} >> "${gopher_rss}"
|
||||
fi
|
||||
done < "/var/gopher/listing.gophermap"
|
||||
|
||||
# close up the footer
|
||||
{
|
||||
printf "</channel>\\n"
|
||||
printf "</rss>\\n"
|
||||
} >> "${gopher_rss}"
|
||||
|
||||
else
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
19
bin/scores
|
@ -1,19 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
finish () {
|
||||
if [ -f "$temp_scores" ]; then
|
||||
rm "$temp_scores"
|
||||
fi
|
||||
}
|
||||
trap finish EXIT
|
||||
|
||||
temp_scores=$(mktemp -t "$(basename "$0").scores.XXXXXXX") || exit 1
|
||||
|
||||
for u in $(voyagers); do
|
||||
if ls /home/"${u}"/ships/**/*.txt &> /dev/null; then
|
||||
words=$(wordcount "${u}")
|
||||
printf "%s,%s\\n" "$u" "$words" >> "$temp_scores"
|
||||
fi
|
||||
done
|
||||
|
||||
sort -rnt"," -k2 "$temp_scores"
|
142
bin/ship
|
@ -1,142 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
YELLOW="$(tput setaf 12)"
|
||||
GREEN="$(tput setaf 10)"
|
||||
RED="$(tput setaf 9)"
|
||||
RESET="$(tput sgr0)"
|
||||
NAME="$(basename "$0")"
|
||||
main() {
|
||||
# who is running this script
|
||||
run_user=$(id -u)
|
||||
|
||||
if [ "$run_user" -eq 0 ]; then
|
||||
# if running as root, check who sudoed and create ship for that user
|
||||
user="$SUDO_USER"
|
||||
|
||||
# draw introduction
|
||||
printf "%sINITIALIZING QEC%s .. %sGOOD%s\\n" "$YELLOW" "$RESET" "$GREEN" "$RESET"
|
||||
printf "Connecting user [%s] .. %sGOOD%s\\n" "${YELLOW}${user}${RESET}" "$GREEN" "$RESET"
|
||||
printf "Request for new QEC node .. %sGOOD%s\\n" "$GREEN" "$RESET"
|
||||
printf "\\n"
|
||||
|
||||
# prompt for ship name
|
||||
printf "Name of %s? %s" "$NAME" "$GREEN"
|
||||
read -r shipname
|
||||
printf "%s" "$RESET"
|
||||
|
||||
# if ship name is valid...
|
||||
if printf "%s" "$shipname" | LC_ALL=C grep -Eq "^[A-Za-z0-9]+[A-Za-z0-9\\.\\ \\-]+$"; then
|
||||
path="/var/gopher/${shipname}"
|
||||
ship_exists=$(find /var/gopher -maxdepth 1 -iname "$shipname")
|
||||
|
||||
# if ship does not already exist
|
||||
if [ -z "$ship_exists" ]; then
|
||||
# print message about ship name creation
|
||||
printf "Attaching new node [%s]\\n" "${YELLOW}${shipname}${RESET}"
|
||||
|
||||
# create ship directory in gopher and give ownership to user
|
||||
mkdir "$path"
|
||||
chmod 755 "$path"
|
||||
chown -R "$user" "$path"
|
||||
|
||||
# create ship listings dir and link to ship gophermap
|
||||
mkdir "/var/gopher/ships/${shipname}"
|
||||
ln -s "/var/gopher/ships/ship/gophermap" "/var/gopher/ships/${shipname}/gophermap"
|
||||
|
||||
# create a symlink in user's home dir for easy access
|
||||
mkdir -p "/home/${user}/ships"
|
||||
ln -s "$path" "/home/${user}/ships/${shipname}"
|
||||
|
||||
# notify user by email
|
||||
sed -e "s/USERNAME/${user}/g" -e "s/SHIPNAME/${shipname}/" /etc/templates/newship.tmpl | sendmail "$user"
|
||||
|
||||
# print success message
|
||||
printf "Node registration .. %sSUCCESS%s\\n" "$GREEN" "$RESET"
|
||||
|
||||
# prompt user for LICENSE information
|
||||
printf "\\n"
|
||||
printf "Would you like to define a license for your messages? "
|
||||
if yesno; then
|
||||
printf ".. %sYES%s.\\n" "${GREEN}" "${RESET}"
|
||||
printf "Available licenses:\\n"
|
||||
printf " 0. [%sSuggested%s] CC-BY-SA 4.0 (distribute, remix with attribution, share-alike)\\n" "$YELLOW" "$RESET"
|
||||
printf " 1. CC BY-NC-ND 4.0 (share with attribution, no commercial, no remix)\\n" "$YELLOW" "$RESET"
|
||||
printf " 2. CC BY-NC-SA 4.0 (share and remix with attribution, no commercial use)\\n"
|
||||
printf " 3. All Rights Reserved\\n"
|
||||
printf " 4. Choose by SPDX Identifier\\n"
|
||||
printf " 5. Cancel / Decide later\\n"
|
||||
printf "\\n"
|
||||
printf " Choice? "
|
||||
read -r license
|
||||
case "$license" in
|
||||
0*)
|
||||
printf "Selected: %sCC BY-SA 4.0%s\\n" "$GREEN" "$RESET"
|
||||
cp "/var/cosmic/licenses/CC-BY-SA-4.0" "${path}/LICENSE"
|
||||
chown "$user" "${path}/LICENSE"
|
||||
printf "You may change your license by editing the file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
;;
|
||||
1*)
|
||||
printf "Selected: %sCC BY-NC-ND 4.0%s\\n" "$GREEN" "$RESET"
|
||||
cp "/var/cosmic/licenses/CC-BY-NC-ND-4.0" "${path}/LICENSE"
|
||||
chown "$user" "${path}/LICENSE"
|
||||
printf "You may change your license by editing the file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
;;
|
||||
2*)
|
||||
printf "Selected: %sCC BY-NC-SA 4.0%s\\n" "$GREEN" "$RESET"
|
||||
cp /var/cosmic/licenses/CC-BY-NC-SA-4.0 "${path}/LICENSE"
|
||||
chown "$user" "${path}/LICENSE"
|
||||
printf "You may change your license by editing the file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
;;
|
||||
3*)
|
||||
printf "Selected: %sAll Rights Reserved%s\\n" "$GREEN" "$RESET"
|
||||
printf "You may change your license by creating a file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
;;
|
||||
4*)
|
||||
printf "Selected: %sChoose by SPDX Identifier%s\\n" "$GREEN" "$RESET"
|
||||
printf "Please enter case-sensitive identifier: "
|
||||
read -r spdx
|
||||
prefix="https://raw.githubusercontent.com/spdx/license-list-data/master/text/"
|
||||
if license=$(curl --silent --fail "${prefix}${spdx}.txt"); then
|
||||
printf "%s" "$license" > "${path}/LICENSE"
|
||||
chown "$user" "${path}/LICENSE"
|
||||
printf "You may change your license by editing the file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
else
|
||||
printf "%sFAILED:%s Identifier not found.\\n" "$RED" "$RESET"
|
||||
printf "You may manually add a license of your choosing by creating a file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
printf "Selected: %sCancel / Decide later%s\\n" "$GREEN" "$RESET"
|
||||
printf "You may manually add a license of your choosing by creating a file named LICENSE in your %s directory.\\n" "$NAME"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf ".. %sNO%s.\\n" "${RED}" "${RESET}"
|
||||
fi
|
||||
else
|
||||
owner=$(stat -c %U "$ship_exists")
|
||||
printf "%sABORT:%s A node by that name exists and is owned by %s\\n" "$RED" "$RESET" "$owner"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
printf "%sABORT:%s ASCII letters, numbers, spaces and dashes only.\\n" "$RED" "$RESET"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exec sudo "$0"
|
||||
fi
|
||||
}
|
||||
|
||||
yesno () {
|
||||
old_stty_cfg=$(stty -g)
|
||||
stty raw -echo
|
||||
yn=$(while ! head -c 1 | grep -i '[ny]'; do true; done)
|
||||
stty "$old_stty_cfg"
|
||||
case $yn in
|
||||
y ) result=0 ;;
|
||||
* ) result=1 ;;
|
||||
esac
|
||||
return $result
|
||||
}
|
||||
|
||||
main
|
16
bin/sysmail
|
@ -1,16 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
run_user=$(id -u)
|
||||
if [ "$run_user" -eq 0 ] || [ "$run_user" -eq 1000 ]; then
|
||||
if [ -f "$1" ]; then
|
||||
for u in $(members users); do
|
||||
if [ "$u" != "anonhmmst" ]; then
|
||||
sed -e "s/USERNAME/${u}/g" "$1" | sendmail "$u"
|
||||
fi
|
||||
done
|
||||
else
|
||||
printf "Filename of email required.\\n"
|
||||
fi
|
||||
else
|
||||
printf "This script really isn't meant for users. You cannot use it.\\n"
|
||||
fi
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# generate tilde.json
|
||||
run_user=$(id -un)
|
||||
if [ "$run_user" = "publish" ]; then
|
||||
userlist=$(voyagers | awk '{print "{\"username\":\"" $0 "\"}," }')
|
||||
printf '{"name": "cosmic.voyage", "url": "https://cosmic.voyage", "signup_url": "https://cosmic.voyage/join.html", "user_count": %s, "want_users": true, "admin_email": "james@tomasino.org", "description": "Cosmic Voyage is a public-access unix system and tilde community based around a collaborative science-fiction universe. Users write stories as the people aboard ships, colonies, and outposts, using the only remaining free, interconnected network that unites the dispersed peoples of the stars.", "users": [%s]}' "$(grep -E '1[0-9]{3}' "/etc/passwd" | grep -c 'home')" "${userlist%?}" > "/var/gopher/tilde.json"
|
||||
else
|
||||
exec sudo -u publish "$0" "$@"
|
||||
fi
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
grep -E '1[0-9]{3}' "/etc/passwd" | grep 'home' | awk -F":" '{print $1}'
|
|
@ -1,61 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
die () {
|
||||
msg="$1"
|
||||
code="$2"
|
||||
# exit code defaults to 1
|
||||
if printf "%s" "$code" | grep -q '^[0-9]+$'; then
|
||||
code=1
|
||||
fi
|
||||
# output message to stdout or stderr based on code
|
||||
if [ -n "$msg" ]; then
|
||||
if [ "$code" -eq 0 ]; then
|
||||
printf "%s\\n" "$msg"
|
||||
else
|
||||
printf "%s\\n" "$msg" >&2
|
||||
fi
|
||||
fi
|
||||
exit "$code"
|
||||
}
|
||||
|
||||
yesno () {
|
||||
old_stty_cfg=$(stty -g)
|
||||
stty raw -echo
|
||||
yn=$(while ! head -c 1 | grep -i '[ny]'; do true; done)
|
||||
stty "$old_stty_cfg"
|
||||
case $yn in
|
||||
y ) result=0 ;;
|
||||
* ) result=1 ;;
|
||||
esac
|
||||
return $result
|
||||
}
|
||||
|
||||
printf "This script will attempt to fetch and store your fediverse account webfinger\n"
|
||||
printf "information. Cosmic is set up to serve that to users who search or mention you\n"
|
||||
printf "at your cosmic.voyage username. If they send a message to %s@cosmic.voyage\n" "${USER}"
|
||||
printf "it will properly deliver to your real account.\n\n"
|
||||
printf "This script only needs to be run once to set up your redirect.\n\n"
|
||||
printf "What is your fedi address? (format @username@server.com) [Enter to cancel]: \n"
|
||||
read -r fedi
|
||||
if [ -z "$fedi" ]; then
|
||||
die "" 2
|
||||
else
|
||||
fediuser=$(printf "%s" "$fedi" | awk '{split($0,a,"@"); print a[2]}')
|
||||
fediserver=$(printf "%s" "$fedi" | awk '{split($0,a,"@"); print a[3]}')
|
||||
if [ -z "$fediuser" ]; then
|
||||
die "Improper address" 2
|
||||
fi
|
||||
if [ -z "$fediserver" ]; then
|
||||
die "Improper address" 2
|
||||
fi
|
||||
echo "$fediserver" "$fediuser"
|
||||
fediwebfinger="$(curl -s "https://${fediserver}/.well-known/webfinger?resource=acct:${fediuser}@${fediserver}")"
|
||||
printf "Found the following:\n\n%s\n" "$fediwebfinger"
|
||||
printf "\nDo you want to save it?\n"
|
||||
if yesno; then
|
||||
printf "%s" "$fediwebfinger" > "$HOME/.webfinger.json"
|
||||
printf "SAVED!\n"
|
||||
else
|
||||
printf "ABORT!\n"
|
||||
fi
|
||||
fi
|
75
bin/whoa
|
@ -1,75 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Output a sorted list of currently logged-in users, tfurrows@sdf.org
|
||||
# Completely and utterly free, do whatever you want with this.
|
||||
|
||||
#defaults
|
||||
c0="\e[0m" # color reset
|
||||
c1="\e[32m" # title and total color
|
||||
c2="\e[36m" # color of [letter]
|
||||
c3="\e[33m" # color of user count per letter
|
||||
c4="\e[35m" # color of known users (from ~/.whoiknow)
|
||||
|
||||
# Process arguments
|
||||
while getopts "hc" opt; do
|
||||
case $opt in
|
||||
h)
|
||||
printf "Usage: whoa [-ch]\n"
|
||||
printf " -c removes all color, -h shows this message. \n"
|
||||
printf " Place a text file named .whoiknow in your root, one login name per line, to highlight known users in the output.\n"
|
||||
exit
|
||||
;;
|
||||
c)
|
||||
# color off
|
||||
c0=""
|
||||
c1=""
|
||||
c2=""
|
||||
c3=""
|
||||
c4="*"
|
||||
;;
|
||||
\?)
|
||||
printf "Usage: whoa [-ch]\n"
|
||||
printf " -c removes all color, -h shows this message. \n"
|
||||
printf " Place a text file named .whoiknow in your root, one login name per line, to hi
|
||||
ghlight known users in the output.\n"
|
||||
exit;
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# check for .whoiknow text file, read known usernames into array
|
||||
declare knownUsers
|
||||
if [ -f ~/.whoiknow ]; then
|
||||
mapfile -t knownUsers < ~/.whoiknow
|
||||
fi
|
||||
|
||||
# Get and sort user list
|
||||
USERS="$(/usr/bin/who -q | sed -e '$d')"
|
||||
array=(${USERS// / })
|
||||
readarray -t sorted < <(for a in "${array[@]}"; do echo "$a"; done | sort -u)
|
||||
|
||||
# store in associative array
|
||||
declare -A alphaUsers
|
||||
for i in "${!sorted[@]}"
|
||||
do
|
||||
if [[ " ${knownUsers[@]} " =~ " ${sorted[i]} " ]]; then
|
||||
alphaUsers["${sorted[i]:0:1}"]+="${c4}"${sorted[i]}"${c0}, "
|
||||
else
|
||||
alphaUsers["${sorted[i]:0:1}"]+=${sorted[i]}", "
|
||||
fi
|
||||
done
|
||||
|
||||
printf "\n ${c1}Alphabetical User List (logged in)${c0}\n"
|
||||
for x in {a..z}
|
||||
do
|
||||
if [[ ! -z ${alphaUsers[$x]} ]]; then
|
||||
countTemp="${alphaUsers[$x]//[^ ]}"
|
||||
total="$(($total+${#countTemp}))"
|
||||
countTemp=$(printf "%03d" ${#countTemp})
|
||||
|
||||
printf "\n [${c2}${x^}${c0}] [${c3}$countTemp${c0}] "
|
||||
printf "${alphaUsers[$x]::-2}" #strip the last comma/space off
|
||||
fi
|
||||
done
|
||||
|
||||
printf "\n\n ${c1}$total users total${c0}"
|
||||
printf "\n\n"
|
2
bin/wiki
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
/usr/bin/lynx -display_charset=utf8 --lss=/dev/null /var/wiki/index.html
|
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
chgrp -R users /var/wiki/
|
||||
find /var/wiki/* -type f -exec chmod 664 {} \;
|
||||
find /var/wiki/* -type d -exec chmod 775 {} \;
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
if [ -d "/home/${1:-$USER}/ships/" ]; then
|
||||
wc -w /home/"${1:-$USER}"/ships/**/*.txt | tail -n 1 | awk '{print $1}'
|
||||
else
|
||||
printf "0\\n"
|
||||
fi
|
|
@ -5,7 +5,7 @@ _log() {
|
|||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
local helplist
|
||||
helplist=$(log -z)
|
||||
mapfile -t COMPREPLY < <( compgen -W "$helplist" -- "$cur" )
|
||||
COMPREPLY=( $( compgen -W "$helplist" -- "$cur" ) )
|
||||
}
|
||||
|
||||
# Detect if current shell is ZSH, and if so, load this file in bash
|
|
@ -1,14 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# shellcheck source=log
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/efingerd/log
|
||||
printf "Users currently online:\\n"
|
||||
w="$(who | cut -f 1 -d ' ' | sort -u)"
|
||||
printf "%s" "$w" | tr '\n' ' ' | sed 's/^/ /'
|
||||
printf "\\n\\nWho control these ships:\\n"
|
||||
s=$(
|
||||
for line in $w; do
|
||||
roster "$line" | awk '{$1=""; print $0 }'
|
||||
done)
|
||||
printf "%s" "$s" | sort -u | sed 's/^/ /'
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
printf "%s %s fingered from %s@%s\\n" "$(date)" "$3" "$1" "$2" >> /var/log/efingerd.log
|
|
@ -1,53 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $1 = identity of remote user fingering you
|
||||
# $2 = address of remote machine fingering you
|
||||
# $3 = name of user being fingered (you!)
|
||||
|
||||
# shellcheck source=log
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/efingerd/log
|
||||
|
||||
if [ "$3" = "root" ]; then
|
||||
printf "QEC STATUS: ERROR\\nROOT ACCESS DENIED.\\n"
|
||||
else
|
||||
user_folder="/home/${3}"
|
||||
|
||||
# Prints current user's ship roster
|
||||
printf "Ships registered to user \"%s\"\\n" "$3"
|
||||
/usr/local/bin/roster "$3" | awk '{$1=" "; print $0}'
|
||||
|
||||
# This portion is maintained for compatability with fellowsh
|
||||
# a tildeverse/pubnix social network built on fingerd
|
||||
|
||||
# Project
|
||||
printf "Project:\\n"
|
||||
if [ -f "${user_folder}/.project" ]; then
|
||||
sed 's/^/ /' "${user_folder}/.project"
|
||||
else
|
||||
printf "No Project.\\n"
|
||||
fi
|
||||
|
||||
# Plan
|
||||
printf "Plan:\\n"
|
||||
if [ -f "${user_folder}/.plan" ]; then
|
||||
sed 's/^/ /' "${user_folder}/.plan"
|
||||
else
|
||||
printf "No Plan.\\n"
|
||||
fi
|
||||
|
||||
# Timezone
|
||||
if [ -f "${user_folder}/.tz" ]; then
|
||||
printf "Timezone: %s\\n" "$(cat "${user_folder}/.tz")"
|
||||
fi
|
||||
|
||||
# Timezone
|
||||
if [ -f "${user_folder}/.pronouns" ]; then
|
||||
printf "Pronouns: %s\\n" "$(cat "${user_folder}/.pronouns")"
|
||||
fi
|
||||
|
||||
# Online status
|
||||
if finger "$3" | grep -q 'On since'; then
|
||||
printf "Online.\\n"
|
||||
fi
|
||||
fi
|
|
@ -1,50 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ "$3" = "latest" ]; then
|
||||
echo "The latest messages logged to the QEC:"
|
||||
/usr/local/bin/latest
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$3" = "time" ]; then
|
||||
echo The time is...
|
||||
d="$(date -u)"
|
||||
beatTAI=$(echo "x = ($(date +%s)) % 86400; scale=3; x / 86.4" | bc)
|
||||
j=$(echo "x = $(date +%s); scale=5; x / 86400 + 2440587.5" | bc)
|
||||
printf "Gregorian Date : %s\n" "$d"
|
||||
printf "beatTAI : %s\n" "$beatTAI"
|
||||
printf "Julian Date : %s\n" "$j"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$3" = "ping" ]; then
|
||||
echo "PONG!"
|
||||
ping -c 5 "$2"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$3" = "fortune" ]; then
|
||||
/usr/games/fortune
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$3" = "uptime" ]; then
|
||||
/usr/bin/uptime
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$3" = "changelog" ]; then
|
||||
head -n 30 /var/wiki/changelog.html | awk '/^ / { print $0 }'
|
||||
echo " ..."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# shellcheck source=log
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/efingerd/log
|
||||
|
||||
cat <<EOM
|
||||
QEC STATUS: ERROR
|
||||
SHIP OR USER NOT DEFINED.
|
||||
THIS REQUEST HAS BEEN LOGGED.
|
||||
EOM
|
|
@ -1,56 +0,0 @@
|
|||
Subject: Expanding the universe
|
||||
|
||||
Hi ~USERNAME,
|
||||
|
||||
Thanks for joining cosmic.voyage and making it such an awesome
|
||||
place right out of the gate. I've been thrilled waking up each day
|
||||
to the new stories. We have so much fun chatting about
|
||||
possibilities in IRC, too. It's an inspiration to write more,
|
||||
which I really appreciate.
|
||||
|
||||
Let's keep this momentum going, okay? Everyone is fairly engaged
|
||||
so far, but I know that as the shiny paint begins to dull some of
|
||||
our writers will slip away or visit less often. (That's totally
|
||||
okay! I can't wait for the surprise visits we'll get from our
|
||||
infrequent writers in the months ahead.) But while we still have
|
||||
the energy and plenty of resources let's attract some new people
|
||||
too.
|
||||
|
||||
Our system load is rarely over 0.01, even with the people that sit
|
||||
in tmux and IRC. This may be a tiny instance, but it doesn't take
|
||||
much to run text stories. I think we can scale quite a bit before
|
||||
processing or bandwidth looks problematic.
|
||||
|
||||
If you know other people who like to write, invite them along with
|
||||
us on the journey. While some technical skill is required to use
|
||||
the system, that should be part of the selling point, not
|
||||
a detriment. Part of our experience is using these primitive tools
|
||||
and it's a very simple gateway for new *nix users to get their
|
||||
feet wet.
|
||||
|
||||
Over the holiday I plan on recording some tutorials that will walk
|
||||
users through all the steps necessary to create an account, add
|
||||
a ship, send a long message, add a ship description, and so on.
|
||||
Once they're ready I'll share the links out over email. In the
|
||||
meantime, I encourage you to help be ambassadors to new people as
|
||||
you've already been doing.
|
||||
|
||||
I've gotten so lucky with the crews that have taken the cosmic
|
||||
voyage so far. You're all brilliant, creative, and kind. Let's
|
||||
keep that up and invite more!
|
||||
|
||||
In case you joined in the beginning when things were a little more
|
||||
ad-hoc, here's our current process for becoming a new user:
|
||||
|
||||
1. pick a username
|
||||
2. send me a ssh pubkey
|
||||
|
||||
That's it! I'll add the user to the system using that pubkey. Once
|
||||
they're in, the welcome email should tell them how to do all the
|
||||
next stuff, like creating a ship and logging messages.
|
||||
|
||||
We've got 23 users as of this email. Let's see if we can get that
|
||||
over 50. :D
|
||||
|
||||
Bon voyage,
|
||||
tomasino
|
|
@ -1,69 +0,0 @@
|
|||
Subject: Federating Email
|
||||
|
||||
Hi ~USERNAME,
|
||||
|
||||
Our lovely system is introducing some new federation features with
|
||||
other pubnix servers. If you visit our IRC channel, you may have
|
||||
already noted that it's on the tildeverse IRC server. This host
|
||||
acts as one of the servers connecting into that same system.
|
||||
|
||||
We have two other basic federation systems being worked on:
|
||||
|
||||
1) Email - As of today, this server can send email to any of the
|
||||
following servers:
|
||||
- *.circumlunar.space
|
||||
- grex.org
|
||||
- rawtext.club
|
||||
- sdf.org
|
||||
- tilde.team
|
||||
- tilde.town
|
||||
- yourtilde.com
|
||||
- thunix.net
|
||||
|
||||
Any other outbound email is restricted. If you know of other
|
||||
pubnix's that should be added to the list, please send me
|
||||
a note and I'll add them. This goes toward the effort of
|
||||
keeping things story-focused, but playing nice with the
|
||||
pubnix-verse.
|
||||
|
||||
2) Finger - If you read gopher, solderpunk has written up an
|
||||
in-depth phlog post about his efforts to bring finger back to
|
||||
life in the pubnix space.
|
||||
|
||||
gopher://zaibatsu.circumlunar.space/0/~solderpunk/phlog/were-bringin-finger-back.txt
|
||||
|
||||
In short, you can finger users at cosmic.voyage and get some
|
||||
cool results back. Currently the system will share your .plan
|
||||
and .project files in your home directory if they exist (normal
|
||||
finger behavior) and also your ship roster. You can view the
|
||||
standard finger script on git here:
|
||||
|
||||
https://tildegit.org/cosmic/cosmic/src/branch/master/efingerd/luser
|
||||
|
||||
You can also:
|
||||
|
||||
- finger latest@cosmic.voyage
|
||||
- finger uptime@cosmic.voyage
|
||||
- finger ping@cosmic.voyage
|
||||
- finger time@cosmic.voyage
|
||||
- finger fortune@cosmic.voyage
|
||||
|
||||
Finally, solderpunk's "fellowsh" tool, built on top of finger,
|
||||
is available on the system. It's still in active development
|
||||
and I'll be pulling in updates as they're made.
|
||||
|
||||
Thanks to the advice of one of our writers, I've also created
|
||||
a new 'menu' tool that offers an easy-to-use interface for many of
|
||||
the common scripts on the server. It's also a great way to play
|
||||
with and discover new things.
|
||||
|
||||
Finally, I want to tell you all you're super awesome. We broke 100
|
||||
posts before the new year. If you finger uptime, you'll see that
|
||||
we've been running for 42 days as of today. That's more than
|
||||
2 logs per day!
|
||||
|
||||
Keep up the amazing writing, everyone, and keep sharing the
|
||||
system.
|
||||
|
||||
Bon voyage,
|
||||
tomasino
|
|
@ -1,11 +0,0 @@
|
|||
Subject: New Admin
|
||||
|
||||
Hi ~USERNAME,
|
||||
|
||||
I wanted to send everyone a quick note to let you know Cosmic
|
||||
Voyage has an additional admin now: fosslinux
|
||||
|
||||
If you need help with anything and can't find me, he's your man.
|
||||
|
||||
Cheers,
|
||||
tomasino
|
|
@ -1,9 +0,0 @@
|
|||
Subject: Anthology #1
|
||||
|
||||
Hi again ~USERNAME,
|
||||
|
||||
If you would like your story omitted from the 2018 anthology,
|
||||
please contact khuxkm or tomasino and let us know.
|
||||
|
||||
Cheers,
|
||||
tomasino
|
|
@ -1,20 +0,0 @@
|
|||
Subject: Anthology #1
|
||||
|
||||
Hi ~USERNAME,
|
||||
|
||||
One of our users, khuxkm, is putting together an anthology ebook
|
||||
of our stories from 2018. He is inviting all authors who wrote
|
||||
a story entry in 2018 to submit an introduction letter about
|
||||
Cosmic Voyage or an introduction to their story. These will be
|
||||
bundled into the ebook. If this works well, we'll likely generate
|
||||
a new anthology each year.
|
||||
|
||||
If you'd like to participate, please go ahead and email
|
||||
khuxkm@cosmic.voyage directly.
|
||||
|
||||
If you would like to discuss the anthology format or have
|
||||
suggestions, you can email him or join us in the #cosmic IRC
|
||||
channel on irc.tilde.chat. (run "chat" from cosmic command line)
|
||||
|
||||
Cheers,
|
||||
tomasino
|
|
@ -1,25 +0,0 @@
|
|||
Subject: System Upgrade
|
||||
|
||||
Hey ~USERNAME,
|
||||
|
||||
Yesterday I upgraded cosmic.voyage from Ubuntu 19.10 to 20.04. I ran
|
||||
through all the stuff in our system menu and a few other odds and ends
|
||||
and it appears that everything is working okay. If you encounter any
|
||||
issues please let me know.
|
||||
|
||||
In other news the Tilde Net News system (run 'news') is now peering with
|
||||
tilde.club, the first and largest tilde server. They seem pretty active,
|
||||
so if you want to engage you can try that out. The news program under
|
||||
the hood is called 'slrn' and you can read more on how to configure it
|
||||
to your personal tastes here:
|
||||
|
||||
http://slrn.sourceforge.net/documentation.html
|
||||
|
||||
Our little community is up to 119 voyagers now. How exciting!
|
||||
|
||||
If you're still stuck at home and looking for a creative way to escape
|
||||
the boredom, why not create a new ship or outpost and leave this Earth
|
||||
far behind? See you out there.
|
||||
|
||||
Cheers,
|
||||
tomasino
|
|
@ -1,20 +0,0 @@
|
|||
Subject: NaNoWriMo
|
||||
|
||||
Hey ~USERNAME,
|
||||
|
||||
National Novel Writing Month (NaNoWriMo) begins in one week and to celebrate
|
||||
I'm putting together 30 days of writing encouragement. I'll be sharing these on
|
||||
tilde net news (use the "news" command and look in tilde.cosmic) as well as on
|
||||
my gopher hole at gopher://gopher.black. I hope you'll check them out and find
|
||||
some motivation within to help you tell some awesome stories.
|
||||
|
||||
While Cosmic Voyage may not be geared toward novel writing per se I'll be using
|
||||
this season to put out as many new stories in the 'verse as I can. Will I write
|
||||
50,000 words in November? Who knows?
|
||||
|
||||
What about you? Do you have the story inside that's been dying to come out but
|
||||
you haven't had the time? Maybe this month will be your opportunity to push it
|
||||
along. Whether it's here on Cosmic or abroad I hope you find your voice.
|
||||
|
||||
Cheers,
|
||||
tomasino
|
|
@ -1,14 +0,0 @@
|
|||
Subject: System Update
|
||||
|
||||
Hey ~USERNAME,
|
||||
|
||||
Ubuntu 22.04 has had time to be released and is stable. That means it'll
|
||||
be time to make a system update to that version soon. I'm tentatively
|
||||
planning on that taking place next weekend, on or around the 10th of
|
||||
September. We'll be taking a backup snapshot first, just in case.
|
||||
Following that weekend there's a risk some things may be broken. Please
|
||||
let me know if you run into any problems. You can email me from cosmic
|
||||
directly or on the IRC channel or wherever.
|
||||
|
||||
Thanks!
|
||||
tomasino
|
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 6.0 KiB |
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#00a300</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
Before Width: | Height: | Size: 797 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 3.4 KiB |
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"name": "",
|
||||
"short_name": "",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 23 KiB |
BIN
files/cover.jpg
Before Width: | Height: | Size: 7.8 MiB |
275
files/epub.css
|
@ -1,275 +0,0 @@
|
|||
/* from http://bbebooksthailand.com/bb-CSS-boilerplate.html */
|
||||
|
||||
/* This adds margins around every page to stop ADE's line numbers from being superimposed over content */
|
||||
@page {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
/*===Reset code to prevent cross-reader strangeness===*/
|
||||
html,
|
||||
body,
|
||||
div,
|
||||
span,
|
||||
applet,
|
||||
object,
|
||||
iframe,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
blockquote,
|
||||
pre,
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
big,
|
||||
cite,
|
||||
code,
|
||||
del,
|
||||
dfn,
|
||||
em,
|
||||
img,
|
||||
ins,
|
||||
kbd,
|
||||
q,
|
||||
s,
|
||||
samp,
|
||||
small,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
sup,
|
||||
tt,
|
||||
var,
|
||||
b,
|
||||
u,
|
||||
i,
|
||||
center,
|
||||
fieldset,
|
||||
form,
|
||||
label,
|
||||
legend,
|
||||
table,
|
||||
caption,
|
||||
tbody,
|
||||
tfoot,
|
||||
thead,
|
||||
tr,
|
||||
th,
|
||||
td,
|
||||
article,
|
||||
aside,
|
||||
canvas,
|
||||
details,
|
||||
embed,
|
||||
figure,
|
||||
figcaption,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
output,
|
||||
ruby,
|
||||
section,
|
||||
summary,
|
||||
time,
|
||||
mark,
|
||||
audio,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
li,
|
||||
dl,
|
||||
dt,
|
||||
dd {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/*===GENERAL PRESENTATION===*/
|
||||
|
||||
/*===Body Presentation and Margins===*/
|
||||
/* Text alignment is still a matter of debate. Feel free to change to text-align: left; */
|
||||
body {
|
||||
text-align: justify;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
/*===Headings===*/
|
||||
/* After page breaks, eReaders sometimes do not render margins above the content. Adjusting padding-top can help */
|
||||
|
||||
h1 {
|
||||
text-indent: 0;
|
||||
text-align: left;
|
||||
margin: 0 0 30px 0;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
page-break-before: avoid;
|
||||
line-height: 1.2em; /*gets squished otherwise on ADE */
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
h2 {
|
||||
text-indent: 0;
|
||||
text-align: center;
|
||||
margin: 20px 0 0 0;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
page-break-before: avoid;
|
||||
line-height: 1.2em; /*get squished otherwise on ADE */
|
||||
}
|
||||
|
||||
tr, img {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
@page :left {
|
||||
margin: 15mm 20mm 15mm 10mm;
|
||||
}
|
||||
|
||||
@page :right {
|
||||
margin: 15mm 10mm 15mm 20mm;
|
||||
}
|
||||
|
||||
/* Hyphen and pagination Fixer */
|
||||
/* Note: Do not try on the Kindle, it does not recognize the hyphens property */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
-webkit-hyphens: none !important;
|
||||
hyphens: none;
|
||||
page-break-after: avoid;
|
||||
page-break-inside: avoid;
|
||||
page-break-before: avoid;
|
||||
}
|
||||
|
||||
/*===Paragraph Elements===*/
|
||||
/* Margins are usually added on the top, left, and right, but not on the bottom to prevent certain eReaders not collapsing white space properly */
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
widows: 2;
|
||||
orphans: 2;
|
||||
}
|
||||
|
||||
/* 1st level TOC */
|
||||
p.toctext {
|
||||
margin: 0 0 0 1.5em;
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
/* 2nd level TOC */
|
||||
p.toctext2 {
|
||||
margin: 0 0 0 2.5em;
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
h1.main {
|
||||
text-align: center;
|
||||
border-bottom: 0;
|
||||
margin-top: 300px;
|
||||
margin-bottom: 5px;
|
||||
font-size: 32px;
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
h1.toc-title {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
h1.subtitle {
|
||||
font-style: italic;
|
||||
font-size: larger;
|
||||
font-weight: bold;
|
||||
margin-left: 0;
|
||||
margin-bottom: 1em;
|
||||
text-align: center;
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.rights {
|
||||
display: block;
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: 15px;
|
||||
}
|
||||
|
||||
/*==LISTS==*/
|
||||
ul {
|
||||
margin: 1em 0 0 3em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 1em 0 0 3em;
|
||||
text-align: left;
|
||||
font-size: 14px;
|
||||
line-height: 1.3em;
|
||||
}
|
||||
|
||||
ol li a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* This fixes the bug where the text-align property of block-level elements is not recognized on iBooks
|
||||
example: html markup would look like <p class="centered"><span class="ipadcenterfix">Centered Content</span></p> */
|
||||
|
||||
span.ipadcenterfix {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*==eBook Specific Formatting Below Here==*/
|
||||
body {
|
||||
padding: 1em;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 10px;
|
||||
line-height: 1.1em;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
|
||||
blockquote {
|
||||
color: #666666;
|
||||
margin: 1em 0;
|
||||
padding-left: 1.5em;
|
||||
border-left: 0.5em #eee solid;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.level1 {
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -1,56 +0,0 @@
|
|||
Something wicked this way comes
|
||||
%
|
||||
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.
|
||||
%
|
||||
I have never listened to anyone who criticized my taste in space travel, sideshows or gorillas. When this occurs, I pack up my dinosaurs and leave the room.
|
||||
%
|
||||
Time is an illusion. Lunchtime doubly so.
|
||||
%
|
||||
Would it save you a lot of time if I just gave up and went mad now?
|
||||
%
|
||||
Nothing travels faster than the speed of light, with the possible exception of bad news, which obeys its own special laws.
|
||||
%
|
||||
You know how sometimes you tell yourself that you have a choice, but really you dont have a choice? Just because there are alternatives doesnt mean they apply to you.
|
||||
%
|
||||
We all know interspecies romance is weird.
|
||||
%
|
||||
I guess I always felt even if the world came to an end, McDonald's would still be open.
|
||||
%
|
||||
The life where nothing was ever unexpected. Or inconvenient. Or unusual. The life without colour, pain or past.
|
||||
%
|
||||
The ability to speak does not make you intelligent.
|
||||
%
|
||||
You need to read more science fiction. Nobody who reads science fiction comes out with this crap about the end of history
|
||||
%
|
||||
If you want to conquer the world, you best have dragons.
|
||||
%
|
||||
Look, Dave, I can see you’re really upset about this. I honestly think you ought to sit down calmly, take a stress pill, and think things over.
|
||||
%
|
||||
You know, Burke, I don’t know which species is worse. You don’t see them fucking each other over for a goddamn percentage.
|
||||
%
|
||||
The way I see it, if you’re going to build a time machine into a car, why not do it with some style?
|
||||
%
|
||||
Quite an experience to live in fear, isn’t it? That’s what it is to be a slave.
|
||||
%
|
||||
Mathematics is the only true universal language.
|
||||
%
|
||||
Remember, there’s no courage without fear.
|
||||
%
|
||||
Isn’t it strange, to create something that hates you?
|
||||
%
|
||||
Miss Everdeen, it is the things we love most that destroy us.
|
||||
%
|
||||
All good stories deserve embellishment.
|
||||
%
|
||||
Dinosaurs eat man. Woman inherits the earth.
|
||||
%
|
||||
Come on, Mr. Frodo. I can’t carry it for you, but I can carry you!
|
||||
%
|
||||
Remember, no matter where you go, there you are.
|
||||
%
|
||||
If it bleeds, we can kill it.
|
||||
%
|
||||
We are history, written red, the surface, white our bones on terraformed Mars - cradle of our children
|
||||
%
|
||||
Look down. All the way down - the storm abates and the dust settles
|
||||
%
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
title:
|
||||
- type: main
|
||||
text: Cosmic Voyage
|
||||
- type: subtitle
|
||||
text: Year One
|
||||
rights: © 2019 All rights reserved by individual authors
|
||||
stylesheet: /var/cosmic/files/epub.css
|
||||
cover-image: /var/cosmic/files/cover.jpg
|
||||
...
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
Dec 03, 2018:
|
||||
- 'log -n' helper to create new messages. See 'log -h'
|
||||
- Fixed log bug that would recursively propmt for messages
|
||||
- Fixed log bug for files ending in .txt~
|
||||
|
||||
Nov 27, 2018:
|
||||
- 'roster' command alias for 'cosmic-roster', adds optional 'count'
|
||||
argument to see number of ships. Optional username arg to filter.
|
||||
|
||||
Requests or advice? Send a local mail to 'tomasino'.
|
|
@ -1,31 +0,0 @@
|
|||
// I'm sorry you have to see JavaScript on this site, but it's here to
|
||||
// enable a manual dark mode toggle. When dark mode support improves I
|
||||
// can probably remove this again.
|
||||
function setMode(mode, val) {
|
||||
if (val) document.body.classList.add(mode)
|
||||
else document.body.classList.remove(mode)
|
||||
Array.from(document.querySelectorAll('a'))
|
||||
.filter( el => el.href.indexOf('cosmic.voyage') !== -1)
|
||||
.map( el => {
|
||||
var url = el.href
|
||||
var p = url.indexOf('?') !== -1 ? url.substr(url.indexOf('?')) : ''
|
||||
var baseURL = url.split('?')[0]
|
||||
const params = new URLSearchParams(p)
|
||||
if (val) {
|
||||
params.append(mode, 1)
|
||||
} else {
|
||||
params.delete(mode)
|
||||
}
|
||||
p = params.toString()
|
||||
el.href = baseURL + (p ? '?' + p : '')
|
||||
})
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var params = new URLSearchParams(window.location.search)
|
||||
if (params.has('dark')) {
|
||||
setMode('dark', true)
|
||||
} else if (params.has('light')) {
|
||||
setMode('light', true)
|
||||
}
|
||||
})
|
141
files/styles.css
|
@ -1,141 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'inconsolata';
|
||||
src: url('/inconsolata-regular-webfont.woff2') format('woff2'),
|
||||
url('/inconsolata-regular-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #333;
|
||||
background-color: #f2f4f4;
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited,
|
||||
a:hover,
|
||||
a:active {
|
||||
color: rgb(62, 231, 123);
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.dim {
|
||||
color: rgb(62, 231, 123, 0.5);
|
||||
}
|
||||
|
||||
.mastodon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
color: rgb(50, 200, 100);
|
||||
background-color: #010;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited,
|
||||
a:hover,
|
||||
a:active {
|
||||
color: rgb(62, 231, 123);
|
||||
}
|
||||
|
||||
.dim {
|
||||
color: rgb(62, 231, 123, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
body {
|
||||
color: #333;
|
||||
background-color: #f2f4f4;
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited,
|
||||
a:hover,
|
||||
a:active {
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.dim {
|
||||
color: rgba(30, 30, 30, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
/* Manually toggled dark class on body */
|
||||
body.dark {
|
||||
color: rgb(50, 200, 100);
|
||||
background-color: #010;
|
||||
background-image: none;
|
||||
}
|
||||
.dark a,
|
||||
.dark a:visited,
|
||||
.dark a:hover,
|
||||
.dark a:active {
|
||||
color: rgb(62, 231, 123);
|
||||
}
|
||||
.dark .dim {
|
||||
color: rgb(62, 231, 123, 0.5);
|
||||
}
|
||||
|
||||
/* Manually toggled light class on body */
|
||||
body.light {
|
||||
color: #333;
|
||||
background-color: #f2f4f4;
|
||||
background-repeat: repeat;
|
||||
}
|
||||
|
||||
.light a,
|
||||
.light a:visited,
|
||||
.light a:hover,
|
||||
.light a:active {
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.light .dim {
|
||||
color: rgba(30, 30, 30, 0.5);
|
||||
}
|
||||
|
||||
.page-wrapper {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.inner-wrapper {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
font-family: 'inconsolata', monospace;
|
||||
margin: 0 auto;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding: 0;
|
||||
line-height: 0.5em;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 700px) {
|
||||
body, html {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: 900px) {
|
||||
body, html {
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Get Path to script folder
|
||||
DIR="$( cd "$( dirname "$0" )" && pwd )"
|
||||
# Fix path in case of symlinks
|
||||
DIR=$(cd "$DIR" && pwd -P)
|
||||
|
||||
# Admin commands
|
||||
if [ ! -L "/usr/local/bin/cosmic-user" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-user" "/usr/local/bin/cosmic-user"
|
||||
fi
|
||||
if [ ! -L "/usr/local/bin/cosmic-rss" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-rss" "/usr/local/bin/cosmic-rss"
|
||||
fi
|
||||
if [ ! -L "/usr/local/bin/cosmic-web" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-web" "/usr/local/bin/cosmic-web"
|
||||
fi
|
||||
if [ ! -L "/usr/local/bin/cosmic-ship" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-ship" "/usr/local/bin/cosmic-ship"
|
||||
fi
|
||||
|
||||
# User runnable commands
|
||||
if [ ! -L "/usr/local/bin/cosmic-roster" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-roster" "/usr/local/bin/cosmic-roster"
|
||||
fi
|
||||
if [ ! -L "/usr/local/bin/roster" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-roster" "/usr/local/bin/roster"
|
||||
fi
|
||||
if [ ! -L "/usr/local/bin/motd" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-motd" "/usr/local/bin/motd"
|
||||
fi
|
||||
if [ ! -L "/usr/local/bin/log" ]; then
|
||||
ln -s "${DIR}/bin/cosmic-log" "/usr/local/bin/log"
|
||||
fi
|
||||
|
||||
# Files
|
||||
if [ ! -L "/etc/welcomemail.tmpl" ]; then
|
||||
ln -s "${DIR}/templates/welcomemail.tmpl" "/etc/welcomemail.tmpl"
|
||||
fi
|
||||
if [ ! -L "/etc/newship.tmpl" ]; then
|
||||
ln -s "${DIR}/templates/newship.tmpl" "/etc/newship.tmpl"
|
||||
fi
|
||||
|
||||
# Manpages
|
||||
if [ ! -L "/usr/share/man/man1/log.1" ]; then
|
||||
ln -s "${DIR}/man/cosmic-log.1" "/usr/share/man/man1/log.1"
|
||||
fi
|
||||
|
||||
# BASH completion
|
||||
if [ ! -L "/etc/bash_completion.d/log" ]; then
|
||||
ln -s "${DIR}/completion/cosmic-log.d" "/etc/bash_completion.d/log"
|
||||
chmod 644 "/etc/bash_completion.d/log"
|
||||
fi
|
|
@ -1,404 +0,0 @@
|
|||
CC BY-NC-ND 4.0 (share with attribution, no commercial, no remix)
|
||||
|
||||
Attribution-NonCommercial-NoDerivatives 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
|
||||
International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-NonCommercial-NoDerivatives 4.0 International Public
|
||||
License ("Public License"). To the extent this Public License may be
|
||||
interpreted as a contract, You are granted the Licensed Rights in
|
||||
consideration of Your acceptance of these terms and conditions, and the
|
||||
Licensor grants You such rights in consideration of benefits the
|
||||
Licensor receives from making the Licensed Material available under
|
||||
these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
c. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
d. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
e. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
f. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
g. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
h. NonCommercial means not primarily intended for or directed towards
|
||||
commercial advantage or monetary compensation. For purposes of
|
||||
this Public License, the exchange of the Licensed Material for
|
||||
other material subject to Copyright and Similar Rights by digital
|
||||
file-sharing or similar means is NonCommercial provided there is
|
||||
no payment of monetary compensation in connection with the
|
||||
exchange.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part, for NonCommercial purposes only; and
|
||||
|
||||
b. produce and reproduce, but not Share, Adapted Material
|
||||
for NonCommercial purposes only.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties, including when
|
||||
the Licensed Material is used other than for NonCommercial
|
||||
purposes.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material, You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
For the avoidance of doubt, You do not have permission under
|
||||
this Public License to Share Adapted Material.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database for NonCommercial purposes
|
||||
only and provided You do not Share Adapted Material;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
|
@ -1,444 +0,0 @@
|
|||
CC BY-NC-SA 4.0 (share and remix with attribution, no commercial use)
|
||||
|
||||
This work is licensed under the Creative Commons
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International License. To
|
||||
view a copy of this license, visit
|
||||
http://creativecommons.org/licenses/by-nc-sa/4.0/, or read below.
|
||||
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||
("Public License"). To the extent this Public License may be
|
||||
interpreted as a contract, You are granted the Licensed Rights in
|
||||
consideration of Your acceptance of these terms and conditions, and the
|
||||
Licensor grants You such rights in consideration of benefits the
|
||||
Licensor receives from making the Licensed Material available under
|
||||
these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-NC-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution, NonCommercial, and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. NonCommercial means not primarily intended for or directed towards
|
||||
commercial advantage or monetary compensation. For purposes of
|
||||
this Public License, the exchange of the Licensed Material for
|
||||
other material subject to Copyright and Similar Rights by digital
|
||||
file-sharing or similar means is NonCommercial provided there is
|
||||
no payment of monetary compensation in connection with the
|
||||
exchange.
|
||||
|
||||
l. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
m. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
n. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part, for NonCommercial purposes only; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material for
|
||||
NonCommercial purposes only.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties, including when
|
||||
the Licensed Material is used other than for NonCommercial
|
||||
purposes.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-NC-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database for NonCommercial purposes
|
||||
only;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
|
@ -1,429 +0,0 @@
|
|||
CC-BY-SA-4.0 (distribute, remix with attribution, share-alike)
|
||||
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
|
@ -8,7 +8,7 @@ log
|
|||
transmits messages from traveling ships, remote outposts, and new human
|
||||
colonies via Quantum Entaglement Communicator (QEC) half-duplex, phase-shift
|
||||
keying multilevel modulation.
|
||||
.PP
|
||||
.P
|
||||
Messages are queued in the ship's draft system. A call to
|
||||
.B log
|
||||
then queries those messages in the queue and waits for human confirmation
|
||||
|
@ -16,7 +16,7 @@ that the draft is ready to be sent. When approved,
|
|||
.B log
|
||||
will query for a subject, topic, or title for the message. Finally the
|
||||
message is sent to the relay paired with the QEC during construction.
|
||||
.PP
|
||||
.P
|
||||
There is no recall method to the QEC system. Messages sent cannot be removed,
|
||||
however, due to the nature of qubits, the message can be modified after
|
||||
transmission by editing the original draft.
|
||||
|
@ -24,7 +24,5 @@ transmission by editing the original draft.
|
|||
Systems with abundant quantities of exotic or phase-shifted matter may
|
||||
encounter delays in communication, time shifting, and rare cases, a reverse
|
||||
in localized time of log receipts.
|
||||
.SH SEE ALSO
|
||||
ship(1)
|
||||
.SH AUTHOR
|
||||
Yin, Juan; Cao, Yuan; Yong, Hai-Lin; Ren, Ji-Gang
|
|
@ -1,73 +0,0 @@
|
|||
.TH COSMIC.VOYAGE 1 "20 Nov 2018"
|
||||
.SH NAME
|
||||
cosmic.voyage - humanity's stellar diaspora
|
||||
.SH DESRIPTION
|
||||
.PP
|
||||
.B cosmic.voyage
|
||||
is a public access unix system (pubnix) and part of the tilde
|
||||
(tildeverse) community of micro-instances offering free shell
|
||||
accounts. It exists primarily to author and promote
|
||||
a collaborative science-fiction universe. A secondary goal is the
|
||||
promotion of command-line skills in *nix systems. The use of plain
|
||||
text tools and command line interfaces is both a thematic choice
|
||||
and technical practice.
|
||||
.SH STORY
|
||||
Our users write stories as the people aboard ships, colonies, and
|
||||
outposts, using the only remaining free, interconnected network
|
||||
that unites the dispersed peoples of the stars.
|
||||
.PP
|
||||
The
|
||||
.B Quantum Entanglement Communicator
|
||||
or
|
||||
.B QEC
|
||||
is the a device that bridges the vast distances of space with near-
|
||||
instantaneous communication. Unfortunately, it provides only
|
||||
a limited bandwidth to the ancient relay hub in the SOL system. It
|
||||
is enough for only simple, plain-text messaging.
|
||||
.PP
|
||||
The ships in our story have all left Earth behind at different
|
||||
times, and in some cases they've left from different realities.
|
||||
The QEC bridges all these gaps, uniting ships across time and
|
||||
space in the strangest of ways. Records are stored chronologically
|
||||
on the relay hub as they are received, but their source
|
||||
transmissions are often wildly out of sync.
|
||||
.SH GETTING STARTED
|
||||
.PP
|
||||
New users are greeted with a welcome email upon the creation of
|
||||
their account that provides information on creating a ship, the
|
||||
structure of files and folders, and instructions for creating logs
|
||||
to the QEC. This welcome email can be read using the programs
|
||||
.B alpine
|
||||
or
|
||||
.B mutt.
|
||||
.PP
|
||||
New users may also find it useful to use the interactive menu
|
||||
system by running the
|
||||
.B menu
|
||||
command.
|
||||
.PP
|
||||
Finally, users may find up-to-date comprehensive guides on the
|
||||
system wiki by running the
|
||||
.B wiki
|
||||
command.
|
||||
.SH NOTES
|
||||
This is a full Ubuntu environment and allows users to do far more
|
||||
than simply write stories. Feel free to take advantage of the
|
||||
tools available here to experiment with other aspects of the
|
||||
command line. We have many programming languages / compilers
|
||||
installed.
|
||||
.PP
|
||||
Users are also allowed to run reoccuring or scheduled tasks using
|
||||
cron-jobs. If you do this, please include `/usr/bin/nice -n 19'
|
||||
before any tasks you run to minimize the system load over time.
|
||||
.SH BUGS
|
||||
There are probably many bugs in this system. Please report
|
||||
anything you find by mailing
|
||||
.B tomasino@cosmic.voyage
|
||||
or finding us on irc.tilde.chat in the #cosmic room.
|
||||
.SH AUTHOR
|
||||
Cosmic Voyage was created by James Tomasino, but the works of
|
||||
fiction for each ship are the results of the individual authors on
|
||||
this system. Run the
|
||||
.B roster
|
||||
command to see who is responsible for each ship.
|
30
man/ship.1
|
@ -1,30 +0,0 @@
|
|||
.TH SHIP 1 "11 Jun 2033"
|
||||
.SH NAME
|
||||
ship \- Register Ship with Quantum Entanglement Communicator
|
||||
.SH SYNOPSIS
|
||||
ship
|
||||
.SH DESRIPTION
|
||||
.B ship
|
||||
registers a ship, colony, outpost, settlement, or other stellar habitat as a
|
||||
paired system with the Quantum Entanglement Communicator (QEC). Upon
|
||||
registering, the local habitat will generate a prime qubit interface with
|
||||
the relay system indicated, establishing spooky action at a distance (SAAD).
|
||||
The QEC operates at half-duplex, phase-shift keying multilevel modulation with
|
||||
the local habitat.
|
||||
.PP
|
||||
A local message queue is created in the ship's draft system. This queue can be
|
||||
modified, appended, or otherwise manipulated by the local habitat. When a
|
||||
transmission of the local queue is desired, the habitat operators can utilize
|
||||
the
|
||||
.B log
|
||||
command to trigger the QEC relay.
|
||||
.SH BUGS
|
||||
Due to limitations in the archaic design of the QEC interface, ship names must
|
||||
use the ASCII character set. Extended unicode is permissable within the relayed
|
||||
content, however.
|
||||
.PP
|
||||
Report all other issues using the QEC.
|
||||
.SH SEE ALSO
|
||||
log(1)
|
||||
.SH AUTHOR
|
||||
Written by Juan Yin and Niels Anderssen
|
163
menu/pdmenurc
|
@ -1,163 +0,0 @@
|
|||
#!/usr/bin/pdmenu
|
||||
|
||||
title:Cosmic Voyage
|
||||
|
||||
# desktop The space over which the menus appear.
|
||||
# title The line at the top of the screen.
|
||||
# base The line at the bottom of the screen.
|
||||
# menu The normal color of text in a menu.
|
||||
# selbar The selection bar in the menu, when over normal text.
|
||||
# shadow The shadow of a window
|
||||
# menuhot The color of text in a menu that is a hotkey.
|
||||
# selbarhot The color of a hotkey when the selection bar is over it.
|
||||
# unselmenu The color of a menu window that is not currently active.
|
||||
|
||||
# possible colors
|
||||
# (bg valid) (fg only)
|
||||
# black gray
|
||||
# red brightred
|
||||
# green brightgreen
|
||||
# brown yellow
|
||||
# blue brightblue
|
||||
# magenta brightmagenta
|
||||
# cyan brightcyan
|
||||
# lightgray white
|
||||
|
||||
#Set a pleasing color scheme.
|
||||
color:desktop:white:black
|
||||
color:title:white:red
|
||||
color:base:lightgray:red
|
||||
color:menu:lightgray:blue
|
||||
color:selbar:lightgray:red
|
||||
color:shadow:gray:black
|
||||
color:menuhot:white:blue
|
||||
color:selbarhot:white:red
|
||||
color:unselmenu:lightgray:black
|
||||
|
||||
#this is a comment
|
||||
menu:main:Main Menu:Cosmic Voyage Menu System v1.0
|
||||
show:Cosmic _Tools..::cosmic
|
||||
show:_Communication..::comms
|
||||
show:_Fun & Games..::games
|
||||
nop
|
||||
exec:_Wiki::/usr/local/bin/wiki
|
||||
exec:_FAQ::/usr/local/bin/faq
|
||||
nop
|
||||
exit:E_xit
|
||||
|
||||
menu:comms:Communication:Reach out and touch someone
|
||||
exec:_Mail (alpine)::/usr/bin/alpine
|
||||
exec:_Mail (mutt)::/usr/bin/mutt
|
||||
exec:tilde _net news (forums)::/usr/local/bin/news
|
||||
exec:_bbj (Bulletin Butter & Jelly!)::/usr/local/bin/bbj
|
||||
exec:_fellowsh::clear;/usr/local/bin/fellowsh
|
||||
exec:_IRC (weechat)::/usr/local/bin/chat
|
||||
exec:i_ris (Serverless text-based forum for tilde-likes)::/usr/local/bin/iris
|
||||
group:_Finger..
|
||||
exec::makemenu: \
|
||||
echo "menu:finger:Finger:Finger other cosmic users"; \
|
||||
for u in `/usr/local/bin/voyagers | sort`; do \
|
||||
echo "exec:$u:truncate:/usr/bin/finger ${u}@cosmic.voyage"; \
|
||||
done; \
|
||||
echo "nop"; \
|
||||
echo "exec:_Remote User:truncate,edit:/usr/bin/finger \"~user name:~\""; \
|
||||
echo "nop"; \
|
||||
echo "exit:E_xit"
|
||||
show:::finger
|
||||
remove:::finger
|
||||
endgroup
|
||||
group:_Talk..
|
||||
exec::makemenu: \
|
||||
echo "menu:talk:Talk:Talk to other users"; \
|
||||
for u in `/usr/bin/who | /usr/bin/cut -f 1 -d " "| /usr/bin/sort -u `; do \
|
||||
echo "exec:$u::/usr/local/bin/ytalk $u"; \
|
||||
done; \
|
||||
echo "nop"; \
|
||||
echo "exit:E_xit"
|
||||
show:::talk
|
||||
remove:::talk
|
||||
endgroup
|
||||
group:_Unison (folder sync)..
|
||||
exec::makemenu: \
|
||||
echo "menu:unison:Unison:Synchronize folders to other systems"; \
|
||||
for f in ~/.unison/*.prf; do \
|
||||
profile="$(basename $f)"; \
|
||||
profile="${profile%.*}"; \
|
||||
echo "exec:profile\: $profile::/usr/bin/unison $profile"; \
|
||||
done; \
|
||||
echo "exec:_New command:truncate,edit:/usr/bin/unison \"~[ships/] [ssh\://remote/folder]:~\""; \
|
||||
echo "nop"; \
|
||||
echo "exit:E_xit"
|
||||
show:::unison
|
||||
remove:::unison
|
||||
endgroup
|
||||
exec:_Project Files::/usr/local/bin/projects
|
||||
exec:_webfinger (link your fediverse account)::/usr/local/bin/webfinger
|
||||
nop
|
||||
exit:E_xit
|
||||
|
||||
menu:games:Fun & Games:Games and fun distractions
|
||||
exec:_Allegra::/usr/bin/rlwrap nc localhost 1822
|
||||
exec:_Alone Among the Stars:truncate:/usr/local/bin/alone | par -w 60
|
||||
exec:_Among Sus::/usr/bin/rlwrap nc sus.tildeverse.org 1234
|
||||
exec:_Bastard Tetris::/usr/games/bastet
|
||||
show:_Botany..::botany
|
||||
exec:_cbonsai::/usr/local/bin/cbonsai --live
|
||||
exec:_chess::/usr/local/bin/chs
|
||||
exec:clidle (wordle)::/usr/games/clidle
|
||||
group:_Crossword..
|
||||
exec::makemenu: \
|
||||
echo "menu:crossword:Crossword:Play Crossword Puzzles"; \
|
||||
for c in `/usr/local/bin/crossword`; do \
|
||||
echo "exec:$c::/usr/local/bin/crossword ${c}"; \
|
||||
done; \
|
||||
echo "nop"; \
|
||||
echo "exit:E_xit"
|
||||
show:::crossword
|
||||
remove:::crossword
|
||||
endgroup
|
||||
exec:_Dungeon Crawl Stone Soup::/usr/local/bin/dcss
|
||||
exec:_Fortune:truncate:/usr/games/fortune | par -w 60
|
||||
exec:_Freesweep::/usr/games/freesweep
|
||||
exec:_Go::/usr/games/gnugo
|
||||
exec:_Gorched::/snap/bin/gorched
|
||||
exec:Greed::/usr/games/greed
|
||||
exec:_I Ching::/usr/games/iching
|
||||
exec:_JPL Horizons::telnet horizons.jpl.nasa.gov 6775
|
||||
exec:_Moon Buggy::/usr/games/moon-buggy
|
||||
exec:Multi_Zork::/usr/bin/rlwrap nc multizork.icculus.org 23
|
||||
exec:_Nethack::/usr/games/nethack-console
|
||||
exec:_Random Chess Endgame Puzzle:truncate:shuf -n 1 /var/packages/fen/endgames-fen.txt | xargs fen
|
||||
exec:_SLASHEM (Nethack clone)::/usr/games/slashem
|
||||
exec:_Space Invaders::/usr/games/ninvaders
|
||||
exec:_Sudoku::/usr/games/nudoku
|
||||
exec:_Tron::ssh sshtron.zachlatta.com
|
||||
exec:_Zangband::/usr/games/zangband
|
||||
exec:2048::/usr/games/2048
|
||||
nop
|
||||
exit:_Back to main menu..
|
||||
|
||||
menu:cosmic:Cosmic Tools:Tools related to the cosmic voyage story
|
||||
exec:_QEC browser::/usr/local/bin/qec
|
||||
exec:_Recent QEC logs:truncate:/usr/local/bin/latest
|
||||
exec:_Rate of QEC logs:truncate:/usr/local/bin/rate
|
||||
exec:High _Scores:truncate:/usr/local/bin/scores | column -t -s,
|
||||
nop
|
||||
show:_Write a new message..::write
|
||||
exec:_Log a new message::/usr/local/bin/log
|
||||
exec:_Dictionary/Thesaurus..:truncate,edit:/usr/bin/sdcv -n --utf8-output "~word:~"
|
||||
nop
|
||||
exec:_Author and Ship Lists:truncate,edit:/usr/local/bin/roster "~user or ship name (or blank for all):~"
|
||||
exec:_Create a new ship::/usr/local/bin/ship
|
||||
nop
|
||||
exit:_Back to main menu..
|
||||
|
||||
menu:botany:Botany Tools:Tools related to botany
|
||||
exec:_Botany::/usr/local/bin/botany
|
||||
exec:_List Living Plants:truncate:/usr/local/bin/wilty list
|
||||
exec:_Water Random Plant:truncate:/usr/local/bin/wilty water
|
||||
nop
|
||||
exit:_Back to main menu..
|
||||
|
||||
# write a message menu
|
||||
preproc:/usr/local/bin/menu_write
|
523
pkglist
|
@ -1,523 +0,0 @@
|
|||
accountsservice
|
||||
acpid
|
||||
adduser
|
||||
alpine
|
||||
apparmor
|
||||
apport
|
||||
apport-symptoms
|
||||
apt
|
||||
apt-file
|
||||
apt-transport-https
|
||||
apt-utils
|
||||
asciidoc
|
||||
asciinema
|
||||
aspell
|
||||
at
|
||||
autossh
|
||||
base-files
|
||||
base-passwd
|
||||
bash
|
||||
bash-completion
|
||||
bastet
|
||||
bat
|
||||
bc
|
||||
bcache-tools
|
||||
bind9
|
||||
bind9-host
|
||||
bsdgames
|
||||
bsdmainutils
|
||||
bsdutils
|
||||
btrfs-progs
|
||||
build-essential
|
||||
busybox-initramfs
|
||||
busybox-static
|
||||
byobu
|
||||
ca-certificates
|
||||
calc
|
||||
certbot
|
||||
cloud-guest-utils
|
||||
cloud-initramfs-copymods
|
||||
cloud-initramfs-dyn-netconf
|
||||
command-not-found
|
||||
coreutils
|
||||
cowsay
|
||||
cpio
|
||||
cron
|
||||
cryptsetup
|
||||
cryptsetup-bin
|
||||
cryptsetup-initramfs
|
||||
cryptsetup-run
|
||||
curl
|
||||
dash
|
||||
dav-text
|
||||
dbus
|
||||
debconf
|
||||
debconf-i18n
|
||||
debian-goodies
|
||||
dict
|
||||
diction
|
||||
diffutils
|
||||
dirmngr
|
||||
dmeventd
|
||||
dmidecode
|
||||
dmsetup
|
||||
dnsutils
|
||||
dosfstools
|
||||
dovecot-imapd
|
||||
dovecot-pop3d
|
||||
dovecot-sieve
|
||||
dpkg
|
||||
e2fsprogs
|
||||
e3
|
||||
ed
|
||||
efingerd
|
||||
efte
|
||||
eject
|
||||
elvis-tiny
|
||||
elvish
|
||||
emacs
|
||||
emacs-nox
|
||||
ethtool
|
||||
fail2ban
|
||||
fdisk
|
||||
figlet
|
||||
file
|
||||
finalrd
|
||||
findutils
|
||||
finger
|
||||
fish
|
||||
fonts-ubuntu-console
|
||||
fortune-mod
|
||||
freesweep
|
||||
friendly-recovery
|
||||
fte-terminal
|
||||
ftp
|
||||
fuse
|
||||
gawk
|
||||
gcc
|
||||
gcc-8-base
|
||||
geoip-database
|
||||
gettext-base
|
||||
git
|
||||
git-man
|
||||
gnat
|
||||
gnupg
|
||||
gnupg-l10n
|
||||
gnupg-utils
|
||||
gnutls-bin
|
||||
goaccess
|
||||
gpg
|
||||
gpg-agent
|
||||
gpg-wks-client
|
||||
gpg-wks-server
|
||||
gpgconf
|
||||
gpgsm
|
||||
gpgv
|
||||
greed
|
||||
grep
|
||||
groff
|
||||
groff-base
|
||||
grub-common
|
||||
grub-pc
|
||||
gzip
|
||||
hdparm
|
||||
hostname
|
||||
html2text
|
||||
htop
|
||||
info
|
||||
init
|
||||
init-system-helpers
|
||||
initramfs-tools
|
||||
initramfs-tools-bin
|
||||
initramfs-tools-core
|
||||
inn2
|
||||
install-info
|
||||
installation-report
|
||||
iptables
|
||||
iputils-tracepath
|
||||
irqbalance
|
||||
irssi
|
||||
iso-codes
|
||||
jed
|
||||
joe
|
||||
jq
|
||||
kakoune
|
||||
klibc-utils
|
||||
kmod
|
||||
krb5-locales
|
||||
ksh
|
||||
landscape-common
|
||||
language-pack-en
|
||||
language-selector-common
|
||||
libaccountsservice0
|
||||
libacl1
|
||||
libapparmor1
|
||||
libasn1-8-heimdal
|
||||
libassuan0
|
||||
libattr1
|
||||
libaudit-common
|
||||
libaudit1
|
||||
libblkid1
|
||||
libbz2-1.0
|
||||
libc6
|
||||
libcap-ng0
|
||||
libcom-err2
|
||||
libcurl3-gnutls
|
||||
libcurl4
|
||||
libdb5.3
|
||||
libdbus-1-3
|
||||
libdebconfclient0
|
||||
libdevmapper-event1.02.1
|
||||
libdevmapper1.02.1
|
||||
libdrm-common
|
||||
libdrm2
|
||||
libdumbnet1
|
||||
libedit2
|
||||
libelf1
|
||||
liberror-perl
|
||||
libexpat1
|
||||
libext2fs2
|
||||
libfdisk1
|
||||
libfuse2
|
||||
libgcc1
|
||||
libgcrypt20
|
||||
libgdbm-compat4
|
||||
libgeoip1
|
||||
libglib2.0-0
|
||||
libglib2.0-data
|
||||
libgmp10
|
||||
libgnutls-dane0
|
||||
libgnutls-openssl27
|
||||
libgnutls28-dev
|
||||
libgnutls30
|
||||
libgnutlsxx28
|
||||
libgpg-error0
|
||||
libgpm2
|
||||
libgssapi-krb5-2
|
||||
libgssapi3-heimdal
|
||||
libgtk-3-common
|
||||
libhcrypto4-heimdal
|
||||
libheimbase1-heimdal
|
||||
libheimntlm0-heimdal
|
||||
libhx509-5-heimdal
|
||||
libidn2-0
|
||||
libiptc0
|
||||
libisns0
|
||||
libk5crypto3
|
||||
libkeyutils1
|
||||
libklibc
|
||||
libkmod2
|
||||
libkrb5-26-heimdal
|
||||
libkrb5-3
|
||||
libkrb5support0
|
||||
libksba8
|
||||
libldap-2.4-2
|
||||
libldap-common
|
||||
liblocale-gettext-perl
|
||||
liblua5.2-dev
|
||||
liblz4-1
|
||||
liblzma5
|
||||
liblzo2-2
|
||||
libmariadbclient-dev
|
||||
libmaxminddb-dev
|
||||
libmaxminddb0
|
||||
libmount1
|
||||
libmpfr6
|
||||
libmspack0
|
||||
libncurses5-dev
|
||||
libncurses6
|
||||
libncursesw5-dev
|
||||
libncursesw6
|
||||
libnetfilter-conntrack3
|
||||
libnfnetlink0
|
||||
libnghttp2-14
|
||||
libnpth0
|
||||
libnuma1
|
||||
libp11-kit0
|
||||
libpam-cracklib
|
||||
libpam-modules
|
||||
libpam-modules-bin
|
||||
libpam-systemd
|
||||
libpam0g
|
||||
libparted2
|
||||
libpcap0.8
|
||||
libpci3
|
||||
libpcre3
|
||||
libpipeline1
|
||||
libpng16-16
|
||||
libpolkit-agent-1-0
|
||||
libpolkit-gobject-1-0
|
||||
libpq-dev
|
||||
libpq5
|
||||
libpsl5
|
||||
libreadline5
|
||||
libroken18-heimdal
|
||||
librtmp1
|
||||
libsasl2-2
|
||||
libsasl2-modules
|
||||
libsasl2-modules-db
|
||||
libsdl2-2.0-0
|
||||
libsdl2-dev
|
||||
libsdl2-image-2.0-0
|
||||
libsdl2-mixer-2.0-0
|
||||
libsdl2-ttf-dev
|
||||
libseccomp2
|
||||
libselinux1
|
||||
libsemanage-common
|
||||
libsemanage1
|
||||
libsepol1
|
||||
libsigsegv2
|
||||
libsmartcols1
|
||||
libss2
|
||||
libssl-dev
|
||||
libssl1.1
|
||||
libstdc++6
|
||||
libsystemd0
|
||||
libtasn1-6
|
||||
libtermkey-dev
|
||||
libtext-charwidth-perl
|
||||
libtext-iconv-perl
|
||||
libtext-wrapi18n-perl
|
||||
libtinfo-dev
|
||||
libtinfo6
|
||||
libtre-dev
|
||||
libtre5
|
||||
libudev1
|
||||
libunistring2
|
||||
libunwind8
|
||||
libusb-1.0-0
|
||||
libutempter0
|
||||
libuuid1
|
||||
libwind0-heimdal
|
||||
libwrap0
|
||||
libx11-6
|
||||
libx11-data
|
||||
libxau6
|
||||
libxcb1
|
||||
libxdmcp6
|
||||
libxext6
|
||||
libxft-dev
|
||||
libxml2
|
||||
libxmlsec1
|
||||
libxmlsec1-openssl
|
||||
libxmuu1
|
||||
libxslt1.1
|
||||
libzstd1
|
||||
linux-base
|
||||
linux-generic
|
||||
linux-headers-generic
|
||||
locales
|
||||
login
|
||||
logrotate
|
||||
lolcat
|
||||
lpe
|
||||
lsb-base
|
||||
lshw
|
||||
lsof
|
||||
ltrace
|
||||
lua5.2
|
||||
luarocks
|
||||
lvm2
|
||||
lynx
|
||||
lzip
|
||||
make
|
||||
man-db
|
||||
manpages
|
||||
mawk
|
||||
mc
|
||||
mdadm
|
||||
members
|
||||
mg
|
||||
micro
|
||||
mime-support
|
||||
mlocate
|
||||
moon-buggy
|
||||
mosh
|
||||
mtr-tiny
|
||||
mutt
|
||||
nano
|
||||
ncdu
|
||||
ncurses-base
|
||||
ncurses-bin
|
||||
ncurses-term
|
||||
ne
|
||||
ne-doc
|
||||
neomutt
|
||||
neovim
|
||||
net-tools
|
||||
nethack-console
|
||||
newmail
|
||||
nginx
|
||||
ninja-build
|
||||
ninvaders
|
||||
nodejs
|
||||
ntfs-3g
|
||||
nudoku
|
||||
nvi
|
||||
nvi-doc
|
||||
oidentd
|
||||
open-iscsi
|
||||
open-vm-tools
|
||||
openbsd-inetd
|
||||
openssh-client
|
||||
openssh-server
|
||||
openssh-sftp-server
|
||||
openssl
|
||||
overlayroot
|
||||
pandoc
|
||||
par
|
||||
parted
|
||||
passwd
|
||||
pastebinit
|
||||
patch
|
||||
pciutils
|
||||
pdmenu
|
||||
perl
|
||||
perl-base
|
||||
pinentry-curses
|
||||
pkg-config
|
||||
plymouth
|
||||
plymouth-theme-ubuntu-text
|
||||
policykit-1
|
||||
pollinate
|
||||
popularity-contest
|
||||
postfix
|
||||
powermgmt-base
|
||||
procps
|
||||
psmisc
|
||||
publicsuffix
|
||||
pwgen
|
||||
python-apt-common
|
||||
python-is-python2
|
||||
python-setuptools
|
||||
python3
|
||||
python3-apport
|
||||
python3-apt
|
||||
python3-asn1crypto
|
||||
python3-attr
|
||||
python3-automat
|
||||
python3-certbot-nginx
|
||||
python3-certifi
|
||||
python3-cffi-backend
|
||||
python3-chardet
|
||||
python3-click
|
||||
python3-colorama
|
||||
python3-commandnotfound
|
||||
python3-configobj
|
||||
python3-constantly
|
||||
python3-cryptography
|
||||
python3-debconf
|
||||
python3-debian
|
||||
python3-dev
|
||||
python3-distro-info
|
||||
python3-distupgrade
|
||||
python3-gdbm
|
||||
python3-httplib2
|
||||
python3-hyperlink
|
||||
python3-idna
|
||||
python3-incremental
|
||||
python3-neovim
|
||||
python3-newt
|
||||
python3-openssl
|
||||
python3-pam
|
||||
python3-pip
|
||||
python3-pkg-resources
|
||||
python3-problem-report
|
||||
python3-proselint
|
||||
python3-pyasn1
|
||||
python3-pyasn1-modules
|
||||
python3-requests
|
||||
python3-requests-unixsocket
|
||||
python3-serial
|
||||
python3-service-identity
|
||||
python3-setuptools
|
||||
python3-six
|
||||
python3-software-properties
|
||||
python3-systemd
|
||||
python3-twisted
|
||||
python3-twisted-bin
|
||||
python3-update-manager
|
||||
python3-urllib3
|
||||
python3-venv
|
||||
python3-virtualenv
|
||||
python3-zope.interface
|
||||
ranger
|
||||
rclone
|
||||
recutils
|
||||
rsync
|
||||
run-one
|
||||
s-nail
|
||||
screen
|
||||
sdcv
|
||||
sed
|
||||
sensible-utils
|
||||
shared-mime-info
|
||||
shellcheck
|
||||
silversearcher-ag
|
||||
slrn
|
||||
snapd
|
||||
software-properties-common
|
||||
sosreport
|
||||
sqlite3
|
||||
squashfs-tools
|
||||
ssh-import-id
|
||||
stow
|
||||
strace
|
||||
stunnel4
|
||||
sysstat
|
||||
sysvinit-utils
|
||||
talk
|
||||
talkd
|
||||
tar
|
||||
tasksel
|
||||
tcl
|
||||
tcl-dev
|
||||
tcpd
|
||||
tcpdump
|
||||
telnet
|
||||
the
|
||||
tig
|
||||
tilde
|
||||
time
|
||||
tin
|
||||
tmux
|
||||
tor
|
||||
torsocks
|
||||
tree
|
||||
ubuntu-keyring
|
||||
ubuntu-minimal
|
||||
ubuntu-release-upgrader-core
|
||||
ubuntu-server
|
||||
ubuntu-standard
|
||||
ucf
|
||||
udev
|
||||
ufw
|
||||
unattended-upgrades
|
||||
units
|
||||
unzip
|
||||
update-manager-core
|
||||
update-motd
|
||||
update-notifier-common
|
||||
usbutils
|
||||
util-linux
|
||||
uucp
|
||||
uuid-runtime
|
||||
vim
|
||||
vim-athena
|
||||
vim-gtk
|
||||
vim-runtime
|
||||
virtualenv
|
||||
weechat
|
||||
wget
|
||||
x11-apps
|
||||
xauth
|
||||
xdg-user-dirs
|
||||
xfsprogs
|
||||
xsel
|
||||
yarn
|
||||
zangband
|
||||
zerofree
|
||||
zile
|
||||
zlib1g
|
||||
zlib1g-dev
|
||||
zsh
|
92
pkglist-pip
|
@ -1,92 +0,0 @@
|
|||
acme==1.1.0
|
||||
appdirs==1.4.3
|
||||
asciinema==2.0.2
|
||||
asn1crypto==0.24.0
|
||||
attrs==19.3.0
|
||||
Automat==0.8.0
|
||||
AV-98==1.0.0
|
||||
blessed==1.15.0
|
||||
blinker==1.4
|
||||
certbot==0.40.0
|
||||
certbot-nginx==0.40.0
|
||||
certifi==2019.11.28
|
||||
chardet==3.0.4
|
||||
Click==7.0
|
||||
colorama==0.4.3
|
||||
command-not-found==0.3
|
||||
ConfigArgParse==0.13.0
|
||||
configobj==5.0.6
|
||||
constantly==15.1.0
|
||||
cryptography==2.8
|
||||
cursewords==1.0.4
|
||||
dbus-python==1.2.16
|
||||
distlib==0.3.0
|
||||
distro==1.4.0
|
||||
distro-info===0.23ubuntu1
|
||||
entrypoints==0.3
|
||||
fail2ban==0.11.1
|
||||
filelock==3.0.12
|
||||
future==0.18.2
|
||||
greenlet==0.4.15
|
||||
httplib2==0.14.0
|
||||
hyperlink==19.0.0
|
||||
idna==2.8
|
||||
importlib-metadata==1.5.0
|
||||
incremental==16.10.1
|
||||
isc==2.0
|
||||
Jetforce==0.4.0
|
||||
josepy==1.2.0
|
||||
keyring==18.0.1
|
||||
language-selector==0.1
|
||||
launchpadlib==1.10.13
|
||||
lazr.restfulclient==0.14.2
|
||||
lazr.uri==1.0.3
|
||||
mock==3.0.5
|
||||
more-itertools==4.2.0
|
||||
msgpack==0.6.2
|
||||
netifaces==0.10.4
|
||||
oauthlib==3.1.0
|
||||
PAM==0.4.2
|
||||
parsedatetime==2.4
|
||||
pbr==5.4.5
|
||||
ply==3.11
|
||||
proselint==0.10.2
|
||||
puzpy==0.2.4
|
||||
pyasn1==0.4.2
|
||||
pyasn1-modules==0.2.1
|
||||
PyGObject==3.36.0
|
||||
PyHamcrest==1.9.0
|
||||
PyJWT==1.7.1
|
||||
pynvim==0.4.1
|
||||
pyOpenSSL==19.0.0
|
||||
pyparsing==2.4.6
|
||||
pyRFC3339==1.1
|
||||
pyserial==3.4
|
||||
python-apt==2.0.0+ubuntu0.20.4.1
|
||||
python-debian===0.1.36ubuntu1
|
||||
pytz==2019.3
|
||||
PyYAML==5.3.1
|
||||
ranger-fm==1.9.3
|
||||
requests==2.22.0
|
||||
requests-toolbelt==0.8.0
|
||||
requests-unixsocket==0.2.0
|
||||
SecretStorage==2.3.1
|
||||
service-identity==18.1.0
|
||||
simplejson==3.16.0
|
||||
six==1.14.0
|
||||
ssh-import-id==5.10
|
||||
systemd-python==234
|
||||
Twisted==20.3.0
|
||||
ubuntu-advantage-tools==20.3
|
||||
ufw==0.36
|
||||
unattended-upgrades==0.1
|
||||
urllib3==1.25.8
|
||||
urwid==2.1.0
|
||||
virtualenv==20.0.17
|
||||
wadllib==1.3.3
|
||||
wcwidth==0.1.9
|
||||
zipp==1.0.0
|
||||
zope.component==4.3.0
|
||||
zope.event==4.4
|
||||
zope.hookable==5.0.0
|
||||
zope.interface==4.7.1
|
|
@ -1,17 +0,0 @@
|
|||
2048-cli https://github.com/tiehuis/2048-cli.git
|
||||
burrow https://github.com/jamestomasino/burrow.git
|
||||
fellowsh git://circumlunar.space/fellowsh
|
||||
goaccess-1.3
|
||||
gophernicus https://github.com/kimholviala/gophernicus.git
|
||||
mg-3.4
|
||||
moe-1.10
|
||||
mp-5.x https://github.com/ttcdt/mp-5.x.git
|
||||
mpdm https://github.com/ttcdt/mpdm.git
|
||||
mpsl https://github.com/ttcdt/mpsl.git
|
||||
pb https://tildegit.org/tomasino/pb.git
|
||||
sacc git://bitreich.org/sacc/
|
||||
sam https://github.com/deadpixi/sam.git
|
||||
se-3.0.1
|
||||
teco-ecc015f68b
|
||||
tinyfugue https://github.com/kruton/tinyfugue.git
|
||||
vis-0.6
|
|
@ -1,46 +0,0 @@
|
|||
cosmic.voyage permit_auth_destination
|
||||
.aussies.space permit_auth_destination
|
||||
.circumlunar.space permit_auth_destination
|
||||
.hashbang.sh permit_auth_destination
|
||||
.thunix.cf permit_auth_destination
|
||||
.thunix.net permit_auth_destination
|
||||
.tildeverse.org permit_auth_destination
|
||||
hmm.st permit_auth_destination
|
||||
aussies.space permit_auth_destination
|
||||
circumlunar.space permit_auth_destination
|
||||
ctrl-c.club permit_auth_destination
|
||||
envs.net permit_auth_destination
|
||||
radiofreqs.space permit_auth_destination
|
||||
rw.rs permit_auth_destination
|
||||
fuckup.club permit_auth_destination
|
||||
grex.org permit_auth_destination
|
||||
hashbang.sh permit_auth_destination
|
||||
nand.sh permit_auth_destination
|
||||
rawtext.club permit_auth_destination
|
||||
sdf.org permit_auth_destination
|
||||
sdf-eu.org permit_auth_destination
|
||||
thunix.cf permit_auth_destination
|
||||
thunix.net permit_auth_destination
|
||||
tild3.org permit_auth_destination
|
||||
tilde.chat permit_auth_destination
|
||||
tilde.club permit_auth_destination
|
||||
tilde.green permit_auth_destination
|
||||
tilde.institute permit_auth_destination
|
||||
tilde.life permit_auth_destination
|
||||
tilde.news permit_auth_destination
|
||||
tilde.one permit_auth_destination
|
||||
tilde.pink permit_auth_destination
|
||||
tilde.site permit_auth_destination
|
||||
tilde.team permit_auth_destination
|
||||
tilde.town permit_auth_destination
|
||||
tilde.wiki permit_auth_destination
|
||||
tilde.wtf permit_auth_destination
|
||||
tilde.zone permit_auth_destination
|
||||
tildegit.org permit_auth_destination
|
||||
tildenet.org permit_auth_destination
|
||||
tilderadio.org permit_auth_destination
|
||||
tildeteam.org permit_auth_destination
|
||||
tildeverse.org permit_auth_destination
|
||||
ttm.sh permit_auth_destination
|
||||
yourtilde.com permit_auth_destination
|
||||
sr.ht permit_auth_destination
|