Compare commits

...

36 commits

Author SHA1 Message Date
Aleksei Bavshin
32d27f88e2
Switch to JXL for Fedora 42 backgrounds. 2025-02-16 23:04:50 -08:00
Aleksei Bavshin
d197b89723
sway: apply system keyboard configuration in live environment
Fixes: SIG#36
2024-08-07 22:03:24 -07:00
Aleksei Bavshin
6faab374ee
Merge branch 'upstream' into fedora 2024-03-01 07:36:11 -08:00
Aleksei Bavshin
6a81162a2b
sddm: sync theme with upstream 0.21.0 + PR#1876
Source: github.com/sddm/sddm@cc03fabf2f3025842cee30b5f05d20f56b6a2270
2024-02-27 19:39:49 -08:00
Aleksei Bavshin
2b854c5085
sway: switch to brightnessctl
`light` upstream repo is archived, so we have to switch to a maintained
alternative.
2024-02-17 22:06:01 -08:00
Aleksei Bavshin
86f0264757
sway: apply environment.d(5) customizations 2024-02-03 00:29:52 -08:00
Aleksei Bavshin
62c55d56b5
sway: log all exported WLR variables to journal 2024-02-03 00:26:02 -08:00
Aleksei Bavshin
ddf31e44d7 sway: fallback to legacy DRM interface on virtio
Some time ago, 'WLR_RENDERER=pixman' stopped working properly on virtio.
Appears that it only affects the atomic KMS and falling back to the
legacy DRM interface was enough to work around.

While legacy is a less tested codepath, I don't see any other ways to
address that :'(
2024-02-03 00:42:32 +00:00
Aleksei Bavshin
d414e06ed4
sddm-theme: add screenshot 2024-02-01 19:05:30 -08:00
Aleksei Bavshin
e9d3cf37bb
sddm-theme: remove LayoutBox
SDDM doesn't support selecting keyboard layouts on Wayland, and it's
unlikely to be fixed anytime soon without a generic Wayland or DBus
protocol.

As the functionality is missing, it's fine to remove the layout box with
its unsightly placeholder entry.
2024-02-01 18:57:07 -08:00
Aleksei Bavshin
e980f01b61
sddm-theme: fix missing images with Qt6
Qt6 defers the URL resolution to the component that actually uses the
property. Which means that the images are now resolved relatively to the
corresponding sddm component (Background, ComboBox) instead of a theme.
Work around that by pinning resource URLs to the theme path with
`Qt.resolvedUrl()`.

Fixes following error:
```
file:///usr/lib64/qt6/qml/SddmComponents/ComboBox.qml:105:9: QML Image: Cannot open: file:///usr/lib64/qt6/qml/SddmComponents/angle-down.png
```
2024-02-01 18:57:06 -08:00
Aleksei Bavshin
5b41228334
sddm: install and use the theme 2024-02-01 18:57:05 -08:00
Aleksei Bavshin
02e8e661e4
sddm: update theme metadata
Drop mentions of unused third-party sources from README
2024-02-01 18:57:04 -08:00
Aleksei Bavshin
146cd500db
Merge branch 'upstream' into fedora 2024-02-01 18:56:37 -08:00
Aleksei Bavshin
a1185ef887
sddm: import Maldives theme as sddm/03-sway-fedora
The background and the screenshot are omitted, as we don't intend to use
these images.

Source: github.com/sddm/sddm@501129294be1487f753482c29949fc1c19ef340e
License: CC-BY-SA-3.0 AND MIT
2024-02-01 18:51:47 -08:00
Aleksei Bavshin
2382f71767
Merge branch 'upstream' into fedora 2024-02-01 18:49:19 -08:00
Aleksei Bavshin
314e5108b7
sway: sync config with v1.9-rc1 2024-02-01 18:47:30 -08:00
Aleksei Bavshin
6948ef6f3c
waybar: sync config with v0.9.24 2024-02-01 18:47:18 -08:00
Aleksei Bavshin
0f9e12422b
sway: fix swayidle config for live images
```
swayidle[5956]: 2024-01-15 17:06:41 - [Line 921] Unsupported command '\'
```
2024-01-15 17:11:34 -08:00
Neal Gompa
0d152ac355 Add configuration for Anaconda Initial Setup
With initial-setup-gui >= 0.3.99, it is now possible to use a Wayland
compositor to run the firstboot initial setup experience.
2024-01-14 05:56:09 -05:00
Landon LaSmith
cd158ff63d Update 90-bar.conf with waybar information 2023-10-21 14:44:00 +00:00
Aleksei Bavshin
463bfb8291
sway: stop passing commands from rofi to swaymsg exec
There are issues with escaping and arguments splitting that we're unable
to solve at the moment. For example, `.desktop` files with whitespaces
and other characters treated specially by Sway in the `Exec=` field
are known to be broken[1][2].

Removing `-run-command`/`-run-shell-command` costs us pid-based
workspace assignment. I.e. the applications that take a while to load
will appear on the current workspace instead of the one they were
launched on.
That is at least partially mitigated by the fact that the app will
inherit `XDG_ACTIVATION_TOKEN` and `DESKTOP_STARTUP_ID` variables
created for for `exec rofi` command with a default lifetime of 30s[3].
But not all applications or UI frameworks support that.

This could be revisited later, once we have a solution that correctly
escapes the command to pass it through `swaymsg exec`.

[1]: https://i3wm.org/docs/userguide.html#exec_quoting
[2]: https://github.com/swaywm/sway/issues/5931
[3]: https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/0.16/types/wlr_xdg_activation_v1.c#L361
2023-03-30 20:40:30 -07:00
Aleksei Bavshin
80bded49a4
sway: update XDG user dirs on startup 2023-03-27 19:21:11 -07:00
Aleksei Bavshin
2ae27356aa
sway: enable floating for pavucontrol window 2023-03-23 00:37:55 -07:00
Aleksei Bavshin
967a54323c
sway: limit volume boost via helper script
Fixes: SIG#22
2023-03-23 00:37:54 -07:00
Aleksei Bavshin
bcff48b7ae
sddm: fix fullscreen command invocation
sddm-greeter now starts as a fullscreen window, so the `fullscreen`
command without explicit `enable` was reverting it to a regular window.
2023-03-22 22:19:12 -07:00
Aleksei Bavshin
2beafa9c25
sway: silence swaymsg exec output from launcher command.
The output pollutes the journal and doesn't seem to be useful:
```
unknown[657924]: [
unknown[657924]:   {
unknown[657924]:     "success": true
unknown[657924]:   }
unknown[657924]: ]
```
2023-03-22 21:38:07 -07:00
Aleksei Bavshin
a3ccaebd56
sway: use output power instead of deprecated dpms
BREAKING: this change requires Sway >= 1.8.

Fixes: #3
2023-03-22 21:34:37 -07:00
Aleksei Bavshin
d2212f6672
doc: remove obsolete docs
The configuration guide was moved to sericea-docs.
2023-02-26 16:12:49 -08:00
Aleksei Bavshin
accad0c34b
sddm: apply system keyboard configuration 2023-02-22 07:23:50 -08:00
Aleksei Bavshin
8e37d24784
sway: XDG desktop autostart support 2023-02-22 07:23:43 -08:00
Aleksei Bavshin
66f553d999
sway: restrict WLR_RENDERER workaround to kvm
pixman is known to not work at least on vmware, so we don't want to be
setting WLR_RENDERER indiscriminately.
2023-02-20 23:28:30 -08:00
Jiri Konecny
239dd22eea
Fix Anaconda startup from app launcher on Live
We recommend use of application launcher in installation instructions
but Anaconda won't start until xhost application is started.

It's already solved by starting xhost app in ~/.bashrc, however, that
won't work for a launcher because it's not sourcing ~/.bashrc. To solve
this, start xhost by Sway configuration file on Live.
2023-02-16 18:25:01 +01:00
Aleksei Bavshin
0e4e76fee0
sway: screenshot shortcut confilct with modifier=Alt 2023-02-11 12:36:06 -08:00
Jiri Konecny
942a3881dd Add configs for Live to show install instructions
These configuration files will be used by nwg-wrapper on live media to
show installation instructions on background.
2023-01-14 20:13:10 +00:00
Aleksei Bavshin
c5d0b5cbb1
sway: use combined drun+run mode for rofi 2023-01-10 21:04:44 -08:00
35 changed files with 1051 additions and 254 deletions

View file

@ -5,16 +5,19 @@ SYSCONFDIR ?= /etc
BINDIR ?= $(PREFIX)/bin
DATADIR ?= $(PREFIX)/share
LIBEXECDIR ?= $(PREFIX)/libexec
BACKGROUND ?= $(DATADIR)/backgrounds/default.png
.PHONY: build clean install check requires
.DEFAULT: build
GENERATED := $(patsubst %.in,%,$(wildcard sway/*.in sway/*/*.in ))
VARIABLES := PREFIX SYSCONFDIR DATADIR LIBEXECDIR
TEMPLATES := sway/*.in sway/*/*.in swaylock/*.in sddm/03-sway-fedora/theme.conf.in
GENERATED := $(patsubst %.in,%,$(wildcard $(TEMPLATES)))
VARIABLES := PREFIX SYSCONFDIR DATADIR LIBEXECDIR BACKGROUND
sway/%: sway/%.in
sed "$(foreach var,$(VARIABLES),s^@$(var)@^$($(var))^i;)" $^ > $@
sed '$(foreach var,$(VARIABLES),s^$$$(var)\b^$($(var))^i;)' $^ > $@
%: %.in
sed -e "$(foreach var,$(VARIABLES),s^@$(var)@^$($(var))^i;)" \
-e '$(foreach var,$(VARIABLES),s^$$$(var)\b^$($(var))^i;)' \
$^ > $@
build: $(GENERATED)
@ -22,10 +25,14 @@ clean:
rm -f $(GENERATED)
rm -rf test/
install-initialsetup:
install -D -m 0755 -pv -t $(DESTDIR)$(LIBEXECDIR)/initial-setup initial-setup/run-gui-backend
install-sddm:
install -D -m 0755 -pv -t $(DESTDIR)$(LIBEXECDIR) sddm/sddm-compositor-sway
install -D -m 0644 -pv -t $(DESTDIR)$(SYSCONFDIR)/sway sddm/sddm-greeter.config
install -D -m 0644 -pv -t $(DESTDIR)$(PREFIX)/lib/sddm/sddm.conf.d sddm/wayland-sway.conf
install -D -m 0644 -pv -t $(DESTDIR)$(DATADIR)/sddm/themes/03-sway-fedora sddm/03-sway-fedora/*
install-sway: build
install -D -m 0644 -pv -t $(DESTDIR)$(SYSCONFDIR)/sway sway/config
@ -34,12 +41,17 @@ install-sway: build
install -D -m 0644 -pv -t $(DESTDIR)$(DATADIR)/wayland-sessions sway/sway.desktop
install -D -m 0644 -pv -t $(DESTDIR)$(DATADIR)/sway/config.d sway/config.d/*.conf
install -D -m 0644 -pv -t $(DESTDIR)$(DATADIR)/sway/config.live.d sway/config.live.d/*.conf
install -D -m 0644 -pv -t $(DESTDIR)$(DATADIR)/sway/live sway/live/*
install -D -m 0755 -pv -t $(DESTDIR)$(LIBEXECDIR)/sway scripts/sway/*
install-swaylock:
install -D -m 0644 -pv -t $(DESTDIR)$(SYSCONFDIR)/swaylock swaylock/config
.PHONY: install-sddm install-sway install-swaylock
.PHONY: install-initialsetup install-sddm install-sway install-swaylock
ifeq ($(WITH_INITIALSETUP),yes)
install: install-initialsetup
endif
ifeq ($(WITH_SDDM),yes)
install: install-sddm

View file

@ -1,159 +0,0 @@
= Configuration guide
Fedora Sway SIG <sway@lists.fedoraproject.org>
:source-highlighter: rouge
:sway-package: https://packages.fedoraproject.org/pkgs/sway/
:config-package: https://packages.fedoraproject.org/pkgs/sway-config-fedora/
:toc:
An overview of the custom Sway configuration shipped in Fedora.
== Configuration profiles
The Sway package in Fedora defers most of the dependencies and the config file
ownership to the `+sway-config-*+` subpackages.
This allows us to ship different configuration profiles with different sets of
runtime dependencies.
This also allows anyone to create a package with their preferred system-wide
configuration defaults and use it instead of the default Fedora profiles.
The following profiles are currently defined in the {sway-package}[`sway`]
source package:
* **sway-config-minimal** - minimal configuration with any optional
dependencies omitted.
Suitable for headless servers, containers and buildroot usage.
Also suitable for building a very minimal installation from scratch.
* **sway-config-upstream** - the upstream configuration.
The only permitted modifications to the config file are adjustments for
dependencies currently unavailable in Fedora.
The profiles defined in the {config-package}[`sway-config-fedora`] source
package:
* **sway-config-fedora** - customized configuration for Fedora Sway Spin.
The config packages are mutually exclusive, and one of these will always be
installed.
The one selected by default is **sway-config-upstream** and the one that will
be installed with Sway Spin/Sway Desktop Environment group is
**sway-config-fedora**.
At any moment, you can switch the installed configuration with one of the
following commands:
[source,shell]
----
dnf swap sway-config sway-config-upstream
dnf swap sway-config sway-config-minimal
dnf swap sway-config sway-config-fedora
----
The command will replace the default `+/etc/sway/config+` file and apply the new
set of dependencies.
Packages unused by the new profile will be autoremoved.
NOTE: The command will be different for OSTree-based installations, such as Sericea.
== Fedora configuration
**sway-config-fedora** contains the default configuration for Fedora Sway Spin.
It is built on top of the default Sway config with a few quality of life
improvements and opinionated changes.
Most of the additions are implemented as a standalone configuration snippets
stored at `+/usr/share/sway/config.d/+` and automatically loaded from the main
configuration file.
=== Sections
The configuration snippets we provide are grouped into the following sections:
50-59 (`+50-rules-*.conf+`)::
Window rules (`+for_window+`, `+assign+` and related configuration).
60-69 (`+60-bindings-*.conf+`, `+65-mode-*.conf+`)::
Key bindings and binding modes
90-94 (`+90-*.conf+`)::
System applications: bars, idle daemons and other components.
95-99 (`+95-*.conf+`)::
Autostart applications
=== Overrides and load precedence
Fedora configuration uses the implementation details of the Sway config loading
(https://man7.org/linux/man-pages/man3/wordexp.3p.html[`wordexp(3p)`]) to
implement a configuration overrides mechanism for the snippets.
The priority increases from the packaged configuration to a system-wide
configuration and an user configuration directories:
* `+/usr/share/sway/config.d/*.conf+`
* `+/etc/sway/config.d/*.conf+`
* `+${XDG_CONFIG_HOME:-$HOME/.config}/sway/config.d/*.conf+`
(defaults to `+~/.config/sway/config.d/*.conf+`)
The includes are also sorted by a file name across all the directories.
By creating a file with the same name in `+/etc/sway/config.d+` you'll force
Sway to ignore the corresponding snippet from `+/usr+` and load the one from
`+/etc+`.
Similarly, the configuration snippet from a home directory wins over the earlier
locations.
To put it even more simple: imagine the distribution configuration file
`+/usr/share/sway/config.d/90-bar.conf+` that sets waybar as a status bar.
If you want to prevent waybar from starting, you could create an empty file
in your home directory:
[source,shell]
----
mkdir -p ~/.config/sway/config.d
touch ~/.config/sway/config.d/90-bar.conf
----
If you want to set another bar, you just need to add some contents to the file.
For example, copy the default bar section from the upstream Sway config:
[source,shell]
----
mkdir -p ~/.config/sway/config.d
cat >~/.config/sway/config.d/90-bar.conf <<EOF
# Read `man 5 sway-bar` for more information about this section.
bar {
position top
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
colors {
statusline #ffffff
background #323232
inactive_workspace #32323200 #32323200 #5c5c5c
}
}
EOF
----
=== Debugging the configuration
Sometimes it's useful to know how the configuration loaded by Sway actually looks.
There are two ways to debug that:
* Run sway config validation:
[source,shell]
----
sway --debug --validate [--config /path/to/config]
----
* Check intermediate files generated by the layered include script
[source,shell]
----
less $XDG_RUNTIME_DIR/sway/layered-include-*.conf
----
TIP: The command referenced may display more than one file. Use `+:n+`/`+:p+` to switch between files in `+less+`

62
initial-setup/run-gui-backend Executable file
View file

@ -0,0 +1,62 @@
#!/bin/sh
## Runs the GUI program from $@ in Sway
CONFIG_FILE=$(mktemp --suffix="-wl-sway-firstboot-config")
RUN_SCRIPT=$(mktemp --suffix="-wl-sway-firstboot-run")
EXIT_CODE_SAVE=$(mktemp --suffix="-wl-sway-firstboot-exit")
cat > ${CONFIG_FILE} << EOF
# Sway configuration for Anaconda initial setup.
xwayland force
swaybg_command -
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
# Disable displays on idle
exec command -v swayidle >/dev/null && swayidle -w \
timeout 300 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"'
# Apply system keyboard configuration
exec /usr/libexec/sway-systemd/locale1-xkb-config
# Show initial-setup-gui as fullscreen
for_window [class="[Ii]nitial-setup-graphical"] fullscreen enable
exec ${RUN_SCRIPT}
EOF
cat > ${RUN_SCRIPT} << EOF
#!/bin/sh
$@
echo $? > ${EXIT_CODE_SAVE}
sway exit
EOF
chmod +x ${RUN_SCRIPT}
# Set some compatibility variables if we're in a VM
case $(systemd-detect-virt --vm) in
"none"|"")
;;
"kvm")
# WLR_NO_HARDWARE_CURSORS=1 is not needed with legacy DRM interface
export WLR_RENDERER=pixman
export WLR_DRM_NO_ATOMIC=1
;;
*)
# https://github.com/swaywm/sway/issues/6581
export WLR_NO_HARDWARE_CURSORS=1
;;
esac
sway --config=${CONFIG_FILE}
exit_code=$(< ${EXIT_CODE_SAVE})
rm ${CONFIG_FILE} ${RUN_SCRIPT} ${EXIT_CODE_SAVE}
exit $exit_code

View file

@ -1,30 +0,0 @@
#!/bin/sh
if ! command -v notify-send >/dev/null || ! command -v pactl > /dev/null; then
exit 0;
fi
# pactl output depends on the current locale
export LANG=C.UTF-8 LC_ALL=C.UTF-8
SINK=${1:-@DEFAULT_SINK@}
VOLUME=$(pactl get-sink-volume "$SINK")
# get first percent value
VOLUME=${VOLUME%%%*}
VOLUME=${VOLUME##* }
TEXT="Volume: ${VOLUME}%"
case $(pactl get-sink-mute "$SINK") in
*yes)
TEXT="Volume: muted"
VOLUME=0
;;
esac
notify-send \
--app-name sway \
--expire-time 800 \
--hint string:x-canonical-private-synchronous:volume \
--hint "int:value:$VOLUME" \
--transient \
"${TEXT}"

89
scripts/sway/volume-helper Executable file
View file

@ -0,0 +1,89 @@
#!/bin/sh
if ! command -v pactl >/dev/null; then
exit 0;
fi
# pactl output depends on the current locale
export LANG=C.UTF-8 LC_ALL=C.UTF-8
DEFAULT_STEP=5
LIMIT=${LIMIT:-100}
SINK="@DEFAULT_SINK@"
clamp() {
if [ "$1" -lt 0 ]; then
echo "0"
elif [ "$1" -gt "$LIMIT" ]; then
echo "$LIMIT"
else
echo "$1"
fi
}
get_sink_volume() { # sink
ret=$(pactl get-sink-volume "$1")
# get first percent value
ret=${ret%%%*}
ret=${ret##* }
echo "$ret"
unset ret
}
CHANGE=0
VOLUME=-1
while true; do
case $1 in
--sink)
SINK=${2:-$SINK}
shift;;
-l|--limit)
LIMIT=$((${2:-$LIMIT}))
shift;;
--set-volume)
VOLUME=$(($2))
shift;;
-i|--increase)
CHANGE=$((${2:-$DEFAULT_STEP}))
shift;;
-d|--decrease)
CHANGE=$((-${2:-$DEFAULT_STEP}))
shift;;
*)
break
;;
esac
shift
done
if [ "$CHANGE" -ne 0 ]; then
VOLUME=$(get_sink_volume "$SINK")
VOLUME=$(( VOLUME + CHANGE ))
pactl set-sink-volume "$SINK" "$(clamp "$VOLUME")%"
elif [ "$VOLUME" -ge 0 ]; then
pactl set-sink-volume "$SINK" "$(clamp "$VOLUME")%"
fi
# Display desktop notification
if ! command -v notify-send >/dev/null; then
exit 0;
fi
VOLUME=$(get_sink_volume "$SINK")
TEXT="Volume: ${VOLUME}%"
case $(pactl get-sink-mute "$SINK") in
*yes)
TEXT="Volume: muted"
VOLUME=0
;;
esac
notify-send \
--app-name sway \
--expire-time 800 \
--hint string:x-canonical-private-synchronous:volume \
--hint "int:value:$VOLUME" \
--transient \
"${TEXT}"

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

337
sddm/03-sway-fedora/LICENSE Normal file
View file

@ -0,0 +1,337 @@
Creative Commons Legal Code
Attribution-ShareAlike 3.0 Unported
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL
SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT
RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS"
BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE
CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE
IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and other
pre-existing works, such as a translation, adaptation, derivative work,
arrangement of music or other alterations of a literary or artistic work,
or phonogram or performance and includes cinematographic adaptations or any
other form in which the Work may be recast, transformed, or adapted
including in any form recognizably derived from the original, except that a
work that constitutes a Collection will not be considered an Adaptation for
the purpose of this License. For the avoidance of doubt, where the Work is
a musical work, performance or phonogram, the synchronization of the Work
in timed-relation with a moving image ("synching") will be considered an
Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as
encyclopedias and anthologies, or performances, phonograms or broadcasts,
or other works or subject matter other than works listed in Section 1(f)
below, which, by reason of the selection and arrangement of their contents,
constitute intellectual creations, in which the Work is included in its
entirety in unmodified form along with one or more other contributions,
each constituting separate and independent works in themselves, which
together are assembled into a collective whole. A work that constitutes a
Collection will not be considered an Adaptation (as defined below) for the
purposes of this License.
c. "Creative Commons Compatible License" means a license that is listed at
http://creativecommons.org/compatiblelicenses that has been approved by
Creative Commons as being essentially equivalent to this License,
including, at a minimum, because that license: (i) contains terms that have
the same purpose, meaning and effect as the License Elements of this
License; and, (ii) explicitly permits the relicensing of adaptations of
works made available under that license under this License or a Creative
Commons jurisdiction license with the same License Elements as this
License.
d. "Distribute" means to make available to the public the original and copies
of the Work or Adaptation, as appropriate, through sale or other transfer
of ownership.
e. "License Elements" means the following high-level license attributes as
selected by Licensor and indicated in the title of this License:
Attribution, ShareAlike.
f. "Licensor" means the individual, individuals, entity or entities that offer
(s) the Work under the terms of this License.
g. "Original Author" means, in the case of a literary or artistic work, the
individual, individuals, entity or entities who created the Work or if no
individual or entity can be identified, the publisher; and in addition (i)
in the case of a performance the actors, singers, musicians, dancers, and
other persons who act, sing, deliver, declaim, play in, interpret or
otherwise perform literary or artistic works or expressions of folklore;
(ii) in the case of a phonogram the producer being the person or legal
entity who first fixes the sounds of a performance or other sounds; and,
(iii) in the case of broadcasts, the organization that transmits the
broadcast.
h. "Work" means the literary and/or artistic work offered under the terms of
this License including without limitation any production in the literary,
scientific and artistic domain, whatever may be the mode or form of its
expression including digital form, such as a book, pamphlet and other
writing; a lecture, address, sermon or other work of the same nature; a
dramatic or dramatico-musical work; a choreographic work or entertainment
in dumb show; a musical composition with or without words; a
cinematographic work to which are assimilated works expressed by a process
analogous to cinematography; a work of drawing, painting, architecture,
sculpture, engraving or lithography; a photographic work to which are
assimilated works expressed by a process analogous to photography; a work
of applied art; an illustration, map, plan, sketch or three-dimensional
work relative to geography, topography, architecture or science; a
performance; a broadcast; a phonogram; a compilation of data to the extent
it is protected as a copyrightable work; or a work performed by a variety
or circus performer to the extent it is not otherwise considered a literary
or artistic work.
i. "You" means an individual or entity exercising rights under this License
who has not previously violated the terms of this License with respect to
the Work, or who has received express permission from the Licensor to
exercise rights under this License despite a previous violation.
j. "Publicly Perform" means to perform public recitations of the Work and to
communicate to the public those public recitations, by any means or
process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a place
individually chosen by them; to perform the Work to the public by any means
or process and the communication to the public of the performances of the
Work, including by public digital performance; to broadcast and rebroadcast
the Work by any means including signs, sounds or images.
k. "Reproduce" means to make copies of the Work by any means including without
limitation by sound or visual recordings and the right of fixation and
reproducing fixations of the Work, including storage of a protected
performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit,
or restrict any uses free from copyright or rights arising from limitations or
exceptions that are provided for in connection with the copyright protection
under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor
hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the
duration of the applicable copyright) license to exercise the rights in the
Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation,
including any translation in any medium, takes reasonable steps to clearly
label, demarcate or otherwise identify that changes were made to the
original Work. For example, a translation could be marked "The original
work was translated from English to Spanish," or a modification could
indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated in
Collections; and,
d. to Distribute and Publicly Perform Adaptations.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor reserves the
exclusive right to collect such royalties for any exercise by You of
the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in which
the right to collect royalties through any statutory or compulsory
licensing scheme can be waived, the Licensor waives the exclusive right
to collect such royalties for any exercise by You of the rights granted
under this License; and,
iii. Voluntary License Schemes. The Licensor waives the right to collect
royalties, whether individually or, in the event that the Licensor is a
member of a collecting society that administers voluntary licensing
schemes, via that society, from any exercise by You of the rights
granted under this License.
The above rights may be exercised in all media and formats whether now known or
hereafter devised. The above rights include the right to make such
modifications as are technically necessary to exercise the rights in other
media and formats. Subject to Section 8(f), all rights not expressly granted by
Licensor are hereby reserved.
4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms of
this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms on
the Work that restrict the terms of this License or the ability of the
recipient of the Work to exercise the rights granted to that recipient
under the terms of the License. You may not sublicense the Work. You must
keep intact all notices that refer to this License and to the disclaimer of
warranties with every copy of the Work You Distribute or Publicly Perform.
When You Distribute or Publicly Perform the Work, You may not impose any
effective technological measures on the Work that restrict the ability of a
recipient of the Work from You to exercise the rights granted to that
recipient under the terms of the License. This Section 4(a) applies to the
Work as incorporated in a Collection, but this does not require the
Collection apart from the Work itself to be made subject to the terms of
this License. If You create a Collection, upon notice from any Licensor You
must, to the extent practicable, remove from the Collection any credit as
required by Section 4(c), as requested. If You create an Adaptation, upon
notice from any Licensor You must, to the extent practicable, remove from
the Adaptation any credit as required by Section 4(c), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under the terms
of: (i) this License; (ii) a later version of this License with the same
License Elements as this License; (iii) a Creative Commons jurisdiction
license (either this or a later license version) that contains the same
License Elements as this License (e.g., Attribution-ShareAlike 3.0 US));
(iv) a Creative Commons Compatible License. If you license the Adaptation
under one of the licenses mentioned in (iv), you must comply with the terms
of that license. If you license the Adaptation under the terms of any of
the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"),
you must comply with the terms of the Applicable License generally and the
following provisions: (I) You must include a copy of, or the URI for, the
Applicable License with every copy of each Adaptation You Distribute or
Publicly Perform; (II) You may not offer or impose any terms on the
Adaptation that restrict the terms of the Applicable License or the ability
of the recipient of the Adaptation to exercise the rights granted to that
recipient under the terms of the Applicable License; (III) You must keep
intact all notices that refer to the Applicable License and to the
disclaimer of warranties with every copy of the Work as included in the
Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or
Publicly Perform the Adaptation, You may not impose any effective
technological measures on the Adaptation that restrict the ability of a
recipient of the Adaptation from You to exercise the rights granted to that
recipient under the terms of the Applicable License. This Section 4(b)
applies to the Adaptation as incorporated in a Collection, but this does
not require the Collection apart from the Adaptation itself to be made
subject to the terms of the Applicable License.
c. If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to Section 4
(a), keep intact all copyright notices for the Work and provide, reasonable
to the medium or means You are utilizing: (i) the name of the Original
Author (or pseudonym, if applicable) if supplied, and/or if the Original
Author and/or Licensor designate another party or parties (e.g., a sponsor
institute, publishing entity, journal) for attribution ("Attribution
Parties") in Licensor's copyright notice, terms of service or by other
reasonable means, the name of such party or parties; (ii) the title of the
Work if supplied; (iii) to the extent reasonably practicable, the URI, if
any, that Licensor specifies to be associated with the Work, unless such
URI does not refer to the copyright notice or licensing information for the
Work; and (iv) , consistent with Ssection 3(b), in the case of an
Adaptation, a credit identifying the use of the Work in the Adaptation
(e.g., "French translation of the Work by Original Author," or "Screenplay
based on original Work by Original Author"). The credit required by this
Section 4(c) may be implemented in any reasonable manner; provided,
however, that in the case of a Adaptation or Collection, at a minimum such
credit will appear, if a credit for all contributing authors of the
Adaptation or Collection appears, then as part of these credits and in a
manner at least as prominent as the credits for the other contributing
authors. For the avoidance of doubt, You may only use the credit required
by this Section for the purpose of attribution in the manner set out above
and, by exercising Your rights under this License, You may not implicitly
or explicitly assert or imply any connection with, sponsorship or
endorsement by the Original Author, Licensor and/or Attribution Parties, as
appropriate, of You or Your use of the Work, without the separate, express
prior written permission of the Original Author, Licensor and/or
Attribution Parties.
d. Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any Adaptations or
Collections, You must not distort, mutilate, modify or take other
derogatory action in relation to the Work which would be prejudicial to the
Original Author's honor or reputation. Licensor agrees that in those
jurisdictions (e.g. Japan), in which any exercise of the right granted in
Section 3(b) of this License (the right to make Adaptations) would be
deemed to be a distortion, mutilation, modification or other derogatory
action prejudicial to the Original Author's honor and reputation, the
Licensor will waive or not assert, as appropriate, this Section, to the
fullest extent permitted by the applicable national law, to enable You to
reasonably exercise Your right under Section 3(b) of this License (right to
make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING,
WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A
PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH
EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN
NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS
LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate automatically
upon any breach by You of the terms of this License. Individuals or
entities who have received Adaptations or Collections from You under this
License, however, will not have their licenses terminated provided such
individuals or entities remain in full compliance with those licenses.
Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the Work
under different license terms or to stop distributing the Work at any time;
provided, however that any such election will not serve to withdraw this
License (or any other license that has been, or is required to be, granted
under the terms of this License), and this License will continue in full
force and effect unless terminated as stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection, the
Licensor offers to the recipient a license to the Work on the same terms
and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers
to the recipient a license to the original Work on the same terms and
conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of the
remainder of the terms of this License, and without further action by the
parties to this agreement, such provision shall be reformed to the minimum
extent necessary to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and no breach
consented to unless such waiver or consent shall be in writing and signed
by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings, agreements
or representations with respect to the Work not specified here. Licensor
shall not be bound by any additional provisions that may appear in any
communication from You. This License may not be modified without the mutual
written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention for
the Protection of Literary and Artistic Works (as amended on September 28,
1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the
WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright
Convention (as revised on July 24, 1971). These rights and subject matter
take effect in the relevant jurisdiction in which the License terms are
sought to be enforced according to the corresponding provisions of the
implementation of those treaty provisions in the applicable national law.
If the standard suite of rights granted under applicable copyright law
includes additional rights not granted under this License, such additional
rights are deemed to be included in the License; this License is not
intended to restrict the license of any rights under applicable law.
Creative Commons Notice
Creative Commons is not a party to this License, and makes no warranty
whatsoever in connection with the Work. Creative Commons will not be liable
to You or any party on any legal theory for any damages whatsoever,
including without limitation any general, special, incidental or
consequential damages arising in connection to this license.
Notwithstanding the foregoing two (2) sentences, if Creative Commons has
expressly identified itself as the Licensor hereunder, it shall have all
rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the Work is
licensed under the CCPL, Creative Commons does not authorize the use by
either party of the trademark "Creative Commons" or any related trademark
or logo of Creative Commons without the prior written consent of Creative
Commons. Any permitted use will be in compliance with Creative Commons'
then-current trademark usage guidelines, as may be published on its website
or otherwise made available upon request from time to time. For the
avoidance of doubt, this trademark restriction does not form part of the
License.
Creative Commons may be contacted at https://creativecommons.org/.

View file

@ -0,0 +1,284 @@
/***************************************************************************
* Copyright (c) 2013 Abdurrahman AVCI <abdurrahmanavci@gmail.com>
* Copyright (c) 2024 Aleksei Bavshin <alebastr@fedoraproject.org>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
*
***************************************************************************/
import QtQuick 2.0
import SddmComponents 2.0
Rectangle {
id: container
width: 640
height: 480
LayoutMirroring.enabled: Qt.locale().textDirection == Qt.RightToLeft
LayoutMirroring.childrenInherit: true
property int sessionIndex: session.index
TextConstants { id: textConstants }
Connections {
target: sddm
function onLoginSucceeded() {
errorMessage.color = "steelblue"
errorMessage.text = textConstants.loginSucceeded
}
function onLoginFailed() {
password.text = ""
errorMessage.color = "red"
errorMessage.text = textConstants.loginFailed
}
function onInformationMessage(message) {
errorMessage.color = "red"
errorMessage.text = message
}
}
Background {
anchors.fill: parent
source: Qt.resolvedUrl(config.background)
fillMode: Image.PreserveAspectCrop
onStatusChanged: {
var defaultBackground = Qt.resolvedUrl(config.defaultBackground)
if (status == Image.Error && source != defaultBackground) {
source = defaultBackground
}
}
}
Rectangle {
anchors.fill: parent
color: "transparent"
//visible: primaryScreen
Clock {
id: clock
anchors.margins: 5
anchors.top: parent.top; anchors.right: parent.right
color: "white"
timeFont.family: "Oxygen"
}
Image {
id: rectangle
anchors.centerIn: parent
width: Math.max(320, mainColumn.implicitWidth + 50)
height: Math.max(320, mainColumn.implicitHeight + 50)
source: Qt.resolvedUrl("rectangle.png")
Column {
id: mainColumn
anchors.centerIn: parent
spacing: 12
Text {
anchors.horizontalCenter: parent.horizontalCenter
color: "black"
verticalAlignment: Text.AlignVCenter
height: text.implicitHeight
width: parent.width
text: textConstants.welcomeText.arg(sddm.hostName)
wrapMode: Text.WordWrap
font.pixelSize: 24
elide: Text.ElideRight
horizontalAlignment: Text.AlignHCenter
}
Column {
width: parent.width
spacing: 4
Text {
id: lblName
width: parent.width
text: textConstants.userName
font.bold: true
font.pixelSize: 12
}
TextBox {
id: name
width: parent.width; height: 30
text: userModel.lastUser
font.pixelSize: 14
KeyNavigation.backtab: rebootButton; KeyNavigation.tab: password
Keys.onPressed: function (event) {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionIndex)
event.accepted = true
}
}
}
}
Column {
width: parent.width
spacing : 4
Text {
id: lblPassword
width: parent.width
text: textConstants.password
font.bold: true
font.pixelSize: 12
}
PasswordBox {
id: password
width: parent.width; height: 30
font.pixelSize: 14
KeyNavigation.backtab: name; KeyNavigation.tab: session
Keys.onPressed: function (event) {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionIndex)
event.accepted = true
}
}
}
}
Row {
spacing: 4
width: parent.width / 2
z: 100
Column {
z: 100
width: parent.width * (layoutBox.visible ? 1.3 : 2)
spacing : 4
anchors.bottom: parent.bottom
Text {
id: lblSession
width: parent.width
text: textConstants.session
wrapMode: TextEdit.WordWrap
font.bold: true
font.pixelSize: 12
}
ComboBox {
id: session
width: parent.width; height: 30
font.pixelSize: 14
arrowIcon: Qt.resolvedUrl("angle-down.png")
model: sessionModel
index: sessionModel.lastIndex
KeyNavigation.backtab: password; KeyNavigation.tab: layoutBox
}
}
Column {
z: 101
width: parent.width * 0.7
spacing : 4
anchors.bottom: parent.bottom
visible: keyboard.enabled && keyboard.layouts.length > 0
Text {
id: lblLayout
width: parent.width
text: textConstants.layout
wrapMode: TextEdit.WordWrap
font.bold: true
font.pixelSize: 12
}
LayoutBox {
id: layoutBox
width: parent.width; height: 30
font.pixelSize: 14
arrowIcon: Qt.resolvedUrl("angle-down.png")
KeyNavigation.backtab: session; KeyNavigation.tab: loginButton
}
}
}
Column {
width: parent.width
Text {
id: errorMessage
anchors.horizontalCenter: parent.horizontalCenter
text: textConstants.prompt
font.pixelSize: 10
}
}
Row {
spacing: 4
anchors.horizontalCenter: parent.horizontalCenter
property int btnWidth: Math.max(loginButton.implicitWidth,
shutdownButton.implicitWidth,
rebootButton.implicitWidth, 80) + 8
Button {
id: loginButton
text: textConstants.login
width: parent.btnWidth
onClicked: sddm.login(name.text, password.text, sessionIndex)
KeyNavigation.backtab: layoutBox; KeyNavigation.tab: shutdownButton
}
Button {
id: shutdownButton
text: textConstants.shutdown
width: parent.btnWidth
onClicked: sddm.powerOff()
KeyNavigation.backtab: loginButton; KeyNavigation.tab: rebootButton
}
Button {
id: rebootButton
text: textConstants.reboot
width: parent.btnWidth
onClicked: sddm.reboot()
KeyNavigation.backtab: shutdownButton; KeyNavigation.tab: name
}
}
}
}
}
Component.onCompleted: {
if (name.text == "")
name.focus = true
else
password.focus = true
}
}

View file

@ -0,0 +1,7 @@
Based on the Maldives SDDM theme by Abdurrahman AVCI and other SDDM contributors.
chevron icons are extracted from Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome.
rectangle.png is from KDM ariya theme.
QML files contain license headers.

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

View file

@ -0,0 +1,17 @@
[SddmGreeterTheme]
Name=Sway-Fedora
Description=Fedora Sway Theme
Author=Fedora Sway SIG
Copyright=(c) 2024, Fedora Sway SIG
License=CC-BY-SA-3.0 AND MIT
Type=sddm-theme
Version=0.1
Website=https://gitlab.com/fedora/sigs/sway/sway-config-fedora
Screenshot=03-sway-fedora.jpg
MainScript=Main.qml
ConfigFile=theme.conf
TranslationsDirectory=translations
Email=sway@lists.fedoraproject.org
Theme-Id=03-sway-fedora
Theme-API=2.0
QtVersion=6

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,2 @@
[General]
background=@BACKGROUND@

View file

@ -12,9 +12,18 @@ if [ -x /usr/bin/start-sway ]; then
fi
# Set some compatibility variables in case if sway-config-fedora is not present
if systemd-detect-virt --quiet --vm; then
export WLR_NO_HARDWARE_CURSORS=1
export WLR_RENDERER=pixman
fi
case $(systemd-detect-virt --vm) in
"none"|"")
;;
"kvm")
# WLR_NO_HARDWARE_CURSORS=1 is not needed with legacy DRM interface
export WLR_RENDERER=pixman
export WLR_DRM_NO_ATOMIC=1
;;
*)
# https://github.com/swaywm/sway/issues/6581
export WLR_NO_HARDWARE_CURSORS=1
;;
esac
exec /usr/bin/sway "$@"

View file

@ -10,8 +10,11 @@ bindsym Mod4+shift+e exec swaynag \
# Disable displays on idle
exec command -v swayidle >/dev/null && swayidle -w \
timeout 300 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"'
timeout 300 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"'
# Apply system keyboard configuration
exec /usr/libexec/sway-systemd/locale1-xkb-config
# Show sddm-greeter as fullscreen
for_window [app_id="sddm-greeter"] fullscreen
for_window [app_id="sddm-greeter"] fullscreen enable

View file

@ -4,7 +4,7 @@ GreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=xdg-shell
InputMethod=
[Theme]
Current=02-lxqt-fedora
Current=03-sway-fedora
[Wayland]
CompositorCommand=/usr/libexec/sddm-compositor-sway

View file

@ -1,12 +1,15 @@
# vim: ft=spec
%bcond_without sddm
%global sway_ver 1.7
%bcond initialsetup %[0%{?fedora} >= 40 || 0%{?rhel} >= 10]
%bcond sddm 1
%global sway_ver 1.8
%global bg_format %[ 0%{?fedora} >= 42 ? "jxl" : "png" ]
Name: {{{ git_name }}}
Version: {{{ git_version }}}
Release: {{{ git_release }}}%{?dist}
Summary: Fedora Sway Spin configuration for Sway
SourceLicense: MIT AND CC-BY-SA-3.0
License: MIT
URL: https://gitlab.com/fedora/sigs/sway/{{{ git_name }}}
Source0: {{{ git_pack path=$(git rev-parse --show-toplevel) }}}
@ -27,7 +30,7 @@ Requires: polkit
Requires: xorg-x11-server-Xwayland
# Install configs and scripts for better integration with systemd user session
Recommends: sway-systemd
Recommends: sway-systemd >= 0.3.0
# Minimal installation doesn't include Qt Wayland backend
Recommends: (qt5-qtwayland if qt5-qtbase-gui)
Recommends: (qt6-qtwayland if qt6-qtbase-gui)
@ -36,11 +39,15 @@ Recommends: (qt6-qtwayland if qt6-qtbase-gui)
Recommends: foot
Recommends: libnotify
Recommends: rofi-wayland
Recommends: xdg-user-dirs
Requires: /usr/bin/pgrep
Requires: /usr/bin/pkill
Requires: brightnessctl >= 0.5.1-11
Requires: desktop-backgrounds-compat
Requires: grimshot
Requires: light
%if "%{bg_format}" == "jxl"
Requires: jxl-pixbuf-loader
%endif
Requires: lxqt-policykit
Requires: playerctl
Requires: pulseaudio-utils
@ -52,15 +59,36 @@ Requires: waybar
%description
%{summary}.
%if %{with initialsetup}
%package -n initial-setup-gui-wayland-sway
Summary: Sway Wayland Initial Setup GUI configuration
Provides: firstboot(gui-backend)
Conflicts: firstboot(gui-backend)
Requires: xorg-x11-server-Xwayland
Requires: initial-setup-gui >= 0.3.99
Requires: sway >= %{sway_ver}
Supplements: (initial-setup-gui and sway)
%description -n initial-setup-gui-wayland-sway
This package contains configuration and dependencies for
Anaconda Initial Setup to use Sway for the display server.
%endif
%if %{with sddm}
%package -n sddm-wayland-sway
Summary: Sway Wayland SDDM greeter configuration
License: MIT AND CC-BY-SA-3.0
Provides: sddm-greeter-displayserver
Conflicts: sddm-greeter-displayserver
Requires: lxqt-themes-fedora
Requires: sddm >= 0.19.0^git20221123.3e48649
Requires: sway
Requires: desktop-backgrounds-compat
%if "%{bg_format}" == "jxl"
Requires: kf6-kimageformats
%endif
Requires: sddm >= 0.20.0
Requires: sway >= %{sway_ver}
%description -n sddm-wayland-sway
This package contains configuration and dependencies for SDDM
@ -73,11 +101,16 @@ to use Sway for the greeter display server.
%build
%make_build
%make_build \
PREFIX='%{_prefix}' \
BACKGROUND='%{_datadir}/backgrounds/default.%{bg_format}'
%install
%make_install PREFIX='%{_prefix}' WITH_SDDM='%[%{with sddm}?"yes":"no"]'
%make_install \
PREFIX='%{_prefix}' \
WITH_INITIALSETUP='%[%{with initialsetup}?"yes":"no"]' \
WITH_SDDM='%[%{with sddm}?"yes":"no"]'
%files
@ -89,15 +122,24 @@ to use Sway for the greeter display server.
%{_bindir}/start-sway
%{_datadir}/sway/config.d
%{_datadir}/sway/config.live.d
%{_datadir}/sway/live
%{_datadir}/wayland-sessions/sway.desktop
%{_libexecdir}/sway
%if %{with initialsetup}
%files -n initial-setup-gui-wayland-sway
%license LICENSE
%{_libexecdir}/initial-setup/run-gui-backend
%endif
%if %{with sddm}
%files -n sddm-wayland-sway
%license LICENSE
%license %{_datadir}/sddm/themes/03-sway-fedora/LICENSE
%config(noreplace) %{_sysconfdir}/sway/sddm-greeter.config
%{_prefix}/lib/sddm/sddm.conf.d/wayland-sway.conf
%{_datadir}/sddm/themes/03-sway-fedora/
%{_libexecdir}/sddm-compositor-sway
%{_prefix}/lib/sddm/sddm.conf.d/wayland-sway.conf
%endif
%changelog

View file

@ -0,0 +1,12 @@
# Display PulseAudio volume control application (both GTK and Qt varieties)
# as a floating window.
for_window [app_id="pavucontrol"] {
floating enable
move position center
}
for_window [app_id="pavucontrol-qt"] {
floating enable
move position center
}

View file

@ -1,18 +1,18 @@
# Key bindings for brightness control using `light`.
# Key bindings for brightness control using `brightnessctl`.
# Displays a notification with the current value if /usr/bin/notify-send is available
#
# Brightness increase/decrease step can be customized by setting the `$brightness_step`
# variable to a numeric value before including the file.
#
# Requires: light
# Requires: brightnessctl >= 0.5.1-11
# Recommends: libnotify
set $brightness_notification_cmd command -v notify-send >/dev/null && \
VALUE=$(light) && VALUE=${VALUE%%.*} && \
VALUE=$(brightnessctl --percentage get) && \
notify-send -e -h string:x-canonical-private-synchronous:brightness \
-h "int:value:$VALUE" -t 800 "Brightness: ${VALUE}%"
bindsym XF86MonBrightnessDown exec \
'STEP="$brightness_step" && light -U ${STEP:-5} && $brightness_notification_cmd'
'STEP="$brightness_step" && brightnessctl -q set ${STEP:-5}%- && $brightness_notification_cmd'
bindsym XF86MonBrightnessUp exec \
'STEP="$brightness_step" && light -A ${STEP:-5} && $brightness_notification_cmd'
'STEP="$brightness_step" && brightnessctl -q set +${STEP:-5}% && $brightness_notification_cmd'

View file

@ -3,6 +3,11 @@
# The image files will be written to XDG_SCREENSHOTS_DIR if this is set
# or defined in user-dirs.dir, or to a fallback location XDG_PICTURES_DIR.
#
# Copy the file to ~/.config/sway/config.d/60-bindings-screenshot.conf (or to
# your $XDG_CONFIG_HOME location if set differently) to be able to overwrite
# existing shortcuts.
# Check 'man grimshot' for additional commands that you may find useful.
#
# Requires: grimshot
bindsym {
@ -12,6 +17,4 @@ bindsym {
Alt+Print exec grimshot save active
# Select and capture a custom rectangular area
Ctrl+Print exec grimshot save area
# Select and capture a single window
$mod+Print exec grimshot save window
}

View file

@ -3,18 +3,19 @@
#
# Volume increase/decrease step can be customized by setting the `$volume_step`
# variable to a numeric value before including the file.
# Maximum volume boost level can be set with the `$volume_limit` variable.
#
# Requires: pulseaudio-utils
# Recommends: libnotify
set $volume_notification_cmd /usr/libexec/sway/notify-volume
set $volume_helper_cmd /usr/libexec/sway/volume-helper
# Allow volume controls even if the screen is locked
bindsym --locked {
XF86AudioRaiseVolume exec \
'STEP="$volume_step" && pactl set-sink-volume @DEFAULT_SINK@ +${STEP:-5}% && $volume_notification_cmd'
$volume_helper_cmd --limit "$volume_limit" --increase "$volume_step"
XF86AudioLowerVolume exec \
'STEP="$volume_step" && pactl set-sink-volume @DEFAULT_SINK@ -${STEP:-5}% && $volume_notification_cmd'
XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && $volume_notification_cmd
$volume_helper_cmd --limit "$volume_limit" --decrease "$volume_step"
XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && $volume_helper_cmd
XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
}

View file

@ -1,10 +1,10 @@
# Status Bar: waybar
#
# Read `man 5 sway-bar` for more information about this section.
# Read `man 5 waybar` for more information about the waybar instance style and layout configuration
#
# Requires: waybar
bar {
position top
swaybar_command waybar
}

View file

@ -21,10 +21,10 @@
exec LT="$lock_timeout" ST="$screen_timeout" LT=${LT:-300} ST=${ST:-60} && \
swayidle -w \
timeout $LT 'swaylock -f' \
timeout $((LT + ST)) 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"' \
timeout $ST 'pgrep -xu "$USER" swaylock >/dev/null && swaymsg "output * dpms off"' \
resume 'pgrep -xu "$USER" swaylock >/dev/null && swaymsg "output * dpms on"' \
timeout $((LT + ST)) 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"' \
timeout $ST 'pgrep -xu "$USER" swaylock >/dev/null && swaymsg "output * power off"' \
resume 'pgrep -xu "$USER" swaylock >/dev/null && swaymsg "output * power on"' \
before-sleep 'swaylock -f' \
lock 'swaylock -f' \
unlock 'pkill -xu "$USER" -SIGUSR1 swaylock'

View file

@ -0,0 +1,14 @@
# Wait until a StatusNotifierItem tray implementation is available and
# process XDG autostart entries.
#
# This horror has to exist because
#
# - SNI spec mandates that if `IsStatusNotifierHostRegistered` is not set,
# the client should fall back to the Freedesktop System Tray specification
# (XEmbed).
# - There are actual implementations that take this seriously and implement
# a fallback *even if* StatusNotifierWatcher is already DBus-activated.
# - https://github.com/systemd/systemd/issues/3750
#
exec /usr/libexec/sway-systemd/wait-sni-ready && \
systemctl --user start sway-xdg-autostart.target

View file

@ -0,0 +1,9 @@
# Create or update XDG user dir configuration
#
# See also:
# - /etc/xdg/autostart/xdg-user-dirs.desktop
# - https://github.com/systemd/systemd/issues/18791
#
# Recommends: xdg-user-dirs
exec /usr/bin/xdg-user-dirs-update

View file

@ -21,21 +21,17 @@ set $term foot
# on the original workspace that the command was run on.
# Recommends: rofi-wayland
set $rofi_cmd rofi \
-run-command 'swaymsg exec -- {cmd}' \
-run-shell-command 'swaymsg exec -- {terminal} -e {cmd}' \
-terminal '$term'
# Shows a list of the executables from PATH
set $menu $rofi_cmd -show run
# Shows a list of the applications with desktop files installed
set $app_menu $rofi_cmd -show drun
# Both of the above in a single list
# set $menu $rofi_cmd -show combi -combi-modes run#drun
# Shows a combined list of the applications with desktop files and
# executables from PATH.
# TODO: add window with the next release of rofi-wayland
set $menu $rofi_cmd -show combi -combi-modes drun#run -modes combi
### Output configuration
#
# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
# Requires: desktop-backgrounds-compat, swaybg
output * bg /usr/share/backgrounds/default.png fill
# Requires: desktop-backgrounds-compat, swaybg, jxl-pixbuf-loader
output * bg @BACKGROUND@ fill
#
# Example configuration:
#
@ -82,7 +78,6 @@ output * bg /usr/share/backgrounds/default.png fill
# Start your launcher
bindsym $mod+d exec $menu
bindsym $mod+Shift+d exec $app_menu
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.

View file

@ -11,5 +11,5 @@
exec LT="$lock_timeout" ST="$screen_timeout" LT=${LT:-300} ST=${ST:-60} && \
swayidle -w \
timeout $((LT + ST)) 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"' \
timeout $((LT + ST)) 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"'

View file

@ -0,0 +1,11 @@
# Show installation instructions on the background
#
# Use nwg-wrapper to get installation instructions on the Live media background.
# The intention is to help first time user to start the Sway system
# installation easily.
#
# Requires: nwg-wrapper
set $live_scripts_path /usr/share/sway/live/
exec nwg-wrapper -t $live_scripts_path/live-install-instructions.pango -c $live_scripts_path/live-install-style.css -p left -ml 50 -mt 50 -a start

View file

@ -0,0 +1,9 @@
# Apply system-wide XKB configuration stored in systemd-localed.
#
# The configuration can be viewed with `localectl` and modified
# with `localectl set-x11-keymap`.
#
# In the live installer environment, Anaconda relies on the localed
# D-Bus API to update the keyboard configuration.
exec /usr/libexec/sway-systemd/locale1-xkb-config

View file

@ -0,0 +1,7 @@
# Allow local root to connect to Xwayland.
# Anaconda runs elevated and will fail to start without that.
#
# Requires: xhost
exec xhost si:localuser:root

View file

@ -0,0 +1,5 @@
<span size="x-large"><b>Installation instructions:</b></span>
- Press `Win+d`
- Type `liveinst` and press enter to start installer
- Use Anaconda installer to install the system

View file

@ -0,0 +1,18 @@
window {
background-color: rgba (0, 0, 0, 0.0);
}
#box-outer {
/* Define attributes of the box surrounding icons here */
background-color: rgba (255, 255, 255, 0.0)
}
#box-inner {
background-color: rgba (0, 0, 0, 0.8);
color: rgba (60, 110, 180, 1.0);
border-radius: 5px;
border-style: dotted;
border-width: 1px;
border-color: rgba (255, 255, 255, 0.7);
padding: 10px
}

View file

@ -1,6 +1,7 @@
#!/bin/sh
## Internal variables
readonly _SWAY_COMMAND="/usr/bin/sway"
SWAY_EXTRA_ARGS=""
## General exports
@ -10,16 +11,45 @@ export XDG_SESSION_TYPE=wayland
## Hardware compatibility
# We can't be sure that the virtual GPU is compatible with Sway.
if systemd-detect-virt --quiet --vm; then
# https://github.com/swaywm/sway/issues/6581
export WLR_NO_HARDWARE_CURSORS=1
# Fallback to the pixman renderer as it has a higher chance to work
# and will be faster than llvmpipe anyways.
# See https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/2871
export WLR_RENDERER=pixman
fi
# We should be attempting to detect an EGL driver instead, but that appears
# to be a bit more complicated.
case $(systemd-detect-virt --vm) in
"none"|"")
;;
"kvm")
# There's two drivers we can get here, depending on the 3D acceleration
# flag state: either virtio_gpu/virgl or kms_swrast/llvmpipe.
#
# The former one causes graphical glitches in OpenGL apps when using
# 'pixman' renderer. The latter will crash 'gles2' renderer outright.
# Neither of those support 'vulkan'.
#
# The choice is obvious, at least until we learn to detect the driver
# instead of abusing the virtualization technology identifier.
#
# See also: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/2871
export WLR_RENDERER=pixman
# 'pixman' on virtio_gpu with recent kernels is glitchy. Appears that
# it only affects atomic KMS, and legacy interface works.
export WLR_DRM_NO_ATOMIC=1
# WLR_NO_HARDWARE_CURSORS=1 is not needed with legacy DRM interface
;;
*)
# https://github.com/swaywm/sway/issues/6581
export WLR_NO_HARDWARE_CURSORS=1
;;
esac
## Load system environment customizations
## Apply `environment.d(5)` customizations
# This can be used to share the custom environment configs with systemd --user.
# Importing `systemd --user show-environment` here may have unexpected
# consequences, such as getting a leftover `WAYLAND_DISPLAY` or `DISPLAY`
# and breaking Sway startup. Thus, the direct call to a systemd generator.
set -o allexport
eval "$(/usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator)"
set +o allexport
## Load Sway-specific system environment customizations
if [ -f /etc/sway/environment ]; then
set -o allexport
# shellcheck source=/dev/null
@ -27,7 +57,7 @@ if [ -f /etc/sway/environment ]; then
set +o allexport
fi
## Load user environment customizations
## Load Sway-specific user environment customizations
if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/sway/environment" ]; then
set -o allexport
# shellcheck source=/dev/null
@ -40,6 +70,13 @@ fi
_SWAY_EXTRA_ARGS="$SWAY_EXTRA_ARGS"
unset SWAY_EXTRA_ARGS
## Log all exported WLR_ variables
if _WLR_VARS=$(env | grep '^WLR_'); then
printf 'environment variables for wlroots: %s' "$_WLR_VARS" |
tr '\n' ' ' |
systemd-cat -p notice -t "${_SWAY_COMMAND##*/}"
fi
# Start sway with extra arguments and send output to the journal
# shellcheck disable=SC2086 # quoted expansion of EXTRA_ARGS can produce empty field
exec systemd-cat -- /usr/bin/sway $_SWAY_EXTRA_ARGS "$@"
exec systemd-cat -- $_SWAY_COMMAND $_SWAY_EXTRA_ARGS "$@"

View file

@ -3,5 +3,5 @@
#
# Image path supports environment variables and shell expansions,
# e.g. image=$HOME/Pictures/default.png
image=/usr/share/backgrounds/default.png
image=@BACKGROUND@
scaling=fill

View file

@ -12,6 +12,7 @@
// "sway/workspaces": {
// "disable-scroll": true,
// "all-outputs": true,
// "warp-on-scroll": false,
// "format": "{name}: {icon}",
// "format-icons": {
// "1": "",