2e41ef790dc8

More
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Wed, 27 Aug 2025 16:14:19 -0400
parents 69edbcc7ba7b
children 87ff0514c83b
branches/tags (none)
files .hgsub .hgsubstate bin/battery bin/bht bin/bootstrap.sh bin/hg-clone-llp bin/minimap2-index bin/sb bin/um-pass bootstrap.markdown fish/config.fish htoprc lisp/build-binary.sh lispwords man/index.db remote/bin/arblogs remote/bin/bclogs remote/bin/minimap2-index remote/bin/potential-to-bed remote/bin/run-igv stumpwm/applications.lisp stumpwm/bioinf.lisp stumpwm/brightness.lisp stumpwm/igv.lisp stumpwm/key-mapping.lisp stumpwm/miscellaneous.lisp stumpwm/sound.lisp vim/custom-dictionary.utf-8.add vim/ultisnips-bullshit/htmldjango.snippets vim/ultisnips-bullshit/python.snippets vim/vimrc

Changes

--- a/.hgsub	Tue Mar 25 14:16:24 2025 -0400
+++ b/.hgsub	Wed Aug 27 16:14:19 2025 -0400
@@ -2,6 +2,7 @@
 mercurial/templates              = [hg]ssh://hg.stevelosh.com/repos/mercurial-cli-templates
 vim/bundle/abolish               = [git]https://github.com/tpope/vim-abolish
 vim/bundle/ack                   = [git]https://github.com/mileszs/ack.vim
+vim/bundle/ansible               = [git]https://github.com/pearofducks/ansible-vim
 vim/bundle/badwolf               = [hg]ssh://hg.stevelosh.com/repos/badwolf/
 vim/bundle/boxdraw               = [git]https://github.com/gyim/vim-boxdraw
 vim/bundle/clam                  = [hg]ssh://hg.stevelosh.com/repos/clam.vim/
--- a/.hgsubstate	Tue Mar 25 14:16:24 2025 -0400
+++ b/.hgsubstate	Wed Aug 27 16:14:19 2025 -0400
@@ -2,7 +2,8 @@
 1fc4a9fbead7e0acc4c828b346f3be2658ec3df9 mercurial/templates
 dcbfe065297d31823561ba787f51056c147aa682 vim/bundle/abolish
 36e40f9ec91bdbf6f1adf408522a73a6925c3042 vim/bundle/ack
-6185ce07bdc162a5f3555ff9ddcba661c0f031b2 vim/bundle/badwolf
+3329367d2e5f90d203c8d340c53fa83c60a1ad41 vim/bundle/ansible
+a93aaf7f4247858f5e483dc98001a878a5233761 vim/bundle/badwolf
 b7f789f305b1c5b0b4623585e0f10adb417f2966 vim/bundle/boxdraw
 b542a7bc4d9bc5da8fb12e110fe7975131fb57a4 vim/bundle/clam
 e87cd90dc09c2a203e13af9704bd0ef79303d755 vim/bundle/commentary
@@ -19,7 +20,7 @@
 964c66fa22500ae7375114342d212d7fe15da341 vim/bundle/neoformat
 9310f91476a94ee9c2f3a587171893743a343e26 vim/bundle/nerdtree
 47f6d8508757559fcfa8f49cd93cd5c86ce847f0 vim/bundle/nextflow-vim
-f68f7745fe92429d1fa080a8a7d6d6075be9f752 vim/bundle/nvim-r
+eb97bf7c88480b9f00b6765c09c3886550ed8d43 vim/bundle/nvim-r
 989d1c046bbe36f7d71878636dbe6af8ea3f4f86 vim/bundle/paredit
 1a436f7d875b4ec630da081b041c73264235c7e7 vim/bundle/pgsql
 d241974f40e8d206f9970e51fb0069951862ba35 vim/bundle/python-mode
@@ -39,5 +40,5 @@
 b393ba65386d47664421e1f8b246a87a6e8b218c vim/bundle/ultisnips
 e9d7ff3eb4a369f0cb2069c8f77ae68796bca308 vim/bundle/vim-go
 9df79e15bf035d1cfb32c11fffed38dd7b6a0501 vim/bundle/vimtex
-ce5710a1afe5787ec3e9a60445e21016d0802e7f vim/bundle/vlime
+eee93632fee3b680fe992008b723b0802bb94a60 vim/bundle/vlime
 6876fe38b33732cb124d415ffc4156f16da5e118 vim/bundle/windowswap
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/battery	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+function check_battery {
+    # TODO make this less shit
+    BATT="$1"
+    echo "$BATT"
+    cat "$BATT"/type
+
+    if test -e "$BATT"/online; then
+        echo -n "Online: "
+        cat "$BATT"/online
+    fi
+
+    if test -e "$BATT"/capacity; then
+        echo -n "Capacity (%): "
+        cat "$BATT"/capacity
+    fi
+
+    echo
+}
+
+for b in /sys/class/power_supply/*; do
+    check_battery "$b"
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/bht	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+ffplay -v 0 -nodisp -autoexit ~/bin/bht.mp3
--- a/bin/bootstrap.sh	Tue Mar 25 14:16:24 2025 -0400
+++ b/bin/bootstrap.sh	Wed Aug 27 16:14:19 2025 -0400
@@ -13,6 +13,7 @@
 mkdir -p ~/.config/fish
 mkdir -p ~/.config/nvim
 mkdir -p ~/.config/htop
+mkdir -p ~/.config/mpd
 mkdir -p ~/src/hg
 mkdir -p ~/src/virtualenvs
 mkdir -p ~/bin
@@ -46,8 +47,10 @@
 ensure_link "src/dotfiles/gitignore"                   ".gitignore"
 ensure_link "src/dotfiles/gnuplot"                     ".gnuplot"
 ensure_link "src/dotfiles/hgignore"                    ".hgignore"
+ensure_link "src/dotfiles/htoprc"                      ".config/htop/htoprc"
 ensure_link "src/dotfiles/lisprc"                      ".lisprc"
 ensure_link "src/dotfiles/lispwords"                   ".lispwords"
+ensure_link "src/dotfiles/mpd.conf"                    ".config/mpd/mpd.conf"
 ensure_link "src/dotfiles/mutt"                        ".mutt"
 ensure_link "src/dotfiles/mutt/mailcap"                ".mailcap"
 ensure_link "src/dotfiles/mutt/muttrc"                 ".muttrc"
@@ -56,15 +59,14 @@
 ensure_link "src/dotfiles/sbclrc"                      ".sbclrc"
 ensure_link "src/dotfiles/shellcheckrc"                ".shellcheckrc"
 ensure_link "src/dotfiles/sqliterc"                    ".sqliterc"
+ensure_link "src/dotfiles/stumpwm/local-share-stumpwm" ".local/share/stumpwm"
 ensure_link "src/dotfiles/stumpwm/stumpwmrc"           ".stumpwmrc"
-ensure_link "src/dotfiles/stumpwm/local-share-stumpwm" ".local/share/stumpwm"
 ensure_link "src/dotfiles/vim"                         ".vim"
 ensure_link "src/dotfiles/vim/vimrc"                   ".vimrc"
 ensure_link "src/dotfiles/vim/vimrc-minimal"           ".vimrc-minimal"
+ensure_link "src/dotfiles/w3m-config"                  ".w3m/config"
 ensure_link "src/dotfiles/w3m-keymap"                  ".w3m/keymap"
-ensure_link "src/dotfiles/w3m-config"                  ".w3m/config"
 ensure_link "src/dotfiles/xbindkeysrc"                 ".xbindkeysrc"
 ensure_link "src/dotfiles/xsessionrc"                  ".xsessionrc"
-ensure_link "src/dotfiles/htoprc"                      ".config/htop/htoprc"
 
 echo done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/hg-clone-llp	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+repo="$1"
+
+h clone hsl://"$repo" "$repo"
+cd "$repo"
+llp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/minimap2-index	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+# minimap2-index \
+#     /nfs/turbo/boylelab/slosh/reference-genomes/hg38_no_alt/seq/GCA_000001405.15_GRCh38_no_alt_analysis_set.fna \
+#     map-ont/ \
+#     -x map-ont
+reference="$1"
+shift
+output_dir="$1"
+shift
+
+# remaining opts are e.g. -x ont
+
+minimap="/nfs/turbo/boylelab/slosh/software/minimap2-2.30_x64-linux/minimap2"
+
+mkdir -p "$output_dir"
+
+{
+    echo Minimap version: "$("$minimap" --version)"
+
+    echo Indexing command: " "
+    echo \
+    "$minimap" -t 8 -d "$output_dir/index.mmi" "$reference" "$@"
+
+    echo
+    echo Output:
+    "$minimap" -t 8 -d "$output_dir/index.mmi" "$reference" "$@"
+} >> "$output_dir"/README.txt 2>&1
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/sb	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -e
+
+sbcl --eval '(ql:quickload :losh :silent t)' --eval '(in-package :losh-user)' "$@"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/um-pass	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+echo Retrieving password, press yubikey... > /dev/tty
+pass show umich.edu/slosh | head -1 | tr -d '\n'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bootstrap.markdown	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,175 @@
+# Bootstrapping a New Machine
+
+Notes for myself for the next time I set up a new laptop or whatever.
+
+First, back up everything if necessary:
+
+* Faster on wired ethernet.
+* Don't forget password-store!
+* Don't forget hidden dotfiles!
+
+Install Debian.  Partition everything, install nothing.
+
+Goal is now to get the dotfiles repo onto the machine and have everything
+required to run `bootstrap.sh`.
+
+Boot into a command line as root (no `sudo` yet):
+
+    apt install sudo
+    usermod -a -G sudo sjl
+    usermod -a -G netdev sjl
+
+Allow non-free packages:
+
+    vim /etc/apt/sources.list
+
+    edit to add non-free to lines, e.g.:
+    deb http://http.us.debian.org/debian bookworm main contrib non-free
+
+    apt update
+
+Install first round of stuff:
+
+    apt install \
+        nmtui sudo make
+        curl wget network-manager
+        fish rlwrap
+        mercurial git
+        xcape
+        pulseaudio alsa-utils
+        libzstd-dev libx11-dev libxft-dev
+        build-essential autoconf pkg-config
+        bzip2 udisks2 lm-sensors htop
+        fonts-ubuntu w3m atool psmisc
+        suckless-tools trash-cli
+        dunst neovim python3-dulwich
+        silversearcher-ag
+        irssi
+
+TODO: `xautolock` is no longer in the Debian repos.  Figure out how to get it.
+
+TODO: Need to disable networkd, remove interface from `/etc/interfaces` and
+restart `NetworkManager` to get that in place.
+
+Set up `.ssh` and keys.
+
+Bootstrap lisp:
+
+    sudo apt install sbcl
+    git clone https://github.com/sbcl/sbcl
+    git checkout sbcl-2.3.6
+    SBCL_MAKE_JOBS=-j8 SBCL_MAKE_PARALLEL=8 sh make.sh --with-core-compression
+    sudo sh install.sh
+    sudo apt remove sbcl
+
+    curl -O https://beta.quicklisp.org/quicklisp.lisp
+    sbcl --load quicklisp.lisp
+    (quicklisp-quickstart:install :path "/home/sjl/.quicklisp/")
+
+    TODO CCL and others
+
+Get dotfiles:
+
+    hg clone ssh://hsl/repos/dotfiles
+    cd dotfiles
+    ./bin/bootstrap.sh
+
+    TODO build hg from scratch to get hg-git working maybe
+    TODO bootstrap script might fuck up the fish config because shit's already created, thanks a lot fish
+
+    git clone https://github.com/sjl/z-fish
+
+`chsh` to `/usr/bin/fish`
+
+Clone repos:
+
+    hg clone hsl://adopt adopt
+    cd adopt
+    llp
+    cd ..
+
+    others:
+
+    1am
+    adopt
+    beast
+    bobbin
+    boots
+    cacl
+    chancery
+    cl-d-api
+    cl-digraph
+    cl-losh
+    cl-netpbm
+    cl-pcg
+    conserve
+    d
+    dbvolve
+    docs.stevelosh.com
+    friendly-find
+    jarl
+    peat
+    t
+
+    …etc etc
+
+
+Build st:
+
+    git clone https://github.com/sjl/st
+
+Get a desktop environment up and running:
+
+    sudo apt install xinit xdm
+
+    git clone https://github.com/stumpwm/stumpwm
+
+    (ql:quickload "clx")
+    (ql:quickload "cl-ppcre")
+    (ql:quickload "alexandria")
+    (ql:quickload "xembed")
+
+    ./autogen.sh
+    ./configure
+    make
+    sudo make install
+
+    cd ~/.stumpwm.d/
+    git clone https://github.com/sjl/stumpwm-contrib modules
+    cd modules
+    git co sjl
+
+Set up `pass`:
+
+    git clone sjl@redacted:password-store .password-store
+    sudo apt install pass scdaemon pinentry-gtk2
+    gpg -a --export 5D... > public-key.txt
+    copy over
+    gpg --import < public-key.txt
+
+Pulseaudio crap:
+
+    sudo apt install pulseaudio alsa-utils
+    pulseaudio --start
+    alsamixer
+    (m to unmute, up/down to change vol)
+
+Set up Firefox:
+
+    wget 'https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=en-US'
+    aunpack fi…
+    mv firefox /opt/
+    cd /opt/
+    chown -R root:root firefox
+    ln -s /opt/firefox/firefox /usr/local/bin/firefox 
+    sudo apt install libgtk-3-0 libdbus-glib-1-2
+    finish the rest of this garbage https://wiki.debian.org/Firefox#Hardware_Video_Acceleration
+
+VLC (installs the world, sigh):
+
+    sudo apt install vlc
+    View > Docked Playlist to unbreak the playlist
+
+UM VPN:
+
+    TODO
--- a/fish/config.fish	Tue Mar 25 14:16:24 2025 -0400
+++ b/fish/config.fish	Wed Aug 27 16:14:19 2025 -0400
@@ -115,6 +115,7 @@
 prepend_to_path "$HOME/src/hg"
 prepend_to_path "$HOME/bin"
 prepend_to_path "$HOME/.go/bin"
+prepend_to_path "$HOME/bin/jdk-21.0.2/bin"
 
 set BROWSER open
 
@@ -125,6 +126,8 @@
 set -g -x PAGER 'less -iX'
 # set -g -x _JAVA_OPTIONS "-Djava.awt.headless=true"
 
+set -g -x JAVA_HOME "$HOME/bin/jdk-21.0.2/"
+
 set -g -x GPG_TTY (tty)
 
 # Less Colors for Man Pages
--- a/htoprc	Tue Mar 25 14:16:24 2025 -0400
+++ b/htoprc	Wed Aug 27 16:14:19 2025 -0400
@@ -3,7 +3,7 @@
 htop_version=3.2.2
 config_reader_min_version=3
 fields=0 48 17 18 39 2 46 47 49 1
-hide_kernel_threads=1
+hide_kernel_threads=0
 hide_userland_threads=1
 hide_running_in_container=0
 shadow_other_users=0
@@ -39,14 +39,14 @@
 column_meters_1=RightCPUs2 Tasks LoadAverage Uptime
 column_meter_modes_1=1 2 2 2
 tree_view=1
-sort_key=39
+sort_key=46
 tree_sort_key=0
 sort_direction=-1
 tree_sort_direction=1
 tree_view_always_by_pid=1
 all_branches_collapsed=0
 screen:Main=PID USER PRIORITY NICE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command
-.sort_key=M_RESIDENT
+.sort_key=PERCENT_CPU
 .tree_sort_key=PID
 .tree_view=1
 .tree_view_always_by_pid=1
--- a/lisp/build-binary.sh	Tue Mar 25 14:16:24 2025 -0400
+++ b/lisp/build-binary.sh	Wed Aug 27 16:14:19 2025 -0400
@@ -9,6 +9,6 @@
 sbcl --load "$LISP" \
     --eval "(sb-ext:save-lisp-and-die \"$NAME\"
               :executable t
-              :compression nil
+              :compression t
               :save-runtime-options t
               :toplevel '$NAME:toplevel)"
--- a/lispwords	Tue Mar 25 14:16:24 2025 -0400
+++ b/lispwords	Wed Aug 27 16:14:19 2025 -0400
@@ -92,6 +92,7 @@
 (1 multiple-value-bind*)
 (1 do-repeat do-range do-irange do-ring-buffer do-vector do-file do-hash-set)
 (1 timing profile-when)
+(1 recase)
 
 ; qtools
 (1 qtenumcase)
@@ -145,6 +146,7 @@
 
 ; boots
 (1 event-case)
+(2 canvas)
 
 ; parsnip
 (1 let!)
Binary file man/index.db has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/arblogs	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+sudo journalctl -fu arb_sequencing_worker "$@" \
+    | batchcolor '(ERROR|WARNING|INFO|[0-9]{8}_[0-9]{4}_[-A-Z0-9]+_[A-Z0-9]+_[a-z0-9]{8}|Checking for.* in )' \
+    | cut -d ' ' -f 6-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/bclogs	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+sudo journalctl -fu arb_basecalling_worker "$@" \
+    | batchcolor '(ERROR|WARNING|INFO|[0-9]{8}_[0-9]{4}_[-A-Z0-9]+_[A-Z0-9]+_[a-z0-9]{8}|Checking for.* in )' \
+    | cut -d ' ' -f 6-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/minimap2-index	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,1 @@
+../../bin/minimap2-index
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/potential-to-bed	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+cut -f 1-4,8- | awk -F'\t' -v OFS='\t' '{print $1, $2, $3, $4 " " $5}'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remote/bin/run-igv	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+module load openjdk
+~/src/igv/build/IGV-dist/igv.sh
--- a/stumpwm/applications.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/applications.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -6,6 +6,9 @@
 (defcommand spotify () ()
   (run-or-raise "spotify" '(:class "Spotify")))
 
+(defcommand zoom-meeting () ()
+  (run-or-raise "echom 'No meeting running.'" '(:class "zoom" :title "Meeting")))
+
 (defcommand files () ()
   (run-shell-command "open $HOME"))
 
--- a/stumpwm/bioinf.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/bioinf.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -42,6 +42,28 @@
 (defcommand kmerize (k) ((:integer "k: "))
   (pbcopy (kmerized-string k (pbpaste))))
 
+(defun reverse-complement (seq)
+  (nreverse (map 'string (lambda (base)
+                           (case base
+                             (#\A #\T)
+                             (#\C #\G)
+                             (#\G #\C)
+                             (#\T #\A)
+                             (#\N #\N)
+                             (#\a #\t)
+                             (#\c #\g)
+                             (#\g #\c)
+                             (#\t #\a)
+                             (#\n #\n)
+                             (t #\?)))
+                 seq)))
+
+(defcommand revcomp () ()
+  (pbcopy (reverse-complement (pbpaste))))
+
+(defcommand rev () ()
+  (pbcopy (reverse (pbpaste))))
+
 
 #; Scratch --------------------------------------------------------------------
 
--- a/stumpwm/brightness.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/brightness.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -9,9 +9,7 @@
 (defun set-brightness (value)
   (run-and-echo-shell-command
     (hostcase
-      ((:gro :juss) (format nil "xrandr --output ~A --brightness ~D"
-                      (hostcase ((:gro :juss) "eDP"))
-                      (/ value 100.0)))
+      ((:gro :juss) (format nil "light -S ~D" value))
       (t (message "Not sure how to set brightness on this machine.")))))
 
 (defun rotate-brightness (delta)
--- a/stumpwm/igv.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/igv.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -84,7 +84,8 @@
   (clear-read-selections%))
 
 (defcommand igv/select-reads () ()
-  (select-reads%))
+  (select-reads%)
+  (group% :selected))
 
 (defcommand igv/goto () ()
   (goto%))
--- a/stumpwm/key-mapping.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/key-mapping.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -30,7 +30,7 @@
   ("H-SunPageDown" "st-font-down")
   ("H-z" "fullscreen")
   ("H-Z" "end-zoom")
-  ("S-H-F1" "igv")
+  ("C-S-F1" "bht")
   ("H-F4" "switch-yubikeys")
   ("H-\\" "pass-personal")
   ("H-|" "generate-password")
@@ -39,6 +39,7 @@
   ("H-b" "browser")
   ("H-O" "spotify")
   ("H-o" "files")
+  ("H-t" "zoom-meeting")
   ("H-P" "papers")
   ("F26"   "prev")
   ("S-F26" "next")
@@ -107,8 +108,13 @@
   ("H-n" "next-in-frame")
   ("H-p" "prev-in-frame")
   ("H-N" "pull-hidden-next")
-  ("H-," "pull-from-windowlist"))
+
+  ("H-," "pull-from-windowlist")
+  ("H-less" "title")
 
+  ("H-." "ggo")
+  ("H-greater" "grename")
+  )
 
 (define-top-keys ;; splitting
   ("H-s" "sane-vsplit")
@@ -123,7 +129,8 @@
   ("H-Delete" "gkill"))
 
 (define-top-keys ;; naming
-  ("H-'" "title"))
+  ("H-'" "title")
+  ("H-\"" "grename"))
 
 (define-top-keys ;; sound
   ("H-F1" "mute")
--- a/stumpwm/miscellaneous.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/miscellaneous.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -95,3 +95,18 @@
   (when-let-window (win "^Zoom Meeting.*")
     (kill-window win)
     (message "Killed meeting")))
+
+
+(defcommand ggo () ()
+  (let* ((current-screen (current-screen))
+         (current-group (stumpwm::screen-current-group current-screen))
+         (all-groups (sort (copy-seq (screen-groups current-screen)) #'< :key #'group-number))
+         (groups (mapcar (lambda (group)
+                           (list (format nil "~2D~A~A"
+                                         (group-number group)
+                                         (if (eql current-group group) #\* #\space)
+                                         (group-name group))
+                                 group))
+                         all-groups))
+         (selected (select-from-menu current-screen groups)))
+    (when selected (stumpwm::switch-to-group (second selected)))))
--- a/stumpwm/sound.lisp	Tue Mar 25 14:16:24 2025 -0400
+++ b/stumpwm/sound.lisp	Wed Aug 27 16:14:19 2025 -0400
@@ -30,6 +30,10 @@
   (declare (ignore ml))
   (format nil "~D%" (volume)))
 
+(defcommand bht () ()
+  (run-shell-command (format nil "amixer -q sset Master 50%; bht; amixer -q sset Master ~D%" (volume)))
+  (volume/uncache))
+
 (add-screen-mode-line-formatter #\V #'volume-modeline)
 
 #; Scratch --------------------------------------------------------------------
--- a/vim/custom-dictionary.utf-8.add	Tue Mar 25 14:16:24 2025 -0400
+++ b/vim/custom-dictionary.utf-8.add	Wed Aug 27 16:14:19 2025 -0400
@@ -561,3 +561,10 @@
 reparse
 venv
 env
+concat
+Beszel
+basecallers
+untar
+unclustered
+helicase
+reauthenticate
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vim/ultisnips-bullshit/htmldjango.snippets	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,47 @@
+extends html
+
+snippet % "Tag" i
+{% ${1:tag} %}
+    $0
+{% end %}
+endsnippet
+
+snippet { "Var" i
+{{ $1 }}$0
+endsnippet
+
+snippet include "include" b
+{% include "${1:foo.html}" %}
+endsnippet
+
+snippet includewith "include with" b
+{% include "${1:foo.html}" with ${2:var}=${3:val} ${4:only }%}
+endsnippet
+
+snippet with "With" b
+{% with ${1:var}=${2:val} %}
+    $0
+{% end %}
+endsnippet
+
+snippet for "For" b
+{% for ${1:var} in ${2:val} %}
+    $0
+{% endfor %}
+endsnippet
+
+snippet if "If" b
+{% if ${1:cond} %}
+    $0
+{% endif %}
+endsnippet
+
+snippet else "Else" b
+{% else %}
+    $0
+endsnippet
+
+snippet elif "Elif" b
+{% elif ${1:cond} %}
+    $0
+endsnippet
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vim/ultisnips-bullshit/python.snippets	Wed Aug 27 16:14:19 2025 -0400
@@ -0,0 +1,27 @@
+snippet #! "#!" b
+#!/usr/bin/env python3
+endsnippet
+
+snippet ifmain "if main" b
+if __name__ == '__main__':
+    ${1:pass}
+endsnippet
+
+snippet p "print()" b
+print($1)
+endsnippet
+
+snippet i "if" b
+if ${1:cond}:
+    ${2:pass}
+endsnippet
+
+snippet ei "elif" b
+elif ${1:cond}:
+    ${2:pass}
+endsnippet
+
+snippet e "else" b
+else:
+    ${1:pass}
+endsnippet
--- a/vim/vimrc	Tue Mar 25 14:16:24 2025 -0400
+++ b/vim/vimrc	Wed Aug 27 16:14:19 2025 -0400
@@ -720,6 +720,9 @@
     au BufNewFile,BufRead dashboard.py      normal! zR
     au BufNewFile,BufRead local_settings.py normal! zR
 
+    au BufNewFile,BufRead *.htmldjango     setlocal filetype=htmldjango
+    au BufNewFile,BufRead *.htmldjango.hx  setlocal filetype=htmldjango
+
     au BufNewFile,BufRead admin.py     setlocal filetype=python.django
     au BufNewFile,BufRead urls.py      setlocal filetype=python.django
     au BufNewFile,BufRead models.py    setlocal filetype=python.django
@@ -957,6 +960,10 @@
     au BufNewFile,BufRead *.dram setlocal filetype=htmldjango
 
     au FileType html,jinja,htmldjango,gohtmltmpl setlocal foldmethod=manual
+    au FileType html,jinja,htmldjango,gohtmltmpl setlocal foldmethod=manual
+
+    au FileType html,jinja,htmldjango,gohtmltmp inoremap <silent> <C-c> </<C-X><C-O><C-X><esc>a
+    au FileType html,jinja,htmldjango,gohtmltmp inoremap <c-cr> <cr><esc>O
 augroup END
 
 " }}}
@@ -1601,6 +1608,7 @@
 let g:gundo_preview_bottom = 1
 let g:gundo_tree_statusline = "Gundo"
 let g:gundo_preview_statusline = "Gundo Preview"
+let g:gundo_prefer_python3 = 1
 
 " }}}
 " HTML5 {{{