Init
This commit is contained in:
parent
21e2a7237c
commit
0950379829
31 changed files with 3307 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
Zmakefile
|
||||
zmakefile
|
||||
21
README.md
Normal file
21
README.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# Shell Tools
|
||||
|
||||
Various CLI Shell tools
|
||||
|
||||
## Index
|
||||
|
||||
|----------------------|--------------------------------------------------------------|
|
||||
| (zclick)[zclick] | Autoclicker |
|
||||
| (zcsf)[zcsf] | C source file management |
|
||||
| (zdate)[zdate] | Date operations on folders recursively |
|
||||
| (zdesktop)[zdesktop] | Generate and manage desktop files |
|
||||
| (zgoc)[zgoc] | Overclocking for AMD GPUs |
|
||||
| zmc | Minecraft server utilities |
|
||||
| znotif | Notifications on end of commands |
|
||||
| zosu | Osu installer/manager for linux |
|
||||
| zpac | Pulseaudio tool for volume management |
|
||||
| zrct2 | OpenRCT2 install/server utilities |
|
||||
| ztr | Configured text replacing |
|
||||
| zumask | Do umask operations recursively |
|
||||
| zupdate | Tools to go with (zupdate)[https://github.com/zawwz/zupdate] |
|
||||
|----------------------|--------------------------------------------------------------|
|
||||
136
zclick/zclick
Executable file
136
zclick/zclick
Executable file
|
|
@ -0,0 +1,136 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage ()
|
||||
{
|
||||
echo "zclick [options]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -h Display this help"
|
||||
echo " -d Run daemon"
|
||||
echo " -c <id> Click ID: 1:left 2:middle 3:right."
|
||||
echo " -i <ms> Interval between clicks in ms, 0 for no clicking. Default 20."
|
||||
echo " -t Toggle clicking. Sets interval to 0 if current value was != 0"
|
||||
}
|
||||
|
||||
error () {
|
||||
printf "\033[1;31m%s\033[0m\n" "$1" >&2
|
||||
}
|
||||
|
||||
arg_i=20
|
||||
block_time=100
|
||||
|
||||
if [ -z "$FOLDER" ]
|
||||
then
|
||||
if [-n "$XDG_DATA_HOME" ]
|
||||
then
|
||||
FOLDER="$XDG_DATA_HOME/zclick"
|
||||
else
|
||||
FOLDER="$HOME/.local/share/zclick"
|
||||
fi
|
||||
fi
|
||||
|
||||
while getopts ":hc:i:dt" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
c)
|
||||
if ! echo "$OPTARG" | grep -Eq '^[0-9]+$'
|
||||
then
|
||||
error "c argument has to be an integer"
|
||||
exit 2
|
||||
fi
|
||||
if [ -z "$OPTARG" ]
|
||||
then
|
||||
error "c needs an argument"
|
||||
exit 2
|
||||
fi
|
||||
if [ "$OPTARG" -lt 1 ]
|
||||
then
|
||||
error "c argument has to be greater than 0"
|
||||
exit 2
|
||||
fi
|
||||
arg_c=$OPTARG
|
||||
;;
|
||||
i)
|
||||
if ! echo "$OPTARG" | grep -Eq '^[0-9]+$'
|
||||
then
|
||||
error "i argument has to be an integer"
|
||||
exit 2
|
||||
fi
|
||||
if [ -z "$OPTARG" ]
|
||||
then
|
||||
error "i needs an argument"
|
||||
exit 2
|
||||
fi
|
||||
if [ "$OPTARG" -lt 1 ]
|
||||
then
|
||||
error "i argument has to be greater than 0"
|
||||
exit 2
|
||||
fi
|
||||
arg_i=$OPTARG
|
||||
;;
|
||||
d)
|
||||
opt_d=y
|
||||
;;
|
||||
t)
|
||||
opt_t=y
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
mkdir -p "$FOLDER"
|
||||
|
||||
if [ -n "$opt_d" ]
|
||||
then
|
||||
## DAEMON
|
||||
# reset status of all clicks
|
||||
for I in "$FOLDER"/*
|
||||
do
|
||||
echo "0" > "$I"
|
||||
done
|
||||
# DAEMON
|
||||
while true
|
||||
do
|
||||
for I in "$FOLDER"/*
|
||||
do
|
||||
interval=$(cat "$I")
|
||||
click_id=$(echo "$I" | rev | cut -d'/' -f1 | rev)
|
||||
if [ "$interval" != "0" ]
|
||||
then
|
||||
xdotool click --repeat "$(echo "$block_time / $arg_i" | bc)" --delay "$interval" "$click_id"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
else
|
||||
## CONTROL
|
||||
|
||||
if [ -z "$arg_c" ]
|
||||
then
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -n "$opt_t" ]
|
||||
then
|
||||
#toggle
|
||||
if [ "$(cat "$FOLDER/$arg_c")" != "0" ] ; then
|
||||
echo 0 > "$FOLDER/$arg_c"
|
||||
else
|
||||
echo "$arg_i" > "$FOLDER/$arg_c"
|
||||
fi
|
||||
|
||||
else
|
||||
#set
|
||||
echo "$arg_i" > "$FOLDER/$arg_c"
|
||||
fi
|
||||
|
||||
fi
|
||||
37
zcsf/Makefile
Normal file
37
zcsf/Makefile
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
IDIR=include
|
||||
SRCDIR=src
|
||||
ODIR=obj
|
||||
BINDIR=.
|
||||
|
||||
NAME = hello
|
||||
|
||||
LDFLAGS =
|
||||
|
||||
CC=gcc
|
||||
CXXFLAGS= -I$(IDIR) -Wall -pedantic -std=c18 -O2
|
||||
ifeq ($(DEBUG),true)
|
||||
CXXFLAGS += -g
|
||||
endif
|
||||
|
||||
$(shell mkdir -p $(ODIR))
|
||||
$(shell mkdir -p $(BINDIR))
|
||||
|
||||
# automatically finds .h
|
||||
DEPS = $(shell find $(IDIR) -type f -regex '.*\.h')
|
||||
# automatically finds .c and makes the corresponding .o rule
|
||||
OBJ = $(shell find $(SRCDIR) -type f -regex '.*\.c' | sed 's|\.c$|.o|g;s|$(SRCDIR)/|$(ODIR)/|g')
|
||||
|
||||
$(ODIR)/%.o: $(SRCDIR)/%.c $(DEPS)
|
||||
$(CC) $(CXXFLAGS) -c -o $@ $<
|
||||
|
||||
$(BINDIR)/$(NAME): $(OBJ) $(DEPS)
|
||||
$(CC) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
test: $(BINDIR)/$(NAME)
|
||||
$(BINDIR)/$(NAME)
|
||||
|
||||
clean:
|
||||
rm $(ODIR)/*.o
|
||||
|
||||
clear:
|
||||
rm $(BINDIR)/$(NAME)
|
||||
40
zcsf/Makefile_cpp
Normal file
40
zcsf/Makefile_cpp
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
IDIR=include
|
||||
SRCDIR=src
|
||||
ODIR=obj
|
||||
BINDIR=.
|
||||
|
||||
NAME = hello
|
||||
|
||||
LDFLAGS =
|
||||
|
||||
CC=g++
|
||||
CXXFLAGS= -I$(IDIR) -Wall -pedantic -std=c++17 -O2
|
||||
ifeq ($(DEBUG),true)
|
||||
CXXFLAGS += -g
|
||||
endif
|
||||
|
||||
$(shell mkdir -p $(ODIR))
|
||||
$(shell mkdir -p $(BINDIR))
|
||||
|
||||
# automatically finds .h and .hpp
|
||||
DEPS = $(shell find $(IDIR) -type f -regex '.*\.hp?p?')
|
||||
# automatically finds .c and .cpp and makes the corresponding .o rule
|
||||
OBJ = $(shell find $(SRCDIR) -type f -regex '.*\.cp?p?' | sed 's|\.cp?p?$|.o|g;s|$(SRCDIR)/|$(ODIR)/|g')
|
||||
|
||||
$(ODIR)/%.o: $(SRCDIR)/%.c $(DEPS)
|
||||
$(CC) $(CXXFLAGS) -c -o $@ $<
|
||||
|
||||
$(ODIR)/%.o: $(SRCDIR)/%.cpp $(DEPS)
|
||||
$(CC) $(CXXFLAGS) -c -o $@ $<
|
||||
|
||||
$(BINDIR)/$(NAME): $(OBJ) $(DEPS)
|
||||
$(CC) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
test: $(BINDIR)/$(NAME)
|
||||
$(BINDIR)/$(NAME)
|
||||
|
||||
clean:
|
||||
rm $(ODIR)/*.o
|
||||
|
||||
clear:
|
||||
rm $(BINDIR)/$(NAME)
|
||||
7
zcsf/main.c
Normal file
7
zcsf/main.c
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
printf("Hello world!\n");
|
||||
return 0;
|
||||
}
|
||||
7
zcsf/main.cpp
Normal file
7
zcsf/main.cpp
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#include <iostream>
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
std::cout << "Hello world!\n";
|
||||
return 0;
|
||||
}
|
||||
30
zcsf/shelltocstr
Executable file
30
zcsf/shelltocstr
Executable file
|
|
@ -0,0 +1,30 @@
|
|||
#!/bin/sh
|
||||
|
||||
COMMENTSCRIPT="/^\s*#/d;s/\s*#[^\"']*$//"
|
||||
SLASHSCRIPT='s|\\|\\\\|g;s|\"|\\\"|g'
|
||||
|
||||
SEDSCRIPT="$COMMENTSCRIPT;$SLASHSCRIPT"
|
||||
NEWLINE_SCRIPT=':a;N;$!ba;s/\n/\\n/g;'
|
||||
|
||||
usage ()
|
||||
{
|
||||
echo "shelltocstr [file]"
|
||||
echo ""
|
||||
echo "Transform shell scripts to fit into a C string"
|
||||
echo "Reads from stdin or from a file"
|
||||
}
|
||||
|
||||
|
||||
if [ -t 0 ]
|
||||
then
|
||||
# not piped
|
||||
if [ -n "$1" ]
|
||||
then
|
||||
sed $SEDSCRIPT $1 | sed $NEWLINE_SCRIPT
|
||||
else
|
||||
usage
|
||||
fi
|
||||
else
|
||||
# piped
|
||||
sed $SEDSCRIPT /dev/stdin | sed $NEWLINE_SCRIPT
|
||||
fi
|
||||
461
zcsf/zcsf
Executable file
461
zcsf/zcsf
Executable file
|
|
@ -0,0 +1,461 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage()
|
||||
{
|
||||
echo 'zcsf <operation>
|
||||
|
||||
Operations:
|
||||
make <type> : create Makefile
|
||||
main : create main source file
|
||||
ls : list source names
|
||||
src <type> <name...> : create source files
|
||||
rm <name...> : delete source files
|
||||
mv <name> <new> : rename source files
|
||||
clear : delete all sources, headers, and binaries
|
||||
import <path> [name] : import source files from another destination
|
||||
export <name> <path> : export source files to another destination
|
||||
rclean [path] : perform a recursive '"'make clean ; make clear'"'
|
||||
|
||||
Operation "src" can be abbrieviated to "s"'
|
||||
}
|
||||
|
||||
if [ -n "$XDG_CONFIG_HOME" ]
|
||||
then
|
||||
local_configpath="$XDG_CONFIG_HOME/zcsf"
|
||||
else
|
||||
local_configpath="$HOME/.config/zcsf"
|
||||
fi
|
||||
|
||||
usr_configpath="/usr/share/z/zcsf"
|
||||
|
||||
if [ -n "$CONFIGPATH" ]
|
||||
then
|
||||
local_configpath="$CONFIGPATH"
|
||||
fi
|
||||
|
||||
header_ifndef()
|
||||
{
|
||||
echo "#ifndef $(echo "$1"_H"$2" | tr '[:lower:]' '[:upper:]')"
|
||||
}
|
||||
header_define()
|
||||
{
|
||||
echo "#define $(echo "$1"_H"$2" | tr '[:lower:]' '[:upper:]')"
|
||||
}
|
||||
header_endif()
|
||||
{
|
||||
echo "#endif //$(echo "$1"_H"$2" | tr '[:lower:]' '[:upper:]')"
|
||||
}
|
||||
|
||||
clear_env()
|
||||
{
|
||||
unset SRCDIR
|
||||
unset BINDIR
|
||||
unset IDIR
|
||||
unset ODIR
|
||||
}
|
||||
|
||||
load_env()
|
||||
{
|
||||
if [ ! -d "$1" ] ; then
|
||||
return
|
||||
fi
|
||||
if [ -f "$1/Makefile" ] ; then
|
||||
MAKEFILE="$1/Makefile"
|
||||
elif [ -f "$1/makefile" ] ; then
|
||||
MAKEFILE="$1/makefile"
|
||||
fi
|
||||
|
||||
if [ -f "$MAKEFILE" ]
|
||||
then
|
||||
SRCDIR_T=$(grep "SRCDIR=" "$MAKEFILE" | cut -d'=' -f2- | head -n1)
|
||||
BINDIR_T=$(grep "BINDIR=" "$MAKEFILE" | cut -d'=' -f2- | head -n1)
|
||||
IDIR_T=$(grep "IDIR=" "$MAKEFILE" | cut -d'=' -f2- | head -n1)
|
||||
ODIR_T=$(grep "ODIR=" "$MAKEFILE" | cut -d'=' -f2- | head -n1)
|
||||
CC=$(grep "CC=" "$MAKEFILE" | cut -d'=' -f2- | head -n1)
|
||||
fi
|
||||
|
||||
if [ "$CC" = "g++" ] || [ "$CPP" = "true" ]
|
||||
then
|
||||
PP="pp"
|
||||
fi
|
||||
|
||||
# overwrite
|
||||
if [ -z "$SRCDIR" ] ; then SRCDIR=$SRCDIR_T ; fi
|
||||
if [ -z "$BINDIR" ] ; then BINDIR=$BINDIR_T ; fi
|
||||
if [ -z "$IDIR" ] ; then IDIR=$IDIR_T ; fi
|
||||
if [ -z "$ODIR" ] ; then ODIR=$ODIR_T ; fi
|
||||
|
||||
# if empty
|
||||
if [ -z "$SRCDIR" ] ; then SRCDIR=. ; fi
|
||||
if [ -z "$BINDIR" ] ; then BINDIR=. ; fi
|
||||
if [ -z "$IDIR" ] ; then IDIR=. ; fi
|
||||
if [ -z "$ODIR" ] ; then ODIR=. ; fi
|
||||
|
||||
unset SRCDIR_T
|
||||
unset BINDIR_T
|
||||
unset IDIR_T
|
||||
unset ODIR_T
|
||||
unset MAKEFILE
|
||||
}
|
||||
|
||||
gen_chfiles()
|
||||
{
|
||||
CFILE="$1.c$2"
|
||||
HFILE="$1.h$2"
|
||||
if [ ! -f "$CFILE" ]
|
||||
then
|
||||
echo "#include \"$HFILE\"" > "$SRCDIR/$CFILE"
|
||||
fi
|
||||
gen_hfile "$1" "$2"
|
||||
}
|
||||
|
||||
gen_cfile()
|
||||
{
|
||||
CFILE="$1.c$2"
|
||||
if [ ! -f "$1" ]
|
||||
then
|
||||
touch "$SRCDIR/$CFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_hfile()
|
||||
{
|
||||
HFILE="$1.h$2"
|
||||
if [ ! -f "$HFILE" ]
|
||||
then
|
||||
{ header_ifndef "$1" "$2" ; header_define "$1" "$2" ; printf "\n\n\n" ; header_endif "$1" "$2" ;} > "$IDIR/$HFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
clean_all()
|
||||
{
|
||||
if [ -z "$1" ] ; then
|
||||
spath=.
|
||||
else
|
||||
spath="$1"
|
||||
fi
|
||||
find "$spath" -name '[mM]akefile' -execdir sh -c 'make clean 2>/dev/null ; make clear 2>/dev/null' ';' 2>/dev/null
|
||||
}
|
||||
|
||||
dir_gen()
|
||||
{
|
||||
|
||||
if [ ! -d "$SRCDIR" ]
|
||||
then
|
||||
mkdir -p "$SRCDIR"
|
||||
fi
|
||||
if [ ! -d "$BINDIR" ]
|
||||
then
|
||||
mkdir -p "$BINDIR"
|
||||
fi
|
||||
if [ ! -d "$IDIR" ]
|
||||
then
|
||||
mkdir -p "$IDIR"
|
||||
fi
|
||||
if [ ! -d "$ODIR" ]
|
||||
then
|
||||
mkdir -p "$ODIR"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_make()
|
||||
{
|
||||
if [ -f "$local_configpath/Makefile$1" ] ; then
|
||||
mpath="$local_configpath/Makefile$1"
|
||||
else
|
||||
mpath="$usr_configpath/Makefile$1"
|
||||
fi
|
||||
cp "$mpath" Makefile 2>/dev/null || touch Makefile
|
||||
}
|
||||
|
||||
gen_main()
|
||||
{
|
||||
if [ -f "$local_configpath/main.c$1" ] ; then
|
||||
mpath="$local_configpath/main.c$1"
|
||||
else
|
||||
mpath="$usr_configpath/main.c$1"
|
||||
fi
|
||||
cp "$mpath" "$SRCDIR" 2>/dev/null || touch "$SRCDIR/main.c$1"
|
||||
}
|
||||
|
||||
list_c()
|
||||
{
|
||||
(
|
||||
cd "$SRCDIR" || exit
|
||||
if [ -f "main.c" ] || [ -f "main.cpp" ] ; then echo "main" ; fi
|
||||
find . -type f -regex ".*\.cp?p?" | cut -d '/' -f2- | sed 's/\.cpp$//g;s/\.c$//g;/main/d'
|
||||
)
|
||||
}
|
||||
list_h()
|
||||
{
|
||||
(
|
||||
cd "$IDIR" || exit
|
||||
find . -type f -regex ".*\.hp?p?" | cut -d '/' -f2- | sed 's/\.hpp$//g;s/\.h$//g;/^$/d'
|
||||
)
|
||||
}
|
||||
|
||||
load_env .
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
|
||||
usage
|
||||
|
||||
elif [ "$1" = "make" ]
|
||||
then
|
||||
|
||||
unset help
|
||||
if [ -n "$2" ]
|
||||
then
|
||||
if [ "$2" = "c" ]
|
||||
then
|
||||
gen_make ""
|
||||
|
||||
elif [ "$2" = "cpp" ] || [ "$2" = "c++" ]
|
||||
then
|
||||
gen_make "_cpp"
|
||||
else
|
||||
help='y'
|
||||
fi
|
||||
|
||||
else
|
||||
help='y'
|
||||
fi
|
||||
|
||||
|
||||
if [ -n "$help" ]
|
||||
then
|
||||
echo "zcsf make <type>"
|
||||
echo "Types:"
|
||||
echo " c : C automatic makefile"
|
||||
echo " cpp/c++ : C++ automatic makefile"
|
||||
fi
|
||||
|
||||
|
||||
elif [ "$1" = "clear" ]
|
||||
then
|
||||
|
||||
make clean >/dev/null 2>&1
|
||||
make clear >/dev/null 2>&1
|
||||
|
||||
if [ "$SRCDIR" != "." ] ; then
|
||||
rm -rd "$SRCDIR" 2> /dev/null
|
||||
else
|
||||
rm ./*.c ./*.cpp 2> /dev/null
|
||||
fi
|
||||
[ "$BINDIR" != "." ] && rm -rd "$BINDIR" 2> /dev/null
|
||||
|
||||
if [ "$IDIR" != "." ] ; then
|
||||
rm -rd "$IDIR" 2> /dev/null
|
||||
else
|
||||
rm ./*.h ./*.hpp 2> /dev/null
|
||||
fi
|
||||
|
||||
[ "$ODIR" != "." ] && rm -rd "$ODIR" 2> /dev/null
|
||||
|
||||
elif [ "$1" = "main" ]
|
||||
then
|
||||
|
||||
dir_gen
|
||||
gen_main $PP
|
||||
|
||||
elif [ "$1" = "ls" ]
|
||||
then
|
||||
|
||||
(list_c && list_h;) | sort | uniq
|
||||
|
||||
elif [ "$1" = "src" ] || [ "$1" = "s" ]
|
||||
then
|
||||
|
||||
unset help
|
||||
if [ -n "$2" ] && [ -n "$3" ]
|
||||
then
|
||||
unset f
|
||||
unset c
|
||||
unset h
|
||||
unset pp
|
||||
|
||||
if [ "$2" = "a" ] || [ "$2" = "auto" ]; then
|
||||
f='y'
|
||||
pp=$PP
|
||||
|
||||
elif [ "$2" = "f" ]; then
|
||||
f='y'
|
||||
|
||||
elif [ "$2" = "fpp" ] || [ "$2" = "f++" ]; then
|
||||
f='y'
|
||||
pp='pp'
|
||||
|
||||
elif [ "$2" = "c" ]
|
||||
then
|
||||
c='y'
|
||||
|
||||
elif [ "$2" = "cpp" ] || [ "$2" = "c++" ]; then
|
||||
c='y'
|
||||
pp='pp'
|
||||
|
||||
elif [ "$2" = "h" ]; then
|
||||
h='y'
|
||||
|
||||
elif [ "$2" = "hpp" ] || [ "$2" = "h++" ]; then
|
||||
h='y'
|
||||
pp='pp'
|
||||
|
||||
else
|
||||
help='y'
|
||||
fi
|
||||
|
||||
else
|
||||
help='y'
|
||||
fi
|
||||
|
||||
if [ -n "$help" ]
|
||||
then
|
||||
echo 'zcsf src <type> <names>
|
||||
Types:
|
||||
a/auto : create .c[pp] and .h[pp] files correspondingly
|
||||
f : create .c and .h files
|
||||
fpp/f++ : create .cpp and .hpp files
|
||||
c : create .c file
|
||||
cpp/c++ : create .cpp file
|
||||
h : create .h file
|
||||
hpp : create .hpp file'
|
||||
|
||||
else
|
||||
dir_gen
|
||||
shift $((OPTIND+1))
|
||||
for N
|
||||
do
|
||||
[ -n "$c" ] && gen_cfile "$N" "$pp"
|
||||
[ -n "$h" ] && gen_hfile "$N" "$pp"
|
||||
[ -n "$f" ] && gen_chfiles "$N" "$pp"
|
||||
done
|
||||
fi
|
||||
|
||||
elif [ "$1" = "rm" ]
|
||||
then
|
||||
|
||||
shift $((OPTIND))
|
||||
for N
|
||||
do
|
||||
rm "$SRCDIR/$N.c" "$SRCDIR/$N.cpp" "$IDIR/$N.h" "$IDIR/$N.hpp" 2>/dev/null
|
||||
done
|
||||
|
||||
elif [ "$1" = "mv" ]
|
||||
then
|
||||
|
||||
if [ -f "$SRCDIR/$2.c" ] ; then
|
||||
CFILE="$2.c"
|
||||
CFILE2="$3.c"
|
||||
elif [ -f "$SRCDIR/$2.cpp" ] ; then
|
||||
CFILE="$2.cpp"
|
||||
CFILE2="$3.cpp"
|
||||
fi
|
||||
if [ -f "$IDIR/$2.h" ] ; then
|
||||
HFILE="$2.h"
|
||||
HFILE2="$3.h"
|
||||
elif [ -f "$IDIR/$2.hpp" ] ; then
|
||||
HFILE="$2.hpp"
|
||||
HFILE2="$3.hpp"
|
||||
fi
|
||||
|
||||
[ -n "$CFILE" ] && mv "$SRCDIR/$CFILE" "$SRCDIR/$CFILE2"
|
||||
|
||||
if [ -n "$HFILE" ]
|
||||
then
|
||||
|
||||
mv "$IDIR/$HFILE" "$IDIR/$HFILE2" || exit
|
||||
|
||||
find "$SRCDIR" "$IDIR" -type f -regex ".*\.[ch]p?p?" -exec sed -i "s:#include \"$HFILE\":#include \"$HFILE2\":g" "{}" "+"
|
||||
|
||||
sed -i "s:$(header_ifndef "$2"):$(header_ifndef "$3"):g;s:$(header_define "$2"):$(header_define "$3"):g;s:$(header_endif "$2"):$(header_endif "$3"):g" "$IDIR/$HFILE2"
|
||||
fi
|
||||
|
||||
if [ -z "$CFILE" ] && [ -z "$HFILE" ]
|
||||
then
|
||||
echo "'$2' not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
elif [ "$1" = "import" ]
|
||||
then
|
||||
|
||||
SRCDIR_S=$SRCDIR
|
||||
IDIR_S=$IDIR
|
||||
|
||||
clear_env
|
||||
|
||||
import_path="$2"
|
||||
if [ ! -d "$import_path" ] ; then
|
||||
echo "Cannot find '$import_path'"
|
||||
exit 1
|
||||
fi
|
||||
load_env "$import_path"
|
||||
|
||||
if [ -n "$3" ]
|
||||
then
|
||||
if [ -f "$import_path/$SRCDIR/$3.c" ] ; then
|
||||
cp "$import_path/$SRCDIR/$3.c" "$SRCDIR_S"
|
||||
_OK=y
|
||||
fi
|
||||
if [ -f "$import_path/$SRCDIR/$3.cpp" ] ; then
|
||||
cp "$import_path/$SRCDIR/$3.cpp" "$SRCDIR_S"
|
||||
_OK=y
|
||||
fi
|
||||
if [ -f "$import_path/$IDIR/$3.h" ] ; then
|
||||
cp "$import_path/$IDIR/$3.h" "$IDIR_S"
|
||||
_OK=y
|
||||
fi
|
||||
if [ -f "$import_path/$IDIR/$3.hpp" ] ; then
|
||||
cp "$import_path/$IDIR/$3.hpp" "$IDIR_S"
|
||||
_OK=y
|
||||
fi
|
||||
if [ -z "$_OK" ]
|
||||
then
|
||||
echo "Cannot find '$3' at '$import_path'"
|
||||
fi
|
||||
else
|
||||
|
||||
find "$import_path/$SRCDIR" -regex '.*\.cp?p?' -exec cp "{}" "$SRCDIR_S/" ";"
|
||||
find "$import_path/$IDIR" -regex '.*\.hp?p?' -exec cp "{}" "$IDIR_S/" ";"
|
||||
|
||||
fi
|
||||
|
||||
elif [ "$1" = "export" ]
|
||||
then
|
||||
|
||||
if [ -f "$SRCDIR/$2.c" ] ; then
|
||||
CFILE="$2.c"
|
||||
CFILE2="$3.c"
|
||||
elif [ -f "$SRCDIR/$2.cpp" ] ; then
|
||||
CFILE="$2.cpp"
|
||||
CFILE2="$3.cpp"
|
||||
fi
|
||||
if [ -f "$IDIR/$2.h" ] ; then
|
||||
HFILE="$2.h"
|
||||
HFILE2="$3.h"
|
||||
elif [ -f "$IDIR/$2.hpp" ] ; then
|
||||
HFILE="$2.hpp"
|
||||
HFILE2="$3.hpp"
|
||||
fi
|
||||
|
||||
clear_env
|
||||
|
||||
export_path="$3"
|
||||
if [ ! -d "$export_path" ] ; then
|
||||
echo "Cannot find '$import_path'"
|
||||
exit 1
|
||||
fi
|
||||
load_env "$export_path"
|
||||
|
||||
cp "$SRCDIR_S/$CFILE" "$export_path/$SRCDIR"
|
||||
cp "$IDIR_S/$HFILE" "$export_path/$IDIR"
|
||||
|
||||
elif [ "$1" = "rclean" ]
|
||||
then
|
||||
|
||||
clean_all "$2"
|
||||
|
||||
else
|
||||
usage
|
||||
fi
|
||||
25
zcsf/zcsf.bash
Normal file
25
zcsf/zcsf.bash
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#/usr/bin/env bash
|
||||
|
||||
_zcsf_completion()
|
||||
{
|
||||
_cw1="make main ls src rm mv clear import export rclean"
|
||||
_cw1_ls="rm mv export"
|
||||
_make_types="c cpp"
|
||||
_src_types="auto f fpp c cpp h cpp"
|
||||
|
||||
if [ "$COMP_CWORD" = "1" ] ; then # operations
|
||||
_compwords=$_cw1
|
||||
elif [ "$COMP_CWORD" -gt "1" ] && echo "$_cw1_ls" | grep -qw "${COMP_WORDS[1]}" ; then # src files
|
||||
_compwords=$(zcsf ls 2>/dev/null)
|
||||
elif [ "$COMP_CWORD" = "2" ] && [ "${COMP_WORDS[1]}" = "make" ] ; then # make type
|
||||
_compwords=$_make_types
|
||||
elif [ "$COMP_CWORD" = "2" ] && [ "${COMP_WORDS[1]}" = "src" ] ; then # src type
|
||||
_compwords=$_src_types
|
||||
else
|
||||
_compwords=""
|
||||
fi
|
||||
|
||||
COMPREPLY=($(compgen -W "$_compwords" "${COMP_WORDS[$COMP_CWORD]}"))
|
||||
}
|
||||
|
||||
complete -F _zcsf_completion -o dirnames zcsf
|
||||
38
zcsf/zmake
Executable file
38
zcsf/zmake
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
|
||||
fname=$(basename "$0")
|
||||
usage() {
|
||||
echo "$fname [option] [arguments]
|
||||
Execute the zmakefile in the directory
|
||||
If there is no zmakefile, uses the makefile instead
|
||||
The zmakefile is a shell script
|
||||
|
||||
Options:
|
||||
-h Display help
|
||||
-C <path> Execute from this path"
|
||||
}
|
||||
|
||||
path=.
|
||||
if [ "$1" = "-h" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
if [ "$1" = "-C" ]
|
||||
then
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
echo "Option -C needs an argument" >&2
|
||||
exit 2
|
||||
fi
|
||||
path="$2"
|
||||
fi
|
||||
|
||||
cd "$path"
|
||||
|
||||
if [ -f Zmakefile ]
|
||||
then sh Zmakefile $@
|
||||
elif [ -f zmakefile ]
|
||||
then sh zmakefile $@
|
||||
else make $@
|
||||
fi
|
||||
43
zdate/zdate
Executable file
43
zdate/zdate
Executable file
|
|
@ -0,0 +1,43 @@
|
|||
#!/bin/sh
|
||||
|
||||
fname="$(basename "$0")"
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "$fname [options] [path...]"
|
||||
echo 'Display latest date of modification of any item in the path'
|
||||
}
|
||||
|
||||
while getopts ":hs" opt;
|
||||
do
|
||||
_opt=y
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
s)
|
||||
_opt_s=y
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
targets="."
|
||||
[ $# -gt 0 ] && targets="$*"
|
||||
|
||||
ret=$(find $targets -type f -printf '%T@\n' | sort | tail -n1 | cut -d'.' -f1)
|
||||
|
||||
if [ -z "$_opt_s" ]
|
||||
then
|
||||
ret=$(date --date="@$ret" 2>/dev/null)
|
||||
fi
|
||||
|
||||
[ -n "$ret" ] && echo $ret
|
||||
|
||||
94
zdesktop/zdesktop
Executable file
94
zdesktop/zdesktop
Executable file
|
|
@ -0,0 +1,94 @@
|
|||
#!/bin/sh
|
||||
|
||||
fname="$(basename "$0")"
|
||||
|
||||
ERR=0
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "$fname [options] <operation>"
|
||||
echo '
|
||||
Operations:
|
||||
gen [bin_file...] Generate a desktop file
|
||||
add <desktop_file...> Add desktop file to applications
|
||||
|
||||
Options:
|
||||
'
|
||||
}
|
||||
|
||||
gen_file()
|
||||
{
|
||||
unset name
|
||||
|
||||
if [ -n "$1" ]
|
||||
then
|
||||
file="$1"
|
||||
name="$(echo "$1" | sed 's|.[^.]*$||g')"
|
||||
[ -z "$name" ] && name="$1"
|
||||
else
|
||||
name="$(basename "$(pwd)")"
|
||||
file=""
|
||||
fi
|
||||
|
||||
desktop_file=$(echo "$name.desktop" | tr '[:upper:]' '[:lower:]')
|
||||
if [ -f "$desktop_file" ] ; then
|
||||
mv "$desktop_file" "$desktop_file.bak" || return $?
|
||||
fi
|
||||
|
||||
cat > "$desktop_file" << EOF
|
||||
[Desktop Entry]
|
||||
Name=$name
|
||||
Comment=$name
|
||||
Type=Application
|
||||
Exec=$(pwd)/$file
|
||||
Icon=$(pwd)/icon.png
|
||||
Categories=Game
|
||||
Keywords=keyword;keyword
|
||||
EOF
|
||||
}
|
||||
|
||||
add_file()
|
||||
{
|
||||
if [ -f "$1" ]
|
||||
then
|
||||
ln -s "$(pwd)/$1" "$HOME/.local/share/applications"
|
||||
else
|
||||
echo "'$1' is not a file" > /dev/stderr
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $# -le 0 ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = "gen" ] ; then
|
||||
if [ $# -gt 1 ]
|
||||
then
|
||||
shift $((OPTIND))
|
||||
for N
|
||||
do
|
||||
gen_file "$N"
|
||||
done
|
||||
else
|
||||
gen_file || ERR=$?
|
||||
fi
|
||||
elif [ "$1" = "add" ] ; then
|
||||
|
||||
if [ $# -gt 1 ]
|
||||
then
|
||||
shift $((OPTIND))
|
||||
for N
|
||||
do
|
||||
add_file "$N" || ERR=$?
|
||||
done
|
||||
else
|
||||
echo "$fname gen <desktop_file...>" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
exit $ERR
|
||||
132
zgoc/zfanc
Executable file
132
zgoc/zfanc
Executable file
|
|
@ -0,0 +1,132 @@
|
|||
#!/bin/bash
|
||||
|
||||
config_file="/usr/share/z/config/zgoc.conf"
|
||||
card_name=$( grep "GPU_NAME=" "$config_file" | cut -d '=' -f2-)
|
||||
pci_id=$(grep "GPU_PCI_ID=" "$config_file" | cut -d '=' -f2-)
|
||||
profile_path=$(grep "FANC_PROFILE_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
default_profile=$(grep "FANC_DEFAULT_PROFILE=" "$config_file" | cut -d '=' -f2-)
|
||||
time_interval=$(grep "FANC_TIME_INTERVAL=" "$config_file" | cut -d '=' -f2-)
|
||||
|
||||
temps=( 50 60 70 80 85 90 95 ) # in °C
|
||||
fans=( 0 15 30 40 55 75 100 ) # in %
|
||||
|
||||
if [ "${#temps[@]}" -ne "${#fans[@]}" ]
|
||||
then
|
||||
error "Amount of temperature and pwm values does not match"
|
||||
exit 30
|
||||
fi
|
||||
|
||||
error () {
|
||||
printf "\033[1;31m%s\033[0m\n" "$1" >&2
|
||||
}
|
||||
|
||||
file_report ()
|
||||
{
|
||||
if [ -f "$(pwd)/$1" ]
|
||||
then
|
||||
echo -n "$(pwd)/$1 = "
|
||||
cat "$(pwd)/$1"
|
||||
elif [ -f "$1" ]
|
||||
then
|
||||
echo -n "$1 = "
|
||||
cat "$1"
|
||||
else
|
||||
error "File $1 from $(pwd) unaccessible"
|
||||
fi
|
||||
}
|
||||
|
||||
file_write ()
|
||||
{
|
||||
if ! echo "$1" > "$2"
|
||||
then
|
||||
error "Error writing to $2 from $(pwd)"
|
||||
exit 12
|
||||
fi
|
||||
file_report "$2"
|
||||
}
|
||||
|
||||
_stop() {
|
||||
echo ""
|
||||
file_write 2 pwm1_enable
|
||||
exit
|
||||
}
|
||||
|
||||
if [[ $(lspci | grep -c VGA) -gt 1 ]]
|
||||
then
|
||||
if [[ -z "$card_name" ]] && [[ -z "$pci_id" ]] ; then
|
||||
error "Several GPUs are present and no GPU is specified"
|
||||
exit 20
|
||||
fi
|
||||
if [ -z "$pci_id" ] ; then
|
||||
pci_id=$(lspci | grep VGA | grep "$card_name" | cut -d ' ' -f1)
|
||||
if [ "$(echo "$pci_id" | wc -l)" -gt 1 ] ; then
|
||||
error "More than one name match"
|
||||
exit 21
|
||||
elif [ "$(echo "$pci_id" | wc -l)" -lt 1 ] ; then
|
||||
error "No name match"
|
||||
exit 22
|
||||
fi
|
||||
fi
|
||||
cd /sys/class/drm || exit
|
||||
|
||||
if ! cd "$(ls -l card? | grep "$pci_id" | tr -s ' ' | cut -d ' ' -f9)"
|
||||
then
|
||||
error "Error finding pci device"
|
||||
echo 23
|
||||
fi
|
||||
else
|
||||
cd "$(find /sys/class/drm/card? | head -n1)" || exit
|
||||
fi
|
||||
echo -n "Device at "
|
||||
pwd
|
||||
cd "device/hwmon/$(ls device/hwmon)" || exit
|
||||
|
||||
if [ $UID -ne 0 ]
|
||||
then
|
||||
echo "Root privileges required"
|
||||
exit 10
|
||||
fi
|
||||
|
||||
if [ ! -f pwm1 ]
|
||||
then
|
||||
error "PWM not available on this device"
|
||||
exit 11
|
||||
fi
|
||||
|
||||
trap '_stop' SIGINT
|
||||
|
||||
file_write 1 pwm1_enable
|
||||
|
||||
while true
|
||||
do
|
||||
temp=$(zgpu -g0 -Wnt | cut -d '.' -f1)
|
||||
I=1
|
||||
if [ "$temp" -lt "${temps[0]}" ]
|
||||
then
|
||||
fan=${fans[0]}
|
||||
else
|
||||
while [[ $I -lt "${#temps[@]}" ]]
|
||||
do
|
||||
if [ "$temp" -lt "${temps[$I]}" ]
|
||||
then
|
||||
LOWERTEMP=${temps[$I-1]}
|
||||
HIGHERTEMP=${temps[$I]}
|
||||
LOWERPWM=${fans[$I-1]}
|
||||
HIGHERPWM=${fans[$I]}
|
||||
fan=$(echo "( ( $temp - $LOWERTEMP ) * ( $HIGHERPWM - $LOWERPWM ) / ( $HIGHERTEMP - $LOWERTEMP ) ) + $LOWERPWM" | bc)
|
||||
I=${#temps[@]}
|
||||
fi
|
||||
I=$((I + 1))
|
||||
done
|
||||
fi
|
||||
if [ -z "$fan" ]
|
||||
then
|
||||
fan=${fans[$((I - 1))]}
|
||||
fi
|
||||
fan_max=$(cat pwm1_max)
|
||||
fan_min=$(cat pwm1_min)
|
||||
file_write "$(echo "( ( $fan * ($fan_max - $fan_min) ) / 100 ) + $fan_min" | bc)" pwm1
|
||||
sleep "$time_interval"
|
||||
done
|
||||
|
||||
exit 0
|
||||
337
zgoc/zgoc
Executable file
337
zgoc/zgoc
Executable file
|
|
@ -0,0 +1,337 @@
|
|||
#!/bin/sh
|
||||
|
||||
#
|
||||
# This script does not support multiple GPUs
|
||||
# Only radeon GPUs supported
|
||||
#
|
||||
|
||||
config_file="/usr/share/z/config/zgoc.conf"
|
||||
|
||||
if [ ! -f "$config_file" ]
|
||||
then
|
||||
echo'# zgoc config file
|
||||
GPU_PROFILE_PATH=/usr/share/z/zgoc/profiles/gpu
|
||||
GPU_MEM_PATH=/usr/share/z/zgoc/profiles/mem
|
||||
GPU_POWER_PATH=/usr/share/z/zgoc/profiles/power
|
||||
GPU_NAME=
|
||||
GPU_PCI_ID=
|
||||
GPU_AUTOMEMFIX=true
|
||||
GPU_MIN_POWER=30
|
||||
FANC_PROFILE_PATH=/usr/share/z/zgoc/profiles/fan
|
||||
FANC_DEFAULT_PROFILE=default
|
||||
FANC_TIME_INTERVAL=2' > "$config_file"
|
||||
fi
|
||||
|
||||
profile_path=$(grep "GPU_PROFILE_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
mem_path=$(grep "GPU_MEM_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
power_path=$(grep "GPU_POWER_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
card_name=$( grep "GPU_NAME=" "$config_file" | cut -d '=' -f2-)
|
||||
pci_id=$(grep "GPU_PCI_ID=" "$config_file" | cut -d '=' -f2-)
|
||||
automemfix=$(grep "GPU_AUTOMEMFIX=" "$config_file" | cut -d '=' -f2-)
|
||||
min_power=$(grep "GPU_MIN_POWER=" "$config_file" | cut -d '=' -f2-)
|
||||
if [ ! "$automemfix" = "true" ]
|
||||
then
|
||||
automemfix=""
|
||||
fi
|
||||
|
||||
usage() {
|
||||
echo "Usage: zgoc <arguments>"
|
||||
echo "Arguments:"
|
||||
echo " print : show current state"
|
||||
echo " gpu : GPU overclocking"
|
||||
echo " mem : memory overclocking"
|
||||
echo " apply : apply GPU and memory profiles"
|
||||
echo " reset : reset GPU and memory to stock values"
|
||||
echo " memfix : fix screen artifacting caused by low memory state"
|
||||
echo " power : power cap"
|
||||
echo ""
|
||||
echo "Config file: $config_file"
|
||||
}
|
||||
|
||||
error () {
|
||||
printf "\033[1;31m%s\033[0m\n" "$1" >&2
|
||||
}
|
||||
root_check () {
|
||||
if [ "$(id | cut -d'=' -f2 | cut -d'(' -f1)" -ne 0 ]
|
||||
then
|
||||
echo "Root privileges required" > /dev/stderr
|
||||
exit 10
|
||||
fi
|
||||
}
|
||||
|
||||
_stop() {
|
||||
echo ""
|
||||
exit
|
||||
}
|
||||
|
||||
trap '_stop' INT
|
||||
|
||||
# val_convert <reduction factor n> <precision>
|
||||
# convert an integer to a lower decimal
|
||||
# output = input*10^-n
|
||||
# reads from input
|
||||
val_convert () {
|
||||
read -r in
|
||||
size=${#in}
|
||||
n2=$((size - $1))
|
||||
integer=$(echo "$in" | cut -c-$n2)
|
||||
if [ "$2" != 0 ] ; then
|
||||
decimal=$(echo "$in" | cut -c$((n2+1))-"$size" | cut -c1-"$2")
|
||||
fi
|
||||
if [ -z "$integer" ] ; then
|
||||
integer=0
|
||||
fi
|
||||
printf "%s" "$integer"
|
||||
if [ -n "$decimal" ] ; then
|
||||
printf ".%s" "$decimal"
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
kernel_req ()
|
||||
{
|
||||
MAIN_KERNELVER=$(uname -r | cut -d'.' -f1) # Get kernel version.
|
||||
SEC_KERNELVER=$(uname -r | cut -d'.' -f2) # Get kernel version.
|
||||
if [ "$MAIN_KERNELVER" -le "$1" ]; then
|
||||
if [ "$SEC_KERNELVER" -lt "$2" ]; then
|
||||
error "Kernel $1.$2 or higher is required for this feature"
|
||||
exit 13
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# kernel version check
|
||||
kernel_req 4 15
|
||||
|
||||
file_report () {
|
||||
if [ -f "$(pwd)/$1" ]
|
||||
then
|
||||
printf "%s = " "$(pwd)/$1"
|
||||
cat "$(pwd)/$1"
|
||||
elif [ -f "$1" ]
|
||||
then
|
||||
printf "%s = " "$1"
|
||||
cat "$1"
|
||||
else
|
||||
error "File $1 from $(pwd) unaccessible"
|
||||
fi
|
||||
}
|
||||
|
||||
file_write () {
|
||||
if ! echo "$1" > "$2" ;
|
||||
then
|
||||
error "Error writing to $2 from $(pwd)"
|
||||
exit 14
|
||||
fi
|
||||
file_report "$2"
|
||||
}
|
||||
|
||||
high_mem_state () {
|
||||
if [ -z "$HIGH_MEM_STATE" ]
|
||||
then
|
||||
_t=$(grep OD_MCLK "$path/device/pp_od_clk_voltage" -A6)
|
||||
I=0
|
||||
while echo "$_t" | grep -q "$I:" ; do
|
||||
I=$((I + 1))
|
||||
done
|
||||
HIGH_MEM_STATE=$((I - 1))
|
||||
fi
|
||||
echo $HIGH_MEM_STATE
|
||||
}
|
||||
|
||||
set_core_state () {
|
||||
root_check
|
||||
echo "s$1: $2 MHz $3 mV"
|
||||
echo "s$1 $2 $3" > "$path/device/pp_od_clk_voltage"
|
||||
}
|
||||
|
||||
set_mem_state () {
|
||||
root_check
|
||||
echo "m$1: $2 MHz $3 mV"
|
||||
echo "m $1 $2 $3" > "$path/device/pp_od_clk_voltage"
|
||||
}
|
||||
|
||||
force_mem_state_high () {
|
||||
root_check
|
||||
echo "manual" > "$path/device/power_dpm_force_performance_level"
|
||||
high_mem_state > "$path/device/pp_dpm_mclk"
|
||||
echo "Forcing memory state to $(high_mem_state) (fix artifacting)"
|
||||
}
|
||||
|
||||
apply () {
|
||||
root_check
|
||||
echo "c" > "$path/device/pp_od_clk_voltage"
|
||||
echo "Profile applied"
|
||||
if [ -n "$automemfix" ] ; then
|
||||
force_mem_state_high
|
||||
fi
|
||||
}
|
||||
|
||||
reset_stock () {
|
||||
root_check
|
||||
if echo "0 1 2 3 4 5 6 7" > "$path/device/pp_dpm_sclk" && echo "r" > "$path/device/pp_od_clk_voltage" ; then
|
||||
echo "Reset to default"
|
||||
fi
|
||||
}
|
||||
|
||||
apply_power () {
|
||||
root_check
|
||||
if ! echo "$1" | grep -Eq '^[0-9]+$' ; then
|
||||
echo "Invalid power value" >&2
|
||||
exit 2
|
||||
elif [ "$1" -lt "$min_power" ] ; then
|
||||
echo "Power value too low" >&2
|
||||
exit 2
|
||||
elif [ -z "$1" ] ; then
|
||||
echo "No power value given" >&2
|
||||
exit 2
|
||||
else
|
||||
if echo "$1""000000" > $hwmon/power1_cap ; then
|
||||
echo "Power cap set to $1 W"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
set_profile () {
|
||||
read -r _states
|
||||
read -r _frequencies
|
||||
read -r _voltages
|
||||
I=1
|
||||
for T in $_states
|
||||
do
|
||||
if [ "$1" = "gpu" ] ; then
|
||||
set_core_state "$(echo "$_states" | awk -v I=$I '{print $I}')" "$(echo "$_frequencies" | awk -v I=$I '{print $I}')" "$(echo "$_voltages" | awk -v I=$I '{print $I}')"
|
||||
elif [ "$1" = "mem" ] ; then
|
||||
set_mem_state "$(echo "$_states" | awk -v I=$I '{print $I}')" "$(echo "$_frequencies" | awk -v I=$I '{print $I}')" "$(echo "$_voltages" | awk -v I=$I '{print $I}')"
|
||||
fi
|
||||
I=$((I + 1))
|
||||
done
|
||||
}
|
||||
|
||||
## locate device path
|
||||
if [ "$(lspci | grep -c VGA)" -gt 1 ]
|
||||
then
|
||||
if [ -z "$card_name" ] && [ -z "$pci_id" ] ; then
|
||||
error "Several GPUs are present and no GPU is specified"
|
||||
error "Edit GPU_NAME or GPU_PCI_ID in '$config_file'"
|
||||
exit 20
|
||||
fi
|
||||
if [ -z "$pci_id" ] ; then
|
||||
pci_id=$(lspci | grep VGA | grep "$card_name" | cut -d ' ' -f1)
|
||||
if [ "$(echo "$pci_id" | wc -l)" -gt 1 ] ; then
|
||||
error "More than one name match for GPU"
|
||||
exit 21
|
||||
elif [ "$(echo "$pci_id" | wc -l)" -lt 1 ] ; then
|
||||
error "No name match for GPU"
|
||||
exit 22
|
||||
fi
|
||||
fi
|
||||
if ! path=$(ls -l /sys/class/drm/card? | grep "$pci_id" | tr -s ' ' | cut -d ' ' -f9) ; then
|
||||
error "Error finding pci device"
|
||||
echo 23
|
||||
fi
|
||||
else
|
||||
path=/sys/class/drm/card0
|
||||
fi
|
||||
|
||||
hwmon=$path/device/hwmon/$(ls $path/device/hwmon)
|
||||
|
||||
if [ "$( printf "0x%08x\n" "$(cat /sys/module/amdgpu/parameters/ppfeaturemask)" )" != "0xffffffff" ] ; then
|
||||
error "PP feature not enabled"
|
||||
echo "Append 'amdgpu.ppfeaturemask=0xffffffff' to boot parameters to enable it" >&2
|
||||
exit 11
|
||||
fi
|
||||
|
||||
if [ ! -f "$path/device/pp_od_clk_voltage" ]
|
||||
then
|
||||
error "FATAL: overclocking file not found"
|
||||
error "Either feature is not properly enabled or this isn't a Radeon GPU"
|
||||
exit 12
|
||||
fi
|
||||
|
||||
# read arguments
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ "$#" -gt 0 ]
|
||||
then
|
||||
|
||||
if [ "$1" = "reset" ]; then
|
||||
reset_stock
|
||||
|
||||
elif [ "$1" = "gpu" ]; then
|
||||
|
||||
if [ "$2" = "profile" ]; then
|
||||
if [ -f "$profile_path/$3" ] ; then
|
||||
set_profile gpu < "$profile_path/$3"
|
||||
else
|
||||
if ! cd "$profile_path" 2>/dev/null ; then
|
||||
exit
|
||||
fi
|
||||
ls -p | grep -v /
|
||||
fi
|
||||
elif [ "$2" = "file" ]; then
|
||||
set_profile gpu < "$3"
|
||||
apply
|
||||
else
|
||||
echo "zgoc gpu <profile/file>"
|
||||
fi
|
||||
|
||||
elif [ "$1" = "mem" ]; then
|
||||
|
||||
if [ "$2" = "profile" ]; then
|
||||
if [ -f "$mem_path/$3" ] ; then
|
||||
set_profile mem < "$mem_path/$3"
|
||||
else
|
||||
if ! cd "$mem_path" 2>/dev/null ; then
|
||||
exit
|
||||
fi
|
||||
ls -p | grep -v /
|
||||
fi
|
||||
elif [ "$2" = "file" ]; then
|
||||
set_profile mem < "$3"
|
||||
apply
|
||||
else
|
||||
echo "zgoc mem <profile/file>"
|
||||
fi
|
||||
|
||||
elif [ "$1" = "power" ] ; then
|
||||
|
||||
kernel_req 4 20
|
||||
|
||||
if [ "$2" = "profile" ]; then
|
||||
if [ -f "$power_path/$3" ] ; then
|
||||
apply_power "$(cat "$power_path/$3")"
|
||||
else
|
||||
if ! cd "$power_path" 2>/dev/null ; then
|
||||
exit
|
||||
fi
|
||||
ls -p | grep -v /
|
||||
fi
|
||||
elif [ "$2" = "max" ]; then
|
||||
apply_power "$(val_convert 6 0 < $hwmon/power1_cap_max)"
|
||||
elif [ "$2" = "set" ]; then
|
||||
apply_power "$3"
|
||||
elif [ "$2" = "print" ]; then
|
||||
echo $(val_convert 6 0 < $hwmon/power1_cap) W
|
||||
else
|
||||
echo "zgoc power <max/profile/set/print>"
|
||||
fi
|
||||
|
||||
elif [ "$1" = "apply" ]; then
|
||||
apply
|
||||
|
||||
elif [ "$1" = "memfix" ]; then
|
||||
force_mem_state_high
|
||||
|
||||
elif [ "$1" = "print" ]; then
|
||||
cat $path/device/pp_od_clk_voltage
|
||||
|
||||
else
|
||||
usage
|
||||
fi
|
||||
else
|
||||
usage
|
||||
fi
|
||||
|
||||
exit 0
|
||||
178
zmc/zsmc
Executable file
178
zmc/zsmc
Executable file
|
|
@ -0,0 +1,178 @@
|
|||
#!/bin/sh
|
||||
|
||||
config_file="zsmc.conf"
|
||||
if [ ! -f "$config_file" ]
|
||||
then
|
||||
echo "Generating default config file"
|
||||
cat > "$config_file" << EOF
|
||||
# zsmc config file
|
||||
SCREEN_NAME=Minecraft
|
||||
JAR_FILE=server.jar
|
||||
JAVA_COMMAND=java
|
||||
JAVA_ARGUMENTS=-Xmx2G
|
||||
SERVER_ARGUMENTS=--nogui
|
||||
BACKUP_PATH=backup
|
||||
EOF
|
||||
exit 100
|
||||
fi
|
||||
|
||||
# quit if screen isn't installed
|
||||
which screen >/dev/null || { echo "screen not installed, screen is required for this script to work" >&2; exit 1 ; }
|
||||
|
||||
# load config
|
||||
. "$(pwd)/$config_file"
|
||||
|
||||
fname="$(basename "$0")"
|
||||
usage() {
|
||||
echo "$fname <argument>"
|
||||
echo 'Manage minecraft servers
|
||||
Backups do not work with bukkit and spigot
|
||||
|
||||
Arguments:
|
||||
start : Start server in background with screen
|
||||
startLocal : Start server on the current console
|
||||
console : Bring up the screen instance of the server (C^a then d to leave)
|
||||
eraseCache : Upgrade world and clear cached data
|
||||
backup [file] : Make a world backup. If no file is specifed the current date is used as name
|
||||
restore [file] : Restore this world backup. If no file is specified, will take the latest file
|
||||
log [date...] : Display entire log. No date means latest
|
||||
login [date...] : Display login/logout log. No date means latest
|
||||
|
||||
--DATE FORMAT --
|
||||
l for latest
|
||||
t for today
|
||||
yyyy-mm-dd for given day
|
||||
-<x> for x days before today
|
||||
'
|
||||
}
|
||||
|
||||
|
||||
# Functions
|
||||
|
||||
start_server ()
|
||||
{
|
||||
if screen -ls | cut -sd'.' -f2 | awk '{print $1}' | grep -qw "$SCREEN_NAME" # abort if server running
|
||||
then
|
||||
echo "A screen under the name '$SCREEN_NAME' is already running" >&2
|
||||
return 1
|
||||
else
|
||||
screen -dmS "$SCREEN_NAME" $JAVA_COMMAND $JAVA_ARGUMENTS -jar "$JAR_FILE" $SERVER_ARGUMENTS
|
||||
fi
|
||||
}
|
||||
|
||||
attach () {
|
||||
screen -r "$SCREEN_NAME"
|
||||
}
|
||||
|
||||
stop_server () {
|
||||
screen -S "$SCREEN_NAME" -X stuff "^Mstop^M"
|
||||
}
|
||||
|
||||
eraseCache ()
|
||||
{
|
||||
if screen -ls | cut -sd'.' -f2 | awk '{print $1}' | grep -qw "$SCREEN_NAME" # abort if server running
|
||||
then
|
||||
echo "A screen under the name '$SCREEN_NAME' is already running" >&2
|
||||
return 1
|
||||
else
|
||||
screen -dmS "$SCREEN_NAME" $JAVA_COMMAND $JAVA_ARGUMENTS -jar "$JAR_FILE" $SERVER_ARGUMENTS --forceUpgrade --eraseCache && stop_server && attach
|
||||
fi
|
||||
}
|
||||
|
||||
world_backup ()
|
||||
{
|
||||
# no server.properties
|
||||
[ ! -f server.properties ] && echo "server.properties not found" >&2 && return 1
|
||||
# extract save name
|
||||
world="$(grep "level-name=" server.properties | cut -d '=' -f2-)"
|
||||
|
||||
# create backup path
|
||||
[ ! -d "$BACKUP_PATH" ] && mkdir -p "$BACKUP_PATH"
|
||||
|
||||
# get filename
|
||||
FILE="$1"
|
||||
echo "$1" | grep -q '.tar.gz$' || FILE="$FILE.tar.gz" # add .tar.gz extension if not present
|
||||
|
||||
echo "Backing up world to $FILE"
|
||||
if [ -n "$(command -v pv)" ] # fancy progress bar
|
||||
then tar -cf - "$world" -P | pv -s "$(du -sb "$world" | awk '{print $1}')" | gzip > "$BACKUP_PATH/$FILE"
|
||||
else tar -cvzf "$BACKUP_PATH/$FILE" "$world"
|
||||
fi
|
||||
}
|
||||
|
||||
world_restore () {
|
||||
tar -xvf "$BACKUP_PATH/$1"
|
||||
}
|
||||
|
||||
show_log ()
|
||||
{
|
||||
# no arg = latest
|
||||
[ -z "$1" ] && show_log l
|
||||
|
||||
# latest
|
||||
if [ "$1" = "l" ] || [ "$1" = "latest" ]
|
||||
then
|
||||
cat logs/latest.log 2>/dev/null
|
||||
|
||||
# latest + all current date
|
||||
elif [ "$1" = "t" ] || [ "$1" = "today" ] ; then
|
||||
show_log l
|
||||
show_log "$(date -u "+%F")"
|
||||
|
||||
# -X : translate to date
|
||||
elif [ "$(echo "$1" | cut -c1)" = "-" ] ; then
|
||||
show_log "$(date -u --date=@$(( $(date -u +%s) - $((86400 * $(echo "$1" | cut -c2-) )) )) +%F)"
|
||||
|
||||
# date format iterate files
|
||||
else
|
||||
LIST=$(find logs -maxdepth 1 -type f -name "$1*")
|
||||
for I in $LIST
|
||||
do
|
||||
gzip -dc "$I" 2>/dev/null || cat $I
|
||||
done
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Main process
|
||||
|
||||
case $1 in
|
||||
start) start_server ;;
|
||||
startLocal) $JAVA_COMMAND $JAVA_ARGUMENTS -jar "$JAR_FILE" $SERVER_ARGUMENTS ;;
|
||||
console) attach ;;
|
||||
stop) stop_server ;;
|
||||
eraseCache) eraseCache ;;
|
||||
backup)
|
||||
shift 1
|
||||
if [ $# -gt 0 ]
|
||||
then world_backup "$1"
|
||||
else world_backup "$(date -u "+%F_%H%M%S")"
|
||||
fi
|
||||
;;
|
||||
log)
|
||||
shift 1
|
||||
if [ $# -gt 0 ]
|
||||
then for N ; do show_log "$N" ; done
|
||||
else show_log l
|
||||
fi
|
||||
;;
|
||||
login)
|
||||
shift 1
|
||||
if [ $# -gt 0 ]
|
||||
then for N ; do show_log "$N" | grep -E '] logged in with entity id | left the game' ; done
|
||||
else show_log l | grep -E '] logged in with entity id | left the game'
|
||||
fi
|
||||
;;
|
||||
restore)
|
||||
shift 1
|
||||
if [ "$#" -gt 0 ]
|
||||
then world_restore "$1"
|
||||
else world_restore "$(ls -lt "$BACKUP_PATH" | head -n 2 | tail -n 1 | awk '{print $9}')"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
7
zmc/zsmc.conf
Normal file
7
zmc/zsmc.conf
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# zsmc config file
|
||||
SCREEN_NAME=Minecraft
|
||||
JAR_FILE=server.jar
|
||||
JAVA_COMMAND=java
|
||||
JAVA_ARGUMENTS=-Xmx2G
|
||||
SERVER_ARGUMENTS=--nogui
|
||||
BACKUP_PATH=backup
|
||||
77
znotif/znotif
Executable file
77
znotif/znotif
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
#!/bin/bash
|
||||
|
||||
_arg_t=2
|
||||
|
||||
fname=$(basename "$0")
|
||||
usage () {
|
||||
echo "$fname [options] [command]
|
||||
Sends notification when the given command finished executing
|
||||
Options:
|
||||
-h Show this message then exit
|
||||
-t <sec> Time the notification stays. By default 2
|
||||
-T <title> Notification title
|
||||
-m <string> Displays this message when finished. Variable resolution on
|
||||
> Default message is '<command> finished'"
|
||||
}
|
||||
|
||||
warning () {
|
||||
if [ ! -n "$_opt_w" ] ; then
|
||||
printf "\033[0;33m$1\033[0m\n" >&2
|
||||
fi
|
||||
}
|
||||
error () {
|
||||
printf "\033[1;31m$1\033[0m\n" >&2
|
||||
}
|
||||
|
||||
_args=""
|
||||
|
||||
# $1 = message , $2 = time , $3 = title
|
||||
notify () {
|
||||
if which kdialog >/dev/null
|
||||
then
|
||||
kdialog --passivepopup "$1" $2 --title "$3"
|
||||
elif which notify-send >/dev/null
|
||||
then
|
||||
notify-send -t $2 "$3" "$1"
|
||||
else echo "No supported notification" >&2 && return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# read options
|
||||
while getopts ":hm:T:t:" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
m)
|
||||
if [ ! -n "$OPTARG" ]
|
||||
then
|
||||
error "m needs an argument"
|
||||
exit
|
||||
fi
|
||||
message=$OPTARG
|
||||
_opt_m=y
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ $# -gt 0 ]
|
||||
then
|
||||
[ ! -n "$_opt_m" ] && message="'$*' finished"
|
||||
[ -z "$title" ] && title=$*
|
||||
$@
|
||||
else
|
||||
[ ! -n "$_opt_m" ] && message="Ping"
|
||||
[ -z "$title" ] && title="Ping"
|
||||
fi
|
||||
|
||||
notify "$message" $_arg_t "$title"
|
||||
92
zosu/zosu
Executable file
92
zosu/zosu
Executable file
|
|
@ -0,0 +1,92 @@
|
|||
#!/bin/sh
|
||||
|
||||
bin=$(basename "$0")
|
||||
|
||||
config_file="zosu.conf"
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "$bin [options] <operation> [arguments]"
|
||||
echo 'Perform operations on a wined osu instance
|
||||
|
||||
Operations:
|
||||
start Start the wined osu
|
||||
kill Kill the wine server
|
||||
sound Change the sound driver
|
||||
|
||||
Options:
|
||||
-h Display this help
|
||||
-c Path to conf file (default zosu.conf)
|
||||
'
|
||||
}
|
||||
|
||||
while getopts ":hc:" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
c)
|
||||
config_file="$OPTARG"
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# resolve config file path
|
||||
[ "$(echo $config_file | cut -c1)" != "/" ] && config_file="$(pwd)/$config_file"
|
||||
|
||||
# load config file
|
||||
[ -f "$config_file" ] && . "$config_file"
|
||||
|
||||
# default environment
|
||||
[ -z "$OSUDIR" ] && export OSUDIR=osu
|
||||
[ -z "$WINEPREFIX" ] && export WINEPREFIX="$(pwd)/.wine"
|
||||
export vblank_mode=0
|
||||
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ -n "$1" ]
|
||||
then
|
||||
|
||||
if [ "$1" = "start" ]; then
|
||||
shift $((OPTIND))
|
||||
wine $OSUDIR/osu\!.exe $@
|
||||
|
||||
elif [ "$1" = "kill" ]; then
|
||||
wineserver -k
|
||||
|
||||
elif [ "$1" = "sound" ]; then
|
||||
|
||||
case $2 in
|
||||
"pulse")
|
||||
winetricks sound=pulse
|
||||
;;
|
||||
"stable")
|
||||
winetricks sound=pulse
|
||||
;;
|
||||
"alsa")
|
||||
winetricks sound=alsa
|
||||
;;
|
||||
"lowlatency")
|
||||
winetricks sound=alsa
|
||||
;;
|
||||
*)
|
||||
echo "$bin sound <pulse/alsa>"
|
||||
esac
|
||||
|
||||
else
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
152
zosu/zosu-install
Executable file
152
zosu/zosu-install
Executable file
|
|
@ -0,0 +1,152 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ "$OSUDIR" == "" ] ; then
|
||||
OSUDIR='osu'
|
||||
fi
|
||||
if [ "$WINEDIR" == "" ] ; then
|
||||
WINEDIR='$(pwd)/.wine'
|
||||
fi
|
||||
export WINEARCH=win32
|
||||
export WINEPREFIX=$(echo "echo $WINEDIR" | sh)
|
||||
|
||||
silentmk()
|
||||
{
|
||||
if [ ! -d "$1" ] ; then
|
||||
mkdir "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
pacman_packages()
|
||||
{
|
||||
sudo pacman -S --needed --noconfirm lib32-alsa-lib lib32-libpulse lib32-gnutls lib32-libxcomposite
|
||||
}
|
||||
|
||||
echo_red() {
|
||||
printf "\033[1;31m$1\033[0m\n"
|
||||
}
|
||||
echo_blue() {
|
||||
printf "\033[1;34m$1\033[0m\n"
|
||||
}
|
||||
echo_yellow() {
|
||||
printf "\033[1;33m$1\033[0m\n"
|
||||
}
|
||||
echo_white() {
|
||||
printf "\033[1;37m$1\033[0m\n"
|
||||
}
|
||||
_done() {
|
||||
printf "\033[1;32mDone\033[0m\n\n"
|
||||
}
|
||||
|
||||
abort()
|
||||
{
|
||||
echo_red "ERROR: ABORTING"
|
||||
exit $1
|
||||
}
|
||||
|
||||
if [ ! -n "$(command -v wine)" ]
|
||||
then
|
||||
echo_red "wine not installed"
|
||||
exit
|
||||
fi
|
||||
if [ ! -n "$(command -v winetricks)" ]
|
||||
then
|
||||
echo_yellow "winetricks not installed"
|
||||
read -p "Manually install winetricks? [Y/n]: " yn
|
||||
case $yn in
|
||||
[Nn]* )
|
||||
echo_red "Aborting"
|
||||
exit
|
||||
;;
|
||||
* )
|
||||
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
||||
chmod +x winetricks
|
||||
sudo mv -v winetricks /usr/local/bin
|
||||
_done
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ -n "$(command -v pacman)" ]
|
||||
then
|
||||
pacman_packages
|
||||
fi
|
||||
|
||||
echo_white "Wine environment will be setup. This can take a very long time and may fail"
|
||||
read -p "Proceed? [Y/n]: " yn
|
||||
case $yn in
|
||||
[Nn]* )
|
||||
echo_red "Aborting"
|
||||
exit
|
||||
;;
|
||||
* )
|
||||
;;
|
||||
esac
|
||||
|
||||
# The big one
|
||||
winetricks -q dotnet472 cjkfonts gdiplus > /dev/null || abort $?
|
||||
_done
|
||||
|
||||
# sound buffers
|
||||
echo_white "Optimizing sound buffer"
|
||||
cat > dsound.reg << "EOF"
|
||||
Windows Registry Editor Version 5.00
|
||||
|
||||
[HKEY_CURRENT_USER\Software\Wine\DirectSound]
|
||||
"HelBuflen"="512"
|
||||
"SndQueueMax"="3"
|
||||
EOF
|
||||
wine regedit dsound.reg > /dev/null 2>&1 || abort $?
|
||||
rm dsound.reg
|
||||
_done
|
||||
|
||||
# ALSA audio
|
||||
read -p "Experimental audio lag lowering? [Y/n]: " yn
|
||||
case $yn in
|
||||
[Nn]* )
|
||||
;;
|
||||
* )
|
||||
winetricks sound=alsa
|
||||
echo_yellow "If you encounter audio distortion, run 'zosu sound pulse' to revert"
|
||||
_done
|
||||
;;
|
||||
esac
|
||||
|
||||
# install osu
|
||||
read -p "Insall fresh osu? [Y/n]: " yn
|
||||
case $yn in
|
||||
[Nn]* )
|
||||
echo_blue "Provide a link '$OSUDIR' to the desired osu instance"
|
||||
;;
|
||||
* )
|
||||
wget https://m1.ppy.sh/r/osu\!install.exe
|
||||
echo_white "Starting osu installer. Don't change the install directory"
|
||||
wine osu\!install.exe > /dev/null 2>&1
|
||||
sleep 5
|
||||
ln -sf $WINEPREFIX/drive_c/users/$(whoami)/Local\ Settings/Application\ Data/osu\! $OSUDIR
|
||||
rm osu\!install.exe
|
||||
_done
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
echo_white "Creating zosu.conf"
|
||||
cat > zosu.conf << "EOF"
|
||||
OSUPATH=$OSUDIR
|
||||
export WINEPREFIX=$WINEDIR
|
||||
EOF
|
||||
|
||||
_done
|
||||
|
||||
echo_white "Creating osu.sh"
|
||||
cat > osu.sh << "EOF"
|
||||
#!/bin/sh
|
||||
DIR=$(dirname "\$0")
|
||||
cd "$DIR"
|
||||
|
||||
. "$(pwd)/zosu.conf"
|
||||
export vblank_mode=0
|
||||
|
||||
wine "$OSUDIR/osu!.exe" $@
|
||||
EOF
|
||||
chmod +x osu.sh
|
||||
|
||||
_done
|
||||
76
zosu/zosu-rater
Executable file
76
zosu/zosu-rater
Executable file
|
|
@ -0,0 +1,76 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
echo "$0 <rate> <file>"
|
||||
fi
|
||||
|
||||
RATE="$1"
|
||||
FILE="$2"
|
||||
|
||||
OUTPUTFILE="$(echo "$2" | sed 's/\.osu//g' | cut -d']' -f1) x$RATE].osu"
|
||||
|
||||
AUDIO=$(grep "AudioFilename:" "$FILE" | cut -d' ' -f2- | tr -d '\n\r')
|
||||
AUDIORATED=$(echo $AUDIO | cut -d'.' -f1)-x$RATE".mp3"
|
||||
|
||||
echo "" > $OUTPUTFILE
|
||||
rm "$OUTPUTFILE"
|
||||
|
||||
output_line () {
|
||||
printf "%s\r\n" "$1" >> $OUTPUTFILE
|
||||
}
|
||||
|
||||
audioRate () {
|
||||
ffmpeg -i "$AUDIO" -filter:a "asetrate=$(ffprobe -v error -show_entries stream=sample_rate -of default=noprint_wrappers=1:nokey=1 "$AUDIO")*$RATE" -y "$AUDIORATED"
|
||||
}
|
||||
|
||||
LINES=$(wc -l "$FILE" | cut -d' ' -f1)
|
||||
FFILE=$(cat "$FILE")
|
||||
|
||||
step_skip ()
|
||||
{
|
||||
printf "$(echo "$FFILE" | grep -B $LINES "$1" | head -n -1)" >> $OUTPUTFILE
|
||||
FFILE=$(echo "$FFILE" | grep -A $LINES "$1" | tail -n +2)
|
||||
}
|
||||
|
||||
step_skip "AudioFilename:"
|
||||
output_line "AudioFilename: $AUDIORATED"
|
||||
|
||||
PREVIEW=$(echo "$FFILE" | grep "PreviewTime:" | cut -d' ' -f2 | tr -d '\r\n')
|
||||
step_skip "PreviewTime:"
|
||||
output_line "PreviewTime: $(echo "$PREVIEW / $RATE" | bc | cut -d '.' -f1)"
|
||||
VERSION=$(echo "$FFILE" | grep "Version:" | cut -d':' -f2- | tr -d '\n\r')
|
||||
step_skip "Version:"
|
||||
output_line "Version:$VERSION x$RATE"
|
||||
|
||||
step_skip "BeatmapID:"
|
||||
output_line "BeatmapID:0"
|
||||
|
||||
step_skip "\[TimingPoints\]"
|
||||
TIMINGPOINTS=$(echo "$FFILE" | grep -B $LINES "\[HitObjects\]" | head -n -1)
|
||||
OBJECTS=$(echo "$FFILE" | grep -A $LINES "\[HitObjects\]" | tail -n +2)
|
||||
|
||||
output_line "[TimingPoints]"
|
||||
|
||||
N=$(echo "$TIMINGPOINTS" | wc -l)
|
||||
I=0
|
||||
|
||||
echo "$TIMINGPOINTS" | awk -F ',' "{ RATE=$RATE"'
|
||||
if ($7 == 0 || $7 == 1)
|
||||
{
|
||||
if ($7 == 1)
|
||||
{print int($1/RATE)","$2/RATE","$3","$4","$5","$6","$7","$8}
|
||||
else
|
||||
{print int($1/RATE)","$2","$3","$4","$5","$6","$7","$8}
|
||||
}
|
||||
}' >> "$OUTPUTFILE"
|
||||
|
||||
output_line "[HitObjects]"
|
||||
N=$(echo "$OBJECTS" | wc -l)
|
||||
echo "$OBJECTS" | awk -F "[,:]" "{RATE=$RATE"'
|
||||
if ($1)
|
||||
{print $1","$2","int($3/RATE)","$4","$5","int($6/RATE)":"$7":"$8":"$9":"$10}
|
||||
}
|
||||
' >> "$OUTPUTFILE"
|
||||
|
||||
audioRate
|
||||
98
zosu/zosu-rater_old
Executable file
98
zosu/zosu-rater_old
Executable file
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
echo "$0 <rate> <file>"
|
||||
fi
|
||||
|
||||
RATE="$1"
|
||||
FILE="$2"
|
||||
|
||||
OUTPUTFILE="$(echo "$2" | sed 's/\.osu//g' | cut -d']' -f1) x$RATE].osu"
|
||||
|
||||
AUDIO=$(grep "AudioFilename:" "$FILE" | cut -d' ' -f2- | tr -d '\n\r')
|
||||
AUDIORATED=$(echo $AUDIO | cut -d'.' -f1)-x$RATE".mp3"
|
||||
|
||||
echo "" > $OUTPUTFILE
|
||||
rm "$OUTPUTFILE"
|
||||
|
||||
output_line () {
|
||||
printf "%s\r\n" "$1" >> $OUTPUTFILE
|
||||
}
|
||||
|
||||
audioRate () {
|
||||
ffmpeg -i "$AUDIO" -filter:a "asetrate=$(ffprobe -v error -show_entries stream=sample_rate -of default=noprint_wrappers=1:nokey=1 "$AUDIO")*$RATE" -y "$AUDIORATED"
|
||||
}
|
||||
|
||||
LINES=$(wc -l "$FILE" | cut -d' ' -f1)
|
||||
FFILE=$(cat "$FILE")
|
||||
|
||||
step_skip ()
|
||||
{
|
||||
printf "$(echo "$FFILE" | grep -B $LINES "$1" | head -n -1)" >> $OUTPUTFILE
|
||||
FFILE=$(echo "$FFILE" | grep -A $LINES "$1" | tail -n +2)
|
||||
}
|
||||
|
||||
step_skip "AudioFilename:"
|
||||
output_line "AudioFilename: $AUDIORATED"
|
||||
|
||||
PREVIEW=$(echo "$FFILE" | grep "PreviewTime:" | cut -d' ' -f2 | tr -d '\r\n')
|
||||
step_skip "PreviewTime:"
|
||||
output_line "PreviewTime: $(echo "$PREVIEW / $RATE" | bc | cut -d '.' -f1)"
|
||||
VERSION=$(echo "$FFILE" | grep "Version:" | cut -d':' -f2- | tr -d '\n\r')
|
||||
step_skip "Version:"
|
||||
output_line "Version:$VERSION x$RATE"
|
||||
|
||||
step_skip "BeatmapID:"
|
||||
output_line "BeatmapID:0"
|
||||
|
||||
step_skip "\[TimingPoints\]"
|
||||
TIMINGPOINTS=$(echo "$FFILE" | grep -B $LINES "\[HitObjects\]" | head -n -1)
|
||||
OBJECTS=$(echo "$FFILE" | grep -A $LINES "\[HitObjects\]" | tail -n +2)
|
||||
|
||||
output_line "[TimingPoints]"
|
||||
|
||||
N=$(echo "$TIMINGPOINTS" | wc -l)
|
||||
I=0
|
||||
for LINE in $TIMINGPOINTS
|
||||
do
|
||||
# TODO: ignore colors
|
||||
I=$((I + 1))
|
||||
printf "Timing: %s%%\r" $(echo "$I * 100 / $N" | bc)
|
||||
if [ -n "$(echo $LINE | grep ",")" ]
|
||||
then
|
||||
VAL=$(echo "$(echo "$LINE" | cut -d ',' -f1) / $RATE" | bc | cut -d '.' -f1)
|
||||
BPM=$(echo "$LINE" | cut -d',' -f7)
|
||||
if [ $BPM -eq 1 ] ; then
|
||||
VAL2=$(echo "$(echo "$LINE" | cut -d ',' -f2) / $RATE" | bc -l)
|
||||
output_line "$VAL,$VAL2,$(echo "$LINE" | cut -d ',' -f3-)"
|
||||
else
|
||||
output_line "$VAL,$(echo "$LINE" | cut -d ',' -f2-)"
|
||||
fi
|
||||
else
|
||||
output_line "$LINE"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
|
||||
output_line "[HitObjects]"
|
||||
N=$(echo "$OBJECTS" | wc -l)
|
||||
I=0
|
||||
for LINE in $OBJECTS
|
||||
do
|
||||
I=$((I + 1))
|
||||
printf "Objects: %s%%\r" $(echo "$I * 100 / $N" | bc)
|
||||
if [ -n "$(echo $LINE | grep ",")" ]
|
||||
then
|
||||
V12=$(echo $LINE | cut -d',' -f-2)
|
||||
V3=$(echo "$(echo "$LINE" | cut -d ',' -f3) / $RATE" | bc | cut -d '.' -f1)
|
||||
V45=$(echo $LINE | cut -d',' -f4-5)
|
||||
V6=$(echo "$(echo $LINE | cut -d',' -f6 | cut -d':' -f1) / $RATE" | bc | cut -d '.' -f1)
|
||||
CPM=$(echo $LINE | cut -d':' -f2-)
|
||||
output_line "$V12,$V3,$V45,$V6:$CPM"
|
||||
else
|
||||
output_line $LINE
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
audioRate
|
||||
15
zpac/test.sh
Executable file
15
zpac/test.sh
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
|
||||
VAR=""
|
||||
_date()
|
||||
{
|
||||
if [ -z "$VAR" ]
|
||||
then
|
||||
VAR=$(date)
|
||||
echo "date" >&2
|
||||
fi
|
||||
echo $VAR
|
||||
}
|
||||
|
||||
_date
|
||||
_date
|
||||
412
zpac/zpac
Executable file
412
zpac/zpac
Executable file
|
|
@ -0,0 +1,412 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "Usage: zpac <operation> [sub-operation]"
|
||||
echo "Operations:"
|
||||
echo " master : Master volume operation"
|
||||
echo " app : Application volume operation"
|
||||
echo " mic : Mic operation"
|
||||
echo " fx : FX operation"
|
||||
echo " unload-hdmi : Unload HDMI sound modules"
|
||||
echo " tsched : Turn on or off scheduling"
|
||||
}
|
||||
|
||||
value()
|
||||
{
|
||||
if [ "$(printf "%s" "$1" | tail -c 1)" = "%" ]
|
||||
then
|
||||
echo "$(echo "$1" | cut -d'%' -f1) * 65535 / 100" | bc
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
tsched_0() {
|
||||
sed -i 's|^load-module module-udev-detect.*|load-module module-udev-detect tsched=0|' /etc/pulse/default.pa
|
||||
}
|
||||
tsched_1() {
|
||||
sed -i 's|^load-module module-udev-detect.*|load-module module-udev-detect|' /etc/pulse/default.pa
|
||||
}
|
||||
|
||||
|
||||
FXon()
|
||||
{
|
||||
screen -dmS "pulseeffects" pulseeffects --gapplication-service > /dev/null 2>&1
|
||||
echo "FX on"
|
||||
}
|
||||
FXoff()
|
||||
{
|
||||
pulseeffects -q
|
||||
echo "FX off"
|
||||
}
|
||||
FXtoggle()
|
||||
{
|
||||
if [ "$(pgrep -c pulseeffects)" -lt 1 ]
|
||||
then FXon
|
||||
else FXoff
|
||||
fi
|
||||
}
|
||||
FXstate()
|
||||
{
|
||||
if [ "$(pgrep -c pulseeffects)" -ge 1 ]
|
||||
then echo "FX on"
|
||||
else echo "FX off"
|
||||
fi
|
||||
}
|
||||
|
||||
get_list_sinks()
|
||||
{
|
||||
if [ -z "$LIST_SINKS" ]
|
||||
then
|
||||
LIST_SINKS="$(pacmd list-sinks)"
|
||||
fi
|
||||
}
|
||||
list_sinks() { echo "$LIST_SINKS"; }
|
||||
|
||||
get_list_sink_inputs()
|
||||
{
|
||||
if [ -z "$LIST_SINK_INPUTS" ]
|
||||
then
|
||||
LIST_SINK_INPUTS="$(pacmd list-sink-inputs)"
|
||||
fi
|
||||
}
|
||||
list_sink_inputs() { echo "$LIST_SINK_INPUTS"; }
|
||||
|
||||
get_list_sources()
|
||||
{
|
||||
if [ -z "$LIST_SOURCES" ]
|
||||
then
|
||||
LIST_SOURCES="$(pacmd list-sources)"
|
||||
fi
|
||||
}
|
||||
list_sources() { echo "$LIST_SOURCES"; }
|
||||
|
||||
master_index() {
|
||||
list_sinks | grep "* index:" | awk '{print $3}'
|
||||
}
|
||||
|
||||
##############
|
||||
# SINK OPERATIONS
|
||||
sinkvolume()
|
||||
{
|
||||
list_sinks | grep -E "(index: )|(volume: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $3}'
|
||||
}
|
||||
sinkvolumep()
|
||||
{
|
||||
list_sinks | grep -E "(index: )|(volume: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $5}'
|
||||
}
|
||||
sinkvolumeset()
|
||||
{
|
||||
R="$(pacmd set-sink-volume "$1" "$(value $2)")"
|
||||
if [ -z "$R" ] ; then
|
||||
echo "$3 @ $2"
|
||||
else
|
||||
echo "$R"
|
||||
fi
|
||||
}
|
||||
sinkmutestate()
|
||||
{
|
||||
if [ "$(list_sinks | grep -E "(index: $1)|(muted: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $2}')" = "yes" ]
|
||||
then echo "$2 mute on"
|
||||
else echo "$2 mute off"
|
||||
fi
|
||||
}
|
||||
sinkmuteset()
|
||||
{
|
||||
R="$(pacmd set-sink-mute "$1" "$(value $2)")"
|
||||
if [ -z "$R" ] ; then
|
||||
if [ "$2" -eq 1 ]
|
||||
then echo "$3 mute on"
|
||||
else echo "$3 mute off"
|
||||
fi
|
||||
else
|
||||
echo "$R"
|
||||
fi
|
||||
}
|
||||
sinkmutetoggle()
|
||||
{
|
||||
if sinkmutestate $1 | grep -q "mute on"; then
|
||||
sinkmuteset $1 0 $2
|
||||
else
|
||||
sinkmuteset $1 1 $2
|
||||
fi
|
||||
}
|
||||
|
||||
################
|
||||
# SINK INPUT OPERATIONS
|
||||
sinkinvolume()
|
||||
{
|
||||
list_sink_inputs | grep -E "(index: )|(volume: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $3}'
|
||||
}
|
||||
sinkinvolumep()
|
||||
{
|
||||
list_sink_inputs | grep -E "(index: )|(volume: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $5}'
|
||||
}
|
||||
sinkinlist()
|
||||
{
|
||||
list_sink_inputs | grep application.process.binary | cut -d '"' -f2
|
||||
}
|
||||
sinkinvolumeset()
|
||||
{
|
||||
sinkid=$(list_sink_inputs | grep -E "(index: $1)|(sink: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $2}')
|
||||
sinkvol=$(list_sinks | grep -E "(index: )|(volume: )" | grep "index: $sinkid" -A1 | tail -n1 | awk '{print $3}')
|
||||
val=$(echo "$(value $2)"'*'"$sinkvol / 65536" | bc)
|
||||
R="$(pacmd set-sink-input-volume "$1" "$val")"
|
||||
if [ -z "$R" ] ; then
|
||||
echo "app \"$3\" @ $2"
|
||||
else
|
||||
echo "$R"
|
||||
fi
|
||||
}
|
||||
sinkin_get_indexes()
|
||||
{
|
||||
list_sink_inputs | grep -E "(index: )|(application.process.binary = )" | grep "application.process.binary = \"$1\"" -B1 | head -n1 | awk '{print $2}'
|
||||
}
|
||||
|
||||
#############
|
||||
# SOURCE OPERATIONS
|
||||
sourcelist()
|
||||
{
|
||||
list_sources | grep device.product.name | cut -d '"' -f2
|
||||
}
|
||||
sourcevolume()
|
||||
{
|
||||
list_sources | grep -E "(index: )|(volume: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $3}'
|
||||
}
|
||||
sourcevolumep()
|
||||
{
|
||||
list_sources | grep -E "(index: )|(volume: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $5}'
|
||||
}
|
||||
sourcevolumeset()
|
||||
{
|
||||
R="$(pacmd set-source-volume "$1" "$(value $2)")"
|
||||
if [ -z "$R" ] ; then
|
||||
echo "mic \"$3\" @ $2"
|
||||
else
|
||||
echo "$R"
|
||||
fi
|
||||
}
|
||||
source_get_default_name()
|
||||
{
|
||||
list_sources | grep -E '(* index: )|(device.product.name = )' | grep -A1 "* index: " | tail -n1 | cut -d '"' -f2
|
||||
}
|
||||
source_get_index()
|
||||
{
|
||||
if [ "$1" = "default" ]
|
||||
then
|
||||
list_sources | grep '* index: ' | awk '{print $3}'
|
||||
elif [ -n "$1" ]
|
||||
then
|
||||
list_sources | grep -E "(index: )|(device.product.name = )" | tr '*' ' ' | grep "device.product.name = \"$1"\" -B1 | grep "index:" | awk '{print $2}'
|
||||
fi
|
||||
}
|
||||
source_name()
|
||||
{
|
||||
if [ "$1" = "default" ]
|
||||
then
|
||||
source_get_default_name
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
sourcemutestate()
|
||||
{
|
||||
if [ "$(list_sources | grep -E "(index: $1)|(muted: )" | grep "index: $1" -A1 | tail -n1 | awk '{print $2}')" = "yes" ]
|
||||
then echo "mic \"$2\" mute on"
|
||||
else echo "mic \"$2\" mute off"
|
||||
fi
|
||||
}
|
||||
sourcemuteset()
|
||||
{
|
||||
R="$(pacmd set-source-mute "$1" "$(value $2)")"
|
||||
if [ -z "$R" ] ; then
|
||||
if [ "$2" -eq 1 ]
|
||||
then echo "mic \"$3\" mute on"
|
||||
else echo "mic \"$3\" mute off"
|
||||
fi
|
||||
else
|
||||
echo "$R"
|
||||
fi
|
||||
}
|
||||
sourcemutetoggle()
|
||||
{
|
||||
if sourcemutestate $1 | grep -q "mute on"; then
|
||||
sourcemuteset $1 0 "$2"
|
||||
else
|
||||
sourcemuteset $1 1 "$2"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
elif [ "$1" = "master" ]
|
||||
then
|
||||
get_list_sinks
|
||||
case $2 in
|
||||
setvolume) sinkvolumeset $(master_index) $3 "master" ;;
|
||||
volume) sinkvolumep $(master_index) $3 "master" ;;
|
||||
mute)
|
||||
case $3 in
|
||||
on) sinkmuteset $(master_index) 1 master ;;
|
||||
off) sinkmuteset $(master_index) 0 master ;;
|
||||
toggle) sinkmutetoggle $(master_index) master ;;
|
||||
state) sinkmutestate $(master_index) master ;;
|
||||
*) echo "zpac master mute <on/off/toggle/state>" && exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
*) echo "zpac master <volume/setvolume/mute>" && exit 1 ;;
|
||||
esac
|
||||
|
||||
elif [ "$1" = "app" ]
|
||||
then
|
||||
|
||||
if [ "$2" = "list" ]
|
||||
then
|
||||
get_list_sink_inputs
|
||||
sinkinlist
|
||||
|
||||
elif [ "$2" = "volume" ]
|
||||
then
|
||||
get_list_sink_inputs
|
||||
shift $((OPTIND+1))
|
||||
for N
|
||||
do
|
||||
for I in $(sinkin_get_indexes "$N")
|
||||
do
|
||||
sinkinvolumep $I
|
||||
done
|
||||
done
|
||||
|
||||
elif [ "$2" = "setvolume" ]
|
||||
then
|
||||
|
||||
if [ -n "$3" ]
|
||||
then
|
||||
vol=$3
|
||||
shift $((OPTIND+2))
|
||||
get_list_sink_inputs
|
||||
get_list_sinks
|
||||
for N
|
||||
do
|
||||
for I in $(sinkin_get_indexes "$N")
|
||||
do
|
||||
sinkinvolumeset $I $vol "$N"
|
||||
done
|
||||
done
|
||||
else
|
||||
echo "zpac app setvolume <volume> <binary...>"
|
||||
fi
|
||||
|
||||
else
|
||||
echo "zpac app <list/setvolume>"
|
||||
fi
|
||||
|
||||
elif [ "$1" = "mic" ]
|
||||
then
|
||||
|
||||
if [ "$2" = "list" ]
|
||||
then
|
||||
|
||||
get_list_sources
|
||||
sourcelist
|
||||
|
||||
elif [ "$2" = "volume" ]
|
||||
then
|
||||
get_list_sources
|
||||
shift $((OPTIND+1))
|
||||
for N
|
||||
do
|
||||
sourcevolumep $(sinkin_get_indexes "$N")
|
||||
done
|
||||
|
||||
elif [ "$2" = "setvolume" ]
|
||||
then
|
||||
|
||||
if [ -n "$3" ]
|
||||
then
|
||||
get_list_sources
|
||||
vol=$3
|
||||
shift $((OPTIND+2))
|
||||
for N
|
||||
do
|
||||
sourcevolumeset $(source_get_index "$N") $vol "$(source_name "$N")"
|
||||
done
|
||||
else
|
||||
echo "zpac mic setvolume <volume> <mic...>"
|
||||
fi
|
||||
|
||||
elif [ "$2" = "mute" ]
|
||||
then
|
||||
get_list_sources
|
||||
case $3 in
|
||||
on|off|toggle|state) s=$3 ;;
|
||||
*) echo "zpac mic mute <on/off/toggle/state> <mic...>" && exit 1 ;;
|
||||
esac
|
||||
|
||||
shift $((OPTIND+2))
|
||||
for N
|
||||
do
|
||||
case $s in
|
||||
"on") sourcemuteset $(source_get_index "$N") 1 "$(source_name "$N")" ;;
|
||||
"off") sourcemuteset $(source_get_index "$N") 0 "$(source_name "$N")" ;;
|
||||
"toggle") sourcemutetoggle $(source_get_index "$N") "$(source_name "$N")" ;;
|
||||
"state") sourcemutestate $(source_get_index "$N") "$(source_name "$N")" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
else
|
||||
echo "zpac mic <list/volume/setvolume/mute>"
|
||||
fi
|
||||
|
||||
|
||||
elif [ "$1" = "fx" ]
|
||||
then
|
||||
[ -z "$(which pulseeffects)" ] && echo "No FX available" >&2 && exit 1
|
||||
|
||||
case $2 in
|
||||
on|off|toggle|state) MODE=$2 ;;
|
||||
*) echo "zpac fx <on/off/toggle/state>" && exit 1 ;;
|
||||
esac
|
||||
|
||||
if [ -z "$3" ] #all fx
|
||||
then
|
||||
case $MODE in
|
||||
on) FXon ;;
|
||||
off) FXoff ;;
|
||||
toggle) FXtoggle ;;
|
||||
state) FXstate ;;
|
||||
esac
|
||||
else
|
||||
echo "FX '$3' not found"
|
||||
fi
|
||||
|
||||
elif [ "$1" = "unload-hdmi" ]
|
||||
then
|
||||
|
||||
for I in $(lspci | grep HDMI | awk '{print $1}' | tr ':' '_')
|
||||
do
|
||||
pacmd unload-module $(pacmd list-modules | grep "pci-0000_$I" -B2 | head -n 1 | awk '{print $2}') > /dev/null 2>&1
|
||||
done
|
||||
|
||||
elif [ "$1" = "tsched" ]
|
||||
then
|
||||
|
||||
if [ "$2" = "0" ]
|
||||
then
|
||||
tsched_0
|
||||
|
||||
elif [ "$2" = "1" ]
|
||||
then
|
||||
tsched_1
|
||||
|
||||
else
|
||||
echo "zpac tsched <0/1>"
|
||||
fi
|
||||
|
||||
else
|
||||
usage
|
||||
fi
|
||||
239
zrct2/zrct2-install
Executable file
239
zrct2/zrct2-install
Executable file
|
|
@ -0,0 +1,239 @@
|
|||
#!/bin/sh
|
||||
|
||||
# values: true/false
|
||||
# parameters:
|
||||
# DISCORD_RPC
|
||||
# DESKTOP_ENTRY
|
||||
# CLEAN_SRC
|
||||
|
||||
echo_red () {
|
||||
printf "\033[1;31m%s\033[0m\n" "$1"
|
||||
}
|
||||
echo_blue () {
|
||||
printf "\033[1;34m%s\033[0m\n" "$1"
|
||||
}
|
||||
echo_yellow () {
|
||||
printf "\033[1;33m%s\033[0m\n" "$1"
|
||||
}
|
||||
echo_white () {
|
||||
printf "\033[1;37m%s\033[0m\n" "$1"
|
||||
}
|
||||
_done () {
|
||||
printf "\033[1;32mDone\033[0m\n\n"
|
||||
}
|
||||
warning () {
|
||||
printf "\033[0;33m%s\033[0m\n" "$1" > /dev/stderr
|
||||
}
|
||||
|
||||
abort()
|
||||
{
|
||||
echo_red "ERROR: ABORTING" > /dev/stderr
|
||||
exit "$1"
|
||||
}
|
||||
|
||||
APT_PACKAGES="gcc g++ git make cmake libsdl2-dev libicu-dev pkg-config libjansson-dev libspeex-dev libspeexdsp-dev libcurl4-openssl-dev libcrypto++-dev libfontconfig1-dev libfreetype6-dev libpng-dev libssl-dev libzip-dev"
|
||||
DNF_PACKAGES="gcc gcc-c++ jansson-devel openssl-devel SDL2-devel libicu-devel speexdsp-devel libcurl-devel cmake fontconfig-devel freetype-devel libpng-devel libzip-devel mesa-libGL-devel"
|
||||
PACMAN_PACKAGES="gcc gcc-libs git cmake sdl2 fontconfig libzip libpng curl jansson speexdsp openssl icu"
|
||||
|
||||
echo_white "Installing packages"
|
||||
if [ -n "$(command -v apt)" ]
|
||||
then
|
||||
sudo apt install --no-install-recommends -y $APT_PACKAGES || abort $?
|
||||
elif [ -n "$(command -v dnf)" ]
|
||||
then
|
||||
sudo dnf install $DNF_PACKAGES || abort $?
|
||||
elif [ -n "$(command -v pacman)" ]
|
||||
then
|
||||
sudo pacman -S --needed $PACMAN_PACKAGES || abort $?
|
||||
else
|
||||
warning "Unsupported packaging system. Skipping package install and attempting to continue"
|
||||
fi
|
||||
_done
|
||||
|
||||
if [ "$DESTDIR" = "" ] ; then
|
||||
DESTDIR='OpenRCT2'
|
||||
fi
|
||||
if [ "$SRCDIR" = "" ] ; then
|
||||
SRCDIR='openrct2-src'
|
||||
fi
|
||||
|
||||
mkdir -p "$SRCDIR"
|
||||
cd "$SRCDIR" || abort $?
|
||||
|
||||
## PULLING SOURCE ## ./$SRCDIR
|
||||
echo_white "Getting source code"
|
||||
if [ -d "OpenRCT2" ]
|
||||
then
|
||||
echo_blue "Source code already present"
|
||||
cd OpenRCT2 || abort $?
|
||||
git pull || abort $?
|
||||
else
|
||||
git clone https://github.com/OpenRCT2/OpenRCT2.git || abort $?
|
||||
cd OpenRCT2 || abort $?
|
||||
fi
|
||||
_done
|
||||
|
||||
unset DISCORDRPC
|
||||
add_discord_rpc()
|
||||
{
|
||||
DISCORDRPC=true
|
||||
echo_white "Getting source code"
|
||||
if [ -d "discord-rpc" ]
|
||||
then
|
||||
echo_blue "Discord rpc already present"
|
||||
git -C discord-rpc pull || abort $?
|
||||
else
|
||||
git clone https://github.com/discordapp/discord-rpc.git || abort $?
|
||||
fi
|
||||
echo_white "Getting rapidjson fix"
|
||||
if [ -d "rapidjson" ]
|
||||
then
|
||||
echo_blue "rapidjson already present"
|
||||
git -C rapidjson pull || abort $?
|
||||
else
|
||||
git clone https://github.com/janisozaur/rapidjson.git || abort $?
|
||||
fi
|
||||
cp -r rapidjson/include/rapidjson discord-rpc/src || abort $?
|
||||
_done
|
||||
}
|
||||
remove_discord_rpc()
|
||||
{
|
||||
unset DISCORDRPC
|
||||
if [ -d "discord-rpc" ]
|
||||
then
|
||||
echo_yellow "Discord rpc present, deleting"
|
||||
rm -rf discord-rpc || abort $?
|
||||
fi
|
||||
if [ -d "rapidjson" ]
|
||||
then
|
||||
echo_yellow "rapidjson present, deleting"
|
||||
rm -rf rapidjson || abort $?
|
||||
fi
|
||||
}
|
||||
|
||||
## DISCORD-RPC ## ./$SCRDIR/OpenRCT2
|
||||
if [ -n "$DISCORD_RPC" ]
|
||||
then
|
||||
if [ "$DISCORD_RPC" = "true" ]
|
||||
then
|
||||
add_discord_rpc
|
||||
else
|
||||
remove_discord_rpc
|
||||
fi
|
||||
else
|
||||
printf "Add discord rich presence?(may cause compilation errors)[y/N]: "
|
||||
read -r discord
|
||||
case $discord in
|
||||
[Yy]* )
|
||||
add_discord_rpc
|
||||
;;
|
||||
* )
|
||||
remove_discord_rpc
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
## CMAKE ## ./$SCRDIR/OpenRCT2
|
||||
echo_white "Preparing build files"
|
||||
if [ -d "build" ]
|
||||
then
|
||||
echo_yellow "Build files already present. Deleting and rebuilding"
|
||||
rm -rd build
|
||||
fi
|
||||
mkdir -p build || abort $?
|
||||
cd build || abort $?
|
||||
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. || abort $?
|
||||
_done
|
||||
|
||||
## BUILD ## ./$SCRDIR/OpenRCT2/build
|
||||
echo_white "Building binary"
|
||||
|
||||
if ! make -j "$(nproc --all)"
|
||||
then
|
||||
if [ -n "$DISCORDRPC" ]
|
||||
then
|
||||
echo_red "Compliation with discord-rpc failed. Retry without." >/dev/stderr
|
||||
abort 1
|
||||
else
|
||||
abort 1
|
||||
fi
|
||||
fi
|
||||
_done
|
||||
echo_white "Building g2.dat"
|
||||
make g2 -j "$(nproc --all)" || abort $?
|
||||
_done
|
||||
|
||||
## DOWNLOAD DATA ## ./$SCRDIR/OpenRCT2/build
|
||||
echo_white "Downloading game data"
|
||||
mkdir -p temp_install || abort $?
|
||||
DESTDIR=./temp_install make install || abort $?
|
||||
_done
|
||||
|
||||
## MAKE FOLDERS ## ./$SCRDIR/OpenRCT2/build
|
||||
echo_white "Making game folders"
|
||||
mkdir -p "../../../$DESTDIR" || abort $?
|
||||
mkdir -p "../../../$DESTDIR/data" || abort $?
|
||||
cp -r temp_install/usr/local/share/openrct2/* "../../../$DESTDIR/data" || abort $?
|
||||
cp "temp_install/usr/local/share/icons/hicolor/256x256/apps/openrct2.png" "../../../$DESTDIR/icon.png" || abort $?
|
||||
cp openrct2 openrct2-cli "../../../$DESTDIR" || abort $?
|
||||
_done
|
||||
|
||||
cd "../../.." || abort $?
|
||||
cd "$DESTDIR" || abort $?
|
||||
|
||||
add_desktop_entry()
|
||||
{
|
||||
{
|
||||
echo "[Desktop Entry]"
|
||||
echo "Name=OpenRCT2"
|
||||
echo "Comment=RCT2 but Open!"
|
||||
echo "Type=Application"
|
||||
echo "Exec=$(pwd)/openrct2"
|
||||
echo "Icon=$(pwd)/icon.png"
|
||||
echo "Categories=Game"
|
||||
echo "Keywords=Roller;Coaster;Tycoon"
|
||||
} > openrct2.desktop
|
||||
sudo ln -sf "$(pwd)/openrct2.desktop" "/usr/share/applications"
|
||||
}
|
||||
|
||||
## DESKTOP ENTRY ## ./$DESTDIR
|
||||
if [ -n "$DESKTOP_ENTRY" ]
|
||||
then
|
||||
if [ "$DESKTOP_ENTRY" = "true" ]
|
||||
then
|
||||
add_desktop_entry
|
||||
fi
|
||||
else
|
||||
printf "Do you want to add a desktop entry (/usr/share)?[Y/n]: "
|
||||
read -r yn
|
||||
case $yn in
|
||||
[Nn]* )
|
||||
;;
|
||||
* )
|
||||
add_desktop_entry
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
cd .. || abort $?
|
||||
|
||||
## CLEAN ## ./
|
||||
if [ -n "$CLEAN_SRC" ]
|
||||
then
|
||||
if [ "$CLEAN_SRC" = "true" ]
|
||||
then
|
||||
rm -rf "$SRCDIR"
|
||||
fi
|
||||
else
|
||||
printf "Clean source files?[Y/n]: "
|
||||
read -r yn
|
||||
case $yn in
|
||||
[Nn]* )
|
||||
;;
|
||||
* )
|
||||
rm -rf "$SRCDIR"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
exit 0
|
||||
129
zrct2/zsrct2
Executable file
129
zrct2/zsrct2
Executable file
|
|
@ -0,0 +1,129 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage() {
|
||||
echo "Usage: zrct [options] <operation>"
|
||||
echo 'Set of operations for OpenRCT2 server management.
|
||||
By default reads zsrct2.conf for config
|
||||
|
||||
Operations:
|
||||
start start in screen instance in background
|
||||
startLocal start the server in the current console
|
||||
console prompt the screen instance (C-a + d to leave)
|
||||
backup make a backup of current save
|
||||
getautosave get latest autosave and sets it as active save
|
||||
-> auto backup of current save
|
||||
| alias: get
|
||||
update recompile from latest source. Will overwrite previous server
|
||||
|
||||
Options:
|
||||
-h display help
|
||||
-c <file> use this file for config
|
||||
-s <save> uses provided save file
|
||||
-S <server> uses this server instance (folder)
|
||||
'
|
||||
}
|
||||
|
||||
save_backup () {
|
||||
echo "Backing up '$save_file' to $1.sv6.gz"
|
||||
cp "$save_file" "$backup_path/$1.sv6"
|
||||
gzip "$backup_path/$1.sv6"
|
||||
}
|
||||
|
||||
unset save_file
|
||||
|
||||
config_file="zsrct2.conf"
|
||||
while getopts ":hS:s:c:" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
S)
|
||||
server_path=${OPTARG}
|
||||
;;
|
||||
s)
|
||||
save_file=${OPTARG}
|
||||
;;
|
||||
c)
|
||||
config_file=${OPTARG}
|
||||
;;
|
||||
*)
|
||||
echo "Incorrect option: $OPTARG"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ ! -f "$config_file" ]
|
||||
then
|
||||
echo "Generating default config file"
|
||||
echo '# zsrct2 1.0 config file
|
||||
SAVE_NAME=
|
||||
SERVER_NAME=server
|
||||
PORT=11753
|
||||
SCREEN_NAME=OpenRCT2
|
||||
SAVE_FOLDER=saves
|
||||
BACKUP_FOLDER=saves/backup
|
||||
DATA_FOLDER=data
|
||||
SRC_FOLDER=src
|
||||
' >> "$config_file" || exit 1
|
||||
fi
|
||||
|
||||
save_name=$(grep "SAVE_NAME=" "$config_file" | cut -d '=' -f2-)
|
||||
server_path=$(grep "SERVER_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
port=$(grep "PORT=" "$config_file" | cut -d '=' -f2-)
|
||||
screen_name=$(grep "SCREEN_NAME=" "$config_file" | cut -d '=' -f2-)
|
||||
save_path=$(grep "SAVE_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
backup_path=$(grep "BACKUP_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
data_path=$(grep "DATA_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
src_path=$(grep "SRC_PATH=" "$config_file" | cut -d '=' -f2-)
|
||||
|
||||
[ -z "$save_file" ] && save_file="$save_path/$save_name.sv6"
|
||||
|
||||
[ ! -d "$backup_path" ] && mkdir -p "$backup_path"
|
||||
[ ! -d "$save_path" ] && mkdir -p "$save_path"
|
||||
[ ! -d "$data_path" ] && mkdir -p "$data_path"
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ "$1" ]
|
||||
then
|
||||
if [ "$1" = "start" ]
|
||||
then
|
||||
screen -dmS "$screen_name" "$server_path/openrct2" host "$save_file" --user-data-path "$data_path" --port "$port" --headless
|
||||
|
||||
elif [ "$1" = "startLocal" ]
|
||||
then
|
||||
"$server_path/openrct2" host "$save_file" --user-data-path "$data_path" --port "$port" --headless
|
||||
|
||||
elif [ "$1" = "console" ]
|
||||
then
|
||||
screen -r "$screen_name"
|
||||
|
||||
elif [ "$1" = "backup" ]
|
||||
then
|
||||
|
||||
if [ -n "$2" ]
|
||||
then
|
||||
save_backup "$2"
|
||||
else
|
||||
save_backup "$save_name"_"$(date -u "+20%y-%m-%d_%H%M%S")"
|
||||
fi
|
||||
|
||||
elif [ "$1" = "getautosave" ] || [ "$1" = "get" ]
|
||||
then
|
||||
autosave=$(ls -l "$data_path/save/autosave/" | grep autosave | tail -1 | tr -s ' ' | cut -d ' ' -f9-)
|
||||
mv "$save_file" "$backup_path/$(basename "$save_file")"_"$(date -u "+20%y-%m-%d_%H%M%S")"
|
||||
mv "$data_path/save/autosave/$autosave" "$save_file"
|
||||
|
||||
elif [ "$1" = "update" ]
|
||||
then
|
||||
DISCORD_RPC=false DESKTOP_ENTRY=false CLEAN_SRC=false SRCDIR="$src_path" DESTDIR="$server_path" zrct2-install
|
||||
|
||||
else
|
||||
usage
|
||||
fi
|
||||
else
|
||||
usage
|
||||
fi
|
||||
76
ztr/zdtol
Executable file
76
ztr/zdtol
Executable file
|
|
@ -0,0 +1,76 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage () {
|
||||
echo "zdtol [options] <name>"
|
||||
echo " Searches a label for partition or disk /dev/<name>"
|
||||
echo " Options: "
|
||||
echo " -h Show this message then exit"
|
||||
echo " -d Discard prefix (/dev/)"
|
||||
echo " -n <num> Show only nth label"
|
||||
}
|
||||
|
||||
error () {
|
||||
printf "\033[1;31m%s\033[0m\n" "$1" >&2
|
||||
}
|
||||
|
||||
while getopts ":hdn:" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
n)
|
||||
if ! echo "$OPTARG" | grep -Eq '^[0-9]+$'
|
||||
then
|
||||
error "n argument has to be an integer"
|
||||
exit 2
|
||||
fi
|
||||
if [ -z "$OPTARG" ]
|
||||
then
|
||||
error "n needs an argument"
|
||||
exit 2
|
||||
fi
|
||||
if [ "$OPTARG" -lt 1 ]
|
||||
then
|
||||
error "argument has to be greater than 0"
|
||||
exit 2
|
||||
fi
|
||||
_arg_n=$OPTARG
|
||||
_opt_n=y
|
||||
;;
|
||||
d)
|
||||
_opt_d=y
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ $# -le 0 ]
|
||||
then
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
_LIST=$(lsblk -lnio NAME,LABEL | tr -s ' ')
|
||||
|
||||
for _I in "$@"
|
||||
do
|
||||
if [ -n "$_opt_d" ] ; then
|
||||
_I=$(echo "$_I" | cut -d'/' -f3)
|
||||
fi
|
||||
_ret=$(echo "$_LIST" | grep "$_I" | tr -s ' ' | cut -d' ' -f2- | sed '/^[[:space:]]*$/d')
|
||||
if [ -n "$_opt_n" ] ; then
|
||||
echo "$_ret" | cut -d'\n' -f"$_arg_n"
|
||||
else
|
||||
echo "$_ret"
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
||||
96
ztr/zltod
Executable file
96
ztr/zltod
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage () {
|
||||
echo "zltod [options] <name>"
|
||||
echo " Options: "
|
||||
echo " -h Show this message then exit"
|
||||
echo " -w Search whole words only"
|
||||
echo " -i Ignore case"
|
||||
echo " -d Show device name instead of partition"
|
||||
echo " -f Give full name (/dev/)"
|
||||
}
|
||||
|
||||
while getopts ":hwidf" opt;
|
||||
do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
w)
|
||||
_opt_w=y
|
||||
;;
|
||||
i)
|
||||
_opt_i=y
|
||||
;;
|
||||
d)
|
||||
_opt_d=y
|
||||
;;
|
||||
f)
|
||||
_opt_f=y
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "$_opt_w" ]
|
||||
then
|
||||
if [ -z "$GREPARGS" ]
|
||||
then
|
||||
GREPARGS="-"
|
||||
fi
|
||||
GREPARGS=$GREPARGS"w"
|
||||
fi
|
||||
|
||||
if [ -n "$_opt_i" ]
|
||||
then
|
||||
if [ -z "$GREPARGS" ]
|
||||
then
|
||||
GREPARGS="-"
|
||||
fi
|
||||
GREPARGS=$GREPARGS"i"
|
||||
fi
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ $# -le 0 ]
|
||||
then
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
_LIST=$(lsblk -lnio NAME,LABEL | tr -s ' ')
|
||||
_SEARCH=$(echo "$_LIST" | grep $GREPARGS "$*" )
|
||||
|
||||
if [ -z "$_SEARCH" ] ## no result
|
||||
then
|
||||
exit 0
|
||||
elif [ "$(echo "$_SEARCH" | wc -l)" -gt 1 ] ## more than 1 result
|
||||
then
|
||||
echo "More than one result" >&2
|
||||
exit 3
|
||||
fi
|
||||
|
||||
_partition=$(echo "$_SEARCH" | awk '{print $1}')
|
||||
|
||||
if [ -n "$_partition" ] && [ -n "$_opt_f" ]
|
||||
then
|
||||
printf "/dev/"
|
||||
fi
|
||||
if [ -n "$_opt_d" ]
|
||||
then
|
||||
if echo "$_SEARCH" | grep -q nvme
|
||||
then
|
||||
echo "$_partition" | cut -c1-7
|
||||
else
|
||||
echo "$_partition" | cut -c1-3
|
||||
fi
|
||||
else
|
||||
echo "$_partition"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
147
ztr/ztr
Executable file
147
ztr/ztr
Executable file
|
|
@ -0,0 +1,147 @@
|
|||
#!/bin/sh
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "command | ztr [options]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -h Display help"
|
||||
echo " -l Load files in data dir"
|
||||
echo " -p Generate partitions"
|
||||
echo " -d Generate disks"
|
||||
echo " -P Print lines"
|
||||
echo " -s Print in sed script format"
|
||||
}
|
||||
|
||||
gen_tr_lines_disk ()
|
||||
{
|
||||
for I in $(ls /sys/block)
|
||||
do
|
||||
_t=$(zdtol $I | head -n1)
|
||||
if [ -n "$_t" ]
|
||||
then
|
||||
printf "/dev/%s:%s\n" "$I" "$(zdtol $I | head -n1)"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
gen_tr_lines_part ()
|
||||
{
|
||||
lsblk -lnio NAME,LABEL | tr -s ' ' | while read in
|
||||
do
|
||||
in="$in "
|
||||
if [ -n "$(echo "$in" | cut -d' ' -f2-)" ]
|
||||
then
|
||||
printf "/dev/%s:%s\n" "$(echo "$in" | cut -d' ' -f1)" "$(echo "$in" | cut -d' ' -f2- | sed -e 's/ *$//g' )"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
gen_sed_script ()
|
||||
{
|
||||
while read in
|
||||
do
|
||||
printf "s|%s|%s|g;" "$(echo "$in" | cut -d':' -f1)" "$(echo "$in" | cut -d':' -f2-)"
|
||||
done
|
||||
}
|
||||
|
||||
if [ -n "$XDG_CONFIG_HOME" ]
|
||||
then
|
||||
CONFIG_PATH="$XDG_CONFIG_HOME/ztr"
|
||||
else
|
||||
CONFIG_PATH="$HOME/.config/ztr"
|
||||
fi
|
||||
|
||||
DATA_PATH=$CONFIG_PATH/data/
|
||||
|
||||
FILE=/dev/stdin
|
||||
|
||||
while getopts ":hPsf:pdl" opt;
|
||||
do
|
||||
_opt=y
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
P)
|
||||
_opt_P=y
|
||||
;;
|
||||
s)
|
||||
_opt_s=y
|
||||
;;
|
||||
f)
|
||||
_opt_f=y
|
||||
_arg_f=$OPTARG
|
||||
_opt_data=y
|
||||
;;
|
||||
d)
|
||||
_opt_d=y
|
||||
_opt_data=y
|
||||
;;
|
||||
p)
|
||||
_opt_p=y
|
||||
_opt_data=y
|
||||
;;
|
||||
l)
|
||||
_opt_l=y
|
||||
_opt_data=y
|
||||
;;
|
||||
\?)
|
||||
echo "Uknown option: $OPTARG" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ -z "$_opt_data" ]
|
||||
then
|
||||
_opt_p=y
|
||||
_opt_d=y
|
||||
_opt_l=y
|
||||
_opt_L=y
|
||||
fi
|
||||
|
||||
mkdir -p "$DATA_PATH"
|
||||
|
||||
LINES=""
|
||||
|
||||
if [ -n "$_opt_f" ]
|
||||
then
|
||||
LINES="$(printf "%s\n%s" "$LINES" "$(cat "$_arg_f")" )"
|
||||
fi
|
||||
if [ -n "$_opt_l" ]
|
||||
then
|
||||
LINES="$(printf "%s\n%s" "$LINES" "$(cat "$DATA_PATH"/* 2>/dev/null)" )"
|
||||
fi
|
||||
if [ -n "$_opt_p" ]
|
||||
then
|
||||
LINES="$(printf "%s\n%s" "$LINES" "$(gen_tr_lines_part)" )"
|
||||
fi
|
||||
if [ -n "$_opt_d" ]
|
||||
then
|
||||
LINES="$(printf "%s\n%s" "$LINES" "$(gen_tr_lines_disk)" )"
|
||||
fi
|
||||
|
||||
LINES=$(echo "$LINES" | sed '/^\s*$/d')
|
||||
|
||||
|
||||
if [ -n "$1" ] ; then
|
||||
FILE="$1"
|
||||
fi
|
||||
if [ -t 0 ] || [ -n "$_opt_P" ] && [ -z "$1" ]
|
||||
then
|
||||
|
||||
if [ -n "$_opt_s" ]
|
||||
then
|
||||
echo "$LINES" | gen_sed_script | rev | cut -c2- | rev
|
||||
else
|
||||
echo "$LINES"
|
||||
fi
|
||||
|
||||
else
|
||||
sed "$(echo "$LINES" | gen_sed_script | rev | cut -c2- | rev)" < "$FILE"
|
||||
fi
|
||||
15
zumask/zumask
Executable file
15
zumask/zumask
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ $# -gt 0 ]
|
||||
then
|
||||
_path=$*
|
||||
else
|
||||
_path=$(pwd)
|
||||
fi
|
||||
|
||||
#find "$_path" -type d -exec chmod $(umask -S) {} \;
|
||||
#find "$_path" -type f -exec chmod $(umask -S | tr -d 'x') {} \;
|
||||
chmod "$(umask -S)" $(find "$_path" -type d)
|
||||
chmod "$(umask -S | tr -d 'x')" $(find "$_path" -type f)
|
||||
88
zupdate/sysupdate
Executable file
88
zupdate/sysupdate
Executable file
|
|
@ -0,0 +1,88 @@
|
|||
#!/bin/sh
|
||||
|
||||
linuxpkgnames=""
|
||||
|
||||
lock_file=/tmp/update.lock
|
||||
|
||||
get_running_programs()
|
||||
{
|
||||
echo "$1" | tr '-' '_' | grep -qwE "$(echo "$linuxpkgnames" | tr '-' '_')" && echo linux
|
||||
for I in $1
|
||||
do
|
||||
pgrep -xi "$I" >/dev/null && echo $I
|
||||
done
|
||||
}
|
||||
|
||||
stop()
|
||||
{
|
||||
rm "$lock_file"
|
||||
exit $1
|
||||
}
|
||||
|
||||
fetch_error()
|
||||
{
|
||||
echo "Error: Could not fetch packages" > /dev/stderr
|
||||
kdialog --passivepopup "Error during system updates: could not fetch packages" 60 --title "System Updates"
|
||||
stop 3
|
||||
}
|
||||
|
||||
update_error()
|
||||
{
|
||||
echo "Error: Could not upgrade system" > /dev/stderr
|
||||
kdialog --passivepopup "Error during system updates: could not upgrade" 60 --title "System Updates"
|
||||
stop 3
|
||||
}
|
||||
|
||||
|
||||
# Check if another process is running
|
||||
if [ -n "$(pgrep zupdate)" ] || [ -f "$lock_file" ]
|
||||
then
|
||||
echo "Updates are already running" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
touch "$lock_file"
|
||||
|
||||
which zupdate >/dev/null || { echo "zupdate not installed" >&2; stop 4; }
|
||||
|
||||
# package manager specific variables
|
||||
if which apt >/dev/null 2>&1
|
||||
then
|
||||
linuxpkgnames="linux-image-*"
|
||||
elif which pacman > /dev/null 2>&1
|
||||
then
|
||||
linuxpkgnames="linux|linux-hardened|linux-lts|linux-zen|linux-mainline|linux-rt|linux-git|linux-next"
|
||||
else
|
||||
echo "Unsupported package manager" > /dev/stderr
|
||||
stop 2
|
||||
fi
|
||||
|
||||
#fetch updates
|
||||
|
||||
size=$(zupdate -Mkd) || fetch_error
|
||||
|
||||
packages=$(zupdate -L | cut -d' ' -f1) || fetch_error
|
||||
|
||||
if [ -z "$packages" ]
|
||||
then
|
||||
echo "No updates"
|
||||
stop 0
|
||||
fi
|
||||
|
||||
# find running updates
|
||||
running_programs=$(get_running_programs "$packages")
|
||||
if [ -n "$running_programs" ]
|
||||
then
|
||||
if ! kdialog --yesno "The following running programs have recieved updates: \n$(echo "$running_programs" | sed 's|^| - |g')" --yes-label "Continue" --no-label "Cancel" --title "Updates"
|
||||
then
|
||||
echo "Update cancelled" > /dev/stderr
|
||||
stop 3
|
||||
fi
|
||||
fi
|
||||
|
||||
kdialog --passivepopup "Installing updates for $size download" 10 --title "System Updates"
|
||||
#update
|
||||
zupdate -yu || update_error
|
||||
#end update
|
||||
kdialog --passivepopup "Updates finished" 5 --title "System Updates"
|
||||
|
||||
stop 0
|
||||
Loading…
Reference in a new issue