diff --git a/sway/config b/sway/config index 18a62e38dbe892c76f7616a9604014b0e22edbbd..98b6d7f3f9b27d33bdb1ddc8b6d7d7a33bdff8b7 100644 --- a/sway/config +++ b/sway/config @@ -5,6 +5,9 @@ include catppuccin-frappe # # Read `man 5 sway` for a complete reference. +# Set font +font pango:JetBrainsMono 10 + ### Variables # # Logo key. Use Mod1 for Alt. @@ -19,17 +22,37 @@ set $term konsole # Lockscreen command set $lockscreen swaylock -F +# Wallpaper Daemon +exec swww-daemon + # Notification Daemon exec swaync # Toggle control center bindsym $mod+Shift+n exec swaync-client -t -sw +# Take Screenshot +set $screenshot grim $(xdg-user-dir PICTURES)/$(date +'%s_screenshot.png') +bindsym Print exec $screenshot + +# Default Caps lock off and num-lock on +input type:keyboard xkb_capslock disabled +input type:keyboard xkb_numlock enabled + + +# Information Notification Daemon +exec "avizo-service" + +# Binds for workspace Manager - Sov +exec rm -f /tmp/sovpipe && mkfifo /tmp/sovpipe && tail -f /tmp/sovpipe | sov -t 500 # Your preferred application launcher # Note: pass the final command to swaymsg so that the resulting window can be opened # on the original workspace that the command was run on. set $menu dmenu_path | wmenu | xargs swaymsg exec -- +gaps inner 2 +gaps outer 5 +smart_gaps inverse_outer ### Output configuration # @@ -42,17 +65,21 @@ output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill # # You can get the names of your outputs by running: swaymsg -t get_outputs -### Idle configuration -# -# Example configuration: -# -# exec swayidle -w \ -# timeout 300 'swaylock -f -c 000000' \ -# timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \ -# before-sleep 'swaylock -f -c 000000' -# +# Clipboard manager +exec wl-paste -t text --watch clipman store --no-persist + +## Idle configuration +exec swayidle -w \ + before-sleep 'playerctl pause' \ + before-sleep 'swaylock' \ + timeout 300 'swaylock -f' \ + timeout 330 'swaymsg "output * dpms off"' \ + resume 'swaymsg "output * dpms on"' \ + timeout 600 'swaymsg "output * power off"' \ + resume 'swaymsg "output * power on"' # This will lock your screen after 300 seconds of inactivity, then turn off # your displays after another 300 seconds, and turn your screens back on when +# Screen will power-off 30 seconds after lock screen # resumed. It will also lock your screen before your computer goes to sleep. ### Input configuration @@ -192,6 +219,27 @@ client.urgent $peach $base $peach $overlay0 $peach client.placeholder $overlay0 $base $text $overlay0 $overlay0 client.background $base + +# Manage volume controls using PulseAudio +bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle +bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% +bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% +bindsym --locked XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle + +# Media Player Controls +bindsym XF86AudioPlay exec playerctl play-pause +bindsym XF86AudioNext exec playerctl next +bindsym XF86AudioPrev exec playerctl previous + +# Calculator Button +bindsym XF86Calculator exec kcalc +for_window [class="KCalc"] floating enable + +# Manage Screen Brightness +bindsym XF86MonBrightnessDown exec brightnessctl set 5%- +bindsym XF86MonBrightnessUp exec brightnessctl set 5%+ + + # # Resizing containers: # @@ -241,3 +289,6 @@ bar { } include /etc/sway/config.d/* + +exec_always "pkill -f 'python3? .+/swaymonad.py'; ~/.config/sway/swaymonad/swaymonad.py" + diff --git a/swaylock/config b/swaylock/config index 1bdd8982fc2f1210a87e8f82f760661ee30cdf3b..81d325262144cde3b2955ce45ef2bbe564ada67a 100644 --- a/swaylock/config +++ b/swaylock/config @@ -1,29 +1,32 @@ ignore-empty-password -font=jetbrains-mono +font=JetBrains Mono +font-size=20 +show-failed-attempts + color=303446 bs-hl-color=f2d5cf caps-lock-bs-hl-color=f2d5cf caps-lock-key-hl-color=a6d189 -inside-color=00000000 -inside-clear-color=00000000 -inside-caps-lock-color=00000000 -inside-ver-color=00000000 -inside-wrong-color=00000000 +inside-color=303446ff +inside-clear-color=303446ff +inside-caps-lock-color=303446ff +inside-ver-color=303446ff +inside-wrong-color=303446ff key-hl-color=a6d189 -layout-bg-color=00000000 -layout-border-color=00000000 +layout-bg-color=303446ff +layout-border-color=303446ff layout-text-color=c6d0f5 -line-color=00000000 -line-clear-color=00000000 -line-caps-lock-color=00000000 -line-ver-color=00000000 -line-wrong-color=00000000 +line-color=303446ff +line-clear-color=303446ff +line-caps-lock-color=303446ff +line-ver-color=303446ff +line-wrong-color=303446ff ring-color=babbf1 ring-clear-color=f2d5cf ring-caps-lock-color=ef9f76 ring-ver-color=8caaee ring-wrong-color=ea999c -separator-color=00000000 +separator-color=30344600 text-color=c6d0f5 text-clear-color=f2d5cf text-caps-lock-color=ef9f76 @@ -36,14 +39,14 @@ datestr=%a, %e of %B screenshots -fade-in=0.2 - -effect-blur=20x2 -#effect-greyscale +fade-in=4 +grace=10 +effect-pixelate=50 +effect-blur=10x2 +# effect-greyscale effect-scale=0.3 indicator -indicator-radius=240 indicator-thickness=10 indicator-caps-lock diff --git a/swaync/config.json b/swaync/config.json new file mode 100644 index 0000000000000000000000000000000000000000..7503a8e8771dd98782494621bedb20e4f21ee60b --- /dev/null +++ b/swaync/config.json @@ -0,0 +1,97 @@ +{ + "$schema": "/etc/xdg/swaync/configSchema.json", + "positionX": "right", + "positionY": "top", + "layer": "overlay", + "control-center-layer": "top", + "layer-shell": true, + "cssPriority": "application", + "control-center-margin-top": 0, + "control-center-margin-bottom": 0, + "control-center-margin-right": 0, + "control-center-margin-left": 0, + "notification-2fa-action": true, + "notification-inline-replies": false, + "notification-icon-size": 64, + "notification-body-image-height": 100, + "notification-body-image-width": 200, + "timeout": 10, + "timeout-low": 5, + "timeout-critical": 0, + "fit-to-screen": true, + "relative-timestamps": true, + "control-center-width": 500, + "control-center-height": 600, + "notification-window-width": 500, + "keyboard-shortcuts": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "script-fail-notify": true, + "scripts": { + "example-script": { + "exec": "echo 'Do something...'", + "urgency": "Normal" + }, + "example-action-script": { + "exec": "echo 'Do something actionable!'", + "urgency": "Normal", + "run-on": "action" + } + }, + "notification-visibility": { + "example-name": { + "state": "muted", + "urgency": "Low", + "app-name": "Spotify" + } + }, + "widgets": [ + "inhibitors", + "title", + "dnd", + "notifications" + ], + "widget-config": { + "inhibitors": { + "text": "Inhibitors", + "button-text": "Clear All", + "clear-all-button": true + }, + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": "Clear All" + }, + "dnd": { + "text": "Do Not Disturb" + }, + "label": { + "max-lines": 5, + "text": "Label Text" + }, + "mpris": { + "image-size": 96, + "image-radius": 12 + }, + "buttons-grid": { + "actions": [ + { + "label": "直", + "type": "toggle", + "active": true, + "command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'", + "update_command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'" + }, + { + "label": "WiFi", + "type": "toggle", + "active": true, + "command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'", + "update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'" + } + ] + } + } +} diff --git a/swaync/configSchema.json b/swaync/configSchema.json new file mode 100644 index 0000000000000000000000000000000000000000..8d96c68758f76229eaa11647a45ce607b53986f9 --- /dev/null +++ b/swaync/configSchema.json @@ -0,0 +1,622 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "SwayNotificationCenter JSON schema", + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "description": "Pointer to the schema against which this document should be validated." + }, + "positionX": { + "type": "string", + "description": "Horizontal position of control center and notification window", + "default": "right", + "enum": ["right", "left", "center"] + }, + "layer": { + "type": "string", + "description": "Layer of notification window", + "default": "overlay", + "enum": ["background", "bottom", "top", "overlay"] + }, + "layer-shell": { + "type": "boolean", + "description": "Wether or not the windows should be opened as layer-shell surfaces. Note: Requires swaync restart to apply", + "default": true + }, + "cssPriority": { + "type": "string", + "description": "Which GTK priority to use when loading the default and user CSS files. Pick \"user\" to override XDG_CONFIG_HOME/gtk-3.0/gtk.css", + "default": "application", + "enum": ["application", "user"] + }, + "positionY": { + "type": "string", + "description": "Vertical position of control center and notification window", + "default": "top", + "enum": ["top", "center", "bottom"] + }, + "control-center-positionX": { + "type": "string", + "description": "Optional: Horizontal position of the control center. Supersedes positionX if not set to `none`", + "default": "none", + "enum": ["right", "left", "center", "none"] + }, + "control-center-positionY": { + "type": "string", + "description": "Optional: Vertical position of the control center. Supersedes positionY if not set to `none`", + "default": "none", + "enum": ["top", "bottom", "none"] + }, + "control-center-margin-top": { + "type": "integer", + "description": "The margin (in pixels) at the top of the control center. 0 to disable", + "default": 0 + }, + "control-center-margin-bottom": { + "type": "integer", + "description": "The margin (in pixels) at the bottom of the control center. 0 to disable", + "default": 0 + }, + "control-center-margin-right": { + "type": "integer", + "description": "The margin (in pixels) at the right of the control center. 0 to disable", + "default": 0 + }, + "control-center-margin-left": { + "type": "integer", + "description": "The margin (in pixels) at the left of the control center. 0 to disable", + "default": 0 + }, + "control-center-layer": { + "type": "string", + "description": "Layer of control center window", + "default": "none", + "enum": ["background", "bottom", "top", "overlay", "none"] + }, + "control-center-exclusive-zone": { + "type": "boolean", + "description": "Whether or not the control center should follow the compositors exclusive zones. An example would be setting it to \"false\" to cover your panel/dock.", + "default": true + }, + "notification-2fa-action": { + "type": "boolean", + "description": "If each notification should display a 'COPY \"1234\"' action", + "default": true + }, + "notification-inline-replies": { + "type": "boolean", + "description": "If notifications should display a text field to reply if the sender requests it. NOTE: Replying in popup notifications is only available if the compositor supports GTK Layer-Shell ON_DEMAND keyboard interactivity.", + "default": false + }, + "notification-icon-size": { + "type": "integer", + "description": "The notification icon size (in pixels). The app icon size is 1/3", + "default": 64, + "minimum": 16 + }, + "notification-body-image-height": { + "type": "integer", + "description": "The notification body image height (in pixels)", + "default": 100, + "minimum": 100 + }, + "notification-body-image-width": { + "type": "integer", + "description": "The notification body image width (in pixels)", + "default": 200, + "minimum": 200 + }, + "timeout": { + "type": "integer", + "description": "The notification timeout for notifications with normal priority", + "default": 10 + }, + "timeout-low": { + "type": "integer", + "description": "The notification timeout for notifications with low priority", + "default": 5 + }, + "timeout-critical": { + "type": "integer", + "description": "The notification timeout for notifications with critical priority. 0 to disable", + "default": 0 + }, + "notification-window-width": { + "type": "integer", + "description": "Width of the notification in pixels", + "default": 500 + }, + "fit-to-screen": { + "type": "boolean", + "description": "If the control center should expand to both edges of the screen", + "default": true + }, + "relative-timestamps": { + "type": "boolean", + "description": "Display notification timestamps relative to now e.g. \"26 minutes ago\". If false, a local iso8601-formatted absolute timestamp is displayed.", + "default": true + }, + "control-center-height": { + "type": "integer", + "description": "Height of the control center in pixels. Ignored when 'fit-to-screen' is set to 'true'", + "default": 600, + "minimum": 300 + }, + "control-center-width": { + "type": "integer", + "description": "Width of the control center in pixels", + "default": 500, + "minimum": 300 + }, + "keyboard-shortcuts": { + "type": "boolean", + "description": "If control center should use keyboard shortcuts", + "default": true + }, + "image-visibility": { + "type": "string", + "description": "The notification image visibility when no icon is available.", + "default": "when-available", + "enum": ["always", "when-available", "never"] + }, + "transition-time": { + "type": "integer", + "description": "The notification animation duration. 0 to disable", + "default": 200 + }, + "hide-on-clear": { + "type": "boolean", + "description": "Hides the control center after pressing \"Clear All\"", + "default": false + }, + "hide-on-action": { + "type": "boolean", + "description": "Hides the control center when clicking on notification action", + "default": true + }, + "script-fail-notify": { + "type": "boolean", + "description": "Sends a notification if a script fails to run", + "default": true + }, + "scripts": { + "type": "object", + "description": "Which scripts to check and potentially run for every notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for exec) use regex. If all properties match the given notification, the script will be run. Only the first matching script will be run.", + "minProperties": 1, + "additionalProperties": false, + "patternProperties": { + "^.{1,}$": { + "type": "object", + "description": "Your script object.", + "required": ["exec"], + "minProperties": 2, + "additionalProperties": false, + "properties": { + "exec": { + "type": "string", + "description": "The script to run. Can also run regular shell commands." + }, + "app-name": { + "type": "string", + "description": "The app-name. Uses Regex." + }, + "desktop-entry": { + "type": "string", + "description": "The desktop-entry. Uses Regex." + }, + "summary": { + "type": "string", + "description": "The summary of the notification. Uses Regex." + }, + "body": { + "type": "string", + "description": "The body of the notification. Uses Regex." + }, + "urgency": { + "type": "string", + "description": "The urgency of the notification.", + "default": "Normal", + "enum": ["Low", "Normal", "Critical"] + }, + "category": { + "type": "string", + "description": "Which category the notification belongs to. Uses Regex." + }, + "run-on": { + "type": "string", + "description": "Whether to run the script on an action being activated, or when the notification is received.", + "enum": ["action", "receive"], + "default": "receive" + } + } + } + } + }, + "notification-visibility": { + "type": "object", + "description": "Set the visibility of each incoming notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for state) use regex. If all properties match the given notification, the notification will be follow the provided state. Only the first matching object will be used.", + "minProperties": 1, + "additionalProperties": false, + "patternProperties": { + "^.{1,}$": { + "type": "object", + "description": "Your script object.", + "required": ["state"], + "minProperties": 2, + "additionalProperties": false, + "properties": { + "state": { + "type": "string", + "description": "The notification visibility state.", + "default": "enabled", + "enum": ["ignored", "muted", "enabled", "transient"] + }, + "app-name": { + "type": "string", + "description": "The app-name. Uses Regex." + }, + "desktop-entry": { + "type": "string", + "description": "The desktop-entry. Uses Regex." + }, + "summary": { + "type": "string", + "description": "The summary of the notification. Uses Regex." + }, + "body": { + "type": "string", + "description": "The body of the notification. Uses Regex." + }, + "urgency": { + "type": "string", + "description": "The urgency of the notification.", + "default": "Normal", + "enum": ["Low", "Normal", "Critical"] + }, + "override-urgency": { + "type": "string", + "description": "The new urgency of the notification (optional)", + "default": "unset", + "enum": ["unset", "low", "normal", "critical"] + }, + "category": { + "type": "string", + "description": "Which category the notification belongs to. Uses Regex." + } + } + } + } + }, + "widgets": { + "type": "array", + "description": "Which order and which widgets to display. If the \"notifications\" widget isn't specified, it will be placed at the bottom.", + "default": ["inhibitors", "title", "dnd", "notifications"], + "items": { + "type": "string", + "$comment": "Sadly can't use regex and enums at the same time. Fix in the future?", + "pattern": "^[a-zA-Z0-9_-]{1,}(#[a-zA-Z0-9_-]{1,}){0,1}?$" + } + }, + "widget-config": { + "type": "object", + "description": "Configure specific widget properties.", + "additionalProperties": false, + "$comment": "New widgets go here in \"patternProperties\" ↓", + "patternProperties": { + "^title(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$comment": "References the widget structure from \"widgets\" below", + "$ref": "#/widgets/title" + }, + "^dnd(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/dnd" + }, + "^label(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/label" + }, + "^mpris(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/mpris" + }, + "^buttons-grid(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/buttons-grid" + }, + "^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/menubar" + }, + "^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/volume" + }, + "^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$ref": "#/widgets/backlight" + }, + "^inhibitors(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "$comment": "References the widget structure from \"widgets\" below", + "$ref": "#/widgets/inhibitors" + } + } + } + }, + "widgets": { + "$comment": "New widgets go here", + "title": { + "type": "object", + "description": "Control Center Title Widget", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The title of the widget", + "default": "Notifications" + }, + "clear-all-button": { + "type": "boolean", + "description": "Wether to display a \"Clear All\" button", + "default": true + }, + "button-text": { + "type": "string", + "description": "\"Clear All\" button text", + "default": "Clear All" + } + } + }, + "dnd": { + "type": "object", + "description": "Control Center Do Not Disturb Widget", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The title of the widget", + "default": "Do Not Disturb" + } + } + }, + "label": { + "type": "object", + "description": "A generic widget that allows the user to add custom text", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The text content of the widget", + "default": "Label Text" + }, + "max-lines": { + "type": "integer", + "description": "The maximum lines", + "default": 5 + } + } + }, + "mpris": { + "type": "object", + "description": "A widget that displays multiple music players", + "additionalProperties": false, + "properties": { + "image-size": { + "type": "integer", + "description": "The size of the album art", + "default": 96 + }, + "image-radius": { + "type": "integer", + "description": "The border radius of the album art. Will be overriden by setting the border-radius in the style.css for the \".widget-mpris-album-art\" class", + + "default": 12 + }, + "blur": { + "type": "bool", + "description": "Appy the artwork as the MPRIS background and blur it", + "default": true + } + } + }, + "buttons-grid": { + "type": "object", + "description": "A widget to add a grid of buttons that execute shell commands", + "additionalProperties": false, + "properties": { + "actions": { + "type": "array", + "description": "A list of actions containing a label and a command", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "Text to be displayed in button", + "default": "label" + }, + "command": { + "type": "string", + "description": "Command to be executed on click", + "default": "" + }, + "type": { + "type": "string", + "description": "Type of the button; toggle buttons receive the .active css class and an env variable 'SWAYNC_TOGGLE_STATE' is set. See example in the default config.json", + "default": "normal", + "enum": ["normal", "toggle"] + }, + "update-command": { + "type": "string", + "description": "Command to be executed on visibility change of cc to update the active state of the toggle button (should echo true or false)", + "default": "" + }, + "active": { + "type": "bool", + "description": "Wether the toggle button is active as default or not", + "default": false + } + } + } + } + } + }, + "menubar": { + "type": "object", + "description": "A bar that contains action-buttons and buttons to open a dropdown with action-buttons", + "additionalProperties": false, + "patternProperties": { + "^menu(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "type": "object", + "description": "A button that opens a dropdown with action-buttons", + "additionalProperties": false, + "properties": { + "label": { + "type": "string", + "description": "Text to be displayed in button", + "default": "Menu" + }, + "position": { + "type": "string", + "description": "Horizontal position of the button in the bar", + "default": "right", + "enum": ["right", "left"] + }, + "animation-type": { + "type": "string", + "default": "slide_down", + "description": "Animation type for menu", + "enum": ["slide_down", "slide_up", "none"] + }, + "animation-duration":{ + "type": "integer", + "default": 250, + "description": "Duration of animation in milliseconds" + }, + "actions": { + "$ref" : "#/widgets/buttons-grid/properties/actions" + } + } + }, + "^buttons(#[a-zA-Z0-9_-]{1,}){0,1}?$": { + "type": "object", + "description": "A list of action-buttons to be displayed in the topbar", + "additionalProperties": false, + "properties": { + "position": { + "type": "string", + "description": "Horizontal position of the button in the bar", + "default": "right", + "enum": ["right", "left"] + }, + "actions": { + "$ref" : "#/widgets/buttons-grid/properties/actions" + } + } + } + } + }, + "volume": { + "type": "object", + "description": "Slider to control pulse volume", + "additionalProperties": false, + "properties": { + "label": { + "type": "string", + "description": "Text displayed in front of the volume slider", + "default": "Volume" + }, + "show-per-app": { + "type": "boolean", + "default": false, + "description": "Show per app volume control" + }, + "show-per-app-icon": { + "type": "boolean", + "default": true, + "description": "Show application icon in per app control" + }, + "show-per-app-label": { + "type": "boolean", + "default": false, + "description": "Show application name in per app control" + }, + "empty-list-label": { + "type": "string", + "default": "No active sink input", + "description": "Text displayed when there are not active sink inputs" + }, + "expand-button-label": { + "type": "string", + "default": "⇧", + "description": "Label displayed on button to show per app volume control" + }, + "collapse-button-label": { + "type": "string", + "default": "⇩", + "description": "Label displayed on button to hide per app volume control" + }, + "icon-size": { + "type": "integer", + "default": 24, + "description": "Size of the application icon in per app volume control" + }, + "animation-type": { + "type": "string", + "default": "slide_down", + "description": "Animation type for menu", + "enum": ["slide_down", "slide_up", "none"] + }, + "animation-duration":{ + "type": "integer", + "default": 250, + "description": "Duration of animation in milliseconds" + } + } + }, + "backlight": { + "type": "object", + "description": "Slider to control monitor brightness", + "additionalProperties": false, + "properties": { + "label": { + "type": "string", + "description": "Text displayed in front of the backlight slider", + "default": "Brightness" + }, + "device": { + "type": "string", + "description": "Name of monitor (find possible devices using `ls /sys/class/backlight` or `ls /sys/class/leds`)", + "default": "intel_backlight" + }, + "subsystem": { + "type": "string", + "description": "Kernel subsystem for brightness control", + "default": "backlight", + "enum": ["backlight", "leds"] + }, + "min": { + "type": "integer", + "default": 0, + "description": "Lowest possible value for brightness" + } + } + }, + "inhibitors": { + "type": "object", + "description": "Control Center Inhibitors Widget", + "additionalProperties": false, + "properties": { + "text": { + "type": "string", + "description": "The title of the widget", + "default": "Inhibitors" + }, + "clear-all-button": { + "type": "boolean", + "description": "Wether to display a \"Clear All\" button", + "default": true + }, + "button-text": { + "type": "string", + "description": "\"Clear All\" button text", + "default": "Clear All" + } + } + } + } +} diff --git a/swaync/style.css b/swaync/style.css new file mode 100644 index 0000000000000000000000000000000000000000..aa5d373a3e6bb2e2260b008ce305eb3d983532da --- /dev/null +++ b/swaync/style.css @@ -0,0 +1,342 @@ +* { + all: unset; + font-size: 14px; + font-family: "Ubuntu Nerd Font"; + transition: 200ms; +} + +trough highlight { + background: #c6d0f5; +} + +scale trough { + margin: 0rem 1rem; + background-color: #414559; + min-height: 8px; + min-width: 70px; +} + +slider { + background-color: #8caaee; +} + +.floating-notifications.background .notification-row .notification-background { + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #414559; + border-radius: 12.6px; + margin: 18px; + background-color: #303446; + color: #c6d0f5; + padding: 0; +} + +.floating-notifications.background .notification-row .notification-background .notification { + padding: 7px; + border-radius: 12.6px; +} + +.floating-notifications.background .notification-row .notification-background .notification.critical { + box-shadow: inset 0 0 7px 0 #e78284; +} + +.floating-notifications.background .notification-row .notification-background .notification .notification-content { + margin: 7px; +} + +.floating-notifications.background .notification-row .notification-background .notification .notification-content .summary { + color: #c6d0f5; +} + +.floating-notifications.background .notification-row .notification-background .notification .notification-content .time { + color: #a5adce; +} + +.floating-notifications.background .notification-row .notification-background .notification .notification-content .body { + color: #c6d0f5; +} + +.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * { + min-height: 3.4em; +} + +.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action { + border-radius: 7px; + color: #c6d0f5; + background-color: #414559; + box-shadow: inset 0 0 0 1px #51576d; + margin: 7px; +} + +.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #414559; + color: #c6d0f5; +} + +.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #85c1dc; + color: #c6d0f5; +} + +.floating-notifications.background .notification-row .notification-background .close-button { + margin: 7px; + padding: 2px; + border-radius: 6.3px; + color: #303446; + background-color: #e78284; +} + +.floating-notifications.background .notification-row .notification-background .close-button:hover { + background-color: #ea999c; + color: #303446; +} + +.floating-notifications.background .notification-row .notification-background .close-button:active { + background-color: #e78284; + color: #303446; +} + +.control-center { + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #414559; + border-radius: 12.6px; + margin: 18px; + background-color: #303446; + color: #c6d0f5; + padding: 14px; +} + +.control-center .widget-title > label { + color: #c6d0f5; + font-size: 1.3em; +} + +.control-center .widget-title button { + border-radius: 7px; + color: #c6d0f5; + background-color: #414559; + box-shadow: inset 0 0 0 1px #51576d; + padding: 8px; +} + +.control-center .widget-title button:hover { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #626880; + color: #c6d0f5; +} + +.control-center .widget-title button:active { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #85c1dc; + color: #303446; +} + +.control-center .notification-row .notification-background { + border-radius: 7px; + color: #c6d0f5; + background-color: #414559; + box-shadow: inset 0 0 0 1px #51576d; + margin-top: 14px; +} + +.control-center .notification-row .notification-background .notification { + padding: 7px; + border-radius: 7px; +} + +.control-center .notification-row .notification-background .notification.critical { + box-shadow: inset 0 0 7px 0 #e78284; +} + +.control-center .notification-row .notification-background .notification .notification-content { + margin: 7px; +} + +.control-center .notification-row .notification-background .notification .notification-content .summary { + color: #c6d0f5; +} + +.control-center .notification-row .notification-background .notification .notification-content .time { + color: #a5adce; +} + +.control-center .notification-row .notification-background .notification .notification-content .body { + color: #c6d0f5; +} + +.control-center .notification-row .notification-background .notification > *:last-child > * { + min-height: 3.4em; +} + +.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action { + border-radius: 7px; + color: #c6d0f5; + background-color: #232634; + box-shadow: inset 0 0 0 1px #51576d; + margin: 7px; +} + +.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #414559; + color: #c6d0f5; +} + +.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #85c1dc; + color: #c6d0f5; +} + +.control-center .notification-row .notification-background .close-button { + margin: 7px; + padding: 2px; + border-radius: 6.3px; + color: #303446; + background-color: #ea999c; +} + +.close-button { + border-radius: 6.3px; +} + +.control-center .notification-row .notification-background .close-button:hover { + background-color: #e78284; + color: #303446; +} + +.control-center .notification-row .notification-background .close-button:active { + background-color: #e78284; + color: #303446; +} + +.control-center .notification-row .notification-background:hover { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #838ba7; + color: #c6d0f5; +} + +.control-center .notification-row .notification-background:active { + box-shadow: inset 0 0 0 1px #51576d; + background-color: #85c1dc; + color: #c6d0f5; +} + +.notification.critical progress { + background-color: #e78284; +} + +.notification.low progress, +.notification.normal progress { + background-color: #8caaee; +} + +.control-center-dnd { + margin-top: 5px; + border-radius: 8px; + background: #414559; + border: 1px solid #51576d; + box-shadow: none; +} + +.control-center-dnd:checked { + background: #414559; +} + +.control-center-dnd slider { + background: #51576d; + border-radius: 8px; +} + +.widget-dnd { + margin: 0px; + font-size: 1.1rem; +} + +.widget-dnd > switch { + font-size: initial; + border-radius: 8px; + background: #414559; + border: 1px solid #51576d; + box-shadow: none; +} + +.widget-dnd > switch:checked { + background: #414559; +} + +.widget-dnd > switch slider { + background: #51576d; + border-radius: 8px; + border: 1px solid #737994; +} + +.widget-mpris .widget-mpris-player { + background: #414559; + padding: 7px; +} + +.widget-mpris .widget-mpris-title { + font-size: 1.2rem; +} + +.widget-mpris .widget-mpris-subtitle { + font-size: 0.8rem; +} + +.widget-menubar > box > .menu-button-bar > button > label { + font-size: 3rem; + padding: 0.5rem 2rem; +} + +.widget-menubar > box > .menu-button-bar > :last-child { + color: #e78284; +} + +.power-buttons button:hover, +.powermode-buttons button:hover, +.screenshot-buttons button:hover { + background: #414559; +} + +.control-center .widget-label > label { + color: #c6d0f5; + font-size: 2rem; +} + +.widget-buttons-grid { + padding-top: 1rem; +} + +.widget-buttons-grid > flowbox > flowboxchild > button label { + font-size: 2.5rem; +} + +.widget-volume { + padding-top: 1rem; +} + +.widget-volume label { + font-size: 1.5rem; + color: #85c1dc; +} + +.widget-volume trough highlight { + background: #85c1dc; +} + +.widget-backlight trough highlight { + background: #e5c890; +} + +.widget-backlight label { + font-size: 1.5rem; + color: #e5c890; +} + +.widget-backlight .KB { + padding-bottom: 1rem; +} + +.image { + padding-right: 0.5rem; +} diff --git a/swaync/style.css.back b/swaync/style.css.back new file mode 100644 index 0000000000000000000000000000000000000000..fa9867a84c3b1bc77fb8f8956d5bb26997aaa4ed --- /dev/null +++ b/swaync/style.css.back @@ -0,0 +1,501 @@ +@define-color cc-bg rgba(45, 46, 46, 0.7); +@define-color noti-border-color rgba(255, 255, 255, 0.15); +@define-color noti-bg rgba(48, 48, 48, 0.8); +@define-color noti-bg-opaque rgb(48, 48, 48); +@define-color noti-bg-darker rgb(38, 38, 38); +@define-color noti-bg-hover rgb(56, 56, 56); +@define-color noti-bg-hover-opaque rgb(56, 56, 56); +@define-color noti-bg-focus rgba(68, 68, 68, 0.6); +@define-color noti-close-bg rgba(255, 255, 255, 0.1); +@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15); +@define-color text-color rgb(255, 255, 255); +@define-color text-color-disabled rgb(150, 150, 150); +@define-color bg-selected rgb(0, 128, 255); +.notification-row { + outline: none; +} + +.notification-row:focus, .notification-row:hover { + background: @noti-bg-focus; +} + +.notification-row .notification-background { + padding: 6px 12px; +} + +.notification-row .notification-background .close-button { + /* The notification Close Button */ + background: @noti-close-bg; + color: @text-color; + text-shadow: none; + padding: 0; + border-radius: 100%; + margin-top: 5px; + margin-right: 5px; + box-shadow: none; + border: none; + min-width: 24px; + min-height: 24px; +} + +.notification-row .notification-background .close-button:hover { + box-shadow: none; + background: @noti-close-bg-hover; + transition: background 0.15s ease-in-out; + border: none; +} + +.notification-row .notification-background .notification { + /* The actual notification */ + border-radius: 12px; + border: 1px solid @noti-border-color; + padding: 0; + transition: background 0.15s ease-in-out; + background: @noti-bg; +} + +.notification-row .notification-background .notification.low { + /* Low Priority Notification */ +} + +.notification-row .notification-background .notification.normal { + /* Normal Priority Notification */ +} + +.notification-row .notification-background .notification.critical { + /* Critical Priority Notification */ +} + +.notification-row .notification-background .notification .notification-action, .notification-row .notification-background .notification .notification-default-action { + padding: 4px; + margin: 0; + box-shadow: none; + background: transparent; + border: none; + color: @text-color; + transition: background 0.15s ease-in-out; +} + +.notification-row .notification-background .notification .notification-action:hover, .notification-row .notification-background .notification .notification-default-action:hover { + -gtk-icon-effect: none; + background: @noti-bg-hover; +} + +.notification-row .notification-background .notification .notification-default-action { + /* The large action that also displays the notification summary and body */ + border-radius: 12px; +} + +.notification-row .notification-background .notification .notification-default-action:not(:only-child) { + /* When alternative actions are visible */ + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content { + background: transparent; + border-radius: 12px; + padding: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .image { + /* Notification Primary Image */ + -gtk-icon-effect: none; + border-radius: 100px; + /* Size in px */ + margin: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .app-icon { + /* Notification app icon (only visible when the primary image is set) */ + -gtk-icon-effect: none; + -gtk-icon-shadow: 0 1px 4px black; + margin: 6px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary { + /* Notification summary/title */ + font-size: 16px; + font-weight: bold; + background: transparent; + color: @text-color; + text-shadow: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time { + /* Notification time-ago */ + font-size: 16px; + font-weight: bold; + background: transparent; + color: @text-color; + text-shadow: none; + margin-right: 30px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body { + /* Notification body */ + font-size: 15px; + font-weight: normal; + background: transparent; + color: @text-color; + text-shadow: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content progressbar { + /* The optional notification progress bar */ + margin-top: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .body-image { + /* The "extra" optional bottom notification image */ + margin-top: 4px; + background-color: white; + border-radius: 12px; + -gtk-icon-effect: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply { + /* The inline reply section */ + margin-top: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry { + background: @noti-bg-darker; + color: @text-color; + caret-color: @text-color; + border: 1px solid @noti-border-color; + border-radius: 12px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button { + margin-left: 4px; + background: @noti-bg; + border: 1px solid @noti-border-color; + border-radius: 12px; + color: @text-color; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:disabled { + background: initial; + color: @text-color-disabled; + border: 1px solid @noti-border-color; + border-color: transparent; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover { + background: @noti-bg-hover; +} + +.notification-row .notification-background .notification .notification-action { + /* The alternative actions below the default action */ + border-top: 1px solid @noti-border-color; + border-radius: 0px; + border-right: 1px solid @noti-border-color; +} + +.notification-row .notification-background .notification .notification-action:first-child { + /* add bottom border radius to eliminate clipping */ + border-bottom-left-radius: 12px; +} + +.notification-row .notification-background .notification .notification-action:last-child { + border-bottom-right-radius: 12px; + border-right: none; +} + +.notification-group { + /* Styling only for Grouped Notifications */ +} + +.notification-group.low { + /* Low Priority Group */ +} + +.notification-group.normal { + /* Low Priority Group */ +} + +.notification-group.critical { + /* Low Priority Group */ +} + +.notification-group .notification-group-buttons, .notification-group .notification-group-headers { + margin: 0 16px; + color: @text-color; +} + +.notification-group .notification-group-headers { + /* Notification Group Headers */ +} + +.notification-group .notification-group-headers .notification-group-icon { + color: @text-color; +} + +.notification-group .notification-group-headers .notification-group-header { + color: @text-color; +} + +.notification-group .notification-group-buttons { + /* Notification Group Buttons */ +} + +.notification-group.collapsed .notification-row .notification { + background-color: @noti-bg-opaque; +} + +.notification-group.collapsed .notification-row:not(:last-child) { + /* Top notification in stack */ + /* Set lower stacked notifications opacity to 0 */ +} + +.notification-group.collapsed .notification-row:not(:last-child) .notification-action, +.notification-group.collapsed .notification-row:not(:last-child) .notification-default-action { + opacity: 0; +} + +.notification-group.collapsed:hover .notification-row:not(:only-child) .notification { + background-color: @noti-bg-hover-opaque; +} + +.control-center { + /* The Control Center which contains the old notifications + widgets */ + background: @cc-bg; + color: @text-color; + border-radius: 12px; +} + +.control-center .control-center-list-placeholder { + /* The placeholder when there are no notifications */ + opacity: 0.5; +} + +.control-center .control-center-list { + /* List of notifications */ + background: transparent; +} + +.control-center .control-center-list .notification { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3); +} + +.control-center .control-center-list .notification .notification-default-action, +.control-center .control-center-list .notification .notification-action { + transition: opacity 400ms ease-in-out, background 0.15s ease-in-out; +} + +.control-center .control-center-list .notification .notification-default-action:hover, +.control-center .control-center-list .notification .notification-action:hover { + background-color: @noti-bg-hover; +} + +.blank-window { + /* Window behind control center and on all other monitors */ + background: transparent; +} + +.floating-notifications { + background: transparent; +} + +.floating-notifications .notification { + box-shadow: none; +} + +/*** Widgets ***/ +/* Title widget */ +.widget-title { + color: @text-color; + margin: 8px; + font-size: 1.5rem; +} + +.widget-title > button { + font-size: initial; + color: @text-color; + text-shadow: none; + background: @noti-bg; + border: 1px solid @noti-border-color; + box-shadow: none; + border-radius: 12px; +} + +.widget-title > button:hover { + background: @noti-bg-hover; +} + +/* DND widget */ +.widget-dnd { + color: @text-color; + margin: 8px; + font-size: 1.1rem; +} + +.widget-dnd > switch { + font-size: initial; + border-radius: 12px; + background: @noti-bg; + border: 1px solid @noti-border-color; + box-shadow: none; +} + +.widget-dnd > switch:checked { + background: @bg-selected; +} + +.widget-dnd > switch slider { + background: @noti-bg-hover; + border-radius: 12px; +} + +/* Label widget */ +.widget-label { + margin: 8px; +} + +.widget-label > label { + font-size: 1.1rem; +} + +/* Mpris widget */ +@define-color mpris-album-art-overlay rgba(0, 0, 0, 0.55); +@define-color mpris-button-hover rgba(0, 0, 0, 0.50); +.widget-mpris { + /* The parent to all players */ +} + +.widget-mpris .widget-mpris-player { + padding: 8px; + padding: 16px; + margin: 16px 20px; + background-color: @mpris-album-art-overlay; + border-radius: 12px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75); +} + +.widget-mpris .widget-mpris-player button:hover { + /* The media player buttons (play, pause, next, etc...) */ + background: @noti-bg-hover; +} + +.widget-mpris .widget-mpris-player .widget-mpris-album-art { + border-radius: 12px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75); +} + +.widget-mpris .widget-mpris-player .widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} + +.widget-mpris .widget-mpris-player .widget-mpris-subtitle { + font-size: 1.1rem; +} + +.widget-mpris .widget-mpris-player > box > button { + /* Change player control buttons */ +} + +.widget-mpris .widget-mpris-player > box > button:hover { + background-color: @mpris-button-hover; +} + +.widget-mpris > box > button { + /* Change player side buttons */ +} + +.widget-mpris > box > button:disabled { + /* Change player side buttons insensitive */ +} + +/* Buttons widget */ +.widget-buttons-grid { + padding: 8px; + margin: 8px; + border-radius: 12px; + background-color: @noti-bg; +} + +.widget-buttons-grid > flowbox > flowboxchild > button { + background: @noti-bg; + border-radius: 12px; +} + +.widget-buttons-grid > flowbox > flowboxchild > button.toggle:checked { + /* style given to the active toggle button */ +} + +/* Menubar widget */ +.widget-menubar > box > .menu-button-bar > button { + border: none; + background: transparent; +} + +/* .AnyName { Name defined in config after # + background-color: @noti-bg; + padding: 8px; + margin: 8px; + border-radius: 12px; +} + +.AnyName>button { + background: transparent; + border: none; +} + +.AnyName>button:hover { + background-color: @noti-bg-hover; +} */ +.topbar-buttons > button { + /* Name defined in config after # */ + border: none; + background: transparent; +} + +/* Volume widget */ +.widget-volume { + background-color: @noti-bg; + padding: 8px; + margin: 8px; + border-radius: 12px; +} + +.widget-volume > box > button { + background: transparent; + border: none; +} + +.per-app-volume { + background-color: @noti-bg-alt; + padding: 4px 8px 8px 8px; + margin: 0px 8px 8px 8px; + border-radius: 12px; +} + +/* Backlight widget */ +.widget-backlight { + background-color: @noti-bg; + padding: 8px; + margin: 8px; + border-radius: 12px; +} + +/* Inhibitors widget */ +.widget-inhibitors { + margin: 8px; + font-size: 1.5rem; +} + +.widget-inhibitors > button { + font-size: initial; + color: @text-color; + text-shadow: none; + background: @noti-bg; + border: 1px solid @noti-border-color; + box-shadow: none; + border-radius: 12px; +} + +.widget-inhibitors > button:hover { + background: @noti-bg-hover; +} diff --git a/waybar/config.jsonc b/waybar/config.jsonc index 2c1c7013a4e6c8b5bcc2393fa142a4ee8e208c40..a2d732f99e763a09fc823267531c378598316560 100644 --- a/waybar/config.jsonc +++ b/waybar/config.jsonc @@ -5,6 +5,7 @@ // "height": 30, // Waybar height (to be removed for auto height) // "width": 1280, // Waybar width "spacing": 0, // Gaps between modules (4px) + "reload_style_on_change": true, // Choose the order of the modules "modules-left": [ diff --git a/waybar/style.css b/waybar/style.css index 7f23afd0b58bbc61d14d8988be1909b1efafe074..3c8cf99a078c3fb2dd101ac37801d9aa8785ff41 100644 --- a/waybar/style.css +++ b/waybar/style.css @@ -2,7 +2,12 @@ * { /* `otf-font-awesome` is required to be installed for icons */ - font-family: JetBrains Mono, Jetbrains-mono, FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-family: + "JetBrains Mono", + "JetBrains Mono", + JetBrains Mono, JetBrains-mono, + FontAwesome, + Roboto, Helvetica, Arial, sans-serif; font-size: 13px; color: @text; } diff --git a/zsh/zsh_alias b/zsh/zsh_alias new file mode 100644 index 0000000000000000000000000000000000000000..2274d706e6a6a250c45023ab3d8f82383c888210 --- /dev/null +++ b/zsh/zsh_alias @@ -0,0 +1,5 @@ +alias grep='grep --color -n' + +alias ll='ls -l' +alias la='ls -lA' +alias cls='clear && ls && echo' diff --git a/zsh/zshrc b/zsh/zshrc new file mode 100644 index 0000000000000000000000000000000000000000..4a9631cf639fb007cccd0773b4e10a682af09158 --- /dev/null +++ b/zsh/zshrc @@ -0,0 +1,38 @@ +# Created by newuser for 5.9 +alias vim=nvim +alias kde=/usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland +alias ls='ls --color' + +alias cls="clear" + +# History Management +HISTCONTROL=ignoreboth +HISTFILE=.zsh_history +HISTSIZE=1000 +HISTFILESIZE=1000 + +# Alias File +if [ -f ~/.zsh_alias ]; then + . ~/.zsh_alias +fi + +# todo System +todo() { + TODO_PATH=$(xdg-user-dir)/.todo + NOW=$(date +"%D %R") + if [[ -e TODO_PATH ]]; then + else + touch $TODO_PATH + fi + + + if [[ -n "$@" ]]; then + echo "[ ] $@ {$NOW}" >> $TODO_PATH + fi +} +todo_list() { + TODO_PATH=$(xdg-user-dir)/.todo + echo $(cat $TODO_PATH | xargs -n1 echo | grep '[ ]') +} + +resource() { source $(xdg-user-dir)/.zshrc }