diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-06-03 19:56:39 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-06-03 19:56:39 +0800 |
| commit | ca968c4e5040f1ff4b5b5e12d9312360d807dcc1 (patch) | |
| tree | 9900920e8f566794560c1519678e344351d2803b /dot-config/rofi | |
| parent | 5f3deaff0bf006a1a353e57b82ad48c0e8f143bc (diff) | |
added submodules, change . -> dot (see man stow --dotfiles)
Diffstat (limited to 'dot-config/rofi')
53 files changed, 7749 insertions, 0 deletions
diff --git a/dot-config/rofi/askpass.rasi b/dot-config/rofi/askpass.rasi new file mode 100644 index 00000000..1db7faab --- /dev/null +++ b/dot-config/rofi/askpass.rasi @@ -0,0 +1,73 @@ +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/*****----- Main Window -----*****/ +window { + location: center; + anchor: center; + fullscreen: false; + width: 350px; + x-offset: 0px; + y-offset: 0px; + padding: 20px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background; + cursor: "default"; + children: [ "inputbar", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt", "entry" ]; +} + +dummy { + expand: false; + width: 10px; + background-color: transparent; +} +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 10px 13px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} +entry { + enabled: true; + padding: 10px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: inherit; + cursor: text; + placeholder: "Password"; + placeholder-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: false; +} diff --git a/dot-config/rofi/asroot.rasi b/dot-config/rofi/asroot.rasi new file mode 100644 index 00000000..bceac483 --- /dev/null +++ b/dot-config/rofi/asroot.rasi @@ -0,0 +1,147 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/* +USE_ICON=YES +*/ + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 500px; + x-offset: 0px; + y-offset: 0px; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt"]; +} + +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 10px 12px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 5; + lines: 1; + cycle: true; + scrollbar: false; + layout: vertical; + + spacing: 10px; + background-color: transparent; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + padding: 22px 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: pointer; +} +element-text { + font: "feather 20"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +element normal.normal, +element alternate.normal { + border: 1px solid; + border-radius: 0px; + border-color: @selected; + background-color: var(background); + text-color: var(foreground); +} +element normal.urgent, +element alternate.urgent, +element selected.active { + background-color: var(urgent); + text-color: var(background); +} +element normal.active, +element alternate.active, +element selected.urgent { + background-color: var(active); + text-color: var(background); +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} diff --git a/dot-config/rofi/bluetooth.rasi b/dot-config/rofi/bluetooth.rasi new file mode 100644 index 00000000..a704c27a --- /dev/null +++ b/dot-config/rofi/bluetooth.rasi @@ -0,0 +1,303 @@ +/** + * Copyright (C) 2020-2023 Aditya Shakya <adi1090x@gmail.com> + **/ + +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 500px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "prompt" ]; +} + +prompt { + enabled: true; + padding: 8px 12px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} +textbox-prompt-colon { + enabled: true; + padding: 8px 11.5px; + border-radius: 0px; + expand: false; + str: ""; + background-color: @active; + text-color: @background; +} +entry { + enabled: true; + padding: 8px 12px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: inherit; + cursor: text; + placeholder: ""; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 7; + cycle: true; + dynamic: true; + scrollbar: true; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 0px; + margin: 0px; + padding: 8px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 5px 10px; + border: 0px solid; + border-radius: 8px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 10px; + border: 0px solid; + border-radius: 8px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 15px; + border: 0px solid; + border-radius: 10px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/clipboard.rasi b/dot-config/rofi/clipboard.rasi new file mode 100644 index 00000000..9a345f1a --- /dev/null +++ b/dot-config/rofi/clipboard.rasi @@ -0,0 +1,302 @@ + +/*****----- Configuration -----*****/ +configuration { + modi: "window"; + show-icons: true; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Filter..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 8; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} + diff --git a/dot-config/rofi/config.rasi b/dot-config/rofi/config.rasi new file mode 100644 index 00000000..c43c7a90 --- /dev/null +++ b/dot-config/rofi/config.rasi @@ -0,0 +1,176 @@ +configuration { + /*---------- General setting ----------*/ + modi: "drun,run,filebrowser,window,emoji,calc"; + case-sensitive: false; + cycle: true; + filter: ""; + scroll-method: 0; + normalize-match: true; + show-icons: true; + icon-theme: "Arc-Circle"; +/* cache-dir: ;*/ + steal-focus: false; +/* dpi: -1;*/ + + /*---------- Matching setting ----------*/ + matching: "normal"; + tokenize: true; + + /*---------- SSH settings ----------*/ + ssh-client: "ssh"; + ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]"; + parse-hosts: true; + parse-known-hosts: true; + + /*---------- Drun settings ----------*/ + drun-categories: ""; + drun-match-fields: "name,generic,exec,categories,keywords"; + drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]"; + drun-show-actions: false; + drun-url-launcher: "xdg-open"; + drun-use-desktop-cache: false; + drun-reload-desktop-cache: false; + drun { + /** Parse user desktop files. */ + parse-user: true; + /** Parse system desktop files. */ + parse-system: true; + } + + /*---------- Run settings ----------*/ + run-command: "{cmd}"; + run-list-command: ""; + run-shell-command: "{terminal} -e {cmd}"; + + /*---------- Fallback Icon ----------*/ + run { + fallback-icon: "application-x-addon"; + } + drun { + fallback-icon: "application-x-addon"; + } + + /*---------- Window switcher settings ----------*/ + window-match-fields: "title,class,role,name,desktop"; + window-command: "wmctrl -i -R {window}"; + window-format: "{w} - {c} - {t:0}"; + window-thumbnail: false; + + /*---------- Combi settings ----------*/ +/* combi-modi: "window,run";*/ +/* combi-hide-mode-prefix: false;*/ +/* combi-display-format: "{mode} {text}";*/ + + /*---------- History and Sorting ----------*/ + disable-history: false; + sorting-method: "normal"; + max-history-size: 25; + + /*---------- Display setting ----------*/ + display-window: "Windows"; + display-windowcd: "Window CD"; + display-run: "Run"; + display-ssh: "SSH"; + display-drun: "Apps"; + display-combi: "Combi"; + display-keys: "Keys"; + display-filebrowser: "Files"; + + /*---------- Misc setting ----------*/ + terminal: "rofi-sensible-terminal"; + font: "Mono 12"; + sort: false; + threads: 0; + click-to-exit: true; +/* ignored-prefixes: "";*/ +/* pid: "/run/user/1000/rofi.pid";*/ + + /*---------- File browser settings ----------*/ + filebrowser { +/* directory: "/home";*/ + directories-first: true; + sorting-method: "name"; + } + + /*---------- Other settings ----------*/ + timeout { + action: "kb-cancel"; + delay: 0; + } + + /*---------- Keybindings ----------*/ +/* + kb-primary-paste: "Control+V,Shift+Insert"; + kb-secondary-paste: "Control+v,Insert"; + kb-clear-line: "Control+w"; + kb-move-front: "Control+a"; + kb-move-end: "Control+e"; + kb-move-word-back: "Alt+b,Control+Left"; + kb-move-word-forward: "Alt+f,Control+Right"; + kb-move-char-back: "Left,Control+b"; + kb-move-char-forward: "Right,Control+f"; + kb-remove-word-back: "Control+Alt+h,Control+BackSpace"; + kb-remove-word-forward: "Control+Alt+d"; + kb-remove-char-forward: "Delete,Control+d"; + kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h"; + kb-remove-to-eol: "Control+k"; + kb-remove-to-sol: "Control+u"; + kb-accept-entry: "Control+j,Control+m,Return,KP_Enter"; + kb-accept-custom: "Control+Return"; + kb-accept-custom-alt: "Control+Shift+Return"; + kb-accept-alt: "Shift+Return"; + kb-delete-entry: "Shift+Delete"; + kb-mode-next: "Shift+Right,Control+Tab"; + kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab"; + kb-mode-complete: "Control+l"; + kb-row-left: "Control+Page_Up"; + kb-row-right: "Control+Page_Down"; + kb-row-down: "Down,Control+n"; + kb-page-prev: "Page_Up"; + kb-page-next: "Page_Down"; + kb-row-first: "Home,KP_Home"; + kb-row-last: "End,KP_End"; + kb-row-select: "Control+space"; + kb-screenshot: "Alt+S"; + kb-ellipsize: "Alt+period"; + kb-toggle-case-sensitivity: "grave,dead_grave"; + kb-toggle-sort: "Alt+grave"; + kb-cancel: "Escape,Control+g,Control+bracketleft"; + kb-custom-1: "Alt+1"; + kb-custom-2: "Alt+2"; + kb-custom-3: "Alt+3"; + kb-custom-4: "Alt+4"; + kb-custom-5: "Alt+5"; + kb-custom-6: "Alt+6"; + kb-custom-7: "Alt+7"; + kb-custom-8: "Alt+8"; + kb-custom-9: "Alt+9"; + kb-custom-10: "Alt+0"; + kb-custom-11: "Alt+exclam"; + kb-custom-12: "Alt+at"; + kb-custom-13: "Alt+numbersign"; + kb-custom-14: "Alt+dollar"; + kb-custom-15: "Alt+percent"; + kb-custom-16: "Alt+dead_circumflex"; + kb-custom-17: "Alt+ampersand"; + kb-custom-18: "Alt+asterisk"; + kb-custom-19: "Alt+parenleft"; + kb-select-1: "Super+1"; + kb-select-2: "Super+2"; + kb-select-3: "Super+3"; + kb-select-4: "Super+4"; + kb-select-5: "Super+5"; + kb-select-6: "Super+6"; + kb-select-7: "Super+7"; + kb-select-8: "Super+8"; + kb-select-9: "Super+9"; + kb-select-10: "Super+0"; + ml-row-left: "ScrollLeft"; + ml-row-right: "ScrollRight"; + ml-row-up: "ScrollUp"; + ml-row-down: "ScrollDown"; + me-select-entry: "MousePrimary"; + me-accept-entry: "MouseDPrimary"; + me-accept-custom: "Control+MouseDPrimary"; +*/ +} diff --git a/dot-config/rofi/configs.rasi b/dot-config/rofi/configs.rasi new file mode 100644 index 00000000..048e3237 --- /dev/null +++ b/dot-config/rofi/configs.rasi @@ -0,0 +1,288 @@ +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Filter..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 8; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/confirm.rasi b/dot-config/rofi/confirm.rasi new file mode 100644 index 00000000..531b98bb --- /dev/null +++ b/dot-config/rofi/confirm.rasi @@ -0,0 +1,144 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/* +USE_ICON=YES +*/ + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 300px; + x-offset: 0px; + y-offset: 0px; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + background-color: transparent; + children: [ "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt"]; +} + +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 10px 14px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 2; + lines: 1; + cycle: true; + scrollbar: false; + layout: vertical; + + spacing: 10px; + background-color: transparent; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + padding: 5px 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: pointer; +} +element-text { + font: "feather 20"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +element normal.normal, +element alternate.normal { + background-color: var(background-alt); + text-color: var(foreground); +} +element normal.urgent, +element alternate.urgent, +element selected.active { + background-color: var(urgent); + text-color: var(background); +} +element normal.active, +element alternate.active, +element selected.urgent { + background-color: var(active); + text-color: var(background); +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} diff --git a/dot-config/rofi/custom_command.rasi b/dot-config/rofi/custom_command.rasi new file mode 100644 index 00000000..645dd7e0 --- /dev/null +++ b/dot-config/rofi/custom_command.rasi @@ -0,0 +1,73 @@ +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/*****----- Main Window -----*****/ +window { + location: center; + anchor: center; + fullscreen: false; + width: 350px; + x-offset: 0px; + y-offset: 0px; + padding: 20px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background; + cursor: "default"; + children: [ "inputbar", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt", "entry" ]; +} + +dummy { + expand: false; + width: 10px; + background-color: transparent; +} +textbox-prompt-colon { + enabled: true; + expand: false; + str: "$"; + padding: 10px 13px; + border-radius: 0px; + background-color: @active; + text-color: @foreground; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @foreground; +} +entry { + enabled: true; + padding: 10px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: inherit; + cursor: text; + placeholder: "Command"; + placeholder-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: false; +} diff --git a/dot-config/rofi/emoji.rasi b/dot-config/rofi/emoji.rasi new file mode 100644 index 00000000..e7f70ef8 --- /dev/null +++ b/dot-config/rofi/emoji.rasi @@ -0,0 +1,302 @@ + +/*****----- Configuration -----*****/ +configuration { + modi: "window,emoji"; + show-icons: true; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: "😀"; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Filter..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 8; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} + diff --git a/dot-config/rofi/file-browser b/dot-config/rofi/file-browser new file mode 100644 index 00000000..b67abcf0 --- /dev/null +++ b/dot-config/rofi/file-browser @@ -0,0 +1 @@ +cmd "exo-open --launch TerminalEmulator" diff --git a/dot-config/rofi/filebrowser.rasi b/dot-config/rofi/filebrowser.rasi new file mode 100644 index 00000000..27d9e146 --- /dev/null +++ b/dot-config/rofi/filebrowser.rasi @@ -0,0 +1,270 @@ +/*****----- Configuration -----*****/ +configuration { + modi: "file-browser-extended"; + show-icons: true; + display-filebrowser-extended: " Files"; + window-format: "{c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview"]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Search..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 7; + cycle: true; + dynamic: true; + scrollbar: true; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/global/emoji.rasi b/dot-config/rofi/global/emoji.rasi new file mode 100644 index 00000000..470179aa --- /dev/null +++ b/dot-config/rofi/global/emoji.rasi @@ -0,0 +1,68 @@ +configuration { + display-emoji: ""; + show-icons: false; + me-select-entry: ""; + me-accept-entry: "MousePrimary"; +} + +* { + font: "Noto Sans 11"; + text-color: #eff0eb; + background-color: #1917244D; + border-color: #00000000; + width: 684px; + height: 477px; + location: 0; +} + +inputbar { + border: 0 0 1px 0; + children: [prompt,entry]; +} + +prompt { + font: "Noto Sans 18"; + vertical-align: 0.5; + padding: 0px 9px 0px 9px; + border: 0 1px 0 0; +} + +entry { + padding: 12px; +} + +textbox { + background-color: #1917244D; + border-color: #1917244D; + padding: 13px 13px; +} + +listview { + cycle: false; + scrollbar: false; + columns: 9; + cycle: false; + dynamic: false; + layout: vertical; + padding: 8px 10px 10px 10px; +} + +element { + border-radius: 3px; + padding: 14px 0px 14px 0px; +} + +element-text { + font: "Noto Color Emoji 27"; + expand: false; + text-color: #333333; + horizontal-align: 1; + vertical-align: 0.5; + margin: 0px 0px 0px 13px; + width: 1px; + padding: 1px 0px 16px; +} + +element selected { + background-color: #191724; +}
\ No newline at end of file diff --git a/dot-config/rofi/global/history.txt b/dot-config/rofi/global/history.txt new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/dot-config/rofi/global/history.txt diff --git a/dot-config/rofi/global/icons/ddg.svg b/dot-config/rofi/global/icons/ddg.svg new file mode 100644 index 00000000..20ea387b --- /dev/null +++ b/dot-config/rofi/global/icons/ddg.svg @@ -0,0 +1,615 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="svg2" + width="240" + height="240" + viewBox="0 0 240 240" + sodipodi:docname="ddg.svg" + inkscape:version="0.92.4 5da689c313, 2019-01-14"> + <metadata + id="metadata8"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs6" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1321" + inkscape:window-height="740" + id="namedview4" + showgrid="false" + inkscape:pagecheckerboard="true" + inkscape:zoom="0.4609375" + inkscape:cx="296.6541" + inkscape:cy="256" + inkscape:window-x="45" + inkscape:window-y="28" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /> + <image + width="230.37288" + height="230.37288" + preserveAspectRatio="none" + xlink:href="data:image/png;base64,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 +RU5ErkJggg== +" + id="image10" + x="4.8135605" + y="4.8135605" /> +</svg> diff --git a/dot-config/rofi/global/icons/google.svg b/dot-config/rofi/global/icons/google.svg new file mode 100644 index 00000000..21e5bf37 --- /dev/null +++ b/dot-config/rofi/global/icons/google.svg @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="svg2" + width="240" + height="240" + viewBox="0 0 240 240" + sodipodi:docname="google.svg" + inkscape:version="0.92.4 5da689c313, 2019-01-14"> + <metadata + id="metadata8"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs6" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1321" + inkscape:window-height="740" + id="namedview4" + showgrid="false" + inkscape:pagecheckerboard="true" + inkscape:zoom="0.49166667" + inkscape:cx="-87.457627" + inkscape:cy="240" + inkscape:window-x="45" + inkscape:window-y="28" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /> + <image + width="200" + height="200" + preserveAspectRatio="none" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAABmJLR0QA/wD/AP+gvaeTAAAgAElE +QVR4nO3dd3wVVeI28OfM3JLc9JBCl947WGgKKoht1XUt29V91V1X115BjaJixYKKZffnurq6dl2k +2UDEhsBSRHpPQkJISM9tM+f9A921ACm3nCnP9y8+JNz7kNw7zz1nzpwBiIiIiIiIiIiIiIiIiIiI +iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI +iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI +iIiIiIiIiIiIiIiIiIiIiIiIiMiJhOoARG4ib0Y+4OmDsOwFQ3ZDFJ0QER1gmDkwRRZMZMCQAYTh +RQQ+hKFDQENI6pAAvnvPBr/33vUC+O6rfmFAfPtnHyIAAA0m/GiCjnr4RC08ogpe7IMuy+HBHgix +G16xHYHoZjEV5Un8cRC5GguYKE7kOdDRAf2h60cjJAciJHoiIrshKNujEVlolD5ELP6eS4FEpogg +IGoQQDn8Yge8ciP8+gbkYRWujqwQ3xU8EcXE2gcDIguSFyEDOfokmPJYhMRINMgeqJW52C9TYKhO +l2BeADmiCemiHOliI3zyKwS09+GNLhVFMFXHI7ITFjDRYcj7/H1RETkTDWI8as2BqEEH1Eo/x4A/ +4oNEjmhEpihBmliPgFwKj/myuBslqqMRWRULmOhb8jKkI0X/JRrxMzTI4dgv26NG6qpz2ZYA0E4E +kSN2IF18hnS8CZ8xnyNlogNYwORa8gr0hEf7HerEZNSY/VEhsxw/hayaHxIFohKZ2tdIl+8h3fyb +KMJe1bGIVGABk2vIIuSiUbsU9eLn2GsOxF6ZyqlkxTQA7UQdcrESGdoLyDKeF0WIqo5FlAwsYHI0 ++Wf9NERwIWrMsdgrC3lot7gATHTQSpAlFiFdmy3ujnyhOhJRorCAyVHkw8jGXu1yVOBc7JH9USs9 +qjNRDHJFCB20/yAHT8FvvMDzx+QkLGCyPXklChHVbkCNPBtlsitCfF07UqYw0FGsRZ7+PPyRJ0UR +wqojEcWCByqyJXkjshDWrkO1/BV2yu6W3+CC4isAEx3FDmSLl5BlzhBFaFQdiai1eNAi25A3IAMR +7QZUyt+gRB6BMF+/hANl3FVbi3xxv7jHeEl1HKKW4gGMLE9O03+OKjkNW+UwNEq+ZunQckUQHbQP +kKXfJO4Lr1Mdh+hweDAjS5JT0Qk1+nSUm2ehTGarzkM2IwB0ElVoL55HljmNU9RkRSxgshR5nfdi +lEdvRLHsyUuGKC7ShImu2goUiuvF9OjHquMQfYcFTMrJp5GHnfp92GyejzIZUJ2HHEoA6CAqUCge +xWPmPQLchoXUYgGTMvJ67zDUm49gq3ksmnhul5IoR4TRVZuLPOOP3AqTVOFBj5JOXq//EqXmXdgt +e3AMQkqlQqKnvhLZ4goxI/q56jjkLixgSgopIXCjdgt2yWtQInNV5yH6AQ1AN7EdnbQrxD3GXNVx +yB1YwJRQ8jmkYJ3+CLabv8demaI6D9FhCQDdtGJ0EleLGcbrquOQs7GAKSFkETyo0e7HNvlnVEmf +6jxErSIAdBHl6KTdLO43nlMdh5yJBUxxJYvgQaN2F7bIq1Ah/arzEMWsg6hFD1Ek7jUfVh2FnIUF +THEhi6ChVrsP2+Xl2MepZnKgLmIfumqXiXuN11RHIWdgAVPM5C3eK7Elehf2yHTVWYgS6rtzxF20 +X4u7o0tUxyF7YwFTm8np+i+wXc7GZjNPdRaipNIB9NJXoNA4W9yNnarjkD2xgKnVZJFvEPZEX8YG +cxBvj06ulgqJXvoCFBi/EkWoVh2H7IUFTC0m70UWdumvYYNxIu+/S/Q9WSKKPuJxMdO8WnUUsg8e +RKlF5M3aNKyXt6FSelVnIbKsjqIavbTfibuNOaqjkPWxgOmw5P2eKdhs/h0bzELVWYhsQQfQQ/8K +XY3TuM80HQ4LmA5KzkAOivU5+MYYy9sCErVBlohigHhI3G/epDoKWRMLmH5C3uj9MzZEZ3IHK6I4 +6CrK0U0/l5ct0Y+xgOm/5HR0x05tATaZfXiXIqI48gIYoM9FnvFzUYSw6jhkDSxgAgDIq7Xp2Chv +Rp3UVWchcqz2oh69tPPEDGOe6iikHgvY5eS9voH4JroQ281OqrMQuYIXwEB9LkLGWeIZRFTHIXU0 +1QFIHXmr5wEsiaxl+RIlUQTAKuNUVIlKeZNnsuo4pA5HwC4kH0EhNmiL8Y3Zj+d6iRTyAuinz0eB +8TNRxOsN3IYF7DLyFu8VWBOdiRrpUZ2FiL7VUVSjl+dkcXfkC9VRKHlYwC4hH4Mf6/WFWGccx1Ev +kQX5ITFYe0Q8bF6jOgolBwvYBeSdntFYZyxAqcxUnYWImtFHW48u5jGiCLWqo1BicRGWw8lb9Mew +1PiU5UtkE5vM/lgj9sibPMerjkKJxRGwQ8kHkIZibQlWmSN4y0AiG/JBYqj2pJhpXq46CiUGC9iB +5K3eo7Ex+iH2yDTVWYgoRgempMeJIlSpjkLxxSloh5E3eq/A8uhnLF8ih9hk9sdaUSynesapjkLx +xRGwQ0gJgev017HC+DkM1WmIKO4CMDFcu07caz6sOgrFBwvYAeRjyMdqbRk2md1UZyGiBNIADNFf +F7OMc1RHodixgG1OzvBMwEpjPspkiuosRJQkfbWv0dk8WhShUXUUajsWsI3JO72/w7Loc6iRPJdP +5DYdRS26eMeKB8Nfq45CbcMDt03JmzyPYnHkeZYvkUuVykxsiPxH3qRzOtqmOAK2IXm5/ibWGmfx ++l4igg8Sw7TbxEPmXaqjUOuwgG1EPo0AlmmrsMnsrToLEVmIDmCYNls8Yl6mOgq1HAvYJuSzKMSn +2lpsNfNVZyEiCxIABuofi9nGBNVRqGVYwDYgH/IOxVfRz1AiA6qzEJHF9dNWo5M5ivcXtj4WsMXJ ++z3jscz4EOXSqzoLEdlEd60UPczB3L7S2ljAFiZv08/CSvN1rnQmolbrIGowQHYTRahWHYUOjgd2 +i5K36L/CMoPlS0Rtk6v9h+VrbTy4W5C8zXsxlpsvooG/HyJqg4H6YvGUMVF1DDo8HuAtRt7quQaf +RZ5Bk+TpASJqPZavbbCALUTe6rkJn0cfQkh1EiKyJZavrXCUZRHyVm0GPjVvQkR1EiKypUG8Bthu +OAK2AHmn5yaWLxG12UB9McvXfjgCVkze6v0LPo88ymlnImoTTjvbFgtYIVnkvQCfRv4PQf4eiKgN +WL62pqsO4FbyTt+v8Gn0eZYvEbUJy9f2ePBXQN6hn47PzbfRwE02iKgNBonFYrZk+docR8BJJu/3 +jMUX5gLUSf7siaj1BuqLxVMmy9cBOAJLIjnbNwjLjEWoZvkSURsM4rSzk3AKOknk08jDEm07dpnp +qrMQkQ3xnK/jsICTQD4GP1Zqu7DVLFCdhYhsiOXrSJyCTjApIfC1torlS0RtMkiwfB2KBZxo1+jz +sN7spzoGEdnQQJ2rnR2MBZxAcpp2D1YaU1TnICIb4rSz4/EccILIu72/w6LI89xikohajeXrCizg +BJBPeMbgPeMTVHGjDSJqpUH6YjGb5esGLOA4k08jDx+KXdgjU1VnISKb4Q5XrsIRWhxJCYHl2jKW +LxG1GhdcuQ4LOJ5u0l/FBrO76hhEZDM85+tKLOA4kbd5/4wvjV+ozkFENsPydS2eA44DOcM7HEuj +y1HLRVdE1AosX1fjTQFiJJ9AOpbja1TIFNVZiMhGBgne1cjlOGKL1UbtE+w2M1THICIb4YIrAuBR +HcDO5F2eB/B+dJjqHGRjGoAMYSANDUhBFXyiCn5RAT/KoMsymCiDECVIEXuRLWqxP1INAOiHSvEb +1AKALEIeojjwIdDwFsAjUxCU7SFkZxjogIhojyjyEZF5CKIAQZmNegTQIDVIZf9z9xqkf8zrfAng +OeA2kw94RuMj41PUS/4MqXkpkMgVdUgXxUgVa+CXa5GmfQUt+rkoQr2KSLIImQh7jkTIHI2QOBpN +sg9qZCfslwGEeWxIiAPlO0F1DLIGvsnaQL4KH/6t7cVOM0t1FrIgPyTyxH5ka+uQLpcgW5uHqdHP +hbDPeFNO9RyLJvMsNIjxqDZ7o0JmIqI6lc2xfOlHWMBtIK/UP8JKTiHRtwIwUaiVIFt8jly8Bhhv +iyJEVceKJ1mEFIT1n6MW56HKHI1ymcdRciuwfOkg+AZqJXmH92IsijwDQ3USUkYD0EHUIF/7HNl4 +DrrxuiiCqTpWMskiBFDnvQAN5jmoNEehXKbbZ3yfZCxfOgQWcCvIZ1GI+WI3KqRXdRZKMi+Aztou +5OItpJiPiHuxQ3UkK5G3eoej1rwee83J2CPb8QPqt1i+dBgs4FaQl2kbsNbsqzoHJcmB0i1GPl5D +hnmPKMI+1ZHsQE5FF9TrU7HX/AVKZDvXjoxZvtQMFnALyemeu/B+dKprDyZuki/q0UF7DfnGLaII +Zarj2Jm8xTsCDebtKDYnYa+LblLCWwpSC7CAW0DO8vXDe5F1qOZWk46VJkx005YjT9wu7oouUB3H +ieSN+m9QIW/FDrOPo1dUc+RLLcQCbgF5ibYT682uqnNQAhSIenQUL6CdeZMoOrCxBSWWnIbuqNYf +wS7zZOx32HoKli+1Agu4GfJ2bToWmdM49ewgAkA3rRSd9CIxI/Ks6jhuJYugoV67Fbvk1dgj7X9N +PcuXWokFfBjyb+iId8Qu7Je8aYUT6AC6io3ooF8p7osuVB2H/kdO816IPcad2GJ2tuUFXTznS23A +Aj4Mebm2FqvNQapzUIx0AL20tSjQLxD3RFaqjkOHJm/Wz0SJfBQ7zK62mXXiyJfaiAV8CHK69w/4 +MPJXXs9oYzqA7mIbCvU/iHuji1XHoZaTN+pnYI98HNvNzqqzHBbv50sxYAEfhHwRmXhb7EW59KvO +Qm3UTduNLtrvxT3RRaqjUNvJa72XoTg6A6UyU3WWn+DIl2LEAj4IeZ2+CF/yjWVLhaIBR3huEA9F +nlQdheJHXqnNwBZ5HWqlNW6hOkjwfr4UMxbwj8hHPSdgTvQDhFQnoVZJEyb6aX9FtvEnt+3L7Bay +CLko11/HRmOi0uuIOfKlOGEB/4i8WCvDBrNQdQ5qIQGgl7YSAfN08ThKVcehxJNTvcdgl/E6dpid +kv7kLF+KIxbw98h7PLdgQfRu26y+dLsC0YQ+2qVihvGC6iiUfPJqbTo2yJtRn6TLBDntTHHGAv6W +nIlUfCb2c+GVDegAeuufIss4STyIBtVxSB05FV2wV5uDjebQhH5w5mpnSgAW8LfkNfrb+Mo4Q3UO +akaBqEcX7VzxiDFfdRSyDnmTdjW+lvejJgGLtDjtTAnCAgYg7/f3xofhjWiU/HlYlQAwUP8YHuMk +MYtL5Oin5FR0QrFYhG2yd9welNPOlEAsHADycm0NVpuDVeegQ8gSUQzwXCnu56VF1Dx5rfYg1prX +oCnG4xunnSnBXF/A8lH9FLxjzHX07dHsrIfYhkI5XtzPFc7UcvJGzxhsN+ZjTxs38OC0MyUBC/hS +rRzfmAWqc9CPaAD66K+JZ41zVUche5IzkYpN+hJ8Y4xq1QIt3liBksTVN5iXD3gvx3qWr+VkCANH +6/+P5UuxENegSTxlHIlR2gz4W1jBA1m+lDyuHQFLCYHfa/ux3bT/fUidpKOoQg/faDEjtEl1FHIO +OVU/HV+br6NK+g75TZx2piRz7wh4ie8sTNazkO3azyDW00NbA1N2ZvlSvIm7jTkYJHvgCFFx0G84 +MO08IbmpyO1c2T5SQsPH/pUQGIoggLcjwNfcPlgZAaC//o542jhTdRRyNlkEH4q15dj4vaseuNqZ +FHFnAS/2/RJCvPS/vwDwhQEsiIL3/00yL4CR2p3iAfN21VHIPeRl+lv42jgTA3mdL6njugKWr0JH +gX8dBPr+5IulEng1AuzjZtBJEYCJ/voF4hHu5UzJJ6fqp4u7jTmqc5B7ua+AP075HSCfP+Q3RAC8 +FwU+51A4oTJEBH30yeKR6GLVUYiIVEjOXUQsQi6HF1H9NQC5h/wmHUAfDSjQgM0mp6QTIVeEMdwz +Rtwf/Vx1FCIiVdy1Cro+5TeQ6Nmi7x2kAVf4gC7u+hElXK5oQl85TEyPrFAdhYhIJdeMgKWEwE79 +BQi0fOONFAEM1w98TNkpwfsEx6hA1KOvHCTuwxbVUYiIVHPNOWC52H8yBOa1+QG2mMBrUaCBLdwm ++aIBBbKveAolqqMQEVmBe+ZXBa6L6d/30oArvEBP9/zI4iZPBDFADmX5EhH9jytGwHKJbwikWIV4 +/H9NAF/ymuEWyxEh9PMOF/eH16uOQkRkJe4YzkncgHh92NAAjNaBC7xApis+v7RdhohigGc0y5eI +6Kcc3yByUWpnaOY2HNhzKb64jeWhpcJEP8+J4rHoItVRiIisyPkjYM28EokoXwBIAXCeFzjV46L1 +5C3gATBA/wPLl4jo0Bw9ApZLkQHDvwtAdsKfjNtYHiAAjNLuFjPNaaqjEBFZmbNHwKb/90hG+QJA +RwFc5gOGuXwo3F9/k+VLRNQ8Z4+AP/avBjAk6U/8HwOYEwXCSX9mtbqJdeIFOUh1DCIiO3DsCFh+ +kno0VJQvcGD3rMt8QAdHf775oUJRg1R5lOoYRER24dgChmlerPT58wTwR9+BS5ac3sMBYaC9d7x4 +Bo2qoxAR2YUjq0EuQjo0fymADNVZAAAbTOCNKNDkwAVaGoCh+qXiMeMZ1VGIiOzEmSNgLeVXsEr5 +AkC/b7ex7ObAH3d//VWWLxFR6zlzBPxxyleAHKU6x09IAIuiwCLDGXdW6iJ24SXZTTjjf0NElFSO +G5LJJb4hlixf4MDHneM9wEUO2MYyXURRII9j+RIRtY3jChhSXKo6QrO6fzsl3c+mP34BoLe4RjyC +HaqjEBHZlc2HYT8k58GPNH8ZkrX5RqwkgC9seGelvuIT8Vd5rOoYRER2ZtMh2CEE/JNhl/IFDnz8 +Ga0Dl/oOXLZkBzmiESF5suoYRER256wCFvI81RHaxC7bWGoAOmu/FS+gQXUUIiK7s8mwq3lyEVKg ++csBZKrOEhMrb2PZT3wknpUnqI5BROQEzhkBa75TYPfyBay7jWWOCKGTPEN1DCIip3BOAUM7V3WC +uLHiNpbdxFWiCPWqYxAROYVVDu8xkcsRQIO/HEC66ixxZ4VtLHmXIyKiuHPGCLjBdxqcWL6A+m0s +fZDwyTPVPDkRkXM5o4AhnDP9fDCZAviDFzhewZR0L/2f4m/YkuRnJSJyPNtPQX87/VwBIKA6S1Js +N4HXokBtEqaks0UQKTJLvGbJNdlERLZm/xFwo38i3FK+QHK3sTxC3M7yJSJKDPsXsMQU1RGSLlUA +v/YCp3qARO3d0V6Ui8fN+xP06ERErmf/AhZw57aI39/Gsl2czyQIAAWa9W9qQURkY7Y+Byw/9vcG +sEl1DuXCAP4dBVbF6Y4OXcR28ZLsEZ8HIyKig7H3CFi6dPT7Yz4Av/AAZ3sO/DkWAkCu9uc4pCIi +osOwdwFrLOAfiMc2ll3FJvG4MT9+oYiI6GBsW8ByEVIgwXvS/lgs21gKAJn6HxMRi4iIfsi2BQz4 +J8BNlx+1ho4DK6R/7T2wYrqlOolt4snoooTlIiKi/7JvAXP6uXmt3cYyW7spsYGIiOg7tl0FLT/2 +rwXAGwS0hASwKAosMg78+WDaiwrxmixIZiwiIjez5QhYLkI2gAGqc9iGAHC8B7jIe2Bf6YMpFNx0 +g4goiWw5ApaL/SdDYJ7qHLbUKIE3owduc/idLBHCuzIgAPPQ/5CIiOLJliNgCDFGdQTbChxkG8v2 +4jWWLxFRcnlUB2gTIccd8lwmNe+7bSyP0IA3IlEEzRtURyIichvbTUHL5fCiwV8NXoIUHwZmiuND +16qOQUTkNvabgq73DgPLN3488m+qIxARuZH9CljTxqqO4CBLxLHhb1SHICJyI/sVMLgAK34ER79E +RIrYr4ClZAHHRxPM4JuqQxARuZWtVkHLT9MLEI10Up3DIeaJiahXHYJi0+GGNbwegBzj0h7//G0s +/z4/t+7tP5/7pG2Oa7YqYEQiQ+23btuipHxFdQQiou97etuvX4jl319svHoJgGfjFCfh7DUFLTBE +dQSHaEQozJ3EiMhRao3AeNUZWsNeBQw5WHUCR5Di3+IkNKiOQUQUT1XhTFsN0mxWwBrvfhQXJhdf +EZHj7A3ndVWdoTVsU8ByETyAHKg6hwMY8IU/VB2CiCjedjZ2zlKdoTVsU8DQfX0ApKiOYXsCn4sx +qFIdg4go3qrDmdrds6+zzUypfQoYXIAVF6acrzoCEVGiNAr/FNUZWspGBaxxAVY8CBYwETlXTTjT +NtsV26eAJc//xkEZjo2sUh2CiChRqkLZ/VVnaCn7FDDQQ3UA25NisRC8kzIROVdZOK+j6gwtZacC +7qY6gO0JuVR1BCKiRKpoyktTnaGlbFHAckl6PoAM1Tnsz/xMdQIiokSqjGRrD750SZ7qHC1hiwKG +GeqmOoID1MOMrFUdgogokaQUaKrNOkp1jpawRwFDdFMcwP4EvhATEVUdg4go0RqjvhGqM7SEPQpY +E91UR7A/welnInKFRjN9gOoMLWGPAga6qw5ge1KuUB2BiCgZaqNptugMexSw5Aro2Ame/yUiV6iN +ZNjiUiR7FDBHwLGqw7HBHapDEBElw/5IVq7qDC1hlwK21S2mrEeu5QYcROQWe4N5AdUZWsLyBSwX +Ig2ALX6Y1iXWqE5ARJQsVZEs7YlXL0tXnaM5li9geFJscUG1pUnw/C8RuYaUAtX7Apbfvtj6Bewz +WMCxEtiiOgIRUTJFoLGAY2Zq7VRHcIDtqgMQESVTRPgtv3bI+gUMyRFwbCTM0G7VIYiIkili6J1V +Z2iO9QtYCo6AY1MqJiKoOgQRUTKFDH8H1RmaY/0CFizgGO1QHYCIKNnCpq9AdYbmWL+AIVnAMZE7 +VCcgIkq2oPRZfjMO6xewFDwHHBNRpjoBEVGyNRkp2aozNMf6BSyk5T/FWJqUVaojEBElW2M0JUN1 +hubYoIC5C1ZMhLZPdQQiomQLGT6/6gzNsX4BS+FTHcHWhFmpOgIRUbJFhEdXnaE5NihgaflPMdbG +ETARuU/UYAHHTsCrOoKtSZPngInIdUzoLOCYCXAEHAtNa1AdgYgo2cKm1/L9ZvmAkCzgmERFWHUE +IqJki5geoTpDc6xfwAAXYcVC10OqIxARJVvU9Fi+3ywfEOAIOCaheo6Aich1whwBxwVHwLFIAwuY +iFwnYnpZwHHAAo5FMQuYiNwnLK1fHXYoYCIiIsexQwFzBBeLzpxBICL38WoR1RGaxQJ2ugYWMBG5 +j1dEpeoMzbFDAfMymlj401nAROQ6umawgOOAI+BYGAYv4yIi1/GCI+DYCY6AY+KxwVJAIqI482iG +qTpDc6xfwJIFHBPTTFMdgYgo2TwiwhFwzCSsv5TNykytneoIRETJ5hEmR8AxE4Ij4FjoZp7qCERE +yaZrhqE6Q3NsUMCSi7BiIQVHwETkOj4RYgHHTKJRdQRbk5IFTESuk+ZptPzsqfULWIhK1RHsTXAK +mohcJ0UL1avO0BzrF7Ap96mOYGtCFKqOQESUbD5PtFZ1huZYv4CF5Ag4JvII1QmIiJLNL0L7VWdo +jg0KmFPQMeqmOgARUbJ5hGn52VPrF7DJEXCMOspFSFEdgogomTxatEJ1huZYv4AhLP8pxuIEPP6u +qkMQESWTgNyjOkNzrF/AmskRcKxMTkMTkbtIIUpUZ2iO9Qs4orOAY9dbdQAiomQyDbFLdYbmWL+A +o0FOQcdusOoARETJFEkPr1WdoTmWL2BxEhoA7oYVGzlEdQIiomRJ0xvlXy+eWq46R3MsX8Df2qk6 +gL2JQVJCqE5BRJQM+SlVtriHgF0KeIfqADaXgaUp3VWHICJKhixvreV3wQLsU8DbVQewPWlyGpqI +XCFDb7DF2iF7FLDgCDhmpjZCdQQiomQI6E3FqjO0hD0K2JQ7VEewPSHHqI5ARJQMumZsVZ2hJexR +wFJyCjp2x8hF8KgOQUSUaKapfaM6Q0vYo4CRskN1AgdIg+7leWAicrxapH+hOkNL2KKAxcS6fQDq +VOewPVMbqzoCEVEieYSBjfVHrVadoyVsUcDf2qE6gO0JwQImIkcrTK0IrSsayOuA40rCFifVrU1O +kNJGv3Miolbq4NtbpTpDS9nnYCzE16ojOEAhlnqHqw5BRJQoWb5a2yzatU8Bw7T8xtq2YIopqiMQ +ESVKih6yxflfwE4FbGKN6gjOIE5WnYCIKFEihu8T1Rlayj4FXBHeDN4VKR6OkZ8hV3UIIqJE+KJ+ +6MeqM7SUbQpYnAsDEOtV53AAHRHfJNUhiIjiLcNbH91YNK5UdY6Wsk0BAwCEyWnoeBDa2aojEBHF +W5fUUsvfA/j77FXAEFyIFQ9SnioXIV11DCKieMrzVdlqltRuBcwRcHwEoPlOVR2CiCieMj2Nn6nO +0Br2KmDDa5vl5dYnzlOdgIgongykzFGdoTWE6gCtJT/27wbQWXUOu6szfaGZ9YOGFZ3++QbVWYjc +asZfr54ya/MF86W03aHYctI8jeaWe472AEKqztJS9hoBAwCEraYYrGibkYlr6kb7g8L7oOosRG62 +qbZHEcs3Po5ILdlnp/IF7FjAUn6qOoKdfRTuiOtrj0GZEcDOSPrkCYsm8B7BRAoUFZ3jW7F/8CjV +OZwix1tju+2K7VfAuskCboOw1DGrYTAerh+KsNQBAHXweY9tMC5WHI3IlYL5fW+uCOXqqnM4hYB8 +X3WG1rJfAUcjqwE0qI5hJyVGGq6tHY33Qj89dV5v6tcoiETkehvqel+iOoOTbK7u8S/VGVrLdgUs +JiIK4EvVOeziy0gBrq0djR1GxkG/vtXI6vWnN07skeRYRK5W9NTUUSv2DyrgakkAACAASURBVOmo +OodTFPirmlbdO3GH6hytZbsCBgBIwWnoZhgQeL6xL+6uG4kG6T3s92X6Qg8lMRqR6+1uKnwkKjn7 +HC9dAsWbVGdoC3sWsMaFWIdTY/pwe92ReD3YAy1ZErjTzDhtwnMXpCQ8GBHhiVcvS/+yctho1Tmc +JNNX/6HqDG1hzwIOhb4AYKqOYUVfR3Pwl9pxWB1p1+J/U2/6PBPyN92awFhE9K0tezo+VBnOtuex +16Kqm7JeVp2hLWz5IhCTUAPAdkvOE0kCeD3YA9Nqj0aV6W/1vy8x0v8Mab+NWYjspKioSFtWPfx3 +qnM4SZa3Ljpv2vkrVOdoC1sW8Lc+Uh3AKhqlB/fWD8fzjX1htLFD95iBrKK543hJElECNRXI27c1 +dOHpnjjqGijZbrcNOL5j3wIWWKA6ghVsMzJxVc1YfBZuH/NjlRupRbEnIqJD+c/+gVeqzuA0mXrD +e6oztJV9C9gIfQygUXUMlT4Kd8QNtcdgjxmIy+PtNtM6THtrwplxeTAi+oFps6f9aW1NvyzVOZxm +Z7jDbNUZ2sq2BSwmIghgseocKoSljse+3dUqFOdLGWo92qNxfUAiAgAsrxp8l+oMTlPgr2r86rYp +61TnaCvbFjAAQLpvGnqvmYqb6o7C+wfZ1SoetkUzuxa9O/78hDw4kUvd+sTUy1bX9M9VncNpugZK +vlKdIRb2LmBdzFUdIZm+Chfgypqx2BzNTujzlJn+RxL6BEQu82X10LtVZ3AijzD+qTpDLGxdwGJ8 +cBuAzapzJJoJgZeaemF6wwjUH2ZXq3gpNtILb3v32N8n/ImIXOCmJ6fdvLamX2I/NbuQR0Tl0uBI +W17/+x1bFzAAx09D7zf9mFZ7FF5u6o1k3je0zEh5uKioyP6vDyKFLnn6Eu8n+47hJjcJ0CNtV3FF +0cB61TliYf8DrIMvR1oXzcFVtWOxNpr8U0elZiAHI9/ntBlRDALhbs9uq++aqjqHE+X6qxeqzhAr ++xdwWmgxHHY5kgTw72A3TKs7qk27WsXLRiP72kveP5GXTRC1wd0vXVn4UfmY36rO4VSVoezHVGeI +le0LWIxCIyDeVZ0jXpqkB/fXD8Ozjf0RlWp/PXXS6y0MBl9QGoLIpjbv6f1mRTjX9sdYK+qSWlq9 +5LYz16rOEStnvDiE+arqCPGww8jAVbVjsDTcQXWU//rayDntlvnjh6jOQWQndzx1w6RFFceMUZ3D +qTqmlM9XnSEenFHAnvA8ALY+Gb8o1BHX14xGqZGmOsoPRKQuaiK+d1TnILKTz/eN/FfY9KmO4Vhl +odwHVWeIB0cUsBiDJkD8W3WOtohAwzON/TGzYSiCsOYNuncaGd2K5oy7SXUOIju4dtYdj62u5aYb +iVLo31f7RdHpK1XniAdHFDAAW05D7zNTcHPtMZgT7KY6SrM2mZnTr50zIU91DiIrmzZrWveF5RP/ +rDqHk3VMLXfMlS/OKeD68AIANapjtNRX4QL8pXYsNkbtsci41vR5PDBdtfMYUWt909jz/cpwtnOO +qxa0u6mDY3bqc8wLRZyCECAtf67y+7ta1dnsHNE30dyjbpsznvcMJjqIa2ZNn/p55cieqnM4WYG/ +qnbt9OO+UJ0jXhxTwAAAISw9DV0rvSiqG5X0Xa3iRQLYamQ+fsW88fmqsxBZSdHDN3X7oHz8Hapz +OF3XQPFbgJCqc8SLswq4Xeh9QFSpjnEw66PZ+Ev1ePwnYu/TqDXS6wsYwvY70BDF06pwv48qwrnW +XEXpEEJI7G4ocNTufI4qYDEQYUC+pDrHjy0IdcEtdUejUqrb1Sqe1kVzh9/x7ljub0sE4E+PPvj4 +l5UjuqvO4XS9AjuKV9012VE333FUAR8gn1Gd4DvBb3e1eqJhkPJdreJtXTSnqGjhmEGqcxCpNPWJ +qWM+KB97meocbpDuDT6tOkO8OasVAIjjwmsB+aXqHMVGOq6tHY1PLLSrVTw1So9WGkpbNPLpSxJ/ +f0QiC7rugQfSllYeubA+mma/BR0249Mi5uc1PWepzhFvjitgAIDQ/qry6ReHOuLqmjHYZaSrjJFw +pUZa3pSO31h+5TlRIuyWuUs21fdw9pvcIrqn7V62/75RtrnMtKWcWcBG8F8AapP+tBB4vrEvHrLw +rlbxtiaad/Kdc0dzlyxylSsemfHgkn1HjlCdwy1qjXRHrjB37NSJXOJ/BhJJu2Z1n5mCe+uHY2M0 +O1lPaRkpIiqH6dXHTjt96VLVWYgS7frZRae9seuUfzcZKY49flpJoX/f/lXTJ7Zz0uVH33HmCBgA +TPPZZD3Vmmgurq4Z68ryBYCg9IitZvrCP707Lkd1FqJEuvbxu45YVDbmDZZv8nRIrfibE8sXcHAB +iwmRryCxOpHPIQG8HuyBaXVHoVraa1ereKswUwIe07/inFfPccfcO7nOBUVFKWur+6woaWrv7jd7 +Evm0iLmutv89qnMkimMLGAAgkLBRcJ304o66UXi+sa8td7VKhO1GRvfeqWXcpIMcqSnQadna2n7t +VOdwk34Zm7/Yde+Q/apzJIqzC1gP/QNAdbwfdks0C1fXjMWKCHdk/LE10XYnTJ87+inVOYji6fcz +n3x9yb6jB6vO4TZNkdSbVWdIJEcXsBiHOkDE9eLtd4NH4Pq6Y1BupsbzYR1lebjg0hlzRl+uOgdR +PFz66EMPvF8+9mzVOdymc8qePUuKzliiOkciObqAAQBRMQtAONaHCUsdj9YPwdONAxy3q1W8GRD4 +ysh7rGjO+F+ozkIUi2sen/7nBXuOu46nmZIv1Rt15KVH3+f4JhEnNJUA8l+xPEaJkYZrakfjg3Cn +eMVyvLDUxTdG1ivT3x13ouosRG1x5ay7zvt3yaRZYZvdNtQJcn3765cYgb+pzpFoji9gAIDAQziw +aLnVPgl3wFW1Y7DTyIhzKOdrlB5tk5Ex76F3Rg9XnYWoNS6fde9JC8smvNRgBDj0VaAwtfIJFE2M +qs6RaK55ccmP/e8BmNTS7zcg8GJjH7we7JHAVO6Qq4XCA7TKo246fVlCLwsjioebn7xz/NySYxdV +RHh7QRUCnqbo/rrcdlWzeid9N8Nkc8cIGPhuFNwildKPm2uPYfnGSZXp920wc7+YNufo3qqzEB3O +tY/eNW7envEfsXzV6ZZa/IYbyhdw0whYQmCJfzWAw15KsDaaiwfqh2G/6Yx791pJnhZs6u/bN/zG +k5dvVJ2F6Mf+/PiDxy4pP/LDfaEcj+osbuURUWlKvWvJ/UOLVWdJBteMgIWABMSDh/r6f3e1qj2K +5Zsg+8yU1G/C+avvmjt2lOosRN93w+N3TPpkz6iPWL5q9c3Yttgt5Qu4qIABAOXBf0LiJ6OvBunF +jLoReL6xL0z3TAooUWn6/eujWZ/PmDfmeNVZiADgylkzzpmz54QFnHZWSxemLJH5l6rOkUyuKmBx +Lgxo4q7v/93WaBauqh2DzyOFqmK5To3p86yK5Lw3/d2xP1Odhdzt8lkz/jhvz4RXqiOZrjoWWlHv +9O1L1t963GbVOZLJfS+6suDLANYDwPxgV1xfewzKjIDiUO7TYHr1tdHstx+cf+RlqrOQO13+6H1F +75acOLs+msZpL8U0IWVxqP2fVOdINle+8KIf+857rH7Yvz4Kd1QdxfU8wsQx3vJHbzr1y6tUZyH3 +uODhJ/71/p6x55kuHINYUY+0XUs+vf2041TnSDZXFrCU0O6YO65qeSQvS3UWOmCgt3Lxfad+cjxE +2zZMIWqJgUWv+nqnNH3xZdVwbg5jERpM6Lo5cNeMEd+ozpJsrvz4JwTM41JKpuo81lvGuki7CdfP +OW79De+M5ZZjlBBXz7yrU0dd283ytZbuacUfurF8AZcWMABMPHH7E6N95RWqc9D/rDdy+laLwJ5H +5h95pOos5CyXPvjIpCXVR2/9uq5Pgeos9D8eEZU7I+1dtfL5+1xbwAAwwVt6rU8YqmPQ95QaaWnL +QvlfPDp35B9VZyFnuHjmzOnvV45ZWBos5AX+FtM7fccbu+8atVV1DlVceQ74+x6dN2r3+6HOnVXn +oB/SITHSV/G2+dXks4uKikzVech+rph3sj+49bgF7+4+ZYLqLPRTAU9TtCmkdyh9aNQ+1VlUcfUI +GADGeMt+myYiqmPQjxgQWBYuOLNqxJLdj80b2VN1HrKX++aOHWUY4fKajssnDMlZqzoOHUSnlLKn +3Fy+AAsYR04qXnyCv2SZ6hx0cNuMzI7LwoUbH5s36nLVWcgeZsw75q7l4Zxlu6IZWY1aFIG+r2Nc +h49Vx6LvyfLUNW6s7XaT6hyquX4KGgA2fta500MVA3aVmgHXfyCxKgGJUd59y3O06Al/OeVLV9wp +hVrn7neOLqzRUj74Jpoz6MdfE1KgsKIf5m87D6bk21y1Tv7yK5ZPn/S46hyq8ZUIoO+Y4pIT/cX/ +UJ2DDk1C4KtI/qg1kayyB+cf+XPVecha7pt31OUbZO7ug5UvAEghUVawHlP6P4NUPZjsePQ9BSmV +xcv1E59UncMKOAL+lpwH/1RzfNWaSDvuS2lxHmFipGfvYp+h/+zGMz6tU52H1Hnkg0GFZU3tFq6L +5gxt6VX9eY1ZWLnhAlSE2iU0G/2UEBIZet3xG+8Zt0h1FivgCPhb4hSEJvpLb/QILri1uqjU8GWk +/YRNIr3i0QW8XMmt7p17zLQVDV2Kv25F+QLAvkANBg9+En0ytyQsGx1c19TSxSzf/+EI+Edmzjty +10ehTl1U56CWEQCGeCrXtffVnH7FSWu2q85DiXff3LGjSk3fW1ujWTFdPuiXGqJbT8ayiqPjFY0O +w6tFjEgkteeehwbsVJ3FKljAP7JmccHoh6pHflYpec2+naSJqDnCW/FKU7f6C4oGrgurzkPxd987 +YzMiHvOVFZG8KRGpx+XYJSSQt2cEFuw8Mx4PR4fRI7DrkU+LTrtadQ4r4RT0jwyZsPfzU1N3vq06 +B7VOg/Ron4Q7/LJkS6eaWfNH8E3uJBLinjmjZ6yTmZVfhAtPjlf5AoAUQEXHlTi933PwatF4PSz9 +SDtfdVV5ZV/XX3b0YxwBH4T8DKnTqsZXrI60S1Odhdqmj6e6rKun/tKrTl7+b9VZqO1mzTnywm+Q +9fDuaHrC71zWvj4PSzZchLpIeqKfylWEkMjxVp287q6JC1RnsRoW8CEs+aDb+Y/VD3o5KD2qo1Ab +CQADvFU7eum1F1588qrFqvNQyz327shTS5H25LpIbtdk3rOsXTgFG9f/FjsbuQwkXrqk7pm37I6T +TlWdw4pYwIcxe97wZXNDR/DOPDbnESaGeiq3dPXUX/KHKau5AtPCHnj3qFNLZPpjW6OZPVTdLDRg +elCz6Sys2T9YUQLnCOhNoQZ4u5TNGME7zx0EC/gwNi9Jz3+k5uiSndEMr+osFDsNEgO9VVt6euqu ++n9TVs1VnYf+58G5R/92jxmYsSma1ckKd+n2SgHPzuOxdM9xqqPYWjt/5Z++nj7xKdU5rIoF3Ix5 +C3tf90xT/wei3L7OMYSQ6K/v39fPs//Ri05ee5fqPG5VVFSkpR45/8YdRsa1u410y+2Kwe0rY9Mx +Ze/KFXeeOFJ1DitjAbfA7Pkj1s8Ndu2nOgfFXyetoamPt/rF3FDkhgvPWlWtOo8bFL03tqMvYj68 +JZp55l4z1ac6T3M61HTAhxsvRJORojqKbaTqwUgwlNqzdObg3aqzWBkLuAVKP8w+4t6GEVu3GZm6 +6iyUGGkiIgd6qte099Xfccnk1W+pzuNET8wb8etSM33qN9GsfvG8lCgZuH1l63QN7Ln+y6KTHlSd +w+ps9SZQ6cP3e9z0eP2gGRFeOu14R+h19T08dW8GQuHb/3TWqh2q89jZowtHDaqPeO/cYWRM2WMG +UlXniUVWxIviTb/EptpeqqNYWvuUinX/ufP4wQe2OaHDYQG3wuz5I1bNDXYdqjoHJYcHJnp7asq7 +6fVv5edV3nHuUTvKVGeyg1sWjO+QGQ3fUGYGfrnNyCw0HXSY4faVh5eqh8JN4bQ+3G6yZZzzzkiC +3Qsyc2dGRpRujmZzn0qX8cNAT09taaGnYU428PAfTl6+UXUmK3l67sjBdfBcX2wEpmw3MvMNBx9a +uH3loeX7Ky9eM33iX1XnsAvnvksS5MP5vc55JtT31QbJK5PcSkCiu15X19lTvyxTC/1T5HlevHTU +iojqXMlU9NyElLzChgv3G57zSmXayGIjLV267HDScX93LNj0W0RMbtYDAIX+ysWrpk+cqDqHnbjr +HRMnLy8Y9MY/m3rxpvAEAAiIiOym1e/poDd+kSOCb8rUujcunLjDUXd9f3rOyEBYk+c1Cu/PKo3U +Y7YZ6YVB6XH98YPbVx6Q7m2obWrM7F788MAq1VnsxPVvoLaQy+GdUTa65LNIYb7qLGQ9KTDQWa+v +zteD67JF06cBgflpU1Z9cq6AoTpbS7z66jn6/tRtJzRpYkodvGP2mqn9Soy0rLDkRQAHkxNKw/oN +v0NJYwfVUZTQYMLnCU7efs8x76vOYjcs4DZa+0HnIbMaBvyn1AxwWTQ1K0VEZUetsb6dHixOk8b6 +VBFZk6FFvsqTTUtPOWVLrYpML87rlRk008cHdf2YRukZ0iC9vfYbvi4lZlp6yGaXCanm5u0rO6aU +z1px56S/qM5hR3yTxWD+wl5FzzQOuJ2XJlFbaZDIEWEjSw82psCsTtMilWkwKgJapExKuVcD9kCg +xANZ1lFvqq+LeveH9YjZUa+vPfHEkkoAePrVkVmpWfW5ABDVA6kyaBaaOjpFIDoY0Aqipp4XgdYx +KD2F9dKT3yA9GbWmP1AjvbqTViir5pUC3p0T8Mke95wGLUyp2LhK0wahaCLv5dgGfPfF6O/zhix9 +PdRjrOocRKSekAJ5FQPw3rZzHL99ZUBvCjWZ6X1K7xu4S3UWu3L2KyQJfo81J4z2le1TnYOI1JNC +oqJgHab0+yv8Wkh1nITRYMKjRc9j+caGBRwjcQpCZ+rFo7vpdZyCISIAQHl2MY4b/Djy/JWqoyRE +XmrVzI13j31HdQ67YwHHwcApxVt+lrLzwjThqktBiegwKgM1GDR4NnpnblEdJa4K/fs+XS0mXq86 +hxOwgONk8uQtL/4sZccLPKlORN+p84aRP+BFHJX/peoocZHjq9m7M5x5KoqEqTqLE7Av4khKiFkL +Rnz9XrDrANVZiMg6hATa7RmBhTbevjJVC0YbI2lDyx4a+I3qLE7BEXAcCQH5y4yVxxzl3avkuk4i +siYpgH0dV+KUvn+HV7PfchENJjJ9db9i+cYXCzjO8seh7jeBLcf29NTY711GRAlVnrsNJw6cjQxv +veoordIlsOfhVXee8JrqHE7DKegE+ey9I856qmnAG1Wmnz9jIvqBdmE/Nmz4PXY1dFYdpVkF/spP +Vk+fcBzv7xt/HAEnyJjJO986O23rVJ+wxfa/RJRElb4Qugz8OwZkr1Md5bByfNU7S/WCU1i+icHR +WYI9v2DwK68He5wrJX/URPRDVt6+Mt3TUNMYDQwquX9oseosTsVWSILZ84d/Njd4xGjVOYjIeqy4 +fWVAbwo1IXVY6YwhG1RncTJr/LYd7o/5/znueF8Jt2wjop/47/aV/Z9Biq5++0qviJgCxkks38Rj +ASeBGIXIhYHNQ0d599WozkJE1lSeVYpjB6ndvlKDiXaeygu2zBjzsbIQLsICTpKcidXVF6VuGjnA +uz+oOgsRWZPq7Ss7+vfe/p+7J7+g5MldiAWcRF1P2Lv1Z75t47to9dw0mogOqs4bRl6/lzAyb3lS +n7djYM+zX02ffGdSn9TluAhLgY8Xdj/2pVCvj0qMNF11FiKypmRuX1mQsu+N1XdOPIeXGyUXR8AK +HHfS9iVnerefWiCC3NCciA7qv9tX9nk+odtXdkgpm7Nam3guyzf5OAJW6N33+p7zSlOPV/Zztywi +OoyC+nws3XAh6iLpcX3cLql73lsmJp/MuxupwRGwQqdN3vja2f4dl6RrEX7yJKJD2ptegdFDHkPX +tPjtidE5UPbpMuHjrQUV4sjLAv69sM/VLzf1nlknvaqjEJGFpRo+7N90FtZVD4zpcboESj9fVpp3 +HJ4ZxQWhCnERkAW8/GLlFw9ehKaNRvakkOSvhIgOLqoZSGm3Ht1NiV313dv0GD3Tdn36eWnBBJav +ehwBW8jC93v96cXG3k/wnDARHU5bt6/sn7HlvY+Ms3jO1yJ4oLeYOfP6/+7VSLe/s4SJqDmFNR3x +0cYLETT8zX7vwMxNr3ww7exfcrWzdfAgb0FvLhzw67eCR7zAEiai5uQ1ZWPFNxdgXzj3oF8XQmJo +1vrZ8285/7IkR6Nm8ABvUfMW9jr9zVCPt8qMAE8KE9FhZUR8KNl0PjbX9vrB3/u0MMbkrrz95Rsu +4Q5XFsQCtrAFC/qMnxPp8uHOaAaXRxPRYXkMD6LbTsGKfaMAAJneOvOEwk//8ORfbvi72mR0KCxg +i/vyvS6jXgn1XLopmt38SR4icrXvtq/cXjU4PDn/k1Om/nHmh6oz0aGxgG1g+Ydder7R2H3l2mhu +puosRGRtE7yllScExejhv/hys+osdHgsYJv45N2uOR+Jzmu+Chd0Vp2FiKxHCImzU7Zv+n32miPF +MahVnYeaxwK2EbkInmebhi2eE+o2ltcRENF3vDDx69Qti87O++YkMQrcYMMmWMA29Nz8oc/NCXW9 +IMxds4hcL0NEcFFg43OTJm+5SHUWah0WsE29urD/1LeD3afXmj7+Dolcqr3eKC/wb7p23Ek7Hlad +hVqPB28be3th//PmBLv+s9xM5VCYyGUGePZHf5uy5czBk0rmqs5CbcMCtrnlH3Yc8VZTz8WrI+0y +VGchouSY4C+t+pV367iOkyrXq85CbccCdoCt7+dkvRPu9cWicKd+XJxF5FxemDg3deuy88W648VJ +aFCdh2LDAnaQZxYMe+a9pi4XB3mXSSLHydOC+F3qxicmTtp+hRDgZ20HYAE7zCvzBl20INL5mQoz +hS1M5BD9Pfsjv0zd8qsRJ5a8rjoLxQ8L2IHeXdh/0KfhvE/WRttlq85CRLE51l9acb5/x+iuJ+zd +qjoLxRcL2KG2L0LKu00jP/gg1HmswV8zke0ERBTnpW794Oed158qBiKsOg/FH4/MDjdnYZ+iN4M9 +bq0wUzTVWYioZXp6aozzU7fcMPrE3TNVZ6HEYQG7wHtzew/70Ozw0bpobo7qLER0aALARH9x2fn6 +9okdT6rcoDoPJRYL2CWWL4d3SflRby2NFJ7KLSyJrCdPC+JXqZtfnpS79ffcz9kdWMAu89rCgecv +CnX4+y4jnfcXJrKIkd6Kxl/4d5zLXa3chQXsQkuWtM//tK7bB59FCodIyZcAkSp+YeDnqdtX/Mr3 +9YliIqpV56Hk4tHXxd5Y2K9oXvCIW8vNVC7QIkqyvt7q6Bn+HdcfO2nHI6qzkBosYJd7770evVdG +8+d+Gm7fm6NhosTzCwNTUnav/42+c0rqpP27VOchdXjEJQDAP+cNvnFxpMNde8yAR3UWIqca7K0K +neXffvVRk3bPVp2F1GMB03998EH3wuXBwrmfRQpHmnxpEMVNmojgtNSdX5yR/fVpmUejUnUesgYe +Zeknnps37OIvo/mzio00rpQmitFwb2XDKYGdF40+fterqrOQtbCA6aAWLcpPXxs84rWlwfZTGsFZ +aaLWaq83yhN9Jf8+z7/ufDERQdV5yHpYwHRYc97vM25FKP9fKyL5nXj/M6Lm+YSByf7d20/Wis85 +4qR9K1TnIetiAVOL/HXh0Ku/ChXMKOG0NNEhDfVWNpyRsuOGo07c/aTqLGR9LGBqsafnjAzUC/3F +r4z8M+tNL187RN/qpDcYJ6fsfO6M6KbLxSkIqc5D9sCDKLXav+YN6rkVGa8uD+WPiIB7eJB7ZYoI +jvfvXj7eV3Vm3xOKS1TnIXthAVObzf2g55QVwcK/fxUpKOT5YXITvzAwwVe6c1zKnl8PP770U9V5 +yJ5YwBSzv80d/se10Zx7t5iZWaqzECWSR5gY5y0rn+QruWHopJJ/qM5D9sYCprh5bt6wq9YY2Xdu +jmZnqM5CFE8CwCjf3prjPaW3jZu8Y5YQ4KQPxYwFTHElJcRT84ffscZod+3uaHpAdR6iWA3Rq+pH ++8qnn3bSxgdYvBRPLGBKiFcl9Iq5w+/72mx3+W7ee5hsRgiJUZ59daN9ZQ9Mqt56jzgXhupM5Dws +YEoouQieNyP9b1sRzrtyTaRdpuo8RIfjESZGeSuqxnnK7j2uZvtMFi8lEguYkubZeSP/tMlIv31D +NIerpslSPMLECO++vcf599x67Anbn+VUMyUDC5iS7omFI07fHU6/f2M0ux+vIyaVMkQEozwV64bo +VZdPOnnLYtV5yF1YwKTMSwuGDiyVvkfWhvKOr5R+NjElTTe9zhjhrfh4uF71x+GTizerzkPuxAIm +5T55t2vOJpHzwAYz59z1vISJEkSDxEDv/poR3r3P/8K3YaqYiHrVmcjdWMBkKc/OH/qb3dGMG9cb +2QObpIevT4pZthaSI337Vh7lqZg+dtKOd1TnIfoOD3BkSY9/0K9dMJRxx04j49fbjcxs1XnIXjzC +xCB9f3Uvb83LfVA1bcyU4irVmYh+jAVMlvePeUNO322mFW0wcobtN308V0yH1MtTE+3v2f/JEH/V +raOP38U9msnSWMBkG8ufHuld2QkXl8F/yQYje3Aty5gA5Iqw2c9btWmwtn/2afkbZ4tRiKjORNQS +LGCypXfe6Zux2xe4ocRI/83GaPYRYanztewiuVpI9vVUb+skGp47LrX2oe4TdwRVZyJqLR60yPb+ ++e7gnBrhuWafTD1vk5HVq9r083XtQAVak+zn2b+jl1730vhQxX35Z+yrU52JKBY8UJGjrF5YmLbS +6HBxqQyct9XIGLbXSE1RnYnaroPeGB7g3b+2p6h97XT/xid46RA5TM+2MQAAAtJJREFUCQuYHO2J +eSMn10nvH/aaKeN3GhntQ5yqtrQsLSx76bXlnfT6pfme4BNnTdqwWHUmokThwYhc48V5vTIbEbik +UgZ+sdtIH1xspAVMvgWUSoGBXp6a2s56w8qO3oaXBnfb8I/evRFSnYsoGXj0Idd6YtHA9qGGwK8b +hOeUvUbq0GIzLTfCEXJCpYmIPEKvq87XQ+sKRdO84d6y/xt84t5y1bmIVODBhuhbRc9NSMlvX3t+ +vek9o8b0jdgrUzuWGwEPb4vTNjokOusN4Y5aw65cT/DzdjL4Vn7K+jkTJyKqOhuRFbCAiQ7jH3MG +dq3XfWfUIGX8fsM3pMr0d90nU1Kjkpcgf1+qiKK91tiUq4VKskRkY56naWlf1L5y9Ek7t6vORmRV +LGCiVipaNCGlfbD6+KgUxzdI34ga09+7SvralRuBVKffXtGvRWV70dSUrwX3Zonw5gw9tCxgyvd/ +efLaT4SAqTofkZ2wgIniRUI8/MGIfnoURxtSG9oET58m03NEvfQU1ElfZq30+hpNr6Xfc5laWOaI +UDBTRGrSRLQsVYvu8GuRjX6J1aaMLLv0lK+3qs5I5BSWPhgQOc0/3x2cE/VovetNvXcUWreoQJeQ +4etgSOQaQsuKAukRqaWFoXlD0uNvkh5dAiIqNT0iNQEhBQA0SY/4bgW3XxjS8+3gM0UYhgYpBSBT +hBEFAE3KSECLhP0w6/zCrPVqZqUPxj5dmuUeYZZqArt0KbZnaaFN505Zx5sWEBERERERERERERER +ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER +ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER +ERERERERERERERERERERERERERERERERxeD/A07OTjCrltYIAAAAAElFTkSuQmCC +" + id="image10" + x="20" + y="20" /> +</svg> diff --git a/dot-config/rofi/global/icons/history.svg b/dot-config/rofi/global/icons/history.svg new file mode 100644 index 00000000..872bac83 --- /dev/null +++ b/dot-config/rofi/global/icons/history.svg @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="Capa_1" + enable-background="new 0 0 515.556 515.556" + height="240" + viewBox="0 0 240 240" + width="240" + class="" + version="1.1" + sodipodi:docname="history.svg" + inkscape:version="0.92.4 5da689c313, 2019-01-14"> + <metadata + id="metadata13"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs11" /> + <sodipodi:namedview + pagecolor="#252525" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:window-width="1321" + inkscape:window-height="740" + id="namedview9" + showgrid="false" + inkscape:zoom="0.4609375" + inkscape:cx="-322.41898" + inkscape:cy="256" + inkscape:window-x="45" + inkscape:window-y="28" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + inkscape:pagecheckerboard="true" /> + <g + id="g6" + style="opacity:0.8" + transform="matrix(0.3879307,0,0,0.3879307,20,20)"> + <path + d="m 290,32.222 c -113.405,0 -207.262,84.222 -222.981,193.333 H 0 l 96.667,96.667 96.667,-96.667 H 132.146 C 147.118,152.111 212.202,96.666 290,96.666 c 88.832,0 161.111,72.28 161.111,161.111 0,88.831 -72.279,161.112 -161.111,161.112 -51.684,0 -100.6,-25.079 -130.84,-67.056 l -52.298,37.635 c 42.323,58.78 110.78,93.866 183.138,93.866 124.373,0 225.556,-101.198 225.556,-225.556 C 515.556,133.42 414.373,32.222 290,32.222 Z" + data-original="#000000" + class="active-path" + data-old_color="#000000" + id="path2" + style="fill:#ffffff" + inkscape:connector-curvature="0" /> + <path + d="M 257.778,161.111 V 292.14 l 96.195,57.711 33.166,-55.256 -64.917,-38.956 v -94.527 z" + data-original="#000000" + class="active-path" + data-old_color="#000000" + id="path4" + style="fill:#ffffff" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/dot-config/rofi/global/icons/result.svg b/dot-config/rofi/global/icons/result.svg new file mode 100644 index 00000000..0f4d883e --- /dev/null +++ b/dot-config/rofi/global/icons/result.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + width="240" + height="240" + viewBox="0 0 24 24" + id="svg4" + sodipodi:docname="result.svg" + inkscape:version="0.92.4 5da689c313, 2019-01-14"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1321" + inkscape:window-height="740" + id="namedview6" + showgrid="false" + inkscape:zoom="0.98333333" + inkscape:cx="-43.728814" + inkscape:cy="120" + inkscape:window-x="45" + inkscape:window-y="28" + inkscape:window-maximized="0" + inkscape:current-layer="svg4" + inkscape:pagecheckerboard="true" /> + <path + d="m 9.428571,2 a 7.4285714,7.4285714 0 0 1 7.428572,7.4285714 c 0,1.8399996 -0.674286,3.5314286 -1.782857,4.8342856 l 0.308571,0.308572 h 0.902857 L 22,20.285714 20.285714,22 14.571429,16.285714 V 15.382857 L 14.262857,15.074286 C 12.96,16.182857 11.268571,16.857143 9.428571,16.857143 A 7.4285714,7.4285714 0 0 1 2,9.4285714 7.4285714,7.4285714 0 0 1 9.428571,2 m 0,2.2857143 c -2.8571424,0 -5.1428567,2.2857143 -5.1428567,5.1428571 0,2.8571426 2.2857143,5.1428576 5.1428567,5.1428576 2.857143,0 5.142858,-2.285715 5.142858,-5.1428576 0,-2.8571428 -2.285715,-5.1428571 -5.142858,-5.1428571 z" + id="path2" + inkscape:connector-curvature="0" + style="fill:#ffffff;stroke-width:1.14285707" /> +</svg> diff --git a/dot-config/rofi/global/icons/suggestion.svg b/dot-config/rofi/global/icons/suggestion.svg new file mode 100644 index 00000000..bf673469 --- /dev/null +++ b/dot-config/rofi/global/icons/suggestion.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" /></svg>
\ No newline at end of file diff --git a/dot-config/rofi/global/rofi-spotlight.sh b/dot-config/rofi/global/rofi-spotlight.sh new file mode 100755 index 00000000..d9939496 --- /dev/null +++ b/dot-config/rofi/global/rofi-spotlight.sh @@ -0,0 +1,692 @@ +#!/usr/bin/env bash + +TMP_DIR="/tmp/rofi/${USER}/" + +PREV_LOC_FILE="${TMP_DIR}rofi_fb_prevloc" +CURRENT_FILE="${TMP_DIR}rofi_fb_current_file" + +MY_PATH="$(realpath "$0" | xargs dirname)" +HIST_FILE="${MY_PATH}/history.txt" + +OPENER=xdg-open +TERM_EMU=wezterm +TEXT_EDITOR=$EDITOR +FILE_MANAGER=xdg-open +BLUETOOTH_SEND=blueman-sendto + +CUR_DIR=$PWD +NEXT_DIR="" +FD_INSTALLED=$(command -v fd) + +SHOW_HIDDEN=false + +# Setup menu options +declare -a OPEN_FILE_LOCATION=( + "Open file location in ${TERM_EMU}" + "Open file location in ${FILE_MANAGER}" +) +declare -a RUN_COMMANDS=( + "Run" + "Execute in ${TERM_EMU}" +) +declare -a STANDARD_CONTROLS=( + "Move to trash" + "Delete" + "Back" +) +declare -a SHELL_NO_X_OPTIONS=( + "Edit" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a SHELL_OPTIONS=( + "${RUN_COMMANDS[@]}" + "${SHELL_NO_X_OPTIONS[@]}" +) +declare -a BIN_NO_X_OPTIONS=( + "${OPEN_FILE_LOCATION[@]}" + "Back" +) +declare -a BIN_OPTIONS=( + "${RUN_COMMANDS[@]}" + "${BIN_NO_X_OPTIONS[@]}" +) +declare -a TEXT_OPTIONS=("${SHELL_NO_X_OPTIONS[@]}") +declare -a HTML_OPTIONS=( + "Open" + "Edit" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a XCF_SVG_OPTIONS=( + "Open" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a IMAGE_OPTIONS=( + "Open" + "Send via Bluetooth" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) + +declare -a ALL_OPTIONS=() + +# Combine all context menu +COMBINED_OPTIONS=( + "${SHELL_OPTIONS[@]}" + "${IMAGE_OPTIONS[@]}" +) + +# Remove duplicates +ALL_OPTIONS=("$(printf '%s\n' "${COMBINED_OPTIONS[@]}" | sort -u)") + +# Create tmp dir for rofi +[ ! -d "${TMP_DIR}" ] && mkdir -p "${TMP_DIR}"; + +# Create hist file if it doesn't exist +[ ! -f "${HIST_FILE}" ] && touch "${HIST_FILE}" + +# Help message +if [ -n "$*" ] && [[ "$*" = ":help" ]] +then + echo -en "Rofi Spotlight +A Rofi with file and web searching functionality + +Commands: +:help to print this help message +:h or :hidden to show hidden files/dirs +:sh or :show_hist to show search history +:ch or :clear_hist to clear search history +:xdg to jump to an xdg directory +Examples: + :xdg DOCUMENTS + :xdg DOWNLOADS +Also supports incomplete path: +Examples: + :xdg doc + :xdg down +For more info about XDG dirs, see: +\`man xdg-user-dir\` + +File search syntaxes: +!<search_query> to search for a file and web suggestions +?<search_query> to search parent directories +Examples: + !half-life 3 + ?portal 3 + +Web search syntaxes: +!<search_query> to gets search suggestions +:web/:w <search_query> to also to gets search suggestions +:webbro/:wb <search_query> to search directly from your browser +Examples: + !how to install archlinux + :web how to install gentoo + :w how to make a nuclear fission + :webbro how to install wine in windowsxp +Back\0icon\x1fdraw-arrow-back\n" + + exit +fi + +# Return the icon string +function icon_file_type(){ + icon_name="" + mime_type=$(file --mime-type -b "${1}") + + case "${mime_type}" in + "inode/directory") + case "${1}" in + "Desktop/" ) + icon_name='folder-blue-desktop' + ;; + "Documents/" ) + icon_name='folder-blue-documents' + ;; + "Downloads/" ) + icon_name='folder-blue-downloads' + ;; + "Music/" ) + icon_name='folder-blue-music' + ;; + "Pictures/" ) + icon_name='folder-blue-pictures' + ;; + "Public/" ) + icon_name='folder-blue-public' + ;; + "Templates/" ) + icon_name='folder-blue-templates' + ;; + "Videos/" ) + icon_name='folder-blue-videos' + ;; + "root/" ) + icon_name='folder-root' + ;; + "home/" | "${USER}/") + icon_name='folder-home' + ;; + *"$" ) + icon_name='folder-blue' + ;; + *) + icon_name='folder-blue' + ;; + esac + ;; + "inode/symlink" ) + icon_name='inode-symlink' + ;; + "audio/flac" | "audio/mpeg" ) + icon_name='music' + ;; + "video/mp4" ) + icon_name='video-mp4' + ;; + "video/x-matroska" ) + icon_name=video-x-matroska + ;; + "image/x-xcf" ) + # notify-send '123' + icon_name='image-x-xcf' + ;; + "image/jpeg" | "image/png" | "image/svg+xml") + icon_name="${CUR_DIR}/${1}" + ;; + "image/gif" ) + icon_name='gif' + ;; + "image/vnd.adobe.photoshop" ) + icon_name='image-vnd.adobe.photoshop' + ;; + "image/webp" ) + icon_name='gif' + ;; + "application/x-pie-executable" ) + icon_name='binary' + ;; + "application/pdf" ) + icon_name='pdf' + ;; + "application/zip" ) + icon_name='application-zip' + ;; + "application/x-xz" ) + icon_name='application-x-xz-compressed-tar' + ;; + "application/x-7z-compressed" ) + icon_name='application-x-7zip' + ;; + "application/x-rar" ) + icon_name='application-x-rar' + ;; + "application/octet-stream" | "application/x-iso9660-image" ) + icon_name='application-x-iso' + ;; + "application/x-dosexec" ) + icon_name='application-x-ms-dos-executable' + ;; + "text/plain" ) + icon_name='application-text' + ;; + "text/x-shellscript" ) + icon_name='application-x-shellscript' + ;; + "text/html" ) + icon_name='text-html' + ;; + "font/sfnt" | "application/vnd.ms-opentype" ) + icon_name='application-x-font-ttf' + ;; + * ) + case "${1}" in + *."docx" | *".doc" ) + icon_name='application-msword' + ;; + *."apk" ) + icon_name='android-package-archive' + ;; + * ) + icon_name='unknown' + ;; + esac + ;; + esac + + echo -en "$1\0icon\x1f$icon_name\n" +} + +export -f icon_file_type + +# Pass the argument to python script +function web_search() { + # Pass the search query to web-search script + "${MY_PATH}/web-search.py" "${1}" + exit; +} + +# Handles the web search method +if [ ! -z "$@" ] && ([[ "$@" == ":webbro"* ]] || [[ "$@" == ":wb"* ]]) +then + remove='' + [[ "$*" = ":webbro"* ]] && remove=":webbro" || remove=":wb" + + # Search directly from your web browser + web_search "$(printf '%s\n' "${1//$remove/}")" + exit; + +elif [ ! -z "$@" ] && ([[ "$@" == ":web"* ]] || [[ "$@" == ":w"* ]]) +then + remove='' + [[ "$*" = ":web"* ]] && remove=":web" || remove=":w" + + # Get search suggestions + web_search "!$(printf '%s\n' "${1//$remove/}")" + exit; +fi + +function find_query() { + QUERY=${1} + if [[ ! "${QUERY}" =~ ( |\') ]] + then + if [ -z "$FD_INSTALLED" ]; + then + find "${HOME}" -iname *"${QUERY}"* | sed "s/\/home\/$USER/\~/" | + awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' + else + fd -H ${QUERY} ${HOME} | sed "s/\/home\/$USER/\~/" | + awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' + fi + fi +} + +# File and calls to the web search +if [ ! -z "$@" ] && ([[ "$@" == ?(\~)/* ]] || [[ "$@" == \?* ]] || [[ "$@" == \!* ]]) +then + QUERY=$@ + + echo "${QUERY}" >> "${HIST_FILE}" + + if [[ "$@" == ?(\~)/* ]] + then + [[ "$*" = \~* ]] && QUERY="${QUERY//"~"/"$HOME"}" + + coproc ${OPENER} "${QUERY}" > /dev/null 2>&1 + exec 1>&- + exit + + elif [[ "$@" == \?* ]] + then + find_query ${QUERY#\?} + + else + # Find the file + find_query ${QUERY#!} + + # Web search + web_search "! ${QUERY#!}" + fi + exit; +fi + +# Create notification if there's an error +function create_notification() { + case "${1}" in + "denied" ) + notify-send -a "Global Search" "Permission denied!" \ + 'You have no permission to access '"${CUR_DIR}!" + ;; + "deleted" ) + notify-send -a "Global Search" "Success!" \ + 'File deleted!' + ;; + "trashed" ) + notify-send -a "Global Search" "Success!" \ + 'The file has been moved to trash!' + ;; + "cleared" ) + notify-send -a "Global Search" "Success!" \ + 'Search history has been successfully cleared!' + ;; + * ) + notify-send -a "Global Search" "Somethings wrong I can feel it!" \ + 'This incident will be reported!' + ;; + esac +} + +# Show the files in the current directory +function navigate_to() { + # process current dir. + if [ -n "${CUR_DIR}" ] + then + CUR_DIR=$(readlink -e "${CUR_DIR}") + if [ ! -d "${CUR_DIR}" ] || [ ! -r "${CUR_DIR}" ] + then + create_notification "denied" + CUR_DIR=$(realpath ${CUR_DIR} | xargs dirname) + echo "${CUR_DIR}" > "${PREV_LOC_FILE}" + else + echo "${CUR_DIR}/" > "${PREV_LOC_FILE}" + fi + pushd "${CUR_DIR}" >/dev/null || exit + fi + + printf "..\0icon\x1fup\n" + + if [[ -z "$FD_INSTALLED" ]] + then + #Group directories + if [[ ${SHOW_HIDDEN} == true ]] + then + for i in .*/ + do + [[ -d "${i}" ]] && ([[ "${i}" != "./" ]] && [[ "${i}" != "../"* ]]) && icon_file_type "${i}" + done + fi + for i in */ + do + [[ -d "${i}" ]] && icon_file_type "${i}" + done + #Group files + if [[ ${SHOW_HIDDEN} = true ]] + then + for i in .* + do + [[ -f "${i}" ]] && icon_file_type "${i}" + done + fi + for i in * + do + [[ -f "${i}" ]] && icon_file_type "${i}" + done + else + THREADS=$(getconf _NPROCESSORS_ONLN) + export CUR_DIR + if [[ ${SHOW_HIDDEN} == true ]] + then + fd -Ht d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS + fd -Ht f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS + else + fd -t d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS + fd -t f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS + fi + fi +} + +# Set XDG dir +function return_xdg_dir() { + target_dir=${1^^} + + if [[ "HOME" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir) + + elif [[ "DESKTOP" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DESKTOP) + + elif [[ "DOCUMENTS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DOCUMENTS) + + elif [[ "DOWNLOADS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DOWNLOAD) + + elif [[ "MUSIC" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir MUSIC) + + elif [[ "PICTURES" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir PICTURES) + + elif [[ "PUBLICSHARE" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir PUBLICSHARE) + + elif [[ "TEMPLATES" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir TEMPLATES) + + elif [[ "VIDEOS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir VIDEOS) + + elif [[ "ROOT" == *"${target_dir}"* ]] + then + CUR_DIR="/" + + else + CUR_DIR="${HOME}" + fi + navigate_to + exit; +} + +# Show and Clear History +if [ ! -z "$@" ] && ([[ "$@" == ":sh" ]] || [[ "$@" == ":show_hist" ]]) +then + hist=$(tac "${HIST_FILE}") + + echo -en "Back\0icon\x1fdraw-arrow-back\n" + [ -z "${hist}" ] && echo -en "No History Yet\0icon\x1ftext-plain\n" + + while IFS= read -r line; + do + echo -en "${line}\0icon\x1f${MY_PATH}/icons/history.svg\n"; + done <<< "${hist}" + + exit; +elif [ ! -z "$@" ] && ([[ "$@" == ":ch" ]] || [[ "$@" == ":clear_hist" ]]) +then + :> "${HIST_FILE}" + create_notification "cleared" + + CUR_DIR="${HOME}" + navigate_to + exit; +fi + +# Accepts XDG command +if [[ ! -z "$@" ]] && [[ "$@" == ":xdg"* ]] +then + NEXT_DIR=${*//":xdg "/} + + [[ -n "$NEXT_DIR" ]] && return_xdg_dir "${NEXT_DIR}" || return_xdg_dir "${HOME}" +fi + +# Read last location, otherwise we default to PWD. +[ -f "${PREV_LOC_FILE}" ] && CUR_DIR=$(< "${PREV_LOC_FILE}") + +if [[ ! -z "$@" ]] && ([[ "$@" == ":h" ]] || [[ "$@" == ":hidden" ]]) +then + SHOW_HIDDEN=true + navigate_to + exit; +fi + +# Handle argument. +[ -n "$*" ] && CUR_DIR="${CUR_DIR}/$*" + +# Context Menu +if [ -n "$*" ] && [[ "${ALL_OPTIONS[*]} " = *"$*"* ]] +then + case "${1}" in + "Run" ) + coproc ( eval "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Execute in ${TERM_EMU}" ) + coproc ( eval "${TERM_EMU} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open" ) + coproc ( eval "${OPENER} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open file location in ${TERM_EMU}" ) + file_path="$(< ${CURRENT_FILE})" + coproc ( ${TERM_EMU} bash -c "cd ${file_path%/*} ; ${SHELL}" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open file location in ${FILE_MANAGER}" ) + file_path="$(< "${CURRENT_FILE}")" + coproc ( eval "${FILE_MANAGER} "${file_path%/*}"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Edit" ) + coproc ( eval "${TERM_EMU} ${TEXT_EDITOR} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Move to trash" ) + coproc( gio trash "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) + create_notification "trashed" + CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" + navigate_to + ;; + "Delete" ) + shred "$(< ${CURRENT_FILE})" + rm "$(< ${CURRENT_FILE})" + create_notification "deleted" + CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" + navigate_to + ;; + "Send via Bluetooth" ) + rfkill unblock bluetooth && bluetoothctl power on + sleep 1 + blueman-sendto "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 + kill -9 $(pgrep rofi) + ;; + "Back" ) + CUR_DIR="$(< ${PREV_LOC_FILE})" + navigate_to + ;; + esac + exit; +fi + +function context_menu_icons() { + + if [[ "${1}" == "Run" ]] + then + echo '\0icon\x1fsystem-run\n' + + elif [[ "${1}" == "Execute in ${TERM_EMU}" ]] + then + echo "\0icon\x1f${TERM_EMU}\n" + + elif [[ "${1}" == "Open" ]] + then + echo "\0icon\x1futilities-x-terminal\n" + + elif [[ "${1}" == "Open file location in ${TERM_EMU}" ]] + then + echo "\0icon\x1f${TERM_EMU}\n" + + elif [[ "${1}" == "Open file location in ${FILE_MANAGER}" ]] + then + echo "\0icon\x1fblue-folder-open\n" + + elif [[ "${1}" == "Edit" ]] + then + echo "\0icon\x1faccessories-text-editor\n" + + elif [[ "${1}" == "Move to trash" ]] + then + echo "\0icon\x1fapplication-x-trash\n" + + elif [[ "${1}" == "Delete" ]] + then + echo "\0icon\x1findicator-trashindicator\n" + + elif [[ "${1}" == "Send via Bluetooth" ]] + then + echo "\0icon\x1fbluetooth\n" + + elif [[ "${1}" == "Back" ]] + then + echo "\0icon\x1fback\n" + fi +} + +function print_context_menu() { + declare -a arg_arr=("${!1}") + + for menu in "${arg_arr[@]}" + do + printf "$menu$(context_menu_icons "${menu}")\n" + done +} + +function context_menu() { + + type="$(file --mime-type -b "${CUR_DIR}")" + + if [ -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] + then + if [ -x "${CUR_DIR}" ]; + then + print_context_menu SHELL_OPTIONS[@] + else + print_context_menu SHELL_NO_X_OPTIONS[@] + fi + + elif [[ "${type}" == "application/x-executable" ]] || [[ "${type}" == "application/x-pie-executable" ]] + then + if [ -x "${CUR_DIR}" ] + then + print_context_menu BIN_OPTIONS[@] + else + print_context_menu BIN_NO_X_OPTIONS[@] + fi + + elif [[ "${type}" == "text/plain" ]] + then + print_context_menu TEXT_OPTIONS[@] + + elif [[ "${type}" == "text/html" ]] + then + print_context_menu HTML_OPTIONS[@] + + elif [[ "${type}" == "image/jpeg" ]] || [[ "${type}" == "image/png" ]] + then + print_context_menu IMAGE_OPTIONS[@] + + elif [[ "${type}" == "image/x-xcf" ]] || [[ "${type}" == "image/svg+xml" ]] + then + print_context_menu XCF_SVG_OPTIONS[@] + + elif [ ! -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] + then + coproc ( exec "${CUR_DIR}" & > /dev/null 2>&1 ) + + else + if [ ! -d "${CUR_DIR}" ] && [ ! -f "${CUR_DIR}" ] + then + QUERY="${CUR_DIR//*\/\//}" + + echo "${QUERY}" >> "${HIST_FILE}" + + find_query "${QUERY#!}" + + web_search "!${QUERY}" + else + coproc ( ${OPENER} "${CUR_DIR}" & > /dev/null 2>&1 ) + fi + fi + exit; +} + +# If argument is not a directory/folder +if [ ! -d "${CUR_DIR}" ] +then + echo "${CUR_DIR}" > "${CURRENT_FILE}" + context_menu + exit; +fi + +navigate_to diff --git a/dot-config/rofi/global/rofi.rasi b/dot-config/rofi/global/rofi.rasi new file mode 100644 index 00000000..819fc2b7 --- /dev/null +++ b/dot-config/rofi/global/rofi.rasi @@ -0,0 +1,162 @@ +configuration { + font: "Inter Regular 10"; + sidebar-mode: true; + show-icons: true; + icon-theme: "Nordzy"; + fullscreen: false; + threads: 0; + matching: "fuzzy"; + scroll-method: 0; + monitor: "primary"; +} + +* { + transparent: #00000000; + foreground: #F2F2F2EE; + background-selected: #F2F2F245; + background-active: #F2F2F230; + background-white: #F2F2F211; + background-black: #00000000; + urgent: #E91E6366; + urgent-selected: #E91E6377; +} + +window { + transparency: "real"; + background-color: #1917244D; + text-color: #6e6a86; + location: west; + anchor: west; + x-offset: 5px; + y-offset: -50px; + height: 70%; + width: 350px; + orientation: vertical; +} + +prompt { + enabled: false; +} + +button { + action: "ok"; + str: " "; + font: "FantasqueSansMono Nerd Font 16"; + expand: false; + text-color: #6e6a86; + background-color: @transparent; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +entry { + font: "Inter Regular 12"; + background-color: @transparent; + text-color: #6e6a86; + expand: true; + vertical-align: 0.5; + horizontal-align: 0; + placeholder: "Global Search"; + placeholder-color: @foreground; + blink: true; +} + +entry-wrapper { + orientation: horizontal; + margin: 0 12px 0 12px; + spacing: 24px; + vertical-align: 0.5; + background-color: @transparent; + children: [ button, entry ]; +} + +inputbar { + padding: 14px; + margin: 10px 10px 14px 10px; + background-color: #26233a; + text-color: @foreground; + expand: false; + border-radius: 9px; + position: north; + children: [ entry-wrapper ]; +} + +listview { + background-color: @transparent; + spacing: 0; + cycle: true; + dynamic: true; + scrollbar: true; +} + +mainbox { + width: 200px; + expand: true; + spacing: 12px; + padding: 5px; + background-color: @background-black; + children: [ inputbar, listview ]; +} + +scrollbar { + background-color: @background-white; + handle-width: 0; + margin: 0 0 5px 0; + border-radius: 9px; +} + +element { + background-color: @transparent; + text-color: @foreground; + orientation: horizontal; + border: 0; + border-color: @background-white; + border-radius: 6px; + spacing: 24px; + margin: 0px 12px 0px 12px; + padding: 10px 24px 10px 24px; +} + +element-icon { + size: 24px; + border: 0; + border-color: @transparent; + background-color: transparent; +} + +element-text { + font: "Inter Regular 11"; + expand: true; + horizontal-align: 0; + vertical-align: 0.5; + color: #6e6a86; + background-color: transparent; +} + +element normal.urgent, +element alternate.urgent { + background-color: @urgent; + text-color: @foreground; + border-radius: 9px; +} + +element normal.active, +element alternate.active { + background-color: @background-active; + text-color: @foreground; +} + +element selected { + background-color: #403d5220; + text-color: @foreground; +} + +element selected.urgent { + background-color: @urgent-selected; + text-color: @foreground; +} + +element selected.active { + background-color: #403d5220; + color: @foreground-selected; +}
\ No newline at end of file diff --git a/dot-config/rofi/global/web-search.py b/dot-config/rofi/global/web-search.py new file mode 100755 index 00000000..ba314d59 --- /dev/null +++ b/dot-config/rofi/global/web-search.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 + +# MIT License + +# Copyright (c) 2019 Paolo Donadeo + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + +import json +import re +import urllib.parse +import urllib.request +import sys +import os +import datetime +import gzip + +import subprocess as sp + +import html + + +################################################################################ +##### C O N F I G U R A T I O N ###### +################################################################################ +SEARCH_ENGINE = 'google' # or 'duckduckgo' +BROWSER = 'firefox' # or 'firefox', 'chromium', 'brave', 'lynx' +TERMINAL = ['kitty', '--'] # or ['st', '-e'] or something like that +################################################################################ + +CONFIG = { + 'BROWSER_PATH' : { + 'chrome' : ['google-chrome-stable'], + 'firefox' : ['firefox'], + 'chromium' : ['chromium-browser'], + 'brave' : ['brave-browser'], + 'lynx' : TERMINAL + ['lynx'] + }, + 'USER_AGENT' : { + 'chrome' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'firefox' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0', + 'chromium' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/76.0.3809.100 Chrome/76.0.3809.100 Safari/537.36', + 'brave' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36', + 'lynx' : 'Lynx/2.8.9rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/1.1.1d' + }, + 'SEARCH_ENGINE_NAME' : { + 'google' : 'Google', + 'duckduckgo' : 'DuckDuckGo' + }, + 'SEARCH_URL' : { + 'google' : 'https://www.google.com/search?q=', + 'duckduckgo' : 'https://duckduckgo.com/?q=' + }, + 'SUGGESTION_URL' : { + 'google' : 'https://www.google.com/complete/search?', + 'duckduckgo' : 'https://duckduckgo.com/ac/?' + } +} + +def cleanhtml(txt): + return re.sub(r'<.*?>', '', txt) + +def fetch_suggestions(search_string): + if SEARCH_ENGINE == 'google': + r = { + 'q' : search_string, + 'cp' : '11', + 'client' : 'psy-ab', + 'xssi' : 't', + 'gs_ri' : 'gws-wiz', + 'hl' : 'en-IT', + 'authuser' : '0' + } + url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) + headers = { + 'sec-fetch-mode' : 'cors', + 'dnt' : '1', + 'accept-encoding' : 'gzip', + 'accept-language' : 'en-US;q=0.9,en;q=0.8', + 'pragma' : 'no-cache', + 'user-agent' : CONFIG['USER_AGENT'][BROWSER], + 'accept' : '*/*', + 'cache-control' : 'no-cache', + 'authority' : 'www.google.com', + 'referer' : 'https://www.google.com/', + 'sec-fetch-site' : 'same-origin' + } + req = urllib.request.Request(url, headers=headers, method='GET') + + reply_data = gzip.decompress(urllib.request.urlopen(req).read()).split(b'\n')[1] + reply_data = json.loads(reply_data) + return [ cleanhtml(res[0]).strip() for res in reply_data[0] ] + else: # 'duckduckgo' + if search_string.startswith('!'): + bang_search = True + search_string = search_string.lstrip('!') + else: + bang_search = False + r = { + 'q' : search_string, + 'callback' : 'autocompleteCallback', + 'kl' : 'wt-wt', + '_' : str(int((datetime.datetime.now().timestamp())*1000)) + } + url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) + if bang_search: + url = url.replace('?q=', '?q=!') + headers = { + 'pragma' : 'no-cache', + 'dnt' : '1', + 'accept-encoding' : 'gzip', + 'accept-language' : 'en-US;q=0.9,en;q=0.8', + 'user-agent' : CONFIG['USER_AGENT'][BROWSER], + 'sec-fetch-mode' : 'no-cors', + 'accept' : '*/*', + 'cache-control' : 'no-cache', + 'authority' : 'duckduckgo.com', + 'referer' : 'https://duckduckgo.com/', + 'sec-fetch-site' : 'same-origin', + } + req = urllib.request.Request(url, headers=headers, method='GET') + reply_data = gzip.decompress(urllib.request.urlopen(req).read()).decode('utf8') + reply_data = json.loads(re.match(r'autocompleteCallback\((.*)\);', reply_data).group(1)) + return [ cleanhtml(res['phrase']).strip() for res in reply_data ] + +def main(): + search_string = html.unescape((' '.join(sys.argv[1:])).strip()) + + path_str = os.path.dirname(os.path.realpath(__file__)) + '/' + icon_path_str = path_str + 'icons/' + icon_name = icon_path_str + + if SEARCH_ENGINE == 'google': + icon_name += 'google.svg' + else: + icon_name += 'ddg.svg' + + if search_string.startswith('!'): + search_string = search_string.rstrip('!').strip() + results = fetch_suggestions(search_string) + for r in results: + print(":wb " + html.unescape(r) + "\0icon\x1f"+icon_name+"\n") + else: + url = CONFIG['SEARCH_URL'][SEARCH_ENGINE] + urllib.parse.quote_plus(search_string) + sp.Popen(CONFIG['BROWSER_PATH'][BROWSER] + [url], stdout=sp.DEVNULL, stderr=sp.DEVNULL, shell=False) + +if __name__ == "__main__": + try: + main() + except Exception as e: + if e: + sys.exit(1) diff --git a/dot-config/rofi/launcher.rasi b/dot-config/rofi/launcher.rasi new file mode 100644 index 00000000..9dacccb2 --- /dev/null +++ b/dot-config/rofi/launcher.rasi @@ -0,0 +1,302 @@ +/*****----- Configuration -----*****/ +configuration { + modi: "drun,run,file-browser-extended,window"; + show-icons: true; + display-drun: " Apps"; + display-run: " Run"; + display-file-browser-extended: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview", "mode-switcher" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 2px 2px 2px 2px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Search..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 7; + cycle: true; + dynamic: true; + scrollbar: true; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 6px 6px 6px 6px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 16px 16px 16px 16px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + ----background-color: var(normal-background); + background-color: @alternate-background; + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 6px 6px 6px 6px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/music.rasi b/dot-config/rofi/music.rasi new file mode 100644 index 00000000..e62fc74e --- /dev/null +++ b/dot-config/rofi/music.rasi @@ -0,0 +1,147 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/* +USE_ICON=YES +*/ + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt"]; +} + +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 10px 14px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 6; + lines: 1; + cycle: true; + scrollbar: false; + layout: vertical; + + spacing: 10px; + background-color: transparent; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + padding: 22px 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: pointer; +} +element-text { + font: "feather 20"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +element normal.normal, +element alternate.normal { + border: 1px solid; + border-radius: 0px; + border-color: @selected; + background-color: var(background); + text-color: var(foreground); +} +element normal.urgent, +element alternate.urgent, +element selected.active { + background-color: var(urgent); + text-color: var(background); +} +element normal.active, +element alternate.active, +element selected.urgent { + background-color: var(active); + text-color: var(background); +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} diff --git a/dot-config/rofi/networkmenu.rasi b/dot-config/rofi/networkmenu.rasi new file mode 100644 index 00000000..257b60c6 --- /dev/null +++ b/dot-config/rofi/networkmenu.rasi @@ -0,0 +1,302 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 500px; + height: 475px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "prompt", "entry" ]; +} + +prompt { + enabled: true; + padding: 8px 12px; + border-radius: 0px; + background-color: @selected; + --text-color: @background; + text-color: @foreground-colour; +} +textbox-prompt-colon { + enabled: true; + padding: 8px 11.5px; + border-radius: 0px; + expand: false; + str: "直"; + background-color: @active; + --text-color: @background; + text-color: @foreground-colour; +} +entry { + enabled: true; + padding: 8px 12px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: inherit; + cursor: text; + placeholder: ""; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 6; + cycle: true; + dynamic: true; + scrollbar: true; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 0px; + margin: 0px; + padding: 8px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 5px 10px; + border: 0px solid; + border-radius: 8px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 10px; + border: 0px solid; + border-radius: 8px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 15px; + border: 0px solid; + border-radius: 10px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/powermenu.rasi b/dot-config/rofi/powermenu.rasi new file mode 100644 index 00000000..0976836a --- /dev/null +++ b/dot-config/rofi/powermenu.rasi @@ -0,0 +1,147 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/* +USE_ICON=YES +*/ + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 700px; + x-offset: 0px; + y-offset: 0px; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt"]; +} + +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 10px 14px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 7; + lines: 1; + cycle: true; + scrollbar: false; + layout: vertical; + + spacing: 10px; + background-color: transparent; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + padding: 22px 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: pointer; +} +element-text { + font: "feather 20"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +element normal.normal, +element alternate.normal { + border: 1px solid; + border-radius: 0px; + border-color: @selected; + background-color: var(background); + text-color: var(foreground); +} +element normal.urgent, +element alternate.urgent, +element selected.active { + background-color: var(urgent); + text-color: var(background); +} +element normal.active, +element alternate.active, +element selected.urgent { + background-color: var(active); + text-color: var(background); +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} diff --git a/dot-config/rofi/powermenu/powermenu.rasi b/dot-config/rofi/powermenu/powermenu.rasi new file mode 100644 index 00000000..41fc9108 --- /dev/null +++ b/dot-config/rofi/powermenu/powermenu.rasi @@ -0,0 +1,93 @@ +configuration { + font: "JetBrainsMono Nerd Font 36"; + drun-display-format: "{name}"; + fullscreen: false; + threads: 0; + matching: "fuzzy"; + scroll-method: 0; + disable-history: false; + fullscreen: true; +} + +* { + transparent: #00000000; + foreground: #F2F2F2EE; + background-selected: #F2F2F245; + background-active: #F2F2F230; + background-white: #F2F2F211; + background-black: #00000066; + urgent: #E91E6366; + urgent-selected: #E91E6377; +} + +window { + transparency: "real"; + background-color: @transparent; + text-color: @foreground; + location: northwest; + anchor: northwest; +} + +inputbar { + margin: 0; + padding: 0; + children: [ entry-wrapper ]; +} + +listview { + background-color: @transparent; + lines: 6; + spacing: 5%; + cycle: false; + dynamic: true; + layout: horizontal; +} + +mainbox { + background-color: @background-black; + children: [ inputbar, listview ]; + padding: calc(50% - 70px) 0% 0% 15%; +} + +element { + background-color: @transparent; + text-color: @foreground; + orientation: horizontal; + border-radius: 10px; + padding: 30px; + vertical: 0.5; +} + +element-text { + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; +} + +element normal.urgent, +element alternate.urgent { + background-color: @urgent; + text-color: @foreground; + border-radius: 9px; +} + +element normal.active, +element alternate.active { + background-color: @background-active; + text-color: @foreground; +} + +element selected { + background-color: #29B6F6; + text-color: #212121; +} + +element selected.urgent { + background-color: @urgent-selected; + text-color: @foreground; +} + +element selected.active { + background-color: @background-active; + color: @foreground-selected; +} diff --git a/dot-config/rofi/runner.rasi b/dot-config/rofi/runner.rasi new file mode 100644 index 00000000..05a09f19 --- /dev/null +++ b/dot-config/rofi/runner.rasi @@ -0,0 +1,300 @@ +/*****----- Configuration -----*****/ +configuration { + modi: "run"; + show-icons: true; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{w} · {c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 500px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Run..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 6; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/screenshot.rasi b/dot-config/rofi/screenshot.rasi new file mode 100644 index 00000000..08f6b661 --- /dev/null +++ b/dot-config/rofi/screenshot.rasi @@ -0,0 +1,147 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +/* +USE_ICON=YES +*/ + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 500px; + x-offset: 0px; + y-offset: 0px; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt"]; +} + +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 10px 12px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} +prompt { + enabled: true; + padding: 10px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 5; + lines: 1; + cycle: true; + scrollbar: false; + layout: vertical; + + spacing: 10px; + background-color: transparent; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + padding: 22px 10px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: pointer; +} +element-text { + font: "feather 20"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +element normal.normal, +element alternate.normal { + border: 1px solid; + border-radius: 0px; + border-color: @selected; + background-color: var(background); + text-color: var(foreground); +} +element normal.urgent, +element alternate.urgent, +element selected.active { + background-color: var(urgent); + text-color: var(background); +} +element normal.active, +element alternate.active, +element selected.urgent { + background-color: var(active); + text-color: var(background); +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} diff --git a/dot-config/rofi/scripts/emoji b/dot-config/rofi/scripts/emoji new file mode 100755 index 00000000..dcc641ee --- /dev/null +++ b/dot-config/rofi/scripts/emoji @@ -0,0 +1,5 @@ +#!/bin/bash + +DIR="$HOME/.config" + +rofi -show emoji -modi emoji -theme $DIR/rofi/Themes/emojis.rasi diff --git a/dot-config/rofi/scripts/powermenu.sh b/dot-config/rofi/scripts/powermenu.sh new file mode 100755 index 00000000..ac311732 --- /dev/null +++ b/dot-config/rofi/scripts/powermenu.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/styles" +rofi_command="rofi -theme $dir/five.rasi" + +uptime=$(uptime -p | sed -e 's/up //g') + +# Options +shutdown="" +reboot="" +lock="" +suspend="" +logout="" + +# Confirmation +confirm_exit() { + rofi -dmenu\ + -i\ + -no-fixed-num-lines\ + -p "Are You Sure? : "\ + -theme $dir/confirm.rasi +} + +# Message +msg() { + rofi -theme "$dir/message.rasi" -e "Available Options - yes / y / no / n" +} + +# Variable passed to rofi +options="$shutdown\n$reboot\n$lock\n$suspend\n$logout" + +chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 2)" +case $chosen in + $shutdown) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + loginctl poweroff + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $reboot) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + loginctl reboot + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $lock) + if [[ -f /usr/bin/i3lock ]]; then + i3lock + elif [[ -f /usr/bin/betterlockscreen ]]; then + betterlockscreen -l + fi + ;; + $suspend) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + loginctl suspend + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $logout) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + if [[ "$DESKTOP_SESSION" == "/usr/share/xsessions/voidwm" ]]; then + pkill dwm + elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == "/usr/share/xsessions/i3" ]]; then + i3-msg exit + elif [[ "$DESKTOP_SESSION" == "/usr/local/bin/dwm" ]]; then + pkill dwm + elif [[ "$DESKTOP_SESSION" == "awesome" ]]; then + pkill awesome + else + pkill Hyprland + fi + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; +esac diff --git a/dot-config/rofi/scripts/rofi_askpass b/dot-config/rofi/scripts/rofi_askpass new file mode 100755 index 00000000..69c9d115 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_askpass @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/askpass.rasi" + +# Rofi text dialog to get password +rofi -dmenu \ + -password \ + -i \ + -p "Root" \ + -theme ${RASI} diff --git a/dot-config/rofi/scripts/rofi_asroot b/dot-config/rofi/scripts/rofi_asroot new file mode 100755 index 00000000..1fe2a5b0 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_asroot @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/asroot.rasi" + +# Theme Elements +prompt='Root' +mesg="Run Applications As Root" +term='alacritty --class alacritty-float,alacritty-float --config-file /root/.config/bspwm/alacritty/alacritty.yml' + +# Options +layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` +if [[ "$layout" == 'NO' ]]; then + option_1=" Alacritty" + option_2=" Thunar" + option_3=" Geany" + option_4=" Ranger" + option_5=" Vim" +else + option_1="" + option_2="" + option_3="" + option_4="" + option_5="" +fi + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -p "$prompt" \ + -mesg "$mesg" \ + -markup-rows \ + -theme ${RASI} +} + +# Pass variables to rofi dmenu +run_rofi() { + echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5" | rofi_cmd +} + +# Execute Command +run_cmd() { + if [[ "$1" == '--opt1' ]]; then + bspasroot "$term" + elif [[ "$1" == '--opt2' ]]; then + bspasroot 'dbus-run-session thunar' + elif [[ "$1" == '--opt3' ]]; then + bspasroot geany + #bspasroot code + elif [[ "$1" == '--opt4' ]]; then + bspasroot "$term -e ranger" + elif [[ "$1" == '--opt5' ]]; then + bspasroot "$term -e lvim" + fi +} + +# Actions +chosen="$(run_rofi)" +case ${chosen} in + $option_1) + run_cmd --opt1 + ;; + $option_2) + run_cmd --opt2 + ;; + $option_3) + run_cmd --opt3 + ;; + $option_4) + run_cmd --opt4 + ;; + $option_5) + run_cmd --opt5 + ;; +esac diff --git a/dot-config/rofi/scripts/rofi_clip b/dot-config/rofi/scripts/rofi_clip new file mode 100755 index 00000000..2cfd75e6 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_clip @@ -0,0 +1,8 @@ +#!/usr/bin/bash + +#export CM_LAUNCHER=rofi +#export CM_DIR="$XDG_CONFIG_HOME" +DIR="$HOME/.config/rofi" +RASI="$DIR/clipboard.rasi" +mesg="Clipboard History" +clipmenu -i -fn Terminus:size=15 -nb '#002b36' -nf '#839496' -sb '#073642' -sf '#93a1a1' -theme ${RASI} -mesg $mesg diff --git a/dot-config/rofi/scripts/rofi_configs b/dot-config/rofi/scripts/rofi_configs new file mode 100755 index 00000000..995e8821 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_configs @@ -0,0 +1,129 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/configs.rasi" + +# Theme Elements +mesg="Select configs" + +# Options +option_1="ZSH profile(zshrc)" +option_2="ZSH environment(zshenv)" +option_3="BSPWM autostart(bspwmrc)" +option_4="BSPWM hotkey(sxhkdrc)" +option_5="Polybar config" +option_6="Polybar module" +option_7="Alacritty main config" +option_8="Picom config" +option_9="Directorys" +option_10=".config" +option_11=".local" +option_12="ZSH" +option_13="BSPWM" +option_14="Polybar" +option_15="BPWM-Scripts" +option_16="Scripts" +#option_17="Neovim(lvim)" + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -mesg "$mesg" \ + -case-sensitive \ + -i \ + -markup-rows \ + -theme ${RASI} +} + +# Pass variables to rofi dmenu +run_rofi() { + echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6\n$option_7\n$option_8\n$option_9\n$option_10\n$option_11\n$option_12\n$option_13\n$option_14\n$option_15\n$option_16" | rofi_cmd +} + +# Execute Command +run_cmd() { + if [[ "$1" == '--opt1' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.zshrc + elif [[ "$1" == '--opt2' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.zshenv + elif [[ "$1" == '--opt3' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.config/bspwm/bspwmrc + elif [[ "$1" == '--opt4' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.config/bspwm/sxhkdrc + elif [[ "$1" == '--opt5' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.config/polybar/config.ini + elif [[ "$1" == '--opt6' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.config/polybar/modules.ini + elif [[ "$1" == '--opt7' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.config/alacritty/alacritty.toml + elif [[ "$1" == '--opt8' ]]; then + alacritty --class 'alacritty-float,alacritty-float' --command lvim $HOME/.config/picom.conf + elif [[ "$1" == '--opt10' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.config + elif [[ "$1" == '--opt11' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.local/share + elif [[ "$1" == '--opt12' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.config/zsh + elif [[ "$1" == '--opt13' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.config/bspwm + elif [[ "$1" == '--opt14' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.config/polybar + elif [[ "$1" == '--opt15' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.config/bspwm/scripts + elif [[ "$1" == '--opt16' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/scripts + elif [[ "$1" == '--opt17' ]]; then + rofi -show file-browser-extended -theme $HOME/.config/rofi/filebrowser.rasi -file-browser-dir $HOME/.config/lvim + fi +} + +# Actions +chosen="$(run_rofi)" +case ${chosen} in + $option_1) + run_cmd --opt1 + ;; + $option_2) + run_cmd --opt2 + ;; + $option_3) + run_cmd --opt3 + ;; + $option_4) + run_cmd --opt4 + ;; + $option_5) + run_cmd --opt5 + ;; + $option_6) + run_cmd --opt6 + ;; + $option_7) + run_cmd --opt7 + ;; + $option_8) + run_cmd --opt8 + ;; + $option_10) + run_cmd --opt10 + ;; + $option_11) + run_cmd --opt11 + ;; + $option_12) + run_cmd --opt12 + ;; + $option_13) + run_cmd --opt13 + ;; + $option_14) + run_cmd --opt14 + ;; + $option_15) + run_cmd --opt15 + ;; + $option_16) + run_cmd --opt16 + ;; +esac diff --git a/dot-config/rofi/scripts/rofi_emoji b/dot-config/rofi/scripts/rofi_emoji new file mode 100755 index 00000000..60f03e0c --- /dev/null +++ b/dot-config/rofi/scripts/rofi_emoji @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/emoji.rasi" + +# Run +rofi \ + -show emoji \ + -theme ${RASI} diff --git a/dot-config/rofi/scripts/rofi_filebrowser b/dot-config/rofi/scripts/rofi_filebrowser new file mode 100755 index 00000000..a8faec9e --- /dev/null +++ b/dot-config/rofi/scripts/rofi_filebrowser @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/filebrowser.rasi" + +# Run +rofi \ + -show file-browser-extended \ + -theme ${RASI} \ + "$@" diff --git a/dot-config/rofi/scripts/rofi_launcher b/dot-config/rofi/scripts/rofi_launcher new file mode 100755 index 00000000..399c9419 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_launcher @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/launcher.rasi" + +# Run +rofi \ + -show drun \ + -theme ${RASI} diff --git a/dot-config/rofi/scripts/rofi_music b/dot-config/rofi/scripts/rofi_music new file mode 100755 index 00000000..9f71440b --- /dev/null +++ b/dot-config/rofi/scripts/rofi_music @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/music.rasi" + +# Theme Elements +status="`mpc status`" +if [[ -z "$status" ]]; then + prompt='Offline' + mesg="MPD is Offline" +else + prompt="`mpc -f "%artist%" current`" + mesg="`mpc -f "%title%" current` :: `mpc status | grep "#" | awk '{print $3}'`" +fi + +# Options +layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` +if [[ "$layout" == 'NO' ]]; then + if [[ ${status} == *"[playing]"* ]]; then + option_1=" Pause" + else + option_1=" Play" + fi + option_2=" Stop" + option_3=" Previous" + option_4=" Next" + option_5=" Repeat" + option_6=" Random" +else + if [[ ${status} == *"[playing]"* ]]; then + option_1="" + else + option_1="" + fi + option_2="" + option_3="" + option_4="" + option_5="" + option_6="" +fi + +# Toggle Actions +active='' +urgent='' +# Repeat +if [[ ${status} == *"repeat: on"* ]]; then + active="-a 4" +elif [[ ${status} == *"repeat: off"* ]]; then + urgent="-u 4" +else + option_5=" Parsing Error" +fi +# Random +if [[ ${status} == *"random: on"* ]]; then + [ -n "$active" ] && active+=",5" || active="-a 5" +elif [[ ${status} == *"random: off"* ]]; then + [ -n "$urgent" ] && urgent+=",5" || urgent="-u 5" +else + option_6=" Parsing Error" +fi + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -p "$prompt" \ + -mesg "$mesg" \ + ${active} ${urgent} \ + -markup-rows \ + -theme ${RASI} +} + +# Pass variables to rofi dmenu +run_rofi() { + echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd +} + +# Execute Command +run_cmd() { + if [[ "$1" == '--opt1' ]]; then + mpc -q toggle && kunst --size 60x60 --silent + elif [[ "$1" == '--opt2' ]]; then + mpc -q stop + elif [[ "$1" == '--opt3' ]]; then + mpc -q prev && kunst --size 60x60 --silent + elif [[ "$1" == '--opt4' ]]; then + mpc -q next && kunst --size 60x60 --silent + elif [[ "$1" == '--opt5' ]]; then + mpc -q repeat + elif [[ "$1" == '--opt6' ]]; then + mpc -q random + fi +} + +# Actions +chosen="$(run_rofi)" +case ${chosen} in + $option_1) + run_cmd --opt1 + ;; + $option_2) + run_cmd --opt2 + ;; + $option_3) + run_cmd --opt3 + ;; + $option_4) + run_cmd --opt4 + ;; + $option_5) + run_cmd --opt5 + ;; + $option_6) + run_cmd --opt6 + ;; +esac diff --git a/dot-config/rofi/scripts/rofi_powermenu b/dot-config/rofi/scripts/rofi_powermenu new file mode 100755 index 00000000..3fa27e93 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_powermenu @@ -0,0 +1,244 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/powermenu.rasi" +CNFR="$DIR/confirm.rasi" + +# Theme Elements +prompt="`hostname` (`echo $DESKTOP_SESSION`)" +mesg="Uptime : `uptime -p | sed -e 's/up //g'`" + +# Options +layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` +if [[ "$layout" == 'NO' ]]; then + option_1=" Lock" + option_2=" Logout" + option_3=" Suspend" + option_4=" Hibernate" + option_5="🔳Hybrid-sleep" + option_6=" Reboot" + option_7=" Shutdown" +else + option_1="" + option_2="" + option_3="" + option_4="" + option_5="🔳" + option_6="" + option_7="" +fi +cnflayout=`cat ${CNFR} | grep 'USE_ICON' | cut -d'=' -f2` +if [[ "$cnflayout" == 'NO' ]]; then + yes=' Yes' + no=' No' +else + yes='' + no='' +fi + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -p "$prompt" \ + -mesg "$mesg" \ + -markup-rows \ + -theme ${RASI} +} + +# Pass variables to rofi dmenu +run_rofi() { + echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6\n$option_7" | rofi_cmd +} + +# Confirmation CMD +confirm_cmd() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg 'Are you Sure?' \ + -theme ${CNFR} +} + +confirm_cmd2() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg "Logout?" \ + -theme ${CNFR} +} + +confirm_cmd3() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg "Sleep/Suspend?" \ + -theme ${CNFR} +} + +confirm_cmd4() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg "Hibernate?" \ + -theme ${CNFR} +} + +confirm_cmd5() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg "Hybrid Sleep?" \ + -theme ${CNFR} +} + +confirm_cmd6() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg "Reboot?" \ + -theme ${CNFR} +} + +confirm_cmd7() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg "Shutdown?" \ + -theme ${CNFR} +} + + +# Ask for confirmation +confirm_exit() { + echo -e "$yes\n$no" | confirm_cmd +} + +confirm_exit2() { + echo -e "$yes\n$no" | confirm_cmd2 +} + +confirm_exit3() { + echo -e "$yes\n$no" | confirm_cmd3 +} + +confirm_exit4() { + echo -e "$yes\n$no" | confirm_cmd4 +} + +confirm_exit5() { + echo -e "$yes\n$no" | confirm_cmd5 +} + +confirm_exit6() { + echo -e "$yes\n$no" | confirm_cmd6 +} + +confirm_exit7() { + echo -e "$yes\n$no" | confirm_cmd7 +} + +# Confirm and execute +confirm_run () { + selected="$(confirm_exit)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + + +confirm_run2 () { + selected="$(confirm_exit2)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + +confirm_run3 () { + selected="$(confirm_exit3)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + +confirm_run4 () { + selected="$(confirm_exit4)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + +confirm_run5 () { + selected="$(confirm_exit5)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + +confirm_run6 () { + selected="$(confirm_exit6)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + + +confirm_run7 () { + selected="$(confirm_exit7)" + if [[ "$selected" == "$yes" ]]; then + ${1} && ${2} && ${3} + else + exit + fi +} + + +# Execute Command +run_cmd() { + if [[ "$1" == '--opt1' ]]; then + betterlockscreen --lock + elif [[ "$1" == '--opt2' ]]; then + confirm_run2 'bspc quit' + elif [[ "$1" == '--opt3' ]]; then + confirm_run3 'mpc -q pause' 'systemctl suspend' #'betterlockscreen --suspend' 'pulsemixer --unmute' # 'pulsemixer --mute' + elif [[ "$1" == '--opt4' ]]; then + confirm_run4 'systemctl hibernate' + elif [[ "$1" == '--opt5' ]]; then + confirm_run5 'systemctl hybrid-sleep' + elif [[ "$1" == '--opt6' ]]; then + confirm_run6 'systemctl reboot' + elif [[ "$1" == '--opt7' ]]; then + confirm_run7 'systemctl poweroff' + fi +} + +# Actions +chosen="$(run_rofi)" +case ${chosen} in + $option_1) + run_cmd --opt1 + ;; + $option_2) + run_cmd --opt2 + ;; + $option_3) + run_cmd --opt3 + ;; + $option_4) + run_cmd --opt4 + ;; + $option_5) + run_cmd --opt5 + ;; + $option_6) + run_cmd --opt6 + ;; + $option_7) + run_cmd --opt7 + ;; +esac diff --git a/dot-config/rofi/scripts/rofi_runner b/dot-config/rofi/scripts/rofi_runner new file mode 100755 index 00000000..0a4c4963 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_runner @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/custom_command.rasi" + +# Rofi text dialog to get password +sh -c "$(rofi -dmenu \ + -i \ + -p 'Command' \ + -theme ${RASI})" diff --git a/dot-config/rofi/scripts/rofi_screenshot b/dot-config/rofi/scripts/rofi_screenshot new file mode 100755 index 00000000..f5a1c3d7 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_screenshot @@ -0,0 +1,139 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/screenshot.rasi" + +# Theme Elements +prompt='Screenshot' +mesg="Directory :: `xdg-user-dir PICTURES`/Screenshots" + +# Options +layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` +if [[ "$layout" == 'NO' ]]; then + option_1=" Capture Desktop" + option_2=" Capture Area" + option_3=" Capture Window" + option_4=" Capture in 5s" + option_5=" Capture in 10s" +else + option_1="" + option_2="" + option_3="" + option_4="" + option_5="" +fi + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -p "$prompt" \ + -mesg "$mesg" \ + -markup-rows \ + -theme ${RASI} +} + +# Pass variables to rofi dmenu +run_rofi() { + echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5" | rofi_cmd +} + +# Screenshot +time=`date +%Y-%m-%d-%H-%M-%S` +geometry=`xrandr | grep 'current' | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current'` +dir="`xdg-user-dir PICTURES`/Screenshots" +file="Screenshot_${time}_${geometry}.png" + +# Directory +if [[ ! -d "$dir" ]]; then + mkdir -p "$dir" +fi + +# notify and view screenshot +notify_view() { + notify_cmd_shot='dunstify -u low -h string:x-dunst-stack-tag:obscreenshot -i /usr/share/archcraft/icons/dunst/picture.png' + ${notify_cmd_shot} "Copied to clipboard." + paplay /usr/share/sounds/freedesktop/stereo/screen-capture.oga &>/dev/null & + viewnior ${dir}/"$file" + if [[ -e "$dir/$file" ]]; then + ${notify_cmd_shot} "Screenshot Saved." + else + ${notify_cmd_shot} "Screenshot Deleted." + fi +} + +# Copy screenshot to clipboard +copy_shot () { + tee "$file" | xclip -selection clipboard -t image/png +} + +# countdown +countdown () { + for sec in `seq $1 -1 1`; do + dunstify -t 1000 -h string:x-dunst-stack-tag:screenshottimer -i /usr/share/archcraft/icons/dunst/timer.png "Taking shot in : $sec" + sleep 1 + done +} + +# take shots +shotnow () { + cd ${dir} && sleep 0.5 && maim -u -f png | copy_shot + notify_view +} + +shot5 () { + countdown '5' + sleep 1 && cd ${dir} && maim -u -f png | copy_shot + notify_view +} + +shot10 () { + countdown '10' + sleep 1 && cd ${dir} && maim -u -f png | copy_shot + notify_view +} + +shotwin () { + cd ${dir} && maim -u -f png -i `xdotool getactivewindow` | copy_shot + notify_view +} + +shotarea () { + cd ${dir} && maim -u -f png -s -b 2 -c 0.35,0.55,0.85,0.25 -l | copy_shot + notify_view +} + +# Execute Command +run_cmd() { + if [[ "$1" == '--opt1' ]]; then + shotnow + elif [[ "$1" == '--opt2' ]]; then + shotarea + elif [[ "$1" == '--opt3' ]]; then + shotwin + elif [[ "$1" == '--opt4' ]]; then + shot5 + elif [[ "$1" == '--opt5' ]]; then + shot10 + fi +} + +# Actions +chosen="$(run_rofi)" +case ${chosen} in + $option_1) + run_cmd --opt1 + ;; + $option_2) + run_cmd --opt2 + ;; + $option_3) + run_cmd --opt3 + ;; + $option_4) + run_cmd --opt4 + ;; + $option_5) + run_cmd --opt5 + ;; +esac diff --git a/dot-config/rofi/scripts/rofi_shutdown b/dot-config/rofi/scripts/rofi_shutdown new file mode 100755 index 00000000..b17f7667 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_shutdown @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +CNFR="$DIR/confirm.rasi" + +# Theme Elements +prompt="`hostname` (`echo $DESKTOP_SESSION`)" +mesg="Uptime : `uptime -p | sed -e 's/up //g'`" + +# Options +no='' + +# Confirmation CMD +confirm_cmd() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg 'Cancel?' \ + -theme ${CNFR} +} + +run_rofi() { + echo -e "$no" | confirm_cmd +} + +# Confirm and execute +confirm_run () { + selected="$(run_rofi)" + if [[ "$selected" || "$selected" == "" ]]; then + exit + else + echo "Error had occured" + exit 1 + fi +} + +confirm_run & +pid=$! +#pid=$(cat /run/user/$(id -u)/rofi.pid) +notify-send "Powering off system in 10 seconds" +for (( i = 9; i >= 0; --i )); do + if ! ps -p $pid > /dev/null; then + notify-send "Canceled shutdown process." + exit 0 + fi + notify-send "Powering off system in $i" + sleep 1 +done +if ps -p $pid > /dev/null; then + poweroff +fi diff --git a/dot-config/rofi/scripts/rofi_shutdown_menu b/dot-config/rofi/scripts/rofi_shutdown_menu new file mode 100755 index 00000000..a396189b --- /dev/null +++ b/dot-config/rofi/scripts/rofi_shutdown_menu @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +CNFR="$DIR/confirm.rasi" + +# Theme Elements +prompt="`hostname` (`echo $DESKTOP_SESSION`)" +mesg="Uptime : `uptime -p | sed -e 's/up //g'`" + +# Options +yes='' +no='' + +# Confirmation CMD +confirm_cmd() { + rofi -dmenu \ + -p 'Confirmation' \ + -mesg 'Confirmation?' \ + -theme ${CNFR} +} + +run_rofi() { + echo -e "$yes\n$no" | confirm_cmd +} + +# Confirm and execute +confirm_run () { + selected="$(run_rofi)" + if [[ "$selected" == "" || "$selected" == "$no" ]]; then + notify-send "Canceled shutdown process." + exit + elif [[ "$selected" == "$yes" ]]; then + poweroff + fi +} + +confirm_run & +pid=$! +#pid=$(cat /run/user/$(id -u)/rofi.pid) +notify-send "Powering off system in 10 seconds" +for (( i = 10; i > 0; --i )); do + if ! ps -p $pid > /dev/null; then + notify-send "Canceled shutdown process." + exit 0 + fi + notify-send "Powering off system in $i" + sleep 1 +done +if ps -p $pid > /dev/null; then + poweroff +fi diff --git a/dot-config/rofi/scripts/rofi_themes b/dot-config/rofi/scripts/rofi_themes new file mode 100755 index 00000000..854e8860 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_themes @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/themes.rasi" + +# List Available Themes +THEMES=(`cd $DIR/themes && ls -d */ | cut -d '/' -f1`) + +# Theme Elements +prompt="Themes" +mesg="<b>Available Themes</b> : `cd $DIR/themes && ls -d */ | cut -d '/' -f1 | wc -l`" + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -p "$prompt" \ + -mesg "$mesg" \ + -sep '|' \ + -markup-rows \ + -theme ${RASI} +} + +# Pass variables to rofi dmenu +run_rofi() { + echo ${THEMES[@]} | sed 's/ /|/g' | sed 's/$/|/' | rofi_cmd +} + +# Apply Theme +apply_theme() { + selected="`run_rofi`" + current="`cat $DIR/themes/.current`" + + for theme in "${THEMES[@]}"; do + if [[ -z "$selected" ]]; then + break + elif [[ "$selected" == "$theme" ]]; then + "$DIR"/themes/"$theme"/apply.sh + break + fi + done +} + +apply_theme && exit 0 diff --git a/dot-config/rofi/scripts/rofi_wallpaper b/dot-config/rofi/scripts/rofi_wallpaper new file mode 100755 index 00000000..b0be1000 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_wallpaper @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +#CM_LAUNCHER=rofi +DIR="$HOME/.config/rofi" +RASI="$DIR/wallpaper.rasi" +mesg="Please Select a Wallpaper" + +# Define the directory to list files from +directory="$HOME/Pictures/wallpapers" + +# Use `ls` to list the files in the directory +files=$(ls $directory) + +# Use rofi to display the list of files +chosen=$(echo $files | tr " " "\n" | rofi -dmenu -theme ${RASI} -separator-style plain) + +# Check if a file was selected +if [ -n "$chosen" ]; then + # Run a command with the selected file as an argument + feh $chosen +fi diff --git a/dot-config/rofi/scripts/rofi_windows b/dot-config/rofi/scripts/rofi_windows new file mode 100755 index 00000000..90010332 --- /dev/null +++ b/dot-config/rofi/scripts/rofi_windows @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Import Current Theme +DIR="$HOME/.config/rofi" +RASI="$DIR/windows.rasi" + +# Run +rofi \ + -show window \ + -theme ${RASI} diff --git a/dot-config/rofi/scripts/screenshot-wl.sh b/dot-config/rofi/scripts/screenshot-wl.sh new file mode 100755 index 00000000..fcb907e3 --- /dev/null +++ b/dot-config/rofi/scripts/screenshot-wl.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/styles" +rofi_command="rofi -theme $dir/three.rasi" + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p '' -dmenu -selected-row 1)" +case $chosen in + $screen) + sleep 0.4; grim -t png - | wl-copy -t image/png + ;; + $area) + grim -g "$(slurp)" -t png - | wl-copy -t image/png + ;; + $window) + sleep 0.4; grim -g "$(hyprctl activewindow | grep at: | cut -d' ' -f2) $(hyprctl activewindow | grep size: | cut -d' ' -f2 | sed 's/,/x/g')" - | wl-copy + ;; +esac + diff --git a/dot-config/rofi/scripts/screenshot.sh b/dot-config/rofi/scripts/screenshot.sh new file mode 100755 index 00000000..0b268295 --- /dev/null +++ b/dot-config/rofi/scripts/screenshot.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/styles" +rofi_command="rofi -theme $dir/three.rasi" + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p '' -dmenu -selected-row 1)" +case $chosen in + $screen) + scrot -e 'xclip -selection clipboard -target image/png -i $f && rm $f' + ;; + $area) + scrot -s --line mode=edge -e 'xclip -selection clipboard -target image/png -i $f && rm $f' + ;; + $window) + scrot -u -e 'xclip -selection clipboard -target image/png -i $f && rm $f' + ;; +esac + diff --git a/dot-config/rofi/shared/colors.rasi b/dot-config/rofi/shared/colors.rasi new file mode 100644 index 00000000..3813247b --- /dev/null +++ b/dot-config/rofi/shared/colors.rasi @@ -0,0 +1,13 @@ +* { + --background: rgba ( 46, 52, 64, 25% ); + background: rgba ( 0, 0, 0, 25% ); + --background-alt: rgba ( 57, 64, 79, 25% ); + background-alt: rgba ( 0, 0, 0, 15% ); + foreground: rgba ( 216, 222, 233, 100% ); + --selected: rgba ( 129, 161, 193, 10% ); + selected: rgba ( 0, 0, 0, 40% ); + --active: rgba ( 163, 190, 140, 10% ); + active: rgba ( 0, 0, 0, 10% ); + --urgent: rgba ( 191, 97, 106, 75% ); + urgent: rgba ( 0, 0, 0, 75% ); +} diff --git a/dot-config/rofi/shared/fonts.rasi b/dot-config/rofi/shared/fonts.rasi new file mode 100644 index 00000000..3928237f --- /dev/null +++ b/dot-config/rofi/shared/fonts.rasi @@ -0,0 +1,5 @@ +/* Text Font */ + +* { + font: "Iosevka 10"; +} diff --git a/dot-config/rofi/themes.rasi b/dot-config/rofi/themes.rasi new file mode 100644 index 00000000..5b30062e --- /dev/null +++ b/dot-config/rofi/themes.rasi @@ -0,0 +1,303 @@ +/*****----- Configuration -----*****/ +configuration { + modi: "drun,run,filebrowser,window"; + show-icons: false; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{w} · {c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 400px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "prompt" ]; +} + +prompt { + enabled: true; + padding: 8px 12px; + border-radius: 0px; + background-color: @selected; + text-color: @background; +} +textbox-prompt-colon { + enabled: true; + padding: 8px 12px; + border-radius: 0px; + expand: false; + str: ""; + background-color: @active; + text-color: @background; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Run..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 6; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/wallpaper.rasi b/dot-config/rofi/wallpaper.rasi new file mode 100644 index 00000000..08e1818e --- /dev/null +++ b/dot-config/rofi/wallpaper.rasi @@ -0,0 +1,300 @@ +/*****----- Configuration -----*****/ +configuration { + modi: "window"; + show-icons: true; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Filter..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 8; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/dot-config/rofi/windows.rasi b/dot-config/rofi/windows.rasi new file mode 100644 index 00000000..08e1818e --- /dev/null +++ b/dot-config/rofi/windows.rasi @@ -0,0 +1,300 @@ +/*****----- Configuration -----*****/ +configuration { + modi: "window"; + show-icons: true; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + drun-display-format: "{name}"; + window-format: "{c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "shared/colors.rasi" +@import "shared/fonts.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(foreground); + selected-urgent-background: var(active); + selected-urgent-foreground: var(foreground); + selected-active-background: var(urgent); + selected-active-foreground: var(foreground); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 600px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + /* Backgroud Colors */ + background-color: @background-colour; + /* Backgroud Image */ + //background-image: url("/path/to/image.png", none); + /* Simple Linear Gradient */ + //background-image: linear-gradient(red, orange, pink, purple); + /* Directional Linear Gradient */ + //background-image: linear-gradient(to bottom, pink, yellow, magenta); + /* Angle Linear Gradient */ + //background-image: linear-gradient(45, cyan, purple, indigo); +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 20px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 8px 0px; + border: 0px 0px 1px 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 0px; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: "Filter..."; + placeholder-color: inherit; +} +num-filtered-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +textbox-num-sep { + enabled: true; + expand: false; + str: "/"; + background-color: inherit; + text-color: inherit; +} +num-rows { + enabled: true; + expand: false; + background-color: inherit; + text-color: inherit; +} +case-indicator { + enabled: true; + background-color: inherit; + text-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 8; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 6px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + --background-color: var(normal-background); + background-color: @alternate-background; + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: @alternate-background; + --background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; +} +textbox { + border: 0px solid; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 20px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} |
