diff --git a/.snippets/lf b/.snippets/lf new file mode 100644 index 0000000..4b0b3e7 --- /dev/null +++ b/.snippets/lf @@ -0,0 +1,140 @@ +# interpreter for shell commands +set shell sh + +# set '-eu' options for shell commands +# These options are used to have safer shell commands. Option '-e' is used to +# exit on error and option '-u' is used to give error for unset variables. +# Option '-f' disables pathname expansion which can be useful when $f, $fs, and +# $fx variables contain names with '*' or '?' characters. However, this option +# is used selectively within individual commands as it can be limiting at +# times. +set shellopts '-eu' + +# set internal field separator (IFS) to "\n" for shell commands +# This is useful to automatically split file names in $fs and $fx properly +# since default file separator used in these variables (i.e. 'filesep' option) +# is newline. You need to consider the values of these options and create your +# commands accordingly. +set ifs "\n" + +# leave some space at the top and the bottom of the screen +set scrolloff 10 + +# use enter for shell commands +map shell + +# execute current file (must be executable) +map x $$f +map X !$f + +# dedicated keys for file opener actions +## map o &mimeopen $f +## map O $mimeopen --ask $f +map o open $f + +## toggle hidden files +map . set hidden! + +# define a custom 'open' command +# This command is called when current file is not a directory. You may want to +# use either file extensions and/or mime types here. Below uses an editor for +# text files and a file opener for the rest. +cmd open ${{ + ## test -L $f && f=$(readlink -f $f) + ## case $(file --mime-type $f -b) in + ## text/*) $EDITOR $fx;; + ## *) for f in $fx; do setsid $OPENER $f > /dev/null 2> /dev/null & done;; + ## esac + test -L $f && f=$(readlink -f $f) + case $f in + # *.css) vim $fx;; + # *.hs) vim $fx;; + # *.js) vim $fx;; + # *.json) vim $fx;; + # *.md) vim $fx;; + *.pdf) zathura --mode fullscreen $fx & > /dev/null 2>&1 ;; + # *.sh) vim $fx;; + # *.ts) vim $fx;; + # *.txt) vim $fx;; ## Open directly in the same terminal; no & at the end. + # *.yml) vim $fx;; + # *rc) vim $fx;; + *.R) rstudio $fx & > /dev/null 2>&1 ;; + *.png) DISPLAY=:0 feh --borderless --hide-pointer $fx & > /dev/null 2>&1 ;; + *.jpg) DISPLAY=:0 feh --borderless --hide-pointer $fx & > /dev/null 2>&1 ;; + *.html) rose "file://$fx" > /dev/null 2>&1 &;; + # *) xdg-open $fx > /dev/null 2>&1 &;; + *) nvim $fx;; + # *) vim -X $fx;; + # ^ temporary solution for Xmonad + #*) case $(file --mime-type $f -b) in + # text/*) vim $fx ;; + # *) xdg-open $fx;; + ## *) for f in $fx; do setsid $OPENER $f > /dev/null 2> /dev/null & done;; + ## esac;; + esac + ## /usr/bin/xdg-open $f +}} + +# define a custom 'rename' command without prompt for overwrite +cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1 +map r push :rename + +# make sure trash folder exists +%mkdir -p ~/.trash + +# move current file or selected files to trash folder +# (also see 'man mv' for backup/overwrite options) +cmd trash %set -f; mv $fx ~/.trash +# cmd trash echo "too easy to press accidentally" +# define a custom 'delete' command +# cmd delete ${{ +# set -f +# printf "$fx\n" +# printf "delete?[y/n]" +# read ans +# [ $ans = "y" ] && rm -rf $fx +# }} + +# use '' key for either 'trash' or 'delete' command +map trash +# map delete + +# Map numpad to arrows +# map i up +# map , down +# map j updir +# map l open +# map k down + +# extract the current file with the right command +# (xkcd link: https://xkcd.com/1168/) +cmd extract ${{ + set -f + case $f in + *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;; + *.tar.gz|*.tgz) tar xzvf $f;; + *.tar.xz|*.txz) tar xJvf $f;; + *.zip) unzip $f;; + *.rar) unrar x $f;; + *.7z) 7z x $f;; + esac +}} + +# compress current file or selected files with tar and gunzip +cmd tar ${{ + set -f + mkdir $1 + cp -r $fx $1 + tar -czf $1.tar.gz $1 + rm -rf $1 +}} + +# compress current file or selected files with zip +cmd zip ${{ + set -f + mkdir $1 + cp -r $fx $1 + zip -r $1.zip $1 + rm -rf $1 +}} + diff --git a/blog/2022/12/05/goodhart-politics/index.md b/blog/2022/12/05/goodhart-politics/index.md index 2eb3b7e..7631c00 100644 --- a/blog/2022/12/05/goodhart-politics/index.md +++ b/blog/2022/12/05/goodhart-politics/index.md @@ -19,7 +19,7 @@ So each side is skilled at articulating its opponent's weakeness, but is not as The root of the problem is that both sides of this debate are in the wrong. Each side contains an [inherent rhetorical contradiction](https://en.wikipedia.org/wiki/Aporia#Definitions): they advocate for an imperfect mechanism that doesn't always prioritize human flourishing, while not realizing the degree to which it will not. This is my diagnosis for the current political stalemate. -![Three arrows pointing in roughly the same direction, but with small differences. Two arrows represent two ideologies, another represents human flourishing. Although the human flourishing arrows and the ideology arrows seem close, they eventually start to diverge.](https://i.imgur.com/tlCqq4q.png) +![Three arrows pointing in roughly the same direction, but with small differences. Two arrows represent two ideologies, another represents human flourishing. Although the human flourishing arrows and the ideology arrows seem close, they eventually start to diverge.](https://images.nunosempere.com/blog/2022/12/05/goodhart-politics/diagram-1.png) ### Proposed solutions