1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-17 16:45:19 -04:00

Compare commits

..

96 Commits

Author SHA1 Message Date
purian23 2b7fd36322 feat: Refactor DankBar w/New granular options
- New background toggles
- New maxIcon & maxText widget sizes (global)
- Dedicated M3 padding slider
- New independent icon scale options
- Updated logic to improve performance on single & dual bar modes
2026-02-23 23:18:27 -05:00
purian23 b8014fd4df fix: Animated Image warnings 2026-02-23 23:18:02 -05:00
Lucas 07460f6e1f doctor: fix imageformats detection (#1811) 2026-02-23 19:44:51 -05:00
bbedward f7bf3b2afb keybinds: preserve scroll position of expanded item on list change
fixes #1766
2026-02-23 19:32:13 -05:00
bbedward 056f298cdf widgets: fallback when AnimatedImage probe fails to static Image 2026-02-23 19:03:14 -05:00
bbedward e83da53162 thememode: connect to loginctl PrepareForSleep event 2026-02-23 19:01:20 -05:00
purian23 9f38a47a02 dms-greeter: Update dankinstall greeter automation w/distro packages 2026-02-23 15:36:17 -05:00
bbedward 236a4d4a6d launcher: don't tie unload to visibility 2026-02-23 15:28:29 -05:00
purian23 0909471510 audio: Sync audio hide opts w/dash Output devices 2026-02-23 13:48:33 -05:00
bbedward 05eaf59c89 audio: fix cycle output, improve icon resolution for sink
fixes #1808
2026-02-23 13:21:43 -05:00
Lucas 7749613801 nix: update flake.lock (#1809) 2026-02-23 12:31:36 -05:00
bbedward e3dbaedbb4 audio: disable effects when mpris player is playing 2026-02-23 12:31:04 -05:00
bbedward 9f17ced6de launcher: implement memory for selected tab
fixes #1806
2026-02-23 10:19:31 -05:00
dms-ci[bot] de54ef871d nix: update vendorHash for go.mod changes 2026-02-23 15:04:39 +00:00
Jonas Bloch b0da45d6d0 Wifi QR code generation (requires testing) (#1794)
* fix: add mockery v2 to nix flake pkgs

* feat: add requests for generating wifi qr codes as png files in /tmp, and to delete them later. only supports NetworkManager backend for now.

* feat: add modal for sharing wifi via qr code and saving the code as png file.

* fix: uncomment QR code file deletion

* network: light refactor and cleanup for QR code generation

---------

Co-authored-by: bbedward <bbedward@gmail.com>
2026-02-23 10:02:51 -05:00
bbedward 9b2a46fa92 widgets: make AnimatedImage conditional in DankCircularImage
- Cut potential overhead of always using AnimatedImage
2026-02-23 09:51:56 -05:00
bbedward 12099d2db6 osd: disable media playback OSD by default 2026-02-23 09:25:23 -05:00
Triệu Kha 84fa75936a clipboard: fix html elements get parsed in clipboard entry (#1798)
* clipboard: fix html elements get parsed in clipboard entry

* Revert "clipboard: fix html elements get parsed in clipboard entry"

This reverts commit 52b11eeb98.

* clipboard: fix html elements get parsed in clipboard entry
2026-02-23 09:16:15 -05:00
Jonas Bloch d78d8121a1 fix(notepad): decode path URI when saving/creating a file (#1805) 2026-02-23 09:15:51 -05:00
Jonas Bloch a9a3a52872 feat: add support for animated gifs as profile pictures (#1804) 2026-02-23 09:15:26 -05:00
purian23 912e3bdfce dms-greeter: Enable greetd via dms greeter install all-in-one cmd 2026-02-22 23:26:40 -05:00
bbedward ee1b25d9e8 matugen: unconditionally run portal sync even if matugen errors 2026-02-22 22:57:51 -05:00
purian23 20ef5e2c18 dms-greeter: Enhance DMS Greeter dankinstall & packaging across distros
- Added support for Debian, Ubuntu, Fedora, Arch, and OpenSUSE on dankinstall / dms greeter install
2026-02-22 22:40:51 -05:00
bbedward 6ee419bc52 launcher: fix frecency ranking in search results
fixes #1799
2026-02-22 22:34:26 -05:00
bbedward 85b00d3c76 scripts: fix shellcheck 2026-02-22 22:13:57 -05:00
bbedward bc4ad31d48 bluetooth: expose trust/untrust on devices 2026-02-22 22:10:07 -05:00
长夜月玩Fedora 71aad8ee32 Add support for 'evernight' distribution in Fedora (#1786) 2026-02-22 22:02:37 -05:00
Triệu Kha 8bb8231559 Fix dock visible when theres no app (#1797)
* clipboard: improve image thumbnail
- thumbnail image is now bigger
- circular mask has been replaced with rounded rectangular mask

* dock: fix dock still visible when there's no app
2026-02-22 21:56:33 -05:00
purian23 3cf9caae89 feat: DMS Greeter packaging for Debian/OpenSUSE on OBS 2026-02-22 15:44:42 -05:00
Lucas f983c67135 zen: add more commands to detection (#1792) 2026-02-21 14:58:36 -05:00
bbedward f2aef5b93f Merge branch 'master' of github.com:AvengeMedia/DankMaterialShell 2026-02-21 10:43:42 -05:00
purian23 46d4288969 ipc: Fix DankDash Wallpaper call 2026-02-21 00:52:08 -05:00
purian23 65516e872f theme: Fix Light/Dark mode portal sync 2026-02-21 00:31:26 -05:00
Connor Welsh 171329246c distro: add cups-pk-helper as suggested dependency (#1670) 2026-02-20 14:26:59 -05:00
bbedward b2bee699e0 window rules: default to fixed for width/height
part of #1774
2026-02-20 13:51:03 -05:00
purian23 95c66b4d67 ubuntu: Fix dms-git Go versioning to restore builds 2026-02-20 13:12:12 -05:00
bbedward babc8feb2b clipboard: fix memory leak from unbounded offer maps and unguarded file reads 2026-02-20 11:39:41 -05:00
bbedward 2f445c546a keybinds/niri: fix quote preservation 2026-02-20 11:37:02 -05:00
bbedward a0283b3e3e dankdash: fix widgets across different bar section
fixes #1764s
2026-02-20 11:28:56 -05:00
bbedward 61bd156fb0 core/screenshot: light cleanups 2026-02-20 11:16:53 -05:00
Patrick Fischer 8ad0cf8e5f screensaver: emit ActiveChanged on lock/unlock (#1761) 2026-02-20 11:05:30 -05:00
Triệu Kha ecd6d70da6 clipboard: improve image thumbnail (#1759)
- thumbnail image is now bigger
- circular mask has been replaced with rounded rectangular mask
2026-02-20 11:02:20 -05:00
purian23 359617d927 template: Default install method 2026-02-20 10:15:20 -05:00
purian23 38c286329a issues: Template fix 2026-02-20 09:57:58 -05:00
purian23 401b4095cc templates: Fix GitHub issue labels 2026-02-20 09:44:54 -05:00
shorinkiwata 06ab1a8ef0 feat(distros): allow CatOS to run DMS installer (#1768)
- This PR adds support for **CatOS**
- CatOS is fully compatible with Arch Linux
2026-02-20 09:28:42 -05:00
purian23 726fb8b015 templates: Update DMS issue formats 2026-02-20 09:26:20 -05:00
bbedward b3b5c7a59f running apps: fix ordering on niri 2026-02-19 20:46:14 -05:00
purian23 d18f934978 fedora: Update trial run of bundled go deps 2026-02-19 19:21:01 -05:00
bbedward e67f1f79bc launcher/dsearch: support for folder search and extra filters 2026-02-19 18:19:46 -05:00
purian23 e931829411 distros: Fix Go versioning on dms-git builds 2026-02-19 17:20:22 -05:00
bbedward db8ebd606c launcher: fix premature exit of file search
fixes #1749
2026-02-19 16:46:50 -05:00
Jonas Bloch 072a358a94 Search keybinds fixes (#1748)
* fix: close keybind cheatsheet on escape press

* feat: match all space separated words in keybind cheatsheet search
2026-02-19 16:26:45 -05:00
bbedward 6ceb1b150c audio: fix hide device not working 2026-02-19 16:24:28 -05:00
bbedward a4e03e1877 i18n: term sync 2026-02-19 13:32:06 -05:00
Youseffo13 02b3e4277b Added missing i18n strings and changed reset button (#1746)
* Update it.json

* Enhance SettingsSliderRow: add resetText property and update reset button styling

* added i18n strings

* adjust reset button width to be dynamic based on content size

* added i18n strings

* Update template.json

* reverted changes

* Update it.json

* Update template.json
2026-02-19 13:31:24 -05:00
bbedward 37daf801e6 dankbar: remove behaviors from monitoring widgets 2026-02-19 11:49:55 -05:00
bbedward 68d9f7eeb2 dgop: round computed values to match display format 2026-02-19 11:02:56 -05:00
bbedward 526e2420ca flake: fix dev flake for go 1.25 and ashellchheck 2026-02-19 09:30:05 -05:00
bbedward a9cc58fc28 hyprland: add serial to output model generator 2026-02-19 09:22:10 -05:00
bbedward 77889ce1c6 dock: fix context menu styling
fixes #1742
2026-02-19 09:15:26 -05:00
bbedward 549073119e dock: fix transparency setting
fixes #1739
2026-02-19 09:11:30 -05:00
bbedward 5c5af5795f launcher: improve perf of settings search 2026-02-19 08:46:19 -05:00
bbedward 68e10934e4 launcher: always heuristic lookup cached entries 2026-02-18 23:47:00 -05:00
bbedward c67bb1444a launcher v2: always heuristicLookup tab actions 2026-02-18 19:07:03 -05:00
bbedward 07389a152e i18n: term updates 2026-02-18 18:34:41 -05:00
bbedward e562e21555 system tray: fix to take up 0 space when empty 2026-02-18 18:31:33 -05:00
Youseffo13 86dfe7dd3f Added Missing i18n strings (#1729)
* inverted dock visibility and position option

* added missing I18n strings

* added missing i18n strings

* added i18n strings

* Added missing i18n strings

* updated translations

* Update it.json
2026-02-18 18:28:57 -05:00
bbedward ac0a8f3449 widgets: add openWith/toggleWith modes for dankbar widgets 2026-02-18 16:23:42 -05:00
bbedward 8e4a63db67 keybinds: fix escape in keybinds modal 2026-02-18 14:57:34 -05:00
bbedward c02c63806f launcher v2: remove calc
cc: enhancements for plugins to size details
2026-02-18 14:48:20 -05:00
beluch-dev 42e5d7f6e9 fix: correct parameter name in Hyprland windowrule (no_initial_focus) (#1726)
##Description
This PR corrects the parameter name to match new Hyprland standard.

## Changes
-Before: 'noinitialfocus'
-After: 'no_initial_focus'
2026-02-18 13:41:12 -05:00
bbedward d8cf1af422 plugins: fix settings focus loss 2026-02-18 13:36:23 -05:00
Evgeny Zemtsov 9723661c80 handle recycled server object IDs for workspace/group handles (#1725)
When switching tabs rapidly or closing multiple tabs, the taskbar shows
"ghost" workspaces — entries with no name, no coordinates, and no active
state. The ghosts appear at positions where workspaces were removed and
then recreated by the compositor.

When a compositor removes a workspace (sends `removed` event) and the
client calls Destroy(), the proxy is marked as zombie but stays in the
Context.objects map. For server-created objects (IDs >= 0xFF000000), the
server never sends `delete_id`, so the zombie proxy persists indefinitely.

When the compositor later creates a new workspace that gets a recycled
server object ID, GetProxy() returns the old zombie proxy. The dispatch
loop in GetDispatch() checks IsZombie() and silently drops ALL events
for zombie proxies — including property events (name, id, coordinates,
state, capabilities) intended for the new workspace. This causes the
ghost workspaces with empty properties in the UI.

Fix: check IsZombie() when handling `workspace` and `workspace_group`
events that carry a `new_id` argument. If the existing proxy is a
zombie, treat it as absent and create a fresh proxy via
registerServerProxy(), which replaces the zombie in the map. Subsequent
property events are then dispatched to the live proxy.
2026-02-18 12:51:17 -05:00
bbedward 81cba7ad97 popout: decouple shadow from content layer 2026-02-18 10:45:45 -05:00
bbedward c23f58de40 popout: disable layer after animation 2026-02-18 10:34:07 -05:00
purian23 2cf67ca7da notifications: Maintain shadow during expansion 2026-02-18 10:27:57 -05:00
purian23 392bd850ea notifications: Update initial popup height surfaces 2026-02-18 10:16:11 -05:00
bbedward 3b2ad9d1bd running apps: fix scroll events being propagated
fixes #1724
2026-02-18 10:12:15 -05:00
bbedward 27b7474180 matugen: make v4 detection more resilient 2026-02-18 09:55:45 -05:00
bbedward 63948d728e process list: fix scaling with fonts
fixes #1721
2026-02-18 09:55:45 -05:00
purian23 d219d3b873 dankinstall: Fix Debian ARM64 detection 2026-02-18 09:41:36 -05:00
bbedward 93ab290bc1 matugen: detect emacs directory
fixes #1720
2026-02-18 09:23:13 -05:00
bbedward 7335c5d79a osd: optimize bindings 2026-02-18 09:04:39 -05:00
bbedward 242ead722a screenshot: adjust cursor CLI option to be more explicit 2026-02-17 22:28:19 -05:00
bbedward 8a6d9696a8 settings: workaround crash 2026-02-17 22:20:01 -05:00
purian23 896b7ea242 notifications: Tweak animation scale & settings 2026-02-17 22:05:19 -05:00
bbedward 0c7f4c7828 settings: guard internal writes from watcher 2026-02-17 22:03:36 -05:00
bbedward 3d35af2a87 cc: fix plugin reloading in bar position changes 2026-02-17 17:24:22 -05:00
bbedward fed3c36f84 popout: anchor height changing popout surfaces to top and bottom 2026-02-17 17:18:07 -05:00
bbedward 414d81aa40 workspaces: fix named workspace icons 2026-02-17 16:02:13 -05:00
bbedward d548803769 dankinstall: no_anim on dms layers 2026-02-17 15:32:08 -05:00
bbedward 1180258394 system updater: fix hide no update option 2026-02-17 13:53:17 -05:00
bbedward 48a566a24b launcher: fix kb navigation not always showing last delegate in view 2026-02-17 13:07:43 -05:00
bbedward 3bc5d1df81 doctor: add qt6-imageformats check 2026-02-17 12:58:09 -05:00
bbedward c7222e2e86 bump version, codename, disable changelog 2026-02-17 12:02:36 -05:00
78 changed files with 2223 additions and 2902 deletions
+4 -4
View File
@@ -7,7 +7,7 @@ body:
attributes: attributes:
value: | value: |
## DankMaterialShell Bug Report ## DankMaterialShell Bug Report
Limit your report to one issue per submission unless similarly related Limit your report to one issue per submission unless closely related
- type: dropdown - type: dropdown
id: compositor id: compositor
attributes: attributes:
@@ -53,9 +53,9 @@ body:
validations: validations:
required: true required: true
- type: dropdown - type: dropdown
id: original_installation_method id: original_installation_method_different
attributes: attributes:
label: Was this your original Installation method? label: Was your original Installation method different?
options: options:
- "Yes" - "Yes"
- No (specify below) - No (specify below)
@@ -73,7 +73,7 @@ body:
id: dms_doctor id: dms_doctor
attributes: attributes:
label: dms doctor -vC label: dms doctor -vC
description: Output of `dms doctor -vC` command — paste between the details tags below to keep it collapsed in the issue description: Output of `dms doctor -vC` command — paste between the lines below to keep it collapsed in the issue
placeholder: Paste the output of `dms doctor -vC` here placeholder: Paste the output of `dms doctor -vC` here
value: | value: |
<details> <details>
-1
View File
@@ -525,6 +525,5 @@ func getCommonCommands() []*cobra.Command {
doctorCmd, doctorCmd,
configCmd, configCmd,
dlCmd, dlCmd,
randrCmd,
} }
} }
+6 -23
View File
@@ -3,9 +3,7 @@ package main
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"os"
"time" "time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log" "github.com/AvengeMedia/DankMaterialShell/core/internal/log"
@@ -97,11 +95,7 @@ func buildMatugenOptions(cmd *cobra.Command) matugen.Options {
func runMatugenGenerate(cmd *cobra.Command, args []string) { func runMatugenGenerate(cmd *cobra.Command, args []string) {
opts := buildMatugenOptions(cmd) opts := buildMatugenOptions(cmd)
err := matugen.Run(opts) if err := matugen.Run(opts); err != nil {
switch {
case errors.Is(err, matugen.ErrNoChanges):
os.Exit(2)
case err != nil:
log.Fatalf("Theme generation failed: %v", err) log.Fatalf("Theme generation failed: %v", err)
} }
} }
@@ -135,11 +129,7 @@ func runMatugenQueue(cmd *cobra.Command, args []string) {
if !wait { if !wait {
if err := sendServerRequestFireAndForget(request); err != nil { if err := sendServerRequestFireAndForget(request); err != nil {
log.Info("Server unavailable, running synchronously") log.Info("Server unavailable, running synchronously")
err := matugen.Run(opts) if err := matugen.Run(opts); err != nil {
switch {
case errors.Is(err, matugen.ErrNoChanges):
os.Exit(2)
case err != nil:
log.Fatalf("Theme generation failed: %v", err) log.Fatalf("Theme generation failed: %v", err)
} }
return return
@@ -156,15 +146,11 @@ func runMatugenQueue(cmd *cobra.Command, args []string) {
resp, ok := tryServerRequest(request) resp, ok := tryServerRequest(request)
if !ok { if !ok {
log.Info("Server unavailable, running synchronously") log.Info("Server unavailable, running synchronously")
err := matugen.Run(opts) if err := matugen.Run(opts); err != nil {
switch {
case errors.Is(err, matugen.ErrNoChanges):
resultCh <- matugen.ErrNoChanges
case err != nil:
resultCh <- err resultCh <- err
default: return
resultCh <- nil
} }
resultCh <- nil
return return
} }
if resp.Error != "" { if resp.Error != "" {
@@ -176,10 +162,7 @@ func runMatugenQueue(cmd *cobra.Command, args []string) {
select { select {
case err := <-resultCh: case err := <-resultCh:
switch { if err != nil {
case errors.Is(err, matugen.ErrNoChanges):
os.Exit(2)
case err != nil:
log.Fatalf("Theme generation failed: %v", err) log.Fatalf("Theme generation failed: %v", err)
} }
fmt.Println("Theme generation completed") fmt.Println("Theme generation completed")
-58
View File
@@ -1,58 +0,0 @@
package main
import (
"encoding/json"
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/spf13/cobra"
)
var randrCmd = &cobra.Command{
Use: "randr",
Short: "Query output display information",
Long: "Query Wayland compositor for output names, scales, resolutions and refresh rates via zwlr-output-management",
Run: runRandr,
}
func init() {
randrCmd.Flags().Bool("json", false, "Output in JSON format")
}
type randrJSON struct {
Outputs []randrOutput `json:"outputs"`
}
func runRandr(cmd *cobra.Command, args []string) {
outputs, err := queryRandr()
if err != nil {
log.Fatalf("%v", err)
}
jsonFlag, _ := cmd.Flags().GetBool("json")
if jsonFlag {
data, err := json.Marshal(randrJSON{Outputs: outputs})
if err != nil {
log.Fatalf("failed to marshal JSON: %v", err)
}
fmt.Println(string(data))
return
}
for i, out := range outputs {
if i > 0 {
fmt.Println()
}
status := "enabled"
if !out.Enabled {
status = "disabled"
}
fmt.Printf("%s (%s)\n", out.Name, status)
fmt.Printf(" Scale: %.4g\n", out.Scale)
fmt.Printf(" Resolution: %dx%d\n", out.Width, out.Height)
if out.Refresh > 0 {
fmt.Printf(" Refresh: %.2f Hz\n", float64(out.Refresh)/1000.0)
}
}
}
-172
View File
@@ -1,172 +0,0 @@
package main
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wlr_output_management"
wlclient "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
)
type randrOutput struct {
Name string `json:"name"`
Scale float64 `json:"scale"`
Width int32 `json:"width"`
Height int32 `json:"height"`
Refresh int32 `json:"refresh"`
Enabled bool `json:"enabled"`
}
type randrHead struct {
name string
enabled bool
scale float64
currentModeID uint32
modeIDs []uint32
}
type randrMode struct {
width int32
height int32
refresh int32
}
type randrClient struct {
display *wlclient.Display
ctx *wlclient.Context
manager *wlr_output_management.ZwlrOutputManagerV1
heads map[uint32]*randrHead
modes map[uint32]*randrMode
done bool
err error
}
func queryRandr() ([]randrOutput, error) {
display, err := wlclient.Connect("")
if err != nil {
return nil, fmt.Errorf("failed to connect to Wayland: %w", err)
}
c := &randrClient{
display: display,
ctx: display.Context(),
heads: make(map[uint32]*randrHead),
modes: make(map[uint32]*randrMode),
}
defer c.ctx.Close()
registry, err := display.GetRegistry()
if err != nil {
return nil, fmt.Errorf("failed to get registry: %w", err)
}
registry.SetGlobalHandler(func(e wlclient.RegistryGlobalEvent) {
if e.Interface == wlr_output_management.ZwlrOutputManagerV1InterfaceName {
mgr := wlr_output_management.NewZwlrOutputManagerV1(c.ctx)
version := min(e.Version, 4)
mgr.SetHeadHandler(func(e wlr_output_management.ZwlrOutputManagerV1HeadEvent) {
c.handleHead(e)
})
mgr.SetDoneHandler(func(e wlr_output_management.ZwlrOutputManagerV1DoneEvent) {
c.done = true
})
if err := registry.Bind(e.Name, e.Interface, version, mgr); err == nil {
c.manager = mgr
}
}
})
// First roundtrip: discover globals and bind manager
syncCallback, err := display.Sync()
if err != nil {
return nil, fmt.Errorf("failed to sync display: %w", err)
}
syncCallback.SetDoneHandler(func(e wlclient.CallbackDoneEvent) {
if c.manager == nil {
c.err = fmt.Errorf("zwlr_output_manager_v1 protocol not supported by compositor")
c.done = true
}
// Otherwise wait for manager's DoneHandler
})
for !c.done {
if err := c.ctx.Dispatch(); err != nil {
return nil, fmt.Errorf("dispatch error: %w", err)
}
}
if c.err != nil {
return nil, c.err
}
return c.buildOutputs(), nil
}
func (c *randrClient) handleHead(e wlr_output_management.ZwlrOutputManagerV1HeadEvent) {
handle := e.Head
headID := handle.ID()
head := &randrHead{
modeIDs: make([]uint32, 0),
}
c.heads[headID] = head
handle.SetNameHandler(func(e wlr_output_management.ZwlrOutputHeadV1NameEvent) {
head.name = e.Name
})
handle.SetEnabledHandler(func(e wlr_output_management.ZwlrOutputHeadV1EnabledEvent) {
head.enabled = e.Enabled != 0
})
handle.SetScaleHandler(func(e wlr_output_management.ZwlrOutputHeadV1ScaleEvent) {
head.scale = e.Scale
})
handle.SetCurrentModeHandler(func(e wlr_output_management.ZwlrOutputHeadV1CurrentModeEvent) {
head.currentModeID = e.Mode.ID()
})
handle.SetModeHandler(func(e wlr_output_management.ZwlrOutputHeadV1ModeEvent) {
modeHandle := e.Mode
modeID := modeHandle.ID()
head.modeIDs = append(head.modeIDs, modeID)
mode := &randrMode{}
c.modes[modeID] = mode
modeHandle.SetSizeHandler(func(e wlr_output_management.ZwlrOutputModeV1SizeEvent) {
mode.width = e.Width
mode.height = e.Height
})
modeHandle.SetRefreshHandler(func(e wlr_output_management.ZwlrOutputModeV1RefreshEvent) {
mode.refresh = e.Refresh
})
})
}
func (c *randrClient) buildOutputs() []randrOutput {
outputs := make([]randrOutput, 0, len(c.heads))
for _, head := range c.heads {
out := randrOutput{
Name: head.name,
Scale: head.scale,
Enabled: head.enabled,
}
if mode, ok := c.modes[head.currentModeID]; ok {
out.Width = mode.width
out.Height = mode.height
out.Refresh = mode.refresh
}
outputs = append(outputs, out)
}
return outputs
}
+6
View File
@@ -16,6 +16,8 @@ require (
github.com/sblinch/kdl-go v0.0.0-20260121213736-8b7053306ca6 github.com/sblinch/kdl-go v0.0.0-20260121213736-8b7053306ca6
github.com/spf13/cobra v1.10.2 github.com/spf13/cobra v1.10.2
github.com/stretchr/testify v1.11.1 github.com/stretchr/testify v1.11.1
github.com/yeqown/go-qrcode/v2 v2.2.5
github.com/yeqown/go-qrcode/writer/standard v1.3.0
github.com/yuin/goldmark v1.7.16 github.com/yuin/goldmark v1.7.16
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
go.etcd.io/bbolt v1.4.3 go.etcd.io/bbolt v1.4.3
@@ -32,15 +34,19 @@ require (
github.com/cyphar/filepath-securejoin v0.6.1 // indirect github.com/cyphar/filepath-securejoin v0.6.1 // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/emirpasic/gods v1.18.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect
github.com/fogleman/gg v1.3.0 // indirect
github.com/go-git/gcfg/v2 v2.0.2 // indirect github.com/go-git/gcfg/v2 v2.0.2 // indirect
github.com/go-git/go-billy/v6 v6.0.0-20260209124918-37866f83c2d3 // indirect github.com/go-git/go-billy/v6 v6.0.0-20260209124918-37866f83c2d3 // indirect
github.com/go-logfmt/logfmt v0.6.1 // indirect github.com/go-logfmt/logfmt v0.6.1 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/kevinburke/ssh_config v1.6.0 // indirect github.com/kevinburke/ssh_config v1.6.0 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/pjbgf/sha1cd v0.5.0 // indirect github.com/pjbgf/sha1cd v0.5.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sergi/go-diff v1.4.0 // indirect github.com/sergi/go-diff v1.4.0 // indirect
github.com/stretchr/objx v0.5.3 // indirect github.com/stretchr/objx v0.5.3 // indirect
github.com/yeqown/reedsolomon v1.0.0 // indirect
golang.org/x/crypto v0.48.0 // indirect golang.org/x/crypto v0.48.0 // indirect
golang.org/x/net v0.50.0 // indirect golang.org/x/net v0.50.0 // indirect
) )
+12
View File
@@ -58,6 +58,8 @@ github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
@@ -75,6 +77,8 @@ github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= 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/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= 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/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -115,6 +119,8 @@ github.com/pilebones/go-udev v0.9.1 h1:uN72M1C1fgzhsVmBGEM8w9RD1JY4iVsPZpr+Z6rb3
github.com/pilebones/go-udev v0.9.1/go.mod h1:Bgcl07crebF3JSeS4+nuaRvhWFdCeFoBhXXeAp93XNo= github.com/pilebones/go-udev v0.9.1/go.mod h1:Bgcl07crebF3JSeS4+nuaRvhWFdCeFoBhXXeAp93XNo=
github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0=
github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
@@ -142,6 +148,12 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
github.com/yeqown/go-qrcode/v2 v2.2.5 h1:HCOe2bSjkhZyYoyyNaXNzh4DJZll6inVJQQw+8228Zk=
github.com/yeqown/go-qrcode/v2 v2.2.5/go.mod h1:uHpt9CM0V1HeXLz+Wg5MN50/sI/fQhfkZlOM+cOTHxw=
github.com/yeqown/go-qrcode/writer/standard v1.3.0 h1:chdyhEfRtUPgQtuPeaWVGQ/TQx4rE1PqeoW3U+53t34=
github.com/yeqown/go-qrcode/writer/standard v1.3.0/go.mod h1:O4MbzsotGCvy8upYPCR91j81dr5XLT7heuljcNXW+oQ=
github.com/yeqown/reedsolomon v1.0.0 h1:x1h/Ej/uJnNu8jaX7GLHBWmZKCAWjEJTetkqaabr4B0=
github.com/yeqown/reedsolomon v1.0.0/go.mod h1:P76zpcn2TCuL0ul1Fso373qHRc69LKwAw/Iy6g1WiiM=
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE= github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE=
github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=
+15 -30
View File
@@ -1,9 +1,7 @@
package matugen package matugen
import ( import (
"bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"math" "math"
"os" "os"
@@ -21,8 +19,6 @@ import (
"github.com/lucasb-eyer/go-colorful" "github.com/lucasb-eyer/go-colorful"
) )
var ErrNoChanges = errors.New("no color changes")
type ColorMode string type ColorMode string
const ( const (
@@ -164,45 +160,39 @@ func Run(opts Options) error {
log.Infof("Building theme: %s %s (%s)", opts.Kind, opts.Value, opts.Mode) log.Infof("Building theme: %s %s (%s)", opts.Kind, opts.Value, opts.Mode)
changed, buildErr := buildOnce(&opts) buildErr := buildOnce(&opts)
if buildErr != nil {
return buildErr
}
if !changed {
log.Info("No color changes detected, skipping refresh")
return ErrNoChanges
}
if opts.SyncModeWithPortal { if opts.SyncModeWithPortal {
syncColorScheme(opts.Mode) syncColorScheme(opts.Mode)
} }
if buildErr != nil {
return buildErr
}
log.Info("Done") log.Info("Done")
return nil return nil
} }
func buildOnce(opts *Options) (bool, error) { func buildOnce(opts *Options) error {
cfgFile, err := os.CreateTemp("", "matugen-config-*.toml") cfgFile, err := os.CreateTemp("", "matugen-config-*.toml")
if err != nil { if err != nil {
return false, fmt.Errorf("failed to create temp config: %w", err) return fmt.Errorf("failed to create temp config: %w", err)
} }
defer os.Remove(cfgFile.Name()) defer os.Remove(cfgFile.Name())
defer cfgFile.Close() defer cfgFile.Close()
tmpDir, err := os.MkdirTemp("", "matugen-templates-*") tmpDir, err := os.MkdirTemp("", "matugen-templates-*")
if err != nil { if err != nil {
return false, fmt.Errorf("failed to create temp dir: %w", err) return fmt.Errorf("failed to create temp dir: %w", err)
} }
defer os.RemoveAll(tmpDir) defer os.RemoveAll(tmpDir)
if err := buildMergedConfig(opts, cfgFile, tmpDir); err != nil { if err := buildMergedConfig(opts, cfgFile, tmpDir); err != nil {
return false, fmt.Errorf("failed to build config: %w", err) return fmt.Errorf("failed to build config: %w", err)
} }
cfgFile.Close() cfgFile.Close()
oldColors, _ := os.ReadFile(opts.ColorsOutput())
var primaryDark, primaryLight, surface string var primaryDark, primaryLight, surface string
var dank16JSON string var dank16JSON string
var importArgs []string var importArgs []string
@@ -214,7 +204,7 @@ func buildOnce(opts *Options) (bool, error) {
surface = extractNestedColor(opts.StockColors, "surface", "dark") surface = extractNestedColor(opts.StockColors, "surface", "dark")
if primaryDark == "" { if primaryDark == "" {
return false, fmt.Errorf("failed to extract primary dark from stock colors") return fmt.Errorf("failed to extract primary dark from stock colors")
} }
if primaryLight == "" { if primaryLight == "" {
primaryLight = primaryDark primaryLight = primaryDark
@@ -228,14 +218,14 @@ func buildOnce(opts *Options) (bool, error) {
args := []string{"color", "hex", primaryDark, "-m", string(opts.Mode), "-t", opts.MatugenType, "-c", cfgFile.Name()} args := []string{"color", "hex", primaryDark, "-m", string(opts.Mode), "-t", opts.MatugenType, "-c", cfgFile.Name()}
args = append(args, importArgs...) args = append(args, importArgs...)
if err := runMatugen(args); err != nil { if err := runMatugen(args); err != nil {
return false, err return err
} }
} else { } else {
log.Infof("Using dynamic theme from %s: %s", opts.Kind, opts.Value) log.Infof("Using dynamic theme from %s: %s", opts.Kind, opts.Value)
matJSON, err := runMatugenDryRun(opts) matJSON, err := runMatugenDryRun(opts)
if err != nil { if err != nil {
return false, fmt.Errorf("matugen dry-run failed: %w", err) return fmt.Errorf("matugen dry-run failed: %w", err)
} }
primaryDark = extractMatugenColor(matJSON, "primary", "dark") primaryDark = extractMatugenColor(matJSON, "primary", "dark")
@@ -243,7 +233,7 @@ func buildOnce(opts *Options) (bool, error) {
surface = extractMatugenColor(matJSON, "surface", "dark") surface = extractMatugenColor(matJSON, "surface", "dark")
if primaryDark == "" { if primaryDark == "" {
return false, fmt.Errorf("failed to extract primary color") return fmt.Errorf("failed to extract primary color")
} }
if primaryLight == "" { if primaryLight == "" {
primaryLight = primaryDark primaryLight = primaryDark
@@ -264,15 +254,10 @@ func buildOnce(opts *Options) (bool, error) {
args = append(args, "-m", string(opts.Mode), "-t", opts.MatugenType, "-c", cfgFile.Name()) args = append(args, "-m", string(opts.Mode), "-t", opts.MatugenType, "-c", cfgFile.Name())
args = append(args, importArgs...) args = append(args, importArgs...)
if err := runMatugen(args); err != nil { if err := runMatugen(args); err != nil {
return false, err return err
} }
} }
newColors, _ := os.ReadFile(opts.ColorsOutput())
if bytes.Equal(oldColors, newColors) && len(oldColors) > 0 {
return false, nil
}
if isDMSGTKActive(opts.ConfigDir) { if isDMSGTKActive(opts.ConfigDir) {
switch opts.Mode { switch opts.Mode {
case ColorModeLight: case ColorModeLight:
@@ -290,7 +275,7 @@ func buildOnce(opts *Options) (bool, error) {
signalTerminals(opts) signalTerminals(opts)
return true, nil return nil
} }
func buildMergedConfig(opts *Options, cfgFile *os.File, tmpDir string) error { func buildMergedConfig(opts *Options, cfgFile *os.File, tmpDir string) error {
+3 -7
View File
@@ -2,7 +2,6 @@ package matugen
import ( import (
"context" "context"
"errors"
"sync" "sync"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log" "github.com/AvengeMedia/DankMaterialShell/core/internal/log"
@@ -94,13 +93,10 @@ func (q *Queue) runWorker() {
err := Run(job.Options) err := Run(job.Options)
var result Result var result Result
switch { if err != nil {
case err == nil:
result = Result{Success: true}
case errors.Is(err, ErrNoChanges):
result = Result{Success: true}
default:
result = Result{Success: false, Error: err} result = Result{Success: false, Error: err}
} else {
result = Result{Success: true}
} }
q.finishJob(result) q.finishJob(result)
@@ -1062,6 +1062,62 @@ func (_c *MockBackend_GetWiFiNetworkDetails_Call) RunAndReturn(run func(string)
return _c return _c
} }
// GetWiFiQRCodeContent provides a mock function with given fields: ssid
func (_m *MockBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
ret := _m.Called(ssid)
if len(ret) == 0 {
panic("no return value specified for GetWiFiQRCodeContent")
}
var r0 string
var r1 error
if rf, ok := ret.Get(0).(func(string) (string, error)); ok {
return rf(ssid)
}
if rf, ok := ret.Get(0).(func(string) string); ok {
r0 = rf(ssid)
} else {
r0 = ret.Get(0).(string)
}
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(ssid)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// MockBackend_GetWiFiQRCodeContent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetWiFiQRCodeContent'
type MockBackend_GetWiFiQRCodeContent_Call struct {
*mock.Call
}
// GetWiFiQRCodeContent is a helper method to define mock.On call
// - ssid string
func (_e *MockBackend_Expecter) GetWiFiQRCodeContent(ssid interface{}) *MockBackend_GetWiFiQRCodeContent_Call {
return &MockBackend_GetWiFiQRCodeContent_Call{Call: _e.mock.On("GetWiFiQRCodeContent", ssid)}
}
func (_c *MockBackend_GetWiFiQRCodeContent_Call) Run(run func(ssid string)) *MockBackend_GetWiFiQRCodeContent_Call {
_c.Call.Run(func(args mock.Arguments) {
run(args[0].(string))
})
return _c
}
func (_c *MockBackend_GetWiFiQRCodeContent_Call) Return(_a0 string, _a1 error) *MockBackend_GetWiFiQRCodeContent_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockBackend_GetWiFiQRCodeContent_Call) RunAndReturn(run func(string) (string, error)) *MockBackend_GetWiFiQRCodeContent_Call {
_c.Call.Return(run)
return _c
}
// GetWiredConnections provides a mock function with no fields // GetWiredConnections provides a mock function with no fields
func (_m *MockBackend) GetWiredConnections() ([]network.WiredConnection, error) { func (_m *MockBackend) GetWiredConnections() ([]network.WiredConnection, error) {
ret := _m.Called() ret := _m.Called()
+1
View File
@@ -10,6 +10,7 @@ type Backend interface {
ScanWiFi() error ScanWiFi() error
ScanWiFiDevice(device string) error ScanWiFiDevice(device string) error
GetWiFiNetworkDetails(ssid string) (*NetworkInfoResponse, error) GetWiFiNetworkDetails(ssid string) (*NetworkInfoResponse, error)
GetWiFiQRCodeContent(ssid string) (string, error)
GetWiFiDevices() []WiFiDevice GetWiFiDevices() []WiFiDevice
ConnectWiFi(req ConnectionRequest) error ConnectWiFi(req ConnectionRequest) error
@@ -111,6 +111,10 @@ func (b *HybridIwdNetworkdBackend) GetWiFiNetworkDetails(ssid string) (*NetworkI
return b.wifi.GetWiFiNetworkDetails(ssid) return b.wifi.GetWiFiNetworkDetails(ssid)
} }
func (b *HybridIwdNetworkdBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
return b.wifi.GetWiFiQRCodeContent(ssid)
}
func (b *HybridIwdNetworkdBackend) ConnectWiFi(req ConnectionRequest) error { func (b *HybridIwdNetworkdBackend) ConnectWiFi(req ConnectionRequest) error {
if err := b.wifi.ConnectWiFi(req); err != nil { if err := b.wifi.ConnectWiFi(req); err != nil {
return err return err
@@ -1,6 +1,9 @@
package network package network
import "fmt" import (
"fmt"
"os"
)
func (b *IWDBackend) GetWiredConnections() ([]WiredConnection, error) { func (b *IWDBackend) GetWiredConnections() ([]WiredConnection, error) {
return nil, fmt.Errorf("wired connections not supported by iwd") return nil, fmt.Errorf("wired connections not supported by iwd")
@@ -112,3 +115,19 @@ func (b *IWDBackend) getWiFiDevicesLocked() []WiFiDevice {
Networks: b.state.WiFiNetworks, Networks: b.state.WiFiNetworks,
}} }}
} }
func (b *IWDBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
path := iwdConfigPath(ssid)
data, err := os.ReadFile(path)
if err != nil {
return "", fmt.Errorf("no saved iwd config for `%s`: %w", ssid, err)
}
passphrase, err := parseIWDPassphrase(string(data))
if err != nil {
return "", fmt.Errorf("failed to read passphrase for `%s`: %w", ssid, err)
}
return FormatWiFiQRString("WPA", ssid, passphrase), nil
}
@@ -18,6 +18,10 @@ func (b *SystemdNetworkdBackend) GetWiFiNetworkDetails(ssid string) (*NetworkInf
return nil, fmt.Errorf("WiFi details not supported by networkd backend") return nil, fmt.Errorf("WiFi details not supported by networkd backend")
} }
func (b *SystemdNetworkdBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
return "", fmt.Errorf("WiFi QR Code not supported by networkd backend")
}
func (b *SystemdNetworkdBackend) ConnectWiFi(req ConnectionRequest) error { func (b *SystemdNetworkdBackend) ConnectWiFi(req ConnectionRequest) error {
return fmt.Errorf("WiFi connect not supported by networkd backend") return fmt.Errorf("WiFi connect not supported by networkd backend")
} }
@@ -196,6 +196,65 @@ func (b *NetworkManagerBackend) GetWiFiNetworkDetails(ssid string) (*NetworkInfo
}, nil }, nil
} }
func (b *NetworkManagerBackend) GetWiFiQRCodeContent(ssid string) (string, error) {
conn, err := b.findConnection(ssid)
if err != nil {
return "", fmt.Errorf("no saved connection for `%s`: %w", ssid, err)
}
connSettings, err := conn.GetSettings()
if err != nil {
return "", fmt.Errorf("failed to get settings for `%s`: %w", ssid, err)
}
secSettings, ok := connSettings["802-11-wireless-security"]
if !ok {
return "", fmt.Errorf("network `%s` has no security settings", ssid)
}
keyMgmt, ok := secSettings["key-mgmt"].(string)
if !ok {
return "", fmt.Errorf("failed to identify security type of network `%s`", ssid)
}
var securityType string
switch keyMgmt {
case "none":
authAlg, _ := secSettings["auth-alg"].(string)
switch authAlg {
case "open":
securityType = "nopass"
default:
securityType = "WEP"
}
case "ieee8021x":
securityType = "WEP"
default:
securityType = "WPA"
}
if securityType != "WPA" {
return "", fmt.Errorf("QR code generation only supports WPA connections, `%s` uses %s", ssid, securityType)
}
secrets, err := conn.GetSecrets("802-11-wireless-security")
if err != nil {
return "", fmt.Errorf("failed to retrieve connection secrets for `%s`: %w", ssid, err)
}
secSecrets, ok := secrets["802-11-wireless-security"]
if !ok {
return "", fmt.Errorf("failed to retrieve password for `%s`", ssid)
}
psk, ok := secSecrets["psk"].(string)
if !ok {
return "", fmt.Errorf("failed to retrieve password for `%s`", ssid)
}
return FormatWiFiQRString(securityType, ssid, psk), nil
}
func (b *NetworkManagerBackend) ConnectWiFi(req ConnectionRequest) error { func (b *NetworkManagerBackend) ConnectWiFi(req ConnectionRequest) error {
devInfo, err := b.getWifiDeviceForConnection(req.Device) devInfo, err := b.getWifiDeviceForConnection(req.Device)
if err != nil { if err != nil {
+41
View File
@@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"net" "net"
"os"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log" "github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models" "github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
@@ -40,6 +41,10 @@ func HandleRequest(conn net.Conn, req models.Request, manager *Manager) {
handleSetPreference(conn, req, manager) handleSetPreference(conn, req, manager)
case "network.info": case "network.info":
handleGetNetworkInfo(conn, req, manager) handleGetNetworkInfo(conn, req, manager)
case "network.qrcode":
handleGetNetworkQRCode(conn, req, manager)
case "network.delete-qrcode":
handleDeleteQRCode(conn, req, manager)
case "network.ethernet.info": case "network.ethernet.info":
handleGetWiredNetworkInfo(conn, req, manager) handleGetWiredNetworkInfo(conn, req, manager)
case "network.subscribe": case "network.subscribe":
@@ -320,6 +325,42 @@ func handleGetNetworkInfo(conn net.Conn, req models.Request, manager *Manager) {
models.Respond(conn, req.ID, network) models.Respond(conn, req.ID, network)
} }
func handleGetNetworkQRCode(conn net.Conn, req models.Request, manager *Manager) {
ssid, err := params.String(req.Params, "ssid")
if err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
content, err := manager.GetNetworkQRCode(ssid)
if err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
models.Respond(conn, req.ID, content)
}
func handleDeleteQRCode(conn net.Conn, req models.Request, _ *Manager) {
path, err := params.String(req.Params, "path")
if err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
if !isValidQRCodePath(path) {
models.RespondError(conn, req.ID, "invalid QR code path")
return
}
if err := os.Remove(path); err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "QR code file deleted"})
}
func handleGetWiredNetworkInfo(conn net.Conn, req models.Request, manager *Manager) { func handleGetWiredNetworkInfo(conn net.Conn, req models.Request, manager *Manager) {
uuid, err := params.String(req.Params, "uuid") uuid, err := params.String(req.Params, "uuid")
if err != nil { if err != nil {
+39
View File
@@ -6,6 +6,8 @@ import (
"time" "time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log" "github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/yeqown/go-qrcode/v2"
"github.com/yeqown/go-qrcode/writer/standard"
) )
func NewManager() (*Manager, error) { func NewManager() (*Manager, error) {
@@ -438,6 +440,43 @@ func (m *Manager) GetNetworkInfoDetailed(ssid string) (*NetworkInfoResponse, err
return m.backend.GetWiFiNetworkDetails(ssid) return m.backend.GetWiFiNetworkDetails(ssid)
} }
func (m *Manager) GetNetworkQRCode(ssid string) ([2]string, error) {
content, err := m.backend.GetWiFiQRCodeContent(ssid)
if err != nil {
return [2]string{}, err
}
qrc, err := qrcode.New(content)
if err != nil {
return [2]string{}, fmt.Errorf("failed to create QR code for `%s`: %w", ssid, err)
}
pathThemed, pathNormal := qrCodePaths(ssid)
wThemed, err := standard.New(
pathThemed,
standard.WithBuiltinImageEncoder(standard.PNG_FORMAT),
standard.WithBgTransparent(),
standard.WithFgColorRGBHex("#ffffff"),
)
if err != nil {
return [2]string{}, fmt.Errorf("failed to create QR code writer: %w", err)
}
if err := qrc.Save(wThemed); err != nil {
return [2]string{}, fmt.Errorf("failed to save QR code for `%s`: %w", ssid, err)
}
wNormal, err := standard.New(pathNormal, standard.WithBuiltinImageEncoder(standard.PNG_FORMAT))
if err != nil {
return [2]string{}, fmt.Errorf("failed to create QR code writer: %w", err)
}
if err := qrc.Save(wNormal); err != nil {
return [2]string{}, fmt.Errorf("failed to save QR code for `%s`: %w", ssid, err)
}
return [2]string{pathThemed, pathNormal}, nil
}
func (m *Manager) ToggleWiFi() error { func (m *Manager) ToggleWiFi() error {
enabled, err := m.backend.GetWiFiEnabled() enabled, err := m.backend.GetWiFiEnabled()
if err != nil { if err != nil {
@@ -0,0 +1,59 @@
package network
import (
"fmt"
"path/filepath"
"regexp"
"strings"
)
const qrCodeTmpPrefix = "/tmp/dank-wifi-qrcode-"
func FormatWiFiQRString(securityType, ssid, password string) string {
return fmt.Sprintf("WIFI:T:%s;S:%s;P:%s;;", securityType, ssid, password)
}
func qrCodePaths(ssid string) (themed, normal string) {
safe := sanitizeSSIDForPath(ssid)
themed = fmt.Sprintf("%s%s-themed.png", qrCodeTmpPrefix, safe)
normal = fmt.Sprintf("%s%s-normal.png", qrCodeTmpPrefix, safe)
return
}
func isValidQRCodePath(path string) bool {
clean := filepath.Clean(path)
return strings.HasPrefix(clean, qrCodeTmpPrefix) && strings.HasSuffix(clean, ".png")
}
var safePathChar = regexp.MustCompile(`[^a-zA-Z0-9_-]`)
func sanitizeSSIDForPath(ssid string) string {
return safePathChar.ReplaceAllString(ssid, "_")
}
var iwdVerbatimSSID = regexp.MustCompile(`^[a-zA-Z0-9 _-]+$`)
func iwdConfigPath(ssid string) string {
switch {
case iwdVerbatimSSID.MatchString(ssid):
return fmt.Sprintf("/var/lib/iwd/%s.psk", ssid)
default:
return fmt.Sprintf("/var/lib/iwd/=%x.psk", []byte(ssid))
}
}
func parseIWDPassphrase(data string) (string, error) {
inSecurity := false
for _, line := range strings.Split(data, "\n") {
line = strings.TrimSpace(line)
switch {
case line == "[Security]":
inSecurity = true
case strings.HasPrefix(line, "["):
inSecurity = false
case inSecurity && strings.HasPrefix(line, "Passphrase="):
return strings.TrimPrefix(line, "Passphrase="), nil
}
}
return "", fmt.Errorf("no passphrase found in iwd config")
}
+5 -5
View File
@@ -27,12 +27,12 @@ override_dh_auto_build:
# Verify core directory exists (native package format has source at root) # Verify core directory exists (native package format has source at root)
test -d core || (echo "ERROR: core directory not found!" && exit 1) test -d core || (echo "ERROR: core directory not found!" && exit 1)
# Patch go.mod to use Go 1.24 base version (Debian 13 has 1.23.x, may vary) # Pin go.mod and vendor/modules.txt to the installed Go toolchain version
sed -i 's/^go 1\.24\.[0-9]*/go 1.24/' core/go.mod GO_INSTALLED=$$(go version | grep -oP 'go\K[0-9]+\.[0-9]+'); \
sed -i "s/^go [0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$$/go $${GO_INSTALLED}/" core/go.mod; \
sed -i "s/^\(## explicit; go \)[0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$$/\1$${GO_INSTALLED}/" core/vendor/modules.txt
# Build dms-cli from source using vendored dependencies # Build dms-cli (single shell to preserve variables; arch: Debian amd64/arm64 -> Makefile amd64/arm64)
# Extract version info and build in single shell to preserve variables
# Architecture mapping: Debian amd64/arm64 -> Makefile amd64/arm64
VERSION="$(UPSTREAM_VERSION)"; \ VERSION="$(UPSTREAM_VERSION)"; \
COMMIT=$$(echo "$(UPSTREAM_VERSION)" | grep -oP '(?<=git)[0-9]+\.[a-f0-9]+' | cut -d. -f2 | head -c8 || echo "unknown"); \ COMMIT=$$(echo "$(UPSTREAM_VERSION)" | grep -oP '(?<=git)[0-9]+\.[a-f0-9]+' | cut -d. -f2 | head -c8 || echo "unknown"); \
if [ "$(DEB_HOST_ARCH)" = "amd64" ]; then \ if [ "$(DEB_HOST_ARCH)" = "amd64" ]; then \
+26 -3
View File
@@ -3,6 +3,7 @@
%global debug_package %{nil} %global debug_package %{nil}
%global version {{{ git_repo_version }}} %global version {{{ git_repo_version }}}
%global pkg_summary DankMaterialShell - Material 3 inspired shell for Wayland compositors %global pkg_summary DankMaterialShell - Material 3 inspired shell for Wayland compositors
%global go_toolchain_version 1.25.7
Name: dms Name: dms
Epoch: 2 Epoch: 2
@@ -14,12 +15,12 @@ License: MIT
URL: https://github.com/AvengeMedia/DankMaterialShell URL: https://github.com/AvengeMedia/DankMaterialShell
VCS: {{{ git_repo_vcs }}} VCS: {{{ git_repo_vcs }}}
Source0: {{{ git_repo_pack }}} Source0: {{{ git_repo_pack }}}
Source1: https://go.dev/dl/go%{go_toolchain_version}.linux-amd64.tar.gz
Source2: https://go.dev/dl/go%{go_toolchain_version}.linux-arm64.tar.gz
BuildRequires: git-core BuildRequires: git-core
BuildRequires: gzip BuildRequires: gzip
BuildRequires: golang >= 1.24
BuildRequires: make BuildRequires: make
BuildRequires: wget
BuildRequires: systemd-rpm-macros BuildRequires: systemd-rpm-macros
# Core requirements # Core requirements
@@ -28,7 +29,7 @@ Requires: accountsservice
Requires: dms-cli = %{epoch}:%{version}-%{release} Requires: dms-cli = %{epoch}:%{version}-%{release}
Requires: dgop Requires: dgop
# Core utilities (Highly recommended for DMS functionality) # Core utilities (Recommended for DMS functionality)
Recommends: cava Recommends: cava
Recommends: danksearch Recommends: danksearch
Recommends: matugen Recommends: matugen
@@ -66,6 +67,28 @@ Provides native DBus bindings, NetworkManager integration, and system utilities.
VERSION="%{version}" VERSION="%{version}"
COMMIT=$(echo "%{version}" | grep -oP '[a-f0-9]{7,}' | head -n1 || echo "unknown") COMMIT=$(echo "%{version}" | grep -oP '[a-f0-9]{7,}' | head -n1 || echo "unknown")
# Use pinned bundled Go toolchain (deterministic across chroots)
case "%{_arch}" in
x86_64)
GO_TARBALL="%{_sourcedir}/go%{go_toolchain_version}.linux-amd64.tar.gz"
;;
aarch64)
GO_TARBALL="%{_sourcedir}/go%{go_toolchain_version}.linux-arm64.tar.gz"
;;
*)
echo "Unsupported architecture for bundled Go: %{_arch}"
exit 1
;;
esac
rm -rf .go
tar -xzf "$GO_TARBALL"
mv go .go
export GOROOT="$PWD/.go"
export PATH="$GOROOT/bin:$PATH"
export GOTOOLCHAIN=local
go version
cd core cd core
make dist VERSION="$VERSION" COMMIT="$COMMIT" make dist VERSION="$VERSION" COMMIT="$COMMIT"
+4 -2
View File
@@ -56,8 +56,10 @@ mkdir -p $HOME $GOCACHE $GOMODCACHE
# OBS has no network access, so use local toolchain only # OBS has no network access, so use local toolchain only
export GOTOOLCHAIN=local export GOTOOLCHAIN=local
# Patch go.mod to use base Go version (e.g., go 1.24 instead of go 1.24.6) # Pin go.mod and vendor/modules.txt to the installed Go toolchain version
sed -i 's/^go 1\.24\.[0-9]*/go 1.24/' core/go.mod GO_INSTALLED=$(go version | grep -oP 'go\K[0-9]+\.[0-9]+')
sed -i "s/^go [0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$/go ${GO_INSTALLED}/" core/go.mod
sed -i "s/^\(## explicit; go \)[0-9]\+\.[0-9]\+\(\.[0-9]*\)\?$/\1${GO_INSTALLED}/" core/vendor/modules.txt
# Extract version info for embedding in binary # Extract version info for embedding in binary
VERSION="%{version}" VERSION="%{version}"
+1
View File
@@ -182,6 +182,7 @@
with pkgs; with pkgs;
[ [
go_1_25 go_1_25
go-mockery_2
gopls gopls
delve delve
go-tools go-tools
+1 -1
View File
@@ -1 +1 @@
Saffron Bloom The Wolverine
+1 -7
View File
@@ -3,7 +3,6 @@ pragma ComponentBehavior: Bound
import Quickshell import Quickshell
import QtCore import QtCore
import qs.Services
Singleton { Singleton {
id: root id: root
@@ -84,12 +83,7 @@ Singleton {
if (desktopEntry && desktopEntry.icon) { if (desktopEntry && desktopEntry.icon) {
return Quickshell.iconPath(desktopEntry.icon, true); return Quickshell.iconPath(desktopEntry.icon, true);
} }
return Quickshell.iconPath(appId, true);
const icon = Quickshell.iconPath(appId, true);
if (icon && icon !== "")
return icon;
return DesktopService.resolveIconPath(appId);
} }
function getAppName(appId: string, desktopEntry: var): string { function getAppName(appId: string, desktopEntry: var): string {
+1 -1
View File
@@ -575,7 +575,7 @@ Singleton {
"maximizeWidgetIcons": false, "maximizeWidgetIcons": false,
"maximizeWidgetText": false, "maximizeWidgetText": false,
"removeWidgetPadding": false, "removeWidgetPadding": false,
"widgetPadding": 8, "widgetPadding": 12,
"gothCornersEnabled": false, "gothCornersEnabled": false,
"gothCornerRadiusOverride": false, "gothCornerRadiusOverride": false,
"gothCornerRadiusValue": 12, "gothCornerRadiusValue": 12,
+1 -1
View File
@@ -398,7 +398,7 @@ var SPEC = {
maximizeWidgetIcons: false, maximizeWidgetIcons: false,
maximizeWidgetText: false, maximizeWidgetText: false,
removeWidgetPadding: false, removeWidgetPadding: false,
widgetPadding: 8, widgetPadding: 12,
gothCornersEnabled: false, gothCornersEnabled: false,
gothCornerRadiusOverride: false, gothCornerRadiusOverride: false,
gothCornerRadiusValue: 12, gothCornerRadiusValue: 12,
+35 -77
View File
@@ -142,45 +142,25 @@ Item {
fadeDpmsWindowLoader.item.cancelFade(); fadeDpmsWindowLoader.item.cancelFade();
} }
} }
function onRequestMonitorOn() {
if (!fadeDpmsWindowLoader.item)
return;
fadeDpmsWindowLoader.item.cancelFade();
} }
} }
} }
}
property string _barLayoutStateJson: {
const configs = SettingsData.barConfigs;
const mapped = configs.map(c => ({
id: c.id,
position: c.position,
autoHide: c.autoHide,
visible: c.visible
})).sort((a, b) => {
const aVertical = a.position === SettingsData.Position.Left || a.position === SettingsData.Position.Right;
const bVertical = b.position === SettingsData.Position.Left || b.position === SettingsData.Position.Right;
if (aVertical !== bVertical) {
return aVertical - bVertical;
}
return String(a.id).localeCompare(String(b.id));
});
return JSON.stringify(mapped);
}
on_BarLayoutStateJsonChanged: {
if (typeof dockRecreateDebounce !== "undefined") {
dockRecreateDebounce.restart();
}
}
Repeater { Repeater {
id: dankBarRepeater id: dankBarRepeater
model: ScriptModel { model: ScriptModel {
id: barRepeaterModel id: barRepeaterModel
values: JSON.parse(root._barLayoutStateJson) values: {
const configs = SettingsData.barConfigs;
return configs.map(c => ({
id: c.id,
position: c.position
})).sort((a, b) => {
const aVertical = a.position === SettingsData.Position.Left || a.position === SettingsData.Position.Right;
const bVertical = b.position === SettingsData.Position.Left || b.position === SettingsData.Position.Right;
return aVertical - bVertical;
});
}
} }
property var hyprlandOverviewLoaderRef: hyprlandOverviewLoader property var hyprlandOverviewLoaderRef: hyprlandOverviewLoader
@@ -227,6 +207,13 @@ Item {
PolkitService.polkitAvailable; PolkitService.polkitAvailable;
} }
Connections {
target: SettingsData
function onBarConfigsChanged() {
dockRecreateDebounce.restart();
}
}
Loader { Loader {
id: dockLoader id: dockLoader
active: root.dockEnabled active: root.dockEnabled
@@ -278,7 +265,6 @@ Item {
sourceComponent: Component { sourceComponent: Component {
DankDashPopout { DankDashPopout {
id: dankDashPopout id: dankDashPopout
onPopoutClosed: PopoutService.unloadDankDash()
} }
} }
} }
@@ -298,13 +284,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.notificationCenterLoader = notificationCenterLoader;
}
NotificationCenterPopout { NotificationCenterPopout {
id: notificationCenter id: notificationCenter
onPopoutClosed: PopoutService.unloadNotificationCenter()
Component.onCompleted: { Component.onCompleted: {
PopoutService.notificationCenterPopout = notificationCenter; PopoutService.notificationCenterPopout = notificationCenter;
@@ -328,15 +309,10 @@ Item {
property var modalRef: colorPickerModal property var modalRef: colorPickerModal
property LazyLoader powerModalLoaderRef: powerMenuModalLoader property LazyLoader powerModalLoaderRef: powerMenuModalLoader
Component.onCompleted: {
PopoutService.controlCenterLoader = controlCenterLoader;
}
ControlCenterPopout { ControlCenterPopout {
id: controlCenterPopout id: controlCenterPopout
colorPickerModal: controlCenterLoader.modalRef colorPickerModal: controlCenterLoader.modalRef
powerMenuModalLoader: controlCenterLoader.powerModalLoaderRef powerMenuModalLoader: controlCenterLoader.powerModalLoaderRef
onPopoutClosed: PopoutService.unloadControlCenter()
onLockRequested: { onLockRequested: {
lock.activate(); lock.activate();
@@ -365,6 +341,23 @@ Item {
} }
} }
LazyLoader {
id: wifiQRCodeModalLoader
active: false
Component.onCompleted: {
PopoutService.wifiQRCodeModalLoader = wifiQRCodeModalLoader;
}
WifiQRCodeModal {
id: wifiQRCodeModalItem
Component.onCompleted: {
PopoutService.wifiQRCodeModal = wifiQRCodeModalItem;
}
}
}
LazyLoader { LazyLoader {
id: polkitAuthModalLoader id: polkitAuthModalLoader
active: false active: false
@@ -444,13 +437,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.batteryPopoutLoader = batteryPopoutLoader;
}
BatteryPopout { BatteryPopout {
id: batteryPopout id: batteryPopout
onPopoutClosed: PopoutService.unloadBattery()
Component.onCompleted: { Component.onCompleted: {
PopoutService.batteryPopout = batteryPopout; PopoutService.batteryPopout = batteryPopout;
@@ -463,13 +451,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.layoutPopoutLoader = layoutPopoutLoader;
}
DWLLayoutPopout { DWLLayoutPopout {
id: layoutPopout id: layoutPopout
onPopoutClosed: PopoutService.unloadLayoutPopout()
Component.onCompleted: { Component.onCompleted: {
PopoutService.layoutPopout = layoutPopout; PopoutService.layoutPopout = layoutPopout;
@@ -482,13 +465,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.vpnPopoutLoader = vpnPopoutLoader;
}
VpnPopout { VpnPopout {
id: vpnPopout id: vpnPopout
onPopoutClosed: PopoutService.unloadVpn()
Component.onCompleted: { Component.onCompleted: {
PopoutService.vpnPopout = vpnPopout; PopoutService.vpnPopout = vpnPopout;
@@ -501,13 +479,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.processListPopoutLoader = processListPopoutLoader;
}
ProcessListPopout { ProcessListPopout {
id: processListPopout id: processListPopout
onPopoutClosed: PopoutService.unloadProcessListPopout()
Component.onCompleted: { Component.onCompleted: {
PopoutService.processListPopout = processListPopout; PopoutService.processListPopout = processListPopout;
@@ -550,13 +523,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.appDrawerLoader = appDrawerLoader;
}
AppDrawerPopout { AppDrawerPopout {
id: appDrawerPopout id: appDrawerPopout
onPopoutClosed: PopoutService.unloadAppDrawer()
Component.onCompleted: { Component.onCompleted: {
PopoutService.appDrawerPopout = appDrawerPopout; PopoutService.appDrawerPopout = appDrawerPopout;
@@ -588,13 +556,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.clipboardHistoryPopoutLoader = clipboardHistoryPopoutLoader;
}
ClipboardHistoryPopout { ClipboardHistoryPopout {
id: clipboardHistoryPopout id: clipboardHistoryPopout
onPopoutClosed: PopoutService.unloadClipboardHistoryPopout()
Component.onCompleted: { Component.onCompleted: {
PopoutService.clipboardHistoryPopout = clipboardHistoryPopout; PopoutService.clipboardHistoryPopout = clipboardHistoryPopout;
@@ -769,13 +732,8 @@ Item {
active: false active: false
Component.onCompleted: {
PopoutService.systemUpdateLoader = systemUpdateLoader;
}
SystemUpdatePopout { SystemUpdatePopout {
id: systemUpdatePopout id: systemUpdatePopout
onPopoutClosed: PopoutService.unloadSystemUpdate()
Component.onCompleted: { Component.onCompleted: {
PopoutService.systemUpdatePopout = systemUpdatePopout; PopoutService.systemUpdatePopout = systemUpdatePopout;
+111 -12
View File
@@ -162,6 +162,11 @@ Item {
} }
] ]
property string fileSearchType: "all"
property string fileSearchExt: ""
property string fileSearchFolder: ""
property string fileSearchSort: "score"
property string pluginFilter: "" property string pluginFilter: ""
property string activePluginName: "" property string activePluginName: ""
property var activePluginCategories: [] property var activePluginCategories: []
@@ -346,6 +351,10 @@ Item {
previousSearchMode = "all"; previousSearchMode = "all";
autoSwitchedToFiles = false; autoSwitchedToFiles = false;
isFileSearching = false; isFileSearching = false;
fileSearchType = "all";
fileSearchExt = "";
fileSearchFolder = "";
fileSearchSort = "score";
sections = []; sections = [];
flatModel = []; flatModel = [];
selectedFlatIndex = 0; selectedFlatIndex = 0;
@@ -399,6 +408,34 @@ Item {
performSearch(); performSearch();
} }
function setFileSearchType(type) {
if (fileSearchType === type)
return;
fileSearchType = type;
performFileSearch();
}
function setFileSearchExt(ext) {
if (fileSearchExt === ext)
return;
fileSearchExt = ext;
performFileSearch();
}
function setFileSearchFolder(folder) {
if (fileSearchFolder === folder)
return;
fileSearchFolder = folder;
performFileSearch();
}
function setFileSearchSort(sort) {
if (fileSearchSort === sort)
return;
fileSearchSort = sort;
performFileSearch();
}
function clearPluginFilter() { function clearPluginFilter() {
if (pluginFilter) { if (pluginFilter) {
pluginFilter = ""; pluginFilter = "";
@@ -827,10 +864,20 @@ Item {
var params = { var params = {
limit: 20, limit: 20,
fuzzy: true, fuzzy: true,
sort: "score", sort: fileSearchSort || "score",
desc: true desc: true
}; };
if (DSearchService.supportsTypeFilter) {
params.type = (fileSearchType && fileSearchType !== "all") ? fileSearchType : "all";
}
if (fileSearchExt) {
params.ext = fileSearchExt;
}
if (fileSearchFolder) {
params.folder = fileSearchFolder;
}
DSearchService.search(fileQuery, params, function (response) { DSearchService.search(fileQuery, params, function (response) {
isFileSearching = false; isFileSearching = false;
if (response.error) if (response.error)
@@ -840,34 +887,73 @@ Item {
for (var i = 0; i < hits.length; i++) { for (var i = 0; i < hits.length; i++) {
var hit = hits[i]; var hit = hits[i];
var docTypes = hit.locations?.doc_type;
var isDir = docTypes ? !!docTypes["dir"] : false;
fileItems.push(transformFileResult({ fileItems.push(transformFileResult({
path: hit.id || "", path: hit.id || "",
score: hit.score || 0 score: hit.score || 0,
is_dir: isDir
})); }));
} }
var fileSection = { var fileSections = [];
var showType = fileSearchType || "all";
if (showType === "all" && DSearchService.supportsTypeFilter) {
var onlyFiles = [];
var onlyDirs = [];
for (var j = 0; j < fileItems.length; j++) {
if (fileItems[j].data?.is_dir)
onlyDirs.push(fileItems[j]);
else
onlyFiles.push(fileItems[j]);
}
if (onlyFiles.length > 0) {
fileSections.push({
id: "files", id: "files",
title: I18n.tr("Files"), title: I18n.tr("Files"),
icon: "insert_drive_file",
priority: 4,
items: onlyFiles,
collapsed: collapsedSections["files"] || false,
flatStartIndex: 0
});
}
if (onlyDirs.length > 0) {
fileSections.push({
id: "folders",
title: I18n.tr("Folders"),
icon: "folder", icon: "folder",
priority: 4.1,
items: onlyDirs,
collapsed: collapsedSections["folders"] || false,
flatStartIndex: 0
});
}
} else {
var filesIcon = showType === "dir" ? "folder" : showType === "file" ? "insert_drive_file" : "folder";
var filesTitle = showType === "dir" ? I18n.tr("Folders") : I18n.tr("Files");
if (fileItems.length > 0) {
fileSections.push({
id: "files",
title: filesTitle,
icon: filesIcon,
priority: 4, priority: 4,
items: fileItems, items: fileItems,
collapsed: collapsedSections["files"] || false, collapsed: collapsedSections["files"] || false,
flatStartIndex: 0 flatStartIndex: 0
}; });
}
}
var newSections; var newSections;
if (searchMode === "files") { if (searchMode === "files") {
newSections = fileItems.length > 0 ? [fileSection] : []; newSections = fileSections;
} else { } else {
var existingNonFile = sections.filter(function (s) { var existingNonFile = sections.filter(function (s) {
return s.id !== "files"; return s.id !== "files" && s.id !== "folders";
}); });
if (fileItems.length > 0) { newSections = existingNonFile.concat(fileSections);
newSections = existingNonFile.concat([fileSection]);
} else {
newSections = existingNonFile;
}
} }
newSections.sort(function (a, b) { newSections.sort(function (a, b) {
return a.priority - b.priority; return a.priority - b.priority;
@@ -913,7 +999,7 @@ Item {
} }
function transformFileResult(file) { function transformFileResult(file) {
return Transform.transformFileResult(file, I18n.tr("Open"), I18n.tr("Open folder"), I18n.tr("Copy path")); return Transform.transformFileResult(file, I18n.tr("Open"), I18n.tr("Open folder"), I18n.tr("Copy path"), I18n.tr("Open in terminal"));
} }
function detectTrigger(query) { function detectTrigger(query) {
@@ -1581,6 +1667,9 @@ Item {
case "copy_path": case "copy_path":
copyToClipboard(item.data.path); copyToClipboard(item.data.path);
break; break;
case "open_terminal":
openTerminal(item.data.path);
break;
case "copy": case "copy":
copyToClipboard(item.name); copyToClipboard(item.name);
break; break;
@@ -1662,6 +1751,16 @@ Item {
Qt.openUrlExternally("file://" + folder); Qt.openUrlExternally("file://" + folder);
} }
function openTerminal(path) {
if (!path)
return;
var terminal = Quickshell.env("TERMINAL") || "xterm";
Quickshell.execDetached({
command: [terminal],
workingDirectory: path
});
}
function copyToClipboard(text) { function copyToClipboard(text) {
if (!text) if (!text)
return; return;
@@ -107,6 +107,10 @@ Item {
spotlightContent.controller.activePluginId = ""; spotlightContent.controller.activePluginId = "";
spotlightContent.controller.activePluginName = ""; spotlightContent.controller.activePluginName = "";
spotlightContent.controller.pluginFilter = ""; spotlightContent.controller.pluginFilter = "";
spotlightContent.controller.fileSearchType = "all";
spotlightContent.controller.fileSearchExt = "";
spotlightContent.controller.fileSearchFolder = "";
spotlightContent.controller.fileSearchSort = "score";
spotlightContent.controller.collapsedSections = {}; spotlightContent.controller.collapsedSections = {};
spotlightContent.controller.selectedFlatIndex = 0; spotlightContent.controller.selectedFlatIndex = 0;
spotlightContent.controller.selectedItem = null; spotlightContent.controller.selectedItem = null;
@@ -116,31 +116,43 @@ function transformBuiltInLauncherItem(item, pluginId, openLabel) {
}; };
} }
function transformFileResult(file, openLabel, openFolderLabel, copyPathLabel) { function transformFileResult(file, openLabel, openFolderLabel, copyPathLabel, openTerminalLabel) {
var filename = file.path ? file.path.split("/").pop() : ""; var filename = file.path ? file.path.split("/").pop() : "";
var dirname = file.path ? file.path.substring(0, file.path.lastIndexOf("/")) : ""; var dirname = file.path ? file.path.substring(0, file.path.lastIndexOf("/")) : "";
var isDir = file.is_dir || false;
var actions = [];
if (isDir) {
if (openTerminalLabel) {
actions.push({
name: openTerminalLabel,
icon: "terminal",
action: "open_terminal"
});
}
} else {
actions.push({
name: openFolderLabel,
icon: "folder_open",
action: "open_folder"
});
}
actions.push({
name: copyPathLabel,
icon: "content_copy",
action: "copy_path"
});
return { return {
id: file.path || "", id: file.path || "",
type: "file", type: "file",
name: filename, name: filename,
subtitle: dirname, subtitle: dirname,
icon: Utils.getFileIcon(filename), icon: isDir ? "folder" : Utils.getFileIcon(filename),
iconType: "material", iconType: "material",
section: "files", section: "files",
data: file, data: file,
actions: [ actions: actions,
{
name: openFolderLabel,
icon: "folder_open",
action: "open_folder"
},
{
name: copyPathLabel,
icon: "content_copy",
action: "copy_path"
}
],
primaryAction: { primaryAction: {
name: openLabel, name: openLabel,
icon: "open_in_new", icon: "open_in_new",
@@ -549,8 +549,151 @@ FocusScope {
} }
Item { Item {
id: fileFilterRow
width: parent.width width: parent.width
height: parent.height - searchField.height - categoryRow.height - actionPanel.height - Theme.spacingXS * (categoryRow.visible ? 3 : 2) height: showFileFilters ? fileFilterContent.height : 0
visible: showFileFilters
readonly property bool showFileFilters: controller.searchMode === "files"
Behavior on height {
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
Row {
id: fileFilterContent
width: parent.width
spacing: Theme.spacingS
Row {
id: typeChips
anchors.verticalCenter: parent.verticalCenter
spacing: 2
visible: DSearchService.supportsTypeFilter
Repeater {
model: [
{
id: "all",
label: I18n.tr("All"),
icon: "search"
},
{
id: "file",
label: I18n.tr("Files"),
icon: "insert_drive_file"
},
{
id: "dir",
label: I18n.tr("Folders"),
icon: "folder"
}
]
Rectangle {
required property var modelData
required property int index
width: chipContent.width + Theme.spacingM * 2
height: sortDropdown.height
radius: Theme.cornerRadius
color: controller.fileSearchType === modelData.id || chipArea.containsMouse ? Theme.primaryContainer : "transparent"
Row {
id: chipContent
anchors.centerIn: parent
spacing: Theme.spacingXS
DankIcon {
anchors.verticalCenter: parent.verticalCenter
name: modelData.icon
size: 14
color: controller.fileSearchType === modelData.id ? Theme.primary : Theme.surfaceVariantText
}
StyledText {
anchors.verticalCenter: parent.verticalCenter
text: modelData.label
font.pixelSize: Theme.fontSizeSmall
color: controller.fileSearchType === modelData.id ? Theme.primary : Theme.surfaceText
}
}
MouseArea {
id: chipArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: controller.setFileSearchType(modelData.id)
}
}
}
}
Rectangle {
width: 1
height: 20
anchors.verticalCenter: parent.verticalCenter
color: Theme.outlineMedium
visible: typeChips.visible
}
DankDropdown {
id: sortDropdown
anchors.verticalCenter: parent.verticalCenter
width: Math.min(130, parent.width / 3)
compactMode: true
dropdownWidth: 130
popupWidth: 150
maxPopupHeight: 200
currentValue: {
switch (controller.fileSearchSort) {
case "score":
return I18n.tr("Score");
case "name":
return I18n.tr("Name");
case "modified":
return I18n.tr("Modified");
case "size":
return I18n.tr("Size");
default:
return I18n.tr("Score");
}
}
options: [I18n.tr("Score"), I18n.tr("Name"), I18n.tr("Modified"), I18n.tr("Size")]
onValueChanged: value => {
var sortMap = {};
sortMap[I18n.tr("Score")] = "score";
sortMap[I18n.tr("Name")] = "name";
sortMap[I18n.tr("Modified")] = "modified";
sortMap[I18n.tr("Size")] = "size";
controller.setFileSearchSort(sortMap[value] || "score");
}
}
DankTextField {
id: extFilterField
anchors.verticalCenter: parent.verticalCenter
width: Math.min(100, parent.width / 4)
height: sortDropdown.height
placeholderText: I18n.tr("ext")
font.pixelSize: Theme.fontSizeSmall
showClearButton: text.length > 0
onTextChanged: {
controller.setFileSearchExt(text.trim());
}
}
}
}
Item {
width: parent.width
height: parent.height - searchField.height - categoryRow.height - fileFilterRow.height - actionPanel.height - Theme.spacingXS * ((categoryRow.visible ? 1 : 0) + (fileFilterRow.visible ? 1 : 0) + 2)
opacity: root.parentModal?.isClosing ? 0 : 1 opacity: root.parentModal?.isClosing ? 0 : 1
ResultsList { ResultsList {
@@ -586,6 +729,9 @@ FocusScope {
function onSearchQueryRequested(query) { function onSearchQueryRequested(query) {
searchField.text = query; searchField.text = query;
} }
function onModeChanged() {
extFilterField.text = "";
}
} }
FocusScope { FocusScope {
@@ -113,6 +113,7 @@ Rectangle {
font.family: Theme.fontFamily font.family: Theme.fontFamily
color: Theme.surfaceVariantText color: Theme.surfaceVariantText
elide: Text.ElideRight elide: Text.ElideRight
clip: true
visible: (root.item?.subtitle ?? "").length > 0 visible: (root.item?.subtitle ?? "").length > 0
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
} }
@@ -181,7 +182,7 @@ Rectangle {
case "plugin": case "plugin":
return I18n.tr("Plugin"); return I18n.tr("Plugin");
case "file": case "file":
return I18n.tr("File"); return root.item.data?.is_dir ? I18n.tr("Folder") : I18n.tr("File");
default: default:
return ""; return "";
} }
@@ -435,7 +435,15 @@ Item {
var mode = root.controller?.searchMode ?? "all"; var mode = root.controller?.searchMode ?? "all";
switch (mode) { switch (mode) {
case "files": case "files":
var fileType = root.controller?.fileSearchType ?? "all";
switch (fileType) {
case "dir":
return "folder_open"; return "folder_open";
case "file":
return "insert_drive_file";
default:
return "folder_open";
}
case "plugins": case "plugins":
return "extension"; return "extension";
case "apps": case "apps":
@@ -465,7 +473,15 @@ Item {
return I18n.tr("Type to search files"); return I18n.tr("Type to search files");
if (root.controller.searchQuery.length < 2) if (root.controller.searchQuery.length < 2)
return I18n.tr("Type at least 2 characters"); return I18n.tr("Type at least 2 characters");
var fileType = root.controller?.fileSearchType ?? "all";
switch (fileType) {
case "dir":
return I18n.tr("No folders found");
case "file":
return I18n.tr("No files found"); return I18n.tr("No files found");
default:
return I18n.tr("No results found");
}
case "plugins": case "plugins":
return hasQuery ? I18n.tr("No plugin results") : I18n.tr("Browse or search plugins"); return hasQuery ? I18n.tr("No plugin results") : I18n.tr("Browse or search plugins");
case "apps": case "apps":
+170
View File
@@ -0,0 +1,170 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Effects
import Quickshell
import Quickshell.Io
import qs.Modals.Common
import qs.Modals.FileBrowser
import qs.Common
import qs.Services
import qs.Widgets
DankModal {
id: root
visible: false
layerNamespace: "dms:wifi-qrcode"
property bool disablePopupTransparency: true
property string wifiSSID: ""
property string themedQrCodePath: ""
property string normalQrCodePath: ""
modalWidth: 420
modalHeight: 480
onBackgroundClicked: hide()
onOpened: {
Qt.callLater(() => {
modalFocusScope.forceActiveFocus();
contentLoader.item.wifiSSID = wifiSSID;
contentLoader.item.themedQrCodePath = themedQrCodePath;
contentLoader.item.saveBrowserLoader = saveBrowserLoader;
});
}
function show(ssid) {
wifiSSID = ssid;
fetchNetworkQRCode(ssid);
}
function hide() {
if (themedQrCodePath !== "") {
deleteQRCodeFile(themedQrCodePath);
}
if (normalQrCodePath !== "") {
deleteQRCodeFile(normalQrCodePath);
}
close();
}
function fetchNetworkQRCode(ssid) {
// TODO: Add loading UI?
DMSService.sendRequest("network.qrcode", {
ssid: ssid
}, response => {
if (response.error) {
ToastService.showError("Failed to fetch network QR code: ", JSON.stringify(response.error));
} else if (response.result) {
themedQrCodePath = response.result[0];
normalQrCodePath = response.result[1];
open();
}
});
}
function deleteQRCodeFile(path) {
DMSService.sendRequest("network.delete-qrcode", {
path: path
}, response => {
if (response.error) {
ToastService.showError(`Failed to remove QR code at ${path}: `, JSON.stringify(response.error));
}
})
}
LazyLoader {
id: saveBrowserLoader
active: false
FileBrowserSurfaceModal {
id: saveBrowser
browserTitle: I18n.tr("Save QR Code")
browserIcon: "qr_code"
browserType: "default"
fileExtensions: ["*.png"]
allowStacking: true
saveMode: true
defaultFileName: `${root.wifiSSID ?? "wifi-qrcode"}.png`
onFileSelected: path => {
const cleanPath = decodeURI(path.toString().replace(/^file:\/\//, ''));
const fileName = cleanPath.split('/').pop();
const fileUrl = "file://" + cleanPath;
copyQrCodeProcess.exec(["cp", root.normalQrCodePath, cleanPath, "-f"])
}
Process {
id: copyQrCodeProcess
stdout: StdioCollector {
onStreamFinished: {
saveBrowser.close();
}
}
}
}
}
content: Component {
Item {
id: theItem
property alias themedQrCodePath: qrCodeImg.source
property var saveBrowserLoader: null
property string wifiSSID: ""
anchors.fill: parent
Column {
anchors.fill: parent
anchors.margins: Theme.spacingL
spacing: Theme.spacingL
RowLayout {
id: modalTitle
width: parent.width
StyledText {
text: I18n.tr("WiFi QR code for ") + theItem.wifiSSID
font.pixelSize: Theme.fontSizeLarge
color: Theme.surfaceText
font.weight: Font.Bold
Layout.alignment: Qt.AlignLeft
}
DankActionButton {
iconName: "save"
iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText
onClicked: {
saveBrowserLoader.active = true;
if (saveBrowserLoader.item) {
saveBrowserLoader.item.open();
}
}
Layout.alignment: Qt.AlignRight
}
DankActionButton {
iconName: "close"
iconSize: Theme.iconSize - 4
iconColor: Theme.surfaceText
onClicked: root.hide()
Layout.alignment: Qt.AlignRight
}
}
Image {
id: qrCodeImg
height: parent.height - parent.spacing - modalTitle.height
width: height
anchors.horizontalCenter: parent.horizontalCenter
MultiEffect {
source: qrCodeImg
anchors.fill: source
colorization: 1.0
colorizationColor: Theme.primary
}
}
}
}
}
}
@@ -85,12 +85,12 @@ Variants {
} }
Component.onCompleted: { Component.onCompleted: {
if (typeof blurWallpaperWindow.updatesEnabled !== "undefined")
blurWallpaperWindow.updatesEnabled = Qt.binding(() => root.effectActive || root._renderSettling || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading);
if (!source) { if (!source) {
root._renderSettling = false; isInitialized = true;
return;
} }
const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source);
setWallpaperImmediate(formattedSource);
isInitialized = true; isInitialized = true;
} }
@@ -98,25 +98,8 @@ Variants {
property real transitionProgress: 0 property real transitionProgress: 0
readonly property bool transitioning: transitionAnimation.running readonly property bool transitioning: transitionAnimation.running
property bool effectActive: false property bool effectActive: false
property bool _renderSettling: true
property bool useNextForEffect: false property bool useNextForEffect: false
Connections {
target: currentWallpaper
function onStatusChanged() {
if (currentWallpaper.status === Image.Ready) {
root._renderSettling = true;
renderSettleTimer.restart();
}
}
}
Timer {
id: renderSettleTimer
interval: 100
onTriggered: root._renderSettling = false
}
onSourceChanged: { onSourceChanged: {
if (!source || source.startsWith("#")) { if (!source || source.startsWith("#")) {
setWallpaperImmediate(""); setWallpaperImmediate("");
@@ -141,8 +124,6 @@ Variants {
transitionAnimation.stop(); transitionAnimation.stop();
root.transitionProgress = 0.0; root.transitionProgress = 0.0;
root.effectActive = false; root.effectActive = false;
root._renderSettling = true;
renderSettleTimer.restart();
currentWallpaper.source = newSource; currentWallpaper.source = newSource;
nextWallpaper.source = ""; nextWallpaper.source = "";
} }
@@ -651,6 +651,7 @@ Rectangle {
} }
Rectangle { Rectangle {
id: pinButton
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: optionsButton.width + Theme.spacingM + Theme.spacingS anchors.rightMargin: optionsButton.width + Theme.spacingM + Theme.spacingS
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@@ -711,6 +712,19 @@ Rectangle {
} }
} }
DankActionButton {
id: qrCodeButton
visible: modelData.secured && modelData.saved
anchors.right: parent.right
anchors.rightMargin: optionsButton.width + pinWifiRow.width + 3 * Theme.spacingM + Theme.spacingS
anchors.verticalCenter: parent.verticalCenter
iconName: "qr_code"
buttonSize: 28
onClicked: {
PopoutService.showWifiQRCodeModal(modelData.ssid);
}
}
DankRipple { DankRipple {
id: wifiRipple id: wifiRipple
cornerRadius: parent.radius cornerRadius: parent.radius
@@ -719,7 +733,7 @@ Rectangle {
MouseArea { MouseArea {
id: networkMouseArea id: networkMouseArea
anchors.fill: parent anchors.fill: parent
anchors.rightMargin: optionsButton.width + Theme.spacingM + Theme.spacingS + pinWifiRow.width + Theme.spacingS * 4 anchors.rightMargin: optionsButton.width + pinWifiRow.width + (qrCodeButton.visible ? qrCodeButton.width : 0) + Theme.spacingS * 5 + Theme.spacingM
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onPressed: mouse => wifiRipple.trigger(mouse.x, mouse.y) onPressed: mouse => wifiRipple.trigger(mouse.x, mouse.y)
+57 -66
View File
@@ -21,82 +21,73 @@ Item {
property alias centerWidgetsModel: centerWidgetsModel property alias centerWidgetsModel: centerWidgetsModel
property alias rightWidgetsModel: rightWidgetsModel property alias rightWidgetsModel: rightWidgetsModel
property string _leftWidgetsJson: {
root.barConfig;
const leftWidgets = root.barConfig?.leftWidgets || [];
const mapped = leftWidgets.map((w, index) => {
if (typeof w === "string") {
return {
widgetId: w,
id: w + "_" + index,
enabled: true
};
} else {
const obj = Object.assign({}, w);
obj.widgetId = w.id || w.widgetId;
obj.id = (w.id || w.widgetId) + "_" + index;
obj.enabled = w.enabled !== false;
return obj;
}
});
return JSON.stringify(mapped);
}
property string _centerWidgetsJson: {
root.barConfig;
const centerWidgets = root.barConfig?.centerWidgets || [];
const mapped = centerWidgets.map((w, index) => {
if (typeof w === "string") {
return {
widgetId: w,
id: w + "_" + index,
enabled: true
};
} else {
const obj = Object.assign({}, w);
obj.widgetId = w.id || w.widgetId;
obj.id = (w.id || w.widgetId) + "_" + index;
obj.enabled = w.enabled !== false;
return obj;
}
});
return JSON.stringify(mapped);
}
property string _rightWidgetsJson: {
root.barConfig;
const rightWidgets = root.barConfig?.rightWidgets || [];
const mapped = rightWidgets.map((w, index) => {
if (typeof w === "string") {
return {
widgetId: w,
id: w + "_" + index,
enabled: true
};
} else {
const obj = Object.assign({}, w);
obj.widgetId = w.id || w.widgetId;
obj.id = (w.id || w.widgetId) + "_" + index;
obj.enabled = w.enabled !== false;
return obj;
}
});
return JSON.stringify(mapped);
}
ScriptModel { ScriptModel {
id: leftWidgetsModel id: leftWidgetsModel
values: JSON.parse(root._leftWidgetsJson) values: {
root.barConfig;
const leftWidgets = root.barConfig?.leftWidgets || [];
return leftWidgets.map((w, index) => {
if (typeof w === "string") {
return {
widgetId: w,
id: w + "_" + index,
enabled: true
};
} else {
const obj = Object.assign({}, w);
obj.widgetId = w.id || w.widgetId;
obj.id = (w.id || w.widgetId) + "_" + index;
obj.enabled = w.enabled !== false;
return obj;
}
});
}
} }
ScriptModel { ScriptModel {
id: centerWidgetsModel id: centerWidgetsModel
values: JSON.parse(root._centerWidgetsJson) values: {
root.barConfig;
const centerWidgets = root.barConfig?.centerWidgets || [];
return centerWidgets.map((w, index) => {
if (typeof w === "string") {
return {
widgetId: w,
id: w + "_" + index,
enabled: true
};
} else {
const obj = Object.assign({}, w);
obj.widgetId = w.id || w.widgetId;
obj.id = (w.id || w.widgetId) + "_" + index;
obj.enabled = w.enabled !== false;
return obj;
}
});
}
} }
ScriptModel { ScriptModel {
id: rightWidgetsModel id: rightWidgetsModel
values: JSON.parse(root._rightWidgetsJson) values: {
root.barConfig;
const rightWidgets = root.barConfig?.rightWidgets || [];
return rightWidgets.map((w, index) => {
if (typeof w === "string") {
return {
widgetId: w,
id: w + "_" + index,
enabled: true
};
} else {
const obj = Object.assign({}, w);
obj.widgetId = w.id || w.widgetId;
obj.id = (w.id || w.widgetId) + "_" + index;
obj.enabled = w.enabled !== false;
return obj;
}
});
}
} }
function triggerControlCenterOnFocusedScreen() { function triggerControlCenterOnFocusedScreen() {
+56 -14
View File
@@ -561,7 +561,10 @@ Item {
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) section: topBarContent.getWidgetSection(parent)
parentScreen: barWindow.screen parentScreen: barWindow.screen
popoutTarget: clipboardHistoryPopoutLoader.item ?? null popoutTarget: {
clipboardHistoryPopoutLoader.active = true;
return clipboardHistoryPopoutLoader.item;
}
function openClipboardPopout(initialTab) { function openClipboardPopout(initialTab) {
clipboardHistoryPopoutLoader.active = true; clipboardHistoryPopoutLoader.active = true;
@@ -756,7 +759,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
section: topBarContent.getWidgetSection(parent) || "center" section: topBarContent.getWidgetSection(parent) || "center"
popoutTarget: dankDashPopoutLoader.item ?? null popoutTarget: {
dankDashPopoutLoader.active = true;
return dankDashPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
Component.onCompleted: { Component.onCompleted: {
@@ -820,7 +826,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
section: topBarContent.getWidgetSection(parent) || "center" section: topBarContent.getWidgetSection(parent) || "center"
popoutTarget: dankDashPopoutLoader.item ?? null popoutTarget: {
dankDashPopoutLoader.active = true;
return dankDashPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onClicked: { onClicked: {
dankDashPopoutLoader.active = true; dankDashPopoutLoader.active = true;
@@ -872,7 +881,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
section: topBarContent.getWidgetSection(parent) || "center" section: topBarContent.getWidgetSection(parent) || "center"
popoutTarget: dankDashPopoutLoader.item ?? null popoutTarget: {
dankDashPopoutLoader.active = true;
return dankDashPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onClicked: { onClicked: {
dankDashPopoutLoader.active = true; dankDashPopoutLoader.active = true;
@@ -956,7 +968,10 @@ Item {
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: processListPopoutLoader.item ?? null popoutTarget: {
processListPopoutLoader.active = true;
return processListPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
widgetData: parent.widgetData widgetData: parent.widgetData
onCpuClicked: { onCpuClicked: {
@@ -989,7 +1004,10 @@ Item {
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: processListPopoutLoader.item ?? null popoutTarget: {
processListPopoutLoader.active = true;
return processListPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
widgetData: parent.widgetData widgetData: parent.widgetData
onRamClicked: { onRamClicked: {
@@ -1036,7 +1054,10 @@ Item {
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: processListPopoutLoader.item ?? null popoutTarget: {
processListPopoutLoader.active = true;
return processListPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
widgetData: parent.widgetData widgetData: parent.widgetData
onCpuTempClicked: { onCpuTempClicked: {
@@ -1069,7 +1090,10 @@ Item {
widgetThickness: barWindow.widgetThickness widgetThickness: barWindow.widgetThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: processListPopoutLoader.item ?? null popoutTarget: {
processListPopoutLoader.active = true;
return processListPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
widgetData: parent.widgetData widgetData: parent.widgetData
onGpuTempClicked: { onGpuTempClicked: {
@@ -1110,7 +1134,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: notificationCenterLoader.item ?? null popoutTarget: {
notificationCenterLoader.active = true;
return notificationCenterLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onClicked: { onClicked: {
notificationCenterLoader.active = true; notificationCenterLoader.active = true;
@@ -1145,7 +1172,10 @@ Item {
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
barSpacing: barConfig?.spacing ?? 4 barSpacing: barConfig?.spacing ?? 4
barConfig: topBarContent.barConfig barConfig: topBarContent.barConfig
popoutTarget: batteryPopoutLoader.item ?? null popoutTarget: {
batteryPopoutLoader.active = true;
return batteryPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onToggleBatteryPopup: { onToggleBatteryPopup: {
batteryPopoutLoader.active = true; batteryPopoutLoader.active = true;
@@ -1178,7 +1208,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "center" section: topBarContent.getWidgetSection(parent) || "center"
popoutTarget: layoutPopoutLoader.item ?? null popoutTarget: {
layoutPopoutLoader.active = true;
return layoutPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onToggleLayoutPopup: { onToggleLayoutPopup: {
layoutPopoutLoader.active = true; layoutPopoutLoader.active = true;
@@ -1211,7 +1244,10 @@ Item {
barSpacing: barConfig?.spacing ?? 4 barSpacing: barConfig?.spacing ?? 4
barConfig: topBarContent.barConfig barConfig: topBarContent.barConfig
isAutoHideBar: topBarContent.barConfig?.autoHide ?? false isAutoHideBar: topBarContent.barConfig?.autoHide ?? false
popoutTarget: vpnPopoutLoader.item ?? null popoutTarget: {
vpnPopoutLoader.active = true;
return vpnPopoutLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onToggleVpnPopup: { onToggleVpnPopup: {
vpnPopoutLoader.active = true; vpnPopoutLoader.active = true;
@@ -1245,7 +1281,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: controlCenterLoader.item ?? null popoutTarget: {
controlCenterLoader.active = true;
return controlCenterLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
screenName: barWindow.screen?.name || "" screenName: barWindow.screen?.name || ""
screenModel: barWindow.screen?.model || "" screenModel: barWindow.screen?.model || ""
@@ -1395,7 +1434,10 @@ Item {
barThickness: barWindow.effectiveBarThickness barThickness: barWindow.effectiveBarThickness
axis: barWindow.axis axis: barWindow.axis
section: topBarContent.getWidgetSection(parent) || "right" section: topBarContent.getWidgetSection(parent) || "right"
popoutTarget: systemUpdateLoader.item ?? null popoutTarget: {
systemUpdateLoader.active = true;
return systemUpdateLoader.item;
}
parentScreen: barWindow.screen parentScreen: barWindow.screen
onClicked: { onClicked: {
systemUpdateLoader.active = true; systemUpdateLoader.active = true;
+26 -72
View File
@@ -131,55 +131,38 @@ PanelWindow {
readonly property real _wingR: Math.max(0, wingtipsRadius) readonly property real _wingR: Math.max(0, wingtipsRadius)
readonly property color _surfaceContainer: Theme.surfaceContainer readonly property color _surfaceContainer: Theme.surfaceContainer
readonly property string _barId: barConfig?.id ?? "default" readonly property string _barId: barConfig?.id ?? "default"
property real _backgroundAlpha: barConfig?.transparency ?? 1.0 readonly property var _liveBarConfig: SettingsData.barConfigs.find(c => c.id === _barId) || barConfig
readonly property real _backgroundAlpha: _liveBarConfig?.transparency ?? 1.0
readonly property color _bgColor: Theme.withAlpha(_surfaceContainer, _backgroundAlpha) readonly property color _bgColor: Theme.withAlpha(_surfaceContainer, _backgroundAlpha)
function _updateBackgroundAlpha() {
const live = SettingsData.barConfigs.find(c => c.id === _barId);
_backgroundAlpha = (live ?? barConfig)?.transparency ?? 1.0;
}
readonly property real _dpr: CompositorService.getScreenScale(barWindow.screen) readonly property real _dpr: CompositorService.getScreenScale(barWindow.screen)
property string screenName: modelData.name property string screenName: modelData.name
property bool hasMaximizedToplevel: false readonly property bool hasMaximizedToplevel: {
property bool shouldHideForWindows: false if (!(barConfig?.maximizeDetection ?? true))
return false;
function _updateHasMaximizedToplevel() { if (!CompositorService.isHyprland && !CompositorService.isNiri)
if (!(barConfig?.maximizeDetection ?? true)) { return false;
hasMaximizedToplevel = false;
return;
}
if (!CompositorService.isHyprland && !CompositorService.isNiri) {
hasMaximizedToplevel = false;
return;
}
const filtered = CompositorService.filterCurrentWorkspace(CompositorService.sortedToplevels, screenName); const filtered = CompositorService.filterCurrentWorkspace(CompositorService.sortedToplevels, screenName);
for (let i = 0; i < filtered.length; i++) { for (let i = 0; i < filtered.length; i++) {
if (filtered[i]?.maximized) { if (filtered[i]?.maximized)
hasMaximizedToplevel = true; return true;
return;
} }
} return false;
hasMaximizedToplevel = false;
} }
function _updateShouldHideForWindows() { readonly property bool shouldHideForWindows: {
if (!(barConfig?.showOnWindowsOpen ?? false)) { if (!(barConfig?.showOnWindowsOpen ?? false))
shouldHideForWindows = false; return false;
return; if (!(barConfig?.autoHide ?? false))
} return false;
if (!(barConfig?.autoHide ?? false)) { if (!CompositorService.isNiri && !CompositorService.isHyprland)
shouldHideForWindows = false; return false;
return;
}
if (!CompositorService.isNiri && !CompositorService.isHyprland) {
shouldHideForWindows = false;
return;
}
if (CompositorService.isNiri) { if (CompositorService.isNiri) {
NiriService.windows;
let currentWorkspaceId = null; let currentWorkspaceId = null;
for (let i = 0; i < NiriService.allWorkspaces.length; i++) { for (let i = 0; i < NiriService.allWorkspaces.length; i++) {
const ws = NiriService.allWorkspaces[i]; const ws = NiriService.allWorkspaces[i];
@@ -189,10 +172,8 @@ PanelWindow {
} }
} }
if (currentWorkspaceId === null) { if (currentWorkspaceId === null)
shouldHideForWindows = false; return false;
return;
}
let hasTiled = false; let hasTiled = false;
let hasFloatingTouchingBar = false; let hasFloatingTouchingBar = false;
@@ -236,12 +217,14 @@ PanelWindow {
} }
} }
shouldHideForWindows = hasTiled || hasFloatingTouchingBar; if (hasTiled)
return; return true;
return hasFloatingTouchingBar;
} }
const filtered = CompositorService.filterCurrentWorkspace(CompositorService.sortedToplevels, screenName); const filtered = CompositorService.filterCurrentWorkspace(CompositorService.sortedToplevels, screenName);
shouldHideForWindows = filtered.length > 0; return filtered.length > 0;
} }
property real effectiveSpacing: hasMaximizedToplevel ? 0 : (barConfig?.spacing ?? 4) property real effectiveSpacing: hasMaximizedToplevel ? 0 : (barConfig?.spacing ?? 4)
@@ -373,9 +356,6 @@ PanelWindow {
} }
updateGpuTempConfig(); updateGpuTempConfig();
_updateBackgroundAlpha();
_updateHasMaximizedToplevel();
_updateShouldHideForWindows();
inhibitorInitTimer.start(); inhibitorInitTimer.start();
} }
@@ -452,37 +432,11 @@ PanelWindow {
Connections { Connections {
function onBarConfigChanged() { function onBarConfigChanged() {
barWindow.updateGpuTempConfig(); barWindow.updateGpuTempConfig();
barWindow._updateBackgroundAlpha();
barWindow._updateHasMaximizedToplevel();
barWindow._updateShouldHideForWindows();
} }
target: rootWindow target: rootWindow
} }
Connections {
target: SettingsData
function onBarConfigsChanged() {
barWindow._updateBackgroundAlpha();
}
}
Connections {
target: CompositorService
function onToplevelsChanged() {
barWindow._updateHasMaximizedToplevel();
barWindow._updateShouldHideForWindows();
}
}
Connections {
target: NiriService
function onAllWorkspacesChanged() {
barWindow._updateHasMaximizedToplevel();
barWindow._updateShouldHideForWindows();
}
}
Connections { Connections {
function onNvidiaGpuTempEnabledChanged() { function onNvidiaGpuTempEnabledChanged() {
barWindow.updateGpuTempConfig(); barWindow.updateGpuTempConfig();
@@ -584,7 +584,8 @@ BasePill {
property string tooltipText: { property string tooltipText: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
const desktopEntry = appId ? DesktopEntries.heuristicLookup(appId) : null; const moddedId = Paths.moddedAppId(appId);
const desktopEntry = moddedId ? DesktopEntries.heuristicLookup(moddedId) : null;
const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown"; const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown";
if (modelData.type === "grouped" && windowCount > 1) { if (modelData.type === "grouped" && windowCount > 1) {
@@ -689,8 +690,9 @@ BasePill {
if (!appItem.appId) if (!appItem.appId)
return ""; return "";
if (modelData.isCoreApp) if (modelData.isCoreApp)
return ""; return ""; // Explicitly skip if core app to avoid flickering or wrong look ups
const desktopEntry = DesktopEntries.heuristicLookup(appItem.appId); const moddedId = Paths.moddedAppId(appItem.appId);
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
return Paths.getAppIcon(appItem.appId, desktopEntry); return Paths.getAppIcon(appItem.appId, desktopEntry);
} }
smooth: true smooth: true
@@ -747,7 +749,8 @@ BasePill {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
if (!appItem.appId) if (!appItem.appId)
return "?"; return "?";
const desktopEntry = DesktopEntries.heuristicLookup(appItem.appId); const moddedId = Paths.moddedAppId(appItem.appId);
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
const appName = Paths.getAppName(appItem.appId, desktopEntry); const appName = Paths.getAppName(appItem.appId, desktopEntry);
return appName.charAt(0).toUpperCase(); return appName.charAt(0).toUpperCase();
} }
@@ -9,6 +9,9 @@ BasePill {
id: root id: root
property bool isActive: false property bool isActive: false
property var popoutTarget: null
property var parentScreen: null
property Item windowRoot: (Window.window ? Window.window.contentItem : null)
property bool isAutoHideBar: false property bool isAutoHideBar: false
signal clipboardClicked signal clipboardClicked
@@ -93,7 +93,7 @@ BasePill {
id: textBox id: textBox
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
implicitWidth: root.minimumWidth ? Math.max(cpuBaseline.width, cpuCurrent.width) : cpuCurrent.width implicitWidth: root.minimumWidth ? Math.max(cpuBaseline.width, cpuText.paintedWidth) : cpuText.paintedWidth
implicitHeight: cpuText.implicitHeight implicitHeight: cpuText.implicitHeight
width: implicitWidth width: implicitWidth
@@ -105,12 +105,6 @@ BasePill {
text: "88%" text: "88%"
} }
StyledTextMetrics {
id: cpuCurrent
font.pixelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText)
text: cpuText.text
}
StyledText { StyledText {
id: cpuText id: cpuText
text: { text: {
@@ -18,43 +18,9 @@ BasePill {
readonly property real contentWidth: hasActivePrivacy ? (activeCount * 18 + (activeCount - 1) * Theme.spacingXS) : 0 readonly property real contentWidth: hasActivePrivacy ? (activeCount * 18 + (activeCount - 1) * Theme.spacingXS) : 0
readonly property real contentHeight: hasActivePrivacy ? (activeCount * 18 + (activeCount - 1) * Theme.spacingXS) : 0 readonly property real contentHeight: hasActivePrivacy ? (activeCount * 18 + (activeCount - 1) * Theme.spacingXS) : 0
visible: hasActivePrivacy
opacity: hasActivePrivacy ? 1 : 0 opacity: hasActivePrivacy ? 1 : 0
enabled: hasActivePrivacy
states: [
State {
name: "hidden_horizontal"
when: !hasActivePrivacy && !isVerticalOrientation
PropertyChanges {
target: root
width: 0
}
},
State {
name: "hidden_vertical"
when: !hasActivePrivacy && isVerticalOrientation
PropertyChanges {
target: root
height: 0
}
}
]
transitions: [
Transition {
NumberAnimation {
properties: "width,height"
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
]
Behavior on opacity {
NumberAnimation {
duration: Theme.shortDuration
easing.type: Theme.standardEasing
}
}
content: Component { content: Component {
Item { Item {
@@ -69,7 +35,7 @@ BasePill {
Item { Item {
width: 18 width: 18
height: 18 height: 18
visible: root.showMicIcon || PrivacyService.microphoneActive visible: PrivacyService.microphoneActive
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
DankIcon { DankIcon {
@@ -81,8 +47,8 @@ BasePill {
return "mic"; return "mic";
} }
size: Theme.iconSizeSmall size: Theme.iconSizeSmall
color: PrivacyService.microphoneActive ? Theme.error : Theme.surfaceText color: Theme.error
filled: PrivacyService.microphoneActive filled: true
anchors.centerIn: parent anchors.centerIn: parent
} }
} }
@@ -90,14 +56,14 @@ BasePill {
Item { Item {
width: 18 width: 18
height: 18 height: 18
visible: root.showCameraIcon || PrivacyService.cameraActive visible: PrivacyService.cameraActive
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
DankIcon { DankIcon {
name: "camera_video" name: "camera_video"
size: Theme.iconSizeSmall size: Theme.iconSizeSmall
color: PrivacyService.cameraActive ? Theme.error : Theme.surfaceText color: Theme.widgetTextColor
filled: PrivacyService.cameraActive filled: true
anchors.centerIn: parent anchors.centerIn: parent
} }
@@ -110,21 +76,20 @@ BasePill {
anchors.top: parent.top anchors.top: parent.top
anchors.rightMargin: -2 anchors.rightMargin: -2
anchors.topMargin: -1 anchors.topMargin: -1
visible: PrivacyService.cameraActive
} }
} }
Item { Item {
width: 18 width: 18
height: 18 height: 18
visible: root.showScreenSharingIcon || PrivacyService.screensharingActive visible: PrivacyService.screensharingActive
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
DankIcon { DankIcon {
name: "screen_share" name: "screen_share"
size: Theme.iconSizeSmall size: Theme.iconSizeSmall
color: PrivacyService.screensharingActive ? Theme.warning : Theme.surfaceText color: Theme.warning
filled: PrivacyService.screensharingActive filled: true
anchors.centerIn: parent anchors.centerIn: parent
} }
} }
@@ -151,7 +116,7 @@ BasePill {
} }
size: Theme.iconSizeSmall size: Theme.iconSizeSmall
color: PrivacyService.microphoneActive ? Theme.error : Theme.surfaceText color: PrivacyService.microphoneActive ? Theme.error : Theme.surfaceText
filled: PrivacyService.microphoneActive filled: true
anchors.centerIn: parent anchors.centerIn: parent
} }
} }
@@ -166,7 +131,7 @@ BasePill {
name: "camera_video" name: "camera_video"
size: Theme.iconSizeSmall size: Theme.iconSizeSmall
color: PrivacyService.cameraActive ? Theme.error : Theme.surfaceText color: PrivacyService.cameraActive ? Theme.error : Theme.surfaceText
filled: PrivacyService.cameraActive filled: true
anchors.centerIn: parent anchors.centerIn: parent
} }
@@ -193,7 +158,7 @@ BasePill {
name: "screen_share" name: "screen_share"
size: Theme.iconSizeSmall size: Theme.iconSizeSmall
color: PrivacyService.screensharingActive ? Theme.warning : Theme.surfaceText color: PrivacyService.screensharingActive ? Theme.warning : Theme.surfaceText
filled: PrivacyService.screensharingActive filled: true
anchors.centerIn: parent anchors.centerIn: parent
} }
} }
@@ -244,4 +209,22 @@ BasePill {
} }
} }
} }
Behavior on width {
enabled: hasActivePrivacy && visible && !isVerticalOrientation
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
Behavior on height {
enabled: hasActivePrivacy && visible && isVerticalOrientation
NumberAnimation {
duration: Theme.mediumDuration
easing.type: Theme.emphasizedEasing
}
}
} }
@@ -241,17 +241,14 @@ BasePill {
property var toplevelData: isGrouped ? (modelData.windows.length > 0 ? modelData.windows[0].toplevel : null) : modelData property var toplevelData: isGrouped ? (modelData.windows.length > 0 ? modelData.windows[0].toplevel : null) : modelData
property bool isFocused: isGrouped ? (root.focusedAppId === appId) : (toplevelData ? toplevelData.activated : false) property bool isFocused: isGrouped ? (root.focusedAppId === appId) : (toplevelData ? toplevelData.activated : false)
property string appId: isGrouped ? modelData.appId : (modelData.appId || "") property string appId: isGrouped ? modelData.appId : (modelData.appId || "")
readonly property string effectiveAppId: {
root._appIdSubstitutionsTrigger;
return Paths.moddedAppId(appId);
}
property string windowTitle: toplevelData ? (toplevelData.title || "(Unnamed)") : "(Unnamed)" property string windowTitle: toplevelData ? (toplevelData.title || "(Unnamed)") : "(Unnamed)"
property var toplevelObject: toplevelData property var toplevelObject: toplevelData
property int windowCount: isGrouped ? modelData.windows.length : 1 property int windowCount: isGrouped ? modelData.windows.length : 1
property string tooltipText: { property string tooltipText: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
const desktopEntry = effectiveAppId ? DesktopEntries.heuristicLookup(effectiveAppId) : null; const moddedId = Paths.moddedAppId(appId);
const appName = effectiveAppId ? Paths.getAppName(effectiveAppId, desktopEntry) : "Unknown"; const desktopEntry = moddedId ? DesktopEntries.heuristicLookup(moddedId) : null;
const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown";
if (isGrouped && windowCount > 1) { if (isGrouped && windowCount > 1) {
return appName + " (" + windowCount + " windows)"; return appName + " (" + windowCount + " windows)";
@@ -287,10 +284,11 @@ BasePill {
source: { source: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
root._appIdSubstitutionsTrigger; root._appIdSubstitutionsTrigger;
if (!effectiveAppId) if (!appId)
return ""; return "";
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId); const moddedId = Paths.moddedAppId(appId);
return Paths.getAppIcon(effectiveAppId, desktopEntry); const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
return Paths.getAppIcon(appId, desktopEntry);
} }
smooth: true smooth: true
mipmap: true mipmap: true
@@ -313,18 +311,20 @@ BasePill {
size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale)
name: "sports_esports" name: "sports_esports"
color: Theme.widgetTextColor color: Theme.widgetTextColor
visible: !iconImg.visible && Paths.isSteamApp(effectiveAppId) visible: !iconImg.visible && Paths.isSteamApp(appId)
} }
Text { Text {
anchors.centerIn: parent anchors.centerIn: parent
visible: !iconImg.visible && !Paths.isSteamApp(effectiveAppId) visible: !iconImg.visible && !Paths.isSteamApp(appId)
text: { text: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
if (!effectiveAppId) if (!appId)
return "?"; return "?";
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId);
const appName = Paths.getAppName(effectiveAppId, desktopEntry); const moddedId = Paths.moddedAppId(appId);
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
const appName = Paths.getAppName(appId, desktopEntry);
return appName.charAt(0).toUpperCase(); return appName.charAt(0).toUpperCase();
} }
font.pixelSize: 10 font.pixelSize: 10
@@ -496,17 +496,14 @@ BasePill {
property var toplevelData: isGrouped ? (modelData.windows.length > 0 ? modelData.windows[0].toplevel : null) : modelData property var toplevelData: isGrouped ? (modelData.windows.length > 0 ? modelData.windows[0].toplevel : null) : modelData
property bool isFocused: isGrouped ? (root.focusedAppId === appId) : (toplevelData ? toplevelData.activated : false) property bool isFocused: isGrouped ? (root.focusedAppId === appId) : (toplevelData ? toplevelData.activated : false)
property string appId: isGrouped ? modelData.appId : (modelData.appId || "") property string appId: isGrouped ? modelData.appId : (modelData.appId || "")
readonly property string effectiveAppId: {
root._appIdSubstitutionsTrigger;
return Paths.moddedAppId(appId);
}
property string windowTitle: toplevelData ? (toplevelData.title || "(Unnamed)") : "(Unnamed)" property string windowTitle: toplevelData ? (toplevelData.title || "(Unnamed)") : "(Unnamed)"
property var toplevelObject: toplevelData property var toplevelObject: toplevelData
property int windowCount: isGrouped ? modelData.windows.length : 1 property int windowCount: isGrouped ? modelData.windows.length : 1
property string tooltipText: { property string tooltipText: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
const desktopEntry = effectiveAppId ? DesktopEntries.heuristicLookup(effectiveAppId) : null; const moddedId = Paths.moddedAppId(appId);
const appName = effectiveAppId ? Paths.getAppName(effectiveAppId, desktopEntry) : "Unknown"; const desktopEntry = moddedId ? DesktopEntries.heuristicLookup(moddedId) : null;
const appName = appId ? Paths.getAppName(appId, desktopEntry) : "Unknown";
if (isGrouped && windowCount > 1) { if (isGrouped && windowCount > 1) {
return appName + " (" + windowCount + " windows)"; return appName + " (" + windowCount + " windows)";
@@ -541,10 +538,11 @@ BasePill {
source: { source: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
root._appIdSubstitutionsTrigger; root._appIdSubstitutionsTrigger;
if (!effectiveAppId) if (!appId)
return ""; return "";
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId); const moddedId = Paths.moddedAppId(appId);
return Paths.getAppIcon(effectiveAppId, desktopEntry); const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
return Paths.getAppIcon(appId, desktopEntry);
} }
smooth: true smooth: true
mipmap: true mipmap: true
@@ -567,18 +565,20 @@ BasePill {
size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale) size: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale)
name: "sports_esports" name: "sports_esports"
color: Theme.widgetTextColor color: Theme.widgetTextColor
visible: !iconImg.visible && Paths.isSteamApp(effectiveAppId) visible: !iconImg.visible && Paths.isSteamApp(appId)
} }
Text { Text {
anchors.centerIn: parent anchors.centerIn: parent
visible: !iconImg.visible && !Paths.isSteamApp(effectiveAppId) visible: !iconImg.visible && !Paths.isSteamApp(appId)
text: { text: {
root._desktopEntriesUpdateTrigger; root._desktopEntriesUpdateTrigger;
if (!effectiveAppId) if (!appId)
return "?"; return "?";
const desktopEntry = DesktopEntries.heuristicLookup(effectiveAppId);
const appName = Paths.getAppName(effectiveAppId, desktopEntry); const moddedId = Paths.moddedAppId(appId);
const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
const appName = Paths.getAppName(appId, desktopEntry);
return appName.charAt(0).toUpperCase(); return appName.charAt(0).toUpperCase();
} }
font.pixelSize: 10 font.pixelSize: 10
@@ -282,15 +282,14 @@ Item {
} }
const keyBase = (w.app_id || w.appId || w.class || w.windowClass || "unknown"); const keyBase = (w.app_id || w.appId || w.class || w.windowClass || "unknown");
const moddedId = Paths.moddedAppId(keyBase); const key = isActiveWs || !SettingsData.groupWorkspaceApps ? `${keyBase}_${i}` : keyBase;
const key = isActiveWs || !SettingsData.groupWorkspaceApps ? `${moddedId}_${i}` : moddedId;
if (!byApp[key]) { if (!byApp[key]) {
const isQuickshell = keyBase === "org.quickshell"; const isQuickshell = keyBase === "org.quickshell";
const isSteamApp = Paths.isSteamApp(moddedId); const isSteamApp = Paths.isSteamApp(keyBase);
const moddedId = Paths.moddedAppId(keyBase);
const desktopEntry = DesktopEntries.heuristicLookup(moddedId); const desktopEntry = DesktopEntries.heuristicLookup(moddedId);
const icon = Paths.getAppIcon(moddedId, desktopEntry); const icon = Paths.getAppIcon(keyBase, desktopEntry);
const appName = Paths.getAppName(moddedId, desktopEntry);
byApp[key] = { byApp[key] = {
"type": "icon", "type": "icon",
"icon": icon, "icon": icon,
@@ -299,7 +298,7 @@ Item {
"active": !!((w.activated || w.is_focused) || (CompositorService.isNiri && w.is_focused)), "active": !!((w.activated || w.is_focused) || (CompositorService.isNiri && w.is_focused)),
"count": 1, "count": 1,
"windowId": w.address || w.id, "windowId": w.address || w.id,
"fallbackText": appName || "" "fallbackText": w.appId || w.class || w.title || ""
}; };
} else { } else {
byApp[key].count++; byApp[key].count++;
@@ -1474,44 +1473,9 @@ Item {
IconImage { IconImage {
id: rowAppIcon id: rowAppIcon
anchors.fill: parent anchors.fill: parent
source: modelData.icon || "" source: modelData.icon
opacity: modelData.active ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6 opacity: modelData.active ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6
visible: !modelData.isQuickshell && !modelData.isSteamApp && status === Image.Ready visible: !modelData.isQuickshell && !modelData.isSteamApp
}
Rectangle {
anchors.fill: parent
visible: !modelData.isQuickshell && !modelData.isSteamApp && rowAppIcon.status !== Image.Ready
color: Theme.surfaceContainer
radius: Theme.cornerRadius * (root.appIconSize / 40)
border.width: 1
border.color: Theme.primarySelected
opacity: (modelData.active || isActive) ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6
StyledText {
anchors.centerIn: parent
text: (modelData.fallbackText || "?").charAt(0).toUpperCase()
font.pixelSize: parent.width * 0.45
color: Theme.primary
font.weight: Font.Bold
}
}
Rectangle {
anchors.fill: parent
visible: !modelData.isQuickshell && modelData.isSteamApp && rowSteamIcon.status !== Image.Ready
color: Theme.surfaceContainer
radius: Theme.cornerRadius * (root.appIconSize / 40)
border.width: 1
border.color: Theme.primarySelected
opacity: (modelData.active || isActive) ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6
DankIcon {
anchors.centerIn: parent
size: parent.width * 0.7
name: "sports_esports"
color: Theme.primary
}
} }
IconImage { IconImage {
@@ -1628,44 +1592,9 @@ Item {
IconImage { IconImage {
id: colAppIcon id: colAppIcon
anchors.fill: parent anchors.fill: parent
source: modelData.icon || "" source: modelData.icon
opacity: modelData.active ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6 opacity: modelData.active ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6
visible: !modelData.isQuickshell && !modelData.isSteamApp && status === Image.Ready visible: !modelData.isQuickshell && !modelData.isSteamApp
}
Rectangle {
anchors.fill: parent
visible: !modelData.isQuickshell && !modelData.isSteamApp && colAppIcon.status !== Image.Ready
color: Theme.surfaceContainer
radius: Theme.cornerRadius * (root.appIconSize / 40)
border.width: 1
border.color: Theme.primarySelected
opacity: (modelData.active || isActive) ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6
StyledText {
anchors.centerIn: parent
text: (modelData.fallbackText || "?").charAt(0).toUpperCase()
font.pixelSize: parent.width * 0.45
color: Theme.primary
font.weight: Font.Bold
}
}
Rectangle {
anchors.fill: parent
visible: !modelData.isQuickshell && modelData.isSteamApp && colSteamIcon.status !== Image.Ready
color: Theme.surfaceContainer
radius: Theme.cornerRadius * (root.appIconSize / 40)
border.width: 1
border.color: Theme.primarySelected
opacity: (modelData.active || isActive) ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6
DankIcon {
anchors.centerIn: parent
size: parent.width * 0.7
name: "sports_esports"
color: Theme.primary
}
} }
IconImage { IconImage {
+7 -13
View File
@@ -378,27 +378,21 @@ Variants {
const screenY = dock.screen ? (dock.screen.y || 0) : 0; const screenY = dock.screen ? (dock.screen.y || 0) : 0;
const screenHeight = dock.screen ? dock.screen.height : 0; const screenHeight = dock.screen ? dock.screen.height : 0;
const gap = Theme.spacingS;
const bgMargin = barSpacing + SettingsData.dockMargin + 1 + dock.borderThickness;
const btnW = dock.hoveredButton.width;
const btnH = dock.hoveredButton.height;
if (!dock.isVertical) { if (!dock.isVertical) {
const isBottom = SettingsData.dockPosition === SettingsData.Position.Bottom; const isBottom = SettingsData.dockPosition === SettingsData.Position.Bottom;
const globalX = buttonGlobalPos.x + btnW / 2 + adjacentLeftBarWidth; const globalX = buttonGlobalPos.x + dock.hoveredButton.width / 2 + adjacentLeftBarWidth;
const tooltipHeight = 32; const tooltipHeight = 32;
const totalFromEdge = bgMargin + dockBackground.height + dock.borderThickness + gap; const tooltipOffset = dock.effectiveBarHeight + SettingsData.dockSpacing + SettingsData.dockBottomGap + SettingsData.dockMargin + barSpacing + Theme.spacingM;
const screenRelativeY = isBottom ? (screenHeight - totalFromEdge - tooltipHeight) : totalFromEdge; const screenRelativeY = isBottom ? (screenHeight - tooltipOffset - tooltipHeight) : tooltipOffset;
dockTooltip.show(tooltipText, globalX, screenRelativeY, dock.screen, false, false); dockTooltip.show(tooltipText, globalX, screenRelativeY, dock.screen, false, false);
return; return;
} }
const isLeft = SettingsData.dockPosition === SettingsData.Position.Left; const isLeft = SettingsData.dockPosition === SettingsData.Position.Left;
const screenWidth = dock.screen ? dock.screen.width : 0; const tooltipOffset = dock.effectiveBarHeight + SettingsData.dockSpacing + SettingsData.dockBottomGap + SettingsData.dockMargin + barSpacing + Theme.spacingM;
const totalFromEdge = bgMargin + dockBackground.width + dock.borderThickness + gap; const tooltipX = isLeft ? tooltipOffset : (dock.screen.width - tooltipOffset);
const tooltipX = isLeft ? (screenX + totalFromEdge) : (screenX + screenWidth - totalFromEdge); const screenRelativeY = buttonGlobalPos.y - screenY + dock.hoveredButton.height / 2 + adjacentTopBarHeight;
const screenRelativeY = buttonGlobalPos.y - screenY + btnH / 2 + adjacentTopBarHeight; dockTooltip.show(tooltipText, screenX + tooltipX, screenRelativeY, dock.screen, isLeft, !isLeft);
dockTooltip.show(tooltipText, tooltipX, screenRelativeY, dock.screen, isLeft, !isLeft);
} }
Connections { Connections {
+120 -163
View File
@@ -28,58 +28,7 @@ Item {
return pos === SettingsData.Position.Left || pos === SettingsData.Position.Right; return pos === SettingsData.Position.Left || pos === SettingsData.Position.Right;
} }
Timer {
id: horizontalBarChangeDebounce
interval: 500
repeat: false
onTriggered: {
const verticalBars = SettingsData.barConfigs.filter(cfg => {
const pos = cfg.position ?? SettingsData.Position.Top;
return pos === SettingsData.Position.Left || pos === SettingsData.Position.Right;
});
verticalBars.forEach(bar => {
if (!bar.enabled)
return;
SettingsData.updateBarConfig(bar.id, {
enabled: false
});
Qt.callLater(() => SettingsData.updateBarConfig(bar.id, {
enabled: true
}));
});
}
}
function _isBarActive(c) {
if (!c.enabled) return false;
const prefs = c.screenPreferences || ["all"];
if (prefs.length > 0) return true;
return (c.showOnLastDisplay ?? true) && Quickshell.screens.length === 1;
}
function notifyHorizontalBarChange() { function notifyHorizontalBarChange() {
const configs = SettingsData.barConfigs;
if (configs.length < 2)
return;
const hasHorizontal = configs.some(c => {
if (!_isBarActive(c)) return false;
const p = c.position ?? SettingsData.Position.Top;
return p === SettingsData.Position.Top || p === SettingsData.Position.Bottom;
});
if (!hasHorizontal)
return;
const hasVertical = configs.some(c => {
if (!_isBarActive(c)) return false;
const p = c.position ?? SettingsData.Position.Top;
return p === SettingsData.Position.Left || p === SettingsData.Position.Right;
});
if (!hasVertical)
return;
horizontalBarChangeDebounce.restart();
} }
function createNewBar() { function createNewBar() {
@@ -117,12 +66,7 @@ Item {
widgetOutlineColor: defaultBar.widgetOutlineColor || "primary", widgetOutlineColor: defaultBar.widgetOutlineColor || "primary",
widgetOutlineOpacity: defaultBar.widgetOutlineOpacity ?? 1.0, widgetOutlineOpacity: defaultBar.widgetOutlineOpacity ?? 1.0,
widgetOutlineThickness: defaultBar.widgetOutlineThickness ?? 1, widgetOutlineThickness: defaultBar.widgetOutlineThickness ?? 1,
widgetPadding: defaultBar.widgetPadding ?? 8,
maximizeWidgetIcons: defaultBar.maximizeWidgetIcons ?? false,
maximizeWidgetText: defaultBar.maximizeWidgetText ?? false,
removeWidgetPadding: defaultBar.removeWidgetPadding ?? false,
fontScale: defaultBar.fontScale ?? 1.0, fontScale: defaultBar.fontScale ?? 1.0,
iconScale: defaultBar.iconScale ?? 1.0,
autoHide: defaultBar.autoHide ?? false, autoHide: defaultBar.autoHide ?? false,
autoHideDelay: defaultBar.autoHideDelay ?? 250, autoHideDelay: defaultBar.autoHideDelay ?? 250,
showOnWindowsOpen: defaultBar.showOnWindowsOpen ?? false, showOnWindowsOpen: defaultBar.showOnWindowsOpen ?? false,
@@ -172,7 +116,6 @@ Item {
SettingsData.updateBarConfig(barId, { SettingsData.updateBarConfig(barId, {
screenPreferences: prefs screenPreferences: prefs
}); });
notifyHorizontalBarChange();
} }
function getBarShowOnLastDisplay(barId) { function getBarShowOnLastDisplay(barId) {
@@ -184,8 +127,6 @@ Item {
SettingsData.updateBarConfig(barId, { SettingsData.updateBarConfig(barId, {
showOnLastDisplay: value showOnLastDisplay: value
}); });
if (Quickshell.screens.length === 1)
notifyHorizontalBarChange();
} }
DankFlickable { DankFlickable {
@@ -567,9 +508,12 @@ Item {
newPos = SettingsData.Position.Right; newPos = SettingsData.Position.Right;
break; break;
} }
const wasVertical = selectedBarIsVertical;
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
position: newPos position: newPos
}); });
const isVertical = newPos === SettingsData.Position.Left || newPos === SettingsData.Position.Right;
if (wasVertical !== isVertical || !isVertical)
notifyHorizontalBarChange(); notifyHorizontalBarChange();
} }
} }
@@ -619,6 +563,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
autoHideDelay: newValue autoHideDelay: newValue
}); });
notifyHorizontalBarChange();
} }
Binding { Binding {
@@ -638,6 +583,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
showOnWindowsOpen: toggled showOnWindowsOpen: toggled
}); });
notifyHorizontalBarChange();
} }
} }
} }
@@ -691,6 +637,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
openOnOverview: toggled openOnOverview: toggled
}); });
notifyHorizontalBarChange();
} }
} }
} }
@@ -807,6 +754,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
spacing: finalValue spacing: finalValue
}); });
notifyHorizontalBarChange();
} }
Binding { Binding {
@@ -828,6 +776,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
bottomGap: finalValue bottomGap: finalValue
}); });
notifyHorizontalBarChange();
} }
Binding { Binding {
@@ -849,6 +798,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
innerPadding: finalValue innerPadding: finalValue
}); });
notifyHorizontalBarChange();
} }
Binding { Binding {
@@ -861,12 +811,13 @@ Item {
SettingsSliderRow { SettingsSliderRow {
id: widgetPaddingSlider id: widgetPaddingSlider
text: I18n.tr("Padding") text: I18n.tr("Widget Padding Base")
value: selectedBarConfig?.widgetPadding ?? 8 description: I18n.tr("Material 3 Expressive padding")
value: selectedBarConfig?.widgetPadding ?? 12
minimum: 0 minimum: 0
maximum: 32 maximum: 32
unit: "px" unit: "px"
defaultValue: 8 defaultValue: 12
opacity: (selectedBarConfig?.removeWidgetPadding ?? false) ? 0.5 : 1.0 opacity: (selectedBarConfig?.removeWidgetPadding ?? false) ? 0.5 : 1.0
enabled: !(selectedBarConfig?.removeWidgetPadding ?? false) enabled: !(selectedBarConfig?.removeWidgetPadding ?? false)
onSliderValueChanged: newValue => { onSliderValueChanged: newValue => {
@@ -897,6 +848,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
popupGapsAuto: checked popupGapsAuto: checked
}); });
notifyHorizontalBarChange();
} }
} }
@@ -925,6 +877,7 @@ Item {
SettingsData.updateBarConfig(selectedBarId, { SettingsData.updateBarConfig(selectedBarId, {
popupGapsManual: finalValue popupGapsManual: finalValue
}); });
notifyHorizontalBarChange();
} }
Binding { Binding {
@@ -937,107 +890,6 @@ Item {
} }
} }
SettingsSliderCard {
id: fontScaleSliderCard
iconName: "text_fields"
title: I18n.tr("Font Scale")
description: I18n.tr("Scale DankBar font sizes independently")
visible: selectedBarConfig?.enabled
minimum: 50
maximum: 200
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
unit: "%"
defaultValue: 100
onSliderValueChanged: newValue => {
SettingsData.updateBarConfig(selectedBarId, {
fontScale: newValue / 100
});
}
Binding {
target: fontScaleSliderCard
property: "value"
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
restoreMode: Binding.RestoreBinding
}
}
SettingsSliderCard {
id: iconScaleSliderCard
iconName: "interests"
title: I18n.tr("Icon Scale")
description: I18n.tr("Scale DankBar icon sizes independently")
visible: selectedBarConfig?.enabled
minimum: 50
maximum: 200
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
unit: "%"
defaultValue: 100
onSliderValueChanged: newValue => {
SettingsData.updateBarConfig(selectedBarId, {
iconScale: newValue / 100
});
}
Binding {
target: iconScaleSliderCard
property: "value"
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
restoreMode: Binding.RestoreBinding
}
}
SettingsCard {
iconName: "opacity"
title: I18n.tr("Transparency")
settingKey: "barTransparency"
visible: selectedBarConfig?.enabled
SettingsSliderRow {
id: barTransparencySlider
text: I18n.tr("Bar Transparency")
value: (selectedBarConfig?.transparency ?? 1.0) * 100
minimum: 0
maximum: 100
unit: "%"
defaultValue: 100
onSliderDragFinished: finalValue => {
SettingsData.updateBarConfig(selectedBarId, {
transparency: finalValue / 100
});
}
Binding {
target: barTransparencySlider
property: "value"
value: (selectedBarConfig?.transparency ?? 1.0) * 100
restoreMode: Binding.RestoreBinding
}
}
SettingsSliderRow {
id: widgetTransparencySlider
text: I18n.tr("Widget Transparency")
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
minimum: 0
maximum: 100
unit: "%"
defaultValue: 100
onSliderDragFinished: finalValue => {
SettingsData.updateBarConfig(selectedBarId, {
widgetTransparency: finalValue / 100
});
}
Binding {
target: widgetTransparencySlider
property: "value"
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
restoreMode: Binding.RestoreBinding
}
}
}
SettingsCard { SettingsCard {
iconName: "rounded_corner" iconName: "rounded_corner"
title: I18n.tr("Corners & Background") title: I18n.tr("Corners & Background")
@@ -1447,6 +1299,111 @@ Item {
} }
} }
} }
SettingsCard {
iconName: "opacity"
title: I18n.tr("Transparency")
settingKey: "barTransparency"
visible: selectedBarConfig?.enabled
SettingsSliderRow {
id: barTransparencySlider
text: I18n.tr("Bar Transparency")
value: (selectedBarConfig?.transparency ?? 1.0) * 100
minimum: 0
maximum: 100
unit: "%"
defaultValue: 100
onSliderDragFinished: finalValue => {
SettingsData.updateBarConfig(selectedBarId, {
transparency: finalValue / 100
});
notifyHorizontalBarChange();
}
Binding {
target: barTransparencySlider
property: "value"
value: (selectedBarConfig?.transparency ?? 1.0) * 100
restoreMode: Binding.RestoreBinding
}
}
SettingsSliderRow {
id: widgetTransparencySlider
text: I18n.tr("Widget Transparency")
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
minimum: 0
maximum: 100
unit: "%"
defaultValue: 100
onSliderDragFinished: finalValue => {
SettingsData.updateBarConfig(selectedBarId, {
widgetTransparency: finalValue / 100
});
notifyHorizontalBarChange();
}
Binding {
target: widgetTransparencySlider
property: "value"
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
restoreMode: Binding.RestoreBinding
}
}
}
SettingsSliderCard {
id: fontScaleSliderCard
iconName: "text_fields"
title: I18n.tr("Font Scale")
description: I18n.tr("Scale DankBar font sizes independently")
visible: selectedBarConfig?.enabled
minimum: 50
maximum: 200
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
unit: "%"
defaultValue: 100
onSliderDragFinished: finalValue => {
SettingsData.updateBarConfig(selectedBarId, {
fontScale: finalValue / 100
});
notifyHorizontalBarChange();
}
Binding {
target: fontScaleSliderCard
property: "value"
value: Math.round((selectedBarConfig?.fontScale ?? 1.0) * 100)
restoreMode: Binding.RestoreBinding
}
}
SettingsSliderCard {
id: iconScaleSliderCard
iconName: "interests"
title: I18n.tr("Icon Scale")
description: I18n.tr("Scale DankBar icon sizes independently")
visible: selectedBarConfig?.enabled
minimum: 50
maximum: 200
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
unit: "%"
defaultValue: 100
onSliderDragFinished: finalValue => {
SettingsData.updateBarConfig(selectedBarId, {
iconScale: finalValue / 100
});
notifyHorizontalBarChange();
}
Binding {
target: iconScaleSliderCard
property: "value"
value: Math.round((selectedBarConfig?.iconScale ?? 1.0) * 100)
restoreMode: Binding.RestoreBinding
}
}
} }
} }
} }
@@ -231,16 +231,13 @@ Singleton {
const compositor = CompositorService.compositor; const compositor = CompositorService.compositor;
const profilesDir = getProfilesDir(); const profilesDir = getProfilesDir();
const profileFile = profilesDir + "/" + profileId + getProfileExtension(); const profileFile = profilesDir + "/" + profileId + getProfileExtension();
const isActive = SettingsData.getActiveDisplayProfile(compositor) === profileId;
profilesLoading = true; profilesLoading = true;
Proc.runCommand("delete-profile", ["rm", "-f", profileFile], (output, exitCode) => { Proc.runCommand("delete-profile", ["rm", "-f", profileFile], (output, exitCode) => {
profilesLoading = false; profilesLoading = false;
SettingsData.removeDisplayProfile(compositor, profileId); SettingsData.removeDisplayProfile(compositor, profileId);
if (isActive) { if (SettingsData.getActiveDisplayProfile(compositor) === profileId)
SettingsData.setActiveDisplayProfile(compositor, ""); SettingsData.setActiveDisplayProfile(compositor, "");
backendWriteOutputsConfig(allOutputs);
}
const updated = JSON.parse(JSON.stringify(validatedProfiles)); const updated = JSON.parse(JSON.stringify(validatedProfiles));
delete updated[profileId]; delete updated[profileId];
validatedProfiles = updated; validatedProfiles = updated;
@@ -1281,6 +1281,15 @@ Item {
} }
} }
DankActionButton {
iconName: "qr_code"
buttonSize: 28
visible: modelData.secured && modelData.saved
onClicked: {
PopoutService.showWifiQRCodeModal(modelData.ssid);
}
}
DankActionButton { DankActionButton {
iconName: isPinned ? "push_pin" : "push_pin" iconName: isPinned ? "push_pin" : "push_pin"
buttonSize: 28 buttonSize: 28
+2 -12
View File
@@ -386,22 +386,12 @@ Item {
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Theme.surfaceVariant color: Theme.surfaceVariant
Image { CachingImage {
anchors.fill: parent anchors.fill: parent
anchors.margins: 1 anchors.margins: 1
source: { imagePath: (Theme.wallpaperPath && !Theme.wallpaperPath.startsWith("#")) ? Theme.wallpaperPath : ""
var wp = Theme.wallpaperPath;
if (!wp || wp === "" || wp.startsWith("#"))
return "";
if (wp.startsWith("file://"))
wp = wp.substring(7);
return "file://" + wp.split('/').map(s => encodeURIComponent(s)).join('/');
}
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
visible: Theme.wallpaperPath && !Theme.wallpaperPath.startsWith("#") visible: Theme.wallpaperPath && !Theme.wallpaperPath.startsWith("#")
sourceSize.width: 120
sourceSize.height: 120
asynchronous: true
layer.enabled: true layer.enabled: true
layer.effect: MultiEffect { layer.effect: MultiEffect {
maskEnabled: true maskEnabled: true
+10 -22
View File
@@ -401,25 +401,19 @@ Item {
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Theme.surfaceVariant color: Theme.surfaceVariant
Image { CachingImage {
anchors.fill: parent anchors.fill: parent
anchors.margins: 1 anchors.margins: 1
source: { imagePath: {
var wp = SessionData.wallpaperPathLight; var lightWallpaper = SessionData.wallpaperPathLight;
if (wp === "" || wp.startsWith("#")) return (lightWallpaper !== "" && !lightWallpaper.startsWith("#")) ? lightWallpaper : "";
return "";
if (wp.startsWith("file://"))
wp = wp.substring(7);
return "file://" + wp.split('/').map(s => encodeURIComponent(s)).join('/');
} }
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
visible: { visible: {
var lightWallpaper = SessionData.wallpaperPathLight; var lightWallpaper = SessionData.wallpaperPathLight;
return lightWallpaper !== "" && !lightWallpaper.startsWith("#"); return lightWallpaper !== "" && !lightWallpaper.startsWith("#");
} }
sourceSize.width: 160 maxCacheSize: 160
sourceSize.height: 160
asynchronous: true
layer.enabled: true layer.enabled: true
layer.effect: MultiEffect { layer.effect: MultiEffect {
maskEnabled: true maskEnabled: true
@@ -591,25 +585,19 @@ Item {
radius: Theme.cornerRadius radius: Theme.cornerRadius
color: Theme.surfaceVariant color: Theme.surfaceVariant
Image { CachingImage {
anchors.fill: parent anchors.fill: parent
anchors.margins: 1 anchors.margins: 1
source: { imagePath: {
var wp = SessionData.wallpaperPathDark; var darkWallpaper = SessionData.wallpaperPathDark;
if (wp === "" || wp.startsWith("#")) return (darkWallpaper !== "" && !darkWallpaper.startsWith("#")) ? darkWallpaper : "";
return "";
if (wp.startsWith("file://"))
wp = wp.substring(7);
return "file://" + wp.split('/').map(s => encodeURIComponent(s)).join('/');
} }
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
visible: { visible: {
var darkWallpaper = SessionData.wallpaperPathDark; var darkWallpaper = SessionData.wallpaperPathDark;
return darkWallpaper !== "" && !darkWallpaper.startsWith("#"); return darkWallpaper !== "" && !darkWallpaper.startsWith("#");
} }
sourceSize.width: 160 maxCacheSize: 160
sourceSize.height: 160
asynchronous: true
layer.enabled: true layer.enabled: true
layer.effect: MultiEffect { layer.effect: MultiEffect {
maskEnabled: true maskEnabled: true
+6 -66
View File
@@ -83,61 +83,8 @@ Variants {
readonly property bool transitioning: transitionAnimation.running readonly property bool transitioning: transitionAnimation.running
property bool effectActive: false property bool effectActive: false
property bool _renderSettling: true
property bool useNextForEffect: false property bool useNextForEffect: false
property string pendingWallpaper: "" property string pendingWallpaper: ""
property string _deferredSource: ""
Connections {
target: currentWallpaper
function onStatusChanged() {
if (currentWallpaper.status === Image.Ready) {
root._renderSettling = true;
renderSettleTimer.restart();
}
}
}
function _recheckScreenScale() {
const newScale = CompositorService.getScreenScale(modelData);
if (newScale !== root.screenScale) {
console.info("WallpaperBackground: screen scale corrected for", modelData.name + ":", root.screenScale, "->", newScale);
root.screenScale = newScale;
}
}
Connections {
target: NiriService
function onDisplayScalesChanged() {
root._recheckScreenScale();
}
}
Connections {
target: WlrOutputService
function onWlrOutputAvailableChanged() {
root._recheckScreenScale();
}
}
Connections {
target: CompositorService
function onRandrDataReady() {
if (root._deferredSource) {
const src = root._deferredSource;
root._deferredSource = "";
root.setWallpaperImmediate(src);
} else {
root._recheckScreenScale();
}
}
}
Timer {
id: renderSettleTimer
interval: 100
onTriggered: root._renderSettling = false
}
function getFillMode(modeName) { function getFillMode(modeName) {
switch (modeName) { switch (modeName) {
@@ -163,12 +110,12 @@ Variants {
} }
Component.onCompleted: { Component.onCompleted: {
if (typeof wallpaperWindow.updatesEnabled !== "undefined")
wallpaperWindow.updatesEnabled = Qt.binding(() => root.effectActive || root._renderSettling || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading);
if (!source) { if (!source) {
root._renderSettling = false; isInitialized = true;
return;
} }
const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source);
setWallpaperImmediate(formattedSource);
isInitialized = true; isInitialized = true;
} }
@@ -181,11 +128,8 @@ Variants {
const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source); const formattedSource = source.startsWith("file://") ? source : encodeFileUrl(source);
if (!isInitialized || !currentWallpaper.source) { if (!isInitialized || !currentWallpaper.source) {
if (!CompositorService.randrReady) {
_deferredSource = formattedSource;
return;
}
setWallpaperImmediate(formattedSource); setWallpaperImmediate(formattedSource);
isInitialized = true;
return; return;
} }
if (CompositorService.isNiri && SessionData.isSwitchingMode) { if (CompositorService.isNiri && SessionData.isSwitchingMode) {
@@ -199,9 +143,6 @@ Variants {
transitionAnimation.stop(); transitionAnimation.stop();
root.transitionProgress = 0.0; root.transitionProgress = 0.0;
root.effectActive = false; root.effectActive = false;
root._renderSettling = true;
renderSettleTimer.restart();
root.screenScale = CompositorService.getScreenScale(modelData);
currentWallpaper.source = newSource; currentWallpaper.source = newSource;
nextWallpaper.source = ""; nextWallpaper.source = "";
} }
@@ -230,7 +171,6 @@ Variants {
return; return;
if (!newPath || newPath.startsWith("#")) if (!newPath || newPath.startsWith("#"))
return; return;
root.screenScale = CompositorService.getScreenScale(modelData);
if (root.transitioning || root.effectActive) { if (root.transitioning || root.effectActive) {
root.pendingWallpaper = newPath; root.pendingWallpaper = newPath;
return; return;
@@ -282,7 +222,7 @@ Variants {
} }
readonly property int maxTextureSize: 8192 readonly property int maxTextureSize: 8192
property real screenScale: 1 property real screenScale: CompositorService.getScreenScale(modelData)
property int textureWidth: Math.min(Math.round(modelData.width * screenScale), maxTextureSize) property int textureWidth: Math.min(Math.round(modelData.width * screenScale), maxTextureSize)
property int textureHeight: Math.min(Math.round(modelData.height * screenScale), maxTextureSize) property int textureHeight: Math.min(Math.round(modelData.height * screenScale), maxTextureSize)
-4
View File
@@ -18,8 +18,6 @@ Singleton {
function registerWidget(widgetId, screenName, widgetRef) { function registerWidget(widgetId, screenName, widgetRef) {
if (!widgetId || !screenName || !widgetRef) if (!widgetId || !screenName || !widgetRef)
return; return;
if (typeof widgetRegistry !== "object" || widgetRegistry === null)
widgetRegistry = ({});
if (!widgetRegistry[widgetId]) if (!widgetRegistry[widgetId])
widgetRegistry[widgetId] = {}; widgetRegistry[widgetId] = {};
@@ -31,8 +29,6 @@ Singleton {
function unregisterWidget(widgetId, screenName) { function unregisterWidget(widgetId, screenName) {
if (!widgetId || !screenName) if (!widgetId || !screenName)
return; return;
if (typeof widgetRegistry !== "object" || widgetRegistry === null)
return;
if (!widgetRegistry[widgetId]) if (!widgetRegistry[widgetId])
return; return;
+1 -1
View File
@@ -11,7 +11,7 @@ Singleton {
id: root id: root
readonly property string currentVersion: "1.4" readonly property string currentVersion: "1.4"
readonly property bool changelogEnabled: true readonly property bool changelogEnabled: false
readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell" readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell"
readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion
-31
View File
@@ -29,37 +29,11 @@ Singleton {
readonly property string labwcPid: Quickshell.env("LABWC_PID") readonly property string labwcPid: Quickshell.env("LABWC_PID")
property bool useNiriSorting: isNiri && NiriService property bool useNiriSorting: isNiri && NiriService
property var randrScales: ({})
property bool randrReady: false
signal randrDataReady
property var sortedToplevels: [] property var sortedToplevels: []
property bool _sortScheduled: false property bool _sortScheduled: false
signal toplevelsChanged signal toplevelsChanged
function fetchRandrData() {
Proc.runCommand("randr", ["dms", "randr", "--json"], (output, exitCode) => {
if (exitCode === 0 && output) {
try {
const data = JSON.parse(output.trim());
if (data.outputs && Array.isArray(data.outputs)) {
const scales = {};
for (const out of data.outputs) {
if (out.name && out.scale > 0)
scales[out.name] = out.scale;
}
randrScales = scales;
}
} catch (e) {
console.warn("CompositorService: failed to parse randr data:", e);
}
}
randrReady = true;
randrDataReady();
}, 0, 3000);
}
function getScreenScale(screen) { function getScreenScale(screen) {
if (!screen) if (!screen)
return 1; return 1;
@@ -68,10 +42,6 @@ Singleton {
return screen.devicePixelRatio || 1; return screen.devicePixelRatio || 1;
} }
const randrScale = randrScales[screen.name];
if (randrScale !== undefined && randrScale > 0)
return Math.round(randrScale * 20) / 20;
if (WlrOutputService.wlrOutputAvailable && screen) { if (WlrOutputService.wlrOutputAvailable && screen) {
const wlrOutput = WlrOutputService.getOutput(screen.name); const wlrOutput = WlrOutputService.getOutput(screen.name);
if (wlrOutput?.enabled && wlrOutput.scale !== undefined && wlrOutput.scale > 0) { if (wlrOutput?.enabled && wlrOutput.scale !== undefined && wlrOutput.scale > 0) {
@@ -167,7 +137,6 @@ Singleton {
} }
Component.onCompleted: { Component.onCompleted: {
fetchRandrData();
detectCompositor(); detectCompositor();
scheduleSort(); scheduleSort();
Qt.callLater(() => { Qt.callLater(() => {
+78 -38
View File
@@ -1,8 +1,6 @@
pragma Singleton pragma Singleton
pragma ComponentBehavior: Bound pragma ComponentBehavior: Bound
import QtCore
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Io import Quickshell.Io
@@ -13,6 +11,9 @@ Singleton {
property bool dsearchAvailable: false property bool dsearchAvailable: false
property int searchIdCounter: 0 property int searchIdCounter: 0
property int indexVersion: 0
property bool supportsTypeFilter: false
property bool versionChecked: false
signal searchResultsReceived(var results) signal searchResultsReceived(var results)
signal statsReceived(var stats) signal statsReceived(var stats)
@@ -26,118 +27,157 @@ Singleton {
stdout: SplitParser { stdout: SplitParser {
onRead: line => { onRead: line => {
if (line && line.trim().length > 0) { if (line && line.trim().length > 0) {
root.dsearchAvailable = true root.dsearchAvailable = true;
} }
} }
} }
onExited: exitCode => { onExited: exitCode => {
if (exitCode !== 0) { if (exitCode !== 0) {
root.dsearchAvailable = false root.dsearchAvailable = false;
} else {
root._checkVersion();
} }
} }
} }
function _checkVersion() {
Proc.runCommand("dsearch-version", ["dsearch", "version", "--json"], (stdout, exitCode) => {
root.versionChecked = true;
if (exitCode !== 0)
return;
const response = JSON.parse(stdout);
root.indexVersion = response.index_schema || 0;
root.supportsTypeFilter = root.indexVersion >= 2;
});
}
function ping(callback) { function ping(callback) {
if (!dsearchAvailable) { if (!dsearchAvailable) {
if (callback) { if (callback) {
callback({ "error": "dsearch not available" }) callback({
"error": "dsearch not available"
});
} }
return return;
} }
Proc.runCommand("dsearch-ping", ["dsearch", "ping", "--json"], (stdout, exitCode) => { Proc.runCommand("dsearch-ping", ["dsearch", "ping", "--json"], (stdout, exitCode) => {
if (callback) { if (callback) {
if (exitCode === 0) { if (exitCode === 0) {
try { try {
const response = JSON.parse(stdout) const response = JSON.parse(stdout);
callback({ "result": response }) callback({
"result": response
});
} catch (e) { } catch (e) {
callback({ "error": "failed to parse ping response" }) callback({
"error": "failed to parse ping response"
});
} }
} else { } else {
callback({ "error": "ping failed" }) callback({
"error": "ping failed"
});
} }
} }
}) });
} }
function search(query, params, callback) { function search(query, params, callback) {
if (!query || query.length === 0) { if (!query || query.length === 0) {
if (callback) { if (callback) {
callback({ "error": "query is required" }) callback({
"error": "query is required"
});
} }
return return;
} }
if (!dsearchAvailable) { if (!dsearchAvailable) {
if (callback) { if (callback) {
callback({ "error": "dsearch not available" }) callback({
"error": "dsearch not available"
});
} }
return return;
} }
const args = ["dsearch", "search", query, "--json"] const args = ["dsearch", "search", query, "--json"];
if (params) { if (params) {
if (params.limit !== undefined) { if (params.limit !== undefined) {
args.push("-n", String(params.limit)) args.push("-n", String(params.limit));
}
if (params.type) {
args.push("-t", params.type);
} }
if (params.ext) { if (params.ext) {
args.push("-e", params.ext) args.push("-e", params.ext);
}
if (params.folder) {
args.push("--folder", params.folder);
} }
if (params.field) { if (params.field) {
args.push("-f", params.field) args.push("-f", params.field);
} }
if (params.fuzzy) { if (params.fuzzy) {
args.push("--fuzzy") args.push("--fuzzy");
} }
if (params.sort) { if (params.sort) {
args.push("--sort", params.sort) args.push("--sort", params.sort);
} }
if (params.desc !== undefined) { if (params.desc !== undefined) {
args.push("--desc=" + (params.desc ? "true" : "false")) args.push("--desc=" + (params.desc ? "true" : "false"));
} }
if (params.minSize !== undefined) { if (params.minSize !== undefined) {
args.push("--min-size", String(params.minSize)) args.push("--min-size", String(params.minSize));
} }
if (params.maxSize !== undefined) { if (params.maxSize !== undefined) {
args.push("--max-size", String(params.maxSize)) args.push("--max-size", String(params.maxSize));
} }
} }
Proc.runCommand("dsearch-search", args, (stdout, exitCode) => { Proc.runCommand("dsearch-search", args, (stdout, exitCode) => {
if (exitCode === 0) { if (exitCode === 0) {
try { try {
const response = JSON.parse(stdout) const response = JSON.parse(stdout);
searchResultsReceived(response) searchResultsReceived(response);
if (callback) { if (callback) {
callback({ "result": response }) callback({
"result": response
});
} }
} catch (e) { } catch (e) {
const error = "failed to parse search response" const error = "failed to parse search response";
errorOccurred(error) errorOccurred(error);
if (callback) { if (callback) {
callback({ "error": error }) callback({
"error": error
});
} }
} }
} else if (exitCode === 124) { } else if (exitCode === 124) {
const error = "search timed out" const error = "search timed out";
errorOccurred(error) errorOccurred(error);
if (callback) { if (callback) {
callback({ "error": error }) callback({
"error": error
});
} }
} else { } else {
const error = "search failed" const error = "search failed";
errorOccurred(error) errorOccurred(error);
if (callback) { if (callback) {
callback({ "error": error }) callback({
"error": error
});
} }
} }
}, 100, 5000) }, 100, 5000);
} }
function rediscover() { function rediscover() {
checkProcess.running = true checkProcess.running = true;
} }
} }
+28 -63
View File
@@ -8,87 +8,52 @@ import Quickshell.Io
Singleton { Singleton {
id: root id: root
property var _cache: ({})
function resolveIconPath(moddedAppId) { function resolveIconPath(moddedAppId) {
if (!moddedAppId) const entry = DesktopEntries.heuristicLookup(moddedAppId)
return ""; const appIds = [moddedAppId, moddedAppId.toLowerCase()];
if (_cache[moddedAppId] !== undefined)
return _cache[moddedAppId];
const result = (function() {
// 1. Try heuristic lookup (standard)
const entry = DesktopEntries.heuristicLookup(moddedAppId);
let icon = Quickshell.iconPath(entry?.icon, true);
if (icon && icon !== "")
return icon;
// 2. Try the appId itself as an icon name
icon = Quickshell.iconPath(moddedAppId, true);
if (icon && icon !== "")
return icon;
// 3. Try variations of the appId (lowercase, last part)
const appIds = [moddedAppId.toLowerCase()];
const lastPart = moddedAppId.split('.').pop(); const lastPart = moddedAppId.split('.').pop();
if (lastPart && lastPart !== moddedAppId) { if (lastPart && lastPart !== moddedAppId) {
appIds.push(lastPart); appIds.push(lastPart);
appIds.push(lastPart.toLowerCase());
const firstChar = lastPart.charAt(0);
const rest = lastPart.slice(1);
let toggled;
if (firstChar === firstChar.toLowerCase()) {
toggled = firstChar.toUpperCase() + rest;
} else {
toggled = firstChar.toLowerCase() + rest;
} }
for (const id of appIds) { if (toggled !== lastPart) {
icon = Quickshell.iconPath(id, true); appIds.push(toggled);
if (icon && icon !== "")
return icon;
}
// 4. Deep search in all desktop entries (if the above fail)
// This is slow-ish but only happens once for failed icons
const strippedId = moddedAppId.replace(/-bin$/, "").toLowerCase();
const allEntries = DesktopEntries.applications.values;
for (let i = 0; i < allEntries.length; i++) {
const e = allEntries[i];
const eId = (e.id || "").toLowerCase();
const eName = (e.name || "").toLowerCase();
const eExec = (e.execString || "").toLowerCase();
if (eId.includes(strippedId) || eName.includes(strippedId) || eExec.includes(strippedId)) {
icon = Quickshell.iconPath(e.icon, true);
if (icon && icon !== "")
return icon;
} }
} }
// 5. Nix/Guix specific store check (as a last resort)
for (const appId of appIds){ for (const appId of appIds){
let execPath = entry?.execString?.replace(/\/bin.*/, ""); let icon = Quickshell.iconPath(entry?.icon, true)
if (!execPath) if (icon && icon !== "") return icon
continue;
let execPath = entry?.execString?.replace(/\/bin.*/, "")
if (!execPath) continue
//Check that the app is installed with nix/guix
if (execPath.startsWith("/nix/store/") || execPath.startsWith("/gnu/store/")) { if (execPath.startsWith("/nix/store/") || execPath.startsWith("/gnu/store/")) {
const basePath = execPath; const basePath = execPath
const sizes = ["256x256", "128x128", "64x64", "48x48", "32x32", "24x24", "16x16"]; const sizes = ["256x256", "128x128", "64x64", "48x48", "32x32", "24x24", "16x16"]
let iconPath = `${basePath}/share/icons/hicolor/scalable/apps/${appId}.svg`; let iconPath = `${basePath}/share/icons/hicolor/scalable/apps/${appId}.svg`
icon = Quickshell.iconPath(iconPath, true); icon = Quickshell.iconPath(iconPath, true)
if (icon && icon !== "") if (icon && icon !== "") return icon
return icon;
for (const size of sizes) { for (const size of sizes) {
iconPath = `${basePath}/share/icons/hicolor/${size}/apps/${appId}.png`; iconPath = `${basePath}/share/icons/hicolor/${size}/apps/${appId}.png`
icon = Quickshell.iconPath(iconPath, true); icon = Quickshell.iconPath(iconPath, true)
if (icon && icon !== "") if (icon && icon !== "") return icon
return icon;
} }
} }
} }
return ""; return ""
})();
_cache[moddedAppId] = result;
return result;
} }
} }
+1 -1
View File
@@ -66,7 +66,7 @@ Singleton {
Timer { Timer {
id: suppressResetTimer id: suppressResetTimer
interval: 5000 interval: 2000
onTriggered: root.matugenSuppression = false onTriggered: root.matugenSuppression = false
} }
+13 -28
View File
@@ -158,10 +158,7 @@ Singleton {
continue; continue;
const urg = typeof item.urgency === "number" ? item.urgency : 1; const urg = typeof item.urgency === "number" ? item.urgency : 1;
const body = item.body || ""; const body = item.body || "";
let htmlBody = item.htmlBody || _resolveHtmlBody(body); const htmlBody = item.htmlBody || _resolveHtmlBody(body);
if (htmlBody) {
htmlBody = htmlBody.replace(/<img\b[^>]*>/gi, "");
}
loaded.push({ loaded.push({
id: item.id || "", id: item.id || "",
summary: item.summary || "", summary: item.summary || "",
@@ -723,8 +720,8 @@ Singleton {
} }
required property Notification notification required property Notification notification
readonly property string summary: (notification?.summary ?? "").replace(/<img\b[^>]*>/gi, "") readonly property string summary: notification?.summary ?? ""
readonly property string body: (notification?.body ?? "").replace(/<img\b[^>]*>/gi, "") readonly property string body: notification?.body ?? ""
readonly property string htmlBody: root._resolveHtmlBody(body) readonly property string htmlBody: root._resolveHtmlBody(body)
readonly property string appIcon: notification?.appIcon ?? "" readonly property string appIcon: notification?.appIcon ?? ""
readonly property string appName: { readonly property string appName: {
@@ -981,34 +978,22 @@ Singleton {
function _resolveHtmlBody(body) { function _resolveHtmlBody(body) {
if (!body) if (!body)
return ""; return "";
if (/<\/?[a-z][\s\S]*>/i.test(body))
return body;
let result = body;
if (/<\/?[a-z][\s\S]*>/i.test(body)) {
result = body;
} else {
// Decode percent-encoded URLs (e.g. https%3A%2F%2F https://) // Decode percent-encoded URLs (e.g. https%3A%2F%2F https://)
let processed = body.replace(/\bhttps?%3A%2F%2F[^\s]+/gi, match => { body = body.replace(/\bhttps?%3A%2F%2F[^\s]+/gi, match => {
try { try { return decodeURIComponent(match); }
return decodeURIComponent(match); catch (e) { return match; }
} catch (e) {
return match;
}
}); });
if (/&(#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]+);/.test(processed)) { if (/&(#\d+|#x[0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]+);/.test(body)) {
const decoded = _decodeEntities(processed); const decoded = _decodeEntities(body);
if (/<\/?[a-z][\s\S]*>/i.test(decoded)) if (/<\/?[a-z][\s\S]*>/i.test(decoded))
result = decoded; return decoded;
else return Markdown2Html.markdownToHtml(decoded);
result = Markdown2Html.markdownToHtml(decoded);
} else {
result = Markdown2Html.markdownToHtml(processed);
} }
} return Markdown2Html.markdownToHtml(body);
// Strip out image tags to prevent IP tracking
return result.replace(/<img\b[^>]*>/gi, "");
} }
function getGroupKey(wrapper) { function getGroupKey(wrapper) {
+10 -81
View File
@@ -9,29 +9,19 @@ Singleton {
id: root id: root
property var controlCenterPopout: null property var controlCenterPopout: null
property var controlCenterLoader: null
property var notificationCenterPopout: null property var notificationCenterPopout: null
property var notificationCenterLoader: null
property var appDrawerPopout: null property var appDrawerPopout: null
property var appDrawerLoader: null
property var processListPopout: null property var processListPopout: null
property var processListPopoutLoader: null
property var dankDashPopout: null property var dankDashPopout: null
property var dankDashPopoutLoader: null property var dankDashPopoutLoader: null
property var batteryPopout: null property var batteryPopout: null
property var batteryPopoutLoader: null
property var vpnPopout: null property var vpnPopout: null
property var vpnPopoutLoader: null
property var systemUpdatePopout: null property var systemUpdatePopout: null
property var systemUpdateLoader: null
property var layoutPopout: null
property var layoutPopoutLoader: null
property var clipboardHistoryPopout: null
property var clipboardHistoryPopoutLoader: null
property var settingsModal: null property var settingsModal: null
property var settingsModalLoader: null property var settingsModalLoader: null
property var clipboardHistoryModal: null property var clipboardHistoryModal: null
property var clipboardHistoryPopout: null
property var dankLauncherV2Modal: null property var dankLauncherV2Modal: null
property var dankLauncherV2ModalLoader: null property var dankLauncherV2ModalLoader: null
property var powerMenuModal: null property var powerMenuModal: null
@@ -41,6 +31,8 @@ Singleton {
property var notificationModal: null property var notificationModal: null
property var wifiPasswordModal: null property var wifiPasswordModal: null
property var wifiPasswordModalLoader: null property var wifiPasswordModalLoader: null
property var wifiQRCodeModal: null
property var wifiQRCodeModalLoader: null
property var polkitAuthModal: null property var polkitAuthModal: null
property var polkitAuthModalLoader: null property var polkitAuthModalLoader: null
property var bluetoothPairingModal: null property var bluetoothPairingModal: null
@@ -69,13 +61,6 @@ Singleton {
controlCenterPopout?.close(); controlCenterPopout?.close();
} }
function unloadControlCenter() {
if (!controlCenterLoader)
return;
controlCenterPopout = null;
controlCenterLoader.active = false;
}
function toggleControlCenter(x, y, width, section, screen) { function toggleControlCenter(x, y, width, section, screen) {
if (controlCenterPopout) { if (controlCenterPopout) {
setPosition(controlCenterPopout, x, y, width, section, screen); setPosition(controlCenterPopout, x, y, width, section, screen);
@@ -94,13 +79,6 @@ Singleton {
notificationCenterPopout?.close(); notificationCenterPopout?.close();
} }
function unloadNotificationCenter() {
if (!notificationCenterLoader)
return;
notificationCenterPopout = null;
notificationCenterLoader.active = false;
}
function toggleNotificationCenter(x, y, width, section, screen) { function toggleNotificationCenter(x, y, width, section, screen) {
if (notificationCenterPopout) { if (notificationCenterPopout) {
setPosition(notificationCenterPopout, x, y, width, section, screen); setPosition(notificationCenterPopout, x, y, width, section, screen);
@@ -119,13 +97,6 @@ Singleton {
appDrawerPopout?.close(); appDrawerPopout?.close();
} }
function unloadAppDrawer() {
if (!appDrawerLoader)
return;
appDrawerPopout = null;
appDrawerLoader.active = false;
}
function toggleAppDrawer(x, y, width, section, screen) { function toggleAppDrawer(x, y, width, section, screen) {
if (appDrawerPopout) { if (appDrawerPopout) {
setPosition(appDrawerPopout, x, y, width, section, screen); setPosition(appDrawerPopout, x, y, width, section, screen);
@@ -144,13 +115,6 @@ Singleton {
processListPopout?.close(); processListPopout?.close();
} }
function unloadProcessListPopout() {
if (!processListPopoutLoader)
return;
processListPopout = null;
processListPopoutLoader.active = false;
}
function toggleProcessList(x, y, width, section, screen) { function toggleProcessList(x, y, width, section, screen) {
if (processListPopout) { if (processListPopout) {
setPosition(processListPopout, x, y, width, section, screen); setPosition(processListPopout, x, y, width, section, screen);
@@ -199,13 +163,6 @@ Singleton {
dankDashPopout.dashVisible = false; dankDashPopout.dashVisible = false;
} }
function unloadDankDash() {
if (!dankDashPopoutLoader)
return;
dankDashPopout = null;
dankDashPopoutLoader.active = false;
}
function toggleDankDash(tabIndex, x, y, width, section, screen) { function toggleDankDash(tabIndex, x, y, width, section, screen) {
_dankDashPendingTab = tabIndex || 0; _dankDashPendingTab = tabIndex || 0;
if (dankDashPopout) { if (dankDashPopout) {
@@ -262,13 +219,6 @@ Singleton {
batteryPopout?.close(); batteryPopout?.close();
} }
function unloadBattery() {
if (!batteryPopoutLoader)
return;
batteryPopout = null;
batteryPopoutLoader.active = false;
}
function toggleBattery(x, y, width, section, screen) { function toggleBattery(x, y, width, section, screen) {
if (batteryPopout) { if (batteryPopout) {
setPosition(batteryPopout, x, y, width, section, screen); setPosition(batteryPopout, x, y, width, section, screen);
@@ -287,13 +237,6 @@ Singleton {
vpnPopout?.close(); vpnPopout?.close();
} }
function unloadVpn() {
if (!vpnPopoutLoader)
return;
vpnPopout = null;
vpnPopoutLoader.active = false;
}
function toggleVpn(x, y, width, section, screen) { function toggleVpn(x, y, width, section, screen) {
if (vpnPopout) { if (vpnPopout) {
setPosition(vpnPopout, x, y, width, section, screen); setPosition(vpnPopout, x, y, width, section, screen);
@@ -312,13 +255,6 @@ Singleton {
systemUpdatePopout?.close(); systemUpdatePopout?.close();
} }
function unloadSystemUpdate() {
if (!systemUpdateLoader)
return;
systemUpdatePopout = null;
systemUpdateLoader.active = false;
}
function toggleSystemUpdate(x, y, width, section, screen) { function toggleSystemUpdate(x, y, width, section, screen) {
if (systemUpdatePopout) { if (systemUpdatePopout) {
setPosition(systemUpdatePopout, x, y, width, section, screen); setPosition(systemUpdatePopout, x, y, width, section, screen);
@@ -479,20 +415,6 @@ Singleton {
clipboardHistoryModal?.close(); clipboardHistoryModal?.close();
} }
function unloadClipboardHistoryPopout() {
if (!clipboardHistoryPopoutLoader)
return;
clipboardHistoryPopout = null;
clipboardHistoryPopoutLoader.active = false;
}
function unloadLayoutPopout() {
if (!layoutPopoutLoader)
return;
layoutPopout = null;
layoutPopoutLoader.active = false;
}
property bool _dankLauncherV2WantsOpen: false property bool _dankLauncherV2WantsOpen: false
property bool _dankLauncherV2WantsToggle: false property bool _dankLauncherV2WantsToggle: false
property string _dankLauncherV2PendingQuery: "" property string _dankLauncherV2PendingQuery: ""
@@ -661,6 +583,13 @@ Singleton {
wifiPasswordModal.show(ssid); wifiPasswordModal.show(ssid);
} }
function showWifiQRCodeModal(ssid) {
if (wifiQRCodeModalLoader)
wifiQRCodeModalLoader.active = true;
if (wifiQRCodeModal)
wifiQRCodeModal.show(ssid);
}
function showHiddenNetworkModal() { function showHiddenNetworkModal() {
if (wifiPasswordModalLoader) if (wifiPasswordModalLoader)
wifiPasswordModalLoader.active = true; wifiPasswordModalLoader.active = true;
+1 -1
View File
@@ -1 +1 @@
v1.4.3 v1.5-beta
+1 -8
View File
@@ -236,14 +236,7 @@ Item {
parent: Overlay.overlay parent: Overlay.overlay
width: root.popupWidth === -1 ? undefined : (root.popupWidth > 0 ? root.popupWidth : (dropdown.width + root.popupWidthOffset)) width: root.popupWidth === -1 ? undefined : (root.popupWidth > 0 ? root.popupWidth : (dropdown.width + root.popupWidthOffset))
height: { height: Math.min(root.maxPopupHeight, (root.enableFuzzySearch ? 54 : 0) + Math.min(filteredOptions.length, 10) * 36 + 16)
let h = root.enableFuzzySearch ? 54 : 0;
if (root.options.length === 0 && root.emptyText !== "")
h += 32;
else
h += Math.min(filteredOptions.length, 10) * 36;
return Math.min(root.maxPopupHeight, h + 16);
}
padding: 0 padding: 0
modal: true modal: true
dim: false dim: false
-4
View File
@@ -288,10 +288,6 @@ Item {
screen: root.screen screen: root.screen
visible: false visible: false
color: "transparent" color: "transparent"
Component.onCompleted: {
if (typeof updatesEnabled !== "undefined")
updatesEnabled = false;
}
WlrLayershell.namespace: root.layerNamespace + ":background" WlrLayershell.namespace: root.layerNamespace + ":background"
WlrLayershell.layer: WlrLayershell.Top WlrLayershell.layer: WlrLayershell.Top
File diff suppressed because it is too large Load Diff
+100 -145
View File
@@ -21,7 +21,7 @@
"%1 custom animation duration": "" "%1 custom animation duration": ""
}, },
"%1 days ago": { "%1 days ago": {
"%1 days ago": "hace %1 días" "%1 days ago": ""
}, },
"%1 disconnected": { "%1 disconnected": {
"%1 disconnected": "" "%1 disconnected": ""
@@ -45,7 +45,7 @@
"%1 job(s)": "%1 trabajo(s)" "%1 job(s)": "%1 trabajo(s)"
}, },
"%1 notifications": { "%1 notifications": {
"%1 notifications": "%1 notificaciones" "%1 notifications": ""
}, },
"%1 printer(s)": { "%1 printer(s)": {
"%1 printer(s)": "%1 impresora(s)" "%1 printer(s)": "%1 impresora(s)"
@@ -57,13 +57,13 @@
"%1 widgets": "%1 widgets" "%1 widgets": "%1 widgets"
}, },
"%1m ago": { "%1m ago": {
"%1m ago": "hace %1m" "%1m ago": ""
}, },
"(Unnamed)": { "(Unnamed)": {
"(Unnamed)": "(Sin nombre)" "(Unnamed)": "(Sin nombre)"
}, },
"+ %1 more": { "+ %1 more": {
"+ %1 more": "+ %1 más" "+ %1 more": ""
}, },
"0 = square corners": { "0 = square corners": {
"0 = square corners": "0 = esquinas cuadradas" "0 = square corners": "0 = esquinas cuadradas"
@@ -78,7 +78,7 @@
"1 minute": "1 minuto" "1 minute": "1 minuto"
}, },
"1 notification": { "1 notification": {
"1 notification": "1 notificación" "1 notification": ""
}, },
"1 second": { "1 second": {
"1 second": "1 segundo" "1 second": "1 segundo"
@@ -183,7 +183,7 @@
"About": "Información" "About": "Información"
}, },
"Accent Color": { "Accent Color": {
"Accent Color": "Color de acento" "Accent Color": ""
}, },
"Accept Jobs": { "Accept Jobs": {
"Accept Jobs": "Aceptar trabajos" "Accept Jobs": "Aceptar trabajos"
@@ -560,7 +560,7 @@
"Available Screens (%1)": "Pantallas disponibles (%1)" "Available Screens (%1)": "Pantallas disponibles (%1)"
}, },
"Available in Detailed and Forecast view modes": { "Available in Detailed and Forecast view modes": {
"Available in Detailed and Forecast view modes": "Disponible en modo detallado y pronóstico" "Available in Detailed and Forecast view modes": ""
}, },
"BSSID": { "BSSID": {
"BSSID": "BSSID" "BSSID": "BSSID"
@@ -659,7 +659,7 @@
"Border Opacity": "Opacidad del borde" "Border Opacity": "Opacidad del borde"
}, },
"Border Size": { "Border Size": {
"Border Size": "Grosor del borde" "Border Size": ""
}, },
"Border Thickness": { "Border Thickness": {
"Border Thickness": "Grosor del borde" "Border Thickness": "Grosor del borde"
@@ -812,7 +812,7 @@
"Choose colors from palette": "Escoje colores de la paleta" "Choose colors from palette": "Escoje colores de la paleta"
}, },
"Choose how the weather widget is displayed": { "Choose how the weather widget is displayed": {
"Choose how the weather widget is displayed": "Elige cómo se muestra el widget del tiempo" "Choose how the weather widget is displayed": ""
}, },
"Choose icon": { "Choose icon": {
"Choose icon": "Elegir icono" "Choose icon": "Elegir icono"
@@ -1010,7 +1010,7 @@
"Communication": "Comunicación" "Communication": "Comunicación"
}, },
"Compact": { "Compact": {
"Compact": "Compacto" "Compact": ""
}, },
"Compact Mode": { "Compact Mode": {
"Compact Mode": "Modo compacto" "Compact Mode": "Modo compacto"
@@ -1253,7 +1253,7 @@
"Custom": "Personal" "Custom": "Personal"
}, },
"Custom Color": { "Custom Color": {
"Custom Color": "Color personalizado" "Custom Color": ""
}, },
"Custom Duration": { "Custom Duration": {
"Custom Duration": "Duracion personalizada" "Custom Duration": "Duracion personalizada"
@@ -1439,7 +1439,7 @@
"Desktop Clock": "Reloj de escritorio" "Desktop Clock": "Reloj de escritorio"
}, },
"Detailed": { "Detailed": {
"Detailed": "Detallado" "Detailed": ""
}, },
"Development": { "Development": {
"Development": "Desarrollo" "Development": "Desarrollo"
@@ -1541,7 +1541,7 @@
"Display currently focused application title": "Mostrar título de la aplicación enfocada" "Display currently focused application title": "Mostrar título de la aplicación enfocada"
}, },
"Display hourly weather predictions": { "Display hourly weather predictions": {
"Display hourly weather predictions": "Mostrar pronósticos por hora" "Display hourly weather predictions": ""
}, },
"Display only workspaces that contain windows": { "Display only workspaces that contain windows": {
"Display only workspaces that contain windows": "Mostrar solo los espacios que contengan ventanas" "Display only workspaces that contain windows": "Mostrar solo los espacios que contengan ventanas"
@@ -1826,7 +1826,7 @@
"Fade to lock screen": "Bloquear con transición suave" "Fade to lock screen": "Bloquear con transición suave"
}, },
"Fade to monitor off": { "Fade to monitor off": {
"Fade to monitor off": "Fundido antes de apagar monitor" "Fade to monitor off": ""
}, },
"Failed to activate configuration": { "Failed to activate configuration": {
"Failed to activate configuration": "Error al activar la configuración" "Failed to activate configuration": "Error al activar la configuración"
@@ -2006,7 +2006,7 @@
"Failed to write temp file for validation": "Fallo al escribir archivo temporal para la validacion" "Failed to write temp file for validation": "Fallo al escribir archivo temporal para la validacion"
}, },
"Feels": { "Feels": {
"Feels": "Sensación" "Feels": ""
}, },
"Feels Like": { "Feels Like": {
"Feels Like": "Temperatura" "Feels Like": "Temperatura"
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "" "Fog": ""
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "" "Follow Monitor Focus": ""
}, },
@@ -2129,7 +2123,7 @@
"Force terminal applications to always use dark color schemes": "Forzar que las aplicaciones de terminal usen esquemas de colores oscuros" "Force terminal applications to always use dark color schemes": "Forzar que las aplicaciones de terminal usen esquemas de colores oscuros"
}, },
"Forecast": { "Forecast": {
"Forecast": "Pronóstico" "Forecast": ""
}, },
"Forecast Days": { "Forecast Days": {
"Forecast Days": "" "Forecast Days": ""
@@ -2213,7 +2207,7 @@
"Gradually fade the screen before locking with a configurable grace period": "Desvanecer gradualmente la pantalla antes de bloquear, con una duración configurable" "Gradually fade the screen before locking with a configurable grace period": "Desvanecer gradualmente la pantalla antes de bloquear, con una duración configurable"
}, },
"Gradually fade the screen before turning off monitors with a configurable grace period": { "Gradually fade the screen before turning off monitors with a configurable grace period": {
"Gradually fade the screen before turning off monitors with a configurable grace period": "La pantalla se funde a negro antes de apagar el monitor, tras un intervalo configurable" "Gradually fade the screen before turning off monitors with a configurable grace period": ""
}, },
"Graph Time Range": { "Graph Time Range": {
"Graph Time Range": "Gráfico Intervalo de tiempo" "Graph Time Range": "Gráfico Intervalo de tiempo"
@@ -2402,7 +2396,7 @@
"Humidity": "Humedad" "Humidity": "Humedad"
}, },
"Hyprland Layout Overrides": { "Hyprland Layout Overrides": {
"Hyprland Layout Overrides": "Sobreescribir opciones de Hyprland" "Hyprland Layout Overrides": ""
}, },
"Hyprland Options": { "Hyprland Options": {
"Hyprland Options": "" "Hyprland Options": ""
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "" "Icon": ""
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Tamaño de icono" "Icon Size": "Tamaño de icono"
}, },
@@ -2903,7 +2894,7 @@
"Lock before suspend": "Bloquear pantalla antes de suspender" "Lock before suspend": "Bloquear pantalla antes de suspender"
}, },
"Lock fade grace period": { "Lock fade grace period": {
"Lock fade grace period": "Intervalo de fundido antes de bloquear la pantalla" "Lock fade grace period": ""
}, },
"Locked": { "Locked": {
"Locked": "" "Locked": ""
@@ -2942,7 +2933,7 @@
"Management": "Gestión" "Management": "Gestión"
}, },
"MangoWC Layout Overrides": { "MangoWC Layout Overrides": {
"MangoWC Layout Overrides": "Sobreescribir opciones de MangoWC" "MangoWC Layout Overrides": ""
}, },
"Manual Coordinates": { "Manual Coordinates": {
"Manual Coordinates": "Coordenadas manuales" "Manual Coordinates": "Coordenadas manuales"
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Maximizar la detección" "Maximize Detection": "Maximizar la detección"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Tamaño máximo de entrada" "Maximum Entry Size": "Tamaño máximo de entrada"
}, },
@@ -3155,7 +3140,7 @@
"Monitor Configuration": "Configuracion del monitor" "Monitor Configuration": "Configuracion del monitor"
}, },
"Monitor fade grace period": { "Monitor fade grace period": {
"Monitor fade grace period": "Intervalo de fundido antes de apagar el monitor" "Monitor fade grace period": ""
}, },
"Monitor whose wallpaper drives dynamic theming colors": { "Monitor whose wallpaper drives dynamic theming colors": {
"Monitor whose wallpaper drives dynamic theming colors": "Seleccionar monitor que define los colores dinámicos" "Monitor whose wallpaper drives dynamic theming colors": "Seleccionar monitor que define los colores dinámicos"
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Archivos no encontrados" "No files found": "Archivos no encontrados"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "" "No hidden apps.": ""
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "" "Open in Browser": ""
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Abrir barra de búsqueda para encontrar texto" "Open search bar to find text": "Abrir barra de búsqueda para encontrar texto"
}, },
@@ -3904,7 +3883,7 @@
"Power source": "Fuente de energia" "Power source": "Fuente de energia"
}, },
"Precip": { "Precip": {
"Precip": "Precipitaciones" "Precip": ""
}, },
"Precipitation": { "Precipitation": {
"Precipitation": "" "Precipitation": ""
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Remover" "Remove": "Remover"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Eliminar espacios y bordes cuando las ventanas estan maximizadas" "Remove gaps and border when windows are maximized": "Eliminar espacios y bordes cuando las ventanas estan maximizadas"
}, },
@@ -4174,10 +4150,10 @@
"Rounded corners for windows": "Esquinas redondeadas para ventanas" "Rounded corners for windows": "Esquinas redondeadas para ventanas"
}, },
"Rounded corners for windows (border_radius)": { "Rounded corners for windows (border_radius)": {
"Rounded corners for windows (border_radius)": "Esquinas de ventana redondeadas (border_radius)" "Rounded corners for windows (border_radius)": ""
}, },
"Rounded corners for windows (decoration.rounding)": { "Rounded corners for windows (decoration.rounding)": {
"Rounded corners for windows (decoration.rounding)": "Esquinas de ventana redondeadas (decoration.rounding)" "Rounded corners for windows (decoration.rounding)": ""
}, },
"Rule": { "Rule": {
"Rule": "" "Rule": ""
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Guardar archivo" "Save Notepad File": "Guardar archivo"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "" "Save and switch between display configurations": ""
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "Escalar fuentes de la barra independientemente" "Scale DankBar font sizes independently": "Escalar fuentes de la barra independientemente"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Escala todos los tamaños de fuente en todo el shell" "Scale all font sizes throughout the shell": "Escala todos los tamaños de fuente en todo el shell"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Ciencia" "Science": "Ciencia"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "" "Screen Sharing": ""
}, },
@@ -4504,10 +4471,10 @@
"Show Dock": "Mostrar dock" "Show Dock": "Mostrar dock"
}, },
"Show Feels Like Temperature": { "Show Feels Like Temperature": {
"Show Feels Like Temperature": "Mostrar sensación térmica" "Show Feels Like Temperature": ""
}, },
"Show Forecast": { "Show Forecast": {
"Show Forecast": "Mostrar pronóstico" "Show Forecast": ""
}, },
"Show GPU Temperature": { "Show GPU Temperature": {
"Show GPU Temperature": "Mostrar temperatura de la GPU" "Show GPU Temperature": "Mostrar temperatura de la GPU"
@@ -4522,10 +4489,10 @@
"Show Hour Numbers": "Mostrar números de horas" "Show Hour Numbers": "Mostrar números de horas"
}, },
"Show Hourly Forecast": { "Show Hourly Forecast": {
"Show Hourly Forecast": "Mostrar pronóstico por hora" "Show Hourly Forecast": ""
}, },
"Show Humidity": { "Show Humidity": {
"Show Humidity": "Mostrar humedad" "Show Humidity": ""
}, },
"Show Launcher Button": { "Show Launcher Button": {
"Show Launcher Button": "" "Show Launcher Button": ""
@@ -4534,7 +4501,7 @@
"Show Line Numbers": "Mostrar números de líneas" "Show Line Numbers": "Mostrar números de líneas"
}, },
"Show Location": { "Show Location": {
"Show Location": "Mostrar ubicación" "Show Location": ""
}, },
"Show Lock": { "Show Lock": {
"Show Lock": "Mostrar Bloquear" "Show Lock": "Mostrar Bloquear"
@@ -4567,10 +4534,10 @@
"Show Power Off": "Mostrar Apagar" "Show Power Off": "Mostrar Apagar"
}, },
"Show Precipitation Probability": { "Show Precipitation Probability": {
"Show Precipitation Probability": "Mostrar probabilidad de precipitaciones" "Show Precipitation Probability": ""
}, },
"Show Pressure": { "Show Pressure": {
"Show Pressure": "Mostrar presión" "Show Pressure": ""
}, },
"Show Reboot": { "Show Reboot": {
"Show Reboot": "Mostrar Reiniciar" "Show Reboot": "Mostrar Reiniciar"
@@ -4585,7 +4552,7 @@
"Show Seconds": "Mostrar segundos" "Show Seconds": "Mostrar segundos"
}, },
"Show Sunrise/Sunset": { "Show Sunrise/Sunset": {
"Show Sunrise/Sunset": "Mostrar amanecer/anochecer" "Show Sunrise/Sunset": ""
}, },
"Show Suspend": { "Show Suspend": {
"Show Suspend": "Mostrar Suspender" "Show Suspend": "Mostrar Suspender"
@@ -4594,13 +4561,13 @@
"Show Top Processes": "Mostrar procesos principales" "Show Top Processes": "Mostrar procesos principales"
}, },
"Show Weather Condition": { "Show Weather Condition": {
"Show Weather Condition": "Mostrar estado del tiempo" "Show Weather Condition": ""
}, },
"Show Welcome": { "Show Welcome": {
"Show Welcome": "Mostrar bienvenida" "Show Welcome": ""
}, },
"Show Wind Speed": { "Show Wind Speed": {
"Show Wind Speed": "Mostrar velocidad del viento" "Show Wind Speed": ""
}, },
"Show Workspace Apps": { "Show Workspace Apps": {
"Show Workspace Apps": "Mostrar aplicaciones en el espacio de trabajo" "Show Workspace Apps": "Mostrar aplicaciones en el espacio de trabajo"
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "" "Trigger: %1": ""
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "" "Try a different search": ""
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Sin titulo" "Untitled": "Sin titulo"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "" "Update": ""
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "Dispositivo Wi-Fi" "WiFi Device": "Dispositivo Wi-Fi"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFi desactivado" "WiFi disabled": "WiFi desactivado"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "eventos" "events": "eventos"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "" "Unknown GPU": ""
}, },
@@ -5826,28 +5781,28 @@
"GPU Monitoring": "" "GPU Monitoring": ""
}, },
"greeter back button": { "greeter back button": {
"Back": "Atrás" "Back": ""
}, },
"greeter completion page subtitle": { "greeter completion page subtitle": {
"DankMaterialShell is ready to use": "DankMaterialShell está listo para utilizarse" "DankMaterialShell is ready to use": ""
}, },
"greeter completion page title": { "greeter completion page title": {
"You're All Set!": "" "You're All Set!": ""
}, },
"greeter configure keybinds link": { "greeter configure keybinds link": {
"Configure Keybinds": "Configurar atajos de teclado" "Configure Keybinds": ""
}, },
"greeter dankbar description": { "greeter dankbar description": {
"Widgets, layout, style": "" "Widgets, layout, style": ""
}, },
"greeter displays description": { "greeter displays description": {
"Resolution, position, scale": "Resolución, posición, escala" "Resolution, position, scale": ""
}, },
"greeter dock description": { "greeter dock description": {
"Position, pinned apps": "Posición de las aplicaciones fijadas" "Position, pinned apps": ""
}, },
"greeter doctor page button": { "greeter doctor page button": {
"Run Again": "Ejecutar de nuevo" "Run Again": ""
}, },
"greeter doctor page empty state": { "greeter doctor page empty state": {
"No checks passed": "", "No checks passed": "",
@@ -5856,46 +5811,46 @@
"No warnings": "" "No warnings": ""
}, },
"greeter doctor page error count": { "greeter doctor page error count": {
"%1 issue(s) found": "detectado(s) %1 problema(s)" "%1 issue(s) found": ""
}, },
"greeter doctor page loading text": { "greeter doctor page loading text": {
"Analyzing configuration...": "Analizando la configuración..." "Analyzing configuration...": ""
}, },
"greeter doctor page status card": { "greeter doctor page status card": {
"Errors": "Errores", "Errors": "",
"Info": "Información", "Info": "",
"OK": "", "OK": "",
"Warnings": "" "Warnings": ""
}, },
"greeter doctor page success": { "greeter doctor page success": {
"All checks passed": "Todas las comprobaciones fueron exitosas" "All checks passed": ""
}, },
"greeter doctor page title": { "greeter doctor page title": {
"System Check": "" "System Check": ""
}, },
"greeter documentation link": { "greeter documentation link": {
"Docs": "Documentación" "Docs": ""
}, },
"greeter explore section header": { "greeter explore section header": {
"Explore": "Explorar" "Explore": ""
}, },
"greeter feature card description": { "greeter feature card description": {
"Background app icons": "", "Background app icons": "",
"Colors from wallpaper": "Colores del fondo de pantalla", "Colors from wallpaper": "",
"Community themes": "Temas de la comunidad", "Community themes": "",
"Extensible architecture": "Arquitectura extensible", "Extensible architecture": "",
"GTK, Qt, IDEs, more": "GTK, Qt, IDE y más", "GTK, Qt, IDEs, more": "",
"Modular widget bar": "Barra de widgets modular", "Modular widget bar": "",
"Night mode & gamma": "", "Night mode & gamma": "",
"Per-screen config": "", "Per-screen config": "",
"Quick system toggles": "Configuración rápida del sistema", "Quick system toggles": "",
"Security & privacy": "" "Security & privacy": ""
}, },
"greeter feature card title": { "greeter feature card title": {
"App Theming": "", "App Theming": "",
"Control Center": "Centro de control", "Control Center": "",
"Display Control": "Control del monitor", "Display Control": "",
"Dynamic Theming": "Temas dinámicos", "Dynamic Theming": "",
"Multi-Monitor": "", "Multi-Monitor": "",
"System Tray": "", "System Tray": "",
"Theme Registry": "" "Theme Registry": ""
@@ -5904,22 +5859,22 @@
"Plugins": "" "Plugins": ""
}, },
"greeter feature card title | greeter settings link": { "greeter feature card title | greeter settings link": {
"DankBar": "DankBar" "DankBar": ""
}, },
"greeter feature card title | lock screen notifications settings card": { "greeter feature card title | lock screen notifications settings card": {
"Lock Screen": "" "Lock Screen": ""
}, },
"greeter finish button": { "greeter finish button": {
"Finish": "Terminar" "Finish": ""
}, },
"greeter first page button": { "greeter first page button": {
"Get Started": "Comenzar" "Get Started": ""
}, },
"greeter keybinds niri description": { "greeter keybinds niri description": {
"niri shortcuts config": "" "niri shortcuts config": ""
}, },
"greeter keybinds section header": { "greeter keybinds section header": {
"DMS Shortcuts": "Atajos de DMS" "DMS Shortcuts": ""
}, },
"greeter modal window title": { "greeter modal window title": {
"Welcome": "" "Welcome": ""
@@ -5931,39 +5886,39 @@
"No DMS shortcuts configured": "" "No DMS shortcuts configured": ""
}, },
"greeter notifications description": { "greeter notifications description": {
"Popup behavior, position": "Comportamiento y posición de las notificaciones emergentes" "Popup behavior, position": ""
}, },
"greeter settings link": { "greeter settings link": {
"Displays": "Monitores", "Displays": "",
"Dock": "Dock", "Dock": "",
"Keybinds": "Atajos de teclado", "Keybinds": "",
"Notifications": "", "Notifications": "",
"Theme & Colors": "", "Theme & Colors": "",
"Wallpaper": "" "Wallpaper": ""
}, },
"greeter settings section header": { "greeter settings section header": {
"Configure": "Configurar" "Configure": ""
}, },
"greeter skip button": { "greeter skip button": {
"Skip": "Pasar" "Skip": ""
}, },
"greeter skip button tooltip": { "greeter skip button tooltip": {
"Skip setup": "" "Skip setup": ""
}, },
"greeter theme description": { "greeter theme description": {
"Dynamic colors, presets": "Colores y esquemas dinámicos" "Dynamic colors, presets": ""
}, },
"greeter themes link": { "greeter themes link": {
"Themes": "" "Themes": ""
}, },
"greeter wallpaper description": { "greeter wallpaper description": {
"Background image": "Imagen de fondo" "Background image": ""
}, },
"greeter welcome page section header": { "greeter welcome page section header": {
"Features": "Funciones" "Features": ""
}, },
"greeter welcome page tagline": { "greeter welcome page tagline": {
"A modern desktop shell for Wayland compositors": "Un shell de escritorio moderno para compositores Wayland" "A modern desktop shell for Wayland compositors": ""
}, },
"greeter welcome page title": { "greeter welcome page title": {
"Welcome to DankMaterialShell": "" "Welcome to DankMaterialShell": ""
@@ -6008,20 +5963,20 @@
"Loading...": "Cargando..." "Loading...": "Cargando..."
}, },
"lock screen notification mode option": { "lock screen notification mode option": {
"App Names": "Nombre de la aplicación", "App Names": "",
"Count Only": "Solo la cantidad", "Count Only": "",
"Disabled": "Desactivado", "Disabled": "",
"Full Content": "Contenido completo" "Full Content": ""
}, },
"lock screen notification mode option | notification rule match field option": { "lock screen notification mode option | notification rule match field option": {
"App Names": "" "App Names": ""
}, },
"lock screen notification privacy setting": { "lock screen notification privacy setting": {
"Control what notification information is shown on the lock screen": "Controla cuánta información de las notificaciones se muestra en la pantalla de bloqueo", "Control what notification information is shown on the lock screen": "",
"Notification Display": "" "Notification Display": ""
}, },
"lock screen notifications settings card": { "lock screen notifications settings card": {
"Lock Screen": "Pantalla de bloqueo" "Lock Screen": ""
}, },
"loginctl not available - lock integration requires DMS socket connection": { "loginctl not available - lock integration requires DMS socket connection": {
"loginctl not available - lock integration requires DMS socket connection": "loginctl no disponible - integración requiere conexión al socket DMS" "loginctl not available - lock integration requires DMS socket connection": "loginctl no disponible - integración requiere conexión al socket DMS"
@@ -6089,45 +6044,45 @@
"No wallpaper selected": "No hay papel pintado seleccionado" "No wallpaper selected": "No hay papel pintado seleccionado"
}, },
"notification center tab": { "notification center tab": {
"Current": "Actuales", "Current": "",
"History": "Historial" "History": ""
}, },
"notification history filter": { "notification history filter": {
"All": "Todas", "All": "",
"Last hour": "Última hora", "Last hour": "",
"Today": "Hoy", "Today": "",
"Yesterday": "Ayer" "Yesterday": ""
}, },
"notification history filter for content older than other filters": { "notification history filter for content older than other filters": {
"Older": "Más antiguas" "Older": ""
}, },
"notification history filter | notification history retention option": { "notification history filter | notification history retention option": {
"30 days": "30 días", "30 days": "",
"7 days": "7 días" "7 days": ""
}, },
"notification history limit": { "notification history limit": {
"Maximum number of notifications to keep": "Número máximo de notificaciones que se conservarán" "Maximum number of notifications to keep": ""
}, },
"notification history retention option": { "notification history retention option": {
"1 day": "1 día", "1 day": "",
"14 days": "14 días", "14 days": "",
"3 days": "3 días", "3 days": "",
"Forever": "Siempre" "Forever": ""
}, },
"notification history retention settings label": { "notification history retention settings label": {
"History Retention": "Preservación del historial" "History Retention": ""
}, },
"notification history setting": { "notification history setting": {
"Auto-delete notifications older than this": "Eliminar automáticamente las notificaciones más antiguas", "Auto-delete notifications older than this": "",
"Save critical priority notifications to history": "Guardar en el historial las notificaciones de prioridad crítica", "Save critical priority notifications to history": "",
"Save low priority notifications to history": "Guardar en el historial las notificaciones de prioridad baja", "Save low priority notifications to history": "",
"Save normal priority notifications to history": "Guardar en el historial las notificaciones de prioridad normal" "Save normal priority notifications to history": ""
}, },
"notification history toggle description": { "notification history toggle description": {
"Save dismissed notifications to history": "Guardar en el historial las notificaciones ignoradas" "Save dismissed notifications to history": ""
}, },
"notification history toggle label": { "notification history toggle label": {
"Enable History": "Activar historial" "Enable History": ""
}, },
"notification privacy mode placeholder": { "notification privacy mode placeholder": {
"Message Content": "" "Message Content": ""
@@ -6157,7 +6112,7 @@
"Normal Priority": "" "Normal Priority": ""
}, },
"now": { "now": {
"now": "ahora" "now": ""
}, },
"official": { "official": {
"official": "oficial" "official": "oficial"
@@ -6437,7 +6392,7 @@
"wtype not available - install wtype for paste support": "wtype no disponible - instala wtype para soporte de pegado" "wtype not available - install wtype for paste support": "wtype no disponible - instala wtype para soporte de pegado"
}, },
"yesterday": { "yesterday": {
"yesterday": "ayer" "yesterday": ""
}, },
"• Install only from trusted sources": { "• Install only from trusted sources": {
"• Install only from trusted sources": "• Instalar solo desde fuentes confiables" "• Install only from trusted sources": "• Instalar solo desde fuentes confiables"
+9 -54
View File
@@ -770,7 +770,7 @@
"Caps Lock Indicator": "نشانگر Caps Lock" "Caps Lock Indicator": "نشانگر Caps Lock"
}, },
"Caps Lock is on": { "Caps Lock is on": {
"Caps Lock is on": "قفل حروف بزرگ روشن است" "Caps Lock is on": ""
}, },
"Center Section": { "Center Section": {
"Center Section": "بخش مرکزی" "Center Section": "بخش مرکزی"
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "مه" "Fog": "مه"
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "فوکوس مانیتور را دنبال کن" "Follow Monitor Focus": "فوکوس مانیتور را دنبال کن"
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "آیکون" "Icon": "آیکون"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "اندازه آیکون" "Icon Size": "اندازه آیکون"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "تشخیص بزرگ‌شدن پنجره" "Maximize Detection": "تشخیص بزرگ‌شدن پنجره"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "حداکثر اندازه مدخل" "Maximum Entry Size": "حداکثر اندازه مدخل"
}, },
@@ -3209,7 +3194,7 @@
"Named Workspace Icons": "آیکون محیط‌کارهای نام‌دار" "Named Workspace Icons": "آیکون محیط‌کارهای نام‌دار"
}, },
"Navigation": { "Navigation": {
"Navigation": "پیمایش" "Navigation": "مسیریابی"
}, },
"Network": { "Network": {
"Network": "شبکه" "Network": "شبکه"
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "هیچ فایلی یافت نشد" "No files found": "هیچ فایلی یافت نشد"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "هیچ برنامه پنهانی موجود نیست." "No hidden apps.": "هیچ برنامه پنهانی موجود نیست."
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "باز کردن در مرورگر" "Open in Browser": "باز کردن در مرورگر"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "باز‌کردن نوار جستجو برای یافتن متن" "Open search bar to find text": "باز‌کردن نوار جستجو برای یافتن متن"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "حذف" "Remove": "حذف"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "حذف فاصله‌ها و حاشیه هنگام بزرگ‌کردن پنجره‌ها" "Remove gaps and border when windows are maximized": "حذف فاصله‌ها و حاشیه هنگام بزرگ‌کردن پنجره‌ها"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "ذخیره فایل دفترچه یادداشت" "Save Notepad File": "ذخیره فایل دفترچه یادداشت"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "ذخیره و جابه‌جایی بین پیکربندی‌های نمایشگر" "Save and switch between display configurations": "ذخیره و جابه‌جایی بین پیکربندی‌های نمایشگر"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "اندازه فونت نوار دَنک را به صورت مستقل مقیاس کن" "Scale DankBar font sizes independently": "اندازه فونت نوار دَنک را به صورت مستقل مقیاس کن"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "تمام اندازه‌های فونت در سراسر شِل مقیاس کن" "Scale all font sizes throughout the shell": "تمام اندازه‌های فونت در سراسر شِل مقیاس کن"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "علمی" "Science": "علمی"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "اشتراک‌گذاری صفحه" "Screen Sharing": "اشتراک‌گذاری صفحه"
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "راه‌انداز: %1" "Trigger: %1": "راه‌انداز: %1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "یک جستجوی دیگر را امتحان کنید" "Try a different search": "یک جستجوی دیگر را امتحان کنید"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "بدون عنوان" "Untitled": "بدون عنوان"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "بروزرسانی" "Update": "بروزرسانی"
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "دستگاه وای‌فای" "WiFi Device": "دستگاه وای‌فای"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "وای‌فای غیرفعال" "WiFi disabled": "وای‌فای غیرفعال"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "رویداد‌ها" "events": "رویداد‌ها"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "کارت گرافیک ناشناخته" "Unknown GPU": "کارت گرافیک ناشناخته"
}, },
@@ -6061,7 +6016,7 @@
"ms": "ms" "ms": "ms"
}, },
"nav": { "nav": {
"nav": "پیمایش" "nav": "جهت"
}, },
"neovim template description": { "neovim template description": {
"Requires lazy plugin manager": "به مدیریت افزونه lazy نیاز دارد" "Requires lazy plugin manager": "به مدیریت افزونه lazy نیاز دارد"
@@ -6367,13 +6322,13 @@
"Wallpaper Error": "خطای تصویر پس‌زمینه" "Wallpaper Error": "خطای تصویر پس‌زمینه"
}, },
"wallpaper fill mode": { "wallpaper fill mode": {
"Fill": ُر", "Fill": "پرکن",
"Fit": "متناسب", "Fit": "جاشدن",
"Pad": "حاشیه‌دار", "Pad": "حاشیه‌دار",
"Stretch": "کشیده", "Stretch": "کشیده",
"Tile": "کاشی‌وار", "Tile": "کاشی",
"Tile H": "کاشی‌وار افقی", "Tile H": "کاشی افقی",
"Tile V": "کاشی‌وار عمودی" "Tile V": "کاشی عمودی"
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "۱ ساعت", "1 hour": "۱ ساعت",
@@ -6479,6 +6434,6 @@
"• yyyy - Year (2024)": "• yyyy - سال (2024)" "• yyyy - Year (2024)": "• yyyy - سال (2024)"
}, },
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": { "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: پیمایش • Space: گسترش • Enter: اقدام/گسترش • E: متن" "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
+49 -94
View File
@@ -105,10 +105,10 @@
"2 minutes": "2 minutes" "2 minutes": "2 minutes"
}, },
"2 seconds": { "2 seconds": {
"2 seconds": "2 secondes" "2 seconds": ""
}, },
"20 minutes": { "20 minutes": {
"20 minutes": "20 minutes" "20 minutes": ""
}, },
"24-Hour Format": { "24-Hour Format": {
"24-Hour Format": "Format 24 Heures" "24-Hour Format": "Format 24 Heures"
@@ -117,7 +117,7 @@
"24-hour format": "Format 24 heures" "24-hour format": "Format 24 heures"
}, },
"250 ms": { "250 ms": {
"250 ms": "250ms" "250 ms": ""
}, },
"270°": { "270°": {
"270°": "270°" "270°": "270°"
@@ -126,7 +126,7 @@
"3 days": "3 jours" "3 days": "3 jours"
}, },
"3 minutes": { "3 minutes": {
"3 minutes": "3 minutes" "3 minutes": ""
}, },
"3 seconds": { "3 seconds": {
"3 seconds": "3 secondes" "3 seconds": "3 secondes"
@@ -141,7 +141,7 @@
"3rd party": "tiers" "3rd party": "tiers"
}, },
"4 seconds": { "4 seconds": {
"4 seconds": "4 secondes" "4 seconds": ""
}, },
"5 minutes": { "5 minutes": {
"5 minutes": "5 minutes" "5 minutes": "5 minutes"
@@ -150,13 +150,13 @@
"5 seconds": "5 secondes" "5 seconds": "5 secondes"
}, },
"500 ms": { "500 ms": {
"500 ms": "500ms" "500 ms": ""
}, },
"7 days": { "7 days": {
"7 days": "7 jours" "7 days": "7 jours"
}, },
"750 ms": { "750 ms": {
"750 ms": "750ms" "750 ms": ""
}, },
"8 seconds": { "8 seconds": {
"8 seconds": "8 secondes" "8 seconds": "8 secondes"
@@ -770,7 +770,7 @@
"Caps Lock Indicator": "Indicateur Verr. Maj." "Caps Lock Indicator": "Indicateur Verr. Maj."
}, },
"Caps Lock is on": { "Caps Lock is on": {
"Caps Lock is on": "Verr Maj est activé" "Caps Lock is on": ""
}, },
"Center Section": { "Center Section": {
"Center Section": "Partie centrale" "Center Section": "Partie centrale"
@@ -1418,7 +1418,7 @@
"Description": "Description" "Description": "Description"
}, },
"Desktop": { "Desktop": {
"Desktop": "Bureau" "Desktop": ""
}, },
"Desktop Clock": { "Desktop Clock": {
"Desktop Clock": "Horloge du bureau" "Desktop Clock": "Horloge du bureau"
@@ -1592,7 +1592,7 @@
"Docs": "Documentation" "Docs": "Documentation"
}, },
"Documents": { "Documents": {
"Documents": "Documents" "Documents": ""
}, },
"Domain (optional)": { "Domain (optional)": {
"Domain (optional)": "Domaine (optionnel)" "Domain (optional)": "Domaine (optionnel)"
@@ -1607,7 +1607,7 @@
"Door Open": "Porte ouverte" "Door Open": "Porte ouverte"
}, },
"Downloads": { "Downloads": {
"Downloads": "Téléchargements" "Downloads": ""
}, },
"Drag to Reorder": { "Drag to Reorder": {
"Drag to Reorder": "Glisser pour réorganiser" "Drag to Reorder": "Glisser pour réorganiser"
@@ -2087,13 +2087,7 @@
"Focused Window": "Fenêtre active" "Focused Window": "Fenêtre active"
}, },
"Fog": { "Fog": {
"Fog": "Brouillard" "Fog": ""
},
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "Suivre le focus de l’écran" "Follow Monitor Focus": "Suivre le focus de l’écran"
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "Icône" "Icon": "Icône"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Taille d'icônes" "Icon Size": "Taille d'icônes"
}, },
@@ -2828,10 +2819,10 @@
"Light Mode": "Mode Clair" "Light Mode": "Mode Clair"
}, },
"Light Rain": { "Light Rain": {
"Light Rain": "Pluie légère" "Light Rain": ""
}, },
"Light Snow": { "Light Snow": {
"Light Snow": "Neige légère" "Light Snow": ""
}, },
"Light Snow Showers": { "Light Snow Showers": {
"Light Snow Showers": "" "Light Snow Showers": ""
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Détection de maximisation" "Maximize Detection": "Détection de maximisation"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Taille maximale dentrée" "Maximum Entry Size": "Taille maximale dentrée"
}, },
@@ -3188,7 +3173,7 @@
"Moving to Paused": "Mise en pause en cours" "Moving to Paused": "Mise en pause en cours"
}, },
"Music": { "Music": {
"Music": "Musique" "Music": ""
}, },
"Mute popups for %1": { "Mute popups for %1": {
"Mute popups for %1": "Popup en sourdine pour %1" "Mute popups for %1": "Popup en sourdine pour %1"
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Aucun fichier trouvé" "No files found": "Aucun fichier trouvé"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "Aucune appli masquée." "No hidden apps.": "Aucune appli masquée."
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "Ouvrir dans le navigateur" "Open in Browser": "Ouvrir dans le navigateur"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Ouvrir la barre de recherche pour trouver du texte" "Open search bar to find text": "Ouvrir la barre de recherche pour trouver du texte"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Supprimer" "Remove": "Supprimer"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Supprimer les marges et bordures lorsque les fenêtres sont maximisées" "Remove gaps and border when windows are maximized": "Supprimer les marges et bordures lorsque les fenêtres sont maximisées"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Enregistrer le fichier" "Save Notepad File": "Enregistrer le fichier"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "Enregistrer et basculer entre les configurations daffichage" "Save and switch between display configurations": "Enregistrer et basculer entre les configurations daffichage"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "Échelle des polices de la barre indépendamment" "Scale DankBar font sizes independently": "Échelle des polices de la barre indépendamment"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Échelle de toutes les polices dans le shell" "Scale all font sizes throughout the shell": "Échelle de toutes les polices dans le shell"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Science" "Science": "Science"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "Partage d'écran" "Screen Sharing": "Partage d'écran"
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "Déclencheur : %1" "Trigger: %1": "Déclencheur : %1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "Essayez une recherche différente" "Try a different search": "Essayez une recherche différente"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Sans titre" "Untitled": "Sans titre"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "Mettre à jour" "Update": "Mettre à jour"
}, },
@@ -5389,7 +5350,7 @@
"Vibrant palette with playful saturation.": "Palette vibrante avec saturation ludique." "Vibrant palette with playful saturation.": "Palette vibrante avec saturation ludique."
}, },
"Videos": { "Videos": {
"Videos": "Vidéos" "Videos": ""
}, },
"View Mode": { "View Mode": {
"View Mode": "Mode daffichage" "View Mode": "Mode daffichage"
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "Appareil Wi-Fi" "WiFi Device": "Appareil Wi-Fi"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "Wi-Fi désactivé" "WiFi disabled": "Wi-Fi désactivé"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "événements" "events": "événements"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "GPU inconnu" "Unknown GPU": "GPU inconnu"
}, },
@@ -6163,22 +6118,22 @@
"official": "officiel" "official": "officiel"
}, },
"on Hyprland": { "on Hyprland": {
"on Hyprland": "sur Hyprland" "on Hyprland": ""
}, },
"on MangoWC": { "on MangoWC": {
"on MangoWC": "sur MangoWC" "on MangoWC": ""
}, },
"on Miracle WM": { "on Miracle WM": {
"on Miracle WM": "sur Miracle WM" "on Miracle WM": ""
}, },
"on Niri": { "on Niri": {
"on Niri": "sur Niri" "on Niri": ""
}, },
"on Scroll": { "on Scroll": {
"on Scroll": "sur Scroll" "on Scroll": ""
}, },
"on Sway": { "on Sway": {
"on Sway": "sur Sway" "on Sway": ""
}, },
"open": { "open": {
"open": "ouvrir" "open": "ouvrir"
@@ -6231,7 +6186,7 @@
"You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "" "You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": ""
}, },
"qt theme env error title": { "qt theme env error title": {
"Missing Environment Variables": "Variables d'environnement manquantes" "Missing Environment Variables": ""
}, },
"read-only settings warning for NixOS home-manager users": { "read-only settings warning for NixOS home-manager users": {
"Settings are read-only. Changes will not persist.": "Les paramètres sont en lecture seule. Les modifications ne seront pas conservées." "Settings are read-only. Changes will not persist.": "Les paramètres sont en lecture seule. Les modifications ne seront pas conservées."
@@ -6291,7 +6246,7 @@
"Load Average": "Charge moyenne" "Load Average": "Charge moyenne"
}, },
"theme auto mode tab": { "theme auto mode tab": {
"Location": "Localisation" "Location": ""
}, },
"theme auto mode tab | wallpaper cycling mode tab": { "theme auto mode tab | wallpaper cycling mode tab": {
"Time": "" "Time": ""
@@ -6337,7 +6292,7 @@
"Unknown": "Inconnu" "Unknown": "Inconnu"
}, },
"up": { "up": {
"up": "allumé" "up": ""
}, },
"update dms for NM integration.": { "update dms for NM integration.": {
"update dms for NM integration.": "Mettre à jour DMS pour l'intégration NM." "update dms for NM integration.": "Mettre à jour DMS pour l'intégration NM."
@@ -6376,29 +6331,29 @@
"Tile V": "Tuile V" "Tile V": "Tuile V"
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "1 heure", "1 hour": "",
"1 hour 30 minutes": "1 heure et 30 minutes", "1 hour 30 minutes": "",
"1 minute": "1 minute", "1 minute": "",
"10 seconds": "10 secondes", "10 seconds": "",
"12 hours": "12 heures", "12 hours": "",
"15 minutes": "15 minutes", "15 minutes": "",
"15 seconds": "15 secondes", "15 seconds": "",
"2 hours": "2 heures", "2 hours": "",
"20 seconds": "20 secondes", "20 seconds": "",
"25 seconds": "25 secondes", "25 seconds": "",
"3 hours": "3 heures", "3 hours": "",
"30 minutes": "30 minutes", "30 minutes": "",
"30 seconds": "30 secondes", "30 seconds": "",
"35 seconds": "35 secondes", "35 seconds": "",
"4 hours": "4 heures", "4 hours": "",
"40 seconds": "40 secondes", "40 seconds": "",
"45 seconds": "45 secondes", "45 seconds": "",
"5 minutes": "5 minutes", "5 minutes": "",
"5 seconds": "5 secondes", "5 seconds": "",
"50 seconds": "50 secondes", "50 seconds": "",
"55 seconds": "55 secondes", "55 seconds": "",
"6 hours": "6 heures", "6 hours": "",
"8 hours": "8 heures" "8 hours": ""
}, },
"wallpaper not set label": { "wallpaper not set label": {
"Not set": "" "Not set": ""
@@ -6479,6 +6434,6 @@
"• yyyy - Year (2024)": "• yyyy - Année (2024)" "• yyyy - Year (2024)": "• yyyy - Année (2024)"
}, },
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": { "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: Nav • Espace: Étendre • Entrée: Action/Étendre • E: Texte" "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
+82 -127
View File
@@ -105,10 +105,10 @@
"2 minutes": "2 דקות" "2 minutes": "2 דקות"
}, },
"2 seconds": { "2 seconds": {
"2 seconds": "2 שניות" "2 seconds": ""
}, },
"20 minutes": { "20 minutes": {
"20 minutes": "20 דקות" "20 minutes": ""
}, },
"24-Hour Format": { "24-Hour Format": {
"24-Hour Format": "תבנית 24 שעות" "24-Hour Format": "תבנית 24 שעות"
@@ -117,7 +117,7 @@
"24-hour format": "תבנית 24 שעות" "24-hour format": "תבנית 24 שעות"
}, },
"250 ms": { "250 ms": {
"250 ms": "250 ms" "250 ms": ""
}, },
"270°": { "270°": {
"270°": "270°" "270°": "270°"
@@ -126,7 +126,7 @@
"3 days": "3 ימים" "3 days": "3 ימים"
}, },
"3 minutes": { "3 minutes": {
"3 minutes": "3 דקות" "3 minutes": ""
}, },
"3 seconds": { "3 seconds": {
"3 seconds": "3 שניות" "3 seconds": "3 שניות"
@@ -141,7 +141,7 @@
"3rd party": "צד שלישי" "3rd party": "צד שלישי"
}, },
"4 seconds": { "4 seconds": {
"4 seconds": "4 שניות" "4 seconds": ""
}, },
"5 minutes": { "5 minutes": {
"5 minutes": "5 דקות" "5 minutes": "5 דקות"
@@ -150,13 +150,13 @@
"5 seconds": "5 שניות" "5 seconds": "5 שניות"
}, },
"500 ms": { "500 ms": {
"500 ms": "500 מילישניות" "500 ms": ""
}, },
"7 days": { "7 days": {
"7 days": "7 ימים" "7 days": "7 ימים"
}, },
"750 ms": { "750 ms": {
"750 ms": "750 מילישניות" "750 ms": ""
}, },
"8 seconds": { "8 seconds": {
"8 seconds": "8 שניות" "8 seconds": "8 שניות"
@@ -171,7 +171,7 @@
"A file with this name already exists. Do you want to overwrite it?": "קיים כבר קובץ עם השם זה. האם ברצונך לדרוס אותו?" "A file with this name already exists. Do you want to overwrite it?": "קיים כבר קובץ עם השם זה. האם ברצונך לדרוס אותו?"
}, },
"AC Power": { "AC Power": {
"AC Power": "חשמל AC" "AC Power": ""
}, },
"API": { "API": {
"API": "API" "API": "API"
@@ -770,7 +770,7 @@
"Caps Lock Indicator": "מחוון Caps Lock" "Caps Lock Indicator": "מחוון Caps Lock"
}, },
"Caps Lock is on": { "Caps Lock is on": {
"Caps Lock is on": "Caps Lock פעיל" "Caps Lock is on": ""
}, },
"Center Section": { "Center Section": {
"Center Section": "קטע אמצעי" "Center Section": "קטע אמצעי"
@@ -863,7 +863,7 @@
"Clear History?": "לנקות את ההיסטוריה?" "Clear History?": "לנקות את ההיסטוריה?"
}, },
"Clear Sky": { "Clear Sky": {
"Clear Sky": "שמיים בהירים" "Clear Sky": ""
}, },
"Clear all history when server starts": { "Clear all history when server starts": {
"Clear all history when server starts": "נקה/י את כל ההיסטוריה כאשר השרת מופעל" "Clear all history when server starts": "נקה/י את כל ההיסטוריה כאשר השרת מופעל"
@@ -1418,7 +1418,7 @@
"Description": "תיאור" "Description": "תיאור"
}, },
"Desktop": { "Desktop": {
"Desktop": "שולחן העבודה" "Desktop": ""
}, },
"Desktop Clock": { "Desktop Clock": {
"Desktop Clock": "שעון לשולחן העבודה" "Desktop Clock": "שעון לשולחן העבודה"
@@ -1592,7 +1592,7 @@
"Docs": "דוקיומנטציה" "Docs": "דוקיומנטציה"
}, },
"Documents": { "Documents": {
"Documents": "מסמכים" "Documents": ""
}, },
"Domain (optional)": { "Domain (optional)": {
"Domain (optional)": "דומיין (לא חובה)" "Domain (optional)": "דומיין (לא חובה)"
@@ -1607,7 +1607,7 @@
"Door Open": "דלת פתוחה" "Door Open": "דלת פתוחה"
}, },
"Downloads": { "Downloads": {
"Downloads": "הורדות" "Downloads": ""
}, },
"Drag to Reorder": { "Drag to Reorder": {
"Drag to Reorder": "גרור/גררי לסידור מחדש" "Drag to Reorder": "גרור/גררי לסידור מחדש"
@@ -1622,7 +1622,7 @@
"Driver": "מנהל התקן" "Driver": "מנהל התקן"
}, },
"Drizzle": { "Drizzle": {
"Drizzle": "טפטוף" "Drizzle": ""
}, },
"Duplicate": { "Duplicate": {
"Duplicate": "שכפל/י" "Duplicate": "שכפל/י"
@@ -2087,13 +2087,7 @@
"Focused Window": "חלון ממוקד" "Focused Window": "חלון ממוקד"
}, },
"Fog": { "Fog": {
"Fog": "ערפל" "Fog": ""
},
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "מעקב אחרי המסך הממוקד" "Follow Monitor Focus": "מעקב אחרי המסך הממוקד"
@@ -2159,7 +2153,7 @@
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "שחרר/י VRAM/זיכרון כאשר המשגר נסגר. עלול לגרום לעיכוב קל בפתיחה מחדש." "Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "שחרר/י VRAM/זיכרון כאשר המשגר נסגר. עלול לגרום לעיכוב קל בפתיחה מחדש."
}, },
"Freezing Drizzle": { "Freezing Drizzle": {
"Freezing Drizzle": "טפטוף קפוא" "Freezing Drizzle": ""
}, },
"Frequency": { "Frequency": {
"Frequency": "תדירות" "Frequency": "תדירות"
@@ -2267,13 +2261,13 @@
"Health": "בריאות" "Health": "בריאות"
}, },
"Heavy Rain": { "Heavy Rain": {
"Heavy Rain": "גשם כבד" "Heavy Rain": ""
}, },
"Heavy Snow": { "Heavy Snow": {
"Heavy Snow": "שלג כבד" "Heavy Snow": ""
}, },
"Heavy Snow Showers": { "Heavy Snow Showers": {
"Heavy Snow Showers": "מקלחות שלג כבדות" "Heavy Snow Showers": ""
}, },
"Height": { "Height": {
"Height": "גובה" "Height": "גובה"
@@ -2375,7 +2369,7 @@
"Hold to confirm (%1s)": "החזק/י לחוץ כדי לאשר (%1 שניות)" "Hold to confirm (%1s)": "החזק/י לחוץ כדי לאשר (%1 שניות)"
}, },
"Home": { "Home": {
"Home": "בית" "Home": ""
}, },
"Hot Corners": { "Hot Corners": {
"Hot Corners": "פינות חמות" "Hot Corners": "פינות חמות"
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "סמל" "Icon": "סמל"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "גודל סמל" "Icon Size": "גודל סמל"
}, },
@@ -2828,13 +2819,13 @@
"Light Mode": "מצב בהיר" "Light Mode": "מצב בהיר"
}, },
"Light Rain": { "Light Rain": {
"Light Rain": "גשם קל" "Light Rain": ""
}, },
"Light Snow": { "Light Snow": {
"Light Snow": "שלג קל" "Light Snow": ""
}, },
"Light Snow Showers": { "Light Snow Showers": {
"Light Snow Showers": "מקלחות שלג קלות" "Light Snow Showers": ""
}, },
"Linear": { "Linear": {
"Linear": "ליניארי" "Linear": "ליניארי"
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "זיהוי הגדלה של החלון" "Maximize Detection": "זיהוי הגדלה של החלון"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "גודל רשומה מקסימלי" "Maximum Entry Size": "גודל רשומה מקסימלי"
}, },
@@ -3188,7 +3173,7 @@
"Moving to Paused": "עובר להשהיה" "Moving to Paused": "עובר להשהיה"
}, },
"Music": { "Music": {
"Music": "מוסיקה" "Music": ""
}, },
"Mute popups for %1": { "Mute popups for %1": {
"Mute popups for %1": "השתק/י חלונות קופצים עבור %1" "Mute popups for %1": "השתק/י חלונות קופצים עבור %1"
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "לא נמצאו קבצים" "No files found": "לא נמצאו קבצים"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "אין אפליקציות מוסתרות." "No hidden apps.": "אין אפליקציות מוסתרות."
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "פתח/י בדפדפן" "Open in Browser": "פתח/י בדפדפן"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "פתח/י שורת חיפוש כדי למצוא טקסט" "Open search bar to find text": "פתח/י שורת חיפוש כדי למצוא טקסט"
}, },
@@ -3614,7 +3593,7 @@
"Outputs Include Missing": "קובץ includes של פלטי תצוגה חסר" "Outputs Include Missing": "קובץ includes של פלטי תצוגה חסר"
}, },
"Overcast": { "Overcast": {
"Overcast": "מעונן" "Overcast": ""
}, },
"Overflow": { "Overflow": {
"Overflow": "גלישה" "Overflow": "גלישה"
@@ -3674,7 +3653,7 @@
"Pairing...": "מתאים..." "Pairing...": "מתאים..."
}, },
"Partly Cloudy": { "Partly Cloudy": {
"Partly Cloudy": "מעונן חלקית" "Partly Cloudy": ""
}, },
"Passkey:": { "Passkey:": {
"Passkey:": "מפתח גישה:" "Passkey:": "מפתח גישה:"
@@ -3784,7 +3763,7 @@
"Unavailable": "לא זמין" "Unavailable": "לא זמין"
}, },
"Pictures": { "Pictures": {
"Pictures": "תמונות" "Pictures": ""
}, },
"Pin": { "Pin": {
"Pin": "הצמד/י" "Pin": "הצמד/י"
@@ -4012,7 +3991,7 @@
"Protocol": "פרוטוקול" "Protocol": "פרוטוקול"
}, },
"Quick Access": { "Quick Access": {
"Quick Access": "גישה מהירה" "Quick Access": ""
}, },
"Quick access to application launcher": { "Quick access to application launcher": {
"Quick access to application launcher": "גישה מהירה למשגר האפליקציות" "Quick access to application launcher": "גישה מהירה למשגר האפליקציות"
@@ -4033,7 +4012,7 @@
"Radius": "רדיוס" "Radius": "רדיוס"
}, },
"Rain": { "Rain": {
"Rain": "גשם" "Rain": ""
}, },
"Rain Chance": { "Rain Chance": {
"Rain Chance": "סיכוי לגשם" "Rain Chance": "סיכוי לגשם"
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "הסר/י" "Remove": "הסר/י"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "הסר/י רווחים ומסגרת כאשר חלונות ממוקסמים" "Remove gaps and border when windows are maximized": "הסר/י רווחים ומסגרת כאשר חלונות ממוקסמים"
}, },
@@ -4105,7 +4081,7 @@
"Requires DMS %1": "DMS %1 נדרש" "Requires DMS %1": "DMS %1 נדרש"
}, },
"Requires DWL compositor": { "Requires DWL compositor": {
"Requires DWL compositor": "קומפוזיטור DWL נדרש" "Requires DWL compositor": "דורש קומפוזיטור DWL"
}, },
"Requires night mode support": { "Requires night mode support": {
"Requires night mode support": "תמיכה במצב לילה נדרשת" "Requires night mode support": "תמיכה במצב לילה נדרשת"
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "שמור/י פתק כקובץ" "Save Notepad File": "שמור/י פתק כקובץ"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "שמור/שמרי והחלף/החליפי בין תצורות תצוגה" "Save and switch between display configurations": "שמור/שמרי והחלף/החליפי בין תצורות תצוגה"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "שנה/י את גודל הגופנים של DankBar באופן עצמאי" "Scale DankBar font sizes independently": "שנה/י את גודל הגופנים של DankBar באופן עצמאי"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "שנה/י קנה מידה של כל גדלי הגופנים בכל המעטפת" "Scale all font sizes throughout the shell": "שנה/י קנה מידה של כל גדלי הגופנים בכל המעטפת"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "מדע" "Science": "מדע"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "שיתוף מסך" "Screen Sharing": "שיתוף מסך"
}, },
@@ -4543,7 +4510,7 @@
"Show Log Out": "הצג/י התנתקות" "Show Log Out": "הצג/י התנתקות"
}, },
"Show Material Design ripple animations on interactive elements": { "Show Material Design ripple animations on interactive elements": {
"Show Material Design ripple animations on interactive elements": "הצג/י אנימציות של אדוות בעיצוב Material על גבי רכיבים אינטראקטיביים" "Show Material Design ripple animations on interactive elements": "הצג/י אנימציות של אדוות Material Design על רכיבים אינטראקטיביים"
}, },
"Show Memory": { "Show Memory": {
"Show Memory": "הצג/י זיכרון" "Show Memory": "הצג/י זיכרון"
@@ -4747,7 +4714,7 @@
"Snap": "הצמד/י" "Snap": "הצמד/י"
}, },
"Snow": { "Snow": {
"Snow": "שלג" "Snow": ""
}, },
"Some plugins require a newer version of DMS:": { "Some plugins require a newer version of DMS:": {
"Some plugins require a newer version of DMS:": "תוספים מסוימים דורשים גרסה חדשה יותר של DMS:" "Some plugins require a newer version of DMS:": "תוספים מסוימים דורשים גרסה חדשה יותר של DMS:"
@@ -4846,7 +4813,7 @@
"Suspend system after": "העבר/י את המערכת למצב השהיה לאחר" "Suspend system after": "העבר/י את המערכת למצב השהיה לאחר"
}, },
"Suspend then Hibernate": { "Suspend then Hibernate": {
"Suspend then Hibernate": "השהיה ואחריה שינה עמוקה" "Suspend then Hibernate": ""
}, },
"Swap": { "Swap": {
"Swap": "זיכרון החלפה (Swap)" "Swap": "זיכרון החלפה (Swap)"
@@ -4963,7 +4930,7 @@
"Third-Party Plugin Warning": "אזהרת תוסף צד שלישי" "Third-Party Plugin Warning": "אזהרת תוסף צד שלישי"
}, },
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": { "Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרו על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\n\nתוספים אלה עלולים להוות סיכוני אבטחה ופרטיות - התקן/י על אחריותך בלבד." "Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\n\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרו על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\n\nתוספים אלה עלולים להוות סיכוני אבטחה ופרטיות - התקן/י על אחריותך."
}, },
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": { "Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": {
"Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרים על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\\n\\nתוספים אלה עלולים להוות סיכון אבטחה ופרטיות – התקן/י אותם על אחריותך בלבד." "Third-party plugins are created by the community and are not officially supported by DankMaterialShell.\\n\\nThese plugins may pose security and privacy risks - install at your own risk.": "תוספי צד שלישי נוצרים על ידי הקהילה ואינם נתמכים רשמית על ידי DankMaterialShell.\\n\\nתוספים אלה עלולים להוות סיכון אבטחה ופרטיות – התקן/י אותם על אחריותך בלבד."
@@ -4987,10 +4954,10 @@
"This will permanently remove this saved clipboard item. This action cannot be undone.": "זה יסיר לצמיתות את פריט לוח ההעתקה השמור הזה. לא ניתן לבטל פעולה זו." "This will permanently remove this saved clipboard item. This action cannot be undone.": "זה יסיר לצמיתות את פריט לוח ההעתקה השמור הזה. לא ניתן לבטל פעולה זו."
}, },
"Thunderstorm": { "Thunderstorm": {
"Thunderstorm": "סערת ברקים" "Thunderstorm": ""
}, },
"Thunderstorm with Hail": { "Thunderstorm with Hail": {
"Thunderstorm with Hail": "סערת ברקים עם ברד" "Thunderstorm with Hail": ""
}, },
"Tiled": { "Tiled": {
"Tiled": "באריחים" "Tiled": "באריחים"
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "מפעיל: %1" "Trigger: %1": "מפעיל: %1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "נסה/י חיפוש אחר" "Try a different search": "נסה/י חיפוש אחר"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "ללא כותרת" "Untitled": "ללא כותרת"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "עדכן/י" "Update": "עדכן/י"
}, },
@@ -5389,7 +5350,7 @@
"Vibrant palette with playful saturation.": "פלטת צבעים עשירה עם רוויה משחקית." "Vibrant palette with playful saturation.": "פלטת צבעים עשירה עם רוויה משחקית."
}, },
"Videos": { "Videos": {
"Videos": "סרטונים" "Videos": ""
}, },
"View Mode": { "View Mode": {
"View Mode": "מצב תצוגה" "View Mode": "מצב תצוגה"
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "התקן WiFi" "WiFi Device": "התקן WiFi"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFi מושבת" "WiFi disabled": "WiFi מושבת"
}, },
@@ -5664,7 +5622,7 @@
"Thickness": "עובי" "Thickness": "עובי"
}, },
"brandon": { "brandon": {
"brandon": "brandon" "brandon": ""
}, },
"browse themes button | theme browser header | theme browser window title": { "browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "עיין/י בערכות נושא" "Browse Themes": "עיין/י בערכות נושא"
@@ -5710,7 +5668,7 @@
"Click to select a custom theme JSON file": "לחץ/י כדי לבחור קובץ JSON של ערכת נושא מותאמת אישית" "Click to select a custom theme JSON file": "לחץ/י כדי לבחור קובץ JSON של ערכת נושא מותאמת אישית"
}, },
"dark mode wallpaper color picker title": { "dark mode wallpaper color picker title": {
"Choose Dark Mode Color": "בחר/י צבע למצב כהה" "Choose Dark Mode Color": ""
}, },
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": { "dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "בחר/י רקע" "Select Wallpaper": "בחר/י רקע"
@@ -5725,13 +5683,13 @@
"Month Date": "חודש תאריך", "Month Date": "חודש תאריך",
"Numeric (D/M)": "מספרי (D/M)", "Numeric (D/M)": "מספרי (D/M)",
"Numeric (M/D)": "מספרי (M/D)", "Numeric (M/D)": "מספרי (M/D)",
"System Default": "ברירת מחדל של המערכת" "System Default": "ברירת מחדל מערכת"
}, },
"days": { "days": {
"days": "ימים" "days": "ימים"
}, },
"default monitor label suffix": { "default monitor label suffix": {
"(Default)": "(ברירת מחדל)" "(Default)": ""
}, },
"dgop not available": { "dgop not available": {
"dgop not available": "dgop אינו זמין" "dgop not available": "dgop אינו זמין"
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "אירועים" "events": "אירועים"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "GPU לא ידוע" "Unknown GPU": "GPU לא ידוע"
}, },
@@ -6002,7 +5957,7 @@
"leave empty for default": "השאר/י ריק לברירת מחדל" "leave empty for default": "השאר/י ריק לברירת מחדל"
}, },
"light mode wallpaper color picker title": { "light mode wallpaper color picker title": {
"Choose Light Mode Color": "בחר/י צבע למצב בהיר" "Choose Light Mode Color": ""
}, },
"loading indicator": { "loading indicator": {
"Loading...": "טוען..." "Loading...": "טוען..."
@@ -6064,7 +6019,7 @@
"nav": "ניווט" "nav": "ניווט"
}, },
"neovim template description": { "neovim template description": {
"Requires lazy plugin manager": "מנהל התוספים 'lazy' נדרש" "Requires lazy plugin manager": ""
}, },
"network status": { "network status": {
"Connected": "מחובר", "Connected": "מחובר",
@@ -6080,7 +6035,7 @@
"No custom theme file": "אין קובץ ערכת נושא מותאמת אישית" "No custom theme file": "אין קובץ ערכת נושא מותאמת אישית"
}, },
"no monitors available label": { "no monitors available label": {
"No monitors": "אין מסכים" "No monitors": ""
}, },
"no registry themes installed hint": { "no registry themes installed hint": {
"No themes installed. Browse themes to install from the registry.": "אין ערכות נושא מותקנות. עיין/י בערכות נושא להתקנה מהמאגר." "No themes installed. Browse themes to install from the registry.": "אין ערכות נושא מותקנות. עיין/י בערכות נושא להתקנה מהמאגר."
@@ -6163,22 +6118,22 @@
"official": "רשמי" "official": "רשמי"
}, },
"on Hyprland": { "on Hyprland": {
"on Hyprland": "על Hyprland" "on Hyprland": ""
}, },
"on MangoWC": { "on MangoWC": {
"on MangoWC": "על MangoWC" "on MangoWC": ""
}, },
"on Miracle WM": { "on Miracle WM": {
"on Miracle WM": "על Miracle WM" "on Miracle WM": ""
}, },
"on Niri": { "on Niri": {
"on Niri": "על Niri" "on Niri": ""
}, },
"on Scroll": { "on Scroll": {
"on Scroll": "על Scroll" "on Scroll": ""
}, },
"on Sway": { "on Sway": {
"on Sway": "על Sway" "on Sway": ""
}, },
"open": { "open": {
"open": "פתח/י" "open": "פתח/י"
@@ -6228,10 +6183,10 @@
"Select Profile Image": "בחר/י תמונת פרופיל" "Select Profile Image": "בחר/י תמונת פרופיל"
}, },
"qt theme env error body": { "qt theme env error body": {
"You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "עליך להגדיר את אחד מהמשתנים הבאים:\nQT_QPA_PLATFORMTHEME=gtk3 או\nQT_QPA_PLATFORMTHEME=qt6ct\nכמשתני סביבה ולאחר מכן להפעיל מחדש את DMS.\n\n* qt6ct דורש התקנה של qt6ct-kde." "You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": ""
}, },
"qt theme env error title": { "qt theme env error title": {
"Missing Environment Variables": "משתני סביבה חסרים" "Missing Environment Variables": ""
}, },
"read-only settings warning for NixOS home-manager users": { "read-only settings warning for NixOS home-manager users": {
"Settings are read-only. Changes will not persist.": "ההגדרות הן לקריאה בלבד. שינויים לא יישמרו." "Settings are read-only. Changes will not persist.": "ההגדרות הן לקריאה בלבד. שינויים לא יישמרו."
@@ -6291,10 +6246,10 @@
"Load Average": "עומס ממוצע" "Load Average": "עומס ממוצע"
}, },
"theme auto mode tab": { "theme auto mode tab": {
"Location": "מיקום" "Location": ""
}, },
"theme auto mode tab | wallpaper cycling mode tab": { "theme auto mode tab | wallpaper cycling mode tab": {
"Time": "זמן" "Time": ""
}, },
"theme browser description": { "theme browser description": {
"Install color themes from the DMS theme registry": "התקן/י ערכות צבעים ממאגר ערכות הנושא של DMS" "Install color themes from the DMS theme registry": "התקן/י ערכות צבעים ממאגר ערכות הנושא של DMS"
@@ -6337,7 +6292,7 @@
"Unknown": "לא ידוע" "Unknown": "לא ידוע"
}, },
"up": { "up": {
"up": "פועל" "up": ""
}, },
"update dms for NM integration.": { "update dms for NM integration.": {
"update dms for NM integration.": "עדכן/י את DMS כדי לאפשר אינטגרציה עם NM." "update dms for NM integration.": "עדכן/י את DMS כדי לאפשר אינטגרציה עם NM."
@@ -6352,10 +6307,10 @@
"Requires %1": "גרסה %1 נדרשת" "Requires %1": "גרסה %1 נדרשת"
}, },
"wallpaper color picker title": { "wallpaper color picker title": {
"Choose Wallpaper Color": "בחר/י צבע לרקע" "Choose Wallpaper Color": ""
}, },
"wallpaper cycling mode tab": { "wallpaper cycling mode tab": {
"Interval": "מרווח זמן" "Interval": ""
}, },
"wallpaper directory file browser title": { "wallpaper directory file browser title": {
"Select Wallpaper Directory": "בחר/י תיקיית רקעים" "Select Wallpaper Directory": "בחר/י תיקיית רקעים"
@@ -6376,32 +6331,32 @@
"Tile V": "אריח אנכי" "Tile V": "אריח אנכי"
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "שעה אחת", "1 hour": "",
"1 hour 30 minutes": "שעה וחצי (ו30 דקות)", "1 hour 30 minutes": "",
"1 minute": "דקה אחת", "1 minute": "",
"10 seconds": "10 שניות", "10 seconds": "",
"12 hours": "12 שעות", "12 hours": "",
"15 minutes": "15 דקות", "15 minutes": "",
"15 seconds": "15 שניות", "15 seconds": "",
"2 hours": "2 שעות", "2 hours": "",
"20 seconds": "20 שניות", "20 seconds": "",
"25 seconds": "25 שניות", "25 seconds": "",
"3 hours": "3 שעות", "3 hours": "",
"30 minutes": "30 דקות", "30 minutes": "",
"30 seconds": "30 שניות", "30 seconds": "",
"35 seconds": "35 שניות", "35 seconds": "",
"4 hours": "4 שעות", "4 hours": "",
"40 seconds": "40 שניות", "40 seconds": "",
"45 seconds": "45 שניות", "45 seconds": "",
"5 minutes": "5 דקות", "5 minutes": "",
"5 seconds": "5 שניות", "5 seconds": "",
"50 seconds": "50 שניות", "50 seconds": "",
"55 seconds": "55 שניות", "55 seconds": "",
"6 hours": "6 שעות", "6 hours": "",
"8 hours": "8 שעות" "8 hours": ""
}, },
"wallpaper not set label": { "wallpaper not set label": {
"Not set": "לא מוגדר" "Not set": ""
}, },
"wallpaper processing error": { "wallpaper processing error": {
"Wallpaper processing failed": "עיבוד תמונת הרקע נכשל" "Wallpaper processing failed": "עיבוד תמונת הרקע נכשל"
@@ -6479,6 +6434,6 @@
"• yyyy - Year (2024)": "• yyyy - שנה (2024)" "• yyyy - Year (2024)": "• yyyy - שנה (2024)"
}, },
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": { "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: ניווט • Space: הרחב • Enter: פעולה/הרחבה • E: טקסט" "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
File diff suppressed because it is too large Load Diff
-45
View File
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "Nebbia" "Fog": "Nebbia"
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "Segui lo Schermo Attivo" "Follow Monitor Focus": "Segui lo Schermo Attivo"
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "Icona" "Icon": "Icona"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Dimensione Icona" "Icon Size": "Dimensione Icona"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Rilevamento Finestra Massimizzata" "Maximize Detection": "Rilevamento Finestra Massimizzata"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Dimensione Massima della Voce" "Maximum Entry Size": "Dimensione Massima della Voce"
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Nessun file trovato" "No files found": "Nessun file trovato"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "Nessuna app nascosta." "No hidden apps.": "Nessuna app nascosta."
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "Apri nel Browser" "Open in Browser": "Apri nel Browser"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Apri barra di ricerca per cercare testo" "Open search bar to find text": "Apri barra di ricerca per cercare testo"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Rimuovi" "Remove": "Rimuovi"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Rimuovi spazi e bordo quando le finestre sono massimizzate" "Remove gaps and border when windows are maximized": "Rimuovi spazi e bordo quando le finestre sono massimizzate"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Salva File Blocco Note" "Save Notepad File": "Salva File Blocco Note"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "Salva e passa tra le configurazioni dello schermo" "Save and switch between display configurations": "Salva e passa tra le configurazioni dello schermo"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "Scala le dimensioni dei font della DankBar in modo indipendente" "Scale DankBar font sizes independently": "Scala le dimensioni dei font della DankBar in modo indipendente"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Ridimensiona tutte le dimensioni dei caratteri nell'intera shell" "Scale all font sizes throughout the shell": "Ridimensiona tutte le dimensioni dei caratteri nell'intera shell"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Scienza" "Science": "Scienza"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "Condivisione dello Schermo" "Screen Sharing": "Condivisione dello Schermo"
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "Attivatore: %1" "Trigger: %1": "Attivatore: %1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "Prova una ricerca diversa" "Try a different search": "Prova una ricerca diversa"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Senza Titolo" "Untitled": "Senza Titolo"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "Aggiorna" "Update": "Aggiorna"
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "Dispositivo WiFi" "WiFi Device": "Dispositivo WiFi"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFi disattivato" "WiFi disabled": "WiFi disattivato"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "eventi" "events": "eventi"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "GPU Sconosciuta" "Unknown GPU": "GPU Sconosciuta"
}, },
-45
View File
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "" "Fog": ""
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "" "Follow Monitor Focus": ""
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "" "Icon": ""
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "アイコンサイズ" "Icon Size": "アイコンサイズ"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "" "Maximize Detection": ""
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "" "Maximum Entry Size": ""
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "ファイルが見つかりませんでした" "No files found": "ファイルが見つかりませんでした"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "" "No hidden apps.": ""
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "" "Open in Browser": ""
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "検索バーを開いてテキストを検索" "Open search bar to find text": "検索バーを開いてテキストを検索"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "削除" "Remove": "削除"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "" "Remove gaps and border when windows are maximized": ""
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "メモ帳ファイルを保存" "Save Notepad File": "メモ帳ファイルを保存"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "" "Save and switch between display configurations": ""
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "Dank Barのフォントサイズを個別に調整" "Scale DankBar font sizes independently": "Dank Barのフォントサイズを個別に調整"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "" "Scale all font sizes throughout the shell": ""
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "科学" "Science": "科学"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "" "Screen Sharing": ""
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "" "Trigger: %1": ""
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "" "Try a different search": ""
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "無題" "Untitled": "無題"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "" "Update": ""
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "" "WiFi Device": ""
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFiを無効化にしました" "WiFi disabled": "WiFiを無効化にしました"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "イベント" "events": "イベント"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "" "Unknown GPU": ""
}, },
+102 -147
View File
@@ -105,10 +105,10 @@
"2 minutes": "2 minuten" "2 minutes": "2 minuten"
}, },
"2 seconds": { "2 seconds": {
"2 seconds": "2 seconden" "2 seconds": ""
}, },
"20 minutes": { "20 minutes": {
"20 minutes": "20 minuten" "20 minutes": ""
}, },
"24-Hour Format": { "24-Hour Format": {
"24-Hour Format": "24-uursnotatie" "24-Hour Format": "24-uursnotatie"
@@ -117,7 +117,7 @@
"24-hour format": "24-uursnotatie" "24-hour format": "24-uursnotatie"
}, },
"250 ms": { "250 ms": {
"250 ms": "250 ms" "250 ms": ""
}, },
"270°": { "270°": {
"270°": "270°" "270°": "270°"
@@ -126,7 +126,7 @@
"3 days": "3 dagen" "3 days": "3 dagen"
}, },
"3 minutes": { "3 minutes": {
"3 minutes": "3 minuten" "3 minutes": ""
}, },
"3 seconds": { "3 seconds": {
"3 seconds": "3 seconden" "3 seconds": "3 seconden"
@@ -141,7 +141,7 @@
"3rd party": "Derden" "3rd party": "Derden"
}, },
"4 seconds": { "4 seconds": {
"4 seconds": "4 seconden" "4 seconds": ""
}, },
"5 minutes": { "5 minutes": {
"5 minutes": "5 minuten" "5 minutes": "5 minuten"
@@ -150,13 +150,13 @@
"5 seconds": "5 seconden" "5 seconds": "5 seconden"
}, },
"500 ms": { "500 ms": {
"500 ms": "500 ms" "500 ms": ""
}, },
"7 days": { "7 days": {
"7 days": "7 dagen" "7 days": "7 dagen"
}, },
"750 ms": { "750 ms": {
"750 ms": "750 ms" "750 ms": ""
}, },
"8 seconds": { "8 seconds": {
"8 seconds": "8 seconden" "8 seconds": "8 seconden"
@@ -171,7 +171,7 @@
"A file with this name already exists. Do you want to overwrite it?": "Er bestaat al een bestand met deze naam. Wilt u het overschrijven?" "A file with this name already exists. Do you want to overwrite it?": "Er bestaat al een bestand met deze naam. Wilt u het overschrijven?"
}, },
"AC Power": { "AC Power": {
"AC Power": "Netstroom" "AC Power": ""
}, },
"API": { "API": {
"API": "API" "API": "API"
@@ -381,7 +381,7 @@
"Apps with custom display name, icon, or launch options. Right-click an app and select 'Edit App' to customize.": "Apps met aangepaste weergavenaam, pictogram of startopties. Klik rechts op een app en selecteer 'App bewerken' om aan te passen." "Apps with custom display name, icon, or launch options. Right-click an app and select 'Edit App' to customize.": "Apps met aangepaste weergavenaam, pictogram of startopties. Klik rechts op een app en selecteer 'App bewerken' om aan te passen."
}, },
"Apps with notification popups muted. Unmute or delete to remove.": { "Apps with notification popups muted. Unmute or delete to remove.": {
"Apps with notification popups muted. Unmute or delete to remove.": "Apps met gedempte meldingspop-ups. Dempen opheffen of verwijderen om te wissen." "Apps with notification popups muted. Unmute or delete to remove.": ""
}, },
"Arrange displays and configure resolution, refresh rate, and VRR": { "Arrange displays and configure resolution, refresh rate, and VRR": {
"Arrange displays and configure resolution, refresh rate, and VRR": "Beeldschermen rangschikken en resolutie, verversingssnelheid en VRR configureren" "Arrange displays and configure resolution, refresh rate, and VRR": "Beeldschermen rangschikken en resolutie, verversingssnelheid en VRR configureren"
@@ -587,7 +587,7 @@
"Bar Transparency": "Balktransparantie" "Bar Transparency": "Balktransparantie"
}, },
"Base duration for animations (drag to use Custom)": { "Base duration for animations (drag to use Custom)": {
"Base duration for animations (drag to use Custom)": "Basisduur voor animaties (sleep om Aangepast te gebruiken)" "Base duration for animations (drag to use Custom)": ""
}, },
"Battery": { "Battery": {
"Battery": "Batterij" "Battery": "Batterij"
@@ -770,7 +770,7 @@
"Caps Lock Indicator": "Caps Lock-indicator" "Caps Lock Indicator": "Caps Lock-indicator"
}, },
"Caps Lock is on": { "Caps Lock is on": {
"Caps Lock is on": "Caps Lock staat aan" "Caps Lock is on": ""
}, },
"Center Section": { "Center Section": {
"Center Section": "Middensectie" "Center Section": "Middensectie"
@@ -863,7 +863,7 @@
"Clear History?": "Geschiedenis wissen?" "Clear History?": "Geschiedenis wissen?"
}, },
"Clear Sky": { "Clear Sky": {
"Clear Sky": "Heldere hemel" "Clear Sky": ""
}, },
"Clear all history when server starts": { "Clear all history when server starts": {
"Clear all history when server starts": "Alle geschiedenis wissen wanneer server start" "Clear all history when server starts": "Alle geschiedenis wissen wanneer server start"
@@ -1112,7 +1112,7 @@
"Control Center Tile Color": "Tegelkleur bedieningspaneel" "Control Center Tile Color": "Tegelkleur bedieningspaneel"
}, },
"Control animation duration for notification popups and history": { "Control animation duration for notification popups and history": {
"Control animation duration for notification popups and history": "Animatieduur voor meldingspop-ups en geschiedenis beheren" "Control animation duration for notification popups and history": ""
}, },
"Control currently playing media": { "Control currently playing media": {
"Control currently playing media": "Huidige media bedienen" "Control currently playing media": "Huidige media bedienen"
@@ -1205,7 +1205,7 @@
"Create rules to mute, ignore, hide from history, or override notification priority.": "Maak regels om meldingen te dempen, te negeren, uit de geschiedenis te verbergen of de prioriteit te overschrijven." "Create rules to mute, ignore, hide from history, or override notification priority.": "Maak regels om meldingen te dempen, te negeren, uit de geschiedenis te verbergen of de prioriteit te overschrijven."
}, },
"Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": { "Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": {
"Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": "Regels maken om meldingen te dempen, negeren, verbergen in geschiedenis of prioriteit te overschrijven. Standaard wordt alleen de prioriteit overschreven; meldingen worden nog steeds normaal weergegeven." "Create rules to mute, ignore, hide from history, or override notification priority. Default only overrides priority; notifications still show normally.": ""
}, },
"Creating...": { "Creating...": {
"Creating...": "Aanmaken..." "Creating...": "Aanmaken..."
@@ -1418,7 +1418,7 @@
"Description": "Beschrijving" "Description": "Beschrijving"
}, },
"Desktop": { "Desktop": {
"Desktop": "Bureaublad" "Desktop": ""
}, },
"Desktop Clock": { "Desktop Clock": {
"Desktop Clock": "Bureaubladklok" "Desktop Clock": "Bureaubladklok"
@@ -1592,7 +1592,7 @@
"Docs": "Documentatie" "Docs": "Documentatie"
}, },
"Documents": { "Documents": {
"Documents": "Documenten" "Documents": ""
}, },
"Domain (optional)": { "Domain (optional)": {
"Domain (optional)": "Domein (optioneel)" "Domain (optional)": "Domein (optioneel)"
@@ -1607,7 +1607,7 @@
"Door Open": "Deur open" "Door Open": "Deur open"
}, },
"Downloads": { "Downloads": {
"Downloads": "Downloads" "Downloads": ""
}, },
"Drag to Reorder": { "Drag to Reorder": {
"Drag to Reorder": "Sleep om te rangschikken" "Drag to Reorder": "Sleep om te rangschikken"
@@ -1622,7 +1622,7 @@
"Driver": "Stuurprogramma" "Driver": "Stuurprogramma"
}, },
"Drizzle": { "Drizzle": {
"Drizzle": "Motregen" "Drizzle": ""
}, },
"Duplicate": { "Duplicate": {
"Duplicate": "Dupliceren" "Duplicate": "Dupliceren"
@@ -1631,7 +1631,7 @@
"Duplicate Wallpaper with Blur": "Achtergrond dupliceren met vervaging" "Duplicate Wallpaper with Blur": "Achtergrond dupliceren met vervaging"
}, },
"Duration": { "Duration": {
"Duration": "Duur" "Duration": ""
}, },
"Dusk (Astronomical Twilight)": { "Dusk (Astronomical Twilight)": {
"Dusk (Astronomical Twilight)": "Avondschemering (Astronomische schemering)" "Dusk (Astronomical Twilight)": "Avondschemering (Astronomische schemering)"
@@ -2087,13 +2087,7 @@
"Focused Window": "Actieve venster" "Focused Window": "Actieve venster"
}, },
"Fog": { "Fog": {
"Fog": "Mist" "Fog": ""
},
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
}, },
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "Monitorfocus volgen" "Follow Monitor Focus": "Monitorfocus volgen"
@@ -2156,10 +2150,10 @@
"Format Legend": "Legenda voor notatie" "Format Legend": "Legenda voor notatie"
}, },
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": { "Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": {
"Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": "VRAM/geheugen vrijmaken wanneer het startmenu gesloten is. Dit kan een lichte vertraging veroorzaken bij het heropenen." "Free VRAM/memory when the launcher is closed. May cause a slight delay when reopening.": ""
}, },
"Freezing Drizzle": { "Freezing Drizzle": {
"Freezing Drizzle": "IJzel" "Freezing Drizzle": ""
}, },
"Frequency": { "Frequency": {
"Frequency": "Frequentie" "Frequency": "Frequentie"
@@ -2267,13 +2261,13 @@
"Health": "Gezondheid" "Health": "Gezondheid"
}, },
"Heavy Rain": { "Heavy Rain": {
"Heavy Rain": "Zware regen" "Heavy Rain": ""
}, },
"Heavy Snow": { "Heavy Snow": {
"Heavy Snow": "Zware sneeuwval" "Heavy Snow": ""
}, },
"Heavy Snow Showers": { "Heavy Snow Showers": {
"Heavy Snow Showers": "Zware sneeuwbuien" "Heavy Snow Showers": ""
}, },
"Height": { "Height": {
"Height": "Hoogte" "Height": "Hoogte"
@@ -2294,7 +2288,7 @@
"Hidden": "Verborgen" "Hidden": "Verborgen"
}, },
"Hidden (%1)": { "Hidden (%1)": {
"Hidden (%1)": "Verborgen (%1)" "Hidden (%1)": ""
}, },
"Hidden Apps": { "Hidden Apps": {
"Hidden Apps": "Verborgen apps" "Hidden Apps": "Verborgen apps"
@@ -2336,13 +2330,13 @@
"Hide cursor when using touch input": "Cursor verbergen bij gebruik van aanraakinvoer" "Hide cursor when using touch input": "Cursor verbergen bij gebruik van aanraakinvoer"
}, },
"Hide device": { "Hide device": {
"Hide device": "Apparaat verbergen" "Hide device": ""
}, },
"Hide notification content until expanded": { "Hide notification content until expanded": {
"Hide notification content until expanded": "Meldingsinhoud verbergen tot uitgevouwen" "Hide notification content until expanded": ""
}, },
"Hide notification content until expanded; popups show collapsed by default": { "Hide notification content until expanded; popups show collapsed by default": {
"Hide notification content until expanded; popups show collapsed by default": "Meldingsinhoud verbergen tot uitgevouwen; pop-ups worden standaard ingeklapt weergegeven" "Hide notification content until expanded; popups show collapsed by default": ""
}, },
"Hide on Touch": { "Hide on Touch": {
"Hide on Touch": "Verbergen bij aanraking" "Hide on Touch": "Verbergen bij aanraking"
@@ -2375,7 +2369,7 @@
"Hold to confirm (%1s)": "Ingedrukt houden om te bevestigen (%1s)" "Hold to confirm (%1s)": "Ingedrukt houden om te bevestigen (%1s)"
}, },
"Home": { "Home": {
"Home": "Persoonlijke map" "Home": ""
}, },
"Hot Corners": { "Hot Corners": {
"Hot Corners": "Hot Corners" "Hot Corners": "Hot Corners"
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "Pictogram" "Icon": "Pictogram"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Pictogramgrootte" "Icon Size": "Pictogramgrootte"
}, },
@@ -2828,13 +2819,13 @@
"Light Mode": "Lichte modus" "Light Mode": "Lichte modus"
}, },
"Light Rain": { "Light Rain": {
"Light Rain": "Lichte regen" "Light Rain": ""
}, },
"Light Snow": { "Light Snow": {
"Light Snow": "Lichte sneeuwval" "Light Snow": ""
}, },
"Light Snow Showers": { "Light Snow Showers": {
"Light Snow Showers": "Lichte sneeuwbuien" "Light Snow Showers": ""
}, },
"Linear": { "Linear": {
"Linear": "Lineair" "Linear": "Lineair"
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Maximalisatiedetectie" "Maximize Detection": "Maximalisatiedetectie"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Maximale grootte item" "Maximum Entry Size": "Maximale grootte item"
}, },
@@ -3188,13 +3173,13 @@
"Moving to Paused": "Overschakelen naar gepauzeerd" "Moving to Paused": "Overschakelen naar gepauzeerd"
}, },
"Music": { "Music": {
"Music": "Muziek" "Music": ""
}, },
"Mute popups for %1": { "Mute popups for %1": {
"Mute popups for %1": "Pop-ups dempen voor %1" "Mute popups for %1": ""
}, },
"Muted Apps": { "Muted Apps": {
"Muted Apps": "Gedempte apps" "Muted Apps": ""
}, },
"Muted palette with subdued, calming tones.": { "Muted palette with subdued, calming tones.": {
"Muted palette with subdued, calming tones.": "Gedempt palet met ingetogen, rustgevende tinten." "Muted palette with subdued, calming tones.": "Gedempt palet met ingetogen, rustgevende tinten."
@@ -3347,7 +3332,7 @@
"No apps have been launched yet.": "Er zijn nog geen apps gestart." "No apps have been launched yet.": "Er zijn nog geen apps gestart."
}, },
"No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": { "No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": {
"No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": "Geen apps gedempt. Klik met de rechtermuisknop op een melding en kies \"Pop-ups dempen\" om er hier een toe te voegen." "No apps muted. Right-click a notification and choose \"Mute popups\" to add one here.": ""
}, },
"No battery": { "No battery": {
"No battery": "Geen batterij" "No battery": "Geen batterij"
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Geen bestanden gevonden" "No files found": "Geen bestanden gevonden"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "Geen verborgen apps." "No hidden apps.": "Geen verborgen apps."
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "Openen in browser" "Open in Browser": "Openen in browser"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Zoekbalk openen om tekst te vinden" "Open search bar to find text": "Zoekbalk openen om tekst te vinden"
}, },
@@ -3614,7 +3593,7 @@
"Outputs Include Missing": "Outputs-include ontbreekt" "Outputs Include Missing": "Outputs-include ontbreekt"
}, },
"Overcast": { "Overcast": {
"Overcast": "Bewolkt" "Overcast": ""
}, },
"Overflow": { "Overflow": {
"Overflow": "Overloop" "Overflow": "Overloop"
@@ -3674,7 +3653,7 @@
"Pairing...": "Koppelen..." "Pairing...": "Koppelen..."
}, },
"Partly Cloudy": { "Partly Cloudy": {
"Partly Cloudy": "Half bewolkt" "Partly Cloudy": ""
}, },
"Passkey:": { "Passkey:": {
"Passkey:": "Toegangscode:" "Passkey:": "Toegangscode:"
@@ -3784,7 +3763,7 @@
"Unavailable": "Niet beschikbaar" "Unavailable": "Niet beschikbaar"
}, },
"Pictures": { "Pictures": {
"Pictures": "Afbeeldingen" "Pictures": ""
}, },
"Pin": { "Pin": {
"Pin": "Vastmaken" "Pin": "Vastmaken"
@@ -3856,7 +3835,7 @@
"Popup Position": "Popup-positie" "Popup Position": "Popup-positie"
}, },
"Popup Shadow": { "Popup Shadow": {
"Popup Shadow": "Pop-upschaduw" "Popup Shadow": ""
}, },
"Popup Transparency": { "Popup Transparency": {
"Popup Transparency": "Popup-transparantie" "Popup Transparency": "Popup-transparantie"
@@ -3967,7 +3946,7 @@
"Privacy Indicator": "Privacy-indicator" "Privacy Indicator": "Privacy-indicator"
}, },
"Privacy Mode": { "Privacy Mode": {
"Privacy Mode": "Privacy-modus" "Privacy Mode": ""
}, },
"Private Key Password": { "Private Key Password": {
"Private Key Password": "Wachtwoord privésleutel" "Private Key Password": "Wachtwoord privésleutel"
@@ -4012,7 +3991,7 @@
"Protocol": "Protocol" "Protocol": "Protocol"
}, },
"Quick Access": { "Quick Access": {
"Quick Access": "Snelle toegang" "Quick Access": ""
}, },
"Quick access to application launcher": { "Quick access to application launcher": {
"Quick access to application launcher": "Snelle toegang tot app-starter" "Quick access to application launcher": "Snelle toegang tot app-starter"
@@ -4033,7 +4012,7 @@
"Radius": "Straal" "Radius": "Straal"
}, },
"Rain": { "Rain": {
"Rain": "Regen" "Rain": ""
}, },
"Rain Chance": { "Rain Chance": {
"Rain Chance": "Neerslagkans" "Rain Chance": "Neerslagkans"
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Verwijderen" "Remove": "Verwijderen"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Tussenruimte en rand verwijderen wanneer vensters gemaximaliseerd zijn" "Remove gaps and border when windows are maximized": "Tussenruimte en rand verwijderen wanneer vensters gemaximaliseerd zijn"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Kladblok-bestand opslaan" "Save Notepad File": "Kladblok-bestand opslaan"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "Opslaan en schakelen tussen beeldschermconfiguraties" "Save and switch between display configurations": "Opslaan en schakelen tussen beeldschermconfiguraties"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "DankBar-lettergroottes onafhankelijk schalen" "Scale DankBar font sizes independently": "DankBar-lettergroottes onafhankelijk schalen"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Alle lettergroottes in de shell schalen" "Scale all font sizes throughout the shell": "Alle lettergroottes in de shell schalen"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Wetenschap" "Science": "Wetenschap"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "Schermdelen" "Screen Sharing": "Schermdelen"
}, },
@@ -4444,7 +4411,7 @@
"Set key and action to save": "Stel toets en actie in om op te slaan" "Set key and action to save": "Stel toets en actie in om op te slaan"
}, },
"Set notification rules": { "Set notification rules": {
"Set notification rules": "Meldingsregels instellen" "Set notification rules": ""
}, },
"Setup": { "Setup": {
"Setup": "Instellen" "Setup": "Instellen"
@@ -4618,13 +4585,13 @@
"Show darkened overlay behind modal dialogs": "Verduisterde overlay tonen achter modale vensters" "Show darkened overlay behind modal dialogs": "Verduisterde overlay tonen achter modale vensters"
}, },
"Show device": { "Show device": {
"Show device": "Apparaat tonen" "Show device": ""
}, },
"Show dock when floating windows don't overlap its area": { "Show dock when floating windows don't overlap its area": {
"Show dock when floating windows don't overlap its area": "Dock tonen wanneer zwevende vensters het gebied niet overlappen" "Show dock when floating windows don't overlap its area": "Dock tonen wanneer zwevende vensters het gebied niet overlappen"
}, },
"Show drop shadow on notification popups": { "Show drop shadow on notification popups": {
"Show drop shadow on notification popups": "Slagschaduw tonen op meldingspop-ups" "Show drop shadow on notification popups": ""
}, },
"Show launcher overlay when typing in Niri overview. Disable to use another launcher.": { "Show launcher overlay when typing in Niri overview. Disable to use another launcher.": {
"Show launcher overlay when typing in Niri overview. Disable to use another launcher.": "Starter-overlay tonen bij typen in Niri-overzicht. Schakel uit om een andere starter te gebruiken." "Show launcher overlay when typing in Niri overview. Disable to use another launcher.": "Starter-overlay tonen bij typen in Niri-overzicht. Schakel uit om een andere starter te gebruiken."
@@ -4747,7 +4714,7 @@
"Snap": "Vastklikken" "Snap": "Vastklikken"
}, },
"Snow": { "Snow": {
"Snow": "Sneeuw" "Snow": ""
}, },
"Some plugins require a newer version of DMS:": { "Some plugins require a newer version of DMS:": {
"Some plugins require a newer version of DMS:": "Sommige plug-ins vereisen een nieuwere versie van DMS:" "Some plugins require a newer version of DMS:": "Sommige plug-ins vereisen een nieuwere versie van DMS:"
@@ -4846,7 +4813,7 @@
"Suspend system after": "Systeem in slaapstand zetten na" "Suspend system after": "Systeem in slaapstand zetten na"
}, },
"Suspend then Hibernate": { "Suspend then Hibernate": {
"Suspend then Hibernate": "Onderbreken dan Sluimerstand" "Suspend then Hibernate": ""
}, },
"Swap": { "Swap": {
"Swap": "Swap" "Swap": "Swap"
@@ -4987,10 +4954,10 @@
"This will permanently remove this saved clipboard item. This action cannot be undone.": "Dit verwijdert dit opgeslagen klemborditem permanent. Deze actie kan niet ongedaan worden gemaakt." "This will permanently remove this saved clipboard item. This action cannot be undone.": "Dit verwijdert dit opgeslagen klemborditem permanent. Deze actie kan niet ongedaan worden gemaakt."
}, },
"Thunderstorm": { "Thunderstorm": {
"Thunderstorm": "Onweer" "Thunderstorm": ""
}, },
"Thunderstorm with Hail": { "Thunderstorm with Hail": {
"Thunderstorm with Hail": "Onweer met hagel" "Thunderstorm with Hail": ""
}, },
"Tiled": { "Tiled": {
"Tiled": "Getegeld" "Tiled": "Getegeld"
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "Trigger: %1" "Trigger: %1": "Trigger: %1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "Probeer een andere zoekopdracht" "Try a different search": "Probeer een andere zoekopdracht"
}, },
@@ -5179,13 +5143,13 @@
"Unknown Title": "Onbekende titel" "Unknown Title": "Onbekende titel"
}, },
"Unload on Close": { "Unload on Close": {
"Unload on Close": "Ontladen bij sluiten" "Unload on Close": ""
}, },
"Unmute": { "Unmute": {
"Unmute": "Dempen opheffen" "Unmute": ""
}, },
"Unmute popups for %1": { "Unmute popups for %1": {
"Unmute popups for %1": "Dempen van pop-ups opheffen voor %1" "Unmute popups for %1": ""
}, },
"Unnamed Rule": { "Unnamed Rule": {
"Unnamed Rule": "Naamloze regel" "Unnamed Rule": "Naamloze regel"
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Naamloos" "Untitled": "Naamloos"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "Bijwerken" "Update": "Bijwerken"
}, },
@@ -5389,7 +5350,7 @@
"Vibrant palette with playful saturation.": "Levendig palet met speelse verzadiging." "Vibrant palette with playful saturation.": "Levendig palet met speelse verzadiging."
}, },
"Videos": { "Videos": {
"Videos": "Video's" "Videos": ""
}, },
"View Mode": { "View Mode": {
"View Mode": "Weergavemodus" "View Mode": "Weergavemodus"
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "Wifi-apparaat" "WiFi Device": "Wifi-apparaat"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "Wifi uitgeschakeld" "WiFi disabled": "Wifi uitgeschakeld"
}, },
@@ -5664,7 +5622,7 @@
"Thickness": "Dikte" "Thickness": "Dikte"
}, },
"brandon": { "brandon": {
"brandon": "brandon" "brandon": ""
}, },
"browse themes button | theme browser header | theme browser window title": { "browse themes button | theme browser header | theme browser window title": {
"Browse Themes": "Thema's doorbladeren" "Browse Themes": "Thema's doorbladeren"
@@ -5695,7 +5653,7 @@
"Active tile background and icon color": "Achtergrond- en pictogramkleur van actieve tegel" "Active tile background and icon color": "Achtergrond- en pictogramkleur van actieve tegel"
}, },
"count of hidden audio devices": { "count of hidden audio devices": {
"Hidden (%1)": "Verborgen (%1)" "Hidden (%1)": ""
}, },
"current theme label": { "current theme label": {
"Current Theme: %1": "Huidig thema: %1" "Current Theme: %1": "Huidig thema: %1"
@@ -5710,7 +5668,7 @@
"Click to select a custom theme JSON file": "Klik om een aangepast thema-JSON-bestand te selecteren" "Click to select a custom theme JSON file": "Klik om een aangepast thema-JSON-bestand te selecteren"
}, },
"dark mode wallpaper color picker title": { "dark mode wallpaper color picker title": {
"Choose Dark Mode Color": "Kleur donkere modus kiezen" "Choose Dark Mode Color": ""
}, },
"dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": { "dark mode wallpaper file browser title | light mode wallpaper file browser title | wallpaper file browser title": {
"Select Wallpaper": "Selecteer achtergrond" "Select Wallpaper": "Selecteer achtergrond"
@@ -5731,7 +5689,7 @@
"days": "dagen" "days": "dagen"
}, },
"default monitor label suffix": { "default monitor label suffix": {
"(Default)": "(Standaard)" "(Default)": ""
}, },
"dgop not available": { "dgop not available": {
"dgop not available": "dgop niet beschikbaar" "dgop not available": "dgop niet beschikbaar"
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "afspraken" "events": "afspraken"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "Onbekende GPU" "Unknown GPU": "Onbekende GPU"
}, },
@@ -6002,7 +5957,7 @@
"leave empty for default": "laat leeg voor standaard" "leave empty for default": "laat leeg voor standaard"
}, },
"light mode wallpaper color picker title": { "light mode wallpaper color picker title": {
"Choose Light Mode Color": "Kleur lichte modus kiezen" "Choose Light Mode Color": ""
}, },
"loading indicator": { "loading indicator": {
"Loading...": "Laden..." "Loading...": "Laden..."
@@ -6064,7 +6019,7 @@
"nav": "navigatie" "nav": "navigatie"
}, },
"neovim template description": { "neovim template description": {
"Requires lazy plugin manager": "Vereist lazy plugin manager" "Requires lazy plugin manager": ""
}, },
"network status": { "network status": {
"Connected": "Verbonden", "Connected": "Verbonden",
@@ -6080,7 +6035,7 @@
"No custom theme file": "Geen aangepast themabestand" "No custom theme file": "Geen aangepast themabestand"
}, },
"no monitors available label": { "no monitors available label": {
"No monitors": "Geen beeldschermen" "No monitors": ""
}, },
"no registry themes installed hint": { "no registry themes installed hint": {
"No themes installed. Browse themes to install from the registry.": "Geen thema's geïnstalleerd. Blader door thema's om te installeren uit het register." "No themes installed. Browse themes to install from the registry.": "Geen thema's geïnstalleerd. Blader door thema's om te installeren uit het register."
@@ -6130,7 +6085,7 @@
"Enable History": "Geschiedenis inschakelen" "Enable History": "Geschiedenis inschakelen"
}, },
"notification privacy mode placeholder": { "notification privacy mode placeholder": {
"Message Content": "Berichtinhoud" "Message Content": ""
}, },
"notification rule action option": { "notification rule action option": {
"Ignore Completely": "Volledig negeren", "Ignore Completely": "Volledig negeren",
@@ -6163,22 +6118,22 @@
"official": "officieel" "official": "officieel"
}, },
"on Hyprland": { "on Hyprland": {
"on Hyprland": "op Hyprland" "on Hyprland": ""
}, },
"on MangoWC": { "on MangoWC": {
"on MangoWC": "op MangoWC" "on MangoWC": ""
}, },
"on Miracle WM": { "on Miracle WM": {
"on Miracle WM": "op Miracle WM" "on Miracle WM": ""
}, },
"on Niri": { "on Niri": {
"on Niri": "op Niri" "on Niri": ""
}, },
"on Scroll": { "on Scroll": {
"on Scroll": "op Scroll" "on Scroll": ""
}, },
"on Sway": { "on Sway": {
"on Sway": "op Sway" "on Sway": ""
}, },
"open": { "open": {
"open": "openen" "open": "openen"
@@ -6228,10 +6183,10 @@
"Select Profile Image": "Selecteer profielafbeelding" "Select Profile Image": "Selecteer profielafbeelding"
}, },
"qt theme env error body": { "qt theme env error body": {
"You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": "U moet het volgende instellen:\nQT_QPA_PLATFORMTHEME=gtk3 OF\nQT_QPA_PLATFORMTHEME=qt6ct\nals omgevingsvariabelen, en daarna de shell herstarten.\n\nqt6ct vereist dat qt6ct-kde is geïnstalleerd." "You need to set either:\nQT_QPA_PLATFORMTHEME=gtk3 OR\nQT_QPA_PLATFORMTHEME=qt6ct\nas environment variables, and then restart the shell.\n\nqt6ct requires qt6ct-kde to be installed.": ""
}, },
"qt theme env error title": { "qt theme env error title": {
"Missing Environment Variables": "Ontbrekende omgevingsvariabelen" "Missing Environment Variables": ""
}, },
"read-only settings warning for NixOS home-manager users": { "read-only settings warning for NixOS home-manager users": {
"Settings are read-only. Changes will not persist.": "Instellingen zijn alleen-lezen. Wijzigingen worden niet opgeslagen." "Settings are read-only. Changes will not persist.": "Instellingen zijn alleen-lezen. Wijzigingen worden niet opgeslagen."
@@ -6291,10 +6246,10 @@
"Load Average": "Gemiddelde belasting" "Load Average": "Gemiddelde belasting"
}, },
"theme auto mode tab": { "theme auto mode tab": {
"Location": "Locatie" "Location": ""
}, },
"theme auto mode tab | wallpaper cycling mode tab": { "theme auto mode tab | wallpaper cycling mode tab": {
"Time": "Tijd" "Time": ""
}, },
"theme browser description": { "theme browser description": {
"Install color themes from the DMS theme registry": "Installeer kleurthema's uit het DMS-themaregister" "Install color themes from the DMS theme registry": "Installeer kleurthema's uit het DMS-themaregister"
@@ -6315,7 +6270,7 @@
"Search themes...": "Thema's zoeken..." "Search themes...": "Thema's zoeken..."
}, },
"this app": { "this app": {
"this app": "deze app" "this app": ""
}, },
"tile color option": { "tile color option": {
"Primary Container": "Primaire container", "Primary Container": "Primaire container",
@@ -6337,7 +6292,7 @@
"Unknown": "Onbekend" "Unknown": "Onbekend"
}, },
"up": { "up": {
"up": "actief" "up": ""
}, },
"update dms for NM integration.": { "update dms for NM integration.": {
"update dms for NM integration.": "update dms voor NM-integratie." "update dms for NM integration.": "update dms voor NM-integratie."
@@ -6352,10 +6307,10 @@
"Requires %1": "Vereist %1" "Requires %1": "Vereist %1"
}, },
"wallpaper color picker title": { "wallpaper color picker title": {
"Choose Wallpaper Color": "Achtergrondkleur kiezen" "Choose Wallpaper Color": ""
}, },
"wallpaper cycling mode tab": { "wallpaper cycling mode tab": {
"Interval": "Interval" "Interval": ""
}, },
"wallpaper directory file browser title": { "wallpaper directory file browser title": {
"Select Wallpaper Directory": "Selecteer achtergrondmap" "Select Wallpaper Directory": "Selecteer achtergrondmap"
@@ -6376,32 +6331,32 @@
"Tile V": "Tegelen V" "Tile V": "Tegelen V"
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "1 uur", "1 hour": "",
"1 hour 30 minutes": "1 uur 30 minuten", "1 hour 30 minutes": "",
"1 minute": "1 minuut", "1 minute": "",
"10 seconds": "10 seconden", "10 seconds": "",
"12 hours": "12 uur", "12 hours": "",
"15 minutes": "15 minuten", "15 minutes": "",
"15 seconds": "15 seconden", "15 seconds": "",
"2 hours": "2 uur", "2 hours": "",
"20 seconds": "20 seconden", "20 seconds": "",
"25 seconds": "25 seconden", "25 seconds": "",
"3 hours": "3 uur", "3 hours": "",
"30 minutes": "30 minuten", "30 minutes": "",
"30 seconds": "30 seconden", "30 seconds": "",
"35 seconds": "35 seconden", "35 seconds": "",
"4 hours": "4 uur", "4 hours": "",
"40 seconds": "40 seconden", "40 seconds": "",
"45 seconds": "45 seconden", "45 seconds": "",
"5 minutes": "5 minuten", "5 minutes": "",
"5 seconds": "5 seconden", "5 seconds": "",
"50 seconds": "50 seconden", "50 seconds": "",
"55 seconds": "55 seconden", "55 seconds": "",
"6 hours": "6 uur", "6 hours": "",
"8 hours": "8 uur" "8 hours": ""
}, },
"wallpaper not set label": { "wallpaper not set label": {
"Not set": "Niet ingesteld" "Not set": ""
}, },
"wallpaper processing error": { "wallpaper processing error": {
"Wallpaper processing failed": "Verwerken achtergrond mislukt" "Wallpaper processing failed": "Verwerken achtergrond mislukt"
@@ -6479,6 +6434,6 @@
"• yyyy - Year (2024)": "• yyyy - Jaar (2024)" "• yyyy - Year (2024)": "• yyyy - Jaar (2024)"
}, },
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": { "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: Nav • Spatie: Uitvouwen • Enter: Actie/Uitvouwen • E: Tekst" "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
-45
View File
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "" "Fog": ""
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "" "Follow Monitor Focus": ""
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "" "Icon": ""
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Rozmiar ikony" "Icon Size": "Rozmiar ikony"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Wykrywanie maksymalizacji" "Maximize Detection": "Wykrywanie maksymalizacji"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Maksymalny rozmiar wpisu" "Maximum Entry Size": "Maksymalny rozmiar wpisu"
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Nie znaleziono plików" "No files found": "Nie znaleziono plików"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "" "No hidden apps.": ""
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "" "Open in Browser": ""
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Otwórz pasek wyszukiwania, aby znaleźć tekst" "Open search bar to find text": "Otwórz pasek wyszukiwania, aby znaleźć tekst"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Usuń" "Remove": "Usuń"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Usuń odstępy i ramkę gdy okna są zmaksymalizowane" "Remove gaps and border when windows are maximized": "Usuń odstępy i ramkę gdy okna są zmaksymalizowane"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Zapisz plik notatnika" "Save Notepad File": "Zapisz plik notatnika"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "" "Save and switch between display configurations": ""
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "Skaluj rozmiary czcionek DankBar niezależnie" "Scale DankBar font sizes independently": "Skaluj rozmiary czcionek DankBar niezależnie"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Skaluj wszystkie rozmiary czcionek w całej powłoce" "Scale all font sizes throughout the shell": "Skaluj wszystkie rozmiary czcionek w całej powłoce"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Nauka" "Science": "Nauka"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "" "Screen Sharing": ""
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "" "Trigger: %1": ""
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "" "Try a different search": ""
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Bez tytułu" "Untitled": "Bez tytułu"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "" "Update": ""
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "Urządzenie WiFi" "WiFi Device": "Urządzenie WiFi"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFi wyłączone" "WiFi disabled": "WiFi wyłączone"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "wydarzenia" "events": "wydarzenia"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "" "Unknown GPU": ""
}, },
+2 -47
View File
@@ -770,7 +770,7 @@
"Caps Lock Indicator": "Indicador de Caps Lock" "Caps Lock Indicator": "Indicador de Caps Lock"
}, },
"Caps Lock is on": { "Caps Lock is on": {
"Caps Lock is on": "Caps Lock está ligado" "Caps Lock is on": ""
}, },
"Center Section": { "Center Section": {
"Center Section": "Seção Central" "Center Section": "Seção Central"
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "Neblina" "Fog": "Neblina"
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "Seguir Foco do Monitor" "Follow Monitor Focus": "Seguir Foco do Monitor"
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "Ícone" "Icon": "Ícone"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Tamanho do Ícone" "Icon Size": "Tamanho do Ícone"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Detecção de Maximizado" "Maximize Detection": "Detecção de Maximizado"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Tamanho Máximo de Entrada" "Maximum Entry Size": "Tamanho Máximo de Entrada"
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Nenhum arquivo encontrado" "No files found": "Nenhum arquivo encontrado"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "Sem aplicativos ocultos." "No hidden apps.": "Sem aplicativos ocultos."
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "Abrir no Navegador" "Open in Browser": "Abrir no Navegador"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Abrir barra de pesquisa e encontrar texto" "Open search bar to find text": "Abrir barra de pesquisa e encontrar texto"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Remover" "Remove": "Remover"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Remover espaçámentos e borda quando janelas estão maximizadas" "Remove gaps and border when windows are maximized": "Remover espaçámentos e borda quando janelas estão maximizadas"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Salvar Arquivo do Bloco de Notas" "Save Notepad File": "Salvar Arquivo do Bloco de Notas"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "Salvar e alternar entre configurações de exibição" "Save and switch between display configurations": "Salvar e alternar entre configurações de exibição"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "Ajustar tamanho da fonte da DankBar de forma independente" "Scale DankBar font sizes independently": "Ajustar tamanho da fonte da DankBar de forma independente"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Ajuste todos os tamanhos de fonte em todo o shell" "Scale all font sizes throughout the shell": "Ajuste todos os tamanhos de fonte em todo o shell"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Ciência" "Science": "Ciência"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "Compartilhamento de Tela" "Screen Sharing": "Compartilhamento de Tela"
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "Gatilho: %1" "Trigger: %1": "Gatilho: %1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "Tente uma pesquisa diferente" "Try a different search": "Tente uma pesquisa diferente"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Sem título" "Untitled": "Sem título"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "Atualizar" "Update": "Atualizar"
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "Dispositivo WiFi" "WiFi Device": "Dispositivo WiFi"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFi desativado" "WiFi disabled": "WiFi desativado"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "eventos" "events": "eventos"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "GPU Desconhecida" "Unknown GPU": "GPU Desconhecida"
}, },
@@ -6479,6 +6434,6 @@
"• yyyy - Year (2024)": "yyyy - Ano (2024)" "• yyyy - Year (2024)": "yyyy - Ano (2024)"
}, },
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": { "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": {
"↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": "↑/↓: Navegar • Espaço: Expandir • Enter: Ação/Expandir • E: Texto" "↑/↓: Nav • Space: Expand • Enter: Action/Expand • E: Text": ""
} }
} }
-45
View File
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "" "Fog": ""
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "" "Follow Monitor Focus": ""
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "" "Icon": ""
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "Simge Boyutu" "Icon Size": "Simge Boyutu"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "Algılamayı En Üst Düzeye Çıkar" "Maximize Detection": "Algılamayı En Üst Düzeye Çıkar"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "Maksimum Kayıt Boyutu" "Maximum Entry Size": "Maksimum Kayıt Boyutu"
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "Dosya bulunamadı" "No files found": "Dosya bulunamadı"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "" "No hidden apps.": ""
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "" "Open in Browser": ""
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "Metin bulmak için arama çubuğunu aç" "Open search bar to find text": "Metin bulmak için arama çubuğunu aç"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "Kaldır" "Remove": "Kaldır"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "Pencereler ekranı kapladığında boşlukları ve kenarlıkları kaldır" "Remove gaps and border when windows are maximized": "Pencereler ekranı kapladığında boşlukları ve kenarlıkları kaldır"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "Not Defteri Dosyasını Kaydet" "Save Notepad File": "Not Defteri Dosyasını Kaydet"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "" "Save and switch between display configurations": ""
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "DankBar yazı tipi boyutlarını bağımsız olarak ölçeklendir" "Scale DankBar font sizes independently": "DankBar yazı tipi boyutlarını bağımsız olarak ölçeklendir"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "Kabuk genelinde tüm yazı tipi boyutlarını ölçeklendir" "Scale all font sizes throughout the shell": "Kabuk genelinde tüm yazı tipi boyutlarını ölçeklendir"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "Bilim" "Science": "Bilim"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "" "Screen Sharing": ""
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "" "Trigger: %1": ""
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "" "Try a different search": ""
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "Başlıksız" "Untitled": "Başlıksız"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "" "Update": ""
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "WiFi Aygıtı" "WiFi Device": "WiFi Aygıtı"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "WiFi devre dışı" "WiFi disabled": "WiFi devre dışı"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "etkinlikler" "events": "etkinlikler"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "" "Unknown GPU": ""
}, },
+100 -145
View File
@@ -24,10 +24,10 @@
"%1 days ago": "%1天之前" "%1 days ago": "%1天之前"
}, },
"%1 disconnected": { "%1 disconnected": {
"%1 disconnected": "%1已断开连接" "%1 disconnected": ""
}, },
"%1 disconnected (hidden)": { "%1 disconnected (hidden)": {
"%1 disconnected (hidden)": "%1已断开连接(隐藏)" "%1 disconnected (hidden)": ""
}, },
"%1 display(s)": { "%1 display(s)": {
"%1 display(s)": "%1 显示" "%1 display(s)": "%1 显示"
@@ -36,7 +36,7 @@
"%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": "%1存在但并未被包含至配置文件。在此问题修复前,自定义快捷键绑定将不会生效。" "%1 exists but is not included in config. Custom keybinds will not work until this is fixed.": "%1存在但并未被包含至配置文件。在此问题修复前,自定义快捷键绑定将不会生效。"
}, },
"%1 exists but is not included. Window rules won't apply.": { "%1 exists but is not included. Window rules won't apply.": {
"%1 exists but is not included. Window rules won't apply.": "%1已存在但未被包含。窗口规则将不会生效。" "%1 exists but is not included. Window rules won't apply.": ""
}, },
"%1 is now included in config": { "%1 is now included in config": {
"%1 is now included in config": "%1现在已被包含至配置文件" "%1 is now included in config": "%1现在已被包含至配置文件"
@@ -246,7 +246,7 @@
"Add Printer": "添加打印机" "Add Printer": "添加打印机"
}, },
"Add Title": { "Add Title": {
"Add Title": "添加标题" "Add Title": ""
}, },
"Add Widget": { "Add Widget": {
"Add Widget": "添加部件" "Add Widget": "添加部件"
@@ -339,7 +339,7 @@
"App ID Substitutions": "应用ID替换" "App ID Substitutions": "应用ID替换"
}, },
"App ID regex (e.g. ^firefox$)": { "App ID regex (e.g. ^firefox$)": {
"App ID regex (e.g. ^firefox$)": "应用ID正则(比如^firefox$" "App ID regex (e.g. ^firefox$)": ""
}, },
"App Launcher": { "App Launcher": {
"App Launcher": "启动器" "App Launcher": "启动器"
@@ -617,10 +617,10 @@
"Bit Depth": "位深" "Bit Depth": "位深"
}, },
"Block Out": { "Block Out": {
"Block Out": "封锁" "Block Out": ""
}, },
"Block Out From": { "Block Out From": {
"Block Out From": "从此处封锁" "Block Out From": ""
}, },
"Block notifications": { "Block notifications": {
"Block notifications": "屏蔽通知" "Block notifications": "屏蔽通知"
@@ -665,7 +665,7 @@
"Border Thickness": "边框厚度" "Border Thickness": "边框厚度"
}, },
"Border with BG": { "Border with BG": {
"Border with BG": "带BG的边框" "Border with BG": ""
}, },
"Bottom": { "Bottom": {
"Bottom": "底部" "Bottom": "底部"
@@ -845,7 +845,7 @@
"Cipher": "密码" "Cipher": "密码"
}, },
"Class regex (e.g. ^firefox$)": { "Class regex (e.g. ^firefox$)": {
"Class regex (e.g. ^firefox$)": "窗口类型正则(比如^firefox$" "Class regex (e.g. ^firefox$)": ""
}, },
"Clear": { "Clear": {
"Clear": "清除" "Clear": "清除"
@@ -875,7 +875,7 @@
"Click 'Setup' to create %1 and add include to config.": "点击设置以创建%1并将其包含至配置文件。" "Click 'Setup' to create %1 and add include to config.": "点击设置以创建%1并将其包含至配置文件。"
}, },
"Click 'Setup' to create %1 and add include to your compositor config.": { "Click 'Setup' to create %1 and add include to your compositor config.": {
"Click 'Setup' to create %1 and add include to your compositor config.": "点击设置以创建%1并添加包含文件至合成器配置文件。" "Click 'Setup' to create %1 and add include to your compositor config.": ""
}, },
"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 cursor config and add include to your compositor config.": "点击设置以创建光标配置,并导入至合成器配置文件。" "Click 'Setup' to create cursor config and add include to your compositor config.": "点击设置以创建光标配置,并导入至合成器配置文件。"
@@ -905,10 +905,10 @@
"Click to capture": "点击以捕获" "Click to capture": "点击以捕获"
}, },
"Clip": { "Clip": {
"Clip": "裁剪" "Clip": ""
}, },
"Clip to Geometry": { "Clip to Geometry": {
"Clip to Geometry": "裁剪至几何形" "Clip to Geometry": ""
}, },
"Clipboard": { "Clipboard": {
"Clipboard": "剪切板" "Clipboard": "剪切板"
@@ -995,10 +995,10 @@
"Column": "列" "Column": "列"
}, },
"Column Display": { "Column Display": {
"Column Display": "列式显示" "Column Display": ""
}, },
"Column Width": { "Column Width": {
"Column Width": "列宽" "Column Width": ""
}, },
"Command": { "Command": {
"Command": "命令" "Command": "命令"
@@ -1025,7 +1025,7 @@
"Compositor Settings": "合成器设置" "Compositor Settings": "合成器设置"
}, },
"Compositor not supported": { "Compositor not supported": {
"Compositor not supported": "合成器不支持" "Compositor not supported": ""
}, },
"Config Format": { "Config Format": {
"Config Format": "配置格式" "Config Format": "配置格式"
@@ -1052,7 +1052,7 @@
"Configure icons for named workspaces. Icons take priority over numbers when both are enabled.": "为已命名工作区配置图标。当数字和图标同时启用时,图标优先生效。" "Configure icons for named workspaces. Icons take priority over numbers when both are enabled.": "为已命名工作区配置图标。当数字和图标同时启用时,图标优先生效。"
}, },
"Configure match criteria and actions": { "Configure match criteria and actions": {
"Configure match criteria and actions": "配置文件匹配条件与动作" "Configure match criteria and actions": ""
}, },
"Configure which displays show \"%1": { "Configure which displays show \"%1": {
"Configure which displays show \"%1\"": "" "Configure which displays show \"%1\"": ""
@@ -1100,7 +1100,7 @@
"Connecting...": "连接中..." "Connecting...": "连接中..."
}, },
"Content copied": { "Content copied": {
"Content copied": "内容已复制" "Content copied": ""
}, },
"Contrast": { "Contrast": {
"Contrast": "对比度" "Contrast": "对比度"
@@ -1148,7 +1148,7 @@
"Copy": "复制" "Copy": "复制"
}, },
"Copy Content": { "Copy Content": {
"Copy Content": "复制内容" "Copy Content": ""
}, },
"Copy Full Command": { "Copy Full Command": {
"Copy Full Command": "复制完整命令" "Copy Full Command": "复制完整命令"
@@ -1187,7 +1187,7 @@
"Cover Open": "打印机盖已打开" "Cover Open": "打印机盖已打开"
}, },
"Create": { "Create": {
"Create": "创建" "Create": ""
}, },
"Create Dir": { "Create Dir": {
"Create Dir": "创建目录" "Create Dir": "创建目录"
@@ -1196,10 +1196,10 @@
"Create Printer": "创建打印机" "Create Printer": "创建打印机"
}, },
"Create Window Rule": { "Create Window Rule": {
"Create Window Rule": "创建窗口规则" "Create Window Rule": ""
}, },
"Create rule for:": { "Create rule for:": {
"Create rule for:": "为此创建规则:" "Create rule for:": ""
}, },
"Create rules to mute, ignore, hide from history, or override notification priority.": { "Create rules to mute, ignore, hide from history, or override notification priority.": {
"Create rules to mute, ignore, hide from history, or override notification priority.": "" "Create rules to mute, ignore, hide from history, or override notification priority.": ""
@@ -1382,7 +1382,7 @@
"Defaults": "复位" "Defaults": "复位"
}, },
"Define rules for window behavior. Saves to %1": { "Define rules for window behavior. Saves to %1": {
"Define rules for window behavior. Saves to %1": "定义窗口行为规则。保存至%1" "Define rules for window behavior. Saves to %1": ""
}, },
"Del: Clear • Shift+Del: Clear All • 1-9: Actions • F10: Help • Esc: Close": { "Del: Clear • Shift+Del: Clear All • 1-9: Actions • F10: Help • Esc: Close": {
"Del: Clear • Shift+Del: Clear All • 1-9: Actions • F10: Help • Esc: Close": "Del: 清除 • Shift+Del: 清空 • 1-9: 操作 • F10: 帮助 • Esc: 关闭" "Del: Clear • Shift+Del: Clear All • 1-9: Actions • F10: Help • Esc: Close": "Del: 清除 • Shift+Del: 清空 • 1-9: 操作 • F10: 帮助 • Esc: 关闭"
@@ -1505,7 +1505,7 @@
"Dismiss": "忽略" "Dismiss": "忽略"
}, },
"Display": { "Display": {
"Display": "显示" "Display": ""
}, },
"Display Assignment": { "Display Assignment": {
"Display Assignment": "显示布局" "Display Assignment": "显示布局"
@@ -1514,7 +1514,7 @@
"Display Name Format": "显示名称格式" "Display Name Format": "显示名称格式"
}, },
"Display Profiles": { "Display Profiles": {
"Display Profiles": "显示档案" "Display Profiles": ""
}, },
"Display Settings": { "Display Settings": {
"Display Settings": "显示设置" "Display Settings": "显示设置"
@@ -1562,7 +1562,7 @@
"Displays": "显示" "Displays": "显示"
}, },
"Displays count when overflow is active": { "Displays count when overflow is active": {
"Displays count when overflow is active": "当溢出激活时显示计数" "Displays count when overflow is active": ""
}, },
"Displays the active keyboard layout and allows switching": { "Displays the active keyboard layout and allows switching": {
"Displays the active keyboard layout and allows switching": "显示当前键盘布局并支持切换" "Displays the active keyboard layout and allows switching": "显示当前键盘布局并支持切换"
@@ -1643,7 +1643,7 @@
"Dusk (Nautical Twilight)": "黄昏(航海暮光)" "Dusk (Nautical Twilight)": "黄昏(航海暮光)"
}, },
"Dynamic Properties": { "Dynamic Properties": {
"Dynamic Properties": "动态属性" "Dynamic Properties": ""
}, },
"Edge Spacing": { "Edge Spacing": {
"Edge Spacing": "边缘间距" "Edge Spacing": "边缘间距"
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "" "Fog": ""
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "遵守显示器聚焦" "Follow Monitor Focus": "遵守显示器聚焦"
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "图标" "Icon": "图标"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "图标大小" "Icon Size": "图标大小"
}, },
@@ -2560,7 +2551,7 @@
"Clipboard sent": "已发送剪切板" "Clipboard sent": "已发送剪切板"
}, },
"KDE Connect clipboard action | Phone Connect clipboard action": { "KDE Connect clipboard action | Phone Connect clipboard action": {
"Clipboard sent": "剪切板已发送" "Clipboard sent": ""
}, },
"KDE Connect clipboard tooltip": { "KDE Connect clipboard tooltip": {
"Send Clipboard": "发送剪切板" "Send Clipboard": "发送剪切板"
@@ -2606,7 +2597,7 @@
"No devices": "无设备" "No devices": "无设备"
}, },
"KDE Connect no devices status | bluetooth status": { "KDE Connect no devices status | bluetooth status": {
"No devices": "无设备" "No devices": ""
}, },
"KDE Connect not paired status": { "KDE Connect not paired status": {
"Not paired": "未配对" "Not paired": "未配对"
@@ -2713,7 +2704,7 @@
"Unavailable": "不可用" "Unavailable": "不可用"
}, },
"KDE Connect unknown device status | battery status | power profile option | unknown author | widget status": { "KDE Connect unknown device status | battery status | power profile option | unknown author | widget status": {
"Unknown": "未知" "Unknown": ""
}, },
"KDE Connect unknown device status | unknown author": { "KDE Connect unknown device status | unknown author": {
"Unknown": "未知" "Unknown": "未知"
@@ -2722,7 +2713,7 @@
"Device unpaired": "设备已取消配对" "Device unpaired": "设备已取消配对"
}, },
"KDE Connect unpair action | Phone Connect unpair action": { "KDE Connect unpair action | Phone Connect unpair action": {
"Device unpaired": "设备已取消配对" "Device unpaired": ""
}, },
"KDE Connect unpair tooltip": { "KDE Connect unpair tooltip": {
"Unpair": "取消配对" "Unpair": "取消配对"
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "最大化检测" "Maximize Detection": "最大化检测"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "最大尺寸" "Maximum Entry Size": "最大尺寸"
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "未找到文件" "No files found": "未找到文件"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "无已隐藏应用。" "No hidden apps.": "无已隐藏应用。"
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "在浏览器中打开" "Open in Browser": "在浏览器中打开"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "打开搜索栏以查找文本" "Open search bar to find text": "打开搜索栏以查找文本"
}, },
@@ -3753,7 +3732,7 @@
"No devices": "" "No devices": ""
}, },
"Phone Connect pairing action": { "Phone Connect pairing action": {
"Device paired": "设备已配对", "Device paired": "",
"Pairing request sent": "" "Pairing request sent": ""
}, },
"Phone Connect pairing request notification": { "Phone Connect pairing request notification": {
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "移除" "Remove": "移除"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "当窗口最大化时移除间距和边框" "Remove gaps and border when windows are maximized": "当窗口最大化时移除间距和边框"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "保存便签" "Save Notepad File": "保存便签"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "" "Save and switch between display configurations": ""
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "独立调整 Dank Bar 字体缩放" "Scale DankBar font sizes independently": "独立调整 Dank Bar 字体缩放"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "缩放整个 shell 中的所有字体大小" "Scale all font sizes throughout the shell": "缩放整个 shell 中的所有字体大小"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "科学" "Science": "科学"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "屏幕共享" "Screen Sharing": "屏幕共享"
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "触发器:%1" "Trigger: %1": "触发器:%1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "尝试不同的搜索" "Try a different search": "尝试不同的搜索"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "无标题" "Untitled": "无标题"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "" "Update": ""
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "WiFi 设备" "WiFi Device": "WiFi 设备"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "Wi-Fi 已停用" "WiFi disabled": "Wi-Fi 已停用"
}, },
@@ -5625,10 +5583,10 @@
"apps": "应用程序" "apps": "应用程序"
}, },
"audio status": { "audio status": {
"Muted": "已静音", "Muted": "",
"No input device": "无输入设备", "No input device": "",
"No output device": "无输出设备", "No output device": "",
"Select device": "选择设备" "Select device": ""
}, },
"author attribution": { "author attribution": {
"by %1": "%1" "by %1": "%1"
@@ -5640,19 +5598,19 @@
"Charging": "充电", "Charging": "充电",
"Discharging": "放电", "Discharging": "放电",
"Empty": "空白", "Empty": "空白",
"Fully Charged": "已充满", "Fully Charged": "",
"No Battery": "无电池", "No Battery": "",
"Pending Charge": "待充电", "Pending Charge": "",
"Pending Discharge": "待放电", "Pending Discharge": "",
"Plugged In": "已接入" "Plugged In": ""
}, },
"bluetooth status": { "bluetooth status": {
"Bluetooth": "蓝牙", "Bluetooth": "蓝牙",
"Connected Device": "已连接的设备", "Connected Device": "已连接的设备",
"Enabled": "启用", "Enabled": "",
"No adapter": "无适配器", "No adapter": "",
"No adapters": "无适配器", "No adapters": "",
"Off": "" "Off": ""
}, },
"bluetooth status | lock screen notification mode option": { "bluetooth status | lock screen notification mode option": {
"Disabled": "禁用" "Disabled": "禁用"
@@ -5683,13 +5641,13 @@
"Soothing pastel theme based on Catppuccin": "基于Catppuccin的舒缓且柔和的主题" "Soothing pastel theme based on Catppuccin": "基于Catppuccin的舒缓且柔和的主题"
}, },
"color option | primary color | tile color option": { "color option | primary color | tile color option": {
"Primary": "首选" "Primary": ""
}, },
"color option | secondary color | tile color option": { "color option | secondary color | tile color option": {
"Secondary": "次选" "Secondary": ""
}, },
"color option | shadow color option": { "color option | shadow color option": {
"Surface": "表面" "Surface": ""
}, },
"control center tile color setting description": { "control center tile color setting description": {
"Active tile background and icon color": "激活平铺背景与图标颜色" "Active tile background and icon color": "激活平铺背景与图标颜色"
@@ -5719,13 +5677,13 @@
"Custom...": "自定义...", "Custom...": "自定义...",
"Day Date": "日 日期", "Day Date": "日 日期",
"Day Month Date": "日 月份 日期", "Day Month Date": "日 月份 日期",
"Full Day & Month": "日期与月份全写", "Full Day & Month": "",
"Full with Year": "年份全写", "Full with Year": "",
"ISO Date": "ISO日期", "ISO Date": "",
"Month Date": "月份日期", "Month Date": "",
"Numeric (D/M)": "数字(D/M", "Numeric (D/M)": "",
"Numeric (M/D)": "数字(M/D", "Numeric (M/D)": "",
"System Default": "系统默认" "System Default": ""
}, },
"days": { "days": {
"days": "天" "days": "天"
@@ -5763,13 +5721,13 @@
}, },
"dock indicator style option": { "dock indicator style option": {
"Circle": "圆形", "Circle": "圆形",
"Line": "线条" "Line": ""
}, },
"dock position option": { "dock position option": {
"Bottom": "底部", "Bottom": "底部",
"Left": "左侧", "Left": "",
"Right": "右侧", "Right": "",
"Top": "顶部" "Top": ""
}, },
"dynamic colors description": { "dynamic colors description": {
"Dynamic colors from wallpaper": "自壁纸选取动态色" "Dynamic colors from wallpaper": "自壁纸选取动态色"
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "事件" "events": "事件"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "未知的GPU" "Unknown GPU": "未知的GPU"
}, },
@@ -6028,14 +5983,14 @@
}, },
"matugen color scheme option": { "matugen color scheme option": {
"Content": "内容", "Content": "内容",
"Expressive": "具有表现力的", "Expressive": "",
"Fidelity": "保真", "Fidelity": "",
"Fruit Salad": "水果沙拉", "Fruit Salad": "",
"Monochrome": "单色", "Monochrome": "",
"Neutral": "中性", "Neutral": "",
"Rainbow": "彩虹", "Rainbow": "",
"Tonal Spot": "音色斑点", "Tonal Spot": "",
"Vibrant": "鲜艳" "Vibrant": ""
}, },
"matugen error": { "matugen error": {
"matugen not found - install matugen package for dynamic theming": "未找到matugen - 请为动态主题安装matugen包" "matugen not found - install matugen package for dynamic theming": "未找到matugen - 请为动态主题安装matugen包"
@@ -6049,7 +6004,7 @@
"media scroll wheel option": { "media scroll wheel option": {
"Change Song": "切换歌曲", "Change Song": "切换歌曲",
"Change Volume": "切换音量", "Change Volume": "切换音量",
"Nothing": "" "Nothing": ""
}, },
"minutes": { "minutes": {
"minutes": "分钟" "minutes": "分钟"
@@ -6069,12 +6024,12 @@
"network status": { "network status": {
"Connected": "", "Connected": "",
"Disabling WiFi...": "正在禁用WiFi...", "Disabling WiFi...": "正在禁用WiFi...",
"Enabling WiFi...": "正在启用WiFi...", "Enabling WiFi...": "",
"Ethernet": "以太网", "Ethernet": "",
"Not connected": "未连接", "Not connected": "",
"Please wait...": "请稍候...", "Please wait...": "",
"Select network": "选择网络", "Select network": "",
"WiFi off": "WiFi关闭" "WiFi off": ""
}, },
"no custom theme file status": { "no custom theme file status": {
"No custom theme file": "缺失自定义主题文件" "No custom theme file": "缺失自定义主题文件"
@@ -6204,13 +6159,13 @@
"power profile description": { "power profile description": {
"Balance power and performance": "平衡与性能电源模式", "Balance power and performance": "平衡与性能电源模式",
"Custom power profile": "自定义电源配置", "Custom power profile": "自定义电源配置",
"Extend battery life": "延长电池寿命", "Extend battery life": "",
"Prioritize performance": "优先考虑性能" "Prioritize performance": ""
}, },
"power profile option": { "power profile option": {
"Balanced": "平衡", "Balanced": "平衡",
"Performance": "性能", "Performance": "",
"Power Saver": "省电" "Power Saver": ""
}, },
"primary color": { "primary color": {
"Primary": "首选" "Primary": "首选"
@@ -6243,11 +6198,11 @@
"Bottom Center": "底部中间", "Bottom Center": "底部中间",
"Bottom Left": "底部左侧", "Bottom Left": "底部左侧",
"Bottom Right": "底部右侧", "Bottom Right": "底部右侧",
"Left Center": "左侧中部", "Left Center": "",
"Right Center": "右侧中部", "Right Center": "",
"Top Center": "顶部中间", "Top Center": "",
"Top Left": "顶部左侧", "Top Left": "",
"Top Right": "顶部右侧" "Top Right": ""
}, },
"secondary color": { "secondary color": {
"Secondary": "次选" "Secondary": "次选"
@@ -6303,7 +6258,7 @@
"Auto": "自动", "Auto": "自动",
"Browse": "浏览", "Browse": "浏览",
"Custom": "自定义", "Custom": "自定义",
"Generic": "通用" "Generic": ""
}, },
"theme installation confirmation": { "theme installation confirmation": {
"Install theme '%1' from the DMS registry?": "要从DMS注册表安装主题%1吗?" "Install theme '%1' from the DMS registry?": "要从DMS注册表安装主题%1吗?"
@@ -6318,8 +6273,8 @@
"this app": "" "this app": ""
}, },
"tile color option": { "tile color option": {
"Primary Container": "首选容器", "Primary Container": "",
"Surface Variant": "表面变体" "Surface Variant": ""
}, },
"uninstall action button": { "uninstall action button": {
"Uninstall": "卸载" "Uninstall": "卸载"
@@ -6367,13 +6322,13 @@
"Wallpaper Error": "壁纸错误" "Wallpaper Error": "壁纸错误"
}, },
"wallpaper fill mode": { "wallpaper fill mode": {
"Fill": "填充", "Fill": "",
"Fit": "适合", "Fit": "",
"Pad": "覆盖", "Pad": "",
"Stretch": "拉伸", "Stretch": "",
"Tile": "平铺", "Tile": "",
"Tile H": "水平平铺", "Tile H": "",
"Tile V": "垂直平铺" "Tile V": ""
}, },
"wallpaper interval": { "wallpaper interval": {
"1 hour": "", "1 hour": "",
@@ -6417,14 +6372,14 @@
}, },
"wallpaper transition option": { "wallpaper transition option": {
"Disc": "Disc", "Disc": "Disc",
"Fade": "淡入淡出", "Fade": "",
"Iris Bloom": "光圈绽放", "Iris Bloom": "",
"None": "", "None": "",
"Pixelate": "像素化", "Pixelate": "",
"Portal": "门户", "Portal": "",
"Random": "随机", "Random": "",
"Stripes": "条纹", "Stripes": "",
"Wipe": "擦除" "Wipe": ""
}, },
"weather feels like temperature": { "weather feels like temperature": {
"Feels Like %1°": "体感 %1°" "Feels Like %1°": "体感 %1°"
@@ -2089,12 +2089,6 @@
"Fog": { "Fog": {
"Fog": "" "Fog": ""
}, },
"Folder": {
"Folder": ""
},
"Folders": {
"Folders": ""
},
"Follow Monitor Focus": { "Follow Monitor Focus": {
"Follow Monitor Focus": "跟隨螢幕焦點" "Follow Monitor Focus": "跟隨螢幕焦點"
}, },
@@ -2419,9 +2413,6 @@
"Icon": { "Icon": {
"Icon": "圖示" "Icon": "圖示"
}, },
"Icon Scale": {
"Icon Scale": ""
},
"Icon Size": { "Icon Size": {
"Icon Size": "圖示大小" "Icon Size": "圖示大小"
}, },
@@ -3022,12 +3013,6 @@
"Maximize Detection": { "Maximize Detection": {
"Maximize Detection": "最大化偵測" "Maximize Detection": "最大化偵測"
}, },
"Maximize Widget Icons": {
"Maximize Widget Icons": ""
},
"Maximize Widget Text": {
"Maximize Widget Text": ""
},
"Maximum Entry Size": { "Maximum Entry Size": {
"Maximum Entry Size": "單一項目最大大小" "Maximum Entry Size": "單一項目最大大小"
}, },
@@ -3379,9 +3364,6 @@
"No files found": { "No files found": {
"No files found": "沒有找到" "No files found": "沒有找到"
}, },
"No folders found": {
"No folders found": ""
},
"No hidden apps.": { "No hidden apps.": {
"No hidden apps.": "沒有隱藏的應用程式。" "No hidden apps.": "沒有隱藏的應用程式。"
}, },
@@ -3574,9 +3556,6 @@
"Open in Browser": { "Open in Browser": {
"Open in Browser": "在瀏覽器中開啟" "Open in Browser": "在瀏覽器中開啟"
}, },
"Open in terminal": {
"Open in terminal": ""
},
"Open search bar to find text": { "Open search bar to find text": {
"Open search bar to find text": "打開搜尋欄尋找文本" "Open search bar to find text": "打開搜尋欄尋找文本"
}, },
@@ -4074,9 +4053,6 @@
"Remove": { "Remove": {
"Remove": "刪除" "Remove": "刪除"
}, },
"Remove Widget Padding": {
"Remove Widget Padding": ""
},
"Remove gaps and border when windows are maximized": { "Remove gaps and border when windows are maximized": {
"Remove gaps and border when windows are maximized": "視窗最大化時移除間距與邊框" "Remove gaps and border when windows are maximized": "視窗最大化時移除間距與邊框"
}, },
@@ -4227,9 +4203,6 @@
"Save Notepad File": { "Save Notepad File": {
"Save Notepad File": "儲存記事本" "Save Notepad File": "儲存記事本"
}, },
"Save QR Code": {
"Save QR Code": ""
},
"Save and switch between display configurations": { "Save and switch between display configurations": {
"Save and switch between display configurations": "儲存並切換顯示設定" "Save and switch between display configurations": "儲存並切換顯示設定"
}, },
@@ -4257,9 +4230,6 @@
"Scale DankBar font sizes independently": { "Scale DankBar font sizes independently": {
"Scale DankBar font sizes independently": "獨立縮放 DankBar 字體大小" "Scale DankBar font sizes independently": "獨立縮放 DankBar 字體大小"
}, },
"Scale DankBar icon sizes independently": {
"Scale DankBar icon sizes independently": ""
},
"Scale all font sizes throughout the shell": { "Scale all font sizes throughout the shell": {
"Scale all font sizes throughout the shell": "縮放整個 Shell 中的所有字體大小" "Scale all font sizes throughout the shell": "縮放整個 Shell 中的所有字體大小"
}, },
@@ -4275,9 +4245,6 @@
"Science": { "Science": {
"Science": "科學" "Science": "科學"
}, },
"Score": {
"Score": ""
},
"Screen Sharing": { "Screen Sharing": {
"Screen Sharing": "螢幕分享" "Screen Sharing": "螢幕分享"
}, },
@@ -5109,9 +5076,6 @@
"Trigger: %1": { "Trigger: %1": {
"Trigger: %1": "觸發條件:%1" "Trigger: %1": "觸發條件:%1"
}, },
"Trust": {
"Trust": ""
},
"Try a different search": { "Try a different search": {
"Try a different search": "嘗試不同的搜尋" "Try a different search": "嘗試不同的搜尋"
}, },
@@ -5208,9 +5172,6 @@
"Untitled": { "Untitled": {
"Untitled": "無標題" "Untitled": "無標題"
}, },
"Untrust": {
"Untrust": ""
},
"Update": { "Update": {
"Update": "更新" "Update": "更新"
}, },
@@ -5470,9 +5431,6 @@
"WiFi Device": { "WiFi Device": {
"WiFi Device": "WiFi 裝置" "WiFi Device": "WiFi 裝置"
}, },
"WiFi QR code for ": {
"WiFi QR code for ": ""
},
"WiFi disabled": { "WiFi disabled": {
"WiFi disabled": "關閉 WiFi" "WiFi disabled": "關閉 WiFi"
}, },
@@ -5807,9 +5765,6 @@
"events": { "events": {
"events": "活動" "events": "活動"
}, },
"ext": {
"ext": ""
},
"fallback gpu name": { "fallback gpu name": {
"Unknown GPU": "未知 GPU" "Unknown GPU": "未知 GPU"
}, },
-105
View File
@@ -5354,20 +5354,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Folder",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Folders",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Follow Monitor Focus", "term": "Follow Monitor Focus",
"translation": "", "translation": "",
@@ -6229,13 +6215,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Icon Scale",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Icon Size", "term": "Icon Size",
"translation": "", "translation": "",
@@ -7321,20 +7300,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Maximize Widget Icons",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{
"term": "Maximize Widget Text",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Maximum Entry Size", "term": "Maximum Entry Size",
"translation": "", "translation": "",
@@ -8308,13 +8273,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "No folders found",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "No hidden apps.", "term": "No hidden apps.",
"translation": "", "translation": "",
@@ -8917,13 +8875,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Open in terminal",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Open search bar to find text", "term": "Open search bar to find text",
"translation": "", "translation": "",
@@ -10191,13 +10142,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Remove Widget Padding",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Remove gaps and border when windows are maximized", "term": "Remove gaps and border when windows are maximized",
"translation": "", "translation": "",
@@ -10597,13 +10541,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Save QR Code",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Save and switch between display configurations", "term": "Save and switch between display configurations",
"translation": "", "translation": "",
@@ -10695,13 +10632,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Scale DankBar icon sizes independently",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Scale all font sizes throughout the shell", "term": "Scale all font sizes throughout the shell",
"translation": "", "translation": "",
@@ -10737,13 +10667,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Score",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Screen Sharing", "term": "Screen Sharing",
"translation": "", "translation": "",
@@ -12977,13 +12900,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Trust",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Try a different search", "term": "Try a different search",
"translation": "", "translation": "",
@@ -13257,13 +13173,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "Untrust",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "Update", "term": "Update",
"translation": "", "translation": "",
@@ -13901,13 +13810,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "WiFi QR code for ",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "WiFi disabled", "term": "WiFi disabled",
"translation": "", "translation": "",
@@ -14370,13 +14272,6 @@
"reference": "", "reference": "",
"comment": "" "comment": ""
}, },
{
"term": "ext",
"translation": "",
"context": "",
"reference": "",
"comment": ""
},
{ {
"term": "featured", "term": "featured",
"translation": "", "translation": "",