Advertisement · 728 × 90

Posts by RWX work

Git log segment showing the removal of all original rotation keys…

  "rotationKeys": [
    "did:key:zDnaew93xf5AwAjaxqby3fRtVufFAj6eNQcnqSH4MuPWySSBV"[-,-]
[-    "did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg",-]
[-    "did:key:zQ3shpKnbdPx3g3CmPf5cRVTPe1HtSwVn5ish3wSnDPQCbLJK"-]
  ],
  "alsoKnownAs": [
    "at://rwx.work"

Git log segment showing the removal of all original rotation keys… "rotationKeys": [ "did:key:zDnaew93xf5AwAjaxqby3fRtVufFAj6eNQcnqSH4MuPWySSBV"[-,-] [- "did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg",-] [- "did:key:zQ3shpKnbdPx3g3CmPf5cRVTPe1HtSwVn5ish3wSnDPQCbLJK"-] ], "alsoKnownAs": [ "at://rwx.work"

After exploring goat cli for quite a while,
dropped all account’s original rotation keys!

1 week ago 0 0 0 0
File: rsync.sh

# rsync

# synchronize
#| rsync
#= rs
rwx_rsync() {
	rsync \
		--archive \
		--no-inc-recursive \
		--partial \
		--progress \
		--verbose \
		"${@}"
}

# synchronize and delete after
#= rsda
rwx_rsync_delete_after() {
	rwx_rsync \
		--delete-after \
		"${@}"
}

# synchronize and delete before
#= rsdb
rwx_rsync_delete_before() {
	rwx_rsync \
		--delete-before \

File: rsync.sh # rsync # synchronize #| rsync #= rs rwx_rsync() { rsync \ --archive \ --no-inc-recursive \ --partial \ --progress \ --verbose \ "${@}" } # synchronize and delete after #= rsda rwx_rsync_delete_after() { rwx_rsync \ --delete-after \ "${@}" } # synchronize and delete before #= rsdb rwx_rsync_delete_before() { rwx_rsync \ --delete-before \

Shell system aliases, set from annotations,
here for #rsync functions to sync & delete.

#rwx

3 months ago 0 0 0 0
750 commits, 2 branches
0 tags, 4.9 MiB
Shell 75.5%, Python 15.2%, Awk 9.3%

750 commits, 2 branches 0 tags, 4.9 MiB Shell 75.5%, Python 15.2%, Awk 9.3%

The #awk proportion more than doubled.

#rwx

3 months ago 0 0 0 0
gnome-terminal window running tmux with title:
projects - rwx - rwx - 3: bash  |  114 × 25 - 3: 56 × 12

Window left pane: main / find
# path to the entrypoint main file of the project
rwx_main_path="${rwx_main_root}/${rwx_main_file}"
# FIXME sparate in two functions
# find root directory shell modules
#| find
#| sort
rwx_main_find() {
	local root="${1}"
	[ -d "${root}" ] &&
		find \
			"${root}" \
			-name "*.${RWX_MAIN_EXTENSION}" \
			-type "f" \
			-printf "%P\n" |
		sort
}

Window top right pane: posix shell modules…
core, crypt.sh, de, dev, ffmpeg.sh, fs, fs.sh, gpg.sh,
gui, id.sh, io, lint, list.sh, log, main.sh, os,
pm, ps, pw, rescue, self.sh, shell, tui, util.sh

Window bottom right pane: trailing project root files…
pyproject.toml, readme.md, render.py, rwx, sh, tmp

Bottom status bar with four lines
and square brackets [] for panes synchronized (blue), zoomed (red), both (magenta):
1) left: windows dn, profile, logo, prj, rwx, spcd, help, site, venv, ytlp; right: time 19:28:24
2) left: sessions beninca, ilos, marc, private, public, rwx, tilde; right: date 2025-08-13
3) left: servers projects, default; right: panes batcat, bash, bash
4) current directory /media/marc/data/ssd/mobile/data/w/projects/public/rwx.work/rwx

gnome-terminal window running tmux with title: projects - rwx - rwx - 3: bash | 114 × 25 - 3: 56 × 12 Window left pane: main / find # path to the entrypoint main file of the project rwx_main_path="${rwx_main_root}/${rwx_main_file}" # FIXME sparate in two functions # find root directory shell modules #| find #| sort rwx_main_find() { local root="${1}" [ -d "${root}" ] && find \ "${root}" \ -name "*.${RWX_MAIN_EXTENSION}" \ -type "f" \ -printf "%P\n" | sort } Window top right pane: posix shell modules… core, crypt.sh, de, dev, ffmpeg.sh, fs, fs.sh, gpg.sh, gui, id.sh, io, lint, list.sh, log, main.sh, os, pm, ps, pw, rescue, self.sh, shell, tui, util.sh Window bottom right pane: trailing project root files… pyproject.toml, readme.md, render.py, rwx, sh, tmp Bottom status bar with four lines and square brackets [] for panes synchronized (blue), zoomed (red), both (magenta): 1) left: windows dn, profile, logo, prj, rwx, spcd, help, site, venv, ytlp; right: time 19:28:24 2) left: sessions beninca, ilos, marc, private, public, rwx, tilde; right: date 2025-08-13 3) left: servers projects, default; right: panes batcat, bash, bash 4) current directory /media/marc/data/ssd/mobile/data/w/projects/public/rwx.work/rwx

2025-08-13

Ready to use #tmux configuration.

#rwx

3 months ago 0 0 0 0
359 commits, 4 branches
0 tags, 3.7 MiB
Shell 66.1%, Python 29.8%, Awk 4.1%

359 commits, 4 branches 0 tags, 3.7 MiB Shell 66.1%, Python 29.8%, Awk 4.1%

2025-07-08

The #awk code base is growing…

#rwx

3 months ago 0 0 0 0
BEGIN {
	RE_ANY = "(.*)"
	RE_CONST = "([_A-Z][_0-9A-Z]*)"
	RE_SET = "=.*"
	RE_SPACE = "[[:space:]]"
	RE_SPACES = RE_SPACE "*"
	RE_VAR = "([_a-z][_0-9a-z]*)"

	RE_BEGIN = "^"
	RE_END = RE_SPACES "$"
	RE_FUNC = RE_SPACES "\\(" RE_SPACES "\\)" RE_SPACES "{"

	RE_ALIAS = RE_BEGIN "#=" RE_SPACES RE_VAR RE_END
	RE_CLOSE = RE_BEGIN "}" RE_SPACES RE_END
	RE_CONSTANT = RE_BEGIN RE_CONST RE_SET RE_END
	RE_DOC = RE_BEGIN RE_SPACES "#" RE_SPACE RE_ANY RE_END
	RE_FUNCTION = RE_BEGIN RE_VAR RE_FUNC RE_END
	RE_MODULE = RE_BEGIN "#." RE_SPACES RE_ANY RE_END
	RE_SHEBANG = RE_BEGIN "#!" RE_SPACES RE_ANY RE_END
	RE_VARIABLE = RE_BEGIN RE_VAR RE_SET RE_END

BEGIN { RE_ANY = "(.*)" RE_CONST = "([_A-Z][_0-9A-Z]*)" RE_SET = "=.*" RE_SPACE = "[[:space:]]" RE_SPACES = RE_SPACE "*" RE_VAR = "([_a-z][_0-9a-z]*)" RE_BEGIN = "^" RE_END = RE_SPACES "$" RE_FUNC = RE_SPACES "\\(" RE_SPACES "\\)" RE_SPACES "{" RE_ALIAS = RE_BEGIN "#=" RE_SPACES RE_VAR RE_END RE_CLOSE = RE_BEGIN "}" RE_SPACES RE_END RE_CONSTANT = RE_BEGIN RE_CONST RE_SET RE_END RE_DOC = RE_BEGIN RE_SPACES "#" RE_SPACE RE_ANY RE_END RE_FUNCTION = RE_BEGIN RE_VAR RE_FUNC RE_END RE_MODULE = RE_BEGIN "#." RE_SPACES RE_ANY RE_END RE_SHEBANG = RE_BEGIN "#!" RE_SPACES RE_ANY RE_END RE_VARIABLE = RE_BEGIN RE_VAR RE_SET RE_END

2025-07-06

Learning #awk but, for now,
mostly doing regex matching…

#rwx

3 months ago 0 0 1 0
gnome-terminal window running tmux with title:
p1 → rwx → rwx (5∕10) → bash (2∕3)

Window top left pane: python package files…
arg, cmd, deb, err, fs, grub, log, os, prj, ps, sw, txt, web

Window bottom left pane: posix shell modules…
alias, cryptsetup.sh, debian.sh, ffmpeg.sh, file.sh, fs.sh,
gnome.sh, gpg.sh, lint, live.sh, log, main.sh, python.sh,
rescue, self.sh, shell.sh, tmux.sh, util.sh

Window right pane: subsection of markdown readme file…
## 2 [How](#toc) {#how}
### 2.1 [Shell](#how) {#how-shell}
* [X] functions to
  * [X] alias
  * [X] lint
    * [X] Git
    * [X] Python
    * [X] Shell
  * [X] log
  * [X] rescue
    * [X] Hetzner
    * [X] OVH
* [X] profiles
  * [X] ffmpeg
  * [X] tmux
### 2.2 [Python](#how) {#how-python}

Bottom status bar with five lines:
1) left: windows dn, profile, logo, prj, rwx, spcd, help, site, venv, ytlp; right: time 02:33:32
2) left: sessions beninca, ilos, marc, private, public, rwx, tilde; right: date 2025-06-30
3) servers p1, p2 & directory /media/marc/data/ssd/mobile/data/w/projects/public/rwx.work/rwx
4) left: window panes process names bash, bash, batcat; right: hostname bookworm
5) left: window panes sizes & total 52×11, 52×12, 61×24 & 114×24; right: user user

gnome-terminal window running tmux with title: p1 → rwx → rwx (5∕10) → bash (2∕3) Window top left pane: python package files… arg, cmd, deb, err, fs, grub, log, os, prj, ps, sw, txt, web Window bottom left pane: posix shell modules… alias, cryptsetup.sh, debian.sh, ffmpeg.sh, file.sh, fs.sh, gnome.sh, gpg.sh, lint, live.sh, log, main.sh, python.sh, rescue, self.sh, shell.sh, tmux.sh, util.sh Window right pane: subsection of markdown readme file… ## 2 [How](#toc) {#how} ### 2.1 [Shell](#how) {#how-shell} * [X] functions to * [X] alias * [X] lint * [X] Git * [X] Python * [X] Shell * [X] log * [X] rescue * [X] Hetzner * [X] OVH * [X] profiles * [X] ffmpeg * [X] tmux ### 2.2 [Python](#how) {#how-python} Bottom status bar with five lines: 1) left: windows dn, profile, logo, prj, rwx, spcd, help, site, venv, ytlp; right: time 02:33:32 2) left: sessions beninca, ilos, marc, private, public, rwx, tilde; right: date 2025-06-30 3) servers p1, p2 & directory /media/marc/data/ssd/mobile/data/w/projects/public/rwx.work/rwx 4) left: window panes process names bash, bash, batcat; right: hostname bookworm 5) left: window panes sizes & total 52×11, 52×12, 61×24 & 114×24; right: user user

2025-06-30

Further into #tmux configuration, with
multiple servers, sessions, windows, panes…

#rwx

3 months ago 0 0 0 0
JS:

const chapters = document.getElementById("chapters");
const video = document.getElementById("video");
const cues = [];

for (let track of video.textTracks) {
    if (track.kind === "chapters") {
        track.mode = "hidden";
        let id, text, tr;
        setTimeout(() => {
            for (let cue of track.cues) {
                id = document.createElement("td");
                text = document.createElement("td");
                tr = document.createElement("tr");
                id.textContent = cue.id;
                text.textContent = cue.text;
                tr.onclick = () => {
                    video.currentTime = cue.startTime;
                    video.play();
                };
                tr.appendChild(id);
                tr.appendChild(text);
                chapters.appendChild(tr);
                cues.push({ cue, tr });
            }
        }, 250);
        break;
    }
}

video.addEventListener("timeupdate", () => {
    const time = video.currentTime;
    for (const { cue, tr } of cues) {
        if (time >= cue.startTime && time < cue.endTime) {
            tr.classList.add("active");
        } else {
            tr.classList.remove("active");
        }
    }
});


CSS:

body {
background-color: #262626;
color: #ccc;
font-family: sans;
margin: auto;
}

.columns {
display: grid;
gap: 1em;
grid-template-columns: 1fr 3fr;
}
.list {
max-block-size: 100vh;
overflow: auto;
}

tr {
cursor: pointer;
}
tr.active {
color: #0f0;
}
tr:hover {
color: #f00;
}
tr:nth-of-type(even) {
background-color: #333;
}

video {
max-inline-size: 100%;
}

JS: const chapters = document.getElementById("chapters"); const video = document.getElementById("video"); const cues = []; for (let track of video.textTracks) { if (track.kind === "chapters") { track.mode = "hidden"; let id, text, tr; setTimeout(() => { for (let cue of track.cues) { id = document.createElement("td"); text = document.createElement("td"); tr = document.createElement("tr"); id.textContent = cue.id; text.textContent = cue.text; tr.onclick = () => { video.currentTime = cue.startTime; video.play(); }; tr.appendChild(id); tr.appendChild(text); chapters.appendChild(tr); cues.push({ cue, tr }); } }, 250); break; } } video.addEventListener("timeupdate", () => { const time = video.currentTime; for (const { cue, tr } of cues) { if (time >= cue.startTime && time < cue.endTime) { tr.classList.add("active"); } else { tr.classList.remove("active"); } } }); CSS: body { background-color: #262626; color: #ccc; font-family: sans; margin: auto; } .columns { display: grid; gap: 1em; grid-template-columns: 1fr 3fr; } .list { max-block-size: 100vh; overflow: auto; } tr { cursor: pointer; } tr.active { color: #0f0; } tr:hover { color: #f00; } tr:nth-of-type(even) { background-color: #333; } video { max-inline-size: 100%; }

2025-06-17

A bit of #js & #css code to have
two-ways interaction between the
#html video & list of #vtt chapters.

#rwx

3 months ago 1 0 0 0
#! /usr/bin/env sh
FILE="$(readlink --canonicalize-existing "${0}")"
ROOT="$(dirname "${FILE}")"

main() {
	cat "${ROOT}/install.sh" |
		grep --perl-regexp "^\t\t(apt_install|\t\")" |
		grep --invert-match "\\\$" |
		sed "s|^\t\tapt_install \\\\||" |
		sed "s|^\t\t\t\"||" |
		sed "s|\" \"| |g" |
		sed "s|\" \\\\||" |
		sed "s|\"||"
}

main

#! /usr/bin/env sh FILE="$(readlink --canonicalize-existing "${0}")" ROOT="$(dirname "${FILE}")" main() { cat "${ROOT}/install.sh" | grep --perl-regexp "^\t\t(apt_install|\t\")" | grep --invert-match "\\\$" | sed "s|^\t\tapt_install \\\\||" | sed "s|^\t\t\t\"||" | sed "s|\" \"| |g" | sed "s|\" \\\\||" | sed "s|\"||" } main

2025-06-07

Silly looking regex heavy script written
to list packages inside installation script.

#ofsp

3 months ago 0 0 0 0
File: rwx > sh > ffmpeg.sh

rwx_ffmpeg_input_hdmi() {
	local device="${1}"
	[ -n "${device}"] || device="/dev/video0"
	set -- \
		-f "v4l2" \
		-video_size "1920x1080" \
		-framerate "120" \
		-input_format "yuv420p" \
		-i "${device}"
	local argument
	for argument in "${@}"; do echo "${argument}"; done
}

rwx_ffmpeg_output_audio_fast() {
	set -- \
		-codec:a "flac" \
		-compression_level "0"
	local argument
	for argument in "${@}"; do echo "${argument}"; done
}

File: rwx > sh > ffmpeg.sh rwx_ffmpeg_input_hdmi() { local device="${1}" [ -n "${device}"] || device="/dev/video0" set -- \ -f "v4l2" \ -video_size "1920x1080" \ -framerate "120" \ -input_format "yuv420p" \ -i "${device}" local argument for argument in "${@}"; do echo "${argument}"; done } rwx_ffmpeg_output_audio_fast() { set -- \ -codec:a "flac" \ -compression_level "0" local argument for argument in "${@}"; do echo "${argument}"; done }

2025-05-17

Writing functions to screencast with #ffmpeg

#rwx #vscodium

3 months ago 0 0 0 0
Advertisement
File: rsync.sh

# synchronize
rs() { a__r_sync "${@}"; }
a__r_sync() {
	rsync \
		--archive \
		--no-inc-recursive \
		--partial \
		--progress \
		--verbose \
		"${@}"
}

# synchronize and delete after
rsda() { a__r_sync_delete_after "${@}"; }
a__r_sync_delete_after() {
	a__r_sync \
		--delete-after \
		"${@}"
}

# synchronize and delete before
rsdb() { a__r_sync_delete_before "${@}"; }
a__r_sync_delete_before() {
	a__r_sync \
		--delete-before \
		"${@}"
}

File: rsync.sh # synchronize rs() { a__r_sync "${@}"; } a__r_sync() { rsync \ --archive \ --no-inc-recursive \ --partial \ --progress \ --verbose \ "${@}" } # synchronize and delete after rsda() { a__r_sync_delete_after "${@}"; } a__r_sync_delete_after() { a__r_sync \ --delete-after \ "${@}" } # synchronize and delete before rsdb() { a__r_sync_delete_before "${@}"; } a__r_sync_delete_before() { a__r_sync \ --delete-before \ "${@}" }

2025-05-16

First system aliases a__ prefix approach,
here with #rsync functions to sync & delete.

#rwx

3 months ago 0 0 0 0
gnome-terminal window running tmux with title: bash @ /home/user

Top status bar with three lines:
1) left: windows 0, 1 nano, 2 bash, 3 sleep; right: time 2025-01-18 18:09:32
2) center: window panes 1[57x26], 2[56x13], 3[56x12]
3) left: current directory /home/user ; right: current pane 56×13 2∕3

Current window with three panes: 1 left, 2 top right, 3 bottom right.

In left pane can be seen imported system & user modules:
40 lint/shfmt
41 live
42 log/log
43 log/step
44 rescue/common
45 rescue/hetzner
46 rescue/ovh
47 self
48 shell
49 tmux
50 util
. /home/user/rwx
01 cryptsetup
02 fix
03 newsboat
04 self
05 srv

In all three panes can be seen rwx shell commands prefixes:
rwx_… = functions
 a__… = aliases
 u__… = user

gnome-terminal window running tmux with title: bash @ /home/user Top status bar with three lines: 1) left: windows 0, 1 nano, 2 bash, 3 sleep; right: time 2025-01-18 18:09:32 2) center: window panes 1[57x26], 2[56x13], 3[56x12] 3) left: current directory /home/user ; right: current pane 56×13 2∕3 Current window with three panes: 1 left, 2 top right, 3 bottom right. In left pane can be seen imported system & user modules: 40 lint/shfmt 41 live 42 log/log 43 log/step 44 rescue/common 45 rescue/hetzner 46 rescue/ovh 47 self 48 shell 49 tmux 50 util . /home/user/rwx 01 cryptsetup 02 fix 03 newsboat 04 self 05 srv In all three panes can be seen rwx shell commands prefixes: rwx_… = functions a__… = aliases u__… = user

2025-01-18

After a long time using #byobu,
writing #tmux config from scratch…

#rwx

3 months ago 0 0 0 0
Video

2024-12-13

RWX work: 2023 → 2024

I’ve been writing code in #python
& shells ( #bash , #grub , #posix ):

#lsgm Live Scan Grub Menu
#rwx Read Write eXecute
#spcd Shell to Python Continuous Deployment
#srmp Software Repositories Mirror Profile

#ffmpeg #git #gource

3 months ago 0 0 0 0
bash completion for prefixes.


a__apt_cache_list
a__apt_cache_policy
a__apt_cache_search
a__apt_get_auto_purge
a__apt_get_auto_remove
a__apt_get_clean
a__apt_get_full_upgrade
a__apt_get_install
a__apt_get_purge
a__apt_get_remove
a__apt_get_up_date
a__apt_get_up_grade
a__bat
a__btrfs_filesystem_d_f
a__btrfs_filesystem_d_u
a__btrfs_filesystem_usage
a__btrfs_property_get
a__btrfs_subvolume_create
a__btrfs_subvolume_delete
a__btrfs_subvolume_list
a__btrfs_subvolume_snapshot
a__btrfs_subvolume_snapshot_r
a__byo_bu
a__byo_bu_attach
a__byo_bu_ls
a__byo_bu_new_detach
a__change_mode_directory
a__change_mode_file

a__change_owner_root
a__change_owner_user
a__clear
a__co_py_interactive
a__e_macs
a__e_vince
a__git_add
a__git_add_all
a__git_add_all_patch
a__git_add_patch
a__git_branch
a__git_branch_delete
a__git_branch_delete_force
a__git_branch_list
a__git_branch_set_upstream
a__git_checkout
a__git_checkout_orphan
a__git_cherry_pick
a__git_cherry_pick_abort
a__git_cherry_pick_continue
a__git_clean_force
a__git_commit_amend_message
a__git_commit_empty_message
a__git_commit_message
a__git_config_user_email
a__git_config_user_name
a__git_diff
a__git_diff_cached

a__git_diff_cached_word
a__git_diff_tool
a__git_diff_word
a__git_fetch
a__git_fetch_prune
a__git_garbage_collect
a__git_init
a__git_init_bare
a__git_log
a__git_log_all
a__git_log_all_patch
a__git_log_patch
a__git_merge
a__git_merge_abort
a__git_merge_commit
a__git_merge_squash
a__git_merge_tool
a__git_push
a__git_push_delete
a__git_push_force
a__git_re_base
a__git_re_base_abort
a__git_re_base_continue
a__git_re_base_force
a__git_re_base_interactive
a__git_re_mote_add
a__git_re_mote_list
a__git_re_mote_set_upstream

a__git_re_mote_show
a__git_re_move
a__git_re_set
a__git_re_set_hard
a__git_show_commit
a__git_status
a__git_tag
a__git_tag_delete
a__gpg_agent_kill
a__gpg_agent_update
a__grep
a__kill
a__kill_all
a__kill_all_force
a__kill_force
a__list_block
a__list_block_no_empty
a__list_block_output
a__ls
a__ls_time

…

bash completion for prefixes. a__apt_cache_list a__apt_cache_policy a__apt_cache_search a__apt_get_auto_purge a__apt_get_auto_remove a__apt_get_clean a__apt_get_full_upgrade a__apt_get_install a__apt_get_purge a__apt_get_remove a__apt_get_up_date a__apt_get_up_grade a__bat a__btrfs_filesystem_d_f a__btrfs_filesystem_d_u a__btrfs_filesystem_usage a__btrfs_property_get a__btrfs_subvolume_create a__btrfs_subvolume_delete a__btrfs_subvolume_list a__btrfs_subvolume_snapshot a__btrfs_subvolume_snapshot_r a__byo_bu a__byo_bu_attach a__byo_bu_ls a__byo_bu_new_detach a__change_mode_directory a__change_mode_file a__change_owner_root a__change_owner_user a__clear a__co_py_interactive a__e_macs a__e_vince a__git_add a__git_add_all a__git_add_all_patch a__git_add_patch a__git_branch a__git_branch_delete a__git_branch_delete_force a__git_branch_list a__git_branch_set_upstream a__git_checkout a__git_checkout_orphan a__git_cherry_pick a__git_cherry_pick_abort a__git_cherry_pick_continue a__git_clean_force a__git_commit_amend_message a__git_commit_empty_message a__git_commit_message a__git_config_user_email a__git_config_user_name a__git_diff a__git_diff_cached a__git_diff_cached_word a__git_diff_tool a__git_diff_word a__git_fetch a__git_fetch_prune a__git_garbage_collect a__git_init a__git_init_bare a__git_log a__git_log_all a__git_log_all_patch a__git_log_patch a__git_merge a__git_merge_abort a__git_merge_commit a__git_merge_squash a__git_merge_tool a__git_push a__git_push_delete a__git_push_force a__git_re_base a__git_re_base_abort a__git_re_base_continue a__git_re_base_force a__git_re_base_interactive a__git_re_mote_add a__git_re_mote_list a__git_re_mote_set_upstream a__git_re_mote_show a__git_re_move a__git_re_set a__git_re_set_hard a__git_show_commit a__git_status a__git_tag a__git_tag_delete a__gpg_agent_kill a__gpg_agent_update a__grep a__kill a__kill_all a__kill_all_force a__kill_force a__list_block a__list_block_no_empty a__list_block_output a__ls a__ls_time …

2024-11-26

First functions naming approach:
– prefix a__ for system Aliases
– prefix sh_ for regular functions
– prefix u__ for User aliases

#rwx

3 months ago 0 0 0 0
gnome system monitor displaying graphs of:

CPU: 12 units at 100.0% usage
Memory: 47.0 GB (70.0%) of 67.1 GB

gnome system monitor displaying graphs of: CPU: 12 units at 100.0% usage Memory: 47.0 GB (70.0%) of 67.1 GB

2024-10-22

47 GB of memory usage, after building
a #debian live operating system in ram,
while multi-tasking on gnome desktop.

#ofsp

3 months ago 0 0 0 0
main workflow steps:

spcd
spcd-check-project
spcd-build-project
spcd-browse-workspace

main workflow durations:

alpine in 45s
debian in 1m15s
ubuntu in 1m26s
arch in 1m34s
opensuse in 1m44s
fedora in 3m29s
alma in 3m33s
rocky in 4m18s

page footer:
Powered by Forgejo Version: 8.0.3+gitea-1.22.0 Page: 23ms Template: 2ms

main workflow steps: spcd spcd-check-project spcd-build-project spcd-browse-workspace main workflow durations: alpine in 45s debian in 1m15s ubuntu in 1m26s arch in 1m34s opensuse in 1m44s fedora in 3m29s alma in 3m33s rocky in 4m18s page footer: Powered by Forgejo Version: 8.0.3+gitea-1.22.0 Page: 23ms Template: 2ms

2024-10-20

Sorting operating systems
by main workflow duration.

#spcd

3 months ago 0 0 0 0
Workflow steps ending with custom python action failure:

spcd
spcd-check-project
spcd-build-project
spcd-browse-workspace
./act/synchronize

Workflow steps ending with custom python action failure: spcd spcd-check-project spcd-build-project spcd-browse-workspace ./act/synchronize

2024-10-15

Trying custom #python actions in #forgejo …

#spcd

3 months ago 0 0 0 0
Advertisement
Comparing locale behaviors
of debian glibc & alpine musl.

Both have:
LANG
LC_CTYPE
LC_NUMERIC
LC_TIME
LC_COLLATE
LC_MONETARY
LC_MESSAGES
LC_ALL

musl has no:
LC_PAPER
LC_NAME
LC_ADDRESS
LC_TELEPHONE
LC_MEASUREMENT
LC_IDENTIFICATION

Then comparing LC_MONETARY for both.

musl has only: crncystr

glibc has:
int_curr_symbol
currency_symbol
mon_decimal_point
mon_thousands_sep
mon_grouping

Comparing locale behaviors of debian glibc & alpine musl. Both have: LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_ALL musl has no: LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION Then comparing LC_MONETARY for both. musl has only: crncystr glibc has: int_curr_symbol currency_symbol mon_decimal_point mon_thousands_sep mon_grouping

2024-09-06

Realizing that #musl
is really quite different.

#posix #rwx #spcd

3 months ago 0 0 0 0
Side-by-side main branch workflows executions.

Left: main.yaml
arch success in 2m33s
alpine success in 2m18s
fedora success in 7m35s
debian failure at 5m22s
opensuse success in 2m44s
ubuntu success in 10m2s
alma success in 8m45s
rocky success in 10m13s

Right: alt.yaml
arch success in 2m48s
alpine success in 1m39s
fedora success in 11m24s
opensuse success in 3m9s
alma success in 11m33s
rocky success in 11m8s
ubuntu success in 6m33s
debian failure at 3m53s

Side-by-side main branch workflows executions. Left: main.yaml arch success in 2m33s alpine success in 2m18s fedora success in 7m35s debian failure at 5m22s opensuse success in 2m44s ubuntu success in 10m2s alma success in 8m45s rocky success in 10m13s Right: alt.yaml arch success in 2m48s alpine success in 1m39s fedora success in 11m24s opensuse success in 3m9s alma success in 11m33s rocky success in 11m8s ubuntu success in 6m33s debian failure at 3m53s

2024-08-30

Workflows main & alt,
for latest & previous versions
of supported operating systems.

#spcd

3 months ago 0 0 0 0
Left pane with operating systems to build into.

Done:
alpine in 1m54s
archlinux in 2m19s
opensuse in 2m55s
fedora in 9m6s
ubuntu in 8m27s
almalinux in 8m43s

Running: rockylinux at 9m36s

Right pane with log, displaying steps & substeps
as rounded box drawing characters framed banners:

6.3.3 | Python | Virtual environment | Create
6.3.4 | Python | Virtual environment | Activate
6.4 | Python | Modules
6.4.1 | Python | Modules | List
6.4.2 | Python | Modules | Main
6.4.3 | Python | Modules | Check

Left pane with operating systems to build into. Done: alpine in 1m54s archlinux in 2m19s opensuse in 2m55s fedora in 9m6s ubuntu in 8m27s almalinux in 8m43s Running: rockylinux at 9m36s Right pane with log, displaying steps & substeps as rounded box drawing characters framed banners: 6.3.3 | Python | Virtual environment | Create 6.3.4 | Python | Virtual environment | Activate 6.4 | Python | Modules 6.4.1 | Python | Modules | List 6.4.2 | Python | Modules | Main 6.4.3 | Python | Modules | Check

2024-08-27

Fancy steps & substeps banners
for project workflows logging.

#posix #spcd

3 months ago 0 0 0 0
A list of builds on various os docker images.

Success:
almalinux 9
alpine 3.20
archlinux base 20240101
fedora 40
rockylinux 9
ubuntu noble

Failure:
debian bookworm

A list of builds on various os docker images. Success: almalinux 9 alpine 3.20 archlinux base 20240101 fedora 40 rockylinux 9 ubuntu noble Failure: debian bookworm

2024-07-22

Don’t you ever say that
I’m a debian monomaniac…

#spcd

3 months ago 0 0 0 0
Quick showcase of ruff default errors formatting.

Old style:
spcd/util.py:40:5: D103 Missing docstring in public function

New style:
spcd/util.py:40:5: D103 Missing docstring in public function
   |
40 | def step(text: str) -> None:
   |     ^^^^ D103
41 |     env.SPCD_STEP += 1
42 |     log.info(env.SPCD_DOWN)
   |

Quick showcase of ruff default errors formatting. Old style: spcd/util.py:40:5: D103 Missing docstring in public function New style: spcd/util.py:40:5: D103 Missing docstring in public function | 40 | def step(text: str) -> None: | ^^^^ D103 41 | env.SPCD_STEP += 1 42 | log.info(env.SPCD_DOWN) |

2024-07-13

Starting with versions ≥ 0.5.x,
#ruff is relentlessly shaming me
in a multi-line contextual fashion,
instead of short messages by default!

#python #spcd

3 months ago 0 0 0 0
Two browser windows displaying parallel executions,
for both a project’s main and dev git branches,
of ci/cd workflows with custom bash actions:

cd-bootstrap
cd-list-environment
cd-clone-branch
cd-install-packages 'pandoc'
cd-build-project
cd-browse-workspace
cd-synchronize 'out'

Two browser windows displaying parallel executions, for both a project’s main and dev git branches, of ci/cd workflows with custom bash actions: cd-bootstrap cd-list-environment cd-clone-branch cd-install-packages 'pandoc' cd-build-project cd-browse-workspace cd-synchronize 'out'

2024-03-24

Finally setting up a personal software forge:
– #forgejo instead of github | gitlab | gitea
– forgejo-runner instances using #docker
– custom #bash actions for workflows

#rwx #spcd

3 months ago 2 0 0 0
Showcasing box drawing characters and prompt colors,
changing along user switching and error codes raising:

users: green for regular ones and red for root
return codes: green for ok and red for errors

Showcasing box drawing characters and prompt colors, changing along user switching and error codes raising: users: green for regular ones and red for root return codes: green for ok and red for errors

2023-08-23

Tinkering with prompt render…

#rwx

3 months ago 0 0 0 0
Advertisement
Video

2023-07-27

Debian: from local mirror to live-boot squashfs #4

debootstrap base fs in ram
configure basics & defaults
install tui packages
archive fs as tui squashfs

install gui packages
archive fs as gui squashfs
ram peak usage: 29.2 GB

display errors & useless
list tui & gui files

#ofsp

3 months ago 0 0 0 0
Video

2023-07-20

Debian: from local mirror to live-boot squashfs #3

debootstrap base fs
configure basics & defaults
upgrade initial file system
install tui packages
archive fs as tui squashfs

install gui packages
archive fs as gui squashfs

display errors & useless
list tui & gui files & sizes

#ofsp

3 months ago 0 0 0 0
Video

2023-06-20

Debian: from local mirror to live-boot squashfs #2

debootstrap base fs
configure basics & defaults
mount special files & local mirror
upgrade initial file system
set users & passwords
install tui & gui packages
display errors & useless
transfer bash profile
archive final fs

#ofsp

3 months ago 0 0 0 0
Video

2023-06-13

Debian: from local mirror to live-boot squashfs #1

debootstrap base fs
configure apt
set defaults & basics
mount special files & local mirror
upgrade initial file system
install software packages
set users & passwords
unmount mirror & files
transfer bash profile
archive final fs

#ofsp

3 months ago 0 0 0 0
Video

2023-05-04

GRUB: from ESP to VM

create & connect storage images
partition both virtual devices
zeroize, format & transfer files
create raid0, cryptsetup & lvm
display partition tables
launch vm with storage

open encrypted device
close virtual machine
scroll complete log

#lsgm

3 months ago 0 0 0 0
cat /usr/local/bin/kreboot

↓

#! /usr/bin/env bash

ROOT='/media/boot/latest'

function main {
	kexec \
	--initrd "${ROOT}/initrd.img" \
	--load "${ROOT}/vmlinuz" \
	--reuse-cmdline \
	&& reboot
}

main

cat /usr/local/bin/kreboot ↓ #! /usr/bin/env bash ROOT='/media/boot/latest' function main { kexec \ --initrd "${ROOT}/initrd.img" \ --load "${ROOT}/vmlinuz" \ --reuse-cmdline \ && reboot } main

2023-01-04

Starting to #kexec reboot on
my main server with a tiny script…

#ofsp

4 months ago 0 0 0 0