890e2d48b6f7

More
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Wed, 22 Oct 2025 15:28:13 -0400
parents 73ac57eeaeea
children d1b9a524e5fe
branches/tags (none)
files XCompose bin/bootstrap.sh bin/chars-to-phred bin/csv2ssv bin/hu bin/lrd bin/n50 bin/ssv2csv bin/ssv2tsv bin/tsv2ssv fish/config.fish gitconfig remote/bin/csv2ssv remote/bin/hu remote/bin/n50 remote/bin/run-igv remote/bin/slurm-shell remote/bin/ssv2csv remote/bin/ssv2tsv remote/bin/tsv2ssv stumpwm/applications.lisp stumpwm/external-screens.lisp stumpwm/igv.lisp stumpwm/key-mapping.lisp stumpwm/miscellaneous.lisp stumpwm/utils.lisp vim/custom-dictionary.utf-8.add

Changes

--- /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