diff --git a/.github/workflows/moderator.yml b/.github/workflows/moderator.yml
new file mode 100644
index 000000000..b87a53ce4
--- /dev/null
+++ b/.github/workflows/moderator.yml
@@ -0,0 +1,30 @@
+name: AI Moderator
+on:
+ issues:
+ types: [opened]
+ issue_comment:
+ types: [created]
+ pull_request_review_comment:
+ types: [created]
+
+jobs:
+ spam-detection:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+ models: read
+ contents: read
+ steps:
+ - uses: actions/checkout@v4
+ - uses: github/ai-moderator@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ spam-label: 'spam'
+ ai-label: 'ai-generated'
+ minimize-detected-comments: true
+ # Built-in prompt configuration (all enabled by default)
+ enable-spam-detection: true
+ enable-link-spam-detection: true
+ enable-ai-detection: true
+ # custom-prompt-path: '.github/prompts/my-custom.prompt.yml' # Optional
diff --git a/dots/.config/quickshell/ii/modules/common/functions/ColorUtils.qml b/dots/.config/quickshell/ii/modules/common/functions/ColorUtils.qml
index 74305c8fa..53e722d2c 100644
--- a/dots/.config/quickshell/ii/modules/common/functions/ColorUtils.qml
+++ b/dots/.config/quickshell/ii/modules/common/functions/ColorUtils.qml
@@ -161,11 +161,13 @@ Singleton {
* @returns {Qt.rgba} The solved overlay color
*/
function solveOverlayColor(baseColor, targetColor, overlayOpacity) {
+ const bc = Qt.color(baseColor);
+ const tc = Qt.color(targetColor);
let invA = 1.0 - overlayOpacity;
- let r = (targetColor.r - baseColor.r * invA) / overlayOpacity;
- let g = (targetColor.g - baseColor.g * invA) / overlayOpacity;
- let b = (targetColor.b - baseColor.b * invA) / overlayOpacity;
+ let r = (tc.r - bc.r * invA) / overlayOpacity;
+ let g = (tc.g - bc.g * invA) / overlayOpacity;
+ let b = (tc.b - bc.b * invA) / overlayOpacity;
return Qt.rgba(clamp01(r), clamp01(g), clamp01(b), overlayOpacity);
}
diff --git a/dots/.config/quickshell/ii/modules/ii/lock/Lock.qml b/dots/.config/quickshell/ii/modules/ii/lock/Lock.qml
index 1837480ad..26d3e57ab 100644
--- a/dots/.config/quickshell/ii/modules/ii/lock/Lock.qml
+++ b/dots/.config/quickshell/ii/modules/ii/lock/Lock.qml
@@ -48,6 +48,9 @@ LockScreen {
for (var i = 0; i < Quickshell.screens.length; ++i) {
var mon = Quickshell.screens[i].name
var mData = HyprlandData.monitors.find(m => m.name === mon)
+ if (mData?.activeWorkspace == undefined) {
+ return;
+ }
var ws = (mData?.activeWorkspace?.id ?? 1)
next[mon] = ws
batch += "dispatch focusmonitor " + mon + "; dispatch workspace " + (2147483647 - ws) + "; "
diff --git a/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml b/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml
index 4f96f2506..99dc88eda 100644
--- a/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml
+++ b/dots/.config/quickshell/ii/modules/ii/regionSelector/RegionSelection.qml
@@ -291,6 +291,7 @@ PanelWindow {
Quickshell.execDetached(command);
if (root.action == RegionSelection.SnipAction.Record || root.action == RegionSelection.SnipAction.RecordWithSound) {
root.phase = RegionSelection.Phase.Post
+ root.selectionMode = RegionSelection.SelectionMode.RectCorners
} else {
root.dismiss();
}
diff --git a/dots/.config/quickshell/ii/modules/ii/sidebarLeft/AiChat.qml b/dots/.config/quickshell/ii/modules/ii/sidebarLeft/AiChat.qml
index 3dc181fe4..77d4f4b2a 100644
--- a/dots/.config/quickshell/ii/modules/ii/sidebarLeft/AiChat.qml
+++ b/dots/.config/quickshell/ii/modules/ii/sidebarLeft/AiChat.qml
@@ -497,199 +497,206 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\)
RowLayout { // Input field and send button
id: inputFieldRowLayout
anchors {
- top: attachedFileIndicator.bottom
+ bottom: commandButtonsRow.top
left: parent.left
right: parent.right
- topMargin: 5
+ bottomMargin: 5
}
spacing: 0
- StyledTextArea { // The actual TextArea
- id: messageInputField
- wrapMode: TextArea.Wrap
+ ScrollView {
+ id: inputScrollView
Layout.fillWidth: true
- padding: 10
- color: activeFocus ? Appearance.m3colors.m3onSurface : Appearance.m3colors.m3onSurfaceVariant
- placeholderText: Translation.tr('Message the model... "%1" for commands').arg(root.commandPrefix)
+ Layout.preferredHeight: Math.min(root.height * 3/5, messageInputField.height)
+ clip: true
+ ScrollBar.vertical.policy: ScrollBar.AsNeeded
- background: null
+ StyledTextArea { // The actual TextArea (inside ScrollView to enable scrolling)
+ id: messageInputField
+ anchors.fill: parent
+ wrapMode: TextArea.Wrap
+ padding: 10
+ color: activeFocus ? Appearance.m3colors.m3onSurface : Appearance.m3colors.m3onSurfaceVariant
+ placeholderText: Translation.tr('Message the model... "%1" for commands').arg(root.commandPrefix)
- onTextChanged: {
- // Handle suggestions
- if (messageInputField.text.length === 0) {
- root.suggestionQuery = "";
- root.suggestionList = [];
- return;
- } else if (messageInputField.text.startsWith(`${root.commandPrefix}model`)) {
- root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
- const modelResults = Fuzzy.go(root.suggestionQuery, Ai.modelList.map(model => {
- return {
- name: Fuzzy.prepare(model),
- obj: model
- };
- }), {
- all: true,
- key: "name"
- });
- root.suggestionList = modelResults.map(model => {
- return {
- name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "model ") : ""}${model.target}`,
- displayName: `${Ai.models[model.target].name}`,
- description: `${Ai.models[model.target].description}`
- };
- });
- } else if (messageInputField.text.startsWith(`${root.commandPrefix}prompt`)) {
- root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
- const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.promptFiles.map(file => {
- return {
- name: Fuzzy.prepare(file),
- obj: file
- };
- }), {
- all: true,
- key: "name"
- });
- root.suggestionList = promptFileResults.map(file => {
- return {
- name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "prompt ") : ""}${file.target}`,
- displayName: `${FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target))}`,
- description: Translation.tr("Load prompt from %1").arg(file.target)
- };
- });
- } else if (messageInputField.text.startsWith(`${root.commandPrefix}save`)) {
- root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
- const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.savedChats.map(file => {
- return {
- name: Fuzzy.prepare(file),
- obj: file
- };
- }), {
- all: true,
- key: "name"
- });
- root.suggestionList = promptFileResults.map(file => {
- const chatName = FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target)).trim();
- return {
- name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "save ") : ""}${chatName}`,
- displayName: `${chatName}`,
- description: Translation.tr("Save chat to %1").arg(chatName)
- };
- });
- } else if (messageInputField.text.startsWith(`${root.commandPrefix}load`)) {
- root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
- const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.savedChats.map(file => {
- return {
- name: Fuzzy.prepare(file),
- obj: file
- };
- }), {
- all: true,
- key: "name"
- });
- root.suggestionList = promptFileResults.map(file => {
- const chatName = FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target)).trim();
- return {
- name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "load ") : ""}${chatName}`,
- displayName: `${chatName}`,
- description: Translation.tr(`Load chat from %1`).arg(file.target)
- };
- });
- } else if (messageInputField.text.startsWith(`${root.commandPrefix}tool`)) {
- root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
- const toolResults = Fuzzy.go(root.suggestionQuery, Ai.availableTools.map(tool => {
- return {
- name: Fuzzy.prepare(tool),
- obj: tool
- };
- }), {
- all: true,
- key: "name"
- });
- root.suggestionList = toolResults.map(tool => {
- const toolName = tool.target;
- return {
- name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "tool ") : ""}${tool.target}`,
- displayName: toolName,
- description: Ai.toolDescriptions[toolName]
- };
- });
- } else if (messageInputField.text.startsWith(root.commandPrefix)) {
- root.suggestionQuery = messageInputField.text;
- root.suggestionList = root.allCommands.filter(cmd => cmd.name.startsWith(messageInputField.text.substring(1))).map(cmd => {
- return {
- name: `${root.commandPrefix}${cmd.name}`,
- description: `${cmd.description}`
- };
- });
+ background: null
+
+ onTextChanged: {
+ // Handle suggestions
+ if (messageInputField.text.length === 0) {
+ root.suggestionQuery = "";
+ root.suggestionList = [];
+ return;
+ } else if (messageInputField.text.startsWith(`${root.commandPrefix}model`)) {
+ root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
+ const modelResults = Fuzzy.go(root.suggestionQuery, Ai.modelList.map(model => {
+ return {
+ name: Fuzzy.prepare(model),
+ obj: model
+ };
+ }), {
+ all: true,
+ key: "name"
+ });
+ root.suggestionList = modelResults.map(model => {
+ return {
+ name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "model ") : ""}${model.target}`,
+ displayName: `${Ai.models[model.target].name}`,
+ description: `${Ai.models[model.target].description}`
+ };
+ });
+ } else if (messageInputField.text.startsWith(`${root.commandPrefix}prompt`)) {
+ root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
+ const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.promptFiles.map(file => {
+ return {
+ name: Fuzzy.prepare(file),
+ obj: file
+ };
+ }), {
+ all: true,
+ key: "name"
+ });
+ root.suggestionList = promptFileResults.map(file => {
+ return {
+ name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "prompt ") : ""}${file.target}`,
+ displayName: `${FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target))}`,
+ description: Translation.tr("Load prompt from %1").arg(file.target)
+ };
+ });
+ } else if (messageInputField.text.startsWith(`${root.commandPrefix}save`)) {
+ root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
+ const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.savedChats.map(file => {
+ return {
+ name: Fuzzy.prepare(file),
+ obj: file
+ };
+ }), {
+ all: true,
+ key: "name"
+ });
+ root.suggestionList = promptFileResults.map(file => {
+ const chatName = FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target)).trim();
+ return {
+ name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "save ") : ""}${chatName}`,
+ displayName: `${chatName}`,
+ description: Translation.tr("Save chat to %1").arg(chatName)
+ };
+ });
+ } else if (messageInputField.text.startsWith(`${root.commandPrefix}load`)) {
+ root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
+ const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.savedChats.map(file => {
+ return {
+ name: Fuzzy.prepare(file),
+ obj: file
+ };
+ }), {
+ all: true,
+ key: "name"
+ });
+ root.suggestionList = promptFileResults.map(file => {
+ const chatName = FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target)).trim();
+ return {
+ name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "load ") : ""}${chatName}`,
+ displayName: `${chatName}`,
+ description: Translation.tr(`Load chat from %1`).arg(file.target)
+ };
+ });
+ } else if (messageInputField.text.startsWith(`${root.commandPrefix}tool`)) {
+ root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "";
+ const toolResults = Fuzzy.go(root.suggestionQuery, Ai.availableTools.map(tool => {
+ return {
+ name: Fuzzy.prepare(tool),
+ obj: tool
+ };
+ }), {
+ all: true,
+ key: "name"
+ });
+ root.suggestionList = toolResults.map(tool => {
+ const toolName = tool.target;
+ return {
+ name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "tool ") : ""}${tool.target}`,
+ displayName: toolName,
+ description: Ai.toolDescriptions[toolName]
+ };
+ });
+ } else if (messageInputField.text.startsWith(root.commandPrefix)) {
+ root.suggestionQuery = messageInputField.text;
+ root.suggestionList = root.allCommands.filter(cmd => cmd.name.startsWith(messageInputField.text.substring(1))).map(cmd => {
+ return {
+ name: `${root.commandPrefix}${cmd.name}`,
+ description: `${cmd.description}`
+ };
+ });
+ }
}
- }
- function accept() {
- root.handleInput(text);
- text = "";
- }
+ function accept() {
+ root.handleInput(text);
+ text = "";
+ }
- Keys.onPressed: event => {
- if (event.key === Qt.Key_Tab) {
- suggestions.acceptSelectedWord();
- event.accepted = true;
- } else if (event.key === Qt.Key_Up && suggestions.visible) {
- suggestions.selectedIndex = Math.max(0, suggestions.selectedIndex - 1);
- event.accepted = true;
- } else if (event.key === Qt.Key_Down && suggestions.visible) {
- suggestions.selectedIndex = Math.min(root.suggestionList.length - 1, suggestions.selectedIndex + 1);
- event.accepted = true;
- } else if ((event.key === Qt.Key_Enter || event.key === Qt.Key_Return)) {
- if (event.modifiers & Qt.ShiftModifier) {
- // Insert newline
- messageInputField.insert(messageInputField.cursorPosition, "\n");
+ Keys.onPressed: event => {
+ if (event.key === Qt.Key_Tab) {
+ suggestions.acceptSelectedWord();
event.accepted = true;
- } else {
- // Accept text
- const inputText = messageInputField.text;
- messageInputField.clear();
- root.handleInput(inputText);
+ } else if (event.key === Qt.Key_Up && suggestions.visible) {
+ suggestions.selectedIndex = Math.max(0, suggestions.selectedIndex - 1);
event.accepted = true;
- }
- } else if ((event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_V) {
- // Intercept Ctrl+V to handle image/file pasting
- if (event.modifiers & Qt.ShiftModifier) {
- // Let Shift+Ctrl+V = plain paste
- messageInputField.text += Quickshell.clipboardText;
+ } else if (event.key === Qt.Key_Down && suggestions.visible) {
+ suggestions.selectedIndex = Math.min(root.suggestionList.length - 1, suggestions.selectedIndex + 1);
event.accepted = true;
- return;
- }
- // Try image paste first
- const currentClipboardEntry = Cliphist.entries[0];
- const cleanCliphistEntry = StringUtils.cleanCliphistEntry(currentClipboardEntry);
- if (/^\d+\t\[\[.*binary data.*\d+x\d+.*\]\]$/.test(currentClipboardEntry)) {
- // First entry = currently copied entry = image?
- decodeImageAndAttachProc.handleEntry(currentClipboardEntry);
- event.accepted = true;
- return;
- } else if (cleanCliphistEntry.startsWith("file://")) {
- // First entry = currently copied entry = image?
- const fileName = decodeURIComponent(cleanCliphistEntry);
- Ai.attachFile(fileName);
- event.accepted = true;
- return;
- }
- event.accepted = false; // No image, let text pasting proceed
- } else if (event.key === Qt.Key_Escape) {
- // Esc to detach file
- if (Ai.pendingFilePath.length > 0) {
- Ai.attachFile("");
- event.accepted = true;
- } else {
- event.accepted = false;
+ } else if ((event.key === Qt.Key_Enter || event.key === Qt.Key_Return)) {
+ if (event.modifiers & Qt.ShiftModifier) {
+ // Insert newline
+ messageInputField.insert(messageInputField.cursorPosition, "\n");
+ event.accepted = true;
+ } else {
+ // Accept text
+ const inputText = messageInputField.text;
+ messageInputField.clear();
+ root.handleInput(inputText);
+ event.accepted = true;
+ }
+ } else if ((event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_V) {
+ // Intercept Ctrl+V to handle image/file pasting
+ if (event.modifiers & Qt.ShiftModifier) {
+ // Let Shift+Ctrl+V = plain paste
+ messageInputField.text += Quickshell.clipboardText;
+ event.accepted = true;
+ return;
+ }
+ // Try image paste first
+ const currentClipboardEntry = Cliphist.entries[0];
+ const cleanCliphistEntry = StringUtils.cleanCliphistEntry(currentClipboardEntry);
+ if (/^\d+\t\[\[.*binary data.*\d+x\d+.*\]\]$/.test(currentClipboardEntry)) {
+ // First entry = currently copied entry = image?
+ decodeImageAndAttachProc.handleEntry(currentClipboardEntry);
+ event.accepted = true;
+ return;
+ } else if (cleanCliphistEntry.startsWith("file://")) {
+ // First entry = currently copied entry = image?
+ const fileName = decodeURIComponent(cleanCliphistEntry);
+ Ai.attachFile(fileName);
+ event.accepted = true;
+ return;
+ }
+ event.accepted = false; // No image, let text pasting proceed
+ } else if (event.key === Qt.Key_Escape) {
+ // Esc to detach file
+ if (Ai.pendingFilePath.length > 0) {
+ Ai.attachFile("");
+ event.accepted = true;
+ } else {
+ event.accepted = false;
+ }
}
}
}
}
-
RippleButton { // Send button
id: sendButton
- Layout.alignment: Qt.AlignTop
+ Layout.alignment: Qt.AlignBottom
Layout.rightMargin: 5
implicitWidth: 40
implicitHeight: 40
diff --git a/dots/.config/quickshell/ii/modules/ii/sidebarRight/QuickSliders.qml b/dots/.config/quickshell/ii/modules/ii/sidebarRight/QuickSliders.qml
index 4e80f7203..015350505 100644
--- a/dots/.config/quickshell/ii/modules/ii/sidebarRight/QuickSliders.qml
+++ b/dots/.config/quickshell/ii/modules/ii/sidebarRight/QuickSliders.qml
@@ -43,7 +43,7 @@ Rectangle {
materialSymbol: "light_mode"
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
+ value: Hyprsunset.gamma === 100? 0.3 + root.brightnessMonitor?.brightness * 0.7 : (Hyprsunset.gamma - Hyprsunset.gammaLowerLimit) / (100 - Hyprsunset.gammaLowerLimit) * 0.3
tooltipContent: Hyprsunset.gamma === 100 ? `${Math.round(root.brightnessMonitor?.brightness * 100)}%` : `${Translation.tr("Gamma")} ${Hyprsunset.gamma}%`
onMoved: {
if (value >= 0.3) {
@@ -57,7 +57,7 @@ Rectangle {
if (root.brightnessMonitor.brightness !== 0) {
root.brightnessMonitor.setBrightness(0);
}
- Hyprsunset.setGamma(value * 100 / 0.3);
+ Hyprsunset.setGamma((value / 0.3 * (100 - Hyprsunset.gammaLowerLimit) + Hyprsunset.gammaLowerLimit));
}
}
}
diff --git a/dots/.config/quickshell/ii/services/Hyprsunset.qml b/dots/.config/quickshell/ii/services/Hyprsunset.qml
index d51d4fe99..9a1e4c4f2 100644
--- a/dots/.config/quickshell/ii/services/Hyprsunset.qml
+++ b/dots/.config/quickshell/ii/services/Hyprsunset.qml
@@ -88,7 +88,7 @@ Singleton {
function load() {
root.startHyprsunset();
- updateHyprsunset.restart();
+ root.ensureState();
}
Timer {
diff --git a/dots/.config/quickshell/ii/translations/fr_FR.json b/dots/.config/quickshell/ii/translations/fr_FR.json
new file mode 100644
index 000000000..b40354287
--- /dev/null
+++ b/dots/.config/quickshell/ii/translations/fr_FR.json
@@ -0,0 +1,615 @@
+{
+ "Material cookie": "Material cookie",
+ "Style: Blurred": "Style : Flouté",
+ "Unknown device": "Appareil inconnu",
+ "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": "Modifiez à tout moment avec /dark, /light, /wallpaper dans le lanceur\nSi les couleurs du shell ne changent pas :\n 1. Ouvrez le panneau latéral droit avec Super+N\n 2. Cliquez sur \"Recharger Hyprland & Quickshell\" dans le coin supérieur droit",
+ "No pending tasks": "Aucune tâche en attente",
+ "Positioning": "Positionnement",
+ "Set temperature (randomness) of the model. Values range between 0 to 2 for Gemini, 0 to 1 for other models. Default is 0.5.": "Définir la température (aléatoire) du modèle. Les valeurs vont de 0 à 2 pour Gemini, de 0 à 1 pour les autres modèles. La valeur par défaut est 0,5.",
+ "Critical warning": "Avertissement critique",
+ "Unknown Artist": "Artiste inconnu",
+ "Web search": "Recherche web",
+ "Load prompt from %1": "Charger l'invite depuis %1",
+ "Attach a file. Only works with Gemini.": "Joindre un fichier. Fonctionne uniquement avec Gemini.",
+ "Reboot": "Redémarrer",
+ "API key:\n\n```txt\n%1\n```": "Clé API :\n\n```txt\n%1\n```",
+ "Pinned on startup": "Épinglé au démarrage",
+ "Right": "Droite",
+ "Reboot to firmware settings": "Redémarrer dans les paramètres du firmware",
+ "Automatically hide": "Masquer automatiquement",
+ "Waiting for response...": "En attente d'une réponse...",
+ "To Do": "À faire",
+ "Full": "Plein",
+ "Select Language": "Sélectionner la langue",
+ "Password": "Mot de passe",
+ "Bluetooth devices": "Appareils Bluetooth",
+ "Enable": "Activer",
+ "Elements": "Éléments",
+ "Start": "Démarrer",
+ "Random SFW Anime wallpaper from Konachan\nImage is saved to ~/Pictures/Wallpapers": "Fond d'écran anime aléatoire (SFW) de Konachan\nL'image est sauvegardée dans ~/Pictures/Wallpapers",
+ "The popular one | Best quantity, but quality can vary wildly": "Le plus populaire | Meilleure quantité, mais la qualité peut varier énormément",
+ "System uptime:": "Temps de fonctionnement :",
+ "illogical-impulse Welcome": "Bienvenue illogical-impulse",
+ "Code saved to file": "Code sauvegardé dans le fichier",
+ "Info": "Info",
+ "Preferred wallpaper zoom (%)": "Zoom préféré du fond d'écran (%)",
+ "Time": "Heure",
+ "Help & Support": "Aide et support",
+ "Bubble": "Bulle",
+ "Large images | God tier quality, no NSFW.": "Grandes images | Qualité excellente, sans contenu NSFW.",
+ "Dark": "Sombre",
+ "Center clock": "Horloge centrée",
+ "Search, calculate or run": "Rechercher, calculer ou exécuter",
+ "Region height": "Hauteur de la région",
+ "Load chat": "Charger la conversation",
+ "Gives the model search capabilities (immediately)": "Donne au modèle des capacités de recherche (immédiatement)",
+ "Depends on workspace": "Dépend de l'espace de travail",
+ "Blurred style": "Style flouté",
+ "Screenshot tool": "Outil de capture d'écran",
+ "Enter password": "Entrer le mot de passe",
+ "Search the web": "Rechercher sur le web",
+ "Local only": "Local uniquement",
+ "at": "à",
+ "Math": "Calcul",
+ "Consider plugging in your device": "Pensez à brancher votre appareil",
+ "Workspaces shown": "Espaces de travail affichés",
+ "Place the corners to trigger at the bottom": "Placer les coins de déclenchement en bas",
+ "No API key\nSet it with /key YOUR_API_KEY": "Aucune clé API\nDéfinissez-la avec /key VOTRE_CLÉ_API",
+ "Auto (System)": "Auto (Système)",
+ "Arrow keys to navigate, Enter to select\nEsc or click anywhere to cancel": "Touches fléchées pour naviguer, Entrée pour sélectionner\nÉchap ou clic n'importe où pour annuler",
+ "Critically low battery": "Batterie critique",
+ "Open editor": "Ouvrir l'éditeur",
+ "%1 notifications": "%1 notifications",
+ "Region width": "Largeur de la région",
+ "Max allowed increase": "Augmentation maximale autorisée",
+ "Enable translator": "Activer le traducteur",
+ "Constantly rotate": "Rotation constante",
+ "Automatically suspends the system when battery is low": "Suspend automatiquement le système lorsque la batterie est faible",
+ "Cannot find a GPS service. Using the fallback method instead.": "Impossible de trouver un service GPS. Utilisation de la méthode de secours.",
+ "Qt apps": "Applications Qt",
+ "Color picker": "Sélecteur de couleur",
+ "Interface": "Interface",
+ "Tint app icons": "Teinter les icônes d'application",
+ "Select the language for the user interface.\n\"Auto\" will use your system's locale.": "Sélectionner la langue de l'interface utilisateur.\n\"Auto\" utilisera les paramètres régionaux de votre système.",
+ "Show quote": "Afficher la citation",
+ "Local Ollama model | %1": "Modèle Ollama local | %1",
+ "Show clock": "Afficher l'horloge",
+ "Usage: %1superpaste NUM_OF_ENTRIES[i]\nSupply i when you want images\nExamples:\n%1superpaste 4i for the last 4 images\n%1superpaste 7 for the last 7 entries": "Utilisation : %1superpaste NB_ENTRÉES[i]\nAjoutez i pour les images\nExemples :\n%1superpaste 4i pour les 4 dernières images\n%1superpaste 7 pour les 7 dernières entrées",
+ "Audio": "Audio",
+ "Corner style": "Style des coins",
+ "No media": "Aucun média",
+ "Unknown function call: %1": "Appel de fonction inconnu : %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": "En ligne | Modèle de %1 | Fournit des réponses rapides, réactives et bien formatées. Inconvénients : pas très enclin à agir ; peut inventer des appels de fonctions inconnus",
+ "Volume": "Volume",
+ "Gamma": "Gamma",
+ "Medium": "Moyen",
+ "Copy code": "Copier le code",
+ "Exceeded max allowed": "Dépassement du maximum autorisé",
+ "Keep right sidebar loaded": "Garder le panneau latéral droit chargé",
+ "Left": "Gauche",
+ "High": "Élevé",
+ "Rect": "Rect",
+ "Lap": "Tour",
+ "Clear": "Effacer",
+ "Screen snip": "Capture d'écran",
+ "Reset": "Réinitialiser",
+ "Back": "Retour",
+ "Dark/Light toggle": "Basculer sombre/clair",
+ "12h am/pm": "12h am/pm",
+ "Download complete": "Téléchargement terminé",
+ "Enable blur": "Activer le flou",
+ "Second hand": "Trotteuse",
+ "Bar & screen": "Barre et écran",
+ "Discharging:": "Décharge :",
+ "Up %1": "Actif depuis %1",
+ "Low": "Faible",
+ "Hour hand": "Aiguille des heures",
+ "Clear chat history": "Effacer l'historique de conversation",
+ "Fruit Salad": "Salade de fruits",
+ "%1 Safe Storage": "%1 Stockage sécurisé",
+ "Hibernate": "Hibernation",
+ "Delete": "Supprimer",
+ "OK": "OK",
+ "Settings": "Paramètres",
+ "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.)": "C'est généralement sûr et nécessaire pour votre navigateur et la barre latérale IA\nSurtout utile pour ceux qui utilisent le verrouillage au démarrage au lieu d'un gestionnaire d'affichage (GDM, SDDM, etc.)",
+ "Use Hyprlock (instead of Quickshell)": "Utiliser Hyprlock (au lieu de Quickshell)",
+ "Crosshair code (in Valorant's format)": "Code du réticule (au format Valorant)",
+ "Silent": "Silencieux",
+ "Useless buttons": "Boutons inutiles",
+ "Hover to reveal": "Survoler pour révéler",
+ "Wallpaper & Colors": "Fond d'écran et couleurs",
+ "Auto": "Auto",
+ "Visibility": "Visibilité",
+ "Shell & utilities": "Shell et utilitaires",
+ "Hollow": "Creux",
+ "illogical-impulse": "illogical-impulse",
+ "Use the system file picker instead\nRight-click to make this the default behavior": "Utiliser le sélecteur de fichiers système\nClic droit pour en faire le comportement par défaut",
+ "On-screen display": "Affichage à l'écran",
+ "Dotfiles": "Dotfiles",
+ "Search wallpapers": "Rechercher des fonds d'écran",
+ "Mic toggle": "Basculer le micro",
+ "Input": "Entrée",
+ "Also unlock keyring": "Déverrouiller également le trousseau",
+ "Configuration": "Configuration",
+ "Keep system awake": "Empêcher la mise en veille",
+ "Unknown command:": "Commande inconnue :",
+ "Anime boorus": "Boorus anime",
+ "To Do:": "À faire :",
+ "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.": "Utilise Gemini pour catégoriser le fond d'écran puis choisit un préréglage basé sur celui-ci.\nVous devrez d'abord définir la clé API Gemini dans le panneau latéral gauche.\nLes images sont réduites pour les performances, mais par précaution,\nne sélectionnez pas de fonds d'écran contenant des informations sensibles.",
+ "Bottom": "Bas",
+ "Clear the current list of images": "Effacer la liste d'images actuelle",
+ "Sunrise": "Lever du soleil",
+ "Show app icons": "Afficher les icônes d'application",
+ "Format": "Format",
+ "Make sure your player has MPRIS support\nor try turning off duplicate player filtering": "Assurez-vous que votre lecteur prend en charge MPRIS\nou essayez de désactiver le filtrage des lecteurs dupliqués",
+ "Pause": "Pause",
+ "Desktop": "Bureau",
+ "Conflicts with the shell's system tray implementation": "Conflit avec l'implémentation de la barre système du shell",
+ "Your package manager is running": "Votre gestionnaire de paquets est en cours d'exécution",
+ "Conflicts with the shell's notification implementation": "Conflit avec l'implémentation des notifications du shell",
+ "Unknown Album": "Album inconnu",
+ "Pick wallpaper image on your system": "Choisir une image de fond d'écran sur votre système",
+ "Used:": "Utilisé :",
+ "Cheat sheet": "Aide-mémoire",
+ "Clock style": "Style d'horloge",
+ "No audio source": "Aucune source audio",
+ "Paired": "Jumelé",
+ "Documentation": "Documentation",
+ "No": "Non",
+ "Pills": "Pilules",
+ "Thought": "Pensée",
+ "When this is off you'll have to click": "Lorsque cette option est désactivée, vous devrez cliquer",
+ "Select output device": "Sélectionner le périphérique de sortie",
+ "Logout": "Déconnexion",
+ "Tip: Close a window with Super+Q": "Astuce : Fermer une fenêtre avec Super+Q",
+ "Finished tasks will go here": "Les tâches terminées apparaîtront ici",
+ "Terminal: Harmony (%)": "Terminal : Harmonie (%)",
+ "Corner open": "Ouverture par coin",
+ "Shell conflicts killer": "Suppresseur de conflits du shell",
+ "Clean stuff | Excellent quality, no NSFW": "Contenu propre | Excellente qualité, sans NSFW",
+ "Scroll to change volume": "Défiler pour changer le volume",
+ "Wind": "Vent",
+ "API key is set\nChange with /key YOUR_API_KEY": "Clé API définie\nModifiez avec /key VOTRE_CLÉ_API",
+ "Neutral": "Neutre",
+ "12h AM/PM": "12h AM/PM",
+ "Number show delay when pressing Super (ms)": "Délai d'affichage des numéros à l'appui de Super (ms)",
+ "Fill": "Remplissage",
+ "Always show numbers": "Toujours afficher les numéros",
+ "Dot": "Point",
+ "Provider set to": "Fournisseur défini sur",
+ "Unknown Title": "Titre inconnu",
+ "Anime": "Anime",
+ "Refreshing (manually triggered)": "Actualisation (déclenchée manuellement)",
+ "Dock": "Dock",
+ "Require password to power off/restart": "Exiger un mot de passe pour éteindre/redémarrer",
+ "Line": "Ligne",
+ "Weather": "Météo",
+ "All-rounder | Good quality, decent quantity": "Polyvalent | Bonne qualité, quantité correcte",
+ "Scale (%)": "Échelle (%)",
+ "Copy": "Copier",
+ "Usage": "Utilisation",
+ "Type /key to get started with online models\nCtrl+O to expand the sidebar\nCtrl+P to detach sidebar into a window": "Tapez /key pour commencer avec les modèles en ligne\nCtrl+O pour agrandir le panneau latéral\nCtrl+P pour détacher le panneau latéral dans une fenêtre",
+ "Set the tool to use for the model.": "Définir l'outil à utiliser pour le modèle.",
+ "Disable tools": "Désactiver les outils",
+ "Connect": "Connecter",
+ "Allow NSFW": "Autoriser le NSFW",
+ "Registration failed. Please inspect manually with the warp-cli command": "Inscription échouée. Veuillez inspecter manuellement avec la commande warp-cli",
+ "Time to full:": "Temps pour charger complètement :",
+ "Session": "Session",
+ "Services": "Services",
+ "Nothing here!": "Rien ici !",
+ "Overview": "Aperçu",
+ "Random: osu! seasonal": "Aléatoire : osu! saisonnier",
+ "If you want to somehow use fingerprint unlock...": "Si vous souhaitez utiliser le déverrouillage par empreinte digitale...",
+ "Minute hand": "Aiguille des minutes",
+ "Notifications": "Notifications",
+ "Enable if you want clocks to show seconds accurately": "Activer pour que les horloges affichent les secondes avec précision",
+ "Timer": "Minuteur",
+ "Quote settings": "Paramètres de citation",
+ "System prompt": "Invite système",
+ "Classic": "Classique",
+ "Close": "Fermer",
+ "Disconnect": "Déconnecter",
+ "Go to source (%1)": "Aller à la source (%1)",
+ "EasyEffects | Right-click to configure": "EasyEffects | Clic droit pour configurer",
+ "Forget": "Oublier",
+ "Output": "Sortie",
+ "Date style": "Style de date",
+ "System": "Système",
+ "Usage: %1tool TOOL_NAME": "Utilisation : %1tool NOM_OUTIL",
+ "Workspaces": "Espaces de travail",
+ "Calendar": "Calendrier",
+ "**Instructions**: Log into Mistral account, go to Keys on the sidebar, click Create new key": "**Instructions** : Connectez-vous à votre compte Mistral, allez dans Clés dans la barre latérale, cliquez sur Créer une nouvelle clé",
+ "Volume limit": "Limite de volume",
+ "Sunset": "Coucher du soleil",
+ "Dial style": "Style du cadran",
+ "Hi there! First things first...": "Bonjour ! Commençons par l'essentiel...",
+ "Save chat to %1": "Sauvegarder la conversation dans %1",
+ "Security": "Sécurité",
+ "Total token count\nInput: %1\nOutput: %2": "Nombre total de tokens\nEntrée : %1\nSortie : %2",
+ "Cancel wallpaper selection": "Annuler la sélection du fond d'écran",
+ "Please charge!\nAutomatic suspend triggers at %1": "Veuillez brancher !\nLa suspension automatique se déclenche à %1",
+ "Terminal: Harmonize threshold": "Terminal : Seuil d'harmonisation",
+ "Be patient...": "Soyez patient...",
+ "Utility buttons": "Boutons utilitaires",
+ "Tonal Spot": "Tonal Spot",
+ "Prevents abrupt increments and restricts volume limit": "Empêche les augmentations brusques et limite le volume",
+ "Set the current API provider": "Définir le fournisseur API actuel",
+ "Connection failed. Please inspect manually with the warp-cli command": "Connexion échouée. Veuillez inspecter manuellement avec la commande warp-cli",
+ "Networking": "Réseau",
+ "Tint icons": "Teinter les icônes",
+ "Low battery": "Batterie faible",
+ "Make icons pinned by default": "Épingler les icônes par défaut",
+ "Get the next page of results": "Obtenir la page suivante de résultats",
+ "Invalid API provider. Supported: \n-": "Fournisseur API invalide. Pris en charge : \n-",
+ "Show \"Locked\" text": "Afficher le texte \"Verrouillé\"",
+ "**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": "**Tarification** : gratuit. La politique d'utilisation des données varie selon les paramètres de votre compte OpenRouter.\n\n**Instructions** : Connectez-vous à votre compte OpenRouter, allez dans Clés dans le menu en haut à droite, cliquez sur Créer une clé API",
+ "Not visible to model": "Non visible par le modèle",
+ "Lock screen": "Écran de verrouillage",
+ "Save to Downloads": "Sauvegarder dans Téléchargements",
+ "Expressive": "Expressif",
+ "Suspend at": "Suspendre à",
+ "Jump to current month": "Aller au mois actuel",
+ "Bold": "Gras",
+ "Waifus only | Excellent quality, limited quantity": "Waifus seulement | Excellente qualité, quantité limitée",
+ "Click to toggle light/dark mode\n(applied when wallpaper is chosen)": "Cliquer pour basculer mode clair/sombre\n(appliqué lors du choix du fond d'écran)",
+ "Visualize region": "Visualiser la région",
+ "Quote": "Citation",
+ "Sleep": "Veille",
+ "Hit \"/\" to search": "Appuyer sur \"/\" pour rechercher",
+ "Hug": "Câlin",
+ "Report a Bug": "Signaler un bug",
+ "Precipitation": "Précipitations",
+ "Crosshair": "Réticule",
+ "Model set to %1": "Modèle défini sur %1",
+ "Rows": "Lignes",
+ "Top": "Haut",
+ "Long break": "Longue pause",
+ "Superpaste": "Superpaste",
+ "Screen round corner": "Arrondi des coins de l'écran",
+ "Online | Google's model\nNewer model that's slower than its predecessor but should deliver higher quality answers": "En ligne | Modèle de Google\nModèle plus récent, plus lent que son prédécesseur mais offrant des réponses de meilleure qualité",
+ "Rainbow": "Arc-en-ciel",
+ "Weeb": "Weeb",
+ "Large language models": "Grands modèles de langage",
+ "Online models disallowed\n\nControlled by `policies.ai` config option": "Modèles en ligne désactivés\n\nContrôlé par l'option de configuration `policies.ai`",
+ "Policies": "Politiques",
+ "Temperature must be between 0 and 2": "La température doit être comprise entre 0 et 2",
+ "Automatic suspend": "Suspension automatique",
+ "Extra wallpaper zoom (%)": "Zoom supplémentaire du fond d'écran (%)",
+ "GitHub": "GitHub",
+ "%1 | Right-click to configure": "%1 | Clic droit pour configurer",
+ "**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": "**Tarification** : Niveau gratuit disponible avec des limites. Voir https://docs.github.com/en/billing/concepts/product-billing/github-models\n\n**Instructions** : Générez un jeton d'accès personnel GitHub avec la permission Models, puis définissez-le comme clé API ici\n\n**Note** : Pour l'utiliser, vous devrez définir le paramètre de température à 1",
+ "Edit directory": "Modifier le répertoire",
+ "Action": "Action",
+ "Search": "Rechercher",
+ "Tip: right-clicking a group\nalso expands it": "Astuce : un clic droit sur un groupe\nl'expand également",
+ "Bar": "Barre",
+ "Show regions of potential interest": "Afficher les régions d'intérêt potentiel",
+ "Clipboard": "Presse-papiers",
+ "Stopwatch": "Chronomètre",
+ "Enter text to translate...": "Entrez le texte à traduire...",
+ "App": "Application",
+ "Sides": "Côtés",
+ "No active player": "Aucun lecteur actif",
+ "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.": "Toutes les options ne sont pas disponibles dans cette application. Vous devriez également vérifier le fichier de configuration en cliquant sur le bouton \"Fichier de config\" dans le coin supérieur gauche ou en ouvrant %1 manuellement.",
+ "There might be a download in progress": "Un téléchargement est peut-être en cours",
+ "Math result": "Résultat mathématique",
+ "Fidelity": "Fidélité",
+ "Prefixes": "Préfixes",
+ "Terminal": "Terminal",
+ "Incorrect password": "Mot de passe incorrect",
+ "Line-separated": "Séparé par des lignes",
+ "Always": "Toujours",
+ "☕ Break: %1 minutes": "☕ Pause : %1 minutes",
+ "Depends on sidebars": "Dépend des panneaux latéraux",
+ "Tool set to: %1": "Outil défini sur : %1",
+ "Save chat": "Sauvegarder la conversation",
+ "Crosshair overlay": "Superposition du réticule",
+ "Keybinds": "Raccourcis clavier",
+ "Launch": "Lancer",
+ "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)": "Peut être meilleur si vous faites beaucoup de fautes de frappe,\nmais les résultats peuvent être étranges et ne pas fonctionner avec les acronymes\n(ex : \"GIMP\" pourrait ne pas vous donner le programme de dessin)",
+ "Choose model": "Choisir le modèle",
+ "Base URL": "URL de base",
+ "Float": "Flottant",
+ "Wallpaper parallax": "Parallaxe du fond d'écran",
+ "Invalid arguments. Must provide `command`.": "Arguments invalides. Vous devez fournir `command`.",
+ "Fully charged": "Complètement chargé",
+ "Earbang protection": "Protection contre les brusques hausses de volume",
+ "Low warning": "Avertissement faible",
+ "Advanced": "Avancé",
+ "Scroll to change brightness": "Défiler pour changer la luminosité",
+ "Loaded the following system prompt\n\n---\n\n%1": "L'invite système suivante a été chargée\n\n---\n\n%1",
+ "Show next time": "Afficher la prochaine fois",
+ "Current tool: %1\nSet it with %2tool TOOL": "Outil actuel : %1\nDéfinissez-le avec %2tool OUTIL",
+ "Unread indicator: show count": "Indicateur non lu : afficher le nombre",
+ "Press Super+G to toggle appearance": "Appuyez sur Super+G pour basculer l'apparence",
+ "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": "Cela n'a pas fonctionné. Conseils :\n- Vérifiez vos tags et paramètres NSFW\n- Si vous n'avez pas de tag en tête, tapez un numéro de page",
+ "Dots": "Points",
+ "Cloudflare WARP (1.1.1.1)": "Cloudflare WARP (1.1.1.1)",
+ "Volume mixer": "Mixeur de volume",
+ "Config file": "Fichier de configuration",
+ "API key set for %1": "Clé API définie pour %1",
+ "Online via %1 | %2's model": "En ligne via %1 | Modèle de %2",
+ "Shell command": "Commande shell",
+ "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.": "Ces régions peuvent être des images ou des parties de l'écran ayant une certaine délimitation.\nPas toujours précis.\nCela est fait avec un algorithme de traitement d'image exécuté localement, sans IA.",
+ "Reload Hyprland & Quickshell": "Recharger Hyprland et Quickshell",
+ "Resources": "Ressources",
+ "Brightness": "Luminosité",
+ "Unknown": "Inconnu",
+ "Polling interval (ms)": "Intervalle de sondage (ms)",
+ "Lock": "Verrouiller",
+ "Thinking": "Réflexion",
+ "Approve": "Approuver",
+ "Unfinished": "Non terminé",
+ "Random: Konachan": "Aléatoire : Konachan",
+ "Connected": "Connecté",
+ "Wallpaper safety enforced": "Sécurité du fond d'écran activée",
+ "Invalid arguments. Must provide `key` and `value`.": "Arguments invalides. Vous devez fournir `key` et `value`.",
+ "24h": "24h",
+ "Allows you to open sidebars by clicking or hovering screen corners regardless of bar position": "Permet d'ouvrir les panneaux latéraux en cliquant ou en survolant les coins de l'écran, quelle que soit la position de la barre",
+ "Bar style": "Style de barre",
+ "Load:": "Charge :",
+ "Open file link": "Ouvrir le lien du fichier",
+ "Ignored if terminal theming is not enabled": "Ignoré si le thème du terminal n'est pas activé",
+ "Shutdown": "Éteindre",
+ "Hour marks": "Marques des heures",
+ "Random osu! seasonal background\nImage is saved to ~/Pictures/Wallpapers": "Fond saisonnier osu! aléatoire\nL'image est sauvegardée dans ~/Pictures/Wallpapers",
+ "Online | Google's model\nFast, can perform searches for up-to-date information": "En ligne | Modèle de Google\nRapide, peut effectuer des recherches pour des informations actualisées",
+ "Current model: %1\nSet it with %2model MODEL": "Modèle actuel : %1\nDéfinissez-le avec %2model MODÈLE",
+ "Select input device": "Sélectionner le périphérique d'entrée",
+ "Connect to Wi-Fi": "Se connecter au Wi-Fi",
+ "... and %1 more": "... et %1 de plus",
+ "Cookie clock settings": "Paramètres de l'horloge cookie",
+ "Looks a bit softer and more consistent with different number of sides,\nbut has less impressive morphing": "Semble un peu plus doux et plus cohérent avec différents nombres de côtés,\nmais le morphing est moins impressionnant",
+ "Makes the clock always rotate. This is extremely expensive\n(expect 50% usage on Intel UHD Graphics) and thus impractical.": "Fait tourner l'horloge en permanence. C'est extrêmement gourmand en ressources\n(attendez-vous à 50% d'utilisation sur Intel UHD Graphics) et donc peu pratique.",
+ "Can only be turned on using the 'Dots' or 'Full' dial style for aesthetic reasons": "Ne peut être activé qu'avec le style de cadran 'Points' ou 'Plein' pour des raisons esthétiques",
+ "Can't be turned on when using 'Numbers' dial style for aesthetic reasons": "Ne peut pas être activé avec le style de cadran 'Chiffres' pour des raisons esthétiques",
+ "Brightness and volume": "Luminosité et volume",
+ "Choose file": "Choisir un fichier",
+ "Invalid model. Supported: \n```": "Modèle invalide. Pris en charge : \n```",
+ "Task Manager": "Gestionnaire de tâches",
+ "Charging:": "En charge :",
+ "Illegal increment": "Incrément illégal",
+ "Total:": "Total :",
+ "or": "ou",
+ "Battery": "Batterie",
+ "Timeout duration (if not defined by notification) (ms)": "Durée d'expiration (si non définie par la notification) (ms)",
+ "Cancel": "Annuler",
+ "Locked": "Verrouillé",
+ "Temperature: %1": "Température : %1",
+ "Hover to trigger": "Survoler pour déclencher",
+ "Command rejected by user": "Commande rejetée par l'utilisateur",
+ "User agent (for services that require it)": "Agent utilisateur (pour les services qui l'exigent)",
+ "Saved to %1": "Sauvegardé dans %1",
+ "Emojis": "Emojis",
+ "Color generation": "Génération de couleurs",
+ "Welcome app": "Application de bienvenue",
+ "Humidity": "Humidité",
+ "Page %1": "Page %1",
+ "Feels like %1": "Ressenti %1",
+ "Distro": "Distro",
+ "Transparency": "Transparence",
+ "%1 • %2 tasks": "%1 • %2 tâches",
+ "Markdown test": "Test Markdown",
+ "Invalid tool. Supported tools:\n- %1": "Outil invalide. Outils pris en charge :\n- %1",
+ "No notifications": "Aucune notification",
+ "The hentai one | Great quantity, a lot of NSFW, quality varies wildly": "Le hentai | Grande quantité, beaucoup de NSFW, la qualité varie énormément",
+ "Bluetooth": "Bluetooth",
+ "Resume": "Reprendre",
+ "Work safety": "Sécurité au travail",
+ "Temperature\nChange with /temp VALUE": "Température\nModifiez avec /temp VALEUR",
+ "Terminal: Foreground boost (%)": "Terminal : Boost du premier plan (%)",
+ "Night Light | Right-click to toggle Auto mode": "Veilleuse | Clic droit pour basculer le mode Auto",
+ "Closet": "Garde-robe",
+ "Yes": "Oui",
+ "Columns": "Colonnes",
+ "To set an API key, pass it with the %4 command\n\nTo view the key, pass \"get\" with the command
\n\n### For %1:\n\n**Link**: %2\n\n%3": "Pour définir une clé API, passez-la avec la commande %4\n\nPour afficher la clé, passez \"get\" avec la commande
\n\n### Pour %1 :\n\n**Lien** : %2\n\n%3",
+ "Kill conflicting programs?": "Tuer les programmes en conflit ?",
+ "For storing API keys and other sensitive information": "Pour stocker les clés API et autres informations sensibles",
+ "Reject": "Rejeter",
+ "Set API key": "Définir la clé API",
+ ". 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.)!": ". Notes pour Zerochan :\n- Vous devez entrer une couleur\n- Définissez votre nom d'utilisateur zerochan dans l'option de configuration `sidebar.booru.zerochan.username`. Vous [pourriez être banni si vous ne le faites pas](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": "Contenu",
+ "Pomodoro": "Pomodoro",
+ "Vertical": "Vertical",
+ "Pick a wallpaper": "Choisir un fond d'écran",
+ "Load chat from %1": "Charger la conversation depuis %1",
+ "Launch on startup": "Lancer au démarrage",
+ "Add": "Ajouter",
+ "Style: general": "Style : général",
+ "Use Levenshtein distance-based algorithm instead of fuzzy": "Utiliser l'algorithme basé sur la distance de Levenshtein au lieu du flou",
+ "Shell & utilities theming must also be enabled": "Le thème shell et utilitaires doit également être activé",
+ "Workspace": "Espace de travail",
+ "Translator": "Traducteur",
+ "Free:": "Libre :",
+ "🌿 Long break: %1 minutes": "🌿 Longue pause : %1 minutes",
+ "Value scroll": "Défilement de valeur",
+ "Bar position": "Position de la barre",
+ "Language": "Langue",
+ "Current API endpoint: %1\nSet it with %2mode PROVIDER": "Point de terminaison API actuel : %1\nDéfinissez-le avec %2mode FOURNISSEUR",
+ "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": "Rappel : sur la plupart des appareils, on peut toujours maintenir le bouton d'alimentation pour forcer l'extinction\nCela rend juste un peu plus difficile les accidents",
+ "AI": "IA",
+ "Task description": "Description de la tâche",
+ "Add task": "Ajouter une tâche",
+ "Donate": "Faire un don",
+ "Disable NSFW content": "Désactiver le contenu NSFW",
+ "Set the system prompt for the model.": "Définir l'invite système pour le modèle.",
+ "Done": "Terminé",
+ "Focus": "Focus",
+ "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": "Ouvrir le fichier de configuration du shell.\nSi le bouton ne fonctionne pas ou ne s'ouvre pas dans votre éditeur préféré,\nvous pouvez ouvrir manuellement ~/.config/illogical-impulse/config.json",
+ "View Markdown source": "Voir la source Markdown",
+ "Border": "Bordure",
+ "Temperature set to %1": "Température définie sur %1",
+ "Online | Google's model\nGoogle's state-of-the-art multipurpose model that excels at coding and complex reasoning tasks.": "En ligne | Modèle de Google\nLe modèle polyvalent de pointe de Google, excellant dans les tâches de codage et de raisonnement complexe.",
+ "Message the model... \"%1\" for commands": "Envoyer un message au modèle... \"%1\" pour les commandes",
+ "Translation goes here...": "La traduction apparaît ici...",
+ "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": "Lorsqu'activé, garde le contenu du panneau latéral droit chargé pour réduire le délai d'ouverture,\nau coût d'environ 15 Mo de RAM constamment utilisée. L'importance du délai dépend des performances de votre système.\nUtiliser un noyau personnalisé comme linux-cachyos pourrait aider",
+ "For desktop wallpapers | Good quality": "Pour les fonds d'écran bureau | Bonne qualité",
+ "🔴 Focus: %1 minutes": "🔴 Focus : %1 minutes",
+ "The current system prompt is\n\n---\n\n%1": "L'invite système actuelle est\n\n---\n\n%1",
+ "About": "À propos",
+ "Quick": "Rapide",
+ "General": "Général",
+ "UV Index": "Indice UV",
+ "Force dark mode in terminal": "Forcer le mode sombre dans le terminal",
+ "Drag or click a region • LMB: Copy • RMB: Edit": "Glisser ou cliquer sur une région • LMB : Copier • RMB : Modifier",
+ "%1 characters": "%1 caractères",
+ "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": "**Tarification** : gratuit. Données utilisées pour l'entraînement.\n\n**Instructions** : Connectez-vous à votre compte Google, autorisez AI Studio à créer un projet Google Cloud ou ce qu'il demande, revenez et cliquez sur Obtenir une clé API",
+ "Monochrome": "Monochrome",
+ "Details": "Détails",
+ "Issues": "Problèmes",
+ "Keyboard toggle": "Basculer le clavier",
+ "Might look ass. Unsupported.": "L'apparence pourrait être mauvaise. Non pris en charge.",
+ "Download": "Télécharger",
+ "%1 does not require an API key": "%1 ne nécessite pas de clé API",
+ "Style & wallpaper": "Style et fond d'écran",
+ "Second precision": "Précision des secondes",
+ "Group style": "Style de groupe",
+ "Break": "Pause",
+ "Run": "Exécuter",
+ "Enjoy! You can reopen the welcome app any time with Super+Shift+Alt+/. To open the settings app, hit Super+I": "Profitez-en ! Vous pouvez rouvrir l'application de bienvenue à tout moment avec Super+Shift+Alt+/. Pour ouvrir l'application de paramètres, appuyez sur Super+I",
+ "Interface Language": "Langue de l'interface",
+ "Game mode": "Mode jeu",
+ "Usage: %1save CHAT_NAME": "Utilisation : %1save NOM_CONVERSATION",
+ "Thin": "Fin",
+ "Light": "Clair",
+ "When not fullscreen": "Lorsqu'il n'est pas en plein écran",
+ "Commands, edit configs, search.\nTakes an extra turn to switch to search mode if that's needed": "Commandes, modifier les configs, rechercher.\nNécessite un tour supplémentaire pour passer en mode recherche si nécessaire",
+ "Privacy Policy": "Politique de confidentialité",
+ "Timeout (ms)": "Délai d'expiration (ms)",
+ "Allow NSFW content": "Autoriser le contenu NSFW",
+ "Edit": "Modifier",
+ "Digits in the middle": "Chiffres au centre",
+ "Online | Google's model\nA Gemini 2.5 Flash model optimized for cost-efficiency and high throughput.": "En ligne | Modèle de Google\nUn modèle Gemini 2.5 Flash optimisé pour le rapport coût-efficacité et le débit élevé.",
+ "Weather Service": "Service météo",
+ "Background": "Arrière-plan",
+ "Pick random from this folder": "Choisir aléatoirement dans ce dossier",
+ "Pressure": "Pression",
+ "Save": "Sauvegarder",
+ "Run command": "Exécuter la commande",
+ "Time to empty:": "Temps avant décharge :",
+ "Place at bottom": "Placer en bas",
+ "Switched to search mode. Continue with the user's request.": "Passé en mode recherche. Continuer avec la demande de l'utilisateur.",
+ "Performance Profile toggle": "Basculer le profil de performance",
+ "Sidebars": "Panneaux latéraux",
+ "Usage: %1load CHAT_NAME": "Utilisation : %1load NOM_CONVERSATION",
+ "Auto styling with Gemini": "Style automatique avec Gemini",
+ "Simple digital": "Numérique simple",
+ "No API key set for %1": "Aucune clé API définie pour %1",
+ "Enter tags, or \"%1\" for commands": "Entrez des tags, ou \"%1\" pour les commandes",
+ "%1 queries pending": "%1 requêtes en attente",
+ "Discussions": "Discussions",
+ "Tray": "Barre système",
+ "Numbers": "Chiffres",
+ "Intelligence": "Intelligence",
+ "Open network portal": "Ouvrir le portail réseau",
+ "No further instruction provided": "Aucune instruction supplémentaire fournie",
+ "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": "Langue non listée ou traductions incomplètes ?\nVous pouvez choisir de générer des traductions avec Gemini.\n1. Ouvrez le panneau latéral gauche avec Super+A, définissez le modèle sur Gemini (si ce n'est pas déjà le cas)\n2. Tapez /key, appuyez sur Entrée et suivez les instructions\n3. Tapez /key VOTRE_CLÉ_API\n4. Tapez le code locale de votre langue ci-dessous et appuyez sur Générer",
+ "Locale code, e.g. fr_FR, de_DE, zh_CN...": "Code de locale, ex. fr_FR, de_DE, zh_CN...",
+ "Select language": "Sélectionner la langue",
+ "Generate translation with Gemini": "Générer la traduction avec Gemini",
+ "Generating...\nDon't close this window!": "Génération en cours...\nNe fermez pas cette fenêtre !",
+ "Generate\nTypically takes 2 minutes": "Générer\nPrend généralement 2 minutes",
+ "Use system file picker": "Utiliser le sélecteur de fichiers système",
+ "Wallpaper selector": "Sélecteur de fond d'écran",
+ "but force at absolute corner": "mais forcer au coin absolu",
+ "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": "Lorsque l'option précédente est désactivée et celle-ci est activée,\nvous pouvez toujours survoler l'extrémité du coin pour ouvrir le panneau latéral,\net la zone restante peut être utilisée pour le défilement du volume/luminosité",
+ "Copy path": "Copier le chemin",
+ "Windows": "Fenêtres",
+ "Regenerate": "Régénérer",
+ "Microphone": "Microphone",
+ "Unmuted": "Non silencieux",
+ "System sound": "Son système",
+ "Enable now": "Activer maintenant",
+ "Night Light": "Veilleuse",
+ "Show aim lines": "Afficher les lignes de visée",
+ "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": "Pourquoi c'est utile :\nPour les valeurs non nulles, cela ne se déclenche pas quand vous atteignez le\ncoin de l'écran le long du bord horizontal, mais se déclenchera\nquand vous le faites le long du bord vertical",
+ "Please charge!\nAutomatic suspend triggers at %1%": "Veuillez brancher !\nLa suspension automatique se déclenche à %1%",
+ "Example use case: eroge on one workspace, dark Discord window on another": "Exemple d'utilisation : jeu eroge sur un espace de travail, fenêtre Discord sombre sur un autre",
+ "Couldn't recognize music": "Impossible de reconnaître la musique",
+ "Automatic": "Automatique",
+ "Hint target regions": "Indiquer les régions cibles",
+ "Devices": "Appareils",
+ "Eye protection": "Protection oculaire",
+ "Japanese": "Japonais",
+ "Layers": "Calques",
+ "Listening...": "Écoute en cours...",
+ "LMB to enable/disable\nRMB to toggle size\nScroll to swap position": "LMB pour activer/désactiver\nRMB pour changer la taille\nDéfiler pour changer la position",
+ "Identify Music": "Identifier la musique",
+ "Quick toggles": "Bascules rapides",
+ "Hide sussy/anime wallpapers": "Masquer les fonds d'écran douteux/anime",
+ "Android": "Android",
+ "Show": "Afficher",
+ "Muted": "Silencieux",
+ "Audio input | Right-click for volume mixer & device selector": "Entrée audio | Clic droit pour le mixeur de volume et le sélecteur de périphérique",
+ "Region selector (screen snipping/Google Lens)": "Sélecteur de région (capture d'écran/Google Lens)",
+ "Total duration timeout (s)": "Délai de durée totale (s)",
+ "Music Recognition": "Reconnaissance musicale",
+ "Night Light | Right-click to configure": "Veilleuse | Clic droit pour configurer",
+ "Anti-flashbang (experimental)": "Anti-flashbang (expérimental)",
+ "Digital clock settings": "Paramètres de l'horloge numérique",
+ "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.": "Peuvent être des images ou des parties de l'écran ayant une certaine délimitation.\nPas toujours précis.\nCela est fait avec un algorithme de traitement d'image exécuté localement, sans IA.",
+ "Polling interval (m)": "Intervalle de sondage (m)",
+ "Inactive": "Inactif",
+ "Authentication": "Authentification",
+ "Full warning": "Avertissement complet",
+ "Power Profile": "Profil d'alimentation",
+ "Content region": "Région de contenu",
+ "Internet": "Internet",
+ "Record": "Enregistrer",
+ "Circle selection": "Sélection en cercle",
+ "Edit quick toggles": "Modifier les bascules rapides",
+ "Virtual Keyboard": "Clavier virtuel",
+ "Music Recognized": "Musique reconnue",
+ "EasyEffects": "EasyEffects",
+ "Make sure you have songrec installed": "Assurez-vous que songrec est installé",
+ "Dark Mode": "Mode sombre",
+ "No device": "Aucun appareil",
+ "Animate time change": "Animer le changement d'heure",
+ "It may take a few seconds to update": "La mise à jour peut prendre quelques secondes",
+ "Polling interval (s)": "Intervalle de sondage (s)",
+ "Perhaps what you're listening to is too niche": "Ce que vous écoutez est peut-être trop de niche",
+ "Fahrenheit unit": "Unité Fahrenheit",
+ "Sliders": "Curseurs",
+ "Roman": "Romain",
+ "Number style": "Style de numéro",
+ "Intensity": "Intensité",
+ "Google Lens": "Google Lens",
+ "Circle": "Cercle",
+ "Hide clipboard images copied from sussy sources": "Masquer les images du presse-papiers copiées depuis des sources douteuses",
+ "Scroll to Bottom": "Défiler vers le bas",
+ "Enabled": "Activé",
+ "Nothing": "Rien",
+ "Audio input": "Entrée audio",
+ "with vertical offset": "avec décalage vertical",
+ "Padding": "Rembourrage",
+ "Please unplug the charger": "Veuillez débrancher le chargeur",
+ "Show notifications": "Afficher les notifications",
+ "Path copied": "Chemin copié",
+ "On-screen keyboard": "Clavier à l'écran",
+ "City name": "Nom de la ville",
+ "Click to cycle through power profiles": "Cliquer pour parcourir les profils d'alimentation",
+ "Recognize music | Right-click to toggle source": "Reconnaître la musique | Clic droit pour changer la source",
+ "Use old sine wave cookie implementation": "Utiliser l'ancienne implémentation cookie en onde sinusoïdale",
+ "Rectangular selection": "Sélection rectangulaire",
+ "Audio output": "Sortie audio",
+ "Applications": "Applications",
+ "Circle to Search": "Cercle pour rechercher",
+ "Audio output | Right-click for volume mixer & device selector": "Sortie audio | Clic droit pour le mixeur de volume et le sélecteur de périphérique",
+ "Enable GPS based location": "Activer la localisation par GPS",
+ "You'll need to enter your Gemini API key first.\nType /key on the sidebar for instructions.": "Vous devrez d'abord saisir votre clé API Gemini.\nTapez /key dans le panneau latéral pour les instructions.",
+ "Sounds": "Sons",
+ "Active": "Actif",
+ "Keep awake": "Rester éveillé",
+ "Auto,": "Auto,",
+ "Normal": "Normal",
+ "Force hover open at absolute corner": "Forcer l'ouverture au survol au coin absolu",
+ "Open the shell config file\nAlternatively right-click to copy path": "Ouvrir le fichier de configuration du shell\nAlternativement, clic droit pour copier le chemin",
+ "Recognize music": "Reconnaître la musique",
+ "Stroke width": "Largeur du trait",
+ "Use varying shapes for password characters": "Utiliser des formes variées pour les caractères du mot de passe",
+ "Battery full": "Batterie pleine",
+ "Pin": "Épingler",
+ "Unpin": "Désépingler"
+}
diff --git a/dots/.config/quickshell/ii/translations/ru_RU.json b/dots/.config/quickshell/ii/translations/ru_RU.json
index 998b7a34d..9066db724 100644
--- a/dots/.config/quickshell/ii/translations/ru_RU.json
+++ b/dots/.config/quickshell/ii/translations/ru_RU.json
@@ -5,8 +5,8 @@
"No pending tasks": "Тут пусто!",
"Positioning": "Расположение",
"Set temperature (randomness) of the model. Values range between 0 to 2 for Gemini, 0 to 1 for other models. Default is 0.5.": "Установить температуру (случайность) модели. Диапазон: 0–2 для Gemini, 0–1 для других. По умолчанию 0,5",
- "Critical warning": "Критич. %",
- "Unknown Artist": "Неизв. исполнитель",
+ "Critical warning": "Критический %",
+ "Unknown Artist": "Неизвестный исполнитель",
"Web search": "Найти",
"Load prompt from %1": "Загрузка промпта из %1",
"Attach a file. Only works with Gemini.": "Прикрепить файл (только Gemini)",
@@ -34,7 +34,7 @@
"Time": "Время",
"Help & Support": "Помощь",
"Bubble": "Пузырчатый",
- "Large images | God tier quality, no NSFW.": "Большие изобр. | Отличное качество, без NSFW.",
+ "Large images | God tier quality, no NSFW.": "Большие изображения | Отличное качество, без NSFW.",
"Dark": "Тёмный",
"Center clock": "Часы по центру экрана",
"Search, calculate or run": "Поиск, расчёт, запуск",
@@ -56,7 +56,7 @@
"Open editor": "Открыть редактор",
"%1 notifications": "%1 уведомлений",
"Region width": "Ширина области",
- "Max allowed increase": "Макс. Разница",
+ "Max allowed increase": "Макс. разница",
"Enable translator": "Переводчик в левой панели",
"Constantly rotate": "Постоянное вращение",
"Automatically suspends the system when battery is low": "Авто-сон при низком зар.",
@@ -79,7 +79,7 @@
"Exceeded max allowed": "Превышен максимум",
"Keep right sidebar loaded": "Держать правую панель в ОЗУ",
"Left": "Слева",
- "Rect": "Прямоугольный",
+ "Rect": "Прямоугольное",
"Lap": "Круг",
"Screen snip": "Скриншот",
"Reset": "Ресет",
@@ -87,7 +87,7 @@
"Dark/Light toggle": "Тоггл темы",
"12h am/pm": "12ч am/pm",
"Download complete": "Загрузка завершена",
- "Enable blur": "Вкл. размытие",
+ "Enable blur": "Включить размытие",
"Second hand": "Стиль секундной стрелки",
"Bar & screen": "Панель и экран",
"Discharging:": "Разряд:",
@@ -101,7 +101,7 @@
"OK": "OK",
"Settings": "Настройки",
"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.)": "Обычно безопасно и нужно для браузера и AI-панели\nПолезно при блокировке при запуске вместо менеджера дисплея (GDM, SDDM и т.д)",
- "Use Hyprlock (instead of Quickshell)": "Исп. Hyprlock (вместо Quickshell)",
+ "Use Hyprlock (instead of Quickshell)": "Использовать Hyprlock (вместо Quickshell)",
"Crosshair code (in Valorant's format)": "Код прицела (формат Valorant)",
"Silent": "Тихий",
"Useless buttons": "Бесполезные кнопки",
@@ -118,17 +118,17 @@
"Search wallpapers": "Поиск обоев",
"Mic toggle": "Тоггл микрофона",
"Input": "Вход",
- "Also unlock keyring": "Также разблок. связку ключей",
+ "Also unlock keyring": "Также разблокировать связку ключей",
"Configuration": "Конфиг",
"Keep system awake": "Оставлять систему включённой",
- "Unknown command:": "Неизв. команда:",
+ "Unknown command:": "Неизвестная команда:",
"Anime boorus": "Аниме-боору",
"To Do:": "Задачи:",
"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 определяет тип обоев и подбирает пресет.\nСначала укажите API-ключ Gemini в левой панели.\nИзображения уменьшаются для производительности -\nне выбирайте обои с конфиденциальными данными.",
"Bottom": "Снизу",
"Clear the current list of images": "Очистить список изображений",
"Sunrise": "Рассвет",
- "Show app icons": "Показ. иконки прилож.",
+ "Show app icons": "Показывать иконки приложений",
"Format": "Формат",
"Make sure your player has MPRIS support\nor try turning off duplicate player filtering": "Убедитесь, что плеер поддерживает MPRIS\nили отключите в конфиге «filterDuplicatePlayers»",
"Pause": "Пауза",
@@ -161,7 +161,7 @@
"12h AM/PM": "12ч AM/PM",
"Number show delay when pressing Super (ms)": "Задержка номеров Super (мс)",
"Fill": "Залитый",
- "Always show numbers": "Всегда показ. номера",
+ "Always show numbers": "Всегда показывать номера",
"Dot": "Точка",
"Provider set to": "Провайдер:",
"Unknown Title": "Неизв. название",
@@ -175,7 +175,7 @@
"Scale (%)": "Масштаб (%)",
"Copy": "Копировать",
"Usage": "Исп.",
- "Set the tool to use for the model.": "Задать инструмент модели.",
+ "Set the tool to use for the model.": "Задать инструмент модели",
"Disable tools": "Выкл. инструменты",
"Connect": "Подключить",
"Allow NSFW": "Разрешить NSFW",
@@ -225,8 +225,8 @@
"Low battery": "Низкий заряд",
"Make icons pinned by default": "Закреплять все иконки",
"Get the next page of results": "Следующая стр. результатов",
- "Invalid API provider. Supported: \n-": "Неверный провайдер. Поддерж:\n-",
- "Show \"Locked\" text": "Показ. текст «Заблокировано»",
+ "Invalid API provider. Supported: \n-": "Неверный провайдер. Поддерживаются:\n-",
+ "Show \"Locked\" text": "Показывать текст «Заблокировано»",
"Not visible to model": "Не видно модели",
"Lock screen": "Экран блокировки",
"Save to Downloads": "В «Загрузки»",
@@ -264,7 +264,7 @@
"Search": "Поиск",
"Tip: right-clicking a group\nalso expands it": "Совет: ПКМ по группе - раскрыть",
"Bar": "Панель",
- "Clipboard": "Клипборд",
+ "Clipboard": "Буфер обмена",
"Stopwatch": "Секундомер",
"Enter text to translate...": "Введите текст для перевода...",
"App": "Приложение",
@@ -337,7 +337,7 @@
"Brightness and volume": "Яркость и громкость",
"Choose file": "Выбор обоев",
"Invalid model. Supported: \n```": "Неверная модель. Поддерживаемые: \n```",
- "Task Manager": "Дисп. задач",
+ "Task Manager": "Диспетчер задач",
"Charging:": "Заряд:",
"Illegal increment": "Недопустимый шаг",
"Total:": "Всего:",
@@ -367,7 +367,7 @@
"Resume": "Продолжить",
"Work safety": "Безопасность",
"Temperature\nChange with /temp VALUE": "Температура\nИзменить: /temp ЗНАЧЕНИЕ",
- "Terminal: Foreground boost (%)": "Терминал: усил. перед. плана (%)",
+ "Terminal: Foreground boost (%)": "Терминал: усиление переднего плана (%)",
"Night Light | Right-click to toggle Auto mode": "Ночной режим | ПКМ для авторежима",
"Closet": "Скрыто",
"Yes": "Да",
@@ -402,7 +402,7 @@
"Add task": "Добавить задачу",
"Donate": "Поддержать",
"Disable NSFW content": "Выкл. NSFW",
- "Set the system prompt for the model.": "Задать сист. промпт.",
+ "Set the system prompt for the model.": "Задать системный промпт",
"Done": "Готово",
"Focus": "Фокус",
"View Markdown source": "Исходник Markdown",
@@ -472,7 +472,7 @@
"Generate translation with Gemini": "Сгенерировать перевод с Gemini",
"Generating...\nDon't close this window!": "Генерация...\nНе закрывайте окно!",
"Generate\nTypically takes 2 minutes": "Сгенерировать\nОбычно ~2 мин",
- "Use system file picker": "Системный файл. менеджер",
+ "Use system file picker": "Системный файл-менеджер",
"Wallpaper selector": "Выбор обоев",
"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": "Если предыдущий параметр выключен, а этот включён,\nможно навести на край угла для открытия панели,\nоставшаяся область работает для прокрутки громкости/яркости",
"Copy path": "Копировать путь",
@@ -496,7 +496,7 @@
"LMB to enable/disable\nRMB to toggle size\nScroll to swap position": "ЛКМ - вкл/выкл\nПКМ - изменить размер\nПрокрутка - поменять позицию",
"Identify Music": "Определить музыку",
"Quick toggles": "Быстрые тогглы",
- "Hide sussy/anime wallpapers": "Скрывать подозр./аниме обои",
+ "Hide sussy/anime wallpapers": "Скрывать подозрительные/аниме обои",
"Android": "Android",
"Show": "Показать",
"Muted": "Мут",
@@ -506,7 +506,7 @@
"Music Recognition": "Поиск музыки",
"Night Light | Right-click to configure": "Ночной свет | ПКМ для настройки",
"Anti-flashbang (experimental)": "Анти-вспышка (эксперим)",
- "Digital clock settings": "Настройки цифр. часов",
+ "Digital clock settings": "Настройки цифровых часов",
"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)": "Интервал опроса (мин)",
"Inactive": "Неактивно",
@@ -534,7 +534,7 @@
"Intensity": "Интенсивность",
"Google Lens": "Google Lens",
"Circle": "Круговое",
- "Hide clipboard images copied from sussy sources": "Скрывать изобр. из подозр. источников",
+ "Hide clipboard images copied from sussy sources": "Скрывать изображения из подозрительных источников",
"Scroll to Bottom": "В конец",
"Enabled": "Вкл.",
"Nothing": "Тут пусто!",
@@ -564,7 +564,7 @@
"Open the shell config file\nAlternatively right-click to copy path": "Открыть конфиг оболочки\nПКМ - скопировать путь",
"Recognize music": "Найти музыку",
"Stroke width": "Толщина обводки",
- "Use varying shapes for password characters": "Разные фигуры для симв. пароля",
+ "Use varying shapes for password characters": "Разные фигуры для символов пароля",
"Battery full": "Батарея заряжена",
"Image source": "Источник изображения (ссылка)",
"Restart": "Перезапустить",
@@ -633,7 +633,7 @@
"e.g. for Ctrl, for Alt, for Shift, etc": "напр. для Ctrl, для Alt, для Shift и т.д.",
"Unpin from taskbar": "Открепить от панели",
"Snipping area": "Область скриншота",
- "Font roundness": "Скруглённость шр.",
+ "Font roundness": "Скруглённость",
"Numbers font": "Шрифт чисел",
"Move right": "Переместить вправо",
"Unknown Application": "Неизв. приложение",
@@ -646,7 +646,7 @@
"Emoji": "Эмодзи",
"Font family name (e.g., JetBrains Mono NF)": "Шрифт (напр, JetBrains Mono NF)",
"Snip": "Скриншот",
- "Font weight": "Насыщенность шр.",
+ "Font weight": "Насыщенность ",
"More Bluetooth settings": "Доп. настройки Bluetooth",
"Recognize text": "Распознать текст",
"Pinned": "Закреплено",
@@ -667,7 +667,7 @@
"Turn on from sunset to sunrise": "От заката до рассвета",
"Do you want to allow this app to make changes to your device?": "Разрешить приложению изменять устройство?",
"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": "Запись обл.",
"You can also manually edit cheatsheet.superKey": "Также вы можете вручную отредактировать cheatsheet.superKey",
"Sign out": "Выйти",
@@ -678,7 +678,7 @@
"Sound input": "Звуковой вход",
"Manage accounts": "Упр. учётными записями",
"+%1 notifications": "+%1 уведомлений",
- "Font family": "Семейство шр.",
+ "Font family": "Семейство шрифта",
"RAM": "ОЗУ",
"Commands": "Команды",
"Title font": "Шрифт заголовка",
@@ -690,7 +690,7 @@
"Speakers (%1): %2": "Динамики (%1): %2",
"Manage my account": "Упр. аккаунтом",
"Use symbols for function keys": "Спец. символы для особых клавиш",
- "Aligns the date and quote to left, center or right depending on its position on the screen.": "Выравн. по позиции на экране.",
+ "Aligns the date and quote to left, center or right depending on its position on the screen.": "Выравнивание по позиции на экране.",
"Darken screen": "Затемнить экран",
"Move to front": "На перед. план",
"Overlay: Floating Image": "Оверлей: изображение",
@@ -703,7 +703,7 @@
"All": "Все",
"Used for general UI text": "Для общего текста UI",
"Media": "Медиа",
- "Enable update checks": "Вкл. проверку апдейтов",
+ "Enable update checks": "Вкл. проверку обновлений",
"Widget: Clock": "Виджет: часы",
"Clock style (locked)": "Стиль часов (на заблок. экране)",
"Replace for \"Scroll ↓\", \"Scroll ↑\", L \"LMB\", R \"RMB\", \"Scroll ↑/↓\" and ⇞/⇟ for \"Page_↑/↓\"": "Заменить на «Scroll ↓», на «Scroll ↑», L на «LMB», R на «RMB», на «Scroll ↑/↓» и ⇞/⇟ на «Page_↑/↓»",
@@ -734,9 +734,9 @@
"Expressive font": "Выразительный шрифт",
"VPN": "VPN",
"Text extractor": "Извлечение текста",
- "Least busy": "Наим. загруж.",
+ "Least busy": "Менее загруж.",
"Command-line-invoked Action": "Действие из ком. строки",
- "Show date": "Показ. дату",
+ "Show date": "Показывать дату",
"Window": "Окно",
"Network": "Сеть",
"Input device": "Устр. ввода",
@@ -757,4 +757,4 @@
"Font family name": "Назв. семейства",
"Pin": "Закреп",
"Unpin": "Откреп"
-}
+}
\ No newline at end of file
diff --git a/sdata/deps-info.md b/sdata/deps-info.md
index b28e96033..711eace07 100644
--- a/sdata/deps-info.md
+++ b/sdata/deps-info.md
@@ -219,6 +219,11 @@ Extra dependencies.
- `kirigami`
- `kdialog`
- `syntax-highlighting`
+- `vulkan-headers`
+- `libdrm`
+- `cpptrace`
+- `jemalloc`
+- `mesa`
## illogical-impulse-bibata-modern-classic-bin
- [source](https://github.com/ful1e5/Bibata_Cursor)
@@ -227,7 +232,3 @@ Extra dependencies.
## illogical-impulse-microtex-git
- [source](https://github.com/NanoMichael/MicroTeX)
- This package will be installed as `/opt/MicroTeX`.
-
-## illogical-impulse-oneui4-icons-git
-- [source](https://github.com/end-4/OneUI4-Icons)
-- Customed version of normal oneui4-icons.
diff --git a/sdata/dist-arch/illogical-impulse-audio/PKGBUILD b/sdata/dist-arch/illogical-impulse-audio/PKGBUILD
index fe645cf37..772fa8383 100644
--- a/sdata/dist-arch/illogical-impulse-audio/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-audio/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-audio
pkgver=1.0
-pkgrel=2
+pkgrel=3
pkgdesc='Illogical Impulse Audio Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-backlight/PKGBUILD b/sdata/dist-arch/illogical-impulse-backlight/PKGBUILD
index 2cca7c7fa..e87abfaff 100644
--- a/sdata/dist-arch/illogical-impulse-backlight/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-backlight/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-backlight
pkgver=1.0
-pkgrel=1
+pkgrel=2
pkgdesc='Illogical Impulse Backlight Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-basic/PKGBUILD b/sdata/dist-arch/illogical-impulse-basic/PKGBUILD
index 3948d41bf..c1e9867b6 100644
--- a/sdata/dist-arch/illogical-impulse-basic/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-basic/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-basic
pkgver=1.0
-pkgrel=2
+pkgrel=3
pkgdesc='Illogical Impulse Basic Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-bibata-modern-classic-bin/PKGBUILD b/sdata/dist-arch/illogical-impulse-bibata-modern-classic-bin/PKGBUILD
index 42617c367..0c3277672 100644
--- a/sdata/dist-arch/illogical-impulse-bibata-modern-classic-bin/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-bibata-modern-classic-bin/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-bibata-modern-classic-bin
pkgver=2.0.6
-pkgrel=1
+pkgrel=2
pkgdesc="Material Based Cursor Theme, installed for illogical-impulse dotfiles"
arch=('any')
url="https://github.com/ful1e5/Bibata_Cursor"
diff --git a/sdata/dist-arch/illogical-impulse-fonts-themes/PKGBUILD b/sdata/dist-arch/illogical-impulse-fonts-themes/PKGBUILD
index 91e61af82..175ab76e4 100644
--- a/sdata/dist-arch/illogical-impulse-fonts-themes/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-fonts-themes/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-fonts-themes
pkgver=1.0
-pkgrel=5
+pkgrel=6
pkgdesc='Illogical Impulse Fonts and Theming Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-hyprland/PKGBUILD b/sdata/dist-arch/illogical-impulse-hyprland/PKGBUILD
index 84eefda3c..f7a63c707 100644
--- a/sdata/dist-arch/illogical-impulse-hyprland/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-hyprland/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-hyprland
pkgver=1.0
-pkgrel=4
+pkgrel=5
pkgdesc='Illogical Impulse Hyprland relatated packages'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-kde/PKGBUILD b/sdata/dist-arch/illogical-impulse-kde/PKGBUILD
index 0e09ee748..2b692e93c 100644
--- a/sdata/dist-arch/illogical-impulse-kde/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-kde/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-kde
pkgver=1.0
-pkgrel=2
+pkgrel=3
pkgdesc='Illogical Impulse KDE Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-microtex-git/PKGBUILD b/sdata/dist-arch/illogical-impulse-microtex-git/PKGBUILD
index 8b4ab8f36..c9278d2bf 100644
--- a/sdata/dist-arch/illogical-impulse-microtex-git/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-microtex-git/PKGBUILD
@@ -1,7 +1,8 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-microtex-git
_pkgname=MicroTeX
pkgver=r494.0e3707f
-pkgrel=2
+pkgrel=3
pkgdesc='MicroTeX for illogical-impulse dotfiles.'
#pkgdesc="A dynamic, cross-platform, and embeddable LaTeX rendering library"
arch=("x86_64")
diff --git a/sdata/dist-arch/illogical-impulse-oneui4-icons-git/.gitignore b/sdata/dist-arch/illogical-impulse-oneui4-icons-git/.gitignore
deleted file mode 100644
index 7a8ab9346..000000000
--- a/sdata/dist-arch/illogical-impulse-oneui4-icons-git/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/OneUI4-Icons/
diff --git a/sdata/dist-arch/illogical-impulse-oneui4-icons-git/PKGBUILD b/sdata/dist-arch/illogical-impulse-oneui4-icons-git/PKGBUILD
deleted file mode 100644
index ad8270712..000000000
--- a/sdata/dist-arch/illogical-impulse-oneui4-icons-git/PKGBUILD
+++ /dev/null
@@ -1,19 +0,0 @@
-pkgname=illogical-impulse-oneui4-icons-git
-_pkgname=OneUI4-Icons
-pkgver=r70.55eada4
-pkgrel=1
-pkgdesc="A fork of mjkim0727/OneUI4-Icons for illogical-impulse dotfiles."
-arch=('x86_64')
-url="https://github.com/end-4/OneUI4-Icons"
-license=('GPL3')
-source=("git+${url}.git")
-sha256sums=('SKIP')
-options=('!strip')
-
-package() {
- cd $srcdir/$_pkgname
- install -dm755 "$pkgdir/usr/share/icons"
- for _i in OneUI{,-dark,-light}; do
- cp -dr --no-preserve=mode "$_i" "$pkgdir/usr/share/icons/$_i"
- done
-}
diff --git a/sdata/dist-arch/illogical-impulse-portal/PKGBUILD b/sdata/dist-arch/illogical-impulse-portal/PKGBUILD
index 2715a96b8..e380067d0 100644
--- a/sdata/dist-arch/illogical-impulse-portal/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-portal/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-portal
pkgver=1.0
-pkgrel=2
+pkgrel=3
pkgdesc='Illogical Impulse XDG Desktop Portals'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-python/PKGBUILD b/sdata/dist-arch/illogical-impulse-python/PKGBUILD
index a0de2df19..e82e69bc4 100644
--- a/sdata/dist-arch/illogical-impulse-python/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-python/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-python
pkgver=1.1
-pkgrel=4
+pkgrel=5
pkgdesc='Illogical Impulse Python Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-quickshell-git/PKGBUILD b/sdata/dist-arch/illogical-impulse-quickshell-git/PKGBUILD
index 477e26494..418f0253f 100644
--- a/sdata/dist-arch/illogical-impulse-quickshell-git/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-quickshell-git/PKGBUILD
@@ -3,13 +3,14 @@ _commit='7511545ee20664e3b8b8d3322c0ffe7567c56f7a'
# https://git.outfoxxed.me/quickshell/quickshell/commits/branch/master
# https://aur.archlinux.org/packages/quickshell-git
+groups=(illogical-impulse)
_prefix='illogical-impulse'
conflicts=("quickshell-git")
_pkgname=quickshell
pkgname="$_prefix-$_pkgname-git"
pkgver=0.1.0.r1
-pkgrel=6
+pkgrel=7
pkgdesc="$_pkgname-git pinned commit and extra deps for $_prefix"
arch=(x86_64 aarch64)
url='https://git.outfoxxed.me/quickshell/quickshell'
diff --git a/sdata/dist-arch/illogical-impulse-screencapture/PKGBUILD b/sdata/dist-arch/illogical-impulse-screencapture/PKGBUILD
index 6373dcb5c..34282e485 100644
--- a/sdata/dist-arch/illogical-impulse-screencapture/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-screencapture/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-screencapture
pkgver=1.0
-pkgrel=1
+pkgrel=2
pkgdesc='Illogical Impulse Screenshot and Recording Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-toolkit/PKGBUILD b/sdata/dist-arch/illogical-impulse-toolkit/PKGBUILD
index fa0823ea7..65551c2f3 100644
--- a/sdata/dist-arch/illogical-impulse-toolkit/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-toolkit/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-toolkit
pkgver=1.0
-pkgrel=2
+pkgrel=3
pkgdesc='Illogical Impulse Toolkit Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/illogical-impulse-widgets/PKGBUILD b/sdata/dist-arch/illogical-impulse-widgets/PKGBUILD
index fa9d4df02..3a1bd77d0 100644
--- a/sdata/dist-arch/illogical-impulse-widgets/PKGBUILD
+++ b/sdata/dist-arch/illogical-impulse-widgets/PKGBUILD
@@ -1,6 +1,7 @@
+groups=(illogical-impulse)
pkgname=illogical-impulse-widgets
pkgver=1.0
-pkgrel=6
+pkgrel=7
pkgdesc='Illogical Impulse Widget Dependencies'
arch=(any)
license=(None)
diff --git a/sdata/dist-arch/install-deps.sh b/sdata/dist-arch/install-deps.sh
index 6cdb8d6f9..864c9cd2f 100644
--- a/sdata/dist-arch/install-deps.sh
+++ b/sdata/dist-arch/install-deps.sh
@@ -15,7 +15,7 @@ install-yay(){
remove_deprecated_dependencies(){
printf "${STY_CYAN}[$0]: Removing deprecated dependencies:${STY_RST}\n"
local list=()
- list+=(illogical-impulse-{microtex,pymyc-aur})
+ list+=(illogical-impulse-{microtex,pymyc-aur,oneui4-icons-git})
list+=(hyprland-qtutils)
list+=({quickshell,hyprutils,hyprpicker,hyprlang,hypridle,hyprland-qt-support,hyprland-qtutils,hyprlock,xdg-desktop-portal-hyprland,hyprcursor,hyprwayland-scanner,hyprland}-git)
list+=(matugen-bin)
@@ -94,7 +94,6 @@ metapkgs=(./sdata/dist-arch/illogical-impulse-{audio,backlight,basic,fonts-theme
metapkgs+=(./sdata/dist-arch/illogical-impulse-hyprland)
metapkgs+=(./sdata/dist-arch/illogical-impulse-microtex-git)
metapkgs+=(./sdata/dist-arch/illogical-impulse-quickshell-git)
-# metapkgs+=(./sdata/dist-arch/packages/illogical-impulse-oneui4-icons-git)
[[ -f /usr/share/icons/Bibata-Modern-Classic/index.theme ]] || \
metapkgs+=(./sdata/dist-arch/illogical-impulse-bibata-modern-classic-bin)
@@ -110,7 +109,7 @@ case $SKIP_PLASMAINTG in
true) sleep 0;;
*)
if $ask;then
- echo -e "${STY_YELLOW}[$0]: NOTE: The size of \"plasma-browser-integration\" is about 600 MiB.${STY_RST}"
+ echo -e "${STY_YELLOW}[$0]: NOTE: The size of \"plasma-browser-integration\" is ~600 KiB, but if you don't yet have KDE on your system it'll pull an extra ~600MiB of packages.${STY_RST}"
echo -e "${STY_YELLOW}It is needed if you want playtime of media in Firefox to be shown on the music controls widget.${STY_RST}"
echo -e "${STY_YELLOW}Install it? [y/N]${STY_RST}"
read -p "====> " p
diff --git a/sdata/dist-arch/uninstall-deps.sh b/sdata/dist-arch/uninstall-deps.sh
index 60dda0fd0..01db475f7 100644
--- a/sdata/dist-arch/uninstall-deps.sh
+++ b/sdata/dist-arch/uninstall-deps.sh
@@ -1,6 +1,6 @@
# This script is meant to be sourced.
# It's not for directly running.
-for i in illogical-impulse-{quickshell-git,audio,backlight,basic,bibata-modern-classic-bin,fonts-themes,hyprland,kde,microtex-git,oneui4-icons-git,portal,python,screencapture,toolkit,widgets} plasma-browser-integration; do
+for i in illogical-impulse-{quickshell-git,audio,backlight,basic,bibata-modern-classic-bin,fonts-themes,hyprland,kde,microtex-git,portal,python,screencapture,toolkit,widgets} plasma-browser-integration; do
v yay -Rns $i
done
diff --git a/sdata/dist-fedora/SPECS/cpptrace.spec b/sdata/dist-fedora/SPECS/cpptrace.spec
new file mode 100644
index 000000000..a4542bf96
--- /dev/null
+++ b/sdata/dist-fedora/SPECS/cpptrace.spec
@@ -0,0 +1,42 @@
+%global source_date_epoch_from_changelog 0
+
+%global tag 1.0.4
+%global commits 1054
+%global commit 91b6b78e408a8b1c0b7146c9034a03156c082da2
+%global shortcommit %(c=%{commit}; echo ${c:0:7})
+
+Name: cpptrace
+Version: 1.0.4
+Release: 1%{?dist}
+Summary: Simple, portable, and self-contained stacktrace library for C++11 and newer
+
+License: MIT
+URL: https://github.com/jeremy-rifkin/cpptrace
+Source0: %{url}/archive/%{commit}/cpptrace-%{shortcommit}.tar.gz
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+BuildRequires: make
+BuildRequires: ninja-build
+
+%description
+C++ lightweight logging library used by Quickshell.
+
+%prep
+%autosetup -n cpptrace-%{commit} -p1
+
+%build
+mkdir -p build
+cd build
+cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCPPTRACE_UNWIND_WITH_LIBUNWIND=true
+cmake --build .
+
+%install
+cd build
+DESTDIR=%{buildroot} cmake --install .
+
+%files
+%{_prefix}/local/include/*
+%{_prefix}/local/lib64/*
+%license LICENSE
+%doc README.md
diff --git a/sdata/dist-fedora/SPECS/quickshell-git.spec b/sdata/dist-fedora/SPECS/quickshell-git.spec
index 5167a1ae3..e3c6ee4a8 100644
--- a/sdata/dist-fedora/SPECS/quickshell-git.spec
+++ b/sdata/dist-fedora/SPECS/quickshell-git.spec
@@ -2,10 +2,10 @@
%bcond_with asan
-%global commit db1777c20b936a86528c1095cbcb1ebd92801402
+%global commit 7511545ee20664e3b8b8d3322c0ffe7567c56f7a
%global shortcommit %(c=%{commit}; echo ${c:0:7})
-%global commits 699
-%global snapdate 20251030
+%global commits 770
+%global snapdate 20260327
%global tag 0.2.1
Name: quickshell-git
diff --git a/sdata/dist-fedora/feddeps.toml b/sdata/dist-fedora/feddeps.toml
index aa8091ec1..7329cdfc5 100644
--- a/sdata/dist-fedora/feddeps.toml
+++ b/sdata/dist-fedora/feddeps.toml
@@ -149,6 +149,7 @@ packages = [
"libdrm",
"breakpad",
"kf6-kirigami",
+ "libunwind-devel",
# NOTE: Below are custom dependencies of illogical-impulse
"qt6-qt5compat",
"qt6-qtimageformats",
diff --git a/sdata/dist-fedora/install-deps.sh b/sdata/dist-fedora/install-deps.sh
index 18da73e06..55c0d8112 100644
--- a/sdata/dist-fedora/install-deps.sh
+++ b/sdata/dist-fedora/install-deps.sh
@@ -5,6 +5,7 @@
# -------------------------
user_config="${REPO_ROOT}/sdata/dist-fedora/user_data.yaml"
rpmbuildroot="${REPO_ROOT}/cache/rpmbuild"
+rpm_specs="${REPO_ROOT}/sdata/dist-fedora/SPECS"
deps_data_file="${REPO_ROOT}/sdata/dist-fedora/feddeps.toml"
# -------------------------
@@ -31,8 +32,13 @@ function install_RPMS() {
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)
+
+ # we need cpptrace BEFORE quickshell-git
+ local_specs=(
+ "$rpm_specs/cpptrace.spec"
+ "$rpm_specs/quickshell-git.spec"
+ "$rpm_specs/hyprland-qt-support.spec"
+ )
for spec_file in ${local_specs[@]}; do
# Download sources
x spectool -g -C "$rpmbuildroot/SOURCES" "$spec_file"
diff --git a/sdata/dist-nix/home-manager/flake.nix b/sdata/dist-nix/home-manager/flake.nix
index 97a50c466..a14e4594e 100644
--- a/sdata/dist-nix/home-manager/flake.nix
+++ b/sdata/dist-nix/home-manager/flake.nix
@@ -13,7 +13,7 @@
};
#nixgl.url = "github:nix-community/nixGL";
quickshell = {
- url = "github:quickshell-mirror/quickshell/db1777c20b936a86528c1095cbcb1ebd92801402";
+ url = "github:quickshell-mirror/quickshell/7511545ee20664e3b8b8d3322c0ffe7567c56f7a";
inputs.nixpkgs.follows = "nixpkgs";
};
};
diff --git a/sdata/dist-nix/home-manager/home.nix b/sdata/dist-nix/home-manager/home.nix
index b1381481d..497880e78 100644
--- a/sdata/dist-nix/home-manager/home.nix
+++ b/sdata/dist-nix/home-manager/home.nix
@@ -127,10 +127,6 @@ quickshell, home_attrs, ... }:
# TODO: Not available as nixpkg
- ### illogical-impulse-oneui4-icons-git
- # TODO: Customed version of normal oneui4-icons, need to make a package
-
-
### illogical-impulse-portal
#xdg-desktop-portal (Included elsewhere)
#xdg-desktop-portal-kde (Included elsewhere)
diff --git a/sdata/dist-nix/home-manager/quickshell.nix b/sdata/dist-nix/home-manager/quickshell.nix
index fb81af848..45f2f7e43 100644
--- a/sdata/dist-nix/home-manager/quickshell.nix
+++ b/sdata/dist-nix/home-manager/quickshell.nix
@@ -47,6 +47,11 @@ in pkgs.stdenv.mkDerivation {
kdePackages.kirigami #kirigami
kdePackages.kdialog #kdialog
kdePackages.syntax-highlighting #syntax-highlighting
+ vulkan-headers #vulkan-headers
+ libdrm #libdrm
+ cpptrace #cpptrace
+ jemalloc #jemalloc
+ mesa #mesa
];
installPhase = ''
diff --git a/sdata/lib/functions.sh b/sdata/lib/functions.sh
index bc8f08400..faa608155 100644
--- a/sdata/lib/functions.sh
+++ b/sdata/lib/functions.sh
@@ -98,7 +98,7 @@ function sudo_init_keepalive(){
# Prompt for sudo password once at the beginning
echo -e "${STY_CYAN}[$0]: Requesting sudo privileges for installation...${STY_RST}"
- if ! sudo -v; then
+ if ! sudo true; then
echo -e "${STY_RED}[$0]: Failed to obtain sudo privileges. Aborting...${STY_RST}"
exit 1
fi
@@ -108,7 +108,7 @@ function sudo_init_keepalive(){
(
while true; do
sleep 60
- sudo -v 2>/dev/null || exit 0
+ sudo true 2>/dev/null || exit 0
done
) &
SUDO_KEEPALIVE_PID=$!
diff --git a/sdata/lib/package-installers.sh b/sdata/lib/package-installers.sh
index a2e51b010..0a7850516 100644
--- a/sdata/lib/package-installers.sh
+++ b/sdata/lib/package-installers.sh
@@ -33,20 +33,6 @@ install-Gabarito(){
x cd $REPO_ROOT
}
-install-OneUI(){
- x mkdir -p $REPO_ROOT/cache/OneUI4-Icons
- x cd $REPO_ROOT/cache/OneUI4-Icons
- try git init -b main
- try git remote add origin https://github.com/end-4/OneUI4-Icons.git
-# try git remote add origin https://github.com/mjkim0727/OneUI4-Icons.git
- x git pull origin main && git submodule update --init --recursive
- x sudo mkdir -p /usr/local/share/icons
- x sudo cp -r OneUI /usr/local/share/icons
- x sudo cp -r OneUI-dark /usr/local/share/icons
- x sudo cp -r OneUI-light /usr/local/share/icons
- x cd $REPO_ROOT
-}
-
install-bibata(){
x mkdir -p $REPO_ROOT/cache/bibata-cursor
x cd $REPO_ROOT/cache/bibata-cursor