Merge commit 'ecdfa2f7c4' as 'temp-repo'

This commit is contained in:
gribse 2025-10-06 19:14:58 +02:00
commit 2fe0c9a830
1258 changed files with 42112 additions and 0 deletions

2
temp-repo/.gitignore vendored Executable file
View file

@ -0,0 +1,2 @@
.obsidian/workspace.json
.obsidian/workspace-mobile.json

14
temp-repo/.obsidian/app.json vendored Executable file
View file

@ -0,0 +1,14 @@
{
"spellcheck": false,
"attachmentFolderPath": "_resources",
"newFileLocation": "folder",
"alwaysUpdateLinks": true,
"promptDelete": false,
"pdfExportSettings": {
"includeName": true,
"pageSize": "A4",
"landscape": false,
"margin": "0",
"downscalePercent": 100
}
}

9
temp-repo/.obsidian/app.json.orig vendored Executable file
View file

@ -0,0 +1,9 @@
{
<<<<<<< HEAD
"spellcheck": false
=======
"newFileLocation": "folder",
"newFileFolderPath": "1 Default",
"trashOption": "local"
>>>>>>> origin/main
}

4
temp-repo/.obsidian/appearance.json vendored Executable file
View file

@ -0,0 +1,4 @@
{
"accentColor": "",
"theme": "obsidian"
}

6
temp-repo/.obsidian/command-palette.json vendored Executable file
View file

@ -0,0 +1,6 @@
{
"pinned": [
"obsidian-git:push",
"obsidian-git:backup-and-close"
]
}

9
temp-repo/.obsidian/community-plugins.json vendored Executable file
View file

@ -0,0 +1,9 @@
[
"obsidian-auto-link-title",
"calendar",
"copy-as-html",
"image-converter",
"obsidian-git",
"obsidian-excalidraw-plugin",
"omnisearch"
]

View file

@ -0,0 +1,14 @@
[
"obsidian-auto-link-title",
"calendar",
"copy-as-html",
"image-converter",
"obsidian-excalidraw-plugin",
<<<<<<< HEAD
"obsidian-git",
"omnisearch"
=======
"copy-as-html",
"obsidian-auto-link-title"
>>>>>>> origin/main
]

View file

@ -0,0 +1,30 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false
}

33
temp-repo/.obsidian/core-plugins.json vendored Executable file
View file

@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false,
"webviewer": false,
"footnotes": false,
"bases": true
}

35
temp-repo/.obsidian/core-plugins.json.orig vendored Executable file
View file

@ -0,0 +1,35 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false,
<<<<<<< HEAD
"webviewer": false
=======
"webviewer": true
>>>>>>> 9f978b93da0fa03c6b3446373e7b8ec0cca677de
}

4
temp-repo/.obsidian/daily-notes.json vendored Executable file
View file

@ -0,0 +1,4 @@
{
"template": "Templates/Template journal entry",
"folder": "Journal/Daily"
}

22
temp-repo/.obsidian/graph.json vendored Executable file
View file

@ -0,0 +1,22 @@
{
"collapse-filter": false,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.18030776515017127,
"close": true
}

90
temp-repo/.obsidian/hotkeys.json vendored Executable file
View file

@ -0,0 +1,90 @@
{
"editor:set-heading-1": [
{
"modifiers": [
"Mod"
],
"key": "1"
}
],
"editor:set-heading-2": [
{
"modifiers": [
"Mod"
],
"key": "2"
}
],
"editor:set-heading-3": [
{
"modifiers": [
"Mod"
],
"key": "3"
}
],
"editor:set-heading-4": [
{
"modifiers": [
"Mod"
],
"key": "4"
}
],
"workspace:goto-tab-1": [],
"workspace:goto-tab-2": [],
"workspace:goto-tab-3": [],
"workspace:goto-tab-4": [],
"workspace:goto-tab-5": [],
"workspace:goto-tab-6": [],
"workspace:goto-tab-7": [],
"workspace:goto-tab-8": [],
"editor:toggle-blockquote": [
{
"modifiers": [
"Mod"
],
"key": "\\"
},
{
"modifiers": [
"Mod"
],
"key": "Key226"
}
],
"editor:toggle-code": [
{
"modifiers": [
"Mod"
],
"key": "["
}
],
"editor:toggle-bullet-list": [
{
"modifiers": [
"Mod"
],
"key": "L"
}
],
"editor:toggle-checklist-status": [
{
"modifiers": [
"Mod"
],
"key": "M"
}
],
"obsidian-auto-link-title:enhance-url-with-title": [],
"editor:insert-codeblock": [
{
"modifiers": [
"Mod"
],
"key": ";"
}
],
"markdown:add-metadata-property": []
}

92
temp-repo/.obsidian/hotkeys.json.orig vendored Executable file
View file

@ -0,0 +1,92 @@
{
"editor:set-heading-1": [
{
"modifiers": [
"Mod"
],
"key": "1"
}
],
"editor:set-heading-2": [
{
"modifiers": [
"Mod"
],
"key": "2"
}
],
"editor:set-heading-3": [
{
"modifiers": [
"Mod"
],
"key": "3"
}
],
"editor:set-heading-4": [
{
"modifiers": [
"Mod"
],
"key": "4"
}
],
"editor:set-heading-5": [
{
"modifiers": [
"Mod"
],
"key": "5"
}
],
"workspace:goto-tab-1": [],
"workspace:goto-tab-2": [],
"workspace:goto-tab-3": [],
"workspace:goto-tab-4": [],
"workspace:goto-tab-5": [],
"editor:toggle-bullet-list": [
{
"modifiers": [
"Mod"
],
"key": "L"
}
],
"editor:toggle-numbered-list": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "L"
}
],
"editor:toggle-checklist-status": [
{
"modifiers": [
"Mod"
],
"key": "M"
}
],
"editor:toggle-blockquote": [
{
"modifiers": [
"Mod"
],
<<<<<<< HEAD
"key": "\\"
=======
"key": "Key226"
}
],
"editor:insert-codeblock": [
{
"modifiers": [
"Mod"
],
"key": "]"
>>>>>>> origin/main
}
]
}

View file

@ -0,0 +1,10 @@
{
"shouldConfirmBeforeCreate": false,
"weekStart": "monday",
"wordsPerDot": 250,
"showWeeklyNote": true,
"weeklyNoteFormat": "",
"weeklyNoteTemplate": "",
"weeklyNoteFolder": "",
"localeOverride": "system-default"
}

4457
temp-repo/.obsidian/plugins/calendar/main.js vendored Executable file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,10 @@
{
"id": "calendar",
"name": "Calendar",
"description": "Calendar view of your daily notes",
"version": "1.5.10",
"author": "Liam Cain",
"authorUrl": "https://github.com/liamcain/",
"isDesktopOnly": false,
"minAppVersion": "0.9.11"
}

3745
temp-repo/.obsidian/plugins/copy-as-html/main.js vendored Executable file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,10 @@
{
"id": "copy-as-html",
"name": "Copy as HTML",
"version": "1.1.3",
"minAppVersion": "0.12.0",
"description": "This is a simple plugin that converts the selected markdown to HTML and copies it to the clipboard.",
"author": "Bailey Jennings",
"authorUrl": "https://twitter.com/Bailey_Jennings",
"isDesktopOnly": false
}

View file

@ -0,0 +1,345 @@
{
"folderPresets": [
{
"type": "DEFAULT",
"name": "Default (Obsidian setting)"
},
{
"type": "ROOT",
"name": "Root folder"
},
{
"type": "CURRENT",
"name": "Same folder as current note"
}
],
"selectedFolderPreset": "Default (Obsidian setting)",
"filenamePresets": [
{
"name": "Keep original name",
"customTemplate": "{imagename}",
"skipRenamePatterns": "",
"conflictResolution": "increment"
},
{
"name": "NoteName-Timestamp",
"customTemplate": "{notename}-{timestamp}",
"skipRenamePatterns": "",
"conflictResolution": "increment"
}
],
"selectedFilenamePreset": "Keep original name",
"outputFormat": "NONE",
"quality": 0.9,
"colorDepth": 1,
"pngquantQuality": "65-80",
"ffmpegExecutablePath": "",
"ffmpegCrf": 23,
"ffmpegPreset": "medium",
"resizeMode": "Fit",
"desiredWidth": 600,
"desiredHeight": 800,
"desiredLongestEdge": 1000,
"enlargeOrReduce": "Auto",
"allowLargerFiles": false,
"showPresetModal": {
"folder": false,
"filename": false
},
"subfolderTemplate": "",
"conversionPresets": [
{
"name": "None",
"outputFormat": "NONE",
"quality": 100,
"colorDepth": 1,
"resizeMode": "None",
"desiredWidth": 800,
"desiredHeight": 600,
"desiredLongestEdge": 1000,
"enlargeOrReduce": "Auto",
"allowLargerFiles": false,
"skipConversionPatterns": "",
"pngquantExecutablePath": "",
"pngquantQuality": "65-80",
"ffmpegExecutablePath": "",
"ffmpegCrf": 23,
"ffmpegPreset": "medium"
},
{
"name": "WEBP (75, no resizing)",
"outputFormat": "WEBP",
"quality": 75,
"colorDepth": 1,
"resizeMode": "None",
"desiredWidth": 800,
"desiredHeight": 600,
"desiredLongestEdge": 1000,
"enlargeOrReduce": "Auto",
"allowLargerFiles": false,
"skipConversionPatterns": "",
"pngquantExecutablePath": "",
"pngquantQuality": "65-80",
"ffmpegExecutablePath": "",
"ffmpegCrf": 23,
"ffmpegPreset": "medium"
},
{
"name": "PNGQUANT (65-80, no resizing)",
"outputFormat": "PNGQUANT",
"quality": 75,
"colorDepth": 1,
"resizeMode": "None",
"desiredWidth": 800,
"desiredHeight": 600,
"desiredLongestEdge": 1000,
"enlargeOrReduce": "Auto",
"allowLargerFiles": false,
"skipConversionPatterns": "",
"pngquantExecutablePath": "",
"pngquantQuality": "65-80",
"ffmpegExecutablePath": "",
"ffmpegCrf": 23,
"ffmpegPreset": "medium"
}
],
"selectedConversionPreset": "WEBP (75, no resizing)",
"globalPresets": [
{
"name": "WebP 75",
"folderPreset": "Default (Obsidian setting)",
"filenamePreset": "NoteName-Timestamp",
"conversionPreset": "WEBP (75, no resizing)",
"linkFormatPreset": "Default (Wikilink, Shortest)",
"resizePreset": "Default (No Resize)"
}
],
"selectedGlobalPreset": "",
"linkFormatSettings": {
"linkFormatPresets": [
{
"name": "Default (Wikilink, Shortest)",
"linkFormat": "wikilink",
"pathFormat": "shortest",
"prependCurrentDir": false,
"hideFolders": false
},
{
"name": "Markdown, Relative",
"linkFormat": "markdown",
"pathFormat": "relative",
"prependCurrentDir": true,
"hideFolders": false
}
],
"selectedLinkFormatPreset": "Default (Wikilink, Shortest)"
},
"nonDestructiveResizeSettings": {
"resizePresets": [
{
"name": "Default (No Resize)",
"resizeDimension": "none",
"resizeScaleMode": "auto",
"respectEditorMaxWidth": true,
"maintainAspectRatio": true,
"resizeUnits": "pixels"
},
{
"name": "Width 500px",
"resizeDimension": "width",
"width": 500,
"resizeScaleMode": "auto",
"respectEditorMaxWidth": true,
"maintainAspectRatio": true,
"resizeUnits": "pixels"
},
{
"name": "Height 800px",
"resizeDimension": "height",
"height": 800,
"resizeScaleMode": "auto",
"respectEditorMaxWidth": true,
"maintainAspectRatio": true,
"resizeUnits": "pixels"
},
{
"name": "50% Width",
"resizeDimension": "width",
"width": 50,
"resizeScaleMode": "auto",
"respectEditorMaxWidth": true,
"maintainAspectRatio": true,
"resizeUnits": "percentage"
},
{
"name": "Longest Edge 1000px",
"resizeDimension": "longest-edge",
"longestEdge": 1000,
"resizeScaleMode": "auto",
"respectEditorMaxWidth": true,
"maintainAspectRatio": true,
"resizeUnits": "pixels"
},
{
"name": "Fit Editor",
"resizeDimension": "editor-max-width",
"resizeScaleMode": "auto",
"respectEditorMaxWidth": true,
"maintainAspectRatio": true,
"resizeUnits": "pixels"
},
{
"name": "Original Width",
"resizeDimension": "original-width",
"resizeScaleMode": "auto",
"respectEditorMaxWidth": false,
"maintainAspectRatio": true,
"resizeUnits": "pixels"
},
{
"name": "Custom (Distort)",
"resizeDimension": "both",
"customValue": "300x100",
"resizeScaleMode": "auto",
"respectEditorMaxWidth": false,
"maintainAspectRatio": false,
"resizeUnits": "pixels"
}
],
"selectedResizePreset": "Default (No Resize)"
},
"resizeCursorLocation": "none",
"dropPasteCursorLocation": "back",
"neverProcessFilenames": "",
"modalBehavior": "never",
"ProcessCurrentNoteconvertTo": "webp",
"ProcessCurrentNotequality": 0.75,
"ProcessCurrentNoteResizeModalresizeMode": "None",
"ProcessCurrentNoteresizeModaldesiredWidth": 600,
"ProcessCurrentNoteresizeModaldesiredHeight": 800,
"ProcessCurrentNoteresizeModaldesiredLength": 800,
"ProcessCurrentNoteskipImagesInTargetFormat": false,
"ProcessCurrentNoteEnlargeOrReduce": "Always",
"ProcessCurrentNoteSkipFormats": "tif,tiff,heic",
"ProcessAllVaultconvertTo": "webp",
"ProcessAllVaultquality": 0.75,
"ProcessAllVaultResizeModalresizeMode": "None",
"ProcessAllVaultResizeModaldesiredWidth": 600,
"ProcessAllVaultResizeModaldesiredHeight": 800,
"ProcessAllVaultResizeModaldesiredLength": 800,
"ProcessAllVaultEnlargeOrReduce": "Always",
"ProcessAllVaultSkipFormats": "",
"ProcessAllVaultskipImagesInTargetFormat": false,
"annotationPresets": {
"drawing": [
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 2
},
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 2
},
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 2
}
],
"arrow": [
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 8
},
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 8
},
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 8
}
],
"text": [
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 24,
"backgroundColor": "transparent",
"backgroundOpacity": 0.7
},
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 24,
"backgroundColor": "transparent",
"backgroundOpacity": 0.7
},
{
"color": "#000000",
"opacity": 1,
"blendMode": "source-over",
"size": 24,
"backgroundColor": "transparent",
"backgroundOpacity": 0.7
}
]
},
"isImageAlignmentEnabled": true,
"imageAlignment_cacheCleanupInterval": 3600000,
"imageAlignment_cacheLocation": "plugin",
"isDragResizeEnabled": true,
"isScrollResizeEnabled": true,
"isResizeInReadingModeEnabled": false,
"resizeSensitivity": 0.1,
"scrollwheelModifier": "Shift",
"isImageResizeEnbaled": true,
"resizeState": {
"isResizing": false
},
"enableContextMenu": true,
"showSpaceSavedNotification": true,
"revertToOriginalIfLarger": false,
"enableImageCaptions": true,
"skipCaptionExtensions": "icns",
"captionFontSize": "var(--font-smaller)",
"captionColor": "var(--text-gray)",
"captionFontStyle": "italic",
"captionBackgroundColor": "transparent",
"captionPadding": "2px 4px",
"captionBorderRadius": "0",
"captionOpacity": "1",
"captionFontWeight": "normal",
"captionTextTransform": "none",
"captionLetterSpacing": "normal",
"captionBorder": "none",
"captionMarginTop": "4px",
"captionAlignment": "center",
"autoRename": true,
"convertToWEBP": true,
"convertToJPG": false,
"convertToPNG": false,
"convertTo": "jpg",
"attachmentLocation": "disable",
"attachmentSpecifiedFolder": "",
"attachmentSubfolderName": "",
"autoNonDestructiveResize": "disabled",
"customSize": "",
"desiredLength": 800,
"resizeByDragging": true,
"resizeWithShiftScrollwheel": true,
"rightClickContextMenu": true
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,11 @@
{
"id": "image-converter",
"name": "Image Converter",
"version": "1.3.10",
"minAppVersion": "0.15.0",
"description": "Convert, compress, resize, annotate, markup, draw, crop, rotate, flip, align images directly in Obsidian. Drag-resize, rename with variables, batch process. WEBP, JPG, PNG, HEIC, TIF.",
"author": "xRyul",
"authorUrl": "https://github.com/xryul",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/xryul"
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,771 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
if you want to view the source visit the plugins github repository
*/
'use strict';
var obsidian = require('obsidian');
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};
const DEFAULT_SETTINGS = {
regex: /^(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})$/i,
lineRegex: /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi,
linkRegex: /^\[([^\[\]]*)\]\((https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})\)$/i,
linkLineRegex: /\[([^\[\]]*)\]\((https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})\)/gi,
imageRegex: /\.(gif|jpe?g|tiff?|png|webp|bmp|tga|psd|ai)$/i,
enhanceDefaultPaste: true,
shouldPreserveSelectionAsTitle: false,
enhanceDropEvents: true,
websiteBlacklist: "",
maximumTitleLength: 0,
useNewScraper: false,
linkPreviewApiKey: "",
useBetterPasteId: false,
};
class AutoLinkTitleSettingTab extends obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
let { containerEl } = this;
containerEl.empty();
new obsidian.Setting(containerEl)
.setName("Enhance Default Paste")
.setDesc("Fetch the link title when pasting a link in the editor with the default paste command")
.addToggle((val) => val
.setValue(this.plugin.settings.enhanceDefaultPaste)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
console.log(value);
this.plugin.settings.enhanceDefaultPaste = value;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("Enhance Drop Events")
.setDesc("Fetch the link title when drag and dropping a link from another program")
.addToggle((val) => val
.setValue(this.plugin.settings.enhanceDropEvents)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
console.log(value);
this.plugin.settings.enhanceDropEvents = value;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("Maximum title length")
.setDesc("Set the maximum length of the title. Set to 0 to disable.")
.addText((val) => val
.setValue(this.plugin.settings.maximumTitleLength.toString(10))
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
const titleLength = Number(value);
this.plugin.settings.maximumTitleLength =
isNaN(titleLength) || titleLength < 0 ? 0 : titleLength;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("Preserve selection as title")
.setDesc("Whether to prefer selected text as title over fetched title when pasting")
.addToggle((val) => val
.setValue(this.plugin.settings.shouldPreserveSelectionAsTitle)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
console.log(value);
this.plugin.settings.shouldPreserveSelectionAsTitle = value;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("Website Blacklist")
.setDesc("List of strings (comma separated) that disable autocompleting website titles. Can be URLs or arbitrary text.")
.addTextArea((val) => val
.setValue(this.plugin.settings.websiteBlacklist)
.setPlaceholder("localhost, tiktok.com")
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
this.plugin.settings.websiteBlacklist = value;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("Use New Scraper")
.setDesc("Use experimental new scraper, seems to work well on desktop but not mobile.")
.addToggle((val) => val
.setValue(this.plugin.settings.useNewScraper)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
console.log(value);
this.plugin.settings.useNewScraper = value;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("Use Better Fetching Placeholder")
.setDesc("Use a more readable placeholder when fetching the title of a link.")
.addToggle((val) => val
.setValue(this.plugin.settings.useBetterPasteId)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
console.log(value);
this.plugin.settings.useBetterPasteId = value;
yield this.plugin.saveSettings();
})));
new obsidian.Setting(containerEl)
.setName("LinkPreview API Key")
.setDesc("API key for the LinkPreview.net service. Get one at https://my.linkpreview.net/access_keys")
.addText((text) => text
.setValue(this.plugin.settings.linkPreviewApiKey || "")
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
const trimmedValue = value.trim();
if (trimmedValue.length > 0 && trimmedValue.length !== 32) {
new obsidian.Notice("LinkPreview API key must be 32 characters long");
this.plugin.settings.linkPreviewApiKey = "";
}
else {
this.plugin.settings.linkPreviewApiKey = trimmedValue;
}
yield this.plugin.saveSettings();
})));
}
}
class CheckIf {
static isMarkdownLinkAlready(editor) {
let cursor = editor.getCursor();
// Check if the characters before the url are ]( to indicate a markdown link
var titleEnd = editor.getRange({ ch: cursor.ch - 2, line: cursor.line }, { ch: cursor.ch, line: cursor.line });
return titleEnd == "](";
}
static isAfterQuote(editor) {
let cursor = editor.getCursor();
// Check if the characters before the url are " or ' to indicate we want the url directly
// This is common in elements like <a href="linkhere"></a>
var beforeChar = editor.getRange({ ch: cursor.ch - 1, line: cursor.line }, { ch: cursor.ch, line: cursor.line });
return beforeChar == "\"" || beforeChar == "'";
}
static isUrl(text) {
let urlRegex = new RegExp(DEFAULT_SETTINGS.regex);
return urlRegex.test(text);
}
static isImage(text) {
let imageRegex = new RegExp(DEFAULT_SETTINGS.imageRegex);
return imageRegex.test(text);
}
static isLinkedUrl(text) {
let urlRegex = new RegExp(DEFAULT_SETTINGS.linkRegex);
return urlRegex.test(text);
}
}
class EditorExtensions {
static getSelectedText(editor) {
if (!editor.somethingSelected()) {
let wordBoundaries = this.getWordBoundaries(editor);
editor.setSelection(wordBoundaries.start, wordBoundaries.end);
}
return editor.getSelection();
}
static cursorWithinBoundaries(cursor, match) {
let startIndex = match.index;
let endIndex = match.index + match[0].length;
return startIndex <= cursor.ch && cursor.ch <= endIndex;
}
static getWordBoundaries(editor) {
let cursor = editor.getCursor();
// If its a normal URL token this is not a markdown link
// In this case we can simply overwrite the link boundaries as-is
let lineText = editor.getLine(cursor.line);
// First check if we're in a link
let linksInLine = lineText.matchAll(DEFAULT_SETTINGS.linkLineRegex);
for (let match of linksInLine) {
if (this.cursorWithinBoundaries(cursor, match)) {
return {
start: { line: cursor.line, ch: match.index },
end: { line: cursor.line, ch: match.index + match[0].length },
};
}
}
// If not, check if we're in just a standard ol' URL.
let urlsInLine = lineText.matchAll(DEFAULT_SETTINGS.lineRegex);
for (let match of urlsInLine) {
if (this.cursorWithinBoundaries(cursor, match)) {
return {
start: { line: cursor.line, ch: match.index },
end: { line: cursor.line, ch: match.index + match[0].length },
};
}
}
return {
start: cursor,
end: cursor,
};
}
static getEditorPositionFromIndex(content, index) {
let substr = content.substr(0, index);
let l = 0;
let offset = -1;
let r = -1;
for (; (r = substr.indexOf("\n", r + 1)) !== -1; l++, offset = r)
;
offset += 1;
let ch = content.substr(offset, index - offset).length;
return { line: l, ch: ch };
}
}
function blank$1(text) {
return text === undefined || text === null || text === '';
}
function notBlank$1(text) {
return !blank$1(text);
}
function scrape(url) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield obsidian.requestUrl(url);
if (!response.headers['content-type'].includes('text/html'))
return getUrlFinalSegment$1(url);
const html = response.text;
const doc = new DOMParser().parseFromString(html, 'text/html');
const title = doc.querySelector('title');
if (blank$1(title === null || title === void 0 ? void 0 : title.innerText)) {
// If site is javascript based and has a no-title attribute when unloaded, use it.
var noTitle = title === null || title === void 0 ? void 0 : title.getAttr('no-title');
if (notBlank$1(noTitle)) {
return noTitle;
}
// Otherwise if the site has no title/requires javascript simply return Title Unknown
return url;
}
return title.innerText;
}
catch (ex) {
console.error(ex);
return '';
}
});
}
function getUrlFinalSegment$1(url) {
try {
const segments = new URL(url).pathname.split('/');
const last = segments.pop() || segments.pop(); // Handle potential trailing slash
return last;
}
catch (_) {
return 'File';
}
}
function getPageTitle$1(url) {
return __awaiter(this, void 0, void 0, function* () {
if (!(url.startsWith('http') || url.startsWith('https'))) {
url = 'https://' + url;
}
return scrape(url);
});
}
const electronPkg = require("electron");
function blank(text) {
return text === undefined || text === null || text === "";
}
function notBlank(text) {
return !blank(text);
}
// async wrapper to load a url and settle on load finish or fail
function load(window, url) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
window.webContents.on("did-finish-load", (event) => resolve(event));
window.webContents.on("did-fail-load", (event) => reject(event));
window.loadURL(url);
});
});
}
function electronGetPageTitle(url) {
return __awaiter(this, void 0, void 0, function* () {
const { remote } = electronPkg;
const { BrowserWindow } = remote;
try {
const window = new BrowserWindow({
width: 1000,
height: 600,
webPreferences: {
webSecurity: false,
nodeIntegration: true,
images: false,
},
show: false,
});
window.webContents.setAudioMuted(true);
window.webContents.on("will-navigate", (event, newUrl) => {
event.preventDefault();
window.loadURL(newUrl);
});
yield load(window, url);
try {
const title = window.webContents.getTitle();
window.destroy();
if (notBlank(title)) {
return title;
}
else {
return url;
}
}
catch (ex) {
window.destroy();
return url;
}
}
catch (ex) {
console.error(ex);
return "";
}
});
}
function nonElectronGetPageTitle(url) {
return __awaiter(this, void 0, void 0, function* () {
try {
const html = yield obsidian.request({ url });
const doc = new DOMParser().parseFromString(html, "text/html");
const title = doc.querySelectorAll("title")[0];
if (title == null || blank(title === null || title === void 0 ? void 0 : title.innerText)) {
// If site is javascript based and has a no-title attribute when unloaded, use it.
var noTitle = title === null || title === void 0 ? void 0 : title.getAttr("no-title");
if (notBlank(noTitle)) {
return noTitle;
}
// Otherwise if the site has no title/requires javascript simply return Title Unknown
return url;
}
return title.innerText;
}
catch (ex) {
console.error(ex);
return "";
}
});
}
function getUrlFinalSegment(url) {
try {
const segments = new URL(url).pathname.split('/');
const last = segments.pop() || segments.pop(); // Handle potential trailing slash
return last;
}
catch (_) {
return "File";
}
}
function tryGetFileType(url) {
return __awaiter(this, void 0, void 0, function* () {
try {
const response = yield fetch(url, { method: "HEAD" });
// Ensure site returns an ok status code before scraping
if (!response.ok) {
return "Site Unreachable";
}
// Ensure site is an actual HTML page and not a pdf or 3 gigabyte video file.
let contentType = response.headers.get("content-type");
if (!contentType.includes("text/html")) {
return getUrlFinalSegment(url);
}
return null;
}
catch (err) {
return null;
}
});
}
function getPageTitle(url) {
return __awaiter(this, void 0, void 0, function* () {
// If we're on Desktop use the Electron scraper
if (!(url.startsWith("http") || url.startsWith("https"))) {
url = "https://" + url;
}
// Try to do a HEAD request to see if the site is reachable and if it's an HTML page
// If we error out due to CORS, we'll just try to scrape the page anyway.
let fileType = yield tryGetFileType(url);
if (fileType) {
return fileType;
}
if (electronPkg != null) {
return electronGetPageTitle(url);
}
else {
return nonElectronGetPageTitle(url);
}
});
}
class AutoLinkTitle extends obsidian.Plugin {
constructor() {
super(...arguments);
this.shortTitle = (title) => {
if (this.settings.maximumTitleLength === 0) {
return title;
}
if (title.length < this.settings.maximumTitleLength + 3) {
return title;
}
const shortenedTitle = `${title.slice(0, this.settings.maximumTitleLength)}...`;
return shortenedTitle;
};
}
onload() {
return __awaiter(this, void 0, void 0, function* () {
console.log("loading obsidian-auto-link-title");
yield this.loadSettings();
this.blacklist = this.settings.websiteBlacklist
.split(",")
.map((s) => s.trim())
.filter((s) => s.length > 0);
// Listen to paste event
this.pasteFunction = this.pasteUrlWithTitle.bind(this);
// Listen to drop event
this.dropFunction = this.dropUrlWithTitle.bind(this);
this.addCommand({
id: "auto-link-title-paste",
name: "Paste URL and auto fetch title",
editorCallback: (editor) => this.manualPasteUrlWithTitle(editor),
hotkeys: [],
});
this.addCommand({
id: "auto-link-title-normal-paste",
name: "Normal paste (no fetching behavior)",
editorCallback: (editor) => this.normalPaste(editor),
hotkeys: [
{
modifiers: ["Mod", "Shift"],
key: "v",
},
],
});
this.registerEvent(this.app.workspace.on("editor-paste", this.pasteFunction));
this.registerEvent(this.app.workspace.on("editor-drop", this.dropFunction));
this.addCommand({
id: "enhance-url-with-title",
name: "Enhance existing URL with link and title",
editorCallback: (editor) => this.addTitleToLink(editor),
hotkeys: [
{
modifiers: ["Mod", "Shift"],
key: "e",
},
],
});
this.addSettingTab(new AutoLinkTitleSettingTab(this.app, this));
});
}
addTitleToLink(editor) {
// Only attempt fetch if online
if (!navigator.onLine)
return;
let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim();
// If the cursor is on a raw html link, convert to a markdown link and fetch title
if (CheckIf.isUrl(selectedText)) {
this.convertUrlToTitledLink(editor, selectedText);
}
// If the cursor is on the URL part of a markdown link, fetch title and replace existing link title
else if (CheckIf.isLinkedUrl(selectedText)) {
const link = this.getUrlFromLink(selectedText);
this.convertUrlToTitledLink(editor, link);
}
}
normalPaste(editor) {
return __awaiter(this, void 0, void 0, function* () {
let clipboardText = yield navigator.clipboard.readText();
if (clipboardText === null || clipboardText === "")
return;
editor.replaceSelection(clipboardText);
});
}
// Simulate standard paste but using editor.replaceSelection with clipboard text since we can't seem to dispatch a paste event.
manualPasteUrlWithTitle(editor) {
return __awaiter(this, void 0, void 0, function* () {
const clipboardText = yield navigator.clipboard.readText();
// Only attempt fetch if online
if (!navigator.onLine) {
editor.replaceSelection(clipboardText);
return;
}
if (clipboardText == null || clipboardText == "")
return;
// If its not a URL, we return false to allow the default paste handler to take care of it.
// Similarly, image urls don't have a meaningful <title> attribute so downloading it
// to fetch the title is a waste of bandwidth.
if (!CheckIf.isUrl(clipboardText) || CheckIf.isImage(clipboardText)) {
editor.replaceSelection(clipboardText);
return;
}
// If it looks like we're pasting the url into a markdown link already, don't fetch title
// as the user has already probably put a meaningful title, also it would lead to the title
// being inside the link.
if (CheckIf.isMarkdownLinkAlready(editor) || CheckIf.isAfterQuote(editor)) {
editor.replaceSelection(clipboardText);
return;
}
// If url is pasted over selected text and setting is enabled, no need to fetch title,
// just insert a link
let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim();
if (selectedText && this.settings.shouldPreserveSelectionAsTitle) {
editor.replaceSelection(`[${selectedText}](${clipboardText})`);
return;
}
// At this point we're just pasting a link in a normal fashion, fetch its title.
this.convertUrlToTitledLink(editor, clipboardText);
return;
});
}
pasteUrlWithTitle(clipboard, editor) {
return __awaiter(this, void 0, void 0, function* () {
if (!this.settings.enhanceDefaultPaste) {
return;
}
if (clipboard.defaultPrevented)
return;
// Only attempt fetch if online
if (!navigator.onLine)
return;
let clipboardText = clipboard.clipboardData.getData("text/plain");
if (clipboardText === null || clipboardText === "")
return;
// If its not a URL, we return false to allow the default paste handler to take care of it.
// Similarly, image urls don't have a meaningful <title> attribute so downloading it
// to fetch the title is a waste of bandwidth.
if (!CheckIf.isUrl(clipboardText) || CheckIf.isImage(clipboardText)) {
return;
}
// We've decided to handle the paste, stop propagation to the default handler.
clipboard.stopPropagation();
clipboard.preventDefault();
// If it looks like we're pasting the url into a markdown link already, don't fetch title
// as the user has already probably put a meaningful title, also it would lead to the title
// being inside the link.
if (CheckIf.isMarkdownLinkAlready(editor) || CheckIf.isAfterQuote(editor)) {
editor.replaceSelection(clipboardText);
return;
}
// If url is pasted over selected text and setting is enabled, no need to fetch title,
// just insert a link
let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim();
if (selectedText && this.settings.shouldPreserveSelectionAsTitle) {
editor.replaceSelection(`[${selectedText}](${clipboardText})`);
return;
}
// At this point we're just pasting a link in a normal fashion, fetch its title.
this.convertUrlToTitledLink(editor, clipboardText);
return;
});
}
dropUrlWithTitle(dropEvent, editor) {
return __awaiter(this, void 0, void 0, function* () {
if (!this.settings.enhanceDropEvents) {
return;
}
if (dropEvent.defaultPrevented)
return;
// Only attempt fetch if online
if (!navigator.onLine)
return;
let dropText = dropEvent.dataTransfer.getData("text/plain");
if (dropText === null || dropText === "")
return;
// If its not a URL, we return false to allow the default paste handler to take care of it.
// Similarly, image urls don't have a meaningful <title> attribute so downloading it
// to fetch the title is a waste of bandwidth.
if (!CheckIf.isUrl(dropText) || CheckIf.isImage(dropText)) {
return;
}
// We've decided to handle the paste, stop propagation to the default handler.
dropEvent.stopPropagation();
dropEvent.preventDefault();
// If it looks like we're pasting the url into a markdown link already, don't fetch title
// as the user has already probably put a meaningful title, also it would lead to the title
// being inside the link.
if (CheckIf.isMarkdownLinkAlready(editor) || CheckIf.isAfterQuote(editor)) {
editor.replaceSelection(dropText);
return;
}
// If url is pasted over selected text and setting is enabled, no need to fetch title,
// just insert a link
let selectedText = (EditorExtensions.getSelectedText(editor) || "").trim();
if (selectedText && this.settings.shouldPreserveSelectionAsTitle) {
editor.replaceSelection(`[${selectedText}](${dropText})`);
return;
}
// At this point we're just pasting a link in a normal fashion, fetch its title.
this.convertUrlToTitledLink(editor, dropText);
return;
});
}
isBlacklisted(url) {
return __awaiter(this, void 0, void 0, function* () {
yield this.loadSettings();
this.blacklist = this.settings.websiteBlacklist
.split(/,|\n/)
.map((s) => s.trim())
.filter((s) => s.length > 0);
return this.blacklist.some((site) => url.includes(site));
});
}
convertUrlToTitledLink(editor, url) {
return __awaiter(this, void 0, void 0, function* () {
if (yield this.isBlacklisted(url)) {
let domain = new URL(url).hostname;
editor.replaceSelection(`[${domain}](${url})`);
return;
}
// Generate a unique id for find/replace operations for the title.
const pasteId = this.getPasteId();
// Instantly paste so you don't wonder if paste is broken
editor.replaceSelection(`[${pasteId}](${url})`);
// Fetch title from site, replace Fetching Title with actual title
const title = yield this.fetchUrlTitle(url);
const escapedTitle = this.escapeMarkdown(title);
const shortenedTitle = this.shortTitle(escapedTitle);
const text = editor.getValue();
const start = text.indexOf(pasteId);
if (start < 0) {
console.log(`Unable to find text "${pasteId}" in current editor, bailing out; link ${url}`);
}
else {
const end = start + pasteId.length;
const startPos = EditorExtensions.getEditorPositionFromIndex(text, start);
const endPos = EditorExtensions.getEditorPositionFromIndex(text, end);
editor.replaceRange(shortenedTitle, startPos, endPos);
}
});
}
escapeMarkdown(text) {
var unescaped = text.replace(/\\(\*|_|`|~|\\|\[|\])/g, "$1"); // unescape any "backslashed" character
var escaped = unescaped.replace(/(\*|_|`|<|>|~|\\|\[|\])/g, "\\$1"); // escape *, _, `, ~, \, [, ], <, and >
var escaped = unescaped.replace(/(\*|_|`|\||<|>|~|\\|\[|\])/g, "\\$1"); // escape *, _, `, ~, \, |, [, ], <, and >
return escaped;
}
fetchUrlTitleViaLinkPreview(url) {
return __awaiter(this, void 0, void 0, function* () {
if (this.settings.linkPreviewApiKey.length !== 32) {
console.error("LinkPreview API key is not 32 characters long, please check your settings");
return "";
}
try {
const apiEndpoint = `https://api.linkpreview.net/?q=${encodeURIComponent(url)}`;
const response = yield fetch(apiEndpoint, {
headers: {
"X-Linkpreview-Api-Key": this.settings.linkPreviewApiKey,
},
});
const data = yield response.json();
return data.title;
}
catch (error) {
console.error(error);
return "";
}
});
}
fetchUrlTitle(url) {
return __awaiter(this, void 0, void 0, function* () {
try {
let title = "";
title = yield this.fetchUrlTitleViaLinkPreview(url);
console.log(`Title via Link Preview: ${title}`);
if (title === "") {
console.log("Title via Link Preview failed, falling back to scraper");
if (this.settings.useNewScraper) {
console.log("Using new scraper");
title = yield getPageTitle$1(url);
}
else {
console.log("Using old scraper");
title = yield getPageTitle(url);
}
}
console.log(`Title: ${title}`);
title =
title.replace(/(\r\n|\n|\r)/gm, "").trim() ||
"Title Unavailable | Site Unreachable";
return title;
}
catch (error) {
console.error(error);
return "Error fetching title";
}
});
}
getUrlFromLink(link) {
let urlRegex = new RegExp(DEFAULT_SETTINGS.linkRegex);
return urlRegex.exec(link)[2];
}
getPasteId() {
var base = "Fetching Title";
if (this.settings.useBetterPasteId) {
return this.getBetterPasteId(base);
}
else {
return `${base}#${this.createBlockHash()}`;
}
}
getBetterPasteId(base) {
// After every character, add 0, 1 or 2 invisible characters
// so that to the user it looks just like the base string.
// The number of combinations is 3^14 = 4782969
let result = "";
var invisibleCharacter = "\u200B";
var maxInvisibleCharacters = 2;
for (var i = 0; i < base.length; i++) {
var count = Math.floor(Math.random() * (maxInvisibleCharacters + 1));
result += base.charAt(i) + invisibleCharacter.repeat(count);
}
return result;
}
// Custom hashid by @shabegom
createBlockHash() {
let result = "";
var characters = "abcdefghijklmnopqrstuvwxyz0123456789";
var charactersLength = characters.length;
for (var i = 0; i < 4; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
onunload() {
console.log("unloading obsidian-auto-link-title");
}
loadSettings() {
return __awaiter(this, void 0, void 0, function* () {
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
});
}
saveSettings() {
return __awaiter(this, void 0, void 0, function* () {
yield this.saveData(this.settings);
});
}
}
module.exports = AutoLinkTitle;
/* nosourcemap */

View file

@ -0,0 +1,10 @@
{
"id": "obsidian-auto-link-title",
"name": "Auto Link Title",
"version": "1.5.5",
"minAppVersion": "0.12.17",
"description": "This plugin automatically fetches the titles of links from the web",
"author": "Matt Furden",
"authorUrl": "https://github.com/zolrath",
"isDesktopOnly": false
}

View file

@ -0,0 +1 @@
/* no styles */

View file

@ -0,0 +1,803 @@
{
"folder": "Excalidraw",
"cropFolder": "",
"annotateFolder": "",
"embedUseExcalidrawFolder": false,
"templateFilePath": "Excalidraw/Template.excalidraw",
"scriptFolderPath": "Excalidraw/Scripts",
"fontAssetsPath": "Excalidraw/CJK Fonts",
"loadChineseFonts": false,
"loadJapaneseFonts": false,
"loadKoreanFonts": false,
"compress": true,
"decompressForMDView": false,
"onceOffCompressFlagReset": true,
"onceOffGPTVersionReset": true,
"autosave": true,
"autosaveIntervalDesktop": 15000,
"autosaveIntervalMobile": 10000,
"drawingFilenamePrefix": "Drawing ",
"drawingEmbedPrefixWithFilename": true,
"drawingFilnameEmbedPostfix": " ",
"drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss",
"useExcalidrawExtension": true,
"cropPrefix": "cropped_",
"annotatePrefix": "annotated_",
"annotatePreserveSize": false,
"previewImageType": "SVGIMG",
"renderingConcurrency": 3,
"allowImageCache": true,
"allowImageCacheInScene": true,
"displayExportedImageIfAvailable": false,
"previewMatchObsidianTheme": false,
"width": "400",
"height": "",
"overrideObsidianFontSize": false,
"dynamicStyling": "colorful",
"isLeftHanded": false,
"iframeMatchExcalidrawTheme": true,
"matchTheme": false,
"matchThemeAlways": false,
"matchThemeTrigger": false,
"defaultMode": "normal",
"defaultPenMode": "never",
"penModeDoubleTapEraser": true,
"penModeSingleFingerPanning": true,
"penModeCrosshairVisible": true,
"renderImageInMarkdownReadingMode": false,
"renderImageInHoverPreviewForMDNotes": false,
"renderImageInMarkdownToPDF": false,
"allowPinchZoom": false,
"allowWheelZoom": false,
"zoomToFitOnOpen": true,
"zoomToFitOnResize": true,
"zoomToFitMaxLevel": 2,
"linkPrefix": "📍",
"urlPrefix": "🌐",
"parseTODO": false,
"todo": "☐",
"done": "🗹",
"hoverPreviewWithoutCTRL": false,
"linkOpacity": 1,
"openInAdjacentPane": false,
"showSecondOrderLinks": true,
"focusOnFileTab": false,
"openInMainWorkspace": true,
"showLinkBrackets": true,
"allowCtrlClick": true,
"forceWrap": false,
"pageTransclusionCharLimit": 200,
"wordWrappingDefault": 0,
"removeTransclusionQuoteSigns": true,
"iframelyAllowed": true,
"pngExportScale": 1,
"exportWithTheme": true,
"exportWithBackground": true,
"exportPaddingSVG": 10,
"exportEmbedScene": false,
"keepInSync": false,
"autoexportSVG": false,
"autoexportPNG": false,
"autoExportLightAndDark": false,
"autoexportExcalidraw": false,
"embedType": "excalidraw",
"embedMarkdownCommentLinks": true,
"embedWikiLink": true,
"syncExcalidraw": false,
"experimentalFileType": false,
"experimentalFileTag": "✏️",
"experimentalLivePreview": true,
"fadeOutExcalidrawMarkup": false,
"loadPropertySuggestions": true,
"experimentalEnableFourthFont": false,
"experimantalFourthFont": "Virgil",
"addDummyTextElement": false,
"zoteroCompatibility": false,
"fieldSuggester": true,
"compatibilityMode": false,
"drawingOpenCount": 0,
"library": "deprecated",
"library2": {
"type": "excalidrawlib",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.10.1",
"libraryItems": []
},
"imageElementNotice": true,
"mdSVGwidth": 500,
"mdSVGmaxHeight": 800,
"mdFont": "Virgil",
"mdFontColor": "Black",
"mdBorderColor": "Black",
"mdCSS": "",
"scriptEngineSettings": {},
"defaultTrayMode": true,
"previousRelease": "2.10.1",
"showReleaseNotes": true,
"showNewVersionNotification": true,
"latexBoilerplate": "\\color{blue}",
"latexPreambleLocation": "preamble.sty",
"taskboneEnabled": false,
"taskboneAPIkey": "",
"pinnedScripts": [],
"customPens": [
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "highlighter",
"freedrawOnly": true,
"strokeColor": "#FFC47C",
"backgroundColor": "#FFC47C",
"fillStyle": "solid",
"strokeWidth": 2,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": true,
"outlineWidth": 4,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 0,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "finetip",
"freedrawOnly": false,
"strokeColor": "#3E6F8D",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0.5,
"roughness": 0,
"penOptions": {
"highlighter": false,
"hasOutline": false,
"outlineWidth": 1,
"constantPressure": true,
"options": {
"smoothing": 0.4,
"thinning": -0.5,
"streamline": 0.4,
"easing": "linear",
"start": {
"taper": 5,
"cap": false,
"easing": "linear"
},
"end": {
"taper": 5,
"cap": false,
"easing": "linear"
}
}
}
},
{
"type": "fountain",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 2,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"smoothing": 0.2,
"thinning": 0.6,
"streamline": 0.2,
"easing": "easeInOutSine",
"start": {
"taper": 150,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 1,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "marker",
"freedrawOnly": true,
"strokeColor": "#B83E3E",
"backgroundColor": "#FF7C7C",
"fillStyle": "dashed",
"strokeWidth": 2,
"roughness": 3,
"penOptions": {
"highlighter": false,
"constantPressure": true,
"hasOutline": true,
"outlineWidth": 4,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"taper": 0,
"cap": true,
"easing": "linear"
}
}
}
},
{
"type": "thick-thin",
"freedrawOnly": true,
"strokeColor": "#CECDCC",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"taper": 0,
"cap": true,
"easing": "linear"
},
"end": {
"cap": true,
"taper": true,
"easing": "linear"
}
}
}
},
{
"type": "thin-thick-thin",
"freedrawOnly": true,
"strokeColor": "#CECDCC",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": null,
"penOptions": {
"highlighter": true,
"constantPressure": true,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 1,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "linear",
"start": {
"cap": true,
"taper": true,
"easing": "linear"
},
"end": {
"cap": true,
"taper": true,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
},
{
"type": "default",
"freedrawOnly": false,
"strokeColor": "#000000",
"backgroundColor": "transparent",
"fillStyle": "hachure",
"strokeWidth": 0,
"roughness": 0,
"penOptions": {
"highlighter": false,
"constantPressure": false,
"hasOutline": false,
"outlineWidth": 1,
"options": {
"thinning": 0.6,
"smoothing": 0.5,
"streamline": 0.5,
"easing": "easeOutSine",
"start": {
"cap": true,
"taper": 0,
"easing": "linear"
},
"end": {
"cap": true,
"taper": 0,
"easing": "linear"
}
}
}
}
],
"numberOfCustomPens": 0,
"pdfScale": 4,
"pdfBorderBox": true,
"pdfFrame": false,
"pdfGapSize": 20,
"pdfGroupPages": false,
"pdfLockAfterImport": true,
"pdfNumColumns": 1,
"pdfNumRows": 1,
"pdfDirection": "right",
"pdfImportScale": 0.3,
"gridSettings": {
"DYNAMIC_COLOR": true,
"COLOR": "#000000",
"OPACITY": 50,
"GRID_DIRECTION": {
"horizontal": true,
"vertical": true
}
},
"laserSettings": {
"DECAY_LENGTH": 50,
"DECAY_TIME": 1000,
"COLOR": "#ff0000"
},
"embeddableMarkdownDefaults": {
"useObsidianDefaults": false,
"backgroundMatchCanvas": false,
"backgroundMatchElement": true,
"backgroundColor": "#fff",
"backgroundOpacity": 60,
"borderMatchElement": true,
"borderColor": "#fff",
"borderOpacity": 0,
"filenameVisible": false
},
"markdownNodeOneClickEditing": false,
"canvasImmersiveEmbed": true,
"startupScriptPath": "",
"openAIAPIToken": "",
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
"openAIDefaultVisionModel": "gpt-4o",
"openAIDefaultImageGenerationModel": "dall-e-3",
"openAIURL": "https://api.openai.com/v1/chat/completions",
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations",
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits",
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations",
"modifierKeyConfig": {
"Mac": {
"LocalFileDragAction": {
"defaultAction": "image-import",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "embeddable"
}
]
},
"WebBrowserDragAction": {
"defaultAction": "image-url",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "link"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": true,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
}
]
},
"InternalDragAction": {
"defaultAction": "link",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": true,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": true,
"result": "image-fullsize"
}
]
},
"LinkClickAction": {
"defaultAction": "new-tab",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "active-pane"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "new-tab"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "new-pane"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "popout-window"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": true,
"result": "md-properties"
}
]
}
},
"Win": {
"LocalFileDragAction": {
"defaultAction": "image-import",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
}
]
},
"WebBrowserDragAction": {
"defaultAction": "image-url",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-url"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image-import"
}
]
},
"InternalDragAction": {
"defaultAction": "link",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "link"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "embeddable"
},
{
"shift": true,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "image"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "image-fullsize"
}
]
},
"LinkClickAction": {
"defaultAction": "new-tab",
"rules": [
{
"shift": false,
"ctrl_cmd": false,
"alt_opt": false,
"meta_ctrl": false,
"result": "active-pane"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": false,
"result": "new-tab"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "new-pane"
},
{
"shift": true,
"ctrl_cmd": true,
"alt_opt": true,
"meta_ctrl": false,
"result": "popout-window"
},
{
"shift": false,
"ctrl_cmd": true,
"alt_opt": false,
"meta_ctrl": true,
"result": "md-properties"
}
]
}
}
},
"slidingPanesSupport": false,
"areaZoomLimit": 1,
"longPressDesktop": 500,
"longPressMobile": 500,
"doubleClickLinkOpenViewMode": true,
"isDebugMode": false,
"rank": "Bronze",
"modifierKeyOverrides": [
{
"modifiers": [
"Mod"
],
"key": "Enter"
},
{
"modifiers": [
"Mod"
],
"key": "k"
},
{
"modifiers": [
"Mod"
],
"key": "G"
}
],
"showSplashscreen": true,
"pdfSettings": {
"pageSize": "A4",
"pageOrientation": "portrait",
"fitToPage": 1,
"paperColor": "white",
"customPaperColor": "#ffffff",
"alignment": "center",
"margin": "normal"
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,12 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.10.1",
"minAppVersion": "1.1.6",
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
"author": "Zsolt Viczian",
"authorUrl": "https://www.zsolt.blog",
"fundingUrl": "https://ko-fi.com/zsolt",
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,58 @@
{
"commitMessage": "vault backup: {{date}} from {{hostname}}",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 0,
"autoPushInterval": 0,
"autoPullInterval": 0,
"autoPullOnBoot": false,
"disablePush": false,
"pullBeforePush": true,
"disablePopups": false,
"disablePopupsForNoChanges": false,
"listChangedFilesInMessageBody": false,
"showStatusBar": true,
"updateSubmodules": false,
"syncMethod": "merge",
"customMessageOnAutoBackup": false,
"autoBackupAfterFileChange": false,
"treeStructure": false,
"refreshSourceControl": true,
"basePath": "",
"differentIntervalCommitAndPush": false,
"changedFilesInStatusBar": false,
"showedMobileNotice": true,
"refreshSourceControlTimer": 7000,
"showBranchStatusBar": true,
"setLastSaveToLastCommit": false,
"submoduleRecurseCheckout": false,
"gitDir": "",
"showFileMenu": true,
"authorInHistoryView": "initials",
"dateInHistoryView": false,
"lineAuthor": {
"show": false,
"followMovement": "inactive",
"authorDisplay": "initials",
"showCommitHash": false,
"dateTimeFormatOptions": "date",
"dateTimeFormatCustomString": "YYYY-MM-DD HH:mm",
"dateTimeTimezone": "viewer-local",
"coloringMaxAge": "1y",
"colorNew": {
"r": 255,
"g": 150,
"b": 150
},
"colorOld": {
"r": 120,
"g": 160,
"b": 255
},
"textColorCss": "var(--text-muted)",
"ignoreWhitespace": false,
"gutterSpacingFallbackLength": 5,
"lastShownAuthorDisplay": "initials",
"lastShownDateTimeFormatOptions": "date"
},
"autoCommitMessage": "vault backup: {{date}}"
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,10 @@
{
"author": "Vinzent",
"authorUrl": "https://github.com/Vinzent03",
"id": "obsidian-git",
"name": "Git",
"description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "2.32.1"
}

View file

@ -0,0 +1,23 @@
#!/bin/sh
PROMPT="$1"
TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT"
cleanup() {
rm -f "$TEMP_FILE" "$TEMP_FILE.response"
}
trap cleanup EXIT
echo "$PROMPT" > "$TEMP_FILE"
while [ ! -e "$TEMP_FILE.response" ]; do
if [ ! -e "$TEMP_FILE" ]; then
echo "Trigger file got removed: Abort" >&2
exit 1
fi
sleep 0.1
done
RESPONSE=$(cat "$TEMP_FILE.response")
echo "$RESPONSE"

View file

@ -0,0 +1,576 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
}
.workspace-leaf-content[data-type="git-view"] .view-content {
padding: 0;
}
.workspace-leaf-content[data-type="git-history-view"] .view-content {
padding: 0;
}
.loading > svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-disabled {
opacity: 0.5;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
.git-tools {
display: flex;
margin-left: auto;
}
.git-tools .type {
padding-left: var(--size-2-1);
display: flex;
align-items: center;
justify-content: center;
width: 11px;
}
.git-tools .type[data-type="M"] {
color: orange;
}
.git-tools .type[data-type="D"] {
color: red;
}
.git-tools .buttons {
display: flex;
}
.git-tools .buttons > * {
padding: 0 0;
height: auto;
}
.is-active .git-tools .buttons > * {
color: var(--nav-item-color-active);
}
.git-author {
color: var(--text-accent);
}
.git-date {
color: var(--text-accent);
}
.git-ref {
color: var(--text-accent);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
display: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
background-color: var(--background-primary);
border-bottom: 1px solid var(--interactive-accent);
font-family: var(--font-monospace);
height: 35px;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
border: 1px solid #b4e2b4;
border-radius: 5px 0 0 5px;
color: #399839;
padding: 2px;
text-align: right;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
border: 1px solid #e9aeae;
border-radius: 0 5px 5px 0;
color: #c33;
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
margin-bottom: 1em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
background-color: #c8e1ff;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
border-collapse: collapse;
font-family: Menlo, Consolas, monospace;
font-size: 13px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
overflow-y: hidden;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
padding: 0 8em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
padding: 0 4.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
white-space: pre;
width: 100%;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
del {
background-color: #ffb6ba;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
del {
background-color: #8d232881;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
ins {
background-color: #97f295;
text-align: left;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-code-side-line
ins {
background-color: #1d921996;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1 {
float: left;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1,
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
padding: 0 0.5em;
text-overflow: ellipsis;
width: 3.5em;
}
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
float: right;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 7.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
overflow: hidden;
padding: 0 0.5em;
position: absolute;
text-align: right;
text-overflow: ellipsis;
width: 4em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr {
position: relative;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
direction: rtl;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #fee8e9;
border-color: #e9aeae;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: #dfd;
border-color: #b4e2b4;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #521b1d83;
border-color: #691d1d73;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: rgba(30, 71, 30, 0.5);
border-color: #13501381;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-normal);
}
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-del.d2h-change {
background-color: #fdf2d0;
}
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-del.d2h-change {
background-color: #55492480;
}
.theme-light
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-ins.d2h-change {
background-color: #ded;
}
.theme-dark
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-diff
.d2h-ins.d2h-change {
background-color: rgba(37, 78, 37, 0.418);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
margin-bottom: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
color: #3572b0;
text-decoration: none;
}
.workspace-leaf-content[data-type="diff-view"]
.d2h-file-list-wrapper
a:visited {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
font-weight: 700;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
display: block;
list-style: none;
margin: 0;
padding: 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child {
border-bottom: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
color: #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added {
color: #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
color: #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
background-color: var(--background-primary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
border: 2px solid #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
border: 1px solid #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
border: 1px solid #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
border: 1px solid #3572b0;
}
/* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px 2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
}
.cm-gutterElement.obs-git-blame-gutter > div,
.line-author-settings-preview {
/* delegate text color to settings */
color: var(--obs-git-gutter-text);
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}
@media (max-width: 800px) {
/* hide git blame gutter not to superpose text */
.cm-gutterElement.obs-git-blame-gutter {
display: none;
}
}
.git-unified-diff-view,
.git-split-diff-view .cm-deletedLine .cm-changedText {
background-color: #ee443330;
}
.git-unified-diff-view,
.git-split-diff-view .cm-insertedLine .cm-changedText {
background-color: #22bb2230;
}

View file

@ -0,0 +1,42 @@
{
"useCache": false,
"hideExcluded": false,
"recencyBoost": "0",
"downrankedFoldersFilters": [],
"ignoreDiacritics": true,
"ignoreArabicDiacritics": false,
"indexedFileTypes": [],
"displayTitle": "",
"PDFIndexing": false,
"officeIndexing": false,
"imagesIndexing": false,
"aiImageIndexing": false,
"unsupportedFilesIndexing": "no",
"splitCamelCase": false,
"openInNewPane": false,
"vimLikeNavigationShortcut": false,
"ribbonIcon": true,
"showExcerpt": true,
"maxEmbeds": 5,
"renderLineReturnInExcerpts": true,
"showCreateButton": false,
"highlight": true,
"showPreviousQueryResults": true,
"simpleSearch": false,
"tokenizeUrls": false,
"fuzziness": "1",
"weightBasename": 3,
"weightDirectory": 2,
"weightH1": 1.5,
"weightH2": 1.3,
"weightH3": 1.1,
"weightUnmarkedTags": 1.1,
"weightCustomProperties": [],
"httpApiEnabled": false,
"httpApiPort": "51361",
"httpApiNotice": true,
"welcomeMessage": "1.21.0",
"verboseLogging": false,
"DANGER_httpHost": null,
"DANGER_forceSaveCache": false
}

109
temp-repo/.obsidian/plugins/omnisearch/main.js vendored Executable file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,14 @@
{
"id": "omnisearch",
"name": "Omnisearch",
"version": "1.26.1",
"minAppVersion": "1.7.2",
"description": "A search engine that just works",
"author": "Simon Cambier",
"authorUrl": "https://github.com/scambier/obsidian-omnisearch",
"fundingUrl": {
"Github": "https://github.com/sponsors/scambier",
"Ko-fi": "https://ko-fi.com/scambier"
},
"isDesktopOnly": false
}

View file

@ -0,0 +1,135 @@
.omnisearch-modal {
}
.omnisearch-result {
white-space: normal;
display: flex;
flex-direction: row;
/* justify-content: space-between; */
flex-wrap: nowrap;
}
.omnisearch-result__title-container {
display: flex;
align-items: center;
justify-content: space-between;
column-gap: 5px;
flex-wrap: wrap;
}
.omnisearch-result__title {
white-space: pre-wrap;
align-items: center;
display: flex;
gap: 5px;
}
.omnisearch-result__title > span {
}
.omnisearch-result__folder-path {
font-size: 0.75rem;
align-items: center;
display: flex;
gap: 5px;
color: var(--text-muted);
}
.omnisearch-result__extension {
font-size: 0.7rem;
color: var(--text-muted);
}
.omnisearch-result__counter {
font-size: 0.7rem;
color: var(--text-muted);
}
.omnisearch-result__body {
white-space: normal;
font-size: small;
word-wrap: normal;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
color: var(--text-muted);
margin-inline-start: 0.5em;
}
.omnisearch-result__embed {
margin-left: 1em;
}
.omnisearch-result__image-container {
flex-basis: 20%;
text-align: end;
}
.omnisearch-highlight {
}
.omnisearch-default-highlight {
text-decoration: underline;
text-decoration-color: var(--text-highlight-bg);
text-decoration-thickness: 3px;
text-underline-offset: -1px;
text-decoration-skip-ink: none;
}
.omnisearch-input-container {
display: flex;
align-items: center;
flex-direction: row;
gap: 5px;
}
.omnisearch-result__icon {
display: inline-block;
vertical-align: middle;
width: 16px;
height: 16px;
margin-right: 4px;
}
.omnisearch-result__icon svg {
width: 100%;
height: 100%;
}
.omnisearch-result__icon--emoji {
font-size: 16px;
vertical-align: middle;
margin-right: 4px;
}
@media only screen and (max-width: 600px) {
.omnisearch-input-container {
flex-direction: column;
}
.omnisearch-input-container__buttons {
display: flex;
flex-direction: row;
width: 100%;
padding: 0 1em 0 1em;
gap: 1em;
}
.omnisearch-input-container__buttons > button {
flex-grow: 1;
}
}
@media only screen and (min-width: 600px) {
.omnisearch-input-container__buttons {
margin-inline-end: 1em;
}
}
.omnisearch-input-field {
position: relative;
flex-grow: 1;
}

3
temp-repo/.obsidian/templates.json vendored Executable file
View file

@ -0,0 +1,3 @@
{
"folder": "Templates"
}

31
temp-repo/.obsidian/types.json vendored Executable file
View file

@ -0,0 +1,31 @@
{
"types": {
"aliases": "aliases",
"cssclasses": "multitext",
"tags": "tags",
"date": "date",
"excalidraw-plugin": "text",
"excalidraw-export-transparent": "checkbox",
"excalidraw-mask": "checkbox",
"excalidraw-export-dark": "checkbox",
"excalidraw-export-padding": "number",
"excalidraw-export-pngscale": "number",
"excalidraw-export-embed-scene": "checkbox",
"excalidraw-link-prefix": "text",
"excalidraw-url-prefix": "text",
"excalidraw-link-brackets": "checkbox",
"excalidraw-onload-script": "text",
"excalidraw-linkbutton-opacity": "number",
"excalidraw-default-mode": "text",
"excalidraw-font": "text",
"excalidraw-font-color": "text",
"excalidraw-border-color": "text",
"excalidraw-css": "text",
"excalidraw-autoexport": "text",
"excalidraw-embeddable-theme": "text",
"excalidraw-open-md": "checkbox",
"mood": "number",
"test": "checkbox",
"test2": "checkbox"
}
}

View file

View file

@ -0,0 +1,6 @@
---
type: journalentry
date: 2025-05-08T18:25
---
# Identifier paysage

View file

@ -0,0 +1,8 @@
---
type: journalentry
date: 2025-05-13T16:17
---
# Pourquoi ce blog ?
On veut reproduire ce qu'on voit, depuis que je lis N de blogs, ça le donne envie d'en avoir un à moi

View file

@ -0,0 +1,4 @@
---
type: journalentry
date: 2025-06-20T08:14
---

View file

View file

@ -0,0 +1,22 @@
---
type: article
date: 2024-02-04T18:33:00
maturity: plante
---
The 1-3-5 rule is a method for priorizing and planning tasks. By its simplicity, it takes stress out of planning and promotes incremental progress (cf [Amélioration continue](Amélioration%20continue.md))
It is designed around the reality that you dont often hit all your daily goals but most likely will get at least one thing done. To help you achieve that objective, you set up your to-do list with one big thing that you plan to do. Next, you add three medium things and five small things.
- 1 should definetly be done
- 3 are weighty and important but not urgent or critical
- 5 would be nice to complete but if you dont, no sweat.
## Goal Dump
A goal dump is a list of all goals & tasks that are on our minds, the quantity of which is stressing us out.
"Dumping" them all in one big list makes us review them, and pick from them to plan using the 1-3-5 rule.
# Source
https://www.lifehack.org/913627/1-3-5-year-plan

View file

@ -0,0 +1,40 @@
fiasco anniversaire
# Lettre mom
Bonjour Achille, évidemment je suis tjs (pas fâchée) mais extrêmement déçue, j'aurai jamais cru que ton irresponsabilité peut arriver à ce point !!! Je suis déçue qu'on soit si peu important pour toi !!! Ne me dis pas que ce n'est pas vrai car c les actes qui comptent, n'est-ce pas ! Tu m'as dit que ce que je t'ai dit te fait mal, as tu pensé une seconde au mal que nous on a senti, ou bien c que toi et tes sentiments qui comptent ! J'espère que tu as pu sentir ou comprendre ce que ça peut faire un manque d'attention aux personnes qui t'aiment, je croyais que le fait que tu sois amoureux allait te rendre plus attentionné aux différentes relations dans ta vie car l'amour normalement nous rend très attentionné, tendre et généreux avec les sentiments . Honnêtement je ne te comprends plus et je malheureusement sens que mon existence dans ta vie et dans ton éducation n'a pas apporté beaucoup, tu as choisi la vie de famille à la française et ça ça me fait très mal pas que moi ton père et tes sœurs également, dommage vraiment dommage, tu ne sais pas ce que tu es en train de rater... je ne suis tjs pas prête pour parler avec toi mais je voulais quand même t'expliquer pourquoi...
# Réaction à chaud
je ne comprends pas l'ampleur de ta réaction
si ce n'est pas la premiere fois que ne ne réponds pas, pourquoi vous vous inquiétez autant ?
aller jusqu'à dire que ton éducation ne m'a pas beaucoup apporté est une exxagération que je ne comprends pas
vous me reprochez de choisir la vie à la francaise, et pourtant c'est exactement comme ca que vous vous comportez avec Grand-Père et Mamyvonne.
je comprends votre inquiétude quand je ne répondais pas mais je la trouve démesurée.
Je suis d'accord que j'aurais pu envoyer un msg, mais je n'ai honnetement pas regardé mon téléphone de la journée. Tu sais que je vais pas bien en ce moment, donc je me repose.
vous allez tous mal en ce moment, et je pense que cela ampàlifie ta réaction. J'ai aussi l'impression que vous avez l'impression que je vous oublie au fur et à mesure que je quitte le nid familial, ce qui n'est pas le cas. Mais en devenant adulte je passe moins de temps avec vous / à vous parler, c'est tout.
Sache que je n'ai répondu à aucun message sur mon teléphone, pas uniquement les votres. Quand tu dis "qu'on soit si peu importants pour toi", j'ai l'impression que vous tu penses que je vous ai spécifiquement iognorés.
"En Jordanie, tu vérifiais ton portable toutes les 2 minutes, alors j'ai du mal à le croire", mais en Jordanie, je m'ennuyais terriblement. Ici je m'occupe autrement.
Je ne sais pas ce que tu sous-entends par "vie à la française".
"Tuy ne sais pas ce que tu es en train de rater" Quand je reviens à la maison, vous êtes tous déprimés, papa et toi vous etes dull et plus motivés, lyne elle est en dépression, mlaya n'a aucun sens dans sa vie à part l'école et la religion, 2 choses qui, seules, ne la mèneront pas très loin à mon avis.
Il n'y a rien à faire, la maison est sous une atmosphère de déprime dont vous refusez de sortir en déménageant, dans l'espoir vain qu'un poste va apparaitre de nulle part pour vous sauver. Je n'ai plus cet espor depuis des années.
Papa travaille comme un forcené, avant tout pour oublier, c'est son addiction. Toi tu consommes des médias inutiles / joues à des jeux, tu te tues au travail en faisant des taches ménagères. Vous tournez tous en rond, et je suis content d'avoir ma dose de liberté. Le fait que je puisse juste ignorer mon portable qui, en plus de vous, contient littéralement des dizaines et des dizaines de messages par jour, est un relief dont je me délecte.
Je ne vais probablement pas changer. Je ne trouve pas mon comportement désastreux, bien que je soie d'accord sur le fait que j'aurais du répondre aux messages plus tot.
J'en suis à une étape dans ma vie où je m'éloigne de vous, c'est normal.
# Message envoyé
J'ai l'impression que tu te sens rejetée parceque je n'ai pas répondu au messages et que je n'ai pas pensé que vous vous inquiétreriez.
C'est vrai, j'ai pas regardé mon portable. Je sius d'accord pour dire que j'aurais pu répondre plus tot.
J'essaierai de répondre plus tot la prochaine fois, mais ne vous inquiétez pas quand je ne réponds pas.
J'espère qu'on pourra en parler la prochaine fois que je viens à Mayenne.

View file

@ -0,0 +1,34 @@
Grosse discussion en famille du w-e 14/03/2022
tensions dans la famille
# ils me disent :
- j'ai choisi une vie "à la francaise" qui consiste à seloigner de sa famille
- j'investis pas assez de temps dans ma famille
- je ne veux plus d'eux
- leur education est une failure
- papa se comporte différemment avec moi pour que je l'aime
- soeurs decues, veulent que je revienne
- je ne viens pas assez à la maison
- honte en jordanie
- je n'irai plus chez mes grand parents, juste quand ilsauront un appart là-bas
-
- ils m'aiment
- ils veulent que je fasse partie de la famss
# je pense
- jsp pk ca me cringe de m'ouvrir à eux
- le fait qu'ils n'aiment pas (en ts cas maman) mes chjoix en termes de couple, sexe avant mariage, alcool etc est relou pour moi
- papa etait mal maybe à cause de moi en jordanie ?
- je galere a avoir des relations sociales, avec tt le monde
- trop cool aider les soeurs / dad
qq jours plus tard qq critiques
- "tu critiques comment on fonctionne"
parceque je care, et also sous entendu je ne fais plus partie ?

View file

@ -0,0 +1,26 @@
for the record je ne connais que la date approchimative de ce que j'ai écrit, donc j'ai mis à cette date parceque je sais que je suis allé au pin en mauges à cette date là
ce texte vient à la base de ma note "[[relations sociales - Auxane]]"
---
# Trucs qui ne sont pas parfaitement au clair
Certains détails ne sont pas tres clairs et deviennent "normaux", ca devient + dur d'y penser ou se les remettre en question plus le temps passe.
On n'aime pas s'embrasser pareil : elle est plus HM baiseau langoureux, et moi plus doucement. Je le fais généralement comme j'imagine qu'elle aime mais jaime pas au max (nice tho). Si ca se trpuve je le fais pas de la maniere qu'elle prefere en plus.
Elle est plus frileuse que moi, dans le lit elle a plus froid. EN partie lié au fait qu'elle ait moins de masse graisseuse. Sometimes wierd.
Mais elle aime pas trop le chauffage ? Ou bien c parceque c plus une enlise & ça coute plus cher dans son appart à nantes.
J'aime bien porter peu de vetements et qu'il fasse chaud danjs l'appart
Hence la nécessité d'un chauffage central dans un appart à nous 2.
Comme je suis toujours plus HM sexe qu'elle, j'ai l'impression que c elle qui décide quand on baise, et j'aime pas trop avoir l'impression de pas avoir de say in it, même si le sexe est bien.
Elle est assez controlante des fois, comme lorque je cuisine des fois, elle vient changer ce que je fais ou me dis que je devrais faire autremement, ce qui n'est pas mauvais, mais j'aime bien le faire moi meme, être autonome. Je suis capable de - dans ce cas - cuisiner tout seul. Par exemple quand elle a modifié le réglage des plaques quand on était au Pin en Mauges, au final c'était tres bon !
Un peu le meme truc pour le voyage en turquie, elle se met beaucoup plus la pression et semble ne pas être tres ouverte à ce que je propose. Ce n'est pas un pb mais j'ai l'impression qu'elle fait juste le planning à sa manière et que si je ne suis pas c'est mal.
Je suis peut etre trop sensible mais j'aime pas quand elle -jokingly- insinue que je suis pas bon à qqch.
Elle s'est gentiment moquée de moi parceque je ne savais pas que les pommes de terre ne comptent pas comme 1 des 5 fruits & légumes / jour, en faisant une remarque que j'ai interprétée comme "vous autres hommes, vous ne savez pas comment ça marche". C'était pas ça ebid'ss mais ça m'a touché et vexé.

View file

@ -0,0 +1,59 @@
memoire
inatt comble avec méthodes
mars dernier restitution
diag ok
memoir main problème
inatt comblée avec outils
continuer mettre en place ce qui a été appris
suivi phychatr3 pour le traitement
problème traitement pas lié au traitement
TCC pour approfondir
groupes
déjà TCC
TCC pas un suivi a vie
6 mois
1 an
2 ans
maybe refaire
ou piqûre de rappel
livre mon cerveau a encore besoin de lunettes
ou autres livres avec outils pratiques
courrier de diag to come
congé mat
au bout d'un moment asymptote
pas possible de mettre en place plus de choses
l'homme ne volera jamais par luibmeme
il doit prendre lavion

View file

@ -0,0 +1,14 @@
le courant est australien est un flux continu de tous types de poissons, qui ne s'arrêtre jamais. Même si deux poissons se ressemblent, il ne passera jamais deux fois le même. le collectionneur ne peut pas mettre son filet dans l'espoir d'analyser tous les poissons capturés : son filet reompera et il perdra toute sa capture. le collectionneur peut choisir d'attrpper un poisson au hazard, mais il doit vivre avec la vertitude qu'il ne pourra pas observer tous les poissons. Il doit vivre avec la vertitude que même s'il essaie de choisir un beau poisson bien rare, ce ne sera jamaais le plus beau ou le plus rare.
Le collectionneur ne pourra alors jamais être satisfait puisque son but est de capturer tous les poissons, de les écorcher, de les dessiner, de les ranger dans des familles philogénétiques et de les afficher bien clairement dans de belles cases de bois dans le musée.
Artistote (?) dirait qu'il ne pourra être heureux car il désire quelquechose d'impossible.
Que doit faire le collectionneur ?
Avec l'éternité devant lui, il ne lui sert à rien de se presser : il a déjà la certitude qu'il ne pourra pas avoir tous les poissons, de toute façon.
Avec sa vie limitée de mortel, il peut se dire que se dépêcher pourra lui permettre de voir plus de poissons dans sa vie, mais est-ce un raisonneent fallacieux ? sa vie ne se résume pas à un remplissage de base de données.
Que doit alors faire le collectionneur ? Doit il adopter une vie lente et réfléchie, se contentant de pouvoir observer un poisson de temps en temps, de le faire avec lenteur et méthode, et savourant ce moment pour ce qu'il est ? comment va-t-il changer ?

View file

@ -0,0 +1,18 @@
# Livret d'épagne populaire
J'ai souscrit au Livret d'épagne populaire
5% au lieu de 3 et quelques
Eligible sur les revenus année N-1 plafond 22 400 € apres abattement
# Forfait carte pour étranger
Avce mon offre actuelle à 8€/mois :
- 2.4% pour paiements
- retraits = 3.2€ + 2.4% de la somme
Avec l'offre cristal premium à 10€ :
- frais à l'étranger
> [!tip]
> ne pas oublier de résilier le forfait de carte cristal premium pour repasser en forfait cristal confort à partir du 1er septembre

View file

@ -0,0 +1,85 @@
---
type: reunion
date: 2024-10-07
---
[Pauline BRULARD, Psychologue à Angers : Prenez rendez-vous en ligne](https://www.doctolib.fr/psychologue/angers/pauline-brulard)
j'ai expliqué mon parcours et les outils que j'ai en place
étape 1
comprendre ele TDAH et se connaître
commencer
bujo
la quantité de notifications
trop de notif contre productif
j'ai viré les réseaux sociaux
mettre en place un temps dédié pour répondre aux mails
possible de mettre en place un cadre perso
pour métier à tisser, dans cette période
syndrome des vacances est un grand classique
pour cette période métier à tisser
sortir travailler ailleurs
lumière chaude lumière froide
quand ça marche ? ca tient dans la durée ? en FX des conditions,
mieux est l'ennemi du bien
pas besoin de faire N bien instantanément
étapes long terme
voir outils
si ça marche
ce que je garde eou pas
expérimenter dans le temps
puis enlever le cadre de la psy
il ya un deuil a faire pour avoir même performances que les autres
périodes où ça marche hein et fautes ou ça marche pas n
TDAH personnes qui fonctionnent par périodes
du coup il fait lâcher la pression
annuler moins de 48h le rdv est du
si choses ne convient pas sur fond ou forme
thérapie sur expérimentations de solutions
aides

View file

@ -0,0 +1,27 @@
---
date: 2024-11-18T14:53
---
55 minutes sa mère
Appel Assurance Allianz pour avoir la portabilité, aka continuer de bénéficier de la complémentaire santé
je suis éligible 1 an car le dernier contrat chez AppCell a duré 1 an
Je dois envoyer une attestation d'être inscrit chez france travail à l'adresse :
> ALLIANZ Santé Prévoyance Collectives
> TSA 90500
> 78547 VELIZY Cedex
> Mail : contratcollectives@sp.allianz.fr
> Tel : 09 80 98 19 82
> Pensez à indiquer votre numéro de contrat 15835CA027
je receverai un mail de confirmation
ensuite, je pourrai envoyer mes factures par mail à la même adresse. (peut-être dans l'espace client ?)
- [x] envoyer mail

View file

@ -0,0 +1,73 @@
---
date: 2024-11-19T12:01
type: reunion
---
# voir avec gens tdah
voir et discuter avec d'autres gens avec TDAH
être en contact avec autres personnes tdah
prendre distance avec exigences que je m'impose
moins se mettre la pression
se construire avec image de soi "nul" a un effet profond
partager avec groupes de pairs
Ce que j'ai fait :
- [x] trouvé serveru discord enf rancais : esprits libres : un peu cringe
- [x] trouvé serveru discord en anglais : ADHD : un peu cringe et encore moins relatable
- [x] cherché mais pas trouvé asso angers
- [ ] chercher groupe nantes
- [ ]
# éducation thérapeutique
mais ça va je m'y connais a priori
# Programme
dont elle a parlé
# revoir exigences
pour revoir les exigences que je me mets a moi même
what we do ?
-- je choisis le programme
Programme :
Surmonter le TDAH
avant 2018, genre 2010
Lopez
16 étapes
gestion du temps
problèmes de mémoire
planification/ priorisation
motivation
hygiène de vie
procrastination
impulsivité
points matériels
côté pratique (livret dessus)
cote théorique (livret bleu)
agenda papier
la prochaine fois :
évaluation rapide des symptômes
point theorique
outil de l'agenda

View file

@ -0,0 +1,88 @@
---
type: article
date: 2023-09-26T13:08
maturity: pousse
---
Le risque zéro n'existe pas.
Comme en matière de sécurité, il faut commencer par définir ce que l'on veut protéger, de quels dangers et les moyens que l'on peut mettre en œuvre pour y parvenir.
cf [[Patrimoine informatique personnel]]
Et donc du temps et du budget que l'on peut y consacrer.
# Conservation des docs physiques
Il en sera tout autrement des photos et vidéos de famille accumulées au fil des années et autres documents importants. N'oubliez d'ailleurs pas que ces derniers doivent parfois être conservés à travers leurs originaux, de manière physique.
Pour cela, un NAS ou un service de stockage en ligne ne changeront rien. Regardez plutôt du côté de la location d'un coffre auprès de votre banque (en général une centaine d'euros par an), ou d'une malette protégée contre la chaleur et les liquides. Vous pourrez en trouver pour 50/100 euros.
# Méthode
## 3 copies d'un même fichier
avoir au moins trois copies
- Celle que vous utilisez au quotidien
- Sauvegarde 1
- Sauvegarde 2
Effectuer les sauvegardes régulièrement, plutôt qu'une fois par mois ou par semaine. Là aussi c'est à adapter selon votre besoin : perdre une semaine de vos photos personnelles peut être acceptable, mais ce ne sera probablement pas le cas pour une journée ou une semaine de travail.
Certains outils permettent de générer des copies régulières ou des « instantanés » (snapshots) toutes les heures, tous les jours, etc. sans impact sur les performances.
Et d'assurer une « rotation des versions » pour ne garder que celles essentielles pour revenir en arrière quand vous le souhaitez, avec une bonne granularité.
Vos sauvegardes (locales et distantes) doivent être régulièrement vérifiées, ce qui vous assurera qu'elles fonctionnent et qu'elles vous permettront de récupérer vos données en cas de problème. Vous avez déjà vécu l'expérience d'un fichier vital perdu à cause d'un HDD/SSD ou d'une clé USB rendant l'âme ? Nombreux sont également ceux qui espéraient pouvoir être sauvés par une sauvegarde... tout aussi défaillante. Ne soyez pas de ceux-là.
Autre erreur commune : considérer que le fait de disposer d'une redondance de type RAID compte comme une copie supplémentaire. Le RAID n'est pas une solution de sauvegarde en tant que telle, c'est une protection contre la défaillance d'une unité de stockage avec ses propres limites, permettant de s'assurer de la disponibilité des données.
## 2 backups différents
Rien ne sert d'avoir des sauvegardes multiples sur le même appareil. Car si celui-ci vient à rendre l'âme, tout peut être perdu.
Ce second support peut être un NAS ou un périphérique de stockage externe par exemple indépendant de la machine que vous utilisez au quotidien.
## 1 backup « hors-site »
En cas d'incendie, de vol ou d'inondation, les backups locaux seront inexploitable
D'où l'importance d'une sauvegarde hors-site.
Cela peut être :
- le NAS d'un ami ou d'un membre de votre famille avec qui vous échangez de l'espace de stockage
- un second bureau dans le cadre d'une entreprise
- un service en ligne
Dans tous ces cas, pensez à protéger vos données en les chiffrant tant dans le transport (HTTPS/TLS) qu'avant de les envoyer à un serveur distant.
Ainsi protégés, le service que vous utilisez ne pourra pas y accéder sans disposer d'un mot de passe ou d'une clé de chiffrement que vous serez seul à connaître.
Une fonctionnalité souvent proposée dans les outils intégrés aux NAS ou via des applications comme [BoxCryptor](https://www.nextinpact.com/news/96217-boxcryptor-2-x-support-windows-10-et-material-design.htm), [Cryptomator](https://www.nextinpact.com/news/108923-cryptomator-1-5-chiffrement-pour-cloud-multiplateforme-et-simplifie.htm), [rclone](https://www.nextinpact.com/news/104998-rclone-browser-accedez-a-vos-services-stockage-en-ligne-et-chiffrez-y-vos-donnees.htm), etc.
# Gestion des versions
## Synchronisation =/= sauvegarde
Une solution de synchronisation n'est pas à proprement dit une sauvegarde. Si une donnée est supprimée localement, elle le sera aussi sur le serveur distant. Utiliser un service proposant du _versioning_, permettant de revenir en arrière en cas de problème.
## Ransomwares
Cela vous aidera à lutter contre les ransomwares
Attention donc à disposer là aussi de sauvegardes qui ne seront pas affectées, conservées hors-ligne et/ou disposant d'une gestion des versions permettant de revenir à une version enregistrée avant l'attaque.
# Software solutions
## Duplicity
#todo
## Duplicati
c# port of dplicity that isnt the same since duplicati v2
>Duplicati is **not** **A file synchronization program.**
>Duplicati is a block based backup solution. Files are split up in small chunks of data (blocks), which are optionally encrypted and compressed before they are sent to the backup location. In backup location, Duplicati uploads not original files but files that contain blocks of original files and other necessary data that allows Duplicati to restore stored files to its original form by restoration process. This block based backup system allows features like file versioning and deduplication. If you need to be able to access your files directly from the backup location, you will need file synchronization software, not block based backup software like Duplicati.
Source : https://duplicati.readthedocs.io/en/latest/01-introduction/#overview
Autrement dit, ma problématique de vouloir a la fois avoir des backups et utiliser ces derniers avec immich par exemple, n'est pas possible. C'est d'ailleurs probablement une mauvaise idée, garder des images bien distinctes et cryptées est une bonne manière d'assurer la pérennité des backups.
# Sources
https://www.nextinpact.com/article/30278/109000-quest-ce-que-strategie-sauvegarde-3-2-1

View file

@ -0,0 +1,86 @@
---
type: article
date: 2024-04-01T21:11:00
maturity: pousse
---
To use the 50/30/20 rule to build your budget, you need to follow these steps:
### Step 1: Know your income
Your income is the money you earn or receive every month. It can come from a job, an allowance, a gift, or a scholarship. Add up all your income sources and write down the total amount. If your only income is your job, write down the amount you get paid each month. This is your starting point for your budget.
### Step 2: Calculate your needs budget
Your needs are the things you must have to live and be healthy. Examples include:
- Rent
- Utilities
- Food
- Transportation
- Insurance
- Basic clothing
To find out how much you can spend on your needs, multiply your income by
 .
For example, if your income is
 , your needs budget is   . This means you should try to keep your needs expenses below
  every month.
### Step 3: Calculate your wants budget
Your wants are the things you like to have but don't really need. Examples include:
- Hobbies
- Entertainment
- Eating out
- Shopping
- Travel
To find out how much you can spend on your wants, multiply your income by
 . For example, if your income is   , your wants budget is  . This means you can spend up to
  on your wants every month.
### Step 4: Calculate your savings budget
Your savings are the money you put aside for your future goals. Examples include:
- Emergency fund
- Retirement account
- College fund
- Any other big purchase you are saving for
To find out how much you should save, multiply your income by
 . For example, if your income is  , your savings budget is  . This means you should save about
  every month.
### Step 5: Write down your actual spending
Now that we have calculated our budget, let's start sorting our _actual_ spending. Grab your latest bank statement, or log into your banking app, and start sorting your actual expenses. For example, if you see that you made a
  payment towards your electric bill, write
  under the "Needs" budget. If you see a charge for movie tickets, write that amount under "Wants" budget.
### Step 6: Compare your expenses to your budget
Subtract your expenses from your budget. This is your budget balance. If your budget balance is zero or positive, that means you are living within your means and have some extra money. If your budget balance is negative, that means you are spending more than you should and may have a budgeting problem.
### Step 7: Adjust your budget
**If your budget balance is negative** in any of the three categories, don't panic! Look at the other categories and see if there is money left in them, and use that extra money to balance or offset the negative balance.
**If there is no extra money**, you need to find ways to reduce your expenses or increase your income.
**If your budget balance is positive**, you can decide how to use your extra money. You can spend it on your wants, save it for your goals, or donate it to a cause.
# Source
https://en.khanacademy.org/college-careers-more/financial-literacy/xa6995ea67a8e9fdd:budgeting-and-saving/xa6995ea67a8e9fdd:budgeting/a/building-a-budget

21
temp-repo/1 Default/ACPI.md Executable file
View file

@ -0,0 +1,21 @@
---
type: article
date: 2024-03-20
maturity: pousse
---
ACPI (Advanced Configuration and Power Interface) is a standard for power management and configuration
In `/etc/acpi` you can put sh scripts that do actions following events
the event triggers are pu in `/etc/acpi/events`
i tried stuff but it doesnt work
rage
https://forums.linuxmint.com/viewtopic.php?t=414162
# Source
https://linuxconfig.org/how-to-handle-acpi-events-on-linux

View file

@ -0,0 +1,17 @@
---
maturity: graine
date: 2023-10-30T14:21
---
# How to get unstuck
count down from 5 and then do the thing
call someone
exercise
# How to make a choice
piqué piqué colégram, et ne pas remetrtre en question
comment faire quand on est plusieurs ?
attendre le dernier moment et faire un choix sans reflechir

View file

@ -0,0 +1,27 @@
https://www.dpreview.com/forums/thread/4452729
Some older AF lenses have aperture rings just like totally manual lenses
lenses without this are designed to be controlled by the body.
If you are adapting these then it's down to the adapter.
Some are 'smart' adapters which translate the aperture signals from body to lens (with varying degrees of success), there are others that have a control ring that operates lens linkages (not found on EF), a few have an iris built into the adapter and the remainder do nothing to the aperture.
There is a trick I've heard reported for EF lenses - set the desired aperture on an EF body with the lens mounted, press & hold the DOF preview & dismount the lens. Apparently this leaves the dismounted lens at the set aperture. I've not been able to check as I don't have an EF body.
example :
https://youtu.be/y1ZuK_dDweg
https://youtu.be/YlVEOyW7NKI
so id need to make an adapter that has a lever to push on the aperture co trop inside the lens :
![](Screenshot_20240222_231739_app.rvx.android.youtube.jpg)

View file

@ -0,0 +1,36 @@
---
type: media
date: 2023-12-13T23:31:00
maturity: pousse
author: "[[Van Neistat]]"
---
# Résumé
van Neistat présente le Gear de son Land cruiser Toyota
son gear est très complet, comporte des outils, des essentiels, de quoi manger, s'amuser, faire du sport, faire un voyage
# Thoughts
son approche hyper méthodique (it took 5 years to perfect this gear) donne un sentiment de safety et de home et cle donne envie de faire des choses similaires
ça rejoint de concept d'[[EDC]]
mais a se préparer parfaitement pour des choses en particulier, est ce que on devient moins capable de réagir face a une situation inattendue ?
pas forcément en vrai, le refinement de son gear s'adapte à ses besoins, et si une situation inconnue arrive, il aura au moins des objets et des connaissances spour faire face
ça donne un sentiment de savoir ce qu'on fait, dadulte
c un piège tho, ça doit accompagner ou suivre une responsabilité, pas en être le précurseur
acheter des outils en se disant que ça va nous rendre plus prêt est capitallisto-bullshitesque
mais savoir avec l'expérience que tel briquet est mieux pour une voiture est cool, par exemple
## Conclusions
-
# Sources
https://youtu.be/-xS9NDtBhdc?si=-sRZPiLCvYHGC30p

View file

@ -0,0 +1,77 @@
---
maturity: graine
date: 2023-10-30T14:18
publish: "true"
---
Compte-rendu de la consultation avec l'allergologue Mme Gérin le lundi 04/09/2023 à 15h20
# Allergènes
Il y a plusieurs allergènes, notemment
- les pollens de graminées,
- es pollens d'arbre
- des moisissures
- les chats
Je suis beaucoup allergique aux graminées et aux arbres de la familles des bouleaux, et un peu moins aux acariens (poussière)
Les graminées sont le plus actifs entre avril et fin juillet.
# Symptômes
Ca me cause :
- des rhinites allergiques (nez qui coule, eternuements, nez qui gratte)
- des conjonctivites allergiques (yeux rouges et qui grattent, pleurs)
- de l'asthme (gene pour respirer, ça siffle et je tousse)
J'ai un asthme. Elle m'a fait un test de respiration et c'était mieux avec de la ventoline.
# Actions préventives & curatives
- Aérer l'appart le matin
- Changer de vetements en rentrant chez moi
- Prendre une douche, laver les cheveux
- Utiliser un purificateur d'air
- Rouler fenêtres fermées + clim en voiture
- Surveiller la météo pollen (https://pollens.fr)
Eviter de :
- Sortir en milieu de matinée et en fin d'aprem
- Se promener par temps sec, ensoleillé et venteux
- Sortir les cheveux mouilles : ca fixe les pollens
- Faire sécher le linge à l'extérieur
- tondre la pelouse (mdr)
# Traitement
## Symptômatiques
- Bilastine
- Loratadine
Ont des effets secondaires ? Peuvent etre pris sur le long terme ?
## Désensibilisation
Dure 3 ans
Réduit les symptomes
Coute 60€/mois pour les graminées, 80€/mois pour les bouleaux
= 5000 € environ
Voir si mutuelle prend en charge.
Si uniquement 1 des 2 (80€/mois) alors choisir par lequel commencer.
Sous forme de gélules à prendre 1 fois par jour, ou de pschit.
Commence en octobre pour les graminées et en octobre pour les bouleaux
Est efficace des la 1ere année
Un traitement de l'asthme commence avant.
Besselievre 2024-02-13
Flexotide et ventoline pris en charge, pour le traitement
# Sources
Dépliant de la clinique
https://maviedallergik.fr/

View file

@ -0,0 +1,19 @@
---
type: article
date: 2023-11-24T21:55
maturity: graine
---
Fait d'améliorer lentement et continuellement soi-même.
cf [Self actualization](https://en.wikipedia.org/wiki/Self-actualization)
Ca concerne plusieurs domaines :
- connaissances
- savoir etre
- valeurs
- compétences
# Pourquoi
# Comment

View file

@ -0,0 +1,13 @@
# Plus riches
Comparaison par tabagn'sss
Comparaison par promsss
Comparaison par sunr'ssss
# Egalité
coef gini

View file

@ -0,0 +1,82 @@
# Annonce originale
Je met en vente un ordinateur portable / Workstation Lenovo P52 en parfait état esthétique et de fonctionnement. Très peu servi et issu de la gamme professionnelle de laptop Lenovo, très connu pour leurs robustesses et leurs performances. Lenovo anciennement IBM est reconnue mondialement c'est pour cela qu'avec la gamme THINKPAD, elle rentre en concurrence avec DELL et sa gamme XPS et PRECISION mais également HP avec leur gamme Probook et Elitebook. Ce type de pc est fait pour une utilisation de gros logiciels de CAO, graphisme, montage audio/vidéo ( Autocad, Solidworks, Revit, Photoshop, Illustrator...)
----------------------------------------------------------------------------------------------
Caractéristiques:
- Processeur : Intel Xeon E.2176M
- Mémoire Vive (RAM) : 16 Go
- Stockage (Disque SSD) : 512 Go (Très rapide)
- Écran Full HD (1920 x 1080) 15" antireflet avec rétroéclairage LED
- Carte Graphique : NVIDIA Quadro P2000 et Intel UHD Graphics 630
- Wifi
- Bluetooth
- 2 x USB-C
- 3 x USB 3.0
- HDMI
- Mini Display Port
- RJ45 Ethernet
- Lecteur de carte multi-format 4-en-1
- Connecteur mixte écouteurs/micro
- Hauts Parleurs Stéréo
- Webcam et Micro intégré
- Clavier avec pavé numérique
- Lecteur d'empreintes
- Système d'exploitation Windows 11 Professionnel à jour avec sa licence
- Ordinateur formaté donc système remis à neuf
Logiciels installés :
-Suite Pack Office (Word, Power Point, Excel, Access, One Note, Publisher, One drive...)
Aucun pixel hs et aucune rayure sur l'écran.
Vendu avec son chargeur d'origine neuf.
Envoi possible dans toute la France en Mondial Relay et Colissimo
**Tel: O769O16526**
Remise en main propre possible également
# Annonce refaite :
Lenovo Thinkpad P52 - 15.6" 16Go Xeon SSD 512Go Nvidia Quadro
Ordinateur portable / Workstation Lenovo Thinkpad P52 en parfait état esthétique et de fonctionnement.
Très peu servi et issu de la gamme professionnelle de laptop Lenovo, connu pour leur robustesse et leurs performances. Lenovo anciennement IBM est reconnue mondialement c'est pour cela qu'avec la gamme THINKPAD, elle rentre en concurrence avec DELL et sa gamme XPS et PRECISION mais également HP avec leur gamme Probook et Elitebook.
Ce type de pc est fait pour une utilisation de gros logiciels de CAO, graphisme, montage audio/vidéo ( Autocad, Solidworks, Revit, Photoshop, Illustrator...)
-------------------------------------------------------------------------------
Caractéristiques:
- Processeur : Intel Xeon E.2176M
- Mémoire Vive (RAM) : 16 Go
- Stockage (Disque SSD) : 512 Go (Très rapide)
- Écran Full HD (1920 x 1080) 15" antireflet avec rétroéclairage LED
- Carte Graphique : NVIDIA Quadro P2000 et Intel UHD Graphics 630
- Wifi
- Bluetooth
- 2 x USB-C
- 3 x USB 3.0
- HDMI
- Mini Display Port
- RJ45 Ethernet
- Lecteur de carte multi-format 4-en-1
- Connecteur mixte écouteurs/micro
- Hauts Parleurs Stéréo
- Webcam et Micro intégré
- Clavier avec pavé numérique
- Lecteur d'empreintes
- Système d'exploitation Windows 11 Professionnel à jour avec sa licence
- Ordinateur formaté donc système remis à neuf
Aucun pixel hs et aucune rayure sur l'écran.
Vendu avec un chargeur Lenovo de 130W (plus performant que celui d'origine) qui permet de charger le PC même en effectuant les tâches les plus intensives.
Envoi possible dans toute la France en Mondial Relay et Colissimo. Le colis sera soigné et bien rembourré pour garantir que le PC ne soit pas abîmé pendant le transport.
Nous pouvons nous contacter par visio au préalable pour une démo du PC si vous ne pouvez pas vous rendre sur place.
Remise en main propre possible également à Angers.

22
temp-repo/1 Default/Anytype.md Executable file
View file

@ -0,0 +1,22 @@
---
type: article
date: 2023-11-22T15:30
maturity: graine
---
Knowledgebase tool
## Pros
- sets et liens
- taches et listes qui se mettent à jour
- stuctur pkus complexe, plus efficace ?
- formatting
- images reshaped
- columns
- simpler image management
## Cons
- jaime la simplicité du md
- pas aussi libre / flexible que un dossier de random fichier md
- encore en developpement, fiable à long terme ?
- pas compatible avec import md de obsidian, liens ne se font pas
- no tabs

View file

@ -0,0 +1,53 @@
tu trouves ca normal qiuil ny ait pas de nouvelles pendant 5 mois ? je suis pas en train de t'accuser
non c pas normal, c horrible. vous ne m'avez pas demandé de nouvelles non plus, vous ne mavez meme pas envoyé de message pour mon anniversaire.
ok. moi je me suis preté à tes demandes, sms, etc. je veux pas faire come ca. est ce que tu veux quon en reparle dune autre maniere. jetais daccord pour avoir cette conversation mais pas par cette méthode.
tu te mets exactement au meme niveau que nous, toi en tant qu'enfant, au meme niveau que nous
c bizarre
c exagéré
"ya plus de maman"
tes termes sont ridicules
on dirait que tu enregistres ce que je dis pour une raison juduciaire. ya pas de divorce et de proces
tu dis que tu veux refelchir. dun coup tu peux plus reflechir
jai jamais pu reflechir
tu vux quon se retrouve à chateau gontier ou a mayenne ?
ok poutsquoi pas
pas possible à mayenne. tu suppportes pas et il faudra que tes soeurs & imane explique,s mais c pas possible
à toi de voir, tu decides, tu proposes..
> Donc once again à moi de faire l'effort
chateau gontier it is
ensuite on planifie le moment.
moi je veux pas par message ou appel, ca va pas se relger comme ca.
tu peux pas venir a mayenne, tu suppoprtes pas
"ya plus de maman"
tu te metsre

View file

@ -0,0 +1,178 @@
---
type: cours
date: 2024-01-23T13:46:00
---
Prof : Guillaumat
![](Fiabilité_IPI.pdf)
# L'incertain
## Intégrer la variabilité dans les modèles
## Est-ce vraiment incertain ?
Exemple du lancer de dé
Si on maitrise les paramètres, on baisse la variabilité. On peut lancer un dé en mettant vers le haut toujours le même nombre, alors on voit que la probabilité n'est plus homogène. Même chose pour un pile ou face : si on maitrise le face en haut, la manière de lancer, la vitesse, etc, on peut squew les probabilités
Planche de galton
![](Pasted%20image%2020240123135102.png)
Si je ne maitrise pas le système, je peix maitriser les phénomènes statistiques, et prédire la distribution à la fin.
Ca donne une loi binomiale (bi = 2 choix à chaque fois)
Loi normale = appelée comme ça car elle correspond à la situation normale.
"L'effet visiteur" : quand on veut montrer un phénomène et qu'il ne fonctionne pas
## Facteurs influents
Aléas internes & externes au système
- Conditions climatiques
- Propriétés des matériaux
- Facteur humain
- Chargement mécanique
- etc.
Risque = occurence * impact
Dans nucméaire, on vise des probbilités de défaillance de $10^{-6}$ (1 chance sur 1 million), parceque l'impact est majeur.
C'est l'inverse pour la fiabilité d'une voiture par exemple
# Approche mécano-probabilitse
## Démarche
![](Pasted%20image%2020240123140432.png)
![](Pasted%20image%2020240123140513.png)
Métamodèle
Surface de répons,e plan d'expérience
Comment replacer la physique par un polynôme qui modélise la réalité avec l'avantage de pouvoir faire des calculs de prédiction N rapides au coût du calcul du modèle en amont
## Méthode contrainte-résistance
On construit une fonction d'état limite, ou fonction de performance :
$$G = R - S$$
Avec :
- G =
- R = Résistance
- S = Sollicitation
Les étapes dune approche fiabiliste :
1. Définir le modèle mécanique (AMDEC) ;
2. Définir les données probabilistes, ou variables de conception ;
3. Choisir le scénario de défaillance (dimensionnant pour la structure)
-> définition de la fonction de performance G = R-S
- Surface d'état-limite
- Domaine de sûreté Ds
- Domaine de défaillance Df
4. Effectuer les calculs de probabilité ;
5. Analyser les résultats, étude de sensibilité.
## Fonction Contrainte-Résistance
![](Pasted%20image%2020240123141157.png)
Intégrale de la partie verte = G négatif,
## Calcul par intégration
## Méthode de Monté-Carlo
![](Pasted%20image%2020240123141918.png)
Méthode bruteforce dans laquelle on réalise les tirages
On prend une valeur de chaque distribution de S & R, et on les compare
On fait plein de comparaisons, et au bout d'un moment, en comptant les résulatts des comparaisons, on obtient la proba G
Beaucoup de calculs à faire ! $10^{n+2}$ tirages
En python, utiliser :
```python
normrnd(moyenne, ecart type, [ ])
```
![](Pasted%20image%2020240123142138.png)
![](Pasted%20image%2020240123142224.png)
On part d'une loi uniforme (distribution avec même proba en chaque nombre) et on la multiplie par une fonction de distribution
![](Pasted%20image%2020240123142703.png)
Illustration qu'il faut N de tirages pour que la distribution fasse sens. Ici pour l'illustrer on reconsrtuit la distribution uniforme en refaisant la trsnformationà l'envers
## Méthode FORM/SORM
First (& Second) Order Reliability Method
![](Pasted%20image%2020240123143013.png)
P = l'argument -beta dans la loi centrée réduite
L'argument -B esite dans un repère spécial centré autour de 0
### Exemple : Comparaison entre FORM & Monté-Carlo
>Coefficient de variation = $\frac{\sigma}{moyenne}$
>Donne la valeur de l'ecart type en fx de la moyenne, permet d'avoir une idée générale de l'importance de l'écart-type
Pour des très petites probabilités, monte carlo, qui repose sur beaucoup d'essais, ne fonctionne plus alors que FORM, qui est analytique, on peut la calculer pour toute valeur.
### Démonstration
---
Décrochage absolu sur l'explication de FORM/SORM
---
### Application 1
![](Pasted%20image%2020240123154236.png)
On veut transformer les distributions qu'on a en gaussienne centrée réduite
Il faut pour cela faire un cahngelent de variable
$$\frac{x-moyenne}{\sigma_x} = \frac{u-0}{1}$$
![](Pasted%20image%2020240123160409.png)
2.70 :
![](Pasted%20image%2020240123160555.png)
$$1-0.99653 = 0.00347$$
$$P = \Phi(-\beta)=1-\Phi(\beta)=0.00347$$
Aka : 0.35% de change de rupture
### Application 2 : cas non hyper-plan
Si l'équation de H n'est pas un hyper-plan, on fait de grosses erreurs
![](Pasted%20image%2020240123160925.png)
Avec la méthode SORM ("Second order") on réduit l'erreur
---
Fin du cours, diapo à partir de 48 chappées

View file

@ -0,0 +1,18 @@
---
type: article
date: 2024-05-18T07:42
maturity: graine
---
# Definition
L**astrolabe** (du grec ancien ἀστρολάβος / _astrolábos_ via le latin médiéval _astrolabium_, « preneur d'astres ») est un instrument astronomique d'observation et de calcul analogique.
L'astrolabe superpose deux fonctions principales différentes qui peuvent être associées : mesurer la hauteur d'un astre d'une part et déterminer l'heure de l'observation d'autre part. La mise en œuvre de ces deux fonctions permet de décrire la constitution et les tracés élémentaires de l'instrument
![[Sans titre 1.jpeg|464]]
Astrolable de Rennerus Arsenius, 1569
vu au [[Musée des Arts et Métiers]]
# Sources
https://fr.wikipedia.org/wiki/Astrolabe

View file

@ -0,0 +1,26 @@
---
type: objet
date: 2025-01-29T11:19
maturity: graine
---
# Caractéristiques
# Entretien
## LAptop waking up from sleep when lid closed
> [!quote] Linux Mint forums - BT mouse
> [You are being redirected...](https://forums.linuxmint.com/viewtopic.php?t=414162)
> I had this problem for a while where my laptop would start to heat up while closed, and realized its because it was being woken up while closed and running when it should be suspended. I managed to figure out it was because my bluetooth mouse was giving it input while rattlign around in my backpack and waking it up.
> [!quote]
> [Laptop waking from suspend when lid closed - Linux Mint Forums](https://forums.linuxmint.com/viewtopic.php?t=411541)
>
![[Asus Zenbook 14-20250129113058989.jpg]]
Faire une expérience en fermant le laptop et en reproduisant le défaut, puis lire journalctl. Les détails sont dans le 2e topic de forum.

1
temp-repo/1 Default/Auxane.md Executable file
View file

@ -0,0 +1 @@
<3

View file

@ -0,0 +1,5 @@
![[IMG_20241105_161629.jpg]]
![[Screenshot_20241109_131335_org.mozilla.firefox.jpg]]
![[Screenshot_20241109_130659_org.mozilla.firefox.jpg]]

12
temp-repo/1 Default/Besace.md Executable file
View file

@ -0,0 +1,12 @@
---
type: article
date: 2024-07-22T01:35
maturity: graine
---
avntahes
- tout est facile d'accès en la portant
inconvénients
- + mal au dos

View file

@ -0,0 +1,31 @@
# Contraintes
- Noir & blanc
- Pas de nuance de gris
- Hashes
- Cercles concentriques
- Inspiré du dessin technique
# Idées
## Bâtiment complexe w/ centres d'intérêts
AVantages
- Multitude d'intérets représentés
- Affichage de mind goes brrr
Inconvénients
- Trop complexe de loin
# Kilomètre
- Dessin complexe qui fait une image plus simple vu de loin
- plan coté de système mécanique avec messages cachés
-
Thèmes
- moto
- mécanique eternelle
- voiture
- electronique
- usine
- calligraphie
- etrnager / jordanie
- machine à écrire
-

15
temp-repo/1 Default/Bricks.md Executable file
View file

@ -0,0 +1,15 @@
---
type: recipe
date: 2024-05-20T21:01
maturity: graine
duration:
---
- **Servings :**
- **Prep time :**
- **Cook time :**
# Ingredients
# Instructions
# Sources

View file

@ -0,0 +1,23 @@
Liste de trucs que je veux faire dans ma vie
- [ ] Apprendre à faire des silex / pointes de flèches etc
2017 :
miner un métal / pierre précieux(se)
construire une grande bobine tesla musicale
posséder une arme à feu
aller dans un pays en guerre
devenir millionaire
faire unne grosse explosion
inventer qqch de reconnu
faire des graffitis reconnus
apprendre à piloter des avions
acheter un avion
vivre l'amour de ma vie - encore
avoir des enfants
apprendre à tuer & vider un animal
apprendre à coudre
apprendre à souder (bien)
piloter un avion RC à 10km de distance
sauter en parachute
construire un trébuchet

View file

@ -0,0 +1,7 @@
---
type: article
date: 2023-10-29T18:41
maturity: graine
publish: "true"
---
Méthode de journal quotidien pour aider à organiser les tâches et le temps, mais aussi prendre des notes, logger des informations.

0
temp-repo/1 Default/COFAB.md Executable file
View file

View file

@ -0,0 +1,13 @@
Valentine mollereau menthe poivree 50
Achille 50
Lou 30
Lucrezia 40
piwel massard & marc 60
Eléonore et Alexandre 50
Irina Juliette 50
Elisabeth 50
Simon 20
Nataly 40
total 440

View file

@ -0,0 +1,7 @@
Stamps for events is skin-safe, alcohol based
https://www.rubberstampchamp.com/products/752-skin-safe-waterproof-refill-ink-2-oz
can it be put in a feutre ?
Water based markers :
- ok pour peau
- s'étale avec la sueur

View file

@ -0,0 +1,18 @@
---
type: article
date: 2024-05-18T09:10
maturity: graine
---
# Definition
[[Imprimerie]]
![[Caractères métalliques mobiles-20240518091046984.jpg]]
![[Caractères métalliques mobiles-20240518091016444.jpg]]
![[Caractères métalliques mobiles-20240518091028044.jpg]]
# Sources

View file

@ -0,0 +1,4 @@
N° Carte : 29090104 416555555
Période de validité : du 17/03/2022 au 16/03/2023
Dossier : SGUWFW

View file

@ -0,0 +1,20 @@
---
type: article
date: 2023-10-30T14:17
maturity: graine
---
The idea is to build a system that permits me to have better control over the media I consume and the way I consume it.
# Why
- Promote independent creators of media
- Consume media more healthily
- Less brain numbing (opposite of shorts)
- Good balance between entertainment & education
# Software / solutions
## RSS Feeds
[RSS Feeds](RSS%20Feeds)
### Aggregators :
- Newsblur

View file

@ -0,0 +1,25 @@
Chambre / actuel / quitte / futur
105 / ? / ? / Cardona
102 / Letort / Mi juillet / ?
104 (28m2) / Fabian fourré / 13 juin / Éloi joguet intéressé
112 / ? / ? / Alessandro gianelli
114 / ? / ? / Vianney 35
127 / Xavier Roudaut
221 / Zhao / Aout / ?
226 / Thomas Daniel / 3 juin / ?
Ange bernard grande
maxime gaillard grande 202 pas coté cloitre
![273874316_373130847528705_7536561610610755334_n.png](../_resources/273874316_373130847528705_7536561610610755334_n.png)
![273670014_273699411542373_8795483831708809247_n.png](../_resources/273670014_273699411542373_8795483831708809247_n.png)
![273637793_330861985666827_4169715293333260373_n.png](../_resources/273637793_330861985666827_4169715293333260373_n.png)

View file

@ -0,0 +1,5 @@
---
type: article
date: 2023-10-29T18:32
maturity: graine
---

View file

@ -0,0 +1,12 @@
Je dois choisir quelle imprimante 3D acheter pour mon projet de métier à tisser et plus tard, pour mes prochains projets. Il y a beaucoup de choix et je suis perdu, en partie parceque je ne sais pas quels critères sont importants pour moi.
De quoi j'ai *besoin* pour mon projet ?
- Imprimante fiable qui ne tombe pas en panne
- Imprimante capable d'imprimer des matériaux de bonne qualité pour que mon métier à tisser tienne dans le temps.
De quoi je n'ai pas besoin ?
- Multi-material
- "gadgets"

27
temp-repo/1 Default/Chômage.md Executable file
View file

@ -0,0 +1,27 @@
---
type: article
date: 2024-07-26T19:37
maturity: graine
---
# Eligibilité
Il faut avoir travaillé 6 mois
Il faut faire la demande dans les 12 mois
Il ne faut pas avoir quitté volontairement son emploi
Le calcul se fait à partir du jour de la demande, au plus tot le lendemain du dernier jour de taf.
# Montant
Suite
- au stage chez appcell
- au cdd au smic chez appcell
- puis à l'année d'alternance chez appcell
![[Chômage-20240726194612585.jpg]]
Je serais éligiblie à environ 1000€/mois
# Sources
https://www.francetravail.fr/candidat/mes-droits-aux-aides-et-allocati/lessentiel-a-savoir-sur-lallocat/ai-je-droit-a-lallocation-chomag.html

View file

@ -0,0 +1,14 @@
![[Pasted image 20231102193057.png]]
# Mes missions
materiau : fonte
aude caillaud est ok si tout est prêt
c ok d'utiliser des disques de freins ?
quelle deadline ?
quel budget ?

View file

@ -0,0 +1,14 @@
---
type: article
date: 2024-05-18T09:22
maturity: graine
---
# Definition
# Ressources
https://lcwo.net
# Sources

View file

@ -0,0 +1,5 @@
---
type: article
date: 2023-10-29T18:41
maturity: graine
---

View file

@ -0,0 +1,14 @@
---
type: ressource
date: 2024-05-18T09:27
maturity: graine
---
# Definition
# Liste
- [[Japy S18]]
-
# Sources

View file

@ -0,0 +1,31 @@
pour coller du polycarbonate,
on peut le "coller" aka rajouter une matière entre les 2
soit de la cyanoacrylate, ou de l'epoxy (un peu mieux )
on peut chauffer et resouder les 2 bouts
le plus efficace est de "bond" en utilisant un solvant
le best est le dichloromethane (aka methylene chloride)
le methylethylcetone (aka butanone) fonctionne aussi
ce produit commercial fonctionne aussi askip :
![](Screenshot_20231219_170243_app.rvx.android.youtube.jpg)
sources
https://youtu.be/bq0bRhKTN9E
https://youtu.be/s7TfdinHyJs
https://en.wikipedia.org/wiki/Dichloromethane?wprov=sfla1
https://en.wikipedia.org/wiki/Polycarbonate?wprov=sfla1
https://en.wikipedia.org/wiki/Butanone?wprov=sfla1

View file

@ -0,0 +1,21 @@
---
type: ressource
date: 2024-09-12
maturity: graine
tags:
- synthèse
- résumé
---
de quoi ça parle ?
a qui est destiné ce document ?
pourquoi il est écrit ?
quel enjeu a ce document , (opposé aux enjeux décrits dans le document)
quel est le message que veut faire passer ce document
par ex, un rapport de stage veut montrer que l'étudiant a des connaissances et des compétences et qu'il sait les appliquer

View file

@ -0,0 +1,35 @@
Pour mieux compre'ndre l'effet de "Local variations", je pense qu'il serait mieux que le photogram précédemment généré reste à l'écran jusqu'à ce que le nouveau se génère : aujourd'hui, lorsqu'on change un paramètre de "Local variations", l'interface de preview est reset et montre la première image du timelapse.
mettre un bouton "toggle variation preview, je l'avais raté"
j'ai save mon projet et j'ai eu not responding
j'avais modifié des choses avant
1er problème :
Description du problème :
Lorsque je charge des images jpeg de dimensions différentes, puis que le lance le rendu, le logiciel crash
Steps to reproduce :
- Lencer le logiciel
- import pictures
- select pictures of different sizes but of same extension (jpeg)
- import forks fine
- render
- logiciel crashes
cf l'enregistrement d'écran joint
2e problème
Description du problème :
Lors de l'enregistrement du projet alors que mon disque dur est utilisé à 100% (copie de fichiers en arrière-plan), photogram met un peu de temps à enregistrer, ce qui gruise le logiciel et indique "program not responding". Le logiciel revient à la normale dès que le fichier projet est enregistré et ne crash pas.
Steps to reproduce :
- Copier beaucoup de fichier sur mon disque dur (jeviens de m'acheter un nouveau pc héhé)
- Lancer photogram et importer des images
- changer des paramètres (quels paramètres sont chnagés n'a pas d'impact)
- Save project
- Au bout de quelques secondes, le logiciel se grise et affiche "not respondong"
- au bout de qq secondes supplémentaires il revient à la normale et le fichier .photogram est correctement enregistré (il fait environ 100mo)

View file

@ -0,0 +1,12 @@
---
type: article
date: 2023-10-10T19:31
maturity: graine
---
![[bonhomme-OSBD-1024x576-1024x576.jpg]]
# Sources
https://fr.wikipedia.org/wiki/Communication_non_violente

View file

@ -0,0 +1,14 @@
| Modele | Taille | resolution | freq | lien specs | Annee | Pris occas | prix neuf | prix | marque | panel type | apparence |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| U28E570D | 28 | 4k | 75Hz | [lien](https://displaylib.com/samsung-u28e570d/) | 2016 | 100-200 | 300 [src](https://www.lcd-compare.com/moniteur-SAMU28E570D-SAMSUNG-U28E570D.htm) | 150 | samsung | | ok |
| ge2788HS | 27 | 1080p | 75Hz | [lien](https://www.displayspecifications.com/en/model/c452a6b) | 2016 | | | | iiyama | | ok |
| W2361V | 23 | 1080p | 60 | [lien](https://www.lg.com/us/support/product/lg-W2361V-PF.AUS) | 2009 | 30 | | | LG | | ok |
| XG270HU | 27 | 1440p | 75? 144 ? | [lien](https://www.displayspecifications.com/en/model/695155) | 2015 | | | 130 | ACER | TN | gagming moche rouge |
si j'attends la carte cadeau je pourrai m'en acheter un à 150€ sur cdiscount
le 4k est la seule maniere davoir du 4k à ce prix là

View file

@ -0,0 +1,33 @@
une liseuse smart menoarmettrait de lire plus intelligemment ?
voir
[[Reading notes]]
amazon kindle
cybook odyssey
cybook muse 50e
https://www.leboncoin.fr/livres/2462897091.htm
Sony reader
https://www.leboncoin.fr/livres/2453686907.htm
50e
kobo aura 2
trop petit aussi haut qu'un portable
60e lbc
bookeen diva hd
https://www.leboncoin.fr/tablettes_liseuses/2453198923.htm
https://www.lesnumeriques.com/liseuse/bookeen-diva-hd-p54821/test.html
remarkable
https://github.com/reHackable/awesome-reMarkable
les remarkable sont assez hackables

View file

@ -0,0 +1,132 @@
---
type: cours
date: 2024-01-22T09:20:00
---
![](Composites_IPI.pdf)
# Concept
- MAtrice
- Interface / Interphase
- Fibres
Les thermodurcissables ne sont pas recyclables
Mais les thermofusibles sont trop visqueux et donc compliquent le procédé lors de l'imprégnation des fibres
Il y a de la recherche sur la recyclabilité de fibre de carbone car elle est plus chère, mais pas sur la fibre de verre
- Fibre de carbone : ~10€/kg
- Fibre de verre : ~1€/kg
Mais les fibres recyclées sont-elles encore de bonne quelité ? L'ensimage (coating des fibres qui sert à améliorer l'interface) est-il encore là ?
## La fibre
![](Pasted%20image%2020240122093416.png)
Rouissage :
Laisser les tiges au sol pour que des bactéries décomposent ce qui entoure les fibres.
Le lin c'est sympa, mais attention à l'impact carbone & l'utilisation d'eau.
Important de prendre en compte l'ACV (analyse du cycle de vie) et pas uniquement le coût energétique & environnemental du matériau
## La matrice
Polymère
- Polyester
- époxyde
- phénolique
Métal
- aluminium
- titane
Céramique
- Silice
- Carbone
Il exitste de la "greenpoxy" faite à 75% de biomasse. Ca reste un thrmodur tho
# Structure
## Matériaux startifiés
superposition de plis
Dans une structure il peut y avoir des centaines deplis : 400 plis à certains endroits dans le Rafale
Il existe des outils informatiques qui servent à calculer le sens, la taille, le type de fibre...
basés sur des réseaux de neurone
## Les sandwichs
![](Pasted%20image%2020240122095721.png)
Concept du moment quadratique qui augmente si on éloigne les "peaux" du plan moyen
Comme poutre en I
# Les procédés
## Le moulage au contact
![](Pasted%20image%2020240122100420.png)
Eoliennes faites comme ça
## Infusion
![](Pasted%20image%2020240122100454.png)
## Resin transfer molding
![](Pasted%20image%2020240122100631.png)
avantage : cadence plus élevée, 2 peaux lisses car moules des 2 côtés
## Autoclave
![](Pasted%20image%2020240122100814.png)
Fibres préimprégnées
Mâts de bateau
Puis cuit dans un four autoclave
Matériaux "OOO" "out of autoclave" pour gérer le dégazage et ne pas avoir à utiliser des autoclaves de plusieurs 10aines de m
## Enroulement filamentaire
![](Pasted%20image%2020240122100956.png)
![](Pasted%20image%2020240122101011.png)
Pour pièces de révolution
# Comportement mécanque du pli
## Le comportement du pli
## Loi des mélanges
## Comportmerent du pli
Il faut équilibrer les plis sinon ça vrille dès qu'il y a un chargement. Les fibres subissent un cisaillement
cf diapo
Lespropriétés des composites décroissent N vite avec l'angle :
![](Pasted%20image%2020240122101813.png)
# Endommagement
Quand on quitte la déformation élastique, c'est de l'endommagement :
- fissures
- délaminage
- décohésion fibre-matrice
- rupture de fibres

Some files were not shown because too many files have changed in this diff Show more