mirror of
https://github.com/tumillanino/miasma-os.git
synced 2026-06-15 12:29:31 +00:00
kernel still breaking. updated name which may have been issue
This commit is contained in:
24
docs/solarpowered-main/files/README.md
Normal file
24
docs/solarpowered-main/files/README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# README.md
|
||||
|
||||
This folder contains
|
||||
|
||||
# gschema-overrides/
|
||||
|
||||
gschema-overrides files for all images
|
||||
|
||||
# scripts/
|
||||
|
||||
Scripts for from-scratch images (`base/`), images regardless of base (`shared/`), and for `solarizzed`.
|
||||
|
||||
# shared/
|
||||
|
||||
Files that will be transferred into all images' /.
|
||||
|
||||
# solarpowered/
|
||||
|
||||
Files that will be transferred into /. Only for `solarpowered` and `autosolarpowered`. Device-specific. Contains T480/s config files.
|
||||
|
||||
# solarpowered-ex/
|
||||
|
||||
Files that will be transferred into /. Only for `solarpowered-ex` and `autosolarpowered-ex`. Device-specific. Contains `B550-suspend-fix.service`.
|
||||
|
||||
8
docs/solarpowered-main/files/dnf/vscodium.repo
Normal file
8
docs/solarpowered-main/files/dnf/vscodium.repo
Normal file
@@ -0,0 +1,8 @@
|
||||
[gitlab.com_paulcarroty_vscodium_repo]
|
||||
name=gitlab.com_paulcarroty_vscodium_repo
|
||||
baseurl=https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
repo_gpgcheck=1
|
||||
gpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg
|
||||
metadata_expire=1h
|
||||
3
docs/solarpowered-main/files/gschema-overrides/README.md
Normal file
3
docs/solarpowered-main/files/gschema-overrides/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# README.md
|
||||
|
||||
This folder contains gschema-overrides files.
|
||||
@@ -0,0 +1,5 @@
|
||||
[org.gnome.desktop.app-folders.folders.Waydroid]
|
||||
apps=['Waydroid.desktop']
|
||||
categories=['X-WayDroid-App']
|
||||
name='Waydroid'
|
||||
translate=false
|
||||
@@ -0,0 +1,4 @@
|
||||
[org.gnome.shell]
|
||||
|
||||
disable-user-extensions=false
|
||||
enabled-extensions=['nightthemeswitcher@romainvigier.fr', 'do-not-disturb-while-screen-sharing-or-recording@marcinjahn.com', 'caffeine@patapon.info', 'Bluetooth-Battery-Meter@maniacx.github.com', 'light-style@gnome-shell-extensions.gcampax.github.com', 'hibernate-status@dromi', 'gsconnect@andyholmes.github.io']
|
||||
@@ -0,0 +1,5 @@
|
||||
[org.gnome.desktop.background]
|
||||
color-shading-type='solid'
|
||||
picture-options='zoom'
|
||||
primary-color='#000000'
|
||||
secondary-color='#000000'
|
||||
@@ -0,0 +1,11 @@
|
||||
[org.gnome.desktop.interface]
|
||||
accent-color='purple'
|
||||
enable-hot-corners=false
|
||||
clock-format='24h'
|
||||
clock-show-weekday=false
|
||||
show-battery-percentage=true
|
||||
font-antialiasing='rgba'
|
||||
font-hinting='none'
|
||||
font-rendering='automatic'
|
||||
gtk-theme='adw-gtk3'
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[org.gnome.desktop.peripherals.touchpad]
|
||||
tap-to-click=true
|
||||
two-finger-scrolling-enabled=true
|
||||
@@ -0,0 +1,3 @@
|
||||
[org.gnome.desktop.wm.preferences]
|
||||
action-double-click-titlebar='toggle-maximize'
|
||||
titlebar-uses-system-font=true
|
||||
@@ -0,0 +1,3 @@
|
||||
[org.gnome.mutter]
|
||||
center-new-windows=true
|
||||
check-alive-timeout=30000
|
||||
@@ -0,0 +1,4 @@
|
||||
[org.gnome.nautilus.preferences]
|
||||
default-sort-order='type'
|
||||
show-create-link=true
|
||||
show-delete-permanently=true
|
||||
15
docs/solarpowered-main/files/scripts/README.md
Normal file
15
docs/solarpowered-main/files/scripts/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# README.md
|
||||
|
||||
This folder contains
|
||||
|
||||
## base/
|
||||
|
||||
Scripts for use with DIY images, based on vanilla Fedora Silverblue as opposed to UBlue's `silverblue-main`
|
||||
|
||||
# shared/
|
||||
|
||||
Scripts for use with all images regardless of base
|
||||
|
||||
# solarizzed/
|
||||
|
||||
Scripts for use with `solarizzed` only, mainly contains KDE Plasma-related scripts
|
||||
10
docs/solarpowered-main/files/scripts/example.sh
Normal file
10
docs/solarpowered-main/files/scripts/example.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Tell this script to exit if there are any errors.
|
||||
# You should have this in every custom script, to ensure that your completed
|
||||
# builds actually ran successfully without any errors!
|
||||
set -oue pipefail
|
||||
|
||||
# Your code goes here.
|
||||
echo 'This is an example shell script'
|
||||
echo 'Scripts here will run during build if specified in recipe.yml'
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ouex pipefail
|
||||
|
||||
OS_VERSION=$(rpm -E %fedora)
|
||||
|
||||
VER=$(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/bazzite-org/kernel-bazzite/releases/latest))
|
||||
|
||||
dnf -y remove kernel-* && rm -drf /usr/lib/modules/*
|
||||
|
||||
echo 'Installing Bazzite kernel...'
|
||||
dnf install -y \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-common-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-core-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-devel-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-devel-matched-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-modules-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-modules-akmods-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-modules-core-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-modules-extra-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-modules-extra-matched-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-modules-internal-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-tools-$VER.fc$OS_VERSION.x86_64.rpm \
|
||||
https://github.com/bazzite-org/kernel-bazzite/releases/download/$VER/kernel-tools-libs-$VER.fc$OS_VERSION.x86_64.rpm
|
||||
50
docs/solarpowered-main/files/scripts/kernels/kernel-blu.sh
Normal file
50
docs/solarpowered-main/files/scripts/kernels/kernel-blu.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Remove Fedora kernel & remove leftover files
|
||||
dnf -y remove \
|
||||
kernel \
|
||||
kernel-* && \
|
||||
rm -r -f /usr/lib/modules/*
|
||||
|
||||
# Install dnf-plugins-core just in case
|
||||
dnf -y install --setopt=install_weak_deps=False \
|
||||
dnf-plugins-core \
|
||||
dnf5-plugins
|
||||
|
||||
# Configure exclusion
|
||||
dnf -y config-manager setopt "fedora*".exclude=" \
|
||||
kernel \
|
||||
kernel-core \
|
||||
kernel-modules \
|
||||
kernel-modules-core \
|
||||
kernel-modules-extra \
|
||||
kernel-devel \
|
||||
kernel-headers \
|
||||
"
|
||||
|
||||
# Enable repos for kernel-blu and akmods
|
||||
dnf -y copr enable sentry/kernel-blu
|
||||
# dnf -y copr enable ublue-os/akmods
|
||||
dnf -y config-manager addrepo --from-repofile=https://raw.githubusercontent.com/terrapkg/subatomic-repos/main/terra.repo
|
||||
dnf -y config-manager addrepo --from-repofile=https://negativo17.org/repos/fedora-multimedia.repo
|
||||
|
||||
# Install akmods, kernel, and modules
|
||||
dnf -y install --setopt=install_weak_deps=False \
|
||||
kernel \
|
||||
kernel-devel \
|
||||
kernel-modules-extra \
|
||||
akmods \
|
||||
akmod-evdi \
|
||||
help2man \
|
||||
v4l2loopback \
|
||||
zenergy
|
||||
|
||||
# Manually build modules, run depmod & generate initramfs
|
||||
VER=$(ls /lib/modules) &&
|
||||
akmods --force --kernels $VER --kmod v4l2loopback &&
|
||||
akmods --force --kernels $VER --kmod zenergy &&
|
||||
depmod -a $VER &&
|
||||
dracut --kver $VER --force --add ostree --no-hostonly --reproducible /usr/lib/modules/$VER/initramfs.img
|
||||
|
||||
# Clean up repos from earlier
|
||||
rm -f /etc/yum.repos.d/{*copr*,*terra*,*multimedia*}.repo
|
||||
56
docs/solarpowered-main/files/scripts/kernels/kernel-cachy.sh
Normal file
56
docs/solarpowered-main/files/scripts/kernels/kernel-cachy.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Remove Fedora kernel & remove leftover files
|
||||
dnf -y remove \
|
||||
kernel \
|
||||
kernel-* && \
|
||||
rm -r -f /usr/lib/modules/*
|
||||
|
||||
# Install dnf-plugins-core just in case
|
||||
dnf -y install --setopt=install_weak_deps=False \
|
||||
dnf-plugins-core \
|
||||
dnf5-plugins
|
||||
|
||||
# Enable repos
|
||||
dnf -y copr enable bieszczaders/kernel-cachyos-lto
|
||||
dnf -y copr enable bieszczaders/kernel-cachyos-addons
|
||||
# dnf -y copr enable ublue-os/akmods
|
||||
dnf -y config-manager addrepo --from-repofile=https://negativo17.org/repos/fedora-multimedia.repo
|
||||
dnf -y config-manager addrepo --from-repofile=https://raw.githubusercontent.com/terrapkg/subatomic-repos/main/terra.repo
|
||||
|
||||
# Handles kernel post-transaction scriptlet
|
||||
# mv /usr/lib/kernel/install.d/05-rpmostree.install /usr/lib/kernel/install.d/05-rpmostree.install.bak
|
||||
# mv /usr/lib/kernel/install.d/50-dracut.install /usr/lib/kernel/install.d/50-dracut.install.bak
|
||||
# printf '%s\n' '#!/bin/sh' 'exit 0' > /usr/lib/kernel/install.d/05-rpmostree.install
|
||||
# printf '%s\n' '#!/bin/sh' 'exit 0' > /usr/lib/kernel/install.d/50-dracut.install
|
||||
# chmod +x \
|
||||
# /usr/lib/kernel/install.d/05-rpmostree.install \
|
||||
# /usr/lib/kernel/install.d/50-dracut.install
|
||||
|
||||
# Install CachyOS LTO kernel & akmods
|
||||
dnf -y install --setopt=install_weak_deps=False \
|
||||
kernel-cachyos-lto \
|
||||
kernel-cachyos-lto-devel \
|
||||
akmods \
|
||||
akmod-evdi \
|
||||
zenergy \
|
||||
scx-scheds \
|
||||
scx-tools \
|
||||
scx-manager
|
||||
dnf -y swap zram-generator-defaults cachyos-settings
|
||||
|
||||
# Handles kernel post-transaction scriptlet
|
||||
# rm -f /usr/lib/kernel/install.d/05-rpmostree.install \
|
||||
# /usr/lib/kernel/install.d/50-dracut.install
|
||||
# mv /usr/lib/kernel/install.d/05-rpmostree.install.bak /usr/lib/kernel/install.d/05-rpmostree.install
|
||||
# mv /usr/lib/kernel/install.d/50-dracut.install.bak /usr/lib/kernel/install.d/50-dracut.install
|
||||
|
||||
# Manually build modules, run depmod & generate initramfs
|
||||
VER=$(ls /lib/modules) && \
|
||||
akmods --force --kernels $VER --kmod zenergy && \
|
||||
akmods --force --kernels $VER --kmod evdi && \
|
||||
depmod -a $VER && \
|
||||
dracut --kver $VER --force --add ostree --no-hostonly --reproducible /usr/lib/modules/$VER/initramfs.img
|
||||
|
||||
# Clean up repos from earlier
|
||||
rm -f /etc/yum.repos.d/{*copr*,*multimedia*,*terra*}.repo
|
||||
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Install dnf-plugins-core just in case
|
||||
dnf -y install --setopt=install_weak_deps=False \
|
||||
dnf-plugins-core \
|
||||
dnf5-plugins
|
||||
|
||||
# Enable repos for akmods
|
||||
dnf -y copr enable ublue-os/akmods
|
||||
dnf -y config-manager addrepo --from-repofile=https://raw.githubusercontent.com/terrapkg/subatomic-repos/main/terra.repo
|
||||
dnf config-manager addrepo --from-repofile=https://negativo17.org/repos/fedora-multimedia.repo
|
||||
|
||||
# Install akmods, kernel, and modules
|
||||
dnf -y install --setopt=install_weak_deps=False \
|
||||
kernel-devel \
|
||||
kernel-modules-extra \
|
||||
akmods \
|
||||
akmod-evdi \
|
||||
help2man \
|
||||
v4l2loopback \
|
||||
zenergy
|
||||
|
||||
# Manually build modules, run depmod & generate initramfs
|
||||
VER=$(ls /lib/modules) &&
|
||||
akmods --force --kernels $VER --kmod v4l2loopback &&
|
||||
akmods --force --kernels $VER --kmod zenergy &&
|
||||
depmod -a $VER &&
|
||||
dracut --kver $VER --force --add ostree --no-hostonly --reproducible /usr/lib/modules/$VER/initramfs.img
|
||||
|
||||
# Clean up repos from earlier
|
||||
rm -f /etc/yum.repos.d/{*copr*,*terra*,*multimedia*}.repo
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -oue pipefail
|
||||
|
||||
echo 'Preparing directory for cloning...'
|
||||
|
||||
mkdir -p /tmp/clone/Adwaita-colors/
|
||||
cd /tmp/clone/Adwaita-colors/
|
||||
echo 'Directory created.'
|
||||
|
||||
git clone https://github.com/dpejoh/Adwaita-colors
|
||||
echo 'Repo cloned. Copying files...'
|
||||
|
||||
cp -r ./Adwaita-colors/* /usr/share/icons/
|
||||
echo 'Folders copied. Cleaning up!'
|
||||
|
||||
rm -r Adwaita-colors/
|
||||
echo 'Cloned repo deleted.'
|
||||
18
docs/solarpowered-main/files/scripts/shared/android-tools.sh
Normal file
18
docs/solarpowered-main/files/scripts/shared/android-tools.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
VER=$(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/pkgforge-dev/android-tools-AppImage/releases/latest))
|
||||
curl -fLs --create-dirs https://github.com/pkgforge-dev/android-tools-AppImage/releases/download/${VER}/Android_Tools-${VER%@*}-anylinux-x86_64.AppImage -o /usr/bin/android-tools
|
||||
chmod +x /usr/bin/android-tools
|
||||
mkdir -p /tmp/android-tmp/
|
||||
(
|
||||
cd /tmp/android-tmp/
|
||||
/usr/bin/android-tools --appimage-extract
|
||||
)
|
||||
readarray -t BINS < <(find /tmp/android-tmp/AppDir/bin/ -type f -printf "%f\n")
|
||||
rm -rf /tmp/android-tmp/
|
||||
for bin in "${BINS[@]}"; do
|
||||
case "$bin" in
|
||||
*xdg-open|*.hook|*.conf) continue;;
|
||||
esac
|
||||
ln -fs /usr/bin/android-tools /usr/bin/"$bin"
|
||||
done
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -oue pipefail
|
||||
|
||||
GITHUB_URL="https://github.com/vinceliuice/Colloid-icon-theme"
|
||||
if [ -z "$GITHUB_URL" ]; then
|
||||
echo "Error: GITHUB_URL is not set."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REPO_NAME=$(basename "$GITHUB_URL" .git)
|
||||
CLONE_DIR="/tmp/clone/$REPO_NAME"
|
||||
|
||||
echo "Preparing directory for cloning..."
|
||||
mkdir -p "$CLONE_DIR"
|
||||
cd "$CLONE_DIR"
|
||||
echo "Directory created."
|
||||
|
||||
git clone "$GITHUB_URL"
|
||||
|
||||
echo "Repo cloned. Copying files..."
|
||||
|
||||
if [ -f "./$REPO_NAME/install.sh" ]; then
|
||||
chmod +x "./$REPO_NAME/install.sh"
|
||||
./"$REPO_NAME/install.sh" -d /usr/share/icons -s default -t default -b
|
||||
fi
|
||||
|
||||
echo "Folders copied. Cleaning up!"
|
||||
rm -drf "$CLONE_DIR"
|
||||
echo "Cloned repo deleted."
|
||||
|
||||
echo "Script finished. Theme installation complete."
|
||||
7
docs/solarpowered-main/files/scripts/shared/edid.sh
Normal file
7
docs/solarpowered-main/files/scripts/shared/edid.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euox pipefail
|
||||
|
||||
tee "/etc/dracut.conf.d/00-dp-2.conf" > /dev/null << 'EOF'
|
||||
install_items+=" /lib/firmware/edid/edid.bin "
|
||||
EOF
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -oue pipefail
|
||||
|
||||
GITHUB_URL="https://github.com/somepaulo/MoreWaita"
|
||||
if [ -z "$GITHUB_URL" ]; then
|
||||
echo "Error: GITHUB_URL is not set."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REPO_NAME=$(basename "$GITHUB_URL" .git)
|
||||
CLONE_DIR="/tmp/clone/$REPO_NAME"
|
||||
|
||||
echo "Preparing directory for cloning..."
|
||||
mkdir -p "$CLONE_DIR"
|
||||
cd "$CLONE_DIR"
|
||||
echo "Directory created."
|
||||
|
||||
git clone "$GITHUB_URL"
|
||||
|
||||
echo "Repo cloned. Copying files..."
|
||||
|
||||
if [ -f "./$REPO_NAME/install.sh" ]; then
|
||||
chmod +x "./$REPO_NAME/install.sh"
|
||||
./"$REPO_NAME/install.sh"
|
||||
fi
|
||||
|
||||
echo "Folders copied. Cleaning up!"
|
||||
rm -drf "$CLONE_DIR"
|
||||
echo "Cloned repo deleted."
|
||||
|
||||
echo "Script finished. Theme installation complete."
|
||||
|
||||
|
||||
# ---
|
||||
# echo 'Preparing directory for cloning...'
|
||||
|
||||
# mkdir -p /tmp/clone/MoreWaita/
|
||||
# cd /tmp/clone/MoreWaita/
|
||||
# echo 'Directory created.'
|
||||
|
||||
# git clone https://github.com/somepaulo/MoreWaita.git
|
||||
# echo 'Repo cloned. Running install script...'
|
||||
|
||||
# MoreWaita/install.sh
|
||||
# cho 'Install script finished. Removing cloned repo...'
|
||||
|
||||
# rm -r MoreWaita
|
||||
# echo 'Cloned repo deleted.'
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -oue pipefail
|
||||
|
||||
echo 'Preparing directory for cloning...'
|
||||
|
||||
mkdir -p /tmp/clone/nautilus-copy-path/
|
||||
cd /tmp/clone/nautilus-copy-path/
|
||||
echo 'Directory created.'
|
||||
|
||||
git clone https://github.com/chr314/nautilus-copy-path.git
|
||||
echo 'Repo cloned. Copying files...'
|
||||
|
||||
mkdir -p /usr/share/nautilus-python/extensions/nautilus-copy-path
|
||||
cp ./nautilus-copy-path/nautilus-copy-path.py /usr/share/nautilus-python/extensions
|
||||
cp ./nautilus-copy-path/nautilus_copy_path.py ./nautilus-copy-path/translation.py ./nautilus-copy-path/config.json /usr/share/nautilus-python/extensions/nautilus-copy-path
|
||||
cp -rf ./nautilus-copy-path/translations /usr/share/nautilus-python/extensions/nautilus-copy-path
|
||||
|
||||
echo 'Install script finished. Removing cloned repo...'
|
||||
|
||||
rm -r nautilus-copy-path
|
||||
echo 'Cloned repo deleted.'
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -oue pipefail
|
||||
|
||||
GITHUB_URL="https://github.com/vinceliuice/Qogir-icon-theme"
|
||||
if [ -z "$GITHUB_URL" ]; then
|
||||
echo "Error: GITHUB_URL is not set."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REPO_NAME=$(basename "$GITHUB_URL" .git)
|
||||
CLONE_DIR="/tmp/clone/$REPO_NAME"
|
||||
|
||||
echo "Preparing directory for cloning..."
|
||||
mkdir -p "$CLONE_DIR"
|
||||
cd "$CLONE_DIR"
|
||||
echo "Directory created."
|
||||
|
||||
git clone "$GITHUB_URL"
|
||||
|
||||
echo "Repo cloned. Copying files..."
|
||||
|
||||
if [ -f "./$REPO_NAME/install.sh" ]; then
|
||||
chmod +x "./$REPO_NAME/install.sh"
|
||||
./"$REPO_NAME/install.sh" -t default -c standard
|
||||
fi
|
||||
|
||||
echo "Folders copied. Cleaning up!"
|
||||
rm -drf "$CLONE_DIR"
|
||||
echo "Cloned repo deleted."
|
||||
|
||||
echo "Script finished. Theme installation complete."
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -oue pipefail
|
||||
|
||||
GITHUB_URL="https://github.com/vinceliuice/Tela-icon-theme"
|
||||
if [ -z "$GITHUB_URL" ]; then
|
||||
echo "Error: GITHUB_URL is not set."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REPO_NAME=$(basename "$GITHUB_URL" .git)
|
||||
CLONE_DIR="/tmp/clone/$REPO_NAME"
|
||||
|
||||
echo "Preparing directory for cloning..."
|
||||
mkdir -p "$CLONE_DIR"
|
||||
cd "$CLONE_DIR"
|
||||
echo "Directory created."
|
||||
|
||||
git clone "$GITHUB_URL"
|
||||
|
||||
echo "Repo cloned. Copying files..."
|
||||
|
||||
if [ -f "./$REPO_NAME/install.sh" ]; then
|
||||
chmod +x "./$REPO_NAME/install.sh"
|
||||
./"$REPO_NAME/install.sh" -d /usr/share/icons
|
||||
fi
|
||||
|
||||
echo "Folders copied. Cleaning up!"
|
||||
rm -drf "$CLONE_DIR"
|
||||
echo "Cloned repo deleted."
|
||||
|
||||
echo "Script finished. Theme installation complete."
|
||||
0
docs/solarpowered-main/files/shared/etc/.gitkeep
Normal file
0
docs/solarpowered-main/files/shared/etc/.gitkeep
Normal file
68
docs/solarpowered-main/files/shared/etc/distrobox.ini
Normal file
68
docs/solarpowered-main/files/shared/etc/distrobox.ini
Normal file
@@ -0,0 +1,68 @@
|
||||
# Arch Linux box for CLI use
|
||||
[box]
|
||||
image=ghcr.io/askpng/box
|
||||
pull=true
|
||||
replace=true
|
||||
nvidia=false
|
||||
init=false
|
||||
entry=false
|
||||
start_now=true
|
||||
init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open
|
||||
exported_apps="blackbox"
|
||||
exported_bins="bat btop eza glow pingu tldr"
|
||||
|
||||
# Arch Linux box for gaming use
|
||||
[gamebox]
|
||||
image=ghcr.io/askpng/gamebox:latest
|
||||
pull=true
|
||||
replace=true
|
||||
nvidia=false
|
||||
init=false
|
||||
entry=false
|
||||
start_now=true
|
||||
init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open
|
||||
exported_apps="blackbox celluloid hatt lutris megabasterd steam vesktop"
|
||||
|
||||
# BlueBuild-CLI
|
||||
[bluebuild-cli]
|
||||
image=ghcr.io/blue-build/cli:latest-alpine
|
||||
additional_packages="nano bat fish git"
|
||||
replace=true
|
||||
|
||||
# Debian
|
||||
[debian]
|
||||
image=quay.io/toolbx-images/debian-toolbox:unstable
|
||||
additional_packages="nano bat fish"
|
||||
replace=true
|
||||
|
||||
[fedora]
|
||||
image=ghcr.io/ublue-os/fedora-distrobox:latest
|
||||
additional_packages="nano bat fish"
|
||||
|
||||
#[bluefin-cli]
|
||||
#image=ghcr.io/ublue-os/bluefin-cli
|
||||
#nvidia=true
|
||||
|
||||
#[opensuse]
|
||||
#image=quay.io/toolbx-images/opensuse-toolbox:tumbleweed
|
||||
#nvidia=true
|
||||
|
||||
#[ubuntu]
|
||||
#image=ghcr.io/ublue-os/ubuntu-toolbox:latest
|
||||
#nvidia=true
|
||||
|
||||
#[alma]
|
||||
#image=quay.io/toolbx-images/almalinux-toolbox:latest
|
||||
#nvidia=true
|
||||
|
||||
#[centos]
|
||||
#image=quay.io/toolbx-images/centos-toolbox:latest
|
||||
#nvidia=true
|
||||
|
||||
#[wolfi]
|
||||
#image=ghcr.io/ublue-os/wolfi-toolbox
|
||||
#nvidia=true
|
||||
|
||||
#[wolfi-dx]
|
||||
#image=ghcr.io/ublue-os/wolfi-dx-toolbox
|
||||
#nvidia=true
|
||||
@@ -0,0 +1,4 @@
|
||||
container_always_pull="1"
|
||||
container_generate_entry=1
|
||||
container_manager="podman"
|
||||
non_interactive="1"
|
||||
7
docs/solarpowered-main/files/shared/etc/rpm-ostreed.conf
Normal file
7
docs/solarpowered-main/files/shared/etc/rpm-ostreed.conf
Normal file
@@ -0,0 +1,7 @@
|
||||
# Entries in this file show the compile time defaults.
|
||||
# You can change settings by editing this file.
|
||||
# For option meanings, see rpm-ostreed.conf(5).
|
||||
|
||||
[Daemon]
|
||||
AutomaticUpdatePolicy=stage
|
||||
#IdleExitTimeout=60
|
||||
@@ -0,0 +1,50 @@
|
||||
################### File Generated by Goverlay ###################
|
||||
legacy_layout=false
|
||||
|
||||
|
||||
background_alpha=0.0
|
||||
round_corners=0
|
||||
background_alpha=0.0
|
||||
background_color=000000
|
||||
|
||||
font_size=14
|
||||
text_color=FFFFFF
|
||||
position=top-left
|
||||
toggle_hud=Shift_R+F12
|
||||
pci_dev=0:08:00.0
|
||||
table_columns=3
|
||||
gpu_text=GPU
|
||||
gpu_stats
|
||||
gpu_temp
|
||||
gpu_color=2E9762
|
||||
cpu_text=CPU
|
||||
cpu_stats
|
||||
|
||||
cpu_temp
|
||||
cpu_color=2E97CB
|
||||
vram
|
||||
vram_color=AD64C1
|
||||
ram
|
||||
ram_color=C26693
|
||||
fps
|
||||
fps_limit_method=late
|
||||
toggle_fps_limit=Shift_L+F1
|
||||
|
||||
fps_limit=90
|
||||
fps_color_change
|
||||
fps_color=B22222,F9F06B,99C1F1
|
||||
fps_value=30,90
|
||||
#offset=0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
output_folder=/var/home/mel
|
||||
log_duration=30
|
||||
autostart_log=0
|
||||
log_interval=100
|
||||
toggle_logging=Shift_L+F2
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
## GENERAL ##
|
||||
|
||||
## profile ##
|
||||
profile=fast
|
||||
|
||||
## hardware acceleration ##
|
||||
# vo=gpu-next
|
||||
# hwdec=auto
|
||||
gpu-context=wayland,auto
|
||||
vo=dmabuf-wayland,gpu-next
|
||||
hwdec=auto-safe
|
||||
|
||||
# others #
|
||||
save-position-on-quit=yes
|
||||
keep-open=yes
|
||||
border=yes
|
||||
screenshot-directory="~/Pictures/mpv/"
|
||||
screenshot-template="%F - [%P]v%#01n"
|
||||
screenshot-format=webp
|
||||
screenshot-webp-quality=90
|
||||
slang=eng,en,enUS,en-US,English,jpn,jp,jap,Japanese
|
||||
sub-font-size=32
|
||||
volume-max=100
|
||||
|
||||
## INPUT ##
|
||||
|
||||
## OSD ##
|
||||
osd-duration=2000
|
||||
osd-playing-msg='${filename}'
|
||||
# osc-seekbarstyle=bar
|
||||
# osd-font-size=20
|
||||
|
||||
## resize window ##
|
||||
autofit-larger=75%x75%
|
||||
|
||||
## yt-dlp ##
|
||||
[protocol.https]
|
||||
prefetch-playlist=yes
|
||||
cache-secs=10
|
||||
osd-playing-msg='${media-title}'
|
||||
ytdl-format="bestvideo[height<=1080]+bestaudio"
|
||||
ytdl-raw-options=cookies-from-browser=firefox
|
||||
@@ -0,0 +1,333 @@
|
||||
-- Copyright (c) 2021, Eisa AlAwadhi
|
||||
-- License: BSD 2-Clause License
|
||||
|
||||
-- Creator: Eisa AlAwadhi
|
||||
-- Project: SmartCopyPaste
|
||||
-- Version: 2.4.1
|
||||
|
||||
local utils = require 'mp.utils'
|
||||
local msg = require 'mp.msg'
|
||||
local protocols
|
||||
local extensions
|
||||
local pasted = false
|
||||
|
||||
----------------------------USER CUSTOMIZATION SETTINGS-----------------------------------
|
||||
--These settings are for users to manually change some options in the script.
|
||||
--Keybinds can be defined in the bottom of the script.
|
||||
|
||||
local device = nil --nil is for automatic device detection, or manually change to: 'windows' or 'mac' or 'linux'
|
||||
|
||||
local linux_copy = 'wl-copy' --copy command that will be used in Linux. OR write a different command
|
||||
local linux_paste = 'wl-paste' --paste command that will be used in Linux. OR write a different command
|
||||
|
||||
local mac_copy = 'pbcopy' --copy command that will be used in MAC. OR write a different command
|
||||
local mac_paste = 'pbpaste' --paste command that will be used in MAC. OR write a different command
|
||||
|
||||
local windows_copy = 'powershell' --'powershell' is for using windows powershell to copy. OR write the copy command, e.g: ' clip'
|
||||
local windows_paste = 'powershell' --'powershell' is for using windows powershell to paste. OR write the paste command
|
||||
|
||||
local offset = -0.65 --change to 0 so that pasting resumes from the exact position, or decrease the value so that it gives you a little preview before reaching the exact pasted position
|
||||
|
||||
local paste_anything = false --false is for specific paste based on the specified extensions and protocols. Change to true so paste accepts anything (not recommended to change this).
|
||||
|
||||
if not paste_anything then
|
||||
protocols = { --add below (after a comma) any protocol you want SmartCopyPaste to work with; e.g: ,'ftp://'
|
||||
'https?://' ,'magnet:'
|
||||
}
|
||||
extensions = { --add below (after a comma) any extension you want SmartCopyPaste to work with; e.g: ,'pdf'
|
||||
--video & audio
|
||||
'ac3', 'a52', 'eac3', 'mlp', 'dts', 'dts-hd', 'dtshd', 'true-hd', 'thd', 'truehd', 'thd+ac3', 'tta', 'pcm', 'wav', 'aiff', 'aif', 'aifc', 'amr', 'awb', 'au', 'snd', 'lpcm', 'yuv', 'y4m', 'ape', 'wv', 'shn', 'm2ts', 'm2t', 'mts', 'mtv', 'ts', 'tsv', 'tsa', 'tts', 'trp', 'adts', 'adt', 'mpa', 'm1a', 'm2a', 'mp1', 'mp2', 'mp3', 'mpeg', 'mpg', 'mpe', 'mpeg2', 'm1v', 'm2v', 'mp2v', 'mpv', 'mpv2', 'mod', 'tod', 'vob', 'vro', 'evob', 'evo', 'mpeg4', 'm4v', 'mp4', 'mp4v', 'mpg4', 'm4a', 'aac', 'h264', 'avc', 'x264', '264', 'hevc', 'h265', 'x265', '265', 'flac', 'oga', 'ogg', 'opus', 'spx', 'ogv', 'ogm', 'ogx', 'mkv', 'mk3d', 'mka', 'webm', 'weba', 'avi', 'vfw', 'divx', '3iv', 'xvid', 'nut', 'flic', 'fli', 'flc', 'nsv', 'gxf', 'mxf', 'wma', 'wm', 'wmv', 'asf', 'dvr-ms', 'dvr', 'wtv', 'dv', 'hdv', 'flv','f4v', 'f4a', 'qt', 'mov', 'hdmov', 'rm', 'rmvb', 'ra', 'ram', '3ga', '3ga2', '3gpp', '3gp', '3gp2', '3g2', 'ay', 'gbs', 'gym', 'hes', 'kss', 'nsf', 'nsfe', 'sap', 'spc', 'vgm', 'vgz', 'm3u', 'm3u8', 'pls', 'cue',
|
||||
--images
|
||||
"ase", "art", "bmp", "blp", "cd5", "cit", "cpt", "cr2", "cut", "dds", "dib", "djvu", "egt", "exif", "gif", "gpl", "grf", "icns", "ico", "iff", "jng", "jpeg", "jpg", "jfif", "jp2", "jps", "lbm", "max", "miff", "mng", "msp", "nitf", "ota", "pbm", "pc1", "pc2", "pc3", "pcf", "pcx", "pdn", "pgm", "PI1", "PI2", "PI3", "pict", "pct", "pnm", "pns", "ppm", "psb", "psd", "pdd", "psp", "px", "pxm", "pxr", "qfx", "raw", "rle", "sct", "sgi", "rgb", "int", "bw", "tga", "tiff", "tif", "vtf", "xbm", "xcf", "xpm", "3dv", "amf", "ai", "awg", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "gbr", "odg", "svg", "stl", "vrml", "x3d", "sxd", "v2d", "vnd", "wmf", "emf", "art", "xar", "png", "webp", "jxr", "hdp", "wdp", "cur", "ecw", "iff", "lbm", "liff", "nrrd", "pam", "pcx", "pgf", "sgi", "rgb", "rgba", "bw", "int", "inta", "sid", "ras", "sun", "tga",
|
||||
--other types
|
||||
'torrent'
|
||||
}
|
||||
---------------------------END OF USER CUSTOMIZATION SETTINGS------------------------
|
||||
else
|
||||
protocols = {''}
|
||||
extensions = {''}
|
||||
end
|
||||
|
||||
if not device then
|
||||
if os.getenv('windir') ~= nil then
|
||||
device = 'windows'
|
||||
elseif os.execute '[ -d "/Applications" ]' == 0 and os.execute '[ -d "/Library" ]' == 0 or os.execute '[ -d "/Applications" ]' == true and os.execute '[ -d "/Library" ]' == true then
|
||||
device = 'mac'
|
||||
else
|
||||
device = 'linux'
|
||||
end
|
||||
end
|
||||
|
||||
function handleres(res, args)
|
||||
if not res.error and res.status == 0 then
|
||||
return res.stdout
|
||||
else
|
||||
msg.error("There was an error getting "..device.." clipboard: ")
|
||||
msg.error(" Status: "..(res.status or ""))
|
||||
msg.error(" Error: "..(res.error or ""))
|
||||
msg.error(" stdout: "..(res.stdout or ""))
|
||||
msg.error("args: "..utils.to_string(args))
|
||||
return ''
|
||||
end
|
||||
end
|
||||
|
||||
function os.capture(cmd, raw)
|
||||
local f = assert(io.popen(cmd, 'r'))
|
||||
local s = assert(f:read('*a'))
|
||||
f:close()
|
||||
if raw then return s end
|
||||
s = string.gsub(s, '^%s+', '')
|
||||
s = string.gsub(s, '%s+$', '')
|
||||
s = string.gsub(s, '[\n\r]+', ' ')
|
||||
return s
|
||||
end
|
||||
|
||||
local function get_extension(path)
|
||||
match = string.match(path, '%.([^%.]+)$' )
|
||||
if match == nil then
|
||||
return 'nomatch'
|
||||
else
|
||||
return match
|
||||
end
|
||||
end
|
||||
|
||||
local function get_extentionpath(path)
|
||||
match = string.match(path,'(.*)%.([^%.]+)$')
|
||||
if match == nil then
|
||||
return 'nomatch'
|
||||
else
|
||||
return match
|
||||
end
|
||||
end
|
||||
|
||||
local function has_extension (tab, val)
|
||||
for index, value in ipairs(tab) do
|
||||
if value == val then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
local function starts_protocol (tab, val)
|
||||
for index, value in ipairs(tab) do
|
||||
if (val:find(value) == 1) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
function get_clipboard()
|
||||
local clip
|
||||
if device == 'linux' then
|
||||
clip = os.capture(linux_paste, false)
|
||||
return clip
|
||||
elseif device == 'windows' then
|
||||
if windows_paste == 'powershell' then
|
||||
local args = {
|
||||
'powershell', '-NoProfile', '-Command', [[& {
|
||||
Trap {
|
||||
Write-Error -ErrorRecord $_
|
||||
Exit 1
|
||||
}
|
||||
$clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText
|
||||
if ($clip) {
|
||||
$clip = $clip
|
||||
}
|
||||
else {
|
||||
$clip = Get-Clipboard -Raw -Format FileDropList
|
||||
}
|
||||
$u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip)
|
||||
[Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length)
|
||||
}]]
|
||||
}
|
||||
return handleres(utils.subprocess({ args = args, cancellable = false }), args)
|
||||
else
|
||||
clip = os.capture(windows_paste, false)
|
||||
return clip
|
||||
end
|
||||
elseif device == 'mac' then
|
||||
clip = os.capture(mac_paste, false)
|
||||
return clip
|
||||
end
|
||||
return ''
|
||||
end
|
||||
|
||||
|
||||
function set_clipboard(text)
|
||||
local pipe
|
||||
if device == 'linux' then
|
||||
pipe = io.popen(linux_copy, 'w')
|
||||
pipe:write(text)
|
||||
pipe:close()
|
||||
elseif device == 'windows' then
|
||||
if windows_copy == 'powershell' then
|
||||
local res = utils.subprocess({ args = {
|
||||
'powershell', '-NoProfile', '-Command', string.format([[& {
|
||||
Trap {
|
||||
Write-Error -ErrorRecord $_
|
||||
Exit 1
|
||||
}
|
||||
Add-Type -AssemblyName PresentationCore
|
||||
[System.Windows.Clipboard]::SetText('%s')
|
||||
}]], text)
|
||||
} })
|
||||
else
|
||||
pipe = io.popen(windows_copy,'w')
|
||||
pipe:write(text)
|
||||
pipe:close()
|
||||
end
|
||||
elseif device == 'mac' then
|
||||
pipe = io.popen(mac_copy,'w')
|
||||
pipe:write(text)
|
||||
pipe:close()
|
||||
end
|
||||
return ''
|
||||
end
|
||||
|
||||
|
||||
local function copy()
|
||||
local filePath = mp.get_property_native('path')
|
||||
if (filePath ~= nil) then
|
||||
local time = math.floor(mp.get_property_number('time-pos'))
|
||||
mp.osd_message("Copied:\n"..filePath..' |time='..tostring(time))
|
||||
set_clipboard(filePath..' |time='..tostring(time))
|
||||
else
|
||||
mp.osd_message('Failed to Copy\nNo Video Found')
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
local function copy_path()
|
||||
local filePath = mp.get_property_native('path')
|
||||
if (filePath ~= nil) then
|
||||
mp.osd_message("Copied Video Only:\n"..filePath)
|
||||
set_clipboard(filePath)
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function paste()
|
||||
mp.osd_message("Pasting...")
|
||||
local clip = get_clipboard()
|
||||
clip = string.gsub(clip, "[\r\n]" , "")
|
||||
|
||||
local filePath = mp.get_property_native('path')
|
||||
local time
|
||||
|
||||
if string.match(clip, '(.*) |time=') then
|
||||
videoFile = string.match(clip, '(.*) |time=')
|
||||
time = string.match(clip, ' |time=(.*)')
|
||||
elseif string.match(clip, '^\"(.*)\"$') then
|
||||
videoFile = string.match(clip, '^\"(.*)\"$')
|
||||
else
|
||||
videoFile = clip
|
||||
end
|
||||
|
||||
local currentVideoExtension = string.lower(get_extension(videoFile))
|
||||
local currentVideoExtensionPath = (get_extentionpath(videoFile))
|
||||
|
||||
local seekTime
|
||||
|
||||
if (filePath == nil) and has_extension(extensions, currentVideoExtension) and (currentVideoExtensionPath~= '') then
|
||||
mp.osd_message("Pasted:\n"..videoFile)
|
||||
mp.commandv('loadfile', videoFile)
|
||||
elseif (filePath == nil) and (starts_protocol(protocols, videoFile)) then
|
||||
mp.osd_message("Pasted:\n"..videoFile)
|
||||
mp.commandv('loadfile', videoFile)
|
||||
elseif (filePath ~= nil) and (filePath ~= videoFile) and has_extension(extensions, currentVideoExtension) and (currentVideoExtensionPath~= '') or (starts_protocol(protocols, videoFile)) and (filePath ~= videoFile) then
|
||||
mp.osd_message('Pasted Into Playlist:\n'..videoFile)
|
||||
mp.commandv('loadfile', videoFile, 'append-play')
|
||||
elseif (filePath == videoFile) and (time == nil) then
|
||||
mp.osd_message('Same file is already running:\n'..clip)
|
||||
elseif (filePath == videoFile) and (time ~= nil) then
|
||||
mp.osd_message('Resumed to Copied Time')
|
||||
|
||||
seekTime = time + offset
|
||||
if (seekTime < 0) then
|
||||
seekTime = 0
|
||||
end
|
||||
|
||||
mp.commandv('seek', seekTime, 'absolute', 'exact')
|
||||
else
|
||||
mp.osd_message('Failed to Paste\nPasted Unsupported Item:\n'..clip)
|
||||
end
|
||||
|
||||
pasted = true
|
||||
end
|
||||
|
||||
|
||||
function paste_playlist()
|
||||
mp.osd_message("Pasting...")
|
||||
|
||||
local clip = get_clipboard()
|
||||
clip = string.gsub(clip, "[\r\n]" , "")
|
||||
|
||||
local filePath = mp.get_property_native('path')
|
||||
|
||||
if string.match(clip, '(.*) |time=') then
|
||||
videoFile = string.match(clip, '(.*) |time=')
|
||||
elseif string.match(clip, '^\"(.*)\"$') then
|
||||
videoFile = string.match(clip, '^\"(.*)\"$')
|
||||
else
|
||||
videoFile = clip
|
||||
end
|
||||
local currentVideoExtension = string.lower(get_extension(videoFile))
|
||||
local currentVideoExtensionPath = (get_extentionpath(videoFile))
|
||||
|
||||
if has_extension(extensions, currentVideoExtension) and (currentVideoExtensionPath~= '') or (starts_protocol(protocols, videoFile)) then
|
||||
mp.osd_message('Pasted Into Playlist:\n'..videoFile)
|
||||
mp.commandv('loadfile', videoFile, 'append-play')
|
||||
else
|
||||
mp.osd_message('Failed to Add Into Playlist\nPasted Unsupported Item:\n'..clip)
|
||||
end
|
||||
|
||||
pasted = true
|
||||
end
|
||||
|
||||
|
||||
mp.register_event('end-file', function()
|
||||
pasted = false
|
||||
end)
|
||||
|
||||
|
||||
mp.register_event('file-loaded', function()
|
||||
if (pasted == true) then
|
||||
local clip = get_clipboard()
|
||||
local time = string.match(clip, ' |time=(.*)')
|
||||
local videoFile = string.match(clip, '(.*) |time=')
|
||||
local filePath = mp.get_property_native('path')
|
||||
|
||||
local seekTime
|
||||
|
||||
if (filePath == videoFile) and (time ~= nil) then
|
||||
|
||||
seekTime = time + offset
|
||||
if (seekTime < 0) then
|
||||
seekTime = 0
|
||||
end
|
||||
|
||||
mp.commandv('seek', seekTime, 'absolute', 'exact')
|
||||
end
|
||||
else
|
||||
return false
|
||||
end
|
||||
end)
|
||||
|
||||
---------------------------KEYBINDS CUSTOMIZATION SETTINGS---------------------------------
|
||||
if device == 'mac' then --MAC OS Keybinds
|
||||
mp.add_key_binding('Meta+alt+c', 'copy-path', copy_path)
|
||||
mp.add_key_binding('Meta+alt+C', 'copy-pathCaps', copy_path)
|
||||
mp.add_key_binding('Meta+alt+v', 'paste-playlist', paste_playlist)
|
||||
mp.add_key_binding('Meta+alt+V', 'paste-playlistCaps', paste_playlist)
|
||||
else --Windows and Linux Keybinds
|
||||
mp.add_key_binding('ctrl+c', 'copy-path', copy_path)
|
||||
mp.add_key_binding('ctrl+v', 'paste-playlist', paste_playlist)
|
||||
end
|
||||
---------------------END OF KEYBINDS CUSTOMIZATION SETTINGS---------------------------------
|
||||
@@ -0,0 +1,56 @@
|
||||
---@class ClipshotOptions
|
||||
---@field name string
|
||||
---@field type string
|
||||
local o = {
|
||||
name = 'mpv-screenshot.jpeg',
|
||||
type = '' -- defaults to jpeg
|
||||
}
|
||||
require('mp.options').read_options(o, 'clipshot')
|
||||
|
||||
local file, cmd
|
||||
|
||||
local lib = package.cpath:match('%p[\\|/]?%p(%a+)')
|
||||
if lib == 'so' then -- Linux/BSD
|
||||
file = '/tmp/'..o.name
|
||||
if os.getenv('XDG_SESSION_TYPE') == 'wayland' then -- Wayland
|
||||
cmd = {'sh', '-c', ('wl-copy < %q'):format(image)}
|
||||
else -- Xorg
|
||||
local type = o.type ~= '' and o.type or 'image/jpeg'
|
||||
cmd = {'xclip', '-sel', 'c', '-t', type, '-i', file}
|
||||
end
|
||||
elseif lib == 'dll' then -- Windows
|
||||
file = os.getenv('TEMP')..'\\'..o.name
|
||||
cmd = {
|
||||
'powershell', '-NoProfile', '-Command', ([[& {
|
||||
Add-Type -Assembly System.Windows.Forms;
|
||||
Add-Type -Assembly System.Drawing;
|
||||
$shot = [Drawing.Image]::FromFile(%q);
|
||||
[Windows.Forms.Clipboard]::SetImage($shot);
|
||||
}]]):format(file)
|
||||
}
|
||||
else -- MacOS
|
||||
file = os.getenv('TMPDIR')..'/'..o.name
|
||||
-- png: «class PNGf»
|
||||
local type = o.type ~= '' and o.type or 'JPEG picture'
|
||||
cmd = {
|
||||
'osascript', '-e', ([[
|
||||
set the clipboard to ( ¬
|
||||
read (POSIX file %q) as %s)
|
||||
]]):format(file, type)
|
||||
}
|
||||
end
|
||||
|
||||
---@param arg string
|
||||
---@return fun()
|
||||
local function clipshot(arg)
|
||||
return function()
|
||||
mp.commandv('screenshot-to-file', file, arg)
|
||||
mp.command_native_async({'run', unpack(cmd)}, function(suc, _, err)
|
||||
mp.osd_message(suc and 'Copied screenshot to clipboard' or err, 1)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
mp.add_key_binding('c', 'clipshot-subs', clipshot('subtitles'))
|
||||
mp.add_key_binding('C', 'clipshot-video', clipshot('video'))
|
||||
mp.add_key_binding('Alt+c', 'clipshot-window', clipshot('window'))
|
||||
@@ -0,0 +1,418 @@
|
||||
-- reload.lua
|
||||
--
|
||||
-- When an online video is stuck buffering or got very slow CDN
|
||||
-- source, restarting often helps. This script provides automatic
|
||||
-- reloading of videos that doesn't have buffering progress for some
|
||||
-- time while keeping the current time position. It also adds `Ctrl+r`
|
||||
-- keybinding to reload video manually.
|
||||
--
|
||||
-- SETTINGS
|
||||
--
|
||||
-- To override default setting put the `lua-settings/reload.conf` file in
|
||||
-- mpv user folder, on linux it is `~/.config/mpv`. NOTE: config file
|
||||
-- name should match the name of the script.
|
||||
--
|
||||
-- Default `reload.conf` settings:
|
||||
--
|
||||
-- ```
|
||||
-- # enable automatic reload on timeout
|
||||
-- # when paused-for-cache event fired, we will wait
|
||||
-- # paused_for_cache_timer_timeout sedonds and then reload the video
|
||||
-- paused_for_cache_timer_enabled=yes
|
||||
--
|
||||
-- # checking paused_for_cache property interval in seconds,
|
||||
-- # can not be less than 0.05 (50 ms)
|
||||
-- paused_for_cache_timer_interval=1
|
||||
--
|
||||
-- # time in seconds to wait until reload
|
||||
-- paused_for_cache_timer_timeout=10
|
||||
--
|
||||
-- # enable automatic reload based on demuxer cache
|
||||
-- # if demuxer-cache-time property didn't change in demuxer_cache_timer_timeout
|
||||
-- # time interval, the video will be reloaded as soon as demuxer cache depleated
|
||||
-- demuxer_cache_timer_enabled=yes
|
||||
--
|
||||
-- # checking demuxer-cache-time property interval in seconds,
|
||||
-- # can not be less than 0.05 (50 ms)
|
||||
-- demuxer_cache_timer_interval=2
|
||||
--
|
||||
-- # if demuxer cache didn't receive any data during demuxer_cache_timer_timeout
|
||||
-- # we decide that it has no progress and will reload the stream when
|
||||
-- # paused_for_cache event happens
|
||||
-- demuxer_cache_timer_timeout=20
|
||||
--
|
||||
-- # when the end-of-file is reached, reload the stream to check
|
||||
-- # if there is more content available.
|
||||
-- reload_eof_enabled=no
|
||||
--
|
||||
-- # keybinding to reload stream from current time position
|
||||
-- # you can disable keybinding by setting it to empty value
|
||||
-- # reload_key_binding=
|
||||
-- reload_key_binding=Ctrl+r
|
||||
-- ```
|
||||
--
|
||||
-- DEBUGGING
|
||||
--
|
||||
-- Debug messages will be printed to stdout with mpv command line option
|
||||
-- `--msg-level='reload=debug'`. You may also need to add the `--no-msg-color`
|
||||
-- option to make the debug logs visible if you are using a dark colorscheme
|
||||
-- in terminal.
|
||||
|
||||
local msg = require 'mp.msg'
|
||||
local options = require 'mp.options'
|
||||
local utils = require 'mp.utils'
|
||||
|
||||
|
||||
local settings = {
|
||||
paused_for_cache_timer_enabled = true,
|
||||
paused_for_cache_timer_interval = 1,
|
||||
paused_for_cache_timer_timeout = 10,
|
||||
demuxer_cache_timer_enabled = true,
|
||||
demuxer_cache_timer_interval = 2,
|
||||
demuxer_cache_timer_timeout = 20,
|
||||
reload_eof_enabled = false,
|
||||
reload_key_binding = "Ctrl+r",
|
||||
}
|
||||
|
||||
-- global state stores properties between reloads
|
||||
local property_path = nil
|
||||
local property_time_pos = 0
|
||||
local property_keep_open = nil
|
||||
|
||||
-- FSM managing the demuxer cache.
|
||||
--
|
||||
-- States:
|
||||
--
|
||||
-- * fetch - fetching new data
|
||||
-- * stale - unable to fetch new data for time < 'demuxer_cache_timer_timeout'
|
||||
-- * stuck - unable to fetch new data for time >= 'demuxer_cache_timer_timeout'
|
||||
--
|
||||
-- State transitions:
|
||||
--
|
||||
-- +---------------------------+
|
||||
-- v |
|
||||
-- +-------+ +-------+ +-------+
|
||||
-- + fetch +<--->+ stale +---->+ stuck |
|
||||
-- +-------+ +-------+ +-------+
|
||||
-- | ^ | ^ | ^
|
||||
-- +---+ +---+ +---+
|
||||
local demuxer_cache = {
|
||||
timer = nil,
|
||||
|
||||
state = {
|
||||
name = 'uninitialized',
|
||||
demuxer_cache_time = 0,
|
||||
in_state_time = 0,
|
||||
},
|
||||
|
||||
events = {
|
||||
continue_fetch = { name = 'continue_fetch', from = 'fetch', to = 'fetch' },
|
||||
continue_stale = { name = 'continue_stale', from = 'stale', to = 'stale' },
|
||||
continue_stuck = { name = 'continue_stuck', from = 'stuck', to = 'stuck' },
|
||||
fetch_to_stale = { name = 'fetch_to_stale', from = 'fetch', to = 'stale' },
|
||||
stale_to_fetch = { name = 'stale_to_fetch', from = 'stale', to = 'fetch' },
|
||||
stale_to_stuck = { name = 'stale_to_stuck', from = 'stale', to = 'stuck' },
|
||||
stuck_to_fetch = { name = 'stuck_to_fetch', from = 'stuck', to = 'fetch' },
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
-- Always start with 'fetch' state
|
||||
function demuxer_cache.reset_state()
|
||||
demuxer_cache.state = {
|
||||
name = demuxer_cache.events.continue_fetch.to,
|
||||
demuxer_cache_time = 0,
|
||||
in_state_time = 0,
|
||||
}
|
||||
end
|
||||
|
||||
-- Has 'demuxer_cache_time' changed
|
||||
function demuxer_cache.has_progress_since(t)
|
||||
return demuxer_cache.state.demuxer_cache_time ~= t
|
||||
end
|
||||
|
||||
function demuxer_cache.is_state_fetch()
|
||||
return demuxer_cache.state.name == demuxer_cache.events.continue_fetch.to
|
||||
end
|
||||
|
||||
function demuxer_cache.is_state_stale()
|
||||
return demuxer_cache.state.name == demuxer_cache.events.continue_stale.to
|
||||
end
|
||||
|
||||
function demuxer_cache.is_state_stuck()
|
||||
return demuxer_cache.state.name == demuxer_cache.events.continue_stuck.to
|
||||
end
|
||||
|
||||
function demuxer_cache.transition(event)
|
||||
if demuxer_cache.state.name == event.from then
|
||||
|
||||
-- state setup
|
||||
demuxer_cache.state.demuxer_cache_time = event.demuxer_cache_time
|
||||
|
||||
if event.name == 'continue_fetch' then
|
||||
demuxer_cache.state.in_state_time = demuxer_cache.state.in_state_time + event.interval
|
||||
elseif event.name == 'continue_stale' then
|
||||
demuxer_cache.state.in_state_time = demuxer_cache.state.in_state_time + event.interval
|
||||
elseif event.name == 'continue_stuck' then
|
||||
demuxer_cache.state.in_state_time = demuxer_cache.state.in_state_time + event.interval
|
||||
elseif event.name == 'fetch_to_stale' then
|
||||
demuxer_cache.state.in_state_time = 0
|
||||
elseif event.name == 'stale_to_fetch' then
|
||||
demuxer_cache.state.in_state_time = 0
|
||||
elseif event.name == 'stale_to_stuck' then
|
||||
demuxer_cache.state.in_state_time = 0
|
||||
elseif event.name == 'stuck_to_fetch' then
|
||||
demuxer_cache.state.in_state_time = 0
|
||||
end
|
||||
|
||||
-- state transition
|
||||
demuxer_cache.state.name = event.to
|
||||
|
||||
msg.debug('demuxer_cache.transition', event.name, utils.to_string(demuxer_cache.state))
|
||||
else
|
||||
msg.error(
|
||||
'demuxer_cache.transition',
|
||||
'illegal transition', event.name,
|
||||
'from state', demuxer_cache.state.name)
|
||||
end
|
||||
end
|
||||
|
||||
function demuxer_cache.initialize(demuxer_cache_timer_interval)
|
||||
demuxer_cache.reset_state()
|
||||
demuxer_cache.timer = mp.add_periodic_timer(
|
||||
demuxer_cache_timer_interval,
|
||||
function()
|
||||
demuxer_cache.demuxer_cache_timer_tick(
|
||||
mp.get_property_native('demuxer-cache-time'),
|
||||
demuxer_cache_timer_interval)
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
-- If there is no progress of demuxer_cache_time in
|
||||
-- settings.demuxer_cache_timer_timeout time interval switch state to
|
||||
-- 'stuck' and switch back to 'fetch' as soon as any progress is made
|
||||
function demuxer_cache.demuxer_cache_timer_tick(demuxer_cache_time, demuxer_cache_timer_interval)
|
||||
local event = nil
|
||||
local cache_has_progress = demuxer_cache.has_progress_since(demuxer_cache_time)
|
||||
|
||||
-- I miss pattern matching so much
|
||||
if demuxer_cache.is_state_fetch() then
|
||||
if cache_has_progress then
|
||||
event = demuxer_cache.events.continue_fetch
|
||||
else
|
||||
event = demuxer_cache.events.fetch_to_stale
|
||||
end
|
||||
elseif demuxer_cache.is_state_stale() then
|
||||
if cache_has_progress then
|
||||
event = demuxer_cache.events.stale_to_fetch
|
||||
elseif demuxer_cache.state.in_state_time < settings.demuxer_cache_timer_timeout then
|
||||
event = demuxer_cache.events.continue_stale
|
||||
else
|
||||
event = demuxer_cache.events.stale_to_stuck
|
||||
end
|
||||
elseif demuxer_cache.is_state_stuck() then
|
||||
if cache_has_progress then
|
||||
event = demuxer_cache.events.stuck_to_fetch
|
||||
else
|
||||
event = demuxer_cache.events.continue_stuck
|
||||
end
|
||||
end
|
||||
|
||||
event.demuxer_cache_time = demuxer_cache_time
|
||||
event.interval = demuxer_cache_timer_interval
|
||||
demuxer_cache.transition(event)
|
||||
end
|
||||
|
||||
|
||||
local paused_for_cache = {
|
||||
timer = nil,
|
||||
time = 0,
|
||||
}
|
||||
|
||||
function paused_for_cache.reset_timer()
|
||||
msg.debug('paused_for_cache.reset_timer', paused_for_cache.time)
|
||||
if paused_for_cache.timer then
|
||||
paused_for_cache.timer:kill()
|
||||
paused_for_cache.timer = nil
|
||||
paused_for_cache.time = 0
|
||||
end
|
||||
end
|
||||
|
||||
function paused_for_cache.start_timer(interval_seconds, timeout_seconds)
|
||||
msg.debug('paused_for_cache.start_timer', paused_for_cache.time)
|
||||
if not paused_for_cache.timer then
|
||||
paused_for_cache.timer = mp.add_periodic_timer(
|
||||
interval_seconds,
|
||||
function()
|
||||
paused_for_cache.time = paused_for_cache.time + interval_seconds
|
||||
if paused_for_cache.time >= timeout_seconds then
|
||||
paused_for_cache.reset_timer()
|
||||
reload_resume()
|
||||
end
|
||||
msg.debug('paused_for_cache', 'tick', paused_for_cache.time)
|
||||
end
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function paused_for_cache.handler(property, is_paused)
|
||||
if is_paused then
|
||||
|
||||
if demuxer_cache.is_state_stuck() then
|
||||
msg.info("demuxer cache has no progress")
|
||||
-- reset demuxer state to avoid immediate reload if
|
||||
-- paused_for_cache event triggered right after reload
|
||||
demuxer_cache.reset_state()
|
||||
reload_resume()
|
||||
end
|
||||
|
||||
paused_for_cache.start_timer(
|
||||
settings.paused_for_cache_timer_interval,
|
||||
settings.paused_for_cache_timer_timeout)
|
||||
else
|
||||
paused_for_cache.reset_timer()
|
||||
end
|
||||
end
|
||||
|
||||
function read_settings()
|
||||
options.read_options(settings, mp.get_script_name())
|
||||
msg.debug(utils.to_string(settings))
|
||||
end
|
||||
|
||||
function reload(path, time_pos)
|
||||
msg.debug("reload", path, time_pos)
|
||||
if time_pos == nil then
|
||||
mp.commandv("loadfile", path, "replace")
|
||||
else
|
||||
mp.commandv("loadfile", path, "replace", "start=+" .. time_pos)
|
||||
end
|
||||
end
|
||||
|
||||
function reload_resume()
|
||||
local path = mp.get_property("path", property_path)
|
||||
local time_pos = mp.get_property("time-pos")
|
||||
local reload_duration = mp.get_property_native("duration")
|
||||
|
||||
local playlist_count = mp.get_property_number("playlist/count")
|
||||
local playlist_pos = mp.get_property_number("playlist-pos")
|
||||
local playlist = {}
|
||||
for i = 0, playlist_count-1 do
|
||||
playlist[i] = mp.get_property("playlist/" .. i .. "/filename")
|
||||
end
|
||||
-- Tries to determine live stream vs. pre-recordered VOD. VOD has non-zero
|
||||
-- duration property. When reloading VOD, to keep the current time position
|
||||
-- we should provide offset from the start. Stream doesn't have fixed start.
|
||||
-- Decent choice would be to reload stream from it's current 'live' positon.
|
||||
-- That's the reason we don't pass the offset when reloading streams.
|
||||
if reload_duration and reload_duration > 0 then
|
||||
msg.info("reloading video from", time_pos, "second")
|
||||
reload(path, time_pos)
|
||||
-- VODs get stuck when reload is called without a time_pos
|
||||
-- this is most noticeable in youtube videos whenever download gets stuck in the first frames
|
||||
-- video would stay paused without being actually paused
|
||||
-- issue surfaced in mpv 0.33, afaik
|
||||
elseif reload_duration and reload_duration == 0 then
|
||||
msg.info("reloading video from", time_pos, "second")
|
||||
reload(path, time_pos)
|
||||
else
|
||||
msg.info("reloading stream")
|
||||
reload(path, nil)
|
||||
end
|
||||
msg.info("file ", playlist_pos+1, "of", playlist_count, "in playlist")
|
||||
for i = 0, playlist_pos-1 do
|
||||
mp.commandv("loadfile", playlist[i], "append")
|
||||
end
|
||||
mp.commandv("playlist-move", 0, playlist_pos+1)
|
||||
for i = playlist_pos+1, playlist_count-1 do
|
||||
mp.commandv("loadfile", playlist[i], "append")
|
||||
end
|
||||
end
|
||||
|
||||
function reload_eof(property, eof_reached)
|
||||
msg.debug("reload_eof", property, eof_reached)
|
||||
local time_pos = mp.get_property_number("time-pos")
|
||||
local duration = mp.get_property_number("duration")
|
||||
|
||||
if eof_reached and math.floor(time_pos) == math.floor(duration) then
|
||||
msg.debug("property_time_pos", property_time_pos, "time_pos", time_pos)
|
||||
|
||||
-- Check that playback time_pos made progress after the last reload. When
|
||||
-- eof is reached we try to reload video, in case there is more content
|
||||
-- available. If time_pos stayed the same after reload, it means that vidkk
|
||||
-- to avoid infinite reload loop when playback ended
|
||||
-- math.floor function rounds time_pos to a second, to avoid inane reloads
|
||||
if math.floor(property_time_pos) == math.floor(time_pos) then
|
||||
msg.info("eof reached, playback ended")
|
||||
mp.set_property("keep-open", property_keep_open)
|
||||
else
|
||||
msg.info("eof reached, checking if more content available")
|
||||
reload_resume()
|
||||
mp.set_property_bool("pause", false)
|
||||
property_time_pos = time_pos
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function on_file_loaded(event)
|
||||
local debug_info = {
|
||||
event = event,
|
||||
time_pos = mp.get_property("time-pos"),
|
||||
stream_pos = mp.get_property("stream-pos"),
|
||||
stream_end = mp.get_property("stream-end"),
|
||||
duration = mp.get_property("duration"),
|
||||
seekable = mp.get_property("seekable"),
|
||||
pause = mp.get_property("pause"),
|
||||
paused_for_cache = mp.get_property("paused-for-cache"),
|
||||
cache_buffering_state = mp.get_property("cache-buffering-state"),
|
||||
}
|
||||
msg.debug("debug_info", utils.to_string(debug_info))
|
||||
|
||||
-- When the video is reloaded after being paused for cache, it won't start
|
||||
-- playing again while all properties looks fine:
|
||||
-- `pause=no`, `paused-for-cache=no` and `cache-buffering-state=100`.
|
||||
-- As a workaround, we cycle through the paused state by sending two SPACE
|
||||
-- keypresses.
|
||||
-- What didn't work:
|
||||
-- - Cycling through the `pause` property.
|
||||
-- - Run the `playlist-play-index current` command.
|
||||
mp.commandv("keypress", 'SPACE')
|
||||
mp.commandv("keypress", 'SPACE')
|
||||
end
|
||||
|
||||
-- main
|
||||
|
||||
read_settings()
|
||||
|
||||
if settings.reload_key_binding ~= "" then
|
||||
mp.add_key_binding(settings.reload_key_binding, "reload_resume", reload_resume)
|
||||
end
|
||||
|
||||
if settings.paused_for_cache_timer_enabled then
|
||||
mp.observe_property("paused-for-cache", "bool", paused_for_cache.handler)
|
||||
end
|
||||
|
||||
if settings.demuxer_cache_timer_enabled then
|
||||
demuxer_cache.initialize(settings.demuxer_cache_timer_interval)
|
||||
end
|
||||
|
||||
if settings.reload_eof_enabled then
|
||||
-- vo-configured == video output created && its configuration went ok
|
||||
mp.observe_property(
|
||||
"vo-configured",
|
||||
"bool",
|
||||
function(name, vo_configured)
|
||||
msg.debug(name, vo_configured)
|
||||
if vo_configured then
|
||||
property_path = mp.get_property("path")
|
||||
property_keep_open = mp.get_property("keep-open")
|
||||
mp.set_property("keep-open", "yes")
|
||||
mp.set_property("keep-open-pause", "no")
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
mp.observe_property("eof-reached", "bool", reload_eof)
|
||||
end
|
||||
|
||||
mp.register_event("file-loaded", on_file_loaded)
|
||||
@@ -0,0 +1,5 @@
|
||||
if grep -q "Arch Linux" /etc/os-release
|
||||
function bat --wraps=glow --description 'alias bat glow'
|
||||
glow $argv
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,9 @@
|
||||
if grep -q "Arch Linux" /etc/os-release
|
||||
atuin init fish | source
|
||||
end
|
||||
|
||||
if grep -q "Arch Linux" /etc/os-release
|
||||
function cat --wraps=glow --description 'alias cat glow'
|
||||
glow $argv
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,3 @@
|
||||
function deployments
|
||||
rpm-ostree status $argv
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
function fish_greeting
|
||||
fastfetch -c ~/.config/fastfetch/startup.jsonc
|
||||
## atuin
|
||||
if grep -q "Arch Linux" /etc/os-release
|
||||
atuin init fish | source
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,4 @@
|
||||
function m4a --description 'alias m4a yt-dlp -x --audio-format m4a'
|
||||
yt-dlp -x --audio-format m4a $argv
|
||||
|
||||
end
|
||||
@@ -0,0 +1,3 @@
|
||||
function pin-deployment
|
||||
sudo ostree admin pin $argv
|
||||
end
|
||||
@@ -0,0 +1,3 @@
|
||||
function remove-deployment
|
||||
sudo ostree admin undeploy $argv
|
||||
end
|
||||
@@ -0,0 +1,3 @@
|
||||
function unpin-deployment
|
||||
sudo ostree admin pin -u $argv
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
-N 5
|
||||
--embed-thumbnail
|
||||
--embed-metadata
|
||||
--cookies-from-browser firefox
|
||||
-o ~/Downloads/%(fulltitle)s.%(ext)s
|
||||
@@ -0,0 +1,7 @@
|
||||
--ozone-platform-hint=auto
|
||||
--enable-gpu-rasterization
|
||||
--ignore-gpu-blocklist
|
||||
--enable-zero-copy
|
||||
--use-gl=angle
|
||||
--use-angle=vulkan
|
||||
--enable-features=Vulkan,DefaultANGLEVulkan,VulkanFromANGLE,VaapiVideoDecodeLinuxGL,VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder
|
||||
221
docs/solarpowered-main/files/shared/etc/topgrade.toml
Normal file
221
docs/solarpowered-main/files/shared/etc/topgrade.toml
Normal file
@@ -0,0 +1,221 @@
|
||||
# Include any additional configuration file(s)
|
||||
# [include] sections are processed in the order you write them
|
||||
# Files in $CONFIG_DIR/topgrade.d/ are automatically included before this file
|
||||
[include]
|
||||
# paths = ["/etc/topgrade.toml"]
|
||||
|
||||
|
||||
[misc]
|
||||
# Run `sudo -v` to cache credentials at the start of the run
|
||||
# This avoids a blocking password prompt in the middle of an unattended run
|
||||
# (default: false)
|
||||
# pre_sudo = false
|
||||
# Sudo command to be used
|
||||
# sudo_command = "sudo"
|
||||
# Disable specific steps - same options as the command line flag
|
||||
disable = ["system", "containers"]
|
||||
# Ignore failures for these steps
|
||||
# ignore_failures = ["toolbx", "distrobox"]
|
||||
# List of remote machines with Topgrade installed on them
|
||||
# remote_topgrades = ["toothless", "pi", "parnas"]
|
||||
# Path to Topgrade executable on remote machines
|
||||
# remote_topgrade_path = ".cargo/bin/topgrade"
|
||||
# Arguments to pass to SSH when upgrading remote systems
|
||||
# ssh_arguments = "-o ConnectTimeout=2"
|
||||
# Arguments to pass tmux when pulling Repositories
|
||||
# tmux_arguments = "-S /var/tmux.sock"
|
||||
# Do not set the terminal title (default: true)
|
||||
# set_title = true
|
||||
# Display the time in step titles (default: true)
|
||||
# display_time = true
|
||||
# Don't ask for confirmations (no default value)
|
||||
assume_yes = true
|
||||
# Do not ask to retry failed steps (default: false)
|
||||
# no_retry = true
|
||||
# Run inside tmux (default: false)
|
||||
# run_in_tmux = true
|
||||
# Cleanup temporary or old files (default: false)
|
||||
cleanup = true
|
||||
# Send a notification for every step (default: false)
|
||||
# notify_each_step = false
|
||||
# Skip sending a notification at the end of a run (default: false)
|
||||
# skip_notify = true
|
||||
# The Bash-it branch to update (default: "stable")
|
||||
# bashit_branch = "stable"
|
||||
# Run specific steps - same options as the command line flag
|
||||
# only = ["system", "emacs"]
|
||||
|
||||
# Whether to self update
|
||||
#
|
||||
# this will be ignored if the binary is built without self update support
|
||||
#
|
||||
# available also via setting the environment variable TOPGRADE_NO_SELF_UPGRADE)
|
||||
# no_self_update = true
|
||||
|
||||
# Extra tracing filter directives
|
||||
# These are prepended to the `--log-filter` argument
|
||||
# See: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives
|
||||
# log_filters = ["topgrade::command=debug", "warn"]
|
||||
|
||||
# Commands to run before anything
|
||||
[pre_commands]
|
||||
# "Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"
|
||||
|
||||
# Commands to run after anything
|
||||
[post_commands]
|
||||
# "Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"
|
||||
|
||||
# Custom commands
|
||||
[commands]
|
||||
# "Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter"
|
||||
# "Custom command using interactive shell (unix)" = "-i vim_upgrade"
|
||||
|
||||
[python]
|
||||
# enable_pip_review = true ###disabled by default
|
||||
# enable_pip_review_local = true ###disabled by default
|
||||
# enable_pipupgrade = true ###disabled by default
|
||||
# pipupgrade_arguments = "-y -u --pip-path pip" ###disabled by default
|
||||
|
||||
[composer]
|
||||
# self_update = true
|
||||
|
||||
[brew]
|
||||
# For the BrewCask step
|
||||
# If `Repo Cask Upgrade` exists, then use the `-a` option.
|
||||
# Otherwise, use the `--greedy` option.
|
||||
# greedy_cask = true
|
||||
|
||||
# For the BrewCask step
|
||||
# If `Repo Cask Upgrade` does not exist, then use the `--greedy_latest` option.
|
||||
# NOTE: the above entry `greedy_cask` contains this entry, though you can enable
|
||||
# both of them, they won't clash with each other.
|
||||
# greedy_latest = true
|
||||
|
||||
# For the BrewCask step
|
||||
# If `Repo Cask Upgrade` does not exist, then use the `--greedy_latest` option.
|
||||
# NOTE: the above entry `greedy_cask` contains this entry, though you can enable
|
||||
# both of them, they won't clash with each other.
|
||||
# greedy_latest = true
|
||||
|
||||
# For the BrewFormula step
|
||||
# Execute `brew autoremove` after the step.
|
||||
# autoremove = true
|
||||
|
||||
# For the BrewFormula step
|
||||
# Upgrade formulae built from the HEAD branch; `brew upgrade --fetch-HEAD`
|
||||
# fetch_head = true
|
||||
|
||||
[linux]
|
||||
# Arch Package Manager to use.
|
||||
# Allowed values:
|
||||
# autodetect, aura, garuda_update, pacman, pamac, paru, pikaur, trizen, yay
|
||||
# arch_package_manager = "pacman"
|
||||
|
||||
# Arguments to pass yay (or paru) when updating packages
|
||||
# yay_arguments = "--nodevel"
|
||||
|
||||
# Arguments to pass dnf when updating packages
|
||||
# dnf_arguments = "--refresh"
|
||||
|
||||
# aura_aur_arguments = "-kx"
|
||||
|
||||
# aura_pacman_arguments = ""
|
||||
# garuda_update_arguments = ""
|
||||
|
||||
# show_arch_news = true
|
||||
|
||||
# trizen_arguments = "--devel"
|
||||
|
||||
# pikaur_arguments = ""
|
||||
|
||||
# pamac_arguments = "--no-devel"
|
||||
|
||||
# enable_tlmgr = true
|
||||
|
||||
# emerge_sync_flags = "-q"
|
||||
|
||||
# emerge_update_flags = "-uDNa --with-bdeps=y world"
|
||||
|
||||
# redhat_distro_sync = false
|
||||
|
||||
# suse_dup = false
|
||||
|
||||
# rpm_ostree = false
|
||||
|
||||
# nix_arguments = "--flake"
|
||||
|
||||
# nix_env_arguments = "--prebuilt-only"
|
||||
|
||||
# Extra Home Manager arguments
|
||||
|
||||
# home_manager_arguments = ["--flake", "file"]
|
||||
|
||||
|
||||
[git]
|
||||
# How many repos to pull at max in parallel
|
||||
# max_concurrency = 5
|
||||
|
||||
# Additional git repositories to pull
|
||||
repos = [
|
||||
"$HOME/*/",
|
||||
"$HOME/git/*/",
|
||||
]
|
||||
|
||||
# Don't pull the predefined git repos
|
||||
# pull_predefined = false
|
||||
# Arguments to pass Git when pulling Repositories
|
||||
# arguments = "--rebase --autostash"
|
||||
|
||||
[windows]
|
||||
# Manually select Windows updates
|
||||
# accept_all_updates = false
|
||||
# open_remotes_in_new_terminal = true
|
||||
# wsl_update_pre_release = true
|
||||
# wsl_update_use_web_download = true
|
||||
# Causes Topgrade to rename itself during the run to allow package managers
|
||||
# to upgrade it. Use this only if you installed Topgrade by using a package
|
||||
# manager such as Scoop or Cargo
|
||||
# self_rename = true
|
||||
|
||||
[npm]
|
||||
# Use sudo if the NPM directory isn't owned by the current user
|
||||
# use_sudo = true
|
||||
|
||||
[yarn]
|
||||
# Run `yarn global upgrade` with `sudo`
|
||||
# use_sudo = true
|
||||
|
||||
[vim]
|
||||
# For `vim-plug`, execute `PlugUpdate!` instead of `PlugUpdate`
|
||||
# force_plug_update = true
|
||||
|
||||
[firmware]
|
||||
# Offer to update firmware; if false just check for and display available updates
|
||||
upgrade = false
|
||||
|
||||
[vagrant]
|
||||
# Vagrant directories
|
||||
# directories = []
|
||||
# power on vagrant boxes if needed
|
||||
# power_on = true
|
||||
# Always suspend vagrant boxes instead of powering off
|
||||
# always_suspend = true
|
||||
|
||||
[flatpak]
|
||||
# Use sudo for updating the system-wide installation
|
||||
# use_sudo = true
|
||||
|
||||
[distrobox]
|
||||
use_root = false
|
||||
# containers = ["archlinux-latest"]
|
||||
|
||||
[containers]
|
||||
# Specify the containers to ignore while updating (Wildcard supported)
|
||||
# ignored_containers = ["ghcr.io/rancher-sandbox/rancher-desktop/rdx-proxy:latest", "docker.io*"]
|
||||
|
||||
[lensfun]
|
||||
# If disabled, Topgrade invokes `lensfun‑update‑data` without root priviledge,
|
||||
# then the update will be only available to you. Otherwise, `sudo` is required,
|
||||
# and the update will be installed system-wide, i.e., available to all users.
|
||||
# (default: false)
|
||||
# use_sudo = false
|
||||
3
docs/solarpowered-main/files/shared/usr/bin/append
Executable file
3
docs/solarpowered-main/files/shared/usr/bin/append
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
/usr/bin/just --justfile /usr/share/appends/00-master.just "${@}"
|
||||
10
docs/solarpowered-main/files/shared/usr/bin/melonDS
Executable file
10
docs/solarpowered-main/files/shared/usr/bin/melonDS
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if any arguments were passed to the script
|
||||
if [ "$#" -gt 0 ]; then
|
||||
# If arguments are passed, include them in the flatpak run command
|
||||
flatpak run net.kuribo64.melonDS "$@"
|
||||
else
|
||||
# If no arguments are passed, just run the flatpak without any file
|
||||
flatpak run net.kuribo64.melonDS
|
||||
fi
|
||||
19
docs/solarpowered-main/files/shared/usr/bin/rechunker-group-fix
Executable file
19
docs/solarpowered-main/files/shared/usr/bin/rechunker-group-fix
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
IGNORE_MANUAL="wheel|root|sudo|nobody"
|
||||
for manually_created_user in $(grep -E -e ".*:[1-3][[:digit:]]{3}:.*" "$1") ; do
|
||||
# `grep` matched on a group with GID [1-3]000 or so
|
||||
if [ ! -z "$(cut -f4 -d: <<< "${manually_created_user}")" ] ; then
|
||||
continue
|
||||
fi
|
||||
IGNORE_MANUAL="$(cut -f1,3 -d: --output-delimiter="|" <<< "${manually_created_user}")|${IGNORE_MANUAL:-}"
|
||||
for related_group in $(grep "$(cut -f1 -d: <<< ${manually_created_user})" "$1"); do
|
||||
# Deduplicates matches for the same group/user
|
||||
if [ "$(cut -f1 <<< "${related_group}")" == "$(cut -f1 <<< "${manually_created_user}")" ] ; then
|
||||
continue
|
||||
fi
|
||||
IGNORE_MANUAL="$(cut -f1 -d: <<< "${related_group}")|${IGNORE_MANUAL:-}"
|
||||
done
|
||||
done
|
||||
|
||||
grep --no-filename -e "^g" /usr/lib/sysusers.d/*.conf | grep -v -E -e "${IGNORE_MANUAL}" | tr -s " " | cut -d" " -f2 | uniq | xargs -I{} sed -i "/{}/d" "${1}"
|
||||
10
docs/solarpowered-main/files/shared/usr/bin/ryujinx
Executable file
10
docs/solarpowered-main/files/shared/usr/bin/ryujinx
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if any arguments were passed to the script
|
||||
if [ "$#" -gt 0 ]; then
|
||||
# If arguments are passed, include them in the flatpak run command
|
||||
flatpak run io.github.ryubing.Ryujinx "$@"
|
||||
else
|
||||
# If no arguments are passed, just run the flatpak without any file
|
||||
flatpak run io.github.ryubing.Ryujinx
|
||||
fi
|
||||
27
docs/solarpowered-main/files/shared/usr/bin/waydroid-session
Executable file
27
docs/solarpowered-main/files/shared/usr/bin/waydroid-session
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/sh
|
||||
|
||||
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
||||
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
|
||||
eval $(dbus-launch --sh-syntax)
|
||||
fi
|
||||
|
||||
mutter --wayland &
|
||||
MUTTER_PID=$!
|
||||
sleep 5
|
||||
export DISPLAY=:1
|
||||
|
||||
# Start Waydroid in the background
|
||||
waydroid show-full-ui &
|
||||
WAYDROID_PID=$!
|
||||
|
||||
# Wait for Waydroid exit event in the log
|
||||
tail -f -n0 /var/lib/waydroid/waydroid.log | grep -m1 run_buffer
|
||||
|
||||
# Cleanup and logout
|
||||
kill $WAYDROID_PID
|
||||
kill $MUTTER_PID
|
||||
|
||||
# Use loginctl to end the session gracefully
|
||||
loginctl terminate-session "$XDG_SESSION_ID"
|
||||
|
||||
exit 0
|
||||
27
docs/solarpowered-main/files/shared/usr/bin/zstar
Executable file
27
docs/solarpowered-main/files/shared/usr/bin/zstar
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Define directory & target filename
|
||||
directory="$1"
|
||||
filename="$2"
|
||||
|
||||
# Check if the filename already has .tar.zst; if not, append it
|
||||
if [[ ! "$filename" =~ \.tar\.zst$ ]]; then
|
||||
archive="$filename.tar.zst"
|
||||
else
|
||||
archive="$filename"
|
||||
fi
|
||||
|
||||
# Make sure the directory exists
|
||||
if [[ ! -d "$directory" ]]; then
|
||||
echo "Directory '$directory' not found."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create the archive with tar and pipe it to zstd
|
||||
tar -cvf - "$directory" | zstd -9 -T0 -o "$archive"
|
||||
|
||||
# Check for errors during compression
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Error during compression."
|
||||
return 1
|
||||
fi
|
||||
@@ -0,0 +1,27 @@
|
||||
# We have this script so that people using images with `nss-altfiles` (`/usr/lib/g{roup,shadow}`)
|
||||
# do not break their systems when rebasing to an image without that
|
||||
# This usually happens when using https://github.com/hhd-dev/rechunk then rebasing to an image without it.
|
||||
# Please DO NOT remove this unless this is fully, completely obsolete.
|
||||
# This is exactly what is making it break: https://github.com/ublue-os/legacy-rechunk/blob/1d2b0c2e99afbdc2eb06788ae28e157a88b03d70/1_prune.sh#L41-L47
|
||||
# Users WILL experience black screens and systems will NOT boot if this script malfunctions. Please test this properly and always make sure this works
|
||||
# Relevant issues:
|
||||
# - https://github.com/bootc-dev/bootc/issues/1179#issuecomment-2708305926
|
||||
# - https://github.com/ublue-os/main/issues/759
|
||||
# - https://github.com/ublue-os/bluefin-lts/issues/918
|
||||
# - https://github.com/ublue-os/image-template/issues/177
|
||||
# - https://github.com/ublue-os/aurora/issues/1468
|
||||
# - https://github.com/ublue-os/bluefin/issues/3852
|
||||
# This got created on Tue, 16 Dec 2025 00:44:58 -0300
|
||||
[Unit]
|
||||
Description=Fix groups for Legacy rechunker
|
||||
Wants=local-fs.target
|
||||
After=local-fs.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=rechunker-group-fix /etc/group
|
||||
ExecStart=rechunker-group-fix /etc/gshadow
|
||||
ExecStart=systemd-sysusers
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target multi-user.target
|
||||
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=Topgrade update service
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecCondition=/bin/bash -c '[[ "$(busctl get-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Metered | cut -c 3-)" == @(2|4) ]]'
|
||||
ExecStart=/usr/bin/topgrade --no-retry --cleanup --yes
|
||||
@@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Topgrade update service timer
|
||||
|
||||
[Timer]
|
||||
RandomizedDelaySec=5m
|
||||
OnBootSec=2m
|
||||
OnUnitActiveSec=12h
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
@@ -0,0 +1 @@
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{serial}=="*vial:f64c2b3c*", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
|
||||
@@ -0,0 +1 @@
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sudo waydroid container restart
|
||||
@@ -0,0 +1,9 @@
|
||||
set allow-duplicate-recipes := true
|
||||
set ignore-comments := true
|
||||
|
||||
import "/usr/share/appends/01-system.just"
|
||||
import "/usr/share/appends/10-apps.just"
|
||||
import? "/usr/share/appends/99-solarpowered-ex.just"
|
||||
import? "/usr/share/appends/99-solarpowered.just"
|
||||
import? "$HOME/.justfile"
|
||||
import? "$HOME/Justfile"
|
||||
@@ -0,0 +1,124 @@
|
||||
# Boot into this device's BIOS/UEFI screen
|
||||
bios:
|
||||
#!/usr/bin/bash
|
||||
if [ -d /sys/firmware/efi ]; then
|
||||
systemctl reboot --firmware-setup
|
||||
else
|
||||
echo "Rebooting to legacy BIOS from OS is not supported."
|
||||
fi
|
||||
|
||||
# Regenerate GRUB config
|
||||
regenerate-grub:
|
||||
#!/usr/bin/env bash
|
||||
if [ -d /sys/firmware/efi ]; then
|
||||
sudo grub2-mkconfig -o /etc/grub2-efi.cfg
|
||||
else
|
||||
sudo grub2-mkconfig -o /etc/grub2.cfg
|
||||
fi
|
||||
|
||||
# Check for local overrides
|
||||
check-local-overrides:
|
||||
#!/usr/bin/env bash
|
||||
diff -r \
|
||||
--suppress-common-lines \
|
||||
--color="always" \
|
||||
--exclude "passwd*" \
|
||||
--exclude "group*" \
|
||||
--exclude="subgid*" \
|
||||
--exclude="subuid*" \
|
||||
--exclude="machine-id" \
|
||||
--exclude="adjtime" \
|
||||
--exclude="fstab" \
|
||||
--exclude="system-connections" \
|
||||
--exclude="shadow*" \
|
||||
--exclude="gshadow*" \
|
||||
--exclude="ssh_host*" \
|
||||
--exclude="cmdline" \
|
||||
--exclude="crypttab" \
|
||||
--exclude="hostname" \
|
||||
--exclude="localtime" \
|
||||
--exclude="locale*" \
|
||||
--exclude="*lock" \
|
||||
--exclude=".updated" \
|
||||
--exclude="*LOCK" \
|
||||
--exclude="vconsole*" \
|
||||
--exclude="00-keyboard.conf" \
|
||||
--exclude="grub" \
|
||||
--exclude="system.control*" \
|
||||
--exclude="cdi" \
|
||||
--exclude="default.target" \
|
||||
/usr/etc /etc 2>/dev/null | sed '/Binary\ files\ /d'
|
||||
|
||||
# Show changelog between deployments
|
||||
changelogs:
|
||||
rpm-ostree db diff --changelogs
|
||||
|
||||
# Clean up old up unused podman images, volumes, flatpak packages and rpm-ostree content
|
||||
clean-system:
|
||||
podman image prune -af
|
||||
podman volume prune -f
|
||||
flatpak uninstall --unused
|
||||
rpm-ostree cleanup -bm
|
||||
|
||||
# Renew IP & flush DNS
|
||||
reset-address:
|
||||
sudo nmcli device disconnect enp4s0
|
||||
sudo nmcli device connect enp4s0
|
||||
sudo systemctl restart systemd-resolved
|
||||
systemd-resolve --status
|
||||
|
||||
# Enable iwd, disable wpa_supplicant
|
||||
enable-iwd:
|
||||
#!/usr/bin/env bash
|
||||
sudo systemctl disable --now wpa_supplicant
|
||||
sudo systemctl mask wpa_supplicant
|
||||
mkdir -Z /etc/NetworkManager/conf.d
|
||||
sudo cat > /etc/NetworkManager/conf.d/iwd.conf <<EOF
|
||||
[device]
|
||||
wifi.backend=iwd
|
||||
EOF
|
||||
restorecon -R /etc/NetworkManager
|
||||
sudo systemctl restart NetworkManager
|
||||
|
||||
# Disable iwd, reenable wpa_supplicant
|
||||
disable-iwd:
|
||||
sudo mv "/etc/NetworkManager/conf.d/iwd.conf" "/etc/NetworkManager/conf.d/iwd.conf.off"
|
||||
sudo systemctl disable --now iwd
|
||||
sudo systemctl unmask wpa_supplicant
|
||||
sudo systemctl enable --now wpa_supplicant
|
||||
sudo systemctl restart NetworkManager
|
||||
|
||||
# Disable Zram and enable Zswap. Requires reboot
|
||||
enable-zswap: disable-zram
|
||||
sudo rpm-ostree kargs --append-if-missing=zswap.enabled=1 --append-if-missing=zswap.compressor=lz4 --append-if-missing=zswap.max_pool_percent=25
|
||||
echo "Zswap is enabled and changes will reflect upon reboot."
|
||||
|
||||
# Enable Zram and disable zswap. Requires reboot
|
||||
disable-zswap: enable-zram
|
||||
sudo rpm-ostree kargs --delete-if-present=zswap.enabled=1 --delete-if-present=zswap.compressor=lz4 --delete-if-present=zswap.max_pool_percent=25
|
||||
echo "Zswap is disabled and changes will reflect upon reboot."
|
||||
|
||||
# Disable Zram. Requires reboot
|
||||
disable-zram:
|
||||
#!/usr/bin/env bash
|
||||
if [[ -e /etc/systemd/zram-generator.conf ]]; then
|
||||
sudo mv /etc/zram-generator.conf /etc/zram-generator.conf.bak
|
||||
fi
|
||||
sudo touch /etc/systemd/zram-generator.conf
|
||||
if [[ -e /etc/udev/rules.d/30-zram.rules ]]; then
|
||||
sudo mv /etc/udev/rules.d/30-zram.rules /etc/udev/rules.d/30-zram.rules.bak
|
||||
fi
|
||||
sudo touch /etc/udev/rules.d/30-zram.rules
|
||||
sudo systemctl daemon-reload
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger
|
||||
echo "Zram is disabled and changes will reflect upon reboot."
|
||||
|
||||
# Enable Zram. Requires reboot
|
||||
enable-zram:
|
||||
sudo rm /etc/systemd/zram-generator.conf
|
||||
sudo rm /etc/udev/rules.d/30-zram.rules
|
||||
sudo systemctl daemon-reload
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger
|
||||
echo "Zram is enabled and changes will reflect upon reboot."
|
||||
@@ -0,0 +1,96 @@
|
||||
# Setup box
|
||||
box:
|
||||
distrobox-assemble create --file https://raw.githubusercontent.com/askpng/box/refs/heads/main/box.ini
|
||||
distrobox-start boxit
|
||||
|
||||
# set junction as default for browsers
|
||||
setup-junction:
|
||||
xdg-settings set default-web-browser re.sonny.Junction.desktop
|
||||
|
||||
# install flameshot and grant screenshot permission
|
||||
setup-flameshot:
|
||||
flatpak install --noninteractive --assumeyes org.flameshot.Flameshot
|
||||
flatpak permission-set screenshot screenshot org.flameshot.Flameshot yes
|
||||
|
||||
# Scripts to initialize, configure, integrate & reset Waydroid
|
||||
setup-waydroid:
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
if [ "$OPTION" == "" ]; then
|
||||
echo "${bold}Waydroid utilities${normal}"
|
||||
PS3="Please select an option: "
|
||||
select OPTION in "Initialize Waydroid" "Configure Waydroid" "Enable fake touch" "Set as Nicole" "Install APKCombo installer and Material Files" "Logs, clean version" "Reset Waydroid (also removes waydroid-related files from user folder)"; do
|
||||
if [[ -n "$OPTION" ]]; then
|
||||
break
|
||||
else
|
||||
echo "Invalid option, please try again."
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ "${OPTION,,}" =~ ^init ]]; then
|
||||
echo "sudo systemctl enable --now waydroid-container.service"
|
||||
sudo systemctl enable --now waydroid-container.service
|
||||
echo "waydroid init -s VANILLA -c 'https://ota.waydro.id/system' -v 'https://ota.waydro.id/vendor'"
|
||||
sudo waydroid init -s VANILLA -c 'https://ota.waydro.id/system' -v 'https://ota.waydro.id/vendor'
|
||||
echo "sudo restorecon -R /var/lib/waydroid"
|
||||
sudo restorecon -R /var/lib/waydroid
|
||||
echo "cp /usr/share/applications/waydroid-container-restart.desktop ~/.local/share/applications"
|
||||
cp /usr/share/applications/waydroid-container-restart.desktop ~/.local/share/applications
|
||||
echo "Waydroid has been initialized. Before continuing, run 'waydroid session start' and ensure it is up and running well."
|
||||
|
||||
elif [[ "${OPTION,,}" =~ ^configure ]]; then
|
||||
echo "git clone https://github.com/askpng/waydroid_script.git --depth 1 /tmp/waydroid_script"
|
||||
git clone https://github.com/askpng/waydroid_script.git --depth 1 /tmp/waydroid_script
|
||||
echo "python3 -m venv /tmp/waydroid_script/venv"
|
||||
python3 -m venv /tmp/waydroid_script/venv
|
||||
echo "source /tmp/waydroid_script/venv/bin/activate"
|
||||
source /tmp/waydroid_script/venv/bin/activate
|
||||
echo "sudo /tmp/waydroid_script/venv/bin/pip install -r /tmp/waydroid_script/requirements.txt"
|
||||
sudo /tmp/waydroid_script/venv/bin/pip install -r /tmp/waydroid_script/requirements.txt
|
||||
echo "/tmp/waydroid_script/venv/bin/python3 /tmp/waydroid_script/main.py"
|
||||
sudo /tmp/waydroid_script/venv/bin/python3 /tmp/waydroid_script/main.py
|
||||
echo "deactivate"
|
||||
deactivate
|
||||
echo "sudo rm -rf /tmp/waydroid_script"
|
||||
sudo rm -rf /tmp/waydroid_script ~/.cache/waydroid_script
|
||||
|
||||
elif [[ "${OPTION,,}" =~ ^enable ]]; then
|
||||
echo "Setting fake touch for Aniplex apps..."
|
||||
waydroid prop set persist.waydroid.fake_touch "com.aniplex.*"
|
||||
|
||||
elif [[ "${OPTION,,}" =~ ^set ]]; then
|
||||
echo "curl -L 'https://raw.githubusercontent.com/askpng/waydroid_script/refs/heads/main/scripts/nicole.sh' -o /tmp/nicole.sh"
|
||||
curl -L 'https://raw.githubusercontent.com/askpng/waydroid_script/refs/heads/main/scripts/nicole.sh' -o /tmp/nicole.sh
|
||||
echo "chmod +x /tmp/nicole.sh"
|
||||
chmod +x /tmp/nicole.sh
|
||||
echo "sudo bash -c /tmp/nicole.sh"
|
||||
sudo bash -c /tmp/nicole.sh
|
||||
echo "rm -f /tmp/nicole.sh"
|
||||
rm -f /tmp/nicole.sh
|
||||
|
||||
elif [[ "${OPTION,,}" =~ ^install ]]; then
|
||||
echo "Installing APKCombo Installer"
|
||||
curl -L "https://static.apkflash.com/files/com.apkcombo.app/apkcombo-installer.apk" -o /tmp/apkcombo-installer.apk
|
||||
waydroid app install /tmp/apkcombo-installer.apk
|
||||
echo "Installing Material Files"
|
||||
curl -L "https://f-droid.org/repo/me.zhanghai.android.files_39.apk" -o /tmp/material-files.apk
|
||||
waydroid app install /tmp/material-files.apk
|
||||
echo "Removing .APK files"
|
||||
rm /tmp/apkcombo-installer.apk /tmp/material-files.apk
|
||||
echo "Success!"
|
||||
|
||||
elif [[ "${OPTION,,}" =~ ^logs ]]; then
|
||||
echo "Grabbing clean logs..."
|
||||
sudo waydroid logcat | grep -vi controller | grep -vi mantis | grep -vi gamepad | grep -v lowmemorykiller | grep -v libprocessgroup
|
||||
|
||||
elif [[ "${OPTION,,}" =~ ^reset ]]; then
|
||||
echo "Resetting Waydroid"
|
||||
echo "bash -c 'sudo rm -rf /var/lib/waydroid /home/.waydroid ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid'"
|
||||
bash -c 'sudo rm -rf /var/lib/waydroid /home/.waydroid ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid'
|
||||
echo "sudo systemctl disable --now waydroid-container.service"
|
||||
sudo systemctl disable --now waydroid-container.service
|
||||
echo "Waydroid has been reset! Re-initialize to get it back up and running."
|
||||
|
||||
fi
|
||||
@@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Force Restart Waydroid
|
||||
Exec=pkexec /usr/libexec/waydroid-container-restart
|
||||
Categories=X-WayDroid-App;
|
||||
X-Purism-FormFactor=Workstation;Mobile;
|
||||
Icon=waydroid
|
||||
NoDisplay=false
|
||||
@@ -0,0 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Name=WayDroid on Mutter
|
||||
Comment=LineageOS in a container
|
||||
Exec=/usr/bin/waydroid-session
|
||||
Type=Application
|
||||
@@ -0,0 +1,19 @@
|
||||
[main]
|
||||
# The default PPD profile
|
||||
# use balanced profile with balance_performance EPP
|
||||
# configured under /usr/lib/tuned/profiles/balanced/tuned.conf
|
||||
default=balanced
|
||||
# battery_detection=true
|
||||
sysfs_acpi_monitor=true
|
||||
|
||||
[profiles]
|
||||
# PPD = TuneD
|
||||
# use powersave profile with balance_power EPP
|
||||
# configured under /usr/lib/tuned/profiles/powersave/tuned.conf
|
||||
power-saver=powersave
|
||||
balanced=balanced
|
||||
performance=throughput-performance
|
||||
|
||||
# [battery]
|
||||
# PPD = TuneD
|
||||
# balanced=powersave
|
||||
13
docs/solarpowered-main/files/solarpowered-ex/usr/bin/gamescope-session
Executable file
13
docs/solarpowered-main/files/solarpowered-ex/usr/bin/gamescope-session
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# User-configurable Gamescope options
|
||||
GAMESCOPE_SESSION_CONFIG="$HOME/.config/default/gamescope-session-config"
|
||||
|
||||
if [ -f $GAMESCOPE_SESSION_CONFIG ];
|
||||
then
|
||||
source $GAMESCOPE_SESSION_CONFIG
|
||||
fi
|
||||
|
||||
gamescope \
|
||||
$GAMESCOPE_SESSION_OPTIONS \
|
||||
-e -- steam -steamdeck -steamos3
|
||||
13
docs/solarpowered-main/files/solarpowered-ex/usr/bin/steam-extest
Executable file
13
docs/solarpowered-main/files/solarpowered-ex/usr/bin/steam-extest
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [[ "$XDG_SESSION_TYPE" == "wayland" ]]; then
|
||||
# https://github.com/Supreeeme/extest
|
||||
# Extest is a drop in replacement for the X11 XTEST extension.
|
||||
# It creates a virtual device with the uinput kernel module.
|
||||
# It's been primarily developed for allowing the desktop functionality
|
||||
# on the Steam Controller to work while Steam is open on Wayland.
|
||||
# Also supports Steam Input as a whole.
|
||||
env LD_PRELOAD=/usr/lib/extest/libextest.so /usr/bin/steam "$@"
|
||||
else
|
||||
/usr/bin/steam "$@"
|
||||
fi
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Description=B550 boards suspend fix
|
||||
|
||||
[Service]
|
||||
ExecStart=/bin/sh -c "/bin/echo GPP0 > /proc/acpi/wakeup"
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,34 @@
|
||||
# tuned config
|
||||
|
||||
[main]
|
||||
summary=Balanced (balance_performance)
|
||||
|
||||
[modules]
|
||||
cpufreq_conservative=+r
|
||||
|
||||
[cpu]
|
||||
priority=10
|
||||
governor=schedutil|conservative|powersave
|
||||
energy_perf_bias=normal
|
||||
energy_preference_performance=balance_performance
|
||||
boost=1
|
||||
|
||||
[acpi]
|
||||
platform_profile=balanced
|
||||
|
||||
[audio]
|
||||
timeout=0
|
||||
|
||||
[sysctl]
|
||||
vm.swappiness = 180
|
||||
|
||||
[video]
|
||||
radeon_powersave=dpm-balanced, auto
|
||||
panel_power_savings=0
|
||||
|
||||
# [disk]
|
||||
# Comma separated list of devices, all devices if commented out.
|
||||
# devices=sda
|
||||
|
||||
[scsi_host]
|
||||
alpm=medium_power
|
||||
@@ -0,0 +1,40 @@
|
||||
# tuned configuration
|
||||
|
||||
[main]
|
||||
summary=Balanced (balance_power)
|
||||
|
||||
[cpu]
|
||||
governor=schedutil|conservative|powersave
|
||||
energy_perf_bias=powersave|power
|
||||
energy_performance_preference=balance_power
|
||||
boost=0
|
||||
|
||||
[acpi]
|
||||
platform_profile=low-power|quiet
|
||||
|
||||
[eeepc_she]
|
||||
|
||||
[vm]
|
||||
|
||||
[audio]
|
||||
timeout=0
|
||||
|
||||
[video]
|
||||
radeon_powersave=dpm-battery, auto
|
||||
panel_power_savings=3
|
||||
|
||||
[disk]
|
||||
# Comma separated list of devices, all devices if commented out.
|
||||
# devices=sda
|
||||
|
||||
[net]
|
||||
# Comma separated list of devices, all devices if commented out.
|
||||
# devices=eth0
|
||||
|
||||
[scsi_host]
|
||||
alpm=min_power
|
||||
|
||||
[sysctl]
|
||||
vm.laptop_mode=5
|
||||
vm.dirty_writeback_centisecs=1500
|
||||
kernel.nmi_watchdog=0
|
||||
@@ -0,0 +1,10 @@
|
||||
# AMDPC setup in one go
|
||||
solarpowered-ex-setup:
|
||||
sudo systemctl enable --now b550-suspend-fix.service
|
||||
rpm-ostree kargs \
|
||||
--append-if-missing=amd_pstate=active \
|
||||
--append-if-missing=$(printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))") \
|
||||
--append-if-missing="sysrq_always_enabled=1" \
|
||||
--append-if-missing="page_alloc.shuffle=1" \
|
||||
--append-if-missing="hid_apple.fnmode=0"
|
||||
echo 'Remember to reboot!'
|
||||
61
docs/solarpowered-main/files/solarpowered/etc/throttled.conf
Normal file
61
docs/solarpowered-main/files/solarpowered/etc/throttled.conf
Normal file
@@ -0,0 +1,61 @@
|
||||
[GENERAL]
|
||||
# Enable or disable the script execution
|
||||
Enabled: True
|
||||
# SYSFS path for checking if the system is running on AC power
|
||||
Sysfs_Power_Path: /sys/class/power_supply/AC*/online
|
||||
# Auto reload config on changes
|
||||
Autoreload: True
|
||||
|
||||
## Settings to apply while connected to Battery power
|
||||
[BATTERY]
|
||||
# Update the registers every this many seconds
|
||||
Update_Rate_s: 30
|
||||
# Max package power for time window #1
|
||||
PL1_Tdp_W: 29
|
||||
# Time window #1 duration
|
||||
PL1_Duration_s: 28
|
||||
# Max package power for time window #2
|
||||
PL2_Tdp_W: 44
|
||||
# Time window #2 duration
|
||||
PL2_Duration_S: 0.002
|
||||
# Max allowed temperature before throttling
|
||||
Trip_Temp_C: 85
|
||||
# Set cTDP to normal=0, down=1 or up=2 (EXPERIMENTAL)
|
||||
cTDP: 0
|
||||
# Disable BDPROCHOT (EXPERIMENTAL)
|
||||
Disable_BDPROCHOT: False
|
||||
|
||||
## Settings to apply while connected to AC power
|
||||
[AC]
|
||||
# Update the registers every this many seconds
|
||||
Update_Rate_s: 5
|
||||
# Max package power for time window #1
|
||||
PL1_Tdp_W: 44
|
||||
# Time window #1 duration
|
||||
PL1_Duration_s: 28
|
||||
# Max package power for time window #2
|
||||
PL2_Tdp_W: 44
|
||||
# Time window #2 duration
|
||||
PL2_Duration_S: 0.002
|
||||
# Max allowed temperature before throttling
|
||||
Trip_Temp_C: 95
|
||||
# Set HWP energy performance hints to 'performance' on high load (EXPERIMENTAL)
|
||||
# Uncomment only if you really want to use it
|
||||
# HWP_Mode: False
|
||||
# Set cTDP to normal=0, down=1 or up=2 (EXPERIMENTAL)
|
||||
cTDP: 0
|
||||
# Disable BDPROCHOT (EXPERIMENTAL)
|
||||
Disable_BDPROCHOT: False
|
||||
|
||||
# All voltage values are expressed in mV and *MUST* be negative (i.e. undervolt)!
|
||||
[UNDERVOLT]
|
||||
# CPU core voltage offset (mV)
|
||||
CORE: 0
|
||||
# Integrated GPU voltage offset (mV)
|
||||
GPU: 0
|
||||
# CPU cache voltage offset (mV)
|
||||
CACHE: 0
|
||||
# System Agent voltage offset (mV)
|
||||
UNCORE: 0
|
||||
# Analog I/O voltage offset (mV)
|
||||
ANALOGIO: 0
|
||||
626
docs/solarpowered-main/files/solarpowered/etc/tlp.conf
Normal file
626
docs/solarpowered-main/files/solarpowered/etc/tlp.conf
Normal file
@@ -0,0 +1,626 @@
|
||||
# ------------------------------------------------------------------------------
|
||||
# solarpowered defaults
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
TLP_ENABLE="1"
|
||||
TLP_WARN_LEVEL="3"
|
||||
TLP_PERSISTENT_DEFAULT="0"
|
||||
DISK_IDLE_SECS_ON_AC="0"
|
||||
DISK_IDLE_SECS_ON_BAT="2"
|
||||
MAX_LOST_WORK_SECS_ON_AC="15"
|
||||
MAX_LOST_WORK_SECS_ON_BAT="60"
|
||||
CPU_ENERGY_PERF_POLICY_ON_AC="balance_performance"
|
||||
CPU_ENERGY_PERF_POLICY_ON_BAT="balance_power"
|
||||
NMI_WATCHDOG="0"
|
||||
DISK_APM_LEVEL_ON_AC="254 254"
|
||||
DISK_APM_LEVEL_ON_BAT="128 128"
|
||||
DISK_IOSCHED="keep keep"
|
||||
SATA_LINKPWR_ON_AC="med_power_with_dipm"
|
||||
SATA_LINKPWR_ON_BAT="med_power_with_dipm"
|
||||
AHCI_RUNTIME_PM_ON_AC="on"
|
||||
AHCI_RUNTIME_PM_ON_BAT="auto"
|
||||
AHCI_RUNTIME_PM_TIMEOUT="15"
|
||||
PCIE_ASPM_ON_AC="default"
|
||||
PCIE_ASPM_ON_BAT="default"
|
||||
RADEON_DPM_PERF_LEVEL_ON_AC="auto"
|
||||
RADEON_DPM_PERF_LEVEL_ON_BAT="auto"
|
||||
RADEON_POWER_PROFILE_ON_AC="default"
|
||||
RADEON_POWER_PROFILE_ON_BAT="default"
|
||||
WIFI_PWR_ON_AC="off"
|
||||
WIFI_PWR_ON_BAT="on"
|
||||
WOL_DISABLE="Y"
|
||||
SOUND_POWER_SAVE_ON_AC="1"
|
||||
SOUND_POWER_SAVE_ON_BAT="1"
|
||||
SOUND_POWER_SAVE_CONTROLLER="Y"
|
||||
BAY_POWEROFF_ON_AC="0"
|
||||
BAY_POWEROFF_ON_BAT="0"
|
||||
BAY_DEVICE="sr0"
|
||||
RUNTIME_PM_ON_AC="on"
|
||||
RUNTIME_PM_ON_BAT="auto"
|
||||
RUNTIME_PM_DRIVER_DENYLIST="mei_me nouveau radeon"
|
||||
USB_AUTOSUSPEND="1"
|
||||
USB_EXCLUDE_AUDIO="1"
|
||||
USB_EXCLUDE_BTUSB="0"
|
||||
USB_EXCLUDE_PHONE="0"
|
||||
USB_EXCLUDE_PRINTER="1"
|
||||
USB_EXCLUDE_WWAN="0"
|
||||
RESTORE_DEVICE_STATE_ON_STARTUP="1"
|
||||
RESTORE_THRESHOLDS_ON_BAT="1"
|
||||
NATACPI_ENABLE="1"
|
||||
TPACPI_ENABLE="1"
|
||||
TPSMAPI_ENABLE="1"
|
||||
CPU_MAX_PERF_ON_AC="99"
|
||||
CPU_MAX_PERF_ON_BAT="89"
|
||||
CPU_BOOST_ON_AC="1"
|
||||
START_CHARGE_THRESH_BAT0="55"
|
||||
STOP_CHARGE_THRESH_BAT0="60"
|
||||
DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
|
||||
DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# /etc/tlp.conf - TLP user configuration (version @TLPVER@)
|
||||
# See full explanation: https://linrunner.de/tlp/settings
|
||||
#
|
||||
# Copyright (c) 2024 Thomas Koch <linrunner at gmx.net> and others.
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
# Settings are read in the following order:
|
||||
#
|
||||
# 1. Intrinsic defaults
|
||||
# 2. /etc/tlp.d/*.conf - Drop-in customization snippets
|
||||
# 3. /etc/tlp.conf - User configuration (this file)
|
||||
#
|
||||
# Notes:
|
||||
# - In case of identical parameters, the last occurence has precedence
|
||||
# - This also means, parameters enabled here will override anything else
|
||||
# - However you may append values to a parameter already defined as intrinsic
|
||||
# default or in a previously read file: use PARAMETER+="add values"
|
||||
# - IMPORTANT: all parameters here are disabled; remove the leading '#' if you
|
||||
# like to enable a feature without default or have a value different from the
|
||||
# default
|
||||
# - Default *: intrinsic default that is effective when the parameter is missing
|
||||
# or disabled by a leading '#'; use PARAM="" to disable an intrinsic default
|
||||
# - Default <none>: do nothing or use kernel/hardware defaults
|
||||
# - IMPORTANT: parameters must always be specified pairwise i.e. for
|
||||
# both AC and BAT. Omitting one of the two makes the set value effective for
|
||||
# both power sources, since a change only occurs when different values are
|
||||
# defined.
|
||||
# ------------------------------------------------------------------------------
|
||||
# tlp - Parameters for power saving
|
||||
|
||||
# Set to 0 to disable, 1 to enable TLP.
|
||||
# Default: 1
|
||||
|
||||
#TLP_ENABLE=1
|
||||
|
||||
# Control how warnings about invalid settings are issued:
|
||||
# 0=disabled,
|
||||
# 1=background tasks (boot, resume, change of power source) report to syslog,
|
||||
# 2=shell commands report to the terminal (stderr),
|
||||
# 3=combination of 1 and 2
|
||||
# Default: 3
|
||||
|
||||
#TLP_WARN_LEVEL=3
|
||||
|
||||
# Operation mode when no power supply can be detected: AC, BAT.
|
||||
# Concerns some desktop and embedded hardware only.
|
||||
# Default: <none>
|
||||
|
||||
#TLP_DEFAULT_MODE=AC
|
||||
|
||||
# Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE
|
||||
# Note: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC.
|
||||
# Default: 0
|
||||
|
||||
#TLP_PERSISTENT_DEFAULT=0
|
||||
|
||||
# Power supply classes to ignore when determining operation mode: AC, USB, BAT.
|
||||
# Separate multiple classes with spaces.
|
||||
# Note: try on laptops where operation mode AC/BAT is incorrectly detected.
|
||||
# Default: <none>
|
||||
|
||||
#TLP_PS_IGNORE="BAT"
|
||||
|
||||
# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
|
||||
# Non-zero value enables, zero disables laptop mode.
|
||||
# Default: 0 (AC), 2 (BAT)
|
||||
|
||||
#DISK_IDLE_SECS_ON_AC=0
|
||||
#DISK_IDLE_SECS_ON_BAT=2
|
||||
|
||||
# Dirty page values (timeouts in secs).
|
||||
# Default: 15 (AC), 60 (BAT)
|
||||
|
||||
#MAX_LOST_WORK_SECS_ON_AC=15
|
||||
#MAX_LOST_WORK_SECS_ON_BAT=60
|
||||
|
||||
# Select a CPU scaling driver operation mode.
|
||||
# Intel CPU with intel_pstate driver:
|
||||
# active, passive.
|
||||
# AMD Zen 2 or newer CPU with amd-pstate_driver as of kernel 6.3/6.4(*):
|
||||
# active, passive, guided(*).
|
||||
# Default: <none>
|
||||
#CPU_DRIVER_OPMODE_ON_AC=active
|
||||
#CPU_DRIVER_OPMODE_ON_BAT=active
|
||||
|
||||
# Select a CPU frequency scaling governor.
|
||||
# Intel CPU with intel_pstate driver or
|
||||
# AMD CPU with amd-pstate driver in active mode ('amd-pstate-epp'):
|
||||
# performance, powersave(*).
|
||||
# Intel CPU with intel_pstate driver in passive mode ('intel_cpufreq') or
|
||||
# AMD CPU with amd-pstate driver in passive or guided mode ('amd-pstate') or
|
||||
# Intel, AMD and other CPU brands with acpi-cpufreq driver:
|
||||
# conservative, ondemand(*), userspace, powersave, performance, schedutil(*).
|
||||
# Use tlp-stat -p to show the active driver and available governors.
|
||||
# Important:
|
||||
# Governors marked (*) above are power efficient for *almost all* workloads
|
||||
# and therefore kernel and most distributions have chosen them as defaults.
|
||||
# You should have done your research about advantages/disadvantages *before*
|
||||
# changing the governor.
|
||||
# Default: <none>
|
||||
|
||||
#CPU_SCALING_GOVERNOR_ON_AC=powersave
|
||||
#CPU_SCALING_GOVERNOR_ON_BAT=powersave
|
||||
|
||||
# Set the min/max frequency available for the scaling governor.
|
||||
# Possible values depend on your CPU. For available frequencies see
|
||||
# the output of tlp-stat -p.
|
||||
# Notes:
|
||||
# - Min/max frequencies must always be specified for both AC *and* BAT
|
||||
# - Not recommended for use with the intel_pstate driver, use
|
||||
# CPU_MIN/MAX_PERF_ON_AC/BAT below instead
|
||||
# Default: <none>
|
||||
|
||||
#CPU_SCALING_MIN_FREQ_ON_AC=0
|
||||
#CPU_SCALING_MAX_FREQ_ON_AC=0
|
||||
#CPU_SCALING_MIN_FREQ_ON_BAT=0
|
||||
#CPU_SCALING_MAX_FREQ_ON_BAT=0
|
||||
|
||||
# Set CPU energy/performance policies EPP and EPB:
|
||||
# performance, balance_performance, default, balance_power, power.
|
||||
# Values are given in order of increasing power saving.
|
||||
# Requires:
|
||||
# * Intel CPU
|
||||
# EPP: Intel Core i 6th gen. or newer CPU with intel_pstate driver
|
||||
# EPB: Intel Core i 2nd gen. or newer CPU with intel_pstate driver
|
||||
# as of kernel 5.2; alternatively module msr and
|
||||
# x86_energy_perf_policy from linux-tools
|
||||
# EPP and EPB are mutually exclusive: when EPP is available, Intel CPUs
|
||||
# will not honor EPB. Only the matching feature will be applied by TLP.
|
||||
# * AMD Zen 2 or newer CPU
|
||||
# EPP: amd-pstate driver in active mode ('amd-pstate-epp') as of kernel 6.3
|
||||
# Default: balance_performance (AC), balance_power (BAT)
|
||||
|
||||
#CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
|
||||
#CPU_ENERGY_PERF_POLICY_ON_BAT=balance_power
|
||||
|
||||
# Set Intel CPU P-state performance: 0..100 (%).
|
||||
# Limit the max/min P-state to control the power dissipation of the CPU.
|
||||
# Values are stated as a percentage of the available performance.
|
||||
# Requires Intel Core i 2nd gen. or newer CPU with intel_pstate driver.
|
||||
# Default: <none>
|
||||
|
||||
#CPU_MIN_PERF_ON_AC=0
|
||||
#CPU_MAX_PERF_ON_AC=100
|
||||
#CPU_MIN_PERF_ON_BAT=0
|
||||
#CPU_MAX_PERF_ON_BAT=30
|
||||
|
||||
# Set the CPU "turbo boost" (Intel) or "turbo core" (AMD) feature:
|
||||
# 0=disable, 1=allow.
|
||||
# Allows to raise the maximum frequency/P-state of some cores if the
|
||||
# CPU chip is not fully utilized and below it's intended thermal budget.
|
||||
# Note: a value of 1 does *not* activate boosting, it just allows it.
|
||||
# Default: <none>
|
||||
|
||||
#CPU_BOOST_ON_AC=1
|
||||
#CPU_BOOST_ON_BAT=0
|
||||
|
||||
# Set Intel/AMD CPU dynamic boost feature:
|
||||
# 0=disable, 1=enable.
|
||||
# Improve performance by increasing minimum P-state limit dynamically
|
||||
# whenever a task previously waiting on I/O is selected to run.
|
||||
# Requires:
|
||||
# * Intel Core i 6th gen. or newer CPU: intel_pstate driver in active mode
|
||||
# * AMD Zen 2 or newer CPU: amd-pstate driver in active mode ('amd-pstate-epp')
|
||||
# provided by a yet unreleased kernel 6.x
|
||||
# Default: <none>
|
||||
|
||||
#CPU_HWP_DYN_BOOST_ON_AC=1
|
||||
#CPU_HWP_DYN_BOOST_ON_BAT=0
|
||||
|
||||
# Kernel NMI Watchdog:
|
||||
# 0=disable (default, saves power), 1=enable (for kernel debugging only).
|
||||
# Default: 0
|
||||
|
||||
#NMI_WATCHDOG=0
|
||||
|
||||
# Select platform profile:
|
||||
# performance, balanced, low-power.
|
||||
# Controls system operating characteristics around power/performance levels,
|
||||
# thermal and fan speed. Values are given in order of increasing power saving.
|
||||
# Note: check the output of tlp-stat -p to determine availability on your
|
||||
# hardware and additional profiles such as: balanced-performance, quiet, cool.
|
||||
# Default: <none>
|
||||
|
||||
#PLATFORM_PROFILE_ON_AC=performance
|
||||
#PLATFORM_PROFILE_ON_BAT=low-power
|
||||
|
||||
# System suspend mode:
|
||||
# s2idle: Idle standby - a pure software, light-weight, system sleep state,
|
||||
# deep: Suspend to RAM - the whole system is put into a low-power state,
|
||||
# except for memory, usually resulting in higher savings than s2idle.
|
||||
# CAUTION: changing suspend mode may lead to system instability and even
|
||||
# data loss. As for the availability of different modes on your system,
|
||||
# check the output of tlp-stat -s. If unsure, stick with the system default
|
||||
# by not enabling this.
|
||||
# Default: <none>
|
||||
|
||||
#MEM_SLEEP_ON_AC=s2idle
|
||||
#MEM_SLEEP_ON_BAT=deep
|
||||
|
||||
# Define disk devices on which the following DISK/AHCI_RUNTIME parameters act.
|
||||
# Separate multiple devices with spaces.
|
||||
# Devices can be specified by disk ID also (lookup with: tlp diskid).
|
||||
# Default: "nvme0n1 sda"
|
||||
|
||||
#DISK_DEVICES="nvme0n1 sda"
|
||||
|
||||
# Disk advanced power management level: 1..254, 255 (max saving, min, off).
|
||||
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
|
||||
# Separate values for multiple disks with spaces. Use the special value 'keep'
|
||||
# to keep the hardware default for the particular disk.
|
||||
# Default: 254 (AC), 128 (BAT)
|
||||
|
||||
#DISK_APM_LEVEL_ON_AC="254 254"
|
||||
#DISK_APM_LEVEL_ON_BAT="128 128"
|
||||
|
||||
# Exclude disk classes from advanced power management (APM):
|
||||
# sata, ata, usb, ieee1394.
|
||||
# Separate multiple classes with spaces.
|
||||
# CAUTION: USB and IEEE1394 disks may fail to mount or data may get corrupted
|
||||
# with APM enabled. Be careful and make sure you have backups of all affected
|
||||
# media before removing 'usb' or 'ieee1394' from the denylist!
|
||||
# Default: "usb ieee1394"
|
||||
|
||||
#DISK_APM_CLASS_DENYLIST="usb ieee1394"
|
||||
|
||||
# Hard disk spin down timeout:
|
||||
# 0: spin down disabled
|
||||
# 1..240: timeouts from 5s to 20min (in units of 5s)
|
||||
# 241..251: timeouts from 30min to 5.5 hours (in units of 30min)
|
||||
# See 'man hdparm' for details.
|
||||
# Separate values for multiple disks with spaces. Use the special value 'keep'
|
||||
# to keep the hardware default for the particular disk.
|
||||
# Default: <none>
|
||||
|
||||
#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
|
||||
#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"
|
||||
|
||||
# Select I/O scheduler for the disk devices.
|
||||
# Multi queue (blk-mq) schedulers:
|
||||
# mq-deadline(*), none, kyber, bfq
|
||||
# Single queue schedulers:
|
||||
# deadline(*), cfq, bfq, noop
|
||||
# (*) recommended.
|
||||
# Separate values for multiple disks with spaces. Use the special value 'keep'
|
||||
# to keep the kernel default scheduler for the particular disk.
|
||||
# Notes:
|
||||
# - Multi queue (blk-mq) may need kernel boot option 'scsi_mod.use_blk_mq=1'
|
||||
# and 'modprobe mq-deadline-iosched|kyber|bfq' on kernels < 5.0
|
||||
# - Single queue schedulers are legacy now and were removed together with
|
||||
# the old block layer in kernel 5.0
|
||||
# Default: keep
|
||||
|
||||
#DISK_IOSCHED="mq-deadline mq-deadline"
|
||||
|
||||
# AHCI link power management (ALPM) for SATA disks:
|
||||
# min_power, med_power_with_dipm(*), medium_power, max_performance.
|
||||
# (*) recommended.
|
||||
# Multiple values separated with spaces are tried sequentially until success.
|
||||
# Default: med_power_with_dipm (AC & BAT)
|
||||
|
||||
#SATA_LINKPWR_ON_AC="med_power_with_dipm"
|
||||
#SATA_LINKPWR_ON_BAT="med_power_with_dipm"
|
||||
|
||||
# Exclude SATA links from AHCI link power management (ALPM).
|
||||
# SATA links are specified by their host. Refer to the output of
|
||||
# tlp-stat -d to determine the host; the format is "hostX".
|
||||
# Separate multiple hosts with spaces.
|
||||
# Default: <none>
|
||||
|
||||
#SATA_LINKPWR_DENYLIST="host1"
|
||||
|
||||
# Runtime Power Management for NVMe, SATA, ATA and USB disks
|
||||
# as well as SATA ports:
|
||||
# on=disable, auto=enable.
|
||||
# Note: SATA controllers are PCIe bus devices and handled by RUNTIME_PM further
|
||||
# down.
|
||||
|
||||
# Default: on (AC), auto (BAT)
|
||||
|
||||
#AHCI_RUNTIME_PM_ON_AC=on
|
||||
#AHCI_RUNTIME_PM_ON_BAT=auto
|
||||
|
||||
# Seconds of inactivity before disk is suspended.
|
||||
# Note: effective only when AHCI_RUNTIME_PM_ON_AC/BAT is activated.
|
||||
# Default: 15
|
||||
|
||||
#AHCI_RUNTIME_PM_TIMEOUT=15
|
||||
|
||||
# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable.
|
||||
# Drive can be powered on again by releasing (and reinserting) the eject lever
|
||||
# or by pressing the disc eject button on newer models.
|
||||
# Note: an UltraBay/MediaBay hard disk is never powered off.
|
||||
# Default: 0
|
||||
|
||||
#BAY_POWEROFF_ON_AC=0
|
||||
#BAY_POWEROFF_ON_BAT=0
|
||||
|
||||
# Optical drive device to power off
|
||||
# Default: sr0
|
||||
|
||||
#BAY_DEVICE="sr0"
|
||||
|
||||
# Set the min/max/turbo frequency for the Intel GPU.
|
||||
# Possible values depend on your hardware. For available frequencies see
|
||||
# the output of tlp-stat -g.
|
||||
# Default: <none>
|
||||
|
||||
#INTEL_GPU_MIN_FREQ_ON_AC=0
|
||||
#INTEL_GPU_MIN_FREQ_ON_BAT=0
|
||||
#INTEL_GPU_MAX_FREQ_ON_AC=0
|
||||
#INTEL_GPU_MAX_FREQ_ON_BAT=0
|
||||
#INTEL_GPU_BOOST_FREQ_ON_AC=0
|
||||
#INTEL_GPU_BOOST_FREQ_ON_BAT=0
|
||||
|
||||
# AMD GPU power management.
|
||||
# Performance level (DPM): auto, low, high; auto is recommended.
|
||||
# Note: requires amdgpu or radeon driver.
|
||||
# Default: auto
|
||||
|
||||
#RADEON_DPM_PERF_LEVEL_ON_AC=auto
|
||||
#RADEON_DPM_PERF_LEVEL_ON_BAT=auto
|
||||
|
||||
# Dynamic power management method (DPM): balanced, battery, performance.
|
||||
# Note: radeon driver only.
|
||||
# Default: <none>
|
||||
|
||||
#RADEON_DPM_STATE_ON_AC=performance
|
||||
#RADEON_DPM_STATE_ON_BAT=battery
|
||||
|
||||
# Graphics clock speed (profile method): low, mid, high, auto, default;
|
||||
# auto = mid on BAT, high on AC.
|
||||
# Note: radeon driver on legacy ATI hardware only (where DPM is not available).
|
||||
# Default: default
|
||||
|
||||
#RADEON_POWER_PROFILE_ON_AC=default
|
||||
#RADEON_POWER_PROFILE_ON_BAT=default
|
||||
|
||||
# Wi-Fi power saving mode: on=enable, off=disable.
|
||||
# Default: off (AC), on (BAT)
|
||||
|
||||
#WIFI_PWR_ON_AC=off
|
||||
#WIFI_PWR_ON_BAT=on
|
||||
|
||||
# Disable Wake-on-LAN: Y/N.
|
||||
# Default: Y
|
||||
|
||||
#WOL_DISABLE=Y
|
||||
|
||||
# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
|
||||
# A value of 0 disables, >= 1 enables power saving.
|
||||
# Note: 1 is recommended for Linux desktop environments with PulseAudio,
|
||||
# systems without PulseAudio may require 10.
|
||||
# Default: 1
|
||||
|
||||
#SOUND_POWER_SAVE_ON_AC=1
|
||||
#SOUND_POWER_SAVE_ON_BAT=1
|
||||
|
||||
# Disable controller too (HDA only): Y/N.
|
||||
# Note: effective only when SOUND_POWER_SAVE_ON_AC/BAT is activated.
|
||||
# Default: Y
|
||||
|
||||
#SOUND_POWER_SAVE_CONTROLLER=Y
|
||||
|
||||
# PCIe Active State Power Management (ASPM):
|
||||
# default(*), performance, powersave, powersupersave.
|
||||
# (*) keeps BIOS ASPM defaults (recommended)
|
||||
# Default: <none>
|
||||
|
||||
#PCIE_ASPM_ON_AC=default
|
||||
#PCIE_ASPM_ON_BAT=default
|
||||
|
||||
# Runtime Power Management for PCIe bus devices: on=disable, auto=enable.
|
||||
# Default: on (AC), auto (BAT)
|
||||
|
||||
#RUNTIME_PM_ON_AC=on
|
||||
#RUNTIME_PM_ON_BAT=auto
|
||||
|
||||
# Exclude listed PCIe device adresses from Runtime PM.
|
||||
# Note: this preserves the kernel driver default, to force a certain state
|
||||
# use RUNTIME_PM_ENABLE/DISABLE instead.
|
||||
# Separate multiple addresses with spaces.
|
||||
# Use lspci to get the adresses (1st column).
|
||||
# Default: <none>
|
||||
|
||||
#RUNTIME_PM_DENYLIST="11:22.3 44:55.6"
|
||||
|
||||
# Exclude PCIe devices assigned to the listed drivers from Runtime PM.
|
||||
# Note: this preserves the kernel driver default, to force a certain state
|
||||
# use RUNTIME_PM_ENABLE/DISABLE instead.
|
||||
# Separate multiple drivers with spaces.
|
||||
# Default: "mei_me nouveau radeon xhci_hcd", use "" to disable completely.
|
||||
|
||||
#RUNTIME_PM_DRIVER_DENYLIST="mei_me nouveau radeon xhci_hcd"
|
||||
|
||||
# Permanently enable/disable Runtime PM for listed PCIe device addresses
|
||||
# (independent of the power source). This has priority over all preceding
|
||||
# Runtime PM settings. Separate multiple addresses with spaces.
|
||||
# Use lspci to get the adresses (1st column).
|
||||
# Default: <none>
|
||||
|
||||
#RUNTIME_PM_ENABLE="11:22.3"
|
||||
#RUNTIME_PM_DISABLE="44:55.6"
|
||||
|
||||
# Set to 0 to disable, 1 to enable USB autosuspend feature.
|
||||
# Default: 1
|
||||
|
||||
#USB_AUTOSUSPEND=1
|
||||
|
||||
# Exclude listed devices from USB autosuspend (separate with spaces).
|
||||
# Use lsusb to get the ids.
|
||||
# Note: input devices (usbhid) and libsane-supported scanners are excluded
|
||||
# automatically.
|
||||
# Default: <none>
|
||||
|
||||
#USB_DENYLIST="1111:2222 3333:4444"
|
||||
|
||||
# Exclude audio devices from USB autosuspend:
|
||||
# 0=do not exclude, 1=exclude.
|
||||
# Default: 1
|
||||
|
||||
#USB_EXCLUDE_AUDIO=1
|
||||
|
||||
# Exclude bluetooth devices from USB autosuspend:
|
||||
# 0=do not exclude, 1=exclude.
|
||||
# Default: 0
|
||||
|
||||
#USB_EXCLUDE_BTUSB=0
|
||||
|
||||
# Exclude phone devices from USB autosuspend:
|
||||
# 0=do not exclude, 1=exclude (enable charging).
|
||||
# Default: 0
|
||||
|
||||
#USB_EXCLUDE_PHONE=0
|
||||
|
||||
# Exclude printers from USB autosuspend:
|
||||
# 0=do not exclude, 1=exclude.
|
||||
# Default: 1
|
||||
|
||||
#USB_EXCLUDE_PRINTER=1
|
||||
|
||||
# Exclude WWAN devices from USB autosuspend:
|
||||
# 0=do not exclude, 1=exclude.
|
||||
# Default: 0
|
||||
|
||||
#USB_EXCLUDE_WWAN=0
|
||||
|
||||
# Allow USB autosuspend for listed devices even if already denylisted or
|
||||
# excluded above (separate with spaces). Use lsusb to get the ids.
|
||||
# Default: 0
|
||||
|
||||
#USB_ALLOWLIST="1111:2222 3333:4444"
|
||||
|
||||
# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
|
||||
# on system startup: 0=disable, 1=enable.
|
||||
# Note: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
|
||||
# are ignored when this is enabled.
|
||||
# Default: 0
|
||||
|
||||
#RESTORE_DEVICE_STATE_ON_STARTUP=0
|
||||
|
||||
# Radio devices to disable on startup: bluetooth, nfc, wifi, wwan.
|
||||
# Separate multiple devices with spaces.
|
||||
# Default: <none>
|
||||
|
||||
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth nfc wifi wwan"
|
||||
|
||||
# Radio devices to enable on startup: bluetooth, nfc, wifi, wwan.
|
||||
# Separate multiple devices with spaces.
|
||||
# Default: <none>
|
||||
|
||||
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
|
||||
|
||||
# Radio devices to enable on AC: bluetooth, nfc, wifi, wwan.
|
||||
# Default: <none>
|
||||
|
||||
#DEVICES_TO_ENABLE_ON_AC="bluetooth nfc wifi wwan"
|
||||
|
||||
# Radio devices to disable on battery: bluetooth, nfc, wifi, wwan.
|
||||
# Default: <none>
|
||||
|
||||
#DEVICES_TO_DISABLE_ON_BAT="bluetooth nfc wifi wwan"
|
||||
|
||||
# Radio devices to disable on battery when not in use (not connected):
|
||||
# bluetooth, nfc, wifi, wwan.
|
||||
# Default: <none>
|
||||
|
||||
#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth nfc wifi wwan"
|
||||
|
||||
# Battery Care -- Charge thresholds
|
||||
# Charging starts when the charger is connected and the charge level
|
||||
# is below the start threshold. Charging stops when the charge level
|
||||
# is above the stop threshold.
|
||||
# Required hardware: Lenovo ThinkPads and select other laptop brands
|
||||
# are driven via specific plugins
|
||||
# - Active plugin and support status are shown by tlp-stat -b
|
||||
# - Vendor specific threshold levels are shown by tlp-stat -b, some
|
||||
# laptops support only 1 (on)/ 0 (off) instead of a percentage level
|
||||
# - When your hardware supports a start *and* a stop threshold, you must
|
||||
# specify both, otherwise TLP will refuse to apply the single threshold
|
||||
# - When your hardware supports only a stop threshold, set the start
|
||||
# value to 0
|
||||
# - Older ThinkPads may require an external kernel module, refer to the
|
||||
# output of tlp-stat -b
|
||||
# For further explanation and vendor specific details refer to
|
||||
# - https://linrunner.de/tlp/settings/battery.html
|
||||
# - https://linrunner.de/tlp/settings/bc-vendors.html
|
||||
|
||||
# BAT0: Primary / Main / Internal battery
|
||||
# Note: also use for batteries BATC, BATT and CMB0
|
||||
# Default: <none>
|
||||
|
||||
# Battery charge level below which charging will begin.
|
||||
#START_CHARGE_THRESH_BAT0=75
|
||||
# Battery charge level above which charging will stop.
|
||||
#STOP_CHARGE_THRESH_BAT0=80
|
||||
|
||||
# BAT1: Secondary / Ultrabay / Slice / Replaceable battery
|
||||
# Note: primary on some laptops
|
||||
# Default: <none>
|
||||
|
||||
# Battery charge level below which charging will begin.
|
||||
#START_CHARGE_THRESH_BAT1=75
|
||||
# Battery charge level above which charging will stop.
|
||||
#STOP_CHARGE_THRESH_BAT1=80
|
||||
|
||||
# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable.
|
||||
# Default: 0
|
||||
|
||||
#RESTORE_THRESHOLDS_ON_BAT=1
|
||||
|
||||
# Control battery care drivers: 0=disable, 1=enable.
|
||||
# Default: 1 (all)
|
||||
|
||||
#NATACPI_ENABLE=1
|
||||
#TPACPI_ENABLE=1
|
||||
#TPSMAPI_ENABLE=1
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# tlp-rdw - Parameters for the radio device wizard
|
||||
|
||||
# Possible devices: bluetooth, wifi, wwan.
|
||||
# Separate multiple radio devices with spaces.
|
||||
# Default: <none> (for all parameters below)
|
||||
|
||||
# Radio devices to disable on connect.
|
||||
|
||||
#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
|
||||
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
|
||||
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
|
||||
|
||||
# Radio devices to enable on disconnect.
|
||||
|
||||
#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
|
||||
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
|
||||
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
|
||||
|
||||
# Radio devices to enable/disable when docked.
|
||||
|
||||
#DEVICES_TO_ENABLE_ON_DOCK=""
|
||||
#DEVICES_TO_DISABLE_ON_DOCK=""
|
||||
|
||||
# Radio devices to enable/disable when undocked.
|
||||
|
||||
#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
|
||||
#DEVICES_TO_DISABLE_ON_UNDOCK=""
|
||||
4
docs/solarpowered-main/files/solarpowered/etc/zcfan.conf
Normal file
4
docs/solarpowered-main/files/solarpowered/etc/zcfan.conf
Normal file
@@ -0,0 +1,4 @@
|
||||
max_temp 85
|
||||
med_temp 75
|
||||
low_temp 60
|
||||
temp_hysteresis 10
|
||||
@@ -0,0 +1,2 @@
|
||||
# Stem Darkening
|
||||
FREETYPE_PROPERTIES="cff:no-stem-darkening=0 autofitter:no-stem-darkening=0"
|
||||
@@ -0,0 +1 @@
|
||||
GSK_RENDERER=vulkan
|
||||
@@ -0,0 +1,4 @@
|
||||
# Use non-free iHD drivers
|
||||
|
||||
LIBVA_DRIVERS_PATH=/usr/lib64/dri-nonfree
|
||||
LIBVA_DRIVER_NAME=iHD
|
||||
@@ -0,0 +1,21 @@
|
||||
[Unit]
|
||||
Description=Zero-configuration fan control for ThinkPad
|
||||
Conflicts=thinkfan.service
|
||||
#
|
||||
[Service]
|
||||
ExecStart=/bin/zcfan
|
||||
Restart=always
|
||||
RestartSec=500ms
|
||||
#
|
||||
MemoryDenyWriteExecute=yes
|
||||
NoNewPrivileges=yes
|
||||
ProtectControlGroups=yes
|
||||
RestrictAddressFamilies=
|
||||
RestrictRealtime=yes
|
||||
|
||||
# We don't need to do any substantial clean up, so if something hangs it's
|
||||
# going to stay that way. Just forcefully kill and get it over with.
|
||||
TimeoutStopSec=2
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
@@ -0,0 +1,18 @@
|
||||
# T480s setup in one go
|
||||
solarpowered-setup:
|
||||
flatpak install --system flathub --noninteractive --assumeyes com.github.d4nj1.tlpui
|
||||
rpm-ostree kargs \
|
||||
--append-if-missing="thinkpad_acpi.fan_control=1" \
|
||||
--append-if-missing="i915.enable_guc=2" \
|
||||
--append-if-missing="i915.enable_fbc=1" \
|
||||
--append-if-missing="sysrq_always_enabled=1" \
|
||||
--append-if-missing="page_alloc.shuffle=1" \
|
||||
--append-if-missing="hid_apple.fnmode=0"
|
||||
sudo systemctl enable zcfan.service
|
||||
sudo systemctl start python3-validity.service
|
||||
sudo systemctl start open-fprintd.service
|
||||
sudo systemctl enable open-fprintd-resume.service open-fprintd-suspend.service open-fprintd.service python3-validity.service
|
||||
sudo authselect enable-feature with-fingerprint
|
||||
sudo authselect apply-changes
|
||||
sudo authselect current
|
||||
echo 'Remember to reboot!'
|
||||
Reference in New Issue
Block a user