Compare commits

..

1 commit

66 changed files with 2201 additions and 118 deletions

View file

@ -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: |

View file

@ -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}}

View file

@ -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 .

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
[org.gnome.desktop.interface]
gtk-theme='Adwaita-dark'
color-scheme='prefer-dark'
icon-theme='Papirus'

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;
}
});

View file

@ -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;
}

View file

@ -0,0 +1,2 @@
[Theme]
Current=maldives

View file

@ -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

View file

@ -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

View file

@ -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": "<span style=\"italic\">{}</span>"
},
"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": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"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"
}
}

View file

@ -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;
}

View file

@ -0,0 +1 @@
https://gitlab.com/fedora/sigs/sway/sway-config-fedora/-/merge_requests/25

View file

@ -0,0 +1,2 @@
GTK_THEME=Adwaita:dark
QT_STYLE_OVERRIDE=adwaita-dark

View file

@ -0,0 +1 @@
TerminalEmulator=kitty

View file

@ -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
}

View file

@ -0,0 +1,12 @@
widget_name {
monitor =
}
background {
monitor =
path = /usr/share/backgrounds/default.png
}
input-field {
monitor =
}

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,5 @@
[Desktop Entry]
Name=Hyprland
Comment=An intelligent dynamic tiling Wayland compositor
Exec=/usr/bin/starthyprland
Type=Application

View file

@ -0,0 +1,2 @@
GTK_THEME=Adwaita:dark
QT_STYLE_OVERRIDE=adwaita-dark

View file

@ -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

View file

@ -0,0 +1 @@
TerminalEmulator=foot

View file

@ -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

View file

@ -0,0 +1,6 @@
[Desktop Entry]
Name=River
Comment=A dynamic tiling wayland compositor
DesktopNames=river
Exec=/usr/bin/startriver
Type=Application

View file

@ -0,0 +1 @@
TerminalEmulator=foot

View file

@ -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

View file

@ -0,0 +1,3 @@
input * {
tap enabled
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -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)"

View file

@ -0,0 +1,3 @@
WAYFIRE_CONFIG_FILE=/usr/share/wayfire/wayfire.ini
GTK_THEME=Adwaita:dark
QT_STYLE_OVERRIDE=adwaita-dark

View file

@ -0,0 +1 @@
TerminalEmulator=foot

View file

@ -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

View file

@ -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 = <super> KEY_Q | <alt> 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 = <super> BTN_LEFT
# Resize them with right mouse button + Super.
[resize]
activate = <super> BTN_RIGHT
# Zoom in the desktop by scrolling + Super.
[zoom]
modifier = <super>
# Change opacity by scrolling with Super + Alt.
[alpha]
modifier = <super> <alt>
# Rotate windows with the mouse.
[wrot]
activate = <super> <ctrl> BTN_RIGHT
# Fisheye effect.
[fisheye]
toggle = <super> <ctrl> 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 = <super> 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 = <super> KEY_ENTER
command_terminal = foot
# Start your launcher
binding_launcher = <super> <shift> KEY_ENTER
command_launcher = rofi -show drun
# Screen locker
# https://github.com/swaywm/swaylock
binding_lock = <super> <shift> KEY_ESC
command_lock = swaylock
# Logout
# https://github.com/ArtsyMacaw/wlogout
binding_logout = <super> 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 = <shift> 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 = <super> KEY_F
# toggle_always_on_top = <super> KEY_X
# toggle_sticky = <super> <shift> 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 = <super> KEY_KP1
slot_b = <super> KEY_KP2
slot_br = <super> KEY_KP3
slot_l = <super> KEY_LEFT | <super> KEY_KP4
slot_c = <super> KEY_UP | <super> KEY_KP5
slot_r = <super> KEY_RIGHT | <super> KEY_KP6
slot_tl = <super> KEY_KP7
slot_t = <super> KEY_KP8
slot_tr = <super> KEY_KP9
# Restore default.
restore = <super> KEY_DOWN | <super> KEY_KP0
# Change active window with an animation.
[switcher]
next_view = <alt> KEY_TAB
prev_view = <alt> <shift> KEY_TAB
# Simple active window switcher.
[fast-switcher]
activate = <alt> KEY_ESC
# Workspaces ───────────────────────────────────────────────────────────────────
# Switch to workspace.
[vswitch]
binding_left = <ctrl> <super> KEY_LEFT
binding_down = <ctrl> <super> KEY_DOWN
binding_up = <ctrl> <super> KEY_UP
binding_right = <ctrl> <super> KEY_RIGHT
# Move the focused window with the same key-bindings, but add Shift.
with_win_left = <ctrl> <super> <shift> KEY_LEFT
with_win_down = <ctrl> <super> <shift> KEY_DOWN
with_win_up = <ctrl> <super> <shift> KEY_UP
with_win_right = <ctrl> <super> <shift> KEY_RIGHT
# Show the current workspace row as a cube.
[cube]
activate = <ctrl> <alt> BTN_LEFT
# Switch to the next or previous workspace.
#rotate_left = <super> <ctrl> KEY_H
#rotate_right = <super> <ctrl> KEY_L
# Show an overview of all workspaces.
[expo]
toggle = <super>
# 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 = <super> KEY_O
# Same with the window.
next_output_with_win = <super> <shift> KEY_O
# Invert the colors of the whole output.
[invert]
toggle = <super> 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

View file

@ -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 = /<path to intellij>/idea.png

View file

@ -0,0 +1,6 @@
[Desktop Entry]
Name=Wayfire
Exec=/usr/bin/startwayfire
Icon=
Type=Application
DesktopNames=Wayfire

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"
}
]
}
}
}

View file

@ -0,0 +1,3 @@
docker:
ghcr.io/IMAGENAME:
use-sigstore-attachments: true

View file

@ -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"