Compare commits

...

9 Commits

@ -1,7 +1,27 @@
os_flavor: "freebsd"
custom_repo: "https://freebsdpkg.fizz.buzz/repo/14broadwell-default-computer"
pkgbase_url: "https://freebsdpkg.fizz.buzz/pkgbase/14broadwell-repo/FreeBSD:14:amd64/latest"
zfs_snapshot_datasets:
- path: zroot/freebsd/computer/be
- path: zmass/encrypted/vm
users:
talexander:
initialize: true
uid: 11235
gid: 11235
groups:
- name: wheel
- name: video
- name: u2f
- name: operator # To be able to shutdown without root
- name: webcamd
gid: 145
authorized_keys:
- yubikey
- main_fido
- backup_fido
- homeassistant
gitconfig: "gitconfig_home"
sshd_enabled: true
sshd_conf: "sshd_config"
pf_config: "homeserver_pf.conf"

@ -1,5 +1,5 @@
os_flavor: "freebsd"
custom_repo: currentznver4-default-framework
custom_repo: "https://freebsdpkg.fizz.buzz/repo/currentznver4-default-framework"
pkgbase_url: "https://freebsdpkg.fizz.buzz/pkgbase/currentznver4-repo/FreeBSD:15:amd64/latest"
zfs_snapshot_datasets:
- path: zroot/freebsd/current/be/default

@ -16,6 +16,7 @@ users:
- backup_fido
- homeassistant
gitconfig: "gitconfig_home"
periodic_scrub_pools: [zroot]
zfs_snapshot_datasets:
# - zroot/linux/archmain/home
- path: zroot/linux/archmain/be

@ -17,6 +17,7 @@ users:
- main_fido
- backup_fido
gitconfig: "gitconfig_work"
periodic_scrub_pools: [zroot]
zfs_snapshot_datasets:
- path: zroot/linux/archwork/be
install_graphics: true

@ -1,4 +1,5 @@
os_flavor: "freebsd"
custom_repo: "file:///usr/local/poudriere/data/packages/currentznver4-default-framework"
pkgbase_url: "file:///usr/local/poudriere/data/images/currentznver4-repo/FreeBSD:15:amd64/latest"
poudriere_builds:
# - jail: 13amd64

@ -54,6 +54,7 @@
- lvfs
- restaurant_health_rating
- wasm
- noise_suppression
- hosts: nat_dhcp:homeserver_nat_dhcp:mrmanager_nat_dhcp
vars:
@ -68,6 +69,7 @@
- sudo # for poudboot script
- fstab
- package_manager
- termcap
- portshaker
- poudriere
- poudrierenginx

@ -1,24 +0,0 @@
# Reconstructed via infocmp from file: /usr/share/terminfo/a/alacritty
# (untranslatable capabilities removed to fit entry within 1023 bytes)
# (sgr removed to fit entry within 1023 bytes)
# (acsc removed to fit entry within 1023 bytes)
# (terminfo-only capabilities suppressed to fit entry within 1023 bytes)
alacritty|alacritty terminal emulator:\
:am:bs:hs:mi:ms:xn:\
:co#80:it#8:li#24:\
:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
:K2=\EOE:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:\
:UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:\
:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=\r:\
:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\n:\
:ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
:is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
:kd=\EOB:ke=\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[0m:\
:mh=\E[2m:mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:\
:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
:te=\E[?1049l\E[23;0;0t:ti=\E[?1049h\E[22;0;0t:\
:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:\
:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h:

@ -1,13 +1,6 @@
clear_tmp_enable="YES"
syslogd_flags="-ss"
sendmail_enable="NONE"
hostname="odo"
wlans_iwlwifi0="wlan0"
ifconfig_wlan0="WPA DHCP"
ifconfig_wlan0_ipv6="inet6 accept_rtadv"
sshd_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
zfs_enable="YES"

@ -1,2 +1,3 @@
dependencies:
- fstab
- termcap

@ -16,13 +16,19 @@
- wget
- colordiff
- ipcalc
- kdiff3
- meld
- tcpdump
- moreutils # for ts [%Y-%m-%d %H:%M:%.S]
- ddrescue
state: present
- name: Install packages
when: install_graphics
package:
name:
- kdiff3
- meld
state: present
- name: Set timezone
file:
src: "/usr/share/zoneinfo/{{ timezone|default('UTC') }}"

@ -7,27 +7,15 @@
- rust-coreutils
state: present
- name: See if the alacritty termcap has been added
lineinfile:
name: /usr/share/misc/termcap
regexp: |-
^alacritty\|
state: absent
check_mode: yes
changed_when: false
register: alacritty_cap
- name: Append alacritty termcap info
blockinfile:
path: /usr/share/misc/termcap
block: "{{ lookup('file', 'alacritty.termcap') }}"
marker: "# {mark} ANSIBLE MANAGED BLOCK alacritty"
when: not alacritty_cap.found
register: wrote_alacritty_cap
- name: Update cap_mkdb
command: cap_mkdb /usr/share/misc/termcap
when: wrote_alacritty_cap.changed
- name: Install service configuration
copy:
src: "files/{{ item }}_rc.conf"
dest: "/etc/rc.conf.d/{{ item }}"
mode: 0644
owner: root
group: wheel
loop:
- cleartmp
- name: Install login.conf
copy:

@ -27,3 +27,14 @@
group: wheel
loop:
- aesni
- name: Install loader.conf
when: hwpstate is defined and hwpstate
copy:
src: "files/{{ item }}_loader.conf"
dest: "/boot/loader.conf.d/{{ item }}.conf"
mode: 0644
owner: root
group: wheel
loop:
- per_core_hwpstate

@ -78,4 +78,4 @@
owner: root
group: wheel
loop:
- percorespeedshift
- per_core_hwpstate

@ -57,19 +57,29 @@
:pin manual
:hook (
(python-ts-mode . (lambda ()
(when (executable-find "poetry")
(add-poetry-venv-to-path)
(let ((venv (locate-venv-poetry))) (when venv
(setq eglot-workspace-configuration
(list (cons ':python (list ':venvPath venv ':pythonPath (concat venv "/bin/python")))))
))
)
(when-linux
(eglot-ensure)
)
(when-linux
(when (executable-find "poetry")
(add-poetry-venv-to-path)
(let ((venv (locate-venv-poetry))) (when venv
(setq eglot-workspace-configuration
(list (cons ':python (list ':venvPath venv ':pythonPath (concat venv "/bin/python")))))
))
)
(eglot-ensure)
)
(add-hook 'before-save-hook 'python-fmt nil 'local)
))
;; (when-freebsd
;; (eglot-ensure)
;; (defclass my/eglot-pylyzer (eglot-lsp-server) ()
;; :documentation
;; "Own eglot server class.")
;; (add-to-list 'eglot-server-programs
;; '(python-ts-mode . (my/eglot-pylyzer "pylyzer" "--server")))
;; )
(add-hook 'before-save-hook 'python-fmt nil 'local)
))
)
:bind ((:map python-ts-mode-map ([backspace] . python-backspace))
)

@ -1,9 +1,17 @@
- name: Install packages
when: install_graphics
package:
name:
- emacs
state: present
- name: Install packages
when: not install_graphics
package:
name:
- emacs-nox
state: present
- name: Install packages
when: 'emacs_flavor == "full"'
package:

@ -8,7 +8,7 @@
- libva-utils # for vainfo
- vdpauinfo # for vdpauinfo
- libvdpau-va-gl # vdpau support
# - igt-gpu-tools # for intel_gpu_top
- radeontop
- vulkan-tools # For vulkaninfo
state: present

@ -1,3 +1,3 @@
wlans_rtwn0="wlan0"
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"
ifconfig_wlan0_ipv6="inet6 accept_rtadv"

@ -1,3 +1,3 @@
wlans_ath0="wlan0"
wlans_iwlwifi0="wlan0"
ifconfig_wlan0="WPA DHCP"
ifconfig_wlan0_ipv6="inet6 accept_rtadv"

@ -0,0 +1,35 @@
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /usr/lib/ladspa/librnnoise_ladspa.so
label = noise_suppressor_mono
control = {
"VAD Threshold (%)" = 50.0
"VAD Grace Period (ms)" = 200
"Retroactive VAD Grace (ms)" = 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
# Optionally specify a specific input: (ID from `pactl list`)
# target.object = "alsa_input.usb-Shure_Incorporated_Shure_Digital-00.analog-stereo"
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]

@ -0,0 +1,3 @@
dependencies:
- users
- sound

@ -0,0 +1,55 @@
# - name: Create directories
# file:
# name: "{{ item }}"
# state: directory
# mode: 0755
# owner: root
# group: wheel
# loop:
# - /foo/bar
# - name: Install scripts
# copy:
# src: "files/{{ item.src }}"
# dest: "{{ item.dest }}"
# mode: 0755
# owner: root
# group: wheel
# loop:
# - src: foo.bash
# dest: /usr/local/bin/foo
# - name: Install Configuration
# copy:
# src: "files/{{ item.src }}"
# dest: "{{ item.dest }}"
# mode: 0600
# owner: root
# group: wheel
# loop:
# - src: foo.conf
# dest: /usr/local/etc/foo.conf
# - name: Clone Source
# git:
# repo: "https://foo.bar/baz.git"
# dest: /foo/bar
# version: "v1.0.2"
# force: true
# diff: false
- import_tasks: tasks/freebsd.yaml
when: 'os_flavor == "freebsd"'
- import_tasks: tasks/linux.yaml
when: 'os_flavor == "linux"'
- include_tasks:
file: tasks/peruser.yaml
apply:
become: yes
become_user: "{{ initialize_user }}"
when: users is defined
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
loop_control:
loop_var: initialize_user

@ -0,0 +1,5 @@
- name: Install packages
package:
name:
- noise-suppression-for-voice-lv2
state: present

@ -0,0 +1,5 @@
- name: Install packages
package:
name:
- noise-suppression-for-voice
state: present

@ -0,0 +1,2 @@
- import_tasks: tasks/common.yaml
# when: foo is defined

@ -0,0 +1,8 @@
- include_role:
name: per_user
- import_tasks: tasks/peruser_freebsd.yaml
when: 'os_flavor == "freebsd"'
- import_tasks: tasks/peruser_linux.yaml
when: 'os_flavor == "linux"'

@ -0,0 +1,21 @@
- name: Create directories
file:
name: "{{ account_homedir.stdout }}/{{ item }}"
state: directory
mode: 0700
owner: "{{ account_name.stdout }}"
group: "{{ group_name.stdout }}"
loop:
# Could also use /etc/pipewire/pipewire.conf.d/ for system-wide config.
- ".config/pipewire/pipewire.conf.d"
- name: Copy files
copy:
src: "files/{{ item.src }}"
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
mode: 0600
owner: "{{ account_name.stdout }}"
group: "{{ group_name.stdout }}"
loop:
- src: 99-input-denoising.conf
dest: .config/pipewire/pipewire.conf.d/

@ -1,6 +1,5 @@
custom: {
# url: "file:///opt/pkgrepo/packages/current-default-framework"
url: "https://freebsdpkg.fizz.buzz/repo/{{ custom_repo }}",
url: "{{ custom_repo }}",
enabled: yes,
signature_type: "pubkey",
pubkey: "/usr/local/etc/pkg/poudriere.pub",

@ -18,7 +18,7 @@ load_rc_config $name
command=/usr/sbin/daemon
pidfile=/var/run/${name}.pid
command_args="-p $pidfile -u root -f -S -T $name nice -n 10 poudboot start"
command_args="-p $pidfile -u root -f -S -T $name nice -n 10 lockf -t 0 /var/run/$name.lock /root/.cargo/bin/poudboot /opt/poudriere/poudboot.sqlite3"
export PATH="${PATH}:/usr/local/bin"
run_rc_command "$1"

@ -1,143 +0,0 @@
#!/usr/bin/env bash
#
# Run poudriere at system boot. Useful for virtual machines so launching the VM also kicks off a build.
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
: ${LOCKFILE:="/var/run/poudboot.lock"}
: ${INFO_DIR:="/opt/poudriere/run_info"}
: ${PORT_UPDATE_SECONDS:="86400"}
: ${CLEAN_SECONDS:="1209600"}
: ${BUILD_SECONDS:="7200"}
: ${LOG_RETENTION_DAYS:="30"}
############## Setup #########################
# function cleanup {
# for f in "${folders[@]}"; do
# log "Deleting $f"
# rm -rf "$f"
# done
# }
# folders=()
# for sig in EXIT INT QUIT HUP TERM; do
# trap "set +e; cleanup" "$sig"
# done
function die {
local status_code="$1"
shift
(>&2 echo "${@}")
exit "$status_code"
}
function log {
(>&2 echo "${@}")
}
function run_locked {
if [ "${RUN_LOCKED:-}" != "RUN" ]; then
exec env RUN_LOCKED=RUN flock --nonblock $LOCKFILE $0 $@
fi
}
############## Program #########################
function main {
local COMMAND="$1"
if [ "$COMMAND" = "start" ]; then
run_locked "${@}"
shift 1
cmd_start "${@}"
elif [ "$COMMAND" = "stop" ]; then
shift 1
cmd_stop "${@}"
else
die 1 "Unrecognized command: $COMMAND"
fi
}
function abort_if_jobs_running {
if [[ $(sudo poudriere status) != *"No running builds"* ]]; then
echo "There is already a poudriere build in progress, exiting."
exit 0
fi
}
function build {
poudriere pkgclean -v -y "$@"
poudriere bulk -J "${POUDRIERE_JOBS:-1}" "$@"
}
function cmd_start {
abort_if_jobs_running
while true; do
for conf in /opt/poudriere/build_configs/*; do
(
# Allow command failures without quitting the script because some
# package sets might fail whereas others may succeed based on which
# packages are in each set.
set +e
source "$conf"
local RUN_DIR="$INFO_DIR/$JAIL-$PORTS-$SET"
local TIMES_FILE="$RUN_DIR/times"
mkdir -p "$RUN_DIR"
local PORTUPDATE=0
local LASTBUILD=0
if [ -e "$TIMES_FILE" ]; then
source "$TIMES_FILE"
fi
local now=$(date +%s)
if [ $((now - PORTUPDATE)) -gt "$PORT_UPDATE_SECONDS" ]; then
log "Updating ports for $JAIL-$PORTS-$SET"
portshaker -U
portshaker -M
PORTUPDATE=$(date +%s)
fi
if [ $((now - LASTBUILD)) -gt "$BUILD_SECONDS" ]; then
log "Building ports for $JAIL-$PORTS-$SET"
build -j "$JAIL" -p "$PORTS" -z "$SET" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist
LASTBUILD=$(date +%s)
fi
cat > "$TIMES_FILE" <<EOF
PORTUPDATE=$PORTUPDATE
LASTBUILD=$LASTBUILD
EOF
)
done
(
set +e
local GLOBAL_TIMES_FILE="$INFO_DIR/times"
local LASTCLEAN=0
if [ -e "$GLOBAL_TIMES_FILE" ]; then
source "$GLOBAL_TIMES_FILE"
fi
local now=$(date +%s)
if [ $((now - LASTCLEAN)) -gt "$CLEAN_SECONDS" ]; then
log "Global Cleaning."
# Cleanup old unused dist files
poudriere distclean -v -y -a
poudriere logclean -v -y "$LOG_RETENTION_DAYS"
LASTCLEAN=$(date +%s)
cat > "$GLOBAL_TIMES_FILE" <<EOF
LASTCLEAN=$LASTCLEAN
EOF
fi
)
sleep 300
done
}
function cmd_stop {
echo "cmd_stop not implemented."
}
main "${@}"

@ -1,13 +1,26 @@
audio/mixertui
devel/git
devel/libccid
devel/pyenv
devel/py-jmespath
devel/py-yamllint
editors/emacs@nox
editors/mg
ftp/wget
graphics/ImageMagick7
lang/python
multimedia/ffmpeg
multimedia/v4l-utils
multimedia/webcamd
net/google-cloud-sdk
net-mgmt/ipcalc
net/rsync
net/tcpdump
net/wireguard-tools
ports-mgmt/pkg
ports-mgmt/pkg-provides
print/texlive-full
security/cfssl
security/doas
security/git-crypt
security/gnupg
@ -22,13 +35,31 @@ shells/zsh
sysutils/ansible
sysutils/ansible-sshjail
sysutils/bhyve-firmware
sysutils/btop
sysutils/cpu-microcode
sysutils/ddrescue
sysutils/exfat-utils
sysutils/fusefs-exfat
sysutils/fusefs-sshfs
sysutils/helm
sysutils/htop
sysutils/kubectl
sysutils/lscpu
sysutils/lsof
sysutils/moreutils
sysutils/ncdu
sysutils/nvme-cli
sysutils/powerdxx
sysutils/powermon
sysutils/pstree
sysutils/rust-coreutils
sysutils/tmux
sysutils/tree
sysutils/zrepl
textproc/aspell
textproc/colordiff
textproc/en-aspell
textproc/gsed
textproc/jq
textproc/ripgrep
www/yt-dlp

@ -25,6 +25,10 @@ OPTIONS_SET+=STATIC LTO
OPTIONS_SET+=NATIVECOMP PGTK
.endif
.if ${.CURDIR:M*/www/firefox*}
OPTIONS_UNSET+=PULSEAUDIO SNDIO JACK
.endif
OPTIONS_SET+=OPTIMIZED_CFLAGS
# qemu uses STATIC_LINK instead of the more standard flag of STATIC
OPTIONS_SET+=STATIC_LINK

@ -2,6 +2,7 @@ archivers/unrar
archivers/unzip
archivers/zip
audio/mixertui
audio/noise-suppression-for-voice-lv2
audio/pavucontrol
databases/sqlite3
deskutils/xdg-desktop-portal
@ -35,6 +36,7 @@ graphics/vulkan-validation-layers
lang/python
lang/rust-nightly
math/gnuplot
multimedia/ffmpeg
multimedia/libva-intel-driver
multimedia/libva-intel-media-driver
multimedia/libva-utils
@ -80,7 +82,6 @@ sysutils/cpu-microcode
sysutils/ddrescue
sysutils/dsbmd
sysutils/exfat-utils
sysutils/flock
sysutils/fusefs-exfat
sysutils/fusefs-simple-mtpfs
sysutils/fusefs-sshfs
@ -95,6 +96,7 @@ sysutils/nvme-cli
sysutils/powermon
sysutils/pstree
sysutils/pv
sysutils/radeontop
sysutils/rust-coreutils
sysutils/tmux
sysutils/tree

@ -5,7 +5,7 @@ IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function main {
find / -type f -name times -exec sed -E -i 's/LASTBUILD=.*/LASTBUILD=0/' {} \;
sqlite3 /opt/poudriere/poudboot.sqlite3 "UPDATE local_action SET next_run=0 WHERE name-'build';"
}
main "${@}"

@ -26,7 +26,7 @@
- poudriere
- bash
- rsync
- flock
- rust-nightly # to build poudboot
state: present
- name: Create directories
@ -66,6 +66,11 @@
- src: poudriere.d
dest: /usr/local/etc/
- name: Install poudboot
command: "cargo install --git 'https://code.fizz.buzz/talexander/poudboot.git'"
args:
creates: /root/.cargo/bin/poudboot
- name: Install scripts
copy:
src: "files/{{ item.src }}"
@ -74,8 +79,6 @@
owner: root
group: wheel
loop:
- src: poudboot.bash
dest: /usr/local/bin/poudboot
- src: poudriere_delete_jail.bash
dest: /usr/local/bin/poudriere_delete_jail
- src: poudriere_schedule_build.bash

@ -2,9 +2,16 @@
package:
name:
- mixertui
state: present
- name: Install packages
when: install_graphics
package:
name:
- pavucontrol
state: present
- name: Configure sysctls
ignore_errors: true
when: sound_default_unit is defined

@ -0,0 +1,112 @@
alacritty|alacritty terminal emulator,
use=alacritty+common,
rs1=\Ec\E]104\007,
ccc,
colors#0x100, pairs#0x7FFF,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*
%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
oc=\E]104\007,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;
5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5
;%p1%d%;m,
setb@, setf@,
alacritty-direct|alacritty with direct color indexing,
use=alacritty+common,
RGB,
colors#0x1000000, pairs#0x7FFF,
initc@, op=\E[39;49m,
setab=\E[%?%p1%{8}%<%t4%p1%d%e48\:2\:\:%p1%{65536}%/%d\:%p1%{256}
%/%{255}%&%d\:%p1%{255}%&%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e38\:2\:\:%p1%{65536}%/%d\:%p1%{256}
%/%{255}%&%d\:%p1%{255}%&%d%;m,
setb@, setf@,
alacritty+common|base fragment for alacritty,
OTbs, am, bce, km, mir, msgr, xenl, AX, XT,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=\n, invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, kmous=\E[M, meml=\El,
memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
rmacs=\E(B, rmam=\E[?7l, rmir=\E[4l, rmkx=\E[?1l\E>,
rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}
%=%t3%e%p1%d%;m,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;
%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h,
smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m,
tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J,
kbs=^?,
ritm=\E[23m, sitm=\E[3m,
mc5i,
mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?%[;0123456789]c,
u9=\E[c,
rmcup=\E[?1049l\E[23;0;0t, smcup=\E[?1049h\E[22;0;0t,
npc,
indn=\E[%p1%dS, kb2=\EOE, kcbt=\E[Z, kent=\EOM,
rin=\E[%p1%dT,
rep=%p1%c\E[%p2%{1}%-%db,
rmxx=\E[29m, smxx=\E[9m,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kend=\EOF,
khome=\EOH,
kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S,
kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ,
kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
kf23=\E[23;2~, kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q,
kf27=\E[1;5R, kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR,
kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~,
kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~,
kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R,
kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~,
kLFT=\E[1;2D, kRIT=\E[1;2C, kind=\E[1;2B, kri=\E[1;2A,
kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B,
kDN6=\E[1;6B, kDN7=\E[1;7B, kLFT3=\E[1;3D, kLFT4=\E[1;4D,
kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D,
kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C,
kRIT6=\E[1;6C, kRIT7=\E[1;7C, kUP=\E[1;2A, kUP3=\E[1;3A,
kUP4=\E[1;4A, kUP5=\E[1;5A, kUP6=\E[1;6A, kUP7=\E[1;7A,
kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
kNXT=\E[6;2~, kPRV=\E[5;2~, kich1=\E[2~, knp=\E[6~,
kpp=\E[5~, kDC3=\E[3;3~, kDC4=\E[3;4~, kDC5=\E[3;5~,
kDC6=\E[3;6~, kDC7=\E[3;7~, kEND3=\E[1;3F, kEND4=\E[1;4F,
kEND5=\E[1;5F, kEND6=\E[1;6F, kEND7=\E[1;7F,
kHOM3=\E[1;3H, kHOM4=\E[1;4H, kHOM5=\E[1;5H,
kHOM6=\E[1;6H, kHOM7=\E[1;7H, kIC3=\E[2;3~, kIC4=\E[2;4~,
kIC5=\E[2;5~, kIC6=\E[2;6~, kIC7=\E[2;7~, kNXT3=\E[6;3~,
kNXT4=\E[6;4~, kNXT5=\E[6;5~, kNXT6=\E[6;6~,
kNXT7=\E[6;7~, kPRV3=\E[5;3~, kPRV4=\E[5;4~,
kPRV5=\E[5;5~, kPRV6=\E[5;6~, kPRV7=\E[5;7~,
kdch1=\E[3~,
Cr=\E]112\007, Cs=\E]12;%p1%s\007,
Ms=\E]52;%p1%s;%p2%s\007, Se=\E[0 q, Ss=\E[%p1%d q,
hs, dsl=\E]2;\007, fsl=^G, tsl=\E]2;,
Smulx=\E[4\:%p1%dm,
Sync=\E[?2026%?%p1%{1}%-%tl%eh%;,
XF, kxIN=\E[I, kxOUT=\E[O,
BD=\E[?2004l, BE=\E[?2004h, PE=\E[201~, PS=\E[200~,

@ -0,0 +1,50 @@
# Reconstructed via infocmp from file: /usr/share/terminfo/a/alacritty
# (untranslatable capabilities removed to fit entry within 1023 bytes)
# (sgr removed to fit entry within 1023 bytes)
# (acsc removed to fit entry within 1023 bytes)
# (terminfo-only capabilities suppressed to fit entry within 1023 bytes)
alacritty|alacritty terminal emulator:\
:am:bs:hs:mi:ms:xn:\
:co#80:it#8:li#24:\
:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
:K2=\EOE:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:\
:UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:\
:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=\r:\
:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\n:\
:ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
:is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
:kd=\EOB:ke=\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[0m:\
:mh=\E[2m:mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:\
:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
:te=\E[?1049l\E[23;0;0t:ti=\E[?1049h\E[22;0;0t:\
:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:\
:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h:
# Reconstructed via infocmp from file: /usr/share/terminfo/a/alacritty-direct
# (untranslatable capabilities removed to fit entry within 1023 bytes)
# (sgr removed to fit entry within 1023 bytes)
# (acsc removed to fit entry within 1023 bytes)
# (terminfo-only capabilities suppressed to fit entry within 1023 bytes)
alacritty-direct|alacritty with direct color indexing:\
:am:bs:hs:mi:ms:xn:\
:co#80:it#8:li#24:\
:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
:K2=\EOE:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:\
:UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:\
:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=\r:\
:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\n:\
:ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
:is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
:kd=\EOB:ke=\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[0m:\
:mh=\E[2m:mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:\
:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
:te=\E[?1049l\E[23;0;0t:ti=\E[?1049h\E[22;0;0t:\
:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:\
:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h:

@ -0,0 +1,55 @@
# - name: Create directories
# file:
# name: "{{ item }}"
# state: directory
# mode: 0755
# owner: root
# group: wheel
# loop:
# - /foo/bar
# - name: Install scripts
# copy:
# src: "files/{{ item.src }}"
# dest: "{{ item.dest }}"
# mode: 0755
# owner: root
# group: wheel
# loop:
# - src: foo.bash
# dest: /usr/local/bin/foo
# - name: Install Configuration
# copy:
# src: "files/{{ item.src }}"
# dest: "{{ item.dest }}"
# mode: 0600
# owner: root
# group: wheel
# loop:
# - src: foo.conf
# dest: /usr/local/etc/foo.conf
# - name: Clone Source
# git:
# repo: "https://foo.bar/baz.git"
# dest: /foo/bar
# version: "v1.0.2"
# force: true
# diff: false
- import_tasks: tasks/freebsd.yaml
when: 'os_flavor == "freebsd"'
- import_tasks: tasks/linux.yaml
when: 'os_flavor == "linux"'
- include_tasks:
file: tasks/peruser.yaml
apply:
become: yes
become_user: "{{ initialize_user }}"
when: users is defined
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
loop_control:
loop_var: initialize_user

@ -0,0 +1,32 @@
# FreeBSD 14 added support for terminfo, so I'm leaving the termcap stuff commented out in case I need it.
# - name: See if the alacritty termcap has been added
# lineinfile:
# name: /usr/share/misc/termcap
# regexp: |-
# ^alacritty\|
# state: absent
# check_mode: false
# changed_when: false
# register: alacritty_cap
# # Termcap generated by:
# # cat <(infocmp -Cr alacritty) <(infocmp -Cr alacritty-direct)
# - name: Append alacritty termcap info
# blockinfile:
# path: /usr/share/misc/termcap
# block: "{{ lookup('file', 'alacritty.termcap') }}"
# marker: "# {mark} ANSIBLE MANAGED BLOCK alacritty"
# when: not alacritty_cap.found
# register: wrote_alacritty_cap
# - name: Update cap_mkdb
# command: cap_mkdb /usr/share/misc/termcap
# when: wrote_alacritty_cap.changed
- name: Append alacritty terminfo
command: "tic -xe alacritty,alacritty-direct -"
args:
creates: "/usr/share/terminfo/a/alacritty-direct"
# Also creates: "/usr/share/terminfo/a/alacritty"
stdin: "{{ lookup('file', 'files/alacritty.info') }}"

@ -0,0 +1,29 @@
# - name: Build aur packages
# register: buildaur
# become_user: "{{ build_user.name }}"
# command: "aurutils-sync --no-view {{ item }}"
# args:
# creates: "/var/cache/pacman/custom/{{ item }}-*.pkg.tar.*"
# loop:
# - foo
# - name: Update cache
# when: buildaur.changed
# pacman:
# name: []
# state: present
# update_cache: true
# - name: Install packages
# package:
# name:
# - foo
# state: present
# - name: Enable services
# systemd:
# enabled: yes
# name: "{{ item }}"
# daemon_reload: yes
# loop:
# - foo.service

@ -0,0 +1,2 @@
- import_tasks: tasks/common.yaml
# when: foo is defined

@ -0,0 +1,29 @@
- include_role:
name: per_user
# - name: Create directories
# file:
# name: "{{ account_homedir.stdout }}/{{ item }}"
# state: directory
# mode: 0700
# owner: "{{ account_name.stdout }}"
# group: "{{ group_name.stdout }}"
# loop:
# - ".config/foo"
# - name: Copy files
# copy:
# src: "files/{{ item.src }}"
# dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
# mode: 0600
# owner: "{{ account_name.stdout }}"
# group: "{{ group_name.stdout }}"
# loop:
# - src: foo.conf
# dest: .config/foo/foo.conf
- import_tasks: tasks/peruser_freebsd.yaml
when: 'os_flavor == "freebsd"'
- import_tasks: tasks/peruser_linux.yaml
when: 'os_flavor == "linux"'

@ -1,36 +0,0 @@
#!/usr/bin/env bash
#
# Read volume status in FreeBSD
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SLEEP_INTERVAL=${SLEEP_INTERVAL:-30}
while true; do
current_vol_mixer=$(mixer -S vol)
vol_left=$(cut -d ':' -f 2 <<<"$current_vol_mixer")
vol_right=$(cut -d ':' -f 3 <<<"$current_vol_mixer")
avg_vol=$(((vol_left + vol_right) / 2))
tooltip="<tt>$(mixer)</tt>"
class=""
icon=""
if [ $avg_vol -eq 0 ]; then
icon="🔇"
elif [ $avg_vol -le 50 ]; then
icon="🔉"
else
icon="🔊"
fi
jq --unbuffered --compact-output <<EOF
{
"text":"${avg_vol}% ${icon}",
"tooltip":"${tooltip//$'\n'/\\n}",
"percentage":${avg_vol},
"class":"${class}"
}
EOF
sleep $SLEEP_INTERVAL
done

@ -0,0 +1,41 @@
#!/usr/bin/env zsh
#
# Read volume status in FreeBSD
set -euo pipefail
IFS=$'\n\t'
SLEEP_INTERVAL=${SLEEP_INTERVAL:-30}
while true; do
(
# current_vol_mixer=$(mixer -S vol)
# vol_left=$(cut -d ':' -f 2 <<<"$current_vol_mixer")
# vol_right=$(cut -d ':' -f 3 <<<"$current_vol_mixer")
current_vol_mixer=$(mixer -o)
vol_left=$(grep -E 'vol.volume=' <<<"$current_vol_mixer" | cut -d = -f 2 | cut -d ':' -f 1)
vol_right=$(grep -E 'vol.volume=' <<<"$current_vol_mixer" | cut -d = -f 2 | cut -d ':' -f 2)
avg_vol=$((100 * (vol_left + vol_right) / 2))
avg_vol=$(echo "$avg_vol" | cut -d '.' -f 1)
tooltip="<tt>$(mixer)</tt>"
class=""
icon=""
if [ $avg_vol -eq 0 ]; then
icon="🔇"
elif [ $avg_vol -le 50 ]; then
icon="🔉"
else
icon="🔊"
fi
jq --unbuffered --compact-output <<EOF
{
"text":"${avg_vol}% ${icon}",
"tooltip":"${tooltip//$'\n'/\\n}",
"percentage":${avg_vol},
"class":"${class}"
}
EOF
sleep $SLEEP_INTERVAL
)
done

@ -5,13 +5,11 @@ set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# TODO: Maybe I should be reading hw.acpi.thermal.tz0.temperature
# TODO: I could get the number of cores with kern.smp.cpus
SLEEP_INTERVAL=${SLEEP_INTERVAL:-30}
while true; do
current_cpu_temps=$(sysctl 'dev.cpu' | grep -E 'dev\.cpu\.[0-9]+\.temperature' | sort)
current_cpu_temps=$(sysctl 'hw.acpi.thermal' | grep -E 'hw\.acpi\.thermal\.tz[0-9]+\.temperature' | sort)
#current_cpu_temps=$(sysctl 'dev.cpu' | grep -E 'dev\.cpu\.[0-9]+\.temperature' | sort)
sum_temperature=0
num_temperature=0
max_temperature=0

@ -2,6 +2,7 @@
package:
name:
- waybar
- python
state: present
- name: Install scripts
@ -16,7 +17,7 @@
dest: /usr/local/bin/waybar_custom_battery
- src: waybar_available_memory_freebsd.bash
dest: /usr/local/bin/waybar_custom_available_memory
- src: waybar_sound_freebsd.bash
- src: waybar_sound_freebsd.zsh
dest: /usr/local/bin/waybar_custom_sound
- src: waybar_temperature_freebsd.bash
dest: /usr/local/bin/waybar_custom_temperature

@ -2,11 +2,17 @@
package:
name:
- webcamd
- pwcview # For testing webcam
- v4l-utils # Needed for support in browsers
- v4l_compat # Needed for support in browsers
state: present
- name: Install packages
when: install_graphics
package:
name:
- pwcview # For testing webcam
state: present
- name: Install loader.conf
copy:
src: "files/{{ item }}_loader.conf"

@ -53,3 +53,11 @@
- zfs-mount.service
- zfs.target
- zfs-import.target
- name: Enable periodic scrub
when: periodic_scrub_pools is defined
systemd:
enabled: yes
name: "zfs-scrub-weekly@{{ item }}.timer"
daemon_reload: yes
loop: "{{ periodic_scrub_pools }}"

Loading…
Cancel
Save