Compare commits

...

133 Commits

Author SHA1 Message Date
Ben Harris f873046114
remove rsa recommendation from ssh wiki page 2021-01-19 16:09:07 -05:00
Ben Harris defb00b48b
remove link to thelounge 2021-01-18 20:50:11 -05:00
Ben Harris 68c52786ca show count of webring members 2021-01-13 15:30:54 -05:00
Ben Harris a5478817ca initialize usercount to silence logged warning 2021-01-13 13:46:26 -05:00
Ben Harris 399508d366 show error if me= is set and incorrect 2021-01-13 13:35:35 -05:00
Ben Harris 9dafe487bf use second line of ~/.ring as destination 2021-01-13 13:17:15 -05:00
Ben Harris e9dd5e47e9 add tagline feature
the first line of your ~/.ring file will be shown
here as your tagline

edit as you please :)
2021-01-13 12:30:14 -05:00
Ben Harris 6de03525e5 update domain list 2021-01-11 19:17:54 -05:00
Ben Harris bc975a6581 fix homepage link logic
- double check index existence
- clean up indentation
2021-01-11 11:04:11 -05:00
Ben Harris e5b70b80b3 set title on webring page 2021-01-10 16:10:48 -05:00
Ben Harris b287969682 update services list
- sort
- add webring
- fix tildegit link trailing slash
2021-01-10 16:00:24 -05:00
Ben Harris e6e32383a4 add webring to main site 2021-01-10 15:55:27 -05:00
Ben Harris f0194fae17 skip archived repos 2021-01-05 16:30:53 -05:00
Ben Harris bf72867215 add note about socket on start 2021-01-04 11:03:19 -05:00
Ben Harris 9d36f047bd
avoid instantiating SplFileInfo objects 2021-01-03 18:57:35 -05:00
Anton McClure a712e41cd8 Some tweaks I'm porting over from am32.org (#80)
Add links to view source code of a page's php file, and rename the current "page source" link to "site source".

some changes to how news listing display on the home page

Reviewed-on: team/site#80
Co-Authored-By: Anton McClure <anton@antonmcclure.com>
Co-Committed-By: Anton McClure <anton@antonmcclure.com>
2021-01-03 23:44:59 +00:00
Ben Harris 8cea7034a3
prefer local fonts
- stop force-loading plex mono
- use forkawesome.min
- update font stack preference
2021-01-03 18:35:06 -05:00
Ben Harris 3f41529d4d
remove shrinkwrap.yaml 2021-01-03 17:10:26 -05:00
Ben Harris 387c124b2d
add gpl 2020-12-29 18:10:21 -05:00
vulpine a2e249921d mark some dead tildes as down 2020-12-09 01:43:05 +00:00
Anton McClure 83854e3507
Undo PR #77 2020-11-29 14:44:05 +00:00
Anton McClure 99b2e21bb7
Removing Wilde
Deepend shut down Wilde at some point between 2:45 AM (EST) and 3:09 AM (EST) this morning. For this reason, Wilde needs removed from the list.
2020-11-28 14:39:10 +00:00
Ben Harris 3d798c86c2 remove thelounge 2020-11-11 13:50:03 -05:00
Ben Harris 3b96ffd60b fix ordering on other-tildes 2020-11-03 18:57:29 -05:00
ffuentes 4113351746 Update 'wiki/pages/other-tildes.md'
Added texto-plano.xyz
2020-11-03 23:48:40 +00:00
Case Duckworth 57e445ca8a Add breadpunk.club 2020-10-31 15:32:16 -05:00
Ben Harris d6fd00fd8e add link to tos 2020-10-30 16:33:02 -04:00
Ben Harris 06c59560e8 fix line-endings in signup/index.php 2020-10-30 16:25:17 -04:00
Ben Harris cc98ac895f add age notice 2020-10-30 16:24:39 -04:00
Ben Harris 015e6cfd23 add account recovery wiki page 2020-10-29 18:27:44 -04:00
Ben Harris 2f5eab427a update composer deps
make sure to update with composer install
2020-10-27 14:47:01 -04:00
Ben Harris da715de382 remove donate and gettingstarted redirects
they're in the nginx config now
2020-10-27 14:47:00 -04:00
James Tomasino caa811435e correcting cosmic signup link 2020-10-21 13:36:17 +00:00
Ben Harris 598f908397 add compliance badge to xmpp wikipage 2020-10-14 15:38:53 -04:00
Ben Harris ddc8bfa8dc add biboumi info 2020-10-13 16:15:53 -04:00
Ben Harris bcf4d04488 small wiki updates
- more details on email ports
- irc info
- remove expired tildenet.org domain
2020-10-12 16:20:05 -04:00
Anton McClure 28b71dc6be
YourTilde signup link was wrong 2020-09-03 18:03:24 -04:00
Anton McClure 2c78d4e5bb
YourTilde signup link was wrong 2020-09-03 17:59:43 -04:00
Ben Harris 2c9ef23ba1 tilde.{ninj,pizz}a have expired 2020-09-02 23:05:45 -04:00
Ben Harris f559e0a1e9 add xmpp wikipage 2020-09-01 15:03:32 -04:00
Ben Harris 4c12f60487 add gemini wikipage 2020-09-01 14:57:52 -04:00
rany d3edea3b1e Update 'wiki/pages/irc.md' 2020-08-29 10:19:21 +00:00
Ben Harris 8a7dce43be 20.04 update notice 2020-08-05 03:42:56 -04:00
Andrew Williams 0f26c83aef
Add dimension.sh to other tildes page 2020-07-30 16:48:14 +01:00
Ben Harris 96b9d5ea17 remove yarn.lock 2020-07-18 13:55:27 -04:00
kst a2a6a936dc add tutorial for setting up public git repos on tilde.team 2020-07-18 03:21:57 -04:00
Ben Harris b89d2e3d52 bump dep versions for security alert 2020-07-17 17:24:02 -04:00
Ben Harris 23bce9143e tidy user list 2020-07-17 17:21:41 -04:00
Ben Harris 7162d3b82f tidy up gen_tdp and fix user count 2020-07-17 17:10:00 -04:00
Anton McClure 77bc495812
yourtilde is not down 2020-07-10 13:42:21 -04:00
Ben Harris d346952a54 tidy up README.md 2020-07-09 16:17:22 -04:00
Ben Harris 84cdd43660 update the tilde.team theme a bit
- lighter background
- cleaned up brand colors
- fixed progress-bars
2020-07-09 16:16:16 -04:00
Ben Harris 2e83a7837a remove fork.png and associated <img> tags 2020-07-09 15:54:02 -04:00
Ben Harris 0321a17810 bump dependencies in package-lock.json 2020-07-09 15:53:14 -04:00
Anton McClure fd36f64792
fix join link for summit pubnix 2020-07-03 15:59:37 -04:00
Ben Harris 3aad02123f remove bin.tilde.team 2020-06-19 02:40:31 -04:00
Ben Harris d19c3893ad pending changes from live site 2020-06-15 10:11:50 -04:00
Ben Harris a6ead17941 update npm deps, tidy makefile 2020-06-15 10:05:28 -04:00
Shubham Saini 1d2e680544 fixed a typo 2020-06-15 09:33:49 -04:00
Ben Harris 821ef54bbf add news post 2020-05-30 15:09:32 -04:00
Andinus 0706fb911a
Change fingerprint in footer to pre
This makes it mobile friendly by not overflowing.
2020-05-23 00:27:28 +05:30
Ben Harris 0b6238af6d update admin docs re: /opt 2020-04-30 22:21:13 -04:00
Ben Harris cf357f07f6 update domain list 2020-04-30 21:48:53 -04:00
Ben Harris bcc3c3eda5 update some admin notes 2020-04-30 21:41:23 -04:00
Ben Harris 289c6b8dc2 add disk usage wikipage 2020-04-30 21:30:09 -04:00
Ezra Barrow 17d6cf44d5 Fixed link to example gophermap 2020-04-04 23:27:07 -04:00
f 7240962d38 add tilde.pw 2020-03-08 18:45:51 -04:00
Ben Harris c491345460 fix donate redirect 2020-03-02 16:04:05 -05:00
aewens 01231ddd7f Added caveat for setting up weechat relays 2020-02-29 19:02:49 -05:00
Anton McClure 9a618b5b56
change summit tilde to summit pubnix 2020-02-22 15:35:21 +00:00
Ben Harris e4b4b3e492 update deps and rebuild css 2020-02-17 14:39:54 -05:00
Ben Harris a2f17e3714
Merge pull request #2 from tilde-team/dependabot/npm_and_yarn/css/lodash-4.17.15
Bump lodash from 4.17.10 to 4.17.15 in /css
2020-02-17 14:38:24 -05:00
dependabot[bot] 8cc946f702
Bump lodash from 4.17.10 to 4.17.15 in /css
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.10 to 4.17.15.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.10...4.17.15)

Signed-off-by: dependabot[bot] <support@github.com>
2020-02-17 19:38:10 +00:00
Ben Harris c352610456
Merge pull request #6 from tilde-team/dependabot/npm_and_yarn/css/extend-3.0.2
Bump extend from 3.0.1 to 3.0.2 in /css
2020-02-17 14:37:22 -05:00
dependabot[bot] 88b001f871
Bump extend from 3.0.1 to 3.0.2 in /css
Bumps [extend](https://github.com/justmoon/node-extend) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/justmoon/node-extend/releases)
- [Changelog](https://github.com/justmoon/node-extend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/justmoon/node-extend/compare/v3.0.1...v3.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-02-17 19:37:03 +00:00
Ben Harris 82113cb87c
Merge pull request #5 from tilde-team/dependabot/npm_and_yarn/css/morgan-1.9.1
Bump morgan from 1.9.0 to 1.9.1 in /css
2020-02-17 14:36:54 -05:00
Ben Harris ad6a0ce32e
Merge pull request #4 from tilde-team/dependabot/npm_and_yarn/css/bootstrap-3.4.1
Bump bootstrap from 3.3.7 to 3.4.1 in /css
2020-02-17 14:36:35 -05:00
Ben Harris 55ba3a574e
Merge pull request #3 from tilde-team/dependabot/npm_and_yarn/css/stringstream-0.0.6
Bump stringstream from 0.0.5 to 0.0.6 in /css
2020-02-17 14:35:58 -05:00
dependabot[bot] 5b554def16
Bump morgan from 1.9.0 to 1.9.1 in /css
Bumps [morgan](https://github.com/expressjs/morgan) from 1.9.0 to 1.9.1.
- [Release notes](https://github.com/expressjs/morgan/releases)
- [Changelog](https://github.com/expressjs/morgan/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/morgan/compare/1.9.0...1.9.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-02-17 19:28:22 +00:00
dependabot[bot] ae1faf967a
Bump bootstrap from 3.3.7 to 3.4.1 in /css
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 3.3.7 to 3.4.1.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v3.3.7...v3.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-02-17 19:28:20 +00:00
dependabot[bot] 6f0e4ebea0
Bump stringstream from 0.0.5 to 0.0.6 in /css
Bumps [stringstream](https://github.com/mhart/StringStream) from 0.0.5 to 0.0.6.
- [Release notes](https://github.com/mhart/StringStream/releases)
- [Commits](https://github.com/mhart/StringStream/compare/v0.0.5...v0.0.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-02-17 19:28:19 +00:00
Ben Harris a2083528cb update fork-awesome 2020-02-17 14:27:45 -05:00
creme b0d00c01f6
check username only if not emtpy 2020-02-02 12:06:02 +01:00
creme 58760e50b7
we $name and $email for ban info 2020-02-02 11:51:51 +01:00
creme 6b465e8b03
remove double check for emtpy sshkey 2020-02-02 10:52:59 +01:00
creme 7988ddb6ae
add check for banned ssh-keys 2020-02-02 10:17:45 +01:00
Ben Harris caf203cafd fix banned username check 2020-01-16 22:32:45 -05:00
creme ad455b69c6 rename alert to notice. 2020-01-16 21:55:33 -05:00
creme b913bacda9 fix for user ban's (merge from envs) 2020-01-16 21:55:33 -05:00
Ben Harris 1f4846e02d misc bugfixes, partially address #54
this commit fixes a few miscellaneous bugs, including:
- stop loading js from a cdn, load those from our own site
- fix a wiki link in the header
- add note about znc requiring manual account add
- show our ECDSA fingerprint in the site footer
2020-01-16 18:08:52 -05:00
Anton McClure bc65648fa3
no password auth - change instructions to say ssh key passphrase 2020-01-15 00:38:56 +00:00
Anton McClure bd6e821562
fixed getting started article 2020-01-15 00:33:43 +00:00
Anton McClure 183b028998
Change URLs for /news to be SEO-friendly 2020-01-10 04:35:56 +00:00
Ben Harris f34b57ab35 remove masto feed header 2020-01-06 10:29:15 -05:00
Ben Harris e8f1327669 another migration 2020-01-06 10:28:02 -05:00
fosslinux dfa9951410 remove masto feed 2020-01-02 11:11:37 +11:00
fosslinux 8d15d90875 fix validator 2020-01-02 11:10:16 +11:00
Ben Harris 75f78aa83c add ssh fingerprint info 2020-01-01 15:57:54 -05:00
Ben Harris 89456c7075 add drone badge to README.md 2019-12-06 13:23:53 -05:00
Ben Harris 32fc9e8075 add drone build 2019-12-06 13:21:22 -05:00
Ben Harris 5580a71873 update domain list 2019-11-26 11:59:21 -05:00
Robert Miles c8b2789567 Update 'gen_tdp'
If ahriman's site freaks out, then don't crash. Otherwise, crash.
2019-11-25 10:45:32 -05:00
Anton McClure e568b7f1b0 Fixing instructions for Windows
Adds instructions for Windows 10 OpenSSH, and differentiates OpenSSH from Legacy Windows methods
2019-11-21 00:06:01 -05:00
Ben Harris 810a162fae note that yourtilde closed 2019-11-20 22:06:36 -05:00
Anton McClure 675d7567bf
Updated Summit Tilde listing and added link to signup page 2019-10-27 18:19:46 +00:00
Ben Harris 53bc076da9
update bsd.tilde.team wiki info
- user pages have https now
- no longer running an irc node on bsd as there are already three
tilde.chat nodes in that same datacenter.
2019-10-13 14:42:33 -04:00
Ben Harris 363fc210ba remove nand.{pub,team,zone} 2019-10-13 00:27:20 -04:00
Ben Harris c5aea6e866 port back improvements from ~club 2019-10-03 10:09:20 -04:00
Em 5b1cf7b57f Fix broken links for bbj stuff 2019-09-27 20:35:02 -04:00
Em c055a1c073 Break long words in blog entries.
Long strings were overflowing and causing horizontal scroll on mobile.
Put word-wrap/overflow-wrap so they wrap to a new line.
2019-09-27 16:23:42 -04:00
TechEmporium ead36ac436 Added Wilde to the list of other tilde servers. 2019-09-25 11:43:34 -04:00
Robert Miles e5556c00b1 Revert "hotfix: gbmor.dev is down, causing TDP to error out when rendering ahriman"
gbmor.dev loads now, so we should be good.
2019-09-15 10:46:11 -04:00
Robert Miles e527ed44f9 hotfix: gbmor.dev is down, causing TDP to error out when rendering ahriman 2019-09-14 21:22:39 -04:00
Ben Harris db34c7e33e add info about pop3 2019-09-11 21:34:01 -04:00
Ben Harris d71470fad6 remove expiring domains 2019-09-03 12:02:34 -04:00
Ben Harris 3f4af3a548 remove duplicate talk line 2019-09-03 09:59:07 -04:00
Ben Harris d6cb8dcbb4 update admin docs 2019-09-02 19:51:32 -04:00
Ben Harris 12e9442ff5 add more cgi info 2019-08-25 21:09:14 -04:00
James Tomasino 2f46cc7def replacing cosmic signup email with register at cosmic 2019-08-23 20:37:52 +00:00
Anton McClure 291eb03c89
added summit and fixed alphabetical ordering 2019-08-23 17:08:30 +00:00
best f704d56ae2 Add ~best 2019-08-14 10:21:35 -04:00
Ben Harris 41dc87b860 remove discord/ 2019-08-06 23:44:30 -04:00
Ben Harris 4bb4240537 add note about zola 2019-08-06 11:06:50 -04:00
Ben Harris e6b3e639af fix codeblocks on user-units wiki page 2019-08-04 16:39:27 -04:00
Ben Harris ec713d9136 update gopher info 2019-07-31 10:51:28 -04:00
Ben Harris 912dc97d04 add info about available static and dynamic pages 2019-07-26 16:13:21 -04:00
Ben Harris 0db8212131 alphabetize other tilde list 2019-07-23 18:21:12 -04:00
Ben Harris 0114c1d277 fix typo 2019-07-23 18:18:51 -04:00
Ben Harris c9aea76c96 add envs.net 2019-07-23 18:18:08 -04:00
Ben Harris d54e3d4f7b update ttbp page 2019-07-22 13:28:19 -04:00
Ben Harris ca7e4290d2 fix broken links 2019-07-17 21:20:31 -04:00
Ben Harris dca4ab41f6 add znc section 2019-07-05 14:56:48 -04:00
Ben Harris 76d3b045d6 add nginx config note 2019-07-05 12:19:40 -04:00
74 changed files with 3015 additions and 3058 deletions

26
.drone.yml Normal file
View File

@ -0,0 +1,26 @@
---
kind: pipeline
type: ssh
name: deploy
server:
host:
from_secret: host
user:
from_secret: username
ssh_key:
from_secret: ssh_key
clone:
disable: true
trigger:
branch:
- master
steps:
- name: deploy
commands:
- cd /var/www/tilde.team
- sudo -Hu www-data git pull origin master

2
.gitignore vendored
View File

@ -6,3 +6,5 @@ mg.key
tilde.json
graffiti.txt
.well-known/
stats/
ttbp

675
LICENSE.md Normal file
View File

@ -0,0 +1,675 @@
### GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom
to share and change all versions of a program--to make sure it remains
free software for all its users. We, the Free Software Foundation, use
the GNU General Public License for most of our software; it applies
also to any other work released this way by its authors. You can apply
it to your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you
have certain responsibilities if you distribute copies of the
software, or if you modify it: responsibilities to respect the freedom
of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the
manufacturer can do so. This is fundamentally incompatible with the
aim of protecting users' freedom to change the software. The
systematic pattern of such abuse occurs in the area of products for
individuals to use, which is precisely where it is most unacceptable.
Therefore, we have designed this version of the GPL to prohibit the
practice for those products. If such problems arise substantially in
other domains, we stand ready to extend this provision to those
domains in future versions of the GPL, as needed to protect the
freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish
to avoid the special danger that patents applied to a free program
could make it effectively proprietary. To prevent this, the GPL
assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU General Public
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that numbered version or
of any later version published by the Free Software Foundation. If the
Program does not specify a version number of the GNU General Public
License, you may choose any version ever published by the Free
Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU General Public License can be used, that proxy's public
statement of acceptance of a version permanently authorizes you to
choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands \`show w' and \`show c' should show the
appropriate parts of the General Public License. Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your
program into proprietary programs. If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the
GNU Lesser General Public License instead of this License. But first,
please read <https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@ -1,5 +1,7 @@
# [tilde.team](https://tilde.team/)
[![Build Status](https://drone.tildegit.org/api/badges/team/site/status.svg)](https://drone.tildegit.org/team/site)
tilde.team homepage
```

View File

@ -5,7 +5,7 @@
"repositories": [
{
"type": "vcs",
"url": "https://tildegit.org/ben/tildewiki"
"url": "https://tildegit.org/team/tildewiki"
}
]
}

202
composer.lock generated
View File

@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "3ab3df15c4e40417f427b37691e83088",
"content-hash": "a88f8d05a0f0cb5d15c4597d5616f036",
"packages": [
{
"name": "erusev/parsedown",
"version": "1.7.3",
"version": "1.7.4",
"source": {
"type": "git",
"url": "https://github.com/erusev/parsedown.git",
"reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7"
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7",
"reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7",
"url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
"shasum": ""
},
"require": {
@ -50,24 +50,27 @@
"markdown",
"parser"
],
"time": "2019-03-17T18:48:37+00:00"
"time": "2019-12-30T22:54:17+00:00"
},
{
"name": "erusev/parsedown-extra",
"version": "0.7.1",
"version": "0.8.1",
"source": {
"type": "git",
"url": "https://github.com/erusev/parsedown-extra.git",
"reference": "0db5cce7354e4b76f155d092ab5eb3981c21258c"
"reference": "91ac3ff98f0cea243bdccc688df43810f044dcef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/0db5cce7354e4b76f155d092ab5eb3981c21258c",
"reference": "0db5cce7354e4b76f155d092ab5eb3981c21258c",
"url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/91ac3ff98f0cea243bdccc688df43810f044dcef",
"reference": "91ac3ff98f0cea243bdccc688df43810f044dcef",
"shasum": ""
},
"require": {
"erusev/parsedown": "~1.4"
"erusev/parsedown": "^1.7.4"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35"
},
"type": "library",
"autoload": {
@ -94,30 +97,30 @@
"parsedown",
"parser"
],
"time": "2015-11-01T10:19:22+00:00"
"time": "2019-12-30T23:20:37+00:00"
},
{
"name": "mnapoli/front-yaml",
"version": "1.6.0",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/mnapoli/FrontYAML.git",
"reference": "24070ace8b741247bb3161cbb38ecc541268b296"
"reference": "7602e0ffe84ca07b68865960d255d3ae9502e5d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mnapoli/FrontYAML/zipball/24070ace8b741247bb3161cbb38ecc541268b296",
"reference": "24070ace8b741247bb3161cbb38ecc541268b296",
"url": "https://api.github.com/repos/mnapoli/FrontYAML/zipball/7602e0ffe84ca07b68865960d255d3ae9502e5d4",
"reference": "7602e0ffe84ca07b68865960d255d3ae9502e5d4",
"shasum": ""
},
"require": {
"erusev/parsedown": "~1.0",
"php": ">=5.4.0",
"symfony/yaml": "~2.1|^3.0|^4.0"
"php": "^7.2",
"symfony/yaml": "~2.1|^3.0|^4.0|^5.0"
},
"require-dev": {
"league/commonmark": "~0.7",
"phpunit/phpunit": "~4.5"
"league/commonmark": "~1.4",
"phpunit/phpunit": "~8.5"
},
"type": "library",
"autoload": {
@ -129,24 +132,88 @@
"license": [
"MIT"
],
"time": "2017-10-29T19:29:55+00:00"
"time": "2020-05-21T08:30:56+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.11.0",
"name": "symfony/deprecation-contracts",
"version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "82ebae02209c21113908c229e9883c419720738a"
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a",
"reference": "82ebae02209c21113908c229e9883c419720738a",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41",
"reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-ctype": "For best performance"
@ -154,7 +221,11 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.11-dev"
"dev-main": "1.20-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -170,13 +241,13 @@
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
},
{
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for ctype functions",
@ -187,39 +258,57 @@
"polyfill",
"portable"
],
"time": "2019-02-06T07:57:58+00:00"
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-23T14:02:19+00:00"
},
{
"name": "symfony/yaml",
"version": "v4.3.2",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99"
"reference": "e147a68cb66a8b510f4b7481fe4da5b2ab65ec6a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99",
"reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e147a68cb66a8b510f4b7481fe4da5b2ab65ec6a",
"reference": "e147a68cb66a8b510f4b7481fe4da5b2ab65ec6a",
"shasum": ""
},
"require": {
"php": "^7.1.3",
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/console": "<3.4"
"symfony/console": "<4.4"
},
"require-dev": {
"symfony/console": "~3.4|~4.0"
"symfony/console": "^4.4|^5.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"bin": [
"Resources/bin/yaml-lint"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.3-dev"
"dev-master": "5.1-dev"
}
},
"autoload": {
@ -246,19 +335,33 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"time": "2019-04-06T14:04:46+00:00"
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-09-27T03:44:28+00:00"
},
{
"name": "tildeverse/wiki",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://tildegit.org/ben/tildewiki",
"reference": "751eb64c383cb7c6ec643eaf683b88aa1de351ea"
"url": "https://tildegit.org/team/tildewiki",
"reference": "413c46fc21d1cd02d0dd1f8a1ea6ca3b58f36c8c"
},
"require": {
"erusev/parsedown-extra": "^0.7.1",
"mnapoli/front-yaml": "^1.6"
"erusev/parsedown-extra": "^0.8.1",
"mnapoli/front-yaml": "^1.7.0"
},
"type": "library",
"autoload": {
@ -276,7 +379,7 @@
}
],
"description": "parsedown extensions for tilde wikis",
"time": "2019-07-03T05:06:34+00:00"
"time": "2020-10-27T18:43:33+00:00"
}
],
"packages-dev": [],
@ -288,5 +391,6 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
"platform-dev": [],
"plugin-api-version": "1.1.0"
}

View File

@ -2,32 +2,26 @@ lessc := node_modules/.bin/lessc
lightserver := node_modules/.bin/light-server
NPM != command -v npm 2> /dev/null
PLEX = less/plex.css
HACKER = less/hacker/*.less $(PLEX)
DRACULA = less/dracula/*.less $(PLEX)
.PHONY: build dev clean
.PHONY: dev clean
# First target is default
build: hacker.css dracula.css
dev: build
$(lightserver) -s . -p 9000 -w "index.html, **/*.less \# make" -o
hacker.css: node_modules $(HACKER)
$(lessc) less/hacker.less hacker.css --clean-css="--s1 --advanced --compatibility=ie8"
dracula.css: node_modules $(DRACULA)
$(lessc) less/dracula.less dracula.css --clean-css="--s1 --advanced --compatibility=ie8"
%.css: node_modules less/*.less
$(info building $@)
$(lessc) less/$*.less $*.css --clean-css="--s1 --advanced --compatibility=ie8"
node_modules: package.json package-lock.json Makefile
ifndef NPM
$(error Missing dependency 'npm'. Please install and try again.)
endif
npm install
$(NPM) install
touch node_modules # fixes watch bug if you manually ran npm install
clean:
rm -rf node_modules
rm dracula.css
rm dracula.css
rm hacker.css

View File

@ -6,6 +6,8 @@ the latest compiled css will be available [here](https://tilde.team/css/hacker.c
if you want a quick start, feel free to use [skeleton.html](skeleton.html).
curl https://tilde.team/css/skeleton.html > mynewpage.html
the major changes from the original are a few tweaks to colors of code samples and font sizes.
feel free to use and modify as you like!
@ -24,9 +26,7 @@ check out the [example site](https://tilde.team/css/)!
you can pick up the latest [hacker.css](https://tilde.team/css/hacker.css) and reference the css in your page.
```html
<link href="https://tilde.team/css/hacker.css" rel="stylesheet">
```
<link href="https://tilde.team/css/hacker.css" rel="stylesheet">
**or** you could be a real h4x0r.
@ -34,20 +34,17 @@ you can pick up the latest [hacker.css](https://tilde.team/css/hacker.css) and r
open up your h4x0r terminal and type the following:
```bash
git clone https://tildegit.org/team/site
cd site/css
```
git clone https://tildegit.org/team/site
cd site/css
if you want to make adjustments with live-reloading, try this:
```bash
make dev
```
make dev
if you just want to compile, you can do this:
```bash
make
```
make
you'll find the compiled css in hacker.css to do with as you please

File diff suppressed because one or more lines are too long

View File

@ -27,11 +27,6 @@
</head>
<body>
<a href="https://tildegit.org/team/site/src/branch/master/css">
<img style="position: absolute; top: 0; left: 0; border: 0;z-index:1001;" src="img/fork.png" alt="Fork me on GitHub">
</a>
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
@ -92,7 +87,6 @@
<p>To hack around with the source or contribute, check out the project on tildegit</p>
<p>
<a class="btn btn-lg btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" role="button">view on tildegit »</a>
<a class="btn btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" id="stars"></a>
</p>
</div>

View File

@ -1,13 +1,21 @@
/*!
* Fork Awesome 1.1.0, originaly by Dave Gandy - http://forkawesome.github.io/Fork-Awesome/
* License - http://forkawesome.github.io/Fork-Awesome//license (Font: SIL OFL 1.1, CSS: MIT License)
Fork Awesome 1.1.7
License - https://forkaweso.me/Fork-Awesome/license
Copyright 2018 Dave Gandy & Fork Awesome
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'ForkAwesome';
src: url('../fonts/forkawesome-webfont.eot?v=1.1.0');
src: url('../fonts/forkawesome-webfont.eot?#iefix&v=1.1.0') format('embedded-opentype'), url('../fonts/forkawesome-webfont.woff2?v=1.1.0') format('woff2'), url('../fonts/forkawesome-webfont.woff?v=1.1.0') format('woff'), url('../fonts/forkawesome-webfont.ttf?v=1.1.0') format('truetype'), url('../fonts/forkawesome-webfont.svg?v=1.1.0#forkawesomeregular') format('svg');
src: url('../fonts/forkawesome-webfont.eot?v=1.1.7');
src: url('../fonts/forkawesome-webfont.eot?#iefix&v=1.1.7') format('embedded-opentype'), url('../fonts/forkawesome-webfont.woff2?v=1.1.7') format('woff2'), url('../fonts/forkawesome-webfont.woff?v=1.1.7') format('woff'), url('../fonts/forkawesome-webfont.ttf?v=1.1.7') format('truetype'), url('../fonts/forkawesome-webfont.svg?v=1.1.7#forkawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
@ -274,6 +282,7 @@
.fa-repeat:before {
content: "\f01e";
}
.fa-sync:before,
.fa-refresh:before {
content: "\f021";
}
@ -359,6 +368,7 @@
.fa-indent:before {
content: "\f03c";
}
.fa-video:before,
.fa-video-camera:before {
content: "\f03d";
}
@ -650,7 +660,7 @@
.fa-bullhorn:before {
content: "\f0a1";
}
.fa-bell:before {
.fa-bell-o:before {
content: "\f0f3";
}
.fa-certificate:before {
@ -772,6 +782,7 @@
.fa-google-plus-square:before {
content: "\f0d4";
}
.fa-google-plus-g:before,
.fa-google-plus:before {
content: "\f0d5";
}
@ -864,12 +875,13 @@
.fa-suitcase:before {
content: "\f0f2";
}
.fa-bell-o:before {
.fa-bell:before {
content: "\f0a2";
}
.fa-coffee:before {
content: "\f0f4";
}
.fa-utensils:before,
.fa-cutlery:before {
content: "\f0f5";
}
@ -1141,6 +1153,7 @@
.fa-eur:before {
content: "\f153";
}
.fa-pound:before,
.fa-gbp:before {
content: "\f154";
}
@ -1177,21 +1190,27 @@
.fa-file-text:before {
content: "\f15c";
}
.fa-sort-alpha-down:before,
.fa-sort-alpha-asc:before {
content: "\f15d";
}
.fa-sort-alpha-up:before,
.fa-sort-alpha-desc:before {
content: "\f15e";
}
.fa-sort-amount-down:before,
.fa-sort-amount-asc:before {
content: "\f160";
}
.fa-sort-amount-up:before,
.fa-sort-amount-desc:before {
content: "\f161";
}
.fa-sort-numeric-down:before,
.fa-sort-numeric-asc:before {
content: "\f162";
}
.fa-sort-numeric-up:before,
.fa-sort-numeric-desc:before {
content: "\f163";
}
@ -1411,6 +1430,7 @@
.fa-paw:before {
content: "\f1b0";
}
.fa-utensil-spoon:before,
.fa-spoon:before {
content: "\f1b1";
}
@ -1553,6 +1573,7 @@
.fa-circle-thin:before {
content: "\f1db";
}
.fa-heading:before,
.fa-header:before {
content: "\f1dc";
}
@ -1683,6 +1704,7 @@
.fa-angellist:before {
content: "\f209";
}
.fa-closed-captioning:before,
.fa-cc:before {
content: "\f20a";
}
@ -1727,6 +1749,7 @@
.fa-cart-arrow-down:before {
content: "\f218";
}
.fa-gem:before,
.fa-diamond:before {
content: "\f219";
}
@ -2021,6 +2044,7 @@
.fa-houzz:before {
content: "\f27c";
}
.fa-vimeo-v:before,
.fa-vimeo:before {
content: "\f27d";
}
@ -2117,6 +2141,7 @@
.fa-audio-description:before {
content: "\f29e";
}
.fa-phone-volume:before,
.fa-volume-control-phone:before {
content: "\f2a0";
}
@ -2449,6 +2474,84 @@
.fa-joplin:before {
content: "\f310";
}
.fa-syncthing:before {
content: "\f311";
}
.fa-inkscape:before {
content: "\f312";
}
.fa-matrix-org:before {
content: "\f313";
}
.fa-pixelfed:before {
content: "\f314";
}
.fa-bootstrap:before {
content: "\f315";
}
.fa-dev-to:before {
content: "\f316";
}
.fa-hashnode:before {
content: "\f317";
}
.fa-jirafeau:before {
content: "\f318";
}
.fa-emby:before {
content: "\f319";
}
.fa-wikidata:before {
content: "\f31a";
}
.fa-gimp:before {
content: "\f31b";
}
.fa-c:before {
content: "\f31c";
}
.fa-digitalocean:before {
content: "\f31d";
}
.fa-att:before {
content: "\f31e";
}
.fa-gitea:before {
content: "\f31f";
}
.fa-file-epub:before {
content: "\f321";
}
.fa-python:before {
content: "\f322";
}
.fa-archlinux:before {
content: "\f323";
}
.fa-pleroma:before {
content: "\f324";
}
.fa-unsplash:before {
content: "\f325";
}
.fa-hackster:before {
content: "\f326";
}
.fa-spell-check:before {
content: "\f327";
}
.fa-moon:before {
content: "\f328";
}
.fa-sun:before {
content: "\f329";
}
.fa-f-droid:before {
content: "\f32a";
}
.fa-biometric:before {
content: "\f32b";
}
.sr-only {
position: absolute;
width: 1px;

12
css/fork-awesome.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

View File

@ -27,11 +27,6 @@
</head>
<body>
<a href="https://tildegit.org/team/site/src/branch/master/css">
<img style="position: absolute; top: 0; left: 0; border: 0;z-index:1001;" src="img/fork.png" alt="Fork me on GitHub">
</a>
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
@ -92,7 +87,6 @@
<p>To hack around with the source or contribute, check out the project on tildegit</p>
<p>
<a class="btn btn-lg btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" role="button">view on tildegit »</a>
<a class="btn btn-primary" href="https://tildegit.org/team/site/src/branch/master/css" id="stars"></a>
</p>
</div>

View File

@ -175,14 +175,20 @@ tr.active {
// List groups
// Highlight active item
.list-group-item.active {
font-weight: bold;
border: 1px solid #222;
&:hover,
&:focus {
background: #1a1a1a;
.list-group-item {
&.active {
font-weight: bold;
border: 1px solid #222;
&:hover,
&:focus {
background: #1a1a1a;
border: 1px solid #222;
}
}
p {
word-wrap: break-word;
overflow-wrap: break-word;
}
}

View File

@ -1,9 +1,9 @@
// import bootstrap base
@import "../node_modules/bootstrap/less/bootstrap.less";
@import (inline) "plex.css";
// @import (inline) "plex.css";
// import custom variables
@import "dracula/_variables.less";
@import "dracula_variables.less";
// import custom theme changes
@import "hacker/_theme.less";
@import "_theme.less";

View File

@ -56,9 +56,9 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Typography
@font-family-sans-serif: "IBM Plex Mono", monospace;
@font-family-serif: "IBM Plex Mono", monospace;
@font-family-monospace: "IBM Plex Mono", monospace;
@font-family-monospace: "IBM Plex Mono", "JetBrains Mono", "Fira Mono", Consolas, Inconsolata, monospace;
@font-family-sans-serif: @font-family-monospace;
@font-family-serif: @font-family-monospace;
@font-family-base: @font-family-monospace;
@font-size-base: 16px;
@font-size-large: ceil(@font-size-base * 1.25);
@ -171,7 +171,7 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
@navbar-height: 50px;
@navbar-margin-bottom: @line-height-computed;
@navbar-default-color: @hacker;
@navbar-default-bg: @hacker-bg;
@navbar-default-bg: @hacker-box-bg;
@navbar-default-border: @hacker-bg;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor(@grid-gutter-width / 2);

View File

@ -1,9 +1,9 @@
// import bootstrap base
@import "../node_modules/bootstrap/less/bootstrap.less";
@import (inline) "plex.css";
// @import (inline) "plex.css";
// import custom variables
@import "hacker/_variables.less";
@import "hacker_variables.less";
// import custom theme changes
@import "hacker/_theme.less";
@import "_theme.less";

View File

@ -7,16 +7,16 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Hacker Colors
@hacker-primary-darker: darken(@hacker-primary-lighter, 40%); /* Primary 1 */
@hacker-primary-dark: darken(@hacker-primary-lighter, 30%); /* Primary 2 */
@hacker-primary: darken(@hacker-primary-lighter, 20%); /* Main primary */
@hacker-primary-light: darken(@hacker-primary-lighter, 10%); /* Primary 3 */
@hacker-primary-lighter: #3EE77B; /* Primary 3 */
@hacker-primary-darker: darken(@hacker-primary, 20%); /* Primary 1 */
@hacker-primary-dark: darken(@hacker-primary, 10%); /* Primary 2 */
@hacker-primary: #3EE77B; /* Main primary */
@hacker-primary-light: lighten(@hacker-primary, 10%); /* Primary 3 */
@hacker-primary-lighter: lighten(@hacker-primary, 20%); /* Primary 4 */
@hacker: @hacker-primary-lighter; /* Body text */
@hacker-bg: #040304; /* Body bg */
@hacker-box-bg: lighten(@hacker-bg, 10%); /* Container elem bg */
@hacker-box-border: lighten(@hacker-bg, 20%); /* Container border */
@hacker: @hacker-primary; /* Body text */
@hacker-bg: #0e0e0e; /* Body bg */
@hacker-box-bg: lighten(@hacker-bg, 10%); /* Container elem bg */
@hacker-box-border: lighten(@hacker-bg, 20%); /* Container border */
// Bootstrap Colors
@ -26,7 +26,7 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
@gray-light: #907f8d;
@gray-lighter: #b9adb6;
@brand-primary: @hacker-primary;
@brand-primary: @hacker-primary-dark;
@brand-success: #00faa6;
@brand-warning: #ECD650;
@brand-danger: #FE6354;
@ -36,7 +36,7 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Scaffolding
@body-bg: @hacker-bg;
@text-color: @hacker;
@link-color: @hacker-primary-light;
@link-color: @hacker-primary-lighter;
@link-hover-color: lighten(@link-color, 10%);
@padding-base-vertical: 6px;
@padding-base-horizontal: 12px;
@ -54,9 +54,9 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Typography
@font-family-sans-serif: "IBM Plex Mono", monospace;
@font-family-serif: "IBM Plex Mono", monospace;
@font-family-monospace: "IBM Plex Mono", monospace;
@font-family-monospace: "IBM Plex Mono", "JetBrains Mono", "Fira Mono", Consolas, Inconsolata, monospace;
@font-family-sans-serif: @font-family-monospace;
@font-family-serif: @font-family-monospace;
@font-family-base: @font-family-monospace;
@font-size-base: 16px;
@font-size-large: ceil(@font-size-base * 1.25);
@ -89,11 +89,11 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Buttons
@btn-font-weight: normal;
@btn-default-color: @hacker-primary-lighter;
@btn-default-color: @hacker-bg;
@btn-default-bg: darken(@hacker-primary-darker, 5%);
@btn-default-border: #444444;
@btn-primary-color: @hacker-bg;
@btn-primary-bg: @hacker-primary-light;
@btn-primary-bg: @brand-primary;
@btn-primary-border: darken(@btn-primary-bg, 10%);
@btn-success-color: @hacker-bg;
@btn-success-bg: @brand-success;
@ -169,7 +169,7 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
@navbar-height: 50px;
@navbar-margin-bottom: @line-height-computed;
@navbar-default-color: @hacker;
@navbar-default-bg: @hacker-bg;
@navbar-default-bg: @hacker-box-bg;
@navbar-default-border: @hacker-bg;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor(@grid-gutter-width / 2);
@ -207,14 +207,14 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Panel
@panel-bg: @hacker-bg;
@panel-bg: @hacker-box-bg;
@panel-body-padding: 15px;
@panel-heading-padding: 10px 15px;
@panel-footer-padding: @panel-heading-padding;
@panel-border-radius: @border-radius-base;
@panel-inner-border: @hacker-box-bg;
@panel-footer-bg: @hacker-box-bg;
@panel-inner-border: @hacker-bg;
@panel-footer-bg: @hacker-bg;
@panel-default-text: @hacker-bg;
@panel-default-border: @hacker-box-bg;
@ -338,12 +338,12 @@ Palette URL: http://paletton.com/#uid=12U0u0knnfti5bkladVnSlVo6tw
// Progress bars
@progress-bg: @hacker-box-bg;
@progress-bar-color: lighten(@hacker-primary-lighter, 10%);
@progress-bar-bg: @hacker-primary-lighter;
@progress-bar-success-bg: @hacker-primary-darker;
@progress-bar-warning-bg: @hacker-primary-dark;
@progress-bar-danger-bg: @hacker-primary-light;
@progress-bar-info-bg: @hacker-primary-lighter;
@progress-bar-color: @hacker-primary;
@progress-bar-bg: @hacker-primary-darker;
@progress-bar-success-bg: @brand-success;
@progress-bar-warning-bg: @brand-warning;
@progress-bar-danger-bg: @brand-danger;
@progress-bar-info-bg: @brand-info;
// Breadcrumb

856
css/package-lock.json generated

File diff suppressed because it is too large Load Diff

6
css/package.json Executable file → Normal file
View File

@ -11,10 +11,10 @@
"url": "https://tildegit.org/team/site/issues"
},
"dependencies": {
"bootstrap": "3.3.7",
"less": "2.7.3",
"bootstrap": "3.4.1",
"less": "3.11.1",
"less-plugin-clean-css": "1.5.1",
"light-server": "^2.5.1"
"light-server": "^2.9.1"
},
"preferGlobal": true,
"license": "MIT"

File diff suppressed because it is too large Load Diff

View File

@ -1,830 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
asn1@~0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
assert-plus@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
aws4@^1.2.1:
version "1.8.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
basic-auth@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba"
dependencies:
safe-buffer "5.1.1"
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
dependencies:
tweetnacl "^0.14.3"
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
dependencies:
hoek "2.x.x"
bootstrap@3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
clean-css@^3.0.1:
version "3.4.28"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff"
dependencies:
commander "2.8.x"
source-map "0.4.x"
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
dependencies:
delayed-stream "~1.0.0"
commander@2.8.x:
version "2.8.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
dependencies:
graceful-readlink ">= 1.0.0"
commander@^2.15.1:
version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
connect-history-api-fallback@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
connect-injector@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/connect-injector/-/connect-injector-0.4.4.tgz#a81959c31ecf5caa0f3dcc325c28ed90b830aa90"
dependencies:
debug "^2.0.0"
q "^1.0.1"
stream-buffers "^0.2.3"
uberproto "^1.1.0"
connect@^3.6.6:
version "3.6.6"
resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524"
dependencies:
debug "2.6.9"
finalhandler "1.1.0"
parseurl "~1.3.2"
utils-merge "1.0.1"
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
dependencies:
boom "2.x.x"
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
dependencies:
assert-plus "^1.0.0"
debug@2.6.9, debug@^2.0.0, debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
ms "2.0.0"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
depd@~1.1.1, depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
detect-node@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
dependencies:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
encodeurl@~1.0.1, encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
errno@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
dependencies:
prr "~1.0.1"
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
eventemitter3@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
extend@~3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
finalhandler@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
dependencies:
debug "2.6.9"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.2"
statuses "~1.3.1"
unpipe "~1.0.0"
follow-redirects@^1.0.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.2.tgz#5a9d80e0165957e5ef0c1210678fc5c4acb9fb03"
dependencies:
debug "^3.1.0"
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
form-data@~2.1.1:
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.5"
mime-types "^2.1.12"
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
gaze@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
dependencies:
globule "^1.0.0"
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
dependencies:
assert-plus "^1.0.0"
glob@~7.1.1:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
globule@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
dependencies:
glob "~7.1.1"
lodash "~4.17.10"
minimatch "~3.0.2"
graceful-fs@^4.1.2:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
"graceful-readlink@>= 1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
handle-thing@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
har-schema@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
dependencies:
ajv "^4.9.1"
har-schema "^1.0.5"
hawk@~3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
dependencies:
boom "2.x.x"
cryptiles "2.x.x"
hoek "2.x.x"
sntp "1.x.x"
hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
dependencies:
inherits "^2.0.1"
obuf "^1.0.0"
readable-stream "^2.0.1"
wbuf "^1.1.0"
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.0"
statuses ">= 1.4.0 < 2"
http-proxy@^1.17.0:
version "1.17.0"
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
dependencies:
eventemitter3 "^3.0.0"
follow-redirects "^1.0.0"
requires-port "^1.0.0"
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
dependencies:
assert-plus "^0.2.0"
jsprim "^1.2.2"
sshpk "^1.7.0"
image-size@~0.5.0:
version "0.5.5"
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
jsonify "~0.0.0"
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
dependencies:
assert-plus "1.0.0"
extsprintf "1.3.0"
json-schema "0.2.3"
verror "1.10.0"
less-plugin-clean-css@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/less-plugin-clean-css/-/less-plugin-clean-css-1.5.1.tgz#cc57af7aa3398957e56decebe63cb60c23429703"
dependencies:
clean-css "^3.0.1"
less@2.7.3:
version "2.7.3"
resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
mime "^1.2.11"
mkdirp "^0.5.0"
promise "^7.1.1"
request "2.81.0"
source-map "^0.5.3"
light-server@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/light-server/-/light-server-2.5.1.tgz#1298718a56df9505ae31fcdf4ab0025c597de6c4"
dependencies:
commander "^2.15.1"
connect "^3.6.6"
connect-history-api-fallback "^1.5.0"
connect-injector "^0.4.4"
gaze "^1.1.2"
http-proxy "^1.17.0"
morgan "~1.9.0"
opener "^1.4.3"
parseurl "^1.3.2"
serve-static "~1.13.1"
spdy "^3.4.7"
strip-json-comments "^2.0.1"
ws "^1.0.1"
lodash@~4.17.10:
version "4.17.10"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
mime-db@~1.35.0:
version "1.35.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47"
mime-types@^2.1.12, mime-types@~2.1.7:
version "2.1.19"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0"
dependencies:
mime-db "~1.35.0"
mime@1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
mime@^1.2.11:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
minimalistic-assert@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
brace-expansion "^1.1.7"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
mkdirp@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
morgan@~1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051"
dependencies:
basic-auth "~2.0.0"
debug "2.6.9"
depd "~1.1.1"
on-finished "~2.3.0"
on-headers "~1.0.1"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
obuf@^1.0.0, obuf@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
dependencies:
ee-first "1.1.1"
on-headers@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
opener@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
parseurl@^1.3.2, parseurl@~1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
process-nextick-args@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
dependencies:
asap "~2.0.3"
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
q@^1.0.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
range-parser@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
readable-stream@^2.0.1, readable-stream@^2.2.9:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
isarray "~1.0.0"
process-nextick-args "~2.0.0"
safe-buffer "~5.1.1"
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
request@2.81.0:
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
caseless "~0.12.0"
combined-stream "~1.0.5"
extend "~3.0.0"
forever-agent "~0.6.1"
form-data "~2.1.1"
har-validator "~4.2.1"
hawk "~3.1.3"
http-signature "~1.1.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.7"
oauth-sign "~0.8.1"
performance-now "^0.2.0"
qs "~6.4.0"
safe-buffer "^5.0.1"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
tunnel-agent "^0.6.0"
uuid "^3.0.0"
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
safe-buffer@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
send@0.16.2:
version "0.16.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
dependencies:
debug "2.6.9"
depd "~1.1.2"
destroy "~1.0.4"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
http-errors "~1.6.2"
mime "1.4.1"
ms "2.0.0"
on-finished "~2.3.0"
range-parser "~1.2.0"
statuses "~1.4.0"
serve-static@~1.13.1:
version "1.13.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.2"
send "0.16.2"
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
dependencies:
hoek "2.x.x"
source-map@0.4.x:
version "0.4.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
dependencies:
amdefine ">=0.0.4"
source-map@^0.5.3:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
spdy-transport@^2.0.18:
version "2.1.0"
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"
dependencies:
debug "^2.6.8"
detect-node "^2.0.3"
hpack.js "^2.1.6"
obuf "^1.1.1"
readable-stream "^2.2.9"
safe-buffer "^5.0.1"
wbuf "^1.7.2"
spdy@^3.4.7:
version "3.4.7"
resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
dependencies:
debug "^2.6.8"
handle-thing "^1.2.5"
http-deceiver "^1.2.7"
safe-buffer "^5.0.1"
select-hose "^2.0.0"
spdy-transport "^2.0.18"
sshpk@^1.7.0:
version "1.14.2"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
dashdash "^1.12.0"
getpass "^0.1.1"
safer-buffer "^2.0.2"
optionalDependencies:
bcrypt-pbkdf "^1.0.0"
ecc-jsbn "~0.1.1"
jsbn "~0.1.0"
tweetnacl "~0.14.0"
"statuses@>= 1.4.0 < 2":
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
statuses@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
statuses@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
stream-buffers@^0.2.3:
version "0.2.6"
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-0.2.6.tgz#181c08d5bb3690045f69401b9ae6a7a0cf3313fc"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
dependencies:
safe-buffer "~5.1.0"
stringstream@~0.0.4:
version "0.0.6"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
strip-json-comments@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
tough-cookie@~2.3.0:
version "2.3.4"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
dependencies:
punycode "^1.4.1"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
uberproto@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/uberproto/-/uberproto-1.2.0.tgz#61d4eab024f909c4e6ea52be867c4894a4beeb76"
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
uuid@^3.0.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
verror@1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
dependencies:
assert-plus "^1.0.0"
core-util-is "1.0.2"
extsprintf "^1.2.0"
wbuf@^1.1.0, wbuf@^1.7.2:
version "1.7.3"
resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
dependencies:
minimalistic-assert "^1.0.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
ws@^1.0.1:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
dependencies:
options ">=0.0.5"
ultron "1.0.x"

View File

@ -1,4 +0,0 @@
<?php
header("Location:https://discord.gg/BH4Bs5U");
die();

View File

@ -1,2 +0,0 @@
<?php header("Location: https://bhh.bh/donate/"); die();

Binary file not shown.

View File

@ -1,11 +1,11 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2018-5-12: Created with FontForge (http://fontforge.org)
2019-2-18: Created with FontForge (http://fontforge.org)
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
Created by FontForge 20180321 at Sat May 12 14:32:04 2018
Created by FontForge 20180321 at Mon Feb 18 18:29:30 2019
By Julien Deswaef
The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io
</metadata>
@ -19,10 +19,10 @@ The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/
panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="1536"
descent="-256"
bbox="-0.653061 -264 2304.01 1536.25"
bbox="-0.653061 -264 2304.01 1538"
underline-thickness="89.6"
underline-position="-179.2"
unicode-range="U+0020-F310"
unicode-range="U+0020-F32B"
/>
<missing-glyph />
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
@ -50,9 +50,9 @@ d="M256 224v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 3
c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM256 1376v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192
c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 608v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344
c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32z" />
<glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1192"
d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324
c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" />
<glyph glyph-name="archlinux" unicode="&#xf323;" horiz-adv-x="1794"
d="M897 1538c164 -386 203 -504 682 -1397c-61 36 -138 70 -247 98c158 -81 236 -156 310 -214c47 -87 97 -179 152 -281c-281 162 -499 263 -702 303c7 31 11 64 12 98c5 182 -83 337 -195 347s-207 -131 -212 -313v-9c0 -43 4 -84 13 -122c-205 -39 -426 -140 -710 -304
c362 650 540 989 654 1226c60 -50 139 -99 256 -147c-109 76 -175 143 -230 201c89 190 137 318 217 514z" />
<glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 288v-192c0 -53 -43 -96 -96 -96h-320
c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96
@ -143,6 +143,8 @@ d="M768 96v1088c-300 0 -544 -244 -544 -544s244 -544 544 -544zM1536 640c0 -424 -3
<glyph glyph-name="subway" unicode="&#xf239;"
d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM288 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160
s72 -160 160 -160zM704 768v512h-544v-512h544zM1248 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM1408 768v512h-576v-512h576z" />
<glyph glyph-name="unslpash" unicode="&#xf325;"
d="M1052 728h484v-856h-1536v856h484v-428h568v428zM484 1408h568v-428h-568v428z" />
<glyph glyph-name="chevron-down" unicode="&#xf078;" horiz-adv-x="1612"
d="M1593 728l-742 -741c-25 -25 -65 -25 -90 0l-742 741c-25 25 -25 66 0 91l166 165c25 25 65 25 90 0l531 -531l531 531c25 25 65 25 90 0l166 -165c25 -25 25 -66 0 -91z" />
<glyph glyph-name="location-arrow" unicode="&#xf124;" horiz-adv-x="1408"
@ -211,6 +213,9 @@ c0 -9 -1 -18 -2 -27c-116 0 -233 20 -349 20c-14 0 -34 -6 -48 -8c-63 -11 -125 -14
d="M1536 640c0 -424 -344 -768 -768 -768c-76 0 -148 11 -218 32c29 46 62 105 78 164c0 0 9 34 54 211c26 -51 104 -96 187 -96c247 0 415 225 415 527c0 227 -193 440 -487 440c-364 0 -548 -262 -548 -480c0 -132 50 -250 157 -294c17 -7 33 0 38 20c4 13 12 47 16 61
c5 20 3 26 -11 43c-31 37 -51 84 -51 151c0 194 145 368 378 368c206 0 320 -126 320 -295c0 -221 -98 -408 -244 -408c-80 0 -140 66 -121 148c23 97 68 202 68 272c0 63 -34 116 -104 116c-82 0 -148 -85 -148 -199c0 0 0 -73 25 -122c-84 -356 -99 -418 -99 -418
c-14 -58 -15 -123 -13 -177c-271 119 -460 389 -460 704c0 424 344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="sun" unicode="&#xf329;" horiz-adv-x="1707"
d="M1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248
l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" />
<glyph glyph-name="cart-plus" unicode="&#xf217;" horiz-adv-x="1664"
d="M1216 832c0 35 -29 64 -64 64h-128v128c0 35 -29 64 -64 64s-64 -29 -64 -64v-128h-128c-35 0 -64 -29 -64 -64s29 -64 64 -64h128v-128c0 -35 29 -64 64 -64s64 29 64 64v128h128c35 0 64 29 64 64zM640 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64
@ -303,10 +308,8 @@ c-6 -25 -8 -66 -27 -84c-13 -12 -34 -14 -51 -14c-47 0 -94 11 -141 11c-14 0 -35 -1
c11 -40 64 -210 64 -234zM776 760c-17 0 -33 7 -45 19c-25 25 -26 66 0 91c24 24 37 56 37 90s-13 66 -37 91c-26 25 -25 65 0 90s65 25 90 0c48 -48 75 -113 75 -181s-27 -133 -75 -181c-13 -12 -29 -19 -45 -19zM957 579c-17 0 -33 6 -45 19c-25 25 -25 65 0 90
c72 73 112 169 112 272s-40 199 -112 272c-25 25 -25 65 0 90s65 25 90 0c97 -97 150 -225 150 -362s-53 -265 -150 -362c-12 -13 -29 -19 -45 -19zM1138 398c-17 0 -33 6 -45 19c-25 25 -25 65 0 90c120 121 187 282 187 453s-67 332 -187 453c-25 25 -25 65 0 90
s65 25 90 0c145 -145 225 -338 225 -543s-80 -398 -225 -543c-12 -13 -29 -19 -45 -19z" />
<glyph glyph-name="code-fork" unicode="&#xf126;" horiz-adv-x="1024"
d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166
c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497
c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" />
<glyph glyph-name="biometric" unicode="&#xf32b;" horiz-adv-x="2304"
d="M1419 640c0 -147 -120 -267 -267 -267s-267 120 -267 267s120 267 267 267s267 -120 267 -267zM0 1222h2304v-521h-769c-29 185 -190 327 -383 327s-354 -142 -383 -327h-769v521zM0 579h769c29 -185 190 -327 383 -327s354 142 383 327h769v-521h-2304v521z" />
<glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 832v-256c0 -35 -29 -64 -64 -64h-1664
c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" />
@ -388,9 +391,9 @@ c92 -39 167 -87 235 -152z" />
d="M148 1404h1236c82 0 149 -66 149 -148v-1236c0 -82 -67 -148 -149 -148h-1236c-82 0 -148 66 -148 148v1236c0 82 66 148 148 148zM736 1150v0l-161 -25l-133 -553c-8 -33 -12 -64 -12 -93s6 -54 18 -76s32 -40 60 -53s68 -19 117 -19l31 128c-18 1 -32 4 -42 9
s-18 12 -22 20s-5 17 -5 27s1 23 4 35zM985 902v0c-42 0 -80 -3 -116 -10s-67 -14 -95 -22l-174 -722h155l47 189c24 -4 47 -6 71 -6c49 0 94 8 135 25s76 41 106 72s52 67 69 109s25 88 25 139c0 31 -4 61 -13 88s-22 51 -40 72c-18 20 -41 36 -69 48s-62 18 -101 18z
M965 772v0c33 0 56 -11 69 -32s20 -46 20 -76c0 -31 -4 -59 -13 -84s-21 -47 -37 -65s-34 -32 -56 -42s-47 -15 -74 -15c-17 0 -32 1 -44 4l73 303c19 4 40 7 62 7z" />
<glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512
c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
<glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1192"
d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324
c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" />
<glyph glyph-name="music" unicode="&#xf001;"
d="M1536 1312v-1120c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v537l-768 -237v-709c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v967c0 42 28 79 68 92l832 256c9 3 18 4 28 4
c53 0 96 -43 96 -96z" />
@ -542,9 +545,10 @@ h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
<glyph glyph-name="sticky-note-o" unicode="&#xf24a;"
d="M1400 256h-248v-248c17 6 34 15 41 22l185 185c7 7 16 24 22 41zM1120 384h288v896h-1280v-1280h896v288c0 53 43 96 96 96zM1536 1312v-1024c0 -53 -31 -127 -68 -164l-184 -184c-37 -37 -111 -68 -164 -68h-1024c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344
c53 0 96 -43 96 -96z" />
<glyph glyph-name="moon-o" unicode="&#xf186;" horiz-adv-x="1471"
d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767
c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
<glyph glyph-name="fonticons" unicode="&#xf280;"
d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76
c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25
l-70 -9v-86h352z" />
<glyph glyph-name="comments-o" unicode="&#xf0e6;" horiz-adv-x="1792"
d="M704 1152c-312 0 -576 -176 -576 -384c0 -110 74 -216 202 -290l97 -56l-35 -84c21 12 42 25 62 39l44 31l53 -10c50 -9 101 -14 153 -14c312 0 576 176 576 384s-264 384 -576 384zM704 1280c389 0 704 -229 704 -512s-315 -512 -704 -512c-61 0 -120 6 -176 16
c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512zM1526 111c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29
@ -573,6 +577,10 @@ v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128
<glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
d="M640 1280h512v128h-512v-128zM1792 640v-480c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v480h672v-160c0 -35 29 -64 64 -64h320c35 0 64 29 64 64v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384c0 88 72 160 160 160h352v160
c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h352c88 0 160 -72 160 -160z" />
<glyph glyph-name="weixin" unicode="&#xf1d7;" horiz-adv-x="2048"
d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91
c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36
l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" />
<glyph glyph-name="stop" unicode="&#xf04d;"
d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
<glyph glyph-name="clone" unicode="&#xf24d;" horiz-adv-x="1792"
@ -608,6 +616,9 @@ d="M979 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12
<glyph glyph-name="wheelchair" unicode="&#xf193;" horiz-adv-x="1629"
d="M1023 349l102 -204c-77 -238 -299 -401 -549 -401c-317 0 -576 259 -576 576c0 242 152 458 379 541l17 -131c-163 -72 -268 -232 -268 -410c0 -247 201 -448 448 -448c257 0 465 220 447 477zM1571 249l58 -114l-256 -128c-9 -5 -19 -7 -29 -7c-24 0 -47 14 -57 35
l-239 477h-472c-32 0 -60 25 -64 57l-96 779c-1 10 3 32 6 42c19 69 83 114 154 114c88 0 160 -72 160 -160c0 -91 -80 -169 -172 -159l37 -289h423v-128h-407l16 -128h455c24 0 47 -14 57 -35l228 -455z" />
<glyph glyph-name="bootstrap" unicode="&#xf315;"
d="M256 1408h1024c141 0 256 -115 256 -256v-1024c0 -141 -115 -256 -256 -256h-1024c-141 0 -256 115 -256 256v1024c0 141 115 256 256 256zM494 1020v-795h310c169 0 270 83 270 223c0 106 -69 182 -177 196v4c77 14 137 91 137 174c0 119 -93 198 -229 198h-311z
M593 933h190c97 0 150 -44 150 -123c0 -86 -64 -133 -181 -133h-159v256zM593 592v0h187c127 0 192 -47 192 -139s-63 -141 -183 -141h-196v280z" />
<glyph glyph-name="cutlery" unicode="&#xf0f5;" horiz-adv-x="1408"
d="M640 1472v-640c0 -81 -52 -154 -128 -181v-779c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v779c-76 27 -128 100 -128 181v640c0 35 29 64 64 64s64 -29 64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64v-416
c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64zM1408 1472v-1600c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v512h-224c-17 0 -32 15 -32 32v800c0 176 144 320 320 320h256c35 0 64 -29 64 -64z" />
@ -639,6 +650,8 @@ h2048c70 0 128 -58 128 -128z" />
d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125
l-184 -267l204 -296h109zM1529 846v-206h-514l-3 27c-2 14 -4 33 -4 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-38 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 33 103 65 188 65c145 0 246 -85 246 -218c0 -240 -332 -260 -346 -403
h232v80h126z" />
<glyph glyph-name="pixelfed" unicode="&#xf314;"
d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM707 472h141c133 0 240 105 240 234s-107 234 -240 234h-203c-77 0 -139 -60 -139 -135v-525z" />
<glyph glyph-name="tty" unicode="&#xf1e4;" horiz-adv-x="1792"
d="M448 224v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM256 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM832 224v-192c0 -18 -14 -32 -32 -32h-192
c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM66 768c-37 0 -66 29 -66 65v129h514v-129c0 -36 -29 -65 -65 -65h-383zM1216 224v-192
@ -660,6 +673,9 @@ s384 -172 384 -384z" />
<glyph glyph-name="xmpp" unicode="&#xf2f9;" horiz-adv-x="1542"
d="M1536 1314c47 -398 -206 -904 -657 -1199c122 -101 261 -177 414 -216v-27c-165 14 -320 59 -461 128l-30 15l-1 1l-6 3c-11 6 -30 16 -41 22c-94 -51 -193 -90 -297 -116c-68 -19 -139 -33 -211 -42v28c145 37 279 107 396 201c-426 296 -682 805 -637 1192l93 -33v0
l273 -81c-1 -16 -1 -32 -1 -49c0 -296 147 -656 394 -917c254 262 406 628 406 929c0 17 0 33 -1 49l274 81z" />
<glyph glyph-name="moon-o" unicode="&#xf186;" horiz-adv-x="1471"
d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767
c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
<glyph glyph-name="pie-chart" unicode="&#xf200;" horiz-adv-x="1728"
d="M768 646l546 -546c-139 -141 -333 -228 -546 -228c-424 0 -768 344 -768 768s344 768 768 768v-762zM955 640h773c0 -213 -87 -407 -228 -546zM1664 768h-768v768c424 0 768 -344 768 -768z" />
<glyph glyph-name="align-left" unicode="&#xf036;" horiz-adv-x="1792"
@ -700,6 +716,19 @@ d="M866 1021c0 -32 -7 -63 -13 -94c-21 -100 -41 -200 -62 -300c-3 -14 -3 -14 -18 -
c-82 0 -156 -37 -226 -77l-2 2c16 107 52 202 52 313c0 159 -85 233 -242 233c-23 0 -46 -3 -68 -6c-197 -35 -317 -260 -317 -445c0 -196 113 -304 308 -304c4 0 25 2 25 -3c0 -2 0 -3 -1 -5c-4 -38 -16 -80 -26 -117c-15 -55 -67 -150 -134 -150c-29 0 -42 20 -42 47
c0 87 100 139 102 144c0 4 -5 8 -7 10c-31 28 -82 51 -124 51c-76 0 -117 -122 -117 -184c0 -116 73 -196 190 -196c173 0 299 182 338 332c11 44 19 89 30 133c2 9 5 13 14 18c71 36 146 60 227 60c44 0 83 -8 127 -18c1 -1 3 -1 4 -1c6 0 14 7 14 13zM1536 1120v-960
c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="gitea" unicode="&#xf31f;" horiz-adv-x="2066"
d="M366 1280v0c62 0 120 -8 160 -8v0v0c329 -18 502 -29 699 -29l1 -363l53 -27v390c171 2 371 11 709 29v0h1c15 0 28 -7 38 -17s18 -25 24 -43c12 -36 16 -85 15 -143c-3 -117 -30 -272 -75 -427s-107 -311 -182 -431s-163 -204 -259 -211h-615c-75 8 -156 85 -224 169
c-34 42 -64 87 -87 126c-21 36 -35 66 -41 88c-82 2 -219 15 -341 80c-125 67 -233 191 -242 414c-6 143 45 245 118 310s167 93 248 93zM388 1107v0c-90 -1 -147 -29 -180 -71c-36 -44 -46 -104 -38 -164c14 -113 61 -183 126 -229c62 -44 143 -65 231 -78
c-70 193 -106 325 -128 542h-11zM1118 893c-34 0 -66 -19 -82 -51l-172 -353c-22 -45 -3 -99 42 -121l354 -172c45 -22 99 -3 121 42l171 354c22 45 3 99 -42 121l-249 121l-45 -93c5 -5 10 -14 12 -20c2 -5 3 -13 3 -19v-4c30 -14 54 -25 74 -36c30 -17 52 -34 59 -62
s-1 -57 -17 -95c-12 -29 -29 -65 -51 -111c4 -5 9 -13 11 -19c2 -5 4 -13 4 -19c0 -22 -17 -46 -38 -54c-5 -2 -14 -4 -20 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h2c22 46 41 82 52 109c15 36 18 55 15 66s-13 20 -39 35
c-18 10 -41 22 -71 36c-4 -4 -13 -9 -19 -11c-5 -2 -14 -3 -19 -3h-6l-77 -158c5 -5 12 -14 14 -21c2 -5 3 -13 3 -19c0 -22 -17 -46 -38 -54c-5 -2 -13 -4 -19 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 16 46 37 54c5 2 15 3 20 3l79 162c-3 4 -8 11 -10 16
s-3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h1l46 94l-64 31c-13 6 -26 9 -39 9z" />
<glyph glyph-name="f-droid" unicode="&#xf32a;" horiz-adv-x="1676"
d="M47 1526v0c12 0 29 -8 36 -18l127 -164c10 3 27 6 37 6v0h1182v0c10 0 27 -3 37 -6l127 164c7 9 22 17 34 18h2h3c24 -1 44 -22 44 -46c0 -9 -4 -22 -10 -29l-133 -172c4 -11 7 -29 7 -40v0v-258c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v258v0
c0 11 3 29 7 40l-133 172c-6 7 -10 20 -10 29c0 26 20 46 46 46h1zM482 1212v0c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125v0c69 0 125 56 125 125v0c0 69 -56 125 -125 125v0zM1203 1212c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125s125 56 125 125v0
c0 69 -56 125 -125 125zM247 833h1182c61 0 111 -50 111 -111v-739c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v739c0 61 50 111 111 111zM838 740v0c-214 0 -388 -174 -388 -388s174 -388 388 -388s388 174 388 388s-174 388 -388 388zM838 670v0
c176 0 318 -142 318 -318s-142 -317 -318 -317s-318 141 -318 317s142 318 318 318zM838 583v0c-106 0 -197 -72 -223 -171h119c20 36 59 61 104 61c67 0 120 -54 120 -121s-53 -120 -120 -120c-48 0 -89 28 -108 69h-117c24 -102 116 -180 225 -180c127 0 231 104 231 231
s-104 231 -231 231z" />
<glyph glyph-name="shopping-basket" unicode="&#xf291;" horiz-adv-x="2048"
d="M1920 768c71 0 128 -57 128 -128s-57 -128 -128 -128h-15l-115 -662c-11 -61 -64 -106 -126 -106h-1280c-62 0 -115 45 -126 106l-115 662h-15c-71 0 -128 57 -128 128s57 128 128 128h1792zM485 -32c35 3 62 34 59 69l-32 416c-3 35 -34 62 -69 59s-62 -34 -59 -69
l32 -416c3 -33 31 -59 64 -59h5zM896 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1280 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1632 27l32 416c3 35 -24 66 -59 69s-66 -24 -69 -59
@ -732,10 +761,10 @@ h-1920v128c0 35 31 64 69 64h1782z" />
<glyph glyph-name="times-circle-o" unicode="&#xf05c;"
d="M1097 457l-146 -146c-13 -13 -33 -13 -46 0l-137 137l-137 -137c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l137 137l-137 137c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l137 -137l137 137c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-137 -137
l137 -137c13 -13 13 -33 0 -46zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="weixin" unicode="&#xf1d7;" horiz-adv-x="2048"
d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91
c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36
l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" />
<glyph glyph-name="python" unicode="&#xf322;"
d="M759 1416v0c63 0 129 -4 193 -15c101 -17 185 -92 185 -192v-353c0 -103 -82 -188 -185 -188h-370c-126 0 -232 -108 -232 -230v-170h-127c-108 0 -171 78 -197 188c-36 147 -34 236 0 377c29 123 124 188 232 188h509v47h-370v141c0 107 28 164 185 192
c53 9 114 15 177 15zM558 1303c-38 0 -69 -32 -69 -71s31 -70 69 -70s70 31 70 70s-32 71 -70 71zM1183 1021h139c108 0 159 -81 186 -188c37 -149 39 -261 0 -377c-37 -113 -78 -188 -186 -188h-555v-47h370v-141c0 -107 -92 -161 -185 -188c-140 -41 -253 -34 -370 0
c-98 29 -185 88 -185 188v353c0 102 84 188 185 188h370c123 0 231 107 231 235v165zM975 127v0c-38 0 -69 -31 -69 -70s31 -71 69 -71s70 32 70 71s-32 70 -70 70zM1389 366c0 -17 -70 -30 -156 -30s-156 13 -156 30s70 30 156 30s156 -13 156 -30z" />
<glyph glyph-name="internet-explorer" unicode="&#xf26b;" horiz-adv-x="1792"
d="M1792 599c0 -35 -2 -70 -7 -104h-1151c0 -199 175 -343 367 -343c130 0 255 64 322 177h423c-114 -321 -419 -536 -759 -536c-123 0 -246 29 -356 83c-112 -57 -269 -116 -394 -116c-168 0 -237 103 -237 263c0 93 20 186 45 275c16 58 80 176 109 229
c123 223 285 437 475 606c-153 -66 -319 -232 -427 -354c84 366 410 625 785 625c15 0 30 0 45 -1c124 57 297 117 433 117c162 0 301 -62 301 -245c0 -96 -37 -200 -75 -286c66 -119 101 -254 101 -390zM1722 1239c0 112 -80 181 -190 181c-84 0 -179 -34 -254 -70
@ -807,11 +836,9 @@ c7 37 13 109 27 135s19 19 28 28s18 15 28 28s17 34 26 52s30 31 26 53s-36 37 -54 5
s-46 -30 -111 -30s76 103 85 112s23 17 27 27s0 18 0 27s12 22 8 25c-2 1 -4 1 -6 1zM1212 1096c-62 -8 -139 -10 -182 -26c-45 -17 -54 -36 -81 -54s-67 -28 -81 -54s0 -54 0 -81s-26 -68 0 -82s55 37 82 55s63 64 81 54s6 -7 0 -27s-51 -41 -52 -81s102 -73 68 -126
s-188 46 -232 17s-19 -54 -28 -81s-37 -52 -27 -81s52 -34 81 -54s81 -56 82 -58s20 -99 27 -135c14 -73 -27 -199 76 -231c31 14 78 41 106 60c13 34 24 72 35 94c22 44 71 123 80 161s0 37 0 55s7 30 0 54s-36 54 -54 81s-34 64 -54 81s-46 18 -54 27s-4 8 -4 13
s-4 7 5 14s34 8 54 0s36 -36 54 -54s25 -51 54 -54s54 36 81 54c25 17 52 56 76 55c-12 131 -98 312 -193 404z" />
<glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48
c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52
h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156
c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" />
<glyph glyph-name="hashnode" unicode="&#xf317;"
d="M246 1408h1044c136 0 246 -110 246 -246v-1044c0 -136 -110 -246 -246 -246h-1044c-136 0 -246 110 -246 246v1044c0 136 110 246 246 246zM1153 23v0c87 1 158 71 162 158s-62 162 -149 171l-315 556c-46 83 -135 78 -167 -39c-28 -111 -20 -216 -28 -342
c0 -1 -1 -2 -2 -2s-2 1 -2 1l-281 560c20 16 37 50 37 75c0 52 -41 93 -93 93s-94 -41 -94 -93s42 -93 94 -93c4 0 7 1 11 1c118 -304 250 -659 297 -741c32 -78 141 -53 144 31l12 444c0 3 3 3 4 1l226 -537c-11 -20 -21 -55 -21 -78v-1c0 -91 74 -165 165 -165z" />
<glyph glyph-name="comment-o" unicode="&#xf0e5;" horiz-adv-x="1792"
d="M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8
c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 354 401 640 896 640s896 -286 896 -640z" />
@ -979,10 +1006,13 @@ d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM15
d="M1005 -16c-42 59 -111 155 -153 214c-41 57 -75 102 -77 102s-66 -87 -152 -205c-82 -113 -150 -205 -151 -205c-2 0 -296 207 -297 209c0 1 65 99 147 217s149 217 149 219c0 4 -27 14 -234 83c-129 43 -235 78 -237 79s10 41 52 174c30 95 56 174 57 175
s112 -35 248 -80s249 -81 250 -81s2 2 3 5s2 118 3 257s2 254 3 255c1 2 40 2 180 2c98 0 179 0 180 -1c2 -1 4 -78 8 -249c7 -281 9 -285 13 -285c2 0 109 36 239 80s236 79 237 78c3 -3 109 -350 108 -351s-109 -37 -241 -82c-181 -61 -240 -82 -240 -85
c0 -2 62 -95 141 -211c78 -114 141 -208 141 -209c-1 -2 -293 -217 -295 -217c-1 0 -38 50 -82 112z" />
<glyph glyph-name="fonticons" unicode="&#xf280;"
d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76
c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25
l-70 -9v-86h352z" />
<glyph glyph-name="att" unicode="&#xf31e;"
d="M768 1407v0c144 0 278 -39 393 -108c31 -19 46 -30 46 -48c0 -73 -206 -150 -472 -150c-268 0 -419 70 -419 135c0 22 19 39 54 60c116 71 253 111 398 111zM273 1226v0c1 0 0 -1 -1 -2c-22 -27 -31 -53 -31 -79c0 -72 57 -185 362 -185c416 0 677 151 677 236
c0 7 -2 13 -5 18c-1 1 0 2 1 1c25 -23 48 -46 73 -74c38 -43 53 -66 53 -104c0 -107 -166 -228 -539 -228c-350 0 -725 108 -725 257c0 10 10 28 25 47c32 41 68 78 108 112c1 0 2 1 2 1zM1456 979v0s1 0 1 -1c18 -36 40 -89 51 -133c10 -40 10 -69 2 -97
c-43 -152 -307 -235 -646 -235c-556 0 -794 160 -841 260c-6 12 -7 20 -4 37c7 39 32 114 55 159c1 1 1 1 1 0c-4 -15 -6 -30 -6 -45c0 -153 253 -274 557 -274c281 0 837 129 830 328v1zM1534 683v0s1 -1 1 -2c1 -13 1 -25 1 -41c0 -67 -9 -146 -28 -190
c-26 -61 -154 -248 -714 -248c-411 0 -649 139 -744 238c-21 22 -36 49 -39 67c-7 36 -11 91 -11 133c0 2 2 2 2 0c34 -125 219 -308 612 -308c413 0 891 200 919 350c0 1 1 1 1 1zM1482 360v0c1 0 1 -1 1 -2c-13 -33 -30 -67 -47 -96c-29 -50 -61 -86 -95 -114
c-124 -102 -332 -154 -521 -154c-359 0 -649 111 -745 315c-1 2 0 2 1 1c103 -149 366 -227 610 -227c345 0 679 106 795 276c0 1 1 1 1 1zM1274 64v0c1 0 1 -1 0 -2c-135 -118 -312 -190 -506 -190c-177 0 -341 60 -471 161c-1 1 -1 3 1 2c84 -47 234 -100 470 -100
c272 0 444 89 505 129h1z" />
<glyph glyph-name="sort-asc" unicode="&#xf0de;" horiz-adv-x="1024"
d="M1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
<glyph glyph-name="folder-open" unicode="&#xf07c;" horiz-adv-x="1879"
@ -1162,6 +1192,13 @@ c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h
d="M1280 388c0 14 -8 24 -22 27c-91 19 -160 83 -198 167c-4 8 -7 16 -7 25c0 45 124 36 124 100c0 27 -33 44 -57 44c-22 0 -40 -16 -63 -16c-4 0 -8 1 -12 2c3 38 5 77 5 115c0 34 -2 82 -17 114c-48 104 -140 165 -255 165c-125 0 -220 -47 -275 -165
c-15 -32 -18 -80 -18 -115c0 -38 3 -76 6 -114c-5 -1 -10 -2 -15 -2c-22 0 -41 16 -62 16c-25 0 -55 -17 -55 -45c0 -62 124 -54 124 -99c0 -9 -3 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -47 106 -64 138 -69c9 -24 5 -66 40 -66
c26 0 51 10 77 10c106 0 134 -95 256 -95c127 0 151 95 258 95c26 0 52 -9 78 -9c34 0 31 42 39 65c32 5 138 22 138 69zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="spell-check" unicode="&#xf327;" horiz-adv-x="2049"
d="M2049 700c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136
c18 -18 28 -43 28 -68zM0 880v73h48l158 454h111l158 -454h49v-73h-199v73h52l-32 98h-167l-32 -98h52v-73h-198zM200 1127h122l-49 149c-2 8 -5 16 -6 23c-1 8 -3 15 -3 18l-1 5h-2c-1 -13 -5 -29 -10 -46zM569 880v73h63v381h-63v73h242c40 0 72 -5 95 -14
c24 -9 44 -25 58 -47c15 -21 22 -46 22 -75c0 -25 -6 -47 -17 -67s-28 -35 -48 -46v-1c28 -8 50 -24 64 -47s22 -49 22 -78c0 -35 -10 -65 -30 -91s-45 -43 -75 -52c-21 -6 -47 -9 -79 -9h-254zM730 1192h92c20 0 37 6 48 18c11 13 17 30 17 51c0 29 -10 49 -30 60
c-11 5 -27 8 -46 8h-81v-137zM730 958h98c15 0 27 2 37 6c13 5 25 15 32 28c7 14 11 29 11 46c0 23 -7 41 -21 55c-13 14 -32 22 -56 22h-101v-157zM1131 950c-52 53 -78 118 -78 196s26 142 78 193s116 77 193 77c18 0 39 -2 60 -5c22 -3 44 -9 67 -16s41 -18 56 -33
s23 -32 23 -51v-72h-88v41c0 12 -7 23 -20 31s-29 14 -45 17s-32 5 -48 5c-51 0 -94 -17 -127 -51c-33 -33 -49 -77 -49 -132c0 -59 17 -106 51 -142s78 -54 130 -54c14 0 29 2 45 4s31 8 46 16s23 19 23 32v41h89v-72c0 -18 -7 -35 -22 -49c-14 -14 -33 -26 -56 -33
c-22 -7 -45 -13 -67 -16c-22 -4 -44 -6 -64 -6c-79 0 -145 27 -197 79v0z" />
<glyph glyph-name="building-o" unicode="&#xf0f7;" horiz-adv-x="1408"
d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64
c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64
@ -1330,6 +1367,8 @@ h-628l-376 -12v102l127 25c89 17 116 43 117 116c6 242 8 643 8 643s3 402 -8 645c-3
<glyph glyph-name="copyright" unicode="&#xf1f9;"
d="M1150 462v-109c0 -141 -225 -193 -366 -193c-274 0 -480 209 -480 485c0 271 204 475 475 475c99 0 358 -35 358 -194v-109c0 -9 -7 -16 -16 -16h-118c-9 0 -16 7 -16 16v70c0 63 -121 92 -203 92c-187 0 -317 -135 -317 -329c0 -201 136 -348 325 -348
c72 0 208 27 208 90v70c0 9 7 16 15 16h119c8 0 16 -7 16 -16zM768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="pleroma" unicode="&#xf324;" horiz-adv-x="961"
d="M120 1408h262v-1536h-382v1416c0 66 54 120 120 120zM575 1408h386v-648c0 -66 -53 -120 -119 -120v0h-267v768zM575 254h386v-262c0 -66 -53 -120 -119 -120v0h-267v382z" />
<glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1651"
d="M572 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46zM1651 96v-64c0 -18 -14 -32 -32 -32h-960c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h960
c18 0 32 -14 32 -32z" />
@ -1430,6 +1469,10 @@ s-29 -16 -64 -16h-69l293 -352h64l224 -64l352 -32c288 -64 288 -96 288 -96z" />
d="M620 416c-69 -40 -163 -64 -268 -64h-128v64h-64c-18 0 -32 36 -32 80c0 18 3 35 7 49c-77 2 -135 15 -135 31s58 29 135 31c-4 14 -7 31 -7 49c0 44 14 80 32 80h64v64h128c105 0 199 -24 268 -64h1113c74 -13 141 -24 187 -32c192 -32 256 -96 256 -128
s-64 -96 -256 -128c-46 -8 -113 -19 -187 -32h-1113zM1739 668c32 -22 53 -55 53 -92s-21 -70 -53 -92l81 -30c41 29 68 73 68 122s-27 93 -68 122zM625 400h1015s-217 -38 -456 -80c-128 0 -224 -96 -224 -96l-288 -288s-97 -64 -160 -64h-96l-93 464h29
c102 0 199 23 273 64zM352 816h-29l93 464h96c65 0 128 -32 160 -64l288 -288s96 -96 224 -96c239 -42 456 -80 456 -80h-1015c-74 41 -171 64 -273 64z" />
<glyph glyph-name="matrix-org" unicode="&#xf313;"
d="M40 1373v-1466h106v-35h-146v1536h146v-35h-106zM491 908v-74h2c20 28 44 51 72 66c28 16 60 23 96 23c35 0 66 -7 95 -20s50 -37 65 -71c16 24 38 46 66 64s61 27 99 27c29 0 56 -4 81 -11s45 -18 63 -34s31 -35 41 -60s15 -56 15 -91v-367h-150v311c0 18 -1 36 -2 52
s-6 30 -12 42s-16 22 -28 29s-29 10 -50 10s-38 -4 -51 -12s-24 -19 -31 -32s-13 -27 -15 -44s-4 -34 -4 -51v-305h-150v307c0 16 0 33 -1 49s-4 30 -9 44c-5 13 -15 24 -27 32s-31 12 -55 12c-7 0 -16 -2 -28 -5s-23 -9 -34 -18s-20 -21 -28 -38s-11 -38 -11 -65v-318h-151
v548h142zM1496 -93v1466h-106v35h146v-1536h-146v35h106z" />
<glyph glyph-name="steam" unicode="&#xf1b6;" horiz-adv-x="1792"
d="M1582 954c0 -135 -110 -244 -244 -244c-135 0 -244 109 -244 244s109 244 244 244c134 0 244 -109 244 -244zM812 212c0 139 -111 250 -250 250c-18 0 -36 -2 -54 -6l104 -42c102 -41 152 -156 111 -258s-157 -152 -259 -110c-41 16 -82 33 -123 49
c42 -79 125 -133 221 -133c139 0 250 111 250 250zM1642 953c0 168 -137 305 -305 305c-169 0 -306 -137 -306 -305c0 -169 137 -305 306 -305c168 0 305 136 305 305zM1792 953c0 -252 -204 -455 -455 -455l-437 -319c-16 -172 -162 -307 -338 -307
@ -1544,6 +1587,12 @@ d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -
d="M832 1024c0 106 -86 192 -192 192s-192 -86 -192 -192c0 -29 7 -57 19 -83c-26 12 -54 19 -83 19c-106 0 -192 -86 -192 -192s86 -192 192 -192s192 86 192 192c0 29 -7 57 -19 83c26 -12 54 -19 83 -19c106 0 192 86 192 192zM1683 320c0 -23 -92 -115 -115 -115
c-26 0 -107 94 -128 115l-96 -96l220 -220c18 -18 28 -43 28 -68c0 -56 -64 -120 -120 -120c-25 0 -50 10 -68 28l-671 671c-105 -78 -233 -131 -365 -131c-218 0 -368 151 -368 368c0 328 328 656 656 656c217 0 368 -150 368 -368c0 -132 -53 -260 -131 -365l355 -355
l96 96c-21 21 -115 102 -115 128c0 23 92 115 115 115c8 0 17 -4 23 -10c37 -37 316 -300 316 -329z" />
<glyph glyph-name="syncthing" unicode="&#xf311;"
d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM774 1254c-337 0 -611 -274 -611 -611c0 -10 0 -28 1 -38c-17 -10 -32 -23 -42 -41c-33 -56 -14 -128 41 -161c18 -10 37 -15 56 -16c97 -210 309 -355 555 -355
c108 0 210 28 298 78c16 -11 35 -19 56 -21c65 -5 122 42 129 107v10c0 14 -5 36 -11 49c87 105 139 241 139 388c0 57 -8 112 -23 164c14 13 25 30 32 49c21 61 -12 128 -73 149c-12 4 -26 6 -38 6v0c-6 0 -15 0 -21 -1c-112 148 -289 244 -488 244zM774 1175v0
c171 0 323 -79 420 -204c-10 -11 -17 -24 -22 -39c-9 -27 -8 -55 1 -80l-224 -186c-18 11 -39 16 -60 16c-22 0 -44 -5 -63 -18c-26 -16 -43 -42 -50 -70l-447 -41c-10 21 -25 39 -46 52c-13 8 -27 12 -41 14c0 8 -1 16 -1 24c0 295 238 532 533 532zM1224 792
c6 -3 15 -7 21 -9c15 -5 29 -8 44 -7c11 -43 17 -87 17 -133c0 -125 -42 -240 -114 -331c-13 7 -28 11 -43 13c-15 1 -28 0 -42 -4l-122 175c23 32 29 73 15 110zM783 516c2 -4 5 -11 8 -15c29 -44 81 -63 129 -50l122 -175c-12 -16 -19 -37 -21 -59v-9c0 -10 2 -26 5 -35
c-75 -40 -161 -63 -252 -63c-211 0 -394 123 -480 301c10 8 24 22 30 33c5 8 11 22 13 31z" />
<glyph glyph-name="picture-o" unicode="&#xf03e;" horiz-adv-x="1920"
d="M640 960c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32v1216c0 17 -15 32 -32 32z
M1920 1248v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
@ -1557,6 +1606,8 @@ d="M640 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h
s-192 -86 -192 -192v-320h-640v752c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v624c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 21 28 16 41 16v391c-19 9 -32 29 -32 50c0 30 25 55 55 55s55 -25 55 -55
c0 -21 -13 -41 -32 -50v-17c27 6 55 10 83 10c41 0 80 -15 114 -15c31 0 66 15 84 15c9 0 16 -7 16 -16v-210c0 -24 -81 -28 -97 -28c-37 0 -72 15 -110 15c-30 0 -61 -5 -90 -12v-133c13 0 41 5 41 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112
c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-624h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16z" />
<glyph glyph-name="c" unicode="&#xf31c;" horiz-adv-x="1404"
d="M996 819c0 0 -23 211 -232 217s-317 -157 -317 -392s119 -423 323 -423s226 235 226 235l391 -24s22 -211 -141 -373s-364 -188 -504 -187s-334 -2 -522 190s-220 379 -220 563s36 427 259 611c152 125 306 172 460 172c643 0 685 -593 685 -593l-408 4v0z" />
<glyph glyph-name="commenting" unicode="&#xf27a;" horiz-adv-x="1792"
d="M640 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128z
M1792 640c0 -354 -401 -640 -896 -640c-73 0 -144 6 -211 18c-114 -114 -263 -192 -435 -229c-27 -5 -56 -10 -86 -13c-16 -2 -31 9 -35 24c-4 16 8 26 20 37c63 59 138 106 164 317c-191 117 -313 291 -313 486c0 354 401 640 896 640s896 -286 896 -640z" />
@ -1639,9 +1690,12 @@ c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 928v19
c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32z
M1536 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1664 1248v-1088c0 -88 -72 -160 -160 -160
h-1344c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" />
<glyph glyph-name="caret-square-o-left" unicode="&#xf191;"
d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="handshake-o" unicode="&#xf2b5;" horiz-adv-x="2304"
d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292
c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243
c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434
c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167
c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" />
<glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1664"
d="M462 142c0 -70 -57 -128 -128 -128c-70 0 -128 58 -128 128c0 71 58 128 128 128c71 0 128 -57 128 -128zM960 -64c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM256 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
s128 -57 128 -128zM1458 142c0 -70 -58 -128 -128 -128c-71 0 -128 58 -128 128c0 71 57 128 128 128c70 0 128 -57 128 -128zM494 1138c0 -88 -72 -160 -160 -160s-160 72 -160 160s72 160 160 160s160 -72 160 -160zM1664 640c0 -71 -57 -128 -128 -128s-128 57 -128 128
@ -1743,12 +1797,21 @@ c31 -200 54 -325 66 -373c37 -166 76 -249 120 -249c34 0 85 53 154 161c68 108 104
d="M766 1408h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 45 -330 45c0 -18 1 -36 3 -52c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -135s-105 -57 -292 -67
c-103 -6 -230 3 -379 42c-323 85 -380 430 -388 779c-3 104 -1 201 -1 283c0 357 235 462 235 462c118 54 320 77 531 79v0zM350 839c-64 0 -115 -52 -115 -116s51 -115 115 -115s116 51 116 115s-52 116 -116 116v0zM768 839c-64 0 -116 -52 -116 -116s52 -115 116 -115
s116 51 116 115s-52 116 -116 116v0zM1186 839c-64 0 -116 -52 -116 -116s52 -115 116 -115s115 51 115 115s-51 116 -115 116v0z" />
<glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48
c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52
h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156
c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" />
<glyph glyph-name="ravelry" unicode="&#xf2d9;" horiz-adv-x="2080"
d="M1095 -197c-4 1 -7 2 -11 4c0 0 -329 193 -440 505c-37 6 -115 24 -175 37c87 -283 329 -499 626 -546zM454 409l168 -28c-57 171 -64 366 -64 366c-67 -65 -103 -154 -121 -224c3 -39 8 -77 17 -114zM564 1018c-31 -46 -56 -96 -77 -148c33 35 60 58 74 68
c-2 30 3 80 3 80zM2001 584c0 436 -352 790 -784 790c-200 0 -382 -76 -521 -201c-21 -41 -35 -93 -45 -160c213 181 593 136 593 136c95 -4 84 -88 83 -114c-346 29 -516 -70 -684 -213c0 0 33 -320 109 -450c438 -20 771 218 771 218c42 30 79 33 87 -19
c6 -42 9 -99 -39 -121c-146 -68 -307 -111 -467 -134c-104 -15 -162 -19 -317 -16c148 -344 518 -438 518 -438c116 -19 204 -4 263 15c256 130 433 398 433 707zM2075 621c-7 -68 -18 -147 -40 -212c-90 -267 -215 -441 -500 -600c-26 -18 -54 -35 -82 -44
c-51 -18 -106 -22 -163 -16c-24 -2 -48 -3 -73 -3c-381 0 -703 260 -800 615c-3 0 -6 1 -9 1c-23 -180 110 -423 110 -423s8 -12 54 -82c-255 135 -262 533 -262 533c-61 23 -273 95 -310 154c0 0 166 -91 309 -109c-1 1 2 32 2 32c9 122 51 217 94 290
c28 137 90 261 176 365c15 62 39 136 81 214c18 34 35 56 81 77c304 142 604 178 912 18c295 -154 455 -476 420 -810z" />
<glyph glyph-name="code-fork" unicode="&#xf126;" horiz-adv-x="1024"
d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166
c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497
c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" />
<glyph glyph-name="hand-o-right" unicode="&#xf0a4;" horiz-adv-x="1792"
d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 768c0 68 -61 128 -128 128h-576c0 63 96 128 96 256c0 96 -75 128 -160 128c-28 0 -79 -116 -90 -139c-12 -22 -24 -44 -37 -65c-33 -53 -71 -99 -112 -145c-64 -73 -135 -163 -241 -163
h-32v-640h32c175 0 346 -128 540 -128c112 0 189 47 189 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103h331c69 0 128 59 128 128zM1792 769c0 -140 -116 -257 -256 -257h-169c-3 -42 -16 -82 -37 -119
@ -1757,6 +1820,9 @@ c159 0 288 -87 288 -256c0 -44 -7 -87 -22 -128h374c138 0 256 -117 256 -255z" />
<glyph glyph-name="object-group" unicode="&#xf247;" horiz-adv-x="2048"
d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
<glyph glyph-name="wikidata" unicode="&#xf31a;" horiz-adv-x="2048"
d="M0 1264h76v-1264h-76v1264zM152 1264h227v-1264h-227v1264zM455 1264h228v-1264h-228v1264zM759 1264h75v-1264h-75v1264zM910 1264h76v-1264h-76v1264zM1820 1264h76v-1264h-76v1264zM1972 1264h76v-1264h-76v1264zM1062 1264h227v-1264h-227v1264zM1365 1264h76v-1264
h-76v1264zM1517 1264h228v-1264h-228v1264z" />
<glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792"
d="M960 1280c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 352v-352c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-93 93c-157 -189 -439 -310 -748 -310s-591 121 -748 310l-93 -93c-6 -6 -15 -9 -23 -9c-4 0 -8 1 -12 2
c-12 5 -20 17 -20 30v352c0 18 14 32 32 32h352c13 0 25 -8 30 -20s2 -25 -7 -35l-100 -100c90 -121 263 -209 461 -236v647h-192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h192v163c-76 44 -128 126 -128 221c0 141 115 256 256 256s256 -115 256 -256
@ -1814,6 +1880,12 @@ l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-128 128l90
c25 25 65 25 90 0l83 -83zM218 19c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -82l83 82c25 25 65 25 90 0l83 -82l64 64v293l-210 314c-23 35 -7 83 33 97l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58c40 -14 56 -62 33 -97l-210 -314v-293l19 18
c25 25 65 25 90 0l83 -82l83 82c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83
c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83zM621 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
<glyph glyph-name="gimp" unicode="&#xf31b;" horiz-adv-x="1792"
d="M1760 1453c243 -1827 -975 -1550 -1432 -1186c28 4 55 13 78 30c50 38 74 102 73 173s-25 150 -73 220c-6 9 -13 17 -20 25l26 588s159 -366 481 -358c674 18 794 417 867 508zM612 937c-97 0 -177 -85 -177 -193s80 -194 177 -194c16 0 31 4 46 8
c-67 3 -122 62 -122 133v0c0 73 57 133 127 133v0c56 0 112 -47 124 -104c1 8 2 16 2 24c0 108 -80 193 -177 193zM1031 928v0c-119 0 -216 -102 -216 -228s97 -227 216 -227c45 0 87 14 122 39c-17 -8 -47 -15 -66 -15c-90 0 -162 77 -162 171v0c0 94 72 170 162 170
c75 0 147 -63 160 -141v3c0 126 -97 228 -216 228zM158 822v0c79 -2 166 -58 227 -146c46 -67 70 -141 70 -206s-21 -121 -64 -153s-100 -37 -158 -16s-118 67 -164 134s-69 141 -69 206s21 121 64 153c26 20 58 29 94 28zM1042 804c-42 0 -76 -36 -76 -80v0
c0 -44 34 -80 76 -80s76 36 76 80v0c0 44 -34 80 -76 80zM615 787c-28 0 -50 -23 -50 -52v0v0c0 -29 22 -53 50 -53s50 24 50 53v0v0c0 29 -22 52 -50 52zM130 770c-47 0 -85 -47 -85 -106v0c0 -59 38 -107 85 -107s84 48 84 107v0c0 59 -37 106 -84 106zM1202 468
c0 0 44 -38 69 -72c-96 -78 -261 -141 -583 -73c163 -60 300 -88 406 -81c-64 -22 -146 -39 -250 -44c233 -23 407 22 468 117c16 -18 32 -49 47 -89c10 69 36 101 -4 155s-153 87 -153 87z" />
<glyph glyph-name="dashcube" unicode="&#xf210;" horiz-adv-x="1408"
d="M0 856c0 173 138 322 314 322h742l352 358v-1470c0 -174 -138 -322 -314 -322h-780c-176 0 -314 148 -314 322v790zM1232 102l-176 180v425c0 61 -49 112 -110 112h-484c-61 0 -110 -51 -110 -112v-492c0 -61 49 -113 110 -113h770z" />
<glyph glyph-name="optin-monster" unicode="&#xf23c;" horiz-adv-x="2132"
@ -1918,10 +1990,11 @@ c14 0 27 -9 31 -23zM736 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -
d="M1024 288v-416h-928c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344c53 0 96 -43 96 -96v-928h-416c-53 0 -96 -43 -96 -96zM1152 256h381c-9 -48 -35 -102 -65 -132l-184 -184c-30 -30 -84 -56 -132 -65v381z" />
<glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
d="M1280 137c0 -146 -96 -265 -213 -265h-854c-117 0 -213 119 -213 265c0 263 65 567 327 567c81 -79 191 -128 313 -128s232 49 313 128c262 0 327 -304 327 -567zM1024 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
<glyph glyph-name="php" unicode="&#xf30e;"
d="M768 1044c424 0 768 -181 768 -404s-344 -404 -768 -404s-768 181 -768 404s344 404 768 404zM701 934l-87 -418h83l50 239h67c21 0 35 -4 41 -12s8 -23 4 -42l-39 -185h85l40 194c8 44 3 73 -18 89c-20 16 -50 23 -91 24h-75l23 111h-83zM320 823v0l-87 -418h84l23 111
h72c25 0 49 3 72 8s44 19 64 39c16 16 30 33 39 53c10 20 16 40 19 61c7 45 -1 80 -22 106s-56 40 -103 40h-161zM1035 823l-87 -418h84l23 111h73c25 0 48 3 71 8s44 19 64 39c16 16 30 33 39 53c10 20 16 40 19 61c7 45 0 80 -21 106s-57 40 -104 40h-161zM416 757v0
c32 0 59 -3 80 -9c22 -6 29 -30 22 -71c-9 -49 -26 -77 -52 -85s-57 -11 -96 -11h-9c-2 0 -5 1 -7 1l36 174h12c4 0 9 1 14 1zM1131 757v0c32 0 59 -3 80 -9c22 -6 29 -30 22 -71c-9 -49 -26 -77 -52 -85s-57 -11 -96 -11h-9c-2 0 -5 1 -7 1l36 174h12c4 0 9 1 14 1z" />
<glyph glyph-name="php" unicode="&#xf30e;" horiz-adv-x="2299"
d="M1149 1245c635 0 1150 -271 1150 -605s-515 -605 -1150 -605s-1149 271 -1149 605s514 605 1149 605zM1049 1081l-130 -627h125l74 359l100 -1c32 0 52 -6 62 -18s12 -33 6 -62l-58 -278h126l61 291c13 65 4 109 -27 132c-30 23 -77 36 -138 37h-111l35 167h-125z
M478 914v0l-129 -625h126l34 165h108c37 0 73 5 107 13s66 27 96 57c25 24 44 50 58 80s24 60 28 91c11 67 1 121 -31 160s-84 58 -155 59h-242zM1549 914l-130 -625h126l34 165h109c37 0 72 5 106 13s67 27 97 57c25 24 43 50 57 80s24 60 28 91c11 67 1 121 -31 160
s-84 58 -155 59h-241zM623 815v0c48 1 88 -4 120 -13s43 -45 32 -106c-13 -73 -38 -115 -77 -127s-87 -18 -145 -17h-12c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1zM1693 815v0c48 1 88 -4 120 -13s44 -45 33 -106c-13 -73 -39 -115 -78 -127s-87 -18 -145 -17h-12
c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1z" />
<glyph glyph-name="ioxhost" unicode="&#xf208;" horiz-adv-x="2048"
d="M1463 704c0 -47 -38 -86 -86 -86h-702c-48 0 -86 39 -86 86s38 86 86 86h702c48 0 86 -39 86 -86zM1677 704c0 59 -8 115 -23 170h-982c-48 0 -86 38 -86 85c0 48 38 86 86 86h908c-115 187 -321 311 -555 311c-360 0 -653 -292 -653 -652c0 -59 8 -115 23 -170h982
c48 0 86 -38 86 -85c0 -48 -38 -86 -86 -86h-908c115 -187 321 -311 556 -311c359 0 652 292 652 652zM2048 959c0 -47 -38 -85 -86 -85h-131c11 -55 17 -112 17 -170c0 -454 -369 -824 -823 -824c-333 0 -620 198 -750 483h-189c-48 0 -86 38 -86 86c0 47 38 85 86 85h132
@ -1946,6 +2019,9 @@ l-76 -404c-19 -106 -112 -183 -220 -183h-688c-80 0 -157 39 -205 102l-384 512c-33
<glyph glyph-name="database" unicode="&#xf1c0;"
d="M768 768c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 0c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 384c301 0 603 54 768 170
v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 1536c424 0 768 -115 768 -256v-128c0 -141 -344 -256 -768 -256s-768 115 -768 256v128c0 141 344 256 768 256z" />
<glyph glyph-name="jirafeau" unicode="&#xf318;"
d="M1459 1408c43 0 77 -34 77 -77v-1382c0 -43 -34 -77 -77 -77h-923c18 109 27 134 50 210c31 103 92 108 92 108c49 11 74 31 224 -36s270 -72 270 -72v0c15 -19 71 -80 137 -85c90 -7 128 19 128 19s31 91 -38 176s-336 376 -343 403c0 0 -40 47 -69 58s-119 63 -135 130
s-42 168 -33 215s22 152 -32 130s-31 -74 -40 -137s-52 -190 -112 -190c0 0 -87 150 -145 132s-108 -181 -63 -275c0 0 -210 -295 -393 -772c-20 14 -34 37 -34 63v1382c0 43 34 77 77 77h1382z" />
<glyph glyph-name="user-circle-o" unicode="&#xf2be;" horiz-adv-x="1792"
d="M896 1536c495 0 896 -401 896 -896c0 -492 -399 -896 -896 -896c-496 0 -896 403 -896 896c0 495 401 896 896 896zM1515 185c93 128 149 285 149 455c0 423 -345 768 -768 768s-768 -345 -768 -768c0 -170 56 -327 149 -455c36 179 123 327 306 327
c81 -79 191 -128 313 -128s232 49 313 128c183 0 270 -148 306 -327zM1280 832c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
@ -1963,6 +2039,9 @@ d="M1151 1536c81 0 159 -39 207 -105l572 -781c77 -104 118 -229 118 -359v-355c0 -1
c-42 51 -65 116 -65 182v32c0 106 86 192 192 192h959zM1920 -64v355c0 101 -33 202 -93 284l-573 781c-24 32 -62 52 -103 52h-959c-35 0 -64 -29 -64 -64c0 -53 1 -90 36 -133c13 41 50 69 92 69h832v-32h-832c-35 0 -64 -29 -64 -64c0 -19 -1 -39 3 -58
c11 -59 65 -102 125 -102h731c53 0 96 -43 96 -96c0 -10 -2 -21 -5 -30l-64 -192c-13 -39 -50 -66 -91 -66h-443c-88 0 -160 -72 -160 -160v-32c0 -35 29 -64 64 -64h561c10 0 20 -2 29 -7l317 -158c32 -17 53 -50 53 -86v-197c0 -35 29 -64 64 -64h384c35 0 64 29 64 64z
" />
<glyph glyph-name="digitalocean" unicode="&#xf31d;" horiz-adv-x="1535"
d="M245 169h-191v190h191v-190zM473 -59h-228v228h228v-228zM769 465v-296h-296v296h296zM768 -128v298c315 0 559 312 438 644c-44 123 -142 221 -265 265c-332 120 -644 -123 -644 -438h-297c0 502 485 894 1012 729c230 -72 414 -255 485 -485
c165 -527 -226 -1013 -729 -1013z" />
<glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408"
d="M597 869c0 0 -10 -17 -257 -456c-13 -22 -30 -46 -65 -46h-239c-14 0 -25 7 -31 17s-7 23 0 36l253 448c1 0 1 0 0 1l-161 279c-7 13 -8 27 -1 37c6 10 18 15 32 15h239c36 0 54 -24 66 -45c163 -285 164 -286 164 -286zM1403 1511c7 -10 7 -24 0 -37l-528 -934
c-1 0 -1 -1 0 -1l336 -615c7 -13 7 -27 1 -37c-7 -10 -18 -15 -32 -15h-239c-36 0 -55 24 -66 45c-339 621 -339 622 -339 622s17 30 531 942c13 23 28 45 64 45h241c14 0 25 -5 31 -15z" />
@ -2032,6 +2111,11 @@ d="M994 344c0 -66 -7 -132 -17 -197c-15 -104 -30 -211 -55 -313c-18 -73 -86 -90 -1
c3 21 6 43 10 66c2 16 4 32 6 47c1 6 4 10 9 12c208 106 352 322 352 571c0 365 -306 659 -675 639c-338 -18 -607 -306 -605 -644c2 -249 147 -464 356 -568c5 -2 8 -7 9 -12c2 -14 4 -29 6 -45c4 -24 7 -46 11 -68c2 -12 -11 -22 -22 -17c-297 116 -504 412 -487 753
c19 387 331 704 718 728c446 28 817 -326 817 -766zM994 800c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224zM1282 768c0 -165 -79 -313 -200 -406c-10 -8 -24 -1 -26 12c-3 28 -11 61 -29 92c-4 6 -3 14 3 20c76 70 124 170 124 282
c0 226 -197 407 -428 382c-177 -20 -321 -166 -338 -344c-13 -126 37 -242 122 -320c6 -6 7 -14 3 -20c-18 -31 -26 -64 -29 -93c-2 -12 -16 -19 -26 -11c-124 96 -203 247 -200 417c6 266 222 488 487 500c294 14 537 -220 537 -511z" />
<glyph glyph-name="hackster" unicode="&#xf326;"
d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM517 887c-10 -3 -17 -13 -17 -23s8 -18 18 -18h113c17 0 31 14 31 31v9c0 3 0 5 -1 8c-4 16 -22 26 -38 22zM661 739v59v5c-2 9 -12 13 -21 11l-325 -88c-5 -1 -9 -7 -9 -12
s4 -9 9 -9h151c17 0 31 -14 31 -31v-86c0 -9 8 -17 17 -17h324c17 0 31 -13 31 -30v-59v-5c2 -9 12 -13 21 -11l325 88c5 1 9 7 9 12s-4 9 -9 9h-152c-17 0 -30 14 -30 31v85c0 9 -8 17 -17 17h-324c-17 0 -31 14 -31 31v0zM891 989c-13 -4 -23 -16 -23 -30v-176
c0 -17 14 -31 31 -31h101c17 0 30 14 30 31v203v0c0 2 0 6 -1 8c-4 16 -21 26 -37 22zM1013 386c10 3 17 13 17 23s-8 19 -18 19h-113c-17 0 -31 -14 -31 -31v-9c0 -3 0 -5 1 -8c4 -16 22 -26 38 -22zM639 285c13 4 23 16 23 30v176c0 17 -14 30 -31 30h-101
c-17 0 -30 -13 -30 -30v-204c0 -3 0 -5 1 -8c4 -16 21 -25 37 -21z" />
<glyph glyph-name="plus-square" unicode="&#xf0fe;"
d="M1280 576v128c0 35 -29 64 -64 64h-320v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-320c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h320v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h320c35 0 64 29 64 64zM1536 1120v-960
c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
@ -2071,6 +2155,8 @@ d="M1278 -96v480h160v-640h-1438v640h160v-480h1118zM336 428l33 157l783 -165l-33 -
d="M1408 606v-318c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-6 -6 -15 -10 -23 -10c-3 0 -6 1 -9 2c-15 4 -30 6 -45 6h-832
c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v254c0 8 3 16 9 22l64 64c7 7 15 10 23 10c4 0 8 -1 12 -3c12 -5 20 -16 20 -29zM1639 1095l-814 -814c-32 -32 -82 -32 -114 0l-430 430c-32 32 -32 82 0 114l110 110c32 32 82 32 114 0
l263 -263l647 647c32 32 82 32 114 0l110 -110c32 -32 32 -82 0 -114z" />
<glyph glyph-name="emby" unicode="&#xf319;" horiz-adv-x="1534"
d="M474 224l-62 -62l-412 415l356 356l-60 61l414 414l355 -355l58 57l411 -414l-352 -352l58 -58l-414 -414zM1091 633l-496 291v-578z" />
<glyph glyph-name="hand-spock-o" unicode="&#xf259;" horiz-adv-x="1920"
d="M459 -256c-103 0 -192 70 -217 170l-101 401c-8 35 -13 72 -13 108c0 23 0 45 -5 67l-116 477c-5 19 -7 38 -7 57c0 124 94 226 217 239c22 113 119 193 235 193c111 0 207 -76 233 -184l83 -348l103 428c26 108 122 184 233 184c119 0 217 -86 236 -202
c123 -14 212 -118 212 -241c0 -19 -3 -39 -7 -59l-123 -512c80 60 138 118 243 118c139 0 255 -113 255 -253c0 -84 -41 -162 -107 -212l-507 -380c-44 -33 -98 -51 -153 -51h-694zM1104 1408c-51 0 -96 -36 -108 -86l-164 -682h-127l-145 602c-12 50 -57 86 -108 86
@ -2156,6 +2242,9 @@ d="M152 1274v0h10c90 -2 180 -36 272 -79c4 -2 11 -5 15 -7c7 -3 13 -7 20 -10c116 -
c2 3 5 5 7 8s5 6 7 9c70 83 157 151 278 208c101 48 200 86 296 86h9c45 -1 84 -15 110 -44c80 -92 -8 -177 -39 -293c-41 -155 6 -321 -118 -429c-43 -37 -93 -47 -143 -52c65 -77 103 -183 82 -292c-4 -21 -10 -42 -18 -61c-6 -17 -13 -32 -22 -47l-9 -15
c-2 -2 -3 -5 -5 -7c-63 -94 -168 -154 -281 -161c-6 0 -11 -1 -17 -1h-9c-15 0 -39 3 -53 5c-19 3 -49 12 -67 19c-3 1 -7 2 -9 3c-69 29 -124 80 -159 143c-2 3 -4 5 -5 8c-2 3 -5 3 -7 0c-1 -3 -3 -5 -5 -8s-2 -5 -4 -8c-48 -81 -131 -140 -231 -157c-12 -2 -23 -3 -35 -4
c-6 0 -12 -1 -18 -1c-169 -3 -327 118 -361 292c-21 109 18 215 83 292c-50 5 -101 15 -144 52c-124 108 -78 274 -119 429c-31 116 -118 201 -38 293c26 29 65 43 110 44h9z" />
<glyph glyph-name="file-epub" unicode="&#xf321;"
d="M723 132l458 458l70 -71c24 -24 24 -64 0 -88l-483 -483c-24 -24 -65 -24 -89 0l-483 483c-24 24 -24 64 0 88l483 484c24 24 65 24 89 0l298 -299l-343 -343l-114 114l229 229l-115 114l-343 -343zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344
c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-768v-1536h1280z" />
<glyph glyph-name="chevron-circle-left" unicode="&#xf137;"
d="M909 141l102 102c25 25 25 65 0 90l-307 307l307 307c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792"
@ -2227,6 +2316,11 @@ v66c282 -8 528 -159 667 -385zM1748 640c0 470 -382 852 -852 852s-852 -382 -852 -8
<glyph glyph-name="server" unicode="&#xf233;" horiz-adv-x="1792"
d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM128 1152h1024v128h-1024v-128zM1696 704c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1696 1216
c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
<glyph glyph-name="inkscape" unicode="&#xf312;"
d="M755 1398v0c47 0 95 -17 131 -52l588 -601c234 -234 -259 -288 -401 -371c-50 -51 153 -85 132 -147c-42 -126 -157 -45 -280 -171c-50 -51 95 -46 45 -97c-93 -68 -285 -115 -300 -32c-21 117 -135 68 -185 119s101 104 51 155s-299 97 -349 148s191 88 141 139
c-138 68 -461 41 -269 278l567 580c34 35 82 52 129 52zM760 1343v0c-34 0 -68 -13 -93 -38c-49 -50 -140 -138 -219 -223c-45 -45 -40 -109 10 -109h123l80 139l49 -199l149 95l93 -49l22 131l111 -89c12 12 12 54 -9 76l-224 228c-24 25 -58 38 -92 38zM491 456
c-74 0 219 -119 279 -103c27 14 40 34 21 38c-56 9 -285 56 -300 65zM1390 297c43 -1 86 -22 100 -63c0 -54 -212 -36 -212 -7c13 47 63 71 112 70zM409 172c26 0 50 -8 64 -26c-23 -61 -101 -115 -151 -72c-57 50 21 99 87 98zM1251 168c71 -14 85 -65 71 -79
c-64 -38 -136 21 -71 79z" />
<glyph glyph-name="search-minus" unicode="&#xf010;" horiz-adv-x="1664"
d="M1024 736v-64c0 -17 -15 -32 -32 -32h-576c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h576c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38
l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" />
@ -2245,17 +2339,16 @@ c-9 0 -18 -3 -24 -8c-7 -4 -10 -11 -10 -18l17 -621c0 -14 15 -25 34 -25h185c18 0 3
d="M1408 768c0 -283 -315 -512 -704 -512c-61 0 -120 6 -176 16c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512s704 -229 704 -512zM1792 512
c0 -163 -104 -307 -266 -401c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466
c0 52 -8 103 -23 152c169 -93 279 -241 279 -408z" />
<glyph glyph-name="moon" unicode="&#xf328;" horiz-adv-x="1471"
d="M1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
<glyph glyph-name="facebook-official" unicode="&#xf230;"
d="M1451 1408c47 0 85 -38 85 -85v-1366c0 -47 -38 -85 -85 -85h-391v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-735c-47 0 -85 38 -85 85v1366c0 47 38 85 85 85h1366z" />
<glyph glyph-name="clock-o" unicode="&#xf017;"
d="M896 992v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640
c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="handshake-o" unicode="&#xf2b5;" horiz-adv-x="2304"
d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292
c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243
c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434
c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167
c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" />
<glyph glyph-name="caret-square-o-left" unicode="&#xf191;"
d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="hand-scissors-o" unicode="&#xf257;" horiz-adv-x="1792"
d="M1073 -128h-177c-104 0 -183 45 -226 141c-15 32 -23 67 -23 102v5c-82 40 -135 124 -135 216c0 11 0 38 5 48h-261c-141 0 -256 115 -256 256s115 256 256 256h113l-44 17c-99 37 -165 133 -165 239c0 141 115 256 256 256c31 0 62 -6 91 -17l628 -239h401
c141 0 256 -115 256 -256v-668c0 -118 -80 -220 -194 -248l-339 -85c-60 -15 -123 -23 -186 -23zM1024 583l-155 -71l-163 -74c-40 -18 -66 -58 -66 -102c0 -62 50 -112 112 -112c16 0 32 3 46 10l338 154c-65 14 -112 73 -112 140v55zM1344 272c0 62 -50 112 -112 112
@ -2450,6 +2543,9 @@ c13 -20 20 -44 20 -69s-7 -49 -20 -69c-119 -187 -293 -342 -497 -429c15 -27 110 -1
c-22 -5 -50 -3 -72 -3c-11 0 -56 -2 -60 7l-456 841c-29 -21 -56 -44 -82 -68c22 -39 404 -742 404 -748c0 -8 -5 -10 -11 -10c-17 0 -150 41 -155 50l-106 197l-224 413c-28 -34 -54 -69 -78 -106c13 -19 30 -39 41 -59c14 -26 176 -321 176 -327c0 -5 -5 -10 -10 -10z
M1165 282l49 -91c187 76 341 216 450 385c-111 171 -269 313 -459 389c89 -85 139 -202 139 -325c0 -141 -66 -274 -179 -358zM848 896c0 -26 22 -48 48 -48c55 0 108 -22 147 -61s61 -92 61 -147c0 -26 22 -48 48 -48s48 22 48 48c0 168 -136 304 -304 304
c-26 0 -48 -22 -48 -48zM1214 961l-9 4l7 -7z" />
<glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512
c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
<glyph glyph-name="wordpress" unicode="&#xf19a;" horiz-adv-x="1792"
d="M127 640c0 111 24 217 67 313l367 -1005c-257 125 -434 388 -434 692zM1415 679c0 -66 -27 -142 -59 -249l-76 -256l-278 826s46 3 88 8c41 5 36 66 -5 63c-125 -9 -205 -10 -205 -10s-75 1 -202 10c-42 3 -47 -60 -5 -63c39 -4 80 -8 80 -8l120 -328l-168 -504l-280 832
s46 3 88 8c41 5 36 66 -5 63c-124 -9 -205 -10 -205 -10c-14 0 -31 1 -49 1c137 209 373 347 642 347c200 0 382 -77 519 -202h-10c-75 0 -129 -65 -129 -136c0 -63 37 -116 76 -180c30 -51 63 -117 63 -212zM909 573l237 -647c1 -4 3 -8 5 -11c-80 -28 -165 -44 -255 -44
@ -2661,6 +2757,8 @@ d="M1280 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32
h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572c0 136 48 261 126 359l-52 53l-101 -111c-12 -13 -32 -14 -45 -3l-48 44c-13 11 -14 32 -2 45l105 115l-111 112v-134c0 -18 -14 -32 -32 -32h-64
c-18 0 -32 14 -32 32v288c0 35 29 64 64 64h288c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-133l106 -107l86 94c12 13 32 14 45 3l48 -44c13 -11 14 -32 2 -45l-90 -99l57 -56c98 78 223 126 359 126s261 -48 359 -126l255 254h-134c-18 0 -32 14 -32 32v64zM832 256
c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
<glyph glyph-name="chevron-up" unicode="&#xf077;" horiz-adv-x="1612"
d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" />
<glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1428"
d="M1364 486c61 -35 82 -114 47 -175l-64 -110c-35 -61 -114 -82 -175 -47l-266 153v-307c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v307l-266 -153c-61 -35 -140 -14 -175 47l-64 110c-35 61 -14 140 47 175l266 154l-266 154c-61 35 -82 114 -47 175l64 110
c35 61 114 82 175 47l266 -153v307c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-307l266 153c61 35 140 14 175 -47l64 -110c35 -61 14 -140 -47 -175l-266 -154z" />
@ -2734,8 +2832,11 @@ c18 0 32 -14 32 -32zM1540 -23v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0
l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70z" />
<glyph glyph-name="area-chart" unicode="&#xf1fe;" horiz-adv-x="2048"
d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
<glyph glyph-name="chevron-up" unicode="&#xf077;" horiz-adv-x="1612"
d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" />
<glyph glyph-name="dev-to" unicode="&#xf316;"
d="M39 1403v0c13 5 121 6 735 5c717 -1 721 -1 734 -9c7 -5 15 -14 20 -21c8 -13 8 -16 8 -739s0 -726 -8 -739c-5 -7 -13 -15 -20 -20c-13 -8 -16 -8 -739 -8s-726 0 -739 8c-7 5 -16 13 -21 20c-8 13 -8 16 -9 731c0 490 0 723 3 733c5 19 18 33 36 39zM404 935
c-18 4 -53 6 -119 6h-93v-603h84c46 0 96 1 111 3c72 9 131 63 144 132c5 26 5 306 0 332c-6 31 -20 59 -43 83c-25 26 -50 40 -84 47zM897 886v55h-118c-92 0 -121 -2 -133 -6c-20 -7 -42 -30 -47 -50c-3 -11 -4 -89 -3 -254c1 -265 -1 -250 27 -274c20 -17 39 -19 163 -19
h111v109l-95 1l-96 1l-1 69v69h116v109h-116v136h192v54zM1081 933c-3 8 -4 8 -62 8h-59l3 -10c26 -106 136 -514 143 -528c11 -23 33 -49 49 -57c18 -9 47 -7 67 4c16 9 45 45 50 62c8 25 138 522 138 525s-16 4 -60 3l-58 -1l-52 -198c-28 -109 -52 -199 -53 -202
s-24 83 -52 190s-52 199 -54 204zM301 639v193l41 -1c37 -2 42 -2 56 -11c28 -18 27 -18 27 -178c0 -164 0 -166 -29 -183c-15 -9 -22 -10 -56 -11l-39 -2v193z" />
<glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
d="M1280 832c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 832c0 -84 -53 -154 -128 -181v-395c0 -212 -201 -384 -448 -384s-448 172 -448 384v132c-217 27 -384 187 -384 380v512c0 35 29 64 64 64c6 0 11 -1 16 -2c22 39 64 66 112 66
c71 0 128 -57 128 -128s-57 -128 -128 -128c-23 0 -45 7 -64 18v-402c0 -141 144 -256 320 -256s320 115 320 256v402c-19 -11 -41 -18 -64 -18c-71 0 -128 57 -128 128s57 128 128 128c48 0 90 -27 112 -66c5 1 10 2 16 2c35 0 64 -29 64 -64v-512

Before

Width:  |  Height:  |  Size: 453 KiB

After

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,9 @@
<hr>
<footer class="text-center">
<a href="https://tildegit.org/team/site">page source</a>
<pre>ECDSA fingerprint: SHA256:R3qNfKIF3IiXhKCbFX6rCKl73yzexi9Wodsow6XFres</pre>
<a href="https://tildegit.org/team/site">site source</a>
&mdash;
<a href="https://tildegit.org/team/site/src/branch/master/<?=str_ireplace("/var/www/tilde.team/", "", $filepath)?>">page source</a>
&mdash;
<a href="https://bhh.sh/donate/">donate</a>
</footer>
@ -9,8 +12,8 @@
<br>
<br>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
</body>
</html>

47
gen_tdp
View File

@ -1,36 +1,39 @@
#!/usr/bin/env python3
import subprocess,json,os.path,requests
import subprocess, json, os.path, requests
from bs4 import BeautifulSoup as bs
tdp = {}
tdp["name"] = "tilde.team"
tdp["url"] = "https://tilde.team"
tdp["signup_url"] = tdp["url"]+"/signup"
users = subprocess.check_output(["/usr/bin/members","team"]).decode('ascii').split()
tdp["signup_url"] = tdp["url"] + "/signup/"
users = subprocess.check_output(["/usr/bin/members", "team"]).decode("ascii").split()
users.sort()
tdp["user_count"] = len(users)-1
tdp["user_count"] = len(users)
tdp["want_users"] = True
tdp["admin_email"] = "sudoers@tilde.team"
tdp["description"] = "a digital community for socializing, learning, and making cool stuff, tilde.team is a shared system that provides a radically inclusive, non-commercial space for teaching, learning, practicing and enjoying the social medium of unix."
tdpusers = []
for user in users:
if user=="asm":
continue
tdpuser = dict(username=user)
title = bs(requests.get("https://tilde.team/~{}".format(user)).text,"lxml").title
if title is None:
title = "No title"
else:
title = title.text
tdpuser["title"] = title
if os.path.exists(os.path.expanduser("~{}/public_html/index.html".format(user))):
tdpuser["mtime"] = os.path.getmtime(os.path.expanduser("~{}/public_html/index.html".format(user)))
elif os.path.exists(os.path.expanduser("~{}/public_html/index.htm".format(user))):
tdpuser["mtime"] = os.path.getmtime(os.path.expanduser("~{}/public_html/index.htm".format(user)))
elif os.path.exists(os.path.expanduser("~{}/public_html/index.php".format(user))):
tdpuser["mtime"] = os.path.getmtime(os.path.expanduser("~{}/public_html/index.php".format(user)))
tdpusers.append(tdpuser)
tdpuser = dict(username=user)
try:
title = bs(
requests.get(f"https://tilde.team/~{user}/", allow_redirects=False).text,
"lxml",
).title.text
except:
title = "No title"
tdpuser["title"] = title
if os.path.exists(f"/home/{user}/public_html/index.html"):
tdpuser["mtime"] = os.path.getmtime(f"/home/{user}/public_html/index.html")
elif os.path.exists(f"/home/{user}/public_html/index.cgi"):
tdpuser["mtime"] = os.path.getmtime(f"/home/{user}/public_html/index.cgi")
elif os.path.exists(f"/home/{user}/public_html/index.php"):
tdpuser["mtime"] = os.path.getmtime(f"/home/{user}/public_html/index.php")
tdpusers.append(tdpuser)
tdp["users"] = tdpusers
with open("tilde.json","w") as f:
json.dump(tdp,f)
with open("tilde.json", "w") as f:
json.dump(tdp, f)

View File

@ -1,3 +0,0 @@
<?php
header("Location: /wiki/view.php?page=getting-started");
die();

View File

@ -16,7 +16,7 @@
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="stylesheet" href="/css/hacker.css">
<link rel="stylesheet" href="/css/fork-awesome.css">
<link rel="stylesheet" href="/css/fork-awesome.min.css">
<?=$additional_head ?? ""?>
<?php unset($title); unset($additional_head); ?>

241
index.php
View File

@ -1,12 +1,13 @@
<?php
$filepath = __FILE__;
include 'header.php';
require __DIR__.'/vendor/autoload.php';
$parser = Tildeverse\Wiki\Parser::factory();
?>
<div class="jumbotron">
<h1>~team</h1>
<pre>
<div class="jumbotron">
<h1>~team</h1>
<pre>
__ _ __ __ __
/ /_(_) /___/ /__ / /____ ____ _____ ___
/ __/ / / __ / _ \ / __/ _ \/ __ `/ __ `__ \
@ -14,130 +15,148 @@ $parser = Tildeverse\Wiki\Parser::factory();
\__/_/_/\__,_/\___(_)__/\___/\__,_/_/ /_/ /_/
</pre>
<br>
<br>
<p>a digital community for socializing, learning, and making cool stuff</p>
</div>
<p>a digital community for socializing, learning, and making cool stuff</p>
</div>
<p>
tilde.team is a shared system that provides an inclusive,
non-commercial space for teaching, learning, practicing and
enjoying the social medium of unix.
</p>
<p>
i created this tilde after hearing about paul ford's
<a href="http://tilde.club/">tilde.club</a>. when i was unable
to join due to the waitlist, i decided to create my own tilde.
</p>
<p>
tilde.team is a shared system that provides an inclusive,
non-commercial space for teaching, learning, practicing and
enjoying the social medium of unix.
</p>
<p>
i created this tilde after hearing about paul ford's
<a href="http://tilde.club/">tilde.club</a>. when i was unable
to join due to the waitlist, i decided to create my own tilde.
</p>
<p>thanks for stopping by!</p>
<p>thanks for stopping by!</p>
<p>
tilde.team is a founding member of <a href="https://tildeverse.org">tildeverse.org</a>,
which is a collaborative effort among several <a href="https://tildeverse.org/members/">
other tilde servers</a>.
</p>
<p>
hosting and domains are paid out-of-pocket. tilde.team will always
be free to use. however, if you are able and willing to pitch in,
you can <a href="https://bhh.sh/donate/">donate here</a>.
</p>
<p>
tilde.team is a founding member of <a href="https://tildeverse.org">tildeverse.org</a>,
which is a collaborative effort among several <a href="https://tildeverse.org/members/">
other tilde servers</a>.
</p>
<p>
hosting and domains are paid out-of-pocket. tilde.team will always
be free to use. however, if you are able and willing to pitch in,
you can <a href="https://bhh.sh/donate/">donate here</a>.
</p>
<p><a href="/~ben/">~ben</a></p>
<p><a href="/~ben/">~ben</a></p>
<br>
<br>
<a href="/signup/" class="btn btn-primary btn-lg">
<i class="fa fa-user-plus"></i> signup</a>
<a href="/signup/" class="btn btn-primary btn-lg">
<i class="fa fa-user-plus"></i> signup</a>
<br>
<br>
<hr>
<br>
<br>
<hr>
<h3>other tilde.team stuff</h3>
<h3>tilde.team services</h3>
<?php include 'services.php'; ?>
<?php include 'services.php'; ?>
<br>
<hr>
<br>
<hr>
<div class="row">
<div class="col-md-7">
<h1>~news~</h1>
<?php foreach (array_slice(array_reverse(glob("news/pages/*.md")), 0, 4) as $page):
$parsed = $parser->parse(file_get_contents($page));
$yaml = $parsed->getYAML();
if (!$yaml["published"]) continue; ?>
<div class="row">
<div class="col-md-7">
<h1>~news~</h1>
<div class="list-group">
<div class="list-group-item">
<h3 class="list-group-item-heading"><?=$yaml["title"]?></h3>
<em>
<a href="/news/?page=<?=basename($page, ".md")?>">
<?=$yaml["date"]?></a> - <a href="/~<?=$yaml["author"]?>/"><?=$yaml["author"]?></a>
</em>
<hr>
<p class="list-group-item-text"><?=$parsed->getContent()?></p>
</div>
</div>
<?php foreach (array_slice(array_reverse(glob("news/pages/*.md")), 0, 4) as $page):
$parsed = $parser->parse(file_get_contents($page));
$yaml = $parsed->getYAML();
if (!$yaml["published"]) continue; ?>
<?php endforeach; ?>
<div class="list-group">
<div class="list-group-item">
<p class="list-group-item-text"><a href="/news/">news archive here...</a></p>
</div>
</div>
<h1>~current projects~</h1>
<h4>on our <a href="https://tildegit.org/team">gitea</a></h4>
<hr>
<div class="list-group">
<?php foreach (json_decode(file_get_contents("https://tildegit.org/api/v1/orgs/team/repos")) ?? [] as $repo): ?>
<div class="list-group-item">
<h3 style="display:inline;" class="list-group-item-heading">
<a href="<?=$repo->html_url?>"><?=$repo->name?></a>
</h3>
<?php if ($repo->website != ""): ?>
&mdash;
<p style="display:inline;"><em><a href="<?=$repo->website?>"><?=$repo->website?></a></em></p>
<?php endif; ?>
<br>
<p class="list-group-item-text"><?=$repo->description?></p>
</div>
<?php endforeach; ?>
</div>
<h1>our <a href="https://tilde.zone/@tildeteam">mastodon</a> feed</h1>
<iframe allowfullscreen sandbox="allow-top-navigation allow-scripts" width="100%" height="800" src="https://www.mastofeed.com/api/feed?url=https%3A%2F%2Ftilde.zone%2Fusers%2Ftildeteam.atom&theme=dark&size=100&header=true&replies=true&boosts=true"></iframe>
</div>
<div class="col-md-5">
<h1>~users~</h1>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em></p>
<p>if you're not listed here, make some changes to your page</p>
<p><a href="/users/">all users</a></p>
<br><br>
<div class="list-group">
<ul>
<?php
foreach (glob("/home/*") as $user):
if (!is_dir("$user/public_html")
|| (file_exists("$user/public_html/index.php")
&& in_array(sha1_file("$user/public_html/index.php"),
// these are the sha1s of two previous default pages
["ca32714c33abb57430583ad07efec6097ae1a044", "f190ba3a1ed796a20bea83304e45e799420c0716"])))
continue;
$user = basename($user); ?>
<li style="list-style: none; margin-left: -40px;">
<a href="/~<?=$user?>/" class="list-group-item">
<h6 class="list-group-item-heading">~<?=$user?></h5>
</a>
</li>
<?php endforeach; ?>
</ul>
<div class="list-group">
<div class="list-group-item">
<h3 class="list-group-item-heading"><?=$yaml["title"]?></h3>
<em><a href="/news/<?=basename($page, ".md")?>"><?=$yaml["date"]?></a></em>
&bull;
<em><a href="/~<?=$yaml["author"]?>/"><?=$yaml["author"]?></a></em>
<hr>
<div class="list-group-item-text"><?=$parsed->getContent()?></div>
</div>
</div>
<?php endforeach; ?>
<div class="list-group">
<div class="list-group-item">
<p class="list-group-item-text"><a href="/news/">news archive...</a></p>
</div>
</div>
<h1>~current projects~</h1>
<h4>on our <a href="https://tildegit.org/team">gitea</a></h4>
<hr>
<div class="list-group">
<?php foreach (json_decode(file_get_contents("https://tildegit.org/api/v1/orgs/team/repos")) ?? [] as $repo):
if ($repo->archived) continue; ?>
<div class="list-group-item">
<h3 style="display:inline;" class="list-group-item-heading">
<a href="<?=$repo->html_url?>"><?=$repo->name?></a>
</h3>
<?php if ($repo->website != ""): ?>
&mdash;
<p style="display:inline;"><em><a href="<?=$repo->website?>"><?=$repo->website?></a></em></p>
<?php endif; ?>
<br>
<p class="list-group-item-text"><?=$repo->description?></p>
</div>
<?php endforeach; ?>
</div>
</div>
<div class="col-md-5">
<h1>~users~</h1>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em></p>
<p>if you're not listed here, make some changes to your page</p>
<p><a href="/users/">all users</a></p>
<div class="list-group">
<ul>
<?php
$usercount = 0;
foreach (glob("/home/*/public_html", GLOB_ONLYDIR) as $user):
if (
(
// make sure we have an index page
!is_file("$user/index.html")
&& !is_file("$user/index.htm")
&& !is_file("$user/index.cgi")
&& !is_file("$user/index.php")
)
|| (
// if it's php, compare the hash to the default page
is_file("$user/index.php")
&& in_array(
sha1_file("$user/index.php"),
[
// these are the sha1s of two previous pages
"ca32714c33abb57430583ad07efec6097ae1a044",
"f190ba3a1ed796a20bea83304e45e799420c0716"
]
)
)
) continue;
$user = basename(dirname($user));
$usercount++; ?>
<li style="list-style: none; margin-left: -40px;">
<a href="/~<?=$user?>/" class="list-group-item">
<h6 class="list-group-item-heading">~<?=$user?></h6>
</a>
</li>
<?php endforeach; ?>
</ul>
<p>users who have updated their homepages: <?=$usercount?></p>
</div>
</div>
</div>
<?php include 'footer.php'; ?>

7
js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

4
js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,5 @@
<?php
$filepath = __FILE__;
require __DIR__.'/../vendor/autoload.php';
$additional_head = "
@ -44,7 +45,7 @@ if (!isset($_GET["page"]) || !file_exists("pages/{$_GET['page']}.md")) {
foreach (array_reverse(glob("pages/*.md")) as $page) {
$yaml = $parser->parse(file_get_contents($page))->getYAML();
if (!$yaml["published"]) continue; ?>
<a href="?page=<?=basename($page, ".md")?>"><?=$yaml["title"]?></a> - <?=$yaml["date"]?><br>
<a href="<?=basename($page, ".md")?>"><?=$yaml["title"]?></a> - <?=$yaml["date"]?><br>
<?php }
} else {

17
news/pages/028_back_up.md Normal file
View File

@ -0,0 +1,17 @@
---
published: true
date: jan 6 2020
title: back up after downtime
author: ben
---
we moved once more to a new physical host. the process was simple,
but the backup/archive took much longer than i expected.
everything should be back up and running, please feel free to ping
on irc if something is still amiss.
the new primary ip is now 167.114.7.65
happy new year 2020!

View File

@ -0,0 +1,13 @@
---
published: true
date: may 30 2020
title: "HAPPY BIRTHDAY TILDE TEAM!"
author: ben
---
tilde.team turns 3 today, may 30th! it's been an amazing time learning and growing
with this project.
thanks for being a part of it!
see ya around ~teammates :)

View File

@ -0,0 +1,40 @@
---
published: true
date: august 4 2020
title: "ubuntu 20.04 upgrades"
author: ben
---
i've been preparing a large upgrade for tilde.team to ubuntu 20.04 focal fossa.
the new vm has a fresh install and will help to address some of the long-standing
issues that i've been wanting to fix for quite some time now
---
- dedicated /home disk - we haven't had any actual issues here luckily
but it will prevent any issues where a user accidentally fills a disk
and chokes out the rest of the system
- fixing uids - at some point, the spamassassin package created a system
user account with a uid > 1000 which threw off the user numbering into
the 5000 range. i've renumbered user accounts on the new vm to remove
that large jump
- dedicated service accounts - each service now has its own account in `/srv`
which is importantly outside of `/home` and is not a single user running multiple
services as it was configured previously
the ip address is the same and everything should be as you left it. please let me
know on irc or shoot an email if something is amiss.
i have an ongoing list [here](/~ben/todo.txt) that i will update as i get things
back up and running.
another important note: python is now 3.8 by default and you will need to
explicitly call python2. all local site- and dist-packages have been removed
since they were targeting 3.6. you will need to recreate any virtual envs
that you may have.
cheers,
~ben

97
ring/index.php Normal file
View File

@ -0,0 +1,97 @@
<?php
$filepath = __FILE__;
$action = $_GET["action"] ?? "index";
$users = array_map(function ($f) { return basename(dirname($f)); }, glob("/home/*/.ring"));
if ($action !== "index") {
// handle webring redirects
$me = $_GET["me"] ?? "";
if (!in_array($me, $users) && $action != "random") {
header("Location: https://tilde.team/ring/?error");
die();
}
$i = array_search($me, $users);
switch ($action) {
case "random":
$notme = array_diff($users, [$me]);
$user = $notme[array_rand($notme)];
break;
case "next":
$user = $users[$i + 1] ?? reset($users);
break;
case "prev":
$user = $users[$i - 1] ?? end($users);
break;
default:
die("invalid action");
}
// use custom link from second line of ~/.ring
if (filesize("/home/$user/.ring") > 0) {
$ringfile = file("/home/$user/.ring", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (count($ringfile) > 1 && $ringfile[1] !== "")
$dest = trim($ringfile[1]);
}
$location = $dest ?? "/~$user/";
header("Location: $location");
die();
}
else {
// keep this as a string so we can escape it easily with htmlspecialchars()
$snippet = '<!-- tilde.team ring fragment-->
<div id="newring">
<center>
[<a href="https://tilde.team/ring/?action=prev&me=USERNAME">previous</a>]
[<a href="https://tilde.team/ring/?action=random&me=USERNAME">random</a>]
[<a href="https://tilde.team/ring/?action=next&me=USERNAME">next</a>]
<br>
<a href="https://tilde.team/ring/">how to join this webring</a>
</center>
</div>';
$title = "webring - how to join";
include __DIR__ . '/../header.php';
?>
<h1>how to join the webring</h1>
<?php if (isset($_GET["error"])): ?>
<div class="alert alert-danger" role="alert"><strong>ERROR</strong> please be sure that me=USERNAME is set to your user and have created a <code>~/.ring</code> file.</div>
<?php endif; ?>
<p>this webring can be joined by any user on tilde.team.</p>
<p>first, add the following links to your page, replacing USERNAME by your username (no ~):</p>
<pre><?=htmlspecialchars($snippet)?></pre>
<p>you may edit the code however you want. it should work as long as the URLs are kept in place and have your user in them.</p>
<p>then create a .ring file in your ~ to be added in the webring:</p>
<pre>$ touch ~/.ring</pre>
<p>the first line of ~/.ring will be displayed here as a tagline.</p>
<p>the second line of the file is used as a custom link if your webring tags are not on your homepage.</p>
<h3 id="explore">explore webring</h3>
<p><a href="?action=random">jump to random page</a></p>
<p><?=count($users)?> members in the webring:</p>
<ul>
<?php foreach ($users as $user):
if (filesize("/home/$user/.ring") > 0) {
$ringfile = file("/home/$user/.ring", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$tagline = htmlspecialchars($ringfile[0]);
if (count($ringfile) > 1 && $ringfile[1] !== "")
$link = htmlspecialchars($ringfile[1]);
}
else {
unset($tagline);
unset($link);
} ?>
<li><a href="<?=$link ?? "/~$user/"?>">~<?=$user?></a><?=(isset($tagline) ? " &mdash; $tagline" : "")?></li>
<?php endforeach; ?>
</ul>
<p>it will probably work if you copy it to your own <code>~/public_html</code> and adjust the links accordingly.</p>
<?php
include __DIR__ . '/../footer.php';
}

View File

@ -1,2 +0,0 @@
User-agent: *
Disallow: /

View File

@ -1,23 +1,24 @@
<?php
$services = [
'gitea' => ['fa' => 'code-fork', 'url' => 'https://tildegit.org/team/'],
'forum' => ['fa' => 'comment', 'url' => 'https://bbj.tilde.team'],
'mastodon' => ['fa' => 'retweet', 'url' => 'https://tilde.zone'],
'chat' => ['fa' => 'comments-o', 'url' => '/wiki/?page=irc'],
'nextcloud' => ['fa' => 'cloud', 'url' => 'https://cloud.tilde.team/'],
'webmail' => ['fa' => 'envelope', 'url' => 'https://mail.tilde.team/'],
'chat' => ['fa' => 'comments-o', 'url' => '/wiki/irc'],
'cryptpad' => ['fa' => 'sticky-note', 'url' => 'https://pad.tildeverse.org'],
'pastebin' => ['fa' => 'paste', 'url' => 'https://paste.tildeverse.org/'],
'termbin' => ['fa' => 'terminal', 'url' => 'https://bin.tilde.team/'],
'nullpointer' => ['fa' => 'file-code-o', 'url' => 'https://ttm.sh'],
'forum' => ['fa' => 'comment', 'url' => 'https://bbj.tildeverse.org'],
'gitea' => ['fa' => 'code-fork', 'url' => 'https://tildegit.org/team'],
'gopher' => ['fa' => 'floppy-o', 'url' => 'https://gopher.tildeverse.org/tilde.team'],
'mastodon' => ['fa' => 'retweet', 'url' => 'https://tilde.zone'],
'nextcloud' => ['fa' => 'cloud', 'url' => 'https://cloud.tilde.team/'],
'nullpointer' => ['fa' => 'file-code-o', 'url' => 'https://ttm.sh'],
'pastebin' => ['fa' => 'paste', 'url' => 'https://paste.tildeverse.org/'],
'webmail' => ['fa' => 'envelope', 'url' => 'https://mail.tilde.team/'],
'webring' => ['fa' => 'life-ring', 'url' => '/ring/'],
];
$nav = isset($navbar);
$nav = isset($navbar) && $navbar;
unset($navbar);
foreach ($services as $name => $service) { ?>
<?php if ($nav) echo '<li>'; ?>
<a href="<?=$service['url']?>" <?php if (!$nav) echo 'class="btn btn-default"'; ?>><i class="fa fa-<?=$service['fa']?>"></i> ~<?=$name?>~</a>
<?php if ($nav) echo '</li>'; ?>
<a href="<?=$service['url']?>" <?php if (!$nav) echo 'class="btn btn-default"'; ?>><i class="fa fa-<?=$service['fa']?>"></i> <?=$name?></a>
<?php if ($nav) echo '</li>' . PHP_EOL; ?>
<?php }

View File

@ -1,53 +1,55 @@
<?php
include __DIR__.'/../header.php';
?>
<div class="container" id="app">
<h1>
tilde.team signup
<div class="pull-right">
<small><a href="/">&lt; back</a></small>
</div>
</h1>
<h3>so you wanna join the tilde.team?</h3>
<p>hi there. fill out this form and i'll get back to you with your account info.</p>
<hr>
<form method="post">
<?php include 'signup-handler.php'; ?>
<div class="form-group">
<label>your desired username (numbers and lowercase letters only, no spaces)</label>
<input class="form-control" name="username" value="<?=$_REQUEST["username"] ?? ""?>" type="text" required>
</div>
<div class="form-group">
<label>email to contact you with account info</label>
<input class="form-control" name="email" value="<?=$_REQUEST["email"] ?? ""?>" type="text" required>
</div>
<div class="form-group">
<label>what interests you about tilde.team?</label>
<textarea class="form-control" name="interest" id="" cols="30" rows="10"><?=$_REQUEST["interest"] ?? ""?></textarea>
</div>
<div class="form-group">
<label>SSH public key</label>
<textarea required class="form-control" name="sshkey" id="" cols="30" rows="10"><?=$_REQUEST["sshkey"] ?? ""?></textarea>
<p>if you don't have a key, don't worry! <a href="/wiki/?page=ssh">check out our guide to ssh keys</a> and make sure that you only put your pubkey here</p>
</div>
<p>
<em>signing up implies agreement with our <a href="/wiki/?page=code-of-conduct">code of conduct</a>. please give it a read.</em>
</p>
<button class="btn btn-primary" type="submit">submit</button>
</form>
<br>
</div>
<?php include __DIR__.'/../footer.php';
<?php
$filepath = __FILE__;
include __DIR__.'/../header.php';
?>
<div class="container" id="app">
<h1>
tilde.team signup
<div class="pull-right">
<small><a href="/">&lt; back</a></small>
</div>
</h1>
<h3>so you wanna join the tilde.team?</h3>
<p>hi there. fill out this form and we'll get back to you with your account info.</p>
<hr>
<form method="post">
<?php include 'signup-handler.php'; ?>
<div class="form-group">
<label>your desired username (numbers and lowercase letters only, no spaces)</label>
<input class="form-control" name="username" value="<?=$_REQUEST["username"] ?? ""?>" type="text" required>
</div>
<div class="form-group">
<label>email to contact you with account info</label>
<input class="form-control" name="email" value="<?=$_REQUEST["email"] ?? ""?>" type="text" required>
</div>
<div class="form-group">
<label>what interests you about tilde.team?</label>
<textarea class="form-control" name="interest" id="" cols="30" rows="10"><?=$_REQUEST["interest"] ?? ""?></textarea>
</div>
<div class="form-group">
<label>SSH public key</label>
<textarea required class="form-control" name="sshkey" id="" cols="30" rows="10"><?=$_REQUEST["sshkey"] ?? ""?></textarea>
<p>if you don't have a key, don't worry! <a href="/wiki/ssh">check out our guide to ssh keys</a> and make sure that you only put your pubkey here</p>
</div>
<p>
<em>signing up implies agreement with our <a href="/wiki/code-of-conduct">code of conduct</a> and <a href="/wiki/tos">terms of service</a>. please give them a read.</em>
</p>
<p>you must be at least 13 years or older to sign up and use tilde.team.</p>
<button class="btn btn-primary" type="submit">submit</button>
</form>
<br>
</div>
<?php include __DIR__.'/../footer.php';

View File

@ -1,9 +1,29 @@
<?php
$filepath = __FILE__;
require __DIR__.'/../vendor/autoload.php';
require_once "email/smtp.php";
function getUserIpAddr() {
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
//ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
//ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function add_ban_info($name, $email) {
$user_ip = getUserIpAddr();
$user_info = "$name - $email - $user_ip";
file_put_contents("/var/signups_banned", $user_info.PHP_EOL, FILE_APPEND);
}
function forbidden_name($name) {
return in_array($name, [
$badnames = [
'0x0',
'abuse',
'admin',
@ -56,32 +76,55 @@ function forbidden_name($name) {
'wpad',
'www',
'znc',
]);
];
return in_array(
$name,
array_merge(
$badnames,
file("/var/signups_current", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),
file("/var/banned_names.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
)
);
}
function forbidden_email($email) {
$femail = file("/var/banned_emails.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
return in_array($email, $femail);
}
function forbidden_sshkey($sshkey) {
$fsshkey = file("/var/banned_sshkeys.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($fsshkey as $line_num => $line) {
$fsk_line = explode(' ',trim($line));
$fsk[] = $fsk_line[1];
}
$sk = explode(' ',trim($sshkey));
return in_array($sk[1], $fsk);
}
$message = "";
if (isset($_REQUEST["username"]) && isset($_REQUEST["email"])) {
// Check the name.
$name = trim($_REQUEST["username"]);
if ($name == "")
$message .= "<li>please fill in your desired username</li>";
$message .= "<li>fill in your desired username</li>\n";
else {
if ($name != "" && strlen($name) < 2)
$message .= "<li>username is too short (2 character min)</li>\n";
if (strlen($name) > 32)
$message .= "<li>username too long (32 character max)</li>";
if (strlen($name) > 32)
$message .= "<li>username too long (32 character max)</li>\n";
if (!preg_match('/^[a-z][a-z0-9]{2,31}$/', $name))
$message .= "<li>username contains invalid characters (lowercase only, must start with a letter)</li>";
if (strlen($name) > 1 && !preg_match('/^[a-z][a-z0-9]{1,31}$/', $name))
$message .= "<li>username contains invalid characters (lowercase only, must start with a letter).</li>\n";
if ($_REQUEST["sshkey"] == "" || mb_substr($_REQUEST["sshkey"], 0, 4) !== "ssh-")
$message .= '<li>ssh key required: please create one and submit the public key. '
. 'see our <a href="https://tilde.team/wiki/?page=ssh">ssh wiki</a> or '
. 'hop on <a href="https://web.tilde.chat/?join=team">irc</a> and ask for help</li>';
if ($_REQUEST["interest"] == "")
$message .= "<li>please explain why you're interested so we can make sure you're a real human being</li>";
if (posix_getpwnam($name) || forbidden_name($name))
$message .= "<li>sorry, the username $name is unavailable</li>";
if (posix_getpwnam($name) || forbidden_name($name))
$message .= "<li>sorry, the username $name is unavailable</li>\n";
}
// Check the e-mail address.
$email = trim($_REQUEST["email"]);
@ -93,23 +136,50 @@ if (isset($_REQUEST["username"]) && isset($_REQUEST["email"])) {
$message .= "<li>invalid email address: " . htmlspecialchars($result["error"]) . "</li>";
elseif ($result["email"] != $email)
$message .= "<li>invalid email address. did you mean: " . htmlspecialchars($result["email"]) . "</li>";
elseif ($name != "" && forbidden_email($email)) {
$message .= "<li>your email is banned!</li><br />";
add_ban_info($name, $email);
}
}
if ($_REQUEST["interest"] == "")
$message .= "<li>please explain why you're interested so we can make sure you're a real human being</li>";
$sshkey = trim($_REQUEST["sshkey"]);
if ($sshkey == "" || mb_substr($sshkey, 0, 4) !== "ssh-")
$message .= '<li>ssh key required: please create one and submit the public key. '
. 'see our <a href="https://tilde.team/wiki/?page=ssh">ssh wiki</a> or '
. 'hop on <a href="https://web.tilde.chat/?join=team">irc</a> and ask for help</li>';
else {
if ($name != "" && $email != "") {
if (forbidden_sshkey($sshkey)) {
$message .= "<li>your sshkey is banned!</li>\n";
add_ban_info($name, $email);
}
}
}
// no validation errors
if ($message == "") {
if ($message == "") {
$makeuser = "makeuser {$_REQUEST["username"]} {$_REQUEST["email"]} \"{$sshkey}\"";
$msgbody = "
username: {$_REQUEST["username"]}
email: {$_REQUEST["email"]}
reason: {$_REQUEST["interest"]}
makeuser {$_REQUEST["username"]} {$_REQUEST["email"]} \"{$_REQUEST["sshkey"]}\"
$makeuser
";
if (mail('sudoers', 'new tilde.team signup', $msgbody)) {
echo '<div class="alert alert-success" role="alert">
email sent! we\'ll get back to you soon (usually within a day) with login instructions! <a href="/">back to tilde.team home</a>
</div>';
// temp. add to forbidden to prevent double signups (cleanup after user creation)
file_put_contents("/var/signups_current", $name.PHP_EOL, FILE_APPEND);
file_put_contents("/var/signups", $makeuser.PHP_EOL, FILE_APPEND);
} else {
echo '<div class="alert alert-danger" role="alert">
something went wrong... please send an email to <a href="mailto:sudoers@tilde.team">sudoers@tilde.team</a> with details of what happened
@ -119,7 +189,7 @@ makeuser {$_REQUEST["username"]} {$_REQUEST["email"]} \"{$_REQUEST["sshkey"]}\"
} else {
?>
<div class="alert alert-warning" role="alert">
<strong>please correct the following errors: </strong>
<strong>notice: </strong>
<?=$message?>
</div>
<?php

View File

@ -1,4 +1,5 @@
<?php
$filepath = __FILE__;
include __DIR__.'/../header.php';
$online_users = shell_exec("online-users");
@ -6,14 +7,20 @@ $total_users = shell_exec("members team | wc -w");
?>
<div class="row">
<?=$online_users?> users online of <?=$total_users?> total users
<h1>users</h1>
</div>
<div class="row">
<?=$online_users?> of <?=$total_users?> total users
</div>
<div class="row">
<img src="https://tilde.chat/badges/badge.php?channel=%23team" alt="users online in #team">
</div>
<div class="row">
<div class="col-md-5">
<h1>~all users~</h1>
<p><em><a href="/tilde.24h.html"><i class="fa fa-clock-o"></i> recent updates</a></em></p>
<br><br>
<div class="list-group">

View File

@ -38,6 +38,19 @@ git push origin my-new-page # this should match the branch name you created earl
* create a pull request on the [site](https://tildegit.org/team/site) repo
## deployment notes
as of a7305c7b the wiki uses pretty urls (while still supporting the old style
of `?page=` urls). to enable this functionality, add the following location
block to your nginx configs for this site:
```
location ~* ^/wiki/(.+)$ {
try_files $uri $uri/ /wiki/index.php?page=$1;
include snippets/php.conf;
}
```
thanks!~
ps. if you have any questions, ask on irc! (preferably in #team)

View File

@ -1,4 +1,5 @@
<?php
$filepath = __FILE__;
require __DIR__.'/../vendor/autoload.php';
$additional_head = "

View File

@ -0,0 +1,43 @@
---
author: ~ben
published: true
title: account recovery
description: how to get back in to your account
category:
- main
---
# account recovery
if you ever lose access to your tilde.team account, there are a couple ways
to get back in.
## ssh key
if you are still connected, you can add more ssh keys, one pubkey per line,
to the `~/.ssh/authorized_keys` file.
if you still know your password, please send a mail to sudoers@tilde.team
with your new pubkey from your tilde.team address with either the [webmail](
https://mail.tilde.team) client or via [smtp/imap](
email#clients-and-connection-settings).
if you've also lost your password, please send a mail to sudoers@tilde.team
with your new pubkey from the email address you signed up with. this is the
only thing besides sending the welcome email that we use your email address for.
# password
if you've forgotten your password, it's a similar process to ssh keys.
if you still have access to your shell, send a mail using `mutt` to sudoers@tilde.team
to request a password reset.
feel free to connect to irc from tilde.team (we can verify it's you if you connect
from the shell on tilde.team) and request the same thing in the #team channel.
ping one of the admins in the channel: [admin list](code-of-conduct#9--contact-info).
if you have neither password nor ssh key, please send a mail to sudoers@tilde.team
from the email address you signed up with with your username and we can reset
you to a temporary password

View File

@ -11,103 +11,70 @@ category:
1. [adding users](#adding-users)
2. [backups](#backups)
3. [bypassing resource limits as services user](#bypassing-resource-limits)
4. [lxd](#lxd)
4. [runaway processes/excessive resource usage](#runaway-processes)
## adding users
> this is deprecated. use the new [makeuser](https://tildegit.org/team/makeuser/src/branch/bash-edition) script
> see the [makeuser](https://tildegit.org/team/makeuser) script's documentation
1. generate a random password
```
pwgen -1B 15
```
the signup page ([source](
https://tildegit.org/team/site/src/branch/master/signup/signup-handler.php))
writes `makeuser` commands into `/var/signups`.
1. create a new user account:
```
sudo adduser newusername
```
once you've looked through signups and removed spam (by just commenting that
line in the signups file), you can run
1. add their ssh pubkey:
sh /var/signups
```
echo "ssh pubkey from their signup email" | sudo tee /home/newusername/.ssh/authorized_keys
```
and enter your sudo password to approve all pending requests
1. drop the requested username and generated password in the placeholder below. reply all so that other admins will know that it's been handled.
## services
welcome mail template:
hey ~newusername,
welcome to tilde.team!
your new account has been established. you can ssh into tilde.team with
the ssh key you supplied on registration.
your password is "[[password]]". please change it when you log in for
the first time. the password is used for imap/smtp auth, not shell login,
which is set to only use ssh key authentication.
to get started, type `motd` at the command prompt to see a few ways to
get started. have fun!
the greatest value of tilde.team is not the services provided by the
server, but rather the interesting and welcoming community built by its
users. this is possible because of people like you who choose to make
this a great place. the best way you can help tilde.team is by working
to support a great system culture. chat on irc; build cool programs and
share them with others; focus on learning, and help others learn; be a
good example for others; have fun!
also, your ~/public_html directory is served at
https://tilde.team/~newusername/
(you can also use https://newusername.tilde.team)
check out our wiki at https://tilde.team/wiki/ for more information (and
maybe help us write a new wiki article:)
our irc is tilde.chat, an irc network connecting several
tilde servers. the `chat` command on your ~team shell will open up
weechat with some nice default configs and plugins.
see our wiki article (https://tilde.team/wiki/?page=irc)
or https://tilde.chat site for information on how to connect from elsewhere.
we also have a webclient at https://irc.tilde.team that you can
register for by running the `webirc` command from a shell session.
we look forward to seeing you around! welcome to the ~team!
~tilde.team admins
for hosted services that formerly lived in `/home/services`, see `/opt`.
other projects that are installed with a `make install` type of install
can now be found in `/usr/local/src`.
as needed, feel free to git pull and make install. for hosted services
like tilde.news and pad.tildeverse.org, be sure to check release notes,
fetch from upstream, and rebase any commit sets we keep on top.
## backups
tilde.team uses [tarsnap](https://tarsnap.com) for backups and is configured to save 12 hourly backups, 7 daily backups, 6 weekly backups, and 2 years' worth of monthly backups.
tilde.team uses [borg](https://borgbackup.readthedocs.io/en/stable/) (via
[borgmatic](https://torsion.org/borgmatic)) for backups and is configured
to save 7 daily backups, 4 weekly backups, 6 monthly, and 1 yearly backup.
backups run once daily during the night.
to see a list of the backups:
```
sudo tarsnap --list-archives
```
sudo borgmatic list
to see general backup stats:
sudo borgmatic info
to restore a backup:
```
tarsnap -x -f name-of-backup
```
sudo borgmatic extract --archive <archive name> --progress --path /path/to/restore
we keep backups of:
* `/home`
* `/etc`
* `/var` (excluding `/var/log` and `/var/lib/lxd`)
* mysql and postgres databases (dumped before each backup run)
* [nextcloud](https://cloud.tilde.team/) data
* [tildegit](https://tildegit.org) database and repos
* `/var/spool/cron` - your crontabs
* `/tilde` - user-submitted scripts
* [mailman3](https://lists.tildeverse.org) list and archive data
see the [tarsnap documentation](https://www.tarsnap.com/usage.html) for more information.
## bypassing resource limits
(by [~khuxkm](https://khuxkm.tilde.team/))
So occasionally, when you're working with the services user, you'll run into "error: fork: retry: Resource temporarily unavailable" errors.
So occasionally, when you're working with the services user, you'll run into
"error: fork: retry: Resource temporarily unavailable" errors.
Here's how to fix it:
@ -120,74 +87,17 @@ Here's how to fix it:
07:12 <~khuxkm> then exit the bash session
## lxd
## runaway processes
> we're not provisioning lxd containers for users at this time
if a user consistently uses a lot of resources, send them a note via email
to request that they mind their usage levels. if they fail to respond within
a day or two, feel free to kill the process by pid or with `killall`. if they
resume using excessive resources and haven't responded to communications, then
feel free to lock them out by changing their shell to `/usr/sbin/nologin`.
this is the process that i use to create lxd containers for users.
sudo chsh -s /usr/sbin/nologin <username>
you need two things from the user: an ssh public key (on their ~team shell) and a [distro choice](https://us.images.linuxcontainers.org/)
don't forget to kill their existing session with:
sudo loginctl terminate-user <username>
1. create the container
```
# debian
lxc launch images:debian/stretch <username>
# ubuntu
lxc launch ubuntu: <username>
```
1. make sure the container has an sshd running
```
lxc exec <username> bash
# might have to adjust this if the image is not a debian-derivative
root@<username> $ apt install openssh-server
```
1. copy the user's ssh pubkey to root on the container
```
lxc exec <username> bash
mkdir -m 700 .ssh
echo "pubkey" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```
> now the user can run `ssh root@<username>.lxd` to get a shell inside their container
> the .lxd dns resolver is provided by the lxd daemon itself through dnsmasq
### make the container public
> check with the user and find out what they want the container to be available as (which domain)
> nginx matches concrete `server_name`s first, so you can replace the `*.tilde.team` match
1. copy user-lxd.template
```
cd /etc/nginx/sites-available
sudo cp user-lxd.template <username>.tilde.team
sudo vim <username>.tilde.team
```
1. replace the username
```
:%s/<user>/<username>/g
:wq
```
1. enable the vhost
```
cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/<username>.tilde.team .
```
1. reload nginx
```
# make sure the configs look ok
sudo nginx -t
sudo service nginx reload
```
bam! now `<username>.tilde.team` will forward requests to the container.
make sure that the user is running some kind of webserver on port 80 inside the container!
feel free to add other configs to their vhost or use any of the other [tildepage domains](?page=tildepages)

View File

@ -34,7 +34,7 @@ You can do this for any arbitrary port.
What if you don't want to edit files on the team server, but instead, you want to create it on your local machine? You don't want to have to copy/paste or re-type all of that, right?
SCP to the rescue! SCP copies files over the ssh protocol. It works just like the cp command, but alllows you to do this:
SCP to the rescue! SCP copies files over the ssh protocol. It works just like the cp command, but allows you to do this:
`scp MyNewFileILove.txt tilde.team:~/AhYesOnTheServerNow.txt`

View File

@ -13,11 +13,11 @@ tilde.team offers an alternate host: [bsd.tilde.team](https://bsd.tilde.team), w
currently it supports:
- webhosting out of `~/public_html` at `http://<user>.bsd.tilde.team` or `https://bsd.tilde.team/~<user>` (note that the ssl cert is only for bsd.tilde.team)
- webhosting out of `~/public_html` at `https://<user>.bsd.tilde.team` or `https://bsd.tilde.team/~<user>`
- email with user@bsd.tilde.team - feel free to forward this elsewhere or to your main @tilde.team address
- finger
- irc: use weechat or irssi and connect to localhost 6667 - it's a part of the [tildeverse irc net](https://tilde.chat)
the user creation script copied over the `~/.ssh/authorized_keys` file in your $HOME on ~team. feel free to adjust as needed or holler if you need an admin for something. you should be able to just ssh user@bsd.tilde.team instead of user@tilde.team
there's a [mailing list thread](https://lists.tildeverse.org/hyperkitty/list/tildeteam@lists.tildeverse.org/thread/LRLAYRTHJLFQWZAXZZW62GYQLW7S2WYC/) for discussion that i'll post updates to. feel free to holler in #team on irc as well.

View File

@ -17,7 +17,7 @@ You'll find a lot of people online arguing that GNU+Linux is _not_ a text-based
## How do I connect to a shell server?
The most common way to connect remote GNU+Linux system is with an SSH client. SSH stands for secure-shell. SSH allows you to make a private connection between your computer and a shell server like [tilde.team](https://tilde.team), and it ensures that nobody else along the wire can listen in on your connection. Check out [our SSH page](https://tilde.team/wiki/?page=ssh) for information on connecting to tilde.team over SSH.
The most common way to connect remote GNU+Linux system is with an SSH client. SSH stands for secure-shell. SSH allows you to make a private connection between your computer and a shell server like [tilde.team](https://tilde.team), and it ensures that nobody else along the wire can listen in on your connection. Check out [our SSH page](https://tilde.team/wiki/ssh) for information on connecting to tilde.team over SSH.
If you are having trouble with making your first SSH connection to tilde.team, or anything else while you're learning from this tutorial, drop by the [tilde.team web chat](https://web.tilde.chat/) or email an admin for help ([sudoers@tilde.team](mailto:sudoers@tilde.team)).
@ -57,7 +57,7 @@ Skipping some specifics for now, you can log into tilde.town from a tilde.team s
> `ssh tilde.team`
Some shell servers allow you to log in with nothing more than a username and password. But increasingly, many servers (like both tilde.team and tilde.town) require you to use ssh keys. To learn more about ssh keys, again, see our SSH page: https://tilde.team/wiki/?page=ssh
Some shell servers allow you to log in with nothing more than a username and password. But increasingly, many servers (like both tilde.team and tilde.town) require you to use ssh keys. To learn more about ssh keys, again, see our [SSH page](ssh).
### Logging Out, with `logout` or `exit`

View File

@ -23,7 +23,7 @@ we invite all those who participate in tilde.team to help us create safe and pos
## 2. tilde.team mission
[full goals/roadmap document](https://tilde.team/wiki/?page=goals-roadmap)
[full goals/roadmap document](https://tilde.team/wiki/goals-roadmap)
**tilde.team exists to foster an engaged community for socializing, learning, and making cool stuff**
@ -110,4 +110,4 @@ this code of conduct is based on [citizencodeofconduct.org](http://citizencodeof
## 11. terms of service
please also see the [terms of service](?page=tos)
please also see the [terms of service](tos)

70
wiki/pages/disk-usage.md Normal file
View File

@ -0,0 +1,70 @@
---
author: ~ben
published: true
title: disk usage tools and guidelines
description: tips and tricks for keeping track of your disk usage on tilde.team and elsewhere
category:
- main
---
# disk usage
files tend to keep growing and growing until you run out of disk space all of a sudden.
let's take a look at some tools to keep an eye on disk usage.
### du
`du` (short for `d`isk `u`sage) is the go-to tool.
common switches include:
* `-h`: human readable
* `-s`: summarize
* `-c`: total
example:
to see the disk usage of the current directory, run:
du -sh
check the manpage for more information and additional switches
### ncdu
`ncdu` (short for `nc`urses `d`isk `u`sage) is extremely useful for visualizing
disk usage.
call `ncdu` with no args to recurse starting in the current directory or
pass a dir name to start there
try it on your `$HOME` and see which files and dirs are taking up the most
space.
press `?` to see additional keybinds once you've started it up. you can change
the sort order, open a shell, and delete files without closing the program.
### df
`df` (short for `d`isk `f`ree) lists mounted disks with usage, free space,
and capacity. try it out from your shell to get a quick glance at total
disk usage
don't forget to use `-h` to get human readable units.
## tilde.team guidelines
even though we have plenty of disk space to go around on tilde.team,
we request that you try to keep your usage below 1 gb.
a good rule of thumb is to consider if _all_ teammates
were to use the same amount of resources and how that would affect
the experience for everyone else.
admins occasionally take a look at disk usage in `/home` and may
request that you delete large or unnecessary files.
please check with admins if you expect to use a lot of disk
for a short period of time so we don't bother you excessively.

View File

@ -12,26 +12,20 @@ category:
because [~ben](https://tilde.team/~ben/) hoards domain names, the following domains are associated with tilde.team and/or the tildeverse somehow:
* [fuckup.club](http://fuckup.club) - alias
* [nand.pub](http://nand.pub/) - planned [sr.ht](https://meta.sr.ht) instance; WIP
* [nand.sh](https://nand.sh/) - alias
* [nand.team](http://nand.team/) - not sure yet
* [nand.zone](http://nand.zone/) - not sure yet
* [ttm.sh](https://ttm.sh/) - url shortener
* [tild3.org](https://tild3.org/) - alias
* [tild3.club](https://tild3.club/) - alias
* [tilde.chat](https://tilde.chat/) - irc net
* [tilde.life](http://tilde.life/) - redirect
* [tilde.news](https://tilde.news/) - lobste.rs clone
* [tilde.ninja](https://tilde.ninja/) - alias
* [tilde.pizza](http://tilde.pizza/) - redirect
* [tilde.site](https://tilde.site/) - alias
* [tilde.wiki](https://tilde.wiki/) - alias of [tilde.team wiki](https://tilde.team/wiki/)
* [tilde.wtf](http://tilde.wtf/) - redirect
* [tilde.zone](https://tilde.zone/) - mastodon and related stuff
* [tildegit.org](https://tildegit.org/) - gitea
* [tilderadio.org](https://tilderadio.org/) - tildeverse radio
* [tildeteam.net](https://tildeteam.net/) - alias
* [tildeteam.org](https://tildeteam.org/) - alias
* [tildenet.org](http://tildenet.org/) - redirect to tilde.chat
* [tildeverse.net](https://tildeverse.net/) - the tildeverse!
* [tildeverse.org](https://tildeverse.org/) - the tildeverse!
aliases can be used as-is, where redirects will simply change to a tilde.team url.

View File

@ -17,40 +17,53 @@ tilde.team has a mailserver. here are your options:
- alpine - should work out of the box
- [webmail](https://mail.tilde.team)
- imap/smtp
- email address: username@tilde.team (or any of the aliased [domains](?page=domains))
- some clients will autoconfigure (tested with thunderbird)
- email address: username@tilde.team (or any of the aliased [domains](domains))
- username: username (without the domain)
- password: your shell password
- imap: imap.tilde.team port 143 (starttls)
- smtp: smtp.tilde.team port 587 (starttls)
- (any subdomain of tilde.team works for smtp and imap. just make sure you have tls selected)
- some clients will autoconfigure (tested with thunderbird)
- port info:
- imap: imap.tilde.team port 143 (starttls)
- imaps: imap.tilde.team port 993 (tls)
- pop3: pop3.tilde.team port 995 (tls)
- smtp: smtp.tilde.team port 587 (starttls)
- smtps: smtp.tilde.team port 465 (tls)
### alternate domains and addresses
because [~ben](https://tilde.team/~ben/) hoards domain names, you can use any of the [domains on this list](?page=domains) with your tildemail:
because [~ben](https://tilde.team/~ben/) hoards domain names, you can
use any of the [domains on this list](domains) with your tildemail:
mail sent to yourusername@ any of those domains will end up in your inbox. most clients will allow you to add additional identities/aliases.
mail sent to yourusername@ any of those domains will end up in your
inbox. most clients will allow you to add additional identities/aliases.
additionally, any address with a `+` and arbitrary text behind it will be forwarded to you email: ie. `your_username+somethingcool@tildeteam.org`.
feel free to use as many as you'd like :)
additionally, any address with a `+` and arbitrary text behind it
will be forwarded to your email: ie. `yourusername+somethingcool@tildeteam.org`.
plus-addresses are very useful for filtering mail.
### forwarding and sieve
if you would like your tildemail to be forwarded somewhere else, put that email address in ~/.forward
if you would like your tildemail to be forwarded somewhere else, put that
email address in a file called `~/.forward`
```bash
echo myotheraddress@example.com > ~/.forward
```
we also have [sieve](http://sieve.info) and [managesieve](https://wiki1.dovecot.org/ManageSieve) support.
we also have [sieve](http://sieve.info) and
[managesieve](https://wiki1.dovecot.org/ManageSieve) support.
scripts belong in `~/sieve/`, with the active sieve script in `~/.dovecot.sieve` (to conform with managesieve).
scripts belong in `~/sieve/`, with the active sieve script
named `~/.dovecot.sieve` (to conform with managesieve).
here are some [example sieve scripts](https://wiki.dovecot.org/Pigeonhole/Sieve/Examples)
here are some [example sieve scripts](
https://wiki.dovecot.org/Pigeonhole/Sieve/Examples)
managesieve is available on the default port (4190) if you want to use an external managesieve client (like the [thunderbird add-on](https://github.com/thsmi/sieve)).
managesieve is available on the default port (4190) if you want
to use an external managesieve client (like the [thunderbird add-on](
https://github.com/thsmi/sieve)).
[webmail](https://mail.tilde.team) is pre-configured to work with your local sieve scripts.
[our webmail](https://mail.tilde.team/#/settings/filters) is pre-configured
to manage your sieve scripts.
---

39
wiki/pages/gemini.md Normal file
View File

@ -0,0 +1,39 @@
---
author: ~ben
published: true
title: gemini
description: gemini hosting on tilde.team
category:
- main
---
# gemini
tilde.team offers gemini hosting!
see our homepage for a list of users.
[gemini://tilde.team](gemini://tilde.team)
you'll need a gemini [client](https://gemini.circumlunar.space/clients.html)
to view that page or a [web proxy](https://portal.mozz.us/gemini/tilde.team/)
to be added to the homepage, simply create a `public_gemini` directory:
mkdir -p ~/public_gemini
if you need a basic gemini client, [bombadillo](https://tildegit.org/sloum/bombadillo)
is installed and can even do [gopher](/wiki/gopher) as well.
cgi is also supported. make sure that you have a proper shebang and
set the file to be executable.
cgi must print the status and type per the gemini spec:
here's a simple example in sh
#!/bin/sh
printf "20 text/gemini\r\n"
printf "hello world\n"
only the first line of the file MUST send `\r\n`
see you in geminispace and feel free to stop by #gemini on irc to discuss!

View File

@ -9,7 +9,7 @@ category:
# getting started
this guide is not very thorough or complete. if you want something nicer, try [our cli for beginners article](?page=cli-for-beginners).
this guide is not very thorough or complete. if you want something nicer, try [our cli for beginners article](cli-for-beginners).
---
@ -30,7 +30,14 @@ New to the command line and all this webby cowfoolery? You're in luck! Here's a
## Logging in
### PC (windows)
### Windows 10
- Launch PowerShell (or press win+x, and click "Windows PowerShell")
- `ssh your_username@tilde.team`
- Enter your ssh key passphrase (if you set one).
### Legacy Windows
- [git bash](https://gitforwindows.org) included with a standard git install
- [msys2](https://msys2.github.io) is quite nice and has support for [mosh](https://mosh.org)
@ -40,13 +47,13 @@ New to the command line and all this webby cowfoolery? You're in luck! Here's a
- Open a terminal. Try ctrl + alt + t.
- `ssh your_username@tilde.team`
- Enter your password.
- Enter your ssh key passphrase (if you set one).
### Mac
### MacOS
- Browse to Applications/Utilities/Terminal and launch Terminal (or press cmd+space, start typing Terminal, and press return)
- `ssh your_username@tilde.team`
- Enter your password.
- Enter your ssh key passphrase (if you set one).
## Finding your index.php file
@ -75,4 +82,4 @@ Refresh your tilde page in your browser to see your new website
Note: If at any time you feel you made a mistake in editing, you can exit and n to not save.
see the [advanced ssh key guide](?page=advanced-ssh) for more information and cool tips :)
see the [advanced ssh key guide](advanced-ssh) for more information and cool tips :)

View File

@ -17,19 +17,17 @@ we're trying to keep this cool corner of the web alive.
## add and create your gophersite
to add your own gopher site, run the following command:
this is created along with your account. to get listed on the [main gophermap](gopher://tilde.team),
make some changes to your root gophermap. the listing script diffs against the default gophermap.
```bash
mkdir -p -m 755 ~/public_gopher
```
(this presumes you don't already have a public_gopher dir in your $HOME.
new users from here on out will have a public_gopher by default)
tilde.team serves user gopherholes from your `~/public_gopher` directory.
to get listed on the [main gophermap](gopher://tilde.team),
make some changes to your root gophermap. the [root gophermap](
https://tildegit.org/team/gopherhole/src/branch/master/gophermap)
diffs against the default gophermap that was included with your account.
if a file called `gophermap` exists in the directory you're currently
browsing to in gopher, it will get processed and displayed.
see [this example](https://github.com/gophernicus/gophernicus/blob/master/README.Gophermap)
see [this example](https://github.com/gophernicus/gophernicus/blob/master/README.gophermap)
for more information on file types and special chars.
one of the coolest item types supported in gophernicus is `=` which allows you
@ -48,7 +46,7 @@ if you're currently connected from a tilde.team shell, you can use the
lynx gopher://tilde.team
```
if you want to access the gophersite in your public_gopher dir, use the following
if you want to access the gophersite in your public\_gopher dir, use the following
link structure: [gopher://tilde.team/1/~username](gopher://tilde.team/1/~username)
you can install it on your local machine too :)
@ -56,3 +54,4 @@ you can install it on your local machine too :)
otherwise, you can use our [http proxy](https://gopher.tildeverse.org/tilde.team) to browse the gophernet.
hope to see you on there soon!

View File

@ -11,21 +11,21 @@ category:
hi teammates!
the tilde.chat irc network is available at irc.tilde.chat:6697 (with ssl) as a round robin of
the tilde.chat irc network is available publicly at irc.tilde.chat:6697 (with ssl) as a round robin of
[available nodes](https://tilde.chat/wiki/?page=servers).
to connect directly to our node, you can use the following addresses:
- localhost port 6667 when at your shell or via ssh port-forwarding
- team.tilde.chat port 6697 with ssl
this is the beginning of the [tilde.chat](https://tilde.chat) irc federation! more info on that site.
### here are some options to connect:
## here are some options to connect:
* `weechat` when logged in with ssh
* `irssi`
* [`znc`](https://znc.tilde.team/) - log in with your shell password and configure as needed
* run `webirc` to register your thelounge account for [our webchat](https://irc.tilde.team)
note that thelounge does not authenticate with your shell password.
* any other client that you like: connect to our node at team.tilde.chat:6697 with ssl
local connections (weechat, irssi, znc) can use 6667 without ssl
* [`znc`](https://znc.tilde.team/) - contact ben (via irc or email) to request an account,
then log in with your shell password and configure as needed
## weechat relays
@ -44,7 +44,8 @@ location (`~/.weechat/relay_socket`). to get started using it, follow these step
1. at your shell:
* `chmod o+rw ~/.weechat/relay_socket` - note that other members of the team group
are not included in the granted permissions. this allows nginx to connect
to your socket on your behalf
to your socket on your behalf. you will need to do this every time you start
weechat as the socket doesn't exist until weechat starts up.
1. in your relay client:
* glowing-bear:
@ -58,6 +59,34 @@ location (`~/.weechat/relay_socket`). to get started using it, follow these step
- relay host: $user.ttm.sh
- relay port: 443
- your relay password
- (if you get "Error: Could not connect using WebSocket", check to be sure
~/ and ~/.weechat have at least o+rx permissions so nginx can reach
~/.weechat/relay_socket)
## znc
the system znc authenticates using your shell password (same as with email and
[nextcloud](https://cloud.tilde.team). reach out to an admin on irc or send an
email to [sudoers@tilde.team](mailto:sudoers@tilde.team).
the webadmin interface is available at [znc.tilde.team](https://znc.tilde.team).
client connections are on port 6699 with ssl.
you can add network connections (up to 10) via webadmin or via a direct client
connection.
see the [znc wiki](https://wiki.znc.in/Connecting_to_ZNC) for more information.
## biboumi
you can connect to irc channels via your xmpp account.
for more info see the [xmpp wiki page](xmpp#biboumi).
tl;dr, join an irc channel with this room address format:
#channel@biboumi.tilde.team
---

View File

@ -9,29 +9,38 @@ category:
# other tildes
if you're starting a tilde and want to be added to this list, [open a PR :)](https://tildegit.org/team/site)
if you're starting a tilde and want to be added to this list, [open a PR :)](
https://tildegit.org/team/site/src/branch/master/wiki/pages/other-tildes.md)
| tilde name | description | where to join | notes |
| --- | --- | --- | ---|
| [rawtext.club](https://rawtext.club) | rawtext.club (RTC) is an experimental public access shell server with a focus on use of collaborative projects for gnu/linux skill building. Projects include simple, command line social tools and utilities, or whatever lightweight programs users are interested in. RTC does not use IRC, and instead focuses on other slower and more thoughtful forms of user interaction. | Send email to admin@rawtext.club with your ssh pubkey, desired username, and a statement describing your interest in joining. | |
| [tilde.institute](https://tilde.institute) | Provides a space dedicated to the OpenBSD operating system. Includes a functional BCHS stack for users to experiment with and use to create web applications. | [signup form](https://tilde.institute/signup) | |
| [tilde.center](https://tilde.center) | A public unix server focused around decentralization, federation, and home-brewed open source projects. | [signup form](https://tilde.center/signup.php) | |
| [nand.club](http://nand.club) | a new anti-capitalist, solarpunk tilde | [signup info here](http://nand.club) | |
| [thunix](https://thunix.net) | thunix offers Secure Shell (SSH) accounts, Web Hosting, Email Accounts, and many other things to people free of charge. | [signup info here](https://www.thunix.net/signup.php) | |
| [tildespark](https://tildespark.ddns.net) | Tilde Spark is a constantly evolving intentional community devoted to free software, open hardware and meeting new people! | [signup info here](https://tildespark.ddns.net/ikiwiki/tildespark/howtojoin/) | down |
| [tilde.fun](https://tilde.fun) | This is a Linux machine on the internet where you can get a shell account. | `ssh tilde@tilde.fun` | down |
| [yourtilde.com](https://yourtilde.com) | If you're looking for a new ~, to learn and play, come check us out. | [signup form](https://tilde.team/signup/) | |
| [breadpunk.club](https://breadpunk.club) | breadpunk.club is a small tilde focused on bread-making and community-building. see the [manifesto](https://breadpunk.club/docs/manifesto/) for more information on our mission. | [signup information here](https://breadpunk.club/join/) | |
| [cosmic.voyage](https://cosmic.voyage) | cosmic.voyage is an Ubuntu server focused on collaborative sci-fi storytelling. The background story is visible on the homepage. New authors are welcome to join and take on the voice of various ships, outposts, and colonies scattered across the universe, sending text messages back to a relay at Earth's L4 point. | [signup information here](https://cosmic.voyage/join.html) | |
| [ctrl-c.club](http://ctrl-c.club) | A place for the curious to poke around and play. SSH access, web pages, games, and programming languages on tap. | [signup form](http://goo.gl/forms/oviL1wYSrV) | |
| [pebble.ink](http://pebble.ink) | pebble.ink is a project almost, but not quite, like tilde.club | ask [@phildini](https://twitter.com/phildini) or try [this signup form](http://pebble.ink/apply.html) | |
| [dimension.sh](https://dimension.sh/) | dimension.sh is a small public linux shell host (or pubnix system) that is open to anyone who wants to learn, experiment, and socialize with other like minded people. | [signup form](https://dimension.sh/join.html) | |
| [envs.net](https://envs.net/) | envs.net is a minimalist, non-commercial shared unix system and will always be free to use. | [signup here](https://envs.net/signup) | |
| [hackers.cool](http://hackers.cool) | A tilde.club started by some nerd at Hacker School. As such, it's got a lot of Hacker Schoolers on it, but everyone is welcome! | [signup form](https://docs.google.com/forms/d/1PHnXadDW1WySCB9frIefjXI3P6bt8n_p4YMyiPPD4O4/viewform) | |
| [squiggle.city](http://squiggle.city) | squiggle.city is a Debian server in the spirit of tilde.club. It's for making web pages and learning about the command line. If you are reading [userland](https://p1k3.com/userland-book/), which is about how to unix, squiggle.city is a place to explore the ideas it contains. | email [bbearnes@gmail.com](mailto:bbearnes@gmail.com) with your ssh pubkey and a promise to not be a jerk | |
| [cosmic.voyage](https://cosmic.voyage) | cosmic.voyage is an Ubuntu server focused on collaborative sci-fi storytelling. The background story is visible on the homepage. New authors are welcome to join and take on the voice of various ships, outposts, and colonies scattered across the universe, sending text messages back to a relay at Earth's L4 point. | email [tomasino@lavabit.com](mailto:tomasino@lavabit.com) with your ssh pubkey, desired username, and the name of your first ship | |
| [tilde.town](https://tilde.town) | tilde.town is an open, welcoming and safe place for the exploration of lo-fi HTML art, hi-fi javascript experiments, generative poetic works, and digital socialization in a post-facebook age. | [signup form](https://cgi.tilde.town/users/signup) | |
| [protocol.club](http://protocol.club) | protocol.club explores the fundamental and unique learning opportunities provided by the implementation of standardized protocols. It is a place for curious minds to explore and experiment, to educate and be educated about protocols and implementations old and new alike. While inspired by tilde.club and federated with the rest of the tildeverse via NNTP (et cetera), protocol.club has a stronger focus on its particular mission and has several differences from other tilde boxes, namely: we have a Code of Conduct, and we have some resources available locally to aid development of protocol implementations and new draft protocols. We also serve pages over HTTPS. | [signup form](https://docs.google.com/forms/d/11sJKpZnqaqNVR-rYRfCxKl05iSpjJa85XbigY8xbzBM/viewform?c=0&w=1) | |
| [nand.club](http://nand.club) | a new anti-capitalist, solarpunk tilde | [signup info here](http://nand.club) | down |
| [palvelin.club](http://palvelin.club) | Finnish language tilde server. | [signup form](https://docs.google.com/forms/d/1tTGiOU0z3M92nCb5Lv3Tv_sJXGLh8kj5Gl79Gx4ZOdM/viewform) | |
| [skylab.org](http://skylab.org) | An open-source community co-operative with ~150 members that has existed since 1997. Based in Portland, Oregon, United States with a userbase across the world, we have quietly existed. Featuring geektalk community chat, a variety of tools and hosting running on FreeBSD. | Email [skylabstatus@gmail.com](mailto:skylabstatus@gmail.com) with subject line SKYLAB.ORG and an email containing your desired username, full name, public SSH key and an acknowledgement to play nice. | |
| [pebble.ink](http://pebble.ink) | pebble.ink is a project almost, but not quite, like tilde.club | ask [@phildini](https://twitter.com/phildini) or try [this signup form](http://pebble.ink/apply.html) | |
| [protocol.club](http://protocol.club) | protocol.club explores the fundamental and unique learning opportunities provided by the implementation of standardized protocols. It is a place for curious minds to explore and experiment, to educate and be educated about protocols and implementations old and new alike. While inspired by tilde.club and federated with the rest of the tildeverse via NNTP (et cetera), protocol.club has a stronger focus on its particular mission and has several differences from other tilde boxes, namely: we have a Code of Conduct, and we have some resources available locally to aid development of protocol implementations and new draft protocols. We also serve pages over HTTPS. | [signup form](https://docs.google.com/forms/d/11sJKpZnqaqNVR-rYRfCxKl05iSpjJa85XbigY8xbzBM/viewform?c=0&w=1) | down |
| [rawtext.club](https://rawtext.club) | rawtext.club (RTC) is an experimental public access shell server with a focus on use of collaborative projects for gnu/linux skill building. Projects include simple, command line social tools and utilities, or whatever lightweight programs users are interested in. RTC does not use IRC, and instead focuses on other slower and more thoughtful forms of user interaction. | Send email to admin@rawtext.club with your ssh pubkey, desired username, and a statement describing your interest in joining. | |
| [remotes.club](https://remotes.club) | Anyone who works remotely is welcome. | [signup form](https://www.remotes.club/request.php) | |
| [tilde.cat](https://tilde.cat) | This is (or rather might be) public shell server like [the club](https://tilde.club), [the town](https://tilde.town), or other ~ servers. | [signup form](http://signup.tilde.cat) | down |
| [tilde.pink](gopher://tilde.pink) | A gopher only tilde, providing shell acounts with email and gopher services running on a DragonflyBSD server. The site is accessable via [web proxy](https://proxy.tilde.pink) | [signup form](gopher://tilde.pink/1/signup.gph) | |
| [rw.rs](http://rw.rs) | An experimental software community with a 199X aesthetic. | [signup via pull request](https://github.com/adsr/rw.rs/) | |
| [skylab.org](http://skylab.org) | An open-source community co-operative with ~150 members that has existed since 1997. Based in Portland, Oregon, United States with a userbase across the world, we have quietly existed. Featuring geektalk community chat, a variety of tools and hosting running on FreeBSD. | Email [skylabstatus@gmail.com](mailto:skylabstatus@gmail.com) with subject line SKYLAB.ORG and an email containing your desired username, full name, public SSH key and an acknowledgement to play nice. | |
| [squiggle.city](http://squiggle.city) | squiggle.city is a Debian server in the spirit of tilde.club. It's for making web pages and learning about the command line. If you are reading [userland](https://p1k3.com/userland-book/), which is about how to unix, squiggle.city is a place to explore the ideas it contains. | email [bbearnes@gmail.com](mailto:bbearnes@gmail.com) with your ssh pubkey and a promise to not be a jerk | |
| [summit pubnix](https://www.summit.tildex.com) | summit is an intentional and inclusive community for developing, making, learning, teaching, socializing, and enjoying various aspects of GNU/Linux in a free/non-commercial environment. If you need help or have any questions, feel free to ask in #pubnix on irc.tilde.chat. | [signup form](https://www.summit.tildex.com/join) | |
| [texto-plano.xyz](https://texto-plano.xyz) | A small UNIX system community in the spirit of [Tilde.club](https://tilde.club), [RTC](https://rawtext.club) and the [small Internet](http://gopher.muffinlabs.com/republic.circumlunar.space/~spring/phlog/2019-01-16__The_Small_Internet.txt) in Spanish language (we use OpenBSD) | Send your public key and your username to [admin@texto-plano.xyz](mailto:admin@texto-plano.xyz) | |
| [theasylum](https://theasylum.team) | invite-only tilde catering to programmers of all languages | join #theasylum on tilde.chat, and let us get to know you | |
| [thunix](https://thunix.net) | thunix offers Secure Shell (SSH) accounts, Web Hosting, Email Accounts, and many other things to people free of charge. | [signup info here](https://www.thunix.net/signup.php) | |
| [tilde.best](https://tilde.best) | tilde.best is a Debian server which is aiming to have a *best* community and *best* features. | email [root@tilde.best](mailto:root@tilde.best) with your ssh pubkey, desired username and reason why you want to join | down |
| [tilde.cat](https://tilde.cat) | This is (or rather might be) public shell server like [the club](https://tilde.club), [the town](https://tilde.town), or other ~ servers. | [signup form](http://signup.tilde.cat) | down |
| [tilde.center](https://tilde.center) | A public unix server focused around decentralization, federation, and home-brewed open source projects. | [signup form](https://tilde.center/signup.php) | down |
| [tilde.fun](https://tilde.fun) | This is a Linux machine on the internet where you can get a shell account. | `ssh tilde@tilde.fun` | down |
| [tilde.institute](https://tilde.institute) | Provides a space dedicated to the OpenBSD operating system. Includes a functional BCHS stack for users to experiment with and use to create web applications. | [signup form](https://tilde.institute/signup) | |
| [tilde.pink](gopher://tilde.pink) | A gopher only tilde, providing shell acounts with email and gopher services running on a DragonflyBSD server. The site is accessible via [web proxy](https://proxy.tilde.pink) | [signup form](gopher://tilde.pink/1/signup.gph) | |
| [tilde.pw](https://tilde.pw) | tilde.pw is a unix server with some people on it and that unix server hosts webpages and other things too. | [signup form](https://tilde.pw/signup.php) | |
| [tilde.town](https://tilde.town) | tilde.town is an open, welcoming and safe place for the exploration of lo-fi HTML art, hi-fi javascript experiments, generative poetic works, and digital socialization in a post-facebook age. | [signup form](https://cgi.tilde.town/users/signup) | |
| [tildespark](https://tildespark.ddns.net) | Tilde Spark is a constantly evolving intentional community devoted to free software, open hardware and meeting new people! | [signup info here](https://tildespark.ddns.net/ikiwiki/tildespark/howtojoin/) | down |
| [wilde.ftp.sh](http://wilde.ftp.sh/) | The world's first (and possibly only) Windows-based tilde! | [signup form](http://wilde.ftp.sh/signup.php) | down |
| [yourtilde.com](https://yourtilde.com) | If you're looking for a new ~, to learn and play, come check us out. | [signup form](https://yourtilde.com/sign-up) | |

View File

@ -0,0 +1,312 @@
---
author: ~kst
published: true
title: hosting public git repos
description: hosting public git repos on tilde.team
category:
- main
---
hosting public git repos
========================
Besides the [Gitea instance][1] of tildeverse, you could easily setup a
read-only clone URL fetchable using git clone similar to this one:
```
$ git clone https://tilde.team/~kst/grm.tilde.git
```
tl;dr
-----
If you are not interested in the details, you could use a minimal front end
called [git repo manager][2]. It should take care of all the details for you.
creating a repo
---------------
On tilde.team, the structure of `~name/public_html/<path>` is mapped to
`https://tilde.team/~name/<path>` so anything inside the `~name/public_html`
directory is publicly accessible. If you want to create a publicly accessible
git repository, all you need to do is to create a [bare repository][3] inside
`~name/public_html`:
```
$ cd ~/public_html
$ git init --bare my_repo.git
Initialized empty Git repository in /home/name/public_html/my_repo.git/
```
The `.git` suffix is a convention for bare repositories. If you have used GitHub,
GitLab, or Gitea before, you should have noticed that the clone URLs all have
the `.git` suffix.
After you have created the bare repository for your project, the URL
```
https://tilde.team/~name/my_repo.git
```
is not ready for clone yet. Because we are serving the repository using GET
requests, or what git internally called the ["dumb" HTTP protocol][4], git needs
some extra info files for cloning the repository. They can be generated by
```
$ cd ~/public_html/my_repo.git
$ git update-server-info
```
Now you should be able to clone the repository using
```
$ git clone https://tilde.team/~name/my_repo.git
Cloning into 'my_repo'...
warning: You appear to have cloned an empty repository.
```
The
```
$ git update-server-info
```
command needs to be run after every update to the repository. This could be
automated using the post-update [git hook][5]. Since the sample post-update hook
in
```
~/public_html/my_repo.git/hooks
```
already contains this command, we simply rename the sample hook
```
$ cd ~/public_html/my_repo.git
$ mv hooks/post-update.sample hooks/post-update
```
so that git will run this script after every update.
push via ssh
------------
Note that the HTTP clone URL is *read-only*, so you can't push anything using
this URL. Normally you would need to set up the ["smart" protocol][4] for
authentication, but since we are using SSH already, we could use a remote path
of the form `name@host:path`, similar to the arguments of scp, as the git
remote url, so you could use
```
$ git clone name@tilde.team:~/public_html/my_repo.git
```
to clone the repository on your local machine, or
```
$ git clone ~/public_html/my_repo.git
```
if you want to work on the server directly. If you have already made some
changes to the local repo, use
```
$ git remote set-url origin <url>
```
to update the remote URL. Now you should be able to push to your remote repo
using
```
$ git push
```
if you have a correct SSH keypair setup.
web front end
------------
Now that we have already figured out the push and clone access of our
repository. You could call it an end here, but one of the most important
features of git hosting services is a web interface so that people could browse
and discuss the source code without cloning it.
For this, we could use [stagit][6], which is a tool for generating static HTML
pages from a git repository. The generated web pages are even browsable using
terminal browsers such as elinks, w3m, and lynx. For example, try
```
$ lynx https://tilde.team/~kst/git/grm.tilde/file/TUTORIAL.html
```
Since tilde.team already have libgit2 installed, simply clone the repo and
build it:
```
$ git clone git://git.codemadness.org/stagit
$ cd stagit
$ make
$ cp stagit stagit-index ~/bin/
```
Here, we will assume that the index page of stagit, which lists all the repos
you have, is
```
https://tilde.team/~name/git/
```
and the index page of each repository is
```
https://tilde.team/~name/git/my_repo
```
To build the HTML pages for `my_repo`, we first make the corresponding directory
```
$ mkdir -p ~/public_html/git/my_repo
$ cd ~/public_html/git/my_repo
```
and add some metadata to your bare git repo
```
$ echo 'a cool project' > ~/public_html/my_repo.git/description
$ echo 'https://tilde.team/~name/my_repo.git' > ~/public_html/my_repo.git/url
$ echo 'name' > ~/public_html/my_repo.git/owner
```
then run
```
$ stagit ~/public_html/my_repo.git
```
to generate HTML files in the current directory. You could link `index.html` to
`log.html`
```
$ ln -sf log.html index.html
```
so that the URL
```
https://tilde.team/~name/git/my_repo
```
is pointed to the commit log page.
To generate the repository index, go back to
```
$ cd ~/public_html/git/
```
and run
```
$ stagit-index ~/public_html/my_repo.git > index.html
```
Note that the output will be empty if `my_repo` has no commits. In general, use
```
$ stagit-index repo_dir1 repo_dir2 ... > index.html
```
to generate index for multiple repositories. You should also copy over or
symlink some of the assets files in stagit's repository, such as `style.css`,
`logo.png`, etc. to
```
~/public_html/git/
```
and
```
~/public_html/git/my_repo/
```
you could also modify the source code of stagit to use a common location for
the assets.
Because the web pages generated by stagit is static, you need to run `stagit`
and `stagit-index` after each push operation to your repository in order to
update the HTML files. This process can be easily automated using a
`post-receive` hook. An example of the `post-receive` hook can be found
[here][8]. To install it:
```
$ cd ~/public_html/my_repo.git/hooks
$ curl -o stagit-post-receive https://tilde.team/~kst/bin/stagit-post-receive
$ chmod +x stagit-post-receive
```
Now you should see something like this when you do a git push
```
$ git push
...
remote: [my_repo] stagit HTML pages... done!
...
```
a minimal front end for stagit
------------------------------
Since the process of creating repositories and recompiling stagit pages can be
very tedious, there is a simple front end called git repo manager (`grm`) to
deal with the chore, see the [readme][9] if you want to use `grm` to automate this
process.
If you want to host git repositories on your own server, you could use the [git
daemon][10] to better manage the visibility of your repositories. The remote
address exposed by the git daemon will have `git://` prefix. Check out the master
branch of [grm][11] if you want to use git daemon instead.
accepting patches
-----------------
Hosting git repositories this way means there will be no fancy features such as
issues and pull requests, but git have built-in support for [email workflows][12].
Contributors could format their commits to patches using
```
$ git format-patch
```
and use the
```
$ git send-email <patches>
```
command (see [here][13]) to send the patches to you, and you could apply the patches by
piping the email message or attached patches to the `git am` command
```
$ git am < <patch>
```
See the [blog post][14] of Drew DeVault for using git with mutt, and check out
[aerc][15] if you want an modern alternative for mutt built from such workflow.
[1]: https://tildegit.org/
[2]: https://tilde.team/~kst/git/grm.tilde/file/README.html
[3]: https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server
[4]: https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols
[5]: https://git-scm.com/docs/githooks
[6]: https://git.codemadness.org/stagit/
[7]: https://git.codemadness.org/stagit/file/README.html
[8]: https://tilde.team/~kst/git/stagit-postrecv/file/stagit-post-receive.html
[9]: https://tilde.team/~kst/git/grm.tilde/file/README.html
[10]: https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon
[11]: https://sink.krj.st/grm/file/README.html
[12]: https://git-scm.com/docs/gitworkflows#_patch_workflow
[13]: https://git-send-email.io/
[14]: https://drewdevault.com/2019/05/13/Git-email-webcast.html
[15]: https://aerc-mail.org/

View File

@ -15,7 +15,7 @@ as a founding member of the [tildeverse](https://tildeverse.org), tilde.team hos
### our deployed projects
- [forum](https://forum.tilde.team) ([source](https://tildegit.org/team/forum)) - mostly defunct in favor of [bbj](https://bbj.tilde.team)
- [forum](https://forum.tilde.team) ([source](https://tildegit.org/team/forum)) - mostly defunct in favor of [bbj](https://bbj.tildeverse.org)
### code related stuff
@ -42,16 +42,15 @@ as a founding member of the [tildeverse](https://tildeverse.org), tilde.team hos
- [tilde.news](https://tilde.news) - [lobste.rs](https://lobste.rs) sister site for tilde-related links
- [irc](https://tilde.chat) tilde.chat irc network for the tildeverse
- we host one node of the [network](https://tilde.chat/wiki/?page=servers)
- we host one node of the [network](https://tilde.chat/wiki/servers)
- we host [quotes.tilde.chat](https://quotes.tilde.chat)
- [znc bouncer](https://znc.tilde.team/) - log in with your shell password
- [thelounge webclient](https://irc.tilde.team) - runs in private mode: it stays connected for you. run `webirc` to create a login.
- [pleroma](https://pleroma.tilde.zone) federated social network
- [mastodon](https://tilde.zone) federated social network
- [pinafore front-end](https://pinafore.tilde.zone)
- [halcyon front-end](https://halcyon.tilde.zone)
- [tooty front-end](https://tooty.tilde.zone)
- [email](?page=email) ([webmail](https://mail.tilde.team), smtp/imap, mutt, and alpine)
- [email](email) ([webmail](https://mail.tilde.team), smtp/imap, mutt, and alpine)
- [mailing lists](https://lists.tildeverse.org) - hosted on top of our mailserver
- [bbj](https://tildegit.org/team/bbj) ([web mirror here](https://bbj.tilde.team)) - forked from [desvox/bbj](https://github.com/bbj-dev/bbj)
- [bbj](https://tildegit.org/bbj/bbj) ([web mirror here](https://bbj.tildeverse.org)) - forked from [desvox/bbj](https://github.com/bbj-dev/bbj)
- [gopher proxy](https://gopher.tilde.team) - defaults to our local gopherd: gopher://tilde.team

View File

@ -16,7 +16,7 @@ _or, how to tell other computers to do cool things_
> all users are required to use an ssh keypair for login, or will be required
to proceed with manual account recovery with [~ben](/~ben/) or another admin.
drop a line to [sudoers@tilde.team](mailto:sudoers@tilde.team) or hop on
[irc](https://web.tilde.chat/?join=sudoers) for assistance.
[irc](https://kiwi.tilde.chat/#team) for assistance.
## tilde.team details
@ -33,6 +33,15 @@ ssh -p 443 user@ssh.tilde.team
ssh user@tilde.team # this uses port 22, which can be blocked on some networks
```
tilde.team's ECDSA key fingerprint is SHA256:R3qNfKIF3IiXhKCbFX6rCKl73yzexi9Wodsow6XFres.
the key fingerprints are in dns as sshfp records as well, which you can check against
by setting VerifyHostKeyDNS to yes in your `~/.ssh/config`.
you can check the records yourself with the `dig` tool like this:
dig sshfp tilde.team
---
## intro
@ -112,23 +121,14 @@ mkdir -m 700 ~/.ssh
1. create your keys:
for rsa keys:
```bash
ssh-keygen -t rsa -b 4096
```
for dd25519 keys:
```bash
ssh-keygen -t ed25519 -a 100
```
1. if you press enter to accept the defaults, your public and private key will
be located at `~/.ssh/id_rsa.pub` and `~/.ssh/id_rsa` respectively (or
`~/.ssh/id_ed25519.pub` and `~/.ssh/id_ed25519` if you chose ed25519 type)
be located at `~/.ssh/id_ed25519.pub` and `~/.ssh/id_ed25519` respectively
1. `cat ~/.ssh/id_rsa.pub` (or `cat ~/.ssh/id_ed25519.pub` for ed25519)
1. `cat ~/.ssh/id_ed25519.pub`
1. copy the output of the last command and paste it in the sshkey field on the
signup form (or email it to [~sudoers](mailto:sudoers@tilde.team) if you already have an account)
@ -151,14 +151,55 @@ where username is your username (~ben would use `ssh ben@tilde.team`)
---
### windows
### windows 10
there are a couple options for using ssh on windows these days.
i like to use [git bash](https://git-scm.com).
windows 10 1809 or later has openssh built in, so you no longer need to install third-party tools. if openssh is not enabled, please see microsoft's documentation on [openssh in windows](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview).
#### generating your keypair
choose from any of the following options:
1. open your new shell
1. create your .ssh directory
```powershell
mkdir .ssh
```
1. create your keypair
```powershell
ssh-keygen -t ed25519 -a 100
```
1. if you press enter to accept the defaults, your public and private key will
be located at `%UserProfile%\.ssh\id_ed25519.pub` and `%UserProfile%\.ssh\id_ed25519`
respectively
1. `type %UserProfile%\.ssh\id_ed25519.pub`
1. copy the output of the last command and paste it in the sshkey field on the signup form
#### using your keypair
once [~ben](https://tilde.team/~ben/) or another admin approves your signup, you can join the tilde.team
1. open powershell (right click start button and select "windows powershell")
1. `ssh` to tilde.team:
```bash
ssh username@tilde.team
```
where username is your username (~ben would use `ssh ben@tilde.team`)
1. profit???
---
### legacy windows
older versions of windows unfortunately do not come with openssh, and you will need to install a third-party tool. you may choose from any of the following options:
- [windows subsystem for linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10)
- [msys2](http://www.msys2.org/)
@ -174,32 +215,22 @@ mkdir .ssh
1. create your keypair
for rsa keys:
```bash
ssh-keygen -t rsa -b 4096
```
for ed25519 keys:
```bash
ssh-keygen -t ed25519 -a 100
```
1. if you press enter to accept the defaults, your public and private key will
be located at `~/.ssh/id_rsa.pub` and `~/.ssh/id_rsa` respectively (or
`~/.ssh/id_ed25519.pub` and `~/.ssh/id_ed25519` if you chose ed25519 type)
be located at `~/.ssh/id_ed25519.pub` and `~/.ssh/id_ed25519` respectively
1. `cat ~/.ssh/id_rsa.pub` (or `cat ~/.ssh/id_ed25519.pub` for ed25519)
1. `cat ~/.ssh/id_ed25519.pub`
1. copy the output of the last command and paste it in the sshkey field on the
signup form (or email it to [~sudoers](mailto:sudoers@tilde.team) if you already have an account)
1. copy the output of the last command and paste it in the sshkey field on the signup form
#### using your keypair
once [~ben](https://tilde.team/~ben/) or another admin approves your signup, you can join the tilde.team
1. open terminal (it's in `/Applications/Utilities`)
1. open terminal (location will vary depending on your choice)
1. `ssh` to tilde.team:
@ -228,26 +259,16 @@ mkdir -m 700 ~/.ssh
1. create your keys
for rsa keys:
```bash
ssh-keygen -t rsa -b 4096
```
for ed25519 keys:
```bash
ssh-keygen -t ed25519 -a 100
```
1. if you press enter to accept the defaults, your public and private key will
be located at `~/.ssh/id_rsa.pub` and `~/.ssh/id_rsa` respectively (or
`~/.ssh/id_ed25519.pub` and `~/.ssh/id_ed25519` if you chose ed25519 type)
be located at `~/.ssh/id_ed25519.pub` and `~/.ssh/id_ed25519` respectively
1. `cat ~/.ssh/id_rsa.pub` (or `cat ~/.ssh/id_ed25519.pub` for ed25519)
1. `cat ~/.ssh/id_ed25519.pub`
1. copy the output of the last command and paste it in the sshkey field on the
signup form (or email it to [sudoers@tilde.team](mailto:sudoers@tilde.team) if you already have an account)
1. copy the output of the last command and paste it in the sshkey field on the signup form
#### using your keypair

View File

@ -14,8 +14,7 @@ category:
- `mutt` - command line mail client for @tilde.team mail
- `alpine` - alternate command line mail client based on pine
- `bbj` - command line bbs (bulletin board and jelly)
- source here: [gitea mirror](https://tildegit.org/team/bbj) and [github fork](https://github.com/tilde-team/bbj)
- `talk` - old school chat utility (`man talk` for more info)
- source here: [gitea mirror](https://tildegit.org/bbj/bbj) and [github fork](https://github.com/bbj-dev/bbj)
- `who` - see who else is connected right now
- `webirc` - register for access to our [thelounge webchat client](https://irc.tilde.team)
- `pb` - [pastebin](https://paste.tilde.team)
@ -23,7 +22,7 @@ category:
- `finger` - get info on other users (local and remote on other tildeverse member servers)
- `toot` - submit a post to the [tilde.team mastodon account](https://tilde.zone/@tildeteam)
- `botany` - tend to your plants and visit teammates' gardens
- `bb` - [bashblog tool](?page=tildeblogs)
- `bb` - [bashblog tool](tildeblogs)
- `feels` - ttbp feels engine, forked from [tilde.town/~endorphant](https://tilde.town/~endorphant/ttbp/). post to gopher, web, or internal only.
- `dcss` - connect to [tildecrawl](https://crawl.tildeverse.org) and get your roguelike on

View File

@ -23,14 +23,14 @@ you're stuck on something, and to offer help to others who are learning.
stuck for ideas? or looking for a bigger challenge? tilde.team also maintains
a [list of internship opportunities and code challenge websites](
https://tilde.team/wiki/?page=learning-opportunities). this list is a new
https://tilde.team/wiki/learning-opportunities). this list is a new
feature of the site, so please contribute by letting us know (by email,
IRC or pull request) of any other opportunities you know of.
## 2. learning resources
tilde.team's IRC server is the social hub around which a lot of learning
occurs. [log on](https://tilde.team/wiki/?page=irc) and get to know some people.
occurs. [log on](https://tilde.team/wiki/irc) and get to know some people.
we have numerous compilers and interpreters installed in the shell, including
g++, python, ruby, perl and many others. if you need something that is not
@ -68,4 +68,4 @@ time to build and improve the other supporting resources on tilde.team.
you can help! if you have suggestions about other resources or ways to help
people practice programming or other linux skills, pop in to IRC and talk
about it. many of the ideas that have already helped make this place better
came from people like you. everybody is learning here; including the admins!
came from people like you. everybody is learning here; including the admins!

View File

@ -13,7 +13,7 @@ category:
because [~ben](https://tilde.team/~ben/) hoards domain names, you can
use the following domains with your tildepage:
see also the [master list of domains](?page=domains).
see also the [master list of domains](domains).
* fuckup.club
* nand.sh
@ -23,6 +23,7 @@ see also the [master list of domains](?page=domains).
* tilde.ninja
* tilde.site
* tilde.team
* tildeteam.net
* tildeteam.org
this means you can access your user page from any of the following
@ -32,3 +33,55 @@ url formats, substituting domain and username:
* `https://domain.tld/u/username/`
* `https://username.domain.tld/`
## your public\_html
`~/public_html` is the webroot for your tildepage. files you place in there
are served at the addresses described above.
static files are served normally, along with the following dynamic options:
* php - name the file with a .php extension or use index.php
* perl - name the file with a .pl extension
* sh/cgi - name the file with a .sh or .cgi extension
* python - name the file with a .py extension
* lua - name the file with a .lua extension
* cgi-bin - name it whatever you want and place it in `~/public_html/cgi-bin/`
don't forget to make the cgi-bin script executable
if you're having trouble with any of these cgi scripts, make sure that the script
has a correct shebang, is executable, and that you're sending the content-type
header as the first thing.
## static page generators
there are several static site generators available, including some cool blog
engines.
### blog engines
* [bashblog](tildeblogs) - a single shell script that helps you build a blog
with plain html or markdown. also supports mirroring your posts into your
[`~/public_gopher` gopherhole](gopher).
* [ttbp](ttbp) - tilde.team blogging platform. originally built for [tilde.town](
https://tilde.town/) by [~endorphant](https://tilde.town/~endorphant/). forked
with a handful of patches for our setup.
### ssgs
* [mkdocs](https://www.mkdocs.org) - markdown project documentation tool.
additional themes are available from the [mkdocs-bootstrap](
http://mkdocs.github.io/mkdocs-bootstrap/) and [mkdocs-bootswatch](
http://mkdocs.github.io/mkdocs-bootswatch/) projects. just set your theme name
to one those listed and rebuild. generally recommended to not build the mkdocs
source directly in your webroot. set the destination to somewhere in `~/public_html`,
symlink, or move/copy the generated files manually. for example, if you wanted to
make a mkdocs site called mywiki available on the web, you could do:
`ln -s ~/mywiki ~/public_html/wiki`
* [hugo](https://gohugo.io/) - static site generator built in go
* [jekyll](https://jekyllrb.com/) - static site generator used by github for
[github pages](https://pages.github.com) built in ruby
* [zola](https://getzola.org/) - single-binary static site generator written in rust

View File

@ -15,6 +15,8 @@ its services fair for everyone. the following offences will result in a service
tl;dr: don't do anything illegal or harmful, especially anything that could
[anger the hosting company](https://www.ovh.com/world/support/terms-and-conditions/)
you must be at least 13 years or older to use tilde.team.
here are some things that we don't allow:
* deliberately defacing the accounts of other users

View File

@ -1,22 +1,20 @@
---
author: ~ben
published: true
title: tilde.team blogging platform
description: a cli blogging platform that can publish to your tilde page and your gopherhol
category:
- main
title: feels - tilde.team blogging platform
description: a cli blogging platform that can publish to your tilde page and your gopherhole
category:
- main
---
*a command-line based blogging platform running on tilde.team*
# FEELS MANUAL
`ttbp` stands for "tilde.town blogging platform", the original working name for
this project.
`ttbp` stands for "tilde.team blogging platform", the original working name for
this project. the complete codebase is available on
[tildegit](https://tildegit.org/team/ttbp).
![ttbp main menu screenshot](https://tilde.town/~endorphant/ttbp/screenshots/ttbp-main.png)
![ttbp entries view screenshot](https://tilde.town/~endorphant/ttbp/screenshots/ttbp-entries.png)
![ttbp compose view screenshot](https://tilde.town/~endorphant/ttbp/screenshots/ttbp-compose.png)
`ttbp` was originally written for [tilde.town](https://tilde.town/~endorphant/ttbp/)
with sources available on [github](https://github.com/modgethanc/ttbp).
`ttbp` runs from the command line, providing a hub for writing personal blog
posts and reading posts written by other users of tilde.team. it's a little bit
@ -24,36 +22,21 @@ like livejournal or dreamwidth or tumblr. you can opt to publish your posts to a
public html file hosted on your tilde page, to tilde.team's gopher server, or
keep all your entries private to the tilde.team server.
to use, run `feels` while logged in to tilde.team
this is a project that runs on tilde.team, so all users of this program are
expected to operate under the tilde.team [code of
conduct](http://tilde.team/wiki/?page=code-of-conduct). content/personal issues should be
conduct](http://tilde.team/wiki/code-of-conduct). content/personal issues should be
worked out according to the CoC, with support from the [administrative
team](http://tilde.team/wiki/?page=administration) if needed.
### QUICK START
no coding or html experience is necessary to get started. just log in to your
tilde.team account and enter:
`feels`
ttbp will ask you a few questions to get you started. after that, writing and
reading entries all happen within the program.
that's it!
team](https://tilde.team/wiki/code-of-conduct#9--contact-info) if needed.
### support
if you're having trouble getting started, or run into program errors or strange
behavior, please send internal tilde.team mail to sudoers@tilde.team and i'll try to
behavior, please ask on [#team](https://web.tilde.chat/?join=team) or send a mail
to [sudoers@tilde.team](mailto:sudoers@tilde.team) and we'll try to
sort things out!
there's also a function from the main menu that lets you send feedback/inquiries
to me directly; this uses internal tilde.team mail, which is what i'll respond
to.
to us directly
### writing entries
@ -82,8 +65,8 @@ by creating files with any date you want.)*
* you can use [markdown](https://daringfireball.net/projects/markdown/syntax)
* you can use html
* you can also put things between `<!-- comments -->` to have them show up
in the feed but not render in a browser (but people can still read
them with view-source)
in the feed but not render in a browser (but people can still read them with
view-source)
### reading other feels
@ -118,8 +101,7 @@ directory.
if you opt to publish, the program creates a directory `~/.ttbp/www` where it
stores all html files it generates, and symlinks this from your `~/public_html`
with your chosen blog directory. your blog will also be listed on the [main ttbp
page](https://tilde.town/~endorphant/ttbp).
with your chosen blog directory.
you can also opt to publish to gopher, and the program will automatically
generate a gophermap of your feels.
@ -223,35 +205,3 @@ these are a few ideas being kicked around, or under active development:
other ideas are listed on github as
[upcoming features](https://github.com/modgethanc/ttbp/issues?q=is%3Aissue+is%3Aopen+label%3A"upcoming+features") or [feature requests](https://github.com/modgethanc/ttbp/issues?q=is%3Aissue+is%3Aopen+label%3A"feature+request")!
### dependencies
(this section is only relevant if you plan on forking the repo and running an
instance of this yourself)
* [mistune](https://pypi.python.org/pypi/mistune)
* [inflect](https://pypi.python.org/pypi/inflect)
* [six](https://pypi.python.org/pypi/six)
### contributing
please check out my [contributor
guidelines](https://github.com/modgethanc/ttbp/blob/master/.github/CONTRIBUTING.md)
on github if you'd like to get involved with development!
if you find any bugs or strange behavior, please message me locally on tildemail
or open a github issue and i'll get back to you as soon as i can.
if you're interested in helping with the code, please drop me some tildemail!
i accept tips for development work on
[liberapay](https://liberapay.com/modgethanc)
### contributor shout-outs
thanks to:
* ~vilmibm, packaging help and gopher support
* ~sanqui, the bug swatter
* ~sinacutie, for css updates

View File

@ -13,32 +13,30 @@ so you've got a process that you want to keep running. you might have it in a
tmux or screen session. let's use systemd user units to manage it!
1. ensure that your user unit loadpath is set up:
```bash
mkdir -p ~/.config/systemd/user/
```
mkdir -p ~/.config/systemd/user/
1. create a basic service. save something like this in
`~/.config/systemd/user/my-new-service.service` (adjusting where necessary)
```bash
[Unit]
Description=foo
`~/.config/systemd/user/my-new-service.service` (using the name of the unit
you're creating)
[Service]
ExecStart=/bin/bash -c "while true do; echo hi; done"
[Unit]
Description=foo
[Install]
WantedBy=default.target
```
[Service]
ExecStart=/bin/bash -c "while true do; echo hi; done"
[Install]
WantedBy=default.target
1. enable it
```bash
systemctl --user enable --now my-new-service.service
```
systemctl --user enable --now my-new-service.service
1. enable-linger for your user account
```bash
loginctl enable-linger
```
loginctl enable-linger
this allows your user units to run even when you're not logged in.
done!

47
wiki/pages/xmpp.md Normal file
View File

@ -0,0 +1,47 @@
---
author: ~ben
published: true
title: xmpp
description: how to use xmpp/jabber with your tilde.team account
category:
- main
---
# xmpp
[![](https://compliance.conversations.im/badge/tilde.team)](
https://compliance.conversations.im/server/tilde.team/)
tilde.team has a jabber server available for users.
we're running ejabberd, a modern xmppd in erlang. authentication
is configured to use your shell password, so just connect with any
xmpp client with yourusername@tilde.team and your password.
recommended clients are:
- [conversations (android)](https://f-droid.org/en/packages/eu.siacs.conversations)
- [gajim (linux/windows)](https://gajim.org)
if you have a recommended client for mac platforms, feel free to discuss
and add it to this list.
we have a tilde.team MUC (multi user chat) at [team@conference.tilde.team](
xmpp:team@conference.tilde.team?join), feel free to stop by!
## biboumi
there's also a [biboumi](https://biboumi.louiz.org/) server
connected with our xmpp server. you can join any [irc](irc)
channel as an xmpp MUC (multi user chat) room with the following
format:
#channelname@biboumi.tilde.team
it's configured as a single-server setup, so there's no need to
provide the irc server in the address.
for more info, see the [docs](https://doc.biboumi.louiz.org/9.0/user.html#join-an-irc-channel)
but keep in mind that you must leave out the `%irchostname` part
of the address.