--- usr/lib/byobu/memory.orig	2016-09-15 19:22:48 UTC
+++ usr/lib/byobu/memory
@@ -26,16 +26,35 @@ __memory_detail() {
 __memory() {
 	local free="" total="" buffers="" cached=""
 	local kb_main_used=0 buffers_plus_cached=0 fo_buffers=0 fo_cached=0
-	if [ -r /proc/meminfo ]; then
-		while read tok val unit; do
-			case "$tok" in
-				MemTotal:) total=${val};;
-				MemFree:) free=${val};;
-				Buffers:) buffers=${val};;
-				Cached:) cached=${val};;
-			esac
-			[ -n "${free}" -a -n "${total}" -a -n "${buffers}" -a -n "${cached}" ] && break;
-		done < /proc/meminfo
+
+	if [ $(uname) = "Linux" ]; then
+		if [ -r /proc/meminfo ]; then
+			while read tok val unit; do
+				case "$tok" in
+					MemTotal:) total=${val};;
+					MemFree:) free=${val};;
+					Buffers:) buffers=${val};;
+					Cached:) cached=${val};;
+				esac
+				[ -n "${free}" -a -n "${total}" -a -n "${buffers}" -a -n "${cached}" ] && break;
+			done < /proc/meminfo
+		fi
+	elif [ $(uname) = "FreeBSD" ]; then
+		# FreeBSD support
+		mem_phys=$(sysctl -n hw.physmem)
+		page_size=$(sysctl -n hw.pagesize)
+		mem_inactive=$(($(sysctl -n vm.stats.vm.v_inactive_count)*$page_size))
+		mem_cache=$(($(sysctl -n vm.stats.vm.v_cache_count)*$page_size))
+		mem_free=$(($(sysctl -n vm.stats.vm.v_free_count)*$page_size))
+
+		mem_avail=$(($mem_inactive+$mem_cache+$mem_free))
+		mem_used=$(($mem_phys-$mem_avail))
+
+		total=$(($mem_phys/1024))
+		free=$(($mem_avail/1024))
+
+		buffers=0
+		cached=0
 	elif eval $BYOBU_TEST vm_stat >/dev/null 2>&1; then
 		# MacOS support
 		# calculation borrowed from http://apple.stackexchange.com/a/48195/18857
@@ -44,16 +63,18 @@ __memory() {
 		speculative_blocks=$(vm_stat | grep speculative | awk '{ print $3 }' | sed -e 's/\.//')
 		free=$((($free_blocks+speculative_blocks)*4))
 		inactive=$(($inactive_blocks*4))
-		total=$((($free+$inactive)))
+		total=$(($free+$inactive))
 		buffers=0
 		cached=0
 	fi
-        kb_main_used=$(($total-$free))
-        buffers_plus_cached=$(($buffers+$cached))
-        # "free output" buffers and cache (output from 'free')
-        fo_buffers=$(($kb_main_used - $buffers_plus_cached))
-        fpdiv $((100*${fo_buffers})) "${total}" 0;
-        usage=${_RET}
+
+	kb_main_used=$(($total-$free))
+	buffers_plus_cached=$(($buffers+$cached))
+	# "free output" buffers and cache (output from 'free')
+	fo_buffers=$(($kb_main_used - $buffers_plus_cached))
+	fpdiv $((100*${fo_buffers})) "${total}" 0;
+	usage=${_RET}
+
 	if [ $total -ge 1048576 ]; then
 		fpdiv "$total" 1048567 1
 		total=${_RET}
