aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dotfiles/.config/DankMaterialShell/.changelog-1.40
-rw-r--r--dotfiles/.config/DankMaterialShell/.firstlaunch0
-rw-r--r--dotfiles/.config/DankMaterialShell/firefox.css132
-rw-r--r--dotfiles/.config/DankMaterialShell/plugin_settings.json14
-rw-r--r--dotfiles/.config/DankMaterialShell/settings.json657
-rw-r--r--dotfiles/.config/alacritty/alacritty.toml2
-rw-r--r--dotfiles/.config/beets/config.yaml2
-rw-r--r--dotfiles/.config/calcurse/conf33
-rwxr-xr-xdotfiles/.config/calcurse/hooks/post-save34
-rwxr-xr-xdotfiles/.config/calcurse/hooks/pre-load28
-rw-r--r--dotfiles/.config/calcurse/keys56
-rw-r--r--dotfiles/.config/fontconfig/fonts.conf4
-rw-r--r--dotfiles/.config/lf/lfrc4
-rw-r--r--dotfiles/.config/mimeapps.list1
-rw-r--r--dotfiles/.config/mpv/input.conf2
-rw-r--r--dotfiles/.config/mpv/mpv.conf2
-rw-r--r--dotfiles/.config/niri/config.kdl234
-rw-r--r--dotfiles/.config/niri/dms/alttab.kdl10
-rw-r--r--dotfiles/.config/niri/dms/binds.kdl88
-rw-r--r--dotfiles/.config/niri/dms/colors.kdl39
-rw-r--r--dotfiles/.config/niri/dms/cursor.kdl0
-rw-r--r--dotfiles/.config/niri/dms/layout.kdl22
-rw-r--r--dotfiles/.config/niri/dms/outputs.kdl14
-rw-r--r--dotfiles/.config/niri/dms/windowrules.kdl0
-rw-r--r--dotfiles/.config/niri/dms/wpblur.kdl9
-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.json749
-rw-r--r--dotfiles/.config/noctalia/user-templates.toml17
-rw-r--r--dotfiles/.config/qutebrowser/config.py4
-rw-r--r--dotfiles/.config/rofi/config.rasi2
-rw-r--r--dotfiles/.config/swaylock/config6
-rw-r--r--dotfiles/.config/waybar/config221
-rw-r--r--dotfiles/.config/waybar/modules.json181
-rw-r--r--dotfiles/.config/waybar/style.css92
-rw-r--r--dotfiles/.config/wl-kbptr/config56
-rw-r--r--dotfiles/.config/zsh/.zshrc8
-rwxr-xr-xdotfiles/.local/bin/barweather2
-rwxr-xr-xdotfiles/.local/bin/mailsync2
-rwxr-xr-xdotfiles/.local/bin/menumako2
-rwxr-xr-xdotfiles/.local/bin/sshwiz18
-rw-r--r--dotfiles/.local/share/oculante/config.json154
-rw-r--r--dotfiles/.profile6
60 files changed, 3998 insertions, 406 deletions
diff --git a/dotfiles/.config/DankMaterialShell/.changelog-1.4 b/dotfiles/.config/DankMaterialShell/.changelog-1.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dotfiles/.config/DankMaterialShell/.changelog-1.4
diff --git a/dotfiles/.config/DankMaterialShell/.firstlaunch b/dotfiles/.config/DankMaterialShell/.firstlaunch
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dotfiles/.config/DankMaterialShell/.firstlaunch
diff --git a/dotfiles/.config/DankMaterialShell/firefox.css b/dotfiles/.config/DankMaterialShell/firefox.css
new file mode 100644
index 0000000..a8efeae
--- /dev/null
+++ b/dotfiles/.config/DankMaterialShell/firefox.css
@@ -0,0 +1,132 @@
+@media -moz-pref("userChrome.theme-material") {
+ :root {
+ --md-sys-color-primary: #006877;
+ --md-sys-color-surface-tint: #006877;
+ --md-sys-color-on-primary: #ffffff;
+ --md-sys-color-primary-container: #a3eeff;
+ --md-sys-color-on-primary-container: #001f25;
+ --md-sys-color-secondary: #4a6268;
+ --md-sys-color-on-secondary: #ffffff;
+ --md-sys-color-secondary-container: #cde7ed;
+ --md-sys-color-on-secondary-container: #051f24;
+ --md-sys-color-tertiary: #545d7e;
+ --md-sys-color-on-tertiary: #ffffff;
+ --md-sys-color-tertiary-container: #dce1ff;
+ --md-sys-color-on-tertiary-container: #111a37;
+ --md-sys-color-error: #ba1a1a;
+ --md-sys-color-on-error: #ffffff;
+ --md-sys-color-error-container: #ffdad6;
+ --md-sys-color-on-error-container: #410002;
+ --md-sys-color-background: #f9f9f9;
+ --md-sys-color-on-background: #1b1b1b;
+ --md-sys-color-surface: #f9f9f9;
+ --md-sys-color-on-surface: #1b1b1b;
+ --md-sys-color-surface-variant: #e2e2e2;
+ --md-sys-color-on-surface-variant: #474747;
+ --md-sys-color-outline: #777777;
+ --md-sys-color-outline-variant: #c6c6c6;
+ --md-sys-color-shadow: #000000;
+ --md-sys-color-scrim: #000000;
+ --md-sys-color-inverse-surface: #303030;
+ --md-sys-color-inverse-on-surface: #f1f1f1;
+ --md-sys-color-inverse-primary: #52d7f0;
+ --md-sys-color-primary-fixed: #a3eeff;
+ --md-sys-color-on-primary-fixed: #001f25;
+ --md-sys-color-primary-fixed-dim: #52d7f0;
+ --md-sys-color-on-primary-fixed-variant: #004e5a;
+ --md-sys-color-secondary-fixed: #cde7ed;
+ --md-sys-color-on-secondary-fixed: #051f24;
+ --md-sys-color-secondary-fixed-dim: #b2cbd1;
+ --md-sys-color-on-secondary-fixed-variant: #334a50;
+ --md-sys-color-tertiary-fixed: #dce1ff;
+ --md-sys-color-on-tertiary-fixed: #111a37;
+ --md-sys-color-tertiary-fixed-dim: #bcc5eb;
+ --md-sys-color-on-tertiary-fixed-variant: #3d4665;
+ --md-sys-color-surface-dim: #dadada;
+ --md-sys-color-surface-bright: #f9f9f9;
+ --md-sys-color-surface-container-lowest: #ffffff;
+ --md-sys-color-surface-container-low: #f3f3f3;
+ --md-sys-color-surface-container: #f9f9f9;
+ --md-sys-color-surface-container-high: #f9f9f9;
+ --md-sys-color-surface-container-highest: #f9f9f9;
+
+ --m3-radius: 12px;
+ --m3-radius-sm: 10px;
+ --m3-elev-0: none;
+ --m3-elev-1: 0 1px 2px rgba(0,0,0,.08), 0 1px 3px rgba(0,0,0,.06);
+ --m3-elev-2: 0 2px 6px rgba(0,0,0,.10), 0 1px 3px rgba(0,0,0,.06);
+
+ --tab-height: 34px;
+ --urlbar-height: 38px;
+
+ --state-hover: color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);
+ --state-press: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent);
+
+ --focus-ring: 0 0 0 2px color-mix(in srgb, var(--md-sys-color-primary) 70%, transparent);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --md-sys-color-primary: #52d7f0;
+ --md-sys-color-surface-tint: #52d7f0;
+ --md-sys-color-on-primary: #00363e;
+ --md-sys-color-primary-container: #004e5a;
+ --md-sys-color-on-primary-container: #a3eeff;
+ --md-sys-color-secondary: #b2cbd1;
+ --md-sys-color-on-secondary: #1c3439;
+ --md-sys-color-secondary-container: #334a50;
+ --md-sys-color-on-secondary-container: #cde7ed;
+ --md-sys-color-tertiary: #bcc5eb;
+ --md-sys-color-on-tertiary: #262f4d;
+ --md-sys-color-tertiary-container: #3d4665;
+ --md-sys-color-on-tertiary-container: #dce1ff;
+ --md-sys-color-error: #ffb4ab;
+ --md-sys-color-on-error: #690005;
+ --md-sys-color-error-container: #93000a;
+ --md-sys-color-on-error-container: #ffdad6;
+ --md-sys-color-background: #131313;
+ --md-sys-color-on-background: #e2e2e2;
+ --md-sys-color-surface: #131313;
+ --md-sys-color-on-surface: #e2e2e2;
+ --md-sys-color-surface-variant: #474747;
+ --md-sys-color-on-surface-variant: #c6c6c6;
+ --md-sys-color-outline: #919191;
+ --md-sys-color-outline-variant: #474747;
+ --md-sys-color-shadow: #000000;
+ --md-sys-color-scrim: #000000;
+ --md-sys-color-inverse-surface: #e2e2e2;
+ --md-sys-color-inverse-on-surface: #303030;
+ --md-sys-color-inverse-primary: #006877;
+ --md-sys-color-primary-fixed: #a3eeff;
+ --md-sys-color-on-primary-fixed: #001f25;
+ --md-sys-color-primary-fixed-dim: #52d7f0;
+ --md-sys-color-on-primary-fixed-variant: #004e5a;
+ --md-sys-color-secondary-fixed: #cde7ed;
+ --md-sys-color-on-secondary-fixed: #051f24;
+ --md-sys-color-secondary-fixed-dim: #b2cbd1;
+ --md-sys-color-on-secondary-fixed-variant: #334a50;
+ --md-sys-color-tertiary-fixed: #dce1ff;
+ --md-sys-color-on-tertiary-fixed: #111a37;
+ --md-sys-color-tertiary-fixed-dim: #bcc5eb;
+ --md-sys-color-on-tertiary-fixed-variant: #3d4665;
+ --md-sys-color-surface-dim: #131313;
+ --md-sys-color-surface-bright: #393939;
+ --md-sys-color-surface-container-lowest: #0e0e0e;
+ --md-sys-color-surface-container-low: #1b1b1b;
+ --md-sys-color-surface-container: #1f1f1f;
+ --md-sys-color-surface-container-high: #2a2a2a;
+ --md-sys-color-surface-container-highest: #353535;
+
+ --m3-elev-1: 0 1px 2px rgba(0,0,0,.50), 0 1px 3px rgba(0,0,0,.35);
+ --m3-elev-2: 0 4px 10px rgba(0,0,0,.55), 0 1px 3px rgba(0,0,0,.35);
+
+ --state-hover: color-mix(in srgb, var(--md-sys-color-on-surface) 6%, transparent);
+ --state-press: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);
+ }
+}
+
+/* idk if this even works, but the suggestion in the material updated readme bricks symbols no matter how many fallbacks I add */
+:root {
+ font-family: system-ui, "Inter Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !important;
+}
diff --git a/dotfiles/.config/DankMaterialShell/plugin_settings.json b/dotfiles/.config/DankMaterialShell/plugin_settings.json
new file mode 100644
index 0000000..d73a99d
--- /dev/null
+++ b/dotfiles/.config/DankMaterialShell/plugin_settings.json
@@ -0,0 +1,14 @@
+{
+ "powerUsagePlugin": {
+ "enabled": true,
+ "refreshInterval": 2,
+ "selectedPopout": "processList"
+ },
+ "emojiLauncher": {
+ "enabled": true
+ },
+ "calculator": {
+ "enabled": true,
+ "trigger": "="
+ }
+} \ No newline at end of file
diff --git a/dotfiles/.config/DankMaterialShell/settings.json b/dotfiles/.config/DankMaterialShell/settings.json
new file mode 100644
index 0000000..f485de6
--- /dev/null
+++ b/dotfiles/.config/DankMaterialShell/settings.json
@@ -0,0 +1,657 @@
+{
+ "currentThemeName": "dynamic",
+ "currentThemeCategory": "dynamic",
+ "customThemeFile": "/home/yaroslav/.config/DankMaterialShell/themes/steamDeck/theme.json",
+ "registryThemeVariants": {
+ "modus": {
+ "dark": {
+ "flavor": "vivendi",
+ "accent": "blue"
+ }
+ },
+ "amoledBlack": {
+ "dark": {
+ "flavor": "black",
+ "accent": "white"
+ }
+ }
+ },
+ "matugenScheme": "scheme-rainbow",
+ "runUserMatugenTemplates": true,
+ "matugenTargetMonitor": "",
+ "popupTransparency": 0.7,
+ "dockTransparency": 1,
+ "widgetBackgroundColor": "sth",
+ "widgetColorMode": "default",
+ "controlCenterTileColorMode": "primary",
+ "buttonColorMode": "primary",
+ "cornerRadius": 6,
+ "niriLayoutGapsOverride": 6,
+ "niriLayoutRadiusOverride": 1,
+ "niriLayoutBorderSize": 3,
+ "hyprlandLayoutGapsOverride": -1,
+ "hyprlandLayoutRadiusOverride": -1,
+ "hyprlandLayoutBorderSize": -1,
+ "mangoLayoutGapsOverride": -1,
+ "mangoLayoutRadiusOverride": -1,
+ "mangoLayoutBorderSize": -1,
+ "use24HourClock": true,
+ "showSeconds": true,
+ "padHours12Hour": false,
+ "useFahrenheit": false,
+ "windSpeedUnit": "kmh",
+ "nightModeEnabled": false,
+ "animationSpeed": 4,
+ "customAnimationDuration": 111,
+ "syncComponentAnimationSpeeds": true,
+ "popoutAnimationSpeed": 1,
+ "popoutCustomAnimationDuration": 150,
+ "modalAnimationSpeed": 1,
+ "modalCustomAnimationDuration": 150,
+ "enableRippleEffects": true,
+ "blurEnabled": true,
+ "blurForegroundLayers": true,
+ "blurLayerOutlineOpacity": 0.4,
+ "blurBorderColor": "outline",
+ "blurBorderCustomColor": "#ffffff",
+ "blurBorderOpacity": 0.35,
+ "wallpaperFillMode": "Fill",
+ "blurredWallpaperLayer": true,
+ "blurWallpaperOnOverview": false,
+ "showLauncherButton": true,
+ "showWorkspaceSwitcher": true,
+ "showFocusedWindow": true,
+ "showWeather": true,
+ "showMusic": true,
+ "showClipboard": true,
+ "showCpuUsage": true,
+ "showMemUsage": true,
+ "showCpuTemp": true,
+ "showGpuTemp": true,
+ "selectedGpuIndex": 0,
+ "enabledGpuPciIds": [],
+ "showSystemTray": true,
+ "systemTrayIconTintMode": "none",
+ "systemTrayIconTintSaturation": 50,
+ "systemTrayIconTintStrength": 135,
+ "showClock": true,
+ "showNotificationButton": true,
+ "showBattery": true,
+ "showControlCenterButton": true,
+ "showCapsLockIndicator": true,
+ "controlCenterShowNetworkIcon": true,
+ "controlCenterShowBluetoothIcon": true,
+ "controlCenterShowAudioIcon": true,
+ "controlCenterShowAudioPercent": false,
+ "controlCenterShowVpnIcon": true,
+ "controlCenterShowBrightnessIcon": false,
+ "controlCenterShowBrightnessPercent": false,
+ "controlCenterShowMicIcon": false,
+ "controlCenterShowMicPercent": true,
+ "controlCenterShowBatteryIcon": false,
+ "controlCenterShowPrinterIcon": false,
+ "controlCenterShowScreenSharingIcon": true,
+ "showPrivacyButton": true,
+ "privacyShowMicIcon": false,
+ "privacyShowCameraIcon": false,
+ "privacyShowScreenShareIcon": false,
+ "controlCenterWidgets": [
+ {
+ "id": "volumeSlider",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "brightnessSlider",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "wifi",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "builtin_vpn",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "bluetooth",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "nightMode",
+ "enabled": true,
+ "width": 25
+ },
+ {
+ "id": "darkMode",
+ "enabled": true,
+ "width": 25
+ },
+ {
+ "id": "audioOutput",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "audioInput",
+ "enabled": true,
+ "width": 50
+ },
+ {
+ "id": "diskUsage",
+ "enabled": true,
+ "width": 50,
+ "instanceId": "morbslj4y4y10hed2bj",
+ "mountPath": "/"
+ },
+ {
+ "id": "colorPicker",
+ "enabled": true,
+ "width": 50
+ }
+ ],
+ "showWorkspaceIndex": true,
+ "showWorkspaceName": false,
+ "showWorkspacePadding": true,
+ "workspaceScrolling": false,
+ "showWorkspaceApps": false,
+ "workspaceDragReorder": true,
+ "maxWorkspaceIcons": 3,
+ "workspaceAppIconSizeOffset": 0,
+ "groupWorkspaceApps": true,
+ "workspaceFollowFocus": false,
+ "showOccupiedWorkspacesOnly": false,
+ "reverseScrolling": false,
+ "dwlShowAllTags": false,
+ "workspaceColorMode": "default",
+ "workspaceOccupiedColorMode": "none",
+ "workspaceUnfocusedColorMode": "default",
+ "workspaceUrgentColorMode": "default",
+ "workspaceFocusedBorderEnabled": false,
+ "workspaceFocusedBorderColor": "primary",
+ "workspaceFocusedBorderThickness": 2,
+ "workspaceNameIcons": {},
+ "waveProgressEnabled": false,
+ "scrollTitleEnabled": true,
+ "audioVisualizerEnabled": true,
+ "audioScrollMode": "volume",
+ "audioWheelScrollAmount": 2,
+ "clockCompactMode": false,
+ "focusedWindowCompactMode": false,
+ "runningAppsCompactMode": true,
+ "barMaxVisibleApps": 0,
+ "barMaxVisibleRunningApps": 0,
+ "barShowOverflowBadge": true,
+ "appsDockHideIndicators": false,
+ "appsDockColorizeActive": false,
+ "appsDockActiveColorMode": "primary",
+ "appsDockEnlargeOnHover": false,
+ "appsDockEnlargePercentage": 125,
+ "appsDockIconSizePercentage": 100,
+ "keyboardLayoutNameCompactMode": false,
+ "runningAppsCurrentWorkspace": true,
+ "runningAppsGroupByApp": false,
+ "runningAppsCurrentMonitor": false,
+ "appIdSubstitutions": [],
+ "centeringMode": "index",
+ "clockDateFormat": "yyyy年MM月dd日",
+ "lockDateFormat": "ddd d MMM yyyy",
+ "greeterRememberLastSession": true,
+ "greeterRememberLastUser": true,
+ "greeterEnableFprint": false,
+ "greeterEnableU2f": false,
+ "greeterWallpaperPath": "",
+ "mediaSize": 1,
+ "appLauncherViewMode": "list",
+ "spotlightModalViewMode": "list",
+ "browserPickerViewMode": "grid",
+ "browserUsageHistory": {},
+ "appPickerViewMode": "grid",
+ "filePickerUsageHistory": {},
+ "sortAppsAlphabetically": false,
+ "appLauncherGridColumns": 4,
+ "spotlightCloseNiriOverview": true,
+ "spotlightSectionViewModes": {},
+ "appDrawerSectionViewModes": {},
+ "niriOverviewOverlayEnabled": true,
+ "dankLauncherV2Size": "medium",
+ "dankLauncherV2BorderEnabled": true,
+ "dankLauncherV2BorderThickness": 2,
+ "dankLauncherV2BorderColor": "outline",
+ "dankLauncherV2ShowFooter": true,
+ "dankLauncherV2UnloadOnClose": true,
+ "useAutoLocation": false,
+ "weatherEnabled": true,
+ "networkPreference": "auto",
+ "iconTheme": "breeze-dark",
+ "cursorSettings": {
+ "theme": "System Default",
+ "size": 24,
+ "niri": {
+ "hideWhenTyping": false,
+ "hideAfterInactiveMs": 0
+ },
+ "hyprland": {
+ "hideOnKeyPress": false,
+ "hideOnTouch": false,
+ "inactiveTimeout": 0
+ },
+ "dwl": {
+ "cursorHideTimeout": 0
+ }
+ },
+ "launcherLogoMode": "apps",
+ "launcherLogoCustomPath": "",
+ "launcherLogoColorOverride": "",
+ "launcherLogoColorInvertOnMode": false,
+ "launcherLogoBrightness": 0.5,
+ "launcherLogoContrast": 1,
+ "launcherLogoSizeOffset": 0,
+ "fontFamily": "Monospace",
+ "monoFontFamily": "Monospace",
+ "fontWeight": 600,
+ "fontScale": 1,
+ "notepadUseMonospace": true,
+ "notepadFontFamily": "",
+ "notepadFontSize": 14,
+ "notepadShowLineNumbers": false,
+ "notepadTransparencyOverride": -1,
+ "notepadLastCustomTransparency": 0.7,
+ "soundsEnabled": true,
+ "useSystemSoundTheme": true,
+ "soundNewNotification": true,
+ "soundVolumeChanged": false,
+ "soundPluggedIn": true,
+ "acMonitorTimeout": 0,
+ "acLockTimeout": 0,
+ "acSuspendTimeout": 0,
+ "acSuspendBehavior": 0,
+ "acProfileName": "",
+ "batteryMonitorTimeout": 0,
+ "batteryLockTimeout": 0,
+ "batterySuspendTimeout": 0,
+ "batterySuspendBehavior": 0,
+ "batteryProfileName": "",
+ "batteryChargeLimit": 100,
+ "lockBeforeSuspend": true,
+ "loginctlLockIntegration": true,
+ "fadeToLockEnabled": true,
+ "fadeToLockGracePeriod": 5,
+ "fadeToDpmsEnabled": true,
+ "fadeToDpmsGracePeriod": 5,
+ "launchPrefix": "",
+ "brightnessDevicePins": {},
+ "wifiNetworkPins": {},
+ "bluetoothDevicePins": {},
+ "audioInputDevicePins": {},
+ "audioOutputDevicePins": {},
+ "gtkThemingEnabled": false,
+ "qtThemingEnabled": false,
+ "syncModeWithPortal": true,
+ "terminalsAlwaysDark": false,
+ "muxType": "tmux",
+ "muxUseCustomCommand": false,
+ "muxCustomCommand": "",
+ "muxSessionFilter": "",
+ "runDmsMatugenTemplates": true,
+ "matugenTemplateGtk": true,
+ "matugenTemplateNiri": true,
+ "matugenTemplateHyprland": false,
+ "matugenTemplateMangowc": false,
+ "matugenTemplateQt5ct": true,
+ "matugenTemplateQt6ct": true,
+ "matugenTemplateFirefox": true,
+ "matugenTemplatePywalfox": false,
+ "matugenTemplateZenBrowser": false,
+ "matugenTemplateVesktop": false,
+ "matugenTemplateEquibop": false,
+ "matugenTemplateGhostty": false,
+ "matugenTemplateKitty": true,
+ "matugenTemplateFoot": true,
+ "matugenTemplateAlacritty": true,
+ "matugenTemplateNeovim": false,
+ "matugenTemplateWezterm": false,
+ "matugenTemplateDgop": true,
+ "matugenTemplateKcolorscheme": true,
+ "matugenTemplateVscode": false,
+ "matugenTemplateEmacs": false,
+ "matugenTemplateZed": false,
+ "showDock": false,
+ "dockAutoHide": false,
+ "dockSmartAutoHide": false,
+ "dockGroupByApp": true,
+ "dockOpenOnOverview": true,
+ "dockPosition": 1,
+ "dockSpacing": 4,
+ "dockBottomGap": -8,
+ "dockMargin": 0,
+ "dockIconSize": 40,
+ "dockIndicatorStyle": "circle",
+ "dockBorderEnabled": true,
+ "dockBorderColor": "surfaceText",
+ "dockBorderOpacity": 1,
+ "dockBorderThickness": 1,
+ "dockIsolateDisplays": true,
+ "dockLauncherEnabled": true,
+ "dockLauncherLogoMode": "os",
+ "dockLauncherLogoCustomPath": "",
+ "dockLauncherLogoColorOverride": "primary",
+ "dockLauncherLogoSizeOffset": 0,
+ "dockLauncherLogoBrightness": 0.5,
+ "dockLauncherLogoContrast": 1,
+ "dockMaxVisibleApps": 0,
+ "dockMaxVisibleRunningApps": 0,
+ "dockShowOverflowBadge": true,
+ "notificationOverlayEnabled": false,
+ "notificationPopupShadowEnabled": true,
+ "notificationPopupPrivacyMode": false,
+ "modalDarkenBackground": true,
+ "lockScreenShowPowerActions": true,
+ "lockScreenShowSystemIcons": true,
+ "lockScreenShowTime": true,
+ "lockScreenShowDate": true,
+ "lockScreenShowProfileImage": true,
+ "lockScreenShowPasswordField": true,
+ "lockScreenShowMediaPlayer": true,
+ "lockScreenPowerOffMonitorsOnLock": false,
+ "lockAtStartup": false,
+ "enableFprint": false,
+ "maxFprintTries": 15,
+ "enableU2f": false,
+ "u2fMode": "or",
+ "lockScreenActiveMonitor": "all",
+ "lockScreenInactiveColor": "#000000",
+ "lockScreenNotificationMode": 2,
+ "hideBrightnessSlider": false,
+ "notificationTimeoutLow": 5000,
+ "notificationTimeoutNormal": 5000,
+ "notificationTimeoutCritical": 0,
+ "notificationCompactMode": false,
+ "notificationPopupPosition": 0,
+ "notificationAnimationSpeed": 1,
+ "notificationCustomAnimationDuration": 400,
+ "notificationHistoryEnabled": true,
+ "notificationHistoryMaxCount": 50,
+ "notificationHistoryMaxAgeDays": 7,
+ "notificationHistorySaveLow": true,
+ "notificationHistorySaveNormal": true,
+ "notificationHistorySaveCritical": true,
+ "notificationRules": [],
+ "osdAlwaysShowValue": true,
+ "osdPosition": 6,
+ "osdVolumeEnabled": true,
+ "osdMediaVolumeEnabled": true,
+ "osdMediaPlaybackEnabled": false,
+ "osdBrightnessEnabled": true,
+ "osdIdleInhibitorEnabled": true,
+ "osdMicMuteEnabled": true,
+ "osdCapsLockEnabled": true,
+ "osdPowerProfileEnabled": true,
+ "osdAudioOutputEnabled": true,
+ "powerActionConfirm": true,
+ "powerActionHoldDuration": 0.25,
+ "powerMenuActions": [
+ "reboot",
+ "logout",
+ "poweroff",
+ "lock",
+ "suspend",
+ "restart"
+ ],
+ "powerMenuDefaultAction": "logout",
+ "powerMenuGridLayout": true,
+ "customPowerActionLock": "",
+ "customPowerActionLogout": "",
+ "customPowerActionSuspend": "",
+ "customPowerActionHibernate": "",
+ "customPowerActionReboot": "",
+ "customPowerActionPowerOff": "",
+ "updaterHideWidget": false,
+ "updaterUseCustomCommand": false,
+ "updaterCustomCommand": "",
+ "updaterTerminalAdditionalParams": "",
+ "displayNameMode": "system",
+ "screenPreferences": {},
+ "showOnLastDisplay": {},
+ "niriOutputSettings": {},
+ "hyprlandOutputSettings": {},
+ "displayProfiles": {},
+ "activeDisplayProfile": {},
+ "displayProfileAutoSelect": false,
+ "displayShowDisconnected": false,
+ "displaySnapToEdge": true,
+ "barConfigs": [
+ {
+ "id": "default",
+ "name": "Main Bar",
+ "enabled": true,
+ "position": 0,
+ "screenPreferences": [
+ "all"
+ ],
+ "showOnLastDisplay": true,
+ "leftWidgets": [
+ {
+ "id": "launcherButton",
+ "enabled": true
+ },
+ {
+ "id": "clock",
+ "enabled": true
+ },
+ {
+ "id": "weather",
+ "enabled": true
+ },
+ {
+ "id": "workspaceSwitcher",
+ "enabled": true
+ },
+ {
+ "id": "music",
+ "enabled": true,
+ "mediaSize": 2
+ },
+ {
+ "id": "controlCenterButton",
+ "enabled": true,
+ "showNetworkIcon": false,
+ "showBluetoothIcon": false,
+ "showAudioIcon": true,
+ "showAudioPercent": true,
+ "showVpnIcon": false,
+ "showBrightnessIcon": false,
+ "showBrightnessPercent": false,
+ "showMicIcon": false,
+ "showMicPercent": false,
+ "showBatteryIcon": false,
+ "showPrinterIcon": false,
+ "showScreenSharingIcon": false
+ }
+ ],
+ "centerWidgets": [],
+ "rightWidgets": [
+ {
+ "id": "keyboard_layout_name",
+ "enabled": true,
+ "keyboardLayoutNameCompactMode": true
+ },
+ {
+ "id": "cpuUsage",
+ "enabled": true,
+ "minimumWidth": true
+ },
+ {
+ "id": "cpuTemp",
+ "enabled": true,
+ "minimumWidth": true
+ },
+ {
+ "id": "memUsage",
+ "enabled": true,
+ "minimumWidth": true,
+ "showSwap": false
+ },
+ {
+ "id": "powerUsagePlugin",
+ "enabled": true
+ },
+ {
+ "id": "battery",
+ "enabled": true
+ },
+ {
+ "id": "notificationButton",
+ "enabled": true
+ },
+ {
+ "id": "controlCenterButton",
+ "enabled": true,
+ "showAudioIcon": false,
+ "showAudioPercent": false,
+ "showBrightnessIcon": false,
+ "showBrightnessPercent": false,
+ "showMicPercent": false,
+ "showBatteryIcon": false,
+ "showScreenSharingIcon": true
+ },
+ {
+ "id": "systemTray",
+ "enabled": true
+ }
+ ],
+ "spacing": 0,
+ "innerPadding": 4,
+ "bottomGap": 0,
+ "transparency": 0.89,
+ "widgetTransparency": 1,
+ "squareCorners": true,
+ "noBackground": false,
+ "maximizeWidgetIcons": false,
+ "maximizeWidgetText": false,
+ "removeWidgetPadding": false,
+ "widgetPadding": 8,
+ "gothCornersEnabled": false,
+ "gothCornerRadiusOverride": false,
+ "gothCornerRadiusValue": 12,
+ "borderEnabled": true,
+ "borderColor": "secondary",
+ "borderOpacity": 1,
+ "borderThickness": 1,
+ "widgetOutlineEnabled": false,
+ "widgetOutlineColor": "primary",
+ "widgetOutlineOpacity": 1,
+ "widgetOutlineThickness": 1,
+ "fontScale": 1.1,
+ "iconScale": 1.1,
+ "autoHide": false,
+ "autoHideDelay": 250,
+ "showOnWindowsOpen": false,
+ "openOnOverview": true,
+ "visible": true,
+ "popupGapsAuto": true,
+ "popupGapsManual": 4,
+ "maximizeDetection": true,
+ "scrollEnabled": true,
+ "scrollXBehavior": "column",
+ "scrollYBehavior": "workspace",
+ "shadowIntensity": 0,
+ "shadowOpacity": 39,
+ "shadowColorMode": "text",
+ "shadowCustomColor": "#000000",
+ "clickThrough": false
+ }
+ ],
+ "desktopClockEnabled": false,
+ "desktopClockStyle": "analog",
+ "desktopClockTransparency": 0.8,
+ "desktopClockColorMode": "primary",
+ "desktopClockCustomColor": {
+ "r": 1,
+ "g": 1,
+ "b": 1,
+ "a": 1,
+ "hsvHue": -1,
+ "hsvSaturation": 0,
+ "hsvValue": 1,
+ "hslHue": -1,
+ "hslSaturation": 0,
+ "hslLightness": 1,
+ "valid": true
+ },
+ "desktopClockShowDate": true,
+ "desktopClockShowAnalogNumbers": false,
+ "desktopClockShowAnalogSeconds": true,
+ "desktopClockX": -1,
+ "desktopClockY": -1,
+ "desktopClockWidth": 280,
+ "desktopClockHeight": 180,
+ "desktopClockDisplayPreferences": [
+ "all"
+ ],
+ "systemMonitorEnabled": false,
+ "systemMonitorShowHeader": true,
+ "systemMonitorTransparency": 0.8,
+ "systemMonitorColorMode": "primary",
+ "systemMonitorCustomColor": {
+ "r": 1,
+ "g": 1,
+ "b": 1,
+ "a": 1,
+ "hsvHue": -1,
+ "hsvSaturation": 0,
+ "hsvValue": 1,
+ "hslHue": -1,
+ "hslSaturation": 0,
+ "hslLightness": 1,
+ "valid": true
+ },
+ "systemMonitorShowCpu": true,
+ "systemMonitorShowCpuGraph": true,
+ "systemMonitorShowCpuTemp": true,
+ "systemMonitorShowGpuTemp": false,
+ "systemMonitorGpuPciId": "",
+ "systemMonitorShowMemory": true,
+ "systemMonitorShowMemoryGraph": true,
+ "systemMonitorShowNetwork": true,
+ "systemMonitorShowNetworkGraph": true,
+ "systemMonitorShowDisk": true,
+ "systemMonitorShowTopProcesses": false,
+ "systemMonitorTopProcessCount": 3,
+ "systemMonitorTopProcessSortBy": "cpu",
+ "systemMonitorGraphInterval": 60,
+ "systemMonitorLayoutMode": "auto",
+ "systemMonitorX": -1,
+ "systemMonitorY": -1,
+ "systemMonitorWidth": 320,
+ "systemMonitorHeight": 480,
+ "systemMonitorDisplayPreferences": [
+ "all"
+ ],
+ "systemMonitorVariants": [],
+ "desktopWidgetPositions": {},
+ "desktopWidgetGridSettings": {
+ "HDMI-A-1": {
+ "enabled": true
+ }
+ },
+ "desktopWidgetInstances": [],
+ "desktopWidgetGroups": [],
+ "builtInPluginSettings": {
+ "dms_settings_search": {
+ "trigger": "?"
+ }
+ },
+ "clipboardEnterToPaste": false,
+ "launcherPluginVisibility": {
+ "calculator": {
+ "allowWithoutTrigger": true
+ }
+ },
+ "launcherPluginOrder": [],
+ "configVersion": 5
+} \ No newline at end of file
diff --git a/dotfiles/.config/alacritty/alacritty.toml b/dotfiles/.config/alacritty/alacritty.toml
index 93aaf56..a91ca9b 100644
--- a/dotfiles/.config/alacritty/alacritty.toml
+++ b/dotfiles/.config/alacritty/alacritty.toml
@@ -19,7 +19,7 @@ multiplier = 10
[window]
blur = true
dynamic_padding = true
-opacity = 1
+opacity = 0.94
padding = { x = 2, y = 2 }
[[hints.enabled]]
diff --git a/dotfiles/.config/beets/config.yaml b/dotfiles/.config/beets/config.yaml
index f6f2a28..b5eb190 100644
--- a/dotfiles/.config/beets/config.yaml
+++ b/dotfiles/.config/beets/config.yaml
@@ -1,5 +1,5 @@
directory: "~/music"
-plugins: convert fetchart embedart
+plugins: musicbrainz convert fetchart embedart
convert:
auto: no
never_convert_lossy_files: yes
diff --git a/dotfiles/.config/calcurse/conf b/dotfiles/.config/calcurse/conf
new file mode 100644
index 0000000..d1b5f1d
--- /dev/null
+++ b/dotfiles/.config/calcurse/conf
@@ -0,0 +1,33 @@
+appearance.calendarview=monthly
+appearance.compactpanels=no
+appearance.defaultpanel=todo
+appearance.layout=1
+appearance.headerline=yes
+appearance.eventseparator=yes
+appearance.dayseparator=yes
+appearance.emptyline=yes
+appearance.emptyday=--
+appearance.notifybar=yes
+appearance.sidebarwidth=38
+appearance.theme=cyan on default
+appearance.todoview=hide-completed
+appearance.headingpos=right-justified
+daemon.enable=no
+daemon.log=no
+format.inputdate=1
+format.notifydate=%a %F
+format.notifytime=%T
+format.appointmenttime=%H:%M
+format.outputdate=%D
+format.dayheading=%B %e, %Y
+general.autogc=no
+general.autosave=yes
+general.confirmdelete=yes
+general.confirmquit=yes
+general.firstdayofweek=monday
+general.multipledays=yes
+general.periodicsave=0
+general.systemevents=yes
+notification.command=printf '\a'
+notification.notifyall=flagged-only
+notification.warning=300
diff --git a/dotfiles/.config/calcurse/hooks/post-save b/dotfiles/.config/calcurse/hooks/post-save
new file mode 100755
index 0000000..d797649
--- /dev/null
+++ b/dotfiles/.config/calcurse/hooks/post-save
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+data_dir="$HOME/.calcurse"
+config_dir="$HOME/.calcurse"
+
+if [ ! -d "$data_dir" ]; then
+ data_dir="${XDG_DATA_HOME:-$HOME/.local/share}/calcurse"
+ config_dir="${XDG_CONFIG_HOME:-$HOME/.config}/calcurse"
+fi
+
+cd "$data_dir" || exit
+
+# Do not do anything when synchronizing with a CalDAV server.
+[ -f caldav/lock ] && exit
+
+# Run the CalDAV synchronization script.
+if [ -d caldav ] && command -v calcurse-caldav >/dev/null; then
+ (
+ date="$(date +'%b %d %H:%M:%S')"
+ notify-send "📅 Calcurse" "Saving and syncing with caldav server..."
+ echo "$date Running calcurse-caldav from the post-save hook..."
+ timeout 60 calcurse-caldav
+ rc=$?
+ if [ $rc -eq 124 ]; then
+ notify-send "📅 Calcurse" "❌ Syncing timed out"
+ elif [ $rc -gt 0 ]; then
+ notify-send "📅 Calcurse" "❌ Syncing failed (see logs)"
+ else
+ notify-send "📅 Calcurse" "Calendar saved and synced"
+ fi
+ echo
+ rm caldav/lock
+ ) >>caldav/log 2>&1
+fi
diff --git a/dotfiles/.config/calcurse/hooks/pre-load b/dotfiles/.config/calcurse/hooks/pre-load
new file mode 100755
index 0000000..20787fe
--- /dev/null
+++ b/dotfiles/.config/calcurse/hooks/pre-load
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+[ -d "$HOME/.calcurse" ] && data_dir="$HOME/.calcurse" || data_dir="${XDG_DATA_HOME:-$HOME/.local/share}/calcurse"
+
+cd "$data_dir" || exit
+
+# Do not do anything when synchronizing with a CalDAV server.
+[ -f caldav/lock ] && exit
+
+# Run the CalDAV synchronization script.
+if [ -d caldav ] && command -v calcurse-caldav >/dev/null; then
+ (
+ date="$(date +'%b %d %H:%M:%S')"
+ notify-send "📅 Calcurse" "Loading and syncing with caldav server..."
+ echo "$date Running calcurse-caldav from the pre-load hook..."
+ timeout 60 calcurse-caldav
+ rc=$?
+ if [ $rc -eq 124 ]; then
+ notify-send "📅 Calcurse" "❌ Syncing timed out"
+ elif [ $rc -gt 0 ]; then
+ notify-send "📅 Calcurse" "❌ Syncing failed (see logs)"
+ else
+ notify-send "📅 Calcurse" "Calendar synced"
+ fi
+ echo
+ rm caldav/lock
+ ) >>caldav/log 2>&1
+fi
diff --git a/dotfiles/.config/calcurse/keys b/dotfiles/.config/calcurse/keys
new file mode 100644
index 0000000..3304bbb
--- /dev/null
+++ b/dotfiles/.config/calcurse/keys
@@ -0,0 +1,56 @@
+#
+# Calcurse keys configuration file
+#
+# In this file the keybindings used by Calcurse are defined.
+# It is generated automatically by Calcurse and is maintained
+# via the key configuration menu of the interactive user
+# interface. It should not be edited directly.
+
+generic-cancel ESC
+generic-select SPC
+generic-credits @
+generic-help ?
+generic-quit q Q
+generic-save s S ^S
+generic-reload R
+generic-copy c
+generic-paste p ^V
+generic-change-view TAB
+generic-prev-view KEY_BTAB
+generic-import i I
+generic-export x X
+generic-goto g G
+generic-other-cmd o O
+generic-config-menu C
+generic-redraw ^R
+generic-add-appt ^A
+generic-add-todo ^T
+generic-prev-day T ^H
+generic-next-day t ^L
+generic-prev-week W ^K
+generic-next-week w
+generic-prev-month M
+generic-next-month m
+generic-prev-year Y
+generic-next-year y
+generic-scroll-down ^N
+generic-scroll-up ^P
+generic-goto-today ^G
+generic-command :
+move-right l L RGT
+move-left h H LFT
+move-down j J DWN
+move-up k K UP
+start-of-week 0
+end-of-week $
+add-item a A
+del-item d D
+edit-item e E
+view-item v V RET
+pipe-item |
+flag-item !
+repeat r
+edit-note n N
+view-note >
+raise-priority +
+lower-priority -
diff --git a/dotfiles/.config/fontconfig/fonts.conf b/dotfiles/.config/fontconfig/fonts.conf
index 144d7e5..d12f5c7 100644
--- a/dotfiles/.config/fontconfig/fonts.conf
+++ b/dotfiles/.config/fontconfig/fonts.conf
@@ -7,6 +7,7 @@
<family>IBM Plex Serif</family>
<family>JetBrainsMono NF</family>
<family>Noto Color Emoji</family>
+ <family>Sarasa UI J</family>
</prefer>
</alias>
<alias>
@@ -15,6 +16,7 @@
<family>IBM Plex Sans</family>
<family>JetBrainsMono NF</family>
<family>Noto Color Emoji</family>
+ <family>Sarasa UI J</family>
</prefer>
</alias>
<alias>
@@ -23,6 +25,7 @@
<family>IBM Plex Sans</family>
<family>JetBrainsMono NF</family>
<family>Noto Color Emoji</family>
+ <family>Sarasa UI J</family>
</prefer>
</alias>
<alias>
@@ -30,6 +33,7 @@
<prefer>
<family>JetBrainsMono NF</family>
<family>Noto Color Emoji</family>
+ <family>Sarasa Mono J</family>
</prefer>
</alias>
</fontconfig>
diff --git a/dotfiles/.config/lf/lfrc b/dotfiles/.config/lf/lfrc
index 4069f05..72d39c7 100644
--- a/dotfiles/.config/lf/lfrc
+++ b/dotfiles/.config/lf/lfrc
@@ -149,7 +149,7 @@ map i push A<a-b><a-b><a-f> # rename before extention
map a push A<a-b> # rename after extention
map <c-n> push :mkdir<space>
map <c-t> push :$touch<space>
-map <c-r> reload
+map r reload
map <enter> shell
map D delete
map <enter> shell
@@ -162,7 +162,7 @@ map Y :yank-path
map L $LESSOPEN='| ~/.local/bin/scope %s' less -r $f # open file preview in pager
map P hard_link
map <a-p> soft_link
-map r archive
+map R archive
# Mouse bindings
map <m-3> :dragon
diff --git a/dotfiles/.config/mimeapps.list b/dotfiles/.config/mimeapps.list
index 374bff8..c6f9ba6 100644
--- a/dotfiles/.config/mimeapps.list
+++ b/dotfiles/.config/mimeapps.list
@@ -1,6 +1,7 @@
[Default Applications]
application/pdf=org.pwmt.zathura.desktop;
application/epub+zip=org.pwmt.zathura.desktop;
+application/x-fictionbook+xml=org.pwmt.zathura.desktop;
application/rdf+xml=org.qutebrowser.qutebrowser.desktop;
application/xhtml+xml=org.qutebrowser.qutebrowser.desktop;
application/xml=org.qutebrowser.qutebrowser.desktop;
diff --git a/dotfiles/.config/mpv/input.conf b/dotfiles/.config/mpv/input.conf
index 6e789ac..2798fee 100644
--- a/dotfiles/.config/mpv/input.conf
+++ b/dotfiles/.config/mpv/input.conf
@@ -205,6 +205,8 @@ k add volume 2
s cycle sub
S cycle sub down
+Ctrl+s cycle secondary-sid
+Ctrl+S cycle secondary-sid down
a cycle audio
A cycle audio down
diff --git a/dotfiles/.config/mpv/mpv.conf b/dotfiles/.config/mpv/mpv.conf
index 136a5e6..c0d4e43 100644
--- a/dotfiles/.config/mpv/mpv.conf
+++ b/dotfiles/.config/mpv/mpv.conf
@@ -7,8 +7,10 @@ slang=en,eng,es,spa,ru,rus
osd-font=monospace
osd-msg3="${?core-idle==yes:}${?core-idle==no:} ${time-pos}/${duration} ${media-title}"
input-ipc-server=/tmp/mpvsock
+keep-open=yes
sub-auto=fuzzy
+sub-file-paths=sub:subs:subtitles
ytdl-format="bestvideo[height<=1440]+bestaudio"
diff --git a/dotfiles/.config/niri/config.kdl b/dotfiles/.config/niri/config.kdl
index f3eb4db..cd1f636 100644
--- a/dotfiles/.config/niri/config.kdl
+++ b/dotfiles/.config/niri/config.kdl
@@ -12,7 +12,7 @@ input {
// You can set rules, model, layout, variant and options.
// For more information, see xkeyboard-config(7).
layout "us,es,ru"
- options "lv3:ralt_switch,grp:alt_shift_toggle,misc:typo,caps:escape,grp_led:caps"
+ options "lv3:ralt_switch,grp:alt_space_toggle,misc:typo,caps:escape_shifted_capslock"
}
}
@@ -65,50 +65,9 @@ cursor {
hide-when-typing
}
-
-// You can configure outputs by their name, which you can find
-// by running `niri msg outputs` while inside a niri instance.
-// The built-in laptop monitor is usually called "eDP-1".
-// Find more information on the wiki:
-// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
-// Remember to uncomment the node by removing "/-"!
-output "eDP-1" {
- // Uncomment this line to disable this output.
- // off
-
- background-color "#000000"
-
- // Resolution and, optionally, refresh rate of the output.
- // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
- // If the refresh rate is omitted, niri will pick the highest refresh rate
- // for the resolution.
- // If the mode is omitted altogether or is invalid, niri will pick one automatically.
- // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
- // mode "1920x1080@120.030"
-
- // You can use integer or fractional scale, for example use 1.5 for 150% scale.
- // scale 2
-
- // Transform allows to rotate the output counter-clockwise, valid values are:
- // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
- // transform "normal"
-
- // Position of the output in the global coordinate space.
- // This affects directional monitor actions like "focus-monitor-left", and cursor movement.
- // The cursor can only move between directly adjacent outputs.
- // Output scale and rotation has to be taken into account for positioning:
- // outputs are sized in logical, or scaled, pixels.
- // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
- // so to put another output directly adjacent to it on the right, set its x to 1920.
- // If the position is unset or results in an overlap, the output is instead placed
- // automatically.
- position x=0 y=800
-}
-
-output "DP-1" {
- background-color "#000000"
- position x=1536 y=0
- //mode "2560x1440@165.000"
+overview {
+ zoom 0.33
+ backdrop-color "#00807F"
}
// Settings that influence how windows are positioned and sized.
@@ -116,7 +75,9 @@ output "DP-1" {
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
- gaps 5
+ gaps 10
+
+ background-color "#00000000"
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
@@ -203,7 +164,7 @@ layout {
// active-color "#5b8277"
// inactive-color "#4d4d42"
- active-gradient from="#1f5c9a" to="#99d0b5" angle=60
+ active-gradient from="#89b6a0" to="#0fc0d0" angle=90
inactive-gradient from="#252832" to="#676775" angle=45
}
@@ -250,24 +211,32 @@ layout {
// off
// hide-when-single-tab
place-within-column
- gap 3
- width 6
+ gap 0
+ width 10
length total-proportion=0.8
// position "bottom"
- gaps-between-tabs 3
- // corner-radius 8
- active-color "#99d0b5"
- // inactive-color "gray"
- active-gradient from="#1f5c9a" to="#99d0b5" angle=180
- inactive-gradient from="#252832" to="#676775" angle=180
+ gaps-between-tabs 6
+ corner-radius 2
+ // active-color "#89b6a0"
+ // inactive-color "#ccbe99"
+ active-gradient from="#0fc0d0" to="#89b6a0" angle=180
+ inactive-gradient from="#000000" to="#ccbe99" angle=180
}
}
-// Add lines like this to spawn processes at startup.
-// Note that running niri as a session supports xdg-desktop-autostart,
-// which may be more convenient to use.
-// See the binds section below for more spawn examples.
-// spawn-at-startup "alacritty" "-e" "fish"
+gestures {
+ dnd-edge-view-scroll {
+ trigger-width 200
+ delay-ms 200
+ max-speed 4000
+ }
+
+ dnd-edge-workspace-switch {
+ trigger-height 100
+ delay-ms 200
+ max-speed 4000
+ }
+}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
@@ -295,6 +264,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
@@ -306,12 +281,22 @@ layer-rule {
}
layer-rule {
- match namespace="notifications"
match namespace="rofi"
shadow { on; }
}
+layer-rule {
+ match layer="top"
+ match layer="overlay"
+ match namespace="notifications"
+ match namespace="rofi"
+
+ background-effect {
+ xray false
+ }
+}
+
// Work around WezTerm's initial configure bug
// by setting an empty default-column-width.
window-rule {
@@ -324,21 +309,35 @@ window-rule {
window-rule {
match app-id="GLava"
+ match app-id="com.libretro.RetroArch"
+
border { off; }
shadow { off; }
}
window-rule {
- match app-id="Alacritty"
+ match app-id=r#"^[aA]+lacritty"#
match app-id="Mattermost"
+ match app-id="org.telegram.desktop"
+
+ default-column-width { fixed 770; }
+
+ background-effect {
+ blur true
+ xray false
+ }
+}
+
+window-rule {
+ match app-id="org.pwmt.zathura"
- default-column-width { proportion 0.31; }
+ default-column-width { fixed 1100; }
}
window-rule {
match app-id="org.qutebrowser.qutebrowser"
- default-column-width { proportion 0.69; }
+ default-column-width { fixed 1150; }
}
// Example: block out two password managers from screen capture.
@@ -361,51 +360,45 @@ 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"
+spawn-at-startup "dsearch" "serve"
+spawn-at-startup "dms" "run"
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" "icon-theme" "Arc"
+// 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"
-
-// Just a nice jingle on startup because why not
-spawn-at-startup "canberra-gtk-play" "-i" "Oxygen-Sys-App-Positive"
-
binds {
- // Keys consist of modifiers separated by + signs, followed by an XKB key name
- // in the end. To find an XKB name for a particular key, you may use a program
- // like wev.
- //
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
- // Mod-Shift-/, which is usually the same as Mod-?,
- // shows a list of important hotkeys.
- Mod+Shift+Slash { show-hotkey-overlay; }
-
- // Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+Return { spawn "alacritty"; }
- Mod+D { spawn "rofi" "-show" "drun" "-sidebar-mode" "-modi" "drun,run,filebrowser,ssh,combi"; }
- Mod+X { spawn "lock-color"; }
- Mod+Shift+X { spawn "lock-color" "screenon"; }
+
+ // Noctalia
+ Mod+S { toggle-overview; }
+ XF86VoiceCommand { toggle-overview; } // For my remote
+
+ // Keyboard pointer control
+ Mod+V { spawn "wl-kbptr" "-o" "modes=floating,click" "-o" "mode_floating.source=detect"; }
+ Mod+Shift+V { spawn "wl-kbptr" "-o" "modes=tile,bisect"; }
// Example volume keys mappings for PipeWire & WirePlumber.
// The allow-when-locked=true property makes them work even when the session is locked.
@@ -415,6 +408,10 @@ binds {
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
+ XF86AudioPrev allow-when-locked=true { spawn "lmc" "prev"; }
+ XF86AudioPlay allow-when-locked=true { spawn "lmc" "toggle"; }
+ XF86AudioNext allow-when-locked=true { spawn "lmc" "next"; }
+
Mod+Shift+F5 allow-when-locked=true { spawn "lmc" "back" "5"; }
Mod+F5 allow-when-locked=true { spawn "lmc" "prev"; }
Mod+F6 allow-when-locked=true { spawn "lmc" "toggle"; }
@@ -516,22 +513,22 @@ binds {
// To avoid scrolling through workspaces really fast, you can use
// the cooldown-ms property. The bind will be rate-limited to this value.
// You can set a cooldown on any bind, but it's most useful for the wheel.
- Mod+WheelScrollDown cooldown-ms=200 { focus-workspace-down; }
- Mod+WheelScrollUp cooldown-ms=200 { focus-workspace-up; }
- Mod+Ctrl+WheelScrollDown cooldown-ms=200 { move-column-to-workspace-down; }
- Mod+Ctrl+WheelScrollUp cooldown-ms=200 { move-column-to-workspace-up; }
+ Mod+WheelScrollDown { focus-workspace-down; }
+ Mod+WheelScrollUp { focus-workspace-up; }
+ Mod+Ctrl+WheelScrollDown { move-column-to-workspace-down; }
+ Mod+Ctrl+WheelScrollUp { move-column-to-workspace-up; }
- Mod+WheelScrollRight cooldown-ms=200 { focus-column-right; }
- Mod+WheelScrollLeft cooldown-ms=200 { focus-column-left; }
- Mod+Ctrl+WheelScrollRight cooldown-ms=200 { move-column-right; }
- Mod+Ctrl+WheelScrollLeft cooldown-ms=200 { move-column-left; }
+ Mod+WheelScrollRight { focus-column-right; }
+ Mod+WheelScrollLeft { focus-column-left; }
+ Mod+Ctrl+WheelScrollRight { move-column-right; }
+ Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
- Mod+Shift+WheelScrollDown cooldown-ms=200 { focus-column-right; }
- Mod+Shift+WheelScrollUp cooldown-ms=200 { focus-column-left; }
- Mod+Ctrl+Shift+WheelScrollDown cooldown-ms=200 { move-column-right; }
- Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=200 { move-column-left; }
+ Mod+Shift+WheelScrollDown { focus-column-right; }
+ Mod+Shift+WheelScrollUp { focus-column-left; }
+ Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
+ Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
// Similarly, you can bind touchpad scroll "ticks".
// Touchpad scrolling is continuous, so for these binds it is split into
@@ -598,8 +595,9 @@ binds {
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
- Mod+F { maximize-column; }
+ Mod+F { maximize-window-to-edges; }
Mod+Shift+F { fullscreen-window; }
+ Mod+Ctrl+F { maximize-column; }
Mod+C { center-column; }
// Finer width adjustments.
@@ -610,12 +608,12 @@ binds {
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
- Mod+Minus { set-column-width "-10%"; }
- Mod+Equal { set-column-width "+10%"; }
+ Mod+Minus { set-column-width "-5%"; }
+ Mod+Equal { set-column-width "+5%"; }
// Finer height adjustments when in column with other windows.
- Mod+Shift+Minus { set-window-height "-10%"; }
- Mod+Shift+Equal { set-window-height "+10%"; }
+ Mod+Shift+Minus { set-window-height "-5%"; }
+ Mod+Shift+Equal { set-window-height "+5%"; }
// Switch between floating and tiling.
Mod+Shift+Space { toggle-window-floating; }
@@ -626,34 +624,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"; }
@@ -666,6 +646,7 @@ binds {
Mod+M { spawn "sh" "-c" "$TERM -e ncmpcpp"; }
Mod+A { spawn "sh" "-c" "$TERM -T 'neomutt' -e neomutt"; }
Mod+N { spawn "sh" "-c" "$TERM -T 'newsboat' -e newsboat && killall -42 waybar"; }
+ Mod+B { spawn "sh" "-c" "$TERM -T 'calcurse' -e calcurse"; }
Mod+T { spawn "toggletorrent"; }
Mod+Ctrl+T { spawn "launch-transmission"; }
@@ -676,6 +657,11 @@ 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"
+include "dms/binds.kdl"
+include "dms/colors.kdl"
+include "dms/layout.kdl"
+include "dms/cursor.kdl"
+include "dms/wpblur.kdl"
diff --git a/dotfiles/.config/niri/dms/alttab.kdl b/dotfiles/.config/niri/dms/alttab.kdl
new file mode 100644
index 0000000..89f82bf
--- /dev/null
+++ b/dotfiles/.config/niri/dms/alttab.kdl
@@ -0,0 +1,10 @@
+// ! DO NOT EDIT !
+ // ! AUTO-GENERATED BY DMS !
+ // ! CHANGES WILL BE OVERWRITTEN !
+ // ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
+
+ recent-windows {
+ highlight {
+ corner-radius 1
+ }
+ }
diff --git a/dotfiles/.config/niri/dms/binds.kdl b/dotfiles/.config/niri/dms/binds.kdl
new file mode 100644
index 0000000..c324b2e
--- /dev/null
+++ b/dotfiles/.config/niri/dms/binds.kdl
@@ -0,0 +1,88 @@
+binds {
+ // === Application Launchers ===
+ Mod+D hotkey-overlay-title="Application Launcher" {
+ spawn "dms" "ipc" "call" "spotlight" "toggle";
+ }
+ Mod+Shift+D {
+ spawn-sh "dms ipc call widget openWith launcherButton files";
+ }
+ // Mod+V hotkey-overlay-title="Clipboard Manager" {
+ // spawn "dms" "ipc" "call" "clipboard" "toggle";
+ // }
+
+ Mod+Shift+E hotkey-overlay-title="Power Menu: Toggle" { spawn "dms" "ipc" "call" "powermenu" "toggle"; }
+
+ Ctrl+Shift+Escape hotkey-overlay-title="Task Manager" {
+ spawn "dms" "ipc" "call" "processlist" "focusOrToggle";
+ }
+ Mod+Backslash { spawn-sh "dms ipc call dash open overview"; }
+ Mod+Shift+Backslash { spawn-sh "dms ipc call dash open weather"; }
+ Mod+Ctrl+Backslash { spawn-sh "dms ipc call dash open media"; }
+ Mod+F2 { spawn-sh "dms ipc call control-center toggle"; }
+ Mod+F3 hotkey-overlay-title="Settings" {
+ spawn "dms" "ipc" "call" "settings" "focusOrToggle";
+ }
+
+ Mod+Ctrl+Space { spawn "dms" "ipc" "call" "notifications" "dismissAllPopups"; }
+ Mod+Shift+Ctrl+Space hotkey-overlay-title="Notification Center" {
+ spawn "dms" "ipc" "call" "notifications" "toggle";
+ }
+
+ // === Security ===
+ Mod+X hotkey-overlay-title="Lock Screen" {
+ spawn "dms" "ipc" "call" "lock" "lock";
+ }
+
+ // === Audio Controls ===
+ // XF86AudioRaiseVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "increment" "3";
+ // }
+ // XF86AudioLowerVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "decrement" "3";
+ // }
+ // XF86AudioMute allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "mute";
+ // }
+ // XF86AudioMicMute allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "audio" "micmute";
+ // }
+ // XF86AudioPause allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "playPause";
+ // }
+ // XF86AudioPlay allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "playPause";
+ // }
+ // XF86AudioPrev allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "previous";
+ // }
+ // XF86AudioNext allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "next";
+ // }
+ // Ctrl+XF86AudioRaiseVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "increment" "3";
+ // }
+ // Ctrl+XF86AudioLowerVolume allow-when-locked=true {
+ // spawn "dms" "ipc" "call" "mpris" "decrement" "3";
+ // }
+
+ // === Brightness Controls ===
+ XF86MonBrightnessUp allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "increment" "5" "";
+ }
+ XF86MonBrightnessDown allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "decrement" "5" "";
+ }
+ Mod+Alt+Up allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "increment" "5" "";
+ }
+ Mod+Alt+Down allow-when-locked=true {
+ spawn "dms" "ipc" "call" "brightness" "decrement" "5" "";
+ }
+
+ // === System Controls ===
+ Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
+}
+
+switch-events {
+ lid-close { spawn "loginctl" "suspend"; }
+}
diff --git a/dotfiles/.config/niri/dms/colors.kdl b/dotfiles/.config/niri/dms/colors.kdl
new file mode 100644
index 0000000..37504be
--- /dev/null
+++ b/dotfiles/.config/niri/dms/colors.kdl
@@ -0,0 +1,39 @@
+// ! Auto-generated file. Do not edit directly.
+// Remove `include "dms/colors.kdl"` from your config to override.
+
+layout {
+ background-color "transparent"
+
+ focus-ring {
+ active-color "#52d7f0"
+ inactive-color "#919191"
+ urgent-color "#ffb4ab"
+ }
+
+ border {
+ active-color "#52d7f0"
+ inactive-color "#919191"
+ urgent-color "#ffb4ab"
+ }
+
+ shadow {
+ color "#00000070"
+ }
+
+ tab-indicator {
+ active-color "#52d7f0"
+ inactive-color "#919191"
+ urgent-color "#ffb4ab"
+ }
+
+ insert-hint {
+ color "#52d7f080"
+ }
+}
+
+recent-windows {
+ highlight {
+ active-color "#004e5a"
+ urgent-color "#ffb4ab"
+ }
+}
diff --git a/dotfiles/.config/niri/dms/cursor.kdl b/dotfiles/.config/niri/dms/cursor.kdl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dotfiles/.config/niri/dms/cursor.kdl
diff --git a/dotfiles/.config/niri/dms/layout.kdl b/dotfiles/.config/niri/dms/layout.kdl
new file mode 100644
index 0000000..224f927
--- /dev/null
+++ b/dotfiles/.config/niri/dms/layout.kdl
@@ -0,0 +1,22 @@
+// ! DO NOT EDIT !
+ // ! AUTO-GENERATED BY DMS !
+ // ! CHANGES WILL BE OVERWRITTEN !
+ // ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
+
+ layout {
+ gaps 6
+
+ border {
+ width 3
+ }
+
+ focus-ring {
+ width 3
+ }
+ }
+ window-rule {
+ geometry-corner-radius 1
+ clip-to-geometry true
+ tiled-state true
+ draw-border-with-background false
+ }
diff --git a/dotfiles/.config/niri/dms/outputs.kdl b/dotfiles/.config/niri/dms/outputs.kdl
new file mode 100644
index 0000000..f56685f
--- /dev/null
+++ b/dotfiles/.config/niri/dms/outputs.kdl
@@ -0,0 +1,14 @@
+// Auto-generated by DMS - do not edit manually
+
+output "HDMI-A-1" {
+ mode "1920x1080@74.973"
+ scale 1
+ position x=0 y=360
+}
+
+output "DP-1" {
+ mode "2560x1440@165.000"
+ scale 1
+ position x=1920 y=0
+}
+
diff --git a/dotfiles/.config/niri/dms/windowrules.kdl b/dotfiles/.config/niri/dms/windowrules.kdl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dotfiles/.config/niri/dms/windowrules.kdl
diff --git a/dotfiles/.config/niri/dms/wpblur.kdl b/dotfiles/.config/niri/dms/wpblur.kdl
new file mode 100644
index 0000000..3d58802
--- /dev/null
+++ b/dotfiles/.config/niri/dms/wpblur.kdl
@@ -0,0 +1,9 @@
+// ! DO NOT EDIT !
+// ! AUTO-GENERATED BY DMS !
+// ! CHANGES WILL BE OVERWRITTEN !
+// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE !
+
+layer-rule {
+ match namespace="dms:blurwallpaper"
+ place-within-backdrop true
+}
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..ae5fc9a
--- /dev/null
+++ b/dotfiles/.config/noctalia/settings.json
@@ -0,0 +1,749 @@
+{
+ "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.05,
+ "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": [
+ ],
+ "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
+ },
+ {
+ "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
+ },
+ {
+ "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"
+ }
+ ],
+ "right": [
+ {
+ "hideWhenZero": true,
+ "hideWhenZeroUnread": false,
+ "iconColor": "none",
+ "id": "NotificationHistory",
+ "showUnreadBadge": true,
+ "unreadBadgeColor": "primary"
+ },
+ {
+ "deviceNativePath": "__default__",
+ "displayMode": "graphic",
+ "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/.config/qutebrowser/config.py b/dotfiles/.config/qutebrowser/config.py
index b2d7492..e1e1fdf 100644
--- a/dotfiles/.config/qutebrowser/config.py
+++ b/dotfiles/.config/qutebrowser/config.py
@@ -73,8 +73,8 @@ c.downloads.remove_finished = 3000
c.url.searchengines = { "DEFAULT": "https://search.rhscz.eu/search?q={}" }
-c.url.default_page = "https://takeoff.mriya.space/"
-c.url.start_pages = "https://takeoff.mriya.space/"
+c.url.default_page = "https://duckduckgo.com/"
+c.url.start_pages = "https://duckduckgo.com/"
## Default fonts
c.fonts.default_size = "11pt"
diff --git a/dotfiles/.config/rofi/config.rasi b/dotfiles/.config/rofi/config.rasi
index 33fce35..b4e5827 100644
--- a/dotfiles/.config/rofi/config.rasi
+++ b/dotfiles/.config/rofi/config.rasi
@@ -17,7 +17,7 @@ configuration {
/* icon-theme: ;*/
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
/* drun-categories: ;*/
-/* drun-show-actions: false;*/
+ drun-show-actions: true;
/* drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
/* drun-url-launcher: "xdg-open";*/
/* disable-history: false;*/
diff --git a/dotfiles/.config/swaylock/config b/dotfiles/.config/swaylock/config
index bb4dec0..19576ae 100644
--- a/dotfiles/.config/swaylock/config
+++ b/dotfiles/.config/swaylock/config
@@ -3,7 +3,7 @@ font=monospace
scaling=fill
indicator-radius=120
show-failed-attempts
-inside-color=#000000bb
+inside-color=#00000033
inside-ver-color=#3f6e90
inside-wrong-color=#b73030
inside-clear-color=#a1a6b2cc
@@ -27,6 +27,6 @@ clock
indicator
image=~/.config/wall1.png
datestr=%a, %F
-effect-blur=10x5
+#effect-blur=10x5
show-keyboard-layout
-layout-bg-color=#000000bb
+layout-bg-color=#00000033
diff --git a/dotfiles/.config/waybar/config b/dotfiles/.config/waybar/config
index 216120f..403da07 100644
--- a/dotfiles/.config/waybar/config
+++ b/dotfiles/.config/waybar/config
@@ -1,225 +1,28 @@
// vim: filetype=json
-{
+[{
"layer": "top",
- "height": 36,
+ "height": 34,
+ "include": [ "~/.config/waybar/modules.json" ],
"modules-left": [
- "sway/workspaces",
+ "clock",
"niri/workspaces",
- "sway/mode",
- "custom/waybar-mpris",
- "pulseaudio"
+ "mpris",
+ "wireplumber"
],
"modules-center": [
- "clock",
- "custom/weather"
],
"modules-right": [
- "custom/rec-status",
- "custom/swaykbd",
+ "custom/weather",
"custom/mail-status",
+ "cpu",
"memory",
"backlight",
"battery#bat0",
"battery#bat1",
"custom/batwatt",
+ "custom/torrent-status",
"network",
"niri/language",
- "custom/torrent-status",
- "tray"
- ],
- "sway/mode": {
- "format": "<span style=\"italic\">{}</span>"
- },
- "custom/waybar-mpris": {
- "return-type": "json",
- "exec": "waybar-mpris --autofocus --text-format=\"%i [%p] %a - %t\" --tooltip-format=\"%t by %a from %A\n%p/%d\n(%P)\" --pause='<span color=\"#5b8277\"></span>' --play='' --max-title 30",
- "on-click": "lmc toggle",
- "on-click-right": "lmc next",
- "max-length": 80
- },
- "mpd": {
- "format": " {stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon} [{elapsedTime:%M:%S}] {artist} - {title}",
- "format-disconnected": " Connection lost ",
- "format-stopped": "  {consumeIcon}{randomIcon}{repeatIcon}{singleIcon} [--:--] -- - --",
- "unknown-tag": "N/A",
- "interval": 2,
- "max-length": 60,
- "consume-icons": {
- "on": " "
- },
- "random-icons": {
- "on": ""
- },
- "repeat-icons": {
- "on": " "
- },
- "single-icons": {
- "on": "[s]"
- },
- "state-icons": {
- "paused": "<span color=\"#b2872f\"></span>",
- "playing": "<span color=\"#5b8277\"></span>"
- },
- "tooltip-format": "MPD now playing: {artist} - {title}",
- "tooltip-format-disconnected": "MPD disconnected"
- },
- "idle_inhibitor": {
- "format": "{icon}",
- "format-icons": {
- "activated": "",
- "deactivated": ""
- }
- },
- "tray": {
- "icon-size": 16,
- "spacing": 10
- },
- "clock": {
- "format": "{:%Y年%m月%d日 %H:%M:%S}",
- "tooltip-format": "{calendar}",
- "calendar": {
- "mode": "year",
- "mode-mon-col": 3
- },
- "interval": 1
- },
- "cpu": {
- "format": "{usage}% ",
- "tooltip": false
- },
- "memory": {
- "format": "<span color=\"#5b8277\"></span> {used:0.3f}G",
- "states": {
- "warning": 90
- },
- "interval": 10
- },
- "temperature": {
- // "thermal-zone": 2,
- // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
- "critical-threshold": 80,
- // "format-critical": "{temperatureC}°C {icon}",
- "format": "{temperatureC}°C {icon}",
- "format-icons": ["", "", ""]
- },
- "backlight": {
- // "device": "acpi_video1",
- "format": "<span color=\"#5b8277\">{icon}</span> {percent}%",
- "format-icons": ["", ""]
- },
- "battery#bat0": {
- "bat": "BAT0",
- "format": "{icon} {capacity}%",
- "format-charging": " <span color=\"#5b8277\"></span> {capacity}%",
- "format-plugged": "<span color=\"#5b8277\"></span> {capacity}%",
- "format-icons": [
- "<span color=\"#b73030\"></span>",
- "<span color=\"#b2872f\"></span>",
- "<span color=\"#5b8277\"></span>",
- "<span color=\"#5b8277\"></span>",
- "<span color=\"#5b8277\"></span>"
- ]
- },
- "battery#bat1": {
- "bat": "BAT1",
- "format": "{icon} {capacity}%",
- "format-charging": " <span color=\"#5b8277\"></span> {capacity}%",
- "format-plugged": "<span color=\"#5b8277\"></span> {capacity}%",
- "format-icons": [
- "<span color=\"#b73030\"></span>",
- "<span color=\"#b2872f\"></span>",
- "<span color=\"#5b8277\"></span>",
- "<span color=\"#5b8277\"></span>",
- "<span color=\"#5b8277\"></span>"
- ]
- },
- "network": {
- // "interface": "wlp2*", // (Optional) To force the use of this interface
- "format-wifi": "<span color=\"#5b8277\"></span> {essid}",
- "format-ethernet": "<span color=\"#5b8277\"></span> {ifname}",
- "format-linked": "<span color=\"#5b8277\"></span> {ifname}",
- "format-disconnected": " disconnected",
- "format-alt": "{ifname}: {ipaddr}/{cidr}",
- "tooltip-format": "{ifname}: {ipaddr}/{cidr}"
- },
- "pulseaudio": {
- "scroll-step": 2, // %, can be a float
- "format": "<span color=\"#5b8277\">{icon}</span> {volume}%",
- "format-bluetooth": "<span color=\"#5b8277\">{icon}</span> {volume}% {format_source}",
- "format-muted": "<span color=\"#b2872f\"></span>",
- "format-source": "{volume}% ",
- "format-source-muted": "",
- "format-icons": {
- "headphone": "",
- "handsfree": "",
- "headset": "",
- "phone": "",
- "portable": "",
- "car": "",
- "default": ["", "", ""]
- },
- "on-click": "$TERMINAL -e ncpamixer"
- },
- "custom/rec-status": {
- "format": "<span color=\"#5b8277\">{}</span>",
- "signal": 5,
- "interval": "once",
- "exec": "barrecstatus"
- },
- "custom/torrent-status": {
- "format": "<span color=\"#5b8277\">{}</span>",
- "signal": 10,
- "interval": "once",
- "exec": "bartorrentstatus"
- },
- "custom/mail-status": {
- "format": "<span color=\"#5b8277\">📧</span> {}",
- "signal": 9,
- "interval": "once",
- "exec": "barmailstatus",
- "tooltip": false
- },
- "custom/pac-status": {
- "format": "<span color=\"#5b8277\"></span> {}",
- "signal": 7,
- "interval": "once",
- "exec": "barpacstatus"
- },
- "custom/news-status": {
- "format": "<span color=\"#5b8277\"></span> {}",
- "signal": 8,
- "interval": "once",
- "exec": "barnewsstatus",
- "tooltip": false
- },
- "custom/weather": {
- "format": "{}",
- "interval": 180,
- "exec": "barweather"
- },
- "custom/ds4battery": {
- "format": "🎮 {}",
- "interval": 180,
- "exec": "bards4battery"
- },
- "custom/batwatt": {
- "return-type": "json",
- "interval": 10,
- "exec-if": "test -e /sys/class/power_supply/BAT0",
- "exec": "barbatwatt",
- "exec-on-event": true,
- "on-click": ""
- },
- "custom/swaykbd": {
- "format": "{}",
- "exec": "swaykbd",
- "tooltip": false
- },
- "niri/language": {
- "on-click": "niri msg action switch-layout next",
- "on-click-right": "niri msg action switch-layout prev",
- "format-en": " 🇺🇸 EN ",
- "format-es": " 🇲🇽 ES ",
- "format-ru": " 🇷🇺 RU "
- }
-}
+ "tray",
+ ]
+}]
diff --git a/dotfiles/.config/waybar/modules.json b/dotfiles/.config/waybar/modules.json
new file mode 100644
index 0000000..7f0f591
--- /dev/null
+++ b/dotfiles/.config/waybar/modules.json
@@ -0,0 +1,181 @@
+{
+ "sway/mode": {
+ "format": "<span style=\"italic\">{}</span>"
+ },
+ "mpris": {
+ "format": "{status_icon} {artist} - {title}",
+ "format-stopped": "{status_icon} - ",
+ "status-icons": {
+ "stopped": "<span color=\"#d6cda3\"></span>",
+ "paused": "<span color=\"#d6cda3\"></span>",
+ "playing": "<span color=\"#5b8277\"></span>"
+ },
+ "artist-len": 20,
+ "title-len": 30
+ },
+ "tray": {
+ "icon-size": 16,
+ "spacing": 10
+ },
+ "clock": {
+ "locale": "ja_JP.UTF-8",
+ "format": "<span font='Sarasa Mono J' weight='600'>{:L%Y年%m月%d日(%a)%H:%M:%S}</span>",
+ "format-alt": "<span font='Sarasa Mono J' weight='600'>{:%H:%M:%S}</span>",
+ "tooltip-format": "<span font='Sarasa Mono J'>{calendar}</span>",
+ "calendar": {
+ "mode": "month",
+ "on-scroll": 1,
+ "format": {
+ "months": "<span size='13pt' weight='600'>{}</span>",
+ "weekdays": "{}",
+ "today": "<span color=\"#b73030\"><b>{}</b></span>"
+ }
+ },
+ "actions": {
+ "on-scroll-up": "shift_up",
+ "on-scroll-down": "shift_down"
+ },
+ "interval": 1
+ },
+ "cpu": {
+ "format": "<span color=\"#d6cda3\"></span> {usage}%",
+ "interval": 3
+ },
+ "memory": {
+ "format": "<span color=\"#d6cda3\"></span> {used:0.3f}G",
+ "states": {
+ "warning": 90
+ },
+ "interval": 10
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 80,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": ["", "", ""]
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "<span color=\"#d6cda3\">{icon}</span> {percent}%",
+ "format-icons": ["", ""]
+ },
+ "battery#bat0": {
+ "bat": "BAT0",
+ "format": "{icon} {capacity}%",
+ "format-charging": "<span color=\"#5b8277\"></span> {capacity}%",
+ "format-plugged": "<span color=\"#5b8277\"></span> {capacity}%",
+ "format-icons": [
+ "<span color=\"#b73030\"></span>",
+ "<span color=\"#b2872f\"></span>",
+ "<span color=\"#5b8277\"></span>",
+ "<span color=\"#5b8277\"></span>",
+ "<span color=\"#5b8277\"></span>"
+ ]
+ },
+ "battery#bat1": {
+ "bat": "BAT1",
+ "format": "{icon} {capacity}%",
+ "format-charging": "<span color=\"#5b8277\"></span> {capacity}%",
+ "format-plugged": "<span color=\"#5b8277\"></span> {capacity}%",
+ "format-icons": [
+ "<span color=\"#b73030\"></span>",
+ "<span color=\"#b2872f\"></span>",
+ "<span color=\"#5b8277\"></span>",
+ "<span color=\"#5b8277\"></span>",
+ "<span color=\"#5b8277\"></span>"
+ ]
+ },
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "<span color=\"#5b8277\"></span>",
+ "format-ethernet": "<span color=\"#5b8277\">󰌘</span>",
+ "format-linked": "<span color=\"#b2872f\">󰲊</span>",
+ "format-disconnected": "<span color=\"#b2872f\">󰌙</span>",
+ "format-disabled": "<span color=\"#b73030\">󰌙</span>",
+ "format-alt": "<span color=\"#d6cda3\">󰌘</span> {ifname}: {bandwidthUpBits}<span color=\"#d6cda3\"></span> {bandwidthDownBits}<span color=\"#d6cda3\"></span>",
+ "tooltip-format": "{ifname}: {essid} {ipaddr}/{cidr} {bandwidthUpBits}<span color=\"#d6cda3\"></span> {bandwidthDownBits}<span color=\"#d6cda3\"></span>",
+ "interval": 3
+ },
+ "wireplumber": {
+ "scroll-step": 2, // %, can be a float
+ "format": "<span color=\"#5b8277\">{icon}</span> {volume}%",
+ "format-bluetooth": "<span color=\"#5b8277\">{icon}</span> {volume}% {format_source}",
+ "format-muted": "<span color=\"#b2872f\"></span>",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "handsfree": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "on-click": "$TERMINAL -e ncpamixer"
+ },
+ "custom/rec-status": {
+ "format": "<span color=\"#5b8277\">{}</span>",
+ "signal": 5,
+ "interval": "once",
+ "exec": "barrecstatus"
+ },
+ "custom/torrent-status": {
+ "format": "<span color=\"#d6cda3\">{}</span>",
+ "signal": 10,
+ "interval": "once",
+ "exec": "bartorrentstatus"
+ },
+ "custom/mail-status": {
+ "format": "<span color=\"#d6cda3\">󰺻 </span>{}",
+ "signal": 9,
+ "interval": "once",
+ "exec": "barmailstatus",
+ "tooltip": false
+ },
+ "custom/pac-status": {
+ "format": " {}",
+ "signal": 7,
+ "interval": "once",
+ "exec": "barpacstatus"
+ },
+ "custom/news-status": {
+ "format": " {}",
+ "signal": 8,
+ "interval": "once",
+ "exec": "barnewsstatus",
+ "tooltip": false
+ },
+ "custom/weather": {
+ "format": "{}",
+ "interval": 180,
+ "exec": "barweather"
+ },
+ "custom/ds4battery": {
+ "format": "🎮 {}",
+ "interval": 180,
+ "exec": "bards4battery"
+ },
+ "custom/batwatt": {
+ "return-type": "json",
+ "interval": 10,
+ "exec-if": "test -e /sys/class/power_supply/BAT0",
+ "exec": "barbatwatt",
+ "exec-on-event": true,
+ "on-click": ""
+ },
+ "custom/swaykbd": {
+ "format": "{}",
+ "exec": "swaykbd",
+ "tooltip": false
+ },
+ "niri/language": {
+ "on-click": "niri msg action switch-layout next",
+ "on-click-right": "niri msg action switch-layout prev",
+ "format-en": " 🇺🇸",
+ "format-es": " 🇲🇽",
+ "format-ru": " 🇷🇺"
+ }
+}
diff --git a/dotfiles/.config/waybar/style.css b/dotfiles/.config/waybar/style.css
index 1871a66..7f8c7ba 100644
--- a/dotfiles/.config/waybar/style.css
+++ b/dotfiles/.config/waybar/style.css
@@ -3,65 +3,26 @@
font-family: monospace;
}
window#waybar {
- background: #000000;
- /* background: linear-gradient(#000000, #151515); */
- color: #f2eccf;
+ background: #1e1c1a;
+ color: #fcf8e2;
min-height: 0;
- border-bottom: 2px solid #33333a;
-}
-#tray,
-#language,
-#custom-torrent-status,
-#workspaces {
- background: #151517;
- margin: 3px 0 3px 0;
- border-style: solid;
- border-color: #33333a;
+ border: 2px solid #33333a;
}
#memory.warning {
color: #b2872f;
}
-#tray{
- border-width: 2px 2px 2px 0;
-}
-#custom-torrent-status{
- border-width: 2px 0 2px 0;
-}
-#language {
- border-width: 2px 0 2px 2px;
-}
-#workspaces {
- padding: 0;
- margin-right: 6px;
- border-width: 2px;
-}
-#workspaces button {
- padding: 0 0.6em;
- color: #fcf8e2;
- border-radius: 0;
- border: 1px solid rgba(0, 0, 0, 0);
-}
-#workspaces button.visible {
- color: #7fac96;
- border-color: #7fac96;
-}
-#workspaces button.focused {
- color: #000000;
- border-color: #7fac96;
- background: linear-gradient(60deg, #5b8277, #99d0b5);
-}
-#workspaces button:hover {
- border: 1px solid #5b8277;
-}
+#cpu,
#mpd,
#tray,
-#clock,
+#mpris,
#memory,
#battery,
#network,
+#language,
#backlight,
-#pulseaudio,
+#workspaces,
#temperature,
+#wireplumber,
#custom-weather,
#custom-swaykbd,
#custom-ds4battery,
@@ -69,12 +30,41 @@ window#waybar {
#custom-pac-status,
#custom-mail-status,
#custom-news-status,
-#custom-waybar-mpris,
#custom-batwatt,
#custom-torrent-status {
color: #fcf8e2;
- padding: 0 6px;
+ padding: 0 0.4em;
+ margin: 2px;
+}
+#clock {
+ font-weight: 500;
+ color: #d6cda3;
+ background: #0d0906;
+ border: 2px inset #1e1e23;
+ margin: 4px 2px 4px 4px;
+ padding: 0 0.4em;
}
-#custom-weather {
- color: #5b8277;
+#workspaces {
+ padding: 0;
+ margin: 6px;
+ background: #4a4842;
+}
+#workspaces button {
+ padding: 0 0.5em;
+ color: #fcf8e2;
+ border-radius: 0;
+ border: 2px solid #1e1e23;
+}
+#workspaces button.visible,
+#workspaces button.active {
+ color: #7fac96;
+ border-color: #7fac96;
+}
+#workspaces button.focused {
+ color: #000000;
+ border-color: #7fac96;
+ background: linear-gradient(60deg, #5b8277, #99d0b5);
+}
+#workspaces button:hover {
+ border-color: #5b8277;
}
diff --git a/dotfiles/.config/wl-kbptr/config b/dotfiles/.config/wl-kbptr/config
new file mode 100644
index 0000000..9d6dbac
--- /dev/null
+++ b/dotfiles/.config/wl-kbptr/config
@@ -0,0 +1,56 @@
+# wl-kbptr can be configured with a configuration file.
+# The file location can be passed with the -c parameter.
+# Othewise the `$XDG_CONFIG_HOME/wl-kbptr/config` file will
+# be loaded if it exits. Below is the default configuration.
+
+[general]
+home_row_keys=
+modes=tile,bisect
+cancellation_status_code=0
+
+[mode_tile]
+label_color=#fffd
+label_select_color=#fd0d
+unselectable_bg_color=#2226
+selectable_bg_color=#0304
+selectable_border_color=#040c
+label_font_family=sans-serif
+label_font_size=8 50% 100
+label_symbols=abcdefghijklmnopqrstuvwxyz
+
+[mode_floating]
+source=stdin
+label_color=#fffd
+label_select_color=#fd0d
+unselectable_bg_color=#2226
+selectable_bg_color=#1718
+selectable_border_color=#040c
+label_font_family=sans-serif
+label_font_size=12 50% 100
+label_symbols=abcdefghijklmnopqrstuvwxyz
+
+[mode_bisect]
+label_color=#fffd
+label_font_size=20
+label_font_family=sans-serif
+label_padding=12
+pointer_size=20
+pointer_color=#e22d
+unselectable_bg_color=#2226
+even_area_bg_color=#0304
+even_area_border_color=#0408
+odd_area_bg_color=#0034
+odd_area_border_color=#0048
+history_border_color=#3339
+
+[mode_split]
+pointer_size=20
+pointer_color=#e22d
+bg_color=#2226
+area_bg_color=#11111188
+vertical_color=#8888ffcc
+horizontal_color=#008800cc
+history_border_color=#3339
+
+[mode_click]
+button=left
diff --git a/dotfiles/.config/zsh/.zshrc b/dotfiles/.config/zsh/.zshrc
index 5684477..327c685 100644
--- a/dotfiles/.config/zsh/.zshrc
+++ b/dotfiles/.config/zsh/.zshrc
@@ -7,12 +7,10 @@ precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
if [ "$USER" = "root" ]; then
- # Make it so that we display root's user@host on the left and colored red so
- # that it is quite clear that we are under root.
- PROMPT=$'\n''%{%}%B%~ ${reset_color}%F{yellow}${vcs_info_msg_0_}%f'$'\n''%F{red}%n%f@%F{red}%m%f %F{green}→%f '
+ # Display root's user colored red so that 'tis quite clear when we are root.
+ PROMPT=$'\n''%F{red}%n@%F{red}%m:%f%B%~ ${reset_color}%F{yellow}${vcs_info_msg_0_}%f'$'\n''%F{green}└%*#%f '
else
- PROMPT=$'\n''%{%}%B%~ ${reset_color}%F{yellow}${vcs_info_msg_0_}%f'$'\n''%F{green}→%f '
- RPROMPT='%{%} %n%f@%F{red}%m%f'
+ PROMPT=$'\n''%{%}%n@%F{red}%m:%f%B%~ ${reset_color}%F{yellow}${vcs_info_msg_0_}%f'$'\n''%F{green}└%*→%f '
fi
zstyle ':vcs_info:git:*' formats ' %b'
diff --git a/dotfiles/.local/bin/barweather b/dotfiles/.local/bin/barweather
index 3fc7f42..a608b80 100755
--- a/dotfiles/.local/bin/barweather
+++ b/dotfiles/.local/bin/barweather
@@ -12,7 +12,7 @@ update_forecast() {
forecast=$(curl -s wttr.in/"$location"?format=1)
if [ ${#forecast} -lt 30 ]; then
- printf "%s\n" "$forecast" > "$cachefile"
+ printf "%s\n" "$forecast" | sed -e 's/ / /g' > "$cachefile"
fi
}
diff --git a/dotfiles/.local/bin/mailsync b/dotfiles/.local/bin/mailsync
index d67db06..7c644f6 100755
--- a/dotfiles/.local/bin/mailsync
+++ b/dotfiles/.local/bin/mailsync
@@ -39,7 +39,7 @@ do
done
if [ $thereis = 1 ]; then
- mpv --really-quiet "$HOME/.local/share/soundalerts/mail.ogg"
+ mpv --keep-open=no --really-quiet "$HOME/.local/share/soundalerts/mail.ogg"
killall -43 waybar
fi
diff --git a/dotfiles/.local/bin/menumako b/dotfiles/.local/bin/menumako
index 628a93a..96c564b 100755
--- a/dotfiles/.local/bin/menumako
+++ b/dotfiles/.local/bin/menumako
@@ -1,3 +1,3 @@
#!/bin/sh
-makoctl menu rofi -dmenu -p "What to do?"
+makoctl menu -- rofi -dmenu -p "What to do?"
diff --git a/dotfiles/.local/bin/sshwiz b/dotfiles/.local/bin/sshwiz
new file mode 100755
index 0000000..ba71b08
--- /dev/null
+++ b/dotfiles/.local/bin/sshwiz
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# SSH "wizard" script. Copies the public key and installs terminfo for first
+# time use of a host.
+
+if [ -z "$1" ]; then
+ echo "usage: sshwiz <destination>"
+ exit 1
+fi
+
+target=$1
+
+ssh-copy-id $target
+echo "installing terminfo..."
+infocmp $TERM > /tmp/$TERM.terminfo
+rsync /tmp/$TERM.terminfo ${target}:
+ssh $target "tic -x $TERM.terminfo"
+echo "done"
diff --git a/dotfiles/.local/share/oculante/config.json b/dotfiles/.local/share/oculante/config.json
new file mode 100644
index 0000000..87bc4ca
--- /dev/null
+++ b/dotfiles/.local/share/oculante/config.json
@@ -0,0 +1,154 @@
+{
+ "accent_color": [
+ 137,
+ 182,
+ 160
+ ],
+ "background_color": [
+ 0,
+ 0,
+ 0
+ ],
+ "vsync": true,
+ "force_redraw": false,
+ "shortcuts": {
+ "AlwaysOnTop": [
+ "T"
+ ],
+ "Fullscreen": [
+ "F"
+ ],
+ "InfoMode": [
+ "I"
+ ],
+ "EditMode": [
+ "E"
+ ],
+ "NextImage": [
+ "N"
+ ],
+ "FirstImage": [
+ "Home"
+ ],
+ "LastImage": [
+ "End"
+ ],
+ "PreviousImage": [
+ "P"
+ ],
+ "RedChannel": [
+ "R"
+ ],
+ "GreenChannel": [
+ "G"
+ ],
+ "BlueChannel": [
+ "B"
+ ],
+ "AlphaChannel": [
+ "A"
+ ],
+ "RGBChannel": [
+ "U"
+ ],
+ "RGBAChannel": [
+ "C"
+ ],
+ "ResetView": [
+ "V"
+ ],
+ "ZoomOut": [
+ "Minus"
+ ],
+ "ZoomIn": [
+ "Equals"
+ ],
+ "ZoomActualSize": [
+ "Key1"
+ ],
+ "ZoomDouble": [
+ "Key2"
+ ],
+ "ZoomThree": [
+ "Key3"
+ ],
+ "ZoomFour": [
+ "Key4"
+ ],
+ "ZoomFive": [
+ "Key5"
+ ],
+ "CompareNext": [
+ "C",
+ "LShift"
+ ],
+ "PanLeft": [
+ "L"
+ ],
+ "PanRight": [
+ "H"
+ ],
+ "PanUp": [
+ "J"
+ ],
+ "PanDown": [
+ "K"
+ ],
+ "DeleteFile": [
+ "Delete"
+ ],
+ "ClearImage": [
+ "Delete",
+ "LShift"
+ ],
+ "LosslessRotateRight": [
+ "RBracket"
+ ],
+ "LosslessRotateLeft": [
+ "LBracket"
+ ],
+ "Copy": [
+ "C",
+ "LControl"
+ ],
+ "Paste": [
+ "LControl",
+ "V"
+ ],
+ "Browse": [
+ "LControl",
+ "O"
+ ],
+ "Quit": [
+ "Q"
+ ],
+ "ZenMode": [
+ "Z"
+ ]
+ },
+ "keep_view": true,
+ "max_cache": 30,
+ "show_scrub_bar": true,
+ "wrap_folder": true,
+ "keep_edits": false,
+ "title_format": "{APP} | {VERSION} | {FULLPATH}",
+ "info_enabled": true,
+ "edit_enabled": false,
+ "show_checker_background": false,
+ "show_minimap": false,
+ "show_frame": false,
+ "svg_scale": 1.0,
+ "zen_mode": false,
+ "theme": "System",
+ "linear_mag_filter": false,
+ "linear_min_filter": true,
+ "use_mipmaps": true,
+ "fit_image_on_window_resize": true,
+ "zoom_multiplier": 1.0,
+ "borderless": false,
+ "min_window_size": [
+ 100,
+ 100
+ ],
+ "experimental_features": false
+} \ No newline at end of file
diff --git a/dotfiles/.profile b/dotfiles/.profile
index 12dfd13..5d595ba 100644
--- a/dotfiles/.profile
+++ b/dotfiles/.profile
@@ -1,13 +1,11 @@
-export PATH=$PATH:$HOME/.local/bin
+export PATH=$PATH:$HOME/.local/bin:$HOME/docs/scripts
# Wayland-specific
-#export GDK_BACKEND=wayland
+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