Skip to content

Instantly share code, notes, and snippets.

@mengwong
mengwong / hyprland.conf
Created April 10, 2025 03:28
Hyprland “global hotkey” app switcher
# mengwong 20250405
exec-once = ~/.config/hypr/manage-workspace.sh # Set up workspace on startup
# Direct application keybindings that launch or focus
bind = SUPER , E, exec, ~/.config/hypr/manage-workspace.sh emacs
bind = SUPER , F, exec, ~/.config/hypr/manage-workspace.sh firefox
bind = SUPER, 1, exec, ~/.config/hypr/manage-workspace.sh terminal1
bind = SUPER SHIFT, 1, exec, ~/.config/hypr/manage-workspace.sh terminal1
@mengwong
mengwong / manage-workspace.sh
Created April 10, 2025 03:24
Hyprland hotkey app switcher - shell script
#!/bin/bash
# Save as ~/.config/hypr/manage-workspace.sh
# Function to check if a window exists in Hyprland
is_window_open() {
case "$1" in
"firefox")
hyprctl clients | grep -q "class: firefox" > /dev/null
;;
"emacs")
@mengwong
mengwong / evalRWST.hs
Last active June 4, 2023 09:24
evalRWST (RWST r w s (Either String) a) returns Either String (a, w) instead of (Either String a, w)
{-
This library demonstrates the difference between
RWST (Either String) a
RWS (Either String a)
The first form outputs
1 + 2, after bonus = Right (103,[])
5 + 10, after bonus = Right (115,["10 is a big number"])
12 + 19, after bonus = Right (131,["12 is a big number","19? I might run out of toes"])
// usage: select a range to titlecase. go to tools / script edit. run myFunction.
function myFunction() {
var selection = SpreadsheetApp.getActiveSpreadsheet().getSelection();
var ranges = selection.getActiveRangeList().getRanges();
for (var i = 0; i < ranges.length; i++) {
Logger.log('Active Ranges: ' + ranges[i].getA1Notation());
var range = ranges[i];
for (var y = 1; y <= range.getHeight(); y++) {
for (var x = 1; x <= range.getWidth(); x++) {
@mengwong
mengwong / wifi.log
Created December 27, 2020 08:05
Wifi constantly bouncing on Catalina
Under 10.15.7, I woke my MacBook Pro from sleep to find the wifi constantly disconnecting and reconnecting, on a 20 second cycle.
I"m leaving this here in case anybody else finds it useful while troubleshooting.
Once it goes through, I'm gonna reboot.
Sun Dec 27 16:02:15.446 Apple80211Set:9543 Processing APPLE80211_IOC_ROAM
Sun Dec 27 16:02:15.446 Apple80211Set:9557 Processing APPLE80211_IOC_ROAM dataRef:0x7fdb05766a10
Sun Dec 27 16:02:15.446 Apple80211Set:9578 CFType is CFData
Sun Dec 27 16:02:17.657 <kernel> postMessage::1349 APPLE80211_M_BSSID_CHANGED received
@mengwong
mengwong / taxc4.hs
Created June 12, 2020 17:38
tax Credits using numbers closer to reality
#!stack
-- stack --resolver lts-15.12 script
{-# LANGUAGE MultiWayIf #-}
import Data.List (isPrefixOf)
data Person = Person { pname :: String, children :: [Person], income :: Float }
a = Person "Alice" [] 8000
b = Person "Bob" [] 2000
@mengwong
mengwong / taxc3.hs
Created June 12, 2020 16:51
tax Credit in Haskell, using DSL-like syntax to read more like English
#!stack
-- stack --resolver lts-15.12 script
import Data.List (isPrefixOf)
data Person = Person { pname :: String, children :: [Person] }
a = Person "Alice" []
b = Person "Bob" []
c = Person "Carol" [a, b]
@mengwong
mengwong / taxcredits2.hs
Last active June 12, 2020 16:07
tax Credit A, B, and C, via a chain of transformers of the default inherited value
#!stack
-- stack --resolver lts-15.12 script
data Person = Person { pname :: String, children :: [Person] }
a = Person "Alice" []
b = Person "Bob" []
c = Person "Carol" [a, b]
data TaxCredit = TaxCredit { tcname :: String
@mengwong
mengwong / taxcredits.hs
Last active June 12, 2020 14:42
tax Credit A and B, Haskell
#!stack
-- stack --resolver lts-15.12 script
data Person = Person { pname :: String, children :: [Person] }
a = Person "Alice" []
b = Person "Bob" []
c = Person "Carol" [a, b]
data TaxCredit = TaxCredit { tcname :: String, rate :: Person -> Int }
@mengwong
mengwong / taxcredits.py
Last active June 12, 2020 14:44
tax Credit A and B, Python
#!/opt/local/bin/python
# https://twitter.com/mengwong/status/1271434036976603136
from abc import ABC, abstractmethod
class Person:
def __init__(self, children=[]):
self.children = children