Skip to content

Instantly share code, notes, and snippets.

View NuroDev's full-sized avatar
🌈

Ben NuroDev

🌈
View GitHub Profile
@NuroDev
NuroDev / Toaster.component.tsx
Created July 13, 2022 14:02
🌙 Themed Toaster ─ Wrapper for `react-hot-toast` to add theming support using `next-themes` & `react-use`
import { Toaster as RHToaster } from 'react-hot-toast';
import { useMedia } from 'react-use';
import { useTheme } from 'next-themes';
import type { WithProps } from '~/types';
enum ThemeType {
LIGHT = 'light',
DARK = 'dark',
SYSTEM = 'system',
@NuroDev
NuroDev / asyncTimeout.ts
Last active July 8, 2022 12:08
🛑 Async Timeout ─ Asynchronous wrapper for the standard JavaScript setTimeout function
const setTimeoutAsync = <
TCallback extends Function = () => void | Promise<void>
>(
cb: TCallback,
delay: number
) =>
new Promise((resolve) =>
setTimeout(() => {
resolve(cb());
}, delay)
@NuroDev
NuroDev / ExampleButton.tsx
Last active July 8, 2022 09:54
👩‍🎨 TypeTheme ─ Theme based class names styling using Tailwind CSS
import clsx from 'clsx';
type Theme<TThemeType extends string> = {
[TType in TThemeType]: string;
} & {
default: string;
};
export const getTheme = <TThemeType extends string>(
theme: TThemeType | 'default' = 'default',
@NuroDev
NuroDev / generateSVGAvatar.ts
Last active June 28, 2022 00:42
🌈 Avatar Generator - Generate an SVG with a background color based on a hash of a provided string
import { createHash } from "node:crypto";
const COLOR_NAMES = ["red", "green", "blue"];
const COLOR_SHADES = [500, 600, 700];
const COLORS: Record<
typeof COLOR_NAMES[number],
Record<typeof COLOR_SHADES[number], string>
> = {
@NuroDev
NuroDev / [...nextauth].ts
Created April 8, 2022 22:26
🔒 Dynamic OAuth Providers - Only load OAuth providers into NextAuth.js if their required client ID / secrete keys are present as environment variables
// pages/api/auth/[...nextauth].ts
import NextAuth from 'next-auth';
import TwitterProvider from 'next-auth/providers/twitter';
import type { OAuthConfig, OAuthUserConfig, Provider } from 'next-auth/providers';
/**
* Supported Provider Type
*
@NuroDev
NuroDev / Animate.component.tsx
Last active April 28, 2022 15:43
🎢 Animate - A small wrapper component for the `motion` library to make it easier to use with React.js
/**
* Note: Requires the following dependencies:
* - `motion`
* - `react-use`
* - `is-web-crawler`
*/
import { animate, spring } from 'motion'
import { isCrawlerUserAgent } from 'is-web-crawler'
import { useEffect, useRef } from 'react'
@NuroDev
NuroDev / generateOtp.ts
Last active April 6, 2022 16:27
🔑 Generate OTP - A simple TypeScript function to generate a one-time passcode (OTP)
import { randomInt } from "crypto";
interface GenerateOtpOptions {
/**
* Chars
*
* @description Whether to include A-Z characters in the generated passcode
*
* @default true
*/
@NuroDev
NuroDev / Cargo.toml
Created August 4, 2020 19:59
📸 Hubble - A simple twitter bot to screenshot a set number of a users tweets
[package]
name = "hubble"
version = "1.1.1"
authors = ["N U R O ™"]
edition = "2018"
[dependencies]
egg-mode = "0.13.0"
failure = "0.1.6"
headless_chrome = "0.9.0"
@NuroDev
NuroDev / Cargo.toml
Created January 18, 2020 21:13
🖼 Cosmo - A simple twitter bot to upload/download an image repeatedly. Used to analyze Twitter image compression results
[package]
name = "cosmo"
version = "1.1.1"
authors = ["N U R O ™"]
edition = "2018"
[dependencies]
egg-mode = "0.13.0"
failure = "0.1.6"
reqwest = "0.9.22"
@NuroDev
NuroDev / .env
Created October 6, 2018 21:22
Raspberry Pi - Home Media Stack | Muximux, Plex, PlexRequests, Sonarr, Radarr, NZBGet, Deluge
# Host directory paths
config_dir=/mnt/Pi/config/
downloads_dir=/mnt/Pi/downloads/
media_dir=/mnt/Pi/media/