--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/XCompose Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,103 @@
+include "%L"
+
+<Multi_key> <D> <G> : "°"
+
+<Multi_key> <a> <asterisk> : "α"
+<Multi_key> <b> <asterisk> : "β"
+<Multi_key> <c> <asterisk> : "ξ"
+<Multi_key> <d> <asterisk> : "δ"
+<Multi_key> <e> <asterisk> : "ε"
+<Multi_key> <f> <asterisk> : "φ"
+<Multi_key> <g> <asterisk> : "γ"
+<Multi_key> <h> <asterisk> : "θ"
+<Multi_key> <i> <asterisk> : "ι"
+<Multi_key> <j> <asterisk> : "ϊ"
+<Multi_key> <k> <asterisk> : "κ"
+<Multi_key> <l> <asterisk> : "λ"
+<Multi_key> <m> <asterisk> : "μ"
+<Multi_key> <n> <asterisk> : "ν"
+<Multi_key> <o> <asterisk> : "ο"
+<Multi_key> <p> <asterisk> : "π"
+<Multi_key> <q> <asterisk> : "ψ"
+<Multi_key> <r> <asterisk> : "ρ"
+<Multi_key> <s> <asterisk> : "σ"
+<Multi_key> <t> <asterisk> : "τ"
+<Multi_key> <u> <asterisk> : "υ"
+<Multi_key> <v> <asterisk> : "ϋ"
+<Multi_key> <w> <asterisk> : "ω"
+<Multi_key> <x> <asterisk> : "χ"
+<Multi_key> <y> <asterisk> : "η"
+<Multi_key> <z> <asterisk> : "ζ"
+
+<Multi_key> <A> <asterisk> : "Α"
+<Multi_key> <B> <asterisk> : "Β"
+<Multi_key> <C> <asterisk> : "Ξ"
+<Multi_key> <D> <asterisk> : "Δ"
+<Multi_key> <E> <asterisk> : "Ε"
+<Multi_key> <F> <asterisk> : "Φ"
+<Multi_key> <G> <asterisk> : "Γ"
+<Multi_key> <H> <asterisk> : "Θ"
+<Multi_key> <I> <asterisk> : "Ι"
+<Multi_key> <J> <asterisk> : "Ϊ"
+<Multi_key> <K> <asterisk> : "Κ"
+<Multi_key> <L> <asterisk> : "Λ"
+<Multi_key> <M> <asterisk> : "Μ"
+<Multi_key> <N> <asterisk> : "Ν"
+<Multi_key> <O> <asterisk> : "Ο"
+<Multi_key> <P> <asterisk> : "Π"
+<Multi_key> <Q> <asterisk> : "Ψ"
+<Multi_key> <R> <asterisk> : "Ρ"
+<Multi_key> <S> <asterisk> : "Σ"
+<Multi_key> <T> <asterisk> : "Τ"
+<Multi_key> <U> <asterisk> : "Υ"
+<Multi_key> <V> <asterisk> : "Ϋ"
+<Multi_key> <W> <asterisk> : "Ω"
+<Multi_key> <X> <asterisk> : "Χ"
+<Multi_key> <Y> <asterisk> : "Η"
+<Multi_key> <Z> <asterisk> : "Ζ"
+
+<Multi_key> <comma> <period> : "…"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- a/bin/bootstrap.sh Fri Aug 29 14:55:22 2025 -0400
+++ b/bin/bootstrap.sh Wed Oct 22 15:28:13 2025 -0400
@@ -67,5 +67,7 @@
ensure_link "src/dotfiles/w3m-keymap" ".w3m/keymap"
ensure_link "src/dotfiles/xbindkeysrc" ".xbindkeysrc"
ensure_link "src/dotfiles/xsessionrc" ".xsessionrc"
+ensure_link "src/dotfiles/XCompose" ".XCompose"
+
echo done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/chars-to-phred Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+
+import sys
+
+print([ord(ch) - ord("!") for ch in sys.stdin.read().rstrip('\n')])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/csv2ssv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+
+import sys
+import csv
+
+def run_file(f):
+ w = csv.writer(sys.stdout, delimiter=' ')
+ for row in csv.reader(f):
+ w.writerow(row)
+
+def run(paths):
+ for path in paths:
+ if path == '-':
+ run_file(sys.stdin)
+ else:
+ with open(path) as f:
+ run_file(f)
+
+if __name__ == '__main__':
+ run(sys.argv[1:] or ['-'])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/hu Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+htop -u $(whoami) "$@"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/lrd Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+cd ~/src/dotfiles/remote/bin
+
+src="../../bin/$1"
+dst="$1"
+
+type "$src"
+
+ln -s "$src" "$dst"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/n50 Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+
+import sys
+
+def n50(lengths):
+ if not lengths:
+ return 0
+
+ ls = sorted(lengths, reverse=True)
+ total = sum(ls)
+ target = total / 2
+
+ x = 0
+ for l in ls:
+ x += l
+ if x >= target:
+ return l
+
+lengths = [int(line) for line in sys.stdin.readlines() if line]
+print(n50(lengths))
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/ssv2csv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+
+import sys
+import csv
+
+def run_file(f):
+ w = csv.writer(sys.stdout, delimiter=',')
+ for row in csv.reader(f, delimiter=' '):
+ w.writerow(row)
+
+def run(paths):
+ for path in paths:
+ if path == '-':
+ run_file(sys.stdin)
+ else:
+ with open(path) as f:
+ run_file(f)
+
+if __name__ == '__main__':
+ run(sys.argv[1:] or ['-'])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/ssv2tsv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+
+import sys
+import csv
+
+def run_file(f):
+ w = csv.writer(sys.stdout, delimiter='\t')
+ for row in csv.reader(f, delimiter=' '):
+ w.writerow(row)
+
+def run(paths):
+ for path in paths:
+ if path == '-':
+ run_file(sys.stdin)
+ else:
+ with open(path) as f:
+ run_file(f)
+
+if __name__ == '__main__':
+ run(sys.argv[1:] or ['-'])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/tsv2ssv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+
+import sys
+import csv
+
+def run_file(f):
+ w = csv.writer(sys.stdout, delimiter=' ')
+ for row in csv.reader(f, delimiter='\t'):
+ w.writerow(row)
+
+def run(paths):
+ for path in paths:
+ if path == '-':
+ run_file(sys.stdin)
+ else:
+ with open(path) as f:
+ run_file(f)
+
+if __name__ == '__main__':
+ run(sys.argv[1:] or ['-'])
--- a/fish/config.fish Fri Aug 29 14:55:22 2025 -0400
+++ b/fish/config.fish Wed Oct 22 15:28:13 2025 -0400
@@ -52,6 +52,7 @@
abbr --add ai "sudo apt install"
abbr --add sc "sudo systemctl"
abbr --add paper --set-cursor=% "cp -t . ~/Sync/papers/files/%"
+abbr --add i "qimgv"
# }}}
# Completions {{{
@@ -141,6 +142,13 @@
set -g -x ANSIBLE_NOCOWS 1
+set -g -x DFT_COLOR 'always' # disable stupid pipe detection
+set -g -x DFT_WIDTH 10000000000 # stop trying to be smart
+set -g -x DFT_TAB_WIDTH 8 # tabs are 8 characters wide
+set -g -x DFT_DISPLAY side-by-side
+set -g -x DFT_CONTEXT 8 # more context
+set -g -x DFT_SYNTAX_HIGHLIGHT off # my eyes
+
# }}}
# Disable Spyware {{{
--- a/gitconfig Fri Aug 29 14:55:22 2025 -0400
+++ b/gitconfig Wed Oct 22 15:28:13 2025 -0400
@@ -45,8 +45,13 @@
d = diff
di = diff --cached
- dl = "!f() { git diff \"$@\" | nvim -R -c 'set ft=diff' -; }; f"
- dil = "!f() { git diff --cached \"$@\" | nvim -R -c 'set ft=diff' -; }; f"
+ dl = "!f() { git diff \"$@\" | less -RS; }; f"
+ dil = "!f() { git diff --cached \"$@\" | less -RS; }; f"
+ dv = "!f() { git diff --no-ext-diff \"$@\" | nvim -R -c 'set ft=diff' -; }; f"
+ div = "!f() { git diff --no-ext-diff --cached \"$@\" | nvim -R -c 'set ft=diff' -; }; f"
+ s = show --ext-diff
+ sl = "!f() { git show --ext-diff \"$@\" | less -RS; }; f"
+ sv = "!f() { git show \"$@\" | nvim -R -c 'set ft=diff' -; }; f"
co = checkout --recurse-submodules
id = rev-parse
@@ -100,8 +105,6 @@
addremove = !git add . && git add -u
addrem = !git addremove
- sl = "!sh -c 'git show --color=always $1 | less -R' -"
-
find-merge = "!sh -c 'git log $1..master --merges -n1' -"
import-patch = am
@@ -164,3 +167,6 @@
textconv = cat
[init]
defaultBranch = main
+
+[diff]
+ external = difft
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/csv2ssv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/csv2ssv
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/hu Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/hu
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/n50 Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/n50
\ No newline at end of file
--- a/remote/bin/run-igv Fri Aug 29 14:55:22 2025 -0400
+++ b/remote/bin/run-igv Wed Oct 22 15:28:13 2025 -0400
@@ -2,5 +2,4 @@
set -euo pipefail
-module load openjdk
~/src/igv/build/IGV-dist/igv.sh
--- a/remote/bin/slurm-shell Fri Aug 29 14:55:22 2025 -0400
+++ b/remote/bin/slurm-shell Wed Oct 22 15:28:13 2025 -0400
@@ -2,17 +2,17 @@
set -euo pipefail
-read -p "Account? "
-acct="$REPLY"
+read -p "Account [apboyle0]? "
+acct="${REPLY:-apboyle0}"
-read -p "Hours? "
-hours="$REPLY"
+read -p "Hours [4]? "
+hours="${REPLY:-4}"
-read -p "CPUs? "
-cpus="$REPLY"
+read -p "CPUs [4]? "
+cpus="${REPLY:-4}"
-read -p "Memory (gb)? "
-mem_gb="$REPLY"
+read -p "Memory (gb) [16]? "
+mem_gb="${REPLY:-16}"
mem_kb=$(( mem_gb * 1024 * 1024 / cpus ))
read -p "X11? "
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/ssv2csv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/ssv2csv
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/ssv2tsv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/ssv2tsv
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/tsv2ssv Wed Oct 22 15:28:13 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/tsv2ssv
\ No newline at end of file
--- a/stumpwm/applications.lisp Fri Aug 29 14:55:22 2025 -0400
+++ b/stumpwm/applications.lisp Wed Oct 22 15:28:13 2025 -0400
@@ -55,18 +55,9 @@
(gather (process-info child)))))))
-(defun dwim-cwd (&optional (window (current-window)))
- (recursively ((proc (process-info (window-pid window)))
- (depth 0))
- (or (first (mapcar (lambda (child)
- (recur child (1+ depth)))
- (children proc)))
- (cwd proc))))
-
(defcommand terminal-here () ()
(terminal-in (dwim-cwd)))
-
(defcommand terminal-apl () ()
(run-shell-command "st -f 'BQN386 Unicode:style=Regular:size=12'"))
--- a/stumpwm/external-screens.lisp Fri Aug 29 14:55:22 2025 -0400
+++ b/stumpwm/external-screens.lisp Wed Oct 22 15:28:13 2025 -0400
@@ -24,3 +24,12 @@
:do (uiop:run-program `("xrandr" "--output" ,output ,@commands))))
(t (message "Not configured on this system."))))
+(defcommand screen-alan () ()
+ (hostcase
+ ((:juss) (loop :with laptop = "eDP"
+ :with extern = "DisplayPort-0"
+ :for (output commands) :in `((,laptop ("--mode" "1920x1080"))
+ (,extern ("--mode" "1920x1080" "--same-as" "eDP")))
+ :do (uiop:run-program `("xrandr" "--output" ,output ,@commands))))
+ (t (message "Not configured on this system."))))
+
--- a/stumpwm/igv.lisp Fri Aug 29 14:55:22 2025 -0400
+++ b/stumpwm/igv.lisp Wed Oct 22 15:28:13 2025 -0400
@@ -1,6 +1,6 @@
(defpackage :stumpwm-user/igv
(:use :cl :losh)
- (:import-from :stumpwm :defcommand :echo)
+ (:import-from :stumpwm :defcommand :echo :run-shell-command)
(:export
:igv/supplementary-on
:igv/supplementary-off
@@ -51,9 +51,12 @@
(defun goto% ()
(ppcre:register-groups-bind (chr start end)
- ("(chr[A-Za-z0-9_]+)[\\s:]+([\\d,]+)(?:[\\s:]+)?([\\d,]+)?" (pbpaste))
+ ("(chr[A-Za-z0-9_]+)[\\s:]+([\\d,]+)(?:[\\s-]+)?([\\d,]+)?" (pbpaste))
(send-igv-command (format nil "goto ~A:~A~@[-~A~]" chr start end))))
+(defun goto-start% ()
+ (send-igv-command "goto chr1:1-1000"))
+
(defun clear-read-selections% ()
(dolist (track-name (alignment-tracks%))
(send-igv-command (format nil "clearSelections ~A" track-name))))
@@ -90,6 +93,9 @@
(defcommand igv/goto () ()
(goto%))
+(defcommand igv/goto-start () ()
+ (goto-start%))
+
(defcommand igv/zoom-in () ()
(zoom-in%))
@@ -103,3 +109,7 @@
(defcommand igv/init () ()
(send-igv-batch-file "/home/sjl/bin/igv.batch"))
+
+(defcommand igv/minimera () ()
+ ; hack because h-m is taken
+ (run-shell-command "~/src/minimera/contrib/minimera-clipboard.sh"))
--- a/stumpwm/key-mapping.lisp Fri Aug 29 14:55:22 2025 -0400
+++ b/stumpwm/key-mapping.lisp Wed Oct 22 15:28:13 2025 -0400
@@ -30,6 +30,7 @@
("H-SunPageDown" "st-font-down")
("H-z" "fullscreen")
("H-Z" "end-zoom")
+ ("S-H-F1" "bht")
("C-S-F1" "bht")
("H-F4" "switch-yubikeys")
("H-\\" "pass-personal")
@@ -135,8 +136,8 @@
(define-top-keys ;; naming
("H-'" "title")
("H-\"" "grename")
- ("H-less" "title")
- ("H-greater" "grename"))
+ ;; ("H-less" "title")
+ ("H-greater" "grename-cwd"))
(define-top-keys ;; sound
("H-F1" "mute")
@@ -190,7 +191,9 @@
(define-key *keymap/igv* (kbd "R") "igv/clear-read-selections")
(define-key *keymap/igv* (kbd "l") "igv/goto")
(define-key *keymap/igv* (kbd "L") "igv/goto-read")
+(define-key *keymap/igv* (kbd "0") "igv/goto-start")
(define-key *keymap/igv* (kbd "i") "igv/init")
+(define-key *keymap/igv* (kbd "m") "igv/minimera")
(define-key *keymap/igv* (kbd "H-i") "igv")
(define-top-keys ;; alternate maps
--- a/stumpwm/miscellaneous.lisp Fri Aug 29 14:55:22 2025 -0400
+++ b/stumpwm/miscellaneous.lisp Wed Oct 22 15:28:13 2025 -0400
@@ -110,3 +110,7 @@
all-groups))
(selected (select-from-menu current-screen groups)))
(when selected (stumpwm::switch-to-group (second selected)))))
+
+(defcommand grename-cwd () ()
+ (when-let ((cwd (dwim-cwd)))
+ (grename (pathname-name (pathname cwd)))))
--- a/stumpwm/utils.lisp Fri Aug 29 14:55:22 2025 -0400
+++ b/stumpwm/utils.lisp Wed Oct 22 15:28:13 2025 -0400
@@ -154,3 +154,11 @@
`(when-let ((,symbol (find-window `(:title ,(ppcre:create-scanner ,title-query)))))
,@body))
+
+(defun dwim-cwd (&optional (window (current-window)))
+ (recursively ((proc (process-info (window-pid window)))
+ (depth 0))
+ (or (first (mapcar (lambda (child)
+ (recur child (1+ depth)))
+ (children proc)))
+ (cwd proc))))
--- a/vim/custom-dictionary.utf-8.add Fri Aug 29 14:55:22 2025 -0400
+++ b/vim/custom-dictionary.utf-8.add Wed Oct 22 15:28:13 2025 -0400
@@ -568,3 +568,4 @@
unclustered
helicase
reauthenticate
+virtualenv