Skip to content

Instantly share code, notes, and snippets.

@Konfekt
Konfekt / pyrefly_operator.vim
Created December 25, 2025 18:15
check Python code snippets on the fly with pyrefly
" Check Python code snippets on the fly with pyrefly.
" Put into ~/.vim/plugins` and use the mapping `g4` on a visual selection or a text object.
if exists('g:loaded_pyrefly_operator') | finish | endif
let g:loaded_pyrefly_operator = 1
if !executable('pyrefly') | finish | endif
let s:pyrefly_efm = join([
\ '%E%\s%#ERROR %m',
@Konfekt
Konfekt / c_compdb.vim
Last active March 6, 2026 14:59
Automatically generate compile_commands.json for clangd Language Server in Vim; put into ~/.vim/ftplugin/
" Generate compile_commands.json for clangd.
" Prefer CMake export, else Ninja compdb, else Bear + Make with optional append.
if exists('b:did_c_compdb_ftplugin') | finish | endif
let b:did_c_compdb_ftplugin = 1
let s:inflight = {}
augroup c_compdb
autocmd! * <buffer>
@Konfekt
Konfekt / auto_add_alias.sh
Created October 16, 2025 04:59
Automatically add a mutt alias for the sender of each email you open
#!/bin/sh
# Automatically add a mutt alias for the sender of each email you open.
# To use it, add to your muttrc (assuming the script is in your $PATH):
#
# set alias_file=~/.mutt/aliases
# set display_filter = 'auto-add_alias.sh ~/.mutt/aliases'
#
# Originally from https://web.archive.org/web/20130307065724/http://wcm1.web.rice.edu/mutt-tips.html and
# refined at https://github.com/teddywing/mutt-alias-auto-add
@Konfekt
Konfekt / transcribe.py
Last active September 22, 2025 09:33
stand-alone Python script to transcribe audio using OpenAI's 4o or whisper
#!/usr/bin/env python3
"""
CLI transcription tool using OpenAI Audio Transcriptions REST API.
Requires environment variable OPENAI_API_KEY to be set.
- Accepts multiple inputs: files, directories, or glob patterns.
- Writes outputs next to inputs with .txt extension by default.
- If -o/--output is supplied:
* For multiple inputs: treated as an output directory.
* For a single input: treated as a file path if it has a suffix; otherwise as a directory.
@Konfekt
Konfekt / git-grep.pl
Last active September 17, 2025 10:25
smart-case capable git-grep
#!/usr/bin/env perl
use strict;
use warnings;
my ($pattern, $grabnext);
for (@ARGV) {
if ($grabnext or not /^-/) {
$pattern = $_;
last;
} elsif (/^--$/) {
@Konfekt
Konfekt / grep.vim
Last active April 2, 2026 20:18
Set &grepprg to git-grep inside repo and fall back rg, ugrep or grep outside of it
" Set &grepprg to rg, ugrep, git grep or grep otherwise.
" Assumes a global ignore file `$XDG_CONFIG_HOME/grep/ignore`; create it by,
" say `touch ~/.config/grep/ignore` to ensure its existence.
augroup vimrcGrep
autocmd!
augroup END
" Scheduling niceness on Linux.
let s:scheduler = (has('unix') && executable('chrt') && executable('ionice'))
@Konfekt
Konfekt / gitpath.vim
Last active September 17, 2025 13:59
set vim path using git ls-tree
let s:nul = ' 2> ' .. (has('win32') ? 'nul' : '/dev/null')
function! s:outside_repo() abort
if exists('*FugitiveGitDir')
return empty(FugitiveGitDir())
else
" let outside_repo = empty(finddir('.git', getcwd().';')) && empty(findfile('.git', getcwd().';'))
silent let repo = system('git rev-parse --is-inside-work-tree' .. s:nul .. ' 1>&2')
return v:shell_error != 0
endif
@Konfekt
Konfekt / spell-correct-cycle.vim
Last active January 25, 2026 13:24
fix last spelling mistake by Ctrl-Q; jump to it by Ctrl-X,Q
nnoremap <silent><expr> <plug>(FixLastBadSpell) $"\<Cmd>call <SID>FixLastBadSpell()\<CR>"
nnoremap <silent><expr> <C-q> &l:spell ? "\<plug>(FixLastBadSpell)" : "<C-q>"
inoremap <silent><expr> <plug>(FixLastBadSpell) $"\<Cmd>call <SID>FixLastBadSpell()\<CR>"
inoremap <silent><expr> <C-q> &l:spell ? "\<plug>(FixLastBadSpell)" : "<C-q>"
function! s:FixLastBadSpell() abort
" Save current position to return to later.
let last_changedtick = b:changedtick
let last_line_length = len(getline('.'))
let position = getpos('.')[1:3]
@Konfekt
Konfekt / tag_preview.vim
Created March 18, 2025 09:32
mappings to navigate and preview keywords, tags and (macro) more conveniently
" :tjump opens a menu if multiple tags match whereas :tag does not
nnoremap <c-]> g<C-]>
xnoremap <c-]> g<C-]>
" open tag in preview window
nnoremap g] <c-w>g}<c-w>Pzv<c-w>p
xnoremap g] <c-w>g}<c-w>Pzv<c-w>p
" (forcefully) close preview window and jump back
nnoremap <silent><expr> g[ ':<c-u>silent! pclose<cr>:silent! '..v:count1..'pop<cr>'
@Konfekt
Konfekt / file_preview.vim
Last active March 28, 2025 18:14
preview file under cursor in Vim using ctags as fallback
" Adapted from https://github.com/drmikehenry/vimfiles/blob/e5c369dadde340ead7438b0c4937c3f470acf524/vimrc#L3239
"
" With --extra=+f in ~/.ctags respectively --extras=+f in
" ~/.config/ctags/default.ctags, filenames are tags, too, so
" the following mappings will work when a file isn't in the path.
"
" For automatic (C)tags generation, see either
" https://tbaggery.com or https://bolt80.com/gutentags/
nnoremap <silent> gf :<c-u>call <sid>gf("gf")<cr>