diff --git a/.forgejo/workflows/publish.yaml b/.forgejo/workflows/publish.yaml index e1eb45a..5782bae 100644 --- a/.forgejo/workflows/publish.yaml +++ b/.forgejo/workflows/publish.yaml @@ -65,7 +65,7 @@ jobs: - name: Build and push uses: docker/build-push-action@v6 with: - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 push: true context: "{{defaultContext}}:${{ matrix.box.path }}" tags: | diff --git a/boxes/devbox/.justfile b/boxes/devbox/.justfile deleted file mode 100644 index 3d15b8b..0000000 --- a/boxes/devbox/.justfile +++ /dev/null @@ -1,21 +0,0 @@ -clean := "false" -box_name := file_stem(invocation_directory()) - -unexport GOBIN -unexport GOPATH -unexport GOROOT - - -# Create a new box from current directory -[no-cd] -build box_name: - [[ "{{clean}}" == "true" ]] && sudo rm -rf ${HOME}/chroots/{{ box_name }} || true - - podman build -t {{box_name}}:latest . - - distrobox assemble create - -# Enter the box -enter box_name: - clear - @distrobox enter --clean-path --no-workdir {{box_name}} diff --git a/boxes/devbox/Dockerfile b/boxes/devbox/Dockerfile index aa7f5fb..b964e6d 100644 --- a/boxes/devbox/Dockerfile +++ b/boxes/devbox/Dockerfile @@ -1,50 +1,22 @@ -FROM rust:latest AS rust-builder +FROM quay.io/toolbx-images/alpine-toolbox:edge -# setup cargo packages, prefer to use apk packages -# to reduce build time and space -RUN --mount=type=cache,target=/app/target/ \ - --mount=type=cache,target=/usr/local/cargo/git/db \ - --mount=type=cache,target=/usr/local/cargo/registry/ \ - curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash \ - && cargo binstall --no-confirm \ - dotter - -FROM ghcr.io/void-linux/void-glibc-full:latest - -# Setup void packages -RUN --mount=type=cache,target=/var/cache/xbps/ \ - xbps-install -Syu \ - && xbps-install -Sy \ - bash \ - bat \ - cocogitto \ +# Update system and install packages +RUN apk update && apk upgrade && \ + apk add --no-cache \ + neovim \ + git \ + lazygit \ + zsh \ curl \ - eza \ + wget \ + ripgrep \ fd \ fzf \ - gcc \ - git \ - just \ - lazygit \ - neovim \ - nodejs \ - ripgrep \ - sd \ - starship \ - tealdeer \ - tmux \ - tree-sitter \ - void-repo-multilib \ - void-repo-multilib-nonfree \ - void-repo-nonfree \ - yazi \ - zoxide \ - zsh - -# Import cargo packages -COPY --from=rust-builder /usr/local/cargo/bin/* /usr/local/bin/ - -COPY ./scripts/* /usr/local/bin/ + alpine-sdk \ + build-base \ + python3 \ + py3-pip \ + openssh # Set environment variables ENV EDITOR=nvim \ @@ -52,14 +24,18 @@ ENV EDITOR=nvim \ TERM=xterm-256color \ LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ - SHELL=/usr/bin/zsh + SHELL=/bin/zsh -# Basic setup -RUN \ - # chsh -s /usr/bin/nu \ - chsh -s /usr/bin/zsh \ - && chmod +x /usr/local/bin/* +# Install and initialize chezmoi +RUN sh -c "$(curl -fsLS get.chezmoi.io)" -- -b /usr/local/bin && \ + mkdir -p ~/.local/share/chezmoi + +RUN chsh -s /bin/zsh + +RUN mkdir -p /workspace + +WORKDIR /workspace # Build commands: -# Docker: docker build -t devbox . -# Podman: podman build -t devbox . +# Docker: docker build -t dev-env . +# Podman: podman build -t dev-env . diff --git a/boxes/devbox/distrobox.ini b/boxes/devbox/distrobox.ini index e459b93..8e37068 100644 --- a/boxes/devbox/distrobox.ini +++ b/boxes/devbox/distrobox.ini @@ -1,16 +1,13 @@ [devbox] -image=git.alecodes.page/alecodes/devbox:latest +image=devbox:latest replace=true pull=false init=true +unshare_all=true root=false start_now=true +additional_packages="git neovim" + home="${HOME}/chroots/devbox" -volume="${HOME}/.ssh:${HOME}/chroots/devbox/.ssh" - -additional_packages="" -additional_flags="--hostname devbox" - -init_hooks=if [ -e /usr/local/bin/fetch_dots ]; then sudo -u aleidk sh -c "/usr/local/bin/fetch_dots" && rm /usr/local/bin/fetch_dots; fi diff --git a/boxes/devbox/scripts/fetch_dots b/boxes/devbox/scripts/fetch_dots deleted file mode 100644 index c802d5d..0000000 --- a/boxes/devbox/scripts/fetch_dots +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -set -e pipefail - -base_dir="$HOME/Repos/Private/" - -mkdir -p "$base_dir" - -cd "$base_dir" || exit - -if [ -d dots ]; then - echo "Dots already exists, updating..." - cd dots || exit - git pull --rebase --autostash - -else - git clone ssh://git@git.alecodes.page:24062/alecodes/dots.git - - cd dots || exit - - git checkout dotter-migration -fi - -echo "Fixing permissions..." -chown -R 1000:1000 "$base_dir" - -echo "Deploying dots..." -dotter deploy diff --git a/boxes/devbox/scripts/setup_go b/boxes/devbox/scripts/setup_go deleted file mode 100644 index c3ee02e..0000000 --- a/boxes/devbox/scripts/setup_go +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -set -e pipefail - -sudo xbps-install -Sy go - -go install mvdan.cc/gofumpt@latest -go install -v github.com/incu6us/goimports-reviser/v3@latest -go install github.com/segmentio/golines@latest -go install golang.org/x/tools/gopls@latest diff --git a/ostree-images/river/Dockerfile b/ostree-images/river/Dockerfile new file mode 100644 index 0000000..6f1475c --- /dev/null +++ b/ostree-images/river/Dockerfile @@ -0,0 +1,206 @@ +# Originally generated from https://github.com/wayblueorg/wayblue + + +# This stage is responsible for holding onto +# your config without copying it directly into +# the final image +FROM scratch AS stage-files +COPY ./files /files + +# Copy modules +# The default modules are inside blue-build/modules +# Custom modules overwrite defaults +FROM scratch AS stage-modules +COPY --from=ghcr.io/blue-build/modules:latest /modules /modules +COPY ./modules /modules + +# Bins to install +# These are basic tools that are added to all images. +# Generally used for the build process. We use a multi +# stage process so that adding the bins into the image +# can be added to the ostree commits. +FROM scratch AS stage-bins +COPY --from=gcr.io/projectsigstore/cosign /ko-app/cosign /bins/cosign +COPY --from=docker.io/mikefarah/yq /usr/bin/yq /bins/yq +COPY --from=ghcr.io/blue-build/cli:latest-installer /out/bluebuild /bins/bluebuild + +# Keys for pre-verified images +# Used to copy the keys into the final image +# and perform an ostree commit. +# +# Currently only holds the current image's +# public key. +FROM scratch AS stage-keys +COPY cosign.pub /keys/river.pub + + +# Main image +FROM quay.io/fedora-ostree-desktops/base:41 AS river +ARG RECIPE=./recipes/recipe-river.yml +ARG IMAGE_REGISTRY=localhost +ARG CONFIG_DIRECTORY="/tmp/files" +ARG MODULE_DIRECTORY="/tmp/modules" +ARG IMAGE_NAME="river" +ARG BASE_IMAGE="quay.io/fedora-ostree-desktops/base" +ARG FORCE_COLOR=1 +ARG CLICOLOR_FORCE=1 +ARG RUST_LOG_STYLE=always +# Key RUN +RUN --mount=type=bind,from=stage-keys,src=/keys,dst=/tmp/keys \ + mkdir -p /etc/pki/containers/ \ + mkdir -p /usr/etc/pki/containers/ \ + && cp /tmp/keys/* /etc/pki/containers/ \ + && cp /tmp/keys/* /usr/etc/pki/containers/ \ + && ostree container commit + +# Bin RUN +RUN --mount=type=bind,from=stage-bins,src=/bins,dst=/tmp/bins \ + mkdir -p /usr/bin/ \ + && cp /tmp/bins/* /usr/bin/ \ + && ostree container commit + +# Module RUNs +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'rpm-ostree' '{"type":"rpm-ostree","install":["sddm","sddm-themes","qt5-qtgraphicaleffects","qt5-qtquickcontrols2","qt5-qtsvg","kwallet","pam-kwallet"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["setsddmtheming.sh"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'systemd' '{"type":"systemd","system":{"enabled":["sddm-boot.service"]}}' \ + && ostree container commit +COPY --from=ghcr.io/ublue-os/akmods:main-41 /rpms /tmp/rpms +RUN find /tmp/rpms +RUN rpm -q ublue-os-akmods-addons || rpm-ostree install /tmp/rpms/ublue-os/ublue-os-akmods-addons*.rpm +COPY --from=ghcr.io/ublue-os/main-kernel:41 /tmp/rpms /tmp/rpms/kernel +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["installsignedkernel.sh"]}' \ + && ostree container commit +RUN rpm-ostree install just powerstat +COPY --from=ghcr.io/ublue-os/config:latest /rpms/ublue-os-udev-rules.noarch.rpm / +COPY --from=ghcr.io/ublue-os/config:latest /rpms/ublue-os-update-services.noarch.rpm / +COPY --from=ghcr.io/ublue-os/config:latest /rpms/ublue-os-signing.noarch.rpm / +COPY --from=ghcr.io/ublue-os/config:latest /rpms/ublue-os-luks.noarch.rpm / +COPY --from=ghcr.io/ublue-os/config:latest /rpms/ublue-os-just.noarch.rpm / +RUN rpm -ivh /ublue-os-udev-rules.noarch.rpm +RUN rpm -ivh /ublue-os-update-services.noarch.rpm +RUN rpm -ivh /ublue-os-signing.noarch.rpm +RUN rpm -ivh /ublue-os-luks.noarch.rpm +RUN rpm -ivh /ublue-os-just.noarch.rpm +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["installandroidudev.sh","installrpmfusion.sh"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'rpm-ostree' '{"type":"rpm-ostree","install":["rofi-wayland","power-profiles-daemon","xorg-x11-server-Xwayland","headsetcontrol","mediainfo","polkit","xfce-polkit","fprintd-pam","xdg-user-dirs","dbus-tools","dbus-daemon","wl-clipboard","pavucontrol","playerctl","qt5-qtwayland","qt6-qtwayland","vulkan-validation-layers","vulkan-tools","google-noto-emoji-fonts","gnome-disk-utility","ddcutil","openssl","vim","just","alsa-firmware","p7zip","unrar","wireplumber","pipewire","pamixer","pulseaudio-utils","network-manager-applet","NetworkManager-openvpn","NetworkManager-openconnect","bluez","bluez-tools","blueman","firewall-config","thunar","thunar-archive-plugin","thunar-volman","xarchiver","imv","p7zip","gvfs-mtp","gvfs-gphoto2","gvfs-smb","gvfs-nfs","gvfs-fuse","gvfs-archive","android-tools","slurp","grim","wlr-randr","wlsunset","brightnessctl","kanshi","dunst","adwaita-qt5","fontawesome-fonts-all","gnome-themes-extra","gnome-icon-theme","paper-icon-theme","breeze-icon-theme","papirus-icon-theme"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["installproprietarypackages.sh"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'rpm-ostree' '{"type":"rpm-ostree","install":["heif-pixbuf-loader","ffmpeg","ffmpeg-libs","ffmpegthumbnailer","pipewire-libs-extra","libfdk-aac","gstreamer1-plugins-bad","gstreamer1-plugins-ugly"],"remove":["gstreamer1-plugins-bad-free","gstreamer1-plugins-bad-free-libs","gstreamer1-plugins-ugly-free","fdk-aac-free","ffmpeg-free","libavcodec-free","libavdevice-free","libavfilter-free","libavformat-free","libavutil-free","libpostproc-free","libswresample-free","libswscale-free"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["removeunusedrepos.sh"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'files' '{"type":"files","files":[{"source":"system/usr","destination":"/usr"},{"source":"system/etc","destination":"/etc"}]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'gschema-overrides' '{"type":"gschema-overrides","include":["zz1-secureblue-theming.gschema.override"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["settheming.sh","addbrewjustimport.sh"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'wayblue-signing' '{"type":"wayblue-signing"}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'rpm-ostree' '{"type":"rpm-ostree","install":["river","waybar","xdg-desktop-portal-wlr","xdg-desktop-portal-gtk","foot","swaylock","swayidle"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'files' '{"type":"files","files":[{"source":"system/river","destination":"/"}]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["setriverwaybarmodules.sh"]}' \ + && ostree container commit +RUN \ + --mount=type=bind,from=stage-files,src=/files,dst=/tmp/files,rw \ + --mount=type=bind,from=stage-modules,src=/modules,dst=/tmp/modules,rw \ + --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/tmp/scripts/ \ + --mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-river-41,sharing=locked \ + /tmp/scripts/run_module.sh 'script' '{"type":"script","scripts":["removeunusedrepos.sh","regenerateinitramfs.sh"]}' \ + && ostree container commit + +RUN --mount=type=bind,from=ghcr.io/blue-build/cli:7c5578994e79d13d8780406600dc796422e22c8c-build-scripts,src=/scripts/,dst=/scripts/ \ + /scripts/post_build.sh + +# Labels are added last since they cause cache misses with buildah +LABEL org.blue-build.build-id="a3459c17-7a25-4df6-9c32-5578138f7870" +LABEL org.opencontainers.image.title="river" +LABEL org.opencontainers.image.description="ublue images for wayland compositors" +LABEL org.opencontainers.image.source="" +LABEL io.artifacthub.package.readme-url=https://raw.githubusercontent.com/blue-build/cli/main/README.md diff --git a/ostree-images/river/files/gschema-overrides/zz1-secureblue-theming.gschema.override b/ostree-images/river/files/gschema-overrides/zz1-secureblue-theming.gschema.override new file mode 100644 index 0000000..caa45e1 --- /dev/null +++ b/ostree-images/river/files/gschema-overrides/zz1-secureblue-theming.gschema.override @@ -0,0 +1,4 @@ +[org.gnome.desktop.interface] +gtk-theme='Adwaita-dark' +color-scheme='prefer-dark' +icon-theme='Papirus' \ No newline at end of file diff --git a/ostree-images/river/files/scripts/addbrewjustimport.sh b/ostree-images/river/files/scripts/addbrewjustimport.sh new file mode 100644 index 0000000..cad6d50 --- /dev/null +++ b/ostree-images/river/files/scripts/addbrewjustimport.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail +echo ' + +import "/usr/share/ublue-os/just/50-brew.just" + +' >> /usr/share/ublue-os/justfile diff --git a/ostree-images/river/files/scripts/addfirefoxdesktopfile.sh b/ostree-images/river/files/scripts/addfirefoxdesktopfile.sh new file mode 100644 index 0000000..925fc05 --- /dev/null +++ b/ostree-images/river/files/scripts/addfirefoxdesktopfile.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +sed -i 's/launcher_thunar = thunar.desktop/launcher_chromium = org.mozilla.firefox.desktop\nlauncher_thunar = thunar.desktop/' /usr/share/wayfire/wf-shell.ini diff --git a/ostree-images/river/files/scripts/installandroidudev.sh b/ostree-images/river/files/scripts/installandroidudev.sh new file mode 100644 index 0000000..ffc224f --- /dev/null +++ b/ostree-images/river/files/scripts/installandroidudev.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +curl -Lo /etc/yum.repos.d/_copr_ublue-os_staging.repo https://copr.fedorainfracloud.org/coprs/ublue-os/staging/repo/fedora-"${OS_VERSION}"/ublue-os-staging-fedora-"${OS_VERSION}".repo +rpm-ostree install android-udev-rules +rm /etc/yum.repos.d/_copr_ublue-os_staging.repo \ No newline at end of file diff --git a/ostree-images/river/files/scripts/installnvidiatoolkitpolicy.sh b/ostree-images/river/files/scripts/installnvidiatoolkitpolicy.sh new file mode 100644 index 0000000..c55ff44 --- /dev/null +++ b/ostree-images/river/files/scripts/installnvidiatoolkitpolicy.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +semodule --verbose --install /usr/share/selinux/packages/nvidia-container.pp \ No newline at end of file diff --git a/ostree-images/river/files/scripts/installproprietarypackages.sh b/ostree-images/river/files/scripts/installproprietarypackages.sh new file mode 100644 index 0000000..075cbd4 --- /dev/null +++ b/ostree-images/river/files/scripts/installproprietarypackages.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +curl -Lo /etc/yum.repos.d/negativo17-fedora-multimedia.repo https://negativo17.org/repos/fedora-multimedia.repo +sed -i '0,/enabled=1/{s/enabled=1/enabled=1\npriority=90/}' /etc/yum.repos.d/negativo17-fedora-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 \ + gstreamer1-plugin-libav \ + gstreamer1-plugin-vaapi \ No newline at end of file diff --git a/ostree-images/river/files/scripts/installrpmfusion.sh b/ostree-images/river/files/scripts/installrpmfusion.sh new file mode 100644 index 0000000..08a3411 --- /dev/null +++ b/ostree-images/river/files/scripts/installrpmfusion.sh @@ -0,0 +1,3 @@ + rpm-ostree install \ + https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-${OS_VERSION}.noarch.rpm \ + https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-${OS_VERSION}.noarch.rpm \ No newline at end of file diff --git a/ostree-images/river/files/scripts/installsignedkernel.sh b/ostree-images/river/files/scripts/installsignedkernel.sh new file mode 100644 index 0000000..e6e5b8e --- /dev/null +++ b/ostree-images/river/files/scripts/installsignedkernel.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +find /tmp/rpms + +rpm-ostree cliwrap install-to-root / + +QUALIFIED_KERNEL="$(rpm -qa | grep -P 'kernel-(\d+\.\d+\.\d+)' | sed -E 's/kernel-//')" +INCOMING_KERNEL_VERSION="$(basename -s .rpm $(ls /tmp/rpms/kernel/kernel-[0-9]*.rpm 2>/dev/null | grep -P 'kernel-(\d+\.\d+\.\d+)' | sed -E 's/kernel-//'))" + +echo "Qualified kernel: $QUALIFIED_KERNEL" +echo "Incoming kernel version: $INCOMING_KERNEL_VERSION" + + +if [[ "$INCOMING_KERNEL_VERSION" != "$QUALIFIED_KERNEL" ]]; then + echo "Installing kernel rpm from kernel-cache." + rpm-ostree override replace \ + --experimental \ + --install=zstd \ + /tmp/rpms/kernel/kernel-[0-9]*.rpm \ + /tmp/rpms/kernel/kernel-core-*.rpm \ + /tmp/rpms/kernel/kernel-modules-*.rpm +else + echo "Installing kernel files from kernel-cache." + cd /tmp + rpm2cpio /tmp/rpms/kernel/kernel-core-*.rpm | cpio -idmv + cp ./lib/modules/*/vmlinuz /usr/lib/modules/*/vmlinuz + cd / +fi \ No newline at end of file diff --git a/ostree-images/river/files/scripts/regenerateinitramfs.sh b/ostree-images/river/files/scripts/regenerateinitramfs.sh new file mode 100644 index 0000000..493804a --- /dev/null +++ b/ostree-images/river/files/scripts/regenerateinitramfs.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + + +rpm-ostree cliwrap install-to-root / + +QUALIFIED_KERNEL="$(rpm -qa | grep -P 'kernel-(\d+\.\d+\.\d+)' | sed -E 's/kernel-//')" +/usr/libexec/rpm-ostree/wrapped/dracut --no-hostonly --kver "$QUALIFIED_KERNEL" --reproducible -v --add ostree -f "/lib/modules/$QUALIFIED_KERNEL/initramfs.img" +chmod 0600 "/lib/modules/$QUALIFIED_KERNEL/initramfs.img" \ No newline at end of file diff --git a/ostree-images/river/files/scripts/removegnomedesktopentries.sh b/ostree-images/river/files/scripts/removegnomedesktopentries.sh new file mode 100644 index 0000000..ce76920 --- /dev/null +++ b/ostree-images/river/files/scripts/removegnomedesktopentries.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +rm /usr/share/applications/org.gnome.ColorProfileViewer.desktop +rm /usr/share/applications/org.gnome.Settings.desktop +rm /usr/share/applications/org.gnome.Tecla.desktop +rm /usr/share/applications/org.gnome.Tour.desktop \ No newline at end of file diff --git a/ostree-images/river/files/scripts/removeunprofessionalwallpapers.sh b/ostree-images/river/files/scripts/removeunprofessionalwallpapers.sh new file mode 100644 index 0000000..5299c94 --- /dev/null +++ b/ostree-images/river/files/scripts/removeunprofessionalwallpapers.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +for file in /usr/share/hyprland/*.png; do + if [[ $file == *anime*.png || $file == wall2.png ]]; then + rm "$file" + echo "Removed: $file" + fi +done diff --git a/ostree-images/river/files/scripts/removeunusedrepos.sh b/ostree-images/river/files/scripts/removeunusedrepos.sh new file mode 100644 index 0000000..7693d6c --- /dev/null +++ b/ostree-images/river/files/scripts/removeunusedrepos.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +rm -f /etc/yum.repos.d/negativo17-fedora-nvidia.repo +rm -f /etc/yum.repos.d/negativo17-fedora-multimedia.repo +rm -f /etc/yum.repos.d/eyecantcu-supergfxctl.repo +rm -f /etc/yum.repos.d/_copr_ublue-os-akmods.repo +rm -f /etc/yum.repos.d/nvidia-container-toolkit.repo \ No newline at end of file diff --git a/ostree-images/river/files/scripts/setdrmvariables.sh b/ostree-images/river/files/scripts/setdrmvariables.sh new file mode 100644 index 0000000..617d940 --- /dev/null +++ b/ostree-images/river/files/scripts/setdrmvariables.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + + +echo ' + +# Nvidia modesetting support. Set to 0 or comment to disable kernel modesetting +# support. This must be disabled in case of SLI Mosaic. + +options nvidia-drm modeset=1 fbdev=1 + +' > /usr/lib/modprobe.d/nvidia-modeset.conf + +cp /usr/lib/modprobe.d/nvidia-modeset.conf /etc/modprobe.d/nvidia-modeset.conf \ No newline at end of file diff --git a/ostree-images/river/files/scripts/setearlyloading.sh b/ostree-images/river/files/scripts/setearlyloading.sh new file mode 100644 index 0000000..19ec951 --- /dev/null +++ b/ostree-images/river/files/scripts/setearlyloading.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +sed -i 's@omit_drivers@force_drivers@g' /usr/lib/dracut/dracut.conf.d/99-nvidia.conf +sed -i 's@ nvidia @ i915 amdgpu nvidia @g' /usr/lib/dracut/dracut.conf.d/99-nvidia.conf diff --git a/ostree-images/river/files/scripts/sethyprlandwaybarmodules.sh b/ostree-images/river/files/scripts/sethyprlandwaybarmodules.sh new file mode 100644 index 0000000..a450b49 --- /dev/null +++ b/ostree-images/river/files/scripts/sethyprlandwaybarmodules.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +sed -i 's/sway\/workspaces/hyprland\/workspaces/' /etc/xdg/waybar/config.jsonc +sed -i 's/sway\/mode/hyprland\/submap/' /etc/xdg/waybar/config.jsonc +sed -i 's/sway\/window/hyprland\/window/' /etc/xdg/waybar/config.jsonc diff --git a/ostree-images/river/files/scripts/setriverwaybarmodules.sh b/ostree-images/river/files/scripts/setriverwaybarmodules.sh new file mode 100644 index 0000000..78d2458 --- /dev/null +++ b/ostree-images/river/files/scripts/setriverwaybarmodules.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +sed -i 's/sway\/workspaces/river\/tags/' /etc/xdg/waybar/config.jsonc +sed -i 's/sway\/mode/river\/mode/' /etc/xdg/waybar/config.jsonc +sed -i 's/sway\/window/river\/window/' /etc/xdg/waybar/config.jsonc diff --git a/ostree-images/river/files/scripts/setsddmtheming.sh b/ostree-images/river/files/scripts/setsddmtheming.sh new file mode 100644 index 0000000..d48dc60 --- /dev/null +++ b/ostree-images/river/files/scripts/setsddmtheming.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +sed -i 's/color: "black"/color: "white"/' /usr/share/sddm/themes/maldives/Main.qml +sed -i 's/id: lblPassword/id: lblPassword\ncolor: "white"/' /usr/share/sddm/themes/maldives/Main.qml +sed -i 's/id: lblName/id: lblName\ncolor: "white"/' /usr/share/sddm/themes/maldives/Main.qml +sed -i 's/id: lblSession/id: lblSession\ncolor: "white"/' /usr/share/sddm/themes/maldives/Main.qml +sed -i 's/id: lblLayout/id: lblLayout\ncolor: "white"/' /usr/share/sddm/themes/maldives/Main.qml +sed -i 's/id: errorMessage/id: errorMessage\ncolor: "white"/' /usr/share/sddm/themes/maldives/Main.qml diff --git a/ostree-images/river/files/scripts/setswaynvidiaenvironment.sh b/ostree-images/river/files/scripts/setswaynvidiaenvironment.sh new file mode 100644 index 0000000..ee79c37 --- /dev/null +++ b/ostree-images/river/files/scripts/setswaynvidiaenvironment.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +rm /etc/sway/environment + +echo ' + +# This file is a part of Fedora configuration for Sway and will be sourced +# from /usr/bin/start-sway script for all users of the system. +# User-specific variables should be placed in $XDG_CONFIG_HOME/sway/environment +# +# vim: set ft=sh: + +## Pass extra arguments to the /usr/bin/sway executable + +#SWAY_EXTRA_ARGS="$SWAY_EXTRA_ARGS --unsupported-gpu" +SWAY_EXTRA_ARGS="$SWAY_EXTRA_ARGS --unsupported-gpu -D noscanout" +#SWAY_EXTRA_ARGS="$SWAY_EXTRA_ARGS --debug" + +## Set environment variables + +# Useful variables for wlroots: +# https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/docs/env_vars.md +WLR_NO_HARDWARE_CURSORS=1 +# Setting renderer to Vulkan may fix flickering but needs the following extensions: +# - VK_EXT_image_drm_format_modifier +# - VK_EXT_physical_device_drm +# +# Source: https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/8e346922508aa3eaccd6e12f2917f6574f349843 +WLR_RENDERER=vulkan + +# Java Application compatibility +# Source: https://github.com/swaywm/wlroots/issues/1464 +_JAVA_AWT_WM_NONREPARENTING=1 + +' > /etc/sway/environment \ No newline at end of file diff --git a/ostree-images/river/files/scripts/settheming.sh b/ostree-images/river/files/scripts/settheming.sh new file mode 100644 index 0000000..32d80c5 --- /dev/null +++ b/ostree-images/river/files/scripts/settheming.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +# Removing this for now since it breaks steam layering. +# https://github.com/ublue-os/bluefin/issues/1258 +# sed -i 's/Inherits=Adwaita/Inherits=Papirus/' /usr/share/icons/default/index.theme diff --git a/ostree-images/river/files/scripts/setthunaricon.sh b/ostree-images/river/files/scripts/setthunaricon.sh new file mode 100644 index 0000000..524e16c --- /dev/null +++ b/ostree-images/river/files/scripts/setthunaricon.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -oue pipefail + +sed -i 's/Icon=org.xfce.thunar/Icon=system-file-manager/' /usr/share/applications/thunar.desktop diff --git a/ostree-images/river/files/system/etc/gdm/gdm-useradd b/ostree-images/river/files/system/etc/gdm/gdm-useradd new file mode 100755 index 0000000..6a48f30 --- /dev/null +++ b/ostree-images/river/files/system/etc/gdm/gdm-useradd @@ -0,0 +1,4 @@ +#!/usr/bin/sh + +getent group gdm > /dev/null || groupadd -r gdm +getent passwd gdm > /dev/null || useradd -r -g gdm -c "GDM Greeter Account" -d /var/lib/gdm -s /usr/sbin/nologin gdm diff --git a/ostree-images/river/files/system/etc/polkit-1/rules.d/10-udisks2.rules b/ostree-images/river/files/system/etc/polkit-1/rules.d/10-udisks2.rules new file mode 100644 index 0000000..86efcae --- /dev/null +++ b/ostree-images/river/files/system/etc/polkit-1/rules.d/10-udisks2.rules @@ -0,0 +1,8 @@ +polkit.addRule(function(action, subject) { + if ((action.id == "org.freedesktop.udisks2.filesystem-mount-system" || + action.id == "org.freedesktop.udisks2.filesystem-mount" || + action.id == "org.freedesktop.udisks2.encrypted-unlock-system") && + subject.isInGroup("wheel")) { + return polkit.Result.YES; + } +}); \ No newline at end of file diff --git a/ostree-images/river/files/system/etc/rofi.rasi b/ostree-images/river/files/system/etc/rofi.rasi new file mode 100644 index 0000000..0c9a485 --- /dev/null +++ b/ostree-images/river/files/system/etc/rofi.rasi @@ -0,0 +1,133 @@ +/*Dracula theme based on the Purple official rofi theme*/ + +configuration { + show-icons: true; + display-drun: ""; + disable-history: false; +} + +* { + font: "Jetbrains Mono 12"; + foreground: #f8f8f2; + background-color: #282a36; + active-background: #6272a4; + urgent-background: #ff5555; + urgent-foreground: #282a36; + selected-background: @active-background; + selected-urgent-background: @urgent-background; + selected-active-background: @active-background; + separatorcolor: @active-background; + bordercolor: @active-background; +} + +#window { + background-color: @background-color; + border: 3; + border-radius: 6; + border-color: @bordercolor; + padding: 15; +} +#mainbox { + border: 0; + padding: 0; +} +#message { + border: 0px; + border-color: @separatorcolor; + padding: 1px; +} +#textbox { + text-color: @foreground; +} +#listview { + fixed-height: 0; + border: 0px; + border-color: @bordercolor; + spacing: 2px ; + scrollbar: false; + padding: 2px 0px 0px ; +} +#element { + border: 0; + padding: 3px ; +} +#element.normal.normal { + background-color: @background-color; + text-color: @foreground; +} +#element.normal.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; +} +#element.normal.active { + background-color: @active-background; + text-color: @foreground; +} +#element.selected.normal { + background-color: @selected-background; + text-color: @foreground; +} +#element.selected.urgent { + background-color: @selected-urgent-background; + text-color: @foreground; +} +#element.selected.active { + background-color: @selected-active-background; + text-color: @foreground; +} +#element.alternate.normal { + background-color: @background-color; + text-color: @foreground; +} +#element.alternate.urgent { + background-color: @urgent-background; + text-color: @foreground; +} +#element.alternate.active { + background-color: @active-background; + text-color: @foreground; +} +#scrollbar { + width: 2px ; + border: 0; + handle-width: 8px ; + padding: 0; +} +#sidebar { + border: 2px dash 0px 0px ; + border-color: @separatorcolor; +} +#button.selected { + background-color: @selected-background; + text-color: @foreground; +} +#inputbar { + spacing: 0; + text-color: @foreground; + padding: 1px ; +} +#case-indicator { + spacing: 0; + text-color: @foreground; +} +#entry { + spacing: 0; + text-color: @foreground; +} +#prompt { + spacing: 0; + text-color: @foreground; +} +#inputbar { + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; +} +#textbox-prompt-colon { + expand: false; + str: ">"; + margin: 0px 0.3em 0em 0em ; + text-color: @foreground; +} +element-text, element-icon { + background-color: inherit; + text-color: inherit; +} diff --git a/ostree-images/river/files/system/etc/sddm.conf.d/theme.conf b/ostree-images/river/files/system/etc/sddm.conf.d/theme.conf new file mode 100644 index 0000000..1007848 --- /dev/null +++ b/ostree-images/river/files/system/etc/sddm.conf.d/theme.conf @@ -0,0 +1,2 @@ +[Theme] +Current=maldives \ No newline at end of file diff --git a/ostree-images/river/files/system/etc/sddm/sddm-useradd b/ostree-images/river/files/system/etc/sddm/sddm-useradd new file mode 100755 index 0000000..e44f640 --- /dev/null +++ b/ostree-images/river/files/system/etc/sddm/sddm-useradd @@ -0,0 +1,4 @@ +#!/usr/bin/sh + +getent group sddm > /dev/null || groupadd -r sddm +getent passwd sddm > /dev/null || useradd -r -g sddm -c "SDDM Greeter Account" -d /var/lib/sddm -s /usr/sbin/nologin sddm diff --git a/ostree-images/river/files/system/etc/swaylock/config b/ostree-images/river/files/system/etc/swaylock/config new file mode 100644 index 0000000..ec2afc7 --- /dev/null +++ b/ostree-images/river/files/system/etc/swaylock/config @@ -0,0 +1,7 @@ +# The defaults below could be overridden in $XDG_CONFIG_HOME/swaylock/config +# (~/.config/swaylock/config). +# +# Image path supports environment variables and shell expansions, +# e.g. image=$HOME/Pictures/default.png +image=/usr/share/backgrounds/default.png +scaling=fill diff --git a/ostree-images/river/files/system/etc/xdg/waybar/config.jsonc b/ostree-images/river/files/system/etc/xdg/waybar/config.jsonc new file mode 100644 index 0000000..e9c31cc --- /dev/null +++ b/ostree-images/river/files/system/etc/xdg/waybar/config.jsonc @@ -0,0 +1,134 @@ +// -*- mode: jsonc -*- +{ + "layer": "top", // Waybar at top layer + // "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 30, // Waybar height (to be removed for auto height) + // "width": 1280, // Waybar width + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": [ + "sway/workspaces", + "sway/mode", + "sway/scratchpad" + ], + "modules-center": [ + "sway/window" + ], + "modules-right": [ + "idle_inhibitor", + "pulseaudio", + "network", + "power-profiles-daemon", + "cpu", + "memory", + "temperature", + "backlight", + "battery", + "clock", + "tray" + ], + // Modules configuration + "sway/mode": { + "format": "{}" + }, + "sway/scratchpad": { + "format": "{icon} {count}", + "show-empty": false, + "format-icons": ["", ""], + "tooltip": true, + "tooltip-format": "{app}: {title}" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 5 + }, + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["🌑", "🌘", "🌗", "🌖", "🌕"] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-full": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "default": "", + "performance": "", + "balanced": "", + "power-saver": "" + } + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + } +} diff --git a/ostree-images/river/files/system/etc/xdg/waybar/style.css b/ostree-images/river/files/system/etc/xdg/waybar/style.css new file mode 100644 index 0000000..f69653c --- /dev/null +++ b/ostree-images/river/files/system/etc/xdg/waybar/style.css @@ -0,0 +1,286 @@ +* { + font-family: 'Noto Sans Mono', 'Font Awesome 6 Free', 'Font Awesome 6 Brands', monospace; + font-size: 13px; +} + +@define-color inactive_module_color #a9a9a9; + +window#waybar { + background-color: rgba(43, 48, 59, 0.8); + border-color: rgba(100, 114, 125, 0.5); + border-style: solid; + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar:not(.bottom):not(.left):not(.right) { + border-bottom-width: 2px; +} + +window#waybar.bottom { + border-top-width: 2px; +} + +window#waybar.hidden { + opacity: 0.2; +} + +button { + /* reset all builtin/theme styles */ + all: unset; + /* Restore some properties */ + min-height: 24px; + min-width: 16px; + padding: 0 10px; + transition: all 200ms ease-out; +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +button:hover { + background: inherit; +} + +window#waybar:not(.bottom):not(.left):not(.right) button:hover{ + box-shadow: inset 0 -2px; +} + +window#waybar.bottom button:hover { + box-shadow: inset 0 2px; +} + +/* + * Common module rules + */ + +.modules-left > widget > label, +.modules-center > widget > label, +.modules-right > widget > label { + color: inherit; + margin: 0; + padding: 0 10px; +} + +.modules-left > widget > box, +.modules-center > widget > box, +.modules-right > widget > box { + color: inherit; + margin: 0; + padding: 0; +} + +/* If the leftmost module is a box, omit left margin and padding */ +.modules-left > widget:first-child > box { + margin-left: 0; + padding-left: 0; +} + +/* If the rightmost module is a box, omit right margin and padding */ +.modules-right > widget:last-child > box { + margin-right: 0; + padding-right: 0; +} + + +/* + * Draw module underlines + */ +window#waybar:not(.bottom):not(.left):not(.right) .modules-left > widget > label, +window#waybar:not(.bottom):not(.left):not(.right) .modules-center > widget > label, +window#waybar:not(.bottom):not(.left):not(.right) .modules-right > widget > label { + box-shadow: inset 0 -2px; +} + +window#waybar.bottom .modules-left > widget > label, +window#waybar.bottom .modules-center > widget > label, +window#waybar.bottom .modules-right > widget > label { + box-shadow: inset 0 2px; +} + +window#waybar #window { + box-shadow: none; +} + +#workspaces button { + background-color: transparent; + color: #ffffff; +} + +#workspaces button:hover { + background: rgba(0, 0, 0, 0.2); +} + +#workspaces button.focused { + background-color: #64727D; +} + +window#waybar:not(.bottom):not(.left):not(.right) #workspaces button.focused { + box-shadow: inset 0 -2px; +} + +window#waybar.bottom #workspaces button.focused { + box-shadow: inset 0 2px; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + background-color: #64727D; +} + +window#waybar:not(.bottom):not(.left):not(.right) #mode { + box-shadow: inset 0 -2px; +} + +window#waybar.bottom #mode { + box-shadow: inset 0 2px; +} + +#image { + margin: 0; + padding: 0 10px; +} + +#battery.charging, #battery.plugged { + color: #32cd32; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +#battery.critical:not(.charging) { + color: #f53c3c; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#network.disconnected, +#pulseaudio.muted, +#wireplumber.muted { + color: @inactive_module_color; +} + +#tray { + padding: 0 5px; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +@keyframes needs-attention { + to { + background-color: rgba(235, 77, 75, 0.5); + } +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + animation-name: needs-attention; + animation-duration: 1s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + background-color: transparent; +} + +#idle_inhibitor { + color: @inactive_module_color; +} + +#idle_inhibitor.activated { + color: inherit; +} + +#mpd.disconnected, +#mpd.paused, +#mpd.stopped { + color: @inactive_module_color; +} + +#cpu.high, +#temperature.critical { + color: #eb4d4b; +} + +#language { + min-width: 16px; +} + +#keyboard-state { + min-width: 16px; +} + +#keyboard-state > label { + padding: 0 5px; +} + +#keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad { + background: rgba(0, 0, 0, 0.2); +} + +#scratchpad.empty { + background-color: transparent; +} + + +/* + * Module colors + */ +#cpu { + color: #2ecc71; +} + +#memory { + color: #ba55d3; +} + +#disk { + color: #964B00; +} + +#backlight { + color: #90b1b1; +} + +#network { + color: #00bfff; +} + +#pulseaudio, +#wireplumber { + color: #f1c40f; +} + +#temperature { + color: #f0932b; +} + +#mpd { + color: #66cc99; +} + +#mpd.paused { + color: #51a37a; +} + +#language { + color: #00b093; +} + +#keyboard-state { + color: #97e1ad; +} \ No newline at end of file diff --git a/ostree-images/river/files/system/etc/xdg/waybar/waybar_config_source.txt b/ostree-images/river/files/system/etc/xdg/waybar/waybar_config_source.txt new file mode 100644 index 0000000..09a2308 --- /dev/null +++ b/ostree-images/river/files/system/etc/xdg/waybar/waybar_config_source.txt @@ -0,0 +1 @@ +https://gitlab.com/fedora/sigs/sway/sway-config-fedora/-/merge_requests/25 \ No newline at end of file diff --git a/ostree-images/river/files/system/hyprland/etc/environment b/ostree-images/river/files/system/hyprland/etc/environment new file mode 100644 index 0000000..600c6f6 --- /dev/null +++ b/ostree-images/river/files/system/hyprland/etc/environment @@ -0,0 +1,2 @@ +GTK_THEME=Adwaita:dark +QT_STYLE_OVERRIDE=adwaita-dark diff --git a/ostree-images/river/files/system/hyprland/etc/skel/.config/xfce4/helpers.rc b/ostree-images/river/files/system/hyprland/etc/skel/.config/xfce4/helpers.rc new file mode 100644 index 0000000..5226528 --- /dev/null +++ b/ostree-images/river/files/system/hyprland/etc/skel/.config/xfce4/helpers.rc @@ -0,0 +1 @@ +TerminalEmulator=kitty diff --git a/ostree-images/river/files/system/hyprland/etc/xdg/hypr/hypridle.conf b/ostree-images/river/files/system/hyprland/etc/xdg/hypr/hypridle.conf new file mode 100644 index 0000000..88ae37a --- /dev/null +++ b/ostree-images/river/files/system/hyprland/etc/xdg/hypr/hypridle.conf @@ -0,0 +1,34 @@ +general { + lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. +} + +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor. + on-resume = brightnessctl -r # monitor backlight restore. +} + +# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight. +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight. + on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight. +} + +listener { + timeout = 300 # 5min + on-timeout = loginctl lock-session # lock screen when timeout has passed +} + +listener { + timeout = 330 # 5.5min + on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed + on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired. +} + +listener { + timeout = 1800 # 30min + on-timeout = systemctl suspend # suspend pc +} \ No newline at end of file diff --git a/ostree-images/river/files/system/hyprland/etc/xdg/hypr/hyprlock.conf b/ostree-images/river/files/system/hyprland/etc/xdg/hypr/hyprlock.conf new file mode 100644 index 0000000..fefeff8 --- /dev/null +++ b/ostree-images/river/files/system/hyprland/etc/xdg/hypr/hyprlock.conf @@ -0,0 +1,12 @@ +widget_name { + monitor = +} + +background { + monitor = + path = /usr/share/backgrounds/default.png +} + +input-field { + monitor = +} \ No newline at end of file diff --git a/ostree-images/river/files/system/hyprland/usr/bin/starthyprland b/ostree-images/river/files/system/hyprland/usr/bin/starthyprland new file mode 100755 index 0000000..8f71ef3 --- /dev/null +++ b/ostree-images/river/files/system/hyprland/usr/bin/starthyprland @@ -0,0 +1,16 @@ +#!/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 + + +hyprland_conf="$HOME/.config/hypr/hyprland.conf" +default_conf="/usr/share/hyprland/hyprland.conf" + +if [ -f "$hyprland_conf" ]; then + Hyprland -c "$hyprland_conf" +else + Hyprland -c "$default_conf" +fi \ No newline at end of file diff --git a/ostree-images/river/files/system/hyprland/usr/share/hyprland/hyprland.conf b/ostree-images/river/files/system/hyprland/usr/share/hyprland/hyprland.conf new file mode 100644 index 0000000..f7d68c2 --- /dev/null +++ b/ostree-images/river/files/system/hyprland/usr/share/hyprland/hyprland.conf @@ -0,0 +1,195 @@ + +autogenerated = 0 +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1 + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = GTK_THEME,Adwaita:dark +env = QT_STYLE_OVERRIDE,adwaita-dark + +cursor { + no_hardware_cursors = true +} + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 4 + gaps_out = 4 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_status = master +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers + disable_splash_rendering = true +} + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +$lockCommand = hyprlock + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Q, exec, kitty +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, thunar +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, rofi -show drun +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, L, exec, $lockCommand +bind = $mainMod, F, fullscreen + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# screenshot +bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy + +# Volume and Media Control +bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 +bind = , XF86AudioLowerVolume, exec, pamixer -d 5 +bind = , XF86AudioMicMute, exec, pamixer --default-source -m +bind = , XF86AudioMute, exec, pamixer -t +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioPause, exec, playerctl play-pause +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous + +# Screen brightness +bind = , XF86MonBrightnessUp, exec, brightnessctl s +5% +bind = , XF86MonBrightnessDown, exec, brightnessctl s 5%- + +# Keyboard backlight +bind = , xf86KbdBrightnessUp, exec, brightnessctl -d *::kbd_backlight set +33% +bind = , xf86KbdBrightnessDown, exec, brightnessctl -d *::kbd_backlight set 33%- + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + + +exec-once = /usr/libexec/xdg-desktop-portal-hyprland +exec-once = /usr/libexec/xdg-desktop-portal-gtk +exec-once = /usr/libexec/xdg-desktop-portal +exec-once = dbus-update-activation-environment --all +exec-once = /usr/bin/gnome-keyring-daemon --start --components=secrets +exec-once = exec /usr/libexec/pam_kwallet_init +exec-once = waybar & /usr/libexec/xfce-polkit & dunst & nm-applet +exec-once = hypridle -c /etc/xdg/hypr/hypridle.conf diff --git a/ostree-images/river/files/system/hyprland/usr/share/wayland-sessions/hyprland.desktop b/ostree-images/river/files/system/hyprland/usr/share/wayland-sessions/hyprland.desktop new file mode 100644 index 0000000..bb824cb --- /dev/null +++ b/ostree-images/river/files/system/hyprland/usr/share/wayland-sessions/hyprland.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Hyprland +Comment=An intelligent dynamic tiling Wayland compositor +Exec=/usr/bin/starthyprland +Type=Application \ No newline at end of file diff --git a/ostree-images/river/files/system/river/etc/environment b/ostree-images/river/files/system/river/etc/environment new file mode 100644 index 0000000..600c6f6 --- /dev/null +++ b/ostree-images/river/files/system/river/etc/environment @@ -0,0 +1,2 @@ +GTK_THEME=Adwaita:dark +QT_STYLE_OVERRIDE=adwaita-dark diff --git a/ostree-images/river/files/system/river/etc/river/init b/ostree-images/river/files/system/river/etc/river/init new file mode 100755 index 0000000..11b8970 --- /dev/null +++ b/ostree-images/river/files/system/river/etc/river/init @@ -0,0 +1,184 @@ +#!/bin/sh + +# This is the example configuration file for river. +# +# If you wish to edit this, you will probably want to copy it to +# $XDG_CONFIG_HOME/river/init or $HOME/.config/river/init first. +# +# See the river(1), riverctl(1), and rivertile(1) man pages for complete +# documentation. + +# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc. + +# Super+Shift+Return to start an instance of foot +riverctl map normal Super+Shift Return spawn foot + +# launcher +riverctl map normal Super D spawn "rofi -show drun" + +# Super+Q to close the focused view +riverctl map normal Super Q close + +# Super+Shift+E to exit river +riverctl map normal Super+Shift E exit + +# Super+J and Super+K to focus the next/previous view in the layout stack +riverctl map normal Super J focus-view next +riverctl map normal Super K focus-view previous + +# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous +# view in the layout stack +riverctl map normal Super+Shift J swap next +riverctl map normal Super+Shift K swap previous + +# Super+Period and Super+Comma to focus the next/previous output +riverctl map normal Super Period focus-output next +riverctl map normal Super Comma focus-output previous + +# Super+Shift+{Period,Comma} to send the focused view to the next/previous output +riverctl map normal Super+Shift Period send-to-output next +riverctl map normal Super+Shift Comma send-to-output previous + +# Super+Return to bump the focused view to the top of the layout stack +riverctl map normal Super Return zoom + +# Super+H and Super+L to decrease/increase the main ratio of rivertile(1) +riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05" +riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05" + +# Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1) +riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1" +riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1" + +# Super+Alt+{H,J,K,L} to move views +riverctl map normal Super+Alt H move left 100 +riverctl map normal Super+Alt J move down 100 +riverctl map normal Super+Alt K move up 100 +riverctl map normal Super+Alt L move right 100 + +# Super+Alt+Control+{H,J,K,L} to snap views to screen edges +riverctl map normal Super+Alt+Control H snap left +riverctl map normal Super+Alt+Control J snap down +riverctl map normal Super+Alt+Control K snap up +riverctl map normal Super+Alt+Control L snap right + +# Super+Alt+Shift+{H,J,K,L} to resize views +riverctl map normal Super+Alt+Shift H resize horizontal -100 +riverctl map normal Super+Alt+Shift J resize vertical 100 +riverctl map normal Super+Alt+Shift K resize vertical -100 +riverctl map normal Super+Alt+Shift L resize horizontal 100 + +# Super + Left Mouse Button to move views +riverctl map-pointer normal Super BTN_LEFT move-view + +# Super + Right Mouse Button to resize views +riverctl map-pointer normal Super BTN_RIGHT resize-view + +# Super + Middle Mouse Button to toggle float +riverctl map-pointer normal Super BTN_MIDDLE toggle-float + +for i in $(seq 1 9) +do + tags=$((1 << ($i - 1))) + + # Super+[1-9] to focus tag [0-8] + riverctl map normal Super $i set-focused-tags $tags + + # Super+Shift+[1-9] to tag focused view with tag [0-8] + riverctl map normal Super+Shift $i set-view-tags $tags + + # Super+Control+[1-9] to toggle focus of tag [0-8] + riverctl map normal Super+Control $i toggle-focused-tags $tags + + # Super+Shift+Control+[1-9] to toggle tag [0-8] of focused view + riverctl map normal Super+Shift+Control $i toggle-view-tags $tags +done + +# Super+0 to focus all tags +# Super+Shift+0 to tag focused view with all tags +all_tags=$(((1 << 32) - 1)) +riverctl map normal Super 0 set-focused-tags $all_tags +riverctl map normal Super+Shift 0 set-view-tags $all_tags + +# Super+Space to toggle float +riverctl map normal Super Space toggle-float + +# Super+F to toggle fullscreen +riverctl map normal Super F toggle-fullscreen + +# Super+{Up,Right,Down,Left} to change layout orientation +riverctl map normal Super Up send-layout-cmd rivertile "main-location top" +riverctl map normal Super Right send-layout-cmd rivertile "main-location right" +riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom" +riverctl map normal Super Left send-layout-cmd rivertile "main-location left" + +# Declare a passthrough mode. This mode has only a single mapping to return to +# normal mode. This makes it useful for testing a nested wayland compositor +riverctl declare-mode passthrough + +# Super+F11 to enter passthrough mode +riverctl map normal Super F11 enter-mode passthrough + +# Super+F11 to return to normal mode +riverctl map passthrough Super F11 enter-mode normal + +# Various media key mapping examples for both normal and locked mode which do +# not have a modifier +for mode in normal locked +do + # Eject the optical drive (well if you still have one that is) + riverctl map $mode None XF86Eject spawn 'eject -T' + + # Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer) + riverctl map $mode None XF86AudioRaiseVolume spawn 'pamixer -i 5' + riverctl map $mode None XF86AudioLowerVolume spawn 'pamixer -d 5' + riverctl map $mode None XF86AudioMute spawn 'pamixer --toggle-mute' + + # Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl) + riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause' + riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause' + riverctl map $mode None XF86AudioPrev spawn 'playerctl previous' + riverctl map $mode None XF86AudioNext spawn 'playerctl next' + + riverctl map $mode None XF86MonBrightnessUp spawn 'brightnessctl s +5%' + riverctl map $mode None XF86MonBrightnessDown spawn 'brightnessctl s 5%-' +done + +# Set background and border color +riverctl background-color 0x002b36 +riverctl border-color-focused 0x93a1a1 +riverctl border-color-unfocused 0x586e75 + +# Set keyboard repeat rate +riverctl set-repeat 50 300 + +# Make all views with an app-id that starts with "float" and title "foo" start floating. +riverctl rule-add -app-id 'float*' -title 'foo' float + +# Make all views with app-id "bar" and any title use client-side decorations +riverctl rule-add -app-id "bar" csd + +# Set the default layout generator to be rivertile and start it. +# River will send the process group of the init executable SIGTERM on exit. +riverctl default-layout rivertile +rivertile -view-padding 2 -outer-padding 2 & + +riverctl focus-follows-cursor always + +riverctl map normal Super Escape spawn "swaylock -f" + +riverctl map normal None Print spawn 'grim -g "$(slurp -d)" - | wl-copy' + +riverctl spawn dunst +riverctl spawn pipewire +riverctl spawn pipewire-pulse +riverctl spawn wireplumber +riverctl spawn "/usr/libexec/xfce-polkit" +riverctl spawn waybar +riverctl spawn kanshi +riverctl spawn nm-applet + +exec dbus-update-activation-environment --all +exec gnome-keyring-daemon --start --components=secrets +exec /usr/libexec/pam_kwallet_init + diff --git a/ostree-images/river/files/system/river/etc/skel/.config/xfce4/helpers.rc b/ostree-images/river/files/system/river/etc/skel/.config/xfce4/helpers.rc new file mode 100644 index 0000000..e074ab8 --- /dev/null +++ b/ostree-images/river/files/system/river/etc/skel/.config/xfce4/helpers.rc @@ -0,0 +1 @@ +TerminalEmulator=foot diff --git a/ostree-images/river/files/system/river/usr/bin/startriver b/ostree-images/river/files/system/river/usr/bin/startriver new file mode 100755 index 0000000..4ce906c --- /dev/null +++ b/ostree-images/river/files/system/river/usr/bin/startriver @@ -0,0 +1,15 @@ +#!/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 + + +river_conf="$HOME/.config/river/init" + +if [ -f "$river_conf" ]; then + river +else + XDG_CONFIG_HOME=/usr/etc/ river +fi diff --git a/ostree-images/river/files/system/river/usr/share/wayland-sessions/river.desktop b/ostree-images/river/files/system/river/usr/share/wayland-sessions/river.desktop new file mode 100644 index 0000000..701171f --- /dev/null +++ b/ostree-images/river/files/system/river/usr/share/wayland-sessions/river.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=River +Comment=A dynamic tiling wayland compositor +DesktopNames=river +Exec=/usr/bin/startriver +Type=Application diff --git a/ostree-images/river/files/system/sway/etc/skel/.config/xfce4/helpers.rc b/ostree-images/river/files/system/sway/etc/skel/.config/xfce4/helpers.rc new file mode 100644 index 0000000..e074ab8 --- /dev/null +++ b/ostree-images/river/files/system/sway/etc/skel/.config/xfce4/helpers.rc @@ -0,0 +1 @@ +TerminalEmulator=foot diff --git a/ostree-images/river/files/system/sway/etc/sway/config.d/90-keyring.conf b/ostree-images/river/files/system/sway/etc/sway/config.d/90-keyring.conf new file mode 100644 index 0000000..d1759b7 --- /dev/null +++ b/ostree-images/river/files/system/sway/etc/sway/config.d/90-keyring.conf @@ -0,0 +1,3 @@ +exec dbus-update-activation-environment --all +exec /usr/bin/gnome-keyring-daemon --start --components=secrets +exec /usr/libexec/pam_kwallet_init diff --git a/ostree-images/river/files/system/sway/etc/sway/config.d/99-taptoclick.conf b/ostree-images/river/files/system/sway/etc/sway/config.d/99-taptoclick.conf new file mode 100644 index 0000000..7dd212a --- /dev/null +++ b/ostree-images/river/files/system/sway/etc/sway/config.d/99-taptoclick.conf @@ -0,0 +1,3 @@ +input * { + tap enabled +} \ No newline at end of file diff --git a/ostree-images/river/files/system/usr/share/sddm/themes/maldives/background.jpg b/ostree-images/river/files/system/usr/share/sddm/themes/maldives/background.jpg new file mode 100644 index 0000000..5df9316 Binary files /dev/null and b/ostree-images/river/files/system/usr/share/sddm/themes/maldives/background.jpg differ diff --git a/ostree-images/river/files/system/usr/share/sddm/themes/maldives/rectangle.png b/ostree-images/river/files/system/usr/share/sddm/themes/maldives/rectangle.png new file mode 100644 index 0000000..909a9eb Binary files /dev/null and b/ostree-images/river/files/system/usr/share/sddm/themes/maldives/rectangle.png differ diff --git a/ostree-images/river/files/system/usr/share/ublue-os/just/50-brew.just b/ostree-images/river/files/system/usr/share/ublue-os/just/50-brew.just new file mode 100644 index 0000000..af36147 --- /dev/null +++ b/ostree-images/river/files/system/usr/share/ublue-os/just/50-brew.just @@ -0,0 +1,24 @@ +alias brew := install-brew + +# Install Homebrew | https://brew.sh +install-brew: + #!/usr/bin/env bash + source /usr/lib/ujust/ujust.sh + if [[ ! -f "/var/home/linuxbrew/.linuxbrew/bin" || ! -x "/var/home/linuxbrew/.linuxbrew/bin/brew" ]]; then + echo "${b}Brew Installation${n}" + echo "Please ${b}IGNORE${n} everything the installer tells you to do at the end" + echo "We have already done it for you! You just need to close and re-open the terminal after installation" + echo "Do you understand?" + echo "Please type in \"YES I UNDERSTAND\" and press enter" + read ACCEPT + if [ "$ACCEPT" == "YES I UNDERSTAND" ]; then + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + else + echo "Capitalization matters when you type \"YES I UNDERSTAND\"" + fi + fi + +# Removes homebrew from system +remove-brew: + echo "Removing homebrew ..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" \ No newline at end of file diff --git a/ostree-images/river/files/system/wayfire/etc/environment b/ostree-images/river/files/system/wayfire/etc/environment new file mode 100644 index 0000000..5d30cfc --- /dev/null +++ b/ostree-images/river/files/system/wayfire/etc/environment @@ -0,0 +1,3 @@ +WAYFIRE_CONFIG_FILE=/usr/share/wayfire/wayfire.ini +GTK_THEME=Adwaita:dark +QT_STYLE_OVERRIDE=adwaita-dark diff --git a/ostree-images/river/files/system/wayfire/etc/skel/.config/xfce4/helpers.rc b/ostree-images/river/files/system/wayfire/etc/skel/.config/xfce4/helpers.rc new file mode 100644 index 0000000..e074ab8 --- /dev/null +++ b/ostree-images/river/files/system/wayfire/etc/skel/.config/xfce4/helpers.rc @@ -0,0 +1 @@ +TerminalEmulator=foot diff --git a/ostree-images/river/files/system/wayfire/usr/bin/startwayfire b/ostree-images/river/files/system/wayfire/usr/bin/startwayfire new file mode 100755 index 0000000..2faf625 --- /dev/null +++ b/ostree-images/river/files/system/wayfire/usr/bin/startwayfire @@ -0,0 +1,16 @@ +#!/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 + + +wayfire_conf="$HOME/.config/wayfire.ini" +default_conf="/usr/share/wayfire/wayfire.ini" + +if [ -f "$wayfire_conf" ]; then + wayfire -c "$wayfire_conf" +else + wayfire -c "$default_conf" +fi \ No newline at end of file diff --git a/ostree-images/river/files/system/wayfire/usr/share/wayfire/wayfire.ini b/ostree-images/river/files/system/wayfire/usr/share/wayfire/wayfire.ini new file mode 100644 index 0000000..ca4abc8 --- /dev/null +++ b/ostree-images/river/files/system/wayfire/usr/share/wayfire/wayfire.ini @@ -0,0 +1,332 @@ +# Default config for Wayfire +# +# Copy this to ~/.config/wayfire.ini and edit it to your liking. +# +# Take the tutorial to get started. +# https://github.com/WayfireWM/wayfire/wiki/Tutorial +# +# Read the Configuration document for a complete reference. +# https://github.com/WayfireWM/wayfire/wiki/Configuration + +# Input configuration ────────────────────────────────────────────────────────── + +# Example configuration: +# +# [input] +# xkb_layout = us,fr +# xkb_variant = dvorak,bepo +# xkb_options = grp:win_space_toggle +# +# See Input options for a complete reference. +# https://github.com/WayfireWM/wayfire/wiki/Configuration#input + +# Output configuration ───────────────────────────────────────────────────────── + +# Example configuration: +# +# [output:eDP-1] +# mode = 1920x1080@60000 +# position = 0,0 +# transform = normal +# scale = 1.000000 +# +# You can get the names of your outputs with wlr-randr. +# https://github.com/emersion/wlr-randr +# +# See also kanshi for configuring your outputs automatically. +# https://wayland.emersion.fr/kanshi/ +# +# See Output options for a complete reference. +# https://github.com/WayfireWM/wayfire/wiki/Configuration#output + +# Core options ───────────────────────────────────────────────────────────────── + +[core] + +# List of plugins to be enabled. +# See the Configuration document for a complete list. +plugins = \ + alpha \ + animate \ + autostart \ + command \ + cube \ + decoration \ + expo \ + fast-switcher \ + fisheye \ + foreign-toplevel \ + grid \ + gtk-shell \ + idle \ + invert \ + move \ + oswitch \ + place \ + resize \ + shortcuts-inhibit \ + switcher \ + vswitch \ + wayfire-shell \ + window-rules \ + wm-actions \ + wobbly \ + wrot \ + zoom + +# Note: [blur] is not enabled by default, because it can be resource-intensive. +# Feel free to add it to the list if you want it. +# You can find its documentation here: +# https://github.com/WayfireWM/wayfire/wiki/Configuration#blur + +# Close focused window. +close_top_view = KEY_Q | KEY_F4 + +# Workspaces arranged into a grid: 3 × 3. +vwidth = 3 +vheight = 3 + +# Prefer client-side decoration or server-side decoration +preferred_decoration_mode = client + +# Mouse bindings ─────────────────────────────────────────────────────────────── + +# Drag windows by holding down Super and left mouse button. +[move] +activate = BTN_LEFT + +# Resize them with right mouse button + Super. +[resize] +activate = BTN_RIGHT + +# Zoom in the desktop by scrolling + Super. +[zoom] +modifier = + +# Change opacity by scrolling with Super + Alt. +[alpha] +modifier = + +# Rotate windows with the mouse. +[wrot] +activate = BTN_RIGHT + +# Fisheye effect. +[fisheye] +toggle = KEY_F + +# Startup commands ───────────────────────────────────────────────────────────── + +[autostart] + +# Automatically start background and panel. +# Set to false if you want to override the default clients. +autostart_wf_shell = false +background = wf-background -c /usr/share/wayfire/wf-shell.ini +panel = wf-panel -c /usr/share/wayfire/wf-shell.ini + +# Set the wallpaper, start a panel and dock if you want one. +# https://github.com/WayfireWM/wf-shell +# +# These are started by the autostart_wf_shell option above. +# +# background = wf-background +# panel = wf-panel +# dock = wf-dock + +# Output configuration +# https://wayland.emersion.fr/kanshi/ +outputs = kanshi + +# Notifications +notifications = dunst + +# Screen color temperature +# https://sr.ht/~kennylevinsen/wlsunset/ +gamma = wlsunset + +# Idle configuration +# https://github.com/swaywm/swayidle +# https://github.com/swaywm/swaylock +idle = swayidle before-sleep 'swaylock' + +# XDG desktop portal +# Needed by some GTK applications +portal = /usr/libexec/xdg-desktop-portal-gtk + +polkit = /usr/libexec/xfce-polkit + +GTK_Theme=adw-gtk3-dark +GDK_BACKEND=wayland + +nm_applet = nm-applet --indicator +bt_applet = blueman-applet + +0_environment = dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY XAUTHORITY +keyring = /usr/bin/gnome-keyring-daemon --start --components=secrets +kwallet = exec /usr/libexec/pam_kwallet_init + +# Example configuration: +# +# [idle] +# toggle = KEY_Z +# screensaver_timeout = 300 +# dpms_timeout = 600 +# +# Disables the compositor going idle with Super + z. +# This will lock your screen after 300 seconds of inactivity, then turn off +# your displays after another 300 seconds. + +# Applications ───────────────────────────────────────────────────────────────── + +[command] + +# Start a terminal +# https://github.com/alacritty/alacritty +binding_terminal = KEY_ENTER +command_terminal = foot + +# Start your launcher +binding_launcher = KEY_ENTER +command_launcher = rofi -show drun + +# Screen locker +# https://github.com/swaywm/swaylock +binding_lock = KEY_ESC +command_lock = swaylock + +# Logout +# https://github.com/ArtsyMacaw/wlogout +binding_logout = KEY_ESC +command_logout = wlogout + +# Screenshots +# https://wayland.emersion.fr/grim/ +# https://wayland.emersion.fr/slurp/ +binding_screenshot = KEY_PRINT +command_screenshot = grim $(date '+%F_%T').webp +binding_screenshot_interactive = KEY_PRINT +command_screenshot_interactive = slurp | grim -g - $(date '+%F_%T').webp + +# Volume controls +# https://alsa-project.org +repeatable_binding_volume_up = KEY_VOLUMEUP +command_volume_up = amixer set Master 5%+ +repeatable_binding_volume_down = KEY_VOLUMEDOWN +command_volume_down = amixer set Master 5%- +binding_mute = KEY_MUTE +command_mute = amixer set Master toggle + +# Screen brightness +repeatable_binding_light_up = KEY_BRIGHTNESSUP +command_light_up = brightnessctl s +5% +repeatable_binding_light_down = KEY_BRIGHTNESSDOWN +command_light_down = brightnessctl s 5%- + +# Windows ────────────────────────────────────────────────────────────────────── + +# Actions related to window management functionalities. +# +# Example configuration: +# +# [wm-actions] +# toggle_fullscreen = KEY_F +# toggle_always_on_top = KEY_X +# toggle_sticky = KEY_X + +# Position the windows in certain regions of the output. +[grid] +# +# ⇱ ↑ ⇲ │ 7 8 9 +# ← f → │ 4 5 6 +# ⇱ ↓ ⇲ d │ 1 2 3 0 +# ‾ ‾ +slot_bl = KEY_KP1 +slot_b = KEY_KP2 +slot_br = KEY_KP3 +slot_l = KEY_LEFT | KEY_KP4 +slot_c = KEY_UP | KEY_KP5 +slot_r = KEY_RIGHT | KEY_KP6 +slot_tl = KEY_KP7 +slot_t = KEY_KP8 +slot_tr = KEY_KP9 +# Restore default. +restore = KEY_DOWN | KEY_KP0 + +# Change active window with an animation. +[switcher] +next_view = KEY_TAB +prev_view = KEY_TAB + +# Simple active window switcher. +[fast-switcher] +activate = KEY_ESC + +# Workspaces ─────────────────────────────────────────────────────────────────── + +# Switch to workspace. +[vswitch] +binding_left = KEY_LEFT +binding_down = KEY_DOWN +binding_up = KEY_UP +binding_right = KEY_RIGHT +# Move the focused window with the same key-bindings, but add Shift. +with_win_left = KEY_LEFT +with_win_down = KEY_DOWN +with_win_up = KEY_UP +with_win_right = KEY_RIGHT + +# Show the current workspace row as a cube. +[cube] +activate = BTN_LEFT +# Switch to the next or previous workspace. +#rotate_left = KEY_H +#rotate_right = KEY_L + +# Show an overview of all workspaces. +[expo] +toggle = +# Select a workspace. +# Workspaces are arranged into a grid of 3 × 3. +# The numbering is left to right, line by line. +# +# ⇱ k ⇲ +# h ⏎ l +# ⇱ j ⇲ +# ‾ ‾ +# See core.vwidth and core.vheight for configuring the grid. +select_workspace_1 = KEY_1 +select_workspace_2 = KEY_2 +select_workspace_3 = KEY_3 +select_workspace_4 = KEY_4 +select_workspace_5 = KEY_5 +select_workspace_6 = KEY_6 +select_workspace_7 = KEY_7 +select_workspace_8 = KEY_8 +select_workspace_9 = KEY_9 + +# Outputs ────────────────────────────────────────────────────────────────────── + +# Change focused output. +[oswitch] +# Switch to the next output. +next_output = KEY_O +# Same with the window. +next_output_with_win = KEY_O + +# Invert the colors of the whole output. +[invert] +toggle = KEY_I + +# Rules ──────────────────────────────────────────────────────────────────────── + +# Example configuration: +# +# [window-rules] +# maximize_alacritty = on created if app_id is "Alacritty" then maximize +# +# You can get the properties of your applications with the following command: +# $ WAYLAND_DEBUG=1 alacritty 2>&1 | kak +# +# See Window rules for a complete reference. +# https://github.com/WayfireWM/wayfire/wiki/Configuration#window-rules diff --git a/ostree-images/river/files/system/wayfire/usr/share/wayfire/wf-shell.ini b/ostree-images/river/files/system/wayfire/usr/share/wayfire/wf-shell.ini new file mode 100644 index 0000000..3d89c7f --- /dev/null +++ b/ostree-images/river/files/system/wayfire/usr/share/wayfire/wf-shell.ini @@ -0,0 +1,175 @@ +[background] +# Full path to image or directory of images +# image = /usr/share/wayfire/wallpaper.jpg +# Whether to scale images or preserve background ratio +preserve_aspect = 0 +# In the case of directory, timeout between changing backgrounds, in seconds +cycle_timeout = 150 +# In the case of directory, whether or not to randomize images +randomize = 0 + +[panel] +# widgets_* is a space-separated list of widgets to be displayed +# at the corresponding part of the panel +# Supported widgets are: launchers clock network battery window-list volume menu notifications tray command-output +# A special widgets is spacing widgets, it can be used to add padding everywhere on the panel +# To use it, just append the amount of pixels you want as a padding +# to the word "spacing" and use it as a plugin +widgets_left = menu window-list +widgets_center = launchers +widgets_right = notifications volume battery tray clock + +# The minimal size of the panel. Note that some widgets might force panel bigger than this size. +# All widgets also have individual settings for size +# Changing this requires a panel restart +minimal_height = 24 + +# automatically hide when pointer isn't over the panel +autohide = false + +# time in milliseconds to wait before hiding +autohide_duration = 300 + +# layer can be top, bottom, overlay or background +layer = top + +# where to position panel +# Possible values are only "top" and "bottom" +position = bottom + +# set the background color. +background_color = gtk_headerbar # match the color of a GtkHeaderbar +#background_color = $555555 # Hex color, for example $FFFFFF for white +#background_color = 0.033 0.041 0.047 0.9 # RGBA color, 1.0 0.0 0.0 0.5 for semi-transparent red + + +# Configuration for the launchers widget +# can be a desktop file +launcher_terminal1 = foot.desktop + +# or a combination of bash command + icon +# launcher_cmd_1 = env XDG_CURRENT_DESKTOP=GNOME gnome-control-center +# launcher_icon_1 = /usr/share/icons/gnome/48x48/categories/preferences-system.png + +launcher_thunar = thunar.desktop +launcher_wcm = wayfire-config-manager.desktop + +# spacing between widgets, can be negative +launchers_spacing = 4 + +# size of the launcher icon +launchers_size = 42 + + +# Configuration for the clock widget +# clock format, uses the Glib Time formatting +clock_format = %e %a %H:%M +# clock font +clock_font = DejaVu Sans:style=Book 12 + + +# Configuration for the battery widget +# How much info to display: +# 0 -> only icon, 1 -> icon + percentage, 2 -> full info +battery_status = 1 +battery_icon_size = 32 + +# invert the colors of the icon, needs to be adjusted according to the size of the icons, +# because some icon sizes are white, and others are black +battery_icon_invert = 1 + +# Font to use in the battery percentage indicator +battery_font = default + + +# Configuration for the network widget +# Whether to display connection details, for ex. Wifi AP name +network_status = 1 + +network_status_font = DejaVu Sans:style=Book 10 +# network_icon_size = 30 +network_icon_invert_color = 1 + +# whether to colour the wifi signal strength +network_status_use_color = yes + + +# Configuration for the menu widget +# whether to enable fuzzy search in the menu +menu_fuzzy_search = 1 + +# Minimum width and height for the contents of the menu. +# Can be useful for small screens and/or high DPI scaling. +menu_min_content_width = 500 +menu_min_content_height = 500 + +# image file to use as the menu icon +menu_icon = /usr/share/icons/Paper/32x32/places/fedora.png + +# command run when the logout button is clicked +menu_logout_command = + + +# Configuration for the volume widget +# Number of seconds volume popover will display +# after scrolling on the volume icon +volume_display_timeout = 2.5 + + +# Configuration for the tray widget +# Amount of smooth scrolling needed to trigger one scroll wheel step +tray_smooth_scrolling_threshold = 5 + +# The icon size to use for tray icons +tray_icon_size = 32 + +# Enable showing of the tray menu when using middle-click, otherwise, right-click is used +tray_menu_on_middle_click = false + + +# Configuration for the notifications widget +notifications_autohide_timeout = 2.5 + +# Show criticial notifications in do-not-disturb mode, which is triggered by middle-clicking the DND button. +notifications_critical_in_dnd = true +notifications_icon_size = 32 + + +# Configuration for the command output widget, there may be multiple commands. +# The command output widget is used to display the output of a shell command, which can be periodically refreshed. +# For example, showing the current CPU temperature by parsing `sensors` output (command may need adjustment for your particular sensor name!) + +# Maximum amount of characters to show in the panel, if the command's output is too long +commands_output_max_chars = 10 + +# A list of commands + attributes, multiple commands can be declared after one another. The commands are numbered 1, 2, 3, etc. + +# The command to be run, uncomment and adapt according to the output of sensors on your system +#command_output_1 = sensors | grep Package | cut -d ' ' -f 5 + +# A command which is run and whose output is displayed in a tooltip when hovering the widget +#command_output_tooltip_1 = sensors + +# Refresh the output of the command ever 1s. Can be set to -1 for manual updates with the mouse, or 0 for a single update at startup. +# command_output_period_1 = 1 + +# Optionally, an icon can be displayed next to the text. Leave empty (first option) for no icon. +# command_output_icon_1 = +# command_output_icon_1 = text-x-script + +# Position and size for the icon, if it is not empty +#command_output_icon_size_1 = 32 +#command_output_icon_position_1 = left # or right, top, bottom + +[dock] +# time in milliseconds to wait before hiding +autohide_duration = 300 + +# vertical alignment on the desktop +# the only possible values are "top" and "bottom" +position = bottom + +# For applications that aren't installed/configured properly, you can manually +# set icons for given app_id's. Below is an example for IntelliJ IDEA +# icon_mapping_jetbrains-idea-ce = //idea.png + diff --git a/ostree-images/river/files/system/wayfire/usr/share/wayland-sessions/wayfire.desktop b/ostree-images/river/files/system/wayfire/usr/share/wayland-sessions/wayfire.desktop new file mode 100644 index 0000000..59d4d89 --- /dev/null +++ b/ostree-images/river/files/system/wayfire/usr/share/wayland-sessions/wayfire.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Wayfire +Exec=/usr/bin/startwayfire +Icon= +Type=Application +DesktopNames=Wayfire diff --git a/ostree-images/river/files/systemd/system/gdm-boot.service b/ostree-images/river/files/systemd/system/gdm-boot.service new file mode 100644 index 0000000..8c147ea --- /dev/null +++ b/ostree-images/river/files/systemd/system/gdm-boot.service @@ -0,0 +1,16 @@ +# Creates an GDM user before GDM runs. +# See: +# - https://github.com/ublue-os/cinnamon/blob/bf44562ddbed670cdd0d03a45ea08bdb8a6e96a7/system_files/usr/lib/systemd/system/ublue-lightdm-workaround.service#L4 +# - https://github.com/ublue-os/main/issues/224#issuecomment-1987851271 + +[Unit] +Description=Create GDM user on system boot +Before=gdm.service + +[Service] +Type=oneshot +ExecStart=/usr/etc/gdm/gdm-useradd +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/ostree-images/river/files/systemd/system/sddm-boot.service b/ostree-images/river/files/systemd/system/sddm-boot.service new file mode 100644 index 0000000..4436e18 --- /dev/null +++ b/ostree-images/river/files/systemd/system/sddm-boot.service @@ -0,0 +1,16 @@ +# Creates an SDDM user before SDDM runs. +# See: +# - https://github.com/ublue-os/cinnamon/blob/bf44562ddbed670cdd0d03a45ea08bdb8a6e96a7/system_files/usr/lib/systemd/system/ublue-lightdm-workaround.service#L4 +# - https://github.com/ublue-os/main/issues/224#issuecomment-1987851271 + +[Unit] +Description=Create SDDM user on system boot +Before=sddm.service + +[Service] +Type=oneshot +ExecStart=/usr/etc/sddm/sddm-useradd +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/ostree-images/river/modules/wayblue-signing/module.yml b/ostree-images/river/modules/wayblue-signing/module.yml new file mode 100644 index 0000000..b234261 --- /dev/null +++ b/ostree-images/river/modules/wayblue-signing/module.yml @@ -0,0 +1,4 @@ +name: wayblue-signing +shortdesc: The signing module is used to install the required signing policies for cosign image verification with rpm-ostree and bootc. +example: | + type: wayblue-signing # this sets up the proper policy & signing files for signed images to work fully \ No newline at end of file diff --git a/ostree-images/river/modules/wayblue-signing/policy.json b/ostree-images/river/modules/wayblue-signing/policy.json new file mode 100644 index 0000000..3b3ed88 --- /dev/null +++ b/ostree-images/river/modules/wayblue-signing/policy.json @@ -0,0 +1,25 @@ +{ + "default": [ + { + "type": "reject" + } + ], + "transports": { + "docker": { + "registry.access.redhat.com": [ + { + "type": "signedBy", + "keyType": "GPGKeys", + "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" + } + ], + "registry.redhat.io": [ + { + "type": "signedBy", + "keyType": "GPGKeys", + "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" + } + ] + } + } +} \ No newline at end of file diff --git a/ostree-images/river/modules/wayblue-signing/registry-config.yml b/ostree-images/river/modules/wayblue-signing/registry-config.yml new file mode 100644 index 0000000..a6f4927 --- /dev/null +++ b/ostree-images/river/modules/wayblue-signing/registry-config.yml @@ -0,0 +1,3 @@ +docker: + ghcr.io/IMAGENAME: + use-sigstore-attachments: true \ No newline at end of file diff --git a/ostree-images/river/modules/wayblue-signing/wayblue-signing.sh b/ostree-images/river/modules/wayblue-signing/wayblue-signing.sh new file mode 100644 index 0000000..1ec9de0 --- /dev/null +++ b/ostree-images/river/modules/wayblue-signing/wayblue-signing.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# Tell build process to exit if there are any errors. +set -euo pipefail + +CONTAINER_DIR="/usr/etc/containers" +MODULE_DIRECTORY="${MODULE_DIRECTORY:-"/tmp/modules"}" +IMAGE_NAME_FILE="${IMAGE_NAME//\//_}" +IMAGE_REGISTRY_TITLE=$(echo "$IMAGE_REGISTRY" | cut -d'/' -f2-) + +echo "Setting up container signing in policy.json and cosign.yaml for $IMAGE_NAME" +echo "Registry to write: $IMAGE_REGISTRY" + +if ! [ -d "$CONTAINER_DIR" ]; then + mkdir -p "$CONTAINER_DIR" +fi + +if ! [ -d $CONTAINER_DIR/registries.d ]; then + mkdir -p "$CONTAINER_DIR/registries.d" +fi + +if ! [ -d "/usr/etc/pki/containers" ]; then + mkdir -p "/usr/etc/pki/containers" +fi + +if ! [ -f "$CONTAINER_DIR/policy.json" ]; then + cp "$MODULE_DIRECTORY/signing/policy.json" "$CONTAINER_DIR/policy.json" +fi + +mv "/usr/etc/pki/containers/$IMAGE_NAME.pub" "/usr/etc/pki/containers/$IMAGE_REGISTRY_TITLE.pub" + +POLICY_FILE="$CONTAINER_DIR/policy.json" + +yq -i -o=j '.transports.docker |= + {"'"$IMAGE_REGISTRY"'": [ + { + "type": "sigstoreSigned", + "keyPath": "/usr/etc/pki/containers/'"$IMAGE_REGISTRY_TITLE"'.pub", + "signedIdentity": { + "type": "matchRepository" + } + } + ] + } ++ .' "$POLICY_FILE" + +mv "$MODULE_DIRECTORY/signing/registry-config.yaml" "$CONTAINER_DIR/registries.d/$IMAGE_REGISTRY_TITLE.yaml" +sed -i "s ghcr.io/IMAGENAME $IMAGE_REGISTRY g" "$CONTAINER_DIR/registries.d/$IMAGE_REGISTRY_TITLE.yaml"