Skip to content

Instantly share code, notes, and snippets.

@felixr
felixr / guide.md
Created April 3, 2026 12:30
Vimium-C guide

My guide to Vimium-C

  • match CSS selector to match elements
    • e.g. map X LinkHints.activate match="li" to hint all
    • elements.
  • clickable CSS selector to match clickable elements
    • e.g. map X LinkHints.activate clickable="li" will add all <li> elements to the set of clickable elements and show hints on the clickable elements. The difference to match is that it extends the default logic for finding clickable elements and it does not replace it.
  • clickableOnHost per-host clickable settings
    • This allows you to set clickable to different values depending on the current host.
@felixr
felixr / LuaFormatter.md
Last active October 18, 2025 17:29
Lua formatter for silverbullet

Lua Formatter

lua_formatter = lua_formatter or { initDone = false }

-- Not using @johnnymorganz/stylua@2.3.0/stylua.web/stylua_lib.js
-- because of https://github.com/JohnnyMorganz/StyLua/issues/999
@felixr
felixr / gist:936d4b43e26502396a15f2b2f1a67178
Last active March 28, 2025 21:43
bash: run multiple commands and show last line of output
#!/bin/bash
TMPDIR="$(mktemp -d)"
cmd_status() {
local pid=$1
local cmd=$2
local log=$3
if ps h ${PIDS[$cmd_idx]} > /dev/null; then
echo -e "› \033[32m${cmd}\033[0m"
@felixr
felixr / compression_puzzle.uiua
Last active July 19, 2024 21:36
compression puzzle in uiua
https://www.uiua.org/pad?src=0_12_0-dev_2__8J-UoiDihpAg4oqCwrDii5XiipniiqLiirjip7sK8J-XnO-4jyDihpAg4pmt4oi14peH8J-UouKKnOKWoeKKuC1AIAriiY0iM0EyQjJBMUMi8J-XnO-4jyJBQUFCQkFBQyIK
🔢 ← ⊂°⋕⊙⊢⊸⧻
🗜️ ← ♭∵◇🔢⊜□⊸-@
≍"3A2B2A1C"🗜️"AAABBAAC"
@felixr
felixr / LenovoL13YogaGen2.json
Created January 20, 2024 17:45
Lenovo L13 Yoga Gen2 nbfc config
{
"NotebookModel": "LENOVO 20R4001CBR",
"Author": "Rafaelti",
"EcPollInterval": 2000,
"ReadWriteWords": false,
"CriticalTemperature": 92,
"FanConfigurations": [
{
"ReadRegister": 149,
"WriteRegister": 148,
@felixr
felixr / background.js
Last active January 1, 2021 16:15
Proof of concept chrome extension to listen to all tab events
function handleEvent(name, payload) {
fetch('http://localhost:8118/report?'+JSON.stringify({name, payload}));
}
chrome.tabs.onActivated.addListener(
(tabId, windowId) => handleEvent("activated", {tabId, windowId}));
chrome.tabs.onActiveChanged.addListener(
(tabId, selectInfo) => handleEvent("activeChanged", {tabId, selectInfo}));

Intro

This describes an adaptive, stable, natural mergesort, modestly called timsort (hey, I earned it ). It has supernatural performance on many kinds of partially ordered arrays (less than lg(N!) comparisons needed, and as few as N-1), yet as fast as Python's previous highly tuned samplesort hybrid on random arrays.

In a nutshell, the main routine marches over the array once, left to right, alternately identifying the next run, then merging it into the previous

(defn insertion-sort [arr left right]
(for i (+ left 1) (+ right 1)
(def temp (in arr i))
(var j (- i 1))
(while (and (>= j left) (> (in arr j) temp))
(set (arr (+ j 1)) (in arr j))
(-- j))
(set (arr (+ j 1)) temp))
arr)
@felixr
felixr / debug.janet
Last active December 19, 2020 18:59
Debug macro for janet
(defmacro dbg! [form]
(let [func (first form)
args (drop 1 form)]
(var accum @['do])
(var syms @[])
(each arg args
(let [sym (gensym)]
(array/push accum (tuple 'def sym arg))
(array/push syms [arg sym])))
@felixr
felixr / generate_search_index.js
Created December 10, 2020 17:10
Generate searchIndex entries for janet docset
function dtype(t) { return t=="function" ? "Function" : (t=="macro" ? "Macro": "Builtin");}
let s = "";
for (let b of document.querySelectorAll('.binding')) {
s += `INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES ("${b.firstChild.id}","${dtype(b.children[1].innerText)}","api/index.html#${b.firstChild.id}");\n`;
}
s