diff --git a/pkgs/desktops/deepin/default.nix b/pkgs/desktops/deepin/default.nix index 07832e97e565..e48d88f962f3 100644 --- a/pkgs/desktops/deepin/default.nix +++ b/pkgs/desktops/deepin/default.nix @@ -69,6 +69,7 @@ let dde-daemon = callPackage ./go-package/dde-daemon { }; deepin-pw-check = callPackage ./go-package/deepin-pw-check { }; deepin-desktop-schemas = callPackage ./go-package/deepin-desktop-schemas { }; + startdde = callPackage ./go-package/startdde { }; #### TOOLS dde-device-formatter = callPackage ./tools/dde-device-formatter { }; diff --git a/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch b/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch new file mode 100644 index 000000000000..2dac0993d590 --- /dev/null +++ b/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch @@ -0,0 +1,153 @@ +From 47a700c64329f76ab91ac01d83a93f43bebe638b Mon Sep 17 00:00:00 2001 +From: rewine +Date: Sun, 9 Apr 2023 17:14:00 +0800 +Subject: [PATCH] avoid use hardcode path + +--- + display/wayland.go | 4 ++-- + main.go | 10 +++++----- + misc/auto_launch/chinese.json | 4 ++-- + session.go | 15 +++++++++------ + 4 files changed, 18 insertions(+), 15 deletions(-) + +diff --git a/display/wayland.go b/display/wayland.go +index b980425..e44342a 100644 +--- a/display/wayland.go ++++ b/display/wayland.go +@@ -556,7 +556,7 @@ func (mm *kMonitorManager) applyByWLOutput(monitorMap map[uint32]*Monitor) error + + if len(args_enable) > 0 { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) +- cmdline := exec.CommandContext(ctx, "/usr/bin/dde_wloutput", "set") ++ cmdline := exec.CommandContext(ctx, "dde_wloutput", "set") + cmdline.Args = append(cmdline.Args, args_enable...) + logger.Info("cmd line args_enable:", cmdline.Args) + +@@ -572,7 +572,7 @@ func (mm *kMonitorManager) applyByWLOutput(monitorMap map[uint32]*Monitor) error + } + if len(args_disable) > 0 { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) +- cmdline := exec.CommandContext(ctx, "/usr/bin/dde_wloutput", "set") ++ cmdline := exec.CommandContext(ctx, "dde_wloutput", "set") + cmdline.Args = append(cmdline.Args, args_disable...) + logger.Info("cmd line args_disable:", cmdline.Args) + +diff --git a/main.go b/main.go +index 77b4e78..30aa3fd 100644 +--- a/main.go ++++ b/main.go +@@ -96,17 +96,17 @@ func shouldUseDDEKWin() bool { + } + + end: +- _, err = os.Stat("/usr/bin/kwin_no_scale") ++ _, err = exec.LookPath("kwin_no_scale") + return err == nil + } + + const ( +- cmdKWin = "/usr/bin/kwin_no_scale" ++ cmdKWin = "kwin_no_scale" + cmdDdeSessionDaemon = "/usr/lib/deepin-daemon/dde-session-daemon" +- cmdDdeDock = "/usr/bin/dde-dock" +- cmdDdeDesktop = "/usr/bin/dde-desktop" ++ cmdDdeDock = "dde-dock" ++ cmdDdeDesktop = "dde-desktop" + cmdLoginReminderHelper = "/usr/libexec/deepin/login-reminder-helper" +- cmdDdeHintsDialog = "/usr/bin/dde-hints-dialog" ++ cmdDdeHintsDialog = "dde-hints-dialog" + + loginReminderTimeout = 5 * time.Second + loginReminderTimeFormat = "2006-01-02 15:04:05" +diff --git a/misc/auto_launch/chinese.json b/misc/auto_launch/chinese.json +index 079a521..1856ab1 100644 +--- a/misc/auto_launch/chinese.json ++++ b/misc/auto_launch/chinese.json +@@ -13,7 +13,7 @@ + "Priority": 9, + "Group": [ + { +- "Command": "/usr/bin/dde-file-manager", ++ "Command": "dde-file-manager", + "Wait": false, + "Args": [ + "-d" +@@ -39,7 +39,7 @@ + "Priority": 7, + "Group": [ + { +- "Command": "/usr/bin/dde-shutdown", ++ "Command": "dde-shutdown", + "Wait": false, + "Args": [ + "-d" +diff --git a/session.go b/session.go +index 26f89ef..f412ca4 100644 +--- a/session.go ++++ b/session.go +@@ -18,6 +18,7 @@ import ( + "syscall" + "time" + ++ "github.com/adrg/xdg" + "github.com/godbus/dbus" + "github.com/linuxdeepin/dde-api/soundutils" + daemon "github.com/linuxdeepin/go-dbus-factory/com.deepin.daemon.daemon" +@@ -53,8 +54,10 @@ const ( + + xsKeyQtFontName = "Qt/FontName" + xsKeyQtMonoFontName = "Qt/MonoFontName" ++) + +- ddeLockDesktopFile = "/usr/share/applications/dde-lock.desktop" ++var ( ++ ddeLockDesktopFile, _ = xdg.SearchDataFile("applications/dde-lock.desktop"); + ) + + type SessionManager struct { +@@ -90,7 +93,7 @@ type SessionManager struct { + } + + const ( +- cmdShutdown = "/usr/bin/dde-shutdown" ++ cmdShutdown = "dde-shutdown" + lockFrontDest = "com.deepin.dde.lockFront" + lockFrontIfc = lockFrontDest + lockFrontObjPath = "/com/deepin/dde/lockFront" +@@ -471,7 +474,7 @@ func (m *SessionManager) SetLocked(sender dbus.Sender, value bool) *dbus.Error { + return dbusutil.ToError(err) + } + +- if exe == "/usr/bin/dde-lock" { ++ if strings.Contains(exe, "dde-lock") { + m.setLocked(value) + return nil + } +@@ -491,7 +494,7 @@ func (m *SessionManager) SetLocked(sender dbus.Sender, value bool) *dbus.Error { + return dbusutil.ToError(fmt.Errorf("desktop file %q is invalid", desktopFile)) + } + exe = info.GetExecutable() +- if exe != "/usr/bin/dde-lock" { ++ if strings.Contains(exe, "dde-lock") { + return dbusutil.ToError(fmt.Errorf("exe %q of desktop file %q is invalid", exe, desktopFile)) + } + +@@ -798,7 +801,7 @@ func setupEnvironments2() { + // man gnome-keyring-daemon: + // The daemon will print out various environment variables which should be set + // in the user's environment, in order to interact with the daemon. +- gnomeKeyringOutput, err := exec.Command("/usr/bin/gnome-keyring-daemon", "--start", ++ gnomeKeyringOutput, err := exec.Command("gnome-keyring-daemon", "--start", + "--components=secrets,pkcs11,ssh").Output() + if err == nil { + lines := bytes.Split(gnomeKeyringOutput, []byte{'\n'}) +@@ -1389,4 +1392,4 @@ func initXEventMonitor() { + setDPMSMode(true) + } + }) +-} +\ No newline at end of file ++} +-- +2.39.2 + diff --git a/pkgs/desktops/deepin/go-package/startdde/default.nix b/pkgs/desktops/deepin/go-package/startdde/default.nix new file mode 100644 index 000000000000..e0502deaf9cf --- /dev/null +++ b/pkgs/desktops/deepin/go-package/startdde/default.nix @@ -0,0 +1,102 @@ +{ stdenv +, lib +, fetchFromGitHub +, buildGoPackage +, pkg-config +, go-dbus-factory +, go-gir-generator +, go-lib +, gettext +, dde-api +, libgnome-keyring +, gtk3 +, alsa-lib +, libpulseaudio +, libgudev +, libsecret +, jq +, wrapGAppsHook +, runtimeShell +, dde-polkit-agent +}: + +buildGoPackage rec { + pname = "startdde"; + version = "5.10.1"; + + goPackagePath = "github.com/linuxdeepin/startdde"; + + src = fetchFromGitHub { + owner = "linuxdeepin"; + repo = pname; + rev = version; + sha256 = "sha256-dbTcYS7dEvT0eP45jKE8WiG9Pm4LU6jvR8hjMQv/yxU="; + }; + + patches = [ + ./0001-avoid-use-hardcode-path.patch + ]; + + postPatch = '' + substituteInPlace display/manager.go session.go \ + --replace "/bin/bash" "${runtimeShell}" + substituteInPlace display/manager.go main.go utils.go session.go \ + --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon" + substituteInPlace misc/xsessions/deepin.desktop.in --subst-var-by PREFIX $out + substituteInPlace watchdog/dde_polkit_agent.go misc/auto_launch/{default.json,chinese.json} \ + --replace "/usr/lib/polkit-1-dde/dde-polkit-agent" "${dde-polkit-agent}/lib/polkit-1-dde/dde-polkit-agent" + substituteInPlace startmanager.go launch_group.go memchecker/config.go \ + --replace "/usr/share/startdde" "$out/share/startdde" + substituteInPlace misc/lightdm.conf --replace "/usr" "$out" + ''; + + goDeps = ./deps.nix; + + nativeBuildInputs = [ + gettext + pkg-config + jq + wrapGAppsHook + ]; + + buildInputs = [ + go-dbus-factory + go-gir-generator + go-lib + dde-api + libgnome-keyring + gtk3 + alsa-lib + libpulseaudio + libgudev + libsecret + ]; + + buildPhase = '' + runHook preBuild + addToSearchPath GOPATH "${go-dbus-factory}/share/gocode" + addToSearchPath GOPATH "${go-gir-generator}/share/gocode" + addToSearchPath GOPATH "${go-lib}/share/gocode" + addToSearchPath GOPATH "${dde-api}/share/gocode" + make -C go/src/${goPackagePath} + runHook postBuild + ''; + + installPhase = '' + make install DESTDIR="$out" PREFIX="/" -C go/src/${goPackagePath} + ''; + + passthru.providedSessions = [ "deepin" ]; + + meta = with lib; { + description = "Starter of deepin desktop environment"; + longDescription = '' + Startdde is used for launching DDE components and invoking user's + custom applications which compliant with xdg autostart specification + ''; + homepage = "https://github.com/linuxdeepin/startdde"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = teams.deepin.members; + }; +} diff --git a/pkgs/desktops/deepin/go-package/startdde/deps.nix b/pkgs/desktops/deepin/go-package/startdde/deps.nix new file mode 100644 index 000000000000..0a0b403ea44e --- /dev/null +++ b/pkgs/desktops/deepin/go-package/startdde/deps.nix @@ -0,0 +1,236 @@ +[ + { + goPackagePath = "github.com/cryptix/wav"; + fetch = { + type = "git"; + url = "https://github.com/cryptix/wav"; + rev = "8bdace674401f0bd3b63c65479b6a6ff1f9d5e44"; + sha256 = "18nyqv0ic35fs9fny8sj84c00vbxs8mnric6vr6yl42624fh5id6"; + }; + } + { + goPackagePath = "github.com/davecgh/go-spew"; + fetch = { + type = "git"; + url = "https://github.com/davecgh/go-spew"; + rev = "v1.1.1"; + sha256 = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI="; + }; + } + { + goPackagePath = "github.com/linuxdeepin/go-x11-client"; + fetch = { + type = "git"; + url = "https://github.com/linuxdeepin/go-x11-client"; + rev = "0.6.9"; + sha256 = "sha256-xXNaXpFFHJN1fCFLoVrQFCXQ4ya+Kga55QWcJL/InkA="; + }; + } + { + goPackagePath = "golang.org/x/xerrors"; + fetch = { + type = "git"; + url = "https://github.com/golang/xerrors"; + rev = "2f41105eb62f341cfe208d06de4ee3bdd3a083da"; + sha256 = "sha256-yZNeG+jcarcw/aOFhrhxWWE20r0P+/VJF4i/0JQfv1c="; + }; + } + { + goPackagePath = "github.com/fsnotify/fsnotify"; + fetch = { + type = "git"; + url = "https://github.com/fsnotify/fsnotify"; + rev = "v1.5.1"; + sha256 = "sha256-B8kZ8yiWgallT7R2j1kSRJcJkSGFVf9ise+TpXa+7XY="; + }; + } + { + goPackagePath = "github.com/godbus/dbus"; + fetch = { + type = "git"; + url = "https://github.com/godbus/dbus"; + rev = "v5.1.0"; + sha256 = "sha256-JSPtmkGEStBEVrKGszeLCb7P38SzQKgMiDC3eDppXs0="; + }; + } + { + goPackagePath = "github.com/stretchr/testify"; + fetch = { + type = "git"; + url = "https://github.com/stretchr/testify"; + rev = "v1.7.1"; + sha256 = "sha256-disUVIHiIDSj/go3APtJH8awSl8QwKRRFLKI7LRnl0w="; + }; + } + { + goPackagePath = "golang.org/x/sys"; + fetch = { + type = "git"; + url = "https://github.com/golang/sys"; + rev = "289d7a0edf712062d9f1484b07bdf2383f48802f"; + sha256 = "sha256-AzS/J3OocI7mA0xsIfQzyskNKVija7F2yvuts+EFJBs="; + }; + } + { + goPackagePath = "gopkg.in/yaml.v3"; + fetch = { + type = "git"; + url = "https://github.com/go-yaml/yaml"; + rev = "496545a6307b2a7d7a710fd516e5e16e8ab62dbc"; + sha256 = "sha256-j8yDji+vqsitpRZirpb4w/Em8nstgf28wpwkcrOlxBk="; + }; + } + { + goPackagePath = "github.com/stretchr/objx"; + fetch = { + type = "git"; + url = "https://github.com/stretchr/objx"; + rev = "v0.3.0"; + sha256 = "sha256-T753/EiD5Cpk6H2JFhd+s1gFvpNptG2XlEHxZF6dQaw="; + }; + } + { + goPackagePath = "github.com/pmezard/go-difflib"; + fetch = { + type = "git"; + url = "https://github.com/pmezard/go-difflib"; + rev = "5d4384ee4fb2527b0a1256a821ebfc92f91efefc"; + sha256 = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90="; + }; + } + { + goPackagePath = "github.com/axgle/mahonia"; + fetch = { + type = "git"; + url = "https://github.com/axgle/mahonia"; + rev = "3358181d7394e26beccfae0ffde05193ef3be33a"; + sha256 = "0b8wsrxmv8a0cqbnsg55lpf29pxy2zw8azvgh3ck664lqpcfybhq"; + }; + } + { + goPackagePath = "golang.org/x/text"; + fetch = { + type = "git"; + url = "https://github.com/golang/text"; + rev = "v0.3.7"; + sha256 = "sha256-XpIbgE6MxWwDQQcPXr2NIsE2cev2+CIabi566TYGfHY="; + }; + } + { + goPackagePath = "golang.org/x/image"; + fetch = { + type = "git"; + url = "https://github.com/golang/image"; + rev = "70e8d0d3baa9a699c3865c753cbfa8ae65bd86ce"; + sha256 = "sha256-oMbDIke/qQ6cp7JLNsMusf7EIUfuj0WavFVfI0lxTDs="; + }; + } + { + goPackagePath = "github.com/nfnt/resize"; + fetch = { + type = "git"; + url = "https://github.com/nfnt/resize"; + rev = "83c6a9932646f83e3267f353373d47347b6036b2"; + sha256 = "005cpiwq28krbjf0zjwpfh63rp4s4is58700idn24fs3g7wdbwya"; + }; + } + { + goPackagePath = "github.com/Lofanmi/pinyin-golang"; + fetch = { + type = "git"; + url = "https://github.com/Lofanmi/pinyin-golang"; + rev = "1db892057f20c56a3286cc1517e0642dacbff54c"; + sha256 = "sha256-nhO6AYZ3vc7nwgmmfTlE6m33caY9gGZoKiSYvFLqHQc="; + }; + } + { + goPackagePath = "github.com/mozillazg/go-pinyin"; + fetch = { + type = "git"; + url = "https://github.com/mozillazg/go-pinyin"; + rev = "8930bc1fcb5693689dc35d98ad2a4153662e34b1"; + sha256 = "sha256-kuMNiWpPeqsIsFgYIOsffxUfwcLPaMZWdZRBJAMDVvA="; + }; + } + { + goPackagePath = "github.com/kelvins/sunrisesunset"; + fetch = { + type = "git"; + url = "https://github.com/kelvins/sunrisesunset"; + rev = "39fa1bd816d52927b4cfcab0a1535b17eafe0a3d"; + sha256 = "sha256-awklKAW1YM3sWM21irbyu2sUMIo3kCOj12lzyVzDefw="; + }; + } + { + goPackagePath = "github.com/rickb777/date"; + fetch = { + type = "git"; + url = "https://github.com/rickb777/date"; + rev = "v1.18"; + sha256 = "sha256-8r8eFOF5dKtowE3dnjpSMIXJ/yX2IjiR7nZ/EApUZbA="; + }; + } + { + goPackagePath = "github.com/rickb777/plural"; + fetch = { + type = "git"; + url = "https://github.com/rickb777/plural"; + rev = "v1.4.1"; + sha256 = "sha256-nhN+ApdfUie45L+M2OZAPtSoiIZ1pZ2UpDX/DePS6Yw="; + }; + } + { + goPackagePath = "github.com/gosexy/gettext"; + fetch = { + type = "git"; + url = "https://github.com/gosexy/gettext"; + rev = "v0.9"; + sha256 = "0asphx8nd7zmp88wk6aakk5292np7yw73akvfdvlvs9q5r5ahkgi"; + }; + } + { + goPackagePath = "github.com/msteinert/pam"; + fetch = { + type = "git"; + url = "https://github.com/msteinert/pam"; + rev = "v1.0.0"; + sha256 = "sha256-Ji13ckPyZUBAovhK2hRHgf2LB1ieglX/XrIJBxVcsXc="; + }; + } + { + goPackagePath = "github.com/youpy/go-wav"; + fetch = { + type = "git"; + url = "https://github.com/youpy/go-wav"; + rev = "v0.3.2"; + sha256 = "sha256-jNqXW3F3fcgjT47+d2MVXauWkA7+1KfYVu3ZZpRCTkM="; + }; + } + { + goPackagePath = "github.com/zaf/g711"; + fetch = { + type = "git"; + url = "https://github.com/zaf/g711"; + rev = "v1.2"; + sha256 = "sha256-G+0cgGw/fcOUFVn32AeqUE0YjyOS82Z5MTcn6IANhCY="; + }; + } + { + goPackagePath = "github.com/youpy/go-riff"; + fetch = { + type = "git"; + url = "https://github.com/youpy/go-riff"; + rev = "v0.1.0"; + sha256 = "sha256-d/3rkxDeRTPveZblArKc61gB4LJVV08n7g0THieuhx8="; + }; + } + { + goPackagePath = "github.com/adrg/xdg"; + fetch = { + type = "git"; + url = "https://github.com/adrg/xdg"; + rev = "v0.4.0"; + sha256 = "sha256-zGjkdUQmrVqD6rMO9oDY+TeJCpuqnHyvkPCaXDlac/U="; + }; + } +]