diff --git a/.gitmodules b/.gitmodules
index eb5f39c8a..3e1254002 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,10 +1,9 @@
[submodule "src/initial-setup"]
path = src/initial-setup
url = git@github.com:itsmanjeet/initial-setup
-[submodule "src/srclang"]
- path = src/srclang
- url = git@github.com:itsmanjeet/srclang
-
[submodule "src/pkgupd"]
path = src/pkgupd
url = git@github.com:itsmanjeet/pkgupd
+[submodule "src/capsule"]
+ path = src/capsule
+ url = git@github.com:itsmanjeet/capsule
diff --git a/Makefile b/Makefile
index 6abb41448..5e4b9a32d 100644
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,7 @@ export OSTREE_GPG_CONFIG
export PKGUPD
export CACHE_PATH
-.PHONY: clean all docs version.yml channel.yml ostree-branch.yml apps
+.PHONY: clean all docs version.yml channel.yml ostree-branch.yml apps TODO.ELEMENTS
all: $(PKGUPD) version.yml ostree-branch.yml channel.yml
ifdef ELEMENT
diff --git a/TODO.ELEMENTS b/TODO.ELEMENTS
index 203302a5f..5bd510a25 100644
--- a/TODO.ELEMENTS
+++ b/TODO.ELEMENTS
@@ -1,95 +1,73 @@
-components/rustc: update to latest version for firefox
-
-components/gcr.yml: check and fix update url version
-components/gcr.yml: fix documentation
-components/qt.yml: fix configuration files
-components/qt.yml: check dependencies
-components/proot.yml: fix patch
+system/repo.yml: FIX components/pam.yml integration
+components/icon-naming-utils.yml: fix update url
+components/system-config-printer.yml: Why we need to do this manually??
+components/gnome/gnome-epub-thumbnailer.yml: fix update url
+components/gnome/gdm.yml: We need to setup and use our PAM configuration
+components/spice-vdagent.yml: fix configurations
components/baloo.yml: check and update
-components/pcsclite.yml: fix update url
-components/colord-gtk.yml: enable documentation and manuals
-components/libkcddb.yml: fix update url
-components/lxd.yml: fix service file
-components/gcr-4.yml: check and fix update url version
-components/gcr-4.yml: fix documentation
-components/vaapi-driver.yml: fix update url
+components/postfix.yml: fix user creation
+components/postfix.yml: fix systemd service file
components/bsdiff.yml: fix patch
-components/kbd.yml: check for patch
-components/cdparanoia.yml: check with inbuilt autotools
-components/spice.yml: enable gstreamer
-components/libsecret.yml: enable docs and manpages
-components/devel.yml: convert to layer
-components/folks.yml: check build configurations
-components/openssh.yml: build with builtin autotools
-components/dbus-c++.yml: fix patches
-components/dnsmasq.yml: fix service file
-components/mariadb.yml: fix configuration file
-components/colord.yml: enable bash_completion, docs and manuals
+components/glibc-dbg.yml: merge this with glibc
components/lxcfs.yml: fix service file
components/lxcfs.yml: enable docs
-components/cppgir.yml: fix update url
-components/opencv3.yml: fix update url
+components/apr-util.yml: fix update url
+components/weston.yml: enable vaapi, pipewire, freerdp, xwayland, gstreamer
+components/dbus-c++.yml: fix patches
+components/libgssglue.yml: fix configuration
+components/colord-gtk.yml: enable documentation and manuals
+components/debian-archive-keyring.yml: fix update url
+components/dnsmasq.yml: fix service file
+components/schroot.yml: fix patch file
+components/lm-sensors.yml: fix configuration
+components/kbd.yml: check for patch
+components/firefox-src.yml: libpng doesn't have APNG support
+components/firefox-src.yml: update rustc compiler
+components/firefox-src.yml: update nss
+components/gcr.yml: check and fix update url version
+components/gcr.yml: fix documentation
+components/audit.yml: Learn More about it
+components/audit.yml: check config path patch
components/fcron.yml: fix configurations
-components/xfce4-session.yml: fix update url
-components/exo.yml: fix update url
-components/glm.yml: fix configuration file
-components/nvidia-utils.yml: check update url
-components/nvidia-utils.yml: merge into nvidia layer
-components/cups.yml: fix pam configuration
-components/plymouth.yml: fix configurations
-components/xfce4-panel.yml: fix update url
components/gtk-doc.yml: fix update url
-components/icon-naming-utils.yml: fix update url
-components/nginx.yml: fix service file
-components/nginx.yml: fix configuration file
-components/dconf-editor.yml: check version
-components/dqlite.yml: run autoreconf
+components/proot.yml: fix patch
+components/libsecret.yml: enable docs and manpages
components/python2.yml: check deprecated
-components/pciutils.yml: fix update script
-components/dotnet.yml: fix update url
-components/appstream-glib.yml: check stemmer requirement
-components/egl-wayland.yml: fix nvidia wayland configuration
-components/bluez.yml: enable manpages
-components/protobuf.yml: fix update url
-components/gnupg.yml: check version and update url
+components/dpp.yml: fix update url
+components/vaapi-driver.yml: fix update url
+components/colord.yml: enable bash_completion, docs and manuals
components/tracker.yml: enable documentation
-components/audit.yml: Learn More about it
-components/audit.yml: check config path patch
-components/libgssglue.yml: fix configuration
-components/lxc.yml: fix service file
-components/spice-vdagent.yml: fix configurations
-components/lm-sensors.yml: fix configuration
-components/fuse2.yml: fix update url
-components/gnome-epub-thumbnailer.yml: fix update url
-components/schroot.yml: fix patch file
-components/containerd.yml: build from source
-components/espeak-ng.yml: check patch
-components/espeak-ng.yml: build using builtin autotools
-components/berkeley-db.yml: Fix update url
-components/berkeley-db.yml: check direct source
-components/gc.yml: check patch
-components/openjdk.yml: fix update url
-components/nvidia-settings.yml: check patch
+components/lxd.yml: fix service file
components/udisks.yml: check update url
-components/openjdk-bin.yml: fix update url
-components/openldap.yml: fix post-script and configurations
-components/apr-util.yml: fix update url
-components/plasma-pam.yml: fix pam configuration
-components/xfce4-whiskermenu-plugin.yml: Enable GTK layer shell support
-components/debian-archive-keyring.yml: fix update url
-components/drkonqi.yml: fix update url
-components/postfix.yml: fix user creation
-components/postfix.yml: fix systemd service file
-components/gtk.yml: fix update url
-components/dconf.yml: enable bash_completion
-components/elementary-xfce-icons.yml: build using builtin autotools
components/clutter.yml: check configure options
-components/libyaml-cpp.yml: fix update url
+components/pcsclite.yml: fix update url
+components/ca-certificates.yml: better work around
+components/xfce4/exo.yml: fix update url
+components/xfce4/panel-plugins/xfce4-whiskermenu-plugin.yml: Enable GTK layer shell support
+components/xfce4/xfce4-panel.yml: fix update url
+components/protobuf.yml: fix update url
+components/dqlite.yml: run autoreconf
+components/cppgir.yml: fix update url
+components/lxc.yml: fix service file
+components/opencv3.yml: fix update url
+components/libblockdev.yml: enable nvme support
+components/libkcddb.yml: fix update url
+components/gnupg.yml: check version and update url
+components/egl-wayland.yml: fix nvidia wayland configuration
+components/dconf.yml: enable bash_completion
components/pam_wrapper.yml: fix update url
+components/bluez.yml: enable manpages
+components/openssh.yml: build with builtin autotools
+components/plasma/plasma-pam.yml: fix pam configuration
+components/plasma/drkonqi.yml: fix update url
+components/gcr-4.yml: check and fix update url version
+components/gcr-4.yml: fix documentation
+components/nginx.yml: fix service file
+components/nginx.yml: fix configuration file
+components/folks.yml: check build configurations
+components/elementary-xfce-icons.yml: build using builtin autotools
+components/cdparanoia.yml: check with inbuilt autotools
+components/spice.yml: enable gstreamer
components/glew.yml: fix patch
-components/libblockdev.yml: enable nvme support
-components/flatpak.yml: fix configurations
-components/dpp.yml: fix update url
-components/weston.yml: enable vaapi, pipewire, freerdp, xwayland, gstreamer
-apps/dia.yml: check better way
-apps/eog.yml: build with portol support
+components/openldap.yml: fix post-script and configurations
+components/dconf-editor.yml: check version
diff --git a/apps/welcome/assets/welcome.desktop b/apps/welcome/assets/welcome.desktop
new file mode 100644
index 000000000..f7cc365d0
--- /dev/null
+++ b/apps/welcome/assets/welcome.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Version=1.0
+Name=Welcome Tour
+Comment=Guided tutorial for new users
+GenericName=Welcome Tour
+Exec=welcome
+Terminal=false
+StartupNotify=true
\ No newline at end of file
diff --git a/apps/welcome/config/config.go b/apps/welcome/config/config.go
new file mode 100644
index 000000000..cfa5be74e
--- /dev/null
+++ b/apps/welcome/config/config.go
@@ -0,0 +1,22 @@
+package config
+
+import (
+ "os"
+ "path"
+)
+
+const (
+ GtkDarkTheme = "Orchis-Dark"
+ GtkLightTheme = "Orchis-Light"
+
+ IconDarkTheme = "Tela-dark"
+ IconLightTheme = "Tela-light"
+
+ SoftwareCenter = "gnome-software"
+
+ SupportUrl = "https://github.com/itsManjeet/rlxos/discussions"
+)
+
+var (
+ DoneFile = path.Join(os.Getenv("HOME"), ".welcome-done")
+)
diff --git a/apps/welcome/locale/hi.yaml b/apps/welcome/locale/hi.yaml
new file mode 100644
index 000000000..8c3a04823
--- /dev/null
+++ b/apps/welcome/locale/hi.yaml
@@ -0,0 +1,22 @@
+- string: Welcome
+ translation: Welcome
+- string: Welcome to RLXOS
+ translation: Welcome to RLXOS
+- string: Back
+ translation: Back
+- string: Looks and feel
+ translation: Looks and feel
+- string: Applications
+ translation: Applications
+- string: Finalize
+ translation: Finalize
+- string: Help and Support
+ translation: Help and Support
+- string: Finish
+ translation: Finish
+- string: Next
+ translation: Next
+- string: Follow to step-by-step guide to know more about rlxos
+ translation: Follow to step-by-step guide to know more about rlxos
+- string: Get your favorite apps here
+ translation: Get your favorite apps here
diff --git a/apps/welcome/locale/locale.go b/apps/welcome/locale/locale.go
new file mode 100644
index 000000000..733eddbbd
--- /dev/null
+++ b/apps/welcome/locale/locale.go
@@ -0,0 +1,17 @@
+package locale
+
+import (
+ _ "embed"
+ "rlxos/pkg/localize"
+)
+
+//go:embed hi.yaml
+var hi []byte
+
+func init() {
+ localize.Add("hi", hi)
+}
+
+func T(s string) string {
+ return localize.Translate(s)
+}
diff --git a/apps/welcome/main.go b/apps/welcome/main.go
new file mode 100644
index 000000000..e5266c5fb
--- /dev/null
+++ b/apps/welcome/main.go
@@ -0,0 +1,36 @@
+package main
+
+import (
+ "github.com/diamondburned/gotk4/pkg/gdk/v4"
+ "github.com/diamondburned/gotk4/pkg/gio/v2"
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+ "os"
+ "rlxos/apps/welcome/config"
+ "rlxos/apps/welcome/window"
+ "rlxos/apps/welcome/window/style"
+)
+
+func main() {
+ app := gtk.NewApplication("dev.rlxos.Welcome", gio.ApplicationFlagsNone)
+
+ if _, err := os.Stat(config.DoneFile); err == nil && os.Getenv("WELCOME_TOUR_AS_APP") == "" {
+ os.Exit(0)
+ }
+
+ app.ConnectStartup(func() {
+ gtk.StyleContextAddProviderForDisplay(
+ gdk.DisplayGetDefault(), style.Provider(),
+ gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
+ })
+
+ app.ConnectActivate(func() {
+ win := app.ActiveWindow()
+ if win == nil {
+ win = &window.NewWindow().Window
+ app.AddWindow(win)
+ }
+ win.Present()
+ })
+
+ os.Exit(app.Run(os.Args))
+}
diff --git a/apps/welcome/window/page.go b/apps/welcome/window/page.go
new file mode 100644
index 000000000..a898713fa
--- /dev/null
+++ b/apps/welcome/window/page.go
@@ -0,0 +1,12 @@
+package window
+
+import "github.com/diamondburned/gotk4/pkg/gtk/v4"
+
+type IPage interface {
+ gtk.Widgetter
+
+ CanGoBack() bool
+ CanGoForward() bool
+
+ Title() string
+}
diff --git a/apps/welcome/window/pages/apps/apps.go b/apps/welcome/window/pages/apps/apps.go
new file mode 100644
index 000000000..5d28a15dd
--- /dev/null
+++ b/apps/welcome/window/pages/apps/apps.go
@@ -0,0 +1,71 @@
+package apps
+
+import (
+ _ "embed"
+ "github.com/diamondburned/gotk4/pkg/glib/v2"
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+ "log"
+ "os/exec"
+ "rlxos/apps/welcome/config"
+ . "rlxos/apps/welcome/locale"
+)
+
+type Page struct {
+ gtk.Box
+}
+
+func NewAppsPage() *Page {
+ p := &Page{Box: *gtk.NewBox(gtk.OrientationVertical, 0)}
+ p.setupUI()
+ return p
+}
+
+func (p *Page) setupUI() {
+ p.SetVAlign(gtk.AlignCenter)
+ p.SetHAlign(gtk.AlignCenter)
+
+ icon := gtk.NewImageFromIconName("applications-all-symbolic")
+ icon.SetPixelSize(64)
+ icon.SetMarginBottom(12)
+ p.Append(icon)
+
+ heading := gtk.NewLabel(T("Get your favorite apps here"))
+ heading.AddCSSClass("heading")
+ p.Append(heading)
+
+ subheading := gtk.NewLabel(T("Browse and install your favorite apps effortlessly.\nExplore new tools, utilities, and games—all available directly in the Software Center."))
+ subheading.SetJustify(gtk.JustifyCenter)
+ subheading.SetMarginBottom(24)
+ p.Append(subheading)
+
+ button := gtk.NewButtonWithLabel(T("Browse apps"))
+ button.ConnectClicked(func() {
+ button.SetSensitive(false)
+ button.SetLabel(T("Starting..."))
+
+ cmd := exec.Command(config.SoftwareCenter)
+ if err := cmd.Start(); err != nil {
+ log.Println("failed to start software center", err)
+ } else {
+ go func() {
+ if err := cmd.Wait(); err != nil {
+ log.Println("failed to wait for software center", err)
+ }
+ glib.IdleAdd(func() bool {
+ button.SetSensitive(true)
+ button.SetLabel(T("Browse apps"))
+ return true
+ })
+ }()
+ }
+ })
+ button.SetHAlign(gtk.AlignCenter)
+ button.SetVAlign(gtk.AlignCenter)
+ p.Append(button)
+}
+
+func (p *Page) CanGoBack() bool { return true }
+
+func (p *Page) CanGoForward() bool { return true }
+
+func (p *Page) Title() string { return T("Applications") }
diff --git a/apps/welcome/window/pages/finish/finish.go b/apps/welcome/window/pages/finish/finish.go
new file mode 100644
index 000000000..e71024865
--- /dev/null
+++ b/apps/welcome/window/pages/finish/finish.go
@@ -0,0 +1,43 @@
+package finish
+
+import (
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+ . "rlxos/apps/welcome/locale"
+)
+
+type Page struct {
+ gtk.Box
+}
+
+func NewFinishPage() *Page {
+ p := &Page{Box: *gtk.NewBox(gtk.OrientationVertical, 0)}
+ p.setupUI()
+ return p
+}
+
+func (p *Page) setupUI() {
+ p.SetHAlign(gtk.AlignCenter)
+ p.SetVAlign(gtk.AlignCenter)
+ p.SetMarginBottom(36)
+
+ icon := gtk.NewImageFromIconName("ticktick-tray")
+ icon.SetPixelSize(64)
+ icon.SetMarginBottom(12)
+ p.Append(icon)
+
+ heading := gtk.NewLabel(T("You're All Set!"))
+ heading.AddCSSClass("heading")
+ p.Append(heading)
+
+ subheading := gtk.NewLabel(T("Your system is ready. Dive in\nand start exploring or fine-tune your settings further."))
+ subheading.SetMarginBottom(24)
+ subheading.SetJustify(gtk.JustifyCenter)
+ p.Append(subheading)
+
+}
+
+func (p *Page) CanGoBack() bool { return true }
+
+func (p *Page) CanGoForward() bool { return true }
+
+func (p *Page) Title() string { return T("Finalize") }
diff --git a/apps/welcome/window/pages/looks/looks.go b/apps/welcome/window/pages/looks/looks.go
new file mode 100644
index 000000000..41ef59458
--- /dev/null
+++ b/apps/welcome/window/pages/looks/looks.go
@@ -0,0 +1,112 @@
+package looks
+
+import (
+ "fmt"
+ "log"
+ "os/exec"
+ "rlxos/apps/welcome/config"
+ . "rlxos/apps/welcome/locale"
+
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+)
+
+type Page struct {
+ gtk.Box
+
+ slider *gtk.Scale
+}
+
+func NewLooksPage() *Page {
+ p := &Page{Box: *gtk.NewBox(gtk.OrientationVertical, 0)}
+ p.setupUI()
+ return p
+}
+
+func (p *Page) setupUI() {
+ p.SetVAlign(gtk.AlignCenter)
+ p.SetMarginBottom(128)
+
+ themeLabel := gtk.NewLabel(T("Choose Your Theme"))
+ themeLabel.AddCSSClass("subheading")
+ themeLabel.SetMarginBottom(12)
+ p.Append(themeLabel)
+
+ btnBox := gtk.NewBox(gtk.OrientationHorizontal, 24)
+ btnBox.SetHAlign(gtk.AlignCenter)
+ p.Append(btnBox)
+
+ darkThemeImage := gtk.NewImageFromIconName("dark-mode-symbolic")
+ darkThemeImage.SetPixelSize(64)
+
+ darkThemeBtn := gtk.NewButton()
+ darkThemeBtn.SetChild(darkThemeImage)
+ darkThemeBtn.ConnectClicked(func() { p.SwitchToDarkTheme() })
+ darkThemeBtn.AddCSSClass("circular")
+ btnBox.Append(darkThemeBtn)
+
+ lightThemeImage := gtk.NewImageFromIconName("brightness-display-symbolic")
+ lightThemeImage.SetPixelSize(64)
+
+ lightThemeBtn := gtk.NewButton()
+ lightThemeBtn.SetChild(lightThemeImage)
+ lightThemeBtn.ConnectClicked(func() { p.SwitchToLightTheme() })
+ lightThemeBtn.AddCSSClass("circular")
+ btnBox.Append(lightThemeBtn)
+
+ dpiLabel := gtk.NewLabel(T("Adjust Display Scale"))
+ dpiLabel.AddCSSClass("subheading")
+ dpiLabel.SetMarginBottom(12)
+ dpiLabel.SetMarginTop(54)
+ p.Append(dpiLabel)
+
+ p.slider = gtk.NewScaleWithRange(gtk.OrientationHorizontal, 0, 100, 10)
+ for i := 0; i <= 100; i += 10 {
+ p.slider.AddMark(float64(i), gtk.PosTop, "")
+ }
+ p.slider.ConnectValueChanged(func() {
+ p.UpdateScaling()
+ })
+ p.slider.SetMarginStart(40)
+ p.slider.SetMarginEnd(40)
+ p.slider.SetValue(20)
+ p.Append(p.slider)
+}
+
+func (p *Page) UpdateScaling() {
+ scale := p.slider.Value()
+ p.setConfig("xsettings", "/Xft/DPI", fmt.Sprintf("%d", int(scale+90)))
+}
+
+func (p *Page) SwitchToDarkTheme() {
+ p.setGsettings("org.gnome.desktop.interface", "gtk-theme", config.GtkDarkTheme)
+ p.setConfig("xsettings", "/Net/ThemeName", config.GtkDarkTheme)
+
+ p.setGsettings("org.gnome.desktop.interface", "icon-theme", config.IconDarkTheme)
+ p.setConfig("xsettings", "/Net/IconThemeName", config.IconDarkTheme)
+}
+
+func (p *Page) SwitchToLightTheme() {
+ p.setGsettings("org.gnome.desktop.interface", "gtk-theme", config.GtkLightTheme)
+ p.setConfig("xsettings", "/Net/ThemeName", config.GtkLightTheme)
+
+ p.setGsettings("org.gnome.desktop.interface", "icon-theme", config.IconLightTheme)
+ p.setConfig("xsettings", "/Net/IconThemeName", config.IconLightTheme)
+}
+
+func (p *Page) setConfig(channel, property, value string) {
+ if output, err := exec.Command("xfconf-query", "-c", channel, "-p", property, "-s", value).CombinedOutput(); err != nil {
+ log.Printf("Failed to set config %s: %s %s", property, string(output), err)
+ }
+}
+
+func (p *Page) setGsettings(channel, property, value string) {
+ if output, err := exec.Command("gsettings", "set", channel, property, value).CombinedOutput(); err != nil {
+ log.Printf("Failed to set config %s: %s %s", property, string(output), err)
+ }
+}
+
+func (p *Page) CanGoBack() bool { return true }
+
+func (p *Page) CanGoForward() bool { return true }
+
+func (p *Page) Title() string { return T("Customize Your Look") }
diff --git a/apps/welcome/window/pages/support/support.go b/apps/welcome/window/pages/support/support.go
new file mode 100644
index 000000000..bb3c2d469
--- /dev/null
+++ b/apps/welcome/window/pages/support/support.go
@@ -0,0 +1,70 @@
+package support
+
+import (
+ "github.com/diamondburned/gotk4/pkg/glib/v2"
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+ "log"
+ "os/exec"
+ "rlxos/apps/welcome/config"
+ . "rlxos/apps/welcome/locale"
+)
+
+type Page struct {
+ gtk.Box
+}
+
+func NewSupportPage() *Page {
+ p := &Page{Box: *gtk.NewBox(gtk.OrientationVertical, 0)}
+ p.setupUI()
+ return p
+}
+
+func (p *Page) setupUI() {
+ p.SetVAlign(gtk.AlignCenter)
+ p.SetHAlign(gtk.AlignCenter)
+
+ icon := gtk.NewImageFromIconName("help-symbolic")
+ icon.SetPixelSize(64)
+ icon.SetMarginBottom(12)
+ p.Append(icon)
+
+ heading := gtk.NewLabel(T("Help & Support"))
+ heading.AddCSSClass("heading")
+ p.Append(heading)
+
+ subheading := gtk.NewLabel(T("Need assistance? Explore our documentation\nor connect with the community for answers to your questions."))
+ subheading.SetMarginBottom(24)
+ subheading.SetJustify(gtk.JustifyCenter)
+ p.Append(subheading)
+
+ button := gtk.NewButtonWithLabel(T("Open Support"))
+ button.ConnectClicked(func() {
+ button.SetLabel(T("Starting..."))
+ button.SetSensitive(false)
+ cmd := exec.Command("exo-open", config.SupportUrl)
+ if err := cmd.Start(); err != nil {
+ log.Println("failed to load support url", err)
+ } else {
+ go func() {
+ if err := cmd.Wait(); err != nil {
+ log.Println("failed to load support url", err)
+ }
+
+ glib.IdleAdd(func() bool {
+ button.SetSensitive(true)
+ button.SetLabel(T("Open Support"))
+ return true
+ })
+ }()
+ }
+ })
+ button.SetHAlign(gtk.AlignCenter)
+ button.SetVAlign(gtk.AlignCenter)
+ p.Append(button)
+}
+
+func (p *Page) CanGoBack() bool { return true }
+
+func (p *Page) CanGoForward() bool { return true }
+
+func (p *Page) Title() string { return T("Help and Support") }
diff --git a/apps/welcome/window/pages/welcome/welcome.go b/apps/welcome/window/pages/welcome/welcome.go
new file mode 100644
index 000000000..937d8ec6c
--- /dev/null
+++ b/apps/welcome/window/pages/welcome/welcome.go
@@ -0,0 +1,43 @@
+package welcome
+
+import (
+ . "rlxos/apps/welcome/locale"
+
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+)
+
+type Page struct {
+ gtk.Box
+}
+
+func NewWelcomePage() *Page {
+ p := &Page{Box: *gtk.NewBox(gtk.OrientationVertical, 0)}
+
+ p.setupUI()
+
+ return p
+}
+
+func (p *Page) setupUI() {
+ icon := gtk.NewImageFromIconName("start-here-symbolic")
+ icon.SetPixelSize(128)
+ p.Append(icon)
+
+ p.SetVAlign(gtk.AlignCenter)
+ p.SetHAlign(gtk.AlignCenter)
+ p.SetMarginBottom(120)
+
+ title := gtk.NewLabel(T("Welcome to RLXOS"))
+ title.AddCSSClass("heading")
+ p.Append(title)
+
+ subtitle := gtk.NewLabel(T("Take the tour to learn your way around and discover essentials features"))
+ p.Append(subtitle)
+
+}
+
+func (p *Page) CanGoBack() bool { return true }
+
+func (p *Page) CanGoForward() bool { return true }
+
+func (p *Page) Title() string { return T("Welcome") }
diff --git a/apps/welcome/window/style/global.css b/apps/welcome/window/style/global.css
new file mode 100644
index 000000000..685dadd8e
--- /dev/null
+++ b/apps/welcome/window/style/global.css
@@ -0,0 +1,9 @@
+.heading {
+ font-weight: bold;
+ font-size: x-large;
+}
+
+.subheading {
+ font-size: large;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/apps/welcome/window/style/style.go b/apps/welcome/window/style/style.go
new file mode 100644
index 000000000..deae90fb7
--- /dev/null
+++ b/apps/welcome/window/style/style.go
@@ -0,0 +1,22 @@
+package style
+
+import (
+ _ "embed"
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+ "log"
+ "strings"
+)
+
+//go:embed global.css
+var global string
+
+func Provider() *gtk.CSSProvider {
+ provider := gtk.NewCSSProvider()
+ provider.ConnectParsingError(func(section *gtk.CSSSection, err error) {
+ loc := section.StartLocation()
+ lines := strings.Split(global, "\n")
+ log.Printf("CSS Error (%v) at line: %q", err, lines[loc.Lines()])
+ })
+ provider.LoadFromString(global)
+ return provider
+}
diff --git a/apps/welcome/window/window.go b/apps/welcome/window/window.go
new file mode 100644
index 000000000..d4ccdfdd8
--- /dev/null
+++ b/apps/welcome/window/window.go
@@ -0,0 +1,93 @@
+package window
+
+import (
+ "github.com/diamondburned/gotk4/pkg/gtk/v4"
+ "os"
+ "rlxos/apps/welcome/config"
+ . "rlxos/apps/welcome/locale"
+ "rlxos/apps/welcome/window/pages/apps"
+ "rlxos/apps/welcome/window/pages/finish"
+ "rlxos/apps/welcome/window/pages/looks"
+ "rlxos/apps/welcome/window/pages/support"
+ "rlxos/apps/welcome/window/pages/welcome"
+)
+
+type Window struct {
+ gtk.Window
+ stack *gtk.Stack
+ backBtn *gtk.Button
+ nextBtn *gtk.Button
+
+ pages []IPage
+ idx int
+}
+
+func NewWindow() *Window {
+ win := &Window{Window: *gtk.NewWindow()}
+
+ win.setupUI()
+ win.setupPages()
+ win.updatePage()
+
+ return win
+}
+
+func (win *Window) setupPages() {
+ win.pages = append(win.pages,
+ welcome.NewWelcomePage(),
+ looks.NewLooksPage(),
+ apps.NewAppsPage(),
+ support.NewSupportPage(),
+ finish.NewFinishPage(),
+ )
+ for _, page := range win.pages {
+ win.stack.AddChild(page)
+ }
+
+ win.SetChild(win.stack)
+}
+
+func (win *Window) setupUI() {
+ win.SetDefaultSize(800, 600)
+
+ headerBar := gtk.NewHeaderBar()
+ headerBar.SetShowTitleButtons(false)
+ win.SetTitlebar(headerBar)
+
+ win.backBtn = gtk.NewButtonWithLabel(T("Back"))
+ win.backBtn.ConnectClicked(func() {
+ win.idx--
+ win.updatePage()
+ })
+ headerBar.PackStart(win.backBtn)
+
+ win.nextBtn = gtk.NewButtonWithLabel(T("Next"))
+ win.nextBtn.AddCSSClass("suggested-action")
+ win.nextBtn.ConnectClicked(func() {
+ if win.idx == len(win.pages)-1 {
+ _ = os.WriteFile(config.DoneFile, []byte(""), 0644)
+ win.Application().Quit()
+ return
+ }
+ win.idx++
+ win.updatePage()
+ })
+ headerBar.PackEnd(win.nextBtn)
+
+ win.stack = gtk.NewStack()
+ win.stack.SetTransitionDuration(200)
+ win.stack.SetTransitionType(gtk.StackTransitionTypeSlideLeftRight)
+}
+
+func (win *Window) updatePage() {
+ win.stack.SetVisibleChild(win.pages[win.idx])
+ win.backBtn.SetSensitive(win.idx > 0 && win.pages[win.idx].CanGoBack())
+ win.nextBtn.SetSensitive(win.idx < len(win.pages) && win.pages[win.idx].CanGoForward())
+ if win.idx == len(win.pages)-1 {
+ win.nextBtn.SetLabel(T("Finish"))
+ } else {
+ win.nextBtn.SetLabel(T("Next"))
+ }
+
+ win.SetTitle(win.pages[win.idx].Title())
+}
diff --git a/elements/components/appcenter.yml b/elements/components/appcenter.yml
new file mode 100644
index 000000000..d3de8b194
--- /dev/null
+++ b/elements/components/appcenter.yml
@@ -0,0 +1,21 @@
+id: appcenter
+version: 8.0.0
+about: Browse and manage apps
+
+pre-script: |-
+ sed -i 's/.xml.gz/.xml/g' src/Core/FlatpakBackend.vala
+depends:
+ - components/appstream.yml
+ - components/flatpak.yml
+ - components/libhandy.yml
+ - components/granite.yml
+ - components/libadwaita.yml
+ - components/gtk4.yml
+ - components/libportal.yml
+
+build-depends:
+ - components/meson.yml
+ - components/vala.yml
+
+sources:
+ - appcenter-%{version}.tar.gz::https://github.com/elementary/appcenter/archive/refs/tags/%{version}.tar.gz
diff --git a/elements/components/appstream-glib.yml b/elements/components/appstream-glib.yml
index fcd91b693..5ef8bf9f3 100644
--- a/elements/components/appstream-glib.yml
+++ b/elements/components/appstream-glib.yml
@@ -7,7 +7,6 @@ configure: >
depends:
- components/gtk.yml
- - components/libsoup.yml
- components/libyaml.yml
- components/librsvg.yml
- components/curl.yml
diff --git a/elements/components/srclang.yml b/elements/components/capsule.yml
similarity index 95%
rename from elements/components/srclang.yml
rename to elements/components/capsule.yml
index ef88b3d31..ddd0221b1 100644
--- a/elements/components/srclang.yml
+++ b/elements/components/capsule.yml
@@ -1,4 +1,4 @@
-id: srclang
+id: capsule
version: 2.0.1
about: An Easy to learn programming Language
merge: [ elements/include/rlxos.inc ]
diff --git a/elements/components/ccache.yml b/elements/components/ccache.yml
new file mode 100644
index 000000000..8432da751
--- /dev/null
+++ b/elements/components/ccache.yml
@@ -0,0 +1,30 @@
+id: ccache
+version: 4.10.2
+about: Compiler cache that speeds up recompilation by caching previous compilations
+
+configure: >-
+ -DCMAKE_BUILD_TYPE=None
+ -Wno-dev
+
+post-script: |-
+ mkdir -p %{install-root}%{libdir}/ccache/bin
+ for p in gcc g++ c++ ; do
+ ln -s %{bindir}/ccache %{install-root}%{libdir}/ccache/bin/$p
+ ln -s %{bindir}/ccache %{install-root}%{libdir}/ccache/bin/%{triplet}-$p
+ done
+
+ for p in cc clang clang++ ; do
+ ln -s %{bindir}/ccache %{install-root}%{libdir}/ccache/bin/$p
+ done
+
+depends:
+ - components/fmt.yml
+ - components/glibc.yml
+ - components/zstd.yml
+
+build-depends:
+ - components/cmake.yml
+ - components/perl.yml
+
+sources:
+ - https://github.com/ccache/ccache/releases/download/v%{version}/ccache-%{version}.tar.xz
diff --git a/elements/components/colord.yml b/elements/components/colord.yml
index 898cff51c..ddbdbc2e8 100644
--- a/elements/components/colord.yml
+++ b/elements/components/colord.yml
@@ -4,6 +4,9 @@ about: |
A system service that makes it easy to manage, install, and generate color
profiles
+pre-script: |-
+ patch -Np1 -i colord-1.4.7-upstream_fixes-1.patch
+
configure: >
--buildtype=release
-D daemon_user=colord
@@ -12,7 +15,7 @@ configure: >
-D libcolordcompat=true
-D argyllcms_sensor=false
-D bash_completion=false
- -D docs=false
+ -D docs=true
-D man=false
post-script: |-
@@ -30,8 +33,9 @@ depends:
- components/libgusb.yml
- components/systemd.yml
build-depends:
+ - components/gtk-doc.yml
- components/gobject-introspection.yml
- components/vala.yml
sources:
- https://www.freedesktop.org/software/colord/releases/colord-%{version}.tar.xz
-# TODO: enable bash_completion, docs and manuals
+ - patches/colord/colord-1.4.7-upstream_fixes-1.patch
\ No newline at end of file
diff --git a/elements/components/compiz.yml b/elements/components/compiz.yml
index adcb20bef..0713b34ba 100644
--- a/elements/components/compiz.yml
+++ b/elements/components/compiz.yml
@@ -2,12 +2,19 @@ id: compiz
version: 0.9.14.2
about: Composite manager for Aiglx and Xgl, with plugins and CCSM
+pre-script: |-
+ for p in /patches/compiz/*.patch ; do
+ echo "Applying $(basename $p)"
+ patch -Np1 -F100 -i $p
+ done
+
configure: >-
-DCMAKE_CXX_STANDARD=17
-DCMAKE_BUILD_TYPE="Release"
-DCOMPIZ_BUILD_WITH_RPATH=OFF
-DCOMPIZ_PACKAGING_ENABLED=ON
-DBUILD_GTK=ON
+ -DBUILD_METACITY=ON
-DCOMPIZ_DEFAULT_PLUGINS="composite,opengl,decor,resize,place,move,compiztoolbox,staticswitcher,regex,animation,wall,ccp"
-DCOMPIZ_BUILD_TESTING=OFF
-DCOMPIZ_WERROR=OFF
@@ -30,6 +37,7 @@ depends:
- components/gtkmm.yml
- components/startup-notification.yml
- components/glu.yml
+ - components/metacity.yml
build-depends:
- components/boost.yml
diff --git a/elements/components/cyrus-sasl.yml b/elements/components/cyrus-sasl.yml
index c3d92bb3d..b29b6aed5 100644
--- a/elements/components/cyrus-sasl.yml
+++ b/elements/components/cyrus-sasl.yml
@@ -19,7 +19,7 @@ post-script: |
install -v -dm700 %{install-root}/%{localstatedir}/lib/sasl
depends:
- - components/mariadb.yml
+ - components/mariadb-runtime.yml
- components/pam.yml
- components/krb5.yml
diff --git a/elements/components/firefox.yml b/elements/components/firefox.yml
index 68dee53fd..b517c3aea 100644
--- a/elements/components/firefox.yml
+++ b/elements/components/firefox.yml
@@ -45,4 +45,4 @@ depends:
- components/alsa-lib.yml
sources:
- - http://ftp.mozilla.org/pub/firefox/releases/%{version}/linux-x86_64/en-US/firefox-%{version}.tar.bz2
+ - http://ftp.mozilla.org/pub/firefox/releases/%{version}/linux-x86_64/en-US/firefox-%{version}.tar.bz2
\ No newline at end of file
diff --git a/elements/components/flatpak.yml b/elements/components/flatpak.yml
index c180924af..bd058fb63 100644
--- a/elements/components/flatpak.yml
+++ b/elements/components/flatpak.yml
@@ -3,16 +3,11 @@ version: 1.15.9
about: Linux application sandboxing and distribution framework
post-script: |
- install -v -Dm0755 /dev/stdin %{install-root}%{sysconfdir}/profile.d/flatpak.sh << EOF
- if [ -n "$XDG_DATA_HOME" ] && [ -d "$XDG_DATA_HOME/flatpak/exports/bin" ]; then
+ install -v -Dm0755 /dev/stdin %{install-root}%{sysconfdir}/profile.d/flatpak.sh << "EOF"
append_path "$XDG_DATA_HOME/flatpak/exports/bin"
- elif [ -n "$HOME" ] && [ -d "$HOME/.local/share/flatpak/exports/bin" ]; then
- append_path "$HOME/.local/share/flatpak/exports/bin"
- fi
-
- if [ -d /var/lib/flatpak/exports/bin ]; then
- append_path /var/lib/flatpak/exports/bin
- fi
+ append_path "$HOME/.local/share/flatpak/exports/bin"
+ append_path "/var/lib/flatpak/exports/bin"
+ XDG_DATA_DIRS="$XDG_DATA_DIRS:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share"
EOF
install -v -D -t %{install-root}%{sysconfdir}/flatpak/remotes.d flathub.flatpakrepo
@@ -32,7 +27,6 @@ depends:
- components/glib.yml
- components/json-glib.yml
- components/libarchive.yml
- - components/libsoup.yml
- components/ostree.yml
- components/polkit.yml
- components/python.yml
diff --git a/elements/components/gegl.yml b/elements/components/gegl.yml
new file mode 100644
index 000000000..1ad7d1a31
--- /dev/null
+++ b/elements/components/gegl.yml
@@ -0,0 +1,15 @@
+id: gegl
+version: 0.4.48
+about: GEneric Graphics Library
+
+configure: >-
+ -D libav=disabled
+
+depends:
+ - components/babl.yml
+ - components/json-glib.yml
+ - components/pango.yml
+ - components/py/py-gobject.yml
+
+sources:
+ - https://download.gimp.org/pub/gegl/%{version:2}/gegl-%{version}.tar.xz
diff --git a/elements/components/gimp.yml b/elements/components/gimp.yml
new file mode 100644
index 000000000..79a278f43
--- /dev/null
+++ b/elements/components/gimp.yml
@@ -0,0 +1,37 @@
+id: gimp
+version: 2.10.38
+about: GNU Image Manipulation Program which is useful for photo retouching, image composition and image authoring
+
+depends:
+ - components/appstream-glib.yml
+ - components/gegl.yml
+ - components/gexiv2.yml
+ - components/glib-networking.yml
+ - components/gtk.yml
+ - components/harfbuzz.yml
+ - components/libmypaint.yml
+ - components/librsvg.yml
+ - components/libtiff.yml
+ - components/libxml2.yml
+ - components/lcms.yml
+ - components/mypaint-brushes.yml
+ - components/poppler.yml
+ - components/poppler-data.yml
+ - components/graphviz.yml
+ - components/iso-codes.yml
+ - components/libgudev.yml
+ - components/py/py-gobject.yml
+ - components/x11/libx11.yml
+ - components/x11/libxmu.yml
+ - components/xdg-utils.yml
+ # - components/libjxl.yml
+ - components/libmng.yml
+ - components/libunwind.yml
+ - components/libwebp.yml
+
+build-depends:
+ - components/ghostscript.yml
+ - components/gvfs.yml
+
+sources:
+ - https://anduin.linuxfromscratch.org/BLFS/gimp/gimp3-20240711.tar.xz
diff --git a/elements/components/glibc-dbg.yml b/elements/components/glibc-dbg.yml
new file mode 100644
index 000000000..cf795b692
--- /dev/null
+++ b/elements/components/glibc-dbg.yml
@@ -0,0 +1,24 @@
+id: glibc-dbg
+version: 0.0.1
+about: GLibc debug files
+
+build-depends:
+ - components/bash.yml
+
+include:
+ - components/glibc.yml
+
+include-root: /glibc
+include-parts:
+ - dbg
+
+keep-files:
+ - ld-(.*)\.dbg
+
+strip: false
+
+script: |-
+ mkdir -p %{install-root}%{libdir}
+ cp %{include-root}%{libdir}/ld-linux-x86-64.so.2.dbg %{install-root}%{libdir}/
+
+# TODO: merge this with glibc
\ No newline at end of file
diff --git a/elements/components/gnome/gnome-software.yml b/elements/components/gnome/gnome-software.yml
new file mode 100644
index 000000000..57cb9a1c2
--- /dev/null
+++ b/elements/components/gnome/gnome-software.yml
@@ -0,0 +1,35 @@
+id: gnome-software
+version: 46.2
+about: GNOME Software Tools
+
+configure: >-
+ -D packagekit=false
+ -D tests=false
+ -D malcontent=false
+ -D fwupd=false
+ -D webapps=false
+ -D hardcoded_foss_webapps=false
+ -D hardcoded_proprietary_webapps=false
+
+depends:
+ - components/appstream.yml
+ - components/dconf.yml
+ - components/gdk-pixbuf.yml
+ - components/gsettings-desktop-schemas.yml
+ - components/gtk4.yml
+ - components/json-glib.yml
+ - components/hicolor-icon-theme.yml
+ - components/libadwaita.yml
+ - components/libgudev.yml
+ - components/libsoup3.yml
+ - components/libxmlb.yml
+ - components/pango.yml
+ - components/polkit.yml
+ - components/flatpak.yml
+ # - components/fwupd.yml
+
+build-depends:
+ - components/docbook-xsl.yml
+
+sources:
+ - https://download.gnome.org/sources/gnome-software/%{version:1}/gnome-software-%{version}.tar.xz
diff --git a/elements/components/go.yml b/elements/components/go.yml
index 5bc25e820..f92b6164a 100644
--- a/elements/components/go.yml
+++ b/elements/components/go.yml
@@ -1,5 +1,5 @@
id: go
-version: 1.21.1
+version: 1.23.0
about: The Go Programming Language
sources:
diff --git a/elements/components/go/gotk4.yml b/elements/components/go/gotk4.yml
new file mode 100644
index 000000000..9ac50bd83
--- /dev/null
+++ b/elements/components/go/gotk4.yml
@@ -0,0 +1,8 @@
+id: gotk4
+version: v0.3.1
+about: Autogenerated GTK4 bindings for Go
+
+gourl: github.com/diamondburned/gotk4/pkg/gtk/v4
+
+
+merge: [ elements/include/go-pkg.inc ]
\ No newline at end of file
diff --git a/elements/components/granite.yml b/elements/components/granite.yml
new file mode 100644
index 000000000..b712e8989
--- /dev/null
+++ b/elements/components/granite.yml
@@ -0,0 +1,21 @@
+id: granite
+version: 7.5.0
+about: Library that extends Gtk+
+
+configure: >-
+ -Db_pie=false
+
+depends:
+ - components/cairo.yml
+ - components/gdk-pixbuf.yml
+ - components/gtk4.yml
+ - components/libgee.yml
+ - components/pango.yml
+
+build-depends:
+ - components/sassc.yml
+ - components/gobject-introspection.yml
+ - components/vala.yml
+
+sources:
+ - granite-%{version}.tar.gz::https://github.com/elementary/granite/archive/refs/tags/%{version}.tar.gz
diff --git a/elements/components/gufw.yml b/elements/components/gufw.yml
index 77d8f415c..a30cd537d 100644
--- a/elements/components/gufw.yml
+++ b/elements/components/gufw.yml
@@ -9,9 +9,6 @@ pre-script: |-
sed -i 's/4.0/4.1/g' gufw/gufw/view/gufw.py
depends:
- - components/intltool.yml
- - components/py/py-setuptools.yml
- - components/py/py-distutils-extra.yml
- components/desktop-file-utils.yml
- components/gtk.yml
- components/polkit.yml
@@ -21,5 +18,10 @@ depends:
- components/enchant.yml
- components/webkitgtk.yml
+build-depends:
+ - components/intltool.yml
+ - components/py/py-setuptools.yml
+ - components/py/py-distutils-extra.yml
+
sources:
- https://github.com/costales/gufw/archive/%{version}/gufw-%{version}.tar.gz
diff --git a/elements/components/initial-setup.yml b/elements/components/initial-setup.yml
index 982fb5280..3aaa9bda2 100644
--- a/elements/components/initial-setup.yml
+++ b/elements/components/initial-setup.yml
@@ -1,5 +1,5 @@
id: initial-setup
-version: 2.0.3
+version: 2.0.12
about: System Initial Setup
merge: [ ostree-branch.yml, elements/include/rlxos.inc ]
@@ -139,7 +139,7 @@ post-script: |-
EOF
- install -vDm 0644 /dev/stdin %{install-root}/%{datadir}/factory/%{localstatedir}/lib/initial-setup/.config/autostart/welcome-tour.desktop << "EOF"
+ install -vDm 0644 /dev/stdin %{install-root}/%{datadir}/factory/%{localstatedir}/lib/initial-setup/.config/autostart/welcome.desktop << "EOF"
[Desktop Entry]
Hidden=true
EOF
@@ -150,7 +150,7 @@ post-script: |-
x-scheme-handler/https=firefox.desktop
EOF
- touch %{install-root}/%{datadir}/factory/%{localstatedir}/lib/initial-setup/.config/.welcome-tour-done
+ touch %{install-root}/%{datadir}/factory/%{localstatedir}/lib/initial-setup/.welcome-done
install -vDm 0644 /dev/stdin %{install-root}/%{datadir}/factory/%{localstatedir}/lib/initial-setup/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml << "EOF"
@@ -169,6 +169,16 @@ post-script: |-
+
+
+
+
+
+
+
+
+
+
EOF
diff --git a/elements/components/intel-ucode.yml b/elements/components/intel-ucode.yml
new file mode 100644
index 000000000..9cffe44b2
--- /dev/null
+++ b/elements/components/intel-ucode.yml
@@ -0,0 +1,17 @@
+id: intel-ucode
+version: 20240813
+about: Microcode update files for Intel CPUs
+
+script: |-
+ rm -f intel-ucode{,-with-caveats}/list
+ mkdir -p kernel/x86/microcode
+
+ iucode_tool --write-earlyfw=intel-ucode.img intel-ucode{,-with-caveats}/
+
+ install -vDm 644 intel-ucode/* -t %{install-root}%{libdir}/firmware/intel-ucode/
+
+build-depends:
+ - components/iucode-tool.yml
+
+sources:
+ - https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/archive/refs/tags/microcode-%{version}.tar.gz
\ No newline at end of file
diff --git a/elements/components/iucode-tool.yml b/elements/components/iucode-tool.yml
new file mode 100644
index 000000000..ea20ba58f
--- /dev/null
+++ b/elements/components/iucode-tool.yml
@@ -0,0 +1,9 @@
+id: iucode-tool
+version: 2.3.1
+about: Tool to manipulate Intel® IA-32/X86-64 microcode bundles
+
+depends:
+ - components/glibc.yml
+
+sources:
+ - https://gitlab.com/iucode-tool/releases/raw/master/iucode-tool_%{version}.tar.xz
diff --git a/elements/components/libadwaita.yml b/elements/components/libadwaita.yml
index 88cb1108b..55ea3dc97 100644
--- a/elements/components/libadwaita.yml
+++ b/elements/components/libadwaita.yml
@@ -1,7 +1,14 @@
id: libadwaita
-version: 1.5.2
+version: 1.5.3
+release: 3
about: Building blocks for modern adaptive GNOME applications
+pre-script: |-
+ < without-adwaita-theme.patch patch src/adw-style-manager.c
+
+configure: >-
+ --buildtype=release
+
depends:
- components/gtk4.yml
- components/appstream.yml
@@ -12,7 +19,7 @@ build-depends:
- components/meson.yml
- components/vala.yml
- components/sassc.yml
- - components/gtk-doc.yml
sources:
- https://gitlab.gnome.org/GNOME/libadwaita/-/archive/%{version}/libadwaita-%{version}.tar.gz
+ - patches/libadwaita/without-adwaita-theme.patch
diff --git a/elements/components/libavif.yml b/elements/components/libavif.yml
index c685350a5..192194c52 100644
--- a/elements/components/libavif.yml
+++ b/elements/components/libavif.yml
@@ -1,10 +1,11 @@
id: libavif
-version: 1.1.0
+version: 1.1.1
about: A library used for encoding and decoding AVIF files
configure: >-
-DAVIF_CODEC_AOM=ON
-DAVIF_BUILD_GDK_PIXBUF=ON
+ -DAVIF_LIBYUV=OFF
depends:
- components/libaom.yml
diff --git a/elements/components/libmypaint.yml b/elements/components/libmypaint.yml
new file mode 100644
index 000000000..054382bfb
--- /dev/null
+++ b/elements/components/libmypaint.yml
@@ -0,0 +1,14 @@
+id: libmypaint
+version: 1.6.1
+about: a library for making brushstrokes which is used by MyPaint and other projects
+
+depends:
+ - components/json-c.yml
+ - components/glib.yml
+
+build-depends:
+ - components/gobject-introspection.yml
+ - components/intltool.yml
+
+sources:
+ - https://github.com/mypaint/libmypaint/releases/download/v%{version}/libmypaint-%{version}.tar.xz
diff --git a/elements/components/libosinfo.yml b/elements/components/libosinfo.yml
index f4651bd1f..e8206da8d 100644
--- a/elements/components/libosinfo.yml
+++ b/elements/components/libosinfo.yml
@@ -1,5 +1,5 @@
id: libosinfo
-version: 1.10.0
+version: 1.11.0
about:
GObject based library API for managing information about operating systems,
hypervisors and the (virtual) hardware devices they can support
@@ -11,7 +11,7 @@ configure: >-
depends:
- components/glib.yml
- components/hwdata.yml
- - components/libsoup.yml
+ - components/libsoup3.yml
- components/libxslt.yml
- components/osinfo-db.yml
build-depends:
diff --git a/elements/components/libreoffice.yml b/elements/components/libreoffice.yml
index a89bec3cd..5c4fdc9ed 100644
--- a/elements/components/libreoffice.yml
+++ b/elements/components/libreoffice.yml
@@ -2,7 +2,12 @@ id: libreoffice
version: 24.2.5.2
about: LibreOffice is a full-featured office suite
+environ:
+ - TAR_OPTIONS=--no-same-owner
+
pre-script: |-
+ patch -Np1 -i libreoffice-24.2.5.2-boost_fixes-2.patch
+
sed -i '/icuuc \\/a zlib\\' writerperfect/Library_wpftdraw.mk
sed -e "/gzip -f/d" \
@@ -11,8 +16,17 @@ pre-script: |-
sed -e "/distro-install-file-lists/d" -i Makefile.in
+ mkdir -p external/tarballs
+ for i in libreoffice-dictionaries-%{version} libreoffice-help-%{version} libreoffice-translations-%{version} ; do
+ mv $i external/tarballs/$i.tar.xz
+ done
+
+ ln -sv src/libreoffice-help-%{version}/helpcontent2/
+ ln -sv src/libreoffice-dictionaries-%{version}/dictionaries/
+ ln -sv src/libreoffice-translations-%{version}/translations/
+
./autogen.sh
-
+
./configure --prefix=%{prefix} \
--sysconfdir=%{sysconfdir} \
--with-vendor=RLXOS \
@@ -22,6 +36,11 @@ pre-script: |-
--without-system-dicts \
--disable-dconf \
--disable-odk \
+ --disable-kf5 \
+ --disable-gtk3-kde5 \
+ --disable-qt5 \
+ --disable-qt6 \
+ --disable-gtk4 \
--enable-release-build=yes \
--enable-python=system \
--with-jdk-home=%{libdir}/openjdk \
@@ -40,14 +59,19 @@ pre-script: |-
--with-system-libatomic_ops \
--with-system-libpng \
--with-system-nss \
+ --with-system-odbc \
--with-system-openldap \
--with-system-openssl \
--with-system-poppler \
+ --with-system-postgresql \
+ --with-system-redland \
--with-system-libtiff \
--with-system-libwebp \
- --with-system-zlib
-
- make build
+ --with-system-zlib \
+ CFLAGS="$CFLAGS -Wno-implicit-function-declaration -Wno-int-conversion -Wno-error "
+
+ sed -i 's#bootstrap: check-if-root compilerplugins#bootstrap: compilerplugins#g' Makefile
+ make
make distro-pack-install DESTDIR=%{install-root}
@@ -82,6 +106,9 @@ depends:
- components/glm.yml
- components/gstreamer.yml
- components/libwebp.yml
+ - components/postgresql.yml
+ - components/redland.yml
+ - components/odbc.yml
build-depends:
- components/apache-ant.yml
@@ -89,3 +116,7 @@ build-depends:
sources:
- https://download.documentfoundation.org/libreoffice/src/%{version:3}/libreoffice-%{version}.tar.xz
+ - libreoffice-dictionaries-%{version}::https://download.documentfoundation.org/libreoffice/src/%{version:3}/libreoffice-dictionaries-%{version}.tar.xz
+ - libreoffice-help-%{version}::https://download.documentfoundation.org/libreoffice/src/%{version:3}/libreoffice-help-%{version}.tar.xz
+ - libreoffice-translations-%{version}::https://download.documentfoundation.org/libreoffice/src/%{version:3}/libreoffice-translations-%{version}.tar.xz
+ - https://www.linuxfromscratch.org/patches/blfs/svn/libreoffice-%{version}-boost_fixes-2.patch
diff --git a/elements/components/libvirt.yml b/elements/components/libvirt.yml
index 30456364c..6e556d083 100644
--- a/elements/components/libvirt.yml
+++ b/elements/components/libvirt.yml
@@ -1,11 +1,12 @@
id: libvirt
-version: 9.7.0
+version: 10.6.0
about: API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)
pre-script: |-
sed -i 's|/sysconfig/|/conf.d/|g' \
src/remote/libvirtd.service.in \
- tools/{libvirt-guests.service,libvirt-guests.sh,virt-pki-validate}.in \
+ tools/{libvirt-guests.service,libvirt-guests.sh}.in \
+ docs/manpages/libvirt-guests.rst \
src/locking/virtlockd.service.in \
src/logging/virtlogd.service.in
sed -i 's|/usr/libexec/qemu-bridge-helper|/usr/lib/qemu/qemu-bridge-helper|g' \
@@ -34,10 +35,29 @@ configure: >-
-Dsecdriver_selinux=disabled
-Dstorage_vstorage=disabled
-Ddtrace=disabled
+ -Dlibssh=disabled
+ -Dlibssh2=enabled
-Dnumad=disabled
-Dstorage_zfs=enabled
-Dstorage_rbd=disabled
+post-script: |-
+ install -vDm 0644 /dev/stdin %{install-root}%{libdir}/sysusers.d/libvirt.conf << "EOF"
+ g libvirt - -
+ u libvirt %{localstatedir}/libvirt "Libvirt QEMU user"
+ m libvirt libvirt
+ EOF
+
+ install -vDm 0644 /dev/stdin %{install-root}%{libdir}/tmpfiles.d/libvirt.conf << "EOF"
+ z %{localstatedir}/lib/libvirt/qemu 0751
+ EOF
+
+ chmod 0600 %{install-root}%{sysconfdir}/libvirt/nwfilter/*.xml \
+ %{install-root}%{sysconfdir}/libvirt/qemu/networks/default.xml
+
+ chmod 700 %{install-root}%{sysconfdir}/libvirt/secrets
+ chmod 711 %{install-root}/var/lib/libvirt/swtpm
+
depends:
- components/fuse.yml
- components/gnutls.yml
@@ -46,6 +66,7 @@ depends:
- components/libxml2.yml
- components/numactl.yml
- components/parted.yml
+ - components/libnl.yml
- components/polkit.yml
- components/yajl.yml
- components/dmidecode.yml
@@ -53,6 +74,7 @@ depends:
- components/gettext.yml
- components/lvm2.yml
- components/rpcsvc-proto.yml
+ - components/qemu.yml
build-depends:
- components/iproute2.yml
diff --git a/elements/components/lightdm.yml b/elements/components/lightdm.yml
index 5c554053a..0c1742327 100644
--- a/elements/components/lightdm.yml
+++ b/elements/components/lightdm.yml
@@ -95,11 +95,14 @@ post-script: |-
install -vDm 0644 /dev/stdin %{install-root}/%{sysconfdir}/lightdm/lightdm-gtk-greeter.conf << "EOF"
[greeter]
background=%{datadir}/backgrounds/default-blur.jpg
- theme-name=Orchis-Dark
- icon-theme-name=Tela
+ theme-name=Orchis-Light
+ icon-theme-name=Tela-light
font-name=IBM Plex Sans Regular 11
- panel-position=bottom
+ panel-position=top
+ user-background=false
indicators=~host;~spacer;~session;~a11y;~language;~clock;~power;
+ transition-duration=600
+ transition-type=ease-in-out
EOF
configure: >-
diff --git a/elements/components/mariadb-runtime.yml b/elements/components/mariadb-runtime.yml
new file mode 100644
index 000000000..5dbad84ac
--- /dev/null
+++ b/elements/components/mariadb-runtime.yml
@@ -0,0 +1,24 @@
+id: mariadb-runtime
+version: 10.11.8
+about: mariadb runtime
+
+build-depends:
+ - components/bash.yml
+
+include:
+ - components/mariadb.yml
+include-root: /mariadb
+
+script: |-
+ mkdir -p %{install-root}%{bindir}
+ mkdir -p %{install-root}%{libdir}/mysql/plugin
+
+ for bin in mariadb-config mariadb_config mysql_config ; do
+ cp %{include-root}%{bindir}/$bin %{install-root}%{bindir}/
+ done
+
+ for lib in mariadb mariadbd mysqlclient mysqlclient_r mysqld ; do
+ cp %{include-root}%{libdir}/lib${lib}.so* %{install-root}%{libdir}/
+ done
+
+ cp -r %{include-root}%{libdir}/mysql/plugin %{install-root}%{libdir}/mysql
\ No newline at end of file
diff --git a/elements/components/meta-xfce4.yml b/elements/components/meta-xfce4.yml
index 08b2eaca6..a215efcd4 100644
--- a/elements/components/meta-xfce4.yml
+++ b/elements/components/meta-xfce4.yml
@@ -51,8 +51,6 @@ depends:
- components/xfce4/thunar-volman.yml
- - components/themes/qogir-gtk-theme.yml
- - components/themes/qogir-icon-theme.yml
- components/themes/grey-bird-gtk-theme.yml
- components/themes/elementary-xfce-icon.yml
- components/themes/orchis-gtk-theme.yml
diff --git a/elements/components/metacity.yml b/elements/components/metacity.yml
new file mode 100644
index 000000000..1e2451609
--- /dev/null
+++ b/elements/components/metacity.yml
@@ -0,0 +1,42 @@
+id: metacity
+version: 3.52.0
+about: Window manager of GNOME Flashback
+
+build-type: autotools
+
+configure: >-
+ --disable-debug
+ --enable-compiler-warnings
+ --disable-vulkan
+
+depends:
+ - components/at-spi2-core.yml
+ - components/cairo.yml
+ - components/gdk-pixbuf.yml
+ - components/gsettings-desktop-schemas.yml
+ - components/gtk.yml
+ - components/libcanberra.yml
+ - components/libgtop.yml
+ - components/x11/libice.yml
+ - components/x11/libsm.yml
+ - components/x11/libx11.yml
+ - components/x11/libxcomposite.yml
+ - components/x11/libxcursor.yml
+ - components/x11/libxdamage.yml
+ - components/x11/libxext.yml
+ - components/x11/libxfixes.yml
+ - components/x11/libxinerama.yml
+ - components/x11/libxrandr.yml
+ - components/x11/libxrender.yml
+ - components/x11/libxres.yml
+ - components/x11/libxpresent.yml
+ - components/pango.yml
+ - components/startup-notification.yml
+ - components/zenity.yml
+ - components/libgtop.yml
+
+build-depends:
+ - components/autoconf-archive.yml
+
+sources:
+ - https://gitlab.gnome.org/GNOME/metacity/-/archive/%{version}/metacity-%{version}.tar.gz
diff --git a/elements/components/mypaint-brushes.yml b/elements/components/mypaint-brushes.yml
new file mode 100644
index 000000000..5c08b1d21
--- /dev/null
+++ b/elements/components/mypaint-brushes.yml
@@ -0,0 +1,9 @@
+id: mypaint-brushes
+version: 1.3.1
+about: Paint brushes
+
+depends:
+ - components/libmypaint.yml
+
+sources:
+ - https://github.com/mypaint/mypaint-brushes/releases/download/v%{version}/mypaint-brushes-%{version}.tar.xz
diff --git a/elements/components/odbc.yml b/elements/components/odbc.yml
new file mode 100644
index 000000000..8efb15fd3
--- /dev/null
+++ b/elements/components/odbc.yml
@@ -0,0 +1,15 @@
+id: odbc
+version: 2.3.12
+about: ODBC is an open specification for providing application developers with a predictable API with which to access data sources
+
+configure: >-
+ --sysconfdir=%{sysconfdir}/unixODBC
+
+post-script: |-
+ find doc -name "Makefile*" -delete
+
+sources:
+ - https://github.com/lurcher/unixODBC/releases/download/%{version}/unixODBC-%{version}.tar.gz
+
+depends:
+ - components/glibc.yml
diff --git a/elements/components/ohmyzsh.yml b/elements/components/ohmyzsh.yml
index 51be0310d..7f0d0f3bf 100644
--- a/elements/components/ohmyzsh.yml
+++ b/elements/components/ohmyzsh.yml
@@ -2,8 +2,8 @@ id: ohmyzsh
version: master
variables:
- commit: c8e600f39779c6d2ef75b40304b5391a541c41df
- default-theme: lukerandall
+ commit: b8c69d265257fae88fe504ea43cbcf2728bc1308
+ default-theme: jonathan
depends:
- components/zsh.yml
diff --git a/elements/components/osinfo-db-tools.yml b/elements/components/osinfo-db-tools.yml
index b6832a70e..7b599deba 100644
--- a/elements/components/osinfo-db-tools.yml
+++ b/elements/components/osinfo-db-tools.yml
@@ -8,7 +8,7 @@ pre-script: |-
depends:
- components/json-glib.yml
- components/libarchive.yml
- - components/libsoup.yml
+ - components/libsoup3.yml
- components/libxslt.yml
build-depends:
diff --git a/elements/components/ostree.yml b/elements/components/ostree.yml
index 6fb271c41..61f67c904 100644
--- a/elements/components/ostree.yml
+++ b/elements/components/ostree.yml
@@ -1,5 +1,5 @@
id: ostree
-version: 2024.4
+version: 2024.7
about: Operating system and container binary deployment and upgrade
variables:
@@ -18,6 +18,7 @@ configure: >-
--without-avahi
--enable-man=yes
--with-dracut
+ --with-soup3
--with-ed25519-libsodium
--disable-static
@@ -33,7 +34,7 @@ depends:
- components/openssl.yml
- components/util-linux.yml
- components/gpgme.yml
- - components/libsoup.yml
+ - components/libsoup3.yml
- components/xz.yml
- components/zlib.yml
build-depends:
diff --git a/elements/components/picom.yml b/elements/components/picom.yml
index 9c5ebc237..26fd7b421 100644
--- a/elements/components/picom.yml
+++ b/elements/components/picom.yml
@@ -1,10 +1,89 @@
id: picom
-version: 10.2
+version: 12-rc3
about: X compositor that may fix tearing issue
-release: 2
sources:
- picom-%{version}.tar.gz::https://github.com/yshui/picom/archive/refs/tags/v%{version}.tar.gz
+post-script: |-
+ install -vDm 0644 /dev/stdin %{install-root}%{sysconfdir}/xdg/picom.conf << "EOF"
+ shadow = true;
+ shadow-radius = 7;
+ shadow-offset-x = -7;
+ shadow-offset-y = -7;
+
+ fading = true;
+ fade-in-step = 0.03;
+ fade-out-step = 0.03;
+
+ frame-opacity = 0.7;
+
+ corner-radius = 0;
+
+ blur-kern = "3x3box";
+
+ backend = "xrender";
+
+ vsync = true;
+
+ detect-rounded-corners = true;
+ detect-client-opacity = true;
+ detect-transient = true;
+ use-damage = true;
+
+ rules: ({
+ match = "window_type = 'tooltip'";
+ fade = false;
+ shadow = true;
+ opacity = 0.75;
+ full-shadow = false;
+ }, {
+ match = "window_type = 'dropdown_menu' || "
+ "window_type = 'popup_menu' || "
+ "window_type = 'utility'";
+ shadow = false;
+ }, {
+ match = "window_type = 'dock' || "
+ "window_type = 'desktop' || "
+ "_GTK_FRAME_EXTENTS@";
+ blur-background = false;
+ }, {
+ match = "window_type != 'dock'";
+ # shader = "my_shader.frag";
+ }, {
+ match = "window_type = 'dock' || "
+ "window_type = 'desktop'";
+ corner-radius = 0;
+ }, {
+ match = "name = 'Notification' || "
+ "class_g = 'Conky' || "
+ "class_g ?= 'Notify-osd' || "
+ "class_g = 'Cairo-clock' || "
+ "_GTK_FRAME_EXTENTS@";
+ shadow = false;
+ }, {
+ match = "name = 'Whisker Menu'";
+ shadow = false;
+ animations = ({
+ triggers = [ "open", "show" ];
+ preset = "slide-in";
+ direction = "down";
+ }, {
+ triggers = [ "close", "hide" ];
+ preset = "slide-out";
+ direction = "down";
+ });
+ })
+
+ animations = ({
+ triggers = [ "open", "show" ];
+ preset = "appear";
+ }, {
+ triggers = [ "close", "hide" ];
+ preset = "disappear";
+ })
+
+ EOF
+
depends:
- components/hicolor-icon-theme.yml
- components/libconfig.yml
@@ -13,6 +92,7 @@ depends:
- components/pcre.yml
- components/pixman.yml
- components/mesa.yml
+ - components/libepoxy.yml
- components/libglvnd.yml
- components/x11/xcb-util-image.yml
- components/x11/xcb-util-renderutil.yml
diff --git a/elements/components/postgresql-runtime.yml b/elements/components/postgresql-runtime.yml
new file mode 100644
index 000000000..b4c7ace7e
--- /dev/null
+++ b/elements/components/postgresql-runtime.yml
@@ -0,0 +1,24 @@
+id: postgresql-runtime
+version: 16.4
+about: postgresql runtime
+
+build-depends:
+ - components/bash.yml
+
+include:
+ - components/postgresql.yml
+include-root: /postgresql
+
+script: |-
+ mkdir -p %{install-root}%{bindir}
+ mkdir -p %{install-root}%{libdir}
+
+ for bin in clusterdb createdb createuser dropdb dropuser ecpg \
+ pg_config pg_dump pg_dumpall pg_isready pg_restore \
+ psql reindexdb vacuumdb ; do
+ cp %{include-root}%{bindir}/$bin %{install-root}%{bindir}/
+ done
+
+ for lib in ecpg ecpg_compat pgtypes pq ; do
+ cp %{include-root}%{libdir}/lib${lib}.so* %{install-root}%{libdir}/
+ done
\ No newline at end of file
diff --git a/elements/components/postgresql.yml b/elements/components/postgresql.yml
index 20cbbf469..4399ecc72 100644
--- a/elements/components/postgresql.yml
+++ b/elements/components/postgresql.yml
@@ -1,5 +1,5 @@
id: postgresql
-version: 16.3
+version: 16.4
about: PostgreSQL is an advanced object-relational database management system (ORDBMS), derived from the Berkeley Postgres database management system
pre-script: |-
@@ -13,7 +13,6 @@ configure: >-
--with-ldap
--with-libxml
--with-libxslt
- --with-llvm
--with-lz4
--with-openssl
--with-pam
@@ -22,7 +21,6 @@ configure: >-
--with-readline
--with-system-tzdata=%{datadir}/zoneinfo
--with-systemd
- --with-tcl
--with-uuid=e2fs
--with-zstd
diff --git a/elements/components/raptor.yml b/elements/components/raptor.yml
new file mode 100644
index 000000000..eda7484c5
--- /dev/null
+++ b/elements/components/raptor.yml
@@ -0,0 +1,21 @@
+id: raptor
+version: 2.0.16
+about: C library that provides a set of parsers and serializers that generate Resource Description Framework (RDF) triples
+
+pre-script: |-
+ sed -i 's/20627/20627 \&\& LIBXML_VERSION < 21100/' src/raptor_libxml.c
+
+configure: >-
+ --disable-static
+ --with-icu-config=%{bindir}/icu-config
+
+depends:
+ - components/curl.yml
+ - components/libxslt.yml
+ - components/icu.yml
+
+build-depends:
+ - components/gtk-doc.yml
+
+sources:
+ - https://download.librdf.org/source/raptor2-%{version}.tar.gz
diff --git a/elements/components/rasqal.yml b/elements/components/rasqal.yml
new file mode 100644
index 000000000..317b81b5c
--- /dev/null
+++ b/elements/components/rasqal.yml
@@ -0,0 +1,12 @@
+id: rasqal
+version: 0.9.33
+about: Resource Description Framework (RDF) query language
+
+configure: >-
+ --disable-static
+
+depends:
+ - components/raptor.yml
+
+sources:
+ - https://download.librdf.org/source/rasqal-%{version}.tar.gz
diff --git a/elements/components/redland.yml b/elements/components/redland.yml
new file mode 100644
index 000000000..c592b6695
--- /dev/null
+++ b/elements/components/redland.yml
@@ -0,0 +1,12 @@
+id: redland
+version: 1.0.17
+about: Resource Description Framework
+
+configure: >-
+ --disable-static
+
+sources:
+ - https://download.librdf.org/source/redland-%{version}.tar.gz
+
+depends:
+ - components/rasqal.yml
diff --git a/elements/components/runc.yml b/elements/components/runc.yml
index 9ce06ce5d..31fa3fdcd 100644
--- a/elements/components/runc.yml
+++ b/elements/components/runc.yml
@@ -1,7 +1,7 @@
id: runc
version: 1.1.9
about: A lightweight universal runtime container
-
+release: 1
build-dir: "."
script: |-
export GO111MODULE=auto
diff --git a/elements/components/sysroot.yml b/elements/components/sysroot.yml
index cc36380e8..d52b34be0 100644
--- a/elements/components/sysroot.yml
+++ b/elements/components/sysroot.yml
@@ -1,5 +1,5 @@
id: sysroot
-version: 2.0.8
+version: 2.0.9
about: Package Management and Updater Daemon
merge: [ elements/include/rlxos.inc ]
diff --git a/elements/components/v4l-utils.yml b/elements/components/v4l-utils.yml
index 5832f89ee..97d84fd58 100644
--- a/elements/components/v4l-utils.yml
+++ b/elements/components/v4l-utils.yml
@@ -2,6 +2,8 @@ id: v4l-utils
version: 1.28.1
about: A series of utilities for media devices
+configure: >-
+ -D gconv=disabled
depends:
- components/alsa-lib.yml
- components/glu.yml
diff --git a/elements/components/welcome-tour.yml b/elements/components/welcome-tour.yml
deleted file mode 100644
index 943058ad7..000000000
--- a/elements/components/welcome-tour.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-id: welcome-tour
-version: 2.0
-about: RLXOS welcome tour
-merge: [elements/include/rlxos.inc]
-
-post-script: |-
- install -v -D -m 0755 /dev/stdin %{install-root}/%{sysconfdir}/xdg/autostart/welcome-tour.desktop << "EOF"
- [Desktop Entry]
- Name=Welcome Tour
- Comment=RLXOS Welcome tour
- Icon=welcome-tour
- Exec=env WELCOME_TOUR_AUTOSTART=1 %{bindir}/welcome-tour
- Terminal=false
- Type=Application
- EOF
-
-
-depends:
- - components/gtkmm.yml
diff --git a/elements/components/welcome.yml b/elements/components/welcome.yml
new file mode 100644
index 000000000..a184c06bb
--- /dev/null
+++ b/elements/components/welcome.yml
@@ -0,0 +1,7 @@
+id: welcome
+version: 2.2
+about: RLXOS welcome tour
+merge: [ elements/include/app.inc ]
+
+extra-commands: |-
+ install -v -D -m 0755 -t %{install-root}/%{sysconfdir}/xdg/autostart/ /rlxos/apps/welcome/assets/welcome.desktop
\ No newline at end of file
diff --git a/elements/components/x11/libxpresent.yml b/elements/components/x11/libxpresent.yml
new file mode 100644
index 000000000..34dc8163e
--- /dev/null
+++ b/elements/components/x11/libxpresent.yml
@@ -0,0 +1,17 @@
+id: libxpresent
+version: 1.0.1
+about: X Present Extension library
+
+sources:
+ - https://xorg.freedesktop.org/archive/individual/lib/libXpresent-%{version}.tar.xz
+
+depends:
+ - components/glibc.yml
+ - components/x11/libx11.yml
+ - components/x11/libxext.yml
+ - components/x11/libxfixes.yml
+ - components/x11/libxrandr.yml
+ - components/x11/xorgproto.yml
+
+build-depends:
+ - components/x11/util-macros.yml
diff --git a/elements/components/xarchiver.yml b/elements/components/xarchiver.yml
new file mode 100644
index 000000000..4ff559a89
--- /dev/null
+++ b/elements/components/xarchiver.yml
@@ -0,0 +1,28 @@
+id: xarchiver
+version: 0.5.4.23
+about: GTK+ frontend to various command line archivers
+
+configure: >-
+ --libexecdir=%{libdir}/xfce4
+
+depends:
+ - components/gtk.yml
+ - components/bzip2.yml
+ - components/cpio.yml
+ - components/gzip.yml
+ - components/lz4.yml
+ - components/tar.yml
+ - components/zstd.yml
+ - components/lzip.yml
+ - components/p7zip.yml
+ - components/zip.yml
+ - components/unzip.yml
+ - components/binutils.yml # deb
+ - components/xdg-utils.yml
+
+build-depends:
+ - components/xmlto.yml
+ - components/intltool.yml
+
+sources:
+ - https://github.com/ib/xarchiver/archive/%{version}/xarchiver-%{version}.tar.gz
diff --git a/elements/components/xdg-desktop-portal-gtk.yml b/elements/components/xdg-desktop-portal-gtk.yml
index e7d80e54d..050773b26 100644
--- a/elements/components/xdg-desktop-portal-gtk.yml
+++ b/elements/components/xdg-desktop-portal-gtk.yml
@@ -6,13 +6,11 @@ configure: >-
-D wallpaper=disabled
post-script: |-
- install -v -D -m 0644 /dev/stdin %{install-root}%{datadir}/xdg-desktop-portal/portals.conf << "EOF"
+ install -v -D -m 0644 /dev/stdin %{install-root}%{datadir}/xdg-desktop-portal/gtk-portals.conf << "EOF"
[preferred]
default=gtk
EOF
-
- sed -i 's#=gnome#=gnome;XFCE#g' %{install-root}%{datadir}/xdg-desktop-portal/portals/gtk.portal
-
+
depends:
- components/gtk.yml
- components/xdg-desktop-portal.yml
diff --git a/elements/components/xdg-desktop-portal.yml b/elements/components/xdg-desktop-portal.yml
index c5291e05f..ae6c4658b 100644
--- a/elements/components/xdg-desktop-portal.yml
+++ b/elements/components/xdg-desktop-portal.yml
@@ -1,5 +1,5 @@
id: xdg-desktop-portal
-version: 1.18.2
+version: 1.18.4
about: Desktop integration portals for sandboxed apps
depends:
diff --git a/elements/components/xfce4/xfce4-panel.yml b/elements/components/xfce4/xfce4-panel.yml
index bff0d5eb3..c8d1e2efa 100644
--- a/elements/components/xfce4/xfce4-panel.yml
+++ b/elements/components/xfce4/xfce4-panel.yml
@@ -113,7 +113,7 @@ post-script: |-
install -vDm 0644 /dev/stdin %{install-root}/%{sysconfdir}/skel/.config/xfce4/panel/docklike-4.rc << "EOF"
[user]
- pinned=xfce4-appfinder;xfce4-terminal;thunar;firefox;xfce-settings-manager;
+ pinned=xfce4-appfinder;xfce4-terminal;thunar;firefox;org.gnome.Software;xfce-settings-manager;
EOF
depends:
diff --git a/elements/components/xfce4/xfce4-session.yml b/elements/components/xfce4/xfce4-session.yml
index ced489eff..5062fafb8 100644
--- a/elements/components/xfce4/xfce4-session.yml
+++ b/elements/components/xfce4/xfce4-session.yml
@@ -2,6 +2,10 @@ id: xfce4-session
version: 4.18.4
about: A session manager for Xfce
+pre-script: |-
+ patch -Np1 -i source-system-xinitrc-scripts.patch
+
+
configure: >-
--disable-debug
@@ -16,3 +20,4 @@ depends:
- components/x11/iceauth.yml
sources:
- https://archive.xfce.org/src/xfce/xfce4-session/%{version:2}/xfce4-session-%{version}.tar.bz2
+ - patches/xfce4/source-system-xinitrc-scripts.patch
diff --git a/elements/components/xfce4/xfce4-settings.yml b/elements/components/xfce4/xfce4-settings.yml
index 0e71d3484..800208502 100644
--- a/elements/components/xfce4/xfce4-settings.yml
+++ b/elements/components/xfce4/xfce4-settings.yml
@@ -11,8 +11,8 @@ post-script: |-
-
-
+
+
@@ -33,8 +33,8 @@ post-script: |-
-
-
+
+
diff --git a/elements/components/xfce4/xfce4-terminal.yml b/elements/components/xfce4/xfce4-terminal.yml
index 6740ada36..fc1a6883a 100644
--- a/elements/components/xfce4/xfce4-terminal.yml
+++ b/elements/components/xfce4/xfce4-terminal.yml
@@ -12,6 +12,7 @@ post-script: |-
+
EOF
diff --git a/elements/components/xfce4/xfdesktop.yml b/elements/components/xfce4/xfdesktop.yml
index 2ee61f294..a8b95f303 100644
--- a/elements/components/xfce4/xfdesktop.yml
+++ b/elements/components/xfce4/xfdesktop.yml
@@ -1,13 +1,12 @@
id: xfdesktop
version: 4.18.1
about: Xfce desktop manager
-
+release: 8
pre-script: |-
sed -i 's#/backgrounds/xfce/xfce-shapes.svg#/backgrounds/default.jpg#g' common/xfdesktop-common.h
post-script: |-
- install -vm 0644 /files/backgrounds/default.jpg %{install-root}%{datadir}/backgrounds/default.jpg
- install -vm 0644 /files/backgrounds/default-blur.jpg %{install-root}%{datadir}/backgrounds/default-blur.jpg
+ install -vm 0644 /files/backgrounds/*.jpg -t %{install-root}%{datadir}/backgrounds/
install -vDm 0644 /dev/stdin %{install-root}/%{sysconfdir}/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml << "EOF"
diff --git a/elements/components/xfce4/xfwm4.yml b/elements/components/xfce4/xfwm4.yml
index 7d0aa7377..c31fb51be 100644
--- a/elements/components/xfce4/xfwm4.yml
+++ b/elements/components/xfce4/xfwm4.yml
@@ -11,10 +11,9 @@ post-script: |-
-
-
-
-
+
+
+
diff --git a/elements/components/zenity.yml b/elements/components/zenity.yml
index 678c7f4ff..d64300641 100644
--- a/elements/components/zenity.yml
+++ b/elements/components/zenity.yml
@@ -1,13 +1,14 @@
id: zenity
-version: 3.44.2
+version: 4.0.2
about: GNOME port of dialog which allows you to display GTK+ dialog boxes from the command line and shell scripts
+configure: >-
+ -D manpage=false
+
depends:
- - components/gtk.yml
- - components/libnotify.yml
- - components/libxslt.yml
- - components/webkitgtk.yml
- - components/enchant.yml
+ - components/gtk4.yml
+ - components/libadwaita.yml
+ - components/pango.yml
build-depends:
- components/itstool.yml
sources:
diff --git a/elements/container/image.yml b/elements/container/image.yml
index 2fe6dc7f7..9485bb0ac 100644
--- a/elements/container/image.yml
+++ b/elements/container/image.yml
@@ -26,6 +26,7 @@ include:
include-parts:
- devel
+
build-depends:
- components/squashfs-tools.yml
diff --git a/elements/extensions/qemu.yml b/elements/extensions/qemu.yml
index c22944941..d4efa3e7d 100644
--- a/elements/extensions/qemu.yml
+++ b/elements/extensions/qemu.yml
@@ -4,6 +4,7 @@ about: RLXOS QEMU Virtualization Kit
include:
- components/qemu.yml
- components/bridge-utils.yml
+ - components/libvirt.yml
- components/virt-manager.yml
merge: [elements/include/extension.inc]
diff --git a/elements/extensions/sdk.yml b/elements/extensions/sdk.yml
index 20eaeb7b7..6c1237743 100644
--- a/elements/extensions/sdk.yml
+++ b/elements/extensions/sdk.yml
@@ -34,9 +34,12 @@ include:
- components/sassc.yml
- components/xfce4/xfce4-dev-tools.yml
- components/gdb.yml
+ - components/glibc-dbg.yml
- components/patch.yml
- components/xfce4/xfce4-dev-tools.yml
- components/man-pages.yml
+ - components/rsync.yml
+ - components/unzip.yml
include-parts:
- devel
diff --git a/elements/include/app.inc b/elements/include/app.inc
new file mode 100644
index 000000000..af764ba77
--- /dev/null
+++ b/elements/include/app.inc
@@ -0,0 +1,15 @@
+extra-commands: ""
+
+script: |-
+ ( cd /rlxos; go build -o %{install-root}/%{bindir}/%{id} rlxos/apps/%{id} )
+ %{extra-commands}
+
+post-script: |-
+ go clean -modcache
+ rm -rf /go
+
+build-depends:
+ - components/go.yml
+
+depends:
+ - components/gtk4.yml
diff --git a/elements/include/go-pkg.inc b/elements/include/go-pkg.inc
new file mode 100644
index 000000000..6c8d3924b
--- /dev/null
+++ b/elements/include/go-pkg.inc
@@ -0,0 +1,12 @@
+script: |-
+ GOPATH="%{build-root}" go install %{gourl}@%{version}
+
+ find %{build-root} \
+ -name ".*" -prune -exec rm -r '{}' \;
+
+ mkdir -p %{install-root}%{libdir}/go
+ cp -Rv %{build-root}/{src,pkg} %{install-root}%{libdir}/go
+
+
+build-depends:
+ - components/go.yml
\ No newline at end of file
diff --git a/elements/installer/image.yml b/elements/installer/image.yml
index f1371642c..381bde736 100644
--- a/elements/installer/image.yml
+++ b/elements/installer/image.yml
@@ -24,6 +24,7 @@ script: |-
ostree admin os-init --sysroot=%{sysroot} rlxos
ostree config --repo=%{sysroot}/ostree/repo set sysroot.bootloader none
+ ostree config --repo=%{sysroot}/ostree/repo set sysroot.bootprefix true
ostree pull-local --repo=%{sysroot}/ostree/repo %{include-root} %{ostree-branch}
@@ -38,7 +39,7 @@ script: |-
# read ostree config
getconfig() {
- cat /sysroot/boot/loader/entries/ostree-1-rlxos.conf | grep "$1" | cut -d ' ' -f2-
+ cat /sysroot/boot/loader/entries/ostree-1.conf | grep "$1" | cut -d ' ' -f2-
}
KERNEL=$(getconfig linux)
@@ -46,8 +47,8 @@ script: |-
KARGS=$(getconfig options)
for f in ISO/boot/grub/grub.cfg ISO/isolinux/isolinux.cfg ; do
- m4 -D"__KERNEL__=/boot/$KERNEL" \
- -D"__INITRD__=/boot/$INITRD" \
+ m4 -D"__KERNEL__=$KERNEL" \
+ -D"__INITRD__=$INITRD" \
-D"__KARGS__=$KARGS" $f > ${f}.tmp
mv ${f}.tmp ${f}
done
diff --git a/elements/platform.yml b/elements/platform.yml
index ca820cfaa..7aca9a47e 100644
--- a/elements/platform.yml
+++ b/elements/platform.yml
@@ -67,7 +67,6 @@ depends:
- components/dosfstools.yml
- components/libconfuse.yml
- - components/fuse2.yml
- components/xdg-desktop-portal-gtk.yml
- components/xdg-desktop-portal-xapp.yml
@@ -78,10 +77,9 @@ depends:
- components/dracut.yml
- components/zsync.yml
- - components/apparmor.yml
-
- components/firmware.yml
- components/sof-firmware.yml
+ - components/intel-ucode.yml
- components/system-config-printer.yml
@@ -96,17 +94,19 @@ depends:
- components/network-manager-applet.yml
- components/blueman.yml
- components/ntfs-3g.yml
+ - components/firefox.yml
- components/file-roller.yml
- components/meta-xfce4.yml
- components/meta-x11.yml
- components/lightdm.yml
- - components/epdfview.yml
+ - components/picom.yml
- - components/firefox.yml
- - components/neofetch.yml
+ - components/capsule.yml
+
+ - components/gnome/gnome-software.yml
- - components/welcome-tour.yml
+ - components/welcome.yml
- components/initial-setup.yml
- components/distrobox.yml
diff --git a/elements/system/repo.yml b/elements/system/repo.yml
index 55a0e3fdc..223313776 100644
--- a/elements/system/repo.yml
+++ b/elements/system/repo.yml
@@ -33,6 +33,8 @@ initial-commands: |-
cp /lib/modules/${kerver}/bzImage /lib/modules/${kerver}/vmlinuz
dracut --reproducible -v --no-machineid \
+ --early-microcode \
+ --no-hostonly \
--kver ${kerver} \
--add dmsquash-live \
--add ostree \
diff --git a/files/backgrounds/default-blur.jpg b/files/backgrounds/default-blur.jpg
index 481d0cebd..25593da85 100644
Binary files a/files/backgrounds/default-blur.jpg and b/files/backgrounds/default-blur.jpg differ
diff --git a/files/backgrounds/default-old.jpeg b/files/backgrounds/default-old.jpeg
deleted file mode 100644
index 570c9eea8..000000000
Binary files a/files/backgrounds/default-old.jpeg and /dev/null differ
diff --git a/files/backgrounds/default.jpg b/files/backgrounds/default.jpg
index bbba8f6eb..5d3128bcd 100644
Binary files a/files/backgrounds/default.jpg and b/files/backgrounds/default.jpg differ
diff --git a/files/initial-setup/first-boot.sh b/files/initial-setup/first-boot.sh
index 6b8bb6769..5ffe56243 100644
--- a/files/initial-setup/first-boot.sh
+++ b/files/initial-setup/first-boot.sh
@@ -31,6 +31,7 @@ echo "root":"${ISE_PASSWORD}" | sudo chpasswd || {
}
fi
+if [ -f /etc/greetd/config.toml ] ; then
echo ":: Installing greetd configuration"
sudo install -v -D -m 0644 /dev/stdin /etc/greetd/config.toml << EOF
[terminal]
@@ -43,6 +44,7 @@ command = "sway --config /etc/greetd/sway-config"
command = "sway --config /etc/sway/config-locked"
user = "${ISE_USERNAME}"
EOF
+fi
if [ -f /etc/lightdm/lightdm.conf.d/*initial-setup*.conf ] ; then
echo ":: Removing Display manager configuration for inital setup"
@@ -57,4 +59,7 @@ fi
echo ":: setting up timezone: ${ISE_TIMEZONE}"
sudo ln -sf /usr/share/zoneinfo/${ISE_TIMEZONE} /etc/localtime
+echo ":: updating bootloader configuration"
+sudo grub-mkconfig -o /boot/grub/grub.cfg
+
exit 0
\ No newline at end of file
diff --git a/files/initial-setup/installer.sh b/files/initial-setup/installer.sh
index bb2f0fd25..247deb2a0 100644
--- a/files/initial-setup/installer.sh
+++ b/files/initial-setup/installer.sh
@@ -152,6 +152,7 @@ if [ -d /sysroot/ostree/repo ] ; then
}
sudo ostree config --repo=${SYSROOT}/ostree/repo set sysroot.bootloader none
+ sudo ostree config --repo=${SYSROOT}/ostree/repo set sysroot.bootprefix true
echo ":: Cloning OStree into the device (this might take a while)"
sudo ostree --repo=${SYSROOT}/ostree/repo pull-local "/ostree/repo" @@OSTREE_BRANCH@@ || {
@@ -196,88 +197,12 @@ if [ -d /sysroot/ostree/repo ] ; then
# TODO: fix this hack
(cd ${SYSROOT}/boot/loader; sudo /lib/ostree/ostree-grub-generator . grub.cfg)
+ sudo sed -i 's#/boot/boot/#/boot/#g' ${SYSROOT}/boot/loader/grub.cfg
sudo install -D -m 0644 /dev/stdin ${SYSROOT}/boot/grub/grub.cfg << "EOF"
-set timeout=5
-if [ -s $prefix/grubenv ] ; then
- set have_grubenv=true
- load_env
-fi
-
-if [ x"${feature_menuentry_id}" = xy ] ; then
- menuentry_id_option="--id"
-else
- menuentry_id_option=""
-fi
-
-export menuentry_id_option
-
-if [ "${prev_saved_entry}" ] ; then
- set saved_entry="${prev_saved_entry}"
- save_env saved_entry
- set pre_saved_entry=
- save_env prev_saved_entry
- set boot_once=true
-fi
-
-function savedefault {
- if [ -z "${boot_once}" ] ; then
- saved_entry="${chosed}"
- save_env saved_entry
- fi
-}
-
-function load_video {
- if [ x$feature_all_video_module = xy ] ; then
- insmod all_video
- else
- insmod efi_gop
- insmod efi_uga
- insmod ieee1275_fb
- insmod vbe
- insmod vga
- insmod video_bochs
- insmod video_cirrus
- fi
-}
-
-font=unicode
-
-if loadfont $font ; then
- set gfxmode=auto
- load_video
- insmod gfxterm
- set locale_dir=$prefix/locale
- set lang=en_IN
- insmod gettext
-fi
-
-terminal_output gfxterm
-if [ "${recordfail}" = 1 ] ; then
- set timeout=30
-else
- if [ x$feature_timeout_style = xy ] ; then
- set timeout_style=menu
- set timeout=5
- else
- set timeout=5
- fi
-fi
-
-function gfxmode {
- set gfxpayload="${1}"
-}
-
-set linux_gfx_mode=
-export linux_gfx_mode
-
-insmod part_gpt
-insmod ext2
-
configfile /boot/loader/grub.cfg
EOF
- sudo ostree config --repo=${SYSROOT}/ostree/repo set sysroot.bootloader grub2
else
if [[ -n "$IS_EFI" ]] ; then
sudo mkdir -p ${SYSROOT}/efi || {
diff --git a/go.mod b/go.mod
new file mode 100644
index 000000000..190cffd46
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,14 @@
+module rlxos
+
+go 1.22.2
+
+require (
+ github.com/diamondburned/gotk4/pkg v0.3.1
+ gopkg.in/yaml.v3 v3.0.1
+)
+
+require (
+ github.com/KarpelesLab/weak v0.1.1 // indirect
+ go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect
+ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 000000000..7832e9aaa
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,12 @@
+github.com/KarpelesLab/weak v0.1.1 h1:fNnlPo3aypS9tBzoEQluY13XyUfd/eWaSE/vMvo9s4g=
+github.com/KarpelesLab/weak v0.1.1/go.mod h1:pzXsWs5f2bf+fpgHayTlBE1qJpO3MpJKo5sRaLu1XNw=
+github.com/diamondburned/gotk4/pkg v0.3.1 h1:uhkXSUPUsCyz3yujdvl7DSN8jiLS2BgNTQE95hk6ygg=
+github.com/diamondburned/gotk4/pkg v0.3.1/go.mod h1:DqeOW+MxSZFg9OO+esk4JgQk0TiUJJUBfMltKhG+ub4=
+go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 h1:lGdhQUN/cnWdSH3291CUuxSEqc+AsGTiDxPP3r2J0l4=
+go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/patches/colord/colord-1.4.7-upstream_fixes-1.patch b/patches/colord/colord-1.4.7-upstream_fixes-1.patch
new file mode 100644
index 000000000..6887c4fe9
--- /dev/null
+++ b/patches/colord/colord-1.4.7-upstream_fixes-1.patch
@@ -0,0 +1,321 @@
+Submitted By: Xi Ruoyao
+Date: 2024-05-04
+Initial Package Version: 1.4.7
+Upstream Status: Committed
+Origin: Upstream (PR 168 and commit for issue 166)
+Description: Fix a misuse of sqlite API causing test
+ failure with recent sqlite releases and an
+ over-strict systemd hardening setting causing
+ the systemd service fail to start.
+
+From 10fe2a07e31b5b151e7d46087b6b4155d2c680e1 Mon Sep 17 00:00:00 2001
+From: psykose
+Date: Thu, 8 Feb 2024 12:10:45 +0000
+Subject: [PATCH 1/2] fix NULL passed to free with sqlite3 error_msg pointers
+
+when an error does not happen, and an error_msg pointer is passed,
+sqlite does not touch it. that means this pointer is uninitialised
+(=NULL) which violates the constraints of g_autofree ("the variable must
+be initialized").
+
+this is then passed to g_free and crashes in tests.
+
+use a regular pointer and free it manually on error, after sqlite writes
+to it after setting it with sqlite_malloc.
+
+fixes https://github.com/hughsie/colord/issues/163
+---
+ src/cd-mapping-db.c | 3 ++-
+ src/cd-profile-db.c | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/cd-mapping-db.c b/src/cd-mapping-db.c
+index 996f07e3..5ffd74dd 100644
+--- a/src/cd-mapping-db.c
++++ b/src/cd-mapping-db.c
+@@ -67,7 +67,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
+ GError **error)
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+- g_autofree gchar *error_msg = NULL;
++ gchar *error_msg = NULL;
+ gint rc;
+ g_autofree gchar *path = NULL;
+
+@@ -97,6 +97,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
+ if (rc != SQLITE_OK) {
+ /* Database appears to be mangled, so wipe it and try again */
+ sqlite3_close (priv->db);
++ sqlite3_free(error_msg);
+ priv->db = NULL;
+
+ if (retry) {
+diff --git a/src/cd-profile-db.c b/src/cd-profile-db.c
+index 57ab864f..e5b74e37 100644
+--- a/src/cd-profile-db.c
++++ b/src/cd-profile-db.c
+@@ -48,7 +48,7 @@ cd_profile_db_load (CdProfileDb *pdb,
+ {
+ CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
+ const gchar *statement;
+- g_autofree gchar *error_msg = NULL;
++ gchar *error_msg = NULL;
+ gint rc;
+ g_autofree gchar *path = NULL;
+
+@@ -69,6 +69,7 @@ cd_profile_db_load (CdProfileDb *pdb,
+ CD_CLIENT_ERROR_INTERNAL,
+ "Can't open database: %s\n",
+ sqlite3_errmsg (priv->db));
++ sqlite3_free (error_msg);
+ sqlite3_close (priv->db);
+ return FALSE;
+ }
+
+From 80621d986bcfbbfe73052b104a698e76b300b64d Mon Sep 17 00:00:00 2001
+From: psykose
+Date: Thu, 8 Feb 2024 13:12:41 +0000
+Subject: [PATCH 2/2] use char * instead of gchar * for pointers passed to
+ sqlite3_exec
+
+---
+ src/cd-device-db.c | 16 ++++++++--------
+ src/cd-mapping-db.c | 18 +++++++++---------
+ src/cd-profile-db.c | 10 +++++-----
+ 3 files changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/src/cd-device-db.c b/src/cd-device-db.c
+index 3ae44ef2..ac87a527 100644
+--- a/src/cd-device-db.c
++++ b/src/cd-device-db.c
+@@ -48,7 +48,7 @@ cd_device_db_load (CdDeviceDb *ddb,
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+ const gchar *statement;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+ g_autofree gchar *path = NULL;
+
+@@ -109,7 +109,7 @@ cd_device_db_empty (CdDeviceDb *ddb,
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+ const gchar *statement;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+
+ g_return_val_if_fail (CD_IS_DEVICE_DB (ddb), FALSE);
+@@ -137,7 +137,7 @@ cd_device_db_add (CdDeviceDb *ddb,
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+
+@@ -175,7 +175,7 @@ cd_device_db_set_property (CdDeviceDb *ddb,
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+
+@@ -212,7 +212,7 @@ cd_device_db_remove (CdDeviceDb *ddb,
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement1 = NULL;
+ gchar *statement2 = NULL;
+ gint rc;
+@@ -277,7 +277,7 @@ cd_device_db_get_property (CdDeviceDb *ddb,
+ GError **error)
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ gchar *value = NULL;
+@@ -331,7 +331,7 @@ cd_device_db_get_devices (CdDeviceDb *ddb,
+ GError **error)
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ GPtrArray *array = NULL;
+@@ -372,7 +372,7 @@ cd_device_db_get_properties (CdDeviceDb *ddb,
+ GError **error)
+ {
+ CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ GPtrArray *array = NULL;
+diff --git a/src/cd-mapping-db.c b/src/cd-mapping-db.c
+index 5ffd74dd..291274a4 100644
+--- a/src/cd-mapping-db.c
++++ b/src/cd-mapping-db.c
+@@ -67,7 +67,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
+ GError **error)
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+ g_autofree gchar *path = NULL;
+
+@@ -131,7 +131,7 @@ cd_mapping_db_load (CdMappingDb *mdb,
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+ const gchar *statement;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+ g_autofree gchar *path = NULL;
+
+@@ -230,7 +230,7 @@ cd_mapping_db_empty (CdMappingDb *mdb,
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+ const gchar *statement;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+
+ g_return_val_if_fail (CD_IS_MAPPING_DB (mdb), FALSE);
+@@ -259,7 +259,7 @@ cd_mapping_db_add (CdMappingDb *mdb,
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ gint64 timestamp;
+@@ -307,7 +307,7 @@ cd_mapping_db_clear_timestamp (CdMappingDb *mdb,
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+
+@@ -351,7 +351,7 @@ cd_mapping_db_remove (CdMappingDb *mdb,
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+
+@@ -406,7 +406,7 @@ cd_mapping_db_get_profiles (CdMappingDb *mdb,
+ GError **error)
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ GPtrArray *array = NULL;
+@@ -456,7 +456,7 @@ cd_mapping_db_get_devices (CdMappingDb *mdb,
+ GError **error)
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ GPtrArray *array = NULL;
+@@ -522,7 +522,7 @@ cd_mapping_db_get_timestamp (CdMappingDb *mdb,
+ GError **error)
+ {
+ CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+ guint64 timestamp = G_MAXUINT64;
+diff --git a/src/cd-profile-db.c b/src/cd-profile-db.c
+index e5b74e37..124fa09f 100644
+--- a/src/cd-profile-db.c
++++ b/src/cd-profile-db.c
+@@ -48,7 +48,7 @@ cd_profile_db_load (CdProfileDb *pdb,
+ {
+ CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
+ const gchar *statement;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+ g_autofree gchar *path = NULL;
+
+@@ -98,7 +98,7 @@ cd_profile_db_empty (CdProfileDb *pdb, GError **error)
+ {
+ CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
+ const gchar *statement;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gint rc;
+
+ g_return_val_if_fail (CD_IS_PROFILE_DB (pdb), FALSE);
+@@ -129,7 +129,7 @@ cd_profile_db_set_property (CdProfileDb *pdb,
+ {
+ CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+
+@@ -169,7 +169,7 @@ cd_profile_db_remove (CdProfileDb *pdb,
+ {
+ CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement = NULL;
+ gint rc;
+
+@@ -223,7 +223,7 @@ cd_profile_db_get_property (CdProfileDb *pdb,
+ {
+ CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
+ gboolean ret = TRUE;
+- gchar *error_msg = NULL;
++ char *error_msg = NULL;
+ gchar *statement;
+ gint rc;
+
+From 08a32b2379fb5582f4312e59bf51a2823df56276 Mon Sep 17 00:00:00 2001
+From: Richard Hughes
+Date: Mon, 29 Jan 2024 10:37:11 +0000
+Subject: [PATCH] Fix writing to the database with ProtectSystem=strict
+
+Fixes https://github.com/hughsie/colord/issues/166
+---
+ data/colord.service.in | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/data/colord.service.in b/data/colord.service.in
+index 6825d944..c358dc4b 100644
+--- a/data/colord.service.in
++++ b/data/colord.service.in
+@@ -17,6 +17,10 @@ ProtectControlGroups=true
+ RestrictRealtime=true
+ RestrictAddressFamilies=AF_UNIX
+
++ConfigurationDirectory=colord
++StateDirectory=colord
++CacheDirectory=colord
++
+ # drop all capabilities
+ CapabilityBoundingSet=~CAP_SETUID CAP_SETGID CAP_SETPCAP CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_CHOWN CAP_FSETID CAP_SETFCAP CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_IPC_OWNER CAP_NET_ADMIN CAP_SYS_RAWIO CAP_SYS_TIME CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE CAP_KILL CAP_MKNOD CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_RESOURCE CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_SYS_BOOT CAP_LINUX_IMMUTABLE CAP_IPC_LOCK CAP_SYS_CHROOT CAP_BLOCK_SUSPEND CAP_LEASE CAP_SYS_PACCT CAP_SYS_TTY_CONFIG CAP_WAKE_ALARM
+
diff --git a/patches/compiz/0001-reverse-unity-config.patch b/patches/compiz/0001-reverse-unity-config.patch
new file mode 100644
index 000000000..6828481af
--- /dev/null
+++ b/patches/compiz/0001-reverse-unity-config.patch
@@ -0,0 +1,871 @@
+diff -Nur original/compizconfig/integration/gnome/gsettings/org.compiz.integrated.gschema.xml modified/compizconfig/integration/gnome/gsettings/org.compiz.integrated.gschema.xml
+--- original/compizconfig/integration/gnome/gsettings/org.compiz.integrated.gschema.xml 2019-02-16 12:44:41.000000000 +0000
++++ modified/compizconfig/integration/gnome/gsettings/org.compiz.integrated.gschema.xml 2019-02-17 14:11:58.762747647 +0000
+@@ -10,9 +10,6 @@
+
+ "gnome-screenshot"
+
+-
+- ["<Control><Alt>Delete"]
+-
+
+ ["Disabled"]
+
+@@ -49,9 +46,6 @@
+
+ ["Disabled"]
+
+-
+- "/usr/bin/gnome-system-monitor -p"
+-
+
+ ""
+
+diff -Nur original/metadata/core.xml.in modified/metadata/core.xml.in
+--- original/metadata/core.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/metadata/core.xml.in 2019-02-17 14:11:58.762747647 +0000
+@@ -144,7 +144,7 @@
+
+ <_short>Focus Prevention Windows
+ <_long>Focus prevention windows
+- !(class=Polkit-gnome-authentication-agent-1)
++ any
+
+
+
+@@ -179,7 +179,7 @@
+
+ <_short>Minimize Window
+ <_long>Minimize active window
+- <Control><Alt>KP_0
++ <Alt>F9
+
+
+ <_short>Minimize Window
+@@ -188,16 +188,16 @@
+
+ <_short>Maximize Window
+ <_long>Maximize active window
+- <Control><Super>Up
++ <Alt>F10
+
+
+ <_short>Unmaximize Window
+ <_long>Unmaximize active window
++ <Alt>F5
+
+
+ <_short>Unmaximize or Minimize Window
+ <_long>Unmaximize or minimize active window
+- <Control><Super>Down
+
+
+ <_short>Maximize Window Horizontally
+@@ -220,6 +220,7 @@
+
+ <_short>Show Desktop
+ <_long>Hide all windows and focus desktop
++ <Control><Alt>d
+
+
+ <_short>Show Desktop
+@@ -229,7 +230,6 @@
+
+ <_short>Toggle Window Maximized
+ <_long>Toggle active window maximized
+- <Control><Alt>KP_5
+
+
+ <_short>Toggle Window Maximized
+@@ -254,7 +254,7 @@
+
+ <_short>Horizontal Virtual Size
+ <_long>Screen size multiplier for horizontal virtual size
+- 1
++ 4
+ 1
+ 32
+
+diff -Nur original/plugins/animation/animation.xml.in modified/plugins/animation/animation.xml.in
+--- original/plugins/animation/animation.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/animation/animation.xml.in 2019-02-17 14:11:58.766082647 +0000
+@@ -36,7 +36,7 @@
+
+
+
+- animation:Glide 2
++ animation:Zoom
+ animation:Fade
+ animation:Fade
+
+@@ -48,9 +48,9 @@
+ 50
+ 4000
+
+- 120
+- 80
+- 80
++ 200
++ 150
++ 150
+
+
+
+@@ -58,8 +58,8 @@
+ <_long>The windows that will be animated.
+ match
+
+- ((type=Normal | Unknown) | name=sun-awt-X11-XFramePeer | name=sun-awt-X11-XDialogPeer) & !(role=toolTipTip | role=qtooltip_label) & !(type=Normal & override_redirect=1) & !(name=gnome-screensaver)
+- ((type=Menu | PopupMenu | DropdownMenu | Combo | Dialog | ModalDialog | Normal) & !(class=\\.exe$))
++ (type=Normal | Dialog | ModalDialog | Unknown) & !(name=gnome-screensaver)
++ (type=Menu | PopupMenu | DropdownMenu | Combo)
+ (type=Tooltip | Notification | Utility) & !(name=compiz) & !(title=notify-osd)
+
+
+@@ -102,7 +102,7 @@
+
+
+
+- animation:Glide 2
++ animation:Zoom
+ animation:Fade
+ animation:Fade
+
+@@ -114,9 +114,9 @@
+ 50
+ 4000
+
+- 120
+- 80
+- 50
++ 200
++ 150
++ 150
+
+
+
+@@ -124,8 +124,8 @@
+ <_long>The windows that will be animated.
+ match
+
+- ((type=Normal | Unknown) | name=sun-awt-X11-XFramePeer | name=sun-awt-X11-XDialogPeer) & !(role=toolTipTip | role=qtooltip_label) & !(type=Normal & override_redirect=1) & !(name=gnome-screensaver) & !(name=gnome-screenshot)
+- ((type=Menu | PopupMenu | DropdownMenu | Combo | Dialog | ModalDialog | Normal) & !(class=\\.exe$))
++ (type=Normal | Dialog | ModalDialog | Unknown) & !(name=gnome-screensaver)
++ (type=Menu | PopupMenu | DropdownMenu | Combo)
+ (type=Tooltip | Notification | Utility) & !(name=compiz) & !(title=notify-osd)
+
+
+@@ -168,7 +168,7 @@
+
+
+
+- animation:Zoom
++ animation:Magic Lamp
+
+
+
+@@ -178,7 +178,7 @@
+ 50
+ 4000
+
+- 220
++ 300
+
+
+
+@@ -341,7 +341,7 @@
+
+
+
+- animation:Fade
++ animation:None
+
+
+
+@@ -351,7 +351,7 @@
+ 50
+ 4000
+
+- 150
++ 300
+
+
+
+@@ -385,7 +385,7 @@
+
+ <_short>Animation Time Step
+ <_long>The amount of time in milliseconds between each render of the animation. The higher the number, the jerkier the movements become.
+- 16
++ 10
+ 1
+ 400
+
+@@ -473,7 +473,7 @@
+
+ <_short>Away Position
+ <_long>Closeness of window to camera at the end of the animation (1.0: Close to camera, -2.0: Away from camera).
+- -0.1
++ -0.4
+ -2
+ 1
+ 0.05
+@@ -481,7 +481,7 @@
+
+ <_short>Away Angle
+ <_long>Angle of window at the end of the animation.
+- 0
++ -45
+ -540
+ 540
+ 5
+@@ -686,7 +686,7 @@
+
+ <_short>Springiness
+ <_long>How spring-like the Zoom animation should be.
+- 0.08
++ 0.0
+ 0
+ 1
+ 0.01
+diff -Nur original/plugins/commands/commands.xml.in modified/plugins/commands/commands.xml.in
+--- original/plugins/commands/commands.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/commands/commands.xml.in 2019-02-17 14:11:58.766082647 +0000
+@@ -117,7 +117,7 @@
+
+ <_short>Command line 20
+ <_long>Command line to be executed in shell when run_command20 is invoked
+- /usr/bin/gnome-system-monitor -p
++
+
+
+
+@@ -205,7 +205,6 @@
+
+ <_short>Run command 20
+ <_long>A keybinding that when invoked, will run the shell command identified by command20
+- <Control><Alt>Delete
+
+
+
+diff -Nur original/plugins/decor/decor.xml.in modified/plugins/decor/decor.xml.in
+--- original/plugins/decor/decor.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/decor/decor.xml.in 2019-02-17 14:13:24.345517674 +0000
+@@ -31,7 +31,7 @@
+
+ <_short>Shadow Opacity
+ <_long>Drop shadow opacity
+- 0.8
++ 0.5
+ 0.01
+ 6.0
+ 0.01
+@@ -66,7 +66,7 @@
+
+ <_short>Shadow Radius
+ <_long>Drop shadow radius
+- 5.0
++ 8.0
+ 0.1
+ 13.0
+ 0.1
+@@ -74,7 +74,7 @@
+
+ <_short>Shadow Opacity
+ <_long>Drop shadow opacity
+- 0.4
++ 0.5
+ 0.01
+ 6.0
+ 0.01
+@@ -101,7 +101,7 @@
+
+ <_short>Command
+ <_long>Decorator command line that is executed if no decorator is already running.
+- gtk-window-decorator
++ exec /usr/bin/compiz-decorator
+
+
+ <_short>Mipmap
+diff -Nur original/plugins/expo/expo.xml.in modified/plugins/expo/expo.xml.in
+--- original/plugins/expo/expo.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/expo/expo.xml.in 2019-02-17 14:11:58.766082647 +0000
+@@ -17,7 +17,6 @@
+ wobbly
+ animation
+ wallpaper
+- imgpng
+
+
+
+@@ -26,7 +25,7 @@
+
+ <_short>Expo Key
+ <_long>Initiate or terminate Expo mode with this keyboard shortcut.
+- <Super>s
++ <Super>e
+
+
+ <_short>Expo Button
+@@ -37,6 +36,7 @@
+ <_short>Expo Corner/Edge
+ <_long>Initiate or terminate Expo mode by moving the pointer to this corner or edge of your screen(s).
+
++
+
+
+
+@@ -80,7 +80,7 @@
+
+ <_short>Animation Duration
+ <_long>Duration of the selected animation (in seconds).
+- 0.3
++ 0.5
+ 0.1
+ 5.0
+ 0.1
+@@ -146,12 +146,12 @@
+
+ <_short>X Offset
+ <_long>Horizontal offset (in pixels).
+- 64
++ 0
+
+
+ <_short>Y Offset
+ <_long>Vertical offset (in pixels).
+- 24
++ 0
+
+
+ <_short>Y Bottom Offset
+@@ -170,7 +170,7 @@
+
+ <_short>Viewport Distance
+ <_long>The distance between viewports in Expo mode.
+- 0.2
++ 0.10
+ 0.0
+ 1.0
+ 0.01
+@@ -198,7 +198,7 @@
+ <_long>How the Expo wall should be displayed, if multiple output devices are used.
+ 0
+ 1
+- 1
++ 0
+
+ 0
+ <_name>One big wall
+@@ -213,7 +213,7 @@
+
+ <_short>Brightness
+ <_long>The brightness of unfocused viewports (in percent).
+- 40.0
++ 75.0
+ 0.0
+ 100.0
+ 0.1
+@@ -233,7 +233,7 @@
+ 0xfbfb
+ 0x8b8b
+ 0x0
+- 0xffff
++ 0x0
+
+
+
+@@ -242,7 +242,7 @@
+
+ <_short>Reflection
+ <_long>Render a realtime reflection of the viewports on the ground.
+- false
++ true
+
+
+ <_short>Ground Color (near)
+diff -Nur original/plugins/ezoom/ezoom.xml.in modified/plugins/ezoom/ezoom.xml.in
+--- original/plugins/ezoom/ezoom.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/ezoom/ezoom.xml.in 2019-02-17 14:11:58.766082647 +0000
+@@ -30,7 +30,7 @@
+
+ <_short>Zoom In Button
+ <_long>Mouse button shortcut to invoke zooming in.
+-
++ <Super>Button4
+
+
+ <_short>Zoom In Key
+@@ -39,7 +39,7 @@
+
+ <_short>Zoom Out Button
+ <_long>Mouse button shortcut to invoke zooming out.
+-
++ <Super>Button5
+
+
+ <_short>Zoom Out Key
+@@ -48,7 +48,7 @@
+
+ <_short>Invoke Zoom Box Button
+ <_long>Define a rectangle area and zoom into it.
+-
++ <Super>Button2
+
+
+ <_short>Zoom Box Outline Color
+@@ -346,7 +346,7 @@
+
+ <_short>Fit zoomed area to window
+ <_long>Zooms in/out so the focused window is zoomed to the maximum while still being fully visible.
+-
++ <Super>r
+
+
+
+diff -Nur original/plugins/fade/fade.xml.in modified/plugins/fade/fade.xml.in
+--- original/plugins/fade/fade.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/fade/fade.xml.in 2019-02-17 14:11:58.772752647 +0000
+@@ -10,7 +10,6 @@
+
+
+ decor
+- staticswitcher
+
+
+ cube
+@@ -51,7 +50,7 @@
+
+ <_short>Fade windows
+ <_long>Windows that should be fading
+- any & !(title=notify-osd)
++ any
+
+
+ <_short>Visual Bell
+diff -Nur original/plugins/gnomecompat/gnomecompat.xml.in modified/plugins/gnomecompat/gnomecompat.xml.in
+--- original/plugins/gnomecompat/gnomecompat.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/gnomecompat/gnomecompat.xml.in 2019-02-17 14:11:58.772752647 +0000
+@@ -57,7 +57,6 @@
+
+ <_short>Open a terminal
+ <_long>Open a terminal
+- <Control><Alt>T
+
+
+
+diff -Nur original/plugins/grid/grid.xml.in modified/plugins/grid/grid.xml.in
+--- original/plugins/grid/grid.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/grid/grid.xml.in 2019-02-17 14:11:58.779422647 +0000
+@@ -68,12 +68,12 @@
+
+ <_short>Maximize Key
+ <_long>Maximize window.
+- <Control><Super>Up
++ <Control><Alt>KP_0
+
+
+ <_short>Restore
+ <_long>Restore window to it's original size. Note: Use the same shortcut you are using to unmaximize a window to be able to restore grid-maximized windows.
+- <Control><Super>Down
++ <Alt>F5
+
+
+ <_short>Left Maximize
+diff -Nur original/plugins/resize/resize.xml.in modified/plugins/resize/resize.xml.in
+--- original/plugins/resize/resize.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/resize/resize.xml.in 2019-02-17 14:11:58.779422647 +0000
+@@ -56,7 +56,7 @@
+
+ Maximize Vertically if screen edge hit
+ Maximizes the window vertically if the top or bottom screen edge is hit while resizing
+- true
++ false
+
+
+ <_short>Use a double-border in 'Rectangle' and 'Outline' modes
+@@ -72,9 +72,9 @@
+ <_short>Border Color
+ <_long>Border color used for outline and rectangle resize modes
+
+- 0xfbfb
+- 0x8b8b
+- 0x0
++ 0x2f2f
++ 0x2f2f
++ 0x4f4f
+ 0x9f9f
+
+
+@@ -82,10 +82,10 @@
+ <_short>Fill Color
+ <_long>Fill color used for rectangle resize mode
+
+- 0xfbfb
+- 0x8b8b
+- 0x0
+- 0x1919
++ 0x2f2f
++ 0x2f2f
++ 0x4f4f
++ 0x4f4f
+
+
+
+diff -Nur original/plugins/scale/scale.xml.in modified/plugins/scale/scale.xml.in
+--- original/plugins/scale/scale.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/scale/scale.xml.in 2019-02-17 14:11:58.779422647 +0000
+@@ -21,7 +21,7 @@
+
+ <_short>Spacing
+ <_long>Space between windows
+- 20
++ 10
+ 0
+ 250
+
+@@ -46,7 +46,7 @@
+
+ <_short>Speed
+ <_long>Scale speed
+- 5.0
++ 1.5
+ 0.1
+ 50
+ 0.1
+@@ -54,7 +54,7 @@
+
+ <_short>Timestep
+ <_long>Scale timestep
+- 0.1
++ 1.2
+ 0.1
+ 50
+ 0.1
+@@ -67,7 +67,7 @@
+
+ <_short>Opacity
+ <_long>Amount of opacity in percent
+- 100
++ 75
+ 0
+ 100
+
+@@ -76,7 +76,7 @@
+ <_long>Overlay an icon on windows once they are scaled
+ 0
+ 2
+- 0
++ 1
+
+ 0
+ <_name>None
+@@ -129,7 +129,7 @@
+ <_long>Selects where windows are scaled if multiple output devices are used.
+ 0
+ 1
+- 1
++ 0
+
+ 0
+ <_name>On current output device
+@@ -150,7 +150,7 @@
+
+ <_short>Key Bindings Toggle Scale Mode
+ <_long>Key bindings toggle scale mode instead of enabling it when pressed and disabling it when released.
+- true
++ false
+
+
+ <_short>Button Bindings Toggle Scale Mode
+@@ -160,12 +160,15 @@
+
+ <_short>Initiate Window Picker
+ <_long>Layout and start transforming windows
++
++
++
+
+
+
+ <_short>Initiate Window Picker
+ <_long>Layout and start transforming windows
+- <Super>w
++ <Shift><Alt>Up
+
+
+ <_short>Initiate Window Picker
+@@ -183,7 +186,6 @@
+
+ <_short>Initiate Window Picker For All Windows
+ <_long>Layout and start transforming all windows
+- <Super><Shift>w
+
+
+ <_short>Initiate Window Picker For Window Group
+diff -Nur original/plugins/staticswitcher/staticswitcher.xml.in modified/plugins/staticswitcher/staticswitcher.xml.in
+--- original/plugins/staticswitcher/staticswitcher.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/staticswitcher/staticswitcher.xml.in 2019-02-17 14:11:58.782757647 +0000
+@@ -11,6 +11,7 @@
+
+ composite
+ opengl
++ fade
+ compiztoolbox
+ decor
+
+@@ -139,12 +140,12 @@
+
+ <_short>Auto Change Viewport
+ <_long>Change to the viewport of the selected window while switching
+- true
++ false
+
+
+ <_short>Popup Window Delay
+ <_long>Time (in s) the popup window should be delayed before appearing
+- 0.2
++ 0.0
+ 0.0
+ 2.0
+ 0.05
+@@ -152,7 +153,7 @@
+
+ <_short>Allow Mouse Selection
+ <_long>Allow selection of windows from the switcher window with the mouse
+- true
++ false
+
+
+
+@@ -160,14 +161,14 @@
+
+ <_short>Saturation
+ <_long>Amount of saturation in percent
+- 100
++ 50
+ 0
+ 100
+
+
+ <_short>Brightness
+ <_long>Amount of brightness in percent
+- 100
++ 50
+ 0
+ 100
+
+@@ -191,7 +192,7 @@
+
+ <_short>Mipmap
+ <_long>Generate mipmaps when possible for higher quality scaling
+- false
++ true
+
+
+ <_short>Row Alignment
+@@ -220,7 +221,7 @@
+
+ <_short>Bring To Front
+ <_long>Bring selected window to front
+- false
++ true
+
+ <_short>Selected Window Highlight
+
+@@ -228,7 +229,7 @@
+ <_long>Mode for highlighting the currently selected window
+ 0
+ 2
+- 0
++ 1
+
+ 0
+ <_name>None
+diff -Nur original/plugins/vpswitch/vpswitch.xml.in modified/plugins/vpswitch/vpswitch.xml.in
+--- original/plugins/vpswitch/vpswitch.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/vpswitch/vpswitch.xml.in 2019-02-17 14:11:58.782757647 +0000
+@@ -95,11 +95,13 @@
+
+ <_short>Move Next
+ <_long>Move to the next viewport
++ Button5
+
+
+
+ <_short>Move Prev
+ <_long>Move to the previous viewport
++ Button4
+
+
+
+diff -Nur original/plugins/wall/wall.xml.in modified/plugins/wall/wall.xml.in
+--- original/plugins/wall/wall.xml.in 2019-02-16 12:44:41.000000000 +0000
++++ modified/plugins/wall/wall.xml.in 2019-02-17 14:11:58.782757647 +0000
+@@ -30,12 +30,12 @@
+
+ <_short>Show Live Viewport Previews
+ <_long>Show live viewport previews in switcher window
+- true
++ false
+
+
+ <_short>Switch Target Preview Visibility Time
+ <_long>Duration (in s) the switch target preview should remain visible after switching ends.
+- 0.2
++ 0.4
+ 0.0
+ 2.0
+ 0.05
+@@ -43,7 +43,7 @@
+
+ <_short>Preview Scale
+ <_long>Size of the preview in %
+- 130
++ 100
+ 0
+ 400
+
+@@ -57,7 +57,7 @@
+
+ <_short>Border Width
+ <_long>Width of the border between the previews
+- 7
++ 10
+ 0
+ 30
+
+@@ -65,10 +65,10 @@
+ <_short>Outline Color
+ <_long>Outline color of the switcher window.
+
+- 0xffff
+- 0xffff
+- 0xffff
+- 0x3232
++ 0x3333
++ 0x3333
++ 0x3333
++ 0xd998
+
+
+
+@@ -78,30 +78,30 @@
+ <_short>Base Color
+ <_long>First color for the background gradient of the switcher window.
+
+- 0x0000
+- 0x0000
+- 0x0000
+- 0x6464
++ 0xcccc
++ 0xcccc
++ 0xe665
++ 0xd998
+
+
+
+ <_short>Highlight Color
+ <_long>Second color for the background gradient of the switcher window.
+
+- 0x0000
+- 0x0000
+- 0x0000
+- 0x6464
++ 0xf332
++ 0xf332
++ 0xffff
++ 0xd998
+
+
+
+ <_short>Shadow Color
+ <_long>Third color for the background gradient of the switcher window.
+
+- 0x0000
+- 0x0000
+- 0x0000
+- 0x6464
++ 0xf332
++ 0xf332
++ 0xffff
++ 0xd998
+
+
+
+@@ -112,20 +112,20 @@
+ <_short>Base Color
+ <_long>First color for the thumb gradient of the switcher window.
+
+- 0x5555
+- 0x5555
+- 0x5555
+- 0x3232
++ 0x3333
++ 0x3333
++ 0x3333
++ 0x5999
+
+
+
+ <_short>Highlight Color
+ <_long>Second color for the thumb gradient of the switcher window.
+
+- 0x5555
+- 0x5555
+- 0x5555
+- 0x3232
++ 0x3fff
++ 0x3fff
++ 0x3fff
++ 0x3fff
+
+
+
+@@ -139,7 +139,7 @@
+ 0xffff
+ 0xffff
+ 0xffff
+- 0xffff
++ 0xf332
+
+
+
+@@ -149,7 +149,7 @@
+ 0xdfff
+ 0xdfff
+ 0xdfff
+- 0xffff
++ 0xa665
+
+
+
+@@ -201,7 +201,7 @@
+
+ <_short>Auto Switch Vp And Window
+ <_long>Auto switch the viewport and move window when Alt-Tab to window that is more than half contained in another viewport
+- false
++ true
+
+
+
+@@ -356,7 +356,7 @@
+
+ <_short>Edge Flip Move
+ <_long>Flip viewport when moving a window to a screen edge
+- false
++ true
+
+
+ <_short>Edge Flip DnD
+diff -Nur original/tests/system/xorg-gtest/tests/compiz_xorg_gtest_ewmh.cpp modified/tests/system/xorg-gtest/tests/compiz_xorg_gtest_ewmh.cpp
+--- original/tests/system/xorg-gtest/tests/compiz_xorg_gtest_ewmh.cpp 2019-02-16 12:44:41.000000000 +0000
++++ modified/tests/system/xorg-gtest/tests/compiz_xorg_gtest_ewmh.cpp 2019-02-17 14:11:58.782757647 +0000
+@@ -46,7 +46,7 @@
+
+ namespace
+ {
+-unsigned int DEFAULT_VIEWPORT_WIDTH = 1;
++unsigned int DEFAULT_VIEWPORT_WIDTH = 4;
+ unsigned int DEFAULT_VIEWPORT_HEIGHT = 1;
+
+ bool Advance (Display *d, bool r)
diff --git a/patches/compiz/0002-focus-prevention-disable.patch b/patches/compiz/0002-focus-prevention-disable.patch
new file mode 100644
index 000000000..df2fcef10
--- /dev/null
+++ b/patches/compiz/0002-focus-prevention-disable.patch
@@ -0,0 +1,12 @@
+diff -Naur original/metadata/core.xml.in modified/metadata/core.xml.in
+--- original/metadata/core.xml.in 2013-07-23 20:58:03.000000000 +0100
++++ modified/metadata/core.xml.in 2014-06-11 09:06:53.839302487 +0100
+@@ -114,7 +114,7 @@
+ <_long>Level of focus stealing prevention
+ 0
+ 4
+- 1
++ 0
+
+ 0
+ <_name>Off
diff --git a/patches/compiz/0003-gtk-extents.patch b/patches/compiz/0003-gtk-extents.patch
new file mode 100644
index 000000000..5c8ec1ec2
--- /dev/null
+++ b/patches/compiz/0003-gtk-extents.patch
@@ -0,0 +1,13 @@
+# Diff from https://code.launchpad.net/~albertsmuktupavels/compiz/add-gtk-frame-extents-to-net-supported/+merge/257303
+=== modified file 'src/screen.cpp'
+--- a/src/screen.cpp 2014-12-02 19:37:10 +0000
++++ b/src/screen.cpp 2015-04-23 20:41:24 +0000
+@@ -2362,6 +2362,7 @@
+
+ atoms.push_back (Atoms::wmUserTime);
+ atoms.push_back (Atoms::frameExtents);
++ atoms.push_back (Atoms::frameGtkExtents);
+ atoms.push_back (Atoms::frameWindow);
+
+ atoms.push_back (Atoms::winState);
+
diff --git a/patches/compiz/0004-screenshot-launch-fix.patch b/patches/compiz/0004-screenshot-launch-fix.patch
new file mode 100644
index 000000000..3bd753f8a
--- /dev/null
+++ b/patches/compiz/0004-screenshot-launch-fix.patch
@@ -0,0 +1,15 @@
+diff -rupN compiz/plugins/screenshot/src/screenshot.cpp compiz.new/plugins/screenshot/src/screenshot.cpp
+--- compiz/plugins/screenshot/src/screenshot.cpp 2014-09-01 00:21:45.807271000 -0400
++++ compiz.new/plugins/screenshot/src/screenshot.cpp 2014-09-01 00:52:30.634288167 -0400
+@@ -434,10 +434,10 @@ namespace
+ compLogMessage ("screenshot", CompLogLevelWarn, "glReadPixels failed");
+ }
+
+- if (!success)
++ if (success)
+ success =
+ launchApplicationAndTakeScreenshot (alternativeApplication,
+- directory);
++ path);
+
+ return success;
\ No newline at end of file
diff --git a/patches/compiz/0005-no-compile-gschemas.patch b/patches/compiz/0005-no-compile-gschemas.patch
new file mode 100644
index 000000000..05627a858
--- /dev/null
+++ b/patches/compiz/0005-no-compile-gschemas.patch
@@ -0,0 +1,19 @@
+diff -Nur original/cmake/recompile_gsettings_schemas_in_dir_user_env.cmake modified/cmake/recompile_gsettings_schemas_in_dir_user_env.cmake
+--- original/cmake/recompile_gsettings_schemas_in_dir_user_env.cmake 2019-02-16 12:44:41.000000000 +0000
++++ modified/cmake/recompile_gsettings_schemas_in_dir_user_env.cmake 2019-02-16 23:36:58.589706824 +0000
+@@ -15,9 +15,9 @@
+
+ find_program (GLIB_COMPILE_SCHEMAS glib-compile-schemas)
+
+-if (GLIB_COMPILE_SCHEMAS)
+-
+- message ("-- Recompiling GSettings schemas in ${SCHEMADIR}")
+- execute_process (COMMAND ${GLIB_COMPILE_SCHEMAS} ${SCHEMADIR})
+-
+-endif (GLIB_COMPILE_SCHEMAS)
++#if (GLIB_COMPILE_SCHEMAS)
++#
++# message ("-- Recompiling GSettings schemas in ${SCHEMADIR}")
++# execute_process (COMMAND ${GLIB_COMPILE_SCHEMAS} ${SCHEMADIR})
++#
++#endif (GLIB_COMPILE_SCHEMAS)
diff --git a/patches/compiz/0006-drop-toggle-shaded.patch b/patches/compiz/0006-drop-toggle-shaded.patch
new file mode 100644
index 000000000..d58598dd0
--- /dev/null
+++ b/patches/compiz/0006-drop-toggle-shaded.patch
@@ -0,0 +1,40 @@
+From 25b6fcf77f1731ac9e0949fafe8da00777e33ebc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jeremy=20B=C3=ADcha?=
+Date: Thu, 7 Mar 2024 15:46:39 -0500
+Subject: [PATCH 3/4] Drop toggle-shaded since it's no longer included in
+ gsettings-desktop-schemas 45
+
+---
+ gtk/gnome/50-compiz-windows.xml.in | 2 --
+ .../compiz-profile-independent-keys.convert | 1 -
+ 3 files changed, 28 deletions(-)
+ delete mode 100644 a
+
+diff --git a/gtk/gnome/50-compiz-windows.xml.in b/gtk/gnome/50-compiz-windows.xml.in
+index e947db654..5385ead1a 100644
+--- a/gtk/gnome/50-compiz-windows.xml.in
++++ b/gtk/gnome/50-compiz-windows.xml.in
+@@ -11,8 +11,6 @@
+
+
+
+-
+-
+
+
+
+diff --git a/postinst/convert-files/compiz-profile-independent-keys.convert b/postinst/convert-files/compiz-profile-independent-keys.convert
+index fdc949e4f..f15c23964 100644
+--- a/postinst/convert-files/compiz-profile-independent-keys.convert
++++ b/postinst/convert-files/compiz-profile-independent-keys.convert
+@@ -39,7 +39,6 @@ toggle-fullscreen = /apps/metacity/window_keybindings/toggle_fullscreen
+ toggle-maximized = /apps/metacity/window_keybindings/toggle_maximized
+ maximize = /apps/metacity/window_keybindings/maximize
+ unmaximize = /apps/metacity/window_keybindings/unmaximize
+-toggle-shaded = /apps/metacity/window_keybindings/toggle_shaded
+ close = /apps/metacity/window_keybindings/close
+ minimize = /apps/metacity/window_keybindings/minimize
+ begin-move = /apps/metacity/window_keybindings/begin_move
+--
+2.45.1
+
diff --git a/patches/compiz/0007-64-bit-time-t-compat.patch b/patches/compiz/0007-64-bit-time-t-compat.patch
new file mode 100644
index 000000000..cee1698cd
--- /dev/null
+++ b/patches/compiz/0007-64-bit-time-t-compat.patch
@@ -0,0 +1,43 @@
+Description: fix build with _TIME_BITS=64
+ The startup-notification API takes a long * where it ought to have always
+ taken a time_t *. As a consequence, changing the size of time_t makes
+ callers fail to build. Work around this by safely casting to a long.
+ This will continue to work on 32-bit systems until 2038, by which time
+ all the 32-bit systems will be dead or no longer running GUIs or at least
+ not using libstartup-notification0.
+Author: Steve Langasek
+Forwarded: no
+Last-Update: 2024-03-15
+
+Index: compiz-0.9.14.2+22.10.20220822/src/screen.cpp
+===================================================================
+--- compiz-0.9.14.2+22.10.20220822.orig/src/screen.cpp
++++ compiz-0.9.14.2+22.10.20220822/src/screen.cpp
+@@ -2315,19 +2315,22 @@
+ bool
+ cps::StartupSequence::handleStartupSequenceTimeout ()
+ {
+- struct timeval now, active;
++ struct timeval now;
+ double elapsed;
+
+ gettimeofday (&now, NULL);
+
+ foreach (CompStartupSequence *s, startupSequences)
+ {
++ /* workaround for broken startup-notification api that uses
++ a long where it should have used time_t */
++ long seconds, useconds;
+ sn_startup_sequence_get_last_active_time (s->sequence,
+- &active.tv_sec,
+- &active.tv_usec);
++ &seconds,
++ &useconds);
+
+- elapsed = ((((double) now.tv_sec - active.tv_sec) * 1000000.0 +
+- (now.tv_usec - active.tv_usec))) / 1000.0;
++ elapsed = ((((double) now.tv_sec - seconds) * 1000000.0 +
++ (now.tv_usec - useconds))) / 1000.0;
+
+ if (elapsed > STARTUP_TIMEOUT_DELAY)
+ sn_startup_sequence_complete (s->sequence);
diff --git a/patches/compiz/1001-fix-crash-in-vertexbuffer.patch b/patches/compiz/1001-fix-crash-in-vertexbuffer.patch
new file mode 100644
index 000000000..b44be7a86
--- /dev/null
+++ b/patches/compiz/1001-fix-crash-in-vertexbuffer.patch
@@ -0,0 +1,13 @@
+diff --git a/plugins/opengl/src/vertexbuffer.cpp b/plugins/opengl/src/vertexbuffer.cpp
+index b102016..4e314c2 100644
+--- a/plugins/opengl/src/vertexbuffer.cpp
++++ b/plugins/opengl/src/vertexbuffer.cpp
+@@ -164,7 +164,7 @@ void GLVertexBuffer::addVertices (GLuint nVertices, const GLfloat *vertices)
+
+ GLfloat *GLVertexBuffer::getVertices() const
+ {
+- return &priv->vertexData[0];
++ return priv->vertexData.data();
+ }
+
+ int GLVertexBuffer::getVertexStride() const
diff --git a/patches/libadwaita/without-adwaita-theme.patch b/patches/libadwaita/without-adwaita-theme.patch
new file mode 100644
index 000000000..5d03b5df3
--- /dev/null
+++ b/patches/libadwaita/without-adwaita-theme.patch
@@ -0,0 +1,70 @@
+diff --git a/src/adw-style-manager.c b/src/adw-style-manager.c
+index d27ebda5..fbdef7f6 100644
+--- a/src/adw-style-manager.c
++++ b/src/adw-style-manager.c
+@@ -126,6 +126,24 @@ enable_animations_cb (AdwStyleManager *self)
+ self->animation_timeout_id = 0;
+ }
+
++static void
++adw_style_manager_theme_changed(GSettings *settings, const char *key, GdkDisplay *display)
++{
++ char* theme = g_settings_get_string(settings, "gtk-theme");
++ char* color_scheme = g_settings_get_string(settings, "color-scheme");
++
++ if(!theme) {
++ theme = "Orchis-Dark";
++ }
++
++ gboolean is_dark_variant = NULL != strstr(theme, "-dark") || NULL != strstr(theme, "-Dark") || 0 == strcmp(color_scheme, "prefer-dark");
++
++ g_object_set(gtk_settings_get_for_display(display),
++ "gtk-theme-name", theme,
++ "gtk-application-prefer-dark-theme", is_dark_variant, NULL);
++}
++
++
+ static void
+ update_stylesheet (AdwStyleManager *self)
+ {
+@@ -251,22 +269,6 @@ adw_style_manager_constructed (GObject *object)
+ self,
+ G_CONNECT_SWAPPED);
+
+- if (!adw_is_granite_present () && !g_getenv ("GTK_THEME")) {
+- g_object_set (gtk_settings_get_for_display (self->display),
+- "gtk-theme-name", "Adwaita-empty",
+- NULL);
+-
+- self->provider = gtk_css_provider_new ();
+- gtk_style_context_add_provider_for_display (self->display,
+- GTK_STYLE_PROVIDER (self->provider),
+- GTK_STYLE_PROVIDER_PRIORITY_THEME);
+-
+- self->colors_provider = gtk_css_provider_new ();
+- gtk_style_context_add_provider_for_display (self->display,
+- GTK_STYLE_PROVIDER (self->colors_provider),
+- GTK_STYLE_PROVIDER_PRIORITY_THEME);
+- }
+-
+ self->animations_provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_string (self->animations_provider,
+ "* { transition: none; }");
+@@ -292,6 +294,17 @@ adw_style_manager_constructed (GObject *object)
+
+ update_dark (self);
+ update_stylesheet (self);
++
++ if (self->display && !adw_is_granite_present () && !g_getenv ("GTK_THEME")) {
++ GSettingsSchemaSource *schema_source =
++ g_settings_schema_source_get_default();
++ GSettingsSchema *schema = g_settings_schema_source_lookup(
++ schema_source, "org.gnome.desktop.interface", true);
++ GSettings *interface_settings = g_settings_new_full(schema, NULL, NULL);
++ g_object_set(gtk_settings_get_for_display(self->display), "gtk-theme-name", "Orchis-Dark", "gtk-application-prefer-dark-theme", TRUE, NULL);
++ adw_style_manager_theme_changed(interface_settings, "gtk-theme", self->display);
++ g_signal_connect (interface_settings, "changed", G_CALLBACK (adw_style_manager_theme_changed), self->display);
++ }
+ }
+
+ static void
diff --git a/patches/xfce4/source-system-xinitrc-scripts.patch b/patches/xfce4/source-system-xinitrc-scripts.patch
index d25f54628..3a207e3ab 100644
--- a/patches/xfce4/source-system-xinitrc-scripts.patch
+++ b/patches/xfce4/source-system-xinitrc-scripts.patch
@@ -1,8 +1,9 @@
-diff -upr xfce4-session-4.14.0.orig/scripts/xinitrc.in.in xfce4-session-4.14.0/scripts/xinitrc.in.in
---- xfce4-session-4.14.0.orig/scripts/xinitrc.in.in 2019-08-11 23:11:06.000000000 +0300
-+++ xfce4-session-4.14.0/scripts/xinitrc.in.in 2019-08-12 03:28:44.464707715 +0300
-@@ -83,6 +83,13 @@ if command -v systemctl >/dev/null 2>&1
- dbus-update-activation-environment --systemd XAUTHLOCALHOSTNAME=$XAUTHLOCALHOSTNAME
+diff --git a/scripts/xinitrc.in.in b/scripts/xinitrc.in.in
+index da82e079..c8875062 100755
+--- a/scripts/xinitrc.in.in
++++ b/scripts/xinitrc.in.in
+@@ -109,6 +109,14 @@ if command -v dbus-update-activation-environment >/dev/null 2>&1; then
+ XDG_STATE_HOME
fi
+# source system xinitrc scripts
@@ -12,6 +13,7 @@ diff -upr xfce4-session-4.14.0.orig/scripts/xinitrc.in.in xfce4-session-4.14.0/s
+ done
+ unset f
+fi
-
++
# check if we start xfce4-session with ck-launch-session. this is only
# required for starting from a console, not a login manager
+ if test "x$XFCE4_SESSION_WITH_CK" = "x1"; then
diff --git a/pkg/localize/localization.go b/pkg/localize/localization.go
new file mode 100644
index 000000000..e4394cc0a
--- /dev/null
+++ b/pkg/localize/localization.go
@@ -0,0 +1,85 @@
+package localize
+
+import (
+ "gopkg.in/yaml.v3"
+ "log"
+ "os"
+ "strings"
+)
+
+type Translation struct {
+ String string `yaml:"string"`
+ Translation string `yaml:"translation"`
+}
+
+var translations = map[string]map[string]string{}
+
+func Open(s string) (map[string]string, error) {
+ if _, err := os.Stat(s); os.IsNotExist(err) {
+ return map[string]string{}, nil
+ }
+ data, err := os.ReadFile(s)
+ if err != nil {
+ return nil, err
+ }
+ var ts []Translation
+ if err := yaml.Unmarshal(data, &ts); err != nil {
+ log.Fatal(err)
+ }
+ m := map[string]string{}
+ for _, t := range ts {
+ m[t.String] = t.Translation
+ }
+ return m, nil
+}
+
+func Save(s string, m map[string]string) error {
+ var ts []Translation
+ for k, v := range m {
+ ts = append(ts, Translation{
+ String: k,
+ Translation: v,
+ })
+ }
+ data, err := yaml.Marshal(&ts)
+ if err != nil {
+ return err
+ }
+ return os.WriteFile(s, data, 0644)
+}
+
+func Add(id string, data []byte) {
+ var ts []Translation
+ if err := yaml.Unmarshal(data, &ts); err != nil {
+ log.Fatal(err)
+ }
+ if _, ok := translations[id]; !ok {
+ translations[id] = map[string]string{}
+ }
+ for _, t := range ts {
+ translations[id][t.String] = t.Translation
+ }
+}
+
+func TranslateIn(id, str string) string {
+ ts, ok := translations[id]
+ if !ok {
+ return str
+ }
+
+ s, ok := ts[str]
+ if !ok {
+ return str
+ }
+ return s
+}
+
+func Translate(str string) string {
+ id := os.Getenv("LANG")
+ if id == "" {
+ return str
+ }
+
+ s := strings.Split(id, "_")
+ return TranslateIn(s[0], str)
+}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 23c56a16b..b2b30d904 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,6 +2,5 @@ include_directories(common)
include_directories(external)
add_subdirectory(pkgupd)
add_subdirectory(sysroot)
-add_subdirectory(srclang)
-add_subdirectory(initial-setup)
-add_subdirectory(welcome-tour)
\ No newline at end of file
+add_subdirectory(capsule)
+add_subdirectory(initial-setup)
\ No newline at end of file
diff --git a/src/capsule b/src/capsule
new file mode 160000
index 000000000..a69e63680
--- /dev/null
+++ b/src/capsule
@@ -0,0 +1 @@
+Subproject commit a69e636804a8cbc0a32cf2ed43a38250c482d804
diff --git a/src/common/Application.h b/src/common/Application.h
index c122a9e42..c67516dfe 100644
--- a/src/common/Application.h
+++ b/src/common/Application.h
@@ -71,6 +71,7 @@ struct Application {
std::cout << sep << c;
sep = "|";
}
+ std::cout << " ";
std::getline(std::cin, sep);
return sep;
}
diff --git a/src/initial-setup b/src/initial-setup
index c5a88307e..2835b2c61 160000
--- a/src/initial-setup
+++ b/src/initial-setup
@@ -1 +1 @@
-Subproject commit c5a88307e192d27b9d22a0f492214383cff76abd
+Subproject commit 2835b2c61d0fe2cc4a92b4ae5a663057ba4a5f1f
diff --git a/src/pkgupd b/src/pkgupd
index fe02fe672..2c5f8de97 160000
--- a/src/pkgupd
+++ b/src/pkgupd
@@ -1 +1 @@
-Subproject commit fe02fe67242ad5b7ed7a7554aafcde07122f9968
+Subproject commit 2c5f8de972f6e0e6a3a8c25eb36fc24eb98c15cd
diff --git a/src/srclang b/src/srclang
deleted file mode 160000
index 3751920e9..000000000
--- a/src/srclang
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 3751920e90486a8ca26de81c2380f825d53b237f
diff --git a/src/sysroot/Sysroot.cpp b/src/sysroot/Sysroot.cpp
index 2d372e9d0..0b83d2476 100644
--- a/src/sysroot/Sysroot.cpp
+++ b/src/sysroot/Sysroot.cpp
@@ -282,6 +282,10 @@ std::optional Sysroot::pull(const Deployment& deployment,
ostree_sysroot_cleanup(backend, nullptr, nullptr);
+ if (WEXITSTATUS(system("grub-mkconfig -o /boot/grub/grub.cfg")) != 0) {
+ std::cerr << "ERROR: failed to update grub configuration" << std::endl;
+ }
+
return updateInfo;
}
@@ -311,7 +315,7 @@ std::tuple Sysroot::get_changelog(
return {true, updated_revision,
refspec + ":" + updated_revision + " " + std::to_string(timestamp) +
- " " + subject + " " + body};
+ "\n" + subject + "\n" + body};
}
Deployment Sysroot::get_active() const {
diff --git a/src/welcome-tour/Application.cpp b/src/welcome-tour/Application.cpp
deleted file mode 100644
index bdb8e772f..000000000
--- a/src/welcome-tour/Application.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2024 Manjeet Singh .
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#include "Application.h"
-#include "Window.h"
-
-#include
-
-Application::Application() : Gtk::Application("dev.rlxos.WelcomeTour") {
-
-}
-
-Application::~Application() = default;
-
-Glib::RefPtr Application::create() {
- return Glib::RefPtr(new Application());
-}
-
-Window *Application::create_window() {
- if (get_windows().empty()) {
- auto window = Window::create();
- add_window(*window);
- }
- auto window = get_windows().front();
- window->signal_hide().connect(sigc::bind(sigc::mem_fun(*this, &Application::on_hide_window), window));
- return dynamic_cast(window);
-}
-
-void Application::on_activate() {
- try {
- auto window = create_window();
- window->present();
- } catch (const Glib::Error &error) {
- std::cerr << "Application::on_activate(): " << error.what() << std::endl;
- } catch (const std::exception &error) {
- std::cerr << "Application::on_activate(): " << error.what() << std::endl;
- }
-}
-
-void Application::on_startup() {
- Gtk::Application::on_startup();
-}
-
-void Application::on_hide_window(Gtk::Window *window) {
- quit();
-}
\ No newline at end of file
diff --git a/src/welcome-tour/Application.h b/src/welcome-tour/Application.h
deleted file mode 100644
index e29dd4d6c..000000000
--- a/src/welcome-tour/Application.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2024 Manjeet Singh .
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef RLXOS_APPLICATION_H
-#define RLXOS_APPLICATION_H
-
-#include
-
-class Window;
-
-class Application : public Gtk::Application {
-public:
- static Glib::RefPtr create();
-
- ~Application() override;
-
- void on_activate() override;
-
- void on_startup() override;
-
- void on_hide_window(Gtk::Window *window);
-
- Window *create_window();
-
-private:
- Application();
-};
-
-
-#endif //RLXOS_APPLICATION_H
diff --git a/src/welcome-tour/CMakeLists.txt b/src/welcome-tour/CMakeLists.txt
deleted file mode 100644
index 280a507f2..000000000
--- a/src/welcome-tour/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-cmake_minimum_required(VERSION 3.20)
-project(welcome-tour
- VERSION "0.0.1"
- DESCRIPTION "Welcome Tour"
- LANGUAGES C CXX)
-
-set(CMAKE_C_STANDARD 11)
-set(CMAKE_C_STANDARD_REQUIRED ON)
-
-set(CMAKE_CXX_STANDARD 20)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-include(GLibUtils)
-include(GNUInstallDirs)
-
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(GTK IMPORTED_TARGET REQUIRED gtkmm-3.0)
-
-set(GENERATED_GRESOURCE_FILE ${PROJECT_BINARY_DIR}/gresource.c)
-add_executable(${PROJECT_NAME}
- main.cpp
- Application.cpp
- Application.h
- Window.cpp
- Window.h
- ${GENERATED_GRESOURCE_FILE}
-)
-
-compile_resources(${PROJECT_SOURCE_DIR}/gresource.xml
- ${GENERATED_GRESOURCE_FILE}
- Window.ui)
-
-target_link_libraries(${PROJECT_NAME} PRIVATE
- PkgConfig::GTK)
-
-install(TARGETS ${PROJECT_NAME}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
\ No newline at end of file
diff --git a/src/welcome-tour/Window.cpp b/src/welcome-tour/Window.cpp
deleted file mode 100644
index 04d90fdc9..000000000
--- a/src/welcome-tour/Window.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2024 Manjeet Singh .
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#include "Window.h"
-
-#include
-#include
-
-#define OS_RELEASE_FILE "/etc/os-release"
-
-Window::Window(Gtk::ApplicationWindow::BaseObjectType *object, const Glib::RefPtr &builder)
- : Gtk::ApplicationWindow(object) {
- builder->get_widget("back-button", back_btn);
- back_btn->signal_clicked().connect(sigc::mem_fun(*this, &Window::on_back_btn_clicked));
-
- builder->get_widget("next-button", next_btn);
- next_btn->signal_clicked().connect(sigc::mem_fun(*this, &Window::on_next_btn_clicked));
-
- builder->get_widget("exit-button", exit_btn);
- exit_btn->signal_clicked().connect(sigc::mem_fun(*this, &Window::on_exit_btn_clicked));
-
- builder->get_widget("welcome-heading", welcome_heading);
- builder->get_widget("welcome-message", welcome_message);
-
- builder->get_widget("stack", stack);
-
-
- {
- std::ifstream reader(OS_RELEASE_FILE);
- if (reader.good()) {
- for (std::string line; std::getline(reader, line, '\n');) {
- if ((line.starts_with("NAME=") && name.empty()) || line.starts_with("PRETTY_NAME=")) {
- name = line.substr(line.find('=') + 1);
- }
-
- if ((line.starts_with("VERSION=") && version.empty()) || line.starts_with("IMAGE_VERSION=")) {
- version = line.substr(line.find('=') + 1);
- }
- }
- }
- if (!name.empty()) {
- auto start = name.find_first_not_of('"');
- name = name.substr(start, name.find_last_not_of('"') - start + 1);
- }
-
- if (!version.empty()) {
- auto start = version.find_first_not_of('"');
- version = version.substr(start, version.find_last_not_of('"') - start + 1);
- }
-
- }
- if (name.empty()) {
- name = "Linux Distribution";
- }
- welcome_heading->set_text("Welcome to " + name + " " + (version.empty() ? "" : version));
-
- update_buttons();
-}
-
-Window::~Window() = default;
-
-Window *Window::create() {
- auto builder = Gtk::Builder::create_from_resource("/dev/rlxos/WelcomeTour/Window.ui");
- Window *window = nullptr;
-
- builder->get_widget_derived("window", window);
- if (window == nullptr) {
- throw std::runtime_error("No 'window' object in resource::window.ui");
- }
-
- return window;
-}
-
-void Window::update_buttons() {
- auto cur_page = stack->child_property_position(*stack->get_visible_child()).get_value();
- back_btn->set_sensitive(cur_page != 0);
- next_btn->set_sensitive(cur_page < stack->get_children().size() - 1);
-}
-
-void Window::on_next_btn_clicked() {
- stack->set_visible_child(
- *stack->get_children()[stack->child_property_position(*stack->get_visible_child()).get_value() + 1]);
- update_buttons();
-}
-
-void Window::on_back_btn_clicked() {
- stack->set_visible_child(
- *stack->get_children()[stack->child_property_position(*stack->get_visible_child()).get_value() - 1]);
- update_buttons();
-}
-
-void Window::on_exit_btn_clicked() {
- std::filesystem::path HOME = getenv("HOME") ? getenv("HOME") : "/";
- auto file = HOME / ".welcome-tour-done";
-
- std::ofstream writer(file);
- writer << version;
- this->get_application()->quit();
-}
diff --git a/src/welcome-tour/Window.h b/src/welcome-tour/Window.h
deleted file mode 100644
index d1903a4ed..000000000
--- a/src/welcome-tour/Window.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2024 Manjeet Singh .
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef RLXOS_WINDOW_H
-#define RLXOS_WINDOW_H
-
-#include
-
-class Window : public Gtk::ApplicationWindow {
-public:
- Window(Gtk::ApplicationWindow::BaseObjectType *object, const Glib::RefPtr &builder);
-
- ~Window() override;
-
- static Window *create();
-
-protected:
- void on_next_btn_clicked();
-
- void on_back_btn_clicked();
-
- void on_exit_btn_clicked();
-
-private:
- Gtk::Button *back_btn{}, *next_btn{}, *exit_btn{};
- Gtk::Stack *stack{};
- Gtk::Label *welcome_heading{}, *welcome_message{};
- std::string name;
- std::string version;
-
- void update_buttons();
-};
-
-
-#endif //RLXOS_WINDOW_H
diff --git a/src/welcome-tour/Window.ui b/src/welcome-tour/Window.ui
deleted file mode 100644
index 6adf04b4d..000000000
--- a/src/welcome-tour/Window.ui
+++ /dev/null
@@ -1,648 +0,0 @@
-
-
-
-
-
- False
- False
- center-always
- 800
- 600
-
-
- True
- False
- 350
- slide-left-right
-
-
- True
- False
- vertical
- center
- center
- 90
-
-
- True
- False
- 40
- 256
- rlxos-logo
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 10
- {{ Welcome Heading }}
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- Follow the guided tour to know more about your
-operating system and new features of this release
- center
- True
-
-
- False
- True
- 2
-
-
-
-
- True
- False
- 45
- spread
-
-
- gtk-home
- True
- True
- True
- none
- True
- https://rlxos.dev/
-
-
- True
- True
- 0
-
-
-
-
- gtk-help
- True
- True
- True
- none
- True
- https://github.com/itsManjeet/rlxos/discussions
-
-
- True
- True
- 1
-
-
-
-
- Docs
- True
- True
- True
- none
- https://docs.rlxos.dev
-
-
- True
- True
- 2
-
-
-
-
- False
- True
- end
- 4
-
-
-
-
- page0
- page0
-
-
-
-
- True
- False
- center
- center
- 50
- 50
- vertical
-
-
- True
- False
- 17
- 128
- preferences-system
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 7
- Easy to manage
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 64
- Drag and drop apps from and to <b>~/Applications</b> to install or remove applications
- True
- center
- True
-
-
- False
- True
- 2
-
-
-
-
- Visit App Market
- True
- True
- True
- center
- none
- https://apps.rlxos.dev
-
-
- False
- True
- 3
-
-
-
-
- page1
- page1
- 1
-
-
-
-
- True
- False
- center
- center
- 50
- 50
- vertical
-
-
- True
- False
- 17
- 128
- computer
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 7
- Easy to Use
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 64
- Simple, Efficient and Beautiful interface that feels like home
- True
- center
-
-
- False
- True
- 2
-
-
-
-
- Get Started
- True
- True
- True
- center
- none
- https://docs.rlxos.dev
-
-
- False
- True
- 3
-
-
-
-
- page2
- page2
- 2
-
-
-
-
- True
- False
- center
- center
- 50
- 50
- 50
- 50
- vertical
-
-
- True
- False
- 17
- 128
- security-high
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 7
- Safe and Secure
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 64
- Surf Internet securly with rock solid Immutable Architecture and *Linux Kernel at core
- True
- center
- True
-
-
- False
- True
- 2
-
-
-
-
- True
- True
- True
- center
- none
-
-
- False
- True
- 3
-
-
-
-
- page3
- page3
- 3
-
-
-
-
- True
- False
- center
- center
- 50
- 50
- 50
- 50
- vertical
-
-
- True
- False
- 17
- 128
- folder-download
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 7
- Extensible
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 64
- Layer extensions to enhance your system capabilities
- True
- center
-
-
- False
- True
- 2
-
-
-
-
- Know more
- True
- True
- True
- center
- none
- https://docs.rlxos.dev
-
-
- False
- True
- 3
-
-
-
-
- page4
- page4
- 4
-
-
-
-
- True
- False
- center
- center
- 50
- 50
- 50
- 50
- vertical
-
-
- True
- False
- 17
- 128
- help
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 7
- Help and Support
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 64
- Visit beginners friendly help and support community forums to get help.
- True
- center
-
-
- False
- True
- 2
-
-
-
-
- Community Forum
- True
- True
- True
- center
- none
- https://github.com/itsManjeet/rlxos/discussions
-
-
- False
- True
- 3
-
-
-
-
- page5
- page5
- 5
-
-
-
-
- True
- False
- center
- center
- 50
- 50
- 50
- 50
- vertical
-
-
- True
- False
- 17
- 128
- process-completed
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 7
- Enjoy!
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 64
- You are now ready to dive into the new release of rlxos
- True
- center
-
-
- False
- True
- 2
-
-
-
-
- Finish
- True
- True
- True
- center
- center
-
-
-
- False
- True
- 3
-
-
-
-
- page6
- page6
- 6
-
-
-
-
-
-
-
-
-
diff --git a/src/welcome-tour/gresource.xml b/src/welcome-tour/gresource.xml
deleted file mode 100644
index 58f7c42a6..000000000
--- a/src/welcome-tour/gresource.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- Window.ui
-
-
\ No newline at end of file
diff --git a/src/welcome-tour/main.cpp b/src/welcome-tour/main.cpp
deleted file mode 100644
index 1e0bc0430..000000000
--- a/src/welcome-tour/main.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2024 Manjeet Singh .
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#include "Application.h"
-#include
-
-int main(int argc, char **argv) {
- std::filesystem::path HOME = getenv("HOME") ? getenv("HOME") : "/";
- auto file = HOME / ".welcome-tour-done";
- if (std::filesystem::exists(file) && getenv("WELCOME_TOUR_AUTOSTART")) return 0;
-
- auto app = Application::create();
- return app->run(argc, argv);
-}
\ No newline at end of file
diff --git a/tools/genlocale/main.go b/tools/genlocale/main.go
new file mode 100644
index 000000000..a2182d832
--- /dev/null
+++ b/tools/genlocale/main.go
@@ -0,0 +1,72 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "path/filepath"
+ "regexp"
+ "rlxos/pkg/localize"
+ "strings"
+)
+
+var (
+ path string
+)
+
+func init() {
+ curdir, _ := os.Getwd()
+ flag.StringVar(&path, "path", curdir, "path to locale")
+}
+
+func main() {
+ flag.Parse()
+
+ if len(flag.Args()) == 0 {
+ fmt.Println("usage: genlocale -path ")
+ flag.Usage()
+ os.Exit(1)
+ }
+ locale, err := localize.Open(flag.Args()[0])
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ localePath := filepath.Join(path, "locale")
+
+ re := regexp.MustCompile(`T\("([^"]*)"\)`)
+
+ if err := filepath.Walk(path, func(p string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if info.IsDir() || filepath.Ext(p) != ".go" || strings.Contains(p, localePath) {
+ return nil
+ }
+
+ data, err := os.ReadFile(p)
+ if err != nil {
+ return err
+ }
+
+ matches := re.FindAllStringSubmatch(string(data), -1)
+ for _, match := range matches {
+ if len(match) > 1 {
+ if _, ok := locale[match[1]]; !ok {
+ locale[match[1]] = match[1]
+ }
+
+ }
+ }
+
+ return nil
+ }); err != nil {
+ log.Fatal(err)
+ }
+
+ if err := localize.Save(flag.Args()[0], locale); err != nil {
+ log.Fatal(err)
+ }
+}