diff --git a/.config/autostart/Nextcloud.desktop b/.config/autostart/Nextcloud.desktop
new file mode 100644
index 0000000..219765f
--- /dev/null
+++ b/.config/autostart/Nextcloud.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=Nextcloud
+GenericName=File Synchronizer
+Exec="/usr/bin/nextcloud" --background
+Terminal=false
+Icon=Nextcloud
+Categories=Network
+Type=Application
+StartupNotify=false
+X-GNOME-Autostart-enabled=true
+X-GNOME-Autostart-Delay=10
diff --git a/.config/autostart/Zoiper5.desktop b/.config/autostart/Zoiper5.desktop
new file mode 100644
index 0000000..31924a7
--- /dev/null
+++ b/.config/autostart/Zoiper5.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Zoiper5
+Comment=VoIP Softphone
+Exec=/usr/lib/zoiper/zoiper
+Terminal=false
+Icon=
+Type=Application
diff --git a/.config/autostart/discord.desktop b/.config/autostart/discord.desktop
new file mode 100644
index 0000000..5c62263
--- /dev/null
+++ b/.config/autostart/discord.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Type=Application
+Exec=/home/templis/.config/discord/app-1.0.151/Discord
+Hidden=false
+NoDisplay=false
+Name=Discord
+Icon=/home/templis/.config/discord/app-1.0.151/discord.png
+Comment=Text and voice chat for gamers.
+X-GNOME-Autostart-enabled=true
diff --git a/.config/autostart/kitty.desktop b/.config/autostart/kitty.desktop
new file mode 100644
index 0000000..4fce1c0
--- /dev/null
+++ b/.config/autostart/kitty.desktop
@@ -0,0 +1,16 @@
+[Desktop Entry]
+Categories=System;TerminalEmulator;
+Comment=Fast, feature-rich, GPU based terminal
+Exec=kitty
+GenericName=Terminal emulator
+Icon=kitty
+Name=kitty
+StartupNotify=true
+TryExec=kitty
+Type=Application
+Version=1.0
+X-TerminalArgAppId=--class
+X-TerminalArgDir=--working-directory
+X-TerminalArgExec=--
+X-TerminalArgHold=--hold
+X-TerminalArgTitle=--title
diff --git a/.config/autostart/ntfy-kde.sh.desktop b/.config/autostart/ntfy-kde.sh.desktop
new file mode 100644
index 0000000..452c62b
--- /dev/null
+++ b/.config/autostart/ntfy-kde.sh.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Exec=/home/templis/.config/old-autostart-scripts/ntfy-kde.sh
+Icon=application-x-executable-script
+Name=ntfy-kde.sh
+Type=Application
+X-KDE-AutostartScript=true
diff --git a/.config/autostart/org.keepassxc.KeePassXC.desktop b/.config/autostart/org.keepassxc.KeePassXC.desktop
new file mode 100644
index 0000000..12566cd
--- /dev/null
+++ b/.config/autostart/org.keepassxc.KeePassXC.desktop
@@ -0,0 +1,17 @@
+[Desktop Entry]
+Name=KeePassXC
+GenericName=Passwortmanager
+Exec=keepassxc
+TryExec=keepassxc
+Icon=keepassxc
+StartupWMClass=keepassxc
+StartupNotify=false
+Terminal=false
+Type=Application
+Version=1.0
+Categories=Utility;Security;Qt;
+MimeType=application/x-keepass2;
+X-GNOME-Autostart-enabled=true
+X-GNOME-Autostart-Delay=2
+X-KDE-autostart-after=panel
+X-LXQt-Need-Tray=true
diff --git a/.config/autostart/org.mozilla.Thunderbird.desktop b/.config/autostart/org.mozilla.Thunderbird.desktop
new file mode 100644
index 0000000..9398b09
--- /dev/null
+++ b/.config/autostart/org.mozilla.Thunderbird.desktop
@@ -0,0 +1,168 @@
+[Desktop Entry]
+Name=Thunderbird
+Comment=Send and receive mail with Thunderbird
+Comment[ast]=Lleer y escribir corréu electrónicu
+Comment[ca]=Llegiu i escriviu correu
+Comment[cs]=Čtení a psaní pošty
+Comment[da]=Skriv/læs e-post/nyhedsgruppe med Mozilla Thunderbird
+Comment[de]=E-Mails und Nachrichten mit Thunderbird lesen und schreiben
+Comment[el]=Διαβάστε και γράψτε γράμματα με το Mozilla Thunderbird
+Comment[es]=Lea y escriba correos y noticias con Thunderbird
+Comment[fi]=Lue ja kirjoita sähköposteja
+Comment[fr]=Lire et écrire des courriels
+Comment[gl]=Lea e escriba correo electrónico
+Comment[he]=קריאה/כתיבה של דוא״ל/חדשות באמצעות Mozilla Thunderbird
+Comment[hr]=Čitajte/šaljite e-poštu s Thunderbird
+Comment[hu]=Levelek írása és olvasása a Thunderbirddel
+Comment[it]=Per leggere e scrivere email
+Comment[ja]=メールの読み書き
+Comment[ko]=Mozilla Thunderbird 메일/뉴스 읽기 및 쓰기 클라이언트
+Comment[nl]=E-mail/nieuws lezen en schrijven met Mozilla Thunderbird
+Comment[pl]=Czytanie i wysyłanie e-maili
+Comment[pt_BR]=Leia e escreva suas mensagens
+Comment[ru]=Читайте и пишите письма
+Comment[sk]=Čítajte a píšte poštu pomocou programu Thunderbird
+Comment[sv]=Läs och skriv e-post
+Comment[uk]=Читання та написання листів
+Comment[vi]=Đọc và soạn thư điện tử
+Comment[zh_CN]=阅读邮件或新闻
+Comment[zh_TW]=以 Mozilla Thunderbird 讀寫郵件或新聞
+GenericName=Mail Client
+GenericName[ast]=Client de correu
+GenericName[ca]=Client de correu
+GenericName[cs]=Poštovní klient
+GenericName[da]=E-postklient
+GenericName[de]=E-Mail-Anwendung
+GenericName[el]=Λογισμικό αλληλογραφίας
+GenericName[es]=Cliente de correo
+GenericName[fi]=Sähköpostiohjelma
+GenericName[fr]=Client de messagerie
+GenericName[gl]=Cliente de correo electrónico
+GenericName[he]=לקוח דוא״ל
+GenericName[hr]=Klijent e-pošte
+GenericName[hu]=Levelezőkliens
+GenericName[it]=Client email
+GenericName[ja]=電子メールクライアント
+GenericName[ko]=메일 클라이언트
+GenericName[nl]=E-mailprogramma
+GenericName[pl]=Klient poczty
+GenericName[pt_BR]=Cliente de E-mail
+GenericName[ru]=Почтовый клиент
+GenericName[sk]=Poštový klient
+GenericName[uk]=Поштова програма
+GenericName[vi]=Phần mềm khách quản lý thư điện tử
+GenericName[zh_CN]=邮件新闻客户端
+GenericName[zh_TW]=郵件用戶端
+Exec=thunderbird %u
+Terminal=false
+Type=Application
+Icon=org.mozilla.Thunderbird
+Categories=Network;Email;
+MimeType=message/rfc822;x-scheme-handler/mailto;text/calendar;text/vcard;text/x-vcard;x-scheme-handler/webcal;x-scheme-handler/webcals;x-scheme-handler/mid;
+StartupNotify=true
+StartupWMClass=thunderbird
+Actions=ComposeMessage;OpenAddressBook;
+
+[Desktop Action ComposeMessage]
+Name=Write new message
+Name[ar]=اكتب رسالة جديدة
+Name[ast]=Redactar mensaxe nuevu
+Name[be]=Напісаць новы ліст
+Name[bg]=Съставяне на ново съобщение
+Name[br]=Skrivañ ur gemennadenn nevez
+Name[ca]=Escriu un missatge nou
+Name[cs]=Napsat novou zprávu
+Name[da]=Skriv en ny meddelelse
+Name[de]=Neue Nachricht verfassen
+Name[el]=Σύνταξη νέου μηνύματος
+Name[es_AR]=Escribir un nuevo mensaje
+Name[es_ES]=Redactar nuevo mensaje
+Name[et]=Kirjuta uus kiri
+Name[eu]=Idatzi mezu berria
+Name[fi]=Kirjoita uusi viesti
+Name[fr]=Rédiger un nouveau message
+Name[fy_NL]=Skriuw in nij berjocht
+Name[ga_IE]=Scríobh teachtaireacht nua
+Name[gd]=Sgrìobh teachdaireachd ùr
+Name[gl]=Escribir unha nova mensaxe
+Name[he]=כתיבת הודעה חדשה
+Name[hr]=Piši novu poruku
+Name[hu]=Új üzenet írása
+Name[hy_AM]=Գրել նոր նամակ
+Name[is]=SKrifa nýjan póst
+Name[it]=Scrivi nuovo messaggio
+Name[ja]=新しいメッセージを作成する
+Name[ko]=새 메시지 작성
+Name[lt]=Rašyti naują laišką
+Name[nb_NO]=Skriv ny melding
+Name[nl]=Nieuw bericht aanmaken
+Name[nn_NO]=Skriv ny melding
+Name[pl]=Nowa wiadomość
+Name[pt_BR]=Nova mensagem
+Name[pt_PT]=Escrever nova mensagem
+Name[rm]=Scriver in nov messadi
+Name[ro]=Scrie un mesaj nou
+Name[ru]=Создать новое сообщение
+Name[sk]=Nová e-mailová správa
+Name[sl]=Sestavi novo sporočilo
+Name[sq]=Shkruani mesazh të ri
+Name[sr]=Писање нове поруке
+Name[sv_SE]=Skriv ett nytt meddelande
+Name[tr]=Yeni ileti yaz
+Name[uk]=Написати нового листа
+Name[vi]=Viết thư mới
+Name[zh_CN]=编写新消息
+Name[zh_TW]=寫一封新訊息
+Exec=thunderbird -compose
+
+[Desktop Action OpenAddressBook]
+Name=Open address book
+Name[ar]=افتح دفتر العناوين
+Name[ast]=Abrir llibreta de direiciones
+Name[be]=Адкрыць адрасную кнігу
+Name[bg]=Отваряне на адресник
+Name[br]=Digeriñ ur c'harned chomlec'hioù
+Name[ca]=Obre la llibreta d'adreces
+Name[cs]=Otevřít Adresář
+Name[da]=Åbn adressebog
+Name[de]=Adressbuch öffnen
+Name[el]=Άνοιγμα ευρετηρίου διευθύνσεων
+Name[es_AR]=Abrir libreta de direcciones
+Name[es_ES]=Abrir libreta de direcciones
+Name[et]=Ava aadressiraamat
+Name[eu]=Ireki helbide-liburua
+Name[fi]=Avaa osoitekirja
+Name[fr]=Ouvrir un carnet d'adresses
+Name[fy_NL]=Iepenje adresboek
+Name[ga_IE]=Oscail leabhar seoltaí
+Name[gd]=Fosgail leabhar-sheòlaidhean
+Name[gl]=Abrir a axenda de enderezos
+Name[he]=פתיחת ספר כתובות
+Name[hr]=Otvori adresar
+Name[hu]=Címjegyzék megnyitása
+Name[hy_AM]=Բացել Հասցեագիրքը
+Name[is]=Opna nafnaskrá
+Name[it]=Apri rubrica
+Name[ja]=アドレス帳を開く
+Name[ko]=주소록 열기
+Name[lt]=Atverti adresų knygą
+Name[nb_NO]=Åpne adressebok
+Name[nl]=Adresboek openen
+Name[nn_NO]=Opne adressebok
+Name[pl]=Książka adresowa
+Name[pt_BR]=Catálogo de endereços
+Name[pt_PT]=Abrir livro de endereços
+Name[rm]=Avrir il cudeschet d'adressas
+Name[ro]=Deschide agenda de contacte
+Name[ru]=Открыть адресную книгу
+Name[sk]=Otvoriť adresár
+Name[sl]=Odpri adressar
+Name[sq]=Hapni libër adresash
+Name[sr]=Отвори адресар
+Name[sv_SE]=Öppna adressboken
+Name[tr]=Adres defterini aç
+Name[uk]=Відкрити адресну книгу
+Name[vi]=Mở sổ địa chỉ
+Name[zh_CN]=打开通讯录
+Name[zh_TW]=開啟通訊錄
+Exec=thunderbird -addressbook
diff --git a/.config/autostart/redshift-gtk.desktop b/.config/autostart/redshift-gtk.desktop
new file mode 100644
index 0000000..be9f688
--- /dev/null
+++ b/.config/autostart/redshift-gtk.desktop
@@ -0,0 +1,87 @@
+[Desktop Entry]
+Version=1.0
+Name=Redshift
+Name[be]=Redshift
+Name[ca]=Redshift
+Name[cs]=Redshift
+Name[da]=Redshift
+Name[de]=Redshift
+Name[en_GB]=Redshift
+Name[es]=Redshift
+Name[fr]=Redshift
+Name[he]=Redshift
+Name[hu]=Redshift
+Name[it]=Redshift
+Name[ja]=Redshift
+Name[lt]=Redshift
+Name[nb]=Rødskift
+Name[pl]=Redshift
+Name[pt]=Redshift
+Name[pt_BR]=Redshift
+Name[ro]=Redshift
+Name[ru]=Redshift
+Name[sr]=Редшифт
+Name[sv]=Redshift
+Name[tr]=Redshift
+Name[uk]=Redshift
+Name[zh_CN]=红移
+Name[zh_TW]=Redshift
+GenericName=Color temperature adjustment
+GenericName[be]=Рэгуляванне каляровай тэмпературы
+GenericName[ca]=Ajust de la temperatura de color
+GenericName[cs]=Nastavení teploty barev
+GenericName[da]=Justering af farvetemperatur
+GenericName[de]=Farbtemperaturanpassung
+GenericName[en_GB]=Colour temperature adjustment
+GenericName[es]=Ajuste de la temperatura de color
+GenericName[fr]=Réglage de la température de couleur
+GenericName[he]=התאמת טמפרטורת צבע
+GenericName[hu]=Színhőmérséklet beállítása
+GenericName[it]=Regolazione della temperatura del colore
+GenericName[ja]=色温度の調整
+GenericName[lt]=Spalvos temperatūros reguliavimas
+GenericName[nb]=Justering av fargetemperatur
+GenericName[nl]=Bijstelling van kleurtemperatuur
+GenericName[pl]=Dostosowanie temperatury barwowej
+GenericName[pt_BR]=Ajuste de temperatura de cor
+GenericName[ru]=Настройка цветовой температуры
+GenericName[sr]=Прилагођавање температуре боје
+GenericName[sv]=Färgtemperaturjustering
+GenericName[tr]=Renk sıcaklığı ayarı
+GenericName[uk]=Налаштування колірної температури
+GenericName[zh_CN]=色温调节
+GenericName[zh_TW]=色溫調整
+Comment=Color temperature adjustment tool
+Comment[be]=Інструмент рэгулявання каляровай тэмпературы
+Comment[ca]=Eina per a l'ajust de la temperatura de color
+Comment[cs]=Nástroj pro přizpůsobení barevné teploty
+Comment[da]=Justeringsværktøj for farvetemperatur
+Comment[de]=Farbtemperaturanpassungswerkzeug
+Comment[en_GB]=Colour temperature adjustment tool
+Comment[es]=Herramienta para el ajuste de la temperatura de color
+Comment[fr]=Outil de réglage de la température de couleur
+Comment[he]=כלי להתאמת טמפרטורת צבע
+Comment[hu]=Színhőmérséklet beállító eszköz
+Comment[it]=Strumento per la regolazione della temperatura del colore
+Comment[ja]=色温度の調整ツール
+Comment[lt]=Spalvos temperatūros reguliavimo įrankis
+Comment[nb]=Justeringsverktøy for fargetemperatur
+Comment[nl]=Hulpmiddel voor het bijstellen van de kleurtemperatuur
+Comment[pl]=Narzędzie do dostosowywania temperatury barwowej
+Comment[pt_BR]=Ferramenta de ajuste de temperatura de cor
+Comment[ru]=Инструмент регулирования цветовой температуры
+Comment[sr]=Алатка за прилагођавање температуре боје
+Comment[sv]=Justeringsverktyg för färgtemperaturer
+Comment[tr]=Renk sıcaklığı ayarlama aracı
+Comment[uk]=Знаряддя налаштувань колірної температури
+Comment[zh_CN]=色温调节工具
+Comment[zh_TW]=色溫調整工具
+Exec=redshift-gtk
+Icon=redshift
+Terminal=false
+Type=Application
+Categories=Utility;
+StartupNotify=true
+Hidden=true
+X-GNOME-Autostart-enabled=false
+
diff --git a/.config/autostart/signal-desktop.desktop b/.config/autostart/signal-desktop.desktop
new file mode 100644
index 0000000..3ef2f0c
--- /dev/null
+++ b/.config/autostart/signal-desktop.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Type=Application
+Name=Signal
+Comment=Signal - Private Messenger
+Comment[de]=Signal - Sicherer Messenger
+Icon=signal-desktop
+Exec=signal-desktop -- %u
+Terminal=false
+Categories=Network;InstantMessaging;
+StartupWMClass=Signal
+MimeType=x-scheme-handler/sgnl;x-scheme-handler/signalcaptcha;
+Keywords=sgnl;chat;im;messaging;messenger;sms;security;privat;
+X-GNOME-UsesNotifications=true
diff --git a/.config/breezerc b/.config/breezerc
new file mode 100644
index 0000000..e2db295
--- /dev/null
+++ b/.config/breezerc
@@ -0,0 +1,3 @@
+[Style]
+MenuItemDrawStrongFocus=false
+MnemonicsMode=MN_ALWAYS
diff --git a/.config/compton.conf b/.config/compton.conf
deleted file mode 100644
index 7f1efd6..0000000
--- a/.config/compton.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-shadow = true;
-no-dnd-shadow = true;
-no-dock-shadow = true;
-clear-shadow = true;
-shadow-radius = 12;
-shadow-offset-x = -12;
-shadow-offset-y = -12;
-shadow-opacity = 0.95;
-shadow-red = 0.18;
-shadow-green = 0.2;
-shadow-blue = 0.25;
-shadow-exclude = [ "class_g = 'Cairo-clock'", "class_g = 'CoverGloobus'", "class_g = 'Tilda'", "class_g = 'Conky'", "class_g ?= 'Notify-osd'", "class_g = 'Firefox'", "class_g = 'Firefox-esr'", "class_g = 'Dmenu'", "name = 'Notification'", "_GTK_FRAME_EXTENTS@:c" ];
-fading = true;
-fade-delta = 0.25;
-fade-in-step = 0.02;
-fade-out-step = 0.02;
-fade-exclude = [ ];
-backend = "glx";
-mark-wmwin-focused = true;
-mark-ovredir-focused = true;
-detect-rounded-corners = true;
-detect-client-opacity = true;
-refresh-rate = 0;
-vsync = "none";
-dbe = false;
-paint-on-overlay = true;
-focus-exclude = [ "class_g = 'Cairo-clock'", "class_g = 'CoverGloobus'", "class_g = 'Tilda'", "class_g = 'Firefox'", "class_g = 'Firefox-esr'" ];
-detect-transient = true;
-detect-client-leader = true;
-invert-color-include = [ ];
-glx-copy-from-front = false;
-glx-swap-method = "undefined";
-wintypes :
-{
- tooltip :
- {
- fade = true;
- shadow = true;
- opacity = 0.75;
- focus = true;
- };
-};
-opacity-rule = [ "0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'" ];
-inactive-dim = 0.0;
diff --git a/.config/dolphinrc b/.config/dolphinrc
new file mode 100644
index 0000000..26cb353
--- /dev/null
+++ b/.config/dolphinrc
@@ -0,0 +1,32 @@
+MenuBar=Disabled
+
+[$Version]
+update_info=dolphin_detailsmodesettings.upd:rename-leading-padding,dolphin_detailsmodesettings.upd:move-content-display
+
+[FileDialogSize]
+4 screens: Height=584
+4 screens: Width=872
+
+[General]
+EditableUrl=true
+LockPanels=false
+ShowFullPath=true
+Version=202
+ViewPropsTimestamp=2023,11,4,22,5,12.659
+
+[KFileDialog Settings]
+Places Icons Auto-resize=false
+Places Icons Static Size=22
+
+[MainWindow]
+MenuBar=Disabled
+
+[PreviewSettings]
+Plugins=appimagethumbnail,audiothumbnail,comicbookthumbnail,cursorthumbnail,directorythumbnail,djvuthumbnail,ebookthumbnail,exrthumbnail,imagethumbnail,jpegthumbnail,kraorathumbnail,opendocumentthumbnail,svgthumbnail,windowsexethumbnail,windowsimagethumbnail,fontthumbnail,FreeCAD,evince,ffmpegthumbnailer,gdk-pixbuf-thumbnailer,gnome-font-viewer,gsf-office,totem
+
+[VersionControl]
+enabledPlugins=Git
+
+[ViewPropertiesDialog]
+4 screens: Height=324
+4 screens: Width=490
diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc
index 4798d4c..318c8b0 100644
--- a/.config/dunst/dunstrc
+++ b/.config/dunst/dunstrc
@@ -1,257 +1,100 @@
[global]
-font = Iosevka Term 14
+ ### Monitor ###
+ # HDMI-A-1 (TV) = Monitor 3 (via xrandr --listmonitors)
+ monitor = 3
+ follow = none
-# Allow a small subset of html markup:
-# bold
-# italic
-# strikethrough
-# underline
-#
-# For a complete reference see
-# .
-# If markup is not allowed, those tags will be stripped out of the
-# message.
-markup = yes
-plain_text = no
+ ### Geometry ###
+ width = (0, 480)
+ height = (0, 300)
+ origin = top-right
+ offset = (10, 10)
+ scale = 0
+ notification_limit = 0
-# The format of the message. Possible variables are:
-# %a appname
-# %s summary
-# %b body
-# %i iconname (including its path)
-# %I iconname (without its path)
-# %p progress value if set ([ 0%] to [100%]) or nothing
-# Markup is allowed
-format = "%s\n%b"
+ ### Borders & Spacing ###
+ padding = 14
+ horizontal_padding = 18
+ text_icon_padding = 12
+ frame_width = 2
+ frame_color = "#d79921"
+ gap_size = 8
+ separator_height = 2
+ separator_color = frame
+ corner_radius = 6
-# Sort messages by urgency.
-sort = no
+ ### Progress Bar ###
+ progress_bar = true
+ progress_bar_height = 8
+ progress_bar_frame_width = 1
+ progress_bar_min_width = 150
+ progress_bar_max_width = 400
+ progress_bar_corner_radius = 4
-# Show how many messages are currently hidden (because of geometry).
-indicate_hidden = yes
+ ### Text ###
+ font = monospace 13
+ line_height = 3
+ markup = full
-# Alignment of message text.
-# Possible values are "left", "center" and "right".
-alignment = center
+ # Gruvbox: farbige Überschrift + gedimmter Body
+ format = %s\n%b
-# The frequency with wich text that is longer than the notification
-# window allows bounces back and forth.
-# This option conflicts with "word_wrap".
-# Set to 0 to disable.
-bounce_freq = 0
+ alignment = left
+ vertical_alignment = center
+ word_wrap = yes
+ ellipsize = middle
+ ignore_newline = no
+ show_age_threshold = 120
+ relative_timestamps = true
-# Show age of message if message is older than show_age_threshold
-# seconds.
-# Set to -1 to disable.
-show_age_threshold = -1
+ ### Icons ###
+ enable_recursive_icon_lookup = true
+ icon_theme = "Gruvbox, Adwaita, gnome"
+ icon_position = left
+ min_icon_size = 0
+ max_icon_size = 48
+ icon_corner_radius = 4
-# Split notifications into multiple lines if they don't fit into
-# geometry.
-word_wrap = yes
+ ### History ###
+ sticky_history = yes
+ history_length = 50
-# Ignore newlines '\n' in notifications.
-ignore_newline = no
+ ### Misc ###
+ dmenu = /usr/bin/rofi -dmenu -p "Dunst"
+ browser = /usr/bin/firefox
+ always_run_script = true
+ title = Dunst
+ class = Dunst
+ force_xwayland = false
+ force_xinerama = false
+ layer = overlay
-# Hide duplicate's count and stack them
-stack_duplicates = yes
-hide_duplicates_count = yes
+ ### Mouse ###
+ mouse_left_click = close_current
+ mouse_middle_click = do_action, close_current
+ mouse_right_click = close_all
-# The geometry of the window:
-# [{width}]x{height}[+/-{x}+/-{y}]
-# The geometry of the message window.
-# The height is measured in number of notifications everything else
-# in pixels. If the width is omitted but the height is given
-# ("-geometry x2"), the message window expands over the whole screen
-# (dmenu-like). If width is 0, the window expands to the longest
-# message displayed. A positive x is measured from the left, a
-# negative from the right side of the screen. Y is measured from
-# the top and down respectevly.
-# The width can be negative. In this case the actual width is the
-# screen width minus the width defined in within the geometry option.
-#geometry = "250x50-40+40"
-geometry = "300x50-15+49"
-
-# Shrink window if it's smaller than the width. Will be ignored if
-# width is 0.
-shrink = no
-
-# The transparency of the window. Range: [0; 100].
-# This option will only work if a compositing windowmanager is
-# present (e.g. xcompmgr, compiz, etc.).
-transparency = 0.5
-
-# Don't remove messages, if the user is idle (no mouse or keyboard input)
-# for longer than idle_threshold seconds.
-# Set to 0 to disable.
-idle_threshold = 0
-
-# Which monitor should the notifications be displayed on.
-monitor = 0
-
-# Display notification on focused monitor. Possible modes are:
-# mouse: follow mouse pointer
-# keyboard: follow window with keyboard focus
-# none: don't follow anything
-#
-# "keyboard" needs a windowmanager that exports the
-# _NET_ACTIVE_WINDOW property.
-# This should be the case for almost all modern windowmanagers.
-#
-# If this option is set to mouse or keyboard, the monitor option
-# will be ignored.
-follow = none
-
-# Should a notification popped up from history be sticky or timeout
-# as if it would normally do.
-sticky_history = yes
-
-# Maximum amount of notifications kept in history
-history_length = 15
-
-# Display indicators for URLs (U) and actions (A).
-show_indicators = no
-
-# The height of a single line. If the height is smaller than the
-# font height, it will get raised to the font height.
-# This adds empty space above and under the text.
-line_height = 3
-
-# Draw a line of "separatpr_height" pixel height between two
-# notifications.
-# Set to 0 to disable.
-separator_height = 2
-
-# Padding between text and separator.
-padding = 6
-
-# Horizontal padding.
-horizontal_padding = 6
-
-# Define a color for the separator.
-# possible values are:
-# * auto: dunst tries to find a color fitting to the background;
-# * foreground: use the same color as the foreground;
-# * frame: use the same color as the frame;
-# * anything else will be interpreted as a X color.
-separator_color = frame
-
-# Print a notification on startup.
-# This is mainly for error detection, since dbus (re-)starts dunst
-# automatically after a crash.
-startup_notification = false
-
-# dmenu path.
-dmenu = /usr/bin/dmenu -p dunst:
-
-# Browser for opening urls in context menu.
-browser = /usr/bin/firefox -new-tab
-
-# Align icons left/right/off
-icon_position = off
-max_icon_size = 80
-
-# Paths to default icons.
-icon_path = /usr/share/icons/Paper/16x16/mimetypes/:/usr/share/icons/Paper/48x48/status/:/usr/share/icons/Paper/16x16/devices/:/usr/share/icons/Paper/48x48/notifications/:/usr/share/icons/Paper/48x48/emblems/
-
-frame_width = 3
-frame_color = "#EBDBB2"
-
-[shortcuts]
-
-# Shortcuts are specified as [modifier+][modifier+]...key
-# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
-# "mod3" and "mod4" (windows-key).
-# Xev might be helpful to find names for keys.
-
-# Close notification.
-close = ctrl+space
-
-# Close all notifications.
-close_all = ctrl+shift+space
-
-# Redisplay last message(s).
-# On the US keyboard layout "grave" is normally above TAB and left
-# of "1".
-history = ctrl+grave
-
-# Context menu.
-context = ctrl+shift+period
-
[urgency_low]
-# IMPORTANT: colors have to be defined in quotation marks.
-# Otherwise the "#" and following would be interpreted as a comment.
-frame_color = "#458588"
-foreground = "#83A598"
-background = "#282828"
-#background = "#2B313C"
-timeout = 4
+ background = "#282828"
+ foreground = "#a89984"
+ frame_color = "#504945"
+ format = %s\n%b
+ timeout = 15
+ default_icon = dialog-information
[urgency_normal]
-frame_color = "#928374"
-foreground = "#EBDBB2"
-background = "#282828"
-#background = "#2B313C"
-timeout = 6
+ background = "#282828"
+ foreground = "#ebdbb2"
+ frame_color = "#d79921"
+ format = %s\n%b
+ timeout = 0
+ default_icon = dialog-information
[urgency_critical]
-frame_color = "#CC241D"
-foreground = "#FB4934"
-background = "#282828"
-#background = "#2B313C"
-timeout = 8
-
-
-# Every section that isn't one of the above is interpreted as a rules to
-# override settings for certain messages.
-# Messages can be matched by "appname", "summary", "body", "icon", "category",
-# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
-# "background", "new_icon" and "format".
-# Shell-like globbing will get expanded.
-#
-# SCRIPTING
-# You can specify a script that gets run when the rule matches by
-# setting the "script" option.
-# The script will be called as follows:
-# script appname summary body icon urgency
-# where urgency can be "LOW", "NORMAL" or "CRITICAL".
-#
-# NOTE: if you don't want a notification to be displayed, set the format
-# to "".
-# NOTE: It might be helpful to run dunst -print in a terminal in order
-# to find fitting options for rules.
-
-#[espeak]
-# summary = "*"
-# script = dunst_espeak.sh
-
-#[script-test]
-# summary = "*script*"
-# script = dunst_test.sh
-
-#[ignore]
-# # This notification will not be displayed
-# summary = "foobar"
-# format = ""
-
-#[signed_on]
-# appname = Pidgin
-# summary = "*signed on*"
-# urgency = low
-#
-#[signed_off]
-# appname = Pidgin
-# summary = *signed off*
-# urgency = low
-#
-#[says]
-# appname = Pidgin
-# summary = *says*
-# urgency = critical
-#
-#[twitter]
-# appname = Pidgin
-# summary = *twitter.com*
-# urgency = normal
-#
-# vim: ft=cfg
+ background = "#1d2021"
+ foreground = "#ebdbb2"
+ frame_color = "#cc241d"
+ format = %s\n%b
+ timeout = 0
+ default_icon = dialog-warning
diff --git a/.config/i3/config b/.config/i3/config
index b5b0325..78223a9 100644
--- a/.config/i3/config
+++ b/.config/i3/config
@@ -1,414 +1,205 @@
-# This file has been auto-generated by i3-config-wizard(1).
-# It will not be overwritten, so edit it as you like.
-#
-# Should you change your keyboard layout somewhen, delete
-# this file and re-run i3-config-wizard(1).
-#
+# i3 config — portiert von ~/.config/sway/config
-# i3 config file (v4)
-#
-# Please see http://i3wm.org/docs/userguide.html for a complete reference!
+# === Monitor-Layout via xrandr (X11) ===
+exec --no-startup-id xrandr \
+ --output HDMI-A-1 --mode 1920x1080 --rate 50 --pos 0x1732 --rotate normal \
+ --output DP-2 --mode 2560x1440 --rate 59.95 --pos 301x1080 --rotate right \
+ --output DP-1 --mode 2560x1440 --rate 59.95 --pos 1741x1732 --rotate normal --primary \
+ --output DP-3 --mode 2560x1440 --rate 59.95 --pos 4301x1732 --rotate normal
-# colors
+# === Tastatur (X11) ===
+exec_always --no-startup-id setxkbmap -layout "de,us" -option "caps:XF86Launch5"
-# class border backgr. text
-#client.focused #C9B5BD #C9B5BD #825969
-#client.focused_inactive #191919 #191919 #999999
-#client.unfocused #191919 #191919 #999999
-#client.urgent #cd989a #cd989a #2e3436
-#client.background #121212
-# class border bground text indicator child_border
-client.focused #D5C4A1 #D5C4A1 #282828 #282828 #282828
-client.focused_inactive #7C6F64 #7C6F64 #EBDBB2 #5F676A #5F676A
-client.unfocused #282828 #282828 #EBDBB2 #282828 #282828
-client.urgent #FB4934 #FB4934 #282828 #FB4934 #FB4934
-client.placeholder #D65D0E #D65D0E #282828 #282828 #282828
-client.background #282828
+# === Touchpad (X11) ===
+exec_always --no-startup-id xinput set-prop "SynPS/2 Synaptics TouchPad" "libinput Tapping Enabled" 1 2>/dev/null || true
+exec_always --no-startup-id xinput set-prop "SynPS/2 Synaptics TouchPad" "libinput Scroll Method Enabled" 0 0 1 2>/dev/null || true
-# set default font
-#font -*-cure-medium-*-*-*-11-*-*-*-*-*-*-*
-#font pango: Noto Sans 8
-#font pango: Inconsolata 11, FontAwesome 12, Font Awesome 5 Free 12, Font Awesome 5 Brands 12
-font pango: Noto Sans 8
-
-# set modifier keys for more clarity and readability in config
-# mod is on most keyboards the "windows" key
+# === Modifier ===
set $mod Mod4
set $alt Mod1
-# Monitor settings
-set $monL DP-0
-set $monR DP-2
-set $monP DP-4
-
-# Font for window titles. Will also be used by the bar unless a different font
-# is used in the bar {} block below. ISO 10646 = Unicode
-#font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
-# The font above is very space-efficient, that is, it looks good, sharp and
-# clear in small sizes. However, if you need a lot of unicode glyphs or
-# right-to-left text rendering, you should instead use pango for rendering and
-# chose a FreeType font, such as:
-# font pango:DejaVu Sans Mono 10
-
-# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
-#set the border of your windows
+# === Borders ===
bindsym $mod+t border normal
bindsym $mod+y border 1pixel
bindsym $mod+u border none
-# start a terminal
-# with some examples for other font or other terminal emulators
-#bindsym $mod+Return exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:inconsolata:size=9:antialias=true" -letsp -1 -sh 20
-#bindsym $mod+Return exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:PragmataPro:size=8:antialias=true" -letsp -1 -sh 20
-#bindsym $mod+Return exec terminology
-#bindsym $mod+Return exec tilda
-bindsym $mod+Return exec termite
+# === Terminal ===
+bindsym $mod+Return exec foot
-# kill focused window
+# === Fenster schließen ===
bindsym $mod+Shift+q kill
bindsym $alt+F4 kill
-# if this don't work, you can even start xkill
bindsym $mod+Shift+k exec xkill
-# enables a feature like on other windowmanagers or windows,
-# to show running "processes" and switch between them
+# === App-Switcher / Launcher ===
bindsym $alt+Tab exec rofi -show window
+set $menu exec wofi --show drun
+bindsym $mod+d exec $menu
-# start dmenu (a program launcher)
-#bindsym $mod+d exec dmenu_run
-# instead
-bindsym $mod+d exec j4-dmenu-desktop --dmenu="dmenu -i -nf '#EBDBB2' -nb '#665C54' -sb '#fe8019' -sf '#282828'"
-
-# There also is the (new) i3-dmenu-desktop which only displays applications
-# shipping a .desktop file. It is a wrapper around dmenu, so you need that
-# installed.
-# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
-
-# change focus - the vi way
-# I don't use them, cause i need this keys for other purposes
-# e.g. $mod+h for split horizontal
-#bindsym $mod+h focus left
-#bindsym $mod+j focus down
-#bindsym $mod+k focus up
-#bindsym $mod+l focus right
-
-# alternatively, you can use the cursor keys:
-bindsym $mod+Left focus left
-bindsym $mod+Down focus down
-bindsym $mod+Up focus up
+# === Fokus ===
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
bindsym $mod+Right focus right
-# move focused window - the vi way
-# I don't use them, cause i need this keys for other purposes
-# e.g. $mod+Shift+l for lock my Desktop
-#bindsym $mod+Shift+h move left
-#bindsym $mod+Shift+j move down
-#bindsym $mod+Shift+k move up
-#bindsym $mod+Shift+l move right
-
-# alternatively, you can use the cursor keys:
-bindsym $mod+Shift+Left move left
-bindsym $mod+Shift+Down move down
-bindsym $mod+Shift+Up move up
+# === Fenster verschieben ===
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
-# split in horizontal orientation
+# === Split ===
bindsym $mod+h split h
-
-# split in vertical orientation
bindsym $mod+v split v
-# enter fullscreen mode for the focused container
-bindsym $mod+f fullscreen
+# === Fullscreen ===
+bindsym $mod+z fullscreen
-# change container layout (stacked, tabbed, toggle split)
+# === Layout ===
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
-# toggle tiling / floating
+# === Floating ===
bindsym $mod+Shift+space floating toggle
-
-# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
-
-# focus the parent container
bindsym $mod+a focus parent
-# focus the child container
-#bindsym $mod+d focus child
+# === Workspaces ===
+bindsym $mod+1 workspace 1: 1: Text
+bindsym $mod+2 workspace 2: 2: Web
+bindsym $mod+3 workspace 3: 3: Office
+bindsym $mod+4 workspace 4: 4: KeePass
+bindsym $mod+5 workspace 5: 5: Mail
+bindsym $mod+6 workspace 6: 6: Chat
+bindsym $mod+7 workspace 7
+bindsym $mod+8 workspace 8
+bindsym $mod+9 workspace 9
+bindsym $mod+0 workspace 10
-# variables for workpacenames;
-set $ws1 1: Text
-set $ws2 2: Web
-set $ws3 3: Office
-set $ws4 4: KeePass
-set $ws5 5: Mail
-set $ws6 6: Chat
-set $ws7 7: Stuff
-set $ws8 8
-set $ws9 9: WebWork
-set $ws10 10
-
-# Assign Workspaces to specific outputs
-workspace "$ws1" output $monP
-workspace "$ws2" output $monP
-workspace "$ws3" output $monP
-workspace "$ws4" output $monL
-workspace "$ws5" output $monR
-workspace "$ws6" output $monR
-workspace "$ws7" output $monR
-workspace "$ws8" output $monP
-workspace "$ws9" output $monL
-workspace "$ws10" output $monP
-
-# switch to workspace
-bindsym $mod+1 workspace $ws1
-bindsym $mod+2 workspace $ws2
-bindsym $mod+3 workspace $ws3
-bindsym $mod+4 workspace $ws4
-bindsym $mod+5 workspace $ws5
-bindsym $mod+6 workspace $ws6
-bindsym $mod+7 workspace $ws7
-bindsym $mod+8 workspace $ws8
-bindsym $mod+9 workspace $ws9
-bindsym $mod+0 workspace $ws10
-
-# move focused container to workspace
-bindsym $mod+Shift+1 move container to workspace $ws1
-bindsym $mod+Shift+2 move container to workspace $ws2
-bindsym $mod+Shift+3 move container to workspace $ws3
-bindsym $mod+Shift+4 move container to workspace $ws4
-bindsym $mod+Shift+5 move container to workspace $ws5
-bindsym $mod+Shift+6 move container to workspace $ws6
-bindsym $mod+Shift+7 move container to workspace $ws7
-bindsym $mod+Shift+8 move container to workspace $ws8
-bindsym $mod+Shift+9 move container to workspace $ws9
-bindsym $mod+Shift+0 move container to workspace $ws10
-
-# reload the configuration file
-bindsym $mod+Shift+c reload
-# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
-bindsym $mod+Shift+r restart
-
-# exit i3 (logs you out of your X session)
-bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
-
-# Lock the current session
-bindsym $mod+Shift+l exec i3lock
-
-
-# add the ability to reboot shutdown etc.
-#.........
-set $sysmenu "system: [r]estart [l]logout [p)oweroff re[b]oot"
-bindsym $mod+Shift+Delete mode "$sysmenu"
-
-mode $sysmenu {
- bindsym r restart
- bindsym l exit
- bindsym p exec sudo shutdown -P now
- bindsym b exec sudo shutdown -r now
- bindsym Return mode "default"
- bindsym Escape mode "default"
-}
-#.........
-
-set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
-mode "$mode_system" {
- bindsym l exec --no-startup-id ~/.i3/i3exit lock, mode "default"
- bindsym e exec --no-startup-id ~/.i3/i3exit logout, mode "default"
- bindsym s exec --no-startup-id ~/.i3/i3exit suspend, mode "default"
- bindsym h exec --no-startup-id ~/.i3/i3exit hibernate, mode "default"
- bindsym r exec --no-startup-id ~/.i3/i3exit reboot, mode "default"
- bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"
-
- # back to normal: Enter or Escape
- bindsym Return mode "default"
- bindsym Escape mode "default"
-}
-bindsym $mod+Pause mode "$mode_system"
-
-
-# for gaming under wine - some Games are crashing, if there are more than one monitor
-#.........
-set $displaymenu [g]aming [w]ork
-bindsym $mod+Shift+x mode "$displaymenu"
-
-mode "$displaymenu" {
- bindsym g exec --no-startup-id xrandr --output DVI-D-0 --off --output HDMI-0 --off --output DP-5 --off --output DP-4 --primary --mode 2560x1440 --pos 1080x0 --rotate normal --output DP-3 --off --output DP-2 --off --output DP-1 --off --output DP-0 --off, mode "default"
- bindsym w exec --no-startup-id xrandr --output DVI-D-0 --off --output HDMI-0 --off --output DP-5 --off --output DP-4 --primary --mode 2560x1440 --pos 1080x0 --rotate normal --output DP-3 --off --output DP-2 --mode 1920x1080 --pos 3640x0 --rotate normal --output DP-1 --off --output DP-0 --mode 1920x1080 --pos 0x0 --rotate right, mode "default"
- bindsym Return mode "default"
- bindsym Escaoe mode "default"
-}
-#.........
+bindsym $mod+Shift+1 move container to workspace 1: 1: Text
+bindsym $mod+Shift+2 move container to workspace 2: 2: Web
+bindsym $mod+Shift+3 move container to workspace 3: 3: Office
+bindsym $mod+Shift+4 move container to workspace 4: 4: KeePass
+bindsym $mod+Shift+5 move container to workspace 5: 5: Mail
+bindsym $mod+Shift+6 move container to workspace 6: 6: Chat
+bindsym $mod+Shift+7 move container to workspace 7
+bindsym $mod+Shift+8 move container to workspace 8
+bindsym $mod+Shift+9 move container to workspace 9
+bindsym $mod+Shift+0 move container to workspace 10
+# Workspace zwischen Monitoren verschieben
bindsym $mod+Prior move workspace to output left
-bindsym $mod+Next move workspace to output right
+bindsym $mod+Next move workspace to output right
-# resize window (you can also use the mouse for that)
-#.........
+# === Scratchpad ===
+bindsym $mod+Shift+minus move scratchpad
+bindsym $mod+minus scratchpad show
+
+# === Config neu laden / i3 neu starten ===
+bindsym $mod+Shift+r restart
+bindsym $mod+Shift+c reload
+
+# === Session-Ende ===
+bindsym $mod+Shift+e exec i3-nagbar -t warning \
+ -m "i3 beenden?" \
+ -b "Ja, beenden" "i3-msg exit" \
+ -b "Neu starten" "i3-msg restart"
+
+bindsym $mod+Shift+Delete exec i3-nagbar -t default \
+ -m "Systemmenü" \
+ -b "i3 beenden" "i3-msg exit" \
+ -b "Neu laden" "i3-msg reload" \
+ -b "Ausschalten" "exec sudo shutdown -P now" \
+ -b "Neustart" "exec sudo shutdown -r now"
+
+# === Bildschirm sperren ===
+bindsym $mod+Shift+l exec i3lock -c 000000
+
+# === Bildschirmsperre + Idle (X11) ===
+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock -c 000000 &
+
+# === Screenshot ===
+bindsym --release Print exec maim -s ~/library/Bilder/Screenshots/screenshot_$(date +%s).png
+
+# === Lautstärke ===
+bindsym XF86AudioRaiseVolume exec pamixer -i 5
+bindsym XF86AudioLowerVolume exec pamixer -d 5
+bindsym XF86AudioMute exec pamixer -t
+
+# === Resize-Modus ===
bindsym $mod+r mode "resize"
-
mode "resize" {
- # These bindings trigger as soon as you enter the resize mode
+ bindsym j resize shrink width 10 px or 10 ppt
+ bindsym k resize grow height 10 px or 10 ppt
+ bindsym l resize shrink height 10 px or 10 ppt
+ bindsym odiaeresis resize grow width 10 px or 10 ppt
- # Pressing left will shrink the window’s width.
- # Pressing right will grow the window’s width.
- # Pressing up will shrink the window’s height.
- # Pressing down will grow the window’s height.
- bindsym j resize shrink width 10 px or 10 ppt
- bindsym k resize grow height 10 px or 10 ppt
- bindsym l resize shrink height 10 px or 10 ppt
- bindsym odiaeresis resize grow width 10 px or 10 ppt
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
- # same bindings, but for the arrow keys
- bindsym Left resize shrink width 10 px or 10 ppt
- bindsym Down resize grow height 10 px or 10 ppt
- bindsym Up resize shrink height 10 px or 10 ppt
- bindsym Right resize grow width 10 px or 10 ppt
-
- # back to normal: Enter or Escape
- bindsym Return mode "default"
- bindsym Escape mode "default"
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
}
-#........
-# Start i3bar to display a workspace bar (plus the system information i3status
-# finds out, if available)
-
-# this is the bottom bar
+# === Statusbar ===
bar {
- status_command i3status-rs /home/templis/.config/i3status/config_bot.toml
- font pango:FontAwesome 12
- colors {
- background #282828
- statusline #EBDBB2
- separator #EBDBB2
-
- focused_workspace #D5C4A1 #D5C4A1 #282828
- active_workspace #7C6F64 #7C6F64 #EBDBB2
- inactive_workspace #282828 #282828 #EBDBB2
- urgent_workspace #FB4934 #FB4934 #282828
- binding_mode #D65D0E #D65D0E #282828
- }
-
-}
-bar {
- position top
- tray_output none
- workspace_buttons no
- status_command i3status-rs /home/templis/.config/i3status/config_top.toml
- font pango:FontAwesome 12
- colors {
- background #282828
- statusline #EBDBB2
- separator #EBDBB2
-
- focused_workspace #D5C4A1 #D5C4A1 #282828
- active_workspace #7C6F64 #7C6F64 #EBDBB2
- inactive_workspace #282828 #282828 #EBDBB2
- urgent_workspace #FB4934 #FB4934 #282828
- binding_mode #D65D0E #D65D0E #282828
- }
+ status_command i3status
}
-
-# snipping/screenshot Tool
-#bindsym --release Print exec scrot -s -e 'mv $f ~/Bilder/Screenshots/screenshot_%Y-%m-%d_%H%M%S.png'
-bindsym --release Print exec maim -s ~/Bilder/Screenshots/screenshot_$(date +%s).png
-
-
-## Media keys
-#bindsym XF86AudioRaiseVolume exec exec pamixer -i 5
-#bindsym XF86AudioLowerVolume exec exec pamixer -d 5
-#bindsym XF86AudioMute exec pamixer -t
-bindsym XF86AudioRaiseVolume exec $HOME/.scripts/volume.sh up
-bindsym XF86AudioLowerVolume exec $HOME/.scripts/volume.sh down
-bindsym XF86AudioMute exec $HOME/.scripts/volume.sh mute
-
-
-# Enable GLX Graphics
-# used especially for Laptop and enable/disable discrete graphics
-# bindsym $mod+g exec /home/templis/dri.sh
-
-# Set floating Windows for special applications
+# === Standard-Layout ===
workspace_layout tabbed
-for_window [window_role="pop-up"] floating enable,move absolute center
-for_window [class="Pinentry"] floating enable
-for_window [class="Eog"] floating enable
-for_window [class="Geary"] floating enable
-for_window [class="Gcr-prompter"] floating enable
-for_window [class="Tipswindow.py"] floating enable
-for_window [class="XVroot"] floating enable
-for_window [class="XVcontrols"] floating enable
-for_window [class="Vlc"] floating enable
-for_window [class="Synergy"] floating enable
+
+# === Floating-Regeln ===
+for_window [window_role="pop-up"] floating enable, move absolute center
+for_window [class="Pinentry"] floating enable
+for_window [class="Eog"] floating enable
+for_window [class="Geary"] floating enable
+for_window [class="Gcr-prompter"] floating enable
+for_window [class="Vlc"] floating enable
+for_window [class="Synergy"] floating enable
for_window [class="libreoffice-writer"] floating enable
-for_window [class="Shotwell"] floating enable
-for_window [class="UpLauncher"] floating enable
-for_window [title="^Minecraft .*"] floating enable
+for_window [class="Shotwell"] floating enable
+for_window [class="anydesk"] floating enable
+for_window [class="galculator"] floating enable
+for_window [window_type="dialog"] floating enable
+for_window [window_role="dialog"] floating enable
+for_window [title="^Preferences$"] floating enable
+for_window [title="^Minecraft .*"] floating enable
for_window [title="Steam - Update News"] kill
-for_window [title="Preferences$"] floating enable
-for_window [class="^Pidgin$" window_role="^conversation$"] resize grow width 0 px or 30 ppt
-# Assign special applications to defined workspaces
-assign [class="Chromium"] 2: Web
-assign [class="chrome"] 2: Web
-assign [class="firefox"] 2: Web
-assign [class="libreoffice"] 3: Office
-assign [class="Gimp"] 3: Office
-assign [class="^Minecraft Launcher .*"] 3: Office
-assign [class="Linphone"] 3: Office
-assign [class="KeePass2"] 4: KeePass
-assign [class="keepassxc"] 4: KeePass
-assign [class="KeePassXC"] 4: KeePass
-assign [class="(?i)thunderbird"] 5: Mail
-assign [class="Signal"] 6: Chat
+# === Workspace-Zuweisungen ===
+assign [class="(?i)firefox"] 2: 2: Web
+assign [class="(?i)chromium"] 2: 2: Web
+assign [class="(?i)chrome"] 2: 2: Web
+assign [class="libreoffice"] 3: 3: Office
+assign [class="Gimp"] 3: 3: Office
+assign [class="keepassxc"] 4: 4: KeePass
+assign [class="KeePassXC"] 4: 4: KeePass
+assign [class="(?i)thunderbird"] 5: 5: Mail
+assign [class="Signal"] 6: 6: Chat
-# Start some needet applications
-# Please take care to install/configure it, if you intend to include it!
+# === Autostart ===
+exec --no-startup-id xrdb -load ~/.Xresources
+exec --no-startup-id xrdb -merge ~/.Xresources
-# start Sound Daemon
-exec pulseaudio --start
-exec /usr/bin/pasystray
-
-# BROWSERS!!!11!elf!
-exec MOZ_X11_EGL=1;firefox
-#exec chromium
-#exec google-chrome-stable
-
-# networkmanager gui
-exec nm-applet
-
-# eye saver
-#Redshift adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night.
+exec firefox
+exec nm-applet --indicator
exec redshift-gtk -l 48.52160730:9.05050278
-
-# nextcloud
exec nextcloud
-
-# start one terminal on workspace 1 for failure management etc.
-exec --no-startup-id i3-msg 'workspace 1: Text; exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:inconsolata:size=8" -letsp -1 -sh 20'
-
-# trayicon to listen to some radio stations
exec radiotray-ng
-
-# start i3 with a random wallpaper
-exec feh --randomize --bg-fill ~/Bilder/Wallpaper/*
-
-# autodetect and automount USB Sticks and external media
-exec udisksvm >/dev/null &
-
-# Start Signal
exec signal-desktop
-
-# Start keepassxc
exec keepassxc
+exec ~/.scripts/start_keyring.sh
+exec dunst
+# Notification-History Picker (Inhalt kopieren)
+bindsym $mod+n exec ~/.config/dunst/notification-picker.sh
+exec udisksvm >/dev/null &
+exec systemctl --user start mako-mirror.service
-# Start thunderbird
-exec thunderbird
-
-#Start compton
-exec --no-startup-id compton -b
+# include modules
+include ~/.config/i3/conf.d/*
diff --git a/.config/i3/config.backup b/.config/i3/config.backup
deleted file mode 100644
index 39b3d9b..0000000
Binary files a/.config/i3/config.backup and /dev/null differ
diff --git a/.config/i3/conky.conf b/.config/i3/conky.conf
deleted file mode 100644
index c3d94dd..0000000
Binary files a/.config/i3/conky.conf and /dev/null differ
diff --git a/.config/i3/conky.lua b/.config/i3/conky.lua
deleted file mode 100644
index c328cfb..0000000
Binary files a/.config/i3/conky.lua and /dev/null differ
diff --git a/.config/i3/conkyrc b/.config/i3/conkyrc
deleted file mode 100644
index 875b028..0000000
Binary files a/.config/i3/conkyrc and /dev/null differ
diff --git a/.config/i3/dunstrc b/.config/i3/dunstrc
deleted file mode 100644
index b83acb5..0000000
Binary files a/.config/i3/dunstrc and /dev/null differ
diff --git a/.config/i3/i3bar.bar-0.log b/.config/i3/i3bar.bar-0.log
deleted file mode 100644
index 6f705b5..0000000
Binary files a/.config/i3/i3bar.bar-0.log and /dev/null differ
diff --git a/.config/i3/i3bar.bar-1.log b/.config/i3/i3bar.bar-1.log
deleted file mode 100644
index 883b3ad..0000000
Binary files a/.config/i3/i3bar.bar-1.log and /dev/null differ
diff --git a/.config/i3/i3exit b/.config/i3/i3exit
deleted file mode 100755
index 3e6d286..0000000
Binary files a/.config/i3/i3exit and /dev/null differ
diff --git a/.config/i3/i3status.conf b/.config/i3/i3status.conf
deleted file mode 100644
index 53b6a18..0000000
Binary files a/.config/i3/i3status.conf and /dev/null differ
diff --git a/.config/i3/startup_conky b/.config/i3/startup_conky
deleted file mode 100755
index e080c37..0000000
Binary files a/.config/i3/startup_conky and /dev/null differ
diff --git a/.config/i3/status.toml b/.config/i3/status.toml
deleted file mode 100644
index 9242370..0000000
Binary files a/.config/i3/status.toml and /dev/null differ
diff --git a/.config/i3/weather.sh b/.config/i3/weather.sh
deleted file mode 100755
index 5226ae9..0000000
Binary files a/.config/i3/weather.sh and /dev/null differ
diff --git a/.config/i3/yagostatus.yml b/.config/i3/yagostatus.yml
deleted file mode 100644
index e99598e..0000000
Binary files a/.config/i3/yagostatus.yml and /dev/null differ
diff --git a/.config/i3status/config_bot.toml b/.config/i3status/config_bot.toml
deleted file mode 100644
index fc330f5..0000000
--- a/.config/i3status/config_bot.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-icons = "awesome"
-
-[theme]
-name = "gruvbox-dark"
-
-[theme.overrides]
-info_bg = "#D5C4A1"
-info_fg = "#282828"
-
-[[block]]
-block = "music"
-player = "spotify"
-buttons = ["play", "next"]
-
-[[block]]
-block = "pacman"
-interval = 10
-
-[[block]]
-block = "sound"
-step_width = 3
diff --git a/.config/i3status/config_top.toml b/.config/i3status/config_top.toml
deleted file mode 100644
index 27e45dd..0000000
--- a/.config/i3status/config_top.toml
+++ /dev/null
@@ -1,73 +0,0 @@
-icons = "awesome"
-
-[theme]
-name = "gruvbox-dark"
-
-[theme.overrides]
-info_bg = "#D5C4A1"
-info_fg = "#282828"
-
-[[block]]
-block = "disk_space"
-path = "/"
-alias = "/"
-info_type = "available"
-unit = "GB"
-interval = 20
-warning = 20.0
-alert = 10.0
-
-[[block]]
-block = "memory"
-display_type = "memory"
-format_mem = "{Mup}%"
-format_swap = "{SUp}%"
-
-[[block]]
-block = "cpu"
-interval = 1
-
-[[block]]
-block = "net"
-device = "wlan1"
-ssid = true
-signal_strength = true
-ip = true
-speed_up = false
-graph_up = true
-interval = 5
-hide_missing = true
-hide_inactive = true
-
-[[block]]
-block = "net"
-device = "wlan0"
-ssid = true
-signal_strength = true
-ip = true
-speed_up = false
-graph_up = true
-interval = 5
-hide_missing = true
-hide_inactive = true
-
-[[block]]
-block = "net"
-device = "eno0"
-ip = true
-speed_up = false
-graph_up = true
-interval = 5
-hide_missing = true
-hide_inactive = true
-
-[[block]]
-block = "load"
-interval = 1
-format = "{1m}"
-
-[[block]]
-block = "time"
-interval = 60
-format = "%a %d.%m %R"
-
diff --git a/.config/katerc b/.config/katerc
new file mode 100644
index 0000000..3f7ee4a
--- /dev/null
+++ b/.config/katerc
@@ -0,0 +1,169 @@
+[General]
+Days Meta Infos=30
+PinnedDocuments=
+Quickopen Filter Mode=0
+Quickopen List Mode=true
+Save Meta Infos=true
+Show Full Path in Title=false
+Show Menu Bar=true
+Show Status Bar=true
+Show Tab Bar=true
+Show Url Nav Bar=true
+
+[KTextEditor Document]
+Allow End of Line Detection=true
+Auto Detect Indent=true
+Auto Reload If State Is In Version Control=true
+Auto Save=false
+Auto Save Interval=0
+Auto Save On Focus Out=false
+BOM=false
+Backup Local=false
+Backup Prefix=
+Backup Remote=false
+Backup Suffix=~
+Camel Cursor=true
+Encoding=UTF-8
+End of Line=0
+Indent On Backspace=true
+Indent On Tab=true
+Indent On Text Paste=false
+Indentation Mode=normal
+Indentation Width=4
+Keep Extra Spaces=false
+Line Length Limit=10000
+Newline at End of File=true
+On-The-Fly Spellcheck=false
+Overwrite Mode=false
+PageUp/PageDown Moves Cursor=false
+Remove Spaces=1
+ReplaceTabsDyn=true
+Show Spaces=0
+Show Tabs=true
+Smart Home=true
+Swap Directory=
+Swap File Mode=1
+Swap Sync Interval=15
+Tab Handling=2
+Tab Width=4
+Trailing Marker Size=1
+Word Wrap=false
+Word Wrap Column=80
+
+[KTextEditor Editor]
+Encoding Prober Type=1
+Fallback Encoding=ISO 8859-15
+
+[KTextEditor Renderer]
+Animate Bracket Matching=false
+Auto Color Theme Selection=true
+Color Theme=gruvbox Dark
+Font=Hack,10,-1,7,50,0,0,0,0,0
+Line Height Multiplier=1
+Show Indentation Lines=false
+Show Whole Bracket Expression=false
+Word Wrap Marker=false
+
+[KTextEditor View]
+Allow Mark Menu=true
+Auto Brackets=true
+Auto Center Lines=0
+Auto Completion=true
+Auto Completion Preselect First Entry=true
+Backspace Remove Composed Characters=false
+Bookmark Menu Sorting=0
+Bracket Match Preview=false
+Chars To Enclose Selection=<>(){}[]'"
+Default Mark Type=1
+Dynamic Word Wrap=true
+Dynamic Word Wrap Align Indent=80
+Dynamic Word Wrap At Static Marker=false
+Dynamic Word Wrap Indicators=1
+Dynamic Wrap not at word boundaries=false
+Enable Tab completion=false
+Fold First Line=false
+Folding Bar=true
+Folding Preview=true
+Icon Bar=false
+Input Mode=0
+Keyword Completion=true
+Line Modification=true
+Line Numbers=true
+Max Clipboard History Entries=20
+Maximum Search History Size=100
+Mouse Paste At Cursor Position=false
+Multiple Cursor Modifier=134217728
+Persistent Selection=false
+Scroll Bar Marks=false
+Scroll Bar Mini Map All=true
+Scroll Bar Mini Map Width=60
+Scroll Bar MiniMap=true
+Scroll Bar Preview=true
+Scroll Past End=false
+Search/Replace Flags=140
+Shoe Line Ending Type in Statusbar=false
+Show Documentation With Completion=true
+Show File Encoding=true
+Show Focus Frame Around Editor=true
+Show Folding Icons On Hover Only=true
+Show Line Count=false
+Show Scrollbars=0
+Show Statusbar Dictionary=true
+Show Statusbar Highlighting Mode=true
+Show Statusbar Input Mode=true
+Show Statusbar Line Column=true
+Show Statusbar Tab Settings=true
+Show Word Count=false
+Smart Copy Cut=true
+Statusbar Line Column Compact Mode=true
+Text Drag And Drop=true
+User Sets Of Chars To Enclose Selection=
+Vi Input Mode Steal Keys=false
+Vi Relative Line Numbers=false
+Word Completion=true
+Word Completion Minimal Word Length=3
+Word Completion Remove Tail=true
+
+[KTextEditor::Search]
+Search History=tutorial
+
+[MainWindow]
+4 screens: Height=648
+4 screens: Width=1152
+4 screens: Window-Maximized=true
+
+[filetree]
+editShade=87,88,24
+listMode=false
+middleClickToClose=false
+shadingEnabled=true
+showCloseButton=false
+showFullPathOnRoots=false
+showToolbar=true
+sortRole=0
+viewShade=68,74,75
+
+[lspclient]
+AllowedServerCommandLines=/usr/bin/marksman server
+AutoHover=true
+AutoImport=true
+BlockedServerCommandLines=
+CompletionDocumentation=true
+CompletionParens=true
+Diagnostics=true
+FormatOnSave=false
+HighlightGoto=true
+HighlightSymbol=true
+IncrementalSync=false
+InlayHints=false
+Messages=true
+ReferencesDeclaration=true
+SemanticHighlighting=true
+ServerConfiguration=
+ShowCompletions=true
+SignatureHelp=true
+SymbolDetails=false
+SymbolExpand=true
+SymbolSort=false
+SymbolTree=true
+TypeFormatting=false
diff --git a/.config/kcminputrc b/.config/kcminputrc
new file mode 100644
index 0000000..e6205fa
--- /dev/null
+++ b/.config/kcminputrc
@@ -0,0 +1,13 @@
+[%24Version]
+update_info=delete_cursor_old_default_size.upd:DeleteCursorOldDefaultSize, kcminputrc_fix_botched_5_21_0.upd:kcminputrc_fix_botched_5_21_0_pre, kcminputrc_fix_botched_5_21_0.upd:kcminputrc_fix_botched_5_21_0, kcminputrc_repeat.upd:kcminputrc_migrate_key_repeat
+
+[Mouse]
+cursorSize=72
+cursorTheme=Bibata-Original-Amber
+
+[Tmp]
+update_info=delete_cursor_old_default_size.upd:DeleteCursorOldDefaultSize
+
+[Libinput][9011][26214][ydotoold virtual device]
+PointerAcceleration=0
+PointerAccelerationProfile=1
diff --git a/.config/kdeglobals b/.config/kdeglobals
new file mode 100644
index 0000000..8cfa85f
--- /dev/null
+++ b/.config/kdeglobals
@@ -0,0 +1,148 @@
+[$Version]
+update_info=filepicker.upd:filepicker-remove-old-previews-entry,fonts_global.upd:Fonts_Global,fonts_global_toolbar.upd:Fonts_Global_Toolbar,icons_remove_effects.upd:IconsRemoveEffects,kwin.upd:animation-speed,style_widgetstyle_default_breeze.upd:StyleWidgetStyleDefaultBreeze,deepin-kwin.upd:animation-speed
+
+[ColorEffects:Disabled]
+ChangeSelectionColor=
+Color=56,56,56
+ColorAmount=0
+ColorEffect=0
+ContrastAmount=0.65000000000000002
+ContrastEffect=1
+Enable=
+IntensityAmount=0.10000000000000001
+IntensityEffect=2
+
+[ColorEffects:Inactive]
+ChangeSelectionColor=true
+Color=112,111,110
+ColorAmount=0.025000000000000001
+ColorEffect=2
+ContrastAmount=0.10000000000000001
+ContrastEffect=2
+Enable=true
+IntensityAmount=0
+IntensityEffect=0
+
+[Colors:Button]
+BackgroundAlternate=60,56,54
+BackgroundNormal=40,40,40
+DecorationFocus=104,157,106
+DecorationHover=131,165,152
+ForegroundActive=142,192,124
+ForegroundInactive=55,115,117
+ForegroundLink=184,187,38
+ForegroundNegative=218,68,83
+ForegroundNeutral=246,116,0
+ForegroundNormal=235,219,178
+ForegroundPositive=39,174,96
+ForegroundVisited=127,140,141
+
+[Colors:Selection]
+BackgroundAlternate=142,192,124
+BackgroundNormal=104,157,106
+DecorationFocus=104,157,106
+DecorationHover=131,165,152
+ForegroundActive=252,252,252
+ForegroundInactive=235,219,178
+ForegroundLink=253,188,75
+ForegroundNegative=218,68,83
+ForegroundNeutral=246,116,0
+ForegroundNormal=235,219,178
+ForegroundPositive=39,174,96
+ForegroundVisited=189,195,199
+
+[Colors:Tooltip]
+BackgroundAlternate=60,56,54
+BackgroundNormal=40,40,40
+DecorationFocus=104,157,106
+DecorationHover=131,165,152
+ForegroundActive=184,187,38
+ForegroundInactive=55,115,117
+ForegroundLink=142,192,124
+ForegroundNegative=218,68,83
+ForegroundNeutral=246,116,0
+ForegroundNormal=235,219,178
+ForegroundPositive=39,174,96
+ForegroundVisited=127,140,141
+
+[Colors:View]
+BackgroundAlternate=60,56,54
+BackgroundNormal=40,40,40
+DecorationFocus=104,157,106
+DecorationHover=131,165,152
+ForegroundActive=184,187,38
+ForegroundInactive=55,115,117
+ForegroundLink=142,192,124
+ForegroundNegative=218,68,83
+ForegroundNeutral=246,116,0
+ForegroundNormal=235,219,178
+ForegroundPositive=39,174,96
+ForegroundVisited=127,140,141
+
+[Colors:Window]
+BackgroundAlternate=60,56,54
+BackgroundNormal=40,40,40
+DecorationFocus=104,157,106
+DecorationHover=131,165,152
+ForegroundActive=184,187,38
+ForegroundInactive=55,115,117
+ForegroundLink=142,192,124
+ForegroundNegative=218,68,83
+ForegroundNeutral=246,116,0
+ForegroundNormal=235,219,178
+ForegroundPositive=39,174,96
+ForegroundVisited=127,140,141
+
+[General]
+ColorSchemeHash=68f7da041112b660ac4e6911cf4bf8a7b361feda
+LastUsedCustomAccentColor=101,55,207
+
+[Icons]
+Theme=Gruvbox
+
+[KDE]
+LookAndFeelPackage=org.kde.breezedark.desktop
+ShowDeleteCommand=false
+widgetStyle=Breeze
+
+[KFileDialog Settings]
+Allow Expansion=false
+Automatically select filename extension=true
+Breadcrumb Navigation=true
+Decoration position=2
+LocationCombo Completionmode=5
+PathCombo Completionmode=5
+Show Bookmarks=false
+Show Full Path=false
+Show Inline Previews=true
+Show Preview=false
+Show Speedbar=true
+Show hidden files=true
+Sort by=Date
+Sort directories first=true
+Sort hidden files last=false
+Sort reversed=true
+Speedbar Width=188
+View Style=DetailTree
+
+[PreviewSettings]
+EnableRemoteFolderThumbnail=false
+MaximumRemoteSize=0
+
+[Shortcuts]
+GotoLine=
+
+[Sounds]
+Theme=oxygen
+
+[Toolbar style]
+ToolButtonStyle=TextUnderIcon
+ToolButtonStyleOtherToolbars=TextUnderIcon
+
+[WM]
+activeBackground=39,39,39
+activeBlend=235,219,178
+activeForeground=235,219,178
+inactiveBackground=40,40,40
+inactiveBlend=60,56,54
+inactiveForeground=204,190,155
diff --git a/.config/kglobalshortcutsrc b/.config/kglobalshortcutsrc
new file mode 100644
index 0000000..7ccdbbb
--- /dev/null
+++ b/.config/kglobalshortcutsrc
@@ -0,0 +1,470 @@
+[ActivityManager]
+_k_friendly_name=Aktivitätenverwaltung
+switch-to-activity-af3b6c4e-6eaf-4bea-857d-4860feb3cd94=none,none,Zu Aktivität „Standard“ wechseln
+
+[KDE Keyboard Layout Switcher]
+Switch keyboard layout to Deutsch=none,none,Tastaturbelegung zu Deutsch umschalten
+Switch to Last-Used Keyboard Layout=Meta+Alt+L,Meta+Alt+L,Auf zuletzt verwendete Tastaturbelegung umschalten
+Switch to Next Keyboard Layout=Meta+Alt+K,Meta+Alt+K,Auf nächste Tastaturbelegung umschalten
+_k_friendly_name=Umschaltung der Tastaturbelegung
+
+[claude]
+6BDC7FE403BD0C01E80873CD7F418EEF-Ctrl+Alt+Space=none,Ctrl+Alt+Space,Claude shortcut: Ctrl+Alt+Space
+_k_friendly_name=Claude
+
+[deepin-kwin]
+Activate Window Demanding Attention=none,none,Fenster aktivieren\\, das Aufmerksamkeit erfordert
+Decrease Opacity=none,none,Decrease Opacity of Active Window by 5 %
+Expose=none,Ctrl+F9,Fenster der aktuellen Arbeitsfläche anzeigen
+ExposeAll=none,Launch (C)\tCtrl+F10,Fenster aller Arbeitsflächen anzeigen
+ExposeClass=none,Ctrl+F7,Fenster der Fensterklasse anzeigen
+Increase Opacity=none,none,Increase Opacity of Active Window by 5 %
+Invert Screen Colors=none,none,Invert Screen Colors
+Kill Window=Ctrl+Alt+Esc,Ctrl+Alt+Esc,Fenster beseitigen
+MinimizeAll=Meta+Shift+D,none,MinimizeAll
+MoveMouseToCenter=none,Meta+F6,Mauszeiger zentrieren
+MoveMouseToFocus=none,Meta+F5,Mauszeiger in den Fokus verschieben
+MoveZoomDown=none,none,Vergrößerten Bereich nach unten verschieben
+MoveZoomLeft=none,none,Vergrößerten Bereich nach links verschieben
+MoveZoomRight=none,none,Vergrößerten Bereich nach rechts verschieben
+MoveZoomUp=none,none,Vergrößerten Bereich nach oben verschieben
+Setup Window Shortcut=none,none,Kurzbefehl für Fenster einrichten
+Show Desktop=none,Meta+D,Show Desktop
+ShowDesktopGrid=Ctrl+F8,Ctrl+F8,Arbeitsflächen-Raster anzeigen
+ShowMultitasking=none,Meta+S,Show Multitasking View
+Suspend Compositing=none,Alt+Shift+F12,Compositing aussetzen
+Switch One Desktop Down=none,Meta+Ctrl+Down,Eine Arbeitsfläche nach unten
+Switch One Desktop Up=none,Meta+Ctrl+Up,Eine Arbeitsfläche nach oben
+Switch One Desktop to the Left=none,Meta+Ctrl+Left,Eine Arbeitsfläche nach links
+Switch One Desktop to the Right=none,Meta+Ctrl+Right,Eine Arbeitsfläche nach rechts
+Switch Window Down=none,Meta+Alt+Down,Zum Fenster darunter wechseln
+Switch Window Left=none,Meta+Alt+Left,Zum Fenster links wechseln
+Switch Window Right=none,Meta+Alt+Right,Zum Fenster rechts wechseln
+Switch Window Up=none,Meta+Alt+Up,Zum Fenster darüber wechseln
+Switch to Desktop 1=none,Ctrl+F1,Auf Arbeitsfläche 1 umschalten
+Switch to Desktop 2=none,Ctrl+F2,Auf Arbeitsfläche 2 umschalten
+Switch to Desktop 3=none,Ctrl+F3,Auf Arbeitsfläche 3 umschalten
+Switch to Desktop 4=none,Ctrl+F4,Auf Arbeitsfläche 4 umschalten
+Switch to Desktop 5=none,none,Auf Arbeitsfläche 5 umschalten
+Switch to Desktop 6=none,none,Auf Arbeitsfläche 6 umschalten
+Switch to Next Desktop=none,none,Zur nächsten Arbeitsfläche umschalten
+Switch to Next Screen=none,none,Zum nächsten Bildschirm wechseln
+Switch to Previous Desktop=none,none,Zur vorherigen Arbeitsfläche umschalten
+Switch to Previous Screen=none,none,Zum vorherigen Bildschirm wechseln
+Switch to Screen 0=none,none,Zum Bildschirm 0 wechseln
+Switch to Screen 1=none,none,Zum Bildschirm 1 wechseln
+Switch to Screen 2=none,none,Zum Bildschirm 2 wechseln
+Switch to Screen 3=none,none,Zum Bildschirm 3 wechseln
+Switch to Screen 4=none,none,Zum Bildschirm 4 wechseln
+Switch to Screen 5=none,none,Zum Bildschirm 5 wechseln
+Switch to Screen 6=none,none,Zum Bildschirm 6 wechseln
+Switch to Screen 7=none,none,Zum Bildschirm 7 wechseln
+Toggle Night Color=none,none,Nachtfarben umschalten
+Toggle Window Raise/Lower=none,none,Fenster nach vorne/hinten
+Walk Through Desktop List=none,none,Nächster Eintrag in Arbeitsflächenliste
+Walk Through Desktop List (Reverse)=none,none,Nächster Eintrag in Arbeitsflächenliste (Gegenrichtung)
+Walk Through Desktops=none,none,Zwischen Arbeitsflächen umschalten
+Walk Through Desktops (Reverse)=none,none,Zwischen Arbeitsflächen umschalten (Gegenrichtung)
+Walk Through Windows=none,Alt+Tab,Zwischen Fenstern wechseln
+Walk Through Windows (Reverse)=none,Alt+Shift+Backtab,Zwischen Fenstern wechseln (Gegenrichtung)
+Walk Through Windows Alternative=none,none,Alternatives Wechseln zwischen Fenstern
+Walk Through Windows Alternative (Reverse)=none,none,Alternatives Wechseln zwischen Fenstern (Gegenrichtung)
+Walk Through Windows of Current Application=none,Alt+`,Zwischen Fenstern der aktuellen Anwendung wechseln
+Walk Through Windows of Current Application (Reverse)=none,Alt+~,Zwischen Fenstern der aktuellen Anwendung wechseln (Gegenrichtung)
+Walk Through Windows of Current Application Alternative=none,none,Alternatives Wechseln zwischen Fenstern der aktuellen Anwendung
+Walk Through Windows of Current Application Alternative (Reverse)=none,none,Alternatives Wechseln zwischen Fenstern der aktuellen Anwendung (Gegenrichtung)
+Window Above Other Windows=none,none,Fenster im Vordergrund halten
+Window Absolute Maximize=none,none,Window Absolute Maximize
+Window Below Other Windows=none,none,Fenster im Hintergrund halten
+Window Close=none,Alt+F4,Fenster schließen
+Window Fullscreen=none,none,Fenster auf Vollbildgröße
+Window Grow Horizontal=none,none,Fenster waagerecht maximieren
+Window Grow Vertical=none,none,Fenster senkrecht maximieren
+Window Lower=none,none,Fenster nach hinten
+Window Maximize=none,Meta+PgUp,Fenster maximieren
+Window Maximize Horizontal=none,none,Fenster waagerecht maximieren
+Window Maximize Vertical=none,none,Fenster senkrecht maximieren
+Window Minimize=none,Meta+PgDown,Fenster minimieren
+Window Move=none,none,Fenster verschieben
+Window Move Center=none,none,Fenster zentrieren
+Window No Border=none,none,Hide Window Border
+Window On All Desktops=none,none,Fenster auf allen Arbeitsflächen anzeigen
+Window One Desktop Down=none,Meta+Ctrl+Shift+Down,Fenster eine Arbeitsfläche nach unten
+Window One Desktop Up=none,Meta+Ctrl+Shift+Up,Fenster eine Arbeitsfläche nach oben
+Window One Desktop to the Left=none,Meta+Ctrl+Shift+Left,Fenster eine Arbeitsfläche nach links
+Window One Desktop to the Right=none,Meta+Ctrl+Shift+Right,Fenster eine Arbeitsfläche nach rechts
+Window Operations Menu=none,Alt+F3,Fensteraktionen-Menü
+Window Pack Down=none,none,Fenster nach unten verschieben
+Window Pack Left=none,none,Fenster nach links verschieben
+Window Pack Right=none,none,Fenster nach rechts verschieben
+Window Pack Up=none,none,Fenster nach oben verschieben
+Window Quick Tile Bottom=none,none,Fenster am unteren Bildschirmrand anordnen
+Window Quick Tile Bottom Left=none,none,Fenster am linken unteren Bildschirmrand anordnen
+Window Quick Tile Bottom Right=none,none,Fenster am rechten unteren Bildschirmrand anordnen
+Window Quick Tile Left=none,Meta+Left,Fenster am linken Bildschirmrand anordnen
+Window Quick Tile Right=none,Meta+Right,Fenster am rechten Bildschirmrand anordnen
+Window Quick Tile Top=none,none,Fenster am oberen Bildschirmrand anordnen
+Window Quick Tile Top Left=none,none,Fenster am linken oberen Bildschirmrand anordnen
+Window Quick Tile Top Right=none,none,Fenster am rechten oberen Bildschirmrand anordnen
+Window Raise=none,none,Fenster nach vorne
+Window Resize=none,none,Fenstergröße ändern
+Window Shade=none,none,Fensterheber betätigen
+Window Shrink Horizontal=none,none,Fenster waagerecht verkleinern
+Window Shrink Vertical=none,none,Fenster senkrecht verkleinern
+Window Unmaximize=none,none,Window Unmaximize
+Window to Desktop 1=none,none,Fenster auf Arbeitsfläche 1
+Window to Desktop 2=none,none,Fenster auf Arbeitsfläche 2
+Window to Desktop 3=none,none,Fenster auf Arbeitsfläche 3
+Window to Desktop 4=none,none,Fenster auf Arbeitsfläche 4
+Window to Desktop 5=none,none,Fenster auf Arbeitsfläche 5
+Window to Desktop 6=none,none,Fenster auf Arbeitsfläche 6
+Window to Next Desktop=none,none,Fenster auf nächste Arbeitsfläche verschieben
+Window to Next Screen=none,Meta+Shift+Right,Fenster auf nächsten Bildschirm verschieben
+Window to Previous Desktop=none,none,Fenster auf vorherige Arbeitsfläche verschieben
+Window to Previous Screen=none,Meta+Shift+Left,Fenster auf vorherigen Bildschirm verschieben
+Window to Screen 0=none,none,Fenster auf Bildschirm 0
+Window to Screen 1=none,none,Fenster auf Bildschirm 1
+Window to Screen 2=none,none,Fenster auf Bildschirm 2
+Window to Screen 3=none,none,Fenster auf Bildschirm 3
+Window to Screen 4=none,none,Fenster auf Bildschirm 4
+Window to Screen 5=none,none,Fenster auf Bildschirm 5
+Window to Screen 6=none,none,Fenster auf Bildschirm 6
+Window to Screen 7=none,none,Fenster auf Bildschirm 7
+_k_friendly_name=KWin
+view_actual_size=none,Meta+0,Auf Originalgröße zoomen
+view_zoom_in=none,Meta+=,Vergrößern
+view_zoom_out=none,Meta+-,Verkleinern
+
+[kaccess]
+Toggle Screen Reader On and Off=Meta+Alt+S,Meta+Alt+S,Screenreader ein-/ausschalten
+_k_friendly_name=Zugangshilfen
+
+[khotkeys]
+_k_friendly_name=Dienst für eigene Kurzbefehle
+{d03619b6-9b3c-48cc-9d9c-a2aadb485550}=none,none,Suchen
+
+[klipper]
+_k_friendly_name=Klipper
+clear-history=none,none,Bisherigen Inhalt der Zwischenablage löschen
+clipboard_action=none,Meta+Ctrl+X,Automatisches Aufklappmenü für Aktionen
+cycleNextAction=none,none,Nächstes Element im Verlauf
+cyclePrevAction=none,none,Vorheriges Element im Verlauf
+edit_clipboard=none,none,Inhalt bearbeiten ...
+repeat_action=none,Meta+Ctrl+R,Aktionen der aktuellen Zwischenablage manuell aufrufen
+show-barcode=none,none,Strichcode anzeigen ...
+show-on-mouse-pos=none,Meta+V,Elemente an Mausposition anzeigen
+
+[kmix]
+_k_friendly_name=Lautstärke
+decrease_microphone_volume=Microphone Volume Down,Microphone Volume Down,Mikrofonlautstärke verringern
+decrease_volume=Volume Down,Volume Down,Lautstärke verringern
+decrease_volume_small=Shift+Volume Down,Shift+Volume Down,Lautstärke um 1 % verringern
+increase_microphone_volume=Microphone Volume Up,Microphone Volume Up,Mikrofonlautstärke erhöhen
+increase_volume=Volume Up,Volume Up,Lautstärke erhöhen
+increase_volume_small=Shift+Volume Up,Shift+Volume Up,Lautstärke um 1 % erhöhen
+mic_mute=Microphone Mute\tMeta+Volume Mute,Microphone Mute\tMeta+Volume Mute,Mikrofon stummschalten
+mute=Volume Mute,Volume Mute,Stummschalten
+push_to_talk=none,none,Drücken zum Sprechen
+
+[ksmserver]
+Halt Without Confirmation=none,none,Ohne Rückfrage herunterfahren
+Lock Session=Screensaver\tMeta+L,Screensaver\tMeta+L,Sitzung sperren
+Log Out=Ctrl+Alt+Del,Ctrl+Alt+Del,Abmeldedialog anzeigen
+Log Out Without Confirmation=none,none,Ohne Rückfrage abmelden
+LogOut=none,none,Abmelden
+Reboot=none,none,Neu starten
+Reboot Without Confirmation=none,none,Ohne Rückfrage neu starten
+Shut Down=none,none,Herunterfahren
+_k_friendly_name=Sitzungsverwaltung
+
+[kwin]
+Activate Window Demanding Attention=Meta+Ctrl+A,Meta+Ctrl+A,Fenster aktivieren\\, das Aufmerksamkeit erfordert
+Cycle Overview=none,none,Durch Überblick und Rasteransicht wechseln
+Cycle Overview Opposite=none,none,Durch Rasteransicht und Überblick wechseln
+Decrease Opacity=none,none,Die Deckkraft des aktiven Fensters um 5 % verringern
+Edit Tiles=Meta+T,Meta+T,Tiling-Editor ein-/ausschalten
+Expose=Ctrl+F9,Ctrl+F9\tMeta+F9,Fenster der aktuellen Arbeitsfläche anzeigen
+ExposeAll=Launch (C)\tCtrl+F10,Launch (C)\tCtrl+F10\tMeta+F10,Fenster aller Arbeitsflächen anzeigen
+ExposeClass=Ctrl+F7,Ctrl+F7\tMeta+F7,Fenster der Fensterklasse anzeigen
+ExposeClassCurrentDesktop=none,none,Fenster der Fensterklasse auf der aktuellen Arbeitsfläche anzeigen
+Grid View=Meta+G,Meta+G,Übersicht umschalten
+Increase Opacity=none,none,Die Deckkraft des aktiven Fensters um 5 % erhöhen
+Kill Window=Meta+Ctrl+Esc,Meta+Ctrl+Esc,Fenster beseitigen
+Move Tablet to Next LogicalOutput=none,none,Tablet zur nächsten Ausgabe verschieben
+Move Tablet to Next Output=none,none,Tablet zur nächsten Ausgabe verschieben
+MoveMouseToCenter=Meta+F6,Meta+F6,Mauszeiger zentrieren
+MoveMouseToFocus=Meta+F5,Meta+F5,Mauszeiger in den Fokus verschieben
+MoveZoomDown=none,none,Vergrößerten Bereich nach unten verschieben
+MoveZoomLeft=none,none,Vergrößerten Bereich nach links verschieben
+MoveZoomRight=none,none,Vergrößerten Bereich nach rechts verschieben
+MoveZoomUp=none,none,Vergrößerten Bereich nach oben verschieben
+Overview=Meta+W,Meta+W,Übersicht umschalten
+Setup Window Shortcut=none,none,Kurzbefehl für Fenster einrichten
+Show Desktop=Meta+D,Meta+D,Blick auf die Arbeitsfläche
+Suspend Compositing=Alt+Shift+F12,Alt+Shift+F12,Compositing aussetzen
+Switch One Desktop Down=Meta+Ctrl+Down,Meta+Ctrl+Down,Eine Arbeitsfläche nach unten
+Switch One Desktop Up=Meta+Ctrl+Up,Meta+Ctrl+Up,Eine Arbeitsfläche nach oben
+Switch One Desktop to the Left=Meta+Ctrl+Left,Meta+Ctrl+Left,Eine Arbeitsfläche nach links
+Switch One Desktop to the Right=Meta+Ctrl+Right,Meta+Ctrl+Right,Eine Arbeitsfläche nach rechts
+Switch Window Down=Meta+Alt+Down,Meta+Alt+Down,Zum Fenster darunter wechseln
+Switch Window Left=Meta+Alt+Left,Meta+Alt+Left,Zum Fenster links wechseln
+Switch Window Right=Meta+Alt+Right,Meta+Alt+Right,Zum Fenster rechts wechseln
+Switch Window Up=Meta+Alt+Up,Meta+Alt+Up,Zum Fenster darüber wechseln
+Switch to Desktop 1=Ctrl+F1,Ctrl+F1\tMeta+F1,Auf Arbeitsfläche 1 umschalten
+Switch to Desktop 10=none,none,Auf Arbeitsfläche 10 umschalten
+Switch to Desktop 11=none,none,Auf Arbeitsfläche 11 umschalten
+Switch to Desktop 12=none,none,Auf Arbeitsfläche 12 umschalten
+Switch to Desktop 13=none,none,Auf Arbeitsfläche 13 umschalten
+Switch to Desktop 14=none,none,Auf Arbeitsfläche 14 umschalten
+Switch to Desktop 15=none,none,Auf Arbeitsfläche 15 umschalten
+Switch to Desktop 16=none,none,Auf Arbeitsfläche 16 umschalten
+Switch to Desktop 17=none,none,Auf Arbeitsfläche 17 umschalten
+Switch to Desktop 18=none,none,Auf Arbeitsfläche 18 umschalten
+Switch to Desktop 19=none,none,Auf Arbeitsfläche 19 umschalten
+Switch to Desktop 2=Ctrl+F2,Ctrl+F2\tMeta+F2,Auf Arbeitsfläche 2 umschalten
+Switch to Desktop 20=none,none,Auf Arbeitsfläche 20 umschalten
+Switch to Desktop 21=none,none,Auf Arbeitsfläche 21 umschalten
+Switch to Desktop 22=none,none,Auf Arbeitsfläche 22 umschalten
+Switch to Desktop 23=none,none,Auf Arbeitsfläche 23 umschalten
+Switch to Desktop 24=none,none,Auf Arbeitsfläche 24 umschalten
+Switch to Desktop 25=none,none,Auf Arbeitsfläche 25 umschalten
+Switch to Desktop 3=Ctrl+F3,Ctrl+F3\tMeta+F3,Auf Arbeitsfläche 3 umschalten
+Switch to Desktop 4=Ctrl+F4,Ctrl+F4\tMeta+F4,Auf Arbeitsfläche 4 umschalten
+Switch to Desktop 5=none,none,Auf Arbeitsfläche 5 umschalten
+Switch to Desktop 6=none,none,Auf Arbeitsfläche 6 umschalten
+Switch to Desktop 7=none,none,Auf Arbeitsfläche 7 umschalten
+Switch to Desktop 8=none,none,Auf Arbeitsfläche 8 umschalten
+Switch to Desktop 9=none,none,Auf Arbeitsfläche 9 umschalten
+Switch to Next Desktop=none,none,Zur nächsten Arbeitsfläche umschalten
+Switch to Next Screen=none,none,Zum nächsten Bildschirm wechseln
+Switch to Previous Desktop=none,none,Zur vorherigen Arbeitsfläche umschalten
+Switch to Previous Screen=none,none,Zum vorherigen Bildschirm wechseln
+Switch to Screen 0=none,none,Zum Bildschirm 0 wechseln
+Switch to Screen 1=none,none,Zum Bildschirm 1 wechseln
+Switch to Screen 2=none,none,Zum Bildschirm 2 wechseln
+Switch to Screen 3=none,none,Zum Bildschirm 3 wechseln
+Switch to Screen 4=none,none,Zum Bildschirm 4 wechseln
+Switch to Screen 5=none,none,Zum Bildschirm 5 wechseln
+Switch to Screen 6=none,none,Zum Bildschirm 6 wechseln
+Switch to Screen 7=none,none,Zum Bildschirm 7 wechseln
+Switch to Screen Above=none,none,Zum Bildschirm oben wechseln
+Switch to Screen Below=none,none,Zum Bildschirm unten wechseln
+Switch to Screen to the Left=none,none,Zum Bildschirm links wechseln
+Switch to Screen to the Right=none,none,Zum Bildschirm rechts wechseln
+Toggle Night Color=none,none,Nachtlicht aussetzen/fortsetzen
+Toggle Window Raise/Lower=none,none,Fenster nach vorne/hinten
+Walk Through Windows=Alt+Tab,Alt+Tab\tMeta+Tab,Zwischen Fenstern wechseln
+Walk Through Windows (Reverse)=Alt+Shift+Backtab,Alt+Shift+Tab\tMeta+Shift+Tab,Zwischen Fenstern wechseln (Gegenrichtung)
+Walk Through Windows Alternative=none,none,Alternatives Wechseln zwischen Fenstern
+Walk Through Windows Alternative (Reverse)=none,none,Alternatives Wechseln zwischen Fenstern (Gegenrichtung)
+Walk Through Windows of Current Application=Alt+`,Alt+`\tMeta+`,Zwischen Fenstern der aktuellen Anwendung wechseln
+Walk Through Windows of Current Application (Reverse)=Alt+~,Alt+~\tMeta+~,Zwischen Fenstern der aktuellen Anwendung wechseln (Gegenrichtung)
+Walk Through Windows of Current Application Alternative=none,none,Alternatives Wechseln zwischen Fenstern der aktuellen Anwendung
+Walk Through Windows of Current Application Alternative (Reverse)=none,none,Alternatives Wechseln zwischen Fenstern der aktuellen Anwendung (Gegenrichtung)
+Window Above Other Windows=none,none,Fenster im Vordergrund halten
+Window Below Other Windows=none,none,Fenster im Hintergrund halten
+Window Close=Alt+F4,Alt+F4,Fenster schließen
+Window Custom Quick Tile Bottom=none,none,Fenster im benutzerdefinierten Raster nach unten anordnen
+Window Custom Quick Tile Left=none,none,Fenster im benutzerdefinierten Raster nach links anordnen
+Window Custom Quick Tile Right=none,none,Fenster im benutzerdefinierten Raster nach rechts anordnen
+Window Custom Quick Tile Top=none,none,Fenster im benutzerdefinierten Raster nach oben anordnen
+Window Fullscreen=none,none,Fenster auf Vollbildgröße
+Window Grow Horizontal=none,none,Fenster waagerecht maximieren
+Window Grow Vertical=none,none,Fenster senkrecht maximieren
+Window Lower=none,none,Fenster nach hinten
+Window Maximize=Meta+PgUp,Meta+PgUp,Fenster maximieren
+Window Maximize Horizontal=none,none,Fenster waagerecht maximieren
+Window Maximize Vertical=none,none,Fenster senkrecht maximieren
+Window Minimize=Meta+PgDown,Meta+PgDown,Fenster minimieren
+Window Move=none,none,Fenster verschieben
+Window Move Center=none,none,Fenster zentrieren
+Window No Border=none,none,Titelleiste und Rahmen des Fensters ein-/ausschalten
+Window On All Desktops=none,none,Fenster auf allen Arbeitsflächen anzeigen
+Window One Desktop Down=Meta+Ctrl+Shift+Down,Meta+Ctrl+Shift+Down,Fenster eine Arbeitsfläche nach unten
+Window One Desktop Up=Meta+Ctrl+Shift+Up,Meta+Ctrl+Shift+Up,Fenster eine Arbeitsfläche nach oben
+Window One Desktop to the Left=none,Meta+Ctrl+Shift+Left,Fenster eine Arbeitsfläche nach links
+Window One Desktop to the Right=none,Meta+Ctrl+Shift+Right,Fenster eine Arbeitsfläche nach rechts
+Window One Screen Down=none,none,Fenster einen Bildschirm nach unten verschieben
+Window One Screen Up=none,none,Fenster einen Bildschirm nach oben verschieben
+Window One Screen to the Left=none,none,Fenster einen Bildschirm nach links verschieben
+Window One Screen to the Right=none,none,Fenster einen Bildschirm nach rechts verschieben
+Window Operations Menu=Alt+F3,Alt+F3,Fenstermenü
+Window Pack Down=none,none,Fenster nach unten verschieben
+Window Pack Left=none,none,Fenster nach links verschieben
+Window Pack Right=none,none,Fenster nach rechts verschieben
+Window Pack Up=none,none,Fenster nach oben verschieben
+Window Quick Tile Bottom=Meta+Down,Meta+Down,Fenster am unteren Bildschirmrand anordnen
+Window Quick Tile Bottom Left=none,none,Fenster am linken unteren Bildschirmrand anordnen
+Window Quick Tile Bottom Right=none,none,Fenster am rechten unteren Bildschirmrand anordnen
+Window Quick Tile Left=Meta+Left,Meta+Left,Fenster am linken Bildschirmrand anordnen
+Window Quick Tile Right=Meta+Right,Meta+Right,Fenster am rechten Bildschirmrand anordnen
+Window Quick Tile Top=Meta+Up,Meta+Up,Fenster am oberen Bildschirmrand anordnen
+Window Quick Tile Top Left=none,none,Fenster am linken oberen Bildschirmrand anordnen
+Window Quick Tile Top Right=none,none,Fenster am rechten oberen Bildschirmrand anordnen
+Window Raise=none,none,Fenster nach vorne
+Window Resize=none,none,Fenstergröße ändern
+Window Restore=Meta+Backspace,Meta+Backspace,Fenster wiederherstellen
+Window Shade=none,none,Fensterheber betätigen
+Window Shrink Horizontal=none,none,Fenster waagerecht verkleinern
+Window Shrink Vertical=none,none,Fenster senkrecht verkleinern
+Window to Desktop 1=none,none,Fenster auf Arbeitsfläche 1
+Window to Desktop 10=none,none,Fenster auf Arbeitsfläche 10
+Window to Desktop 11=none,none,Fenster auf Arbeitsfläche 11
+Window to Desktop 12=none,none,Fenster auf Arbeitsfläche 12
+Window to Desktop 13=none,none,Fenster auf Arbeitsfläche 13
+Window to Desktop 14=none,none,Fenster auf Arbeitsfläche 14
+Window to Desktop 15=none,none,Fenster auf Arbeitsfläche 15
+Window to Desktop 16=none,none,Fenster auf Arbeitsfläche 16
+Window to Desktop 17=none,none,Fenster auf Arbeitsfläche 17
+Window to Desktop 18=none,none,Fenster auf Arbeitsfläche 18
+Window to Desktop 19=none,none,Fenster auf Arbeitsfläche 19
+Window to Desktop 2=none,none,Fenster auf Arbeitsfläche 2
+Window to Desktop 20=none,none,Fenster auf Arbeitsfläche 20
+Window to Desktop 21=none,none,Fenster auf Arbeitsfläche 21
+Window to Desktop 22=none,none,Fenster auf Arbeitsfläche 22
+Window to Desktop 23=none,none,Fenster auf Arbeitsfläche 23
+Window to Desktop 24=none,none,Fenster auf Arbeitsfläche 24
+Window to Desktop 25=none,none,Fenster auf Arbeitsfläche 25
+Window to Desktop 3=none,none,Fenster auf Arbeitsfläche 3
+Window to Desktop 4=none,none,Fenster auf Arbeitsfläche 4
+Window to Desktop 5=none,none,Fenster auf Arbeitsfläche 5
+Window to Desktop 6=none,none,Fenster auf Arbeitsfläche 6
+Window to Desktop 7=none,none,Fenster auf Arbeitsfläche 7
+Window to Desktop 8=none,none,Fenster auf Arbeitsfläche 8
+Window to Desktop 9=none,none,Fenster auf Arbeitsfläche 9
+Window to Next Desktop=none,none,Fenster auf nächste Arbeitsfläche verschieben
+Window to Next Screen=Meta+Shift+Right,Meta+Shift+Right,Fenster auf nächsten Bildschirm verschieben
+Window to Previous Desktop=none,none,Fenster auf vorherige Arbeitsfläche verschieben
+Window to Previous Screen=Meta+Shift+Left,Meta+Shift+Left,Fenster auf vorherigen Bildschirm verschieben
+Window to Screen 0=none,none,Fenster auf Bildschirm 0 verschieben
+Window to Screen 1=none,none,Fenster auf Bildschirm 1 verschieben
+Window to Screen 2=none,none,Fenster auf Bildschirm 2 verschieben
+Window to Screen 3=none,none,Fenster auf Bildschirm 3 verschieben
+Window to Screen 4=none,none,Fenster auf Bildschirm 4 verschieben
+Window to Screen 5=none,none,Fenster auf Bildschirm 5 verschieben
+Window to Screen 6=none,none,Fenster auf Bildschirm 6 verschieben
+Window to Screen 7=none,none,Fenster auf Bildschirm 7 verschieben
+_k_friendly_name=KWin
+disableInputCapture=Meta+Shift+Esc,Meta+Shift+Esc,Aktive Eingabeerfassung deaktivieren
+view_actual_size=Meta+0,Meta+0,Auf Originalgröße zoomen
+view_zoom_in=Meta++\tMeta+=,Meta++\tMeta+=,Vergrößern
+view_zoom_out=Meta+-,Meta+-,Verkleinern
+
+[mediacontrol]
+_k_friendly_name=Mediensteuerung
+mediavolumedown=none,none,Medienwiedergabe leiser
+mediavolumeup=none,none,Medienwiedergabe lauter
+nextmedia=Media Next,Media Next,Nächstes Medium wiedergeben
+pausemedia=Media Pause,Media Pause,Medienwiedergabe pausieren
+playmedia=none,none,Medienwiedergabe starten
+playpausemedia=Media Play,Media Play,Medienwiedergabe starten/pausieren
+previousmedia=Media Previous,Media Previous,Vorheriges Medium wiedergeben
+seekbackwardmedia=Media Rewind,Media Rewind,Medienwiedergabe 5 s zurück
+seekbackwardmedialong=none,none,Medienwiedergabe 30 s zurück
+seekforwardmedia=Media Fast Forward,Media Fast Forward,Medienwiedergabe 5 s vor
+seekforwardmedialong=none,none,Medienwiedergabe 30 s vor
+stopmedia=Media Stop,Media Stop,Medienwiedergabe anhalten
+
+[org.chromium.Chromium]
+40D9EF9A25A0702DE1462EAF3594C581-Ctrl+Alt+D=Ctrl+Alt+D,none,Electron shortcut Ctrl+Alt+D
+6BDC7FE403BD0C01E80873CD7F418EEF-Ctrl+Alt+Space=none,none,Electron shortcut Ctrl+Alt+Space
+C73DD1156089FD1431EF39259EA8DFFD-=none,none,Electron shortcut\s
+CB41BA6854A0E6679763C7E2D3C55437-Ctrl+D=none,none,Electron shortcut Ctrl+D
+D25A8E9372C603BCD2D59A27DEDCE3AF-Ctrl+Alt+S=Ctrl+Alt+S,none,Electron shortcut Ctrl+Alt+S
+_k_friendly_name=org.chromium.Chromium
+
+[org_kde_powerdevil]
+Decrease Keyboard Brightness=Keyboard Brightness Down,Keyboard Brightness Down,Helligkeit der Tastatur-Hintergrundbeleuchtung verringern
+Decrease Screen Brightness=Monitor Brightness Down,Monitor Brightness Down,Bildschirmhelligkeit verringern
+Decrease Screen Brightness Small=Shift+Monitor Brightness Down,Shift+Monitor Brightness Down,Bildschirmhelligkeit um 1 % verringern
+Hibernate=Hibernate,Hibernate,Ruhezustand
+Increase Keyboard Brightness=Keyboard Brightness Up,Keyboard Brightness Up,Helligkeit der Tastatur-Hintergrundbeleuchtung erhöhen
+Increase Screen Brightness=Monitor Brightness Up,Monitor Brightness Up,Bildschirmhelligkeit erhöhen
+Increase Screen Brightness Small=Shift+Monitor Brightness Up,Shift+Monitor Brightness Up,Bildschirmhelligkeit um 1 % erhöhen
+PowerDown=Power Down,Power Down,Ausschalten
+PowerOff=Power Off,Power Off,Ausschalten
+Sleep=Sleep,Sleep,Standby-Modus
+Toggle Keyboard Backlight=Keyboard Light On/Off,Keyboard Light On/Off,Hintergrundbeleuchtung der Tastatur umschalten
+Turn Off Screen=none,none,Bildschirm ausschalten
+_k_friendly_name=Energieverwaltung
+powerProfile=Battery\tMeta+B,Battery\tMeta+B,Energieprofil wechseln
+
+[plasmashell]
+Slideshow Wallpaper Next Image=none,none,Nächstes Hintergrundbild
+_k_friendly_name=plasmashell
+activate application launcher=Meta,Meta\tAlt+F1,Anwendungsstarter aktivieren
+activate task manager entry 1=Meta+1,Meta+1,Fensterleisteneintrag 1 aktivieren
+activate task manager entry 10=none,none,Fensterleisteneintrag 10 aktivieren
+activate task manager entry 2=Meta+2,Meta+2,Fensterleisteneintrag 2 aktivieren
+activate task manager entry 3=Meta+3,Meta+3,Fensterleisteneintrag 3 aktivieren
+activate task manager entry 4=Meta+4,Meta+4,Fensterleisteneintrag 4 aktivieren
+activate task manager entry 5=Meta+5,Meta+5,Fensterleisteneintrag 5 aktivieren
+activate task manager entry 6=Meta+6,Meta+6,Fensterleisteneintrag 6 aktivieren
+activate task manager entry 7=Meta+7,Meta+7,Fensterleisteneintrag 7 aktivieren
+activate task manager entry 8=Meta+8,Meta+8,Fensterleisteneintrag 8 aktivieren
+activate task manager entry 9=Meta+9,Meta+9,Fensterleisteneintrag 9 aktivieren
+activate widget 114=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 139=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 164=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 190=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 216=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 241=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 266=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 292=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 376=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 401=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 403=none,none,Miniprogramm Fensterleiste nur mit Symbolen aktivieren
+activate widget 426=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 45=none,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 458=none,none,Miniprogramm Fensterleiste nur mit Symbolen aktivieren
+activate widget 6=Alt+F1,none,Miniprogramm Anwendungsstarter aktivieren
+activate widget 69=none,none,Miniprogramm Anwendungsstarter aktivieren
+clear history=none,none,Benachrichtigungsverlauf leeren
+clear-history=none,none,Verlauf der Zwischenablage leeren
+clipboard_action=Meta+Ctrl+X,Meta+Ctrl+X,Automatisches Aufklappmenü für Aktionen
+cycle-panels=Meta+Alt+P,Meta+Alt+P,Tastaturfokus zwischen Kontrollleisten umschalten
+cycleNextAction=none,none,Nächstes Element im Verlauf
+cyclePrevAction=none,none,Vorheriges Element im Verlauf
+edit_clipboard=none,none,Inhalt bearbeiten …
+manage activities=Meta+Q,Meta+Q,Aktivitätenwechsler anzeigen
+next activity=Meta+A,none,Zwischen Aktivitäten wechseln
+previous activity=Meta+Shift+A,none,Zwischen Aktivitäten wechseln (Gegenrichtung)
+repeat_action=Meta+Ctrl+R,none,Aktionen der aktuellen Zwischenablage manuell aufrufen
+show dashboard=Ctrl+F12,Ctrl+F12,Arbeitsfläche anzeigen
+show-barcode=none,none,Strichcode anzeigen …
+show-on-mouse-pos=Meta+V,Meta+V,Elemente der Zwischenablage an Mausposition anzeigen
+switch to next activity=none,none,Zur nächsten Aktivität wechseln
+switch to previous activity=none,none,Zur vorherigen Aktivität wechseln
+toggle do not disturb=none,none,Nicht stören umschalten
+
+[services][com.mitchellh.ghostty.desktop]
+_launch=none
+
+[services][net.local.firefox.desktop]
+_launch=Meta+Shift+G
+
+[services][org.kde.spectacle.desktop]
+RecordWindow=none
+RectangularRegionScreenShot=Print\tMeta+Shift+Print
+_launch=none
+
+[services][org.kde.touchpadshortcuts.desktop]
+ToggleTouchpad=Touchpad Toggle\tMeta+Ctrl+Zenkaku Hankaku
+
+[ukui-window-switch]
+_k_friendly_name=ukui-window-switch
+windows previous=none,Alt+Shift+Tab,
+windows switch next=none,Alt+Tab,
+workspace shortcut 1=Ctrl+Alt+W,Ctrl+Alt+W,
+workspace shortcut 2=none,Meta+Tab,
+
+[wacomtablet]
+Map to fullscreen=Meta+Ctrl+F,Meta+Ctrl+F,Bildschirmfüllend abbilden
+Map to screen 1=Meta+Ctrl+1,Meta+Ctrl+1,Auf Bildschirm 1 abbilden
+Map to screen 2=Meta+Ctrl+2,Meta+Ctrl+2,Auf Bildschirm 2 abbilden
+Next Profile=Meta+Ctrl+N,Meta+Ctrl+N,Nächstes Profil
+Previous Profile=Meta+Ctrl+P,Meta+Ctrl+P,Vorheriges Profil
+Toggle screen map selection=Meta+Ctrl+M,Meta+Ctrl+M,Zwischen allen Bildschirmen umschalten
+Toggle stylus mode=Meta+Ctrl+S,Meta+Ctrl+S,Funktionsweise des Stift-Werkzeugs zwischen relativ/absolut umschalten
+Toggle touch tool=Meta+Ctrl+T,Meta+Ctrl+T,Touch-Werkzeug aktivieren/deaktivieren
+_k_friendly_name=Wacom-Tablett
diff --git a/.config/klipperrc b/.config/klipperrc
new file mode 100644
index 0000000..be21f6a
--- /dev/null
+++ b/.config/klipperrc
@@ -0,0 +1,3 @@
+[General]
+Number of Actions=0
+Version=5.27.10
diff --git a/.config/konsolerc b/.config/konsolerc
new file mode 100644
index 0000000..663f9ef
--- /dev/null
+++ b/.config/konsolerc
@@ -0,0 +1,14 @@
+[General]
+ConfigVersion=1
+
+[MainWindow]
+3 screens: Window-Maximized=true
+4 screens: Height=524
+4 screens: Width=911
+4 screens: Window-Maximized=true
+4 screens: XPosition=5130
+4 screens: YPosition=1754
+DP-1 DP-2 DP-3 HDMI-1=DP-3
+
+[UiSettings]
+ColorScheme=
diff --git a/.config/krunnerrc b/.config/krunnerrc
new file mode 100644
index 0000000..c36d549
--- /dev/null
+++ b/.config/krunnerrc
@@ -0,0 +1,2 @@
+[PlasmaRunnerManager]
+migrated=true
diff --git a/.config/kscreenlockerrc b/.config/kscreenlockerrc
new file mode 100644
index 0000000..d625c36
--- /dev/null
+++ b/.config/kscreenlockerrc
@@ -0,0 +1,11 @@
+[$Version]
+update_info=kscreenlocker.upd:0.1-autolock
+
+[Daemon]
+LockGrace=30
+Timeout=30
+
+[Greeter][Wallpaper][org.kde.image][General]
+Blur=false
+FillMode=2
+Image=/usr/share/wallpapers/tueit-lock.jpg
diff --git a/.config/ksmserverrc b/.config/ksmserverrc
new file mode 100644
index 0000000..2ed164a
--- /dev/null
+++ b/.config/ksmserverrc
@@ -0,0 +1,5 @@
+[$Version]
+update_info=ksmserver_update_loginMode_value.upd:ksmserver_update_loginMode_value_default_enum
+
+[General]
+loginMode=emptySession
diff --git a/.config/kwinrc b/.config/kwinrc
new file mode 100644
index 0000000..23d89ed
--- /dev/null
+++ b/.config/kwinrc
@@ -0,0 +1,129 @@
+[$Version]
+update_info=deepin-kwin.upd:replace-scalein-with-scale,deepin-kwin.upd:port-minimizeanimation-effect-to-js,deepin-kwin.upd:port-scale-effect-to-js,deepin-kwin.upd:port-dimscreen-effect-to-js,deepin-kwin.upd:auto-bordersize,deepin-kwin.upd:animation-speed,deepin-kwin.upd:desktop-grid-click-behavior,deepin-kwin.upd:no-swap-encourage,deepin-kwin.upd:make-translucency-effect-disabled-by-default,deepin-kwin.upd:remove-flip-switch-effect,deepin-kwin.upd:remove-cover-switch-effect,deepin-kwin.upd:remove-cubeslide-effect,deepin-kwin.upd:remove-xrender-backend,deepin-kwin.upd:enable-scale-effect-by-default
+
+[%24Version]
+update_info=kwin.upd:replace-scalein-with-scale, kwin.upd:port-minimizeanimation-effect-to-js, kwin.upd:port-scale-effect-to-js, kwin.upd:port-dimscreen-effect-to-js, kwin.upd:auto-bordersize, kwin.upd:animation-speed, kwin.upd:desktop-grid-click-behavior, kwin.upd:no-swap-encourage, kwin.upd:make-translucency-effect-disabled-by-default, kwin.upd:remove-flip-switch-effect, kwin.upd:remove-cover-switch-effect, kwin.upd:remove-cubeslide-effect, kwin.upd:remove-xrender-backend, kwin.upd:enable-scale-effect-by-default, kwin.upd:overview-group-plugin-id, kwin.upd:animation-speed-cleanup, kwin.upd:replace-cascaded-zerocornered
+
+[Desktops]
+Id_1=aa936320-5382-4ef8-a72a-955ac8ba9852
+Number=1
+Rows=1
+
+[Effect-Blur]
+BlurStrength=10
+NoiseStrength=0
+
+[Effect-diminactive]
+DimFullScreen=false
+
+[NightColor]
+Active=true
+NightTemperature=3300
+
+[Plugins]
+diminactiveEnabled=true
+firefox-debug-trackerEnabled=true
+firefox-positioner-v2Enabled=true
+magiclampEnabled=true
+sheetEnabled=true
+slidebackEnabled=true
+squashEnabled=false
+translucencyEnabled=true
+
+[TabBox]
+ActivitiesMode=0
+DesktopMode=0
+HighlightWindows=false
+LayoutName=thumbnail_grid
+OrderMinimizedMode=1
+SwitchingMode=1
+
+[Tiling]
+tiles={layoutDirection:horizontal, tiles:[{width:0.25}, {width:0.5}, {width:0.25}]}
+
+[Tiling][19ce1a50-3006-52a1-84a0-fe6d91c5a3a2]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][19e8b959-5acd-5fe2-8d5e-b8e7214c9ddd]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][1a184837-61b8-5cfd-a9c2-05eb6ae2634e]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][25a689d3-f432-5e29-8990-a9b240750f21]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][2a1f23f7-790d-502e-94be-24661006ddcb]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][3b09003e-31fd-5563-a5d0-e1df30d8aa4c]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][3d17d22f-69cd-567c-929e-cde5c6265b44]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][4a080247-a3d0-56f9-ae02-67ffbd22116a]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][73e8e717-6daa-52ea-bf33-58780ec7b5f2]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][942d64fb-2d96-5ca2-bec4-71036c105d56]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][a17abf1c-055e-521a-a24a-02b173e1b770]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][aa936320-5382-4ef8-a72a-955ac8ba9852][592d0d31-ae44-4d03-9880-2174afd06e68]
+padding=4
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][aa936320-5382-4ef8-a72a-955ac8ba9852][629cbaff-2ffb-4aed-aec6-fe5e60da69e7]
+padding=4
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][aa936320-5382-4ef8-a72a-955ac8ba9852][7e6bd5bc-03e6-419c-b921-d7a203faf74e]
+padding=4
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][aa936320-5382-4ef8-a72a-955ac8ba9852][7fdaa52a-9b20-4d49-a15b-a729b00d91d1]
+padding=4
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][aa936320-5382-4ef8-a72a-955ac8ba9852][ca9d53fb-f189-46e3-b83b-437ecc6c7ec5]
+padding=4
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][c2e0b504-b4f8-5997-aae5-d7583376f0ba]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][c7be3cff-bf49-5593-8290-d669ec950203]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][da493791-2926-5b57-90da-adabcc25eb20]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][eaeb17d9-a578-52b8-a8e8-b2c01cd37ea7]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Tiling][f8cdf9db-2aad-5a4f-a51b-75962656515a]
+tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
+
+[Wayland]
+InputMethod[$e]=/usr/share/applications/fcitx5-wayland-launcher.desktop
+
+[Windows]
+BorderlessMaximizedWindows=false
+FocusStealingPreventionLevel=1
+HideUtilityWindowsForInactive=false
+HighlightWindowOnDemandAttention=true
+ShadeHover=true
+
+[Xwayland]
+Scale=1
+XwaylandEisNoPromptApps=xembedsniproxy
+
+[org.kde.kdecoration2]
+ButtonsOnLeft=M
+library=org.kde.kwin.aurorae.v2
+theme=__aurorae__svg__GruvboxAurorae
diff --git a/.config/kwinrulesrc b/.config/kwinrulesrc
new file mode 100644
index 0000000..264ac6f
--- /dev/null
+++ b/.config/kwinrulesrc
@@ -0,0 +1,56 @@
+[$Version]
+update_info=kwinrules.upd:replace-placement-string-to-enum,kwinrules.upd:use-virtual-desktop-ids,deepin-kwinrules.upd:replace-placement-string-to-enum,deepin-kwinrules.upd:use-virtual-desktop-ids
+
+[General]
+count=7
+rules=MainBraveRule,secondBraveRule,ansibleBraveRule,TVBraveRule,ZoiperNoFocus,KittyFocusProtect,KeePassXCFocusProtect
+
+[KeePassXCFocusProtect]
+Description=KeePassXC focus protection
+fpplevel=4
+fpplevelrule=2
+wmclass=org.keepassxc.KeePassXC
+wmclassmatch=1
+
+[KittyFocusProtect]
+Description=kitty focus protection
+fpplevel=4
+fpplevelrule=2
+wmclass=kitty
+wmclassmatch=1
+
+[MainBraveRule]
+Description=Brave Main
+screen=0
+screenrule=2
+wmclass=brave-Main
+wmclassmatch=1
+
+[TVBraveRule]
+Description=Brave TV
+screen=3
+screenrule=2
+wmclass=brave-TV
+wmclassmatch=1
+
+[ZoiperNoFocus]
+Description=Zoiper no focus steal
+fsplevel=4
+fsplevelrule=2
+wmclass=Zoiper
+wmclasscomplete=false
+wmclassmatch=1
+
+[ansibleBraveRule]
+Description=Brave ansible
+screen=1
+screenrule=2
+wmclass=brave-ansible
+wmclassmatch=1
+
+[secondBraveRule]
+Description=Brave second
+screen=2
+screenrule=2
+wmclass=brave-second
+wmclassmatch=1
diff --git a/.config/nvim/autoload/plug.vim b/.config/nvim/autoload/plug.vim
index ac14332..a225a6d 100644
--- a/.config/nvim/autoload/plug.vim
+++ b/.config/nvim/autoload/plug.vim
@@ -1,67 +1,36 @@
" vim-plug: Vim plugin manager
" ============================
"
-" Download plug.vim and put it in ~/.vim/autoload
+" 1. Download plug.vim and put it in 'autoload' directory
"
+" # Vim
" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
"
-" Edit your .vimrc
+" # Neovim
+" sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
+" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
"
-" call plug#begin('~/.vim/plugged')
+" 2. Add a vim-plug section to your ~/.vimrc (or ~/.config/nvim/init.vim for Neovim)
"
-" " Make sure you use single quotes
+" call plug#begin()
"
-" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
-" Plug 'junegunn/vim-easy-align'
+" " List your plugins here
+" Plug 'tpope/vim-sensible'
"
-" " Any valid git URL is allowed
-" Plug 'https://github.com/junegunn/vim-github-dashboard.git'
-"
-" " Multiple Plug commands can be written in a single line using | separators
-" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
-"
-" " On-demand loading
-" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
-" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
-"
-" " Using a non-master branch
-" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
-"
-" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
-" Plug 'fatih/vim-go', { 'tag': '*' }
-"
-" " Plugin options
-" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
-"
-" " Plugin outside ~/.vim/plugged with post-update hook
-" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
-"
-" " Unmanaged plugin (manually installed and updated)
-" Plug '~/my-prototype-plugin'
-"
-" " Initialize plugin system
" call plug#end()
"
-" Then reload .vimrc and :PlugInstall to install plugins.
+" 3. Reload the file or restart Vim, then you can,
"
-" Plug options:
+" :PlugInstall to install plugins
+" :PlugUpdate to update plugins
+" :PlugDiff to review the changes from the last update
+" :PlugClean to remove plugins no longer in the list
"
-"| Option | Description |
-"| ----------------------- | ------------------------------------------------ |
-"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use |
-"| `rtp` | Subdirectory that contains Vim plugin |
-"| `dir` | Custom directory for the plugin |
-"| `as` | Use different name for the plugin |
-"| `do` | Post-update hook (string or funcref) |
-"| `on` | On-demand loading: Commands or ``-mappings |
-"| `for` | On-demand loading: File types |
-"| `frozen` | Do not update unless explicitly specified |
-"
-" More information: https://github.com/junegunn/vim-plug
+" For more information, see https://github.com/junegunn/vim-plug
"
"
-" Copyright (c) 2017 Junegunn Choi
+" Copyright (c) 2024 Junegunn Choi
"
" MIT License
"
@@ -106,7 +75,7 @@ if s:is_win && &shellslash
else
let s:me = resolve(expand(':p'))
endif
-let s:base_spec = { 'branch': 'master', 'frozen': 0 }
+let s:base_spec = { 'branch': '', 'frozen': 0 }
let s:TYPE = {
\ 'string': type(''),
\ 'list': type([]),
@@ -116,6 +85,94 @@ let s:TYPE = {
let s:loaded = get(s:, 'loaded', {})
let s:triggers = get(s:, 'triggers', {})
+function! s:is_powershell(shell)
+ return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$'
+endfunction
+
+function! s:isabsolute(dir) abort
+ return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
+endfunction
+
+function! s:git_dir(dir) abort
+ let gitdir = s:trim(a:dir) . '/.git'
+ if isdirectory(gitdir)
+ return gitdir
+ endif
+ if !filereadable(gitdir)
+ return ''
+ endif
+ let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
+ if len(gitdir) && !s:isabsolute(gitdir)
+ let gitdir = a:dir . '/' . gitdir
+ endif
+ return isdirectory(gitdir) ? gitdir : ''
+endfunction
+
+function! s:git_origin_url(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let config = gitdir . '/config'
+ if empty(gitdir) || !filereadable(config)
+ return ''
+ endif
+ return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
+endfunction
+
+function! s:git_revision(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+
+ let line = get(readfile(head), 0, '')
+ let ref = matchstr(line, '^ref: \zs.*')
+ if empty(ref)
+ return line
+ endif
+
+ if filereadable(gitdir . '/' . ref)
+ return get(readfile(gitdir . '/' . ref), 0, '')
+ endif
+
+ if filereadable(gitdir . '/packed-refs')
+ for line in readfile(gitdir . '/packed-refs')
+ if line =~# ' ' . ref
+ return matchstr(line, '^[0-9a-f]*')
+ endif
+ endfor
+ endif
+
+ return ''
+endfunction
+
+function! s:git_local_branch(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+ let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
+ return len(branch) ? branch : 'HEAD'
+endfunction
+
+function! s:git_origin_branch(spec)
+ if len(a:spec.branch)
+ return a:spec.branch
+ endif
+
+ " The file may not be present if this is a local repository
+ let gitdir = s:git_dir(a:spec.dir)
+ let origin_head = gitdir.'/refs/remotes/origin/HEAD'
+ if len(gitdir) && filereadable(origin_head)
+ return matchstr(get(readfile(origin_head), 0, ''),
+ \ '^ref: refs/remotes/origin/\zs.*')
+ endif
+
+ " The command may not return the name of a branch in detached HEAD state
+ let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
+ return v:shell_error ? '' : result[-1]
+endfunction
+
if s:is_win
function! s:plug_call(fn, ...)
let shellslash = &shellslash
@@ -150,10 +207,11 @@ endfunction
function! plug#begin(...)
if a:0 > 0
- let s:plug_home_org = a:1
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
elseif exists('g:plug_home')
let home = s:path(g:plug_home)
+ elseif has('nvim')
+ let home = stdpath('data') . '/plugged'
elseif !empty(&rtp)
let home = s:path(split(&rtp, ',')[0]) . '/plugged'
else
@@ -179,7 +237,7 @@ function! s:define_commands()
endif
if has('win32')
\ && &shellslash
- \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
+ \ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell))
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
endif
if !has('nvim')
@@ -262,7 +320,7 @@ function! plug#end()
endif
let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
- if exists('g:did_load_filetypes')
+ if get(g:, 'did_load_filetypes', 0)
filetype off
endif
for name in g:plugs_order
@@ -301,6 +359,9 @@ function! plug#end()
if !empty(types)
augroup filetypedetect
call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
+ if has('nvim-0.5.0')
+ call s:source(s:rtp(plug), 'ftdetect/**/*.lua', 'after/ftdetect/**/*.lua')
+ endif
augroup END
endif
for type in types
@@ -311,13 +372,15 @@ function! plug#end()
for [cmd, names] in items(lod.cmd)
execute printf(
- \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "", , , , %s)',
- \ cmd, string(cmd), string(names))
+ \ has('patch-7.4.1898')
+ \ ? 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "", , , , ,%s)'
+ \ : 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "", , , , %s)'
+ \ , cmd, string(cmd), string(names))
endfor
for [map, names] in items(lod.map)
for [mode, map_prefix, key_prefix] in
- \ [['i', '', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
+ \ [['i', '', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
execute printf(
\ '%snoremap %s %s:call lod_map(%s, %s, %s, "%s")',
\ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix)
@@ -348,6 +411,9 @@ endfunction
function! s:load_plugin(spec)
call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim')
+ if has('nvim-0.5.0')
+ call s:source(s:rtp(a:spec), 'plugin/**/*.lua', 'after/plugin/**/*.lua')
+ endif
endfunction
function! s:reload_plugins()
@@ -372,7 +438,7 @@ endfunction
function! s:git_version_requirement(...)
if !exists('s:git_version')
- let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)')
+ let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)')
endif
return s:version_requirement(s:git_version, a:000)
endfunction
@@ -419,7 +485,7 @@ if s:is_win
let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile)
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
- if &shell =~# 'powershell\.exe'
+ if s:is_powershell(&shell)
let cmd = '& ' . cmd
endif
return [batchfile, cmd]
@@ -565,6 +631,9 @@ function! s:lod(names, types, ...)
let rtp = s:rtp(g:plugs[name])
for dir in a:types
call s:source(rtp, dir.'/**/*.vim')
+ if has('nvim-0.5.0') " see neovim#14686
+ call s:source(rtp, dir.'/**/*.lua')
+ endif
endfor
if a:0
if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2))
@@ -584,11 +653,19 @@ function! s:lod_ft(pat, names)
call s:doautocmd('filetypeindent', 'FileType')
endfunction
-function! s:lod_cmd(cmd, bang, l1, l2, args, names)
- call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
- call s:dobufread(a:names)
- execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
-endfunction
+if has('patch-7.4.1898')
+ function! s:lod_cmd(cmd, bang, l1, l2, args, mods, names)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ execute printf('%s %s%s%s %s', a:mods, (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
+ endfunction
+else
+ function! s:lod_cmd(cmd, bang, l1, l2, args, names)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
+ endfunction
+endif
function! s:lod_map(map, names, with_prefix, prefix)
call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
@@ -632,16 +709,38 @@ function! plug#(repo, ...)
let g:plugs[name] = spec
let s:loaded[name] = get(s:loaded, name, 0)
catch
- return s:err(v:exception)
+ return s:err(repo . ' ' . v:exception)
endtry
endfunction
function! s:parse_options(arg)
let opts = copy(s:base_spec)
let type = type(a:arg)
+ let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
if type == s:TYPE.string
+ if empty(a:arg)
+ throw printf(opt_errfmt, 'tag', 'string')
+ endif
let opts.tag = a:arg
elseif type == s:TYPE.dict
+ for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
+ if has_key(a:arg, opt)
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string')
+ endif
+ endfor
+ for opt in ['on', 'for']
+ if has_key(a:arg, opt)
+ \ && type(a:arg[opt]) != s:TYPE.list
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string or list')
+ endif
+ endfor
+ if has_key(a:arg, 'do')
+ \ && type(a:arg.do) != s:TYPE.funcref
+ \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
+ throw printf(opt_errfmt, 'do', 'string or funcref')
+ endif
call extend(opts, a:arg)
if has_key(opts, 'dir')
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
@@ -694,11 +793,12 @@ endfunction
function! s:syntax()
syntax clear
syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber
- syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX
+ syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX,plugAbort
syn match plugNumber /[0-9]\+[0-9.]*/ contained
syn match plugBracket /[[\]]/ contained
syn match plugX /x/ contained
- syn match plugDash /^-/
+ syn match plugAbort /\~/ contained
+ syn match plugDash /^-\{1}\ /
syn match plugPlus /^+/
syn match plugStar /^*/
syn match plugMessage /\(^- \)\@<=.*/
@@ -716,11 +816,13 @@ function! s:syntax()
syn match plugError /^x.*/
syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
syn match plugH2 /^.*:\n-\+$/
+ syn match plugH2 /^-\{2,}/
syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
hi def link plug1 Title
hi def link plug2 Repeat
hi def link plugH2 Type
hi def link plugX Exception
+ hi def link plugAbort Ignore
hi def link plugBracket Structure
hi def link plugNumber Number
@@ -756,7 +858,7 @@ function! s:lastline(msg)
endfunction
function! s:new_window()
- execute get(g:, 'plug_window', 'vertical topleft new')
+ execute get(g:, 'plug_window', '-tabnew')
endfunction
function! s:plug_window_exists()
@@ -818,7 +920,7 @@ function! s:prepare(...)
endif
endfor
- call s:job_abort()
+ call s:job_abort(0)
if s:switch_in()
if b:plug_preview == 1
pc
@@ -828,7 +930,7 @@ function! s:prepare(...)
call s:new_window()
endif
- nnoremap q :if b:plug_preview==1pcendifbd
+ nnoremap q :call close_pane()
if a:0 == 0
call s:finish_bindings()
endif
@@ -850,6 +952,17 @@ function! s:prepare(...)
endif
endfunction
+function! s:close_pane()
+ if b:plug_preview == 1
+ pc
+ let b:plug_preview = -1
+ elseif exists('s:jobs') && !empty(s:jobs)
+ call s:job_abort(1)
+ else
+ bd
+ endif
+endfunction
+
function! s:assign_name()
" Assign buffer name
let prefix = '[Plugins]'
@@ -864,8 +977,15 @@ endfunction
function! s:chsh(swap)
let prev = [&shell, &shellcmdflag, &shellredir]
- if !s:is_win && a:swap
- set shell=sh shellredir=>%s\ 2>&1
+ if !s:is_win
+ set shell=sh
+ endif
+ if a:swap
+ if s:is_powershell(&shell)
+ let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
+ elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
+ set shellredir=>%s\ 2>&1
+ endif
endif
return prev
endfunction
@@ -898,10 +1018,15 @@ function! s:regress_bar()
endfunction
function! s:is_updated(dir)
- return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir))
+ return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir))
endfunction
function! s:do(pull, force, todo)
+ if has('nvim')
+ " Reset &rtp to invalidate Neovim cache of loaded Lua modules
+ " See https://github.com/junegunn/vim-plug/pull/1157#issuecomment-1809226110
+ let &rtp = &rtp
+ endif
for [name, spec] in items(a:todo)
if !isdirectory(spec.dir)
continue
@@ -935,6 +1060,7 @@ function! s:do(pull, force, todo)
endif
elseif type == s:TYPE.funcref
try
+ call s:load_plugin(spec)
let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
call spec.do({ 'name': name, 'status': status, 'force': a:force })
catch
@@ -959,14 +1085,21 @@ function! s:hash_match(a, b)
return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0
endfunction
+function! s:disable_credential_helper()
+ return s:git_version_requirement(2) && get(g:, 'plug_disable_credential_helper', 1)
+endfunction
+
function! s:checkout(spec)
let sha = a:spec.commit
- let output = s:system('git rev-parse HEAD', a:spec.dir)
- if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
+ let output = s:git_revision(a:spec.dir)
+ let error = 0
+ if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
+ let credential_helper = s:disable_credential_helper() ? '-c credential.helper= ' : ''
let output = s:system(
- \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
+ \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
+ let error = v:shell_error
endif
- return output
+ return [output, error]
endfunction
function! s:finish(pull)
@@ -1027,7 +1160,7 @@ function! s:update_impl(pull, force, args) abort
let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ?
\ remove(args, -1) : get(g:, 'plug_threads', 16)
- let managed = filter(copy(g:plugs), 's:is_managed(v:key)')
+ let managed = filter(deepcopy(g:plugs), 's:is_managed(v:key)')
let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') :
\ filter(managed, 'index(args, v:key) >= 0')
@@ -1079,11 +1212,17 @@ function! s:update_impl(pull, force, args) abort
normal! 2G
silent! redraw
- let s:clone_opt = get(g:, 'plug_shallow', 1) ?
- \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : ''
+ " Set remote name, overriding a possible user git config's clone.defaultRemoteName
+ let s:clone_opt = ['--origin', 'origin']
+ if get(g:, 'plug_shallow', 1)
+ call extend(s:clone_opt, ['--depth', '1'])
+ if s:git_version_requirement(1, 7, 10)
+ call add(s:clone_opt, '--no-single-branch')
+ endif
+ endif
if has('win32unix') || has('wsl')
- let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input'
+ call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input'])
endif
let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
@@ -1155,9 +1294,11 @@ function! s:update_finish()
if !pos
continue
endif
+ let out = ''
+ let error = 0
if has_key(spec, 'commit')
call s:log4(name, 'Checking out '.spec.commit)
- let out = s:checkout(spec)
+ let [out, error] = s:checkout(spec)
elseif has_key(spec, 'tag')
let tag = spec.tag
if tag =~ '\*'
@@ -1170,19 +1311,16 @@ function! s:update_finish()
endif
call s:log4(name, 'Checking out '.tag)
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
- else
- let branch = get(spec, 'branch', 'master')
- call s:log4(name, 'Merging origin/'.s:esc(branch))
- let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
- \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
+ let error = v:shell_error
endif
- if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
+ if !error && filereadable(spec.dir.'/.gitmodules') &&
\ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
call s:log4(name, 'Updating submodules. This may take a while.')
let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
+ let error = v:shell_error
endif
let msg = s:format_message(v:shell_error ? 'x': '-', name, out)
- if v:shell_error
+ if error
call add(s:update.errors, name)
call s:regress_bar()
silent execute pos 'd _'
@@ -1206,7 +1344,12 @@ function! s:update_finish()
endif
endfunction
-function! s:job_abort()
+function! s:mark_aborted(name, message)
+ let attrs = { 'running': 0, 'error': 1, 'abort': 1, 'lines': [a:message] }
+ let s:jobs[a:name] = extend(get(s:jobs, a:name, {}), attrs)
+endfunction
+
+function! s:job_abort(cancel)
if (!s:nvim && !s:vim8) || !exists('s:jobs')
return
endif
@@ -1220,8 +1363,18 @@ function! s:job_abort()
if j.new
call s:rm_rf(g:plugs[name].dir)
endif
+ if a:cancel
+ call s:mark_aborted(name, 'Aborted')
+ endif
endfor
- let s:jobs = {}
+
+ if a:cancel
+ for todo in values(s:update.todo)
+ let todo.abort = 1
+ endfor
+ else
+ let s:jobs = {}
+ endif
endfunction
function! s:last_non_empty_line(lines)
@@ -1235,6 +1388,16 @@ function! s:last_non_empty_line(lines)
return ''
endfunction
+function! s:bullet_for(job, ...)
+ if a:job.running
+ return a:job.new ? '+' : '*'
+ endif
+ if get(a:job, 'abort', 0)
+ return '~'
+ endif
+ return a:job.error ? 'x' : get(a:000, 0, '-')
+endfunction
+
function! s:job_out_cb(self, data) abort
let self = a:self
let data = remove(self.lines, -1) . a:data
@@ -1243,9 +1406,10 @@ function! s:job_out_cb(self, data) abort
" To reduce the number of buffer updates
let self.tick = get(self, 'tick', -1) + 1
if !self.running || self.tick % len(s:jobs) == 0
- let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-')
let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines)
- call s:log(bullet, self.name, result)
+ if len(result)
+ call s:log(s:bullet_for(self), self.name, result)
+ endif
endif
endfunction
@@ -1258,27 +1422,31 @@ endfunction
function! s:job_cb(fn, job, ch, data)
if !s:plug_window_exists() " plug window closed
- return s:job_abort()
+ return s:job_abort(0)
endif
call call(a:fn, [a:job, a:data])
endfunction
function! s:nvim_cb(job_id, data, event) dict abort
- return a:event == 'stdout' ?
+ return (a:event == 'stdout' || a:event == 'stderr') ?
\ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) :
\ s:job_cb('s:job_exit_cb', self, 0, a:data)
endfunction
-function! s:spawn(name, cmd, opts)
- let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
- \ 'new': get(a:opts, 'new', 0) }
+function! s:spawn(name, spec, queue, opts)
+ let job = { 'name': a:name, 'spec': a:spec, 'running': 1, 'error': 0, 'lines': [''],
+ \ 'new': get(a:opts, 'new', 0), 'queue': copy(a:queue) }
+ let Item = remove(job.queue, 0)
+ let argv = type(Item) == s:TYPE.funcref ? call(Item, [a:spec]) : Item
let s:jobs[a:name] = job
- let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd
- let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
if s:nvim
+ if has_key(a:opts, 'dir')
+ let job.cwd = a:opts.dir
+ endif
call extend(job, {
\ 'on_stdout': function('s:nvim_cb'),
+ \ 'on_stderr': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'),
\ })
let jid = s:plug_call('jobstart', argv, job)
@@ -1291,9 +1459,16 @@ function! s:spawn(name, cmd, opts)
\ 'Invalid arguments (or job table is full)']
endif
elseif s:vim8
+ let cmd = join(map(copy(argv), 'plug#shellescape(v:val, {"script": 0})'))
+ if has_key(a:opts, 'dir')
+ let cmd = s:with_cd(cmd, a:opts.dir, 0)
+ endif
+ let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
\ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]),
+ \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]),
\ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
+ \ 'err_mode': 'raw',
\ 'out_mode': 'raw'
\})
if job_status(jid) == 'run'
@@ -1304,27 +1479,33 @@ function! s:spawn(name, cmd, opts)
let job.lines = ['Failed to start job']
endif
else
- let job.lines = s:lines(call('s:system', [cmd]))
+ let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [argv, a:opts.dir] : [argv]))
let job.error = v:shell_error != 0
let job.running = 0
endif
endfunction
function! s:reap(name)
- let job = s:jobs[a:name]
+ let job = remove(s:jobs, a:name)
if job.error
call add(s:update.errors, a:name)
elseif get(job, 'new', 0)
let s:update.new[a:name] = 1
endif
- let s:update.bar .= job.error ? 'x' : '='
- let bullet = job.error ? 'x' : '-'
+ let more = len(get(job, 'queue', []))
let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines)
- call s:log(bullet, a:name, empty(result) ? 'OK' : result)
- call s:bar()
+ if len(result)
+ call s:log(s:bullet_for(job), a:name, result)
+ endif
- call remove(s:jobs, a:name)
+ if !job.error && more
+ let job.spec.queue = job.queue
+ let s:update.todo[a:name] = job.spec
+ else
+ let s:update.bar .= s:bullet_for(job, '=')
+ call s:bar()
+ endif
endfunction
function! s:bar()
@@ -1377,6 +1558,16 @@ function! s:update_vim()
call s:tick()
endfunction
+function! s:checkout_command(spec)
+ let a:spec.branch = s:git_origin_branch(a:spec)
+ return ['git', 'checkout', '-q', a:spec.branch, '--']
+endfunction
+
+function! s:merge_command(spec)
+ let a:spec.branch = s:git_origin_branch(a:spec)
+ return ['git', 'merge', '--ff-only', 'origin/'.a:spec.branch]
+endfunction
+
function! s:tick()
let pull = s:update.pull
let prog = s:progress_opt(s:nvim || s:vim8)
@@ -1391,18 +1582,39 @@ while 1 " Without TCO, Vim stack is bound to explode
let name = keys(s:update.todo)[0]
let spec = remove(s:update.todo, name)
- let new = empty(globpath(spec.dir, '.git', 1))
+ if get(spec, 'abort', 0)
+ call s:mark_aborted(name, 'Skipped')
+ call s:reap(name)
+ continue
+ endif
- call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
- redraw
+ let queue = get(spec, 'queue', [])
+ let new = empty(globpath(spec.dir, '.git', 1))
+
+ if empty(queue)
+ call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
+ redraw
+ endif
let has_tag = has_key(spec, 'tag')
- if !new
+ if len(queue)
+ call s:spawn(name, spec, queue, { 'dir': spec.dir })
+ elseif !new
let [error, _] = s:git_validate(spec, 0)
if empty(error)
if pull
- let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : ''
- call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir })
+ let cmd = s:disable_credential_helper() ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch']
+ if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
+ call extend(cmd, ['--depth', '99999999'])
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ let queue = [cmd, split('git remote set-head origin -a')]
+ if !has_tag && !has_key(spec, 'commit')
+ call extend(queue, [function('s:checkout_command'), function('s:merge_command')])
+ endif
+ call s:spawn(name, spec, queue, { 'dir': spec.dir })
else
let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
endif
@@ -1410,12 +1622,14 @@ while 1 " Without TCO, Vim stack is bound to explode
let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
endif
else
- call s:spawn(name,
- \ printf('git clone %s %s %s %s 2>&1',
- \ has_tag ? '' : s:clone_opt,
- \ prog,
- \ plug#shellescape(spec.uri, {'script': 0}),
- \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 })
+ let cmd = ['git', 'clone']
+ if !has_tag
+ call extend(cmd, s:clone_opt)
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ call s:spawn(name, spec, [extend(cmd, [spec.uri, s:trim(spec.dir)]), function('s:checkout_command'), function('s:merge_command')], { 'new': 1 })
endif
if !s:jobs[name].running
@@ -1452,7 +1666,7 @@ G_NVIM = vim.eval("has('nvim')") == '1'
G_PULL = vim.eval('s:update.pull') == '1'
G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)'))
-G_CLONE_OPT = vim.eval('s:clone_opt')
+G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt'))
G_PROGRESS = vim.eval('s:progress_opt(1)')
G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
G_STOP = thr.Event()
@@ -1989,7 +2203,7 @@ function! s:update_ruby()
end
} if VIM::evaluate('s:mac_gui') == 1
- clone_opt = VIM::evaluate('s:clone_opt')
+ clone_opt = VIM::evaluate('s:clone_opt').join(' ')
progress = VIM::evaluate('s:progress_opt(1)')
nthr.times do
mtx.synchronize do
@@ -2055,13 +2269,29 @@ function! s:shellesc_sh(arg)
return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
endfunction
+" Escape the shell argument based on the shell.
+" Vim and Neovim's shellescape() are insufficient.
+" 1. shellslash determines whether to use single/double quotes.
+" Double-quote escaping is fragile for cmd.exe.
+" 2. It does not work for powershell.
+" 3. It does not work for *sh shells if the command is executed
+" via cmd.exe (ie. cmd.exe /c sh -c command command_args)
+" 4. It does not support batchfile syntax.
+"
+" Accepts an optional dictionary with the following keys:
+" - shell: same as Vim/Neovim 'shell' option.
+" If unset, fallback to 'cmd.exe' on Windows or 'sh'.
+" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
function! plug#shellescape(arg, ...)
+ if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
+ return a:arg
+ endif
let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1)
- if shell =~# 'cmd\.exe'
+ if shell =~# 'cmd\(\.exe\)\?$'
return s:shellesc_cmd(a:arg, script)
- elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
+ elseif s:is_powershell(shell)
return s:shellesc_ps1(a:arg)
endif
return s:shellesc_sh(a:arg)
@@ -2098,15 +2328,34 @@ endfunction
function! s:with_cd(cmd, dir, ...)
let script = a:0 > 0 ? a:1 : 1
- return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd)
+ let pwsh = s:is_powershell(&shell)
+ let cd = s:is_win && !pwsh ? 'cd /d' : 'cd'
+ let sep = pwsh ? ';' : '&&'
+ return printf('%s %s %s %s', cd, plug#shellescape(a:dir, {'script': script, 'shell': &shell}), sep, a:cmd)
endfunction
function! s:system(cmd, ...)
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
- let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
- if s:is_win
+ if type(a:cmd) == s:TYPE.list
+ " Neovim's system() supports list argument to bypass the shell
+ " but it cannot set the working directory for the command.
+ " Assume that the command does not rely on the shell.
+ if has('nvim') && a:0 == 0
+ return system(a:cmd)
+ endif
+ let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
+ if s:is_powershell(&shell)
+ let cmd = '& ' . cmd
+ endif
+ else
+ let cmd = a:cmd
+ endif
+ if a:0 > 0
+ let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
+ endif
+ if s:is_win && type(a:cmd) != s:TYPE.list
let [batchfile, cmd] = s:batchfile(cmd)
endif
return system(cmd)
@@ -2126,18 +2375,17 @@ endfunction
function! s:git_validate(spec, check_branch)
let err = ''
if isdirectory(a:spec.dir)
- let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir))
+ let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
let remote = result[-1]
- if v:shell_error
+ if empty(remote)
let err = join([remote, 'PlugClean required.'], "\n")
elseif !s:compare_git_uri(remote, a:spec.uri)
let err = join(['Invalid URI: '.remote,
\ 'Expected: '.a:spec.uri,
\ 'PlugClean required.'], "\n")
elseif a:check_branch && has_key(a:spec, 'commit')
- let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir))
- let sha = result[-1]
- if v:shell_error
+ let sha = s:git_revision(a:spec.dir)
+ if empty(sha)
let err = join(add(result, 'PlugClean required.'), "\n")
elseif !s:hash_match(sha, a:spec.commit)
let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
@@ -2145,8 +2393,9 @@ function! s:git_validate(spec, check_branch)
\ 'PlugUpdate required.'], "\n")
endif
elseif a:check_branch
- let branch = result[0]
+ let current_branch = result[0]
" Check tag
+ let origin_branch = s:git_origin_branch(a:spec)
if has_key(a:spec, 'tag')
let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
if a:spec.tag !=# tag && a:spec.tag !~ '\*'
@@ -2154,25 +2403,29 @@ function! s:git_validate(spec, check_branch)
\ (empty(tag) ? 'N/A' : tag), a:spec.tag)
endif
" Check branch
- elseif a:spec.branch !=# branch
+ elseif origin_branch !=# current_branch
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
- \ branch, a:spec.branch)
+ \ current_branch, origin_branch)
endif
if empty(err)
- let [ahead, behind] = split(s:lastline(s:system(printf(
- \ 'git rev-list --count --left-right HEAD...origin/%s',
- \ a:spec.branch), a:spec.dir)), '\t')
- if !v:shell_error && ahead
- if behind
+ let ahead_behind = split(s:lastline(s:system([
+ \ 'git', 'rev-list', '--count', '--left-right',
+ \ printf('HEAD...origin/%s', origin_branch)
+ \ ], a:spec.dir)), '\t')
+ if v:shell_error || len(ahead_behind) != 2
+ let err = "Failed to compare with the origin. The default branch might have changed.\nPlugClean required."
+ else
+ let [ahead, behind] = ahead_behind
+ if ahead && behind
" Only mention PlugClean if diverged, otherwise it's likely to be
" pushable (and probably not that messed up).
let err = printf(
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
- \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind)
- else
+ \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
+ elseif ahead
let err = printf("Ahead of origin/%s by %d commit(s).\n"
\ .'Cannot update until local changes are pushed.',
- \ a:spec.branch, ahead)
+ \ origin_branch, ahead)
endif
endif
endif
@@ -2185,7 +2438,9 @@ endfunction
function! s:rm_rf(dir)
if isdirectory(a:dir)
- call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir))
+ return s:system(s:is_win
+ \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
+ \ : ['rm', '-rf', a:dir])
endif
endfunction
@@ -2199,7 +2454,7 @@ function! s:clean(force)
let errs = {}
let [cnt, total] = [0, len(g:plugs)]
for [name, spec] in items(g:plugs)
- if !s:is_managed(name)
+ if !s:is_managed(name) || get(spec, 'frozen', 0)
call add(dirs, spec.dir)
else
let [err, clean] = s:git_validate(spec, 1)
@@ -2267,6 +2522,7 @@ endfunction
function! s:delete(range, force)
let [l1, l2] = a:range
let force = a:force
+ let err_count = 0
while l1 <= l2
let line = getline(l1)
if line =~ '^- ' && isdirectory(line[2:])
@@ -2275,11 +2531,22 @@ function! s:delete(range, force)
let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
let force = force || answer > 1
if answer
- call s:rm_rf(line[2:])
+ let err = s:rm_rf(line[2:])
setlocal modifiable
- call setline(l1, '~'.line[1:])
- let s:clean_count += 1
- call setline(4, printf('Removed %d directories.', s:clean_count))
+ if empty(err)
+ call setline(l1, '~'.line[1:])
+ let s:clean_count += 1
+ else
+ delete _
+ call append(l1 - 1, s:format_message('x', line[1:], err))
+ let l2 += len(s:lines(err))
+ let err_count += 1
+ endif
+ let msg = printf('Removed %d directories.', s:clean_count)
+ if err_count > 0
+ let msg .= printf(' Failed to remove %d directories.', err_count)
+ endif
+ call setline(4, msg)
setlocal nomodifiable
endif
endif
@@ -2294,7 +2561,7 @@ function! s:upgrade()
let new = tmp . '/plug.vim'
try
- let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp)))
+ let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp])
if v:shell_error
return s:err('Error upgrading vim-plug: '. out)
endif
@@ -2419,26 +2686,34 @@ function! s:preview_commit()
let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
if empty(sha)
- return
+ let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
+ if empty(name)
+ return
+ endif
+ let title = 'HEAD@{1}..'
+ let command = 'git diff --no-color HEAD@{1}'
+ else
+ let title = sha
+ let command = 'git show --no-color --pretty=medium '.sha
+ let name = s:find_name(line('.'))
endif
- let name = s:find_name(line('.'))
if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
return
endif
- if exists('g:plug_pwindow') && !s:is_preview_window_open()
- execute g:plug_pwindow
- execute 'e' sha
+ if !s:is_preview_window_open()
+ execute get(g:, 'plug_pwindow', 'vertical rightbelow new')
+ execute 'e' title
else
- execute 'pedit' sha
+ execute 'pedit' title
wincmd P
endif
- setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
+ setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
- let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
+ let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
if s:is_win
let [batchfile, cmd] = s:batchfile(cmd)
endif
@@ -2488,18 +2763,23 @@ function! s:diff()
endif
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs
- let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
- let cmd = 'git log --graph --color=never '
- \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '')
- \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
- if has_key(v, 'rtp')
- let cmd .= ' -- '.plug#shellescape(v.rtp)
- endif
- let diff = s:system_chomp(cmd, v.dir)
- if !empty(diff)
- let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
- call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
- let cnts[origin] += 1
+ let branch = s:git_origin_branch(v)
+ if len(branch)
+ let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
+ let cmd = ['git', 'log', '--graph', '--color=never']
+ if s:git_version_requirement(2, 10, 0)
+ call add(cmd, '--no-show-signature')
+ endif
+ call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
+ if has_key(v, 'rtp')
+ call extend(cmd, ['--', v.rtp])
+ endif
+ let diff = s:system_chomp(cmd, v.dir)
+ if !empty(diff)
+ let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
+ call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
+ let cnts[origin] += 1
+ endif
endif
let bar .= '='
call s:progress_bar(2, bar, len(total))
@@ -2559,9 +2839,9 @@ function! s:snapshot(force, ...) abort
1
let anchor = line('$') - 3
let names = sort(keys(filter(copy(g:plugs),
- \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)')))
+ \'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
for name in reverse(names)
- let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir)
+ let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
if !empty(sha)
call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
redraw
diff --git a/.config/nvim/autoload/plug.vim.old b/.config/nvim/autoload/plug.vim.old
index 52c6b2a..2c4111b 100644
--- a/.config/nvim/autoload/plug.vim.old
+++ b/.config/nvim/autoload/plug.vim.old
@@ -99,7 +99,13 @@ let s:mac_gui = has('gui_macvim') && has('gui_running')
let s:is_win = has('win32')
let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
-let s:me = resolve(expand(':p'))
+if s:is_win && &shellslash
+ set noshellslash
+ let s:me = resolve(expand(':p'))
+ set shellslash
+else
+ let s:me = resolve(expand(':p'))
+endif
let s:base_spec = { 'branch': 'master', 'frozen': 0 }
let s:TYPE = {
\ 'string': type(''),
@@ -110,10 +116,42 @@ let s:TYPE = {
let s:loaded = get(s:, 'loaded', {})
let s:triggers = get(s:, 'triggers', {})
+if s:is_win
+ function! s:plug_call(fn, ...)
+ let shellslash = &shellslash
+ try
+ set noshellslash
+ return call(a:fn, a:000)
+ finally
+ let &shellslash = shellslash
+ endtry
+ endfunction
+else
+ function! s:plug_call(fn, ...)
+ return call(a:fn, a:000)
+ endfunction
+endif
+
+function! s:plug_getcwd()
+ return s:plug_call('getcwd')
+endfunction
+
+function! s:plug_fnamemodify(fname, mods)
+ return s:plug_call('fnamemodify', a:fname, a:mods)
+endfunction
+
+function! s:plug_expand(fmt)
+ return s:plug_call('expand', a:fmt, 1)
+endfunction
+
+function! s:plug_tempname()
+ return s:plug_call('tempname')
+endfunction
+
function! plug#begin(...)
if a:0 > 0
let s:plug_home_org = a:1
- let home = s:path(fnamemodify(expand(a:1), ':p'))
+ let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
elseif exists('g:plug_home')
let home = s:path(g:plug_home)
elseif !empty(&rtp)
@@ -121,7 +159,7 @@ function! plug#begin(...)
else
return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
endif
- if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp
+ if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
endif
@@ -139,6 +177,16 @@ function! s:define_commands()
if !executable('git')
return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
endif
+ if has('win32')
+ \ && &shellslash
+ \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
+ return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
+ endif
+ if !has('nvim')
+ \ && (has('win32') || has('win32unix'))
+ \ && !has('multi_byte')
+ return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
+ endif
command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(0, [])
command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(0, [])
command! -nargs=0 -bar -bang PlugClean call s:clean(0)
@@ -193,9 +241,17 @@ function! s:ask_no_interrupt(...)
endtry
endfunction
+function! s:lazy(plug, opt)
+ return has_key(a:plug, a:opt) &&
+ \ (empty(s:to_a(a:plug[a:opt])) ||
+ \ !isdirectory(a:plug.dir) ||
+ \ len(s:glob(s:rtp(a:plug), 'plugin')) ||
+ \ len(s:glob(s:rtp(a:plug), 'after/plugin')))
+endfunction
+
function! plug#end()
if !exists('g:plugs')
- return s:err('Call plug#begin() first')
+ return s:err('plug#end() called without calling plug#begin() first')
endif
if exists('#PlugLOD')
@@ -214,7 +270,7 @@ function! plug#end()
continue
endif
let plug = g:plugs[name]
- if get(s:loaded, name, 0) || !has_key(plug, 'on') && !has_key(plug, 'for')
+ if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for')
let s:loaded[name] = 1
continue
endif
@@ -326,11 +382,11 @@ function! s:progress_opt(base)
\ s:git_version_requirement(1, 7, 1) ? '--progress' : ''
endfunction
-if s:is_win
- function! s:rtp(spec)
- return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
- endfunction
+function! s:rtp(spec)
+ return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
+endfunction
+if s:is_win
function! s:path(path)
return s:trim(substitute(a:path, '/', '\', 'g'))
endfunction
@@ -342,11 +398,33 @@ if s:is_win
function! s:is_local_plug(repo)
return a:repo =~? '^[a-z]:\|^[%~]'
endfunction
-else
- function! s:rtp(spec)
- return s:dirpath(a:spec.dir . get(a:spec, 'rtp', ''))
+
+ " Copied from fzf
+ function! s:wrap_cmds(cmds)
+ let cmds = [
+ \ '@echo off',
+ \ 'setlocal enabledelayedexpansion']
+ \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
+ \ + ['endlocal']
+ if has('iconv')
+ if !exists('s:codepage')
+ let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
+ endif
+ return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
+ endif
+ return map(cmds, 'v:val."\r"')
endfunction
+ function! s:batchfile(cmd)
+ let batchfile = s:plug_tempname().'.bat'
+ call writefile(s:wrap_cmds(a:cmd), batchfile)
+ let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
+ if &shell =~# 'powershell\.exe'
+ let cmd = '& ' . cmd
+ endif
+ return [batchfile, cmd]
+ endfunction
+else
function! s:path(path)
return s:trim(a:path)
endfunction
@@ -426,8 +504,8 @@ endfunction
function! s:dobufread(names)
for name in a:names
- let path = s:rtp(g:plugs[name]).'/**'
- for dir in ['ftdetect', 'ftplugin']
+ let path = s:rtp(g:plugs[name])
+ for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin']
if len(finddir(dir, path))
if exists('#BufRead')
doautocmd BufRead
@@ -546,7 +624,7 @@ function! plug#(repo, ...)
try
let repo = s:trim(a:repo)
let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
- let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??'))
+ let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??'))
let spec = extend(s:infer_properties(name, repo), opts)
if !has_key(g:plugs, name)
call add(g:plugs_order, name)
@@ -566,7 +644,7 @@ function! s:parse_options(arg)
elseif type == s:TYPE.dict
call extend(opts, a:arg)
if has_key(opts, 'dir')
- let opts.dir = s:dirpath(expand(opts.dir))
+ let opts.dir = s:dirpath(s:plug_expand(opts.dir))
endif
else
throw 'Invalid argument type (expected: string or dictionary)'
@@ -577,7 +655,7 @@ endfunction
function! s:infer_properties(name, repo)
let repo = a:repo
if s:is_local_plug(repo)
- return { 'dir': s:dirpath(expand(repo)) }
+ return { 'dir': s:dirpath(s:plug_expand(repo)) }
else
if repo =~ ':'
let uri = repo
@@ -730,7 +808,7 @@ function! s:finish_bindings()
endfunction
function! s:prepare(...)
- if empty(getcwd())
+ if empty(s:plug_getcwd())
throw 'Invalid current working directory. Cannot proceed.'
endif
@@ -763,6 +841,9 @@ function! s:prepare(...)
execute 'silent! unmap ' k
endfor
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell
+ if exists('+colorcolumn')
+ setlocal colorcolumn=
+ endif
setf vim-plug
if exists('g:syntax_on')
call s:syntax()
@@ -783,31 +864,28 @@ endfunction
function! s:chsh(swap)
let prev = [&shell, &shellcmdflag, &shellredir]
- if s:is_win
- set shell=cmd.exe shellcmdflag=/c shellredir=>%s\ 2>&1
- elseif a:swap
+ if !s:is_win && a:swap
set shell=sh shellredir=>%s\ 2>&1
endif
return prev
endfunction
function! s:bang(cmd, ...)
+ let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(a:0)
" FIXME: Escaping is incomplete. We could use shellescape with eval,
" but it won't work on Windows.
let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
if s:is_win
- let batchfile = tempname().'.bat'
- call writefile(["@echo off\r", cmd . "\r"], batchfile)
- let cmd = batchfile
+ let [batchfile, cmd] = s:batchfile(cmd)
endif
let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%')
execute "normal! :execute g:_plug_bang\\"
finally
unlet g:_plug_bang
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
- if s:is_win
+ if s:is_win && filereadable(batchfile)
call delete(batchfile)
endif
endtry
@@ -886,7 +964,7 @@ function! s:checkout(spec)
let output = s:system('git rev-parse HEAD', a:spec.dir)
if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
let output = s:system(
- \ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir)
+ \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
endif
return output
endfunction
@@ -1004,10 +1082,12 @@ function! s:update_impl(pull, force, args) abort
let s:clone_opt = get(g:, 'plug_shallow', 1) ?
\ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : ''
- if has('win32unix')
+ if has('win32unix') || has('wsl')
let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input'
endif
+ let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
+
" Python version requirement (>= 2.7)
if python && !has('python3') && !ruby && !use_job && s:update.threads > 1
redir => pyv
@@ -1081,7 +1161,7 @@ function! s:update_finish()
elseif has_key(spec, 'tag')
let tag = spec.tag
if tag =~ '\*'
- let tags = s:lines(s:system('git tag --list '.s:shellesc(tag).' --sort -version:refname 2>&1', spec.dir))
+ let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir))
if !v:shell_error && !empty(tags)
let tag = tags[0]
call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
@@ -1089,17 +1169,17 @@ function! s:update_finish()
endif
endif
call s:log4(name, 'Checking out '.tag)
- let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir)
+ let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
else
- let branch = s:esc(get(spec, 'branch', 'master'))
- call s:log4(name, 'Merging origin/'.branch)
- let out = s:system('git checkout -q '.branch.' -- 2>&1'
- \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only origin/'.branch.' 2>&1')), spec.dir)
+ let branch = get(spec, 'branch', 'master')
+ call s:log4(name, 'Merging origin/'.s:esc(branch))
+ let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
+ \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
endif
if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
\ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
call s:log4(name, 'Updating submodules. This may take a while.')
- let out .= s:bang('git submodule update --init --recursive 2>&1', spec.dir)
+ let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
endif
let msg = s:format_message(v:shell_error ? 'x': '-', name, out)
if v:shell_error
@@ -1138,7 +1218,7 @@ function! s:job_abort()
silent! call job_stop(j.jobid)
endif
if j.new
- call s:system('rm -rf ' . s:shellesc(g:plugs[name].dir))
+ call s:rm_rf(g:plugs[name].dir)
endif
endfor
let s:jobs = {}
@@ -1191,22 +1271,17 @@ endfunction
function! s:spawn(name, cmd, opts)
let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
- \ 'batchfile': (s:is_win && (s:nvim || s:vim8)) ? tempname().'.bat' : '',
\ 'new': get(a:opts, 'new', 0) }
let s:jobs[a:name] = job
- let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir) : a:cmd
- if !empty(job.batchfile)
- call writefile(["@echo off\r", cmd . "\r"], job.batchfile)
- let cmd = job.batchfile
- endif
- let argv = add(s:is_win ? ['cmd', '/c'] : ['sh', '-c'], cmd)
+ let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd
+ let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
if s:nvim
call extend(job, {
\ 'on_stdout': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'),
\ })
- let jid = jobstart(argv, job)
+ let jid = s:plug_call('jobstart', argv, job)
if jid > 0
let job.jobid = jid
else
@@ -1249,9 +1324,6 @@ function! s:reap(name)
call s:log(bullet, a:name, empty(result) ? 'OK' : result)
call s:bar()
- if has_key(job, 'batchfile') && !empty(job.batchfile)
- call delete(job.batchfile)
- endif
call remove(s:jobs, a:name)
endfunction
@@ -1266,9 +1338,10 @@ function! s:bar()
endfunction
function! s:logpos(name)
- for i in range(4, line('$'))
+ let max = line('$')
+ for i in range(4, max > 4 ? max : 4)
if getline(i) =~# '^[-+x*] '.a:name.':'
- for j in range(i + 1, line('$'))
+ for j in range(i + 1, max > 5 ? max : 5)
if getline(j) !~ '^ '
return [i, j - 1]
endif
@@ -1318,7 +1391,7 @@ while 1 " Without TCO, Vim stack is bound to explode
let name = keys(s:update.todo)[0]
let spec = remove(s:update.todo, name)
- let new = !isdirectory(spec.dir)
+ let new = empty(globpath(spec.dir, '.git', 1))
call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
redraw
@@ -1341,8 +1414,8 @@ while 1 " Without TCO, Vim stack is bound to explode
\ printf('git clone %s %s %s %s 2>&1',
\ has_tag ? '' : s:clone_opt,
\ prog,
- \ s:shellesc(spec.uri),
- \ s:shellesc(s:trim(spec.dir))), { 'new': 1 })
+ \ plug#shellescape(spec.uri, {'script': 0}),
+ \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 })
endif
if !s:jobs[name].running
@@ -1969,19 +2042,29 @@ function! s:update_ruby()
EOF
endfunction
-function! s:shellesc_cmd(arg)
- let escaped = substitute(a:arg, '[&|<>()@^]', '^&', 'g')
- let escaped = substitute(escaped, '%', '%%', 'g')
- let escaped = substitute(escaped, '"', '\\^&', 'g')
- let escaped = substitute(escaped, '\(\\\+\)\(\\^\)', '\1\1\2', 'g')
- return '^"'.substitute(escaped, '\(\\\+\)$', '\1\1', '').'^"'
+function! s:shellesc_cmd(arg, script)
+ let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g')
+ return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g')
endfunction
-function! s:shellesc(arg)
- if &shell =~# 'cmd.exe$'
- return s:shellesc_cmd(a:arg)
+function! s:shellesc_ps1(arg)
+ return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
+endfunction
+
+function! s:shellesc_sh(arg)
+ return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
+endfunction
+
+function! plug#shellescape(arg, ...)
+ let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
+ let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
+ let script = get(opts, 'script', 1)
+ if shell =~# 'cmd\.exe'
+ return s:shellesc_cmd(a:arg, script)
+ elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
+ return s:shellesc_ps1(a:arg)
endif
- return shellescape(a:arg)
+ return s:shellesc_sh(a:arg)
endfunction
function! s:glob_dir(path)
@@ -2013,23 +2096,23 @@ function! s:format_message(bullet, name, message)
endif
endfunction
-function! s:with_cd(cmd, dir)
- return printf('cd%s %s && %s', s:is_win ? ' /d' : '', s:shellesc(a:dir), a:cmd)
+function! s:with_cd(cmd, dir, ...)
+ let script = a:0 > 0 ? a:1 : 1
+ return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd)
endfunction
function! s:system(cmd, ...)
+ let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
if s:is_win
- let batchfile = tempname().'.bat'
- call writefile(["@echo off\r", cmd . "\r"], batchfile)
- let cmd = batchfile
+ let [batchfile, cmd] = s:batchfile(cmd)
endif
- return system(s:is_win ? '('.cmd.')' : cmd)
+ return system(cmd)
finally
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
- if s:is_win
+ if s:is_win && filereadable(batchfile)
call delete(batchfile)
endif
endtry
@@ -2102,7 +2185,7 @@ endfunction
function! s:rm_rf(dir)
if isdirectory(a:dir)
- call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . s:shellesc(a:dir))
+ call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir))
endif
endfunction
@@ -2134,7 +2217,7 @@ function! s:clean(force)
let allowed = {}
for dir in dirs
- let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1
+ let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
let allowed[dir] = 1
for child in s:glob_dir(dir)
let allowed[child] = 1
@@ -2207,11 +2290,11 @@ endfunction
function! s:upgrade()
echo 'Downloading the latest version of vim-plug'
redraw
- let tmp = tempname()
+ let tmp = s:plug_tempname()
let new = tmp . '/plug.vim'
try
- let out = s:system(printf('git clone --depth 1 %s %s', s:plug_src, tmp))
+ let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp)))
if v:shell_error
return s:err('Error upgrading vim-plug: '. out)
endif
@@ -2352,18 +2435,17 @@ function! s:preview_commit()
wincmd P
endif
setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
+ let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
- let cmd = 'cd '.s:shellesc(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
+ let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
if s:is_win
- let batchfile = tempname().'.bat'
- call writefile(["@echo off\r", cmd . "\r"], batchfile)
- let cmd = batchfile
+ let [batchfile, cmd] = s:batchfile(cmd)
endif
execute 'silent %!' cmd
finally
let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
- if s:is_win
+ if s:is_win && filereadable(batchfile)
call delete(batchfile)
endif
endtry
@@ -2407,7 +2489,13 @@ function! s:diff()
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
- let diff = s:system_chomp('git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 's:shellesc(v:val)')), v.dir)
+ let cmd = 'git log --graph --color=never '
+ \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '')
+ \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)'))
+ if has_key(v, 'rtp')
+ let cmd .= ' -- '.plug#shellescape(v.rtp)
+ endif
+ let diff = s:system_chomp(cmd, v.dir)
if !empty(diff)
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
@@ -2453,7 +2541,7 @@ function! s:revert()
return
endif
- call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir)
+ call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir)
setlocal modifiable
normal! "_dap
setlocal nomodifiable
@@ -2481,7 +2569,7 @@ function! s:snapshot(force, ...) abort
endfor
if a:0 > 0
- let fn = expand(a:1)
+ let fn = s:plug_expand(a:1)
if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
return
endif
@@ -2507,3 +2595,4 @@ endif
let &cpo = s:cpo_save
unlet s:cpo_save
+
diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim
index c7c2d4f..cee4a3f 100644
--- a/.config/nvim/init.vim
+++ b/.config/nvim/init.vim
@@ -1,8 +1,13 @@
+set mouse=
call plug#begin('~/.config/nvim/plugged')
" Plugins {
- " ctrl-p is a fuzzy file finder.
- Plug 'kien/ctrlp.vim'
+ " neo-tree is a file finder.
+ "Plug 'nvim-neo-tree/neo-tree.nvim'
+ " Requirement for neo-tree
+ "Plug 'nvim-lua/plenary.nvim'
+ "Plug 'nvim-tree/nvim-web-devicons'
+ "Plug 'MunifTanjim/nui.nvim'
" airline is a better status line and a tab-bar for nvim.
Plug 'bling/vim-airline'
" gruvbox colorscheme. Seems to work the best for me.
@@ -12,7 +17,18 @@ call plug#begin('~/.config/nvim/plugged')
"autocompletion Plugin for Code autocomplete
Plug 'zchee/deoplete-jedi'
" Left side File Tree
- "Plug 'scrooloose/nerdtree'
+ Plug 'scrooloose/nerdtree'
+ " Adds filetype-specific icons to NERDTree files and folders,
+ Plug 'ryanoasis/vim-devicons'
+ " Adds syntax highlighting to NERDTree based on filetype.
+ Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
+ "
+ " fzf fuzzy finder for the current directory
+ Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+ " whichkey shows with space which keys you can press
+ Plug 'folke/which-key.nvim'
+ " firenvim ist ein socket um den browser editor durch nvim zu ersetzen
+ Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } }
" install with nvim +PlugInstall +qall
" update with nvim +PlugUpgrade +PlugUpdate +PlugClean +qall
" you can also update it in nvim with syntax autocompletion and stuff - simply
@@ -210,6 +226,12 @@ let mapleader="\"
" }
" Plugin Settings {
+ " Plug {
+ autocmd VimEnter *
+ \ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
+ \| PlugInstall --sync | q
+ \| endif
+ " }
" Airline {
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_idx_mode = 1
@@ -224,14 +246,6 @@ let mapleader="\"
let g:airline_right_alt_sep = ''
let g:airline_theme= 'gruvbox'
" }
- " CtrlP {
- " Open file menu
- nnoremap o :CtrlP
- " Open buffer menu
- nnoremap b :CtrlPBuffer
- " Open most recently used files
- nnoremap f :CtrlPMRUFiles
- " }
" neomake {
autocmd! BufWritePost * Neomake
nnoremap l :lopen
diff --git a/.config/nvim/nvimrc b/.config/nvim/nvimrc
deleted file mode 100644
index 78271f0..0000000
Binary files a/.config/nvim/nvimrc and /dev/null differ
diff --git a/.config/nvim/spell/en.utf-8.add b/.config/nvim/spell/en.utf-8.add
deleted file mode 100644
index ae1b13f..0000000
Binary files a/.config/nvim/spell/en.utf-8.add and /dev/null differ
diff --git a/.config/nvim/spell/en.utf-8.add.spl b/.config/nvim/spell/en.utf-8.add.spl
deleted file mode 100644
index b3e2758..0000000
Binary files a/.config/nvim/spell/en.utf-8.add.spl and /dev/null differ
diff --git a/.config/plasma-org.kde.plasma.desktop-appletsrc b/.config/plasma-org.kde.plasma.desktop-appletsrc
new file mode 100644
index 0000000..8b41c3e
--- /dev/null
+++ b/.config/plasma-org.kde.plasma.desktop-appletsrc
@@ -0,0 +1,753 @@
+[ActionPlugins][0]
+MiddleButton;NoModifier=org.kde.paste
+RightButton;NoModifier=org.kde.contextmenu
+
+[ActionPlugins][1]
+RightButton;NoModifier=org.kde.contextmenu
+
+[Containments][287]
+ItemGeometries-1024x768=
+ItemGeometries-2560x1440=
+ItemGeometriesHorizontal=
+activityId=af3b6c4e-6eaf-4bea-857d-4860feb3cd94
+formfactor=0
+immutability=1
+lastScreen=0
+location=0
+plugin=org.kde.plasma.folder
+wallpaperplugin=org.kde.image
+
+[Containments][287][General]
+positions={"1024x768":[],"2560x1440":[]}
+
+[Containments][287][Wallpaper][org.kde.image][General]
+Image=/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/Free-HD-Gif-Wallpapers.gif
+SlidePaths=/home/templis/.local/share/wallpapers/,/usr/share/wallpapers/
+
+[Containments][288]
+ItemGeometries-1440x2560=
+ItemGeometries-2560x1440=
+ItemGeometriesHorizontal=
+ItemGeometriesVertical=
+activityId=af3b6c4e-6eaf-4bea-857d-4860feb3cd94
+formfactor=0
+immutability=1
+lastScreen=1
+location=0
+plugin=org.kde.plasma.folder
+wallpaperplugin=org.kde.image
+
+[Containments][288][General]
+ToolBoxButtonState=topcenter
+ToolBoxButtonX=324
+positions={"1440x2560":[]}
+
+[Containments][288][Wallpaper][org.kde.image][General]
+Image=/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/Free-HD-Gif-Wallpapers.gif
+SlidePaths=/home/templis/.local/share/wallpapers/,/usr/share/wallpapers/
+
+[Containments][289]
+ItemGeometries-1440x2560=
+ItemGeometries-2560x1440=
+ItemGeometriesHorizontal=
+ItemGeometriesVertical=
+activityId=af3b6c4e-6eaf-4bea-857d-4860feb3cd94
+formfactor=0
+immutability=1
+lastScreen=2
+location=0
+plugin=org.kde.plasma.folder
+wallpaperplugin=org.kde.image
+
+[Containments][289][General]
+ToolBoxButtonState=topcenter
+ToolBoxButtonX=529
+positions={"2560x1440":[]}
+
+[Containments][289][Wallpaper][org.kde.image][General]
+Image=/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/Free-HD-Gif-Wallpapers.gif
+SlidePaths=/home/templis/.local/share/wallpapers/,/usr/share/wallpapers/
+
+[Containments][290]
+ItemGeometries-1920x1080=
+ItemGeometriesHorizontal=
+activityId=af3b6c4e-6eaf-4bea-857d-4860feb3cd94
+formfactor=0
+immutability=1
+lastScreen=3
+location=0
+plugin=org.kde.plasma.folder
+wallpaperplugin=org.kde.image
+
+[Containments][290][General]
+ToolBoxButtonState=topcenter
+ToolBoxButtonX=209
+positions={"1920x1080":[]}
+
+[Containments][290][Wallpaper][org.kde.image][General]
+Image=/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/Free-HD-Gif-Wallpapers.gif
+SlidePaths=/home/templis/.local/share/wallpapers/,/usr/share/wallpapers/
+
+[Containments][291]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=0
+location=4
+plugin=org.kde.panel
+wallpaperplugin=org.kde.image
+
+[Containments][291][Applets][292]
+immutability=1
+plugin=org.kde.plasma.kickoff
+
+[Containments][291][Applets][292][Configuration]
+popupHeight=516
+popupWidth=691
+
+[Containments][291][Applets][292][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][291][Applets][292][Configuration][General]
+favoritesPortedToKAstats=true
+icon=distributor-logo-archlinux
+systemFavorites=suspend\\,hibernate\\,reboot\\,shutdown
+
+[Containments][291][Applets][293]
+immutability=1
+plugin=org.kde.plasma.pager
+
+[Containments][291][Applets][294]
+immutability=1
+plugin=org.kde.plasma.icontasks
+
+[Containments][291][Applets][294][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][291][Applets][294][Configuration][General]
+launchers=applications:systemsettings.desktop,preferred://filemanager
+showOnlyCurrentActivity=false
+showOnlyCurrentDesktop=false
+showOnlyCurrentScreen=true
+wheelSkipMinimized=false
+
+[Containments][291][Applets][296]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=0
+location=4
+plugin=org.kde.plasma.systemtray
+popupHeight=438
+popupWidth=438
+wallpaperplugin=org.kde.image
+
+[Containments][291][Applets][296][Applets][358]
+immutability=1
+plugin=org.kde.plasma.clipboard
+
+[Containments][291][Applets][296][Applets][359]
+immutability=1
+plugin=org.kde.plasma.devicenotifier
+
+[Containments][291][Applets][296][Applets][360]
+immutability=1
+plugin=org.kde.plasma.manage-inputmethod
+
+[Containments][291][Applets][296][Applets][361]
+immutability=1
+plugin=org.kde.plasma.notifications
+
+[Containments][291][Applets][296][Applets][362]
+immutability=1
+plugin=org.kde.plasma.keyboardindicator
+
+[Containments][291][Applets][296][Applets][363]
+immutability=1
+plugin=org.kde.plasma.weather
+
+[Containments][291][Applets][296][Applets][364]
+immutability=1
+plugin=org.kde.plasma.keyboardlayout
+
+[Containments][291][Applets][296][Applets][365]
+immutability=1
+plugin=org.kde.plasma.volume
+
+[Containments][291][Applets][296][Applets][365][Configuration][General]
+migrated=true
+
+[Containments][291][Applets][296][Applets][366]
+immutability=1
+plugin=org.kde.plasma.vault
+
+[Containments][291][Applets][296][Applets][367]
+immutability=1
+plugin=org.kde.plasma.cameraindicator
+
+[Containments][291][Applets][296][Applets][368]
+immutability=1
+plugin=org.kde.plasma.printmanager
+
+[Containments][291][Applets][296][Applets][369]
+immutability=1
+plugin=org.kde.kdeconnect
+
+[Containments][291][Applets][296][Applets][370]
+immutability=1
+plugin=org.kde.kscreen
+
+[Containments][291][Applets][296][Applets][371]
+immutability=1
+plugin=org.kde.plasma.battery
+
+[Containments][291][Applets][296][Applets][372]
+immutability=1
+plugin=org.kde.plasma.brightness
+
+[Containments][291][Applets][296][Applets][374]
+immutability=1
+plugin=org.kde.plasma.mediacontroller
+
+[Containments][291][Applets][296][Applets][446]
+immutability=1
+plugin=org.kde.plasma.bluetooth
+
+[Containments][291][Applets][296][Applets][447]
+immutability=1
+plugin=org.kde.plasma.networkmanagement
+
+[Containments][291][Applets][296][Applets][447][Configuration][General]
+currentDetailsTab=details
+
+[Containments][291][Applets][296][ConfigDialog]
+DialogHeight=630
+DialogWidth=810
+
+[Containments][291][Applets][296][General]
+extraItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+knownItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+
+[Containments][291][Applets][307]
+immutability=1
+plugin=org.kde.plasma.digitalclock
+
+[Containments][291][Applets][307][Configuration]
+popupHeight=456
+popupWidth=810
+
+[Containments][291][Applets][307][Configuration][Appearance]
+enabledCalendarPlugins=holidaysevents
+firstDayOfWeek=1
+fontWeight=400
+showWeekNumbers=true
+
+[Containments][291][Applets][307][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][291][Applets][464]
+immutability=1
+plugin=org.kde.plasma.windowlist
+
+[Containments][291][Applets][464][Configuration]
+popupHeight=400
+popupWidth=560
+
+[Containments][291][Applets][465]
+immutability=1
+plugin=org.kde.plasma.windowlist
+
+[Containments][291][Applets][465][Configuration]
+popupHeight=400
+popupWidth=560
+
+[Containments][291][General]
+AppletOrder=292;293;294;465;296;307;464
+
+[Containments][375]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=2
+location=4
+plugin=org.kde.panel
+wallpaperplugin=org.kde.image
+
+[Containments][375][Applets][376]
+immutability=1
+plugin=org.kde.plasma.kickoff
+
+[Containments][375][Applets][376][Configuration]
+popupHeight=510
+popupWidth=677
+
+[Containments][375][Applets][376][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][375][Applets][376][Configuration][General]
+favoritesPortedToKAstats=true
+icon=start-here-archlinux
+systemFavorites=suspend\\,hibernate\\,reboot\\,shutdown
+
+[Containments][375][Applets][376][Configuration][Shortcuts]
+global=Alt+F1
+
+[Containments][375][Applets][377]
+immutability=1
+plugin=org.kde.plasma.pager
+
+[Containments][375][Applets][379]
+immutability=1
+plugin=org.kde.plasma.marginsseparator
+
+[Containments][375][Applets][379][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][375][Applets][380]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=2
+location=4
+plugin=org.kde.plasma.systemtray
+popupHeight=432
+popupWidth=432
+wallpaperplugin=org.kde.image
+
+[Containments][375][Applets][380][Applets][382]
+immutability=1
+plugin=org.kde.plasma.clipboard
+
+[Containments][375][Applets][380][Applets][383]
+immutability=1
+plugin=org.kde.plasma.devicenotifier
+
+[Containments][375][Applets][380][Applets][384]
+immutability=1
+plugin=org.kde.plasma.manage-inputmethod
+
+[Containments][375][Applets][380][Applets][385]
+immutability=1
+plugin=org.kde.plasma.notifications
+
+[Containments][375][Applets][380][Applets][386]
+immutability=1
+plugin=org.kde.plasma.keyboardindicator
+
+[Containments][375][Applets][380][Applets][387]
+immutability=1
+plugin=org.kde.plasma.weather
+
+[Containments][375][Applets][380][Applets][388]
+immutability=1
+plugin=org.kde.plasma.keyboardlayout
+
+[Containments][375][Applets][380][Applets][389]
+immutability=1
+plugin=org.kde.plasma.volume
+
+[Containments][375][Applets][380][Applets][389][Configuration][General]
+migrated=true
+
+[Containments][375][Applets][380][Applets][390]
+immutability=1
+plugin=org.kde.plasma.vault
+
+[Containments][375][Applets][380][Applets][391]
+immutability=1
+plugin=org.kde.plasma.cameraindicator
+
+[Containments][375][Applets][380][Applets][392]
+immutability=1
+plugin=org.kde.plasma.printmanager
+
+[Containments][375][Applets][380][Applets][395]
+immutability=1
+plugin=org.kde.kdeconnect
+
+[Containments][375][Applets][380][Applets][396]
+immutability=1
+plugin=org.kde.kscreen
+
+[Containments][375][Applets][380][Applets][397]
+immutability=1
+plugin=org.kde.plasma.mediacontroller
+
+[Containments][375][Applets][380][Applets][398]
+immutability=1
+plugin=org.kde.plasma.bluetooth
+
+[Containments][375][Applets][380][Applets][399]
+immutability=1
+plugin=org.kde.plasma.networkmanagement
+
+[Containments][375][Applets][380][Applets][451]
+immutability=1
+plugin=org.kde.plasma.battery
+
+[Containments][375][Applets][380][Applets][452]
+immutability=1
+plugin=org.kde.plasma.brightness
+
+[Containments][375][Applets][380][General]
+extraItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+knownItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+
+[Containments][375][Applets][393]
+immutability=1
+plugin=org.kde.plasma.digitalclock
+
+[Containments][375][Applets][393][Configuration]
+popupHeight=451
+popupWidth=560
+
+[Containments][375][Applets][394]
+immutability=1
+plugin=org.kde.plasma.showdesktop
+
+[Containments][375][Applets][394][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][375][Applets][458]
+immutability=1
+plugin=org.kde.plasma.icontasks
+
+[Containments][375][Applets][458][Configuration]
+popupHeight=400
+popupWidth=560
+
+[Containments][375][Applets][458][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][375][Applets][458][Configuration][General]
+interactiveMute=false
+launchers=preferred://filemanager,preferred://browser
+showOnlyCurrentScreen=true
+wheelEnabled=TaskOnly
+
+[Containments][375][General]
+AppletOrder=376;458;377;379;380;393;394
+
+[Containments][400]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=1
+location=4
+plugin=org.kde.panel
+wallpaperplugin=org.kde.image
+
+[Containments][400][Applets][401]
+immutability=1
+plugin=org.kde.plasma.kickoff
+
+[Containments][400][Applets][401][Configuration]
+popupHeight=510
+popupWidth=677
+
+[Containments][400][Applets][401][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][400][Applets][401][Configuration][General]
+favoritesPortedToKAstats=true
+icon=distributor-logo-archlinux
+systemFavorites=suspend\\,hibernate\\,reboot\\,shutdown
+
+[Containments][400][Applets][401][Configuration][Shortcuts]
+global=Alt+F1
+
+[Containments][400][Applets][402]
+immutability=1
+plugin=org.kde.plasma.pager
+
+[Containments][400][Applets][403]
+immutability=1
+plugin=org.kde.plasma.icontasks
+
+[Containments][400][Applets][403][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][400][Applets][403][Configuration][General]
+interactiveMute=false
+launchers=preferred://filemanager
+showOnlyCurrentActivity=false
+showOnlyCurrentDesktop=false
+showOnlyCurrentScreen=true
+
+[Containments][400][Applets][404]
+immutability=1
+plugin=org.kde.plasma.marginsseparator
+
+[Containments][400][Applets][405]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=1
+location=4
+plugin=org.kde.plasma.systemtray
+popupHeight=432
+popupWidth=432
+wallpaperplugin=org.kde.image
+
+[Containments][400][Applets][405][Applets][407]
+immutability=1
+plugin=org.kde.plasma.clipboard
+
+[Containments][400][Applets][405][Applets][408]
+immutability=1
+plugin=org.kde.plasma.devicenotifier
+
+[Containments][400][Applets][405][Applets][409]
+immutability=1
+plugin=org.kde.plasma.manage-inputmethod
+
+[Containments][400][Applets][405][Applets][410]
+immutability=1
+plugin=org.kde.plasma.notifications
+
+[Containments][400][Applets][405][Applets][411]
+immutability=1
+plugin=org.kde.plasma.keyboardindicator
+
+[Containments][400][Applets][405][Applets][412]
+immutability=1
+plugin=org.kde.plasma.weather
+
+[Containments][400][Applets][405][Applets][413]
+immutability=1
+plugin=org.kde.plasma.keyboardlayout
+
+[Containments][400][Applets][405][Applets][414]
+immutability=1
+plugin=org.kde.plasma.volume
+
+[Containments][400][Applets][405][Applets][414][Configuration][General]
+migrated=true
+
+[Containments][400][Applets][405][Applets][415]
+immutability=1
+plugin=org.kde.plasma.vault
+
+[Containments][400][Applets][405][Applets][416]
+immutability=1
+plugin=org.kde.plasma.cameraindicator
+
+[Containments][400][Applets][405][Applets][417]
+immutability=1
+plugin=org.kde.plasma.printmanager
+
+[Containments][400][Applets][405][Applets][420]
+immutability=1
+plugin=org.kde.kdeconnect
+
+[Containments][400][Applets][405][Applets][421]
+immutability=1
+plugin=org.kde.kscreen
+
+[Containments][400][Applets][405][Applets][422]
+immutability=1
+plugin=org.kde.plasma.mediacontroller
+
+[Containments][400][Applets][405][Applets][423]
+immutability=1
+plugin=org.kde.plasma.bluetooth
+
+[Containments][400][Applets][405][Applets][424]
+immutability=1
+plugin=org.kde.plasma.networkmanagement
+
+[Containments][400][Applets][405][Applets][450]
+immutability=1
+plugin=org.kde.plasma.battery
+
+[Containments][400][Applets][405][Applets][451]
+immutability=1
+plugin=org.kde.plasma.brightness
+
+[Containments][400][Applets][405][General]
+extraItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+knownItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+
+[Containments][400][Applets][418]
+immutability=1
+plugin=org.kde.plasma.digitalclock
+
+[Containments][400][Applets][418][Configuration]
+popupHeight=451
+popupWidth=560
+
+[Containments][400][Applets][419]
+immutability=1
+plugin=org.kde.plasma.showdesktop
+
+[Containments][400][General]
+AppletOrder=401;402;403;404;405;418;419
+
+[Containments][425]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=3
+location=4
+plugin=org.kde.panel
+wallpaperplugin=org.kde.image
+
+[Containments][425][Applets][426]
+immutability=1
+plugin=org.kde.plasma.kickoff
+
+[Containments][425][Applets][426][Configuration]
+popupHeight=510
+popupWidth=677
+
+[Containments][425][Applets][426][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][425][Applets][426][Configuration][General]
+favoritesPortedToKAstats=true
+icon=distributor-logo-archlinux
+systemFavorites=suspend\\,hibernate\\,reboot\\,shutdown
+
+[Containments][425][Applets][426][Configuration][Shortcuts]
+global=Alt+F1
+
+[Containments][425][Applets][427]
+immutability=1
+plugin=org.kde.plasma.pager
+
+[Containments][425][Applets][428]
+immutability=1
+plugin=org.kde.plasma.icontasks
+
+[Containments][425][Applets][428][Configuration][ConfigDialog]
+DialogHeight=540
+DialogWidth=720
+
+[Containments][425][Applets][428][Configuration][General]
+launchers=
+showOnlyCurrentActivity=false
+showOnlyCurrentDesktop=false
+showOnlyCurrentScreen=true
+
+[Containments][425][Applets][429]
+immutability=1
+plugin=org.kde.plasma.marginsseparator
+
+[Containments][425][Applets][430]
+activityId=
+formfactor=2
+immutability=1
+lastScreen=3
+location=4
+plugin=org.kde.plasma.systemtray
+popupHeight=432
+popupWidth=432
+wallpaperplugin=org.kde.image
+
+[Containments][425][Applets][430][Applets][432]
+immutability=1
+plugin=org.kde.plasma.clipboard
+
+[Containments][425][Applets][430][Applets][433]
+immutability=1
+plugin=org.kde.plasma.devicenotifier
+
+[Containments][425][Applets][430][Applets][434]
+immutability=1
+plugin=org.kde.plasma.manage-inputmethod
+
+[Containments][425][Applets][430][Applets][435]
+immutability=1
+plugin=org.kde.plasma.notifications
+
+[Containments][425][Applets][430][Applets][436]
+immutability=1
+plugin=org.kde.plasma.keyboardindicator
+
+[Containments][425][Applets][430][Applets][437]
+immutability=1
+plugin=org.kde.plasma.weather
+
+[Containments][425][Applets][430][Applets][438]
+immutability=1
+plugin=org.kde.plasma.keyboardlayout
+
+[Containments][425][Applets][430][Applets][439]
+immutability=1
+plugin=org.kde.plasma.volume
+
+[Containments][425][Applets][430][Applets][439][Configuration][General]
+migrated=true
+
+[Containments][425][Applets][430][Applets][440]
+immutability=1
+plugin=org.kde.plasma.vault
+
+[Containments][425][Applets][430][Applets][441]
+immutability=1
+plugin=org.kde.plasma.cameraindicator
+
+[Containments][425][Applets][430][Applets][442]
+immutability=1
+plugin=org.kde.plasma.printmanager
+
+[Containments][425][Applets][430][Applets][443]
+immutability=1
+plugin=org.kde.kdeconnect
+
+[Containments][425][Applets][430][Applets][444]
+immutability=1
+plugin=org.kde.kscreen
+
+[Containments][425][Applets][430][Applets][445]
+immutability=1
+plugin=org.kde.plasma.battery
+
+[Containments][425][Applets][430][Applets][446]
+immutability=1
+plugin=org.kde.plasma.brightness
+
+[Containments][425][Applets][430][Applets][447]
+immutability=1
+plugin=org.kde.plasma.mediacontroller
+
+[Containments][425][Applets][430][Applets][448]
+immutability=1
+plugin=org.kde.plasma.bluetooth
+
+[Containments][425][Applets][430][Applets][449]
+immutability=1
+plugin=org.kde.plasma.networkmanagement
+
+[Containments][425][Applets][430][General]
+extraItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+knownItems=org.kde.plasma.bluetooth,org.kde.plasma.battery,org.kde.plasma.clipboard,org.kde.plasma.devicenotifier,org.kde.plasma.manage-inputmethod,org.kde.plasma.mediacontroller,org.kde.plasma.notifications,org.kde.plasma.keyboardindicator,org.kde.kscreen,org.kde.plasma.keyboardlayout,org.kde.plasma.networkmanagement,org.kde.plasma.volume,org.kde.plasma.vault,org.kde.plasma.brightness,org.kde.plasma.cameraindicator,org.kde.plasma.printmanager,org.kde.kdeconnect,org.kde.plasma.weather
+
+[Containments][425][Applets][443]
+immutability=1
+plugin=org.kde.plasma.digitalclock
+
+[Containments][425][Applets][443][Configuration]
+popupHeight=451
+popupWidth=560
+
+[Containments][425][Applets][444]
+immutability=1
+plugin=org.kde.plasma.showdesktop
+
+[Containments][425][General]
+AppletOrder=426;427;428;429;430;443;444
+
+[ScreenMapping]
+itemsOnDisabledScreens=
+screenMapping=desktop:/The Beginner's Guide.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Steam Linux Runtime 3.0 (sniper).desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Torchlight Infinite.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Vampire Survivors.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Steam Linux Runtime 1.0 (scout).desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/steam.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Proton Hotfix.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Last Epoch.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Dwarven Realms.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Simon the Sorcerer Origins Demo.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Terraria.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Path of Exile.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/chrome-opaefnjafkemdihlmdiocmmmmdkhgjfg-Default.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/ARK Survival Evolved.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Sid Meier's Civilization VI.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Unnamed Space Idle.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Path of Exile 2.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Steam Linux Runtime 2.0 (soldier).desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/xtelsio CTI Client.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Proton 8.0.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/K21_contentAD.gif,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/A Dance of Fire and Ice.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/Proton BattlEye Runtime.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94,desktop:/SteamVR.desktop,0,af3b6c4e-6eaf-4bea-857d-4860feb3cd94
diff --git a/.config/plasmanotifyrc b/.config/plasmanotifyrc
new file mode 100644
index 0000000..196cc02
--- /dev/null
+++ b/.config/plasmanotifyrc
@@ -0,0 +1,44 @@
+[Applications][@other]
+ShowInHistory=true
+ShowPopupsInDndMode=true
+
+[Applications][com.nextcloud.desktopclient.nextcloud]
+Seen=true
+
+[Applications][discord]
+Seen=true
+
+[Applications][firefox]
+Seen=true
+ShowPopupsInDndMode=true
+
+[Applications][google-chrome]
+Seen=true
+
+[Applications][io.github.seadve.Kooha]
+Seen=true
+
+[Applications][org.mozilla.Thunderbird]
+Seen=true
+
+[Applications][signal]
+ShowPopupsInDndMode=true
+
+[Applications][signal-desktop]
+ShowPopupsInDndMode=true
+
+[Applications][solaar]
+Seen=true
+
+[Applications][teams]
+Seen=true
+
+[DoNotDisturb]
+WhenFullscreen=false
+WhenScreenSharing=false
+WhenScreensMirrored=false
+
+[Notifications]
+LowPriorityHistory=true
+PopupPosition=TopRight
+PopupTimeout=30000
diff --git a/.config/plasmarc b/.config/plasmarc
new file mode 100644
index 0000000..bb8f9b9
--- /dev/null
+++ b/.config/plasmarc
@@ -0,0 +1,2 @@
+[Wallpapers]
+usersWallpapers=/home/templis/.local/share/wallpapers/Abstract 4K No Logo.png,/home/templis/.local/share/wallpapers/Space Plasma 2 4K.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/purplewin_tueit_ipad.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/konachancom94911tagme.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/exmachina.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/soundwaves.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/bluefluid.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/purplefluid.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/smokyneon.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/network.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/purplewin11.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/moon_and_sun.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/snog_full.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/cropped-tüit-Logo-tü-original-Farben-ohne-Rand.svg.png,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/Free-HD-Gif-Wallpapers.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/TDF7f.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/adb892e1036441459a1f8e0b8d165b8a.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/rainpixelart.gif,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/lox.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/fluorescence6.jpg,/mnt/d/cloud.shron.de/Hetzner Storagebox/library/pics/backgrounds/album_pic.php.jpe
diff --git a/.config/plasmashellrc b/.config/plasmashellrc
new file mode 100644
index 0000000..f5dd382
--- /dev/null
+++ b/.config/plasmashellrc
@@ -0,0 +1,34 @@
+[KPropertiesDialog]
+4 screens: Height=529
+4 screens: Width=465
+
+[PlasmaViews][Panel 291]
+floating=1
+shell=org.kde.plasma.desktop
+
+[PlasmaViews][Panel 291][Defaults]
+thickness=44
+
+[PlasmaViews][Panel 375]
+floating=1
+shell=org.kde.plasma.desktop
+
+[PlasmaViews][Panel 375][Defaults]
+thickness=44
+
+[PlasmaViews][Panel 400]
+floating=1
+shell=org.kde.plasma.desktop
+
+[PlasmaViews][Panel 400][Defaults]
+thickness=44
+
+[PlasmaViews][Panel 425]
+floating=1
+shell=org.kde.plasma.desktop
+
+[PlasmaViews][Panel 425][Defaults]
+thickness=44
+
+[Updates]
+performed=/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/containmentactions_middlebutton.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/digitalclock_migrate_font_settings.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/digitalclock_rename_timezonedisplay_key.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/folderview_fix_recursive_screenmapping.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/keyboardlayout_migrateiconsetting.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/keyboardlayout_remove_shortcut.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/klipper_clear_config.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/maintain_existing_desktop_icon_sizes.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/mediaframe_migrate_useBackground_setting.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/move_desktop_layout_config.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/no_middle_click_paste_on_panels.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/systemloadviewer_systemmonitor.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/unlock_widgets.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/digitalclock_migrate_showseconds_setting.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/migrate_font_weights.js,/usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/taskmanager_configUpdate_wheelEnabled.js
diff --git a/.config/powermanagementprofilesrc b/.config/powermanagementprofilesrc
new file mode 100644
index 0000000..99346ab
--- /dev/null
+++ b/.config/powermanagementprofilesrc
@@ -0,0 +1,65 @@
+[AC]
+icon=battery-charging
+
+[AC][DPMSControl]
+idleTime=1800
+lockBeforeTurnOff=0
+
+[AC][DimDisplay]
+idleTime=300000
+
+[AC][HandleButtonEvents]
+lidAction=1
+powerButtonAction=16
+powerDownAction=16
+
+[AC][SuspendSession]
+idleTime=3600000
+suspendThenHibernate=false
+suspendType=1
+
+[Battery]
+icon=battery-060
+
+[Battery][DPMSControl]
+idleTime=300
+lockBeforeTurnOff=0
+
+[Battery][DimDisplay]
+idleTime=120000
+
+[Battery][HandleButtonEvents]
+lidAction=1
+powerButtonAction=16
+powerDownAction=16
+
+[Battery][SuspendSession]
+idleTime=600000
+suspendThenHibernate=false
+suspendType=1
+
+[LowBattery]
+icon=battery-low
+
+[LowBattery][BrightnessControl]
+value=30
+
+[LowBattery][DPMSControl]
+idleTime=120
+lockBeforeTurnOff=0
+
+[LowBattery][DimDisplay]
+idleTime=60000
+
+[LowBattery][HandleButtonEvents]
+lidAction=1
+powerButtonAction=16
+powerDownAction=16
+
+[LowBattery][SuspendSession]
+idleTime=300000
+suspendThenHibernate=false
+suspendType=1
+
+[Migration]
+MigratedProfilesToPlasma6=powerdevilrc
diff --git a/.config/sway/config b/.config/sway/config
index 27f717d..2d9a61f 100644
--- a/.config/sway/config
+++ b/.config/sway/config
@@ -1,369 +1,398 @@
-# This file has been auto-generated by i3-config-wizard(1).
-# It will not be overwritten, so edit it as you like.
-#
-# Should you change your keyboard layout somewhen, delete
-# this file and re-run i3-config-wizard(1).
-#
-
-# Keyboard configuration
- input * xkb_layout "de,us"
-
-#enable tab-to-click
- input "2:7:SynPS/2_Synaptics_TouchPad" {
- tap enabled
- scroll_method two_finger
- }
-
-# set default font
- font -*-cure-medium-*-*-*-11-*-*-*-*-*-*-*
-
-# set modifier keys for more clarity and readability in config
-# mod is on most keyboards the "windows" key
- set $mod Mod4
- set $alt Mod1
-
-# Font for window titles. Will also be used by the bar unless a different font
-# is used in the bar {} block below. ISO 10646 = Unicode
- font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
-# The font above is very space-efficient, that is, it looks good, sharp and
-# clear in small sizes. However, if you need a lot of unicode glyphs or
-# right-to-left text rendering, you should instead use pango for rendering and
-# chose a FreeType font, such as:
-# font pango:DejaVu Sans Mono 10
-
-# Use Mouse+$mod to drag floating windows to their wanted position
- floating_modifier $mod
-
-#set the border of your windows
- bindsym $mod+t border normal
- bindsym $mod+y border 1pixel
- bindsym $mod+u border none
-
-# start a terminal
-# with some examples for other font or other terminal emulators
-# bindsym $mod+Return exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:inconsolata:size=8:antialias=true" -letsp -1 -sh 20
-# bindsym $mod+Return exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:PragmataPro:size=8:antialias=true" -letsp -1 -sh 20
-# bindsym $mod+Return exec terminology
-# bindsym $mod+Return exec tilda
- bindsym $mod+Return exec termite
-
-# kill focused window
- bindsym $mod+Shift+q kill
- bindsym $alt+F4 kill
-# if this don't work, you can even start xkill
- bindsym $mod+Shift+k exec xkill
-
-# enables a feature like on other windowmanagers or windows,
-# to show running "processes" and switch between them
- bindsym $alt+Tab exec rofi -show window
-
-# start dmenu (a program launcher)
-# bindsym $mod+d exec dmenu_run
-# instead
-# set $menu dmenu_path | dmenu | xargs swaymsg exec --
-# set $menu j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'
- set $menu exec wofi --show drun
- bindsym $mod+d exec $menu
-# There also is the (new) i3-dmenu-desktop which only displays applications
-# shipping a .desktop file. It is a wrapper around dmenu, so you need that
-# installed.
-# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
-
-# change focus - the vi way
-# I don't use them, cause i need this keys for other purposes
-# e.g. $mod+h for split horizontal
-# bindsym $mod+h focus left
-# bindsym $mod+j focus down
-# bindsym $mod+k focus up
-# bindsym $mod+l focus right
-
-# alternatively, you can use the cursor keys:
- bindsym $mod+Left focus left
- bindsym $mod+Down focus down
- bindsym $mod+Up focus up
- bindsym $mod+Right focus right
-
-# move focused window - the vi way
-# I don't use them, cause i need this keys for other purposes
-# e.g. $mod+Shift+l for lock my Desktop
-# bindsym $mod+Shift+h move left
-# bindsym $mod+Shift+j move down
-# bindsym $mod+Shift+k move up
-# bindsym $mod+Shift+l move right
-
-# alternatively, you can use the cursor keys:
- bindsym $mod+Shift+Left move left
- bindsym $mod+Shift+Down move down
- bindsym $mod+Shift+Up move up
- bindsym $mod+Shift+Right move right
-
-# split in horizontal orientation
- bindsym $mod+h split h
-
-# split in vertical orientation
- bindsym $mod+v split v
-
-# enter fullscreen mode for the focused container
- bindsym $mod+z fullscreen
-
-# change container layout (stacked, tabbed, toggle split)
- bindsym $mod+s layout stacking
- bindsym $mod+w layout tabbed
- bindsym $mod+e layout toggle split
-
-# toggle tiling / floating
- bindsym $mod+Shift+space floating toggle
-
-# change focus between tiling / floating windows
- bindsym $mod+space focus mode_toggle
-
-# focus the parent container
- bindsym $mod+a focus parent
-
-# focus the child container
-# bindsym $mod+d focus child
-
-# switch to workspace
- bindsym $mod+1 workspace 1: 1: Text
- bindsym $mod+2 workspace 2: 2: Web
- bindsym $mod+3 workspace 3: 3: Office
- bindsym $mod+4 workspace 4: 4: KeePass
- bindsym $mod+5 workspace 5: 5: Mail
- bindsym $mod+6 workspace 6: 6: Chat
- bindsym $mod+7 workspace 7
- bindsym $mod+8 workspace 8
- bindsym $mod+9 workspace 9
- bindsym $mod+0 workspace 10
-
-# move focused container to workspace
- bindsym $mod+Shift+1 move container to workspace 1: 1: Text
- bindsym $mod+Shift+2 move container to workspace 2: 2: Web
- bindsym $mod+Shift+3 move container to workspace 3: 3: Office
- bindsym $mod+Shift+4 move container to workspace 4: 4: KeePass
- bindsym $mod+Shift+5 move container to workspace 5: 5: Mail
- bindsym $mod+Shift+6 move container to workspace 6: 6: Chat
- bindsym $mod+Shift+7 move container to workspace 7
- bindsym $mod+Shift+8 move container to workspace 8
- bindsym $mod+Shift+9 move container to workspace 9
- bindsym $mod+Shift+0 move container to workspace 10
-
-# reload the configuration file
- bindsym $mod+Shift+r reload
-# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
-# bindsym $mod+Shift+r restart
-
-# exit i3 (logs you out of your X session)
-# bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
- bindsym $mod+Shift+e exec swaynagmode -t warning -m "Exit sway? This will end your Wayland session." -b "Exit sway" "swaymsg exit" -b "Reload" "swaymsg reload"
-
-# put task in background
- exec --no-startup-id swayidle -w \
- timeout 300 'light -G > /tmp/brightness && light -S 10' \
- resume 'light -S $(cat /tmp/brightness)' \
- timeout 600 'swaylock -f -c 000000' \
- resume 'light -S $(cat /tmp/brightness)' \
- timeout 900 'swaymsg "output * dpms off"' \
- resume 'swaymsg "output * dpms on" && light -S $(cat /tmp/brightness)' \
- before-sleep 'swaylock -f -c 000000'
-#disable when firefox video is in fullscreen
- for_window [class="firefox"] inhibit_idle fullscreen
- for_window [app_id="firefox"] inhibit_idle fullscreen
-
- bindsym $mod+Shift+l exec swaylock -f -c 000000
-
-# add the ability to reboot shutdown etc.
-#.........
- bindsym $mod+Shift+Delete exec swaynagmode -t default -m "Sysmenu" -b "Exit" "swaymsg exit" -b "Reload" "swaymsg reload" -b "Halt" "exec sudo shutdown -P now" -b "Reboot" "exec sudo shutdown -r now"
-#.........
-
-# for Presentation and monitor output selection
-#.........
- bindsym $mod+Shift+x exec swaynagmode -t default -m "Displaymenu" -b "Laptop only" 'swaymsg "output"' -b "DP mirror" 'swaymsg "output"' -b "DP extend" 'swaymsg "output"' -b "VGA mirror" 'swaymsg "output"' -b "VGA extend" 'swaymsg "output"'
-#.........
-
- bindsym $mod+Prior move workspace to output left
- bindsym $mod+Next move workspace to output right
-
-# resize window (you can also use the mouse for that)
-#.........
- bindsym $mod+r mode "resize"
-
- mode "resize" {
- # These bindings trigger as soon as you enter the resize mode
-
- # Pressing left will shrink the window’s width.
- # Pressing right will grow the window’s width.
- # Pressing up will shrink the window’s height.
- # Pressing down will grow the window’s height.
- bindsym j resize shrink width 10 px or 10 ppt
- bindsym k resize grow height 10 px or 10 ppt
- bindsym l resize shrink height 10 px or 10 ppt
- bindsym odiaeresis resize grow width 10 px or 10 ppt
-
- # same bindings, but for the arrow keys
- bindsym Left resize shrink width 10 px or 10 ppt
- bindsym Down resize grow height 10 px or 10 ppt
- bindsym Up resize shrink height 10 px or 10 ppt
- bindsym Right resize grow width 10 px or 10 ppt
-
- # back to normal: Enter or Escape
- bindsym Return mode "default"
- bindsym Escape mode "default"
- }
-#........
-
-# Start i3bar to display a workspace bar (plus the system information i3status
-# finds out, if available)
- bar {
- swaybar_command waybar
- }
-
-#
-# Scratchpad:
-#
- # Sway has a "scratchpad", which is a bag of holding for windows.
- # You can send windows there and get them back later.
-
- # Move the currently focused window to the scratchpad
- bindsym $mod+Shift+minus move scratchpad
-
- # Show the next scratchpad window or hide the focused scratchpad window.
- # If there are multiple scratchpad windows, this command cycles through them.
- bindsym $mod+minus scratchpad show
-
-
-# snipping/screenshot Tool
- #bindsym --release Print exec scrot -s -e 'mv $f ~/Bilder/Screenshots/screenshot_%Y-%m-%d_%H%M%S.png'
- #bindsym --release Print exec maim -s ~/Bilder/Screenshots/screenshot_$(date +%s).png
- bindsym --release Print exec grim -g "$(slurp)" ~/library/Bilder/Screenshots/screenshot_$(date +%s).png
-
-
-## Media keys
- bindsym XF86AudioRaiseVolume exec pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo +5%
- bindsym XF86AudioLowerVolume exec pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo -5%
- bindsym XF86AudioMute exec pamixer -t
-
-## Adjust Brightness
-# bindsym XF86MonBrightnessDown exec light -U 10
-# bindsym XF86MonBrightnessUp exec light -A 10
-
-# Enable GLX Graphics
-# used especially for Laptop and enable/disable discrete graphics
-# bindsym $mod+g exec /home/templis/dri.sh
-
-# control swaynag with keyboard
-# needs to be swaynadmode installed
- swaynag_command swaynagmode
- set $nag exec swaynagmode
- mode "nag" {
- bindsym {
- Ctrl+d mode "default"
-
- Ctrl+c $nag --exit
- q $nag --exit
- Escape $nag --exit
-
- Return $nag --confirm
-
- Tab $nag --select prev
- Shift+Tab $nag --select next
-
- Left $nag --select next
- Right $nag --select prev
-
- Up $nag --select next
- Down $nag --select prev
- }
-}
-
-# Set floating Windows for special applications
- workspace_layout tabbed
- for_window [window_role="pop-up"] floating enable,move absolute center
- for_window [class="Pinentry"] floating enable
- for_window [class="Eog"] floating enable
- for_window [class="Geary"] floating enable
- for_window [class="Gcr-prompter"] floating enable
- for_window [class="Tipswindow.py"] floating enable
- for_window [class="XVroot"] floating enable
- for_window [class="XVcontrols"] floating enable
- for_window [class="Vlc"] floating enable
- for_window [class="Synergy"] floating enable
- for_window [class="libreoffice-writer"] floating enable
- for_window [class="Shotwell"] floating enable
- for_window [class="UpLauncher"] floating enable
- for_window [title="^Minecraft .*"] floating enable
- for_window [title="Steam - Update News"] kill
- for_window [title="Preferences$"] floating enable
- for_window [class="^Pidgin$" window_role="^conversation$"] resize grow width 0 px or 30 ppt
-
-# Assign special applications to defined workspaces
- assign [class="Chromium"] 2: 2: Web
- assign [class="chrome"] 2: 2: Web
- assign [class="Firefox"] 2: 2: Web
- assign [class="firefox"] 2: 2: Web
- assign [class="libreoffice"] 3: 3: Office
- assign [class="Gimp"] 3: 3: Office
- assign [class="^Minecraft Launcher .*"] 3: 3: Office
- assign [class="Linphone"] 3: 3: Office
- assign [class="keepassxc"] 4: 4: KeePass
- assign [class="KeePassXC"] 4: 4: KeePass
- assign [class="(?i)thunderbird"] 5: 5: Mail
- assign [class="Signal"] 6: 6: Chat
-# include modules etc.
- include ~/.config/sway/conf.d/*
-
-# Start some needet applications
-# Please take care to install/configure it, if you intend to include it!
-
-#fix graphical gltiches
- exec xrdb -load ~/.Xresources
- exec xrdb -merge ~/.Xresources
-
-# start Sound Daemon
- exec pulseaudio --kill
- exec sleep 3 pulseaudio --start
- exec /usr/bin/pasystray
-
-# BROWSERS!!!11!elf!
- exec firefox
- #exec chromium
- #exec google-chrome-stable
-
-# networkmanager gui
- exec nm-applet --indicator
-
-# eye saver
-# Redshift adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night.
- exec redshift-gtk -l 48.52160730:9.05050278
-
-# nextcloud
- exec nextcloud
-
-# start one terminal on workspace 1 for failure management etc.
-# exec --no-startup-id i3-msg 'workspace 1: 1: Text; exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:inconsolata:size=8" -letsp -1 -sh 20'
- exec --no-startup-id i3-msg 'workspace 1: 1: Text; exec termite'
-
-# trayicon to listen to some radio stations
- exec radiotray-ng
-
-# start i3 with a random wallpaper
-# exec feh --randomize --bg-fill ~/Bilder/Wallpaper/*
-# exec feh --randomize --bg-fill ~/library/Bilder/Wallpaper/*
- output "*" bg ~/library/Bilder/Wallpaper/Desktopography_2016_Kevin_May_2560x1440px-1-32g2c1w5jiz6gj086a9tkw.jpg fill
-
-# autodetect and automount USB Sticks and external media
- exec udisksvm >/dev/null &
-
-# needet for my Razer Chomatic Keyboard
-# exec razercommander -q
-# exec_always –no-startup-id flashfocus
-
-# Start Signal
- exec signal-desktop-beta
-
-# Start keepassxc
- exec keepassxc
- exec ~/.scripts/start_keyring.sh
-
-#start polybar
-# exec_always --no-startup-id ~/polybar.sh
+ # This file has been auto-generated by i3-config-wizard(1).
+ # It will not be overwritten, so edit it as you like.
+ #
+ # Should you change your keyboard layout somewhen, delete
+ # this file and re-run i3-config-wizard(1).
+ #
+
+ #set my Monitor configuration
+ output HDMI-A-1 mode 1920x1080@50.000Hz position 0,0
+ output DP-2 mode 2560x1440@59.951Hz position 301,1080 transform 90
+ output DP-1 mode 2560x1440@59.951Hz position 1741,1732
+ output DP-3 mode 2560x1440@59.951Hz position 4301,1732
+
+ # Keyboard configuration
+ #input * xkb_layout "de,us"
+ input * {
+ xkb_layout "de,us"
+ xkb_options "caps:XF86Launch5"
+ }
+
+ #enable tab-to-click
+ input "2:7:SynPS/2_Synaptics_TouchPad" {
+ tap enabled
+ scroll_method two_finger
+ }
+
+ # set default font
+ # font -*-cure-medium-*-*-*-11-*-*-*-*-*-*-
+
+ # set modifier keys for more clarity and readability in config
+ # mod is on most keyboards the "windows" key
+ set $mod Mod4
+ set $alt Mod1
+
+ # Font for window titles. Will also be used by the bar unless a different font
+ # is used in the bar {} block below. ISO 10646 = Unicode
+
+ # clear in small sizes. However, if you need a lot of unicode glyphs or
+ # right-to-left text rendering, you should instead use pango for rendering and
+ # chose a FreeType font, such as:
+ # font pango:DejaVu Sans Mono 10
+
+ # Use Mouse+$mod to drag floating windows to their wanted position
+ floating_modifier $mod
+
+ #set the border of your windows
+ bindsym $mod+t border normal
+ bindsym $mod+y border 1pixel
+ bindsym $mod+u border none
+
+ # start a terminal
+ # with some examples for other font or other terminal emulators
+ # bindsym $mod+Return exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:inconsolata:size=8:antialias=true" -letsp -1 -sh 20
+ # bindsym $mod+Return exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:PragmataPro:size=8:antialias=true" -letsp -1 -sh 20
+ # bindsym $mod+Return exec terminology
+ # bindsym $mod+Return exec tilda
+ # bindsym $mod+Return exec termite
+ # bindsym $mod+Return exec alacritty
+ # bindsym $mod+Return exec kitty
+ bindsym $mod+Return exec foot
+
+
+ # kill focused window
+ bindsym $mod+Shift+q kill
+ bindsym $alt+F4 kill
+ # if this don't work, you can even start xkill
+ bindsym $mod+Shift+k exec xkill
+
+ # enables a feature like on other windowmanagers or windows,
+ # to show running "processes" and switch between them
+ bindsym $alt+Tab exec rofi -show window
+
+ # start dmenu (a program launcher)
+ # bindsym $mod+d exec dmenu_run
+ # instead
+ # set $menu dmenu_path | dmenu | xargs swaymsg exec --
+ # set $menu j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'
+ set $menu exec wofi --show drun
+ bindsym $mod+d exec $menu
+ # There also is the (new) i3-dmenu-desktop which only displays applications
+ # shipping a .desktop file. It is a wrapper around dmenu, so you need that
+ # installed.
+ # bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
+
+ # Get the focused AppID
+ bindsym $mod+Shift+a exec swaymsg -t get_tree | jq -r '..|try select(.focused == true)'
+
+ # change focus - the vi way
+ # I don't use them, cause i need this keys for other purposes
+ # e.g. $mod+h for split horizontal
+ # bindsym $mod+h focus left
+ # bindsym $mod+j focus down
+ # bindsym $mod+k focus up
+ # bindsym $mod+l focus right
+
+ # alternatively, you can use the cursor keys:
+ bindsym $mod+Left focus left
+ bindsym $mod+Down focus down
+ bindsym $mod+Up focus up
+ bindsym $mod+Right focus right
+
+ # move focused window - the vi way
+ # I don't use them, cause i need this keys for other purposes
+ # e.g. $mod+Shift+l for lock my Desktop
+ # bindsym $mod+Shift+h move left
+ # bindsym $mod+Shift+j move down
+ # bindsym $mod+Shift+k move up
+ # bindsym $mod+Shift+l move right
+
+ # alternatively, you can use the cursor keys:
+ bindsym $mod+Shift+Left move left
+ bindsym $mod+Shift+Down move down
+ bindsym $mod+Shift+Up move up
+ bindsym $mod+Shift+Right move right
+
+ # split in horizontal orientation
+ bindsym $mod+h split h
+
+ # split in vertical orientation
+ bindsym $mod+v split v
+
+ # enter fullscreen mode for the focused container
+ bindsym $mod+z fullscreen
+
+ # change container layout (stacked, tabbed, toggle split)
+ bindsym $mod+s layout stacking
+ bindsym $mod+w layout tabbed
+ bindsym $mod+e layout toggle split
+
+ # toggle tiling / floating
+ bindsym $mod+Shift+space floating toggle
+
+ # change focus between tiling / floating windows
+ bindsym $mod+space focus mode_toggle
+
+ # focus the parent container
+ bindsym $mod+a focus parent
+
+ # focus the child container
+ # bindsym $mod+d focus child
+
+ # switch to workspace
+ bindsym $mod+1 workspace 1: 1: Text
+ bindsym $mod+2 workspace 2: 2: Web
+ bindsym $mod+3 workspace 3: 3: Office
+ bindsym $mod+4 workspace 4: 4: KeePass
+ bindsym $mod+5 workspace 5: 5: Mail
+ bindsym $mod+6 workspace 6: 6: Chat
+ bindsym $mod+7 workspace 7
+ bindsym $mod+8 workspace 8
+ bindsym $mod+9 workspace 9
+ bindsym $mod+0 workspace 10
+
+ # move focused container to workspace
+ bindsym $mod+Shift+1 move container to workspace 1: 1: Text
+ bindsym $mod+Shift+2 move container to workspace 2: 2: Web
+ bindsym $mod+Shift+3 move container to workspace 3: 3: Office
+ bindsym $mod+Shift+4 move container to workspace 4: 4: KeePass
+ bindsym $mod+Shift+5 move container to workspace 5: 5: Mail
+ bindsym $mod+Shift+6 move container to workspace 6: 6: Chat
+ bindsym $mod+Shift+7 move container to workspace 7
+ bindsym $mod+Shift+8 move container to workspace 8
+ bindsym $mod+Shift+9 move container to workspace 9
+ bindsym $mod+Shift+0 move container to workspace 10
+
+ # reload the configuration file
+ bindsym $mod+Shift+r reload
+ # restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+ # bindsym $mod+Shift+r restart
+
+ # exit i3 (logs you out of your X session)
+ # bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
+ bindsym $mod+Shift+e exec swaynagmode -t warning -m "Exit sway? This will end your Wayland session." -b "Exit sway" "swaymsg exit" -b "Reload" "swaymsg reload"
+
+ # put task in background
+ exec --no-startup-id swayidle -w \
+ timeout 300 'light -G > /tmp/brightness && light -S 10' \
+ resume 'light -S $(cat /tmp/brightness)' \
+ timeout 600 'swaylock -f -c 000000' \
+ resume 'light -S $(cat /tmp/brightness)' \
+ timeout 900 'swaymsg "output * dpms off"' \
+ resume 'swaymsg "output * dpms on" && light -S $(cat /tmp/brightness)' \
+ before-sleep 'swaylock -f -c 000000'
+ #disable when firefox video is in fullscreen
+ for_window [class="firefox"] inhibit_idle fullscreen
+ for_window [app_id="firefox"] inhibit_idle fullscreen
+
+ bindsym $mod+Shift+l exec swaylock -f -c 000000
+
+ # add the ability to reboot shutdown etc.
+ #.........
+ bindsym $mod+Shift+Delete exec swaynagmode -t default -m "Sysmenu" -b "Exit" "swaymsg exit" -b "Reload" "swaymsg reload" -b "Halt" "exec sudo shutdown -P now" -b "Reboot" "exec sudo shutdown -r now"
+ #.........
+
+ # for Presentation and monitor output selection
+ #.........
+ bindsym $mod+Shift+x exec swaynagmode -t default -m "Displaymenu" -b "Laptop only" 'swaymsg "output"' -b "DP mirror" 'swaymsg "output"' -b "DP extend" 'swaymsg "output"' -b "VGA mirror" 'swaymsg "output"' -b "VGA extend" 'swaymsg "output"'
+ #.........
+
+ bindsym $mod+Prior move workspace to output left
+ bindsym $mod+Next move workspace to output right
+
+ # resize window (you can also use the mouse for that)
+ #.........
+ bindsym $mod+r mode "resize"
+
+ mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ bindsym j resize shrink width 10 px or 10 ppt
+ bindsym k resize grow height 10 px or 10 ppt
+ bindsym l resize shrink height 10 px or 10 ppt
+ bindsym odiaeresis resize grow width 10 px or 10 ppt
+
+ # same bindings, but for the arrow keys
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ # back to normal: Enter or Escape
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ }
+ #........
+
+ # Start i3bar to display a workspace bar (plus the system information i3status
+ # finds out, if available)
+ bar {
+ swaybar_command waybar
+ }
+
+ #
+ # Scratchpad:
+ #
+ # Sway has a "scratchpad", which is a bag of holding for windows.
+ # You can send windows there and get them back later.
+
+ # Move the currently focused window to the scratchpad
+ bindsym $mod+Shift+minus move scratchpad
+
+ # Show the next scratchpad window or hide the focused scratchpad window.
+ # If there are multiple scratchpad windows, this command cycles through them.
+ bindsym $mod+minus scratchpad show
+
+
+ # snipping/screenshot Tool
+ #bindsym --release Print exec scrot -s -e 'mv $f ~/Bilder/Screenshots/screenshot_%Y-%m-%d_%H%M%S.png'
+ #bindsym --release Print exec maim -s ~/Bilder/Screenshots/screenshot_$(date +%s).png
+ bindsym --release Print exec grim -g "$(slurp)" ~/library/Bilder/Screenshots/screenshot_$(date +%s).png
+
+
+ ## Media keys
+ #bindsym XF86AudioRaiseVolume exec pactl set-sink-volume alsa_output.usb-nubert_nubert_xCore_USB_Audio-00.analog-stereo +5%
+ #bindsym XF86AudioLowerVolume exec pactl set-sink-volume alsa_output.usb-nubert_nubert_xCore_USB_Audio-00.analog-stereo -5%
+ bindsym XF86AudioRaiseVolume exec pamixer -i 5
+ bindsym XF86AudioLowerVolume exec pamixer -d 5
+ bindsym XF86AudioMute exec pamixer -t
+
+ ## Adjust Brightness
+ # bindsym XF86MonBrightnessDown exec light -U 10
+ # bindsym XF86MonBrightnessUp exec light -A 10
+
+ # Enable GLX Graphics
+ # used especially for Laptop and enable/disable discrete graphics
+ # bindsym $mod+g exec /home/templis/dri.sh
+
+ # control swaynag with keyboard
+ # needs to be swaynadmode installed
+ swaynag_command swaynagmode
+ set $nag exec swaynagmode
+ mode "nag" {
+ bindsym {
+ Ctrl+d mode "default"
+
+ Ctrl+c $nag --exit
+ q $nag --exit
+ Escape $nag --exit
+
+ Return $nag --confirm
+
+ Tab $nag --select prev
+ Shift+Tab $nag --select next
+
+ Left $nag --select next
+ Right $nag --select prev
+
+ Up $nag --select next
+ Down $nag --select prev
+ }
+ }
+
+ # Set floating Windows for special applications
+ workspace_layout tabbed
+ for_window [window_role="pop-up"] floating enable,move absolute center
+ for_window [class="Pinentry"] floating enable
+ for_window [class="Eog"] floating enable
+ for_window [class="Geary"] floating enable
+ for_window [class="Gcr-prompter"] floating enable
+ for_window [class="Tipswindow.py"] floating enable
+ for_window [class="XVroot"] floating enable
+ for_window [class="XVcontrols"] floating enable
+ for_window [class="Vlc"] floating enable
+ for_window [class="Synergy"] floating enable
+ for_window [class="libreoffice-writer"] floating enable
+ for_window [class="Shotwell"] floating enable
+ for_window [class="UpLauncher"] floating enable
+ for_window [title="^Minecraft .*"] floating enable
+ for_window [title="Steam - Update News"] kill
+ for_window [title="Preferences$"] floating enable
+ for_window [class="^Pidgin$" window_role="^conversation$"] resize grow width 0 px or 30 ppt
+ #for_window [title="^AnyDesk.*"] floating enable
+ for_window [class="anydesk"] floating enable
+ for_window [app_id="galculator"] floating enable
+ for_window [window_type="dialog"] floating enable
+ for_window [window_role="dialog"] floating enable
+
+
+ # Assign special applications to defined workspaces
+ assign [class="Chromium"] 2: 2: Web
+ assign [class="chrome"] 2: 2: Web
+ assign [class="Firefox"] 2: 2: Web
+ assign [class="firefox"] 2: 2: Web
+ assign [class="libreoffice"] 3: 3: Office
+ assign [class="Gimp"] 3: 3: Office
+ assign [class="^Minecraft Launcher .*"] 3: 3: Office
+ assign [class="Linphone"] 3: 3: Office
+ assign [class="keepassxc"] 4: 4: KeePass
+ assign [class="KeePassXC"] 4: 4: KeePass
+ assign [class="(?i)thunderbird"] 5: 5: Mail
+ assign [class="Signal"] 6: 6: Chat
+ # include modules etc.
+ include ~/.config/sway/conf.d/*
+
+ # Start some needet applications
+ # Please take care to install/configure it, if you intend to include it!
+
+ #fix graphical gltiches
+ exec xrdb -load ~/.Xresources
+ exec xrdb -merge ~/.Xresources
+
+ # start Sound Daemon
+ # exec pulseaudio --kill
+ # exec sleep 3 pulseaudio --start
+ # exec /usr/bin/pasystray
+
+ # BROWSERS!!!11!elf!
+ exec firefox
+ #exec chromium
+ #exec google-chrome-stable
+
+ # networkmanager gui
+ exec nm-applet --indicator
+
+ # eye saver
+ # Redshift adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night.
+ exec redshift-gtk -l 48.52160730:9.05050278
+
+ # nextcloud
+ exec nextcloud
+
+ # start one terminal on workspace 1 for failure management etc.
+ # exec --no-startup-id i3-msg 'workspace 1: 1: Text; exec urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd -ip -fg white -sl 10000 +sb -fn "xft:inconsolata:size=8" -letsp -1 -sh 20'
+ # exec --no-startup-id i3-msg 'workspace 1: 1: Text; exec termite'
+
+ # trayicon to listen to some radio stations
+ exec radiotray-ng
+
+ # start i3 with a random wallpaper
+ # exec feh --randomize --bg-fill ~/Bilder/Wallpaper/*
+ # exec feh --randomize --bg-fill ~/library/Bilder/Wallpaper/*
+ # output "*" bg ~/library/Bilder/Wallpaper/Desktopography_2016_Kevin_May_2560x1440px-1-32g2c1w5jiz6gj086a9tkw.jpg fill
+
+ # autodetect and automount USB Sticks and external media
+ exec udisksvm >/dev/null &
+
+ # needet for my Razer Chomatic Keyboard
+ # exec razercommander -q
+ # exec_always –no-startup-id flashfocus
+
+ # Start Signal
+ exec signal-desktop
+
+ # Start keepassxc
+ exec keepassxc
+ exec ~/.scripts/start_keyring.sh
+
+ # Notification Daemon
+ exec dunst
+ # Notification-History Picker (Inhalt kopieren)
+ bindsym $mod+n exec ~/.config/dunst/notification-picker.sh
+
+ #start polybar
+ # exec_always --no-startup-id ~/polybar.sh
diff --git a/.config/swaynag/config b/.config/swaynag/config
deleted file mode 100644
index c71c6d1..0000000
Binary files a/.config/swaynag/config and /dev/null differ
diff --git a/.config/waybar/config b/.config/waybar/config
deleted file mode 100644
index 599f350..0000000
--- a/.config/waybar/config
+++ /dev/null
@@ -1,149 +0,0 @@
-[{
- "layer": "top",
- "position": "top",
- "height": 30,
-
- "modules-left": ["sway/mode", "temperature"],
- "modules-center": ["clock", "custom/weather"],
- "modules-right": ["network", "cpu"],
-
- "clock": {
- "format": "{:%a %d %b %H:%M}",
- "tooltip": false
- },
- "sway/mode": {
- "format": " {}"
- },
- "network": {
- "format": "{icon}",
- "format-alt": "{ipaddr}/{cidr} {icon}",
- "format-alt-click": "click-right",
- "format-icons": {
- "wifi": ["", "" ,""],
- "ethernet": [""],
- "disconnected": [""]
- },
- "on-click": "termite -e nmtui",
- "tooltip": false
- },
- "temperature": {
- "thermal-zone": 2,
- "hwmon-path": "/sys/class/hwmon/hwmon0/temp1_input",
- "critical-threshold": 80,
- "format-critical": "{temperatureC}°C ",
- "format": "{temperatureC}°C "
- },
- "cpu": {
- "interval": 10,
- "format": "{}% ",
- "max-length": 10,
- "states": {
- "warning": 70,
- "critical": 80
- }
- },
- "custom/weather": {
- "format": "{}",
- "format-alt": "{alt}: {}",
- "format-alt-click": "click-right",
- "interval": 1800,
- "return-type": "json",
- "exec": "~/.config/waybar/modules/weather.sh",
- "exec-if": "ping wttr.in -c1"
- }
-},
-
-{
- "layer": "bottom",
- "position": "bottom",
- "height": 30,
-
- "modules-left": ["sway/workspaces", "sway/mode"],
- "modules-center": ["sway/window"],
- "modules-right": ["custom/spotify", "custom/storage", "backlight", "pulseaudio", "idle_inhibitor", "battery", "tray"],
- "sway/mode": {
- "format": " {}"
- },
- "sway/workspaces": {
- "format": "{name}",
- "disable-scroll": true
- },
- "sway/window": {
- "max-length": 80,
- "tooltip": false
- },
- "battery": {
- "format": "{capacity}% {icon}",
- "format-alt": "{time} {icon}",
- "format-icons": ["", "", "", "", ""],
- "format-charging": "{capacity}% ",
- "interval": 30,
- "states": {
- "warning": 25,
- "critical": 10
- },
- "tooltip": false
- },
- "pulseaudio": {
- "format": "{icon}",
- "format-alt": "{volume} {icon}",
- "format-alt-click": "click-right",
- "format-muted": "",
- "format-icons": {
- "phone": [" ", " ", " ", " "],
- "default": ["", "", "", ""]
- },
- "scroll-step": 10,
- "on-click": "pavucontrol",
- "tooltip": false
- },
- "custom/spotify": {
- "interval": 1,
- "return-type": "json",
- "exec": "~/.config/waybar/modules/spotify.sh",
- "exec-if": "pgrep spotify",
- "escape": true
- },
- "custom/storage": {
- "format": "{} ",
- "format-alt": "{percentage}% ",
- "format-alt-click": "click-right",
- "return-type": "json",
- "interval": 60,
- "exec": "~/.config/waybar/modules/storage.sh"
- },
- "backlight": {
- "format": "{icon}",
- "format-alt": "{percent}% {icon}",
- "format-alt-click": "click-right",
- "format-icons": ["", ""],
- "on-scroll-down": "light -A 1",
- "on-scroll-up": "light -U 1"
- },
- "custom/weather": {
- "format": "{}",
- "format-alt": "{alt}: {}",
- "format-alt-click": "click-right",
- "interval": 1800,
- "return-type": "json",
- "exec": "~/.config/waybar/modules/weather.sh",
- "exec-if": "ping wttr.in -c1"
- },
- "idle_inhibitor": {
- "format": "{icon}",
- "format-icons": {
- "activated": "",
- "deactivated": ""
- },
- "tooltip": false
- },
- "custom/test": {
- "format": "{}",
- "exec": "/tmp/test blub",
- "param": "blah",
- "interval": 5
- },
- "tray": {
- "icon-size": 18
- }
-}]
diff --git a/.config/waybar/modules/mail.py b/.config/waybar/modules/mail.py
deleted file mode 100755
index abc36ec..0000000
--- a/.config/waybar/modules/mail.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/python
-
-import os
-import imaplib
-
-import mailsecrets
-
-def getmails(username, password, server):
- imap = imaplib.IMAP4_SSL(server, 993)
- imap.login(username, password)
- imap.select('INBOX')
- ustatus, uresponse = imap.uid('search', None, 'UNSEEN')
- if ustatus == 'OK':
- unread_msg_nums = uresponse[0].split()
- else:
- unread_msg_nums = []
-
- fstatus, fresponse = imap.uid('search', None, 'FLAGGED')
- if fstatus == 'OK':
- flagged_msg_nums = fresponse[0].split()
- else:
- flagged_msg_nums = []
-
- return [len(unread_msg_nums), len(flagged_msg_nums)]
-
-ping = os.system("ping " + mailsecrets.server + " -c1 > /dev/null 2>&1")
-if ping == 0:
- mails = getmails(mailsecrets.username, mailsecrets.password, mailsecrets.server)
- text = ''
- alt = ''
-
- if mails[0] > 0:
- text = alt = str(mails[0])
- if mails[1] > 0:
- alt = str(mails[1]) + " " + alt
- else:
- exit(1)
-
- print('{"text":"' + text + '", "alt": "' + alt + '"}')
-
-else:
- exit(1)
diff --git a/.config/waybar/modules/spotify.sh b/.config/waybar/modules/spotify.sh
deleted file mode 100755
index c00622b..0000000
--- a/.config/waybar/modules/spotify.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-class=$(playerctl metadata --player=spotify --format '{{lc(status)}}')
-icon=""
-
-if [[ $class == "playing" ]]; then
- info=$(playerctl metadata --player=spotify --format '{{artist}} - {{title}}')
- if [[ ${#info} > 40 ]]; then
- info=$(echo $info | cut -c1-40)"..."
- fi
- text=$info" "$icon
-elif [[ $class == "paused" ]]; then
- text=$icon
-elif [[ $class == "stopped" ]]; then
- text=""
-fi
-
-echo -e "{\"text\":\""$text"\", \"class\":\""$class"\"}"
diff --git a/.config/waybar/modules/storage.sh b/.config/waybar/modules/storage.sh
deleted file mode 100755
index ae2a5ce..0000000
--- a/.config/waybar/modules/storage.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-mount="/"
-warning=20
-critical=10
-
-df -h -P -l "$mount" | awk -v warning=$warning -v critical=$critical '
-/\/.*/ {
- text=$4
- tooltip="Filesystem: "$1"\rSize: "$2"\rUsed: "$3"\rAvail: "$4"\rUse%: "$5"\rMounted on: "$6
- use=$5
- exit 0
-}
-END {
- class=""
- gsub(/%$/,"",use)
- if ((100 - use) < critical) {
- class="critical"
- } else if ((100 - use) < warning) {
- class="warning"
- }
- print "{\"text\":\""text"\", \"percentage\":"use",\"tooltip\":\""tooltip"\", \"class\":\""class"\"}"
-}
-'
diff --git a/.config/waybar/modules/weather.sh b/.config/waybar/modules/weather.sh
deleted file mode 100755
index 9c9bd1c..0000000
--- a/.config/waybar/modules/weather.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash
-
-cachedir=~/.cache/rbn
-cachefile=${0##*/}-$1
-
-if [ ! -d $cachedir ]; then
- mkdir -p $cachedir
-fi
-
-if [ ! -f $cachedir/$cachefile ]; then
- touch $cachedir/$cachefile
-fi
-
-# Save current IFS
-SAVEIFS=$IFS
-# Change IFS to new line.
-IFS=$'\n'
-
-cacheage=$(($(date +%s) - $(stat -c '%Y' "$cachedir/$cachefile")))
-if [ $cacheage -gt 1740 ] || [ ! -s $cachedir/$cachefile ]; then
- data=($(curl -s https://de.wttr.in/tuebingen\?0qnT 2>&1))
- echo ${data[0]} | cut -f1 -d, > $cachedir/$cachefile
- echo ${data[1]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
- echo ${data[2]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
-fi
-
-weather=($(cat $cachedir/$cachefile))
-
-# Restore IFSClear
-IFS=$SAVEIFS
-
-temperature=$(echo ${weather[2]} | sed -E 's/([[:digit:]])+\.\./\1 bis /g')
-
-#echo ${weather[1]##*,}
-
-# https://fontawesome.com/icons?s=solid&c=weather
-case $(echo ${weather[1]##*,} | tr '[:upper:]' '[:lower:]') in
-"clear" | "sunny" | "sonnig" | "wolkenlos" | "klar")
- condition=""
- ;;
-"partly cloudy" | "leicht bewölkt")
- condition=""
- ;;
-"cloudy" | "bewölkt")
- condition=""
- ;;
-"overcast" | "bedeckt")
- condition=""
- ;;
-"mist" | "fog" | "freezing fog" | "nebel" | "gefrierender nebel")
- condition=""
- ;;
-"patchy rain possible" | "patchy light drizzle" | "light drizzle" | "patchy light rain" | "light rain" | "light rain shower" | "rain" | "stellenweise regen möglich" | "stellenweise nieselregen" | "leichter nieselregen" | "stellenweise leichter regen" | "leichter regenfall" | "leichter regen" | "regen")
- condition=""
- ;;
-"moderate rain at times" | "moderate rain" | "heavy rain at times" | "heavy rain" | "moderate or heavy rain shower" | "torrential rain shower" | "rain shower" | "stellenweise gemäßigter regen" | "gemäßigter regen" | "stellenweise starker regen" | "starker regen" | "gemäßigter oder starker regen" | "wolkenbruch")
- condition=""
- ;;
-"patchy snow possible" | "patchy sleet possible" | "patchy freezing drizzle possible" | "freezing drizzle" | "heavy freezing drizzle" | "light freezing rain" | "moderate or heavy freezing rain" | "light sleet" | "ice pellets" | "light sleet showers" | "moderate or heavy sleet showers" | "stellenweise schnee möglich" | "stellenweise schneeregen möglich" | "stellenweise gefrierende nässe möglich" | "gefrierender nieselregen" | "starker gefrierender nieselregen" | "leichter gefrierender regen" | "gemäßigter oder starker gefrierender regen" | "leichter schneeregen" | "eiskörner" | "leichter schneeregen" | "gemäßigter oder starker schneeregen")
- condition=""
- ;;
-"blowing snow" | "moderate or heavy sleet" | "patchy light snow" | "light snow" | "light snow showers" | "schneesturm" | "gemäßigter oder starker schneeregen" | "stellenweise leichter schneefall" | "leichter schneefall")
- condition=""
- ;;
-"blizzard" | "patchy moderate snow" | "moderate snow" | "patchy heavy snow" | "heavy snow" | "moderate or heavy snow with thunder" | "moderate or heavy snow showers" | "stellenweise gemäßigter schneefall" | "gemäßigter schneefall" | "stellenweise starker schneefall" | "starker schneefall" | "gemäßigter oder starker schnefall mit gewitter" | "gemäßigter oder starker schneefall")
- condition=""
- ;;
-"thundery outbreaks possible" | "patchy light rain with thunder" | "moderate or heavy rain with thunder" | "patchy light snow with thunder" | "gewitter möglich" | "stellenweise leichter regen mit gewitter" | "gemäßigter oder starker regen mit gewitter" | "stellenweise leichter schnefall mit gewitter")
- condition=""
- ;;
-*)
- condition=""
- echo -e "{\"text\":\""$condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
- ;;
-esac
-
-#echo $temp $condition
-
-echo -e "{\"text\":\""$temperature $condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
deleted file mode 100644
index 6256134..0000000
--- a/.config/waybar/style.css
+++ /dev/null
@@ -1,71 +0,0 @@
-* {
- border: none;
- border-radius: 0;
- font-family: Sans;
- font-size: 15px;
- box-shadow: none;
- text-shadow: none;
- transition-duration: 0s;
-}
-
-window {
- color: rgba(217, 216, 216, 1);
- background: rgba(35, 31, 32, 0.80);
-}
-
-window#waybar.solo {
- color: rgba(217, 216, 216, 1);
- background: rgba(35, 31, 32, 0.80);
-}
-
-#workspaces {
- margin: 0 5px;
-}
-
-#workspaces button {
- padding: 0 5px;
- color: rgba(217, 216, 216, 0.4);
-}
-
-#workspaces button.visible {
- color: rgba(217, 216, 216, 1);
-}
-
-#workspaces button.focused {
- border-top: 3px solid rgba(217, 216, 216, 1);
- border-bottom: 3px solid rgba(217, 216, 216, 0);
-}
-
-#workspaces button.urgent {
- color: rgba(238, 46, 36, 1);
-}
-
-#mode, #battery, #cpu, #memory, #network, #pulseaudio, #idle_inhibitor, #backlight, #custom-storage, #custom-spotify, #custom-weather, #custom-mail {
- margin: 0px 6px 0px 10px;
- min-width: 25px;
-}
-
-#clock {
- margin: 0px 16px 0px 10px;
- min-width: 140px;
-}
-
-#battery.warning {
- color: rgba(255, 210, 4, 1);
-}
-
-#battery.critical {
- color: rgba(238, 46, 36, 1);
-}
-
-#battery.charging {
- color: rgba(217, 216, 216, 1);
-}
-
-#custom-storage.warning {
- color: rgba(255, 210, 4, 1);
-}
-
-#custom-storage.critical {
- color: rgba(238, 46, 36, 1);
-}
diff --git a/.config/waybar/waybar.sh b/.config/waybar/waybar.sh
deleted file mode 100755
index 720620c..0000000
--- a/.config/waybar/waybar.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env sh
-
-# Terminate already running bar instances
-killall -q waybar
-
-# Wait until the processes have been shut down
-while pgrep -x waybar >/dev/null; do sleep 1; done
-
-# Launch main
-waybar
diff --git a/.config/wofi/config b/.config/wofi/config
deleted file mode 100644
index b9b24f1..0000000
--- a/.config/wofi/config
+++ /dev/null
@@ -1,5 +0,0 @@
-width=600
-height=400
-mode=drun
-colors=colors
-filter_rate=100
diff --git a/.config/wofi/style.css b/.config/wofi/style.css
deleted file mode 100644
index 456954d..0000000
--- a/.config/wofi/style.css
+++ /dev/null
@@ -1,45 +0,0 @@
-* {
- border: none;
- border-radius: 0;
- font-family: Sans;
- font-size: 15px;
- box-shadow: none;
- text-shadow: none;
- transition-duration: 0s;
-}
-
-window {
- margin: 5px;
- border: none;
- color: rgba(217, 216, 216, 1);
- background: rgba(35, 31, 32, 0.80);
-}
-
-#input {
- margin: 5px;
- border: none;
- background-color: #DBC7E4;
-}
-
-#inner-box {
- margin: 5px;
- border: none;
- background-color: rgba(35, 31, 32, 0.80);
-}
-
-#outer-box {
- margin: 5px;
- border: none;
- background-color: #1E122;
- display: none;
-}
-
-#scroll {
- margin: 5px;
- background-color: black;
-}
-
-#text {
- margin: 5px;
- border: 0px solid black;
-}
diff --git a/.gitignore b/.gitignore
index 8d1f485..9cc25fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,11 @@ id_*
.zshrc.pre-dotconfs
.config-backup/
+# KDE Connect keeps the device certificate and its private key here. Pairing
+# state, not configuration - and the one place under .config that actually
+# holds a secret.
+.config/kdeconnect/
+
# Runtime state and caches.
.zsh_history
.zcompdump*
diff --git a/.scripts/volume.sh b/.scripts/volume.sh
deleted file mode 100644
index 80c0827..0000000
--- a/.scripts/volume.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-# You can call this script like this:
-# $./volume.sh up
-# $./volume.sh down
-# $./volume.sh mute
-
-# Original from: https://gist.github.com/sebastiencs/5d7227f388d93374cebdf72e783fbd6a
-
-function get_volume {
- pamixer --get-volume
-}
-
-function is_mute {
- pamixer --get-volume-human | grep muted > /dev/null
-}
-
-function send_notification {
- volume=`get_volume`
- icon_quiet="/usr/share/icons/Adwaita/48x48/status/audio-volume-low-symbolic.symbolic.png"
- icon_loud="/usr/share/icons/Adwaita/48x48/status/audio-volume-high-symbolic.symbolic.png"
- icon_medium="/usr/share/icons/Adwaita/48x48/status/audio-volume-medium-symbolic.symbolic.png"
- icon_muted="/usr/share/icons/Adwaita/48x48/status/audio-volume-muted-symbolic.symbolic.png"
- # Make the bar with the special character ─ (it's not dash -)
- # https://en.wikipedia.org/wiki/Box-drawing_character
- bar=$(seq -s "─" $(($volume / 5)) | sed 's/[0-9]//g')
- # Send the notification
-# if [ "$volume" == "muted" ]; then
- icon="/usr/share/icons/Adwaita/48x48/status/audio-volume-muted-symbolic.symbolic.png"
- #dunstify -i "$icon" -t 2000 --replace 2593 -u normal " $bar"
- dunstify "$volume"" ""$bar" -i "/usr/share/icons/Adwaita/48x48/status/audio-volume-muted-symbolic.symbolic.png" -t 2000 -h int:value:"$volume" -h string:synchronous:"$bar" --replace=555
- #else
- # if [ "$volume" -lt "10" ]; then
- # icon="/usr/share/icons/Adwaita/48x48/status/audio-volume-low-symbolic.symbolic.png"
- # else
- # if [ "$volume" -lt "30" ]; then
- # icon="/usr/share/icons/Adwaita/48x48/status/audio-volume-medium-symbolic.symbolic.png"
- # else
- # if [ "$volume" -lt "70" ]; then
- # icon="/usr/share/icons/Adwaita/48x48/status/audio-volume-high-symbolic.symbolic.png"
- # fi
- # fi
- # fi
- #fi
-
-}
-
-case $1 in
- up)
- # Set the volume on (if it was muted)
- #amixer -D pulse set Master on > /dev/null
- # Up the volume (+ 5%)
- pamixer -i 5
- canberra-gtk-play -i audio-volume-change -d "changeVolume"
- send_notification
- ;;
- down)
- #amixer -D pulse set Master on > /dev/null
- pamixer -d 5
- canberra-gtk-play -i audio-volume-change -d "changeVolume"
- send_notification
- ;;
- mute)
- # Toggle mute
- pamixer -t
- if is_mute ; then
- dunstify -i audio-volume-muted -t 2000 -r 2593 -u normal "Mute"
- else
- canberra-gtk-play -i audio-volume-change -d "changeVolume"
- send_notification
- fi
- ;;
-esac
diff --git a/.vimrc b/.vimrc
index 7b16604..3883be4 100644
--- a/.vimrc
+++ b/.vimrc
@@ -1,11 +1 @@
-set runtimepath+=~/.vim_runtime
-
-source ~/.vim_runtime/vimrcs/basic.vim
-source ~/.vim_runtime/vimrcs/filetypes.vim
-source ~/.vim_runtime/vimrcs/plugins_config.vim
-source ~/.vim_runtime/vimrcs/extended.vim
-
-try
-source ~/.vim_runtime/my_configs.vim
-catch
-endtry
+set mouse=v
diff --git a/.zsh-dircolors.config b/.zsh-dircolors.config
deleted file mode 100644
index 1e40ce7..0000000
--- a/.zsh-dircolors.config
+++ /dev/null
@@ -1 +0,0 @@
-dircolors.ansi-universal
diff --git a/tmux.conf b/tmux.conf
index c1a8fbe..701c08c 100644
--- a/tmux.conf
+++ b/tmux.conf
@@ -1,3 +1,4 @@
+
# #################
# screen-like setup
# #################
@@ -143,7 +144,7 @@ bind S split-window -v
#set -g status-interval 2
#set -g status-right "#(tmux-mem-cpu-load 2) #H"
run-shell "powerline-daemon -q"
-source '/usr/lib/python3.9/site-packages/powerline/bindings/tmux/powerline.conf'
+source '/usr/lib/python3.11/site-packages/powerline/bindings/tmux/powerline.conf'
# disable mouse control by default - change 'off' to 'on' to enable by default.
setw -g mouse off
@@ -169,3 +170,12 @@ bind - \
# make tmux display things in 256 colors
set -g default-terminal "screen-256color"
+
+set -g @plugin 'tmux-plugins/tpm'
+set -g @plugin 'tmux-plugins/tmux-sensible'
+
+set -g @plugin 'egel/tmux-gruvbox'
+set -g @tmux-gruvbox 'dark' # or 'light'
+
+run '~/.tmux/plugins/tpm/tpm'
+
diff --git a/tmux.sh b/tmux.sh
index b905a13..c35c4e7 100755
--- a/tmux.sh
+++ b/tmux.sh
@@ -13,10 +13,10 @@ fi
# create a new session, named $SESSION, and detach from it
$tmux new-session -d -s $SESSION
-$tmux new-window -t $SESSION:1
-$tmux split-window -h -t $SESSION:1 'sudo bpytop'
+$tmux new-window -t $SESSION:1 'sudo lazydocker'
+$tmux split-window -h -t $SESSION:1 'sudo htop'
$tmux split-window -v -t $SESSION:1 'sudo journalctl -f'
-$tmux new-window -t $SESSION:2
+$tmux new-window -t $SESSION:2 'sudo bpytop'
$tmux new-window -t $SESSION:3
$tmux select-window -t $SESSION:1
$tmux attach -t $SESSION