Skip to content

Instantly share code, notes, and snippets.

View frzi's full-sized avatar
☢️
Radiating

Freek frzi

☢️
Radiating
View GitHub Profile
@frzi
frzi / WebView.swift
Created November 19, 2022 18:15
Simple WebView in SwiftUI
import Combine
import SwiftUI
import WebKit
struct WebView: NSViewRepresentable {
let url: URL
@Binding var title: String
private(set) var onCommitHandlers: [(URL) -> Void] = []
@frzi
frzi / BlankApp.swift
Last active April 21, 2022 18:17
Creating a blank window on macOS
import Cocoa
final class App {
private static var shared: App?
static func main() {
shared = App()
}
// MARK: -
@frzi
frzi / Blur.swift
Created November 22, 2021 17:22
Blur view for macOS
import SwiftUI
#if os(macOS)
import AppKit
struct Blur: NSViewRepresentable {
fileprivate var blending: NSVisualEffectView.BlendingMode
fileprivate var style: NSVisualEffectView.Material
/**
* Keychain.swift
* Created by frzi (github.com/frzi)
*/
import Foundation
import Security
class Keychain {
fileprivate class func getKeychainQuery(_ key: String) -> NSMutableDictionary {
@frzi
frzi / UserDefault.swift
Created March 11, 2021 11:51
UserDefault property wrapper
/// Example of usage:
/// ```swift
/// @UserDefault("username") var username: String? = nil
/// @UserDefault("maxItems") var maxItems = 100
/// ```
@propertyWrapper
struct UserDefault<T> {
let defaultValue: T
let key: String
private let environment: UserDefaults
@frzi
frzi / EventEmitter.ts
Last active February 9, 2021 21:06
Strongly typed Event Emitter
/**
* Custom written EventEmitter.
* Shares most of the same interface as Node.js' Event Emitter.
* Except everything is strongly typed and stored in `#listeners`.
*/
type Arguments<T> = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]
type Listener<T> = (...argv: Arguments<T>) => void
interface DefaultEvents {
@frzi
frzi / discord-minesweeper.js
Last active August 23, 2023 14:07
Generate Minesweeper for Discord
// https://gist.github.com/frzi/5c397d396db3b94c281d57e803227db8
const MINE = -1
function generateSpaces(width = 9, height = 9, mines = 15) {
const totalSpaces = width * height
mines = Math.min(totalSpaces - 1, Math.abs(mines))
let spaces = new Array(totalSpaces).fill(0)
let openSpaces = spaces.map((_, index) => index)
@frzi
frzi / index.d.ts
Last active September 19, 2019 19:56
Polka Typescript definitions
/**
* Potential candidate for @types/polka.
*/
// Type definitions for polka 1.0.0
// Project: https://github.com/lukeed/polka
// Definitions by: Freek Zijlmans <https://github.com/frzi>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.0
@frzi
frzi / useForceUpdate.js
Last active October 31, 2022 18:43
useForceUpdate in React with hooks.
// Put me somewhere accessible.
const useForceUpdate = () => {
const [_, setState] = useState(0)
return () => setState(val => val + 1)
}
// Example.
const Component = () => {
const forceUpdate = useForceUpdate()
@frzi
frzi / Console.swift
Created May 23, 2017 07:41
Javascript's Console functions in Swift.
// Fuck it.
private func makeString(prefix: String? = nil, values: [Any]) -> String {
var str = prefix ?? ""
for val in values {
str += "\(val) "
}
return str
}