├── .github ├── dependabot.yml └── workflows │ ├── build.yml │ ├── conventional-commits.yml │ └── release-please.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── Containerfile ├── LICENSE ├── README.md ├── cosign.pub ├── etc ├── .config │ └── autostart │ │ └── ublue-firstboot.desktop ├── dconf │ ├── db │ │ └── local.d │ │ │ └── 01-ublue │ └── profile │ │ └── user ├── distrobox │ └── distrobox.conf ├── justfile ├── profile.d │ └── ublue-firstboot.sh ├── skel.d │ └── .config │ │ └── autostart │ │ └── ublue-firstboot.desktop ├── systemd │ └── system │ │ └── dconf-update.service └── yum.repos.d │ └── tailscale.repo ├── recipe.yml ├── ublue-firstboot └── usr └── share ├── backgrounds ├── ublue.xml ├── warty-final-ubuntu-dark.png └── warty-final-ubuntu.png ├── fonts └── ubuntu │ ├── LICENCE-FAQ.txt │ ├── LICENCE.txt │ ├── README.txt │ ├── TRADEMARKS.txt │ ├── Ubuntu-B.ttf │ ├── Ubuntu-BI.ttf │ ├── Ubuntu-C.ttf │ ├── Ubuntu-L.ttf │ ├── Ubuntu-LI.ttf │ ├── Ubuntu-M.ttf │ ├── Ubuntu-MI.ttf │ ├── Ubuntu-R.ttf │ ├── Ubuntu-RI.ttf │ ├── Ubuntu-Th.ttf │ ├── UbuntuMono-B.ttf │ ├── UbuntuMono-BI.ttf │ ├── UbuntuMono-R.ttf │ ├── UbuntuMono-RI.ttf │ └── copyright.txt └── gnome-background-properties └── ublue.xml /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build-ublue 2 | on: 3 | pull_request: 4 | branches: 5 | - main 6 | paths-ignore: 7 | - '**.md' 8 | - '**.txt' 9 | schedule: 10 | - cron: '20 03 * * *' # 3:20am everyday 11 | push: 12 | branches: 13 | - main 14 | paths-ignore: 15 | - '**.md' 16 | - '**.txt' 17 | env: 18 | IMAGE_BASE_NAME: ubuntu 19 | IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }} 20 | 21 | jobs: 22 | push-ghcr: 23 | name: Build and push image 24 | runs-on: ubuntu-22.04 25 | permissions: 26 | contents: read 27 | packages: write 28 | id-token: write 29 | strategy: 30 | fail-fast: false 31 | matrix: 32 | image_name: [ubuntu] 33 | major_version: [37] 34 | include: 35 | - major_version: 37 36 | is_latest_version: true 37 | is_stable_version: true 38 | steps: 39 | # Checkout push-to-registry action GitHub repository 40 | - name: Checkout Push to Registry action 41 | uses: actions/checkout@v3 42 | 43 | - name: Matrix Variables 44 | run: | 45 | echo "IMAGE_NAME=${{ format('{1}', matrix.image_name, env.IMAGE_BASE_NAME) }}" >> $GITHUB_ENV 46 | 47 | - name: Generate tags 48 | id: generate-tags 49 | shell: bash 50 | run: | 51 | # Generate a timestamp for creating an image version history 52 | TIMESTAMP="$(date +%Y%m%d)" 53 | MAJOR_VERSION="${{ matrix.major_version }}" 54 | COMMIT_TAGS=() 55 | BUILD_TAGS=() 56 | # Have tags for tracking builds during pull request 57 | SHA_SHORT="$(git rev-parse --short HEAD)" 58 | COMMIT_TAGS+=("pr-${{ github.event.number }}-${MAJOR_VERSION}") 59 | COMMIT_TAGS+=("${SHA_SHORT}-${MAJOR_VERSION}") 60 | if [[ "${{ matrix.is_latest_version }}" == "true" ]] && \ 61 | [[ "${{ matrix.is_stable_version }}" == "true" ]]; then 62 | COMMIT_TAGS+=("pr-${{ github.event.number }}") 63 | COMMIT_TAGS+=("${SHA_SHORT}") 64 | fi 65 | 66 | BUILD_TAGS=("${MAJOR_VERSION}" "${MAJOR_VERSION}-${TIMESTAMP}") 67 | 68 | if [[ "${{ matrix.is_latest_version }}" == "true" ]] && \ 69 | [[ "${{ matrix.is_stable_version }}" == "true" ]]; then 70 | BUILD_TAGS+=("${TIMESTAMP}") 71 | BUILD_TAGS+=("latest") 72 | fi 73 | 74 | if [[ "${{ github.event_name }}" == "pull_request" ]]; then 75 | echo "Generated the following commit tags: " 76 | for TAG in "${COMMIT_TAGS[@]}"; do 77 | echo "${TAG}" 78 | done 79 | alias_tags=("${COMMIT_TAGS[@]}") 80 | else 81 | alias_tags=("${BUILD_TAGS[@]}") 82 | fi 83 | echo "Generated the following build tags: " 84 | for TAG in "${BUILD_TAGS[@]}"; do 85 | echo "${TAG}" 86 | done 87 | echo "alias_tags=${alias_tags[*]}" >> $GITHUB_OUTPUT 88 | 89 | # Build metadata 90 | - name: Image Metadata 91 | uses: docker/metadata-action@v4 92 | id: meta 93 | with: 94 | images: | 95 | ${{ env.IMAGE_NAME }} 96 | labels: | 97 | org.opencontainers.image.title=${{ env.IMAGE_NAME }} 98 | org.opencontainers.image.description=A base ${{ env.IMAGE_NAME }} image with batteries included 99 | io.artifacthub.package.readme-url=https://raw.githubusercontent.com/ublue-os/main/main/README.md 100 | io.artifacthub.package.logo-url=https://avatars.githubusercontent.com/u/120078124?s=200&v=4 101 | 102 | # Build image using Buildah action 103 | - name: Build Image 104 | id: build_image 105 | uses: redhat-actions/buildah-build@v2 106 | with: 107 | containerfiles: | 108 | ./Containerfile 109 | image: ${{ env.IMAGE_NAME }} 110 | tags: | 111 | ${{ steps.generate-tags.outputs.alias_tags }} 112 | build-args: | 113 | IMAGE_NAME=${{ matrix.image_name }} 114 | FEDORA_MAJOR_VERSION=${{ matrix.major_version }} 115 | labels: ${{ steps.meta.outputs.labels }} 116 | oci: false 117 | 118 | # Workaround bug where capital letters in your GitHub username make it impossible to push to GHCR. 119 | # https://github.com/macbre/push-to-ghcr/issues/12 120 | - name: Lowercase Registry 121 | id: registry_case 122 | uses: ASzc/change-string-case-action@v5 123 | with: 124 | string: ${{ env.IMAGE_REGISTRY }} 125 | 126 | # Push the image to GHCR (Image Registry) 127 | - name: Push To GHCR 128 | uses: redhat-actions/push-to-registry@v2 129 | id: push 130 | if: github.event_name != 'pull_request' 131 | env: 132 | REGISTRY_USER: ${{ github.actor }} 133 | REGISTRY_PASSWORD: ${{ github.token }} 134 | with: 135 | image: ${{ steps.build_image.outputs.image }} 136 | tags: ${{ steps.build_image.outputs.tags }} 137 | registry: ${{ steps.registry_case.outputs.lowercase }} 138 | username: ${{ env.REGISTRY_USER }} 139 | password: ${{ env.REGISTRY_PASSWORD }} 140 | extra-args: | 141 | --disable-content-trust 142 | 143 | - name: Login to GitHub Container Registry 144 | uses: docker/login-action@v2 145 | if: github.event_name != 'pull_request' 146 | with: 147 | registry: ghcr.io 148 | username: ${{ github.actor }} 149 | password: ${{ secrets.GITHUB_TOKEN }} 150 | 151 | # Sign container 152 | - uses: sigstore/cosign-installer@v3.0.3 153 | if: github.event_name != 'pull_request' 154 | 155 | - name: Sign container image 156 | if: github.event_name != 'pull_request' 157 | run: | 158 | echo "${{ env.COSIGN_PRIVATE_KEY }}" > cosign.key 159 | wc -c cosign.key 160 | cosign sign -y --key cosign.key ${{ steps.registry_case.outputs.lowercase }}/${{ env.IMAGE_NAME }}@${TAGS} 161 | env: 162 | TAGS: ${{ steps.push.outputs.digest }} 163 | COSIGN_EXPERIMENTAL: false 164 | COSIGN_PRIVATE_KEY: ${{ secrets.SIGNING_SECRET }} 165 | 166 | - name: Echo outputs 167 | if: github.event_name != 'pull_request' 168 | run: | 169 | echo "${{ toJSON(steps.push.outputs) }}" 170 | 171 | -------------------------------------------------------------------------------- /.github/workflows/conventional-commits.yml: -------------------------------------------------------------------------------- 1 | name: Conventional Commits 2 | 3 | on: 4 | pull_request: 5 | branches: main 6 | 7 | jobs: 8 | build: 9 | name: Conventional Commits 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | 14 | - uses: webiny/action-conventional-commits@v1.1.0 15 | -------------------------------------------------------------------------------- /.github/workflows/release-please.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - main 5 | name: release-please 6 | jobs: 7 | release-please: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: google-github-actions/release-please-action@v3 11 | with: 12 | release-type: node 13 | package-name: release-please-action 14 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.0.0 (2023-02-03) 4 | 5 | 6 | ### Features 7 | 8 | * add release and conventional commit actions ([5a657f8](https://github.com/ublue-os/ubuntu/commit/5a657f8ff1001196608840847736bafde8235f76)) 9 | 10 | 11 | ### Bug Fixes 12 | 13 | * fix indentation in the action ([2e15657](https://github.com/ublue-os/ubuntu/commit/2e156571d94211b9d41073d7904eb68cb88c050c)) 14 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | jorge.castro@gmail.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /Containerfile: -------------------------------------------------------------------------------- 1 | ARG FEDORA_MAJOR_VERSION=37 2 | 3 | FROM ghcr.io/ublue-os/silverblue-main:${FEDORA_MAJOR_VERSION} 4 | 5 | COPY etc /etc 6 | COPY usr /usr 7 | 8 | COPY --from=ghcr.io/ublue-os/config:latest /files/ublue-os-udev-rules / 9 | COPY --from=ghcr.io/ublue-os/config:latest /files/ublue-os-update-services / 10 | COPY --from=docker.io/mikefarah/yq /usr/bin/yq /usr/bin/yq 11 | 12 | COPY ublue-firstboot /usr/bin 13 | COPY recipe.yml /etc/ublue-recipe.yml 14 | 15 | RUN wget https://github.com/terrapkg/subatomic-repos/raw/main/terra.repo -O /etc/yum.repos.d/terra.repo 16 | RUN wget https://copr.fedorainfracloud.org/coprs/kylegospo/gnome-vrr/repo/fedora-$(rpm -E %fedora)/kylegospo-gnome-vrr-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-gnome-vrr.repo 17 | RUN wget https://copr.fedorainfracloud.org/coprs/sunwire/input-remapper/repo/fedora-37/sunwire-input-remapper-fedora-37.repo -O /etc/yum.repos.d/sunwire-input-remapper-fedora-37.repo 18 | RUN wget https://copr.fedorainfracloud.org/coprs/kylegospo/webapp-manager/repo/fedora-37/kylegospo-webapp-manager-fedora-37.repo -O /etc/yum.repos.d/kylegospo-webapp-manager-fedora-37.repo 19 | RUN rpm-ostree override replace --experimental --from repo=copr:copr.fedorainfracloud.org:kylegospo:gnome-vrr mutter gnome-control-center gnome-control-center-filesystem 20 | RUN rpm-ostree override remove gnome-software-rpm-ostree firefox firefox-langpacks 21 | RUN rpm-ostree install blackbox-terminal gnome-shell-extension-appindicator gnome-shell-extension-dash-to-dock \ 22 | gnome-shell-extension-blur-my-shell gnome-shell-extension-gsconnect nautilus-gsconnect \ 23 | libgda libgda-sqlite libratbag-ratbagd openssl podman-docker python3-input-remapper \ 24 | tailscale virt-manager wireguard-tools webapp-manager yaru-theme && \ 25 | rm -f /var/lib/unbound/root.key && \ 26 | rm -f /var/lib/freeipmi/ipckey && \ 27 | systemctl unmask dconf-update.service && \ 28 | systemctl enable dconf-update.service && \ 29 | systemctl enable rpm-ostree-countme.service && \ 30 | systemctl enable tailscaled.service && \ 31 | fc-cache -f /usr/share/fonts/ubuntu && \ 32 | rm -f /etc/yum.repos.d/terra.repo && \ 33 | rm -f /etc/yum.repos.d/_copr_kylegospo-gnome-vrr.repo && \ 34 | rm -f /etc/yum.repos.d/tailscale.repo && \ 35 | rm -f /etc/yum.repos.d/sunwire-input-remapper-fedora-37.repo && \ 36 | rm -f /etc/yum.repos.d/kylegospo-webapp-manager-fedora-37.repo && \ 37 | sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/user.conf && \ 38 | sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/system.conf && \ 39 | ostree container commit 40 | 41 | # K8s tools 42 | 43 | COPY --from=cgr.dev/chainguard/kubectl:latest /usr/bin/kubectl /usr/bin/kubectl 44 | COPY --from=cgr.dev/chainguard/cosign:latest /usr/bin/cosign /usr/bin/cosign 45 | 46 | RUN curl -Lo ./kind "https://kind.sigs.k8s.io/dl/v0.17.0/kind-$(uname)-amd64" 47 | RUN chmod +x ./kind 48 | RUN mv ./kind /usr/bin/kind 49 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![build-ublue](https://github.com/ublue-os/ubuntu/actions/workflows/build.yml/badge.svg)](https://github.com/ublue-os/ubuntu/actions/workflows/build.yml) 2 | 3 | ## This image is being deprecated after F37, if you're using it images will continue to be made but not receive feature updates 4 | 5 | Check out [Bluefin](https://github.com/ublue-os/bluefin), that replaces this image and it's much better, see you there! 6 | 7 | # Ubuntu 8 | A familiar(ish) Ubuntu desktop for Fedora Silverblue. 9 | Currently you'll need to have Fedora Silverblue installed to rebase to this image (see below). We will provide ISOs as soon as the custom image feature lands in the Fedora installer. 10 | 11 | This is an interpretation of "What if we could rebuild Ubuntu from the ground up built on cloud-native technology?" 12 | The goal is to provide an Ubuntu experience using the most amount of automation possible. 13 | The endstate is a system as reliable as a Chromebook with near-zero maintainance, but with the power of Ubuntu and Fedora fused together. 14 | 15 | ![image](https://user-images.githubusercontent.com/294627/216749516-536b7ff9-7cb1-4acf-9be5-f6e38e6bd613.png) 16 | 17 | > "Let's see what's out there." - Jean-Luc Picard 18 | 19 | # Usage 20 | 21 | > **Warning** 22 | > This is an experimental feature and should not be used in production, try it in a VM for a while! If you are rebasing and not doing a clean install do a `touch ~/.config/ublue/firstboot-done` to keep your flatpak configuration untouched, otherwise we're going to mangle it (for science). 23 | 24 | 1. Download and install [Fedora Silverblue](https://silverblue.fedoraproject.org/download) 25 | 1. After you reboot you should [pin the working deployment](https://docs.fedoraproject.org/en-US/fedora-silverblue/faq/#_about_using_silverblue) so you can safely rollback. 26 | 1. Open a terminal and rebase the OS to this image: 27 | 28 | sudo rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/ubuntu:latest 29 | 30 | 1. Reboot the system and you're done! 31 | 32 | 1. To revert back: 33 | 34 | sudo rpm-ostree rebase fedora:fedora/37/x86_64/silverblue 35 | 36 | Check the [Silverblue documentation](https://docs.fedoraproject.org/en-US/fedora-silverblue/) for instructions on how to use rpm-ostree. 37 | We build date tags as well, so if you want to rebase to a particular day's release: 38 | 39 | sudo rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/ubuntu:20221217 40 | 41 | The `latest` tag will automatically point to the latest build. 42 | 43 | # Features 44 | 45 | **This image heavily utilizes _cloud-native concepts_.** 46 | 47 | System updates are image-based and automatic. Applications are logically seperated from the system by using Flatpaks, and the CLI experience is contained within OCI containers: 48 | 49 | - Ubuntu-like GNOME layout 50 | - Includes the following GNOME Extensions 51 | - Dash to Dock - for a more Unity-like dock 52 | - Appindicator - for tray-like icons in the top right corner 53 | - GSConnect - Integrate your mobile device with your desktop 54 | - GNOME Variable Refresh Rate patches included via the [GNOME VRR COPR](https://copr.fedorainfracloud.org/coprs/kylegospo/gnome-vrr/) 55 | - Blur my Shell - for dat bling 56 | - GNOME Software with Flathub 57 | - Use a familiar software center UI to install graphical software 58 | - Built-in Ubuntu user space 59 | - Official Ubuntu LTS cloud image 60 | - `Ctrl`-`Alt`-`u` - will launch an Ubuntu image inside a terminal via [Distrobox](https://github.com/89luca89/distrobox), your home directory will be transparently mounted 61 | - A [BlackBox terminal](https://www.omgubuntu.co.uk/2022/07/blackbox-gtk4-terminal-emulator-for-gnome) is used just for this configuration 62 | - Use this container for your typical CLI needs or to install software that is not available via Flatpak or Fedora 63 | - Refer to the [Distrobox documentation](https://distrobox.privatedns.org/#distrobox) for more information on using and configuring custom images 64 | - GNOME Terminal 65 | - `Ctrl`-`Alt`-`t` - will launch a host-level GNOME Terminal if you need to do host-level things in Fedora (you shouldn't need to do much). 66 | - Cloud Native Tools 67 | - [kind](https://kind.sigs.k8s.io/) - Run a Kubernetes cluster on your machine. Do a `kind create cluster` on the host to get started! 68 | - [kubectl](https://kubernetes.io/docs/reference/kubectl/) - Administer Kubernetes Clusters 69 | - [Podman-Docker](https://github.com/containers/podman) - Automatically aliases the `docker` command to `podman` 70 | - [virt-manager](https://virt-manager.org/) - for virtual machine management 71 | - Quality of Life Improvements 72 | - [webapp-manager](https://github.com/linuxmint/webapp-manager) for Progressive Web App (PWA) management 73 | - Uses the included Firefox, no other browser download needed 74 | - Thanks to Linux Mint for a great tool! 75 | - systemd shutdown timers adjusted to 15 seconds 76 | - udev rules for game controllers included out of the box 77 | - [Tailscale](https://tailscale.com/) for VPN 78 | - [Just](https://github.com/casey/just) task runner for post-install automation tasks 79 | - [input-remapper](https://github.com/sezanzeb/input-remapper) for remapping input devices 80 | - Built on top of the the [uBlue main image](https://github.com/ublue-os/main) 81 | - System designed for automatic staging of updates 82 | - If you've never used an image-based Linux before just use your computer normally 83 | - Don't overthink it, just shut your computer off when you're not using it 84 | 85 | ### Future Features 86 | 87 | These are currently unimplemented ideas that we plan on adding: 88 | 89 | - Provide a `:lts` tag derived from CentOS Stream for a more enterprise-like cadence 90 | - [Firecracker](https://github.com/firecracker-microvm/firecracker) - help wanted with this! 91 | - Inclusion of more Ubuntu artwork 92 | 93 | ### Applications 94 | 95 | - Mozilla Firefox, Mozilla Thunderbird, Extension Manager, Libreoffice, DejaDup, FontDownloader, Flatseal, and the Celluloid Media Player 96 | - Core GNOME Applications installed from Flathub 97 | - GNOME Calculator, Calendar, Characters, Connections, Contacts, Evince, Firmware, Logs, Maps, NautilusPreviewer, TextEditor, Weather, baobab, clocks, eog, and font-viewer 98 | - All applications installed per user instead of system wide, similar to openSUSE MicroOS. Thanks for the inspiration Team Green! 99 | 100 | ## Verification 101 | 102 | These images are signed with sisgstore's [cosign](https://docs.sigstore.dev/cosign/overview/). You can verify the signature by downloading the `cosign.pub` key from this repo and running the following command: 103 | 104 | cosign verify --key cosign.pub ghcr.io/ublue-os/ubuntu 105 | 106 | ## Frequently Asked Questions 107 | 108 | What about codecs? 109 | 110 | > It's unlikely you'll need extra codecs, Flathub provides everything you need. You might need to [force enable hardware acceleration](https://fedoraproject.org/wiki/Firefox_Hardware_acceleration#Web_page_rendering) in Firefox directly. 111 | 112 | How do I get my GNOME back to normal Fedora defaults? 113 | 114 | > We set the default dconf keys in `/etc/dconf/db/local`, removing those keys and updating the database will take you back to the fedora default: 115 | 116 | sudo rm -f /etc/dconf/db/local 117 | sudo dconf update 118 | 119 | If you prefer a vanilla GNOME installation check out [silverblue-main](https://github.com/ublue-os/main) or [silverblue-nvidia](https://github.com/ublue-os/nvidia) for a more upstream experience. 120 | 121 | Should I trust you? 122 | 123 | > This is all hosted, built, and pushed on GitHub. As far as if I'm a trustable fellow, here's my [bio](https://www.ypsidanger.com/about/). If you've made it this far then hopefully you've come to the conclusion on how easy it would be to build all of this on your own trusted machinery. :smile: 124 | -------------------------------------------------------------------------------- /cosign.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7lh7fJMV4dBT2jT1XafixUJa7OVA 3 | cT+QFVD8IfIJIS/KBAc8hx1aslzkH3tfeM0cwyCLB7kOStZ4sh6RyFQD9w== 4 | -----END PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /etc/.config/autostart/ublue-firstboot.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Ublue Desktop FirstBoot Setup 3 | Comment=Sets up Ublue Desktop Correctly On FirstBoot 4 | Exec=/usr/bin/ublue-firstboot 5 | Icon=org.gnome.Terminal 6 | Type=Application 7 | Categories=Utility;System; 8 | Name[en_US]=startup 9 | -------------------------------------------------------------------------------- /etc/dconf/db/local.d/01-ublue: -------------------------------------------------------------------------------- 1 | [org/gnome/shell] 2 | 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', 'yelp.desktop'] 3 | enabled-extensions = ['appindicatorsupport@rgcjonas.gmail.com', 'dash-to-dock@micxgx.gmail.com', 'gsconnect@andyholmes.github.io','blur-my-shell@aunetx'] 4 | 5 | 6 | # dconf path 7 | [org/gnome/desktop/background] 8 | picture-uri='file:///usr/share/backgrounds/ublue.xml' 9 | picture-uri-dark='file:///usr/share/backgrounds/ublue.xml' 10 | picture-options='zoom' 11 | primary-color='000000' 12 | secondary-color='FFFFFF' 13 | 14 | [org/gnome/desktop/interface] 15 | enable-hot-corners=false 16 | cursor-theme='Yaru' 17 | icon-theme='Yaru' 18 | gtk-theme='Yaru' 19 | font-antialiasing='rgba' 20 | font-name='Ubuntu 12' 21 | document-font-name='Ubuntu 12' 22 | monospace-font-name='Ubuntu Mono 18' 23 | 24 | [org/gnome/desktop/sound] 25 | allow-volume-above-100-percent=true 26 | theme-name='Yaru' 27 | 28 | [org/gnome/desktop/wm/preferences] 29 | button-layout=':minimize,maximize,close' 30 | num-workspaces='4' 31 | title-bar-font='Ubuntu Bold 12' 32 | 33 | [org/gnome/shell/extensions/dash-to-dock] 34 | dock-fixed=true 35 | dock-position='LEFT' 36 | extend-height=true 37 | force-straight-corner=false 38 | custom-theme-shring=true 39 | disable-overview-on-startup=true 40 | custom-theme=false 41 | apply-glossy-effect=true 42 | autohide=false 43 | autohide-in-fullscreen=false 44 | transparency-mode='FIXED' 45 | background-color='#ffffff' 46 | background-opacity='0.69999999999999996' 47 | bolt-support=true 48 | click-action='focus-or-previews' 49 | 50 | [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0] 51 | binding='t' 52 | command='gnome-terminal' 53 | name='gnome-terminal' 54 | 55 | [org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1] 56 | binding='u' 57 | command='blackbox' 58 | name='blackbox' 59 | 60 | [org/gnome/settings-daemon/plugins/media-keys] 61 | custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/' ] 62 | home='e' 63 | 64 | [org/gnome/software] 65 | allow-updates=false 66 | download-updates=false 67 | download-updates-notify=false 68 | 69 | [com/raggesilver/BlackBox] 70 | command-as-login-shell=true 71 | use-custom-command=true 72 | custom-shell-command='distrobox enter ubuntu' 73 | theme-light='Solarized Light' 74 | theme-dark='Yaru' 75 | style-preference=0 76 | font='Ubuntu Mono 18' 77 | window-width=975 78 | window-height=650 -------------------------------------------------------------------------------- /etc/dconf/profile/user: -------------------------------------------------------------------------------- 1 | user-db:user 2 | system-db:local -------------------------------------------------------------------------------- /etc/distrobox/distrobox.conf: -------------------------------------------------------------------------------- 1 | container_always_pull="1" 2 | container_generate_entry=1 3 | container_manager="podman" 4 | container_name_default="ubuntu" 5 | container_image_default="docker.io/library/ubuntu:latest" 6 | non_interactive="1" -------------------------------------------------------------------------------- /etc/justfile: -------------------------------------------------------------------------------- 1 | default: 2 | @just --list 3 | 4 | bios: 5 | systemctl reboot --firmware-setup 6 | 7 | changelogs: 8 | rpm-ostree db diff --changelogs 9 | 10 | distrobox-boxkit: 11 | echo 'Creating Boxkit distrobox ...' 12 | distrobox create --image ghcr.io/ublue-os/boxkit -n boxkit -Y 13 | 14 | distrobox-debian: 15 | echo 'Creating Debian distrobox ...' 16 | distrobox create --image quay.io/toolbx-images/debian-toolbox:unstable -n debian -Y 17 | 18 | distrobox-opensuse: 19 | echo 'Creating openSUSE distrobox ...' 20 | distrobox create --image quay.io/toolbx-images/opensuse-toolbox:tumbleweed -n opensuse -Y 21 | 22 | distrobox-ubuntu: 23 | echo 'Creating Ubuntu distrobox ...' 24 | distrobox create --image quay.io/toolbx-images/ubuntu-toolbox:22.04 -n ubuntu -Y 25 | 26 | setup-pwa: 27 | echo 'Giving browser permission to create PWAs (Progressive Web Apps)' 28 | # Add for your favorite chromium-based browser 29 | flatpak override --user --filesystem=~/.local/share/applications --filesystem=~/.local/share/icons com.microsoft.Edge 30 | 31 | setup-gaming: 32 | echo 'Setting up gaming experience ... lock and load.' 33 | flatpak install -y --user \\ 34 | com.discordapp.Discord \\ 35 | com.feaneron.Boatswain \\ 36 | org.freedesktop.Platform.VulkanLayer.MangoHud//22.08 \\ 37 | org.freedesktop.Platform.VulkanLayer.OBSVkCapture//22.08 \\ 38 | org.freedesktop.Platform.VulkanLayer.vkBasalt//22.08 \\ 39 | com.heroicgameslauncher.hgl \\ 40 | com.obsproject.Studio \\ 41 | com.obsproject.Studio.Plugin.OBSVkCapture \\ 42 | com.obsproject.Studio.Plugin.Gstreamer \\ 43 | com.usebottles.bottles \\ 44 | com.valvesoftware.Steam \\ 45 | com.valvesoftware.Steam.Utility.gamescope \\ 46 | net.davidotek.pupgui2 47 | flatpak override com.usebottles.bottles --user --filesystem=xdg-data/applications 48 | flatpak override --user --env=MANGOHUD=1 com.valvesoftware.Steam 49 | flatpak override --user --env=MANGOHUD=1 com.heroicgameslauncher.hgl 50 | 51 | update: 52 | rpm-ostree update 53 | flatpak update -y 54 | distrobox upgrade -a 55 | -------------------------------------------------------------------------------- /etc/profile.d/ublue-firstboot.sh: -------------------------------------------------------------------------------- 1 | if test "$(id -u)" -gt "0" && test -d "$HOME"; then 2 | if test ! -e "$HOME"/.config/ublue/firstboot-done; then 3 | mkdir -p "$HOME"/.config/autostart 4 | cp -f /etc/skel.d/.config/autostart/ublue-firstboot.desktop "$HOME"/.config/autostart 5 | fi 6 | fi 7 | -------------------------------------------------------------------------------- /etc/skel.d/.config/autostart/ublue-firstboot.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Ublue Desktop FirstBoot Setup 3 | Comment=Sets up Ublue Desktop Correctly On FirstBoot 4 | Exec=/usr/bin/ublue-firstboot 5 | Icon=org.gnome.Terminal 6 | Type=Application 7 | Categories=Utility;System; 8 | Name[en_US]=startup 9 | -------------------------------------------------------------------------------- /etc/systemd/system/dconf-update.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Update the dconf database onboot 3 | Documentation=https://github.com/coreos/rpm-ostree/issues/1944 4 | 5 | [Service] 6 | Type=oneshot 7 | ExecStart=/usr/bin/dconf update 8 | 9 | [Install] 10 | WantedBy=multi-user.target -------------------------------------------------------------------------------- /etc/yum.repos.d/tailscale.repo: -------------------------------------------------------------------------------- 1 | [tailscale-stable] 2 | name=Tailscale stable 3 | baseurl=https://pkgs.tailscale.com/stable/fedora/$basearch 4 | enabled=1 5 | type=rpm 6 | repo_gpgcheck=0 7 | gpgcheck=0 8 | gpgkey=https://pkgs.tailscale.com/stable/fedora/repo.gpg 9 | -------------------------------------------------------------------------------- /recipe.yml: -------------------------------------------------------------------------------- 1 | rpms: 2 | flatpaks: 3 | - org.mozilla.firefox 4 | - org.mozilla.Thunderbird 5 | - com.mattjakeman.ExtensionManager 6 | - org.libreoffice.LibreOffice 7 | - org.gnome.DejaDup 8 | - org.gustavoperedo.FontDownloader 9 | - com.github.tchx84.Flatseal 10 | - io.github.celluloid_player.Celluloid 11 | -------------------------------------------------------------------------------- /ublue-firstboot: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if test -e "$HOME"/.config/ublue/firstboot-done; then 4 | echo "Already ran" 5 | exit 0 6 | fi 7 | 8 | ( 9 | echo "# Waiting for Internet connection" 10 | until /usr/bin/ping -q -c 1 flathub.org; do sleep 1; done 11 | echo "00" 12 | 13 | echo "# Removing Filtered Flathub Repository" 14 | /usr/bin/flatpak remote-delete flathub --force ||: 15 | if [ "$?" != 0 ] ; then 16 | zenity --error \ 17 | --text="Removing Filtered Flathub Repo Failed" 18 | exit 1 19 | fi 20 | echo "3" 21 | 22 | echo "# Enabling Flathub Repository" 23 | /usr/bin/flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo 24 | if [ "$?" != 0 ] ; then 25 | zenity --error \ 26 | --text="Adding Flathub Repo Failed" 27 | exit 1 28 | fi 29 | echo "5" 30 | 31 | echo "# Replacing Fedora Flatpaks with Flathub Ones (this may take a while)" 32 | /usr/bin/flatpak install --user --noninteractive org.gnome.Platform//43 33 | /usr/bin/flatpak install --user --noninteractive --reinstall flathub $(flatpak list --app-runtime=org.fedoraproject.Platform --columns=application | tail -n +1 ) 34 | if [ "$?" != 0 ] ; then 35 | zenity --error \ 36 | --text="Replacing Fedora Flatpaks Failed" 37 | exit 1 38 | fi 39 | echo "20" 40 | 41 | echo "Removing all preinstalled Flatpaks" 42 | /usr/bin/flatpak remove --system --noninteractive --all ||: 43 | if [ "$?" != 0 ] ; then 44 | zenity --error \ 45 | --text="Removing all preinstalled flatpaks failed" 46 | exit 1 47 | fi 48 | 49 | echo "# Removing Fedora Flatpak Repository" 50 | /usr/bin/flatpak remote-delete fedora --force ||: 51 | if [ "$?" != 0 ] ; then 52 | zenity --error \ 53 | --text="Removing Fedora Flatpak Repo Failed" 54 | exit 1 55 | fi 56 | echo "25" 57 | 58 | echo "# Installing flatpaks from recipe" 59 | flatpaks=$(yq '.flatpaks[]' < /etc/ublue-recipe.yml) 60 | flatpaks_count=$(yq '.flatpaks[]' < /etc/ublue-recipe.yml | wc -l) 61 | i=0 62 | for pkg in $flatpaks; do 63 | echo "# Installing ${pkg}" 64 | /usr/bin/flatpak install --user --noninteractive flathub $pkg 65 | if [ "$?" != 0 ] ; then 66 | zenity --error \ 67 | --text="Installing ${pkg} Failed" 68 | exit 1 69 | fi 70 | i=$((i+1)) 71 | # Automatically calculates evenly spaced progess using bc, cuts everything after decimal point. 72 | echo "${i}/${flatpaks_count} * (95-30) + 30" | bc -l | cut -d "." -f1 73 | done 74 | 75 | 76 | 77 | echo "Enabling Flatpak auto update" 78 | /usr/bin/systemctl --user enable --now flatpak-user-update.timer 79 | if [ "$?" != 0 ] ; then 80 | zenity --error \ 81 | --text="Setting Flatpak Autoupdate Failed" 82 | exit 1 83 | fi 84 | echo "100" 85 | 86 | 87 | echo "# Reticulating Final Splines" 88 | mkdir -p "$HOME"/.config/ublue/ 89 | touch "$HOME"/.config/ublue/firstboot-done 90 | cp -n /etc/justfile "$HOME"/.justfile 91 | 92 | ) | 93 | 94 | zenity --progress --title="uBlue Desktop Firstboot" --percentage=0 --auto-close --no-cancel --width=300 95 | 96 | if [ "$?" != 0 ] ; then 97 | zenity --error \ 98 | --text="Firstboot Configuration Error" 99 | fi 100 | -------------------------------------------------------------------------------- /usr/share/backgrounds/ublue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2022 4 | 08 5 | 04 6 | 8 7 | 00 8 | 00 9 | 10 | 11 | 12 | 13 | 14 | 36000.0 15 | /usr/share/backgrounds/warty-final-ubuntu.png 16 | 17 | 18 | 19 | 20 | 7200.0 21 | /usr/share/backgrounds/warty-final-ubuntu.png 22 | /usr/share/backgrounds/warty-final-ubuntu-dark.png 23 | 24 | 25 | 26 | 27 | 36000.0 28 | /usr/share/backgrounds/warty-final-ubuntu-dark.png 29 | 30 | 31 | 32 | 33 | 7200.0 34 | /usr/share/backgrounds/warty-final-ubuntu-dark.png 35 | /usr/share/backgrounds/warty-final-ubuntu.png 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /usr/share/backgrounds/warty-final-ubuntu-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/backgrounds/warty-final-ubuntu-dark.png -------------------------------------------------------------------------------- /usr/share/backgrounds/warty-final-ubuntu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/backgrounds/warty-final-ubuntu.png -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/LICENCE-FAQ.txt: -------------------------------------------------------------------------------- 1 | Ubuntu Font Family Licensing FAQ 2 | 3 | Stylistic Foundations 4 | 5 | The Ubuntu Font Family is the first time that a libre typeface has been 6 | designed professionally and explicitly with the intent of developing a 7 | public and long-term community-based development process. 8 | 9 | When developing an open project, it is generally necessary to have firm 10 | foundations: a font needs to maintain harmony within itself even across 11 | many type designers and writing systems. For the [1]Ubuntu Font Family, 12 | the process has been guided with the type foundry Dalton Maag setting 13 | the project up with firm stylistic foundation covering several 14 | left-to-right scripts: Latin, Greek and Cyrillic; and right-to-left 15 | scripts: Arabic and Hebrew (due in 2011). 16 | 17 | With this starting point the community will, under the supervision of 18 | [2]Canonical and [3]Dalton Maag, be able to build on the existing font 19 | sources to expand their character coverage. Ultimately everybody will 20 | be able to use the Ubuntu Font Family in their own written languages 21 | across the whole of Unicode (and this will take some time!). 22 | 23 | Licensing 24 | 25 | The licence chosen by any free software project is one of the 26 | foundational decisions that sets out how derivatives and contributions 27 | can occur, and in turn what kind of community will form around the 28 | project. 29 | 30 | Using a licence that is compatible with other popular licences is a 31 | powerful constraint because of the [4]network effects: the freedom to 32 | share improvements between projects allows free software to reach 33 | high-quality over time. Licence-proliferation leads to many 34 | incompatible licences, undermining the network effect, the freedom to 35 | share and ultimately making the libre movement that Ubuntu is a part of 36 | less effective. For all kinds of software, writing a new licence is not 37 | to be taken lightly and is a choice that needs to be thoroughly 38 | justified if this path is taken. 39 | 40 | Today it is not clear to Canonical what the best licence for a font 41 | project like the Ubuntu Font Family is: one that starts life designed 42 | by professionals and continues with the full range of community 43 | development, from highly commercial work in new directions to curious 44 | beginners' experimental contributions. The fast and steady pace of the 45 | Ubuntu release cycle means that an interim libre licence has been 46 | necessary to enable the consideration of the font family as part of 47 | Ubuntu 10.10 operating system release. 48 | 49 | Before taking any decision on licensing, Canonical as sponsor and 50 | backer of the project has reviewed the many existing licenses used for 51 | libre/open fonts and engaged the stewards of the most popular licenses 52 | in detailed discussions. The current interim licence is the first step 53 | in progressing the state-of-the-art in licensing for libre/open font 54 | development. 55 | 56 | The public discussion must now involve everyone in the (comparatively 57 | new) area of the libre/open font community; including font users, 58 | software freedom advocates, open source supporters and existing libre 59 | font developers. Most importantly, the minds and wishes of professional 60 | type designers considering entering the free software business 61 | community must be taken on board. 62 | 63 | Conversations and discussion has taken place, privately, with 64 | individuals from the following groups (generally speaking personally on 65 | behalf of themselves, rather than their affiliations): 66 | * [5]SIL International 67 | * [6]Open Font Library 68 | * [7]Software Freedom Law Center 69 | * [8]Google Font API 70 | 71 | Document embedding 72 | 73 | One issue highlighted early on in the survey of existing font licences 74 | is that of document embedding. Almost all font licences, both free and 75 | unfree, permit embedding a font into a document to a certain degree. 76 | Embedding a font with other works that make up a document creates a 77 | "combined work" and copyleft would normally require the whole document 78 | to be distributed under the terms of the font licence. As beautiful as 79 | the font might be, such a licence makes a font too restrictive for 80 | useful general purpose digital publishing. 81 | 82 | The situation is not entirely unique to fonts and is encountered also 83 | with tools such as GNU Bison: a vanilla GNU GPL licence would require 84 | anything generated with Bison to be made available under the terms of 85 | the GPL as well. To avoid this, Bison is [9]published with an 86 | additional permission to the GPL which allows the output of Bison to be 87 | made available under any licence. 88 | 89 | The conflict between licensing of fonts and licensing of documents, is 90 | addressed in two popular libre font licences, the SIL OFL and GNU GPL: 91 | * [10]SIL Open Font Licence: When OFL fonts are embedded in a 92 | document, the OFL's terms do not apply to that document. (See 93 | [11]OFL-FAQ for details. 94 | * [12]GPL Font Exception: The situation is resolved by granting an 95 | additional permission to allow documents to not be covered by the 96 | GPL. (The exception is being reviewed). 97 | 98 | The Ubuntu Font Family must also resolve this conflict, ensuring that 99 | if the font is embedded and then extracted it is once again clearly 100 | under the terms of its libre licence. 101 | 102 | Long-term licensing 103 | 104 | Those individuals involved, especially from Ubuntu and Canonical, are 105 | interested in finding a long-term libre licence that finds broad favour 106 | across the whole libre/open font community. The deliberation during the 107 | past months has been on how to licence the Ubuntu Font Family in the 108 | short-term, while knowingly encouraging everyone to pursue a long-term 109 | goal. 110 | * [13]Copyright assignment will be required so that the Ubuntu Font 111 | Family's licensing can be progressively expanded to one (or more) 112 | licences, as best practice continues to evolve within the 113 | libre/open font community. 114 | * Canonical will support and fund legal work on libre font licensing. 115 | It is recognised that the cost and time commitments required are 116 | likely to be significant. We invite other capable parties to join 117 | in supporting this activity. 118 | 119 | The GPL version 3 (GPLv3) will be used for Ubuntu Font Family build 120 | scripts and the CC-BY-SA for associated documentation and non-font 121 | content: all items which do not end up embedded in general works and 122 | documents. 123 | 124 | Ubuntu Font Licence 125 | 126 | For the short-term only, the initial licence is the [14]Ubuntu Font 127 | License (UFL). This is loosely inspired from the work on the SIL 128 | OFL 1.1, and seeks to clarify the issues that arose during discussions 129 | and legal review, from the perspective of the backers, Canonical Ltd. 130 | Those already using established licensing models such as the GPL, OFL 131 | or Creative Commons licensing should have no worries about continuing 132 | to use them. The Ubuntu Font Licence (UFL) and the SIL Open Font 133 | Licence (SIL OFL) are not identical and should not be confused with 134 | each other. Please read the terms precisely. The UFL is only intended 135 | as an interim license, and the overriding aim is to support the 136 | creation of a more suitable and generic libre font licence. As soon as 137 | such a licence is developed, the Ubuntu Font Family will migrate to 138 | it—made possible by copyright assignment in the interium. Between the 139 | OFL 1.1, and the UFL 1.0, the following changes are made to produce the 140 | Ubuntu Font Licence: 141 | * Clarification: 142 | 143 | 1. Document embedding (see [15]embedding section above). 144 | 2. Apply at point of distribution, instead of receipt 145 | 3. Author vs. copyright holder disambiguation (type designers are 146 | authors, with the copyright holder normally being the funder) 147 | 4. Define "Propagate" (for internationalisation, similar to the GPLv3) 148 | 5. Define "Substantially Changed" 149 | 6. Trademarks are explicitly not transferred 150 | 7. Refine renaming requirement 151 | 152 | Streamlining: 153 | 8. Remove "not to be sold separately" clause 154 | 9. Remove "Reserved Font Name(s)" declaration 155 | 156 | A visual demonstration of how these points were implemented can be 157 | found in the accompanying coloured diff between SIL OFL 1.1 and the 158 | Ubuntu Font Licence 1.0: [16]ofl-1.1-ufl-1.0.diff.html 159 | 160 | References 161 | 162 | 1. http://font.ubuntu.com/ 163 | 2. http://www.canonical.com/ 164 | 3. http://www.daltonmaag.com/ 165 | 4. http://en.wikipedia.org/wiki/Network_effect 166 | 5. http://scripts.sil.org/ 167 | 6. http://openfontlibrary.org/ 168 | 7. http://www.softwarefreedom.org/ 169 | 8. http://code.google.com/webfonts 170 | 9. http://www.gnu.org/licenses/gpl-faq.html#CanIUseGPLToolsForNF 171 | 10. http://scripts.sil.org/OFL_web 172 | 11. http://scripts.sil.org/OFL-FAQ_web 173 | 12. http://www.gnu.org/licenses/gpl-faq.html#FontException 174 | 13. https://launchpad.net/~uff-contributors 175 | 14. http://font.ubuntu.com/ufl/ubuntu-font-licence-1.0.txt 176 | 15. http://font.ubuntu.com/ufl/FAQ.html#embedding 177 | 16. http://font.ubuntu.com/ufl/ofl-1.1-ufl-1.0.diff.html 178 | -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/LICENCE.txt: -------------------------------------------------------------------------------- 1 | ------------------------------- 2 | UBUNTU FONT LICENCE Version 1.0 3 | ------------------------------- 4 | 5 | PREAMBLE 6 | This licence allows the licensed fonts to be used, studied, modified and 7 | redistributed freely. The fonts, including any derivative works, can be 8 | bundled, embedded, and redistributed provided the terms of this licence 9 | are met. The fonts and derivatives, however, cannot be released under 10 | any other licence. The requirement for fonts to remain under this 11 | licence does not require any document created using the fonts or their 12 | derivatives to be published under this licence, as long as the primary 13 | purpose of the document is not to be a vehicle for the distribution of 14 | the fonts. 15 | 16 | DEFINITIONS 17 | "Font Software" refers to the set of files released by the Copyright 18 | Holder(s) under this licence and clearly marked as such. This may 19 | include source files, build scripts and documentation. 20 | 21 | "Original Version" refers to the collection of Font Software components 22 | as received under this licence. 23 | 24 | "Modified Version" refers to any derivative made by adding to, deleting, 25 | or substituting -- in part or in whole -- any of the components of the 26 | Original Version, by changing formats or by porting the Font Software to 27 | a new environment. 28 | 29 | "Copyright Holder(s)" refers to all individuals and companies who have a 30 | copyright ownership of the Font Software. 31 | 32 | "Substantially Changed" refers to Modified Versions which can be easily 33 | identified as dissimilar to the Font Software by users of the Font 34 | Software comparing the Original Version with the Modified Version. 35 | 36 | To "Propagate" a work means to do anything with it that, without 37 | permission, would make you directly or secondarily liable for 38 | infringement under applicable copyright law, except executing it on a 39 | computer or modifying a private copy. Propagation includes copying, 40 | distribution (with or without modification and with or without charging 41 | a redistribution fee), making available to the public, and in some 42 | countries other activities as well. 43 | 44 | PERMISSION & CONDITIONS 45 | This licence does not grant any rights under trademark law and all such 46 | rights are reserved. 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a 49 | copy of the Font Software, to propagate the Font Software, subject to 50 | the below conditions: 51 | 52 | 1) Each copy of the Font Software must contain the above copyright 53 | notice and this licence. These can be included either as stand-alone 54 | text files, human-readable headers or in the appropriate machine- 55 | readable metadata fields within text or binary files as long as those 56 | fields can be easily viewed by the user. 57 | 58 | 2) The font name complies with the following: 59 | (a) The Original Version must retain its name, unmodified. 60 | (b) Modified Versions which are Substantially Changed must be renamed to 61 | avoid use of the name of the Original Version or similar names entirely. 62 | (c) Modified Versions which are not Substantially Changed must be 63 | renamed to both (i) retain the name of the Original Version and (ii) add 64 | additional naming elements to distinguish the Modified Version from the 65 | Original Version. The name of such Modified Versions must be the name of 66 | the Original Version, with "derivative X" where X represents the name of 67 | the new work, appended to that name. 68 | 69 | 3) The name(s) of the Copyright Holder(s) and any contributor to the 70 | Font Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except (i) as required by this licence, (ii) to 72 | acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with 73 | their explicit written permission. 74 | 75 | 4) The Font Software, modified or unmodified, in part or in whole, must 76 | be distributed entirely under this licence, and must not be distributed 77 | under any other licence. The requirement for fonts to remain under this 78 | licence does not affect any document created using the Font Software, 79 | except any version of the Font Software extracted from a document 80 | created using the Font Software may only be distributed under this 81 | licence. 82 | 83 | TERMINATION 84 | This licence becomes null and void if any of the above conditions are 85 | not met. 86 | 87 | DISCLAIMER 88 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 89 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 90 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF 91 | COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 92 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 93 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 94 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 95 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER 96 | DEALINGS IN THE FONT SOFTWARE. 97 | -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/README.txt: -------------------------------------------------------------------------------- 1 | ---------------------- 2 | Ubuntu Font Family 3 | ====================== 4 | 5 | The Ubuntu Font Family are a set of matching new libre/open fonts in 6 | development during 2010--2011. And with further expansion work and 7 | bug fixing during 2015. The development is being funded by 8 | Canonical Ltd on behalf the wider Free Software community and the 9 | Ubuntu project. The technical font design work and implementation is 10 | being undertaken by Dalton Maag. 11 | 12 | Both the final font Truetype/OpenType files and the design files used 13 | to produce the font family are distributed under an open licence and 14 | you are expressly encouraged to experiment, modify, share and improve. 15 | 16 | http://font.ubuntu.com/ 17 | -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/TRADEMARKS.txt: -------------------------------------------------------------------------------- 1 | Ubuntu and Canonical are registered trademarks of Canonical Ltd. 2 | 3 | The licence accompanying these works does not grant any rights 4 | under trademark law and all such rights are reserved. 5 | -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-B.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-B.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-BI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-BI.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-C.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-C.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-L.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-L.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-LI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-LI.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-M.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-M.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-MI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-MI.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-R.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-R.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-RI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-RI.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/Ubuntu-Th.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/Ubuntu-Th.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/UbuntuMono-B.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/UbuntuMono-B.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/UbuntuMono-BI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/UbuntuMono-BI.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/UbuntuMono-R.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/UbuntuMono-R.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/UbuntuMono-RI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ublue-os/ubuntu/ce83fd9e567c9589aa59129d860922aa69f444f4/usr/share/fonts/ubuntu/UbuntuMono-RI.ttf -------------------------------------------------------------------------------- /usr/share/fonts/ubuntu/copyright.txt: -------------------------------------------------------------------------------- 1 | Copyright 2010,2011 Canonical Ltd. 2 | 3 | This Font Software is licensed under the Ubuntu Font Licence, Version 4 | 1.0. https://launchpad.net/ubuntu-font-licence 5 | 6 | -------------------------------------------------------------------------------- /usr/share/gnome-background-properties/ublue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | uBlue Default 6 | /usr/share/backgrounds/warty-final-ubuntu.png 7 | /usr/share/backgrounds/warty-final-ubuntu-dark.png 8 | zoom 9 | solid 10 | #51a2da 11 | #294172 12 | 13 | 14 | 15 | uBlue Time of Day 16 | /usr/share/backgrounds/ublue.xml 17 | zoom 18 | 19 | 20 | --------------------------------------------------------------------------------