bookmarks update. - dotfiles - These are my dotfiles. There are many like it, but these are mine.
 (HTM) git clone git://jay.scot/dotfiles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 3e9f90e8edaa65ee7a6fa4a48a574aa65a58fb26
 (DIR) parent f1ecc6cd5d87ce0369fe692213b63744516cc59b
 (HTM) Author: Jay Scott <me@jay.scot>
       Date:   Sat,  6 Dec 2025 18:37:54 +0000
       
       bookmarks update.
       
       Diffstat:
         M ashrc                               |       4 ----
         A bin/fet.sh                          |     266 +++++++++++++++++++++++++++++++
         M bin/link-handler.sh                 |       1 +
         M fdm/config                          |      13 ++++---------
         M lynx/bookmarks.html                 |      20 ++++++++++----------
         M nvim/init.lua                       |      17 ++++++++++++++++-
         M sfeed/sfeedrc                       |       1 -
       
       7 files changed, 297 insertions(+), 25 deletions(-)
       ---
 (DIR) diff --git a/ashrc b/ashrc
       @@ -41,8 +41,6 @@ alias rm='rm -i'
        # random alias
        alias weather='curl wttr.in/?1QF'
        alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
       -alias 0ad='flatpak run com.play0ad.zeroad'
       -alias openra='flatpak run net.openra.OpenRA'
        alias c89='gcc -ansi -pedantic'
        
        # git alias
       @@ -61,5 +59,3 @@ alias mpv="mpv --autofit=30% --really-quiet --no-terminal"
        alias von='doas resolvconf -u && doas wg-quick up be-bru-wg-103'
        alias voff='doas wg-quick down be-bru-wg-103'
        alias vcheck='curl https://am.i.mullvad.net/connected'
       -
       -alias s='ddgr --unsafe --noua'
 (DIR) diff --git a/bin/fet.sh b/bin/fet.sh
       @@ -0,0 +1,266 @@
       +#!/bin/sh
       +#
       +#    fet.sh
       +#  a fetch in pure POSIX shell
       +#
       +
       +# supress errors
       +exec 2>/dev/null
       +set --
       +eq() {  # equals  |  [ a = b ] with globbing
       +        case $1 in
       +                $2) ;;
       +                *) return 1;;
       +        esac
       +}
       +
       +## DE
       +wm=$XDG_CURRENT_DESKTOP
       +[ "$wm" ] || wm=$DESKTOP_SESSION
       +
       +## Distro
       +# freedesktop.org/software/systemd/man/os-release.html
       +# a common file that has variables about the distro
       +for os in /etc/os-release /usr/lib/os-release; do
       +        # some POSIX shells exit when trying to source a file that doesn't exist
       +        [ -f $os ] && . $os && break
       +done
       +
       +if [ -e /proc/$$/comm ]; then
       +        ## Terminal
       +        while [ ! "$term" ]; do
       +                # loop over lines in /proc/pid/status until it reaches PPid
       +                # then save that to a variable and exit the file
       +                while read -r line; do
       +                        eq "$line" 'PPid*' && ppid=${line##*:?} && break
       +                done < "/proc/${ppid:-$PPID}/status"
       +
       +                # Make sure not to do an infinite loop
       +                [ "$pppid" = "$ppid" ] && break
       +                pppid=$ppid
       +
       +                # get name of binary
       +                read -r name < "/proc/$ppid/comm"
       +
       +                case $name in
       +                        *sh|"${0##*/}") ;;  # skip shells
       +                        *[Ll]ogin*|*init|*systemd*) break;;  # exit when the top is reached
       +                        # anything else can be assumed to be the terminal
       +                        # this has the side affect of catching tmux, but tmux
       +                        # detaches from the terminal and therefore ignoring that
       +                        # will just make the init the term
       +                        *) term=$name
       +                esac
       +        done
       +
       +        ## WM/DE
       +        [ "$wm" ] ||
       +                # loop over all processes and check the binary name
       +                for i in /proc/*/comm; do
       +                        read -r c < "$i"
       +                        case $c in
       +                                *bar*|*rc) ;;
       +                                awesome|xmonad*|qtile|sway|i3|[bfo]*box|*wm*) wm=${c%%-*}; break;;
       +                        esac
       +                done
       +
       +        ## Memory
       +        # loop over lines in /proc/meminfo until it reaches MemTotal,
       +        # then convert the amount (second word) from KB to MB
       +        while read -r line; do
       +                eq "$line" 'MemTotal*' && set -- $line && break
       +        done < /proc/meminfo
       +        mem="$(( $2 / 1000 ))MB"
       +
       +        ## Processor
       +        while read -r line; do
       +                case $line in
       +                        vendor_id*) vendor="${line##*: } ";;
       +                        model\ name*) cpu=${line##*: }; break;;
       +                esac
       +        done < /proc/cpuinfo
       +
       +        ## Uptime
       +        # the simple math is shamefully stolen from aosync
       +        IFS=. read -r uptime _ < /proc/uptime
       +        d=$((uptime / 60 / 60 / 24))
       +        up=$(printf %02d:%02d $((uptime / 60 / 60 % 24)) $((uptime / 60 % 60)))
       +        [ "$d" -gt 0 ] && up="${d}d $up"
       +
       +        ## Kernel
       +        read -r _ _ version _ < /proc/version
       +        kernel=${version%%-*}
       +        eq "$version" '*Microsoft*' && ID="fake $ID"
       +
       +        ## Motherboard // laptop
       +        read -r model < /sys/devices/virtual/dmi/id/product_name
       +        # invalid model handling
       +        case $model in
       +                # alternate file with slightly different info
       +                # on my laptop it has the device model (instead of 'hp notebook')
       +                # on my desktop it has the extended motherboard model
       +                'System '*|'Default '*|'To Be Filled'*)
       +                        read -r model < /sys/devices/virtual/dmi/id/board_name
       +        esac
       +
       +        ## Packages
       +        # clean environment, then make every file in the dir an argument,
       +        # then save the argument count to $pkgs
       +        set --
       +        # kiss, arch, debian, void, gentoo
       +        for i in '/var/db/kiss/installed/*'  '/var/lib/pacman/local/[0-9a-z]*' \
       +        '/var/lib/dpkg/info/*.list'  '/var/db/xbps/.*'  '/var/db/pkg/*/*'; do
       +                set -- $i
       +                [ $# -gt 1 ] && pkgs=$# && break
       +        done
       +
       +        read -r host < /proc/sys/kernel/hostname
       +elif [ -f /var/run/dmesg.boot ]; then
       +        # Both OpenBSD and FreeBSD use this file, however they're formatted differently
       +        read -r bsd < /var/run/dmesg.boot
       +        case $bsd in
       +        Open*)
       +                ## OpenBSD cpu/mem/name
       +                while read -r line; do
       +                        case $line in
       +                                'real mem'*)
       +                                        # use the pre-formatted value which is in brackets
       +                                        mem=${line##*\(}
       +                                        mem=${mem%\)*}
       +                                ;;
       +                                # set $cpu to everything before a comma and after the field name
       +                                cpu0:*)
       +                                        cpu=${line#cpu0: }
       +                                        # Remove excess info after the actual CPU name
       +                                        cpu=${cpu%%,*}
       +                                        # Set the CPU Manufacturer to the first word of the cpu
       +                                        # variable [separated by '(' or ' ']
       +                                        vendor=${cpu%%[\( ]*}
       +                                        # We got all the info we want, stop reading
       +                                        break
       +                                ;;
       +                                # First 2 words in the file are OpenBSD <version>
       +                                *) [ "$ID" ] || { set -- $line; ID="$1 $2"; }
       +                        esac
       +                done < /var/run/dmesg.boot
       +                [ -d /var/db/pkg ] && set -- /var/db/pkg/* && pkgs=$#
       +                read -r host < /etc/myname
       +                host=${host%.*}
       +        ;;
       +        # Everything else, assume FreeBSD (first line is ---<<BOOT>> or something)
       +        *)
       +                # shellcheck source=/dev/null
       +                . /etc/rc.conf
       +                # shut shellcheck up without disabling the warning
       +                host=${hostname:-}
       +
       +                while read -r line; do
       +                        case $line in
       +                                # os version
       +                                FreeBSD*)
       +                                        # If the OS is already set, no need to set it again
       +                                        [ "$ID" ] && continue
       +                                        ID=${line%%-R*}
       +                                ;;
       +
       +                                CPU:*)
       +                                        cpu=${cpu#CPU: }
       +                                        # Remove excess info from after the actual CPU name
       +                                        cpu=${line%\(*}
       +                                ;;
       +                                *Origin=*)
       +                                        # CPU Manufacturer
       +                                        vendor=${line#*Origin=\"}
       +                                        vendor="${vendor%%\"*} "
       +                                ;;
       +
       +                                'real memory'*)
       +                                        # Get the pre-formatted amount which is inside brackets
       +                                        mem=${line##*\(}
       +                                        mem=${mem%\)*}
       +                                        # This appears to be the final thing we need from the file,
       +                                        # no need to read it more.
       +                                        break
       +                        esac
       +                done < /var/run/dmesg.boot
       +        ;;
       +        esac
       +elif v=/System/Library/CoreServices/SystemVersion.plist; [ -f "$v" ]; then
       +        ## Macos
       +        # make sure this variable is empty as to not break the following loop
       +        temp=
       +        while read -r line; do
       +                case $line in
       +                        # set a variable so the script knows it's on the correct line
       +                        # (the line after this one is the important one)
       +                        *ProductVersion*) temp=.;;
       +                        *)
       +                                # check if the script is reading the derired line, if not
       +                                # don't do anything
       +                                [ "$temp" ] || continue
       +                                # Remove everything before and including the first '>'
       +                                ID=${line#*>}
       +                                # Remove the other side of the XML tag, and insert the actual OS name
       +                                ID="MacOS ${ID%<*}"
       +                                # We got the info we want, end the loop.
       +                                break
       +                esac
       +        done < "$v"
       +fi
       +
       +eq "$0" '*fetish' && printf 'Step on me daddy\n' && exit
       +
       +# help i dont know if it's a capital consistently
       +eq "$wm" '*[Gg][Nn][Oo][Mm][Ee]*' && wm='foot DE'
       +
       +## GTK
       +while read -r line; do
       +        eq "$line" 'gtk-theme*' && gtk=${line##*=} && break
       +done < "${XDG_CONFIG_HOME:=$HOME/.config}/gtk-3.0/settings.ini"
       +
       +# Shorten $cpu and $vendor
       +# this is so messy due to so many inconsistencies in the model names
       +vendor=${vendor##*Authentic}
       +vendor=${vendor##*Genuine}
       +cpu=${cpu##*) }
       +cpu=${cpu%% @*}
       +cpu=${cpu%% CPU}
       +cpu=${cpu##CPU }
       +cpu=${cpu##*AMD }
       +cpu=${cpu%% with*}
       +cpu=${cpu% *-Core*}
       +
       +col() {
       +        printf '  '
       +        for i in 1 2 3 4 5 6; do
       +                printf '\033[9%sm%s' "$i" "${colourblocks:-▅▅}"
       +        done
       +        printf '\033[0m\n'
       +}
       +
       +print() {
       +        [ "$2" ] && printf '\033[9%sm%6s\033[0m%b%s\n' \
       +                "${accent:-4}" "$1" "${separator:- ~ }" "$2"
       +}
       +
       +# default value
       +: "${info:=n user os sh wm up gtk cpu mem host kern pkgs term col n}"
       +
       +for i in $info; do
       +        case $i in
       +                n) echo;;
       +                os) print os "$ID";;
       +                sh) print sh "${SHELL##*/}";;
       +                wm) print wm "${wm##*/}";;
       +                up) print up "$up";;
       +                gtk) print gtk "${gtk# }";;
       +                cpu) print cpu "$vendor$cpu";;
       +                mem) print mem "$mem";;
       +                host) print host "$model";;
       +                kern) print kern "$kernel";;
       +                pkgs) print pkgs "$pkgs";;
       +                term) print term "$term";;
       +                user) printf '%7s@%s\n' "$USER" "$host";;
       +                col) col;;
       +        esac
       +done
 (DIR) diff --git a/bin/link-handler.sh b/bin/link-handler.sh
       @@ -32,6 +32,7 @@ case "$uri_lower" in
                        ;;
                *.jpg | *.jpe | *.jpeg | *.png | *.gif | *.webp)
                        $launcher "$images" "$uri"
       +                #$launcher wget -qO- "$uri" | "$images" -
                        ;;
                *)
                        $launcher $browser "$uri"
 (DIR) diff --git a/fdm/config b/fdm/config
       @@ -26,9 +26,8 @@ account "personal" imaps
        action "inbox"  maildir "${path}/%u/Inbox"
        
        # mailing lists
       -action        "freebsd-announce" maildir "${listdir}/freebsd.announce"
       -action        "freebsd-current" maildir "${listdir}/freebsd.current"
       -action        "freebsd-questions" maildir "${listdir}/freebsd.questions"
       +action        "openbsd-announce" maildir "${listdir}/openbsd.announce"
       +action        "openbsd-misc" maildir "${listdir}/openbsd.misc"
        action        "alpine-users" maildir "${listdir}/alpine.users"
        action        "alpine-aports" maildir "${listdir}/alpine.aports"
        action        "alpine-announce" maildir "${listdir}/alpine.announce"
       @@ -51,12 +50,8 @@ match "^List-Id:.*lists\\.alpinelinux\\.org" in headers {
               match "^List-Id:.*aports" in headers action "alpine-aports"
        }
        
       -# freebsd
       -match "^List-Id:.*freebsd-.*\\.freebsd\\.org" in headers {
       -       match "^List-Id:.*announce" in headers action "freebsd-announce"
       -       match "^List-Id:.*current" in headers action "freebsd-current"
       -       match "^List-Id:.*questions" in headers action "freebsd-questions"
       -}
       +# openbsd
       +match "^Sender:[ \t]*owner-([a-z-]*)@openbsd\\.org" in headers action "openbsd-%1"
        
        # sfeeds
        match account "feeds" {
 (DIR) diff --git a/lynx/bookmarks.html b/lynx/bookmarks.html
       @@ -11,20 +11,20 @@
        <p>
        <ol>
        <h2>Gopher</h2>
       -<li><a href="gopher://gopher.floodgap.com/7/v2/vs">Floodgap</a></li>
       -<li><a href="gopher://gopher.icu/1/quarry">Quarry</a></li>
       -<li><a href="gopher://gopher.viste.fr/1/ogup/list">Server List</a></li>
       -<li><a href="gopher://jay.scot/">jay.scot</a></li>
       -<li><a href="gopher://gopher.metafilter.com/1/MetaFilter">Metafilter</a></li>
       +<li><a href="gopher://i-logout.cz/1/bongusta/">Bongusta</a></li>
        <li><a href="gopher://hngopher.com">Hacker News</a></li>
       +<li><a href="gopher://typed-hole.org/1/lobsters">Lobste.rs</a></li>
       +<li><a href="gopher://gopher.black/1/moku-pona">Aggregator of phlog</a></li>
       +<li><a href="gopher://gopher.metafilter.com/1/MetaFilter">Metafilter</a></li>
        <li><a href="gopher://gopherpedia.com/">gopherpedia</a></li>
        <li><a href="gopher://bitreich.org/1/lawn">The Gopher Lawn</a></li>
       -<li><a href="gopher://gopher.black/1/moku-pona">Aggregator of phlog</a></li>
       -<li><a href="gopher://i-logout.cz/1/bongusta/">Bongusta</a></li>
       -<li><a href="gopher://gopher.icu/">Ian J</a></li>
       -<li><a href="gopher://typed-hole.org/1/lobsters">Lobste.rs</a></li>
       +<li><a href="gopher://jay.scot/">jay.scot</a></li>
       +<hr>
       +<h2>Search</h2>
       +<li><a href="gopher://gopher.floodgap.com/7/v2/vs">Floodgap</a></li>
       +<li><a href="gopher://gopher.icu/1/quarry">Quarry</a></li>
       +<li><a href="gopher://gopher.viste.fr/1/ogup/list">Server List</a></li>
        <hr>
        <h2>Web</h2>
       -<li><a href="https://brutalist.report/topic/tech?limit=5">Brutalist Tech</a></li>
        <li><a href="https://wiby.me/surprise/">Wiby Surprise</a></li>
        </ol>
 (DIR) diff --git a/nvim/init.lua b/nvim/init.lua
       @@ -85,12 +85,26 @@ require("lazy").setup({
                        },
                },
        
       +        -- ale
       +        {
       +    'dense-analysis/ale',
       +    config = function()
       +        local g = vim.g
       +
       +        g.ale_ruby_rubocop_auto_correct_all = 1
       +                g.ale_c_cc_options = "-ansi -pedantic -std=c89 -Wall"
       +                g.ale_fixers = {
       +                        c = {'gcc'}
       +                }
       +        end
       +        },
       +
                -- terraform
                {
                        "hashivim/vim-terraform",
                        lazy = true,
                        ft = { 'terraform', 'hcl' }
       -    }
       +    },
        
        })
        
       @@ -158,3 +172,4 @@ vim.opt.textwidth = 72
        vim.keymap.set("n", "<leader>ps", ":setlocal spell! spelllang=en_gb<CR>", { noremap = true, silent = true })
        
        vim.g.terraform_fmt_on_save = 1
       +
 (DIR) diff --git a/sfeed/sfeedrc b/sfeed/sfeedrc
       @@ -26,7 +26,6 @@ feeds() {
                # gemini
                feed 'midnightpub' 'gemini://midnight.pub/feed.xml'
                feed 'antenna' 'gemini://warmedal.se/~antenna/atom.xml'
       -        feed 'techrights' 'gemini://gemini.techrights.org/feed.xml'
                feed 'ewok' 'gemini://warmedal.se/~bjorn/atom.xml'
                # people
                feed 'codemadness' 'https://codemadness.org/atom.xml'