diff --git a/config/scripts/.local/scripts/change-colortheme b/config/scripts/.local/scripts/change-colortheme index fdb1d05..cbe0c26 100755 --- a/config/scripts/.local/scripts/change-colortheme +++ b/config/scripts/.local/scripts/change-colortheme @@ -63,7 +63,7 @@ SCRIPTS = { def hex2rgb(hex_color: str) -> tuple[int, int, int]: """#rrggbb to (r, g, b)""" - return tuple(int(hex_color[i : i + 2], 16) for i in (0, 2, 4)) # type: ignore + return tuple(int(hex_color[i: i + 2], 16) for i in (0, 2, 4)) # type: ignore def clamp(x, minimum, maximum) -> float: diff --git a/config/scripts/.local/scripts/issu b/config/scripts/.local/scripts/issu deleted file mode 100755 index 8336730..0000000 --- a/config/scripts/.local/scripts/issu +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -# Description: -# Detect if the current user is a root or sudo user. Exits with code 0 if true, 1 otherwise. -# This script is required by some other scripts such as `smb-mount` and `wsl-mount`. - -if [ "$(id -u)" -eq 0 ]; then - exit 0 -fi - -if [ -n "$SUDO_USER" ]; then - exit 0 -fi - -if [ "$LOGNAME" != "$USER" ]; then - exit 0 -fi - -ppid=$(ps -o ppid= -p $$ 2>/dev/null) -if [ -n "$ppid" ]; then - parent_comm=$(ps -o comm= -p "$ppid" 2>/dev/null) - if [ "$parent_comm" = "su" ]; then - exit 0 - fi -fi - -exit 1 \ No newline at end of file diff --git a/config/scripts/.local/scripts/luks-mount b/config/scripts/.local/scripts/luks-mount new file mode 100755 index 0000000..2fa3371 --- /dev/null +++ b/config/scripts/.local/scripts/luks-mount @@ -0,0 +1,99 @@ +#!/usr/bin/env bash + +# Description: +# Mount a LUKS encrypted partition and open a shell in the mounted directory. +# - If multiple LUKS devices are found, use fzf to select one (if available). +# - Uses environment variables to customize behavior: +# - LUKS_PARTITION: Path to the LUKS partition (overrides auto-detection). +# - LUKS_MAPPER_NAME: Name for the LUKS mapper (default: luks_mount_). +# - LUKS_MOUNT_POINT: Mount point for the decrypted volume (default: /mnt/luks). +# - Cleans up on exit (unmounts and closes the LUKS volume). +# Requirements: +# - cryptsetup +# - sudo privileges +# - fzf (optional, for selecting among multiple LUKS devices) + +set -euo pipefail + +[ "$(id -u)" -eq 0 ] && { + echo "[ERROR] Do not run this script in sudo mode." >&2 + exit 1 +} + +find_luks_device() { + # Set $devices array to all LUKS devices + # lsblk command explained - n: no headings, p: full path, o: output format, l: list format + mapfile -t devices < <(lsblk -nplo NAME,FSTYPE | awk '$2 == "crypto_LUKS" {print $1}') + + if [ ${#devices[@]} -eq 0 ]; then + echo "[ERROR] No LUKS devices found." >&2 + return 1 + elif [ ${#devices[@]} -eq 1 ]; then + echo "${devices[0]}" + else + # Multiple devices found + # Select one using fzf if available + if command -v fzf >/dev/null; then + printf "%s\n" "${devices[@]}" | fzf --prompt="Select LUKS device: " + else + echo "[ERROR] Multiple LUKS devices found. Please set LUKS_PARTITION env var." >&2 + printf "%s\n" "${devices[@]}" >&2 + return 1 + fi + fi +} + +LUKS_PARTITION="${LUKS_PARTITION:-$(find_luks_device)}" +[ -z "$LUKS_PARTITION" ] && exit 1 + +# Default to a unique name based on timestamp +LUKS_MAPPER_NAME="${LUKS_MAPPER_NAME:-luks_mount_$(date +%s)}" +# Fixed default mount point though +LUKS_MOUNT_POINT="${LUKS_MOUNT_POINT:-/mnt/luks}" + +echo "[INFO] Partition: $LUKS_PARTITION" >&2 +echo "[INFO] Mapper: $LUKS_MAPPER_NAME" >&2 +echo "[INFO] Mount: $LUKS_MOUNT_POINT" >&2 + +mount_point_created=0 +if [ ! -d "$LUKS_MOUNT_POINT" ]; then + sudo mkdir -p "$LUKS_MOUNT_POINT" + mount_point_created=1 +fi + +if ! sudo cryptsetup open "$LUKS_PARTITION" "$LUKS_MAPPER_NAME"; then + echo "[ERROR] Failed to open device." >&2 + exit 1 +fi + +cleanup() { + echo "[INFO] Cleaning up..." >&2 + # Make sure we are not in the mount point when unmounting + cd "$HOME" || true + if mountpoint -q "$LUKS_MOUNT_POINT"; then + sudo umount "$LUKS_MOUNT_POINT" || echo "[WARNING] Failed to unmount." >&2 + fi + if [ -e "/dev/mapper/$LUKS_MAPPER_NAME" ]; then + sudo cryptsetup close "$LUKS_MAPPER_NAME" || echo "[WARNING] Failed to close LUKS mapper." >&2 + fi + if [ $mount_point_created -eq 1 ] && [ -d "$LUKS_MOUNT_POINT" ]; then + sudo rmdir "$LUKS_MOUNT_POINT" || echo "[WARNING] Failed to remove mount point." >&2 + fi + echo "[INFO] Done." >&2 +} +trap cleanup EXIT INT TERM + +sudo mount "/dev/mapper/$LUKS_MAPPER_NAME" "$LUKS_MOUNT_POINT" + +sudo chown "$(whoami):$(whoami)" "$LUKS_MOUNT_POINT" + +echo "[INFO] Successfully mounted at $LUKS_MOUNT_POINT." >&2 +echo "[INFO] Exit this shell to unmount and close the LUKS volume..." >&2 + +cd "$LUKS_MOUNT_POINT" +USER_SHELL="${SHELL:-/bin/bash}" +if [[ "$USER_SHELL" == *"/bash" ]]; then + "$USER_SHELL" --rcfile <(cat ~/.bashrc 2>/dev/null; printf '%s\n' 'PS1="\[\e[1;31m\][LUKS]\[\e[0m\][\u@\h \W]\$ "') -i +else + "$USER_SHELL" +fi diff --git a/config/scripts/.local/scripts/smb-mount b/config/scripts/.local/scripts/smb-mount index 9fb70d9..2f1f0ce 100755 --- a/config/scripts/.local/scripts/smb-mount +++ b/config/scripts/.local/scripts/smb-mount @@ -5,14 +5,10 @@ # # Requirements: # - cifs-utils -# - ./issu # - sudo privileges - -path=$(dirname "$(realpath "$0")") - -"$path"/issu && { - echo "Do not run this script in sudo mode." +[ "$(id -u)" -eq 0 ] && { + echo "Do not run this script in sudo mode." >&2 exit 1 } diff --git a/config/scripts/.local/scripts/smb-umount b/config/scripts/.local/scripts/smb-umount index 5ddebcc..8ff6ed7 100755 --- a/config/scripts/.local/scripts/smb-umount +++ b/config/scripts/.local/scripts/smb-umount @@ -5,12 +5,9 @@ # # Requirements: # - cifs-utils -# - ./issu # - sudo privileges -path=$(dirname "$(realpath "$0")") - -"$path"/issu && { +[ "$(id -u)" -eq 0 ] && { echo "Do not run this script in sudo mode." exit 1 } @@ -28,4 +25,4 @@ for mp in $mount_points; do echo "Failed to unmount $mp" exit 1 } -done \ No newline at end of file +done diff --git a/config/scripts/.local/scripts/wsl-mount b/config/scripts/.local/scripts/wsl-mount index 12c4df8..cb1a639 100755 --- a/config/scripts/.local/scripts/wsl-mount +++ b/config/scripts/.local/scripts/wsl-mount @@ -13,9 +13,7 @@ # This can be done using `qemu-img check -r all ` -path=$(dirname "$(realpath "$0")") - -"$path"/issu && { +[ "$(id -u)" -eq 0 ] && { echo "Do not run this script in sudo mode." exit 1 } diff --git a/config/yazi/.config/yazi/package.toml b/config/yazi/.config/yazi/package.toml index f1e77dc..998a47c 100644 --- a/config/yazi/.config/yazi/package.toml +++ b/config/yazi/.config/yazi/package.toml @@ -1,11 +1,11 @@ [[plugin.deps]] use = "yazi-rs/plugins:git" -rev = "398796d" -hash = "73788c7dc5827ef4677c502c3ea8fa19" +rev = "68f7d48" +hash = "36a484acf6a0a0219c543ccb4cee218f" [[plugin.deps]] use = "yazi-rs/plugins:smart-enter" -rev = "398796d" +rev = "68f7d48" hash = "56fdabc96fc1f4d53c96eb884b02a5be" [[plugin.deps]] @@ -15,8 +15,8 @@ hash = "699fe07e0d2d1b4af8dafb84168eeb04" [[plugin.deps]] use = "KKV9/compress" -rev = "c264639" -hash = "e17c11b605d989568a1d1741ca17c584" +rev = "e2ae983" +hash = "36b570e2164f6ad2317cfb839e42ef4" [[plugin.deps]] use = "llanosrocas/yaziline" diff --git a/config/yazi/.config/yazi/plugins/compress.yazi/main.lua b/config/yazi/.config/yazi/plugins/compress.yazi/main.lua index c3c4241..2b8a750 100644 --- a/config/yazi/.config/yazi/plugins/compress.yazi/main.lua +++ b/config/yazi/.config/yazi/plugins/compress.yazi/main.lua @@ -243,7 +243,7 @@ return { is_level = true end end - elseif arg:match("^%w[%w\\.]*$") then + elseif arg:match("^[%w%.]+$") then -- Handle default extension (e.g., 7z, zip) if archive_commands["%." .. arg .. "$"] then default_extension = arg @@ -265,7 +265,7 @@ return { ya.input( { title = "Create archive:", - position = {"top-center", y = 3, w = 40} + pos = {"top-center", y = 3, w = 40} } ) if event ~= 1 then @@ -362,7 +362,7 @@ return { { title = "Enter password:", obscure = true, - position = {"top-center", y = 3, w = 40} + pos = {"top-center", y = 3, w = 40} } ) if event ~= 1 then @@ -388,7 +388,7 @@ return { ya.input( { title = string.format("Enter compression level (%s - %s)", archive_level_min, archive_level_max), - position = {"top-center", y = 3, w = 40} + pos = {"top-center", y = 3, w = 40} } ) if event ~= 1 then @@ -476,7 +476,7 @@ return { -- Move the final file from the temporary directory to the output directory local final_output_url, temp_url_processed = combine_url(output_dir, original_name), combine_url(temp_dir, original_name) final_output_url, _ = tostring(fs.unique_name(Url(final_output_url))) - local move_status, move_err = os.rename(temp_url_processed, final_output_url) + local move_status, move_err = fs.rename(Url(temp_url_processed), Url(final_output_url)) if not move_status then -- Notify the user if the move operation fails and clean up the temporary directory notify_error(string.format("Failed to move %s to %s, error: %s", temp_url_processed, final_output_url, move_err), "error") @@ -494,3 +494,4 @@ return { end end } + diff --git a/config/yazi/.config/yazi/plugins/git.yazi/main.lua b/config/yazi/.config/yazi/plugins/git.yazi/main.lua index 71c5429..cdc1532 100644 --- a/config/yazi/.config/yazi/plugins/git.yazi/main.lua +++ b/config/yazi/.config/yazi/plugins/git.yazi/main.lua @@ -170,12 +170,12 @@ local function setup(st, opts) [CODES.updated] = t.updated and ui.Style(t.updated) or ui.Style():fg("yellow"), } local signs = { - [CODES.ignored] = t.ignored_sign or "", - [CODES.untracked] = t.untracked_sign or "?", - [CODES.modified] = t.modified_sign or "", - [CODES.added] = t.added_sign or "", - [CODES.deleted] = t.deleted_sign or "", - [CODES.updated] = t.updated_sign or "", + [CODES.ignored] = t.ignored_sign or " ", + [CODES.untracked] = t.untracked_sign or "? ", + [CODES.modified] = t.modified_sign or " ", + [CODES.added] = t.added_sign or " ", + [CODES.deleted] = t.deleted_sign or " ", + [CODES.updated] = t.updated_sign or " ", } Linemode:children_add(function(self)