diff --git a/examples/msn0.yml b/examples/msn0.yml index 859dd44..c4273c5 100644 --- a/examples/msn0.yml +++ b/examples/msn0.yml @@ -38,6 +38,7 @@ all: static: true sslidentity: aninix.net-0001 secdetection: true + iptv_location: Milwaukee Node0: ipinterface: enp1s0f0 ip: 10.0.1.4 diff --git a/roles/Foundation/files/custom/bin/gen-aninix-custom b/roles/Foundation/files/custom/bin/gen-aninix-custom new file mode 100644 index 0000000..9253e0d --- /dev/null +++ b/roles/Foundation/files/custom/bin/gen-aninix-custom @@ -0,0 +1,57 @@ +#!/bin/bash + +set -x + +URI=https://foundation.aninix.net/assets/css/theme-arc-green.css + +# Gitea arc-green palette +BOLDTEXT='#87ab63' +TEXT='#9e9e9e' +BGCOLOR='#383c4a' +ACCENTBG='#353945' +HEADERBG='#404552' +ROW='#2a2e3a' +HOVER='#a0cc75' +NAV='#2e323e' + +# AniNIX palette +ANINIXBOLD='#df0000' +ANINIXTEXT='#ffffff' +ANINIXBG='#000000' +ANINIXACCENTBG='#303030' +ANINIXHEADERBG='#151515' +ANINIXROW='#2a2a2a' +ANINIXHOVER='#af0000' +ANINIXNAV='#000000' + +(curl -ks "$URI"; echo; echo ".home a { + color: $ANINIXBOLD; +} +.bounding { + border: 1px solid #FFF; + border-radius: 15px; + margin: 0; + margin-top: 20px; + padding: 10px; + background-color: #000; + margin-bottom: 30px; + display: block; +} +") \ + | sed "s/$BOLDTEXT/$ANINIXBOLD/gI" \ + | sed "s/$TEXT/$ANINIXTEXT/gI" \ + | sed "s/$ACCENTBG/$ANINIXACCENTBG/gI" \ + | sed "s/$HEADERBG/$ANINIXHEADERBG/gI" \ + | sed "s/$ROW/$ANINIXROW/gI" \ + | sed "s/$NAV/$ANINIXNAV/gI" \ + | sed "s/$HOVER/$ANINIXHOVER/gI" \ + | sed "s/$BGCOLOR/$ANINIXBG/gI" > /var/lib/gitea/custom/public/css/theme-aninix.css + +cd /var/lib/gitea/web-snippets +head="$(curl -ks https://aninix.net/ | egrep -B 99999 '^
/var/lib/gitea/custom/public/"$i".html +done diff --git a/roles/Foundation/files/custom/bin/sitemap.php b/roles/Foundation/files/custom/bin/sitemap.php new file mode 100644 index 0000000..1fed5c8 --- /dev/null +++ b/roles/Foundation/files/custom/bin/sitemap.php @@ -0,0 +1,32 @@ + /var/lib/gitea/custom/sitemap.xml` + * + * Builds according to https://www.sitemaps.org/protocol.html + */ + +/* Globals */ +$path="/srv/http/aninix.net/"; + +echo ' + +'; + +exec("(echo /srv/http/aninix.net/index.php; find /srv/http/aninix.net/pages -type f; find /srv/http/aninix.net/martialarts/ -type f) | egrep \.php\$ | egrep -v ^./unlisted\|^./errors/\|head.php\|foot.php\|test\|Template\|darknet", $output); +foreach ($output as &$file) { + echo ' +'; +echo ' https://aninix.net/'.substr($file,strlen($path)).' +'; +echo ' '.date('Y-m-d',filemtime($file)).' +'; +echo ' +'; +} + +/* Print footer */ +echo ' +'; +?> diff --git a/roles/Foundation/files/custom/options/label/AniNIX b/roles/Foundation/files/custom/options/label/AniNIX new file mode 100644 index 0000000..e60abaf --- /dev/null +++ b/roles/Foundation/files/custom/options/label/AniNIX @@ -0,0 +1,7 @@ +#e11d21 Blocked ; There are functional or technical reasons this can't be implemented yet +#eb6420 Duplicate ; Another issue or PR already describes this issue +#bfd4f2 On-hold ; Evaluated but not enough resources to complete now +#009800 Peer-review ; Being reviewed for quality prior to merge +#207de5 RFC ; More information and feedback is needed +#fbca04 Wontfix ; Not a bug -- way it works +#9c4ac2 In-progress ; Being worked. diff --git a/roles/Foundation/files/custom/options/license/AniNIX-WTFPL b/roles/Foundation/files/custom/options/license/AniNIX-WTFPL new file mode 100644 index 0000000..bffb679 --- /dev/null +++ b/roles/Foundation/files/custom/options/license/AniNIX-WTFPL @@ -0,0 +1,31 @@ +# http://www.wtfpl.net/about/ + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + + ANINIX ADDENDUM + + Trademark 2017 (https://aninix.net/) + + The "AniNIX" name and |> logo are trademarked as of 2017/11/21. + AniNIX materials may be reproduced and re-used (though you must + contact the admins of the network to get written permission to use + the AniNIX name or logo) so long as such reproduction or re-use + does not inhibit the original AniNIX use of the same. + + Attribution is appreciated for other materials but not legally + required or necessary. + + "AniNIX" trademark serial: 87177883 + |> Logo trademark serial: 87177887 diff --git a/roles/Foundation/files/custom/public/.well-known/acme-challenge/aninix-test b/roles/Foundation/files/custom/public/.well-known/acme-challenge/aninix-test new file mode 100755 index 0000000..e69de29 diff --git a/roles/Foundation/files/custom/public/adhan/AdhanIcon.png b/roles/Foundation/files/custom/public/adhan/AdhanIcon.png new file mode 100755 index 0000000..fea6163 Binary files /dev/null and b/roles/Foundation/files/custom/public/adhan/AdhanIcon.png differ diff --git a/roles/Foundation/files/custom/public/adhan/adhan.js b/roles/Foundation/files/custom/public/adhan/adhan.js new file mode 100755 index 0000000..eb74e5f --- /dev/null +++ b/roles/Foundation/files/custom/public/adhan/adhan.js @@ -0,0 +1,13 @@ +// Thanks to https://stackoverflow.com/questions/31060722/cordova-refuse-to-execute-inline-event-handler-because-it-violates-the-followi + +document.addEventListener('DOMContentLoaded', function () { + document.querySelector('img').addEventListener('click', clickHandler); + main(); +}); + +function clickHandler(element) { + document.getElementById("adhan").play(); +} + +function main() { +} diff --git a/roles/Foundation/files/custom/public/adhan/adhan.mp3 b/roles/Foundation/files/custom/public/adhan/adhan.mp3 new file mode 100755 index 0000000..a45daea Binary files /dev/null and b/roles/Foundation/files/custom/public/adhan/adhan.mp3 differ diff --git a/roles/Foundation/files/custom/public/adhan/index.php b/roles/Foundation/files/custom/public/adhan/index.php new file mode 100755 index 0000000..9881ccc --- /dev/null +++ b/roles/Foundation/files/custom/public/adhan/index.php @@ -0,0 +1,28 @@ + + +AniNIX::Adhan \\ Call to prayer + + + + + + + +
+

Click to play

+ + + + +
+ + diff --git a/roles/Foundation/files/custom/public/adhan/subhanallah.jpg b/roles/Foundation/files/custom/public/adhan/subhanallah.jpg new file mode 100755 index 0000000..2c55fb4 Binary files /dev/null and b/roles/Foundation/files/custom/public/adhan/subhanallah.jpg differ diff --git a/roles/Foundation/files/custom/public/aninix.xml b/roles/Foundation/files/custom/public/aninix.xml new file mode 100755 index 0000000..6f01f41 --- /dev/null +++ b/roles/Foundation/files/custom/public/aninix.xml @@ -0,0 +1,135 @@ + + AniNIX | News + https://foundation.aninix.net/assets/img/AniNIX.png + https://foundation.aninix.net/assets/img/AniNIX.png + + + 2019-12-10T12:28:00Z + + AniNIX + + + + + + IoT Security + https://www.banfacialrecognition.com/ + 2019-12-23T12:40:00Z + +

The AniNIX uses IoT devices as part of the Geth automation project, and as such we're watching IoT security threads. If folks aren't aware, there's a fight brewing between FFTF / EFF and facial recognition, and they're going after Ring hard.
+

    +
  • Countries like China (and America a little bit) are looking at using facial recognition for a social credit score a la "Black Mirror". https://www.youtube.com/watch?v=CLo3e1Pak-Y +
  • Ring started a campaign to get police officers to push Ring cameras in homes in return for access to their Neighbors community. https://www.eff.org/deeplinks/2019/08/five-concerns-about-amazon-rings-deals-police +
  • FFTF started a campaign to ban facial recognition. https://www.banfacialrecognition.com/ +
  • The rest of the security community has also found facial recognition unreliable. https://www.securityweek.com/massive-errors-found-facial-recognition-tech-us-study +
  • Ring was exposed as having issues with bootstrapping and other security issues. https://www.vice.com/en_us/article/epg4xm/amazon-ring-camera-security +
  • Some Ring accounts were breached with credential stuffing. https://latesthackingnews.com/2019/12/23/hackers-continue-to-dump-weak-ring-doorbell-credentials-online/ +
  • FFTF started a No-Ring campaign. https://www.ringsafetywarning.com/ +
  • EFF has issued a formal rebuff. https://www.eff.org/deeplinks/2019/12/ring-throws-customers-under-bus-after-data-breach
  • +
+

+ +

This is likely to get worse before it gets better. If you are deploying Ring cameras (like we did before all this dropped), make sure you're at least following a few good practices. (More here: https://www.businessinsider.com/how-to-protect-amazon-ring-against-hackers-spying-2019-12#7-make-sure-your-ring-software-is-up-to-date-7) +

    +
  • Only deploy the Ring cameras external to the home. +
  • Turn on 2FA. +
  • Isolate your cameras on a guest wifi network. +
  • Make sure your Ring account's email is signed up on https://haveibeenpwned.com/.
  • +
+

+
+
+ + + Warrant Canary + https://foundation.aninix.net/AniNIX/WarrantCanary + 2019-12-10T12:28:00Z + We want everyone to know that, despite recent law enforcement and Senate cries that they can't do their job without backdoors into encrypted communications (source: https://www.eff.org/deeplinks/2019/12/senate-judiciary-committee-wants-everyone-know-its-concerned-about-encryption), the AniNIX is committed to protecting your communications with our network.

+ We do offer proxies of some semipublic information to outside sources -- Discord and GitHub (http://github.com/AniNIX) -- but our internal services over SSH, IRCS, and HTTPS are hardened and audited.

+ We are now additionally offering a warrant canary. This is a GPG-based device for users to know that our communications have not been compromised. If you are cybersecurity-minded, please watch the linked repo.
+
+ + + FFTF Security Pledge + https://www.securitypledge.com/ + 2018-04-06T14:30:00Z + Fight for the Future and Demand Progress have published a Security Pledge in the wake of the Facebook failures. This pledge includes the following tenants: give users access and control over their data, strong data protections, limit data collection, equal protections for all, and resist improper government access and surveillance. The AniNIX will be taking on this pledge. + + + + + Recent WebSec Audit + https://www.htbridge.com/websec/?id=C8qMLuWD + 2018-03-17T02:46:00Z + We recently underwent a security audit with High-Tech Bridge's free Web Security suite. With some remediation, we now earn an A- on Web security and an A+ on SSL security. If you're looking for a free method to test your webserver, take a look at them. Please be aware that they don't respect Let's Encrypt, so be aware your scores may suffer.Click here for the SSL scan report. + + + + Hardware Diagnostics + https://discordapp.com/channels/@me + 2018-02-07T13:23:00Z + We are noticing significant performance degradation from the integrated Marvell controller on the AniNIX::Forge2 frame. Due to cost reasons, the AniNIX is not locally highly available for some components -- we don't have another hypervisor to transfer VM's to. As such, the AniNIX services will be offline from 1700 to 2000 CST today while we route around the failing controller. We thank you for your patience, and we will be online from Discord to answer questions. + + + + Congressional Resolution of Disapproval + https://www.markey.senate.gov/news/press-releases/markey-net-neutrality-resolution-reaches-40-vote-milestone-in-the-senate + 2018-01-16T00:00:00Z + In the resistance to the FCC vote, we have a foothold in the Senate. Watch Markey's resolution of dissatisfaction in the FCC as it passes through the Senate. Remember: You are the resistance. + + + + Spectre/Meltdown Patching + https://meltdownattack.com + 2018-01-05T12:30:10Z + Meltdown and Spectre are nasty speculative-execution vulnerabilities impacting most processors from ARM, Intel, and AMD -- patches are just now being released by the distributions. We are taking emergency patching tonight around 2200 Central. Patch your systems regularly over the next couple months, and insure IoT devices are behind a Geth overlay or some similar barrier. + + + Licensing Under WTFPL + https://aninix.net/wiki/AniNIX::Wiki:Copyrights + 2017-05-31T12:30:10Z + The AniNIX is now licensed under WTFPL. Feel free to redistribute our products as you'd like. Only the AniNIX name and core icon are not covered by this license. + + + Wannacry Has Changed + https://aninix.net/cgit/cgit.cgi/ExploitChecks/tree/wannacry.ps1 + 2017-05-19T12:30:10Z + WannaCry Ransomware is now infecting thousands upon thousands of Windows systems. Most researchers are recommending disabling SMBv1, even though some killswitches and decryption software exist. We now provide a PowerShell script in the ExploitChecks repository to identify if SMBv1 is still enabled. If you need a decryption package, see Wanakiwi. Download here. + + + + IDS Changes + https://aninix.net/wiki/Cerberus + 2017-02-17T14:10:00Z + We will be updating our intrusion detection paradigm with experimental Cerberus prevention. Attacks against the aninix.net domain will result in permanent and complete firewall bans at the network edge. Make sure your attack tools ignore this domain if you want to access our services. + + + + CVE-2016-4484 + http://hmarco.org/bugs/CVE-2016-4484/CVE-2016-4484_cryptsetup_initrd_shell.html + 2016-11-16T16:26:00Z + This bug allows an attacker with physical or remote access to grab a root shell via attacking dm-crypt. Use the following one-liner to patch. "sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="panic=5 /' /etc/default/grub; grub-mkconfig -o /boot/grub/grub.cfg; grub-install --target=i386-pc /dev/sda" + + + + Rule 41 + https://www.eff.org/deeplinks/2016/04/rule-41-little-known-committee-proposes-grant-new-hacking-powers-government + 2016-9-23T16:00:00Z + The EFF has identified a provision in recent legislation that would allow US federal government to search for warrants in any district that may have carried the communication. This means the federal government can search for a favorable judge to go after Tor users and other privacy advocates. This legislation for Tor users and those running Tor, VPN, or remote-access services. The warrants could be used to hack into private machines and rummage for incriminating evidence. Join the fight to stop this legislation. + + + + Trademarking + https://aninix.net/wiki/AniNIX::Wiki:General_disclaimer + 2016-9-13T16:00:00Z + The AniNIX is currently filing for Class 009, 038, and 041 trademarks for the name and logo. Please do not create or distribute new products using this name without prior written permission from the admins. + + + + Caution on Windows! + http://www.omgubuntu.co.uk/2016/08/windows-10-anniversary-update-delete-partition + 2016-8-3T16:00:00Z + Be careful installing Windows 10 Updates, particularly the Anniversary Update. It may delete your Linux installs! The AniNIX has disabled the Windows Update service on all Windows hosts and will only update immediately after a backup cycle. + + +
diff --git a/roles/Foundation/files/custom/public/css/emby-web-dark-theme-BenZuser.css b/roles/Foundation/files/custom/public/css/emby-web-dark-theme-BenZuser.css new file mode 100755 index 0000000..929080c --- /dev/null +++ b/roles/Foundation/files/custom/public/css/emby-web-dark-theme-BenZuser.css @@ -0,0 +1,472 @@ +/* Borrowed from https://rawgit.com/BenZuser/Emby-Web-Dark-Themes-CSS/master/RED/theme.css */ +/* +_________________________________________________________________________ +------------------------- COLOR HEX & RGB CODES ------------------------- + + RED : #E81123 & (232, 17, 35) + DARK COLOR : #94131E + + ORANGE : #FF8000 & (255, 128, 0) + DARK COLOR : #BF6000 + + ORANGE PLEX : #CC7B19 & (204, 123, 25) + DARK COLOR : #B35A00 + + YELLOW : #BDBD00 & (189, 189, 0) + DARK COLOR : #757500 + + GREEN : #52B54B & (82, 181, 75) + DARK COLOR : #3E8437 + + BLUE : #4285F4 & (66, 133, 244) + DARK COLOR : #0C57D6 + + BLUE DARK : #3367d6 & (51,103,214) + BLUE DARK (DARK) : #1f4698 + + PURPLE : #673AB7 & (103, 58, 183) + DARK COLOR : #3F2471 + + GRAY : #7F7F7F & (127, 127, 127) + DARK COLOR : #535353 + + PINK : #F707DF & (247, 7, 223) + DARK COLOR : #C604B3 + +*/ +/* +_________________________________________________________________________ +----------------------- EMBY THEME : ACCENT COLORS ---------------------- + + ---------- Table of Contents ---------- + + 1. ACCENT COLORS + 1.1 Buttons + 1.1.1 Checkboxes + 1.1.2 Rectangles + 1.1.3 Links & Text buttons + 1.1.4 Others + 1.2 Details + 1.2.1 Circles + 1.2.2 Indicators + 1.2.3 Fonts + 1.2.4 Icons + 1.2.5 Dialogs & Action Sheets + 1.2.6 Others + 1.3 Fixes + + 2. MISCELLANEOUS MODIFICATIONS + 2.1 Buttons + 2.2 Details + 2.2.1 Scrollbars + 2.2.2 Logos + 2.2.3 Others + 2.3 Fixes + 2.3.1 Dark Colors + +*/ +/* ------------------------ 1. ACCENT COLORS ------------------------- */ +/* ----- 1.1 Buttons ----- */ +/* 1.1.1 Checkboxes */ +.emby-checkbox:checked + span + span + .checkboxOutline > .checkboxOutlineTick { + background-color: #E81123 !important; } + +.emby-checkbox:checked + span + span + .checkboxOutline, +.progressring-spiner { + border-color: #E81123 !important; } + +.emby-checkbox:focus + span + .emby-checkbox-focushelper { + background-color: #E81123 !important; + opacity: 0.26 !important; } + +/* 1.1.2 Rectangles */ +.raised { + background: #404040 !important; + color: #fff !important; } + +.button-submit, .button-accent { + background: #E81123 !important; + color: #fff; } + +.raised-mini.emby-button { + background: #E81123 !important; + color: #ffffff !important; } + +/* Restart */ +.btnRestartContainer.emby-button { + background: #E81123 !important; + color: #fff; } + +/* Play & Resume */ +.btnPlaySimple.emby-button { + background: #E81123 !important; + color: #fff; } + +.btnResume.emby-button { + background: #94131E !important; + color: #fff; } + +/* 1.1.3 Links & Text buttons */ +.button-link, .button-flat-accent, .button-accent-flat, +.textlink { + color: #E81123 !important; } + +.button-link:hover, .button-flat-accent:hover, +.button-accent-flat:hover, .textlink:hover { + color: #9b9b9b !important; } + +.button-link:active, .button-flat-accent:active, +.button-accent-flat:active, .textlink:active { + color: #94131E !important; } + +/* Top Header */ +.emby-tab-button-active { + color: #E81123 !important; } + +/* 1.1.4 Others */ +/* Alpha Picker */ +.alphaPickerButton-selected, .alphaPickerButton-tv:focus { + background-color: #E81123 !important; + color: #fff !important; } + +/* Radio Buttons */ +.mdl-radio__inner-circle { + background: #E81123 !important; } + +.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle { + border: 2px solid #E81123 !important; } + +.mdl-radio__button:checked:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle { + -webkit-box-shadow: 0 0 0 10px rgba(232, 17, 35, 0.26) !important; + box-shadow: 0 0 0 10px rgba(232, 17, 35, 0.26) !important; } + +/* Control Group Buttons */ +div[data-role="controlgroup"] a.ui-btn-active[data-role='button'] { + background: #E81123 !important; + color: #ffffff !important; } + +/* ----- 1.2 Details ----- */ +/* 1.2.1 Circles */ +/*.listItemIcon:not(.listItemIcon-transparent) { + background-color: $accent-color !important; }*/ +.dashboardSection i.listItemIcon.md-icon { + background-color: #E81123 !important; } + +.scheduledTaskPaperIconItem[data-status="Running"] i.listItemIcon.md-icon { + background-color: #94131E !important; } + +/* Focus Helper circles */ +.paper-icon-button-light:focus { + color: #E81123 !important; } + +/* 1.2.2 Indicators */ +.countIndicator, .playedIndicator { + background: #E81123 !important; } + +.levelNormal { + background-color: #E81123 !important; } + +.fullSyncIndicator { + background: #E81123 !important; + color: #fff; } + +.playstatebutton-played i, .ratingbutton-withrating i { + color: #E81123 !important; } + +p#pUpToDate i.md-icon { + background-color: #E81123 !important; } + +/* Loading Spinners */ +.mdl-spinner__layer-1, .mdl-spinner__layer-2, .mdl-spinner__layer-3, +.mdl-spinner__layer-4 { + border-color: #E81123 !important; } + +.progressring-spiner { + border: 0.25em solid #E81123 !important; } + +/* 1.2.3 Fonts */ +.selectLabelFocused, .textareaLabelFocused, .inputLabelFocused { + color: #E81123 !important; } + +.secondary.listItemBodyText span, div#divRunningTasks span { + color: #E81123 !important; } + +/* 1.2.4 Icons */ +.starIcon, .mediaInfoTimerIcon { + color: #E81123 !important; } + +/* Top Header */ +.btnActiveCast { + color: #E81123 !important; } + +/* Now Playing Bar & Now Playing Page */ +.repeatActive, +button.btnCommand.repeatToggleButton.autoSize.nowPlayingPageRepeatActive { + color: #E81123 !important; } + +/* 1.2.5 Dialogs & Action Sheets */ +/* 1.2.6 Others */ +/* General Accent Color Modifications */ +:focus { + outline: #E81123 auto 5px; } + +select:focus { + border-color: #E81123 !important; } + +::selection { + background-color: #94131E !important; } + +.emby-input:focus, .emby-textarea:focus { + border-color: #E81123 !important; } + +/* Google Now Playing Bar & Now Playing Page */ +.iconOsdProgressInner, .mdl-slider__background-lower, .sliderBubble, +.mdl-slider::-webkit-slider-thumb { + background: #E81123 !important; } + +.mdl-slider:focus::-webkit-slider-thumb { + -webkit-box-shadow: 0 0 0 10px rgba(232, 17, 35, 0.26); + box-shadow: 0 0 0 10px rgba(232, 17, 35, 0.26) !important; } + +/* Firefox Now Playing Bar & Now Playing Page */ +.mdl-slider::-moz-range-thumb, .mdl-slider::-moz-range-progress { + background: #E81123 !important; } + +.mdl-slider:focus::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(232, 17, 35, 0.26) !important; } + +/* Progress Bars */ +.itemProgressBarForeground { + background-color: #E81123 !important; } + +.taskProgressInner { + background: #E81123 !important; } + +/* Google Progress Bars */ +progress::-webkit-progress-value { + background: #E81123 !important; } + +/* Firefox Progress Bars */ +progress::-moz-progress-bar { + background: #E81123 !important; } + +/* Edge Progress Bars */ +progress { + background: #E81123 !important; } + +/* Main Drawers */ +.navMenuDivider { + background: #262626 !important; } + +.adminDrawerLogo { + border-bottom: 1px solid #262626 !important; } + +.mainDrawer { + background: #181818 !important; } + +.sidebarHeader { + color: #bbbbbb !important; } + +.navMenuOption { + color: #ffffff !important; } + +.navMenuOption.navMenuOption-selected { + background: #252528 !important; + color: #E81123 !important; } + +.navMenuOption:hover { + background: #252528 !important; + color: #9b9b9b !important; } + +/* Metadata Editor */ +div.jstree-wholerow.jstree-wholerow-clicked:hover, +div.jstree-wholerow.jstree-wholerow-clicked, +div.jstree-wholerow.jstree-wholerow-hovered { + background: #252528 !important; } + +.jstree-anchor.jstree-clicked, +.jstree-anchor.jstree-clicked.jstree-hovered { + background: #252528 !important; + color: #E81123 !important; } + +/* Multi-select */ +.itemSelectionPanel { + border: 1px solid #E81123 !important; } + +.selectionCommandsPanel { + background: #E81123 !important; + color: #fff; } + +/* upNextDialog */ +.upNextDialog-countdownText { + color: #E81123 !important; } + +/* Selection Bars */ +.emby-select-selectionbar, .emby-textarea-selectionbar, +.emby-input-selectionbar { + background-color: #E81123 !important; } + +/* Media Info Detail Image */ +.itemDetailImage.loaded:hover { + border: 1px solid #E81123 !important; } + +/* 1.3 Fixes */ +/* ------------------ 2. MISCELLANEOUS MODIFICATIONS ----------------- */ +/* ----- 2.1 Buttons ----- */ +/* Circles */ +.fab { + background-color: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + -webkit-transition: none !important; + -o-transition: none !important; + transition: none !important; } + +/* ----- 2.2 Details ----- */ +/* 2.2.1 Scrollbars */ +/* Google Chrome */ +::-webkit-scrollbar-corner { + background-color: #3B3B3B; } + +::-webkit-scrollbar { + width: 10px; + height: 10px; + background-color: #3B3B3B; } + +::-webkit-scrollbar-thumb { + -webkit-border-radius: 2px; + border-radius: 2px; + background: #888888; } + +/* Google Chrome - Dashboard Drawer */ +div.scrollContainer.smoothScrollY::-webkit-scrollbar-corner { + background-color: transparent !important; } + +div.scrollContainer.smoothScrollY::-webkit-scrollbar { + width: 2px; + height: 2px; + background-color: transparent !important; } + +div.scrollContainer.smoothScrollY::-webkit-scrollbar-thumb { + -webkit-border-radius: 2px; + border-radius: 2px; + background: #888888; } + +/* Google Chrome - Filter Dialog */ +.dynamicFilterDialog::-webkit-scrollbar-corner { + background-color: transparent !important; } + +.dynamicFilterDialog::-webkit-scrollbar { + width: 2px; + height: 2px; + background-color: transparent !important; } + +.dynamicFilterDialog::-webkit-scrollbar-thumb { + -webkit-border-radius: 2px; + border-radius: 2px; + background: #888888; } + +/* 2.2.2 Logos */ +/* Login Page */ +.imgLogoIcon { + content: url(https://cdn.rawgit.com/BenZuser/Emby-Dark-Themes-Resources/master/images/logos-and-icons/RED/logo.png) !important; } + +/* Main Drawer Mobile */ +.adminDrawerLogo img { + content: url(https://cdn.rawgit.com/BenZuser/Emby-Dark-Themes-Resources/master/images/logos-and-icons/RED/logo.png) !important; } + +/* Home Page */ +.pageTitleWithLogo { + background-image: url(https://cdn.rawgit.com/BenZuser/Emby-Dark-Themes-Resources/master/images/logos-and-icons/RED/logo.png) !important; } + +/* 2.2.3 Others */ +/* CSS Box */ +#txtCustomCss { + height: 300px !important; + overflow-y: scroll !important; } + +/* Select Box */ +select option { + background-color: #2b2b2b !important; + color: #ffffff !important; } + +/* Dialogs */ +.formDialogHeader:not(.formDialogHeader-clear), +.formDialogFooter:not(.formDialogFooter-clear) { + background-color: #121212 !important; + color: #fff; } + +/* Headers */ +.skinHeader { + background-color: #080808 !important; + color: #fff !important; } + +.skinHeader-withBackground { + background-color: #080808 !important; } + +@supports (backdrop-filter: blur(1.5em)) or (-webkit-backdrop-filter: blur(1.5em)) { + .skinHeader-blurred { + background: rgba(20, 20, 20, 0.7) !important; + -webkit-backdrop-filter: blur(1.5em) !important; + backdrop-filter: blur(1.5em) !important; } } +.skinHeader.semiTransparent { + -webkit-backdrop-filter: none !important; + backdrop-filter: none !important; + background-color: rgba(0, 0, 0, 0.4) !important; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(10%, rgba(0, 0, 0, 0.7)), color-stop(10%, transparent)) !important; + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.7) 10%, transparent) !important; + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.7) 10%, transparent) !important; + background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.7) 10%, transparent) !important; + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 10%, transparent) !important; } + +.appfooter { + background: #080808 !important; + color: #fff !important; } + +@supports (backdrop-filter: blur(10px)) or (-webkit-backdrop-filter: blur(10px)) { + .appfooter-blurred { + background: rgba(24, 24, 24, 0.7) !important; + -webkit-backdrop-filter: blur(20px) !important; + backdrop-filter: blur(20px) !important; } } +/* TV Global Modifications */ +.emby-tab-button-active.emby-button-tv { + color: #fff !important; } + +.guide-channelHeaderCell, .guide-channelTimeslotHeader { + background: #2e2e2e !important; } + +.guide-programTextIcon { + color: #1e1e1e !important; + background: #555 !important; } + +.guide-headerTimeslots { + color: #ccc !important; } + +/* ----- 2.3 Fixes ----- */ +/* 2.3.1 Dark Colors */ +.autoorganizetable tbody tr:nth-child(odd) td, .autoorganizetable tbody tr:nth-child(odd) th { + background-color: #222326 !important; } + +.autoorganizetable > .table > tbody > tr { + border: 1px solid #222326 !important; } + +/* +_____________________________________________________________________ + + Emby Dark Themes is maintained by Ben Z (BenZuser) + with the contribution of Happy2Play. +_____________________________________________________________________ + +*/ +/* TEMPORARY FIXES */ +/* Links */ +.searchSuggestionsList a, .noItemsMessage a, a.lnkPremiere { + color: #E81123 !important; } + +.searchSuggestionsList a:hover, .noItemsMessage a:hover, +a.lnkPremiere:hover { + color: #9b9b9b !important; } + +.searchSuggestionsList a:active, .noItemsMessage a:active, +a.lnkPremiere:active { + color: #94131E !important; } diff --git a/roles/Foundation/files/custom/public/css/theme-aninix.css b/roles/Foundation/files/custom/public/css/theme-aninix.css new file mode 100755 index 0000000..10de384 --- /dev/null +++ b/roles/Foundation/files/custom/public/css/theme-aninix.css @@ -0,0 +1,16 @@ +.chroma .hl{background-color:#3f424d}.chroma .lnt{color:#7f7f7f}.chroma .ln{color:#7f7f7f}.chroma .k{color:#f63}.chroma .kc{color:#fa1}.chroma .kd{color:#9daccc}.chroma .kn{color:#fa1}.chroma .kp{color:#5f8700}.chroma .kr{color:#f63}.chroma .kt{color:#9daccc}.chroma .na{color:#8a8a8a}.chroma .nb{color:#9daccc}.chroma .bp{color:#9daccc}.chroma .nc{color:#fa1}.chroma .no{color:#fa1}.chroma .nd{color:#9daccc}.chroma .ni{color:#fa1}.chroma .ne{color:#af8700}.chroma .nf{color:#9daccc}.chroma .nl{color:#fa1}.chroma .nn{color:#fa1}.chroma .nx{color:#9daccc}.chroma .nt{color:#9daccc}.chroma .nv{color:#9daccc}.chroma .vc{color:#f81}.chroma .vg{color:#fa1}.chroma .vi{color:#fa1}.chroma .s{color:#1af}.chroma .sa{color:#1af}.chroma .sb{color:#af0000}.chroma .sc{color:#1af}.chroma .dl{color:#1af}.chroma .sd{color:#6a737d}.chroma .s2{color:#af0000}.chroma .se{color:#f63}.chroma .sh{color:#1af}.chroma .si{color:#fa1}.chroma .sx{color:#fa1}.chroma .sr{color:#97c}.chroma .s1{color:#af0000}.chroma .ss{color:#fa1}.chroma .m{color:#1af}.chroma .mb{color:#1af}.chroma .mf{color:#1af}.chroma .mh{color:#1af}.chroma .mi{color:#1af}.chroma .il{color:#1af}.chroma .mo{color:#1af}.chroma .o{color:#f63}.chroma .ow{color:#5f8700}.chroma .c{color:#6a737d}.chroma .ch{color:#6a737d}.chroma .cm{color:#6a737d}.chroma .c1{color:#6a737d}.chroma .cs{color:#637d}.chroma .cp{color:#fc6}.chroma .cpf{color:#fc6}.chroma .gd{color:#fff;background-color:#5f3737}.chroma .ge{color:#ef5}.chroma .gr{color:#f33}.chroma .gh{color:#fa1}.chroma .gi{color:#fff;background-color:#3a523a}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gu{color:#9daccc}.chroma .gt{color:#f63}.chroma .w{color:#bbb}:root{--color-primary: #df0000;--color-primary-dark-1: #93b373;--color-primary-dark-2: #9fbc82;--color-primary-dark-3: #abc492;--color-primary-dark-4: #b7cda1;--color-primary-dark-5: #cfddc1;--color-primary-dark-6: #e7eee0;--color-primary-dark-7: #f8faf6;--color-primary-light-1: #7a9e55;--color-primary-light-2: #6c8c4c;--color-primary-light-3: #5f7b42;--color-primary-light-4: #516939;--color-primary-light-5: #364626;--color-primary-light-6: #1b2313;--color-primary-light-7: #080b06;--color-primary-alpha-10: #df000019;--color-primary-alpha-20: #df000033;--color-primary-alpha-30: #df00004b;--color-primary-alpha-40: #df000066;--color-primary-alpha-50: #df000080;--color-primary-alpha-60: #df000099;--color-primary-alpha-70: #df0000b3;--color-primary-alpha-80: #df0000cc;--color-primary-alpha-90: #df0000e1;--color-secondary: #454a57;--color-secondary-dark-1: #505665;--color-secondary-dark-2: #5b6273;--color-secondary-dark-3: #71798e;--color-secondary-dark-4: #7f8699;--color-secondary-dark-5: #8c93a4;--color-secondary-dark-6: #9aa0af;--color-secondary-dark-7: #a8adba;--color-secondary-dark-8: #b6bac5;--color-secondary-dark-9: #c4c7d0;--color-secondary-dark-10: #d2d4db;--color-secondary-dark-11: #dfe1e6;--color-secondary-dark-12: #edeef1;--color-secondary-dark-13: #fbfbfc;--color-secondary-light-1: #373b46;--color-secondary-light-2: #292c34;--color-secondary-light-3: #1c1e23;--color-secondary-light-4: #0e0f11;--color-secondary-alpha-10: #454a5719;--color-secondary-alpha-20: #454a5733;--color-secondary-alpha-30: #454a574b;--color-secondary-alpha-40: #454a5766;--color-secondary-alpha-50: #454a5780;--color-secondary-alpha-60: #454a5799;--color-secondary-alpha-70: #454a57b3;--color-secondary-alpha-80: #454a57cc;--color-secondary-alpha-90: #454a57e1;--color-red: #db2828;--color-orange: #f2711c;--color-yellow: #fbbd08;--color-olive: #b5cc18;--color-green: #21ba45;--color-teal: #00b5ad;--color-blue: #2185d0;--color-violet: #6435c9;--color-purple: #a333c8;--color-pink: #e03997;--color-brown: #a5673f;--color-grey: #767a85;--color-black: #1e222e;--color-gold: #a1882b;--color-white: #ffffff;--color-diff-removed-word-bg: #6f3333;--color-diff-added-word-bg: #3c653c;--color-diff-removed-row-bg: #3c2626;--color-diff-moved-row-bg: #818044;--color-diff-added-row-bg: #283e2d;--color-diff-removed-row-border: #634343;--color-diff-moved-row-border: #bcca6f;--color-diff-added-row-border: #314a37;--color-diff-inactive: #353846;--color-body: #000000;--color-box-header: #404652;--color-box-body: #303440;--color-text-dark: #dbe0ea;--color-text: #bbc0ca;--color-text-light: #a6aab5;--color-text-light-2: #8a8e99;--color-text-light-3: #707687;--color-footer: #000000;--color-timeline: #4c525e;--color-input-text: #d5dbe6;--color-input-background: #292d39;--color-input-border: #454a57;--color-input-border-hover: #505667;--color-navbar: #2a2a2a;--color-light: #00000028;--color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));--color-light-border: #ffffff28;--color-hover: #ffffff10;--color-active: #ffffff16;--color-menu: #000000;--color-card: #000000;--color-markup-table-row: #ffffff06;--color-markup-code-block: #292d39;--color-button: #353846;--color-code-bg: #2a2a2a;--color-code-sidebar-bg: #000000;--color-shadow: #00000060;--color-secondary-bg: #2a2a2a;--color-text-focus: #fff;--color-expand-button: #3c404d;--color-placeholder-text: #6a737d;--color-editor-line-highlight: var(--color-primary-light-5);--color-project-board-bg: var(--color-secondary-light-2);--color-caret: var(--color-text);--color-reaction-bg: #ffffff12;--color-reaction-active-bg: var(--color-primary-alpha-40)}::-webkit-calendar-picker-indicator{filter:invert(.8)}.ui.horizontal.segments>.segment{background-color:#000000}[data-tooltip]:before,[data-tooltip]:after{background:#1b1c1d!important;border-color:#1b1c1d!important;color:#dbdbdb!important}[data-tooltip]:before{box-shadow:1px 1px #1b1c1d!important}.ui.green.progress .bar{background-color:#684}.ui.progress.success .bar{background-color:#7b9e57!important}.following.bar.light{background:#000000;border-color:var(--color-secondary-alpha-40)}.following.bar .top.menu a.item:hover{color:#fff}.feeds .list ul li.private{background:#303030}.ui.red.label,.ui.red.labels .label{background-color:#7d3434!important;border-color:#8a2121!important}.ui.yellow.label,.ui.yellow.labels .label{border-color:#664d02!important;background-color:#936e00!important}.ui.accordion .title:not(.ui){color:#dbdbdb}.ui.green.label,.ui.green.labels .label,.ui.basic.green.label{background-color:#2d693b!important;border-color:#2d693b!important}.ui.green.labels a.label:hover,.ui.basic.green.labels a.label:hover,a.ui.ui.ui.green.label:hover,a.ui.basic.green.label:hover{background-color:#3d794b!important;border-color:#3d794b!important;color:#fff!important}.ui.divider:not(.vertical):not(.horizontal){border-bottom-color:var(--color-secondary);border-top-color:transparent}.form .help{color:#7f8699}.ui .text.light.grey{color:#7f8699!important}.ui.form .fields.error .field textarea,.ui.form .fields.error .field select,.ui.form .fields.error .field input:not([type]),.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=datetime-local],.ui.form .fields.error .field input[type=email],.ui.form .fields.error .field input[type=number],.ui.form .fields.error .field input[type=password],.ui.form .fields.error .field input[type=search],.ui.form .fields.error .field input[type=tel],.ui.form .fields.error .field input[type=time],.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=file],.ui.form .fields.error .field input[type=url],.ui.form .field.error textarea,.ui.form .field.error select,.ui.form .field.error input:not([type]),.ui.form .field.error input[type=date],.ui.form .field.error input[type=datetime-local],.ui.form .field.error input[type=email],.ui.form .field.error input[type=number],.ui.form .field.error input[type=password],.ui.form .field.error input[type=search],.ui.form .field.error input[type=tel],.ui.form .field.error input[type=time],.ui.form .field.error input[type=text],.ui.form .field.error input[type=file],.ui.form .field.error input[type=url]{background-color:#522;border:1px solid #7d3434;color:#f9cbcb}.ui.form .field.error select:focus,.ui.form .field.error input:not([type]):focus,.ui.form .field.error input[type=date]:focus,.ui.form .field.error input[type=datetime-local]:focus,.ui.form .field.error input[type=email]:focus,.ui.form .field.error input[type=number]:focus,.ui.form .field.error input[type=password]:focus,.ui.form .field.error input[type=search]:focus,.ui.form .field.error input[type=tel]:focus,.ui.form .field.error input[type=time]:focus,.ui.form .field.error input[type=text]:focus,.ui.form .field.error input[type=file]:focus,.ui.form .field.error input[type=url]:focus{background-color:#522;border:1px solid #a04141;color:#f9cbcb}.ui.green.button,.ui.green.buttons .button{background-color:#df0000}.ui.green.button:hover,.ui.green.buttons .button:hover{background-color:#af0000}.ui.search>.results{background:#000000;border-color:var(--color-secondary)}.ui.search>.results .result:hover,.ui.category.search>.results .category .result:hover{background:var(--color-secondary)}.ui.search>.results .result .title{color:#dbdbdb}.ui.table>thead>tr>th{background:var(--color-secondary);color:#dbdbdb!important}.repository.file.list #repo-files-table tr{background:#2a2a2a}.repository.file.list #repo-files-table tr:hover{background-color:#393d4a!important}.repository.file.editor.edit .editor-preview,.repository.wiki.new .CodeMirror .editor-preview,.repository.file.editor.edit .editor-preview-side,.repository.wiki.new .CodeMirror .editor-preview-side,.repository.file.editor.edit+.editor-preview-side,.repository.wiki.new .CodeMirror+.editor-preview-side{background:#303030}.repository.file.editor.edit .editor-preview .markup.ui.segment,.repository.wiki.new .CodeMirror .editor-preview .markup.ui.segment,.repository.file.editor.edit .editor-preview-side .markup.ui.segment,.repository.wiki.new .CodeMirror .editor-preview-side .markup.ui.segment,.repository.file.editor.edit+.editor-preview-side .markup.ui.segment,.repository.wiki.new .CodeMirror+.editor-preview-side .markup.ui.segment{border-width:0}.overflow.menu .items .item{color:#9d9d9d}.overflow.menu .items .item:hover{color:#dbdbdb}.ui.list>.item>.content{color:var(--color-secondary-dark-6)!important}.repository .navbar .active.item,.repository .navbar .active.item:hover{border-color:transparent!important}.ui .info.segment.top{background-color:var(--color-secondary)!important}.repository .diff-stats li{border-color:var(--color-secondary)}.tag-code,.tag-code td{background:#303030!important}.tag-code td.lines-num{background-color:#3a3e4c!important}.tag-code td.lines-type-marker,td.blob-hunk{color:#dbdbdb!important}.ui.attached.info.message,.ui.info.message{box-shadow:0 0 0 1px #4b5e71 inset,0 0 transparent}.ui.bottom.attached.message{background-color:#2c662d;color:#df0000}.ui.bottom.attached.message .pull-right{color:#df0000}.ui.info.message{background-color:#2c3b4a;color:#9ebcc5}.ui .warning.header,.ui.warning.message{background-color:#542!important;border-color:#ec8}.ui.warning.message{color:#ec8;box-shadow:0 0 0 1px #ec8}.ui.warning.segment{border-color:#ec8}.ui.red.message,.ui.error.message{background-color:#522;color:#f9cbcb;box-shadow:0 0 0 1px #a04141 inset}.ui .error.header,.ui.error.message{background-color:#522!important;border-color:#a04141}.ui.error.segment{border-color:#a04141}.ui.red.button,.ui.red.buttons .button{background-color:#7d3434}.ui.red.button:hover,.ui.red.buttons .button:hover{background-color:#984646}.ui.positive.message{background-color:#0d491b;color:#df0000;box-shadow:0 0 0 1px #2d693b inset,0 0 transparent}.ui.negative.message{background-color:#50171199;color:#f9cbcb;box-shadow:0 0 0 1px #79474280 inset,0 0 transparent}.ui.list .list>.item .header,.ui.list>.item .header{color:#dedede}.ui.list .list>.item .description,.ui.list>.item .description{color:var(--color-secondary-dark-6)}.repository.file.list #repo-files-table tbody .svg.octicon-file-directory,.repository.file.list #repo-files-table tbody .svg.octicon-file-submodule{color:#7c9b5e}.repository.labels .ui.basic.black.label{background-color:#bbb!important}.lines-num{color:var(--color-secondary-dark-6)!important;border-color:var(--color-secondary)!important}td.blob-excerpt{background-color:#00000026}.lines-code.active,.lines-code .active{background:#534d1b!important}.ui.ui.ui.ui.table tr.active,.ui.ui.table td.active{color:#dbdbdb}.ui.active.label{background:#393d4a;border-color:#393d4a;color:#dbdbdb}.repository .ui.attached.message.isSigned.isVerified{background-color:#394829;color:var(--color-secondary-dark-6)}.repository .ui.attached.message.isSigned.isVerified.message{color:#df0000}.repository .ui.attached.message.isSigned.isVerified.message .ui.text{color:var(--color-secondary-dark-6)}.repository .ui.attached.message.isSigned.isVerified.message .pull-right{color:#df0000}.repository .ui.attached.message.isSigned.isVerifiedUntrusted{background-color:#4a3903;color:var(--color-secondary-dark-6)}.repository .ui.attached.message.isSigned.isVerifiedUntrusted.message{color:#c2c193}.repository .ui.attached.message.isSigned.isVerifiedUntrusted.message .ui.text{color:var(--color-secondary-dark-6)}.repository .ui.attached.message.isSigned.isVerifiedUntrusted.message a{color:#c2c193}.repository .ui.attached.message.isSigned.isVerifiedUnmatched{background-color:#4e3321;color:var(--color-secondary-dark-6)}.repository .ui.attached.message.isSigned.isVerifiedUnmatched.message{color:#c2a893}.repository .ui.attached.message.isSigned.isVerifiedUnmatched.message .ui.text{color:var(--color-secondary-dark-6)}.repository .ui.attached.message.isSigned.isVerifiedUnmatched.message a{color:#c2a893}.repository .ui.attached.message.isSigned.isWarning{background-color:#50171199}.repository .ui.attached.message.isSigned.isWarning.message{color:#d07d7d}.repository .ui.attached.message.isSigned.isWarning.message .ui.text{color:#d07d7d}.ui.header .sub.header{color:var(--color-secondary-dark-6)}.ui.dividing.header{border-bottom:1px solid var(--color-secondary)}.ui.modal>.header{background:var(--color-secondary);color:#dbdbdb}.ui.modal>.actions{background:var(--color-secondary);border-color:var(--color-secondary)}.ui.modal>.content{background:#000000}.minicolors-panel{background:var(--color-secondary)!important;border-color:#6a737d!important}.emoji[aria-label="check mark"],.emoji[aria-label="currency exchange"],.emoji[aria-label="TOP arrow"],.emoji[aria-label="END arrow"],.emoji[aria-label="ON! arrow"],.emoji[aria-label="SOON arrow"],.emoji[aria-label="heavy dollar sign"],.emoji[aria-label=copyright],.emoji[aria-label=registered],.emoji[aria-label="trade mark"],.emoji[aria-label=multiply],.emoji[aria-label=plus],.emoji[aria-label=minus],.emoji[aria-label=divide],.emoji[aria-label="curly loop"],.emoji[aria-label="double curly loop"],.emoji[aria-label="wavy dash"],.emoji[aria-label="paw prints"],.emoji[aria-label="musical note"],.emoji[aria-label="musical notes"]{filter:invert(100%)}.edit-diff>div>.ui.table{border-left-color:var(--color-secondary)!important;border-right-color:var(--color-secondary)!important}.CodeMirror.cm-s-default .cm-property,.CodeMirror.cm-s-paper .cm-property{color:#af0000}.CodeMirror.cm-s-default .cm-header,.CodeMirror.cm-s-paper .cm-header{color:#9daccc}.CodeMirror.cm-s-default .cm-quote,.CodeMirror.cm-s-paper .cm-quote{color:#090}.CodeMirror.cm-s-default .cm-keyword,.CodeMirror.cm-s-paper .cm-keyword{color:#cc8a61}.CodeMirror.cm-s-default .cm-atom,.CodeMirror.cm-s-paper .cm-atom{color:#ef5e77}.CodeMirror.cm-s-default .cm-number,.CodeMirror.cm-s-paper .cm-number{color:#ff5656}.CodeMirror.cm-s-default .cm-def,.CodeMirror.cm-s-paper .cm-def{color:#e4e4e4}.CodeMirror.cm-s-default .cm-variable-2,.CodeMirror.cm-s-paper .cm-variable-2{color:#00bdbf}.CodeMirror.cm-s-default .cm-variable-3,.CodeMirror.cm-s-paper .cm-variable-3{color:#085}.CodeMirror.cm-s-default .cm-comment,.CodeMirror.cm-s-paper .cm-comment{color:#8e9ab3}.CodeMirror.cm-s-default .cm-string,.CodeMirror.cm-s-paper .cm-string{color:#a77272}.CodeMirror.cm-s-default .cm-string-2,.CodeMirror.cm-s-paper .cm-string-2{color:#f50}.CodeMirror.cm-s-default .cm-meta,.CodeMirror.cm-s-paper .cm-meta,.CodeMirror.cm-s-default .cm-qualifier,.CodeMirror.cm-s-paper .cm-qualifier{color:#ffb176}.CodeMirror.cm-s-default .cm-builtin,.CodeMirror.cm-s-paper .cm-builtin{color:#b7c951}.CodeMirror.cm-s-default .cm-bracket,.CodeMirror.cm-s-paper .cm-bracket{color:#997}.CodeMirror.cm-s-default .cm-tag,.CodeMirror.cm-s-paper .cm-tag{color:#f1d273}.CodeMirror.cm-s-default .cm-attribute,.CodeMirror.cm-s-paper .cm-attribute{color:#bfcc70}.CodeMirror.cm-s-default .cm-hr,.CodeMirror.cm-s-paper .cm-hr{color:#999}.CodeMirror.cm-s-default .cm-url,.CodeMirror.cm-s-paper .cm-url{color:#c5cfd0}.CodeMirror.cm-s-default .cm-link,.CodeMirror.cm-s-paper .cm-link{color:#d8c792}.CodeMirror.cm-s-default .cm-error,.CodeMirror.cm-s-paper .cm-error{color:#dbdbeb}footer .container .links>*{border-left-color:#888}.repository.file.list #repo-files-table tbody .svg{color:var(--color-secondary-dark-6)}.repository.release #release-list>li .detail .dot{background-color:#505667;border-color:#000000}.tribute-container{box-shadow:0 .25rem .5rem #0009}.repository .repo-header .ui.huge.breadcrumb.repo-title .repo-header-icon .avatar{color:#2a2a2a}img[src$="/img/matrix.svg"]{filter:invert(80%)}#git-graph-container li .time{color:#6a737d}#git-graph-container.monochrome #rel-container .flow-group{stroke:#696969;fill:#696969}#git-graph-container.monochrome #rel-container .flow-group.highlight{stroke:#a9a9a9;fill:#a9a9a9}#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-5{stroke:#5543b1;fill:#5543b1}#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-5{stroke:#7058e6;fill:#7058e6}#git-graph-container #rev-list li.highlight.hover{background-color:#ffffff1a}#git-graph-container .ui.buttons button#flow-color-monochrome.ui.button{border-left-color:#4c505c;border-left-style:solid;border-left-width:1px}.mermaid-chart{filter:invert(84%) hue-rotate(180deg)}.is-loading:after{border-color:#4a4c58 #4a4c58 #d7d7da #d7d7da}.markup-block-error{border:1px solid rgba(121,71,66,.5)!important;border-bottom:none!important} + +.home a { + color: #df0000; +} +.bounding { + border: 1px solid #FFF; + border-radius: 15px; + margin: 0; + margin-top: 20px; + padding: 10px; + background-color: #000; + margin-bottom: 30px; + display: block; +} + diff --git a/roles/Foundation/files/custom/public/img/AniNIX.png b/roles/Foundation/files/custom/public/img/AniNIX.png new file mode 100755 index 0000000..3b01845 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/AniNIX.png differ diff --git a/roles/Foundation/files/custom/public/img/avatar_default.png b/roles/Foundation/files/custom/public/img/avatar_default.png new file mode 100755 index 0000000..3b01845 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/avatar_default.png differ diff --git a/roles/Foundation/files/custom/public/img/favicon.png b/roles/Foundation/files/custom/public/img/favicon.png new file mode 120000 index 0000000..8b0f8d2 --- /dev/null +++ b/roles/Foundation/files/custom/public/img/favicon.png @@ -0,0 +1 @@ +AniNIX.png \ No newline at end of file diff --git a/roles/Foundation/files/custom/public/img/gitea-lg.png b/roles/Foundation/files/custom/public/img/gitea-lg.png new file mode 120000 index 0000000..8b0f8d2 --- /dev/null +++ b/roles/Foundation/files/custom/public/img/gitea-lg.png @@ -0,0 +1 @@ +AniNIX.png \ No newline at end of file diff --git a/roles/Foundation/files/custom/public/img/gitea-safari.svg b/roles/Foundation/files/custom/public/img/gitea-safari.svg new file mode 120000 index 0000000..8b0f8d2 --- /dev/null +++ b/roles/Foundation/files/custom/public/img/gitea-safari.svg @@ -0,0 +1 @@ +AniNIX.png \ No newline at end of file diff --git a/roles/Foundation/files/custom/public/img/gitea-sm.png b/roles/Foundation/files/custom/public/img/gitea-sm.png new file mode 120000 index 0000000..8b0f8d2 --- /dev/null +++ b/roles/Foundation/files/custom/public/img/gitea-sm.png @@ -0,0 +1 @@ +AniNIX.png \ No newline at end of file diff --git a/roles/Foundation/files/custom/public/img/icons b/roles/Foundation/files/custom/public/img/icons new file mode 120000 index 0000000..5aebaa4 --- /dev/null +++ b/roles/Foundation/files/custom/public/img/icons @@ -0,0 +1 @@ +/srv/yggdrasil/Pictures/AniNIX/Icons/ \ No newline at end of file diff --git a/roles/Foundation/files/custom/public/img/qr.png b/roles/Foundation/files/custom/public/img/qr.png new file mode 100755 index 0000000..3dbec4c Binary files /dev/null and b/roles/Foundation/files/custom/public/img/qr.png differ diff --git a/roles/Foundation/files/custom/public/img/rss.png b/roles/Foundation/files/custom/public/img/rss.png new file mode 100755 index 0000000..0925b26 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/rss.png differ diff --git a/roles/Foundation/files/custom/public/img/social/discord.ico b/roles/Foundation/files/custom/public/img/social/discord.ico new file mode 100755 index 0000000..ac7417a Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/discord.ico differ diff --git a/roles/Foundation/files/custom/public/img/social/facebook.png b/roles/Foundation/files/custom/public/img/social/facebook.png new file mode 100755 index 0000000..b8770ee Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/facebook.png differ diff --git a/roles/Foundation/files/custom/public/img/social/github.png b/roles/Foundation/files/custom/public/img/social/github.png new file mode 100755 index 0000000..17fe0e3 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/github.png differ diff --git a/roles/Foundation/files/custom/public/img/social/linkedin.png b/roles/Foundation/files/custom/public/img/social/linkedin.png new file mode 100755 index 0000000..9aa6024 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/linkedin.png differ diff --git a/roles/Foundation/files/custom/public/img/social/nextdoor.png b/roles/Foundation/files/custom/public/img/social/nextdoor.png new file mode 100755 index 0000000..e94c029 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/nextdoor.png differ diff --git a/roles/Foundation/files/custom/public/img/social/rss.png b/roles/Foundation/files/custom/public/img/social/rss.png new file mode 100755 index 0000000..0925b26 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/rss.png differ diff --git a/roles/Foundation/files/custom/public/img/social/strava.png b/roles/Foundation/files/custom/public/img/social/strava.png new file mode 100755 index 0000000..5e918f0 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/strava.png differ diff --git a/roles/Foundation/files/custom/public/img/social/wtfpl.png b/roles/Foundation/files/custom/public/img/social/wtfpl.png new file mode 100755 index 0000000..035f8ea Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/wtfpl.png differ diff --git a/roles/Foundation/files/custom/public/img/social/youtube.png b/roles/Foundation/files/custom/public/img/social/youtube.png new file mode 100755 index 0000000..68dda67 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/social/youtube.png differ diff --git a/roles/Foundation/files/custom/public/img/ushf.jpg b/roles/Foundation/files/custom/public/img/ushf.jpg new file mode 100755 index 0000000..6520ea8 Binary files /dev/null and b/roles/Foundation/files/custom/public/img/ushf.jpg differ diff --git a/roles/Foundation/files/custom/public/img/wtfpl.png b/roles/Foundation/files/custom/public/img/wtfpl.png new file mode 100755 index 0000000..035f8ea Binary files /dev/null and b/roles/Foundation/files/custom/public/img/wtfpl.png differ diff --git a/roles/Foundation/files/custom/public/makwa_sdfiewo/20200505.mp4 b/roles/Foundation/files/custom/public/makwa_sdfiewo/20200505.mp4 new file mode 100755 index 0000000..e793b06 Binary files /dev/null and b/roles/Foundation/files/custom/public/makwa_sdfiewo/20200505.mp4 differ diff --git a/roles/Foundation/files/custom/public/makwa_sdfiewo/20200507.mp4 b/roles/Foundation/files/custom/public/makwa_sdfiewo/20200507.mp4 new file mode 100755 index 0000000..93da9dc Binary files /dev/null and b/roles/Foundation/files/custom/public/makwa_sdfiewo/20200507.mp4 differ diff --git a/roles/Foundation/files/custom/public/makwa_sdfiewo/reunion.mp4 b/roles/Foundation/files/custom/public/makwa_sdfiewo/reunion.mp4 new file mode 100755 index 0000000..91b47af Binary files /dev/null and b/roles/Foundation/files/custom/public/makwa_sdfiewo/reunion.mp4 differ diff --git a/roles/Foundation/files/custom/public/martialarts/2019_benchmark.pdf b/roles/Foundation/files/custom/public/martialarts/2019_benchmark.pdf new file mode 100755 index 0000000..5ed675f Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/2019_benchmark.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/falling.jpg b/roles/Foundation/files/custom/public/martialarts/falling.jpg new file mode 100755 index 0000000..a41e9eb Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/falling.jpg differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Black-1stDan.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Black-1stDan.pdf new file mode 100755 index 0000000..6c62096 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Black-1stDan.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Blue.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Blue.pdf new file mode 100755 index 0000000..2f0b8d3 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Blue.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Brown.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Brown.pdf new file mode 100755 index 0000000..0f42648 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Brown.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Green.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Green.pdf new file mode 100755 index 0000000..1c94d73 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Green.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Orange.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Orange.pdf new file mode 100755 index 0000000..248f281 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Orange.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Purple.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Purple.pdf new file mode 100755 index 0000000..97a7679 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Purple.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Red.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Red.pdf new file mode 100755 index 0000000..d004ca1 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Red.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Temp.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Temp.pdf new file mode 100755 index 0000000..9f0fa51 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Temp.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Yellow.pdf b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Yellow.pdf new file mode 100755 index 0000000..ff3f84c Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/hapkido_belt_sheets/Yellow.pdf differ diff --git a/roles/Foundation/files/custom/public/martialarts/index.html b/roles/Foundation/files/custom/public/martialarts/index.html new file mode 100755 index 0000000..7f7b27c --- /dev/null +++ b/roles/Foundation/files/custom/public/martialarts/index.html @@ -0,0 +1,558 @@ + + + + + + AniNIX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+

We are open despite COVID-19 -- those attending in person will need to sign a waiver of health and follow all state requirements, including wearing a mask.

+
+ +
+
+

+ AniNIX Martial Arts +

+

Open-source, research-driven self-defense and personal health

+

AniNIX Martial Arts is a small martial arts collective focusing on research-driven martial arts. Our core style is USHF HapKiDo, but we are influenced by HEMA, Razmafzar, Kali, Shaolin, Silat, JKD, BJJ, and many other systems. We are a research-driven group -- we encourage cross-training with other systems and will bring in new concepts regularly. The class is open to all experience levels, gender identity, gender expression, sexual orientation, religious or cultural identity, socioecomic status, or age (above 14), in Southcentral Wisconsin -- we will fit your training to your needs and goals.

Drop-ins are welcome, and registration is cheap. We hope you'll give us a chance to show you what we can do.

+
+
+
+
+
+

+ + Open-source +

+

+ We want your training with our system to become a part of your life. This means that we provide access to a revision-controlled copy of our notes that all our students can download, keep, and contribute to. We're tired of the old era where how the system works is kept hidden from students and piecemealed out as a marketing ploy -- we want to be as trasparent as possible in how our program and our martial art function. Transparency keeps our instructors honest and our students engaged -- this means a better martial arts experience for everyone. +

+
+
+

+ + Research-driven +

+

+ Our system is always growing. We are a United States HapKiDo Federation (USHF) school, and that gives us access to high-quality instructors and seminar material each year from across the US. We also maintain good relationships with other schools in our area -- we want our students to examine what they're learing and make sure that it works, and that means looking at different perspectives. +

+
+
+
+

+ + Low-cost +

+

We are non-profit group -- we train because we feel like it makes life better, not to make money. As such, our costs are publicly documented and our rates match the same. Classes will be informed of potential changes to costs well in advance, and we use recurring payments. We want you thinking about your training, not how you're going to pay for it.

+

+

    +
  • Cost: $10 per month in-person; $5 per month livestream -- pay below.
  • +
  • Lessons:Mondays and Thursdays 7-8:30 p.m.
  • +
  • Sparring: Mondays and Thursdays 6-7 p.m.
  • +
  • Shaolin Workouts: Saturday mornings at 8 a.m. by livestream only
  • +
  • Location: 225 Blaser Drive, Belleville, WI
  • +
  • What to bring: Exercise clothes and water
  • +

+
+
+

+ + Real-life First +

+

+ Everyone is welcome! Class attendance is not mandated and belt-testing is not required to train. As a courtesy, please inform the class of your absence or intended late arrival -- real-life comes first, and we're happy to work with your needs. As long as one person shows, we'll have class -- the smaller the class, the more tailored it is, but the bigger classes mean more partners and body types.

+

+ Our focus is also on what you will actually use. While we appreciate traditional and esoteric training for self-development, our weekly classes are focused on modern techniques and training methods so that you get the most out of your time. Our goal is to help create a community of prepared and healthy citizens, and we believe martial arts helps build that in a way no other activity can. +

+
+
+
+
+
+
+

Follow us on social media

+

We want to stay in touch with you, so we are present on the social media platforms we find applicable.
Have one you want us on? Contact us and let us know!

+
+
+

 

+
RSS
+
Discord
+
NextDoor
+
+
+
+

 

+
+
+
+
+
+ + +
+
+

Our storefront

+

AniNIX Martial Arts has to charge some fees in order to operate. We hope you find these reasonable -- we do our best to keep costs as low as possible and our budget is public. Please reach out on Discord or IRC if you have questions or concerns.

+

We really don't like talking about money -- we're here to help people learn, not make a buck. So, all of our class signups are recurring charges each month -- that way, we don't have to pester you. You're welcome to cancel at any time. To cancel, just contact us on any platform and an admin will take care of it for you.

+

Current students: Because our space is currently limited, please make sure to note which days and times you're coming on-site at the sign-up page.

+

 

+ +
+
+
+
+ +
+
+

+ + On-site classes +

+

On-site classes are $10 a month, plus the minimal transaction fee -- you'll be charged automatically each month so you don't have to worry about it. These funds go to pay for insurance, HVAC, mats, cleaning supplies, etc. This subscription covers on-site training on any of our listed times and access to our livestream and media library.

+

Your first class with us is free -- please come try us out before you put any money down.

+

+ + + + +

+ + + +

+
+
+

+ + Remote classes +

+

Remote-only classes are available at $5/month for prior students. This gets you access to our livestream classes and our media library of prior classes. This helps offset the upkeep costs for our web hosting and offers some parity with our on-site students.

+

These are intended as a continuing-education option for students with background in martial arts who aren't able to attend classes in-person due to distance or schedule -- they are not a substitute for in-person training.

+

+ + + + +

+ + + +

+
+
+
+

+ + T-Shirt +

+

T-shirts are $25 each -- they're made of a light, breathable black fabric with our logo across the back. Please contact an administrator on Discord or Facebook with your size.

+

T-Shirts are limited quantity -- we currently have 2 Medium and 1 Small in stock. T-shirt runs are only done on class request for cost reasons.

+

+ + + + +

+ + + +

+
+
+

+ + Patch +

+

Patches are $5 -- they're meant to be sewn or ironed onto gis, gear bags, backpacks, etc. They're a great way to show off your loyalty to the group and pride in your hard work!

+

+

+ + +
+
+

+ +

+ + + +

+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/roles/Foundation/files/custom/public/martialarts/maqotw.xml b/roles/Foundation/files/custom/public/martialarts/maqotw.xml new file mode 100755 index 0000000..a143060 --- /dev/null +++ b/roles/Foundation/files/custom/public/martialarts/maqotw.xml @@ -0,0 +1,581 @@ + + AniNIX::WebServer\\ Martial Arts Quote of the Week + https://aninix.net/mediawiki/images/9/9b/MartialArtsIcon.png + https://aninix.net/mediawiki/images/9/9b/MartialArtsIcon.png + + + 2013-12-31T12:00:02Z + + Connor Ford + + + https://aninix.net/martialarts/maqotw.xml + + + https://aninix.net/martialarts/classes2019p2 + + + Connor Ford + + Registration Open for 2019 Session 2 + 2019-02-26T00:00:00Z + 2019 Session 2 links are now available on the homepage. Please register to keep the cost low and ensure we keep the space! + + + + https://aninix.net/martialarts/classes + + + Connor Ford + + Classes Resume 9/17/2018 + 2018-08-15T00:00:00Z + AniNIX Martial Arts is now open for business again. We are accepting registration through our wonderful hosts Belleville Community Education. Cost is $45 for adults ($35 ages 14-18) per session of 7 or 8 weeks. That's $4 per hour of training for a great program in a great space. We need YOU, though: 10 adults to hold our times. Register today -- links on our homepage! https://aninix.net/martialarts/ + + + + https://aninix.net/martialarts/maqotw.xml/cardillo + + + Connor Ford + + Joseph Cardillo Quote + 2018-01-09T00:00:00Z + One of the greatest gifts of the martial arts is that they ultimately guide us to new levels of spirituality. -- Joseph Cardillo + + + + https://aninix.net/martialarts/maqotw.xml/hiatus + + + Connor Ford + + AniNIX Martial Arts on Hiatus + 2017-11-27T10:44:00 + We are on hiatus for the winter -- we didn't have enough support to hold our space at VACT. We're in talks with Iron Pagoda and may have options in Belleville. Keep in touch -- we'll post any seminars we'll be attending. If anyone is looking for an immediate martial arts home, please join #martialarts on IRC, and I'll help you find a place. + + + + https://aninix.net/martialarts/maqotw.xml/paulatted + + + Paul McCarthy at TED + + Paul McCarthy at TED + 2016-09-07T06:00:00Z + I just came across a TED talk from a martial arts instructor I’ve had the privilege of training with a couple times, the last time in a seminar of mental plasticity and martial arts. In this talk, Mr. McCarthy posits that martial arts (or dance or music or any other art that encourages movement and creativity) is a key part of your health and that it has a place in the healthcare industry. As we also work in the healthcare industry, I thought folks might find this interesting. Enjoy! + + + + + https://aninix.net/martialarts/maqotw.xml/may16sem + + + Epic Martial Arts Group + + May Seminar Details Up! + 2016-04-19T06:00:00Z + New seminar details have been posted to the seminar page. We have a HapKiDo/Silat seminar available May 7th. + + + https://aninix.net/martialarts/maqotw.xml/s16sem + + + Epic Martial Arts Group + + Spring Seminar Details Up! + 2016-03-02T06:00:00Z + New seminar details have been posted to the seminar page. We have Arnis and HapKiDo seminars available April 9th. + + + + https://aninix.net/martialarts/maqotw.xml/irc + + + Epic Martial Arts Group + + IRC Channel now available! + 2014-11-02T06:00:00Z + We now have an IRC channel, #martialarts, on irc.aninix.net for anyone who'd like to come by. + + + + https://aninix.net/martialarts/maqotw.xml/pacq + + + Epic Martial Arts Group + + Manny Pacquiao + 2014-11-02T06:00:00Z + In honor of Manny's recent bout, I offer a quote from him. "Life is meant to be a challenge, because challenges are what make you grow." + + + + https://aninix.net/martialarts/maqotw.xml/napoleon + + + Epic Martial Arts Group + + From Napoleon + 2014-04-06T06:00:00Z + Napoleon: "Never interrupt your enemy when he is making a mistake." + + + + https://aninix.net/martialarts/maqotw.xml/twowolves + + + Epic Martial Arts Group + + Two Wolves + 2014-04-06T06:00:00Z + ONE EVENING, AN ELDERLY + CHEROKEE BRAVE TOLD HIS + GRANDSON ABOUT A BATTLE THAT + GOES ON INSIDE PEOPLE. + + HE SAID "MY SON, THE BATTLE IS + BETWEEN TWO 'WOLVES' INSIDE US ALL. + ONE IS EVIL. IT IS ANGER, + ENVY, JEALOUSY, SORROW, + REGRET, GREED, ARROGANCE, + SELF-PITY, GUILT, RESENTMENT, + INFERIORITY, LIES, FALSE PRIDE, + SUPERIORITY, AND EGO. + + THE OTHER IS GOOD. + IT IS JOY, PEACE LOVE, HOPE SERENITY, + HUMILITY, KINDNESS, BENEVOLENCE, + EMPATHY, GENEROSITY, + TRUTH, COMPASSION AND FAITH." + + THE GRANDSON THOUGH ABOUT + IT FOR A MINUTE AND THEN ASKED + HIS GRANDFATHER: + + "WHICH WOLF WINS?..." + + THE OLD CHEROKEE SIMPLY REPLIED, + "THE ONE THAT YOU FEED" + + + + https://aninix.net/martialarts/maqotw.xml/roosevelt + + + Epic Martial Arts Group + + From Roosevelt + 2014-04-06T06:00:00Z + Theodore Roosevelt: "Don't hit at all if it is honorably possible to avoid hitting; but never hit softly." + + + + + https://aninix.net/martialarts/maqotw.xml/ + + + Epic Martial Arts Group + + Ip Man and Inner Demons + 2014-04-06T06:00:00Z + Ip Man: "We all have inner demons to fight. We call these demons 'fear', and 'hatred', and 'anger'. If you don't conquer them, then a life of a hundred years is a tragedy. If you do, a life of a single day can be a triumph." + + + + + https://aninix.net/martialarts/maqotw.xml/anger + + + Epic Martial Arts Group + + Anger and Water + 2014-11-02T06:00:00Z + Koichi Tohei in "Ki in Daily Life": "Pour some water into a tub and stir it up. Now try as hard as you can to calm the water with your hands; you will succeed in agitating it further. Let it stand undisturbed a while, and it will calm down by itself. The human brain works much the same way." + + + + + + https://aninix.net/martialarts/maqotw.xml/gandhi + + + Epic Martial Arts Group + + Gandi on Violence + 2014-09-07T06:00:00Z + "I do believe that, where there is only a choice between cowardice and violence, I would advise violence... I would rather have India resort to arms in order to defend her honour than that she should, in a cowardly manner, become or remain a helpless witness to her own dishonor. But I believe that nonviolence is infinitely superior to violence, forgiveness is more manly than punishment. Forgiveness adorns a soldier...But abstinence is forgiveness only when there is the power to punish; it is meaningless when it pretends to proceed from a helpless creature." ~Gandhi + + + + + https://aninix.net/martialarts/maqotw.xml/canvswill + + + Epic Martial Arts Group + + Can vs. Will + 2014-08-31T06:00:00Z + "It's not that I can and other's can't; it's that I will and others won't." What makes an exceptional martial artist is not his innate talents. It's his or her constant drive to improve, to never settle for what is. + + + + + https://aninix.net/martialarts/maqotw.xml/weakestofall + + + Epic Martial Arts Group + + Weakest of All + 2014-08-24T06:00:00Z + Mark Twain: "The weakest of all weak things is a virtue that has not been tested in the fire." Motions in space do not improve our knowledge of martial arts, if they are not also tested with people you can trust and train with. This working with people is the best way to increase our understanding of the form, function, and interactions. + + + + https://aninix.net/martialarts/maqotw.xml/persistence + + + Epic Martial Arts Group + + Persistence + 2014-08-17T06:00:00Z + Calvin Coolidge: "Nothing in this world can take the place of persistence. Talent will not: nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not: the world is full of educated derelicts. Persistence and determination alone are omnipotent." Something to ponder. + + + + https://aninix.net/martialarts/maqotw.xml/helpingweakness + + + Epic Martial Arts Group + + Helping Weakness + 2014-08-10T06:00:00Z + Jackie Chan: "We learn martial arts as helping weakness. You never fight for people to get hurt. You're always helping people." This must be the foundation of our martial arts; even the most destructive martial technique must be based in the desire to improve the lives of others, or we become no more than brigands. + + + + https://aninix.net/martialarts/maqotw.xml/nations + + + Epic Martial Arts Group + + Nations + 2014-08-03T06:00:00Z + William Francis Butler: "The nation that will insist upon drawing a broad line of demarcation between the fighting man and the thinking man is liable to find its fighting done by fools and its thinking by cowards." + + + + https://aninix.net/martialarts/maqotw.xml/learningandpain + + + Epic Martial Arts Group + + Learning and Pain + 2014-07-27T06:00:00Z + Anonymous: "Learning is a gift, even when pain is your teacher." + + + + https://aninix.net/martialarts/maqotw.xml/sphereofstrength + + + Epic Martial Arts Group + + Sphere of Strength + 2014-07-20T06:00:00Z + Morihei Ueshiba in "The Art of Peace": "Even the most powerful human being has a limited sphere of strength. Draw him outside of that sphere and into your own, and his strength will dissipate." + + + + + https://aninix.net/martialarts/maqotw.xml/whatsuseful + + + Epic Martial Arts Group + + What's Useful + 2014-05-11T06:00:00Z + Bruce Lee - "Absorb what is useful, discard what is not, and add what is uniquely your own." This should be everyone's approach to our practices. The techniques that work for me may not work for you, so you will always need to adapt your martial arts to fit what is useful for you. This is why none of our sessions are required - I want you to train what will help you grow, not what I might think will be helpful for you. + + + + + https://aninix.net/martialarts/maqotw.xml/cliff + + + Epic Martial Arts Group + + Never-ending Cliff + 2014-05-04T06:00:00Z + "To follow the path of Martial Arts is like climbing on a cliff that never ends. It demads absolute devotion for the task to be executed." -- Masutatsu Oyama, founder of Kyokushin Karate. As we've learned with groundwork, martial arts is a never-ending process of learning, self-dedication, and refinement. Let's not forget to maintain our drive for perfection, whether we have three weeks or thirty years experience. + + + + + https://aninix.net/martialarts/maqotw.xml/ueshiba + + + Epic Martial Arts Group + + O-Sensei Ueshiba + 2014-04-13T06:00:00Z + "Those who are skilled in combat do not become angered, and those who are skilled at winning do not become afraid. Thus the wise win before the fight, while the ignorant fight to win." -- O Sensei Ueshiba, founder of Aikido. This one is a thinker, and I'll let you come to your own conclusions. Hint: calm beats rage. + + + + + https://aninix.net/martialarts/maqotw.xml/swingsword + + + Epic Martial Arts Group + + Swing of the Sword + 2014-04-06T06:00:00Z + "It is easy to kill someone with a slash of a sword. It is hard to be impossible for others to cut down" - Yagyu Munenori. In the same vein as the pacifist quote last week, we want to remember that our goal is not to be as destructive as possible; the goal is to be as indesctructible as possible. We want ourselves and our loved ones to be safe; the reason we call our fighting stance our "fence" is because that is limit in which I care what other people are doing. Inside my fence, I have myself and my loved ones as my priority. So long as what happens outside my fence does not affect what is inside, I need not use martial technique. + + + + + https://aninix.net/martialarts/maqotw.xml/pacifism + + + Epic Martial Arts Group + + Pacifism + 2014-03-30T06:00:00Z + Another informal tag line in some martial arts is "only a warrior can choose pacifism." There is much debate among different martial arts about this, but to my mind a warrior is the only person who can choose not to fight. They have the option of using combative technique, and that alone is often enough of a deterrent to combat to allow a warrior to never need to fight. That being said, someone untrained in combat will always be at the mercy of those who are trained, simply because they have no leverage against such foes. Something to consider. + + + + https://aninix.net/martialarts/maqotw.xml/blackandwhite + + + Epic Martial Arts Group + + Black and White + 2014-03-23T06:00:00Z + There's an informal tag line that's occasionally thrown around martial arts: a black belt is a white belt who never quit. Everyone who's ever earned a black belt started as a white belt, and they decided that any weakness in their technique, conditioning, or personality wasn't going to keep them from reaching the level of a black belt. Make sure you do the same -- the journey begins! + + + + https://aninix.net/martialarts/maqotw.xml/seals + + + Epic Martial Arts Group + + Motto of the SEALS + 2014-03-16T06:00:00Z + The US Navy SEALS have a motto: The more you sweat in training, the less you bleed in battle. The Israelis take a similar approach with Krav Maga, and I am a firm believer in it. Regardless of one's experience level, the harder you train and the more you prepare for what the fight will actually be, the easier the fight will end up being. True, there will be always be someone better, but this is your best way to minimize that gap. + + + + https://aninix.net/martialarts/maqotw.xml/discipline + + + Epic Martial Arts Group + + Fruit of Discipline + 2014-03-10T06:00:00Z + "Self-respect is the fruit of discipline." - Abraham J. Heschel. I know we do a lot of push-ups, crunches, cardio, etc. And we spend a lot of time doing reps on a given technique, almost to the point of boredom. We come out every week and grind away on these techniques. The primary reason for wanting to do this is the technique's becoming ingrained in muscle memory. However, the discipline required of this pursuit is valuable. + + + + https://aninix.net/martialarts/maqotw.xml/lion + + + Epic Martial Arts Group + + Lion or Elephant + 2014-03-02T06:00:00Z + Anderson Silva raises a valid point about the application of strength in martial arts. "I don't think strength plays that big of a difference. If it's that big of a difference, then the elephant would be king of the jungle, not the lion," he says. The value of this is that in martial arts, it's the proper application of a technique that contains our opponent, not the raw application of force. + + + + + https://aninix.net/martialarts/maqotw.xml/walk + + + Epic Martial Arts Group + + Walk in Peace + 2014-02-23T06:00:00Z + Rickson Gracie of the Gracie brothers is one of the founding figures in modern Brazilian jiu-jitsu. I admire one of his quotes, because it should apply to all martial arts, regardless of creed. "The biggest gift I received as a martial artist is without a question the capacity to be in peace," he said. This is something we should all take to heart. + + + + https://aninix.net/martialarts/maqotw.xml/krav+founder + + + Epic Martial Arts Group + + Founder of Krav Maga + 2014-02-23T05:00:00Z + Imi Lichtenfeld founded Krav Maga. Growing up in Germany in the 30's, he was in danger of attacks by the Nazis. He said, "I began fighting anti-Semitism in the '30s. When the Hitler youth gangs used to single out Jewish young men on the streets, it was either hit or run. I found the hitting more satisfying." This philosophy became Imi's focus when he began training the Israeli military, and now it is the foundation of Israel's hand-to-hand combat system. + + + + https://aninix.net/martialarts/maqotw.xml/combat+and+art + + + Epic Martial Arts Group + + In combat, it's no longer art + 2014-02-16T06:00:00Z + This week's quote is from the Night Angel trilogy by Brent Weeks. One of the martial masters in that book said, "[Hit] a man twenty times ... and let him collapse. Then finish him. We're making [defeated enemies], not art." While I would not want this to be a primary philosophy of martial concepts for our group, it speaks to a very real martial truth: that on the combat field, once engaged, we have to be first and foremost taking care of ourselves. This means taking the safe strikes, rather than going for the one-thrust finish. If you can hit without being hit, you will win. + + + https://aninix.net/martialarts/maqotw.xml/ali + + + Epic Martial Arts Group + + The Great Ali + 2014-02-09T06:00:00Z + This week's quote is from the great boxer, Muhammad Ali. "Float like a butterfly; sting like a bee." This applies to all martial arts -- fluidity and relaxed muscle groups respond faster both to throwing strikes and grabs and to allowing the feet to move to fit the situation. The sting is from explosiveness -- good technique launches from good footing and quick reflexes to land where it needs to. Try thinking about that when you're working on your fence -- relax the shoulders, and get that back heel off the ground. + + + + https://aninix.net/martialarts/maqotw.xml/safe + + + Epic Martial Arts Group + + Safe... Or is it? + 2014-02-02T06:00:00Z + This week's quote builds on the last: "No place is more dangerous than a place of safety." We tend to go into "White" mode when we think we're safe, and this can make us complacent. Complacency is not our friend. This quote comes from Robert Ferrigno's "Prayers for the Assassin", found on Amazon at http://www.amazon.com/Prayers-Assassin-Novel-Robert-Ferrigno/dp/141650768X/ref=pd_bxgy_b_img_z + + + + https://aninix.net/martialarts/maqotw.xml/awareness + + + Epic Martial Arts Group + + Awareness + 2014-01-26T06:00:00Z + In all CCW classes, we are taught the Cooper Code, pioneered by Jeff Cooper. "White" is no awareness of one's surroundings at all. "Yellow" is casual alertness -- one is neither actively looking for a threat nor easily blindsided by one. "Orange" is being aware of a specific threat and analyzing ways to avoid or defeat it. "Red" is engaged in fight. Code "Yellow" is where we want to stay: unthreatened but alert. Since martial artists have the training to deal with threats on some level, there is no reason for us to ever be caught at "White", nor should we be finding ourselves in "Red" too often. Something to ponder. + + + + https://aninix.net/martialarts/maqotw.xml/learning + + + Epic Martial Arts Group + + Learning + 2014-01-12T06:00:00Z + Today's quote is about the value of learning. In Book 2 Chapter 11 of the Analects, Confucius says that "if a man keeps cherishing his old knowledge so as continually to be acquiring new, he may be a teacher of others." This is a reminder that we are never perfect and must always seek out new knowledge. Every art has some lesson to teach and some concept we can integrate into our own knowledge. + + + + https://aninix.net/martialarts/maqotw.xml/feints + + + Epic Martial Arts Group + + Feints + 2014-01-05T06:40:31Z + This week's quote is a little more literal than those previous. In all his travels and with all the martial arts he studied, Bruce Lee came to a simple conclusion: "Between two evenly-matched fighters, the one is the master of the feint will be the winner." Feints are a use of one of the most basic tactical concepts: action beats reaction. So, if you can make your opponent believe something and then hit him before he realizes his error, the victory is yours! + + + + https://aninix.net/martialarts/maqotw.xml/humility + + + Epic Martial Arts Group + + Humility in Competition + 2013-12-30T06:40:31Z + This week's quote comes from Confucius's "Analects". In Book 3 Chapter 7, it is written, "The Master said, `The student of virtue has no contentions. If it be said he cannot avoid them, shall this be in archery? But he bows complaisantly to his competitors; thus he ascends the hall, descends, and exacts the forfeit of drinking. In his contention, he is still the Chun-tsze.'" The term Chun-tsze is used to the Confucian concept of the master-scholar, which also applies to martial arts. In our martial arts, when we are training, we should give it our all, but when we run into a constraint, we should understand this is to improve our character and help our growth. + + + + https://aninix.net/martialarts/maqotw.xml/vessels + + + Epic Martial Arts Group + + Emptiness and Form + 2013-12-18T12:00:02Z + Our quote of the week comes from the "Tao Te Ching": "vessels are fashioned from empty clay; it is on their hollowness that their use depends." Just a small reminder that going into a fight with a specific plan usually starts more problems than it solves. Being fluid, flexible, and responsive is your greatest asset. + + + + https://aninix.net/martialarts/maqotw.xml/final+goal + + + Epic Martial Arts Group + + The Final Goal + 2013-12-10T12:00:02Z + The quote this week comes from the 17th-century Japanese text, the "Shoninki", by Natori Masazumi. It states that "destroying a man takes us away from the goal we seek to achieve". This statement is deceptively simple but very nuanced in its context; it is not saying that one shouldn't cause damage in the pursuit of self defense. What it is saying is that we should only supply enough force to stop the threat to our person. Once that threat is eliminated, we should make sure to supply aid and rehabilitation where the situation allows. Not only does this help to reduce future attacks, it will help you if you have to appear in court ((read this as "when you appear in court")). Something to think about. + + + + https://aninix.net/martialarts/maqotw.xml/water + + + Epic Martial Arts Group + + Water + 2013-12-04T12:00:02Z + Yes, yes, this is the generic Bruce Lee water quote. "Be like water, my friends." Despite how oft-used this quote is, the beautiful simplicity masks a martial arts truth -- relaxed and fluid beats stiff and strong in every engagment. That same fluidity applied mentally will give you an edge in learning and retaining new techniques. + + + + https://aninix.net/martialarts/maqotw.xml/protracted + + + Epic Martial Arts Group + + Protracted Conflict + 2013-11-25T12:00:02Z + The quote this week is again from Sun Tzu in the "Art of War": There "has never been a protracted war from which a country has benefited." This reminds us to neither start a conflict nor protract it when we should be able to leave. + + + + https://aninix.net/martialarts/maqotw.xml/martial+scholar + + + Epic Martial Arts Group + + Public Duty + 2013-11-19T12:00:02Z + Confucius leaves us this in his "Analects": "The scholar, trained for public duty, seeing threatening danger, is prepared to sacrifice his life. When the opportunity of gain is presented to him, he thinks of righteousness. In sacrificing, his thoughts are reverential. In mourning, his thoughts are about the grief which he should feel. Such a man commands our approbation indeed." Confucius wrote of the merits of the education, discipline, and wisdom; these are needed even in martial arts. + + + + https://aninix.net/martialarts/maqotw.xml/armed+and+unarmed + + + Epic Martial Arts Group + + Armed or Unarmed + 2013-11-12T12:00:02Z + This week's quote is from Machiavelli's "The Prince", Chapter 14. "It is not reasonable to suppose that one who is armed will obey willingly one who is unarmed, or that any unarmed man will remain safe among armed servants." In the case of a martial artist, the weapons is the martial artist himself or herself. Training hones that weapon to efficiency. On the other hand, this should remind us that we should not rely exclusively on others for our safety, which is yet another reason we train. + + + + https://aninix.net/martialarts/maqotw.xml/brandishing + + + Epic Martial Arts Group + + Bushido + 2013-10-21T12:00:02Z + The martial arts quote of the week is by Inazo Nitobe, who wrote the book "Bushido". "A dastard or a braggart was he who brandished his weapon on undeserved occasions." I've given you gys some small tricks to talk about martial arts with friends and such, but the main point of our discussion was that we shouldn't train martial arts looking to start fights, end fights, go out to bars and join fights, etc. Martial arts are comprised of many devastating techniques, and so we must be careful of when we use it. Moreover, from a tactical perspective, using martial arts publicly too often, without cause, or any combination thereof can cause the martial artist to become a target for challengers. We should train hard and often but fight rarely and only in the required defense of ourselves and those we care about. Just my two cents. + + + + https://aninix.net/martialarts/maqotw.xml/i+have+gung+fu + + + Epic Martial Arts Group + + Gungfu + 2013-10-14T12:00:02Z + The quote for this week is from Bruce Lee: "The baker has gungfu; the butcher has gungfu. Everyone has gungfu." As a commentary, remember that gungfu means mastery; the challenge for this week is to search for the mastery in others this week. + + + + diff --git a/roles/Foundation/files/custom/public/martialarts/mil-gi.jpeg b/roles/Foundation/files/custom/public/martialarts/mil-gi.jpeg new file mode 100755 index 0000000..40ebba2 Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/mil-gi.jpeg differ diff --git a/roles/Foundation/files/custom/public/martialarts/quarter-turn.jpeg b/roles/Foundation/files/custom/public/martialarts/quarter-turn.jpeg new file mode 100755 index 0000000..4da525a Binary files /dev/null and b/roles/Foundation/files/custom/public/martialarts/quarter-turn.jpeg differ diff --git a/roles/Foundation/files/custom/public/pay/coinbase-usdcoin.png b/roles/Foundation/files/custom/public/pay/coinbase-usdcoin.png new file mode 100755 index 0000000..18e6881 Binary files /dev/null and b/roles/Foundation/files/custom/public/pay/coinbase-usdcoin.png differ diff --git a/roles/Foundation/files/custom/public/pay/index.html b/roles/Foundation/files/custom/public/pay/index.html new file mode 100755 index 0000000..52facf9 --- /dev/null +++ b/roles/Foundation/files/custom/public/pay/index.html @@ -0,0 +1,317 @@ + + + + + + AniNIX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+ +
+

+ AniNIX +

+

Our Storefront

+

We have limited service offerings available. Please contact an admin on IRC first to arrange the contract, then use the item below to pay the invoice.

+
+
+
+ +
+
+

+ + Cybersecurity Consulting +

+

The AniNIX offers cybersecurity consulting and advice services on a limited basis. We bill at $20 an hour -- please select your need below after negotiating with an admin.

+

+

+ + +
+
+ + + + + +
+ + + +

+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/roles/Foundation/files/custom/public/pay/paypal.gif b/roles/Foundation/files/custom/public/pay/paypal.gif new file mode 100755 index 0000000..b666095 Binary files /dev/null and b/roles/Foundation/files/custom/public/pay/paypal.gif differ diff --git a/roles/Foundation/files/custom/public/pay/pci_scan_report-2019-08-14.pdf b/roles/Foundation/files/custom/public/pay/pci_scan_report-2019-08-14.pdf new file mode 100755 index 0000000..8fceb20 Binary files /dev/null and b/roles/Foundation/files/custom/public/pay/pci_scan_report-2019-08-14.pdf differ diff --git a/roles/Foundation/files/custom/public/pay/thank-you.html b/roles/Foundation/files/custom/public/pay/thank-you.html new file mode 100755 index 0000000..4b0fca2 --- /dev/null +++ b/roles/Foundation/files/custom/public/pay/thank-you.html @@ -0,0 +1,234 @@ + + + + + + AniNIX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+ +
+
+

+ Thank you for your purchase! +

+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/roles/Foundation/files/custom/public/pay/venmo.png b/roles/Foundation/files/custom/public/pay/venmo.png new file mode 100755 index 0000000..db9231b Binary files /dev/null and b/roles/Foundation/files/custom/public/pay/venmo.png differ diff --git a/roles/Foundation/files/custom/public/resources/KunjaDraftKnifework.pdf b/roles/Foundation/files/custom/public/resources/KunjaDraftKnifework.pdf new file mode 100755 index 0000000..c5551d7 Binary files /dev/null and b/roles/Foundation/files/custom/public/resources/KunjaDraftKnifework.pdf differ diff --git a/roles/Foundation/files/custom/public/shadowarch b/roles/Foundation/files/custom/public/shadowarch new file mode 100755 index 0000000..ed052d2 --- /dev/null +++ b/roles/Foundation/files/custom/public/shadowarch @@ -0,0 +1,322 @@ +#!/bin/bash + +function header () { + tput setaf 1 + tput bold + echo $@ + tput sgr0 + return +} +function help() { + echo Usage: ${0} '[OPTIONS]' + echo '\-A -- Audio optimizations from the Arch Wiki' + echo '\-d DISK -- Use the disk.' + echo '\-e -- Encrypt the root partition' + echo '\-g -- GUI packages and setup' + echo '\-h -- This helptext' + echo '\-k -- Kali Linux-like package additions' + echo '\-l FILE -- Log to a file' + echo '\-p -- Productivity package additions' + echo '\-P -- Power saving for laptops' + echo '\-s -- Create a layout for an AniNIX::Spartacus' + echo '\-m -- Skip disk operations and assume storage is mounted on /mnt' + echo '\-v -- Verbose output.' + echo '\-z -- Try to add all the packages on AniNIX::Core' + exit 1; +} + +# Partition controls +efipart=2; +bootpart=3; +rootpart=4; +partpoint=1; +partedcmd='mklabel gpt\nmkpart primary ext2 0 1MiB\nset 1 bios_grub on\n'; +function addNextPartition() { + partsize="$1" + parttype="$2" + partfs="$3" + nextpartpoint=$(( $partpoint + $partsize )) + partedcmd="${partedcmd}mkpart $parttype $partfs ${partpoint}MiB ${nextpartpoint}MiB"'\n' + partpoint=$nextpartpoint +} + +disk="/dev/sda" +bootsize=500; # Size in MB for /boot +# TODO Add LVM as an argument +while getopts "d:egkl:pmsvz" OPTION +do + case $OPTION in + A) audio=1 ;; + d) disk=${OPTARG} ;; + e) encrypt=1 ;; + g) gui=1 ;; + k) kali=1 ;; + l) exec script -e -f -c "/bin/bash $0 $(echo $@ | sed "s#-l ${OPTARG}##")" "${OPTARG}" ;; + p) productivity=1; gui=1 ;; + P) powersave=1 ;; + m) nodiskbuild=1 ;; + s) spartacus=1 ;; + v) set -x ;; + z) kitchensink=1 ;; + *) help + esac +done + +header Confirm options: +echo Spartacus set to: $spartacus +echo Encryption set to: $encrypt +echo GUI: $gui +echo Productivity: $productivity +echo Kali tools: $kali +echo All Core packages: $kitchensink +echo Disk to use: $disk \(Skip disk building? $nodiskbuild \) +printf "Is this OK? Type YES to continue: " +read answer +if [ "$answer" != "YES" ]; then + echo User did not confirm. + exit 1; +fi +# TODO Until Maat is back +# echo >> /etc/pacman.conf << EOM +# [AniNIX] +# SigLevel = Optional TrustAll +# Server = https://aninix.net/maat/ +# EOM + +pacman -Syy +if [ -z "$nodiskbuild" ]; then + header Allocating space + dd if=/dev/zero of="$disk" bs=1M count=1000 + + if [ ! -z "$spartacus" ]; then + # Insert an ExFAT data partition ahead of the rest. + export datapart=$efipart; + export efipart=$((efipart+1)) + export bootpart=$((bootpart+1)) + export rootpart=$(($rootpart+1)) + # Break the disk up into 4ths -- 2/4 go to data, 1/4 go to boot, and 1/4 to root + export disksize=$(($(fdisk -l $disk | head -n 1 | cut -f 5 -d ' ') / 1048576)) # Return disk size in MB + if [ "$disksize" == "" ]; then echo "Can't identify disk size"; exit 1; fi + if [ "$disksize" -lt 7788 ]; then echo "This drive is too small to be a Spartacus."; exit 1; fi # Must be 8GB or more to have 2GB root. + export bootsize=$(($disksize / 4)) + export datasize=$(($disksize / 2)) + addNextPartition $datasize primary ext4 + fi + # 550MiB for EFI with boot toggle + addNextPartition 550 primary fat32 + partedcmd="${partedcmd}toggle $efipart boot"'\n' + + # /boot + addNextPartition $bootsize primary fat32 + + # / (root) + partedcmd="${partedcmd}mkpart primary ext4 ${partpoint}MiB 100%%FREE"'\nquit\n\n' + printf "$partedcmd" | parted "$disk" + if [ ! -z "$spartacus" ]; then + #create data partition + pacman -S exfat-utils --noconfirm + mkfs.exfat "$disk""$datapart" + exfatlabel "$disk""$datapart" "AS-XPLATFRM" + fi + + header Making fat esp partition on "$disk""$efipart" + mkfs.fat -F32 "$disk""$efipart" + + header Making boot partition on "$disk""$bootpart" + mkfs.vfat "$disk""$bootpart" + + header Making root and mountpoints + if [ ! -z "$encrypt" ]; then + header Making encrypted root on "$disk""$rootpart" + modprobe dm-crypt + modprobe serpent_generic + header Formatting root -- make sure to enter YES followed by a strong passphrase. + cryptsetup luksFormat -c serpent-xts-plain64 -h sha512 --key-size 512 "$disk""$rootpart" + header Unlocking root + cryptsetup luksOpen "$disk""$rootpart" cryptroot + mkfs.xfs -f /dev/mapper/cryptroot + xfs_admin -L ROOT /dev/mapper/cryptroot + mount /dev/mapper/cryptroot /mnt + if [ $? -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi + else + header Making root on "$disk""$rootpart" + mkfs.xfs -f "$disk""$rootpart" + xfs_admin -L ROOT "$disk""$rootpart" + mount "$disk""$rootpart" /mnt + if [ $? -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi + fi + + mkdir /mnt/boot + mount "$disk""$bootpart" /mnt/boot + if [ "$?" -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi + mkdir /mnt/boot/efi + mount "$disk""$efipart" /mnt/boot/efi + if [ "$?" -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi +fi + + +# Install ArchLinux with basic clients for the AniNIX Services. +# * git for Foundation +# * elinks for WebServer and Wiki +# * openssh for SSH/SFTP +# * weechat for IRC +# * make for source packages +# * tor for anonymity +header Installing ArchLinux to device\(s\) on /mnt +export pkglist="base linux base-devel parted net-tools bind-tools git openssh make elinks weechat vim wget tor torsocks grub os-prober rsync openntpd tmux efibootmgr netctl dhcpcd" # shadowarch" TODO +if [ ! -z "$gui" ]; then + export pkglist="$pkglist"" xorg-server xfce4 chromium conky tigervnc xscreensaver" +fi +if [ ! -z "$spartacus" ]; then + export pkglist="$pkglist"" exfat-utils" +fi +if [ ! -z "$productivity" ]; then + export pkglist="$pkglist"" libreoffice-still gimp feh vlc evince openshot" +fi +if [ ! -z "$kali" ]; then + export pkglist="$pkglist"" extundelete testdisk nmap tcpdump hexedit dcfldd" + if [ ! -z "$gui" ]; then + export pkglist="$pkglist"" wireshark-gtk" + else + export pkglist="$pkglist"" wireshark-cli" + fi +fi +if [ ! -z "$kitchensink" ]; then + export pkglist="base base-devel $(wget -q -O - 'https://aninix.net/installed-packages.txt' | cut -f 1 -d ' ' | tr '\n' ' ')" +fi + +yes "" | pacstrap -i /mnt $pkglist +if [ $? -ne 0 ]; then header ERROR: Cannot continue -- pacstrap failed; exit 1; fi + +header Create FSTAB +genfstab -U /mnt >> /mnt/etc/fstab + +header Set time +sed -i 's/#en_US.UTF-8/en_US.UTF-8/' /mnt/etc/locale.gen +arch-chroot /mnt locale-gen +ln -sf /usr/share/zoneinfo/America/Chicago /mnt/etc/localtime +arch-chroot /mnt hwclock --systohc --utc + +header Setup bootloader +if [ -z "$nodiskbuild" ]; then + export rootuuid="$(blkid "$disk""$rootpart" | cut -f 2 -d '"')" + if [ ! -z "$encrypt" ]; then + export hookstring="$(grep 'HOOKS=' /mnt/etc/mkinitcpio.conf | grep -v '#')" + sed -i 's#'"$hookstring"'#HOOKS="base udev autodetect modconf block encrypt filesystems keyboard fsck"#' /mnt/etc/mkinitcpio.conf + sed -i 's#GRUB_CMDLINE_LINUX=""#GRUB_CMDLINE_LINUX="cryptdevice=UUID='$rootuuid':cryptroot"#' /mnt/etc/default/grub + sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="panic=5 /' /etc/default/grub # Fix for CVE-2016-4484 + fi +fi + +arch-chroot /mnt mkinitcpio -p linux +if [ $? -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi +if [ -z "$nodiskbuild" ]; then + arch-chroot /mnt grub-install --target=x86_64-efi --removable --bootloader-id=grub --efi-directory /boot "$disk" + if [ $? -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi + arch-chroot /mnt grub-install --target=i386-pc "$disk" + if [ $? -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi +fi +arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg +if [ $? -ne 0 ]; then header ERROR: Cannot continue; exit 1; fi + +header Set networking +arch-chroot /mnt systemctl enable openntpd +arch-chroot /mnt systemctl enable netctl +export interface=$(ip link list | grep "state" | cut -f 2 -d ":" | cut -f 2 -d " " | grep -v lo) +cp /mnt/etc/netctl/examples/ethernet-dhcp /mnt/etc/netctl/$interface +sed -i 's/eth0/'$interface'/' /mnt/etc/netctl/$interface +echo 'DNSSearch="aninix.net"' >> /mnt/etc/netctl/$interface +arch-chroot /mnt systemctl enable netctl +arch-chroot /mnt netctl enable $interface + +# Vim cleanup for SSH +arch-chroot /mnt mkdir -p /usr/share/vim/vimfiles/plugin +arch-chroot /mnt printf 'set mouse-=a\n' > /usr/share/vim/vimfiles/plugin/shadowarch.vim + +ln -sf /etc/skel/.bashrc /mnt/root/.bashrc + +# Clone ConfigPackags from AniNIX::Foundation +arch-chroot /mnt git -C /usr/local/src/ clone https://aninix.net/foundation/ConfigPackages +arch-chroot /mnt git -C /usr/local/src/ clone https://aninix.net/foundation/MiscScripts + +arch-chroot /mnt make -C /usr/local/src/MiscScripts/Shared install +arch-chroot /mnt make -C /usr/local/src/MiscScripts/Admin install +arch-chroot /mnt make -C /usr/local/src/MiscScripts/ShadowArch install +arch-chroot /mnt git -C /usr/local/src/ clone https://aur.archlinux.org/cower.git +arch-chroot /mnt groupadd tty-allow +arch-chroot /mnt useradd -u 1001 -G tty-allow -m depriv +arch-chroot /mnt usermod -G "$(getent group | grep root | cut -f 1 -d ':' | tr '\n' ',')""tty-allow" root +arch-chroot /mnt /bin/bash -c 'line="$(grep -E root"[[:space:]]"ALL /etc/sudoers)"; sed -i "s/$line/$line\ndepriv ALL=(ALL) ALL/" /etc/sudoers' + +# Handle AUR Packages + +if [ ! -z "$kali" ]; then + arch-chroot /mnt git -C /usr/local/src/ clone https://aur.archlinux.org/autopsy.git +fi + +# Optimizations from https://wiki.archlinux.org/index.php/Power_management +if [ ! -z "$powersave" ]; then + if [ `lspci | grep -i intel | grep -ic audio` -eq 1 ]; then + echo 'options snd_hda_intel power_save=1' > /mnt/etc/modprobe.d/audio_powersave.conf + else + echo 'options snd_ac97_codec power_save=1' > /mnt/etc/modprobe.d/audio_powersave.conf + fi + arch-chroot /mnt pacman -S rfkill cpupower --noconfirm + arch-chroot /mnt systemctl enable rfkill-block@.service + echo 'kernel.nmi_watchdog = 0' > /mnt/etc/sysctl.d/disable_watchdog.conf + echo 'vm.dirty_writeback_centisecs = 6000' > /mnt/etc/sysctl.d/dirty_writes.conf + echo 'vm.laptop_mode = 5' > /mnt/etc/sysctl.d/laptop.conf + echo 'ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*", RUN+="/usr/bin/iw dev %k set power_save on"' > /mnt/etc/udev/rules.d/70-wifi-powersave.rules + echo 'blacklist uvcvideo' > /mnt/etc/modprobe.d/no-camera.conf +fi + +# Thanks to https://wiki.archlinux.org/index.php/Professional_audio +if [ ! -z "$audio" ]; then + sed -i 's#GRUB_CMDLINE_LINUX_DEFAULT="#GRUB_CMDLINE_LINUX_DEFAULT="threadirqs #' /mnt/etc/default/grub + arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg + printf 'vm.swappiness = 10\nfs.inotify.max_user_watches = 524288\n' > /mnt/etc/sysctl.d/99-audio-tuning.conf + setpci -v -d *:* latency_timer=b0 + for SOUND_CARD_PCI_ID in `lspci | grep -i audio | cut -f 1 -d ' '`; do + setpci -v -s $SOUND_CARD_PCI_ID latency_timer=ff; + done + printf 'echo 2048 > /sys/class/rtc/rtc0/max_user_freq\necho 2048 > /proc/sys/dev/hpet/max-user-freq\n' >> /mnt/etc/rc.local +fi + +# Set password +header Set new root passphrase and depriviledged user '(depriv)' password. +arch-chroot /mnt passwd +arch-chroot /mnt passwd depriv +arch-chroot /mnt chown -R depriv:depriv /usr/local/src/ + +# Set SSH host keys +arch-chroot /mnt ssh-keygen -A + +cp /root/shadowarch /mnt/root/shadowarch.installer."$(date +%F-%R)" + +if [ ! -z "$gui" ]; then + echo "Remember to install your graphics drivers! + For NVidia, look at xf86-video-nouveau + For AMD, look at xf86-video-amdgpu + For Hyper-V, look at xf86-video-fbdev + For Virtual Box, look at virtualbox-guest-utils + For VMware, look at open-vm-tools" +fi + +# Set hostname +header Set hostname +printf "What is your fully-qualified hostname? (i.e. Core.AniNIX.net) " +read hostname +echo "$hostname" > /mnt/etc/hostname +hostname "$hostname" + +header Installed ShadowArch on `hostname -s`\! +if [ ! -z "$nodiskbuild" ]; then + header Remember to run grub-install and set up your bootloader. + echo 'https://wiki.archlinux.org/index.php/Installation_guide#Boot_loader' +else + header Press enter to reboot. + read + + # Reboot + shutdown -r now +fi diff --git a/roles/Foundation/files/custom/public/sitemap.xml b/roles/Foundation/files/custom/public/sitemap.xml new file mode 100755 index 0000000..0007fb9 --- /dev/null +++ b/roles/Foundation/files/custom/public/sitemap.xml @@ -0,0 +1,55 @@ + + + + https://aninix.net/ + 2020-09-20 + + + https://aninix.net/martialarts/index.html + 2020-09-20 + + + https://foundation.aninix.net/ + 2020-09-20 + + + https://foundation.aninix.net/explore/repos + 2020-09-20 + + + https://foundation.aninix.net/AniNIX/Wiki + 2020-09-20 + + + https://irc.aninix.net/ + 2020-09-20 + + + https://password.aninix.net/ + 2020-09-20 + + + https://maat.aninix.net/index.html + 2020-09-20 + + + https://singularity.aninix.net/ + 2020-09-20 + + + https://wolfpack.aninix.net/ + 2020-09-20 + + + https://yggdrasil.aninix.net/ + 2020-09-20 + + + https://sharingan.aninix.net + 2020-09-20 + + + diff --git a/roles/Foundation/files/custom/public/thank-you.html b/roles/Foundation/files/custom/public/thank-you.html new file mode 100755 index 0000000..d859aea --- /dev/null +++ b/roles/Foundation/files/custom/public/thank-you.html @@ -0,0 +1,271 @@ + + + + + + + AniNIX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+

Thank you for your purchase!

+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/roles/Foundation/files/custom/robots.txt b/roles/Foundation/files/custom/robots.txt new file mode 100644 index 0000000..2cc0596 --- /dev/null +++ b/roles/Foundation/files/custom/robots.txt @@ -0,0 +1,9 @@ +User-agent: * +Allow: /$ +Allow: /issues +Allow: /pulls +Allow: /explore +Allow: /AniNIX/ +Allow: /martialarts/ +Allow: /sitemap.xml +Disallow: / diff --git a/roles/Foundation/files/custom/sitemap.php b/roles/Foundation/files/custom/sitemap.php new file mode 100644 index 0000000..385f46b --- /dev/null +++ b/roles/Foundation/files/custom/sitemap.php @@ -0,0 +1,47 @@ + + + + https://aninix.net/index.php + 2019-10-24 + + + https://aninix.net/pages/legal.php + 2018-01-24 + + + https://aninix.net/pages/wiki.php + 2017-05-09 + + + https://aninix.net/pages/martialarts.php + 2018-09-18 + + + https://aninix.net/pages/qr.php + 2016-11-01 + + + https://aninix.net/pages/social.php + 2019-10-04 + + + https://aninix.net/pages/webapps.php + 2018-10-11 + + + https://aninix.net/pages/downloads.php + 2018-04-06 + + + https://aninix.net/pages/charity.php + 2018-04-06 + + + https://aninix.net/pages/chatroom.php + 2017-05-09 + + + https://aninix.net/martialarts/index.php + 2019-08-26 + + diff --git a/roles/Foundation/files/custom/templates/custom/extra_links.tmpl b/roles/Foundation/files/custom/templates/custom/extra_links.tmpl new file mode 100644 index 0000000..f9fc44e --- /dev/null +++ b/roles/Foundation/files/custom/templates/custom/extra_links.tmpl @@ -0,0 +1,3 @@ +Chat +Change Password +Martial Arts diff --git a/roles/Foundation/files/custom/templates/custom/footer.tmpl b/roles/Foundation/files/custom/templates/custom/footer.tmpl new file mode 100644 index 0000000..4c7ba98 --- /dev/null +++ b/roles/Foundation/files/custom/templates/custom/footer.tmpl @@ -0,0 +1,24 @@ + + + + + + diff --git a/roles/Foundation/files/custom/templates/custom/header.tmpl b/roles/Foundation/files/custom/templates/custom/header.tmpl new file mode 100644 index 0000000..a86d7e6 --- /dev/null +++ b/roles/Foundation/files/custom/templates/custom/header.tmpl @@ -0,0 +1,4 @@ + + + + diff --git a/roles/Foundation/files/custom/templates/home.tmpl b/roles/Foundation/files/custom/templates/home.tmpl new file mode 100644 index 0000000..71e5007 --- /dev/null +++ b/roles/Foundation/files/custom/templates/home.tmpl @@ -0,0 +1,88 @@ +{{template "base/head" .}} + +
+
+
+
+ +
+
+

+ AniNIX +

+

Welcome to the network

+
+
+
+
+
+

+ + Open source security +

+

+ The AniNIX's primary goal is to ensure everyone has access to the knowledge they need to build a low-cost, secure platform. We make all our source-code accessible and open-source. +

+
+
+

+ + Contact us anytime +

+

+ We run an open IRC network -- we'd love to connect with you there. Not familiar with IRC? No worries -- we have a webchat available. +

+
+
+
+

+ + Open documentation +

+

+ We maintain a Wiki to document how and why we do what we do. Hopefully, it can both help others to learn more about computing and spark discussion with the community at large. +

+
+
+

+ + Downloads +

+

+ We offer downloads from our AniNIX::Maat continuous-deployment system, including static files and packages for ArchLinux-style distributions. +

+
+
+
+ +
+
+
+

Follow us on social media

+

We want to stay in touch with you, so we are present on the social media platforms we find applicable.
Have one you want us on? Contact us and let us know!

+
+
+

 

+
RSS
+
Discord
+
GitHub
+
+
+
+

 

+
+
+
+ +{{template "base/footer" .}} diff --git a/roles/Foundation/files/foundation.service b/roles/Foundation/files/foundation.service new file mode 100644 index 0000000..78294db --- /dev/null +++ b/roles/Foundation/files/foundation.service @@ -0,0 +1,51 @@ +[Unit] +Description=Gitea (Git with a cup of tea) +After=syslog.target +After=network.target +After=mysqld.service +After=postgresql.service +After=memcached.service +After=redis.service + +[Service] +User=gitea +Group=gitea +Type=simple +WorkingDirectory=~ +RuntimeDirectory=gitea +LogsDirectory=gitea +StateDirectory=gitea +Environment=USER=gitea HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea GITEA_CUSTOM=/var/lib/gitea/custom/ +ExecStart=/usr/bin/gitea web -c /var/lib/gitea/custom/conf/app.ini --custom-path=/var/lib/gitea/custom/ +Restart=always +RestartSec=2s +ReadWritePaths=/var/lib/gitea/custom/conf/app.ini +AmbientCapabilities= +CapabilityBoundingSet= +LockPersonality=true +#Required by commit search +#MemoryDenyWriteExecute=true +NoNewPrivileges=True +#SecureBits=noroot-locked +PrivateDevices=true +PrivateTmp=true +PrivateUsers=true +ProtectClock=true +ProtectControlGroups=true +ProtectHome=true +ProtectHostname=true +ProtectKernelLogs=true +ProtectKernelModules=true +ProtectKernelTunables=true +ProtectProc=invisible +ProtectSystem=strict +RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX +RestrictNamespaces=true +RestrictRealtime=true +RestrictSUIDSGID=true +SystemCallArchitectures=native +SystemCallFilter=@system-service +SystemCallErrorNumber=EPERM + +[Install] +WantedBy=multi-user.target diff --git a/roles/Foundation/files/gitea.hook b/roles/Foundation/files/gitea.hook new file mode 100644 index 0000000..1c13a6c --- /dev/null +++ b/roles/Foundation/files/gitea.hook @@ -0,0 +1,10 @@ +[Trigger] +Operation = Install +Operation = Upgrade +Type = Package +Target = gitea + +[Action] +Description = Updating Gitea Custom Pages +When = PostTransaction +Exec = /usr/bin/runuser -u http -- /usr/bin/bash /var/lib/gitea/custom/bin/gen-aninix-custom diff --git a/roles/Foundation/files/web-snippets/martialarts/index b/roles/Foundation/files/web-snippets/martialarts/index new file mode 100644 index 0000000..3675fbb --- /dev/null +++ b/roles/Foundation/files/web-snippets/martialarts/index @@ -0,0 +1,336 @@ +
+
+

We are open despite COVID-19 -- those attending in person will need to sign a waiver of health and follow all state requirements, including wearing a mask.

+
+ +
+
+

+ AniNIX Martial Arts +

+

Open-source, research-driven self-defense and personal health

+

AniNIX Martial Arts is a small martial arts collective focusing on research-driven martial arts. Our core style is USHF HapKiDo, but we are influenced by HEMA, Razmafzar, Kali, Shaolin, Silat, JKD, BJJ, and many other systems. We are a research-driven group -- we encourage cross-training with other systems and will bring in new concepts regularly. The class is open to all experience levels, gender identity, gender expression, sexual orientation, religious or cultural identity, socioecomic status, or age (above 14), in Southcentral Wisconsin -- we will fit your training to your needs and goals.

Drop-ins are welcome, and registration is cheap. We hope you'll give us a chance to show you what we can do.

+
+
+
+
+
+

+ + Open-source +

+

+ We want your training with our system to become a part of your life. This means that we provide access to a revision-controlled copy of our notes that all our students can download, keep, and contribute to. We're tired of the old era where how the system works is kept hidden from students and piecemealed out as a marketing ploy -- we want to be as trasparent as possible in how our program and our martial art function. Transparency keeps our instructors honest and our students engaged -- this means a better martial arts experience for everyone. +

+
+
+

+ + Research-driven +

+

+ Our system is always growing. We are a United States HapKiDo Federation (USHF) school, and that gives us access to high-quality instructors and seminar material each year from across the US. We also maintain good relationships with other schools in our area -- we want our students to examine what they're learing and make sure that it works, and that means looking at different perspectives. +

+
+
+
+

+ + Low-cost +

+

We are non-profit group -- we train because we feel like it makes life better, not to make money. As such, our costs are publicly documented and our rates match the same. Classes will be informed of potential changes to costs well in advance, and we use recurring payments. We want you thinking about your training, not how you're going to pay for it.

+

+

    +
  • Cost: $10 per month in-person; $5 per month livestream -- pay below.
  • +
  • Lessons:Mondays and Thursdays 7-8:30 p.m.
  • +
  • Sparring: Mondays and Thursdays 6-7 p.m.
  • +
  • Shaolin Workouts: Saturday mornings at 8 a.m. by livestream only
  • +
  • Location: 225 Blaser Drive, Belleville, WI
  • +
  • What to bring: Exercise clothes and water
  • +

+
+
+

+ + Real-life First +

+

+ Everyone is welcome! Class attendance is not mandated and belt-testing is not required to train. As a courtesy, please inform the class of your absence or intended late arrival -- real-life comes first, and we're happy to work with your needs. As long as one person shows, we'll have class -- the smaller the class, the more tailored it is, but the bigger classes mean more partners and body types.

+

+ Our focus is also on what you will actually use. While we appreciate traditional and esoteric training for self-development, our weekly classes are focused on modern techniques and training methods so that you get the most out of your time. Our goal is to help create a community of prepared and healthy citizens, and we believe martial arts helps build that in a way no other activity can. +

+
+
+
+
+
+
+

Follow us on social media

+

We want to stay in touch with you, so we are present on the social media platforms we find applicable.
Have one you want us on? Contact us and let us know!

+
+
+

 

+
RSS
+
Discord
+
NextDoor
+
+
+
+

 

+
+
+
+
+ + + + +
+ + + +

+
+
+

+ + Remote classes +

+

Remote-only classes are available at $5/month for prior students. This gets you access to our livestream classes and our media library of prior classes. This helps offset the upkeep costs for our web hosting and offers some parity with our on-site students.

+

These are intended as a continuing-education option for students with background in martial arts who aren't able to attend classes in-person due to distance or schedule -- they are not a substitute for in-person training.

+

+ + + + +

+ + + +

+
+
+
+

+ + T-Shirt +

+

T-shirts are $25 each -- they're made of a light, breathable black fabric with our logo across the back. Please contact an administrator on Discord or Facebook with your size.

+

T-Shirts are limited quantity -- we currently have 2 Medium and 1 Small in stock. T-shirt runs are only done on class request for cost reasons.

+

+ + + + +

+ + + +

+
+
+

+ + Patch +

+

Patches are $5 -- they're meant to be sewn or ironed onto gis, gear bags, backpacks, etc. They're a great way to show off your loyalty to the group and pride in your hard work!

+

+

+ + +
+
+

+ +

+ + + +

+ + + +
+
+
+
--> diff --git a/roles/Foundation/files/web-snippets/pay/index b/roles/Foundation/files/web-snippets/pay/index new file mode 100644 index 0000000..1391148 --- /dev/null +++ b/roles/Foundation/files/web-snippets/pay/index @@ -0,0 +1,95 @@ +
+ +
+

+ AniNIX +

+

Our Storefront

+

We have limited service offerings available. Please contact an admin on IRC first to arrange the contract, then use the item below to pay the invoice.

+
+
+
+ +
+
+

+ + Cybersecurity Consulting +

+

The AniNIX offers cybersecurity consulting and advice services on a limited basis. We bill at $20 an hour -- please select your need below after negotiating with an admin.

+

+

+ + +
+
+ + + + + +
+ + + +

+
+
+
diff --git a/roles/Foundation/files/web-snippets/pay/thank-you b/roles/Foundation/files/web-snippets/pay/thank-you new file mode 100644 index 0000000..727953a --- /dev/null +++ b/roles/Foundation/files/web-snippets/pay/thank-you @@ -0,0 +1,12 @@ +
+
+
+ +
+
+

+ Thank you for your purchase! +

+
+
+
diff --git a/roles/Foundation/tasks/main.yml b/roles/Foundation/tasks/main.yml index 1164c79..01d5504 100644 --- a/roles/Foundation/tasks/main.yml +++ b/roles/Foundation/tasks/main.yml @@ -6,9 +6,47 @@ - gitea - name: BitBot + become: yes git: repo: https://github.com/jesopo/bitbot.git dest: /opt/bitbot + - name: Make directories + become: yes + file: + path: "/var/lib/gitea/{{ item }}" + owner: gitea + group: gitea + mode: 0750 + loop: + - "custom/bin" + - "web-snippets" + - name: Copy web-snippets + become: yes + copy: + src: web-snippets/ + dest: /var/lib/gitea/web-snippets + owner: gitea + group: gitea + mode: 0640 + - name: Copy scripts + become: yes + copy: + src: custom/ + dest: /var/lib/gitea/custom/ + owner: gitea + group: gitea + + - name: Copy hook + become: yes + copy: + src: gitea.hook + dest: /etc/pacman.d/hooks/gitea.hook + owner: gitea + group: gitea + + - name: Generate pages + become: yes + command: /usr/bin/runuser -u gitea -- /usr/bin/bash /var/lib/gitea/custom/bin/gen-aninix-custom diff --git a/roles/WebServer/files/conf.d/aaa_default.conf b/roles/WebServer/files/conf.d/aaa_default.conf index 81b897b..379a822 100644 --- a/roles/WebServer/files/conf.d/aaa_default.conf +++ b/roles/WebServer/files/conf.d/aaa_default.conf @@ -1,6 +1,5 @@ server { - #listen 443 ssl http2; - listen 444 ssl http2; + listen 443 ssl http2; server_name default_server; include sec.conf; @@ -8,10 +7,39 @@ server { location / { + rewrite ^/martialarts(\/*)$ /assets/martialarts/index.html; + location /aninix.xml { + proxy_hide_header Content-Type; + add_header content-type "application/atom+xml"; + rewrite /aninix.xml /AniNIX/Wiki/raw/branch/main/rss/aninix.xml; + } + location /martialarts/maqotw.xml { + proxy_hide_header Content-Type; + add_header content-type "application/atom+xml"; + rewrite /martialarts/maqotw.xml /AniNIX/Wiki/raw/branch/main/rss/maqotw.xml; + } proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:3000; } + + location /whatismyip + { + include ../conf.d/fastcgi.config; + root /usr/share/webapps/aninix/; + location ~* whatismyip { + try_files $uri /whatismyip.php; + expires max; + } + } + location /blackpage + { + root /usr/share/webapps/aninix/; + try_files $uri /blackpage.html; + } + + include letsencrypt.conf; + } diff --git a/roles/WebServer/files/conf.d/adhan.conf b/roles/WebServer/files/conf.d/adhan.conf index 78cb58c..08bad48 100644 --- a/roles/WebServer/files/conf.d/adhan.conf +++ b/roles/WebServer/files/conf.d/adhan.conf @@ -1,5 +1,5 @@ server { - listen 444 ssl http2; + listen 443 ssl http2; server_name adhan.aninix.net; include sec.conf; diff --git a/roles/WebServer/files/conf.d/fastcgi.config b/roles/WebServer/files/conf.d/fastcgi.config new file mode 100644 index 0000000..6107aba --- /dev/null +++ b/roles/WebServer/files/conf.d/fastcgi.config @@ -0,0 +1,13 @@ +location ~ \.php$ { + try_files $fastcgi_script_name =404; + + include fastcgi_params; + + fastcgi_pass unix:/run/php-fpm/php-fpm.sock; + fastcgi_index index.php; + fastcgi_buffers 8 16k; + fastcgi_buffer_size 32k; + + fastcgi_param DOCUMENT_ROOT $realpath_root; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; +} diff --git a/roles/WebServer/files/conf.d/fastcgi7.config b/roles/WebServer/files/conf.d/fastcgi7.config new file mode 100644 index 0000000..f989e96 --- /dev/null +++ b/roles/WebServer/files/conf.d/fastcgi7.config @@ -0,0 +1,13 @@ +location ~ \.php$ { + try_files $fastcgi_script_name =404; + + include fastcgi_params; + + fastcgi_pass unix:/run/php-fpm7/php-fpm.sock; + fastcgi_index index.php; + fastcgi_buffers 8 16k; + fastcgi_buffer_size 32k; + + fastcgi_param DOCUMENT_ROOT $realpath_root; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; +} diff --git a/roles/WebServer/files/conf.d/fastcgi_params b/roles/WebServer/files/conf.d/fastcgi_params new file mode 100644 index 0000000..b69ae25 --- /dev/null +++ b/roles/WebServer/files/conf.d/fastcgi_params @@ -0,0 +1,27 @@ +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param PATH_INFO $fastcgi_path_info; +fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; +fastcgi_param SERVER_PORT $server_port; +fastcgi_param SERVER_NAME $server_name; + +fastcgi_param HTTPS $https; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; diff --git a/roles/WebServer/files/conf.d/geth.conf b/roles/WebServer/files/conf.d/geth.conf new file mode 100644 index 0000000..1109928 --- /dev/null +++ b/roles/WebServer/files/conf.d/geth.conf @@ -0,0 +1,29 @@ +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + #listen 443 ssl http2; + listen 443 ssl; + server_name geth.aninix.net; + + include sec.conf; + # include default.csp.conf; + # include local.conf; + include letsencrypt.conf; + + location / + { + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://geth.msn0.aninix.net:8123; + proxy_redirect http:// https://; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_read_timeout 86400; + } +} diff --git a/roles/WebServer/files/conf.d/irc.conf b/roles/WebServer/files/conf.d/irc.conf new file mode 100644 index 0000000..aa091d0 --- /dev/null +++ b/roles/WebServer/files/conf.d/irc.conf @@ -0,0 +1,17 @@ +server { + listen 443 ssl http2; + server_name irc.aninix.net; + + include sec.conf; + include default.csp.conf; + include letsencrypt.conf; + + location / + { + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://127.0.0.1:7778; + } +} diff --git a/roles/WebServer/files/conf.d/lykos-wiki.conf b/roles/WebServer/files/conf.d/lykos-wiki.conf index 4efb520..5dafe2d 100644 --- a/roles/WebServer/files/conf.d/lykos-wiki.conf +++ b/roles/WebServer/files/conf.d/lykos-wiki.conf @@ -1,46 +1,37 @@ server { - listen 444 ssl; - server_name lykos.aninix.net; + listen 443 ssl; + server_name lykos.aninix.net; - include sec.conf; - include default.csp.conf; + include letsencrypt.conf; - root /usr/share/webapps/; + root /usr/share/webapps/; - location ~ ^/$ { - return 302 https://lykos.aninix.net:444/lykos-wiki/Main_Page; - } + client_max_body_size 5m; + client_body_timeout 60; - location ~ ^/lykos-wiki/ { - index /mediawiki/index.php; - try_files $uri $uri/ @mediawiki; + include ../conf.d/fastcgi7.config; + + location / { + try_files $uri $uri/ @rewrite; + rewrite ^/lykos-wiki/(.*)$ /mediawiki/index.php?title=$1&$args; + rewrite ^$ /lykos-wiki/Main_Page; + rewrite ^/$ /lykos-wiki/Main_Page; + rewrite ^lykos-wiki$ /lykos-wiki/Main_Page; + rewrite ^lykos-wiki/$ /lykos-wiki/Main_Page; } - location @mediawiki { - rewrite ^/lykos-wiki/(.*)$ /mediawiki/index.php?title=$1; - } - location ~ \.php?$ { - fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; - fastcgi_index /mediawiki/index.php; - try_files $uri @mediawiki; + + location ^~ /maintenance/ { + return 403; } + location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { - try_files $uri /lykos-wiki/index.php; + try_files $uri /mediawiki/index.php; expires max; log_not_found off; } -# Restrictions based on the .htaccess files - location ~ ^/lykos-wiki/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ { - deny all; - } - location ~ ^/lykos-wiki/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ { - internal; - } - location ^~ /images/ { - try_files $uri /index.php; - } - location ~ /\. { - access_log off; - log_not_found off; + + location ^~ /cache/ { deny all; } + } diff --git a/roles/WebServer/files/conf.d/maat.conf b/roles/WebServer/files/conf.d/maat.conf new file mode 100644 index 0000000..32e1eb3 --- /dev/null +++ b/roles/WebServer/files/conf.d/maat.conf @@ -0,0 +1,19 @@ +server { + listen 443 ssl http2; + server_name maat.aninix.net; + + include sec.conf; + include default.csp.conf; + include letsencrypt.conf; + + location / + { + try_files $uri /index.html + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://maat.msn0.aninix.net:80; + proxy_force_ranges on; + } +} diff --git a/roles/WebServer/files/conf.d/password.conf b/roles/WebServer/files/conf.d/password.conf index d157fa7..80256b8 100644 --- a/roles/WebServer/files/conf.d/password.conf +++ b/roles/WebServer/files/conf.d/password.conf @@ -1,12 +1,44 @@ server { - listen 444 ssl http2; + listen 443 ssl http2; server_name password.aninix.net; include sec.conf; include default.csp.conf; + include letsencrypt.conf; - location / - { - root /usr/share/webapps/self-service-password/; + root /usr/share/webapps/self-service-password/htdocs/; + + # https://ltb-project.org/documentation/self-service-password/1.3/config_nginx + index index.php index.html index.htm; + + # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html + sendfile off; + + gzip on; + gzip_comp_level 6; + gzip_min_length 1000; + gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; + gzip_vary on; + gzip_proxied any; + gzip_disable "MSIE [1-6]\.(?!.*SV1)"; + + # Add stdout logging + + #error_log /dev/stdout warn; + #access_log /dev/stdout info; + + include ../conf.d/fastcgi.config; + + # deny access to . files, for security + # + location ~ /\.\. { + log_not_found off; + deny all; } + + location ~ /scripts { + log_not_found off; + deny all; + } + } diff --git a/roles/WebServer/files/conf.d/sharingan.conf b/roles/WebServer/files/conf.d/sharingan.conf new file mode 100644 index 0000000..d3c3522 --- /dev/null +++ b/roles/WebServer/files/conf.d/sharingan.conf @@ -0,0 +1,21 @@ +server { + + listen 443 ssl http2; + server_name sharingan.aninix.net; + + include sec.conf; + # include default.csp.conf; + include local.conf; + include letsencrypt.conf; + + + location / + { + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Graylog-Server-URL https://$server_name/; + proxy_pass http://sharingan.msn0.aninix.net:9000; + } +} diff --git a/roles/WebServer/files/conf.d/singularity.conf b/roles/WebServer/files/conf.d/singularity.conf new file mode 100644 index 0000000..b3fe577 --- /dev/null +++ b/roles/WebServer/files/conf.d/singularity.conf @@ -0,0 +1,16 @@ +server { + listen 443 ssl; + server_name singularity.aninix.net; + + include sec.conf; + include default.csp.conf; + include letsencrypt.conf; + + include ../conf.d/fastcgi.config; + + root /usr/share/webapps/tt-rss/; + + index index.php; + try_files $uri $uri/ =404; + +} diff --git a/roles/WebServer/files/conf.d/wolfpack.conf b/roles/WebServer/files/conf.d/wolfpack.conf new file mode 100644 index 0000000..eac55d5 --- /dev/null +++ b/roles/WebServer/files/conf.d/wolfpack.conf @@ -0,0 +1,15 @@ +server { + listen 443 ssl http2; + server_name wolfpack.aninix.net; + + include sec.conf; + include default.csp.conf; + include letsencrypt.conf; + + location / + { + root /srv/wolfpack; + autoindex on; + autoindex_format html; + } +} diff --git a/roles/WebServer/files/conf.d/yggdrasil.conf b/roles/WebServer/files/conf.d/yggdrasil.conf new file mode 100644 index 0000000..c1dd2f8 --- /dev/null +++ b/roles/WebServer/files/conf.d/yggdrasil.conf @@ -0,0 +1,20 @@ +server { + #listen 443 ssl http2; + listen 443 ssl http2; + server_name yggdrasil.aninix.net; + + include sec.conf; + include letsencrypt.conf; + # include default.csp.conf; + + location / + { + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Graylog-Server-URL https://$server_name/; + proxy_pass http://127.0.0.1:8096; + proxy_force_ranges on; + } +} diff --git a/roles/WebServer/files/nginx.conf b/roles/WebServer/files/nginx.conf index f9d5909..cde20d3 100644 --- a/roles/WebServer/files/nginx.conf +++ b/roles/WebServer/files/nginx.conf @@ -24,10 +24,13 @@ http { # Redirect all HTTP to HTTPS server { - listen 81 default_server; - listen [::]:81 default_server; + + listen 80 default_server; + listen [::]:80 default_server; server_name _; - return 301 https://$host$request_uri; + location / { + return 301 https://$host$request_uri; + } } include ../conf.d/*.conf; diff --git a/roles/Yggdrasil/tasks/main.yml b/roles/Yggdrasil/tasks/main.yml index 0214172..9b9679f 100644 --- a/roles/Yggdrasil/tasks/main.yml +++ b/roles/Yggdrasil/tasks/main.yml @@ -6,14 +6,32 @@ name: - emby-server - - - - name: Yggdrasil directory + - name: Yggdrasil directories become: yes file: - path: /srv/yggdrasil + path: "{{ item }}" state: directory owner: http group: http - mode: 0750 - + mode: 2750 + loop: + - /srv/yggdrasil + - /srv/yggdrasil/Digital_Library + - /srv/yggdrasil/Music + - /srv/yggdrasil/Videos + - /srv/yggdrasil/Videos/Shows + - /srv/yggdrasil/Videos/Movies + - /srv/yggdrasil/Software + + - name: LiveTV channels + command: /bin/bash -c "curl -s https://raw.githubusercontent.com/iptv-org/iptv/master/streams/us.m3u | egrep -A 1 {{ iptv_location }} 2>&1 | egrep -v '^--$'" + register: livetv_channels + + - name: Write to file + become: yes + copy: + content: "{{ livetv_channels.stdout }}" + dest: /var/lib/emby/local-channels.m3u + owner: emby + group: http + mode: 0640