Merge branch 'end-4:main' into main

This commit is contained in:
jwihardi
2025-11-08 22:18:05 -05:00
committed by GitHub
36 changed files with 1443 additions and 117 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ labels: ["ISSUE"]
body:
- type: markdown
attributes:
value: "**Welcome to submit a new issue!**\n- Please search in [existing issues](https://github.com/end-4/dots-hyprland/issues?q=is%3Aissue) before continue.\n- It takes only 3 steps, so please be patient :)\n- Tip: If your issue is not a feature request, and it does not fit into the following form, for example \"how can I edit some widget\", please use [Discussions](https://github.com/end-4/dots-hyprland/discussions) instead."
value: "**Welcome to submit a new issue!**\n- Please search in [existing issues](https://github.com/end-4/dots-hyprland/issues?q=is%3Aissue) before continue.\n- It takes only 3 steps, so please be patient :)\n- NOTE 1: If your issue is not a feature request, and it does not fit into the following form, for example \"how can I edit some widget\", please use [Discussions](https://github.com/end-4/dots-hyprland/discussions) instead.\n- NOTE 2: If your problem is distro specific and you do not use Arch(-based) distros, plesae submit [Discussion at Extra Distros](https://github.com/end-4/dots-hyprland/discussions/new?category=extra-distros) instead."
- type: checkboxes
attributes:
label: "Step 1. Before you submit"
@@ -0,0 +1,30 @@
# Bar, wallpaper
exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh
exec-once = qs -c $qsConfig &
# Input method
# exec-once = fcitx5
# Core components (authentication, lock screen, notification daemon)
exec-once = gnome-keyring-daemon --start --components=secrets
exec-once = hypridle
exec-once = dbus-update-activation-environment --all
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
exec-once = hyprpm reload
# Audio
exec-once = easyeffects --gapplication-service
# Clipboard: history
# exec-once = wl-paste --watch cliphist store &
exec-once = wl-paste --type text --watch bash -c 'cliphist store && qs -c $qsConfig ipc call cliphistService update'
exec-once = wl-paste --type image --watch bash -c 'cliphist store && qs -c $qsConfig ipc call cliphistService update'
# Cursor
exec-once = hyprctl setcursor Bibata-Modern-Classic 24
# Fix dock pinned apps not launching properly (https://github.com/end-4/dots-hyprland/issues/2200)
exec-once = sleep 3.5 && hyprctl reload && sleep 0.5 && touch ~/.config/quickshell/ii/shell.qml
# For fedora to setup polkit
exec-once = /usr/libexec/kf6/polkit-kde-authentication-agent-1
@@ -214,6 +214,8 @@ Variants {
right: wallpaper.right
top: wallpaper.top
bottom: wallpaper.bottom
horizontalCenter: undefined
verticalCenter: undefined
readonly property real parallaxFactor: Config.options.background.parallax.widgetsFactor
leftMargin: {
const xOnWallpaper = bgRoot.movableXSpace;
@@ -249,8 +251,8 @@ Variants {
right: undefined
top: undefined
bottom: undefined
// horizontalCenter: parent.horizontalCenter
// verticalCenter: parent.verticalCenter
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
}
}
@@ -58,7 +58,7 @@ Item {
property var keyBlacklist: ["Super_L"]
property var keySubstitutions: Object.assign({
"Super": "󰖳",
"Super": "",
"mouse_up": "Scroll ↓", // ikr, weird
"mouse_down": "Scroll ↑", // trust me bro
"mouse:272": "LMB",
@@ -272,7 +272,7 @@ Singleton {
// 0: 󰖳 | 1: 󰌽 | 2: 󰘳 | 3:  | 4: 󰨡
// 5:  | 6:  | 7: 󰣇 | 8:  | 9: 
// 10:  | 11:  | 12:  | 13:  | 14: 󱄛
property string superKey: "󰖳"
property string superKey: ""
property bool useMacSymbol: false
property bool splitButtons: true
property bool useMouseSymbol: false
@@ -84,20 +84,26 @@ Singleton {
property JsonObject crosshair: JsonObject {
property bool pinned: false
property bool clickthrough: true
property real x: 835
property real y: 490
property real x: 827
property real y: 441
property real width: 250
property real height: 100
}
property JsonObject recorder: JsonObject {
property bool pinned: false
property bool clickthrough: false
property real x: 80
property real y: 80
property real width: 350
property real height: 130
}
property JsonObject resources: JsonObject {
property bool pinned: false
property bool clickthrough: true
property real x: 1500
property real y: 770
property real width: 350
property real height: 200
property int tabIndex: 0
}
property JsonObject volumeMixer: JsonObject {
@@ -105,6 +111,8 @@ Singleton {
property bool clickthrough: false
property real x: 80
property real y: 280
property real width: 350
property real height: 600
property int tabIndex: 0
}
property JsonObject fpsLimiter: JsonObject {
@@ -112,6 +120,8 @@ Singleton {
property bool clickthrough: false
property real x: 1576
property real y: 630
property real width: 280
property real height: 80
}
}
@@ -0,0 +1,15 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
import qs.modules.common
ComboBox {
id: root
Material.theme: Material.System
Material.accent: Appearance.m3colors.m3primary
Material.primary: Appearance.m3colors.m3primary
Material.background: Appearance.m3colors.m3surface
Material.foreground: Appearance.m3colors.m3onSurface
Material.containerStyle: Material.Outlined
}
@@ -12,7 +12,7 @@ import Quickshell.Widgets
* It doesn't exactly match the spec because it does not make sense to have stuff on a computer that fucking huge.
* Should be at 3/4 scale...
*/
Slider {
id: root
@@ -8,6 +8,8 @@ import qs.modules.common
MouseArea {
id: root
property alias animateXPos: xBehavior.enabled
property alias animateYPos: yBehavior.enabled
property bool draggable: true
drag.target: draggable ? root : undefined
cursorShape: (draggable && containsPress) ? Qt.ClosedHandCursor : draggable ? Qt.OpenHandCursor : Qt.ArrowCursor
@@ -18,9 +20,11 @@ MouseArea {
}
Behavior on x {
id: xBehavior
animation: Appearance.animation.elementMove.numberAnimation.createObject(this)
}
Behavior on y {
id: yBehavior
animation: Appearance.animation.elementMove.numberAnimation.createObject(this)
}
}
@@ -13,29 +13,67 @@ import qs.modules.common.widgets.widgetCanvas
* To make an overlay widget:
* 1. Create a modules/overlay/<yourWidget>/<YourWidget>.qml, using this as the base class and declare your widget content as contentItem
* 2. Add an entry to OverlayContext.availableWidgets with identifier=<yourWidgetIdentifier>
* 3. Add an entry in Persistent.states.overlay.<yourWidgetIdentifier> with x, y, pinned, clickthrough properties set to reasonable defaults
* 3. Add an entry in Persistent.states.overlay.<yourWidgetIdentifier> with x, y, width, height, pinned, clickthrough properties set to reasonable defaults
* 4. Add an entry in OverlayWidgetDelegateChooser with roleValue=<yourWidgetIdentifier> and Declare your widget in there
* Use existing entries as reference.
*/
AbstractOverlayWidget {
id: root
// To be defined by subclasses
required property Item contentItem
property bool fancyBorders: true
property bool showCenterButton: false
property bool showClickabilityButton: true
// Defaults n stuff
required property var modelData
readonly property string identifier: modelData.identifier
readonly property string materialSymbol: modelData.materialSymbol ?? "widgets"
property string title: identifier.replace(/([A-Z])/g, " $1").replace(/^./, function(str){ return str.toUpperCase(); })
property var persistentStateEntry: Persistent.states.overlay[identifier]
property real radius: Appearance.rounding.windowRounding
property real minWidth: 250
property real minimumWidth: 250
property real minimumHeight: 100
property real resizeMargin: 8
property real padding: 6
property real contentRadius: radius - padding
// Resizing
function getXResizeDirection(x) {
return (x < root.resizeMargin) ? -1 : (x > root.width - root.resizeMargin) ? 1 : 0
}
function getYResizeDirection(y) {
return (y < root.resizeMargin) ? -1 : (y > root.height - root.resizeMargin) ? 1 : 0
}
hoverEnabled: true
property bool resizable: true
property bool resizing: false
property int resizeXDirection: getXResizeDirection(mouseX)
property int resizeYDirection: getYResizeDirection(mouseY)
draggable: GlobalStates.overlayOpen
drag.target: undefined
animateXPos: !dragHandler.active
animateYPos: !dragHandler.active
z: dragHandler.active ? 2 : 1
cursorShape: {
if (dragHandler.active) return root.resizing ? cursorShape : Qt.ArrowCursor;
if (resizeMargin < mouseX && mouseX < width - resizeMargin &&
resizeMargin < mouseY && mouseY < height - resizeMargin) {
return Qt.ArrowCursor;
} else {
if (!root.resizable) return Qt.ArrowCursor;
const dragIsLeft = mouseX < width / 2
const dragIsTop = mouseY < height / 2
if ((dragIsLeft && dragIsTop) || (!dragIsLeft && !dragIsTop)) {
return Qt.SizeFDiagCursor
} else {
return Qt.SizeBDiagCursor
}
}
}
// Positioning & sizing
x: Math.round(persistentStateEntry.x) // Round or it'll be blurry
y: Math.round(persistentStateEntry.y) // Round or it'll be blurry
pinned: persistentStateEntry.pinned
@@ -68,7 +106,52 @@ AbstractOverlayWidget {
}
// Hooks
onReleased: savePosition();
onPressed: (event) => {
// We're only interested in handling resize here
// Early returns
if (!root.resizable) return;
if (root.resizeMargin < event.x && event.x < root.width - root.resizeMargin &&
root.resizeMargin < event.y && event.y < root.height - root.resizeMargin) {
return;
}
// Resizing setup
root.resizing = true;
root.resizeXDirection = getXResizeDirection(event.x);
root.resizeYDirection = getYResizeDirection(event.y);
if (root.resizeYDirection !== 0 && root.resizeXDirection === 0) {
root.resizeXDirection = event.x < root.width / 2 ? -1 : 1;
} else if (root.resizeXDirection !== 0 && root.resizeYDirection === 0) {
root.resizeYDirection = event.y < root.height / 2 ? -1 : 1;
}
}
onPositionChanged: (event) => {
if (!resizing) return;
contentContainer.implicitWidth = Math.max(root.persistentStateEntry.width + dragHandler.xAxis.activeValue * root.resizeXDirection, root.minimumWidth);
contentContainer.implicitHeight = Math.max(root.persistentStateEntry.height + dragHandler.yAxis.activeValue * root.resizeYDirection, root.minimumHeight);
const negativeXDrag = root.resizeXDirection === -1;
const negativeYDrag = root.resizeYDirection === -1;
const wantedX = root.persistentStateEntry.x + (negativeXDrag ? dragHandler.xAxis.activeValue : 0)
const wantedY = root.persistentStateEntry.y + (negativeYDrag ? dragHandler.yAxis.activeValue : 0)
const negativeXDragLimit = root.persistentStateEntry.x + root.persistentStateEntry.width - contentContainer.implicitWidth;
const negativeYDragLimit = root.persistentStateEntry.y + root.persistentStateEntry.height - contentContainer.implicitHeight;
root.x = negativeXDrag ? Math.min(wantedX, negativeXDragLimit) : wantedX;
root.y = negativeYDrag ? Math.min(wantedY, negativeYDragLimit) : wantedY;
}
DragHandler {
id: dragHandler
acceptedButtons: Qt.LeftButton | Qt.RightButton
target: (root.draggable && !root.resizing) ? root : null
onActiveChanged: { // Handle drag release
if (!active) {
root.resizing = false;
root.savePosition();
}
}
xAxis.minimum: 0
xAxis.maximum: root.parent?.width - root.width
yAxis.minimum: 0
yAxis.maximum: root.parent?.height - root.height
}
function close() {
Persistent.states.overlay.open = Persistent.states.overlay.open.filter(type => type !== root.identifier);
@@ -82,35 +165,36 @@ AbstractOverlayWidget {
persistentStateEntry.clickthrough = !persistentStateEntry.clickthrough;
}
function savePosition(xPos = root.x, yPos = root.y) {
persistentStateEntry.x = xPos;
persistentStateEntry.y = yPos;
function savePosition(xPos = root.x, yPos = root.y, width = contentContainer.implicitWidth, height = contentContainer.implicitHeight) {
persistentStateEntry.x = Math.round(xPos);
persistentStateEntry.y = Math.round(yPos);
persistentStateEntry.width = Math.round(width);
persistentStateEntry.height = Math.round(height);
}
function center() {
const targetX = (root.parent.width - contentColumn.width) / 2
const targetY = (root.parent.height - contentItem.height) / 2 - titleBar.implicitHeight
const targetX = (root.parent.width - contentColumn.width) / 2 - root.resizeMargin
const targetY = (root.parent.height - contentContainer.height) / 2 - titleBar.implicitHeight + border.border.width - root.resizeMargin
root.x = targetX
root.y = targetY
root.savePosition(targetX, targetY)
}
visible: GlobalStates.overlayOpen || actuallyPinned
implicitWidth: Math.max(contentColumn.implicitWidth, minWidth)
implicitHeight: contentColumn.implicitHeight
implicitWidth: contentColumn.implicitWidth + resizeMargin * 2
implicitHeight: contentColumn.implicitHeight + resizeMargin * 2
Rectangle {
id: border
anchors.fill: parent
color: (root.fancyBorders && GlobalStates.overlayOpen) ? Appearance.colors.colLayer1 : "transparent"
anchors {
fill: parent
margins: root.resizeMargin
}
color: ColorUtils.transparentize(Appearance.colors.colLayer1, (root.fancyBorders && GlobalStates.overlayOpen) ? 0 : 1)
radius: root.radius
border.color: ColorUtils.transparentize(Appearance.colors.colOutlineVariant, GlobalStates.overlayOpen ? 0 : 1)
border.width: 1
Behavior on color {
animation: Appearance.animation.elementMoveFast.colorAnimation.createObject(this)
}
layer.enabled: GlobalStates.overlayOpen
layer.effect: OpacityMask {
maskSource: Rectangle {
@@ -131,9 +215,8 @@ AbstractOverlayWidget {
id: titleBar
opacity: GlobalStates.overlayOpen ? 1 : 0
Layout.fillWidth: true
property real padding: 6
implicitWidth: titleBarRow.implicitWidth + padding * 2
implicitHeight: titleBarRow.implicitHeight + padding * 2
implicitWidth: titleBarRow.implicitWidth + root.padding * 2
implicitHeight: titleBarRow.implicitHeight + root.padding * 2
color: root.fancyBorders ? "transparent" : Appearance.colors.colLayer1
// border.color: Appearance.colors.colOutlineVariant
// border.width: 1
@@ -142,14 +225,13 @@ AbstractOverlayWidget {
id: titleBarRow
anchors {
fill: parent
margins: titleBar.padding
leftMargin: titleBar.padding + 8
bottomMargin: root.fancyBorders ? 0 : titleBar.padding
margins: root.padding
}
spacing: 2
MaterialSymbol {
text: root.materialSymbol
Layout.leftMargin: 6
iconSize: 20
Layout.alignment: Qt.AlignVCenter
Layout.rightMargin: 4
@@ -205,9 +287,10 @@ AbstractOverlayWidget {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.margins: root.fancyBorders ? root.padding : 0
Layout.topMargin: -border.border.width // Border of a rectangle is drawn inside its bounds, so we do this to make the gap not too big
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
implicitWidth: root.contentItem.implicitWidth
implicitHeight: root.contentItem.implicitHeight
implicitWidth: Math.max(root.persistentStateEntry.width, root.minimumWidth)
implicitHeight: Math.max(root.persistentStateEntry.height, root.minimumHeight)
children: [root.contentItem]
}
}
@@ -11,6 +11,7 @@ StyledOverlayWidget {
opacity: 1 // The crosshair itself already has transparency if configured
showClickabilityButton: false
clickthrough: true
resizable: false
contentItem: CrosshairContent {
anchors.centerIn: parent
@@ -6,6 +6,8 @@ import qs.modules.overlay
StyledOverlayWidget {
id: root
title: "MangoHud FPS"
minimumWidth: 275
minimumHeight: 100
contentItem: FpsLimiterContent {
radius: root.contentRadius
}
@@ -9,25 +9,22 @@ import qs.modules.overlay
StyledOverlayWidget {
id: root
minimumWidth: 310
minimumHeight: 130
contentItem: Rectangle {
id: contentItem
anchors.centerIn: parent
anchors.fill: parent
radius: root.contentRadius
color: Appearance.m3colors.m3surfaceContainer
property real padding: 8
implicitHeight: contentColumn.implicitHeight + padding * 2
implicitWidth: 350
ColumnLayout {
id: contentColumn
anchors {
fill: parent
margins: parent.padding
}
anchors.centerIn: parent
spacing: 10
Row {
Layout.alignment: Qt.AlignHCenter
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
spacing: 10
BigRecorderButton {
@@ -68,7 +65,7 @@ StyledOverlayWidget {
}
RippleButton {
Layout.alignment: Qt.AlignHCenter
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
Layout.fillWidth: false
buttonRadius: height / 2
colBackground: Appearance.colors.colLayer3
@@ -76,7 +73,7 @@ StyledOverlayWidget {
colRipple: Appearance.colors.colLayer3Active
onClicked: {
GlobalStates.overlayOpen = false;
Qt.openUrlExternally(Directories.videos);
Qt.openUrlExternally(`file://${Config.options.screenRecord.savePath}`);
}
contentItem: Row {
anchors.centerIn: parent
@@ -14,6 +14,8 @@ import qs.modules.overlay
StyledOverlayWidget {
id: root
minimumWidth: 300
minimumHeight: 200
property list<var> resources: [
{
"icon": "planner_review",
@@ -37,13 +39,10 @@ StyledOverlayWidget {
contentItem: Rectangle {
id: contentItem
anchors.centerIn: parent
anchors.fill: parent
color: Appearance.m3colors.m3surfaceContainer
radius: root.contentRadius
property real padding: 4
implicitWidth: 350
implicitHeight: 200
// implicitHeight: contentColumn.implicitHeight + padding * 2
ColumnLayout {
id: contentColumn
anchors {
@@ -10,13 +10,14 @@ import qs.modules.sidebarRight.volumeMixer
StyledOverlayWidget {
id: root
minimumWidth: 300
minimumHeight: 380
contentItem: Rectangle {
anchors.centerIn: parent
anchors.fill: parent
color: Appearance.m3colors.m3surfaceContainer
radius: root.contentRadius
property real padding: 16
implicitHeight: 600
implicitWidth: 350
property real padding: 6
ColumnLayout {
id: contentColumn
@@ -53,8 +54,28 @@ StyledOverlayWidget {
}
clip: true
VolumeDialogContent { isSink: true }
VolumeDialogContent { isSink: false }
PaddedVolumeDialogContent {
isSink: true
}
PaddedVolumeDialogContent {
isSink: false
}
}
}
}
component PaddedVolumeDialogContent: Item {
id: paddedVolumeDialogContent
property alias isSink: volDialogContent.isSink
property real padding: 12
implicitWidth: volDialogContent.implicitWidth + padding * 2
implicitHeight: volDialogContent.implicitHeight + padding * 2
VolumeDialogContent {
id: volDialogContent
anchors {
fill: parent
margins: paddedVolumeDialogContent.padding
}
}
}
@@ -11,21 +11,22 @@ import Quickshell.Services.Pipewire
WindowDialog {
id: root
property bool isSink: true
backgroundHeight: 700
backgroundHeight: 600
WindowDialogTitle {
text: root.isSink ? Translation.tr("Audio output") : Translation.tr("Audio input")
}
VolumeDialogContent {
isSink: root.isSink
}
WindowDialogSeparator {
Layout.topMargin: -22
Layout.leftMargin: 0
Layout.rightMargin: 0
}
VolumeDialogContent {
isSink: root.isSink
}
WindowDialogButtonRow {
DialogButton {
buttonText: Translation.tr("Details")
@@ -16,25 +16,15 @@ ColumnLayout {
readonly property list<var> appPwNodes: Pipewire.nodes.values.filter((node) => { // Should be list<PwNode> but it breaks ScriptModel
return root.correctType(node) && node.isStream
})
readonly property list<var> devices: Pipewire.nodes.values.filter(node => {
return root.correctType(node) && !node.isStream
})
readonly property bool hasApps: appPwNodes.length > 0
spacing: 16
WindowDialogSectionHeader {
visible: root.hasApps
text: Translation.tr("Applications")
}
WindowDialogSeparator {
visible: root.hasApps
Layout.topMargin: -22
Layout.leftMargin: 0
Layout.rightMargin: 0
color: Appearance.colors.colOutlineVariant
}
DialogSectionListView {
visible: root.hasApps
Layout.fillHeight: true
topMargin: 14
model: ScriptModel {
values: root.appPwNodes
@@ -49,44 +39,26 @@ ColumnLayout {
}
}
WindowDialogSectionHeader {
text: Translation.tr("Devices")
}
WindowDialogSeparator {
Layout.topMargin: -22
Layout.leftMargin: 0
Layout.rightMargin: 0
color: Appearance.colors.colOutlineVariant
}
DialogSectionListView {
Layout.fillHeight: !root.hasApps
Layout.preferredHeight: 180
model: ScriptModel {
values: Pipewire.nodes.values.filter(node => {
return root.correctType(node) && !node.isStream
})
}
delegate: StyledRadioButton {
id: radioButton
required property var modelData
anchors {
left: parent?.left
right: parent?.right
StyledComboBox {
id: deviceSelector
Layout.fillHeight: false
Layout.fillWidth: true
Layout.bottomMargin: 6
model: root.devices.map(node => node.description)
currentIndex: root.devices.findIndex(item => {
if (root.isSink) {
return item.id === Pipewire.preferredDefaultAudioSink?.id
} else {
return item.id === Pipewire.preferredDefaultAudioSource?.id
}
description: modelData.description
checked: modelData.id === (root.isSink ? Pipewire.preferredDefaultAudioSink?.id : Pipewire.preferredDefaultAudioSource?.id)
onCheckedChanged: {
if (!checked) return;
if (root.isSink) {
Pipewire.preferredDefaultAudioSink = modelData
} else {
Pipewire.preferredDefaultAudioSource = modelData
}
})
onActivated: (index) => {
print(index)
const item = root.devices[index]
if (root.isSink) {
Pipewire.preferredDefaultAudioSink = item
} else {
Pipewire.preferredDefaultAudioSource = item
}
}
}
@@ -106,4 +78,9 @@ ColumnLayout {
spacing: 4
animateAppearance: false
}
Component {
id: listElementComp
ListElement {}
}
}
@@ -146,14 +146,14 @@ Singleton {
// Thumbnail generation
function generateThumbnail(size: string) {
// console.log("[Wallpapers] Updating thumbnails")
if (!["normal", "large", "x-large", "xx-large"].includes(size)) throw new Error("Invalid thumbnail size");
thumbgenProc.directory = root.directory
thumbgenProc.running = false
thumbgenProc.command = [
"bash", "-c",
`${thumbgenScriptPath} --size ${size} --machine_progress -d ${FileUtils.trimFileProtocol(root.directory)} || ${generateThumbnailsMagickScriptPath} --size ${size} -d ${root.directory}`,
`${thumbgenScriptPath} --size ${size} --machine_progress -d ${FileUtils.trimFileProtocol(root.directory)} || ${generateThumbnailsMagickScriptPath} --size ${size} -d ${FileUtils.trimFileProtocol(root.directory)}`,
]
// console.log("[Wallpapers] Updating thumbnails with command ", thumbgenProc.command.join(" "))
root.thumbnailGenerationProgress = 0
thumbgenProc.running = true
}
@@ -177,6 +177,7 @@ Singleton {
}
}
onExited: (exitCode, exitStatus) => {
// print("[Wallpapers] Thumbnail generation completed with exit code", exitCode)
root.thumbnailGenerated(thumbgenProc.directory)
}
}
@@ -0,0 +1,608 @@
{
"Material cookie": "Material cookie",
"Style: Blurred": "Stil: Bulanık",
"Unknown device": "Bilinmeyen cihaz",
"Change any time later with /dark, /light, /wallpaper in the launcher\nIf the shell's colors aren't changing:\n 1. Open the right sidebar with Super+N\n 2. Click \"Reload Hyprland & Quickshell\" in the top-right corner": "İstediğiniz zaman /dark, /light, /wallpaper komutlarıyla değiştirebilirsiniz\nShell renkleri değişmiyorsa:\n 1. Super+N ile sağ kenar çubuğunu açın\n 2. Sağ üst köşedeki \"Hyprland ve Quickshell'i Yeniden Yükle\" düğmesine tıklayın",
"No pending tasks": "Bekleyen görev yok",
"Positioning": "Konumlandırma",
"Set temperature (randomness) of the model. Values range between 0 to 2 for Gemini, 0 to 1 for other models. Default is 0.5.": "Modelin sıcaklığını (rastgelelik) ayarlayın. Gemini için 0 ile 2 arası, diğer modeller için 0 ile 1 arası değerler. Varsayılan 0.5.",
"Critical warning": "Kritik uyarı",
"Unknown Artist": "Bilinmeyen Sanatçı",
"Web search": "Web araması",
"Load prompt from %1": "%1'den komut yükle",
"Attach a file. Only works with Gemini.": "Dosya ekle. Sadece Gemini ile çalışır.",
"Reboot": "Yeniden Başlat",
"API key:\n\n```txt\n%1\n```": "API anahtarı:\n\n```txt\n%1\n```",
"Pinned on startup": "Başlangıçta sabitle",
"Right": "Sağ",
"Reboot to firmware settings": "Firmware ayarlarına yeniden başlat",
"Automatically hide": "Otomatik gizle",
"Waiting for response...": "Yanıt bekleniyor...",
"To Do": "Yapılacaklar",
"Full": "Tam",
"Select Language": "Dil Seçin",
"Password": "Şifre",
"Bluetooth devices": "Bluetooth cihazları",
"Enable": "Etkinleştir",
"Elements": "Öğeler",
"Start": "Başlat",
"Random SFW Anime wallpaper from Konachan\nImage is saved to ~/Pictures/Wallpapers": "Konachan'dan rastgele SFW Anime duvar kağıdı\nGörsel ~/Resimler/Wallpapers dizinine kaydedilir",
"The popular one | Best quantity, but quality can vary wildly": "Popüler olan | En iyi miktar, ama kalite değişebilir",
"System uptime:": "Sistem çalışma süresi:",
"illogical-impulse Welcome": "illogical-impulse'a Hoş Geldiniz",
"Code saved to file": "Kod dosyaya kaydedildi",
"Info": "Bilgi",
"Preferred wallpaper zoom (%)": "Tercih edilen duvar kağıdı yakınlaştırması (%)",
"Time": "Zaman",
"Help & Support": "Yardım ve Destek",
"Bubble": "Baloncuk",
"Large images | God tier quality, no NSFW.": "Büyük görseller | Mükemmel kalite, NSFW yok.",
"Dark": "Koyu",
"Center clock": "Saati ortala",
"Search, calculate or run": "Ara, hesapla veya çalıştır",
"Region height": "Bölge yüksekliği",
"Load chat": "Sohbet yükle",
"Gives the model search capabilities (immediately)": "Modele arama yetenekleri kazandırır (hemen)",
"Depends on workspace": "Çalışma alanına bağlı",
"Blurred style": "Bulanık stil",
"Screenshot tool": "Ekran görüntüsü aracı",
"Enter password": "Şifre girin",
"Search the web": "Web'de ara",
"Local only": "Sadece yerel",
"at": "saat",
"Math": "Matematik",
"Consider plugging in your device": "Cihazınızı prize takın",
"Workspaces shown": "Gösterilen çalışma alanları",
"Place the corners to trigger at the bottom": "Tetikleyici köşeleri alta yerleştir",
"No API key\nSet it with /key YOUR_API_KEY": "API anahtarı yok\n/key API_ANAHTARINIZ ile ayarlayın",
"Auto (System)": "Otomatik (Sistem)",
"Arrow keys to navigate, Enter to select\nEsc or click anywhere to cancel": "Ok tuşlarıyla gezin, Enter ile seçin\nEsc veya herhangi bir yere tıklayarak iptal edin",
"Critically low battery": "Kritik düşük pil",
"Open editor": "Düzenleyici aç",
"%1 notifications": "%1 bildirim",
"Region width": "Bölge genişliği",
"Max allowed increase": "İzin verilen maksimum artış",
"Enable translator": "Çevirmeni etkinleştir",
"Constantly rotate": "Sürekli döndür",
"Automatically suspends the system when battery is low": "Pil düşük olduğunda sistemi otomatik olarak askıya alır",
"Cannot find a GPS service. Using the fallback method instead.": "GPS hizmeti bulunamadı. Yerine yedek yöntem kullanılıyor.",
"Qt apps": "Qt uygulamaları",
"Color picker": "Renk seçici",
"Interface": "Arayüz",
"Tint app icons": "Uygulama simgelerini renklendir",
"Select the language for the user interface.\n\"Auto\" will use your system's locale.": "Kullanıcı arayüzü dilini seçin.\n\"Otomatik\" sisteminizin yerel ayarını kullanır.",
"Show quote": "Alıntı göster",
"Local Ollama model | %1": "Yerel Ollama modeli | %1",
"Show clock": "Saat göster",
"Usage: <tt>%1superpaste NUM_OF_ENTRIES[i]</tt>\nSupply <tt>i</tt> when you want images\nExamples:\n<tt>%1superpaste 4i</tt> for the last 4 images\n<tt>%1superpaste 7</tt> for the last 7 entries": "Kullanım: <tt>%1superpaste GIRDI_SAYISI[i]</tt>\nGörseller için <tt>i</tt> ekleyin\nÖrnekler:\n<tt>%1superpaste 4i</tt> son 4 görsel için\n<tt>%1superpaste 7</tt> son 7 girdi için",
"Audio": "Ses",
"Corner style": "Köşe stili",
"No media": "Medya yok",
"Unknown function call: %1": "Bilinmeyen fonksiyon çağrısı: %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": "Çevrimiçi | %1'in modeli | Hızlı, duyarlı ve iyi biçimlendirilmiş yanıtlar verir. Dezavantajlar: işleri yapmaya pek istekli değil; bilinmeyen fonksiyon çağrıları yapabilir",
"Volume": "Ses",
"Medium": "Orta",
"Copy code": "Kodu kopyala",
"Exceeded max allowed": "İzin verilen maksimum aşıldı",
"Keep right sidebar loaded": "Sağ kenar çubuğunu yüklü tut",
"Left": "Sol",
"High": "Yüksek",
"Rect": "Dikdörtgen",
"Lap": "Tur",
"Clear": "Temizle",
"Screen snip": "Ekran kırpma",
"Reset": "Sıfırla",
"Back": "Geri",
"Dark/Light toggle": "Koyu/Açık geçişi",
"12h am/pm": "12s öö/ös",
"Download complete": "İndirme tamamlandı",
"Enable blur": "Bulanıklığı etkinleştir",
"Second hand": "Saniye ibresi",
"Bar & screen": "Çubuk ve ekran",
"Discharging:": "Deşarj:",
"Up %1": "Çalışma süresi %1",
"Low": "Düşük",
"Hour hand": "Saat ibresi",
"Clear chat history": "Sohbet geçmişini temizle",
"Fruit Salad": "Meyve Salatası",
"%1 Safe Storage": "%1 Güvenli Depolama",
"Hibernate": "Hazırda Beklet",
"Delete": "Sil",
"OK": "Tamam",
"Settings": "Ayarlar",
"This is usually safe and needed for your browser and AI sidebar anyway\nMostly useful for those who use lock on startup instead of a display manager that does it (GDM, SDDM, etc.)": "Bu genellikle güvenlidir ve tarayıcınız ve AI kenar çubuğu için zaten gereklidir\nÇoğunlukla başlangıçta kilitleme kullanıp bunu yapan bir görüntü yöneticisi (GDM, SDDM, vb.) kullanmayanlar için faydalıdır",
"Use Hyprlock (instead of Quickshell)": "Hyprlock kullan (Quickshell yerine)",
"Crosshair code (in Valorant's format)": "Nişangah kodu (Valorant formatında)",
"Silent": "Sessiz",
"Useless buttons": "İşe yaramaz düğmeler",
"Hover to reveal": "Görmek için üzerine gelin",
"Wallpaper & Colors": "Duvar Kağıdı ve Renkler",
"Auto": "Otomatik",
"Visibility": "Görünürlük",
"Shell & utilities": "Shell ve yardımcı programlar",
"Hollow": "İçi boş",
"illogical-impulse": "illogical-impulse",
"Use the system file picker instead\nRight-click to make this the default behavior": "Bunun yerine sistem dosya seçiciyi kullan\nBunu varsayılan davranış yapmak için sağ tıklayın",
"On-screen display": "Ekran üstü gösterim",
"Dotfiles": "Nokta dosyaları",
"Search wallpapers": "Duvar kağıtlarında ara",
"Mic toggle": "Mikrofon geçişi",
"Input": "Giriş",
"Also unlock keyring": "Anahtar halkasının da kilidini aç",
"Configuration": "Yapılandırma",
"Keep system awake": "Sistemi uyanık tut",
"Unknown command:": "Bilinmeyen komut:",
"Anime boorus": "Anime booru'ları",
"To Do:": "Yapılacaklar:",
"Uses Gemini to categorize the wallpaper then picks a preset based on it.\nYou'll need to set Gemini API key on the left sidebar first.\nImages are downscaled for performance, but just to be safe,\ndo not select wallpapers with sensitive information.": "Gemini kullanarak duvar kağıdını kategorize eder ve ona göre bir ön ayar seçer.\nÖnce sol kenar çubuğunda Gemini API anahtarını ayarlamanız gerekir.\nGörseller performans için küçültülür, ancak güvenli olmak için\nhasas bilgi içeren duvar kağıtlarını seçmeyin.",
"Bottom": "Alt",
"Clear the current list of images": "Mevcut görsel listesini temizle",
"Sunrise": "Gün doğumu",
"Show app icons": "Uygulama simgelerini göster",
"Format": "Format",
"Make sure your player has MPRIS support\nor try turning off duplicate player filtering": "Oynatıcınızın MPRIS desteği olduğundan emin olun\nveya yinelenen oynatıcı filtrelemeyi kapatmayı deneyin",
"Pause": "Duraklat",
"Desktop": "Masaüstü",
"Conflicts with the shell's system tray implementation": "Kabuğun sistem tepsisi uygulamasıyla çakışıyor",
"Your package manager is running": "Paket yöneticiniz çalışıyor",
"Conflicts with the shell's notification implementation": "Kabuğun bildirim uygulamasıyla çakışıyor",
"Unknown Album": "Bilinmeyen Albüm",
"Pick wallpaper image on your system": "Sisteminizdeki duvar kağıdı görselini seçin",
"Used:": "Kullanılan:",
"Cheat sheet": "Kopya kağıdı",
"Clock style": "Saat stili",
"No audio source": "Ses kaynağı yok",
"Paired": "Eşleştirildi",
"Documentation": "Belgeler",
"No": "Hayır",
"Pills": "Haplar",
"Thought": "Düşünce",
"When this is off you'll have to click": "Bu kapalı olduğunda tıklamanız gerekecek",
"Select output device": "Çıkış cihazını seç",
"Logout": "Çıkış Yap",
"Tip: Close a window with Super+Q": "İpucu: Super+Q ile bir pencereyi kapatın",
"Finished tasks will go here": "Tamamlanan görevler buraya gelecek",
"Terminal: Harmony (%)": "Terminal: Uyum (%)",
"Corner open": "Köşe açık",
"Shell conflicts killer": "Shell çakışma giderici",
"Clean stuff | Excellent quality, no NSFW": "Temiz içerik | Mükemmel kalite, NSFW yok",
"Scroll to change volume": "Ses değiştirmek için kaydırın",
"Wind": "Rüzgar",
"API key is set\nChange with /key YOUR_API_KEY": "API anahtarı ayarlandı\n/key API_ANAHTARINIZ ile değiştirin",
"Neutral": "Nötr",
"12h AM/PM": "12s ÖÖ/ÖS",
"Number show delay when pressing Super (ms)": "Super'e basarken numara gösterme gecikmesi (ms)",
"Fill": "Doldur",
"Always show numbers": "Numaraları her zaman göster",
"Dot": "Nokta",
"Provider set to": "Sağlayıcı şu şekilde ayarlandı",
"Unknown Title": "Bilinmeyen Başlık",
"Anime": "Anime",
"Refreshing (manually triggered)": "Yenileniyor (manuel tetiklendi)",
"Dock": "Dock",
"Require password to power off/restart": "Kapatma/yeniden başlatma için şifre iste",
"Line": "Çizgi",
"Weather": "Hava Durumu",
"All-rounder | Good quality, decent quantity": "Çok yönlü | İyi kalite, makul miktar",
"Scale (%)": "Ölçek (%)",
"Copy": "Kopyala",
"Usage": "Kullanım",
"Type /key to get started with online models\nCtrl+O to expand the sidebar\nCtrl+P to detach sidebar into a window": "Çevrimiçi modellerle başlamak için /key yazın\nKenar çubuğunu genişletmek için Ctrl+O\nKenar çubuğunu pencereye ayırmak için Ctrl+P",
"Set the tool to use for the model.": "Model için kullanılacak aracı ayarlayın.",
"Disable tools": "Araçları devre dışı bırak",
"Connect": "Bağlan",
"Allow NSFW": "NSFW'ye izin ver",
"Registration failed. Please inspect manually with the <tt>warp-cli</tt> command": "Kayıt başarısız. Lütfen <tt>warp-cli</tt> komutuyla manuel olarak kontrol edin",
"Time to full:": "Dolmasına kalan süre:",
"Session": "Oturum",
"Services": "Hizmetler",
"Nothing here!": "Burada hiçbir şey yok!",
"Overview": "Genel Bakış",
"Random: osu! seasonal": "Rastgele: osu! mevsimlik",
"If you want to somehow use fingerprint unlock...": "Parmak izi kilidi açmayı kullanmak istiyorsanız...",
"Minute hand": "Dakika ibresi",
"Notifications": "Bildirimler",
"Enable if you want clocks to show seconds accurately": "Saatlerin saniyeleri doğru göstermesini istiyorsanız etkinleştirin",
"Timer": "Zamanlayıcı",
"Quote settings": "Alıntı ayarları",
"System prompt": "Sistem komutu",
"Classic": "Klasik",
"Close": "Kapat",
"Disconnect": "Bağlantıyı kes",
"Go to source (%1)": "Kaynağa git (%1)",
"EasyEffects | Right-click to configure": "EasyEffects | Yapılandırmak için sağ tıklayın",
"Forget": "Unut",
"Output": "Çıkış",
"Date style": "Tarih stili",
"System": "Sistem",
"Usage: %1tool TOOL_NAME": "Kullanım: %1tool ARAÇ_ADI",
"Workspaces": "Çalışma alanları",
"Calendar": "Takvim",
"**Instructions**: Log into Mistral account, go to Keys on the sidebar, click Create new key": "**Talimatlar**: Mistral hesabına giriş yapın, kenar çubuğundaki Keys'e gidin, Create new key'e tıklayın",
"Volume limit": "Ses sınırı",
"Sunset": "Gün batımı",
"Dial style": "Kadran stili",
"Hi there! First things first...": "Merhaba! İlk önce...",
"Save chat to %1": "Sohbeti %1'e kaydet",
"Security": "Güvenlik",
"Total token count\nInput: %1\nOutput: %2": "Toplam token sayısı\nGiriş: %1\nÇıkış: %2",
"Cancel wallpaper selection": "Duvar kağıdı seçimini iptal et",
"Please charge!\nAutomatic suspend triggers at %1": "Lütfen şarj edin!\nOtomatik askıya alma %1'de tetikleniyor",
"Terminal: Harmonize threshold": "Terminal: Uyumlaştırma eşiği",
"Be patient...": "Sabırlı olun...",
"Utility buttons": "Yardımcı düğmeler",
"Tonal Spot": "Tonal Nokta",
"Prevents abrupt increments and restricts volume limit": "Ani artışları önler ve ses sınırını kısıtlar",
"Set the current API provider": "Mevcut API sağlayıcısını ayarlayın",
"Connection failed. Please inspect manually with the <tt>warp-cli</tt> command": "Bağlantı başarısız. Lütfen <tt>warp-cli</tt> komutuyla manuel olarak kontrol edin",
"Networking": "Ağ",
"Tint icons": "Simgeleri renklendir",
"Low battery": "Düşük pil",
"Make icons pinned by default": "Simgeleri varsayılan olarak sabitle",
"Get the next page of results": "Sonraki sayfa sonuçları al",
"Invalid API provider. Supported: \n-": "Geçersiz API sağlayıcısı. Desteklenenler: \n-",
"Show \"Locked\" text": "\"Kilitli\" metnini göster",
"**Pricing**: free. Data use policy varies depending on your OpenRouter account settings.\n\n**Instructions**: Log into OpenRouter account, go to Keys on the topright menu, click Create API Key": "**Fiyatlandırma**: ücretsiz. Veri kullanım politikası OpenRouter hesap ayarlarınıza göre değişir.\n\n**Talimatlar**: OpenRouter hesabına giriş yapın, sağ üst menüdeki Keys'e gidin, Create API Key'e tıklayın",
"Not visible to model": "Model için görünmez",
"Lock screen": "Ekranı kilitle",
"Save to Downloads": "İndirilenler'e kaydet",
"Expressive": "İfadeli",
"Suspend at": "Askıya alma zamanı",
"Jump to current month": "Mevcut aya git",
"Bold": "Kalın",
"Waifus only | Excellent quality, limited quantity": "Sadece waifu'lar | Mükemmel kalite, sınırlı miktar",
"Click to toggle light/dark mode\n(applied when wallpaper is chosen)": "Açık/koyu modu değiştirmek için tıklayın\n(duvar kağıdı seçildiğinde uygulanır)",
"Visualize region": "Bölgeyi görselleştir",
"Quote": "Alıntı",
"Sleep": "Uyku",
"Hit \"/\" to search": "Aramak için \"/\" tuşuna basın",
"Hug": "Sarıl",
"Report a Bug": "Hata Bildir",
"Precipitation": "Yağış",
"Crosshair": "Nişangah",
"Model set to %1": "Model %1 olarak ayarlandı",
"Rows": "Satırlar",
"Top": "Üst",
"Long break": "Uzun mola",
"Superpaste": "Süper yapıştır",
"Screen round corner": "Ekran köşe yuvarlama",
"Online | Google's model\nNewer model that's slower than its predecessor but should deliver higher quality answers": "Çevrimiçi | Google'ın modeli\nÖncekinden daha yavaş ama daha kaliteli yanıtlar vermesi gereken yeni model",
"Rainbow": "Gökkuşağı",
"Weeb": "Weeb",
"Large language models": "Büyük dil modelleri",
"Online models disallowed\n\nControlled by `policies.ai` config option": "Çevrimiçi modellere izin verilmiyor\n\n`policies.ai` yapılandırma seçeneği ile kontrol edilir",
"Policies": "Politikalar",
"Temperature must be between 0 and 2": "Sıcaklık 0 ile 2 arasında olmalıdır",
"Automatic suspend": "Otomatik askıya alma",
"Extra wallpaper zoom (%)": "Ekstra duvar kağıdı yakınlaştırması (%)",
"GitHub": "GitHub",
"%1 | Right-click to configure": "%1 | Yapılandırmak için sağ tıklayın",
"**Pricing**: Free tier available with limited rates. See https://docs.github.com/en/billing/concepts/product-billing/github-models\n\n**Instructions**: Generate a GitHub personal access token with Models permission, then set as API key here\n\n**Note**: To use this you will have to set the temperature parameter to 1": "**Fiyatlandırma**: Sınırlı kullanımlı ücretsiz katman mevcut. Bakınız https://docs.github.com/en/billing/concepts/product-billing/github-models\n\n**Talimatlar**: Models izniyle bir GitHub kişisel erişim jetonu oluşturun, ardından buraya API anahtarı olarak ayarlayın\n\n**Not**: Bunu kullanmak için sıcaklık parametresini 1'e ayarlamanız gerekecek",
"Edit directory": "Dizini düzenle",
"Action": "Eylem",
"Search": "Ara",
"Tip: right-clicking a group\nalso expands it": "İpucu: bir gruba sağ tıklamak\naynı zamanda genişletir",
"Bar": "Çubuk",
"Show regions of potential interest": "Potansiyel ilgi alanlarını göster",
"Clipboard": "Pano",
"Stopwatch": "Kronometre",
"Enter text to translate...": "Çevrilecek metni girin...",
"App": "Uygulama",
"Sides": "Yanlar",
"No active player": "Aktif oynatıcı yok",
"Not all options are available in this app. You should also check the config file by hitting the \"Config file\" button on the topleft corner or opening %1 manually.": "Bu uygulamada tüm seçenekler mevcut değil. Sol üst köşedeki \"Yapılandırma dosyası\" düğmesine basarak veya %1'i manuel olarak açarak yapılandırma dosyasını da kontrol etmelisiniz.",
"There might be a download in progress": "Devam eden bir indirme olabilir",
"Math result": "Matematik sonucu",
"Fidelity": "Sadakat",
"Prefixes": "Önekler",
"Terminal": "Terminal",
"Incorrect password": "Yanlış şifre",
"Line-separated": "Satır ayrılmış",
"Always": "Her zaman",
"☕ Break: %1 minutes": "☕ Mola: %1 dakika",
"Depends on sidebars": "Kenar çubuklarına bağlı",
"Tool set to: %1": "Araç şu şekilde ayarlandı: %1",
"Save chat": "Sohbeti kaydet",
"Crosshair overlay": "Nişangah bindirmesi",
"Keybinds": "Tuş atamaları",
"Launch": "Başlat",
"Could be better if you make a ton of typos,\nbut results can be weird and might not work with acronyms\n(e.g. \"GIMP\" might not give you the paint program)": "Çok fazla yazım hatası yaparsanız daha iyi olabilir,\nancak sonuçlar garip olabilir ve kısaltmalarla çalışmayabilir\n(örn. \"GIMP\" size boyama programını vermeyebilir)",
"Choose model": "Model seç",
"Base URL": "Temel URL",
"Float": "Yüzen",
"Wallpaper parallax": "Duvar kağıdı paralaks",
"Invalid arguments. Must provide `command`.": "Geçersiz argümanlar. `command` sağlanmalıdır.",
"Fully charged": "Tamamen şarj oldu",
"Earbang protection": "Kulak patlama koruması",
"Low warning": "Düşük uyarısı",
"Advanced": "Gelişmiş",
"Scroll to change brightness": "Parlaklığı değiştirmek için kaydırın",
"Loaded the following system prompt\n\n---\n\n%1": "Aşağıdaki sistem komutu yüklendi\n\n---\n\n%1",
"Show next time": "Bir dahaki sefere göster",
"Current tool: %1\nSet it with %2tool TOOL": "Mevcut araç: %1\n%2tool ARAÇ ile ayarlayın",
"Unread indicator: show count": "Okunmamış göstergesi: sayıyı göster",
"Press Super+G to toggle appearance": "Görünümü değiştirmek için Super+G'ye basın",
"That didn't work. Tips:\n- Check your tags and NSFW settings\n- If you don't have a tag in mind, type a page number": "Bu işe yaramadı. İpuçları:\n- Etiketlerinizi ve NSFW ayarlarınızı kontrol edin\n- Aklınızda bir etiket yoksa, bir sayfa numarası yazın",
"Dots": "Noktalar",
"Cloudflare WARP (1.1.1.1)": "Cloudflare WARP (1.1.1.1)",
"Volume mixer": "Ses karıştırıcı",
"Config file": "config dosyası",
"API key set for %1": "%1 için API anahtarı ayarlandı",
"Online via %1 | %2's model": "%1 üzerinden çevrimiçi | %2'nin modeli",
"Shell command": "Shell komutu",
"Such regions 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.": "Bu tür bölgeler görseller veya ekranın içerme özelliği olan bölümleri olabilir.\nHer zaman doğru olmayabilir.\nBu, yerel olarak çalıştırılan bir görüntü işleme algoritmasıyla yapılır ve AI kullanılmaz.",
"Reload Hyprland & Quickshell": "Hyprland ve Quickshell'i Yeniden Yükle",
"Resources": "Kaynaklar",
"Brightness": "Parlaklık",
"Unknown": "Bilinmeyen",
"Polling interval (ms)": "Yoklama aralığı (ms)",
"Lock": "Kilitle",
"Thinking": "Düşünüyor",
"Approve": "Onayla",
"Unfinished": "Tamamlanmamış",
"Random: Konachan": "Rastgele: Konachan",
"Connected": "Bağlandı",
"Wallpaper safety enforced": "Duvar kağıdı güvenliği uygulandı",
"Invalid arguments. Must provide `key` and `value`.": "Geçersiz argümanlar. `key` ve `value` sağlanmalıdır.",
"24h": "24s",
"Allows you to open sidebars by clicking or hovering screen corners regardless of bar position": "Çubuk konumundan bağımsız olarak ekran köşelerine tıklayarak veya üzerine gelerek kenar çubuklarını açmanıza olanak tanır",
"Bar style": "Çubuk stili",
"Load:": "Yük:",
"Open file link": "Dosya bağlantısını aç",
"Ignored if terminal theming is not enabled": "Terminal temalaması etkinleştirilmemişse yok sayılır",
"Shutdown": "Kapat",
"Hour marks": "Saat işaretleri",
"Random osu! seasonal background\nImage is saved to ~/Pictures/Wallpapers": "Rastgele osu! mevsimlik arka plan\nGörsel ~/Resimler/Wallpapers dizinine kaydedilir",
"Online | Google's model\nFast, can perform searches for up-to-date information": "Çevrimiçi | Google'ın modeli\nHızlı, güncel bilgi için arama yapabilir",
"Current model: %1\nSet it with %2model MODEL": "Mevcut model: %1\n%2model MODEL ile ayarlayın",
"Select input device": "Giriş cihazını seç",
"Connect to Wi-Fi": "Wi-Fi'ye bağlan",
"... and %1 more": "... ve %1 daha fazla",
"Cookie clock settings": "Kurabiye saat ayarları",
"Brightness and volume": "Parlaklık ve ses",
"Choose file": "Dosya seç",
"Invalid model. Supported: \n```": "Geçersiz model. Desteklenenler: \n```",
"Task Manager": "Görev Yöneticisi",
"Charging:": "Şarj oluyor:",
"Illegal increment": "Geçersiz artış",
"Total:": "Toplam:",
"or": "veya",
"Battery": "Pil",
"Timeout duration (if not defined by notification) (ms)": "Zaman aşımı süresi (bildirim tarafından tanımlanmamışsa) (ms)",
"Cancel": "İptal",
"Locked": "Kilitli",
"Temperature: %1": "Sıcaklık: %1",
"Hover to trigger": "Tetiklemek için üzerine gelin",
"Command rejected by user": "Komut kullanıcı tarafından reddedildi",
"User agent (for services that require it)": "Kullanıcı aracısı (gerektiren hizmetler için)",
"Saved to %1": "%1'e kaydedildi",
"Emojis": "Emoji'ler",
"Color generation": "Renk oluşturma",
"Welcome app": "Hoş geldiniz uygulaması",
"Humidity": "Nem",
"Page %1": "Sayfa %1",
"Feels like %1": "Hissedilen %1",
"Distro": "Dağıtım",
"Transparency": "Şeffaflık",
"%1 • %2 tasks": "%1 • %2 görev",
"Markdown test": "Markdown testi",
"Invalid tool. Supported tools:\n- %1": "Geçersiz araç. Desteklenen araçlar:\n- %1",
"No notifications": "Bildirim yok",
"The hentai one | Great quantity, a lot of NSFW, quality varies wildly": "Hentai olan | Çok miktarda, çok NSFW, kalite çok değişkendir",
"Bluetooth": "Bluetooth",
"Resume": "Devam Et",
"Work safety": "İş güvenliği",
"Temperature\nChange with /temp VALUE": "Sıcaklık\n/temp DEĞER ile değiştirin",
"Terminal: Foreground boost (%)": "Terminal: Ön plan artışı (%)",
"Night Light | Right-click to toggle Auto mode": "Gece Işığı | Otomatik modu değiştirmek için sağ tıklayın",
"Closet": "Dolap",
"Yes": "Evet",
"Columns": "Sütunlar",
"To set an API key, pass it with the %4 command\n\nTo view the key, pass \"get\" with the command<br/>\n\n### For %1:\n\n**Link**: %2\n\n%3": "API anahtarı ayarlamak için %4 komutuyla birlikte iletin\n\nAnahtarı görüntülemek için komutla birlikte \"get\" iletin<br/>\n\n### %1 için:\n\n**Bağlantı**: %2\n\n%3",
"Kill conflicting programs?": "Çakışan programlar sonlandırılsın mı?",
"For storing API keys and other sensitive information": "API anahtarlarını ve diğer hassas bilgileri saklamak için",
"Reject": "Reddet",
"Set API key": "API anahtarını ayarla",
". Notes for Zerochan:\n- You must enter a color\n- Set your zerochan username in `sidebar.booru.zerochan.username` config option. You [might be banned for not doing so](https://www.zerochan.net/api#:~:text=The%20request%20may%20still%20be%20completed%20successfully%20without%20this%20custom%20header%2C%20but%20your%20project%20may%20be%20banned%20for%20being%20anonymous.)!": ". Zerochan için notlar:\n- Bir renk girmelisiniz\n- `sidebar.booru.zerochan.username` yapılandırma seçeneğinde zerochan kullanıcı adınızı ayarlayın. [Bunu yapmazsanız yasaklanabilirsiniz](https://www.zerochan.net/api#:~:text=The%20request%20may%20still%20be%20completed%20successfully%20without%20this%20custom%20header%2C%20but%20your%20project%20may%20be%20banned%20for%20being%20anonymous.)!",
"Content": "İçerik",
"Pomodoro": "Pomodoro",
"Vertical": "Dikey",
"Pick a wallpaper": "Bir duvar kağıdı seçin",
"Load chat from %1": "%1'den sohbet yükle",
"Launch on startup": "Başlangıçta başlat",
"Add": "Ekle",
"Style: general": "Stil: genel",
"Use Levenshtein distance-based algorithm instead of fuzzy": "Bulanık yerine Levenshtein mesafe tabanlı algoritma kullan",
"Shell & utilities theming must also be enabled": "Shell ve yardımcı program temalaması da etkinleştirilmelidir",
"Workspace": "Çalışma alanı",
"Translator": "Çevirmen",
"Free:": "Boş:",
"🌿 Long break: %1 minutes": "🌿 Uzun mola: %1 dakika",
"Value scroll": "Değer kaydırma",
"Bar position": "Çubuk konumu",
"Language": "Dil",
"Current API endpoint: %1\nSet it with %2mode PROVIDER": "Mevcut API uç noktası: %1\n%2mode SAĞLAYICI ile ayarlayın",
"Remember that on most devices one can always hold the power button to force shutdown\nThis only makes it a tiny bit harder for accidents to happen": "Çoğu cihazda güç düğmesini basılı tutarak zorla kapatma yapılabileceğini unutmayın\nBu sadece kazaların olmasını biraz daha zorlaştırır",
"AI": "AI",
"Task description": "Görev açıklaması",
"Add task": "Görev ekle",
"Donate": "Bağış Yap",
"Disable NSFW content": "NSFW içeriği devre dışı bırak",
"Set the system prompt for the model.": "Model için sistem komutunu ayarlayın.",
"Done": "Tamamlandı",
"Focus": "Odaklan",
"Open the shell config file.\nIf the button doesn't work or doesn't open in your favorite editor,\nyou can manually open ~/.config/illogical-impulse/config.json": "Shell yapılandırma dosyasını açın.\nDüğme çalışmıyorsa veya favori düzenleyicinizde açılmıyorsa,\n~/.config/illogical-impulse/config.json dosyasını manuel olarak açabilirsiniz",
"View Markdown source": "Markdown kaynağını görüntüle",
"Border": "Kenarlık",
"Temperature set to %1": "Sıcaklık %1 olarak ayarlandı",
"Online | Google's model\nGoogle's state-of-the-art multipurpose model that excels at coding and complex reasoning tasks.": "Çevrimiçi | Google'ın modeli\nGoogle'ın kodlama ve karmaşık akıl yürütme görevlerinde mükemmel olan son teknoloji çok amaçlı modeli.",
"Message the model... \"%1\" for commands": "Modele mesaj gönderin... komutlar için \"%1\"",
"Translation goes here...": "Çeviri buraya gelir...",
"When enabled keeps the content of the right sidebar loaded to reduce the delay when opening,\nat the cost of around 15MB of consistent RAM usage. Delay significance depends on your system's performance.\nUsing a custom kernel like linux-cachyos might help": "Etkinleştirildiğinde açarken gecikmeyi azaltmak için sağ kenar çubuğunun içeriğini yüklü tutar,\nyaklaşık 15MB tutarlı RAM kullanımı pahasına. Gecikme önemi sisteminizin performansına bağlıdır.\nlinux-cachyos gibi özel bir çekirdek kullanmak yardımcı olabilir",
"For desktop wallpapers | Good quality": "Masaüstü duvar kağıtları için | İyi kalite",
"🔴 Focus: %1 minutes": "🔴 Odaklan: %1 dakika",
"The current system prompt is\n\n---\n\n%1": "Mevcut sistem komutu\n\n---\n\n%1",
"About": "Hakkında",
"Quick": "Hızlı",
"General": "Genel",
"UV Index": "UV İndeksi",
"Force dark mode in terminal": "Terminalde koyu modu zorla",
"Drag or click a region • LMB: Copy • RMB: Edit": "Bir bölgeyi sürükleyin veya tıklayın • Sol Tık: Kopyala • Sağ Tık: Düzenle",
"%1 characters": "%1 karakter",
"Cloudflare WARP": "Cloudflare WARP",
"**Pricing**: free. Data used for training.\n\n**Instructions**: Log into Google account, allow AI Studio to create Google Cloud project or whatever it asks, go back and click Get API key": "**Fiyatlandırma**: ücretsiz. Veriler eğitim için kullanılır.\n\n**Talimatlar**: Google hesabına giriş yapın, AI Studio'nun Google Cloud projesi oluşturmasına veya her ne istiyorsa izin verin, geri dönün ve Get API key'e tıklayın",
"Monochrome": "Monokrom",
"Details": "Detaylar",
"Issues": "Sorunlar",
"Keyboard toggle": "Klavye geçişi",
"Might look ass. Unsupported.": "Kötü görünebilir. Desteklenmiyor.",
"Download": "İndir",
"%1 does not require an API key": "%1 API anahtarı gerektirmiyor",
"Style & wallpaper": "Stil ve duvar kağıdı",
"Second precision": "Saniye hassasiyeti",
"Group style": "Grup stili",
"Break": "Mola",
"Run": "Çalıştır",
"Enjoy! You can reopen the welcome app any time with <tt>Super+Shift+Alt+/</tt>. To open the settings app, hit <tt>Super+I</tt>": "Keyfinize bakın! Hoş geldiniz uygulamasını istediğiniz zaman <tt>Super+Shift+Alt+/</tt> ile yeniden açabilirsiniz. Ayarlar uygulamasını açmak için <tt>Super+I</tt> tuşuna basın",
"Interface Language": "Arayüz Dili",
"Game mode": "Oyun modu",
"Usage: %1save CHAT_NAME": "Kullanım: %1save SOHBET_ADI",
"Thin": "İnce",
"Light": "Açık",
"When not fullscreen": "Tam ekran değilken",
"Commands, edit configs, search.\nTakes an extra turn to switch to search mode if that's needed": "Komutlar, yapılandırmaları düzenle, ara.\nGerekirse arama moduna geçmek için ekstra bir tur alır",
"Privacy Policy": "Gizlilik Politikası",
"Timeout (ms)": "Zaman aşımı (ms)",
"Allow NSFW content": "NSFW içeriğine izin ver",
"Edit": "Düzenle",
"Digits in the middle": "Ortada rakamlar",
"Online | Google's model\nA Gemini 2.5 Flash model optimized for cost-efficiency and high throughput.": "Çevrimiçi | Google'ın modeli\nMaliyet verimliliği ve yüksek verim için optimize edilmiş bir Gemini 2.5 Flash modeli.",
"Weather Service": "Hava Durumu Servisi",
"Background": "Arka plan",
"Pick random from this folder": "Bu klasörden rastgele seç",
"Pressure": "Basınç",
"Save": "Kaydet",
"Run command": "Komutu çalıştır",
"Time to empty:": "Boşalmasına kalan süre:",
"Place at bottom": "Alta yerleştir",
"Switched to search mode. Continue with the user's request.": "Arama moduna geçildi. Kullanıcının isteğiyle devam edin.",
"Performance Profile toggle": "Performans Profili geçişi",
"Sidebars": "Kenar çubukları",
"Usage: %1load CHAT_NAME": "Kullanım: %1load SOHBET_ADI",
"Auto styling with Gemini": "Gemini ile otomatik stil",
"Simple digital": "Basit dijital",
"No API key set for %1": "%1 için API anahtarı ayarlanmadı",
"Enter tags, or \"%1\" for commands": "Etiketleri girin veya komutlar için \"%1\"",
"%1 queries pending": "%1 sorgu bekliyor",
"Discussions": "Tartışmalar",
"Tray": "Tepsi",
"Numbers": "Numaralar",
"Intelligence": "Zeka",
"Open network portal": "Ağ portalını aç",
"<i>No further instruction provided</i>": "<i>Başka talimat verilmedi</i>",
"Language not listed or incomplete translations?\nYou can choose to generate translations for it with Gemini.\n1. Open the left sidebar with Super+A, set model to Gemini (if it isn't already)\n2. Type /key, hit Enter and follow the instructions\n3. Type /key YOUR_API_KEY\n4. Type the locale of your language below and press Generate": "Dil listede yok veya çeviriler eksik mi?\nGemini ile çeviriler oluşturmayı seçebilirsiniz.\n1. Super+A ile sol kenar çubuğunu açın, modeli Gemini olarak ayarlayın (değilse)\n2. /key yazın, Enter'a basın ve talimatları izleyin\n3. /key API_ANAHTARINIZ yazın\n4. Dilinizin yerel ayarını aşağıya yazın ve Oluştur'a basın",
"Locale code, e.g. fr_FR, de_DE, zh_CN...": "Yerel kod, örn. tr_TR, fr_FR, de_DE, zh_CN...",
"Select language": "Dil seçin",
"Generate translation with Gemini": "Gemini ile çeviri oluştur",
"Generating...\nDon't close this window!": "Oluşturuluyor...\nBu pencereyi kapatmayın!",
"Generate\nTypically takes 2 minutes": "Oluştur\nGenellikle 2 dakika sürer",
"Use system file picker": "Sistem dosya seçiciyi kullan",
"Wallpaper selector": "Duvar kağıdı seçici",
"but force at absolute corner": "ancak mutlak köşede zorla",
"When the previous option is off and this is on,\nyou can still hover the corner's end to open sidebar,\nand the remaining area can be used for volume/brightness scroll": "Önceki seçenek kapalı ve bu açık olduğunda,\nkenar çubuğunu açmak için köşenin ucunun üzerine gelebilirsiniz,\nve kalan alan ses/parlaklık kaydırması için kullanılabilir",
"Copy path": "Yolu kopyala",
"Windows": "Pencereler",
"Regenerate": "Yeniden oluştur",
"Microphone": "Mikrofon",
"Unmuted": "Sessiz değil",
"System sound": "Sistem sesi",
"Enable now": "Şimdi etkinleştir",
"Night Light": "Gece Işığı",
"Show aim lines": "Nişan çizgilerini göster",
"Why this is cool:\nFor non-0 values, it won't trigger when you reach the\nscreen corner along the horizontal edge, but it will when\nyou do along the vertical edge": "Bu neden havalı:\n0 olmayan değerler için, yatay kenar boyunca\nekran köşesine ulaştığınızda tetiklenmez, ancak\ndikey kenar boyunca ulaştığınızda tetiklenir",
"Please charge!\nAutomatic suspend triggers at %1%": "Lütfen şarj edin!\nOtomatik askıya alma %1%'de tetikleniyor",
"Example use case: eroge on one workspace, dark Discord window on another": "Örnek kullanım durumu: bir çalışma alanında eroge, diğerinde koyu Discord penceresi",
"Couldn't recognize music": "Müzik tanınamadı",
"Automatic": "Otomatik",
"Hint target regions": "Hedef bölgeleri işaretle",
"Devices": "Cihazlar",
"Eye protection": "Göz koruması",
"Japanese": "Japonca",
"Layers": "Katmanlar",
"Listening...": "Dinleniyor...",
"LMB to enable/disable\nRMB to toggle size\nScroll to swap position": "Etkinleştirmek/devre dışı bırakmak için Sol Tık\nBoyutu değiştirmek için Sağ Tık\nKonumu değiştirmek için kaydırın",
"Identify Music": "Müziği Tanı",
"Quick toggles": "Hızlı geçişler",
"Hide sussy/anime wallpapers": "Şüpheli/anime duvar kağıtlarını gizle",
"Android": "Android",
"Show": "Göster",
"Muted": "Sessiz",
"Audio input | Right-click for volume mixer & device selector": "Ses girişi | Ses karıştırıcı ve cihaz seçici için sağ tıklayın",
"Region selector (screen snipping/Google Lens)": "Bölge seçici (ekran kırpma/Google Lens)",
"Total duration timeout (s)": "Toplam süre zaman aşımı (s)",
"Music Recognition": "Müzik Tanıma",
"Night Light | Right-click to configure": "Gece Işığı | Yapılandırmak için sağ tıklayın",
"Anti-flashbang (experimental)": "Parlama önleyici (deneysel)",
"Digital clock settings": "Dijital saat ayarları",
"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.": "Görseller veya ekranın içerme özelliği olan bölümleri olabilir.\nHer zaman doğru olmayabilir.\nBu, yerel olarak çalıştırılan bir görüntü işleme algoritmasıyla yapılır ve AI kullanılmaz.",
"Polling interval (m)": "Yoklama aralığı (d)",
"Inactive": "İnaktif",
"Authentication": "Kimlik Doğrulama",
"Full warning": "Tam uyarı",
"Power Profile": "Güç Profili",
"Content region": "İçerik bölgesi",
"Internet": "İnternet",
"Record": "Kaydet",
"Circle selection": "Daire seçimi",
"Edit quick toggles": "Hızlı geçişleri düzenle",
"Virtual Keyboard": "Sanal Klavye",
"Music Recognized": "Müzik Tanındı",
"EasyEffects": "EasyEffects",
"Make sure you have songrec installed": "songrec'in kurulu olduğundan emin olun",
"Dark Mode": "Koyu Mod",
"No device": "Cihaz yok",
"Animate time change": "Zaman değişimini canlandır",
"It may take a few seconds to update": "Güncellenme birkaç saniye sürebilir",
"Polling interval (s)": "Yoklama aralığı (s)",
"Perhaps what you're listening to is too niche": "Belki de dinlediğiniz şey çok niş",
"Fahrenheit unit": "Fahrenheit birimi",
"Sliders": "Kaydırıcılar",
"Roman": "Romen",
"Number style": "Numara stili",
"Intensity": "Yoğunluk",
"Google Lens": "Google Lens",
"Circle": "Daire",
"Hide clipboard images copied from sussy sources": "Şüpheli kaynaklardan kopyalanan pano görsellerini gizle",
"Scroll to Bottom": "Alta Kaydır",
"Enabled": "Etkin",
"Nothing": "Hiçbir şey",
"Audio input": "Ses girişi",
"with vertical offset": "dikey ofseti ile",
"Padding": "Dolgu",
"Please unplug the charger": "Lütfen şarj cihazını çıkarın",
"Show notifications": "Bildirimleri göster",
"Path copied": "Yol kopyalandı",
"On-screen keyboard": "Ekran klavyesi",
"City name": "Şehir adı",
"Click to cycle through power profiles": "Güç profilleri arasında geçiş yapmak için tıklayın",
"Recognize music | Right-click to toggle source": "Müziği tanı | Kaynağı değiştirmek için sağ tıklayın",
"Use old sine wave cookie implementation": "Eski sinüs dalgası kurabiye uygulamasını kullan",
"Rectangular selection": "Dikdörtgen seçim",
"Audio output": "Ses çıkışı",
"Applications": "Uygulamalar",
"Circle to Search": "Arama İçin Daire",
"Audio output | Right-click for volume mixer & device selector": "Ses çıkışı | Ses karıştırıcı ve cihaz seçici için sağ tıklayın",
"Enable GPS based location": "GPS tabanlı konumu etkinleştir",
"You'll need to enter your Gemini API key first.\nType /key on the sidebar for instructions.": "Önce Gemini API anahtarınızı girmeniz gerekecek.\nTalimatlar için kenar çubuğunda /key yazın.",
"Sounds": "Sesler",
"Active": "Aktif",
"Keep awake": "Uyanık tut",
"Auto,": "Otomatik,",
"Normal": "Normal",
"Force hover open at absolute corner": "Mutlak köşede üzerine gelinerek açmayı zorla",
"Open the shell config file\nAlternatively right-click to copy path": "Shell yapılandırma dosyasını açın\nAlternatif olarak yolu kopyalamak için sağ tıklayın",
"Recognize music": "Müziği tanı",
"Stroke width": "Çizgi genişliği",
"Use varying shapes for password characters": "Şifre karakterleri için değişen şekiller kullan",
"Battery full": "Pil dolu"
}
+3
View File
@@ -0,0 +1,3 @@
/*/*.tar.*
/*/pkg/
/*/src/
+26
View File
@@ -0,0 +1,26 @@
# Install scripts for Fedora Linux
Note:
- The scripts here are **not** meant to be executed directly.
- This folder should reflect the equivalents of `/sdata/dist-arch/` but under Fedora.
- **When `/sdata/dist-arch/` is newer than this folder, an update on this folder is very likely needed.**
- Useful link: [Commit history on sdata/dist-arch/](https://github.com/end-4/dots-hyprland/commits/main/sdata/dist-arch)
- See also [Install scripts | illogical-impulse](https://ii.clsty.link/en/dev/inst-script/)
## Contributors
- Author: [ririko6z](https://github.com/ririko6z)
## Tested
- It has been tested on Fedora 43 (KDE Plasma Desktop Edition) on the `x86_64` platform.
## Post installation
- Fix the issue of the right column crashing when clicking the `Details` button in Wi-Fi mode. Edit this file: `~/.config/illogical-impulse/config.json`
```diff
@@ 44,3 44,3 @@
- "apps": {
- "bluetooth": "kcmshell6 kcm_bluetooth",
- "network": "kitty -1 fish -c nmtui",
+ "apps": {
+ "bluetooth": "kcmshell6 kcm_bluetooth",
+ "network": "plasmawindowed org.kde.plasma.networkmanagement",
```
@@ -0,0 +1,36 @@
Name: Bibata-Modern-Classic
Version: 2.0.7
Release: %autorelease
Summary: Open source, compact, and material designed cursor set.
License: GPL-3.0
URL: https://github.com/ful1e5/Bibata_Cursor
Source0: %{name}.tar.xz
BuildArch: noarch
%description
Open source, compact, and material designed cursor set.
%prep
wget --content-disposition -q -N -P %{_sourcedir} %{url}/releases/download/v%{version}/Bibata-Modern-Classic.tar.xz
wget -q -O %{_buildrootdir}/LICENSE %{url}/raw/refs/heads/main/LICENSE
%setup -q -n %{name}
%build
:
%install
install -d -m 0755 %{buildroot}%{_iconsdir}/Bibata-Modern-Classic
cp -r * %{buildroot}%{_iconsdir}/Bibata-Modern-Classic
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 %{_buildrootdir}/LICENSE %{buildroot}%{_licensedir}/%{name}/
%files
%{_iconsdir}/Bibata-Modern-Classic
%license %{_licensedir}/%{name}/LICENSE
%changelog
%autochangelog
@@ -0,0 +1,42 @@
Name: JetBrainsMonoNerdFont-Regular
Version: 1.2
Release: %autorelease
Summary: JetBrainsMonoNerdFonts (TrueType Outlines) (Regulear)
License: MIT
URL: https://github.com/Zhaopudark/JetBrainsMonoNerdFonts
Source0: %{name}
BuildRequires: fonts-rpm-macros
BuildArch: noarch
%description
An auto-updated compiling version of JetBrains Mono that has been patched with Nerd Fonts.
%prep
wget --content-disposition -q -N -P %{_sourcedir} %{url}/releases/download/v%{version}/JetBrainsMonoNerdFont-Regular-v%{version}.ttf
wget -q -P %{_sourcedir} %{url}/raw/refs/heads/main/LICENSE
%build
:
%install
install -d -m 0755 %{buildroot}%{_fontdir}
install -m 0644 %{_sourcedir}/JetBrainsMonoNerdFont*ttf %{buildroot}%{_fontdir}
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 %{_sourcedir}/LICENSE %{buildroot}%{_licensedir}/%{name}/
%post
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%postun
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%files
%{_fontdir}/JetBrainsMonoNerdFont*ttf
%license %{_licensedir}/%{name}/LICENSE
%changelog
%autochangelog
+50
View File
@@ -0,0 +1,50 @@
%global commit0 0e3707f6dafebb121d98b53c64364d16fefe481d
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%global bumpver 100
Name: MicroTeX
Version: 0.0.1%{?bumpver:^%{bumpver}.git%{shortcommit0}}
Release: %autorelease
Summary: A dynamic, cross-platform, and embeddable LaTeX rendering library
License: MIT
URL: https://github.com/NanoMichael/MicroTeX
Source0: %{name}-%{shortcommit0}.tar.gz
BuildRequires: gcc-c++ cmake
BuildRequires: pkgconfig(tinyxml2)
BuildRequires: gtkmm3.0-devel gtksourceviewmm3-devel cairomm-devel
%description
MicroTeX is a library for rendering LaTeX mathematical formulas, supporting multiple backends
such as GTK+, Qt, and Skia. It provides both library components and demo applications for
testing LaTeX rendering.
%prep
curl -fsSL --retry 3 \
https://codeload.github.com/NanoMichael/MicroTeX/tar.gz/%{shortcommit0} \
-o %{_sourcedir}/%{name}-%{shortcommit0}.tar.gz
%setup -q -n %{name}-%{shortcommit0}
%build
mkdir -p build
cd build
cmake ..
make -j$(nproc)
%install
mkdir -p %{buildroot}/opt/MicroTeX
cp build/LaTeX %{buildroot}/opt/MicroTeX/
cp -r build/res %{buildroot}/opt/MicroTeX/
install -Dpm 0644 LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE
install -Dpm 0644 res/greek/LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE-greek
install -Dpm 0644 res/cyrillic/LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE-cyrillic
%files
/opt/MicroTeX/
%license %{_licensedir}/%{name}/
%changelog
%autochangelog
+38
View File
@@ -0,0 +1,38 @@
Name: breeze-plus
Version: 6.19.0
Release: %autorelease
Summary: Breeze theme with additional icons
License: LGPL-2.1
URL: https://github.com/mjkim0727/breeze-plus
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch
%description
Breeze icon theme with additional icons for applications not covered by the
official Breeze theme. Includes icons for Wine, third-party apps, and more.
%prep
wget --content-disposition -q -N -P %{_sourcedir} %{url}/archive/refs/tags/%{version}.tar.gz
%setup -q
%build
:
%install
install -d -m 0755 %{buildroot}%{_iconsdir}/breeze-plus
cp -r src/breeze-plus %{buildroot}%{_iconsdir}/
cp -r src/breeze-plus-dark %{buildroot}%{_iconsdir}/
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 LICENSE %{buildroot}%{_licensedir}/%{name}/
%files
%{_iconsdir}/breeze-plus/
%{_iconsdir}/breeze-plus-dark/
%license %{_licensedir}/%{name}/LICENSE
%changelog
%autochangelog
@@ -0,0 +1,44 @@
Name: otf-SpaceGrotesk
Version: 2.0.0
Release: %autorelease
Summary: Space Grotesk: a proportional variant of the original fixed-width Space Mono family
License: OFL-1.1
URL: https://github.com/floriankarsten/space-grotesk
Source0: %{name}-%{version}
BuildRequires: fonts-rpm-macros
BuildArch: noarch
%description
Space Grotesk is a proportional sans-serif typeface variant based on Colophon Foundry's fixed-width Space Mono family (2016).
Originally designed by Florian Karsten in 2018,
Space Grotesk retains the monospace's idiosyncratic details while optimizing for improved readability at non-display sizes.
%prep
wget --content-disposition -q -N -P %{_sourcedir} %{url}/releases/download/%{version}/SpaceGrotesk-%{version}.zip
unzip %{_sourcedir}/SpaceGrotesk-%{version}.zip
%build
:
%install
install -d -m 0755 %{buildroot}%{_fontdir}
install -m 0644 %{_buildrootdir}/SpaceGrotesk-%{version}/otf/SpaceGrotesk*otf %{buildroot}%{_fontdir}
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 %{_buildrootdir}/SpaceGrotesk-%{version}/OFL.txt %{buildroot}%{_licensedir}/%{name}/
%post
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%postun
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%files
%{_fontdir}/SpaceGrotesk*otf
%license %{_licensedir}/%{name}/OFL.txt
%changelog
%autochangelog
+46
View File
@@ -0,0 +1,46 @@
%global commit0 1f3fb39d6449eefa880543f109f33ede0cd4064f
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%global bumpver 100
Name: ttf-gabarito
Version: 1.000%{?bumpver:^%{bumpver}.git%{shortcommit0}}
Release: %autorelease
Summary: Gabarito Font
License: OFL-1.1
URL: https://github.com/naipefoundry/gabarito
Source0: gabarito-%{shortcommit0}.tar.gz
BuildRequires: fonts-rpm-macros
BuildArch: noarch
%description
Gabarito is a light-hearted geometric sans typeface with 6 weights ranging from Regular to Black originally designed for an online learning platform in Brazil.
%prep
wget --content-disposition -q -N -P %{_sourcedir} https://codeload.github.com/naipefoundry/gabarito/tar.gz/%{shortcommit0}
%setup -q -n gabarito-%{shortcommit0}
%build
:
%install
install -d -m 0755 %{buildroot}%{_fontdir}
install -m 0644 fonts/ttf/Gabarito*.ttf %{buildroot}%{_fontdir}
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 OFL.txt %{buildroot}%{_licensedir}/%{name}/
%post
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%postun
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%files
%{_fontdir}/Gabarito*ttf
%license %{_licensedir}/%{name}/OFL.txt
%changelog
%autochangelog
@@ -0,0 +1,42 @@
Name: ttf-material-symbols-variable
Version: 4.0.0
Release: %autorelease
Summary: Material Design icons by Google (Material Symbols)
License: Apache-2.0
URL: https://github.com/google/material-design-icons
Source0: %{name}-%{version}
BuildRequires: fonts-rpm-macros
BuildArch: noarch
%description
Google Material Symbols Rounded
%prep
wget --content-disposition -q -N -P %{_sourcedir} %{url}/raw/refs/heads/master/variablefont/MaterialSymbolsRounded%5BFILL,GRAD,opsz,wght%5D.ttf
wget -q -N -P %{_sourcedir} %{url}/raw/refs/heads/master/LICENSE
%build
:
%install
install -d -m 0755 %{buildroot}%{_fontdir}/variable-fonts
install -m 0644 %{_sourcedir}/MaterialSymbolsRounded*ttf %{buildroot}%{_fontdir}/variable-fonts/
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 %{_sourcedir}/LICENSE %{buildroot}%{_licensedir}/%{name}/
%post
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%postun
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%files
%{_fontdir}/variable-fonts/MaterialSymbolsRounded*ttf
%license %{_licensedir}/%{name}/LICENSE
%changelog
%autochangelog
@@ -0,0 +1,42 @@
Name: ttf-roboto-flex
Version: 3.200
Release: %autorelease
Summary: Roboto Flex
License: OFL-1.1
URL: https://github.com/googlefonts/roboto-flex
Source0: %{name}
BuildRequires: fonts-rpm-macros
BuildArch: noarch
%description
:
%prep
wget --content-disposition -q -N -P %{_sourcedir} %{url}/raw/refs/heads/main/fonts/RobotoFlex%5BGRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,opsz,slnt,wdth,wght%5D.ttf
wget -q -O %{_sourcedir}/OFL.txt %{url}/raw/refs/heads/main/OFL.txt
%build
:
%install
install -d -m 0755 %{buildroot}%{_fontdir}
install -m 0644 %{_sourcedir}/RobotoFlex*ttf %{buildroot}%{_fontdir}
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 %{_sourcedir}/OFL.txt %{buildroot}%{_licensedir}/%{name}/
%post
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%postun
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%files
%{_fontdir}/RobotoFlex*ttf
%license %{_licensedir}/%{name}/OFL.txt
%changelog
%autochangelog
@@ -0,0 +1,46 @@
%global commit0 e337a5f69a9bea30e58d05bd40184d79cc099628
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%global bumpver 100
Name: ttf-rubik-variable
Version: 1.0%{?bumpver:^%{bumpver}.git%{shortcommit0}}
Release: %autorelease
Summary: Rubik fonts variable
License: OFL-1.1
URL: https://github.com/googlefonts/rubik
Source0: rubik-%{shortcommit0}.tar.gz
BuildRequires: fonts-rpm-macros
BuildArch: noarch
%description
:
%prep
wget --content-disposition -q -N -P %{_sourcedir} https://codeload.github.com/googlefonts/rubik/tar.gz/%{shortcommit0}
%setup -q -n rubik-%{shortcommit0}
%build
:
%install
install -d -m 0755 %{buildroot}%{_fontdir}/variable-fonts
install -m 0644 fonts/variable/Rubik*ttf %{buildroot}%{_fontdir}/variable-fonts/
install -d -m 0755 %{buildroot}%{_licensedir}/%{name}
install -m 0644 OFL.txt %{buildroot}%{_licensedir}/%{name}/
%post
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%postun
/usr/bin/fc-cache -fv >/dev/null 2>&1 || :
%files
%{_fontdir}/variable-fonts/Rubik*ttf
%license %{_licensedir}/%{name}/OFL.txt
%changelog
%autochangelog
+123
View File
@@ -0,0 +1,123 @@
# This script is meant to be sourced.
# It's not for directly running.
if ! command -v dnf >/dev/null 2>&1; then
printf "${STY_RED}[$0]: dnf not found, it seems that the system is not Fedora 42 or later distros. Aborting...${STY_RST}\n"
exit 1
fi
# Update System
case $SKIP_SYSUPDATE in
true) sleep 0;;
*) v sudo dnf upgrade --refresh -y;;
esac
# Development-tools installation
v sudo dnf install @development-tools fedora-packager rpmdevtools fonts-rpm-macros -y
# COPR repositories
v sudo dnf copr enable solopasha/hyprland -y
v sudo dnf copr enable errornointernet/quickshell -y
v sudo dnf copr enable errornointernet/packages -y
v sudo dnf copr enable deltacopy/darkly -y
v sudo dnf copr enable alternateved/eza -y
v sudo dnf copr enable atim/starship -y
# Audio
v sudo dnf install cava pavucontrol wireplumber libdbusmenu-gtk3-devel playerctl -y
# Backlight
v sudo dnf install geoclue2 brightnessctl ddcutil -y
# Basic
v sudo dnf install bc coreutils cliphist cmake curl wget2 ripgrep jq xdg-utils rsync yq -y
# Fonts & Themes
themes_deps=(
adw-gtk3-theme breeze-cursor-theme grub2-breeze-theme breeze-icon-theme{,-fedora}
kf6-breeze-icons sddm-breeze darkly eza fish fontconfig kitty matugen starship
jetbrains-mono-nl-fonts material-icons-fonts twitter-twemoji-fonts
)
v sudo dnf install ${themes_deps[@]} -y
# Hyprland
hyprland_deps=(
hypridle hyprland hyprlock hyprpicker
hyprsunset xdg-desktop-portal-hyprland wl-clipboard
)
v sudo dnf install --setopt="install_weak_deps=False" "${hyprland_deps[@]}" -y
## About `hyprland-qtutils` and `hyprland-qt-support`
# The hyprland-qt-support's GitHub repository requires Qt 6.6 or higher, which I think makes DNF's requirement of Qt 6.9 too strict; it should also support Qt 6.10.
# On distro like Arch Linux, `hyprland-qtutils` and `hyprland-qt-support` are in dependency chain already so no need to add them as deps explicitly;
# However on Fedora, if this package is not installed, a yellow warning⚠️ will appear every time you log in to Hyprland.
v dnf download hyprland-qt-support && v sudo rpm -ivh --nodeps hyprland-qt-support-*.fc$(rpm -E %fedora).$(uname -m).rpm
v sudo dnf install hyprland-qtutils -y
# KDE
v sudo dnf install bluedevil gnome-keyring NetworkManager plasma-nm polkit-kde dolphin plasma-systemsettings -y
# Microtex-git
v sudo dnf install --setopt="install_weak_deps=False" tinyxml2-devel gtkmm3.0-devel gtksourceviewmm3-devel cairomm-devel -y
# Portal
v sudo dnf install xdg-desktop-portal{,-gtk,-kde,-hyprland} -y
# Python
v sudo dnf install --setopt="install_weak_deps=False" clang uv gtk4-devel libadwaita-devel \
libsoup3-devel libportal-gtk4 gobject-introspection-devel -y
v sudo dnf install python3{,.12}{,-devel} -y
# Quickshell-git
quickshell_deps=(
qt6-qtdeclarative qt6-qtbase jemalloc qt6-qtsvg pipewire-libs
libxcb wayland-devel qt6-qtwayland qt5-qtwayland libdrm breakpad
)
# NOTE: Below are custom dependencies of illogical-impulse
quickshell_custom_deps=(
qt6-qt5compat qt6-qtimageformats qt6-qtpositioning
qt6-qtquicktimeline qt6-qtsensors qt6-qttools qt6-qttranslations
qt6-qtvirtualkeyboard qt6-qtwayland kdialog kf6-syntax-highlighting
)
v sudo dnf install "${quickshell_deps[@]}" -y
v sudo dnf install "${quickshell_custom_deps[@]}" -y
# Dynamically control the version of quickshell
qs_version=$(dnf list --showduplicates quickshell-git 2>/dev/null |
grep -E "\.git${_qs_shortcommit}(-|$)" |
awk '{print $2}' |
sort -V |
tail -n1)
v sudo dnf versionlock delete quickshell-git 2>/dev/null
v sudo dnf install quickshell-git-${qs_version}
v sudo dnf versionlock add quickshell-git
# Screencapture
v sudo dnf install hyprshot slurp swappy tesseract tesseract-langpack-eng tesseract-langpack-chi_sim wf-recorder -y
# Toolkit
v sudo dnf install upower wtype ydotool -y
# Widgets
v sudo dnf install fuzzel glib2 ImageMagick hypridle hyprlock hyprpicker songrec translate-shell wlogout -y
# Extra
v sudo dnf install --setopt="install_weak_deps=False" mpvpaper plasma-systemmonitor unzip -y
# Start building the missing RPM package locally.
install_RPMS() {
rpmbuildroot=${REPO_ROOT}/cache/rpmbuild
x mkdir -p $rpmbuildroot/{BUILD,RPMS,SOURCES}
x cp -r ${REPO_ROOT}/sdata/dist-fedora/SPECS $rpmbuildroot/
x cd $rpmbuildroot/SPECS
mapfile -t -d '' local_specs < <(find "$rpmbuildroot/SPECS" -maxdepth 1 -type f -name "*.spec" -print0)
for spec_file in ${local_specs[@]}; do
x rpmbuild -bb --define "_topdir $rpmbuildroot" $spec_file
done
mapfile -t -d '' local_rpms < <(find "$rpmbuildroot/RPMS" -maxdepth 2 -type f -name '*.rpm' -not -name '*debug*' -print0)
echo "${STY_BLUE}Next command:${STY_RST} sudo dnf install ${local_rpms[@]} -y"
x sudo dnf install "${local_rpms[@]}" -y
x cd ${REPO_ROOT}
}
showfun install_RPMS
v install_RPMS
+19
View File
@@ -0,0 +1,19 @@
# This script is meant to be sourced.
# It's not for directly running.
#####################################################################################
# These python packages are installed using uv into the venv (virtual environment). Once the folder of the venv gets deleted, they are all gone cleanly. So it's considered as setups, not dependencies.
showfun install-python-packages
v install-python-packages
v sudo usermod -aG video,input "$(whoami)"
v mkdir -p "${XDG_CONFIG_HOME}/systemd/user"
v ln -s /usr/lib/systemd/system/ydotool.service "${XDG_CONFIG_HOME}/systemd/user/ydotool.service"
v bash -c "echo uinput | sudo tee /etc/modules-load.d/uinput.conf"
v bash -c 'echo SUBSYSTEM==\"misc\", KERNEL==\"uinput\", MODE=\"0660\", GROUP=\"input\" |
sudo tee /etc/udev/rules.d/99-uinput.rules'
v systemctl --user enable ydotool
v sudo systemctl enable bluetooth --now
v gsettings set org.gnome.desktop.interface font-name 'Rubik 11'
v gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
v kwriteconfig6 --file kdeglobals --group KDE --key widgetStyle Darkly
+1
View File
@@ -0,0 +1 @@
AUTO
+4
View File
@@ -25,3 +25,7 @@ STY_RST='\e[00m'
# Used by register_temp_file()
declare -a TEMP_FILES_TO_CLEANUP=()
# Pinned commit for quickshell
_qs_commit='db1777c20b936a86528c1095cbcb1ebd92801402'
_qs_shortcommit=$(echo ${_qs_commit} | cut -c1-7)
+17 -7
View File
@@ -138,13 +138,14 @@ elif [[ -f "./sdata/dist-${OS_DISTRO_ID}/install-deps.sh" ]]; then
printf "\n"
if [ "$ask" = "false" ]; then
echo "Urgent problem encountered, aborting...";exit 1
else
printf "${STY_RED}Still proceed?${STY_RST}\n"
read -p "[y/N]: " p
case "$p" in
[yY])sleep 0;;
*)echo "Aborting...";exit 1;;
esac
fi
printf "${STY_RED}Still proceed?${STY_RST}\n"
read -p "[y/N]: " p
case "$p" in
[yY])sleep 0;;
*)echo "Aborting...";exit 1;;
esac
fi
source ./sdata/dist-${TARGET_ID}/install-deps.sh
@@ -177,7 +178,16 @@ else
printf "2. It is WIP and only contains small number of dependencies far from enough.\n"
printf "Proceed only at your own risk.\n"
printf "${STY_RST}"
pause
if [ "$ask" = "false" ]; then
echo "Urgent problem encountered, aborting...";exit 1
else
printf "${STY_RED}Still proceed?${STY_RST}\n"
read -p "[y/N]: " p
case "$p" in
[yY])sleep 0;;
*)echo "Aborting...";exit 1;;
esac
fi
source ./sdata/dist-${TARGET_ID}/install-deps.sh
fi
+3
View File
@@ -59,6 +59,9 @@ case $SKIP_HYPRLAND in
true) sleep 0;;
*)
warning_rsync_delete; v rsync -av --delete "${arg_excludes[@]}" dots/.config/hypr/ "$XDG_CONFIG_HOME"/hypr/
if [ "$OS_DISTRO_ID" = "fedora" ];then
v rsync -av "${REPO_ROOT}/dots-extra/fedora/hypr/hyprland/execs.conf" "$XDG_CONFIG_HOME/hypr/hyprland/execs.conf"
fi
# When hypr/custom does not exist, we assume that it's the firstrun.
if [ -d "$XDG_CONFIG_HOME/hypr/custom" ];then ii_firstrun=false;else ii_firstrun=true;fi
t="$XDG_CONFIG_HOME/hypr/hyprland.conf"