Compare commits

...

342 Commits

Author SHA1 Message Date
James Tomasino ef2d799e81 patched by Julio B <julio.bacel@gmail.com> to escape xml in feeds 2024-02-07 13:06:45 +00:00
James Tomasino fca7fa9296 adds green access 2023-07-12 09:01:56 +00:00
James Tomasino 39c91b53bd allow sdf-eu 2023-05-28 12:06:40 +00:00
James Tomasino 3afde5fdab new fortunes 2023-05-25 11:54:03 +00:00
James Tomasino bf5a45c9e4 adds new fortune 2023-05-15 20:08:46 +00:00
James Tomasino bd0d8ee5d9 menu addtions 2023-03-28 17:49:36 +00:00
James Tomasino 9248f27290 webfinger context added 2023-03-27 20:58:31 +00:00
James Tomasino ed60e4855d fixed menu link 2023-03-21 17:15:22 +00:00
James Tomasino 5458eff4e9 Merge pull request 'Change 'print' statement to Python3 version so script can run.' (#10) from hifikuno/cosmic:master into master
Reviewed-on: cosmic/cosmic#10
2023-02-27 12:14:39 +00:00
hifikuno cbd1805a00 Change 'print' statement to Python3 version so script can run. 2023-02-27 03:54:11 +00:00
James Tomasino c89dcc6c5a gemini no longer needs regen 2023-02-25 16:54:52 +00:00
James Tomasino 786f904dd2 adds projects to menu 2023-01-31 21:14:19 +00:00
James Tomasino 53235449c3 handle subfolders in ship directories better 2023-01-24 18:02:49 +00:00
James Tomasino eddb1d2f65 fixed escaping rss 2023-01-22 16:00:32 +00:00
James Tomasino 52a2f0bcac adds whoa 2022-10-03 15:40:06 +00:00
James Tomasino 136e58a8a9 projects bin added 2022-10-03 15:32:34 +00:00
James Tomasino 86da408781 adds system update email 2022-09-01 11:07:23 +00:00
James Tomasino ca3badbfdf alone among the stars in games 2022-03-20 17:47:17 +00:00
James Tomasino 49cd9da06d adds alone to scripts 2022-03-20 17:43:08 +00:00
James Tomasino 99a408c66a simplified julian date in finger 2022-03-16 00:32:30 +00:00
James Tomasino 658ba7c295 more time responses in finger 2022-03-15 23:34:18 +00:00
James Tomasino 681554d2c2 adds wordle clone to games 2022-02-04 21:31:11 +00:00
James Tomasino bbfc72be17 qec uses phetch 2022-02-03 11:34:21 +00:00
James Tomasino 24c3d76e83 adds chess endgame puzzles 2021-11-13 19:04:56 +00:00
James Tomasino 976c95863b new games 2021-10-19 11:24:49 +00:00
James Tomasino 4845a11221 adds changelog to finger responses 2021-10-19 11:23:58 +00:00
James Tomasino 8583f7556d efingerd supports .pronouns 2021-10-19 11:15:33 +00:00
James Tomasino 9d623b5ae2 ship promoting more flexible license 2021-06-19 10:44:08 +00:00
James Tomasino f370866014 removed web as new proxy site is built 2021-06-18 18:32:10 +00:00
James Tomasino 0c3654acd3 new menu additions and web fixes 2021-06-18 12:43:34 +00:00
James Tomasino d429f07c2b allow srht from cosmic 2021-05-29 18:50:19 +00:00
James Tomasino 3bd488fb92 web styles and scripts external files 2021-05-13 13:32:19 +00:00
James Tomasino 14e44475e5 adds drone status
continuous-integration/drone/push Build is passing Details
2021-04-07 20:11:04 +00:00
James Tomasino 96d49d346b trying a different drone configuration
continuous-integration/drone/push Build is passing Details
2021-04-07 19:00:36 +00:00
James Tomasino 6a5bc73e67 log avoids tput if unneeded
continuous-integration/drone/push Build is failing Details
2021-04-07 18:55:15 +00:00
James Tomasino b54ed5f8a8 major change to web script to avoid downtime during long generations 2021-03-31 15:46:12 +00:00
James Tomasino 6eca123f19 tweak for relative links in gemini 2021-03-12 12:43:25 +00:00
James Tomasino 57b63f7e46 atom feed added in addition to rss in all environments 2021-03-06 11:47:28 +00:00
James Tomasino baf66f5be9 adds ship back into gemini 2021-02-28 20:43:25 +00:00
James Tomasino f19ec2e054 limit recent entries to 20 on index page for gemini 2021-02-27 15:57:22 +00:00
James Tomasino f33cec78ff gemini cosmic homepage improved 2021-02-27 15:27:50 +00:00
James Tomasino af9da8b2ec tweaks for cosmic web & rss performance 2021-01-15 13:32:07 +00:00
James Tomasino ddb28ee6f8 inconsolata font added directly to site rather than rely on google fonts 2020-12-23 19:54:11 +00:00
James Tomasino 1f091e39a5 adds no-color mode to log 2020-11-29 20:35:33 +00:00
James Tomasino a3ed7bf2b5 tilde.json now includes user list
continuous-integration/drone/push Build is failing Details
2020-10-27 19:45:22 +00:00
James Tomasino 919d9d3469 Merge branch 'master' of ttm.sh:cosmic/cosmic
continuous-integration/drone/push Build is failing Details
* 'master' of ttm.sh:cosmic/cosmic:
  adding drone tests
2020-10-25 14:25:25 +00:00
James Tomasino 0d5e4472d7 email about nanowrimo 2020-10-25 14:24:46 +00:00
James Tomasino 760c7a1d5f adding drone tests 2020-10-23 18:37:49 +00:00
James Tomasino 5d8569c6e8 wordcount script to get wordcount for specific user 2020-10-20 12:44:55 +00:00
James Tomasino c767371fdb new games 2020-10-19 17:52:10 +00:00
James Tomasino 29683f9b8d fun and games 2020-10-12 18:43:46 +00:00
James Tomasino 2b91d2cc1c backup all ships, not just one with unison 2020-10-11 23:43:34 +00:00
James Tomasino c2a5ea9a76 fixing accidental : breaking pdmenu 2020-10-11 23:41:54 +00:00
James Tomasino 9dfb8dd963 tweaking instructions on unison 2020-10-11 23:38:42 +00:00
James Tomasino 80bc2795c2 adds unison options to communications 2020-10-11 23:37:07 +00:00
James Tomasino 00cf48d6d2 menu color tweaks 2020-10-05 15:01:41 +00:00
James Tomasino bd6fa7b435 little tweaks 2020-09-30 20:05:18 +00:00
James Tomasino ccd098b554 fixing glob null bug in menu 2020-09-22 19:42:07 +00:00
James Tomasino 9256b46d98 adds tilde.one 2020-09-19 03:09:24 +00:00
James Tomasino 9034b20334 makefile defaults to help 2020-09-18 22:37:51 +00:00
James Tomasino 7653070cc9 linting fix for def 2020-09-18 22:25:57 +00:00
James Tomasino 6f238130a9 3rd party packages installed get repos listed where they exist 2020-09-18 21:49:26 +00:00
James Tomasino 2e944f0a3f pip list up to date 2020-09-18 21:45:08 +00:00
James Tomasino 437970ac76 updating apt list for installs 2020-09-18 21:30:03 +00:00
James Tomasino a772757eb9 change register@cosmic.voyage to my personal email for now 2020-09-18 20:29:17 +00:00
James Tomasino 8a1b3b2f54 accept mail only from tilde servers 2020-09-18 20:22:40 +00:00
James Tomasino c7d5358dce adding access restrictions that match transport to limit where mail can come from 2020-09-18 16:05:20 +00:00
James Tomasino 3369017c5a patch remove expired domains 2020-09-18 15:35:43 +00:00
James Tomasino 100542f3bc adds countships and minor manpage update 2020-09-18 13:12:59 +00:00
James Tomasino e1d8ad9ef0 adds botany launcher, sorts finger 2020-09-15 21:41:39 +00:00
James Tomasino f2429d01b0 .. not ... 2020-09-11 16:47:49 +00:00
James Tomasino 48bc3e7872 small additions to the welcome email 2020-09-11 15:34:31 +00:00
James Tomasino c16eda13e4 escape quotes in web for toot verification 2020-09-10 22:03:43 +00:00
James Tomasino 2ed6db14c4 Merge pull request 'Add link to the mastodon account on the index page' (#9) from verify-mastodon-account into master
Reviewed-on: cosmic/cosmic#9
2020-09-10 22:00:23 +00:00
Robert Miles fe4ef5f75f Add link to the mastodon account on the index page
This verifies that the account is legitimate. Right now, I have the link being completely hidden from view and screenreaders, but if we want to actually advertise the mastodon account here then that can be arranged.
2020-09-10 21:58:29 +00:00
James Tomasino a2936d52ed sdcv installed and helper wrapper added 2020-09-10 13:08:50 +00:00
James Tomasino 7baa15fbfd updated transport for new tildes 2020-07-23 16:49:10 +00:00
James Tomasino 761096df61 gemini success line added 2020-06-03 09:29:56 +00:00
James Tomasino 8c4012e601 rss for gemini in gemini terms 2020-06-03 08:42:07 +00:00
James Tomasino 02d4bc1fd2 gemini generation working 2020-06-01 21:03:28 +00:00
James Tomasino 0097eb1f90 gemini script working but jetforce has issues with spaces in names 2020-06-01 20:39:38 +00:00
James Tomasino 0f784678c7 log now checks for # and skips messages rather than create broken links 2020-05-11 20:04:37 +00:00
James Tomasino e21d1076f9 adds exception for anonhmmst bot user 2020-04-26 20:40:42 +00:00
James Tomasino f2884a510a removing banneduser and ip checks 2020-04-26 20:40:28 +00:00
James Tomasino c74fa27247 chat back to using localhost connection 2020-04-26 19:17:40 +00:00
James Tomasino 1e1d886eb2 news always checks for latest descriptions 2020-04-26 13:08:01 +00:00
James Tomasino 3a37b90078 april 2020 system update email 2020-04-26 12:50:16 +00:00
James Tomasino 089ad0fc88 check banlists on user creation 2020-02-01 05:38:07 +00:00
James Tomasino 36e975bb92 corrected chat script to use ssl and 6697 2020-01-03 23:06:50 +00:00
James Tomasino 0cf5fd0cff renamed members to voyagers 2019-12-26 00:56:02 +00:00
James Tomasino 0d37e5065a removing log -n 2019-11-17 14:58:38 +00:00
James Tomasino 62f12e8ee7 grep uses local for a-z range. explicitly use C to avoid unicode chars 2019-11-17 14:56:21 +00:00
James Tomasino 40019b6a95 getting rid of old "new" command that didnt work 2019-11-14 22:00:09 +00:00
James Tomasino ff7d5c851a pretty format on scores in menu
continuous-integration/drone/push Build encountered an error Details
2019-11-01 16:11:28 +00:00
James Tomasino ffff506d9b scores are sorted
continuous-integration/drone/push Build encountered an error Details
2019-11-01 16:07:15 +00:00
James Tomasino d916138f23 added basic scores command to list wordcount for all users that have > 0
continuous-integration/drone/push Build encountered an error Details
2019-11-01 16:02:13 +00:00
James Tomasino 7e1bd94ac1 favicon comment stays with favicon lines
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:59:31 +00:00
James Tomasino b6e844aa4e formatting
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:58:22 +00:00
James Tomasino 489701a936 formatting
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:56:35 +00:00
James Tomasino 3e0b2c3f2d who cares about ie?
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:54:01 +00:00
James Tomasino 3cd47f4335 light theme works too with query param
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:51:12 +00:00
James Tomasino ad3c15dbcc using boolean has for dark param value
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:35:55 +00:00
James Tomasino e0f2955546 using new URLSearchParam api
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:31:44 +00:00
James Tomasino 6a73861596 force dark theme with query param
continuous-integration/drone/push Build encountered an error Details
2019-10-31 16:02:17 +00:00
James Tomasino bf6628199d adding light and dark theme to cosmic web display
continuous-integration/drone/push Build encountered an error Details
2019-09-30 21:03:25 +00:00
James Tomasino e3f4a53f6f Merge branch 'master' of khuxkm/cosmic into master 2019-08-17 06:14:48 -04:00
Robert Miles 67dac548a6 Add detail to the rate command 2019-08-17 05:05:10 +00:00
James Tomasino 18db85ab5d added log -f -t option to directly log message non-interactively 2019-08-17 00:55:17 -04:00
James Tomasino 95fd937291 added diction to system 2019-06-16 14:44:31 -04:00
James Tomasino ca21f8b6c8 supressing extra pages after title image 2019-06-08 16:15:30 -04:00
James Tomasino 9fc6877eef metadata and styles updated for epub generation 2019-06-08 16:02:39 -04:00
James Tomasino 2f3470ccf8 cleaning up styles for epub 2019-06-07 19:35:11 -04:00
James Tomasino 96d6949ded epub generation script added 2019-06-07 18:58:37 -04:00
James Tomasino 6faabe3302 adds pandoc 2019-06-07 17:34:34 -04:00
James Tomasino 022a554759 adds sacc to pkglists 2019-06-07 08:26:25 -04:00
James Tomasino 76401afece error handling and help added 2019-05-21 23:00:32 -04:00
James Tomasino d0db372c83 crossword puzzles in menu 2019-05-21 22:52:43 -04:00
James Tomasino 733d235f3a adds crossword utility to list and start puzzles 2019-05-21 22:47:53 -04:00
James Tomasino 2f38888ca8 chat connects to tildeverse, not localhost 2019-05-20 21:03:26 -04:00
James Tomasino 6c91364a5f explicitly backup ship descriptions 2019-05-14 19:28:49 -04:00
James Tomasino 9d241346a4 added inn2 and slrn for newsgroups 2019-04-30 19:51:35 -04:00
James Tomasino 3bcfd55b80 added tin 2019-04-30 19:50:49 -04:00
James Tomasino 0c75b5fb66 linting fixes 2019-04-30 17:24:01 -04:00
James Tomasino 1769396340 asciidoc 2019-04-30 17:17:34 -04:00
James Tomasino f2b07c933c more descriptive news name 2019-04-25 13:05:55 -04:00
James Tomasino c4dbdab027 added news to menu 2019-04-25 13:04:36 -04:00
James Tomasino 43574807a6 added news wrapper for slrn 2019-04-25 13:03:21 -04:00
James Tomasino ed37b681b7 web generates tilde.json 2019-04-14 09:41:11 -04:00
James Tomasino 151c63e24d ship works in menu 2019-04-02 07:51:02 -04:00
James Tomasino 69efc60083 small cleanup 2019-03-31 15:14:29 -04:00
James Tomasino 863ee32951 warning on logs exceeding 80 columns 2019-03-26 21:38:33 -04:00
James Tomasino 8f45614668 added more descriptive title 2019-03-25 19:45:51 -04:00
James Tomasino 05614d967e dimmed some things on cosmic. looks cool 2019-03-23 21:58:42 -04:00
James Tomasino 3aa3024d48 adding a dim alt color on cosmic 2019-03-23 21:33:08 -04:00
James Tomasino 56295a1cb3 adding lang back in 2019-03-23 21:11:48 -04:00
James Tomasino 3b34dca48e removed lang 2019-03-23 21:08:55 -04:00
James Tomasino 0bea62b4b4 ship about and author pages styled 2019-03-23 16:13:36 -04:00
James Tomasino d66e83a283 added joining instructions page 2019-03-23 16:03:38 -04:00
fosslinux 1c44abb5d2 allow aussies.space email 2019-03-17 15:03:05 +11:00
James Tomasino 4b1e8e5616 added cosmic banner for web 2019-03-16 18:25:51 -04:00
James Tomasino 8af1d37050 added cursewords 2019-03-09 11:43:11 -05:00
James Tomasino c56401b4f2 added bbj to menu 2019-02-26 21:50:50 -05:00
James Tomasino 0bbbb666f0 added nodejs and yarn package manager 2019-02-24 11:54:33 -05:00
James Tomasino 2329be66fe Merge branch 'master' of ttm.sh:cosmic/cosmic
* 'master' of ttm.sh:cosmic/cosmic:
  Update 'emails/2019-01-02.eml'
  adding new thunix hostname (.cf to be deprecated)
2019-02-22 11:13:39 -05:00
James Tomasino 472fefb32d fixed bug in author web text file 2019-02-22 11:13:31 -05:00
fosslinux 5f318acc5c Merge branch 'master' of ubergeek/cosmic into master 2019-02-21 02:08:32 -05:00
ubergeek b7f8d61f9b Update 'emails/2019-01-02.eml' 2019-02-20 21:17:13 -05:00
ubergeek 8db9bc5128 adding new thunix hostname (.cf to be deprecated) 2019-02-20 21:14:29 -05:00
James Tomasino 89e497db9c no longer need to ignore irc user 2019-02-20 20:25:47 -05:00
James Tomasino 7dbb504592 added uucp and removed irc user from members list 2019-02-16 20:29:38 -05:00
James Tomasino bdebff5783 author info added to web 2019-02-16 19:58:03 -05:00
James Tomasino 7035c2c614 ship about pages supported 2019-02-16 19:52:06 -05:00
James Tomasino a3dfc5e14c lots of new fortunes 2019-02-12 18:17:59 -05:00
James Tomasino 1dbbf9b9e6 added catfort for funsies 2019-02-12 17:57:53 -05:00
James Tomasino fa0c33f508 pretty colors and better error handling for log messages 2019-02-12 14:13:30 -05:00
James Tomasino 11b6b80f82 log titles confirm before posting 2019-02-12 14:04:41 -05:00
James Tomasino 68a7d4808e log titles limited to 60 characters 2019-02-12 13:43:13 -05:00
James Tomasino 55d8821285 fixed pathing error to files testing for utf-8 2019-02-12 09:38:11 -05:00
James Tomasino 987b86020b logs must be in utf8 or will be rejected 2019-02-12 09:23:54 -05:00
James Tomasino 9b227c3155 added rate to menu 2019-02-09 15:52:53 -05:00
James Tomasino bd65f69f04 rate format to 2 decimals 2019-02-09 11:14:41 -05:00
James Tomasino f19bdf6bea added a rate function to see posting rate 2019-02-09 10:49:18 -05:00
James Tomasino 28867363a1 multi-space ships formatted in rss properly 2019-02-09 09:49:32 -05:00
James Tomasino 71f091d49f can run ship outpost or colony 2019-02-08 09:36:01 -05:00
James Tomasino 5de671e02c fall back on jed if editor not set 2019-02-07 15:48:52 -05:00
James Tomasino 4861c600d4 make source added and working 2019-02-05 21:34:15 -05:00
James Tomasino fc176298a1 source packages attempt to auto-clone 2019-02-05 21:31:41 -05:00
James Tomasino d40b969f5e favicons gallore 2019-02-05 18:15:47 -05:00
James Tomasino 725cfaa781 added cc attribution 2019-02-05 17:50:24 -05:00
James Tomasino be6b2937c0 better favicon 2019-02-05 17:49:00 -05:00
James Tomasino 95667f9ccb moved * outside quotes for copy 2019-02-05 17:44:12 -05:00
James Tomasino 0a5892c4a3 new favicon for cosmic 2019-02-05 17:34:43 -05:00
James Tomasino 985503eb9a added ncdu 2019-02-05 16:21:33 -05:00
James Tomasino 6fd9b0055d source packages added 2019-02-05 16:11:08 -05:00
James Tomasino 5a41fa011d Merge branch 'master' of ttm.sh:cosmic/cosmic
* 'master' of ttm.sh:cosmic/cosmic:
  pip pkg list
  update pkglist
2019-02-05 16:06:57 -05:00
James Tomasino 61320707ae tilde added to pkglist 2019-02-05 16:06:36 -05:00
Samuel Tyler 16709adbfa pip pkg list 2019-02-05 21:04:51 +00:00
Samuel Tyler 1955c33d65 update pkglist 2019-02-05 20:50:28 +00:00
James Tomasino 06bf569b9c user usernames over id numbers in case we need to restore system 2019-02-05 14:12:50 -05:00
James Tomasino e83c2c248a publish user changed to non-login 2019-02-05 14:10:40 -05:00
James Tomasino 645ea7634e updated new user welcome email 2019-02-05 12:09:03 -05:00
James Tomasino d63bbc259a log upped version number 2019-01-27 00:02:38 -05:00
James Tomasino 662a8fdccb publish manages log 2019-01-26 23:47:38 -05:00
James Tomasino 7ccd694ee9 added LICENSE option to motd 2019-01-26 23:06:20 -05:00
James Tomasino 9b053a115f updated man for ship 2019-01-26 22:56:43 -05:00
James Tomasino 3b96b5aa89 spdx queries added 2019-01-26 22:36:10 -05:00
James Tomasino 7ebbf34be2 ship no longer needs params 2019-01-26 22:10:57 -05:00
James Tomasino ac9135a7ad colorizing license output 2019-01-26 21:52:43 -05:00
James Tomasino 60044345f1 license questions colors and format 2019-01-26 21:50:12 -05:00
James Tomasino 7d2029f05e Merge branch 'master' of ttm.sh:cosmic/cosmic
* 'master' of ttm.sh:cosmic/cosmic:
  added CC licenses as a start
  template vars all caps
2019-01-26 21:38:36 -05:00
James Tomasino fc78ec7f3a basic license chooser in place 2019-01-26 21:38:29 -05:00
James Tomasino bd92e1007a added CC licenses as a start 2019-01-26 21:32:57 -05:00
James Tomasino 113f94ef1f Merge branch 'master' of ttm.sh:cosmic/cosmic
* 'master' of ttm.sh:cosmic/cosmic:
  updated script for formatting
2019-01-26 21:18:42 -05:00
James Tomasino 5adbb88a5c template vars all caps 2019-01-26 21:18:38 -05:00
James Tomasino d34eef07c4 updated script for formatting 2019-01-26 21:18:28 -05:00
James Tomasino b19149993f ship command is interactive and better structured 2019-01-26 21:12:36 -05:00
James Tomasino 5ee4fa6c87 added .txt extension to web based licenses 2019-01-24 17:14:46 -05:00
James Tomasino 9c703c2365 web should display license if it exists on ship pages now 2019-01-24 17:11:38 -05:00
James Tomasino 43e8cddb3a allow users to omit from anthology 2019-01-24 10:34:39 -05:00
James Tomasino 5f44ec1213 emailed about anthology 2019-01-24 10:10:59 -05:00
Samuel Tyler e4a88a57de make web slightly safer 2019-01-23 23:53:08 +00:00
James Tomasino b1782048bc license file added 2019-01-23 17:39:45 -05:00
James Tomasino 480b4039d2 latest includes log numbers 2019-01-22 10:44:40 -05:00
James Tomasino 42386924dd latest now supports regex matches 2019-01-22 10:09:32 -05:00
James Tomasino 348fd9dbb4 rss on gopher wraps in pre tag also 2019-01-21 09:27:18 -05:00
Samuel Tyler 2fb3758f14 allow hashbang servers to be emailed 2019-01-20 05:28:34 +00:00
James Tomasino 9c1b7c71b2 added tig to pkglist 2019-01-20 00:27:38 -05:00
Samuel Tyler 899d8f9d27 add notify.tmpl 2019-01-20 05:22:54 +00:00
James Tomasino bbee5dbec7 optimized efinger list 2019-01-17 13:55:39 -05:00
Samuel Tyler e4faed25a4 sysstat was installed for notify script 2019-01-17 07:12:50 +00:00
Samuel Tyler cc7974f4a7 add notify script 2019-01-17 01:08:51 +00:00
James Tomasino 30a7ef8bd5 added dict 2019-01-16 17:14:08 -05:00
James Tomasino 5e948f0842 mailing list support 2019-01-15 18:13:40 -05:00
James Tomasino 61782199ad completed uninstall in make 2019-01-14 19:36:36 -05:00
James Tomasino 4c5f69f6ab added remaining tildeverse hosts 2019-01-14 19:09:51 -05:00
James Tomasino 5a26629bd8 added @ttm.sh alias to postfix allowed 2019-01-14 19:04:05 -05:00
James Tomasino f0d3e4a2c5 fixed finger list to allow ships with more than one word. goaccess package 2019-01-13 23:09:16 -05:00
James Tomasino e275397db6 finger online status was hardcoded to tomasino 2019-01-13 11:49:58 -05:00
James Tomasino 7f07a178ff updated motd scripts 2019-01-12 22:47:06 -05:00
James Tomasino e981d7a016 added cosmic.voyage manpage 2019-01-12 22:08:44 -05:00
James Tomasino 10695191b0 updated pkglist 2019-01-12 20:02:10 -05:00
James Tomasino 6f96caf9a5 corrected log formatting 2019-01-12 19:41:18 -05:00
James Tomasino 45e5d5510d formatting 2019-01-12 19:34:59 -05:00
James Tomasino 472d4e8cfb showing online or not 2019-01-12 19:15:37 -05:00
James Tomasino 1e7b095ded check updatemotd scripts in travis 2019-01-11 15:25:25 -05:00
James Tomasino f825600097 validated motd scripts 2019-01-11 15:24:14 -05:00
James Tomasino cb0c6db508 update-motd scripts added 2019-01-11 15:16:58 -05:00
James Tomasino ca95a5ebb9 added thunix.cf to postfix and menu edits ship desc 2019-01-10 18:30:15 -05:00
James Tomasino 6b33531dad dont hide .txt 2019-01-09 23:00:23 -05:00
James Tomasino e1bcba1d96 writing menu added 2019-01-09 22:58:22 -05:00
James Tomasino 68b00a113b myships added 2019-01-09 21:33:26 -05:00
James Tomasino de0e5314dc better finger menu in menu 2019-01-09 21:19:56 -05:00
James Tomasino 0b6177cb96 absolute paths in menu 2019-01-09 21:04:11 -05:00
James Tomasino 8e5f98a4b0 double-checking that user has a home dir 2019-01-08 21:38:18 -05:00
James Tomasino fb915ecb15 members script 2019-01-08 21:36:35 -05:00
James Tomasino 31e82f5e61 Merge branch 'master' of fosslinux/cosmic into master 2019-01-08 18:56:18 -05:00
Samuel Tyler ccd3f9a876 change mvship to be case insensitive like ship 2019-01-09 10:12:51 +11:00
Samuel Tyler d7ee8b3e01 nitpicks - mostly consistency 2019-01-09 10:12:10 +11:00
Samuel Tyler 6146ef134b add chat script 2019-01-09 10:11:46 +11:00
James Tomasino 0789c8cf44 Merge branch 'master' of fosslinux/cosmic into master 2019-01-07 22:21:43 -05:00
Samuel Tyler 28d3393048 case-insensitive ship name checking 2019-01-08 14:20:38 +11:00
Samuel Tyler 0553479187 nitpick spelling 2019-01-08 13:52:22 +11:00
James Tomasino 3d9b02bd03 jailbreak works 2019-01-07 21:42:21 -05:00
James Tomasino d2fba610a6 added start of a script to easily unban fail2banned people 2019-01-07 21:35:57 -05:00
James Tomasino ea5f529006 formatting 2019-01-06 19:07:07 -05:00
James Tomasino 4c3a9941dc ship pages numbered and sequential 2019-01-06 18:58:25 -05:00
James Tomasino 131db8347e allow email to tilde.institute 2019-01-05 10:27:16 -05:00
James Tomasino 959e62a8da finger list shows users online and their ships 2019-01-04 21:43:39 -05:00
James Tomasino 44ee9db7fd removed underscores since they break talk command 2019-01-02 23:27:17 -05:00
James Tomasino 8ec840266f menu restructured 2019-01-02 21:07:24 -05:00
James Tomasino bfb9e55a60 better colors in menu 2019-01-02 20:31:54 -05:00
James Tomasino 96f786abd1 added apt package installer 2019-01-02 15:01:57 -05:00
James Tomasino 79428eb185 add main transport to postfix on install 2019-01-02 14:55:11 -05:00
James Tomasino 4a08a3b383 added postfix settings to makefile 2019-01-02 14:45:27 -05:00
James Tomasino cae9ddbb84 added email about federation 2019-01-02 14:23:49 -05:00
James Tomasino e3cfdcc273 cleaner yesno function 2019-01-01 22:20:27 -05:00
James Tomasino 5a5353b9d3 shellcheck fixes 2019-01-01 21:34:15 -05:00
James Tomasino 7a25a7c59d travis should check all scripts 2019-01-01 21:29:43 -05:00
James Tomasino c11007fdbc updated readme with build status 2019-01-01 21:25:42 -05:00
James Tomasino d3bf38278c trying to kill shellcheck errors 2019-01-01 21:21:27 -05:00
James Tomasino 03213dd3a7 added travis tests 2019-01-01 21:00:37 -05:00
James Tomasino 2531fdbd5a log text styles 2019-01-01 15:44:37 -05:00
James Tomasino 0c8be9a7dc more log messaging tweaks 2019-01-01 15:25:09 -05:00
James Tomasino 347a734189 more log messaging tweaks 2019-01-01 15:22:17 -05:00
James Tomasino 589ddef0fe pretty colors in log 2019-01-01 15:21:14 -05:00
James Tomasino 20925f0e0a added finger to menu 2019-01-01 14:56:04 -05:00
James Tomasino a232275e42 added menu settings to cosmic repo 2019-01-01 14:50:10 -05:00
James Tomasino ab77a34340 better efingerd maintenance 2019-01-01 14:44:04 -05:00
James Tomasino a74223717a removed comment 2018-12-31 12:54:43 -05:00
James Tomasino 6b7775b2fd skel support 2018-12-31 12:54:26 -05:00
James Tomasino dcac3b6c47 removed external email address from welcome email 2018-12-31 12:53:09 -05:00
James Tomasino f9812d236b adding .efingerd to new skel folder 2018-12-31 12:40:32 -05:00
James Tomasino d50d763aed fortunes stored in git 2018-12-31 12:37:01 -05:00
James Tomasino 6edfa3636c greatly simplified latest script 2018-12-31 12:28:33 -05:00
James Tomasino ee8a71785b simplify latest script 2018-12-31 12:26:27 -05:00
James Tomasino a57cfb3afa log titles allow all printable ascii chars 2018-12-30 17:28:34 -05:00
James Tomasino 15c6ece183 better log error message 2018-12-30 14:13:13 -05:00
James Tomasino 93414f7109 log can allow quotes and question marks 2018-12-30 14:12:47 -05:00
James Tomasino e7b2d20097 allow periods in ship names and titles 2018-12-30 00:51:14 -05:00
James Tomasino f3545a4097 log titles ascii only 2018-12-30 00:49:41 -05:00
James Tomasino 03151c941c limit ship name by formatting 2018-12-30 00:45:46 -05:00
James Tomasino 230be664f3 new menu app 2018-12-29 17:04:09 -05:00
James Tomasino 4308d5b4f4 updated welcome email template 2018-12-28 11:38:12 -05:00
James Tomasino 917466a0e2 newfortune to add fortune lines. updatefinger to force updating uncustomized fingerd 2018-12-28 10:35:27 -05:00
James Tomasino 0ebe2f7819 simplified dcss 2018-12-23 15:42:44 -05:00
James Tomasino dfe80994ff dcss portable 2018-12-23 15:41:02 -05:00
James Tomasino a15541d8d0 fixed roster count command 2018-12-20 12:12:57 -05:00
James Tomasino 2c51ebc1b8 cosmic voyage mailing list 2018-12-17 17:53:40 -05:00
James Tomasino 9540aed1a8 fixing vars 2018-12-17 17:45:48 -05:00
James Tomasino bd95a2d4c9 haha, username 2018-12-17 17:44:43 -05:00
James Tomasino e4186a6132 i love sendmail 2018-12-17 17:43:55 -05:00
James Tomasino 72eea02f67 email 1 2018-12-17 17:43:04 -05:00
James Tomasino e5042f8496 typo in sed 2018-12-17 17:36:21 -05:00
James Tomasino 03b3e84df5 added sysmail script 2018-12-17 17:21:50 -05:00
James Tomasino 2e1ed38f12 updated latest script to simplify it 2018-12-15 12:19:02 -05:00
James Tomasino 5a5b1b6cf3 removed motd and moved it to changelog in wiki 2018-12-14 17:15:16 -05:00
James Tomasino d49b668e22 updated wiki with changelog 2018-12-14 16:48:32 -05:00
James Tomasino 08029b7418 motd 2018-12-14 16:39:30 -05:00
James Tomasino 107be74fa6 added safe version of web 2018-12-14 16:36:54 -05:00
James Tomasino 2c77c2fa14 better style placement in web files 2018-12-14 15:38:35 -05:00
James Tomasino 4f929a798b makefile experiment for web generation failed due to spaces 2018-12-14 15:34:54 -05:00
James Tomasino a2865d787a dying on spaces in filenames 2018-12-14 15:06:37 -05:00
James Tomasino 90bd9921be separated styles from header template 2018-12-14 13:22:24 -05:00
James Tomasino 3029f0e430 generating all but ship pages via make 2018-12-14 13:01:27 -05:00
James Tomasino be7bb48df2 web generation via makefile test 2018-12-14 12:52:15 -05:00
James Tomasino da7545c800 updated man pages 2018-12-14 10:13:09 -05:00
James Tomasino 6182f56dc1 added ship man page 2018-12-12 22:34:16 -05:00
James Tomasino 8d6a6e4e58 some variable name cleanup 2018-12-12 22:24:03 -05:00
James Tomasino 923e1f1d40 web supports pagination after 100 entries 2018-12-12 22:19:33 -05:00
James Tomasino 5b35103b41 rss limited to last 50 logs 2018-12-12 21:36:46 -05:00
James Tomasino d100f16229 removed lists from web 2018-12-12 21:33:14 -05:00
James Tomasino 314c473a12 updated template welcome 2018-12-12 15:23:07 -05:00
James Tomasino d7af67e328 makefile tweak 2018-12-12 15:15:48 -05:00
James Tomasino 2316d618a3 template pathing corrected 2018-12-12 15:12:38 -05:00
James Tomasino ff55e35d89 more removal of cosmic- prefix 2018-12-12 15:10:38 -05:00
James Tomasino 678e69e5e9 major script cleanup 2018-12-12 15:09:26 -05:00
James Tomasino 66a7f7c6a2 motd already lolcatted 2018-12-12 14:49:50 -05:00
James Tomasino b41a907f0a added a meta description to cosmic 2018-12-11 21:48:29 -05:00
James Tomasino 23375c7f3f added line numbers to log entries 2018-12-11 21:20:04 -05:00
James Tomasino 8a83bfcb1b added more helpful scriptipoos 2018-12-11 15:45:45 -05:00
James Tomasino d4225db73c motd update 2018-12-10 17:24:42 -05:00
James Tomasino fc15ce166b misspelled latest 2018-12-10 16:13:57 -05:00
James Tomasino 32b22ee15f updated motd 2018-12-10 16:12:51 -05:00
James Tomasino d79d7fa7d6 added wiki to backup 2018-12-10 16:10:36 -05:00
James Tomasino d5913a4ed9 wiki permissions will reset nightly 2018-12-10 16:09:10 -05:00
James Tomasino ee0fa43444 latest command takes optional number 2018-12-10 15:17:04 -05:00
James Tomasino 8cb3e208d3 updated motd 2018-12-10 14:57:35 -05:00
James Tomasino 517e039fa2 installer updated for cosmic-latest 2018-12-10 14:54:36 -05:00
James Tomasino dc81c823b1 latest script 2018-12-10 14:52:54 -05:00
James Tomasino 45171dc584 added real rule 2018-12-10 14:46:30 -05:00
James Tomasino a0c388f54a motd 2018-12-07 16:48:59 -05:00
James Tomasino 240e3dd636 added rules 2018-12-07 16:43:30 -05:00
James Tomasino 6cd3974a1f ship mover installs 2018-12-07 16:06:54 -05:00
James Tomasino 6e530b1965 mvship command added 2018-12-07 16:05:28 -05:00
James Tomasino 6c05e21f3b updated welcome email 2018-12-07 15:53:48 -05:00
James Tomasino 53dfc8eef1 used %% separator i roster 2018-12-07 15:48:35 -05:00
James Tomasino 77933e86e9 Merge branch 'master' of ttm.sh:cosmic/cosmic 2018-12-07 15:44:43 -05:00
James Tomasino bc98d66398 added ship deleter 2018-12-07 15:44:40 -05:00
James Tomasino b1aee4c1f7 Merge branch 'aewens-cosmic-roster-2' of aewens/cosmic into master 2018-12-07 15:44:25 -05:00
aewens c03e03cc57 Moved to use %% over | in roster as delimiter 2018-12-07 20:42:39 +00:00
James Tomasino 50b1255158 updated ship creation to be user allowed 2018-12-07 15:37:47 -05:00
James Tomasino 48a2fbad64 added output message to cosmic-web in the style of the PR from aewens 2018-12-07 15:06:21 -05:00
113 changed files with 4750 additions and 768 deletions

12
.drone.yml Normal file
View File

@ -0,0 +1,12 @@
---
kind: pipeline
name: shellcheck
steps:
- name: shellcheck
image: koalaman/shellcheck-alpine:stable
commands:
- shellcheck bin/*
- shellcheck efingerd/*
- shellcheck completion/*
- shellcheck update-motd/*

3
.travis.yml Normal file
View File

@ -0,0 +1,3 @@
language: shell
script:
- bash -c 'shopt -s globstar; shellcheck {bin,efingerd,completion,update-motd}/*'

84
Makefile Normal file
View File

@ -0,0 +1,84 @@
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

View File

@ -1,36 +1,3 @@
# cosmic.voyage scripts
# 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)
## 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`
These are the scripts and files designed for https://cosmic.voyage. They're stored here for public review and collaboration.

80
awk/gophermap2gemini.awk Executable file
View File

@ -0,0 +1,80 @@
#!/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 Executable file
View File

@ -0,0 +1,96 @@
#!/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 Executable file
View File

@ -0,0 +1,62 @@
#!/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/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/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

45
bin/author-index Executable file
View File

@ -0,0 +1,45 @@
#!/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 Executable file
View File

@ -0,0 +1,10 @@
#!/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

3
bin/botany Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
/usr/bin/python3 /opt/botany/botany.py

2
bin/catfort Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
fortune | figlet -c -w 80 -f slant | nms -a

2
bin/chat Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
/usr/bin/weechat -r "/set irc.look.temporary_servers on; /connect irc://$(whoami)@localhost:6667/#meta,#cosmic"

View File

@ -1,7 +0,0 @@
#!/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

View File

@ -1,266 +0,0 @@
#!/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 "$@"

View File

@ -1,3 +0,0 @@
#!/bin/sh
lolcat /etc/motd

View File

@ -1,91 +0,0 @@
#!/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/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/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

View File

@ -1,41 +0,0 @@
#!/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

View File

@ -1,172 +0,0 @@
#!/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\">&lt;&lt; BACK TO RELAY ONE LOG</a>\\n\\n\\n"
sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/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=\"/\">&lt;&lt; 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=\"/\">&lt;&lt; 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\">&lt;&lt; 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=\"/\">&lt;&lt; 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

27
bin/countships Executable file
View File

@ -0,0 +1,27 @@
#!/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

29
bin/crossword Executable file
View File

@ -0,0 +1,29 @@
#!/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 Executable file
View File

@ -0,0 +1,10 @@
#!/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 Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
sdcv -n --utf8-output --color "$@" 2>&1 | \
fold --width="$(tput cols)" | \
less -FRX

31
bin/ebook Executable file
View File

@ -0,0 +1,31 @@
#!/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 Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
/usr/bin/lynx -display_charset=utf8 --lss=/dev/null /var/wiki/faq.html

16
bin/jailbreak Executable file
View File

@ -0,0 +1,16 @@
#!/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

9
bin/latest Executable file
View File

@ -0,0 +1,9 @@
#!/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 Executable file
View File

@ -0,0 +1,293 @@
#!/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

2
bin/menu Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
/usr/local/bin/pdmenu -c /etc/pdmenurc

25
bin/menu_write Executable file
View File

@ -0,0 +1,25 @@
#!/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 Executable file
View File

@ -0,0 +1,46 @@
#!/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

5
bin/newfortune Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
if [ -n "$1" ]; then
fort="$*"
printf "%s\\n%%\\n" "$fort" >> /usr/share/games/fortunes/cosmic
fi

7
bin/news Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
if [ ! -f "$HOME/.jnewsrc" ]; then
# need to create newsrc
slrn --create
fi
slrn -d
slrn

27
bin/notify Executable file
View File

@ -0,0 +1,27 @@
#!/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 Executable file
View File

@ -0,0 +1,18 @@
#!/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

2
bin/qec Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
/usr/local/bin/phetch gopher://cosmic.voyage

7
bin/rate Executable file
View File

@ -0,0 +1,7 @@
#!/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 Executable file
View File

@ -0,0 +1,32 @@
#!/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

View File

@ -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 'FS="|" {print $1}' | uniq -c
sort "$temp_roster" | awk -F "%%" '{print $1}' | uniq -c
else
sort "$temp_roster" | column -s "|" -t | grep -i "$*"
sort "$temp_roster" | column -s "%%" -t | grep -i "$*"
fi

55
bin/rss Executable file
View File

@ -0,0 +1,55 @@
#!/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/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/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 Executable file
View File

@ -0,0 +1,19 @@
#!/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 Executable file
View File

@ -0,0 +1,142 @@
#!/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 Executable file
View File

@ -0,0 +1,16 @@
#!/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

10
bin/tilde.json Executable file
View File

@ -0,0 +1,10 @@
#!/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

View File

@ -3,18 +3,18 @@
run_user=$(id -u)
if [ "$run_user" -eq 0 ]; then
n="$1"
e="$2"
k="$3"
if [ ! -z "$n" ]; then
k="$2"
if [ -n "$n" ]; then
# create user
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/newusername/${n}/g" -e "s/newpassword/${newpw}/" /etc/welcomemail.tmpl | sendmail "${n}" "${e}" "tomasino"
sed -e "s/USERNAME/${n}/g" -e "s/PASSWORD/${newpw}/" /etc/templates/welcomemail.tmpl | sendmail "${n}"
fi
if [ ! -z "${k}" ]; then
if [ -n "${k}" ]; then
printf "%s\\n" "${k}" >> "/home/${n}/.ssh/authorized_keys"
else
${EDITOR:-vim} "/home/${n}/.ssh/authorized_keys"

2
bin/voyagers Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
grep -E '1[0-9]{3}' "/etc/passwd" | grep 'home' | awk -F":" '{print $1}'

61
bin/webfinger Executable file
View File

@ -0,0 +1,61 @@
#!/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 Executable file
View File

@ -0,0 +1,75 @@
#!/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 Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
/usr/bin/lynx -display_charset=utf8 --lss=/dev/null /var/wiki/index.html

4
bin/wiki-permissions Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
chgrp -R users /var/wiki/
find /var/wiki/* -type f -exec chmod 664 {} \;
find /var/wiki/* -type d -exec chmod 775 {} \;

6
bin/wordcount Executable file
View File

@ -0,0 +1,6 @@
#!/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

2
completion/cosmic-log.d → completion/log.d Normal file → Executable file
View File

@ -5,7 +5,7 @@ _log() {
cur=${COMP_WORDS[COMP_CWORD]}
local helplist
helplist=$(log -z)
COMPREPLY=( $( compgen -W "$helplist" -- "$cur" ) )
mapfile -t COMPREPLY < <( compgen -W "$helplist" -- "$cur" )
}
# Detect if current shell is ZSH, and if so, load this file in bash

14
efingerd/list Executable file
View File

@ -0,0 +1,14 @@
#!/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/^/ /'

3
efingerd/log Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
printf "%s %s fingered from %s@%s\\n" "$(date)" "$3" "$1" "$2" >> /var/log/efingerd.log

53
efingerd/luser Executable file
View File

@ -0,0 +1,53 @@
#!/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

50
efingerd/nouser Executable file
View File

@ -0,0 +1,50 @@
#!/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

56
emails/2018-12-17.eml Normal file
View File

@ -0,0 +1,56 @@
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

69
emails/2019-01-02.eml Normal file
View File

@ -0,0 +1,69 @@
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

11
emails/2019-01-14.eml Normal file
View File

@ -0,0 +1,11 @@
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

9
emails/2019-01-24-2.eml Normal file
View File

@ -0,0 +1,9 @@
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

20
emails/2019-01-24.eml Normal file
View File

@ -0,0 +1,20 @@
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

25
emails/2020-04-26.eml Normal file
View File

@ -0,0 +1,25 @@
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

20
emails/2020-10-25.eml Normal file
View File

@ -0,0 +1,20 @@
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

14
emails/2022-09-01.eml Normal file
View File

@ -0,0 +1,14 @@
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#00a300</TileColor>
</tile>
</msapplication>
</browserconfig>

BIN
favicons/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

BIN
favicons/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
favicons/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
favicons/mstile-144x144.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
favicons/mstile-150x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
favicons/mstile-310x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
favicons/mstile-310x310.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
favicons/mstile-70x70.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

19
favicons/site.webmanifest Normal file
View File

@ -0,0 +1,19 @@
{
"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"
}

BIN
files/cosmic-promo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
files/cosmicbanner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
files/cover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 MiB

275
files/epub.css Normal file
View File

@ -0,0 +1,275 @@
/* 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 {
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

56
files/fortunes/cosmic Executable file
View File

@ -0,0 +1,56 @@
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 youre 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 dont know which species is worse. You dont see them fucking each other over for a goddamn percentage.
%
The way I see it, if youre going to build a time machine into a car, why not do it with some style?
%
Quite an experience to live in fear, isnt it? Thats what it is to be a slave.
%
Mathematics is the only true universal language.
%
Remember, theres no courage without fear.
%
Isnt 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 cant 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
%

Binary file not shown.

Binary file not shown.

10
files/metadata.yml Normal file
View File

@ -0,0 +1,10 @@
---
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
...

View File

@ -1,11 +0,0 @@
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'.

31
files/scripts.js Normal file
View File

@ -0,0 +1,31 @@
// 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 Normal file
View File

@ -0,0 +1,141 @@
@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;
}
}

View File

@ -1,53 +0,0 @@
#!/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

404
licenses/CC-BY-NC-ND-4.0 Normal file
View File

@ -0,0 +1,404 @@
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.

444
licenses/CC-BY-NC-SA-4.0 Normal file
View File

@ -0,0 +1,444 @@
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.

429
licenses/CC-BY-SA-4.0 Normal file
View File

@ -0,0 +1,429 @@
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.

73
man/cosmic.voyage.1 Normal file
View File

@ -0,0 +1,73 @@
.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.

View File

@ -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.
.P
.PP
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.
.P
.PP
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,5 +24,7 @@ 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

30
man/ship.1 Normal file
View File

@ -0,0 +1,30 @@
.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 Normal file
View File

@ -0,0 +1,163 @@
#!/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 Normal file
View File

@ -0,0 +1,523 @@
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 Normal file
View File

@ -0,0 +1,92 @@
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

17
pkglist-source Normal file
View File

@ -0,0 +1,17 @@
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

46
postfix/access Normal file
View File

@ -0,0 +1,46 @@
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

Some files were not shown because too many files have changed in this diff Show More