aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dotfiles/.config/niri/config.kdl55
-rw-r--r--dotfiles/.config/niri/noctalia-binds.kdl24
-rw-r--r--dotfiles/.config/niri/noctalia.kdl35
-rw-r--r--dotfiles/.config/noctalia/colors.json18
-rw-r--r--dotfiles/.config/noctalia/colorschemes/ADW/ADW.json94
-rw-r--r--dotfiles/.config/noctalia/colorschemes/Breeze/Breeze.json94
-rw-r--r--dotfiles/.config/noctalia/colorschemes/Osaka jade/Osaka jade.json94
-rw-r--r--dotfiles/.config/noctalia/colorschemes/Peche/Peche.json94
-rw-r--r--dotfiles/.config/noctalia/colorschemes/Vesper/Vesper.json94
-rw-r--r--dotfiles/.config/noctalia/plugins.json16
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/LauncherProvider.qml448
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/Main.qml68
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/README.md25
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/Settings.qml142
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/i18n/en.json55
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/i18n/fr.json55
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/i18n/zh-CN.json55
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/i18n/zh-TW.json55
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/manifest.json31
-rw-r--r--dotfiles/.config/noctalia/plugins/file-search/preview.pngbin0 -> 988330 bytes
-rw-r--r--dotfiles/.config/noctalia/settings.json760
-rw-r--r--dotfiles/.config/noctalia/user-templates.toml17
-rw-r--r--dotfiles/.profile2
23 files changed, 2290 insertions, 41 deletions
diff --git a/dotfiles/.config/niri/config.kdl b/dotfiles/.config/niri/config.kdl
index a2707ab..0142dab 100644
--- a/dotfiles/.config/niri/config.kdl
+++ b/dotfiles/.config/niri/config.kdl
@@ -270,6 +270,12 @@ animations {
slowdown 0.4
}
+blur {
+ passes 3
+ noise 0.1
+ saturation 1.5
+}
+
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
@@ -281,7 +287,6 @@ layer-rule {
}
layer-rule {
- match namespace="notifications"
match namespace="rofi"
shadow { on; }
@@ -332,7 +337,7 @@ window-rule {
window-rule {
match app-id="org.pwmt.zathura"
- default-column-width { fixed 900; }
+ default-column-width { fixed 1100; }
}
window-rule {
@@ -361,28 +366,27 @@ window-rule {
}
spawn-at-startup "pipewire-restart"
-spawn-at-startup "waybar_launch"
spawn-at-startup "playerctld" "daemon"
spawn-at-startup "mpd-restart"
spawn-at-startup "blueman-applet"
-spawn-at-startup "mako"
-spawn-at-startup "setsessionenv"
spawn-at-startup "bash" "-c" "GTK_IM_MODULE= fcitx5 -d"
spawn-at-startup "xwayland-satellite"
spawn-at-startup "setsessionenv"
+spawn-at-startup "qs" "-c" "noctalia-shell"
environment {
DISPLAY ":0"
TERM "alacritty"
+ QT_QPA_PLATFORM "wayland;xcb"
+ QT_QPA_PLATFORMTHEME "gtk3"
+ QT_QPA_PLATFORMTHEME_QT6 "gtk3"
}
-spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "gtk-theme" "Breeze"
+// spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "gtk-theme" "Breeze"
spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "icon-theme" "Arc"
spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "font-name" "monospace 10"
spawn-at-startup "gsettings" "set" "org.gnome.desktop.interface" "color-scheme" "prefer-dark"
-spawn-at-startup "swaybg" "-i" "/home/yaroslav/.config/wall1.png" "-m" "fill"
-
binds {
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
@@ -391,17 +395,10 @@ binds {
// `niri msg action do-something`.
Mod+Return { spawn "alacritty"; }
- Mod+D {
- spawn "rofi" "-show" "drun" "-sidebar-mode" "-modi" "window,drun,run";
- }
- // this isn't dry but whatever
- Menu {
- spawn "rofi" "-show" "drun" "-sidebar-mode" "-modi" "window,drun,run";
- }
+
+ // Noctalia
Mod+S { toggle-overview; }
XF86VoiceCommand { toggle-overview; } // For my remote
- Mod+X { spawn "lock-color"; }
- Mod+Shift+X { spawn "lock-color" "screenon"; }
// Keyboard pointer control
Mod+V { spawn "wl-kbptr" "-o" "modes=floating,click" "-o" "mode_floating.source=detect"; }
@@ -631,34 +628,16 @@ binds {
// rather than stacked on top of each other.
Mod+W { toggle-column-tabbed-display; }
- // Actions to switch layouts.
- // Note: if you uncomment these, make sure you do NOT have
- // a matching layout switch hotkey configured in xkb options above.
- // Having both at once on the same hotkey will break the switching,
- // since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
- // Mod+Space { switch-layout "next"; }
- // Mod+Shift+Space { switch-layout "prev"; }
-
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
- Mod+Print { spawn "swayrecord"; }
-
- // The quit action will show a confirmation dialog to avoid accidental exits.
- Mod+Shift+E { spawn "rofi" "-show" "session" "-matching" "prefix" "-modi" "session:rofisession"; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
- // Mako commands
- Mod+Ctrl+Space { spawn "makoctl" "dismiss"; }
- Mod+Ctrl+Shift+Space { spawn "makoctl" "restore"; }
-
// Menus/Quick actions
Mod+F1 { spawn "menuman"; }
- Mod+F2 { spawn "menumako"; }
- Mod+F3 { spawn "rofi" "-show" "display" "-modi" "display:rofidisplay"; }
Mod+F4 { spawn "menublk"; }
Mod+F10 { spawn "chcolors"; }
Mod+F12 { spawn "rofi" "-show" "tz" "-modi" "tz:rofitz"; }
@@ -682,8 +661,6 @@ binds {
Mod+Ctrl+Shift+apostrophe { spawn "menupass" "-s"; }
}
-switch-events {
- lid-close { spawn "swaysession" "suspend"; }
-}
-
include "local.kdl"
+include "noctalia.kdl"
+include "noctalia-binds.kdl"
diff --git a/dotfiles/.config/niri/noctalia-binds.kdl b/dotfiles/.config/niri/noctalia-binds.kdl
new file mode 100644
index 0000000..ca104cc
--- /dev/null
+++ b/dotfiles/.config/niri/noctalia-binds.kdl
@@ -0,0 +1,24 @@
+binds {
+ Mod+D { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
+ // this isn't dry but whatever
+ Menu { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
+
+ Mod+Ctrl+Shift+Space { spawn-sh "qs -c noctalia-shell ipc call notifications toggleHistory"; }
+ Mod+Ctrl+Space { spawn-sh "qs -c noctalia-shell ipc call notifications invokeDefaultAndDismiss"; }
+
+ Mod+Shift+E { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; }
+ Mod+X { spawn-sh "qs -c noctalia-shell ipc call lockScreen lock"; }
+
+ Mod+F3 { spawn-sh "qs -c noctalia-shell ipc call settings open"; }
+ Mod+Backslash { spawn-sh "qs -c noctalia-shell ipc call controlCenter toggle"; }
+ Mod+Shift+Backslash { spawn-sh "qs -c noctalia-shell ipc call calendar toggle"; }
+}
+
+switch-events {
+ lid-close { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "sessionMenu" "lockAndSuspend"; }
+}
+
+layer-rule {
+ match namespace="^noctalia-overview*"
+ place-within-backdrop true
+}
diff --git a/dotfiles/.config/niri/noctalia.kdl b/dotfiles/.config/niri/noctalia.kdl
new file mode 100644
index 0000000..872e93c
--- /dev/null
+++ b/dotfiles/.config/niri/noctalia.kdl
@@ -0,0 +1,35 @@
+layout {
+
+ focus-ring {
+ active-color "#ffc799"
+ inactive-color "#0c0c0c"
+ urgent-color "#ff8080"
+ }
+
+ border {
+ active-color "#ffc799"
+ inactive-color "#0c0c0c"
+ urgent-color "#ff8080"
+ }
+
+ shadow {
+ color "#00000070"
+ }
+
+ tab-indicator {
+ active-color "#ffc799"
+ inactive-color "#e66800"
+ urgent-color "#ff8080"
+ }
+
+ insert-hint {
+ color "#ffc79980"
+ }
+}
+
+recent-windows {
+ highlight {
+ active-color "#ffc799"
+ urgent-color "#ff8080"
+ }
+}
diff --git a/dotfiles/.config/noctalia/colors.json b/dotfiles/.config/noctalia/colors.json
new file mode 100644
index 0000000..614161b
--- /dev/null
+++ b/dotfiles/.config/noctalia/colors.json
@@ -0,0 +1,18 @@
+{
+ "mError": "#ff8080",
+ "mHover": "#282828",
+ "mOnError": "#000000",
+ "mOnHover": "#ffffff",
+ "mOnPrimary": "#000000",
+ "mOnSecondary": "#000000",
+ "mOnSurface": "#ffffff",
+ "mOnSurfaceVariant": "#a0a0a0",
+ "mOnTertiary": "#000000",
+ "mOutline": "#505050",
+ "mPrimary": "#ffc799",
+ "mSecondary": "#99ffe4",
+ "mShadow": "#000000",
+ "mSurface": "#0c0c0c",
+ "mSurfaceVariant": "#1c1c1c",
+ "mTertiary": "#fbadff"
+}
diff --git a/dotfiles/.config/noctalia/colorschemes/ADW/ADW.json b/dotfiles/.config/noctalia/colorschemes/ADW/ADW.json
new file mode 100644
index 0000000..272cd92
--- /dev/null
+++ b/dotfiles/.config/noctalia/colorschemes/ADW/ADW.json
@@ -0,0 +1,94 @@
+{
+ "dark": {
+ "mPrimary": "#3584e4",
+ "mOnPrimary": "#ffffff",
+ "mSecondary": "#1b467c",
+ "mOnSecondary": "#ffffff",
+ "mTertiary": "#ffffff",
+ "mOnTertiary": "#2e3436",
+ "mError": "#c01c28",
+ "mOnError": "#ffffff",
+ "mSurface": "#242424",
+ "mOnSurface": "#ffffff",
+ "mHover": "#3584e4",
+ "mOnHover": "#ffffff",
+ "mSurfaceVariant": "#1e1e1e",
+ "mOnSurfaceVariant": "#ffffff",
+ "mOutline": "#3d3846",
+ "mShadow": "#000000",
+ "terminal": {
+ "background": "#1e1e1e",
+ "foreground": "#ffffff",
+ "cursor": "#3584e4",
+ "cursorText": "#ffffff",
+ "selectionBg": "#3584e4",
+ "selectionFg": "#ffffff",
+ "normal": {
+ "black": "#241f31",
+ "red": "#c01c28",
+ "green": "#2ec27e",
+ "yellow": "#f5c211",
+ "blue": "#1e78e4",
+ "magenta": "#9841bb",
+ "cyan": "#0ab9dc",
+ "white": "#c0bfbc"
+ },
+ "bright": {
+ "black": "#5e5c64",
+ "red": "#ed333b",
+ "green": "#57e389",
+ "yellow": "#f8e45c",
+ "blue": "#51a1ff",
+ "magenta": "#c061cb",
+ "cyan": "#4fd2fd",
+ "white": "#ffffff"
+ }
+ }
+ },
+ "light": {
+ "mPrimary": "#3584e4",
+ "mOnPrimary": "#ffffff",
+ "mSecondary": "#2e3436",
+ "mOnSecondary": "#ffffff",
+ "mTertiary": "#2ec27e",
+ "mOnTertiary": "#ffffff",
+ "mError": "#e01b24",
+ "mOnError": "#ffffff",
+ "mSurface": "#fafafa",
+ "mOnSurface": "#2e3436",
+ "mHover": "#3584e4",
+ "mOnHover": "#ffffff",
+ "mSurfaceVariant": "#ffffff",
+ "mOnSurfaceVariant": "#2e3436",
+ "mOutline": "#d6d6d6",
+ "mShadow": "#000000",
+ "terminal": {
+ "background": "#ffffff",
+ "foreground": "#2e3436",
+ "cursor": "#3584e4",
+ "cursorText": "#ffffff",
+ "selectionBg": "#3584e4",
+ "selectionFg": "#ffffff",
+ "normal": {
+ "black": "#171421",
+ "red": "#c01c28",
+ "green": "#26a269",
+ "yellow": "#a2734c",
+ "blue": "#12488b",
+ "magenta": "#a347ba",
+ "cyan": "#2aa1b3",
+ "white": "#d0cfcc"
+ },
+ "bright": {
+ "black": "#5e5c64",
+ "red": "#f66151",
+ "green": "#33d17a",
+ "yellow": "#e5a50a",
+ "blue": "#3584e4",
+ "magenta": "#c061cb",
+ "cyan": "#33c7de",
+ "white": "#ffffff"
+ }
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/colorschemes/Breeze/Breeze.json b/dotfiles/.config/noctalia/colorschemes/Breeze/Breeze.json
new file mode 100644
index 0000000..68988b9
--- /dev/null
+++ b/dotfiles/.config/noctalia/colorschemes/Breeze/Breeze.json
@@ -0,0 +1,94 @@
+{
+ "dark": {
+ "mPrimary": "#3daee9",
+ "mOnPrimary": "#141618",
+ "mSecondary": "#1d99f3",
+ "mOnSecondary": "#141618",
+ "mTertiary": "#9b59b6",
+ "mOnTertiary": "#141618",
+ "mError": "#da4453",
+ "mOnError": "#141618",
+ "mSurface": "#202224",
+ "mOnSurface": "#fcfcfc",
+ "mHover": "#3daee9",
+ "mOnHover": "#141618",
+ "mSurfaceVariant": "#292d32",
+ "mOnSurfaceVariant": "#a1a9b1",
+ "mOutline": "#707d8a",
+ "mShadow": "#272c31",
+ "terminal": {
+ "background": "#232627",
+ "foreground": "#fcfcfc",
+ "cursor": "#3daee9",
+ "cursorText": "#232627",
+ "selectionBg": "#3daee9",
+ "selectionFg": "#ffffff",
+ "normal": {
+ "black": "#232627",
+ "red": "#ed1515",
+ "green": "#11d116",
+ "yellow": "#f67400",
+ "blue": "#1d99f3",
+ "magenta": "#9b59b6",
+ "cyan": "#1abc9c",
+ "white": "#fcfcfc"
+ },
+ "bright": {
+ "black": "#7f8c8d",
+ "red": "#c0392b",
+ "green": "#1cdc9a",
+ "yellow": "#fdbc4b",
+ "blue": "#3daee9",
+ "magenta": "#8e44ad",
+ "cyan": "#16a085",
+ "white": "#ffffff"
+ }
+ }
+ },
+ "light": {
+ "mPrimary": "#3daee9",
+ "mOnPrimary": "#ffffff",
+ "mSecondary": "#2980b9",
+ "mOnSecondary": "#ffffff",
+ "mTertiary": "#9b59b6",
+ "mOnTertiary": "#ffffff",
+ "mError": "#da4453",
+ "mOnError": "#ffffff",
+ "mSurface": "#ffffff",
+ "mOnSurface": "#232629",
+ "mHover": "#3daee9",
+ "mOnHover": "#ffffff",
+ "mSurfaceVariant": "#eff0f1",
+ "mOnSurfaceVariant": "#707d8a",
+ "mOutline": "#e3e5e7",
+ "mShadow": "#e3e5e7",
+ "terminal": {
+ "background": "#ebe8e4",
+ "foreground": "#383e3f",
+ "cursor": "#383e3f",
+ "cursorText": "#ebe8e4",
+ "selectionBg": "#383e3f",
+ "selectionFg": "#ebe8e4",
+ "normal": {
+ "black": "#383e3f",
+ "red": "#cd5c60",
+ "green": "#39855f",
+ "yellow": "#b87e3c",
+ "blue": "#2683b5",
+ "magenta": "#845a84",
+ "cyan": "#48a9a9",
+ "white": "#c9c2bd"
+ },
+ "bright": {
+ "black": "#7d8468",
+ "red": "#ef6787",
+ "green": "#3e594e",
+ "yellow": "#d1832e",
+ "blue": "#4f9cb8",
+ "magenta": "#605db3",
+ "cyan": "#008b8b",
+ "white": "#60696b"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/dotfiles/.config/noctalia/colorschemes/Osaka jade/Osaka jade.json b/dotfiles/.config/noctalia/colorschemes/Osaka jade/Osaka jade.json
new file mode 100644
index 0000000..0e450fa
--- /dev/null
+++ b/dotfiles/.config/noctalia/colorschemes/Osaka jade/Osaka jade.json
@@ -0,0 +1,94 @@
+{
+ "dark": {
+ "mPrimary": "#1E9177",
+ "mOnPrimary": "#B8C8C4",
+ "mSecondary": "#167A63",
+ "mOnSecondary": "#B8C8C4",
+ "mTertiary": "#26A589",
+ "mOnTertiary": "#B8C8C4",
+ "mError": "#933636",
+ "mOnError": "#B8C8C4",
+ "mSurface": "#081512",
+ "mOnSurface": "#A6B5B1",
+ "mSurfaceVariant": "#0F251F",
+ "mOnSurfaceVariant": "#99A8A4",
+ "mOutline": "#1B6352",
+ "mShadow": "#040A09",
+ "mHover": "#26A589",
+ "mOnHover": "#B8C8C4",
+ "terminal": {
+ "cursorText": "#141b1e",
+ "cursor": "#dadada",
+ "foreground": "#dadada",
+ "background": "#141b1e",
+ "selectionFg": "#dadada",
+ "selectionBg": "#141b1e",
+ "normal": {
+ "black": "#232a2d",
+ "red": "#e57474",
+ "green": "#8ccf7e",
+ "yellow": "#e5c76b",
+ "blue": "#67b0e8",
+ "magenta": "#c47fd5",
+ "cyan": "#6cbfbf",
+ "white": "#b3b9b8"
+ },
+ "bright": {
+ "black": "#464e50",
+ "red": "#ef7e7e",
+ "green": "#96d988",
+ "yellow": "#f4d67a",
+ "blue": "#71baf2",
+ "magenta": "#ce89df",
+ "cyan": "#67cbe7",
+ "white": "#bdc3c2"
+ }
+ }
+ },
+ "light": {
+ "mPrimary": "#3B7561",
+ "mOnPrimary": "#D8E5DB",
+ "mSecondary": "#526E4A",
+ "mOnSecondary": "#D8E5DB",
+ "mTertiary": "#4A8069",
+ "mOnTertiary": "#D8E5DB",
+ "mError": "#854145",
+ "mOnError": "#D8E5DB",
+ "mSurface": "#AEC2B4",
+ "mOnSurface": "#2C3D35",
+ "mSurfaceVariant": "#95AD9C",
+ "mOnSurfaceVariant": "#263731",
+ "mOutline": "#5C7A6A",
+ "mShadow": "#8A9E90",
+ "mHover": "#4A8069",
+ "mOnHover": "#D8E5DB",
+ "terminal": {
+ "foreground": "#5c6a72",
+ "background": "#efebd4",
+ "selectionFg": "#5c6a72",
+ "selectionBg": "#eaedc8",
+ "cursorText": "#eaedc8",
+ "cursor": "#f57d26",
+ "normal": {
+ "black": "#7a8478",
+ "red": "#e67e80",
+ "green": "#9ab373",
+ "yellow": "#c1a266",
+ "blue": "#7fbbb3",
+ "magenta": "#d699b6",
+ "cyan": "#83c092",
+ "white": "#b2af9f"
+ },
+ "bright": {
+ "black": "#a6b0a0",
+ "red": "#f85552",
+ "green": "#8da101",
+ "yellow": "#dfa000",
+ "blue": "#3a94c5",
+ "magenta": "#df69ba",
+ "cyan": "#35a77c",
+ "white": "#fffbef"
+ }
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/colorschemes/Peche/Peche.json b/dotfiles/.config/noctalia/colorschemes/Peche/Peche.json
new file mode 100644
index 0000000..cfcfba2
--- /dev/null
+++ b/dotfiles/.config/noctalia/colorschemes/Peche/Peche.json
@@ -0,0 +1,94 @@
+{
+ "dark": {
+ "mPrimary": "#9DD2C0",
+ "mOnPrimary": "#0e1214",
+ "mSecondary": "#FADDD2",
+ "mOnSecondary": "#0e1214",
+ "mTertiary": "#E8B8A8",
+ "mOnTertiary": "#0e1214",
+ "mError": "#A7CCE1",
+ "mOnError": "#0e1214",
+ "mSurface": "#0e1214",
+ "mOnSurface": "#ABBCC4",
+ "mSurfaceVariant": "#192024",
+ "mOnSurfaceVariant": "#DBE2E6",
+ "mOutline": "#212B30",
+ "mShadow": "#000000",
+ "mHover": "#E8B8A8",
+ "mOnHover": "#0e1214",
+ "terminal": {
+ "normal": {
+ "black": "#0e1214",
+ "red": "#E8B8A8",
+ "green": "#9DD2C0",
+ "yellow": "#C7E5DB",
+ "blue": "#A7CCE1",
+ "magenta": "#B4E1E4",
+ "cyan": "#FADDD2",
+ "white": "#ABBCC4"
+ },
+ "bright": {
+ "black": "#151c1e",
+ "red": "#E8B8A8",
+ "green": "#9DD2C0",
+ "yellow": "#C7E5DB",
+ "blue": "#A7CCE1",
+ "magenta": "#B4E1E4",
+ "cyan": "#FADDD2",
+ "white": "#DBE2E6"
+ },
+ "foreground": "#ABBCC4",
+ "background": "#0e1214",
+ "selectionFg": "#ABBCC4",
+ "selectionBg": "#212B30",
+ "cursorText": "#0e1214",
+ "cursor": "#ABBCC4"
+ }
+ },
+ "light": {
+ "mPrimary": "#6DB09A",
+ "mOnPrimary": "#E5EDF0",
+ "mSecondary": "#EABCAE",
+ "mOnSecondary": "#E5EDF0",
+ "mTertiary": "#E0A990",
+ "mOnTertiary": "#E5EDF0",
+ "mError": "#7FAFC7",
+ "mOnError": "#E5EDF0",
+ "mSurface": "#E8EFF2",
+ "mOnSurface": "#738A92",
+ "mSurfaceVariant": "#CFD9DE",
+ "mOnSurfaceVariant": "#435860",
+ "mOutline": "#C2CFD6",
+ "mShadow": "#B8C5D0",
+ "mHover": "#D68F6E",
+ "mOnHover": "#E5EDF0",
+ "terminal": {
+ "normal": {
+ "black": "#E8EFF2",
+ "red": "#D68F6E",
+ "green": "#5AA68D",
+ "yellow": "#6DB09A",
+ "blue": "#74A8C2",
+ "magenta": "#E8B8A8",
+ "cyan": "#A7CCE1",
+ "white": "#738A92"
+ },
+ "bright": {
+ "black": "#CFD9DE",
+ "red": "#D68F6E",
+ "green": "#5AA68D",
+ "yellow": "#6DB09A",
+ "blue": "#74A8C2",
+ "magenta": "#E8B8A8",
+ "cyan": "#A7CCE1",
+ "white": "#435860"
+ },
+ "foreground": "#738A92",
+ "background": "#E8EFF2",
+ "selectionFg": "#738A92",
+ "selectionBg": "#C2CFD6",
+ "cursorText": "#E8EFF2",
+ "cursor": "#738A92"
+ }
+ }
+} \ No newline at end of file
diff --git a/dotfiles/.config/noctalia/colorschemes/Vesper/Vesper.json b/dotfiles/.config/noctalia/colorschemes/Vesper/Vesper.json
new file mode 100644
index 0000000..07e9a84
--- /dev/null
+++ b/dotfiles/.config/noctalia/colorschemes/Vesper/Vesper.json
@@ -0,0 +1,94 @@
+{
+ "dark": {
+ "mPrimary": "#FFC799",
+ "mOnPrimary": "#000000",
+ "mSecondary": "#99FFE4",
+ "mOnSecondary": "#000000",
+ "mTertiary": "#FBADFF",
+ "mOnTertiary": "#000000",
+ "mError": "#FF8080",
+ "mOnError": "#000000",
+ "mSurface": "#0C0C0C",
+ "mOnSurface": "#FFFFFF",
+ "mSurfaceVariant": "#1C1C1C",
+ "mOnSurfaceVariant": "#A0A0A0",
+ "mOutline": "#505050",
+ "mShadow": "#000000",
+ "mHover": "#282828",
+ "mOnHover": "#FFFFFF",
+ "terminal": {
+ "foreground": "#FFFFFF",
+ "background": "#0C0C0C",
+ "normal": {
+ "black": "#0C0C0C",
+ "red": "#FF8080",
+ "green": "#99FFE4",
+ "yellow": "#FFC799",
+ "blue": "#80B3FF",
+ "magenta": "#FBADFF",
+ "cyan": "#99FFE4",
+ "white": "#A0A0A0"
+ },
+ "bright": {
+ "black": "#505050",
+ "red": "#FF8080",
+ "green": "#99FFE4",
+ "yellow": "#FFC799",
+ "blue": "#80B3FF",
+ "magenta": "#FBADFF",
+ "cyan": "#99FFE4",
+ "white": "#FFFFFF"
+ },
+ "cursor": "#FFFFFF",
+ "cursorText": "#000000",
+ "selectionFg": "#000000",
+ "selectionBg": "#FFC799"
+ }
+ },
+ "light": {
+ "mPrimary": "#FFB170",
+ "mOnPrimary": "#0C0C0C",
+ "mSecondary": "#00CC99",
+ "mOnSecondary": "#0C0C0C",
+ "mTertiary": "#FBADFF",
+ "mOnTertiary": "#0C0C0C",
+ "mError": "#FF8080",
+ "mOnError": "#0C0C0C",
+ "mSurface": "#F2F2F2",
+ "mOnSurface": "#0C0C0C",
+ "mSurfaceVariant": "#E5E5E5",
+ "mOnSurfaceVariant": "#282828",
+ "mOutline": "#505050",
+ "mShadow": "#D9D9D9",
+ "mHover": "#E0E0E0",
+ "mOnHover": "#0C0C0C",
+ "terminal": {
+ "foreground": "#0C0C0C",
+ "background": "#F2F2F2",
+ "normal": {
+ "black": "#F2F2F2",
+ "red": "#FF8080",
+ "green": "#00CC99",
+ "yellow": "#FFC799",
+ "blue": "#004A77",
+ "magenta": "#FBADFF",
+ "cyan": "#006B57",
+ "white": "#505050"
+ },
+ "bright": {
+ "black": "#A0A0A0",
+ "red": "#FF8080",
+ "green": "#00CC99",
+ "yellow": "#FFC799",
+ "blue": "#80B3FF",
+ "magenta": "#FBADFF",
+ "cyan": "#99FFE4",
+ "white": "#0C0C0C"
+ },
+ "cursor": "#0C0C0C",
+ "cursorText": "#F2F2F2",
+ "selectionFg": "#F2F2F2",
+ "selectionBg": "#FFC799"
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins.json b/dotfiles/.config/noctalia/plugins.json
new file mode 100644
index 0000000..ae7f05a
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins.json
@@ -0,0 +1,16 @@
+{
+ "sources": [
+ {
+ "enabled": true,
+ "name": "Noctalia Plugins",
+ "url": "https://github.com/noctalia-dev/noctalia-plugins"
+ }
+ ],
+ "states": {
+ "file-search": {
+ "enabled": true,
+ "sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
+ }
+ },
+ "version": 2
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/LauncherProvider.qml b/dotfiles/.config/noctalia/plugins/file-search/LauncherProvider.qml
new file mode 100644
index 0000000..3ca5e88
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/LauncherProvider.qml
@@ -0,0 +1,448 @@
+import QtQuick
+import Quickshell
+import Quickshell.Io
+import qs.Commons
+
+Item {
+ id: root
+
+ property var pluginApi: null
+
+ // Provider metadata
+ property string name: pluginApi?.tr("provider.name")
+ property var launcher: null
+ property bool handleSearch: false
+ property string supportedLayouts: "list"
+ property bool supportsAutoPaste: false
+
+ // Search state
+ property var currentResults: []
+ property string currentQuery: ""
+ property bool searching: false
+ property int nextRequestId: 0
+ property int activeRequestId: 0
+ property int fileProcessRequestId: 0
+ property int dirProcessRequestId: 0
+ property int pendingProcessCount: 0
+ property bool currentRequestFailed: false
+ property var pendingResultsByType: ({ "files": [], "dirs": [] })
+ property string fdCommandPath: ""
+ property bool fdAvailable: false
+
+ // Settings shortcuts
+ property var cfg: pluginApi?.pluginSettings || ({})
+ property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
+ property bool showHidden: cfg.showHidden ?? defaults.showHidden ?? false
+ property int maxResults: cfg.maxResults ?? defaults.maxResults ?? 0
+ property string fileOpener: cfg.fileOpener ?? defaults.fileOpener ?? "xdg-open"
+ property string fdCommand: cfg.fdCommand ?? defaults.fdCommand ?? "fd"
+ property string searchDirectory: cfg.searchDirectory ?? defaults.searchDirectory ?? "~"
+
+ Process {
+ id: fileSearchProcess
+ running: false
+
+ stdout: StdioCollector {
+ id: fileStdoutCollector
+ }
+
+ stderr: StdioCollector {
+ id: fileStderrCollector
+ }
+
+ onExited: function(exitCode) {
+ root.handleSearchProcessExit("files", fileProcessRequestId, exitCode, fileStdoutCollector.text, fileStderrCollector.text);
+ }
+ }
+
+ Process {
+ id: dirSearchProcess
+ running: false
+
+ stdout: StdioCollector {
+ id: dirStdoutCollector
+ }
+
+ stderr: StdioCollector {
+ id: dirStderrCollector
+ }
+
+ onExited: function(exitCode) {
+ root.handleSearchProcessExit("dirs", dirProcessRequestId, exitCode, dirStdoutCollector.text, dirStderrCollector.text);
+ }
+ }
+
+ // Debounce timer for search
+ Timer {
+ id: searchDebouncer
+ interval: 300
+ repeat: false
+ onTriggered: root.executeSearch(root.currentQuery)
+ }
+
+ function init() {
+ Logger.i("FileSearch", "Initializing plugin");
+ fdCommandPath = fdCommand;
+ fdAvailable = true;
+ Logger.i("FileSearch", "Using fd command:", fdCommandPath);
+ }
+
+ function handleCommand(searchText) {
+ return searchText.startsWith(">file");
+ }
+
+ function commands() {
+ return [{
+ "name": ">file",
+ "description": pluginApi?.tr("launcher.command.description"),
+ "icon": "file-search",
+ "isTablerIcon": true,
+ "isImage": false,
+ "onActivate": function() {
+ launcher.setSearchText(">file ");
+ }
+ }];
+ }
+
+ function getResults(searchText) {
+ if (!searchText.startsWith(">file")) {
+ return [];
+ }
+
+ if (!fdAvailable) {
+ return [{
+ "name": pluginApi?.tr("launcher.errors.fdNotFound.title"),
+ "description": pluginApi?.tr("launcher.errors.fdNotFound.description"),
+ "icon": "alert-circle",
+ "isTablerIcon": true,
+ "isImage": false,
+ "onActivate": function() {}
+ }];
+ }
+
+ var query = searchText.slice(5).trim();
+
+ if (query === "") {
+ return [{
+ "name": pluginApi?.tr("launcher.prompts.emptyQuery.title"),
+ "description": pluginApi?.tr("launcher.prompts.emptyQuery.description", { "root": displaySearchDirectory() }),
+ "icon": "file-search",
+ "isTablerIcon": true,
+ "isImage": false,
+ "onActivate": function() {}
+ }];
+ }
+
+ if (query !== currentQuery) {
+ currentQuery = query;
+ activeRequestId = 0;
+ currentRequestFailed = false;
+ searching = true;
+ searchDebouncer.restart();
+
+ return [{
+ "name": pluginApi?.tr("launcher.prompts.searching.title"),
+ "description": pluginApi?.tr("launcher.prompts.searching.description", { "query": query }),
+ "icon": "refresh",
+ "isTablerIcon": true,
+ "isImage": false,
+ "onActivate": function() {}
+ }];
+ }
+
+ if (searching) {
+ return [{
+ "name": pluginApi?.tr("launcher.prompts.searching.title"),
+ "description": pluginApi?.tr("launcher.prompts.searching.description", { "query": query }),
+ "icon": "refresh",
+ "isTablerIcon": true,
+ "isImage": false,
+ "onActivate": function() {}
+ }];
+ }
+
+ return currentResults;
+ }
+
+ function executeSearch(query) {
+ if (!fdAvailable || query === "") {
+ return;
+ }
+
+ Logger.d("FileSearch", "Executing search for:", query);
+
+ if (fileSearchProcess.running) {
+ fileSearchProcess.running = false;
+ }
+ if (dirSearchProcess.running) {
+ dirSearchProcess.running = false;
+ }
+
+ var expandedDir = expandHomePath(searchDirectory);
+
+ nextRequestId += 1;
+ var requestId = nextRequestId;
+ activeRequestId = requestId;
+ currentRequestFailed = false;
+ pendingProcessCount = 2;
+ pendingResultsByType = ({ "files": [], "dirs": [] });
+
+ var commonArgs = [];
+
+ if (showHidden) {
+ commonArgs.push("--hidden");
+ }
+
+ if (maxResults > 0) {
+ commonArgs.push("--max-results", maxResults.toString());
+ }
+ commonArgs.push("--base-directory", expandedDir);
+ commonArgs.push("--absolute-path");
+ commonArgs.push("--color", "never");
+ commonArgs.push(query);
+
+ var fileArgs = ["--type", "f"].concat(commonArgs);
+ var dirArgs = ["--type", "d"].concat(commonArgs);
+
+ fileProcessRequestId = requestId;
+ fileSearchProcess.command = [fdCommandPath].concat(fileArgs);
+ fileSearchProcess.running = true;
+
+ dirProcessRequestId = requestId;
+ dirSearchProcess.command = [fdCommandPath].concat(dirArgs);
+ dirSearchProcess.running = true;
+
+ Logger.d("FileSearch", "Running file command:", fdCommandPath, fileArgs.join(" "));
+ Logger.d("FileSearch", "Running dir command:", fdCommandPath, dirArgs.join(" "));
+ }
+
+ function handleSearchProcessExit(kind, requestId, exitCode, stdoutText, stderrText) {
+ if (requestId !== activeRequestId || currentRequestFailed) {
+ return;
+ }
+
+ if (exitCode !== 0) {
+ currentRequestFailed = true;
+ searching = false;
+ pendingProcessCount = 0;
+ Logger.e("FileSearch", "fd command failed with exit code:", exitCode);
+ Logger.e("FileSearch", "stderr:", stderrText);
+ currentResults = [{
+ "name": pluginApi?.tr("launcher.errors.fdNotFound.title"),
+ "description": pluginApi?.tr("launcher.errors.fdNotFound.description"),
+ "icon": "alert-circle",
+ "isTablerIcon": true,
+ "onActivate": function() {}
+ }];
+ if (launcher) {
+ launcher.updateResults();
+ }
+ return;
+ }
+
+ pendingResultsByType[kind] = parseRawPaths(stdoutText);
+ pendingProcessCount -= 1;
+
+ if (pendingProcessCount <= 0) {
+ finalizeSearchResults(requestId);
+ }
+ }
+
+ function finalizeSearchResults(requestId) {
+ if (requestId !== activeRequestId || currentRequestFailed) {
+ return;
+ }
+
+ var results = [];
+
+ for (var i = 0; i < pendingResultsByType.dirs.length; i++) {
+ results.push(formatFileEntry(pendingResultsByType.dirs[i], true));
+ }
+ for (var j = 0; j < pendingResultsByType.files.length; j++) {
+ results.push(formatFileEntry(pendingResultsByType.files[j], false));
+ }
+
+ results = sortResults(results, currentQuery);
+
+ if (maxResults > 0 && results.length > maxResults) {
+ results = results.slice(0, maxResults);
+ }
+
+ if (results.length === 0) {
+ results.push({
+ "name": pluginApi?.tr("launcher.prompts.noResults.title"),
+ "description": pluginApi?.tr("launcher.prompts.noResults.description", { "query": currentQuery }),
+ "icon": "file-off",
+ "isTablerIcon": true,
+ "isImage": false,
+ "onActivate": function() {}
+ });
+ searching = false;
+ currentResults = results;
+ if (launcher) {
+ launcher.updateResults();
+ }
+ return;
+ }
+
+ searching = false;
+ currentResults = results;
+ Logger.d("FileSearch", "Found", results.length, "results");
+ if (launcher) {
+ launcher.updateResults();
+ }
+ }
+
+ function parseRawPaths(output) {
+ var trimmed = output.trim();
+ if (trimmed === "") {
+ return [];
+ }
+ return trimmed.split("\n").filter(function(line) { return line.trim() !== ""; });
+ }
+
+ function expandHomePath(pathValue) {
+ var expandedPath = pathValue;
+ if (expandedPath.startsWith("~")) {
+ expandedPath = Quickshell.env("HOME") + expandedPath.substring(1);
+ }
+ return expandedPath;
+ }
+
+ function displaySearchDirectory() {
+ var expandedPath = expandHomePath(searchDirectory);
+ var homeDir = Quickshell.env("HOME");
+ if (expandedPath.startsWith(homeDir)) {
+ return "~" + expandedPath.slice(homeDir.length);
+ }
+ return expandedPath;
+ }
+
+ function sortResults(results, query) {
+ var queryLower = query.toLowerCase();
+ results.sort(function(a, b) {
+ var rankA = resultRank(a, queryLower);
+ var rankB = resultRank(b, queryLower);
+ if (rankA !== rankB) {
+ return rankA - rankB;
+ }
+
+ var nameA = (a.name || "").toLowerCase();
+ var nameB = (b.name || "").toLowerCase();
+ if (nameA < nameB) {
+ return -1;
+ }
+ if (nameA > nameB) {
+ return 1;
+ }
+ return (a.description || "").length - (b.description || "").length;
+ });
+ return results;
+ }
+
+ function resultRank(result, queryLower) {
+ var name = (result.name || "").toLowerCase();
+ var description = (result.description || "").toLowerCase();
+ var fullPath = description + "/" + name;
+
+ if (name === queryLower) {
+ return 0;
+ }
+ if (name.startsWith(queryLower)) {
+ return 1;
+ }
+ if (name.indexOf(queryLower) !== -1) {
+ return 2;
+ }
+ if (fullPath.indexOf(queryLower) !== -1) {
+ return 3;
+ }
+ return 4;
+ }
+
+ function formatFileEntry(filePath, forcedIsDirectory) {
+ var normalizedPath = filePath;
+ while (normalizedPath.length > 1 && normalizedPath.endsWith("/")) {
+ normalizedPath = normalizedPath.slice(0, -1);
+ }
+
+ var isDirectory = (forcedIsDirectory !== undefined) ? forcedIsDirectory : normalizedPath !== filePath;
+ var parts = normalizedPath.split("/");
+ var filename = parts[parts.length - 1];
+ var parentPath = parts.slice(0, -1).join("/");
+
+ if (filename === "") {
+ filename = normalizedPath;
+ }
+
+ var homeDir = Quickshell.env("HOME");
+ if (parentPath.startsWith(homeDir)) {
+ parentPath = "~" + parentPath.slice(homeDir.length);
+ }
+
+ return {
+ "name": filename,
+ "description": parentPath,
+ "icon": isDirectory ? "folder" : getFileIcon(filename),
+ "isTablerIcon": true,
+ "isImage": false,
+ "singleLine": false,
+ "onActivate": function() {
+ root.openFile(normalizedPath);
+ }
+ };
+ }
+
+ function getFileIcon(filename) {
+ var ext = filename.split(".").pop().toLowerCase();
+
+ // Images
+ if (["jpg", "jpeg", "png", "gif", "svg", "webp", "bmp", "ico"].indexOf(ext) !== -1) {
+ return "photo";
+ }
+
+ // Documents
+ if (["txt", "md", "pdf", "doc", "docx", "odt", "rtf"].indexOf(ext) !== -1) {
+ return "file-text";
+ }
+
+ // Code files
+ if (["js", "ts", "py", "java", "cpp", "c", "h", "qml", "rs", "go", "rb", "php", "html", "css", "json", "xml", "yaml", "yml"].indexOf(ext) !== -1) {
+ return "code";
+ }
+
+ // Archives
+ if (["zip", "tar", "gz", "bz2", "xz", "7z", "rar"].indexOf(ext) !== -1) {
+ return "file-zip";
+ }
+
+ // Audio
+ if (["mp3", "wav", "flac", "ogg", "m4a", "aac", "wma"].indexOf(ext) !== -1) {
+ return "music";
+ }
+
+ // Video
+ if (["mp4", "mkv", "avi", "mov", "wmv", "flv", "webm"].indexOf(ext) !== -1) {
+ return "video";
+ }
+
+ // Spreadsheets
+ if (["xls", "xlsx", "ods", "csv"].indexOf(ext) !== -1) {
+ return "table";
+ }
+
+ // Presentations
+ if (["ppt", "pptx", "odp"].indexOf(ext) !== -1) {
+ return "presentation";
+ }
+
+ // Default
+ return "file";
+ }
+
+ function openFile(filePath) {
+ Logger.i("FileSearch", "Opening file:", filePath);
+ Quickshell.execDetached([fileOpener, filePath]);
+ launcher.close();
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/Main.qml b/dotfiles/.config/noctalia/plugins/file-search/Main.qml
new file mode 100644
index 0000000..087fe1e
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/Main.qml
@@ -0,0 +1,68 @@
+import QtQuick
+import Quickshell.Io
+import qs.Commons
+import qs.Services.UI
+
+Item {
+ property var pluginApi: null
+
+ Component.onCompleted: {
+ if (pluginApi) {
+ Logger.i("FileSearch", "Plugin initialized");
+ }
+ }
+
+ IpcHandler {
+ target: "plugin:file-search"
+
+ // Toggle launcher in file search mode
+ function toggle() {
+ if (!pluginApi) return;
+
+ pluginApi.withCurrentScreen(screen => {
+ var launcherPanel = PanelService.getPanel("launcherPanel", screen);
+ if (!launcherPanel) {
+ Logger.e("FileSearch", "Could not get launcher panel");
+ return;
+ }
+
+ var searchText = launcherPanel.searchText || "";
+ var isInFileMode = searchText.startsWith(">file");
+
+ if (!launcherPanel.isPanelOpen) {
+ // Launcher closed - open with file search
+ Logger.i("FileSearch", "Opening launcher in file search mode");
+ launcherPanel.open();
+ launcherPanel.setSearchText(">file ");
+ } else if (isInFileMode) {
+ // Already in file mode - close launcher
+ Logger.i("FileSearch", "Closing launcher (toggle off)");
+ launcherPanel.close();
+ } else {
+ // Launcher open but different mode - switch to file search
+ Logger.i("FileSearch", "Switching to file search mode");
+ launcherPanel.setSearchText(">file ");
+ }
+ });
+ }
+
+ // Open launcher with file search and specific query
+ function search(query: string) {
+ if (!pluginApi) return;
+
+ pluginApi.withCurrentScreen(screen => {
+ var launcherPanel = PanelService.getPanel("launcherPanel", screen);
+ if (!launcherPanel) {
+ Logger.e("FileSearch", "Could not get launcher panel");
+ return;
+ }
+
+ var searchQuery = query || "";
+ Logger.i("FileSearch", "Opening launcher with search query:", searchQuery);
+
+ launcherPanel.open();
+ launcherPanel.setSearchText(">file " + searchQuery);
+ });
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/README.md b/dotfiles/.config/noctalia/plugins/file-search/README.md
new file mode 100644
index 0000000..1d5ef34
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/README.md
@@ -0,0 +1,25 @@
+# File Search Plugin
+
+File search from the launcher.
+
+## Requirements
+
+This plugin requires [fd](https://github.com/sharkdp/fd#installation) to be installed.
+
+## Usage
+
+**Access from launcher:**
+
+Type `>file` in the Noctalia launcher to activate file search.
+
+**Toggle file search:**
+
+```bash
+noctalia-shell ipc call plugin:file-search toggle
+```
+
+**Search with pre-filled query:**
+
+```bash
+noctalia-shell ipc call plugin:file-search search "eko"
+```
diff --git a/dotfiles/.config/noctalia/plugins/file-search/Settings.qml b/dotfiles/.config/noctalia/plugins/file-search/Settings.qml
new file mode 100644
index 0000000..fc7ed87
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/Settings.qml
@@ -0,0 +1,142 @@
+import QtQuick
+import QtQuick.Layouts
+import qs.Commons
+import qs.Widgets
+
+ColumnLayout {
+ id: root
+
+ property var pluginApi: null
+
+ property var cfg: pluginApi?.pluginSettings || ({})
+ property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
+
+ property bool valueShowHidden: cfg.showHidden ?? defaults.showHidden
+ property int valueMaxResults: cfg.maxResults ?? defaults.maxResults
+ property string valueFileOpener: cfg.fileOpener ?? defaults.fileOpener
+ property string valueFdCommand: cfg.fdCommand ?? defaults.fdCommand
+ property string valueSearchDirectory: cfg.searchDirectory ?? defaults.searchDirectory
+
+ spacing: Style.marginL
+
+ Component.onCompleted: {
+ Logger.d("FileSearch", "Settings UI loaded");
+ }
+
+ ColumnLayout {
+ spacing: Style.marginM
+ Layout.fillWidth: true
+
+ // Show Hidden Files Toggle
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: Style.marginM
+
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: Style.marginS
+
+ NText {
+ text: pluginApi?.tr("settings.showHidden.label")
+ font.pointSize: Style.fontSizeL
+ font.weight: Font.Medium
+ color: Color.mOnSurface
+ Layout.fillWidth: true
+ }
+ }
+
+ NToggle {
+ checked: root.valueShowHidden
+ onToggled: root.valueShowHidden = checked
+ }
+ }
+
+ // File Opener Input
+ NTextInput {
+ Layout.fillWidth: true
+ label: pluginApi?.tr("settings.fileOpener.label")
+ description: pluginApi?.tr("settings.fileOpener.description")
+ placeholderText: pluginApi?.tr("settings.fileOpener.placeholder")
+ text: root.valueFileOpener
+ onTextChanged: root.valueFileOpener = text
+ }
+
+ // Search Directory Input
+ NTextInput {
+ Layout.fillWidth: true
+ label: pluginApi?.tr("settings.searchDirectory.label")
+ description: pluginApi?.tr("settings.searchDirectory.description")
+ placeholderText: pluginApi?.tr("settings.searchDirectory.placeholder")
+ text: root.valueSearchDirectory
+ onTextChanged: root.valueSearchDirectory = text
+ }
+
+ // fd Command Path Input
+ NTextInput {
+ Layout.fillWidth: true
+ label: pluginApi?.tr("settings.fdCommand.label")
+ description: pluginApi?.tr("settings.fdCommand.description")
+ placeholderText: pluginApi?.tr("settings.fdCommand.placeholder")
+ text: root.valueFdCommand
+ onTextChanged: root.valueFdCommand = text
+ }
+ }
+
+ // Max Results Slider
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: Style.marginS
+
+ RowLayout {
+ Layout.fillWidth: true
+
+ NText {
+ text: pluginApi?.tr("settings.maxResults.label")
+ font.pointSize: Style.fontSizeL
+ font.weight: Font.Medium
+ color: Color.mOnSurface
+ Layout.fillWidth: true
+ }
+
+ NText {
+ text: root.valueMaxResults === 0 ? pluginApi?.tr("settings.maxResults.unlimited") : root.valueMaxResults.toString()
+ font.pointSize: Style.fontSizeM
+ font.weight: Font.Medium
+ color: Color.mPrimary
+ }
+ }
+
+ NText {
+ text: pluginApi?.tr("settings.maxResults.description")
+ font.pointSize: Style.fontSizeS
+ color: Color.mOnSurfaceVariant
+ wrapMode: Text.WordWrap
+ Layout.fillWidth: true
+ }
+
+ NSlider {
+ Layout.fillWidth: true
+ from: 0
+ to: 1000
+ stepSize: 10
+ value: root.valueMaxResults
+ onMoved: root.valueMaxResults = Math.round(value)
+ }
+ }
+
+ function saveSettings() {
+ if (!pluginApi) {
+ Logger.e("FileSearch", "Cannot save settings: pluginApi is null");
+ return;
+ }
+
+ pluginApi.pluginSettings.showHidden = root.valueShowHidden;
+ pluginApi.pluginSettings.maxResults = root.valueMaxResults;
+ pluginApi.pluginSettings.fileOpener = root.valueFileOpener;
+ pluginApi.pluginSettings.searchDirectory = root.valueSearchDirectory;
+ pluginApi.pluginSettings.fdCommand = root.valueFdCommand;
+ pluginApi.saveSettings();
+
+ Logger.d("FileSearch", "Settings saved successfully");
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/i18n/en.json b/dotfiles/.config/noctalia/plugins/file-search/i18n/en.json
new file mode 100644
index 0000000..8a56924
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/i18n/en.json
@@ -0,0 +1,55 @@
+{
+ "provider": {
+ "name": "File Search"
+ },
+ "launcher": {
+ "command": {
+ "description": "Search files and folders"
+ },
+ "errors": {
+ "fdNotFound": {
+ "title": "fd not found",
+ "description": "Please install fd to use file search"
+ }
+ },
+ "prompts": {
+ "emptyQuery": {
+ "title": "Type to search files and folders",
+ "description": "Start typing to search in {{root}}"
+ },
+ "searching": {
+ "title": "Searching...",
+ "description": "Looking for files and folders matching: {{query}}"
+ },
+ "noResults": {
+ "title": "No results found",
+ "description": "No files or folders matching '{{query}}'"
+ }
+ }
+ },
+ "settings": {
+ "showHidden": {
+ "label": "Include hidden files"
+ },
+ "fileOpener": {
+ "label": "File opener command",
+ "description": "Command used to open files and folders",
+ "placeholder": "xdg-open"
+ },
+ "searchDirectory": {
+ "label": "Search directory",
+ "description": "Directory to search for files and folders",
+ "placeholder": "~"
+ },
+ "fdCommand": {
+ "label": "fd command path",
+ "description": "Command name or full path",
+ "placeholder": "fd"
+ },
+ "maxResults": {
+ "label": "Maximum results",
+ "unlimited": "Unlimited",
+ "description": "Limit the number of search results displayed (set to 0 for unlimited)"
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/i18n/fr.json b/dotfiles/.config/noctalia/plugins/file-search/i18n/fr.json
new file mode 100644
index 0000000..361e020
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/i18n/fr.json
@@ -0,0 +1,55 @@
+{
+ "provider": {
+ "name": "Recherche de fichiers"
+ },
+ "launcher": {
+ "command": {
+ "description": "Rechercher des fichiers et des dossiers"
+ },
+ "errors": {
+ "fdNotFound": {
+ "title": "fd non trouvé",
+ "description": "Veuillez installer fd pour utiliser la recherche de fichiers"
+ }
+ },
+ "prompts": {
+ "emptyQuery": {
+ "title": "Tapez pour rechercher des fichiers et des dossiers",
+ "description": "Commencez à taper pour rechercher dans {{root}}"
+ },
+ "searching": {
+ "title": "Recherche en cours...",
+ "description": "Recherche de fichiers et dossiers correspondant à : {{query}}"
+ },
+ "noResults": {
+ "title": "Aucun résultat trouvé",
+ "description": "Aucun fichier ou dossier ne correspond à '{{query}}'"
+ }
+ }
+ },
+ "settings": {
+ "showHidden": {
+ "label": "Inclure les fichiers cachés"
+ },
+ "fileOpener": {
+ "label": "Commande d'ouverture de fichier",
+ "description": "Commande utilisée pour ouvrir les fichiers et dossiers",
+ "placeholder": "xdg-open"
+ },
+ "searchDirectory": {
+ "label": "Répertoire de recherche",
+ "description": "Répertoire où rechercher des fichiers et des dossiers",
+ "placeholder": "~"
+ },
+ "fdCommand": {
+ "label": "Chemin de la commande fd",
+ "description": "Nom de la commande ou chemin complet",
+ "placeholder": "fd"
+ },
+ "maxResults": {
+ "label": "Nombre maximal de résultats",
+ "unlimited": "Illimité",
+ "description": "Limiter le nombre de résultats de recherche affichés (définir à 0 pour illimité)"
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/i18n/zh-CN.json b/dotfiles/.config/noctalia/plugins/file-search/i18n/zh-CN.json
new file mode 100644
index 0000000..446924e
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/i18n/zh-CN.json
@@ -0,0 +1,55 @@
+{
+ "provider": {
+ "name": "文件搜索"
+ },
+ "launcher": {
+ "command": {
+ "description": "搜索文件和文件夹"
+ },
+ "errors": {
+ "fdNotFound": {
+ "title": "未找到 fd",
+ "description": "请安装 fd 以使用文件搜索"
+ }
+ },
+ "prompts": {
+ "emptyQuery": {
+ "title": "输入以搜索文件和文件夹",
+ "description": "开始输入以在 {{root}} 中搜索"
+ },
+ "searching": {
+ "title": "正在搜索…",
+ "description": "正在查找匹配 {{query}} 的文件和文件夹"
+ },
+ "noResults": {
+ "title": "未找到结果",
+ "description": "没有匹配 '{{query}}' 的文件或文件夹"
+ }
+ }
+ },
+ "settings": {
+ "showHidden": {
+ "label": "包含隐藏文件"
+ },
+ "fileOpener": {
+ "label": "文件打开命令",
+ "description": "用于打开文件和文件夹的命令",
+ "placeholder": "xdg-open"
+ },
+ "searchDirectory": {
+ "label": "搜索目录",
+ "description": "用于搜索文件和文件夹的目录",
+ "placeholder": "~"
+ },
+ "fdCommand": {
+ "label": "fd 命令路径",
+ "description": "命令名称或完整路径",
+ "placeholder": "fd"
+ },
+ "maxResults": {
+ "label": "最大结果数",
+ "unlimited": "无限制",
+ "description": "限制显示的搜索结果数量(设为 0 表示无限制)"
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/i18n/zh-TW.json b/dotfiles/.config/noctalia/plugins/file-search/i18n/zh-TW.json
new file mode 100644
index 0000000..0a31b1a
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/i18n/zh-TW.json
@@ -0,0 +1,55 @@
+{
+ "provider": {
+ "name": "檔案搜尋"
+ },
+ "launcher": {
+ "command": {
+ "description": "搜尋檔案與資料夾"
+ },
+ "errors": {
+ "fdNotFound": {
+ "title": "找不到 fd",
+ "description": "請安裝 fd 以使用檔案搜尋"
+ }
+ },
+ "prompts": {
+ "emptyQuery": {
+ "title": "輸入以搜尋檔案與資料夾",
+ "description": "開始輸入以在 {{root}} 中搜尋"
+ },
+ "searching": {
+ "title": "正在搜尋…",
+ "description": "正在尋找符合 {{query}} 的檔案與資料夾"
+ },
+ "noResults": {
+ "title": "找不到結果",
+ "description": "沒有符合 '{{query}}' 的檔案或資料夾"
+ }
+ }
+ },
+ "settings": {
+ "showHidden": {
+ "label": "包含隱藏檔案"
+ },
+ "fileOpener": {
+ "label": "檔案開啟命令",
+ "description": "用於開啟檔案與資料夾的命令",
+ "placeholder": "xdg-open"
+ },
+ "searchDirectory": {
+ "label": "搜尋目錄",
+ "description": "用於搜尋檔案與資料夾的目錄",
+ "placeholder": "~"
+ },
+ "fdCommand": {
+ "label": "fd 命令路徑",
+ "description": "命令名稱或完整路徑",
+ "placeholder": "fd"
+ },
+ "maxResults": {
+ "label": "最大結果數",
+ "unlimited": "無限制",
+ "description": "限制顯示的搜尋結果數量(設為 0 表示無限制)"
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/manifest.json b/dotfiles/.config/noctalia/plugins/file-search/manifest.json
new file mode 100644
index 0000000..0d0facf
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/manifest.json
@@ -0,0 +1,31 @@
+{
+ "id": "file-search",
+ "name": "File Search",
+ "version": "1.0.4",
+ "minNoctaliaVersion": "4.1.2",
+ "author": "ericbreh",
+ "license": "MIT",
+ "repository": "https://github.com/noctalia-dev/noctalia-plugins",
+ "description": "File search from the launcher.",
+ "tags": [
+ "Launcher",
+ "Productivity"
+ ],
+ "entryPoints": {
+ "main": "Main.qml",
+ "launcherProvider": "LauncherProvider.qml",
+ "settings": "Settings.qml"
+ },
+ "dependencies": {
+ "plugins": []
+ },
+ "metadata": {
+ "defaultSettings": {
+ "showHidden": false,
+ "maxResults": 100,
+ "fileOpener": "xdg-open",
+ "searchDirectory": "~",
+ "fdCommand": "fd"
+ }
+ }
+}
diff --git a/dotfiles/.config/noctalia/plugins/file-search/preview.png b/dotfiles/.config/noctalia/plugins/file-search/preview.png
new file mode 100644
index 0000000..e6cf000
--- /dev/null
+++ b/dotfiles/.config/noctalia/plugins/file-search/preview.png
Binary files differ
diff --git a/dotfiles/.config/noctalia/settings.json b/dotfiles/.config/noctalia/settings.json
new file mode 100644
index 0000000..a43552a
--- /dev/null
+++ b/dotfiles/.config/noctalia/settings.json
@@ -0,0 +1,760 @@
+{
+ "appLauncher": {
+ "autoPasteClipboard": false,
+ "clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
+ "clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
+ "clipboardWrapText": true,
+ "customLaunchPrefix": "",
+ "customLaunchPrefixEnabled": false,
+ "density": "default",
+ "enableClipPreview": true,
+ "enableClipboardChips": true,
+ "enableClipboardHistory": false,
+ "enableClipboardSmartIcons": true,
+ "enableSessionSearch": true,
+ "enableSettingsSearch": true,
+ "enableWindowsSearch": true,
+ "iconMode": "native",
+ "ignoreMouseInput": false,
+ "overviewLayer": false,
+ "pinnedApps": [
+ ],
+ "position": "top_center",
+ "screenshotAnnotationTool": "",
+ "showCategories": true,
+ "showIconBackground": false,
+ "sortByMostUsed": true,
+ "terminalCommand": "alacritty -e",
+ "viewMode": "list"
+ },
+ "audio": {
+ "mprisBlacklist": [
+ ],
+ "preferredPlayer": "",
+ "spectrumFrameRate": 30,
+ "spectrumMirrored": true,
+ "visualizerType": "linear",
+ "volumeFeedback": false,
+ "volumeFeedbackSoundFile": "",
+ "volumeOverdrive": false,
+ "volumeStep": 2
+ },
+ "bar": {
+ "autoHideDelay": 500,
+ "autoShowDelay": 150,
+ "backgroundOpacity": 0.93,
+ "barType": "simple",
+ "capsuleColorKey": "none",
+ "capsuleOpacity": 1,
+ "contentPadding": 2,
+ "density": "default",
+ "displayMode": "always_visible",
+ "enableExclusionZoneInset": true,
+ "fontScale": 1.1,
+ "frameRadius": 12,
+ "frameThickness": 8,
+ "hideOnOverview": false,
+ "marginHorizontal": 4,
+ "marginVertical": 4,
+ "middleClickAction": "none",
+ "middleClickCommand": "",
+ "middleClickFollowMouse": false,
+ "monitors": [
+ ],
+ "mouseWheelAction": "none",
+ "mouseWheelWrap": true,
+ "outerCorners": true,
+ "position": "top",
+ "reverseScroll": false,
+ "rightClickAction": "controlCenter",
+ "rightClickCommand": "",
+ "rightClickFollowMouse": true,
+ "screenOverrides": [
+ ],
+ "showCapsule": true,
+ "showOnWorkspaceSwitch": true,
+ "showOutline": false,
+ "useSeparateOpacity": false,
+ "widgetSpacing": 2,
+ "widgets": {
+ "center": [
+ {
+ "colorizeIcons": false,
+ "hideMode": "hidden",
+ "id": "ActiveWindow",
+ "maxWidth": 360,
+ "scrollingMode": "hover",
+ "showIcon": true,
+ "showText": true,
+ "textColor": "none",
+ "useFixedWidth": false
+ }
+ ],
+ "left": [
+ {
+ "colorizeSystemIcon": "secondary",
+ "colorizeSystemText": "none",
+ "customIconPath": "",
+ "enableColorization": true,
+ "icon": "rocket",
+ "iconColor": "none",
+ "id": "Launcher",
+ "useDistroLogo": true
+ },
+ {
+ "colorizeDistroLogo": false,
+ "colorizeSystemIcon": "secondary",
+ "colorizeSystemText": "none",
+ "customIconPath": "",
+ "enableColorization": true,
+ "icon": "adjustments-horizontal",
+ "id": "ControlCenter",
+ "useDistroLogo": false
+ },
+ {
+ "clockColor": "primary",
+ "customFont": "",
+ "formatHorizontal": "yyyy年MM月dd日 HH:mm:ss",
+ "formatVertical": "HH mm - dd MM",
+ "id": "Clock",
+ "tooltipFormat": "HH:mm ddd, MMM dd",
+ "useCustomFont": false
+ },
+ {
+ "compactMode": false,
+ "hideMode": "visible",
+ "hideWhenIdle": false,
+ "id": "MediaMini",
+ "maxWidth": 300,
+ "panelShowAlbumArt": true,
+ "scrollingMode": "hover",
+ "showAlbumArt": true,
+ "showArtistFirst": true,
+ "showProgressRing": true,
+ "showVisualizer": false,
+ "textColor": "none",
+ "useFixedWidth": false,
+ "visualizerType": "linear"
+ },
+ {
+ "displayMode": "alwaysShow",
+ "iconColor": "primary",
+ "id": "Volume",
+ "middleClickCommand": "pwvucontrol || pavucontrol",
+ "textColor": "none"
+ },
+ {
+ "characterCount": 2,
+ "colorizeIcons": false,
+ "emptyColor": "secondary",
+ "enableScrollWheel": true,
+ "focusedColor": "primary",
+ "followFocusedScreen": false,
+ "fontWeight": "bold",
+ "groupedBorderOpacity": 1,
+ "hideUnoccupied": false,
+ "iconScale": 0.8,
+ "id": "Workspace",
+ "labelMode": "index",
+ "occupiedColor": "secondary",
+ "pillSize": 0.6,
+ "showApplications": true,
+ "showApplicationsHover": true,
+ "showBadge": true,
+ "showLabelsOnlyWhenOccupied": true,
+ "unfocusedIconsOpacity": 1
+ }
+ ],
+ "right": [
+ {
+ "hideWhenZero": true,
+ "hideWhenZeroUnread": false,
+ "iconColor": "none",
+ "id": "NotificationHistory",
+ "showUnreadBadge": true,
+ "unreadBadgeColor": "primary"
+ },
+ {
+ "deviceNativePath": "__default__",
+ "displayMode": "graphic-clean",
+ "hideIfIdle": false,
+ "hideIfNotDetected": true,
+ "id": "Battery",
+ "showNoctaliaPerformance": false,
+ "showPowerProfiles": false
+ },
+ {
+ "compactMode": false,
+ "diskPath": "/",
+ "iconColor": "secondary",
+ "id": "SystemMonitor",
+ "showCpuCores": false,
+ "showCpuFreq": false,
+ "showCpuTemp": true,
+ "showCpuUsage": true,
+ "showDiskAvailable": false,
+ "showDiskUsage": false,
+ "showDiskUsageAsPercent": false,
+ "showGpuTemp": false,
+ "showLoadAverage": false,
+ "showMemoryAsPercent": false,
+ "showMemoryUsage": true,
+ "showNetworkStats": false,
+ "showSwapUsage": false,
+ "textColor": "none",
+ "useMonospaceFont": true,
+ "usePadding": false
+ },
+ {
+ "applyToAllMonitors": false,
+ "displayMode": "onhover",
+ "iconColor": "secondary",
+ "id": "Brightness",
+ "textColor": "none"
+ },
+ {
+ "displayMode": "forceOpen",
+ "iconColor": "primary",
+ "id": "KeyboardLayout",
+ "showIcon": true,
+ "textColor": "none"
+ },
+ {
+ "displayMode": "onhover",
+ "iconColor": "none",
+ "id": "Network",
+ "textColor": "none"
+ },
+ {
+ "blacklist": [
+ ],
+ "chevronColor": "none",
+ "colorizeIcons": false,
+ "drawerEnabled": false,
+ "hidePassive": false,
+ "id": "Tray",
+ "pinned": [
+ ]
+ }
+ ]
+ }
+ },
+ "brightness": {
+ "backlightDeviceMappings": [
+ ],
+ "brightnessStep": 5,
+ "enableDdcSupport": false,
+ "enforceMinimum": true
+ },
+ "calendar": {
+ "cards": [
+ {
+ "enabled": true,
+ "id": "calendar-header-card"
+ },
+ {
+ "enabled": true,
+ "id": "calendar-month-card"
+ },
+ {
+ "enabled": true,
+ "id": "weather-card"
+ }
+ ]
+ },
+ "colorSchemes": {
+ "darkMode": true,
+ "generationMethod": "content",
+ "manualSunrise": "06:30",
+ "manualSunset": "18:30",
+ "monitorForColors": "",
+ "predefinedScheme": "Vesper",
+ "schedulingMode": "off",
+ "syncGsettings": true,
+ "useWallpaperColors": false
+ },
+ "controlCenter": {
+ "cards": [
+ {
+ "enabled": true,
+ "id": "profile-card"
+ },
+ {
+ "enabled": true,
+ "id": "shortcuts-card"
+ },
+ {
+ "enabled": true,
+ "id": "audio-card"
+ },
+ {
+ "enabled": false,
+ "id": "brightness-card"
+ },
+ {
+ "enabled": true,
+ "id": "weather-card"
+ },
+ {
+ "enabled": true,
+ "id": "media-sysmon-card"
+ }
+ ],
+ "diskPath": "/",
+ "position": "close_to_bar_button",
+ "shortcuts": {
+ "left": [
+ {
+ "id": "Network"
+ },
+ {
+ "id": "Bluetooth"
+ },
+ {
+ "id": "WallpaperSelector"
+ },
+ {
+ "id": "NoctaliaPerformance"
+ }
+ ],
+ "right": [
+ {
+ "id": "Notifications"
+ },
+ {
+ "id": "PowerProfile"
+ },
+ {
+ "id": "KeepAwake"
+ },
+ {
+ "id": "NightLight"
+ }
+ ]
+ }
+ },
+ "desktopWidgets": {
+ "enabled": true,
+ "gridSnap": true,
+ "gridSnapScale": true,
+ "monitorWidgets": [
+ {
+ "name": "DP-1",
+ "widgets": [
+ ]
+ },
+ {
+ "name": "HDMI-A-1",
+ "widgets": [
+ {
+ "hideMode": "visible",
+ "id": "MediaPlayer",
+ "roundedCorners": true,
+ "scale": 0.95,
+ "showAlbumArt": true,
+ "showBackground": true,
+ "showButtons": true,
+ "showVisualizer": true,
+ "visualizerType": "linear",
+ "x": 1500,
+ "y": 400
+ },
+ {
+ "id": "Weather",
+ "roundedCorners": true,
+ "scale": 1.035742359088177,
+ "showBackground": true,
+ "x": 1500,
+ "y": 280
+ }
+ ]
+ }
+ ],
+ "overviewEnabled": true
+ },
+ "dock": {
+ "animationSpeed": 1,
+ "backgroundOpacity": 1,
+ "colorizeIcons": false,
+ "deadOpacity": 0.6,
+ "displayMode": "auto_hide",
+ "dockType": "floating",
+ "enabled": true,
+ "floatingRatio": 0.14,
+ "groupApps": false,
+ "groupClickAction": "cycle",
+ "groupContextMenuMode": "extended",
+ "groupIndicatorStyle": "dots",
+ "inactiveIndicators": false,
+ "indicatorColor": "primary",
+ "indicatorOpacity": 0.6,
+ "indicatorThickness": 3,
+ "launcherIcon": "",
+ "launcherIconColor": "secondary",
+ "launcherPosition": "start",
+ "launcherUseDistroLogo": true,
+ "monitors": [
+ ],
+ "onlySameOutput": true,
+ "pinnedApps": [
+ ],
+ "pinnedStatic": false,
+ "position": "bottom",
+ "showDockIndicator": false,
+ "showLauncherIcon": true,
+ "sitOnFrame": false,
+ "size": 1
+ },
+ "general": {
+ "allowPanelsOnScreenWithoutBar": true,
+ "allowPasswordWithFprintd": false,
+ "animationDisabled": false,
+ "animationSpeed": 2,
+ "autoStartAuth": false,
+ "avatarImage": "/home/yaroslav/.face",
+ "boxRadiusRatio": 1,
+ "clockFormat": "hh\\nmm",
+ "clockStyle": "analog",
+ "compactLockScreen": false,
+ "dimmerOpacity": 0.2,
+ "enableBlurBehind": true,
+ "enableLockScreenCountdown": true,
+ "enableLockScreenMediaControls": true,
+ "enableShadows": true,
+ "forceBlackScreenCorners": false,
+ "iRadiusRatio": 1,
+ "keybinds": {
+ "keyDown": [
+ "Down",
+ "Ctrl+J"
+ ],
+ "keyEnter": [
+ "Return",
+ "Enter"
+ ],
+ "keyEscape": [
+ "Esc"
+ ],
+ "keyLeft": [
+ "Left",
+ "Ctrl+H"
+ ],
+ "keyRemove": [
+ "Del",
+ "Ctrl+W"
+ ],
+ "keyRight": [
+ "Right",
+ "Ctrl+L"
+ ],
+ "keyUp": [
+ "Up",
+ "Ctrl+K"
+ ]
+ },
+ "language": "",
+ "lockOnSuspend": true,
+ "lockScreenAnimations": true,
+ "lockScreenBlur": 0,
+ "lockScreenCountdownDuration": 3000,
+ "lockScreenMonitors": [
+ ],
+ "lockScreenTint": 0,
+ "passwordChars": false,
+ "radiusRatio": 0.34,
+ "reverseScroll": false,
+ "scaleRatio": 1,
+ "screenRadiusRatio": 1,
+ "shadowDirection": "bottom_right",
+ "shadowOffsetX": 2,
+ "shadowOffsetY": 3,
+ "showChangelogOnStartup": true,
+ "showHibernateOnLockScreen": false,
+ "showScreenCorners": false,
+ "showSessionButtonsOnLockScreen": true,
+ "smoothScrollEnabled": false,
+ "telemetryEnabled": false
+ },
+ "hooks": {
+ "colorGeneration": "",
+ "darkModeChange": "",
+ "enabled": false,
+ "performanceModeDisabled": "",
+ "performanceModeEnabled": "",
+ "screenLock": "",
+ "screenUnlock": "",
+ "session": "",
+ "startup": "",
+ "wallpaperChange": ""
+ },
+ "idle": {
+ "customCommands": "[]",
+ "enabled": true,
+ "fadeDuration": 5,
+ "lockCommand": "",
+ "lockTimeout": 660,
+ "resumeLockCommand": "",
+ "resumeScreenOffCommand": "",
+ "resumeSuspendCommand": "",
+ "screenOffCommand": "",
+ "screenOffTimeout": 600,
+ "suspendCommand": "",
+ "suspendTimeout": 0
+ },
+ "location": {
+ "analogClockInCalendar": true,
+ "autoLocate": false,
+ "firstDayOfWeek": -1,
+ "hideWeatherCityName": false,
+ "hideWeatherTimezone": false,
+ "name": "сестрорецк",
+ "showCalendarEvents": true,
+ "showCalendarWeather": true,
+ "showWeekNumberInCalendar": false,
+ "use12hourFormat": false,
+ "useFahrenheit": false,
+ "weatherEnabled": true,
+ "weatherShowEffects": true,
+ "weatherTaliaMascotAlways": false
+ },
+ "network": {
+ "bluetoothAutoConnect": true,
+ "bluetoothDetailsViewMode": "grid",
+ "bluetoothHideUnnamedDevices": false,
+ "bluetoothRssiPollIntervalMs": 60000,
+ "bluetoothRssiPollingEnabled": false,
+ "disableDiscoverability": false,
+ "networkPanelView": "wifi",
+ "wifiDetailsViewMode": "list"
+ },
+ "nightLight": {
+ "autoSchedule": true,
+ "dayTemp": "6500",
+ "enabled": false,
+ "forced": false,
+ "manualSunrise": "06:30",
+ "manualSunset": "18:30",
+ "nightTemp": "4000"
+ },
+ "noctaliaPerformance": {
+ "disableDesktopWidgets": true,
+ "disableWallpaper": false
+ },
+ "notifications": {
+ "backgroundOpacity": 1,
+ "clearDismissed": true,
+ "criticalUrgencyDuration": 15,
+ "density": "compact",
+ "enableBatteryToast": true,
+ "enableKeyboardLayoutToast": false,
+ "enableMarkdown": false,
+ "enableMediaToast": false,
+ "enabled": true,
+ "location": "top_right",
+ "lowUrgencyDuration": 3,
+ "monitors": [
+ ],
+ "normalUrgencyDuration": 5,
+ "overlayLayer": true,
+ "respectExpireTimeout": false,
+ "saveToHistory": {
+ "critical": true,
+ "low": true,
+ "normal": true
+ },
+ "sounds": {
+ "criticalSoundFile": "",
+ "enabled": false,
+ "excludedApps": "discord,firefox,chrome,chromium,edge",
+ "lowSoundFile": "",
+ "normalSoundFile": "",
+ "separateSounds": false,
+ "volume": 0.5
+ }
+ },
+ "osd": {
+ "autoHideMs": 2000,
+ "backgroundOpacity": 1,
+ "enabled": true,
+ "enabledTypes": [
+ 0,
+ 1,
+ 2
+ ],
+ "location": "left",
+ "monitors": [
+ ],
+ "overlayLayer": true
+ },
+ "plugins": {
+ "autoUpdate": false,
+ "notifyUpdates": true
+ },
+ "sessionMenu": {
+ "countdownDuration": 10000,
+ "enableCountdown": false,
+ "largeButtonsLayout": "grid",
+ "largeButtonsStyle": true,
+ "position": "center",
+ "powerOptions": [
+ {
+ "action": "lock",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "1"
+ },
+ {
+ "action": "suspend",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "2"
+ },
+ {
+ "action": "hibernate",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "3"
+ },
+ {
+ "action": "reboot",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "4"
+ },
+ {
+ "action": "logout",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "5"
+ },
+ {
+ "action": "shutdown",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "6"
+ },
+ {
+ "action": "rebootToUefi",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": true,
+ "keybind": "7"
+ },
+ {
+ "action": "userspaceReboot",
+ "command": "",
+ "countdownEnabled": true,
+ "enabled": false,
+ "keybind": ""
+ }
+ ],
+ "showHeader": true,
+ "showKeybinds": true
+ },
+ "settingsVersion": 59,
+ "systemMonitor": {
+ "batteryCriticalThreshold": 5,
+ "batteryWarningThreshold": 20,
+ "cpuCriticalThreshold": 90,
+ "cpuWarningThreshold": 80,
+ "criticalColor": "#a7cce1",
+ "diskAvailCriticalThreshold": 10,
+ "diskAvailWarningThreshold": 20,
+ "diskCriticalThreshold": 90,
+ "diskWarningThreshold": 80,
+ "enableDgpuMonitoring": false,
+ "externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor",
+ "gpuCriticalThreshold": 90,
+ "gpuWarningThreshold": 80,
+ "memCriticalThreshold": 90,
+ "memWarningThreshold": 80,
+ "swapCriticalThreshold": 90,
+ "swapWarningThreshold": 80,
+ "tempCriticalThreshold": 90,
+ "tempWarningThreshold": 80,
+ "useCustomColors": true,
+ "warningColor": "#e8b8a8"
+ },
+ "templates": {
+ "activeTemplates": [
+ {
+ "enabled": true,
+ "id": "telegram"
+ },
+ {
+ "enabled": true,
+ "id": "niri"
+ }
+ ],
+ "enableUserTheming": false
+ },
+ "ui": {
+ "boxBorderEnabled": true,
+ "fontDefault": "monospace",
+ "fontDefaultScale": 1,
+ "fontFixed": "monospace",
+ "fontFixedScale": 1,
+ "panelBackgroundOpacity": 0.8,
+ "panelsAttachedToBar": true,
+ "scrollbarAlwaysVisible": true,
+ "settingsPanelMode": "attached",
+ "settingsPanelSideBarCardStyle": false,
+ "tooltipsEnabled": true,
+ "translucentWidgets": true
+ },
+ "wallpaper": {
+ "automationEnabled": false,
+ "directory": "/home/yaroslav/pics/wallpapers",
+ "enableMultiMonitorDirectories": false,
+ "enabled": true,
+ "favorites": [
+ ],
+ "fillColor": "#000000",
+ "fillMode": "crop",
+ "hideWallpaperFilenames": false,
+ "linkLightAndDarkWallpapers": true,
+ "monitorDirectories": [
+ ],
+ "overviewBlur": 0.8,
+ "overviewEnabled": true,
+ "overviewTint": 0.5,
+ "panelPosition": "follow_bar",
+ "randomIntervalSec": 300,
+ "setWallpaperOnAllMonitors": true,
+ "showHiddenFiles": false,
+ "skipStartupTransition": false,
+ "solidColor": "#1a1a2e",
+ "sortOrder": "name",
+ "transitionDuration": 1500,
+ "transitionEdgeSmoothness": 0.05,
+ "transitionType": [
+ "fade",
+ "disc",
+ "stripes",
+ "wipe",
+ "pixelate",
+ "honeycomb"
+ ],
+ "useOriginalImages": false,
+ "useSolidColor": false,
+ "useWallhaven": false,
+ "viewMode": "browse",
+ "wallhavenApiKey": "",
+ "wallhavenCategories": "111",
+ "wallhavenOrder": "desc",
+ "wallhavenPurity": "100",
+ "wallhavenQuery": "",
+ "wallhavenRatios": "",
+ "wallhavenResolutionHeight": "",
+ "wallhavenResolutionMode": "atleast",
+ "wallhavenResolutionWidth": "",
+ "wallhavenSorting": "relevance",
+ "wallpaperChangeMode": "random"
+ }
+}
diff --git a/dotfiles/.config/noctalia/user-templates.toml b/dotfiles/.config/noctalia/user-templates.toml
new file mode 100644
index 0000000..e490907
--- /dev/null
+++ b/dotfiles/.config/noctalia/user-templates.toml
@@ -0,0 +1,17 @@
+[config]
+
+[templates]
+
+# User-defined templates
+# Add your custom templates below
+# Example:
+# [templates.myapp]
+# input_path = "~/.config/noctalia/templates/myapp.css"
+# output_path = "~/.config/myapp/theme.css"
+# post_hook = "myapp --reload-theme"
+
+# Remove this section and add your own templates
+#[templates.placeholder]
+#input_path = "/etc/xdg/quickshell/noctalia-shell/Assets/Templates/noctalia.json"
+#output_path = "/home/yaroslav/.cache/noctalia/placeholder.json"
+
diff --git a/dotfiles/.profile b/dotfiles/.profile
index a6ef687..5d595ba 100644
--- a/dotfiles/.profile
+++ b/dotfiles/.profile
@@ -5,9 +5,7 @@ export GDK_BACKEND=wayland
export EGL_PLATFORM=wayland
export CLUTTER_PLATFORM=wayland
export SDL_VIDEODRIVER=wayland
-export QT_QPA_PLATFORM=wayland-egl
export QT_WAYLAND_DISABLE_WINDOWDECORATION=0
-export QT_QPA_PLATFORMTHEME="qt5ct"
export _JAVA_AWT_WM_NONREPARENTING=1
export MOZ_ENABLE_WAYLAND=1
# Fixes Qt's webview scaling