Open Up: Contributions and Collaborations
Hello fellow space travelers! It’s been a while since we catalogued all of our goings on here on Starship Pop!_OS, so we thought it might be a good time to highlight what our upstream contributions have looked like over the last couple of years. We’ve been logging some major light years! Have a look.
Keyboards Settings Panel and Keyboard Shortcuts
We worked in the GNOME design team to modernize and improve the GNOME Settings keyboard panel and shortcuts and engineered the new designs that ship today.
keyboard: Update panel layout with descriptions for sections
keyboard: Avoid modifying `xkb-options` when user changes nothing
keyboard: For xkb options, have "Layout default" toggle, and "None"
keyboard: Create CcXkbModifierDialog only when used
keyboard: Rename `XkbOption` and `XkbModifier` with `Cc` prefix
keyboard: Alternate characters key setting behaves in an unclear way
keyboard: Allow disabling alternate characters key
WIP: Use gsettings to get description of key bindings
WIP: keyboard: add a switch to enable/disable the switch-to-application* bindings
Laptop Battery Thresholds
This one is a work-in-progress that started a year ago. We’re seeing some recent movement happening here, so hopefully we can get this one in soon.
https://gitlab.freedesktop.org/upower/upower/-/merge_requests/49
GNOME Settings General and Responsiveness
We think Settings are an important window into the capabilities and options of an OS experience. As such, we tend to spend a lot of time helping to improve the Settings experience on GNOME. And with Pop!_OS auto-tiling, responsiveness is important to us as well. Our QA team tests every panel for responsiveness and we provide patches to enable or fix issues as they arise.
shell: Fix bug when multiple panels use custom sidebar widget
Add "Disable While Typing" toggle for touchpad
users: Respect `enforcing` in `/etc/security/pwquality.conf`
user-accounts: Use HdyClamp
user-accounts: Use HdyActionRow
power: Refactor battery row code into a `CcBatteryRow` type
Contributions to other GNOME Projects
GNOME Disk Utility
Improve the visual appearance of the devtab toolbar https://gitlab.gnome.org/GNOME/gnome-disk-utility/-/merge_requests/57
Nvidia Optimus Application Launching
main: Add script to launch on the discrete GPU
Port switcheroo-control build system to Meson
appDisplay: Only show add/remove favorite when shouldShowApp() is true
location: Split `Location.Indicator` into a seperate `GeoclueAgent`
Begin work toward gtk-layer-shell in gtk4
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3918
x11: Fix handling of `RRScreenChangeNotify`/`RRNotify` events
Tutorial Series on Building GTK Apps in Rust
https://mmstick.github.io/gtkrs-tutorials/1x00-intro.html
gtk-rs - Largest contribution was working on a few things to make subclassing easier. Otherwise, random fixes and additions:
gtk: Make ButtonImpl depend on BinImpl
gdk: Fixes for keymap/keysym API
gtk: Do not use g_type_check_class_cast in WidgetClassSubclassExt
gtk: Add binding for gtk_container_class_handle_border_width()
glib: Remove Char::new/UChar::new, in favor of from/try_from
glib: From/TryFrom implementations for working with Char/UChar
gtk: Add WidgetClassSubclassExt::{css_name,set_css_name}
gio: Mark DBusProxy/DBusConnection as send+sync and regenerate
glib: Move type_data() and get_type() to new unsafe trait
glib: #[object_subclass] proc macro
gtk: Add enter_notify_event and leave_notify_event to WidgetImpl
glib-macros: Make GBoxed not require importing BoxedType
gio: Add glib-compile-resources wrapper, and macro to include
gtk: Implement Deref for TemplateChild
Use #[must_use] on BindingBuilder for property/gsetting
Consistently use Self::Class when defining class_init()
Update gir and regenerate
Rename glib_bool_error! and glib_result_from_gboolean!
Rename glib_object_interface! to object_interface!
examples: Do not use glib::{wrapper, object_subclass}
Rename glib_wrapper! and glib_object_subclass! without glib prefix
Update gir submodule and regenerate
glib: Make Object::new() generic
gio: Use builder pattern for Settings::bind()
Subclassing for GtkButton, backported from gtk4-rs
gtk: Make methods of *Impl traits take Self::Type
gio: Make methods of *Impl traits take Self::Type
glib: Make virtual methods take wrapper of type, not parent
Remove optional $rust_class_name from glib_wrapper
Change all instances where $rust_class_name is passed to glib_wrapper!
Update gir and regenerate
Take proper advantage of glib::Object<T>::as_mut()
glib: Add a pub use or object::Class in root of library
glib: Implement AsRef/AsMut<T::GlibClassType> for Class<T>
In glib_object_wrapper!, use generic Class type instead defining a st
glib: Don't derive PartialOrd/PartialEq implementations in glib_wrapper!
glib: Remove PhantomData from Value, and make it #[repr(transparent)]
glib: Derive PartialOrd, PartialEq, Eq, and Debug in glib_object_wrap…
glib: Remove PhantomData from struct created in glib_object_wrapper!
glib: Update glib::subclass example to use an imp module
glib: Add a ObjectSubclass version of glib_wrapper!
glib: Use traits explicitly with $crate in glib_object_wrapper!
glib: Remove wrapper::Void
glib: Use :ty rather than :path for ffi_name and ffi_class_name
glib: Fix .get_instance() assert failure with zero-sized type
glib: Define a Variant::is_container(), use it for checks
glib: Add a VariantIter type, and Variant::iter() method
glib: Implement ToVariant and FromVariant for Variant
glib: fix: Do not transfer ownership in Variant::new_variant()
glib: Use $crate when invoking glib_object_wrapper! in a macro
Collaboration with Intel and AMD to enable their platforms in open firmware
System76 has ported a wide variety of our laptops to coreboot and upstreamed the majority of these changes. Below is a list of changes that improve coreboot for all vendors.
Improvements for CometLake CPUs
https://review.coreboot.org/c/coreboot/+/31535
https://review.coreboot.org/c/coreboot/+/31536
https://review.coreboot.org/c/coreboot/+/33940
https://review.coreboot.org/c/coreboot/+/33941
https://review.coreboot.org/c/coreboot/+/35924
https://review.coreboot.org/c/coreboot/+/46300
https://review.coreboot.org/c/coreboot/+/47914
https://review.coreboot.org/c/coreboot/+/49104
https://review.coreboot.org/c/coreboot/+/49172
Add support for PCIe hot plug
https://review.coreboot.org/c/coreboot/+/35946
Add driver for TI smart amplifier
https://review.coreboot.org/c/coreboot/+/43614
https://review.coreboot.org/c/coreboot/+/47914
https://review.coreboot.org/c/coreboot/+/56861
Fix SMMSTORE clear command
https://review.coreboot.org/c/coreboot/+/49724
Improvements for TigerLake CPUs
https://review.coreboot.org/c/coreboot/+/50597
https://review.coreboot.org/c/coreboot/+/56862
https://review.coreboot.org/c/coreboot/+/56867
https://review.coreboot.org/c/coreboot/+/57823
Enabled TigerLake-H CPUs (many changes in one topic)
https://review.coreboot.org/q/topic:tgl-h
In the process of adding generic NVIDIA hybrid graphics support
https://review.coreboot.org/c/coreboot/+/57034
Enable flashrom on TGL-H chipsets
https://review.coreboot.org/c/flashrom/+/57533
Many more changes made by System76 can be seen here, there are five pages, so make sure to view them all:
https://review.coreboot.org/q/owner:jeremy%2540system76.com+OR+owner:tcrawford%2540system76.com
Added support for thelio-io and system76-launch
https://github.com/fwupd/fwupd/issues?q=author%3Ajackpot51
System76 Launch Configurable Keyboard uses LVFS for all firmware updates
https://fwupd.org/lvfs/devices/com.system76.launch_1.firmware
Nvidia Testing Collaboration
We’ve established a new testing relationship brought on by the recent GSync regression. We’ll now be testing pre-release nvidia drivers in the QA lab across a wide variety of hardware to catch regressions and bugs prior to release to the Linux community
Collaboration to enable application responsiveness
Homepage: Allow AppCenter Homepage to shrink to narrow sizes
MainWindow: Allow search bar to shrink when window is narrow
AppInfoView: Add scalable, full-width screenshots
AppInfoView: Make App Info header wrap at narrow screen sizes
AppInfoView: Change app description to Gtk.Label
Monitor FlatpakInstallation for Changes
Sort search view using search term
Current collaboration to help them get our software packaged on their platform
https://github.com/orgs/pop-os/projects/18
Additional Upstream Collaboration
Working with Deno to create distribution packaging for it
https://github.com/denoland/deno/issues/10872
Apt essential package removal prompt
https://salsa.debian.org/apt-team/apt/-/merge_requests/196
Distribution packaging for Alacritty
https://github.com/pop-os/alacritty
https://github.com/pop-os/repo-curated-free/issues/5
https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/240
https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/251
https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/252
https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/300
https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/375
Add serde support to clokwerk
https://github.com/mdsherry/clokwerk/pull/29
Make pbr’s MultiBar thread-safe
https://github.com/a8m/pb/pull/92
Pop Shell as a successful experiment for using TypeScript for GJS extensions
Arena allocator for Deno & Typescript with persistent unique keys via generational indices
Rust crates where we are the upstream
Codec for freedesktop desktop entries
https://crates.io/crates/freedesktop-desktop-entry
FFI bindings for libparted
https://crates.io/crates/libparted
FFI bindings for GWeather
https://github.com/pop-os/gweather-rs
High level FFI bindings for the Linux mount and umount2 system calls
https://crates.io/crates/sys-mount
https://github.com/pop-os/mutter-rs
Library for systemd-boot configuration files
https://crates.io/crates/systemd-boot-conf
https://crates.io/crates/hostname-validator
Library for interacting with Linux’s sysfs interface
https://github.com/pop-os/sysfs-class
DBus client API for fwupd
https://github.com/pop-os/fwupd-dbus
DBus client API for UDisks2
https://crates.io/crates/dbus-udisks2
Library for parsing /etc/os-release files
https://crates.io/crates/os-release
DBus client API for logind
https://crates.io/crates/logind-dbus
Iterating swap and mount points in a system
https://crates.io/crates/proc-mounts
Futures codec for debian’s diversion files
https://github.com/pop-os/deb-diversion
Codec for debian’s changelog files
https://github.com/pop-os/deb-changelog
Single-threaded libc::poll-based async runtime reactor
https://github.com/pop-os/fd-reactor
Support for Linux’s pidfd for async process handling
https://crates.io/crates/pidfd
Traits to extend std::process::{ExitStatus, Output}
https://crates.io/crates/as-result
Library for iterating loaded kernel modules
https://crates.io/crates/proc-modules
Library for parsing environment files into an in-memory map
https://crates.io/crates/envfile
High level API for asynchronously fetching files from the web
https://github.com/pop-os/async-fetcher
System76 ACPI driver for coreboot-based systems
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fd13c8622a5ad4f7317b64de4f6aa2de1962220e
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=95563d45b5da9cdd07496bf54f0d83f25d679847
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0de30fc684b3883be73602b7557661951319a9b9
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76f7eba3e0a248af4cc4f302d95031fa2fb65fab
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=603a7dd08f881e1b5c754429dac5af6c29992528
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=97ae45953ea957887170078f488fd629dd1ce786
Audio quirks for several Clevo boards
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f0d520a1a73555ac51c19cd494493f60b4c1cea
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=89e3a5682edaa4e5bb334719afb180256ac7bf78
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7f665b1c3283aae5b61843136d0a8ee808ba3199
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80a5052db75131423b67f38b21958555d7d970e4
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=891afcf2462d2cc4ef7caf94215358ca61fa32cb
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dbfe83507cf4ea66ce4efee2ac14c5ad420e31d3
https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git/commit/?h=for-next&id=1278cc5ac2f96bab50dd55c8c05e0a6a77ce323e
System76 Projects as Upstream
CLI and GTK application for multiple USB file flashing
https://github.com/pop-os/popsicle
JSON IPC backend launcher service w/ plugin API
https://github.com/pop-os/launcher
GTK application for firmware updates, with GTK widget for easy integration into any GTK application, such as GNOME Control Center
https://github.com/pop-os/firmware-manager
DBus services for automatic distribution software updates
https://github.com/pop-os/system-updater
DBus service for power profiles, graphics switching, fan curve control
https://github.com/pop-os/system76-power/
Tensorflow container manager
https://github.com/pop-os/tensorman
A year of work to liberate EC firmware that’s also found use for other vendors
https://github.com/system76/ec
Tiler being re-written as a DE agnostic library to bring tiling to more environments
https://github.com/pop-os/tiler
Distinst - an installer backend also used by other distributions
https://github.com/pop-os/distinst
https://github.com/pop-os/distinst-v2
Pop!_Shell - A GNOME extension to add tiling for GNOME based distros (eventually will utilize tiler library)
https://github.com/pop-os/shell
All in all it’s been a couple busy trips around the sun! Thanks for joining us on this journey throughout our productivity, and keep your view screens on for our upcoming contributions!