diff --git a/.config/kando/SingletonCookie b/.config/kando/SingletonCookie new file mode 120000 index 0000000..565c97e --- /dev/null +++ b/.config/kando/SingletonCookie @@ -0,0 +1 @@ +1840225582167052180 \ No newline at end of file diff --git a/.config/kando/SingletonLock b/.config/kando/SingletonLock new file mode 120000 index 0000000..70999c0 --- /dev/null +++ b/.config/kando/SingletonLock @@ -0,0 +1 @@ +nixos-5403 \ No newline at end of file diff --git a/.config/kando/SingletonSocket b/.config/kando/SingletonSocket new file mode 120000 index 0000000..c6d347d --- /dev/null +++ b/.config/kando/SingletonSocket @@ -0,0 +1 @@ +/tmp/scoped_dirSpGAv4/SingletonSocket \ No newline at end of file diff --git a/.config/kando/config.json b/.config/kando/config.json new file mode 100644 index 0000000..dc9e589 --- /dev/null +++ b/.config/kando/config.json @@ -0,0 +1,52 @@ +{ + "locale": "auto", + "showIntroductionDialog": false, + "menuTheme": "default", + "darkMenuTheme": "default", + "menuThemeColors": { + "neon-lights": { + "glow-color": "rgb(203 166 247 / 0.75)", + "connector-color": "rgb(180 190 254 / 0.75)" + }, + "default": { + "background-color": "rgb(30 30 46)", + "text-color": "rgb(205 214 244)", + "border-color": "rgb(69 71 90)", + "hover-color": "rgb(180 190 254)" + } + }, + "darkMenuThemeColors": {}, + "enableDarkModeForMenuThemes": false, + "soundTheme": "simple-clicks", + "soundVolume": 0.5, + "ignoreWriteProtectedConfigFiles": false, + "settingsWindowColorScheme": "system", + "settingsWindowFlavor": "sakura-system", + "trayIconFlavor": "color", + "lazyInitialization": false, + "enableVersionCheck": true, + "zoomFactor": 1.3, + "centerDeadZone": 50, + "minParentDistance": 150, + "dragThreshold": 15, + "fadeInDuration": 150, + "fadeOutDuration": 200, + "keepInputFocus": false, + "enableMarkingMode": true, + "enableTurboMode": true, + "warpMouse": true, + "hoverModeNeedsConfirmation": false, + "gestureMinStrokeLength": 250, + "gestureMinStrokeAngle": 20, + "gestureJitterThreshold": 10, + "gesturePauseTimeout": 10, + "fixedStrokeLength": 0, + "rmbSelectsParent": false, + "enableGamepad": true, + "gamepadBackButton": 1, + "gamepadCloseButton": 2, + "sameShortcutBehavior": "nothing", + "useDefaultOsShowSettingsHotkey": true, + "hideSettingsButton": true, + "settingsButtonPosition": "bottom-right" +} diff --git a/.config/kando/menu-themes/adwaita-circles/REUSE.toml b/.config/kando/menu-themes/adwaita-circles/REUSE.toml new file mode 100644 index 0000000..883a718 --- /dev/null +++ b/.config/kando/menu-themes/adwaita-circles/REUSE.toml @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: Nils277 +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["preview.jpg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Nils277 " +SPDX-License-Identifier = "CC0-1.0" \ No newline at end of file diff --git a/.config/kando/menu-themes/adwaita-circles/preview.jpg b/.config/kando/menu-themes/adwaita-circles/preview.jpg new file mode 100644 index 0000000..d8db16b Binary files /dev/null and b/.config/kando/menu-themes/adwaita-circles/preview.jpg differ diff --git a/.config/kando/menu-themes/adwaita-circles/theme.css b/.config/kando/menu-themes/adwaita-circles/theme.css new file mode 100644 index 0000000..bb26481 --- /dev/null +++ b/.config/kando/menu-themes/adwaita-circles/theme.css @@ -0,0 +1,213 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-FileCopyrightText: Nils277 */ +/* SPDX-License-Identifier: CC0-1.0 */ + +.menu-node { + /* Center */ + --center-size: 64px; + /* Children */ + --child-size: 42px; + --child-distance: 72px; + /* Labels */ + --label-height: 34px; + /* Grandchildren */ + --grandchild-size: 32px; + --grandchild-distance: 0px; + /* Connector */ + --connector-width: 6px; + /* Transitions */ + --menu-transition: transform 200ms ease, left 200ms ease, top 200ms ease, width 200ms ease, height 200ms ease, margin 180ms ease, padding 180ms ease, opacity 160ms ease; + --label-transition: opacity 200ms ease; + --connector-transition: width 100ms ease, opacity 200ms ease; + --color-transition: background-color 160ms ease, border 160ms ease, color 160ms ease, box-shadow 160ms ease, outline 160ms ease; + --label-tooltop-delay: 400ms; + + /* Calculation of label position (reduce the angle in the horizontal to 50%) */ + /* This calculation could be simplified with the abs() and sign() methods but this version of css does not support it */ + --angle_signed: calc(var(--angle) - 180deg); + --angle_signed_pos: calc(max(0deg, ((var(--angle_signed) - 90deg) * 0.5) + min( 90deg, 90 * var(--angle_signed)))); + --angle_signed_neg: calc(min(0deg, ((var(--angle_signed) + 90deg) * 0.5) + max(-90deg, 90 * var(--angle_signed)))); + --angle_label: 90deg + var(--angle_signed_pos) + var(--angle_signed_neg); + --label-x: calc(cos(var(--angle_label))); + --label-y: calc(sin(var(--angle_label))); + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate(calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y))); + } + + /* Theme Layers --------------------------------------------------------------------- */ + + /* We hide all icons by default. They will be shown further down in this + file for the the child items. */ + .icon-container { + position: relative; + opacity: 0; + width: 100%; + clip-path: circle(45% at 50% 50%); + transition: var(--menu-transition); + } + + .label-layer, + .icon-layer { + position: absolute; + box-shadow: 0 0 16px rgba(0, 0, 0, 0.5); + } + + .label-layer { + transform: translate(calc(var(--child-size) * var(--label-x)), calc(var(--child-size) * var(--label-y))); + opacity: 0; + background-color: var(--label-background); + color: var(--label-text); + white-space: nowrap; + height: var(--label-height); + border-radius: var(--label-height); + border: 1px solid color-mix(in lab, var(--label-background) 66%, #808080 100%); + top: calc(-1 * var(--label-height) / 2); + padding: 7px 12px; + font-size: 15px; + box-shadow: none; + transition-delay: 0; + transition: var(--label-transition); + } + + &.right>.label-layer { + left: calc(-0.35 * var(--child-size)); + } + + &.left>.label-layer { + right: calc(-0.35 * var(--child-size)); + } + + &.top>.label-layer { + bottom: calc(0.65 * var(--child-size)); + top: inherit; + transform: translateX(-50%); + } + + &.bottom>.label-layer { + top: calc(0.65 * var(--child-size)); + transform: translateX(-50%); + } + + .icon-layer { + top: calc(-0.5 * var(--child-size)); + left: calc(-0.5 * var(--child-size)); + width: var(--child-size); + height: var(--child-size); + border-radius: 50%; + background-color: var(--circle-background); + color: var(--icon); + z-index: 1; + padding: 3px; + transition: var(--color-transition), var(--menu-transition); + } + + &.hovered>.icon-layer { + background-color: var(--circle-background-hovered); + color: var(--icon-hovered); + } + + &.active>.icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + box-shadow: 0 0 12px rgba(0, 0, 0, 0.3); + color: var(--icon); + background-color: var(--center-background-hovered); + transition: var(--menu-transition), var(--color-transition); + } + + &.active:has(>.hovered)>.icon-layer { + background-color: var(--center-background); + } + + &.grandchild>.icon-layer { + top: calc(-0.50 * var(--grandchild-size)); + left: calc(-0.50 * var(--grandchild-size)); + width: var(--grandchild-size); + height: var(--grandchild-size); + box-shadow: none; + background-color: transparent ; + } + + /* When the center is hovered, set the color of the parent too */ + &.type-submenu.parent:not(.active).hovered>.icon-layer { + background-color: var(--center-background-hovered); + color: var(--icon); + } + + /* The active menu item is the center of the menu. */ + &.child.hovered>.label-layer { + transition: var(--label-transition); + transition-delay: var(--label-tooltop-delay); + opacity: 1; + } + + /* Show the icons of the parent and child items. */ + &.active>.icon-layer>.icon-container, + &.parent>.icon-layer>.icon-container, + &.child>.icon-layer>.icon-container { + transition: var(--menu-transition); + opacity: 1; + } + + /* We disable any transition for dragged submenu items. */ + &.dragged.type-submenu { + transition: none; + } + + /* Connectors ----------------------------------------------------------------------- */ + + .connector { + transition: var(--connector-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + background-color: var(--connector); + opacity: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + } + + &:has(>.parent).hovered>.connector, + &:has(>.active.type-submenu).hovered>.connector, + &:has(>.dragged.type-submenu).hovered>.connector { + background-color: color-mix(in srgb, var(--connector) 100%, var(--center-background-hovered) 90%); + } + + &:has(>.dragged)>.connector, + &:has(>.clicked)>.connector { + transition: none; + } + + &:has(>.parent)>.connector, + &:has(>.active.type-submenu)>.connector, + &:has(>.dragged.type-submenu)>.connector { + opacity: 1; + } +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + display: none; +} + diff --git a/.config/kando/menu-themes/adwaita-circles/theme.json5 b/.config/kando/menu-themes/adwaita-circles/theme.json5 new file mode 100644 index 0000000..3339c60 --- /dev/null +++ b/.config/kando/menu-themes/adwaita-circles/theme.json5 @@ -0,0 +1,52 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: Nils277 +// SPDX-License-Identifier: CC0-1.0 + +{ + name: 'Adwaita Circles', + author: 'Simon Schneegans, Nils277', + license: 'CC0-1.0', + themeVersion: '1.0', + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 128, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + //center + 'center-background' : '#F5F5F5', + 'center-background-hovered' : '#D0D0D0', + // Circle + 'circle-background' : '#F5F5F5', + 'circle-background-hovered': '#3584E4', + // Icons + 'icon': '#222226', + 'icon-hovered': '#FFFFFF', + // Label + 'label-background': '#030408', + 'label-text': '#FFFFFF', + // Connector + 'connector': '#FFFFFF' + }, + + // This theme uses two layers, one for the icon and the background and one + // for the texts which appear next to the hovered item. + layers: [ + { class: 'icon-layer', content: 'icon' }, + { class: 'label-layer', content: 'name' }, + ], +} + diff --git a/.config/kando/menu-themes/evntech-vache/REUSE.toml b/.config/kando/menu-themes/evntech-vache/REUSE.toml new file mode 100644 index 0000000..9d1a2cc --- /dev/null +++ b/.config/kando/menu-themes/evntech-vache/REUSE.toml @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: EVNTech Vache +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["*.jpg", "*.png"] +precedence = "aggregate" +SPDX-FileCopyrightText = "EVNTech Vache " +SPDX-License-Identifier = "CC0-1.0" diff --git a/.config/kando/menu-themes/evntech-vache/preview.jpg b/.config/kando/menu-themes/evntech-vache/preview.jpg new file mode 100644 index 0000000..c32f84c Binary files /dev/null and b/.config/kando/menu-themes/evntech-vache/preview.jpg differ diff --git a/.config/kando/menu-themes/evntech-vache/theme.css b/.config/kando/menu-themes/evntech-vache/theme.css new file mode 100644 index 0000000..434de5f --- /dev/null +++ b/.config/kando/menu-themes/evntech-vache/theme.css @@ -0,0 +1,177 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: EVNTech Vache */ +/* SPDX-License-Identifier: CC0-1.0 */ + +.menu-node { + --child-distance: 90px; + --grandchild-distance: 25px; + --grandchild-size: 16px; + --center-size: 80px; + --icon-size: 40px; + --connector-width: 10px; + --menu-transition: transform 200ms ease, opacity 200ms ease; + --connector-transition: width 200ms ease, opacity 200ms ease; + + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child.type-submenu { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + &.child:not(.type-submenu) { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))) !important; + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate(calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y))); + } + + /* Theme Layers --------------------------------------------------------------------- */ + + /* We hide all icons by default. They will be shown further down in this file for the + the child items. */ + .icon-container { + position: relative; + top: 0px; + left: 0; + width: 100%; + opacity: 90%; + clip-path: circle(45% at 50% 50%); + transition: var(--menu-transition); + color: var(--accent-color); + } + + .label-layer, + .icon-layer { + position: absolute; + transition: var(--menu-transition); + } + + .label-layer { + transform: translate(calc(45px * var(--dir-x)), calc(45px * var(--dir-y))); + opacity: 0; + background-color: var(--label-background-color); + color: var(--text-color); + border: 1px solid var(--border-color); + white-space: nowrap; + height: var(--icon-size); + border-radius: var(--icon-size); + top: calc(-1 * var(--icon-size) / 2); + padding: calc(var(--icon-size) / 5) calc(var(--icon-size) / 3); + font-size: calc(var(--icon-size) / 2.7); + } + + /* The active menu item is the center of the menu. */ + &.child>.label-layer { + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + opacity: 1; + } + + &.hovered>.label-layer { + color: var(--hover-color); + border-color: var(--hover-color); + box-shadow: 0 0 10px var(--hover-color); + } + + &.right>.label-layer { + left: calc(-1 * var(--icon-size)/2); + } + + &.left>.label-layer { + right: calc(-1 * var(--icon-size)/2); + } + + &.top>.label-layer { + bottom: calc(0.4 * var(--icon-size)); + top: inherit; + transform: translate(-50%, -10px); + } + + &.bottom>.label-layer { + top: calc(0.4 * var(--icon-size)); + transform: translate(-50%, 10px); + } + + .icon-layer { + top: calc(-1 * var(--icon-size) / 2); + left: calc(-1 * var(--icon-size) / 2); + width: var(--icon-size); + height: var(--icon-size); + border-radius: 50%; + box-shadow: 0px 0 3px rgba(0, 0, 0, 0.6); + background-color: var(--circle-color); + z-index: 1; + } + + &.active>.icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + } + + &.grandchild>.icon-layer { + top: calc(-1 * var(--grandchild-size) / 2); + left: calc(-1 * var(--grandchild-size) / 2); + width: var(--grandchild-size); + height: var(--grandchild-size); + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.6); + opacity: 90%; + background-color: var(--border-color); + } + + /* Show the icons of the parent and child items. */ + + &.parent>.icon-layer>.icon-container, + &.child>.icon-layer>.icon-container { + opacity: 1; + } + + /* We disable any transition for dragged submenu items. */ + &.dragged.type-submenu { + transition: none; + } + + /* Connectors ----------------------------------------------------------------------- */ + + .connector { + transition: var(--connector-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + background-color: var(--connector-color); + opacity: 0; + box-shadow: 0 0 3px rgba(0, 0, 0, 0.5); + } + + &:has(>.dragged)>.connector, + &:has(>.clicked)>.connector { + transition: none; + } + + &:has(>.parent)>.connector, + &:has(>.active.type-submenu)>.connector, + &:has(>.dragged.type-submenu)>.connector { + opacity: 1; + } + +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + display: none; +} \ No newline at end of file diff --git a/.config/kando/menu-themes/evntech-vache/theme.json5 b/.config/kando/menu-themes/evntech-vache/theme.json5 new file mode 100644 index 0000000..e8a0d51 --- /dev/null +++ b/.config/kando/menu-themes/evntech-vache/theme.json5 @@ -0,0 +1,46 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: EVNTech Vache */ +// SPDX-License-Identifier: CC0-1.0 + +{ + name: "EVNTech Vache", + author: "EVNTech Vache", + license: "CC0-1.0", + themeVersion: "1.0", + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // This theme draws child items below their parent items. + drawChildrenBelow: false, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + "accent-color": "#007AFF", + "hover-color": "#54c474", + "connector-color": "#f5f5f5", + "circle-color": "#f5f5f5", + "border-color": "#f5f5f5", + "label-background-color": "#f5f5f5", + "text-color": "#1F1F1F", + }, + + // This theme uses two layers, one for the icon and the background and one for the arrow + // which points to the hovered item. + layers: [ + { class: "icon-layer", content: "icon" }, + { class: "label-layer", content: "name" }, + ], +} diff --git a/.config/kando/menu-themes/hexperiment/REUSE.toml b/.config/kando/menu-themes/hexperiment/REUSE.toml new file mode 100755 index 0000000..17d7cc6 --- /dev/null +++ b/.config/kando/menu-themes/hexperiment/REUSE.toml @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: Simon Schneegans +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = "preview.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Simon Schneegans " +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "border.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Simon Schneegans " +SPDX-License-Identifier = "CC0-1.0" \ No newline at end of file diff --git a/.config/kando/menu-themes/hexperiment/border.svg b/.config/kando/menu-themes/hexperiment/border.svg new file mode 100755 index 0000000..168e1c9 --- /dev/null +++ b/.config/kando/menu-themes/hexperiment/border.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + diff --git a/.config/kando/menu-themes/hexperiment/preview.jpg b/.config/kando/menu-themes/hexperiment/preview.jpg new file mode 100755 index 0000000..20d0789 Binary files /dev/null and b/.config/kando/menu-themes/hexperiment/preview.jpg differ diff --git a/.config/kando/menu-themes/hexperiment/theme.css b/.config/kando/menu-themes/hexperiment/theme.css new file mode 100755 index 0000000..b5cbc29 --- /dev/null +++ b/.config/kando/menu-themes/hexperiment/theme.css @@ -0,0 +1,153 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-License-Identifier: CC0-1.0 */ + +/** + * This theme is a hexagonal menu with a glowing effect. It is kind of a special theme + * because it only works up to 6 items. Also, if you have fewer, you should ensure that + * all items are arranged in the six cardinal directions. Otherwise, the menu will look + * weird. + */ + +.menu-node { + --tile-size: 130px; + --tile-offset: calc(var(--tile-size) * 0.5 * 1.732050808); + --hexagon: 0% 50%, 25% 6.7%, 75% 6.7%, 100% 50%, 75% 93.3%, 25% 93.3%, 0% 50%; + --menu-transition: all 200ms ease; + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child { + transform: translate(calc(var(--tile-offset) * var(--dir-x)), calc(var(--tile-offset) * var(--dir-y))); + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate(calc(var(--tile-offset) * var(--dir-x) / 3), calc(var(--tile-offset) * var(--dir-y) / 3)); + } + + /* Theme Layers --------------------------------------------------------------------- */ + + .icon-container { + color: var(--text-color); + transition: var(--menu-transition); + margin: 15%; + width: 70% !important; + height: 70% !important; + } + + .icon-layer, + .glow-layer { + position: absolute; + transition: var(--menu-transition); + } + + .icon-layer { + clip-path: polygon(var(--hexagon)); + background-color: var(--background-color); + } + + .glow-layer { + transform: scale(1.13); + filter: drop-shadow(0 0 5px var(--glow-color)); + z-index: 10; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + mask: url('border.svg') no-repeat center / contain; + background: var(--line-color) + } + } + + &.active>.icon-layer, + &.active>.glow-layer { + top: calc(-1 * var(--tile-size) / 2); + left: calc(-1 * var(--tile-size) / 2); + width: var(--tile-size); + height: var(--tile-size); + } + + &.active>.icon-layer>.icon-container { + opacity: 0.2; + } + + + /* Hovered nodes are highlighted. If a child is highlighted, we also highlight all of + its grandchildren. If the parent is highlighted, we also highlight all of its non- + active children. */ + &.active.hovered>.icon-layer, + &.parent.hovered>.icon-layer, + &.parent.hovered>.grandchild>.icon-layer, + &.child.hovered .icon-layer { + background-color: var(--hover-color); + } + + + /* Child items are displayed around the active node. The parent node of the active + node is displayed in a similar style. */ + &.parent>.icon-layer, + &.parent>.glow-layer, + &.child>.icon-layer, + &.child>.glow-layer { + top: calc(-1 * var(--tile-size) / 2); + left: calc(-1 * var(--tile-size) / 2); + width: var(--tile-size); + height: var(--tile-size); + } + + &.parent.type-submenu>.icon-layer, + &.parent.type-submenu>.glow-layer, + &.child.type-submenu>.icon-layer, + &.child.type-submenu>.glow-layer, + &.grandchild>.icon-layer, + &.grandchild>.glow-layer { + top: calc(-1 * var(--tile-size) / 6); + left: calc(-1 * var(--tile-size) / 6); + width: calc(var(--tile-size) / 3); + height: calc(var(--tile-size) / 3); + } + + /* We disable any transition for dragged items. */ + &.dragged { + transition: none; + } + + /* Connectors ----------------------------------------------------------------------- */ + + .connector { + transition: var(--menu-transition); + height: 14px; + background: var(--line-color); + top: -7px; + box-shadow: 0 0 5px var(--line-color), 0 0 15px var(--glow-color); + } + + &:has(.dragged)>.connector { + transition: none; + } +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + color: var(--text-color); + transition: var(--opacity-transition); + font-size: 16px; + font-weight: bold; + text-shadow: 0 0 5px var(--glow-color); + line-height: 22px; +} \ No newline at end of file diff --git a/.config/kando/menu-themes/hexperiment/theme.json5 b/.config/kando/menu-themes/hexperiment/theme.json5 new file mode 100755 index 0000000..435bd26 --- /dev/null +++ b/.config/kando/menu-themes/hexperiment/theme.json5 @@ -0,0 +1,43 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-License-Identifier: CC0-1.0 + +{ + name: 'Hexperiment', + author: 'Simon Schneegans', + license: 'CC0-1.0', + themeVersion: '1.0', + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // The width at which the center text is wrapped. + centerTextWrapWidth: 90, + + // This theme draws child items below their parent items. + drawChildrenBelow: false, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + 'background-color': 'rgb(0, 0, 0)', + 'text-color': 'rgb(255, 255, 255)', + 'line-color': 'rgb(255, 227, 233)', + 'glow-color': 'rgba(255, 30, 195, 0.85)', + 'hover-color': 'rgb(60, 28, 64)', + }, + + // This theme is very simple and only uses one layer for the menu items. + layers: [{ class: 'glow-layer' }, { class: 'icon-layer', content: 'icon' }], +} diff --git a/.config/kando/menu-themes/knight-forge/0xProtoNerdFontPropo-Regular.otf b/.config/kando/menu-themes/knight-forge/0xProtoNerdFontPropo-Regular.otf new file mode 100644 index 0000000..52893a4 Binary files /dev/null and b/.config/kando/menu-themes/knight-forge/0xProtoNerdFontPropo-Regular.otf differ diff --git a/.config/kando/menu-themes/knight-forge/REUSE.toml b/.config/kando/menu-themes/knight-forge/REUSE.toml new file mode 100644 index 0000000..dbb8ae1 --- /dev/null +++ b/.config/kando/menu-themes/knight-forge/REUSE.toml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: yar2000T +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["*.jpg", "*.png"] +precedence = "aggregate" +SPDX-FileCopyrightText = "yar2000T " +SPDX-License-Identifier = "CC-BY-4.0" + +# Font downloaded from: https://www.nerdfonts.com/font-downloads +[[annotations]] +path = ["0xProtoNerdFontPropo-Regular.otf"] +precedence = "aggregate" +SPDX-FileCopyrightText = "(c) 2023, 0xType Project Authors (https://github.com/0xType)" +SPDX-License-Identifier = "OFL-1.1" diff --git a/.config/kando/menu-themes/knight-forge/connector.png b/.config/kando/menu-themes/knight-forge/connector.png new file mode 100644 index 0000000..f19ce83 Binary files /dev/null and b/.config/kando/menu-themes/knight-forge/connector.png differ diff --git a/.config/kando/menu-themes/knight-forge/icon-highlight.png b/.config/kando/menu-themes/knight-forge/icon-highlight.png new file mode 100644 index 0000000..b8d5597 Binary files /dev/null and b/.config/kando/menu-themes/knight-forge/icon-highlight.png differ diff --git a/.config/kando/menu-themes/knight-forge/icon.png b/.config/kando/menu-themes/knight-forge/icon.png new file mode 100644 index 0000000..a177629 Binary files /dev/null and b/.config/kando/menu-themes/knight-forge/icon.png differ diff --git a/.config/kando/menu-themes/knight-forge/preview.jpg b/.config/kando/menu-themes/knight-forge/preview.jpg new file mode 100644 index 0000000..20d3f5e Binary files /dev/null and b/.config/kando/menu-themes/knight-forge/preview.jpg differ diff --git a/.config/kando/menu-themes/knight-forge/theme.css b/.config/kando/menu-themes/knight-forge/theme.css new file mode 100644 index 0000000..d336ef3 --- /dev/null +++ b/.config/kando/menu-themes/knight-forge/theme.css @@ -0,0 +1,170 @@ +/* SPDX-FileCopyrightText: yar2000T */ +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-License-Identifier: CC-BY-4.0 */ + +@font-face { + font-family: 'ProtoNerdPropo-Regular'; + src: url('0xProtoNerdFontPropo-Regular.otf'); +} + +#kando-menu { + .menu-node { + color: transparent; + + --child-distance: 100px; + --child-size: 60px; + + --fade-distance: 80px; + --fade-size: 45px; + + --connector-width: 10px; + --center-size: 120px; + + --menu-transition: 150ms ease; + + transition: var(--menu-transition); + + &.active { + --center-size: 100px; + } + + &.child { + transform: translate( + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)) + ); + } + + &.grandchild { + transform: translate( + calc(var(--fade-distance) * var(--dir-x)), + calc(var(--fade-distance) * var(--dir-y)) + ); + } + + &.active:has(.hovered) > .child { + transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) + translate( + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)) + ); + + &.hovered { + transform: scale(1.15) + translate( + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)) + ); + } + } + + .icon-container { + color: var(--text-color); + margin: 10px; + width: calc(100% - 20px); + image-rendering: pixelated; + } + + &.hovered.clicked > .icon-layer { + transform: scale(0.95); + } + + &.active > .icon-layer { + position: absolute; + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + background-image: url('icon.png'); + background-size: contain; + image-rendering: high-quality; + box-shadow: 0 0 8px var(--hover-color); + } + + &.parent > .icon-layer, + &.child > .icon-layer { + position: absolute; + top: calc(-1 * var(--child-size) / 2); + left: calc(-1 * var(--child-size) / 2); + width: var(--child-size); + height: var(--child-size); + background-image: url('icon.png'); + background-size: contain; + image-rendering: high-quality; + } + + &.grandchild > .icon-layer { + position: absolute; + top: calc(-1 * var(--fade-size) / 2); + left: calc(-1 * var(--fade-size) / 2); + width: var(--fade-size); + height: var(--fade-size); + background-image: url('icon.png'); + background-size: contain; + image-rendering: high-quality; + } + + &.parent.hovered > .icon-layer, + &.child.hovered > .icon-layer { + background-image: url('icon-highlight.png'); + image-rendering: high-quality; + } + + &.grandchild { + opacity: 0; + } + + &.dragged { + transition: none; + } + + .connector { + transition: var(--menu-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + + border-width: 5px 60px 5px 60px; + border-style: solid; + border-image: url('connector.png'); + border-image-slice: 5 60 5 60; + border-image-repeat: round; + image-rendering: high-quality; + + opacity: 0; + } + + &:has(.dragged) > .connector, + &:has(.clicked) > .connector { + transition: none; + } + + &.parent > .connector, + &:has(.dragged) > .connector, + &:has(.clicked) > .connector { + opacity: 1; + } + } + + .center-text { + font-family: 'ProtoNerdPropo-Regular', sans-serif; + text-shadow: 2px 2px 0px black; + color: var(--text-color); + font-size: 18px; + line-height: 20px; + } + + .selection-wedges { + mask: radial-gradient(circle at var(--center-x) var(--center-y), black 100px, transparent 50%); + + &.hovered { + --width: calc(var(--end-angle) - var(--start-angle)); + background: conic-gradient( + from calc(var(--start-angle)) at var(--center-x) var(--center-y), + var(--wedge-highlight-color) var(--width), + var(--wedge-color) var(--width) + ); + } + + background: var(--wedge-color); + } +} diff --git a/.config/kando/menu-themes/knight-forge/theme.json5 b/.config/kando/menu-themes/knight-forge/theme.json5 new file mode 100644 index 0000000..d837ccb --- /dev/null +++ b/.config/kando/menu-themes/knight-forge/theme.json5 @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: yar2000T +// SPDX-License-Identifier: CC0-1.0 + +{ + name: "KnightForge", + author: "yar2000T", + license: "CC-BY-4.0", + themeVersion: "1.0", + + engineVersion: 1, + + maxMenuRadius: 160, + + centerTextWrapWidth: 120, + + drawChildrenBelow: true, + + drawSelectionWedges: true, + + colors: { + "text-color": "rgb(255, 255, 255)", + "wedge-highlight-color": "rgba(0, 0, 0, 0.1)", + "wedge-color": "rgba(0, 0, 0, 0.2)", + }, + + layers: [{ class: 'label-layer', content: 'name' }, + ], +} diff --git a/.config/kando/menu-themes/minecraft/MinecraftRegular-Bmg3.otf b/.config/kando/menu-themes/minecraft/MinecraftRegular-Bmg3.otf new file mode 100755 index 0000000..54f08ad Binary files /dev/null and b/.config/kando/menu-themes/minecraft/MinecraftRegular-Bmg3.otf differ diff --git a/.config/kando/menu-themes/minecraft/REUSE.toml b/.config/kando/menu-themes/minecraft/REUSE.toml new file mode 100644 index 0000000..281c7da --- /dev/null +++ b/.config/kando/menu-themes/minecraft/REUSE.toml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: Simon Schneegans +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["*.jpg", "*.png"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Simon Schneegans " +SPDX-License-Identifier = "CC-BY-4.0" + +# Font downloaded from: https://www.fontspace.com/minecraft-font-f28180 +[[annotations]] +path = ["MinecraftRegular-Bmg3.otf"] +precedence = "aggregate" +SPDX-FileCopyrightText = "JDGraphics" +SPDX-License-Identifier = "CC0-1.0" diff --git a/.config/kando/menu-themes/minecraft/connector.png b/.config/kando/menu-themes/minecraft/connector.png new file mode 100644 index 0000000..ebfd419 Binary files /dev/null and b/.config/kando/menu-themes/minecraft/connector.png differ diff --git a/.config/kando/menu-themes/minecraft/icon-highlight.png b/.config/kando/menu-themes/minecraft/icon-highlight.png new file mode 100644 index 0000000..76f396e Binary files /dev/null and b/.config/kando/menu-themes/minecraft/icon-highlight.png differ diff --git a/.config/kando/menu-themes/minecraft/icon.png b/.config/kando/menu-themes/minecraft/icon.png new file mode 100644 index 0000000..f13da97 Binary files /dev/null and b/.config/kando/menu-themes/minecraft/icon.png differ diff --git a/.config/kando/menu-themes/minecraft/preview.jpg b/.config/kando/menu-themes/minecraft/preview.jpg new file mode 100644 index 0000000..4318684 Binary files /dev/null and b/.config/kando/menu-themes/minecraft/preview.jpg differ diff --git a/.config/kando/menu-themes/minecraft/theme.css b/.config/kando/menu-themes/minecraft/theme.css new file mode 100644 index 0000000..523986c --- /dev/null +++ b/.config/kando/menu-themes/minecraft/theme.css @@ -0,0 +1,141 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-License-Identifier: CC-BY-4.0 */ + +@font-face { + font-family: 'Minecraft'; + src: url(MinecraftRegular-Bmg3.otf); +} + +#kando-menu { + + .menu-node { + --child-distance: 100px; + --child-size: 60px; + + --fade-distance: 80px; + --fade-size: 45px; + + --connector-width: 10px; + + --menu-transition: 150ms ease; + + transition: var(--menu-transition); + + /* Positioning -------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + /* Grandchild items are positioned around the child items. They are not visible in + this theme, but we still need to position them so that child items can be properly + faded in and out. */ + &.grandchild { + transform: translate(calc(var(--fade-distance) * var(--dir-x)), + calc(var(--fade-distance) * var(--dir-y))); + } + + /* Theme Layers ------------------------------------------------------------------- */ + + /* This theme comes with only one layer. This contains the icon of the menu item. */ + + /* Icons are drawn pixelated. */ + .icon-container { + color: var(--text-color); + margin: 10px; + width: calc(100% - 20px); + image-rendering: pixelated; + } + + /* If a node is clicked, we scale it down a bit. */ + &.hovered.clicked>.icon-layer { + transform: scale(0.95); + } + + /* Child items are displayed around the active node. The parent node of the active + node is displayed in a similar style. */ + &.active>.icon-layer, + &.parent>.icon-layer, + &.child>.icon-layer, + &.grandchild>.icon-layer { + position: absolute; + top: calc(-1 * var(--child-size) / 2); + left: calc(-1 * var(--child-size) / 2); + width: var(--child-size); + height: var(--child-size); + background-image: url('icon.png'); + background-size: contain; + image-rendering: pixelated; + } + + &.grandchild>.icon-layer { + top: calc(-1 * var(--fade-size) / 2); + left: calc(-1 * var(--fade-size) / 2); + width: var(--fade-size); + height: var(--fade-size); + } + + /* Hovered child or parent items are highlighted. */ + &.parent.hovered>.icon-layer, + &.child.hovered>.icon-layer { + background-image: url('icon-highlight.png'); + } + + /* Grandchild items are transparent. */ + &.grandchild { + opacity: 0; + } + + /* We disable any transition for dragged items. */ + &.dragged { + transition: none; + } + + /* Connectors --------------------------------------------------------------------- */ + + .connector { + transition: var(--menu-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + + border-width: 5px 60px 5px 60px; + border-style: solid; + border-image: url('connector.png'); + border-image-slice: 5 60 5 60; + border-image-repeat: round; + image-rendering: pixelated; + + opacity: 0; + } + + &:has(.dragged)>.connector, + &:has(.clicked)>.connector { + transition: none; + } + + &.parent>.connector, + &:has(.dragged)>.connector, + &:has(.clicked)>.connector { + opacity: 1; + } + } + + /* Center Text ---------------------------------------------------------------------- */ + + .center-text { + font-family: 'Minecraft', sans-serif; + text-shadow: 2px 2px 0px black; + color: var(--text-color); + font-size: 18px; + line-height: 20px; + } +} \ No newline at end of file diff --git a/.config/kando/menu-themes/minecraft/theme.json5 b/.config/kando/menu-themes/minecraft/theme.json5 new file mode 100644 index 0000000..e5a15a1 --- /dev/null +++ b/.config/kando/menu-themes/minecraft/theme.json5 @@ -0,0 +1,39 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-License-Identifier: CC0-1.0 + +{ + name: "Minecraft", + author: "Simon Schneegans", + license: "CC-BY-4.0", + themeVersion: "1.0", + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // The width at which the center text is wrapped. + centerTextWrapWidth: 120, + + // This theme draws child items below their parent items. + drawChildrenBelow: true, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + "text-color": "rgb(255, 255, 255)", + }, + + // This theme is very simple and only uses one layer for the menu items. + layers: [{ class: "icon-layer", content: "icon" }], +} diff --git a/.config/kando/menu-themes/modified-bent-photon/README.md b/.config/kando/menu-themes/modified-bent-photon/README.md new file mode 100644 index 0000000..df17595 --- /dev/null +++ b/.config/kando/menu-themes/modified-bent-photon/README.md @@ -0,0 +1,6 @@ + + +Modified version of Bent Photon by Neigh to include text and icon color customization. diff --git a/.config/kando/menu-themes/modified-bent-photon/REUSE.toml b/.config/kando/menu-themes/modified-bent-photon/REUSE.toml new file mode 100644 index 0000000..ff1ac6c --- /dev/null +++ b/.config/kando/menu-themes/modified-bent-photon/REUSE.toml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: reass +# SPDX-License-Identifier: CC-BY-4.0 + +version = 1 + +[[annotations]] +path = ["*.jpg", "*.png"] +precedence = "aggregate" +SPDX-FileCopyrightText = "reass " +SPDX-License-Identifier = "CC-BY-4.0" + +# Font from: https://fonts.google.com/specimen/Space+Grotesk +[[annotations]] +path = ["SpaceGrotesk-Bold.otf"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk)" +SPDX-License-Identifier = "OFL-1.1" \ No newline at end of file diff --git a/.config/kando/menu-themes/modified-bent-photon/SpaceGrotesk-Bold.otf b/.config/kando/menu-themes/modified-bent-photon/SpaceGrotesk-Bold.otf new file mode 100644 index 0000000..0c8326c Binary files /dev/null and b/.config/kando/menu-themes/modified-bent-photon/SpaceGrotesk-Bold.otf differ diff --git a/.config/kando/menu-themes/modified-bent-photon/preview.jpg b/.config/kando/menu-themes/modified-bent-photon/preview.jpg new file mode 100644 index 0000000..7aed8d3 Binary files /dev/null and b/.config/kando/menu-themes/modified-bent-photon/preview.jpg differ diff --git a/.config/kando/menu-themes/modified-bent-photon/theme.css b/.config/kando/menu-themes/modified-bent-photon/theme.css new file mode 100644 index 0000000..df9ffdc --- /dev/null +++ b/.config/kando/menu-themes/modified-bent-photon/theme.css @@ -0,0 +1,314 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: reass */ +/* SPDX-FileCopyrightText: Copyright (c) 2024 NeighNeighNeigh */ +/* SPDX-License-Identifier: MIT */ + +@font-face { + font-family: 'SpaceGrotesk-Bold'; + src: url('SpaceGrotesk-Bold.otf') format('opentype'); +} + + +#kando-menu { + --dots-spacing: 3px; + --dots-size: 1px; + background-color: var(--canvas-color); + background-image: radial-gradient(var(--dots-color) var(--dots-size), transparent 0); + background-size: var(--dots-spacing) var(--dots-spacing); + background-position: calc(var(--dots-spacing)-var(--dots-size)) calc(var(--dots-spacing)-var(--dots-size)); +} + +.menu-node { + --child-distance: 90px; + --grandchild-distance: 60px; + --center-size: 140px; + --icon-size: 32px; + --connector-width: 10px; + --menu-transition: transform 120ms ease-out, opacity 120ms ease-out; + --number-padding-left: 20px; + --box-height: 36px; + + + transform-origin: left top; + transition: var(--menu-transition); + display: flex; + flex-direction: row; + + + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate(calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y))); + } + + + /* If there is a hovered child node, we scale all children up a bit to create a cool + zoom effect. The hovered child itself is scaled up even more. */ + &.active:has(.hovered)>.child { + transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + + &.hovered { + transform: scale(1.15) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + } + + /* Theme Layers --------------------------------------------------------------------- */ + + /* We hide all icons by default. They will be shown further down in this file for the + the child items. */ + .icon-container { + position: relative; + top: 0; + left: 0; + width: 100%; + opacity: 0; + transition: var(--menu-transition); + color: var(--icon-color); + } + + + .label-layer, + .icon-layer { + position: relative; + transition: var(--menu-transition); + } + + .icon-layer { + width: var(--icon-size); + height: var(--icon-size); + margin-top: 2px; + z-index: 1; + + + } + + .label-layer { + opacity: 0; + background-color: var(--lowlight-color); + color: var(--text-color); + font-size: 14px; + letter-spacing: 0.12em; /* Adjust this value as needed */ + font-family: SpaceGrotesk-Bold; + line-height: var(--box-height); + border-radius: 5px; + white-space: nowrap; + height: var(--box-height); + padding: 0px 12px 0px var(--icon-size); +/* box-shadow: 0 2px 5px color-mix(in srgb, var(--lowlight-color) 50%, transparent);*/ + text-transform: uppercase; + -webkit-font-smoothing: antialiased; + + + &::after { + padding-left: var(--number-padding-left); + color: var(--number-unhovered-color); +/* mix-blend-mode: overlay;*/ + } + } + + &:nth-last-child(4)>.label-layer::after { + content: "1"; + } + + &:nth-last-child(5)>.label-layer::after { + content: "2"; + } + + &:nth-last-child(6)>.label-layer::after { + content: "3"; + } + + &:nth-last-child(7)>.label-layer::after { + content: "4"; + } + + &:nth-last-child(8)>.label-layer::after { + content: "5"; + } + + &:nth-last-child(9)>.label-layer::after { + content: "6"; + + } + + &:nth-last-child(10)>.label-layer::after { + content: "7"; + } + + &:nth-last-child(11)>.label-layer::after { + content: "8"; + + } + + &:nth-last-child(12)>.label-layer::after { + content: "9"; + } + + &:nth-last-child(13)>.label-layer::after { + content: "a"; + } + + &:nth-last-child(14)>.label-layer::after { + content: "b"; + } + + &:nth-last-child(15)>.label-layer::after { + content: "c"; + } + + &.left>.label-layer { + top: calc(-1 * var(--icon-size) / 2); + left: -100%; + } + + &.left>.icon-layer { + top: calc(-1 * var(--icon-size) / 2); + left: calc(-100% + var(--icon-size)); + } + + &.top>.label-layer { + top: calc(-2 * var(--icon-size) / 2); + left: calc(-50% - var(--icon-size) / 2); + } + + &.top>.icon-layer { + top: calc(-2 * var(--icon-size) / 2); + left: calc(-50% + var(--icon-size) / 2); + } + + &.bottom>.label-layer { + top: 0; + left: calc(-50% - var(--icon-size) / 2); + } + + &.bottom>.icon-layer { + top: 0; + left: calc(-50% + var(--icon-size) / 2); + } + + &.right>.label-layer { + top: calc(-1 * var(--icon-size) / 2); + left: calc(-1 * var(--icon-size)); + } + + &.right>.icon-layer { + top: calc(-1 * var(--icon-size) / 2); + left: 0; + } + + &.active>.icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + } + + /* The active menu item is the center of the menu. */ + &.child>.label-layer { + opacity: 1; + + } + +&.parent>.icon-layer { + top: calc(-1 * var(--icon-size) / 2); + left: calc(-1 * var(--icon-size) / 2); + opacity: 0; + transform: scale(0); + +} + + /* Show the icons of the parent and child items. */ + &.active>.icon-layer>.icon-container, + &.parent>.icon-layer>.icon-container, + &.child>.icon-layer>.icon-container { + opacity: 1; + } + + /* We disable any transition for dragged submenu items. */ + &.dragged { + transition: none; + } + + &.grandchild { + opacity: 0; + } + + &.hovered>.label-layer { + background-color: var(--highlight-color); + color: var(--text-color); +/* box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35);*/ + + &::after { + padding-left: var(--number-padding-left); + color: color-mix(in srgb, var(--text-color) 50%, transparent); + } + + } + + &.hovered>.icon-layer>.icon-container { + color: var(--text-color) + } + + + + /* Connectors ----------------------------------------------------------------------- */ + +.connector { + transition: var(--menu-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + background: transparent; + opacity: 1; + border-radius: var(--connector-width); + position: relative; + overflow: hidden; +} + +.connector::before { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: calc(100% - (var(--center-size)*1)); /* Adjust how close the connector gets to the icon */ + height: 100%; + background: linear-gradient(to right, color-mix(in srgb, var(--highlight-color) 0%, transparent) 0%, var(--highlight-color) 100%); + border-radius: calc(var(--connector-width) / 2); + opacity: 1; + transition: var(--menu-transition); +} + + &:has(>.dragged)>.connector, + &:has(>.clicked)>.connector { + transition: none; + } + + &:has(>.parent)>.connector, + &:has(>.active)>.connector, + &:has(>.dragged)>.connector { + opacity: 1; + } +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + display: none; +} \ No newline at end of file diff --git a/.config/kando/menu-themes/modified-bent-photon/theme.json5 b/.config/kando/menu-themes/modified-bent-photon/theme.json5 new file mode 100644 index 0000000..3bf2a46 --- /dev/null +++ b/.config/kando/menu-themes/modified-bent-photon/theme.json5 @@ -0,0 +1,46 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: reass +// SPDX-FileCopyrightText: Copyright (c) 2024 NeighNeighNeigh +// SPDX-License-Identifier: MIT + +{ + name: "Bent Photon Modified", + author: "reass and Neigh", + license: "CC0-1.0", + themeVersion: "1.0", + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // This theme draws child items below their parent items. + drawChildrenBelow: true, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + 'lowlight-color': 'oklch(63.11% 0.2546 22.82 / 56%)', + 'highlight-color': 'oklch(57.52% 0.2358 28.95)', + 'text-color': 'oklch(84.38% 0.0173 45.4)', + 'icon-color': 'oklch(84.38% 0.0173 45.4)', + 'number-unhovered-color': 'oklch(91.11% 0.0295 4.56 / 84%)', + 'canvas-color': 'oklch(50.76% 0.2933 286.69 / 7%)', + 'dots-color': 'oklch(100% 0% 0deg / 0%)', + }, + + + layers: [ + { class: "label-layer", content: "name" }, + { class: "icon-layer", content: "icon" }, + ], +} \ No newline at end of file diff --git a/.config/kando/menu-themes/navigation/REUSE.toml b/.config/kando/menu-themes/navigation/REUSE.toml new file mode 100644 index 0000000..7b0606e --- /dev/null +++ b/.config/kando/menu-themes/navigation/REUSE.toml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: Simon Schneegans +# SPDX-FileCopyrightText: 2025 Rena and LCG +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["theme.css", "theme.json5"] +precedence = "aggregate" +SPDX-FileCopyrightText = ["Simon Schneegans ", "2025 Rena and LCG"] +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "preview.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "2025 Rena and LCG" +SPDX-License-Identifier = "CC0-1.0" diff --git a/.config/kando/menu-themes/navigation/preview.jpg b/.config/kando/menu-themes/navigation/preview.jpg new file mode 100644 index 0000000..f820449 Binary files /dev/null and b/.config/kando/menu-themes/navigation/preview.jpg differ diff --git a/.config/kando/menu-themes/navigation/theme.css b/.config/kando/menu-themes/navigation/theme.css new file mode 100644 index 0000000..131901d --- /dev/null +++ b/.config/kando/menu-themes/navigation/theme.css @@ -0,0 +1,678 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-FileCopyrightText: 2025 Rena and LCG */ +/* SPDX-License-Identifier: CC0-1.0 */ + +/* 🧭 Navigation Theme - Modern minimalist ring navigation theme */ +/* 🔧 v6.4: Simplified sector effects, removed sector-glow, retained core visuals */ + +/* === 🌈 New: Dual Background Layer System === */ +/* 🌟 Left half screen background layer */ +body::before { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 50%; + height: 100%; + background: var(--background-layer-left); + pointer-events: none; + z-index: -10; +} + +/* 🌟 Right half screen background layer */ +body::after { + content: ''; + position: fixed; + top: 0; + left: 50%; + width: 50%; + height: 100%; + background: var(--background-layer-right); + pointer-events: none; + z-index: -10; +} + +/* === 🎨 Canvas Gradient Background === */ +#kando-menu canvas { + background: linear-gradient(135deg, + #8B5CF6 0%, /* Blue-purple */ + #A855F7 20%, /* Purple */ + #EC4899 40%, /* Pink */ + #F97316 60%, /* Orange */ + #EAB308 80%, /* Yellow */ + #F59E0B 100% /* Golden yellow */ + ) !important; + + /* Disable all transition animations */ + transition: none !important; +} + +/* === 🎯 Menu Container Position Control: Disable Position Movement Animation === */ +/* Solution: Disable unnecessary position movement animations when returning from submenu to parent */ +#kando-menu { + /* 🚫 Disable menu container position movement animation, implementing "jump" instead of "move" */ + transition: none !important; +} + +/* 🔧 More precise control: disable main menu node position animations */ +.menu-node.active { + /* 🚫 Disable menu node position movement animation */ + transition: none !important; +} + +/* 🔧 Globally disable menu node transform animations (except child icons) */ +.menu-node:not(.child) { + /* 🚫 Disable transform animations for non-child icons */ + transition: none !important; +} + +/* === 🎨 Background Color Overlay === */ +#kando-menu::before { + content: ''; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: var(--canvas-bg); + pointer-events: none; + z-index: -1; + + /* Disable all transition animations */ + transition: none !important; +} + +/* === 📐 Core Layout Parameters === */ +.menu-node { + --child-distance: 110px; /* Ring center radius - compact for tighter icon spacing */ + --child-size: 60px; /* Icon container size */ + --ring-inner-radius: 70px; /* Ring inner radius - continue shrinking for thick ring */ + --ring-outer-radius: 150px; /* Ring outer radius */ + --ring-width: 80px; /* Ring width - continue increasing for thick ring */ + --menu-transition: transform 200ms cubic-bezier(0.4, 0.0, 0.2, 1); + + /* 🚫 Default disable menu node transform animations (child icons will be overridden separately) */ + transition: none !important; +} + +/* === 🎯 Submenu Icon Layout === */ +.menu-node.child { + /* Ring position - ensure icons are on ring centerline */ + transform: translate( + calc(var(--child-distance) * var(--dir-x)), + calc(var(--child-distance) * var(--dir-y)) + ) !important; + + /* ✅ Maintain icon expand animation (override to ensure priority) - Natural sway: like falling leaves natural sway */ + transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1.2) !important; +} + +/* === 🎨 Icon Layer Styles === */ +.menu-node .icon-layer { + position: absolute; + border-radius: 50%; + transition: var(--menu-transition); + background: transparent; +} + +/* === 🕳️ Center Area - Complete Void === */ +.menu-node.active > .icon-layer { + background: transparent; + width: 0; + height: 0; + top: 0; + left: 0; +} + +/* === ⭕ Submenu Icon Container === */ +.menu-node.child > .icon-layer { + /* 🔧 Fix 1: Precise center alignment */ + top: calc(-1 * var(--child-size) / 2); + left: calc(-1 * var(--child-size) / 2); + width: var(--child-size); + height: var(--child-size); + background: transparent; + position: relative; + z-index: 10; + + /* 🎯 Ensure transform center point is at geometric center */ + transform-origin: center center; +} + +/* === 🎯 Sector Highlight Background - 🔧 Layered Solution === */ +/* 🌌 Glow layer - below sector, responsible for sector-glow effect */ +.menu-node.child.hovered::after { + content: ''; + position: absolute; + + /* Same position and size as sector */ + top: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-y)); + left: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-x)); + width: calc(var(--ring-outer-radius) * 2); + height: calc(var(--ring-outer-radius) * 2); + + border-radius: 50%; + background: transparent; + + /* 🌟 Glow layer has removed sector-glow effect */ + /* Preserve basic structure for future expansion */ + opacity: 0; + + z-index: 4; /* Below sector */ + pointer-events: none; + transform-origin: center; + transition: opacity 200ms ease-out; + + /* Use same mask to cut into sector shape, but glow will overflow */ + mask: + radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)), + conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg); + mask-composite: intersect; + -webkit-mask: + radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)), + conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg); + -webkit-mask-composite: source-in; +} + +/* 🎯 Sector main body - responsible for precise sector shape and background color */ +.menu-node.child.hovered::before { + content: ''; + position: absolute; + + /* 🔧 Key fix: correctly calculate sector position, ensure concentric with ring */ + /* From each child position, offset back to menu center, then position sector */ + top: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-y)); + left: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-x)); + + width: calc(var(--ring-outer-radius) * 2); + height: calc(var(--ring-outer-radius) * 2); + + /* 🌨️ Sector background and inner glow effect */ + background: var(--sector-highlight); + + /* 🌟 Only preserve inner glow, outer glow handled by ::after layer */ + box-shadow: + /* Inner glow - using sector-inner-glow */ + inset 0 0 15px var(--sector-inner-glow), + inset 0 0 30px var(--sector-inner-glow), + inset 0 0 45px var(--sector-inner-glow), + inset 0 0 60px var(--sector-inner-glow), + inset 0 0 75px var(--sector-inner-glow); + + border-radius: 50%; + z-index: 5; /* 🔧 Restore normal level, sector-glow verified effective */ + pointer-events: none; + + /* Transform center point */ + transform-origin: center; + + /* Add animation transition - modified to 200ms sync */ + transition: opacity 200ms ease-out; + + /* Create sector: use mask to hollow inner circle and limit angle - ✅ Sector main body restore mask */ + mask: + /* Outer circle - precisely match ring inner radius, no gap */ + radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)), + /* Sector angle limit - solid sector */ + conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg); + mask-composite: intersect; + -webkit-mask: + radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)), + conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg); + -webkit-mask-composite: source-in; +} + +/* 🌟 Enhanced glow effect on hover - precise control version */ +.menu-node.child.hovered:hover::before { + /* Enhanced glow on hover, expand inner glow range to middle position */ + box-shadow: + /* Enhanced inner glow - sector-inner-glow, greatly expanded range */ + inset 0 0 12px var(--sector-inner-glow), + inset 0 0 24px var(--sector-inner-glow), + inset 0 0 36px var(--sector-inner-glow), + inset 0 0 48px var(--sector-inner-glow), + inset 0 0 60px var(--sector-inner-glow), + inset 0 0 72px var(--sector-inner-glow), + inset 0 0 84px var(--sector-inner-glow); + + opacity: 0.9; +} + +/* 🚑 Fix: immediately hide sector highlight when not hovering */ +.menu-node.child:not(.hovered)::before { + display: none !important; +} + +/* === 🔵 Ring Background - 🌟 Add Multi-layer Glow Effects === */ +.menu-node.active::after { + content: ''; + position: absolute; + + /* 🔧 Fix 4: Ring position precisely centered */ + top: calc(-1 * var(--ring-outer-radius)); + left: calc(-1 * var(--ring-outer-radius)); + width: calc(var(--ring-outer-radius) * 2); + height: calc(var(--ring-outer-radius) * 2); + + border-radius: 50%; + background: var(--ring-color); + + /* 🌟 Ring inner glow effect (only preserve inset) */ + box-shadow: + /* Inner glow - soft glow along ring inner edge */ + inset 0 0 8px var(--ring-glow-inner), + inset 0 0 16px var(--ring-glow-inner), + inset 0 0 24px var(--ring-glow-inner); + + z-index: -2; /* Ensure ring body is below icons */ + pointer-events: none; + + /* ✅ Enable ring body ripple effect - expanding from center outward */ + transition: transform 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; + animation: ring-ripple-expand 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; + + /* 🔧 Fix 5: Ensure transform center point is precisely centered */ + transform-origin: 50% 50%; + + /* Use mask to hollow inner circle creating ring */ + mask: radial-gradient(circle at center, transparent var(--ring-inner-radius), black calc(var(--ring-inner-radius) + 1px)); + -webkit-mask: radial-gradient(circle at center, transparent var(--ring-inner-radius), black calc(var(--ring-inner-radius) + 1px)); +} + +/* 🌟 Ring outer glow effect - separate element to avoid mask interference */ +.menu-node.active::before { + content: ''; + position: absolute; + + /* Same position and size as ring */ + top: calc(-1 * var(--ring-outer-radius)); + left: calc(-1 * var(--ring-outer-radius)); + width: calc(var(--ring-outer-radius) * 2); + height: calc(var(--ring-outer-radius) * 2); + + border-radius: 50%; + background: transparent; + + /* 🌟 Main glow and outer diffuse glow - not affected by mask */ + box-shadow: + /* Main glow - primary glow effect around ring */ + 0 0 6px var(--ring-glow), + 0 0 12px var(--ring-glow), + 0 0 18px var(--ring-glow), + 0 0 24px var(--ring-glow), + + /* Outer diffuse glow - greatly enhanced visibility */ + 0 0 40px var(--ring-glow-outer), + 0 0 60px var(--ring-glow-outer), + 0 0 80px var(--ring-glow-outer), + 0 0 120px var(--ring-glow-outer); + + z-index: -3; /* Below ring body */ + pointer-events: none; + + /* ✅ Ring outer glow ripple effect animation - synchronized expansion with ring body */ + transition: transform 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94), + opacity 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94), + box-shadow 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; + animation: ring-ripple-glow-expand 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; + + transform-origin: 50% 50%; +} + +/* 🍳 Ring inner hole glow effect - new element */ +.menu-node.active > .icon-layer::before { + content: ''; + position: absolute; + + /* Inner hole position and size */ + top: calc(-1 * var(--ring-inner-radius)); + left: calc(-1 * var(--ring-inner-radius)); + width: calc(var(--ring-inner-radius) * 2); + height: calc(var(--ring-inner-radius) * 2); + + border-radius: 50%; + background: transparent; + + /* 🌟 Ring inner hole multi-layer glow effect - converging toward center */ + box-shadow: + /* Inner glow - main effect converging from edge to center */ + inset 0 0 8px var(--ring-inner-hole-glow), + inset 0 0 16px var(--ring-inner-hole-glow), + inset 0 0 24px var(--ring-inner-hole-glow), + inset 0 0 32px var(--ring-inner-hole-glow), + + /* Inner glow depth enhancement - enhance center convergence effect */ + inset 0 0 40px var(--ring-inner-hole-glow-inner), + inset 0 0 50px var(--ring-inner-hole-glow-inner), + inset 0 0 60px var(--ring-inner-hole-glow-inner), + + /* Slight outer boundary glow - only at edge position */ + 0 0 4px var(--ring-inner-hole-glow-outer), + 0 0 8px var(--ring-inner-hole-glow-outer); + + z-index: -1; /* Below center text, but above ring */ + pointer-events: none; + + /* ✅ Ring inner hole glow ripple effect animation - synchronized expansion with ring body */ + transition: transform 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; + animation: ring-ripple-inner-glow 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; + + transform-origin: 50% 50%; +} + +/* === 🎯 Add Parent Direction Indicator on Ring - 🔧 v3.3 Fixed Version: Strictly Limit Display Range === */ +/* Only display parent direction indicator on non-root menu main containers, not on child icons */ +/* 🔧 Key fix: use more precise selector to avoid display in submenus */ +.menu-node.active:not(.level-0):not(.child) > .icon-layer::after { + content: ''; + position: absolute; + + /* 🔧 Simplified positioning logic, use fixed position */ + top: calc(-1 * var(--child-distance) - 8px); + left: calc(-8px); + + /* 📝 Simple arrow design: CSS-drawn arrow pointing to parent */ + width: 0; + height: 0; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-bottom: 12px solid var(--parent-indicator-color); + + /* Arrow glow effect */ + filter: drop-shadow(0 0 4px var(--parent-indicator-glow)) + drop-shadow(0 0 8px var(--parent-indicator-glow)); + + /* Animation effect */ + transition: var(--menu-transition); + z-index: 25; + pointer-events: none; + + /* 🔧 Ensure arrow transform center point is correct */ + transform-origin: 8px calc(var(--child-distance) + 8px); + + /* 🎯 Key: rotate arrow to point to parent direction */ + transform: rotate(calc(var(--angle, 0deg) + 180deg)); +} + +/* Enhanced effect on hover */ +.menu-node.active:not(.level-0):not(.child):hover > .icon-layer::after { + border-bottom-color: var(--parent-indicator-color); + filter: drop-shadow(0 0 6px var(--parent-indicator-glow)) + drop-shadow(0 0 12px var(--parent-indicator-glow)) + drop-shadow(0 0 18px var(--parent-indicator-glow)); + transform: rotate(calc(var(--angle, 0deg) + 180deg)) scale(1.2); +} + +/* === 🎨 Icon Styles === */ +.menu-node .icon-container { + position: relative; + + /* 🔧 Fix 6: Icon container precisely centered */ + top: 0; + left: 0; + width: 100%; + height: 100%; + + display: flex; + align-items: center; + justify-content: center; + color: var(--icon-color); + font-size: 32px; + opacity: 1; + transition: all 200ms ease-out; + z-index: 15; + + /* 🌟 Icon basic glow effect */ + filter: + drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5)) + drop-shadow(0 0 4px var(--icon-glow)) + drop-shadow(0 0 8px var(--icon-glow)) + drop-shadow(0 0 12px var(--icon-glow-outer)); + + /* 🎯 Ensure icon transform center point is at geometric center */ + transform-origin: center center; +} + +/* 🚑 Fix icon glow issue during expansion - prevent sector color during expansion, but preserve beautiful glow */ +.menu-node.child .icon-container { + /* Default state: complete glow effect, but no sector color */ + filter: + drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5)) + drop-shadow(0 0 4px var(--icon-glow)) + drop-shadow(0 0 8px var(--icon-glow)) + drop-shadow(0 0 12px var(--icon-glow-outer)) !important; + color: var(--icon-color) !important; +} + +/* ✅ Final version Kando hover effect - using .hovered class */ +.menu-node.child.hovered .icon-container { + transform: scale(1.2) !important; + color: var(--icon-hover-color) !important; /* ✅ Fully effective: using Kando native hover mechanism */ + + /* Enhanced glow effect on hover */ + filter: + drop-shadow(0 2px 4px rgba(0, 0, 0, 0.7)) + drop-shadow(0 0 6px var(--icon-glow)) + drop-shadow(0 0 12px var(--icon-glow)) + drop-shadow(0 0 18px var(--icon-glow)) + drop-shadow(0 0 24px var(--icon-glow-outer)) + drop-shadow(0 0 32px var(--icon-glow-outer)) !important; +} + +/* 🚑 Final protection strategy: only limit glow, don't interfere with color and transform */ +.menu-node.child.hovered:not(:hover) .icon-container { + /* When Kando adds .hovered class but mouse is not truly hovering, only limit complex glow effects */ + filter: + drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5)) + drop-shadow(0 0 4px var(--icon-glow)) + drop-shadow(0 0 8px var(--icon-glow)) !important; + /* ✅ No longer force override color and transform, allow .hovered effect to work normally */ +} + +/* === 🔤 Center Text Minimal Configuration for Kando 2.0 === */ +.center-text { + /* 🎯 Only essential visual properties - let Kando 2.0 handle all sizing and layout */ + color: var(--text-color); + + /* 🌟 Center text glow effect - preserved visual identity */ + text-shadow: + 0 1px 2px rgba(0, 0, 0, 0.5), + 0 0 4px var(--text-glow), + 0 0 8px var(--text-glow), + 0 0 12px var(--text-glow), + 0 0 16px var(--text-glow-outer), + 0 0 24px var(--text-glow-outer); + + /* 🎯 Keep z-index for layering */ + z-index: 20; +} + +/* === 🔗 Connector Control: Completely Hide Connectors === */ +/* Default hide all connectors */ +.connector { + opacity: 0 !important; + display: none !important; +} + +/* Hide hovered item connectors */ +.menu-node.child.hovered .connector { + opacity: 0 !important; + display: none !important; +} + +/* Hide connectors pointing to hovered icon direction (green) */ +.menu-node.active:not(.child) .connector { + opacity: 0 !important; + display: none !important; +} + +/* Also hide parent connectors */ +.menu-node.parent .connector { + opacity: 0 !important; + display: none !important; +} + +/* === 🎭 Hide Grandchild Menus === */ +.menu-node.grandchild { + opacity: 0 !important; + pointer-events: none !important; +} + +/* === 🌿 Ring Natural Sway Animation Definitions === */ +/* Ring body natural sway - synchronized with icons */ +@keyframes ring-natural-sway { + 0% { + transform: scale(0.85) rotate(-2deg); + opacity: 0; + } + 50% { + transform: scale(1.02) rotate(1deg); + opacity: 0.7; + } + 80% { + transform: scale(0.99) rotate(-0.5deg); + opacity: 0.9; + } + 100% { + transform: scale(1) rotate(0deg); + opacity: 1; + } +} + +/* === 🌊 Ring Ripple Effect Animation Definitions === */ +/* Ring body ripple expansion - like water ripples expanding from center outward */ +@keyframes ring-ripple-expand { + 0% { + transform: scale(0.5); + opacity: 0; + } + 30% { + transform: scale(0.8); + opacity: 0.5; + } + 60% { + transform: scale(1.03); + opacity: 0.8; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +/* Ring outer glow synchronized animation */ +@keyframes ring-outer-glow-sync { + 0% { + transform: scale(0.9); + opacity: 0; + } + 60% { + transform: scale(1.05); + opacity: 0.8; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +/* Ring outer glow ripple expansion animation - synchronized expansion with main body */ +@keyframes ring-ripple-glow-expand { + 0% { + transform: scale(0.6); + opacity: 0; + box-shadow: + 0 0 0px var(--ring-glow), + 0 0 0px var(--ring-glow-outer); + } + 25% { + transform: scale(0.85); + opacity: 0.3; + box-shadow: + 0 0 4px var(--ring-glow), + 0 0 8px var(--ring-glow), + 0 0 16px var(--ring-glow-outer), + 0 0 32px var(--ring-glow-outer); + } + 50% { + transform: scale(1.02); + opacity: 0.6; + box-shadow: + 0 0 8px var(--ring-glow), + 0 0 16px var(--ring-glow), + 0 0 24px var(--ring-glow), + 0 0 40px var(--ring-glow-outer), + 0 0 60px var(--ring-glow-outer), + 0 0 80px var(--ring-glow-outer); + } + 80% { + transform: scale(1.05); + opacity: 0.9; + box-shadow: + 0 0 10px var(--ring-glow), + 0 0 20px var(--ring-glow), + 0 0 30px var(--ring-glow), + 0 0 40px var(--ring-glow), + 0 0 50px var(--ring-glow-outer), + 0 0 70px var(--ring-glow-outer), + 0 0 100px var(--ring-glow-outer), + 0 0 140px var(--ring-glow-outer); + } + 100% { + transform: scale(1); + opacity: 1; + box-shadow: + 0 0 6px var(--ring-glow), + 0 0 12px var(--ring-glow), + 0 0 18px var(--ring-glow), + 0 0 24px var(--ring-glow), + 0 0 40px var(--ring-glow-outer), + 0 0 60px var(--ring-glow-outer), + 0 0 80px var(--ring-glow-outer), + 0 0 120px var(--ring-glow-outer); + } +} + +/* Ring inner hole glow ripple animation - converging from outside to inside */ +@keyframes ring-ripple-inner-glow { + 0% { + transform: scale(0.7); + opacity: 0; + } + 40% { + transform: scale(0.92); + opacity: 0.4; + } + 70% { + transform: scale(1.04); + opacity: 0.8; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +/* Ring inner hole glow synchronized animation */ +@keyframes ring-inner-hole-glow-sync { + 0% { + transform: scale(0.88); + opacity: 0; + } + 55% { + transform: scale(1.03); + opacity: 0.7; + } + 100% { + transform: scale(1); + opacity: 1; + } +} diff --git a/.config/kando/menu-themes/navigation/theme.json5 b/.config/kando/menu-themes/navigation/theme.json5 new file mode 100644 index 0000000..1a32493 --- /dev/null +++ b/.config/kando/menu-themes/navigation/theme.json5 @@ -0,0 +1,69 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: 2025 Rena and LCG +// SPDX-License-Identifier: CC0-1.0 + +{ + name: 'Navigation', + author: 'Rena and LCG', + license: 'CC0-1.0', + themeVersion: '6.4', + description: 'Modern minimalist ring navigation theme with dynamic ripple animations. Features smooth icon expansion with natural sway motion and synchronized ring ripple effects.', + + engineVersion: 1, + + maxMenuRadius: 180, + centerTextWrapWidth: 140, // Precisely matches inner circle diameter (70px radius × 2) + drawChildrenBelow: true, + childTransitionTime: 200, + + colors: { + // === 🔤 Text Color Configuration === + 'text-color': 'rgb(255 255 255 / 0.9)', // Center text primary color + 'text-glow': 'rgb(255 255 255 / 0.5)', // Text glow effect + 'text-glow-outer': 'rgb(85 85 85 / 0.3)', // Text outer glow - gray tones + + // === 🎨 Icon Color Configuration === + 'icon-color': 'rgb(255 255 255 / 0.9)', // Icon base color + 'icon-hover-color': 'rgb(255 255 255 / 1.0)', // Icon color on hover + 'icon-glow': 'rgb(255 255 255 / 0.5)', // Icon glow effect + 'icon-glow-outer': 'rgba(255, 255, 255, 0.3)', // Icon outer glow + + // === ⭕ Ring Color Configuration === + 'ring-color': 'rgb(71 71 71 / 0.34)', // Ring main body color - dark gray + 'ring-glow': 'rgba(255, 255, 255, 0.3)', // Ring primary glow + 'ring-glow-inner': 'rgb(212 212 212 / 0.25)', // Ring inner glow - light gray + 'ring-glow-outer': 'rgba(255, 255, 255, 0.4)', // Ring outer glow + 'ring-inner-hole-glow': 'rgb(254 254 254 / 0.2)', // Ring inner hole glow + 'ring-inner-hole-glow-inner': 'rgb(255 255 255 / 0.3)', // Inner hole inner glow + 'ring-inner-hole-glow-outer': 'rgba(255, 255, 255, 0.1)', // Inner hole outer glow + + // === 🎯 Sector Highlight Configuration === + 'sector-highlight': 'rgb(34 104 234 / 0.6)', // Sector highlight main color - blue tones + 'sector-inner-glow': 'rgb(42 235 199 / 0.86)', // Sector inner glow - cyan high opacity + + // === 🔗 Parent Indicator Configuration === + 'parent-indicator-color': 'rgba(255, 255, 255, 0.8)', // Parent arrow color + 'parent-indicator-glow': 'rgba(255, 255, 255, 0.4)', // Arrow glow effect + + // === 🌫️ Background Configuration === + 'canvas-bg': 'rgba(0, 0, 0, 0)', // Canvas background mask - fully transparent + + // === 🌈 Dual Background Layer Configuration === + 'background-layer-left': 'rgba(255, 255, 255, 1.0)', // Left half screen background - pure white + 'background-layer-right': 'rgba(0, 0, 0, 1.0)' // Right half screen background - pure black + }, + + layers: [ + { + class: 'icon-layer', + content: 'icon' + } + ] +} diff --git a/.config/kando/menu-themes/neo-ring/REUSE.toml b/.config/kando/menu-themes/neo-ring/REUSE.toml new file mode 100644 index 0000000..24d63f6 --- /dev/null +++ b/.config/kando/menu-themes/neo-ring/REUSE.toml @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: Simon Schneegans +# SPDX-FileCopyrightText: 2025 Rena & 小光 +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["theme.css", "theme.json5"] +precedence = "aggregate" +SPDX-FileCopyrightText = ["Simon Schneegans ", "2025 Rena & 小光"] +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "preview.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "2025 Rena & 小光" +SPDX-License-Identifier = "CC0-1.0" diff --git a/.config/kando/menu-themes/neo-ring/assets/arrow.svg b/.config/kando/menu-themes/neo-ring/assets/arrow.svg new file mode 100644 index 0000000..b1964d0 --- /dev/null +++ b/.config/kando/menu-themes/neo-ring/assets/arrow.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/.config/kando/menu-themes/neo-ring/assets/ring-mask.svg b/.config/kando/menu-themes/neo-ring/assets/ring-mask.svg new file mode 100644 index 0000000..e8a16a0 --- /dev/null +++ b/.config/kando/menu-themes/neo-ring/assets/ring-mask.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/.config/kando/menu-themes/neo-ring/preview.jpg b/.config/kando/menu-themes/neo-ring/preview.jpg new file mode 100644 index 0000000..a571a87 Binary files /dev/null and b/.config/kando/menu-themes/neo-ring/preview.jpg differ diff --git a/.config/kando/menu-themes/neo-ring/theme.css b/.config/kando/menu-themes/neo-ring/theme.css new file mode 100644 index 0000000..2c87c80 --- /dev/null +++ b/.config/kando/menu-themes/neo-ring/theme.css @@ -0,0 +1,415 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-FileCopyrightText: 2025 Rena and LCG */ +/* SPDX-License-Identifier: CC0-1.0 */ + +/* Neo Ring Theme - Enhanced neon ring effects with glassmorphism background */ + +@keyframes neon-pulse { + 0%, 100% { + opacity: 0.6; + transform: translate(-50%, -50%) scale(0.9); + } + 50% { + opacity: 1; + transform: translate(-50%, -50%) scale(1.1); + } +} + +@keyframes neon-hover-pulse { + 0%, 100% { + opacity: 0.8; + transform: translate(-50%, -50%) scale(1.1); + } + 50% { + opacity: 1; + transform: translate(-50%, -50%) scale(1.3); + } +} + +.menu-node { + --child-distance: 100px; + --grandchild-distance: 16px; + --grandchild-size: 15px; + --center-size: 100px; + --child-size: 50px; + --connector-width: 3px; + --menu-transition: all 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94); + --opacity-transition: opacity 300ms ease; + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate(calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y))); + } + + /* If there is a hovered child node, we scale all children up a bit to create a cool + zoom effect. The hovered child itself is scaled up even more. */ + &.active:has(>.hovered)>.child { + transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + + &.hovered { + transform: scale(1.15) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + } + + /* Theme Layers --------------------------------------------------------------------- */ + + /* Icon container styling with enhanced glow effects */ + .icon-container { + opacity: 0; + color: var(--icon-color); + transition: var(--opacity-transition); + text-shadow: + 0 0 5px var(--glow-color), + 0 0 10px var(--glow-color), + 0 0 20px var(--glow-color); + } + + /* Layer positioning and basic styling */ + .arrow-layer, + .outer-neon-ring, + .inner-neon-ring, + .icon-layer { + position: absolute; + transition: var(--menu-transition); + } + + /* Active menu item (center) layer sizing */ + &.active>.arrow-layer, + &.active>.outer-neon-ring, + &.active>.inner-neon-ring, + &.active>.icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + } + + /* Child and parent item layer sizing */ + &.parent>.icon-layer, + &.child>.icon-layer { + top: calc(-1 * var(--child-size) / 2); + left: calc(-1 * var(--child-size) / 2); + width: var(--child-size); + height: var(--child-size); + } + + &.parent>.outer-neon-ring, + &.parent>.inner-neon-ring, + &.child>.outer-neon-ring, + &.child>.inner-neon-ring { + top: calc(-1 * var(--child-size) / 2); + left: calc(-1 * var(--child-size) / 2); + width: var(--child-size); + height: var(--child-size); + } + + /* Neon Ring Effects ---------------------------------------------------------------- */ + + /* Outer neon ring with cyan glow */ + .outer-neon-ring { + opacity: 0; + border-radius: 50%; + background: transparent; + pointer-events: none; + z-index: 3; + + &::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: calc(100% + 12px); + height: calc(100% + 12px); + transform: translate(-50%, -50%); + border-radius: 50%; + border: 2px solid rgb(0, 255, 255); + box-shadow: + 0 0 10px rgba(0, 255, 255, 0.8), + inset 0 0 5px rgba(0, 255, 255, 0.6); + animation: neon-pulse 3s ease-in-out infinite; + } + } + + /* Inner neon ring with magenta glow */ + .inner-neon-ring { + opacity: 0; + border-radius: 50%; + background: transparent; + pointer-events: none; + z-index: 2; + + &::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: calc(100% + 4px); + height: calc(100% + 4px); + transform: translate(-50%, -50%); + border-radius: 50%; + border: 2px solid rgb(255, 0, 128); + box-shadow: + 0 0 8px rgba(255, 0, 128, 0.8), + inset 0 0 4px rgba(255, 0, 128, 0.6); + animation: neon-pulse 2.5s ease-in-out infinite; + } + } + + /* Neon ring visibility logic */ + &.active>.outer-neon-ring, + &.active>.inner-neon-ring, + &.child.hovered>.outer-neon-ring, + &.child.hovered>.inner-neon-ring, + &.parent.hovered>.outer-neon-ring, + &.parent.hovered>.inner-neon-ring { + opacity: 1; + } + + &.child:not(.hovered)>.outer-neon-ring, + &.child:not(.hovered)>.inner-neon-ring, + &.parent:not(.hovered)>.outer-neon-ring, + &.parent:not(.hovered)>.inner-neon-ring { + opacity: 0; + } + + /* Icon layer - transparent background with enhanced layering */ + .icon-layer { + border-radius: 50%; + background: transparent !important; + border: none !important; + opacity: 1; + z-index: 8; + } + + /* Arrow layer for directional indication */ + .arrow-layer { + background: var(--glow-color); + mask: url(assets/arrow.svg) no-repeat center; + mask-size: contain; + -webkit-mask: url(assets/arrow.svg) no-repeat center; + -webkit-mask-size: contain; + transform: scale(1.0) rotate(var(--hovered-child-angle)); + opacity: 0; + filter: drop-shadow(0 0 5px var(--glow-color)); + z-index: 9; + } + + /* Hover Effects -------------------------------------------------------------------- */ + + /* Enhanced scaling effects on hover */ + &.child.hovered>.icon-layer { + transform: scale(2.0) !important; + z-index: 15 !important; + background: transparent !important; + border: none !important; + } + + &.parent.hovered>.icon-layer { + transform: scale(2.0) !important; + z-index: 15 !important; + background: transparent !important; + border: none !important; + } + + &.active.hovered>.icon-layer { + transform: scale(1.1) !important; + background: transparent !important; + border: none !important; + } + + /* Enhanced neon ring effects on hover */ + &.child.hovered>.outer-neon-ring::before, + &.parent.hovered>.outer-neon-ring::before { + border-width: 4px !important; + width: calc(200% + 32px) !important; + height: calc(200% + 32px) !important; + animation: neon-hover-pulse 1.5s ease-in-out infinite !important; + box-shadow: + 0 0 25px rgba(0, 255, 255, 1.0), + inset 0 0 15px rgba(0, 255, 255, 0.8) !important; + } + + &.child.hovered>.inner-neon-ring::before, + &.parent.hovered>.inner-neon-ring::before { + border-width: 4px !important; + width: calc(200% + 16px) !important; + height: calc(200% + 16px) !important; + animation: neon-hover-pulse 1.3s ease-in-out infinite !important; + box-shadow: + 0 0 20px rgba(255, 0, 128, 1.0), + inset 0 0 12px rgba(255, 0, 128, 0.8) !important; + } + + /* Center item hover effects */ + &.active.hovered>.outer-neon-ring::before { + border-width: 3px !important; + width: calc(100% + 16px) !important; + height: calc(100% + 16px) !important; + animation: neon-pulse 2s ease-in-out infinite !important; + box-shadow: + 0 0 18px rgba(0, 255, 255, 1.0), + inset 0 0 10px rgba(0, 255, 255, 0.8) !important; + } + + &.active.hovered>.inner-neon-ring::before { + border-width: 3px !important; + width: calc(100% + 8px) !important; + height: calc(100% + 8px) !important; + animation: neon-pulse 1.8s ease-in-out infinite !important; + box-shadow: + 0 0 15px rgba(255, 0, 128, 1.0), + inset 0 0 8px rgba(255, 0, 128, 0.8) !important; + } + + /* Default pulsing animation for non-hovered center items */ + &.active:not(.hovered)>.outer-neon-ring::before { + animation: neon-pulse 3s ease-in-out infinite !important; + } + + &.active:not(.hovered)>.inner-neon-ring::before { + animation: neon-pulse 2.5s ease-in-out infinite !important; + } + + /* Arrow Display Logic -------------------------------------------------------------- */ + + &.active:has(.hovered)>.arrow-layer { + opacity: 1; + transform: scale(1.8) rotate(var(--hovered-child-angle)); + } + + &:has(.dragged)>.arrow-layer { + transform: scale(1.8) rotate(var(--pointer-angle)); + transition: none; + } + + &.active:has(.hovered.dragged)>.arrow-layer { + transform: scale(1.8) rotate(var(--pointer-angle)); + } + + /* Icon Visibility Logic ------------------------------------------------------------ */ + + /* Hide center icon when text label is present */ + &.active>.icon-layer>.icon-container { + opacity: 0 !important; + } + + /* Show icons for parent and child items */ + &.parent>.icon-layer>.icon-container, + &.child>.icon-layer>.icon-container { + opacity: 1; + } + + /* Click Effects -------------------------------------------------------------------- */ + + &.parent.hovered.clicked>.icon-layer, + &.child.hovered.clicked>.icon-layer { + transform: scale(0.85); + } + + /* Grandchild Items ----------------------------------------------------------------- */ + + &.grandchild>.icon-layer { + top: calc(-1 * var(--grandchild-size) / 2); + left: calc(-1 * var(--grandchild-size) / 2); + width: var(--grandchild-size); + height: var(--grandchild-size); + opacity: 0; + } + + /* Disable transitions for dragged items */ + &.dragged { + transition: none; + } + + /* Connectors ----------------------------------------------------------------------- */ + + .connector { + transition: var(--menu-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + background: linear-gradient(to right, + transparent 60px, + rgba(0, 255, 255, 0.2) 45%, + var(--connector-color) 50%, + rgba(0, 255, 255, 0.2) 55%, + transparent calc(100% - 60px)); + box-shadow: + 0 0 6px rgba(0, 255, 255, 0.4), + 0 0 12px rgba(0, 255, 255, 0.2); + border-radius: 2px; + } + + &:has(.dragged)>.connector, + &:has(.clicked)>.connector { + transition: none; + } +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + color: var(--label-color, var(--icon-color)) !important; + transition: var(--opacity-transition); + + /* Enhanced glow effects for center text */ + text-shadow: + 0 0 calc(5px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))), + 0 0 calc(10px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))), + 0 0 calc(15px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))), + 0 0 calc(25px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))), + 0 0 calc(35px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))); + + font-size: 16px; + line-height: 22px; + font-family: 'Courier New', monospace; + font-weight: 900; + letter-spacing: 1px; + overflow: visible; + z-index: 20; + + /* Additional filter effects for enhanced glow */ + filter: + drop-shadow(0 0 calc(10px * 6) var(--label-glow-color, var(--label-color, var(--icon-color)))) + drop-shadow(0 0 calc(20px * 6) var(--label-glow-color, var(--label-color, var(--icon-color)))) + drop-shadow(0 0 calc(30px * 6) var(--label-glow-color, var(--label-color, var(--icon-color)))); +} + +/* Canvas Background ------------------------------------------------------------------ */ + +#kando-menu { + background-color: var(--canvas-color) !important; +} + +.selection-wedges { + mask: radial-gradient(circle at var(--center-x) var(--center-y), transparent 50px, black 52px); + -webkit-mask: radial-gradient(circle at var(--center-x) var(--center-y), transparent 50px, black 52px); + + &.hovered { + --width: calc(var(--end-angle) - var(--start-angle)); + background: conic-gradient(from calc(var(--start-angle)) at var(--center-x) var(--center-y), + var(--wedge-highlight-color) var(--width), + var(--wedge-color) var(--width)); + } + + background: var(--wedge-color); +} diff --git a/.config/kando/menu-themes/neo-ring/theme.json5 b/.config/kando/menu-themes/neo-ring/theme.json5 new file mode 100644 index 0000000..b942e6b --- /dev/null +++ b/.config/kando/menu-themes/neo-ring/theme.json5 @@ -0,0 +1,73 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: 2025 Rena and LCG +// SPDX-License-Identifier: CC0-1.0 + +{ + name: 'Neo Ring', + author: 'Rena and LCG', + license: 'CC0-1.0', + themeVersion: '1.0', + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // The width at which the center text is wrapped. + centerTextWrapWidth: 90, + + // This theme draws child items below their parent items. + drawChildrenBelow: true, + + // Draw the thin lines between adjacent menu items. + drawSelectionWedges: true, + + // These colors can be configured by the user and are available in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + 'glow-color': 'rgb(0, 255, 255)', + 'connector-color': 'rgba(0, 255, 255, 0.8)', + 'canvas-color': 'rgba(0, 40, 40, 0.6)', + 'icon-color': 'rgb(0, 255, 255)', + 'label-color': 'rgb(255, 255, 255)', + 'label-glow-color': 'rgb(255, 255, 255)', + 'wedge-highlight-color': 'rgba(0, 255, 255, 0.1)', + 'wedge-color': 'rgba(0, 255, 255, 0.2)', + }, + + // This theme uses multiple layers to create enhanced neon ring effects. + // The layers are rendered in the order specified below, with the first layer + // being drawn at the bottom and the last layer at the top. + layers: [ + { + // Inner neon ring layer - provides secondary glow effect + class: 'inner-neon-ring', + content: 'none' + }, + { + // Outer neon ring layer - provides primary glow effect + class: 'outer-neon-ring', + content: 'none' + }, + { + // Icon layer - contains the actual menu item icons + class: 'icon-layer', + content: 'icon' + }, + { + // Arrow layer - provides directional indication for navigation + class: 'arrow-layer', + content: 'none' + } + ] +} diff --git a/.config/kando/menu-themes/neon-lights-color/REUSE.toml b/.config/kando/menu-themes/neon-lights-color/REUSE.toml new file mode 100644 index 0000000..3a3fb4a --- /dev/null +++ b/.config/kando/menu-themes/neon-lights-color/REUSE.toml @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Simon Schneegans +# SPDX-FileCopyrightText: 2025 Rena and LCG +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["theme.css", "theme.json5"] +precedence = "aggregate" +SPDX-FileCopyrightText = ["Simon Schneegans ", "2025 Rena and LCG"] +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "preview.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "2025 Rena and LCG" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["assets/arrow.svg", "assets/ring-mask.svg"] +precedence = "aggregate" +SPDX-FileCopyrightText = ["Simon Schneegans ", "2025 Rena and LCG"] +SPDX-License-Identifier = "CC0-1.0" diff --git a/.config/kando/menu-themes/neon-lights-color/assets/arrow.svg b/.config/kando/menu-themes/neon-lights-color/assets/arrow.svg new file mode 100644 index 0000000..b1964d0 --- /dev/null +++ b/.config/kando/menu-themes/neon-lights-color/assets/arrow.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/.config/kando/menu-themes/neon-lights-color/assets/ring-mask.svg b/.config/kando/menu-themes/neon-lights-color/assets/ring-mask.svg new file mode 100644 index 0000000..552ed56 --- /dev/null +++ b/.config/kando/menu-themes/neon-lights-color/assets/ring-mask.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/.config/kando/menu-themes/neon-lights-color/preview.jpg b/.config/kando/menu-themes/neon-lights-color/preview.jpg new file mode 100644 index 0000000..fc62888 Binary files /dev/null and b/.config/kando/menu-themes/neon-lights-color/preview.jpg differ diff --git a/.config/kando/menu-themes/neon-lights-color/theme.css b/.config/kando/menu-themes/neon-lights-color/theme.css new file mode 100644 index 0000000..5859cc7 --- /dev/null +++ b/.config/kando/menu-themes/neon-lights-color/theme.css @@ -0,0 +1,489 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-FileCopyrightText: 2025 Rena and LCG */ +/* SPDX-License-Identifier: CC0-1.0 */ + +/* === 🎨 Neon Lights Enhanced Color Theme - Optimized v3.0 === */ +/* === 📊 Configuration Options: 31 → 21 options (32% reduction) === */ + +@keyframes rotate { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +@keyframes neon-pulse { + 0%, 100% { opacity: 0.6; filter: brightness(1) saturate(1); } + 50% { opacity: 1; filter: brightness(1.3) saturate(1.5); } +} + +@keyframes neon-hover-pulse { + 0%, 100% { opacity: 0.8; transform: translate(-50%, -50%) scale(1.0); } + 50% { opacity: 1; transform: translate(-50%, -50%) scale(1.2); } +} + +.menu-node { + --child-distance: 100px; + --grandchild-distance: 16px; + --grandchild-size: 15px; + --center-size: 100px; + --child-size: 50px; + --connector-width: 5px; + --menu-transition: all 250ms cubic-bezier(0.775, 1.325, 0.535, 1); + --opacity-transition: opacity 250ms ease; + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + &.child { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + &.active:has(>.hovered)>.child { + transform: scale(calc(1.5 - pow(var(--angle-diff) / 180, 0.25) * 0.5)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + + &.hovered { + transform: scale(1.5) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + &.grandchild { + opacity: 0 !important; + pointer-events: none !important; + transform: translate(calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y))); + } + } + + /* === 🎯 Icon System === */ + .icon-container { + opacity: 0; + transition: var(--opacity-transition); + color: var(--icon-color) !important; + filter: drop-shadow(0 0 8px var(--icon-glow)); + } + + &.active>.icon-layer>.icon-container { + opacity: 0 !important; + } + + &.parent>.icon-layer>.icon-container, + &.child>.icon-layer>.icon-container { + opacity: 1 !important; + color: var(--icon-color) !important; + filter: drop-shadow(0 0 8px var(--icon-glow)) !important; + animation: none !important; + } + + &.child.hovered>.icon-layer>.icon-container, + &.parent.hovered>.icon-layer>.icon-container { + color: var(--icon-hover) !important; + filter: + drop-shadow(0 0 12px var(--icon-hover-glow)) + drop-shadow(0 0 20px var(--icon-hover-glow)) + drop-shadow(0 0 30px var(--icon-hover-glow)) !important; + animation: neon-pulse 2s ease-in-out infinite !important; + } + + .icon-glow-layer { + position: absolute; + transition: var(--menu-transition); + opacity: 0; + z-index: 1; + + .icon-container { + color: var(--icon-glow) !important; + filter: blur(15px) brightness(2); + opacity: 1; + } + } + + /* === 🌈 Neon Glow Ring System === */ + .outer-glow-ring { + position: absolute; + opacity: 0; + border-radius: 50%; + background: transparent; + pointer-events: none; + z-index: 2; + transition: var(--menu-transition); + + &::before { + content: ''; + position: absolute; + top: 50%; left: 50%; + width: calc(100% + 16px); + height: calc(100% + 16px); + transform: translate(-50%, -50%); + border-radius: 50%; + border: 3px solid var(--primary-glow); + box-shadow: + 0 0 15px var(--primary-glow), + 0 0 25px var(--primary-glow), + inset 0 0 10px var(--primary-glow); + animation: neon-pulse 3s ease-in-out infinite; + } + } + + .inner-glow-ring { + position: absolute; + opacity: 0; + border-radius: 50%; + background: transparent; + pointer-events: none; + z-index: 3; + transition: var(--menu-transition); + + &::before { + content: ''; + position: absolute; + top: 50%; left: 50%; + width: calc(100% + 8px); + height: calc(100% + 8px); + transform: translate(-50%, -50%); + border-radius: 50%; + border: 2px solid var(--secondary-glow); + box-shadow: + 0 0 12px var(--secondary-glow), + 0 0 20px var(--secondary-glow), + inset 0 0 8px var(--secondary-glow); + animation: neon-pulse 2.5s ease-in-out infinite; + } + } + + /* Layer positioning */ + .arrow-layer, .outer-glow-ring, .inner-glow-ring, .ring-slow-layer, .ring-slow-layer::before, + .ring-fast-layer, .ring-fast-layer::before, .icon-glow-layer, .icon-layer { + position: absolute; + transition: var(--menu-transition); + } + + /* Active menu item sizing */ + &.active>.arrow-layer, &.active>.outer-glow-ring, &.active>.inner-glow-ring, + &.active>.ring-slow-layer, &.active>.ring-fast-layer, &.active>.icon-glow-layer, + &.active>.icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + } + + &.active>.ring-slow-layer::before, &.active>.ring-fast-layer::before { + top: 0; left: 0; + width: var(--center-size); + height: var(--center-size); + } + + /* === 🎯 Icon Layer === */ + .icon-layer { + border-radius: 50%; + background: transparent !important; + border: none !important; + opacity: 1; + z-index: 10; + } + + .arrow-layer { + background: url(assets/arrow.svg) no-repeat center; + transform: scale(1.0) rotate(var(--hovered-child-angle)); + opacity: 0; + filter: + drop-shadow(0 0 10px var(--accent-glow)) + drop-shadow(0 0 20px var(--accent-glow)); + } + + &:has(.dragged)>.arrow-layer { + transform: scale(1.6) rotate(var(--pointer-angle)); + transition: none; + filter: + drop-shadow(0 0 15px var(--active-glow)) + drop-shadow(0 0 25px var(--active-glow)); + } + + /* === 🌟 Rotating Ring System === */ + .ring-slow-layer { + animation: rotate 10s linear infinite; + opacity: 0; + border-radius: 50%; + overflow: hidden; + clip-path: circle(75% at 50% 50%); + + &::before { + content: ''; + width: 100%; + height: 100%; + mask-image: url(assets/ring-mask.svg); + -webkit-mask-image: url(assets/ring-mask.svg); + mask-size: 100% 100%; + -webkit-mask-size: 100% 100%; + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-position: center; + -webkit-mask-position: center; + background-image: radial-gradient(circle, + transparent 20%, + color-mix(in srgb, var(--ring-slow) 10%, transparent) 27%, + color-mix(in srgb, var(--ring-slow) 20%, transparent) 30%, + color-mix(in srgb, var(--ring-slow) 60%, transparent) 33%, + var(--ring-slow) 34%, + var(--ring-slow) 36%, + color-mix(in srgb, var(--ring-slow) 60%, transparent) 37%, + color-mix(in srgb, var(--ring-slow) 20%, transparent) 40%, + color-mix(in srgb, var(--ring-slow) 10%, transparent) 47%, + transparent 60%); + filter: drop-shadow(0 0 10px var(--ring-slow)); + } + } + + .ring-fast-layer { + animation: rotate 2s linear infinite; + opacity: 0; + border-radius: 50%; + overflow: hidden; + clip-path: circle(75% at 50% 50%); + background-image: radial-gradient(circle, var(--backdrop-shadow) 60%, transparent 70%); + + &::before { + content: ''; + width: 100%; + height: 100%; + mask-image: url(assets/ring-mask.svg); + -webkit-mask-image: url(assets/ring-mask.svg); + mask-size: 100% 100%; + -webkit-mask-size: 100% 100%; + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + mask-position: center; + -webkit-mask-position: center; + background-image: radial-gradient(circle, + transparent 20%, + color-mix(in srgb, var(--ring-fast) 10%, transparent) 27%, + color-mix(in srgb, var(--ring-fast) 20%, transparent) 30%, + color-mix(in srgb, var(--ring-fast) 60%, transparent) 33%, + var(--ring-inner) 34%, + var(--ring-inner) 36%, + color-mix(in srgb, var(--ring-fast) 60%, transparent) 37%, + color-mix(in srgb, var(--ring-fast) 20%, transparent) 40%, + color-mix(in srgb, var(--ring-fast) 10%, transparent) 47%, + transparent 60%); + filter: + drop-shadow(0 0 15px var(--ring-fast)) + drop-shadow(0 0 25px var(--ring-fast)); + } + } + + /* === ✨ Glow Ring Display Logic === */ + &.active>.outer-glow-ring, &.active>.inner-glow-ring, + &.child.hovered>.outer-glow-ring, &.child.hovered>.inner-glow-ring, + &.parent.hovered>.outer-glow-ring, &.parent.hovered>.inner-glow-ring { + opacity: 1; + } + + &.child>.icon-glow-layer, &.parent>.icon-glow-layer { opacity: 0.6; } + &.child.hovered>.icon-glow-layer, &.parent.hovered>.icon-glow-layer { opacity: 1; } + + /* === ✨ Special State Effects === */ + &.active:has(>.hovered)>.ring-fast-layer { + opacity: 1; + animation: rotate 1s linear infinite, neon-pulse 3s ease-in-out infinite; + + &::before { + transform: scale(2.0); + filter: + drop-shadow(0 0 20px var(--hover-glow)) + drop-shadow(0 0 30px var(--hover-glow)); + } + } + + &.parent>.active:not(:has(.hovered))>.ring-slow-layer, + &.active.hovered>.ring-slow-layer { + opacity: 1; + &::before { + transform: scale(1.0); + filter: + drop-shadow(0 0 12px var(--primary-glow)) + drop-shadow(0 0 20px var(--primary-glow)); + } + } + + &.active:has(.hovered)>.arrow-layer { + opacity: 1; + transform: scale(1.6) rotate(var(--hovered-child-angle)); + filter: + drop-shadow(0 0 15px var(--accent-glow)) + drop-shadow(0 0 25px var(--accent-glow)); + } + + &.active:has(.hovered.dragged)>.arrow-layer { + transform: scale(1.6) rotate(var(--pointer-angle)); + filter: + drop-shadow(0 0 20px var(--active-glow)) + drop-shadow(0 0 30px var(--active-glow)) + drop-shadow(0 0 40px var(--active-glow)); + } + + /* === 🎭 Enhanced Hover Effects === */ + &.child.hovered>.icon-layer, &.parent.hovered>.icon-layer { + transform: scale(1.5) !important; + z-index: 15 !important; + background: transparent !important; + border: none !important; + } + + &.active.hovered>.icon-layer { + transform: scale(1.1) !important; + background: transparent !important; + border: none !important; + } + + &.child.hovered>.outer-glow-ring::before, &.parent.hovered>.outer-glow-ring::before { + border-width: 4px !important; + width: calc(150% + 24px) !important; + height: calc(150% + 24px) !important; + animation: neon-hover-pulse 1.5s ease-in-out infinite !important; + box-shadow: + 0 0 20px var(--hover-glow), + 0 0 30px var(--hover-glow), + inset 0 0 15px var(--hover-glow) !important; + } + + &.child.hovered>.inner-glow-ring::before, &.parent.hovered>.inner-glow-ring::before { + border-width: 3px !important; + width: calc(150% + 12px) !important; + height: calc(150% + 12px) !important; + animation: neon-hover-pulse 1.3s ease-in-out infinite !important; + box-shadow: + 0 0 15px var(--secondary-glow), + 0 0 25px var(--secondary-glow), + inset 0 0 12px var(--secondary-glow) !important; + } + + &.parent.hovered.clicked>.icon-layer, &.child.hovered.clicked>.icon-layer { + transform: scale(0.8); + } + + &.parent>.icon-layer, &.parent>.icon-glow-layer, &.parent>.outer-glow-ring, &.parent>.inner-glow-ring, + &.child>.icon-layer, &.child>.icon-glow-layer, &.child>.outer-glow-ring, &.child>.inner-glow-ring { + top: calc(-1 * var(--child-size) / 2); + left: calc(-1 * var(--child-size) / 2); + width: var(--child-size); + height: var(--child-size); + } + + &.grandchild>.icon-layer { + top: calc(-1 * var(--grandchild-size) / 2); + left: calc(-1 * var(--grandchild-size) / 2); + width: var(--grandchild-size); + height: var(--grandchild-size); + opacity: 0; + } + + &.dragged { transition: none; } + + /* === ⚡ Connector System === */ + .connector { + transition: var(--menu-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + filter: + drop-shadow(0 0 8px var(--connector-glow)) + drop-shadow(0 0 15px var(--connector-glow)); + } + + &:has(.dragged)>.connector, &:has(.clicked)>.connector { + transition: none; + filter: + drop-shadow(0 0 12px var(--active-glow)) + drop-shadow(0 0 20px var(--active-glow)) + drop-shadow(0 0 30px var(--active-glow)); + } + + &:has(.hovered)>.connector { + filter: + drop-shadow(0 0 10px var(--connector-hover-glow)) + drop-shadow(0 0 18px var(--connector-hover-glow)); + animation: neon-pulse 2s ease-in-out infinite; + } + + .connector { + background: linear-gradient(to right, + var(--connector-edge) 80px, + var(--connector-center) 50%, + var(--connector-edge) calc(100% - 80px)); + + &::before { + content: ''; + position: absolute; + top: -1px; left: 0; right: 0; + height: calc(var(--connector-width) + 2px); + background: linear-gradient(to right, + transparent 70px, + var(--connector-color) 45%, + var(--connector-color) 55%, + transparent calc(100% - 70px)); + filter: blur(2px); + z-index: -1; + } + } +} + +/* === 🔤 Center Text Neon Effects === */ +.center-text { + font-size: 22px !important; + line-height: 26px !important; + font-family: 'Arial', 'Microsoft YaHei', 'Segoe UI', sans-serif; + font-weight: 600; + letter-spacing: 0.3px; + max-width: 160px !important; + min-width: 120px !important; + max-height: 60px !important; + word-wrap: break-word !important; + word-break: break-all !important; + white-space: normal !important; + text-align: center !important; + overflow: hidden !important; + text-overflow: ellipsis !important; + display: flex !important; + align-items: center !important; + justify-content: center !important; + padding: 6px 8px !important; + will-change: color, text-shadow !important; + backface-visibility: hidden !important; + z-index: 20; + color: var(--text-color) !important; + transition: var(--opacity-transition); + text-shadow: + 0 0 5px var(--text-glow), + 0 0 10px var(--text-glow), + 0 0 15px var(--text-glow), + 0 0 20px var(--text-glow); + filter: drop-shadow(0 0 8px var(--text-glow)); +} + +/* === 🌃 Background Canvas Effects === */ +#kando-menu { + background-color: var(--canvas-color) !important; + backdrop-filter: blur(20px); + + &::before { + content: ''; + position: absolute; + top: 0; left: 0; right: 0; bottom: 0; + background: + radial-gradient(circle at 20% 30%, var(--primary-glow) 0%, transparent 50%), + radial-gradient(circle at 80% 70%, var(--secondary-glow) 0%, transparent 50%), + radial-gradient(circle at 50% 50%, var(--accent-glow) 0%, transparent 70%); + opacity: 0.03; + mix-blend-mode: screen; + animation: neon-pulse 8s ease-in-out infinite; + pointer-events: none; + z-index: -1; + } +} diff --git a/.config/kando/menu-themes/neon-lights-color/theme.json5 b/.config/kando/menu-themes/neon-lights-color/theme.json5 new file mode 100644 index 0000000..46536a7 --- /dev/null +++ b/.config/kando/menu-themes/neon-lights-color/theme.json5 @@ -0,0 +1,91 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: 2025 Rena and LCG +// SPDX-License-Identifier: CC0-1.0 + +{ + "name": "neon-lights-color", + "author": "Rena and LCG", + "license": "CC0-1.0", + "themeVersion": "3.0", + "engineVersion": 1, + "maxMenuRadius": 160, + "centerTextWrapWidth": 160, + "drawChildrenBelow": true, + "colors": { + // === 🎯 Icon System (5 options) === + "icon-color": "rgba(255, 255, 255, 0.95)", // Base icon color + "icon-glow": "rgb(255, 140, 210)", // Icon glow effect + "icon-hover": "rgba(255, 255, 140, 1.0)", // Icon color on hover + "icon-hover-glow": "rgb(255, 255, 140)", // Icon glow on hover + + // === 🔤 Text System (2 options) === + "text-color": "rgba(255, 255, 255, 0.95)", // Center text color + "text-glow": "rgb(255, 140, 210)", // Text glow effect + + // === 🌈 Ring Glow System (3 options) === + "primary-glow": "rgb(255, 140, 210)", // Primary neon ring color + "secondary-glow": "rgb(140, 200, 255)", // Secondary neon ring color + "accent-glow": "rgb(255, 255, 140)", // Accent glow (arrows, etc.) + + // === 🌟 Rotating Ring System (3 options) === + "ring-inner": "rgb(255, 255, 255)", // Rotating ring inner color + "ring-slow": "rgb(120, 120, 120)", // Slow rotating ring color + "ring-fast": "rgb(255, 140, 210)", // Fast rotating ring color + + // === ⚡ Connector System (5 options) === + "connector-color": "rgba(255, 140, 210, 0.4)", // Connector base color (track) + "connector-center": "rgba(255, 200, 255, 0.75)", // Connector center color + "connector-edge": "rgba(255, 140, 210, 0.3)", // Connector edge color + "connector-glow": "rgba(255, 140, 210, 0.5)", // Connector glow effect + "connector-hover-glow": "rgb(255, 255, 140)", // Connector glow on hover + + // === 🎭 Interaction State System (2 options) === + "hover-glow": "rgb(255, 255, 140)", // Hover glow effect + "active-glow": "rgb(140, 255, 140)", // Active glow effect + + // === 🌃 Background System (2 options) === + "canvas-color": "rgba(10, 10, 20, 0.8)", // Main background color + "backdrop-shadow": "rgba(0, 0, 0, 0.6)" // Background shadow effect + }, + "layers": [ + { + "type": "canvas", + "color": "#0a0a14cc" + }, + { + "class": "inner-glow-ring", + "content": "none" + }, + { + "class": "outer-glow-ring", + "content": "none" + }, + { + "class": "icon-layer", + "content": "icon" + }, + { + "class": "icon-glow-layer", + "content": "icon" + }, + { + "class": "ring-fast-layer", + "content": "none" + }, + { + "class": "ring-slow-layer", + "content": "none" + }, + { + "class": "arrow-layer", + "content": "none" + } + ] +} diff --git a/.config/kando/menu-themes/nether-labels/PlusJakartaSans-Medium.ttf b/.config/kando/menu-themes/nether-labels/PlusJakartaSans-Medium.ttf new file mode 100644 index 0000000..1e58066 Binary files /dev/null and b/.config/kando/menu-themes/nether-labels/PlusJakartaSans-Medium.ttf differ diff --git a/.config/kando/menu-themes/nether-labels/README.md b/.config/kando/menu-themes/nether-labels/README.md new file mode 100644 index 0000000..585518b --- /dev/null +++ b/.config/kando/menu-themes/nether-labels/README.md @@ -0,0 +1,13 @@ + + +With its dark and classy colors, this theme features labels on your items and submenus and a sleek overall appearance. If however, your style is more bright or flashy, you can fully customize this theme with its 10 colors options. + + +

+ +

+ +This theme is a Modified version of the "Rainbow Labels" theme made by Simon Schneegans. diff --git a/.config/kando/menu-themes/nether-labels/REUSE.toml b/.config/kando/menu-themes/nether-labels/REUSE.toml new file mode 100644 index 0000000..1954c04 --- /dev/null +++ b/.config/kando/menu-themes/nether-labels/REUSE.toml @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: Elfi Ox +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["*.jpg", "*.png"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Elfi Ox " +SPDX-License-Identifier = "CC0-1.0" + + +# Font from: https://fonts.google.com/specimen/Plus+Jakarta+Sans +[[annotations]] +path = ["PlusJakartaSans-Medium.ttf"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Copyright 2020 The Plus Jakarta Sans Project Authors (https://github.com/tokotype/PlusJakartaSans)" +SPDX-License-Identifier = "OFL-1.1" diff --git a/.config/kando/menu-themes/nether-labels/banner.png b/.config/kando/menu-themes/nether-labels/banner.png new file mode 100644 index 0000000..3e7d20e Binary files /dev/null and b/.config/kando/menu-themes/nether-labels/banner.png differ diff --git a/.config/kando/menu-themes/nether-labels/preview.jpg b/.config/kando/menu-themes/nether-labels/preview.jpg new file mode 100644 index 0000000..cf0232e Binary files /dev/null and b/.config/kando/menu-themes/nether-labels/preview.jpg differ diff --git a/.config/kando/menu-themes/nether-labels/theme.css b/.config/kando/menu-themes/nether-labels/theme.css new file mode 100644 index 0000000..ec15f2a --- /dev/null +++ b/.config/kando/menu-themes/nether-labels/theme.css @@ -0,0 +1,237 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-FileCopyrightText: Elfi Ox */ +/* SPDX-License-Identifier: CC0-1.0 */ + +@font-face { + font-family: 'PlusJakartaSans-Medium'; + src: url('PlusJakartaSans-Medium.ttf') format('opentype'); +} + +.menu-node { + --child-distance: 80px; + --grandchild-distance: 16px; + --grandchild-size: 13px; + --center-size: 80px; + --icon-size: 40px; + --connector-width: 10px; + --menu-transition: transform 175ms ease, left 200ms ease, top 200ms ease, width 200ms ease, height 200ms ease, margin 180ms ease, padding 180ms ease, opacity 200ms ease; + --connector-transition: width 100ms ease, opacity 200ms ease; + --color-transition: background-color 200ms ease, border 60ms ease, color 100ms ease, box-shadow 100ms ease, outline 100ms ease; + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child { + transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))); + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate(calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y))); + } + + /* If there is a hovered child node, we scale all children up a bit to create a cool + zoom effect. The hovered child itself is scaled up even more. */ + &.active:has(.hovered)>.child { + transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))) ; + z-index: 1 !important; + + &.hovered:not(.type-submenu) { + z-index: 10 !important; + transform: scale(1.15) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)), + calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))) !important; + } + } + + /* Theme Layers --------------------------------------------------------------------- */ + + /* We hide all icons by default. They will be shown further down in this file for the + the child items. */ + .icon-container { + position: relative; + opacity: 0; + width: 100%; + clip-path: circle(45% at 50% 50%); + transition: var(--menu-transition); + color: var(--accent-color); + } + + &.hovered:not(.parent):not(.level-0)>.icon-layer { + padding: 2px; + } + + .label-layer, + .icon-layer { + position: absolute; + transition: var(--menu-transition); + } + + .label-layer { + font-family: PlusJakartaSans-Medium; + opacity: 0; + background-color: var(--label-background-color); + color: var(--text-color); + border: 2px solid var(--border-color); + white-space: nowrap; + height: var(--icon-size); + border-radius: var(--icon-size); + top: calc(-1 * var(--icon-size) / 2); + padding: calc(var(--icon-size) / 4.6) calc(var(--icon-size) / 3); + font-size: calc(var(--icon-size) / 3); + transition: var(--color-transition); + box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); + } + + &.hovered>.label-layer { + color: var(--hover-color); + border-color: var(--hover-color); + box-shadow: 0 0 8px var(--hover-color) inset; + } + + &.right>.label-layer { + left: calc(-1 * var(--icon-size)/2); + padding-left: calc(var(--icon-size) + 5px); + transition: var(--menu-transition); + } + + &.left>.label-layer { + right: calc(-1 * var(--icon-size)/2); + padding-right: calc(var(--icon-size) + 5px); + transition: var(--menu-transition); + } + + &.top>.label-layer { + bottom: calc(0.4 * var(--icon-size)); + top: inherit; + transform: translateX(-50%); + margin-bottom: -5px; + transition: var(--menu-transition); + } + &.hovered.top>.label-layer { + margin-bottom: 3px; + } + + &.bottom>.label-layer { + top: calc(0.4 * var(--icon-size)); + transform: translateX(-50%); + margin-top: -5px; + transition: var(--menu-transition); + } + &.hovered.bottom>.label-layer { + margin-top: 3px; + } + + .icon-layer { + top: calc(-0.46 * var(--icon-size)); + left: calc(-0.46 * var(--icon-size)); + width: calc(0.92 * var(--icon-size)); + height: calc(0.92 * var(--icon-size)); + border-radius: 50%; + background-color: var(--circle-color); + z-index: 1; + } + + &.active>.icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); + transition: var(--menu-transition), var(--color-transition); + } + + &.grandchild>.icon-layer { + top: calc(-1 * var(--grandchild-size) / 2); + left: calc(-1 * var(--grandchild-size) / 2); + width: var(--grandchild-size); + height: var(--grandchild-size); + box-shadow: none; + background-color: var(--submenu-items-color); + transition: var(--color-transition), var(--menu-transition); + } + + &.hovered>.grandchild>.icon-layer { + background-color: var(--submenu-items-hover-color); + top: calc(-0.55 * var(--grandchild-size)); + left: calc(-0.55 * var(--grandchild-size)); + width: calc(1.1 * var(--grandchild-size)); + height: calc(1.1 * var(--grandchild-size)); + } + + &.hovered.type-submenu:has(>.label-layer):not(.level-0)>.icon-layer { + outline: 1.8px solid var(--submenu-items-hover-color); + transition: var(--color-transition); + } + + &.type-submenu.parent:not(.active)>.grandchild>.icon-layer { + background-color: var(--shrinked-outline-color); + top: calc(-0.55 * var(--grandchild-size)); + left: calc(-0.55 * var(--grandchild-size)); + width: calc(1.1 * var(--grandchild-size)); + height: calc(1.1 * var(--grandchild-size)); + } + + &.type-submenu.parent:not(.active)>.icon-layer { + outline: 1.8px solid var(--shrinked-outline-color); + transition: var(--color-transition); + } + + /* The active menu item is the center of the menu. */ + &.child>.label-layer { + transition: var(--menu-transition); + opacity: 1; + } + + /* Show the icons of the parent and child items. */ + &.active>.icon-layer>.icon-container, + &.parent>.icon-layer>.icon-container, + &.child>.icon-layer>.icon-container { + transition: var(--menu-transition); + opacity: 1; + } + + /* We disable any transition for dragged submenu items. */ + &.dragged.type-submenu { + transition: none; + } + + /* Connectors ----------------------------------------------------------------------- */ + + .connector { + transition: var(--connector-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + background-color: var(--connector-color); + opacity: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + } + + &:has(>.dragged)>.connector, + &:has(>.clicked)>.connector { + transition: none; + } + + &:has(>.parent)>.connector, + &:has(>.active.type-submenu)>.connector, + &:has(>.dragged.type-submenu)>.connector { + opacity: 1; + } +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + display: none; +} \ No newline at end of file diff --git a/.config/kando/menu-themes/nether-labels/theme.json5 b/.config/kando/menu-themes/nether-labels/theme.json5 new file mode 100644 index 0000000..9eb6df0 --- /dev/null +++ b/.config/kando/menu-themes/nether-labels/theme.json5 @@ -0,0 +1,50 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: Elfi Ox */ +// SPDX-License-Identifier: CC0-1.0 + +{ + name: 'Nether Labels', + author: 'Simon Schneegans, Elfi Ox', + license: 'CC0-1.0', + themeVersion: '1.0', + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // This theme draws child items below their parent items. + drawChildrenBelow: false, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + 'accent-color': '#D3ADFF', + 'hover-color': '#D3ADFF', + 'connector-color': '#D3ADFF', + 'circle-color' : '#131219', + 'border-color': '#131219', + 'label-background-color': '#0A0A0A', + 'text-color' : '#FFFFFF', + 'shrinked-outline-color' : '#D3ADFF', + 'submenu-items-hover-color' : '#D3ADFF', + 'submenu-items-color' : '#131219', + }, + + // This theme uses two layers, one for the icon and the background and one for the arrow + // which points to the hovered item. + layers: [ + { class: 'icon-layer', content: 'icon' }, + { class: 'label-layer', content: 'name' }, + ], +} \ No newline at end of file diff --git a/.config/kando/menu-themes/nord/REUSE.toml b/.config/kando/menu-themes/nord/REUSE.toml new file mode 100644 index 0000000..0f48cbe --- /dev/null +++ b/.config/kando/menu-themes/nord/REUSE.toml @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: Elfi Ox +# SPDX-License-Identifier: CC0-1.0 + +version = 1 + +[[annotations]] +path = ["preview.jpg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Ba Nyar Naing " +SPDX-License-Identifier = "CC0-1.0" diff --git a/.config/kando/menu-themes/nord/preview.jpg b/.config/kando/menu-themes/nord/preview.jpg new file mode 100644 index 0000000..df4c7f9 Binary files /dev/null and b/.config/kando/menu-themes/nord/preview.jpg differ diff --git a/.config/kando/menu-themes/nord/theme.css b/.config/kando/menu-themes/nord/theme.css new file mode 100644 index 0000000..9772050 --- /dev/null +++ b/.config/kando/menu-themes/nord/theme.css @@ -0,0 +1,191 @@ +/*//////////////////////////////////////////////////////////////////////////////////////*/ +/* _ _ ____ _ _ ___ ____ */ +/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */ +/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */ +/* */ +/*//////////////////////////////////////////////////////////////////////////////////////*/ + +/* SPDX-FileCopyrightText: Simon Schneegans */ +/* SPDX-FileCopyrightText: Elfi Ox */ +/* SPDX-License-Identifier: CC0-1.0 */ + +.menu-node { + --child-distance: 80px; + --grandchild-distance: 16px; + --center-size: 80px; + --icon-size: 40px; + --connector-width: 10px; + --menu-transition: transform 200ms ease, opacity 200ms ease; + --connector-transition: width 200ms ease, opacity 200ms ease; + + transition: var(--menu-transition); + + /* Positioning ---------------------------------------------------------------------- */ + + /* Child items are positioned around the active node. */ + &.child.type-submenu { + transform: translate( + calc( + max(var(--child-distance), 10px * var(--sibling-count)) * + var(--dir-x) + ), + calc( + max(var(--child-distance), 10px * var(--sibling-count)) * + var(--dir-y) + ) + ); + } + + &.child:not(.type-submenu) { + transform: translate( + calc( + max(var(--child-distance), 10px * var(--sibling-count)) * + var(--dir-x) + ), + calc( + max(var(--child-distance), 10px * var(--sibling-count)) * + var(--dir-y) + ) + ) !important; + } + + /* Grandchild items are positioned around the child items. */ + &.grandchild { + transform: translate( + calc(var(--grandchild-distance) * var(--dir-x)), + calc(var(--grandchild-distance) * var(--dir-y)) + ); + } + + /* Theme Layers --------------------------------------------------------------------- */ + + /* We hide all icons by default. They will be shown further down in this file for the + the child items. */ + .icon-container { + position: relative; + top: 0; + left: 0; + width: 100%; + opacity: 0; + clip-path: circle(45% at 50% 50%); + transition: var(--menu-transition); + color: var(--accent-color); + } + + .label-layer, + .icon-layer { + position: absolute; + transition: var(--menu-transition); + } + + .label-layer { + opacity: 0; + background-color: var(--label-background-color); + color: var(--text-color); + border: 2px solid var(--border-color); + white-space: nowrap; + height: var(--icon-size); + border-radius: var(--icon-size); + top: calc(-1 * var(--icon-size) / 2); + padding: calc(var(--icon-size) / 5) calc(var(--icon-size) / 3); + font-size: calc(var(--icon-size) / 2.7); + } + + &.hovered > .label-layer { + color: var(--hover-color); + border-color: var(--hover-color); + box-shadow: 0 0 6px var(--hover-color) inset; + } + + &.right > .label-layer { + left: calc(-1 * var(--icon-size) / 2); + padding-left: calc(var(--icon-size) + 5px); + } + + &.left > .label-layer { + right: calc(-1 * var(--icon-size) / 2); + padding-right: calc(var(--icon-size) + 5px); + } + + &.top > .label-layer { + bottom: calc(0.4 * var(--icon-size)); + top: inherit; + transform: translateX(-50%); + } + + &.bottom > .label-layer { + top: calc(0.4 * var(--icon-size)); + transform: translateX(-50%); + } + + .icon-layer { + top: calc(-1 * var(--icon-size) / 2); + left: calc(-1 * var(--icon-size) / 2); + width: var(--icon-size); + height: var(--icon-size); + border-radius: 50%; + box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); + background-color: var(--circle-color); + z-index: 1; + } + + &.active > .icon-layer { + top: calc(-1 * var(--center-size) / 2); + left: calc(-1 * var(--center-size) / 2); + width: var(--center-size); + height: var(--center-size); + } + + &.grandchild > .icon-layer { + top: calc(-1 * var(--grandchild-size) / 2); + left: calc(-1 * var(--grandchild-size) / 2); + width: var(--grandchild-size); + height: var(--grandchild-size); + box-shadow: none; + } + + /* The active menu item is the center of the menu. */ + &.child > .label-layer { + opacity: 1; + } + + /* Show the icons of the parent and child items. */ + &.active > .icon-layer > .icon-container, + &.parent > .icon-layer > .icon-container, + &.child > .icon-layer > .icon-container { + opacity: 1; + } + + /* We disable any transition for dragged submenu items. */ + &.dragged.type-submenu { + transition: none; + } + + /* Connectors ----------------------------------------------------------------------- */ + + .connector { + transition: var(--connector-transition); + height: var(--connector-width); + top: calc(-1 * var(--connector-width) / 2); + background-color: var(--connector-color); + opacity: 0; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); + } + + &:has(> .dragged) > .connector, + &:has(> .clicked) > .connector { + transition: none; + } + + &:has(> .parent) > .connector, + &:has(> .active.type-submenu) > .connector, + &:has(> .dragged.type-submenu) > .connector { + opacity: 1; + } +} + +/* Center Text ------------------------------------------------------------------------ */ + +.center-text { + display: none; +} diff --git a/.config/kando/menu-themes/nord/theme.json5 b/.config/kando/menu-themes/nord/theme.json5 new file mode 100644 index 0000000..2176f9d --- /dev/null +++ b/.config/kando/menu-themes/nord/theme.json5 @@ -0,0 +1,48 @@ +////////////////////////////////////////////////////////////////////////////////////////// +// _ _ ____ _ _ ___ ____ // +// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform // +// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando // +// // +////////////////////////////////////////////////////////////////////////////////////////// + +// SPDX-FileCopyrightText: Simon Schneegans +// SPDX-FileCopyrightText: Elfi Ox */ +// SPDX-FileCopyrightText: Ba Nyar Naing */ +// SPDX-License-Identifier: CC0-1.0 + +{ + name: 'Nord', + author: 'Simon Schneegans, Elfi Ox, Ba Nyar Naing', + license: 'CC0-1.0', + themeVersion: '1.0', + + // This theme was created for Kando's theme engine version 1. Kando will use this to + // check if the theme is compatible with the current version of Kando. + engineVersion: 1, + + // When a menu is opened too close to a screen's edge, it is moved away from the edge + // by this amount of pixels. + maxMenuRadius: 160, + + // This theme draws child items below their parent items. + drawChildrenBelow: false, + + // These colors can be configured by the user and are vailable in the CSS file as CSS + // variables. The default values are used if the user does not provide any values. + colors: { + 'accent-color': '#D8DEE9', + 'hover-color': '#D8DEE9', + 'connector-color': '#3B4252', + 'circle-color' : '#4C566A', + 'border-color': '#3B4252', + 'label-background-color': '#434C5E', + 'text-color' : '#ECEFF4' + }, + + // This theme uses two layers, one for the icon and the background and one for the arrow + // which points to the hovered item. + layers: [ + { class: 'icon-layer', content: 'icon' }, + { class: 'label-layer', content: 'name' }, + ], +} diff --git a/.config/kando/menus.json b/.config/kando/menus.json new file mode 100644 index 0000000..7bb46e8 --- /dev/null +++ b/.config/kando/menus.json @@ -0,0 +1,734 @@ +{ + "menus": [ + { + "shortcut": "Control+Space", + "shortcutID": "example-menu", + "centered": false, + "root": { + "type": "submenu", + "name": "Example Menu", + "icon": "award_star", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "submenu", + "name": "Apps", + "icon": "apps", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "command", + "data": { + "command": "x-www-browser" + }, + "name": "Web Browser", + "icon": "globe", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-email" + }, + "name": "E-Mail", + "icon": "mail", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "gimp" + }, + "name": "GIMP", + "icon": "gimp", + "iconTheme": "simple-icons" + }, + { + "type": "command", + "data": { + "command": "xdg-open ~" + }, + "name": "File Browser", + "icon": "folder_shared", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "x-terminal-emulator" + }, + "name": "Terminal", + "icon": "terminal", + "iconTheme": "material-symbols-rounded" + } + ] + }, + { + "type": "submenu", + "name": "Web Links", + "icon": "public", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "uri", + "data": { + "uri": "https://www.google.com" + }, + "name": "Google", + "icon": "google", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://github.com/kando-menu/kando" + }, + "name": "Kando on GitHub", + "icon": "github", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://ko-fi.com/schneegans" + }, + "name": "Kando on Ko-fi", + "icon": "kofi", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://www.youtube.com/@simonschneegans" + }, + "name": "Kando on YouTube", + "icon": "youtube", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://discord.gg/hZwbVSDkhy" + }, + "name": "Kando on Discord", + "icon": "discord", + "iconTheme": "simple-icons" + } + ] + }, + { + "type": "command", + "name": "Next Workspace", + "icon": "arrow_circle_right", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-down", + "detached": true, + "isolated": false, + "delayed": false + } + }, + { + "type": "submenu", + "name": "Clipboard", + "icon": "assignment", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "data": { + "hotkey": "ControlLeft+KeyV", + "delayed": true + }, + "name": "Paste", + "icon": "content_paste_go", + "iconTheme": "material-symbols-rounded", + "angle": 90 + }, + { + "type": "hotkey", + "data": { + "hotkey": "ControlLeft+KeyC", + "delayed": true + }, + "name": "Copy", + "icon": "content_copy", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "ControlLeft+KeyX", + "delayed": true + }, + "name": "Cut", + "icon": "cut", + "iconTheme": "material-symbols-rounded" + } + ] + }, + { + "type": "submenu", + "name": "Audio", + "icon": "play_circle", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "data": { + "hotkey": "MediaTrackNext", + "delayed": false + }, + "name": "Next Track", + "icon": "skip_next", + "iconTheme": "material-symbols-rounded", + "angle": 90 + }, + { + "type": "hotkey", + "data": { + "hotkey": "MediaPlayPause", + "delayed": false + }, + "name": "Play / Pause", + "icon": "play_pause", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "AudioVolumeMute", + "delayed": false + }, + "name": "Mute", + "icon": "music_off", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "MediaTrackPrevious", + "delayed": false + }, + "name": "Previous Track", + "icon": "skip_previous", + "iconTheme": "material-symbols-rounded", + "angle": 270 + } + ] + }, + { + "type": "submenu", + "name": "Windows", + "icon": "select_window", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "data": { + "hotkey": "MetaLeft+ArrowUp", + "delayed": true + }, + "name": "Toggle Maximize", + "icon": "open_in_full", + "iconTheme": "material-symbols-rounded", + "angle": 0 + }, + { + "type": "hotkey", + "data": { + "hotkey": "MetaLeft+ArrowRight", + "delayed": true + }, + "name": "Tile Right", + "icon": "text_select_jump_to_end", + "iconTheme": "material-symbols-rounded", + "angle": 90 + }, + { + "type": "hotkey", + "data": { + "hotkey": "AltLeft+F4", + "delayed": true + }, + "name": "Close Window", + "icon": "cancel_presentation", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "MetaLeft+ArrowLeft", + "delayed": true + }, + "name": "Tile Left", + "icon": "text_select_jump_to_beginning", + "iconTheme": "material-symbols-rounded", + "angle": 270 + } + ] + }, + { + "type": "command", + "name": "Previous Workspace", + "icon": "arrow_circle_left", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + } + }, + { + "type": "submenu", + "name": "Bookmarks", + "icon": "folder_special", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir DOWNLOAD)\"" + }, + "name": "Downloads", + "icon": "download", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir VIDEOS)\"" + }, + "name": "Videos", + "icon": "video_camera_front", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir PICTURES)\"" + }, + "name": "Pictures", + "icon": "imagesmode", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir DOCUMENTS)\"" + }, + "name": "Documents", + "icon": "text_ad", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir DESKTOP)\"" + }, + "name": "Desktop", + "icon": "desktop_windows", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open ~" + }, + "name": "Home", + "icon": "home", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir MUSIC)\"" + }, + "name": "Music", + "icon": "music_note", + "iconTheme": "material-symbols-rounded" + } + ] + } + ] + }, + "anchored": false, + "hoverMode": false, + "conditions": {} + }, + { + "shortcut": "", + "shortcutID": "default-menu", + "centered": false, + "anchored": false, + "hoverMode": false, + "tags": [], + "root": { + "type": "submenu", + "name": "Default Menu", + "icon": "nixos", + "iconTheme": "simple-icons-colored", + "children": [ + { + "type": "hotkey", + "name": "Toggle Float", + "icon": "float_landscape_2", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MetaLeft+ShiftLeft+KeyT", + "delayed": true + } + }, + { + "type": "command", + "name": "Up", + "icon": "arrow_circle_up", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 0 + }, + { + "type": "submenu", + "name": "Media", + "icon": "headphones", + "iconTheme": "material-symbols-rounded", + "data": {}, + "children": [ + { + "type": "hotkey", + "name": "Next", + "icon": "skip_next", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MediaTrackNext", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Play|Pause", + "icon": "play_pause", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MediaPlayPause", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Previous", + "icon": "skip_previous", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MediaTrackPrevious", + "delayed": true + } + } + ], + "angle": 90 + }, + { + "type": "command", + "name": "Down", + "icon": "arrow_circle_down", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-down", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 180 + } + ] + } + }, + { + "shortcut": "", + "shortcutID": "zen-browser", + "centered": false, + "anchored": false, + "hoverMode": false, + "tags": [], + "root": { + "type": "submenu", + "name": "Zen Browser", + "icon": "zenbrowser", + "iconTheme": "simple-icons-colored", + "children": [ + { + "type": "hotkey", + "name": "Split V", + "icon": "split_scene_up", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+AltLeft+KeyH", + "delayed": true + } + }, + { + "type": "command", + "name": "Up", + "icon": "arrow_circle_up", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 0 + }, + { + "type": "hotkey", + "name": "Unsplit", + "icon": "tab", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+AltLeft+KeyU", + "delayed": true + }, + "angle": 90 + }, + { + "type": "command", + "name": "Down", + "icon": "arrow_circle_down", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-down", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 180 + }, + { + "type": "hotkey", + "name": "Split H", + "icon": "split_scene_left", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+AltLeft+KeyV", + "delayed": true + } + } + ] + } + }, + { + "shortcut": "", + "shortcutID": "gimp-menu", + "centered": false, + "anchored": false, + "hoverMode": false, + "tags": [], + "root": { + "type": "submenu", + "name": "GIMP", + "icon": "gimp", + "iconTheme": "simple-icons-colored", + "children": [ + { + "type": "command", + "name": "Up", + "icon": "arrow_circle_up", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 0 + }, + { + "type": "submenu", + "name": "Layers", + "icon": "layers", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "name": "New Layer", + "icon": "add", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ShiftLeft+ControlLeft+KeyN", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Duplicate Layer", + "icon": "content_copy", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ShiftLeft+ControlLeft+KeyD", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Merge Down", + "icon": "merge_type", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+KeyE", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Merge Visible", + "icon": "layers_clear", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ShiftLeft+ControlLeft+KeyM", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "New from Visible", + "icon": "auto_fix_high", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ShiftLeft+ControlLeft+AltLeft+KeyN", + "delayed": true + } + } + ] + }, + { + "type": "submenu", + "name": "Tools", + "icon": "brush", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "name": "Paintbrush", + "icon": "brush", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyP", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Eraser", + "icon": "cleaning_services", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ShiftLeft+KeyE", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Move", + "icon": "open_with", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyM", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Rectangle Select", + "icon": "rectangle", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyR", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Ellipse Select", + "icon": "lens", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyE", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Color Picker", + "icon": "colorize", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyO", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Zoom", + "icon": "zoom_in", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyZ", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Text", + "icon": "text_fields", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "KeyT", + "delayed": true + } + } + ] + }, + { + "type": "command", + "name": "Down", + "icon": "arrow_circle_down", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 180 + }, + { + "type": "hotkey", + "name": "Ruler", + "icon": "align_flex_end", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+ShiftLeft+KeyR", + "delayed": true + } + } + ] + } + } + ], + "collections": [ + { + "name": "Favorites", + "icon": "favorite", + "iconTheme": "material-symbols-rounded", + "tags": [ + "favs" + ] + } + ] +} diff --git a/.config/kando/menus.json.bak b/.config/kando/menus.json.bak new file mode 100644 index 0000000..663276d --- /dev/null +++ b/.config/kando/menus.json.bak @@ -0,0 +1,536 @@ +{ + "menus": [ + { + "shortcut": "Control+Space", + "shortcutID": "example-menu", + "centered": false, + "root": { + "type": "submenu", + "name": "Example Menu", + "icon": "award_star", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "submenu", + "name": "Apps", + "icon": "apps", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "command", + "data": { + "command": "x-www-browser" + }, + "name": "Web Browser", + "icon": "globe", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-email" + }, + "name": "E-Mail", + "icon": "mail", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "gimp" + }, + "name": "GIMP", + "icon": "gimp", + "iconTheme": "simple-icons" + }, + { + "type": "command", + "data": { + "command": "xdg-open ~" + }, + "name": "File Browser", + "icon": "folder_shared", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "x-terminal-emulator" + }, + "name": "Terminal", + "icon": "terminal", + "iconTheme": "material-symbols-rounded" + } + ] + }, + { + "type": "submenu", + "name": "Web Links", + "icon": "public", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "uri", + "data": { + "uri": "https://www.google.com" + }, + "name": "Google", + "icon": "google", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://github.com/kando-menu/kando" + }, + "name": "Kando on GitHub", + "icon": "github", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://ko-fi.com/schneegans" + }, + "name": "Kando on Ko-fi", + "icon": "kofi", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://www.youtube.com/@simonschneegans" + }, + "name": "Kando on YouTube", + "icon": "youtube", + "iconTheme": "simple-icons" + }, + { + "type": "uri", + "data": { + "uri": "https://discord.gg/hZwbVSDkhy" + }, + "name": "Kando on Discord", + "icon": "discord", + "iconTheme": "simple-icons" + } + ] + }, + { + "type": "command", + "name": "Next Workspace", + "icon": "arrow_circle_right", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-down", + "detached": true, + "isolated": false, + "delayed": false + } + }, + { + "type": "submenu", + "name": "Clipboard", + "icon": "assignment", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "data": { + "hotkey": "ControlLeft+KeyV", + "delayed": true + }, + "name": "Paste", + "icon": "content_paste_go", + "iconTheme": "material-symbols-rounded", + "angle": 90 + }, + { + "type": "hotkey", + "data": { + "hotkey": "ControlLeft+KeyC", + "delayed": true + }, + "name": "Copy", + "icon": "content_copy", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "ControlLeft+KeyX", + "delayed": true + }, + "name": "Cut", + "icon": "cut", + "iconTheme": "material-symbols-rounded" + } + ] + }, + { + "type": "submenu", + "name": "Audio", + "icon": "play_circle", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "data": { + "hotkey": "MediaTrackNext", + "delayed": false + }, + "name": "Next Track", + "icon": "skip_next", + "iconTheme": "material-symbols-rounded", + "angle": 90 + }, + { + "type": "hotkey", + "data": { + "hotkey": "MediaPlayPause", + "delayed": false + }, + "name": "Play / Pause", + "icon": "play_pause", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "AudioVolumeMute", + "delayed": false + }, + "name": "Mute", + "icon": "music_off", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "MediaTrackPrevious", + "delayed": false + }, + "name": "Previous Track", + "icon": "skip_previous", + "iconTheme": "material-symbols-rounded", + "angle": 270 + } + ] + }, + { + "type": "submenu", + "name": "Windows", + "icon": "select_window", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "hotkey", + "data": { + "hotkey": "MetaLeft+ArrowUp", + "delayed": true + }, + "name": "Toggle Maximize", + "icon": "open_in_full", + "iconTheme": "material-symbols-rounded", + "angle": 0 + }, + { + "type": "hotkey", + "data": { + "hotkey": "MetaLeft+ArrowRight", + "delayed": true + }, + "name": "Tile Right", + "icon": "text_select_jump_to_end", + "iconTheme": "material-symbols-rounded", + "angle": 90 + }, + { + "type": "hotkey", + "data": { + "hotkey": "AltLeft+F4", + "delayed": true + }, + "name": "Close Window", + "icon": "cancel_presentation", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "hotkey", + "data": { + "hotkey": "MetaLeft+ArrowLeft", + "delayed": true + }, + "name": "Tile Left", + "icon": "text_select_jump_to_beginning", + "iconTheme": "material-symbols-rounded", + "angle": 270 + } + ] + }, + { + "type": "command", + "name": "Previous Workspace", + "icon": "arrow_circle_left", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + } + }, + { + "type": "submenu", + "name": "Bookmarks", + "icon": "folder_special", + "iconTheme": "material-symbols-rounded", + "children": [ + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir DOWNLOAD)\"" + }, + "name": "Downloads", + "icon": "download", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir VIDEOS)\"" + }, + "name": "Videos", + "icon": "video_camera_front", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir PICTURES)\"" + }, + "name": "Pictures", + "icon": "imagesmode", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir DOCUMENTS)\"" + }, + "name": "Documents", + "icon": "text_ad", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir DESKTOP)\"" + }, + "name": "Desktop", + "icon": "desktop_windows", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open ~" + }, + "name": "Home", + "icon": "home", + "iconTheme": "material-symbols-rounded" + }, + { + "type": "command", + "data": { + "command": "xdg-open \"$(xdg-user-dir MUSIC)\"" + }, + "name": "Music", + "icon": "music_note", + "iconTheme": "material-symbols-rounded" + } + ] + } + ] + }, + "anchored": false, + "hoverMode": false, + "conditions": {} + }, + { + "shortcut": "", + "shortcutID": "default-menu", + "centered": false, + "anchored": false, + "hoverMode": false, + "tags": [], + "root": { + "type": "submenu", + "name": "Default Menu", + "icon": "nixos", + "iconTheme": "simple-icons-colored", + "children": [ + { + "type": "hotkey", + "name": "Toggle Float", + "icon": "float_landscape_2", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MetaLeft+ShiftLeft+KeyT", + "delayed": true + } + }, + { + "type": "command", + "name": "Up", + "icon": "arrow_circle_up", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 0 + }, + { + "type": "submenu", + "name": "Media", + "icon": "headphones", + "iconTheme": "material-symbols-rounded", + "data": {}, + "children": [ + { + "type": "hotkey", + "name": "Next", + "icon": "skip_next", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MediaTrackNext", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Play|Pause", + "icon": "play_pause", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MediaPlayPause", + "delayed": true + } + }, + { + "type": "hotkey", + "name": "Previous", + "icon": "skip_previous", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "MediaTrackPrevious", + "delayed": true + } + } + ], + "angle": 90 + }, + { + "type": "command", + "name": "Down", + "icon": "arrow_circle_down", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-down", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 180 + } + ] + } + }, + { + "shortcut": "", + "shortcutID": "zen-browser", + "centered": false, + "anchored": false, + "hoverMode": false, + "tags": [], + "root": { + "type": "submenu", + "name": "Zen Browser", + "icon": "zenbrowser", + "iconTheme": "simple-icons-colored", + "children": [ + { + "type": "hotkey", + "name": "Split V", + "icon": "split_scene_up", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+AltLeft+KeyH", + "delayed": true + } + }, + { + "type": "command", + "name": "Up", + "icon": "arrow_circle_up", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-up", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 0 + }, + { + "type": "hotkey", + "name": "Unsplit", + "icon": "tab", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+AltLeft+KeyU", + "delayed": true + }, + "angle": 90 + }, + { + "type": "command", + "name": "Down", + "icon": "arrow_circle_down", + "iconTheme": "material-symbols-rounded", + "data": { + "command": "niri msg action focus-workspace-down", + "detached": true, + "isolated": false, + "delayed": false + }, + "angle": 180 + }, + { + "type": "hotkey", + "name": "Split H", + "icon": "split_scene_left", + "iconTheme": "material-symbols-rounded", + "data": { + "hotkey": "ControlLeft+AltLeft+KeyV", + "delayed": true + } + } + ] + } + } + ], + "collections": [ + { + "name": "Favorites", + "icon": "favorite", + "iconTheme": "material-symbols-rounded", + "tags": [ + "favs" + ] + } + ] +} diff --git a/.config/kando/session/Cache/Cache_Data/42823f702e429c78_0 b/.config/kando/session/Cache/Cache_Data/42823f702e429c78_0 new file mode 100644 index 0000000..3a98290 Binary files /dev/null and b/.config/kando/session/Cache/Cache_Data/42823f702e429c78_0 differ diff --git a/.config/kando/session/Cache/Cache_Data/5283edf90cf4ab50_0 b/.config/kando/session/Cache/Cache_Data/5283edf90cf4ab50_0 new file mode 100644 index 0000000..4e0d42d Binary files /dev/null and b/.config/kando/session/Cache/Cache_Data/5283edf90cf4ab50_0 differ diff --git a/.config/kando/session/Cache/Cache_Data/index b/.config/kando/session/Cache/Cache_Data/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/.config/kando/session/Cache/Cache_Data/index differ diff --git a/.config/kando/session/Cache/Cache_Data/index-dir/the-real-index b/.config/kando/session/Cache/Cache_Data/index-dir/the-real-index new file mode 100644 index 0000000..efd3376 Binary files /dev/null and b/.config/kando/session/Cache/Cache_Data/index-dir/the-real-index differ diff --git a/.config/kando/session/Code Cache/js/index b/.config/kando/session/Code Cache/js/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/.config/kando/session/Code Cache/js/index differ diff --git a/.config/kando/session/Code Cache/js/index-dir/the-real-index b/.config/kando/session/Code Cache/js/index-dir/the-real-index new file mode 100644 index 0000000..8dfdd52 Binary files /dev/null and b/.config/kando/session/Code Cache/js/index-dir/the-real-index differ diff --git a/.config/kando/session/Code Cache/wasm/index b/.config/kando/session/Code Cache/wasm/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/.config/kando/session/Code Cache/wasm/index differ diff --git a/.config/kando/session/Code Cache/wasm/index-dir/the-real-index b/.config/kando/session/Code Cache/wasm/index-dir/the-real-index new file mode 100644 index 0000000..8dfdd52 Binary files /dev/null and b/.config/kando/session/Code Cache/wasm/index-dir/the-real-index differ diff --git a/.config/kando/session/DIPS b/.config/kando/session/DIPS new file mode 100644 index 0000000..90ef341 Binary files /dev/null and b/.config/kando/session/DIPS differ diff --git a/.config/kando/session/DIPS-wal b/.config/kando/session/DIPS-wal new file mode 100644 index 0000000..c8fd4d6 Binary files /dev/null and b/.config/kando/session/DIPS-wal differ diff --git a/.config/kando/session/DawnGraphiteCache/data_0 b/.config/kando/session/DawnGraphiteCache/data_0 new file mode 100644 index 0000000..d76fb77 Binary files /dev/null and b/.config/kando/session/DawnGraphiteCache/data_0 differ diff --git a/.config/kando/session/DawnGraphiteCache/data_1 b/.config/kando/session/DawnGraphiteCache/data_1 new file mode 100644 index 0000000..375410a Binary files /dev/null and b/.config/kando/session/DawnGraphiteCache/data_1 differ diff --git a/.config/kando/session/DawnGraphiteCache/data_2 b/.config/kando/session/DawnGraphiteCache/data_2 new file mode 100644 index 0000000..c7e2eb9 Binary files /dev/null and b/.config/kando/session/DawnGraphiteCache/data_2 differ diff --git a/.config/kando/session/DawnGraphiteCache/data_3 b/.config/kando/session/DawnGraphiteCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/.config/kando/session/DawnGraphiteCache/data_3 differ diff --git a/.config/kando/session/DawnGraphiteCache/index b/.config/kando/session/DawnGraphiteCache/index new file mode 100644 index 0000000..34307ad Binary files /dev/null and b/.config/kando/session/DawnGraphiteCache/index differ diff --git a/.config/kando/session/DawnWebGPUCache/data_0 b/.config/kando/session/DawnWebGPUCache/data_0 new file mode 100644 index 0000000..d76fb77 Binary files /dev/null and b/.config/kando/session/DawnWebGPUCache/data_0 differ diff --git a/.config/kando/session/DawnWebGPUCache/data_1 b/.config/kando/session/DawnWebGPUCache/data_1 new file mode 100644 index 0000000..21e2b31 Binary files /dev/null and b/.config/kando/session/DawnWebGPUCache/data_1 differ diff --git a/.config/kando/session/DawnWebGPUCache/data_2 b/.config/kando/session/DawnWebGPUCache/data_2 new file mode 100644 index 0000000..c7e2eb9 Binary files /dev/null and b/.config/kando/session/DawnWebGPUCache/data_2 differ diff --git a/.config/kando/session/DawnWebGPUCache/data_3 b/.config/kando/session/DawnWebGPUCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/.config/kando/session/DawnWebGPUCache/data_3 differ diff --git a/.config/kando/session/DawnWebGPUCache/index b/.config/kando/session/DawnWebGPUCache/index new file mode 100644 index 0000000..b3daeb7 Binary files /dev/null and b/.config/kando/session/DawnWebGPUCache/index differ diff --git a/.config/kando/session/Dictionaries/en-US-10-1.bdic b/.config/kando/session/Dictionaries/en-US-10-1.bdic new file mode 100644 index 0000000..a453358 Binary files /dev/null and b/.config/kando/session/Dictionaries/en-US-10-1.bdic differ diff --git a/.config/kando/session/GPUCache/data_0 b/.config/kando/session/GPUCache/data_0 new file mode 100644 index 0000000..3f0c884 Binary files /dev/null and b/.config/kando/session/GPUCache/data_0 differ diff --git a/.config/kando/session/GPUCache/data_1 b/.config/kando/session/GPUCache/data_1 new file mode 100644 index 0000000..1c82c58 Binary files /dev/null and b/.config/kando/session/GPUCache/data_1 differ diff --git a/.config/kando/session/GPUCache/data_2 b/.config/kando/session/GPUCache/data_2 new file mode 100644 index 0000000..98a0712 Binary files /dev/null and b/.config/kando/session/GPUCache/data_2 differ diff --git a/.config/kando/session/GPUCache/data_3 b/.config/kando/session/GPUCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/.config/kando/session/GPUCache/data_3 differ diff --git a/.config/kando/session/GPUCache/index b/.config/kando/session/GPUCache/index new file mode 100644 index 0000000..6963f72 Binary files /dev/null and b/.config/kando/session/GPUCache/index differ diff --git a/.config/kando/session/Local Storage/leveldb/000003.log b/.config/kando/session/Local Storage/leveldb/000003.log new file mode 100644 index 0000000..ec16822 Binary files /dev/null and b/.config/kando/session/Local Storage/leveldb/000003.log differ diff --git a/.config/kando/session/Local Storage/leveldb/CURRENT b/.config/kando/session/Local Storage/leveldb/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/.config/kando/session/Local Storage/leveldb/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/.config/kando/session/Local Storage/leveldb/LOCK b/.config/kando/session/Local Storage/leveldb/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/Local Storage/leveldb/LOG b/.config/kando/session/Local Storage/leveldb/LOG new file mode 100644 index 0000000..babc99e --- /dev/null +++ b/.config/kando/session/Local Storage/leveldb/LOG @@ -0,0 +1,3 @@ +2026/02/04-18:01:58.808 1593 Reusing MANIFEST /home/nicole/.config/kando/session/Local Storage/leveldb/MANIFEST-000001 +2026/02/04-18:01:58.810 1593 Recovering log #3 +2026/02/04-18:01:58.810 1593 Reusing old log /home/nicole/.config/kando/session/Local Storage/leveldb/000003.log diff --git a/.config/kando/session/Local Storage/leveldb/LOG.old b/.config/kando/session/Local Storage/leveldb/LOG.old new file mode 100644 index 0000000..98028f6 --- /dev/null +++ b/.config/kando/session/Local Storage/leveldb/LOG.old @@ -0,0 +1,3 @@ +2026/02/04-15:27:15.910 c528 Reusing MANIFEST /home/nicole/.config/kando/session/Local Storage/leveldb/MANIFEST-000001 +2026/02/04-15:27:15.912 c528 Recovering log #3 +2026/02/04-15:27:15.913 c528 Reusing old log /home/nicole/.config/kando/session/Local Storage/leveldb/000003.log diff --git a/.config/kando/session/Local Storage/leveldb/MANIFEST-000001 b/.config/kando/session/Local Storage/leveldb/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/.config/kando/session/Local Storage/leveldb/MANIFEST-000001 differ diff --git a/.config/kando/session/Network Persistent State b/.config/kando/session/Network Persistent State new file mode 100644 index 0000000..201c52d --- /dev/null +++ b/.config/kando/session/Network Persistent State @@ -0,0 +1 @@ +{"net":{"http_server_properties":{"servers":[{"anonymization":[],"server":"https://redirector.gvt1.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13417257707331999","port":443,"protocol_str":"quic"}],"anonymization":[],"network_stats":{"srtt":18220},"server":"https://r1---sn-45nufxc-hm2z.gvt1.com"}],"supports_quic":{"address":"2001:b07:5d29:8353:49d5:3999:3a1f:4be7","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G"}}} \ No newline at end of file diff --git a/.config/kando/session/Preferences b/.config/kando/session/Preferences new file mode 100644 index 0000000..21520bc --- /dev/null +++ b/.config/kando/session/Preferences @@ -0,0 +1 @@ +{"migrated_user_scripts_toggle":true,"partition":{"per_host_zoom_levels":{"14360168047744253002":{"file:///nix/store/w379y70szfig26r0vdgm3bh3qjr6dc93-kando-2.0.0/share/kando/resources/app/.webpack/renderer/menu_window/index.html":1.4390194395059626}}},"spellcheck":{"dictionaries":["en-US"],"dictionary":""}} \ No newline at end of file diff --git a/.config/kando/session/Session Storage/000003.log b/.config/kando/session/Session Storage/000003.log new file mode 100644 index 0000000..7bd8395 Binary files /dev/null and b/.config/kando/session/Session Storage/000003.log differ diff --git a/.config/kando/session/Session Storage/CURRENT b/.config/kando/session/Session Storage/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/.config/kando/session/Session Storage/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/.config/kando/session/Session Storage/LOCK b/.config/kando/session/Session Storage/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/Session Storage/LOG b/.config/kando/session/Session Storage/LOG new file mode 100644 index 0000000..2298044 --- /dev/null +++ b/.config/kando/session/Session Storage/LOG @@ -0,0 +1,3 @@ +2026/02/04-15:33:12.697 c525 Reusing MANIFEST /home/nicole/.config/kando/session/Session Storage/MANIFEST-000001 +2026/02/04-15:33:12.697 c525 Recovering log #3 +2026/02/04-15:33:12.697 c525 Reusing old log /home/nicole/.config/kando/session/Session Storage/000003.log diff --git a/.config/kando/session/Session Storage/LOG.old b/.config/kando/session/Session Storage/LOG.old new file mode 100644 index 0000000..a945c1a --- /dev/null +++ b/.config/kando/session/Session Storage/LOG.old @@ -0,0 +1,3 @@ +2026/02/04-15:04:01.728 907c Reusing MANIFEST /home/nicole/.config/kando/session/Session Storage/MANIFEST-000001 +2026/02/04-15:04:01.728 907c Recovering log #3 +2026/02/04-15:04:01.728 907c Reusing old log /home/nicole/.config/kando/session/Session Storage/000003.log diff --git a/.config/kando/session/Session Storage/MANIFEST-000001 b/.config/kando/session/Session Storage/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/.config/kando/session/Session Storage/MANIFEST-000001 differ diff --git a/.config/kando/session/Shared Dictionary/cache/index b/.config/kando/session/Shared Dictionary/cache/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/.config/kando/session/Shared Dictionary/cache/index differ diff --git a/.config/kando/session/Shared Dictionary/cache/index-dir/the-real-index b/.config/kando/session/Shared Dictionary/cache/index-dir/the-real-index new file mode 100644 index 0000000..37a16ec Binary files /dev/null and b/.config/kando/session/Shared Dictionary/cache/index-dir/the-real-index differ diff --git a/.config/kando/session/Shared Dictionary/db b/.config/kando/session/Shared Dictionary/db new file mode 100644 index 0000000..9b8637b Binary files /dev/null and b/.config/kando/session/Shared Dictionary/db differ diff --git a/.config/kando/session/Shared Dictionary/db-journal b/.config/kando/session/Shared Dictionary/db-journal new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/SharedStorage b/.config/kando/session/SharedStorage new file mode 100644 index 0000000..373b1a0 Binary files /dev/null and b/.config/kando/session/SharedStorage differ diff --git a/.config/kando/session/SharedStorage-wal b/.config/kando/session/SharedStorage-wal new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/Trust Tokens b/.config/kando/session/Trust Tokens new file mode 100644 index 0000000..0a976f1 Binary files /dev/null and b/.config/kando/session/Trust Tokens differ diff --git a/.config/kando/session/Trust Tokens-journal b/.config/kando/session/Trust Tokens-journal new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/VideoDecodeStats/LOCK b/.config/kando/session/VideoDecodeStats/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/VideoDecodeStats/LOG b/.config/kando/session/VideoDecodeStats/LOG new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/VideoDecodeStats/LOG.old b/.config/kando/session/VideoDecodeStats/LOG.old new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/shared_proto_db/000003.log b/.config/kando/session/shared_proto_db/000003.log new file mode 100644 index 0000000..b8585e7 Binary files /dev/null and b/.config/kando/session/shared_proto_db/000003.log differ diff --git a/.config/kando/session/shared_proto_db/CURRENT b/.config/kando/session/shared_proto_db/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/.config/kando/session/shared_proto_db/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/.config/kando/session/shared_proto_db/LOCK b/.config/kando/session/shared_proto_db/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/shared_proto_db/LOG b/.config/kando/session/shared_proto_db/LOG new file mode 100644 index 0000000..c035bc4 --- /dev/null +++ b/.config/kando/session/shared_proto_db/LOG @@ -0,0 +1,3 @@ +2026/02/04-10:36:36.319 21a69 Reusing MANIFEST /home/nicole/.config/kando/session/shared_proto_db/MANIFEST-000001 +2026/02/04-10:36:36.319 21a69 Recovering log #3 +2026/02/04-10:36:36.319 21a69 Reusing old log /home/nicole/.config/kando/session/shared_proto_db/000003.log diff --git a/.config/kando/session/shared_proto_db/LOG.old b/.config/kando/session/shared_proto_db/LOG.old new file mode 100644 index 0000000..9170588 --- /dev/null +++ b/.config/kando/session/shared_proto_db/LOG.old @@ -0,0 +1,3 @@ +2026/02/04-09:17:31.709 1aea9 Reusing MANIFEST /home/nicole/.config/kando/session/shared_proto_db/MANIFEST-000001 +2026/02/04-09:17:31.709 1aea9 Recovering log #3 +2026/02/04-09:17:31.709 1aea9 Reusing old log /home/nicole/.config/kando/session/shared_proto_db/000003.log diff --git a/.config/kando/session/shared_proto_db/MANIFEST-000001 b/.config/kando/session/shared_proto_db/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/.config/kando/session/shared_proto_db/MANIFEST-000001 differ diff --git a/.config/kando/session/shared_proto_db/metadata/000003.log b/.config/kando/session/shared_proto_db/metadata/000003.log new file mode 100644 index 0000000..94ed02a Binary files /dev/null and b/.config/kando/session/shared_proto_db/metadata/000003.log differ diff --git a/.config/kando/session/shared_proto_db/metadata/CURRENT b/.config/kando/session/shared_proto_db/metadata/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/.config/kando/session/shared_proto_db/metadata/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/.config/kando/session/shared_proto_db/metadata/LOCK b/.config/kando/session/shared_proto_db/metadata/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/.config/kando/session/shared_proto_db/metadata/LOG b/.config/kando/session/shared_proto_db/metadata/LOG new file mode 100644 index 0000000..16e6f5f --- /dev/null +++ b/.config/kando/session/shared_proto_db/metadata/LOG @@ -0,0 +1,3 @@ +2026/02/04-10:36:36.318 21a69 Reusing MANIFEST /home/nicole/.config/kando/session/shared_proto_db/metadata/MANIFEST-000001 +2026/02/04-10:36:36.318 21a69 Recovering log #3 +2026/02/04-10:36:36.318 21a69 Reusing old log /home/nicole/.config/kando/session/shared_proto_db/metadata/000003.log diff --git a/.config/kando/session/shared_proto_db/metadata/LOG.old b/.config/kando/session/shared_proto_db/metadata/LOG.old new file mode 100644 index 0000000..a9c1e44 --- /dev/null +++ b/.config/kando/session/shared_proto_db/metadata/LOG.old @@ -0,0 +1,3 @@ +2026/02/04-09:17:31.709 1aea9 Reusing MANIFEST /home/nicole/.config/kando/session/shared_proto_db/metadata/MANIFEST-000001 +2026/02/04-09:17:31.709 1aea9 Recovering log #3 +2026/02/04-09:17:31.709 1aea9 Reusing old log /home/nicole/.config/kando/session/shared_proto_db/metadata/000003.log diff --git a/.config/kando/session/shared_proto_db/metadata/MANIFEST-000001 b/.config/kando/session/shared_proto_db/metadata/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/.config/kando/session/shared_proto_db/metadata/MANIFEST-000001 differ