From 93ed33f1b48a96461488d067a6f3d1df0404b217 Mon Sep 17 00:00:00 2001 From: The-Repo-Club Date: Fri, 7 Oct 2022 11:25:26 +0100 Subject: [PATCH] Update --- LICENSE_KISS | 21 - ckb-next/.config/ckb-next/ckb-next.conf | 16 +- dconf/.config/dconf/user | Bin 10643 -> 10891 bytes kiss/.local/bin/kiss/kiss | 1920 ----------------- kiss/.local/bin/kiss/kiss-chroot | 96 - kiss/.local/bin/kiss/kiss-depends | 13 - kiss/.local/bin/kiss/kiss-export | 33 - kiss/.local/bin/kiss/kiss-fork | 30 - kiss/.local/bin/kiss/kiss-help | 28 - kiss/.local/bin/kiss/kiss-link | 46 - kiss/.local/bin/kiss/kiss-maintainer | 18 - kiss/.local/bin/kiss/kiss-manifest | 11 - kiss/.local/bin/kiss/kiss-new | 31 - kiss/.local/bin/kiss/kiss-orphans | 16 - kiss/.local/bin/kiss/kiss-outdated | 289 --- kiss/.local/bin/kiss/kiss-owns | 35 - kiss/.local/bin/kiss/kiss-preferred | 12 - kiss/.local/bin/kiss/kiss-repo-orphans | 20 - kiss/.local/bin/kiss/kiss-revdepends | 8 - kiss/.local/bin/kiss/kiss-size | 47 - package-list/.config/package-list | 2 +- qtile/.config/qtile/config.py | 220 ++ repomenu/.config/repomenu/repomenu-desktop.db | Bin 8192 -> 8192 bytes .../touchpad-indicator.conf | 2 +- xprofile/.zprofile | 13 + 25 files changed, 243 insertions(+), 2684 deletions(-) delete mode 100644 LICENSE_KISS delete mode 100755 kiss/.local/bin/kiss/kiss delete mode 100755 kiss/.local/bin/kiss/kiss-chroot delete mode 100755 kiss/.local/bin/kiss/kiss-depends delete mode 100755 kiss/.local/bin/kiss/kiss-export delete mode 100755 kiss/.local/bin/kiss/kiss-fork delete mode 100755 kiss/.local/bin/kiss/kiss-help delete mode 100755 kiss/.local/bin/kiss/kiss-link delete mode 100755 kiss/.local/bin/kiss/kiss-maintainer delete mode 100755 kiss/.local/bin/kiss/kiss-manifest delete mode 100755 kiss/.local/bin/kiss/kiss-new delete mode 100755 kiss/.local/bin/kiss/kiss-orphans delete mode 100755 kiss/.local/bin/kiss/kiss-outdated delete mode 100755 kiss/.local/bin/kiss/kiss-owns delete mode 100755 kiss/.local/bin/kiss/kiss-preferred delete mode 100755 kiss/.local/bin/kiss/kiss-repo-orphans delete mode 100755 kiss/.local/bin/kiss/kiss-revdepends delete mode 100755 kiss/.local/bin/kiss/kiss-size create mode 100644 qtile/.config/qtile/config.py diff --git a/LICENSE_KISS b/LICENSE_KISS deleted file mode 100644 index 8b1a44597..000000000 --- a/LICENSE_KISS +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019-2021 Dylan Araps - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/ckb-next/.config/ckb-next/ckb-next.conf b/ckb-next/.config/ckb-next/ckb-next.conf index 4f30c5799..2760820aa 100644 --- a/ckb-next/.config/ckb-next/ckb-next.conf +++ b/ckb-next/.config/ckb-next/ckb-next.conf @@ -197,7 +197,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Lighting\Keys\y=#ffffff 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Lighting\Keys\z=#ffffff 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Lighting\UseRealNames=true -0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Modified=fd44203a +0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Modified=d20ed5f 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Name=Rainbow 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Performance\AngleSnap=false 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\0\Performance\DPI\0=@Point(400 400) @@ -425,7 +425,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Lighting\Keys\y=#ff0000 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Lighting\Keys\z=#ff0000 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Lighting\UseRealNames=true -0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Modified=ff29d844 +0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Modified=80f14940 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Name=Breathing 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Performance\AngleSnap=false 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\1\Performance\DPI\0=@Point(400 400) @@ -675,7 +675,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Lighting\Keys\y=#aa00ff 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Lighting\Keys\z=#aa00ff 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Lighting\UseRealNames=true -0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Modified=871229c3 +0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Modified=d32b1742 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Name=Trippy 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Performance\AngleSnap=false 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\2\Performance\DPI\0=@Point(400 400) @@ -733,7 +733,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\CurrentMode={51EB6E3A-27A0-4AD6-A35C-6B67E0329A3D} 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\HwModified=7ffd 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\ModeCount=3 -0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\Modified=9b78c45f +0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\Modified=d432a6b9 0E029022AF4C18835CBDCC7EF5001BC3\%7B5B1E2E81-ED4F-4F79-9EB5-F8ACA67D1BF0%7D\Name=Multi 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Binding\KeyMap=K68 GB 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Binding\UseRealNames=true @@ -929,7 +929,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Lighting\Keys\y=#ffffff 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Lighting\Keys\z=#ffffff 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Lighting\UseRealNames=true -0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Modified=71c5d0ae +0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Modified=63c03057 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Name=Rainbow 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Performance\AngleSnap=false 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\0\Performance\DPI\0=@Point(400 400) @@ -1157,7 +1157,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Lighting\Keys\y=#ff0000 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Lighting\Keys\z=#ff0000 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Lighting\UseRealNames=true -0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Modified=7bc31922 +0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Modified=ab8dbc14 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Name=Breathing 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Performance\AngleSnap=false 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\1\Performance\DPI\0=@Point(400 400) @@ -1407,7 +1407,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Lighting\Keys\y=#aa00ff 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Lighting\Keys\z=#aa00ff 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Lighting\UseRealNames=true -0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Modified=5cf781a5 +0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Modified=5122903c 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Name=Trippy 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Performance\AngleSnap=false 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\2\Performance\DPI\0=@Point(400 400) @@ -1465,7 +1465,7 @@ 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\CurrentMode={11C11AE3-3195-4DFC-B8AC-2FEA703414E5} 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\HwModified=40b6f054 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\ModeCount=3 -0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\Modified=c1f1d839 +0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\Modified=8b25e8b6 0E029022AF4C18835CBDCC7EF5001BC3\%7BBA7FC152-2D51-4C26-A7A6-A036CC93D924%7D\Name=Demo [Popups] diff --git a/dconf/.config/dconf/user b/dconf/.config/dconf/user index e3ec696a05d6b42b7b28d95da01e380656ed9236..542ed93d181118a639db3278c39625016116586c 100644 GIT binary patch literal 10891 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 u68}MHjy%Ox@gtpZ^8AL1G60 diff --git a/kiss/.local/bin/kiss/kiss b/kiss/.local/bin/kiss/kiss deleted file mode 100755 index b2acc0b1d..000000000 --- a/kiss/.local/bin/kiss/kiss +++ /dev/null @@ -1,1920 +0,0 @@ -#!/bin/sh -ef -# shellcheck source=/dev/null -# -# Simple package manager written in POSIX shell for https://kisslinux.org -# -# The MIT License (MIT) -# -# Copyright (c) 2019-2021 Dylan Araps -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -log() { - printf '%b%s %b%s%b %s\n' \ - "$c1" "${3:-->}" "${c3}${2:+$c2}" "$1" "$c3" "$2" >&2 -} - -war() { - log "$1" "$2" "${3:-WARNING}" -} - -die() { - log "$1" "$2" "${3:-ERROR}" - exit 1 -} - -run() { - # Print the command, then run it. - printf '%s\n' "$*" - "$@" -} - -contains() { - # Check if a "string list" contains a word. - case " $1 " in *" $2 "*) return 0; esac; return 1 -} - -equ() { - # Check if a string is equal to enother. - # This replaces '[ "$var" = str ]' and '[ "$var" != str ]'. - case $1 in "$2") return 0 ;; *) return 1; esac -} - -ok() { - # Check if a string is non-null. - # This replaces '[ "$var" ]', '[ -n "$var" ]'. - case $1 in '') return 1 ;; *) return 0; esac -} - -null() { - # Check if a string is non-null. - # This replaces '[ -z "$var" ]'. - case $1 in '') return 0 ;; *) return 1; esac -} - -tmp_file() { - # Create a uniquely named temporary file and store its absolute path - # in a variable (_tmp_file). - # - # To prevent subshell usage and to handle cases where multiple files - # are needed, this saves the last two temporary files to variables - # for access by the caller (allowing 3 files at once). - _tmp_file_pre_pre=$_tmp_file_pre - _tmp_file_pre=$_tmp_file - _tmp_file=$tmp_dir/$KISS_PID-$1-$2 - - : > "$_tmp_file" || die "$1" "Failed to create temporary file" -} - -tmp_file_copy() { - # Create a uniquely named temporary file and make a duplicate of - # the file in '$3' if it exists. - tmp_file "$1" "$2" - - ! [ -f "$3" ] || cp -f "$3" "$_tmp_file" -} - -prompt() { - null "$1" || log "$1" - - log "Continue?: Press Enter to continue or Ctrl+C to abort" - - # korn-shell does not exit on interrupt of read. - equ "$KISS_PROMPT" 0 || read -r _ || exit 1 -} - -mkcd() { - mkdir -p "$@" && cd "$1" -} - -fnr() { - # Replace all occurrences of substrings with substrings. This - # function takes pairs of arguments iterating two at a time - # until everything has been replaced. - _fnr=$1 - shift 1 - - while :; do case $_fnr-$# in - raw:*) _fnr=${_fnr##raw:}; break ;; - *"$1"*) _fnr=${_fnr%"$1"*}${2}${_fnr##*"$1"} ;; - *-2) break ;; - *) shift 2 - esac done -} - -am_owner() { - # Figure out if we need to change users to operate on - # a given file or directory. - inf=$(ls -ld "$1") || - die "Failed to file information for '$1'" - - # Split the ls output into fields. - read -r _ _ user _ </dev/null || PWD=${_rpath%/*} - - # Final resolved path. - _rpath=${PWD#"$KISS_ROOT"}/${_rpath##*/} - - -} - -run_hook() { - # Run all hooks in KISS_HOOK (a colon separated - # list of absolute file paths). - IFS=: - - for hook in ${KISS_HOOK:-}; do case $hook in *?*) - "$hook" "$@" || die "$1 hook failed: '$hook'" - esac done - - unset IFS -} - -run_hook_pkg() { - # Run a hook from the package's database files. - if [ -x "$sys_db/$2/$1" ]; then - log "$2" "Running $1 hook" - "$sys_db/$2/$1" - - elif [ -f "$sys_db/$2/$1" ]; then - war "$2" "skipping $1 hook: not executable" - fi -} - -decompress() { - case $1 in - *.tbz|*.bz2) bzip2 -d ;; - *.lzma) lzma -dc ;; - *.lz) lzip -dc ;; - *.tar) cat ;; - *.tgz|*.gz) gzip -d ;; - *.xz|*.txz) xz -dcT0 ;; - *.zst) zstd -dc ;; - esac < "$1" -} - -sh256() { - # There's no standard utility to generate sha256 checksums. - # This is a simple wrapper around sha256sum, sha256, shasum, - # openssl, digest, ... which will use whatever is available. - # - # All utilities must match 'sha256sum' output. - # - # Example: ' ' - - # Filter out directories and anything which does not exist. - for f do shift - [ -d "$f" ] || [ ! -e "$f" ] || set -- "$@" "$f" - done - - ! equ "$#" 0 || return 0 - - # Set the arguments based on found sha256 utility. - case ${cmd_sha##*/} in - openssl) set -- dgst -sha256 -r "$@" ;; - sha256) set -- -r "$@" ;; - shasum) set -- -a 256 "$@" ;; - digest) set -- -a sha256 "$@" ;; - esac - - # This is now one call to the checksums command rather than - # one per file. We also display errors now rather than not - # (due to old runtime detection method). - hash=$("$cmd_sha" "$@") || die "Failed to generate checksums" - - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - set -- $hash - - # As the output is ' ' and the above list is - # split on whitespace; we need to pop every 2nd element. - for sum do case ${_i:-0} in - 0) _i=1; set -- "$@" "$sum" ;; - 1) _i=0 - esac; shift; done - - printf '%s\n' "$@" - - # Convert the list items to a newline separated string. - IFS=$newline hash=$* - unset IFS -} - -pkg_find_version() { - ver_pre=$repo_ver - rel_pre=$repo_rel - - pkg_find "$@" - - read -r repo_ver repo_rel 2>/dev/null < "$repo_dir/version" || - die "$1" "Failed to read version file ($repo_dir/version)" - - ok "$repo_rel" || - die "$1" "Release field not found in version file" - - # This belongs somewhere else, for now it can live here. - [ -x "$repo_dir/build" ] || - die "$pkg" "Build file not found or not executable" -} - -pkg_find_version_split() { - pkg_find_version "$@" - - # Split the version on '.+-_' to obtain individual components. - IFS=.+-_ read -r repo_major repo_minor repo_patch repo_ident < "$_tmp_file_pre" || - die "$repo_name" "Failed to decompress $1" - - tar xf "$_tmp_file_pre" || - die "$repo_name" "Failed to extract $1" - - # The sort command filters out all duplicate top-level - # directories from the tarball's manifest. This is an optimization - # as we avoid looping (4000 times for Python(!)). - tar tf "$_tmp_file_pre" | sort -ut / -k1,1 > "$_tmp_file" || - die "$repo_name" "Failed to extract manifest" - - # Iterate over all directories in the first level of the - # tarball's manifest. Each directory is moved up a level. - while IFS=/ read -r dir _; do case ${dir#.} in *?*) - # Move the parent directory to prevent naming conflicts - # with the to-be-moved children. - mv -f "$dir" "$KISS_PID-$dir" - - # Move all children up a directory level. If the mv command - # fails, fallback to copying the remainder of the files. - # - # We can't use '-exec {} +' with any arguments between - # the '{}' and '+' as this is not POSIX. We must also - # use '$0' and '$@' to reference all arguments. - find "$KISS_PID-$dir/." ! -name . -prune \ - -exec sh -c 'mv -f "$0" "$@" .' {} + 2>/dev/null || - - find "$KISS_PID-$dir/." ! -name . -prune \ - -exec sh -c 'cp -fRp "$0" "$@" .' {} + - - # Remove the directory now that all files have been - # transferred out of it. This can't be a simple 'rmdir' - # as we may leave files in here if any were copied. - rm -rf "$KISS_PID-$dir" - esac done < "$_tmp_file" - - # Remove the tarball now that we are done with it. - rm -f "$_tmp_file_pre" -} - -pkg_extract() { - # Extract all source archives to the build directory and copy over any - # local repository files. - # - # NOTE: repo_dir comes from caller. - log "$1" "Extracting sources" - - # arg1: pre-extract - # arg2: package name - # arg3: path to DESTDIR - run_hook pre-extract "$pkg" "$pkg_dir/$pkg" - - while read -r src dest || ok "$src"; do - pkg_source_resolve "$1" "$src" "$dest" >/dev/null - - # Create the source's directories if not null. - null "$_res" || mkcd "$mak_dir/$1/$dest" - - case $_res in - git+*) - pkg_source_git "$_res" - ;; - - *.tar|*.tar.??|*.tar.???|*.tar.????|*.t?z) - pkg_source_tar_hack "$_res" - ;; - - *.zip) - unzip "$_res" - ;; - - *?*) - cp -Rf "$_res" . - ;; - esac - done < "$repo_dir/sources" || die "$1" "Failed to extract $_res" -} - -pkg_depends() { - # Resolve all dependencies and generate an ordered list. The deepest - # dependencies are listed first and then the parents in reverse order. - contains "$deps" "$1" || { - # Filter out non-explicit, already installed packages. - null "$3" || ok "$2" || contains "$explicit" "$1" || - ! [ -d "$sys_db/$1" ] || return - - # Detect circular dependencies and bail out. - # Looks for multiple repeating patterns of (dep dep_parent) (5 is max). - case " $4 " in -*" ${4##* } "*" $1 "\ -*" ${4##* } "*" $1 "\ -*" ${4##* } "*" $1 "\ -*" ${4##* } "*" $1 "\ -*" ${4##* } "*" $1 "\ -*) - die "Circular dependency detected $1 <> ${4##* }" - esac - - ! _pkg_find "$1" || ! [ -e "$repo_dir/depends" ] || - - # Recurse through the dependencies of the child packages. - while read -r dep dep_type || ok "$dep"; do - ok "${dep##\#*}" || continue - - pkg_depends "$dep" '' "$3" "$4 $1" "$dep_type" - done < "$repo_dir/depends" || : - - # Add parent to dependencies list. - if ! equ "$2" expl || { equ "$5" make && ! pkg_cache "$1"; }; then - deps="$deps $1" - fi - } -} - -pkg_order() { - # Order a list of packages based on dependence and take into account - # pre-built tarballs if this is to be called from 'kiss i'. - unset order redro deps - - for pkg do case $pkg in - /*@*.tar.*) deps="$deps $pkg" ;; - *@*.tar.*) deps="$deps $ppwd/$pkg" ;; - */*) die "Not a package' ($pkg)" ;; - *) pkg_depends "$pkg" raw - esac done - - # Filter the list, only keeping explicit packages. The purpose of these - # two loops is to order the argument list based on dependence. - for pkg in $deps; do case " $* " in *" $pkg "*|*" ${pkg##"$ppwd/"} "*) - order="$order $pkg" - redro="$pkg $redro" - esac done - - unset deps -} - -pkg_strip() { - # Strip package binaries and libraries. This saves space on the system as - # well as on the tarballs we ship for installation. - [ -f "$mak_dir/$pkg/nostrip" ] || equ "$KISS_STRIP" 0 && return - - log "$1" "Stripping binaries and libraries" - - # Strip only files matching the below ELF types. This uses 'od' to print - # the first 18 bytes of the file. This is the location of the ELF header - # (up to the ELF type) and contains the type information we need. - # - # Static libraries (.a) are in reality AR archives which contain ELF - # objects. We simply read from the same 18 bytes and assume that the AR - # header equates to an archive containing objects (.o). - # - # Example ELF output ('003' is ELF type): - # 0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 - # 0000020 003 \0 - # 0000022 - # - # Example AR output (.a): - # 0000000 ! < a r c h > \n / - # 0000020 - # 0000022 - while read -r file; do case $file in - # Look only in these locations for files of interest (libraries, - # programs, etc). This includes all subdirectories. Old behavior - # would run od on all files (upwards of 4000 for Python). - */sbin/?*|*/bin/?*|*/lib/?*|*/lib??/?*|*/lib???/?*|*/lib????/?*) - - case $(od -A o -t c -N 18 "$file") in - # REL (object files (.o), static libraries (.a)). - *177*E*L*F*0000020\ 001\ *|*\!*\<*a*r*c*h*\>*) - strip -g -R .comment -R .note "$file" - ;; - - # EXEC (binaries), DYN (shared libraries). - # Shared libraries keep global symbols in a separate ELF section - # called '.dynsym'. '--strip-all/-s' does not touch the dynamic - # symbol entries which makes this safe to do. - *177*E*L*F*0000020\ 00[23]\ *) - strip -s -R .comment -R .note "$file" - ;; - esac - esac done < "$pkg_dir/$1/$pkg_db/$1/manifest" 2>/dev/null || : -} - -pkg_fix_deps() { - # Dynamically look for missing runtime dependencies by checking each - # binary and library with 'ldd'. This catches any extra libraries and or - # dependencies pulled in by the package's build suite. - log "$1" "looking for dependencies (using ${cmd_elf##*/})" - - tmp_file_copy "$1" depends depends - tmp_file "$1" depends-fixed - - set +f - set -f -- "$sys_db/"*/manifest - - # False positive (not a write). - # shellcheck disable=2094 - while read -r _file; do case $_file in - # Look only in these locations for files of interest (libraries, - # programs, etc). This includes all subdirectories. Old behavior - # would run ldd on all files (upwards of 4000 for Python). - */sbin/?*|*/bin/?*|*/lib/?*|*/lib??/?*|*/lib???/?*|*/lib????/?*) - - # The readelf mode requires ldd's output to resolve the library - # path for a given file. If ldd fails, silently skip the file. - ldd_buf=$(ldd -- "$_file" 2>/dev/null) || continue - - # Attempt to get information from readelf. If this fails (or we - # are in ldd mode), do full ldd mode (which has the downside of - # listing dependencies of dependencies (and so on)). - elf_buf=$("$cmd_elf" -d "$_file" 2>/dev/null) || elf_buf=$ldd_buf - - # Iterate over the output of readelf or ldd, extract file names, - # resolve their paths and finally, figure out their owner. - while read -r lib; do case $lib in *NEEDED*\[*\]|*'=>'*) - # readelf: 0x0000 (NEEDED) Shared library: [libjson-c.so.5] - lib=${lib##*\[} - lib=${lib%%\]*} - - # Resolve library path. - # ldd: libjson-c.so.5 => /lib/libjson-c.so.5 ... - case $cmd_elf in - *readelf) lib=${ldd_buf#*" $lib => "} ;; - *) lib=${lib##*=> } ;; - esac - lib=${lib%% *} - - # Skip files owned by libc and POSIX. - case ${lib##*/} in - ld-* |\ - lib[cm].so* |\ - libcrypt.so* |\ - libdl.so* |\ - libmvec.so* |\ - libpthread.so* |\ - libresolv.so* |\ - librt.so* |\ - libtrace.so* |\ - libutil.so* |\ - libxnet.so* |\ - ldd) - continue - esac - - resolve_path "$lib" - - # Skip file if owned by current package - ! pkg_owner -e "$_rpath" manifest || - continue - - ! pkg_owner -e "$_rpath" "$@" || - printf '%s\n' "$_owns" - - esac done < "$_tmp_file" - - # If the depends file was modified, show a diff and replace it. - ! [ -s "$_tmp_file" ] || { - diff -U 3 "$_tmp_file_pre" "$_tmp_file" 2>/dev/null || : - - # Replace the existing depends file if one exists, otherwise this - # just moves the file to its final resting place. - mv -f "$_tmp_file" depends - - # Generate a new manifest as we may be the creator of the depends - # file. This could otherwise be implemented by inserting a line - # at the correct place in the existing manifest. - pkg_manifest "${PWD##*/}" "$pkg_dir" - } -} - -pkg_manifest() { - # Generate the package's manifest file. This is a list of each file - # and directory inside the package. The file is used when uninstalling - # packages, checking for package conflicts and for general debugging. - log "$1" "Generating manifest" - - tmp_file "$1" manifest - - # Create a list of all files and directories. Append '/' to the end of - # directories so they can be easily filtered out later. Also filter out - # all libtool .la files and charset.alias. - { - printf '%s\n' "$2/$1/$pkg_db/$1/manifest" - - ! [ -d "$2/$1/etc" ] || - printf '%s\n' "$2/$1/$pkg_db/$1/etcsums" - - find "$2/$1" ! -path "$2/$1" -type d -exec printf '%s/\n' {} + \ - -o \( ! -type d -a ! -name \*.la -a ! -name charset.alias \) -print - - # Sort the output in reverse. Directories appear after their contents. - } | sort -ur > "$_tmp_file" - - # Remove the prefix from each line. - while read -r file; do - printf '%s\n' "${file#"$2/$1"}" - done < "$_tmp_file" > "$2/$1/$pkg_db/$1/manifest" -} - -pkg_manifest_validate() { - log "$1" "Checking if manifest valid" - - while read -r line; do - [ -e "$tar_dir/$1$line" ] || [ -h "$tar_dir/$1$line" ] || { - printf '%s\n' "$line" - set -- "$@" "$line" - } - done < "$pkg_db/$1/manifest" - - case $# in [2-9]|[1-9][0-9]*) - die "$1" "manifest contains $(($# - 1)) non-existent files" - esac -} - -pkg_manifest_replace() { - # Replace the matching line in the manifest with the desired replacement. - # This used to be a 'sed' call which turned out to be a little - # error-prone in some cases. This new method is a tad slower but ensures - # we never wipe the file due to a command error. - tmp_file "$1" "manifest-replace-${2##*/}" - - while read -r line; do - ! equ "$line" "$2" || line=$3 - - printf '%s\n' "$line" - done < "$sys_db/$1/manifest" | sort -r > "$_tmp_file" - - mv -f "$_tmp_file" "$sys_db/$1/manifest" -} - -pkg_etcsums() { - # Generate checksums for each configuration file in the package's /etc/ - # directory for use in "smart" handling of these files. - log "$repo_name" "Generating etcsums" - - # Minor optimization - skip packages without /etc/. - [ -d "$pkg_dir/$repo_name/etc" ] || return 0 - - # Create a list of all files in etc but do it in reverse. - while read -r etc; do case $etc in /etc/*[!/]) - set -- "$pkg_dir/$repo_name/$etc" "$@" - esac done < manifest - - sh256 "$@" > etcsums -} - -pkg_tar() { - # Create a tarball from the built package's files. This tarball also - # contains the package's database entry. - # - # NOTE: repo_ comes from caller. - log "$1" "Creating tarball" - - _tar_file=$bin_dir/$1@$repo_ver-$repo_rel.tar.$KISS_COMPRESS - - # Use 'cd' to avoid needing tar's '-C' flag which may not be portable - # across implementations. - cd "$pkg_dir/$1" - - # Create a tarball from the contents of the built package. - tar cf - . | case $KISS_COMPRESS in - bz2) bzip2 -z ;; - gz) gzip -6 ;; - lzma) lzma -z ;; - lz) lzip -z ;; - xz) xz -zT0 ;; - zst) zstd -z ;; - esac > "$_tar_file" - - - - log "$1" "Successfully created tarball" - - # arg1: post-package - # arg2: package name - # arg3: path to tarball - run_hook post-package "$1" "$_tar_file" -} - -pkg_build_all() { - # Build packages and turn them into packaged tarballs. - # Order the argument list and filter out duplicates. - - # Mark packages passed on the command-line explicit. - # Also resolve dependencies for all explicit packages. - for pkg do - pkg_depends "$pkg" expl filter - explicit="$explicit $pkg " - done - - # If this is an update, don't always build explicitly passsed packages - # and instead install pre-built binaries if they exist. - ok "$pkg_update" || explicit_build=$explicit - - set -- - - # If an explicit package is a dependency of another explicit package, - # remove it from the explicit list. - for pkg in $explicit; do - contains "$deps" "$pkg" || set -- "$@" "$pkg" - done - explicit_cnt=$# - explicit=$* - - log "Building: explicit: $*${deps:+, implicit: ${deps## }}" - - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - set -- $deps "$@" - - # Ask for confirmation if extra packages need to be built. - equ "$#" "$explicit_cnt" || prompt - - log "Checking for pre-built dependencies" - - # Install any pre-built dependencies if they exist in the binary - # directory and are up to date. - for pkg in "$@"; do - if ! contains "$explicit_build" "$pkg" && pkg_cache "$pkg"; then - log "$pkg" "Found pre-built binary" - - # Intended behavior. - # shellcheck disable=2030,2031 - (export KISS_FORCE=1; args i "$tar_file") - else - set -- "$@" "$pkg" - fi - - shift - done - - for pkg do - pkg_source "$pkg" - - ! [ -f "$repo_dir/sources" ] || pkg_verify "$pkg" - done - - # Finally build and create tarballs for all passed packages and - # dependencies. - for pkg do - log "$pkg" "Building package ($((_build_cur+=1))/${_build_tot:=$#})" - - pkg_find_version_split "$pkg" - - # arg1: queue-status - # arg2: package name - # arg3: number in queue - # arg4: total in queue - run_hook queue "$pkg" "$((_build_cur += 1))" "$#" - - ! [ -f "$repo_dir/sources" ] || pkg_extract "$pkg" - - pkg_build "$pkg" - pkg_manifest "$pkg" "$pkg_dir" - pkg_strip "$pkg" - - cd "$pkg_dir/$pkg/$pkg_db/$pkg" - - pkg_fix_deps "$pkg" - pkg_etcsums - pkg_tar "$pkg" - - if ok "$pkg_update" || ! contains "$explicit" "$pkg"; then - log "$pkg" "Needed as a dependency or has an update, installing" - - # Intended behavior. - # shellcheck disable=2030,2031 - (export KISS_FORCE=1; args i "$pkg") - fi - done - - case $pkg_update in '') - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - ! prompt "Install built packages? [$explicit]" || (args i $explicit) - esac -} - -pkg_build() { - # Install built packages to a directory under the package name to - # avoid collisions with other packages. - mkcd "$mak_dir/$1" "$pkg_dir/$1/$pkg_db" - - log "$1" "Starting build" - - # arg1: pre-build - # arg2: package name - # arg3: path to build directory - run_hook pre-build "$1" "$mak_dir/$1" - - # Attempt to create the log file early so any permissions errors are caught - # before the build starts. 'tee' is run in a pipe and POSIX shell has no - # pipe-fail causing confusing behavior when tee fails. - : > "$log_dir/$1-$time-$KISS_PID" - - # Call the build script, log the output to the terminal and to a file. - # There's no PIPEFAIL in POSIX shell so we must resort to tricks like kill. - { - # Give the script a modified environment. Define toolchain program - # environment variables assuming a generic environment by default. - # - # Define DESTDIR, PREFIX and GOPATH to sane defaults as their use is - # mandatory in anything using autotools, meson, cmake, etc. - # - # Define KISS_ROOT as the sanitized value used internally by the - # package manager. This is safe to join with other paths. - AR="${AR:-ar}" \ - CC="${CC:-cc}" \ - CXX="${CXX:-c++}" \ - NM="${NM:-nm}" \ - RANLIB="${RANLIB:-ranlib}" \ - DESTDIR="$pkg_dir/$1" \ - GOPATH="$PWD/go" \ - KISS_ROOT="$KISS_ROOT" \ - \ - "$repo_dir/build" "$pkg_dir/$1" "$repo_ver" 2>&1 || { - log "$1" "Build failed" - log "$1" "Log stored to $log_dir/$1-$time-$KISS_PID" - - # arg1: build-fail - # arg2: package name - # arg3: path to build directory - run_hook build-fail "$pkg" "$mak_dir/$1" - - pkg_clean - kill 0 - } - } | tee "$log_dir/$1-$time-$KISS_PID" - - # Delete the log file if the build succeeded to prevent the directory - # from filling very quickly with useless logs. - equ "$KISS_KEEPLOG" 1 || rm -f "$log_dir/$1-$time-$KISS_PID" - - # Copy the repository files to the package directory. - cp -LRf "$repo_dir" "$pkg_dir/$1/$pkg_db/" - - log "$1" "Successfully built package" - - # arg1: post-build - # arg2: package name - # arg3: path to DESTDIR - run_hook post-build "$1" "$pkg_dir/$1" -} - -pkg_checksums() { - # Generate checksums for packages. - # - # NOTE: repo_ comes from caller. - while read -r src dest || ok "$src"; do - pkg_source_resolve "$repo_name" "$src" "$dest" >/dev/null - - case $_res in git+*) ;; */*[!.]) - set -- "$@" "$_res" - esac - done < "$repo_dir/sources" - - sh256 "$@" -} - -pkg_verify() { - # Verify all package checksums. This is achieved by generating a new set - # of checksums and then comparing those with the old set. - # - # NOTE: repo_dir comes from caller. - log "$repo_name" "Verifying sources" - - # Generate a new set of checksums to compare against. - pkg_checksums >/dev/null - - # Intentional, globbing disabled. - # shellcheck disable=2038,2086 - set -- $hash - - # Only read checksums if we generated some. - null "$1" || - - # Check that the first column (separated by whitespace) match in both - # checksum files. If any part of either file differs, mismatch. Abort. - while read -r chk _ || ok "$1"; do - printf '%s\n%s\n' "- ${chk:-missing}" "+ ${1:-no source}" - - case $1-${chk:-null} in - "$chk-$1"|"$1-SKIP") - # We have a match. - ;; - - "$hash"-*|*) - die "$repo_name" "Checksum mismatch" - ;; - esac - - shift "$(($# != 0))" - done < "$repo_dir/checksums" -} - -pkg_conflicts() { - # Check to see if a package conflicts with another. - # _pkg comes from the caller. - log "$_pkg" "Checking for package conflicts" - - tmp_file "$_pkg" manifest-files - tmp_file "$_pkg" found-conflicts - - # Filter the tarball's manifest and select only files. Resolve all - # symlinks in file paths as well. - while read -r file; do case $file in *[!/]) - resolve_path "$file" - - printf '%s\n' "$_rpath" - esac done < "$PWD/$pkg_db/$_pkg/manifest" > "$_tmp_file_pre" - - cd "$tar_dir/$_pkg" - set +f - set -f "$sys_db"/*/manifest - - # Remove the current package from the manifest list. - fnr "$*" "$sys_db/$_pkg/manifest" "" - - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - set -- $_fnr - - # Return here if there is nothing to check conflicts against. - ! equ "$#" 0 || return 0 - - # Store the list of found conflicts in a file as we'll be using the - # information multiple times. Storing things in the cache dir allows - # us to be lazy as they'll be automatically removed on script end. - grep -Fxf "$_tmp_file_pre" -- "$@" 2>/dev/null > "$_tmp_file" || : - - # Enable alternatives automatically if it is safe to do so. - # This checks to see that the package that is about to be installed - # doesn't overwrite anything it shouldn't in '/var/db/kiss/installed'. - grep -q ":/var/db/kiss/installed/" "$_tmp_file" || safe=1 - - if ! equ "$KISS_CHOICE" 1 && equ "$safe" 1 && [ -s "$_tmp_file" ]; then - # This is a novel way of offering an "alternatives" system. - # It is entirely dynamic and all "choices" are created and - # destroyed on the fly. - # - # When a conflict is found between two packages, the file - # is moved to a directory called "choices" and its name - # changed to store its parent package and its intended - # location. - # - # The package's manifest is then updated to reflect this - # new location. - # - # The 'kiss alternatives' command parses this directory and - # offers you the CHOICE of *swapping* entries in this - # directory for those on the filesystem. - # - # The alternatives command does the same thing we do here, - # it rewrites manifests and moves files around to make - # this work. - # - # Pretty nifty huh? - while IFS=: read -r _ con; do - printf '%s\n' "Found conflict $con" - - # Create the "choices" directory inside of the tarball. - # This directory will store the conflicting file. - mkdir -p "$PWD/$cho_db" - - # Construct the file name of the "db" entry of the - # conflicting file. (pkg_name>usr>bin>ls) - fnr "$con" '/' '>' - - # Move the conflicting file to the choices directory - # and name it according to the format above. - mv -f "$PWD$con" "$PWD/$cho_db/$_pkg$_fnr" 2>/dev/null || { - log "File must be in ${con%/*} and not a symlink to it" - log "This usually occurs when a binary is installed to" - die "/sbin instead of /usr/bin (example)" - } - done < "$_tmp_file" - - log "$_pkg" "Converted all conflicts to choices (kiss a)" - - # Rewrite the package's manifest to update its location - # to its new spot (and name) in the choices directory. - pkg_manifest "$_pkg" "$tar_dir" - - elif [ -s "$_tmp_file" ]; then - log "Package '$_pkg' conflicts with another package" "" "!>" - log "Run 'KISS_CHOICE=1 kiss i $_pkg' to add conflicts" "" "!>" - die "as alternatives." "" "!>" - fi -} - -pkg_swap() { - # Swap between package alternatives. - [ -d "$sys_db/$1" ] || die "'$1' not found" - - fnr "$1$2" '/' '>' - - [ -f "$sys_ch/$_fnr" ] || [ -h "$sys_ch/$_fnr" ] || - die "Alternative '$1 ${2:-null}' doesn't exist" - - if [ -f "$KISS_ROOT$2" ]; then - pkg_owner "/${2#/}" || - die "File '$2' exists on filesystem but isn't owned" - - log "Swapping '$2' from '$_owns' to '$1'" - - # Convert the current owner to an alternative and rewrite its manifest - # file to reflect this. - cp -Pf "$KISS_ROOT$2" "$sys_ch/$_owns>${_fnr#*>}" - pkg_manifest_replace "$_owns" "$2" "/$cho_db/$_owns>${_fnr#*>}" - fi - - # Convert the desired alternative to a real file and rewrite the manifest - # file to reflect this. The reverse of above. - mv -f "$sys_ch/$_fnr" "$KISS_ROOT/$2" - pkg_manifest_replace "$1" "/$cho_db/$_fnr" "$2" -} - -file_rwx() { - # Convert the output of 'ls' (rwxrwx---) to octal. This is simply - # a 1-9 loop with the second digit being the value of the field. - # - # NOTE: This drops setgid/setuid permissions and does not include - # them in the conversion. This is intentional. - rwx=$(ls -ld "$1") oct='' o=0 - - for c in 14 22 31 44 52 61 74 82 91; do - rwx=${rwx#?} - - case $rwx in - [rwx]*): "$((o+=${c#?}))" ;; - [st]*): "$((o+=1))" ;; - [ST]*) ;; - esac - - case $((${c%?} % 3)) in 0) - oct=$oct$o o=0 - esac - done -} - -pkg_install_files() { - # Copy files and create directories (preserving permissions). - # The 'test $1' will run with '-z' for overwrite and '-e' for verify. - while { read -r file && _file=$KISS_ROOT$file; } do case $file in - */) - # Skip directories if they already exist in the file system. - # (Think /usr/bin, /usr/lib, etc). - [ -d "$_file" ] || { - file_rwx "$2/${file#/}" - mkdir -m "$oct" "$_file" - } - ;; - - *) - # Skip directories and files which exist in verify mode. - [ -d "$_file" ] || ! test "$1" "$_file" || - continue - - case $file in /etc/*[!/]) - # Handle /etc/ files in a special way (via a 3-way checksum) to - # determine how these files should be installed. Do we overwrite - # the existing file? Do we install it as $file.new to avoid - # deleting user configuration? etc. - # - # This is more or less similar to Arch Linux's Pacman with the - # user manually handling the .new files when and if they appear. - pkg_etc || continue - esac - - if [ -h "$_file" ]; then - # Copy the file to the destination directory overwriting - # any existing file. - cp -fP "$2$file" "${_file%/*}/." - - else - # Construct a temporary filename which is a) unique and - # b) identifiable as related to the package manager. - __tmp=${_file%/*}/__kiss-tmp-$_pkg-${file##*/}-$KISS_PID - - # Copy the file to the destination directory with the - # temporary name created above. - cp -fP "$2$file" "$__tmp" && - - # Atomically move the temporary file to its final - # destination. The running processes will either get - # the old file or the new one. - mv -f "$__tmp" "$_file" - fi - esac || return 1; done -} - -pkg_remove_files() { - # Remove a file list from the system. This function runs during package - # installation and package removal. Combining the removals in these two - # functions allows us to stop duplicating code. - while read -r file; do - case $file in /etc/?*[!/]) - sh256 "$KISS_ROOT/$file" >/dev/null - - read -r sum_pkg <&3 ||: - - equ "$hash" "$sum_pkg" || { - printf 'Skipping %s (modified)\n' "$file" - continue - } - esac - - _file=${KISS_ROOT:+"$KISS_ROOT/"}${file%%/} - - # Queue all directory symlinks for later removal. - if [ -h "$_file" ] && [ -d "$_file" ]; then - case $file in /*/*/) - set -- "$@" "$_file" - esac - - # Remove empty directories. - elif [ -d "$_file" ]; then - rmdir "$_file" 2>/dev/null || : - - # Remove everything else. - else - rm -f "$_file" - fi - done - - # Remove all broken directory symlinks. - for sym do - [ -e "$sym" ] || rm -f "$sym" - done -} - -pkg_etc() { - sh256 "$tar_dir/$_pkg$file" "$KISS_ROOT$file" >/dev/null - - sum_new=${hash%%"$newline"*} - sum_sys=${hash#*"$newline"} - - read -r sum_old <&3 2>/dev/null ||: - - # Compare the three checksums to determine what to do. - case ${sum_old:-null}${sum_sys:-null}${sum_new} in - # old = Y, sys = X, new = Y - "${sum_new}${sum_sys}${sum_old}") - return 1 - ;; - - # old = X, sys = X, new = X - # old = X, sys = Y, new = Y - # old = X, sys = X, new = Y - "${sum_old}${sum_old}${sum_old}"|\ - "${sum_old:-null}${sum_sys}${sum_sys}"|\ - "${sum_sys}${sum_old}"*) - - ;; - - # All other cases. - *) - war "$_pkg" "saving $file as $file.new" - _file=$_file.new - ;; - esac -} - -pkg_removable() { - # Check if a package is removable and die if it is not. - # A package is removable when it has no dependents. - log "$1" "Checking if package removable" - - cd "$sys_db" - set +f - - ! grep -lFx -- "$1" */depends || - die "$1" "Not removable, has dependents" - - set -f - -} - -pkg_remove() { - # Remove a package and all of its files. The '/etc' directory is handled - # differently and configuration files are *not* overwritten. - [ -d "$sys_db/$1" ] || die "'$1' not installed" - - # Intended behavior. - # shellcheck disable=2030,2031 - equ "$KISS_FORCE" 1 || pkg_removable "$1" - - # Block being able to abort the script with 'Ctrl+C' during removal. - # Removes all risk of the user aborting a package removal leaving an - # incomplete package installed. - trap '' INT - - # arg1: pre-remove - # arg2: package name - # arg3: path to installed database - run_hook_pkg pre-remove "$1" - run_hook pre-remove "$1" "$sys_db/$1" - - # Make a backup of any etcsums if they exist. - tmp_file_copy "$1" etcsums-copy "$sys_db/$1/etcsums" - - log "$1" "Removing package" - pkg_remove_files < "$sys_db/$1/manifest" 3< "$_tmp_file" - - # Reset 'trap' to its original value. Removal is done so - # we no longer need to block 'Ctrl+C'. - trap pkg_clean EXIT INT - - log "$1" "Removed successfully" -} - -pkg_installable() { - # Check if a package is removable and die if it is not. - # A package is removable when all of its dependencies - # are satisfied. - log "$1" "Checking if package installable" - - # False positive. - # shellcheck disable=2094 - ! [ -f "$2" ] || - - while read -r dep dep_type || ok "$dep"; do - case "$dep $dep_type" in [!\#]?*\ ) - ! [ -d "$sys_db/$dep" ] || continue - - printf '%s %s\n' "$dep" "$dep_type" - - set -- "$1" "$2" "$(($3 + 1))" - esac - done < "$2" - - case ${3:-0} in [1-9]*) - die "$1" "Package not installable, missing $3 package(s)" - esac -} - -pkg_install() { - # Install a built package tarball. - # - # Package installation works similarly to the method used by Slackware in - # some of their tooling. It's not the obvious solution to the problem, - # however it is the best solution at this given time. - # - # When an installation is an update to an existing package, instead of - # removing the old version first we do something different. - # - # The new version is installed overwriting any files which it has in - # common with the previously installed version of the package. - # - # A "diff" is then generated between the old and new versions and contains - # any files existing in the old version but not the new version. - # - # The package manager then goes and removes these files which leaves us - # with the new package version in the file system and all traces of the - # old version gone. - # - # For good measure the package manager will then install the new package - # an additional time. This is to ensure that the above diff didn't contain - # anything incorrect. - # - # This is the better method as it is "seamless". An update to busybox won't - # create a window in which there is no access to all of its utilities. - - # Install can also take the full path to a tarball. We don't need to check - # the repository if this is the case. - case $1 in - *.tar.*) - [ -f "$1" ] || die "File '$1' does not exist" - - tar_file=$1 - _pkg=${1##*/} - _pkg=${_pkg%@*} - ;; - - *) - pkg_cache "$1" || die "$1" "Not yet built" - _pkg=$1 - ;; - esac - - mkcd "$tar_dir/$_pkg" - - # The tarball is extracted to a temporary directory where its contents are - # then "installed" to the filesystem. Running this step as soon as possible - # allows us to also check the validity of the tarball and bail out early - # if needed. - decompress "$tar_file" | tar xf - - - # Naively assume that the existence of a manifest file is all that - # determines a valid KISS package from an invalid one. This should be a - # fine assumption to make in 99.99% of cases. - [ -f "$PWD/$pkg_db/$_pkg/manifest" ] || die "Not a valid KISS package" - - # Intended behavior. - # shellcheck disable=2030,2031 - equ "$KISS_FORCE" 1 || { - pkg_manifest_validate "$_pkg" - pkg_installable "$_pkg" "$PWD/$pkg_db/$_pkg/depends" - } - - # arg1: pre-install - # arg2: package name - # arg3: path to extracted package - run_hook pre-install "$_pkg" "$PWD" - - pkg_conflicts - - log "$_pkg" "Installing package (${tar_file##*/})" - - # If the package is already installed (and this is an upgrade) make a - # backup of the manifest and etcsums files. - tmp_file_copy "$_pkg" manifest-copy "$sys_db/$_pkg/manifest" - tmp_file_copy "$_pkg" etcsums-copy "$sys_db/$_pkg/etcsums" - tmp_file "$_pkg" manifest-diff - - tar_man=$PWD/$pkg_db/$_pkg/manifest - - # Generate a list of files which exist in the currently installed manifest - # but not in the newer (to be installed) manifest. - grep -vFxf "$tar_man" "$_tmp_file_pre_pre" > "$_tmp_file" 2>/dev/null ||: - - # Reverse the manifest file so that we start shallow and go deeper as we - # iterate over each item. This is needed so that directories are created - # going down the tree. - tmp_file "$_pkg" manifest-reverse - sort "$tar_man" > "$_tmp_file" - - # Block being able to abort the script with Ctrl+C during installation. - # Removes all risk of the user aborting a package installation leaving - # an incomplete package installed. - trap '' INT - - if - # Install the package's files by iterating over its manifest. - pkg_install_files -z "$PWD" < "$_tmp_file" 3< "$_tmp_file_pre_pre" && - - # This is the aforementioned step removing any files from the old - # version of the package if the installation is an update. Each file - # type has to be specially handled to ensure no system breakage occurs. - pkg_remove_files < "$_tmp_file_pre" 3< "$_tmp_file_pre_pre" && - - # Install the package's files a second time to fix any mess caused by - # the above removal of the previous version of the package. - pkg_install_files -e "$PWD" < "$_tmp_file" 3< "$_tmp_file_pre_pre" - - then - # Reset 'trap' to its original value. Installation is done so we no longer - # need to block 'Ctrl+C'. - trap pkg_clean EXIT INT - - # arg1: post-install - # arg2: package name - # arg3: path to installed package database - run_hook_pkg post-install "$_pkg" - run_hook post-install "$_pkg" "$sys_db/$_pkg" - - log "$_pkg" "Installed successfully" - - else - pkg_clean - log "$_pkg" "Failed to install package." ERROR - die "$_pkg" "Filesystem now dirty, manual repair needed." - fi -} - -pkg_update() { - # Check all installed packages for updates. So long as the installed - # version and the version in the repositories differ, it's considered - # an update. - log "Updating repositories" - - # Create a list of all repositories. - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - { IFS=:; set -- $KISS_PATH; unset IFS; } - - # Update each repository in '$KISS_PATH'. - for repo do - ok "$repo" || continue - - [ -d "$repo" ] || { - log "$repo" " " - printf 'Skipping repository, not a directory\n' - continue - } - - cd "$repo" - - git remote >/dev/null 2>&1 || { - log "$repo" " " - printf 'Skipping git pull, not a repository\n' - continue - } - - # Go to the repository's root directory. - git_root=$(git rev-parse --show-toplevel) - cd "${git_root:?"failed to find git root for '$PWD'"}" - - # Go to the real root directory if this is a submodule. - git_root=$(git rev-parse --show-superproject-working-tree) - cd "${git_root:-"$PWD"}" - - contains "$repos" "$PWD" || { - repos="$repos $PWD " - - # arg1: pre-update - # env: PWD is path to repository - run_hook pre-update - - # Display whether or not signature verification is enabled. - _sig=$(git config --get --default false merge.verifySignatures) - - log "$PWD" "[verify: $_sig]" - - if ! am_owner "$PWD"; then - log "$PWD" "Need '$user' to update" - as_user git pull - as_user git submodule update --remote --init -f - else - git pull - git submodule update --remote --init -f - fi - - # arg1: post-update - # env: PWD is path to repository - run_hook post-update - } - done - - log "Checking for new package versions" - - set +f -- - - for pkg in "$sys_db/"*; do - pkg_find_version "${pkg##*/}" "" "" "$sys_db" - pkg_find_version "${pkg##*/}" - - # Detect repository orphans (installed packages with no - # associated repository). - case $repo_dir in */var/db/kiss/installed/*) - _repo_orp="$_repo_orp$newline${pkg##*/}" - esac - - # Compare installed packages to repository packages. - equ "$ver_pre-$rel_pre" "$repo_ver-$repo_rel" || { - printf '%s\n' "${pkg##*/} $ver_pre-$rel_pre ==> $repo_ver-$repo_rel" - set -- "$@" "${pkg##*/}" - } - done - - log "Checking for orphaned repository packages" - case $_repo_orp in *?*) - war "Packages without repository$_repo_orp" - esac - - set -f - pkg_update=1 - - case " $* " in - *" kiss "*) - log "Detected package manager update" - log "The package manager will be updated first" - - prompt - pkg_build_all kiss - - log "Updated the package manager" - log "Re-run 'kiss update' to update your system" - ;; - - " ") - log "Everything is up to date" - ;; - - *) - log "Packages to update: $*" - - prompt - pkg_order "$@" - - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - pkg_build_all $order - - log "Updated all packages" - ;; - esac -} - -pkg_clean() { - # Clean up on exit or error. This removes everything related to the build. - # If _KISS_LVL is (1) we are the top-level process - the entire cache will - # be removed. If _KISS_LVL is any other value, remove only the tar directory. - case ${KISS_DEBUG:-0}-${_KISS_LVL:-1} in - 0-1) rm -rf "$proc" ;; - 0-*) rm -rf "$tar_dir" - esac -} - -args() { - # Parse script arguments manually. This is rather easy to do in our case - # since the first argument is always an "action" and the arguments that - # follow are all package names. - action=$1 - shift "$(($# != 0))" - - # Ensure that arguments do not contain invalid characters. Wildcards can - # not be used here as they would conflict with kiss extensions. - case $action in - a|alternatives) - case $1 in *\**|*\!*|*\[*|*\ *|*\]*|*/*|*"$newline"*) - die "Invalid argument: '!*[ ]/\\n' ($1)" - esac - ;; - - b|build|c|checksum|d|download|i|install|l|list|r|remove) - for _arg do case ${action%%"${action#?}"}-$_arg in - i-*\!*|i-*\**|i-*\[*|i-*\ *|i-*\]*|i-*"$newline"*) - die "Invalid argument: '!*[ ]\\n' ('$_arg')" - ;; - - [!i]-*\!*|[!i]-*\**|[!i]-*\[*|[!i]-*\ *|\ - [!i]-*\]*|[!i]-*/*|[!i]-*"$newline"*) - die "Invalid argument: '!*[ ]/\\n' ('$_arg')" - ;; - esac done - - # When no arguments are given on the command-line, use the basename - # of the current directory as the package name and add the parent - # directory to the running process' KISS_PATH. - case ${action%%"${action#?}"}-$# in [!l]-0) - export KISS_PATH=${PWD%/*}:$KISS_PATH - set -- "${PWD##*/}" - esac - - # Order the argument list based on dependence. - pkg_order "$@" - - # Intentional, globbing disabled. - # shellcheck disable=2046,2086 - set -- $order - ;; - esac - - # Need to increment _KISS_LVL here to ensure we don't wipe the cache - # early by non-asroot invocations. - export _KISS_LVL=$((_KISS_LVL + 1)) - - # Rerun the script as root with a fixed environment if needed. We sadly - # can't run singular functions as root so this is needed. - # - # Intended behavior. - # shellcheck disable=2030,2031 - case $action in a|alternatives|i|install|r|remove) - if ok "$1" && ! am_owner "$KISS_ROOT/"; then - as_user env \ - LOGNAME="$user" \ - HOME="$HOME" \ - XDG_CACHE_HOME="$XDG_CACHE_HOME" \ - KISS_COMPRESS="$KISS_COMPRESS" \ - KISS_PATH="$KISS_PATH" \ - KISS_FORCE="$KISS_FORCE" \ - KISS_ROOT="$KISS_ROOT" \ - KISS_CHOICE="$KISS_CHOICE" \ - KISS_COLOR="$KISS_COLOR" \ - KISS_TMPDIR="$KISS_TMPDIR" \ - KISS_PID="$KISS_PID" \ - _KISS_LVL="$_KISS_LVL" \ - "$0" "$action" "$@" - return - fi - esac - - # Actions can be abbreviated to their first letter. This saves keystrokes - # once you memorize the commands. - case $action in - a|alternatives) - if equ "$1" -; then - while read -r pkg path; do - pkg_swap "$pkg" "$path" - done - - elif ok "$1"; then - pkg_swap "$@" - - else - # Go over each alternative and format the file - # name for listing. (pkg_name>usr>bin>ls) - set +f; for pkg in "$sys_ch/"*; do - fnr "${pkg##*/}" '>' '/' - printf '%s %s\n' "${_fnr%%/*}" "/${_fnr#*/}" - done - fi - ;; - - c|checksum) - for pkg do - pkg_source "$pkg" c - - [ -f "$repo_dir/sources" ] || continue - - pkg_checksums - - if ok "$hash"; then - printf '%s\n' "$hash" > "$repo_dir/checksums" - log "$pkg" "Generated checksums" - - else - log "$pkg" "No sources needing checksums" - fi - done - ;; - - i|install) for pkg do pkg_install "$pkg"; done ;; - b|build) pkg_build_all "${@:?No packages installed}" ;; - d|download) for pkg do pkg_source "$pkg"; done ;; - l|list) pkg_list_version "$@" ;; - r|remove) for pkg in $redro; do pkg_remove "$pkg"; done ;; - s|search) for pkg do pkg_find "$pkg" all; done ;; - u|update) pkg_update ;; - v|version) printf '5.5.14\n' ;; - - '') - log 'kiss [a|b|c|d|i|l|r|s|u|v] [pkg]...' - log 'alternatives List and swap to alternatives' - log 'build Build a package' - log 'checksum Generate checksums' - log 'download Pre-download all sources' - log 'install Install a package' - log 'list List installed packages' - log 'remove Remove a package' - log 'search Search for a package' - log 'update Update the system' - log 'version Package manager version' - - printf '\nRun "kiss help-ext" to see all actions\n' - ;; - - help-ext) - log 'Installed extensions (kiss-* in PATH)' - - # Intentional, globbing disabled. - # shellcheck disable=2046,2030,2031 - set -- $(pkg_find kiss-\* all -x "$PATH") - - # To align descriptions figure out which extension has the longest - # name by doing a simple 'name > max ? name : max' on the basename - # of the path with 'kiss-' stripped as well. - # - # This also removes any duplicates found in '$PATH', picking the - # first match. - for path do p=${path#*/kiss-} - case " $seen " in - *" $p "*) shift ;; - *) seen=" $seen $p " max=$((${#p} > max ? ${#p}+1 : max)) - esac - done - - IFS=\#$IFS - - # Print each extension, grab its description from the second line - # in the file and align the output based on the above max. - for path do - # Open the extension as a file descriptor. - exec 3< "$path" - - # Grab the second line in the extension. - { read -r _ && read -r _ cmt; } <&3 - - printf "%b->%b %-${max}s %s\\n" \ - "$c1" "$c3" "${path#*/kiss-}" "$cmt" - done >&2 - ;; - - *) - pkg_find "kiss-$action*" "" -x "$PATH" - "$repo_dir" "$@" - ;; - esac -} - -create_tmp_dirs() { - # Root directory. - KISS_ROOT=${KISS_ROOT%"${KISS_ROOT##*[!/]}"} - - # This allows for automatic setup of a KISS chroot and will - # do nothing on a normal system. - mkdir -p "$KISS_ROOT/" 2>/dev/null || : - - # System package database. - sys_db=$KISS_ROOT/${pkg_db:=var/db/kiss/installed} - sys_ch=$KISS_ROOT/${cho_db:=var/db/kiss/choices} - - # Top-level cache directory. - cac_dir=${XDG_CACHE_HOME:-"${HOME%"${HOME##*[!/]}"}/.cache"} - cac_dir=${cac_dir%"${cac_dir##*[!/]}"}/kiss - - # Persistent cache directories. - src_dir=$cac_dir/sources - log_dir=$cac_dir/logs/${time%-*} - bin_dir=$cac_dir/bin - - # Top-level Temporary cache directory. - proc=${KISS_TMPDIR:="$cac_dir/proc"} - proc=${proc%"${proc##*[!/]}"}/$KISS_PID - - # Temporary cache directories. - mak_dir=$proc/build - pkg_dir=$proc/pkg - tar_dir=$proc/extract - tmp_dir=$proc/tmp - - mkdir -p "$src_dir" "$log_dir" "$bin_dir" \ - "$mak_dir" "$pkg_dir" "$tar_dir" "$tmp_dir" -} - -main() { - # Globally disable globbing and enable exit-on-error. - set -ef - - # Color can be disabled via the environment variable KISS_COLOR. Colors are - # also automatically disabled if output is being used in a pipe/redirection. - equ "$KISS_COLOR" 0 || ! [ -t 2 ] || - c1='\033[1;33m' c2='\033[1;34m' c3='\033[m' - - # Store the original working directory to ensure that relative paths - # passed by the user on the command-line properly resolve to locations - # in the filesystem. - ppwd=$PWD - - # Never know when you're gonna need one of these. - newline=" -" - - # Defaults for environment variables. - : "${KISS_COMPRESS:=gz}" - : "${KISS_PID:=$$}" - : "${LOGNAME:?POSIX requires LOGNAME be set}" - - # Figure out which 'sudo' command to use based on the user's choice or what - # is available on the system. - cmd_su=${KISS_SU:-su} - - # Figure out which utility is available to dump elf information. - cmd_elf=${KISS_ELF:-"$( - command -v readelf || - command -v eu-readelf || - command -v llvm-readelf - )"} || cmd_elf=ldd - - # Figure out which sha256 utility is available. - cmd_sha=$( - command -v openssl || - command -v sha256sum || - command -v sha256 || - command -v shasum || - command -v digest - ) || die "No sha256 utility found" - - # Store the date and time of script invocation to be used as the name of - # the log files the package manager creates uring builds. - time=$(date +%Y-%m-%d-%H:%M) - - create_tmp_dirs - - # Catch errors and ensure that build files and directories are cleaned - # up before we die. This occurs on 'Ctrl+C' as well as success and error. - trap pkg_clean EXIT INT - - args "$@" -} - -main "$@" diff --git a/kiss/.local/bin/kiss/kiss-chroot b/kiss/.local/bin/kiss/kiss-chroot deleted file mode 100755 index efc21ed77..000000000 --- a/kiss/.local/bin/kiss/kiss-chroot +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -ef -# Enter a kiss chroot - -log() { - printf '\033[32m->\033[m %s.\n' "$*" -} - -die() { - log "$*" >&2 - exit 1 -} - -run() { - printf '%s\n' "$*" - "$@" || return "${_ret:=0}" -} - -clean() { - log Unmounting host filesystems; { - run umount "$1/dev/shm" - run umount "$1/dev/pts" - run umount "$1/dev" - run umount "$1/proc" - run umount "$1/run" - run umount "$1/sys/firmware/efi/efivars" 2>/dev/null - run umount "$1/sys" - run umount "$1/tmp" - } - - log Cleaning leftover host files; { - run rm -f "$1/etc/resolv.conf" - } -} - -mounted() { - # This is a pure shell mountpoint implementation. We're dealing - # with basic (and fixed/known) input so this doesn't need to - # handle more complex cases. - [ -e "$1" ] || return 1 - [ -e /proc/mounts ] || return 1 - - while read -r _ target _; do - [ "$target" = "$1" ] && return 0 - done < /proc/mounts - - return 1 -} - -mmount() { - dest=$1 - shift - mounted "$dest" || run mount "$@" "$dest" -} - -main() { - # Ensure input does not end in '/'. - set -- "${1%"${1##*[!/]}"}" - - [ "$1" ] || die Need a path to the chroot - [ -d "$1" ] || die Given path does not exist - [ "$(id -u)" = 0 ] || die Script needs to be run as root - - trap 'clean "${1%"${1##*[!/]}"}"' EXIT INT - - log Mounting host filesystems; { - mmount "$1/dev" -o bind /dev - mmount "$1/dev/pts" -o bind /dev/pts - mmount "$1/dev/shm" -t tmpfs shmfs - mmount "$1/proc" -t proc proc - mmount "$1/run" -t tmpfs tmpfs - mmount "$1/sys" -t sysfs sys - mmount "$1/sys/firmware/efi/efivars" -t efivarfs efivarfs 2>/dev/null - mmount "$1/tmp" -o mode=1777,nosuid,nodev -t tmpfs tmpfs - } - - log Copying /etc/resolv.conf from host; { - run cp -f /etc/resolv.conf "$1/etc" - } - - log Entering chroot; { - _ret=1 - - run chroot "$1" /usr/bin/env -i \ - HOME=/root \ - TERM="$TERM" \ - SHELL=/bin/sh \ - USER=root \ - LOGNAME=root \ - CFLAGS="${CFLAGS:--march=x86-64 -mtune=generic -pipe -O2}" \ - CXXFLAGS="${CXXFLAGS:--march=x86-64 -mtune=generic -pipe -O2}" \ - MAKEFLAGS="${MAKEFLAGS:--j$(nproc 2>/dev/null || echo 1)}" \ - /bin/sh -l - } -} - -main "$1" diff --git a/kiss/.local/bin/kiss/kiss-depends b/kiss/.local/bin/kiss/kiss-depends deleted file mode 100755 index b2210cc02..000000000 --- a/kiss/.local/bin/kiss/kiss-depends +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -ef -# Display a package's dependencies - -pkg=${1:-"${PWD##*/}"} - -kiss list "$pkg" >/dev/null || { - printf 'usage: kiss-depends [pkg]\n' >&2 - exit 1 -} - -while read -r dep mak || [ "$dep" ]; do - printf '%s%s\n' "$dep" "${mak:+ "$mak"}" -done 2>/dev/null < "$KISS_ROOT/var/db/kiss/installed/$pkg/depends" diff --git a/kiss/.local/bin/kiss/kiss-export b/kiss/.local/bin/kiss/kiss-export deleted file mode 100755 index f36fd293b..000000000 --- a/kiss/.local/bin/kiss/kiss-export +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -ef -# Turn an installed package into a KISS tarball - -db=$KISS_ROOT/var/db/kiss/installed -pkg=${1:-"${PWD##*/}"} - -kiss list "$pkg" >/dev/null || { - printf 'usage: kiss-export [pkg]\n' - exit 1 -} - -read -r ver rel 2>/dev/null < "$db/$1/version" - -set -- - -while read -r file; do - [ -d "$KISS_ROOT/$file" ] || set -- "$@" ".$file" -done < "$db/$pkg/manifest" - -cd "$KISS_ROOT/" - -dest="$OLDPWD/$pkg@$ver-$rel.tar.${KISS_COMPRESS:-gz}" - -tar cf - "$@" | case ${KISS_COMPRESS:-gz} in - bz2) bzip2 -z ;; - gz) gzip -6 ;; - lzma) lzma -z ;; - lz) lzip -z ;; - xz) xz -zT 0 ;; - zst) zstd -z ;; -esac > "$dest" - -printf 'created %s\n' "$dest" diff --git a/kiss/.local/bin/kiss/kiss-fork b/kiss/.local/bin/kiss/kiss-fork deleted file mode 100755 index a8ed575cf..000000000 --- a/kiss/.local/bin/kiss/kiss-fork +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -ef -# Copy a package's repository files into the current directory - -pkg=${1:-"${PWD##*/}"} -num=$(printf %d "${2:-0}") - -dir=$(kiss search "$pkg" 2>/dev/null) || { - printf 'usage: [kiss-fork [pkg]] [index]\n' - exit 1 -} - -# Globbing is disabled and word splitting is intentional. -# shellcheck disable=2086 -set -- $dir - -[ "$num" -ge "$#" ] && { - printf 'index exceeds maximum\n' - exit 1 -} - -shift "$num" - -[ "$1" ] || [ -d "$1" ] || { - printf 'failed to locate package\n' - exit 1 -} - -printf 'found package in %s\n' "$1" -cp -Lrf "$1" . -printf 'forked package to %s\n' "$PWD/$pkg" diff --git a/kiss/.local/bin/kiss/kiss-help b/kiss/.local/bin/kiss/kiss-help deleted file mode 100755 index bdc7de6cb..000000000 --- a/kiss/.local/bin/kiss/kiss-help +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -ef -# Read KISS documentation - -cd "$KISS_ROOT/usr/share/doc/kiss" 2>/dev/null || { - printf 'Documentation is missing from /usr/share/doc/kiss\n' - exit 1 -} - -! [ -f "${1:-.}/index.txt" ] || file=./${1:-.}/index.txt -! [ -f "${1:-.}.txt" ] || file=./${1:-.}.txt -! [ -f "${1:-:}" ] || file=./${1:-.} - -# Fallback to search (allows 'kiss help firefox' to work). -# False positive, intended behavior. -# shellcheck disable=2046 -[ "$file" ] || { - set -f - set +f -- $(find . -name "${1##*/}.txt") - file=$1 -} - -: "${file:=404.txt}" - -cat </dev/null - -# Disable this warning as globbing is disabled and word splitting -# is intentional. This grabs the location of the package's files. -# shellcheck disable=2046 -{ - # Generate a list of repositories in which the package - # exists. Then 'cd' to the first found directory to do a - # comparison. - set -- $(kiss search "${PWD##*/}"); cd "$1" - - # Error if the package exists nowhere but the current - # directory and this script would create a broken symlink. - [ -z "$2" ] && [ "$PWD" = "$oPWD" ] && { - printf 'error: cannot symlink file to itself\n' - exit 1 - } - - # If the first repository in '$KISS_PATH' is the current - # directory, use the second repository in the list. - [ "$PWD" = "$oPWD" ] && shift - - # Finally, make the link to the file in whatever repository - # it was found in. - ln -sf "$1/$file" "$oPWD/$file" -} - -printf 'linked %s to %s\n' "$file" "$1" diff --git a/kiss/.local/bin/kiss/kiss-maintainer b/kiss/.local/bin/kiss/kiss-maintainer deleted file mode 100755 index 6dd7fc387..000000000 --- a/kiss/.local/bin/kiss/kiss-maintainer +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -ef -# Find the maintainer of a package - -# Use the current directory as the package name if no package is given. -[ "$1" ] || { - export KISS_PATH=${PWD%/*}:$KISS_PATH - set -- "${PWD##*/}" -} - -kiss search "$@" | uniq -u | while read -r repo; do cd "$repo" - m=$(git log -1 version 2>/dev/null) ||: - m=${m##*Author: } - m=${m%%>*} - - [ "$m" ] || continue - - printf '=> %s\n%s>\n' "$PWD" "$m" -done diff --git a/kiss/.local/bin/kiss/kiss-manifest b/kiss/.local/bin/kiss/kiss-manifest deleted file mode 100755 index b457921c7..000000000 --- a/kiss/.local/bin/kiss/kiss-manifest +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -ef -# Display all files owned by a package - -pkg=${1:-"${PWD##*/}"} - -kiss list "$pkg" >/dev/null || { - printf 'usage: kiss-manifest [pkg]\n' >&2 - exit 1 -} - -cat "$KISS_ROOT/var/db/kiss/installed/$pkg/manifest" 2>/dev/null diff --git a/kiss/.local/bin/kiss/kiss-new b/kiss/.local/bin/kiss/kiss-new deleted file mode 100755 index d2b50bed9..000000000 --- a/kiss/.local/bin/kiss/kiss-new +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -ef -# Create a boilerplate package - -die() { - printf '%s\n' "$*" - exit 1 -} - -log() { - printf '=> %s.\n' "$1" -} - -[ "$1" ] || die "usage: kiss-new [name] [version] [source]" -[ -d "$1" ] && die "error: Package $1 already exists" -mkdir -p "$1" || die "error: Couldn't create directory in $PWD" -cd "$1" || die "error: Couldn't enter directory $1/" - -log "Creating build file"; { - printf '#!/bin/sh -e\n' > build - chmod +x build -} - -log "Creating version file with '${2%% *} 1'"; { - printf '%s\n' "${2%% *} 1" > version -} - -log "Creating sources file with '$3'"; { - printf '%s\n' "$3" > sources -} - -log "Package $1 created in $PWD" diff --git a/kiss/.local/bin/kiss/kiss-orphans b/kiss/.local/bin/kiss/kiss-orphans deleted file mode 100755 index 296fbd1a5..000000000 --- a/kiss/.local/bin/kiss/kiss-orphans +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -ef -# List orphaned packages - -cd "$KISS_ROOT/var/db/kiss/installed/" - -for pkg in *; do - case $pkg in - # Exemptions for orphans which aren't really - # orphans. Exclude them from the list. - baseinit|baselayout|gcc|e2fsprogs|musl|\ - make|busybox|bzip2|grub|kiss|git) - continue - esac - - grep -q "^$pkg$" ./*/depends || printf '%s\n' "$pkg" -done diff --git a/kiss/.local/bin/kiss/kiss-outdated b/kiss/.local/bin/kiss/kiss-outdated deleted file mode 100755 index af38941ca..000000000 --- a/kiss/.local/bin/kiss/kiss-outdated +++ /dev/null @@ -1,289 +0,0 @@ -#!/bin/sh -ef -# Check repository for outdated packages - -repology_version() { - # Grab the package's version as known by repology.org by downloading the - # svg latest-version badge and extracting the version from the xml. - repology_name "$1" - - r=$(curl -Ss "https://repology.org/badge/latest-versions/$remote.svg") && { - remote_ver=${r%*} - remote_ver=${remote_ver##*>} - } -} - -repology_name() { - # Fix any known naming inconsistences between packages and Repology. - remote=$( - # Strip unrelated suffixes. - remote=${1%%-bin} - remote=${remote%%-git} - - printf %s "$remote" | - - # Remote names are all lowercase. - tr '[:upper:]' '[:lower:]' | - - # Remote always uses -. - tr _ - - ) - - case $remote in - baseinit|baselayout|kiss) - remote=- - ;; - - clang) - remote=llvm - ;; - - dash) - remote=dash-shell - ;; - - dejavu-ttf) - remote=fonts:dejavu - ;; - - dsp) - remote=dsp-audio-processing - ;; - - emacs-nox) - # TODO [community]: Make default emacs no x11? - remote=emacs - ;; - - fd) - remote=fd-find - ;; - - fetsh) - # TODO [community]: Rename package? - remote=fet.sh - ;; - - firefox-esr) - remote=firefox - ;; - - font-awesome-ttf) - remote=fonts:fontawesome - ;; - - gc) - remote=boehm-gc - ;; - - gnugrep) - # shell-check is dumb here so this must be quoted. - remote='grep' - ;; - - gnupg[12]) - # Reported to repology.org. - # https://github.com/repology/repology-rules/issues/285 - remote=gnupg - ;; - - gtk+3) - remote=gtk3+classic - ;; - - gst-*) - remote=gstreamer:${remote##*-} - ;; - - gtar) - remote=tar - ;; - - eiwd) - remote=iwd - ;; - - hack) - # It might be nice to adopt Repology's naming scheme for - # fonts as it also makes them self-documenting and easy - # to search for ('kiss s font:\*). - remote=fonts:hack - ;; - - harfbuzz-icu) - # TODO: Report to repology.org? - # Package split. - remote=harfbuzz - ;; - - libelf) - remote=elfutils - ;; - - liberation-fonts) - remote=fonts:liberation - ;; - - libmupdf | libxaw3d) - # TODO [community]: Rename packages? - remote=${remote##lib} - ;; - - links2) - # TODO [community]: Rename package? - remote=links - ;; - - linux-headers) - remote=linux - ;; - - lux) - remote=lux-brightness-ventto - ;; - - man-pages) - # TODO: Report to repology.org. - # man-pages -> manpages - # man-pages-posix -> man-pages-posix - remote=manpages - ;; - - netsurf-fb) - remote=netsurf - ;; - - openjpeg2) - # TODO [community]: Rename package? - remote=openjpeg - ;; - - osh) - remote=oil-shell - ;; - - pinentry-dmenu) - remote=pinentry-dmenu-cemkeylan - ;; - - pyqt5) - # TODO [community]: Rename package? - remote=python-qt - ;; - - python2) - remote=python - ;; - - qt5*) - remote=qt - ;; - - rage) - remote=rage-encryption-tool - ;; - - sane) - remote=sane-backends - ;; - - spleen-font) - remote=fonts:spleen - ;; - - sshfs) - remote=fusefs:sshfs - ;; - - surf) - remote=surf-browser - ;; - - st) - remote=st-term - ;; - - terminus-font) - remote=fonts:terminus - ;; - - tiv) - remote=tiv-unclassified - ;; - - unifont) - remote=fonts:unifont - ;; - - webkit2gtk) - # TODO [community]: Rename package? - remote=webkitgtk - ;; - - xf86-*) - remote=xdrv:${remote##*-} - ;; - - xmlsec1) - # TODO [community]: Rename package? - remote=xmlsec - ;; - esac -} - -main() { - printf '\n[Checking Repology for outdated packages in %s]\n\n' "${1%%/}" >&2 - - for pkg in */; do - pkg=${pkg%%/} - - read -r ver _ 2>/dev/null < "$pkg/version" || { - printf '%-30s local version not found\n' "$pkg" >&2 - continue - } - - [ "$ver" = git ] && - continue - - repology_version "$pkg" || { - printf '%-30s network error\n' "$pkg" >&2 - continue - } - - case $remote_ver in - *", $ver"* | *"$ver,"* | "$ver") - # Package up-to-date, do nothing. - ;; - - '' | ' ') - printf '\n%s: empty response\n' "$pkg" >&2 - printf 'possible causes:\n' >&2 - printf ' package name differs from repology name,\n' >&2 - printf ' package not tracked by repology,\n' >&2 - printf ' network error\n\n' >&2 - ;; - - '-') - # No version scheme, do nothing. - ;; - - *) - printf '%-30s %s -> %s\n' "$pkg" "$ver" "$remote_ver" - ;; - esac - done -} - -for repo do - [ "$repo" ] || { - printf 'usage: kiss outdated /path/to/repo\n' >&2 - exit 1 - } - - cd "$repo" 2>/dev/null || { - printf 'repository %s is inaccessible\n' "$repo" >&2 - exit 1 - } - - main "$repo" - cd "$OLDPWD" || exit 1 -done diff --git a/kiss/.local/bin/kiss/kiss-owns b/kiss/.local/bin/kiss/kiss-owns deleted file mode 100755 index 8b698df65..000000000 --- a/kiss/.local/bin/kiss/kiss-owns +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -ef -# Check which package owns a file - -# Follow symlinks to any paths. -case $1 in - /*) - cd -P "$KISS_ROOT${1%/*}" - ;; - - */*) - cd -P "${1%/*}" - ;; - - *) - cd -P . - ;; -esac - -[ -f "$PWD/${1##*/}" ] || { - printf 'usage: kiss-owns [/path/to/file]\n' >&2 - exit 1 -} - -# Print the full path to the manifest file which contains -# the match to our search. -pkg_owns=$(grep -lFx \ - "$PWD/${1##*/}" \ - "$KISS_ROOT/var/db/kiss/installed/"*/manifest) - - -# Extract the package name from the path above. -pkg_owns=${pkg_owns%/*} -pkg_owns=${pkg_owns##*/} - -printf '%s\n' "$pkg_owns" diff --git a/kiss/.local/bin/kiss/kiss-preferred b/kiss/.local/bin/kiss/kiss-preferred deleted file mode 100755 index 98ddb701d..000000000 --- a/kiss/.local/bin/kiss/kiss-preferred +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -ef -# Lists the owners of all files with conflicts - -kiss a | while read -r _ path; do - if owner=$(kiss owns "$path" 2>/dev/null) && [ "$owner" ]; then - printf '%s %s\n' "$owner" "$path" - - else - printf 'warning: %s has no owner\n' "$path" >&2 - fi -done - diff --git a/kiss/.local/bin/kiss/kiss-repo-orphans b/kiss/.local/bin/kiss/kiss-repo-orphans deleted file mode 100755 index 7b6b768c2..000000000 --- a/kiss/.local/bin/kiss/kiss-repo-orphans +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -ef -# List packages which aren't present in any repository. - -cd "$KISS_ROOT/var/db/kiss/installed" - -kiss s ./* | while IFS=/ read -r _ path; do - pkg=${path##*/} - - case $seen in *" $pkg "*) - continue - esac - - case $path in "$PWD/$pkg") - printf '%s\n' "$pkg" - esac - - seen="$seen $pkg " -done - - diff --git a/kiss/.local/bin/kiss/kiss-revdepends b/kiss/.local/bin/kiss/kiss-revdepends deleted file mode 100755 index 53006a28d..000000000 --- a/kiss/.local/bin/kiss/kiss-revdepends +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -ef -# Display packages which depend on package - -[ "$1" ] || set -- "${PWD##*/}" - -cd "$KISS_ROOT/var/db/kiss/installed" - -grep "^$1" -- */depends diff --git a/kiss/.local/bin/kiss/kiss-size b/kiss/.local/bin/kiss/kiss-size deleted file mode 100755 index b98d80595..000000000 --- a/kiss/.local/bin/kiss/kiss-size +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -ef -# Show the size on disk for a package - -get_size() { - # Naive function to convert bytes to human readable - # sizes (MB, KB, etc). This is probably wrong in places - # though we can fix this over time. It's a start. - case ${#1} in - [0-3]) hum=$(($1))KB ;; - [4-6]) hum=$(($1 / 1024))MB ;; - [7-9]) hum=$(($1 / 1024 / 1024))GB ;; - *) hum=$(($1)) ;; - esac - - printf '%s\t%s\n' "$hum" "$2" -} - -# Use the current directory as the package name if no package is given. -[ "$1" ] || set -- "${PWD##*/}" - -# Ignore shellcheck as we want the warning's behavior. -# shellcheck disable=2015 -kiss list "${1:-null}" >/dev/null || { - printf 'usage: kiss-size [pkg]\n' - exit 1 -} - -# Filter directories from manifest and leave only files. -# Directories in the manifest end in a trailing '/'. -files=$(sed -e "s|^|$KISS_ROOT|" -e 's|.*/$||' \ - "$KISS_ROOT/var/db/kiss/installed/$1/manifest") - -# Send the file list to 'du'. -# This unquoted variable is safe as word splitting is intended -# and globbing is globally disabled in this script. -# shellcheck disable=2086 -du -sk -- $files 2>/dev/null | - -# Iterate over each line and convert the byte output to human -# readable (MB, KB, GB, etc). -while read -r size file || { - get_size "$tot" total >&2 - break -} do - get_size "$size" "$file" - tot=$((tot + size)) -done diff --git a/package-list/.config/package-list b/package-list/.config/package-list index 377516d59..a4dc302d3 100644 --- a/package-list/.config/package-list +++ b/package-list/.config/package-list @@ -28,6 +28,7 @@ gnome-icon-theme-symbolic gotop humanity-icon-theme husky-hooks +husky-packagemanager i3-cheat i3-gaps i3-session @@ -116,4 +117,3 @@ yaru-session yaru-sound-theme yaru-unity-theme yaru-xfwm4-theme -yay diff --git a/qtile/.config/qtile/config.py b/qtile/.config/qtile/config.py new file mode 100644 index 000000000..1c54be118 --- /dev/null +++ b/qtile/.config/qtile/config.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python + +# Copyright 2022 The-Repo-Club + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + +from libqtile import bar, layout, widget +from libqtile.config import Click, Drag, Group, Key, Match, Screen +from libqtile.lazy import lazy +from libqtile.utils import guess_terminal + +mod = "mod4" +terminal = guess_terminal() + +keys = [ + # A list of available commands that can be bound to keys can be found + # at https://docs.qtile.org/en/latest/manual/config/lazy.html + # Switch between windows + Key([mod], "h", lazy.layout.left(), desc="Move focus to left"), + Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), + Key([mod], "j", lazy.layout.down(), desc="Move focus down"), + Key([mod], "k", lazy.layout.up(), desc="Move focus up"), + Key([mod], + "space", + lazy.layout.next(), + desc="Move window focus to other window"), + # Move windows between left/right columns or move up/down in current stack. + # Moving out of range in Columns layout will create new column. + Key([mod, "shift"], + "h", + lazy.layout.shuffle_left(), + desc="Move window to the left"), + Key([mod, "shift"], + "l", + lazy.layout.shuffle_right(), + desc="Move window to the right"), + Key([mod, "shift"], + "j", + lazy.layout.shuffle_down(), + desc="Move window down"), + Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), + # Grow windows. If current window is on the edge of screen and direction + # will be to screen edge - window would shrink. + Key([mod, "control"], + "h", + lazy.layout.grow_left(), + desc="Grow window to the left"), + Key([mod, "control"], + "l", + lazy.layout.grow_right(), + desc="Grow window to the right"), + Key([mod, "control"], + "j", + lazy.layout.grow_down(), + desc="Grow window down"), + Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), + Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), + # Toggle between split and unsplit sides of stack. + # Split = all windows displayed + # Unsplit = 1 window displayed, like Max layout, but still with + # multiple stack panes + Key( + [mod, "shift"], + "Return", + lazy.layout.toggle_split(), + desc="Toggle between split and unsplit sides of stack", + ), + Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), + # Toggle between different layouts as defined below + Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), + Key([mod], "w", lazy.window.kill(), desc="Kill focused window"), + Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"), + Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), + Key([mod], + "r", + lazy.spawncmd(), + desc="Spawn a command using a prompt widget"), +] + +groups = [Group(i) for i in "123456789"] + +for i in groups: + keys.extend([ + # mod1 + letter of group = switch to group + Key( + [mod], + i.name, + lazy.group[i.name].toscreen(), + desc="Switch to group {}".format(i.name), + ), + # mod1 + shift + letter of group = switch to & move focused window to group + Key( + [mod, "shift"], + i.name, + lazy.window.togroup(i.name, switch_group=True), + desc="Switch to & move focused window to group {}".format(i.name), + ), + # Or, use below if you prefer not to switch to that group. + # # mod1 + shift + letter of group = move focused window to group + # Key([mod, "shift"], i.name, lazy.window.togroup(i.name), + # desc="move focused window to group {}".format(i.name)), + ]) + +layouts = [ + layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4), + layout.Max(), + # Try more layouts by unleashing below layouts. + # layout.Stack(num_stacks=2), + # layout.Bsp(), + # layout.Matrix(), + # layout.MonadTall(), + # layout.MonadWide(), + # layout.RatioTile(), + # layout.Tile(), + # layout.TreeTab(), + # layout.VerticalTile(), + # layout.Zoomy(), +] + +widget_defaults = dict( + font="sans", + fontsize=12, + padding=3, +) +extension_defaults = widget_defaults.copy() + +screens = [ + Screen( + bottom=bar.Bar( + [ + widget.CurrentLayout(), + widget.GroupBox(), + widget.Prompt(), + widget.WindowName(), + widget.Chord( + chords_colors={ + "launch": ("#ff0000", "#ffffff"), + }, + name_transform=lambda name: name.upper(), + ), + widget.TextBox("default config", name="default"), + widget.TextBox("Press <M-r> to spawn", + foreground="#d75f5f"), + # NB Systray is incompatible with Wayland, consider using StatusNotifier instead + # widget.StatusNotifier(), + widget.Systray(), + widget.Clock(format="%Y-%m-%d %a %I:%M %p"), + widget.QuickExit(), + ], + 24, + # border_width=[2, 0, 2, 0], # Draw top and bottom borders + # border_color=["ff00ff", "000000", "ff00ff", "000000"] # Borders are magenta + ), ), +] + +# Drag floating layouts. +mouse = [ + Drag([mod], + "Button1", + lazy.window.set_position_floating(), + start=lazy.window.get_position()), + Drag([mod], + "Button3", + lazy.window.set_size_floating(), + start=lazy.window.get_size()), + Click([mod], "Button2", lazy.window.bring_to_front()), +] + +dgroups_key_binder = None +dgroups_app_rules = [] # type: list +follow_mouse_focus = True +bring_front_click = False +cursor_warp = False +floating_layout = layout.Floating(float_rules=[ + # Run the utility of `xprop` to see the wm class and name of an X client. + *layout.Floating.default_float_rules, + Match(wm_class="confirmreset"), # gitk + Match(wm_class="makebranch"), # gitk + Match(wm_class="maketag"), # gitk + Match(wm_class="ssh-askpass"), # ssh-askpass + Match(title="branchdialog"), # gitk + Match(title="pinentry"), # GPG key password entry +]) +auto_fullscreen = True +focus_on_window_activation = "smart" +reconfigure_screens = True + +# If things like steam games want to auto-minimize themselves when losing +# focus, should we respect this or not? +auto_minimize = True + +# When using the Wayland backend, this can be used to configure input devices. +wl_input_rules = None + +# XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this +# string besides java UI toolkits; you can see several discussions on the +# mailing lists, GitHub issues, and other WM documentation that suggest setting +# this string if your java app doesn't work correctly. We may as well just lie +# and say that we're a working one by default. +# +# We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in +# java that happens to be on java's whitelist. +wmname = "LG3D" \ No newline at end of file diff --git a/repomenu/.config/repomenu/repomenu-desktop.db b/repomenu/.config/repomenu/repomenu-desktop.db index 795ad75ec2c39a325ce5adae7c0806b75f7b3fa5..171a73c3625ece1853b6000789f608842bedfe1e 100644 GIT binary patch delta 88 zcmV-e0H^QV+Ah4-NQV+Ah4-NK(}d diff --git a/touchpad-indicator/.config/touchpad-indicator/touchpad-indicator.conf b/touchpad-indicator/.config/touchpad-indicator/touchpad-indicator.conf index 9a9e4705c..c65db2978 100644 --- a/touchpad-indicator/.config/touchpad-indicator/touchpad-indicator.conf +++ b/touchpad-indicator/.config/touchpad-indicator/touchpad-indicator.conf @@ -1 +1 @@ -{"first-time": false, "version": "2.2.2-0extras19.04.1", "is_working": false, "autostart": true, "on_mouse_plugged": true, "on_start": -1, "on_end": 1, "disable_on_typing": true, "interval": 800.0, "start_hidden": false, "show_notifications": true, "theme": "light", "touchpad_enabled": false, "natural_scrolling": true, "speed": 0.0, "tapping": true, "two_finger_scrolling": true, "edge_scrolling": false, "cicular_scrolling": true, "right-top-corner": 0, "right-bottom-corner": 0, "left-top-corner": 0, "left-bottom-corner": 0, "one-finger-tap": 0, "two-finger-tap": 0, "three-finger-tap": 0, "faulty-devices": ["3/46d/c08b/111", "18/4f3/3140/100", "11/2/5/7326", "11/2/1/0", "3/1b1c/1b4f/324", "11/2/6/0", "11/2/a/0"]} \ No newline at end of file +{"first-time": false, "version": "2.2.2-0extras19.04.1", "is_working": false, "autostart": true, "on_mouse_plugged": true, "on_start": -1, "on_end": 1, "disable_on_typing": true, "interval": 800.0, "start_hidden": false, "show_notifications": true, "theme": "light", "touchpad_enabled": false, "natural_scrolling": true, "speed": 0.0, "tapping": true, "two_finger_scrolling": true, "edge_scrolling": false, "cicular_scrolling": true, "right-top-corner": 0, "right-bottom-corner": 0, "left-top-corner": 0, "left-bottom-corner": 0, "one-finger-tap": 0, "two-finger-tap": 0, "three-finger-tap": 0, "faulty-devices": ["11/2/6/0", "11/2/5/7326", "18/4f3/3140/100", "11/2/1/0", "11/2/a/0", "3/1b1c/1b4f/324", "3/30fa/301/111", "3/46d/c08b/111"]} \ No newline at end of file diff --git a/xprofile/.zprofile b/xprofile/.zprofile index 8babb5cf9..314a0088b 100644 --- a/xprofile/.zprofile +++ b/xprofile/.zprofile @@ -9,6 +9,19 @@ if [ -f "$xprofile" ]; then source "$xprofile" fi +if [ -d "/usr/bin/husky" ]; then + export HUSKY_PATH="" + HUSKY_PATH="$HOME/.local/share/husky-repo/core" + HUSKY_PATH="$HOME/.local/share/husky-repo/extra:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/xorg:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/wayland:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/community:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/games:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/bin:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/git:$HUSKY_PATH" + HUSKY_PATH="$HOME/.local/share/husky-repo/testing:$HUSKY_PATH" +fi + # enable XDG_CONFIG_HOME if [[ -z "$XDG_CONFIG_HOME" ]]; then export XDG_CONFIG_HOME="$HOME/.config/"