diff --git a/.github/workflows/build-bluefin-toolbox.yml b/.github/workflows/build-bluefin-toolbox.yml index 1fb22a0d0bb..ac236b4cc3c 100644 --- a/.github/workflows/build-bluefin-toolbox.yml +++ b/.github/workflows/build-bluefin-toolbox.yml @@ -30,7 +30,7 @@ jobs: uses: actions/checkout@v4 - name: Verify base container - uses: EyeCantCU/cosign-action/verify@v0.2.1 + uses: EyeCantCU/cosign-action/verify@v0.2.2 with: containers: wolfi-base cert-identity: https://github.com/chainguard-images/images/.github/workflows/release.yaml@refs/heads/main diff --git a/.github/workflows/build-fedora-toolbox.yml b/.github/workflows/build-fedora-toolbox.yml index 47e9c3ad7c8..7e5b7028663 100644 --- a/.github/workflows/build-fedora-toolbox.yml +++ b/.github/workflows/build-fedora-toolbox.yml @@ -30,7 +30,7 @@ jobs: uses: actions/checkout@v4 - name: Verify Fedora distrobox - uses: EyeCantCU/cosign-action/verify@v0.2.1 + uses: EyeCantCU/cosign-action/verify@v0.2.2 with: containers: fedora-distrobox:latest diff --git a/.github/workflows/build-ubuntu-toolbox.yml b/.github/workflows/build-ubuntu-toolbox.yml index 03169fe5117..85c0c79f356 100644 --- a/.github/workflows/build-ubuntu-toolbox.yml +++ b/.github/workflows/build-ubuntu-toolbox.yml @@ -30,7 +30,7 @@ jobs: uses: actions/checkout@v4 - name: Verify Ubuntu toolbox - uses: EyeCantCU/cosign-action/verify@v0.2.1 + uses: EyeCantCU/cosign-action/verify@v0.2.2 with: containers: ubuntu-toolbox:22.04 pubkey: https://raw.githubusercontent.com/toolbx-images/images/main/quay.io-toolbx-images.pub diff --git a/.github/workflows/build-wolfi-toolbox.yml b/.github/workflows/build-wolfi-toolbox.yml index 017145a681c..57ae447c8be 100644 --- a/.github/workflows/build-wolfi-toolbox.yml +++ b/.github/workflows/build-wolfi-toolbox.yml @@ -30,7 +30,7 @@ jobs: uses: actions/checkout@v4 - name: Verify base container - uses: EyeCantCU/cosign-action/verify@v0.2.1 + uses: EyeCantCU/cosign-action/verify@v0.2.2 with: containers: wolfi-base cert-identity: https://github.com/chainguard-images/images/.github/workflows/release.yaml@refs/heads/main diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f70705fc452..3f32796adb7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,18 +40,17 @@ jobs: is_stable_version: true is_gts_version: false steps: - # Checkout push-to-registry action GitHub repository - - name: Checkout Push to Registry action + - name: Checkout uses: actions/checkout@v4 - name: Verify base image - uses: EyeCantCU/cosign-action/verify@v0.2.1 + uses: EyeCantCU/cosign-action/verify@v0.2.2 with: containers: silverblue-${{ matrix.image_flavor }}:${{ matrix.major_version }} - name: Verify Chainguard images if: matrix.base_name != 'bluefin' - uses: EyeCantCU/cosign-action/verify@v0.2.1 + uses: EyeCantCU/cosign-action/verify@v0.2.2 with: containers: dive, flux, helm, ko, minio, kubectl cert-identity: https://github.com/chainguard-images/images/.github/workflows/release.yaml@refs/heads/main @@ -214,7 +213,7 @@ jobs: - name: Echo outputs if: github.event_name != 'pull_request' run: | - echo "${{ toJSON(steps.push.outputs) }}" + echo "${{ toJSON(steps.push.outputs) }}" check: name: Check all builds successful diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml new file mode 100644 index 00000000000..2ee8ffe3a2e --- /dev/null +++ b/.github/workflows/contributors.yml @@ -0,0 +1,22 @@ +name: Update Contributors + +on: + schedule: + - cron: '0 0 * * *' # Every day at midnight + push: + branches: + - main + +jobs: + update: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: akhilmhdh/contributors-readme-action@v2.3.6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Containerfile b/Containerfile index 44a74ca00e9..96cc14b2ff2 100644 --- a/Containerfile +++ b/Containerfile @@ -92,10 +92,10 @@ RUN wget https://copr.fedorainfracloud.org/coprs/ublue-os/bling/repo/fedora-$(rp rm -f /etc/yum.repos.d/charm.repo && \ rm -f /etc/yum.repos.d/_copr_ublue-os-bling.repo && \ rm -f /etc/yum.repos.d/ublue-os-staging-fedora-"${FEDORA_MAJOR_VERSION}".repo && \ - rm -f /usr/share/applications/fish.desktop && \ - rm -f /usr/share/applications/htop.desktop && \ - rm -f /usr/share/applications/nvtop.desktop && \ - rm -fr /usr/share/applications/gnome-system-monitor.desktop && \ + echo "Hidden=true" >> /usr/share/applications/fish.desktop && \ + echo "Hidden=true" >> /usr/share/applications/htop.desktop && \ + echo "Hidden=true" >> /usr/share/applications/nvtop.desktop && \ + echo "Hidden=true" >> /usr/share/applications/gnome-system-monitor.desktop && \ sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/user.conf && \ sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/system.conf && \ sed -i '/^PRETTY_NAME/s/Silverblue/Bluefin/' /usr/lib/os-release && \ diff --git a/README.md b/README.md index 438b3466f9e..490c0f20df2 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,8 @@ A familiar(ish) Ubuntu desktop for Fedora Silverblue. It strives to cover these 3. [Developer Experience Edition](https://universal-blue.discourse.group/t/bluefin-dx-the-bluefin-developer-experience/39) 4. [Administrator's Guide](https://universal-blue.discourse.group/t/bluefin-administrators-guide/40) 5. [Framework Images](https://universal-blue.org/images/framework/) + +# Contributors + + + \ No newline at end of file diff --git a/dx/usr/bin/bluefin-dx-user-vscode b/dx/usr/bin/bluefin-dx-user-vscode index da85e47d6d9..e85ae45e1cd 100755 --- a/dx/usr/bin/bluefin-dx-user-vscode +++ b/dx/usr/bin/bluefin-dx-user-vscode @@ -1,13 +1,25 @@ #!/usr/bin/env bash # SCRIPT VERSION -USER_SETUP_VER=1 -USER_SETUP_VER_FILE="$HOME/.bluefin-vscode-configured" +USER_SETUP_VER=2 +USER_SETUP_VER_FILE="${XDG_DATA_HOME:-$HOME/.local/share}/ublue/vscode-configured" USER_SETUP_VER_RAN=$(cat "$USER_SETUP_VER_FILE") +mkdir -p "$(dirname "$USER_SETUP_VER_FILE")" || exit 1 + +USER_SETUP_VER_FILE_V1="$HOME/.bluefin-vscode-configured" +# Upgrade from v1 to v2 changes only the location of the USER_SETUP_VER. +# Exit if v1 file is present. +if [[ -f $USER_SETUP_VER_FILE_V1 ]]; then + echo "User setup v1 has already run. Exiting..." + rm $USER_SETUP_VER_FILE_V1 + echo "$USER_SETUP_VER" > "$USER_SETUP_VER_FILE" + exit 0 +fi + # Run script if updated if [[ -f $USER_SETUP_VER_FILE && "$USER_SETUP_VER" = "$USER_SETUP_VER_RAN" ]]; then - echo "User setup has already run. Exiting..." + echo "User setup v$VER has already run. Exiting..." exit 0 fi diff --git a/just/custom.just b/just/custom.just index dab9f3136eb..c5c0a11f6c5 100644 --- a/just/custom.just +++ b/just/custom.just @@ -25,13 +25,13 @@ aqua: [private] bluefin-cli: - #!/usr/bin/env bash - if [ ! -f "${HOME}/.brew_pkgs" ]; then - echo dysk > "${HOME}/.brew_pkgs" - fi; - distrobox-create --nvidia --image ghcr.io/ublue-os/bluefin-cli:latest -n bluefin -Y -a "--env BREW_PKGS=.brew_pkgs" - echo "Entering bluefin-cli" - distrobox enter bluefin + #!/usr/bin/env bash + if [ ! -d "${XDG_DATA_HOME:-$HOME/.local/share}/bluefin-cli/Cellar" ]; then + mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/bluefin-cli/Cellar" + fi; + distrobox-create --nvidia --image ghcr.io/ublue-os/bluefin-cli:latest -n bluefin --volume "${XDG_DATA_HOME:-$HOME/.local/share}/bluefin-cli/Cellar":/home/linuxbrew/.linuxbrew/Cellar:z + echo "Entering bluefin-cli" + distrobox enter -n bluefin # Enable Cockpit for web-based system management | https://cockpit-project.org/ cockpit: diff --git a/packages.json b/packages.json index fa1d6c63253..96945c66737 100644 --- a/packages.json +++ b/packages.json @@ -6,6 +6,7 @@ "cockpit-bridge", "evtest", "fish", + "firewall-config", "glow", "gum", "gnome-shell-extension-appindicator", diff --git a/toolboxes/Containerfile.bluefin-cli b/toolboxes/Containerfile.bluefin-cli index 438f8d288d4..f10115f0a8c 100644 --- a/toolboxes/Containerfile.bluefin-cli +++ b/toolboxes/Containerfile.bluefin-cli @@ -6,6 +6,7 @@ LABEL com.github.containers.toolbox="true" \ maintainer="jorge.castro@gmail.com" COPY ./toolboxes/packages.bluefin-cli /toolbox-packages +COPY ./toolboxes/files.bluefin-cli/etc /etc # Update image RUN apk update && \ @@ -16,6 +17,12 @@ RUN grep -v '^#' /toolbox-packages | xargs apk add RUN rm /toolbox-packages +# Have Linuxbrew owned by UID = 1000 +RUN chown -R 1000 /home/linuxbrew + +# Give UID = 1000 sudo +RUN echo "#1000 ALL = (root) NOPASSWD:ALL" >> /etc/sudoers + # Get Distrobox-host-exec and host-spawn RUN git clone https://github.com/89luca89/distrobox.git --single-branch /tmp/distrobox && \ cp /tmp/distrobox/distrobox-host-exec /usr/bin/distrobox-host-exec && \ @@ -31,13 +38,5 @@ RUN mkdir -p /usr/local/bin && \ ln -fs /usr/bin/distrobox-host-exec /usr/local/bin/podman && \ ln -fs /usr/bin/distrobox-host-exec /usr/local/bin/rpm-ostree -# Make Sudo Work (Assumes UID = 1000) -COPY ./toolboxes/files.bluefin-cli/etc/sudoers /etc/sudoers -COPY ./toolboxes/files.bluefin-cli/etc/pam.d /etc/pam.d - -# Have Linuxbrew owned by UID = 1000 -RUN chown -R 1000 /home/linuxbrew/.linuxbrew /home/linuxbrew/.linuxbrew/bin - # Change root shell to BASH - -RUN sed -i -e '/^root/s/\/bin\/ash/\/bin\/bash/' /etc/passwd +RUN sed -i -e '/^root/s/\/bin\/ash/\/bin\/bash/' /etc/passwd \ No newline at end of file diff --git a/toolboxes/brew_script.bluefin-cli b/toolboxes/brew_script.bluefin-cli deleted file mode 100644 index ede4ecc32e4..00000000000 --- a/toolboxes/brew_script.bluefin-cli +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -if [ ! -f /home/linuxbrew/.firstrun ] && [ -n "${BREW_PKGS}" ]; then - touch /home/linuxbrew/.firstrun - # `brew update-reset` is currently needed - # because somekind of issue with brew - brew update-reset - xargs brew install < "${HOME}"/"${BREW_PKGS}" -fi diff --git a/toolboxes/files.bluefin-cli/etc/pam.d/sudo b/toolboxes/files.bluefin-cli/etc/pam.d/sudo deleted file mode 100644 index 7af73990b51..00000000000 --- a/toolboxes/files.bluefin-cli/etc/pam.d/sudo +++ /dev/null @@ -1,7 +0,0 @@ -#%PAM-1.0 - -auth required pam_env.so -auth sufficient pam_unix.so -account required pam_unix.so -session required pam_limits.so -session required pam_unix.so \ No newline at end of file diff --git a/toolboxes/files.bluefin-cli/etc/pam.d/sudo-i b/toolboxes/files.bluefin-cli/etc/pam.d/sudo-i deleted file mode 100644 index 7af73990b51..00000000000 --- a/toolboxes/files.bluefin-cli/etc/pam.d/sudo-i +++ /dev/null @@ -1,7 +0,0 @@ -#%PAM-1.0 - -auth required pam_env.so -auth sufficient pam_unix.so -account required pam_unix.so -session required pam_limits.so -session required pam_unix.so \ No newline at end of file diff --git a/toolboxes/files.bluefin-cli/etc/profile.d/bluefin-cli-brew-firstrun.sh b/toolboxes/files.bluefin-cli/etc/profile.d/bluefin-cli-brew-firstrun.sh new file mode 100644 index 00000000000..b3164319782 --- /dev/null +++ b/toolboxes/files.bluefin-cli/etc/profile.d/bluefin-cli-brew-firstrun.sh @@ -0,0 +1,16 @@ +if test "$(id -u)" -gt "0" && test ! -f /home/linuxbrew/.firstrun && test -d /home/linuxbrew/.linuxbrew/Cellar; then + touch /home/linuxbrew/.firstrun + if test -n "$(ls -A /home/linuxbrew/.linuxbrew/Cellar)"; then + echo "Relinking Homebrew Cellar" + /home/linuxbrew/.linuxbrew/bin/brew list -1 | while read line + do + /home/linuxbrew/.linuxbrew/bin/brew unlink $line + /home/linuxbrew/.linuxbrew/bin/brew link $line + done + echo "Reinstalling explicictly installed Homebrew packages" + /home/linuxbrew/.linuxbrew/bin/brew leaves | while read line + do + /home/linuxbrew/.linuxbrew/bin/brew reinstall $line + done + fi +fi \ No newline at end of file diff --git a/toolboxes/files.bluefin-cli/etc/sudoers b/toolboxes/files.bluefin-cli/etc/sudoers deleted file mode 100644 index f144fac70b6..00000000000 --- a/toolboxes/files.bluefin-cli/etc/sudoers +++ /dev/null @@ -1,3 +0,0 @@ -root ALL = (ALL:ALL) NOPASSWD:ALL -# Make UID 1000 able to use sudo without a password -#1000 ALL = (root) NOPASSWD:ALL diff --git a/toolboxes/packages.wolfi b/toolboxes/packages.wolfi index f582ccd2a88..2061f1b7cce 100644 --- a/toolboxes/packages.wolfi +++ b/toolboxes/packages.wolfi @@ -10,7 +10,7 @@ gpg iproute2 iputils keyutils -libcap +libcap=2.68-r0 mount ncurses ncurses-terminfo diff --git a/usr/bin/ublue-user-flatpak-manager b/usr/bin/ublue-user-flatpak-manager index 24340369896..9b639275f0c 100755 --- a/usr/bin/ublue-user-flatpak-manager +++ b/usr/bin/ublue-user-flatpak-manager @@ -1,10 +1,22 @@ #!/usr/bin/env bash # Script Version -VER=1 -VER_FILE="$HOME/.ublue_flatpak_manager_version" +VER=2 +VER_FILE="${XDG_DATA_HOME:-$HOME/.local/share}/ublue/flatpak_manager_version" VER_RAN=$(cat $VER_FILE) +mkdir -p "$(dirname "$VER_FILE")" || exit 1 + +# Upgrade from v1 to v2 changes only the location of the VER_FILE. +# Exit if v1 file is present. +VER_1_FILE="$HOME/.ublue_flatpak_manager_version" +if [[ -f $VER_1_FILE ]]; then + echo "Flatpak manager v1 has already ran. Exiting..." + rm $VER_1_FILE + echo $VER > $VER_FILE + exit 0 +fi + # Run script if updated if [[ -f $VER_FILE && $VER = $VER_RAN ]]; then echo "Flatpak manager v$VER has already ran. Exiting..." diff --git a/usr/bin/ublue-user-setup b/usr/bin/ublue-user-setup index 8ba49cbaa84..018bfe75f9c 100755 --- a/usr/bin/ublue-user-setup +++ b/usr/bin/ublue-user-setup @@ -1,13 +1,27 @@ #!/usr/bin/env bash # SCRIPT VERSION -USER_SETUP_VER=1 -USER_SETUP_VER_FILE="$HOME/.ublue-configured" +USER_SETUP_VER=2 +USER_SETUP_VER_FILE="${XDG_DATA_HOME:-$HOME/.local/share}/ublue/user-setup" USER_SETUP_VER_RAN=$(cat $USER_SETUP_VER_FILE) +mkdir -p "$(dirname "$USER_SETUP_VER_FILE")" || exit 1 + +echo "$(dirname "$USER_SETUP_VER_FILE")" + +# Upgrade from v1 to v2 changes only the location of the USER_SETUP_VER. +# Exit if v1 file is present. +USER_SETUP_VER_FILE_V1="$HOME/.ublue-configured" +if [[ -f $USER_SETUP_VER_FILE_V1 ]]; then + echo "User setup v1 has already run. Exiting..." + rm $USER_SETUP_VER_FILE_V1 + echo $USER_SETUP_VER > $USER_SETUP_VER_FILE + exit 0 +fi + # Run script if updated if [[ -f $USER_SETUP_VER_FILE && $USER_SETUP_VER = $USER_SETUP_VER_RAN ]]; then - echo "User setup has already run. Exiting..." + echo "User setup v$VER has already run. Exiting..." exit 0 fi diff --git a/usr/etc/dconf/db/local.d/01-ublue b/usr/etc/dconf/db/local.d/01-ublue index 0c7ad2c310d..67db47e0418 100644 --- a/usr/etc/dconf/db/local.d/01-ublue +++ b/usr/etc/dconf/db/local.d/01-ublue @@ -2,20 +2,6 @@ favorite-apps = ['org.mozilla.firefox.desktop', 'org.mozilla.Thunderbird.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Rhythmbox3.desktop', 'org.libreoffice.LibreOffice.writer.desktop', 'org.gnome.Software.desktop', 'code.desktop', 'ubuntu.desktop', 'yelp.desktop'] enabled-extensions = ['appindicatorsupport@rgcjonas.gmail.com', 'dash-to-dock@micxgx.gmail.com', 'blur-my-shell@aunetx', 'gsconnect@andyholmes.github.io', 'logomenu@aryan_k', 'tailscale@joaophi.github.com'] -[org/gnome/desktop/app-folders] -folder-children=['Utilities', 'Distrobox', 'Wine', 'YaST', 'Pardus'] - -[org/gnome/desktop/app-folders/folders/Distrobox] -categories=['Distrobox'] -name='Distrobox' -translate=false - -[org/gnome/desktop/app-folders/folders/Wine] -apps=['winetricks.desktop'] -categories=['X-Wine', 'wine-wine'] -name='Wine' -translate=false - [org/gnome/desktop/background] picture-uri='file:///usr/share/backgrounds/bluefin/bluefin-winter-dynamic.xml' picture-uri-dark='file:///usr/share/backgrounds/bluefin/bluefin-winter-dynamic.xml' diff --git a/usr/etc/dconf/db/local.d/02-bluefin-folders b/usr/etc/dconf/db/local.d/02-bluefin-folders new file mode 100644 index 00000000000..f5ff60224f6 --- /dev/null +++ b/usr/etc/dconf/db/local.d/02-bluefin-folders @@ -0,0 +1,30 @@ +[org/gnome/desktop/app-folders] +folder-children=['Games', 'GamingUtilities', 'Utilities', 'Distrobox', 'Wine', 'YaST', 'Pardus'] + +[org/gnome/desktop/app-folders/folders/GamingUtilities] +apps=['protontricks.desktop', 'discover_overlay_configure.desktop', 'com.vysp3r.ProtonPlus.desktop', 'io.github.benjamimgois.goverlay.desktop', 'com.gerbilsoft.rom-properties.rp-config.desktop', 'input-remapper-gtk.desktop', 'steamos-nested-desktop.desktop'] +name='Gaming Utilities' +translate=false + +[org/gnome/desktop/app-folders/folders/Utilities] +apps=['com.github.tchx84.Flatseal.desktop', 'io.github.flattool.Warehouse.desktop', 'com.mattjakeman.ExtensionManager.desktop', 'org.gnome.tweaks.desktop', 'firewall-config.desktop', 'ca.desrt.dconf-editor.desktop'] +categories=['X-GNOME-Utilities'] +name='X-GNOME-Utilities.directory' +translate=true + +[org/gnome/desktop/app-folders/folders/Games] +excluded-apps=['steam.desktop', 'net.lutris.Lutris.desktop', 'io.github.benjamimgois.goverlay.desktop', 'com.vysp3r.ProtonPlus.desktop', 'io.github.fastrizwaan.WineZGUI.desktop'] +categories=['Game'] +name='Games' +translate=false + +[org/gnome/desktop/app-folders/folders/Distrobox] +categories=['Distrobox'] +name='Distrobox' +translate=false + +[org/gnome/desktop/app-folders/folders/Wine] +apps=['winetricks.desktop'] +categories=['X-Wine', 'wine-wine'] +name='Wine' +translate=false diff --git a/usr/etc/flatpak/user/install b/usr/etc/flatpak/user/install index c4a26c34faa..e2924c3eaf2 100644 --- a/usr/etc/flatpak/user/install +++ b/usr/etc/flatpak/user/install @@ -17,6 +17,7 @@ org.gnome.clocks org.gnome.font-viewer com.mattjakeman.ExtensionManager com.github.tchx84.Flatseal +io.github.flattool.Warehouse org.fedoraproject.MediaWriter io.missioncenter.MissionCenter io.github.celluloid_player.Celluloid