commit d340047d9d9c6f67c449f55c0fc2b90adfa9e776 Author: cybrneko Date: Sat Mar 21 12:17:37 2026 -0500 initial commit diff --git a/.gitea/build.yml b/.gitea/build.yml new file mode 100644 index 0000000..a26c885 --- /dev/null +++ b/.gitea/build.yml @@ -0,0 +1,49 @@ +name: build-os + +on: + push: + branches: + - main + - testing + workflow_dispatch: + +env: + IMAGE: gitea.nekonetwork.io/cybrneko/neko-system + REGISTRY: gitea.nekonetwork.io + +jobs: + build-image: + runs-on: podman-host + + steps: + - uses: actions/checkout@v4 + + - name: Set tag based on branch + id: tag + run: | + if [ "${GITHUB_REF_NAME}" = "main" ]; then + echo "tag=latest" >> $GITHUB_OUTPUT + else + echo "tag=testing" >> $GITHUB_OUTPUT + fi + + - name: Verify tools + run: | + podman --version + sudo -n podman --version + + - name: Log in to registry + env: + REGISTRY_USER: ${{ secrets.REGISTRY_USER }} + REGISTRY_PASS: ${{ secrets.REGISTRY_PASS }} + run: | + echo "$REGISTRY_PASS" | sudo -n podman login "$REGISTRY" \ + -u "$REGISTRY_USER" --password-stdin + + - name: Build image + run: | + sudo -n podman build -f Containerfile -t "$IMAGE:${{ steps.tag.outputs.tag }}" . + + - name: Push image + run: | + sudo -n podman push "$IMAGE:${{ steps.tag.outputs.tag }}" diff --git a/Containerfile b/Containerfile new file mode 100644 index 0000000..0a542d8 --- /dev/null +++ b/Containerfile @@ -0,0 +1,76 @@ +ARG FEDORA_VERSION=43 +FROM quay.io/fedora/fedora-silverblue:${FEDORA_VERSION} +ARG FEDORA_VERSION + +COPY packages.txt /tmp/packages.txt +COPY branding/wallpaper.png /usr/share/backgrounds/neko-wallpaper.png +COPY branding/logo.png /usr/share/plymouth/themes/neko/logo.png +COPY branding/plymouth.script /usr/share/plymouth/themes/neko/neko.script +COPY files/neko-initramfs-firstboot.service /usr/lib/systemd/system/neko-initramfs-firstboot.service + +RUN mkdir -p /usr/share/plymouth/themes/neko && \ + printf '%s\n' \ + "[Plymouth Theme]" \ + "Name=neko" \ + "Description=neko system boot splash" \ + "ModuleName=script" \ + \ + "[script]" \ + "ImageDir=/usr/share/plymouth/themes/neko" \ + "ScriptFile=/usr/share/plymouth/themes/neko/neko.script" \ + > /usr/share/plymouth/themes/neko/neko.plymouth + +RUN dnf install -y plymouth-plugin-script && \ + dnf clean all && \ + plymouth-set-default-theme neko + +RUN systemctl enable neko-initramfs-firstboot.service + +RUN dnf install -y \ + https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-${FEDORA_VERSION}.noarch.rpm \ + https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-${FEDORA_VERSION}.noarch.rpm \ + && dnf clean all + +RUN dnf config-manager addrepo --from-repofile=https://repo.librewolf.net/librewolf.repo + +RUN dnf remove -y firefox + +RUN dnf install -y $(cat /tmp/packages.txt) && \ + dnf clean all + +RUN systemctl enable bootc-fetch-apply-updates.timer + +# Create dconf profile +RUN mkdir -p /etc/dconf/profile /etc/dconf/db/local.d && \ + printf '%s\n' \ + 'user-db:user' \ + 'system-db:local' \ + > /etc/dconf/profile/user + +# GNOME defaults +RUN printf '%s\n' \ + '[org/gnome/desktop/wm/preferences]' \ + "button-layout='close,minimize,maximize:appmenu'" \ + > /etc/dconf/db/local.d/00-neko-gnome && \ + dconf update + +RUN mkdir -p /etc/dconf/db/local.d && \ + printf '%s\n' \ + '[org/gnome/desktop/background]' \ + "picture-uri='file:///usr/share/backgrounds/neko-wallpaper.png'" \ + "picture-uri-dark='file:///usr/share/backgrounds/neko-wallpaper.png'" \ + > /etc/dconf/db/local.d/01-neko-background + +RUN printf '%s\n' \ + "NAME=\"neko//system\"" \ + "PRETTY_NAME=\"neko//system ${FEDORA_VERSION}\"" \ + "ID=fedora" \ + "VERSION_ID=\"${FEDORA_VERSION}\"" \ + "VERSION=\"${FEDORA_VERSION}\"" \ + "ID_LIKE=\"fedora\"" \ + "ANSI_COLOR=\"0;38;2;60;110;180\"" \ + "HOME_URL=\"https://fedoraproject.org/\"" \ + "DOCUMENTATION_URL=\"https://docs.fedoraproject.org/\"" \ + "SUPPORT_URL=\"https://ask.fedoraproject.org/\"" \ + "BUG_REPORT_URL=\"https://bugzilla.redhat.com/\"" \ + > /etc/os-release diff --git a/branding/logo.png b/branding/logo.png new file mode 100644 index 0000000..ec5a797 Binary files /dev/null and b/branding/logo.png differ diff --git a/branding/neko_logo.png b/branding/neko_logo.png new file mode 100644 index 0000000..3f11c9f Binary files /dev/null and b/branding/neko_logo.png differ diff --git a/branding/neko_logo_outline.png b/branding/neko_logo_outline.png new file mode 100644 index 0000000..67265ef Binary files /dev/null and b/branding/neko_logo_outline.png differ diff --git a/branding/plymouth.script b/branding/plymouth.script new file mode 100644 index 0000000..1436231 --- /dev/null +++ b/branding/plymouth.script @@ -0,0 +1,42 @@ +logo = Image("logo.png"); +logo_sprite = Sprite(logo); +logo_sprite.SetX(Window.GetWidth() / 2 - logo.GetWidth() / 2); +logo_sprite.SetY(Window.GetHeight() * 0.38); +logo_sprite.SetZ(10); + +prompt_sprite = NULL; +prompt_image = NULL; + +fun show_text(txt) { + prompt_image = Image.Text(txt, 1.0, 1.0, 1.0); + if (prompt_sprite == NULL) + prompt_sprite = Sprite(prompt_image); + else + prompt_sprite.SetImage(prompt_image); + + prompt_sprite.SetX(Window.GetWidth() / 2 - prompt_image.GetWidth() / 2); + prompt_sprite.SetY(Window.GetHeight() * 0.78); + prompt_sprite.SetZ(100); + prompt_sprite.SetOpacity(1); +} + +fun clear_text() { + if (prompt_sprite != NULL) + prompt_sprite.SetOpacity(0); +} + +Plymouth.SetDisplayPasswordFunction(fun (prompt, bullets, unused) { + show_text(prompt + " " + bullets); +}); + +Plymouth.SetHidePasswordFunction(fun () { + clear_text(); +}); + +Plymouth.SetDisplayQuestionFunction(fun (prompt, entry, unused) { + show_text(prompt + " " + entry); +}); + +Plymouth.SetHideQuestionFunction(fun () { + clear_text(); +}); diff --git a/branding/wallpaper.png b/branding/wallpaper.png new file mode 100644 index 0000000..f83ab86 Binary files /dev/null and b/branding/wallpaper.png differ diff --git a/files/neko-initramfs-firstboot.service b/files/neko-initramfs-firstboot.service new file mode 100644 index 0000000..5c8b835 --- /dev/null +++ b/files/neko-initramfs-firstboot.service @@ -0,0 +1,14 @@ +[Unit] +Description=Enable regenerated initramfs for neko theme +After=multi-user.target +ConditionPathExists=!/var/lib/neko-initramfs-done + +[Service] +Type=oneshot +ExecStart=/usr/bin/rpm-ostree initramfs --enable +ExecStart=/usr/bin/touch /var/lib/neko-initramfs-done +ExecStart=/usr/bin/systemctl disable neko-initramfs-firstboot.service +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/flatpaks.txt b/flatpaks.txt new file mode 100644 index 0000000..1943350 --- /dev/null +++ b/flatpaks.txt @@ -0,0 +1 @@ +io.gitlab.librewolf-community \ No newline at end of file diff --git a/kickstarts/neko_system.ks b/kickstarts/neko_system.ks new file mode 100644 index 0000000..36e87cc --- /dev/null +++ b/kickstarts/neko_system.ks @@ -0,0 +1,35 @@ +#version=RHEL8 +lang en_US.UTF-8 +keyboard us +timezone America/Chicago --isUtc + +# Root user locked for security +rootpw --lock + +# First boot wizard enabled for user creation +firstboot --enable + +# Repositories (Silverblue base) +repo --name=fedora --baseurl=https://download.fedoraproject.org/pub/fedora/linux/releases/43/Everything/x86_64/os/ + +# Packages to include in the image +%packages +@core +vlc +gimp +# Add more RPMs here if desired +%end + +# Post-install customizations +%post +# Branding - wallpaper example +mkdir -p /usr/share/backgrounds/ +cp /tmp/branding/wallpaper.png /usr/share/backgrounds/ +# Set default GNOME wallpaper +gsettings set org.gnome.desktop.background picture-uri "file:///usr/share/backgrounds/wallpaper.png" + +# Install Flatpaks (non-interactive) +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +flatpak install --noninteractive flathub io.gitlab.librewolf-community +flatpak install --noninteractive flathub org.rncbc.qpwgraph +%end \ No newline at end of file diff --git a/packages.txt b/packages.txt new file mode 100644 index 0000000..027c217 --- /dev/null +++ b/packages.txt @@ -0,0 +1,5 @@ +vim +steam +librewolf +wireplumber +qpwgraph