Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package qubesome for openSUSE:Factory 
checked in at 2025-10-06 18:07:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qubesome (Old)
 and      /work/SRC/openSUSE:Factory/.qubesome.new.11973 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "qubesome"

Mon Oct  6 18:07:48 2025 rev:9 rq:1309121 version:0.0.13

Changes:
--------
--- /work/SRC/openSUSE:Factory/qubesome/qubesome.changes        2025-09-09 
20:30:34.442058065 +0200
+++ /work/SRC/openSUSE:Factory/.qubesome.new.11973/qubesome.changes     
2025-10-06 18:08:00.078951635 +0200
@@ -1,0 +2,19 @@
+Sun Oct 05 21:23:01 UTC 2025 - Paulo Gomes <[email protected]>
+
+- Update to version 0.0.13:
+  * build: Bump PROTOC to v32.1
+  * build: Bump golangci-lint to v2.5.0
+  * build: Remove redundant tenv linter
+  * Drop redundant //nolint
+  * headless: Disable mime handling The way that mime handling works at the 
moment, it is incompatible with headless mode. Therefore always disables it 
before sending the workload to the runner.
+  * profiles: Mount dbus system bus path
+  * run: Expose Wayland env variables to workloads
+  * start: Improve start of profile in Wayland
+  * Add fallback resolution In cases were xrandr or wlr-randr are not 
available, or return an error, fall back to a 1440x1080 resolution. This avoids 
silent failures which can be difficult to pinpoint.
+  * Add headless subcommand
+  * build(deps): bump the github-actions-updates group with 5 updates
+  * build(deps): bump github.com/cyphar/filepath-securejoin
+  * build(deps): bump google.golang.org/protobuf from 1.36.8 to 1.36.9
+  * build(deps): bump google.golang.org/grpc from 1.75.0 to 1.75.1
+
+-------------------------------------------------------------------

Old:
----
  qubesome-0.0.12.tar.gz

New:
----
  qubesome-0.0.13.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ qubesome.spec ++++++
--- /var/tmp/diff_new_pack.F3w7MK/_old  2025-10-06 18:08:02.403049221 +0200
+++ /var/tmp/diff_new_pack.F3w7MK/_new  2025-10-06 18:08:02.427050229 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           qubesome
-Version:        0.0.12
+Version:        0.0.13
 Release:        0
 Summary:        Containerize Window Managers, apps and config from a 
declarative state in Git
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.F3w7MK/_old  2025-10-06 18:08:02.835067361 +0200
+++ /var/tmp/diff_new_pack.F3w7MK/_new  2025-10-06 18:08:02.895069880 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/qubesome/cli.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v0.0.12</param>
+    <param name="revision">v0.0.13</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="match-tag">v*</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.F3w7MK/_old  2025-10-06 18:08:03.147080462 +0200
+++ /var/tmp/diff_new_pack.F3w7MK/_new  2025-10-06 18:08:03.235084157 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/qubesome/cli.git</param>
-              <param 
name="changesrevision">7f18a9461957b978fa5dd41cfc95f917b9f754ee</param></service></servicedata>
+              <param 
name="changesrevision">67a4cbcb3abe3fb3c441f18b4ac23ad470089ee7</param></service></servicedata>
 (No newline at EOF)
 

++++++ qubesome-0.0.12.tar.gz -> qubesome-0.0.13.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/.golangci.yaml 
new/qubesome-0.0.13/.golangci.yaml
--- old/qubesome-0.0.12/.golangci.yaml  2025-09-08 13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/.golangci.yaml  2025-10-05 23:10:31.000000000 +0200
@@ -1,5 +1,6 @@
+version: "2"
 linters:
-  disable-all: true
+  default: none
   enable:
     - asasalint
     - asciicheck
@@ -22,13 +23,10 @@
     - gochecknoinits
     - gochecksumtype
     - goconst
-    - gofmt
     - goheader
-    - goimports
     - gomodguard
     - goprintffuncname
     - gosec
-    - gosimple
     - gosmopolitan
     - govet
     - grouper
@@ -53,18 +51,38 @@
     - sloglint
     - spancheck
     - sqlclosecheck
-    - stylecheck
+    - staticcheck
     - tagalign
     - tagliatelle
-    - tenv
     - testableexamples
     - thelper
     - tparallel
-    - typecheck
     - unconvert
     - unparam
     - unused
     - usestdlibvars
+    - usetesting
     - wastedassign
     - whitespace
     - zerologlint
+  exclusions:
+    generated: lax
+    presets:
+      - comments
+      - common-false-positives
+      - legacy
+      - std-error-handling
+    paths:
+      - third_party$
+      - builtin$
+      - examples$
+formatters:
+  enable:
+    - gofmt
+    - goimports
+  exclusions:
+    generated: lax
+    paths:
+      - third_party$
+      - builtin$
+      - examples$
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/cmd/cli/headless.go 
new/qubesome-0.0.13/cmd/cli/headless.go
--- old/qubesome-0.0.12/cmd/cli/headless.go     1970-01-01 01:00:00.000000000 
+0100
+++ new/qubesome-0.0.13/cmd/cli/headless.go     2025-10-05 23:10:31.000000000 
+0200
@@ -0,0 +1,55 @@
+package cli
+
+import (
+       "context"
+
+       "github.com/qubesome/cli/internal/qubesome"
+       "github.com/urfave/cli/v3"
+)
+
+var conf string
+
+func headlessCommand() *cli.Command {
+       cmd := &cli.Command{
+               Name:  "headless",
+               Usage: "execute workloads in headless mode",
+               Description: `Examples:
+
+qubesome headless -profile <path> <workload>
+qubesome headless -profile ~/git/dotfiles chrome
+`,
+               Arguments: []cli.Argument{
+                       &cli.StringArg{
+                               Name:        "workload",
+                               Destination: &workload,
+                       },
+               },
+               Flags: []cli.Flag{
+                       &cli.StringFlag{
+                               Name:        "config",
+                               Destination: &conf,
+                       },
+                       &cli.StringFlag{
+                               Name:        "profile",
+                               Destination: &targetProfile,
+                       },
+                       &cli.StringFlag{
+                               Name:        "runner",
+                               Destination: &runner,
+                       },
+               },
+               Action: func(ctx context.Context, cmd *cli.Command) error {
+                       cfg := config(conf)
+
+                       return qubesome.Run(
+                               qubesome.WithHeadless(),
+                               qubesome.WithWorkload(workload),
+                               qubesome.WithProfile(targetProfile),
+                               qubesome.WithConfig(cfg),
+                               qubesome.WithRunner(runner),
+                               qubesome.WithExtraArgs(cmd.Args().Slice()),
+                       )
+               },
+       }
+       return cmd
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/cmd/cli/root.go 
new/qubesome-0.0.13/cmd/cli/root.go
--- old/qubesome-0.0.12/cmd/cli/root.go 2025-09-08 13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/cmd/cli/root.go 2025-10-05 23:10:31.000000000 +0200
@@ -41,6 +41,7 @@
                        completionCommand(),
                        hostRunCommand(),
                        flatpakCommand(),
+                       headlessCommand(),
                },
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/go.mod new/qubesome-0.0.13/go.mod
--- old/qubesome-0.0.12/go.mod  2025-09-08 13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/go.mod  2025-10-05 23:10:31.000000000 +0200
@@ -3,7 +3,7 @@
 go 1.24.0
 
 require (
-       github.com/cyphar/filepath-securejoin v0.4.1
+       github.com/cyphar/filepath-securejoin v0.5.0
        github.com/go-git/go-git/v6 v6.0.0-20250628104446-20c25df268c3
        github.com/google/uuid v1.6.0
        github.com/stretchr/testify v1.11.1
@@ -11,8 +11,8 @@
        github.com/zalando/go-keyring v0.2.6
        golang.org/x/sys v0.36.0
        golang.org/x/term v0.35.0
-       google.golang.org/grpc v1.75.0
-       google.golang.org/protobuf v1.36.8
+       google.golang.org/grpc v1.75.1
+       google.golang.org/protobuf v1.36.9
        gopkg.in/yaml.v3 v3.0.1
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/go.sum new/qubesome-0.0.13/go.sum
--- old/qubesome-0.0.12/go.sum  2025-09-08 13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/go.sum  2025-10-05 23:10:31.000000000 +0200
@@ -12,8 +12,8 @@
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod 
h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/cloudflare/circl v1.6.1 
h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
 github.com/cloudflare/circl v1.6.1/go.mod 
h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
-github.com/cyphar/filepath-securejoin v0.4.1 
h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
-github.com/cyphar/filepath-securejoin v0.4.1/go.mod 
h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
+github.com/cyphar/filepath-securejoin v0.5.0 
h1:hIAhkRBMQ8nIeuVwcAoymp7MY4oherZdAxD+m0u9zaw=
+github.com/cyphar/filepath-securejoin v0.5.0/go.mod 
h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
 github.com/danieljoos/wincred v1.2.2 
h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0=
 github.com/danieljoos/wincred v1.2.2/go.mod 
h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8=
 github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -106,10 +106,10 @@
 gonum.org/v1/gonum v0.16.0/go.mod 
h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 
h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250707201910-8d1bb00bc6a7/go.mod 
h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
-google.golang.org/grpc v1.75.0/go.mod 
h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
-google.golang.org/protobuf v1.36.8 
h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
-google.golang.org/protobuf v1.36.8/go.mod 
h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
+google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
+google.golang.org/grpc v1.75.1/go.mod 
h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
+google.golang.org/protobuf v1.36.9 
h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
+google.golang.org/protobuf v1.36.9/go.mod 
h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c 
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/hack/base.mk 
new/qubesome-0.0.13/hack/base.mk
--- old/qubesome-0.0.12/hack/base.mk    2025-09-08 13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/hack/base.mk    2025-10-05 23:10:31.000000000 +0200
@@ -1,5 +1,5 @@
-GOLANGCI_VERSION ?= v1.64.5
-PROTOC_VERSION ?= 29.3
+GOLANGCI_VERSION ?= v2.5.0
+PROTOC_VERSION ?= 32.1
 TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools)
 
 ifneq ($(shell git status --porcelain --untracked-files=no),)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/files/binaries.go 
new/qubesome-0.0.13/internal/files/binaries.go
--- old/qubesome-0.0.12/internal/files/binaries.go      2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/files/binaries.go      2025-10-05 
23:10:31.000000000 +0200
@@ -10,6 +10,7 @@
        XclipBinary       = "/usr/bin/xclip"
        FireCrackerBinary = "/usr/bin/firecracker"
        XrandrBinary      = "/usr/bin/xrandr"
+       WlrRandrBinary    = "/usr/bin/wlr-randr"
        DbusBinary        = "/usr/bin/dbus-send"
        PodmanBinary      = "/usr/bin/podman"
        DockerBinary      = "/usr/bin/docker"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/flatpak/flatpak.go 
new/qubesome-0.0.13/internal/flatpak/flatpak.go
--- old/qubesome-0.0.12/internal/flatpak/flatpak.go     2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/flatpak/flatpak.go     2025-10-05 
23:10:31.000000000 +0200
@@ -54,7 +54,7 @@
        args := []string{"run", o.Name}
        args = append(args, o.ExtraArgs...)
 
-       c := exec.Command("/usr/bin/flatpak", args...)
+       c := exec.CommandContext(context.TODO(), "/usr/bin/flatpak", args...)
        c.Env = append(os.Environ(), fmt.Sprintf("DISPLAY=:%d", prof.Display))
        out, err := c.CombinedOutput()
        fmt.Println(string(out))
@@ -86,7 +86,7 @@
                fmt.Println("installing Flatpak", name)
                args := []string{"install", "flathub", name}
 
-               c := exec.Command("/usr/bin/flatpak", args...)
+               c := exec.CommandContext(context.TODO(), "/usr/bin/flatpak", 
args...)
                c.Stdin = os.Stdin
                c.Stdout = os.Stdout
                c.Stderr = os.Stderr
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/profiles/profiles.go 
new/qubesome-0.0.13/internal/profiles/profiles.go
--- old/qubesome-0.0.12/internal/profiles/profiles.go   2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/profiles/profiles.go   2025-10-05 
23:10:31.000000000 +0200
@@ -81,11 +81,12 @@
        if err != nil {
                return err
        }
-       cfg.RootDir = filepath.Dir(path)
 
        if cfg == nil {
                return fmt.Errorf("cannot start profile: nil config")
        }
+
+       cfg.RootDir = filepath.Dir(path)
        profile, ok := cfg.Profile(o.Profile)
        if !ok {
                return fmt.Errorf("cannot start profile: profile %q not found", 
o.Profile)
@@ -336,6 +337,7 @@
                creds.CA, creds.ClientPEM, creds.ClientKeyPEM,
                profile, strconv.Itoa(int(profile.Display)), interactive, cfg)
        if err != nil {
+               slog.Warn("failed to create display", "error", err)
                return err
        }
 
@@ -412,12 +414,13 @@
 
        xauthority := os.Getenv("XAUTHORITY")
        if xauthority == "" {
-               return fmt.Errorf("XAUTHORITY not defined")
+               xauthority = os.ExpandEnv("${HOME}/.XAUTHORITY")
        }
 
        slog.Debug("opening parent xauthority", "path", xauthority)
        parent, err := os.Open(xauthority)
        if err != nil {
+               slog.Debug("failed to open parent xauthority", "error", err)
                return err
        }
        defer parent.Close()
@@ -470,6 +473,7 @@
                        "-tst",
                        "-nolisten", "tcp",
                        "-auth", "/home/xorg-user/.Xserver",
+                       "-verbose", "9",
                        "--",
                        strings.TrimPrefix(profile.WindowManager, "exec ")}
        }
@@ -549,7 +553,6 @@
                "--rm",
                // rely on currently set DISPLAY.
                "-e", "DISPLAY",
-               "-e", "XDG_SESSION_TYPE=X11",
                "-e", "Q_MTLS_CA",
                "-e", "Q_MTLS_CERT",
                "-e", "Q_MTLS_KEY",
@@ -578,10 +581,20 @@
                }
 
                // TODO: Investigate ways to avoid sharing /run/user/1000 on 
Wayland.
-               dockerArgs = append(dockerArgs, "-e XDG_RUNTIME_DIR")
+               dockerArgs = append(dockerArgs, "-e", "XDG_RUNTIME_DIR")
+               dockerArgs = append(dockerArgs, "-e", "XDG_BACKEND")
+               dockerArgs = append(dockerArgs, "-e", "XDG_SEAT")
+               dockerArgs = append(dockerArgs, "-e", "XDG_SESSION_TYPE")
+               dockerArgs = append(dockerArgs, "-e", "XDG_SESSION_ID")
+               dockerArgs = append(dockerArgs, "-e", "XDG_SESSION_CLASS")
+               dockerArgs = append(dockerArgs, "-e", "XDG_SESSION_DESKTOP")
+               dockerArgs = append(dockerArgs, "-e", "WAYLAND_DISPLAY")
+               dockerArgs = append(dockerArgs, "-e", 
"HYPRLAND_INSTANCE_SIGNATURE")
                dockerArgs = append(dockerArgs, 
"-v="+xdgRuntimeDir+":/run/user/1000")
+       } else {
+               dockerArgs = append(dockerArgs, "-e", "XDG_SESSION_TYPE=X11")
        }
-       if profile.HostAccess.Gpus != "" {
+       if profile.Gpus != "" {
                if gpus, ok := gpu.Supported(profile.Runner); ok {
                        dockerArgs = append(dockerArgs, gpus)
                }
@@ -623,6 +636,7 @@
 
        paths = append(paths, fmt.Sprintf("-v=%s:/dev/shm", 
filepath.Join(userDir, "shm")))
        if profile.Dbus {
+               paths = append(paths, 
"-v=/run/dbus/system_bus_socket:/run/dbus/system_bus_socket")
                paths = append(paths, "-v=/etc/machine-id:/etc/machine-id:ro")
        } else {
                paths = append(paths, fmt.Sprintf("-v=%s:/run/user/1000", 
userDir))
@@ -657,6 +671,8 @@
 
        slog.Debug("exec: "+bin, "args", dockerArgs)
        cmd := execabs.Command(bin, dockerArgs...)
+       cmd.Env = append(cmd.Env, os.Environ()...)
+
        cmd.Env = append(os.Environ(), "Q_MTLS_CA="+string(ca))
        cmd.Env = append(cmd.Env, "Q_MTLS_CERT="+string(cert))
        cmd.Env = append(cmd.Env, "Q_MTLS_KEY="+string(key))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/qubesome/mime.go 
new/qubesome-0.0.13/internal/qubesome/mime.go
--- old/qubesome-0.0.12/internal/qubesome/mime.go       2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/qubesome/mime.go       2025-10-05 
23:10:31.000000000 +0200
@@ -31,7 +31,7 @@
                        return fmt.Errorf("cannot handle schemeless mime type: 
default mime handler is not set")
                }
 
-               return q.runner(q.defaultWorkload(in, args), runnerOverride)
+               return q.runner(q.defaultWorkload(in, args), runnerOverride, 
false)
        }
 
        if m, ok := in.Config.MimeHandlers[u.Scheme]; ok {
@@ -43,7 +43,7 @@
                }
 
                q.overrideWithProfile(in, &wi)
-               return q.runner(wi, runnerOverride)
+               return q.runner(wi, runnerOverride, false)
        }
 
        if in.Config.DefaultMimeHandler == nil {
@@ -53,7 +53,7 @@
        slog.Debug("no scheme specific handler: falling back to default mime 
handler")
 
        // falls back to default
-       return q.runner(q.defaultWorkload(in, args), runnerOverride)
+       return q.runner(q.defaultWorkload(in, args), runnerOverride, false)
 }
 
 func (q *Qubesome) overrideWithProfile(in *WorkloadInfo, wi *WorkloadInfo) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/qubesome/mime_test.go 
new/qubesome-0.0.13/internal/qubesome/mime_test.go
--- old/qubesome-0.0.12/internal/qubesome/mime_test.go  2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/qubesome/mime_test.go  2025-10-05 
23:10:31.000000000 +0200
@@ -143,7 +143,7 @@
                        called := 0
 
                        q := New()
-                       q.runner = func(wi WorkloadInfo, _ string) error {
+                       q.runner = func(wi WorkloadInfo, _ string, _ bool) 
error {
                                actual = &wi
                                called++
                                return nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/qubesome/options.go 
new/qubesome-0.0.13/internal/qubesome/options.go
--- old/qubesome-0.0.12/internal/qubesome/options.go    2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/qubesome/options.go    2025-10-05 
23:10:31.000000000 +0200
@@ -13,6 +13,7 @@
        Profile   string
        Runner    string
        ExtraArgs []string
+       Headless  bool
 }
 
 func WithExtraArgs(args []string) command.Option[Options] {
@@ -44,6 +45,11 @@
                o.Config = cfg
        }
 }
+func WithHeadless() command.Option[Options] {
+       return func(o *Options) {
+               o.Headless = true
+       }
+}
 
 func (o *Options) Validate() error {
        if o.Config == nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/qubesome/qubesome.go 
new/qubesome-0.0.13/internal/qubesome/qubesome.go
--- old/qubesome-0.0.12/internal/qubesome/qubesome.go   2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/qubesome/qubesome.go   2025-10-05 
23:10:31.000000000 +0200
@@ -17,7 +17,7 @@
 )
 
 type Qubesome struct {
-       runner func(in WorkloadInfo, runnerOverride string) error
+       runner func(in WorkloadInfo, runnerOverride string, headless bool) error
 }
 
 func New() *Qubesome {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/qubesome/run.go 
new/qubesome-0.0.13/internal/qubesome/run.go
--- old/qubesome-0.0.12/internal/qubesome/run.go        2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/qubesome/run.go        2025-10-05 
23:10:31.000000000 +0200
@@ -78,10 +78,10 @@
 
        // Wait for any background operation that is in-flight.
        defer wg.Wait()
-       return runner(in, o.Runner)
+       return runner(in, o.Runner, o.Headless)
 }
 
-func runner(in WorkloadInfo, runnerOverride string) error {
+func runner(in WorkloadInfo, runnerOverride string, headless bool) error {
        if err := in.Validate(); err != nil {
                return err
        }
@@ -190,6 +190,11 @@
                ew.Workload.Runner = runnerOverride
        }
 
+       if headless {
+               // In headless mode, Mime handling is not supported.
+               ew.Workload.HostAccess.Mime = false
+       }
+
        switch ew.Workload.Runner {
        case "firecracker":
                return firecracker.Run(ew)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/runners/docker/run.go 
new/qubesome-0.0.13/internal/runners/docker/run.go
--- old/qubesome-0.0.12/internal/runners/docker/run.go  2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/runners/docker/run.go  2025-10-05 
23:10:31.000000000 +0200
@@ -112,7 +112,17 @@
                }
 
                // TODO: Investigate ways to avoid sharing /run/user/1000 on 
Wayland.
-               args = append(args, "-e XDG_RUNTIME_DIR")
+               args = append(args, "-e", "XDG_RUNTIME_DIR")
+               args = append(args, "-e", "XDG_BACKEND")
+               args = append(args, "-e", "XDG_SEAT")
+               args = append(args, "-e", "XDG_SESSION_TYPE")
+               args = append(args, "-e", "XDG_SESSION_ID")
+               args = append(args, "-e", "XDG_SESSION_CLASS")
+               args = append(args, "-e", "XDG_SESSION_DESKTOP")
+               args = append(args, "-e", "WAYLAND_DISPLAY")
+               args = append(args, "-e", "HYPRLAND_INSTANCE_SIGNATURE")
+               args = append(args, "-e", "DBUS_SESSION_BUS_ADDRESS")
+
                args = append(args, "-v="+xdgRuntimeDir+":/run/user/1000")
        } else {
                if wl.HostAccess.Dbus || wl.HostAccess.Bluetooth || 
wl.HostAccess.VarRunUser {
@@ -164,6 +174,11 @@
                        return err
                }
 
+               err = os.MkdirAll(pdir, files.DirMode)
+               if err != nil {
+                       return fmt.Errorf("failed to ensure profile dir: %w", 
err)
+               }
+
                srcMimeList := filepath.Join(pdir, "mimeapps.list")
                dstMimeList := filepath.Join(homedir, ".local", "share", 
"applications", "mimeapps.list")
                err = os.WriteFile(srcMimeList, []byte(mime.MimesList), 
files.FileMode)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/internal/types/workload.go 
new/qubesome-0.0.13/internal/types/workload.go
--- old/qubesome-0.0.12/internal/types/workload.go      2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/types/workload.go      2025-10-05 
23:10:31.000000000 +0200
@@ -72,14 +72,14 @@
 
        e.Name = fmt.Sprintf("%s-%s", w.Name, p.Name)
 
-       e.Workload.HostAccess.Camera = w.HostAccess.Camera && 
p.HostAccess.Camera
-       e.Workload.HostAccess.Microphone = w.HostAccess.Microphone && 
p.HostAccess.Microphone
-       e.Workload.HostAccess.Speakers = w.HostAccess.Speakers && 
p.HostAccess.Speakers
-       e.Workload.HostAccess.Dbus = w.HostAccess.Dbus && p.HostAccess.Dbus
-       e.Workload.HostAccess.VarRunUser = w.HostAccess.VarRunUser && 
p.HostAccess.VarRunUser
-       e.Workload.HostAccess.Bluetooth = w.HostAccess.Bluetooth && 
p.HostAccess.Bluetooth
-       e.Workload.HostAccess.Mime = w.HostAccess.Mime && p.HostAccess.Mime
-       e.Workload.HostAccess.Privileged = w.HostAccess.Privileged && 
p.HostAccess.Privileged
+       e.Workload.HostAccess.Camera = w.HostAccess.Camera && p.Camera
+       e.Workload.HostAccess.Microphone = w.HostAccess.Microphone && 
p.Microphone
+       e.Workload.HostAccess.Speakers = w.HostAccess.Speakers && p.Speakers
+       e.Workload.HostAccess.Dbus = w.HostAccess.Dbus && p.Dbus
+       e.Workload.HostAccess.VarRunUser = w.HostAccess.VarRunUser && 
p.VarRunUser
+       e.Workload.HostAccess.Bluetooth = w.HostAccess.Bluetooth && p.Bluetooth
+       e.Workload.HostAccess.Mime = w.HostAccess.Mime && p.Mime
+       e.Workload.HostAccess.Privileged = w.HostAccess.Privileged && 
p.Privileged
 
        // TODO: Consider restraining user on workloads.
        e.Workload.User = w.User
@@ -127,13 +127,13 @@
                e.Workload.HostAccess.CapsAdd = caps
        }
 
-       if len(p.HostAccess.Devices) == 0 {
+       if len(p.Devices) == 0 {
                e.Workload.HostAccess.Devices = p.Devices[:0]
        } else if len(w.HostAccess.Devices) > 0 {
                devs := make([]string, 0, len(w.HostAccess.Devices))
 
                for _, path := range w.HostAccess.Devices {
-                       if pathAllowed(path, p.HostAccess.Devices) {
+                       if pathAllowed(path, p.Devices) {
                                devs = append(devs, path)
                        }
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qubesome-0.0.12/internal/util/resolution/resolution.go 
new/qubesome-0.0.13/internal/util/resolution/resolution.go
--- old/qubesome-0.0.12/internal/util/resolution/resolution.go  2025-09-08 
13:28:03.000000000 +0200
+++ new/qubesome-0.0.13/internal/util/resolution/resolution.go  2025-10-05 
23:10:31.000000000 +0200
@@ -6,18 +6,34 @@
        "bufio"
        "bytes"
        "fmt"
+       "log/slog"
        "strings"
 
        "github.com/qubesome/cli/internal/files"
        "golang.org/x/sys/execabs"
 )
 
+const defaultResolution = "1440x1080"
+
 // Primary returns the screen resolution for the primary display.
 func Primary() (string, error) {
-       cmd := execabs.Command(files.XrandrBinary) //nolint
-       output, err := cmd.Output()
-       if err != nil {
-               return "", err
+       binaries := []string{files.XrandrBinary, files.WlrRandrBinary}
+       var output []byte
+       var err error
+
+       for _, binary := range binaries {
+               cmd := execabs.Command(binary)
+               output, err = cmd.Output()
+               if err == nil && len(output) > 0 {
+                       break
+               }
+
+               slog.Debug("could not get resolution via %s: %w", binary, err)
+       }
+
+       if len(output) == 0 {
+               slog.Debug("falling back to default resolution", "resolution", 
defaultResolution)
+               return defaultResolution, nil
        }
 
        scanner := bufio.NewScanner(bytes.NewReader(output))
@@ -38,5 +54,5 @@
                }
        }
 
-       return "", fmt.Errorf("cannot get resolution")
+       return "", fmt.Errorf("cannot get resolution from output: %q", output)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qubesome-0.0.12/pkg/inception/server.go 
new/qubesome-0.0.13/pkg/inception/server.go
--- old/qubesome-0.0.12/pkg/inception/server.go 2025-09-08 13:28:03.000000000 
+0200
+++ new/qubesome-0.0.13/pkg/inception/server.go 2025-10-05 23:10:31.000000000 
+0200
@@ -38,7 +38,8 @@
 }
 
 func (s *Server) Listen(serverCert tls.Certificate, ca []byte, socket string) 
error {
-       lis, err := net.Listen("unix", socket)
+       lc := net.ListenConfig{}
+       lis, err := lc.Listen(context.Background(), "unix", socket)
        if err != nil {
                return fmt.Errorf("failed to listen: %w", err)
        }

++++++ vendor.tar.gz ++++++
++++ 6007 lines of diff (skipped)

Reply via email to