From 57fdc0253995db1e9f90c37235aa00f056ce234f Mon Sep 17 00:00:00 2001 From: tumillanino Date: Thu, 9 Apr 2026 16:33:56 +1000 Subject: [PATCH] switching from cachy to bazzite kernel --- docs/solarpowered-main/.github/CODEOWNERS | 1 + docs/solarpowered-main/.github/dependabot.yml | 6 + .../workflows/build-solarpowered-ex.yml | 58 ++ .../.github/workflows/build-solarpowered.yml | 58 ++ .../.github/workflows/cleanup.yml | 23 + .../.github/workflows/release.yml | 49 ++ docs/solarpowered-main/.gitignore | 16 + docs/solarpowered-main/.justfile | 92 +++ docs/solarpowered-main/LICENSE | 201 ++++++ docs/solarpowered-main/README.md | 86 +++ .../workflows/build-autosolarpowered.yml | 43 ++ .../.github/workflows/build-bootc.yml | 37 ++ .../archives/.github/workflows/build-raw.yml | 34 + .../.github/workflows/build-solarizzed.yml | 43 ++ .../workflows/build-solarpowered-rawhide.yml | 43 ++ docs/solarpowered-main/archives/README.md | 3 + .../archives/files/scripts/base/bazzite.sh | 25 + .../archives/files/scripts/base/cosign.sh | 9 + .../files/scripts/base/disable-repos.sh | 9 + .../base/negativo17-multimedia-repo.sh | 20 + .../files/scripts/shared/block-ads.sh | 5 + .../files/scripts/shared/kora-icon-theme.sh | 45 ++ .../files/scripts/shared/luminance.sh | 9 + .../scripts/shared/openrgb-udev-rules.sh | 12 + .../files/scripts/shared/windscribe.sh | 9 + .../files/scripts/solarizzed/chromeos.sh | 18 + .../files/scripts/solarizzed/citron.sh | 27 + .../files/scripts/solarizzed/layan.sh | 18 + .../scripts/solarizzed/plasma-overdose.sh | 25 + .../files/scripts/solarizzed/ryujinx.sh | 27 + .../scripts/solarizzed/steam-rom-manager.sh | 28 + .../recipes/images/old-solarpowered-ex.yml | 65 ++ .../recipes/images/old-solarpowered.yml | 65 ++ .../recipes/images/solarizzed-gnome.yml | 81 +++ .../archives/recipes/images/solarizzed.yml | 64 ++ .../recipes/images/solarpowered-bootc.yml | 27 + .../recipes/images/solarpowered-ex-bootc.yml | 29 + .../images/solarpowered-ex-rawhide.yml | 240 +++++++ .../recipes/images/solarpowered-raw.yml | 58 ++ .../recipes/images/solarpowered-rawhide.yml | 247 +++++++ .../recipes/packages/core-discard.yml | 24 + .../archives/recipes/packages/core.yml | 64 ++ .../recipes/packages/packages-bootc.yml | 204 ++++++ docs/solarpowered-main/cosign.pub | 4 + docs/solarpowered-main/files/README.md | 24 + .../solarpowered-main/files/dnf/vscodium.repo | 8 + .../files/gschema-overrides/README.md | 3 + ...-folders-folders-waydroid.gschema.override | 5 + ...rg-gnome-shell-extensions.gschema.override | 4 + ...-gnome-desktop-background.gschema.override | 5 + ...g-gnome-desktop-interface.gschema.override | 11 + .../zz04-org-gnome-touchpad.gschema.override | 3 + ...me-desktop-wm-preferences.gschema.override | 3 + .../zz06-org-gnome-mutter.gschema.override | 3 + .../zz07-org-gnome-nautilus.gschema.override | 4 + .../solarpowered-main/files/scripts/README.md | 15 + .../files/scripts/example.sh | 10 + .../files/scripts/kernels/kernel-bazzite.sh | 25 + .../files/scripts/kernels/kernel-blu.sh | 50 ++ .../files/scripts/kernels/kernel-cachy.sh | 56 ++ .../files/scripts/kernels/kernel-fedora.sh | 31 + .../shared/adwaita-colors-icon-theme.sh | 18 + .../files/scripts/shared/android-tools.sh | 18 + .../scripts/shared/colloid-icon-theme.sh | 32 + .../files/scripts/shared/edid.sh | 7 + .../scripts/shared/morewaita-icon-theme.sh | 49 ++ .../scripts/shared/nautilus-copy-path.sh | 22 + .../files/scripts/shared/qogir-icon-theme.sh | 32 + .../files/scripts/shared/tela-icon-theme.sh | 32 + .../files/shared/etc/.gitkeep | 0 .../files/shared/etc/distrobox.ini | 68 ++ .../files/shared/etc/distrobox/distrobox.conf | 4 + .../files/shared/etc/rpm-ostreed.conf | 7 + .../etc/skel/.config/MangoHud/MangoHud.conf | 50 ++ .../etc/skel/.config/celluloid/mpv.conf | 42 ++ .../celluloid/scripts/SmartCopyPaste.lua | 333 ++++++++++ .../.config/celluloid/scripts/clipshot.lua | 56 ++ .../skel/.config/celluloid/scripts/reload.lua | 418 ++++++++++++ .../etc/skel/.config/fish/functions/bat.fish | 5 + .../etc/skel/.config/fish/functions/cat.fish | 9 + .../.config/fish/functions/deployments.fish | 3 + .../.config/fish/functions/fish_greeting.fish | 7 + .../etc/skel/.config/fish/functions/m4a.fish | 4 + .../fish/functions/pin-deployment.fish | 3 + .../fish/functions/remove-deployment.fish | 3 + .../fish/functions/unpin-deployment.fish | 3 + .../shared/etc/skel/.config/yt-dlp/config | 5 + .../config/chromium-flags.conf | 7 + .../files/shared/etc/topgrade.toml | 221 +++++++ .../files/shared/usr/bin/append | 3 + .../files/shared/usr/bin/melonDS | 10 + .../files/shared/usr/bin/rechunker-group-fix | 19 + .../files/shared/usr/bin/ryujinx | 10 + .../files/shared/usr/bin/waydroid-session | 27 + .../files/shared/usr/bin/zstar | 27 + .../files/shared/usr/lib/systemd/.gitkeep | 0 .../system/rechunker-group-fix.service | 27 + .../usr/lib/systemd/user/topgrade.service | 9 + .../usr/lib/systemd/user/topgrade.timer | 11 + .../shared/usr/lib/udev/rules.d/98-vial.rules | 1 + .../shared/usr/lib/udev/rules.d/99-via.rules | 1 + .../usr/libexec/waydroid-container-restart | 3 + .../files/shared/usr/share/.gitkeep | 0 .../shared/usr/share/appends/00-master.just | 9 + .../shared/usr/share/appends/01-system.just | 124 ++++ .../shared/usr/share/appends/10-apps.just | 96 +++ .../waydroid-container-restart.desktop | 8 + .../share/wayland-sessions/waydroid.desktop | 5 + .../files/solarpowered-ex/.gitkeep | 0 .../files/solarpowered-ex/etc/tuned/ppd.conf | 19 + .../files/solarpowered-ex/usr/.gitkeep | 0 .../solarpowered-ex/usr/bin/gamescope-session | 13 + .../solarpowered-ex/usr/bin/steam-extest | 13 + .../usr/lib/firmware/edid/edid.bin | Bin 0 -> 256 bytes .../systemd/system/b550-suspend-fix.service | 8 + .../lib/tuned/profiles/balanced/tuned.conf | 34 + .../lib/tuned/profiles/powersave/tuned.conf | 40 ++ .../files/solarpowered-ex/usr/share/.gitkeep | 0 .../usr/share/appends/99-solarpowered-ex.just | 10 + .../files/solarpowered/etc/throttled.conf | 61 ++ .../files/solarpowered/etc/tlp.conf | 626 ++++++++++++++++++ .../files/solarpowered/etc/zcfan.conf | 4 + .../environment.d/80-FREETYPE_PROPERTIES.conf | 2 + .../lib/environment.d/80-GSK_RENDERER.conf | 1 + .../usr/lib/environment.d/80-LIBVA.conf | 4 + .../usr/lib/systemd/system/zcfan.service | 21 + .../files/solarpowered/usr/share/.gitkeep | 0 .../usr/share/appends/99-solarpowered.just | 18 + .../recipes/image-template.yml | 63 ++ .../recipes/images/.gitignore | 3 + .../recipes/images/README.md | 15 + .../recipes/images/bootcli.yml | 66 ++ .../recipes/images/solarpowered-ex.yml | 69 ++ .../recipes/images/solarpowered.yml | 65 ++ .../recipes/kernels/bazzite.yml | 61 ++ .../solarpowered-main/recipes/kernels/blu.yml | 36 + .../recipes/kernels/cachy.yml | 9 + .../recipes/kernels/fedora.yml | 4 + .../recipes/packages/README.md | 15 + .../recipes/packages/foundation.yml | 128 ++++ .../recipes/packages/solarpowered-ex.yml | 74 +++ .../recipes/packages/solarpowered.yml | 40 ++ .../solarpowered-main/recipes/shared/base.yml | 49 ++ .../recipes/shared/bling-negativo17.yml | 29 + .../recipes/shared/bling-rpmfusion.yml | 26 + .../recipes/shared/default-flatpaks.yml | 25 + .../recipes/shared/files.yml | 5 + .../recipes/shared/fonts.yml | 120 ++++ .../recipes/shared/gnome-extensions.yml | 7 + .../recipes/shared/gschema-overrides.yml | 11 + .../recipes/shared/plymouth.yml | 19 + .../solarpowered-main/recipes/shared/rpms.yml | 23 + .../recipes/shared/script.yml | 5 + .../recipes/shared/systemd.yml | 15 + files/scripts/bazzite-kernel.sh | 79 +++ recipes/common/copr-packages.yml | 1 - recipes/recipe.yml | 21 +- 157 files changed, 6309 insertions(+), 7 deletions(-) create mode 100644 docs/solarpowered-main/.github/CODEOWNERS create mode 100644 docs/solarpowered-main/.github/dependabot.yml create mode 100644 docs/solarpowered-main/.github/workflows/build-solarpowered-ex.yml create mode 100644 docs/solarpowered-main/.github/workflows/build-solarpowered.yml create mode 100644 docs/solarpowered-main/.github/workflows/cleanup.yml create mode 100644 docs/solarpowered-main/.github/workflows/release.yml create mode 100644 docs/solarpowered-main/.gitignore create mode 100644 docs/solarpowered-main/.justfile create mode 100644 docs/solarpowered-main/LICENSE create mode 100644 docs/solarpowered-main/README.md create mode 100644 docs/solarpowered-main/archives/.github/workflows/build-autosolarpowered.yml create mode 100644 docs/solarpowered-main/archives/.github/workflows/build-bootc.yml create mode 100644 docs/solarpowered-main/archives/.github/workflows/build-raw.yml create mode 100644 docs/solarpowered-main/archives/.github/workflows/build-solarizzed.yml create mode 100644 docs/solarpowered-main/archives/.github/workflows/build-solarpowered-rawhide.yml create mode 100644 docs/solarpowered-main/archives/README.md create mode 100644 docs/solarpowered-main/archives/files/scripts/base/bazzite.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/base/cosign.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/base/disable-repos.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/base/negativo17-multimedia-repo.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/shared/block-ads.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/shared/kora-icon-theme.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/shared/luminance.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/shared/openrgb-udev-rules.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/shared/windscribe.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/solarizzed/chromeos.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/solarizzed/citron.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/solarizzed/layan.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/solarizzed/plasma-overdose.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/solarizzed/ryujinx.sh create mode 100644 docs/solarpowered-main/archives/files/scripts/solarizzed/steam-rom-manager.sh create mode 100644 docs/solarpowered-main/archives/recipes/images/old-solarpowered-ex.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/old-solarpowered.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarizzed-gnome.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarizzed.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarpowered-bootc.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarpowered-ex-bootc.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarpowered-ex-rawhide.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarpowered-raw.yml create mode 100644 docs/solarpowered-main/archives/recipes/images/solarpowered-rawhide.yml create mode 100644 docs/solarpowered-main/archives/recipes/packages/core-discard.yml create mode 100644 docs/solarpowered-main/archives/recipes/packages/core.yml create mode 100644 docs/solarpowered-main/archives/recipes/packages/packages-bootc.yml create mode 100644 docs/solarpowered-main/cosign.pub create mode 100644 docs/solarpowered-main/files/README.md create mode 100644 docs/solarpowered-main/files/dnf/vscodium.repo create mode 100644 docs/solarpowered-main/files/gschema-overrides/README.md create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz00-desktop-app-folders-folders-waydroid.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz01-org-gnome-shell-extensions.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz02-org-gnome-desktop-background.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz03-org-gnome-desktop-interface.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz04-org-gnome-touchpad.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz05-org-gnome-desktop-wm-preferences.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz06-org-gnome-mutter.gschema.override create mode 100644 docs/solarpowered-main/files/gschema-overrides/zz07-org-gnome-nautilus.gschema.override create mode 100644 docs/solarpowered-main/files/scripts/README.md create mode 100644 docs/solarpowered-main/files/scripts/example.sh create mode 100644 docs/solarpowered-main/files/scripts/kernels/kernel-bazzite.sh create mode 100644 docs/solarpowered-main/files/scripts/kernels/kernel-blu.sh create mode 100644 docs/solarpowered-main/files/scripts/kernels/kernel-cachy.sh create mode 100644 docs/solarpowered-main/files/scripts/kernels/kernel-fedora.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/adwaita-colors-icon-theme.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/android-tools.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/colloid-icon-theme.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/edid.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/morewaita-icon-theme.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/nautilus-copy-path.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/qogir-icon-theme.sh create mode 100644 docs/solarpowered-main/files/scripts/shared/tela-icon-theme.sh create mode 100644 docs/solarpowered-main/files/shared/etc/.gitkeep create mode 100644 docs/solarpowered-main/files/shared/etc/distrobox.ini create mode 100644 docs/solarpowered-main/files/shared/etc/distrobox/distrobox.conf create mode 100644 docs/solarpowered-main/files/shared/etc/rpm-ostreed.conf create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/MangoHud/MangoHud.conf create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/mpv.conf create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/SmartCopyPaste.lua create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/clipshot.lua create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/reload.lua create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/bat.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/cat.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/deployments.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/fish_greeting.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/m4a.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/pin-deployment.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/remove-deployment.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/unpin-deployment.fish create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.config/yt-dlp/config create mode 100644 docs/solarpowered-main/files/shared/etc/skel/.var/app/org.chromium.Chromium/config/chromium-flags.conf create mode 100644 docs/solarpowered-main/files/shared/etc/topgrade.toml create mode 100755 docs/solarpowered-main/files/shared/usr/bin/append create mode 100755 docs/solarpowered-main/files/shared/usr/bin/melonDS create mode 100755 docs/solarpowered-main/files/shared/usr/bin/rechunker-group-fix create mode 100755 docs/solarpowered-main/files/shared/usr/bin/ryujinx create mode 100755 docs/solarpowered-main/files/shared/usr/bin/waydroid-session create mode 100755 docs/solarpowered-main/files/shared/usr/bin/zstar create mode 100644 docs/solarpowered-main/files/shared/usr/lib/systemd/.gitkeep create mode 100644 docs/solarpowered-main/files/shared/usr/lib/systemd/system/rechunker-group-fix.service create mode 100644 docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.service create mode 100644 docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.timer create mode 100644 docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/98-vial.rules create mode 100644 docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/99-via.rules create mode 100644 docs/solarpowered-main/files/shared/usr/libexec/waydroid-container-restart create mode 100644 docs/solarpowered-main/files/shared/usr/share/.gitkeep create mode 100644 docs/solarpowered-main/files/shared/usr/share/appends/00-master.just create mode 100644 docs/solarpowered-main/files/shared/usr/share/appends/01-system.just create mode 100644 docs/solarpowered-main/files/shared/usr/share/appends/10-apps.just create mode 100644 docs/solarpowered-main/files/shared/usr/share/applications/waydroid-container-restart.desktop create mode 100644 docs/solarpowered-main/files/shared/usr/share/wayland-sessions/waydroid.desktop create mode 100644 docs/solarpowered-main/files/solarpowered-ex/.gitkeep create mode 100644 docs/solarpowered-main/files/solarpowered-ex/etc/tuned/ppd.conf create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/.gitkeep create mode 100755 docs/solarpowered-main/files/solarpowered-ex/usr/bin/gamescope-session create mode 100755 docs/solarpowered-main/files/solarpowered-ex/usr/bin/steam-extest create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/lib/firmware/edid/edid.bin create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/lib/systemd/system/b550-suspend-fix.service create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/balanced/tuned.conf create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/powersave/tuned.conf create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/share/.gitkeep create mode 100644 docs/solarpowered-main/files/solarpowered-ex/usr/share/appends/99-solarpowered-ex.just create mode 100644 docs/solarpowered-main/files/solarpowered/etc/throttled.conf create mode 100644 docs/solarpowered-main/files/solarpowered/etc/tlp.conf create mode 100644 docs/solarpowered-main/files/solarpowered/etc/zcfan.conf create mode 100644 docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-FREETYPE_PROPERTIES.conf create mode 100644 docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-GSK_RENDERER.conf create mode 100644 docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-LIBVA.conf create mode 100644 docs/solarpowered-main/files/solarpowered/usr/lib/systemd/system/zcfan.service create mode 100644 docs/solarpowered-main/files/solarpowered/usr/share/.gitkeep create mode 100644 docs/solarpowered-main/files/solarpowered/usr/share/appends/99-solarpowered.just create mode 100644 docs/solarpowered-main/recipes/image-template.yml create mode 100644 docs/solarpowered-main/recipes/images/.gitignore create mode 100644 docs/solarpowered-main/recipes/images/README.md create mode 100644 docs/solarpowered-main/recipes/images/bootcli.yml create mode 100644 docs/solarpowered-main/recipes/images/solarpowered-ex.yml create mode 100644 docs/solarpowered-main/recipes/images/solarpowered.yml create mode 100644 docs/solarpowered-main/recipes/kernels/bazzite.yml create mode 100644 docs/solarpowered-main/recipes/kernels/blu.yml create mode 100644 docs/solarpowered-main/recipes/kernels/cachy.yml create mode 100644 docs/solarpowered-main/recipes/kernels/fedora.yml create mode 100644 docs/solarpowered-main/recipes/packages/README.md create mode 100644 docs/solarpowered-main/recipes/packages/foundation.yml create mode 100644 docs/solarpowered-main/recipes/packages/solarpowered-ex.yml create mode 100644 docs/solarpowered-main/recipes/packages/solarpowered.yml create mode 100644 docs/solarpowered-main/recipes/shared/base.yml create mode 100644 docs/solarpowered-main/recipes/shared/bling-negativo17.yml create mode 100644 docs/solarpowered-main/recipes/shared/bling-rpmfusion.yml create mode 100644 docs/solarpowered-main/recipes/shared/default-flatpaks.yml create mode 100644 docs/solarpowered-main/recipes/shared/files.yml create mode 100644 docs/solarpowered-main/recipes/shared/fonts.yml create mode 100644 docs/solarpowered-main/recipes/shared/gnome-extensions.yml create mode 100644 docs/solarpowered-main/recipes/shared/gschema-overrides.yml create mode 100644 docs/solarpowered-main/recipes/shared/plymouth.yml create mode 100644 docs/solarpowered-main/recipes/shared/rpms.yml create mode 100644 docs/solarpowered-main/recipes/shared/script.yml create mode 100644 docs/solarpowered-main/recipes/shared/systemd.yml create mode 100644 files/scripts/bazzite-kernel.sh diff --git a/docs/solarpowered-main/.github/CODEOWNERS b/docs/solarpowered-main/.github/CODEOWNERS new file mode 100644 index 0000000..9ba27c8 --- /dev/null +++ b/docs/solarpowered-main/.github/CODEOWNERS @@ -0,0 +1 @@ +* @xynydev @fiftydinar diff --git a/docs/solarpowered-main/.github/dependabot.yml b/docs/solarpowered-main/.github/dependabot.yml new file mode 100644 index 0000000..1230149 --- /dev/null +++ b/docs/solarpowered-main/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/docs/solarpowered-main/.github/workflows/build-solarpowered-ex.yml b/docs/solarpowered-main/.github/workflows/build-solarpowered-ex.yml new file mode 100644 index 0000000..2f065d7 --- /dev/null +++ b/docs/solarpowered-main/.github/workflows/build-solarpowered-ex.yml @@ -0,0 +1,58 @@ +name: Build solarpowered-ex +on: + schedule: + - cron: "30 2 * * 1,5" # build at 2:30 AM UTC every Monday & Friday + + push: + paths: + - ".github/workflows/build-solarpowered-ex.yml" + - "recipes/images/solarpowered-ex.yml" + - "recipes/packages/solarpowered-ex.yml" + + pull_request: + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false + matrix: + recipe: + - images/solarpowered-ex.yml + steps: + - name: Optimize build times + shell: bash + run: | + echo 'set man-db/auto-update false' | sudo debconf-communicate + sudo dpkg-reconfigure man-db + sudo rm -f /var/lib/man-db/auto-update + sudo sed -i 's/^update_initramfs=.*/update_initramfs=no/' /etc/initramfs-tools/update-initramfs.conf + + - name: Build solarpowered-ex + uses: blue-build/github-action@v1.11 + with: + recipe: ${{ matrix.recipe }} + build_chunked_oci: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} + maximize_build_space: true + retry_push_count: 3 + build_opts: --rechunk-clear-plan + + # generate_release: + # name: Generate Release + # permissions: + # contents: write + # needs: [bluebuild] + # if: github.event_name != 'pull_request' + # secrets: inherit + # uses: ./.github/workflows/release.yml \ No newline at end of file diff --git a/docs/solarpowered-main/.github/workflows/build-solarpowered.yml b/docs/solarpowered-main/.github/workflows/build-solarpowered.yml new file mode 100644 index 0000000..4c3fab2 --- /dev/null +++ b/docs/solarpowered-main/.github/workflows/build-solarpowered.yml @@ -0,0 +1,58 @@ +name: Build solarpowered +on: + schedule: + - cron: "00 2 * * 1,5" + + push: + paths: + - ".github/workflows/build-solarpowered.yml" + - "recipes/images/solarpowered.yml" + - "recipes/packages/solarpowered.yml" + + pull_request: + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false + matrix: + recipe: + - images/solarpowered.yml + steps: + - name: Optimize build times + shell: bash + run: | + echo 'set man-db/auto-update false' | sudo debconf-communicate + sudo dpkg-reconfigure man-db + sudo rm -f /var/lib/man-db/auto-update + sudo sed -i 's/^update_initramfs=.*/update_initramfs=no/' /etc/initramfs-tools/update-initramfs.conf + + - name: Build solarpowered + uses: blue-build/github-action@v1.11 + with: + recipe: ${{ matrix.recipe }} + build_chunked_oci: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} + maximize_build_space: true + retry_push_count: 3 + build_opts: --rechunk-clear-plan + + # generate_release: + # name: Generate Release + # permissions: + # contents: write + # needs: [bluebuild] + # if: github.event_name != 'pull_request' + # secrets: inherit + # uses: ./.github/workflows/release.yml \ No newline at end of file diff --git a/docs/solarpowered-main/.github/workflows/cleanup.yml b/docs/solarpowered-main/.github/workflows/cleanup.yml new file mode 100644 index 0000000..6e54320 --- /dev/null +++ b/docs/solarpowered-main/.github/workflows/cleanup.yml @@ -0,0 +1,23 @@ +name: Clean up images +on: + schedule: + - cron: "00 0 * * 0" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + +jobs: + delete-older-than-30: + runs-on: ubuntu-latest + permissions: + packages: write + steps: + - name: Clean up images more than 30 days + uses: dataaxiom/ghcr-cleanup-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + packages: solarpowered,solarpowered-ex + older-than: 30 days + delete-untagged: true + # dry-run: true diff --git a/docs/solarpowered-main/.github/workflows/release.yml b/docs/solarpowered-main/.github/workflows/release.yml new file mode 100644 index 0000000..f089af2 --- /dev/null +++ b/docs/solarpowered-main/.github/workflows/release.yml @@ -0,0 +1,49 @@ +on: + workflow_call: + workflow_dispatch: + inputs: + handwritten: + description: 'Small changelog about changes in this build:' + target: + description: 'Release branch (e.g., testing). Defaults to branch name.' +permissions: + contents: write + +name: Generate Release +jobs: + generate-release: + runs-on: ubuntu-latest + steps: + - name: Checkout last 500 commits (for to work) + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 500 + + - name: Get target + id: get-target + run: | + TARGET="${{ github.event.inputs.target || github.ref }}" + TARGET="${TARGET##*/}" + if [ "$TARGET" = "main" ]; then + TARGET="latest" + fi + echo "target=$TARGET" >> $GITHUB_OUTPUT + + - name: Generate Release Text + id: generate-release + run: | + python3 ./.github/workflows/changelog.py \ + "${{ steps.get-target.outputs.target }}" \ + ./output.env ./changelog.md --workdir . --handwritten "${{ github.event.inputs.handwritten }}" + source ./output.env + echo "title=${TITLE}" >> $GITHUB_OUTPUT + echo "tag=${TAG}" >> $GITHUB_OUTPUT + + - name: Create Release + uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2 + with: + name: ${{ steps.generate-release.outputs.title }} + tag_name: ${{ steps.generate-release.outputs.tag }} + body_path: ./changelog.md + make_latest: ${{ steps.get-target.outputs.target == 'stable' }} + prerelease: ${{ steps.get-target.outputs.target != 'stable' }} diff --git a/docs/solarpowered-main/.gitignore b/docs/solarpowered-main/.gitignore new file mode 100644 index 0000000..e7047f7 --- /dev/null +++ b/docs/solarpowered-main/.gitignore @@ -0,0 +1,16 @@ +cosign.key +cosign.private +/Containerfile +/Containerfile-tmp +/tmp.yml +recipes/tmp.yml +recipes/recipe-tmp.yml +*tmp.* +.bluebuild-scripts_* +/.bluebuild-scripts_* +qcow2 +manifest* +config.toml +Containerfile* +./containerfile +*.img \ No newline at end of file diff --git a/docs/solarpowered-main/.justfile b/docs/solarpowered-main/.justfile new file mode 100644 index 0000000..8108739 --- /dev/null +++ b/docs/solarpowered-main/.justfile @@ -0,0 +1,92 @@ +@default: + just --list + +set shell := ["bash", "-c"] +RCPDIR := "./recipes/images" +CTFS := "./containerfiles" +VERSION := "localbuild" +USRN := "local" +PSWD := "local" + +# Build image-name as named in ./recipes/images +build *ARGS: + #!/usr/bin/env bash + if [[ -e Containerfile."{{ ARGS }}" ]]; then + rm Containerfile."{{ ARGS }}" + fi + bluebuild generate -o Containerfile."{{ ARGS }}" "{{ RCPDIR }}"/"{{ ARGS }}".yml --skip-validation + podman build -t "{{ ARGS }}":"{{ VERSION }}" --file Containerfile."{{ ARGS }}" --squash . 2>&1 | tee "{{ RCPDIR }}"/"{{ ARGS }}".log + rm Containerfile."{{ ARGS }}" + rm -rf ./.bluebuild-* + +# Build a Containerfile stored within ./containerfiles/argument/ with logs +ctf *ARGS: + podman build -f "{{ CTFS }}"/"{{ ARGS }}"/Containerfile -t "{{ ARGS }}":{{VERSION}} . 2>&1 | tee "{{ CTFS }}"/"{{ ARGS }}"/"{{ ARGS }}".log + +# Build, create, and purge archive of image-name as named in ./recipes/images. Slower, but useful for testing recipes cleanly +targz *ARGS: + bluebuild build --skip-validation -s -c zstd -a ./ "{{ RCPDIR }}"/"{{ ARGS }}".yml + rm -f ./tmp.tar.gz + rm -rf ./.bluebuild-scripts_* + +# Save Podman container to a .gz file for inspection +save *ARGS: + podman save {{ ARGS }}:{{ VERSION }} | gzip > {{ ARGS }}.gz + +# Build image-name as named in ./recipes/images and export a VM-ready QCOW2 file in ./qcow2 +qcow2 *ARGS: config + #!/usr/bin/env bash + set -euo pipefail + if [[ ! -e {{ RCPDIR }}/{{ ARGS }}.yml ]]; then + sudo podman build -t "{{ ARGS }}":"{{ VERSION }}" --file {{ CTFS }}/{{ ARGS }}/Containerfile . 2>&1 | tee {{ CTFS }}/{{ ARGS }}/{{ ARGS }}.log + sudo chown 1000:1000 {{ CTFS }}/{{ ARGS }}/{{ ARGS }}.log + else + bluebuild generate -o Containerfile."{{ ARGS }}" "{{ RCPDIR }}"/"{{ ARGS }}".yml + sudo podman build -t "{{ ARGS }}":"{{ VERSION }}" --file Containerfile."{{ ARGS }}" + fi + sudo podman run --rm -it --privileged \ + --pull=newer \ + --security-opt label=type:unconfined_t \ + -v /var/lib/containers/storage:/var/lib/containers/storage \ + -v .:/output \ + -v ./config.toml:/config.toml:ro \ + quay.io/centos-bootc/bootc-image-builder:latest \ + --rootfs btrfs \ + --use-librepo=True \ + --chown 1000:1000 \ + localhost/"{{ ARGS }}":"{{ VERSION }}" + if [[ ! -e {{ RCPDIR }}/{{ ARGS }}.yml ]]; then + sudo rm -rf ./.bluebuild* + rm Containerfile."{{ ARGS }}" + fi + sudo rm ./manifest* + +# Completely clean user & system-level Podman image registry & ./ +scrub: + #!/usr/bin/env bash + set -uo pipefail + rm -rf ./qcow2 ./.bluebuild-scripts_* + rm -f ./tmp.tar.gz ./config.toml + podman rmi -f $(podman images -f "dangling=true" -q) + sudo rm -f manifest-qcow2.json + sudo podman rmi -f $(sudo podman images -f "dangling=true" -q) + +# Generate bootc-image-builder config +config: + #!/usr/bin/env bash + if [[ ! -e ./config.toml ]]; then + echo "Generating config.toml..." + cat <> ./config.toml + [[customizations.user]] + name = "{{ USRN }}" + password = "{{ PSWD }}" + groups = ["wheel"] + EOF + echo "config.toml generated." + else + echo "config.toml already exists." + fi + +# Restore SELinux context to /var/lib/containers in case rootful Podman perms get messed up +restorecon: + sudo restorecon -R -F /var/lib/containers \ No newline at end of file diff --git a/docs/solarpowered-main/LICENSE b/docs/solarpowered-main/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/docs/solarpowered-main/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/solarpowered-main/README.md b/docs/solarpowered-main/README.md new file mode 100644 index 0000000..4c95654 --- /dev/null +++ b/docs/solarpowered-main/README.md @@ -0,0 +1,86 @@ +#
☀️ solarpowered ☀️
+ +`solarpowered` and `solarpowered-ex` are custom images based on [Fedora Silverblue](https://quay.io/repository/fedora/fedora-silverblue?tab=tags) using [BlueBuild](https://github.com/blue-build/template). I started this project as a learning and hobby project to familiarize myself with containers, Linux, and GitHub. + +Both images are fully functional for daily operations. + +Also check out [atomic-t480s](https://github.com/askpng/atomic-t480s), much simpler custom image project I started to support Lenovo Thinkpad T480s users. + +I named this project `solarpowered` because I like Gawain from Fate/Extra & Fate/Grand Order. + +# Highlights + +- Multimedia codecs from `fedora-multimedia` repo (and `intel-media-driver` from RPM Fusion) +- Distrobox, Just, and VSCodium +- Waydroid and ADB +- Nautilus addons +- More vanilla GNOME Experience +- Zen Browser instead of Firefox +- Colloid, MoreWaita, Tela, and Qogir icon themes +- Nerd Fonts Symbols and a small selection of fonts from Google Fonts +- Several sound & icon themes & fonts installed OOTB + +## solarpowered - made to support Lenovo T480/s devices + +Includes the following tools for maximum Lenovo T480/s functionality with 0 layering: +- `igt-gpu-tools` for monitoring iGPU use +- [python-validity](https://copr.fedorainfracloud.org/coprs/sneexy/python-validity/) (sneexy) +- [throttled](https://copr.fedorainfracloud.org/coprs/abn/throttled/) (abn) +- TLP +- `zcfan` + +This image is shipped with [kernel-blu](https://copr.fedorainfracloud.org/coprs/sentry/kernel-blu/) with `v4l2loopback` kernel module + +It is highly recommended to run `append solarpowered-setup` upon installation. This installs TLP-UI Flatpak, configrues necessary kernel arguments & local `initramfs` regeneration, and enables `python-validity` and `zcfan`. It is recommended to reboot afterwards. + +> NOTE: This does *not* configure `throttled`, as undervolt stable values differ between machines. For further information about undervolting, refer to the official documentation on `throttled`. + +## solarpowered-ex - for Ryzen/AMD computers + +Includes the following tools: +- Gamescope, Lutris, MangoHud and experimental implementation of Steam Gaming Mode +- Beta/Unstable version of Sunshine for game streaming +- Ramalama and ROCM packages +- [LACT-libadwaita](https://copr.fedorainfracloud.org/coprs/ilyaz/LACT/) + +This image is shipped with [kernel-cachyos-lto](https://copr.fedorainfracloud.org/coprs/bieszczaders/kernel-cachyos/) with its built-in `v4l2loopback`, `evdi` and `displaylink`, as well as `zenergy` for Ryzen power stats reading. + +# Installation + +You can install by rebasing from Silverblue or generating an ISO file yourself. If you decide to give this a go, and would like to provide feedback and/or suggestions, feel free to open a new issue. + +## Rebase +To rebase from a Silverblue installation, follow the steps below. + +### solarpowered + +1. Rebase to the unsigned image to get the proper signing keys + policies installed and reboot automatically: + ``` + rpm-ostree rebase ostree-unverified-registry:ghcr.io/askpng/solarpowered:latest --reboot + ``` +2. Rebase to the signed image and reboot automatically: + ``` + rpm-ostree rebase ostree-image-signed:docker://ghcr.io/askpng/solarpowered:latest --reboot + ``` + +### solarpowered-ex + +1. Rebase to the unsigned image to get the proper signing keys + policies installed and reboot automatically: + ``` + rpm-ostree rebase ostree-unverified-registry:ghcr.io/askpng/solarpowered-ex:latest --reboot + ``` +2. Rebase to the signed image and reboot automatically: + ``` + rpm-ostree rebase ostree-image-signed:docker://ghcr.io/askpng/solarpowered-ex:latest --reboot + ``` + +## Verification +These images are signed with [Sigstore](https://www.sigstore.dev/)'s [cosign](https://github.com/sigstore/cosign). + +### Verify `cosign.pub` + +Download the `cosign.pub` file from this repo and run the following command within the same directory: + +```bash +cosign verify --key cosign.pub ghcr.io/askpng/solarpowered +``` diff --git a/docs/solarpowered-main/archives/.github/workflows/build-autosolarpowered.yml b/docs/solarpowered-main/archives/.github/workflows/build-autosolarpowered.yml new file mode 100644 index 0000000..c7ec8cb --- /dev/null +++ b/docs/solarpowered-main/archives/.github/workflows/build-autosolarpowered.yml @@ -0,0 +1,43 @@ +name: Build autosolarpowered +on: + schedule: + - cron: "00 18 * * 1,5" # build at 17:30 every Monday & Friday + + push: # build on push + paths: # build on push of the following files + - "recipes/images/autosolarpowered.yml" # solarpowered recipe + - "recipes/images/autosolarpowered-ex.yml" # solarpowered-ex recipe + + pull_request: # allow PRs triggering builds + workflow_dispatch: # allow manually triggering builds +concurrency: + # only run one build at a time + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false # stop GH from cancelling all matrix builds if one fails + matrix: + recipe: + - images/autosolarpowered.yml + - images/autosolarpowered-ex.yml + steps: + # the build is fully handled by the reusable github action + - name: Build Custom Image + uses: blue-build/github-action@v1.8 + with: + recipe: ${{ matrix.recipe }} + rechunk: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} + + # enabled by default, disable if your image is small and you want faster builds + maximize_build_space: true \ No newline at end of file diff --git a/docs/solarpowered-main/archives/.github/workflows/build-bootc.yml b/docs/solarpowered-main/archives/.github/workflows/build-bootc.yml new file mode 100644 index 0000000..7b0d294 --- /dev/null +++ b/docs/solarpowered-main/archives/.github/workflows/build-bootc.yml @@ -0,0 +1,37 @@ +name: Build bootc images +on: + schedule: + - cron: "00 18 * * 4" # build at 18:00 UTC every Thursday + + push: + paths: + - "recipes/base/base-bootc.yml" # base of bootc images + - "recipes/solarpowered-bootc.yml" # solarpowered-bootc recipe + - "recipes/solarpowered-ex-bootc.yml" # solarpowered-bootc recipe + + pull_request: # allow PRs triggering builds + workflow_dispatch: # allow manually triggering builds +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false # stop GH from cancelling all matrix builds if one fails + matrix: + recipe: + - solarpowered-bootc.yml + - solarpowered-ex-bootc.yml + steps: + # the build is fully handled by the reusable github action + - name: Build Custom Image + uses: blue-build/github-action@v1.8 + with: + recipe: ${{ matrix.recipe }} + rechunk: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} diff --git a/docs/solarpowered-main/archives/.github/workflows/build-raw.yml b/docs/solarpowered-main/archives/.github/workflows/build-raw.yml new file mode 100644 index 0000000..d5e400e --- /dev/null +++ b/docs/solarpowered-main/archives/.github/workflows/build-raw.yml @@ -0,0 +1,34 @@ +name: Build solarpowered-raw +on: + schedule: + - cron: "00 17 * * 1,3,5" # build at 17:00 UTC every Monday, Wednesday & Friday + + push: + paths: # trigger build only if solarpowered-ex.yml is updated + - "recipes/solarpowered-raw.yml" + + pull_request: # allow PRs triggering builds + workflow_dispatch: # allow manually triggering builds +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false # stop GH from cancelling all matrix builds if one fails + matrix: + recipe: + - solarpowered-raw.yml + steps: + # the build is fully handled by the reusable github action + - name: Build Custom Image + uses: blue-build/github-action@v1.8 + with: + recipe: ${{ matrix.recipe }} + rechunk: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} \ No newline at end of file diff --git a/docs/solarpowered-main/archives/.github/workflows/build-solarizzed.yml b/docs/solarpowered-main/archives/.github/workflows/build-solarizzed.yml new file mode 100644 index 0000000..cc64c2b --- /dev/null +++ b/docs/solarpowered-main/archives/.github/workflows/build-solarizzed.yml @@ -0,0 +1,43 @@ +name: Build solarizzed +on: + schedule: + - cron: "00 6 * * 1,5" # build at 6 AM UTC every Monday & Friday + + push: # build on push + paths: # build on push of the following files + # - "recipes/images/solarizzed.yml" # solarizzed recipe + - "recipes/images/solarizzed-gnome.yml" # solarizzed recipe + + pull_request: # allow PRs triggering builds + workflow_dispatch: # allow manually triggering builds +concurrency: + # only run one build at a time + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false # stop GH from cancelling all matrix builds if one fails + matrix: + recipe: + # - images/solarizzed.yml + - images/solarizzed-gnome.yml + steps: + # the build is fully handled by the reusable github action + - name: Build Custom Image + uses: blue-build/github-action@v1.9 + with: + recipe: ${{ matrix.recipe }} + rechunk: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} + + # enabled by default, disable if your image is small and you want faster builds + maximize_build_space: true \ No newline at end of file diff --git a/docs/solarpowered-main/archives/.github/workflows/build-solarpowered-rawhide.yml b/docs/solarpowered-main/archives/.github/workflows/build-solarpowered-rawhide.yml new file mode 100644 index 0000000..b19690e --- /dev/null +++ b/docs/solarpowered-main/archives/.github/workflows/build-solarpowered-rawhide.yml @@ -0,0 +1,43 @@ +name: Build solarpowered-rawhide +on: + # schedule: + # - cron: "00 18 * * 1,5" # build at 17:30 every Monday & Friday + + push: # build on push + paths: # build on push of the following files + - "recipes/images/solarpowered-rawhide.yml" # solarpowered recipe + - "recipes/images/solarpowered-ex-rawhide.yml" # solarpowered-ex recipe + + pull_request: # allow PRs triggering builds + workflow_dispatch: # allow manually triggering builds +concurrency: + # only run one build at a time + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true +jobs: + bluebuild: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false # stop GH from cancelling all matrix builds if one fails + matrix: + recipe: + - images/solarpowered-rawhide.yml + - images/solarpowered-ex-rawhide.yml + steps: + # the build is fully handled by the reusable github action + - name: Build Custom Image + uses: blue-build/github-action@v1.8 + with: + recipe: ${{ matrix.recipe }} + rechunk: true + cosign_private_key: ${{ secrets.SIGNING_SECRET }} + registry_token: ${{ github.token }} + pr_event_number: ${{ github.event.number }} + + # enabled by default, disable if your image is small and you want faster builds + maximize_build_space: true \ No newline at end of file diff --git a/docs/solarpowered-main/archives/README.md b/docs/solarpowered-main/archives/README.md new file mode 100644 index 0000000..1ee8bed --- /dev/null +++ b/docs/solarpowered-main/archives/README.md @@ -0,0 +1,3 @@ +# archives + +This folder is for placing archived recipes/files. For reference only. \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/base/bazzite.sh b/docs/solarpowered-main/archives/files/scripts/base/bazzite.sh new file mode 100644 index 0000000..689595e --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/base/bazzite.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/base/cosign.sh b/docs/solarpowered-main/archives/files/scripts/base/cosign.sh new file mode 100644 index 0000000..945ea51 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/base/cosign.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# find latest version of cosign +LATEST_VERSION=$(curl https://api.github.com/repos/sigstore/cosign/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ") + +# download & install cosign +rpm-ostree install https://github.com/sigstore/cosign/releases/latest/download/cosign-${LATEST_VERSION}-1.x86_64.rpm \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/base/disable-repos.sh b/docs/solarpowered-main/archives/files/scripts/base/disable-repos.sh new file mode 100644 index 0000000..813c4c5 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/base/disable-repos.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +sudo sed -i 's/enabled=1/enabled=0/' \ + /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:phracek:PyCharm.repo \ + /etc/yum.repos.d/google-chrome.repo \ + /etc/yum.repos.d/rpmfusion-nonfree-nvidia-driver.repo \ + /etc/yum.repos.d/rpmfusion-nonfree-steam.repo \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/base/negativo17-multimedia-repo.sh b/docs/solarpowered-main/archives/files/scripts/base/negativo17-multimedia-repo.sh new file mode 100644 index 0000000..854db42 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/base/negativo17-multimedia-repo.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Replace multimedia packages with ones from negativo17-multimedia-repo +echo 'Replacing multimedia packages to packages from negativo17-multimedia-repo' +rpm-ostree override replace --experimental --from repo='fedora-multimedia' \ + libheif \ + libva \ + libva-intel-media-driver \ + mesa-dri-drivers \ + mesa-filesystem \ + mesa-libEGL \ + mesa-libGL \ + mesa-libgbm \ + mesa-libglapi \ + mesa-libxatracker \ + mesa-va-drivers \ + mesa-vulkan-drivers + +rpm-ostree override replace --from repo='fedora' --experimental --remove=OpenCL-ICD-Loader ocl-icd || true \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/shared/block-ads.sh b/docs/solarpowered-main/archives/files/scripts/shared/block-ads.sh new file mode 100644 index 0000000..c38f02e --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/shared/block-ads.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euo pipefail + +wget https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn/hosts -O /usr/etc/hosts \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/shared/kora-icon-theme.sh b/docs/solarpowered-main/archives/files/scripts/shared/kora-icon-theme.sh new file mode 100644 index 0000000..e0282d1 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/shared/kora-icon-theme.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +set -oue pipefail + +GITHUB_URL="https://github.com/bikass/kora" + +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 [ -d "./$REPO_NAME/kora" ]; then + echo "Installing kora icon set..." + cp -r "./$REPO_NAME/kora" /usr/share/icons/ +fi +if [ -d "./$REPO_NAME/kora-light" ]; then + echo "Installing kora-light icon set..." + cp -r "./$REPO_NAME/kora-light" /usr/share/icons/ +fi +if [ -d "./$REPO_NAME/kora-light-panel" ]; then + echo "Installing kora-light-panel icon set..." + cp -r "./$REPO_NAME/kora-light-panel" /usr/share/icons/ +fi +if [ -d "./$REPO_NAME/kora-pgrey" ]; then + echo "Installing kora-pgrey icon set..." + cp -r "./$REPO_NAME/kora-pgrey" /usr/share/icons/ +fi + +echo "Folders copied. Cleaning up!" +rm -drf "$CLONE_DIR" +echo "Cloned repo deleted." + +echo "Script finished. Theme installation complete." \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/shared/luminance.sh b/docs/solarpowered-main/archives/files/scripts/shared/luminance.sh new file mode 100644 index 0000000..a3430af --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/shared/luminance.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# find latest version of luminance +LATEST_VERSION=$(curl https://api.github.com/repos/sidevesh/Luminance/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ") + +# download & install latest version of luminance +rpm-ostree install https://github.com/sidevesh/Luminance/releases/latest/download/luminance-${LATEST_VERSION}.rpm \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/shared/openrgb-udev-rules.sh b/docs/solarpowered-main/archives/files/scripts/shared/openrgb-udev-rules.sh new file mode 100644 index 0000000..1cb4033 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/shared/openrgb-udev-rules.sh @@ -0,0 +1,12 @@ +#!/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 + +# Download udev rules file +wget https://openrgb.org/releases/release_0.9/60-openrgb.rules + +# Move udev rules file to udev rules directory +mv 60-openrgb.rules /usr/lib/udev/rules.d \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/shared/windscribe.sh b/docs/solarpowered-main/archives/files/scripts/shared/windscribe.sh new file mode 100644 index 0000000..f85a472 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/shared/windscribe.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# find latest version of windscribe stable RPM +LATEST_VERSION=$(curl https://api.github.com/repos/Windscribe/Desktop-App/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ") + +# download & install latest version of windscribe stable RPM +rpm-ostree install https://github.com/Windscribe/Desktop-App/releases/latest/download/windscribe_${LATEST_VERSION}_x86_64_fedora.rpm \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/solarizzed/chromeos.sh b/docs/solarpowered-main/archives/files/scripts/solarizzed/chromeos.sh new file mode 100644 index 0000000..c0b36e2 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/solarizzed/chromeos.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -oue pipefail + +echo 'Preparing directory for cloning...' + +mkdir -p /tmp/clone/ChromeOS-kde +cd /tmp/clone/ChromeOS-kde +echo 'Directory created.' + +git clone https://github.com/vinceliuice/ChromeOS-kde.git +echo 'Repo cloned. Running install script...' + +ChromeOS-kde/install.sh +echo 'Install script finished. Removing cloned repo...' + +rm -r ChromeOS-kde/ +echo 'Cloned repo deleted.' \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/solarizzed/citron.sh b/docs/solarpowered-main/archives/files/scripts/solarizzed/citron.sh new file mode 100644 index 0000000..3f5b1bd --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/solarizzed/citron.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +GIT=https://github.com/pkgforge-dev/Citron-AppImage +APPDIR=/usr/libexec/appimages +GITOWNER=$(echo "$GIT" | sed -E 's#https://github.com/([^/]+)/([^/]+)(\.git)*#\1#') +GITREPO=$(echo "$GIT" | sed -E 's#https://github.com/([^/]+)/([^/]+)(\.git)*#\2#') +APPNAME=citron + +echo 'Downloading latest version of $APPNAME from $GITOWNER/$GITREPO'. + +URL="https://github.com/$GITOWNER/$GITREPO/releases/download/v$(curl https://api.github.com/repos/$GITOWNER/$GITREPO/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")/Citron-v$(curl https://api.github.com/repos/$GITOWNER/$GITREPO/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")-anylinux-x86_64_v3.AppImage" + +echo "Downloading $URL as $APPDIR/$APPNAME.AppImage" + +mkdir -p $APPDIR + +curl -L "$URL" -o "$APPDIR/$APPNAME.AppImage" + +echo "Download finished! Making $APPNAME executable..." +chmod +x $APPDIR/$APPNAME.AppImage + +echo "Creating symlink to /usr/bin/$APPNAME..." +ln -sf $APPDIR/$APPNAME.AppImage /usr/bin/$APPNAME + +echo "/usr/bin/$APPNAME symlink created!" diff --git a/docs/solarpowered-main/archives/files/scripts/solarizzed/layan.sh b/docs/solarpowered-main/archives/files/scripts/solarizzed/layan.sh new file mode 100644 index 0000000..ce271e9 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/solarizzed/layan.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -oue pipefail + +echo 'Preparing directory for cloning...' + +mkdir -p /tmp/clone +cd /tmp/clone/ +echo 'Directory created.' + +git clone https://github.com/vinceliuice/Layan-kde.git +echo 'Repo cloned. Running install script...' + +Layan-kde/install.sh +echo 'Install script finished. Removing cloned repo...' + +rm -r Layan-kde +echo 'Cloned repo deleted.' \ No newline at end of file diff --git a/docs/solarpowered-main/archives/files/scripts/solarizzed/plasma-overdose.sh b/docs/solarpowered-main/archives/files/scripts/solarizzed/plasma-overdose.sh new file mode 100644 index 0000000..82955cd --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/solarizzed/plasma-overdose.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +set -oue pipefail + +echo 'Preparing directory for cloning...' + +mkdir -p /tmp/clone/ +cd /tmp/clone/ +echo 'Directory created.' + +git clone https://github.com/Notify-ctrl/Plasma-Overdose.git +echo 'Repo cloned. Copying files...' + +# theme +cp -r ./Plasma-Overdose/aurorae/ /usr/share/aurorae/themes +# cursors +cp -r ./Plasma-Overdose/cursors /usr/share/icons/CursorsOverdose/ +# colorscheme +cp -r ./Plasma-Overdose/colorschemes/* /usr/share/color-schemes/ +# global theme +cp -r ./Plasma-Overdose/plasma /usr/share/ +echo 'Folders copied. Cleaning up!' + +rm -drf Plasma-Overdose/ +echo 'Cloned repo deleted.' diff --git a/docs/solarpowered-main/archives/files/scripts/solarizzed/ryujinx.sh b/docs/solarpowered-main/archives/files/scripts/solarizzed/ryujinx.sh new file mode 100644 index 0000000..3c33071 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/solarizzed/ryujinx.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +GIT=https://github.com/Ryubing/Ryujinx +APPDIR=/usr/libexec/appimages +GITOWNER=$(echo "$GIT" | sed -E 's#https://github.com/([^/]+)/([^/]+)(\.git)*#\1#') +GITREPO=$(echo "$GIT" | sed -E 's#https://github.com/([^/]+)/([^/]+)(\.git)*#\2#') +APPNAME=$GITREPO + +echo 'Downloading latest version of $APPNAME from $GITOWNER/$GITREPO'. + +URL="https://github.com/$GITOWNER/$GITREPO/releases/download/$(curl https://api.github.com/repos/$GITOWNER/$GITREPO/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")/ryujinx-$(curl https://api.github.com/repos/$GITOWNER/$GITREPO/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")-x64.AppImage" + +echo "Downloading $URL as $APPDIR/$APPNAME.AppImage" + +mkdir -p $APPDIR + +curl -L "$URL" -o "$APPDIR/$APPNAME.AppImage" + +echo "Download finished! Making $APPNAME executable..." +chmod +x $APPDIR/$APPNAME.AppImage + +echo "Creating symlink to /usr/bin/$APPNAME..." +ln -sf $APPDIR/$APPNAME.AppImage /usr/bin/$APPNAME + +echo "/usr/bin/$APPNAME symlink created!" diff --git a/docs/solarpowered-main/archives/files/scripts/solarizzed/steam-rom-manager.sh b/docs/solarpowered-main/archives/files/scripts/solarizzed/steam-rom-manager.sh new file mode 100644 index 0000000..614a355 --- /dev/null +++ b/docs/solarpowered-main/archives/files/scripts/solarizzed/steam-rom-manager.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +set -euo pipefail + +GIT=https://github.com/SteamGridDB/steam-rom-manager +APPDIR=/usr/libexec/appimages +GITOWNER=$(echo "$GIT" | sed -E 's#https://github.com/([^/]+)/([^/]+)(\.git)*#\1#') +GITREPO=$(echo "$GIT" | sed -E 's#https://github.com/([^/]+)/([^/]+)(\.git)*#\2#') +# APPNAME=$GITREPO +APPNAME=Steam-ROM-Manager # Manually entered because their release name != git repo name + +echo 'Downloading latest version of $APPNAME from $GITOWNER/$GITREPO'. + +URL="https://github.com/$GITOWNER/$GITREPO/releases/download/v$(curl https://api.github.com/repos/$GITOWNER/$GITREPO/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")/$APPNAME-$(curl https://api.github.com/repos/$GITOWNER/$GITREPO/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ").AppImage" + +echo "Downloading $URL as $APPDIR/$APPNAME.AppImage" + +mkdir -p $APPDIR + +curl -L "$URL" -o "$APPDIR/$APPNAME.AppImage" + +echo "Download finished! Making $APPNAME executable..." +chmod +x $APPDIR/$APPNAME.AppImage + +echo "Creating symlink to /usr/bin/$APPNAME..." +ln -sf $APPDIR/$APPNAME.AppImage /usr/bin/$APPNAME + +echo "/usr/bin/$APPNAME symlink created!" diff --git a/docs/solarpowered-main/archives/recipes/images/old-solarpowered-ex.yml b/docs/solarpowered-main/archives/recipes/images/old-solarpowered-ex.yml new file mode 100644 index 0000000..fadd44c --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/old-solarpowered-ex.yml @@ -0,0 +1,65 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: solarpowered-ex +# enter image description here +description: Custom image optimized for AMD PCs on top of Silverblue + +# defines base image // not to be changed +base-image: ghcr.io/ublue-os/silverblue-main +# base image is locked to latest // not to be changed +image-version: 41 + +modules: + # contains repo files for codium, configs and services that will be shared across images + - from-file: shared/files.yml + + # kernel selection. select ONE of the following from-file line + # or uncomment all three to opt to use stock fedora kernel + # - from-file: kernels/blu.yml + - from-file: kernels/cachy.yml + # - from-file: kernels/tkg.yml + + # removes firefox, unused fonts, undesired gnome packages & other utilities + - from-file: packages/core-discard.yml + + # installs necessities such as GUI apps, CLI apps, themes, & replaces mutter packages with patched version + - from-file: packages/core.yml + + # image-specific packages module + # systemd services related to image-specific packages + # may also be placed within this module for simplicity. + - from-file: packages/solarpowered-ex.yml + + # disables all repos except for fedora and fedora-updates + - from-file: shared/disable-repos.yml + + # installs icons packs & nautilus extensions + - from-file: shared/script.yml + + # installs shared fonts + - from-file: shared/fonts.yml + + # contains gnome extensions that will be shared across all images + # does not contain several other extensions that must be installed locally + - from-file: shared/gnome-extensions.yml + + # configures gschema for extensions, desktop, touchpad, and WM prefs + # - from-file: shared/gschema-overrides.yml + + # disables NetworkManager-online-service, flatpak update services, + # and enables topgrade updater + - from-file: shared/systemd.yml + + # image-specific files module + # copies files into / + - type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately. + # source entry should be the same name as the image name. + - source: solarpowered-ex # image name, or folder as named under files/ + destination: / + + - type: signing \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/images/old-solarpowered.yml b/docs/solarpowered-main/archives/recipes/images/old-solarpowered.yml new file mode 100644 index 0000000..9355ed4 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/old-solarpowered.yml @@ -0,0 +1,65 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: solarpowered +# enter image description here +description: Custom image optimized for AMD PCs on top of Silverblue + +# defines base image // not to be changed +base-image: ghcr.io/ublue-os/silverblue-main +# base image is locked to latest // not to be changed +image-version: 41 + +modules: + # contains repo files for codium, configs and services that will be shared across images + - from-file: shared/files.yml + + # kernel selection. select ONE of the following from-file line + # or uncomment all three to opt to use stock fedora kernel + - from-file: kernels/blu.yml + # - from-file: kernels/cachy.yml + # - from-file: kernels/tkg.yml + + # removes firefox, unused fonts, undesired gnome packages & other utilities + - from-file: packages/core-discard.yml + + # installs necessities such as GUI apps, CLI apps, themes, & replaces mutter packages with patched version + - from-file: packages/core.yml + + # image-specific packages module + # systemd services related to image-specific packages + # may also be placed within this module for simplicity. + - from-file: packages/solarpowered.yml + + # disables all repos except for fedora and fedora-updates + - from-file: shared/disable-repos.yml + + # installs icons packs & nautilus extensions + - from-file: shared/script.yml + + # installs shared fonts + - from-file: shared/fonts.yml + + # contains gnome extensions that will be shared across all images + # does not contain several other extensions that must be installed locally + - from-file: shared/gnome-extensions.yml + + # configures gschema for extensions, desktop, touchpad, and WM prefs + # - from-file: shared/gschema-overrides.yml + + # disables NetworkManager-online-service, flatpak update services, + # and enables topgrade updater + - from-file: shared/systemd.yml + + # image-specific files module + # copies files into / + - type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately. + # source entry should be the same name as the image name. + - source: solarpowered # image name, or folder as named under files/ + destination: / + + - type: signing \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/images/solarizzed-gnome.yml b/docs/solarpowered-main/archives/recipes/images/solarizzed-gnome.yml new file mode 100644 index 0000000..9c730c8 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarizzed-gnome.yml @@ -0,0 +1,81 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +name: solarizzed-gnome +description: Based on bazzite-deck-gnome + +base-image: ghcr.io/ublue-os/bazzite-deck-gnome +image-version: stable + +modules: + - type: files + files: + - source: shared/usr + destination: /usr + + - type: dnf + repos: + cleanup: true + files: + - https://raw.githubusercontent.com/terrapkg/subatomic-repos/main/terra.repo + copr: + - tigro/better_fonts + - dusansimic/themes + - sneexy/zen-browser + - ilyaz/LACT + optfix: + - zen + install: + install-weak-deps: false + packages: + # codium + - codium + # prettifying packages + - deepin-sound-theme + - fontconfig-font-replacements + - go-task + - morewaita-icon-theme + - nautilus-extensions + - nautilus-python + - oxygen-sounds + - pop-sound-theme + - rclone + - rclone-browser + - yaru-sound-theme + # misc + - lact + - python3-pyclip + - zen-browser + remove: + packages: + - gnome-tweaks + + - type: systemd + system: + enabled: + - lactd.service + + - type: default-flatpaks + configurations: + - notify: false + scope: system + install: + - page.tesk.Refine + + # extensions + - type: gnome-extensions + install: + - Alphabetical App Grid + - 5425 # Battery time + - Bluetooth Battery Meter + - Night Theme Switcher + - 841 # Freon + - Quick Settings Tweaks + # installs themes & icons + - from-file: shared/script.yml + # installs luminance & windscribe + - from-file: shared/rpms.yml + # installs shared fonts + - from-file: shared/fonts.yml + + - type: signing diff --git a/docs/solarpowered-main/archives/recipes/images/solarizzed.yml b/docs/solarpowered-main/archives/recipes/images/solarizzed.yml new file mode 100644 index 0000000..49a9c08 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarizzed.yml @@ -0,0 +1,64 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +name: solarizzed +description: Based on bazzite-deck + +base-image: ghcr.io/ublue-os/bazzite-deck +image-version: stable + +modules: + # contains repo files for codium + - type: files + files: + - source: shared/etc/yum.repos.d + destination: /etc/yum.repos.d + - source: shared/usr + destination: /usr + + - type: rpm-ostree + repos: + # better-fonts repo for fontconfig-font-replacements + - https://copr.fedorainfracloud.org/coprs/hyperreal/better_fonts/repo/fedora-%OS_VERSION%/hyperreal-better_fonts-fedora-%OS_VERSION%.repo + # Koi + - https://copr.fedorainfracloud.org/coprs/birkch/Koi/repo/fedora-%OS_VERSION%/birkch-Koi-fedora-%OS_VERSION%.repo + # zen browser + - https://copr.fedorainfracloud.org/coprs/sneexy/zen-browser/repo/fedora-%OS_VERSION%/sneexy-zen-browser-fedora-%OS_VERSION%.repo + optfix: + - windscribe + - zen + install: + # codium + - codium + # prettifying packages + - adw-gtk3-theme + - deepin-sound-theme + - fontconfig-font-replacements + - Koi + - kvantum + - oxygen-sounds + - pop-sound-theme + - rclone + - rclone-browser + - yaru-sound-theme + # misc + - python3-pyclip + - zen-browser + # installs themes & icons + - type: script + scripts: + - solarizzed/chromeos.sh + - solarizzed/layan.sh + - shared/tela-icon-theme.sh + - shared/qogir-icon-theme.sh + - shared/kora-icon-theme.sh + # citron appimage + /usr/bin link + - solarizzed/citron.sh + snippets: + # auto-fetch & install latest version of windscribe + - 'rpm-ostree install https://github.com/Windscribe/Desktop-App/releases/latest/download/windscribe_$(curl https://api.github.com/repos/Windscribe/Desktop-App/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")_x86_64_fedora.rpm' + + # installs shared fonts + - from-file: shared/fonts.yml + + - type: signing \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/images/solarpowered-bootc.yml b/docs/solarpowered-main/archives/recipes/images/solarpowered-bootc.yml new file mode 100644 index 0000000..bbbdd59 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarpowered-bootc.yml @@ -0,0 +1,27 @@ +name: solarpowered-bootc +description: Lenovo T480s image based on Fedora's bootc image. + +base-image: quay.io/fedora/fedora-bootc +image-version: 41 + +modules: + - from-file: shared/files.yml + + - from-file: base/base-bootc.yml + + - from-file: kernels/blu.yml + + - from-file: shared/fonts.yml + + - from-file: shared/gnome-extensions.yml + + - from-file: shared/script.yml + + - from-file: shared/systemd.yml + + - type: files + files: + - source: solarpowered + destination: / + + - type: signing \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/images/solarpowered-ex-bootc.yml b/docs/solarpowered-main/archives/recipes/images/solarpowered-ex-bootc.yml new file mode 100644 index 0000000..c00ad13 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarpowered-ex-bootc.yml @@ -0,0 +1,29 @@ +name: solarpowered-ex-bootc +description: Image optimized for AMD PC, based on Fedora's bootc image. + +base-image: quay.io/fedora/fedora-bootc +image-version: 41 + +modules: + - from-file: shared/files.yml + + - from-file: base/base-bootc.yml + + - from-file: kernels/tkg.yml + + - from-file: packages/packages-ex.yml + + - from-file: shared/fonts.yml + + - from-file: shared/gnome-extensions.yml + + - from-file: shared/script.yml + + - from-file: shared/systemd.yml + + - type: files + files: + - source: solarpowered-ex + destination: / + + - type: signing \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/images/solarpowered-ex-rawhide.yml b/docs/solarpowered-main/archives/recipes/images/solarpowered-ex-rawhide.yml new file mode 100644 index 0000000..5f7b3b7 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarpowered-ex-rawhide.yml @@ -0,0 +1,240 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: autosolarpowered-ex-rawhide +# enter image description here +description: Custom image for AMD machines, based on Vanilla Silverblue + +# defines base image +# --- +base-image: quay.io/fedora-ostree-desktops/silverblue +# defines image major version +# --- +image-version: rawhide + +modules: +- type: files + files: + - source: shared + destination: / + +- type: bling + install: + # rpmfusion instead of negativo17 for rawhide + - rpmfusion + +- type: script + scripts: + - shared/nautilus-copy-path.sh + - shared/tela-icon-theme.sh + - shared/qogir-icon-theme.sh + +- type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/zhangyuannie/butter/repo/fedora-rawhide/zhangyuannie-butter-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/tigro/better_fonts/repo/fedora-rawhide/tigro-better_fonts-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/dusansimic/themes/repo/fedora-rawhide/dusansimic-themes-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/shdwchn10/AllTheTools/repo/fedora-rawhide/shdwchn10-AllTheTools-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/sneexy/zen-browser/repo/fedora-rawhide/sneexy-zen-browser-fedora-rawhide.repo + optfix: + - zen + install: + - alsa-firmware + - ffmpeg + - ffmpeg-libs + - ffmpegthumbnailer + - fontconfig-font-replacements + - gnome-epub-thumbnailer + - heif-pixbuf-loader + - intel-media-driver + - libcamera + - libcamera-gstreamer + - libcamera-ipa + - libcamera-tools + - libva-utils + - pipewire-plugin-libcamera + - pipewire-plugin-vulkan + - pulseaudio-utils + - uxplay + - vulkan-headers + - apr + - apr-util + - bootc + - distrobox + - fastfetch + - fish + - fzf + - ifuse + - inxi + - just + - kernel-tools + - lm_sensors + - lzip + - net-tools + - nvme-cli + - nvtop + - openssl + - smartmontools + - squashfs-tools + - starship + - symlinks + - tcpdump + - topgrade + - traceroute + - wireguard-tools + - wl-clipboard + - zstd + - baobab + - butter + - codium + - firewall-config + - gnome-boxes + - gnome-tweaks + - nautilus-extensions + - nautilus-python + - ptyxis + - zen-browser + - flatpak-spawn + - fuse + - grub2-tools-extra + - hunspell + - hunspell-en + - ibus-mozc + - input-remapper + - libappindicator + - libratbag-ratbagd + - ocl-icd + - openrgb-udev-rules + - steam-devices + - xorg-x11-server-Xwayland + - adw-gtk3-theme + - fonts-tweak-tool + - morewaita-icon-theme + - deepin-sound-theme + - oxygen-sounds + - pop-sound-theme + - yaru-sound-theme + - android-tools + - python3-pyclip + - waydroid + # nonfree-codecs + - ffmpeg + - gstreamer1-plugin-libav + - gstreamer1-plugins-bad-free-extras + - gstreamer1-plugins-bad-freeworld + - gstreamer1-plugins-ugly + - gstreamer1-vaapi + - mesa-va-drivers-freeworld + remove: + - fedora-bookmarks + - fedora-chromium-config + - fedora-chromium-config-gnome + - fedora-flathub-remote + - fedora-repos-archive + - fedora-repos-ostree + - fedora-third-party + - fedora-workstation-repositories + - fedora-workstation-backgrounds + - gnome-classic-session + - gnome-shell-extension-apps-menu + - gnome-shell-extension-background-logo + - gnome-shell-extension-launch-new-instance + - gnome-shell-extension-places-menu + - gnome-shell-extension-window-list + - gnome-software + - gnome-software-rpm-ostree + - gnome-system-monitor + - gnome-tour + - totem-video-thumbnailer + - default-fonts-cjk-sans + - firefox + - firefox-langpacks + - OpenCL-ICD-Loader + - rygel + - yelp + # free codecs + - fdk-aac-free + - ffmpeg-free + - libavcodec-free + - libavdevice-free + - libavfilter-free + - libavformat-free + - libavutil-free + - libpostproc-free + - libswresample-free + - libswscale-free + - mesa-va-drivers + replace: + - from-repo: https://copr.fedorainfracloud.org/coprs/trixieua/mutter-patched/repo/fedora-rawhide/trixieua-mutter-patched-fedora-rawhide.repo + packages: + - gnome-shell + - mutter + - mutter-common + - xorg-x11-server-Xwayland +- type: rpm-ostree + optfix: + - windscribe +# installs luminance & windscribe directly from github releases +- from-file: shared/rpms.yml +# installs shared fonts +- from-file: shared/fonts.yml +# disables NetworkManager-online-service, flatpak update services, +# and enables topgrade updater +- from-file: shared/systemd.yml + +# kernel selection +- type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/bieszczaders/kernel-cachyos-addons/repo/fedora-rawhide/bieszczaders-kernel-cachyos-addons-fedora-rawhide.repo #cachy uksmd + - https://copr.fedorainfracloud.org/coprs/bieszczaders/kernel-cachyos/repo/fedora-rawhide/bieszczaders-kernel-cachyos-fedora-rawhide.repo #cachy kernel + install: + - libcap-ng + - libcap-ng-devel + - procps-ng + - procps-ng-devel + - uksmd + +- type: script + snippets: + - "echo 'Enable SElinux policy' && setsebool -P domain_kernel_load_modules on" + - "echo 'CachyOS kernel override' && rpm-ostree override remove kernel kernel-core kernel-modules kernel-modules-core kernel-modules-extra --install kernel-cachyos" + +- type: systemd + system: + enabled: + - uksmd.service + +# image-specific packages module +# base/core packages are all handled by solarpowered-raw +# and should not be added here. +# systemd services related to image-specific packages +# may also be placed within this module for simplicity +# --- +- type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/ilyaz/LACT/repo/fedora-rawhide/ilyaz-LACT-fedora-rawhide.repo #lact + install: + - lact-libadwaita + - nvtop + +- type: systemd + system: + enabled: + - lactd.service + +# disables all repos except for fedora and fedora-updates +- from-file: shared/disable-repos.yml + +# files module +# copies files into / +# --- +- type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately + # source entry should be the same name as the image name + - source: solarpowered-ex # image name, or folder as named under files/ + destination: / + +- type: signing \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/images/solarpowered-raw.yml b/docs/solarpowered-main/archives/recipes/images/solarpowered-raw.yml new file mode 100644 index 0000000..ed0f6d7 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarpowered-raw.yml @@ -0,0 +1,58 @@ +name: solarpowered-raw +description: Custom desktop image based on the official, vanilla Fedora Silverblue image + +base-image: quay.io/fedora-ostree-desktops/silverblue +image-version: 41 + +modules: + + # this image obsoletes the need to specify many modules in derivative images + # and will only require the following modules: + # 1. image-specific packages (& related systemd services), if any + # 2. image-specific kernel + + # contains repo files for codium, configs and services that will be shared across images + - from-file: shared/files.yml + + # installs RPMFusion and dconf updater + - type: bling + install: + - rpmfusion + # - dconf-update-service + + # installs negativo17-multimedia-repo & Cosign + # installed separately from the shared scripts module to ensure icons are installed properly + - type: script + scripts: + # - cosign.sh + - negativo17-multimedia-repo.sh + + # installs and removes packages, this will apply to all solarpowered images + # includes installation entries for audio & codecs, CLI utilities, GUI apps, + # other system tools, prettifying packages, printing drivers for EPSON, and waydroid + # also includes removal entries for undesired fedora, gnome, free multimedia packages, + # and native installation of firefox + # also replaces gnome-shell & mutter packages with patched version + - from-file: packages/packages-raw.yml + + # contains direct links for luminance & windscribe + - from-file: shared/shared-rpms.yml + + # installs icons packs & nautilus extensions + - from-file: shared/script.yml + + # installs shared fonts + - from-file: shared/fonts.yml + + # contains gnome extensions that will be shared across all images + # does not contain several other extensions that must be installed locally + - from-file: shared/gnome-extensions.yml + + # configures gschema for extensions, desktop, touchpad, and WM prefs + - from-file: shared/gschema-overrides.yml + + # disables NetworkManager-online-service, flatpak update services, + # and enables topgrade updater + - from-file: shared/systemd.yml + + - type: signing diff --git a/docs/solarpowered-main/archives/recipes/images/solarpowered-rawhide.yml b/docs/solarpowered-main/archives/recipes/images/solarpowered-rawhide.yml new file mode 100644 index 0000000..8343564 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/images/solarpowered-rawhide.yml @@ -0,0 +1,247 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: autosolarpowered-rawhide +# enter image description here +description: Custom image for Lenovo T480/s devices, based on Vanilla Silverblue + +# defines base image +# --- +base-image: quay.io/fedora-ostree-desktops/silverblue +# defines image major version +# --- +image-version: rawhide + +modules: +- type: files + files: + - source: shared + destination: / + +- type: bling + install: + # rpmfusion instead of negativo17 for rawhide + - rpmfusion + +- type: script + scripts: + - shared/nautilus-copy-path.sh + - shared/tela-icon-theme.sh + - shared/qogir-icon-theme.sh + +- type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/zhangyuannie/butter/repo/fedora-rawhide/zhangyuannie-butter-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/tigro/better_fonts/repo/fedora-rawhide/tigro-better_fonts-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/dusansimic/themes/repo/fedora-rawhide/dusansimic-themes-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/shdwchn10/AllTheTools/repo/fedora-rawhide/shdwchn10-AllTheTools-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/sneexy/zen-browser/repo/fedora-rawhide/sneexy-zen-browser-fedora-rawhide.repo + optfix: + - zen + install: + - alsa-firmware + - ffmpeg + - ffmpeg-libs + - ffmpegthumbnailer + - fontconfig-font-replacements + - gnome-epub-thumbnailer + - heif-pixbuf-loader + - intel-media-driver + - libcamera + - libcamera-gstreamer + - libcamera-ipa + - libcamera-tools + - libva-utils + - pipewire-plugin-libcamera + - pipewire-plugin-vulkan + - pulseaudio-utils + - uxplay + - vulkan-headers + - apr + - apr-util + - bootc + - distrobox + - fastfetch + - fish + - fzf + - ifuse + - inxi + - just + - kernel-tools + - lm_sensors + - lzip + - net-tools + - nvme-cli + - nvtop + - openssl + - smartmontools + - squashfs-tools + - starship + - symlinks + - tcpdump + - topgrade + - traceroute + - wireguard-tools + - wl-clipboard + - zstd + - baobab + - butter + - codium + - firewall-config + - gnome-boxes + - gnome-tweaks + - nautilus-extensions + - nautilus-python + - ptyxis + - zen-browser + - flatpak-spawn + - fuse + - grub2-tools-extra + - hunspell + - hunspell-en + - ibus-mozc + - input-remapper + - libappindicator + - libratbag-ratbagd + - ocl-icd + - openrgb-udev-rules + - steam-devices + - xorg-x11-server-Xwayland + - adw-gtk3-theme + - fonts-tweak-tool + - morewaita-icon-theme + - deepin-sound-theme + - oxygen-sounds + - pop-sound-theme + - yaru-sound-theme + - android-tools + - python3-pyclip + - waydroid + # nonfree-codecs + - ffmpeg + - gstreamer1-plugin-libav + - gstreamer1-plugins-bad-free-extras + - gstreamer1-plugins-bad-freeworld + - gstreamer1-plugins-ugly + - gstreamer1-vaapi + - mesa-va-drivers-freeworld + remove: + - fedora-bookmarks + - fedora-chromium-config + - fedora-chromium-config-gnome + - fedora-flathub-remote + - fedora-repos-archive + - fedora-repos-ostree + - fedora-third-party + - fedora-workstation-repositories + - fedora-workstation-backgrounds + - gnome-classic-session + - gnome-shell-extension-apps-menu + - gnome-shell-extension-background-logo + - gnome-shell-extension-launch-new-instance + - gnome-shell-extension-places-menu + - gnome-shell-extension-window-list + - gnome-software + - gnome-software-rpm-ostree + - gnome-system-monitor + - gnome-tour + - totem-video-thumbnailer + - default-fonts-cjk-sans + - firefox + - firefox-langpacks + - OpenCL-ICD-Loader + - rygel + - yelp + # free codecs + - fdk-aac-free + - ffmpeg-free + - libavcodec-free + - libavdevice-free + - libavfilter-free + - libavformat-free + - libavutil-free + - libpostproc-free + - libswresample-free + - libswscale-free + - mesa-va-drivers + replace: + - from-repo: https://copr.fedorainfracloud.org/coprs/trixieua/mutter-patched/repo/fedora-rawhide/trixieua-mutter-patched-fedora-rawhide.repo + packages: + - gnome-shell + - mutter + - mutter-common + - xorg-x11-server-Xwayland +- type: rpm-ostree + optfix: + - windscribe +# installs luminance & windscribe directly from github releases +- from-file: shared/rpms.yml +# installs shared fonts +- from-file: shared/fonts.yml +# disables NetworkManager-online-service, flatpak update services, +# and enables topgrade updater +- from-file: shared/systemd.yml + +# kernel selection // blue doesn't have a successful build for rawhide +# - type: rpm-ostree + # replace: + # - from-repo: https://copr.fedorainfracloud.org/coprs/sentry/kernel-blu/repo/fedora-rawhide/sentry-kernel-blu-fedora-rawhide.repo + # packages: + # - kernel + # - kernel-core + # - kernel-headers + # - kernel-modules + # - kernel-modules-core + # - kernel-modules-extra + +# image-specific packages module +# base/core packages are all handled by solarpowered-raw +# and should not be added here. +# systemd services related to image-specific packages +# may also be placed within this module for simplicity +# --- +- type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/abn/throttled/repo/fedora-rawhide/abn-throttled-fedora-rawhide.repo + - https://copr.fedorainfracloud.org/coprs/sneexy/python-validity/repo/fedora-rawhide/sneexy-python-validity-fedora-rawhide.repo + install: + - igt-gpu-tools + - fprintd-clients + - fprintd-clients-pam + - open-fprintd + - python3-validity + - tlp + - tlp-rdw + - throttled + - zcfan + remove: + - fprintd + - fprintd-pam + - thermald + - tuned-ppd + - tuned + +- type: systemd + system: + enabled: + - tlp.service + masked: + - systemd-rfkill.service + - systemd-rfkill.socket + +# disables all repos except for fedora and fedora-updates +- from-file: shared/disable-repos.yml + +# files module +# copies files into / +# --- +- type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately + # source entry should be the same name as the image name + - source: solarpowered # image name, or folder as named under files/ + destination: / + +- type: signing diff --git a/docs/solarpowered-main/archives/recipes/packages/core-discard.yml b/docs/solarpowered-main/archives/recipes/packages/core-discard.yml new file mode 100644 index 0000000..9477586 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/packages/core-discard.yml @@ -0,0 +1,24 @@ +modules: + - type: rpm-ostree + remove: + - firefox + - firefox-langpacks + - google-noto-sans-balinese-fonts + - google-noto-sans-javanese-fonts + - google-noto-sans-sundanese-fonts + - htop + - rygel + - ublue-os-update-services + #unnecessary gnomies + - gnome-software + - gnome-system-monitor + - gnome-tour + - yelp + #fedora default gnome extensions + - gnome-shell-extension-apps-menu + - gnome-shell-extension-background-logo + - gnome-shell-extension-launch-new-instance + - gnome-shell-extension-places-menu + - gnome-shell-extension-window-list + #gnome xorg + - gnome-classic-session \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/packages/core.yml b/docs/solarpowered-main/archives/recipes/packages/core.yml new file mode 100644 index 0000000..8771323 --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/packages/core.yml @@ -0,0 +1,64 @@ +modules: + - type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/hyperreal/better_fonts/repo/fedora-%OS_VERSION%/hyperreal-better_fonts-fedora-%OS_VERSION%.repo #better fonts + - https://copr.fedorainfracloud.org/coprs/zhangyuannie/butter/repo/fedora-%OS_VERSION%/zhangyuannie-butter-fedora-%OS_VERSION%.repo #butter + - https://copr.fedorainfracloud.org/coprs/dusansimic/themes/repo/fedora-%OS_VERSION%/dusansimic-themes-fedora-%OS_VERSION%.repo #morewaita + - https://copr.fedorainfracloud.org/coprs/shdwchn10/AllTheTools/repo/fedora-%OS_VERSION%/shdwchn10-AllTheTools-fedora-%OS_VERSION%.repo #starship & topgrade + - https://copr.fedorainfracloud.org/coprs/sneexy/zen-browser/repo/fedora-%OS_VERSION%/sneexy-zen-browser-fedora-%OS_VERSION%.repo #zen + optfix: + - windscribe + - zen + install: + - baobab + - butter + - codium + - epson-inkjet-printer-escpr + - epson-inkjet-printer-escpr2 + - fish + - firewall-config + - fontconfig-font-replacements + - gnome-boxes + - hunspell + - hunspell-en + - ibus-mozc + - ifuse + - input-remapper + - inxi + - lm_sensors + - libappindicator + - ptyxis + - pulseaudio-utils + - rsms-inter-fonts + - starship + - steam-devices + - topgrade + - uxplay + - wl-clipboard + - xorg-x11-server-Xwayland + - zen-browser + - openssl + - nautilus-python + - nautilus-extensions + - https://github.com/sidevesh/Luminance/releases/download/1.1.0/luminance-1.1.0.rpm + # extra niceties + - deepin-sound-theme + - fastfetch + - fonts-tweak-tool + - morewaita-icon-theme + - oxygen-sounds + - pop-sound-theme + - yaru-sound-theme + # waydroid + - android-tools + - lzip + - waydroid + # windscribe + - https://github.com/Windscribe/Desktop-App/releases/download/v2.14.4/windscribe_2.14.4_guinea_pig_x86_64_fedora.rpm + replace: + - from-repo: https://copr.fedorainfracloud.org/coprs/trixieua/mutter-patched/repo/fedora-%OS_VERSION%/trixieua-mutter-patched-fedora-%OS_VERSION%.repo + packages: + - gnome-shell + - mutter + - mutter-common + - xorg-x11-server-Xwayland \ No newline at end of file diff --git a/docs/solarpowered-main/archives/recipes/packages/packages-bootc.yml b/docs/solarpowered-main/archives/recipes/packages/packages-bootc.yml new file mode 100644 index 0000000..d8eb0da --- /dev/null +++ b/docs/solarpowered-main/archives/recipes/packages/packages-bootc.yml @@ -0,0 +1,204 @@ +modules: + - type: bling + install: + - rpmfusion + + - type: rpm-ostree + repos: + - https://copr.fedorainfracloud.org/coprs/zhangyuannie/butter/repo/fedora-%OS_VERSION%/zhangyuannie-butter-fedora-%OS_VERSION%.repo #butter + - https://copr.fedorainfracloud.org/coprs/dusansimic/themes/repo/fedora-%OS_VERSION%/dusansimic-themes-fedora-%OS_VERSION%.repo #morewaita + - https://copr.fedorainfracloud.org/coprs/ilyaz/LACT/repo/fedora-%OS_VERSION%/ilyaz-LACT-fedora-%OS_VERSION%.repo #lact + - https://copr.fedorainfracloud.org/coprs/shdwchn10/AllTheTools/repo/fedora-%OS_VERSION%/shdwchn10-AllTheTools-fedora-%OS_VERSION%.repo #starship & topgrade + - https://copr.fedorainfracloud.org/coprs/ublue-os/staging/repo/fedora-%OS_VERSION%/ublue-os-staging-fedora-%OS_VERSION%.repo # ublue-os staging + - https://copr.fedorainfracloud.org/coprs/sneexy/zen-browser/repo/fedora-%OS_VERSION%/sneexy-zen-browser-fedora-%OS_VERSION%.repo #zen browser + optfix: + - windscribe + - zen + install: + - alsa-ucm + - alsa-utils + - android-udev-rules + - anthy-unicode + - apr + - apr-util + - audit + - audit-rules + - avahi-gobject + - avahi-tools + - baobab + - bluez-cups + - buildah + - cairo + - cldr-emoji-annotation + - cldr-emoji-annotation-dtd + - cups + - cups-filters + - dbus-glib + - dconf + - default-fonts-cjk-mono + - default-fonts-cjk-serif + - default-fonts-core-emoji + - default-fonts-core-math + - default-fonts-core-mono + - default-fonts-core-serif + - default-fonts-other-mono + - default-fonts-other-sans + - default-fonts-other-serif + - desktop-backgrounds-gnome + - dhcp-client + - dhcp-common + - distribution-gpg-keys + - djvulibre-libs + - dnf5-plugins + - dotconf + - firewall-config + - flatpak + - flatpak-spawn + - fprintd-pam + - fuse + - fuse-common + - fuse-libs + - fuse-overlayfs + - fuse3 + - fuse3-libs + - fwupd + - gamemode + - gdm + - ghostscript + - git + - git-credential-libsecret + - glib-networking + - gnome-boxes + - gnome-bluetooth + - gnome-browser-connector + - gnome-control-center + - gnome-disk-utility + - gnome-epub-thumbnailer + - gnome-session-wayland-session + - gnome-shell + - gnome-user-share + - google-noto-color-emoji-fonts + - google-noto-sans-cjk-fonts + - gsettings-desktop-schemas + - gstreamer1-plugin-libav + - gstreamer1-plugin-openh264 + - gstreamer1-plugins-bad-free + - gstreamer1-plugins-good + - gstreamer1-plugins-ugly-free + - gutenprint + - gvfs-afc + - gvfs-afp + - gvfs-archive + - gvfs-client + - gvfs-fuse + - gvfs-goa + - gvfs-gphoto2 + - gvfs-mtp + - gvfs-nfs + - gvfs-smb + - ibus-anthy + - ibus-gtk4 + - ifuse + - iwlwifi-dvm-firmware + - iwlwifi-mvm-firmware + - kernel-modules-extra + - langpacks-core-en + - mesa-dri-drivers + - mesa-libEGL + - mesa-va-drivers + - mesa-vulkan-drivers + - ModemManager + - mutter + - nautilus + - nss-mdns + - NetworkManager + - NetworkManager-adsl + - NetworkManager-bluetooth + - NetworkManager-config-connectivity-fedora + - NetworkManager-openconnect-gnome + - NetworkManager-openvpn-gnome + - NetworkManager-ppp + - NetworkManager-pptp + - NetworkManager-pptp-gnome + - NetworkManager-ssh-gnome + - NetworkManager-vpnc-gnome + - NetworkManager-wifi + - NetworkManager-wwan + - PackageKit-command-not-found + - PackageKit-gstreamer-plugin + - PackageKit-gtk3-module + - pango + - pipewire + - pipewire-alsa + - pipewire-pulseaudio + - pipewire-utils + - plymouth + - polkit + - ptyxis + - python3-pyxdg + - rsms-inter-fonts + - samba-client + - sane-backends-drivers-scanners + - sushi + - system-config-printer-udev + - wireguard-tools + - wireplumber + - xdg-dbus-proxy + - xdg-desktop-portal + - xdg-desktop-portal-gnome + - xdg-desktop-portal-gtk + - xdg-user-dirs-gtk + - xdg-utils + # basic stuff + - adw-gtk3-theme + - alsa-firmware + - android-tools + - butter + - codium + - deepin-sound-theme + - distrobox + - epson-inkjet-printer-escpr + - epson-inkjet-printer-escpr2 + - fastfetch + - ffmpeg + - ffmpegthumbnailer + - fish + - gnome-tweaks + - heif-pixbuf-loader + - hunspell + - hunspell-en + - inxi + - just + - libappindicator + - libheif-freeworld + - libheif-tools + - libva-utils + - lm_sensors + - lzip + - morewaita-icon-theme + - nautilus-extensions + - nautilus-python + - openrgb + - openrgb-udev-rules + - openssl + - oxygen-sounds + - pop-sound-theme + - starship + - topgrade + - unzip + - uxplay + - waydroid + - wl-clipboard + - xorg-x11-server-Xwayland + - yaru-sound-theme + - zen-browser + - zstd + - https://github.com/sidevesh/Luminance/releases/download/1.1.0/luminance-1.1.0.rpm + - https://github.com/Windscribe/Desktop-App/releases/download/v2.13.8/windscribe_2.13.8_x86_64_fedora.rpm + replace: + - from-repo: https://copr.fedorainfracloud.org/coprs/trixieua/mutter-patched/repo/fedora-%OS_VERSION%/trixieua-mutter-patched-fedora-%OS_VERSION%.repo + packages: + - gnome-shell + - mutter + - mutter-common + - xorg-x11-server-Xwayland \ No newline at end of file diff --git a/docs/solarpowered-main/cosign.pub b/docs/solarpowered-main/cosign.pub new file mode 100644 index 0000000..cb40aca --- /dev/null +++ b/docs/solarpowered-main/cosign.pub @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnz+kko9HwCdM4RYio+lTmDzpzGkL +1GBz4Y92qGyn0eXUFwI7zxsO2u6C+Bs4FTn9bgmmyfrMjTrYYGgKJApq6Q== +-----END PUBLIC KEY----- diff --git a/docs/solarpowered-main/files/README.md b/docs/solarpowered-main/files/README.md new file mode 100644 index 0000000..b2b1983 --- /dev/null +++ b/docs/solarpowered-main/files/README.md @@ -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`. + diff --git a/docs/solarpowered-main/files/dnf/vscodium.repo b/docs/solarpowered-main/files/dnf/vscodium.repo new file mode 100644 index 0000000..23676e1 --- /dev/null +++ b/docs/solarpowered-main/files/dnf/vscodium.repo @@ -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 diff --git a/docs/solarpowered-main/files/gschema-overrides/README.md b/docs/solarpowered-main/files/gschema-overrides/README.md new file mode 100644 index 0000000..94d8fc1 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/README.md @@ -0,0 +1,3 @@ +# README.md + +This folder contains gschema-overrides files. \ No newline at end of file diff --git a/docs/solarpowered-main/files/gschema-overrides/zz00-desktop-app-folders-folders-waydroid.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz00-desktop-app-folders-folders-waydroid.gschema.override new file mode 100644 index 0000000..15bb3e5 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz00-desktop-app-folders-folders-waydroid.gschema.override @@ -0,0 +1,5 @@ +[org.gnome.desktop.app-folders.folders.Waydroid] +apps=['Waydroid.desktop'] +categories=['X-WayDroid-App'] +name='Waydroid' +translate=false \ No newline at end of file diff --git a/docs/solarpowered-main/files/gschema-overrides/zz01-org-gnome-shell-extensions.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz01-org-gnome-shell-extensions.gschema.override new file mode 100644 index 0000000..58903e7 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz01-org-gnome-shell-extensions.gschema.override @@ -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'] \ No newline at end of file diff --git a/docs/solarpowered-main/files/gschema-overrides/zz02-org-gnome-desktop-background.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz02-org-gnome-desktop-background.gschema.override new file mode 100644 index 0000000..8d4bcb5 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz02-org-gnome-desktop-background.gschema.override @@ -0,0 +1,5 @@ +[org.gnome.desktop.background] +color-shading-type='solid' +picture-options='zoom' +primary-color='#000000' +secondary-color='#000000' diff --git a/docs/solarpowered-main/files/gschema-overrides/zz03-org-gnome-desktop-interface.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz03-org-gnome-desktop-interface.gschema.override new file mode 100644 index 0000000..e4b3369 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz03-org-gnome-desktop-interface.gschema.override @@ -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' + diff --git a/docs/solarpowered-main/files/gschema-overrides/zz04-org-gnome-touchpad.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz04-org-gnome-touchpad.gschema.override new file mode 100644 index 0000000..0c17284 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz04-org-gnome-touchpad.gschema.override @@ -0,0 +1,3 @@ +[org.gnome.desktop.peripherals.touchpad] +tap-to-click=true +two-finger-scrolling-enabled=true \ No newline at end of file diff --git a/docs/solarpowered-main/files/gschema-overrides/zz05-org-gnome-desktop-wm-preferences.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz05-org-gnome-desktop-wm-preferences.gschema.override new file mode 100644 index 0000000..0afaf49 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz05-org-gnome-desktop-wm-preferences.gschema.override @@ -0,0 +1,3 @@ +[org.gnome.desktop.wm.preferences] +action-double-click-titlebar='toggle-maximize' +titlebar-uses-system-font=true \ No newline at end of file diff --git a/docs/solarpowered-main/files/gschema-overrides/zz06-org-gnome-mutter.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz06-org-gnome-mutter.gschema.override new file mode 100644 index 0000000..2e45fd8 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz06-org-gnome-mutter.gschema.override @@ -0,0 +1,3 @@ +[org.gnome.mutter] +center-new-windows=true +check-alive-timeout=30000 \ No newline at end of file diff --git a/docs/solarpowered-main/files/gschema-overrides/zz07-org-gnome-nautilus.gschema.override b/docs/solarpowered-main/files/gschema-overrides/zz07-org-gnome-nautilus.gschema.override new file mode 100644 index 0000000..c9c0258 --- /dev/null +++ b/docs/solarpowered-main/files/gschema-overrides/zz07-org-gnome-nautilus.gschema.override @@ -0,0 +1,4 @@ +[org.gnome.nautilus.preferences] +default-sort-order='type' +show-create-link=true +show-delete-permanently=true \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/README.md b/docs/solarpowered-main/files/scripts/README.md new file mode 100644 index 0000000..230b99d --- /dev/null +++ b/docs/solarpowered-main/files/scripts/README.md @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/example.sh b/docs/solarpowered-main/files/scripts/example.sh new file mode 100644 index 0000000..fdb2e04 --- /dev/null +++ b/docs/solarpowered-main/files/scripts/example.sh @@ -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' diff --git a/docs/solarpowered-main/files/scripts/kernels/kernel-bazzite.sh b/docs/solarpowered-main/files/scripts/kernels/kernel-bazzite.sh new file mode 100644 index 0000000..689595e --- /dev/null +++ b/docs/solarpowered-main/files/scripts/kernels/kernel-bazzite.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/kernels/kernel-blu.sh b/docs/solarpowered-main/files/scripts/kernels/kernel-blu.sh new file mode 100644 index 0000000..4b3153a --- /dev/null +++ b/docs/solarpowered-main/files/scripts/kernels/kernel-blu.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/kernels/kernel-cachy.sh b/docs/solarpowered-main/files/scripts/kernels/kernel-cachy.sh new file mode 100644 index 0000000..b9c1373 --- /dev/null +++ b/docs/solarpowered-main/files/scripts/kernels/kernel-cachy.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/kernels/kernel-fedora.sh b/docs/solarpowered-main/files/scripts/kernels/kernel-fedora.sh new file mode 100644 index 0000000..0bb9b65 --- /dev/null +++ b/docs/solarpowered-main/files/scripts/kernels/kernel-fedora.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/shared/adwaita-colors-icon-theme.sh b/docs/solarpowered-main/files/scripts/shared/adwaita-colors-icon-theme.sh new file mode 100644 index 0000000..de7afef --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/adwaita-colors-icon-theme.sh @@ -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.' diff --git a/docs/solarpowered-main/files/scripts/shared/android-tools.sh b/docs/solarpowered-main/files/scripts/shared/android-tools.sh new file mode 100644 index 0000000..528c17b --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/android-tools.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/shared/colloid-icon-theme.sh b/docs/solarpowered-main/files/scripts/shared/colloid-icon-theme.sh new file mode 100644 index 0000000..8b5088b --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/colloid-icon-theme.sh @@ -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." diff --git a/docs/solarpowered-main/files/scripts/shared/edid.sh b/docs/solarpowered-main/files/scripts/shared/edid.sh new file mode 100644 index 0000000..482dffb --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/edid.sh @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/shared/morewaita-icon-theme.sh b/docs/solarpowered-main/files/scripts/shared/morewaita-icon-theme.sh new file mode 100644 index 0000000..0fb92fd --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/morewaita-icon-theme.sh @@ -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.' \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/shared/nautilus-copy-path.sh b/docs/solarpowered-main/files/scripts/shared/nautilus-copy-path.sh new file mode 100644 index 0000000..14a7c71 --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/nautilus-copy-path.sh @@ -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.' \ No newline at end of file diff --git a/docs/solarpowered-main/files/scripts/shared/qogir-icon-theme.sh b/docs/solarpowered-main/files/scripts/shared/qogir-icon-theme.sh new file mode 100644 index 0000000..ee65a16 --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/qogir-icon-theme.sh @@ -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." diff --git a/docs/solarpowered-main/files/scripts/shared/tela-icon-theme.sh b/docs/solarpowered-main/files/scripts/shared/tela-icon-theme.sh new file mode 100644 index 0000000..bd37ca0 --- /dev/null +++ b/docs/solarpowered-main/files/scripts/shared/tela-icon-theme.sh @@ -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." diff --git a/docs/solarpowered-main/files/shared/etc/.gitkeep b/docs/solarpowered-main/files/shared/etc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/solarpowered-main/files/shared/etc/distrobox.ini b/docs/solarpowered-main/files/shared/etc/distrobox.ini new file mode 100644 index 0000000..2b27476 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/distrobox.ini @@ -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 diff --git a/docs/solarpowered-main/files/shared/etc/distrobox/distrobox.conf b/docs/solarpowered-main/files/shared/etc/distrobox/distrobox.conf new file mode 100644 index 0000000..cd300de --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/distrobox/distrobox.conf @@ -0,0 +1,4 @@ +container_always_pull="1" +container_generate_entry=1 +container_manager="podman" +non_interactive="1" \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/etc/rpm-ostreed.conf b/docs/solarpowered-main/files/shared/etc/rpm-ostreed.conf new file mode 100644 index 0000000..aa5106e --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/rpm-ostreed.conf @@ -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 diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/MangoHud/MangoHud.conf b/docs/solarpowered-main/files/shared/etc/skel/.config/MangoHud/MangoHud.conf new file mode 100644 index 0000000..fb4994c --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/MangoHud/MangoHud.conf @@ -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 + diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/mpv.conf b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/mpv.conf new file mode 100644 index 0000000..cbfb821 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/mpv.conf @@ -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 diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/SmartCopyPaste.lua b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/SmartCopyPaste.lua new file mode 100644 index 0000000..06459a6 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/SmartCopyPaste.lua @@ -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--------------------------------- diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/clipshot.lua b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/clipshot.lua new file mode 100644 index 0000000..2e2aaf5 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/clipshot.lua @@ -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')) diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/reload.lua b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/reload.lua new file mode 100644 index 0000000..8b9e355 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/celluloid/scripts/reload.lua @@ -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) diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/bat.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/bat.fish new file mode 100644 index 0000000..437fab5 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/bat.fish @@ -0,0 +1,5 @@ +if grep -q "Arch Linux" /etc/os-release +function bat --wraps=glow --description 'alias bat glow' + glow $argv +end +end diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/cat.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/cat.fish new file mode 100644 index 0000000..0350095 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/cat.fish @@ -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 diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/deployments.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/deployments.fish new file mode 100644 index 0000000..d14aa76 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/deployments.fish @@ -0,0 +1,3 @@ +function deployments + rpm-ostree status $argv +end diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/fish_greeting.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/fish_greeting.fish new file mode 100644 index 0000000..0331b1b --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/fish_greeting.fish @@ -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 diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/m4a.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/m4a.fish new file mode 100644 index 0000000..70cc783 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/m4a.fish @@ -0,0 +1,4 @@ +function m4a --description 'alias m4a yt-dlp -x --audio-format m4a' + yt-dlp -x --audio-format m4a $argv + +end diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/pin-deployment.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/pin-deployment.fish new file mode 100644 index 0000000..9c7f708 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/pin-deployment.fish @@ -0,0 +1,3 @@ +function pin-deployment + sudo ostree admin pin $argv +end \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/remove-deployment.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/remove-deployment.fish new file mode 100644 index 0000000..7acbb24 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/remove-deployment.fish @@ -0,0 +1,3 @@ +function remove-deployment + sudo ostree admin undeploy $argv +end diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/unpin-deployment.fish b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/unpin-deployment.fish new file mode 100644 index 0000000..27165ff --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/fish/functions/unpin-deployment.fish @@ -0,0 +1,3 @@ +function unpin-deployment + sudo ostree admin pin -u $argv +end diff --git a/docs/solarpowered-main/files/shared/etc/skel/.config/yt-dlp/config b/docs/solarpowered-main/files/shared/etc/skel/.config/yt-dlp/config new file mode 100644 index 0000000..bd70867 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.config/yt-dlp/config @@ -0,0 +1,5 @@ +-N 5 +--embed-thumbnail +--embed-metadata +--cookies-from-browser firefox +-o ~/Downloads/%(fulltitle)s.%(ext)s diff --git a/docs/solarpowered-main/files/shared/etc/skel/.var/app/org.chromium.Chromium/config/chromium-flags.conf b/docs/solarpowered-main/files/shared/etc/skel/.var/app/org.chromium.Chromium/config/chromium-flags.conf new file mode 100644 index 0000000..51b675b --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/skel/.var/app/org.chromium.Chromium/config/chromium-flags.conf @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/etc/topgrade.toml b/docs/solarpowered-main/files/shared/etc/topgrade.toml new file mode 100644 index 0000000..c3e7405 --- /dev/null +++ b/docs/solarpowered-main/files/shared/etc/topgrade.toml @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/usr/bin/append b/docs/solarpowered-main/files/shared/usr/bin/append new file mode 100755 index 0000000..a94e34e --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/bin/append @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +/usr/bin/just --justfile /usr/share/appends/00-master.just "${@}" \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/usr/bin/melonDS b/docs/solarpowered-main/files/shared/usr/bin/melonDS new file mode 100755 index 0000000..44c5483 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/bin/melonDS @@ -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 diff --git a/docs/solarpowered-main/files/shared/usr/bin/rechunker-group-fix b/docs/solarpowered-main/files/shared/usr/bin/rechunker-group-fix new file mode 100755 index 0000000..327a9a2 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/bin/rechunker-group-fix @@ -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}" diff --git a/docs/solarpowered-main/files/shared/usr/bin/ryujinx b/docs/solarpowered-main/files/shared/usr/bin/ryujinx new file mode 100755 index 0000000..4097e54 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/bin/ryujinx @@ -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 diff --git a/docs/solarpowered-main/files/shared/usr/bin/waydroid-session b/docs/solarpowered-main/files/shared/usr/bin/waydroid-session new file mode 100755 index 0000000..1df0b89 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/bin/waydroid-session @@ -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 diff --git a/docs/solarpowered-main/files/shared/usr/bin/zstar b/docs/solarpowered-main/files/shared/usr/bin/zstar new file mode 100755 index 0000000..f3ee2c0 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/bin/zstar @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/usr/lib/systemd/.gitkeep b/docs/solarpowered-main/files/shared/usr/lib/systemd/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/solarpowered-main/files/shared/usr/lib/systemd/system/rechunker-group-fix.service b/docs/solarpowered-main/files/shared/usr/lib/systemd/system/rechunker-group-fix.service new file mode 100644 index 0000000..c3ad494 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/lib/systemd/system/rechunker-group-fix.service @@ -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 diff --git a/docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.service b/docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.service new file mode 100644 index 0000000..4017265 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.service @@ -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 diff --git a/docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.timer b/docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.timer new file mode 100644 index 0000000..c0a2a5d --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/lib/systemd/user/topgrade.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Topgrade update service timer + +[Timer] +RandomizedDelaySec=5m +OnBootSec=2m +OnUnitActiveSec=12h +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/98-vial.rules b/docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/98-vial.rules new file mode 100644 index 0000000..6b5983d --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/98-vial.rules @@ -0,0 +1 @@ +KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{serial}=="*vial:f64c2b3c*", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl" diff --git a/docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/99-via.rules b/docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/99-via.rules new file mode 100644 index 0000000..75ab342 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/lib/udev/rules.d/99-via.rules @@ -0,0 +1 @@ +KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl" diff --git a/docs/solarpowered-main/files/shared/usr/libexec/waydroid-container-restart b/docs/solarpowered-main/files/shared/usr/libexec/waydroid-container-restart new file mode 100644 index 0000000..6f87e88 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/libexec/waydroid-container-restart @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sudo waydroid container restart \ No newline at end of file diff --git a/docs/solarpowered-main/files/shared/usr/share/.gitkeep b/docs/solarpowered-main/files/shared/usr/share/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/solarpowered-main/files/shared/usr/share/appends/00-master.just b/docs/solarpowered-main/files/shared/usr/share/appends/00-master.just new file mode 100644 index 0000000..fdbbfab --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/share/appends/00-master.just @@ -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" diff --git a/docs/solarpowered-main/files/shared/usr/share/appends/01-system.just b/docs/solarpowered-main/files/shared/usr/share/appends/01-system.just new file mode 100644 index 0000000..88829b6 --- /dev/null +++ b/docs/solarpowered-main/files/shared/usr/share/appends/01-system.just @@ -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 <jn;BLfxX93W zfXS*sqR>LuAwtKM;Q^l@1B2Wur-TI)EaV*w6s#B;G87pYq`bK /proc/acpi/wakeup" + +[Install] +WantedBy=multi-user.target diff --git a/docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/balanced/tuned.conf b/docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/balanced/tuned.conf new file mode 100644 index 0000000..712400f --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/balanced/tuned.conf @@ -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 \ No newline at end of file diff --git a/docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/powersave/tuned.conf b/docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/powersave/tuned.conf new file mode 100644 index 0000000..7ef94f0 --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered-ex/usr/lib/tuned/profiles/powersave/tuned.conf @@ -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 diff --git a/docs/solarpowered-main/files/solarpowered-ex/usr/share/.gitkeep b/docs/solarpowered-main/files/solarpowered-ex/usr/share/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/solarpowered-main/files/solarpowered-ex/usr/share/appends/99-solarpowered-ex.just b/docs/solarpowered-main/files/solarpowered-ex/usr/share/appends/99-solarpowered-ex.just new file mode 100644 index 0000000..9eb9ab1 --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered-ex/usr/share/appends/99-solarpowered-ex.just @@ -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!' diff --git a/docs/solarpowered-main/files/solarpowered/etc/throttled.conf b/docs/solarpowered-main/files/solarpowered/etc/throttled.conf new file mode 100644 index 0000000..af568dd --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/etc/throttled.conf @@ -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 diff --git a/docs/solarpowered-main/files/solarpowered/etc/tlp.conf b/docs/solarpowered-main/files/solarpowered/etc/tlp.conf new file mode 100644 index 0000000..eeac639 --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/etc/tlp.conf @@ -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 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 : 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: + +#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: + +#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: +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#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: + +#DEVICES_TO_ENABLE_ON_STARTUP="wifi" + +# Radio devices to enable on AC: bluetooth, nfc, wifi, wwan. +# Default: + +#DEVICES_TO_ENABLE_ON_AC="bluetooth nfc wifi wwan" + +# Radio devices to disable on battery: bluetooth, nfc, wifi, wwan. +# Default: + +#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: + +#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: + +# 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: + +# 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: (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="" diff --git a/docs/solarpowered-main/files/solarpowered/etc/zcfan.conf b/docs/solarpowered-main/files/solarpowered/etc/zcfan.conf new file mode 100644 index 0000000..3021270 --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/etc/zcfan.conf @@ -0,0 +1,4 @@ +max_temp 85 +med_temp 75 +low_temp 60 +temp_hysteresis 10 diff --git a/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-FREETYPE_PROPERTIES.conf b/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-FREETYPE_PROPERTIES.conf new file mode 100644 index 0000000..01d776b --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-FREETYPE_PROPERTIES.conf @@ -0,0 +1,2 @@ +# Stem Darkening +FREETYPE_PROPERTIES="cff:no-stem-darkening=0 autofitter:no-stem-darkening=0" diff --git a/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-GSK_RENDERER.conf b/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-GSK_RENDERER.conf new file mode 100644 index 0000000..06b7e18 --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-GSK_RENDERER.conf @@ -0,0 +1 @@ +GSK_RENDERER=vulkan \ No newline at end of file diff --git a/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-LIBVA.conf b/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-LIBVA.conf new file mode 100644 index 0000000..7a17e98 --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/usr/lib/environment.d/80-LIBVA.conf @@ -0,0 +1,4 @@ +# Use non-free iHD drivers + +LIBVA_DRIVERS_PATH=/usr/lib64/dri-nonfree +LIBVA_DRIVER_NAME=iHD diff --git a/docs/solarpowered-main/files/solarpowered/usr/lib/systemd/system/zcfan.service b/docs/solarpowered-main/files/solarpowered/usr/lib/systemd/system/zcfan.service new file mode 100644 index 0000000..80ca69b --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/usr/lib/systemd/system/zcfan.service @@ -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 diff --git a/docs/solarpowered-main/files/solarpowered/usr/share/.gitkeep b/docs/solarpowered-main/files/solarpowered/usr/share/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/solarpowered-main/files/solarpowered/usr/share/appends/99-solarpowered.just b/docs/solarpowered-main/files/solarpowered/usr/share/appends/99-solarpowered.just new file mode 100644 index 0000000..9b1de4e --- /dev/null +++ b/docs/solarpowered-main/files/solarpowered/usr/share/appends/99-solarpowered.just @@ -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!' diff --git a/docs/solarpowered-main/recipes/image-template.yml b/docs/solarpowered-main/recipes/image-template.yml new file mode 100644 index 0000000..e00b438 --- /dev/null +++ b/docs/solarpowered-main/recipes/image-template.yml @@ -0,0 +1,63 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: myimage +# enter image description here +description: mydesc + +# this template is for use with +# shared/base.yml + +# defines base image +# --- +base-image: quay.io/fedora-ostree-desktops/silverblue +# base-image: quay.io/fedora/fedora-silverblue # needs Cosign.sh + +# defines image major version +# --- +image-version: 41 + +modules: + # this includes everything except for image-specific modifications + # --- + - from-file: shared/base.yml + + # installs Cosign + # --- + # - type: script + # scripts: + # not needed when using quay.io/fedora-ostree-desktops/silverblue + # - cosign.sh + + # kernel selection + # select ONE of the following from-file line + # or leave all three uncommented to use stock fedora kernel + # --- + # - from-file: kernels/blu.yml + # - from-file: kernels/cachy.yml + # - from-file: kernels/tkg.yml + + # image-specific packages module + # base/core packages are all handled by solarpowered-raw + # and should not be added here. + # systemd services related to image-specific packages + # may also be placed within this module for simplicity + # --- + - from-file: packages/myimage.yml + + # disables all repos except for fedora and fedora-updates + - from-file: disable-repos.yml + + # files module + # copies files into / + # --- + - type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately + # source entry should be the same name as the image name + - source: myimage # image name, or folder as named under files/ + destination: / + + - type: signing diff --git a/docs/solarpowered-main/recipes/images/.gitignore b/docs/solarpowered-main/recipes/images/.gitignore new file mode 100644 index 0000000..fbb9592 --- /dev/null +++ b/docs/solarpowered-main/recipes/images/.gitignore @@ -0,0 +1,3 @@ +*tmp.* +tmp.* +*.tmp \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/images/README.md b/docs/solarpowered-main/recipes/images/README.md new file mode 100644 index 0000000..a7c8ec5 --- /dev/null +++ b/docs/solarpowered-main/recipes/images/README.md @@ -0,0 +1,15 @@ +# README.md + +This folder contains recipes for all images that are built on this repo. + +## autosolarpowered(-ex) + +Images built on top of vanilla Fedora Silverblue images. + +## solarpowered(-ex) + +Images built on top of UBlue's `silverblue-main`. + +## solarizzed + +Image built on top of Bazzite's `bazzite-deck`. \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/images/bootcli.yml b/docs/solarpowered-main/recipes/images/bootcli.yml new file mode 100644 index 0000000..eb5ae15 --- /dev/null +++ b/docs/solarpowered-main/recipes/images/bootcli.yml @@ -0,0 +1,66 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: bootcli +# enter image description here +description: bootcli image for in-house testing + +# this template is for use with +# shared/base.yml + +# defines base image +# --- +# base-image: quay.io/fedora/fedora-bootc # needs Cosign snippet +base-image: quay.io/fedora-ostree-desktops/xfce-atomic + +# definves image major version +# --- +image-version: 41 + +modules: + - from-file: shared/files.yml + + - type: bling + install: + - negativo17 + + - type: rpm-ostree + repos: + # starship & topgrade + - https://copr.fedorainfracloud.org/coprs/shdwchn10/AllTheTools/repo/fedora-%OS_VERSION%/shdwchn10-AllTheTools-fedora-%OS_VERSION%.repo + # ublue-os staging + - https://copr.fedorainfracloud.org/coprs/ublue-os/staging/repo/fedora-%OS_VERSION%/ublue-os-staging-fedora-%OS_VERSION%.repo + install: + # CLI utilities + - fish + - fzf + - git + - gum + - just + - kitty + - lm_sensors + - lzip + - perl-Clipboard + - squashfs-tools + - spice-webdavd + - starship + - symlinks + - tcpdump + - topgrade + - traceroute + - wget + - wireguard-tools + - wl-clipboard + - xdg-desktop-portal + - xdg-desktop-portal-gtk + - zstd + + - type: script + snippets: + - 'rpm-ostree override replace --experimental --from repo=fedora-multimedia libheif libva libva-intel-media-driver mesa-dri-drivers mesa-filesystem mesa-libEGL mesa-libGL mesa-libgbm mesa-libglapi mesa-libxatracker mesa-va-drivers mesa-vulkan-drivers' + - 'rpm-ostree override replace --from repo=fedora --experimental --remove=OpenCL-ICD-Loader ocl-icd || true' + # removes all repos except for fedora.repo and fedora-updates.repo + - 'find /etc/yum.repos.d/ -type f -not \( -name fedora.repo -o -name fedora-updates.repo \) -delete' + + - type: signing diff --git a/docs/solarpowered-main/recipes/images/solarpowered-ex.yml b/docs/solarpowered-main/recipes/images/solarpowered-ex.yml new file mode 100644 index 0000000..e8e8c27 --- /dev/null +++ b/docs/solarpowered-main/recipes/images/solarpowered-ex.yml @@ -0,0 +1,69 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: solarpowered-ex +# enter image description here +description: Custom image for AMD machines, based on Vanilla Silverblue + +# this template is for use with +# shared/base.yml + +# defines base image +# --- +base-image: quay.io/fedora/fedora-silverblue + +# defines image major version +# --- +image-version: 43 + +modules: + # this includes everything except for image-specific modifications + # --- + - from-file: shared/base.yml + + # image-specific packages module + # base/core packages are all handled by solarpowered-raw + # and should not be added here. + # systemd services related to image-specific packages + # may also be placed within this module for simplicity + # --- + - from-file: packages/solarpowered-ex.yml + + # Plymouth + - from-file: shared/plymouth.yml + + # files module + # copies files into / + # --- + - type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately + # source entry should be the same name as the image name + - source: solarpowered-ex # image name, or folder as named under files/ + destination: / + + - type: script + scripts: + - shared/edid.sh + + # kernel selection + # select ONE of the following from-file line + # --- + # - from-file: kernels/bazzite.yml + # - from-file: kernels/blu.yml + - from-file: kernels/cachy.yml + # - from-file: kernels/fedora.yml + + - type: os-release + properties: + PRETTY_NAME: Fedora Linux 43 (Silverblue) + VERSION_CODENAME: solarpowered-ex + DEFAULT_HOSTNAME: spwd-ex + HOME_URL: https://github.com/askpng/solarpowered + DOCUMENTATION_URL: https://github.com/askpng/solarpowered + SUPPORT_URL: https://github.com/askpng/solarpowered/issues + BUG_REPORT_URL: https://github.com/askpng/solarpowered/issues + + - type: signing diff --git a/docs/solarpowered-main/recipes/images/solarpowered.yml b/docs/solarpowered-main/recipes/images/solarpowered.yml new file mode 100644 index 0000000..c3b8314 --- /dev/null +++ b/docs/solarpowered-main/recipes/images/solarpowered.yml @@ -0,0 +1,65 @@ +--- +# yaml-language-server: $schema=https://schema.blue-build.org/recipe-v1.json + +# enter image name here +name: solarpowered +# enter image description here +description: Custom image for Lenovo T480/s devices, based on Vanilla Silverblue + +# this template is for use with +# shared/base.yml + +# defines base image +# --- +base-image: quay.io/fedora/fedora-silverblue + +# defines image major version +# --- +image-version: 43 + +modules: + # this includes everything except for image-specific modifications + # --- + - from-file: shared/base.yml + + # image-specific packages module + # base/core packages are all handled by solarpowered-raw + # and should not be added here. + # systemd services related to image-specific packages + # may also be placed within this module for simplicity + # --- + - from-file: packages/solarpowered.yml + + # Plymouth + - from-file: shared/plymouth.yml + + # kernel selection + # select ONE of the following from-file line + # --- + # - from-file: kernels/bazzite.yml + - from-file: kernels/blu.yml + # - from-file: kernels/cachy.yml + # - from-file: kernels/fedora.yml + + # files module + # copies files into / + # --- + - type: files + files: + # create a folder under files/ with the image name + # and place directories and files appropriately + # source entry should be the same name as the image name + - source: solarpowered # image name, or folder as named under files/ + destination: / + + - type: os-release + properties: + PRETTY_NAME: Fedora Linux 43 (Silverblue) + VERSION_CODENAME: solarpowered + DEFAULT_HOSTNAME: spwd + HOME_URL: https://github.com/askpng/solarpowered + DOCUMENTATION_URL: https://github.com/askpng/solarpowered + SUPPORT_URL: https://github.com/askpng/solarpowered/issues + BUG_REPORT_URL: https://github.com/askpng/solarpowered/issues + + - type: signing diff --git a/docs/solarpowered-main/recipes/kernels/bazzite.yml b/docs/solarpowered-main/recipes/kernels/bazzite.yml new file mode 100644 index 0000000..57a5b3a --- /dev/null +++ b/docs/solarpowered-main/recipes/kernels/bazzite.yml @@ -0,0 +1,61 @@ +modules: + - type: script + snippets: + - dnf -y remove kernel-* && + rm -drf /usr/lib/modules/* + # --- + # RPM method + # --- + - 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 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 + # --- + # Extraction method + # --- + # # 1. Download & extract kernel.tar.zst from Bazzite GH releases + # - TAG=$(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/bazzite-org/kernel-bazzite/releases/latest)) && + # VER=$(echo "$TAG" | sed 's/\(.*\)-/\1./') && + # OS_VERSION=$(rpm -E %fedora) && + # curl --retry 5 -L "https://github.com/bazzite-org/kernel-bazzite/releases/download/$TAG/linux-bazzite-$VER.fc$OS_VERSION-1-x86_64.pkg.tar.zst" -o /tmp/kernel.tar.zst + # # 2. Copy kernel.tar.zst contents to / + # - tar xf /tmp/kernel.tar.zst -C /tmp + # - cp -r /tmp/usr / + # # 3. Run depmod -a + # - VER=$(ls /usr/lib/modules) && + # depmod -a $VER + # # 4. Generate and verify initramfs.img + # - VER=$(ls /usr/lib/modules) && + # dracut --kver $VER --force --add ostree --no-hostonly --reproducible /usr/lib/modules/$VER/initramfs.img && + # find /usr/lib/modules/$VER/initramfs.img + # # 5. Cleanup + # - rm -r /tmp/usr && + # rm /tmp/kernel.tar.zst + + - type: dnf + repos: + cleanup: true + copr: + - bieszczaders/kernel-cachyos-addons + install: + install-weak-deps: false + packages: + - scx-scheds-git + - scx-manager + + - type: systemd + system: + enabled: + - scx_loader.service diff --git a/docs/solarpowered-main/recipes/kernels/blu.yml b/docs/solarpowered-main/recipes/kernels/blu.yml new file mode 100644 index 0000000..ba94094 --- /dev/null +++ b/docs/solarpowered-main/recipes/kernels/blu.yml @@ -0,0 +1,36 @@ +modules: + - type: script + scripts: + - kernels/kernel-blu.sh + # snippets: + # - dnf -y install --setopt=install_weak_deps=False + # dnf-plugins-core + # dnf5-plugins + # - dnf -y remove kernel* && rm -r -f /usr/lib/modules/* + # - dnf -y config-manager setopt "*fedora*".exclude=" + # kernel + # kernel-core + # kernel-modules + # kernel-modules-core + # kernel-modules-extra + # kernel-devel + # kernel-headers + # " + # - dnf -y copr enable sentry/kernel-blu + # - dnf -y copr enable ublue-os/akmods + # - curl -L "https://raw.githubusercontent.com/terrapkg/subatomic-repos/main/terra.repo" -o /etc/yum.repos.d/terra.repo + # - dnf -y install --setopt=install_weak_deps=False + # kernel + # kernel-devel + # kernel-modules-extra + # akmods + # help2man + # v4l2loopback + # zenergy + # # Needed if we use --setopt=tsflags=noscripts + # - 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 + # - rm -f /etc/yum.repos.d/{*copr*,*terra*} \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/kernels/cachy.yml b/docs/solarpowered-main/recipes/kernels/cachy.yml new file mode 100644 index 0000000..84a3ad7 --- /dev/null +++ b/docs/solarpowered-main/recipes/kernels/cachy.yml @@ -0,0 +1,9 @@ +modules: + - type: script + scripts: + - kernels/kernel-cachy.sh + + - type: systemd + system: + enabled: + - scx_loader.service \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/kernels/fedora.yml b/docs/solarpowered-main/recipes/kernels/fedora.yml new file mode 100644 index 0000000..0c9c446 --- /dev/null +++ b/docs/solarpowered-main/recipes/kernels/fedora.yml @@ -0,0 +1,4 @@ +modules: + - type: script + scripts: + - kernels/kernel-fedora.sh \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/packages/README.md b/docs/solarpowered-main/recipes/packages/README.md new file mode 100644 index 0000000..44901c7 --- /dev/null +++ b/docs/solarpowered-main/recipes/packages/README.md @@ -0,0 +1,15 @@ +# packages + +This folder contains + +# core & core-discard + +`rpm-ostree` modules for use with UBlue's `silverblue-main`. + +# foundation + +`rpm-ostree` modules for use with vanilla Fedora Silverblue. + +# solarpowered(-ex) + +Image-specific `rpm-ostree` and `systemd` modules. Device-sensitive. \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/packages/foundation.yml b/docs/solarpowered-main/recipes/packages/foundation.yml new file mode 100644 index 0000000..5b87d17 --- /dev/null +++ b/docs/solarpowered-main/recipes/packages/foundation.yml @@ -0,0 +1,128 @@ +modules: + - type: dnf + repos: + cleanup: true + nonfree: negativo17 + files: + - https://raw.githubusercontent.com/terrapkg/subatomic-repos/main/terra.repo + # - vscodium.repo + copr: + - cuteneko/waydroid-helper + - sneexy/zen-browser + # - trixieua/mutter-patched + - zeno/scrcpy + replace: + - from-repo: fedora + packages: + - old: OpenCL-ICD-Loader + new: ocl-icd + # - from-repo: copr:copr.fedorainfracloud.org:trixieua:mutter-patched + # allow-erasing: true + # packages: + # - gdm + # - gnome-shell + # - mutter + # - mutter-common + install: + allow-erasing: true + install-weak-deps: false + packages: + # vscodium + - codium + # copr + - scrcpy + - starship + - topgrade + - zen-browser + # audio & codecs + - alsa-firmware + - celluloid + - ffmpegthumbnailer + - libcamera-gstreamer + - libcamera-tools + - libva-utils + - pipewire-plugin-vulkan + - vulkan-headers + # CLI utilities + - distrobox + - fastfetch + - fish + - fzf + - ifuse + - inxi + - iwd + - lm_sensors + - lzip + - nvtop + # - openssl # already included + - smartmontools + - stress + - s-tui + # - wireguard-tools # already included + # - wl-clipboard # already included + - yt-dlp + # - zstd # already included + # GUI + - baobab + - firewall-config + - nautilus-python + - papers + # other system + - btrfs-assistant + - flatpak-spawn + - input-remapper + - libappindicator + - libratbag-ratbagd + - openrgb-udev-rules + - podman-compose + - steam-devices + # pretties + - adw-gtk3-theme + - fonts-tweak-tool + - deepin-sound-theme + - oxygen-sounds + - pop-sound-theme + - yaru-sound-theme + # android stuff + - android-tools + - bindfs + - python3-pyclip + - waydroid + - waydroid-helper + remove: + packages: + # fedora + # repos are also removed because the image will not be used to layer things locally + - fedora-bookmarks + - fedora-chromium-config + - fedora-chromium-config-gnome + - fedora-flathub-remote + - fedora-repos-archive + - fedora-third-party + - fedora-workstation-repositories + - fedora-workstation-backgrounds + # --- + # gnome + - gnome-classic-session + - gnome-shell-extension-apps-menu + - gnome-shell-extension-background-logo + - gnome-shell-extension-launch-new-instance + - gnome-shell-extension-places-menu + - gnome-shell-extension-window-list + - gnome-software + - gnome-software-rpm-ostree + - gnome-system-monitor + - gnome-tour + - totem-video-thumbnailer + # --- + # others + - default-fonts-cjk-sans + - firefox + - firefox-langpacks + - google-noto-sans-cjk-vf-fonts + - rygel + - yelp + + # - type: script + # scripts: + # - shared/android-tools.sh \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/packages/solarpowered-ex.yml b/docs/solarpowered-main/recipes/packages/solarpowered-ex.yml new file mode 100644 index 0000000..76a3aa5 --- /dev/null +++ b/docs/solarpowered-main/recipes/packages/solarpowered-ex.yml @@ -0,0 +1,74 @@ +modules: + - type: dnf + repos: + cleanup: true + nonfree: negativo17 + copr: + - eaglesemanation/displayconfig-mutter + - ilyaz/LACT + - jackgreiner/lutris-git + - lizardbyte/beta + - ublue-os/obs-vkcapture + - ublue-os/rom-properties + install: + install-weak-deps: false + allow-erasing: true + packages: + - displayconfig-mutter + - gamescope + - lact + - libobs_vkcapture.x86_64 + - libobs_glcapture.x86_64 + - libobs_vkcapture.i686 + - libobs_glcapture.i686 + - lutris + - mangohud + - pipx + - python3-ramalama + - rocm-hip + - rocm-clinfo + - rocm-smi + - rom-properties-gtk3 + - steam + - sunshine + exclude: + - gamemode + - type: systemd + system: + enabled: + - lactd.service + - type: script + snippets: + # Gamescope + # - dnf -y install dnf-plugins-core + # - dnf -y copr enable ublue-os/bazzite + # - dnf -y copr enable ublue-os/bazzite-multilib + # - dnf -y config-manager setopt "*bazzite*".priority=90 + # - dnf -y install + # gamescope + # gamescope-libs + # gamescope-shaders + # - dnf -y copr disable ublue-os/bazzite-multilib + # - dnf -y copr disable ublue-os/bazzite + - dnf clean all + # Extest + - mkdir -p /usr/lib/extest + - "VER=$(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/ublue-os/extest/releases/latest)) && curl -fLs https://github.com/ublue-os/extest/releases/download/${VER}/libextest.so -o /tmp/libextest.so" + - cp /tmp/libextest.so /usr/lib/extest/libextest.so + - rm /tmp/libextest.so + # Modify Steam.desktop with extest LD_PRELOAD + - sed -i 's|/usr/bin/steam\>|&-extest|g' /usr/share/applications/steam.desktop + # Sunshine setup + - setcap 'cap_sys_admin+p' /usr/bin/sunshine-* + # Winetricks + - curl -Lo /usr/bin/winetricks https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks + - chmod 0755 /usr/bin/winetricks + # SteamOS files + - git clone https://github.com/shahnawazshahin/steam-using-gamescope-guide.git /tmp/gamescope-files + ## Copy files from source + - cp -r /tmp/gamescope-files/usr/bin /usr + - cp -r /tmp/gamescope-files/usr/share /usr + ## Remove gamescope-session from source & use our own + - rm /usr/bin/gamescope-session + ## Cleanup source + - rm -r /tmp/gamescope-files \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/packages/solarpowered.yml b/docs/solarpowered-main/recipes/packages/solarpowered.yml new file mode 100644 index 0000000..961974f --- /dev/null +++ b/docs/solarpowered-main/recipes/packages/solarpowered.yml @@ -0,0 +1,40 @@ +modules: + - type: dnf + repos: + cleanup: true + copr: + - abn/throttled + - sneexy/python-validity + install: + allow-erasing: true + packages: + - igt-gpu-tools + # python-validity + - fprintd-clients + - fprintd-clients-pam + - open-fprintd + - python3-validity + # tlp + - tlp + - tlp-rdw + # throttled + - throttled + # zcfan + - zcfan + remove: + auto-remove: true + packages: + - tuned + - tuned-ppd + + - type: systemd + system: + enabled: + # tlp + - tlp.service + # throttled + # throttled.service + masked: + # tlp + - systemd-rfkill.service + - systemd-rfkill.socket \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/base.yml b/docs/solarpowered-main/recipes/shared/base.yml new file mode 100644 index 0000000..706d45f --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/base.yml @@ -0,0 +1,49 @@ +# this is a base modules file to build images on top of quay.io/fedora-ostree-desktops/silverblue +# or quay.io/fedora/fedora-silverblue, since making a brand new base image does not seem to work. +# images should start with from-file to this module first thing, then followed by image-specific modules + +modules: + # contains repo files for codium, configs and services that will be shared across images + - from-file: shared/files.yml + + # intel-media-driver from RPM Fusion & codecs from fedora-multimedia repo + - from-file: shared/bling-negativo17.yml + - type: dnf + repos: + cleanup: true + nonfree: rpmfusion + replace: + - from-repo: rpmfusion-nonfree + packages: + - old: libva-intel-media-driver + new: intel-media-driver + + # installs and removes packages, this will apply to all solarpowered images + # includes installation entries for audio & codecs, CLI utilities, GUI apps, + # other system tools, prettifying packages, printing drivers for EPSON, and waydroid + # also includes removal entries for undesired fedora, gnome, free multimedia packages, + # and native installation of firefox + - from-file: packages/foundation.yml + + # installs icon packs + - from-file: shared/script.yml + + # installs luminance & windscribe directly from github releases + - from-file: shared/rpms.yml + + # installs shared fonts + - from-file: shared/fonts.yml + + # contains gnome extensions that will be shared across all images + # does not contain several other extensions that must be installed locally + - from-file: shared/gnome-extensions.yml + + # configures gschema for extensions, desktop, touchpad, and WM prefs + - from-file: shared/gschema-overrides.yml + + # flatpaks + - from-file: shared/default-flatpaks.yml + + # disables NetworkManager-online-service, flatpak update services, + # and enables topgrade updater + - from-file: shared/systemd.yml \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/bling-negativo17.yml b/docs/solarpowered-main/recipes/shared/bling-negativo17.yml new file mode 100644 index 0000000..fd770f2 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/bling-negativo17.yml @@ -0,0 +1,29 @@ +modules: + - type: dnf + repos: + cleanup: true + nonfree: negativo17 + install: + allow-erasing: true + install-weak-deps: false + packages: + - gstreamer1-plugin-vaapi + - ffmpeg-libs + replace: + - from-repo: fedora-multimedia + packages: + # - old: ffmpeg-free + # new: ffmpeg + # - old: libavcodec-free + # new: libavcodec + - old: libfdk-aac-free + new: libfdk-aac + - libheif + - libva + - mesa-dri-drivers + - mesa-filesystem + - mesa-libEGL + - mesa-libGL + - mesa-libgbm + - mesa-va-drivers + - mesa-vulkan-drivers \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/bling-rpmfusion.yml b/docs/solarpowered-main/recipes/shared/bling-rpmfusion.yml new file mode 100644 index 0000000..c064bd9 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/bling-rpmfusion.yml @@ -0,0 +1,26 @@ +modules: + - type: dnf + repos: + cleanup: true + nonfree: rpmfusion + replace: + - from-repo: rpmfusion + packages: + - old: ffmpeg-free + new: ffmpeg + - old: mesa-va-drivers + new: mesa-va-drivers-freeworld + - old: libavcodec + new: libavcodec-freeworld + - from-repo: rpmfusion-nonfree + packages: + - intel-media-driver + install: + install-weak-deps: false + packages: + - gstreamer1-plugin-libav + - gstreamer1-plugins-bad-free-extras + - gstreamer1-plugins-bad-freeworld + - gstreamer1-plugins-ugly + - gstreamer1-vaapi + - libheif-freeworld \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/default-flatpaks.yml b/docs/solarpowered-main/recipes/shared/default-flatpaks.yml new file mode 100644 index 0000000..a0d31d5 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/default-flatpaks.yml @@ -0,0 +1,25 @@ +modules: + - type: default-flatpaks + configurations: + - notify: false + scope: system + install: + - ca.desrt.dconf-editor + - com.github.tchx84.Flatseal + - com.mattjakeman.ExtensionManager + - io.github.flattool.Warehouse + - io.github.kolunmi.Bazaar + - net.nokyan.Resources + - org.gnome.clocks + - org.gnome.Epiphany + - org.gnome.FileRoller + - org.gnome.Firmware + - org.gnome.Loupe + - org.gnome.seahorse.Application + - org.gnome.Showtime + - org.gnome.SimpleScan + - org.gnome.Snapshot + - org.gnome.TextEditor + - org.gnome.Weather + - page.tesk.Refine + - re.sonny.Junction \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/files.yml b/docs/solarpowered-main/recipes/shared/files.yml new file mode 100644 index 0000000..0b93780 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/files.yml @@ -0,0 +1,5 @@ +modules: + - type: files + files: + - source: shared + destination: / \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/fonts.yml b/docs/solarpowered-main/recipes/shared/fonts.yml new file mode 100644 index 0000000..398e174 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/fonts.yml @@ -0,0 +1,120 @@ +modules: + - type: dnf + remove: + packages: + - default-fonts-am + - default-fonts-ar + - default-fonts-as + - default-fonts-ast + - default-fonts-be + - default-fonts-bg + - default-fonts-bn + - default-fonts-bo + - default-fonts-br + - default-fonts-chr + - default-fonts-dv + - default-fonts-dz + - default-fonts-el + - default-fonts-eo + - default-fonts-eu + - default-fonts-fa + - default-fonts-got + - default-fonts-gu + - default-fonts-he + - default-fonts-hi + - default-fonts-hy + - default-fonts-ia + - default-fonts-iu + - default-fonts-kab + - default-fonts-ka + - default-fonts-km + - default-fonts-kn + - default-fonts-ku + - default-fonts-lo + - default-fonts-mai + - default-fonts-ml + - default-fonts-mni + - default-fonts-mr + - default-fonts-my + - default-fonts-nb + - default-fonts-ne + - default-fonts-nn + - default-fonts-nqo + - default-fonts-nr + - default-fonts-nso + - default-fonts-or + - default-fonts-pa + - default-fonts-ru + - default-fonts-sat + - default-fonts-si + - default-fonts-ss + - default-fonts-syr + - default-fonts-ta + - default-fonts-te + - default-fonts-th + - default-fonts-tn + - default-fonts-ts + - default-fonts-uk + - default-fonts-ur + - default-fonts-ve + - default-fonts-vi + - default-fonts-xh + - default-fonts-yi + - default-fonts-zu + - google-noto-naskh-arabic-vf-fonts + - google-noto-sans-arabic-vf-fonts + - google-noto-sans-armenian-vf-fonts + - google-noto-sans-bengali-vf-fonts + - google-noto-sans-canadian-aboriginal-vf-fonts + - google-noto-sans-cherokee-vf-fonts + - google-noto-sans-devanagari-vf-fonts + - google-noto-sans-ethiopic-vf-fonts + - google-noto-sans-georgian-vf-fonts + - google-noto-sans-gujarati-vf-fonts + - google-noto-sans-gurmukhi-vf-fonts + - google-noto-sans-hebrew-vf-fonts + - google-noto-sans-kannada-vf-fonts + - google-noto-sans-khmer-vf-fonts + - google-noto-sans-lao-vf-fonts + - google-noto-sans-meetei-mayek-vf-fonts + - google-noto-sans-nko-fonts + - google-noto-sans-ol-chiki-vf-fonts + - google-noto-sans-oriya-vf-fonts + - google-noto-sans-sinhala-vf-fonts + - google-noto-sans-syriac-vf-fonts + - google-noto-sans-tamil-vf-fonts + - google-noto-sans-telugu-vf-fonts + - google-noto-sans-thaana-vf-fonts + - google-noto-sans-thai-vf-fonts + - google-noto-serif-armenian-vf-fonts + - google-noto-serif-bengali-vf-fonts + - google-noto-serif-devanagari-vf-fonts + - google-noto-serif-ethiopic-vf-fonts + - google-noto-serif-georgian-vf-fonts + - google-noto-serif-gujarati-vf-fonts + - google-noto-serif-gurmukhi-vf-fonts + - google-noto-serif-hebrew-vf-fonts + - google-noto-serif-kannada-vf-fonts + - google-noto-serif-khmer-vf-fonts + - google-noto-serif-lao-vf-fonts + - google-noto-serif-oriya-vf-fonts + - google-noto-serif-sinhala-vf-fonts + - google-noto-serif-tamil-vf-fonts + - google-noto-serif-telugu-vf-fonts + - google-noto-serif-thai-vf-fonts + - jomolhari-fonts + - madan-fonts + - open-sans-fonts + - paktype-naskh-basic-fonts + - rit-meera-new-fonts + - rit-rachana-fonts + - sil-padauk-fonts + - vazirmatn-vf-fonts + + - type: fonts + fonts: + nerd-fonts: + - NerdFontsSymbolsOnly + google-fonts: + - Google Sans Code + - IBM Plex Sans diff --git a/docs/solarpowered-main/recipes/shared/gnome-extensions.yml b/docs/solarpowered-main/recipes/shared/gnome-extensions.yml new file mode 100644 index 0000000..e015700 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/gnome-extensions.yml @@ -0,0 +1,7 @@ +modules: + - type: gnome-extensions + install: + - Bluetooth Battery Meter + - Caffeine + - Just Perfection + - Night Theme Switcher \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/gschema-overrides.yml b/docs/solarpowered-main/recipes/shared/gschema-overrides.yml new file mode 100644 index 0000000..458b153 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/gschema-overrides.yml @@ -0,0 +1,11 @@ +modules: + - type: gschema-overrides + include: + - zz00-desktop-app-folders-folders-waydroid.gschema.override + - zz01-org-gnome-shell-extensions.gschema.override + - zz02-org-gnome-desktop-background.gschema.override + - zz03-org-gnome-desktop-interface.gschema.override + - zz04-org-gnome-touchpad.gschema.override + - zz05-org-gnome-desktop-wm-preferences.gschema.override + - zz06-org-gnome-mutter.gschema.override + - zz07-org-gnome-nautilus.gschema.override \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/plymouth.yml b/docs/solarpowered-main/recipes/shared/plymouth.yml new file mode 100644 index 0000000..41f453d --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/plymouth.yml @@ -0,0 +1,19 @@ +modules: + - type: script + snippets: + # Remove firmware background from default BGRT + - sed -i 's/UseFirmwareBackground=true/UseFirmwareBackground=false/g' /usr/share/plymouth/themes/bgrt/bgrt.plymouth + ## nibar Plymouth theme + # - git clone https://github.com/anaysharma/nibar-plymouth-theme.git --depth 1 /tmp/nibar-plymouth-theme + # - cp -r /tmp/nibar-plymouth-theme/nibar /usr/share/plymouth/themes + # - rm -r /tmp/nibar-plymouth-theme + ### Replace default theme with nibar + # - sed -i 's/bgrt/nibar/g' /usr/share/plymouth/plymouthd.defaults + ## Black HUD Plymouth theme + # - wget -O /tmp/black_hud.tar.gz https://github.com/adi1090x/plymouth-themes/releases/download/v1.0/black_hud.tar.gz + # - tar xf /tmp/black_hud.tar.gz -C /tmp + # - cp -r /tmp/black_hud /usr/share/plymouth/themes + # - rm -r /tmp/black_hud + # - rm /tmp/black_hud.tar.gz + ### Replace default theme with black_hud + # - sed -i 's/bgrt/black_hud/g' /usr/share/plymouth/plymouthd.defaults \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/rpms.yml b/docs/solarpowered-main/recipes/shared/rpms.yml new file mode 100644 index 0000000..1da7714 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/rpms.yml @@ -0,0 +1,23 @@ +modules: + - type: script + snippets: + # Bitwarden RPM + - wget -t 5 -O /tmp/bitwarden.rpm "https://bitwarden.com/download/?app=desktop&platform=linux&variant=rpm" + - dnf install -y /tmp/bitwarden.rpm + - rm /tmp/bitwarden.rpm + # Windscribe + - 'dnf install -y https://github.com/Windscribe/Desktop-App/releases/latest/download/windscribe_$(curl https://api.github.com/repos/Windscribe/Desktop-App/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")_amd64_fedora.rpm' + # Atuin + - 'VER=$(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/atuinsh/atuin/releases/latest)) && curl -fLs --create-dirs https://github.com/atuinsh/atuin/releases/download/${VER}/atuin-x86_64-unknown-linux-musl.tar.gz -o /tmp/atuin-x86_64-unknown-linux-musl.tar.gz' + - tar -xzf /tmp/atuin-x86_64-unknown-linux-musl.tar.gz -C /tmp + - cp /tmp/atuin-x86_64-unknown-linux-musl/atuin /usr/bin/atuin && chmod 0755 /usr/bin/atuin + - rm /tmp/atuin-x86_64-unknown-linux-musl.tar.gz + - rm -r /tmp/atuin-x86_64-unknown-linux-musl + # Just + - 'VER=$(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/casey/just/releases/latest)) && curl -fLs --create-dirs https://github.com/casey/just/releases/download/${VER}/just-${VER}-x86_64-unknown-linux-musl.tar.gz -o /tmp/just-x86_64-unknown-linux-musl.tar.gz' + - 'mkdir -p /tmp/just && tar -xzf /tmp/just-x86_64-unknown-linux-musl.tar.gz -C /tmp/just/' + - cp /tmp/just/just /usr/bin/just && chmod 0755 /usr/bin/just + - cp /tmp/just/completions/just.bash /usr/share/bash-completion/completions/just + - cp /tmp/just/completions/just.fish /usr/share/fish/completions/just.fish + - rm /tmp/just-x86_64-unknown-linux-musl.tar.gz + - rm -r /tmp/just \ No newline at end of file diff --git a/docs/solarpowered-main/recipes/shared/script.yml b/docs/solarpowered-main/recipes/shared/script.yml new file mode 100644 index 0000000..ad390ec --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/script.yml @@ -0,0 +1,5 @@ +modules: + - type: script + scripts: + - shared/nautilus-copy-path.sh + - shared/colloid-icon-theme.sh diff --git a/docs/solarpowered-main/recipes/shared/systemd.yml b/docs/solarpowered-main/recipes/shared/systemd.yml new file mode 100644 index 0000000..fba4654 --- /dev/null +++ b/docs/solarpowered-main/recipes/shared/systemd.yml @@ -0,0 +1,15 @@ +modules: + - type: systemd + system: + enabled: + - rechunker-group-fix.service + disabled: + - NetworkManager-wait-online.service + - flatpak-add-fedora-repos.service + - flatpak-system-update.timer + - flatpak-system-update.service + - flatpak-user-update.timer + - flatpak-user-update.service + user: + enabled: + - topgrade.timer \ No newline at end of file diff --git a/files/scripts/bazzite-kernel.sh b/files/scripts/bazzite-kernel.sh new file mode 100644 index 0000000..d1312ca --- /dev/null +++ b/files/scripts/bazzite-kernel.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# Replaces the stock Fedora kernel with the Bazzite kernel. +# The Bazzite kernel ships sched-ext (SCX) support and gaming/realtime +# optimizations, making it well-suited for low-latency audio workloads. +# +# Based on the solarpowered project kernel install approach: +# https://github.com/solar-powered/solarpowered + +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)) + +# Disable kernel-install hooks so they don't trigger inside the container +# build environment. The initramfs will be generated explicitly below. +pushd /usr/lib/kernel/install.d +printf '%s\n' '#!/bin/sh' 'exit 0' >05-rpmostree.install +printf '%s\n' '#!/bin/sh' 'exit 0' >50-dracut.install +chmod +x 05-rpmostree.install 50-dracut.install +popd + +# Erase stock Fedora kernel RPMs from the package database +for pkg in kernel kernel-core kernel-modules kernel-modules-core; do + rpm --erase "$pkg" --nodeps || true +done + +# Remove ALL existing kernel module directories. +for KVER in $(ls /usr/lib/modules 2>/dev/null); do + rm -rf "/usr/lib/modules/$KVER" +done + +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 + +# Identify the newly installed Bazzite kernel version +NEW_KVER=$(ls /usr/lib/modules | head -n1) + +# Ensure vmlinuz is at the path expected by rpm-ostree and bootc for boot +# entry generation. +if [ ! -f "/usr/lib/modules/${NEW_KVER}/vmlinuz" ]; then + if [ -f "/boot/vmlinuz-${NEW_KVER}" ]; then + cp "/boot/vmlinuz-${NEW_KVER}" "/usr/lib/modules/${NEW_KVER}/vmlinuz" + else + echo "ERROR: vmlinuz not found for kernel ${NEW_KVER}" >&2 + exit 1 + fi +fi + +# Rebuild kernel module dependency map before generating initramfs. +depmod -a "${NEW_KVER}" + +# Generate the initramfs inside the container image so that rpm-ostree and +# bootc can use it directly at deploy time. +dracut \ + --reproducible \ + --no-hostonly \ + --add "ostree" \ + --filesystems "btrfs" \ + --add-drivers "btrfs" \ + --force \ + "/usr/lib/modules/${NEW_KVER}/initramfs.img" \ + "${NEW_KVER}" + +# Atomic images manage /boot via the bootloader layer; clear any kernel +# files the RPM dropped there. +rm -rf /boot/* diff --git a/recipes/common/copr-packages.yml b/recipes/common/copr-packages.yml index 0319387..34a44f4 100644 --- a/recipes/common/copr-packages.yml +++ b/recipes/common/copr-packages.yml @@ -2,7 +2,6 @@ modules: - type: dnf repos: copr: - - bieszczaders/kernel-cachyos-lto - bieszczaders/kernel-cachyos-addons - patrickl/wine-tkg - timlau/audio diff --git a/recipes/recipe.yml b/recipes/recipe.yml index c057a54..c8497d1 100644 --- a/recipes/recipe.yml +++ b/recipes/recipe.yml @@ -10,17 +10,26 @@ base-image: quay.io/fedora-ostree-desktops/kinoite image-version: 43 modules: - # Add CachyOS repos first so the kernel swap script can use them + # Swap stock Fedora kernel for Bazzite kernel + - type: script + scripts: + - bazzite-kernel.sh + + # Install SCX scheduler (works with Bazzite kernel's sched-ext support) - type: dnf repos: copr: - - bieszczaders/kernel-cachyos-lto - bieszczaders/kernel-cachyos-addons + install: + install-weak-deps: false + packages: + - scx-scheds-git + - scx-manager - # Swap stock Fedora kernel for CachyOS LTO kernel - - type: script - scripts: - - cachyos-kernel.sh + - type: systemd + system: + enabled: + - scx_loader.service - type: dnf install: