commit 1d434cf63b09f46667894a977873fca5122c465c from: mtmn date: Fri Jul 31 19:31:34 2026 UTC fix foot-server, setup stunnel, etc. 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