├── .github ├── dependabot.yml └── workflows │ ├── build.yml │ ├── conventional-commits.yml │ └── release-please.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── ci ├── validate └── validate.yaml ├── comps-sync-exclude-list.yml ├── comps-sync.py ├── config.ini ├── deepin-desktop-pkgs.yaml ├── fedora-37-updates.repo ├── fedora-37.repo ├── fedora-base.yaml ├── fedora-common-ostree-pkgs.yaml ├── fedora-common-ostree.yaml ├── fedora-deepin.yaml ├── fedora-kinoite.yaml ├── fedora-lxqt.yaml ├── fedora-mate.yaml ├── fedora-silverblue.yaml ├── fedora-vauxite.yaml ├── github-fetch.sh ├── gnome-desktop-pkgs.yaml ├── group ├── kde-desktop-pkgs.yaml ├── lxqt-desktop-pkgs.yaml ├── mate-desktop-pkgs.yaml ├── passwd ├── postprocess.sh └── xfce-desktop-pkgs.yaml /.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 2 | on: 3 | pull_request: 4 | branches: 5 | - main 6 | schedule: 7 | - cron: 0 2 * * * 8 | push: 9 | branches: 10 | - main 11 | paths-ignore: 12 | - '**/README.md' 13 | workflow_dispatch: 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | container: 18 | image: docker.io/fedora:rawhide 19 | # Fix SELinux for the built OSTree: https://github.com/coreos/rpm-ostree/issues/1943 20 | options: --privileged --security-opt label:disable 21 | steps: 22 | - name: Install dependencies 23 | run: dnf install -y rpm-ostree selinux-policy selinux-policy-targeted policycoreutils podman 24 | 25 | - name: Clone repository 26 | uses: actions/checkout@v3 27 | 28 | - name: Login 29 | run: podman login --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} ghcr.io 30 | 31 | - name: Image Metadata 32 | uses: docker/metadata-action@v4 33 | id: meta 34 | with: 35 | images: | 36 | vauxite 37 | labels: | 38 | io.artifacthub.package.readme-url=https://raw.githubusercontent.com/ublue-os/vauxite/main/README.md 39 | 40 | - name: Build label flags 41 | id: fmt 42 | run: | 43 | LABELS=$(cat << EOF 44 | ${{ steps.meta.outputs.labels }} 45 | EOF 46 | ) 47 | IFS=$'\n' 48 | OUTPUT=$(for l in $LABELS; do echo -n "-l \"$l\" "; done) 49 | echo "labels=$OUTPUT" >> $GITHUB_OUTPUT 50 | 51 | - name: Build OSTree container image and push to registry 52 | uses: Wandalen/wretry.action@master 53 | with: 54 | command: rpm-ostree compose image --initialize --format=registry ${{ steps.fmt.outputs.labels }} fedora-vauxite.yaml ghcr.io/ublue-os/vauxite:latest 55 | attempt_limit: 3 56 | attempt_delay: 2000 57 | -------------------------------------------------------------------------------- /.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.4.1](https://github.com/ublue-os/vauxite/compare/v1.4.0...v1.4.1) (2023-02-27) 4 | 5 | 6 | ### Bug Fixes 7 | 8 | * add dependabot for updating actions ([633c265](https://github.com/ublue-os/vauxite/commit/633c265a80b115afc08feb4431b4cf628866c0ab)) 9 | * set dependabot to monitor github-actions ([dc5701e](https://github.com/ublue-os/vauxite/commit/dc5701e5b61d48d212037ea59be9ed1f2b5fd6cf)) 10 | 11 | ## [1.4.0](https://github.com/ublue-os/vauxite/compare/v1.3.0...v1.4.0) (2023-02-19) 12 | 13 | 14 | ### Features 15 | 16 | * add xfce4 panel plugins ([53f0c4b](https://github.com/ublue-os/vauxite/commit/53f0c4bd55e4edee66bed758822a6917589ce1d3)) 17 | 18 | ## [1.3.0](https://github.com/ublue-os/vauxite/compare/v1.2.0...v1.3.0) (2023-02-16) 19 | 20 | 21 | ### Features 22 | 23 | * format labels ([25be20d](https://github.com/ublue-os/vauxite/commit/25be20db4a407fc5a3143a908311a386c6b162a6)) 24 | * image labels for rpm-ostree ([1083597](https://github.com/ublue-os/vauxite/commit/1083597a40a14216dc4f7ea6f83c8b99e365d6d5)) 25 | 26 | 27 | ### Bug Fixes 28 | 29 | * label split ([11b603f](https://github.com/ublue-os/vauxite/commit/11b603fd479d9a62bdcb1c6edccdeb177738b2b3)) 30 | * remove deprecated set-env ([b8788fa](https://github.com/ublue-os/vauxite/commit/b8788fad96b42b9785c54d1a369b7cf31df4858f)) 31 | 32 | ## [1.2.0](https://github.com/ublue-os/vauxite/compare/v1.1.0...v1.2.0) (2023-02-14) 33 | 34 | 35 | ### Features 36 | 37 | * add xfce4-clipman-plugin ([cb585d3](https://github.com/ublue-os/vauxite/commit/cb585d333d455b88c36608350dcf36da40b1dc4a)) 38 | 39 | ## [1.1.0](https://github.com/ublue-os/vauxite/compare/v1.0.1...v1.1.0) (2023-02-10) 40 | 41 | 42 | ### Features 43 | 44 | * add firstboot script ([334906b](https://github.com/ublue-os/vauxite/commit/334906b7fb55cfe7983988bdcd5f2131a4da9f55)) 45 | 46 | ## [1.0.1](https://github.com/ublue-os/vauxite/compare/v1.0.0...v1.0.1) (2023-02-09) 47 | 48 | 49 | ### Bug Fixes 50 | 51 | * update comps-sync.py-generated files to reflect upstream ([d65490a](https://github.com/ublue-os/vauxite/commit/d65490a2cf64462428dc537575c1c2acdfd20ae1)) 52 | 53 | ## 1.0.0 (2023-02-06) 54 | 55 | 56 | ### Features 57 | 58 | * add conventional commit linting and release notes generator ([815cd9a](https://github.com/ublue-os/vauxite/commit/815cd9ad0c05c893918a53cd130694445f3c9c98)) 59 | 60 | 61 | ### Bug Fixes 62 | 63 | * add retry-action for when builds fail due to intermittent network issues ([7a44dff](https://github.com/ublue-os/vauxite/commit/7a44dff5b8f1ea9cee918af7044c98cd50c29cd7)) 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice (including the next 11 | paragraph) shall be included in all copies or substantial portions of the 12 | Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 16 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS 17 | OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19 | OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vauxite Desktop 2 | 3 | ## This image is deprecated, please use the [vauxite-main](https://github.com/ublue-os/main) image instead! 4 | 5 | This is an immutable Fedora-based Xfce desktop. It uses [rpm-ostree](https://coreos.github.io/rpm-ostree/), [podman](https://podman.io/), and [toolbox](https://containertoolbx.org/) for container-focused development workflows. 6 | 7 | There are currently no installer images, but the Xfce variant may be installed from an existing OSTree-based system like [Fedora Silverblue](https://silverblue.fedoraproject.org/) or [Fedora IoT](https://getfedora.org/en/iot/). 8 | 9 | ## Usage 10 | 11 | On Fedora Silverblue or Kinoite, run the following command to rebase to Vauxite: 12 | ```shell 13 | rpm-ostree rebase --experimental ostree-unverified-registry:ghcr.io/ublue-os/vauxite:latest 14 | ``` 15 | 16 | New images are built daily. To update to the latest diff, run: 17 | ```shell 18 | rpm-ostree update 19 | ``` 20 | 21 | We expect to be able to install or rebase to container images from the Anaconda installer UI in the future. 22 | -------------------------------------------------------------------------------- /ci/validate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # Validate basic syntax of shell script and yaml. 3 | 4 | import os 5 | import stat 6 | import subprocess 7 | import yaml 8 | 9 | validated=0 10 | 11 | def openat(dirfd, name, mode='r'): 12 | def opener(path, flags): 13 | return os.open(path, flags, dir_fd=dirfd) 14 | return open(name, mode, opener=opener) 15 | 16 | 17 | def validate_shell(rootfd, name): 18 | subprocess.check_call(['bash', '-n', name], preexec_fn=lambda: os.fchdir(rootfd)) 19 | global validated 20 | validated +=1 21 | 22 | 23 | for root, dirs, files, rootfd in os.fwalk('.'): 24 | # Skip .git, repo, cache, tmp, logs, fedora-comps 25 | for d in ['.git', 'repo', 'cache', 'tmp', 'logs', 'fedora-comps']: 26 | if d in dirs: 27 | dirs.remove(d) 28 | for name in files: 29 | if name.endswith(('.yaml', '.yml')): 30 | print("Validating:", name) 31 | with open(os.open(name, dir_fd=rootfd, flags=os.O_RDONLY)) as f: 32 | yaml.safe_load(f) 33 | validated +=1 34 | continue 35 | elif name.endswith('.sh'): 36 | print("Validating:", name) 37 | validate_shell(rootfd, name) 38 | continue 39 | stbuf = os.lstat(name, dir_fd=rootfd) 40 | if not stat.S_ISREG(stbuf.st_mode): 41 | continue 42 | if not stbuf.st_mode & stat.S_IXUSR: 43 | continue 44 | mimetype = subprocess.check_output(['file', '-b', '--mime-type', name], encoding='UTF-8', 45 | preexec_fn=lambda: os.fchdir(rootfd)).strip() 46 | if mimetype == 'text/x-shellscript': 47 | print("Validating:", name) 48 | validate_shell(rootfd, name) 49 | 50 | print(f"Validated {validated} files") 51 | -------------------------------------------------------------------------------- /ci/validate.yaml: -------------------------------------------------------------------------------- 1 | - hosts: all 2 | tasks: 3 | - name: Validate manifests and scripts syntax 4 | ansible.builtin.command: 5 | chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}" 6 | cmd: ci/validate 7 | -------------------------------------------------------------------------------- /comps-sync-exclude-list.yml: -------------------------------------------------------------------------------- 1 | # This file has a list of packages to skip from comps that we don't want, plus 2 | # a few include listed things. 3 | 4 | # For some reason today these are just in livecd-tools... 5 | include_list: 6 | - kernel 7 | - kernel-modules 8 | - kernel-modules-extra 9 | 10 | # Entirely skip all packages in libreoffice 11 | exclude_list_groups: 12 | - libreoffice 13 | - gnome-desktop 14 | - container-management 15 | 16 | # PackageKit is spread across various groups 17 | # We can not include openh264. See https://fedoraproject.org/wiki/OpenH264 18 | exclude_list_all_regexp: 19 | - "PackageKit.*" 20 | - "gstreamer1-plugin-openh264" 21 | - "mozilla-openh264" 22 | - "openh264" 23 | 24 | # Common exclude list for all ostree desktop versions 25 | exclude_list: 26 | core: 27 | # We use rpm-ostree for the host 28 | - dnf 29 | - dnf-plugins-core 30 | - yum 31 | # Not sure why this is there at all 32 | - dracut-config-rescue 33 | # Eh...you can install this in a priv container 34 | - parted 35 | # https://bugzilla.redhat.com/show_bug.cgi?id=1452348 36 | - grubby 37 | # Colin says we also don't need grubby-deprecated 38 | - grubby-deprecated 39 | # Why? 40 | - ncurses 41 | # Architecture specific packages 42 | - powerpc-utils 43 | - lsvpd 44 | - s390utils-base 45 | base-x: 46 | # x86 specific packages. Added back by fedora-common-ostree.yaml 47 | - xorg-x11-drv-intel 48 | - xorg-x11-drv-openchrome 49 | - xorg-x11-drv-vesa 50 | - xorg-x11-drv-vmware 51 | # ARM specific packages 52 | - xorg-x11-drv-armada 53 | - xorg-x11-drv-armsoc 54 | - xorg-x11-drv-omap 55 | guest-desktop-agents: 56 | # x86 specific packages. Added back by fedora-common-ostree.yaml 57 | - hyperv-daemons 58 | - open-vm-tools-desktop 59 | - virtualbox-guest-additions 60 | workstation-product: 61 | # We use rpm-ostree for the host 62 | - dnf 63 | - dnf-plugins-core 64 | - deltarpm 65 | - python3-dnf-plugin-system-upgrade 66 | # We use fedora-release-silverblue instead 67 | - fedora-release-workstation 68 | # Really not worth listing explicitly 69 | - filesystem 70 | # Why? 71 | - ncurses 72 | - mailcap 73 | # This seems like some weird legacy thing, it also 74 | # drags in usermode, which should also be deprecated 75 | # and blocks a /usr/sbin + /usr/bin unification. 76 | - setuptool 77 | # Really? 78 | - tcp_wrappers 79 | # This probably doesn't need to be default 80 | - ppp 81 | # We removed cronie a while ago, should nuke these too 82 | - crontabs 83 | - at 84 | # This drags in a huge dependency set of dnf bits 85 | - abrt-cli 86 | - abrt-desktop 87 | - abrt-java-connector 88 | # Requires libreoffice 89 | - unoconv 90 | # Will change to git-core 91 | - git 92 | # Apps 93 | - rhythmbox 94 | - evolution 95 | - evolution-ews 96 | - evolution-help 97 | - mediawriter 98 | # This is ancient now, and IMO has been superceded by cgroups 99 | # Also it breaks with --unified-core. 100 | - psacct 101 | # Random tools: container 102 | - rdist 103 | - jwhois 104 | - tcpdump 105 | - telnet 106 | - traceroute 107 | - net-tools 108 | - nmap-ncat 109 | # filesystem tools, again priv container 110 | - symlinks 111 | - dosfstools 112 | # Misc 113 | - dos2unix 114 | # Gnome specific 115 | - desktop-backgrounds-gnome 116 | - gnome-shell-extension-background-logo 117 | - pinentry-gnome3 118 | - qgnomeplatform 119 | # x86 specific packages. Added back by fedora-common-ostree.yaml 120 | - mcelog 121 | - microcode_ctl 122 | - thermald 123 | networkmanager-submodules: 124 | # Let's use the builtin one by default 125 | - dhcp-client 126 | printing: 127 | # We don't use PackageKit 128 | - cups-pk-helper 129 | # For now... 130 | - ghostscript 131 | 132 | # Desktop environment specific exclude lists 133 | desktop_exclude_list: 134 | gnome-desktop: 135 | # Non-critical apps -> Flatpak 136 | - baobab 137 | - cheese 138 | - eog 139 | - evince 140 | - evince-djvu 141 | - evince-nautilus 142 | - file-roller 143 | - file-roller-nautilus 144 | - gnome-boxes 145 | - gnome-calculator 146 | - gnome-calendar 147 | - gnome-characters 148 | - gnome-clocks 149 | - gnome-connections 150 | - gnome-contacts 151 | - gnome-documents 152 | - gnome-font-viewer 153 | - gnome-logs 154 | - gnome-maps 155 | - gnome-photos 156 | - gnome-screenshot 157 | - gnome-text-editor 158 | - gnome-weather 159 | - jwhois 160 | - rdist 161 | - sane-backends-drivers-scanners 162 | - symlinks 163 | - simple-scan 164 | - sushi 165 | - tcpdump 166 | - telnet 167 | - totem 168 | - totem-nautilus 169 | - traceroute 170 | kde-desktop: 171 | # Incompatible with ostree for various reasons 172 | - abrt-desktop 173 | - cups-pk-helper 174 | - dnfdragora 175 | - plasma-pk-updates 176 | # Non-critical apps -> Flatpak 177 | - akregator 178 | - cagibi 179 | - elisa-player 180 | - gwenview 181 | - kaddressbook 182 | - kamera 183 | - kcalc 184 | - kcharselect 185 | - kcolorchooser 186 | - kdnssd 187 | - kf5-kipi-plugins 188 | - kfind 189 | - kget 190 | - kgpg 191 | - kmail 192 | - kmouth 193 | - knode 194 | - konqueror 195 | - kontact 196 | - korganizer 197 | - kruler 198 | - ksshaskpass 199 | - kwrite 200 | - libreoffice-kde 201 | - okular 202 | # Misc 203 | - adwaita-gtk2-theme 204 | - colord-kde 205 | - keditbookmarks 206 | - kwebkitpart 207 | - plasma-nm-l2tp 208 | - plasma-nm-openswan 209 | - plasma-nm-pptp 210 | xfce-desktop: 211 | # Incompatible with ostree for various reasons 212 | - abrt-desktop 213 | - dnfdragora-updater 214 | # Non-critical apps -> Flatpak 215 | - fros-recordmydesktop 216 | - tumbler 217 | # Misc 218 | - alsa-utils 219 | - firewall-config 220 | - openssh-askpass 221 | - vim-enhanced 222 | # Remove uncommon NetworkManager plugins 223 | - NetworkManager-fortisslvpn-gnome 224 | - NetworkManager-iodine-gnome 225 | - NetworkManager-l2tp-gnome 226 | - NetworkManager-libreswan-gnome 227 | - NetworkManager-sstp-gnome 228 | - NetworkManager-strongswan-gnome 229 | lxqt-desktop: 230 | # Incompatible with ostree for various reasons 231 | - dnfdragora-updater 232 | deepin-desktop: 233 | # Incompatible with ostree for various reasons 234 | - dnfdragora-updater 235 | mate-desktop: 236 | # Incompatible with ostree for various reasons 237 | - abrt-desktop 238 | - abrt-java-connector 239 | - dnfdragora-updater 240 | # Non-critical apps -> Flatpak 241 | - blivet-gui 242 | - filezilla 243 | - gnome-disk-utility 244 | - gnome-logs 245 | - gnote 246 | - gparted 247 | - hexchat 248 | - p7zip 249 | - p7zip-plugins 250 | - simple-scan 251 | - thunderbird 252 | - transmission-gtk 253 | - vim-enhanced 254 | - xfburn 255 | - yelp 256 | # Non critical NetworkManager plugins 257 | - NetworkManager-bluetooth 258 | - NetworkManager-iodine-gnome 259 | - NetworkManager-l2tp-gnome 260 | - NetworkManager-libreswan-gnome 261 | - NetworkManager-ovs 262 | - NetworkManager-sstp-gnome 263 | - NetworkManager-strongswan-gnome 264 | - NetworkManager-team 265 | - NetworkManager-wifi 266 | # Already in the common set 267 | - wireplumber 268 | -------------------------------------------------------------------------------- /comps-sync.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # Usage: ./comps-sync.py /path/to/comps-f37.xml.in 3 | # 4 | # Can both remove packages from the manifest 5 | # which are not mentioned in comps, and add packages from 6 | # comps. 7 | 8 | import os, sys, subprocess, argparse, shlex, json, yaml, re 9 | import libcomps 10 | 11 | ARCHES = ("x86_64", "aarch64", "ppc64le") 12 | 13 | def fatal(msg): 14 | print >>sys.stderr, msg 15 | sys.exit(1) 16 | 17 | def format_pkgtype(n): 18 | if n == libcomps.PACKAGE_TYPE_DEFAULT: 19 | return 'default' 20 | elif n == libcomps.PACKAGE_TYPE_MANDATORY: 21 | return 'mandatory' 22 | else: 23 | assert False 24 | 25 | def write_manifest(fpath, pkgs, include=None): 26 | with open(fpath, 'w') as f: 27 | f.write("# DO NOT EDIT! This content is generated from comps-sync.py\n") 28 | if include is not None: 29 | f.write("include: {}\n".format(include)) 30 | f.write("packages:\n") 31 | for pkg in sorted(pkgs['all']): 32 | f.write(" - {}\n".format(pkg)) 33 | for arch in ARCHES: 34 | if pkgs[arch]: 35 | f.write(f"packages-{arch}:\n") 36 | for pkg in sorted(pkgs[arch]): 37 | f.write(" - {}\n".format(pkg)) 38 | print("Wrote {}".format(fpath)) 39 | 40 | parser = argparse.ArgumentParser() 41 | parser.add_argument("--save", help="Write changes", action='store_true') 42 | parser.add_argument("src", help="Source path") 43 | 44 | args = parser.parse_args() 45 | 46 | print("Syncing packages common to all desktops:") 47 | 48 | base_pkgs_path = 'fedora-common-ostree-pkgs.yaml' 49 | with open(base_pkgs_path) as f: 50 | manifest = yaml.safe_load(f) 51 | manifest_packages = {} 52 | manifest_packages['all'] = set(manifest['packages']) 53 | for arch in ARCHES: 54 | if f'packages-{arch}' in manifest: 55 | manifest_packages[arch] = set(manifest[f'packages-{arch}']) 56 | else: 57 | manifest_packages[arch] = set() 58 | 59 | with open('comps-sync-exclude-list.yml') as f: 60 | doc = yaml.safe_load(f) 61 | comps_exclude_list = doc['exclude_list'] 62 | comps_include_list = doc['include_list'] 63 | comps_exclude_list_groups = doc['exclude_list_groups'] 64 | comps_desktop_exclude_list = doc['desktop_exclude_list'] 65 | comps_exclude_list_all = [re.compile(x) for x in doc['exclude_list_all_regexp']] 66 | 67 | def is_exclude_listed(pkgname): 68 | for br in comps_exclude_list_all: 69 | if br.match(pkgname): 70 | return True 71 | return False 72 | 73 | # Parse comps, and build up a set of all packages so we 74 | # can find packages not listed in comps *at all*, beyond 75 | # just the workstation environment. 76 | comps = libcomps.Comps() 77 | comps.fromxml_f(args.src) 78 | 79 | # Parse the workstation-product environment, gathering 80 | # default or mandatory packages. 81 | ws_env_name = 'workstation-product-environment' 82 | ws_ostree_name = 'workstation-ostree-support' 83 | ws_environ = comps.environments[ws_env_name] 84 | ws_pkgs = {} 85 | for gid in ws_environ.group_ids: 86 | if gid.name in comps_exclude_list_groups: 87 | continue 88 | exclude_list = comps_exclude_list.get(gid.name, set()) 89 | for arch in ARCHES: 90 | filtered = comps.arch_filter([arch]) 91 | group = filtered.groups_match(id=gid.name)[0] 92 | for pkg in group.packages: 93 | pkgname = pkg.name 94 | if pkg.type not in (libcomps.PACKAGE_TYPE_DEFAULT, 95 | libcomps.PACKAGE_TYPE_MANDATORY): 96 | continue 97 | if pkgname in exclude_list or is_exclude_listed(pkgname): 98 | continue 99 | pkgdata = ws_pkgs.get(pkgname) 100 | if pkgdata is None: 101 | ws_pkgs[pkgname] = pkgdata = (pkg.type, set([gid.name]), set([arch])) 102 | if (pkgdata[0] == libcomps.PACKAGE_TYPE_DEFAULT and 103 | pkg.type == libcomps.PACKAGE_TYPE_MANDATORY): 104 | ws_pkgs[pkgname] = pkgdata = (pkg.type, pkgdata[1], pkgdata[2]) 105 | pkgdata[1].add(gid.name) 106 | pkgdata[2].add(arch) 107 | 108 | ws_ostree_pkgs = set() 109 | for pkg in comps.groups_match(id=ws_ostree_name)[0].packages: 110 | if not is_exclude_listed(pkg.name): 111 | ws_ostree_pkgs.add(pkg.name) 112 | 113 | comps_unknown = set() 114 | for arch in manifest_packages: 115 | for pkg in manifest_packages[arch]: 116 | if arch == "all": 117 | if pkg in ws_pkgs and set(ws_pkgs[pkg][2]) == set(ARCHES): 118 | continue 119 | else: 120 | if pkg in ws_pkgs and arch in ws_pkgs[pkg][2]: 121 | continue 122 | if (pkg not in comps_include_list and 123 | pkg not in ws_ostree_pkgs): 124 | comps_unknown.add((pkg, arch)) 125 | 126 | # Look for packages in the manifest but not in comps at all 127 | n_manifest_new = len(comps_unknown) 128 | if n_manifest_new == 0: 129 | print(" - All manifest packages are already listed in comps.") 130 | else: 131 | print(" - {} packages not in {}:".format(n_manifest_new, ws_env_name)) 132 | for (pkg, arch) in sorted(comps_unknown, key = lambda x: x[0]): 133 | print(' {} (arch: {})'.format(pkg, arch)) 134 | manifest_packages[arch].remove(pkg) 135 | 136 | # Look for packages in workstation but not in the manifest 137 | ws_added = {} 138 | for (pkg,data) in ws_pkgs.items(): 139 | if set(ARCHES) == set(data[2]): 140 | if pkg not in manifest_packages['all']: 141 | ws_added[pkg] = data 142 | manifest_packages['all'].add(pkg) 143 | else: 144 | for arch in data[2]: 145 | if pkg not in manifest_packages[arch]: 146 | manifest_packages[arch].add(pkg) 147 | if pkg not in ws_added: 148 | ws_added[pkg] = (data[0], data[1], set([arch])) 149 | else: 150 | ws_added[pkg][2].add(arch) 151 | 152 | n_comps_new = len(ws_added) 153 | if n_comps_new == 0: 154 | print(" - All comps packages are already listed in manifest.") 155 | else: 156 | print(" - {} packages not in manifest:".format(n_comps_new)) 157 | for pkg in sorted(ws_added): 158 | (req, groups, arches) = ws_added[pkg] 159 | print(' {} ({}, groups: {}, arches: {})'.format(pkg, format_pkgtype(req), ', '.join(groups), ', '.join(arches))) 160 | 161 | if (n_manifest_new > 0 or n_comps_new > 0) and args.save: 162 | write_manifest(base_pkgs_path, manifest_packages) 163 | 164 | # Generate treefiles for all desktops 165 | for desktop in [ 'gnome-desktop', 'kde-desktop', 'xfce-desktop', 166 | 'lxqt-desktop', 'deepin-desktop', 'mate-desktop']: 167 | print() 168 | print("Syncing packages for {}:".format(desktop)) 169 | 170 | manifest_path = '{}-pkgs.yaml'.format(desktop) 171 | with open(manifest_path) as f: 172 | manifest = yaml.safe_load(f) 173 | manifest_packages = {} 174 | manifest_packages['all'] = set(manifest['packages']) 175 | for arch in ARCHES: 176 | if f'packages-{arch}' in manifest: 177 | manifest_packages[arch] = set(manifest[f'packages-{arch}']) 178 | else: 179 | manifest_packages[arch] = set() 180 | 181 | # Filter packages in the comps desktop group using the exclude_list 182 | comps_group_pkgs = {} 183 | for arch in ARCHES: 184 | filtered = comps.arch_filter([arch]) 185 | for pkg in filtered.groups_match(id=desktop)[0].packages: 186 | pkgname = pkg.name 187 | exclude_list = comps_desktop_exclude_list.get(desktop, set()) 188 | if pkgname in exclude_list or is_exclude_listed(pkgname): 189 | continue 190 | if pkgname in comps_group_pkgs: 191 | comps_group_pkgs[pkgname].add(arch) 192 | else: 193 | comps_group_pkgs[pkgname] = set([arch]) 194 | 195 | comps_unknown = set() 196 | for arch in manifest_packages: 197 | for pkg in manifest_packages[arch]: 198 | if arch == "all": 199 | if pkg in comps_group_pkgs and set(comps_group_pkgs[pkg]) == set(ARCHES): 200 | continue 201 | else: 202 | if pkg in comps_group_pkgs and arch in comps_group_pkgs[pkg]: 203 | continue 204 | comps_unknown.add((pkg, arch)) 205 | 206 | # Look for packages in the manifest but not in comps at all 207 | n_manifest_new = len(comps_unknown) 208 | if n_manifest_new == 0: 209 | print(" - All manifest packages are already listed in comps.") 210 | else: 211 | print(" - {} packages not in {}:".format(n_manifest_new, ws_env_name)) 212 | for (pkg, arch) in sorted(comps_unknown, key = lambda x: x[0]): 213 | print(' {} (arch: {})'.format(pkg, arch)) 214 | manifest_packages[arch].remove(pkg) 215 | 216 | 217 | # Look for packages in comps but not in the manifest 218 | desktop_pkgs_added = {} 219 | for (pkg, parches) in comps_group_pkgs.items(): 220 | if set(ARCHES) == set(parches): 221 | if pkg not in manifest_packages['all']: 222 | desktop_pkgs_added[pkg] = parches 223 | manifest_packages['all'].add(pkg) 224 | else: 225 | for arch in parches: 226 | if pkg not in manifest_packages[arch]: 227 | manifest_packages[arch].add(pkg) 228 | if pkg not in desktop_pkgs_added: 229 | desktop_pkgs_added[pkg] = set([arch]) 230 | else: 231 | desktop_pkgs_added[pkg].add(arch) 232 | 233 | n_comps_new = len(desktop_pkgs_added) 234 | if n_comps_new == 0: 235 | print(" - All comps packages are already listed in manifest.") 236 | else: 237 | print(" - {} packages not in {} manifest:".format(n_comps_new, desktop)) 238 | for pkg in sorted(desktop_pkgs_added): 239 | arches = desktop_pkgs_added[pkg] 240 | print(' {} (arches: {})'.format(pkg, ', '.join(arches))) 241 | 242 | # Update manifest 243 | if (n_manifest_new > 0 or n_comps_new > 0) and args.save: 244 | write_manifest(manifest_path, manifest_packages, include="fedora-common-ostree.yaml") 245 | -------------------------------------------------------------------------------- /config.ini: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | 3 | outputdir = /home/fedora/workstation-ostree-config 4 | # workdir = os.getcwd() 5 | # srcdir = os.path.join(os.path.dirname(sys.argv[0], '..') 6 | # rpmostree_cache_dir = %(workdir)s/%(release)s/cache 7 | ostree_repo = %(outputdir)s/repo 8 | os_name = fedora-ostree 9 | os_pretty_name = Fedora ostree Workstation 10 | tree_name = workstation 11 | tree_file = %(os_name)s-%(tree_name)s.json 12 | arch = x86_64 13 | release = 37 14 | ref = %(os_name)s/%(release)s/%(arch)s/%(tree_name)s 15 | # Force use of a closeish and fastish HTTP mirror, so that the HTTP proxy works 16 | yum_baseurl = https://download.fedoraproject.org/pub/fedora/linux/development/37/Everything/%(arch)s/os/ 17 | # lorax_additional_repos = http://127.0.0.1/fedora-atomic/local-overrides 18 | # lorax_include_packages = fedora-productimg-atomic 19 | docker_os_name = fedora 20 | -------------------------------------------------------------------------------- /deepin-desktop-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | include: fedora-common-ostree.yaml 3 | packages: 4 | - deepin-calculator 5 | - deepin-calendar 6 | - deepin-desktop 7 | - deepin-editor 8 | - deepin-file-manager 9 | - deepin-icon-theme 10 | - deepin-image-viewer 11 | - deepin-picker 12 | - deepin-screenshot 13 | - deepin-system-monitor 14 | - firewall-config 15 | packages-x86_64: 16 | - chromium 17 | packages-aarch64: 18 | - chromium 19 | -------------------------------------------------------------------------------- /fedora-37-updates.repo: -------------------------------------------------------------------------------- 1 | [fedora-37-updates] 2 | name=Fedora 37 $basearch Updates 3 | mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f37&arch=$basearch 4 | enabled=1 5 | gpgcheck=1 6 | metadata_expire=1d 7 | -------------------------------------------------------------------------------- /fedora-37.repo: -------------------------------------------------------------------------------- 1 | [fedora-37] 2 | name=Fedora 37 $basearch 3 | mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-37&arch=$basearch 4 | enabled=1 5 | gpgcheck=1 6 | metadata_expire=1d 7 | -------------------------------------------------------------------------------- /fedora-base.yaml: -------------------------------------------------------------------------------- 1 | include: fedora-common-ostree.yaml 2 | ref: fedora/37/${basearch}/base 3 | rojig: 4 | name: fedora-base 5 | summary: "Fedora base image for alternative DE" 6 | license: MIT 7 | packages: 8 | # Generic release package for desktop variants 9 | - fedora-release 10 | - fedora-release-ostree-desktop 11 | # XWayland support 12 | - xorg-x11-server-Xwayland 13 | # Portals for Flatpak 14 | - xdg-desktop-portal 15 | - xdg-desktop-portal-gtk 16 | 17 | repos: 18 | - fedora-37 19 | - fedora-37-updates 20 | -------------------------------------------------------------------------------- /fedora-common-ostree-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | packages: 3 | - NetworkManager 4 | - NetworkManager-bluetooth 5 | - NetworkManager-config-connectivity-fedora 6 | - NetworkManager-wifi 7 | - NetworkManager-wwan 8 | - abattis-cantarell-vf-fonts 9 | - acl 10 | - adwaita-qt5 11 | - alsa-ucm 12 | - alsa-utils 13 | - amd-gpu-firmware 14 | - atmel-firmware 15 | - attr 16 | - audit 17 | - b43-fwcutter 18 | - b43-openfwwf 19 | - basesystem 20 | - bash 21 | - bash-completion 22 | - bc 23 | - bind-utils 24 | - bluez-cups 25 | - btrfs-progs 26 | - bzip2 27 | - chrony 28 | - cifs-utils 29 | - colord 30 | - compsize 31 | - coreutils 32 | - cpio 33 | - cryptsetup 34 | - cups 35 | - cups-filters 36 | - curl 37 | - cyrus-sasl-plain 38 | - default-editor 39 | - dhcp-client 40 | - dnsmasq 41 | - e2fsprogs 42 | - ethtool 43 | - exfatprogs 44 | - fedora-bookmarks 45 | - fedora-chromium-config 46 | - fedora-flathub-remote 47 | - fedora-repos-modular 48 | - fedora-workstation-backgrounds 49 | - fedora-workstation-repositories 50 | - file 51 | - filesystem 52 | - firefox 53 | - firewalld 54 | - fpaste 55 | - fros-gnome 56 | - fwupd 57 | - gamemode 58 | - glibc 59 | - glibc-all-langpacks 60 | - glx-utils 61 | - gnupg2 62 | - google-noto-emoji-color-fonts 63 | - google-noto-naskh-arabic-vf-fonts 64 | - google-noto-sans-arabic-vf-fonts 65 | - google-noto-sans-armenian-vf-fonts 66 | - google-noto-sans-canadian-aboriginal-vf-fonts 67 | - google-noto-sans-cherokee-vf-fonts 68 | - google-noto-sans-cjk-ttc-fonts 69 | - google-noto-sans-ethiopic-vf-fonts 70 | - google-noto-sans-georgian-vf-fonts 71 | - google-noto-sans-gurmukhi-vf-fonts 72 | - google-noto-sans-hebrew-vf-fonts 73 | - google-noto-sans-lao-vf-fonts 74 | - google-noto-sans-math-fonts 75 | - google-noto-sans-mono-vf-fonts 76 | - google-noto-sans-sinhala-vf-fonts 77 | - google-noto-sans-thaana-vf-fonts 78 | - google-noto-sans-vf-fonts 79 | - google-noto-serif-vf-fonts 80 | - gstreamer1-plugins-bad-free 81 | - gstreamer1-plugins-good 82 | - gstreamer1-plugins-ugly-free 83 | - gutenprint 84 | - gutenprint-cups 85 | - hostname 86 | - hplip 87 | - hunspell 88 | - ibus-anthy 89 | - ibus-gtk3 90 | - ibus-gtk4 91 | - ibus-hangul 92 | - ibus-libpinyin 93 | - ibus-libzhuyin 94 | - ibus-m17n 95 | - ibus-typing-booster 96 | - intel-gpu-firmware 97 | - iproute 98 | - iptables-nft 99 | - iptstate 100 | - iputils 101 | - iwl100-firmware 102 | - iwl1000-firmware 103 | - iwl105-firmware 104 | - iwl135-firmware 105 | - iwl2000-firmware 106 | - iwl2030-firmware 107 | - iwl3160-firmware 108 | - iwl3945-firmware 109 | - iwl4965-firmware 110 | - iwl5000-firmware 111 | - iwl5150-firmware 112 | - iwl6000-firmware 113 | - iwl6000g2a-firmware 114 | - iwl6000g2b-firmware 115 | - iwl6050-firmware 116 | - iwl7260-firmware 117 | - iwlax2xx-firmware 118 | - jomolhari-fonts 119 | - kbd 120 | - kernel 121 | - kernel-modules-extra 122 | - khmer-os-system-fonts 123 | - less 124 | - liberation-mono-fonts 125 | - liberation-sans-fonts 126 | - liberation-serif-fonts 127 | - libertas-usb8388-firmware 128 | - libglvnd-gles 129 | - linux-firmware 130 | - logrotate 131 | - lohit-assamese-fonts 132 | - lohit-bengali-fonts 133 | - lohit-devanagari-fonts 134 | - lohit-gujarati-fonts 135 | - lohit-kannada-fonts 136 | - lohit-marathi-fonts 137 | - lohit-odia-fonts 138 | - lohit-tamil-fonts 139 | - lohit-telugu-fonts 140 | - lrzsz 141 | - lsof 142 | - man-db 143 | - man-pages 144 | - mdadm 145 | - mesa-dri-drivers 146 | - mesa-vulkan-drivers 147 | - mpage 148 | - mtr 149 | - nfs-utils 150 | - nss-altfiles 151 | - nss-mdns 152 | - ntfs-3g 153 | - ntfsprogs 154 | - nvidia-gpu-firmware 155 | - opensc 156 | - openssh-clients 157 | - openssh-server 158 | - paktype-naskh-basic-fonts 159 | - pam_afs_session 160 | - paps 161 | - passwd 162 | - passwdqc 163 | - pciutils 164 | - pinfo 165 | - pipewire-alsa 166 | - pipewire-gstreamer 167 | - pipewire-pulseaudio 168 | - pipewire-utils 169 | - plocate 170 | - plymouth 171 | - plymouth-system-theme 172 | - policycoreutils 173 | - policycoreutils-python-utils 174 | - procps-ng 175 | - psmisc 176 | - qemu-guest-agent 177 | - qgnomeplatform-qt5 178 | - qt5-qtbase 179 | - qt5-qtbase-gui 180 | - qt5-qtdeclarative 181 | - qt5-qtxmlpatterns 182 | - quota 183 | - realmd 184 | - rit-meera-new-fonts 185 | - rootfiles 186 | - rpm 187 | - rsync 188 | - samba-client 189 | - selinux-policy-targeted 190 | - setup 191 | - shadow-utils 192 | - sil-mingzat-fonts 193 | - sil-nuosu-fonts 194 | - sil-padauk-fonts 195 | - sos 196 | - spice-vdagent 197 | - spice-webdavd 198 | - sssd 199 | - sssd-common 200 | - sssd-kcm 201 | - stix-fonts 202 | - sudo 203 | - system-config-printer-udev 204 | - systemd 205 | - systemd-oomd-defaults 206 | - systemd-resolved 207 | - systemd-udev 208 | - tar 209 | - thai-scalable-waree-fonts 210 | - time 211 | - toolbox 212 | - tree 213 | - unzip 214 | - uresourced 215 | - usb_modeswitch 216 | - usbutils 217 | - util-linux 218 | - vazirmatn-vf-fonts 219 | - vim-minimal 220 | - wget 221 | - which 222 | - whois 223 | - wireplumber 224 | - words 225 | - wpa_supplicant 226 | - xorg-x11-drv-amdgpu 227 | - xorg-x11-drv-ati 228 | - xorg-x11-drv-evdev 229 | - xorg-x11-drv-fbdev 230 | - xorg-x11-drv-libinput 231 | - xorg-x11-drv-nouveau 232 | - xorg-x11-drv-qxl 233 | - xorg-x11-drv-wacom 234 | - xorg-x11-server-Xorg 235 | - xorg-x11-xauth 236 | - xorg-x11-xinit 237 | - zd1211-firmware 238 | - zip 239 | - zram-generator-defaults 240 | packages-x86_64: 241 | - alsa-sof-firmware 242 | -------------------------------------------------------------------------------- /fedora-common-ostree.yaml: -------------------------------------------------------------------------------- 1 | ref: fedora/37/${basearch}/ostree-base 2 | 3 | automatic_version_prefix: "37" 4 | mutate-os-release: "37" 5 | 6 | include: fedora-common-ostree-pkgs.yaml 7 | 8 | packages: 9 | # Do not include "full" Git as it brings in Perl 10 | - git-core 11 | # Explicitely add Git docs 12 | - git-core-doc 13 | - lvm2 14 | - rpm-ostree 15 | # Container management 16 | - buildah 17 | - podman 18 | - skopeo 19 | - toolbox 20 | # Provides terminal tools like clear, reset, tput, and tset 21 | - ncurses 22 | # Flatpak support 23 | - flatpak 24 | - xdg-desktop-portal 25 | # HFS filesystem tools for Apple hardware 26 | # See https://github.com/projectatomic/rpm-ostree/issues/1380 27 | - hfsplus-tools 28 | # Contains default ostree remote config to be used on client's 29 | # system for fetching ostree update 30 | - fedora-repos-ostree 31 | # the archive repo for more reliable package layering 32 | # https://github.com/coreos/fedora-coreos-tracker/issues/400 33 | - fedora-repos-archive 34 | 35 | selinux: true 36 | documentation: true 37 | boot-location: modules 38 | etc-group-members: 39 | - wheel 40 | tmp-is-dir: true 41 | 42 | ignore-removed-users: 43 | - root 44 | ignore-removed-groups: 45 | - root 46 | check-passwd: 47 | type: file 48 | filename: passwd 49 | check-groups: 50 | type: file 51 | filename: group 52 | 53 | default_target: graphical.target 54 | 55 | packages-aarch64: 56 | - grub2-efi 57 | - ostree-grub2 58 | - efibootmgr 59 | - shim 60 | packages-armhfp: 61 | - extlinux-bootloader 62 | - xorg-x11-drv-armada 63 | packages-ppc64: 64 | - grub2 65 | - ostree-grub2 66 | packages-ppc64le: 67 | - grub2 68 | - ostree-grub2 69 | packages-x86_64: 70 | - grub2-efi-ia32 71 | - grub2-efi-x64 72 | - grub2-pc 73 | - ostree-grub2 74 | - efibootmgr 75 | - shim-ia32 76 | - shim-x64 77 | - microcode_ctl 78 | - mcelog 79 | - thermald 80 | - hyperv-daemons 81 | - open-vm-tools-desktop 82 | - virtualbox-guest-additions 83 | - xorg-x11-drv-intel 84 | - xorg-x11-drv-openchrome 85 | - xorg-x11-drv-vesa 86 | - xorg-x11-drv-vmware 87 | 88 | # Make sure the following are not pulled in when Recommended by other packages 89 | exclude-packages: 90 | - PackageKit 91 | # We can not include openh264. See https://fedoraproject.org/wiki/OpenH264 92 | - gstreamer1-plugin-openh264 93 | - mozilla-openh264 94 | - openh264 95 | 96 | postprocess: 97 | - | 98 | #!/usr/bin/env bash 99 | set -xeuo pipefail 100 | 101 | # Work around https://bugzilla.redhat.com/show_bug.cgi?id=1265295 102 | # From https://github.com/coreos/fedora-coreos-config/blob/testing-devel/overlay.d/05core/usr/lib/systemd/journald.conf.d/10-coreos-persistent.conf 103 | install -dm0755 /usr/lib/systemd/journald.conf.d/ 104 | echo -e "[Journal]\nStorage=persistent" > /usr/lib/systemd/journald.conf.d/10-persistent.conf 105 | 106 | # See: https://src.fedoraproject.org/rpms/glibc/pull-request/4 107 | # Basically that program handles deleting old shared library directories 108 | # mid-transaction, which never applies to rpm-ostree. This is structured as a 109 | # loop/glob to avoid hardcoding (or trying to match) the architecture. 110 | for x in /usr/sbin/glibc_post_upgrade.*; do 111 | if test -f ${x}; then 112 | ln -srf /usr/bin/true ${x} 113 | fi 114 | done 115 | postprocess-script: "postprocess.sh" 116 | -------------------------------------------------------------------------------- /fedora-deepin.yaml: -------------------------------------------------------------------------------- 1 | include: deepin-desktop-pkgs.yaml 2 | ref: fedora/37/${basearch}/deepin 3 | rojig: 4 | name: fedora-deepin 5 | summary: "Fedora Deepin base image" 6 | license: MIT 7 | packages: 8 | # Generic release package for desktop variants 9 | - fedora-release 10 | - fedora-release-ostree-desktop 11 | # GUI to manage updates & Flatpaks 12 | - gnome-software 13 | 14 | repos: 15 | - fedora-37 16 | - fedora-37-updates 17 | -------------------------------------------------------------------------------- /fedora-kinoite.yaml: -------------------------------------------------------------------------------- 1 | include: kde-desktop-pkgs.yaml 2 | ref: fedora/37/${basearch}/kinoite 3 | rojig: 4 | name: fedora-kde 5 | summary: "Fedora Kinoite (KDE) base image" 6 | license: MIT 7 | packages: 8 | - fedora-release-kinoite 9 | # Wayland support 10 | - kwayland-integration 11 | - kwin-wayland 12 | - plasma-workspace-wayland 13 | - xorg-x11-server-Xwayland 14 | # Portals for Flatpak 15 | - xdg-desktop-portal-kde 16 | # Provide an archive manager by default 17 | - ark 18 | # Keep some basic apps installed until we have Flatpaks available 19 | # See https://pagure.io/fedora-kde/SIG/issue/13 20 | - gwenview 21 | - kcalc 22 | - kwrite 23 | - okular 24 | # Install some minor optional tools for KInfoCenter 25 | - vulkan-tools 26 | - xdpyinfo 27 | # Includes a KIO & KCM (can not be Flatpak'ed), used by Dolphin and Gwenview 28 | # See https://pagure.io/fedora-kde/SIG/issue/291 29 | - kamera 30 | 31 | # Make sure the following are not pulled in when Recommended by other packages 32 | exclude-packages: 33 | - plasma-discover-offline-updates 34 | - plasma-discover-packagekit 35 | # Exclude currently broken support for rpm-ostree in Discover 36 | - plasma-discover-rpm-ostree 37 | - plasma-pk-updates 38 | 39 | repos: 40 | - fedora-37 41 | - fedora-37-updates 42 | -------------------------------------------------------------------------------- /fedora-lxqt.yaml: -------------------------------------------------------------------------------- 1 | include: lxqt-desktop-pkgs.yaml 2 | ref: fedora/37/${basearch}/lxqt 3 | rojig: 4 | name: fedora-lxqt 5 | summary: "Fedora LXQt base image" 6 | license: MIT 7 | packages: 8 | # Generic release package for desktop variants 9 | - fedora-release 10 | - fedora-release-ostree-desktop 11 | - libqtxdg 12 | # Portals for Flatpak 13 | - xdg-desktop-portal-kde 14 | 15 | repos: 16 | - fedora-37 17 | - fedora-37-updates 18 | -------------------------------------------------------------------------------- /fedora-mate.yaml: -------------------------------------------------------------------------------- 1 | include: mate-desktop-pkgs.yaml 2 | ref: fedora/37/${basearch}/mate 3 | rojig: 4 | name: fedora-mate 5 | summary: "Fedora Mate base image" 6 | license: MIT 7 | packages: 8 | # Generic release sub package for desktop variants 9 | - fedora-release-ostree-desktop 10 | # Portals for Flatpak 11 | - xdg-desktop-portal-gtk 12 | 13 | exclude-packages: 14 | - python3-unbound 15 | 16 | repos: 17 | - fedora-37 18 | - fedora-37-updates 19 | -------------------------------------------------------------------------------- /fedora-silverblue.yaml: -------------------------------------------------------------------------------- 1 | include: gnome-desktop-pkgs.yaml 2 | ref: fedora/37/${basearch}/silverblue 3 | rojig: 4 | name: fedora-silverblue 5 | summary: "Fedora Silverblue base image" 6 | license: MIT 7 | packages: 8 | - fedora-release-silverblue 9 | - desktop-backgrounds-gnome 10 | - gnome-shell-extension-background-logo 11 | - pinentry-gnome3 12 | # Does it really still make sense to ship Qt by default if we 13 | # expect people to run apps in containers? 14 | - qgnomeplatform 15 | # Include evince-thumbnailer otherwise PDF thumbnails won't work in Nautilus 16 | # https://github.com/fedora-silverblue/issue-tracker/issues/98 17 | - evince-thumbnailer 18 | # Include evince-previewer otherwise print previews are broken in Evince 19 | # https://github.com/fedora-silverblue/issue-tracker/issues/122 20 | - evince-previewer 21 | # Include totem-video-thumbnailer for video thumbnailing in Nautilus 22 | # https://pagure.io/fedora-workstation/issue/168 23 | - totem-video-thumbnailer 24 | 25 | repos: 26 | - fedora-37 27 | - fedora-37-updates 28 | -------------------------------------------------------------------------------- /fedora-vauxite.yaml: -------------------------------------------------------------------------------- 1 | include: xfce-desktop-pkgs.yaml 2 | ref: fedora/37/${basearch}/vauxite 3 | rojig: 4 | name: fedora-vauxite 5 | summary: "Fedora Vauxite (XFCE) base image" 6 | license: MIT 7 | packages: 8 | - fedora-release-xfce 9 | # Generic release sub package for desktop variants 10 | - fedora-release-ostree-desktop 11 | # Portals for Flatpak 12 | - xdg-desktop-portal-gtk 13 | # Essential packages from @xfce-apps 14 | - atril 15 | - firefox 16 | - galculator 17 | - mousepad 18 | - ristretto 19 | - xarchiver 20 | - xfce4-battery-plugin 21 | - xfce4-clipman-plugin 22 | - xfce4-cpugraph-plugin 23 | - xfce4-genmon-plugin 24 | - xfce4-weather-plugin 25 | - xfce4-whiskermenu-plugin 26 | repos: 27 | - fedora-37 28 | - fedora-37-updates 29 | -------------------------------------------------------------------------------- /github-fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Download built GitHub OSTree repository artifact and unpack it into a plain directory 3 | set -eux 4 | 5 | # download latest repo build 6 | REPO_FINAL="$(dirname $0)/vauxite-desktop" 7 | REPO="${REPO_FINAL}.new" 8 | 9 | CURL="curl -u token:$(cat ~/.config/github-token) --show-error --fail" 10 | RESPONSE=$($CURL --silent https://api.github.com/repos/hyperreal64/ostree-vauxite-desktop/actions/artifacts) 11 | ZIP=$(echo "$RESPONSE" | jq --raw-output '.artifacts | map(select(.name == "repository"))[0].archive_download_url') 12 | echo "INFO: Downloading $ZIP ..." 13 | success= 14 | for retry in $(seq 5); do 15 | if $CURL -L -o /tmp/repository.zip "$ZIP"; then 16 | success=1 17 | break 18 | fi 19 | sleep 30 20 | done 21 | [ -n "$success" ] || exit 1 22 | rm -rf "$REPO" 23 | mkdir -p "$REPO" 24 | unzip -p /tmp/repository.zip | tar -xzC "$REPO" 25 | rm /tmp/repository.zip 26 | [ ! -e "$REPO_FINAL" ] || mv "${REPO_FINAL}" "${REPO_FINAL}.old" 27 | mv "$REPO" "$REPO_FINAL" 28 | rm -rf "${REPO_FINAL}.old" 29 | 30 | chcon -Rt httpd_sys_content_t "$REPO_FINAL" 31 | chcon -Rt httpd_sys_rw_content_t "$REPO_FINAL" 32 | chmod +x "$REPO_FINAL" 33 | -------------------------------------------------------------------------------- /gnome-desktop-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | include: fedora-common-ostree.yaml 3 | packages: 4 | - ModemManager 5 | - NetworkManager-adsl 6 | - NetworkManager-openconnect-gnome 7 | - NetworkManager-openvpn-gnome 8 | - NetworkManager-ppp 9 | - NetworkManager-pptp-gnome 10 | - NetworkManager-ssh-gnome 11 | - NetworkManager-vpnc-gnome 12 | - NetworkManager-wwan 13 | - adobe-source-code-pro-fonts 14 | - at-spi2-atk 15 | - at-spi2-core 16 | - avahi 17 | - dconf 18 | - fprintd-pam 19 | - gdm 20 | - glib-networking 21 | - gnome-backgrounds 22 | - gnome-bluetooth 23 | - gnome-browser-connector 24 | - gnome-classic-session 25 | - gnome-color-manager 26 | - gnome-control-center 27 | - gnome-disk-utility 28 | - gnome-initial-setup 29 | - gnome-remote-desktop 30 | - gnome-session-wayland-session 31 | - gnome-session-xsession 32 | - gnome-settings-daemon 33 | - gnome-shell 34 | - gnome-software 35 | - gnome-system-monitor 36 | - gnome-terminal 37 | - gnome-terminal-nautilus 38 | - gnome-themes-extra 39 | - gnome-user-docs 40 | - gnome-user-share 41 | - gvfs-afc 42 | - gvfs-afp 43 | - gvfs-archive 44 | - gvfs-fuse 45 | - gvfs-goa 46 | - gvfs-gphoto2 47 | - gvfs-mtp 48 | - gvfs-smb 49 | - libcanberra-gtk3 50 | - libproxy-duktape 51 | - librsvg2 52 | - libsane-hpaio 53 | - mesa-dri-drivers 54 | - mesa-libEGL 55 | - nautilus 56 | - orca 57 | - polkit 58 | - rygel 59 | - systemd-oomd-defaults 60 | - tracker 61 | - tracker-miners 62 | - xdg-desktop-portal 63 | - xdg-desktop-portal-gnome 64 | - xdg-desktop-portal-gtk 65 | - xdg-user-dirs-gtk 66 | - yelp 67 | -------------------------------------------------------------------------------- /group: -------------------------------------------------------------------------------- 1 | root:x:0: 2 | bin:x:1: 3 | daemon:x:2: 4 | sys:x:3: 5 | adm:x:4: 6 | tty:x:5: 7 | disk:x:6: 8 | lp:x:7: 9 | mem:x:8: 10 | kmem:x:9: 11 | wheel:x:10: 12 | cdrom:x:11: 13 | mail:x:12: 14 | man:x:15: 15 | dialout:x:18: 16 | floppy:x:19: 17 | games:x:20: 18 | tape:x:30: 19 | video:x:39: 20 | ftp:x:50: 21 | lock:x:54: 22 | audio:x:63: 23 | nobody:x:99: 24 | users:x:100: 25 | utmp:x:22: 26 | utempter:x:35: 27 | ssh_keys:x:999: 28 | systemd-journal:x:190: 29 | dbus:x:81: 30 | polkitd:x:998: 31 | etcd:x:997: 32 | dip:x:40: 33 | cgred:x:996: 34 | tss:x:59: 35 | avahi-autoipd:x:170: 36 | rpc:x:32: 37 | sssd:x:993: 38 | dockerroot:x:986: 39 | rpcuser:x:29: 40 | nfsnobody:x:65534: 41 | kube:x:994: 42 | sshd:x:74: 43 | chrony:x:992: 44 | tcpdump:x:72: 45 | input:x:995: 46 | systemd-timesync:x:991: 47 | systemd-network:x:990: 48 | systemd-resolve:x:989: 49 | systemd-bus-proxy:x:988: 50 | cockpit-ws:x:987: 51 | -------------------------------------------------------------------------------- /kde-desktop-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | include: fedora-common-ostree.yaml 3 | packages: 4 | - NetworkManager-config-connectivity-fedora 5 | - bluedevil 6 | - breeze-icon-theme 7 | - dolphin 8 | - ffmpegthumbs 9 | - firewall-config 10 | - fprintd-pam 11 | - glibc-all-langpacks 12 | - gnome-keyring-pam 13 | - initial-setup-gui 14 | - kde-connect 15 | - kde-gtk-config 16 | - kde-partitionmanager 17 | - kde-print-manager 18 | - kde-settings-pulseaudio 19 | - kdegraphics-thumbnailers 20 | - kdeplasma-addons 21 | - kdialog 22 | - kf5-akonadi-server 23 | - kf5-akonadi-server-mysql 24 | - kf5-baloo-file 25 | - khelpcenter 26 | - khotkeys 27 | - kinfocenter 28 | - kio-admin 29 | - kmag 30 | - kmenuedit 31 | - kmousetool 32 | - konsole5 33 | - kscreen 34 | - kscreenlocker 35 | - kwalletmanager5 36 | - kwin 37 | - pam-kwallet 38 | - phonon-qt5-backend-gstreamer 39 | - pinentry-qt 40 | - plasma-breeze 41 | - plasma-desktop 42 | - plasma-desktop-doc 43 | - plasma-discover 44 | - plasma-discover-notifier 45 | - plasma-disks 46 | - plasma-drkonqi 47 | - plasma-nm 48 | - plasma-nm-openconnect 49 | - plasma-nm-openvpn 50 | - plasma-nm-vpnc 51 | - plasma-pa 52 | - plasma-systemmonitor 53 | - plasma-thunderbolt 54 | - plasma-vault 55 | - plasma-workspace 56 | - plasma-workspace-geolocation 57 | - plasma-workspace-wallpapers 58 | - plasma-workspace-xorg 59 | - polkit-kde 60 | - qt-at-spi 61 | - qt5-qtbase-gui 62 | - qt5-qtdeclarative 63 | - sddm 64 | - sddm-breeze 65 | - sddm-kcm 66 | - spectacle 67 | - systemd-oomd-defaults 68 | - udisks2 69 | - xdg-desktop-portal-gnome 70 | - xorg-x11-drv-libinput 71 | packages-x86_64: 72 | - kio-gdrive 73 | packages-aarch64: 74 | - kio-gdrive 75 | -------------------------------------------------------------------------------- /lxqt-desktop-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | include: fedora-common-ostree.yaml 3 | packages: 4 | - breeze-cursor-theme 5 | - breeze-gtk 6 | - breeze-icon-theme 7 | - firewall-config 8 | - initial-setup-gui 9 | - lxqt-about 10 | - lxqt-archiver 11 | - lxqt-config 12 | - lxqt-globalkeys 13 | - lxqt-notificationd 14 | - lxqt-openssh-askpass 15 | - lxqt-panel 16 | - lxqt-policykit 17 | - lxqt-powermanagement 18 | - lxqt-qtplugin 19 | - lxqt-runner 20 | - lxqt-session 21 | - lxqt-themes 22 | - lxqt-themes-fedora 23 | - network-manager-applet 24 | - nm-connection-editor 25 | - notification-daemon 26 | - obconf 27 | - openbox 28 | - pcmanfm-qt 29 | - perl-File-MimeInfo 30 | - qterminal 31 | - sddm 32 | - sddm-themes 33 | - upower 34 | - xdg-user-dirs 35 | packages-x86_64: 36 | - falkon 37 | packages-aarch64: 38 | - falkon 39 | -------------------------------------------------------------------------------- /mate-desktop-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | include: fedora-common-ostree.yaml 3 | packages: 4 | - NetworkManager-adsl 5 | - NetworkManager-openconnect-gnome 6 | - NetworkManager-openvpn-gnome 7 | - NetworkManager-ppp 8 | - NetworkManager-pptp-gnome 9 | - NetworkManager-ssh-gnome 10 | - NetworkManager-vpnc-gnome 11 | - NetworkManager-wwan 12 | - atril 13 | - atril-caja 14 | - atril-thumbnailer 15 | - blueberry 16 | - caja 17 | - caja-actions 18 | - caja-image-converter 19 | - caja-open-terminal 20 | - caja-sendto 21 | - caja-wallpaper 22 | - caja-xattr-tags 23 | - dconf-editor 24 | - engrampa 25 | - eom 26 | - f36-backgrounds-base 27 | - f36-backgrounds-extras-base 28 | - f36-backgrounds-extras-mate 29 | - f36-backgrounds-mate 30 | - fedora-release-matecompiz 31 | - firefox 32 | - firewall-config 33 | - gnome-epub-thumbnailer 34 | - gnome-themes-extra 35 | - gstreamer1-plugins-ugly-free 36 | - gtk2-engines 37 | - gucharmap 38 | - gvfs-afc 39 | - gvfs-afp 40 | - gvfs-archive 41 | - gvfs-fuse 42 | - gvfs-gphoto2 43 | - gvfs-mtp 44 | - gvfs-nfs 45 | - gvfs-smb 46 | - initial-setup-gui 47 | - libmatekbd 48 | - libmatemixer 49 | - libmateweather 50 | - libsecret 51 | - lightdm 52 | - lm_sensors 53 | - marco 54 | - mate-applets 55 | - mate-backgrounds 56 | - mate-calc 57 | - mate-control-center 58 | - mate-desktop 59 | - mate-dictionary 60 | - mate-disk-usage-analyzer 61 | - mate-icon-theme 62 | - mate-media 63 | - mate-menus 64 | - mate-menus-preferences-category-menu 65 | - mate-notification-daemon 66 | - mate-panel 67 | - mate-polkit 68 | - mate-power-manager 69 | - mate-screensaver 70 | - mate-screenshot 71 | - mate-search-tool 72 | - mate-session-manager 73 | - mate-settings-daemon 74 | - mate-system-log 75 | - mate-system-monitor 76 | - mate-terminal 77 | - mate-themes 78 | - mate-user-admin 79 | - mate-user-guide 80 | - mozo 81 | - network-manager-applet 82 | - nm-connection-editor 83 | - orca 84 | - parole 85 | - pavucontrol 86 | - pipewire-alsa 87 | - pipewire-pulseaudio 88 | - pluma 89 | - seahorse 90 | - seahorse-caja 91 | - setroubleshoot 92 | - slick-greeter-mate 93 | - system-config-language 94 | - system-config-printer 95 | - system-config-printer-applet 96 | - usermode-gtk 97 | - xdg-user-dirs-gtk 98 | - xmodmap 99 | - xrdb 100 | -------------------------------------------------------------------------------- /passwd: -------------------------------------------------------------------------------- 1 | root:x:0:0:root:/root:/bin/bash 2 | bin:x:1:1:bin:/bin:/sbin/nologin 3 | daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 | adm:x:3:4:adm:/var/adm:/sbin/nologin 5 | lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 | sync:x:5:0:sync:/sbin:/bin/sync 7 | shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 | halt:x:7:0:halt:/sbin:/sbin/halt 9 | mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 | operator:x:11:0:operator:/root:/sbin/nologin 11 | games:x:12:100:games:/usr/games:/sbin/nologin 12 | ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13 | nobody:x:99:99:Nobody:/:/sbin/nologin 14 | dbus:x:81:81:System message bus:/:/sbin/nologin 15 | polkitd:x:999:998:User for polkitd:/:/sbin/nologin 16 | etcd:x:998:997:etcd user:/var/lib/etcd:/sbin/nologin 17 | tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 18 | avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin 19 | rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin 20 | sssd:x:995:993:User for sssd:/:/sbin/nologin 21 | dockerroot:x:997:986:Docker User:/var/lib/docker:/sbin/nologin 22 | rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin 23 | nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin 24 | kube:x:996:994:Kubernetes user:/:/sbin/nologin 25 | sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 26 | chrony:x:994:992::/var/lib/chrony:/sbin/nologin 27 | tcpdump:x:72:72::/:/sbin/nologin 28 | systemd-timesync:x:993:991:systemd Time Synchronization:/:/sbin/nologin 29 | systemd-network:x:991:990:systemd Network Management:/:/sbin/nologin 30 | systemd-resolve:x:990:989:systemd Resolver:/:/sbin/nologin 31 | systemd-bus-proxy:x:989:988:systemd Bus Proxy:/:/sbin/nologin 32 | cockpit-ws:x:988:987:User for cockpit-ws:/:/sbin/nologin 33 | -------------------------------------------------------------------------------- /postprocess.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -xeuo pipefail 3 | 4 | # Setup unit & script for readonly sysroot migration: 5 | # - https://fedoraproject.org/wiki/Changes/Silverblue_Kinoite_readonly_sysroot 6 | # - https://bugzilla.redhat.com/show_bug.cgi?id=2060976 7 | 8 | cat > /usr/lib/systemd/system/fedora-silverblue-readonly-sysroot.service <<'EOF' 9 | [Unit] 10 | Description=Fedora Silverblue Read-Only Sysroot Migration 11 | Documentation=https://fedoraproject.org/wiki/Changes/Silverblue_Kinoite_readonly_sysroot 12 | ConditionPathExists=!/var/lib/.fedora_silverblue_readonly_sysroot 13 | RequiresMountsFor=/sysroot /boot 14 | ConditionPathIsReadWrite=/sysroot 15 | 16 | [Service] 17 | Type=oneshot 18 | ExecStart=/usr/libexec/fedora-silverblue-readonly-sysroot 19 | RemainAfterExit=yes 20 | 21 | [Install] 22 | WantedBy=multi-user.target 23 | EOF 24 | 25 | chmod 644 /usr/lib/systemd/system/fedora-silverblue-readonly-sysroot.service 26 | 27 | cat > /usr/libexec/fedora-silverblue-readonly-sysroot <<'EOF' 28 | #!/bin/bash 29 | 30 | # Update an existing system to use a read only sysroot 31 | # See https://fedoraproject.org/wiki/Changes/Silverblue_Kinoite_readonly_sysroot 32 | # and https://bugzilla.redhat.com/show_bug.cgi?id=2060976 33 | 34 | set -euo pipefail 35 | 36 | main() { 37 | # Used to condition execution of this unit at the systemd level 38 | local -r stamp_file="/var/lib/.fedora_silverblue_readonly_sysroot" 39 | 40 | if [[ -f "${stamp_file}" ]]; then 41 | exit 0 42 | fi 43 | 44 | local -r ostree_sysroot_readonly="$(ostree config --repo=/sysroot/ostree/repo get "sysroot.readonly" &> /dev/null || echo "false")" 45 | if [[ "${ostree_sysroot_readonly}" == "true" ]]; then 46 | # Nothing to do 47 | touch "${stamp_file}" 48 | exit 0 49 | fi 50 | 51 | local -r boot_entries="$(ls -A /boot/loader/entries/ | wc -l)" 52 | 53 | # Ensure that we can read BLS entries to avoid touching systems where /boot 54 | # is not mounted 55 | if [[ "${boot_entries}" -eq 0 ]]; then 56 | echo "No BLS entry found: Maybe /boot is not mounted?" 1>&2 57 | echo "This is unexpected thus no migration will be performed" 1>&2 58 | touch "${stamp_file}" 59 | exit 0 60 | fi 61 | 62 | # Check if any existing deployment is still missing the rw karg 63 | local rw_kargs_found=0 64 | local count=0 65 | for f in "/boot/loader/entries/"*; do 66 | count="$(grep -c "^options .* rw" "${f}" || true)" 67 | if [[ "${count}" -ge 1 ]]; then 68 | rw_kargs_found=$((rw_kargs_found + 1)) 69 | fi 70 | done 71 | 72 | # Some deployments are still missing the rw karg. Let's try to update them 73 | if [[ "${boot_entries}" -ne "${rw_kargs_found}" ]]; then 74 | ostree admin kargs edit-in-place --append-if-missing=rw || \ 75 | echo "Failed to edit kargs in place with ostree" 1>&2 76 | fi 77 | 78 | # Re-check if any existing deployment is still missing the rw karg 79 | rw_kargs_found=0 80 | count=0 81 | for f in "/boot/loader/entries/"*; do 82 | count="$(grep -c "^options .* rw" "${f}" || true)" 83 | if [[ "${count}" -ge 1 ]]; then 84 | rw_kargs_found=$((rw_kargs_found + 1)) 85 | fi 86 | done 87 | unset count 88 | 89 | # If all deployments are good, then we can set the sysroot.readonly option 90 | # in the ostree repo config 91 | if [[ "${boot_entries}" -eq "${rw_kargs_found}" ]]; then 92 | echo "Setting up the sysroot.readonly option in the ostree repo config" 93 | ostree config --repo=/sysroot/ostree/repo set "sysroot.readonly" "true" 94 | touch "${stamp_file}" 95 | exit 0 96 | fi 97 | 98 | # If anything else before failed, we will retry on next boot 99 | echo "Will retry next boot" 1>&2 100 | exit 0 101 | } 102 | 103 | main "${@}" 104 | EOF 105 | 106 | chmod 755 /usr/libexec/fedora-silverblue-readonly-sysroot 107 | 108 | # Enable the corresponding unit 109 | systemctl enable fedora-silverblue-readonly-sysroot.service 110 | -------------------------------------------------------------------------------- /xfce-desktop-pkgs.yaml: -------------------------------------------------------------------------------- 1 | # DO NOT EDIT! This content is generated from comps-sync.py 2 | include: fedora-common-ostree.yaml 3 | packages: 4 | - NetworkManager-openconnect-gnome 5 | - NetworkManager-openvpn-gnome 6 | - NetworkManager-pptp-gnome 7 | - NetworkManager-ssh-gnome 8 | - NetworkManager-vpnc-gnome 9 | - Thunar 10 | - adwaita-gtk2-theme 11 | - adwaita-icon-theme 12 | - blueman 13 | - desktop-backgrounds-compat 14 | - gnome-keyring-pam 15 | - greybird-dark-theme 16 | - greybird-light-theme 17 | - greybird-xfce4-notifyd-theme 18 | - greybird-xfwm4-theme 19 | - gtk-xfce-engine 20 | - gvfs 21 | - gvfs-archive 22 | - gvfs-mtp 23 | - initial-setup-gui 24 | - lightdm-gtk 25 | - mint-y-theme 26 | - network-manager-applet 27 | - nm-connection-editor 28 | - thunar-archive-plugin 29 | - thunar-media-tags-plugin 30 | - thunar-volman 31 | - xdg-user-dirs-gtk 32 | - xfce4-about 33 | - xfce4-appfinder 34 | - xfce4-datetime-plugin 35 | - xfce4-panel 36 | - xfce4-panel-profiles 37 | - xfce4-places-plugin 38 | - xfce4-power-manager 39 | - xfce4-pulseaudio-plugin 40 | - xfce4-screensaver 41 | - xfce4-screenshooter-plugin 42 | - xfce4-session 43 | - xfce4-settings 44 | - xfce4-taskmanager 45 | - xfce4-terminal 46 | - xfconf 47 | - xfdesktop 48 | - xfwm4 49 | - xfwm4-themes 50 | --------------------------------------------------------------------------------