Archived
1
0

First commit

This commit is contained in:
Sean Edmunds
2021-12-13 17:00:40 -06:00
commit 0584430b5c
36617 changed files with 4676695 additions and 0 deletions

23
src/apps.json Normal file
View File

@@ -0,0 +1,23 @@
{
"apps" : [
{"name":"Deluge","url":"home.halfaperture.com/deluge","icon":"water","urlbase":"/Deluge","NSFW":"NSFW"},
{"name":"Grafana","url":"home.halfaperture.com/grafana","icon":"chart-areaspline-variant","urlbase":"/Grafana","NSFW":"SAFE"},
{"name":"Guacamole","url":"home.halfaperture.com/guacamole","icon":"remote-desktop","urlbase":"/Guacamole","NSFW":"SAFE"},
{"name":"Jackett","url":"home.halfaperture.com/jackett","icon":"tshirt-crew","urlbase":"/Jackett","NSFW":"NSFW"},
{"name":"Lidarr","url":"home.halfaperture.com/lidarr","icon":"music-circle","urlbase":"/Lidarr","NSFW":"NSFW"},
{"name":"LazyLibrarian","url":"home.halfaperture.com/lazylibrarian","icon":"library","urlbase":"/LazyLibrarian","NSFW":"NSFW"},
{"name":"NextCloud","url":"home.halfaperture.com/nextcloud","icon":"cloud","urlbase":"/NextCloud","NSFW":"SAFE"},
{"name":"NZBHydra","url":"home.halfaperture.com/nzbhydra","icon":"snake","urlbase":"/NZBHydra","NSFW":"NSFW"},
{"name":"PiHole","url":"home.halfaperture.com/admin","icon":"pi-hole","urlbase":"/Admin","NSFW":"SAFE"},
{"name":"Plex","url":"home.halfaperture.com/plex","icon":"plex","urlbase":"/Plex","NSFW":"SAFE"},
{"name":"OctoPrint","url":"home.halfaperture.com/octoprint","icon":"printer-3d","urlbase":"/octoprint","NSFW":"SAFE"},
{"name":"Ombi","url":"home.halfaperture.com/requests","icon":"magnify","urlbase":"/Ombi","NSFW":"NSFW"},
{"name":"Organizr","url":"home.halfaperture.com","icon":"home","urlbase":"/Organizr","NSFW":"SAFE"},
{"name":"Radarr","url":"home.halfaperture.com/radarr","icon":"movie-open","urlbase":"/Radarr","NSFW":"NSFW"},
{"name":"SABnzbd","url":"home.halfaperture.com/sabnzbd","icon":"download","urlbase":"/SABnzbd","NSFW":"NSFW"},
{"name":"Sonarr","url":"home.halfaperture.com/sonarr","icon":"television-classic","urlbase":"/Sonarr","NSFW":"NSFW"},
{"name":"Tautulli","url":"home.halfaperture.com/stats","icon":"chart-bar","urlbase":"/Stats","NSFW":"SAFE"},
{"name":"uBooquity","url":"home.halfaperture.com/ubooquity","icon":"book-open-outline","urlbase":"/uBooquity","NSFW":"SAFE"},
{"name":"Wiki","url":"home.halfaperture.com/wiki","icon":"wikipedia","urlbase":"/Wiki","NSFW":"SAFE"}
]
}

714
src/index.css Normal file
View File

@@ -0,0 +1,714 @@
@import url('https://fonts.googleapis.com/css2?family=Jost:ital,wght@0,100;0,200;0,400;1,100;1,200&display=swap');
html{
box-sizing: border-box;
moz-box-sizing: border-box;
webkit-box-sizing: border-box;
webkit-text-size-adjust: none;
}
html,
body{
/*background-color: #fff;*/
/*background-color: var(--color-background);*/
background: linear-gradient(var(--color-background),var(--color-background)), var(--image-background) fixed;
background-size: cover;
color: var(--color-text-pri);
font-family: -apple-system, Jost, BlinkMacSystemFont, Helvetica Neue, Roboto, sans-serif;
font-size: 14px;
font-weight: 400;
height: auto;
letter-spacing: -.012em;
margin: 0;
padding: 0;
webkit-font-smoothing: antialiased;
width: auto;
}
*,
*:before,
*:after{
box-sizing: inherit;
moz-box-sizing: inherit;
webkit-box-sizing: inherit;
}
:root{
module-spacing: 3vh;
}
/* TEXT STYLES */
h1, h2{
font-weight: 300;
margin: 0;
margin-left: .5em;
margin-right: 5em;
padding: 0;
text-align: left;
}
h2, h3, h4{
text-transform: uppercase;
}
h1{
font-size: 4em;
font-weight: 400;
width: max-content;
}
h2{
font-size: 2em;
height: 30px;
margin-right: 1em;
}
#clock {
justify-content: right;
display: grid;
}
h3{
font-size: 20px;
font-weight: 200;
font-style: italic;
text-decoration: underline;
height: 10px;
}
h4{
font-size: 1.1em;
font-weight: 400;
height: 10px;
}
a{
color: var(--color-text-pri);
text-decoration: none;
}
a:hover #app-address{
webkit-text-decoration-skip: true;
text-decoration: underline;
text-decoration-color: var(--color-border);
}
.icon{
font-size: 2.5em;
}
/* FORMS */
.keyword{
background-color: transparent;
border: 0;
border-bottom: thin solid var(--color-border);
color: var(--color-text-pri);
font-family: -apple-system, Jost, BlinkMacSystemFont, Helvetica Neue, Roboto, sans-serif;
font-style: italic;
font-size: 0.8em;
height: 3.5em;
transition: all 0.4s ease;
width: 50%;
align: center;
padding-left: 1em;
padding-right: 1em;
text-align: center;
}
.keyword:focus{
background-color: var(--color-search-background);
color-border: var(--color-text-pri);
outline: none;
color: var(--color-text-acc);
font-style: normal;
font-weight: 200;
font-size: 1.2em;
letter-spacing: .2em;
width:100%;
border-top-left-radius: .25em;
border-top-right-radius: .25em;
border-bottom-left-radius: .25em;
border-bottom-right-radius: .25em;
}
.keyword::placeholder{
text-align: left;
}
.Input-label{
color: var(--color-text-acc);
display: block;
position: relative;
font-style: normal;
font-weight: 200;
font-size: 1.2em;
letter-spacing: .2em;
opacity: 1;
padding-left: 1em;
padding-right: 1em;
text-align: center;
width: 100%;
top: 28%;
}
.keyword:placeholder-shown + .Input-label{
visibility: hidden;
z-index: 1;
position: absolute;
text-align: center;
}
.keyword:focus:not(:placeholder-shown) + .Input-label{
visibility: visible;
position: absolute;
z-index: 1;
opacity: 55%;
width: 100%;
top: 28%;
left: 0;
text-align: left;
}
.keyword:not(:placeholder-shown) + .Input-label{
visibility: hidden;
z-index: 1;
position: absolute;
text-align: center;
}
.abackground{
background-color: transparent;
text-align: center;
position: relative;
}
.abackground > i{
text-align: left;
font-style: italic;
opacity: 50%;
}
/* TABLES */
table{
border: thin solid #e4e4e4;
border-collapse: collapse;
border-spacing: 0;
font-size: 1em;
text-align: left;
width: 100%;
}
table td:nth-of-type(2){
padding-right: 5em;
}
table td{
border: thin solid var(--color-border);
color: var(--color-text-pri);
font-size: 1em;
overflow: hidden;
padding: 10px 5px;
word-break: normal;
}
table th{
border: thin solid var(--color-border);
color: var(--color-text-pri);
font-weight: bold;
padding: 10px 5px;
}
table a{
color: var(--color-text-pri);
}
/* ANIMATION */
.fade{
opacity: 0;
}
@keyframes fadeseq{
100% {
opacity: 1;
}
}
.fade{
opacity: 0;
}
.fade{
animation: fadeseq .3s forwards;
}
.fade:nth-child(2){
animation-delay: .4s;
}
/* LAYOUT */
#container{
align-items: stretch;
display: grid;
grid-column-gap: 20px;
grid-row-gap: 1vh;
grid-template-columns: 1fr;
grid-template-rows: 8vh auto;
justify-items: stretch;
margin-left: auto;
margin-right: auto;
margin-top: 2.5vh;
width: 75%;
}
.NSFW-content {
display: var(--content-display);
}
/* SECTIONS */
#header{
border-bottom: 0px solid var(--color-text-acc);
z-index: 1;
clear: both;
display: flex;
}
#header_date {
width: max-content;
}
#greeting_block {
display: grid;
width: 100%;
}
#date_block {
display: grid;
float: right;
justify-content: right;
width: auto;
}
#apps_loop{
background: linear-gradient(var(--color-background),var(--color-background)), var(--image-background) fixed;
background-size: cover;
border-bottom: 0px solid var(--color-text-acc);
display: grid;
grid-column-gap: 5px;
grid-row-gap: 5px;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
grid-template-rows: 64px;
padding-bottom: var(--module-spacing);
}
.apps_icon{
height: 64px;
margin-right: 1em;
margin-left: 1em;
padding-top: 15px;
}
.apps_icon span{
font-size: 2.5em;
line-height: 3rem;
}
.apps_item{
display: flex;
flex-direction: row;
flex-wrap: wrap;
height: 64px;
margin: 0;
backdrop-filter: blur(10px) brightness(1.5);
border-radius: 6px;
}
.apps_text{
display: flex;
flex-direction: column;
justify-content: center;
flex: 1;
overflow: hidden;
}
.apps_text a{
font-size: 1em;
font-weight: 400;
text-transform: uppercase;
}
.apps_text #app-name{
color: var(--color-text-pri);
font-weight: 400;
font-style: normal;
}
.apps_text span{
color: var(--color-text-acc);
font-size: 0.8em;
font-weight: 400;
font-style: italic;
text-transform: uppercase;
}
#links_loop{
display: grid;
flex-wrap: nowrap;
grid-column-gap: 20px;
grid-row-gap: 0px;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
grid-template-rows: auto;
}
#links_item{
line-height: 1.5rem;
margin-bottom: 0em;
webkit-font-smoothing: antialiased;
}
#links_item h4{
color: var(--color-text-acc);
}
#links_item a{
display: block;
line-height: 2;
}
#links_item a:hover{
text-decoration: underline;
text-decoration-color: var(--color-border);
}
/* MODAL */
#modal{
overflow-y: auto;
bottom: 0;
left: 0;
opacity: 0;
pointer-events: none;
position: fixed;
right: 0;
top: 0;
transition: all 0.3s;
z-index: 20;
}
#modal:target{
opacity: 1;
pointer-events: auto;
}
#modal>div{
background-color: var(--color-background);
color: var(--color-text-acc);
box-shadow: 0 14px 28px var(--color-search-background), 0 15px 12px rgba(0, 0, 0, .35);
margin-left: auto;
margin-right: auto;
padding: 2em;
margin-top: 5vh;
margin-bottom: 5vh;
width: 50%;
display: flex;
flex-direction: column;
border-radius: 1em;
backdrop-filter: blur(10px);
}
#modal h1{
color: var(--color-text-acc);
font-size: 2em;
}
#modal h2{
margin-top:1.5em;
}
#modal-header{
display:flex;
justify-content: space-between;
}
#modal-footer{
display:flex;
font-size:2em;
justify-content: flex-start;
}
#modal-footer a{
margin-right:0.25em;
}
#modal-footer input[type="checkbox"]{
display: none;
color: var(--color-text-pri);
}
#modal-footer input[type="checkbox"] + label{
color: var(--color-text-pri);
}
#modal-footer input[type="checkbox"]:checked + label{
color: var(--color-text-alt);
}
.sneaky{
position: absolute;
right: 1em;
}
.modal-close{
color: var(--color-border);
font-size: 1.5em;
text-align: center;
text-decoration: none;
}
.modal-close:hover{
color: var(--color-border);
}
#modal_init a{
bottom: 1vh;
color: var(--color-text-acc);
left: 1vw;
position: fixed;
}
#modal_init a:hover{
color: var(--color-text-pri);
}
#modal-theme{
border-bottom: 0px solid var(--color-text-acc);
display: flex;
flex-wrap: wrap;
margin-bottom: 2em;
}
#providers{
color: var(--color-text-pri);
margin-bottom: 2em;
}
/* THEMING */
.theme-button{
font-size: 0.8em;
margin: 2px;
width:128px;
line-height: 3em;
text-align: center;
text-transform: uppercase;
}
.theme-blackboard{
background-color: #000000;
border: 4px solid #5c5c5c;
color: #FFFDEA;
}
.theme-gazette{
background-color: #F2F7FF;
border: 4px solid #5c5c5c;
color: #000000;
}
.theme-espresso{
background-color: #21211F;
border: 4px solid #4E4E4E;
color: #D1B59A;
}
.theme-cab{
background-color: #FEED01;
border: 4px solid #424242;
color: #1F1F1F;
}
.theme-cloud{
background-color: #f1f2f0;
border: 4px solid #35342f;
color: #37bbe4;
}
.theme-lime{
background-color: #263238;
border: 4px solid #AABBC3;
color: #aeea00;
}
.theme-passion{
background-color: #f5f5f5;
border: 4px solid #8e24aa;
color: #12005e;
}
.theme-blues{
background-color: #2B2C56;
border: 4px solid #6677EB;
color: #EFF1FC;
}
.theme-chalk{
background-color: #263238;
border: 4px solid #FF869A;
color: #AABBC3;
}
.theme-tron{
background-color: #242B33;
border: 4px solid #6EE2FF;
color: #EFFBFF;
}
.theme-paper{
background-color: #F8F6F1;
border: 4px solid #F5E1A4;
color: #4C432E;
}
.theme-cyberpunk{
background-color: #010115;
border: 4px solid #F3E600;
color: #FF2A6D;
}
.theme-cyberpunk{
background-color: #010115;
border: 4px solid #F3E600;
color: #FF2A6D;
}
.theme-panam{
background-color: #010115;
border: 4px solid #F3E600;
color: #FF2A6D;
}
.theme-touch{
background-color: #DFB19D;
border: 4px solid #6F9EBB;
color: #416B95;
}
.theme-peek{
background-color: #1C3032;
border: 4px solid #737642;
color: #D6B79E;
}
/* MEDIA QUERIES */
@media screen and (max-width: 1260px)
{
#container
{
align-items: stretch;
display: grid;
grid-column-gap: 10px;
grid-row-gap: 0px;
grid-template-columns: 1fr;
grid-template-rows: 80px auto;
justify-items: stretch;
margin-bottom: 1vh;
margin-left: auto;
margin-right: auto;
width: 90%;
}
#apps_loop{
grid-template-columns: 1fr 1fr 1fr;
width: 100vw;
}
#links_loop {
grid-template-columns: 1fr 1fr 1fr;
}
#modal>div{
margin-left: auto;
margin-right: auto;
margin-top: 5vh;
width: 90%;
}
}
@media screen and (max-width: 667px)
{
html{
font-size: calc(16px + 6 * ((100vw - 320px) / 680));
}
#container{
align-items: stretch;
display: grid;
grid-column-gap: 20px;
grid-row-gap: 0px;
grid-template-columns: 1fr;
grid-template-rows: 80px auto;
justify-items: stretch;
margin-bottom: 1vh;
width: 90%;
}
h1{
font-size: 4em;
height: auto;
margin-bottom: 0em;
}
h2{
font-size: 1em;
height: auto;
margin-bottom: 0em;
}
h3{
font-size: 1em;
}
#apps_loop{
grid-column-gap: 0px;
grid-row-gap: 0px;
grid-template-columns: 1fr 1fr;
width: 100vw;
}
.apps_icon{
height: 64px;
margin-right: 0.8em;
padding-top: 14px;
}
.apps_icon span{
font-size: 2em;
line-height: 2.5rem;
}
#links_loop{
display: grid;
flex-wrap: nowrap;
grid-column-gap: 20px;
grid-row-gap: 0px;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto;
}
}
/* Small Screens */
@media only screen and (max-width: 400px) {
#app-address {
display: none;
}
}

327
src/index.js Normal file
View File

@@ -0,0 +1,327 @@
import React from 'react';
import { useState, useEffect } from 'react';
import ReactDOM from 'react-dom';
import { unstable_createPortal } from 'react-dom';
import './index.css';
function Homepage() {
return (
<main id="container" class="fade">
<div>
<Search />
</div>
<div>
<Header
date={date()}
greet={greet()}
/>
</div>
<div>
<Applications />
</div>
<div>
<Bookmarks />
</div>
<div>
<ModalMenu />
</div>
<div>
<ModalInit />
</div>
</main>
);
}
function Search() {
return (
<section id="search">
<div class="abackground">
<input name="keywords" type="text" class="keyword" id="keywords" size="50" placeholder="" />
<label id="searchType" class="Input-label">Google search</label>
</div>
</section>
)
}
function Header(props) {
return (
<section id="header">
<div id="greeting_block">
<h1 id="header_greet">{props.greet}</h1>
</div>
<div id="date_block">
<h2 id="header_date">{props.date}</h2>
<Clock />
</div>
</section>
);
}
function Applications() {
let appList = getApps();
var items = [];
for (var i = 0; i < appList.apps.length; i++) {
items.push(
<App
key={i}
name={appList.apps[i].name}
url={appList.apps[i].url}
icon={appList.apps[i].icon}
NSFW={appList.apps[i].NSFW}
/>
);
}
return (
<section id="apps">
<h3>Applications</h3>
<div id="apps_loop">
{items}
</div>
</section>
);
}
function App(props) {
let classType = props.NSFW + "-content";
let hrefUrl = "https://" + props.url;
let iconName = "mdi-" + props.icon;
return (
<div>
<a href={hrefUrl} class={classType}>
<div class="apps_item">
<div class="apps_icon">
<span class="iconify icon" data-icon={iconName}></span>
</div>
<div class="apps_text">
<span id="app-name">{props.name}</span>
<span id="app-address">{props.url}</span>
</div>
</div>
</a>
</div>
);
}
function Bookmarks() {
let bookmarkList = getLinks();
var items = [];
for (var i = 0; i < bookmarkList.bookmarks.length; i++) {
items.push(
<LinkGroups
key={i}
category={bookmarkList.bookmarks[i].category}
links={bookmarkList.bookmarks[i].links}
/>
);
}
return (
<section id="links">
<h3>Bookmarks</h3>
<div id="links_loop">
{items}
</div>
</section>
);
}
function LinkGroups(props) {
var items = [];
for (var i = 0; i < props.links.length; i++) {
items.push(
<LinkItem
key={i}
link={props.links[i]}
/>
);
}
return (
<div id="links_item">
<h4>{props.category}</h4>
{items}
</div>
);
}
function LinkItem(props) {
return (
<div>
<a href={props.link.url} class="theme_color-border theme_text-select">{props.link.name}</a>
</div>
);
}
function ModalMenu() {
var providers = getProviders();
var items = [];
for (var i = 0; i < providers.providers.length; i++) {
items.push(
<Provider
key={i}
provider={providers.providers[i]}
/>
);
}
return (
<section id="modal">
<div>
<header id="modal-header">
<h1>Options</h1>
<a href="#" title="Close" class="modal-close">
<span class="iconify" data-icon="mdi-close"></span>
</a>
</header>
<h2>Color themes</h2>
<div id="modal-theme">
<button data-theme="blackboard" class="theme-button theme-blackboard">Blackboard</button>
<button data-theme="gazette" class="theme-button theme-gazette">Gazette</button>
<button data-theme="espresso" class="theme-button theme-espresso">Espresso</button>
<button data-theme="cab" class="theme-button theme-cab">Cab</button>
<button data-theme="cloud" class="theme-button theme-cloud">Cloud</button>
<button data-theme="lime" class="theme-button theme-lime">Lime</button>
<button data-theme="passion" class="theme-button theme-passion">Passion</button>
<button data-theme="blues" class="theme-button theme-blues">Blues</button>
<button data-theme="chalk" class="theme-button theme-chalk">Chalk</button>
<button data-theme="tron" class="theme-button theme-tron">Tron</button>
<button data-theme="paper" class="theme-button theme-paper">Paper</button>
<button data-theme="cyberpunk" class="theme-button theme-cyberpunk">Cyberpunk</button>
<button data-theme="quadra" class="theme-button theme-panam">Quadra</button>
<button data-theme="panam" class="theme-button theme-panam">Panam</button>
<button data-theme="touch" class="theme-button theme-touch">Touch</button>
<button data-theme="peek" class="theme-button theme-peek">Peek</button>
</div>
<h2>Search options</h2>
<section id="providers">
<table>
<tbody>
<tr>
<th>Website</th>
<th>Prefix</th>
</tr>
{items}
</tbody>
</table>
</section>
<header id="modal-footer">
<a href="https://github.com/jeroenpardon/"><span class="iconify" data-icon="mdi-github-box"></span></a>
<a href="https://materialdesignicons.com/"><span class="iconify" data-icon="mdi-material-design"></span></a>
<div class="sneaky"><input type="checkbox" id="contenttype" onChange="nsfw(this)"></input>
<label for="contenttype"><span class="iconify" data-icon="mdi-domino-mask"></span></label></div>
</header>
</div>
</section>
);
}
function Provider(props) {
console.log(props);
return (
<tr>
<td><a href={props.provider.url}>{props.provider.name}</a></td>
<td>{props.provider.prefix}</td>
</tr>
);
}
function ModalInit() {
return (
<div id="modal_init">
<a class="btn" href="#modal">
<span class="iconify icon" data-icon="mdi-xbox-controller-menu"></span>
</a>
</div>
);
}
ReactDOM.render(
<Homepage />,
document.getElementById('root')
);
//Functions below this line are for calculating data for
//other functions
function date() {
let currentDate = new Date();
let dateOptions = {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
};
let date = currentDate.toLocaleDateString("en-GB", dateOptions);
return date;
}
function fixDigits(k) {
if (k < 10) {
return "0" + k;
}
else {
return k;
}
}
function greet() {
let currentTime = new Date();
let greet = Math.floor(currentTime.getHours() / 6);
let easterEggChance = Math.floor(Math.random() * 100);
let greetings = require('./messages.json');
let timeBased = [];
let easterEggs = [];
for (var i = 0; i < greetings.messages.length; i++) {
if (greetings.messages[i].easteregg == "FALSE") {
timeBased = timeBased.concat(greetings.messages[i]);
} else {
easterEggs = easterEggs.concat(greetings.messages[i]);
}
}
if (easterEggChance > 10) {
return timeBased[greet].message;
} else {
let easterEggText = Math.floor(Math.random() * easterEggs.length);
return easterEggs[easterEggText].message;
}
}
function Clock() {
const [date, setDate] = useState(new Date());
function refreshClock() {
setDate(new Date());
}
useEffect(() => {
const timerId = setInterval(refreshClock, 1000);
return function cleanup() {
clearInterval(timerId);
};
}, []);
var hour = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var midday = "AM";
midday = (hour >= 12) ? "PM" : "AM";
hour = (hour == 0) ? 12 : ((hour > 12) ? (hour - 12) : hour);
minutes = fixDigits(minutes);
seconds = fixDigits(seconds);
let time = hour + ":" + minutes + " " + midday;
return (
<h2 id="clock">{time}</h2>
);
}
function getApps() {
let applications = require('./apps.json');
return applications;
}
function getLinks() {
let links = require('./links.json');
return links;
}
function getProviders() {
let providers = require('./providers.json');
return providers;
}

206
src/links.json Normal file
View File

@@ -0,0 +1,206 @@
{
"bookmarks" : [
{
"category": "Communicate",
"links": [
{
"name": "Discord",
"url": "https://discord.com/channels/@me"
},
{
"name": "Gmail (magnumdigitals@gmail.com)",
"url": "https://mail.google.com/mail/u/0/#inbox"
},
{
"name": "Gmail (smedmunds226@gmail.com)",
"url": "https://mail.google.com/mail/u/1/#inbox"
}
]
},
{
"category": "Cloud",
"links": [
{
"name": "Nextcloud",
"url": "https://home.halfaperture.com/nextcloud"
},
{
"name": "OneDrive",
"url": "https://onedrive.live.com"
},
{
"name": "Drive",
"url": "https://drive.google.com"
}
]
},
{
"category": "Reddit",
"links": [
{
"name": "Front Page",
"url": "https://reddit.com"
},
{
"name": "/r/popular",
"url": "https://reddit.com/r/popular"
},
{
"name": "/r/MechanicalKeyboards",
"url": "https://reddit.com/r/mechanicalkeyboards"
},
{
"name": "/r/plex",
"url": "https://reddit.com/r/plex"
}
]
},
{
"category": "Gaming",
"links": [
{
"name": "Genshin.gg",
"url": "https://genshin.gg"
},
{
"name": "Steam Store",
"url": "https://steampowered.com"
},
{
"name": "D&D Beyond",
"url": "https://www.dndbeyond.com/"
},
{
"name": "Roll 20",
"url": "https://roll20.net/"
}
]
},
{
"category": "Banking",
"links": [
{
"name": "Chase",
"url": "https://chase.com"
},
{
"name": "Ally",
"url": "https://secure.ally.com/"
},
{
"name": "Mint",
"url": "https://mint.intuit.com/"
}
]
},
{
"category": "Media",
"links": [
{
"name": "Plex",
"url": "http://plex.tv"
},
{
"name": "Twitch",
"url": "http://twitch.tv"
},
{
"name": "Netflix",
"url": "http://netflix.com"
},
{
"name": "YouTube",
"url": "https://youtube.com/feed/subscriptions"
}
]
},
{
"category": "Photography",
"links": [
{
"name": "Personal Site",
"url": "https://www.seanedmunds.com/"
},
{
"name": "Lightroom Online",
"url": "https://lightroom.adobe.com"
},
{
"name": "Instagram",
"url": "https://instagram.com/smedmunds226"
},
{
"name": "Reddit multi",
"url": "https://www.reddit.com/user/magnum226/m/photography/"
}
]
},
{
"category": "Home Lab",
"links": [
{
"name": "Gunrack",
"url": "https://gunrack/"
},
{
"name": "Guacamole",
"url": "https://home.halfaperture.com/guacamole"
},
{
"name": "Unifi",
"url": "https://network.unifi.ui.com"
}
]
},
{
"category": "Keyboards",
"links": [
{
"name": "Novelkeys",
"url": "https://novelkeys.xyz"
},
{
"name": "KBDfans",
"url": "https://kbdfans.com"
},
{
"name": "Epomaker",
"url": "https://epomaker.com/"
},
{
"name": "Divinikey",
"url": "https://divinikey.com/"
},
{
"name": "MonkeyType",
"url": "https://monkeytype.com/"
}
]
},
{
"category": "Work",
"links": [
{
"name": "Azure",
"url": "https://portal.azure.com"
},
{
"name": "Office 365",
"url": "https://admin.microsoft.com"
},
{
"name": "Intune",
"url": "https://endpoint.microsoft.com"
},
{
"name": "Exchange Admin Center",
"url": "https://outlook.office365.com/ecp/"
},
{
"name": "Classic Protection",
"url": "https://protection.office.com"
}
]
}
]
}

19
src/messages.json Normal file
View File

@@ -0,0 +1,19 @@
{
"messages" : [
{"index":"1","message":"Good night, Sean!","easteregg":"FALSE"},
{"index":"2","message":"Good morning, Sean!","easteregg":"FALSE"},
{"index":"3","message":"Good afternoon, Sean!","easteregg":"FALSE"},
{"index":"4","message":"Good evening, Sean!","easteregg":"FALSE"},
{"index":"5","message":"See you Space Cowboy...","easteregg":"TRUE"},
{"index":"6","message":"BOYS! Today, the plan is simple...","easteregg":"TRUE"},
{"index":"7","message":"It's about FAMILY","easteregg":"TRUE"},
{"index":"8","message":"Ezekiel 25:17","easteregg":"TRUE"},
{"index":"9","message":"Throw me some numbers","easteregg":"TRUE"},
{"index":"10","message":"Dogs hate grapes","easteregg":"TRUE"},
{"index":"11","message":"WE GET IT AND THAT'S IT","easteregg":"TRUE"},
{"index":"12","message":"That's the Mang0","easteregg":"TRUE"},
{"index":"13","message":"Too soon kid","easteregg":"TRUE"},
{"index":"14","message":"Laws are just ideas","easteregg":"TRUE"},
{"index":"15","message":"I'm sorry Sean, I can't do that","easteregg":"TRUE"}
]
}

19
src/providers.json Normal file
View File

@@ -0,0 +1,19 @@
{
"providers" : [
{"name":"Allmusic","url":"https://www.allmusic.com/search/all/","prefix":"/a"},
{"name":"Discogs","url":"https://www.discogs.com/search/?q=","prefix":"/di"},
{"name":"Duck Duck Go","url":"https://duckduckgo.com/?q=","prefix":"/d"},
{"name":"iMDB","url":"https://www.imdb.com/find?q=","prefix":"/i"},
{"name":"TheMovieDB","url":"https://www.themoviedb.org/search?query=","prefix":"/m"},
{"name":"Reddit","url":"https://www.reddit.com/search?q=","prefix":"/r"},
{"name":"Qwant","url":"https://www.qwant.com/?q=","prefix":"/q"},
{"name":"Soundcloud","url":"https://soundcloud.com/search?q=","prefix":"/so"},
{"name":"Spotify","url":"https://open.spotify.com/search/results/","prefix":"/s"},
{"name":"TheTVDB","url":"https://www.thetvdb.com/search?query=","prefix":"/tv"},
{"name":"Trakt","url":"https://trakt.tv/search?query=","prefix":"/t"},
{"name":"YouTube","url":"https://www.youtube.com/results?search_query=","prefix":"/y"},
{"name":"Wikipedia","url":"https://en.wikipedia.org/w/index.php?search=","prefix":"/w"},
{"name":"Plex","url":"https://app.plex.tv/desktop/#!/search?query=","prefix":"/p"},
{"name":"Rotten Tomatoes","url":"https://www.rottentomatoes.com/search?search=","prefix":"/rt"}
]
}