mirror of
https://github.com/outbackdingo/hyprcosmic.git
synced 2026-08-25 14:53:21 +00:00
Install beside COSMIC instead of replacing it
The packages could not be installed. Claiming the cosmic-* names put 62 files in conflict with 25 distribution packages -- something dnf's depsolve never reports, because it shows up only in rpm's transaction check -- and the only way to satisfy that was Conflicts against all 25, which erases cosmic-greeter. On a stock Fedora COSMIC that is the display manager, so the machine comes back to a text console with no way to log in and no session to fall back to. So the fork ships what it actually forks. The three changed binaries take hyprcosmic-comp, hyprcosmic-session and hyprcosmic-conf, the workflow reduces the staged tree to those plus this fork's own assets, and cosmic-settings, the portal, the OSD and the rest come from the distribution at the version it tested them at. No Conflicts, no Provides, nothing erased, and the stock COSMIC entry stays on the greeter's menu to fall back to. Debian is the exception and keeps the whole desktop, because COSMIC is not packaged there in any suite: there is nothing to depend on and nothing to install beside. Its stock session entry is dropped instead, since start-cosmic execs the cosmic-session this rename takes away.
This commit is contained in:
+19
-20
@@ -19,10 +19,14 @@ arch=('x86_64')
|
||||
url="https://github.com/outbackdingo/hyprcosmic"
|
||||
license=('GPL-3.0-only')
|
||||
|
||||
# The HyDE shell. Without these the session starts to a blank screen: no bar,
|
||||
# no launcher, no wallpaper.
|
||||
depends=('waybar' 'rofi-wayland' 'wayland' 'libxkbcommon' 'libinput' 'seatd'
|
||||
'mesa' 'pixman' 'libdisplay-info' 'systemd-libs')
|
||||
# cosmic-session is COSMIC itself, which this runs on rather than replaces: one
|
||||
# entry pulls the whole desktop, and cosmic-settings, cosmic-osd, the portal and
|
||||
# the rest are taken from the repositories at the version they were tested at.
|
||||
#
|
||||
# The rest is the HyDE shell. Without those the session starts to a blank
|
||||
# screen: no bar, no launcher, no wallpaper.
|
||||
depends=('cosmic-session' 'waybar' 'rofi-wayland' 'wayland' 'libxkbcommon'
|
||||
'libinput' 'seatd' 'mesa' 'pixman' 'libdisplay-info' 'systemd-libs')
|
||||
|
||||
# awww is in the AUR rather than in the repositories, so it cannot be a hard
|
||||
# depends without making the package uninstallable for anyone who has not built
|
||||
@@ -32,15 +36,11 @@ optdepends=('awww: wallpaper daemon, required for HyDE theme wallpapers'
|
||||
'ttf-nerd-fonts-symbols: glyphs the waybar config draws with'
|
||||
'qt5ct: Qt application theming to match the GTK theme')
|
||||
|
||||
# What "complete replacement" means in packaging terms. Every path this writes
|
||||
# under /usr/bin is one cosmic-comp and cosmic-session also own, so the two
|
||||
# cannot coexist -- which is correct, they are two builds of the same programs.
|
||||
#
|
||||
# conflicts without replaces/provides-driven auto-removal: pacman stops and
|
||||
# names the conflict rather than quietly removing the desktop the machine is
|
||||
# currently running.
|
||||
conflicts=('cosmic-comp' 'cosmic-session')
|
||||
provides=("cosmic-comp=$pkgver" "cosmic-session=$pkgver")
|
||||
# No conflicts and no provides, deliberately. This installs beside COSMIC: its
|
||||
# binaries are hyprcosmic-comp, hyprcosmic-session and hyprcosmic-conf, and it
|
||||
# writes no path that cosmic-comp or cosmic-session owns. An earlier revision
|
||||
# took the cosmic-* names and could not be installed over a COSMIC system
|
||||
# without erasing the desktop it forked.
|
||||
|
||||
options=('!strip' '!debug')
|
||||
|
||||
@@ -56,13 +56,12 @@ package() {
|
||||
fi
|
||||
cp -a "$HYPRCOSMIC_STAGEDIR/." "$pkgdir/"
|
||||
|
||||
# No desktop-file-validate on the session entries. It rejects DesktopNames,
|
||||
# No desktop-file-validate on the session entry. It rejects DesktopNames,
|
||||
# the key a display manager reads to set XDG_CURRENT_DESKTOP, because the
|
||||
# Desktop Entry Specification registers keys for application launchers and
|
||||
# these are session files. cosmic.desktop here is upstream cosmic-session's,
|
||||
# unchanged by this fork apart from the Exec path, and the copy Fedora ships
|
||||
# as cosmic-session-1.5.0-1.fc44 fails the identical check -- so this is the
|
||||
# validator's gap, not something the fork introduced. The workflow
|
||||
# checks what actually matters instead -- that Exec names a file this
|
||||
# package installs -- against the staged tree, before makepkg sees it.
|
||||
# this is a session file. The copy Fedora ships as cosmic-session-1.5.0-1.fc44
|
||||
# fails the identical check -- so this is the validator's gap, not something
|
||||
# the fork introduced. The workflow checks what actually matters instead --
|
||||
# that Exec names a file this package installs -- against the staged tree,
|
||||
# before makepkg sees it.
|
||||
}
|
||||
|
||||
@@ -9,16 +9,13 @@ Installed-Size: @INSTALLED_SIZE@
|
||||
Depends: @SHLIB_DEPENDS@
|
||||
Recommends: waybar, rofi
|
||||
Suggests: fonts-hack-ttf, qt5ct
|
||||
Conflicts: cosmic-comp, cosmic-session
|
||||
Provides: cosmic-comp, cosmic-session
|
||||
Replaces: cosmic-comp, cosmic-session
|
||||
Description: COSMIC configured in Hyprland's idiom, with a HyDE shell
|
||||
HyprCosmic is a fork of the COSMIC desktop that takes its configuration in
|
||||
Hyprland's idiom and wears a HyDE-style shell.
|
||||
.
|
||||
A single ~/.config/hyprcosmic/cosmic.conf -- with general { } blocks, bind =
|
||||
lines and $variables -- is compiled into COSMIC's own configuration tree by
|
||||
cosmic-conf. The file is the source of truth: keys it names are applied at
|
||||
hyprcosmic-conf. The file is the source of truth: keys it names are applied at
|
||||
every login over whatever the settings UI last stored, and keys it does not
|
||||
name are left alone.
|
||||
.
|
||||
@@ -27,6 +24,9 @@ Description: COSMIC configured in Hyprland's idiom, with a HyDE shell
|
||||
COSMIC's, with a Hyprland-compatible IPC socket so that HyDE's scripts and
|
||||
waybar's hyprland modules work unmodified.
|
||||
.
|
||||
This package replaces the distribution's COSMIC. It installs both session
|
||||
entries, so the greeter offers a stock COSMIC shell as well as the HyDE one,
|
||||
both served by these binaries.
|
||||
This package carries the whole desktop, which on Debian it has to: COSMIC is
|
||||
not packaged there, in any suite, so there is nothing to depend on and nothing
|
||||
to install beside. The Fedora and Arch packages ship only this fork's three
|
||||
binaries and take the rest from the distribution. Here the forked binaries are
|
||||
hyprcosmic-comp, hyprcosmic-session and hyprcosmic-conf, the components they
|
||||
launch are included, and the session entry is the HyprCosmic one alone.
|
||||
|
||||
@@ -20,14 +20,19 @@
|
||||
# it on the release you intend to install it on. The workflow does that by
|
||||
# running the whole job inside a container of the target distribution.
|
||||
#
|
||||
# WHY IT IS ONE PACKAGE AND NOT TWENTY-SEVEN
|
||||
# ------------------------------------------
|
||||
# WHY IT IS ONE PACKAGE, AND WHY IT IS A SMALL ONE
|
||||
# ------------------------------------------------
|
||||
# Fedora splits COSMIC into a package per component, which is right for a
|
||||
# distribution tracking upstream. This is a fork that replaces the desktop as a
|
||||
# unit: the compositor, the session and the config compiler are versioned and
|
||||
# tested together, and there is no supported combination in which you take the
|
||||
# HyprCosmic cosmic-comp and the distribution's cosmic-session. One package is
|
||||
# an accurate description of what is actually supported.
|
||||
# distribution tracking upstream. This fork changes three of them -- the
|
||||
# compositor, the session and the config compiler it adds -- and they are
|
||||
# versioned and tested together, so one package is an accurate description of
|
||||
# what is actually supported.
|
||||
#
|
||||
# It is not a package per component and it is not the whole desktop either. The
|
||||
# build tree produces all of COSMIC, because it is COSMIC's tree, but shipping
|
||||
# all of it would mean owning files that 25 distribution packages already own.
|
||||
# The workflow reduces the staged tree to what this fork actually produces
|
||||
# before any of the three packaging recipes see it.
|
||||
|
||||
%global _hardened_build 1
|
||||
|
||||
@@ -45,34 +50,22 @@ License: GPL-3.0-only
|
||||
URL: https://github.com/outbackdingo/hyprcosmic
|
||||
BuildArch: x86_64
|
||||
|
||||
# These are what "complete replacement" means in packaging terms. Every path
|
||||
# this package writes under /usr/bin and /usr/share/cosmic is owned by one of
|
||||
# these on a stock Fedora, so the two cannot be installed at once -- which is
|
||||
# correct, because they are two builds of the same programs.
|
||||
# COSMIC itself, which this runs on rather than replaces.
|
||||
#
|
||||
# Conflicts rather than Obsoletes, deliberately. Obsoletes would let a routine
|
||||
# `dnf install hyprcosmic` quietly remove the desktop the machine is currently
|
||||
# running. Conflicts stops and says so, and removing the COSMIC packages stays
|
||||
# something a person decides to do rather than something a resolver does on
|
||||
# their behalf.
|
||||
Conflicts: cosmic-comp
|
||||
Conflicts: cosmic-session
|
||||
|
||||
# What it stands in for, so anything depending on a COSMIC session is satisfied.
|
||||
# One line pulls the whole desktop, because cosmic-session requires every
|
||||
# component. That is exactly what is wanted: HyprCosmic forks the compositor,
|
||||
# the session and adds the config compiler, and takes cosmic-settings,
|
||||
# cosmic-osd, the portal and the rest from the distribution at the version the
|
||||
# distribution tested them at.
|
||||
#
|
||||
# Versioned at the COSMIC release this fork stands in for, not at this package's
|
||||
# own version, and that distinction is the whole point. cosmic-greeter requires
|
||||
# `cosmic-comp >= 1.5.0`; a Provides of 0.1.0 does not satisfy it, so dnf
|
||||
# resolves the swap by removing the greeter -- which on a stock Fedora COSMIC is
|
||||
# the display manager, and the machine comes back to a text console. The failure
|
||||
# is silent, in that the transaction succeeds and you find out at the next boot.
|
||||
#
|
||||
# Bump this when rebasing on a newer COSMIC. It has to be at least the version
|
||||
# the target distribution ships, because the packages that stay behind pin it.
|
||||
%global cosmic_compat_version 1.5.0
|
||||
|
||||
Provides: cosmic-comp = %{cosmic_compat_version}
|
||||
Provides: cosmic-session = %{cosmic_compat_version}
|
||||
# There is deliberately no Conflicts and no Provides here. An earlier revision
|
||||
# had both, on the reading that a fork of the desktop replaces the desktop, and
|
||||
# it could not be installed: this package's files collided with 25 others in
|
||||
# rpm's transaction check, and satisfying that by claiming all 25 with Conflicts
|
||||
# would have erased cosmic-greeter, which on a stock Fedora COSMIC is the
|
||||
# display manager. Installing beside COSMIC costs three renamed binaries and
|
||||
# leaves the stock session on the greeter's menu to fall back to.
|
||||
Requires: cosmic-session >= 1.5.0
|
||||
|
||||
# The HyDE shell. These are separate programs this fork drives rather than
|
||||
# builds, and without them the session starts to a blank screen with no bar and
|
||||
@@ -97,7 +90,7 @@ Hyprland's idiom and wears a HyDE-style shell.
|
||||
|
||||
A single ~/.config/hyprcosmic/cosmic.conf -- with general { } blocks, bind =
|
||||
lines and $variables -- is compiled into COSMIC's own configuration tree by
|
||||
cosmic-conf. The file is the source of truth: keys it names are applied at every
|
||||
hyprcosmic-conf. The file is the source of truth: keys it names are applied at every
|
||||
login over whatever the settings UI last stored, and keys it does not name are
|
||||
left alone.
|
||||
|
||||
@@ -106,9 +99,11 @@ cosmic-bg, and HyDE themes are imported directly. The compositor is COSMIC's,
|
||||
with a Hyprland-compatible IPC socket so that HyDE's scripts and waybar's
|
||||
hyprland modules work unmodified.
|
||||
|
||||
This package replaces the distribution's COSMIC. It installs both session
|
||||
entries, so the greeter offers a stock COSMIC shell as well as the HyDE one,
|
||||
both served by these binaries.
|
||||
This package installs beside the distribution's COSMIC rather than over it. Its
|
||||
binaries are hyprcosmic-comp, hyprcosmic-session and hyprcosmic-conf, and it
|
||||
adds one session entry; the stock COSMIC entry stays on the greeter's menu,
|
||||
served by the distribution's own binaries, so a session that will not start is
|
||||
one logout away from a desktop that will.
|
||||
|
||||
%prep
|
||||
# Nothing to unpack. See the note at the top of this file.
|
||||
@@ -118,15 +113,14 @@ test -n "%{stagedir}" || { echo "define stagedir: see .github/workflows/packages
|
||||
test -d "%{stagedir}/usr" || { echo "%{stagedir}/usr missing; run just install first" >&2; exit 1; }
|
||||
cp -a "%{stagedir}/." "%{buildroot}/"
|
||||
|
||||
# The session entries are checked by the workflow against the staged tree, not
|
||||
# The session entry is checked by the workflow against the staged tree, not
|
||||
# with desktop-file-validate here. desktop-file-validate rejects DesktopNames,
|
||||
# the key a display manager reads to set XDG_CURRENT_DESKTOP, because the
|
||||
# Desktop Entry Specification registers keys for application launchers and this
|
||||
# is a session file. cosmic.desktop here is upstream cosmic-session's, unchanged
|
||||
# by this fork apart from the Exec path, and the copy Fedora already ships as
|
||||
# cosmic-session-1.5.0-1.fc44 fails the identical check -- so this is the
|
||||
# validator's gap, not something the fork introduced. Dropping the key would
|
||||
# satisfy the validator and break the session.
|
||||
# is a session file. The copy Fedora already ships as cosmic-session-1.5.0-1.fc44
|
||||
# fails the identical check -- so this is the validator's gap, not something the
|
||||
# fork introduced. Dropping the key would satisfy the validator and break the
|
||||
# session.
|
||||
# See "Check the session entries" in .github/workflows/packages.yml, which
|
||||
# tests what actually matters: that Exec names a file this package installs.
|
||||
|
||||
@@ -138,4 +132,5 @@ cp -a "%{stagedir}/." "%{buildroot}/"
|
||||
|
||||
%changelog
|
||||
* Mon Aug 10 2026 dingo <[email protected]> - 0.1.0-1
|
||||
- First package of the fork: COSMIC replaced as a unit, HyDE shell, cosmic-conf.
|
||||
- First package of the fork: hyprcosmic-comp, hyprcosmic-session and
|
||||
hyprcosmic-conf installed beside the distribution's COSMIC, with a HyDE shell.
|
||||
|
||||
Reference in New Issue
Block a user