1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-11 00:02:28 -04:00

core/greeter: embed base config, tie enable into sync, sync config

argument always, preserve existing args
This commit is contained in:
bbedward
2026-02-03 16:02:42 -05:00
parent 3ef0e63533
commit e9ec28aab7
4 changed files with 132 additions and 7 deletions

View File

@@ -0,0 +1,17 @@
hotkey-overlay {
skip-at-startup
}
environment {
DMS_RUN_GREETER "1"
}
gestures {
hot-corners {
off
}
}
layout {
background-color "#000000"
}

View File

@@ -16,3 +16,6 @@ var NiriAlttabConfig string
//go:embed embedded/niri-binds.kdl
var NiriBindsConfig string
//go:embed embedded/niri-greeter.kdl
var NiriGreeterConfig string

View File

@@ -325,7 +325,7 @@ func SetupDMSGroup(logFunc func(string), sudoPassword string) error {
return nil
}
func SyncDMSConfigs(dmsPath string, logFunc func(string), sudoPassword string) error {
func SyncDMSConfigs(dmsPath, compositor string, logFunc func(string), sudoPassword string) error {
homeDir, err := os.UserHomeDir()
if err != nil {
return fmt.Errorf("failed to get user home directory: %w", err)
@@ -381,6 +381,10 @@ func SyncDMSConfigs(dmsPath string, logFunc func(string), sudoPassword string) e
logFunc(fmt.Sprintf("✓ Synced %s", link.desc))
}
if strings.ToLower(compositor) != "niri" {
return nil
}
if err := syncNiriGreeterConfig(logFunc, sudoPassword); err != nil {
logFunc(fmt.Sprintf("⚠ Warning: Failed to sync niri greeter config: %v", err))
}
@@ -464,7 +468,7 @@ func syncNiriGreeterConfig(logFunc func(string), sudoPassword string) error {
return fmt.Errorf("failed to install greetd niri dms config: %w", err)
}
mainContent := fmt.Sprintf("hotkey-overlay {\n skip-at-startup\n}\n\ninclude \"%s\"\n", dmsPath)
mainContent := fmt.Sprintf("%s\ninclude \"%s\"\n", config.NiriGreeterConfig, dmsPath)
mainTemp, err := os.CreateTemp("", "dms-greeter-niri-main-*.kdl")
if err != nil {
return fmt.Errorf("failed to create temp file: %w", err)
@@ -526,9 +530,8 @@ func ensureGreetdNiriConfig(logFunc func(string), sudoPassword string, niriConfi
if !strings.Contains(command, "--command niri") {
continue
}
if strings.Contains(command, " -C ") || strings.Contains(command, " --config ") || strings.Contains(command, "--config") {
return nil
}
// Strip existing -C or --config and their arguments
command = stripConfigFlag(command)
newCommand := fmt.Sprintf("%s -C %s", command, niriConfigPath)
idx := strings.Index(line, "command")
@@ -808,6 +811,37 @@ user = "greeter"
return nil
}
func stripConfigFlag(command string) string {
for _, flag := range []string{" -C ", " --config "} {
idx := strings.Index(command, flag)
if idx == -1 {
continue
}
before := command[:idx]
after := command[idx+len(flag):]
switch {
case strings.HasPrefix(after, `"`):
if end := strings.Index(after[1:], `"`); end != -1 {
after = after[end+2:]
} else {
after = ""
}
default:
if space := strings.Index(after, " "); space != -1 {
after = after[space:]
} else {
after = ""
}
}
command = strings.TrimSpace(before + after)
}
return command
}
func runSudoCmd(sudoPassword string, command string, args ...string) error {
var cmd *exec.Cmd