summaryrefslogtreecommitdiff
path: root/dot-config/rofi
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-06-03 19:56:39 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-06-03 19:56:39 +0800
commitca968c4e5040f1ff4b5b5e12d9312360d807dcc1 (patch)
tree9900920e8f566794560c1519678e344351d2803b /dot-config/rofi
parent5f3deaff0bf006a1a353e57b82ad48c0e8f143bc (diff)
added submodules, change . -> dot (see man stow --dotfiles)
Diffstat (limited to 'dot-config/rofi')
-rw-r--r--dot-config/rofi/askpass.rasi73
-rw-r--r--dot-config/rofi/asroot.rasi147
-rw-r--r--dot-config/rofi/bluetooth.rasi303
-rw-r--r--dot-config/rofi/clipboard.rasi302
-rw-r--r--dot-config/rofi/config.rasi176
-rw-r--r--dot-config/rofi/configs.rasi288
-rw-r--r--dot-config/rofi/confirm.rasi144
-rw-r--r--dot-config/rofi/custom_command.rasi73
-rw-r--r--dot-config/rofi/emoji.rasi302
-rw-r--r--dot-config/rofi/file-browser1
-rw-r--r--dot-config/rofi/filebrowser.rasi270
-rw-r--r--dot-config/rofi/global/emoji.rasi68
-rw-r--r--dot-config/rofi/global/history.txt0
-rw-r--r--dot-config/rofi/global/icons/ddg.svg615
-rw-r--r--dot-config/rofi/global/icons/google.svg365
-rw-r--r--dot-config/rofi/global/icons/history.svg75
-rw-r--r--dot-config/rofi/global/icons/result.svg57
-rw-r--r--dot-config/rofi/global/icons/suggestion.svg1
-rwxr-xr-xdot-config/rofi/global/rofi-spotlight.sh692
-rw-r--r--dot-config/rofi/global/rofi.rasi162
-rwxr-xr-xdot-config/rofi/global/web-search.py167
-rw-r--r--dot-config/rofi/launcher.rasi302
-rw-r--r--dot-config/rofi/music.rasi147
-rw-r--r--dot-config/rofi/networkmenu.rasi302
-rw-r--r--dot-config/rofi/powermenu.rasi147
-rw-r--r--dot-config/rofi/powermenu/powermenu.rasi93
-rw-r--r--dot-config/rofi/runner.rasi300
-rw-r--r--dot-config/rofi/screenshot.rasi147
-rwxr-xr-xdot-config/rofi/scripts/emoji5
-rwxr-xr-xdot-config/rofi/scripts/powermenu.sh98
-rwxr-xr-xdot-config/rofi/scripts/rofi_askpass12
-rwxr-xr-xdot-config/rofi/scripts/rofi_asroot76
-rwxr-xr-xdot-config/rofi/scripts/rofi_clip8
-rwxr-xr-xdot-config/rofi/scripts/rofi_configs129
-rwxr-xr-xdot-config/rofi/scripts/rofi_emoji10
-rwxr-xr-xdot-config/rofi/scripts/rofi_filebrowser11
-rwxr-xr-xdot-config/rofi/scripts/rofi_launcher10
-rwxr-xr-xdot-config/rofi/scripts/rofi_music116
-rwxr-xr-xdot-config/rofi/scripts/rofi_powermenu244
-rwxr-xr-xdot-config/rofi/scripts/rofi_runner11
-rwxr-xr-xdot-config/rofi/scripts/rofi_screenshot139
-rwxr-xr-xdot-config/rofi/scripts/rofi_shutdown51
-rwxr-xr-xdot-config/rofi/scripts/rofi_shutdown_menu52
-rwxr-xr-xdot-config/rofi/scripts/rofi_themes44
-rwxr-xr-xdot-config/rofi/scripts/rofi_wallpaper21
-rwxr-xr-xdot-config/rofi/scripts/rofi_windows10
-rwxr-xr-xdot-config/rofi/scripts/screenshot-wl.sh31
-rwxr-xr-xdot-config/rofi/scripts/screenshot.sh31
-rw-r--r--dot-config/rofi/shared/colors.rasi13
-rw-r--r--dot-config/rofi/shared/fonts.rasi5
-rw-r--r--dot-config/rofi/themes.rasi303
-rw-r--r--dot-config/rofi/wallpaper.rasi300
-rw-r--r--dot-config/rofi/windows.rasi300
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,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
+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;
+}