Commit Diff


commit - 2df4f000bf82f199df629615f6247492cead1040
commit + 1d434cf63b09f46667894a977873fca5122c465c
blob - c9e58d59e2762508ed0afd3d768fad4c62e67283
blob + bb906d8c5ab9ec57d39fbbd42bd542b191dfb7e1
--- flake.lock
+++ flake.lock
@@ -180,11 +180,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1785496534,
-        "narHash": "sha256-EASdusMYLuPhOCrE3LmsAGOvGhX3vnKBLxFvj9lI8tU=",
+        "lastModified": 1785531816,
+        "narHash": "sha256-vkMnV0JIyw+g/NmcfoajlGaAO+9a0ezia+FZohQJrik=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "e8827fbbb12015a8dd9f66285aec79d655bcb9f6",
+        "rev": "bf9ce9fec78f95f374e8dd3b503863a3ec128ebe",
         "type": "github"
       },
       "original": {
blob - b9615e049e99230b5e7020acf2ce5351ff90868e
blob + b18bbe3e9e719b5c5c7d424c78f08865c61e1e1b
--- hosts/void/default.nix
+++ hosts/void/default.nix
@@ -14,6 +14,20 @@
     trusted-users = "miro";
   };
 
+  home.activation.stunnelCertificate = lib.hm.dag.entryAfter ["writeBoundary"] ''
+    dataDir="$HOME/.local/share/stunnel"
+    certDir="$dataDir/void"
+    certFile="$certDir/cert.pem"
+    keyFile="$certDir/key.pem"
+
+    if [[ ! -s "$certFile" || ! -s "$keyFile" ]]; then
+      run mkdir -p "$dataDir"
+      run bash -c 'cd "$1" && exec "$2" -domains "$3" -ip-addresses "$4"' \
+        _ "$dataDir" "${lib.getExe pkgs.minica}" "void,void.local,localhost" "127.0.0.1,::1"
+      run chmod 600 "$keyFile"
+    fi
+  '';
+
   home.packages = lib.concatLists (lib.attrValues (with pkgs; {
     web = [
       aerc
@@ -94,6 +108,8 @@
       oha
       rathole
       winbox
+      stunnel
+      minica
     ];
 
     media = [
blob - d56619723e330745b665ea3dd0d30b973d8cd654 (mode 644)
blob + /dev/null
--- hosts/void/overlays/bin/foot
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-if [ -n "${XDG_RUNTIME_DIR:-}" ] && [ -n "${WAYLAND_DISPLAY:-}" ]; then
-	sock="$XDG_RUNTIME_DIR/foot-$WAYLAND_DISPLAY.sock"
-fi
-
-if [ -n "${sock:-}" ] && [ -S "$sock" ]; then
-	exec footclient "$@"
-else
-	exec foot "$@"
-fi
blob - 649dfb40d2bb0a2e812d1ce4cd72f6a375b12b40
blob + ecbf720129e459075185bf4f4f9e2f30390a3d2b
--- hosts/void/overlays/config/shepherd/init.d/foot-server.scm
+++ hosts/void/overlays/config/shepherd/init.d/foot-server.scm
@@ -1,3 +1,3 @@
 ;; -*- mode: scheme; -*-
 (use-modules (helpers))
-(exec-service 'foot-server '("foot" "--server"))
+(exec-service 'foot-server '("/usr/bin/foot" "--server"))
blob - /dev/null
blob + 541596cd5aba01df0559215a264a9a709d369e46 (mode 644)
--- /dev/null
+++ hosts/void/overlays/config/shepherd/init.d/stunnel.scm
@@ -0,0 +1,5 @@
+;; -*- mode: scheme; -*-
+(use-modules (helpers))
+(exec-service 'stunnel
+              (list "stunnel"
+                    (string-append %user-config-dir "/stunnel/stunnel.conf")))
blob - /dev/null
blob + fbb3d2ea0fbd66fc505cfad3171de03b4198d7ca (mode 644)
--- /dev/null
+++ hosts/void/overlays/config/stunnel/stunnel.conf.nix
@@ -0,0 +1,14 @@
+{homeDir, ...}: ''
+  foreground = yes
+  pid =
+
+  [app]
+  accept  = 127.0.0.1:8443
+  connect = 127.0.0.1:8087
+  cert    = ${homeDir}/.local/share/stunnel/void/cert.pem
+  key     = ${homeDir}/.local/share/stunnel/void/key.pem
+
+  sslVersionMin = TLSv1.2
+  ciphersuites  = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
+  options       = NO_RENEGOTIATION
+''
blob - cb2683ba5ae3ac50e33702496653d07de6cd341b
blob + fb4bffd227f8807839b17ea2b88841e8e2d60890
--- hosts/void/overlays/config/volare/config
+++ hosts/void/overlays/config/volare/config
@@ -1,7 +1,7 @@
 set $mod Mod1
 set $alt Mod4
 
-set $term foot
+set $term footclient
 set $menu dmenu_run $dmenu_args
 
 set $wobsock $XDG_RUNTIME_DIR/wob.sock
blob - 1ec1889d667f69364669c19566013fc6f2bf9a8d
blob + a753c28e323e82f1ba5bb12fc4b102cf32aa3a94
--- modules/mixins/dotfiles/config/mpv/mpv.conf
+++ modules/mixins/dotfiles/config/mpv/mpv.conf
@@ -1,3 +1,7 @@
+hwdec=auto-safe
+vo=gpu
+gpu-api=opengl
+
 sub-font="DejaVu Sans"
 sub-font-size=60
 
@@ -13,12 +17,15 @@ save-position-on-quit
 save-watch-history
 resume-playback
 
+save-position-on-quit
+resume-playback
+
 # This makes things safer for F1 and similar videos with common titles after
 # https://github.com/mpv-player/mpv/commit/e143966a7
 resume-playback-check-mtime
 
 script-opts=ytdl_hook-ytdl_path=yt-dlp
-ytdl-format=bestvideo[height<=?720][fps<=?60][vcodec!=?vp9]+bestaudio/best
+ytdl-format=bestvideo[height<=?1080][fps<=?60][vcodec!=?vp9][vcodec!=?av1]+bestaudio/best
 
 # Without downmix sometimes speech is really drowned out by environmental
 # noise.
@@ -35,6 +42,9 @@ volume-max=200
 vd-lavc-threads=4
 demuxer-thread=yes
 
-# There was a bunch of odd amdgpu kernel panics recently, remove later.
+[dv]
+vo=gpu-next
+gpu-api=vulkan
 hwdec=no
-vo=wlshm
+tone-mapping=bt.2446a
+tone-mapping-mode=luma
blob - 36e0ffa4d28093a815f0a526a9ae609970d7a78f
blob + d38061197ee3e9d6bf2dee7dea06563481115b9c
--- modules/mixins/dotfiles/config/shell/rc/aliased-short-names
+++ modules/mixins/dotfiles/config/shell/rc/aliased-short-names
@@ -111,11 +111,11 @@ alias ju='just'
 alias sa='sshs'
 alias h='histdb'
 
-alias rnj='just run'
-alias dfj='just diff'
-alias chj='just check'
-alias bdj='just build'
-alias dpj='just deploy'
+alias rnj='make run'
+alias dfj='make diff'
+alias chj='make check'
+alias bdj='make build'
+alias dpj='make deploy'
 
 alias bexec='bundle exec'
 alias brake='bexec rake'
blob - e9cf5dffd607b19698aa6c1b17c460d4a7bd7449
blob + d7aca74f440faba8e74f210ba4af680d07e432b3
--- modules/mixins/dotfiles/config/shell/rc/prompt-functions
+++ modules/mixins/dotfiles/config/shell/rc/prompt-functions
@@ -1,84 +1,106 @@
 # vim: ft=sh
-_SNOWFLAKE=$(printf '\342\235\204')
-_C_RESET=$(tput sgr0)
-_C_1=$(tput setaf 1)
-_C_2=$(tput setaf 7)
-_C_3=$(tput setaf 244)
-_C_4=$(tput setaf 2)
-_C_6=$(tput setaf 6)
 
-colour_part() {
-	colour_val=''
-	msg="$2"
-	delim="${3- }"
-	[ "$msg" ] || return 1
-	case $1 in
-	1) colour_val=$_C_1 ;;
-	2) colour_val=$_C_2 ;;
-	3) colour_val=$_C_3 ;;
-	4) colour_val=$_C_4 ;;
-	6) colour_val=$_C_6 ;;
+_ESC=$(printf '\033')
+if [ -n "${ZSH_VERSION-}" ]; then
+	_prompt_np_open='%{'
+	_prompt_np_close='%}'
+else
+	_prompt_np_open='\['
+	_prompt_np_close='\]'
+fi
+
+_color() { printf '%s%s[%sm%s' "$_prompt_np_open" "$_ESC" "$1" "$_prompt_np_close"; }
+
+C_RESET=$(_color 0)
+C_1=$(_color 31)
+C_3=$(_color '38;5;244')
+C_4=$(_color 32)
+C_6=$(_color 36)
+
+if [ -n "${ZSH_VERSION-}" ]; then
+	_prompt_percent='%%'
+else
+	_prompt_percent='%'
+fi
+
+_seg() { printf '%s%s%s' "$1" "$2" "$C_RESET"; }
+
+_CORNER_TL=$(_seg "$C_3" '┌')
+_CORNER_BL=$(_seg "$C_3" '└')
+_MARKER_OK=$(_seg "$C_4" "$_prompt_percent")
+_MARKER_ERROR=$(_seg "$C_1" "$_prompt_percent")
+
+_HOSTNAME=$(hostname 2>/dev/null) || _HOSTNAME=''
+_HOSTNAME=${_HOSTNAME%%.*}
+_UID_USER=$(id -un 2>/dev/null) || _UID_USER=''
+
+_prompt_pwd() {
+	case "$PWD" in
+	"$HOME") _seg "$C_4" '~' ;;
+	"$HOME"/*) _seg "$C_4" "~${PWD#"$HOME"}" ;;
+	*) _seg "$C_4" "$PWD" ;;
 	esac
-	if [ "$BASH" ]; then
-		printf '%s ' "$msg"
-	elif [ "$ZSH_VERSION" ]; then
-		printf '%%{%s%%}%s%%{%s%%}'"${delim}" "$colour_val" "$msg" "$_C_RESET"
-	fi
 }
 
-_virt_prompt() {
-	if [ "$_VIRT" ]; then
-		:
-	elif [ "${JUNEST_ENV:-0}" -eq 1 ]; then
-		_VIRT=junest
-	else
-		_VIRT=$(systemd-detect-virt 2>/dev/null)
-		[ "$_VIRT" = none ] && unset _VIRT
-	fi
-	colour_part 6 "$_VIRT"
-}
-
-_hostname_prompt() {
-	[ "$SSH_CLIENT" ] || return
-	if ! [ "$_HOSTNAME" ]; then
-		_HOSTNAME=$(hostname)
-		_HOSTNAME="${_HOSTNAME%%.*}"
-	fi
-	colour_part 3 "$_HOSTNAME"
-}
-
-_devshell_prompt() {
-	[ "$IN_NIX_SHELL" ] || [ "$DEVSHELL_ROOT" ] || return
-	colour_part 6 " $_SNOWFLAKE"
-}
-
-_user_prompt() {
-	if ! [ "${_USER+x}" ]; then
-		user=$(id -un)
-		case $user in
-		miro) _USER='' ;;
-		*) _USER=$user ;;
+_prompt_git() {
+	head=${GIT_DIR:-.git}/HEAD
+	if [ -r "$head" ]; then
+		IFS= read -r ref <"$head" || return
+		case "$ref" in
+		refs/heads/*) _seg "$C_6" "[${ref#refs/heads/}]" ;;
+		*) return ;;
 		esac
+	else
+		return
 	fi
-	colour_part 3 "${_USER:+"$_USER@"}" ''
 }
 
-_pwd_prompt() {
-	[ "$PWD" = "$HOME" ] && return
-	colour_part 4 "${PWD##*/}"
+_prompt_host() {
+	_seg "$C_3" "$_HOSTNAME"
 }
 
+_prompt_takeover() {
+	owner=$(stat -c %U . 2>/dev/null) || return
+	if [ "$owner" = "$_UID_USER" ]; then
+		return
+	fi
+	_seg "$C_1" "$owner"
+	printf ' '
+	_seg "$C_1" "took"
+}
+
+_prompt_time() {
+	_seg "$C_3" "$(date +%H:%M)"
+}
+
 _get_ps1() {
-	if [ "$ZSH_VERSION" ]; then
-		prompt_ender="%(?:%%:%{${_C_1}%}%%%{${_C_RESET}%})"
+	exit_status=$?
+	sep=' '
+	pwd=$(_prompt_pwd)
+	git=$(_prompt_git)
+	time=$(_prompt_time)
+	host=$(_prompt_host)
+	take=$(_prompt_takeover)
+
+	l1="$_CORNER_TL$pwd"
+	if [ -n "$git" ]; then
+		l1="$l1$sep$git"
+	fi
+
+	l2="$_CORNER_BL$time"
+	if [ -n "$host" ]; then
+		l2="$l2$sep$host"
+	fi
+	if [ -n "$take" ]; then
+		l2="$l2$sep$take"
+	fi
+	if [ "$exit_status" -eq 0 ]; then
+		marker=$_MARKER_OK
 	else
-		prompt_ender=%
+		marker=$_MARKER_ERROR
 	fi
-	printf '%s%s%s%s%s%s ' \
-		"$(_devshell_prompt)" \
-		"$(_user_prompt)" \
-		"$(_hostname_prompt)" \
-		"$(_pwd_prompt)" \
-		"$(_virt_prompt)" \
-		"$prompt_ender"
+	l2="$l2$sep$marker"
+
+	# POSIX-compatible printf
+	printf '%s\n%s ' "$l1" "$l2"
 }
blob - 0fb9485d54d7010fa5ccaa292755d9b5cd50cb3e
blob + 5f7d3d57de7935f41c7d9835d2a3cb5647c6836e
--- modules/mixins/dotfiles/config/zsh/rc/plugins
+++ modules/mixins/dotfiles/config/zsh/rc/plugins
@@ -10,13 +10,6 @@ if [[ -f $HOME/.config/zsh/plugins/zsh-autopair/autopa
 	. $HOME/.config/zsh/plugins/zsh-autopair/autopair.zsh
 fi
 
-# https://github.com/zsh-users/zsh-autosuggestions
-export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#eca28f,bold"
-
-if [[ -f $HOME/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh ]]; then
-	. $HOME/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
-fi
-
 # https://github.com/larkery/zsh-histdb
 source $HOME/.config/zsh/plugins/zsh-histdb/sqlite-history.zsh
 source $HOME/.config/zsh/plugins/zsh-histdb/histdb-interactive.zsh