├── .gitignore ├── README.md ├── files ├── theme │ ├── wallpaper │ ├── rofi │ │ ├── shared │ │ │ ├── fonts.rasi │ │ │ └── colors.rasi │ │ ├── askpass.rasi │ │ ├── music.rasi │ │ ├── asroot.rasi │ │ ├── confirm.rasi │ │ ├── powermenu.rasi │ │ ├── screenshot.rasi │ │ ├── bluetooth.rasi │ │ ├── networkmenu.rasi │ │ ├── runner.rasi │ │ ├── windows.rasi │ │ └── launcher.rasi │ ├── polybar │ │ ├── colors.ini │ │ ├── launch.sh │ │ ├── decor.ini │ │ ├── scripts │ │ │ └── bluetooth.sh │ │ ├── config.ini │ │ └── modules.ini │ ├── system.ini │ ├── networkmenu_config.ini │ └── polybar.sh ├── berry.desktop ├── scripts │ ├── berry_bar │ ├── rofi_runner │ ├── rofi_windows │ ├── berry_dunst │ ├── berry_asroot │ ├── rofi_launcher │ ├── rofi_askpass │ ├── berry_comp │ ├── berry_music │ ├── berry_kitty │ ├── berry_colorpicker │ ├── berry_term │ ├── berry_autostart │ ├── rofi_asroot │ ├── berry_brightness │ ├── berry_screenshot │ ├── berry_volume │ ├── rofi_powermenu │ ├── rofi_music │ ├── rofi_screenshot │ └── rofi_bluetooth ├── xsettingsd ├── kitty │ ├── colors.conf │ ├── fonts.conf │ └── kitty.conf ├── alacritty │ ├── colors.toml │ ├── fonts.toml │ └── alacritty.toml ├── autostart ├── dunstrc ├── sxhkdrc └── picom.conf ├── push.sh ├── cleanup.sh ├── PKGBUILD └── archcraft-berry.install /.gitignore: -------------------------------------------------------------------------------- 1 | /src 2 | /pkg 3 | *.pkg.tar.zst 4 | cleanup.sh 5 | push.sh 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Documentation** : [Berry](https://wiki.archcraft.io/docs/window-managers/stacking-wm/berry) 2 | -------------------------------------------------------------------------------- /files/theme/wallpaper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archcraft-os/archcraft-berry/HEAD/files/theme/wallpaper -------------------------------------------------------------------------------- /files/berry.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Encoding=UTF-8 3 | Name=berry 4 | Comment=A healthy, bite-sized window manager written in C 5 | Exec=berry 6 | Type=XSession 7 | -------------------------------------------------------------------------------- /files/theme/rofi/shared/fonts.rasi: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020-2025 Aditya Shakya */ 2 | 3 | /* Text Font */ 4 | 5 | * { 6 | font: "JetBrainsMono 10"; 7 | } 8 | -------------------------------------------------------------------------------- /files/scripts/berry_bar: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # berry directory 6 | DIR="$HOME/.config/berry" 7 | 8 | # launch polybar 9 | bash "$DIR"/theme/polybar.sh 10 | -------------------------------------------------------------------------------- /files/scripts/rofi_runner: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/runner.rasi" 8 | 9 | # Run 10 | rofi \ 11 | -show run \ 12 | -theme ${RASI} 13 | -------------------------------------------------------------------------------- /files/scripts/rofi_windows: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/windows.rasi" 8 | 9 | # Run 10 | rofi \ 11 | -show window \ 12 | -theme ${RASI} 13 | -------------------------------------------------------------------------------- /push.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Push to github 4 | 5 | branch="`git branch --show-current`" 6 | 7 | echo -e "\nPushing to github...\n" 8 | 9 | git add --all . 10 | read -p "Enter Commit Message: " cmt 11 | git commit -m "$cmt" 12 | git push origin "$branch" 13 | 14 | echo -e "\nDone!\n" 15 | -------------------------------------------------------------------------------- /files/scripts/berry_dunst: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # berry directory 6 | DIR="$HOME/.config/berry" 7 | 8 | # Launch dunst daemon 9 | if [[ `pidof dunst` ]]; then 10 | pkill dunst 11 | fi 12 | 13 | dunst -config "$DIR"/dunstrc & 14 | -------------------------------------------------------------------------------- /files/scripts/berry_asroot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # berry directory 6 | DIR="$HOME/.config/berry" 7 | 8 | # rofi sudo askpass helper 9 | export SUDO_ASKPASS="$DIR"/scripts/rofi_askpass 10 | 11 | # execute the application 12 | sudo -A $1 13 | -------------------------------------------------------------------------------- /files/scripts/rofi_launcher: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/launcher.rasi" 8 | 9 | # Run 10 | rofi \ 11 | -show drun \ 12 | -kb-cancel Alt-F1 \ 13 | -theme ${RASI} 14 | -------------------------------------------------------------------------------- /files/theme/rofi/shared/colors.rasi: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020-2025 Aditya Shakya */ 2 | 3 | /* Colors */ 4 | 5 | * { 6 | background: #011826; 7 | background-alt: #0A2332; 8 | foreground: #EEEEEE; 9 | selected: #D97E96; 10 | active: #496886; 11 | urgent: #A36584; 12 | } 13 | -------------------------------------------------------------------------------- /files/scripts/rofi_askpass: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/askpass.rasi" 8 | 9 | # Rofi text dialog to get password 10 | rofi -dmenu \ 11 | -password \ 12 | -i \ 13 | -p "Root" \ 14 | -theme ${RASI} 15 | -------------------------------------------------------------------------------- /files/xsettingsd: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | Net/ThemeName "Catppuccin-Mocha" 4 | Net/IconThemeName "Luv-Folders-Dark" 5 | Gtk/CursorThemeName "Sweet" 6 | Net/EnableEventSounds "0" 7 | Net/EnableInputFeedbackSounds "0" 8 | Xft/DPI "-1" 9 | Xft/Hinting 1 10 | Xft/HintStyle "hintslight" 11 | Xft/Antialias 1 12 | Xft/RGBA "none" 13 | -------------------------------------------------------------------------------- /files/scripts/berry_comp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # berry directory 6 | DIR="$HOME/.config/berry" 7 | 8 | # Terminate if picom is already running 9 | killall -q picom 10 | 11 | # Wait until the processes have been shut down 12 | while pgrep -u $UID -x picom >/dev/null; do sleep 1; done 13 | 14 | # Launch picom 15 | picom --config "$DIR"/picom.conf & 16 | -------------------------------------------------------------------------------- /files/theme/polybar/colors.ini: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 4 | 5 | [color] 6 | BG = #011826 7 | BGL = #193241 8 | BGA = #656565 9 | FG = #EEEEEE 10 | 11 | pink = #D97E96 12 | magenta = #A36584 13 | purple = #635373 14 | blue = #496886 15 | slate = #152B42 16 | gray = #1A2133 17 | 18 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 19 | -------------------------------------------------------------------------------- /files/scripts/berry_music: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Run ncmpcpp with alternate config 6 | 7 | # berry directory 8 | DIR="$HOME/.config/berry" 9 | 10 | CONFIG="$DIR/alacritty/alacritty.toml" 11 | 12 | alacritty --class 'Music,Music' --config-file "$CONFIG" \ 13 | -o window.dimensions.columns=105 window.dimensions.lines=22 \ 14 | -e ~/.ncmpcpp/scripts/ncmpcpp-art 15 | -------------------------------------------------------------------------------- /files/kitty/colors.conf: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## 3 | ## Colors configuration --------------------------------------- 4 | 5 | background #011826 6 | foreground #EEEEEE 7 | selection_background #EEEEEE 8 | selection_foreground #011826 9 | cursor #EEEEEE 10 | 11 | color0 #152B42 12 | color8 #1E3C5A 13 | color1 #D97E96 14 | color9 #D97E96 15 | color2 #498653 16 | color10 #498653 17 | color3 #838649 18 | color11 #838649 19 | color4 #496886 20 | color12 #496886 21 | color5 #A36584 22 | color13 #A36584 23 | color6 #50A6A8 24 | color14 #50A6A8 25 | color7 #ABB2BF 26 | color15 #B5BCC9 27 | -------------------------------------------------------------------------------- /files/scripts/berry_kitty: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## launch kitty with berry config 6 | 7 | # berry directory 8 | DIR="$HOME/.config/berry" 9 | CONFIG="$DIR/kitty/kitty.conf" 10 | 11 | if [ "$1" == "--float" ]; then 12 | kitty --class 'kitty-float' --config "$CONFIG" 13 | elif [ "$1" == "--full" ]; then 14 | kitty --class 'kitty-fullscreen' --config "$CONFIG" \ 15 | --start-as fullscreen \ 16 | --override 'window_padding_width=30' \ 17 | --override 'font_size=14' \ 18 | --override 'background_opacity=0.95' 19 | else 20 | kitty --config "$CONFIG" ${@} 21 | fi 22 | -------------------------------------------------------------------------------- /files/scripts/berry_colorpicker: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Simple script to pick color quickly. 6 | 7 | color=$(xcolor --format hex --preview-size 255 --scale 10) 8 | image=/tmp/${color}.png 9 | 10 | main() { 11 | if [[ "$color" ]]; then 12 | # copy color code to clipboard 13 | echo $color | tr -d "\n" | xclip -selection clipboard 14 | # generate preview 15 | convert -size 48x48 xc:"$color" ${image} 16 | # notify about it 17 | dunstify -u low -h string:x-dunst-stack-tag:obcolorpicker -i ${image} "$color, copied to clipboard." 18 | fi 19 | } 20 | 21 | # run the script 22 | main 23 | -------------------------------------------------------------------------------- /files/alacritty/colors.toml: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## 3 | ## Colors configuration ------------------------------------- 4 | 5 | [colors.primary] 6 | background = "#011826" 7 | foreground = "#EEEEEE" 8 | 9 | [colors.normal] 10 | black = "#152B42" 11 | red = "#D97E96" 12 | green = "#498653" 13 | yellow = "#838649" 14 | blue = "#496886" 15 | magenta = "#A36584" 16 | cyan = "#50A6A8" 17 | white = "#ABB2BF" 18 | 19 | [colors.bright] 20 | black = "#1E3C5A" 21 | red = "#D97E96" 22 | green = "#498653" 23 | yellow = "#838649" 24 | blue = "#496886" 25 | magenta = "#A36584" 26 | cyan = "#50A6A8" 27 | white = "#B5BCC9" 28 | -------------------------------------------------------------------------------- /files/scripts/berry_term: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## launch alacritty with berry config 6 | 7 | # berry directory 8 | DIR="$HOME/.config/berry" 9 | CONFIG="$DIR/alacritty/alacritty.toml" 10 | 11 | if [ "$1" == "--float" ]; then 12 | alacritty --class 'alacritty-float,alacritty-float' --config-file "$CONFIG" 13 | elif [ "$1" == "--full" ]; then 14 | alacritty --class 'alacritty-fullscreen,alacritty-fullscreen' --config-file "$CONFIG" \ 15 | -o window.startup_mode="'Fullscreen'" \ 16 | window.padding.x=30 window.padding.y=30 \ 17 | window.opacity=0.95 font.size=14 18 | else 19 | alacritty --config-file "$CONFIG" ${@} 20 | fi 21 | -------------------------------------------------------------------------------- /files/theme/system.ini: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 3 | ;; 4 | ;; System Variables (Edit according to your system) 5 | ;; 6 | ;; Warning : DO NOT DELETE THIS FILE 7 | ;; 8 | ;; Run `ls -1 /sys/class/power_supply/` to list list batteries and adapters. 9 | ;; 10 | ;; Run `ls -1 /sys/class/backlight/` to list available graphics cards. 11 | ;; 12 | ;; Run `ip link | awk '/state UP/ {print $2}' | tr -d :` to get active network interface. 13 | ;; 14 | ;; Polybar Variables For Modules : 15 | ;; card = ${system.sys_graphics_card} 16 | ;; battery = ${system.sys_battery} 17 | ;; adapter = ${system.sys_adapter} 18 | ;; interface = ${system.sys_network_interface} 19 | 20 | [system] 21 | sys_adapter = ACAD 22 | sys_battery = BAT1 23 | sys_graphics_card = amdgpu_bl1 24 | sys_network_interface = wlan0 25 | 26 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 27 | -------------------------------------------------------------------------------- /files/kitty/fonts.conf: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## 3 | ## Font configuration --------------------------------------- 4 | 5 | #: kitty has very powerful font management. You can configure 6 | #: individual font faces and even specify special fonts for particular 7 | #: characters. 8 | 9 | #! DO NOT DELETE THE COMMENTS BELOW 10 | #-fn-start 11 | font_family JetBrainsMono Nerd Font 12 | bold_font JetBrainsMono Nerd Font 13 | italic_font JetBrainsMono Nerd Font 14 | bold_italic_font JetBrainsMono Nerd Font 15 | #-fn-end 16 | 17 | font_size 10 18 | force_ltr no 19 | 20 | # symbol_map codepoints Font Family Name 21 | # narrow_symbols codepoints [optionally the number of cells] 22 | # disable_ligatures never 23 | # font_features none 24 | 25 | # modify_font underline_position -2 26 | # modify_font underline_thickness 150% 27 | # modify_font strikethrough_position 2px 28 | 29 | # box_drawing_scale 0.001, 1, 1.5, 2 30 | # undercurl_style thin-sparse 31 | # text_composition_strategy platform 32 | # text_fg_override_threshold 0 33 | -------------------------------------------------------------------------------- /cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Repository cleanup 4 | 5 | branch="`git branch --show-current`" 6 | 7 | echo "Cleaning up repository..." 8 | 9 | # Backup config & remove git dir 10 | echo "Backing up config & deleting git dir..." 11 | mv .git/config config 12 | rm -rf .git 13 | 14 | # Setup git 15 | echo "Setting up git repository..." 16 | git config --global init.defaultBranch "$branch" 17 | git init 18 | git config --global user.name "adi1090x" 19 | git config --global user.email "adi1090x@gmail.com" 20 | sudo git config --system core.editor vim 21 | git config --global credential.helper cache 22 | git config --global credential.helper 'cache --timeout=25000' 23 | git config --global push.default simple 24 | echo "Git repository setup complete!" 25 | 26 | # Move config to git again & push changes to repository 27 | echo "Moving config to git dir & push changes..." 28 | mv config .git/config 29 | 30 | git add --all . 31 | read -p "Enter Commit Message: " cmt 32 | git commit -m "$cmt" 33 | 34 | git remote add origin https://github.com/archcraft-os/archcraft-berry 35 | git push --force --set-upstream origin "$branch" 36 | 37 | echo "Clean up completed." 38 | -------------------------------------------------------------------------------- /files/autostart: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Config file for berry WM 6 | 7 | ## Berry Configs ----------------------------------------------- 8 | 9 | # Set decoration geometry 10 | berryc border_width 0 11 | berryc inner_border_width 4 12 | berryc title_height 30 13 | #berryc top_gap 82 14 | berryc edge_gap 82 20 20 20 15 | 16 | # Set decoration colors 17 | berryc focus_color 292D3E 18 | berryc unfocus_color 292D3E 19 | berryc inner_focus_color D97E96 20 | berryc inner_unfocus_color 496886 21 | berryc text_focus_color FFFFFF 22 | berryc text_unfocus_color 011826 23 | 24 | # Other options 25 | berryc set_font "Iosevka-10" 26 | berryc smart_place "true" 27 | berryc draw_text "true" 28 | berryc edge_lock "true" 29 | berryc json_status "true" 30 | berryc decorate_new "true" 31 | berryc pointer_interval 0 32 | berryc manage Dialog|Toolbar|Menu|Splash|Utility 33 | 34 | berryc move_mask "mod1" 35 | berryc move_button 1 36 | berryc resize_mask "mod4" 37 | berryc resize_button 3 38 | 39 | ## Autostart Programs ------------------------------------------ 40 | bash "$HOME"/.config/berry/scripts/berry_autostart 41 | -------------------------------------------------------------------------------- /files/scripts/berry_autostart: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Autostart Programs 6 | 7 | # berry dir 8 | bdir="$HOME/.config/berry" 9 | 10 | # Export desktop session 11 | export XDG_CURRENT_DESKTOP='berry' 12 | 13 | # Kill already running process 14 | _ps=(xsettingsd ksuperkey) 15 | for _prs in "${_ps[@]}"; do 16 | if [[ `pidof ${_prs}` ]]; then 17 | killall -9 ${_prs} 18 | fi 19 | done 20 | 21 | # Enable Simple X hotkey daemon 22 | sxhkd -c "$bdir"/sxhkdrc & 23 | 24 | # Lauch xsettingsd daemon 25 | xsettingsd --config="$bdir"/xsettingsd & 26 | 27 | # polkit agent 28 | if [[ ! `pidof xfce-polkit` ]]; then 29 | /usr/lib/xfce-polkit/xfce-polkit & 30 | fi 31 | 32 | # Enable power management 33 | xfce4-power-manager & 34 | 35 | # Enable Super Keys For Menu 36 | ksuperkey -e 'Super_L=Alt_L|F1' & 37 | ksuperkey -e 'Super_R=Alt_L|F1' & 38 | 39 | # Fix cursor 40 | xsetroot -cursor_name left_ptr 41 | 42 | # Restore wallpaper 43 | hsetroot -cover "$bdir"/theme/wallpaper 44 | 45 | # Lauch notification daemon 46 | "$bdir"/scripts/berry_dunst 47 | 48 | # Lauch polybar 49 | "$bdir"/scripts/berry_bar 50 | 51 | # Lauch compositor 52 | "$bdir"/scripts/berry_comp 53 | 54 | # Start mpd 55 | exec mpd & 56 | -------------------------------------------------------------------------------- /files/theme/networkmenu_config.ini: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | [dmenu] 4 | dmenu_command = rofi -dmenu -theme ~/.config/berry/theme/rofi/networkmenu.rasi 5 | # # Note that dmenu_command can contain arguments as well like `rofi -width 30` 6 | # # Rofi and dmenu are set to case insensitive by default `-i` 7 | # l = number of lines to display, defaults to number of total network options 8 | # fn = font string 9 | # nb = normal background (name, #RGB, or #RRGGBB) 10 | # nf = normal foreground 11 | # sb = selected background 12 | # sf = selected foreground 13 | # b = (just set to empty value and menu will appear at the bottom 14 | # m = number of monitor to display on 15 | # p = Custom Prompt for the networks menu 16 | # pinentry = Pinentry command 17 | # rofi_highlight = # (Default: False) use rofi highlighting instead of '**' 18 | 19 | # # override normal foreground and background colors (dmenu) or use the 20 | # # -password option (rofi) to obscure passphrase entry 21 | # [dmenu_passphrase] 22 | # nf = #222222 23 | # nb = #222222 24 | # rofi_obscure = True 25 | 26 | [editor] 27 | terminal = alacritty 28 | gui_if_available = True 29 | # terminal = 30 | # gui_if_available = 31 | -------------------------------------------------------------------------------- /files/theme/polybar/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 6 | CARD="$(light -L | grep 'backlight' | head -n1 | cut -d'/' -f3)" 7 | INTERFACE="$(ip link | awk '/state UP/ {print $2}' | tr -d :)" 8 | BAT="$(acpi -b)" 9 | RFILE="$DIR/.module" 10 | 11 | # Fix backlight and network modules 12 | fix_modules() { 13 | if [[ -z "$CARD" ]]; then 14 | sed -i -e 's/backlight/bna/g' "$DIR"/config.ini 15 | elif [[ "$CARD" != *"intel_"* ]]; then 16 | sed -i -e 's/backlight/brightness/g' "$DIR"/config.ini 17 | fi 18 | 19 | if [[ -z "$BAT" ]]; then 20 | sed -i -e 's/battery/btna/g' "$DIR"/config.ini 21 | fi 22 | 23 | if [[ "$INTERFACE" == e* ]]; then 24 | sed -i -e 's/network/ethernet/g' "$DIR"/config.ini 25 | fi 26 | } 27 | 28 | # Launch the bar 29 | launch_bar() { 30 | # Terminate already running bar instances 31 | killall -q polybar 32 | 33 | # Wait until the processes have been shut down 34 | while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done 35 | 36 | # Launch the bar 37 | for mon in $(polybar --list-monitors | cut -d":" -f1); do 38 | MONITOR=$mon polybar -q main -c "$DIR"/config.ini & 39 | done 40 | } 41 | 42 | # Execute functions 43 | if [[ ! -f "$RFILE" ]]; then 44 | fix_modules 45 | touch "$RFILE" 46 | fi 47 | launch_bar 48 | -------------------------------------------------------------------------------- /files/alacritty/fonts.toml: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## 3 | ## Font configuration --------------------------------------- 4 | 5 | [font] 6 | ## Font size in points. 7 | size = 10 8 | 9 | ## When true, Alacritty will use a custom built-in font for box drawing characters and powerline symbols. 10 | builtin_box_drawing = true 11 | 12 | ## Normal font family. 13 | [font.normal] 14 | family = "JetBrainsMono Nerd Font" 15 | 16 | ## If the family is not specified, it will fall back to the value specified for the normal font. 17 | [font.bold] 18 | family = "JetBrainsMono Nerd Font" 19 | 20 | ## If the family is not specified, it will fall back to the value specified for the normal font. 21 | [font.italic] 22 | family = "JetBrainsMono Nerd Font" 23 | 24 | ## If the family is not specified, it will fall back to the value specified for the normal font. 25 | [font.bold_italic] 26 | family = "JetBrainsMono Nerd Font" 27 | 28 | ## Offset is the extra space around each character. 29 | ## 'y' can be thought of as modifying the line spacing, and 'x' as modifying the letter spacing. 30 | [font.offset] 31 | x = 0 32 | y = 0 33 | 34 | ## Glyph offset determines the locations of the glyphs within their cells with the default being at the bottom. 35 | ## Increasing 'x' moves the glyph to the right, increasing 'y' moves the glyph upward. 36 | [font.glyph_offset] 37 | x = 0 38 | y = 0 39 | -------------------------------------------------------------------------------- /files/theme/polybar.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | ## Files and Directories 6 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 7 | SFILE="$DIR/system.ini" 8 | RFILE="$DIR/.system" 9 | 10 | ## Get system variable values for various modules 11 | get_values() { 12 | CARD=$(light -L | grep 'backlight' | head -n1 | cut -d'/' -f3) 13 | BATTERY=$(upower -i `upower -e | grep 'BAT'` | grep 'native-path' | cut -d':' -f2 | tr -d '[:blank:]') 14 | ADAPTER=$(upower -i `upower -e | grep 'AC'` | grep 'native-path' | cut -d':' -f2 | tr -d '[:blank:]') 15 | INTERFACE=$(ip link | awk '/state UP/ {print $2}' | tr -d :) 16 | } 17 | 18 | ## Write values to `system.ini` file 19 | set_values() { 20 | if [[ "$ADAPTER" ]]; then 21 | sed -i -e "s/sys_adapter = .*/sys_adapter = $ADAPTER/g" ${SFILE} 22 | fi 23 | if [[ "$BATTERY" ]]; then 24 | sed -i -e "s/sys_battery = .*/sys_battery = $BATTERY/g" ${SFILE} 25 | fi 26 | if [[ "$CARD" ]]; then 27 | sed -i -e "s/sys_graphics_card = .*/sys_graphics_card = $CARD/g" ${SFILE} 28 | fi 29 | if [[ "$INTERFACE" ]]; then 30 | sed -i -e "s/sys_network_interface = .*/sys_network_interface = $INTERFACE/g" ${SFILE} 31 | fi 32 | } 33 | 34 | ## Launch Polybar with selected style 35 | launch_bar() { 36 | bash "$DIR"/polybar/launch.sh 37 | } 38 | 39 | # Execute functions 40 | if [[ ! -f "$RFILE" ]]; then 41 | get_values 42 | set_values 43 | touch ${RFILE} 44 | fi 45 | launch_bar 46 | -------------------------------------------------------------------------------- /files/theme/polybar/decor.ini: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | ;; DECOR _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 4 | 5 | [module/sep] 6 | type = custom/text 7 | content = | 8 | 9 | content-background = ${color.BG} 10 | content-foreground = ${color.BG} 11 | content-padding = 1 12 | 13 | ;; Dots 14 | 15 | [module/dot] 16 | type = custom/text 17 | content =  18 | content-foreground = ${color.BGL} 19 | content-padding = 2 20 | content-font = 4 21 | 22 | [module/dot-alt] 23 | inherit = module/dot 24 | content-foreground = ${color.BLUEGRAY} 25 | 26 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 27 | 28 | [module/LD] 29 | type = custom/text 30 | content = "%{T3}%{T-}" 31 | content-background = ${color.BG} 32 | content-foreground = ${color.BGL} 33 | 34 | [module/RD] 35 | type = custom/text 36 | content = "%{T3}%{T-}" 37 | content-background = ${color.BG} 38 | content-foreground = ${color.BGL} 39 | 40 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 41 | 42 | [module/LD1] 43 | type = custom/text 44 | content = "%{T3}%{T-}" 45 | content-background = ${color.BG} 46 | content-foreground = ${color.WHITE} 47 | 48 | [module/RD1] 49 | type = custom/text 50 | content = "%{T3}%{T-}" 51 | content-background = ${color.BG} 52 | content-foreground = ${color.WHITE} 53 | 54 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 55 | ;; __________ ______ 56 | ;; / ____/ __ \/ ____/ 57 | ;; / __/ / / / / /_ 58 | ;; / /___/ /_/ / __/ 59 | ;; /_____/\____/_/ 60 | ;; 61 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 62 | -------------------------------------------------------------------------------- /files/dunstrc: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | [global] 4 | monitor = 0 5 | follow = mouse 6 | width = 300 7 | height = 80 8 | origin = top-right 9 | offset = 20x82 10 | corner_radius = 0 11 | scale = 0 12 | notification_limit = 0 13 | progress_bar = true 14 | progress_bar_height = 80 15 | progress_bar_frame_width = 2 16 | progress_bar_min_width = 300 17 | progress_bar_max_width = 300 18 | indicate_hidden = yes 19 | transparency = 0 20 | separator_height = 2 21 | padding = 15 22 | horizontal_padding = 15 23 | text_icon_padding = 0 24 | frame_width = 0 25 | gap_size = 0 26 | separator_color = frame 27 | sort = yes 28 | idle_threshold = 120 29 | font = JetBrainsMono Nerd Font 10 30 | line_height = 2 31 | markup = full 32 | format = %s\n%b 33 | alignment = left 34 | vertical_alignment = center 35 | show_age_threshold = 60 36 | ellipsize = middle 37 | ignore_newline = no 38 | stack_duplicates = true 39 | hide_duplicate_count = false 40 | show_indicators = yes 41 | enable_recursive_icon_lookup = true 42 | icon_position = left 43 | min_icon_size = 24 44 | max_icon_size = 48 45 | sticky_history = yes 46 | history_length = 20 47 | browser = /usr/bin/xdg-open 48 | always_run_script = true 49 | mouse_left_click = close_current 50 | mouse_middle_click = do_action, close_current 51 | mouse_right_click = close_all 52 | title = Dunst 53 | class = Dunst 54 | 55 | [urgency_low] 56 | timeout = 2 57 | background = "#0A2332" 58 | foreground = "#EEEEEE" 59 | frame_color = "#EEEEEE" 60 | 61 | [urgency_normal] 62 | timeout = 5 63 | background = "#0A2332" 64 | foreground = "#EEEEEE" 65 | frame_color = "#EEEEEE" 66 | 67 | [urgency_critical] 68 | timeout = 0 69 | background = "#0A2332" 70 | foreground = "#D97E96" 71 | frame_color = "#D97E96" 72 | -------------------------------------------------------------------------------- /files/scripts/rofi_asroot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/asroot.rasi" 8 | ASROOT="$DIR/scripts/berry_asroot" 9 | 10 | # Theme Elements 11 | prompt='Root' 12 | mesg="Run Applications As Root" 13 | term='alacritty --class alacritty-float,alacritty-float --config-file /root/.config/berry/alacritty/alacritty.toml' 14 | 15 | # Options 16 | layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` 17 | if [[ "$layout" == 'NO' ]]; then 18 | option_1=" Alacritty" 19 | option_2=" Thunar" 20 | option_3=" Geany" 21 | option_4=" Ranger" 22 | option_5=" Vim" 23 | else 24 | option_1="" 25 | option_2="" 26 | option_3="" 27 | option_4="" 28 | option_5="" 29 | fi 30 | 31 | # Rofi CMD 32 | rofi_cmd() { 33 | rofi -dmenu \ 34 | -p "$prompt" \ 35 | -mesg "$mesg" \ 36 | -markup-rows \ 37 | -theme ${RASI} 38 | } 39 | 40 | # Pass variables to rofi dmenu 41 | run_rofi() { 42 | echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5" | rofi_cmd 43 | } 44 | 45 | # Execute Command 46 | run_cmd() { 47 | if [[ "$1" == '--opt1' ]]; then 48 | ${ASROOT} "$term" 49 | elif [[ "$1" == '--opt2' ]]; then 50 | ${ASROOT} 'dbus-run-session thunar' 51 | elif [[ "$1" == '--opt3' ]]; then 52 | ${ASROOT} geany 53 | elif [[ "$1" == '--opt4' ]]; then 54 | ${ASROOT} "$term -e ranger" 55 | elif [[ "$1" == '--opt5' ]]; then 56 | ${ASROOT} "$term -e vim" 57 | fi 58 | } 59 | 60 | # Actions 61 | chosen="$(run_rofi)" 62 | case ${chosen} in 63 | $option_1) 64 | run_cmd --opt1 65 | ;; 66 | $option_2) 67 | run_cmd --opt2 68 | ;; 69 | $option_3) 70 | run_cmd --opt3 71 | ;; 72 | $option_4) 73 | run_cmd --opt4 74 | ;; 75 | $option_5) 76 | run_cmd --opt5 77 | ;; 78 | esac 79 | -------------------------------------------------------------------------------- /files/scripts/berry_brightness: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Script to manage brightness on Archcraft. 6 | 7 | # Icons 8 | iDIR='/usr/share/archcraft/icons/dunst' 9 | 10 | # Graphics card 11 | CARD=`ls /sys/class/backlight | head -n 1` 12 | 13 | # Get brightness 14 | get_backlight() { 15 | if [[ "$CARD" == *"intel_"* ]]; then 16 | BNESS=`xbacklight -get` 17 | LIGHT=${BNESS%.*} 18 | else 19 | LIGHT=$(printf "%.0f\n" `light -G`) 20 | fi 21 | echo "${LIGHT}%" 22 | } 23 | 24 | # Get icons 25 | get_icon() { 26 | backlight="$(get_backlight)" 27 | current="${backlight%%%}" 28 | if [[ ("$current" -ge "0") && ("$current" -le "20") ]]; then 29 | icon="$iDIR"/brightness-20.png 30 | elif [[ ("$current" -ge "20") && ("$current" -le "40") ]]; then 31 | icon="$iDIR"/brightness-40.png 32 | elif [[ ("$current" -ge "40") && ("$current" -le "60") ]]; then 33 | icon="$iDIR"/brightness-60.png 34 | elif [[ ("$current" -ge "60") && ("$current" -le "80") ]]; then 35 | icon="$iDIR"/brightness-80.png 36 | elif [[ ("$current" -ge "80") && ("$current" -le "100") ]]; then 37 | icon="$iDIR"/brightness-100.png 38 | fi 39 | } 40 | 41 | # Notify 42 | notify_bl() { 43 | get_icon && dunstify -u low -h string:x-dunst-stack-tag:obbacklight -i "$icon" "Brightness : $(get_backlight)" 44 | } 45 | 46 | # Increase brightness 47 | inc_backlight() { 48 | if [[ "$CARD" == *"intel_"* ]]; then 49 | xbacklight -inc 10 && notify_bl 50 | else 51 | light -A 5 && notify_bl 52 | fi 53 | } 54 | 55 | # Decrease brightness 56 | dec_backlight() { 57 | if [[ "$CARD" == *"intel_"* ]]; then 58 | xbacklight -dec 10 && notify_bl 59 | else 60 | light -U 5 && notify_bl 61 | fi 62 | } 63 | 64 | # Execute accordingly 65 | if [[ "$1" == "--get" ]]; then 66 | get_backlight 67 | elif [[ "$1" == "--inc" ]]; then 68 | inc_backlight 69 | elif [[ "$1" == "--dec" ]]; then 70 | dec_backlight 71 | else 72 | get_backlight 73 | fi 74 | -------------------------------------------------------------------------------- /files/scripts/berry_screenshot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Script to take screenshots on Archcraft. 6 | 7 | # file 8 | time=`date +%Y-%m-%d-%H-%M-%S` 9 | geometry=`xrandr | grep 'current' | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current'` 10 | dir="`xdg-user-dir PICTURES`/Screenshots" 11 | file="Screenshot_${time}_${geometry}.png" 12 | 13 | # directory 14 | if [[ ! -d "$dir" ]]; then 15 | mkdir -p "$dir" 16 | fi 17 | 18 | # notify and view screenshot 19 | notify_view () { 20 | notify_cmd_shot='dunstify -u low -h string:x-dunst-stack-tag:obscreenshot -i /usr/share/archcraft/icons/dunst/picture.png' 21 | ${notify_cmd_shot} "Copied to clipboard." 22 | paplay /usr/share/sounds/freedesktop/stereo/screen-capture.oga &>/dev/null & 23 | viewnior ${dir}/"$file" 24 | if [[ -e "$dir/$file" ]]; then 25 | ${notify_cmd_shot} "Screenshot Saved." 26 | else 27 | ${notify_cmd_shot} "Screenshot Deleted." 28 | fi 29 | } 30 | 31 | # copy screenshot to clipboard 32 | copy_shot () { 33 | tee "$file" | xclip -selection clipboard -t image/png 34 | } 35 | 36 | # countdown 37 | countdown () { 38 | for sec in `seq $1 -1 1`; do 39 | dunstify -t 1000 -h string:x-dunst-stack-tag:screenshottimer -i /usr/share/archcraft/icons/dunst/timer.png "Taking shot in : $sec" 40 | sleep 1 41 | done 42 | } 43 | 44 | # take shots 45 | shotnow () { 46 | cd ${dir} && maim -u -f png | copy_shot 47 | notify_view 48 | } 49 | 50 | shot5 () { 51 | countdown '5' 52 | sleep 1 && cd ${dir} && maim -u -f png | copy_shot 53 | notify_view 54 | } 55 | 56 | shot10 () { 57 | countdown '10' 58 | sleep 1 && cd ${dir} && maim -u -f png | copy_shot 59 | notify_view 60 | } 61 | 62 | shotwin () { 63 | cd ${dir} && maim -u -f png -i `xdotool getactivewindow` | copy_shot 64 | notify_view 65 | } 66 | 67 | shotarea () { 68 | cd ${dir} && maim -u -f png -s -b 2 -c 0.35,0.55,0.85,0.25 -l | copy_shot 69 | notify_view 70 | } 71 | 72 | # execute 73 | if [[ "$1" == "--now" ]]; then 74 | shotnow 75 | elif [[ "$1" == "--in5" ]]; then 76 | shot5 77 | elif [[ "$1" == "--in10" ]]; then 78 | shot10 79 | elif [[ "$1" == "--win" ]]; then 80 | shotwin 81 | elif [[ "$1" == "--area" ]]; then 82 | shotarea 83 | else 84 | echo -e "Available Options : --now --in5 --in10 --win --area" 85 | fi 86 | 87 | exit 0 88 | -------------------------------------------------------------------------------- /PKGBUILD: -------------------------------------------------------------------------------- 1 | # Maintainer: Aditya Shakya 2 | 3 | pkgname=archcraft-berry 4 | pkgver=4.0 5 | pkgrel=6 6 | pkgdesc="Berry Configurations for Archcraft" 7 | arch=('any') 8 | url="https://github.com/archcraft-os/archcraft-berry" 9 | license=('GPL3') 10 | depends=('berry-git' 'sxhkd' 'hsetroot' 'xsettingsd' 11 | 'pulsemixer' 'light' 'polybar' 'rofi' 'dunst' 12 | ) 13 | optdepends=('alacritty: default terminal emulator' 14 | 'thunar: default file manager' 15 | 'geany: default text editor' 16 | 'firefox: default web browser' 17 | 'viewnior: default image viewer' 18 | 'betterlockscreen: default lockscreen' 19 | 'ksuperkey: allows you to open the application launcher using the Super key' 20 | 'networkmanager-dmenu-git: control NetworkManager via rofi' 21 | 'mpd: server-side application for playing music, used in statusbars and scripts' 22 | 'mpc: minimalist command line interface to MPD' 23 | 'ffmpeg: complete solution to record, convert and stream audio and video, used in screenrecord scripts' 24 | 'maim: utility to take a screenshot, used in screenshot scripts' 25 | 'xclip: command line interface to the X11 clipboard' 26 | 'xcolor: lightweight color picker for X11' 27 | 'xfce4-power-manager: power manager' 28 | 'xorg-xsetroot: fix cursor theming, set root background' 29 | 'yad: display graphical dialogs from shell scripts' 30 | 'wmname: utility to set the name of your window manager' 31 | ) 32 | options=(!strip !emptydirs) 33 | install="${pkgname}.install" 34 | 35 | prepare() { 36 | cp -af ../files/. "$srcdir" 37 | } 38 | 39 | package() { 40 | local _wmdir="$pkgdir"/etc/skel/.config/berry 41 | mkdir -p "$_wmdir" 42 | 43 | # Copy config files 44 | cp -r "$srcdir"/alacritty "$_wmdir" 45 | cp -r "$srcdir"/scripts "$_wmdir" 46 | cp -r "$srcdir"/theme "$_wmdir" 47 | 48 | chmod +x "$_wmdir"/scripts/* 49 | chmod +x "$_wmdir"/theme/polybar.sh 50 | chmod +x "$_wmdir"/theme/polybar/launch.sh 51 | chmod +x "$_wmdir"/theme/polybar/scripts/bluetooth.sh 52 | 53 | install -Dm 755 autostart "$_wmdir"/autostart 54 | install -Dm 644 dunstrc "$_wmdir"/dunstrc 55 | install -Dm 644 picom.conf "$_wmdir"/picom.conf 56 | install -Dm 644 sxhkdrc "$_wmdir"/sxhkdrc 57 | install -Dm 644 xsettingsd "$_wmdir"/xsettingsd 58 | 59 | install -Dm 644 berry.desktop "$pkgdir"/usr/share/xsessions/berry.desktop 60 | } 61 | -------------------------------------------------------------------------------- /files/theme/polybar/scripts/bluetooth.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Colors 6 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 7 | CDIR=`cd "$DIR" && cd .. && pwd` 8 | POWER_ON=`cat $CDIR/colors.ini | grep 'magenta' | head -n1 | cut -d '=' -f2 | tr -d ' '` 9 | POWER_OFF=`cat $CDIR/colors.ini | grep 'BGA' | head -n1 | cut -d '=' -f2 | tr -d ' '` 10 | 11 | # Checks if bluetooth controller is powered on 12 | power_on() { 13 | if bluetoothctl show | grep -q "Powered: yes"; then 14 | return 0 15 | else 16 | return 1 17 | fi 18 | } 19 | 20 | # Checks if a device is connected 21 | device_connected() { 22 | device_info=$(bluetoothctl info "$1") 23 | if echo "$device_info" | grep -q "Connected: yes"; then 24 | return 0 25 | else 26 | return 1 27 | fi 28 | } 29 | 30 | # Prints a short string with the current bluetooth status 31 | # Useful for status bars like polybar, etc. 32 | print_status() { 33 | if power_on; then 34 | if [[ -z `bluetoothctl info "$device" | grep "Alias" | cut -d ' ' -f 2-` ]]; then 35 | echo "%{F$POWER_ON}%{T2}%{T-} %{F-}On" 36 | fi 37 | 38 | paired_devices_cmd="devices Paired" 39 | # Check if an outdated version of bluetoothctl is used to preserve backwards compatibility 40 | bt_version=$(bluetoothctl version 2>/dev/null | awk '{print $2}' | head -n1) 41 | if [ -n "$bt_version" ] && echo "$bt_version < 5.65" | bc -l 2>/dev/null | grep -q 1; then 42 | paired_devices_cmd="paired-devices" 43 | else 44 | paired_devices_cmd="devices Paired" 45 | fi 46 | 47 | mapfile -t paired_devices < <(bluetoothctl $paired_devices_cmd | grep Device | cut -d ' ' -f 2) 48 | counter=0 49 | 50 | for device in "${paired_devices[@]}"; do 51 | if device_connected "$device"; then 52 | device_alias=$(bluetoothctl info "$device" | grep "Alias" | cut -d ' ' -f 2-) 53 | 54 | if [ $counter -gt 0 ]; then 55 | echo "%{F$POWER_ON}%{T2}%{T-} %{F-}$device_alias" 56 | else 57 | echo "%{F$POWER_ON}%{T2}%{T-} %{F-}$device_alias" 58 | fi 59 | 60 | ((counter++)) 61 | fi 62 | done 63 | else 64 | echo "%{F$POWER_OFF}%{T2}%{T-} Off%{F-}" 65 | fi 66 | } 67 | 68 | # Print Status 69 | print_status 70 | -------------------------------------------------------------------------------- /files/scripts/berry_volume: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | ## 5 | ## Script to manage speaker volume on Archcraft. 6 | 7 | # Icons 8 | iDIR='/usr/share/archcraft/icons/dunst' 9 | notify_cmd='dunstify -u low -h string:x-dunst-stack-tag:obvolume' 10 | 11 | # Get Volume 12 | get_volume() { 13 | echo "`pulsemixer --get-volume | cut -d' ' -f1`" 14 | } 15 | 16 | # Get icons 17 | get_icon() { 18 | current="$(get_volume)" 19 | if [[ "$current" -eq "0" ]]; then 20 | icon="$iDIR/volume-mute.png" 21 | elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then 22 | icon="$iDIR/volume-low.png" 23 | elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then 24 | icon="$iDIR/volume-mid.png" 25 | elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then 26 | icon="$iDIR/volume-high.png" 27 | fi 28 | } 29 | 30 | # Notify 31 | notify_user() { 32 | ${notify_cmd} -i "$icon" "Volume : $(get_volume)%" 33 | } 34 | 35 | # Increase Volume 36 | inc_volume() { 37 | [[ `pulsemixer --get-mute` == 1 ]] && pulsemixer --unmute 38 | pulsemixer --max-volume 100 --change-volume +5 && get_icon && notify_user 39 | } 40 | 41 | # Decrease Volume 42 | dec_volume() { 43 | [[ `pulsemixer --get-mute` == 1 ]] && pulsemixer --unmute 44 | pulsemixer --max-volume 100 --change-volume -5 && get_icon && notify_user 45 | } 46 | 47 | # Toggle Mute 48 | toggle_mute() { 49 | if [[ `pulsemixer --get-mute` == 0 ]]; then 50 | pulsemixer --toggle-mute && ${notify_cmd} -i "$iDIR/volume-mute.png" "Mute" 51 | else 52 | pulsemixer --toggle-mute && get_icon && ${notify_cmd} -i "$icon" "Unmute" 53 | fi 54 | } 55 | 56 | # Toggle Mic 57 | toggle_mic() { 58 | ID="`pulsemixer --list-sources | grep 'Default' | cut -d',' -f1 | cut -d' ' -f3`" 59 | if [[ `pulsemixer --id $ID --get-mute` == 0 ]]; then 60 | pulsemixer --id ${ID} --toggle-mute && ${notify_cmd} -i "$iDIR/microphone-mute.png" "Microphone Switched OFF" 61 | else 62 | pulsemixer --id ${ID} --toggle-mute && ${notify_cmd} -i "$iDIR/microphone.png" "Microphone Switched ON" 63 | fi 64 | } 65 | 66 | # Execute accordingly 67 | if [[ -x `which pulsemixer` ]]; then 68 | if [[ "$1" == "--get" ]]; then 69 | get_volume 70 | elif [[ "$1" == "--inc" ]]; then 71 | inc_volume 72 | elif [[ "$1" == "--dec" ]]; then 73 | dec_volume 74 | elif [[ "$1" == "--toggle" ]]; then 75 | toggle_mute 76 | elif [[ "$1" == "--toggle-mic" ]]; then 77 | toggle_mic 78 | else 79 | echo $(get_volume)% 80 | fi 81 | else 82 | ${notify_cmd} "'pulsemixer' is not installed." 83 | fi 84 | -------------------------------------------------------------------------------- /files/theme/rofi/askpass.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Global Properties -----*****/ 6 | @import "shared/colors.rasi" 7 | @import "shared/fonts.rasi" 8 | 9 | /*****----- Main Window -----*****/ 10 | window { 11 | location: center; 12 | anchor: center; 13 | fullscreen: false; 14 | width: 350px; 15 | x-offset: 0px; 16 | y-offset: 0px; 17 | padding: 20px; 18 | border: 1px solid; 19 | border-radius: 20px; 20 | border-color: @selected; 21 | background-color: @background; 22 | cursor: "default"; 23 | children: [ "inputbar", "listview" ]; 24 | } 25 | 26 | /*****----- Inputbar -----*****/ 27 | inputbar { 28 | enabled: true; 29 | spacing: 10px; 30 | margin: 0px; 31 | padding: 0px; 32 | border: 0px solid; 33 | border-radius: 0px; 34 | border-color: @selected; 35 | background-color: transparent; 36 | text-color: @foreground; 37 | children: [ "textbox-prompt-colon", "prompt", "entry" ]; 38 | } 39 | 40 | dummy { 41 | expand: false; 42 | width: 10px; 43 | background-color: transparent; 44 | } 45 | textbox-prompt-colon { 46 | enabled: true; 47 | expand: false; 48 | str: ""; 49 | padding: 10px 12px; 50 | border-radius: 100%; 51 | background-color: @active; 52 | text-color: @background; 53 | } 54 | prompt { 55 | enabled: true; 56 | padding: 10px; 57 | border-radius: 100%; 58 | background-color: @selected; 59 | text-color: @background; 60 | } 61 | entry { 62 | enabled: true; 63 | padding: 10px 15px; 64 | border: 0px 0px 0px 0px; 65 | border-radius: 100%; 66 | border-color: @selected; 67 | background-color: @background-alt; 68 | text-color: inherit; 69 | cursor: text; 70 | placeholder: "Password"; 71 | placeholder-color: inherit; 72 | } 73 | 74 | /*****----- Listview -----*****/ 75 | listview { 76 | enabled: false; 77 | } 78 | -------------------------------------------------------------------------------- /files/scripts/rofi_powermenu: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/powermenu.rasi" 8 | CNFR="$DIR/theme/rofi/confirm.rasi" 9 | 10 | # Theme Elements 11 | prompt="`hostname` (`echo $DESKTOP_SESSION`)" 12 | mesg="Uptime : `uptime -p | sed -e 's/up //g'`" 13 | 14 | # Options 15 | layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` 16 | if [[ "$layout" == 'NO' ]]; then 17 | option_1=" Lock" 18 | option_2=" Logout" 19 | option_3=" Suspend" 20 | option_4=" Hibernate" 21 | option_5=" Reboot" 22 | option_6=" Shutdown" 23 | else 24 | option_1="" 25 | option_2="" 26 | option_3="" 27 | option_4="" 28 | option_5="" 29 | option_6="" 30 | fi 31 | cnflayout=`cat ${CNFR} | grep 'USE_ICON' | cut -d'=' -f2` 32 | if [[ "$cnflayout" == 'NO' ]]; then 33 | yes=' Yes' 34 | no=' No' 35 | else 36 | yes='' 37 | no='' 38 | fi 39 | 40 | # Rofi CMD 41 | rofi_cmd() { 42 | rofi -dmenu \ 43 | -p "$prompt" \ 44 | -mesg "$mesg" \ 45 | -markup-rows \ 46 | -theme ${RASI} 47 | } 48 | 49 | # Pass variables to rofi dmenu 50 | run_rofi() { 51 | echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd 52 | } 53 | 54 | # Confirmation CMD 55 | confirm_cmd() { 56 | rofi -dmenu \ 57 | -p 'Confirmation' \ 58 | -mesg 'Are you Sure?' \ 59 | -selected-row 1 \ 60 | -no-click-to-exit \ 61 | -theme ${CNFR} 62 | } 63 | 64 | # Ask for confirmation 65 | confirm_exit() { 66 | echo -e "$yes\n$no" | confirm_cmd 67 | } 68 | 69 | # Confirm and execute 70 | confirm_run () { 71 | selected="$(confirm_exit)" 72 | if [[ "$selected" == "$yes" ]]; then 73 | ${1} && ${2} && ${3} 74 | else 75 | exit 76 | fi 77 | } 78 | 79 | # Execute Command 80 | run_cmd() { 81 | if [[ "$1" == '--opt1' ]]; then 82 | betterlockscreen --lock 83 | elif [[ "$1" == '--opt2' ]]; then 84 | confirm_run 'berryc quit' 85 | elif [[ "$1" == '--opt3' ]]; then 86 | confirm_run 'mpc -q pause' 'pulsemixer --mute' 'betterlockscreen --suspend' 87 | elif [[ "$1" == '--opt4' ]]; then 88 | confirm_run 'systemctl hibernate' 89 | elif [[ "$1" == '--opt5' ]]; then 90 | confirm_run 'systemctl reboot' 91 | elif [[ "$1" == '--opt6' ]]; then 92 | confirm_run 'systemctl poweroff' 93 | fi 94 | } 95 | 96 | # Actions 97 | chosen="$(run_rofi)" 98 | case ${chosen} in 99 | $option_1) 100 | run_cmd --opt1 101 | ;; 102 | $option_2) 103 | run_cmd --opt2 104 | ;; 105 | $option_3) 106 | run_cmd --opt3 107 | ;; 108 | $option_4) 109 | run_cmd --opt4 110 | ;; 111 | $option_5) 112 | run_cmd --opt5 113 | ;; 114 | $option_6) 115 | run_cmd --opt6 116 | ;; 117 | esac 118 | -------------------------------------------------------------------------------- /files/scripts/rofi_music: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/music.rasi" 8 | 9 | # Theme Elements 10 | status="`mpc status`" 11 | if [[ -z "$status" ]]; then 12 | prompt='Offline' 13 | mesg="MPD is Offline" 14 | else 15 | prompt="`mpc -f "%artist%" current`" 16 | mesg="`mpc -f "%title%" current` :: `mpc status | grep "#" | awk '{print $3}'`" 17 | fi 18 | 19 | # Options 20 | layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` 21 | if [[ "$layout" == 'NO' ]]; then 22 | if [[ ${status} == *"[playing]"* ]]; then 23 | option_1=" Pause" 24 | else 25 | option_1=" Play" 26 | fi 27 | option_2=" Stop" 28 | option_3=" Previous" 29 | option_4=" Next" 30 | option_5=" Repeat" 31 | option_6=" Random" 32 | else 33 | if [[ ${status} == *"[playing]"* ]]; then 34 | option_1="" 35 | else 36 | option_1="" 37 | fi 38 | option_2="" 39 | option_3="" 40 | option_4="" 41 | option_5="" 42 | option_6="" 43 | fi 44 | 45 | # Toggle Actions 46 | active='' 47 | urgent='' 48 | # Repeat 49 | if [[ ${status} == *"repeat: on"* ]]; then 50 | active="-a 4" 51 | elif [[ ${status} == *"repeat: off"* ]]; then 52 | urgent="-u 4" 53 | else 54 | option_5=" Parsing Error" 55 | fi 56 | # Random 57 | if [[ ${status} == *"random: on"* ]]; then 58 | [ -n "$active" ] && active+=",5" || active="-a 5" 59 | elif [[ ${status} == *"random: off"* ]]; then 60 | [ -n "$urgent" ] && urgent+=",5" || urgent="-u 5" 61 | else 62 | option_6=" Parsing Error" 63 | fi 64 | 65 | # Rofi CMD 66 | rofi_cmd() { 67 | rofi -dmenu \ 68 | -p "$prompt" \ 69 | -mesg "$mesg" \ 70 | ${active} ${urgent} \ 71 | -markup-rows \ 72 | -theme ${RASI} 73 | } 74 | 75 | # Pass variables to rofi dmenu 76 | run_rofi() { 77 | echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd 78 | } 79 | 80 | # Execute Command 81 | run_cmd() { 82 | if [[ "$1" == '--opt1' ]]; then 83 | mpc -q toggle && kunst --size 60x60 --silent 84 | elif [[ "$1" == '--opt2' ]]; then 85 | mpc -q stop 86 | elif [[ "$1" == '--opt3' ]]; then 87 | mpc -q prev && kunst --size 60x60 --silent 88 | elif [[ "$1" == '--opt4' ]]; then 89 | mpc -q next && kunst --size 60x60 --silent 90 | elif [[ "$1" == '--opt5' ]]; then 91 | mpc -q repeat 92 | elif [[ "$1" == '--opt6' ]]; then 93 | mpc -q random 94 | fi 95 | } 96 | 97 | # Actions 98 | chosen="$(run_rofi)" 99 | case ${chosen} in 100 | $option_1) 101 | run_cmd --opt1 102 | ;; 103 | $option_2) 104 | run_cmd --opt2 105 | ;; 106 | $option_3) 107 | run_cmd --opt3 108 | ;; 109 | $option_4) 110 | run_cmd --opt4 111 | ;; 112 | $option_5) 113 | run_cmd --opt5 114 | ;; 115 | $option_6) 116 | run_cmd --opt6 117 | ;; 118 | esac 119 | -------------------------------------------------------------------------------- /archcraft-berry.install: -------------------------------------------------------------------------------- 1 | ## Colors ---------------------------- 2 | 3 | # Text Reset 4 | Color_Off='\033[0m' 5 | 6 | # Regular 7 | Black='\033[0;30m' Red='\033[0;31m' Green='\033[0;32m' Yellow='\033[0;33m' 8 | Blue='\033[0;34m' Purple='\033[0;35m' Cyan='\033[0;36m' White='\033[0;37m' 9 | 10 | # Bold 11 | BBlack='\033[1;30m' BRed='\033[1;31m' BGreen='\033[1;32m' BYellow='\033[1;33m' 12 | BBlue='\033[1;34m' BPurple='\033[1;35m' BCyan='\033[1;36m' BWhite='\033[1;37m' 13 | 14 | ## ----------------------------------- 15 | 16 | ## User info 17 | user_name=`echo ${SUDO_USER:-$(whoami)}` 18 | group_id=`echo ${SUDO_GID}` 19 | user_group=`cat /etc/group | grep $group_id | cut -d: -f1 | head -1` 20 | 21 | ## Packages specific 22 | config_dir="/home/${user_name}/.config" 23 | skel_dir='/etc/skel/.config' 24 | wm_config='berry' 25 | wm_name='Berry' 26 | current_config="$config_dir/$wm_config" 27 | updated_config="$config_dir/${wm_config}_pacnew_`date +%Y-%m-%d`" 28 | 29 | ## ----------------------------------- 30 | 31 | ## Copy terminal config in /root 32 | copy_term_cfg_root() { 33 | mkdir -p /root/.config/${wm_config} && cp -rf "$skel_dir/$wm_config/alacritty" $_ 34 | } 35 | 36 | ## Install Config files 37 | install_wm_config() { 38 | echo -e ${Blue}"\n[*] Copying ${BBlue}${wm_name}${Blue} config files into ${BBlue}${config_dir}" ${Color_Off} 39 | mkdir -p "$current_config" 40 | cp -rf "$skel_dir/$wm_config"/* "$current_config"/ 41 | chown -R ${user_name}:${user_group} "$current_config" 42 | 43 | if [[ -d "$current_config" ]]; then 44 | echo -e ${Green}"[*] Configuration files installed successfully!\n" ${Color_Off} 45 | else 46 | echo -e ${Red}"[!] Failed to install configuration files!\n" ${Color_Off} 47 | fi 48 | } 49 | 50 | ## Update Config files 51 | update_wm_config() { 52 | echo -e ${Blue}"\n[*] Copying latest ${BBlue}${wm_name}${Blue} config files into ${BBlue}${config_dir}" ${Color_Off} 53 | mkdir -p "$updated_config" 54 | cp -rf "$skel_dir/$wm_config"/* "$updated_config"/ 55 | chown -R ${user_name}:${user_group} "$updated_config" 56 | 57 | if [[ -d "$updated_config" ]]; then 58 | echo -e ${Green}"[*] Latest configuration files installed successfully!" ${Color_Off} 59 | echo -e ${Yellow}"[+] Latest config files are stored in : ${BYellow}${updated_config}${Yellow}" ${Color_Off} 60 | echo -e ${Purple}"[*] To use latest config files, rename ${BPurple}${updated_config}${Purple} to ${BPurple}${current_config}${Purple}\n" ${Color_Off} 61 | else 62 | echo -e ${Red}"[!] Failed to install latest configuration files!\n" ${Color_Off} 63 | fi 64 | } 65 | 66 | ## ----------------------------------- 67 | 68 | ## Main 69 | run_main() { 70 | if [[ "$user_group" != 'liveuser' ]]; then 71 | if [[ ! -d "$current_config" ]]; then 72 | install_wm_config 73 | else 74 | update_wm_config 75 | fi 76 | fi 77 | } 78 | 79 | post_install() { 80 | copy_term_cfg_root 81 | run_main 82 | } 83 | 84 | post_upgrade() { 85 | copy_term_cfg_root 86 | run_main 87 | } 88 | 89 | post_remove() { 90 | if [[ -d "$current_config" ]]; then 91 | echo -e ${Red}"\n[*] Config files for ${BYellow}${wm_name}${Red} are still available in : ${BGreen}${current_config}${Red} directory. If you want to remove them, Do it manually.\n" ${Color_Off} 92 | fi 93 | } 94 | -------------------------------------------------------------------------------- /files/scripts/rofi_screenshot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Copyright (C) 2020-2025 Aditya Shakya 4 | 5 | # Import Current Theme 6 | DIR="$HOME/.config/berry" 7 | RASI="$DIR/theme/rofi/screenshot.rasi" 8 | 9 | # Theme Elements 10 | prompt='Screenshot' 11 | mesg="Directory :: `xdg-user-dir PICTURES`/Screenshots" 12 | 13 | # Options 14 | layout=`cat ${RASI} | grep 'USE_ICON' | cut -d'=' -f2` 15 | if [[ "$layout" == 'NO' ]]; then 16 | option_1=" Capture Desktop" 17 | option_2=" Capture Area" 18 | option_3=" Capture Window" 19 | option_4=" Capture in 5s" 20 | option_5=" Capture in 10s" 21 | else 22 | option_1="" 23 | option_2="" 24 | option_3="" 25 | option_4="" 26 | option_5="" 27 | fi 28 | 29 | # Rofi CMD 30 | rofi_cmd() { 31 | rofi -dmenu \ 32 | -p "$prompt" \ 33 | -mesg "$mesg" \ 34 | -markup-rows \ 35 | -theme ${RASI} 36 | } 37 | 38 | # Pass variables to rofi dmenu 39 | run_rofi() { 40 | echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5" | rofi_cmd 41 | } 42 | 43 | # Screenshot 44 | time=`date +%Y-%m-%d-%H-%M-%S` 45 | geometry=`xrandr | grep 'current' | head -n1 | cut -d',' -f2 | tr -d '[:blank:],current'` 46 | dir="`xdg-user-dir PICTURES`/Screenshots" 47 | file="Screenshot_${time}_${geometry}.png" 48 | 49 | # Directory 50 | if [[ ! -d "$dir" ]]; then 51 | mkdir -p "$dir" 52 | fi 53 | 54 | # notify and view screenshot 55 | notify_view() { 56 | notify_cmd_shot='dunstify -u low -h string:x-dunst-stack-tag:obscreenshot -i /usr/share/archcraft/icons/dunst/picture.png' 57 | ${notify_cmd_shot} "Copied to clipboard." 58 | paplay /usr/share/sounds/freedesktop/stereo/screen-capture.oga &>/dev/null & 59 | viewnior ${dir}/"$file" 60 | if [[ -e "$dir/$file" ]]; then 61 | ${notify_cmd_shot} "Screenshot Saved." 62 | else 63 | ${notify_cmd_shot} "Screenshot Deleted." 64 | fi 65 | } 66 | 67 | # Copy screenshot to clipboard 68 | copy_shot () { 69 | tee "$file" | xclip -selection clipboard -t image/png 70 | } 71 | 72 | # countdown 73 | countdown () { 74 | for sec in `seq $1 -1 1`; do 75 | dunstify -t 1000 -h string:x-dunst-stack-tag:screenshottimer -i /usr/share/archcraft/icons/dunst/timer.png "Taking shot in : $sec" 76 | sleep 1 77 | done 78 | } 79 | 80 | # take shots 81 | shotnow () { 82 | cd ${dir} && sleep 0.5 && maim -u -f png | copy_shot 83 | notify_view 84 | } 85 | 86 | shot5 () { 87 | countdown '5' 88 | sleep 1 && cd ${dir} && maim -u -f png | copy_shot 89 | notify_view 90 | } 91 | 92 | shot10 () { 93 | countdown '10' 94 | sleep 1 && cd ${dir} && maim -u -f png | copy_shot 95 | notify_view 96 | } 97 | 98 | shotwin () { 99 | cd ${dir} && maim -u -f png -i `xdotool getactivewindow` | copy_shot 100 | notify_view 101 | } 102 | 103 | shotarea () { 104 | cd ${dir} && maim -u -f png -s -b 2 -c 0.35,0.55,0.85,0.25 -l | copy_shot 105 | notify_view 106 | } 107 | 108 | # Execute Command 109 | run_cmd() { 110 | if [[ "$1" == '--opt1' ]]; then 111 | shotnow 112 | elif [[ "$1" == '--opt2' ]]; then 113 | shotarea 114 | elif [[ "$1" == '--opt3' ]]; then 115 | shotwin 116 | elif [[ "$1" == '--opt4' ]]; then 117 | shot5 118 | elif [[ "$1" == '--opt5' ]]; then 119 | shot10 120 | fi 121 | } 122 | 123 | # Actions 124 | chosen="$(run_rofi)" 125 | case ${chosen} in 126 | $option_1) 127 | run_cmd --opt1 128 | ;; 129 | $option_2) 130 | run_cmd --opt2 131 | ;; 132 | $option_3) 133 | run_cmd --opt3 134 | ;; 135 | $option_4) 136 | run_cmd --opt4 137 | ;; 138 | $option_5) 139 | run_cmd --opt5 140 | ;; 141 | esac 142 | -------------------------------------------------------------------------------- /files/alacritty/alacritty.toml: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## 3 | ## Configuration for Alacritty, the GPU enhanced terminal emulator. 4 | ## It's a very basic and simple config file, for full configuration, Run `man 5 alacritty` 5 | 6 | ## GENERAL -------------------------------------------------------- 7 | 8 | [general] 9 | ## Import additional configuration files. 10 | import = ["~/.config/berry/alacritty/colors.toml", "~/.config/berry/alacritty/fonts.toml"] 11 | 12 | ## You can set shell.program to the path of your favorite shell, e.g. /bin/zsh. 13 | ## Entries in shell.args are passed as arguments to the shell. 14 | #shell = { program = "/bin/zsh", args = ["--login"] } 15 | 16 | ## Directory the shell is started in. When this is unset, or "None", 17 | ## the working directory of the parent process will be used. 18 | #working_directory = "None" 19 | 20 | ## Live config reload 21 | live_config_reload = true 22 | 23 | ## Offer IPC using alacritty msg 24 | ipc_socket = true 25 | 26 | ## ENVIRONMENT ---------------------------------------------------- 27 | 28 | ## All key-value pairs in the [env] section will be added as environment variables for any process spawned 29 | ## by Alacritty, including its shell. Some entries may override variables set by alacritty itself. 30 | [env] 31 | TERM = "alacritty" 32 | WINIT_X11_SCALE_FACTOR = "1.0" 33 | 34 | ## WINDOW --------------------------------------------------------- 35 | [window] 36 | position = "None" 37 | dynamic_padding = true 38 | decorations = "full" 39 | opacity = 1.0 40 | blur = false 41 | startup_mode = "Windowed" 42 | dynamic_title = true 43 | class = { instance = "Alacritty", general = "Alacritty" } 44 | decorations_theme_variant = "None" 45 | 46 | ## Number of lines/columns (not pixels) in the terminal. 47 | [window.dimensions] 48 | columns = 95 49 | lines = 24 50 | 51 | ## Blank space added around the window in pixels. 52 | [window.padding] 53 | x = 25 54 | y = 25 55 | 56 | ## SCROLLING ------------------------------------------------------ 57 | [scrolling] 58 | history = 10000 59 | multiplier = 3 60 | 61 | ## BELL ----------------------------------------------------------- 62 | [bell] 63 | animation = "Linear" 64 | duration = 20 65 | command = { program = "paplay", args = ["/usr/share/sounds/freedesktop/stereo/dialog-error.oga"] } 66 | 67 | ## SELECTION ------------------------------------------------------ 68 | [selection] 69 | save_to_clipboard = true 70 | 71 | ## CURSOR --------------------------------------------------------- 72 | [cursor] 73 | vi_mode_style = "None" 74 | blink_interval = 750 75 | blink_timeout = 5 76 | unfocused_hollow = false 77 | thickness = 0.15 78 | 79 | [cursor.style] 80 | shape = "Block" 81 | blinking = "On" 82 | 83 | ## MOUSE ---------------------------------------------------------- 84 | [mouse] 85 | hide_when_typing = false 86 | 87 | ## HINTS ---------------------------------------------------------- 88 | [[hints.enabled]] 89 | command = "xdg-open" 90 | hyperlinks = true 91 | post_processing = true 92 | persist = false 93 | mouse.enabled = true 94 | binding = { key = "U", mods = "Control|Shift" } 95 | regex = "(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)[^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩‘]+" 96 | 97 | ## DEBUG ---------------------------------------------------------- 98 | [debug] 99 | render_timer = false 100 | persistent_logging = false 101 | log_level = "Warn" 102 | renderer = "None" 103 | print_events = false 104 | highlight_damage = false 105 | prefer_egl = false 106 | -------------------------------------------------------------------------------- /files/sxhkdrc: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | ##---------- Keybindings for berry ----------## 4 | 5 | # Terminal (alacritty) 6 | super + Return 7 | bash ~/.config/berry/scripts/berry_term 8 | 9 | # Terminal (floating) 10 | super + shift + Return 11 | bash ~/.config/berry/scripts/berry_term --full 12 | 13 | # Terminal (kitty) 14 | ctrl + alt + t 15 | bash ~/.config/berry/scripts/berry_kitty 16 | 17 | ##---------- Rofi Launcher & Menus ----------## 18 | 19 | # Rofi App Launcher 20 | alt + F1 21 | bash ~/.config/berry/scripts/rofi_launcher 22 | 23 | # Rofi Runner 24 | alt + F2 25 | bash ~/.config/berry/scripts/rofi_runner 26 | 27 | # Rofi Network Menu 28 | super + n 29 | ~/.config/berry/scripts/network_menu 30 | 31 | # Rofi Menus/Applets 32 | super + {b,r,m,s,x} 33 | bash ~/.config/berry/scripts/{rofi_bluetooth,rofi_asroot,rofi_music,rofi_screenshot,rofi_powermenu} 34 | 35 | ##---------- Applications ----------## 36 | 37 | # Launch Apps 38 | super + {f,w,e} 39 | {thunar,firefox,geany} 40 | 41 | # Terminal Apps 42 | ctrl + alt + {v,r,h} 43 | alacritty --config-file ~/.config/berry/alacritty/alacritty.toml -e {vim,ranger,htop} 44 | 45 | # Lockscreen 46 | ctrl + alt + l 47 | betterlockscreen --lock 48 | 49 | # Music Player 50 | ctrl + alt + m 51 | ~/.config/berry/scripts/berry_music 52 | 53 | # Color Picker 54 | super + p 55 | ~/.config/berry/scripts/berry_colorpicker 56 | 57 | ##---------- System Keys ----------## 58 | 59 | # Take a screenshot 60 | Print 61 | ~/.config/berry/scripts/berry_screenshot --now 62 | 63 | # Take screenshot in 5 second 64 | alt + Print 65 | ~/.config/berry/scripts/berry_screenshot --in5 66 | 67 | # Take screenshot in 10 second 68 | shift + Print 69 | ~/.config/berry/scripts/berry_screenshot --in10 70 | 71 | # Take screenshot of active window 72 | ctrl + Print 73 | ~/.config/berry/scripts/berry_screenshot --win 74 | 75 | # Take screenshot of area 76 | super + Print 77 | ~/.config/berry/scripts/berry_screenshot --area 78 | 79 | # Brighness control 80 | XF86MonBrightness{Up,Down} 81 | ~/.config/berry/scripts/berry_brightness{ --inc, --dec} 82 | 83 | # Volume control 84 | XF86Audio{RaiseVolume,LowerVolume} 85 | ~/.config/berry/scripts/berry_volume{ --inc, --dec} 86 | 87 | XF86AudioMute 88 | ~/.config/berry/scripts/berry_volume --toggle 89 | 90 | XF86AudioMicMute 91 | ~/.config/berry/scripts/berry_volume --toggle-mic 92 | 93 | # Music control 94 | XF86Audio{Next,Prev,Play,Stop} 95 | mpc {next,prev,toggle,stop} 96 | 97 | # Reload sxhkd configuration file 98 | super + Escape 99 | pkill -USR1 -x sxhkd 100 | 101 | ##---------- Berry Hotkeys --------## 102 | 103 | super + shift + {Left, Down, Up, Right} 104 | berryc window_resize {-50 0, 0 50, 0 -50, 50 0} 105 | 106 | super + ctrl + {Left, Down, Up, Right} 107 | berryc window_move {-50 0, 0 50, 0 -50, 50 0} 108 | 109 | super + Left 110 | berryc snap_left 111 | 112 | super + Right 113 | berryc snap_right 114 | 115 | super + Up 116 | berryc window_monocle 117 | 118 | super + Down 119 | berryc window_resize_absolute 1000 650 && berryc window_center 120 | 121 | super + {1-9} 122 | berryc switch_workspace {0-9} 123 | 124 | super + shift + {1-9} 125 | berryc send_to_workspace {0-9} 126 | 127 | super + space 128 | berryc fullscreen 129 | 130 | super + t 131 | berryc toggle_decorations 132 | 133 | super + Tab 134 | berryc cycle_focus 135 | 136 | alt + Tab 137 | berryc cycle_focus 138 | 139 | super + c 140 | berryc window_center 141 | 142 | super + q 143 | berryc window_close 144 | 145 | super + shift + c 146 | berryc window_close 147 | 148 | super + shift + q 149 | berryc quit 150 | 151 | # Mouse Buttons 152 | ~button1 153 | berryc pointer_focus 154 | -------------------------------------------------------------------------------- /files/theme/rofi/music.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | show-icons: false; 8 | } 9 | 10 | /*****----- Global Properties -----*****/ 11 | @import "shared/colors.rasi" 12 | @import "shared/fonts.rasi" 13 | 14 | /* 15 | USE_ICON=YES 16 | */ 17 | 18 | /*****----- Main Window -----*****/ 19 | window { 20 | transparency: "real"; 21 | location: east; 22 | anchor: east; 23 | fullscreen: false; 24 | width: 110px; 25 | x-offset: -20px; 26 | y-offset: 0px; 27 | margin: 0px; 28 | padding: 0px; 29 | border: 1px solid; 30 | border-radius: 20px; 31 | border-color: @selected; 32 | cursor: "default"; 33 | background-color: @background; 34 | } 35 | 36 | /*****----- Main Box -----*****/ 37 | mainbox { 38 | enabled: true; 39 | spacing: 10px; 40 | margin: 0px; 41 | padding: 20px; 42 | background-color: transparent; 43 | children: [ "listview" ]; 44 | } 45 | 46 | /*****----- Inputbar -----*****/ 47 | inputbar { 48 | enabled: true; 49 | spacing: 10px; 50 | padding: 0px; 51 | border: 0px; 52 | border-radius: 0px; 53 | border-color: @selected; 54 | background-color: transparent; 55 | text-color: @foreground; 56 | children: [ "textbox-prompt-colon", "prompt"]; 57 | } 58 | 59 | textbox-prompt-colon { 60 | enabled: true; 61 | expand: false; 62 | str: ""; 63 | padding: 6px 8px; 64 | border-radius: 12px; 65 | background-color: @selected; 66 | text-color: @background; 67 | } 68 | prompt { 69 | enabled: true; 70 | padding: 6px 10px; 71 | border-radius: 12px; 72 | background-color: @active; 73 | text-color: @background; 74 | } 75 | 76 | /*****----- Message -----*****/ 77 | message { 78 | enabled: true; 79 | margin: 0px; 80 | padding: 6px 10px; 81 | border: 0px solid; 82 | border-radius: 12px; 83 | border-color: @selected; 84 | background-color: @background-alt; 85 | text-color: @foreground; 86 | } 87 | textbox { 88 | background-color: inherit; 89 | text-color: inherit; 90 | vertical-align: 0.5; 91 | horizontal-align: 0.0; 92 | } 93 | 94 | /*****----- Listview -----*****/ 95 | listview { 96 | enabled: true; 97 | columns: 1; 98 | lines: 6; 99 | cycle: true; 100 | scrollbar: false; 101 | layout: vertical; 102 | 103 | spacing: 10px; 104 | background-color: transparent; 105 | cursor: "default"; 106 | } 107 | 108 | /*****----- Elements -----*****/ 109 | element { 110 | enabled: true; 111 | padding: 20px 10px; 112 | border: 0px solid; 113 | border-radius: 100%; 114 | border-color: @selected; 115 | background-color: transparent; 116 | text-color: @foreground; 117 | cursor: pointer; 118 | } 119 | element-text { 120 | font: "feather 20"; 121 | background-color: transparent; 122 | text-color: inherit; 123 | cursor: inherit; 124 | vertical-align: 0; 125 | horizontal-align: 0.5; 126 | } 127 | 128 | element normal.normal, 129 | element alternate.normal { 130 | border: 0px solid; 131 | border-radius: 100%; 132 | border-color: @selected; 133 | background-color: var(background-alt); 134 | text-color: var(foreground); 135 | } 136 | element normal.urgent, 137 | element alternate.urgent, 138 | element selected.active { 139 | background-color: var(urgent); 140 | text-color: var(background); 141 | } 142 | element normal.active, 143 | element alternate.active, 144 | element selected.urgent { 145 | background-color: var(active); 146 | text-color: var(background); 147 | } 148 | element selected.normal { 149 | background-color: var(selected); 150 | text-color: var(background); 151 | } 152 | -------------------------------------------------------------------------------- /files/theme/rofi/asroot.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | show-icons: false; 8 | } 9 | 10 | /*****----- Global Properties -----*****/ 11 | @import "shared/colors.rasi" 12 | @import "shared/fonts.rasi" 13 | 14 | /* 15 | USE_ICON=YES 16 | */ 17 | 18 | /*****----- Main Window -----*****/ 19 | window { 20 | transparency: "real"; 21 | location: east; 22 | anchor: east; 23 | fullscreen: false; 24 | width: 110px; 25 | x-offset: -20px; 26 | y-offset: 0px; 27 | margin: 0px; 28 | padding: 0px; 29 | border: 1px solid; 30 | border-radius: 20px; 31 | border-color: @selected; 32 | cursor: "default"; 33 | background-color: @background; 34 | } 35 | 36 | /*****----- Main Box -----*****/ 37 | mainbox { 38 | enabled: true; 39 | spacing: 10px; 40 | margin: 0px; 41 | padding: 20px; 42 | background-color: transparent; 43 | children: [ "listview" ]; 44 | } 45 | 46 | /*****----- Inputbar -----*****/ 47 | inputbar { 48 | enabled: true; 49 | spacing: 10px; 50 | padding: 0px; 51 | border: 0px; 52 | border-radius: 0px; 53 | border-color: @selected; 54 | background-color: transparent; 55 | text-color: @foreground; 56 | children: [ "textbox-prompt-colon", "prompt"]; 57 | } 58 | 59 | textbox-prompt-colon { 60 | enabled: true; 61 | expand: false; 62 | str: ""; 63 | padding: 6px 10px; 64 | border-radius: 12px; 65 | background-color: @selected; 66 | text-color: @background; 67 | } 68 | prompt { 69 | enabled: true; 70 | padding: 6px 10px; 71 | border-radius: 12px; 72 | background-color: @active; 73 | text-color: @background; 74 | } 75 | 76 | /*****----- Message -----*****/ 77 | message { 78 | enabled: true; 79 | margin: 0px; 80 | padding: 6px 10px; 81 | border: 0px solid; 82 | border-radius: 12px; 83 | border-color: @selected; 84 | background-color: @background-alt; 85 | text-color: @foreground; 86 | } 87 | textbox { 88 | background-color: inherit; 89 | text-color: inherit; 90 | vertical-align: 0.5; 91 | horizontal-align: 0.0; 92 | } 93 | 94 | /*****----- Listview -----*****/ 95 | listview { 96 | enabled: true; 97 | columns: 1; 98 | lines: 5; 99 | cycle: true; 100 | scrollbar: false; 101 | layout: vertical; 102 | 103 | spacing: 10px; 104 | background-color: transparent; 105 | cursor: "default"; 106 | } 107 | 108 | /*****----- Elements -----*****/ 109 | element { 110 | enabled: true; 111 | padding: 20px 10px; 112 | border: 0px solid; 113 | border-radius: 100%; 114 | border-color: @selected; 115 | background-color: transparent; 116 | text-color: @foreground; 117 | cursor: pointer; 118 | } 119 | element-text { 120 | font: "feather 20"; 121 | background-color: transparent; 122 | text-color: inherit; 123 | cursor: inherit; 124 | vertical-align: 0; 125 | horizontal-align: 0.5; 126 | } 127 | 128 | element normal.normal, 129 | element alternate.normal { 130 | border: 0px solid; 131 | border-radius: 100%; 132 | border-color: @selected; 133 | background-color: var(background-alt); 134 | text-color: var(foreground); 135 | } 136 | element normal.urgent, 137 | element alternate.urgent, 138 | element selected.active { 139 | background-color: var(urgent); 140 | text-color: var(background); 141 | } 142 | element normal.active, 143 | element alternate.active, 144 | element selected.urgent { 145 | background-color: var(active); 146 | text-color: var(background); 147 | } 148 | element selected.normal { 149 | background-color: var(selected); 150 | text-color: var(background); 151 | } 152 | -------------------------------------------------------------------------------- /files/theme/rofi/confirm.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | show-icons: false; 8 | } 9 | 10 | /*****----- Global Properties -----*****/ 11 | @import "shared/colors.rasi" 12 | @import "shared/fonts.rasi" 13 | 14 | /* 15 | USE_ICON=YES 16 | */ 17 | 18 | /*****----- Main Window -----*****/ 19 | window { 20 | transparency: "real"; 21 | location: east; 22 | anchor: east; 23 | fullscreen: false; 24 | width: 110px; 25 | x-offset: -20px; 26 | y-offset: 0px; 27 | margin: 0px; 28 | padding: 0px; 29 | border: 1px solid; 30 | border-radius: 20px; 31 | border-color: @selected; 32 | cursor: "default"; 33 | background-color: @background; 34 | } 35 | 36 | /*****----- Main Box -----*****/ 37 | mainbox { 38 | enabled: true; 39 | spacing: 10px; 40 | margin: 0px; 41 | padding: 20px; 42 | background-color: transparent; 43 | children: [ "listview" ]; 44 | } 45 | 46 | /*****----- Inputbar -----*****/ 47 | inputbar { 48 | enabled: true; 49 | spacing: 10px; 50 | padding: 0px; 51 | border: 0px; 52 | border-radius: 0px; 53 | border-color: @selected; 54 | background-color: transparent; 55 | text-color: @foreground; 56 | children: [ "textbox-prompt-colon", "prompt"]; 57 | } 58 | 59 | textbox-prompt-colon { 60 | enabled: true; 61 | expand: false; 62 | str: ""; 63 | padding: 6px 8px; 64 | border-radius: 12px; 65 | background-color: @selected; 66 | text-color: @background; 67 | } 68 | prompt { 69 | enabled: true; 70 | padding: 6px 10px; 71 | border-radius: 12px; 72 | background-color: @active; 73 | text-color: @background; 74 | } 75 | 76 | /*****----- Message -----*****/ 77 | message { 78 | enabled: true; 79 | margin: 0px; 80 | padding: 6px 10px; 81 | border: 0px solid; 82 | border-radius: 12px; 83 | border-color: @selected; 84 | background-color: @background-alt; 85 | text-color: @foreground; 86 | } 87 | textbox { 88 | background-color: inherit; 89 | text-color: inherit; 90 | vertical-align: 0.5; 91 | horizontal-align: 0.0; 92 | } 93 | 94 | /*****----- Listview -----*****/ 95 | listview { 96 | enabled: true; 97 | columns: 1; 98 | lines: 2; 99 | cycle: true; 100 | scrollbar: false; 101 | layout: vertical; 102 | 103 | spacing: 10px; 104 | background-color: transparent; 105 | cursor: "default"; 106 | } 107 | 108 | /*****----- Elements -----*****/ 109 | element { 110 | enabled: true; 111 | padding: 20px 10px; 112 | border: 0px solid; 113 | border-radius: 100%; 114 | border-color: @selected; 115 | background-color: transparent; 116 | text-color: @foreground; 117 | cursor: pointer; 118 | } 119 | element-text { 120 | font: "feather 20"; 121 | background-color: transparent; 122 | text-color: inherit; 123 | cursor: inherit; 124 | vertical-align: 0; 125 | horizontal-align: 0.5; 126 | } 127 | 128 | element normal.normal, 129 | element alternate.normal { 130 | border: 0px solid; 131 | border-radius: 100%; 132 | border-color: @selected; 133 | background-color: var(background-alt); 134 | text-color: var(foreground); 135 | } 136 | element normal.urgent, 137 | element alternate.urgent, 138 | element selected.active { 139 | background-color: var(urgent); 140 | text-color: var(background); 141 | } 142 | element normal.active, 143 | element alternate.active, 144 | element selected.urgent { 145 | background-color: var(active); 146 | text-color: var(background); 147 | } 148 | element selected.normal { 149 | background-color: var(selected); 150 | text-color: var(background); 151 | } 152 | -------------------------------------------------------------------------------- /files/theme/rofi/powermenu.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | show-icons: false; 8 | } 9 | 10 | /*****----- Global Properties -----*****/ 11 | @import "shared/colors.rasi" 12 | @import "shared/fonts.rasi" 13 | 14 | /* 15 | USE_ICON=YES 16 | */ 17 | 18 | /*****----- Main Window -----*****/ 19 | window { 20 | transparency: "real"; 21 | location: east; 22 | anchor: east; 23 | fullscreen: false; 24 | width: 110px; 25 | x-offset: -20px; 26 | y-offset: 0px; 27 | margin: 0px; 28 | padding: 0px; 29 | border: 1px solid; 30 | border-radius: 20px; 31 | border-color: @selected; 32 | cursor: "default"; 33 | background-color: @background; 34 | } 35 | 36 | /*****----- Main Box -----*****/ 37 | mainbox { 38 | enabled: true; 39 | spacing: 10px; 40 | margin: 0px; 41 | padding: 20px; 42 | background-color: transparent; 43 | children: [ "listview" ]; 44 | } 45 | 46 | /*****----- Inputbar -----*****/ 47 | inputbar { 48 | enabled: true; 49 | spacing: 10px; 50 | padding: 0px; 51 | border: 0px; 52 | border-radius: 0px; 53 | border-color: @selected; 54 | background-color: transparent; 55 | text-color: @foreground; 56 | children: [ "textbox-prompt-colon", "prompt"]; 57 | } 58 | 59 | textbox-prompt-colon { 60 | enabled: true; 61 | expand: false; 62 | str: ""; 63 | padding: 6px 8px; 64 | border-radius: 12px; 65 | background-color: @selected; 66 | text-color: @background; 67 | } 68 | prompt { 69 | enabled: true; 70 | padding: 6px 10px; 71 | border-radius: 12px; 72 | background-color: @active; 73 | text-color: @background; 74 | } 75 | 76 | /*****----- Message -----*****/ 77 | message { 78 | enabled: true; 79 | margin: 0px; 80 | padding: 6px 10px; 81 | border: 0px solid; 82 | border-radius: 12px; 83 | border-color: @selected; 84 | background-color: @background-alt; 85 | text-color: @foreground; 86 | } 87 | textbox { 88 | background-color: inherit; 89 | text-color: inherit; 90 | vertical-align: 0.5; 91 | horizontal-align: 0.0; 92 | } 93 | 94 | /*****----- Listview -----*****/ 95 | listview { 96 | enabled: true; 97 | columns: 1; 98 | lines: 6; 99 | cycle: true; 100 | scrollbar: false; 101 | layout: vertical; 102 | 103 | spacing: 10px; 104 | background-color: transparent; 105 | cursor: "default"; 106 | } 107 | 108 | /*****----- Elements -----*****/ 109 | element { 110 | enabled: true; 111 | padding: 20px 10px; 112 | border: 0px solid; 113 | border-radius: 100%; 114 | border-color: @selected; 115 | background-color: transparent; 116 | text-color: @foreground; 117 | cursor: pointer; 118 | } 119 | element-text { 120 | font: "feather 20"; 121 | background-color: transparent; 122 | text-color: inherit; 123 | cursor: inherit; 124 | vertical-align: 0; 125 | horizontal-align: 0.5; 126 | } 127 | 128 | element normal.normal, 129 | element alternate.normal { 130 | border: 0px solid; 131 | border-radius: 100%; 132 | border-color: @selected; 133 | background-color: var(background-alt); 134 | text-color: var(foreground); 135 | } 136 | element normal.urgent, 137 | element alternate.urgent, 138 | element selected.active { 139 | background-color: var(urgent); 140 | text-color: var(background); 141 | } 142 | element normal.active, 143 | element alternate.active, 144 | element selected.urgent { 145 | background-color: var(active); 146 | text-color: var(background); 147 | } 148 | element selected.normal { 149 | background-color: var(selected); 150 | text-color: var(background); 151 | } 152 | -------------------------------------------------------------------------------- /files/theme/rofi/screenshot.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | show-icons: false; 8 | } 9 | 10 | /*****----- Global Properties -----*****/ 11 | @import "shared/colors.rasi" 12 | @import "shared/fonts.rasi" 13 | 14 | /* 15 | USE_ICON=YES 16 | */ 17 | 18 | /*****----- Main Window -----*****/ 19 | window { 20 | transparency: "real"; 21 | location: east; 22 | anchor: east; 23 | fullscreen: false; 24 | width: 110px; 25 | x-offset: -20px; 26 | y-offset: 0px; 27 | margin: 0px; 28 | padding: 0px; 29 | border: 1px solid; 30 | border-radius: 20px; 31 | border-color: @selected; 32 | cursor: "default"; 33 | background-color: @background; 34 | } 35 | 36 | /*****----- Main Box -----*****/ 37 | mainbox { 38 | enabled: true; 39 | spacing: 10px; 40 | margin: 0px; 41 | padding: 20px; 42 | background-color: transparent; 43 | children: [ "listview" ]; 44 | } 45 | 46 | /*****----- Inputbar -----*****/ 47 | inputbar { 48 | enabled: true; 49 | spacing: 10px; 50 | padding: 0px; 51 | border: 0px; 52 | border-radius: 0px; 53 | border-color: @selected; 54 | background-color: transparent; 55 | text-color: @foreground; 56 | children: [ "textbox-prompt-colon", "prompt"]; 57 | } 58 | 59 | textbox-prompt-colon { 60 | enabled: true; 61 | expand: false; 62 | str: ""; 63 | padding: 6px 8px; 64 | border-radius: 12px; 65 | background-color: @selected; 66 | text-color: @background; 67 | } 68 | prompt { 69 | enabled: true; 70 | padding: 6px 10px; 71 | border-radius: 12px; 72 | background-color: @active; 73 | text-color: @background; 74 | } 75 | 76 | /*****----- Message -----*****/ 77 | message { 78 | enabled: true; 79 | margin: 0px; 80 | padding: 6px 10px; 81 | border: 0px solid; 82 | border-radius: 12px; 83 | border-color: @selected; 84 | background-color: @background-alt; 85 | text-color: @foreground; 86 | } 87 | textbox { 88 | background-color: inherit; 89 | text-color: inherit; 90 | vertical-align: 0.5; 91 | horizontal-align: 0.0; 92 | } 93 | 94 | /*****----- Listview -----*****/ 95 | listview { 96 | enabled: true; 97 | columns: 1; 98 | lines: 5; 99 | cycle: true; 100 | scrollbar: false; 101 | layout: vertical; 102 | 103 | spacing: 10px; 104 | background-color: transparent; 105 | cursor: "default"; 106 | } 107 | 108 | /*****----- Elements -----*****/ 109 | element { 110 | enabled: true; 111 | padding: 20px 10px; 112 | border: 0px solid; 113 | border-radius: 100%; 114 | border-color: @selected; 115 | background-color: transparent; 116 | text-color: @foreground; 117 | cursor: pointer; 118 | } 119 | element-text { 120 | font: "feather 20"; 121 | background-color: transparent; 122 | text-color: inherit; 123 | cursor: inherit; 124 | vertical-align: 0; 125 | horizontal-align: 0.5; 126 | } 127 | 128 | element normal.normal, 129 | element alternate.normal { 130 | border: 0px solid; 131 | border-radius: 100%; 132 | border-color: @selected; 133 | background-color: var(background-alt); 134 | text-color: var(foreground); 135 | } 136 | element normal.urgent, 137 | element alternate.urgent, 138 | element selected.active { 139 | background-color: var(urgent); 140 | text-color: var(background); 141 | } 142 | element normal.active, 143 | element alternate.active, 144 | element selected.urgent { 145 | background-color: var(active); 146 | text-color: var(background); 147 | } 148 | element selected.normal { 149 | background-color: var(selected); 150 | text-color: var(background); 151 | } 152 | -------------------------------------------------------------------------------- /files/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## 3 | ## Configuration for Kitty, The fast, feature rich terminal emulator. 4 | ## For full configuration, Run `man kitty.conf` 5 | 6 | # vim:fileencoding=utf-8:foldmethod=marker 7 | 8 | ## ---------------------------------------------------------------- 9 | 10 | # include colorscheme 11 | include ~/.config/berry/kitty/colors.conf 12 | 13 | # include fonts 14 | include ~/.config/berry/kitty/fonts.conf 15 | 16 | ## ---------------------------------------------------------------- 17 | 18 | #: Cursor customization {{{ 19 | 20 | # cursor #cccccc 21 | # cursor_text_color #111111 22 | cursor_shape block 23 | cursor_beam_thickness 6 24 | # cursor_underline_thickness 2.0 25 | # cursor_blink_interval -1 26 | # cursor_stop_blinking_after 15.0 27 | 28 | #: }}} 29 | 30 | ## ---------------------------------------------------------------- 31 | 32 | #: Scrollback {{{ 33 | 34 | scrollback_lines 2000 35 | # scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER 36 | # scrollback_pager_history_size 0 37 | # scrollback_fill_enlarged_window no 38 | # wheel_scroll_multiplier 5.0 39 | # wheel_scroll_min_lines 1 40 | # touch_scroll_multiplier 1.0 41 | 42 | #: }}} 43 | 44 | ## ---------------------------------------------------------------- 45 | 46 | #: Mouse {{{ 47 | 48 | # mouse_hide_wait 3.0 49 | # url_color #0087bd 50 | url_style straight 51 | # open_url_with default 52 | # url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh 53 | # detect_urls yes 54 | # url_excluded_characters 55 | # show_hyperlink_targets no 56 | # underline_hyperlinks hover 57 | copy_on_select clipboard 58 | # paste_actions quote-urls-at-prompt,confirm 59 | # strip_trailing_spaces never 60 | # select_by_word_characters @-./_~?&=%+# 61 | # select_by_word_characters_forward 62 | # click_interval -1.0 63 | # focus_follows_mouse no 64 | # pointer_shape_when_grabbed arrow 65 | # default_pointer_shape beam 66 | # pointer_shape_when_dragging beam 67 | 68 | #: Mouse actions {{{ 69 | 70 | # clear_all_mouse_actions no 71 | # mouse_map left click ungrabbed mouse_handle_click selection link prompt 72 | # mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt 73 | # mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link 74 | # mouse_map ctrl+shift+left press grabbed discard_event 75 | # mouse_map middle release ungrabbed paste_from_selection 76 | # mouse_map left press ungrabbed mouse_selection normal 77 | # mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle 78 | # mouse_map left doublepress ungrabbed mouse_selection word 79 | # mouse_map left triplepress ungrabbed mouse_selection line 80 | # mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point 81 | # mouse_map right press ungrabbed mouse_selection extend 82 | # mouse_map shift+middle release ungrabbed,grabbed paste_selection 83 | # mouse_map shift+middle press grabbed discard_event 84 | # mouse_map shift+left press ungrabbed,grabbed mouse_selection normal 85 | # mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle 86 | # mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word 87 | # mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line 88 | # mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point 89 | # mouse_map shift+right press ungrabbed,grabbed mouse_selection extend 90 | # mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output 91 | 92 | #: }}} 93 | 94 | #: }}} 95 | 96 | ## ---------------------------------------------------------------- 97 | 98 | #: Performance tuning {{{ 99 | 100 | # repaint_delay 10 101 | # input_delay 3 102 | # sync_to_monitor yes 103 | 104 | #: }}} 105 | 106 | ## ---------------------------------------------------------------- 107 | 108 | #: Terminal bell {{{ 109 | 110 | # enable_audio_bell yes 111 | # visual_bell_duration 0.0 112 | # visual_bell_color none 113 | # window_alert_on_bell yes 114 | # bell_on_tab "🔔 " 115 | # command_on_bell none 116 | # bell_path none 117 | # linux_bell_theme __custom 118 | 119 | #: }}} 120 | 121 | ## ---------------------------------------------------------------- 122 | 123 | #: Window layout {{{ 124 | 125 | remember_window_size no 126 | initial_window_width 810 127 | initial_window_height 480 128 | # enabled_layouts * 129 | # window_resize_step_cells 2 130 | # window_resize_step_lines 2 131 | # window_border_width 0.5pt 132 | # draw_minimal_borders yes 133 | # window_margin_width 0 134 | # single_window_margin_width -1 135 | window_padding_width 25 136 | # single_window_padding_width -1 137 | # placement_strategy center 138 | # active_border_color #00ff00 139 | # inactive_border_color #cccccc 140 | # bell_border_color #ff5a00 141 | # inactive_text_alpha 1.0 142 | # hide_window_decorations no 143 | # window_logo_path none 144 | # window_logo_position bottom-right 145 | # window_logo_alpha 0.5 146 | # resize_debounce_time 0.1 0.5 147 | # resize_in_steps no 148 | # visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ 149 | # confirm_os_window_close -1 150 | 151 | #: }}} 152 | 153 | ## ---------------------------------------------------------------- 154 | 155 | #: Tab bar {{{ 156 | 157 | # tab_bar_edge bottom 158 | # tab_bar_margin_width 0.0 159 | # tab_bar_margin_height 0.0 0.0 160 | # tab_bar_style fade 161 | # tab_bar_align left 162 | # tab_bar_min_tabs 2 163 | # tab_switch_strategy previous 164 | # tab_fade 0.25 0.5 0.75 1 165 | # tab_separator " ┇" 166 | # tab_powerline_style angled 167 | # tab_activity_symbol none 168 | # tab_title_max_length 0 169 | # tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}" 170 | # active_tab_title_template none 171 | # active_tab_foreground #000 172 | # active_tab_background #eee 173 | # active_tab_font_style bold-italic 174 | # inactive_tab_foreground #444 175 | # inactive_tab_background #999 176 | # inactive_tab_font_style normal 177 | # tab_bar_background none 178 | # tab_bar_margin_color none 179 | 180 | #: }}} 181 | 182 | ## ---------------------------------------------------------------- 183 | 184 | #: Color scheme {{{ 185 | 186 | # foreground #dddddd 187 | # background #000000 188 | # background_opacity 1.0 189 | # background_blur 0 190 | # background_image none 191 | # background_image_layout tiled 192 | # background_image_linear no 193 | # dynamic_background_opacity no 194 | # background_tint 0.0 195 | # background_tint_gaps 1.0 196 | # dim_opacity 0.4 197 | # selection_foreground #000000 198 | # selection_background #fffacd 199 | 200 | #: The color table {{{ 201 | 202 | # color0 #000000 203 | # color8 #767676 204 | 205 | #: black 206 | 207 | # color1 #cc0403 208 | # color9 #f2201f 209 | 210 | #: red 211 | 212 | # color2 #19cb00 213 | # color10 #23fd00 214 | 215 | #: green 216 | 217 | # color3 #cecb00 218 | # color11 #fffd00 219 | 220 | #: yellow 221 | 222 | # color4 #0d73cc 223 | # color12 #1a8fff 224 | 225 | #: blue 226 | 227 | # color5 #cb1ed1 228 | # color13 #fd28ff 229 | 230 | #: magenta 231 | 232 | # color6 #0dcdcd 233 | # color14 #14ffff 234 | 235 | #: cyan 236 | 237 | # color7 #dddddd 238 | # color15 #ffffff 239 | 240 | #: white 241 | 242 | # mark1_foreground black 243 | # mark1_background #98d3cb 244 | # mark2_foreground black 245 | # mark2_background #f2dcd3 246 | # mark3_foreground black 247 | # mark3_background #f274bc 248 | 249 | #: }}} 250 | 251 | #: }}} 252 | 253 | ## ---------------------------------------------------------------- 254 | 255 | #: Advanced {{{ 256 | 257 | # shell . 258 | # editor . 259 | # close_on_child_death no 260 | # remote_control_password 261 | allow_remote_control yes 262 | # listen_on none 263 | # env VAR1=a 264 | # env VAR2=${HOME}/${VAR1}/b 265 | # watcher /path/to/python/file 266 | # exe_search_path /path/to/bin 267 | # update_check_interval 24 268 | # startup_session none 269 | # clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask 270 | # clipboard_max_size 512 271 | # file_transfer_confirmation_bypass 272 | # allow_hyperlinks yes 273 | # shell_integration enabled 274 | # allow_cloning ask 275 | # clone_source_strategies venv,conda,env_var,path 276 | # notify_on_cmd_finish never 277 | # term xterm-kitty 278 | # forward_stdio no 279 | # menu_map global "Actions::Launch something special" launch --hold --type=os-window sh -c "echo hello world" 280 | 281 | #: }}} 282 | 283 | ## ---------------------------------------------------------------- 284 | 285 | #: OS specific tweaks {{{ 286 | 287 | # wayland_titlebar_color system 288 | # macos_titlebar_color system 289 | # macos_option_as_alt no 290 | # macos_hide_from_tasks no 291 | # macos_quit_when_last_window_closed no 292 | # macos_window_resizable yes 293 | # macos_thicken_font 0 294 | # macos_traditional_fullscreen no 295 | # macos_show_window_title_in all 296 | # macos_menubar_title_max_length 0 297 | # macos_custom_beam_cursor no 298 | # macos_colorspace srgb 299 | # linux_display_server auto 300 | 301 | #: }}} 302 | -------------------------------------------------------------------------------- /files/scripts/rofi_bluetooth: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # __ _ _ _ _ _ _ 3 | # _ __ ___ / _(_) | |__ | |_ _ ___| |_ ___ ___ | |_| |__ 4 | # | '__/ _ \| |_| |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __| '_ \ 5 | # | | | (_) | _| |_____| |_) | | |_| | __/ || (_) | (_) | |_| | | | 6 | # |_| \___/|_| |_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__|_| |_| 7 | # 8 | # Author: Nick Clyde (clydedroid) 9 | # 10 | # A script that generates a rofi menu that uses bluetoothctl to 11 | # connect to bluetooth devices and display status info. 12 | # 13 | # Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu) 14 | # Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl) 15 | # 16 | # Depends on: 17 | # Arch repositories: rofi, bluez-utils (contains bluetoothctl) 18 | 19 | # Import Current Theme 20 | DIR="$HOME/.config/berry" 21 | RASI="$DIR/theme/rofi/bluetooth.rasi" 22 | 23 | # Constants 24 | divider="---------" 25 | goback="Back" 26 | 27 | # Checks if bluetooth controller is powered on 28 | power_on() { 29 | if bluetoothctl show | grep -q "Powered: yes"; then 30 | return 0 31 | else 32 | return 1 33 | fi 34 | } 35 | 36 | # Toggles power state 37 | toggle_power() { 38 | if power_on; then 39 | bluetoothctl power off 40 | show_menu 41 | else 42 | if rfkill list bluetooth | grep -q 'blocked: yes'; then 43 | rfkill unblock bluetooth && sleep 3 44 | fi 45 | bluetoothctl power on 46 | show_menu 47 | fi 48 | } 49 | 50 | # Checks if controller is scanning for new devices 51 | scan_on() { 52 | if bluetoothctl show | grep -q "Discovering: yes"; then 53 | echo "Scan: on" 54 | return 0 55 | else 56 | echo "Scan: off" 57 | return 1 58 | fi 59 | } 60 | 61 | # Toggles scanning state 62 | toggle_scan() { 63 | if scan_on; then 64 | kill $(pgrep -f "bluetoothctl scan on") 65 | bluetoothctl scan off 66 | show_menu 67 | else 68 | bluetoothctl scan on & 69 | echo "Scanning..." 70 | sleep 5 71 | show_menu 72 | fi 73 | } 74 | 75 | # Checks if controller is able to pair to devices 76 | pairable_on() { 77 | if bluetoothctl show | grep -q "Pairable: yes"; then 78 | echo "Pairable: on" 79 | return 0 80 | else 81 | echo "Pairable: off" 82 | return 1 83 | fi 84 | } 85 | 86 | # Toggles pairable state 87 | toggle_pairable() { 88 | if pairable_on; then 89 | bluetoothctl pairable off 90 | show_menu 91 | else 92 | bluetoothctl pairable on 93 | show_menu 94 | fi 95 | } 96 | 97 | # Checks if controller is discoverable by other devices 98 | discoverable_on() { 99 | if bluetoothctl show | grep -q "Discoverable: yes"; then 100 | echo "Discoverable: on" 101 | return 0 102 | else 103 | echo "Discoverable: off" 104 | return 1 105 | fi 106 | } 107 | 108 | # Toggles discoverable state 109 | toggle_discoverable() { 110 | if discoverable_on; then 111 | bluetoothctl discoverable off 112 | show_menu 113 | else 114 | bluetoothctl discoverable on 115 | show_menu 116 | fi 117 | } 118 | 119 | # Checks if a device is connected 120 | device_connected() { 121 | device_info=$(bluetoothctl info "$1") 122 | if echo "$device_info" | grep -q "Connected: yes"; then 123 | return 0 124 | else 125 | return 1 126 | fi 127 | } 128 | 129 | # Toggles device connection 130 | toggle_connection() { 131 | if device_connected "$1"; then 132 | bluetoothctl disconnect "$1" 133 | device_menu "$device" 134 | else 135 | bluetoothctl connect "$1" 136 | device_menu "$device" 137 | fi 138 | } 139 | 140 | # Checks if a device is paired 141 | device_paired() { 142 | device_info=$(bluetoothctl info "$1") 143 | if echo "$device_info" | grep -q "Paired: yes"; then 144 | echo "Paired: yes" 145 | return 0 146 | else 147 | echo "Paired: no" 148 | return 1 149 | fi 150 | } 151 | 152 | # Toggles device paired state 153 | toggle_paired() { 154 | if device_paired "$1"; then 155 | bluetoothctl remove "$1" 156 | device_menu "$device" 157 | else 158 | bluetoothctl pair "$1" 159 | device_menu "$device" 160 | fi 161 | } 162 | 163 | # Checks if a device is trusted 164 | device_trusted() { 165 | device_info=$(bluetoothctl info "$1") 166 | if echo "$device_info" | grep -q "Trusted: yes"; then 167 | echo "Trusted: yes" 168 | return 0 169 | else 170 | echo "Trusted: no" 171 | return 1 172 | fi 173 | } 174 | 175 | # Toggles device connection 176 | toggle_trust() { 177 | if device_trusted "$1"; then 178 | bluetoothctl untrust "$1" 179 | device_menu "$device" 180 | else 181 | bluetoothctl trust "$1" 182 | device_menu "$device" 183 | fi 184 | } 185 | 186 | # Prints a short string with the current bluetooth status 187 | # Useful for status bars like polybar, etc. 188 | print_status() { 189 | if power_on; then 190 | printf '󰂯' 191 | 192 | paired_devices_cmd="devices Paired" 193 | # Check if an outdated version of bluetoothctl is used to preserve backwards compatibility 194 | if (( $(echo "$(bluetoothctl version | cut -d ' ' -f 2) < 5.65" | bc -l) )); then 195 | paired_devices_cmd="paired-devices" 196 | fi 197 | 198 | mapfile -t paired_devices < <(bluetoothctl $paired_devices_cmd | grep Device | cut -d ' ' -f 2) 199 | counter=0 200 | 201 | for device in "${paired_devices[@]}"; do 202 | if device_connected "$device"; then 203 | device_alias=$(bluetoothctl info "$device" | grep "Alias" | cut -d ' ' -f 2-) 204 | 205 | if [ $counter -gt 0 ]; then 206 | printf ", %s" "$device_alias" 207 | else 208 | printf " %s" "$device_alias" 209 | fi 210 | 211 | ((counter++)) 212 | fi 213 | done 214 | printf "\n" 215 | else 216 | echo "󰂲" 217 | fi 218 | } 219 | 220 | # A submenu for a specific device that allows connecting, pairing, and trusting 221 | device_menu() { 222 | device=$1 223 | 224 | # Get device name and mac address 225 | device_name=$(echo "$device" | cut -d ' ' -f 3-) 226 | mac=$(echo "$device" | cut -d ' ' -f 2) 227 | 228 | # Build options 229 | if device_connected "$mac"; then 230 | connected="Connected: yes" 231 | else 232 | connected="Connected: no" 233 | fi 234 | paired=$(device_paired "$mac") 235 | trusted=$(device_trusted "$mac") 236 | options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit" 237 | 238 | # Open rofi menu, read chosen option 239 | chosen="$(echo -e "$options" | $rofi_command "$device_name")" 240 | 241 | # Match chosen option to command 242 | case "$chosen" in 243 | "" | "$divider") 244 | echo "No option chosen." 245 | ;; 246 | "$connected") 247 | toggle_connection "$mac" 248 | ;; 249 | "$paired") 250 | toggle_paired "$mac" 251 | ;; 252 | "$trusted") 253 | toggle_trust "$mac" 254 | ;; 255 | "$goback") 256 | show_menu 257 | ;; 258 | esac 259 | } 260 | 261 | # Opens a rofi menu with current bluetooth status and options to connect 262 | show_menu() { 263 | # Get menu options 264 | if power_on; then 265 | power="Power: on" 266 | 267 | # Human-readable names of devices, one per line 268 | # If scan is off, will only list paired devices 269 | devices=$(bluetoothctl devices | grep Device | cut -d ' ' -f 3-) 270 | 271 | # Get controller flags 272 | scan=$(scan_on) 273 | pairable=$(pairable_on) 274 | discoverable=$(discoverable_on) 275 | 276 | # Options passed to rofi 277 | options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit" 278 | else 279 | power="Power: off" 280 | options="$power\nExit" 281 | fi 282 | 283 | # Open rofi menu, read chosen option 284 | chosen="$(echo -e "$options" | $rofi_command "Bluetooth")" 285 | 286 | # Match chosen option to command 287 | case "$chosen" in 288 | "" | "$divider") 289 | echo "No option chosen." 290 | ;; 291 | "$power") 292 | toggle_power 293 | ;; 294 | "$scan") 295 | toggle_scan 296 | ;; 297 | "$discoverable") 298 | toggle_discoverable 299 | ;; 300 | "$pairable") 301 | toggle_pairable 302 | ;; 303 | *) 304 | device=$(bluetoothctl devices | grep "$chosen") 305 | # Open a submenu if a device is selected 306 | if [[ $device ]]; then device_menu "$device"; fi 307 | ;; 308 | esac 309 | } 310 | 311 | # Rofi command to pipe into, can add any options here 312 | rofi_command="rofi -theme ${RASI} -dmenu $* -p" 313 | 314 | case "$1" in 315 | --status) 316 | print_status 317 | ;; 318 | *) 319 | show_menu 320 | ;; 321 | esac 322 | -------------------------------------------------------------------------------- /files/theme/polybar/config.ini: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 4 | 5 | ;; Global WM Settings 6 | 7 | [global/wm] 8 | ; Adjust the _NET_WM_STRUT_PARTIAL top value 9 | ; Used for top aligned bars 10 | margin-bottom = 0 11 | 12 | ; Adjust the _NET_WM_STRUT_PARTIAL bottom value 13 | ; Used for bottom aligned bars 14 | margin-top = 0 15 | 16 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 17 | 18 | ;; File Inclusion 19 | ; include an external file, like module file, etc. 20 | 21 | include-file = ../system.ini 22 | include-file = ./colors.ini 23 | include-file = ./modules.ini 24 | include-file = ./decor.ini 25 | 26 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 27 | 28 | ;; Bar Settings 29 | 30 | [bar/main] 31 | ; Use either of the following command to list available outputs: 32 | ; If unspecified, the application will pick the first one it finds. 33 | ; $ polybar -m | cut -d ':' -f 1 34 | ; $ xrandr -q | grep " connected" | cut -d ' ' -f1 35 | monitor = ${env:MONITOR:} 36 | 37 | ; Use the specified monitor as a fallback if the main one is not found. 38 | monitor-fallback = 39 | 40 | ; Require the monitor to be in connected state 41 | ; XRandR sometimes reports my monitor as being disconnected (when in use) 42 | monitor-strict = false 43 | 44 | ; Tell the Window Manager not to configure the window. 45 | ; Use this to detach the bar if your WM is locking its size/position. 46 | override-redirect = false 47 | 48 | ; Put the bar at the bottom of the screen 49 | bottom = false 50 | 51 | ; Prefer fixed center position for the `modules-center` block 52 | ; When false, the center position will be based on the size of the other blocks. 53 | fixed-center = true 54 | 55 | ; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%), 56 | ; the percentage can optionally be extended with a pixel offset like so: 57 | ; 50%:-10, this will result in a width or height of 50% minus 10 pixels 58 | width = 98% 59 | height = 40 60 | 61 | ; Offset defined as pixel value (e.g. 35) or percentage (e.g. 50%) 62 | ; the percentage can optionally be extended with a pixel offset like so: 63 | ; 50%:-10, this will result in an offset in the x or y direction 64 | ; of 50% minus 10 pixels 65 | offset-x = 1% 66 | offset-y = 2% 67 | 68 | ; Background ARGB color (e.g. #f00, #ff992a, #ddff1023) 69 | background = ${color.BG} 70 | 71 | ; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023) 72 | foreground = ${color.FG} 73 | 74 | ; Background gradient (vertical steps) 75 | ; background-[0-9]+ = #aarrggbb 76 | ;;background-0 = 77 | 78 | ; Value used for drawing rounded corners 79 | ; Note: This shouldn't be used together with border-size because the border 80 | ; doesn't get rounded 81 | ; Individual top/bottom values can be defined using: 82 | ; radius-{top,bottom} 83 | radius = 20.0 84 | #radius-top = 10.0 85 | #radius-bottom = 10.0 86 | 87 | ; Under-/overline pixel size and argb color 88 | ; Individual values can be defined using: 89 | ; {overline,underline}-size 90 | ; {overline,underline}-color 91 | line-size = 2 92 | line-color = ${color.FG} 93 | 94 | ; Values applied to all borders 95 | ; Individual side values can be defined using: 96 | ; border-{left,top,right,bottom}-size 97 | ; border-{left,top,right,bottom}-color 98 | ; The top and bottom borders are added to the bar height, so the effective 99 | ; window height is: 100 | ; height + border-top-size + border-bottom-size 101 | ; Meanwhile the effective window width is defined entirely by the width key and 102 | ; the border is placed withing this area. So you effectively only have the 103 | ; following horizontal space on the bar: 104 | ; width - border-right-size - border-left-size 105 | border-bottom-size = 0 106 | border-color = ${color.FG} 107 | 108 | ; Number of spaces to add at the beginning/end of the bar 109 | ; Individual side values can be defined using: 110 | ; padding-{left,right} 111 | padding = 2 112 | 113 | ; Number of spaces to add before/after each module 114 | ; Individual side values can be defined using: 115 | ; module-margin-{left,right} 116 | module-margin-left = 0 117 | module-margin-right = 0 118 | 119 | ; Fonts are defined using ; 120 | ; Font names are specified using a fontconfig pattern. 121 | ; font-0 = "JetBrains Mono:size=10;3" 122 | ; font-1 = MaterialIcons:size=10 123 | ; font-2 = Termsynu:size=8;-1 124 | ; font-3 = FontAwesome:size=10 125 | ; See the Fonts wiki page for more details 126 | 127 | ; text 128 | font-0 = "JetBrains Mono:size=10;4" 129 | ; icons 130 | font-1 = "Symbols Nerd Font:size=12;4" 131 | ; glyphs 132 | font-2 = "Symbols Nerd Font:size=22;5" 133 | ; dot 134 | font-3 = "Symbols Nerd Font:size=10;4" 135 | ; clock & mpd 136 | font-4 = "Iosevka:style=bold:size=12;4" 137 | ; Archcraft 138 | font-5 = "archcraft:size=12;3" 139 | 140 | ; Modules are added to one of the available blocks 141 | ; modules-left = cpu ram 142 | ; modules-center = xwindow xbrightness 143 | ; modules-right = ipc clock 144 | 145 | # Default 146 | modules-left = date dot mpd 147 | modules-center = berrywm 148 | modules-right = volume sep backlight sep bluetooth sep network sep battery dot sysmenu tray 149 | 150 | # Alternate 151 | ;modules-left = openbox 2LD cpu 3LD memory 4LD filesystem 5LD 152 | ;modules-center = mpd 153 | ;modules-right = 2RD volume 3RD brightness 4RD battery 5RD network 6RD date sep 154 | 155 | ; The separator will be inserted between the output of each module 156 | separator = 157 | 158 | ; This value is used to add extra spacing between elements 159 | ; @deprecated: This parameter will be removed in an upcoming version 160 | spacing = 0 161 | 162 | ; Opacity value between 0.0 and 1.0 used on fade in/out 163 | dim-value = 1.0 164 | 165 | ; Value to be used to set the WM_NAME atom 166 | ; If the value is empty or undefined, the atom value 167 | ; will be created from the following template: polybar-[BAR]_[MONITOR] 168 | ; NOTE: The placeholders are not available for custom values 169 | wm-name = berry 170 | 171 | ; Locale used to localize various module data (e.g. date) 172 | ; Expects a valid libc locale, for example: sv_SE.UTF-8 173 | locale = 174 | 175 | ; Restack the bar window and put it above the 176 | ; selected window manager's root 177 | ; 178 | ; Fixes the issue where the bar is being drawn 179 | ; on top of fullscreen window's 180 | ; 181 | ; Currently supported WM's: 182 | ; bspwm 183 | ; i3 (requires: `override-redirect = true`) 184 | wm-restack = berry 185 | 186 | ; Set a DPI values used when rendering text 187 | ; This only affects scalable fonts 188 | ; dpi = 189 | 190 | ; Enable support for inter-process messaging 191 | ; See the Messaging wiki page for more details. 192 | enable-ipc = true 193 | 194 | ; Fallback click handlers that will be called if 195 | ; there's no matching module handler found. 196 | click-left = 197 | click-middle = 198 | click-right = 199 | scroll-up = 200 | scroll-down = 201 | double-click-left = 202 | double-click-middle = 203 | double-click-right = 204 | 205 | ; Requires polybar to be built with xcursor support (xcb-util-cursor) 206 | ; Possible values are: 207 | ; - default : The default pointer as before, can also be an empty string (default) 208 | ; - pointer : Typically in the form of a hand 209 | ; - ns-resize : Up and down arrows, can be used to indicate scrolling 210 | cursor-click = 211 | cursor-scroll = 212 | 213 | ;; WM Workspace Specific 214 | 215 | ; bspwm 216 | ;;scroll-up = bspwm-desknext 217 | ;;scroll-down = bspwm-deskprev 218 | ;;scroll-up = bspc desktop -f prev.local 219 | ;;scroll-down = bspc desktop -f next.local 220 | 221 | ;i3 222 | ;;scroll-up = i3wm-wsnext 223 | ;;scroll-down = i3wm-wsprev 224 | ;;scroll-up = i3-msg workspace next_on_output 225 | ;;scroll-down = i3-msg workspace prev_on_output 226 | 227 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 228 | 229 | ;; Application Settings 230 | 231 | [settings] 232 | ; The throttle settings lets the eventloop swallow up til X events 233 | ; if they happen within Y millisecond after first event was received. 234 | ; This is done to prevent flood of update event. 235 | ; 236 | ; For example if 5 modules emit an update event at the same time, we really 237 | ; just care about the last one. But if we wait too long for events to swallow 238 | ; the bar would appear sluggish so we continue if timeout 239 | ; expires or limit is reached. 240 | throttle-output = 5 241 | throttle-output-for = 10 242 | 243 | ; Time in milliseconds that the input handler will wait between processing events 244 | ;throttle-input-for = 30 245 | 246 | ; Reload upon receiving XCB_RANDR_SCREEN_CHANGE_NOTIFY events 247 | screenchange-reload = false 248 | 249 | ; Compositing operators 250 | ; @see: https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t 251 | compositing-background = source 252 | compositing-foreground = over 253 | compositing-overline = over 254 | compositing-underline = over 255 | compositing-border = over 256 | 257 | ; Define fallback values used by all module formats 258 | ;format-foreground = 259 | ;format-background = 260 | ;format-underline = 261 | ;format-overline = 262 | ;format-spacing = 263 | ;format-padding = 264 | ;format-margin = 265 | ;format-offset = 266 | 267 | ; Enables pseudo-transparency for the bar 268 | ; If set to true the bar can be transparent without a compositor. 269 | pseudo-transparency = false 270 | 271 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 272 | ;; __________ ______ 273 | ;; / ____/ __ \/ ____/ 274 | ;; / __/ / / / / /_ 275 | ;; / /___/ /_/ / __/ 276 | ;; /_____/\____/_/ 277 | ;; 278 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 279 | 280 | -------------------------------------------------------------------------------- /files/picom.conf: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | ## Everyone is permitted to copy and distribute copies of this file under GNU-GPL3 3 | ## 4 | ## Original Picom's Config File 5 | 6 | ################################# 7 | # Shadows # 8 | ################################# 9 | 10 | # Enabled client-side shadows on windows. Note desktop windows 11 | # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, 12 | # unless explicitly requested using the wintypes option. 13 | # 14 | # Can be set per-window using rules. 15 | # 16 | # Default: false 17 | #-sh-start 18 | shadow = true; 19 | #-sh-end 20 | 21 | # The blur radius for shadows, in pixels. 22 | # 23 | # Default: 12 24 | shadow-radius = 20; 25 | 26 | # The opacity of shadows. 27 | # 28 | # Range: 0.0 - 1.0 29 | # Default: 0.75 30 | shadow-opacity = 0.60; 31 | 32 | # The left offset for shadows, in pixels. 33 | # 34 | # Default: -15 35 | shadow-offset-x = -20; 36 | 37 | # The top offset for shadows, in pixels. 38 | # 39 | # Default: -15 40 | shadow-offset-y = -20; 41 | 42 | # Hex string color value of shadow. Formatted like "#RRGGBB", e.g. "#C0FFEE". 43 | # 44 | # Default: #000000 45 | # shadow-color = "#000000" 46 | 47 | # Crop shadow of a window fully on a particular monitor to that monitor. This is 48 | # currently implemented using the X RandR extension. 49 | # 50 | # Default: false 51 | # crop-shadow-to-monitor = false 52 | 53 | 54 | ################################# 55 | # Fading # 56 | ################################# 57 | 58 | # Fade windows in/out when opening/closing and when opacity changes, 59 | # unless no-fading-openclose is used. Can be set per-window using rules. 60 | # 61 | # Default: false 62 | fading = true; 63 | 64 | # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) 65 | fade-in-step = 0.03; 66 | 67 | # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) 68 | fade-out-step = 0.03; 69 | 70 | # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) 71 | fade-delta = 5 72 | 73 | # Do not fade on window open/close. 74 | no-fading-openclose = false 75 | 76 | # Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. 77 | no-fading-destroyed-argb = true 78 | 79 | 80 | ################################# 81 | # Transparency / Opacity # 82 | ################################# 83 | 84 | # Opacity of window titlebars and borders. 85 | # 86 | # Range: 0.1 - 1.0 87 | # Default: 1.0 (disabled) 88 | frame-opacity = 1.0; 89 | 90 | # Use fixed inactive dim value, instead of adjusting according to window opacity. 91 | # 92 | # Default: false 93 | # inactive-dim-fixed = true 94 | 95 | ################################# 96 | # Corners # 97 | ################################# 98 | 99 | # Sets the radius of rounded window corners. When > 0, the compositor will 100 | # round the corners of windows. Does not interact well with 101 | # `transparent-clipping`. 102 | # 103 | # Default: 0 (disabled) 104 | #-cr-start 105 | corner-radius = 20; 106 | #-cr-end 107 | 108 | ################################# 109 | # Blur # 110 | ################################# 111 | 112 | # Parameters for background blurring, see BLUR section in the man page for more information. 113 | # blur-method = 114 | # blur-size = 12 115 | # 116 | # blur-deviation = false 117 | # 118 | # blur-strength = 0; 119 | 120 | # Blur background of semi-transparent / ARGB windows. 121 | # Can be set per-window using rules. 122 | # 123 | # Default: false 124 | # blur-background = false 125 | 126 | # Blur background of windows when the window frame is not opaque. 127 | # Implies: 128 | # blur-background 129 | # 130 | # Default: false 131 | # blur-background-frame = false 132 | 133 | # Use fixed blur strength rather than adjusting according to window opacity. 134 | # 135 | # Default: false 136 | # blur-background-fixed = false 137 | 138 | 139 | # Specify the blur convolution kernel, with the following format: 140 | # example: 141 | # blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; 142 | # Can also be a pre-defined kernel, see the man page. 143 | # 144 | # Default: "" 145 | blur-kern = "3x3box"; 146 | 147 | ################################# 148 | # General Settings # 149 | ################################# 150 | 151 | # Enable remote control via D-Bus. See the man page for more details. 152 | # 153 | # Default: false 154 | # dbus = true 155 | 156 | # Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. 157 | # daemon = false 158 | 159 | # Specify the backend to use: `xrender`, `glx`, or `egl`. 160 | # 161 | # Default: "xrender" 162 | backend = "glx"; 163 | 164 | # Use higher precision during rendering, and apply dither when presenting the 165 | # rendered screen. Reduces banding artifacts, but may cause performance 166 | # degradation. Only works with OpenGL. 167 | dithered-present = false; 168 | 169 | # Enable/disable VSync. 170 | # 171 | # Default: false 172 | vsync = true; 173 | 174 | # Try to detect windows with rounded corners and don't consider them 175 | # shaped windows. The accuracy is not very high, unfortunately. 176 | # 177 | # Has nothing to do with `corner-radius`. 178 | # 179 | # Default: false 180 | detect-rounded-corners = true; 181 | 182 | # Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers 183 | # not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows. 184 | # 185 | # Default: false 186 | detect-client-opacity = true; 187 | 188 | # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, 189 | # rather than listening to 'FocusIn'/'FocusOut' event. May be more accurate, 190 | # provided that the WM supports it. 191 | # 192 | # Default: false 193 | # use-ewmh-active-win = false 194 | 195 | # Unredirect all windows if a full-screen opaque window is detected, 196 | # to maximize performance for full-screen windows. Known to cause flickering 197 | # when redirecting/unredirecting windows. 198 | # 199 | # Default: false 200 | # unredir-if-possible = false 201 | 202 | # Delay before unredirecting the window, in milliseconds. 203 | # 204 | # Default: 0. 205 | # unredir-if-possible-delay = 0 206 | 207 | # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows 208 | # in the same group focused at the same time. 209 | # 210 | # Default: false 211 | detect-transient = true; 212 | 213 | # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same 214 | # group focused at the same time. This usually means windows from the same application 215 | # will be considered focused or unfocused at the same time. 216 | # 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. 217 | # 218 | # Default: false 219 | # detect-client-leader = false 220 | 221 | # Use of damage information for rendering. This cause the only the part of the 222 | # screen that has actually changed to be redrawn, instead of the whole screen 223 | # every time. Should improve performance. 224 | # 225 | # Default: false 226 | use-damage = true; 227 | 228 | # Use X Sync fence to wait for the completion of rendering of other windows, 229 | # before using their content to render the current screen. 230 | # 231 | # Required for explicit sync drivers, such as nvidia. 232 | # 233 | # Default: false 234 | # xrender-sync-fence = false 235 | 236 | # GLX backend: Use specified GLSL fragment shader for rendering window 237 | # contents. Read the man page for a detailed explanation of the interface. 238 | # 239 | # Can be set per-window using rules. 240 | # 241 | # window-shader-fg = "default" 242 | 243 | # Force all windows to be painted with blending. Useful if you 244 | # have a `window-shader-fg` that could turn opaque pixels transparent. 245 | # 246 | # Default: false 247 | # force-win-blend = false 248 | 249 | # Do not use EWMH to detect fullscreen windows. 250 | # Reverts to checking if a window is fullscreen based only on its size and coordinates. 251 | # 252 | # Default: false 253 | # no-ewmh-fullscreen = false 254 | 255 | # Dimming bright windows so their brightness doesn't exceed this set value. 256 | # Brightness of a window is estimated by averaging all pixels in the window, 257 | # so this could comes with a performance hit. 258 | # Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. 259 | # 260 | # Default: 1.0 (disabled) 261 | # max-brightness = 1.0 262 | 263 | # Make transparent windows clip other windows like non-transparent windows do, 264 | # instead of blending on top of them. e.g. placing a transparent window on top 265 | # of another window will cut a "hole" in that window, and show the desktop background 266 | # underneath. 267 | # 268 | # Default: false 269 | # transparent-clipping = false 270 | 271 | # Set the log level. Possible values are: 272 | # "trace", "debug", "info", "warn", "error" 273 | # in increasing level of importance. Case insensitive. 274 | # If using the "TRACE" log level, it's better to log into a file 275 | # using *--log-file*, since it can generate a huge stream of logs. 276 | # 277 | # Default: "warn" 278 | log-level = "warn"; 279 | 280 | # Set the log file. 281 | # If *--log-file* is never specified, logs will be written to stderr. 282 | # Otherwise, logs will to written to the given file, though some of the early 283 | # logs might still be written to the stderr. 284 | # When setting this option from the config file, it is recommended to use an absolute path. 285 | # 286 | # log-file = "/path/to/your/log/file" 287 | 288 | # Write process ID to a file. 289 | # write-pid-path = "/path/to/your/log/file" 290 | 291 | # Rule-based per-window options. 292 | # 293 | # See WINDOW RULES section in the man page for how these work. 294 | rules: ({ 295 | match = "window_type = 'tooltip'"; 296 | fade = true; 297 | shadow = true; 298 | opacity = 0.95; 299 | focus = true; 300 | full-shadow = false; 301 | }, { 302 | match = "window_type = 'popup_menu' || " 303 | "window_type = 'dropdown_menu'"; 304 | opacity = 1.0; 305 | }, { 306 | match = "window_type = 'utility'"; 307 | shadow = true; 308 | opacity = 1.0; 309 | }, { 310 | match = "window_type = 'dock' || " 311 | "window_type = 'desktop' || " 312 | "class_g = 'Plank' || " 313 | "class_g = 'slop' || " 314 | "_GTK_FRAME_EXTENTS@"; 315 | blur-background = false; 316 | }, { 317 | match = "window_type != 'dock'"; 318 | # shader = "my_shader.frag"; 319 | }, { 320 | match = "window_type = 'dock' || " 321 | "class_g ?= 'rofi' || " 322 | "class_g ?= 'polybar' || " 323 | "class_g ?= 'tint2' || " 324 | "window_type = 'desktop'"; 325 | corner-radius = 20; 326 | }, { 327 | match = "name = 'Notification' || " 328 | "class_g = 'Conky' || " 329 | "class_g ?= 'Notify-osd' || " 330 | "class_g = 'Cairo-clock' || " 331 | #"class_g ?= 'dmenu' || " 332 | #"class_g ?= 'rofi' || " 333 | #"class_g ?= 'polybar' || " 334 | #"class_g ?= 'tint2' || " 335 | "class_g ?= 'plank' || " 336 | "_GTK_FRAME_EXTENTS@"; 337 | shadow = false; 338 | }) 339 | 340 | # `@include` directive can be used to include additional configuration files. 341 | # Relative paths are search either in the parent of this configuration file 342 | # (when the configuration is loaded through a symlink, the symlink will be 343 | # resolved first). Or in `$XDG_CONFIG_HOME/picom/include`. 344 | # 345 | # @include "extra.conf" 346 | -------------------------------------------------------------------------------- /files/theme/rofi/bluetooth.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | modi: "drun,run,filebrowser"; 8 | show-icons: false; 9 | drun-display-format: "{name}"; 10 | window-format: "{c} · {t}"; 11 | } 12 | 13 | /*****----- Global Properties -----*****/ 14 | @import "shared/colors.rasi" 15 | @import "shared/fonts.rasi" 16 | 17 | * { 18 | border-colour: var(selected); 19 | handle-colour: var(selected); 20 | background-colour: var(background); 21 | foreground-colour: var(foreground); 22 | alternate-background: var(background-alt); 23 | normal-background: var(background); 24 | normal-foreground: var(foreground); 25 | urgent-background: var(urgent); 26 | urgent-foreground: var(background); 27 | active-background: var(active); 28 | active-foreground: var(background); 29 | selected-normal-background: var(selected); 30 | selected-normal-foreground: var(background); 31 | selected-urgent-background: var(active); 32 | selected-urgent-foreground: var(background); 33 | selected-active-background: var(urgent); 34 | selected-active-foreground: var(background); 35 | alternate-normal-background: var(background); 36 | alternate-normal-foreground: var(foreground); 37 | alternate-urgent-background: var(urgent); 38 | alternate-urgent-foreground: var(background); 39 | alternate-active-background: var(active); 40 | alternate-active-foreground: var(background); 41 | } 42 | 43 | /*****----- Main Window -----*****/ 44 | window { 45 | /* properties for window widget */ 46 | transparency: "real"; 47 | location: east; 48 | anchor: east; 49 | fullscreen: false; 50 | width: 420px; 51 | height: 90%; 52 | x-offset: -20; 53 | y-offset: 28; 54 | 55 | /* properties for all widgets */ 56 | enabled: true; 57 | margin: 0px; 58 | padding: 0px; 59 | border: 1px solid; 60 | border-radius: 20px; 61 | border-color: @border-colour; 62 | cursor: "default"; 63 | /* Backgroud Colors */ 64 | background-color: @background-colour; 65 | /* Backgroud Image */ 66 | //background-image: url("/path/to/image.png", none); 67 | /* Simple Linear Gradient */ 68 | //background-image: linear-gradient(red, orange, pink, purple); 69 | /* Directional Linear Gradient */ 70 | //background-image: linear-gradient(to bottom, pink, yellow, magenta); 71 | /* Angle Linear Gradient */ 72 | //background-image: linear-gradient(45, cyan, purple, indigo); 73 | } 74 | 75 | /*****----- Main Box -----*****/ 76 | mainbox { 77 | enabled: true; 78 | spacing: 15px; 79 | margin: 0px; 80 | padding: 30px; 81 | border: 0px solid; 82 | border-radius: 0px 0px 0px 0px; 83 | border-color: @border-colour; 84 | background-color: transparent; 85 | children: [ "inputbar", "listview" ]; 86 | } 87 | 88 | /*****----- Inputbar -----*****/ 89 | inputbar { 90 | enabled: true; 91 | spacing: 3px; 92 | margin: 0px; 93 | padding: 3px; 94 | border: 0px 0px 0px 0px; 95 | border-radius: 100%; 96 | border-color: @border-colour; 97 | background-color: @selected; 98 | text-color: @foreground; 99 | children: [ "textbox-prompt-colon", "prompt" ]; 100 | } 101 | 102 | prompt { 103 | enabled: true; 104 | padding: 6px 10px; 105 | border-radius: 100%; 106 | background-color: @background; 107 | text-color: @foreground; 108 | } 109 | textbox-prompt-colon { 110 | enabled: true; 111 | padding: 6px 8px; 112 | border-radius: 100%; 113 | expand: false; 114 | str: ""; 115 | background-color: @background; 116 | text-color: @foreground; 117 | } 118 | entry { 119 | enabled: true; 120 | padding: 6px; 121 | background-color: inherit; 122 | text-color: @background; 123 | cursor: text; 124 | placeholder: "..."; 125 | placeholder-color: inherit; 126 | } 127 | num-filtered-rows { 128 | enabled: true; 129 | expand: false; 130 | background-color: inherit; 131 | text-color: inherit; 132 | } 133 | textbox-num-sep { 134 | enabled: true; 135 | expand: false; 136 | str: "/"; 137 | background-color: inherit; 138 | text-color: inherit; 139 | } 140 | num-rows { 141 | enabled: true; 142 | expand: false; 143 | background-color: inherit; 144 | text-color: inherit; 145 | } 146 | case-indicator { 147 | enabled: true; 148 | background-color: inherit; 149 | text-color: inherit; 150 | } 151 | 152 | /*****----- Listview -----*****/ 153 | listview { 154 | enabled: true; 155 | columns: 1; 156 | lines: 8; 157 | cycle: true; 158 | dynamic: true; 159 | scrollbar: false; 160 | layout: vertical; 161 | reverse: false; 162 | fixed-height: true; 163 | fixed-columns: true; 164 | 165 | spacing: 5px; 166 | margin: 0px; 167 | padding: 0px; 168 | border: 0px solid; 169 | border-radius: 0px; 170 | border-color: @border-colour; 171 | background-color: transparent; 172 | text-color: @foreground-colour; 173 | cursor: "default"; 174 | } 175 | scrollbar { 176 | handle-width: 5px ; 177 | handle-color: @handle-colour; 178 | border-radius: 0px; 179 | background-color: @alternate-background; 180 | } 181 | 182 | /*****----- Elements -----*****/ 183 | element { 184 | enabled: true; 185 | spacing: 10px; 186 | margin: 0px; 187 | padding: 8px; 188 | border: 0px solid; 189 | border-radius: 100%; 190 | border-color: @border-colour; 191 | background-color: transparent; 192 | text-color: @foreground-colour; 193 | cursor: pointer; 194 | } 195 | element normal.normal { 196 | background-color: var(normal-background); 197 | text-color: var(normal-foreground); 198 | } 199 | element normal.urgent { 200 | background-color: var(urgent-background); 201 | text-color: var(urgent-foreground); 202 | } 203 | element normal.active { 204 | background-color: var(active-background); 205 | text-color: var(active-foreground); 206 | } 207 | element selected.normal { 208 | background-color: var(active); 209 | text-color: var(foreground); 210 | } 211 | element selected.urgent { 212 | background-color: var(selected-urgent-background); 213 | text-color: var(selected-urgent-foreground); 214 | } 215 | element selected.active { 216 | background-color: var(selected-active-background); 217 | text-color: var(selected-active-foreground); 218 | } 219 | element alternate.normal { 220 | background-color: var(alternate-normal-background); 221 | text-color: var(alternate-normal-foreground); 222 | } 223 | element alternate.urgent { 224 | background-color: var(alternate-urgent-background); 225 | text-color: var(alternate-urgent-foreground); 226 | } 227 | element alternate.active { 228 | background-color: var(alternate-active-background); 229 | text-color: var(alternate-active-foreground); 230 | } 231 | element-icon { 232 | background-color: transparent; 233 | text-color: inherit; 234 | size: 24px; 235 | cursor: inherit; 236 | } 237 | element-text { 238 | background-color: transparent; 239 | text-color: inherit; 240 | highlight: inherit; 241 | cursor: inherit; 242 | vertical-align: 0.5; 243 | horizontal-align: 0.0; 244 | } 245 | 246 | /*****----- Mode Switcher -----*****/ 247 | mode-switcher{ 248 | enabled: true; 249 | spacing: 15px; 250 | margin: 0px; 251 | padding: 0px; 252 | border: 0px solid; 253 | border-radius: 0px; 254 | border-color: @border-colour; 255 | background-color: transparent; 256 | text-color: @foreground-colour; 257 | } 258 | button { 259 | padding: 8px 10px; 260 | border: 0px solid; 261 | border-radius: 100%; 262 | border-color: @border-colour; 263 | background-color: @alternate-background; 264 | text-color: inherit; 265 | cursor: pointer; 266 | } 267 | button selected { 268 | background-color: var(selected-normal-background); 269 | text-color: var(selected-normal-foreground); 270 | } 271 | 272 | /*****----- Message -----*****/ 273 | message { 274 | enabled: true; 275 | margin: 0px; 276 | padding: 8px 10px; 277 | border: 0px solid; 278 | border-radius: 100%; 279 | border-color: @border-colour; 280 | background-color: @alternate-background; 281 | text-color: @foreground-colour; 282 | } 283 | textbox { 284 | border: 0px solid; 285 | border-color: @border-colour; 286 | background-color: transparent; 287 | text-color: @foreground-colour; 288 | vertical-align: 0.5; 289 | horizontal-align: 0.0; 290 | highlight: none; 291 | placeholder-color: @foreground-colour; 292 | blink: true; 293 | markup: true; 294 | } 295 | error-message { 296 | padding: 20px; 297 | border: 0px solid; 298 | border-radius: 0px; 299 | border-color: @border-colour; 300 | background-color: @background-colour; 301 | text-color: @foreground-colour; 302 | } 303 | -------------------------------------------------------------------------------- /files/theme/rofi/networkmenu.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | modi: "drun,run,filebrowser"; 8 | show-icons: false; 9 | drun-display-format: "{name}"; 10 | window-format: "{c} · {t}"; 11 | } 12 | 13 | /*****----- Global Properties -----*****/ 14 | @import "shared/colors.rasi" 15 | @import "shared/fonts.rasi" 16 | 17 | * { 18 | border-colour: var(selected); 19 | handle-colour: var(selected); 20 | background-colour: var(background); 21 | foreground-colour: var(foreground); 22 | alternate-background: var(background-alt); 23 | normal-background: var(background); 24 | normal-foreground: var(foreground); 25 | urgent-background: var(urgent); 26 | urgent-foreground: var(background); 27 | active-background: var(active); 28 | active-foreground: var(background); 29 | selected-normal-background: var(selected); 30 | selected-normal-foreground: var(background); 31 | selected-urgent-background: var(active); 32 | selected-urgent-foreground: var(background); 33 | selected-active-background: var(urgent); 34 | selected-active-foreground: var(background); 35 | alternate-normal-background: var(background); 36 | alternate-normal-foreground: var(foreground); 37 | alternate-urgent-background: var(urgent); 38 | alternate-urgent-foreground: var(background); 39 | alternate-active-background: var(active); 40 | alternate-active-foreground: var(background); 41 | } 42 | 43 | /*****----- Main Window -----*****/ 44 | window { 45 | /* properties for window widget */ 46 | transparency: "real"; 47 | location: east; 48 | anchor: east; 49 | fullscreen: false; 50 | width: 420px; 51 | height: 90%; 52 | x-offset: -20; 53 | y-offset: 28; 54 | 55 | /* properties for all widgets */ 56 | enabled: true; 57 | margin: 0px; 58 | padding: 0px; 59 | border: 1px solid; 60 | border-radius: 20px; 61 | border-color: @border-colour; 62 | cursor: "default"; 63 | /* Backgroud Colors */ 64 | background-color: @background-colour; 65 | /* Backgroud Image */ 66 | //background-image: url("/path/to/image.png", none); 67 | /* Simple Linear Gradient */ 68 | //background-image: linear-gradient(red, orange, pink, purple); 69 | /* Directional Linear Gradient */ 70 | //background-image: linear-gradient(to bottom, pink, yellow, magenta); 71 | /* Angle Linear Gradient */ 72 | //background-image: linear-gradient(45, cyan, purple, indigo); 73 | } 74 | 75 | /*****----- Main Box -----*****/ 76 | mainbox { 77 | enabled: true; 78 | spacing: 15px; 79 | margin: 0px; 80 | padding: 30px; 81 | border: 0px solid; 82 | border-radius: 0px 0px 0px 0px; 83 | border-color: @border-colour; 84 | background-color: transparent; 85 | children: [ "inputbar", "listview" ]; 86 | } 87 | 88 | /*****----- Inputbar -----*****/ 89 | inputbar { 90 | enabled: true; 91 | spacing: 3px; 92 | margin: 0px; 93 | padding: 3px; 94 | border: 0px 0px 0px 0px; 95 | border-radius: 100%; 96 | border-color: @border-colour; 97 | background-color: @selected; 98 | text-color: @foreground; 99 | children: [ "textbox-prompt-colon", "prompt", "entry" ]; 100 | } 101 | 102 | prompt { 103 | enabled: true; 104 | padding: 6px 10px; 105 | border-radius: 100%; 106 | background-color: @background; 107 | text-color: @foreground; 108 | } 109 | textbox-prompt-colon { 110 | enabled: true; 111 | padding: 6px 9px; 112 | border-radius: 100%; 113 | expand: false; 114 | str: ""; 115 | background-color: @background; 116 | text-color: @foreground; 117 | } 118 | entry { 119 | enabled: true; 120 | padding: 6px; 121 | background-color: inherit; 122 | text-color: @background; 123 | cursor: text; 124 | placeholder: "..."; 125 | placeholder-color: inherit; 126 | } 127 | num-filtered-rows { 128 | enabled: true; 129 | expand: false; 130 | background-color: inherit; 131 | text-color: inherit; 132 | } 133 | textbox-num-sep { 134 | enabled: true; 135 | expand: false; 136 | str: "/"; 137 | background-color: inherit; 138 | text-color: inherit; 139 | } 140 | num-rows { 141 | enabled: true; 142 | expand: false; 143 | background-color: inherit; 144 | text-color: inherit; 145 | } 146 | case-indicator { 147 | enabled: true; 148 | background-color: inherit; 149 | text-color: inherit; 150 | } 151 | 152 | /*****----- Listview -----*****/ 153 | listview { 154 | enabled: true; 155 | columns: 1; 156 | lines: 8; 157 | cycle: true; 158 | dynamic: true; 159 | scrollbar: false; 160 | layout: vertical; 161 | reverse: false; 162 | fixed-height: true; 163 | fixed-columns: true; 164 | 165 | spacing: 5px; 166 | margin: 0px; 167 | padding: 0px; 168 | border: 0px solid; 169 | border-radius: 0px; 170 | border-color: @border-colour; 171 | background-color: transparent; 172 | text-color: @foreground-colour; 173 | cursor: "default"; 174 | } 175 | scrollbar { 176 | handle-width: 5px ; 177 | handle-color: @handle-colour; 178 | border-radius: 0px; 179 | background-color: @alternate-background; 180 | } 181 | 182 | /*****----- Elements -----*****/ 183 | element { 184 | enabled: true; 185 | spacing: 10px; 186 | margin: 0px; 187 | padding: 8px; 188 | border: 0px solid; 189 | border-radius: 100%; 190 | border-color: @border-colour; 191 | background-color: transparent; 192 | text-color: @foreground-colour; 193 | cursor: pointer; 194 | } 195 | element normal.normal { 196 | background-color: var(normal-background); 197 | text-color: var(normal-foreground); 198 | } 199 | element normal.urgent { 200 | background-color: var(urgent-background); 201 | text-color: var(urgent-foreground); 202 | } 203 | element normal.active { 204 | background-color: var(active-background); 205 | text-color: var(active-foreground); 206 | } 207 | element selected.normal { 208 | background-color: var(active); 209 | text-color: var(foreground); 210 | } 211 | element selected.urgent { 212 | background-color: var(selected-urgent-background); 213 | text-color: var(selected-urgent-foreground); 214 | } 215 | element selected.active { 216 | background-color: var(selected-active-background); 217 | text-color: var(selected-active-foreground); 218 | } 219 | element alternate.normal { 220 | background-color: var(alternate-normal-background); 221 | text-color: var(alternate-normal-foreground); 222 | } 223 | element alternate.urgent { 224 | background-color: var(alternate-urgent-background); 225 | text-color: var(alternate-urgent-foreground); 226 | } 227 | element alternate.active { 228 | background-color: var(alternate-active-background); 229 | text-color: var(alternate-active-foreground); 230 | } 231 | element-icon { 232 | background-color: transparent; 233 | text-color: inherit; 234 | size: 24px; 235 | cursor: inherit; 236 | } 237 | element-text { 238 | background-color: transparent; 239 | text-color: inherit; 240 | highlight: inherit; 241 | cursor: inherit; 242 | vertical-align: 0.5; 243 | horizontal-align: 0.0; 244 | } 245 | 246 | /*****----- Mode Switcher -----*****/ 247 | mode-switcher{ 248 | enabled: true; 249 | spacing: 15px; 250 | margin: 0px; 251 | padding: 0px; 252 | border: 0px solid; 253 | border-radius: 0px; 254 | border-color: @border-colour; 255 | background-color: transparent; 256 | text-color: @foreground-colour; 257 | } 258 | button { 259 | padding: 8px 10px; 260 | border: 0px solid; 261 | border-radius: 100%; 262 | border-color: @border-colour; 263 | background-color: @alternate-background; 264 | text-color: inherit; 265 | cursor: pointer; 266 | } 267 | button selected { 268 | background-color: var(selected-normal-background); 269 | text-color: var(selected-normal-foreground); 270 | } 271 | 272 | /*****----- Message -----*****/ 273 | message { 274 | enabled: true; 275 | margin: 0px; 276 | padding: 8px 10px; 277 | border: 0px solid; 278 | border-radius: 100%; 279 | border-color: @border-colour; 280 | background-color: @alternate-background; 281 | text-color: @foreground-colour; 282 | } 283 | textbox { 284 | border: 0px solid; 285 | border-color: @border-colour; 286 | background-color: transparent; 287 | text-color: @foreground-colour; 288 | vertical-align: 0.5; 289 | horizontal-align: 0.0; 290 | highlight: none; 291 | placeholder-color: @foreground-colour; 292 | blink: true; 293 | markup: true; 294 | } 295 | error-message { 296 | padding: 20px; 297 | border: 0px solid; 298 | border-radius: 0px; 299 | border-color: @border-colour; 300 | background-color: @background-colour; 301 | text-color: @foreground-colour; 302 | } 303 | -------------------------------------------------------------------------------- /files/theme/rofi/runner.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | modi: "run"; 8 | show-icons: true; 9 | display-drun: " Apps"; 10 | display-run: " Run"; 11 | display-filebrowser: " Files"; 12 | display-window: " Windows"; 13 | drun-display-format: "{name}"; 14 | window-format: "{c} · {t}"; 15 | } 16 | 17 | /*****----- Global Properties -----*****/ 18 | @import "shared/colors.rasi" 19 | @import "shared/fonts.rasi" 20 | 21 | * { 22 | border-colour: var(selected); 23 | handle-colour: var(selected); 24 | background-colour: var(background); 25 | foreground-colour: var(foreground); 26 | alternate-background: var(background-alt); 27 | normal-background: var(background); 28 | normal-foreground: var(foreground); 29 | urgent-background: var(urgent); 30 | urgent-foreground: var(background); 31 | active-background: var(active); 32 | active-foreground: var(background); 33 | selected-normal-background: var(selected); 34 | selected-normal-foreground: var(background); 35 | selected-urgent-background: var(active); 36 | selected-urgent-foreground: var(background); 37 | selected-active-background: var(urgent); 38 | selected-active-foreground: var(background); 39 | alternate-normal-background: var(background); 40 | alternate-normal-foreground: var(foreground); 41 | alternate-urgent-background: var(urgent); 42 | alternate-urgent-foreground: var(background); 43 | alternate-active-background: var(active); 44 | alternate-active-foreground: var(background); 45 | } 46 | 47 | /*****----- Main Window -----*****/ 48 | window { 49 | /* properties for window widget */ 50 | transparency: "real"; 51 | location: west; 52 | anchor: west; 53 | fullscreen: false; 54 | width: 420px; 55 | height: 90%; 56 | x-offset: 20; 57 | y-offset: 28; 58 | 59 | /* properties for all widgets */ 60 | enabled: true; 61 | margin: 0px; 62 | padding: 0px; 63 | border: 1px solid; 64 | border-radius: 20px; 65 | border-color: @border-colour; 66 | cursor: "default"; 67 | /* Backgroud Colors */ 68 | background-color: @background-colour; 69 | /* Backgroud Image */ 70 | //background-image: url("/path/to/image.png", none); 71 | /* Simple Linear Gradient */ 72 | //background-image: linear-gradient(red, orange, pink, purple); 73 | /* Directional Linear Gradient */ 74 | //background-image: linear-gradient(to bottom, pink, yellow, magenta); 75 | /* Angle Linear Gradient */ 76 | //background-image: linear-gradient(45, cyan, purple, indigo); 77 | } 78 | 79 | /*****----- Main Box -----*****/ 80 | mainbox { 81 | enabled: true; 82 | spacing: 15px; 83 | margin: 0px; 84 | padding: 30px; 85 | border: 0px solid; 86 | border-radius: 0px 0px 0px 0px; 87 | border-color: @border-colour; 88 | background-color: transparent; 89 | children: [ "inputbar", "listview" ]; 90 | } 91 | 92 | /*****----- Inputbar -----*****/ 93 | inputbar { 94 | enabled: true; 95 | spacing: 10px; 96 | margin: 0px; 97 | padding: 3px; 98 | border: 0px 0px 0px 0px; 99 | border-radius: 100%; 100 | border-color: @border-colour; 101 | background-color: @selected; 102 | text-color: @foreground; 103 | children: [ "textbox-prompt-colon", "entry" ]; 104 | } 105 | 106 | prompt { 107 | enabled: true; 108 | background-color: inherit; 109 | text-color: inherit; 110 | } 111 | textbox-prompt-colon { 112 | enabled: true; 113 | padding: 6px 9px; 114 | border-radius: 100%; 115 | expand: false; 116 | str: ""; 117 | background-color: @background; 118 | text-color: @foreground; 119 | } 120 | entry { 121 | enabled: true; 122 | padding: 6px 0px; 123 | background-color: inherit; 124 | text-color: @background; 125 | cursor: text; 126 | placeholder: "Run..."; 127 | placeholder-color: inherit; 128 | } 129 | num-filtered-rows { 130 | enabled: true; 131 | expand: false; 132 | background-color: inherit; 133 | text-color: inherit; 134 | } 135 | textbox-num-sep { 136 | enabled: true; 137 | expand: false; 138 | str: "/"; 139 | background-color: inherit; 140 | text-color: inherit; 141 | } 142 | num-rows { 143 | enabled: true; 144 | expand: false; 145 | background-color: inherit; 146 | text-color: inherit; 147 | } 148 | case-indicator { 149 | enabled: true; 150 | background-color: inherit; 151 | text-color: inherit; 152 | } 153 | 154 | /*****----- Listview -----*****/ 155 | listview { 156 | enabled: true; 157 | columns: 1; 158 | lines: 8; 159 | cycle: true; 160 | dynamic: true; 161 | scrollbar: false; 162 | layout: vertical; 163 | reverse: false; 164 | fixed-height: true; 165 | fixed-columns: true; 166 | 167 | spacing: 5px; 168 | margin: 0px; 169 | padding: 0px; 170 | border: 0px solid; 171 | border-radius: 0px; 172 | border-color: @border-colour; 173 | background-color: transparent; 174 | text-color: @foreground-colour; 175 | cursor: "default"; 176 | } 177 | scrollbar { 178 | handle-width: 5px ; 179 | handle-color: @handle-colour; 180 | border-radius: 0px; 181 | background-color: @alternate-background; 182 | } 183 | 184 | /*****----- Elements -----*****/ 185 | element { 186 | enabled: true; 187 | spacing: 10px; 188 | margin: 0px; 189 | padding: 5px; 190 | border: 0px solid; 191 | border-radius: 100%; 192 | border-color: @border-colour; 193 | background-color: transparent; 194 | text-color: @foreground-colour; 195 | cursor: pointer; 196 | } 197 | element normal.normal { 198 | background-color: var(normal-background); 199 | text-color: var(normal-foreground); 200 | } 201 | element normal.urgent { 202 | background-color: var(urgent-background); 203 | text-color: var(urgent-foreground); 204 | } 205 | element normal.active { 206 | background-color: var(active-background); 207 | text-color: var(active-foreground); 208 | } 209 | element selected.normal { 210 | background-color: var(active); 211 | text-color: var(foreground); 212 | } 213 | element selected.urgent { 214 | background-color: var(selected-urgent-background); 215 | text-color: var(selected-urgent-foreground); 216 | } 217 | element selected.active { 218 | background-color: var(selected-active-background); 219 | text-color: var(selected-active-foreground); 220 | } 221 | element alternate.normal { 222 | background-color: var(alternate-normal-background); 223 | text-color: var(alternate-normal-foreground); 224 | } 225 | element alternate.urgent { 226 | background-color: var(alternate-urgent-background); 227 | text-color: var(alternate-urgent-foreground); 228 | } 229 | element alternate.active { 230 | background-color: var(alternate-active-background); 231 | text-color: var(alternate-active-foreground); 232 | } 233 | element-icon { 234 | background-color: transparent; 235 | text-color: inherit; 236 | size: 24px; 237 | cursor: inherit; 238 | } 239 | element-text { 240 | background-color: transparent; 241 | text-color: inherit; 242 | highlight: inherit; 243 | cursor: inherit; 244 | vertical-align: 0.5; 245 | horizontal-align: 0.0; 246 | } 247 | 248 | /*****----- Mode Switcher -----*****/ 249 | mode-switcher{ 250 | enabled: true; 251 | spacing: 15px; 252 | margin: 0px; 253 | padding: 0px; 254 | border: 0px solid; 255 | border-radius: 0px; 256 | border-color: @border-colour; 257 | background-color: transparent; 258 | text-color: @foreground-colour; 259 | } 260 | button { 261 | padding: 8px 10px; 262 | border: 0px solid; 263 | border-radius: 100%; 264 | border-color: @border-colour; 265 | background-color: @alternate-background; 266 | text-color: inherit; 267 | cursor: pointer; 268 | } 269 | button selected { 270 | background-color: var(selected-normal-background); 271 | text-color: var(selected-normal-foreground); 272 | } 273 | 274 | /*****----- Message -----*****/ 275 | message { 276 | enabled: true; 277 | margin: 0px; 278 | padding: 8px 10px; 279 | border: 0px solid; 280 | border-radius: 100%; 281 | border-color: @border-colour; 282 | background-color: @alternate-background; 283 | text-color: @foreground-colour; 284 | } 285 | textbox { 286 | border: 0px solid; 287 | border-color: @border-colour; 288 | background-color: transparent; 289 | text-color: @foreground-colour; 290 | vertical-align: 0.5; 291 | horizontal-align: 0.0; 292 | highlight: none; 293 | placeholder-color: @foreground-colour; 294 | blink: true; 295 | markup: true; 296 | } 297 | error-message { 298 | padding: 20px; 299 | border: 0px solid; 300 | border-radius: 0px; 301 | border-color: @border-colour; 302 | background-color: @background-colour; 303 | text-color: @foreground-colour; 304 | } 305 | -------------------------------------------------------------------------------- /files/theme/rofi/windows.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | modi: "window"; 8 | show-icons: true; 9 | display-drun: " Apps"; 10 | display-run: " Run"; 11 | display-filebrowser: " Files"; 12 | display-window: " Windows"; 13 | drun-display-format: "{name}"; 14 | window-format: "{c} · {t}"; 15 | } 16 | 17 | /*****----- Global Properties -----*****/ 18 | @import "shared/colors.rasi" 19 | @import "shared/fonts.rasi" 20 | 21 | * { 22 | border-colour: var(selected); 23 | handle-colour: var(selected); 24 | background-colour: var(background); 25 | foreground-colour: var(foreground); 26 | alternate-background: var(background-alt); 27 | normal-background: var(background); 28 | normal-foreground: var(foreground); 29 | urgent-background: var(urgent); 30 | urgent-foreground: var(background); 31 | active-background: var(active); 32 | active-foreground: var(background); 33 | selected-normal-background: var(selected); 34 | selected-normal-foreground: var(background); 35 | selected-urgent-background: var(active); 36 | selected-urgent-foreground: var(background); 37 | selected-active-background: var(urgent); 38 | selected-active-foreground: var(background); 39 | alternate-normal-background: var(background); 40 | alternate-normal-foreground: var(foreground); 41 | alternate-urgent-background: var(urgent); 42 | alternate-urgent-foreground: var(background); 43 | alternate-active-background: var(active); 44 | alternate-active-foreground: var(background); 45 | } 46 | 47 | /*****----- Main Window -----*****/ 48 | window { 49 | /* properties for window widget */ 50 | transparency: "real"; 51 | location: west; 52 | anchor: west; 53 | fullscreen: false; 54 | width: 420px; 55 | height: 90%; 56 | x-offset: 20; 57 | y-offset: 28; 58 | 59 | /* properties for all widgets */ 60 | enabled: true; 61 | margin: 0px; 62 | padding: 0px; 63 | border: 1px solid; 64 | border-radius: 20px; 65 | border-color: @border-colour; 66 | cursor: "default"; 67 | /* Backgroud Colors */ 68 | background-color: @background-colour; 69 | /* Backgroud Image */ 70 | //background-image: url("/path/to/image.png", none); 71 | /* Simple Linear Gradient */ 72 | //background-image: linear-gradient(red, orange, pink, purple); 73 | /* Directional Linear Gradient */ 74 | //background-image: linear-gradient(to bottom, pink, yellow, magenta); 75 | /* Angle Linear Gradient */ 76 | //background-image: linear-gradient(45, cyan, purple, indigo); 77 | } 78 | 79 | /*****----- Main Box -----*****/ 80 | mainbox { 81 | enabled: true; 82 | spacing: 15px; 83 | margin: 0px; 84 | padding: 30px; 85 | border: 0px solid; 86 | border-radius: 0px 0px 0px 0px; 87 | border-color: @border-colour; 88 | background-color: transparent; 89 | children: [ "inputbar", "listview" ]; 90 | } 91 | 92 | /*****----- Inputbar -----*****/ 93 | inputbar { 94 | enabled: true; 95 | spacing: 10px; 96 | margin: 0px; 97 | padding: 3px; 98 | border: 0px 0px 0px 0px; 99 | border-radius: 100%; 100 | border-color: @border-colour; 101 | background-color: @selected; 102 | text-color: @foreground; 103 | children: [ "textbox-prompt-colon", "entry" ]; 104 | } 105 | 106 | prompt { 107 | enabled: true; 108 | background-color: inherit; 109 | text-color: inherit; 110 | } 111 | textbox-prompt-colon { 112 | enabled: true; 113 | padding: 6px 9px; 114 | border-radius: 100%; 115 | expand: false; 116 | str: ""; 117 | background-color: @background; 118 | text-color: @foreground; 119 | } 120 | entry { 121 | enabled: true; 122 | padding: 6px 0px; 123 | background-color: inherit; 124 | text-color: @background; 125 | cursor: text; 126 | placeholder: "Filter..."; 127 | placeholder-color: inherit; 128 | } 129 | num-filtered-rows { 130 | enabled: true; 131 | expand: false; 132 | background-color: inherit; 133 | text-color: inherit; 134 | } 135 | textbox-num-sep { 136 | enabled: true; 137 | expand: false; 138 | str: "/"; 139 | background-color: inherit; 140 | text-color: inherit; 141 | } 142 | num-rows { 143 | enabled: true; 144 | expand: false; 145 | background-color: inherit; 146 | text-color: inherit; 147 | } 148 | case-indicator { 149 | enabled: true; 150 | background-color: inherit; 151 | text-color: inherit; 152 | } 153 | 154 | /*****----- Listview -----*****/ 155 | listview { 156 | enabled: true; 157 | columns: 1; 158 | lines: 8; 159 | cycle: true; 160 | dynamic: true; 161 | scrollbar: false; 162 | layout: vertical; 163 | reverse: false; 164 | fixed-height: true; 165 | fixed-columns: true; 166 | 167 | spacing: 5px; 168 | margin: 0px; 169 | padding: 0px; 170 | border: 0px solid; 171 | border-radius: 0px; 172 | border-color: @border-colour; 173 | background-color: transparent; 174 | text-color: @foreground-colour; 175 | cursor: "default"; 176 | } 177 | scrollbar { 178 | handle-width: 5px ; 179 | handle-color: @handle-colour; 180 | border-radius: 0px; 181 | background-color: @alternate-background; 182 | } 183 | 184 | /*****----- Elements -----*****/ 185 | element { 186 | enabled: true; 187 | spacing: 10px; 188 | margin: 0px; 189 | padding: 5px; 190 | border: 0px solid; 191 | border-radius: 100%; 192 | border-color: @border-colour; 193 | background-color: transparent; 194 | text-color: @foreground-colour; 195 | cursor: pointer; 196 | } 197 | element normal.normal { 198 | background-color: var(normal-background); 199 | text-color: var(normal-foreground); 200 | } 201 | element normal.urgent { 202 | background-color: var(urgent-background); 203 | text-color: var(urgent-foreground); 204 | } 205 | element normal.active { 206 | background-color: var(active-background); 207 | text-color: var(active-foreground); 208 | } 209 | element selected.normal { 210 | background-color: var(selected); 211 | text-color: var(background); 212 | } 213 | element selected.urgent { 214 | background-color: var(selected-urgent-background); 215 | text-color: var(selected-urgent-foreground); 216 | } 217 | element selected.active { 218 | background-color: var(selected-active-background); 219 | text-color: var(selected-active-foreground); 220 | } 221 | element alternate.normal { 222 | background-color: var(alternate-normal-background); 223 | text-color: var(alternate-normal-foreground); 224 | } 225 | element alternate.urgent { 226 | background-color: var(alternate-urgent-background); 227 | text-color: var(alternate-urgent-foreground); 228 | } 229 | element alternate.active { 230 | background-color: var(alternate-active-background); 231 | text-color: var(alternate-active-foreground); 232 | } 233 | element-icon { 234 | background-color: transparent; 235 | text-color: inherit; 236 | size: 24px; 237 | cursor: inherit; 238 | } 239 | element-text { 240 | background-color: transparent; 241 | text-color: inherit; 242 | highlight: inherit; 243 | cursor: inherit; 244 | vertical-align: 0.5; 245 | horizontal-align: 0.0; 246 | } 247 | 248 | /*****----- Mode Switcher -----*****/ 249 | mode-switcher{ 250 | enabled: true; 251 | spacing: 15px; 252 | margin: 0px; 253 | padding: 0px; 254 | border: 0px solid; 255 | border-radius: 0px; 256 | border-color: @border-colour; 257 | background-color: transparent; 258 | text-color: @foreground-colour; 259 | } 260 | button { 261 | padding: 8px 10px; 262 | border: 0px solid; 263 | border-radius: 100%; 264 | border-color: @border-colour; 265 | background-color: @alternate-background; 266 | text-color: inherit; 267 | cursor: pointer; 268 | } 269 | button selected { 270 | background-color: var(selected-normal-background); 271 | text-color: var(selected-normal-foreground); 272 | } 273 | 274 | /*****----- Message -----*****/ 275 | message { 276 | enabled: true; 277 | margin: 0px; 278 | padding: 8px 10px; 279 | border: 0px solid; 280 | border-radius: 100%; 281 | border-color: @border-colour; 282 | background-color: @alternate-background; 283 | text-color: @foreground-colour; 284 | } 285 | textbox { 286 | border: 0px solid; 287 | border-color: @border-colour; 288 | background-color: transparent; 289 | text-color: @foreground-colour; 290 | vertical-align: 0.5; 291 | horizontal-align: 0.0; 292 | highlight: none; 293 | placeholder-color: @foreground-colour; 294 | blink: true; 295 | markup: true; 296 | } 297 | error-message { 298 | padding: 20px; 299 | border: 0px solid; 300 | border-radius: 0px; 301 | border-color: @border-colour; 302 | background-color: @background-colour; 303 | text-color: @foreground-colour; 304 | } 305 | -------------------------------------------------------------------------------- /files/theme/rofi/launcher.rasi: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2020-2025 Aditya Shakya 3 | **/ 4 | 5 | /*****----- Configuration -----*****/ 6 | configuration { 7 | modi: "drun,run,filebrowser"; 8 | show-icons: true; 9 | display-drun: " Apps"; 10 | display-run: " Run"; 11 | display-filebrowser: " Files"; 12 | display-window: " Windows"; 13 | drun-display-format: "{name}"; 14 | window-format: "{c} · {t}"; 15 | } 16 | 17 | /*****----- Global Properties -----*****/ 18 | @import "shared/colors.rasi" 19 | @import "shared/fonts.rasi" 20 | 21 | * { 22 | border-colour: var(selected); 23 | handle-colour: var(selected); 24 | background-colour: var(background); 25 | foreground-colour: var(foreground); 26 | alternate-background: var(background-alt); 27 | normal-background: var(background); 28 | normal-foreground: var(foreground); 29 | urgent-background: var(urgent); 30 | urgent-foreground: var(background); 31 | active-background: var(active); 32 | active-foreground: var(background); 33 | selected-normal-background: var(selected); 34 | selected-normal-foreground: var(background); 35 | selected-urgent-background: var(active); 36 | selected-urgent-foreground: var(background); 37 | selected-active-background: var(urgent); 38 | selected-active-foreground: var(background); 39 | alternate-normal-background: var(background); 40 | alternate-normal-foreground: var(foreground); 41 | alternate-urgent-background: var(urgent); 42 | alternate-urgent-foreground: var(background); 43 | alternate-active-background: var(active); 44 | alternate-active-foreground: var(background); 45 | } 46 | 47 | /*****----- Main Window -----*****/ 48 | window { 49 | /* properties for window widget */ 50 | transparency: "real"; 51 | location: west; 52 | anchor: west; 53 | fullscreen: false; 54 | width: 420px; 55 | height: 90%; 56 | x-offset: 20; 57 | y-offset: 28; 58 | 59 | /* properties for all widgets */ 60 | enabled: true; 61 | margin: 0px; 62 | padding: 0px; 63 | border: 1px solid; 64 | border-radius: 20px; 65 | border-color: @border-colour; 66 | cursor: "default"; 67 | /* Backgroud Colors */ 68 | background-color: @background-colour; 69 | /* Backgroud Image */ 70 | //background-image: url("/path/to/image.png", none); 71 | /* Simple Linear Gradient */ 72 | //background-image: linear-gradient(red, orange, pink, purple); 73 | /* Directional Linear Gradient */ 74 | //background-image: linear-gradient(to bottom, pink, yellow, magenta); 75 | /* Angle Linear Gradient */ 76 | //background-image: linear-gradient(45, cyan, purple, indigo); 77 | } 78 | 79 | /*****----- Main Box -----*****/ 80 | mainbox { 81 | enabled: true; 82 | spacing: 15px; 83 | margin: 0px; 84 | padding: 30px; 85 | border: 0px solid; 86 | border-radius: 0px 0px 0px 0px; 87 | border-color: @border-colour; 88 | background-color: transparent; 89 | children: [ "inputbar", "message", "listview", "mode-switcher" ]; 90 | } 91 | 92 | /*****----- Inputbar -----*****/ 93 | inputbar { 94 | enabled: true; 95 | spacing: 10px; 96 | margin: 0px; 97 | padding: 3px; 98 | border: 0px 0px 0px 0px; 99 | border-radius: 100%; 100 | border-color: @border-colour; 101 | background-color: @selected; 102 | text-color: @foreground; 103 | children: [ "textbox-prompt-colon", "entry" ]; 104 | } 105 | 106 | prompt { 107 | enabled: true; 108 | background-color: inherit; 109 | text-color: inherit; 110 | } 111 | textbox-prompt-colon { 112 | enabled: true; 113 | padding: 6px 9px; 114 | border-radius: 100%; 115 | expand: false; 116 | str: ""; 117 | background-color: @background; 118 | text-color: @foreground; 119 | } 120 | entry { 121 | enabled: true; 122 | padding: 6px 0px; 123 | background-color: inherit; 124 | text-color: @background; 125 | cursor: text; 126 | placeholder: "Search..."; 127 | placeholder-color: inherit; 128 | } 129 | num-filtered-rows { 130 | enabled: true; 131 | expand: false; 132 | background-color: inherit; 133 | text-color: inherit; 134 | } 135 | textbox-num-sep { 136 | enabled: true; 137 | expand: false; 138 | str: "/"; 139 | background-color: inherit; 140 | text-color: inherit; 141 | } 142 | num-rows { 143 | enabled: true; 144 | expand: false; 145 | background-color: inherit; 146 | text-color: inherit; 147 | } 148 | case-indicator { 149 | enabled: true; 150 | background-color: inherit; 151 | text-color: inherit; 152 | } 153 | 154 | /*****----- Listview -----*****/ 155 | listview { 156 | enabled: true; 157 | columns: 1; 158 | lines: 8; 159 | cycle: true; 160 | dynamic: true; 161 | scrollbar: false; 162 | layout: vertical; 163 | reverse: false; 164 | fixed-height: true; 165 | fixed-columns: true; 166 | 167 | spacing: 5px; 168 | margin: 0px; 169 | padding: 0px; 170 | border: 0px solid; 171 | border-radius: 0px; 172 | border-color: @border-colour; 173 | background-color: transparent; 174 | text-color: @foreground-colour; 175 | cursor: "default"; 176 | } 177 | scrollbar { 178 | handle-width: 5px ; 179 | handle-color: @handle-colour; 180 | border-radius: 0px; 181 | background-color: @alternate-background; 182 | } 183 | 184 | /*****----- Elements -----*****/ 185 | element { 186 | enabled: true; 187 | spacing: 10px; 188 | margin: 0px; 189 | padding: 5px; 190 | border: 0px solid; 191 | border-radius: 100%; 192 | border-color: @border-colour; 193 | background-color: transparent; 194 | text-color: @foreground-colour; 195 | cursor: pointer; 196 | } 197 | element normal.normal { 198 | background-color: var(normal-background); 199 | text-color: var(normal-foreground); 200 | } 201 | element normal.urgent { 202 | background-color: var(urgent-background); 203 | text-color: var(urgent-foreground); 204 | } 205 | element normal.active { 206 | background-color: var(active-background); 207 | text-color: var(active-foreground); 208 | } 209 | element selected.normal { 210 | background-color: var(active); 211 | text-color: var(foreground); 212 | } 213 | element selected.urgent { 214 | background-color: var(selected-urgent-background); 215 | text-color: var(selected-urgent-foreground); 216 | } 217 | element selected.active { 218 | background-color: var(selected-active-background); 219 | text-color: var(selected-active-foreground); 220 | } 221 | element alternate.normal { 222 | background-color: var(alternate-normal-background); 223 | text-color: var(alternate-normal-foreground); 224 | } 225 | element alternate.urgent { 226 | background-color: var(alternate-urgent-background); 227 | text-color: var(alternate-urgent-foreground); 228 | } 229 | element alternate.active { 230 | background-color: var(alternate-active-background); 231 | text-color: var(alternate-active-foreground); 232 | } 233 | element-icon { 234 | background-color: transparent; 235 | text-color: inherit; 236 | size: 24px; 237 | cursor: inherit; 238 | } 239 | element-text { 240 | background-color: transparent; 241 | text-color: inherit; 242 | highlight: inherit; 243 | cursor: inherit; 244 | vertical-align: 0.5; 245 | horizontal-align: 0.0; 246 | } 247 | 248 | /*****----- Mode Switcher -----*****/ 249 | mode-switcher{ 250 | enabled: true; 251 | spacing: 15px; 252 | margin: 0px; 253 | padding: 0px; 254 | border: 0px solid; 255 | border-radius: 0px; 256 | border-color: @border-colour; 257 | background-color: transparent; 258 | text-color: @foreground-colour; 259 | } 260 | button { 261 | padding: 8px 10px; 262 | border: 0px solid; 263 | border-radius: 100%; 264 | border-color: @border-colour; 265 | background-color: @alternate-background; 266 | text-color: inherit; 267 | cursor: pointer; 268 | } 269 | button selected { 270 | background-color: var(selected-normal-background); 271 | text-color: var(selected-normal-foreground); 272 | } 273 | 274 | /*****----- Message -----*****/ 275 | message { 276 | enabled: true; 277 | margin: 0px; 278 | padding: 8px 10px; 279 | border: 0px solid; 280 | border-radius: 100%; 281 | border-color: @border-colour; 282 | background-color: @alternate-background; 283 | text-color: @foreground-colour; 284 | } 285 | textbox { 286 | border: 0px solid; 287 | border-color: @border-colour; 288 | background-color: transparent; 289 | text-color: @foreground-colour; 290 | vertical-align: 0.5; 291 | horizontal-align: 0.0; 292 | highlight: none; 293 | placeholder-color: @foreground-colour; 294 | blink: true; 295 | markup: true; 296 | } 297 | error-message { 298 | padding: 20px; 299 | border: 0px solid; 300 | border-radius: 0px; 301 | border-color: @border-colour; 302 | background-color: @background-colour; 303 | text-color: @foreground-colour; 304 | } 305 | -------------------------------------------------------------------------------- /files/theme/polybar/modules.ini: -------------------------------------------------------------------------------- 1 | ## Copyright (C) 2020-2025 Aditya Shakya 2 | 3 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 4 | 5 | [module/alsa] 6 | type = internal/alsa 7 | 8 | ; Soundcard to be used 9 | ; Usually in the format hw:# where # is the card number 10 | ; You can find the different card numbers in `/proc/asound/cards` 11 | ;;master-soundcard = default 12 | ;;speaker-soundcard = default 13 | ;;headphone-soundcard = default 14 | 15 | ; Name of the master, speaker and headphone mixers 16 | ; Use the following command to list available mixer controls: 17 | ; $ amixer scontrols | sed -nr "s/.*'([[:alnum:]]+)'.*/\1/p" 18 | ; If master, speaker or headphone-soundcard isn't the default, 19 | ; use `amixer -c # scontrols` instead where # is the number 20 | ; of the master, speaker or headphone soundcard respectively 21 | ; 22 | ; Default: Master 23 | ;;master-mixer = Master 24 | 25 | ; Optionally define speaker and headphone mixers 26 | ; Default: none 27 | ;;speaker-mixer = Speaker 28 | ; Default: none 29 | ;;headphone-mixer = Headphone 30 | 31 | ; NOTE: This is required if headphone_mixer is defined 32 | ; Use the following command to list available device controls 33 | ; $ amixer controls | sed -r "/CARD/\!d; s/.*=([0-9]+).*name='([^']+)'.*/printf '%3.0f: %s\n' '\1' '\2'/e" | sort 34 | ; You may also need to use `amixer -c # controls` as above for the mixer names 35 | ; Default: none 36 | ;;headphone-id = 9 37 | 38 | ; Use volume mapping (similar to amixer -M and alsamixer), where the increase in volume is linear to the ear 39 | ; Default: false 40 | ;;mapped = true 41 | 42 | ; Interval for volume increase/decrease (in percent points) 43 | ; Default: 5 44 | ;;interval = 5 45 | 46 | ; Available tags: 47 | ; (default) 48 | ; 49 | ; 50 | format-volume = 51 | format-volume-background = ${color.BGL} 52 | 53 | ; Available tags: 54 | ; (default) 55 | ; 56 | ; 57 | format-muted = 58 | format-muted-prefix =  59 | format-muted-prefix-font = 2 60 | format-muted-background = ${color.BGL} 61 | 62 | ; Available tokens: 63 | ; %percentage% (default) 64 | label-volume = %percentage%% 65 | 66 | ; Available tokens: 67 | ; %percentage% (default 68 | label-muted = " Mute" 69 | 70 | ; Only applies if is used 71 | ramp-volume-0 =  72 | ramp-volume-1 =  73 | ramp-volume-2 =  74 | ramp-volume-3 =  75 | ramp-volume-4 =  76 | ramp-volume-5 =  77 | ramp-volume-6 =  78 | ramp-volume-7 =  79 | ramp-volume-8 =  80 | ramp-volume-9 =  81 | ramp-volume-foreground = ${color.PURPLE} 82 | ramp-volume-font = 2 83 | 84 | ; If defined, it will replace when 85 | ; headphones are plugged in to `headphone_control_numid` 86 | ; If undefined, will be used for both 87 | ; Only applies if is used 88 | ramp-headphones-0 =  89 | ramp-headphones-1 =  90 | 91 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 92 | 93 | [module/btna] 94 | type = custom/text 95 | 96 | content = " NA" 97 | content-prefix =  98 | content-prefix-font = 2 99 | content-prefix-foreground = ${color.magenta} 100 | content-padding = 0 101 | 102 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 103 | 104 | [module/bna] 105 | type = custom/text 106 | 107 | content = " NA" 108 | content-prefix = 盛 109 | content-prefix-font = 2 110 | content-prefix-foreground = ${color.magenta} 111 | content-padding = 0 112 | 113 | ;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 114 | 115 | [module/backlight] 116 | type = internal/xbacklight 117 | 118 | ; Use the following command to list available cards: 119 | ; $ ls -1 /sys/class/backlight/ 120 | card = intel_backlight 121 | 122 | ; Available tags: 123 | ;