Skip to content

Commit f7d9509

Browse files
authored
Merge branch 'AvengeMedia:master' into master
2 parents f2fdae7 + 05eaf59 commit f7d9509

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1236
-283
lines changed

core/cmd/dms/commands_greeter.go

Lines changed: 118 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"path/filepath"
99
"strings"
1010

11+
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
1112
"github.com/AvengeMedia/DankMaterialShell/core/internal/greeter"
1213
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
1314
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
@@ -77,6 +78,28 @@ func installGreeter() error {
7778
return err
7879
}
7980

81+
// Debian/openSUSE
82+
greeter.TryInstallGreeterPackage(logFunc, "")
83+
if isPackageOnlyGreeterDistro() && !greeter.IsGreeterPackaged() {
84+
return fmt.Errorf("dms-greeter must be installed from distro packages on this distribution. %s", packageInstallHint())
85+
}
86+
if greeter.IsGreeterPackaged() && greeter.HasLegacyLocalGreeterWrapper() {
87+
return fmt.Errorf("legacy manual wrapper detected at /usr/local/bin/dms-greeter; remove it before using packaged dms-greeter: sudo rm -f /usr/local/bin/dms-greeter")
88+
}
89+
90+
// If already fully configured, prompt the user
91+
if isGreeterEnabled() {
92+
fmt.Print("\nGreeter is already installed and configured. Re-run to re-sync settings and permissions? [Y/n]: ")
93+
var response string
94+
fmt.Scanln(&response)
95+
response = strings.TrimSpace(strings.ToLower(response))
96+
if response == "n" || response == "no" {
97+
fmt.Println("Run 'dms greeter sync' to re-sync theme and settings at any time.")
98+
return nil
99+
}
100+
fmt.Println()
101+
}
102+
80103
fmt.Println("\nDetecting DMS installation...")
81104
dmsPath, err := greeter.DetectDMSPath()
82105
if err != nil {
@@ -114,7 +137,12 @@ func installGreeter() error {
114137
}
115138

116139
fmt.Println("\nConfiguring greetd...")
117-
if err := greeter.ConfigureGreetd(dmsPath, selectedCompositor, logFunc, ""); err != nil {
140+
// Use empty path when packaged (greeter finds /usr/share/quickshell/dms-greeter); else use user's DMS path
141+
greeterPathForConfig := ""
142+
if !greeter.IsGreeterPackaged() {
143+
greeterPathForConfig = dmsPath
144+
}
145+
if err := greeter.ConfigureGreetd(greeterPathForConfig, selectedCompositor, logFunc, ""); err != nil {
118146
return err
119147
}
120148

@@ -123,11 +151,22 @@ func installGreeter() error {
123151
return err
124152
}
125153

154+
if err := ensureGraphicalTarget(); err != nil {
155+
return err
156+
}
157+
158+
if err := handleConflictingDisplayManagers(); err != nil {
159+
return err
160+
}
161+
162+
if err := ensureGreetdEnabled(); err != nil {
163+
return err
164+
}
165+
126166
fmt.Println("\n=== Installation Complete ===")
127-
fmt.Println("\nTo test the greeter, run:")
167+
fmt.Println("\nTo start the greeter now, run:")
128168
fmt.Println(" sudo systemctl start greetd")
129-
fmt.Println("\nTo enable on boot, run:")
130-
fmt.Println(" sudo systemctl enable --now greetd")
169+
fmt.Println("\nOr reboot to see the greeter at next boot.")
131170

132171
return nil
133172
}
@@ -327,20 +366,29 @@ func ensureGreetdEnabled() error {
327366
fmt.Println(" ✓ Unmasked greetd")
328367
}
329368

330-
switch state.EnabledState {
331-
case "disabled", "masked", "masked-runtime":
369+
if state.EnabledState == "enabled" || state.EnabledState == "enabled-runtime" {
370+
fmt.Println(" Reasserting greetd as active display manager...")
371+
} else {
332372
fmt.Println(" Enabling greetd service...")
333-
enableCmd := exec.Command("sudo", "systemctl", "enable", "greetd")
334-
enableCmd.Stdout = os.Stdout
335-
enableCmd.Stderr = os.Stderr
336-
if err := enableCmd.Run(); err != nil {
337-
return fmt.Errorf("failed to enable greetd: %w", err)
338-
}
339-
fmt.Println(" ✓ Enabled greetd service")
340-
case "enabled", "enabled-runtime":
341-
fmt.Println(" ✓ greetd is already enabled")
342-
default:
343-
fmt.Printf(" ℹ greetd is in state '%s' (should work, no action needed)\n", state.EnabledState)
373+
}
374+
375+
enableCmd := exec.Command("sudo", "systemctl", "enable", "--force", "greetd")
376+
enableCmd.Stdout = os.Stdout
377+
enableCmd.Stderr = os.Stderr
378+
if err := enableCmd.Run(); err != nil {
379+
return fmt.Errorf("failed to enable greetd: %w", err)
380+
}
381+
382+
enabledState, _, verifyErr := checkSystemdServiceEnabled("greetd")
383+
if verifyErr != nil {
384+
fmt.Printf(" ⚠ Warning: Could not verify greetd enabled state: %v\n", verifyErr)
385+
} else {
386+
switch enabledState {
387+
case "enabled", "enabled-runtime", "static", "indirect", "alias":
388+
fmt.Printf(" ✓ greetd enabled (state: %s)\n", enabledState)
389+
default:
390+
return fmt.Errorf("greetd is still in state '%s' after enable operation", enabledState)
391+
}
344392
}
345393

346394
return nil
@@ -446,6 +494,10 @@ func enableGreeter() error {
446494
}
447495

448496
configContent := string(data)
497+
if greeter.IsGreeterPackaged() && greeter.HasLegacyLocalGreeterWrapper() {
498+
return fmt.Errorf("legacy manual wrapper detected at /usr/local/bin/dms-greeter; remove it before using packaged dms-greeter: sudo rm -f /usr/local/bin/dms-greeter")
499+
}
500+
449501
configAlreadyCorrect := strings.Contains(configContent, "dms-greeter")
450502

451503
if configAlreadyCorrect {
@@ -611,6 +663,48 @@ func detectConfiguredCompositor() string {
611663
return ""
612664
}
613665

666+
func packageInstallHint() string {
667+
osInfo, err := distros.GetOSInfo()
668+
if err != nil {
669+
return "Install package: dms-greeter"
670+
}
671+
config, exists := distros.Registry[osInfo.Distribution.ID]
672+
if !exists {
673+
return "Install package: dms-greeter"
674+
}
675+
676+
switch config.Family {
677+
case distros.FamilyDebian:
678+
return "Install with 'sudo apt install dms-greeter' (requires DankLinux OBS repo — see https://danklinux.com/docs/dankgreeter/installation#debian)"
679+
case distros.FamilySUSE:
680+
return "Install with 'sudo zypper install dms-greeter' (requires DankLinux OBS repo — see https://danklinux.com/docs/dankgreeter/installation#opensuse)"
681+
case distros.FamilyUbuntu:
682+
return "Install with 'sudo apt install dms-greeter' (requires ppa:avengemedia/danklinux: sudo add-apt-repository ppa:avengemedia/danklinux)"
683+
case distros.FamilyFedora:
684+
return "Install with 'sudo dnf install dms-greeter' (requires COPR: sudo dnf copr enable avengemedia/danklinux)"
685+
case distros.FamilyArch:
686+
return "Install from AUR with 'paru -S greetd-dms-greeter-git' or 'yay -S greetd-dms-greeter-git'"
687+
default:
688+
return "Run 'dms greeter install' to install greeter"
689+
}
690+
}
691+
692+
func isPackageOnlyGreeterDistro() bool {
693+
osInfo, err := distros.GetOSInfo()
694+
if err != nil {
695+
return false
696+
}
697+
config, exists := distros.Registry[osInfo.Distribution.ID]
698+
if !exists {
699+
return false
700+
}
701+
return config.Family == distros.FamilyDebian ||
702+
config.Family == distros.FamilySUSE ||
703+
config.Family == distros.FamilyUbuntu ||
704+
config.Family == distros.FamilyFedora ||
705+
config.Family == distros.FamilyArch
706+
}
707+
614708
func promptCompositorChoice(compositors []string) (string, error) {
615709
fmt.Println("\nMultiple compositors detected:")
616710
for i, comp := range compositors {
@@ -679,7 +773,7 @@ func checkGreeterStatus() error {
679773
}
680774
} else {
681775
fmt.Println(" ✗ Greeter config not found")
682-
fmt.Println(" Run 'dms greeter install' to install greeter")
776+
fmt.Printf(" %s\n", packageInstallHint())
683777
}
684778

685779
fmt.Println("\nGroup Membership:")
@@ -689,12 +783,13 @@ func checkGreeterStatus() error {
689783
return fmt.Errorf("failed to check groups: %w", err)
690784
}
691785

692-
inGreeterGroup := strings.Contains(string(groupsOutput), "greeter")
786+
greeterGroup := greeter.DetectGreeterGroup()
787+
inGreeterGroup := strings.Contains(string(groupsOutput), greeterGroup)
693788
if inGreeterGroup {
694-
fmt.Println(" ✓ User is in greeter group")
789+
fmt.Printf(" ✓ User is in %s group\n", greeterGroup)
695790
} else {
696-
fmt.Println(" ✗ User is NOT in greeter group")
697-
fmt.Println(" Run 'dms greeter install' to add user to greeter group")
791+
fmt.Printf(" ✗ User is NOT in %s group\n", greeterGroup)
792+
fmt.Println(" Run 'dms greeter sync' to set up group membership and permissions")
698793
}
699794

700795
cacheDir := "/var/cache/dms-greeter"
@@ -703,7 +798,7 @@ func checkGreeterStatus() error {
703798
fmt.Printf(" ✓ %s exists\n", cacheDir)
704799
} else {
705800
fmt.Printf(" ✗ %s not found\n", cacheDir)
706-
fmt.Println(" Run 'dms greeter install' to create cache directory")
801+
fmt.Printf(" %s\n", packageInstallHint())
707802
return nil
708803
}
709804

core/go.mod

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ require (
1616
github.com/sblinch/kdl-go v0.0.0-20260121213736-8b7053306ca6
1717
github.com/spf13/cobra v1.10.2
1818
github.com/stretchr/testify v1.11.1
19+
github.com/yeqown/go-qrcode/v2 v2.2.5
20+
github.com/yeqown/go-qrcode/writer/standard v1.3.0
1921
github.com/yuin/goldmark v1.7.16
2022
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
2123
go.etcd.io/bbolt v1.4.3
@@ -32,15 +34,19 @@ require (
3234
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
3335
github.com/dlclark/regexp2 v1.11.5 // indirect
3436
github.com/emirpasic/gods v1.18.1 // indirect
37+
github.com/fogleman/gg v1.3.0 // indirect
3538
github.com/go-git/gcfg/v2 v2.0.2 // indirect
3639
github.com/go-git/go-billy/v6 v6.0.0-20260209124918-37866f83c2d3 // indirect
3740
github.com/go-logfmt/logfmt v0.6.1 // indirect
41+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
3842
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
3943
github.com/kevinburke/ssh_config v1.6.0 // indirect
4044
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
4145
github.com/pjbgf/sha1cd v0.5.0 // indirect
46+
github.com/pkg/errors v0.9.1 // indirect
4247
github.com/sergi/go-diff v1.4.0 // indirect
4348
github.com/stretchr/objx v0.5.3 // indirect
49+
github.com/yeqown/reedsolomon v1.0.0 // indirect
4450
golang.org/x/crypto v0.48.0 // indirect
4551
golang.org/x/net v0.50.0 // indirect
4652
)

core/go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc
5858
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
5959
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
6060
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
61+
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
62+
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
6163
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
6264
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
6365
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
@@ -75,6 +77,8 @@ github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/
7577
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
7678
github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ=
7779
github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
80+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
81+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
7882
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
7983
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
8084
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -115,6 +119,8 @@ github.com/pilebones/go-udev v0.9.1 h1:uN72M1C1fgzhsVmBGEM8w9RD1JY4iVsPZpr+Z6rb3
115119
github.com/pilebones/go-udev v0.9.1/go.mod h1:Bgcl07crebF3JSeS4+nuaRvhWFdCeFoBhXXeAp93XNo=
116120
github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0=
117121
github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM=
122+
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
123+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
118124
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
119125
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
120126
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
@@ -142,6 +148,12 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
142148
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
143149
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
144150
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
151+
github.com/yeqown/go-qrcode/v2 v2.2.5 h1:HCOe2bSjkhZyYoyyNaXNzh4DJZll6inVJQQw+8228Zk=
152+
github.com/yeqown/go-qrcode/v2 v2.2.5/go.mod h1:uHpt9CM0V1HeXLz+Wg5MN50/sI/fQhfkZlOM+cOTHxw=
153+
github.com/yeqown/go-qrcode/writer/standard v1.3.0 h1:chdyhEfRtUPgQtuPeaWVGQ/TQx4rE1PqeoW3U+53t34=
154+
github.com/yeqown/go-qrcode/writer/standard v1.3.0/go.mod h1:O4MbzsotGCvy8upYPCR91j81dr5XLT7heuljcNXW+oQ=
155+
github.com/yeqown/reedsolomon v1.0.0 h1:x1h/Ej/uJnNu8jaX7GLHBWmZKCAWjEJTetkqaabr4B0=
156+
github.com/yeqown/reedsolomon v1.0.0/go.mod h1:P76zpcn2TCuL0ul1Fso373qHRc69LKwAw/Iy6g1WiiM=
145157
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
146158
github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE=
147159
github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=

core/internal/distros/arch.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ func (a *ArchDistribution) DetectDependenciesWithTerminal(ctx context.Context, w
9797
dependencies = append(dependencies, a.detectGit())
9898
dependencies = append(dependencies, a.detectWindowManager(wm))
9999
dependencies = append(dependencies, a.detectQuickshell())
100+
dependencies = append(dependencies, a.detectDMSGreeter())
100101
dependencies = append(dependencies, a.detectXDGPortal())
101102
dependencies = append(dependencies, a.detectAccountsService())
102103

@@ -124,6 +125,10 @@ func (a *ArchDistribution) detectAccountsService() deps.Dependency {
124125
return a.detectPackage("accountsservice", "D-Bus interface for user account query and manipulation", a.packageInstalled("accountsservice"))
125126
}
126127

128+
func (a *ArchDistribution) detectDMSGreeter() deps.Dependency {
129+
return a.detectPackage("dms-greeter", "DankMaterialShell greetd greeter", a.packageInstalled("greetd-dms-greeter-git"))
130+
}
131+
127132
func (a *ArchDistribution) packageInstalled(pkg string) bool {
128133
cmd := exec.Command("pacman", "-Q", pkg)
129134
err := cmd.Run()
@@ -139,6 +144,7 @@ func (a *ArchDistribution) GetPackageMappingWithVariants(wm deps.WindowManager,
139144
"dms (DankMaterialShell)": a.getDMSMapping(variants["dms (DankMaterialShell)"]),
140145
"git": {Name: "git", Repository: RepoTypeSystem},
141146
"quickshell": a.getQuickshellMapping(variants["quickshell"]),
147+
"dms-greeter": {Name: "greetd-dms-greeter-git", Repository: RepoTypeAUR},
142148
"matugen": a.getMatugenMapping(variants["matugen"]),
143149
"dgop": {Name: "dgop", Repository: RepoTypeSystem},
144150
"ghostty": {Name: "ghostty", Repository: RepoTypeSystem},

core/internal/distros/debian.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func (d *DebianDistribution) DetectDependenciesWithTerminal(ctx context.Context,
6161
dependencies = append(dependencies, d.detectGit())
6262
dependencies = append(dependencies, d.detectWindowManager(wm))
6363
dependencies = append(dependencies, d.detectQuickshell())
64+
dependencies = append(dependencies, d.detectDMSGreeter())
6465
dependencies = append(dependencies, d.detectXDGPortal())
6566
dependencies = append(dependencies, d.detectAccountsService())
6667

@@ -86,6 +87,10 @@ func (d *DebianDistribution) detectAccountsService() deps.Dependency {
8687
return d.detectPackage("accountsservice", "D-Bus interface for user account query and manipulation", d.packageInstalled("accountsservice"))
8788
}
8889

90+
func (d *DebianDistribution) detectDMSGreeter() deps.Dependency {
91+
return d.detectPackage("dms-greeter", "DankMaterialShell greetd greeter", d.packageInstalled("dms-greeter"))
92+
}
93+
8994
func (d *DebianDistribution) packageInstalled(pkg string) bool {
9095
cmd := exec.Command("dpkg", "-l", pkg)
9196
err := cmd.Run()
@@ -108,6 +113,7 @@ func (d *DebianDistribution) GetPackageMappingWithVariants(wm deps.WindowManager
108113
// DMS packages from OBS with variant support
109114
"dms (DankMaterialShell)": d.getDmsMapping(variants["dms (DankMaterialShell)"]),
110115
"quickshell": d.getQuickshellMapping(variants["quickshell"]),
116+
"dms-greeter": {Name: "dms-greeter", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
111117
"matugen": {Name: "matugen", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
112118
"dgop": {Name: "dgop", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},
113119
"ghostty": {Name: "ghostty", Repository: RepoTypeOBS, RepoURL: "home:AvengeMedia:danklinux"},

core/internal/distros/fedora.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ func init() {
1313
Register("fedora", "#0B57A4", FamilyFedora, func(config DistroConfig, logChan chan<- string) Distribution {
1414
return NewFedoraDistribution(config, logChan)
1515
})
16+
Register("evernight", "#72B8DC", FamilyFedora, func(config DistroConfig, logChan chan<- string) Distribution {
17+
return NewFedoraDistribution(config, logChan)
18+
})
1619
Register("nobara", "#0B57A4", FamilyFedora, func(config DistroConfig, logChan chan<- string) Distribution {
1720
return NewFedoraDistribution(config, logChan)
1821
})
@@ -75,6 +78,7 @@ func (f *FedoraDistribution) DetectDependenciesWithTerminal(ctx context.Context,
7578
dependencies = append(dependencies, f.detectGit())
7679
dependencies = append(dependencies, f.detectWindowManager(wm))
7780
dependencies = append(dependencies, f.detectQuickshell())
81+
dependencies = append(dependencies, f.detectDMSGreeter())
7882
dependencies = append(dependencies, f.detectXDGPortal())
7983
dependencies = append(dependencies, f.detectAccountsService())
8084

@@ -120,6 +124,7 @@ func (f *FedoraDistribution) GetPackageMappingWithVariants(wm deps.WindowManager
120124

121125
// COPR packages
122126
"quickshell": f.getQuickshellMapping(variants["quickshell"]),
127+
"dms-greeter": {Name: "dms-greeter", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
123128
"matugen": {Name: "matugen", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
124129
"dms (DankMaterialShell)": f.getDmsMapping(variants["dms (DankMaterialShell)"]),
125130
"dgop": {Name: "dgop", Repository: RepoTypeCOPR, RepoURL: "avengemedia/danklinux"},
@@ -191,6 +196,10 @@ func (f *FedoraDistribution) detectAccountsService() deps.Dependency {
191196
}
192197
}
193198

199+
func (f *FedoraDistribution) detectDMSGreeter() deps.Dependency {
200+
return f.detectPackage("dms-greeter", "DankMaterialShell greetd greeter", f.packageInstalled("dms-greeter"))
201+
}
202+
194203
func (f *FedoraDistribution) getPrerequisites() []string {
195204
return []string{
196205
"dnf-plugins-core",

0 commit comments

Comments
 (0)