merge main #11
@@ -5,3 +5,8 @@
|
||||
build/
|
||||
compile_commands.json
|
||||
testpython
|
||||
pkg/
|
||||
*.tar.*
|
||||
uv.lock
|
||||
.qtcreator/
|
||||
dist/
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"$schema": "https://download.qt.io/official_releases/qtcreator/latest/installer_source/jsonschemas/project.json",
|
||||
"files.exclude": [
|
||||
".qtcreator/project.json.user"
|
||||
]
|
||||
}
|
||||
@@ -1,204 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 18.0.2, 2026-02-05T15:11:49. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{ec8acdf5-a16b-4fc5-819b-8b986eb013bb}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
<value type="qlonglong">0</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoDetect">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||
<value type="QString" key="language">QmlJS</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.LineEndingBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="int" key="EditorConfiguration.PreferAfterWhitespaceComments">0</value>
|
||||
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">2</value>
|
||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
|
||||
<value type="bool" key="AutoTest.Framework.Boost">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.CTest">false</value>
|
||||
<value type="bool" key="AutoTest.Framework.Catch">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.GTest">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
|
||||
</valuemap>
|
||||
<value type="bool" key="AutoTest.ApplyFilter">false</value>
|
||||
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
|
||||
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
|
||||
<value type="int" key="AutoTest.RunAfterBuild">0</value>
|
||||
<value type="bool" key="AutoTest.UseGlobal">true</value>
|
||||
<valuemap type="QVariantMap" key="ClangTools">
|
||||
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
|
||||
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||
<value type="int" key="ClangTools.ParallelJobs">10</value>
|
||||
<value type="bool" key="ClangTools.PreferConfigFile">true</value>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||
</valuemap>
|
||||
<value type="int" key="RcSync">0</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="QString" key="DeviceType">Desktop</value>
|
||||
<value type="bool" key="HasPerBcDcs">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{6f820de3-bb35-4a43-a7c9-dfd1617a8619}</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/zach/GitProjects/z-bar-qt/build</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">WorkspaceProject.BuildConfiguration</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">%{RunConfig:Executable:Path}</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">%{RunConfig:Executable:Path}</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="qlonglong">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>Version</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
</qtcreator>
|
||||
@@ -5,6 +5,7 @@ import QtQuick.Effects
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import qs.Daemons
|
||||
import qs.Components
|
||||
import qs.Modules
|
||||
import qs.Modules.Bar
|
||||
@@ -26,7 +27,17 @@ Variants {
|
||||
|
||||
WlrLayershell.namespace: "ZShell-Bar"
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
||||
WlrLayershell.keyboardFocus: visibilities.launcher ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
|
||||
WlrLayershell.keyboardFocus: visibilities.launcher || visibilities.sidebar || visibilities.dashboard ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
|
||||
|
||||
contentItem.focus: true
|
||||
|
||||
contentItem.Keys.onEscapePressed: {
|
||||
if ( Config.barConfig.autoHide )
|
||||
visibilities.bar = false;
|
||||
visibilities.sidebar = false;
|
||||
visibilities.dashboard = false;
|
||||
}
|
||||
|
||||
PanelWindow {
|
||||
id: exclusionZone
|
||||
WlrLayershell.namespace: "ZShell-Bar-Exclusion"
|
||||
@@ -55,13 +66,12 @@ Variants {
|
||||
y: Config.barConfig.autoHide && !visibilities.bar ? 4 : 34
|
||||
|
||||
property list<Region> nullRegions: []
|
||||
property bool hcurrent: ( panels.popouts.hasCurrent && panels.popouts.currentName.startsWith("traymenu") ) || visibilities.sidebar || visibilities.dashboard
|
||||
|
||||
width: hcurrent ? 0 : bar.width
|
||||
height: hcurrent ? 0 : bar.screen.height - backgroundRect.implicitHeight
|
||||
width: bar.width
|
||||
height: bar.screen.height - backgroundRect.implicitHeight
|
||||
intersection: Intersection.Xor
|
||||
|
||||
regions: hcurrent ? nullRegions : popoutRegions.instances
|
||||
regions: popoutRegions.instances
|
||||
}
|
||||
|
||||
Variants {
|
||||
@@ -82,21 +92,14 @@ Variants {
|
||||
HyprlandFocusGrab {
|
||||
id: focusGrab
|
||||
|
||||
active: visibilities.launcher
|
||||
active: visibilities.launcher || visibilities.sidebar || visibilities.dashboard || ( panels.popouts.hasCurrent && panels.popouts.currentName.startsWith( "traymenu" ))
|
||||
windows: [bar]
|
||||
onCleared: {
|
||||
visibilities.launcher = false;
|
||||
visibilities.sidebar = false;
|
||||
visibilities.dashboard = false;
|
||||
visibilities.osd = false;
|
||||
}
|
||||
}
|
||||
|
||||
CustomShortcut {
|
||||
name: "toggle-nc"
|
||||
|
||||
onPressed: {
|
||||
visibilities.sidebar = !visibilities.sidebar
|
||||
panels.popouts.hasCurrent = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,10 +111,18 @@ Variants {
|
||||
property bool bar
|
||||
property bool osd
|
||||
property bool launcher
|
||||
property bool notif: NotifServer.popups.length > 0
|
||||
|
||||
Component.onCompleted: Visibilities.load(scope.modelData, this)
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: visibilities
|
||||
property: "bar"
|
||||
value: visibilities.sidebar || visibilities.dashboard || visibilities.osd || visibilities.notif
|
||||
when: Config.barConfig.autoHide
|
||||
}
|
||||
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
opacity: Appearance.transparency.enabled ? DynamicColors.transparency.base : 1
|
||||
@@ -150,7 +161,7 @@ Variants {
|
||||
visibilities: visibilities
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
CustomRect {
|
||||
id: backgroundRect
|
||||
property Wrapper popouts: panels.popouts
|
||||
anchors.top: parent.top
|
||||
|
||||
+2
-1
@@ -7,10 +7,11 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
set(ENABLE_MODULES "plugin" CACHE STRING "Modules to build/install")
|
||||
set(ENABLE_MODULES "plugin;shell" CACHE STRING "Modules to build/install")
|
||||
|
||||
set(INSTALL_LIBDIR "usr/lib/ZShell" CACHE STRING "Library install dir")
|
||||
set(INSTALL_QMLDIR "usr/lib/qt6/qml" CACHE STRING "QML install dir")
|
||||
set(INSTALL_QSCONFDIR "etc/xdg/quickshell/zshell" CACHE STRING "Quickshell config install dir")
|
||||
|
||||
add_compile_options(
|
||||
-Wall -Wextra -Wpedantic -Wshadow -Wconversion
|
||||
|
||||
@@ -7,6 +7,8 @@ Slider {
|
||||
id: root
|
||||
|
||||
required property real peak
|
||||
property color nonPeakColor: DynamicColors.tPalette.m3primary
|
||||
property color peakColor: DynamicColors.palette.m3primary
|
||||
|
||||
background: Item {
|
||||
CustomRect {
|
||||
@@ -16,9 +18,9 @@ Slider {
|
||||
anchors.topMargin: root.implicitHeight / 3
|
||||
anchors.bottomMargin: root.implicitHeight / 3
|
||||
|
||||
implicitWidth: root.handle.x - root.implicitHeight / 6
|
||||
implicitWidth: root.handle.x - root.implicitHeight
|
||||
|
||||
color: DynamicColors.palette.m3primaryContainer
|
||||
color: root.nonPeakColor
|
||||
radius: 1000
|
||||
topRightRadius: root.implicitHeight / 15
|
||||
bottomRightRadius: root.implicitHeight / 15
|
||||
@@ -33,7 +35,7 @@ Slider {
|
||||
topRightRadius: root.implicitHeight / 15
|
||||
bottomRightRadius: root.implicitHeight / 15
|
||||
|
||||
color: DynamicColors.palette.m3primary
|
||||
color: root.peakColor
|
||||
|
||||
Behavior on implicitWidth {
|
||||
Anim { duration: 50 }
|
||||
@@ -48,7 +50,12 @@ Slider {
|
||||
anchors.topMargin: root.implicitHeight / 3
|
||||
anchors.bottomMargin: root.implicitHeight / 3
|
||||
|
||||
implicitWidth: parent.width - root.handle.x - root.handle.implicitWidth - root.implicitHeight / 6
|
||||
implicitWidth: root.implicitWidth - root.handle.x - root.handle.implicitWidth - root.implicitHeight
|
||||
|
||||
Component.onCompleted: {
|
||||
console.log(root.handle.x, implicitWidth)
|
||||
}
|
||||
|
||||
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
radius: 1000
|
||||
|
||||
@@ -11,30 +11,26 @@ Slider {
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.topMargin: root.implicitHeight / 3
|
||||
anchors.bottomMargin: root.implicitHeight / 3
|
||||
|
||||
implicitWidth: root.handle.x - root.implicitHeight / 6
|
||||
implicitWidth: root.handle.x - root.implicitHeight / 2
|
||||
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
topRightRadius: root.implicitHeight / 15
|
||||
bottomRightRadius: root.implicitHeight / 15
|
||||
topRightRadius: root.implicitHeight / 6
|
||||
bottomRightRadius: root.implicitHeight / 6
|
||||
}
|
||||
|
||||
CustomRect {
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
anchors.topMargin: root.implicitHeight / 3
|
||||
anchors.bottomMargin: root.implicitHeight / 3
|
||||
|
||||
implicitWidth: parent.width - root.handle.x - root.handle.implicitWidth - root.implicitHeight / 6
|
||||
implicitWidth: parent.width - root.handle.x - root.handle.implicitWidth - root.implicitHeight / 2
|
||||
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
radius: 1000
|
||||
topLeftRadius: root.implicitHeight / 15
|
||||
bottomLeftRadius: root.implicitHeight / 15
|
||||
topLeftRadius: root.implicitHeight / 6
|
||||
bottomLeftRadius: root.implicitHeight / 6
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -5,6 +5,7 @@ import Quickshell.Io
|
||||
import ZShell
|
||||
import QtQuick
|
||||
import qs.Modules as Modules
|
||||
import qs.Helpers
|
||||
import qs.Paths
|
||||
|
||||
Singleton {
|
||||
@@ -122,7 +123,14 @@ Singleton {
|
||||
return {
|
||||
logo: general.logo,
|
||||
wallpaperPath: general.wallpaperPath,
|
||||
wallust: general.wallust,
|
||||
color: {
|
||||
wallust: general.color.wallust,
|
||||
mode: general.color.mode,
|
||||
schemeGeneration: general.color.schemeGeneration,
|
||||
scheduleDarkStart: general.color.scheduleDarkStart,
|
||||
scheduleDarkEnd: general.color.scheduleDarkEnd,
|
||||
neovimColors: general.color.neovimColors
|
||||
},
|
||||
apps: {
|
||||
terminal: general.apps.terminal,
|
||||
audio: general.apps.audio,
|
||||
@@ -231,6 +239,7 @@ Singleton {
|
||||
hideDelay: osd.hideDelay,
|
||||
enableBrightness: osd.enableBrightness,
|
||||
enableMicrophone: osd.enableMicrophone,
|
||||
allMonBrightness: osd.allMonBrightness,
|
||||
sizes: {
|
||||
sliderWidth: osd.sizes.sliderWidth,
|
||||
sliderHeight: osd.sizes.sliderHeight
|
||||
@@ -328,6 +337,7 @@ Singleton {
|
||||
}
|
||||
|
||||
onLoaded: {
|
||||
ModeScheduler.checkStartup();
|
||||
try {
|
||||
JSON.parse(text());
|
||||
const elapsed = timer.elapsedMs();
|
||||
|
||||
@@ -61,7 +61,7 @@ Singleton {
|
||||
|
||||
if (!isPreview) {
|
||||
root.scheme = scheme.name;
|
||||
flavour = scheme.flavour;
|
||||
flavour = scheme.flavor;
|
||||
currentLight = scheme.mode === "light";
|
||||
} else {
|
||||
previewLight = scheme.mode === "light";
|
||||
|
||||
+12
-3
@@ -4,15 +4,24 @@ import Quickshell
|
||||
JsonObject {
|
||||
property string logo: ""
|
||||
property string wallpaperPath: Quickshell.env("HOME") + "/Pictures/Wallpapers"
|
||||
property bool wallust: false
|
||||
property Color color: Color {}
|
||||
property Apps apps: Apps {}
|
||||
property Idle idle: Idle {}
|
||||
|
||||
component Color: JsonObject {
|
||||
property bool wallust: false
|
||||
property bool schemeGeneration: true
|
||||
property string mode: "dark"
|
||||
property int scheduleDarkStart: 0
|
||||
property int scheduleDarkEnd: 0
|
||||
property bool neovimColors: false
|
||||
}
|
||||
|
||||
component Apps: JsonObject {
|
||||
property list<string> terminal: ["foot"]
|
||||
property list<string> terminal: ["kitty"]
|
||||
property list<string> audio: ["pavucontrol"]
|
||||
property list<string> playback: ["mpv"]
|
||||
property list<string> explorer: ["thunar"]
|
||||
property list<string> explorer: ["dolphin"]
|
||||
}
|
||||
|
||||
component Idle: JsonObject {
|
||||
|
||||
@@ -5,6 +5,7 @@ JsonObject {
|
||||
property int hideDelay: 3000
|
||||
property bool enableBrightness: true
|
||||
property bool enableMicrophone: true
|
||||
property bool allMonBrightness: false
|
||||
property Sizes sizes: Sizes {}
|
||||
|
||||
component Sizes: JsonObject {
|
||||
|
||||
+46
-118
@@ -1,6 +1,8 @@
|
||||
pragma Singleton
|
||||
|
||||
import qs.Config
|
||||
import ZShell.Services
|
||||
import ZShell
|
||||
import Quickshell
|
||||
import Quickshell.Services.Pipewire
|
||||
import QtQuick
|
||||
@@ -17,15 +19,20 @@ Singleton {
|
||||
acc.sinks.push(node);
|
||||
else if (node.audio)
|
||||
acc.sources.push(node);
|
||||
} else if (node.isStream && node.audio) {
|
||||
// Application streams (output streams)
|
||||
acc.streams.push(node);
|
||||
}
|
||||
return acc;
|
||||
}, {
|
||||
sources: [],
|
||||
sinks: []
|
||||
sinks: [],
|
||||
streams: []
|
||||
})
|
||||
|
||||
readonly property list<PwNode> sinks: nodes.sinks
|
||||
readonly property list<PwNode> sources: nodes.sources
|
||||
readonly property list<PwNode> streams: nodes.streams
|
||||
|
||||
readonly property PwNode sink: Pipewire.defaultAudioSink
|
||||
readonly property PwNode source: Pipewire.defaultAudioSource
|
||||
@@ -39,31 +46,31 @@ Singleton {
|
||||
function setVolume(newVolume: real): void {
|
||||
if (sink?.ready && sink?.audio) {
|
||||
sink.audio.muted = false;
|
||||
sink.audio.volume = Math.max(0, Math.min(100, newVolume));
|
||||
sink.audio.volume = Math.max(0, Math.min(Config.services.maxVolume, newVolume));
|
||||
}
|
||||
}
|
||||
|
||||
function incrementVolume(amount: real): void {
|
||||
setVolume(volume + (amount || 5));
|
||||
setVolume(volume + (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function decrementVolume(amount: real): void {
|
||||
setVolume(volume - (amount || 5));
|
||||
setVolume(volume - (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function setSourceVolume(newVolume: real): void {
|
||||
if (source?.ready && source?.audio) {
|
||||
source.audio.muted = false;
|
||||
source.audio.volume = Math.max(0, Math.min(100, newVolume));
|
||||
source.audio.volume = Math.max(0, Math.min(Config.services.maxVolume, newVolume));
|
||||
}
|
||||
}
|
||||
|
||||
function incrementSourceVolume(amount: real): void {
|
||||
setSourceVolume(sourceVolume + (amount || 5));
|
||||
setSourceVolume(sourceVolume + (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function decrementSourceVolume(amount: real): void {
|
||||
setSourceVolume(sourceVolume - (amount || 5));
|
||||
setSourceVolume(sourceVolume - (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function setAudioSink(newSink: PwNode): void {
|
||||
@@ -74,19 +81,43 @@ Singleton {
|
||||
Pipewire.preferredDefaultAudioSource = newSource;
|
||||
}
|
||||
|
||||
function setAppAudioVolume(appStream: PwNode, newVolume: real): void {
|
||||
if ( appStream?.ready && appStream?.audio ) {
|
||||
appStream.audio.muted = false;
|
||||
appStream.audio.volume = Math.max(0, Math.min(100, newVolume));
|
||||
function setStreamVolume(stream: PwNode, newVolume: real): void {
|
||||
if (stream?.ready && stream?.audio) {
|
||||
stream.audio.muted = false;
|
||||
stream.audio.volume = Math.max(0, Math.min(Config.services.maxVolume, newVolume));
|
||||
}
|
||||
}
|
||||
|
||||
function setStreamMuted(stream: PwNode, muted: bool): void {
|
||||
if (stream?.ready && stream?.audio) {
|
||||
stream.audio.muted = muted;
|
||||
}
|
||||
}
|
||||
|
||||
function getStreamVolume(stream: PwNode): real {
|
||||
return stream?.audio?.volume ?? 0;
|
||||
}
|
||||
|
||||
function getStreamMuted(stream: PwNode): bool {
|
||||
return !!stream?.audio?.muted;
|
||||
}
|
||||
|
||||
function getStreamName(stream: PwNode): string {
|
||||
if (!stream)
|
||||
return qsTr("Unknown");
|
||||
// Try application name first, then description, then name
|
||||
return stream.applicationName || stream.description || stream.name || qsTr("Unknown Application");
|
||||
}
|
||||
|
||||
onSinkChanged: {
|
||||
if (!sink?.ready)
|
||||
return;
|
||||
|
||||
const newSinkName = sink.description || sink.name || qsTr("Unknown Device");
|
||||
|
||||
if (previousSinkName && previousSinkName !== newSinkName && Config.utilities.toasts.audioOutputChanged)
|
||||
Toaster.toast(qsTr("Audio output changed"), qsTr("Now using: %1").arg(newSinkName), "volume_up");
|
||||
|
||||
previousSinkName = newSinkName;
|
||||
}
|
||||
|
||||
@@ -96,6 +127,9 @@ Singleton {
|
||||
|
||||
const newSourceName = source.description || source.name || qsTr("Unknown Device");
|
||||
|
||||
if (previousSourceName && previousSourceName !== newSourceName && Config.utilities.toasts.audioInputChanged)
|
||||
Toaster.toast(qsTr("Audio input changed"), qsTr("Now using: %1").arg(newSourceName), "mic");
|
||||
|
||||
previousSourceName = newSourceName;
|
||||
}
|
||||
|
||||
@@ -105,112 +139,6 @@ Singleton {
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
objects: [...root.sinks, ...root.sources]
|
||||
}
|
||||
|
||||
PwNodeLinkTracker {
|
||||
id: sinkLinkTracker
|
||||
node: root.sink
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
objects: root.appStreams
|
||||
}
|
||||
|
||||
readonly property var appStreams: {
|
||||
var defaultSink = root.sink;
|
||||
var defaultSinkId = defaultSink.id;
|
||||
var connectedStreamIds = {};
|
||||
var connectedStreams = [];
|
||||
|
||||
if ( !sinkLinkTracker.linkGroups ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
var linkGroupsCount = 0;
|
||||
if (sinkLinkTracker.linkGroups.length !== undefined) {
|
||||
linkGroupsCount = sinkLinkTracker.linkGroups.length;
|
||||
} else if (sinkLinkTracker.linkGroups.count !== undefined) {
|
||||
linkGroupsCount = sinkLinkTracker.linkGroups.count;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ( linkGroupsCount === 0 ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
var intermediateNodeIds = {};
|
||||
var nodesToCheck = [];
|
||||
|
||||
for (var i = 0; i < linkGroupsCount; i++) {
|
||||
var linkGroup;
|
||||
if (sinkLinkTracker.linkGroups.get) {
|
||||
linkGroup = sinkLinkTracker.linkGroups.get(i);
|
||||
} else {
|
||||
linkGroup = sinkLinkTracker.linkGroups[i];
|
||||
}
|
||||
|
||||
if (!linkGroup || !linkGroup.source) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var sourceNode = linkGroup.source;
|
||||
|
||||
if (sourceNode.isStream && sourceNode.audio) {
|
||||
if (!connectedStreamIds[sourceNode.id]) {
|
||||
connectedStreamIds[sourceNode.id] = true;
|
||||
connectedStreams.push(sourceNode);
|
||||
}
|
||||
} else {
|
||||
intermediateNodeIds[sourceNode.id] = true;
|
||||
nodesToCheck.push(sourceNode);
|
||||
}
|
||||
}
|
||||
|
||||
if (nodesToCheck.length > 0 || connectedStreams.length === 0) {
|
||||
try {
|
||||
var allNodes = [];
|
||||
if (Pipewire.nodes) {
|
||||
if (Pipewire.nodes.count !== undefined) {
|
||||
var nodeCount = Pipewire.nodes.count;
|
||||
for (var n = 0; n < nodeCount; n++) {
|
||||
var node;
|
||||
if (Pipewire.nodes.get) {
|
||||
node = Pipewire.nodes.get(n);
|
||||
} else {
|
||||
node = Pipewire.nodes[n];
|
||||
}
|
||||
if (node)
|
||||
allNodes.push(node);
|
||||
}
|
||||
} else if (Pipewire.nodes.values) {
|
||||
allNodes = Pipewire.nodes.values;
|
||||
}
|
||||
}
|
||||
|
||||
for (var j = 0; j < allNodes.length; j++) {
|
||||
var node = allNodes[j];
|
||||
if (!node || !node.isStream || !node.audio) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var streamId = node.id;
|
||||
if (connectedStreamIds[streamId]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Object.keys(intermediateNodeIds).length > 0) {
|
||||
connectedStreamIds[streamId] = true;
|
||||
connectedStreams.push(node);
|
||||
} else if (connectedStreams.length === 0) {
|
||||
connectedStreamIds[streamId] = true;
|
||||
connectedStreams.push(node);
|
||||
}
|
||||
}
|
||||
} catch (e)
|
||||
{}
|
||||
}
|
||||
return connectedStreams;
|
||||
objects: [...root.sinks, ...root.sources, ...root.streams]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ Singleton {
|
||||
property list<var> actions
|
||||
|
||||
readonly property Timer timer: Timer {
|
||||
property int totalTime: 5000
|
||||
property int totalTime: Config.notifs.defaultExpireTimeout
|
||||
property int remainingTime: totalTime
|
||||
property bool paused: false
|
||||
|
||||
|
||||
+22
-10
@@ -53,15 +53,15 @@ CustomMouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
|
||||
onPressed: event => {
|
||||
if ( root.popouts.hasCurrent && !inTopPanel( root.popouts, event.x, event.y )) {
|
||||
root.popouts.hasCurrent = false;
|
||||
} else if (root.visibilities.sidebar && !inRightPanel( panels.sidebar, event.x, event.y )) {
|
||||
root.visibilities.sidebar = false;
|
||||
} else if (root.visibilities.dashboard && !inTopPanel( panels.dashboard, event.x, event.y )) {
|
||||
root.visibilities.dashboard = false;
|
||||
}
|
||||
}
|
||||
// onPressed: event => {
|
||||
// if ( root.popouts.hasCurrent && !inTopPanel( root.popouts, event.x, event.y )) {
|
||||
// root.popouts.hasCurrent = false;
|
||||
// } else if (root.visibilities.sidebar && !inRightPanel( panels.sidebar, event.x, event.y )) {
|
||||
// root.visibilities.sidebar = false;
|
||||
// } else if (root.visibilities.dashboard && !inTopPanel( panels.dashboard, event.x, event.y )) {
|
||||
// root.visibilities.dashboard = false;
|
||||
// }
|
||||
// }
|
||||
|
||||
onContainsMouseChanged: {
|
||||
if (!containsMouse) {
|
||||
@@ -71,7 +71,7 @@ CustomMouseArea {
|
||||
root.panels.osd.hovered = false;
|
||||
}
|
||||
|
||||
if (!popouts.currentName.startsWith("traymenu") || (popouts.current?.depth ?? 0) <= 1) {
|
||||
if (!popouts.currentName.startsWith("traymenu")) {
|
||||
popouts.hasCurrent = false;
|
||||
}
|
||||
|
||||
@@ -223,6 +223,13 @@ CustomMouseArea {
|
||||
}
|
||||
}
|
||||
|
||||
function onSidebarChanged() {
|
||||
if ( root.visibilities.sidebar ) {
|
||||
root.visibilities.dashboard = false;
|
||||
root.popouts.hasCurrent = false;
|
||||
}
|
||||
}
|
||||
|
||||
function onDashboardChanged() {
|
||||
if (root.visibilities.dashboard) {
|
||||
// Dashboard became visible, immediately check if this should be shortcut mode
|
||||
@@ -230,9 +237,14 @@ CustomMouseArea {
|
||||
if (!inDashboardArea) {
|
||||
root.dashboardShortcutActive = true;
|
||||
}
|
||||
|
||||
root.visibilities.sidebar = false;
|
||||
root.popouts.hasCurrent = false;
|
||||
|
||||
} else {
|
||||
// Dashboard hidden, clear shortcut flag
|
||||
root.dashboardShortcutActive = false;
|
||||
// root.visibilities.bar = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -29,7 +29,10 @@ Item {
|
||||
|
||||
anchors.fill: parent
|
||||
// anchors.margins: 8
|
||||
anchors.topMargin: bar.implicitHeight
|
||||
anchors.topMargin: Config.barConfig.autoHide && !visibilities.bar ? 0 : bar.implicitHeight
|
||||
Behavior on anchors.topMargin {
|
||||
Modules.Anim {}
|
||||
}
|
||||
|
||||
Osd.Wrapper {
|
||||
id: osd
|
||||
|
||||
@@ -48,6 +48,22 @@ Scope {
|
||||
}
|
||||
}
|
||||
|
||||
IpcHandler {
|
||||
target: "picker"
|
||||
|
||||
function open(): void {
|
||||
root.freeze = false;
|
||||
root.closing = false;
|
||||
root.activeAsync = true;
|
||||
}
|
||||
|
||||
function openFreeze(): void {
|
||||
root.freeze = true;
|
||||
root.closing = false;
|
||||
root.activeAsync = true;
|
||||
}
|
||||
}
|
||||
|
||||
CustomShortcut {
|
||||
name: "screenshot"
|
||||
onPressed: {
|
||||
|
||||
@@ -201,7 +201,7 @@ Singleton {
|
||||
if (isAppleDisplay)
|
||||
Quickshell.execDetached(["asdbctl", "set", rounded]);
|
||||
else if (isDdc)
|
||||
Quickshell.execDetached(["ddcutil", "-b", busNum, "setvcp", "10", rounded]);
|
||||
Quickshell.execDetached(["ddcutil", "--disable-dynamic-sleep", "--sleep-multiplier", ".1", "--skip-ddc-checks", "-b", busNum, "setvcp", "10", rounded]);
|
||||
else
|
||||
Quickshell.execDetached(["brightnessctl", "s", `${rounded}%`]);
|
||||
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import qs.Modules
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Paths
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
readonly property int darkStart: Config.general.color.scheduleDarkStart
|
||||
readonly property int darkEnd: Config.general.color.scheduleDarkEnd
|
||||
|
||||
Timer {
|
||||
id: darkModeTimer
|
||||
|
||||
interval: 5000
|
||||
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
if ( darkStart === darkEnd )
|
||||
return;
|
||||
var now = new Date();
|
||||
if ( now.getHours() >= darkStart || now.getHours() < darkEnd ) {
|
||||
if ( DynamicColors.light )
|
||||
applyDarkMode();
|
||||
} else {
|
||||
if ( !DynamicColors.light )
|
||||
applyLightMode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function applyDarkMode() {
|
||||
if ( Config.general.color.schemeGeneration ) {
|
||||
Quickshell.execDetached(["zshell-cli", "scheme", "generate", "--image-path", `${WallpaperPath.currentWallpaperPath}`, "--thumbnail-path", `${Paths.cache}/imagecache/thumbnail.jpg`, "--output", `${Paths.state}/scheme.json`, "--scheme", `${Config.colors.schemeType}`, "--mode", "dark"]);
|
||||
} else {
|
||||
Quickshell.execDetached(["zshell-cli", "scheme", "generate", "--preset", `${DynamicColors.scheme}:${DynamicColors.flavour}`, "--output", `${Paths.state}/scheme.json`, "--mode", "dark"]);
|
||||
}
|
||||
|
||||
Config.general.color.mode = "dark";
|
||||
|
||||
Quickshell.execDetached(["gsettings", "set", "org.gnome.desktop.interface", "color-scheme", "'prefer-dark'"])
|
||||
|
||||
Quickshell.execDetached(["sh", "-c", `sed -i 's/color_scheme_path=\\(.*\\)Light.colors/color_scheme_path=\\1Dark.colors/' ${Paths.home}/.config/qt6ct/qt6ct.conf`])
|
||||
|
||||
Quickshell.execDetached(["sed", "-i", "'s/\\(vim.cmd.colorscheme \\).*/\\1\"tokyodark\"/'", "~/.config/nvim/lua/config/load-colorscheme.lua"])
|
||||
|
||||
if( Config.general.color.wallust )
|
||||
Wallust.generateColors(WallpaperPath.currentWallpaperPath);
|
||||
}
|
||||
|
||||
function applyLightMode() {
|
||||
if ( Config.general.color.neovimColors ) {
|
||||
Quickshell.execDetached(["zshell-cli", "scheme", "generate", "--image-path", `${WallpaperPath.currentWallpaperPath}`, "--thumbnail-path", `${Paths.cache}/imagecache/thumbnail.jpg`, "--output", `${Paths.state}/scheme.json`, "--scheme", `${Config.colors.schemeType}`, "--mode", "light"]);
|
||||
} else {
|
||||
Quickshell.execDetached(["zshell-cli", "scheme", "generate", "--preset", `${DynamicColors.scheme}:${DynamicColors.flavour}`, "--output", `${Paths.state}/scheme.json`, "--mode", "light"]);
|
||||
}
|
||||
|
||||
Config.general.color.mode = "light";
|
||||
|
||||
Quickshell.execDetached(["gsettings", "set", "org.gnome.desktop.interface", "color-scheme", "'prefer-light'"])
|
||||
|
||||
Quickshell.execDetached(["sh", "-c", `sed -i 's/color_scheme_path=\\(.*\\)Dark.colors/color_scheme_path=\\1Light.colors/' ${Paths.home}/.config/qt6ct/qt6ct.conf`])
|
||||
|
||||
if ( Config.general.color.neovimColors )
|
||||
Quickshell.execDetached(["sed", "-i", "'s/\\(vim.cmd.colorscheme \\).*/\\1\"onelight\"/'", "~/.config/nvim/lua/config/load-colorscheme.lua"])
|
||||
|
||||
if( Config.general.color.wallust )
|
||||
Wallust.generateColors(WallpaperPath.currentWallpaperPath);
|
||||
}
|
||||
|
||||
function checkStartup() {
|
||||
if ( darkStart === darkEnd )
|
||||
return;
|
||||
var now = new Date();
|
||||
if ( now.getHours() >= darkStart || now.getHours() < darkEnd ) {
|
||||
applyDarkMode();
|
||||
} else {
|
||||
applyLightMode();
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -246,7 +246,7 @@ MouseArea {
|
||||
color: "transparent"
|
||||
radius: root.realRounding > 0 ? root.realRounding + root.realBorderWidth : 0
|
||||
border.width: root.realBorderWidth
|
||||
border.color: Config.accentColor.accents.primary
|
||||
border.color: DynamicColors.palette.m3primary
|
||||
|
||||
x: selectionRect.x - root.realBorderWidth
|
||||
y: selectionRect.y - root.realBorderWidth
|
||||
|
||||
+14
-3
@@ -19,19 +19,22 @@ Searcher {
|
||||
function setWallpaper(path: string): void {
|
||||
actualCurrent = path;
|
||||
WallpaperPath.currentWallpaperPath = path;
|
||||
if ( Config.general.color.wallust )
|
||||
Wallust.generateColors(WallpaperPath.currentWallpaperPath);
|
||||
Quickshell.execDetached(["sh", "-c", `python3 ${Quickshell.shellPath("scripts/LockScreenBg.py")} --input_image=${root.actualCurrent} --output_path=${Paths.state}/lockscreen_bg.png --blur_amount=${Config.lock.blurAmount}`]);
|
||||
Quickshell.execDetached(["sh", "-c", `zshell-cli wallpaper lockscreen --input-image=${root.actualCurrent} --output-path=${Paths.state}/lockscreen_bg.png --blur-amount=${Config.lock.blurAmount}`]);
|
||||
}
|
||||
|
||||
function preview(path: string): void {
|
||||
previewPath = path;
|
||||
Quickshell.execDetached(["sh", "-c", `python3 ${Quickshell.shellPath("scripts/SchemeColorGen.py")} --path=${previewPath} --thumbnail=${Paths.cache}/imagecache/thumbnail.jpg --output=${Paths.state}/scheme.json --scheme=${Config.colors.schemeType}`]);
|
||||
if ( Config.general.color.schemeGeneration )
|
||||
Quickshell.execDetached(["sh", "-c", `zshell-cli scheme generate --image-path ${previewPath} --thumbnail-path ${Paths.cache}/imagecache/thumbnail.jpg --output ${Paths.state}/scheme.json --scheme ${Config.colors.schemeType} --mode ${Config.general.color.mode}`]);
|
||||
showPreview = true;
|
||||
}
|
||||
|
||||
function stopPreview(): void {
|
||||
showPreview = false;
|
||||
Quickshell.execDetached(["sh", "-c", `python3 ${Quickshell.shellPath("scripts/SchemeColorGen.py")} --path=${root.actualCurrent} --thumbnail=${Paths.cache}/imagecache/thumbnail.jpg --output=${Paths.state}/scheme.json --scheme=${Config.colors.schemeType}`]);
|
||||
if ( Config.general.color.schemeGeneration )
|
||||
Quickshell.execDetached(["sh", "-c", `zshell-cli scheme generate --image-path ${root.actualCurrent} --thumbnail-path ${Paths.cache}/imagecache/thumbnail.jpg --output ${Paths.state}/scheme.json --scheme ${Config.colors.schemeType} --mode ${Config.general.color.mode}`]);
|
||||
}
|
||||
|
||||
list: wallpapers.entries
|
||||
@@ -41,6 +44,14 @@ Searcher {
|
||||
forward: false
|
||||
})
|
||||
|
||||
IpcHandler {
|
||||
target: "wallpaper"
|
||||
|
||||
function set(path: string): void {
|
||||
root.setWallpaper(path);
|
||||
}
|
||||
}
|
||||
|
||||
FileSystemModel {
|
||||
id: wallpapers
|
||||
|
||||
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
+78
-144
@@ -14,8 +14,11 @@ import qs.Helpers
|
||||
Item {
|
||||
id: root
|
||||
|
||||
implicitWidth: layout.implicitWidth + 10 * 2
|
||||
implicitHeight: layout.implicitHeight + 10 * 2
|
||||
implicitWidth: layout.implicitWidth + 5 * 2
|
||||
implicitHeight: layout.implicitHeight + 5 * 2
|
||||
|
||||
readonly property int topMargin: 0
|
||||
readonly property int rounding: 6
|
||||
|
||||
required property var wrapper
|
||||
|
||||
@@ -38,7 +41,7 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: tabBar.tabHeight
|
||||
|
||||
color: stack.currentIndex === 0 ? DynamicColors.tPalette.m3primaryContainer : "transparent"
|
||||
color: stack.currentIndex === 0 ? DynamicColors.palette.m3primary : DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
StateLayer {
|
||||
|
||||
@@ -49,6 +52,7 @@ Item {
|
||||
CustomText {
|
||||
text: qsTr("Volumes")
|
||||
anchors.centerIn: parent
|
||||
color: stack.currentIndex === 0 ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3primary
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,7 +62,7 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: tabBar.tabHeight
|
||||
|
||||
color: stack.currentIndex === 1 ? DynamicColors.tPalette.m3primaryContainer : "transparent"
|
||||
color: stack.currentIndex === 1 ? DynamicColors.palette.m3primary : DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
StateLayer {
|
||||
|
||||
@@ -69,6 +73,7 @@ Item {
|
||||
CustomText {
|
||||
text: qsTr("Devices")
|
||||
anchors.centerIn: parent
|
||||
color: stack.currentIndex === 1 ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3primary
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,19 +131,31 @@ Item {
|
||||
component VolumesTab: ColumnLayout {
|
||||
spacing: 12
|
||||
|
||||
CustomRect {
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
Layout.fillWidth: true
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
radius: root.rounding
|
||||
|
||||
RowLayout {
|
||||
Layout.topMargin: 10
|
||||
id: outputVolume
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Appearance.spacing.smaller
|
||||
spacing: 15
|
||||
Rectangle {
|
||||
CustomRect {
|
||||
Layout.preferredWidth: 40
|
||||
Layout.preferredHeight: 40
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
color: DynamicColors.tPalette.m3primaryContainer
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
MaterialIcon {
|
||||
anchors.centerIn: parent
|
||||
color: DynamicColors.palette.m3onPrimaryContainer
|
||||
text: "volume_up"
|
||||
color: DynamicColors.palette.m3onPrimary
|
||||
text: "speaker"
|
||||
font.pointSize: 22
|
||||
}
|
||||
}
|
||||
@@ -167,7 +184,9 @@ Item {
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
CustomSlider {
|
||||
anchors.fill: parent
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
implicitHeight: 10
|
||||
value: Audio.volume
|
||||
onMoved: Audio.setVolume(value)
|
||||
|
||||
@@ -176,21 +195,34 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CustomRect {
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
radius: root.rounding
|
||||
|
||||
RowLayout {
|
||||
Layout.topMargin: 10
|
||||
id: inputVolume
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Appearance.spacing.smaller
|
||||
spacing: 15
|
||||
Rectangle {
|
||||
Layout.preferredWidth: 40
|
||||
Layout.preferredHeight: 40
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
color: DynamicColors.tPalette.m3primaryContainer
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
MaterialIcon {
|
||||
anchors.centerIn: parent
|
||||
anchors.alignWhenCentered: false
|
||||
color: DynamicColors.palette.m3onPrimaryContainer
|
||||
color: DynamicColors.palette.m3onPrimary
|
||||
text: "mic"
|
||||
font.pointSize: 22
|
||||
}
|
||||
@@ -221,7 +253,9 @@ Item {
|
||||
implicitHeight: 10
|
||||
|
||||
CustomSlider {
|
||||
anchors.fill: parent
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
implicitHeight: 10
|
||||
value: Audio.sourceVolume
|
||||
onMoved: Audio.setSourceVolume(value)
|
||||
|
||||
@@ -230,9 +264,10 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.topMargin: 10
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 1
|
||||
|
||||
@@ -240,142 +275,41 @@ Item {
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: Audio.appStreams
|
||||
model: Audio.streams.filter(s => s.isSink)
|
||||
|
||||
Item {
|
||||
CustomRect {
|
||||
id: appBox
|
||||
|
||||
Layout.topMargin: 10
|
||||
Layout.topMargin: root.topMargin
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 42
|
||||
visible: !isCaptureStream
|
||||
required property PwNode modelData
|
||||
Layout.preferredHeight: 42 + Appearance.spacing.smaller * 2
|
||||
color: DynamicColors.tPalette.m3surfaceContainer
|
||||
|
||||
function isValidMatch(searchTerm, entry) {
|
||||
if (!entry)
|
||||
return false;
|
||||
var search = searchTerm.toLowerCase();
|
||||
var id = (entry.id || "").toLowerCase();
|
||||
var name = (entry.name || "").toLowerCase();
|
||||
var icon = (entry.icon || "").toLowerCase();
|
||||
// Match is valid if search term appears in entry or entry appears in search
|
||||
return id.includes(search) || name.includes(search) || icon.includes(search) || search.includes(id.split('.').pop()) || search.includes(name.replace(/\s+/g, ''));
|
||||
}
|
||||
radius: root.rounding
|
||||
|
||||
readonly property string appName: {
|
||||
if (!modelData)
|
||||
return "Unknown App";
|
||||
|
||||
var props = modelData.properties;
|
||||
var desc = modelData.description || "";
|
||||
var name = modelData.name || "";
|
||||
var mediaName = props["media.name"] || "";
|
||||
|
||||
if ( mediaName !== "playStream" ) {
|
||||
return mediaName;
|
||||
}
|
||||
|
||||
if (!props) {
|
||||
if (desc)
|
||||
return desc;
|
||||
if (name) {
|
||||
var nameParts = name.split(/[-_]/);
|
||||
if (nameParts.length > 0 && nameParts[0])
|
||||
return nameParts[0].charAt(0).toUpperCase() + nameParts[0].slice(1);
|
||||
return name;
|
||||
}
|
||||
return "Unknown App";
|
||||
}
|
||||
|
||||
var binaryName = props["application.process.binary"] || "";
|
||||
|
||||
// Try binary name first (fixes Electron apps like vesktop)
|
||||
if (binaryName) {
|
||||
var binParts = binaryName.split("/");
|
||||
if (binParts.length > 0) {
|
||||
var binName = binParts[binParts.length - 1].toLowerCase();
|
||||
var entry = ThemeIcons.findAppEntry(binName);
|
||||
// Only use entry if it's actually related to binary name
|
||||
if (entry && entry.name && isValidMatch(binName, entry))
|
||||
return entry.name;
|
||||
}
|
||||
}
|
||||
|
||||
var computedAppName = props["application.name"] || "";
|
||||
var mediaName = props["media.name"] || "";
|
||||
var appId = props["application.id"] || "";
|
||||
|
||||
if (appId) {
|
||||
var entry = ThemeIcons.findAppEntry(appId);
|
||||
if (entry && entry.name && isValidMatch(appId, entry))
|
||||
return entry.name;
|
||||
if (!computedAppName) {
|
||||
var parts = appId.split(".");
|
||||
if (parts.length > 0 && parts[0])
|
||||
computedAppName = parts[0].charAt(0).toUpperCase() + parts[0].slice(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (!computedAppName && binaryName) {
|
||||
var binParts = binaryName.split("/");
|
||||
if (binParts.length > 0 && binParts[binParts.length - 1])
|
||||
computedAppName = binParts[binParts.length - 1].charAt(0).toUpperCase() + binParts[binParts.length - 1].slice(1);
|
||||
}
|
||||
|
||||
var result = computedAppName || mediaTitle || mediaName || binaryName || desc || name;
|
||||
|
||||
if (!result || result === "" || result === "Unknown App") {
|
||||
if (name) {
|
||||
var nameParts = name.split(/[-_]/);
|
||||
if (nameParts.length > 0 && nameParts[0])
|
||||
result = nameParts[0].charAt(0).toUpperCase() + nameParts[0].slice(1);
|
||||
}
|
||||
}
|
||||
|
||||
return result || "Unknown App";
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
objects: appBox.modelData ? [appBox.modelData] : []
|
||||
}
|
||||
|
||||
PwNodePeakMonitor {
|
||||
id: peak
|
||||
node: appBox.modelData
|
||||
}
|
||||
|
||||
readonly property bool isCaptureStream: {
|
||||
if (!modelData || !modelData.properties)
|
||||
return false;
|
||||
const props = modelData.properties;
|
||||
// Exclude capture streams - check for stream.capture.sink property
|
||||
if (props["stream.capture.sink"] !== undefined) {
|
||||
return true;
|
||||
}
|
||||
const mediaClass = props["media.class"] || "";
|
||||
// Exclude Stream/Input (capture) but allow Stream/Output (playback)
|
||||
if (mediaClass.includes("Capture") || mediaClass === "Stream/Input" || mediaClass === "Stream/Input/Audio") {
|
||||
return true;
|
||||
}
|
||||
const mediaRole = props["media.role"] || "";
|
||||
if (mediaRole === "Capture") {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
required property var modelData
|
||||
required property int index
|
||||
|
||||
RowLayout {
|
||||
id: layoutVolume
|
||||
anchors.fill: parent
|
||||
anchors.margins: Appearance.spacing.smaller
|
||||
spacing: 15
|
||||
|
||||
IconImage {
|
||||
id: icon
|
||||
property string iconPath1: Quickshell.iconPath(DesktopEntries.byId(appBox.modelData.name).icon);
|
||||
property string iconPath2: Quickshell.iconPath(DesktopEntries.byId(appBox.appName).icon);
|
||||
source: iconPath1 !== "" ? iconPath1 : iconPath2
|
||||
|
||||
CustomRect {
|
||||
Layout.preferredWidth: 40
|
||||
Layout.preferredHeight: 40
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
implicitSize: 42
|
||||
color: DynamicColors.palette.m3primary
|
||||
radius: 1000
|
||||
MaterialIcon {
|
||||
id: icon
|
||||
anchors.centerIn: parent
|
||||
text: "volume_up"
|
||||
font.pointSize: 22
|
||||
color: DynamicColors.palette.m3onPrimary
|
||||
|
||||
StateLayer {
|
||||
radius: 1000
|
||||
@@ -384,6 +318,7 @@ Item {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
||||
@@ -391,7 +326,7 @@ Item {
|
||||
|
||||
TextMetrics {
|
||||
id: metrics
|
||||
text: appBox.appName
|
||||
text: Audio.getStreamName(appBox.modelData)
|
||||
elide: Text.ElideRight
|
||||
elideWidth: root.width - 50
|
||||
}
|
||||
@@ -419,15 +354,14 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.bottomMargin: 5
|
||||
implicitHeight: 10
|
||||
CustomAudioSlider {
|
||||
anchors.fill: parent
|
||||
CustomSlider {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
implicitHeight: 10
|
||||
value: appBox.modelData.audio.volume
|
||||
peak: peak.peak
|
||||
onMoved: {
|
||||
Audio.setAppAudioVolume(appBox.modelData, value)
|
||||
console.log(icon.iconPath1, icon.iconPath2)
|
||||
Audio.setStreamVolume(appBox.modelData, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-17
@@ -2,6 +2,7 @@ import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell.Io
|
||||
import Quickshell.Services.Pipewire
|
||||
import qs.Daemons
|
||||
import qs.Modules
|
||||
import qs.Config
|
||||
import qs.Components
|
||||
@@ -13,7 +14,7 @@ Item {
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
property bool expanded: false
|
||||
property color textColor: DynamicColors.palette.m3tertiaryFixed
|
||||
property color textColor: DynamicColors.palette.m3onSurface
|
||||
property color barColor: DynamicColors.palette.m3primary
|
||||
|
||||
Behavior on implicitWidth {
|
||||
@@ -23,14 +24,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
objects: [ Pipewire.defaultAudioSink ]
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
objects: [ Pipewire.defaultAudioSource ]
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
@@ -63,8 +56,8 @@ Item {
|
||||
MaterialIcon {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
font.pixelSize: 18
|
||||
text: "volume_up"
|
||||
color: Pipewire.defaultAudioSink?.audio.muted ? DynamicColors.palette.m3error : root.textColor
|
||||
text: Audio.muted ? "volume_off" : "volume_up"
|
||||
color: Audio.muted ? DynamicColors.palette.m3error : root.textColor
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
@@ -82,9 +75,9 @@ Item {
|
||||
bottom: parent.bottom
|
||||
}
|
||||
|
||||
implicitWidth: parent.width * ( Pipewire.defaultAudioSink?.audio.volume ?? 0 )
|
||||
implicitWidth: parent.width * ( Audio.volume ?? 0 )
|
||||
radius: parent.radius
|
||||
color: Pipewire.defaultAudioSink?.audio.muted ? DynamicColors.palette.m3error : root.barColor
|
||||
color: Audio.muted ? DynamicColors.palette.m3error : root.barColor
|
||||
Behavior on color {
|
||||
CAnim {}
|
||||
}
|
||||
@@ -94,8 +87,8 @@ Item {
|
||||
MaterialIcon {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
font.pixelSize: 18
|
||||
text: Pipewire.defaultAudioSource?.audio.muted ? "mic_off" : "mic"
|
||||
color: ( Pipewire.defaultAudioSource?.audio.muted ?? false ) ? DynamicColors.palette.m3error : root.textColor
|
||||
text: Audio.sourceMuted ? "mic_off" : "mic"
|
||||
color: ( Audio.sourceMuted ?? false ) ? DynamicColors.palette.m3error : root.textColor
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
@@ -113,9 +106,9 @@ Item {
|
||||
bottom: parent.bottom
|
||||
}
|
||||
|
||||
implicitWidth: parent.width * ( Pipewire.defaultAudioSource?.audio.volume ?? 0 )
|
||||
implicitWidth: parent.width * ( Audio.sourceVolume ?? 0 )
|
||||
radius: parent.radius
|
||||
color: ( Pipewire.defaultAudioSource?.audio.muted ?? false ) ? DynamicColors.palette.m3error : root.barColor
|
||||
color: ( Audio.sourceMuted ?? false ) ? DynamicColors.palette.m3error : root.barColor
|
||||
|
||||
Behavior on color {
|
||||
CAnim {}
|
||||
|
||||
+2
-10
@@ -7,6 +7,7 @@ import qs.Helpers as Helpers
|
||||
import qs.Components
|
||||
|
||||
Item {
|
||||
id: root
|
||||
required property PersistentProperties visibilities
|
||||
required property Wrapper popouts
|
||||
required property RowLayout loader
|
||||
@@ -27,7 +28,7 @@ Item {
|
||||
anchors.centerIn: parent
|
||||
|
||||
text: Time.dateStr
|
||||
color: DynamicColors.palette.m3tertiary
|
||||
color: DynamicColors.palette.m3onSurface
|
||||
|
||||
Behavior on color {
|
||||
CAnim {}
|
||||
@@ -38,15 +39,6 @@ Item {
|
||||
acceptedButtons: Qt.LeftButton
|
||||
onClicked: {
|
||||
root.visibilities.dashboard = !root.visibilities.dashboard;
|
||||
if ( root.visibilities.sidebar || root.popouts.hasCurrent ) {
|
||||
// Helpers.Calendar.displayYear = new Date().getFullYear();
|
||||
// Helpers.Calendar.displayMonth = new Date().getMonth();
|
||||
// root.popouts.currentName = "calendar";
|
||||
// root.popouts.currentCenter = Qt.binding( () => item.mapToItem( root.loader, root.implicitWidth / 2, 0 ).x );
|
||||
// root.popouts.hasCurrent = true;
|
||||
root.popouts.hasCurrent = false;
|
||||
root.visibilities.sidebar = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
pragma Singleton
|
||||
|
||||
import qs.Config
|
||||
import ZShell.Services
|
||||
import ZShell
|
||||
import Quickshell
|
||||
import Quickshell.Services.Pipewire
|
||||
import QtQuick
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
property string previousSinkName: ""
|
||||
property string previousSourceName: ""
|
||||
|
||||
readonly property var nodes: Pipewire.nodes.values.reduce((acc, node) => {
|
||||
if (!node.isStream) {
|
||||
if (node.isSink)
|
||||
acc.sinks.push(node);
|
||||
else if (node.audio)
|
||||
acc.sources.push(node);
|
||||
} else if (node.isStream && node.audio) {
|
||||
// Application streams (output streams)
|
||||
acc.streams.push(node);
|
||||
}
|
||||
return acc;
|
||||
}, {
|
||||
sources: [],
|
||||
sinks: [],
|
||||
streams: []
|
||||
})
|
||||
|
||||
readonly property list<PwNode> sinks: nodes.sinks
|
||||
readonly property list<PwNode> sources: nodes.sources
|
||||
readonly property list<PwNode> streams: nodes.streams
|
||||
|
||||
readonly property PwNode sink: Pipewire.defaultAudioSink
|
||||
readonly property PwNode source: Pipewire.defaultAudioSource
|
||||
|
||||
readonly property bool muted: !!sink?.audio?.muted
|
||||
readonly property real volume: sink?.audio?.volume ?? 0
|
||||
|
||||
readonly property bool sourceMuted: !!source?.audio?.muted
|
||||
readonly property real sourceVolume: source?.audio?.volume ?? 0
|
||||
|
||||
readonly property alias beatTracker: beatTracker
|
||||
|
||||
function setVolume(newVolume: real): void {
|
||||
if (sink?.ready && sink?.audio) {
|
||||
sink.audio.muted = false;
|
||||
sink.audio.volume = Math.max(0, Math.min(Config.services.maxVolume, newVolume));
|
||||
}
|
||||
}
|
||||
|
||||
function incrementVolume(amount: real): void {
|
||||
setVolume(volume + (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function decrementVolume(amount: real): void {
|
||||
setVolume(volume - (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function setSourceVolume(newVolume: real): void {
|
||||
if (source?.ready && source?.audio) {
|
||||
source.audio.muted = false;
|
||||
source.audio.volume = Math.max(0, Math.min(Config.services.maxVolume, newVolume));
|
||||
}
|
||||
}
|
||||
|
||||
function incrementSourceVolume(amount: real): void {
|
||||
setSourceVolume(sourceVolume + (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function decrementSourceVolume(amount: real): void {
|
||||
setSourceVolume(sourceVolume - (amount || Config.services.audioIncrement));
|
||||
}
|
||||
|
||||
function setAudioSink(newSink: PwNode): void {
|
||||
Pipewire.preferredDefaultAudioSink = newSink;
|
||||
}
|
||||
|
||||
function setAudioSource(newSource: PwNode): void {
|
||||
Pipewire.preferredDefaultAudioSource = newSource;
|
||||
}
|
||||
|
||||
function setStreamVolume(stream: PwNode, newVolume: real): void {
|
||||
if (stream?.ready && stream?.audio) {
|
||||
stream.audio.muted = false;
|
||||
stream.audio.volume = Math.max(0, Math.min(Config.services.maxVolume, newVolume));
|
||||
}
|
||||
}
|
||||
|
||||
function setStreamMuted(stream: PwNode, muted: bool): void {
|
||||
if (stream?.ready && stream?.audio) {
|
||||
stream.audio.muted = muted;
|
||||
}
|
||||
}
|
||||
|
||||
function getStreamVolume(stream: PwNode): real {
|
||||
return stream?.audio?.volume ?? 0;
|
||||
}
|
||||
|
||||
function getStreamMuted(stream: PwNode): bool {
|
||||
return !!stream?.audio?.muted;
|
||||
}
|
||||
|
||||
function getStreamName(stream: PwNode): string {
|
||||
if (!stream)
|
||||
return qsTr("Unknown");
|
||||
// Try application name first, then description, then name
|
||||
return stream.applicationName || stream.description || stream.name || qsTr("Unknown Application");
|
||||
}
|
||||
|
||||
onSinkChanged: {
|
||||
if (!sink?.ready)
|
||||
return;
|
||||
|
||||
const newSinkName = sink.description || sink.name || qsTr("Unknown Device");
|
||||
|
||||
previousSinkName = newSinkName;
|
||||
}
|
||||
|
||||
onSourceChanged: {
|
||||
if (!source?.ready)
|
||||
return;
|
||||
|
||||
const newSourceName = source.description || source.name || qsTr("Unknown Device");
|
||||
|
||||
previousSourceName = newSourceName;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
previousSinkName = sink?.description || sink?.name || qsTr("Unknown Device");
|
||||
previousSourceName = source?.description || source?.name || qsTr("Unknown Device");
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
objects: [...root.sinks, ...root.sources, ...root.streams]
|
||||
}
|
||||
|
||||
BeatTracker {
|
||||
id: beatTracker
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import ZShell.Services
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
import qs.Daemons
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Helpers
|
||||
|
||||
@@ -32,19 +32,19 @@ Row {
|
||||
Resource {
|
||||
icon: "gamepad"
|
||||
value: SystemUsage.gpuPerc
|
||||
color: DynamicColors.palette.m3primaryFixed
|
||||
color: DynamicColors.palette.m3tertiary
|
||||
}
|
||||
|
||||
Resource {
|
||||
icon: "host"
|
||||
value: SystemUsage.gpuMemUsed
|
||||
color: DynamicColors.palette.m3secondaryFixed
|
||||
color: DynamicColors.palette.m3primary
|
||||
}
|
||||
|
||||
Resource {
|
||||
icon: "hard_disk"
|
||||
value: SystemUsage.storagePerc
|
||||
color: DynamicColors.palette.m3tertiary
|
||||
color: DynamicColors.palette.m3secondary
|
||||
}
|
||||
|
||||
component Resource: Item {
|
||||
|
||||
@@ -3,6 +3,7 @@ pragma ComponentBehavior: Bound
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import Quickshell.Io
|
||||
import QtQuick
|
||||
import QtQuick.Effects
|
||||
import qs.Components
|
||||
@@ -33,6 +34,14 @@ Scope {
|
||||
lock: lock
|
||||
}
|
||||
|
||||
IpcHandler {
|
||||
target: "lock"
|
||||
|
||||
function lock() {
|
||||
return lock.locked = true;
|
||||
}
|
||||
}
|
||||
|
||||
CustomShortcut {
|
||||
name: "lock"
|
||||
description: "Lock the current session"
|
||||
|
||||
@@ -26,7 +26,7 @@ Item {
|
||||
|
||||
anchors.centerIn: parent
|
||||
|
||||
property color iconColor: DynamicColors.palette.m3tertiaryFixed
|
||||
property color iconColor: DynamicColors.palette.m3onSurface
|
||||
|
||||
text: HasNotifications.hasNotifications ? "\uf4fe" : "\ue7f4"
|
||||
font.family: "Material Symbols Rounded"
|
||||
@@ -42,10 +42,6 @@ Item {
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: {
|
||||
root.visibilities.sidebar = !root.visibilities.sidebar;
|
||||
if ( root.visibilities.dashboard || root.popouts.hasCurrent ) {
|
||||
root.popouts.hasCurrent = false;
|
||||
root.visibilities.dashboard = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,8 +18,10 @@ ShapePath {
|
||||
readonly property real utilsWidthDiff: panels.utilities.width - wrapper.width
|
||||
readonly property real utilsRoundingX: utilsWidthDiff < rounding * 2 ? utilsWidthDiff / 2 : rounding
|
||||
|
||||
readonly property bool flatten: wrapper.width < rounding * 2
|
||||
|
||||
strokeWidth: -1
|
||||
fillColor: DynamicColors.palette.m3surface
|
||||
fillColor: flatten ? "transparent" : DynamicColors.palette.m3surface
|
||||
|
||||
PathLine {
|
||||
relativeX: -root.wrapper.width - root.notifsRoundingX
|
||||
|
||||
+11
-2
@@ -5,7 +5,7 @@ import QtQuick.Layouts
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules.Dashboard.Dash
|
||||
import qs.Daemons
|
||||
import qs.Modules as Modules
|
||||
|
||||
Item {
|
||||
@@ -47,6 +47,7 @@ Item {
|
||||
icon: Icons.getVolumeIcon(value, root.muted)
|
||||
value: root.volume
|
||||
to: Config.services.maxVolume
|
||||
color: Audio.muted ? DynamicColors.palette.m3error : DynamicColors.palette.m3secondary
|
||||
onMoved: Audio.setVolume(value)
|
||||
}
|
||||
}
|
||||
@@ -101,7 +102,15 @@ Item {
|
||||
|
||||
icon: `brightness_${(Math.round(value * 6) + 1)}`
|
||||
value: root.brightness
|
||||
onMoved: root.monitor?.setBrightness(value)
|
||||
onMoved: {
|
||||
if ( Config.osd.allMonBrightness ) {
|
||||
root.monitor?.setBrightness(value)
|
||||
} else {
|
||||
for (const mon of Brightness.monitors) {
|
||||
mon.setBrightness(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import qs.Modules.Dashboard.Dash
|
||||
import qs.Daemons
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -105,14 +105,6 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
CustomShortcut {
|
||||
name: "show-osd"
|
||||
|
||||
onPressed: {
|
||||
root.show();
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: timer
|
||||
|
||||
|
||||
@@ -15,8 +15,9 @@ Item {
|
||||
implicitWidth: resourceRowLayout.x < 0 ? 0 : resourceRowLayout.implicitWidth
|
||||
implicitHeight: 22
|
||||
property bool warning: percentage * 100 >= warningThreshold
|
||||
property color usageColor: warning ? DynamicColors.palette.m3error : DynamicColors.palette.m3primary
|
||||
property color borderColor: warning ? DynamicColors.palette.m3onError : DynamicColors.palette.m3onPrimary
|
||||
required property color mainColor
|
||||
property color usageColor: warning ? DynamicColors.palette.m3error : mainColor
|
||||
property color borderColor: warning ? DynamicColors.palette.m3onError : mainColor
|
||||
|
||||
Behavior on percentage {
|
||||
NumberAnimation {
|
||||
|
||||
@@ -69,7 +69,7 @@ Item {
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
text: root.details
|
||||
font.pointSize: 10
|
||||
color: "#cccccc"
|
||||
color: root.textColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ Item {
|
||||
id: root
|
||||
implicitWidth: rowLayout.implicitWidth + rowLayout.anchors.leftMargin + rowLayout.anchors.rightMargin
|
||||
implicitHeight: 34
|
||||
property color textColor: DynamicColors.palette.m3tertiaryFixed
|
||||
clip: true
|
||||
|
||||
Rectangle {
|
||||
@@ -41,46 +40,50 @@ Item {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
font.pixelSize: 18
|
||||
text: "memory_alt"
|
||||
color: root.textColor
|
||||
color: DynamicColors.palette.m3onSurface
|
||||
}
|
||||
|
||||
Resource {
|
||||
percentage: ResourceUsage.memoryUsedPercentage
|
||||
warningThreshold: 95
|
||||
mainColor: DynamicColors.palette.m3primary
|
||||
}
|
||||
|
||||
MaterialIcon {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
font.pixelSize: 18
|
||||
text: "memory"
|
||||
color: root.textColor
|
||||
color: DynamicColors.palette.m3onSurface
|
||||
}
|
||||
|
||||
Resource {
|
||||
percentage: ResourceUsage.cpuUsage
|
||||
warningThreshold: 80
|
||||
mainColor: DynamicColors.palette.m3secondary
|
||||
}
|
||||
|
||||
MaterialIcon {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
font.pixelSize: 18
|
||||
text: "gamepad"
|
||||
color: root.textColor
|
||||
color: DynamicColors.palette.m3onSurface
|
||||
}
|
||||
|
||||
Resource {
|
||||
percentage: ResourceUsage.gpuUsage
|
||||
mainColor: DynamicColors.palette.m3tertiary
|
||||
}
|
||||
|
||||
MaterialIcon {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
font.pixelSize: 18
|
||||
text: "developer_board"
|
||||
color: root.textColor
|
||||
color: DynamicColors.palette.m3onSurface
|
||||
}
|
||||
|
||||
Resource {
|
||||
percentage: ResourceUsage.gpuMemUsage
|
||||
mainColor: DynamicColors.palette.m3primary
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ Scope {
|
||||
property bool launcherInterrupted
|
||||
readonly property bool hasFullscreen: Hypr.focusedWorkspace?.toplevels.values.some(t => t.lastIpcObject.fullscreen === 2) ?? false
|
||||
|
||||
|
||||
CustomShortcut {
|
||||
name: "toggle-launcher"
|
||||
description: "Toggle launcher"
|
||||
@@ -22,4 +23,22 @@ Scope {
|
||||
root.launcherInterrupted = false;
|
||||
}
|
||||
}
|
||||
|
||||
CustomShortcut {
|
||||
name: "toggle-nc"
|
||||
|
||||
onPressed: {
|
||||
const visibilities = Visibilities.getForActive()
|
||||
visibilities.sidebar = !visibilities.sidebar
|
||||
}
|
||||
}
|
||||
|
||||
CustomShortcut {
|
||||
name: "show-osd"
|
||||
|
||||
onPressed: {
|
||||
const visibilities = Visibilities.getForActive()
|
||||
visibilities.osd = !visibilities.osd
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
-12
@@ -39,21 +39,31 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
ColoredIcon {
|
||||
id: icon
|
||||
|
||||
property bool batteryHDPI: root.bar.screen.x < 0 && root.item.icon.includes("battery")
|
||||
property bool nmHDPI: root.bar.screen.x < 0 && root.item.icon.includes("nm-")
|
||||
|
||||
anchors.centerIn: parent
|
||||
width: batteryHDPI ? 26 : ( nmHDPI ? 25 : 22 )
|
||||
height: batteryHDPI ? 26 : ( nmHDPI ? 25 : 22 )
|
||||
source: root.item.icon
|
||||
mipmap: true
|
||||
smooth: ( batteryHDPI || nmHDPI ) ? false : true
|
||||
asynchronous: true
|
||||
sourceSize.width: ( batteryHDPI || nmHDPI ) ? 16 : 22
|
||||
sourceSize.height: ( batteryHDPI || nmHDPI ) ? 16 : 22
|
||||
fillMode: Image.PreserveAspectFit
|
||||
implicitSize: 22
|
||||
color: DynamicColors.palette.m3onSurface
|
||||
layer.enabled: DynamicColors.light
|
||||
}
|
||||
|
||||
// Image {
|
||||
// id: icon
|
||||
//
|
||||
// property bool batteryHDPI: root.bar.screen.x < 0 && root.item.icon.includes("battery")
|
||||
// property bool nmHDPI: root.bar.screen.x < 0 && root.item.icon.includes("nm-")
|
||||
//
|
||||
// anchors.centerIn: parent
|
||||
// width: batteryHDPI ? 26 : ( nmHDPI ? 25 : 22 )
|
||||
// height: batteryHDPI ? 26 : ( nmHDPI ? 25 : 22 )
|
||||
// source: root.item.icon
|
||||
// mipmap: true
|
||||
// smooth: ( batteryHDPI || nmHDPI ) ? false : true
|
||||
// asynchronous: true
|
||||
// sourceSize.width: ( batteryHDPI || nmHDPI ) ? 16 : 22
|
||||
// sourceSize.height: ( batteryHDPI || nmHDPI ) ? 16 : 22
|
||||
// fillMode: Image.PreserveAspectFit
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ Item {
|
||||
implicitWidth: textMetrics.width + contentRow.spacing + 30
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
property color textColor: DynamicColors.palette.m3tertiaryFixed
|
||||
property color textColor: DynamicColors.palette.m3onSurface
|
||||
|
||||
Rectangle {
|
||||
anchors.left: parent.left
|
||||
|
||||
+4
-1
@@ -3,11 +3,14 @@ pragma Singleton
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import QtQuick
|
||||
import qs.Config
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
property var args
|
||||
readonly property string mode: Config.general.color.mode
|
||||
readonly property string threshold: mode === "dark" ? "--threshold=9" : "--dynamic-threshold"
|
||||
|
||||
function generateColors(wallpaperPath) {
|
||||
root.args = wallpaperPath;
|
||||
@@ -16,7 +19,7 @@ Singleton {
|
||||
|
||||
Process {
|
||||
id: wallustProc
|
||||
command: ["wallust", "run", root.args, "--palette=dark", "--ignore-sequence=cursor", "--threshold=9" ]
|
||||
command: ["wallust", "run", root.args, `--palette=${root.mode}`, "--ignore-sequence=cursor", `${root.threshold}` ]
|
||||
running: false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<div align="center">
|
||||
<img src="/images/shell.png">
|
||||
</div>
|
||||
|
||||
# ZShell
|
||||
|
||||
A feature-rich desktop shell for Hyprland built with [Quickshell](https://quickshell.outfoxxed.me/) and Qt6/QML. Provides a modern, Material Design 3 inspired status bar, application launcher, notification center, wallpaper manager with dynamic color theming, and lock screen.
|
||||
A feature-rich desktop shell for [Hyprland](https://hypr.land/) built with [Quickshell](https://quickshell.outfoxxed.me/) and Qt6/QML. Provides a modern, Material Design 3 inspired status bar, application launcher, notification center, wallpaper manager with dynamic color theming, and lock screen.
|
||||
|
||||
## Features
|
||||
|
||||
@@ -22,9 +23,16 @@ A feature-rich desktop shell for Hyprland built with [Quickshell](https://quicks
|
||||
- [Hyprland](https://hyprland.org/)
|
||||
- Python 3 with `materialyoucolor` and `Pillow` (for dynamic color generation)
|
||||
- PipeWire (for audio)
|
||||
- Aubio
|
||||
- DDCUtil
|
||||
- Mpris
|
||||
|
||||
## Installation
|
||||
|
||||
### Arch Linux
|
||||
|
||||
For arch-based distros, there is a pkgbuild available at
|
||||
|
||||
```bash
|
||||
cmake -B build -G Ninja
|
||||
ninja -C build
|
||||
@@ -95,14 +103,14 @@ Now you can add z-bar-qt as a nixpkgs in environment.systemPackages (or optional
|
||||
}
|
||||
```
|
||||
|
||||
You can now run ```zshell``` to run the bar.
|
||||
You can now run `zshell` to run the bar.
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration is stored in `~/.config/z-bar/config.json`. Options include:
|
||||
|
||||
| Option | Description |
|
||||
| --------------------------------- | ----------------------------------------------------------- |
|
||||
| :-------------------------------: | :---------------------------------------------------------: |
|
||||
| `appCount` | Max apps shown in launcher |
|
||||
| `wallpaperPath` | Directory containing wallpapers |
|
||||
| `baseBgColor` / `baseBorderColor` | Fallback colors when dynamic colors disabled |
|
||||
@@ -117,7 +125,7 @@ Configuration is stored in `~/.config/z-bar/config.json`. Options include:
|
||||
## Launcher Search Prefixes
|
||||
|
||||
| Prefix | Filter |
|
||||
| ------ | ------------------- |
|
||||
| ------------- | ------------------- |
|
||||
| `>i` | App ID |
|
||||
| `>c` | Categories |
|
||||
| `>d` | Description/comment |
|
||||
@@ -126,7 +134,7 @@ Configuration is stored in `~/.config/z-bar/config.json`. Options include:
|
||||
| `>g` | Generic name |
|
||||
| `>k` | Keywords |
|
||||
| `>t` | Terminal apps only |
|
||||
| `> ` | Wallpaper picker |
|
||||
| `>wallpaper ` | Wallpaper picker |
|
||||
|
||||
## Project Structure
|
||||
|
||||
@@ -143,6 +151,15 @@ Configuration is stored in `~/.config/z-bar/config.json`. Options include:
|
||||
└── scripts/ # Helper scripts (color generation, fuzzy search)
|
||||
```
|
||||
|
||||
## Inspiration and Acknowledgements
|
||||
|
||||
This project was inspired by the following repositories and resources, which helped me learn both Quickshell and QML:
|
||||
|
||||
- [Caelestia](https://github.com/caelestia-dots/shell)
|
||||
- [end-4 dots-hyprland](https://github.com/end-4/dots-hyprland)
|
||||
|
||||
Thank you to the maintainers and contributors of these projects for sharing their work.
|
||||
|
||||
## License
|
||||
|
||||
See repository for license information.
|
||||
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cd "$(dirname $0)/../src" || exit
|
||||
|
||||
python3 -m zshell "$@"
|
||||
@@ -0,0 +1,27 @@
|
||||
[build-system]
|
||||
requires = ["hatchling >= 1.26"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "zshell"
|
||||
requires-python = ">=3.13"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"typer",
|
||||
"pillow",
|
||||
"materialyoucolor"
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
zshell-cli = "zshell:main"
|
||||
|
||||
[tool.hatch.version]
|
||||
source = "vcs"
|
||||
|
||||
[tool.hatch.build.targets.sdist]
|
||||
only-include = [
|
||||
"src",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 120
|
||||
@@ -0,0 +1,14 @@
|
||||
from __future__ import annotations
|
||||
import typer
|
||||
from zshell.subcommands import shell, scheme, screenshot, wallpaper
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
app.add_typer(shell.app, name="shell")
|
||||
app.add_typer(scheme.app, name="scheme")
|
||||
app.add_typer(screenshot.app, name="screenshot")
|
||||
app.add_typer(wallpaper.app, name="wallpaper")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
app()
|
||||
@@ -0,0 +1,4 @@
|
||||
from . import main
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 6674ac
|
||||
secondary_paletteKeyColor 71768e
|
||||
tertiary_paletteKeyColor 9a6593
|
||||
neutral_paletteKeyColor 77767b
|
||||
neutral_variant_paletteKeyColor 757680
|
||||
background 131317
|
||||
onBackground e4e1e7
|
||||
surface 131317
|
||||
surfaceDim 131317
|
||||
surfaceBright 39393d
|
||||
surfaceContainerLowest 0d0e12
|
||||
surfaceContainerLow 1b1b1f
|
||||
surfaceContainer 1f1f23
|
||||
surfaceContainerHigh 292a2e
|
||||
surfaceContainerHighest 343438
|
||||
onSurface e4e1e7
|
||||
surfaceVariant 45464f
|
||||
onSurfaceVariant c6c5d1
|
||||
inverseSurface e4e1e7
|
||||
inverseOnSurface 303034
|
||||
outline 8f909a
|
||||
outlineVariant 45464f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint b7c4ff
|
||||
primary b7c4ff
|
||||
onPrimary 1e2d60
|
||||
primaryContainer 6674ac
|
||||
onPrimaryContainer ffffff
|
||||
inversePrimary 4e5c92
|
||||
secondary c1c5e0
|
||||
onSecondary 2a2f44
|
||||
secondaryContainer 41465c
|
||||
onSecondaryContainer afb4ce
|
||||
tertiary f1b3e6
|
||||
onTertiary 4c1f49
|
||||
tertiaryContainer b67fae
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed dce1ff
|
||||
primaryFixedDim b7c4ff
|
||||
onPrimaryFixed 05164b
|
||||
onPrimaryFixedVariant 364478
|
||||
secondaryFixed dde1fd
|
||||
secondaryFixedDim c1c5e0
|
||||
onSecondaryFixed 151b2e
|
||||
onSecondaryFixedVariant 41465c
|
||||
tertiaryFixed ffd7f5
|
||||
tertiaryFixedDim f1b3e6
|
||||
onTertiaryFixed 330832
|
||||
onTertiaryFixedVariant 653661
|
||||
term0 353434
|
||||
term1 9a7bff
|
||||
term2 44def5
|
||||
term3 ffdcf2
|
||||
term4 92acd6
|
||||
term5 a9a2ed
|
||||
term6 9dceff
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 b299ff
|
||||
term10 89ecff
|
||||
term11 fff0f6
|
||||
term12 b1c2db
|
||||
term13 c1b7f7
|
||||
term14 bae0ff
|
||||
term15 ffffff
|
||||
rosewater f5eff9
|
||||
flamingo e5def4
|
||||
pink dcd9ff
|
||||
mauve b5bbff
|
||||
red b5a9ff
|
||||
maroon c1b7ef
|
||||
peach e0c2f9
|
||||
yellow ffecf3
|
||||
green c8e3ff
|
||||
teal cee1ff
|
||||
sky cadcff
|
||||
sapphire aec7ff
|
||||
blue a6baff
|
||||
lavender bfcaff
|
||||
klink 6685d1
|
||||
klinkSelection 6585d1
|
||||
kvisited 7276dd
|
||||
kvisitedSelection 7276dd
|
||||
knegative 8e70ff
|
||||
knegativeSelection 8e70ff
|
||||
kneutral c794ff
|
||||
kneutralSelection c794ff
|
||||
kpositive 54afff
|
||||
kpositiveSelection 54afff
|
||||
text e4e1e7
|
||||
subtext1 c6c5d1
|
||||
subtext0 8f909a
|
||||
overlay2 7d7d86
|
||||
overlay1 6a6a72
|
||||
overlay0 585960
|
||||
surface2 48484e
|
||||
surface1 37373d
|
||||
surface0 25252a
|
||||
base 131317
|
||||
mantle 131317
|
||||
crust 121216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 417da2
|
||||
secondary_paletteKeyColor 657a8a
|
||||
tertiary_paletteKeyColor 92689d
|
||||
neutral_paletteKeyColor 75777a
|
||||
neutral_variant_paletteKeyColor 71787f
|
||||
background f8f9fc
|
||||
onBackground 191c1e
|
||||
surface f8f9fc
|
||||
surfaceDim d9dadd
|
||||
surfaceBright f8f9fc
|
||||
surfaceContainerLowest ffffff
|
||||
surfaceContainerLow f2f3f7
|
||||
surfaceContainer edeef1
|
||||
surfaceContainerHigh e7e8eb
|
||||
surfaceContainerHighest e1e2e6
|
||||
onSurface 191c1e
|
||||
surfaceVariant dce3eb
|
||||
onSurfaceVariant 41484e
|
||||
inverseSurface 2e3133
|
||||
inverseOnSurface eff1f4
|
||||
outline 6e757c
|
||||
outlineVariant c0c7ce
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 236488
|
||||
primary 3e7b9f
|
||||
onPrimary ffffff
|
||||
primaryContainer 417da2
|
||||
onPrimaryContainer 00060c
|
||||
inversePrimary 93cdf6
|
||||
secondary 4c6170
|
||||
onSecondary ffffff
|
||||
secondaryContainer cfe5f8
|
||||
onSecondaryContainer 526776
|
||||
tertiary 8f659a
|
||||
onTertiary ffffff
|
||||
tertiaryContainer 8f659a
|
||||
onTertiaryContainer ffffff
|
||||
error ba1a1a
|
||||
onError ffffff
|
||||
errorContainer ffdad6
|
||||
onErrorContainer 93000a
|
||||
primaryFixed c7e7ff
|
||||
primaryFixedDim 93cdf6
|
||||
onPrimaryFixed 001e2e
|
||||
onPrimaryFixedVariant 004c6d
|
||||
secondaryFixed cfe5f8
|
||||
secondaryFixedDim b4c9db
|
||||
onSecondaryFixed 071e2b
|
||||
onSecondaryFixedVariant 354958
|
||||
tertiaryFixed fad7ff
|
||||
tertiaryFixedDim e6b6f1
|
||||
onTertiaryFixed 2e0a3b
|
||||
onTertiaryFixedVariant 5e3869
|
||||
term0 9a9b9b
|
||||
term1 005bcc
|
||||
term2 008ca5
|
||||
term3 7e61b0
|
||||
term4 009993
|
||||
term5 006ac4
|
||||
term6 3389ae
|
||||
term7 202225
|
||||
term8 0f0f0f
|
||||
term9 0071fa
|
||||
term10 00afce
|
||||
term11 9a7cce
|
||||
term12 3fbdb6
|
||||
term13 1e85ec
|
||||
term14 59a9d1
|
||||
term15 27282b
|
||||
rosewater 7d76b1
|
||||
flamingo 6470bd
|
||||
pink 057ee6
|
||||
mauve 005791
|
||||
red 003ee0
|
||||
maroon 2751f9
|
||||
peach 8a4dff
|
||||
yellow 008f68
|
||||
green 007991
|
||||
teal 007195
|
||||
sky 0082b6
|
||||
sapphire 037ba6
|
||||
blue 005e90
|
||||
lavender 0077b7
|
||||
klink 2e8fc3
|
||||
klinkSelection 308fc4
|
||||
kvisited 2584d6
|
||||
kvisitedSelection 2984d7
|
||||
knegative 607eff
|
||||
knegativeSelection 607eff
|
||||
kneutral c794ff
|
||||
kneutralSelection c794ff
|
||||
kpositive 00b8de
|
||||
kpositiveSelection 00b8df
|
||||
text 191c1e
|
||||
subtext1 41484e
|
||||
subtext0 6e757c
|
||||
overlay2 7f858b
|
||||
overlay1 91979d
|
||||
overlay0 a4a8ae
|
||||
surface2 b7babf
|
||||
surface1 cbced2
|
||||
surface0 e1e3e7
|
||||
base f8f9fc
|
||||
mantle eff1f4
|
||||
crust e9ebef
|
||||
success 4F6354
|
||||
onSuccess FFFFFF
|
||||
successContainer D1E8D5
|
||||
onSuccessContainer 0C1F13
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 6a73ac
|
||||
secondary_paletteKeyColor 72758e
|
||||
tertiary_paletteKeyColor 9b6592
|
||||
neutral_paletteKeyColor 77767b
|
||||
neutral_variant_paletteKeyColor 767680
|
||||
background 131317
|
||||
onBackground e4e1e7
|
||||
surface 131317
|
||||
surfaceDim 131317
|
||||
surfaceBright 39393d
|
||||
surfaceContainerLowest 0e0e12
|
||||
surfaceContainerLow 1b1b1f
|
||||
surfaceContainer 1f1f23
|
||||
surfaceContainerHigh 2a2a2e
|
||||
surfaceContainerHighest 353438
|
||||
onSurface e4e1e7
|
||||
surfaceVariant 46464f
|
||||
onSurfaceVariant c6c5d1
|
||||
inverseSurface e4e1e7
|
||||
inverseOnSurface 303034
|
||||
outline 90909a
|
||||
outlineVariant 46464f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint bac3ff
|
||||
primary bac3ff
|
||||
onPrimary 232c60
|
||||
primaryContainer 6a73ac
|
||||
onPrimaryContainer ffffff
|
||||
inversePrimary 525b92
|
||||
secondary c3c5e0
|
||||
onSecondary 2c2f44
|
||||
secondaryContainer 42455c
|
||||
onSecondaryContainer b1b3ce
|
||||
tertiary f1b3e5
|
||||
onTertiary 4c1f48
|
||||
tertiaryContainer b77ead
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed dee0ff
|
||||
primaryFixedDim bac3ff
|
||||
onPrimaryFixed 0b154b
|
||||
onPrimaryFixedVariant 3a4378
|
||||
secondaryFixed dfe1fd
|
||||
secondaryFixedDim c3c5e0
|
||||
onSecondaryFixed 171a2e
|
||||
onSecondaryFixedVariant 42455c
|
||||
tertiaryFixed ffd7f4
|
||||
tertiaryFixedDim f1b3e5
|
||||
onTertiaryFixed 340831
|
||||
onTertiaryFixedVariant 66365f
|
||||
term0 353434
|
||||
term1 a178ff
|
||||
term2 44def5
|
||||
term3 ffdcf2
|
||||
term4 94abd7
|
||||
term5 ada0ed
|
||||
term6 9dceff
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 b797ff
|
||||
term10 89ecff
|
||||
term11 fff0f6
|
||||
term12 b2c2dc
|
||||
term13 c4b6f6
|
||||
term14 bae0ff
|
||||
term15 ffffff
|
||||
rosewater f6eff9
|
||||
flamingo e7def4
|
||||
pink ded8ff
|
||||
mauve b9baff
|
||||
red b9a8ff
|
||||
maroon c4b7ee
|
||||
peach e0c2f9
|
||||
yellow ffecf3
|
||||
green c8e3ff
|
||||
teal d0e0ff
|
||||
sky ccdbff
|
||||
sapphire b1c6ff
|
||||
blue aab9ff
|
||||
lavender c2c9ff
|
||||
klink 6a84d1
|
||||
klinkSelection 6a84d1
|
||||
kvisited 7775dc
|
||||
kvisitedSelection 7775dc
|
||||
knegative 946dff
|
||||
knegativeSelection 946dff
|
||||
kneutral c794ff
|
||||
kneutralSelection c794ff
|
||||
kpositive 5daeff
|
||||
kpositiveSelection 5eaeff
|
||||
text e4e1e7
|
||||
subtext1 c6c5d1
|
||||
subtext0 90909a
|
||||
overlay2 7d7d86
|
||||
overlay1 6a6a72
|
||||
overlay0 595960
|
||||
surface2 48484e
|
||||
surface1 37373d
|
||||
surface0 25252a
|
||||
base 131317
|
||||
mantle 131317
|
||||
crust 121216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7171ac
|
||||
secondary_paletteKeyColor 76758e
|
||||
tertiary_paletteKeyColor 9e648e
|
||||
neutral_paletteKeyColor 78767b
|
||||
neutral_variant_paletteKeyColor 777680
|
||||
background 131317
|
||||
onBackground e5e1e7
|
||||
surface 131317
|
||||
surfaceDim 131317
|
||||
surfaceBright 39393d
|
||||
surfaceContainerLowest 0e0e12
|
||||
surfaceContainerLow 1c1b1f
|
||||
surfaceContainer 201f23
|
||||
surfaceContainerHigh 2a292e
|
||||
surfaceContainerHighest 353438
|
||||
onSurface e5e1e7
|
||||
surfaceVariant 47464f
|
||||
onSurfaceVariant c8c5d1
|
||||
inverseSurface e5e1e7
|
||||
inverseOnSurface 313034
|
||||
outline 918f9a
|
||||
outlineVariant 47464f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint c2c1ff
|
||||
primary c2c1ff
|
||||
onPrimary 2a2a60
|
||||
primaryContainer 7171ac
|
||||
onPrimaryContainer ffffff
|
||||
inversePrimary 595992
|
||||
secondary c6c4e0
|
||||
onSecondary 2e2e44
|
||||
secondaryContainer 45455c
|
||||
onSecondaryContainer b4b2ce
|
||||
tertiary f5b2e0
|
||||
onTertiary 4e1e44
|
||||
tertiaryContainer bb7da9
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed e2dfff
|
||||
primaryFixedDim c2c1ff
|
||||
onPrimaryFixed 14134a
|
||||
onPrimaryFixedVariant 414178
|
||||
secondaryFixed e2e0fd
|
||||
secondaryFixedDim c6c4e0
|
||||
onSecondaryFixed 19192e
|
||||
onSecondaryFixedVariant 45455c
|
||||
tertiaryFixed ffd7f0
|
||||
tertiaryFixedDim f5b2e0
|
||||
onTertiaryFixed 35082e
|
||||
onTertiaryFixedVariant 68355c
|
||||
term0 353434
|
||||
term1 ac73ff
|
||||
term2 44def5
|
||||
term3 ffdcf2
|
||||
term4 99aad8
|
||||
term5 b49fea
|
||||
term6 9dceff
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 c093ff
|
||||
term10 89ecff
|
||||
term11 fff0f6
|
||||
term12 b5c1dd
|
||||
term13 c9b5f4
|
||||
term14 bae0ff
|
||||
term15 ffffff
|
||||
rosewater f7eff9
|
||||
flamingo e9def3
|
||||
pink e2d7ff
|
||||
mauve bfb8ff
|
||||
red c1a5fd
|
||||
maroon c9b5ed
|
||||
peach e0c2f9
|
||||
yellow ffecf3
|
||||
green c8e3ff
|
||||
teal d3dfff
|
||||
sky d0daff
|
||||
sapphire b7c5ff
|
||||
blue b0b8ff
|
||||
lavender c7c8ff
|
||||
klink 7382d2
|
||||
klinkSelection 7382d2
|
||||
kvisited 8172da
|
||||
kvisitedSelection 8172da
|
||||
knegative a167ff
|
||||
knegativeSelection a167ff
|
||||
kneutral ca92ff
|
||||
kneutralSelection c992ff
|
||||
kpositive 60adff
|
||||
kpositiveSelection 60adff
|
||||
text e5e1e7
|
||||
subtext1 c8c5d1
|
||||
subtext0 918f9a
|
||||
overlay2 7e7c86
|
||||
overlay1 6b6972
|
||||
overlay0 595860
|
||||
surface2 48474e
|
||||
surface1 37373d
|
||||
surface0 25252a
|
||||
base 131317
|
||||
mantle 131317
|
||||
crust 121216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 33653E
|
||||
secondary_paletteKeyColor 1B4E2A
|
||||
tertiary_paletteKeyColor 376942
|
||||
neutral_paletteKeyColor 1E1E26
|
||||
neutral_variant_paletteKeyColor 23252D
|
||||
background 23262D
|
||||
onBackground F5F5F6
|
||||
surface 050505
|
||||
surfaceDim 1E1E24
|
||||
surfaceBright 1E1E24
|
||||
surfaceContainerLowest 0a0a0b
|
||||
surfaceContainerLow 0a0a0b
|
||||
surfaceContainer 0a0a0b
|
||||
surfaceContainerHigh 050505
|
||||
surfaceContainerHighest 0f1210
|
||||
onSurface F5F5F6
|
||||
surfaceVariant 0a0a0b
|
||||
onSurfaceVariant c9c9c9
|
||||
inverseSurface 0a0a0b
|
||||
inverseOnSurface ACACAC
|
||||
outline 838383
|
||||
outlineVariant 1E1E25
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 24BD5C
|
||||
primary 24BD5C
|
||||
onPrimary 091f11
|
||||
primaryContainer 0f1210
|
||||
onPrimaryContainer 24BD5C
|
||||
inversePrimary 24BD5C
|
||||
secondary 24BD5C
|
||||
onSecondary 043a14
|
||||
secondaryContainer 0f1210
|
||||
onSecondaryContainer F4F3F5
|
||||
tertiary 32653E
|
||||
onTertiary F5F4F6
|
||||
tertiaryContainer 1E1E25
|
||||
onTertiaryContainer F5F5F6
|
||||
error c66e73
|
||||
onError F5F4F6
|
||||
errorContainer 893034
|
||||
onErrorContainer F5F4F6
|
||||
primaryFixed 24BD5C
|
||||
primaryFixedDim 24BD5C
|
||||
onPrimaryFixed F5F4F6
|
||||
onPrimaryFixedVariant F5F4F6
|
||||
secondaryFixed 24BD5C
|
||||
secondaryFixedDim 24BD5C
|
||||
onSecondaryFixed F5F4F6
|
||||
onSecondaryFixedVariant F5F4F6
|
||||
tertiaryFixed 24BD5C
|
||||
tertiaryFixedDim 24BD5C
|
||||
onTertiaryFixed F5F4F6
|
||||
onTertiaryFixedVariant F5F4F6
|
||||
term0 343434
|
||||
term1 23B65A
|
||||
term2 43ff88
|
||||
term3 7cfcab
|
||||
term4 78c19f
|
||||
term5 7ae9a7
|
||||
term6 80deb2
|
||||
term7 ccdcd6
|
||||
term8 9aa59f
|
||||
term9 cdff9e
|
||||
term10 00f608
|
||||
term11 c9fff3
|
||||
term12 a4c7cd
|
||||
term13 a5f7a2
|
||||
term14 87f1b5
|
||||
term15 ffffff
|
||||
rosewater f4f0fa
|
||||
flamingo dfe0f5
|
||||
pink bdffd4
|
||||
mauve 73fa90
|
||||
red 8affab
|
||||
maroon abf0c5
|
||||
peach a9daac
|
||||
yellow d0f9f4
|
||||
green 8af797
|
||||
teal a0f9aa
|
||||
sky cefb97
|
||||
sapphire 85ef77
|
||||
blue 65eea0
|
||||
lavender 90f79e
|
||||
klink 65eea0
|
||||
klinkSelection 65eea0
|
||||
kvisited 73fa90
|
||||
kvisitedSelection 73fa90
|
||||
knegative 8affab
|
||||
knegativeSelection 8affab
|
||||
kneutral d0f9f4
|
||||
kneutralSelection d0f9f4
|
||||
kpositive 8af797
|
||||
kpositiveSelection 8af797
|
||||
text e0e3e4
|
||||
subtext1 bec8cc
|
||||
subtext0 889296
|
||||
overlay2 767f83
|
||||
overlay1 646c6f
|
||||
overlay0 535a5d
|
||||
surface2 43494b
|
||||
surface1 33383a
|
||||
surface0 212627
|
||||
base 101415
|
||||
mantle 101415
|
||||
crust 0f1314
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 33653E
|
||||
secondary_paletteKeyColor 1B4E2A
|
||||
tertiary_paletteKeyColor 376942
|
||||
neutral_paletteKeyColor 1E1E26
|
||||
neutral_variant_paletteKeyColor 23252D
|
||||
background 23262D
|
||||
onBackground F5F5F6
|
||||
surface 1E1E24
|
||||
surfaceDim 1E1E24
|
||||
surfaceBright 1E1E24
|
||||
surfaceContainerLowest 23262C
|
||||
surfaceContainerLow 23262C
|
||||
surfaceContainer 23262C
|
||||
surfaceContainerHigh 1b1d22
|
||||
surfaceContainerHighest 232C29
|
||||
onSurface F5F5F6
|
||||
surfaceVariant 23262C
|
||||
onSurfaceVariant c9c9c9
|
||||
inverseSurface 23262C
|
||||
inverseOnSurface ACACAC
|
||||
outline 979797
|
||||
outlineVariant 1E1E25
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 24BD5C
|
||||
primary 24BD5C
|
||||
onPrimary 091f11
|
||||
primaryContainer 232c29
|
||||
onPrimaryContainer 24BD5C
|
||||
inversePrimary 24BD5C
|
||||
secondary 24BD5C
|
||||
onSecondary 043a14
|
||||
secondaryContainer 232c29
|
||||
onSecondaryContainer F4F3F5
|
||||
tertiary 32653E
|
||||
onTertiary F5F4F6
|
||||
tertiaryContainer 1E1E25
|
||||
onTertiaryContainer F5F5F6
|
||||
error c66e73
|
||||
onError F5F4F6
|
||||
errorContainer 893034
|
||||
onErrorContainer F5F4F6
|
||||
primaryFixed 24BD5C
|
||||
primaryFixedDim 24BD5C
|
||||
onPrimaryFixed F5F4F6
|
||||
onPrimaryFixedVariant F5F4F6
|
||||
secondaryFixed 24BD5C
|
||||
secondaryFixedDim 24BD5C
|
||||
onSecondaryFixed F5F4F6
|
||||
onSecondaryFixedVariant F5F4F6
|
||||
tertiaryFixed 24BD5C
|
||||
tertiaryFixedDim 24BD5C
|
||||
onTertiaryFixed F5F4F6
|
||||
onTertiaryFixedVariant F5F4F6
|
||||
term0 343434
|
||||
term1 23B65A
|
||||
term2 43ff88
|
||||
term3 7cfcab
|
||||
term4 78c19f
|
||||
term5 7ae9a7
|
||||
term6 80deb2
|
||||
term7 ccdcd6
|
||||
term8 9aa59f
|
||||
term9 cdff9e
|
||||
term10 00f608
|
||||
term11 c9fff3
|
||||
term12 a4c7cd
|
||||
term13 a5f7a2
|
||||
term14 87f1b5
|
||||
term15 ffffff
|
||||
rosewater f4f0fa
|
||||
flamingo dfe0f5
|
||||
pink bdffd4
|
||||
mauve 73fa90
|
||||
red 8affab
|
||||
maroon abf0c5
|
||||
peach a9daac
|
||||
yellow d0f9f4
|
||||
green 8af797
|
||||
teal a0f9aa
|
||||
sky cefb97
|
||||
sapphire 85ef77
|
||||
blue 65eea0
|
||||
lavender 90f79e
|
||||
klink 65eea0
|
||||
klinkSelection 65eea0
|
||||
kvisited 73fa90
|
||||
kvisitedSelection 73fa90
|
||||
knegative 8affab
|
||||
knegativeSelection 8affab
|
||||
kneutral d0f9f4
|
||||
kneutralSelection d0f9f4
|
||||
kpositive 8af797
|
||||
kpositiveSelection 8af797
|
||||
text e0e3e4
|
||||
subtext1 bec8cc
|
||||
subtext0 889296
|
||||
overlay2 767f83
|
||||
overlay1 646c6f
|
||||
overlay0 535a5d
|
||||
surface2 43494b
|
||||
surface1 33383a
|
||||
surface0 212627
|
||||
base 101415
|
||||
mantle 101415
|
||||
crust 0f1314
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor BD93F9
|
||||
secondary_paletteKeyColor 50FA7B
|
||||
tertiary_paletteKeyColor FF79C6
|
||||
neutral_paletteKeyColor 282A36
|
||||
neutral_variant_paletteKeyColor 44475A
|
||||
background 282A36
|
||||
onBackground F8F8F2
|
||||
surface 343746
|
||||
surfaceDim 21222C
|
||||
surfaceBright 4D4F66
|
||||
surfaceContainerLowest 191A21
|
||||
surfaceContainerLow 3C3F4E
|
||||
surfaceContainer 3E4153
|
||||
surfaceContainerHigh 4D4F66
|
||||
surfaceContainerHighest 565970
|
||||
onSurface F8F8F2
|
||||
surfaceVariant 3E4153
|
||||
onSurfaceVariant F8F8F2
|
||||
inverseSurface F8F8F2
|
||||
inverseOnSurface 282A36
|
||||
outline 6272A4
|
||||
outlineVariant 4D4F66
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint BD93F9
|
||||
primary BD93F9
|
||||
onPrimary 282A36
|
||||
primaryContainer 4D4F66
|
||||
onPrimaryContainer BD93F9
|
||||
inversePrimary 9D73D9
|
||||
secondary 50FA7B
|
||||
onSecondary 282A36
|
||||
secondaryContainer 4D4F66
|
||||
onSecondaryContainer 50FA7B
|
||||
tertiary FF79C6
|
||||
onTertiary 282A36
|
||||
tertiaryContainer 4D4F66
|
||||
onTertiaryContainer FF79C6
|
||||
error FF5555
|
||||
onError 282A36
|
||||
errorContainer 4C3743
|
||||
onErrorContainer FF5555
|
||||
primaryFixed BD93F9
|
||||
primaryFixedDim 9D73D9
|
||||
onPrimaryFixed 282A36
|
||||
onPrimaryFixedVariant 3E4153
|
||||
secondaryFixed 50FA7B
|
||||
secondaryFixedDim 30DA5B
|
||||
onSecondaryFixed 282A36
|
||||
onSecondaryFixedVariant 3E4153
|
||||
tertiaryFixed FF79C6
|
||||
tertiaryFixedDim DF59A6
|
||||
onTertiaryFixed 282A36
|
||||
onTertiaryFixedVariant 3E4153
|
||||
term0 282A36
|
||||
term1 FF5555
|
||||
term2 50FA7B
|
||||
term3 F1FA8C
|
||||
term4 BD93F9
|
||||
term5 FF79C6
|
||||
term6 8BE9FD
|
||||
term7 F8F8F2
|
||||
term8 6272A4
|
||||
term9 FF6E6E
|
||||
term10 69FF94
|
||||
term11 FFFFA5
|
||||
term12 D6ACFF
|
||||
term13 FF92DF
|
||||
term14 A4FFFF
|
||||
term15 FFFFFF
|
||||
rosewater F8F8F2
|
||||
flamingo FFB86C
|
||||
pink FF79C6
|
||||
mauve BD93F9
|
||||
red FF5555
|
||||
maroon FF6E6E
|
||||
peach FFB86C
|
||||
yellow F1FA8C
|
||||
green 50FA7B
|
||||
teal 8BE9FD
|
||||
sky 8BE9FD
|
||||
sapphire 8BE9FD
|
||||
blue BD93F9
|
||||
lavender BD93F9
|
||||
klink BD93F9
|
||||
klinkSelection BD93F9
|
||||
kvisited FF79C6
|
||||
kvisitedSelection FF79C6
|
||||
knegative FF5555
|
||||
knegativeSelection FF5555
|
||||
kneutral F1FA8C
|
||||
kneutralSelection F1FA8C
|
||||
kpositive 50FA7B
|
||||
kpositiveSelection 50FA7B
|
||||
text F8F8F2
|
||||
subtext1 F8F8F2
|
||||
subtext0 E6E6E6
|
||||
overlay2 A0A0A0
|
||||
overlay1 8A8A8A
|
||||
overlay0 6272A4
|
||||
surface2 3E4153
|
||||
surface1 343746
|
||||
surface0 282A36
|
||||
base 282A36
|
||||
mantle 21222C
|
||||
crust 191A21
|
||||
success 50FA7B
|
||||
onSuccess 282A36
|
||||
successContainer 4D4F66
|
||||
onSuccessContainer F8F8F2
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 8CCFB0
|
||||
secondary_paletteKeyColor E5C76B
|
||||
tertiary_paletteKeyColor E5A5C5
|
||||
neutral_paletteKeyColor 2D3139
|
||||
neutral_variant_paletteKeyColor 3A3F4B
|
||||
background 141B1E
|
||||
onBackground E8E8E8
|
||||
surface 232A2D
|
||||
surfaceDim 0F1416
|
||||
surfaceBright 3A4145
|
||||
surfaceContainerLowest 0A0E10
|
||||
surfaceContainerLow 2A3235
|
||||
surfaceContainer 2E3538
|
||||
surfaceContainerHigh 3A4145
|
||||
surfaceContainerHighest 434A4E
|
||||
onSurface E8E8E8
|
||||
surfaceVariant 2E3538
|
||||
onSurfaceVariant B3B9BE
|
||||
inverseSurface E8E8E8
|
||||
inverseOnSurface 141B1E
|
||||
outline 8A8F94
|
||||
outlineVariant 3A4145
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 8CCFB0
|
||||
primary 8CCFB0
|
||||
onPrimary 141B1E
|
||||
primaryContainer 3A4145
|
||||
onPrimaryContainer 8CCFB0
|
||||
inversePrimary 6FA98C
|
||||
secondary E5C76B
|
||||
onSecondary 141B1E
|
||||
secondaryContainer 3A4145
|
||||
onSecondaryContainer E5C76B
|
||||
tertiary E5A5C5
|
||||
onTertiary 141B1E
|
||||
tertiaryContainer 3A4145
|
||||
onTertiaryContainer E5A5C5
|
||||
error E57474
|
||||
onError 141B1E
|
||||
errorContainer 4A2C2C
|
||||
onErrorContainer E57474
|
||||
primaryFixed 8CCFB0
|
||||
primaryFixedDim 6FA98C
|
||||
onPrimaryFixed 141B1E
|
||||
onPrimaryFixedVariant 3A3F4B
|
||||
secondaryFixed E5C76B
|
||||
secondaryFixedDim C4A855
|
||||
onSecondaryFixed 141B1E
|
||||
onSecondaryFixedVariant 3A3F4B
|
||||
tertiaryFixed E5A5C5
|
||||
tertiaryFixedDim C888A4
|
||||
onTertiaryFixed 141B1E
|
||||
onTertiaryFixedVariant 3A3F4B
|
||||
term0 141B1E
|
||||
term1 E57474
|
||||
term2 8CCFB0
|
||||
term3 E5C76B
|
||||
term4 67B0E8
|
||||
term5 C47FD5
|
||||
term6 6CBFBF
|
||||
term7 E8E8E8
|
||||
term8 8A8F94
|
||||
term9 E57474
|
||||
term10 8CCFB0
|
||||
term11 E5C76B
|
||||
term12 67B0E8
|
||||
term13 C47FD5
|
||||
term14 6CBFBF
|
||||
term15 E8E8E8
|
||||
rosewater E8E8E8
|
||||
flamingo E5A5C5
|
||||
pink E5A5C5
|
||||
mauve C47FD5
|
||||
red E57474
|
||||
maroon E57474
|
||||
peach E59A84
|
||||
yellow E5C76B
|
||||
green 8CCFB0
|
||||
teal 6CBFBF
|
||||
sky 67B0E8
|
||||
sapphire 67B0E8
|
||||
blue 67B0E8
|
||||
lavender 67B0E8
|
||||
klink 67B0E8
|
||||
klinkSelection 67B0E8
|
||||
kvisited C47FD5
|
||||
kvisitedSelection C47FD5
|
||||
knegative E57474
|
||||
knegativeSelection E57474
|
||||
kneutral E5C76B
|
||||
kneutralSelection E5C76B
|
||||
kpositive 8CCFB0
|
||||
kpositiveSelection 8CCFB0
|
||||
text E8E8E8
|
||||
subtext1 B3B9BE
|
||||
subtext0 8A8F94
|
||||
overlay2 7A7F84
|
||||
overlay1 6A6F74
|
||||
overlay0 5A5F64
|
||||
surface2 2E3538
|
||||
surface1 232A2D
|
||||
surface0 1A2023
|
||||
base 141B1E
|
||||
mantle 0F1416
|
||||
crust 0A0E10
|
||||
success 8CCFB0
|
||||
onSuccess 141B1E
|
||||
successContainer 3A4145
|
||||
onSuccessContainer E8E8E8
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7FBBB3
|
||||
secondary_paletteKeyColor 83C092
|
||||
tertiary_paletteKeyColor A7C080
|
||||
neutral_paletteKeyColor 2E383C
|
||||
neutral_variant_paletteKeyColor 374145
|
||||
background 1E2326
|
||||
onBackground D3C6AA
|
||||
surface 252B2E
|
||||
surfaceDim 15191C
|
||||
surfaceBright 343E43
|
||||
surfaceContainerLowest 11161A
|
||||
surfaceContainerLow 2A3338
|
||||
surfaceContainer 2E383C
|
||||
surfaceContainerHigh 343E43
|
||||
surfaceContainerHighest 3A4448
|
||||
onSurface D3C6AA
|
||||
surfaceVariant 374145
|
||||
onSurfaceVariant 9DA9A0
|
||||
inverseSurface D3C6AA
|
||||
inverseOnSurface 1E2326
|
||||
outline 859289
|
||||
outlineVariant 414B50
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 7FBBB3
|
||||
primary 7FBBB3
|
||||
onPrimary 1E2326
|
||||
primaryContainer 414B50
|
||||
onPrimaryContainer A7C080
|
||||
inversePrimary 5A9A8F
|
||||
secondary 83C092
|
||||
onSecondary 1E2326
|
||||
secondaryContainer 414B50
|
||||
onSecondaryContainer A7C080
|
||||
tertiary A7C080
|
||||
onTertiary 1E2326
|
||||
tertiaryContainer 414B50
|
||||
onTertiaryContainer D3C6AA
|
||||
error E67E80
|
||||
onError 1E2326
|
||||
errorContainer 4C3743
|
||||
onErrorContainer E67E80
|
||||
primaryFixed 7FBBB3
|
||||
primaryFixedDim 5A9A8F
|
||||
onPrimaryFixed 1E2326
|
||||
onPrimaryFixedVariant 374145
|
||||
secondaryFixed 83C092
|
||||
secondaryFixedDim 5F8C6F
|
||||
onSecondaryFixed 1E2326
|
||||
onSecondaryFixedVariant 374145
|
||||
tertiaryFixed A7C080
|
||||
tertiaryFixedDim 7F9D5F
|
||||
onTertiaryFixed 1E2326
|
||||
onTertiaryFixedVariant 374145
|
||||
term0 1E2326
|
||||
term1 E67E80
|
||||
term2 A7C080
|
||||
term3 DBBC7F
|
||||
term4 7FBBB3
|
||||
term5 D699B6
|
||||
term6 83C092
|
||||
term7 D3C6AA
|
||||
term8 859289
|
||||
term9 E67E80
|
||||
term10 A7C080
|
||||
term11 DBBC7F
|
||||
term12 7FBBB3
|
||||
term13 D699B6
|
||||
term14 83C092
|
||||
term15 D3C6AA
|
||||
rosewater D3C6AA
|
||||
flamingo D699B6
|
||||
pink D699B6
|
||||
mauve D699B6
|
||||
red E67E80
|
||||
maroon E67E80
|
||||
peach E69875
|
||||
yellow DBBC7F
|
||||
green A7C080
|
||||
teal 83C092
|
||||
sky 7FBBB3
|
||||
sapphire 7FBBB3
|
||||
blue 7FBBB3
|
||||
lavender 7FBBB3
|
||||
klink 7FBBB3
|
||||
klinkSelection 7FBBB3
|
||||
kvisited 83C092
|
||||
kvisitedSelection 83C092
|
||||
knegative E67E80
|
||||
knegativeSelection E67E80
|
||||
kneutral DBBC7F
|
||||
kneutralSelection DBBC7F
|
||||
kpositive A7C080
|
||||
kpositiveSelection A7C080
|
||||
text D3C6AA
|
||||
subtext1 9DA9A0
|
||||
subtext0 859289
|
||||
overlay2 7A8478
|
||||
overlay1 6F7A6F
|
||||
overlay0 5F6A5F
|
||||
surface2 2E383C
|
||||
surface1 252B2E
|
||||
surface0 1E2326
|
||||
base 1E2326
|
||||
mantle 15191C
|
||||
crust 11161A
|
||||
success A7C080
|
||||
onSuccess 1E2326
|
||||
successContainer 414B50
|
||||
onSuccessContainer D3C6AA
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7FBBB3
|
||||
secondary_paletteKeyColor 83C092
|
||||
tertiary_paletteKeyColor A7C080
|
||||
neutral_paletteKeyColor 2E383C
|
||||
neutral_variant_paletteKeyColor 374145
|
||||
background 2D353B
|
||||
onBackground D3C6AA
|
||||
surface 343F44
|
||||
surfaceDim 232A2E
|
||||
surfaceBright 475258
|
||||
surfaceContainerLowest 1E2326
|
||||
surfaceContainerLow 3B474E
|
||||
surfaceContainer 3D484D
|
||||
surfaceContainerHigh 475258
|
||||
surfaceContainerHighest 4C5258
|
||||
onSurface D3C6AA
|
||||
surfaceVariant 3D484D
|
||||
onSurfaceVariant 9DA9A0
|
||||
inverseSurface D3C6AA
|
||||
inverseOnSurface 2D353B
|
||||
outline 859289
|
||||
outlineVariant 475258
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 7FBBB3
|
||||
primary 7FBBB3
|
||||
onPrimary 2D353B
|
||||
primaryContainer 475258
|
||||
onPrimaryContainer A7C080
|
||||
inversePrimary 5A9A8F
|
||||
secondary 83C092
|
||||
onSecondary 2D353B
|
||||
secondaryContainer 475258
|
||||
onSecondaryContainer A7C080
|
||||
tertiary A7C080
|
||||
onTertiary 2D353B
|
||||
tertiaryContainer 475258
|
||||
onTertiaryContainer D3C6AA
|
||||
error E67E80
|
||||
onError 2D353B
|
||||
errorContainer 4C3743
|
||||
onErrorContainer E67E80
|
||||
primaryFixed 7FBBB3
|
||||
primaryFixedDim 5A9A8F
|
||||
onPrimaryFixed 2D353B
|
||||
onPrimaryFixedVariant 374145
|
||||
secondaryFixed 83C092
|
||||
secondaryFixedDim 5F8C6F
|
||||
onSecondaryFixed 2D353B
|
||||
onSecondaryFixedVariant 374145
|
||||
tertiaryFixed A7C080
|
||||
tertiaryFixedDim 7F9D5F
|
||||
onTertiaryFixed 2D353B
|
||||
onTertiaryFixedVariant 374145
|
||||
term0 2D353B
|
||||
term1 E67E80
|
||||
term2 A7C080
|
||||
term3 DBBC7F
|
||||
term4 7FBBB3
|
||||
term5 D699B6
|
||||
term6 83C092
|
||||
term7 D3C6AA
|
||||
term8 859289
|
||||
term9 E67E80
|
||||
term10 A7C080
|
||||
term11 DBBC7F
|
||||
term12 7FBBB3
|
||||
term13 D699B6
|
||||
term14 83C092
|
||||
term15 D3C6AA
|
||||
rosewater D3C6AA
|
||||
flamingo D699B6
|
||||
pink D699B6
|
||||
mauve D699B6
|
||||
red E67E80
|
||||
maroon E67E80
|
||||
peach E69875
|
||||
yellow DBBC7F
|
||||
green A7C080
|
||||
teal 83C092
|
||||
sky 7FBBB3
|
||||
sapphire 7FBBB3
|
||||
blue 7FBBB3
|
||||
lavender 7FBBB3
|
||||
klink 7FBBB3
|
||||
klinkSelection 7FBBB3
|
||||
kvisited 83C092
|
||||
kvisitedSelection 83C092
|
||||
knegative E67E80
|
||||
knegativeSelection E67E80
|
||||
kneutral DBBC7F
|
||||
kneutralSelection DBBC7F
|
||||
kpositive A7C080
|
||||
kpositiveSelection A7C080
|
||||
text D3C6AA
|
||||
subtext1 9DA9A0
|
||||
subtext0 859289
|
||||
overlay2 7A8478
|
||||
overlay1 6F7A6F
|
||||
overlay0 5F6A5F
|
||||
surface2 3D484D
|
||||
surface1 343F44
|
||||
surface0 2D353B
|
||||
base 2D353B
|
||||
mantle 232A2E
|
||||
crust 1E2326
|
||||
success A7C080
|
||||
onSuccess 2D353B
|
||||
successContainer 475258
|
||||
onSuccessContainer D3C6AA
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 3A94C5
|
||||
secondary_paletteKeyColor 35A77C
|
||||
tertiary_paletteKeyColor 8DA101
|
||||
neutral_paletteKeyColor E6E2CC
|
||||
neutral_variant_paletteKeyColor E0DCC7
|
||||
background FDF6E3
|
||||
onBackground 5C6A72
|
||||
surface F3EAD3
|
||||
surfaceDim FDF6E3
|
||||
surfaceBright FFFBF0
|
||||
surfaceContainerLowest FFFBF0
|
||||
surfaceContainerLow FDF6E3
|
||||
surfaceContainer F3EAD3
|
||||
surfaceContainerHigh EAE4CA
|
||||
surfaceContainerHighest E0DCC7
|
||||
onSurface 5C6A72
|
||||
surfaceVariant EAE4CA
|
||||
onSurfaceVariant 6F7C84
|
||||
inverseSurface 5C6A72
|
||||
inverseOnSurface FDF6E3
|
||||
outline 939F91
|
||||
outlineVariant E0DCC7
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 3A94C5
|
||||
primary 3A94C5
|
||||
onPrimary FFFBF0
|
||||
primaryContainer E0DCC7
|
||||
onPrimaryContainer 8DA101
|
||||
inversePrimary 5FAFD7
|
||||
secondary 35A77C
|
||||
onSecondary FFFBF0
|
||||
secondaryContainer E0DCC7
|
||||
onSecondaryContainer 8DA101
|
||||
tertiary 8DA101
|
||||
onTertiary FFFBF0
|
||||
tertiaryContainer E0DCC7
|
||||
onTertiaryContainer 5C6A72
|
||||
error F85552
|
||||
onError FFFBF0
|
||||
errorContainer E6E2CC
|
||||
onErrorContainer F85552
|
||||
primaryFixed 3A94C5
|
||||
primaryFixedDim 5FAFD7
|
||||
onPrimaryFixed FFFBF0
|
||||
onPrimaryFixedVariant E0DCC7
|
||||
secondaryFixed 35A77C
|
||||
secondaryFixedDim 5FC198
|
||||
onSecondaryFixed FFFBF0
|
||||
onSecondaryFixedVariant E0DCC7
|
||||
tertiaryFixed 8DA101
|
||||
tertiaryFixedDim A7C080
|
||||
onTertiaryFixed FFFBF0
|
||||
onTertiaryFixedVariant E0DCC7
|
||||
term0 5C6A72
|
||||
term1 F85552
|
||||
term2 8DA101
|
||||
term3 DFA000
|
||||
term4 3A94C5
|
||||
term5 DF69BA
|
||||
term6 35A77C
|
||||
term7 5C6A72
|
||||
term8 939F91
|
||||
term9 F85552
|
||||
term10 8DA101
|
||||
term11 DFA000
|
||||
term12 3A94C5
|
||||
term13 DF69BA
|
||||
term14 35A77C
|
||||
term15 5C6A72
|
||||
rosewater 5C6A72
|
||||
flamingo DF69BA
|
||||
pink DF69BA
|
||||
mauve DF69BA
|
||||
red F85552
|
||||
maroon F85552
|
||||
peach E66868
|
||||
yellow DFA000
|
||||
green 8DA101
|
||||
teal 35A77C
|
||||
sky 3A94C5
|
||||
sapphire 3A94C5
|
||||
blue 3A94C5
|
||||
lavender 3A94C5
|
||||
klink 3A94C5
|
||||
klinkSelection 3A94C5
|
||||
kvisited 35A77C
|
||||
kvisitedSelection 35A77C
|
||||
knegative F85552
|
||||
knegativeSelection F85552
|
||||
kneutral DFA000
|
||||
kneutralSelection DFA000
|
||||
kpositive 8DA101
|
||||
kpositiveSelection 8DA101
|
||||
text 5C6A72
|
||||
subtext1 6F7C84
|
||||
subtext0 939F91
|
||||
overlay2 A6B0A0
|
||||
overlay1 B9C0B0
|
||||
overlay0 CCD3C2
|
||||
surface2 EAE4CA
|
||||
surface1 F3EAD3
|
||||
surface0 FDF6E3
|
||||
base FDF6E3
|
||||
mantle FFFBF0
|
||||
crust FFFEF9
|
||||
success 8DA101
|
||||
onSuccess FFFBF0
|
||||
successContainer E0DCC7
|
||||
onSuccessContainer 5C6A72
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7FBBB3
|
||||
secondary_paletteKeyColor 83C092
|
||||
tertiary_paletteKeyColor A7C080
|
||||
neutral_paletteKeyColor 2E383C
|
||||
neutral_variant_paletteKeyColor 374145
|
||||
background 323C41
|
||||
onBackground D3C6AA
|
||||
surface 3A454A
|
||||
surfaceDim 282F34
|
||||
surfaceBright 4D585D
|
||||
surfaceContainerLowest 232A2E
|
||||
surfaceContainerLow 414D54
|
||||
surfaceContainer 434E53
|
||||
surfaceContainerHigh 4D585D
|
||||
surfaceContainerHighest 525C61
|
||||
onSurface D3C6AA
|
||||
surfaceVariant 434E53
|
||||
onSurfaceVariant 9DA9A0
|
||||
inverseSurface D3C6AA
|
||||
inverseOnSurface 323C41
|
||||
outline 859289
|
||||
outlineVariant 4D585D
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 7FBBB3
|
||||
primary 7FBBB3
|
||||
onPrimary 323C41
|
||||
primaryContainer 4D585D
|
||||
onPrimaryContainer A7C080
|
||||
inversePrimary 5A9A8F
|
||||
secondary 83C092
|
||||
onSecondary 323C41
|
||||
secondaryContainer 4D585D
|
||||
onSecondaryContainer A7C080
|
||||
tertiary A7C080
|
||||
onTertiary 323C41
|
||||
tertiaryContainer 4D585D
|
||||
onTertiaryContainer D3C6AA
|
||||
error E67E80
|
||||
onError 323C41
|
||||
errorContainer 4C3743
|
||||
onErrorContainer E67E80
|
||||
primaryFixed 7FBBB3
|
||||
primaryFixedDim 5A9A8F
|
||||
onPrimaryFixed 323C41
|
||||
onPrimaryFixedVariant 374145
|
||||
secondaryFixed 83C092
|
||||
secondaryFixedDim 5F8C6F
|
||||
onSecondaryFixed 323C41
|
||||
onSecondaryFixedVariant 374145
|
||||
tertiaryFixed A7C080
|
||||
tertiaryFixedDim 7F9D5F
|
||||
onTertiaryFixed 323C41
|
||||
onTertiaryFixedVariant 374145
|
||||
term0 323C41
|
||||
term1 E67E80
|
||||
term2 A7C080
|
||||
term3 DBBC7F
|
||||
term4 7FBBB3
|
||||
term5 D699B6
|
||||
term6 83C092
|
||||
term7 D3C6AA
|
||||
term8 859289
|
||||
term9 E67E80
|
||||
term10 A7C080
|
||||
term11 DBBC7F
|
||||
term12 7FBBB3
|
||||
term13 D699B6
|
||||
term14 83C092
|
||||
term15 D3C6AA
|
||||
rosewater D3C6AA
|
||||
flamingo D699B6
|
||||
pink D699B6
|
||||
mauve D699B6
|
||||
red E67E80
|
||||
maroon E67E80
|
||||
peach E69875
|
||||
yellow DBBC7F
|
||||
green A7C080
|
||||
teal 83C092
|
||||
sky 7FBBB3
|
||||
sapphire 7FBBB3
|
||||
blue 7FBBB3
|
||||
lavender 7FBBB3
|
||||
klink 7FBBB3
|
||||
klinkSelection 7FBBB3
|
||||
kvisited 83C092
|
||||
kvisitedSelection 83C092
|
||||
knegative E67E80
|
||||
knegativeSelection E67E80
|
||||
kneutral DBBC7F
|
||||
kneutralSelection DBBC7F
|
||||
kpositive A7C080
|
||||
kpositiveSelection A7C080
|
||||
text D3C6AA
|
||||
subtext1 9DA9A0
|
||||
subtext0 859289
|
||||
overlay2 7A8478
|
||||
overlay1 6F7A6F
|
||||
overlay0 5F6A5F
|
||||
surface2 434E53
|
||||
surface1 3A454A
|
||||
surface0 323C41
|
||||
base 323C41
|
||||
mantle 282F34
|
||||
crust 232A2E
|
||||
success A7C080
|
||||
onSuccess 323C41
|
||||
successContainer 4D585D
|
||||
onSuccessContainer D3C6AA
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 2d8194
|
||||
secondary_paletteKeyColor 607b83
|
||||
tertiary_paletteKeyColor 8e69a1
|
||||
neutral_paletteKeyColor 747879
|
||||
neutral_variant_paletteKeyColor 6f797c
|
||||
background 101415
|
||||
onBackground e0e3e4
|
||||
surface 101415
|
||||
surfaceDim 101415
|
||||
surfaceBright 363a3b
|
||||
surfaceContainerLowest 0b0f10
|
||||
surfaceContainerLow 181c1d
|
||||
surfaceContainer 1c2021
|
||||
surfaceContainerHigh 272b2c
|
||||
surfaceContainerHighest 323537
|
||||
onSurface e0e3e4
|
||||
surfaceVariant 3f484b
|
||||
onSurfaceVariant bec8cc
|
||||
inverseSurface e0e3e4
|
||||
inverseOnSurface 2d3132
|
||||
outline 889296
|
||||
outlineVariant 3f484b
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 85d2e7
|
||||
primary 85d2e7
|
||||
onPrimary 003640
|
||||
primaryContainer 2d8194
|
||||
onPrimaryContainer 000609
|
||||
inversePrimary 00687a
|
||||
secondary aecbd4
|
||||
onSecondary 18343b
|
||||
secondaryContainer 304b52
|
||||
onSecondaryContainer 9dbac3
|
||||
tertiary e1b7f5
|
||||
onTertiary 432255
|
||||
tertiaryContainer a982bc
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed acedff
|
||||
primaryFixedDim 85d2e7
|
||||
onPrimaryFixed 001f26
|
||||
onPrimaryFixedVariant 004e5c
|
||||
secondaryFixed cae7f1
|
||||
secondaryFixedDim aecbd4
|
||||
onSecondaryFixed 011f26
|
||||
onSecondaryFixedVariant 304b52
|
||||
tertiaryFixed f5d9ff
|
||||
tertiaryFixedDim e1b7f5
|
||||
onTertiaryFixed 2c0b3f
|
||||
onTertiaryFixedVariant 5b396d
|
||||
term0 343434
|
||||
term1 8383ff
|
||||
term2 40e1df
|
||||
term3 75fcdd
|
||||
term4 78b4c1
|
||||
term5 7aaee9
|
||||
term6 80d7de
|
||||
term7 ccdcd6
|
||||
term8 9aa59f
|
||||
term9 a29eff
|
||||
term10 00f6f5
|
||||
term11 c9fff3
|
||||
term12 a4c7cd
|
||||
term13 a2c0f7
|
||||
term14 87ebf1
|
||||
term15 ffffff
|
||||
rosewater f4f0fa
|
||||
flamingo dfe0f5
|
||||
pink bde1ff
|
||||
mauve 73cafa
|
||||
red 8ab5ff
|
||||
maroon abbef0
|
||||
peach a9daac
|
||||
yellow d0f9f4
|
||||
green 8af0f7
|
||||
teal a0ecf9
|
||||
sky 97e7fb
|
||||
sapphire 77d4ef
|
||||
blue 65c9ee
|
||||
lavender 90d6f7
|
||||
klink 0093b4
|
||||
klinkSelection 0093b3
|
||||
kvisited 0089bf
|
||||
kvisitedSelection 0089be
|
||||
knegative 607eff
|
||||
knegativeSelection 607eff
|
||||
kneutral 34c359
|
||||
kneutralSelection 34c359
|
||||
kpositive 00bbc7
|
||||
kpositiveSelection 00bbc7
|
||||
text e0e3e4
|
||||
subtext1 bec8cc
|
||||
subtext0 889296
|
||||
overlay2 767f83
|
||||
overlay1 646c6f
|
||||
overlay0 535a5d
|
||||
surface2 43494b
|
||||
surface1 33383a
|
||||
surface0 212627
|
||||
base 101415
|
||||
mantle 101415
|
||||
crust 0f1314
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7d7a2e
|
||||
secondary_paletteKeyColor 7b7956
|
||||
tertiary_paletteKeyColor 57824d
|
||||
neutral_paletteKeyColor 79776f
|
||||
neutral_variant_paletteKeyColor 7a7868
|
||||
background fdf9ef
|
||||
onBackground 1c1c16
|
||||
surface fdf9ef
|
||||
surfaceDim dddad0
|
||||
surfaceBright fdf9ef
|
||||
surfaceContainerLowest ffffff
|
||||
surfaceContainerLow f7f3e9
|
||||
surfaceContainer f2eee4
|
||||
surfaceContainerHigh ece8de
|
||||
surfaceContainerHighest e6e2d8
|
||||
onSurface 1c1c16
|
||||
surfaceVariant e7e3d0
|
||||
onSurfaceVariant 494739
|
||||
inverseSurface 32312a
|
||||
inverseOnSurface f5f0e6
|
||||
outline 777565
|
||||
outlineVariant cac7b4
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 636116
|
||||
primary 636116
|
||||
onPrimary ffffff
|
||||
primaryContainer 7a772c
|
||||
onPrimaryContainer fffbff
|
||||
inversePrimary ceca75
|
||||
secondary 62603e
|
||||
onSecondary ffffff
|
||||
secondaryContainer e8e4ba
|
||||
onSecondaryContainer 686644
|
||||
tertiary 547f4a
|
||||
onTertiary ffffff
|
||||
tertiaryContainer 547f4a
|
||||
onTertiaryContainer ffffff
|
||||
error ba1a1a
|
||||
onError ffffff
|
||||
errorContainer ffdad6
|
||||
onErrorContainer 93000a
|
||||
primaryFixed ebe68e
|
||||
primaryFixedDim ceca75
|
||||
onPrimaryFixed 1e1d00
|
||||
onPrimaryFixedVariant 4b4900
|
||||
secondaryFixed e8e4ba
|
||||
secondaryFixedDim ccc89f
|
||||
onSecondaryFixed 1d1c03
|
||||
onSecondaryFixedVariant 4a4829
|
||||
tertiaryFixed bff0b0
|
||||
tertiaryFixedDim a4d396
|
||||
onTertiaryFixed 002201
|
||||
onTertiaryFixedVariant 275021
|
||||
term0 9d9a95
|
||||
term1 795d00
|
||||
term2 808606
|
||||
term3 846e00
|
||||
term4 948b22
|
||||
term5 8b6300
|
||||
term6 6e893e
|
||||
term7 27211d
|
||||
term8 0f0f0f
|
||||
term9 967300
|
||||
term10 a1a62e
|
||||
term11 a38918
|
||||
term12 b9ae43
|
||||
term13 ac7b00
|
||||
term14 8daa5b
|
||||
term15 2e2723
|
||||
rosewater 937b2d
|
||||
flamingo 917200
|
||||
pink a37500
|
||||
mauve 8f3b00
|
||||
red 695100
|
||||
maroon 7d6200
|
||||
peach 8c7400
|
||||
yellow 907e00
|
||||
green 6d7400
|
||||
teal 587027
|
||||
sky 4b882e
|
||||
sapphire 5d7c2e
|
||||
blue 00664e
|
||||
lavender 00816c
|
||||
klink 559652
|
||||
klinkSelection 559652
|
||||
kvisited c06b00
|
||||
kvisitedSelection c06b00
|
||||
knegative a78300
|
||||
knegativeSelection a78300
|
||||
kneutral c7a900
|
||||
kneutralSelection c7a900
|
||||
kpositive a0b31d
|
||||
kpositiveSelection a1b31c
|
||||
text 1c1c16
|
||||
subtext1 494739
|
||||
subtext0 777565
|
||||
overlay2 878576
|
||||
overlay1 999788
|
||||
overlay0 aba89a
|
||||
surface2 bdbaad
|
||||
surface1 d1cec2
|
||||
surface0 e7e3d8
|
||||
base fdf9ef
|
||||
mantle f4f1e5
|
||||
crust efebdf
|
||||
success 4F6354
|
||||
onSuccess FFFFFF
|
||||
successContainer D1E8D5
|
||||
onSuccessContainer 0C1F13
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 28828e
|
||||
secondary_paletteKeyColor 5f7c81
|
||||
tertiary_paletteKeyColor 8a6aa3
|
||||
neutral_paletteKeyColor 747879
|
||||
neutral_variant_paletteKeyColor 6e797b
|
||||
background 101415
|
||||
onBackground e0e3e4
|
||||
surface 101415
|
||||
surfaceDim 101415
|
||||
surfaceBright 363a3b
|
||||
surfaceContainerLowest 0b0f10
|
||||
surfaceContainerLow 181c1d
|
||||
surfaceContainer 1c2021
|
||||
surfaceContainerHigh 272b2b
|
||||
surfaceContainerHighest 313536
|
||||
onSurface e0e3e4
|
||||
surfaceVariant 3e494a
|
||||
onSurfaceVariant bec8ca
|
||||
inverseSurface e0e3e4
|
||||
inverseOnSurface 2d3132
|
||||
outline 889394
|
||||
outlineVariant 3e494a
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 81d3e0
|
||||
primary 81d3e0
|
||||
onPrimary 00363d
|
||||
primaryContainer 28828e
|
||||
onPrimaryContainer 000608
|
||||
inversePrimary 006874
|
||||
secondary adccd1
|
||||
onSecondary 173539
|
||||
secondaryContainer 2f4b50
|
||||
onSecondaryContainer 9cbac0
|
||||
tertiary ddb9f7
|
||||
onTertiary 402357
|
||||
tertiaryContainer a584bf
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed 9eeffd
|
||||
primaryFixedDim 81d3e0
|
||||
onPrimaryFixed 001f24
|
||||
onPrimaryFixedVariant 004f57
|
||||
secondaryFixed c9e8ee
|
||||
secondaryFixedDim adccd1
|
||||
onSecondaryFixed 001f24
|
||||
onSecondaryFixedVariant 2f4b50
|
||||
tertiaryFixed f2daff
|
||||
tertiaryFixedDim ddb9f7
|
||||
onTertiaryFixed 290c41
|
||||
onTertiaryFixedVariant 573a6f
|
||||
term0 343434
|
||||
term1 8383ff
|
||||
term2 44e1d5
|
||||
term3 75fcdd
|
||||
term4 76b4bd
|
||||
term5 7aaee9
|
||||
term6 80d8d8
|
||||
term7 ccdcd6
|
||||
term8 9aa59f
|
||||
term9 a29eff
|
||||
term10 13f7ea
|
||||
term11 c9fff3
|
||||
term12 a3c7ca
|
||||
term13 a2c0f7
|
||||
term14 87ecea
|
||||
term15 ffffff
|
||||
rosewater f1f3e5
|
||||
flamingo dfe0f5
|
||||
pink bae2ff
|
||||
mauve 6cccf4
|
||||
red 8ab5ff
|
||||
maroon abbef0
|
||||
peach a9daac
|
||||
yellow d1faf1
|
||||
green 8af0f0
|
||||
teal 9fecf4
|
||||
sky 94e8f6
|
||||
sapphire 74d5e9
|
||||
blue 5fcae8
|
||||
lavender 8cd7f3
|
||||
klink 0094ac
|
||||
klinkSelection 0094ab
|
||||
kvisited 008bb6
|
||||
kvisitedSelection 008bb5
|
||||
knegative 607eff
|
||||
knegativeSelection 607eff
|
||||
kneutral 34c359
|
||||
kneutralSelection 34c359
|
||||
kpositive 00bcbf
|
||||
kpositiveSelection 00bcbd
|
||||
text e0e3e4
|
||||
subtext1 bec8ca
|
||||
subtext0 889394
|
||||
overlay2 768081
|
||||
overlay1 646c6e
|
||||
overlay0 535b5c
|
||||
surface2 434a4b
|
||||
surface1 33383a
|
||||
surface0 212627
|
||||
base 101415
|
||||
mantle 101415
|
||||
crust 0f1314
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 857829
|
||||
secondary_paletteKeyColor 7f7753
|
||||
tertiary_paletteKeyColor 5f8146
|
||||
neutral_paletteKeyColor 7a776f
|
||||
neutral_variant_paletteKeyColor 7b7767
|
||||
background fef9ee
|
||||
onBackground 1d1c15
|
||||
surface fef9ee
|
||||
surfaceDim dfd9cf
|
||||
surfaceBright fef9ee
|
||||
surfaceContainerLowest ffffff
|
||||
surfaceContainerLow f9f3e9
|
||||
surfaceContainer f3ede3
|
||||
surfaceContainerHigh ede8dd
|
||||
surfaceContainerHighest e7e2d8
|
||||
onSurface 1d1c15
|
||||
surfaceVariant e9e2cf
|
||||
onSurfaceVariant 4a4738
|
||||
inverseSurface 32302a
|
||||
inverseOnSurface f6f0e6
|
||||
outline 797564
|
||||
outlineVariant ccc6b3
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 6b5f10
|
||||
primary 6b5f10
|
||||
onPrimary ffffff
|
||||
primaryContainer 827526
|
||||
onPrimaryContainer fffbff
|
||||
inversePrimary d7c76f
|
||||
secondary 655f3c
|
||||
onSecondary ffffff
|
||||
secondaryContainer ede3b7
|
||||
onSecondaryContainer 6c6542
|
||||
tertiary 5c7e43
|
||||
onTertiary ffffff
|
||||
tertiaryContainer 5c7e43
|
||||
onTertiaryContainer ffffff
|
||||
error ba1a1a
|
||||
onError ffffff
|
||||
errorContainer ffdad6
|
||||
onErrorContainer 93000a
|
||||
primaryFixed f4e388
|
||||
primaryFixedDim d7c76f
|
||||
onPrimaryFixed 201c00
|
||||
onPrimaryFixedVariant 514700
|
||||
secondaryFixed ede3b7
|
||||
secondaryFixedDim d0c79d
|
||||
onSecondaryFixed 201c02
|
||||
onSecondaryFixedVariant 4d4727
|
||||
tertiaryFixed c7eea8
|
||||
tertiaryFixedDim acd28e
|
||||
onTertiaryFixed 0b2000
|
||||
onTertiaryFixedVariant 304f1a
|
||||
term0 9d9a95
|
||||
term1 7e5a00
|
||||
term2 898300
|
||||
term3 8a6b00
|
||||
term4 9c881c
|
||||
term5 8f6100
|
||||
term6 768737
|
||||
term7 27211d
|
||||
term8 0f0f0e
|
||||
term9 9c7000
|
||||
term10 aaa425
|
||||
term11 aa8616
|
||||
term12 c1ab3e
|
||||
term13 b17900
|
||||
term14 96a854
|
||||
term15 2e2723
|
||||
rosewater 98792c
|
||||
flamingo 976f00
|
||||
pink a87300
|
||||
mauve 8f3b00
|
||||
red 6d4f00
|
||||
maroon 836000
|
||||
peach 927100
|
||||
yellow 967b00
|
||||
green 757200
|
||||
teal 5f6f20
|
||||
sky 4b882e
|
||||
sapphire 657b26
|
||||
blue 00664e
|
||||
lavender 00816c
|
||||
klink 559652
|
||||
klinkSelection 559652
|
||||
kvisited c06b00
|
||||
kvisitedSelection c06b00
|
||||
knegative ae8000
|
||||
knegativeSelection ae8000
|
||||
kneutral d1a500
|
||||
kneutralSelection d0a500
|
||||
kpositive adaf00
|
||||
kpositiveSelection adaf00
|
||||
text 1d1c15
|
||||
subtext1 4a4738
|
||||
subtext0 797564
|
||||
overlay2 898575
|
||||
overlay1 9b9787
|
||||
overlay0 ada899
|
||||
surface2 bfbaac
|
||||
surface1 d2cec1
|
||||
surface0 e8e3d7
|
||||
base fef9ee
|
||||
mantle f6f1e4
|
||||
crust f0ebde
|
||||
success 4F6354
|
||||
onSuccess FFFFFF
|
||||
successContainer D1E8D5
|
||||
onSuccessContainer 0C1F13
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor a46a32
|
||||
secondary_paletteKeyColor 907156
|
||||
tertiary_paletteKeyColor 767c33
|
||||
neutral_paletteKeyColor 7e756f
|
||||
neutral_variant_paletteKeyColor 847468
|
||||
background 18120e
|
||||
onBackground ece0d9
|
||||
surface 18120e
|
||||
surfaceDim 18120e
|
||||
surfaceBright 3f3833
|
||||
surfaceContainerLowest 120d09
|
||||
surfaceContainerLow 201a16
|
||||
surfaceContainer 241e1a
|
||||
surfaceContainerHigh 2f2924
|
||||
surfaceContainerHighest 3a332e
|
||||
onSurface ece0d9
|
||||
surfaceVariant 52443a
|
||||
onSurfaceVariant d6c3b5
|
||||
inverseSurface ece0d9
|
||||
inverseOnSurface 362f2a
|
||||
outline 9f8e81
|
||||
outlineVariant 52443a
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint ffb878
|
||||
primary ffb878
|
||||
onPrimary 4c2700
|
||||
primaryContainer c28349
|
||||
onPrimaryContainer 0d0400
|
||||
inversePrimary 87521c
|
||||
secondary e5bfa1
|
||||
onSecondary 432b16
|
||||
secondaryContainer 5c412a
|
||||
onSecondaryContainer d3ae90
|
||||
tertiary c6cc7a
|
||||
onTertiary 2f3300
|
||||
tertiaryContainer 90964a
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed ffdcc1
|
||||
primaryFixedDim ffb878
|
||||
onPrimaryFixed 2e1500
|
||||
onPrimaryFixedVariant 6b3b04
|
||||
secondaryFixed ffdcc1
|
||||
secondaryFixedDim e5bfa1
|
||||
onSecondaryFixed 2b1704
|
||||
onSecondaryFixedVariant 5c412a
|
||||
tertiaryFixed e2e993
|
||||
tertiaryFixedDim c6cc7a
|
||||
onTertiaryFixed 1b1d00
|
||||
onTertiaryFixedVariant 454a03
|
||||
term0 353433
|
||||
term1 e17300
|
||||
term2 ffc071
|
||||
term3 ffe0c6
|
||||
term4 b9ab66
|
||||
term5 ed9562
|
||||
term6 f4c16d
|
||||
term7 ebd4c1
|
||||
term8 b29f91
|
||||
term9 ff8a20
|
||||
term10 ffd6a8
|
||||
term11 fff2e8
|
||||
term12 d7be91
|
||||
term13 fcad7e
|
||||
term14 ffd497
|
||||
term15 ffffff
|
||||
rosewater ffeee5
|
||||
flamingo fedbc7
|
||||
pink ffd4c1
|
||||
mauve ffac8e
|
||||
red fe9c5e
|
||||
maroon f5af83
|
||||
peach ffc18f
|
||||
yellow ffeee1
|
||||
green ffdaa5
|
||||
teal ffdb92
|
||||
sky e1df87
|
||||
sapphire b3d27e
|
||||
blue ffa2bd
|
||||
lavender ffbcbb
|
||||
klink bf6ba0
|
||||
klinkSelection bf6ba0
|
||||
kvisited cc6232
|
||||
kvisitedSelection cc6232
|
||||
knegative d66a00
|
||||
knegativeSelection d66900
|
||||
kneutral ff8d00
|
||||
kneutralSelection ff8d06
|
||||
kpositive de9d00
|
||||
kpositiveSelection df9d00
|
||||
text ece0d9
|
||||
subtext1 d6c3b5
|
||||
subtext0 9f8e81
|
||||
overlay2 8b7b70
|
||||
overlay1 76685e
|
||||
overlay0 63574e
|
||||
surface2 51463f
|
||||
surface1 3f362f
|
||||
surface0 2b241f
|
||||
base 18120e
|
||||
mantle 18120e
|
||||
crust 17110d
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 887627
|
||||
secondary_paletteKeyColor 817753
|
||||
tertiary_paletteKeyColor 628043
|
||||
neutral_paletteKeyColor 7b776f
|
||||
neutral_variant_paletteKeyColor 7d7766
|
||||
background fff9ee
|
||||
onBackground 1d1b15
|
||||
surface fff9ee
|
||||
surfaceDim dfd9cf
|
||||
surfaceBright fff9ee
|
||||
surfaceContainerLowest ffffff
|
||||
surfaceContainerLow f9f3e8
|
||||
surfaceContainer f3ede3
|
||||
surfaceContainerHigh eee7dd
|
||||
surfaceContainerHighest e8e2d8
|
||||
onSurface 1d1b15
|
||||
surfaceVariant eae2ce
|
||||
onSurfaceVariant 4b4738
|
||||
inverseSurface 333029
|
||||
inverseOnSurface f6f0e6
|
||||
outline 7a7464
|
||||
outlineVariant cdc6b3
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 6e5d0e
|
||||
primary 867425
|
||||
onPrimary ffffff
|
||||
primaryContainer 887627
|
||||
onPrimaryContainer 070500
|
||||
inversePrimary dcc66e
|
||||
secondary 675e3c
|
||||
onSecondary ffffff
|
||||
secondaryContainer efe2b7
|
||||
onSecondaryContainer 6d6441
|
||||
tertiary 5f7d41
|
||||
onTertiary ffffff
|
||||
tertiaryContainer 5f7d41
|
||||
onTertiaryContainer ffffff
|
||||
error ba1a1a
|
||||
onError ffffff
|
||||
errorContainer ffdad6
|
||||
onErrorContainer 93000a
|
||||
primaryFixed f9e287
|
||||
primaryFixedDim dcc66e
|
||||
onPrimaryFixed 221b00
|
||||
onPrimaryFixedVariant 544600
|
||||
secondaryFixed efe2b7
|
||||
secondaryFixedDim d3c69c
|
||||
onSecondaryFixed 211b02
|
||||
onSecondaryFixedVariant 4f4726
|
||||
tertiaryFixed cbeea5
|
||||
tertiaryFixedDim b0d18b
|
||||
onTertiaryFixed 0e2000
|
||||
onTertiaryFixedVariant 334e17
|
||||
term0 9e9a95
|
||||
term1 815900
|
||||
term2 8d8200
|
||||
term3 8d6a00
|
||||
term4 a0871a
|
||||
term5 926000
|
||||
term6 7a8734
|
||||
term7 27211d
|
||||
term8 0f0f0e
|
||||
term9 9f6f00
|
||||
term10 afa220
|
||||
term11 ae8516
|
||||
term12 c5aa3c
|
||||
term13 b47700
|
||||
term14 9aa751
|
||||
term15 2e2723
|
||||
rosewater 9b782c
|
||||
flamingo 9a6e00
|
||||
pink ab7100
|
||||
mauve 8f3b00
|
||||
red 6f4e00
|
||||
maroon 855f00
|
||||
peach 957000
|
||||
yellow 9a7a00
|
||||
green 797100
|
||||
teal 636e1c
|
||||
sky 4b882e
|
||||
sapphire 6a7a22
|
||||
blue 00664e
|
||||
lavender c2484e
|
||||
klink 559652
|
||||
klinkSelection 559652
|
||||
kvisited c06b00
|
||||
kvisitedSelection c06b00
|
||||
knegative b27f00
|
||||
knegativeSelection b27f00
|
||||
kneutral d5a300
|
||||
kneutralSelection d5a300
|
||||
kpositive b3ae00
|
||||
kpositiveSelection b3ae00
|
||||
text 1d1b15
|
||||
subtext1 4b4738
|
||||
subtext0 7a7464
|
||||
overlay2 8a8475
|
||||
overlay1 9c9687
|
||||
overlay0 aea899
|
||||
surface2 c0baac
|
||||
surface1 d3cdc0
|
||||
surface0 e9e3d7
|
||||
base fff9ee
|
||||
mantle f7f1e4
|
||||
crust f1ebde
|
||||
success 4F6354
|
||||
onSuccess FFFFFF
|
||||
successContainer D1E8D5
|
||||
onSuccessContainer 0C1F13
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 88C0D0
|
||||
secondary_paletteKeyColor 81A1C1
|
||||
tertiary_paletteKeyColor 5E81AC
|
||||
neutral_paletteKeyColor 3B4252
|
||||
neutral_variant_paletteKeyColor 434C5E
|
||||
background 2E3440
|
||||
onBackground ECEFF4
|
||||
surface 3B4252
|
||||
surfaceDim 242933
|
||||
surfaceBright 4C566A
|
||||
surfaceContainerLowest 1F232C
|
||||
surfaceContainerLow 424A5E
|
||||
surfaceContainer 434C5E
|
||||
surfaceContainerHigh 4C566A
|
||||
surfaceContainerHighest 55606E
|
||||
onSurface ECEFF4
|
||||
surfaceVariant 434C5E
|
||||
onSurfaceVariant D8DEE9
|
||||
inverseSurface ECEFF4
|
||||
inverseOnSurface 2E3440
|
||||
outline 616E88
|
||||
outlineVariant 4C566A
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 88C0D0
|
||||
primary 88C0D0
|
||||
onPrimary 2E3440
|
||||
primaryContainer 4C566A
|
||||
onPrimaryContainer 88C0D0
|
||||
inversePrimary 6FA3B3
|
||||
secondary 81A1C1
|
||||
onSecondary 2E3440
|
||||
secondaryContainer 4C566A
|
||||
onSecondaryContainer 81A1C1
|
||||
tertiary 5E81AC
|
||||
onTertiary 2E3440
|
||||
tertiaryContainer 4C566A
|
||||
onTertiaryContainer 5E81AC
|
||||
error BF616A
|
||||
onError 2E3440
|
||||
errorContainer 4C3743
|
||||
onErrorContainer BF616A
|
||||
primaryFixed 88C0D0
|
||||
primaryFixedDim 6FA3B3
|
||||
onPrimaryFixed 2E3440
|
||||
onPrimaryFixedVariant 434C5E
|
||||
secondaryFixed 81A1C1
|
||||
secondaryFixedDim 6A84A4
|
||||
onSecondaryFixed 2E3440
|
||||
onSecondaryFixedVariant 434C5E
|
||||
tertiaryFixed 5E81AC
|
||||
tertiaryFixedDim 4A6A8F
|
||||
onTertiaryFixed 2E3440
|
||||
onTertiaryFixedVariant 434C5E
|
||||
term0 3B4252
|
||||
term1 BF616A
|
||||
term2 A3BE8C
|
||||
term3 EBCB8B
|
||||
term4 81A1C1
|
||||
term5 B48EAD
|
||||
term6 88C0D0
|
||||
term7 E5E9F0
|
||||
term8 4C566A
|
||||
term9 BF616A
|
||||
term10 A3BE8C
|
||||
term11 EBCB8B
|
||||
term12 81A1C1
|
||||
term13 B48EAD
|
||||
term14 8FBCBB
|
||||
term15 ECEFF4
|
||||
rosewater ECEFF4
|
||||
flamingo B48EAD
|
||||
pink B48EAD
|
||||
mauve B48EAD
|
||||
red BF616A
|
||||
maroon BF616A
|
||||
peach D08770
|
||||
yellow EBCB8B
|
||||
green A3BE8C
|
||||
teal 8FBCBB
|
||||
sky 88C0D0
|
||||
sapphire 81A1C1
|
||||
blue 5E81AC
|
||||
lavender 5E81AC
|
||||
klink 88C0D0
|
||||
klinkSelection 88C0D0
|
||||
kvisited 81A1C1
|
||||
kvisitedSelection 81A1C1
|
||||
knegative BF616A
|
||||
knegativeSelection BF616A
|
||||
kneutral EBCB8B
|
||||
kneutralSelection EBCB8B
|
||||
kpositive A3BE8C
|
||||
kpositiveSelection A3BE8C
|
||||
text ECEFF4
|
||||
subtext1 D8DEE9
|
||||
subtext0 616E88
|
||||
overlay2 5A677E
|
||||
overlay1 4F5B73
|
||||
overlay0 434C5E
|
||||
surface2 434C5E
|
||||
surface1 3B4252
|
||||
surface0 2E3440
|
||||
base 2E3440
|
||||
mantle 242933
|
||||
crust 1F232C
|
||||
success A3BE8C
|
||||
onSuccess 2E3440
|
||||
successContainer 4C566A
|
||||
onSuccessContainer ECEFF4
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 5a77ab
|
||||
secondary_paletteKeyColor 6d778e
|
||||
tertiary_paletteKeyColor 966699
|
||||
neutral_paletteKeyColor 76777b
|
||||
neutral_variant_paletteKeyColor 747780
|
||||
background 121317
|
||||
onBackground e3e2e7
|
||||
surface 121317
|
||||
surfaceDim 121317
|
||||
surfaceBright 38393d
|
||||
surfaceContainerLowest 0d0e11
|
||||
surfaceContainerLow 1a1b1f
|
||||
surfaceContainer 1e2023
|
||||
surfaceContainerHigh 292a2e
|
||||
surfaceContainerHighest 343538
|
||||
onSurface e3e2e7
|
||||
surfaceVariant 43474f
|
||||
onSurfaceVariant c4c6d0
|
||||
inverseSurface e3e2e7
|
||||
inverseOnSurface 2f3034
|
||||
outline 8e909a
|
||||
outlineVariant 43474f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint aac7ff
|
||||
primary aac7ff
|
||||
onPrimary 0b3060
|
||||
primaryContainer 5a77ab
|
||||
onPrimaryContainer ffffff
|
||||
inversePrimary 415e91
|
||||
secondary bcc7df
|
||||
onSecondary 263144
|
||||
secondaryContainer 3d475b
|
||||
onSecondaryContainer abb5ce
|
||||
tertiary ecb4ed
|
||||
onTertiary 49204e
|
||||
tertiaryContainer b280b4
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed d7e3ff
|
||||
primaryFixedDim aac7ff
|
||||
onPrimaryFixed 001b3e
|
||||
onPrimaryFixedVariant 284777
|
||||
secondaryFixed d8e2fc
|
||||
secondaryFixedDim bcc7df
|
||||
onSecondaryFixed 111c2e
|
||||
onSecondaryFixedVariant 3d475b
|
||||
tertiaryFixed ffd6fd
|
||||
tertiaryFixedDim ecb4ed
|
||||
onTertiaryFixed 310938
|
||||
onTertiaryFixedVariant 623766
|
||||
term0 353434
|
||||
term1 8881ff
|
||||
term2 44def5
|
||||
term3 ffdcf2
|
||||
term4 8badd4
|
||||
term5 9ea5ef
|
||||
term6 95d0fb
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 a39eff
|
||||
term10 89ecff
|
||||
term11 c9fff3
|
||||
term12 aec3da
|
||||
term13 b7baf8
|
||||
term14 b7e0ff
|
||||
term15 ffffff
|
||||
rosewater f4f0fa
|
||||
flamingo e2dff5
|
||||
pink d7dbff
|
||||
mauve abbeff
|
||||
red a9adff
|
||||
maroon b9baf1
|
||||
peach e0c2f9
|
||||
yellow d0f9f4
|
||||
green c3e4ff
|
||||
teal c8e2ff
|
||||
sky c4ddff
|
||||
sapphire a4caff
|
||||
blue 9abdff
|
||||
lavender b7ccff
|
||||
klink 5689ce
|
||||
klinkSelection 5689ce
|
||||
kvisited 5f7bdd
|
||||
kvisitedSelection 5f7bdd
|
||||
knegative 7877ff
|
||||
knegativeSelection 7878ff
|
||||
kneutral c794ff
|
||||
kneutralSelection c794ff
|
||||
kpositive 13b3ff
|
||||
kpositiveSelection 0db3ff
|
||||
text e3e2e7
|
||||
subtext1 c4c6d0
|
||||
subtext0 8e909a
|
||||
overlay2 7c7d86
|
||||
overlay1 686a72
|
||||
overlay0 575960
|
||||
surface2 46484e
|
||||
surface1 36373d
|
||||
surface0 24252a
|
||||
base 121317
|
||||
mantle 121317
|
||||
crust 111216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 5878ab
|
||||
secondary_paletteKeyColor 6c778d
|
||||
tertiary_paletteKeyColor 966799
|
||||
neutral_paletteKeyColor 76777b
|
||||
neutral_variant_paletteKeyColor 747780
|
||||
background 121317
|
||||
onBackground e3e2e7
|
||||
surface 121317
|
||||
surfaceDim 121317
|
||||
surfaceBright 38393d
|
||||
surfaceContainerLowest 0d0e11
|
||||
surfaceContainerLow 1a1c1f
|
||||
surfaceContainer 1e2023
|
||||
surfaceContainerHigh 292a2d
|
||||
surfaceContainerHighest 333538
|
||||
onSurface e3e2e7
|
||||
surfaceVariant 43474f
|
||||
onSurfaceVariant c3c6d0
|
||||
inverseSurface e3e2e7
|
||||
inverseOnSurface 2f3034
|
||||
outline 8d919a
|
||||
outlineVariant 43474f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint a8c8ff
|
||||
primary a8c8ff
|
||||
onPrimary 05305f
|
||||
primaryContainer 7292c6
|
||||
onPrimaryContainer 000513
|
||||
inversePrimary 3e5f90
|
||||
secondary bbc7df
|
||||
onSecondary 253144
|
||||
secondaryContainer 3c475b
|
||||
onSecondaryContainer aab5cd
|
||||
tertiary ebb5ec
|
||||
onTertiary 48204e
|
||||
tertiaryContainer b180b4
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed d5e3ff
|
||||
primaryFixedDim a8c8ff
|
||||
onPrimaryFixed 001b3c
|
||||
onPrimaryFixedVariant 254777
|
||||
secondaryFixed d7e3fc
|
||||
secondaryFixedDim bbc7df
|
||||
onSecondaryFixed 101c2e
|
||||
onSecondaryFixedVariant 3c475b
|
||||
tertiaryFixed ffd6fe
|
||||
tertiaryFixedDim ebb5ec
|
||||
onTertiaryFixed 310937
|
||||
onTertiaryFixedVariant 613766
|
||||
term0 343434
|
||||
term1 8483ff
|
||||
term2 44def5
|
||||
term3 ffdcf2
|
||||
term4 8aaed3
|
||||
term5 9ca5ef
|
||||
term6 94d0fa
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 a29eff
|
||||
term10 89ecff
|
||||
term11 c9fff3
|
||||
term12 adc4d9
|
||||
term13 b5baf8
|
||||
term14 b6e1ff
|
||||
term15 ffffff
|
||||
rosewater f4f0fa
|
||||
flamingo e2e0f5
|
||||
pink d6dbff
|
||||
mauve a9bfff
|
||||
red a6aeff
|
||||
maroon b7baf1
|
||||
peach e0c2f9
|
||||
yellow d0f9f4
|
||||
green c1e4ff
|
||||
teal c7e3ff
|
||||
sky c2deff
|
||||
sapphire a1caff
|
||||
blue 97beff
|
||||
lavender b5cdff
|
||||
klink 5389ce
|
||||
klinkSelection 5489ce
|
||||
kvisited 5b7cdd
|
||||
kvisitedSelection 5c7bdd
|
||||
knegative 7479ff
|
||||
knegativeSelection 7578ff
|
||||
kneutral c794ff
|
||||
kneutralSelection c794ff
|
||||
kpositive 00b4fd
|
||||
kpositiveSelection 00b4fe
|
||||
text e3e2e7
|
||||
subtext1 c3c6d0
|
||||
subtext0 8d919a
|
||||
overlay2 7b7e86
|
||||
overlay1 686b72
|
||||
overlay0 575960
|
||||
surface2 46484e
|
||||
surface1 36373d
|
||||
surface0 24252a
|
||||
base 121317
|
||||
mantle 121317
|
||||
crust 111216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 8b7526
|
||||
secondary_paletteKeyColor 827652
|
||||
tertiary_paletteKeyColor 667f40
|
||||
neutral_paletteKeyColor 7b776f
|
||||
neutral_variant_paletteKeyColor 7e7766
|
||||
background fff8f0
|
||||
onBackground 1e1b15
|
||||
surface fff8f0
|
||||
surfaceDim e0d9cf
|
||||
surfaceBright fff8f0
|
||||
surfaceContainerLowest ffffff
|
||||
surfaceContainerLow faf3e8
|
||||
surfaceContainer f4ede3
|
||||
surfaceContainerHigh eee7dd
|
||||
surfaceContainerHighest e8e2d7
|
||||
onSurface 1e1b15
|
||||
surfaceVariant ebe2ce
|
||||
onSurfaceVariant 4c4638
|
||||
inverseSurface 333029
|
||||
inverseOnSurface f7f0e5
|
||||
outline 7b7464
|
||||
outlineVariant cec6b3
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 715c0d
|
||||
primary 897324
|
||||
onPrimary ffffff
|
||||
primaryContainer 8b7526
|
||||
onPrimaryContainer 070500
|
||||
inversePrimary e0c56d
|
||||
secondary 695e3b
|
||||
onSecondary ffffff
|
||||
secondaryContainer f1e2b6
|
||||
onSecondaryContainer 6f6441
|
||||
tertiary 647d3e
|
||||
onTertiary ffffff
|
||||
tertiaryContainer 647d3e
|
||||
onTertiaryContainer ffffff
|
||||
error ba1a1a
|
||||
onError ffffff
|
||||
errorContainer ffdad6
|
||||
onErrorContainer 93000a
|
||||
primaryFixed fde186
|
||||
primaryFixedDim e0c56d
|
||||
onPrimaryFixed 231b00
|
||||
onPrimaryFixedVariant 564500
|
||||
secondaryFixed f1e2b6
|
||||
secondaryFixedDim d5c69c
|
||||
onSecondaryFixed 221b02
|
||||
onSecondaryFixedVariant 504626
|
||||
tertiaryFixed d0eda2
|
||||
tertiaryFixedDim b4d088
|
||||
onTertiaryFixed 121f00
|
||||
onTertiaryFixedVariant 374d14
|
||||
term0 9e9a95
|
||||
term1 835800
|
||||
term2 908100
|
||||
term3 906900
|
||||
term4 a38618
|
||||
term5 945e00
|
||||
term6 7d8631
|
||||
term7 27211d
|
||||
term8 100f0e
|
||||
term9 a26e00
|
||||
term10 b3a11d
|
||||
term11 b08416
|
||||
term12 c8a93b
|
||||
term13 b77600
|
||||
term14 9da74e
|
||||
term15 2e2723
|
||||
rosewater 9d772d
|
||||
flamingo 9c6d00
|
||||
pink ae7000
|
||||
mauve 8f3b00
|
||||
red 714d00
|
||||
maroon 885e00
|
||||
peach 986f00
|
||||
yellow 9d7900
|
||||
green 7b7000
|
||||
teal 666d19
|
||||
sky 4b882e
|
||||
sapphire 6d791e
|
||||
blue 00664e
|
||||
lavender c2484e
|
||||
klink 559652
|
||||
klinkSelection 559652
|
||||
kvisited c06b00
|
||||
kvisitedSelection c06b00
|
||||
knegative b47d00
|
||||
knegativeSelection b57d00
|
||||
kneutral d8a200
|
||||
kneutralSelection d9a200
|
||||
kpositive b7ac00
|
||||
kpositiveSelection b8ac00
|
||||
text 1e1b15
|
||||
subtext1 4c4638
|
||||
subtext0 7b7464
|
||||
overlay2 8b8475
|
||||
overlay1 9d9688
|
||||
overlay0 aea79a
|
||||
surface2 c0b9ae
|
||||
surface1 d4cdc2
|
||||
surface0 e9e2d9
|
||||
base fff8f0
|
||||
mantle f7f0e6
|
||||
crust f2eae0
|
||||
success 4F6354
|
||||
onSuccess FFFFFF
|
||||
successContainer D1E8D5
|
||||
onSuccessContainer 0C1F13
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 786fab
|
||||
secondary_paletteKeyColor 79748e
|
||||
tertiary_paletteKeyColor a1638a
|
||||
neutral_paletteKeyColor 79767b
|
||||
neutral_variant_paletteKeyColor 787580
|
||||
background 141317
|
||||
onBackground e5e1e7
|
||||
surface 141317
|
||||
surfaceDim 141317
|
||||
surfaceBright 3a383d
|
||||
surfaceContainerLowest 0e0e11
|
||||
surfaceContainerLow 1c1b1f
|
||||
surfaceContainer 201f23
|
||||
surfaceContainerHigh 2b292e
|
||||
surfaceContainerHighest 363438
|
||||
onSurface e5e1e7
|
||||
surfaceVariant 48454f
|
||||
onSurfaceVariant c9c4d0
|
||||
inverseSurface e5e1e7
|
||||
inverseOnSurface 313034
|
||||
outline 938f9a
|
||||
outlineVariant 48454f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint c9bfff
|
||||
primary c9bfff
|
||||
onPrimary 31285f
|
||||
primaryContainer 786fab
|
||||
onPrimaryContainer ffffff
|
||||
inversePrimary 5f5791
|
||||
secondary c9c3e0
|
||||
onSecondary 312e44
|
||||
secondaryContainer 48445b
|
||||
onSecondaryContainer b7b1ce
|
||||
tertiary f9b1dc
|
||||
onTertiary 501d41
|
||||
tertiaryContainer be7ca5
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed e5deff
|
||||
primaryFixedDim c9bfff
|
||||
onPrimaryFixed 1b1149
|
||||
onPrimaryFixedVariant 473f77
|
||||
secondaryFixed e5dffc
|
||||
secondaryFixedDim c9c3e0
|
||||
onSecondaryFixed 1c192e
|
||||
onSecondaryFixedVariant 48445b
|
||||
tertiaryFixed ffd8ec
|
||||
tertiaryFixedDim f9b1dc
|
||||
onTertiaryFixed 37072b
|
||||
onTertiaryFixedVariant 6a3458
|
||||
term0 353434
|
||||
term1 b96cff
|
||||
term2 ffbac2
|
||||
term3 ffdcf2
|
||||
term4 9da8d8
|
||||
term5 bb9de8
|
||||
term6 9dceff
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 cb8fff
|
||||
term10 ffd2d5
|
||||
term11 fff0f6
|
||||
term12 b7c0dd
|
||||
term13 cfb3f2
|
||||
term14 bae0ff
|
||||
term15 ffffff
|
||||
rosewater f8eff8
|
||||
flamingo ebddf2
|
||||
pink e6d6ff
|
||||
mauve c6b6ff
|
||||
red c9a3fa
|
||||
maroon ceb4eb
|
||||
peach e5c1f6
|
||||
yellow ffecf3
|
||||
green c8e3ff
|
||||
teal d7dfff
|
||||
sky d3d9ff
|
||||
sapphire bdc3ff
|
||||
blue b7b6ff
|
||||
lavender ccc6ff
|
||||
klink 7b80d1
|
||||
klinkSelection 7b80d1
|
||||
kvisited 8a6fd7
|
||||
kvisitedSelection 8a6fd7
|
||||
knegative ac62fa
|
||||
knegativeSelection ac62fa
|
||||
kneutral d48dff
|
||||
kneutralSelection d48eff
|
||||
kpositive 60adff
|
||||
kpositiveSelection 60adff
|
||||
text e5e1e7
|
||||
subtext1 c9c4d0
|
||||
subtext0 938f9a
|
||||
overlay2 807c86
|
||||
overlay1 6c6972
|
||||
overlay0 5b5860
|
||||
surface2 4a474e
|
||||
surface1 39373d
|
||||
surface0 262529
|
||||
base 141317
|
||||
mantle 141317
|
||||
crust 131216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7670ac
|
||||
secondary_paletteKeyColor 78748e
|
||||
tertiary_paletteKeyColor a1638b
|
||||
neutral_paletteKeyColor 78767b
|
||||
neutral_variant_paletteKeyColor 787680
|
||||
background 141317
|
||||
onBackground e5e1e7
|
||||
surface 141317
|
||||
surfaceDim 141317
|
||||
surfaceBright 3a383d
|
||||
surfaceContainerLowest 0e0e11
|
||||
surfaceContainerLow 1c1b1f
|
||||
surfaceContainer 201f23
|
||||
surfaceContainerHigh 2a292e
|
||||
surfaceContainerHighest 353438
|
||||
onSurface e5e1e7
|
||||
surfaceVariant 47454f
|
||||
onSurfaceVariant c9c5d0
|
||||
inverseSurface e5e1e7
|
||||
inverseOnSurface 313034
|
||||
outline 928f9a
|
||||
outlineVariant 47454f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint c6bfff
|
||||
primary c6bfff
|
||||
onPrimary 2e2960
|
||||
primaryContainer 7670ac
|
||||
onPrimaryContainer 040025
|
||||
inversePrimary 5d5791
|
||||
secondary c8c3e0
|
||||
onSecondary 302e44
|
||||
secondaryContainer 47445c
|
||||
onSecondaryContainer b6b2ce
|
||||
tertiary f9b1dd
|
||||
onTertiary 501d41
|
||||
tertiaryContainer be7ca6
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed e4dfff
|
||||
primaryFixedDim c6bfff
|
||||
onPrimaryFixed 19124a
|
||||
onPrimaryFixedVariant 454078
|
||||
secondaryFixed e4dffd
|
||||
secondaryFixedDim c8c3e0
|
||||
onSecondaryFixed 1b192e
|
||||
onSecondaryFixedVariant 47445c
|
||||
tertiaryFixed ffd8ed
|
||||
tertiaryFixedDim f9b1dd
|
||||
onTertiaryFixed 37072b
|
||||
onTertiaryFixedVariant 6a3459
|
||||
term0 353434
|
||||
term1 b56eff
|
||||
term2 ffbac2
|
||||
term3 ffdcf2
|
||||
term4 9ca9d8
|
||||
term5 b89de9
|
||||
term6 9dceff
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 c791ff
|
||||
term10 89ecff
|
||||
term11 fff0f6
|
||||
term12 b7c0dd
|
||||
term13 cdb4f3
|
||||
term14 bae0ff
|
||||
term15 ffffff
|
||||
rosewater f8eff8
|
||||
flamingo eaddf3
|
||||
pink e4d7ff
|
||||
mauve c4b7ff
|
||||
red c6a4fb
|
||||
maroon ccb4eb
|
||||
peach e4c1f7
|
||||
yellow ffecf3
|
||||
green c8e3ff
|
||||
teal d5dfff
|
||||
sky d2d9ff
|
||||
sapphire bbc4ff
|
||||
blue b5b6ff
|
||||
lavender cbc7ff
|
||||
klink 7880d1
|
||||
klinkSelection 7881d1
|
||||
kvisited 8770d8
|
||||
kvisitedSelection 8770d8
|
||||
knegative a964fd
|
||||
knegativeSelection a864fd
|
||||
kneutral d08fff
|
||||
kneutralSelection d090ff
|
||||
kpositive 60adff
|
||||
kpositiveSelection 60adff
|
||||
text e5e1e7
|
||||
subtext1 c9c5d0
|
||||
subtext0 928f9a
|
||||
overlay2 7f7c86
|
||||
overlay1 6c6972
|
||||
overlay0 5a5860
|
||||
surface2 49474e
|
||||
surface1 38373c
|
||||
surface0 262529
|
||||
base 141317
|
||||
mantle 141317
|
||||
crust 131216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 6f72ac
|
||||
secondary_paletteKeyColor 75758e
|
||||
tertiary_paletteKeyColor 9d648f
|
||||
neutral_paletteKeyColor 78767b
|
||||
neutral_variant_paletteKeyColor 777680
|
||||
background 131317
|
||||
onBackground e5e1e7
|
||||
surface 131317
|
||||
surfaceDim 131317
|
||||
surfaceBright 39393d
|
||||
surfaceContainerLowest 0e0e11
|
||||
surfaceContainerLow 1b1b1f
|
||||
surfaceContainer 1f1f23
|
||||
surfaceContainerHigh 2a292e
|
||||
surfaceContainerHighest 353438
|
||||
onSurface e5e1e7
|
||||
surfaceVariant 46464f
|
||||
onSurfaceVariant c7c5d1
|
||||
inverseSurface e5e1e7
|
||||
inverseOnSurface 303034
|
||||
outline 918f9a
|
||||
outlineVariant 46464f
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint bfc1ff
|
||||
primary bfc1ff
|
||||
onPrimary 282b60
|
||||
primaryContainer 6f72ac
|
||||
onPrimaryContainer 000028
|
||||
inversePrimary 565992
|
||||
secondary c5c4e0
|
||||
onSecondary 2e2f44
|
||||
secondaryContainer 44455c
|
||||
onSecondaryContainer b3b3ce
|
||||
tertiary f4b2e2
|
||||
onTertiary 4e1e45
|
||||
tertiaryContainer ba7eaa
|
||||
onTertiaryContainer 000000
|
||||
error ffb4ab
|
||||
onError 690005
|
||||
errorContainer 93000a
|
||||
onErrorContainer ffdad6
|
||||
primaryFixed e0e0ff
|
||||
primaryFixedDim bfc1ff
|
||||
onPrimaryFixed 12144a
|
||||
onPrimaryFixedVariant 3e4278
|
||||
secondaryFixed e1e0fd
|
||||
secondaryFixedDim c5c4e0
|
||||
onSecondaryFixed 191a2e
|
||||
onSecondaryFixedVariant 44455c
|
||||
tertiaryFixed ffd7f1
|
||||
tertiaryFixedDim f4b2e2
|
||||
onTertiaryFixed 35082f
|
||||
onTertiaryFixedVariant 67355d
|
||||
term0 353434
|
||||
term1 a875ff
|
||||
term2 44def5
|
||||
term3 ffdcf2
|
||||
term4 97aad7
|
||||
term5 b29feb
|
||||
term6 9dceff
|
||||
term7 e8d3de
|
||||
term8 ac9fa9
|
||||
term9 bd95ff
|
||||
term10 89ecff
|
||||
term11 fff0f6
|
||||
term12 b4c1dc
|
||||
term13 c8b5f5
|
||||
term14 bae0ff
|
||||
term15 ffffff
|
||||
rosewater f7eff9
|
||||
flamingo e8def3
|
||||
pink e1d8ff
|
||||
mauve bdb9ff
|
||||
red bfa6fe
|
||||
maroon c7b6ed
|
||||
peach e0c2f9
|
||||
yellow ffecf3
|
||||
green c8e3ff
|
||||
teal d2e0ff
|
||||
sky cedaff
|
||||
sapphire b5c5ff
|
||||
blue aeb8ff
|
||||
lavender c6c8ff
|
||||
klink 7083d2
|
||||
klinkSelection 6f83d2
|
||||
kvisited 7e73db
|
||||
kvisitedSelection 7d73db
|
||||
knegative 9d69ff
|
||||
knegativeSelection 9b6aff
|
||||
kneutral c794ff
|
||||
kneutralSelection c794ff
|
||||
kpositive 60adff
|
||||
kpositiveSelection 60adff
|
||||
text e5e1e7
|
||||
subtext1 c7c5d1
|
||||
subtext0 918f9a
|
||||
overlay2 7e7c86
|
||||
overlay1 6b6972
|
||||
overlay0 595860
|
||||
surface2 48474e
|
||||
surface1 37373d
|
||||
surface0 25252a
|
||||
base 131317
|
||||
mantle 131317
|
||||
crust 121216
|
||||
success B5CCBA
|
||||
onSuccess 213528
|
||||
successContainer 374B3E
|
||||
onSuccessContainer D1E9D6
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 268BD2
|
||||
secondary_paletteKeyColor 2AA198
|
||||
tertiary_paletteKeyColor 6C71C4
|
||||
neutral_paletteKeyColor 002B36
|
||||
neutral_variant_paletteKeyColor 073642
|
||||
background 002B36
|
||||
onBackground FDF6E3
|
||||
surface 073642
|
||||
surfaceDim 001F29
|
||||
surfaceBright 0D4250
|
||||
surfaceContainerLowest 00151D
|
||||
surfaceContainerLow 0A404E
|
||||
surfaceContainer 094B59
|
||||
surfaceContainerHigh 0D4250
|
||||
surfaceContainerHighest 11505E
|
||||
onSurface FDF6E3
|
||||
surfaceVariant 094B59
|
||||
onSurfaceVariant 93A1A1
|
||||
inverseSurface FDF6E3
|
||||
inverseOnSurface 002B36
|
||||
outline 586E75
|
||||
outlineVariant 0D4250
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 268BD2
|
||||
primary 268BD2
|
||||
onPrimary 002B36
|
||||
primaryContainer 0D4250
|
||||
onPrimaryContainer 268BD2
|
||||
inversePrimary 2075B2
|
||||
secondary 2AA198
|
||||
onSecondary 002B36
|
||||
secondaryContainer 0D4250
|
||||
onSecondaryContainer 2AA198
|
||||
tertiary 6C71C4
|
||||
onTertiary 002B36
|
||||
tertiaryContainer 0D4250
|
||||
onTertiaryContainer 6C71C4
|
||||
error DC322F
|
||||
onError 002B36
|
||||
errorContainer 4C3743
|
||||
onErrorContainer DC322F
|
||||
primaryFixed 268BD2
|
||||
primaryFixedDim 2075B2
|
||||
onPrimaryFixed 002B36
|
||||
onPrimaryFixedVariant 094B59
|
||||
secondaryFixed 2AA198
|
||||
secondaryFixedDim 228178
|
||||
onSecondaryFixed 002B36
|
||||
onSecondaryFixedVariant 094B59
|
||||
tertiaryFixed 6C71C4
|
||||
tertiaryFixedDim 5C61A4
|
||||
onTertiaryFixed 002B36
|
||||
onTertiaryFixedVariant 094B59
|
||||
term0 002B36
|
||||
term1 DC322F
|
||||
term2 859900
|
||||
term3 B58900
|
||||
term4 268BD2
|
||||
term5 D33682
|
||||
term6 2AA198
|
||||
term7 EEE8D5
|
||||
term8 586E75
|
||||
term9 CB4B16
|
||||
term10 859900
|
||||
term11 B58900
|
||||
term12 268BD2
|
||||
term13 6C71C4
|
||||
term14 2AA198
|
||||
term15 FDF6E3
|
||||
rosewater FDF6E3
|
||||
flamingo EEE8D5
|
||||
pink D33682
|
||||
mauve 6C71C4
|
||||
red DC322F
|
||||
maroon CB4B16
|
||||
peach CB4B16
|
||||
yellow B58900
|
||||
green 859900
|
||||
teal 2AA198
|
||||
sky 2AA198
|
||||
sapphire 268BD2
|
||||
blue 268BD2
|
||||
lavender 6C71C4
|
||||
klink 268BD2
|
||||
klinkSelection 268BD2
|
||||
kvisited 6C71C4
|
||||
kvisitedSelection 6C71C4
|
||||
knegative DC322F
|
||||
knegativeSelection DC322F
|
||||
kneutral B58900
|
||||
kneutralSelection B58900
|
||||
kpositive 859900
|
||||
kpositiveSelection 859900
|
||||
text FDF6E3
|
||||
subtext1 93A1A1
|
||||
subtext0 839496
|
||||
overlay2 657B83
|
||||
overlay1 586E75
|
||||
overlay0 073642
|
||||
surface2 094B59
|
||||
surface1 073642
|
||||
surface0 002B36
|
||||
base 002B36
|
||||
mantle 001F29
|
||||
crust 00151D
|
||||
success 859900
|
||||
onSuccess 002B36
|
||||
successContainer 0D4250
|
||||
onSuccessContainer FDF6E3
|
||||
@@ -0,0 +1,110 @@
|
||||
primary_paletteKeyColor 7AA2F7
|
||||
secondary_paletteKeyColor 9ECE6A
|
||||
tertiary_paletteKeyColor BB9AF7
|
||||
neutral_paletteKeyColor 1A1B26
|
||||
neutral_variant_paletteKeyColor 292E42
|
||||
background 1A1B26
|
||||
onBackground C0CAF5
|
||||
surface 24283B
|
||||
surfaceDim 16161E
|
||||
surfaceBright 3B4261
|
||||
surfaceContainerLowest 0F0F14
|
||||
surfaceContainerLow 2B3048
|
||||
surfaceContainer 2A2F41
|
||||
surfaceContainerHigh 3B4261
|
||||
surfaceContainerHighest 414868
|
||||
onSurface C0CAF5
|
||||
surfaceVariant 2A2F41
|
||||
onSurfaceVariant A9B1D6
|
||||
inverseSurface C0CAF5
|
||||
inverseOnSurface 1A1B26
|
||||
outline 565F89
|
||||
outlineVariant 3B4261
|
||||
shadow 000000
|
||||
scrim 000000
|
||||
surfaceTint 7AA2F7
|
||||
primary 7AA2F7
|
||||
onPrimary 1A1B26
|
||||
primaryContainer 3B4261
|
||||
onPrimaryContainer 7AA2F7
|
||||
inversePrimary 5A7FD7
|
||||
secondary 9ECE6A
|
||||
onSecondary 1A1B26
|
||||
secondaryContainer 3B4261
|
||||
onSecondaryContainer 9ECE6A
|
||||
tertiary BB9AF7
|
||||
onTertiary 1A1B26
|
||||
tertiaryContainer 3B4261
|
||||
onTertiaryContainer BB9AF7
|
||||
error F7768E
|
||||
onError 1A1B26
|
||||
errorContainer 4C3743
|
||||
onErrorContainer F7768E
|
||||
primaryFixed 7AA2F7
|
||||
primaryFixedDim 5A7FD7
|
||||
onPrimaryFixed 1A1B26
|
||||
onPrimaryFixedVariant 2A2F41
|
||||
secondaryFixed 9ECE6A
|
||||
secondaryFixedDim 7EAE4A
|
||||
onSecondaryFixed 1A1B26
|
||||
onSecondaryFixedVariant 2A2F41
|
||||
tertiaryFixed BB9AF7
|
||||
tertiaryFixedDim 9B7AD7
|
||||
onTertiaryFixed 1A1B26
|
||||
onTertiaryFixedVariant 2A2F41
|
||||
term0 1A1B26
|
||||
term1 F7768E
|
||||
term2 9ECE6A
|
||||
term3 E0AF68
|
||||
term4 7AA2F7
|
||||
term5 BB9AF7
|
||||
term6 7DCFFF
|
||||
term7 C0CAF5
|
||||
term8 565F89
|
||||
term9 F7768E
|
||||
term10 9ECE6A
|
||||
term11 E0AF68
|
||||
term12 7AA2F7
|
||||
term13 BB9AF7
|
||||
term14 7DCFFF
|
||||
term15 C0CAF5
|
||||
rosewater C0CAF5
|
||||
flamingo BB9AF7
|
||||
pink F7768E
|
||||
mauve BB9AF7
|
||||
red F7768E
|
||||
maroon E0AF68
|
||||
peach FF9E64
|
||||
yellow E0AF68
|
||||
green 9ECE6A
|
||||
teal 1ABC9C
|
||||
sky 7DCFFF
|
||||
sapphire 2AC3DE
|
||||
blue 7AA2F7
|
||||
lavender 7DCFFF
|
||||
klink 7AA2F7
|
||||
klinkSelection 7AA2F7
|
||||
kvisited BB9AF7
|
||||
kvisitedSelection BB9AF7
|
||||
knegative F7768E
|
||||
knegativeSelection F7768E
|
||||
kneutral E0AF68
|
||||
kneutralSelection E0AF68
|
||||
kpositive 9ECE6A
|
||||
kpositiveSelection 9ECE6A
|
||||
text C0CAF5
|
||||
subtext1 A9B1D6
|
||||
subtext0 9AA5CE
|
||||
overlay2 787C99
|
||||
overlay1 696D85
|
||||
overlay0 565F89
|
||||
surface2 2A2F41
|
||||
surface1 24283B
|
||||
surface0 1A1B26
|
||||
base 1A1B26
|
||||
mantle 16161E
|
||||
crust 0F0F14
|
||||
success 9ECE6A
|
||||
onSuccess 1A1B26
|
||||
successContainer 3B4261
|
||||
onSuccessContainer C0CAF5
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,139 @@
|
||||
from typing import Annotated, Optional
|
||||
import typer
|
||||
import json
|
||||
|
||||
from zshell.utils.schemepalettes import PRESETS
|
||||
from pathlib import Path
|
||||
from PIL import Image
|
||||
from materialyoucolor.quantize import QuantizeCelebi
|
||||
from materialyoucolor.score.score import Score
|
||||
from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors
|
||||
from materialyoucolor.hct.hct import Hct
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
|
||||
@app.command()
|
||||
def generate(
|
||||
# image inputs (optional - used for image mode)
|
||||
image_path: Optional[Path] = typer.Option(
|
||||
None, help="Path to source image. Required for image mode."),
|
||||
thumbnail_path: Optional[Path] = typer.Option(
|
||||
Path("thumb.jpg"), help="Path to temporary thumbnail (image mode)."),
|
||||
scheme: Optional[str] = typer.Option(
|
||||
"fruit-salad", help="Color scheme algorithm to use for image mode. Ignored in preset mode."),
|
||||
# preset inputs (optional - used for preset mode)
|
||||
preset: Optional[str] = typer.Option(
|
||||
None, help="Name of a premade scheme in this format: <preset_name>:<preset_flavor>"),
|
||||
mode: str = typer.Option(
|
||||
"dark", help="Mode of the preset scheme (dark or light)."),
|
||||
# output (required)
|
||||
output: Path = typer.Option(..., help="Output JSON path.")
|
||||
):
|
||||
if preset is None and image_path is None:
|
||||
raise typer.BadParameter(
|
||||
"Either --image-path or --preset must be provided.")
|
||||
|
||||
if preset is not None and image_path is not None:
|
||||
raise typer.BadParameter(
|
||||
"Use either --image-path or --preset, not both.")
|
||||
|
||||
match scheme:
|
||||
case "fruit-salad":
|
||||
from materialyoucolor.scheme.scheme_fruit_salad import SchemeFruitSalad as Scheme
|
||||
case 'expressive':
|
||||
from materialyoucolor.scheme.scheme_expressive import SchemeExpressive as Scheme
|
||||
case 'monochrome':
|
||||
from materialyoucolor.scheme.scheme_monochrome import SchemeMonochrome as Scheme
|
||||
case 'rainbow':
|
||||
from materialyoucolor.scheme.scheme_rainbow import SchemeRainbow as Scheme
|
||||
case 'tonal-spot':
|
||||
from materialyoucolor.scheme.scheme_tonal_spot import SchemeTonalSpot as Scheme
|
||||
case 'neutral':
|
||||
from materialyoucolor.scheme.scheme_neutral import SchemeNeutral as Scheme
|
||||
case 'fidelity':
|
||||
from materialyoucolor.scheme.scheme_fidelity import SchemeFidelity as Scheme
|
||||
case 'content':
|
||||
from materialyoucolor.scheme.scheme_content import SchemeContent as Scheme
|
||||
case 'vibrant':
|
||||
from materialyoucolor.scheme.scheme_vibrant import SchemeVibrant as Scheme
|
||||
case _:
|
||||
from materialyoucolor.scheme.scheme_fruit_salad import SchemeFruitSalad as Scheme
|
||||
|
||||
def generate_thumbnail(image_path, thumbnail_path, size=(128, 128)):
|
||||
thumbnail_file = Path(thumbnail_path)
|
||||
|
||||
image = Image.open(image_path)
|
||||
image = image.convert("RGB")
|
||||
image.thumbnail(size, Image.NEAREST)
|
||||
|
||||
thumbnail_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
image.save(thumbnail_path, "JPEG")
|
||||
|
||||
def seed_from_image(image_path: Path) -> Hct:
|
||||
image = Image.open(image_path)
|
||||
pixel_len = image.width * image.height
|
||||
image_data = image.getdata()
|
||||
|
||||
quality = 1
|
||||
pixel_array = [image_data[_] for _ in range(0, pixel_len, quality)]
|
||||
|
||||
result = QuantizeCelebi(pixel_array, 128)
|
||||
return Hct.from_int(Score.score(result)[0])
|
||||
|
||||
def seed_from_preset(name: str) -> Hct:
|
||||
try:
|
||||
return PRESETS[name].primary
|
||||
except KeyError:
|
||||
raise typer.BadParameter(
|
||||
f"Preset '{name}' not found. Available presets: {', '.join(PRESETS.keys())}")
|
||||
|
||||
def generate_color_scheme(seed: Hct, mode: str) -> dict[str, str]:
|
||||
|
||||
is_dark = mode.lower() == "dark"
|
||||
|
||||
scheme = Scheme(
|
||||
seed,
|
||||
is_dark,
|
||||
0.0
|
||||
)
|
||||
|
||||
color_dict = {}
|
||||
for color in vars(MaterialDynamicColors).keys():
|
||||
color_name = getattr(MaterialDynamicColors, color)
|
||||
if hasattr(color_name, "get_hct"):
|
||||
color_int = color_name.get_hct(scheme).to_int()
|
||||
color_dict[color] = int_to_hex(color_int)
|
||||
|
||||
return color_dict
|
||||
|
||||
def int_to_hex(argb_int):
|
||||
return "#{:06X}".format(argb_int & 0xFFFFFF)
|
||||
|
||||
try:
|
||||
if preset:
|
||||
seed = seed_from_preset(preset)
|
||||
colors = generate_color_scheme(seed, mode)
|
||||
name, flavor = preset.split(":")
|
||||
else:
|
||||
generate_thumbnail(image_path, str(thumbnail_path))
|
||||
seed = seed_from_image(thumbnail_path)
|
||||
colors = generate_color_scheme(seed, mode)
|
||||
name = "dynamic"
|
||||
flavor = "default"
|
||||
|
||||
output_dict = {
|
||||
"name": name,
|
||||
"flavor": flavor,
|
||||
"mode": mode,
|
||||
"variant": scheme,
|
||||
"colors": colors
|
||||
}
|
||||
|
||||
output.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output, "w") as f:
|
||||
json.dump(output_dict, f, indent=4)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
# with open(output, "w") as f:
|
||||
# f.write(f"Error: {e}")
|
||||
@@ -0,0 +1,18 @@
|
||||
import subprocess
|
||||
import typer
|
||||
|
||||
args = ["qs", "-c", "zshell"]
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
|
||||
@app.command()
|
||||
def start():
|
||||
subprocess.run(args + ["ipc"] + ["call"] +
|
||||
["picker"] + ["open"], check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def start_freeze():
|
||||
subprocess.run(args + ["ipc"] + ["call"] +
|
||||
["picker"] + ["openFreeze"], check=True)
|
||||
@@ -0,0 +1,37 @@
|
||||
import subprocess
|
||||
import typer
|
||||
|
||||
args = ["qs", "-c", "zshell"]
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
|
||||
@app.command()
|
||||
def kill():
|
||||
subprocess.run(args + ["kill"], check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def start(no_daemon: bool = False):
|
||||
subprocess.run(args + ["-n"] + ([] if no_daemon else ["-d"]), check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def show():
|
||||
subprocess.run(args + ["ipc"] + ["show"], check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def log():
|
||||
subprocess.run(args + ["log"], check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def lock():
|
||||
subprocess.run(args + ["ipc"] + ["call"] + ["lock"] + ["lock"], check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def call(target: str, method: str, method_args: list[str] = typer.Argument(None)):
|
||||
subprocess.run(args + ["ipc"] + ["call"] + [target] +
|
||||
[method] + method_args, check=True)
|
||||
@@ -0,0 +1,40 @@
|
||||
import subprocess
|
||||
import typer
|
||||
|
||||
from typing import Annotated
|
||||
from PIL import Image, ImageFilter
|
||||
from pathlib import Path
|
||||
|
||||
args = ["qs", "-c", "zshell"]
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
|
||||
@app.command()
|
||||
def set(wallpaper: Path):
|
||||
subprocess.run(args + ["ipc"] + ["call"] +
|
||||
["wallpaper"] + ["set"] + [wallpaper], check=True)
|
||||
|
||||
|
||||
@app.command()
|
||||
def lockscreen(
|
||||
input_image: Annotated[
|
||||
Path,
|
||||
typer.Option(),
|
||||
],
|
||||
output_path: Annotated[
|
||||
Path,
|
||||
typer.Option(),
|
||||
],
|
||||
blur_amount: int = 20
|
||||
):
|
||||
img = Image.open(input_image)
|
||||
size = img.size
|
||||
if (size[0] < 3840 or size[1] < 2160):
|
||||
img = img.resize((size[0] // 2, size[1] // 2), Image.NEAREST)
|
||||
else:
|
||||
img = img.resize((size[0] // 4, size[1] // 4), Image.NEAREST)
|
||||
|
||||
img = img.filter(ImageFilter.GaussianBlur(blur_amount))
|
||||
|
||||
img.save(output_path, "PNG")
|
||||
Binary file not shown.
@@ -0,0 +1,30 @@
|
||||
from dataclasses import dataclass
|
||||
from materialyoucolor.hct.hct import Hct
|
||||
from typing import Mapping
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class SeedPalette:
|
||||
primary: Hct
|
||||
secondary: Hct
|
||||
tertiary: Hct
|
||||
neutral: Hct
|
||||
neutral_variant: Hct
|
||||
error: Hct | None = None
|
||||
|
||||
|
||||
def hex_to_hct(hex_: str) -> Hct:
|
||||
return Hct.from_int(int(f"0xFF{hex_}", 16))
|
||||
|
||||
|
||||
CATPPUCCIN_MACCHIATO = SeedPalette(
|
||||
primary=hex_to_hct("C6A0F6"),
|
||||
secondary=hex_to_hct("7DC4E4"),
|
||||
tertiary=hex_to_hct("F5BDE6"),
|
||||
neutral=hex_to_hct("24273A"),
|
||||
neutral_variant=hex_to_hct("363A4F"),
|
||||
)
|
||||
|
||||
PRESETS: Mapping[str, SeedPalette] = {
|
||||
"catppuccin:macchiato": CATPPUCCIN_MACCHIATO,
|
||||
}
|
||||
Generated
+7
-7
@@ -2,11 +2,11 @@
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1770197578,
|
||||
"narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=",
|
||||
"lastModified": 1771369470,
|
||||
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2",
|
||||
"rev": "0182a361324364ae3f436a63005877674cf45efb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -23,11 +23,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1769593411,
|
||||
"narHash": "sha256-WW00FaBiUmQyxvSbefvgxIjwf/WmRrEGBbwMHvW/7uQ=",
|
||||
"lastModified": 1770693276,
|
||||
"narHash": "sha256-ngXnN5YXu+f45+QGYNN/VEBMQmcBCYGRCqwaK8cxY1s=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "1e4d804e7f3fa7465811030e8da2bf10d544426a",
|
||||
"revCount": 732,
|
||||
"rev": "dacfa9de829ac7cb173825f593236bf2c21f637e",
|
||||
"revCount": 735,
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
},
|
||||
|
||||
@@ -18,37 +18,49 @@
|
||||
in {
|
||||
formatter = forAllSystems (pkgs: pkgs.nixfmt);
|
||||
|
||||
packages = forAllSystems (pkgs: let
|
||||
packages = forAllSystems (
|
||||
pkgs: let
|
||||
pythonEnv = pkgs.python3.withPackages (ps: [
|
||||
ps.pillow
|
||||
ps.materialyoucolor
|
||||
]);
|
||||
in rec {
|
||||
zshell-cli = pkgs.callPackage ./nix/zshell-cli.nix {};
|
||||
|
||||
zshell = pkgs.callPackage ./nix {
|
||||
rev = self.rev or self.dirtyRev;
|
||||
stdenv = pkgs.clangStdenv;
|
||||
|
||||
quickshell = inputs.quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default.override {
|
||||
withX11 = false;
|
||||
withI3 = false;
|
||||
};
|
||||
app2unit = pkgs.callPackage ./nix/app2unit.nix {inherit pkgs;};
|
||||
|
||||
inherit pythonEnv;
|
||||
app2unit = pkgs.callPackage ./nix/app2unit.nix {};
|
||||
|
||||
inherit pythonEnv zshell-cli;
|
||||
};
|
||||
|
||||
default = zshell;
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
devShells = forAllSystems (pkgs: {
|
||||
default = let
|
||||
shell = self.packages.${pkgs.stdenv.hostPlatform.system}.zshell;
|
||||
system = pkgs.stdenv.hostPlatform.system;
|
||||
shellPkg = self.packages.${system}.zshell;
|
||||
cliPkg = self.packages.${system}.zshell-cli;
|
||||
in
|
||||
pkgs.mkShell.override {stdenv = shell.stdenv;} {
|
||||
pkgs.mkShell.override {stdenv = shellPkg.stdenv;} {
|
||||
inputsFrom = [
|
||||
shell
|
||||
shell.Plugins
|
||||
shellPkg
|
||||
shellPkg.plugin
|
||||
];
|
||||
|
||||
packages = with pkgs; [
|
||||
shellPkg
|
||||
cliPkg
|
||||
|
||||
material-symbols
|
||||
rubik
|
||||
nerd-fonts.caskaydia-cove
|
||||
|
||||
+2
-1
@@ -22,6 +22,7 @@
|
||||
ninja,
|
||||
pkg-config,
|
||||
pythonEnv,
|
||||
zshell-cli,
|
||||
}: let
|
||||
version = "1.0.0";
|
||||
|
||||
@@ -100,7 +101,7 @@ in
|
||||
qt6.qtbase
|
||||
qt6.qtwayland
|
||||
];
|
||||
propagatedBuildInputs = runtimeDeps;
|
||||
propagatedBuildInputs = runtimeDeps ++ [zshell-cli];
|
||||
|
||||
cmakeFlags =
|
||||
[
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
python3,
|
||||
installShellFiles,
|
||||
}:
|
||||
python3.pkgs.buildPythonApplication {
|
||||
pname = "zshell-cli";
|
||||
version = "0.1.0";
|
||||
src = ../cli;
|
||||
pyproject = true;
|
||||
|
||||
build-system = with python3.pkgs; [
|
||||
hatch-vcs
|
||||
hatchling
|
||||
];
|
||||
|
||||
dependencies = with python3.pkgs; [
|
||||
materialyoucolor
|
||||
pillow
|
||||
typer
|
||||
];
|
||||
|
||||
pythonImportsCheck = ["zshell"];
|
||||
|
||||
nativeBuildInputs = [installShellFiles];
|
||||
|
||||
SETUPTOOLS_SCM_PRETEND_VERSION = 1;
|
||||
}
|
||||
+3
-3
@@ -2,10 +2,10 @@
|
||||
|
||||
- [x] Media showing; what song/media is playing?
|
||||
- [x] Brightness control for Laptops.
|
||||
- [ ] Battery icon for Laptops. Broken?
|
||||
- [x] Battery icon for Laptops. Broken?
|
||||
- [ ] Change volume for `$BROWSER` environment variable? Most general media source apart from separate music/video players.
|
||||
- [ ] Quick toggle for BT, WiFi (modules in the tray do this too)
|
||||
- [x] Auto hide unless on mouse hover. Also implement bar changes to mute/volume to show notif or show bar for a couple seconds.
|
||||
- [x] Maybe already possible; have keybinds to show certain menus. I do not want to touch my mouse to see notifications for example. Not everything in the bar needs this, but some would be good to have.
|
||||
- [ ] Pressing ESC or some obvious button to close nc.
|
||||
- [ ] Another branch for development, hold off big changes so that a working bar or if there are big config changes.
|
||||
- [x] Pressing ESC or some obvious button to close nc.
|
||||
- [x] Another branch for development, hold off big changes so that a working bar or if there are big config changes.
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
from PIL import Image, ImageFilter
|
||||
import argparse
|
||||
|
||||
def gen_blurred_image(input_image, output_path, blur_amount):
|
||||
img = Image.open(input_image)
|
||||
size = img.size
|
||||
img = img.resize((size[0] // 2, size[1] // 2), Image.NEAREST)
|
||||
|
||||
img = img.filter(ImageFilter.GaussianBlur(blur_amount))
|
||||
# img = img.resize(size, Image.LANCZOS)
|
||||
|
||||
img.save(output_path, "PNG")
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Generate a blurred lock screen background image.")
|
||||
parser.add_argument("--input_image", type=str)
|
||||
parser.add_argument("--output_path", type=str)
|
||||
parser.add_argument("--blur_amount", type=int)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
gen_blurred_image(args.input_image, args.output_path, args.blur_amount)
|
||||
@@ -1,123 +0,0 @@
|
||||
import json
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
from PIL import Image
|
||||
from materialyoucolor.quantize import QuantizeCelebi
|
||||
from materialyoucolor.score.score import Score
|
||||
from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors
|
||||
from materialyoucolor.hct.hct import Hct
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate color scheme from wallpaper image"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--path",
|
||||
required=True,
|
||||
help="Path to the wallpaper image"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
required=True,
|
||||
help="Path to save the color scheme JSON file"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--thumbnail",
|
||||
required=True,
|
||||
help="Path to save the thumbnail image"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--scheme",
|
||||
required=False,
|
||||
type=str,
|
||||
default="vibrant",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.scheme == 'fruit-salad':
|
||||
from materialyoucolor.scheme.scheme_fruit_salad import SchemeFruitSalad as Scheme
|
||||
elif args.scheme == 'expressive':
|
||||
from materialyoucolor.scheme.scheme_expressive import SchemeExpressive as Scheme
|
||||
elif args.scheme == 'monochrome':
|
||||
from materialyoucolor.scheme.scheme_monochrome import SchemeMonochrome as Scheme
|
||||
elif args.scheme == 'rainbow':
|
||||
from materialyoucolor.scheme.scheme_rainbow import SchemeRainbow as Scheme
|
||||
elif args.scheme == 'tonal-spot':
|
||||
from materialyoucolor.scheme.scheme_tonal_spot import SchemeTonalSpot as Scheme
|
||||
elif args.scheme == 'neutral':
|
||||
from materialyoucolor.scheme.scheme_neutral import SchemeNeutral as Scheme
|
||||
elif args.scheme == 'fidelity':
|
||||
from materialyoucolor.scheme.scheme_fidelity import SchemeFidelity as Scheme
|
||||
elif args.scheme == 'content':
|
||||
from materialyoucolor.scheme.scheme_content import SchemeContent as Scheme
|
||||
elif args.scheme == 'vibrant':
|
||||
from materialyoucolor.scheme.scheme_vibrant import SchemeVibrant as Scheme
|
||||
else:
|
||||
from materialyoucolor.scheme.scheme_tonal_spot import SchemeTonalSpot as Scheme
|
||||
|
||||
def generate_thumbnail(image_path, thumbnail_path, size=(128, 128)):
|
||||
thumbnail_file = Path(thumbnail_path)
|
||||
|
||||
image = Image.open(image_path)
|
||||
image = image.convert("RGB")
|
||||
image.thumbnail(size, Image.NEAREST)
|
||||
|
||||
thumbnail_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
image.save(thumbnail_path, "JPEG")
|
||||
|
||||
|
||||
def generate_color_scheme(thumbnail_path, output_path):
|
||||
image = Image.open(thumbnail_path)
|
||||
pixel_len = image.width * image.height
|
||||
image_data = image.getdata()
|
||||
|
||||
quality = 1
|
||||
pixel_array = [image_data[_] for _ in range(0, pixel_len, quality)]
|
||||
|
||||
result = QuantizeCelebi(pixel_array, 128)
|
||||
score = Score.score(result)[0]
|
||||
|
||||
scheme = Scheme(
|
||||
Hct.from_int(score),
|
||||
True,
|
||||
0.0
|
||||
)
|
||||
|
||||
color_dict = {}
|
||||
for color in vars(MaterialDynamicColors).keys():
|
||||
color_name = getattr(MaterialDynamicColors, color)
|
||||
if hasattr(color_name, "get_hct"):
|
||||
color_int = color_name.get_hct(scheme).to_int()
|
||||
color_dict[color] = int_to_hex(color_int)
|
||||
|
||||
output_dict = {
|
||||
"name": "dynamic",
|
||||
"flavour": "default",
|
||||
"mode": "dark",
|
||||
"variant": "tonalspot",
|
||||
"colors": color_dict
|
||||
}
|
||||
|
||||
output_file = Path(output_path)
|
||||
output_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with open(output_file, "w") as f:
|
||||
json.dump(output_dict, f, indent=4)
|
||||
|
||||
|
||||
def int_to_hex(argb_int):
|
||||
return "#{:06X}".format(argb_int & 0xFFFFFF)
|
||||
|
||||
|
||||
try:
|
||||
generate_thumbnail(args.path, str(args.thumbnail))
|
||||
generate_color_scheme(str(args.thumbnail), args.output)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
with open(args.output, "w") as f:
|
||||
f.write(f"Error: {e}")
|
||||
@@ -1,103 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Calendar cache generator for z-bar-qt
|
||||
Generates a JSON file containing date numbers for all 52 weeks of 3 years (last, current, next)
|
||||
Structure: { "2024": { "week_0": [1,2,3,4,5,6,7], ... }, "2025": {...}, ... }
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def get_week_start_day():
|
||||
"""Returns the first day of the week (0=Sunday, 1=Monday, etc.) - hardcoded to Monday"""
|
||||
return 1 # Monday
|
||||
|
||||
|
||||
def get_weeks_for_year(year, week_start_day=1):
|
||||
"""
|
||||
Generate week data for a given year.
|
||||
Returns a dict with 52 weeks, each containing 7 date numbers.
|
||||
"""
|
||||
weeks = {}
|
||||
|
||||
# Find the first day of the year
|
||||
jan_1 = datetime(year, 1, 1)
|
||||
|
||||
# Find the first week's start date (adjust based on week_start_day)
|
||||
first_date = jan_1 - timedelta(days=(jan_1.weekday() - week_start_day) % 7)
|
||||
|
||||
# Generate 52 weeks
|
||||
for week_num in range(52):
|
||||
week_dates = []
|
||||
week_start = first_date + timedelta(weeks=week_num)
|
||||
|
||||
for day_offset in range(7):
|
||||
current_date = week_start + timedelta(days=day_offset)
|
||||
week_dates.append(current_date.day)
|
||||
|
||||
weeks[f"week_{week_num}"] = week_dates
|
||||
|
||||
return weeks
|
||||
|
||||
|
||||
def generate_calendar_cache(year=None):
|
||||
"""Generate cache for last year, current year, and next year"""
|
||||
if year is None:
|
||||
year = datetime.now().year
|
||||
|
||||
cache = {}
|
||||
for offset_year in [-1, 0, 1]:
|
||||
target_year = year + offset_year
|
||||
cache[str(target_year)] = get_weeks_for_year(target_year)
|
||||
|
||||
return cache
|
||||
|
||||
|
||||
def write_cache_file(cache_data):
|
||||
"""Write cache to the same location as Paths.cache in QML"""
|
||||
import os
|
||||
|
||||
# Use XDG_CACHE_HOME or ~/.cache, then add /zshell (matching Paths singleton)
|
||||
xdg_cache_home = os.environ.get("XDG_CACHE_HOME")
|
||||
if xdg_cache_home:
|
||||
cache_dir = Path(xdg_cache_home) / "zshell"
|
||||
else:
|
||||
cache_dir = Path.home() / ".cache" / "zshell"
|
||||
|
||||
cache_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
cache_file = cache_dir / "calendar_cache.json"
|
||||
|
||||
with open(cache_file, "w") as f:
|
||||
json.dump(cache_data, f, indent=2)
|
||||
|
||||
print(f"Calendar cache written to: {cache_file}")
|
||||
return cache_file
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
# Generate cache for current year and ±1 year
|
||||
cache = generate_calendar_cache()
|
||||
|
||||
# Write to file
|
||||
cache_file = write_cache_file(cache)
|
||||
|
||||
print("Cache structure:")
|
||||
print(" - Keys: year (e.g., '2024', '2025', '2026')")
|
||||
print(" - Values: dict with 52 weeks")
|
||||
print(" - Each week: array of 7 date numbers")
|
||||
print(f"\nExample (first week of 2025):")
|
||||
print(f" {cache['2025']['week_0']}")
|
||||
|
||||
return 0
|
||||
except Exception as e:
|
||||
print(f"Error generating calendar cache: {e}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
QML_ROOT=/home/zach/GitProjects/z-bar-qt/scripts/..
|
||||
LOCK=false
|
||||
|
||||
main() {
|
||||
local OPTARG OPTIND opt
|
||||
while getopts "l" opt; do
|
||||
case "$opt" in
|
||||
l) LOCK=true ;;
|
||||
*) fatal 'bad option' ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$LOCK" = "true" ]]; then
|
||||
hyprctl dispatch global zshell:lock
|
||||
else
|
||||
qs -n -d -p "$QML_ROOT/shell.qml"
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
QML_ROOT=/home/zach/GitProjects/z-bar-qt/scripts/..
|
||||
LOCK=false
|
||||
|
||||
main() {
|
||||
local OPTARG OPTIND opt
|
||||
while getopts "l" opt; do
|
||||
case "$opt" in
|
||||
l) LOCK=true ;;
|
||||
*) fatal 'bad option' ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$LOCK" = "true" ]]; then
|
||||
hyprctl dispatch global zshell:lock
|
||||
else
|
||||
qs -n -d -p "$QML_ROOT/shell.qml"
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user