From b8b8161b14c6154d34aee5fc8d8c69fb805186c1 Mon Sep 17 00:00:00 2001 From: doryan Date: Sun, 22 Sep 2024 19:29:25 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BB=D1=83=D1=87=D1=88=D0=B5=20=D0=BD=D0=B5?= =?UTF-8?q?=20=D0=BB=D0=B5=D0=B7=D1=8C=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .zsh/zsh-auto-notify | 1 + .zsh/zsh-autosuggestions | 1 + .zsh/zsh-fzf-tab | 1 + .zsh/zsh-navigation-tools | 1 + .zsh/zsh-syntax-highlighting | 1 + .zsh/zsh-you-should-use | 1 + .zshrc | 99 +++++ bspwm/bspwmrc | 12 +- bspwm/log | 0 btop/btop.conf | 6 +- btop/btop.log | 5 + fish/config.fish | 10 - fish/fish_variables | 31 -- lvim/config.lua | 1 - lvim/lazy-lock.json | 1 + lvim/lua/plugins/init.lua | 22 +- picom/picom.conf | 662 +++++++++++++++++-------------- polybar/config.ini | 89 ++--- rofi/colors.rasi | 8 + rofi/launcher/app_menu.rasi | 323 +++++++++++++++ rofi/launcher/launch.sh | 3 + rofi/power/bg.png | Bin 0 -> 56558 bytes rofi/power/launch.sh | 105 +++++ rofi/power/power_menu.rasi | 138 +++++++ rofi/volume/launch.sh | 54 +++ rofi/volume/volume_menu.rasi | 83 ++++ sxhkd/sxhkdrc | 5 +- yazi/init.lua | 4 + yazi/keymap.toml | 21 + yazi/plugins/archivemount.yazi | 1 + yazi/plugins/chmod.yazi/init.lua | 39 ++ yazi/plugins/starship.yazi | 1 + yazi/yazi.toml | 3 +- 33 files changed, 1311 insertions(+), 421 deletions(-) create mode 160000 .zsh/zsh-auto-notify create mode 160000 .zsh/zsh-autosuggestions create mode 160000 .zsh/zsh-fzf-tab create mode 160000 .zsh/zsh-navigation-tools create mode 160000 .zsh/zsh-syntax-highlighting create mode 160000 .zsh/zsh-you-should-use create mode 100644 .zshrc create mode 100644 bspwm/log delete mode 100644 fish/config.fish delete mode 100644 fish/fish_variables create mode 100644 rofi/colors.rasi create mode 100644 rofi/launcher/app_menu.rasi create mode 100755 rofi/launcher/launch.sh create mode 100644 rofi/power/bg.png create mode 100755 rofi/power/launch.sh create mode 100644 rofi/power/power_menu.rasi create mode 100755 rofi/volume/launch.sh create mode 100644 rofi/volume/volume_menu.rasi create mode 100644 yazi/keymap.toml create mode 160000 yazi/plugins/archivemount.yazi create mode 100644 yazi/plugins/chmod.yazi/init.lua create mode 160000 yazi/plugins/starship.yazi diff --git a/.zsh/zsh-auto-notify b/.zsh/zsh-auto-notify new file mode 160000 index 0000000..27c07dd --- /dev/null +++ b/.zsh/zsh-auto-notify @@ -0,0 +1 @@ +Subproject commit 27c07dddb42f05b199319a9b66473c8de7935856 diff --git a/.zsh/zsh-autosuggestions b/.zsh/zsh-autosuggestions new file mode 160000 index 0000000..c3d4e57 --- /dev/null +++ b/.zsh/zsh-autosuggestions @@ -0,0 +1 @@ +Subproject commit c3d4e576c9c86eac62884bd47c01f6faed043fc5 diff --git a/.zsh/zsh-fzf-tab b/.zsh/zsh-fzf-tab new file mode 160000 index 0000000..7fed01a --- /dev/null +++ b/.zsh/zsh-fzf-tab @@ -0,0 +1 @@ +Subproject commit 7fed01afba9392b6392408b9a0cf888522ed7a10 diff --git a/.zsh/zsh-navigation-tools b/.zsh/zsh-navigation-tools new file mode 160000 index 0000000..0bab1b9 --- /dev/null +++ b/.zsh/zsh-navigation-tools @@ -0,0 +1 @@ +Subproject commit 0bab1b99041719d35e44e29d9a0dfd3d3b61cf61 diff --git a/.zsh/zsh-syntax-highlighting b/.zsh/zsh-syntax-highlighting new file mode 160000 index 0000000..e0165ea --- /dev/null +++ b/.zsh/zsh-syntax-highlighting @@ -0,0 +1 @@ +Subproject commit e0165eaa730dd0fa321a6a6de74f092fe87630b0 diff --git a/.zsh/zsh-you-should-use b/.zsh/zsh-you-should-use new file mode 160000 index 0000000..f13d39a --- /dev/null +++ b/.zsh/zsh-you-should-use @@ -0,0 +1 @@ +Subproject commit f13d39a1ae84219e4ee14e77d31bb774c91f2fe3 diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..00ca192 --- /dev/null +++ b/.zshrc @@ -0,0 +1,99 @@ + + +# Path to your oh-my-zsh installation. +# export ZSH="$HOME/.oh-my-zsh" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time oh-my-zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +#ZSH_THEME="robbyrussell" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +# zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. + +# source $ZSH/oh-my-zsh.sh + +alias du="ncdu" +alias cat="bat" +alias ls="lsd" +alias vi="~/.local/bin/lvim" + +eval "$(starship init zsh)" + +# To custom config.zshize prompt, run `p10k configure` or edit ~/.p10k.zsh. +# ___MY_VMOPTIONS_SHELL_FILE="${HOME}/.jetbrains.vmoptions.sh"; if [ -f "${___MY_VMOPTIONS_SHELL_FILE}" ]; then . "${___MY_VMOPTIONS_SHELL_FILE}"; fi + +bindkey "^[[1;5C" forward-word +bindkey "^[[1;5D" backward-word +bindkey "^[[P" delete-char + +source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh +source ~/.zsh/zsh-auto-notify/auto-notify.plugin.zsh +source ~/.zsh/zsh-you-should-use/you-should-use.plugin.zsh +source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source ~/.zsh/zsh-navigation-tools/zsh-navigation-tools.plugin.zsh + +autoload -U compinit; compinit +source ~/.zsh/zsh-fzf-tab/fzf-tab.plugin.zsh + +SAVEHIST=1000 +HISTFILE=~/.zsh_history diff --git a/bspwm/bspwmrc b/bspwm/bspwmrc index 33e72a3..f7068e3 100755 --- a/bspwm/bspwmrc +++ b/bspwm/bspwmrc @@ -23,16 +23,14 @@ bspc config split_ratio 0.52 bspc config borderless_monocle true bspc config gapless_monocle true -bspc config active_border_color "#ABC2AB" -bspc config normal_border_color "#478061" -bspc config urgent_border_color "#B58900" -bspc config presel_border_color "#26E2FF" +bspc config active_border_color "#FFBB53" +bspc config normal_border_color "#FEA3A1" -bash $HOME/.config/polybar/launch.sh & sxhkd & picom & nitrogen --restore & dunst & xsetroot -cursor_name left_ptr & -pipewire & -pipewire-pulse +pgrep -x polybar > /dev/null || polybar & +pgrep -x pipewire > /dev/null || pipewire & +pgrep -x pipewire-pulse > /dev/null || pipewire-pulse & diff --git a/bspwm/log b/bspwm/log new file mode 100644 index 0000000..e69de29 diff --git a/btop/btop.conf b/btop/btop.conf index 300fd64..8ebe4bb 100755 --- a/btop/btop.conf +++ b/btop/btop.conf @@ -8,7 +8,7 @@ color_theme = "Default" theme_background = False #* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. -truecolor = False +truecolor = True #* Set to true to force tty mode regardless if a real tty has been detected or not. #* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. @@ -32,7 +32,7 @@ rounded_corners = True #* "block" has half the resolution of braille but uses more common characters. #* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. #* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. -graph_symbol = "braille" +graph_symbol = "tty" # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". graph_symbol_cpu = "default" @@ -53,7 +53,7 @@ graph_symbol_proc = "default" shown_boxes = "cpu mem net proc" #* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. -update_ms = 100 +update_ms = 500 #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. diff --git a/btop/btop.log b/btop/btop.log index b5c06c8..c3aa374 100755 --- a/btop/btop.log +++ b/btop/btop.log @@ -8,3 +8,8 @@ 2024/04/27 (01:33:15) | INFO: Logger set to INFO 2024/04/27 (01:33:17) | INFO: Logger set to INFO 2024/04/27 (01:33:17) | INFO: Logger set to DEBUG + +2024/09/20 (16:23:18) | ===> btop++ v.1.3.2 +2024/09/20 (16:23:18) | INFO: Logger set to INFO +2024/09/20 (16:23:19) | INFO: Logger set to DEBUG +2024/09/20 (16:23:19) | INFO: Logger set to INFO diff --git a/fish/config.fish b/fish/config.fish deleted file mode 100644 index c78ba1a..0000000 --- a/fish/config.fish +++ /dev/null @@ -1,10 +0,0 @@ -starship init fish | source - -alias du="ncdu" -alias cat="bat" -alias ls="lsd" -alias vi="~/.local/bin/lvim" - -if status is-interactive - # Commands to run in interactive sessions can go here -end diff --git a/fish/fish_variables b/fish/fish_variables deleted file mode 100644 index 52cd691..0000000 --- a/fish/fish_variables +++ /dev/null @@ -1,31 +0,0 @@ -# This file contains fish universal variable definitions. -# VERSION: 3.0 -SETUVAR __fish_initialized:3400 -SETUVAR fish_color_autosuggestion:brblack -SETUVAR fish_color_cancel:\x2dr -SETUVAR fish_color_command:blue -SETUVAR fish_color_comment:red -SETUVAR fish_color_cwd:green -SETUVAR fish_color_cwd_root:red -SETUVAR fish_color_end:green -SETUVAR fish_color_error:brred -SETUVAR fish_color_escape:brcyan -SETUVAR fish_color_history_current:\x2d\x2dbold -SETUVAR fish_color_host:normal -SETUVAR fish_color_host_remote:yellow -SETUVAR fish_color_normal:normal -SETUVAR fish_color_operator:brcyan -SETUVAR fish_color_param:cyan -SETUVAR fish_color_quote:yellow -SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold -SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack -SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack -SETUVAR fish_color_status:red -SETUVAR fish_color_user:brgreen -SETUVAR fish_color_valid_path:\x2d\x2dunderline -SETUVAR fish_key_bindings:fish_default_key_bindings -SETUVAR fish_pager_color_completion:normal -SETUVAR fish_pager_color_description:yellow\x1e\x2di -SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline -SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan -SETUVAR fish_pager_color_selected_background:\x2dr diff --git a/lvim/config.lua b/lvim/config.lua index f4954d8..3fd8e86 100644 --- a/lvim/config.lua +++ b/lvim/config.lua @@ -11,7 +11,6 @@ vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "rust_analyz require "plugins.init" require "mappings" -require "configs.noice" require "configs.nvimtree" require "configs.bufferline" require "configs.dropbar" diff --git a/lvim/lazy-lock.json b/lvim/lazy-lock.json index 783edad..739c332 100755 --- a/lvim/lazy-lock.json +++ b/lvim/lazy-lock.json @@ -38,6 +38,7 @@ "nord.nvim": { "branch": "main", "commit": "6d6bae56a002a4da507ba263776e9691f47deb5f" }, "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, "nvim-autopairs": { "branch": "master", "commit": "14e97371b2aab6ee70054c1070a123dfaa3e217e" }, + "nvim-bqf": { "branch": "main", "commit": "1b24dc6050c34e8cd377b6b4cd6abe40509e0187" }, "nvim-cmp": { "branch": "main", "commit": "cd2cf0c124d3de577fb5449746568ee8e601afc8" }, "nvim-colorizer.lua": { "branch": "master", "commit": "194ec600488f7c7229668d0e80bd197f3a2b84ff" }, "nvim-dap": { "branch": "master", "commit": "13ce59d4852be2bb3cd4967947985cb0ceaff460" }, diff --git a/lvim/lua/plugins/init.lua b/lvim/lua/plugins/init.lua index a781881..93053d6 100644 --- a/lvim/lua/plugins/init.lua +++ b/lvim/lua/plugins/init.lua @@ -19,6 +19,9 @@ lvim.plugins = { { 'rust-lang/rust.vim', }, + { + 'kevinhwang91/nvim-bqf' + }, { 'MunifTanjim/prettier.nvim' }, @@ -186,14 +189,21 @@ lvim.plugins = { { "folke/noice.nvim", event = "VeryLazy", + opts = { + routes = { + { + filter = { event = "notify", find = "No information available" }, + opts = { skip = true }, + }, + }, + presets = { + lsp_doc_border = true, + }, + }, dependencies = { - -- if you lazy-load any plugin below, make sure to add proper `module="..."` entries "MunifTanjim/nui.nvim", - -- OPTIONAL: - -- `nvim-notify` is only needed, if you want to use the notification view. - -- If not available, we use `mini` as the fallback "rcarriga/nvim-notify", - } - } + }, + }, } diff --git a/picom/picom.conf b/picom/picom.conf index d60714d..371d120 100644 --- a/picom/picom.conf +++ b/picom/picom.conf @@ -1,57 +1,3 @@ -################################# -# Animations # - -# !These animations WILL NOT work correctly for any other wm other than phyOS-dwm fork! - -# fly-in: Windows fly in from random directions to the screen -# maximize: Windows pop from center of the screen to their respective positions -# minimize: Windows minimize from their position to the center of the screen -# slide-in-center: Windows move from upper-center of the screen to their respective positions -# slide-out-center: Windows move to the upper-center of the screen -# slide-left: Windows are created from the right-most window position and slide leftwards -# slide right: Windows are created from the left-most window position and slide rightwards -# slide-down: Windows are moved from the top of the screen and slide downward -# slide-up: Windows are moved from their position to top of the screen -# squeeze: Windows are either closed or created to/from their center y-position (the animation is similar to a blinking eye) -# squeeze-bottom: Similar to squeeze, but the animation starts from bottom-most y-position -# zoom: Windows are either created or destroyed from/to their center (not the screen center) - -################################# - -#enable or disable animations -animations = true; -#change animation speed of windows in current tag e.g open window in current tag -animation-stiffness-in-tag = 250; -#change animation speed of windows when tag changes -animation-stiffness-tag-change = 90.0; - -animation-window-mass = 0.3; -animation-dampening = 15; -animation-clamping = true; - -#open windows -animation-for-open-window = "zoom"; -#minimize or close windows -animation-for-unmap-window = "zoom"; -#popup windows -animation-for-transient-window = "zoom"; #available options: slide-up, slide-down, slide-left, slide-right, squeeze, squeeze-bottom, zoom - -#set animation for windows being transitioned out while changings tags -animation-for-prev-tag = "minimize"; -#enables fading for windows being transitioned out while changings tags -enable-fading-prev-tag = true; - -#set animation for windows being transitioned in while changings tags -animation-for-next-tag = "slide-in-center"; -#enables fading for windows being transitioned in while changings tags -enable-fading-next-tag = true; - -animation-exclude = [ - "window_type = 'dock'", - "class_g = 'flameshot'", - "class_g = 'polybar'", -]; - ################################# # Shadows # ################################# @@ -96,17 +42,6 @@ shadow-offset-y = -20; # shadow-exclude = "n:e:Notification"; # # shadow-exclude = [] -shadow-exclude = [ - "name = 'Notification'", - "class_g = 'Conky'", - "class_g ?= 'Notify-osd'", - "class_g = 'Cairo-clock'", - "class_g = 'dwm'", - "class_g = 'chromium'", - "class_g *?= 'slop'", - "_GTK_FRAME_EXTENTS@:c" -]; - # Specify a list of conditions of windows that should have no shadow painted over, such as a dock window. # clip-shadow-above = [] @@ -129,18 +64,18 @@ shadow-exclude = [ # Fade windows in/out when opening/closing and when opacity changes, # unless no-fading-openclose is used. -fading = true; +fading = false; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) # fade-in-step = 0.028 -fade-in-step = 0.023; +fade-in-step = 0.028; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) # fade-out-step = 0.03 -fade-out-step = 0.023; +fade-out-step = 0.03; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) -fade-delta = 5 +fade-delta = 10 # Specify a list of conditions of windows that should not be faded. # fade-exclude = [] @@ -165,7 +100,6 @@ fade-delta = 5 # Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows. # inactive-opacity-override = true -inactive-opacity-override = true; # Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) # active-opacity = 1.0 @@ -175,9 +109,6 @@ inactive-opacity-override = true; # Specify a list of conditions of windows that should never be considered focused. # focus-exclude = [] -focus-exclude = [ -"class_g = 'Cairo-clock'" , -]; # Use fixed inactive dim value, instead of adjusting according to window opacity. # inactive-dim-fixed = 1.0 @@ -189,7 +120,7 @@ focus-exclude = [ # Sets the radius of rounded window corners. When > 0, the compositor will # round the corners of windows. Does not interact well with # `transparent-clipping`. -corner-radius = 2; +corner-radius = 10; # Exclude conditions for rounded corners. #rounded-corners-exclude = [ @@ -197,27 +128,9 @@ corner-radius = 2; # "window_type = 'desktop'" #]; -blur: { - method = "dual_kawase"; - strength = 9; - background = true; - background-frame = false; - background-fixed = false; -} - - # Exclude conditions for background blur. # blur-background-exclude = [] -blur-background-exclude = [ - "window_type = 'dock'", - "window_type = 'desktop'", - "_GTK_FRAME_EXTENTS@:c", - "class_g = 'Chromium'", - "class_g = 'Discord'", - "class_g = 'Dunst'", - "class_g = 'Peek'", - "class_g *?= 'slop'", -]; + ################################# # General Settings # @@ -229,220 +142,371 @@ blur-background-exclude = [ # Specify the backend to use: `xrender`, `glx`, `egl` or `xr_glx_hybrid`. # `xrender` is the default one. # -backend = "egl" - -# Use higher precision during rendering, and apply dither when presenting the -# rendered screen. Reduces banding artifacts, but might cause performance -# degradation. Only works with OpenGL. +backend = "glx" dithered-present = false; - -# Enable/disable VSync. vsync = true; - -# Enable remote control via D-Bus. See the *D-BUS API* section below for more details. -# dbus = false - -# Try to detect WM windows (a non-override-redirect window with no -# child that has 'WM_STATE') and mark them as active. -# -# mark-wmwin-focused = false -mark-wmwin-focused = true; - -# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused. -# mark-ovredir-focused = false -mark-ovredir-focused = true; - -# Try to detect windows with rounded corners and don't consider them -# shaped windows. The accuracy is not very high, unfortunately. -# -# detect-rounded-corners = false -detect-rounded-corners = false; - -# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers -# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows. -# -# detect-client-opacity = false -detect-client-opacity = false; - -# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, -# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy, -# provided that the WM supports it. -# -use-ewmh-active-win = true; - -# Unredirect all windows if a full-screen opaque window is detected, -# to maximize performance for full-screen windows. Known to cause flickering -# when redirecting/unredirecting windows. -# -unredir-if-possible = false; - -# Delay before unredirecting the window, in milliseconds. Defaults to 0. -# unredir-if-possible-delay = 0 - -# Conditions of windows that shouldn't be considered full-screen for unredirecting screen. -# unredir-if-possible-exclude = [] - -# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows -# in the same group focused at the same time. -# -# detect-transient = false +detect-client-opacity = true; detect-transient = true; - -# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same -# group focused at the same time. This usually means windows from the same application -# will be considered focused or unfocused at the same time. -# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. -# -# detect-client-leader = false - -# Resize damaged region by a specific number of pixels. -# A positive value enlarges it while a negative one shrinks it. -# If the value is positive, those additional pixels will not be actually painted -# to screen, only used in blur calculation, and such. (Due to technical limitations, -# with use-damage, those pixels will still be incorrectly painted to screen.) -# Primarily used to fix the line corruption issues of blur, -# in which case you should use the blur radius value here -# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`, -# with a 5x5 one you use `--resize-damage 2`, and so on). -# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly. -# -# resize-damage = 1 - -# Specify a list of conditions of windows that should be painted with inverted color. -# Resource-hogging, and is not well tested. -# -# invert-color-include = [] - -# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer. -# Might cause incorrect opacity when rendering transparent content (but never -# practically happened) and may not work with blur-background. -# My tests show a 15% performance boost. Recommended. -# -glx-no-stencil = true; - -# GLX backend: Avoid rebinding pixmap on window damage. -# Probably could improve performance on rapid window content changes, -# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.). -# Recommended if it works. -# -# glx-no-rebind-pixmap = false - -# Disable the use of damage information. -# This cause the whole screen to be redrawn every time, instead of the part of the screen -# has actually changed. Potentially degrades the performance, but might fix some artifacts. -# The opposing option is use-damage -# -# no-use-damage = false +detect-client-leader = true +glx-no-stencil = true +glx-no-rebind-pixmap = false use-damage = true; - -# Use X Sync fence to sync clients' draw calls, to make sure all draw -# calls are finished before picom starts drawing. Needed on nvidia-drivers -# with GLX backend for some users. -# -xrender-sync-fence = true; - -# GLX backend: Use specified GLSL fragment shader for rendering window contents. -# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl` -# in the source tree for examples. -# -window-shader-fg = "default"; - -# Force all windows to be painted with blending. Useful if you -# have a glx-fshader-win that could turn opaque pixels transparent. -# -# force-win-blend = true; - -# Do not use EWMH to detect fullscreen windows. -# Reverts to checking if a window is fullscreen based only on its size and coordinates. -# -# no-ewmh-fullscreen = false - -# Dimming bright windows so their brightness doesn't exceed this set value. -# Brightness of a window is estimated by averaging all pixels in the window, -# so this could comes with a performance hit. -# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0) -# -# max-brightness = 1.0 - -# Make transparent windows clip other windows like non-transparent windows do, -# instead of blending on top of them. -# -transparent-clipping = false; - -# Specify a list of conditions of windows that should never have transparent -# clipping applied. Useful for screenshot tools, where you need to be able to -# see through transparent parts of the window. -# -# transparent-clipping-exclude = [] - -# Set the log level. Possible values are: -# "trace", "debug", "info", "warn", "error" -# in increasing level of importance. Case doesn't matter. -# If using the "TRACE" log level, it's better to log into a file -# using *--log-file*, since it can generate a huge stream of logs. -# -# log-level = "debug" +xrender-sync-fence = false log-level = "warn"; -# Set the log file. -# If *--log-file* is never specified, logs will be written to stderr. -# Otherwise, logs will to written to the given file, though some of the early -# logs might still be written to the stderr. -# When setting this option from the config file, it is recommended to use an absolute path. -# -# log-file = "/path/to/your/log/file" +rules = ({ + match = "WM_TRANSIENT_FOR@"; + animations = ({ + triggers = ["open", "show"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = { + curve = "linear"; + duration = 0.1; + delay = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + shadow-opacity = "opacity"; + scale-y = { + curve = "cubic-bezier(0.24, 0.64, 0.79, 0.98)"; + duration = 0.15; + start = 0.8; + end = 1; + }; + offset-y = "(-window-height/2) + (window-height/2) * scale-y"; + shadow-scale-y = "scale-y"; + shadow-offset-y = "offset-y"; + saved-image-blend = 0; + },{ + triggers = ["close", "hide"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "0"; + }; + blur-opacity = 0; + shadow-opacity = "opacity"; + scale-y = { + curve = "cubic-bezier(0.21, 0.02, 0.76, 0.36)"; + duration = 0.15; + start = 1; + end = 0.7; + }; + offset-y = "(-window-height/2) + (window-height/2) * scale-y"; + shadow-scale-y = "scale-y"; + shadow-offset-y = "offset-y"; + saved-image-blend = 0; + }); +}, { + match = "window_type = 'dropdown_menu' || window_type = 'popup_menu' || window_type = 'menu'"; + animations = ({ + triggers = ["open", "show"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = { + curve = "linear"; + duration = 0.1; + delay = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + shadow-opacity = "opacity"; + scale-y = { + curve = "cubic-bezier(0.24, 0.64, 0.79, 0.98)"; + duration = 0.15; + start = 0.8; + end = 1; + }; + shadow-scale-y = "scale-y"; + saved-image-blend = 0; -# Show all X errors (for debugging) -# show-all-xerrors = false + },{ + triggers = ["close", "hide"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "0"; + }; + blur-opacity = 0; + shadow-opacity = "opacity"; + scale-y = { + curve = "cubic-bezier(0.21, 0.02, 0.76, 0.36)"; + duration = 0.15; + start = 1; + end = 0.7; + }; + shadow-scale-y = "scale-y"; + saved-image-blend = 0; -# Write process ID to a file. -# write-pid-path = "/path/to/your/log/file" + }); +}, { + match = "window_type = 'dropdown_menu' || window_type = 'popup_menu' || window_type = 'menu'"; + opacity = 0.9; +}, { + match = "window_type = 'dock' || window_type = 'desktop'"; + blur-background = false; + corner-radius = 0; +}, { + match = "class_g *= 'i3lock' || _NET_WM_STATE@[1] = '_NET_WM_STATE_FULLSCREEN' || _NET_WM_STATE@[2] = '_NET_WM_STATE_FULLSCREEN' || _NET_WM_STATE@[3] = '_NET_WM_STATE_FULLSCREEN' || _NET_WM_STATE@[4] = '_NET_WM_STATE_FULLSCREEN'"; + shadow = false; + corner-radius = 0; + animations = ({ + triggers = ["open", "show"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = { + curve = "linear"; + duration = 0.1; + delay = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + shadow-opacity = "opacity"; + saved-image-blend = 0; -# Window type settings -# -# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard: -# "unknown", "desktop", "dock", "toolbar", "menu", "utility", -# "splash", "dialog", "normal", "dropdown_menu", "popup_menu", -# "tooltip", "notification", "combo", and "dnd". -# -# Following per window-type options are available: :: -# -# fade, shadow::: -# Controls window-type-specific shadow and fade settings. -# -# opacity::: -# Controls default opacity of the window type. -# -# focus::: -# Controls whether the window of this type is to be always considered focused. -# (By default, all window types except "normal" and "dialog" has this on.) -# -# full-shadow::: -# Controls whether shadow is drawn under the parts of the window that you -# normally won't be able to see. Useful when the window has parts of it -# transparent, and you want shadows in those areas. -# -# clip-shadow-above::: -# Controls whether shadows that would have been drawn above the window should -# be clipped. Useful for dock windows that should have no shadow painted on top. -# -# redir-ignore::: -# Controls whether this type of windows should cause screen to become -# redirected again after been unredirected. If you have unredir-if-possible -# set, and doesn't want certain window to cause unnecessary screen redirection, -# you can set this to `true`. -# -wintypes: + },{ + triggers = ["close", "hide"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "0"; + }; + blur-opacity = 0; + shadow-opacity = "opacity"; + saved-image-blend = 0; + }); +}); + +animations = ({ + triggers = ["close", "hide"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = "0"; + shadow-opacity = "opacity"; + offset-x = "(1 - scale-x) / 2 * window-width"; + offset-y = "(1 - scale-y) / 2 * window-height"; + scale-x = { + curve = "cubic-bezier(0.21, 0.02, 0.76, 0.36)"; + duration = 0.15; + start = 1; + end = 0.9; + }; + scale-y = "scale-x"; + shadow-scale-x = "scale-x"; + shadow-scale-y = "scale-y"; + shadow-offset-x = "offset-x"; + shadow-offset-y = "offset-y"; +}, { + triggers = ["open", "show"]; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = { + curve = "linear"; + duration = 0.1; + delay = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + shadow-opacity = "opacity"; + offset-x = "(1 - scale-x) / 2 * window-width"; + offset-y = "(1 - scale-y) / 2 * window-height"; + scale-x = { + curve = "cubic-bezier(0.24, 0.64, 0.79, 0.98)"; + duration = 0.15; + start = 0.95; + end = 1; + }; + scale-y = "scale-x"; + shadow-scale-x = "scale-x"; + shadow-scale-y = "scale-y"; + shadow-offset-x = "offset-x"; + shadow-offset-y = "offset-y"; +}, + +# Half Window Size Desktop Switch { - tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; - dock = { shadow = false; clip-shadow-above = true; } - dnd = { shadow = false; } - popup_menu = { opacity = 0.8; } - dropdown_menu = { opacity = 0.8; } -}; + triggers = ["workspace-out"]; + offset-y = { + curve = "cubic-bezier(0.21, 0.02, 0.76, 0.36)"; + duration = 0.15; + start = "0"; + end = "- window-height / 2"; + }; + scale-x = { + curve = "cubic-bezier(0.21, 0.02, 0.76, 0.36)"; + duration = 0.10; + start = "0"; + end = "- window-height / 2"; -opacity-rule = [ - "100:class_g = 'St' && focused", - "50:class_g = 'St' && !focused", - "100:fullscreen", -]; + } + shadow-offset-y = "offset-y"; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = "0"; + shadow-opacity = "opacity"; +}, { + triggers = ["workspace-out-inverse"]; + offset-y = { + curve = "cubic-bezier(0.21, 0.02, 0.76, 0.36)"; + duration = 0.15; + start = "0"; + end = "window-height / 2"; + }; + shadow-offset-y = "offset-y"; + opacity = { + curve = "linear"; + duration = 0.15; + start = "window-raw-opacity-before"; + end = "window-raw-opacity"; + }; + blur-opacity = "0"; + shadow-opacity = "opacity"; +}, { + triggers = ["workspace-in"]; + offset-y = { + curve = "cubic-bezier(0.24, 0.64, 0.79, 0.98)"; + duration = 0.15; + start = "window-height / 2"; + end = "0"; + }; + shadow-offset-y = "offset-y"; + opacity = { + curve = "linear"; + duration = 0.15; + start = "0"; + end = "window-raw-opacity"; + }; + blur-opacity = { + curve = "linear"; + duration = 0.1; + delay = 0.15; + start = "0"; + end = "window-raw-opacity"; + }; + shadow-opacity = "opacity"; +}, { + triggers = ["workspace-in-inverse"]; + offset-y = { + curve = "cubic-bezier(0.24, 0.64, 0.79, 0.98)"; + duration = 0.15; + start = "- window-height / 2"; + end = "0"; + }; + shadow-offset-y = "offset-y"; + opacity = { + curve = "linear"; + duration = 0.15; + start = "0"; + end = "window-raw-opacity"; + }; + blur-opacity = { + curve = "linear"; + duration = 0.1; + delay = 0.15; + start = "0"; + end = "window-raw-opacity"; + }; + shadow-opacity = "opacity"; +}, +# { +# triggers = [ "geometry" ]; +# crop-width = { +# curve = "cubic-bezier(0.24, 0.64, 0.79, 0.98)"; +# duration = 0.5; +# start = "window-width-before"; +# end = "window-width"; +# }; +# } + +# Full Opaque Desktop Switch +#{ +# triggers = ["workspace-out"]; +# offset-y = { +# timing = "0.15s cubic-bezier(0.21, 0.02, 0.76, 0.36)"; +# start = "0"; +# end = "-window-monitor-height"; +# }; +# shadow-offset-y = "offset-y"; +# opacity = { +# timing = "0.2s linear"; +# start = "window-raw-opacity-before"; +# end = "window-raw-opacity-before"; +# }; +# blur-opacity = "opacity"; +# shadow-opacity = "opacity"; +#}, { +# triggers = ["workspace-out-inverse"]; +# offset-y = { +# timing = "0.15s cubic-bezier(0.21, 0.02, 0.76, 0.36)"; +# start = "0"; +# end = "window-monitor-height"; +# }; +# shadow-offset-y = "offset-y"; +# opacity = { +# timing = "0.2s linear"; +# start = "window-raw-opacity-before"; +# end = "window-raw-opacity-before"; +# }; +# blur-opacity = "opacity"; +# shadow-opacity = "opacity"; +#}, { +# triggers = ["workspace-in"]; +# offset-y = { +# timing = "0.15s cubic-bezier(0.24, 0.64, 0.79, 0.98)"; +# start = "window-monitor-height"; +# end = "0"; +# }; +# shadow-offset-y = "offset-y"; +# opacity = { +# timing = "0.2s linear"; +# start = "window-raw-opacity"; +# end = "window-raw-opacity"; +# }; +# blur-opacity = "opacity"; +# shadow-opacity = "opacity"; +#}, { +# triggers = ["workspace-in-inverse"]; +# offset-y = { +# timing = "0.15s cubic-bezier(0.24, 0.64, 0.79, 0.98)"; +# start = "-window-monitor-height"; +# end = "0"; +# }; +# shadow-offset-y = "offset-y"; +# opacity = { +# timing = "0.2s linear"; +# start = "window-raw-opacity"; +# end = "window-raw-opacity"; +# }; +# blur-opacity = "opacity"; +# shadow-opacity = "opacity"; +#} + +) diff --git a/polybar/config.ini b/polybar/config.ini index 7586fe7..36969e2 100644 --- a/polybar/config.ini +++ b/polybar/config.ini @@ -17,18 +17,18 @@ ;========================================================== [colors] -background = #282A2E -background-alt = #373B41 -foreground = #C5C8C6 -primary = #89A989 -secondary = #478061 +background = #353F5D +background-alt = #414D72 +foreground = #C8C7D1 +primary = #FFCC4D +secondary = #FF7FA3 alert = #A54242 disabled = #707880 [bar/example] width = 100% height = 18pt -radius = 7pt +radius = 11t ; dpi = 96 @@ -116,12 +116,16 @@ label-unmounted-foreground = ${colors.disabled} [module/pulseaudio] type = internal/pulseaudio -format-volume = %{F#89A989}%{F-} +ramp-volume-foreground = ${colors.primary} + +format-volume = label-volume = %percentage%% label-muted = 󰝟 muted +click-right = ~/.config/rofi/volume/launch.sh + ; Only applies if is used ramp-volume-0 = 󰕿 ramp-volume-1 = 󰖀 @@ -149,22 +153,25 @@ label = %percentage_used:2%% [module/cpu] type = internal/cpu interval = 2 -format-prefix = " " +format-prefix = " " format-prefix-foreground = ${colors.primary} label = %percentage:2%% [network-base] type = internal/network interval = 5 -format-connected = + + format-disconnected = -label-disconnected = %{F#89A989}󰲛 %{F#707880} disconnected +label-disconnected = 󰲛 disconnected [module/wlan] inherit = network-base interface-type = wireless -format-connected = %{F#89A989}%{F-} +ramp-signal-foreground = ${colors.primary} + +format-connected = label-connected = %essid% %local_ip% @@ -178,7 +185,14 @@ ramp-signal-5 = 󰤨 [module/eth] inherit = network-base interface-type = wired -label-connected = %{F#89A989}󰈀 %{F-} %local_ip% + +format-connected = %{} + +format-connected-prefix = 󰈀 +format-connected-prefix-foreground = ${colors.primary} + +label-connected = %local_ip% +label-connected-foreground = ${colors.foreground} [module/date] type = internal/date @@ -321,52 +335,9 @@ pseudo-transparency = true ; vim:ft=dosini ; [module/powermenu] -type = custom/menu +type = custom/text -expand-right = true +content = " " +content-foreground = ${colors.urgent} -format-spacing = 1 - -label-open = " " -label-open-foreground = ${colors.urgent} -label-close =  -label-close-foreground = ${colors.success} -label-separator = | -label-separator-foreground = ${colors.foreground} - -;Powermenu -menu-0-0 = "" -menu-0-0-exec = menu-open-1 -menu-0-0-foreground = ${colors.urgent} - -menu-0-1 = "󰤆" -menu-0-1-exec = menu-open-2 -menu-0-1-foreground = ${colors.urgent} - -menu-0-2 = "󰤄 " -menu-0-2-exec = menu-open-3 -menu-0-2-foreground = ${colors.warning} - -;Reboot -menu-1-0 = "Reboot" -menu-1-0-exec = loginctl reboot -menu-1-0-foreground = ${colors.urgent} -menu-1-1 = "Cancel " -menu-1-1-exec = menu-open-0 -menu-1-1-foreground = ${colors.success} - -;Shutdown -menu-2-0 = "Power off" -menu-2-0-exec = loginctl poweroff -menu-2-0-foreground = ${colors.urgent} -menu-2-1 = "Cancel " -menu-2-1-exec = menu-open-0 -menu-2-1-foreground = ${colors.success} - -;Sleep -menu-3-0 = "Sleep" -menu-3-0-exec = loginctl suspend -menu-3-0-foreground = ${colors.urgent} -menu-3-1 = "Cancel " -menu-3-1-exec = menu-open-0 -menu-3-1-foreground = ${colors.success} +click-left = ~/.config/rofi/power/launch.sh diff --git a/rofi/colors.rasi b/rofi/colors.rasi new file mode 100644 index 0000000..c369ef5 --- /dev/null +++ b/rofi/colors.rasi @@ -0,0 +1,8 @@ +* { + selected: #FFCC4D; + background: #353F5D; + foreground: #C8C7D1; + background-alt: #414D72; + urgent: #353F5D; + active: #FF7FA3; +} diff --git a/rofi/launcher/app_menu.rasi b/rofi/launcher/app_menu.rasi new file mode 100644 index 0000000..77c8cc2 --- /dev/null +++ b/rofi/launcher/app_menu.rasi @@ -0,0 +1,323 @@ +/** + * + * Author : Aditya Shakya (adi1090x) + * Github : @adi1090x + * + * Rofi Theme File + * Rofi Version: 1.7.3 + **/ + +/*****----- Configuration -----*****/ +configuration { + modi: "drun,run,filebrowser,ssh,window"; + show-icons: false; + display-drun: " Apps"; + display-run: " Run"; + display-filebrowser: " Files"; + display-window: " Windows"; + display-ssh: " SSH"; + drun-display-format: "{name}"; + window-format: "{w} · {c} · {t}"; +} + +/*****----- Global Properties -----*****/ + +@import "../colors.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(background); + selected-urgent-background: var(active); + selected-urgent-foreground: var(background); + selected-active-background: var(urgent); + selected-active-foreground: var(background); + 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: 800px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 35px; + 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", "custombox" ]; +} + +/*****----- A Custom Box -----*****/ +custombox { + spacing: 10px; + background-color: @background-colour; + text-color: @foreground-colour; + orientation: horizontal; + children: [ "mode-switcher", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 8px 12px; + border: 0px solid; + border-radius: 50%; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; + children: [ "textbox-prompt-colon", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + padding: 5px 0px; + expand: false; + str: ""; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + padding: 5px 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: 8; + 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: 50%; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 10px; + border: 0px solid; + border-radius: 10px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + background-color: var(normal-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: 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; + expand: false; + orientation: vertical; + spacing: 10px; + margin: 0px; + padding: 0px 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 0px 20px 0px 20px; + border: 0px solid; + border-radius: 50%; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +textbox { + padding: 12px; + border: 0px solid; + border-radius: 8px; + border-color: @border-colour; + background-color: @alternate-background; + 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: 10px; + border: 2px solid; + border-radius: 8px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/rofi/launcher/launch.sh b/rofi/launcher/launch.sh new file mode 100755 index 0000000..23eeb4d --- /dev/null +++ b/rofi/launcher/launch.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +rofi -show drun -config ~/.config/rofi/launcher/app_menu.rasi -verbose diff --git a/rofi/power/bg.png b/rofi/power/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a4e317b2c98e4000478fc02047436825deed2f GIT binary patch literal 56558 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 DWamB5 literal 0 HcmV?d00001 diff --git a/rofi/power/launch.sh b/rofi/power/launch.sh new file mode 100755 index 0000000..af0473d --- /dev/null +++ b/rofi/power/launch.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya (adi1090x) +## Github : @adi1090x +# +## Rofi : Power Menu +# +## Available Styles +# +## style-1 style-2 style-3 style-4 style-5 + +# Current Theme +dir="$HOME/.config/rofi/power/power_menu.rasi" + +# CMDs +uptime="`uptime -p | sed -e 's/up //g'`" +host=`hostname` + +# Options +shutdown='⏻' +reboot='' +lock='' +suspend='' +logout='' +yes='' +no='' + +# Rofi CMD +rofi_cmd() { + rofi -dmenu \ + -mesg "󱑍 Uptime: $uptime" \ + -theme ${dir} +} + +# Confirmation CMD +confirm_cmd() { + rofi -theme-str 'window {location: center; anchor: center; fullscreen: false; width: 240px;}' \ + -theme-str 'listview {columns: 2; lines: 1;}' \ + -theme-str 'element-text {horizontal-align: 0.48;}' \ + -theme-str 'textbox {horizontal-align: 0.5;}' \ + -dmenu \ + -p 'Confirmation' \ + -mesg 'Are you Sure?' \ + -theme ${dir} +} + +# Ask for confirmation +confirm_exit() { + echo -e "$yes\n$no" | confirm_cmd +} + +# Pass variables to rofi dmenu +run_rofi() { + echo -e "$lock\n$suspend\n$logout\n$reboot\n$shutdown" | rofi_cmd +} + +# Execute Command +run_cmd() { + selected="$(confirm_exit)" + if [[ "$selected" == "$yes" ]]; then + if [[ $1 == '--shutdown' ]]; then + loginctl poweroff + elif [[ $1 == '--reboot' ]]; then + loginctl reboot + elif [[ $1 == '--suspend' ]]; then + loginctl suspend + elif [[ $1 == '--logout' ]]; then + if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then + openbox --exit + elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then + i3-msg exit + elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then + qdbus org.kde.ksmserver /KSMServer logout 0 0 0 + fi + fi + else + exit 0 + fi +} + +# Actions +chosen="$(run_rofi)" +case ${chosen} in + $shutdown) + run_cmd --shutdown + ;; + $reboot) + run_cmd --reboot + ;; + $lock) + if [[ -x '/usr/bin/betterlockscreen' ]]; then + betterlockscreen -l + elif [[ -x '/usr/bin/i3lock' ]]; then + i3lock + fi + ;; + $suspend) + run_cmd --suspend + ;; + $logout) + run_cmd --logout + ;; +esac diff --git a/rofi/power/power_menu.rasi b/rofi/power/power_menu.rasi new file mode 100644 index 0000000..4e05afc --- /dev/null +++ b/rofi/power/power_menu.rasi @@ -0,0 +1,138 @@ +/** + * + * Author : Aditya Shakya (adi1090x) + * Github : @adi1090x + * + * Rofi Theme File + * Rofi Version: 1.7.3 + **/ + +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/* +USE_BUTTONS=YES +*/ + +@import "../colors.rasi" + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 550px; + x-offset: 0px; + y-offset: 0px; + + padding: 0px; + border: 0px solid; + border-radius: 20px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 0px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + children: [ "inputbar", "listview", "message" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 0px; + padding: 100px 80px; + background-color: transparent; + background-image: url("/home/doryan/.config/rofi/power/bg.png", width); + children: [ "textbox-prompt-colon", "dummy","prompt"]; +} + +dummy { + background-color: transparent; +} + +textbox-prompt-colon { + enabled: false; + expand: false; + str: "󰐥 System"; + padding: 12px; + border-radius: 100%; + background-color: @selected; + text-color: @foreground; +} +prompt { + enabled: false; + padding: 12px; + border-radius: 100%; + background-color: @active; + text-color: @foreground; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 5; + lines: 1; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 15px; + margin: 15px; + background-color: transparent; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + padding: 23px 10px; + border-radius: 100%; + background-color: @background-alt; + text-color: @foreground; + cursor: pointer; +} +element-text { + font: "FiraCode Nerd Font Propo 28"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px 15px 15px 15px; + padding: 15px; + border-radius: 100%; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.48; +} diff --git a/rofi/volume/launch.sh b/rofi/volume/launch.sh new file mode 100755 index 0000000..9dae9cf --- /dev/null +++ b/rofi/volume/launch.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +theme_path="$HOME/.config/rofi/volume/volume_menu.rasi" + +volume='' +microphone='' +pavucontrol='' + +rofi_cmd() { + rofi -theme "$theme_path" -dmenu -markup-rows +} + +# Microphone Info +amixer get Capture | grep '\[on\]' &>/dev/null +if [[ "$?" == 0 ]]; then + microphone='' +else + microphone='' +fi + +# Microphone Info +amixer get Master | grep '\[on\]' &>/dev/null +if [[ "$?" == 0 ]]; then + volume='' +else + volume='' +fi + +run_cmd() { + if [[ "$1" == '--opt1' ]]; then + amixer set Master toggle + elif [[ "$1" == '--opt2' ]]; then + amixer set Capture toggle + elif [[ "$1" == '--opt3' ]]; then + exec pavucontrol + fi +} + +run() { + echo -e "$volume\n$microphone\n$pavucontrol" | rofi_cmd +} + +chosen="$(run)" +case ${chosen} in + $volume) + run_cmd --opt1 + ;; + $microphone) + run_cmd --opt2 + ;; + $pavucontrol) + run_cmd --opt3 + ;; +esac diff --git a/rofi/volume/volume_menu.rasi b/rofi/volume/volume_menu.rasi new file mode 100644 index 0000000..0801f8b --- /dev/null +++ b/rofi/volume/volume_menu.rasi @@ -0,0 +1,83 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/* +USE_BUTTONS=YES +*/ + +@import "../colors.rasi" + +/*****----- Main Window -----*****/ +window { + transparency: "real"; + location: east; + anchor: east; + fullscreen: false; + width: 80px; + x-offset: -20px; + y-offset: 0px; + + padding: 0px; + border: 0px solid; + border-radius: 100%; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +mainbox { + background-color: transparent; + children: [ "listview" ]; +} + +inputbar { + enable: true; + background-color: transparent; + children: [ "textbox-prompt-colon", "dummy", "prompt" ]; +} + +promt { + enable: false; + background-color: transparent; +} + +textbox-prompt-colon { + enable: false; + background-color: transparent; +} + +dummy { + background-color: transparent; +} + +listview { + columns: 1; + lines: 3; + background-color: transparent; + spacing: 10px; + padding: 10px; +} + +element { + background-color: @background-alt; + text-color: @foreground; + border-radius: 100%; + cursor: pointer; + padding: 15px 0; +} + +element-text { + font: "FiraCode Nerd Font Propo 18"; + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +element selected.normal { + background-color: @selected; + text-color: @background; +} diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc index b62c3c7..d65a36d 100644 --- a/sxhkd/sxhkdrc +++ b/sxhkd/sxhkdrc @@ -10,10 +10,9 @@ Print # terminal emulator super + Return tabbed -r 2 st -w '' -# program launcher + # program launcher super + d - rofi -show drun - - + ~/.config/rofi/launcher/launch.sh # make sxhkd reload its configuration files: super + Escape diff --git a/yazi/init.lua b/yazi/init.lua index f2983c4..606f974 100644 --- a/yazi/init.lua +++ b/yazi/init.lua @@ -41,3 +41,7 @@ setup { -- Available values: ui.Border.PLAIN, ui.Border.ROUNDED type = ui.Border.ROUNDED, } + +require("archivemount"):setup() +require("chmod") +require("starship").setup() diff --git a/yazi/keymap.toml b/yazi/keymap.toml new file mode 100644 index 0000000..f8473c4 --- /dev/null +++ b/yazi/keymap.toml @@ -0,0 +1,21 @@ +[[manager.prepend_keymap]] +on = "" +run = ''' + shell 'dragon -x -i -T "$1"' --confirm +''' + +[[manager.prepend_keymap]] +on = "y" +run = [ ''' + shell 'echo "$@" | xclip -i -selection clipboard -t text/uri-list' --confirm +''', "yank" ] + +[[manager.prepend_keymap]] +on = [ "m", "a" ] +run = "plugin archivemount --args=mount" +desc = "Mount selected archive" + +[[manager.prepend_keymap]] +on = [ "m", "u" ] +run = "plugin archivemount --args=unmount" +desc = "Unmount and save changes to original archive" diff --git a/yazi/plugins/archivemount.yazi b/yazi/plugins/archivemount.yazi new file mode 160000 index 0000000..354a4d6 --- /dev/null +++ b/yazi/plugins/archivemount.yazi @@ -0,0 +1 @@ +Subproject commit 354a4d6df9df6187f811c9e24598351e3180e195 diff --git a/yazi/plugins/chmod.yazi/init.lua b/yazi/plugins/chmod.yazi/init.lua new file mode 100644 index 0000000..bfb0970 --- /dev/null +++ b/yazi/plugins/chmod.yazi/init.lua @@ -0,0 +1,39 @@ +local selected_or_hovered = ya.sync(function() + local tab, paths = cx.active, {} + for _, u in pairs(tab.selected) do + paths[#paths + 1] = tostring(u) + end + if #paths == 0 and tab.current.hovered then + paths[1] = tostring(tab.current.hovered.url) + end + return paths +end) + +return { + entry = function() + ya.manager_emit("escape", { visual = true }) + + local urls = selected_or_hovered() + if #urls == 0 then + return ya.notify { title = "Chmod", content = "No file selected", level = "warn", timeout = 5 } + end + + local value, event = ya.input { + title = "Chmod:", + position = { "top-center", y = 3, w = 40 }, + } + if event ~= 1 then + return + end + + local status, err = Command("chmod"):arg(value):args(urls):spawn():wait() + if not status or not status.success then + ya.notify { + title = "Chmod", + content = string.format("Chmod with selected files failed, exit code %s", status and status.code or err), + level = "error", + timeout = 5, + } + end + end, +} diff --git a/yazi/plugins/starship.yazi b/yazi/plugins/starship.yazi new file mode 160000 index 0000000..20d5a4d --- /dev/null +++ b/yazi/plugins/starship.yazi @@ -0,0 +1 @@ +Subproject commit 20d5a4d4544124bade559b31d51ad41561dad92b diff --git a/yazi/yazi.toml b/yazi/yazi.toml index b75af7e..edc9e5f 100644 --- a/yazi/yazi.toml +++ b/yazi/yazi.toml @@ -2,5 +2,4 @@ show_hidden = true [preview] -image_uality = 90 - +image_quality = 70