Merge branch 'end-4:main' into parallax

This commit is contained in:
Ivan Rosinskii
2026-03-26 18:37:09 +01:00
committed by GitHub
30 changed files with 394 additions and 241 deletions
+16 -13
View File
@@ -1,28 +1,31 @@
function fish_prompt -d "Write out the prompt" # Commands to run in interactive sessions can go here
# This shows up as USER@HOST /home/user/ >, with the directory colored if status is-interactive
# $USER and $hostname are set by fish, so you can just use them
# instead of using `whoami` and `hostname`
printf '%s@%s %s%s%s > ' $USER $hostname \
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
end
if status is-interactive # Commands to run in interactive sessions can go here
# No greeting # No greeting
set fish_greeting set fish_greeting
# Use starship # Use starship
starship init fish | source function starship_transient_prompt_func
starship module character
end
if test "$TERM" != "linux"
starship init fish | source
enable_transience
end
# Colors
if test -f ~/.local/state/quickshell/user/generated/terminal/sequences.txt if test -f ~/.local/state/quickshell/user/generated/terminal/sequences.txt
cat ~/.local/state/quickshell/user/generated/terminal/sequences.txt cat ~/.local/state/quickshell/user/generated/terminal/sequences.txt
end end
# Aliases # Aliases
alias clear "printf '\033[2J\033[3J\033[1;1H'" # fix: kitty doesn't clear properly # kitty doesn't clear properly so we need to do this weird printing
alias clear "printf '\033[2J\033[3J\033[1;1H'"
alias celar "printf '\033[2J\033[3J\033[1;1H'" alias celar "printf '\033[2J\033[3J\033[1;1H'"
alias claer "printf '\033[2J\033[3J\033[1;1H'" alias claer "printf '\033[2J\033[3J\033[1;1H'"
alias ls 'eza --icons'
alias pamcan pacman alias pamcan pacman
alias q 'qs -c ii' alias q 'qs -c ii'
if test "$TERM" != "linux"
alias ls 'eza --icons'
end
end end
@@ -12,11 +12,11 @@ QuickToggleModel {
name: Translation.tr("Night Light") name: Translation.tr("Night Light")
statusText: (auto ? Translation.tr("Auto, ") : "") + (toggled ? Translation.tr("Active") : Translation.tr("Inactive")) statusText: (auto ? Translation.tr("Auto, ") : "") + (toggled ? Translation.tr("Active") : Translation.tr("Inactive"))
toggled: Hyprsunset.active toggled: Hyprsunset.temperatureActive
icon: auto ? "night_sight_auto" : "bedtime" icon: auto ? "night_sight_auto" : "bedtime"
mainAction: () => { mainAction: () => {
Hyprsunset.toggle() Hyprsunset.toggleTemperature()
} }
hasMenu: true hasMenu: true
@@ -17,6 +17,7 @@ Slider {
id: root id: root
property list<real> stopIndicatorValues: [1] property list<real> stopIndicatorValues: [1]
property list<real> dividerValues: []
enum Configuration { enum Configuration {
Wavy = 4, Wavy = 4,
XS = 12, XS = 12,
@@ -45,6 +46,7 @@ Slider {
property real handleHeight: (configuration === StyledSlider.Configuration.Wavy) ? 24 : Math.max(33, trackWidth + 9) property real handleHeight: (configuration === StyledSlider.Configuration.Wavy) ? 24 : Math.max(33, trackWidth + 9)
property real handleWidth: root.pressed ? handlePressedWidth : handleDefaultWidth property real handleWidth: root.pressed ? handlePressedWidth : handleDefaultWidth
property real handleMargins: 4 property real handleMargins: 4
property real dividerMargins: 2
property real trackDotSize: 3 property real trackDotSize: 3
property bool usePercentTooltip: true property bool usePercentTooltip: true
property string tooltipContent: usePercentTooltip ? `${Math.round(((value - from) / (to - from)) * 100)}%` : `${Math.round(value)}` property string tooltipContent: usePercentTooltip ? `${Math.round(((value - from) / (to - from)) * 100)}%` : `${Math.round(value)}`
@@ -94,71 +96,94 @@ Slider {
} }
background: Item { background: Item {
id: background
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
width: parent.width anchors.horizontalCenter: parent.horizontalCenter
width: root.width
implicitHeight: trackWidth implicitHeight: trackWidth
property var normalized: root.dividerValues.map(v => (v - root.from) / (root.to - root.from))
property var filtered: normalized.filter(v => Math.abs(v - root.visualPosition) * effectiveDraggingWidth > handleMargins + handleWidth / 2 - dividerMargins)
property var leftValues: [0, ...filtered.filter(v => v < root.visualPosition), root.visualPosition]
property var rightValues: [root.visualPosition, ...filtered.filter(v => v > root.visualPosition), 1]
property var leftWidths: leftValues.map((v, i, a) => a[i + 1] - v).slice(0, -1)
property var rightWidths: rightValues.map((v, i, a) => a[i + 1] - v).slice(0, -1)
// Fill left // Fill left
Loader { Repeater {
anchors { model: background.leftWidths.length
verticalCenter: parent.verticalCenter
left: parent.left Loader {
} required property real index
width: root.handleMargins + (root.visualPosition * root.effectiveDraggingWidth) - (root.handleWidth / 2 + root.handleMargins) anchors.verticalCenter: background.verticalCenter
height: root.trackWidth property real leftMargin: index > 0 ? root.dividerMargins : 0
active: !root.wavy property real rightMargin: index < background.leftWidths.length - 1 ? root.dividerMargins : root.handleMargins
sourceComponent: Rectangle { x: background.leftValues[index] * root.effectiveDraggingWidth + leftMargin + (index > 0 ? leftPadding : 0)
color: root.highlightColor width: background.leftWidths[index] * root.effectiveDraggingWidth - leftMargin - rightMargin - (index === background.leftWidths.length - 1 ? handleWidth / 2 : 0) + (index === 0 ? leftPadding : 0)
topLeftRadius: root.trackRadius height: root.trackWidth
bottomLeftRadius: root.trackRadius active: !root.wavy
topRightRadius: root.unsharpenRadius sourceComponent: Rectangle {
bottomRightRadius: root.unsharpenRadius color: root.highlightColor
topLeftRadius: index === 0 ? root.trackRadius : root.unsharpenRadius
bottomLeftRadius: index === 0 ? root.trackRadius : root.unsharpenRadius
topRightRadius: root.unsharpenRadius
bottomRightRadius: root.unsharpenRadius
}
} }
} }
Loader { Repeater {
anchors { model: background.leftWidths.length
verticalCenter: parent.verticalCenter
left: parent.left Loader {
} required property int index
width: root.handleMargins + (root.visualPosition * root.effectiveDraggingWidth) - (root.handleWidth / 2 + root.handleMargins) anchors.verticalCenter: background.verticalCenter
height: root.height property real leftMargin: index > 0 ? root.dividerMargins : 0
active: root.wavy property real rightMargin: index < background.leftWidths.length - 1 ? root.dividerMargins : root.handleMargins
sourceComponent: WavyLine { x: background.leftValues[index] * root.effectiveDraggingWidth + leftMargin + (index > 0 ? leftPadding : 0)
id: wavyFill width: background.leftWidths[index] * root.effectiveDraggingWidth - leftMargin - rightMargin - (index === background.leftWidths.length - 1 ? handleWidth / 2 : 0) + (index === 0 ? leftPadding : 0)
frequency: root.waveFrequency height: root.height
fullLength: root.width active: root.wavy
color: root.highlightColor sourceComponent: WavyLine {
amplitudeMultiplier: root.wavy ? 0.5 : 0 id: wavyFill
width: root.handleMargins + (root.visualPosition * root.effectiveDraggingWidth) - (root.handleWidth / 2 + root.handleMargins) frequency: root.waveFrequency
height: root.trackWidth fullLength: root.width
Connections { color: root.highlightColor
target: root amplitudeMultiplier: root.wavy ? 0.5 : 0
function onValueChanged() { wavyFill.requestPaint(); } width: parent.width
function onHighlightColorChanged() { wavyFill.requestPaint(); } height: root.trackWidth
} Connections {
FrameAnimation { target: root
running: root.animateWave function onValueChanged() { wavyFill.requestPaint(); }
onTriggered: { function onHighlightColorChanged() { wavyFill.requestPaint(); }
wavyFill.requestPaint() }
FrameAnimation {
running: root.animateWave
onTriggered: {
wavyFill.requestPaint()
}
} }
} }
} }
} }
// Fill right // Fill right
Rectangle { Repeater {
anchors { model: background.rightWidths.length
verticalCenter: parent.verticalCenter
right: parent.right Rectangle {
required property int index
anchors.verticalCenter: background.verticalCenter
property real leftMargin: index > 0 ? root.dividerMargins : root.handleMargins
property real rightMargin: index < background.rightWidths.length - 1 ? root.dividerMargins : 0
x: background.rightValues[index] * root.effectiveDraggingWidth + leftMargin + (index === 0 ? handleWidth / 2 : 0) + leftPadding
width: background.rightWidths[index] * root.effectiveDraggingWidth - leftMargin - rightMargin - (index === 0 ? handleWidth / 2 : 0) + (index === background.rightWidths.length - 1 ? rightPadding : 0)
height: trackWidth
color: root.trackColor
topRightRadius: index === background.rightWidths.length - 1 ? root.trackRadius : root.unsharpenRadius
bottomRightRadius: index === background.rightWidths.length - 1 ? root.trackRadius : root.unsharpenRadius
topLeftRadius: root.unsharpenRadius
bottomLeftRadius: root.unsharpenRadius
} }
width: root.handleMargins + ((1 - root.visualPosition) * root.effectiveDraggingWidth) - (root.handleWidth / 2 + root.handleMargins)
height: trackWidth
color: root.trackColor
topRightRadius: root.trackRadius
bottomRightRadius: root.trackRadius
topLeftRadius: root.unsharpenRadius
bottomLeftRadius: root.unsharpenRadius
} }
// Stop indicators // Stop indicators
@@ -177,7 +202,7 @@ Slider {
implicitWidth: root.handleWidth implicitWidth: root.handleWidth
implicitHeight: root.handleHeight implicitHeight: root.handleHeight
x: root.handleMargins + (root.visualPosition * root.effectiveDraggingWidth) - (root.handleWidth / 2) x: root.leftPadding + (root.visualPosition * root.effectiveDraggingWidth) - (root.handleWidth / 2)
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
radius: Appearance.rounding.full radius: Appearance.rounding.full
color: root.handleColor color: root.handleColor
@@ -59,8 +59,8 @@ Item { // Bar content region
implicitWidth: leftSectionRowLayout.implicitWidth implicitWidth: leftSectionRowLayout.implicitWidth
implicitHeight: Appearance.sizes.baseBarHeight implicitHeight: Appearance.sizes.baseBarHeight
onScrollDown: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness - 0.05) onScrollDown: Brightness.decreaseBrightness()
onScrollUp: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness + 0.05) onScrollUp: Brightness.increaseBrightness()
onMovedAway: GlobalStates.osdBrightnessOpen = false onMovedAway: GlobalStates.osdBrightnessOpen = false
onPressed: event => { onPressed: event => {
if (event.button === Qt.LeftButton) if (event.button === Qt.LeftButton)
@@ -70,7 +70,7 @@ Item { // Bar content region
// Visual content // Visual content
ScrollHint { ScrollHint {
reveal: barLeftSideMouseArea.hovered reveal: barLeftSideMouseArea.hovered
icon: "light_mode" icon: Hyprsunset.gamma === 100 ? "light_mode" : "wb_twilight"
tooltipText: Translation.tr("Scroll to change brightness") tooltipText: Translation.tr("Scroll to change brightness")
side: "left" side: "left"
anchors.left: parent.left anchors.left: parent.left
@@ -25,6 +25,10 @@ Scope {
id: "brightness", id: "brightness",
sourceUrl: "indicators/BrightnessIndicator.qml" sourceUrl: "indicators/BrightnessIndicator.qml"
}, },
{
id: "gamma",
sourceUrl: "indicators/GammaIndicator.qml"
},
] ]
function triggerOsd() { function triggerOsd() {
@@ -52,6 +56,15 @@ Scope {
} }
} }
Connections {
target: Hyprsunset
function onGammaChangeAttempt() {
root.protectionMessage = "";
root.currentIndicator = "gamma";
root.triggerOsd();
}
}
Connections { Connections {
// Listen to volume changes // Listen to volume changes
target: Audio.sink?.audio ?? null target: Audio.sink?.audio ?? null
@@ -11,6 +11,8 @@ Item {
required property string name required property string name
property bool rotateIcon: false property bool rotateIcon: false
property bool scaleIcon: false property bool scaleIcon: false
property alias from: valueProgressBar.from
property alias to: valueProgressBar.to
property real valueIndicatorVerticalPadding: 9 property real valueIndicatorVerticalPadding: 9
property real valueIndicatorLeftPadding: 10 property real valueIndicatorLeftPadding: 10
@@ -9,7 +9,7 @@ OsdValueIndicator {
property var focusedScreen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) property var focusedScreen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name)
property var brightnessMonitor: Brightness.getMonitorForScreen(focusedScreen) property var brightnessMonitor: Brightness.getMonitorForScreen(focusedScreen)
icon: Hyprsunset.active ? "routine" : "light_mode" icon: Hyprsunset.temperatureActive ? "routine" : "light_mode"
rotateIcon: true rotateIcon: true
scaleIcon: true scaleIcon: true
name: Translation.tr("Brightness") name: Translation.tr("Brightness")
@@ -0,0 +1,14 @@
import qs.services
import QtQuick
import Quickshell
import Quickshell.Hyprland
import qs.modules.ii.onScreenDisplay
OsdValueIndicator {
id: rotateIcon
icon: "wb_twilight"
name: Translation.tr("Gamma")
from: Hyprsunset.gammaLowerLimit / 100
value: Hyprsunset.gamma / 100 ?? 0.5
}
@@ -98,7 +98,7 @@ Scope {
if (!Config.options.sidebar.cornerOpen.valueScroll) if (!Config.options.sidebar.cornerOpen.valueScroll)
return; return;
if (cornerWidget.isLeft) if (cornerWidget.isLeft)
cornerPanelWindow.brightnessMonitor.setBrightness(cornerPanelWindow.brightnessMonitor.brightness - 0.05); Brightness.decreaseBrightness()
else { else {
const currentVolume = Audio.value; const currentVolume = Audio.value;
const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2; const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2;
@@ -109,7 +109,7 @@ Scope {
if (!Config.options.sidebar.cornerOpen.valueScroll) if (!Config.options.sidebar.cornerOpen.valueScroll)
return; return;
if (cornerWidget.isLeft) if (cornerWidget.isLeft)
cornerPanelWindow.brightnessMonitor.setBrightness(cornerPanelWindow.brightnessMonitor.brightness + 0.05); Brightness.increaseBrightness()
else { else {
const currentVolume = Audio.value; const currentVolume = Audio.value;
const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2; const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2;
@@ -40,10 +40,25 @@ Rectangle {
visible: active visible: active
active: Config.options.sidebar.quickSliders.showBrightness active: Config.options.sidebar.quickSliders.showBrightness
sourceComponent: QuickSlider { sourceComponent: QuickSlider {
materialSymbol: "brightness_6" materialSymbol: "light_mode"
value: root.brightnessMonitor.brightness secondaryMaterialSymbol: "wb_twilight"
stopIndicatorValues: Hyprsunset.gamma !== 100 && root.brightnessMonitor?.brightness !== 0 ? [0.3 + root.brightnessMonitor?.brightness * 0.7] : []
value: Hyprsunset.gamma === 100? 0.3 + root.brightnessMonitor?.brightness * 0.7 : Hyprsunset.gamma / 100 * 0.3
tooltipContent: Hyprsunset.gamma === 100 ? `${Math.round(root.brightnessMonitor?.brightness * 100)}%` : `${Translation.tr("Gamma")} ${Hyprsunset.gamma}%`
onMoved: { onMoved: {
root.brightnessMonitor.setBrightness(value) if (value >= 0.3) {
// 0.3 - 1.0 brightness
root.brightnessMonitor.setBrightness((value - 0.3) / 0.7);
if (Hyprsunset.gamma !== 100) {
Hyprsunset.setGamma(100);
}
} else {
// 0 - 0.3 gamma
if (root.brightnessMonitor.brightness !== 0) {
root.brightnessMonitor.setBrightness(0);
}
Hyprsunset.setGamma(value * 100 / 0.3);
}
} }
} }
} }
@@ -84,16 +99,18 @@ Rectangle {
component QuickSlider: StyledSlider { component QuickSlider: StyledSlider {
id: quickSlider id: quickSlider
required property string materialSymbol required property string materialSymbol
property string secondaryMaterialSymbol
configuration: StyledSlider.Configuration.M configuration: StyledSlider.Configuration.M
stopIndicatorValues: [] stopIndicatorValues: []
dividerValues: secondaryMaterialSymbol.length > 0 ? [secondaryIcon.iconLocation] : []
MaterialSymbol { MaterialSymbol {
id: icon id: icon
property bool nearFull: quickSlider.value >= 0.9 property bool nearFull: quickSlider.value >= 0.9
anchors { anchors {
verticalCenter: parent.verticalCenter verticalCenter: quickSlider.verticalCenter
right: nearFull ? quickSlider.handle.right : parent.right right: nearFull ? quickSlider.handle.right : quickSlider.right
rightMargin: quickSlider.nearFull ? 14 : 8 rightMargin: nearFull ? 14 : 8
} }
iconSize: 20 iconSize: 20
color: nearFull ? Appearance.colors.colOnPrimary : Appearance.colors.colOnSecondaryContainer color: nearFull ? Appearance.colors.colOnPrimary : Appearance.colors.colOnSecondaryContainer
@@ -105,7 +122,25 @@ Rectangle {
Behavior on anchors.rightMargin { Behavior on anchors.rightMargin {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
}
MaterialSymbol {
id: secondaryIcon
visible: secondaryMaterialSymbol.length > 0
property real iconLocation: 0.3
property bool nearIcon: iconLocation - quickSlider.value <= 0.1 && iconLocation - quickSlider.value > (quickSlider.handleWidth + 8 - 14) / quickSlider.effectiveDraggingWidth
anchors {
verticalCenter: quickSlider.verticalCenter
right: nearIcon ? quickSlider.handle.right : quickSlider.right
rightMargin: nearIcon ? 14 : (1 - iconLocation) * quickSlider.effectiveDraggingWidth + quickSlider.rightPadding + 8
}
iconSize: 20
color: quickSlider.value >= iconLocation - 0.1 ? Appearance.colors.colOnPrimary : Appearance.colors.colOnSecondaryContainer
text: secondaryMaterialSymbol
Behavior on color {
animation: Appearance.animation.elementMoveFast.colorAnimation.createObject(this)
}
} }
} }
} }
@@ -15,7 +15,7 @@ WindowDialog {
id: root id: root
property var screen: root.QsWindow.window?.screen property var screen: root.QsWindow.window?.screen
property var brightnessMonitor: Brightness.getMonitorForScreen(screen) property var brightnessMonitor: Brightness.getMonitorForScreen(screen)
backgroundHeight: 600 backgroundHeight: 700
WindowDialogTitle { WindowDialogTitle {
text: Translation.tr("Eye protection") text: Translation.tr("Eye protection")
@@ -44,9 +44,9 @@ WindowDialog {
iconSize: Appearance.font.pixelSize.larger iconSize: Appearance.font.pixelSize.larger
buttonIcon: "check" buttonIcon: "check"
text: Translation.tr("Enable now") text: Translation.tr("Enable now")
checked: Hyprsunset.active checked: Hyprsunset.temperatureActive
onCheckedChanged: { onCheckedChanged: {
Hyprsunset.toggle(checked) Hyprsunset.toggleTemperature(checked)
} }
} }
@@ -146,6 +146,33 @@ WindowDialog {
id: brightnessColumn id: brightnessColumn
Layout.topMargin: -16 Layout.topMargin: -16
Layout.fillWidth: true Layout.fillWidth: true
WindowDialogSlider {
anchors {
left: parent.left
right: parent.right
leftMargin: 4
rightMargin: 4
}
value: root.brightnessMonitor.brightness
onMoved: root.brightnessMonitor.setBrightness(value)
}
}
WindowDialogSectionHeader {
text: Translation.tr("Gamma")
}
WindowDialogSeparator {
Layout.topMargin: -22
Layout.leftMargin: 0
Layout.rightMargin: 0
}
Column {
id: gammaColumn
Layout.topMargin: -16
Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
WindowDialogSlider { WindowDialogSlider {
@@ -155,9 +182,10 @@ WindowDialog {
leftMargin: 4 leftMargin: 4
rightMargin: 4 rightMargin: 4
} }
// text: Translation.tr("Brightness") from: Hyprsunset.gammaLowerLimit / 100
value: root.brightnessMonitor.brightness value: Hyprsunset.gamma / 100
onMoved: root.brightnessMonitor.setBrightness(value) onMoved: Hyprsunset.setGamma(value * 100)
tooltipContent: `${Math.round(value * 100)}%`
} }
} }
@@ -6,10 +6,10 @@ import Quickshell.Io
QuickToggleButton { QuickToggleButton {
id: nightLightButton id: nightLightButton
toggled: Hyprsunset.active toggled: Hyprsunset.temperatureActive
buttonIcon: Config.options.light.night.automatic ? "night_sight_auto" : "bedtime" buttonIcon: Config.options.light.night.automatic ? "night_sight_auto" : "bedtime"
onClicked: { onClicked: {
Hyprsunset.toggle() Hyprsunset.toggleTemperature()
} }
altAction: () => { altAction: () => {
@@ -54,8 +54,8 @@ Item { // Bar content region
height: (root.height - middleSection.height) / 2 height: (root.height - middleSection.height) / 2
width: Appearance.sizes.verticalBarWidth width: Appearance.sizes.verticalBarWidth
onScrollDown: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness - 0.05) onScrollDown: Brightness.decreaseBrightness()
onScrollUp: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness + 0.05) onScrollUp: Brightness.increaseBrightness()
onMovedAway: GlobalStates.osdBrightnessOpen = false onMovedAway: GlobalStates.osdBrightnessOpen = false
onPressed: event => { onPressed: event => {
if (event.button === Qt.LeftButton) if (event.button === Qt.LeftButton)
@@ -303,7 +303,7 @@ ContentPage {
Config.options.background.widgets.clock.cookie.useSineCookie = checked; Config.options.background.widgets.clock.cookie.useSineCookie = checked;
} }
StyledToolTip { StyledToolTip {
text: "Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing" text: Translation.tr("Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing")
} }
} }
@@ -327,7 +327,7 @@ ContentPage {
Config.options.background.widgets.clock.cookie.constantlyRotate = checked; Config.options.background.widgets.clock.cookie.constantlyRotate = checked;
} }
StyledToolTip { StyledToolTip {
text: "Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical." text: Translation.tr("Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical.")
} }
} }
@@ -345,7 +345,7 @@ ContentPage {
Config.options.background.widgets.clock.cookie.hourMarks = checked; Config.options.background.widgets.clock.cookie.hourMarks = checked;
} }
StyledToolTip { StyledToolTip {
text: "Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons" text: Translation.tr("Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons")
} }
} }
@@ -361,7 +361,7 @@ ContentPage {
Config.options.background.widgets.clock.cookie.timeIndicators = checked; Config.options.background.widgets.clock.cookie.timeIndicators = checked;
} }
StyledToolTip { StyledToolTip {
text: "Can't be turned on when using 'Numbers' dial style for aesthetic reasons" text: Translation.tr("Can't be turned on when using 'Numbers' dial style for aesthetic reasons")
} }
} }
} }
@@ -87,9 +87,9 @@ Item {
name: Translation.tr("Enable now") name: Translation.tr("Enable now")
description: Translation.tr("More comfortable viewing at night") description: Translation.tr("More comfortable viewing at night")
iconName: WIcons.nightLightIcon iconName: WIcons.nightLightIcon
checked: Hyprsunset.active checked: Hyprsunset.temperatureActive
onCheckedChanged: { onCheckedChanged: {
Hyprsunset.toggle(checked); Hyprsunset.toggleTemperature(checked);
} }
} }
@@ -71,7 +71,7 @@ Singleton {
property string bluetoothIcon: BluetoothStatus.connected ? "bluetooth-connected" : BluetoothStatus.enabled ? "bluetooth" : "bluetooth-disabled" property string bluetoothIcon: BluetoothStatus.connected ? "bluetooth-connected" : BluetoothStatus.enabled ? "bluetooth" : "bluetooth-disabled"
property string nightLightIcon: Hyprsunset.active ? "weather-moon" : "weather-moon-off" property string nightLightIcon: Hyprsunset.temperatureActive ? "weather-moon" : "weather-moon-off"
property string notificationsIcon: Notifications.silent ? "alert-snooze" : "alert" property string notificationsIcon: Notifications.silent ? "alert-snooze" : "alert"
@@ -40,6 +40,9 @@ apply_kitty() {
for i in "${!colorlist[@]}"; do for i in "${!colorlist[@]}"; do
sed -i "s/${colorlist[$i]} #/${colorvalues[$i]#\#}/g" "$STATE_DIR"/user/generated/terminal/kitty-theme.conf sed -i "s/${colorlist[$i]} #/${colorvalues[$i]#\#}/g" "$STATE_DIR"/user/generated/terminal/kitty-theme.conf
done done
# Reload
kill -SIGUSR1 $(pidof kitty)
} }
apply_anyterm() { apply_anyterm() {
@@ -23,5 +23,27 @@ cursor #$term7 #
foreground #$term7 # foreground #$term7 #
selection_background #$term7 # selection_background #$onSecondaryContainer #
selection_foreground #$term0 # selection_foreground #$secondaryContainer #
# Override obscure colors for starship prompt (these are greys at the end)
color255 #$primary #
color254 #$primaryContainer #
color253 #$secondary #
color252 #$secondaryContainer #
color251 #$tertiary #
color250 #$tertiaryContainer #
color249 #$error #
color248 #$errorContainer #
color232 #$onPrimary #
color233 #$onPrimaryContainer #
color234 #$onSecondary #
color235 #$onSecondaryContainer #
color236 #$onTertiary #
color237 #$onTertiaryContainer #
color238 #$onError #
color239 #$onErrorContainer #
color244 #$outline #
color245 #$outlineVariant #
@@ -28,6 +28,12 @@ Singleton {
} }
function increaseBrightness(): void { function increaseBrightness(): void {
// if gamma is not yet 100, first increase gamma
if (Hyprsunset.gamma !== 100) {
Hyprsunset.setGamma(Hyprsunset.gamma + 5);
return;
}
const focusedName = Hyprland.focusedMonitor.name; const focusedName = Hyprland.focusedMonitor.name;
const monitor = monitors.find(m => focusedName === m.screen.name); const monitor = monitors.find(m => focusedName === m.screen.name);
if (monitor) if (monitor)
@@ -37,8 +43,12 @@ Singleton {
function decreaseBrightness(): void { function decreaseBrightness(): void {
const focusedName = Hyprland.focusedMonitor.name; const focusedName = Hyprland.focusedMonitor.name;
const monitor = monitors.find(m => focusedName === m.screen.name); const monitor = monitors.find(m => focusedName === m.screen.name);
if (monitor) if (monitor && monitor.brightness > 0)
monitor.setBrightness(monitor.brightness - 0.05); monitor.setBrightness(monitor.brightness - 0.05);
// if brightness is 0, then decrease gamma
else {
Hyprsunset.setGamma(Hyprsunset.gamma - 5);
}
} }
reloadableId: "brightness" reloadableId: "brightness"
@@ -13,13 +13,18 @@ import Quickshell.Hyprland
*/ */
Singleton { Singleton {
id: root id: root
signal gammaChangeAttempt()
readonly property real gammaLowerLimit: 25
property string from: Config.options?.light?.night?.from ?? "19:00" property string from: Config.options?.light?.night?.from ?? "19:00"
property string to: Config.options?.light?.night?.to ?? "06:30" property string to: Config.options?.light?.night?.to ?? "06:30"
property bool automatic: Config.options?.light?.night?.automatic && (Config?.ready ?? true) property bool automatic: Config.options?.light?.night?.automatic && (Config?.ready ?? true)
property int colorTemperature: Config.options?.light?.night?.colorTemperature ?? 5000 property int colorTemperature: Config.options?.light?.night?.colorTemperature ?? 5000
property int gamma: 100
property bool shouldBeOn property bool shouldBeOn
property bool firstEvaluation: true property bool firstEvaluation: true
property bool active: false property bool temperatureActive: false
property int fromHour: Number(from.split(":")[0]) property int fromHour: Number(from.split(":")[0])
property int fromMinute: Number(from.split(":")[1]) property int fromMinute: Number(from.split(":")[1])
@@ -71,24 +76,52 @@ Singleton {
if (!root.automatic || root.manualActive !== undefined) if (!root.automatic || root.manualActive !== undefined)
return; return;
if (root.shouldBeOn) { if (root.shouldBeOn) {
root.enable(); root.enableTemperature();
} else { } else {
root.disable(); root.disableTemperature();
} }
} }
function load() { } // Dummy to force init function startHyprsunset() {
Quickshell.execDetached(["bash", "-c", `pidof hyprsunset || hyprsunset`]);
function enable() {
root.active = true;
// console.log("[Hyprsunset] Enabling");
Quickshell.execDetached(["bash", "-c", `pidof hyprsunset || hyprsunset --temperature ${root.colorTemperature}`]);
} }
function disable() { function load() {
root.active = false; root.startHyprsunset();
updateHyprsunset.restart();
}
Timer {
id: updateHyprsunset
interval: 100
repeat: false
onTriggered: {
root.ensureState();
root.setGamma(root.gamma);
}
}
function enableTemperature() {
root.temperatureActive = true;
// console.log("[Hyprsunset] Enabling");
root.startHyprsunset();
Quickshell.execDetached(["bash", "-c", `hyprctl hyprsunset temperature ${root.colorTemperature}`]);
}
function disableTemperature() {
root.temperatureActive = false;
// console.log("[Hyprsunset] Disabling"); // console.log("[Hyprsunset] Disabling");
Quickshell.execDetached(["bash", "-c", `pkill hyprsunset`]); Quickshell.execDetached(["hyprctl", "hyprsunset", "identity"]);
}
function setGamma(gamma) {
root.gamma = Math.max(root.gammaLowerLimit, Math.min(100, gamma));
root.gammaChangeAttempt();
root.startHyprsunset();
Quickshell.execDetached(["bash", "-c", `hyprctl hyprsunset gamma ${root.gamma}`]);
} }
function fetchState() { function fetchState() {
@@ -104,26 +137,26 @@ Singleton {
onStreamFinished: { onStreamFinished: {
const output = stateCollector.text.trim(); const output = stateCollector.text.trim();
if (output.length == 0 || output.startsWith("Couldn't")) if (output.length == 0 || output.startsWith("Couldn't"))
root.active = false; root.temperatureActive = false;
else else
root.active = (output != "6500"); // 6500 is the default when off root.temperatureActive = (output != "6500"); // 6500 is the default when off
// console.log("[Hyprsunset] Fetched state:", output, "->", root.active); // console.log("[Hyprsunset] Fetched state:", output, "->", root.temperatureActive);
} }
} }
} }
function toggle(active = undefined) { function toggleTemperature(active = undefined) {
if (root.manualActive === undefined) { if (root.manualActive === undefined) {
root.manualActive = root.active; root.manualActive = root.temperatureActive;
root.manualActiveHour = root.clockHour; root.manualActiveHour = root.clockHour;
root.manualActiveMinute = root.clockMinute; root.manualActiveMinute = root.clockMinute;
} }
root.manualActive = active !== undefined ? active : !root.manualActive; root.manualActive = active !== undefined ? active : !root.manualActive;
if (root.manualActive) { if (root.manualActive) {
root.enable(); root.enableTemperature();
} else { } else {
root.disable(); root.disableTemperature();
} }
} }
@@ -131,9 +164,9 @@ Singleton {
Connections { Connections {
target: Config.options.light.night target: Config.options.light.night
function onColorTemperatureChanged() { function onColorTemperatureChanged() {
if (!root.active) return; if (!root.temperatureActive) return;
Hyprland.dispatch(`hyprctl hyprsunset temperature ${Config.options.light.night.colorTemperature}`); Hyprland.dispatch(`hyprctl hyprsunset temperature ${Config.options.light.night.colorTemperature}`);
Quickshell.execDetached(["hyprctl", "hyprsunset", "temperature", `${Config.options.light.night.colorTemperature}`]); Quickshell.execDetached(["hyprctl", "hyprsunset", "temperature", `${Config.options.light.night.colorTemperature}`]);
} }
} }
} }
@@ -81,6 +81,7 @@
"Unknown function call: %1": "Unknown function call: %1", "Unknown function call: %1": "Unknown function call: %1",
"Online | %1's model | Delivers fast, responsive and well-formatted answers. Disadvantages: not very eager to do stuff; might make up unknown function calls": "Online | %1's model | Delivers fast, responsive and well-formatted answers. Disadvantages: not very eager to do stuff; might make up unknown function calls", "Online | %1's model | Delivers fast, responsive and well-formatted answers. Disadvantages: not very eager to do stuff; might make up unknown function calls": "Online | %1's model | Delivers fast, responsive and well-formatted answers. Disadvantages: not very eager to do stuff; might make up unknown function calls",
"Volume": "Volume", "Volume": "Volume",
"Gamma": "Gamma",
"Medium": "Medium", "Medium": "Medium",
"Copy code": "Copy code", "Copy code": "Copy code",
"Exceeded max allowed": "Exceeded max allowed", "Exceeded max allowed": "Exceeded max allowed",
@@ -359,6 +360,10 @@
"Connect to Wi-Fi": "Connect to Wi-Fi", "Connect to Wi-Fi": "Connect to Wi-Fi",
"... and %1 more": "... and %1 more", "... and %1 more": "... and %1 more",
"Cookie clock settings": "Cookie clock settings", "Cookie clock settings": "Cookie clock settings",
"Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing": "Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing",
"Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical.": "Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical.",
"Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons": "Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons",
"Can't be turned on when using 'Numbers' dial style for aesthetic reasons": "Can't be turned on when using 'Numbers' dial style for aesthetic reasons",
"Brightness and volume": "Brightness and volume", "Brightness and volume": "Brightness and volume",
"Choose file": "Choose file", "Choose file": "Choose file",
"Invalid model. Supported: \n```": "Invalid model. Supported: \n```", "Invalid model. Supported: \n```": "Invalid model. Supported: \n```",
@@ -607,4 +612,4 @@
"Battery full": "Battery full", "Battery full": "Battery full",
"Pin": "Pin", "Pin": "Pin",
"Unpin": "Unpin" "Unpin": "Unpin"
} }
@@ -35,7 +35,7 @@
"Help & Support": "Помощь", "Help & Support": "Помощь",
"Bubble": "Пузырчатый", "Bubble": "Пузырчатый",
"Large images | God tier quality, no NSFW.": "Большие изобр. | Отличное качество, без NSFW.", "Large images | God tier quality, no NSFW.": "Большие изобр. | Отличное качество, без NSFW.",
"Dark": "Тьма", "Dark": "Тёмный",
"Center clock": "Часы по центру экрана", "Center clock": "Часы по центру экрана",
"Search, calculate or run": "Поиск, расчёт, запуск", "Search, calculate or run": "Поиск, расчёт, запуск",
"Region height": "Высота области", "Region height": "Высота области",
@@ -47,7 +47,7 @@
"at": "в", "at": "в",
"Math": "Математика", "Math": "Математика",
"Consider plugging in your device": "Подключите зарядку", "Consider plugging in your device": "Подключите зарядку",
"Workspaces shown": "Видимые пространство", "Workspaces shown": "Видимые пространства",
"Place the corners to trigger at the bottom": "Триггер-углы снизу", "Place the corners to trigger at the bottom": "Триггер-углы снизу",
"No API key\nSet it with /key YOUR_API_KEY": "Нет API-ключа\nУстановите: /key ВАШ_КЛЮЧ", "No API key\nSet it with /key YOUR_API_KEY": "Нет API-ключа\nУстановите: /key ВАШ_КЛЮЧ",
"Auto (System)": "Авто (система)", "Auto (System)": "Авто (система)",
@@ -223,7 +223,7 @@
"Networking": "Сеть", "Networking": "Сеть",
"Tint icons": "Тонировать иконки", "Tint icons": "Тонировать иконки",
"Low battery": "Низкий заряд", "Low battery": "Низкий заряд",
"Make icons pinned by default": "Показывать все иконки", "Make icons pinned by default": "Закреплять все иконки",
"Get the next page of results": "Следующая стр. результатов", "Get the next page of results": "Следующая стр. результатов",
"Invalid API provider. Supported: \n-": "Неверный провайдер. Поддерж:\n-", "Invalid API provider. Supported: \n-": "Неверный провайдер. Поддерж:\n-",
"Show \"Locked\" text": "Показ. текст «Заблокировано»", "Show \"Locked\" text": "Показ. текст «Заблокировано»",
@@ -276,7 +276,7 @@
"Prefixes": "Префиксы", "Prefixes": "Префиксы",
"Terminal": "Терминала", "Terminal": "Терминала",
"Incorrect password": "Неверный пароль", "Incorrect password": "Неверный пароль",
"Line-separated": "Без разделения", "Line-separated": "Разделение по строкам",
"Always": "Всегда", "Always": "Всегда",
"☕ Break: %1 minutes": "☕ Перерыв: %1 мин", "☕ Break: %1 minutes": "☕ Перерыв: %1 мин",
"Depends on sidebars": "Зависит от панелей", "Depends on sidebars": "Зависит от панелей",
@@ -288,7 +288,7 @@
"Base URL": "Базовый URL", "Base URL": "Базовый URL",
"Float": "Флоат", "Float": "Флоат",
"Invalid arguments. Must provide `command`.": "Неверные аргументы. Укажите `command`.", "Invalid arguments. Must provide `command`.": "Неверные аргументы. Укажите `command`.",
"Fully charged": "Полностью заряжен", "Fully charged": "Полностью заряжена",
"Earbang protection": "Защита ушей", "Earbang protection": "Защита ушей",
"Low warning": "Увед. о низком %", "Low warning": "Увед. о низком %",
"Advanced": "Прочее", "Advanced": "Прочее",
@@ -330,6 +330,10 @@
"Connect to Wi-Fi": "Подкл. к Wi-Fi", "Connect to Wi-Fi": "Подкл. к Wi-Fi",
"... and %1 more": "... и ещё %1", "... and %1 more": "... и ещё %1",
"Cookie clock settings": "Настройки «Cookie»-часов", "Cookie clock settings": "Настройки «Cookie»-часов",
"Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing": "Выглядит мягче и уместнее с разным количеством углов,\nно сжатие может выглядить менее впечатляюще",
"Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical.": "Часы будут постоянно вращаться. Это крайне ресурсозатратно\n(примерно 50% использования Intel UHD Graphics) и фактически бесполезно.",
"Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons": "Может быть активировано только в режимах 'С точками' и 'Полностью залитый' по эстетическим причинам",
"Can't be turned on when using 'Numbers' dial style for aesthetic reasons": "Не может быть включено, когда используется стиль 'С числами' по эстетическим причинам",
"Brightness and volume": "Яркость и громкость", "Brightness and volume": "Яркость и громкость",
"Choose file": "Выбор обоев", "Choose file": "Выбор обоев",
"Invalid model. Supported: \n```": "Неверная модель. Поддерживаемые: \n```", "Invalid model. Supported: \n```": "Неверная модель. Поддерживаемые: \n```",
@@ -434,7 +438,7 @@
"Game mode": "Игровой режим", "Game mode": "Игровой режим",
"Usage: %1save CHAT_NAME": "Исп: %1save ИМЯ_ЧАТА", "Usage: %1save CHAT_NAME": "Исп: %1save ИМЯ_ЧАТА",
"Thin": "Тонкий", "Thin": "Тонкий",
"Light": "Свет", "Light": "Светлый",
"When not fullscreen": "Не в фулл-скрине", "When not fullscreen": "Не в фулл-скрине",
"Commands, edit configs, search.\nTakes an extra turn to switch to search mode if that's needed": "Команды, редактирование конфигов, поиск.\nПри необходимости переключается в режим поиска", "Commands, edit configs, search.\nTakes an extra turn to switch to search mode if that's needed": "Команды, редактирование конфигов, поиск.\nПри необходимости переключается в режим поиска",
"Privacy Policy": "Политика конфиденциальности", "Privacy Policy": "Политика конфиденциальности",
@@ -506,7 +510,7 @@
"Could be images or parts of the screen that have some containment.\nMight not always be accurate.\nThis is done with an image processing algorithm run locally and no AI is used.": "Могут быть изображения или части экрана с содержимым.\nМожет быть неточно.\nИспользуется локальный алгоритм обработки изображений, без ИИ.", "Could be images or parts of the screen that have some containment.\nMight not always be accurate.\nThis is done with an image processing algorithm run locally and no AI is used.": "Могут быть изображения или части экрана с содержимым.\nМожет быть неточно.\nИспользуется локальный алгоритм обработки изображений, без ИИ.",
"Polling interval (m)": "Интервал опроса (мин)", "Polling interval (m)": "Интервал опроса (мин)",
"Inactive": "Неактивно", "Inactive": "Неактивно",
"Authentication": "Аутентиф.", "Authentication": "Аутентификация",
"Full warning": "Уведомление о полном заряде при проценте", "Full warning": "Уведомление о полном заряде при проценте",
"Power Profile": "Профиль питания", "Power Profile": "Профиль питания",
"Content region": "Обл. контента", "Content region": "Обл. контента",
@@ -596,7 +600,7 @@
"Battery: %1%2": "Батарея: %1%2", "Battery: %1%2": "Батарея: %1%2",
"Command": "Команда", "Command": "Команда",
"Tooltips": "Подсказки", "Tooltips": "Подсказки",
"Show hidden icons": "Системный трей", "Show hidden icons": "Показать скрытые значки",
"Used for headings and titles": "Для заголовков", "Used for headings and titles": "Для заголовков",
"Top-down": "Сверху вниз", "Top-down": "Сверху вниз",
"of %1": "из %1", "of %1": "из %1",
@@ -613,7 +617,7 @@
"Overlay: General": "Игровой оверлей", "Overlay: General": "Игровой оверлей",
"Enable opening zoom animation": "Анимация зума при открытии", "Enable opening zoom animation": "Анимация зума при открытии",
"More Internet settings": "Доп. сетевые настройки", "More Internet settings": "Доп. сетевые настройки",
"Nerd font icons": "Иконки Nerd Font (эмодзи)", "Nerd font icons": "Иконки Nerd Font",
"Display modifiers and keys in multiple keycap (e.g., \"Ctrl + A\" instead of \"Ctrl A\" or \"󰘴 + A\" instead of \"󰘴 A\")": "Показывать модификаторы с разделителем (напр, «Ctrl + A» вместо «Ctrl A»)", "Display modifiers and keys in multiple keycap (e.g., \"Ctrl + A\" instead of \"Ctrl A\" or \"󰘴 + A\" instead of \"󰘴 A\")": "Показывать модификаторы с разделителем (напр, «Ctrl + A» вместо «Ctrl A»)",
"Change password": "Изменить пароль", "Change password": "Изменить пароль",
"Check interval (mins)": "Интервал пров. (мин)", "Check interval (mins)": "Интервал пров. (мин)",
@@ -633,7 +637,7 @@
"Numbers font": "Шрифт чисел", "Numbers font": "Шрифт чисел",
"Move right": "Переместить вправо", "Move right": "Переместить вправо",
"Unknown Application": "Неизв. приложение", "Unknown Application": "Неизв. приложение",
"Used for decorative/expressive text": "Для декоротивного / выразительного текста", "Used for decorative/expressive text": "Для декоративного / выразительного текста",
"Used for reading large blocks of text": "Для чтения больших блоков", "Used for reading large blocks of text": "Для чтения больших блоков",
"Type /key to get started with online models\nCtrl+O to expand sidebar\nCtrl+P to pin sidebar\nCtrl+D to detach sidebar": "Введите /key для онлайн-моделей\nCtrl+O - расширить панель\nCtrl+P - закрепить панель\nCtrl+D - открепить панель", "Type /key to get started with online models\nCtrl+O to expand sidebar\nCtrl+P to pin sidebar\nCtrl+D to detach sidebar": "Введите /key для онлайн-моделей\nCtrl+O - расширить панель\nCtrl+P - закрепить панель\nCtrl+D - открепить панель",
"Health:": "Здоровье:", "Health:": "Здоровье:",
@@ -648,7 +652,7 @@
"Pinned": "Закреплено", "Pinned": "Закреплено",
"Unpin from Start": "Открепить из пуска", "Unpin from Start": "Открепить из пуска",
"Adjust the color temperature": "Цветовая температура", "Adjust the color temperature": "Цветовая температура",
"Han chars": "Кандзи", "Han chars": "Иероглифы",
"Show only when locked": "Отображать только при блокировке", "Show only when locked": "Отображать только при блокировке",
"Widget: Weather": "Виджет погоды", "Widget: Weather": "Виджет погоды",
"Right to left": "Справа налево", "Right to left": "Справа налево",
@@ -659,13 +663,13 @@
"Fonts": "Шрифты", "Fonts": "Шрифты",
"Left to right": "Слева направо", "Left to right": "Слева направо",
"Set FPS limit": "Лимит FPS", "Set FPS limit": "Лимит FPS",
"Draggable": "Drag & drop", "Draggable": "Перетаскиваемый",
"Turn on from sunset to sunrise": "От заката до рассвета", "Turn on from sunset to sunrise": "От заката до рассвета",
"Do you want to allow this app to make changes to your device?": "Разрешить приложению изменять устройство?", "Do you want to allow this app to make changes to your device?": "Разрешить приложению изменять устройство?",
"Balance brightness based on content": "Баланс яркости по содержимому", "Balance brightness based on content": "Баланс яркости по содержимому",
"Font width and roundness settings are only available for some fonts like Google Sans Flex": "Ширина и скруглённость - только для нек. шрифтов (напр, Google Sans Flex)", "Font width and roundness settings are only available for some fonts like Google Sans Flex": "Ширина и скруглённость - только для нек. шрифтов (напр, Google Sans Flex)",
"Record region": "Запись обл.", "Record region": "Запись обл.",
"You can also manually edit cheatsheet.superKey": "Можно вручную отредактировать клавишу в шпаргалке клавиш и в других частях системы", "You can also manually edit cheatsheet.superKey": "Также вы можете вручную отредактировать cheatsheet.superKey",
"Sign out": "Выйти", "Sign out": "Выйти",
"Overlay: Crosshair": "Оверлей: прицел", "Overlay: Crosshair": "Оверлей: прицел",
"Shut down": "Выключить", "Shut down": "Выключить",
+21 -18
View File
@@ -7,28 +7,31 @@ add_newline = false
# Cool stuff 󰜥    # Cool stuff 󰜥   
# format = """ # format = """
# $cmd_duration$username$hostname $directory $git_branch # $directory $fill $git_branch $cmd_duration
# $character # $character"""
# """
format = """ format = """
$cmd_duration 󰜥 $directory $git_branch $cmd_duration $directory$git_branch
$character""" $character"""
[fill]
symbol = '-'
style = 'fg:245'
# Replace the "" symbol in the prompt with "➜" # Replace the "" symbol in the prompt with "➜"
[character] # The name of the module we are configuring is "character" [character] # The name of the module we are configuring is "character"
success_symbol = "[  ](bold fg:blue)" success_symbol = "[ ](bold fg:255)"
error_symbol = "[  ](bold fg:red)" error_symbol = "[ ](bold fg:249)"
# Disable the package module, hiding it from the prompt completely # Disable the package module, hiding it from the prompt completely
[package] [package]
disabled = true disabled = true
[git_branch] [git_branch]
style = "bg: cyan" style = "bg: 252"
symbol = "󰘬" symbol = "󰘬"
truncation_length = 12 truncation_length = 12
truncation_symbol = "" truncation_symbol = ""
format = "󰜥 [](bold fg:cyan)[$symbol $branch(:$remote_branch)](fg:black bg:cyan)[ ](bold fg:cyan)" format = " 󰜥 [](bold fg:252)[$symbol $branch(:$remote_branch)](fg:235 bg:252)[ ](bold fg:252)"
[git_commit] [git_commit]
commit_hash_length = 4 commit_hash_length = 4
@@ -52,7 +55,7 @@ deleted = " 🗑 "
[hostname] [hostname]
ssh_only = false ssh_only = false
format = "[•$hostname](bg:cyan bold fg:black)[](bold fg:cyan)" format = "[•$hostname](bg:252 bold fg:235)[](bold fg:252)"
trim_at = ".companyname.com" trim_at = ".companyname.com"
disabled = false disabled = false
@@ -71,19 +74,19 @@ format = '🕙[\[ $time \]]($style) '
time_format = "%T" time_format = "%T"
[username] [username]
style_user = "bold bg:cyan fg:black" style_user = "bold bg:252 fg:235"
style_root = "red bold" style_root = "red bold"
format = "[](bold fg:cyan)[$user]($style)" format = "[](bold fg:252)[$user]($style)"
disabled = false disabled = false
show_always = true show_always = true
[directory] [directory]
home_symbol = "  " home_symbol = " "
read_only = "  " read_only = "  "
style = "bg:green fg:black" style = "bg:255 fg:black"
truncation_length = 6 truncation_length = 2
truncation_symbol = " ••/" truncation_symbol = ".../"
format = '[](bold fg:green)[󰉋 $path]($style)[](bold fg:green)' format = '[](bold fg:255)[󰉋 $path]($style)[](bold fg:255)'
[directory.substitutions] [directory.substitutions]
@@ -97,4 +100,4 @@ format = '[](bold fg:green)[󰉋 $path]($style)[](bold fg:green)'
[cmd_duration] [cmd_duration]
min_time = 0 min_time = 0
format = '[](bold fg:yellow)[󰪢 $duration](bold bg:yellow fg:black)[](bold fg:yellow)' format = '[](bold fg:252)[󰪢 $duration](bold bg:252 fg:235)[](bold fg:252)'
@@ -9,62 +9,62 @@ DESCRIPTION="Toolkit for building desktop widgets using QtQuick"
HOMEPAGE="https://quickshell.org/" HOMEPAGE="https://quickshell.org/"
EGIT_REPO_URI="https://github.com/quickshell-mirror/quickshell.git" EGIT_REPO_URI="https://github.com/quickshell-mirror/quickshell.git"
EGIT_COMMIT="6e17efab83d3a5ad5d6e59bc08d26095c6660502" EGIT_COMMIT="7511545ee20664e3b8b8d3322c0ffe7567c56f7a"
KEYWORDS="~amd64 ~arm64 ~x86" KEYWORDS="~amd64 ~arm64 ~x86"
LICENSE="LGPL-3" LICENSE="LGPL-3"
SLOT="0" SLOT="0"
# Upstream recommends leaving all build options enabled by default
IUSE="+breakpad +jemalloc +sockets +wayland +layer-shell +session-lock +toplevel-management +screencopy +X +pipewire +tray +mpris +pam +hyprland +hyprland-global-shortcuts +hyprland-focus-grab +i3 +i3-ipc +bluetooth" IUSE="-breakpad +jemalloc +sockets +wayland +layer-shell +session-lock +toplevel-management +screencopy +X +pipewire +tray +mpris +pam +hyprland +hyprland-global-shortcuts +hyprland-focus-grab -i3 -i3-ipc +bluetooth"
RDEPEND=" RDEPEND="
dev-qt/qtbase:6 dev-qt/qtbase:6=
dev-qt/qtsvg:6 dev-qt/qtdeclarative:6=
dev-qt/qt5compat:6 dev-qt/qt5compat:6=
kde-frameworks/kimageformats:6=[avif]
dev-qt/qtimageformats:6 dev-cpp/cpptrace[unwind]
dev-qt/qtmultimedia:6 dev-qt/qtimageformats:6=
dev-qt/qtpositioning:6 dev-qt/qtmultimedia:6=
dev-qt/qtquicktimeline:6 dev-qt/qtpositioning:6=
dev-qt/qtsensors:6 dev-qt/qtquicktimeline:6=
dev-qt/qtsvg:6 dev-qt/qtsensors:6=
dev-qt/qttools:6 dev-qt/qtsvg:6=
dev-qt/qttranslations:6 dev-qt/qttools:6=
dev-qt/qtvirtualkeyboard:6 dev-qt/qttranslations:6=
dev-qt/qtwayland:6 dev-qt/qtvirtualkeyboard:6=
dev-qt/qtwayland:6=
kde-apps/kdialog kde-apps/kdialog
kde-frameworks/syntax-highlighting:6 kde-frameworks/syntax-highlighting:6=
kde-frameworks/kirigami kde-frameworks/kirigami:6=
jemalloc? ( dev-libs/jemalloc ) jemalloc? ( dev-libs/jemalloc:= )
wayland? ( wayland? (
dev-libs/wayland dev-libs/wayland
dev-qt/qtwayland:6 dev-qt/qtwayland:6=
) )
screencopy? ( screencopy? (
x11-libs/libdrm x11-libs/libdrm
media-libs/mesa media-libs/mesa
) )
X? ( x11-libs/libxcb ) X? ( x11-libs/libxcb:= )
pipewire? ( media-video/pipewire ) pipewire? ( media-video/pipewire:= )
mpris? ( dev-qt/qtdbus ) mpris? ( dev-qt/qtdbus:= )
pam? ( sys-libs/pam ) pam? ( sys-libs/pam )
bluetooth? ( net-wireless/bluez ) bluetooth? ( net-wireless/bluez )
" "
DEPEND="${RDEPEND}" DEPEND="${RDEPEND}"
BDEPEND=" BDEPEND="
|| ( >=sys-devel/gcc-14:* >=llvm-core/clang-17:* ) dev-cpp/cli11
dev-build/cmake
dev-vcs/git
dev-build/ninja
dev-qt/qtshadertools
dev-util/spirv-tools dev-util/spirv-tools
dev-qt/qtshadertools:6
wayland? ( wayland? (
dev-util/wayland-scanner dev-util/wayland-scanner
dev-libs/wayland-protocols dev-libs/wayland-protocols
) )
dev-cpp/cli11
dev-build/ninja
dev-build/cmake
dev-vcs/git
virtual/pkgconfig virtual/pkgconfig
breakpad? ( dev-util/breakpad ) breakpad? ( dev-util/breakpad )
dev-util/vulkan-headers dev-util/vulkan-headers
@@ -74,7 +74,7 @@ src_configure(){
mycmakeargs=( mycmakeargs=(
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_BUILD_TYPE=RelWithDebInfo
-DDISTRIBUTOR="Gentoo Illogical-Impulses" -DDISTRIBUTOR="Gentoo Illogical-Impulses"
-DINSTALL_QML_PREFIX="lib64/qt6/qml" -DINSTALL_QML_PREFIX="$(get_libdir)/qt6/qml"
-DCRASH_REPORTER=$(usex breakpad ON OFF) -DCRASH_REPORTER=$(usex breakpad ON OFF)
-DUSE_JEMALLOC=$(usex jemalloc ON OFF) -DUSE_JEMALLOC=$(usex jemalloc ON OFF)
-DSOCKETS=$(usex sockets ON OFF) -DSOCKETS=$(usex sockets ON OFF)
@@ -18,7 +18,7 @@ RDEPEND="
gui-apps/hypridle gui-apps/hypridle
gui-apps/hyprlock gui-apps/hyprlock
gui-apps/hyprpicker gui-apps/hyprpicker
app-misc/songrec media-sound/songrec
app-i18n/translate-shell app-i18n/translate-shell
gui-apps/wlogout gui-apps/wlogout
sci-libs/libqalculate sci-libs/libqalculate
-3
View File
@@ -19,6 +19,3 @@ import_ebuild "${FT_DIR}" "media-fonts" "rubik-vf"
import_ebuild "${FT_DIR}" "media-fonts" "space-grotesk" import_ebuild "${FT_DIR}" "media-fonts" "space-grotesk"
import_ebuild "${FT_DIR}" "kde-plasma" "breeze-plus" import_ebuild "${FT_DIR}" "kde-plasma" "breeze-plus"
import_ebuild "${FT_DIR}" "x11-themes" "darkly" import_ebuild "${FT_DIR}" "x11-themes" "darkly"
############### WIDGETS
import_ebuild "${WIDGETS_DIR}" "app-misc" "songrec"
+2 -1
View File
@@ -52,7 +52,6 @@ v sudo sh -c 'cat ./sdata/dist-gentoo/additional-useflags >> /etc/portage/packag
v sudo emerge --sync v sudo emerge --sync
v sudo emerge --quiet --newuse --update --deep @world v sudo emerge --quiet --newuse --update --deep @world
v sudo emerge --quiet @smart-live-rebuild v sudo emerge --quiet @smart-live-rebuild
v sudo emerge --depclean
# Remove old ebuilds (if this isn't done the wildcard will fuck upon a version change) # Remove old ebuilds (if this isn't done the wildcard will fuck upon a version change)
x sudo rm -fr ${ebuild_dir}/app-misc/illogical-impulse-* x sudo rm -fr ${ebuild_dir}/app-misc/illogical-impulse-*
@@ -66,3 +65,5 @@ for i in "${metapkgs[@]}"; do
v sudo ebuild ${ebuild_dir}/app-misc/${i}/*.ebuild digest v sudo ebuild ${ebuild_dir}/app-misc/${i}/*.ebuild digest
v sudo emerge --update --quiet app-misc/${i} v sudo emerge --update --quiet app-misc/${i}
done done
v sudo emerge --depclean
+3 -2
View File
@@ -28,7 +28,6 @@ gui-libs/hyprcursor
gui-apps/wf-recorder gui-apps/wf-recorder
gui-apps/wtype gui-apps/wtype
gui-apps/fuzzel gui-apps/fuzzel
gui-apps/quickshell **
gui-apps/wlogout gui-apps/wlogout
dev-cpp/sdbus-c++ dev-cpp/sdbus-c++
dev-libs/hyprland-protocols dev-libs/hyprland-protocols
@@ -52,5 +51,7 @@ media-fonts/space-grotesk
media-fonts/material-symbols-variable ** media-fonts/material-symbols-variable **
media-fonts/readex-pro media-fonts/readex-pro
media-fonts/rubik-vf media-fonts/rubik-vf
app-misc/songrec media-sound/songrec
dev-cpp/glaze dev-cpp/glaze
dev-cpp/cpptrace
dev-libs/libdwarf
@@ -1,48 +0,0 @@
# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DESCRIPTION="Illogicall Impulse Widget Dependencies"
HOMEPAGE=""
SRC_URI="https://github.com/marin-m/SongRec/archive/${PV}.tar.gz -> ${P}-SongRec.tar.gz"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~x86"
# need for cargo fetch, idk how to get around it if possible
RESTRICT="strip network-sandbox"
DEPEND=""
RDEPEND=""
S="${WORKDIR}/SongRec-${PV}"
src_prepare() {
default
export CARGO_HOME="${WORKDIR}/cargo"
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
}
src_compile() {
export CARGO_HOME="${WORKDIR}/cargo"
cargo build --release --frozen --offline
}
src_install() {
dobin target/release/songrec
insinto /usr/share/applications
doins packaging/rootfs/usr/share/applications/com.github.marinm.songrec.desktop
insinto /usr/share/icons/hicolor/scalable/apps
doins packaging/rootfs/usr/share/icons/hicolor/scalable/apps/com.github.marinm.songrec.svg
insinto /usr/share/metainfo
doins packaging/rootfs/usr/share/metainfo/com.github.marinm.songrec.metainfo.xml
insinto /usr/share/songrec/translations
doins -r translations/*
dodoc README.md
}
+3 -1
View File
@@ -111,7 +111,9 @@ sys-power/upower introspection
gui-apps/fuzzel png svg gui-apps/fuzzel png svg
dev-libs/glib dbus elf introspection mime xattr dev-libs/glib dbus elf introspection mime xattr
# ngl idk about nm-connection-editor. Works fine without # ngl idk about nm-connection-editor. Works fine without
gui-apps/quickshell -X -i3 -i3-ipc breakpad bluetooth hyprland hyprland-focus-grab hyprland-global-shortcuts jemalloc layer-shell mpris pam pipewire screencopy session-lock sockets toplevel-management tray wayland
#app-i18n/translate-shell (nothing needed) #app-i18n/translate-shell (nothing needed)
#gui-apps/wlogout (no use flags) #gui-apps/wlogout (no use flags)
media-gfx/imagemagick xml media-gfx/imagemagick xml
################### OTHER ###################
dev-cpp/cpptrace unwind