diff --git a/TARGETS.sh b/TARGETS.sh index 86db2f3..b10e6b1 100644 --- a/TARGETS.sh +++ b/TARGETS.sh @@ -25,7 +25,7 @@ ipython:.ipython/profile_default/ipython_config.py gdb:.config/gdb sandbox: chromium:.local/bin/pchromium .local/share/applications/pchromium.desktop -scripts:.local/bin/httpstatus .local/bin/apco .local/bin/bb .local/bin/emoji .local/bin/mksh .local/bin/nato .local/bin/pastas .local/bin/timer .local/bin/tryna .local/bin/trynafail .local/bin/bak .local/bin/cleanup-directory .local/bin/cleanup-directory-log .local/bin/gobuild .local/bin/json .local/bin/open .local/bin/py .local/bin/sha .local/bin/showtips .local/bin/weather .local/bin/rmt .local/bin/scratch .local/bin/wake .local/bin/myip .local/bin/genpass .local/bin/gensalt .local/bin/django-create-project .local/bin/mirror-site .local/bin/split-file .local/bin/extract .local/bin/destroy .local/bin/serveit .local/bin/highlight-logs %copypasta +scripts:.local/bin/httpstatus .local/bin/apco .local/bin/bb .local/bin/emoji .local/bin/mksh .local/bin/nato .local/bin/pastas .local/bin/timer .local/bin/tryna .local/bin/trynafail .local/bin/bak .local/bin/cleanup-directory .local/bin/cleanup-directory-log .local/bin/gobuild .local/bin/json .local/bin/open .local/bin/py .local/bin/sha .local/bin/showtips .local/bin/weather .local/bin/rmt .local/bin/scratch .local/bin/wake .local/bin/myip .local/bin/genpass .local/bin/gensalt .local/bin/django-create-project .local/bin/mirror-site .local/bin/split-file .local/bin/extract .local/bin/destroy .local/bin/serveit .local/bin/highlight-logs .local/bin/flipbit %copypasta music:.local/bin/mpv-service.sh .config/systemd/user/mpv.service .local/bin/player copypasta:.local/bin/copy .local/bin/pasta starsector:.java/.userPrefs/com/fs/starfarer/prefs.xml .local/share/applications/starsector.desktop .local/bin/starsector diff --git a/home/user/.config/yazi/keymap.toml b/home/user/.config/yazi/keymap.toml index e69de29..27c6364 100644 --- a/home/user/.config/yazi/keymap.toml +++ b/home/user/.config/yazi/keymap.toml @@ -0,0 +1,4 @@ +[[mgr.append_keymap]] +on = [ "c", "e" ] +run = "shell -- flipbit x %h" +desc = "Toggle execution mode on file" diff --git a/home/user/.local/bin/flipbit b/home/user/.local/bin/flipbit new file mode 100755 index 0000000..d102db0 --- /dev/null +++ b/home/user/.local/bin/flipbit @@ -0,0 +1,42 @@ +#!/bin/sh -eu +# flipbit - Toggle (flips) bit on file for owner only + +if [ "${#}" -ne 2 ]; then + echo "Usage: ${0} [rwx] file" + exit 1 +fi + +mode="${1}" +file="${2}" + +if [ ! -e "${file}" ]; then + echo "File not found" + exit 1 +fi + +# Get current permissions in octal format (3 digits: owner, group, other) +perms=$(stat -c "%a" "${file}") + +# Extract owner permissions (first digit) +owner_perm=$(echo "${perms}" | cut -c1) + +# Convert to decimal for bit manipulation +owner_dec=$((owner_perm)) + +# Toggle bits for owner only +for char in $(echo "${mode}" | sed 's/./& /g'); do + case ${char} in + r) owner_dec=$((owner_dec ^ 4)) ;; + w) owner_dec=$((owner_dec ^ 2)) ;; + x) owner_dec=$((owner_dec ^ 1)) ;; + esac +done + +# Keep group and other permissions unchanged +group_perm=$(echo "${perms}" | cut -c2) +other_perm=$(echo "${perms}" | cut -c3) + +# Construct new permissions +new_perms="${owner_dec}${group_perm}${other_perm}" + +chmod "${new_perms}" "${file}"