1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-24 13:32:50 -05:00

Compare commits

...

6 Commits

Author SHA1 Message Date
bbedward
ad43053b94 cursor: hypr, mango, and dankinstall support for configs 2026-01-06 20:35:22 -05:00
purian23
721700190b feat: DMS Cursor Control - Size & Theme in niri 2026-01-06 19:08:05 -05:00
bbedward
8c9c936d0e clipboard: add cliphist-migrate CLI 2026-01-06 16:49:18 -05:00
dms-ci[bot]
842bf6e3ff nix: update vendorHash for go.mod changes 2026-01-06 21:03:38 +00:00
bbedward
c1fbeb3f5e network: listen to NM Wired interface + use nmcli for route metrics
- Some other misc floating window change, too lazy to separate the
  commit
2026-01-06 16:01:28 -05:00
bbedward
c45eb2cccf plugins: ipc visibility conditions 2026-01-06 13:22:36 -05:00
46 changed files with 3563 additions and 809 deletions

View File

@@ -1,17 +1,29 @@
package main
import (
"bytes"
"context"
"encoding/base64"
"encoding/binary"
"encoding/json"
"fmt"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"io"
"os"
"os/exec"
"os/signal"
"path/filepath"
"strconv"
"syscall"
"time"
bolt "go.etcd.io/bbolt"
_ "golang.org/x/image/bmp"
_ "golang.org/x/image/tiff"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
@@ -144,6 +156,30 @@ var (
clipConfigEnabled bool
)
var clipExportCmd = &cobra.Command{
Use: "export [file]",
Short: "Export clipboard history to JSON",
Long: "Export clipboard history to JSON file. If no file specified, writes to stdout.",
Run: runClipExport,
}
var clipImportCmd = &cobra.Command{
Use: "import <file>",
Short: "Import clipboard history from JSON",
Long: "Import clipboard history from JSON file exported by 'dms cl export'.",
Args: cobra.ExactArgs(1),
Run: runClipImport,
}
var clipMigrateCmd = &cobra.Command{
Use: "cliphist-migrate [db-path]",
Short: "Migrate from cliphist",
Long: "Migrate clipboard history from cliphist. Uses default cliphist path if not specified.",
Run: runClipMigrate,
}
var clipMigrateDelete bool
func init() {
clipCopyCmd.Flags().BoolVarP(&clipCopyForeground, "foreground", "f", false, "Stay in foreground instead of forking")
clipCopyCmd.Flags().BoolVarP(&clipCopyPasteOnce, "paste-once", "o", false, "Exit after first paste")
@@ -170,8 +206,10 @@ func init() {
clipWatchCmd.Flags().BoolVarP(&clipWatchStore, "store", "s", false, "Store clipboard changes to history (no server required)")
clipMigrateCmd.Flags().BoolVar(&clipMigrateDelete, "delete", false, "Delete cliphist db after successful migration")
clipConfigCmd.AddCommand(clipConfigGetCmd, clipConfigSetCmd)
clipboardCmd.AddCommand(clipCopyCmd, clipPasteCmd, clipWatchCmd, clipHistoryCmd, clipGetCmd, clipDeleteCmd, clipClearCmd, clipSearchCmd, clipConfigCmd)
clipboardCmd.AddCommand(clipCopyCmd, clipPasteCmd, clipWatchCmd, clipHistoryCmd, clipGetCmd, clipDeleteCmd, clipClearCmd, clipSearchCmd, clipConfigCmd, clipExportCmd, clipImportCmd, clipMigrateCmd)
}
func runClipCopy(cmd *cobra.Command, args []string) {
@@ -606,3 +644,154 @@ func runClipConfigSet(cmd *cobra.Command, args []string) {
fmt.Println("Config updated")
}
func runClipExport(cmd *cobra.Command, args []string) {
req := models.Request{
ID: 1,
Method: "clipboard.getHistory",
}
resp, err := sendServerRequest(req)
if err != nil {
log.Fatalf("Failed to get clipboard history: %v", err)
}
if resp.Error != "" {
log.Fatalf("Error: %s", resp.Error)
}
if resp.Result == nil {
log.Fatal("No clipboard history")
}
out, err := json.MarshalIndent(resp.Result, "", " ")
if err != nil {
log.Fatalf("Failed to marshal: %v", err)
}
if len(args) == 0 {
fmt.Println(string(out))
return
}
if err := os.WriteFile(args[0], out, 0644); err != nil {
log.Fatalf("Failed to write file: %v", err)
}
fmt.Printf("Exported to %s\n", args[0])
}
func runClipImport(cmd *cobra.Command, args []string) {
data, err := os.ReadFile(args[0])
if err != nil {
log.Fatalf("Failed to read file: %v", err)
}
var entries []map[string]any
if err := json.Unmarshal(data, &entries); err != nil {
log.Fatalf("Failed to parse JSON: %v", err)
}
var imported int
for _, entry := range entries {
dataStr, ok := entry["data"].(string)
if !ok {
continue
}
mimeType, _ := entry["mimeType"].(string)
if mimeType == "" {
mimeType = "text/plain"
}
var entryData []byte
if decoded, err := base64.StdEncoding.DecodeString(dataStr); err == nil {
entryData = decoded
} else {
entryData = []byte(dataStr)
}
if err := clipboard.Store(entryData, mimeType); err != nil {
log.Errorf("Failed to store entry: %v", err)
continue
}
imported++
}
fmt.Printf("Imported %d entries\n", imported)
}
func runClipMigrate(cmd *cobra.Command, args []string) {
dbPath := getCliphistPath()
if len(args) > 0 {
dbPath = args[0]
}
if _, err := os.Stat(dbPath); err != nil {
log.Fatalf("Cliphist db not found: %s", dbPath)
}
db, err := bolt.Open(dbPath, 0644, &bolt.Options{
ReadOnly: true,
Timeout: 1 * time.Second,
})
if err != nil {
log.Fatalf("Failed to open cliphist db: %v", err)
}
defer db.Close()
var migrated int
err = db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("b"))
if b == nil {
return fmt.Errorf("cliphist bucket not found")
}
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
if len(v) == 0 {
continue
}
mimeType := detectMimeType(v)
if err := clipboard.Store(v, mimeType); err != nil {
log.Errorf("Failed to store entry %d: %v", btoi(k), err)
continue
}
migrated++
}
return nil
})
if err != nil {
log.Fatalf("Migration failed: %v", err)
}
fmt.Printf("Migrated %d entries from cliphist\n", migrated)
if !clipMigrateDelete {
return
}
db.Close()
if err := os.Remove(dbPath); err != nil {
log.Errorf("Failed to delete cliphist db: %v", err)
return
}
os.Remove(filepath.Dir(dbPath))
fmt.Println("Deleted cliphist db")
}
func getCliphistPath() string {
cacheDir, err := os.UserCacheDir()
if err != nil {
return filepath.Join(os.Getenv("HOME"), ".cache", "cliphist", "db")
}
return filepath.Join(cacheDir, "cliphist", "db")
}
func detectMimeType(data []byte) string {
if _, _, err := image.DecodeConfig(bytes.NewReader(data)); err == nil {
return "image/png"
}
return "text/plain"
}
func btoi(v []byte) uint64 {
return binary.BigEndian.Uint64(v)
}

View File

@@ -9,28 +9,28 @@ require (
github.com/charmbracelet/lipgloss v1.1.0
github.com/charmbracelet/log v0.4.2
github.com/fsnotify/fsnotify v1.9.0
github.com/godbus/dbus/v5 v5.2.0
github.com/godbus/dbus/v5 v5.2.2
github.com/holoplot/go-evdev v0.0.0-20250804134636-ab1d56a1fe83
github.com/pilebones/go-udev v0.9.1
github.com/sblinch/kdl-go v0.0.0-20250930225324-bf4099d4614a
github.com/spf13/cobra v1.10.1
github.com/sblinch/kdl-go v0.0.0-20251203232544-981d4ecc17c3
github.com/spf13/cobra v1.10.2
github.com/stretchr/testify v1.11.1
go.etcd.io/bbolt v1.4.3
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93
golang.org/x/image v0.34.0
)
require (
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/ProtonMail/go-crypto v1.3.0 // indirect
github.com/clipperhouse/displaywidth v0.6.0 // indirect
github.com/clipperhouse/displaywidth v0.6.2 // indirect
github.com/clipperhouse/stringish v0.1.1 // indirect
github.com/clipperhouse/uax29/v2 v2.3.0 // indirect
github.com/cloudflare/circl v1.6.1 // indirect
github.com/cloudflare/circl v1.6.2 // indirect
github.com/cyphar/filepath-securejoin v0.6.1 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/go-git/gcfg/v2 v2.0.2 // indirect
github.com/go-git/go-billy/v6 v6.0.0-20251126203821-7f9c95185ee0 // indirect
github.com/go-git/go-billy/v6 v6.0.0-20251217170237-e9738f50a3cd // indirect
github.com/go-logfmt/logfmt v0.6.1 // indirect
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/kevinburke/ssh_config v1.4.0 // indirect
@@ -38,21 +38,21 @@ require (
github.com/pjbgf/sha1cd v0.5.0 // indirect
github.com/sergi/go-diff v1.4.0 // indirect
github.com/stretchr/objx v0.5.3 // indirect
golang.org/x/crypto v0.45.0 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/crypto v0.46.0 // indirect
golang.org/x/net v0.48.0 // indirect
)
require (
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/charmbracelet/colorprofile v0.3.3 // indirect
github.com/charmbracelet/colorprofile v0.4.1 // indirect
github.com/charmbracelet/harmonica v0.2.0 // indirect
github.com/charmbracelet/x/ansi v0.11.2 // indirect
github.com/charmbracelet/x/ansi v0.11.3 // indirect
github.com/charmbracelet/x/cellbuf v0.0.14 // indirect
github.com/charmbracelet/x/term v0.2.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/go-git/go-git/v6 v6.0.0-20251128074608-48f817f57805
github.com/go-git/go-git/v6 v6.0.0-20251231065035-29ae690a9f19
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/lucasb-eyer/go-colorful v1.3.0
github.com/mattn/go-isatty v0.0.20 // indirect
@@ -66,7 +66,7 @@ require (
github.com/spf13/afero v1.15.0
github.com/spf13/pflag v1.0.10 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
golang.org/x/sys v0.38.0
golang.org/x/sys v0.39.0
golang.org/x/text v0.32.0
gopkg.in/yaml.v3 v3.0.1 // indirect
)

View File

@@ -18,6 +18,8 @@ github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlv
github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
github.com/charmbracelet/colorprofile v0.3.3 h1:DjJzJtLP6/NZ8p7Cgjno0CKGr7wwRJGxWUwh2IyhfAI=
github.com/charmbracelet/colorprofile v0.3.3/go.mod h1:nB1FugsAbzq284eJcjfah2nhdSLppN2NqvfotkfRYP4=
github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk=
github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
@@ -26,18 +28,24 @@ github.com/charmbracelet/log v0.4.2 h1:hYt8Qj6a8yLnvR+h7MwsJv/XvmBJXiueUcI3cIxsy
github.com/charmbracelet/log v0.4.2/go.mod h1:qifHGX/tc7eluv2R6pWIpyHDDrrb/AG71Pf2ysQu5nw=
github.com/charmbracelet/x/ansi v0.11.2 h1:XAG3FSjiVtFvgEgGrNBkCNNYrsucAt8c6bfxHyROLLs=
github.com/charmbracelet/x/ansi v0.11.2/go.mod h1:9tY2bzX5SiJCU0iWyskjBeI2BRQfvPqI+J760Mjf+Rg=
github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI=
github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI=
github.com/charmbracelet/x/cellbuf v0.0.14 h1:iUEMryGyFTelKW3THW4+FfPgi4fkmKnnaLOXuc+/Kj4=
github.com/charmbracelet/x/cellbuf v0.0.14/go.mod h1:P447lJl49ywBbil/KjCk2HexGh4tEY9LH0/1QrZZ9rA=
github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
github.com/clipperhouse/displaywidth v0.6.0 h1:k32vueaksef9WIKCNcoqRNyKbyvkvkysNYnAWz2fN4s=
github.com/clipperhouse/displaywidth v0.6.0/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o=
github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo=
github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o=
github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA=
github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4=
github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/cloudflare/circl v1.6.2 h1:hL7VBpHHKzrV5WTfHCaBsgx/HGbBYlgrwvNXEVDYYsQ=
github.com/cloudflare/circl v1.6.2/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=
github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
@@ -58,15 +66,22 @@ github.com/go-git/gcfg/v2 v2.0.2 h1:MY5SIIfTGGEMhdA7d7JePuVVxtKL7Hp+ApGDJAJ7dpo=
github.com/go-git/gcfg/v2 v2.0.2/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs=
github.com/go-git/go-billy/v6 v6.0.0-20251126203821-7f9c95185ee0 h1:eY5aB2GXiVdgTueBcqsBt53WuJTRZAuCdIS/86Pcq5c=
github.com/go-git/go-billy/v6 v6.0.0-20251126203821-7f9c95185ee0/go.mod h1:0NjwVNrwtVFZBReAp5OoGklGJIgJFEbVyHneAr4lc8k=
github.com/go-git/go-billy/v6 v6.0.0-20251217170237-e9738f50a3cd h1:Gd/f9cGi/3h1JOPaa6er+CkKUGyGX2DBJdFbDKVO+R0=
github.com/go-git/go-billy/v6 v6.0.0-20251217170237-e9738f50a3cd/go.mod h1:d3XQcsHu1idnquxt48kAv+h+1MUiYKLH/e7LAzjP+pI=
github.com/go-git/go-git-fixtures/v5 v5.1.1 h1:OH8i1ojV9bWfr0ZfasfpgtUXQHQyVS8HXik/V1C099w=
github.com/go-git/go-git-fixtures/v5 v5.1.1/go.mod h1:Altk43lx3b1ks+dVoAG2300o5WWUnktvfY3VI6bcaXU=
github.com/go-git/go-git-fixtures/v5 v5.1.2-0.20251229094738-4b14af179146 h1:xYfxAopYyL44ot6dMBIb1Z1njFM0ZBQ99HdIB99KxLs=
github.com/go-git/go-git/v6 v6.0.0-20251128074608-48f817f57805 h1:jxQ3BzYeErNRvlI/4+0mpwqMzvB4g97U+ksfgvrUEbY=
github.com/go-git/go-git/v6 v6.0.0-20251128074608-48f817f57805/go.mod h1:dIwT3uWK1ooHInyVnK2JS5VfQ3peVGYaw2QPqX7uFvs=
github.com/go-git/go-git/v6 v6.0.0-20251231065035-29ae690a9f19 h1:0lz2eJScP8v5YZQsrEw+ggWC5jNySjg4bIZo5BIh6iI=
github.com/go-git/go-git/v6 v6.0.0-20251231065035-29ae690a9f19/go.mod h1:L+Evfcs7EdTqxwv854354cb6+++7TFL3hJn3Wy4g+3w=
github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE=
github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.2.0 h1:3WexO+U+yg9T70v9FdHr9kCxYlazaAXUhx2VMkbfax8=
github.com/godbus/dbus/v5 v5.2.0/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ=
github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -114,12 +129,16 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sblinch/kdl-go v0.0.0-20250930225324-bf4099d4614a h1:8ZZwZWIQKC0YVMyaCkbrdeI8faTjD1QBrRAAWc1TjMI=
github.com/sblinch/kdl-go v0.0.0-20250930225324-bf4099d4614a/go.mod h1:b3oNGuAKOQzhsCKmuLc/urEOPzgHj6fB8vl8bwTBh28=
github.com/sblinch/kdl-go v0.0.0-20251203232544-981d4ecc17c3 h1:msKaIZrrNpvofLPDzNBW3152PJBsnPZsoNNosOCS+C0=
github.com/sblinch/kdl-go v0.0.0-20251203232544-981d4ecc17c3/go.mod h1:b3oNGuAKOQzhsCKmuLc/urEOPzgHj6fB8vl8bwTBh28=
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -133,22 +152,32 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo=
go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39 h1:DHNhtq3sNNzrvduZZIiFyXWOL9IWaDPHqTnLJp+rCBY=
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39/go.mod h1:46edojNIoXTNOhySWIWdix628clX9ODXwPsQuG6hsK0=
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0=
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
golang.org/x/image v0.34.0 h1:33gCkyw9hmwbZJeZkct8XyR11yH889EQt/QH4VmXMn8=
golang.org/x/image v0.34.0/go.mod h1:2RNFBZRB+vnwwFil8GkMdRvrJOFd1AzdZI6vOY+eJVU=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@@ -55,7 +55,7 @@ func StoreWithConfig(data []byte, mimeType string, cfg StoreConfig) error {
return fmt.Errorf("data too large: %d > %d", len(data), cfg.MaxEntrySize)
}
dbPath, err := getDBPath()
dbPath, err := GetDBPath()
if err != nil {
return fmt.Errorf("get db path: %w", err)
}
@@ -111,7 +111,7 @@ func StoreWithConfig(data []byte, mimeType string, cfg StoreConfig) error {
})
}
func getDBPath() (string, error) {
func GetDBPath() (string, error) {
cacheDir, err := os.UserCacheDir()
if err != nil {
homeDir, err := os.UserHomeDir()
@@ -121,12 +121,31 @@ func getDBPath() (string, error) {
cacheDir = filepath.Join(homeDir, ".cache")
}
dbDir := filepath.Join(cacheDir, "dms-clipboard")
if err := os.MkdirAll(dbDir, 0700); err != nil {
return "", err
newDir := filepath.Join(cacheDir, "DankMaterialShell", "clipboard")
newPath := filepath.Join(newDir, "db")
if _, err := os.Stat(newPath); err == nil {
return newPath, nil
}
return filepath.Join(dbDir, "db"), nil
oldDir := filepath.Join(cacheDir, "dms-clipboard")
oldPath := filepath.Join(oldDir, "db")
if _, err := os.Stat(oldPath); err == nil {
if err := os.MkdirAll(newDir, 0700); err != nil {
return "", err
}
if err := os.Rename(oldPath, newPath); err != nil {
return "", err
}
os.Remove(oldDir)
return newPath, nil
}
if err := os.MkdirAll(newDir, 0700); err != nil {
return "", err
}
return newPath, nil
}
func deduplicateInTx(b *bolt.Bucket, hash uint64) error {

View File

@@ -210,6 +210,7 @@ func (cd *ConfigDeployer) deployNiriDmsConfigs(dmsDir, terminalCommand string) e
{"alttab.kdl", NiriAlttabConfig},
{"binds.kdl", strings.ReplaceAll(NiriBindsConfig, "{{TERMINAL_COMMAND}}", terminalCommand)},
{"outputs.kdl", ""},
{"cursor.kdl", ""},
}
for _, cfg := range configs {
@@ -560,6 +561,7 @@ func (cd *ConfigDeployer) deployHyprlandDmsConfigs(dmsDir string) error {
{"colors.conf", HyprColorsConfig},
{"layout.conf", HyprLayoutConfig},
{"outputs.conf", ""},
{"cursor.conf", ""},
}
for _, cfg := range configs {

View File

@@ -275,3 +275,4 @@ bind = $mod SHIFT, P, dpms, toggle
source = ./dms/colors.conf
source = ./dms/outputs.conf
source = ./dms/layout.conf
source = ./dms/cursor.conf

View File

@@ -1,8 +1,3 @@
// ! DO NOT EDIT !
// ! AUTO-GENERATED BY DMS !
// ! CHANGES WILL BE OVERWRITTEN !
// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
binds {
// === System & Overview ===
Mod+D repeat=false { toggle-overview; }

View File

@@ -270,3 +270,4 @@ include "dms/layout.kdl"
include "dms/alttab.kdl"
include "dms/binds.kdl"
include "dms/outputs.kdl"
include "dms/cursor.kdl"

View File

@@ -461,16 +461,9 @@ func (n *NiriProvider) getBindSortPriority(action string) int {
}
}
const dmsWarningHeader = `// ! DO NOT EDIT !
// ! AUTO-GENERATED BY DMS !
// ! CHANGES WILL BE OVERWRITTEN !
// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
`
func (n *NiriProvider) generateBindsContent(binds map[string]*overrideBind) string {
if len(binds) == 0 {
return dmsWarningHeader + "binds {}\n"
return "binds {}\n"
}
var regularBinds, recentWindowsBinds []*overrideBind
@@ -497,7 +490,6 @@ func (n *NiriProvider) generateBindsContent(binds map[string]*overrideBind) stri
var sb strings.Builder
sb.WriteString(dmsWarningHeader)
sb.WriteString("binds {\n")
for _, bind := range regularBinds {
n.writeBindNode(&sb, bind, " ")

View File

@@ -6,13 +6,6 @@ import (
"testing"
)
const testHeader = `// ! DO NOT EDIT !
// ! AUTO-GENERATED BY DMS !
// ! CHANGES WILL BE OVERWRITTEN !
// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
`
func TestNiriProviderName(t *testing.T) {
provider := NewNiriProvider("")
if provider.Name() != "niri" {
@@ -204,7 +197,7 @@ func TestNiriGenerateBindsContent(t *testing.T) {
{
name: "empty binds",
binds: map[string]*overrideBind{},
expected: testHeader + "binds {}\n",
expected: "binds {}\n",
},
{
name: "simple spawn bind",
@@ -215,7 +208,7 @@ func TestNiriGenerateBindsContent(t *testing.T) {
Description: "Open Terminal",
},
},
expected: testHeader + `binds {
expected: `binds {
Mod+T hotkey-overlay-title="Open Terminal" { spawn "kitty"; }
}
`,
@@ -229,7 +222,7 @@ func TestNiriGenerateBindsContent(t *testing.T) {
Description: "Application Launcher",
},
},
expected: testHeader + `binds {
expected: `binds {
Mod+Space hotkey-overlay-title="Application Launcher" { spawn "dms" "ipc" "call" "spotlight" "toggle"; }
}
`,
@@ -243,7 +236,7 @@ func TestNiriGenerateBindsContent(t *testing.T) {
Options: map[string]any{"allow-when-locked": true},
},
},
expected: testHeader + `binds {
expected: `binds {
XF86AudioMute allow-when-locked=true { spawn "dms" "ipc" "call" "audio" "mute"; }
}
`,
@@ -257,7 +250,7 @@ func TestNiriGenerateBindsContent(t *testing.T) {
Description: "Close Window",
},
},
expected: testHeader + `binds {
expected: `binds {
Mod+Q hotkey-overlay-title="Close Window" { close-window; }
}
`,
@@ -270,7 +263,7 @@ func TestNiriGenerateBindsContent(t *testing.T) {
Action: "next-window",
},
},
expected: testHeader + `binds {
expected: `binds {
}
recent-windows {
@@ -422,7 +415,7 @@ func TestNiriGenerateBindsContentNumericArgs(t *testing.T) {
Description: "Focus Workspace 1",
},
},
expected: testHeader + `binds {
expected: `binds {
Mod+1 hotkey-overlay-title="Focus Workspace 1" { focus-workspace 1; }
}
`,
@@ -436,7 +429,7 @@ func TestNiriGenerateBindsContentNumericArgs(t *testing.T) {
Description: "Focus Workspace 10",
},
},
expected: testHeader + `binds {
expected: `binds {
Mod+0 hotkey-overlay-title="Focus Workspace 10" { focus-workspace 10; }
}
`,
@@ -450,7 +443,7 @@ func TestNiriGenerateBindsContentNumericArgs(t *testing.T) {
Description: "Adjust Column Width -10%",
},
},
expected: testHeader + `binds {
expected: `binds {
Super+Minus hotkey-overlay-title="Adjust Column Width -10%" { set-column-width "-10%"; }
}
`,
@@ -464,7 +457,7 @@ func TestNiriGenerateBindsContentNumericArgs(t *testing.T) {
Description: "Adjust Column Width +10%",
},
},
expected: testHeader + `binds {
expected: `binds {
Super+Equal hotkey-overlay-title="Adjust Column Width +10%" { set-column-width "+10%"; }
}
`,
@@ -493,7 +486,7 @@ func TestNiriGenerateActionWithUnquotedPercentArg(t *testing.T) {
}
content := provider.generateBindsContent(binds)
expected := testHeader + `binds {
expected := `binds {
Super+Equal hotkey-overlay-title="Adjust Window Height +10%" { set-window-height "+10%"; }
}
`
@@ -514,7 +507,7 @@ func TestNiriGenerateSpawnWithNumericArgs(t *testing.T) {
}
content := provider.generateBindsContent(binds)
expected := testHeader + `binds {
expected := `binds {
XF86AudioLowerVolume allow-when-locked=true { spawn "dms" "ipc" "call" "audio" "decrement" "3"; }
}
`
@@ -535,7 +528,7 @@ func TestNiriGenerateSpawnNumericArgFromCLI(t *testing.T) {
}
content := provider.generateBindsContent(binds)
expected := testHeader + `binds {
expected := `binds {
XF86AudioLowerVolume allow-when-locked=true { spawn "dms" "ipc" "call" "audio" "decrement" "3"; }
}
`

View File

@@ -24,6 +24,7 @@ import (
bolt "go.etcd.io/bbolt"
clipboardstore "github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/ext_data_control"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/wlcontext"
@@ -37,7 +38,7 @@ var sensitiveMimeTypes = []string{
func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error) {
display := wlCtx.Display()
dbPath, err := getDBPath()
dbPath, err := clipboardstore.GetDBPath()
if err != nil {
return nil, fmt.Errorf("failed to get db path: %w", err)
}
@@ -102,24 +103,6 @@ func NewManager(wlCtx wlcontext.WaylandContext, config Config) (*Manager, error)
return m, nil
}
func getDBPath() (string, error) {
cacheDir := os.Getenv("XDG_CACHE_HOME")
if cacheDir == "" {
homeDir, err := os.UserHomeDir()
if err != nil {
return "", err
}
cacheDir = filepath.Join(homeDir, ".cache")
}
dbDir := filepath.Join(cacheDir, "dms-clipboard")
if err := os.MkdirAll(dbDir, 0700); err != nil {
return "", err
}
return filepath.Join(dbDir, "db"), nil
}
func openDB(path string) (*bolt.DB, error) {
db, err := bolt.Open(path, 0644, &bolt.Options{
Timeout: 1 * time.Second,

View File

@@ -13,6 +13,7 @@ const (
dbusNMPath = "/org/freedesktop/NetworkManager"
dbusNMInterface = "org.freedesktop.NetworkManager"
dbusNMDeviceInterface = "org.freedesktop.NetworkManager.Device"
dbusNMWiredInterface = "org.freedesktop.NetworkManager.Device.Wired"
dbusNMWirelessInterface = "org.freedesktop.NetworkManager.Device.Wireless"
dbusNMAccessPointInterface = "org.freedesktop.NetworkManager.AccessPoint"
dbusPropsInterface = "org.freedesktop.DBus.Properties"

View File

@@ -81,44 +81,24 @@ func (b *NetworkManagerBackend) startSignalPump() error {
return err
}
if b.wifiDevice != nil {
dev := b.wifiDevice.(gonetworkmanager.Device)
for _, info := range b.wifiDevices {
if err := conn.AddMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dev.GetPath())),
dbus.WithMatchObjectPath(dbus.ObjectPath(info.device.GetPath())),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
); err != nil {
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMPath)),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
conn.RemoveSignal(signals)
conn.Close()
return err
}
}
if b.ethernetDevice != nil {
dev := b.ethernetDevice.(gonetworkmanager.Device)
for _, info := range b.ethernetDevices {
if err := conn.AddMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dev.GetPath())),
dbus.WithMatchObjectPath(dbus.ObjectPath(info.device.GetPath())),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
); err != nil {
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMPath)),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
if b.wifiDevice != nil {
dev := b.wifiDevice.(gonetworkmanager.Device)
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dev.GetPath())),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
}
conn.RemoveSignal(signals)
conn.Close()
return err
@@ -157,19 +137,17 @@ func (b *NetworkManagerBackend) stopSignalPump() {
dbus.WithMatchMember("PropertiesChanged"),
)
if b.wifiDevice != nil {
dev := b.wifiDevice.(gonetworkmanager.Device)
for _, info := range b.wifiDevices {
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dev.GetPath())),
dbus.WithMatchObjectPath(dbus.ObjectPath(info.device.GetPath())),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
}
if b.ethernetDevice != nil {
dev := b.ethernetDevice.(gonetworkmanager.Device)
for _, info := range b.ethernetDevices {
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dev.GetPath())),
dbus.WithMatchObjectPath(dbus.ObjectPath(info.device.GetPath())),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
@@ -232,7 +210,10 @@ func (b *NetworkManagerBackend) handleDBusSignal(sig *dbus.Signal) {
b.handleNetworkManagerChange(changes)
case dbusNMDeviceInterface:
b.handleDeviceChange(changes)
b.handleDeviceChange(sig.Path, changes)
case dbusNMWiredInterface:
b.handleWiredChange(changes)
case dbusNMWirelessInterface:
b.handleWiFiChange(changes)
@@ -278,9 +259,10 @@ func (b *NetworkManagerBackend) handleNetworkManagerChange(changes map[string]db
}
}
func (b *NetworkManagerBackend) handleDeviceChange(changes map[string]dbus.Variant) {
func (b *NetworkManagerBackend) handleDeviceChange(devicePath dbus.ObjectPath, changes map[string]dbus.Variant) {
var needsUpdate bool
var stateChanged bool
var managedChanged bool
for key := range changes {
switch key {
@@ -289,21 +271,61 @@ func (b *NetworkManagerBackend) handleDeviceChange(changes map[string]dbus.Varia
needsUpdate = true
case "Ip4Config":
needsUpdate = true
case "Managed":
managedChanged = true
default:
continue
}
}
if needsUpdate {
b.updateEthernetState()
b.updateWiFiState()
if stateChanged {
b.updatePrimaryConnection()
if managedChanged {
if managedVariant, ok := changes["Managed"]; ok {
if managed, ok := managedVariant.Value().(bool); ok && managed {
b.handleDeviceAdded(devicePath)
return
}
}
if b.onStateChange != nil {
b.onStateChange()
}
if !needsUpdate {
return
}
b.updateAllEthernetDevices()
b.updateEthernetState()
b.updateAllWiFiDevices()
b.updateWiFiState()
if stateChanged {
b.listEthernetConnections()
b.updatePrimaryConnection()
}
if b.onStateChange != nil {
b.onStateChange()
}
}
func (b *NetworkManagerBackend) handleWiredChange(changes map[string]dbus.Variant) {
var needsUpdate bool
for key := range changes {
switch key {
case "Carrier", "Speed", "HwAddress":
needsUpdate = true
default:
continue
}
}
if !needsUpdate {
return
}
b.updateAllEthernetDevices()
b.updateEthernetState()
b.updatePrimaryConnection()
if b.onStateChange != nil {
b.onStateChange()
}
}
func (b *NetworkManagerBackend) handleWiFiChange(changes map[string]dbus.Variant) {
@@ -369,6 +391,18 @@ func (b *NetworkManagerBackend) handleDeviceAdded(devicePath dbus.ObjectPath) {
return
}
if devType != gonetworkmanager.NmDeviceTypeEthernet && devType != gonetworkmanager.NmDeviceTypeWifi {
return
}
if b.dbusConn != nil {
b.dbusConn.AddMatchSignal(
dbus.WithMatchObjectPath(devicePath),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
}
managed, _ := dev.GetPropertyManaged()
if !managed {
return
@@ -398,14 +432,6 @@ func (b *NetworkManagerBackend) handleDeviceAdded(devicePath dbus.ObjectPath) {
b.ethernetDevice = dev
}
if b.dbusConn != nil {
b.dbusConn.AddMatchSignal(
dbus.WithMatchObjectPath(devicePath),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
}
b.updateAllEthernetDevices()
b.updateEthernetState()
b.listEthernetConnections()
@@ -430,14 +456,6 @@ func (b *NetworkManagerBackend) handleDeviceAdded(devicePath dbus.ObjectPath) {
b.wifiDev = w
}
if b.dbusConn != nil {
b.dbusConn.AddMatchSignal(
dbus.WithMatchObjectPath(devicePath),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
}
b.updateAllWiFiDevices()
b.updateWiFiState()
}

View File

@@ -159,7 +159,7 @@ func TestNetworkManagerBackend_HandleDeviceChange(t *testing.T) {
}
assert.NotPanics(t, func() {
backend.handleDeviceChange(changes)
backend.handleDeviceChange("/org/freedesktop/NetworkManager/Devices/1", changes)
})
}
@@ -174,7 +174,7 @@ func TestNetworkManagerBackend_HandleDeviceChange_Ip4Config(t *testing.T) {
}
assert.NotPanics(t, func() {
backend.handleDeviceChange(changes)
backend.handleDeviceChange("/org/freedesktop/NetworkManager/Devices/1", changes)
})
}

View File

@@ -2,9 +2,21 @@ package network
import (
"fmt"
"os/exec"
"time"
"github.com/Wifx/gonetworkmanager/v2"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/godbus/dbus/v5"
)
const (
priorityHigh = int32(100)
priorityLow = int32(10)
priorityDefault = int32(0)
metricPreferred = int64(100)
metricNonPreferred = int64(300)
metricDefault = int64(100)
)
func (m *Manager) SetConnectionPreference(pref ConnectionPreference) error {
@@ -36,83 +48,124 @@ func (m *Manager) SetConnectionPreference(pref ConnectionPreference) error {
}
func (m *Manager) prioritizeWiFi() error {
if err := m.setConnectionMetrics("802-11-wireless", 50); err != nil {
return err
if err := m.setConnectionPriority("802-11-wireless", priorityHigh, metricPreferred); err != nil {
log.Warnf("Failed to set WiFi priority: %v", err)
}
if err := m.setConnectionMetrics("802-3-ethernet", 100); err != nil {
return err
if err := m.setConnectionPriority("802-3-ethernet", priorityLow, metricNonPreferred); err != nil {
log.Warnf("Failed to set Ethernet priority: %v", err)
}
m.reapplyActiveConnections()
m.notifySubscribers()
return nil
}
func (m *Manager) prioritizeEthernet() error {
if err := m.setConnectionMetrics("802-3-ethernet", 50); err != nil {
return err
if err := m.setConnectionPriority("802-3-ethernet", priorityHigh, metricPreferred); err != nil {
log.Warnf("Failed to set Ethernet priority: %v", err)
}
if err := m.setConnectionMetrics("802-11-wireless", 100); err != nil {
return err
if err := m.setConnectionPriority("802-11-wireless", priorityLow, metricNonPreferred); err != nil {
log.Warnf("Failed to set WiFi priority: %v", err)
}
m.reapplyActiveConnections()
m.notifySubscribers()
return nil
}
func (m *Manager) balancePriorities() error {
if err := m.setConnectionMetrics("802-3-ethernet", 50); err != nil {
return err
if err := m.setConnectionPriority("802-3-ethernet", priorityDefault, metricDefault); err != nil {
log.Warnf("Failed to reset Ethernet priority: %v", err)
}
if err := m.setConnectionMetrics("802-11-wireless", 50); err != nil {
return err
if err := m.setConnectionPriority("802-11-wireless", priorityDefault, metricDefault); err != nil {
log.Warnf("Failed to reset WiFi priority: %v", err)
}
m.reapplyActiveConnections()
m.notifySubscribers()
return nil
}
func (m *Manager) setConnectionMetrics(connType string, metric uint32) error {
settingsMgr, err := gonetworkmanager.NewSettings()
func (m *Manager) reapplyActiveConnections() {
m.stateMutex.RLock()
ethDev := m.state.EthernetDevice
wifiDev := m.state.WiFiDevice
m.stateMutex.RUnlock()
if ethDev != "" {
exec.Command("nmcli", "dev", "reapply", ethDev).Run()
}
if wifiDev != "" {
exec.Command("nmcli", "dev", "reapply", wifiDev).Run()
}
}
func (m *Manager) setConnectionPriority(connType string, autoconnectPriority int32, routeMetric int64) error {
conn, err := dbus.ConnectSystemBus()
if err != nil {
return fmt.Errorf("failed to get settings: %w", err)
return fmt.Errorf("failed to connect to system bus: %w", err)
}
defer conn.Close()
settingsObj := conn.Object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
var connPaths []dbus.ObjectPath
if err := settingsObj.Call("org.freedesktop.NetworkManager.Settings.ListConnections", 0).Store(&connPaths); err != nil {
return fmt.Errorf("failed to list connections: %w", err)
}
connections, err := settingsMgr.ListConnections()
if err != nil {
return fmt.Errorf("failed to get connections: %w", err)
}
for _, connPath := range connPaths {
connObj := conn.Object("org.freedesktop.NetworkManager", connPath)
for _, conn := range connections {
connSettings, err := conn.GetSettings()
if err != nil {
var settings map[string]map[string]dbus.Variant
if err := connObj.Call("org.freedesktop.NetworkManager.Settings.Connection.GetSettings", 0).Store(&settings); err != nil {
continue
}
if connMeta, ok := connSettings["connection"]; ok {
if cType, ok := connMeta["type"].(string); ok && cType == connType {
if connSettings["ipv4"] == nil {
connSettings["ipv4"] = make(map[string]any)
}
if ipv4Map := connSettings["ipv4"]; ipv4Map != nil {
ipv4Map["route-metric"] = int64(metric)
}
if connSettings["ipv6"] == nil {
connSettings["ipv6"] = make(map[string]any)
}
if ipv6Map := connSettings["ipv6"]; ipv6Map != nil {
ipv6Map["route-metric"] = int64(metric)
}
err = conn.Update(connSettings)
if err != nil {
continue
}
}
connSection, ok := settings["connection"]
if !ok {
continue
}
typeVariant, ok := connSection["type"]
if !ok {
continue
}
cType, ok := typeVariant.Value().(string)
if !ok || cType != connType {
continue
}
connName := ""
if idVariant, ok := connSection["id"]; ok {
connName, _ = idVariant.Value().(string)
}
if connName == "" {
continue
}
if err := exec.Command("nmcli", "con", "mod", connName,
"connection.autoconnect-priority", fmt.Sprintf("%d", autoconnectPriority)).Run(); err != nil {
log.Warnf("Failed to set autoconnect-priority for %v: %v", connName, err)
continue
}
if err := exec.Command("nmcli", "con", "mod", connName,
"ipv4.route-metric", fmt.Sprintf("%d", routeMetric)).Run(); err != nil {
log.Warnf("Failed to set ipv4.route-metric for %v: %v", connName, err)
}
if err := exec.Command("nmcli", "con", "mod", connName,
"ipv6.route-metric", fmt.Sprintf("%d", routeMetric)).Run(); err != nil {
log.Warnf("Failed to set ipv6.route-metric for %v: %v", connName, err)
}
log.Infof("Updated %v: autoconnect-priority=%d, route-metric=%d", connName, autoconnectPriority, routeMetric)
}
return nil
@@ -125,14 +178,18 @@ func (m *Manager) GetConnectionPreference() ConnectionPreference {
}
func (m *Manager) WasRecentlyFailed(ssid string) bool {
if nm, ok := m.backend.(*NetworkManagerBackend); ok {
nm.failedMutex.RLock()
defer nm.failedMutex.RUnlock()
if nm.lastFailedSSID == ssid {
elapsed := time.Now().Unix() - nm.lastFailedTime
return elapsed < 10
}
nm, ok := m.backend.(*NetworkManagerBackend)
if !ok {
return false
}
return false
nm.failedMutex.RLock()
defer nm.failedMutex.RUnlock()
if nm.lastFailedSSID != ssid {
return false
}
elapsed := time.Now().Unix() - nm.lastFailedTime
return elapsed < 10
}

View File

@@ -76,7 +76,7 @@
inherit version;
pname = "dms-shell";
src = ./core;
vendorHash = "sha256-DINaA5LCOWoxBIewuc39Rnwj6NdZoET7Q++B11Qg5rI=";
vendorHash = "sha256-9CnZFtjXXWYELRiBX2UbZvWopnl9Y1ILuK+xP6YQZ9U=";
subPackages = [ "cmd/dms" ];

View File

@@ -246,6 +246,25 @@ Singleton {
property bool qt6ctAvailable: false
property bool gtkAvailable: false
property var cursorSettings: ({
"theme": "System Default",
"size": 24,
"niri": {
"hideWhenTyping": false,
"hideAfterInactiveMs": 0
},
"hyprland": {
"hideOnKeyPress": false,
"hideOnTouch": false,
"inactiveTimeout": 0
},
"dwl": {
"cursorHideTimeout": 0
}
})
property var availableCursorThemes: ["System Default"]
property string systemDefaultCursorTheme: ""
property string launcherLogoMode: "apps"
property string launcherLogoCustomPath: ""
property string launcherLogoColorOverride: ""
@@ -815,7 +834,8 @@ Singleton {
"regenSystemThemes": regenSystemThemes,
"updateCompositorLayout": updateCompositorLayout,
"applyStoredIconTheme": applyStoredIconTheme,
"updateBarConfigs": updateBarConfigs
"updateBarConfigs": updateBarConfigs,
"updateCompositorCursor": updateCompositorCursor
})
function set(key, value) {
@@ -852,6 +872,7 @@ Singleton {
_hasLoaded = true;
applyStoredTheme();
applyStoredIconTheme();
updateCompositorCursor();
Processes.detectQtTools();
_checkSettingsWritable();
@@ -982,6 +1003,46 @@ Singleton {
});
}
function detectAvailableCursorThemes() {
const xdgDataDirs = Quickshell.env("XDG_DATA_DIRS") || "";
const localData = Paths.strip(StandardPaths.writableLocation(StandardPaths.GenericDataLocation));
const homeDir = Paths.strip(StandardPaths.writableLocation(StandardPaths.HomeLocation));
const dataDirs = xdgDataDirs.trim() !== "" ? xdgDataDirs.split(":").concat([localData]) : ["/usr/share", "/usr/local/share", localData];
const cursorPaths = dataDirs.map(d => d + "/icons").concat([homeDir + "/.icons", homeDir + "/.local/share/icons"]);
const pathsArg = cursorPaths.join(" ");
const script = `
echo "SYSDEFAULT:$(gsettings get org.gnome.desktop.interface cursor-theme 2>/dev/null | sed "s/'//g" || echo '')"
for dir in ${pathsArg}; do
[ -d "$dir" ] || continue
for theme in "$dir"/*/; do
[ -d "$theme" ] || continue
[ -d "$theme/cursors" ] || continue
basename "$theme"
done
done | grep -v '^icons$' | grep -v '^default$' | sort -u
`;
Proc.runCommand("detectCursorThemes", ["sh", "-c", script], (output, exitCode) => {
const themes = ["System Default"];
if (output && output.trim()) {
const lines = output.trim().split('\n');
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();
if (line.startsWith("SYSDEFAULT:")) {
systemDefaultCursorTheme = line.substring(11).trim();
continue;
}
if (line)
themes.push(line);
}
}
availableCursorThemes = themes;
});
}
function getEffectiveTimeFormat() {
if (use24HourClock) {
return showSeconds ? "hh:mm:ss" : "hh:mm";
@@ -1510,6 +1571,60 @@ Singleton {
Theme.generateSystemThemesFromCurrentTheme();
}
function setCursorTheme(themeName) {
const updated = JSON.parse(JSON.stringify(cursorSettings));
updated.theme = themeName;
cursorSettings = updated;
saveSettings();
updateCompositorCursor();
}
function setCursorSize(size) {
const updated = JSON.parse(JSON.stringify(cursorSettings));
updated.size = size;
cursorSettings = updated;
saveSettings();
updateCompositorCursor();
}
function updateCompositorCursor() {
if (typeof CompositorService === "undefined")
return;
if (CompositorService.isNiri && typeof NiriService !== "undefined") {
NiriService.generateNiriCursorConfig();
return;
}
if (CompositorService.isHyprland && typeof HyprlandService !== "undefined") {
HyprlandService.generateCursorConfig();
return;
}
if (CompositorService.isDwl && typeof DwlService !== "undefined") {
DwlService.generateCursorConfig();
return;
}
}
function getCursorEnvironment() {
const isSystemDefault = cursorSettings.theme === "System Default";
const isDefaultSize = !cursorSettings.size || cursorSettings.size === 24;
if (isSystemDefault && isDefaultSize)
return {};
const themeName = isSystemDefault ? "" : cursorSettings.theme;
const size = String(cursorSettings.size || 24);
const env = {};
if (!isDefaultSize) {
env["XCURSOR_SIZE"] = size;
env["HYPRCURSOR_SIZE"] = size;
}
if (themeName) {
env["XCURSOR_THEME"] = themeName;
env["HYPRCURSOR_THEME"] = themeName;
}
return env;
}
function setGtkThemingEnabled(enabled) {
set("gtkThemingEnabled", enabled);
if (enabled && typeof Theme !== "undefined") {
@@ -1914,6 +2029,7 @@ Singleton {
_hasLoaded = true;
applyStoredTheme();
applyStoredIconTheme();
updateCompositorCursor();
} catch (e) {
_parseError = true;
const msg = e.message;

View File

@@ -134,6 +134,10 @@ var SPEC = {
qt6ctAvailable: { def: false, persist: false },
gtkAvailable: { def: false, persist: false },
cursorSettings: { def: { theme: "System Default", size: 24, niri: { hideWhenTyping: false, hideAfterInactiveMs: 0 }, hyprland: { hideOnKeyPress: false, hideOnTouch: false, inactiveTimeout: 0 }, dwl: { cursorHideTimeout: 0 } }, onChange: "updateCompositorCursor" },
availableCursorThemes: { def: ["System Default"], persist: false },
systemDefaultCursorTheme: { def: "", persist: false },
launcherLogoMode: { def: "apps" },
launcherLogoCustomPath: { def: "" },
launcherLogoColorOverride: { def: "" },

View File

@@ -787,7 +787,16 @@ Item {
const widgets = BarWidgetService.getRegisteredWidgetIds();
if (widgets.length === 0)
return "No widgets registered";
return widgets.join("\n");
const lines = [];
for (const widgetId of widgets) {
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
let state = "";
if (widget?.effectiveVisible !== undefined)
state = widget.effectiveVisible ? " [visible]" : " [hidden]";
lines.push(widgetId + state);
}
return lines.join("\n");
}
function status(widgetId: string): string {
@@ -806,6 +815,76 @@ Item {
return "hidden";
}
function reveal(widgetId: string): string {
if (!widgetId)
return "ERROR: No widget ID specified";
if (!BarWidgetService.hasWidget(widgetId))
return `WIDGET_NOT_FOUND: ${widgetId}`;
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
if (!widget)
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
if (typeof widget.setVisibilityOverride === "function") {
widget.setVisibilityOverride(true);
return `WIDGET_REVEAL_SUCCESS: ${widgetId}`;
}
return `WIDGET_REVEAL_NOT_SUPPORTED: ${widgetId}`;
}
function hide(widgetId: string): string {
if (!widgetId)
return "ERROR: No widget ID specified";
if (!BarWidgetService.hasWidget(widgetId))
return `WIDGET_NOT_FOUND: ${widgetId}`;
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
if (!widget)
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
if (typeof widget.setVisibilityOverride === "function") {
widget.setVisibilityOverride(false);
return `WIDGET_HIDE_SUCCESS: ${widgetId}`;
}
return `WIDGET_HIDE_NOT_SUPPORTED: ${widgetId}`;
}
function reset(widgetId: string): string {
if (!widgetId)
return "ERROR: No widget ID specified";
if (!BarWidgetService.hasWidget(widgetId))
return `WIDGET_NOT_FOUND: ${widgetId}`;
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
if (!widget)
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
if (typeof widget.clearVisibilityOverride === "function") {
widget.clearVisibilityOverride();
return `WIDGET_RESET_SUCCESS: ${widgetId}`;
}
return `WIDGET_RESET_NOT_SUPPORTED: ${widgetId}`;
}
function visibility(widgetId: string): string {
if (!widgetId)
return "ERROR: No widget ID specified";
if (!BarWidgetService.hasWidget(widgetId))
return `WIDGET_NOT_FOUND: ${widgetId}`;
const widget = BarWidgetService.getWidgetOnFocusedScreen(widgetId);
if (!widget)
return `WIDGET_NOT_AVAILABLE: ${widgetId}`;
if (widget.effectiveVisible !== undefined)
return widget.effectiveVisible ? "visible" : "hidden";
return "unknown";
}
target: "widget"
}

View File

@@ -213,7 +213,7 @@ FloatingWindow {
spacing: Theme.spacingXS
DankActionButton {
visible: windowControls.supported
visible: windowControls.supported && windowControls.canMaximize
iconName: root.maximized ? "fullscreen_exit" : "fullscreen"
iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText

View File

@@ -117,7 +117,7 @@ FloatingWindow {
onDoubleClicked: windowControls.tryToggleMaximize()
}
Row {
Item {
id: headerRow
anchors.left: parent.left
anchors.right: parent.right
@@ -125,9 +125,13 @@ FloatingWindow {
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
anchors.topMargin: Theme.spacingM
height: Math.max(titleColumn.height, buttonRow.height)
Column {
width: parent.width - 60
id: titleColumn
anchors.left: parent.left
anchors.right: buttonRow.left
anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingXS
StyledText {
@@ -162,10 +166,12 @@ FloatingWindow {
}
Row {
id: buttonRow
anchors.right: parent.right
spacing: Theme.spacingXS
DankActionButton {
visible: windowControls.supported
visible: windowControls.supported && windowControls.canMaximize
iconName: root.maximized ? "fullscreen_exit" : "fullscreen"
iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText

View File

@@ -44,12 +44,18 @@ FloatingWindow {
property int calculatedHeight: {
let h = headerHeight + buttonRowHeight + Theme.spacingL * 2;
h += fieldsInfo.length * inputFieldWithSpacing;
if (showUsernameField) h += inputFieldWithSpacing;
if (showPasswordField) h += inputFieldWithSpacing;
if (showAnonField) h += inputFieldWithSpacing;
if (showDomainField) h += inputFieldWithSpacing;
if (showShowPasswordCheckbox) h += checkboxRowHeight;
if (showSavePasswordCheckbox) h += checkboxRowHeight;
if (showUsernameField)
h += inputFieldWithSpacing;
if (showPasswordField)
h += inputFieldWithSpacing;
if (showAnonField)
h += inputFieldWithSpacing;
if (showDomainField)
h += inputFieldWithSpacing;
if (showShowPasswordCheckbox)
h += checkboxRowHeight;
if (showSavePasswordCheckbox)
h += checkboxRowHeight;
return h;
}
@@ -267,11 +273,14 @@ FloatingWindow {
width: parent.width - Theme.spacingL * 2
spacing: Theme.spacingM
Row {
Item {
width: contentCol.width
height: Math.max(headerCol.height, buttonRow.height)
MouseArea {
width: parent.width - 60
anchors.left: parent.left
anchors.right: buttonRow.left
anchors.rightMargin: Theme.spacingM
height: headerCol.height
onPressed: windowControls.tryStartMove()
onDoubleClicked: windowControls.tryToggleMaximize()
@@ -327,10 +336,12 @@ FloatingWindow {
}
Row {
id: buttonRow
anchors.right: parent.right
spacing: Theme.spacingXS
DankActionButton {
visible: windowControls.supported
visible: windowControls.supported && windowControls.canMaximize
iconName: root.maximized ? "fullscreen_exit" : "fullscreen"
iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText

View File

@@ -1,4 +1,5 @@
import QtQuick
import Quickshell.Io
import qs.Common
Item {
@@ -16,6 +17,20 @@ Item {
property string pluginId: ""
property var pluginService: null
property string visibilityCommand: ""
property int visibilityInterval: 0
property bool conditionVisible: true
property bool _visibilityOverride: false
property bool _visibilityOverrideValue: true
readonly property bool effectiveVisible: {
if (_visibilityOverride)
return _visibilityOverrideValue;
if (!visibilityCommand)
return true;
return conditionVisible;
}
property Component horizontalBarPill: null
property Component verticalBarPill: null
property Component popoutContent: null
@@ -49,6 +64,8 @@ Item {
Component.onCompleted: {
loadPluginData();
if (visibilityCommand)
Qt.callLater(checkVisibility);
}
onPluginServiceChanged: {
@@ -78,6 +95,57 @@ Item {
variants = pluginService.getPluginVariants(pluginId);
}
function checkVisibility() {
if (!visibilityCommand) {
conditionVisible = true;
return;
}
visibilityProcess.running = true;
}
function setVisibilityOverride(visible) {
_visibilityOverride = true;
_visibilityOverrideValue = visible;
}
function clearVisibilityOverride() {
_visibilityOverride = false;
if (visibilityCommand)
checkVisibility();
}
onVisibilityCommandChanged: {
if (visibilityCommand)
Qt.callLater(checkVisibility);
else
conditionVisible = true;
}
onVisibilityIntervalChanged: {
if (visibilityInterval > 0 && visibilityCommand) {
visibilityTimer.restart();
} else {
visibilityTimer.stop();
}
}
Timer {
id: visibilityTimer
interval: root.visibilityInterval * 1000
repeat: true
running: root.visibilityInterval > 0 && root.visibilityCommand !== ""
onTriggered: root.checkVisibility()
}
Process {
id: visibilityProcess
command: ["sh", "-c", root.visibilityCommand]
running: false
onExited: (exitCode, exitStatus) => {
root.conditionVisible = (exitCode === 0);
}
}
function createVariant(variantName, variantConfig) {
if (!pluginService || !pluginId) {
return null;
@@ -105,6 +173,7 @@ Item {
BasePill {
id: horizontalPill
visible: !isVertical && hasHorizontalPill
opacity: root.effectiveVisible ? 1 : 0
axis: root.axis
section: root.section
popoutTarget: hasPopout ? pluginPopout : null
@@ -114,6 +183,24 @@ Item {
barSpacing: root.barSpacing
barConfig: root.barConfig
content: root.horizontalBarPill
states: State {
name: "hidden"
when: !root.effectiveVisible
PropertyChanges {
target: horizontalPill
width: 0
}
}
transitions: Transition {
NumberAnimation {
properties: "width,opacity"
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
onClicked: {
if (pillClickAction) {
if (pillClickAction.length === 0) {
@@ -145,6 +232,7 @@ Item {
BasePill {
id: verticalPill
visible: isVertical && hasVerticalPill
opacity: root.effectiveVisible ? 1 : 0
axis: root.axis
section: root.section
popoutTarget: hasPopout ? pluginPopout : null
@@ -155,6 +243,24 @@ Item {
barConfig: root.barConfig
content: root.verticalBarPill
isVerticalOrientation: true
states: State {
name: "hidden"
when: !root.effectiveVisible
PropertyChanges {
target: verticalPill
height: 0
}
}
transitions: Transition {
NumberAnimation {
properties: "height,opacity"
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
onClicked: {
if (pillClickAction) {
if (pillClickAction.length === 0) {

View File

@@ -399,14 +399,14 @@ Item {
text: "•"
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
visible: modelData.ip && modelData.ip.length > 0
visible: (modelData.ip || "").length > 0
}
StyledText {
text: modelData.ip || ""
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
visible: modelData.ip && modelData.ip.length > 0
visible: (modelData.ip || "").length > 0
}
}
}

View File

@@ -328,7 +328,6 @@ FloatingWindow {
anchors.top: browserSearchField.bottom
anchors.topMargin: Theme.spacingM
anchors.bottom: parent.bottom
anchors.bottomMargin: Theme.spacingM
Item {
anchors.fill: parent
@@ -366,10 +365,6 @@ FloatingWindow {
id: themeBrowserList
anchors.fill: parent
anchors.leftMargin: Theme.spacingM
anchors.rightMargin: Theme.spacingM
anchors.topMargin: Theme.spacingS
anchors.bottomMargin: Theme.spacingS
spacing: Theme.spacingS
model: ScriptModel {
values: root.filteredThemes

View File

@@ -1,3 +1,4 @@
import QtCore
import QtQuick
import QtQuick.Effects
import Quickshell
@@ -12,10 +13,84 @@ Item {
id: themeColorsTab
property var cachedIconThemes: SettingsData.availableIconThemes
property var cachedCursorThemes: SettingsData.availableCursorThemes
property var cachedMatugenSchemes: Theme.availableMatugenSchemes.map(option => option.label)
property var installedRegistryThemes: []
property var templateDetection: ({})
property var cursorIncludeStatus: ({
"exists": false,
"included": false
})
property bool checkingCursorInclude: false
property bool fixingCursorInclude: false
function getCursorConfigPaths() {
const configDir = Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation));
switch (CompositorService.compositor) {
case "niri":
return {
"configFile": configDir + "/niri/config.kdl",
"cursorFile": configDir + "/niri/dms/cursor.kdl",
"grepPattern": 'include.*"dms/cursor.kdl"',
"includeLine": 'include "dms/cursor.kdl"'
};
case "hyprland":
return {
"configFile": configDir + "/hypr/hyprland.conf",
"cursorFile": configDir + "/hypr/dms/cursor.conf",
"grepPattern": 'source.*dms/cursor.conf',
"includeLine": "source = ./dms/cursor.conf"
};
case "dwl":
return {
"configFile": configDir + "/mango/config.conf",
"cursorFile": configDir + "/mango/dms/cursor.conf",
"grepPattern": 'source.*dms/cursor.conf',
"includeLine": "source=./dms/cursor.conf"
};
default:
return null;
}
}
function checkCursorIncludeStatus() {
const paths = getCursorConfigPaths();
if (!paths) {
cursorIncludeStatus = {
"exists": false,
"included": false
};
return;
}
checkingCursorInclude = true;
Proc.runCommand("check-cursor-include", ["sh", "-c", `exists=false; included=false; ` + `[ -f "${paths.cursorFile}" ] && exists=true; ` + `[ -f "${paths.configFile}" ] && grep -v '^[[:space:]]*\\(//\\|#\\)' "${paths.configFile}" | grep -q '${paths.grepPattern}' && included=true; ` + `echo "$exists $included"`], (output, exitCode) => {
checkingCursorInclude = false;
const parts = output.trim().split(" ");
cursorIncludeStatus = {
"exists": parts[0] === "true",
"included": parts[1] === "true"
};
});
}
function fixCursorInclude() {
const paths = getCursorConfigPaths();
if (!paths)
return;
fixingCursorInclude = true;
const cursorDir = paths.cursorFile.substring(0, paths.cursorFile.lastIndexOf("/"));
const unixTime = Math.floor(Date.now() / 1000);
const backupFile = paths.configFile + ".backup" + unixTime;
Proc.runCommand("fix-cursor-include", ["sh", "-c", `cp "${paths.configFile}" "${backupFile}" 2>/dev/null; ` + `mkdir -p "${cursorDir}" && ` + `touch "${paths.cursorFile}" && ` + `if ! grep -v '^[[:space:]]*\\(//\\|#\\)' "${paths.configFile}" 2>/dev/null | grep -q '${paths.grepPattern}'; then ` + `echo '' >> "${paths.configFile}" && ` + `echo '${paths.includeLine}' >> "${paths.configFile}"; fi`], (output, exitCode) => {
fixingCursorInclude = false;
if (exitCode !== 0)
return;
checkCursorIncludeStatus();
SettingsData.updateCompositorCursor();
});
}
function isTemplateDetected(templateId) {
if (!templateDetection || Object.keys(templateDetection).length === 0)
return true;
@@ -38,11 +113,14 @@ Item {
Component.onCompleted: {
SettingsData.detectAvailableIconThemes();
SettingsData.detectAvailableCursorThemes();
if (DMSService.dmsAvailable)
DMSService.listInstalledThemes();
if (PopoutService.pendingThemeInstall)
Qt.callLater(() => themeBrowser.show());
templateCheckProcess.running = true;
if (CompositorService.isNiri || CompositorService.isHyprland || CompositorService.isDwl)
checkCursorIncludeStatus();
}
Process {
@@ -1314,6 +1392,195 @@ Item {
}
}
SettingsCard {
tab: "theme"
tags: ["cursor", "mouse", "pointer", "theme", "size"]
title: I18n.tr("Cursor Theme")
settingKey: "cursorTheme"
iconName: "mouse"
visible: CompositorService.isNiri || CompositorService.isHyprland || CompositorService.isDwl
Column {
width: parent.width
spacing: Theme.spacingM
StyledRect {
id: cursorWarningBox
width: parent.width
height: cursorWarningContent.implicitHeight + Theme.spacingM * 2
radius: Theme.cornerRadius
readonly property bool showError: themeColorsTab.cursorIncludeStatus.exists && !themeColorsTab.cursorIncludeStatus.included
readonly property bool showSetup: !themeColorsTab.cursorIncludeStatus.exists && !themeColorsTab.cursorIncludeStatus.included
color: (showError || showSetup) ? Theme.withAlpha(Theme.warning, 0.15) : "transparent"
border.color: (showError || showSetup) ? Theme.withAlpha(Theme.warning, 0.3) : "transparent"
border.width: 1
visible: (showError || showSetup) && !themeColorsTab.checkingCursorInclude
Row {
id: cursorWarningContent
anchors.fill: parent
anchors.margins: Theme.spacingM
spacing: Theme.spacingM
DankIcon {
name: "warning"
size: Theme.iconSize
color: Theme.warning
anchors.verticalCenter: parent.verticalCenter
}
Column {
width: parent.width - Theme.iconSize - (cursorFixButton.visible ? cursorFixButton.width + Theme.spacingM : 0) - Theme.spacingM
spacing: Theme.spacingXS
anchors.verticalCenter: parent.verticalCenter
StyledText {
text: cursorWarningBox.showSetup ? I18n.tr("Cursor Config Not Configured") : I18n.tr("Cursor Include Missing")
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.warning
}
StyledText {
text: cursorWarningBox.showSetup ? I18n.tr("Click 'Setup' to create cursor config and add include to your compositor config.") : I18n.tr("dms/cursor config exists but is not included. Cursor settings won't apply.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
DankButton {
id: cursorFixButton
visible: cursorWarningBox.showError || cursorWarningBox.showSetup
text: themeColorsTab.fixingCursorInclude ? I18n.tr("Fixing...") : (cursorWarningBox.showSetup ? I18n.tr("Setup") : I18n.tr("Fix Now"))
backgroundColor: Theme.warning
textColor: Theme.background
enabled: !themeColorsTab.fixingCursorInclude
anchors.verticalCenter: parent.verticalCenter
onClicked: themeColorsTab.fixCursorInclude()
}
}
}
SettingsDropdownRow {
tab: "theme"
tags: ["cursor", "mouse", "pointer", "theme"]
settingKey: "cursorTheme"
text: I18n.tr("Cursor Theme")
description: I18n.tr("Mouse pointer appearance")
currentValue: SettingsData.cursorSettings.theme
enableFuzzySearch: true
popupWidthOffset: 100
maxPopupHeight: 236
options: cachedCursorThemes
onValueChanged: value => {
SettingsData.setCursorTheme(value);
}
}
SettingsSliderRow {
tab: "theme"
tags: ["cursor", "mouse", "pointer", "size"]
settingKey: "cursorSize"
text: I18n.tr("Cursor Size")
description: I18n.tr("Mouse pointer size in pixels")
value: SettingsData.cursorSettings.size
minimum: 16
maximum: 48
unit: "px"
defaultValue: 24
onSliderValueChanged: newValue => SettingsData.setCursorSize(newValue)
}
SettingsToggleRow {
tab: "theme"
tags: ["cursor", "hide", "typing"]
settingKey: "cursorHideWhenTyping"
text: I18n.tr("Hide When Typing")
description: I18n.tr("Hide cursor when pressing keyboard keys")
visible: CompositorService.isNiri || CompositorService.isHyprland
checked: {
if (CompositorService.isNiri)
return SettingsData.cursorSettings.niri?.hideWhenTyping || false;
if (CompositorService.isHyprland)
return SettingsData.cursorSettings.hyprland?.hideOnKeyPress || false;
return false;
}
onToggled: checked => {
const updated = JSON.parse(JSON.stringify(SettingsData.cursorSettings));
if (CompositorService.isNiri) {
if (!updated.niri)
updated.niri = {};
updated.niri.hideWhenTyping = checked;
} else if (CompositorService.isHyprland) {
if (!updated.hyprland)
updated.hyprland = {};
updated.hyprland.hideOnKeyPress = checked;
}
SettingsData.set("cursorSettings", updated);
}
}
SettingsToggleRow {
tab: "theme"
tags: ["cursor", "hide", "touch"]
settingKey: "cursorHideOnTouch"
text: I18n.tr("Hide on Touch")
description: I18n.tr("Hide cursor when using touch input")
visible: CompositorService.isHyprland
checked: SettingsData.cursorSettings.hyprland?.hideOnTouch || false
onToggled: checked => {
const updated = JSON.parse(JSON.stringify(SettingsData.cursorSettings));
if (!updated.hyprland)
updated.hyprland = {};
updated.hyprland.hideOnTouch = checked;
SettingsData.set("cursorSettings", updated);
}
}
SettingsSliderRow {
tab: "theme"
tags: ["cursor", "hide", "timeout", "inactive"]
settingKey: "cursorHideAfterInactive"
text: I18n.tr("Auto-Hide Timeout")
description: I18n.tr("Hide cursor after inactivity (0 = disabled)")
value: {
if (CompositorService.isNiri)
return SettingsData.cursorSettings.niri?.hideAfterInactiveMs || 0;
if (CompositorService.isHyprland)
return SettingsData.cursorSettings.hyprland?.inactiveTimeout || 0;
if (CompositorService.isDwl)
return SettingsData.cursorSettings.dwl?.cursorHideTimeout || 0;
return 0;
}
minimum: 0
maximum: CompositorService.isNiri ? 5000 : 10
unit: CompositorService.isNiri ? "ms" : "s"
defaultValue: 0
onSliderValueChanged: newValue => {
const updated = JSON.parse(JSON.stringify(SettingsData.cursorSettings));
if (CompositorService.isNiri) {
if (!updated.niri)
updated.niri = {};
updated.niri.hideAfterInactiveMs = newValue;
} else if (CompositorService.isHyprland) {
if (!updated.hyprland)
updated.hyprland = {};
updated.hyprland.inactiveTimeout = newValue;
} else if (CompositorService.isDwl) {
if (!updated.dwl)
updated.dwl = {};
updated.dwl.cursorHideTimeout = newValue;
}
SettingsData.set("cursorSettings", updated);
}
}
}
}
SettingsCard {
tab: "theme"
tags: ["matugen", "templates", "theming"]

View File

@@ -323,7 +323,6 @@ Singleton {
}
}
userPreference = state.preference || "auto";
isConnecting = state.isConnecting || false;
connectingSSID = state.connectingSSID || "";
connectionError = state.lastError || "";

View File

@@ -14,6 +14,7 @@ Singleton {
readonly property string mangoDmsDir: configDir + "/mango/dms"
readonly property string outputsPath: mangoDmsDir + "/outputs.conf"
readonly property string layoutPath: mangoDmsDir + "/layout.conf"
readonly property string cursorPath: mangoDmsDir + "/cursor.conf"
property int _lastGapValue: -1
@@ -400,4 +401,53 @@ borderpx=${borderSize}
return 0;
}
}
function generateCursorConfig() {
if (!CompositorService.isDwl)
return;
console.log("DwlService: Generating cursor config...");
const settings = typeof SettingsData !== "undefined" ? SettingsData.cursorSettings : null;
if (!settings) {
Proc.runCommand("mango-write-cursor", ["sh", "-c", `mkdir -p "${mangoDmsDir}" && : > "${cursorPath}"`], (output, exitCode) => {
if (exitCode !== 0)
console.warn("DwlService: Failed to write cursor config:", output);
});
return;
}
const themeName = settings.theme === "System Default" ? (SettingsData.systemDefaultCursorTheme || "") : settings.theme;
const size = settings.size || 24;
const hideTimeout = settings.dwl?.cursorHideTimeout || 0;
const isDefaultConfig = !themeName && size === 24 && hideTimeout === 0;
if (isDefaultConfig) {
Proc.runCommand("mango-write-cursor", ["sh", "-c", `mkdir -p "${mangoDmsDir}" && : > "${cursorPath}"`], (output, exitCode) => {
if (exitCode !== 0)
console.warn("DwlService: Failed to write cursor config:", output);
});
return;
}
let content = `# Auto-generated by DMS - do not edit manually
cursor_size=${size}`;
if (themeName)
content += `\ncursor_theme=${themeName}`;
if (hideTimeout > 0)
content += `\ncursor_hide_timeout=${hideTimeout}`;
content += `\n`;
Proc.runCommand("mango-write-cursor", ["sh", "-c", `mkdir -p "${mangoDmsDir}" && cat > "${cursorPath}" << 'EOF'\n${content}EOF`], (output, exitCode) => {
if (exitCode !== 0) {
console.warn("DwlService: Failed to write cursor config:", output);
return;
}
console.info("DwlService: Generated cursor config at", cursorPath);
reloadConfig();
});
}
}

View File

@@ -13,6 +13,7 @@ Singleton {
readonly property string hyprDmsDir: configDir + "/hypr/dms"
readonly property string outputsPath: hyprDmsDir + "/outputs.conf"
readonly property string layoutPath: hyprDmsDir + "/layout.conf"
readonly property string cursorPath: hyprDmsDir + "/cursor.conf"
property int _lastGapValue: -1
@@ -241,4 +242,65 @@ decoration {
return "Normal";
}
}
function generateCursorConfig() {
if (!CompositorService.isHyprland)
return;
console.log("HyprlandService: Generating cursor config...");
const settings = typeof SettingsData !== "undefined" ? SettingsData.cursorSettings : null;
if (!settings) {
Proc.runCommand("hypr-write-cursor", ["sh", "-c", `mkdir -p "${hyprDmsDir}" && : > "${cursorPath}"`], (output, exitCode) => {
if (exitCode !== 0)
console.warn("HyprlandService: Failed to write cursor config:", output);
});
return;
}
const themeName = settings.theme === "System Default" ? (SettingsData.systemDefaultCursorTheme || "") : settings.theme;
const size = settings.size || 24;
const hideWhenTyping = settings.hyprland?.hideWhenTyping || false;
const hideOnTouch = settings.hyprland?.hideOnTouch || false;
const hideOnKeyPress = settings.hyprland?.hideOnKeyPress || false;
const inactiveTimeout = settings.hyprland?.inactiveTimeout || 0;
const isDefaultConfig = !themeName && size === 24 && !hideWhenTyping && !hideOnTouch && !hideOnKeyPress && inactiveTimeout === 0;
if (isDefaultConfig) {
Proc.runCommand("hypr-write-cursor", ["sh", "-c", `mkdir -p "${hyprDmsDir}" && : > "${cursorPath}"`], (output, exitCode) => {
if (exitCode !== 0)
console.warn("HyprlandService: Failed to write cursor config:", output);
});
return;
}
let content = `# Auto-generated by DMS - do not edit manually
cursor {
size = ${size}`;
if (themeName)
content += `\n theme = ${themeName}`;
if (hideWhenTyping)
content += `\n hide_on_key_press = true`;
if (hideOnTouch)
content += `\n hide_on_touch = true`;
if (inactiveTimeout > 0)
content += `\n inactive_timeout = ${inactiveTimeout}`;
content += `\n}
`;
Proc.runCommand("hypr-write-cursor", ["sh", "-c", `mkdir -p "${hyprDmsDir}" && cat > "${cursorPath}" << 'EOF'\n${content}EOF`], (output, exitCode) => {
if (exitCode !== 0) {
console.warn("HyprlandService: Failed to write cursor config:", output);
return;
}
console.info("HyprlandService: Generated cursor config at", cursorPath);
reloadConfig();
});
}
}

View File

@@ -145,6 +145,20 @@ Singleton {
}
}
Process {
id: writeCursorProcess
property string cursorContent: ""
property string cursorPath: ""
onExited: exitCode => {
if (exitCode === 0) {
console.info("NiriService: Generated cursor config at", cursorPath);
return;
}
console.warn("NiriService: Failed to write cursor config, exit code:", exitCode);
}
}
Process {
id: ensureOutputsProcess
property string outputsPath: ""
@@ -165,6 +179,16 @@ Singleton {
}
}
Process {
id: ensureCursorProcess
property string cursorPath: ""
onExited: exitCode => {
if (exitCode !== 0)
console.warn("NiriService: Failed to ensure cursor.kdl, exit code:", exitCode);
}
}
DankSocket {
id: eventStreamSocket
path: root.socketPath
@@ -1074,6 +1098,11 @@ Singleton {
ensureBindsProcess.command = ["sh", "-c", `mkdir -p "${niriDmsDir}" && [ ! -f "${bindsPath}" ] && touch "${bindsPath}" || true`];
ensureBindsProcess.running = true;
const cursorPath = niriDmsDir + "/cursor.kdl";
ensureCursorProcess.cursorPath = cursorPath;
ensureCursorProcess.command = ["sh", "-c", `mkdir -p "${niriDmsDir}" && [ ! -f "${cursorPath}" ] && touch "${cursorPath}" || true`];
ensureCursorProcess.running = true;
configGenerationPending = false;
}
@@ -1090,6 +1119,70 @@ Singleton {
writeBlurruleProcess.running = true;
}
function generateNiriCursorConfig() {
if (!CompositorService.isNiri)
return;
console.log("NiriService: Generating cursor config...");
const configDir = Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation));
const niriDmsDir = configDir + "/niri/dms";
const cursorPath = niriDmsDir + "/cursor.kdl";
const settings = typeof SettingsData !== "undefined" ? SettingsData.cursorSettings : null;
if (!settings) {
writeCursorProcess.cursorContent = "";
writeCursorProcess.cursorPath = cursorPath;
writeCursorProcess.command = ["sh", "-c", `mkdir -p "${niriDmsDir}" && : > "${cursorPath}"`];
writeCursorProcess.running = true;
return;
}
const themeName = settings.theme === "System Default" ? (SettingsData.systemDefaultCursorTheme || "") : settings.theme;
const size = settings.size || 24;
const hideWhenTyping = settings.niri?.hideWhenTyping || false;
const hideAfterMs = settings.niri?.hideAfterInactiveMs || 0;
const isDefaultConfig = !themeName && size === 24 && !hideWhenTyping && hideAfterMs === 0;
if (isDefaultConfig) {
writeCursorProcess.cursorContent = "";
writeCursorProcess.cursorPath = cursorPath;
writeCursorProcess.command = ["sh", "-c", `mkdir -p "${niriDmsDir}" && : > "${cursorPath}"`];
writeCursorProcess.running = true;
return;
}
const dmsWarning = `// ! DO NOT EDIT !
// ! AUTO-GENERATED BY DMS !
// ! CHANGES WILL BE OVERWRITTEN !
// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
`;
let cursorContent = dmsWarning + `cursor {\n`;
if (themeName)
cursorContent += ` xcursor-theme "${themeName}"\n`;
cursorContent += ` xcursor-size ${size}\n`;
if (hideWhenTyping)
cursorContent += ` hide-when-typing\n`;
if (hideAfterMs > 0)
cursorContent += ` hide-after-inactive-ms ${hideAfterMs}\n`;
cursorContent += `}`;
writeCursorProcess.cursorContent = cursorContent;
writeCursorProcess.cursorPath = cursorPath;
const escapedCursorContent = cursorContent.replace(/'/g, "'\\''");
writeCursorProcess.command = ["sh", "-c", `mkdir -p "${niriDmsDir}" && printf '%s' '${escapedCursorContent}' > "${cursorPath}"`];
writeCursorProcess.running = true;
}
function updateOutputPosition(outputName, x, y) {
if (!outputs || !outputs[outputName])
return;

View File

@@ -184,73 +184,76 @@ Singleton {
function launchDesktopEntry(desktopEntry, useNvidia) {
let cmd = desktopEntry.command;
if (useNvidia && nvidiaCommand) {
if (useNvidia && nvidiaCommand)
cmd = [nvidiaCommand].concat(cmd);
}
const userPrefix = SettingsData.launchPrefix?.trim() || "";
const defaultPrefix = Quickshell.env("DMS_DEFAULT_LAUNCH_PREFIX") || "";
const prefix = userPrefix.length > 0 ? userPrefix : defaultPrefix;
const workDir = desktopEntry.workingDirectory || Quickshell.env("HOME");
const escapedCmd = cmd.map(arg => escapeShellArg(arg)).join(" ");
const shellCmd = prefix.length > 0 ? `${prefix} ${escapedCmd}` : escapedCmd;
const cursorEnv = typeof SettingsData.getCursorEnvironment === "function" ? SettingsData.getCursorEnvironment() : {};
if (desktopEntry.runInTerminal) {
const terminal = Quickshell.env("TERMINAL") || "xterm";
const escapedCmd = cmd.map(arg => escapeShellArg(arg)).join(" ");
const shellCmd = prefix.length > 0 ? `${prefix} ${escapedCmd}` : escapedCmd;
Quickshell.execDetached({
command: [terminal, "-e", "sh", "-c", shellCmd],
workingDirectory: workDir
workingDirectory: workDir,
environment: cursorEnv
});
return;
}
if (prefix.length > 0 && needsShellExecution(prefix)) {
const escapedCmd = cmd.map(arg => escapeShellArg(arg)).join(" ");
Quickshell.execDetached({
command: ["sh", "-c", shellCmd],
workingDirectory: workDir
command: ["sh", "-c", `${prefix} ${escapedCmd}`],
workingDirectory: workDir,
environment: cursorEnv
});
return;
}
if (prefix.length > 0) {
if (prefix.length > 0)
cmd = prefix.split(" ").concat(cmd);
}
Quickshell.execDetached({
command: cmd,
workingDirectory: workDir
workingDirectory: workDir,
environment: cursorEnv
});
}
function launchDesktopAction(desktopEntry, action, useNvidia) {
let cmd = action.command;
if (useNvidia && nvidiaCommand) {
if (useNvidia && nvidiaCommand)
cmd = [nvidiaCommand].concat(cmd);
}
const userPrefix = SettingsData.launchPrefix?.trim() || "";
const defaultPrefix = Quickshell.env("DMS_DEFAULT_LAUNCH_PREFIX") || "";
const prefix = userPrefix.length > 0 ? userPrefix : defaultPrefix;
const workDir = desktopEntry.workingDirectory || Quickshell.env("HOME");
const cursorEnv = typeof SettingsData.getCursorEnvironment === "function" ? SettingsData.getCursorEnvironment() : {};
if (prefix.length > 0 && needsShellExecution(prefix)) {
const escapedCmd = cmd.map(arg => escapeShellArg(arg)).join(" ");
const shellCmd = `${prefix} ${escapedCmd}`;
Quickshell.execDetached({
command: ["sh", "-c", shellCmd],
workingDirectory: desktopEntry.workingDirectory || Quickshell.env("HOME")
});
} else {
if (prefix.length > 0) {
const launchPrefix = prefix.split(" ");
cmd = launchPrefix.concat(cmd);
}
Quickshell.execDetached({
command: cmd,
workingDirectory: desktopEntry.workingDirectory || Quickshell.env("HOME")
command: ["sh", "-c", `${prefix} ${escapedCmd}`],
workingDirectory: workDir,
environment: cursorEnv
});
return;
}
if (prefix.length > 0)
cmd = prefix.split(" ").concat(cmd);
Quickshell.execDetached({
command: cmd,
workingDirectory: workDir,
environment: cursorEnv
});
}
// * Session management

View File

@@ -6,6 +6,7 @@ Item {
readonly property real edgeSize: 8
required property var targetWindow
property bool supported: typeof targetWindow.startSystemMove === "function"
readonly property bool canMaximize: targetWindow.minimumSize.width !== targetWindow.maximumSize.width || targetWindow.minimumSize.height !== targetWindow.maximumSize.height
anchors.fill: parent
@@ -16,19 +17,19 @@ Item {
}
function tryStartResize(edges) {
if (!supported)
if (!supported || !canMaximize)
return;
targetWindow.startSystemResize(edges);
}
function tryToggleMaximize() {
if (!supported)
if (!supported || !canMaximize)
return;
targetWindow.maximized = !targetWindow.maximized;
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
height: root.edgeSize
anchors.left: parent.left
anchors.right: parent.right
@@ -40,7 +41,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
width: root.edgeSize
anchors.left: parent.left
anchors.top: parent.top
@@ -52,7 +53,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
width: root.edgeSize
anchors.right: parent.right
anchors.top: parent.top
@@ -64,7 +65,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
width: root.edgeSize
height: root.edgeSize
anchors.left: parent.left
@@ -74,7 +75,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
width: root.edgeSize
height: root.edgeSize
anchors.right: parent.right
@@ -84,7 +85,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
height: root.edgeSize
anchors.left: parent.left
anchors.right: parent.right
@@ -96,7 +97,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
width: root.edgeSize
height: root.edgeSize
anchors.left: parent.left
@@ -106,7 +107,7 @@ Item {
}
MouseArea {
visible: root.supported
visible: root.supported && root.canMaximize
width: root.edgeSize
height: root.edgeSize
anchors.right: parent.right

File diff suppressed because it is too large Load Diff

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "Activar"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "Activo"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Atrás • F1/I: Información del archivo • F10: Ayuda • Esc: Cerrar+"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "Mostrar siempre el porcentaje"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "Limpiar automáticamente despues"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "Cierre automático de la vista general de Niri al iniciar aplicaciones."
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "Limpiar al inicio"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "Haz clic en \"Configurar\" para crear dms/binds.kdl y añadir include a config.kdl."
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "¡Copiado!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "Copiar ID del Proceso"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": "Actual: %1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "Personal"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "Ocultar Retardo"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "Ocultar opciones cuando hay ventanas abiertas"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "Ocultar el dock cuando no esté en uso y mostrarlo cuando se pasé el ratón cerca del área de este"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "Tecla"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "Distribución de teclado"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "Montar"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "Mover widget"
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "Desplazamiento"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "Buscar dentro de los archivos"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "Buscar combinaciones de tecla"
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "Buscar complementos..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "Selecciona un archivo de imagen..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "Elegir dispositivo..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Selecciona el algoritmo de colores del fondo de pantalla"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "Seleccionar transiciones para aplicar de forma aleatoria"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "Mostrar en vista general"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "Mostrar en todas las pantallas conectadas"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "Transparencia"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Apagar monitores después de"
},
"Type": {
"Type": "Tipo"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "Tipografía"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "Red desconocida"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "Desfijar del dock"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "Actualizar complemento"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "Usar formato de 24 horas en lugar de 12 horas AM/PM"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "Usar tema de sonidos del sistema"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "Usar%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "por %1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Busqueda de temas"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl esta ahora incluido en config.kdl"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "La configuración dms/outputs existe pero no está incluida en la configuración del compositor. Los cambios de visualización no persistirán."
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "Widgets"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "fuente"
},

View File

@@ -15,7 +15,7 @@
"%1 connected": "%1 متصل"
},
"%1 days ago": {
"%1 days ago": ""
"%1 days ago": "%1 روز پیش"
},
"%1 display(s)": {
"%1 display(s)": "%1 نمایشگر"
@@ -24,7 +24,7 @@
"%1 job(s)": "%1 کار چاپ"
},
"%1 notifications": {
"%1 notifications": ""
"%1 notifications": "%1 اعلان"
},
"%1 printer(s)": {
"%1 printer(s)": "%1 چاپگر"
@@ -36,13 +36,13 @@
"%1 widgets": "%1 ابزارک"
},
"%1m ago": {
"%1m ago": ""
"%1m ago": "%1 دقیقه پیش"
},
"(Unnamed)": {
"(Unnamed)": "(بدون نام)"
},
"+ %1 more": {
"+ %1 more": ""
"+ %1 more": "+ %1 بیشتر"
},
"0 = square corners": {
"0 = square corners": "۰ = گوشه‌های مربعی"
@@ -57,7 +57,7 @@
"1 minute": "۱ دقیقه"
},
"1 notification": {
"1 notification": ""
"1 notification": "1 اعلان"
},
"1 second": {
"1 second": "۱ ثانیه"
@@ -138,7 +138,7 @@
"About": "درباره"
},
"Accent Color": {
"Accent Color": ""
"Accent Color": "رنگ تأکیدی"
},
"Accept Jobs": {
"Accept Jobs": "پذیرش کار‌های چاپ"
@@ -164,6 +164,9 @@
"Activate": {
"Activate": "فعال‌سازی"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "فعال"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: بازگشت • F1/I: اطلاعات فایل • F10: راهنما • Esc: بستن"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "همیشه درصد را نشان بده"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "پاک‌کردن خودکار پس از"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "هنگام اجرای برنامه‌ها نمای کلی نیری را خودکار ببند."
},
@@ -516,7 +525,7 @@
"Border Opacity": "شفافیت حاشیه"
},
"Border Size": {
"Border Size": ""
"Border Size": "اندازه حاشیه"
},
"Border Thickness": {
"Border Thickness": "ضخامت حاشیه"
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "پاک‌کردن در هنگام راه‌اندازی"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "برای ایجاد dms/binds.kdl و افزودن include به config.kdl، روی «راه‌اندازی» کلیک کنید."
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "کپی شد!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "کپی PID"
},
@@ -932,11 +947,23 @@
"Current: %1": {
"Current: %1": "کنونی: %1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "سفارشی"
},
"Custom Color": {
"Custom Color": ""
"Custom Color": "رنگ سفارشی"
},
"Custom Duration": {
"Custom Duration": "مدت زمان سفارشی"
@@ -1101,7 +1128,7 @@
"Desktop Clock": "ساعت دسکتاپ"
},
"Detailed": {
"Detailed": ""
"Detailed": "با جزئیات"
},
"Development": {
"Development": "توسعه"
@@ -1653,10 +1680,10 @@
"Force terminal applications to always use dark color schemes": "اجبار برنامه‌های ترمینال به استفاده از رنگ‌های تاریک"
},
"Forecast": {
"Forecast": ""
"Forecast": "پیش‌بینی"
},
"Forecast Days": {
"Forecast Days": ""
"Forecast Days": "پیش‌بینی روزها"
},
"Forecast Not Available": {
"Forecast Not Available": "پیش‌بینی موجود نیست"
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "تأخیر پنهان‌شدن"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "وقتی پنجره‌ها باز هستند پنهان کن"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "داک را هنگامی که استفاده نمی‌شود پنهان کن و هنگامی که موشواره نزدیک آن است نشان بده"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "کلید"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "نام جانمایی صفحه‌کلید"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "نصب‌کردن"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "انتقال ابزارک"
},
@@ -2358,7 +2415,7 @@
"No VPN profiles": "پروفایل VPN یافت نشد"
},
"No Weather Data": {
"No Weather Data": ""
"No Weather Data": "بدون داده آب و هوا"
},
"No Weather Data Available": {
"No Weather Data Available": "داده آب و هوا در دسترس نیست"
@@ -2451,7 +2508,7 @@
"Not connected": "متصل نیست"
},
"Not detected": {
"Not detected": ""
"Not detected": "تشخیص داده نشد"
},
"Note: this only changes the percentage, it does not actually limit charging.": {
"Note: this only changes the percentage, it does not actually limit charging.": "نکته: این تنها درصد را تغییر می‌دهد، به طور واقعی محدودیت روی شارژ کردن اعمال نمی‌کند."
@@ -2487,7 +2544,7 @@
"Notification toast popups": "پاپ‌آپ‌های اعلان به صورت تُست"
},
"Notifications": {
"Notifications": "اعلانات"
"Notifications": "اعلانها"
},
"Numbers": {
"Numbers": "شماره‌ها"
@@ -2568,7 +2625,7 @@
"Override": "جایگزین"
},
"Override Border Size": {
"Override Border Size": ""
"Override Border Size": "بازنویسی اندازه حاشیه"
},
"Override Corner Radius": {
"Override Corner Radius": "جایگزینی شعاع گوشه‌ها"
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "اسکرولینگ"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "جستجو در محتوای فایل"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "جستجو در کلید‌های میانبر..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "جستجوی افزونه‌ها..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "انتخاب فایل تصویر..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "انتخاب دستگاه..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "انتخاب الگوریتم پالت رنگی استفاده شده برای رنگ‌های بر اساس تصویر پس‌زمینه"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "انتخاب کنید کدام گذارها در تصادفی‌سازی باشند"
},
@@ -3186,7 +3255,7 @@
"Show Feels Like Temperature": ""
},
"Show Forecast": {
"Show Forecast": ""
"Show Forecast": "نمایش پیش‌بینی"
},
"Show GPU Temperature": {
"Show GPU Temperature": "نمایش دمای GPU"
@@ -3201,16 +3270,16 @@
"Show Hour Numbers": "نمایش شماره‌های ساعت"
},
"Show Hourly Forecast": {
"Show Hourly Forecast": ""
"Show Hourly Forecast": "نمایش پیش‌بینی ساعتی"
},
"Show Humidity": {
"Show Humidity": ""
"Show Humidity": "نمایش رطوبت"
},
"Show Line Numbers": {
"Show Line Numbers": "نمایش شماره خطوط"
},
"Show Location": {
"Show Location": ""
"Show Location": "نمایش موقعیت مکانی"
},
"Show Lock": {
"Show Lock": "نمایش قفل"
@@ -3240,7 +3309,7 @@
"Show Precipitation Probability": ""
},
"Show Pressure": {
"Show Pressure": ""
"Show Pressure": "نمایش فشار"
},
"Show Reboot": {
"Show Reboot": "نمایش راه‌اندازی مجدد"
@@ -3252,7 +3321,7 @@
"Show Seconds": "نمایش ثانیه‌ها"
},
"Show Sunrise/Sunset": {
"Show Sunrise/Sunset": ""
"Show Sunrise/Sunset": "نمایش طلوع/غروب"
},
"Show Suspend": {
"Show Suspend": "نمایش تعلیق"
@@ -3261,13 +3330,13 @@
"Show Top Processes": "نمایش فرایند‌های مهم"
},
"Show Weather Condition": {
"Show Weather Condition": ""
"Show Weather Condition": "نمایش شرایط آب و هوا"
},
"Show Welcome": {
"Show Welcome": ""
"Show Welcome": "نمایش خوش آمدید"
},
"Show Wind Speed": {
"Show Wind Speed": ""
"Show Wind Speed": "نمایش سرعت باد"
},
"Show Workspace Apps": {
"Show Workspace Apps": "نمایش برنامه‌های workspace"
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "نمایش روی نمای کلی"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "نمایش همه نمایشگر‌های متصل"
},
@@ -3426,7 +3498,7 @@
"Stacked": "انباشته"
},
"Standard": {
"Standard": ""
"Standard": "استاندارد"
},
"Start": {
"Start": "شروع"
@@ -3528,7 +3600,7 @@
"System theme toggle": "تغییر تم سیستم"
},
"System toast notifications": {
"System toast notifications": "اعلانات سیستم به صورت تُست"
"System toast notifications": "اعلان‌های سیستم به صورت تُست"
},
"System update custom command": {
"System update custom command": "دستور سفارشی بروزرسانی سیستم"
@@ -3651,7 +3723,7 @@
"Toner Low": "تونر کم است"
},
"Tools": {
"Tools": ""
"Tools": "ابزارها"
},
"Top": {
"Top": "بالا"
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "شفافیت"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "خاموش‌کردن مانیتور پس از"
},
"Type": {
"Type": "نوع"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "تایپوگرافی"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "شبکه ناشناخته"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "جداکردن از داک"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "بروزرسانی افزونه"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "استفاده از قالب 24 ساعته به جای 12 ساعته ق.ظ/ب.ظ"
},
@@ -3765,10 +3852,10 @@
"Use animated wave progress bars for media playback": "استفاده از نوارهای پیشرفت موجی متحرک برای پخش رسانه"
},
"Use custom border size": {
"Use custom border size": ""
"Use custom border size": "از اندازه حاشیه سفارشی استفاده کن"
},
"Use custom border/focus-ring width": {
"Use custom border/focus-ring width": ""
"Use custom border/focus-ring width": "از طول حاشیه/focus-ring سفارشی استفاده کن"
},
"Use custom command for update your system": {
"Use custom command for update your system": "استفاده از دستور سفارشی برای بروزرسانی سیستم شما"
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "استفاده از تم صدا در تنظیمات سیستم"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "استفاده%"
},
@@ -3876,7 +3966,7 @@
"Vibrant palette with playful saturation.": "پالتر رنگی پر جنب و جوش با اشباع رنگی سرزنده."
},
"View Mode": {
"View Mode": ""
"View Mode": "حالت نمایش"
},
"Visibility": {
"Visibility": "دید"
@@ -4019,7 +4109,7 @@
"Window Gaps (px)": "فاصله پنجره‌ها (px)"
},
"Window Rounding": {
"Window Rounding": ""
"Window Rounding": "گردی پنجره"
},
"Workspace": {
"Workspace": "Workspace"
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "توسط %1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "مرور تم‌ها"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl اکنون در config.kdl گنجانده شده است"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "پیکربندی dms/outputs وجود دارد اما در پیکربندی کامپوزیتور شما گنجانده نشده است. تغییرات نمایشگر پایدار نخواهند بود."
},
@@ -4142,102 +4238,102 @@
"Material Design inspired color themes": "رنگ‌های تم الهام گرفته شده از متریال دیزاین"
},
"greeter back button": {
"Back": ""
"Back": "بازگشت"
},
"greeter completion page subtitle": {
"DankMaterialShell is ready to use": ""
},
"greeter completion page title": {
"You're All Set!": ""
"You're All Set!": "همه چیز آماده است!"
},
"greeter configure keybinds link": {
"Configure Keybinds": ""
},
"greeter dankbar description": {
"Widgets, layout, style": ""
"Widgets, layout, style": "ابزارک‌ها، layout، استایل"
},
"greeter displays description": {
"Resolution, position, scale": ""
"Resolution, position, scale": "وضوح، موقعیت، مقیاس"
},
"greeter dock description": {
"Position, pinned apps": ""
},
"greeter doctor page button": {
"Run Again": ""
"Run Again": "اجرای دوباره"
},
"greeter doctor page empty state": {
"No checks passed": "",
"No errors": "",
"No errors": "بدون خطا",
"No info items": "",
"No warnings": ""
"No warnings": "بدون اخطار"
},
"greeter doctor page error count": {
"%1 issue(s) found": ""
"%1 issue(s) found": "%1 مشکل پیدا شد"
},
"greeter doctor page loading text": {
"Analyzing configuration...": ""
},
"greeter doctor page status card": {
"Errors": "",
"Info": "",
"OK": "",
"Warnings": ""
"Errors": "خطا‌ها",
"Info": "اطلاعات",
"OK": "باشه",
"Warnings": "اخطار‌ها"
},
"greeter doctor page success": {
"All checks passed": ""
},
"greeter doctor page title": {
"System Check": ""
"System Check": "بررسی سیستم"
},
"greeter documentation link": {
"Docs": ""
"Docs": "مستندات"
},
"greeter explore section header": {
"Explore": ""
},
"greeter feature card description": {
"Background app icons": "",
"Colors from wallpaper": "",
"Community themes": "",
"Colors from wallpaper": "رنگ‌ها از تصویر پس‌زمینه",
"Community themes": "تم‌های کامیونیتی",
"Extensible architecture": "",
"GTK, Qt, IDEs, more": "",
"Modular widget bar": "",
"GTK, Qt, IDEs, more": "GTK، Qt، IDEها و بیشتر",
"Modular widget bar": "نوار ابزارک ماژولار",
"Night mode & gamma": "",
"Per-screen config": "",
"Per-screen config": "پیکربندی به ازای هر صفحه",
"Quick system toggles": ""
},
"greeter feature card title": {
"App Theming": "",
"App Theming": "تم برنامه",
"Control Center": "",
"Display Control": "",
"Display Control": "کنترل نمایشگر",
"Dynamic Theming": "",
"Multi-Monitor": "",
"Multi-Monitor": "چند مانیتوره",
"System Tray": "",
"Theme Registry": ""
"Theme Registry": "مخزن تم‌ها"
},
"greeter feature card title | greeter plugins link": {
"Plugins": ""
"Plugins": "افزونه‌ها"
},
"greeter feature card title | greeter settings link": {
"DankBar": ""
"DankBar": "DankBar"
},
"greeter finish button": {
"Finish": ""
"Finish": "پایان"
},
"greeter first page button": {
"Get Started": ""
"Get Started": "شروع کنید"
},
"greeter keybinds niri description": {
"niri shortcuts config": ""
"niri shortcuts config": "پیکربندی میانبرهای نیری"
},
"greeter keybinds section header": {
"DMS Shortcuts": ""
},
"greeter modal window title": {
"Welcome": ""
"Welcome": "خوش آمدید"
},
"greeter next button": {
"Next": ""
"Next": "بعدی"
},
"greeter no keybinds message": {
"No DMS shortcuts configured": ""
@@ -4246,15 +4342,15 @@
"Popup behavior, position": ""
},
"greeter settings link": {
"Displays": "",
"Dock": "",
"Displays": "نمایشگر‌ها",
"Dock": "داک",
"Keybinds": "",
"Notifications": "",
"Theme & Colors": "",
"Wallpaper": ""
"Notifications": "اعلان‌ها",
"Theme & Colors": "تم و رنگ‌ها",
"Wallpaper": "تصویر پس‌زمینه"
},
"greeter settings section header": {
"Configure": ""
"Configure": "پیکربندی"
},
"greeter skip button": {
"Skip": ""
@@ -4266,19 +4362,19 @@
"Dynamic colors, presets": ""
},
"greeter themes link": {
"Themes": ""
"Themes": "تم‌ها"
},
"greeter wallpaper description": {
"Background image": ""
"Background image": "تصویر پس‌زمینه"
},
"greeter welcome page section header": {
"Features": ""
"Features": "ویژگی‌ها"
},
"greeter welcome page tagline": {
"A modern desktop shell for Wayland compositors": ""
},
"greeter welcome page title": {
"Welcome to DankMaterialShell": ""
"Welcome to DankMaterialShell": "به DankMaterialShell خوش آمدید"
},
"install action button": {
"Install": "نصب"
@@ -4302,17 +4398,17 @@
"Loading...": "درحال بارگذاری..."
},
"lock screen notification mode option": {
"App Names": "",
"App Names": "نام برنامه‌ها",
"Count Only": "",
"Disabled": "",
"Full Content": ""
"Disabled": "غیرفعال",
"Full Content": "محتوای کامل"
},
"lock screen notification privacy setting": {
"Control what notification information is shown on the lock screen": "",
"Notification Display": ""
},
"lock screen notifications settings card": {
"Lock Screen": ""
"Lock Screen": "صفحه قفل"
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl در دسترس نیست - یکپارچه‌سازی قفل به اتصال سوکت DMS نیاز دارد"
@@ -4342,36 +4438,36 @@
"No wallpaper selected": "هیچ تصویر پس‌زمینه‌ای انتخاب نشده"
},
"notification center tab": {
"Current": "",
"History": ""
"Current": "کنونی",
"History": "تاریخچه"
},
"notification history filter": {
"All": "",
"Last hour": "",
"Today": "",
"Yesterday": ""
"All": "همه",
"Last hour": "ساعت گذشته",
"Today": "امروز",
"Yesterday": "دیروز"
},
"notification history filter for content older than other filters": {
"Older": ""
"Older": "قدیمی‌تر"
},
"notification history filter | notification history retention option": {
"30 days": "",
"7 days": ""
"30 days": "30 روز",
"7 days": "7 روز"
},
"notification history limit": {
"Maximum number of notifications to keep": ""
"Maximum number of notifications to keep": "بیشینه تعداد اعلان‌هایی که باید نگه داشته شوند"
},
"notification history retention option": {
"1 day": "",
"14 days": "",
"3 days": "",
"Forever": ""
"1 day": "1 روز",
"14 days": "14 روز",
"3 days": "3 روز",
"Forever": "برای همیشه"
},
"notification history retention settings label": {
"History Retention": ""
"History Retention": "نگهداری تاریخچه"
},
"notification history setting": {
"Auto-delete notifications older than this": "",
"Auto-delete notifications older than this": "اعلان‌های قدیمی تر از این را خودکار حذف کن",
"Save critical priority notifications to history": "",
"Save low priority notifications to history": "",
"Save normal priority notifications to history": ""
@@ -4380,10 +4476,10 @@
"Save dismissed notifications to history": ""
},
"notification history toggle label": {
"Enable History": ""
"Enable History": "فعال‌کردن تاریخچه"
},
"now": {
"now": ""
"now": "اکنون"
},
"official": {
"official": "رسمی"
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "ابزارک‌ها"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "منبع"
},
@@ -4482,7 +4585,7 @@
"wtype not available - install wtype for paste support": "wtype در دسترس نیست - wtype را برای پشتیبانی از الصاق نصب کنید"
},
"yesterday": {
"yesterday": ""
"yesterday": "دیروز"
},
"• Install only from trusted sources": {
"• Install only from trusted sources": "نصب تنها از منابع معتبر"

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "הפעל/י"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "פעיל"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: חזרה • F1/I: מידע על הקובץ • F10: עזרה • Esc: סגירה"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "הצג/י תמיד אחוזים"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": ""
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": ""
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": ""
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": ""
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "הועתק!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "העתק/י PID"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": ""
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "מותאם אישית"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "עיכוב הסתרה"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": ""
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "הסתר/י את הDock כשאינו בשימוש והצג/י אותו מחדש בעת ריחוף ליד אזור העגינה"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "מקש"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "שם פריסת המקלדת"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "טעינה"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": ""
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "גלילה"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "חפש/י בתוכן הקבצים"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "חפש/י קיצורי מקלדת..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "חפש/י תוספים..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "בחר/י קובץ תמונה..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "בחר/י התקן..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "בחר/י את האלגוריתם שייקבע את פלטת הצבעים עבור צבעים מבוססי תמונת רקע"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "בחר/י אילו מעברים לכלול באקראיות"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "הצג/י בתצוגת סקירה"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "הצג/י בכל המסכים המחוברים"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "שקיפות"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "כבה/י את כל המסכים לאחר"
},
"Type": {
"Type": "סוג"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "טיפוגרפיה"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": ""
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "בטל/י נעיצה על הDock"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "עדכן/י תוסף"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "השתמש/י בתבנית 24 שעות במקום 12 שעות (AM/PM)"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "השתמש/י בערכת הצלילים מהגדרות המערכת"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "השתמש/י ב%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": ""
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": ""
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl כעת כלול בconfig.kdl"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": ""
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": ""
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": ""
},

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "Aktiválás"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "Aktív"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Vissza • F1/I: Fájlinfó • F10: Súgó • Esc: Bezárás"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "Mindig mutassa a százalékot"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "Automatikus törlés"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "A Niri-áttekintés automatikus bezárása alkalmazások indításakor."
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "Törlés indításkor"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "Kattints a „Beállítás” gombra a dms/binds.kdl létrehozásához és az include bejegyzés hozzádásához a config.kdl fájlhoz."
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "Másolva!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "PID másolása"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": "Jelenleg: %1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "Egyéni"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "Elrejtési késleltetés"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "Elrejtés, amikor ablakok vannak megnyitva"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "Dokk elrejtése, amikor az nincs használatban és megjelenítés, amikor az egér a dokkterület közelében van"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "Billentyű"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "Billentyűzetkiosztás neve"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "Csatlakoztatás"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "Widget mozgatása"
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "Görgetés"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "Fájltartalom keresése"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "Billentyűk keresése…"
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "Bővítmények keresése…"
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "Képfájl kiválasztása…"
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "Eszköz kiválasztása…"
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Válaszd ki a háttérkép alapú színekhez használt paletta algoritmust"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "Válaszd ki, mely átmenetek legyenek a véletlenszerűsítésben"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "Megjelenítés az áttekintésben"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "Megjelenítés minden csatlakoztatott kijelzőn"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "Átlátszóság"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Monitorok kikapcsolása ennyi idő után:"
},
"Type": {
"Type": "Típus"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "Tipográfia"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "Ismeretlen hálózat"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "Rögzítés feloldása a Dokkról"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "Bővítmény frissítése"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "24 órás időformátum használata a 12 órás AM/PM formátum helyett"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "Hangtéma használata a rendszerbeállításokból"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "Használat%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "ettől: %1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Témák böngészése"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "A dms/binds.kdl most már szerepel a config.kdl fájlban"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "A dms/outputs konfiguráció létezik, de nincs benne a kompozitorod konfigurációjában. A kijelző változások nem maradnak meg."
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "Widgetek"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "forrás"
},

View File

@@ -24,7 +24,7 @@
"%1 job(s)": "%1 stampa/e"
},
"%1 notifications": {
"%1 notifications": ""
"%1 notifications": "%1 notifiche"
},
"%1 printer(s)": {
"%1 printer(s)": "%1 stampante/i"
@@ -42,7 +42,7 @@
"(Unnamed)": "(Senza Nome)"
},
"+ %1 more": {
"+ %1 more": ""
"+ %1 more": "+ altre %1"
},
"0 = square corners": {
"0 = square corners": "0 = angoli squadrati"
@@ -57,7 +57,7 @@
"1 minute": "1 minuto"
},
"1 notification": {
"1 notification": ""
"1 notification": "1 notifica"
},
"1 second": {
"1 second": "1 secondo"
@@ -138,7 +138,7 @@
"About": "Info"
},
"Accent Color": {
"Accent Color": ""
"Accent Color": "Colore di Accento"
},
"Accept Jobs": {
"Accept Jobs": "Accetta Stampe"
@@ -164,6 +164,9 @@
"Activate": {
"Activate": "Attiva"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "Attivo"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Indietro • F1/I: File Info • F10: Aiuto • Esc: Chiudi"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "Mostra sempre percentuale"
},
@@ -291,7 +297,7 @@
"Apps are ordered by usage frequency, then last used, then alphabetically.": "Le applicazioni sono ordinate per frequenza d'uso, poi per ultimo utilizzo, e infine in ordine alfabetico."
},
"Arrange displays and configure resolution, refresh rate, and VRR": {
"Arrange displays and configure resolution, refresh rate, and VRR": "Disporre gli schermi e configurare risoluzione, frequenza di aggiornamento e VRR"
"Arrange displays and configure resolution, refresh rate, and VRR": "Disponi gli schermi e configurare risoluzione, frequenza di aggiornamento e VRR"
},
"Audio": {
"Audio": "Audio"
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "Cancellazione Automatica Dopo"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "Chiudi automaticamente la panoramica di Niri all'avvio delle app."
},
@@ -426,7 +435,7 @@
"Available Screens (%1)": "Schermi disponibili (%1)"
},
"Available in Detailed and Forecast view modes": {
"Available in Detailed and Forecast view modes": ""
"Available in Detailed and Forecast view modes": "Disponibile nelle modalità Dettagliata e Previsioni"
},
"BSSID": {
"BSSID": "BSSID"
@@ -516,7 +525,7 @@
"Border Opacity": "Opacità Bordi"
},
"Border Size": {
"Border Size": ""
"Border Size": "Spessore bordo"
},
"Border Thickness": {
"Border Thickness": "Spessore Bordi"
@@ -612,7 +621,7 @@
"Center Section": "Sezione Centrale"
},
"Center Single Column": {
"Center Single Column": "Al Centro Colonna Singola"
"Center Single Column": "Colonna Singola Centrale"
},
"Center Tiling": {
"Center Tiling": "Tiling Centrale"
@@ -645,7 +654,7 @@
"Choose colors from palette": "Scegli i colori dalla tavolozza"
},
"Choose how the weather widget is displayed": {
"Choose how the weather widget is displayed": ""
"Choose how the weather widget is displayed": "Scegli come visualizzare il widget meteo"
},
"Choose icon": {
"Choose icon": "Scegli icona"
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "Cancella all'Avvio"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "Clicca su 'Configura' per creare dms/binds.kdl e aggiungere l'istruzione include a config.kdl."
},
@@ -777,7 +789,7 @@
"Communication": "Comunicazione"
},
"Compact": {
"Compact": ""
"Compact": "Compatto"
},
"Compact Mode": {
"Compact Mode": "Modalità Compatta"
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "Copiato!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "Copia PID"
},
@@ -932,11 +947,23 @@
"Current: %1": {
"Current: %1": "Attuale: %1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "Personalizzato"
},
"Custom Color": {
"Custom Color": ""
"Custom Color": "Colore Personalizzato"
},
"Custom Duration": {
"Custom Duration": "Durata Personalizzata"
@@ -1101,7 +1128,7 @@
"Desktop Clock": "Orologio Desktop"
},
"Detailed": {
"Detailed": ""
"Detailed": "Dettagliata"
},
"Development": {
"Development": "Sviluppo"
@@ -1191,7 +1218,7 @@
"Display currently focused application title": "Mostra il titolo dell'applicazione attualmente attiva"
},
"Display hourly weather predictions": {
"Display hourly weather predictions": ""
"Display hourly weather predictions": "Mostra previsioni meteo orarie"
},
"Display only workspaces that contain windows": {
"Display only workspaces that contain windows": "Mostra solo gli spazi di lavoro che contengono finestre"
@@ -1314,7 +1341,7 @@
"Enable WiFi": "Abilita WiFi"
},
"Enable compositor-targetable blur layer (namespace: dms:blurwallpaper). Requires manual niri configuration.": {
"Enable compositor-targetable blur layer (namespace: dms:blurwallpaper). Requires manual niri configuration.": "Abilitare il livello di sfocatura compositore-targetable (namespace: dms:blurwallpaper). Richiede la configurazione manuale di niri."
"Enable compositor-targetable blur layer (namespace: dms:blurwallpaper). Requires manual niri configuration.": "Abilita il livello di sfocatura compositore-targetable (namespace: dms:blurwallpaper). Richiede la configurazione manuale di niri."
},
"Enable fingerprint authentication": {
"Enable fingerprint authentication": "Abilita autenticazione biometrica"
@@ -1569,7 +1596,7 @@
"Failed to write temp file for validation": "Impossibile scrivere il file temporaneo per la validazione"
},
"Feels": {
"Feels": ""
"Feels": "Percepita"
},
"Feels Like": {
"Feels Like": "Temp. percepita"
@@ -1653,10 +1680,10 @@
"Force terminal applications to always use dark color schemes": "Forza applicazioni da terminale ad usare schemi di colori scuri"
},
"Forecast": {
"Forecast": ""
"Forecast": "Previsioni"
},
"Forecast Days": {
"Forecast Days": ""
"Forecast Days": "Giorni di Previsione"
},
"Forecast Not Available": {
"Forecast Not Available": "Previsioni Non Disponibili"
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "Ritardo Nascondi"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "Nascondi Quando le Finestre Sono Aperte"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "Nascondi la dock quando non è in uso e mostrala quando il cursore passa vicino allarea della dock"
},
@@ -1812,7 +1854,7 @@
"Hourly Forecast": "Previsioni Orarie"
},
"Hourly Forecast Count": {
"Hourly Forecast Count": ""
"Hourly Forecast Count": "Numero di Previsioni Orarie"
},
"How often to change wallpaper": {
"How often to change wallpaper": "Quanto spesso cambiare lo sfondo"
@@ -1821,7 +1863,7 @@
"Humidity": "Umidità"
},
"Hyprland Layout Overrides": {
"Hyprland Layout Overrides": ""
"Hyprland Layout Overrides": "Sovrascritture Layout di Hyprland"
},
"I Understand": {
"I Understand": "Ho capito"
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "Tasto"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "Nome Layout Tastiera"
},
@@ -2091,7 +2142,7 @@
"Management": "Gestione"
},
"MangoWC Layout Overrides": {
"MangoWC Layout Overrides": ""
"MangoWC Layout Overrides": "Sovrascritture Layout di MangoWC"
},
"Manual Coordinates": {
"Manual Coordinates": "Coordinate Manuali"
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "Monta"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "Sposta Widget"
},
@@ -2358,7 +2415,7 @@
"No VPN profiles": "Nessun profilo VPN"
},
"No Weather Data": {
"No Weather Data": ""
"No Weather Data": "Nessun Dato Meteo"
},
"No Weather Data Available": {
"No Weather Data Available": "Nessun Dato Meteo Disponibile"
@@ -2451,7 +2508,7 @@
"Not connected": "Non connesso"
},
"Not detected": {
"Not detected": ""
"Not detected": "Non rilevato"
},
"Note: this only changes the percentage, it does not actually limit charging.": {
"Note: this only changes the percentage, it does not actually limit charging.": "Nota: questa opzione modifica solo la percentuale visualizzata, non limita fisicamente la carica."
@@ -2568,7 +2625,7 @@
"Override": "Sovrascrivi"
},
"Override Border Size": {
"Override Border Size": ""
"Override Border Size": "Sovrascrivi Spessore Bordi"
},
"Override Corner Radius": {
"Override Corner Radius": "Sovrascrivi Raggio Angoli"
@@ -2745,7 +2802,7 @@
"Power source": "Sorgente di alimentazione"
},
"Precip": {
"Precip": ""
"Precip": "Precipitazioni"
},
"Precipitation Chance": {
"Precipitation Chance": "Probabilità di Precipitazioni"
@@ -2949,10 +3006,10 @@
"Rounded corners for windows": "Angoli arrotondati per le finestre"
},
"Rounded corners for windows (border_radius)": {
"Rounded corners for windows (border_radius)": ""
"Rounded corners for windows (border_radius)": "Angoli arrotondati per le finestre (border_radius)"
},
"Rounded corners for windows (decoration.rounding)": {
"Rounded corners for windows (decoration.rounding)": ""
"Rounded corners for windows (decoration.rounding)": "Angoli arrotondati per le finestre (decoration.rounding)"
},
"Run DMS Templates": {
"Run DMS Templates": "Esegui Template DMS"
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "Scorrimento"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "Cerca il contenuto dei file"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "Cerca scorciatoie..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "Cerca plugin..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "Seleziona un'immagine"
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "Seleziona un dispositivo..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Seleziona l'algoritmo tavolozza usato per i colori basati sullo sfondo"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "Seleziona quali transizioni includere nella randomizzazione"
},
@@ -3153,7 +3222,7 @@
"Shift+Enter: Paste • Shift+Del: Clear All • Esc: Close": "Shift+Invio: Incolla • Shift+Canc: Cancella Tutto • Esc: Chiudi"
},
"Short": {
"Short": "Corto"
"Short": "Breve"
},
"Shortcuts": {
"Shortcuts": "Scorciatoie"
@@ -3183,10 +3252,10 @@
"Show Dock": "Mostra Dock"
},
"Show Feels Like Temperature": {
"Show Feels Like Temperature": ""
"Show Feels Like Temperature": "Mostra Temperatura Percepita"
},
"Show Forecast": {
"Show Forecast": ""
"Show Forecast": "Mostra Previsioni"
},
"Show GPU Temperature": {
"Show GPU Temperature": "Mostra Temperatura GPU"
@@ -3201,16 +3270,16 @@
"Show Hour Numbers": "Mostra Numeri delle Ore"
},
"Show Hourly Forecast": {
"Show Hourly Forecast": ""
"Show Hourly Forecast": "Mostra Previsioni Orarie"
},
"Show Humidity": {
"Show Humidity": ""
"Show Humidity": "Mostra Umidità"
},
"Show Line Numbers": {
"Show Line Numbers": "Mostra Numero Righe"
},
"Show Location": {
"Show Location": ""
"Show Location": "Mostra Posizione"
},
"Show Lock": {
"Show Lock": "Mostra Blocco"
@@ -3237,10 +3306,10 @@
"Show Power Off": "Mostra Spegni"
},
"Show Precipitation Probability": {
"Show Precipitation Probability": ""
"Show Precipitation Probability": "Mostra Probabilità di Precipitazioni"
},
"Show Pressure": {
"Show Pressure": ""
"Show Pressure": "Mostra Pressione"
},
"Show Reboot": {
"Show Reboot": "Mostra Riavvia"
@@ -3252,7 +3321,7 @@
"Show Seconds": "Mostra Secondi"
},
"Show Sunrise/Sunset": {
"Show Sunrise/Sunset": ""
"Show Sunrise/Sunset": "Mostra Alba/Tramonto"
},
"Show Suspend": {
"Show Suspend": "Mostra Sospendi"
@@ -3261,13 +3330,13 @@
"Show Top Processes": "Mostra Processi Principali"
},
"Show Weather Condition": {
"Show Weather Condition": ""
"Show Weather Condition": "Mostra Condizioni Meteo"
},
"Show Welcome": {
"Show Welcome": ""
"Show Welcome": "Mostra Benvenuto"
},
"Show Wind Speed": {
"Show Wind Speed": ""
"Show Wind Speed": "Mostra Velocità del Vento"
},
"Show Workspace Apps": {
"Show Workspace Apps": "Mostra Icone negli Spazi di Lavoro"
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "Mostra in Panoramica"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "Mostra su tutti gli schermi connessi"
},
@@ -3399,10 +3471,10 @@
"Space between windows": "Spazio tra le finestre"
},
"Space between windows (gappih/gappiv/gappoh/gappov)": {
"Space between windows (gappih/gappiv/gappoh/gappov)": ""
"Space between windows (gappih/gappiv/gappoh/gappov)": "Spazio tra le finestre (gappih/gappiv/gappoh/gappov)"
},
"Space between windows (gaps_in and gaps_out)": {
"Space between windows (gaps_in and gaps_out)": ""
"Space between windows (gaps_in and gaps_out)": "Spazio tra le finestre (gaps_in e gaps_out)"
},
"Spacer": {
"Spacer": "Spaziatore"
@@ -3426,7 +3498,7 @@
"Stacked": "Impilato"
},
"Standard": {
"Standard": ""
"Standard": "Standard"
},
"Start": {
"Start": "Avvio"
@@ -3651,7 +3723,7 @@
"Toner Low": "Toner Basso"
},
"Tools": {
"Tools": ""
"Tools": "Strumenti"
},
"Top": {
"Top": "In Alto"
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "Trasparenza"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Spegni monitor dopo"
},
"Type": {
"Type": "Tipo"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "Tipografia"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "Rete sconosciuta"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "Rimuovi dalla Dock"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "Aggiorna Plugin"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "Usa formato 24-ore invece del 12-ore AM/PM"
},
@@ -3765,10 +3852,10 @@
"Use animated wave progress bars for media playback": "Usa barre ad onde animate per la riproduzione media"
},
"Use custom border size": {
"Use custom border size": ""
"Use custom border size": "Usa uno spessore bordo personalizzato"
},
"Use custom border/focus-ring width": {
"Use custom border/focus-ring width": ""
"Use custom border/focus-ring width": "Usa larghezza bordo/anello di focus personalizzata"
},
"Use custom command for update your system": {
"Use custom command for update your system": "Usa comando personalizzato per aggiornare il sistema"
@@ -3780,7 +3867,7 @@
"Use custom window radius instead of theme radius": "Usa un raggio finestra personalizzato invece di quello del tema"
},
"Use custom window rounding instead of theme radius": {
"Use custom window rounding instead of theme radius": ""
"Use custom window rounding instead of theme radius": "Usa un arrotondamento finestre personalizzato invece del raggio del tema"
},
"Use fingerprint reader for lock screen authentication (requires enrolled fingerprints)": {
"Use fingerprint reader for lock screen authentication (requires enrolled fingerprints)": "Usa impronte digitali per autenticazione blocco schermo\n(richiede impronte digitali registrate)"
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "Usa tema di suoni dalle impostazioni di sistema"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "Utilizzo%"
},
@@ -3798,7 +3888,7 @@
"Used": "Usato"
},
"Used when accent color is set to Custom": {
"Used when accent color is set to Custom": ""
"Used when accent color is set to Custom": "Utilizzato quando il colore di accento è impostato su Personalizzato"
},
"User": {
"User": "Utente"
@@ -3876,7 +3966,7 @@
"Vibrant palette with playful saturation.": "Tavolozza vibrante con saturazione giocosa."
},
"View Mode": {
"View Mode": ""
"View Mode": "Modalità Visualizzazione"
},
"Visibility": {
"Visibility": "Visibilità"
@@ -3995,13 +4085,13 @@
"Widget removed": "Widget rimosso"
},
"Width of window border (borderpx)": {
"Width of window border (borderpx)": ""
"Width of window border (borderpx)": "Larghezza bordo finestra (borderpx)"
},
"Width of window border (general.border_size)": {
"Width of window border (general.border_size)": ""
"Width of window border (general.border_size)": "Larghezza bordo finestra (general.border_size)"
},
"Width of window border and focus ring": {
"Width of window border and focus ring": ""
"Width of window border and focus ring": "Larghezza del bordo e dell'anello di fuoco delle finestre"
},
"Wind": {
"Wind": "Vento"
@@ -4019,7 +4109,7 @@
"Window Gaps (px)": "Spazi tra finestre (px)"
},
"Window Rounding": {
"Window Rounding": ""
"Window Rounding": "Arrotondamento Finestre"
},
"Workspace": {
"Workspace": "Spazio di Lavoro"
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "di %1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Sfoglia Temi"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl è ora incluso in config.kdl"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "La configurazione dms/outputs esiste ma non è inclusa nella configurazione del compositor. Le modifiche allo schermo non saranno persistenti."
},
@@ -4142,143 +4238,143 @@
"Material Design inspired color themes": "Temi colore ispirati al Material Design"
},
"greeter back button": {
"Back": ""
"Back": "Indietro"
},
"greeter completion page subtitle": {
"DankMaterialShell is ready to use": ""
"DankMaterialShell is ready to use": "DankMaterialShell è pronta per l'uso"
},
"greeter completion page title": {
"You're All Set!": ""
"You're All Set!": "Tutto Pronto!"
},
"greeter configure keybinds link": {
"Configure Keybinds": ""
"Configure Keybinds": "Configura Tasti di Scelta Rapida"
},
"greeter dankbar description": {
"Widgets, layout, style": ""
"Widgets, layout, style": "Widget, layout, stile"
},
"greeter displays description": {
"Resolution, position, scale": ""
"Resolution, position, scale": "Risoluzione, posizione, scala"
},
"greeter dock description": {
"Position, pinned apps": ""
"Position, pinned apps": "Posizione, app fissate"
},
"greeter doctor page button": {
"Run Again": ""
"Run Again": "Esegui di Nuovo"
},
"greeter doctor page empty state": {
"No checks passed": "",
"No errors": "",
"No info items": "",
"No warnings": ""
"No checks passed": "Nessun controllo superato",
"No errors": "Nessun errore",
"No info items": "Nessun elemento informativo",
"No warnings": "Nessun avviso"
},
"greeter doctor page error count": {
"%1 issue(s) found": ""
"%1 issue(s) found": "%1 problema(i) rilevato(i)"
},
"greeter doctor page loading text": {
"Analyzing configuration...": ""
"Analyzing configuration...": "Analisi configurazione in corso..."
},
"greeter doctor page status card": {
"Errors": "",
"Info": "",
"OK": "",
"Warnings": ""
"Errors": "Errori",
"Info": "Informazioni",
"OK": "OK",
"Warnings": "Avvisi"
},
"greeter doctor page success": {
"All checks passed": ""
"All checks passed": "Tutti i controlli superati"
},
"greeter doctor page title": {
"System Check": ""
"System Check": "Controllo di Sistema"
},
"greeter documentation link": {
"Docs": ""
"Docs": "Documentazione"
},
"greeter explore section header": {
"Explore": ""
"Explore": "Esplora"
},
"greeter feature card description": {
"Background app icons": "",
"Colors from wallpaper": "",
"Community themes": "",
"Extensible architecture": "",
"GTK, Qt, IDEs, more": "",
"Modular widget bar": "",
"Night mode & gamma": "",
"Per-screen config": "",
"Quick system toggles": ""
"Background app icons": "Icone app in background",
"Colors from wallpaper": "Colori dallo sfondo",
"Community themes": "Temi della community",
"Extensible architecture": "Architettura estensibile",
"GTK, Qt, IDEs, more": "GTK, Qt, IDE, altro",
"Modular widget bar": "Barra widget modulare",
"Night mode & gamma": "Modalità notte e gamma",
"Per-screen config": "Configurazione per schermo",
"Quick system toggles": "Comandi rapidi di sistema"
},
"greeter feature card title": {
"App Theming": "",
"Control Center": "",
"Display Control": "",
"Dynamic Theming": "",
"Multi-Monitor": "",
"System Tray": "",
"Theme Registry": ""
"App Theming": "Theming Applicazioni",
"Control Center": "Centro di Controllo",
"Display Control": "Controllo Schermo",
"Dynamic Theming": "Theming Dinamico",
"Multi-Monitor": "Multi-Monitor",
"System Tray": "Area di Notifica",
"Theme Registry": "Registro dei Temi"
},
"greeter feature card title | greeter plugins link": {
"Plugins": ""
"Plugins": "Plugin"
},
"greeter feature card title | greeter settings link": {
"DankBar": ""
"DankBar": "DankBar"
},
"greeter finish button": {
"Finish": ""
"Finish": "Fine"
},
"greeter first page button": {
"Get Started": ""
"Get Started": "Inizia"
},
"greeter keybinds niri description": {
"niri shortcuts config": ""
"niri shortcuts config": "configurazione scorciatoie niri"
},
"greeter keybinds section header": {
"DMS Shortcuts": ""
"DMS Shortcuts": "Scorciatoie DMS"
},
"greeter modal window title": {
"Welcome": ""
"Welcome": "Benvenuto"
},
"greeter next button": {
"Next": ""
"Next": "Avanti"
},
"greeter no keybinds message": {
"No DMS shortcuts configured": ""
"No DMS shortcuts configured": "Nessuna scorciatoia DMS configurata"
},
"greeter notifications description": {
"Popup behavior, position": ""
"Popup behavior, position": "Comportamento e posizione dei popup"
},
"greeter settings link": {
"Displays": "",
"Dock": "",
"Keybinds": "",
"Notifications": "",
"Theme & Colors": "",
"Wallpaper": ""
"Displays": "Schermi",
"Dock": "Dock",
"Keybinds": "Tasti di Scelta Rapida",
"Notifications": "Notifiche",
"Theme & Colors": "Temi & Colori",
"Wallpaper": "Sfondo"
},
"greeter settings section header": {
"Configure": ""
"Configure": "Configura"
},
"greeter skip button": {
"Skip": ""
"Skip": "Salta"
},
"greeter skip button tooltip": {
"Skip setup": ""
"Skip setup": "Salta configurazione"
},
"greeter theme description": {
"Dynamic colors, presets": ""
"Dynamic colors, presets": "Colori dinamici, preimpostazioni"
},
"greeter themes link": {
"Themes": ""
"Themes": "Temi"
},
"greeter wallpaper description": {
"Background image": ""
"Background image": "Immagine di sfondo"
},
"greeter welcome page section header": {
"Features": ""
"Features": "Funzionalità"
},
"greeter welcome page tagline": {
"A modern desktop shell for Wayland compositors": ""
"A modern desktop shell for Wayland compositors": "Una moderna shell desktop per compositor Wayland"
},
"greeter welcome page title": {
"Welcome to DankMaterialShell": ""
"Welcome to DankMaterialShell": "Benvenuto in DankMaterialShell"
},
"install action button": {
"Install": "Installa"
@@ -4302,17 +4398,17 @@
"Loading...": "Caricamento..."
},
"lock screen notification mode option": {
"App Names": "",
"Count Only": "",
"Disabled": "",
"Full Content": ""
"App Names": "Nomi App",
"Count Only": "Solo Conteggio",
"Disabled": "Disabilitato",
"Full Content": "Contenuto Completo"
},
"lock screen notification privacy setting": {
"Control what notification information is shown on the lock screen": "",
"Notification Display": ""
"Control what notification information is shown on the lock screen": "Controlla quali informazioni delle notifiche vengono mostrate sulla schermata di blocco",
"Notification Display": "Visualizzazione Notifiche"
},
"lock screen notifications settings card": {
"Lock Screen": ""
"Lock Screen": "Schermata di Blocco"
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl non disponibile - integrazione blocco richiede connessione socket DMS"
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "Widget"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "sorgente"
},

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": ""
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": ""
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: 戻る • F1/I: ファイル情報 • F10: ヘルプ • Esc: 閉じる"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": ""
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": ""
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": ""
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": ""
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": ""
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "コピーしました!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "PIDをコピー"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": ""
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "カスタム"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": ""
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": ""
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "使用していないときはドックを非表示にし、ドックエリアの近くにホバーすると表示されます"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": ""
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "キーボードレイアウト名"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "マウント"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": ""
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "スクロール"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "ファイルの内容を検索"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": ""
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "プラグインを検索..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "画像ファイルを選ぶ..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": ""
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "壁紙ベースの色で、使用するパレットアルゴリズムを選ぶ"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "含めたいトランジションをランダム化に選択"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "概要に表示"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "すべての接続されたディスプレイに表示"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": ""
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "後にモニターの電源を切る"
},
"Type": {
"Type": ""
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": ""
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": ""
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "ドックから固定を解除"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "プラグインを更新"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "12時間制のAM/PMではなく、24時間表記を使用"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "システム設定からサウンドテーマを使用"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "使用%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": ""
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": ""
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": ""
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": ""
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": ""
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": ""
},

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "Aktywuj"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "Aktywny"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Wstecz • F1/I: Informacje o pliku • F10: Pomoc • Esc: Zamknij"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "Zawsze pokazuj procenty"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "Automatycznie czyść po"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "Automatycznie zamknij podgląd Niri otwierając aplikacje."
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "Wyczyść przy starcie"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "Kliknij 'Konfiguruj' by stworzyć dms/binds.kdl i dodać do config.kdl"
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "Skopiowane!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "Kopiuj PID"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": "Aktualnie: %1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "Niestandardowy"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "Ukryj opóźnienie"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "Ukryj Gdy Otwarte Są Okna"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "Ukryj dok, gdy nie jest używany, i odkryj go po najechaniu kursorem w jego pobliże"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "Klawisz"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "Nazwa układu klawiatury"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "Zamontuj"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "Przesuń Widżet"
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "Przewijanie"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "Przeszukaj zawartość plików"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "Wyszukaj skróty klawiszowe..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "Szukaj wtyczek..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "Wybierz plik obrazu..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "Wybierz urządzenie..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Wybierz algorytm palety używany dla kolorów tapet."
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "Wybierz, które przejścia uwzględnić w losowaniu"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "Pokaż w podglądzie"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "Pokaż na wszystkich podłączonych wyświetlaczach"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "Przezroczystość"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Wyłącz monitory po"
},
"Type": {
"Type": "Typ"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "Typografia"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "Nieznana Sieć"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "Odepnij z doku"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "Zaktualizuj wtyczkę"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "Użyj 24-godzinnego formatu czasu zamiast 12-godzinnego AM/PM"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "Użyj motywu dźwiękowego z ustawień systemowych"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "Użycie %"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "od %1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Przeglądaj Motywy"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "Plik dms/binds.kdl jest teraz zawarty w pliku config.kdl"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "Konfiguracja dms/outputs istnieje, ale nie jest dodana do konfiguracji twojego kompozytora. Zmiany nie będą miały efektu."
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "Widżety"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "źródło"
},

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "Ativar"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "Ativa"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Voltar • F1/I: Informações de Arquivo • F10: Ajuda • Esc: Fechar"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "Sempre Mostrar Porcentagem"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": ""
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "Fechar automaticamente overview do niri ao lançar aplicativos."
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "Limpar ao Iniciar"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": ""
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "Copiado!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "Copiar PID"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": ""
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "Customizado"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": ""
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": ""
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "Esconder a dock quando não usada e mostrar ao passar o mouse próximo da área"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "Tecla"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "Nome de Layout do Teclado"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "Ponto de montagem"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": ""
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "Scrolling"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "Pesquisar conteúdos de arquivos"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "Pesquisar atalhos..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "Buscar plugins..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "Selecione um arquivo de imagem..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "Selecionar dispositivo..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Selecione o algoritmo usado para cores baseadas no papel de parede"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "Selecionar quais transições incluir na randomização"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "Mostrar na Visão Geral"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "Mostrar em todas as telas conectadas"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "Transparência"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Desligar monitores depois de"
},
"Type": {
"Type": "Tipo"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "Tipografia"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": ""
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "Desafixar do Dock"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "Atualizar Plugin"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "Usar relógio de 24 horas em vez de 12 horas com AM/PM"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "Usar tema de som das configurações do sistema"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "Uso%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": ""
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": ""
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl está agora incluído em config.kdl"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": ""
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": ""
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": ""
},

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "Etkinleştir"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "Etkin"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: Geri • F1/I: Dosya bilgisi • F10: Yardım • Esc: Kapat"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "Yüzdeyi Her Zaman Göster"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "Sonra Otomatik Sil"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "Uygulamaları başlatınca Niri genel görünümünü otomatik kapat."
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "Başlangıçta Temizle"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "dms/binds.kdl dosyasını oluşturmak ve config.kdl dosyasına eklemek için 'Kur' düğmesine tıklayın."
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "Kopyalandı!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "PID'i Kopyala"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": "Mevcut: %1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "Özel"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "Gizleme Gecikmesi"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "Pencere Açıkken Gizle"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "Kullanılmadığında dock'u gizle ve dock alanının yakınına geldiğinizde göster"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "Tuş"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "Klavye Düzeni Adı"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "Bağlı"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "Widget Taşı"
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "Kaydırma"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "Dosya içeriklerini ara"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "Tuş kombinasyonları ara..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "Eklentileri ara..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "Bir resim dosyası seçin..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "Aygıt seç..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "Duvar kağıdı tabanlı renkler için kullanılan palet algoritmasını seçin"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "Rastgele seçime dahil edilecek geçişleri seçin"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "Genel Görünümde Göster"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "Tüm bağlı ekranlarda göster"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "Transparanlık"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "Şu zaman sonra monitörleri kapat"
},
"Type": {
"Type": "Tip"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "Tipografi"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "Bilinmeyen Ağ"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "Dock'tan Sabitlemeyi Kaldır"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "Eklentiyi Güncelle"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "12 saatlik ÖÖ/ÖS yerine 24 saatlik zaman formatını kullanın."
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "Sistem ayarlarındaki ses temasını kullan"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "Kullan%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "%1 tarafından"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Temalara Göz At"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl artık config.kdl dosyasına dahil edilmiştir."
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "dms/outputs yapılandırması mevcut ancak kompozitör yapılandırmanıza dahil edilmemiş. Ekran değişiklikleri kalıcı olmayacaktır."
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "Widgetlar"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "kaynak"
},

View File

@@ -24,7 +24,7 @@
"%1 job(s)": "%1 个任务"
},
"%1 notifications": {
"%1 notifications": ""
"%1 notifications": "%1条通知"
},
"%1 printer(s)": {
"%1 printer(s)": "%1 个打印机"
@@ -42,7 +42,7 @@
"(Unnamed)": "(未命名)"
},
"+ %1 more": {
"+ %1 more": ""
"+ %1 more": "+%1更多"
},
"0 = square corners": {
"0 = square corners": "0 = 直角"
@@ -57,7 +57,7 @@
"1 minute": "1 分钟"
},
"1 notification": {
"1 notification": ""
"1 notification": "1条通知"
},
"1 second": {
"1 second": "1 秒"
@@ -138,7 +138,7 @@
"About": "关于"
},
"Accent Color": {
"Accent Color": ""
"Accent Color": "重点色"
},
"Accept Jobs": {
"Accept Jobs": "接受任务"
@@ -164,6 +164,9 @@
"Activate": {
"Activate": "激活"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "活动"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/退格: 返回 • F1/I: 文件信息 • F10: 帮助 • Esc: 关闭"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "始终显示百分比"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "在此之后自动清除"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "当启动程序时自动关闭Niri概览。"
},
@@ -426,7 +435,7 @@
"Available Screens (%1)": "可用屏幕(%1"
},
"Available in Detailed and Forecast view modes": {
"Available in Detailed and Forecast view modes": ""
"Available in Detailed and Forecast view modes": "提供详细视图和预测视图两种模式"
},
"BSSID": {
"BSSID": "BSSID"
@@ -516,7 +525,7 @@
"Border Opacity": "边框透明度"
},
"Border Size": {
"Border Size": ""
"Border Size": "边框宽度"
},
"Border Thickness": {
"Border Thickness": "边框厚度"
@@ -645,7 +654,7 @@
"Choose colors from palette": "从调色板中选择颜色"
},
"Choose how the weather widget is displayed": {
"Choose how the weather widget is displayed": ""
"Choose how the weather widget is displayed": "选择天气部件的显示方式"
},
"Choose icon": {
"Choose icon": "选择图标"
@@ -663,7 +672,7 @@
"Choose where notification popups appear on screen": "设置通知弹窗的出现位置"
},
"Choose where on-screen displays appear on screen": {
"Choose where on-screen displays appear on screen": "选择OSD在屏幕上出现的位置"
"Choose where on-screen displays appear on screen": "选择 OSD 在屏幕上出现的位置"
},
"Choose which displays show this widget": {
"Choose which displays show this widget": "选择要在哪个显示器显示该小部件"
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "启动时清除"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "点击设置以创建 dms/binds.kdl并添加至config.kdl。"
},
@@ -777,7 +789,7 @@
"Communication": "通讯"
},
"Compact": {
"Compact": ""
"Compact": "紧凑"
},
"Compact Mode": {
"Compact Mode": "紧凑模式"
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "复制成功!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "复制进程ID"
},
@@ -932,11 +947,23 @@
"Current: %1": {
"Current: %1": "当前:%1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "自定义"
},
"Custom Color": {
"Custom Color": ""
"Custom Color": "自定义颜色"
},
"Custom Duration": {
"Custom Duration": "自定义持续时间"
@@ -1101,7 +1128,7 @@
"Desktop Clock": "桌面时钟"
},
"Detailed": {
"Detailed": ""
"Detailed": "详细"
},
"Development": {
"Development": "开发"
@@ -1191,7 +1218,7 @@
"Display currently focused application title": "显示当前聚焦应用的标题"
},
"Display hourly weather predictions": {
"Display hourly weather predictions": ""
"Display hourly weather predictions": "显示每小时天气预报"
},
"Display only workspaces that contain windows": {
"Display only workspaces that contain windows": "只显示包含窗口的工作区"
@@ -1569,7 +1596,7 @@
"Failed to write temp file for validation": "未能写入临时文件进行验证"
},
"Feels": {
"Feels": ""
"Feels": "观感"
},
"Feels Like": {
"Feels Like": "体感温度"
@@ -1653,10 +1680,10 @@
"Force terminal applications to always use dark color schemes": "强制终端应用使用暗色"
},
"Forecast": {
"Forecast": ""
"Forecast": "预测"
},
"Forecast Days": {
"Forecast Days": ""
"Forecast Days": "天气预测"
},
"Forecast Not Available": {
"Forecast Not Available": "暂无预报"
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "隐藏延迟"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "当窗口打开时隐藏"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "在未使用时隐藏程序坞,鼠标悬停到程序坞区域时显示"
},
@@ -1812,7 +1854,7 @@
"Hourly Forecast": "每小时预报"
},
"Hourly Forecast Count": {
"Hourly Forecast Count": ""
"Hourly Forecast Count": "每小时预测计数"
},
"How often to change wallpaper": {
"How often to change wallpaper": "壁纸轮换频率"
@@ -1821,7 +1863,7 @@
"Humidity": "湿度"
},
"Hyprland Layout Overrides": {
"Hyprland Layout Overrides": ""
"Hyprland Layout Overrides": "Hyprland布局覆盖"
},
"I Understand": {
"I Understand": "我明白以上内容"
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "键"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "键盘布局名称"
},
@@ -2091,7 +2142,7 @@
"Management": "管理"
},
"MangoWC Layout Overrides": {
"MangoWC Layout Overrides": ""
"MangoWC Layout Overrides": "MangoWC布局覆盖"
},
"Manual Coordinates": {
"Manual Coordinates": "手动设置坐标"
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "挂载"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "移动部件"
},
@@ -2358,7 +2415,7 @@
"No VPN profiles": "无 VPN 配置"
},
"No Weather Data": {
"No Weather Data": ""
"No Weather Data": "无天气数据"
},
"No Weather Data Available": {
"No Weather Data Available": "暂无天气数据"
@@ -2451,7 +2508,7 @@
"Not connected": "未连接"
},
"Not detected": {
"Not detected": ""
"Not detected": "未检测到"
},
"Note: this only changes the percentage, it does not actually limit charging.": {
"Note: this only changes the percentage, it does not actually limit charging.": "注意:这只会改变百分比,而不会实际限制充电。"
@@ -2568,7 +2625,7 @@
"Override": "覆盖"
},
"Override Border Size": {
"Override Border Size": ""
"Override Border Size": "覆盖边框尺寸"
},
"Override Corner Radius": {
"Override Corner Radius": "覆盖角半径"
@@ -2745,7 +2802,7 @@
"Power source": "电源"
},
"Precip": {
"Precip": ""
"Precip": "降水"
},
"Precipitation Chance": {
"Precipitation Chance": "降水概率"
@@ -2949,10 +3006,10 @@
"Rounded corners for windows": "窗口圆角"
},
"Rounded corners for windows (border_radius)": {
"Rounded corners for windows (border_radius)": ""
"Rounded corners for windows (border_radius)": "窗口圆角border_radius"
},
"Rounded corners for windows (decoration.rounding)": {
"Rounded corners for windows (decoration.rounding)": ""
"Rounded corners for windows (decoration.rounding)": "窗口圆角decoration.rounding"
},
"Run DMS Templates": {
"Run DMS Templates": "运行DMS模板"
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "滚动"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "检索文件内容"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "搜索按键绑定..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "搜索插件中..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "选择一张图片..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "选择设备..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "选择从壁纸取色的配色方案"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "选择在随机轮换中使用的过渡效果"
},
@@ -3183,10 +3252,10 @@
"Show Dock": "显示程序坞"
},
"Show Feels Like Temperature": {
"Show Feels Like Temperature": ""
"Show Feels Like Temperature": "显示感官温度"
},
"Show Forecast": {
"Show Forecast": ""
"Show Forecast": "显示天气预测"
},
"Show GPU Temperature": {
"Show GPU Temperature": "显示GPU温度"
@@ -3201,16 +3270,16 @@
"Show Hour Numbers": "显示小时数"
},
"Show Hourly Forecast": {
"Show Hourly Forecast": ""
"Show Hourly Forecast": "显示每小时天气预测"
},
"Show Humidity": {
"Show Humidity": ""
"Show Humidity": "显示湿度"
},
"Show Line Numbers": {
"Show Line Numbers": "显示行号"
},
"Show Location": {
"Show Location": ""
"Show Location": "显示位置"
},
"Show Lock": {
"Show Lock": "显示锁定"
@@ -3237,10 +3306,10 @@
"Show Power Off": "显示关机"
},
"Show Precipitation Probability": {
"Show Precipitation Probability": ""
"Show Precipitation Probability": "显示降水概率"
},
"Show Pressure": {
"Show Pressure": ""
"Show Pressure": "显示气压"
},
"Show Reboot": {
"Show Reboot": "显示重启"
@@ -3252,7 +3321,7 @@
"Show Seconds": "显示秒数"
},
"Show Sunrise/Sunset": {
"Show Sunrise/Sunset": ""
"Show Sunrise/Sunset": "显示日出/日落"
},
"Show Suspend": {
"Show Suspend": "显示挂起"
@@ -3261,13 +3330,13 @@
"Show Top Processes": "显示占用多的进程"
},
"Show Weather Condition": {
"Show Weather Condition": ""
"Show Weather Condition": "显示天气状况"
},
"Show Welcome": {
"Show Welcome": ""
"Show Welcome": "显示欢迎信息"
},
"Show Wind Speed": {
"Show Wind Speed": ""
"Show Wind Speed": "显示风速"
},
"Show Workspace Apps": {
"Show Workspace Apps": "显示工作区内应用"
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "概览中显示"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "在所有已连接的显示器上显示"
},
@@ -3300,28 +3372,28 @@
"Show on screens:": "选择显示的屏幕:"
},
"Show on-screen display when brightness changes": {
"Show on-screen display when brightness changes": "当亮度改变时显示OSD"
"Show on-screen display when brightness changes": "当亮度改变时显示 OSD"
},
"Show on-screen display when caps lock state changes": {
"Show on-screen display when caps lock state changes": "当大小写状态变化时显示OSD"
"Show on-screen display when caps lock state changes": "当大小写状态变化时显示 OSD"
},
"Show on-screen display when cycling audio output devices": {
"Show on-screen display when cycling audio output devices": "当循环切换音频输出设备时显示OSD"
"Show on-screen display when cycling audio output devices": "当循环切换音频输出设备时显示 OSD"
},
"Show on-screen display when idle inhibitor state changes": {
"Show on-screen display when idle inhibitor state changes": "当空闲抑制状态改变时显示OSD"
"Show on-screen display when idle inhibitor state changes": "当空闲抑制状态改变时显示 OSD"
},
"Show on-screen display when media player volume changes": {
"Show on-screen display when media player volume changes": "当媒体音量改变时显示OSD"
},
"Show on-screen display when microphone is muted/unmuted": {
"Show on-screen display when microphone is muted/unmuted": "当麦克风静音状态切换时显示OSD"
"Show on-screen display when microphone is muted/unmuted": "当麦克风静音状态切换时显示 OSD"
},
"Show on-screen display when power profile changes": {
"Show on-screen display when power profile changes": "当电源配置改变时显示OSD"
"Show on-screen display when power profile changes": "当电源配置改变时显示 OSD"
},
"Show on-screen display when volume changes": {
"Show on-screen display when volume changes": "当音量变化时显示OSD"
"Show on-screen display when volume changes": "当音量变化时显示 OSD"
},
"Show only apps running in current workspace": {
"Show only apps running in current workspace": "仅显示当前工作区中的活动应用"
@@ -3399,10 +3471,10 @@
"Space between windows": "窗口间空隙"
},
"Space between windows (gappih/gappiv/gappoh/gappov)": {
"Space between windows (gappih/gappiv/gappoh/gappov)": ""
"Space between windows (gappih/gappiv/gappoh/gappov)": "窗口间隙gappih/gappiv/gappoh/gappov"
},
"Space between windows (gaps_in and gaps_out)": {
"Space between windows (gaps_in and gaps_out)": ""
"Space between windows (gaps_in and gaps_out)": "窗口间隙gaps_in与gaps_out"
},
"Spacer": {
"Spacer": "空白占位"
@@ -3426,7 +3498,7 @@
"Stacked": "堆叠"
},
"Standard": {
"Standard": ""
"Standard": "基础设置"
},
"Start": {
"Start": "开始"
@@ -3651,7 +3723,7 @@
"Toner Low": "碳粉不足"
},
"Tools": {
"Tools": ""
"Tools": "工具"
},
"Top": {
"Top": "顶部"
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "透明度"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "在此时间后关闭显示器"
},
"Type": {
"Type": "类型"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "排版"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "未知网络"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "从程序坞取消固定"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "更新插件"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "改用24小时制显示时间"
},
@@ -3765,10 +3852,10 @@
"Use animated wave progress bars for media playback": "进行媒体播放时显示动画波形进度条"
},
"Use custom border size": {
"Use custom border size": ""
"Use custom border size": "使用自定义边框尺寸"
},
"Use custom border/focus-ring width": {
"Use custom border/focus-ring width": ""
"Use custom border/focus-ring width": "使用自定义边框/焦点环宽度"
},
"Use custom command for update your system": {
"Use custom command for update your system": "使用自定义命令来更新系统"
@@ -3780,7 +3867,7 @@
"Use custom window radius instead of theme radius": "使用自定义窗口半径替代主题半径"
},
"Use custom window rounding instead of theme radius": {
"Use custom window rounding instead of theme radius": ""
"Use custom window rounding instead of theme radius": "使用自定义窗口圆角代替主题半径"
},
"Use fingerprint reader for lock screen authentication (requires enrolled fingerprints)": {
"Use fingerprint reader for lock screen authentication (requires enrolled fingerprints)": "使用指纹识别进行锁屏验证(需要录入指纹)"
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "使用系统设置中的声音主题"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "使用%"
},
@@ -3798,7 +3888,7 @@
"Used": "已使用"
},
"Used when accent color is set to Custom": {
"Used when accent color is set to Custom": ""
"Used when accent color is set to Custom": "当强调色为自定义时使用"
},
"User": {
"User": "用户"
@@ -3876,7 +3966,7 @@
"Vibrant palette with playful saturation.": "充满活力的调色板,有着俏皮的饱和度。"
},
"View Mode": {
"View Mode": ""
"View Mode": "查看模式"
},
"Visibility": {
"Visibility": "能见度"
@@ -3995,13 +4085,13 @@
"Widget removed": "部件已移除"
},
"Width of window border (borderpx)": {
"Width of window border (borderpx)": ""
"Width of window border (borderpx)": "窗口边框宽度borderpx"
},
"Width of window border (general.border_size)": {
"Width of window border (general.border_size)": ""
"Width of window border (general.border_size)": "窗口边框宽度general.border_size"
},
"Width of window border and focus ring": {
"Width of window border and focus ring": ""
"Width of window border and focus ring": "窗口边框宽度与聚焦环"
},
"Wind": {
"Wind": "风速"
@@ -4019,7 +4109,7 @@
"Window Gaps (px)": "窗口间隙(像素)"
},
"Window Rounding": {
"Window Rounding": ""
"Window Rounding": "窗口圆角"
},
"Workspace": {
"Workspace": "工作区"
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "%1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "浏览主题"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl 现已包含在 config.kdl 中"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "dms/输出配置存在,但不包含在你的合成器配置里。显示更改不会保留。"
},
@@ -4142,143 +4238,143 @@
"Material Design inspired color themes": "受Material设计启发的色彩主题"
},
"greeter back button": {
"Back": ""
"Back": "返回"
},
"greeter completion page subtitle": {
"DankMaterialShell is ready to use": ""
"DankMaterialShell is ready to use": "DankMaterialShell现已可用"
},
"greeter completion page title": {
"You're All Set!": ""
"You're All Set!": "已全部设置!"
},
"greeter configure keybinds link": {
"Configure Keybinds": ""
"Configure Keybinds": "配置快捷键绑定"
},
"greeter dankbar description": {
"Widgets, layout, style": ""
"Widgets, layout, style": "部件、布局与风格"
},
"greeter displays description": {
"Resolution, position, scale": ""
"Resolution, position, scale": "分辨率、位置与缩放"
},
"greeter dock description": {
"Position, pinned apps": ""
"Position, pinned apps": "位置与已固定应用"
},
"greeter doctor page button": {
"Run Again": ""
"Run Again": "启动应用"
},
"greeter doctor page empty state": {
"No checks passed": "",
"No errors": "",
"No info items": "",
"No warnings": ""
"No checks passed": "检查未通过",
"No errors": "无报错",
"No info items": "无信息项目",
"No warnings": "无警告"
},
"greeter doctor page error count": {
"%1 issue(s) found": ""
"%1 issue(s) found": "发现%1个问题"
},
"greeter doctor page loading text": {
"Analyzing configuration...": ""
"Analyzing configuration...": "配置分析中..."
},
"greeter doctor page status card": {
"Errors": "",
"Info": "",
"OK": "",
"Warnings": ""
"Errors": "错误",
"Info": "信息",
"OK": "OK",
"Warnings": "警告"
},
"greeter doctor page success": {
"All checks passed": ""
"All checks passed": "所有检查均已通过"
},
"greeter doctor page title": {
"System Check": ""
"System Check": "系统检查"
},
"greeter documentation link": {
"Docs": ""
"Docs": "文档"
},
"greeter explore section header": {
"Explore": ""
"Explore": "浏览"
},
"greeter feature card description": {
"Background app icons": "",
"Colors from wallpaper": "",
"Community themes": "",
"Extensible architecture": "",
"GTK, Qt, IDEs, more": "",
"Modular widget bar": "",
"Night mode & gamma": "",
"Per-screen config": "",
"Quick system toggles": ""
"Background app icons": "背景应用图标",
"Colors from wallpaper": "从壁纸选取颜色",
"Community themes": "社区主题",
"Extensible architecture": "可扩展架构",
"GTK, Qt, IDEs, more": "GTK、Qt、IDEs等",
"Modular widget bar": "模块化部件状态栏",
"Night mode & gamma": "夜间模式与伽玛",
"Per-screen config": "按屏幕区分设置",
"Quick system toggles": "快速系统切换"
},
"greeter feature card title": {
"App Theming": "",
"Control Center": "",
"Display Control": "",
"Dynamic Theming": "",
"Multi-Monitor": "",
"System Tray": "",
"Theme Registry": ""
"App Theming": "应用主题",
"Control Center": "设置中心",
"Display Control": "显示控制",
"Dynamic Theming": "动态主题",
"Multi-Monitor": "多显示器",
"System Tray": "系统托盘",
"Theme Registry": "主题注册表"
},
"greeter feature card title | greeter plugins link": {
"Plugins": ""
"Plugins": "插件"
},
"greeter feature card title | greeter settings link": {
"DankBar": ""
"DankBar": "DankBar"
},
"greeter finish button": {
"Finish": ""
"Finish": "完成"
},
"greeter first page button": {
"Get Started": ""
"Get Started": "已开始"
},
"greeter keybinds niri description": {
"niri shortcuts config": ""
"niri shortcuts config": "Niri快捷键设置"
},
"greeter keybinds section header": {
"DMS Shortcuts": ""
"DMS Shortcuts": "DMS快捷键"
},
"greeter modal window title": {
"Welcome": ""
"Welcome": "欢迎"
},
"greeter next button": {
"Next": ""
"Next": "下一个"
},
"greeter no keybinds message": {
"No DMS shortcuts configured": ""
"No DMS shortcuts configured": "未配置DMS快捷键"
},
"greeter notifications description": {
"Popup behavior, position": ""
"Popup behavior, position": "弹窗行为与位置"
},
"greeter settings link": {
"Displays": "",
"Dock": "",
"Keybinds": "",
"Notifications": "",
"Theme & Colors": "",
"Wallpaper": ""
"Displays": "显示器",
"Dock": "程序坞",
"Keybinds": "快捷键绑定",
"Notifications": "通知",
"Theme & Colors": "主题与颜色",
"Wallpaper": "壁纸"
},
"greeter settings section header": {
"Configure": ""
"Configure": "配置"
},
"greeter skip button": {
"Skip": ""
"Skip": "跳过"
},
"greeter skip button tooltip": {
"Skip setup": ""
"Skip setup": "跳过设置"
},
"greeter theme description": {
"Dynamic colors, presets": ""
"Dynamic colors, presets": "动态颜色与预设"
},
"greeter themes link": {
"Themes": ""
"Themes": "主题"
},
"greeter wallpaper description": {
"Background image": ""
"Background image": "背景图片"
},
"greeter welcome page section header": {
"Features": ""
"Features": "功能"
},
"greeter welcome page tagline": {
"A modern desktop shell for Wayland compositors": ""
"A modern desktop shell for Wayland compositors": "为wayland合成器设计的一款现代桌面shell"
},
"greeter welcome page title": {
"Welcome to DankMaterialShell": ""
"Welcome to DankMaterialShell": "欢迎来到DankMaterialShell"
},
"install action button": {
"Install": "安装"
@@ -4302,17 +4398,17 @@
"Loading...": "加载中..."
},
"lock screen notification mode option": {
"App Names": "",
"Count Only": "",
"Disabled": "",
"Full Content": ""
"App Names": "仅应用名",
"Count Only": "仅数量",
"Disabled": "禁用",
"Full Content": "完整内容"
},
"lock screen notification privacy setting": {
"Control what notification information is shown on the lock screen": "",
"Notification Display": ""
"Control what notification information is shown on the lock screen": "控制在锁屏上显示的通知内容",
"Notification Display": "通知显示"
},
"lock screen notifications settings card": {
"Lock Screen": ""
"Lock Screen": "锁屏"
},
"loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl 不可用 - 启用锁定集成需连接 DMS socket"
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "部件"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "源"
},

View File

@@ -164,6 +164,9 @@
"Activate": {
"Activate": "啟用"
},
"Activation": {
"Activation": ""
},
"Active": {
"Active": "啟用"
},
@@ -233,6 +236,9 @@
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": {
"Alt+←/Backspace: Back • F1/I: File Info • F10: Help • Esc: Close": "Alt+←/Backspace: 返回 • F1/I: 檔案資訊 • F10: 幫助 • Esc: 關閉"
},
"Always Active": {
"Always Active": ""
},
"Always Show Percentage": {
"Always Show Percentage": "始終顯示百分比"
},
@@ -365,6 +371,9 @@
"Auto-Clear After": {
"Auto-Clear After": "自動清除於"
},
"Auto-Hide Timeout": {
"Auto-Hide Timeout": ""
},
"Auto-close Niri overview when launching apps.": {
"Auto-close Niri overview when launching apps.": "啟動應用程式時自動關閉 Niri 總覽。"
},
@@ -692,6 +701,9 @@
"Clear at Startup": {
"Clear at Startup": "啟動時清除"
},
"Click 'Setup' to create cursor config and add include to your compositor config.": {
"Click 'Setup' to create cursor config and add include to your compositor config.": ""
},
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": {
"Click 'Setup' to create dms/binds.kdl and add include to config.kdl.": "按一下「設定」以建立 dms/binds.kdl 並將其包含至 config.kdl 中。"
},
@@ -878,6 +890,9 @@
"Copied!": {
"Copied!": "已複製!"
},
"Copy": {
"Copy": ""
},
"Copy PID": {
"Copy PID": "複製 PID"
},
@@ -932,6 +947,18 @@
"Current: %1": {
"Current: %1": "目前:%1"
},
"Cursor Config Not Configured": {
"Cursor Config Not Configured": ""
},
"Cursor Include Missing": {
"Cursor Include Missing": ""
},
"Cursor Size": {
"Cursor Size": ""
},
"Cursor Theme": {
"Cursor Theme": ""
},
"Custom": {
"Custom": "自訂"
},
@@ -1772,9 +1799,24 @@
"Hide Delay": {
"Hide Delay": "隱藏延遲"
},
"Hide When Typing": {
"Hide When Typing": ""
},
"Hide When Windows Open": {
"Hide When Windows Open": "視窗開啟時隱藏"
},
"Hide cursor after inactivity (0 = disabled)": {
"Hide cursor after inactivity (0 = disabled)": ""
},
"Hide cursor when pressing keyboard keys": {
"Hide cursor when pressing keyboard keys": ""
},
"Hide cursor when using touch input": {
"Hide cursor when using touch input": ""
},
"Hide on Touch": {
"Hide on Touch": ""
},
"Hide the dock when not in use and reveal it when hovering near the dock area": {
"Hide the dock when not in use and reveal it when hovering near the dock area": "不使用時隱藏 Dock並在 Dock 區域附近懸停時顯示 Dock"
},
@@ -1937,6 +1979,15 @@
"Key": {
"Key": "按鍵"
},
"Keybind Sources": {
"Keybind Sources": ""
},
"Keybinds Search Settings": {
"Keybinds Search Settings": ""
},
"Keybinds shown alongside regular search results": {
"Keybinds shown alongside regular search results": ""
},
"Keyboard Layout Name": {
"Keyboard Layout Name": "鍵盤布局名稱"
},
@@ -2255,6 +2306,12 @@
"Mount": {
"Mount": "掛載"
},
"Mouse pointer appearance": {
"Mouse pointer appearance": ""
},
"Mouse pointer size in pixels": {
"Mouse pointer size in pixels": ""
},
"Move Widget": {
"Move Widget": "移動小工具"
},
@@ -3038,6 +3095,9 @@
"Scrolling": {
"Scrolling": "滾動"
},
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": {
"Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.": ""
},
"Search file contents": {
"Search file contents": "搜尋檔案內容"
},
@@ -3050,6 +3110,9 @@
"Search keybinds...": {
"Search keybinds...": "搜尋按鍵綁定..."
},
"Search keyboard shortcuts from your compositor and applications": {
"Search keyboard shortcuts from your compositor and applications": ""
},
"Search plugins...": {
"Search plugins...": "搜尋插件..."
},
@@ -3092,6 +3155,9 @@
"Select an image file...": {
"Select an image file...": "選擇一張圖片..."
},
"Select at least one provider": {
"Select at least one provider": ""
},
"Select device...": {
"Select device...": "選擇裝置..."
},
@@ -3116,6 +3182,9 @@
"Select the palette algorithm used for wallpaper-based colors": {
"Select the palette algorithm used for wallpaper-based colors": "請選擇調色板演算法,以桌布的顏色為基底。"
},
"Select which keybind providers to include": {
"Select which keybind providers to include": ""
},
"Select which transitions to include in randomization": {
"Select which transitions to include in randomization": "選擇要包含在隨機中的轉換效果"
},
@@ -3293,6 +3362,9 @@
"Show on Overview": {
"Show on Overview": "顯示在概覽畫面"
},
"Show on Overview Only": {
"Show on Overview Only": ""
},
"Show on all connected displays": {
"Show on all connected displays": "在所有連接的螢幕上顯示"
},
@@ -3683,12 +3755,21 @@
"Transparency": {
"Transparency": "透明度"
},
"Trigger": {
"Trigger": ""
},
"Trigger Prefix": {
"Trigger Prefix": ""
},
"Turn off monitors after": {
"Turn off monitors after": "關閉螢幕之後"
},
"Type": {
"Type": "類型"
},
"Type this prefix to search keybinds": {
"Type this prefix to search keybinds": ""
},
"Typography": {
"Typography": "字體排版"
},
@@ -3716,6 +3797,9 @@
"Unknown Network": {
"Unknown Network": "未知網路"
},
"Unpin": {
"Unpin": ""
},
"Unpin from Dock": {
"Unpin from Dock": "取消 Dock 釘選"
},
@@ -3737,6 +3821,9 @@
"Update Plugin": {
"Update Plugin": "更新插件"
},
"Usage Tips": {
"Usage Tips": ""
},
"Use 24-hour time format instead of 12-hour AM/PM": {
"Use 24-hour time format instead of 12-hour AM/PM": "使用 24 小時時間格式,而不是 12 小時 AM/PM"
},
@@ -3791,6 +3878,9 @@
"Use sound theme from system settings": {
"Use sound theme from system settings": "使用系統設定中的音效主題"
},
"Use trigger prefix to activate": {
"Use trigger prefix to activate": ""
},
"Use%": {
"Use%": "使用%"
},
@@ -4072,6 +4162,9 @@
"author attribution": {
"by %1": "作者:%1"
},
"bar shadow settings card": {
"Shadow": ""
},
"browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "瀏覽佈景主題"
},
@@ -4105,6 +4198,9 @@
"dms/binds.kdl is now included in config.kdl": {
"dms/binds.kdl is now included in config.kdl": "dms/binds.kdl 現已包含在 config.kdl 中"
},
"dms/cursor config exists but is not included. Cursor settings won't apply.": {
"dms/cursor config exists but is not included. Cursor settings won't apply.": ""
},
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": {
"dms/outputs config exists but is not included in your compositor config. Display changes won't persist.": "dms/outputs 組態存在,但未包含在您的合成器組態中。顯示變更將不會保留。"
},
@@ -4421,6 +4517,13 @@
"settings_displays": {
"Widgets": "小工具"
},
"shadow color option": {
"Surface": "",
"Text": ""
},
"shadow intensity slider": {
"Intensity": ""
},
"source code link": {
"source": "來源"
},

View File

@@ -1283,6 +1283,20 @@
"start"
]
},
{
"section": "builtInPlugins",
"label": "DMS",
"tabIndex": 9,
"category": "Launcher",
"keywords": [
"dms",
"drawer",
"launcher",
"menu",
"start"
],
"icon": "extension"
},
{
"section": "niriOverviewOverlayEnabled",
"label": "Enable Overview Overlay",
@@ -1535,6 +1549,28 @@
"icon": "terminal",
"description": "Sync dark mode with settings portals for system-wide theme hints"
},
{
"section": "cursorHideAfterInactive",
"label": "Auto-Hide Timeout",
"tabIndex": 10,
"category": "Theme & Colors",
"keywords": [
"after",
"appearance",
"auto",
"colors",
"cursor",
"hide",
"inactive",
"inactivity",
"look",
"scheme",
"style",
"theme",
"timeout"
],
"description": "Hide cursor after inactivity (0 = disabled)"
},
{
"section": "niriLayoutBorderSize",
"label": "Border Size",
@@ -1649,6 +1685,48 @@
],
"description": "0 = square corners"
},
{
"section": "cursorSize",
"label": "Cursor Size",
"tabIndex": 10,
"category": "Theme & Colors",
"keywords": [
"appearance",
"colors",
"cursor",
"look",
"mouse",
"pixels",
"pointer",
"scheme",
"size",
"style",
"theme"
],
"description": "Mouse pointer size in pixels"
},
{
"section": "cursorTheme",
"label": "Cursor Theme",
"tabIndex": 10,
"category": "Theme & Colors",
"keywords": [
"appearance",
"colors",
"colour",
"cursor",
"look",
"mouse",
"pointer",
"scheme",
"size",
"style",
"theme"
],
"icon": "mouse",
"description": "Mouse pointer appearance",
"conditionKey": "isNiri"
},
{
"section": "modalDarkenBackground",
"label": "Darken Modal Background",
@@ -1726,6 +1804,48 @@
"theme"
]
},
{
"section": "cursorHideWhenTyping",
"label": "Hide When Typing",
"tabIndex": 10,
"category": "Theme & Colors",
"keywords": [
"appearance",
"colors",
"cursor",
"hide",
"keyboard",
"keys",
"look",
"pressing",
"scheme",
"style",
"theme",
"typing"
],
"description": "Hide cursor when pressing keyboard keys",
"conditionKey": "isNiri"
},
{
"section": "cursorHideOnTouch",
"label": "Hide on Touch",
"tabIndex": 10,
"category": "Theme & Colors",
"keywords": [
"appearance",
"colors",
"cursor",
"hide",
"input",
"look",
"scheme",
"style",
"theme",
"touch"
],
"description": "Hide cursor when using touch input",
"conditionKey": "isHyprland"
},
{
"section": "matugenTemplateHyprland",
"label": "Hyprland",

View File

@@ -398,6 +398,13 @@
"reference": "",
"comment": ""
},
{
"term": "Activation",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Active",
"translation": "",
@@ -566,6 +573,13 @@
"reference": "",
"comment": ""
},
{
"term": "Always Active",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Always Show Percentage",
"translation": "",
@@ -902,6 +916,13 @@
"reference": "",
"comment": ""
},
{
"term": "Auto-Hide Timeout",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Auto-close Niri overview when launching apps.",
"translation": "",
@@ -1700,6 +1721,13 @@
"reference": "",
"comment": ""
},
{
"term": "Click 'Setup' to create cursor config and add include to your compositor config.",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Click 'Setup' to create dms/binds.kdl and add include to config.kdl.",
"translation": "",
@@ -2183,6 +2211,13 @@
"reference": "",
"comment": ""
},
{
"term": "Copy",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Copy PID",
"translation": "",
@@ -2330,6 +2365,34 @@
"reference": "",
"comment": ""
},
{
"term": "Cursor Config Not Configured",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Cursor Include Missing",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Cursor Size",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Cursor Theme",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Custom",
"translation": "",
@@ -4374,6 +4437,13 @@
"reference": "",
"comment": ""
},
{
"term": "Hide When Typing",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Hide When Windows Open",
"translation": "",
@@ -4381,6 +4451,34 @@
"reference": "",
"comment": ""
},
{
"term": "Hide cursor after inactivity (0 = disabled)",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Hide cursor when pressing keyboard keys",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Hide cursor when using touch input",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Hide on Touch",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Hide the dock when not in use and reveal it when hovering near the dock area",
"translation": "",
@@ -4766,6 +4864,13 @@
"reference": "",
"comment": ""
},
{
"term": "Intensity",
"translation": "",
"context": "shadow intensity slider",
"reference": "",
"comment": ""
},
{
"term": "Interface:",
"translation": "",
@@ -4857,6 +4962,13 @@
"reference": "",
"comment": ""
},
{
"term": "Keybind Sources",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Keybinds",
"translation": "",
@@ -4864,6 +4976,20 @@
"reference": "",
"comment": ""
},
{
"term": "Keybinds Search Settings",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Keybinds shown alongside regular search results",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Keyboard Layout Name",
"translation": "",
@@ -5641,6 +5767,20 @@
"reference": "",
"comment": ""
},
{
"term": "Mouse pointer appearance",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Mouse pointer size in pixels",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Move Widget",
"translation": "",
@@ -6190,7 +6330,7 @@
{
"term": "Notepad",
"translation": "",
"context": "",
"context": "Notepad",
"reference": "",
"comment": ""
},
@@ -7629,6 +7769,13 @@
"reference": "",
"comment": ""
},
{
"term": "Search by key combo, description, or action name.\\n\\nDefault action copies the keybind to clipboard.\\nRight-click or press Right Arrow to pin frequently used keybinds - they'll appear at the top when not searching.",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Search file contents",
"translation": "",
@@ -7657,6 +7804,13 @@
"reference": "",
"comment": ""
},
{
"term": "Search keyboard shortcuts from your compositor and applications",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Search plugins...",
"translation": "",
@@ -7790,6 +7944,13 @@
"reference": "",
"comment": ""
},
{
"term": "Select at least one provider",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Select device...",
"translation": "",
@@ -7846,6 +8007,13 @@
"reference": "",
"comment": ""
},
{
"term": "Select which keybind providers to include",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Select which transitions to include in randomization",
"translation": "",
@@ -7923,6 +8091,13 @@
"reference": "",
"comment": ""
},
{
"term": "Shadow",
"translation": "",
"context": "bar shadow settings card",
"reference": "",
"comment": ""
},
{
"term": "Shell",
"translation": "",
@@ -8315,6 +8490,13 @@
"reference": "",
"comment": ""
},
{
"term": "Show on Overview Only",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Show on all connected displays",
"translation": "",
@@ -8724,7 +8906,7 @@
{
"term": "Surface",
"translation": "",
"context": "",
"context": "shadow color option",
"reference": "",
"comment": ""
},
@@ -8934,7 +9116,7 @@
{
"term": "Text",
"translation": "",
"context": "",
"context": "shadow color option",
"reference": "",
"comment": ""
},
@@ -9253,6 +9435,20 @@
"reference": "",
"comment": ""
},
{
"term": "Trigger",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Trigger Prefix",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Turn off monitors after",
"translation": "",
@@ -9267,6 +9463,13 @@
"reference": "",
"comment": ""
},
{
"term": "Type this prefix to search keybinds",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Typography",
"translation": "",
@@ -9358,6 +9561,13 @@
"reference": "",
"comment": ""
},
{
"term": "Unpin",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Unpin from Dock",
"translation": "",
@@ -9407,6 +9617,13 @@
"reference": "",
"comment": ""
},
{
"term": "Usage Tips",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Use 24-hour time format instead of 12-hour AM/PM",
"translation": "",
@@ -9540,6 +9757,13 @@
"reference": "",
"comment": ""
},
{
"term": "Use trigger prefix to activate",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Use%",
"translation": "",
@@ -10254,6 +10478,13 @@
"reference": "",
"comment": ""
},
{
"term": "dms/cursor config exists but is not included. Cursor settings won't apply.",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "dms/outputs config exists but is not included in your compositor config. Display changes won't persist.",
"translation": "",