├── hypr ├── monitors.conf ├── config │ ├── layouts.conf │ ├── border.conf │ ├── autostart.conf │ ├── plugins.conf │ ├── hyprswitch.css │ ├── input.conf │ ├── environment.conf │ ├── variables.conf │ ├── animations.conf │ └── appearance.conf ├── hyprrules.conf ├── rules │ ├── general.conf │ ├── opacity.conf │ ├── layers.conf │ ├── media.conf │ ├── floating.conf │ └── dialogs.conf ├── keybinds │ ├── applications.conf │ ├── windows.conf │ ├── media.conf │ └── workspaces.conf ├── hyprland.conf ├── hypridle.conf ├── README.md └── hyprlock.conf ├── nvim ├── .gitignore ├── stylua.toml ├── README.md ├── lua │ ├── config │ │ ├── keymaps.lua │ │ ├── autocmds.lua │ │ ├── options.lua │ │ └── lazy.lua │ └── plugins │ │ ├── neowallust.lua │ │ ├── asset │ │ ├── illuminati-logo.txt │ │ ├── skull-fuck-you.txt │ │ ├── coffin-logo.txt │ │ └── death-star-logo.txt │ │ ├── dashboard.lua │ │ └── plugins.lua ├── .neoconf.json ├── init.lua ├── lazyvim.json ├── .clang-format └── lazy-lock.json ├── wlogout ├── icons │ ├── lock.png │ ├── logout.png │ ├── reboot.png │ ├── hibernate.png │ ├── shutdown.png │ └── suspend.png ├── layout ├── colors.css └── style.css ├── pavucontrol.ini ├── QtProject.conf ├── chrome-flags.conf ├── code-flags.conf ├── wallust ├── templates │ ├── vscode │ ├── border.conf │ ├── neopywal.vim │ ├── hyprswitch.css │ ├── kitty.conf │ ├── alacritty.toml │ ├── vscode.json │ ├── colors.css │ ├── wofi.css │ ├── gtk.css │ ├── waybar.css │ ├── swaync.css │ ├── wlogout.css │ └── dunstrc └── wallust.toml ├── wofi ├── config ├── colors.css └── style.css ├── vicinae └── vicinae.json ├── kitty ├── colors.conf └── kitty.conf ├── .gitmodules ├── alacritty ├── alacritty.toml └── colors.toml ├── bash └── bashrc ├── waybar ├── colors.css └── style.css ├── swaync ├── colors.css ├── config.json └── style.css ├── zsh ├── zshrc └── plugins │ └── sudo │ └── sudo.plugin.zsh ├── fastfetch ├── cyberpunk-mask.txt ├── illuminati.txt ├── star.txt ├── satan-cross.txt └── config.jsonc ├── scripts ├── system │ ├── battery-notify.sh │ ├── floating-run.sh │ └── package-updates.sh ├── lib │ ├── color-utils.sh │ └── common.sh ├── git │ ├── cleanup.sh │ └── validate-gitignore.sh ├── media │ ├── music-status.sh │ └── volume-brightness.sh ├── theme │ ├── waybar-detection.sh │ ├── wofi-colors.sh │ └── gtk-colors.sh ├── utils │ └── screenshot.sh └── README.md ├── fish ├── fish_variables └── config.fish ├── bongocat └── bongo.conf ├── .gitignore ├── dunst └── dunstrc ├── yazi └── yazi.toml ├── starship └── starship.toml ├── README.md ├── shell.env ├── neofetch └── config.conf └── kew └── kewrc /hypr/monitors.conf: -------------------------------------------------------------------------------- 1 | # HYPRLAND MONITOR CONFIGURATION 2 | monitor=eDP-1,1920x1080@60.02,1280x1080,1.0 -------------------------------------------------------------------------------- /nvim/.gitignore: -------------------------------------------------------------------------------- 1 | tt.* 2 | .tests 3 | doc/tags 4 | debug 5 | .repro 6 | foo.* 7 | *.log 8 | data 9 | -------------------------------------------------------------------------------- /wlogout/icons/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saatvik333/hyprland-dotfiles/HEAD/wlogout/icons/lock.png -------------------------------------------------------------------------------- /wlogout/icons/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saatvik333/hyprland-dotfiles/HEAD/wlogout/icons/logout.png -------------------------------------------------------------------------------- /wlogout/icons/reboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saatvik333/hyprland-dotfiles/HEAD/wlogout/icons/reboot.png -------------------------------------------------------------------------------- /wlogout/icons/hibernate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saatvik333/hyprland-dotfiles/HEAD/wlogout/icons/hibernate.png -------------------------------------------------------------------------------- /wlogout/icons/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saatvik333/hyprland-dotfiles/HEAD/wlogout/icons/shutdown.png -------------------------------------------------------------------------------- /wlogout/icons/suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saatvik333/hyprland-dotfiles/HEAD/wlogout/icons/suspend.png -------------------------------------------------------------------------------- /pavucontrol.ini: -------------------------------------------------------------------------------- 1 | [window] 2 | width=605 3 | height=400 4 | sinkInputType=1 5 | sourceOutputType=1 6 | sinkType=0 7 | sourceType=1 8 | showVolumeMeters=1 9 | -------------------------------------------------------------------------------- /QtProject.conf: -------------------------------------------------------------------------------- 1 | [FileDialog] 2 | history=@Invalid() 3 | lastVisited=file:///home/saatvik333/Pictures/Wallpapers/Nord 4 | qtVersion=6.9.1 5 | viewMode=Detail 6 | -------------------------------------------------------------------------------- /nvim/stylua.toml: -------------------------------------------------------------------------------- 1 | indent_type = "Spaces" 2 | indent_width = 2 3 | column_width = 120 4 | line_endings = "Unix" 5 | quote_style = "AutoPreferDouble" 6 | call_parentheses = "Always" 7 | -------------------------------------------------------------------------------- /nvim/README.md: -------------------------------------------------------------------------------- 1 | # 💤 LazyVim 2 | 3 | A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). 4 | Refer to the [documentation](https://lazyvim.github.io/installation) to get started. 5 | -------------------------------------------------------------------------------- /chrome-flags.conf: -------------------------------------------------------------------------------- 1 | --password-store=gnome-libsecret 2 | --ozone-platform-hint=wayland 3 | --gtk-version=4 4 | --ignore-gpu-blocklist 5 | --enable-features=TouchpadOverscrollHistoryNavigation 6 | --enable-wayland-ime -------------------------------------------------------------------------------- /code-flags.conf: -------------------------------------------------------------------------------- 1 | --ozone-platform-hint=wayland 2 | --gtk-version=4 3 | --ignore-gpu-blocklist 4 | --enable-features=TouchpadOverscrollHistoryNavigation 5 | --enable-wayland-ime 6 | --password-store=gnome-libsecret -------------------------------------------------------------------------------- /nvim/lua/config/keymaps.lua: -------------------------------------------------------------------------------- 1 | -- Keymaps are automatically loaded on the VeryLazy event 2 | -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua 3 | -- Add any additional keymaps here 4 | -------------------------------------------------------------------------------- /hypr/config/layouts.conf: -------------------------------------------------------------------------------- 1 | # LAYOUT CONFIGURATION 2 | 3 | dwindle { 4 | preserve_split = true 5 | smart_split = false 6 | smart_resizing = false 7 | } 8 | 9 | master { 10 | new_status = master 11 | mfact = $masterRatio 12 | } -------------------------------------------------------------------------------- /nvim/.neoconf.json: -------------------------------------------------------------------------------- 1 | { 2 | "neodev": { 3 | "library": { 4 | "enabled": true, 5 | "plugins": true 6 | } 7 | }, 8 | "neoconf": { 9 | "plugins": { 10 | "lua_ls": { 11 | "enabled": true 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /wallust/templates/vscode: -------------------------------------------------------------------------------- 1 | {{color0}} 2 | {{color1}} 3 | {{color2}} 4 | {{color3}} 5 | {{color4}} 6 | {{color5}} 7 | {{color6}} 8 | {{color7}} 9 | {{color8}} 10 | {{color9}} 11 | {{color10}} 12 | {{color11}} 13 | {{color12}} 14 | {{color13}} 15 | {{color14}} 16 | {{color15}} 17 | -------------------------------------------------------------------------------- /wofi/config: -------------------------------------------------------------------------------- 1 | width=600 2 | height=400 3 | location=center 4 | show=drun 5 | prompt=Applications 6 | filter_rate=100 7 | allow_markup=true 8 | no_actions=true 9 | halign=fill 10 | orientation=vertical 11 | content_halign=fill 12 | insensitive=true 13 | allow_images=true 14 | image_size=36 15 | matching=fuzzy 16 | hide_scroll=true 17 | -------------------------------------------------------------------------------- /nvim/lua/plugins/neowallust.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "RedsXDD/neopywal.nvim", 3 | name = "neopywal", 4 | lazy = false, 5 | priority = 1000, 6 | version = "*", 7 | config = function() 8 | require("neopywal").setup({ 9 | use_wallust = true, 10 | transparent_background = true, 11 | }) 12 | end, 13 | } 14 | -------------------------------------------------------------------------------- /hypr/hyprrules.conf: -------------------------------------------------------------------------------- 1 | # HYPRLAND WINDOW RULES CONFIGURATION 2 | 3 | source = $HOME/.config/hypr/rules/general.conf 4 | source = $HOME/.config/hypr/rules/floating.conf 5 | source = $HOME/.config/hypr/rules/dialogs.conf 6 | source = $HOME/.config/hypr/rules/media.conf 7 | source = $HOME/.config/hypr/rules/opacity.conf 8 | source = $HOME/.config/hypr/rules/layers.conf -------------------------------------------------------------------------------- /hypr/rules/general.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | # Ignore maximize requests from apps 3 | windowrule = suppressevent maximize, class:.* 4 | # Fix some dragging issues with XWayland 5 | windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 6 | # No blur for empty class/title 7 | windowrule = noblur,class:^()$,title:^()$ 8 | -------------------------------------------------------------------------------- /vicinae/vicinae.json: -------------------------------------------------------------------------------- 1 | { 2 | "faviconService": "google", 3 | "font": { 4 | "size": 10 5 | }, 6 | "popToRootOnClose": false, 7 | "rootSearch": { 8 | "searchFiles": false 9 | }, 10 | "theme": { 11 | }, 12 | "window": { 13 | "csd": true, 14 | "opacity": 0.95, 15 | "rounding": 10 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- bootstrap lazy.nvim, LazyVim and your plugins 2 | require("config.lazy") 3 | vim.opt.autochdir = true 4 | vim.api.nvim_set_hl(0, "StatusLine", { bg = "#07070A", fg = "#ADADB2" }) 5 | vim.api.nvim_set_hl(0, "StatusLineNC", { bg = "", fg = "#828288" }) 6 | vim.api.nvim_set_hl(0, "StatusLineTerm", { bg = "#07070A", fg = "#ADADB2" }) 7 | vim.cmd.colorscheme("neopywal") 8 | -------------------------------------------------------------------------------- /wlogout/layout: -------------------------------------------------------------------------------- 1 | { 2 | "label": "lock", 3 | "action": "hyprlock", 4 | "keybind": "l" 5 | } 6 | { 7 | "label": "reboot", 8 | "action": "systemctl reboot", 9 | "keybind": "r" 10 | } 11 | { 12 | "label": "logout", 13 | "action": "hyprctl dispatch exit", 14 | "keybind": "e" 15 | } 16 | { 17 | "label": "shutdown", 18 | "action": "systemctl poweroff", 19 | "keybind": "s" 20 | } 21 | -------------------------------------------------------------------------------- /hypr/config/border.conf: -------------------------------------------------------------------------------- 1 | # Hyprland with colors from wallust 2 | # You can use this template by adding the following to wallust.toml: 3 | # hypr = { src = "hyprland.conf", dst = "~/.config/hypr/colors.conf" } 4 | # and then on hyprland.conf: 5 | # source = ~/.config/hypr/colors.conf 6 | 7 | general { 8 | col.active_border = rgb(7D8078) rgb(BE8877) rgb(A8A597) rgb(FAE8D2) rgb(A27474) 9 | col.inactive_border = rgba(151416ee) 10 | } 11 | -------------------------------------------------------------------------------- /hypr/config/autostart.conf: -------------------------------------------------------------------------------- 1 | # AUTOSTART APPLICATIONS 2 | exec-once = waybar 3 | exec-once = hypridle 4 | exec-once = hyprpolkitagent 5 | exec-once = udiskie 6 | exec-once = swaync 7 | exec-once = easyeffects --gapplication-service 8 | exec-once = gnome-keyring-daemon --start --components=secrets 9 | exec-once = swww init 10 | exec-once = waytrogen -r 11 | exec-once = hyprswitch init --show-title --size-factor 5 --workspaces-per-row 4 --custom-css $configDir/hyprswitch.css 12 | -------------------------------------------------------------------------------- /wallust/templates/border.conf: -------------------------------------------------------------------------------- 1 | # Hyprland with colors from wallust 2 | # You can use this template by adding the following to wallust.toml: 3 | # hypr = { src = "hyprland.conf", dst = "~/.config/hypr/colors.conf" } 4 | # and then on hyprland.conf: 5 | # source = ~/.config/hypr/colors.conf 6 | 7 | general { 8 | col.active_border = rgb({{color3 | strip}}) rgb({{color4 | strip}}) rgb({{color5 | strip}}) rgb({{color6 | strip}}) rgb({{color2 | strip}}) 9 | col.inactive_border = rgba({{background | strip}}ee) 10 | } 11 | -------------------------------------------------------------------------------- /nvim/lua/plugins/asset/illuminati-logo.txt: -------------------------------------------------------------------------------- 1 | ⠀⠀⠀⡀⠀⡀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 2 | ⠐⠈⠊⠛⠋⠙⠛⠛⠂⠀⠀⢀⠈⢀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀ 3 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢡⠀⠈⣀⢊⡜⠄⡇⠀⡐⠀⢀⠀⠀⠀⠀⠀⠀⠀ 4 | ⠀⠀⠀⠀⠀⠀⠀⠈⢆⢀⢣⣠⢣⡟⢻⣌⢴⡴⡀⡠⠃⠀⡀⠀⠀⠀⠀⠀ 5 | ⠀⠀⠀⠀⢄⠀⠈⠢⡢⣳⡿⣡⡟⠀⠀⠹⣎⢻⣝⣕⡴⠊⠀⡀⠀⠀⠀⠀ 6 | ⠀⠀⠀⢀⡀⠈⢓⣿⣾⡟⣱⠏⠀⠀⠀⠀⠹⣦⢻⣿⣮⣒⠁⠀⡀⠀⠀⠀ 7 | ⠀⠀⠀⠀⠀⠩⢷⣿⡟⣼⣯⣴⣞⣛⣙⣓⡦⣜⣧⡹⣿⡶⠍⠁⠀⠀⠀⠀ 8 | ⠀⠁⠀⠀⠀⢉⣽⢏⣼⣿⡛⠉⣇⢿⡿⢸⠋⢙⣿⢷⡹⣯⣉⠁⠀⠀⠀⠀ 9 | ⠀⠀⠀⠀⠀⣐⢎⡾⠃⠈⠙⠷⣮⣵⣾⣥⠶⠛⠁⠈⢷⡜⣆⠀⠈⠁⠀⠀ 10 | ⠀⠀⠀⠈⢡⢣⣾⣁⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣈⣿⣌⠌⠁⠀⠀⠀ 11 | ⠀⠀⠀⠀⠓⠒⢒⠖⠖⡶⣶⣶⣿⣷⣷⣷⣾⣿⢷⡲⠲⣖⠚⠚⠂⠀⠀⠀ 12 | ⠀⠀⠀⠀⠀⠀⠁⢀⠜⠈⡼⠘⡏⡟⡟⢸⠡⢳⠁⠑⡄⠀⠑⠀⠀⠀⠀⠀ 13 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⢠⠃⠀⡇⠀⡇⠀⢡⠀⠈⠀⠀⠀⠀⠀⠀⠀ 14 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⣀⡁⣀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀ 15 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠓⠛⠛⠛⠋⠙⠋⠃⠛⠉⠀⠑⠛⠛⠛ 16 | -------------------------------------------------------------------------------- /kitty/colors.conf: -------------------------------------------------------------------------------- 1 | cursor #B3B1AC 2 | 3 | foreground #BFBDC0 4 | background #151416 5 | 6 | # black 7 | color0 #504D49 8 | color8 #6C6A6E 9 | 10 | # red 11 | color1 #716D74 12 | color9 #716D74 13 | 14 | # green 15 | color2 #A27474 16 | color10 #A27474 17 | 18 | # yellow 19 | color3 #7D8078 20 | color11 #7D8078 21 | 22 | # blue 23 | color4 #BE8877 24 | color12 #BE8877 25 | 26 | # magenta 27 | color5 #A8A597 28 | color13 #A8A597 29 | 30 | # cyan 31 | color6 #FAE8D2 32 | color14 #FAE8D2 33 | 34 | # white 35 | color7 #9B989D 36 | color15 #9B989D 37 | -------------------------------------------------------------------------------- /hypr/config/plugins.conf: -------------------------------------------------------------------------------- 1 | # PLUGIN CONFIGURATION 2 | 3 | plugin { 4 | # hyprexpo { 5 | # columns = 2 6 | # gap_size = 3 7 | # bg_col = rgb(000000) 8 | # workspace_method = first 1 # [center/first] [workspace] 9 | 10 | # enable_gesture = true # Enable laptop touchpad gestures 11 | # gesture_fingers = 3 # 3 or 4 fingers 12 | # gesture_distance = 300 # How far is the "max" 13 | # gesture_positive = false # positive = swipe down, negative = swipe up 14 | # } 15 | } -------------------------------------------------------------------------------- /hypr/config/hyprswitch.css: -------------------------------------------------------------------------------- 1 | * { 2 | color: #BFBDC0; 3 | background: #151416; 4 | border: none; 5 | border-radius: 10px; 6 | } 7 | 8 | .monitor { 9 | padding: 10px 6px; 10 | } 11 | 12 | .workspace { 13 | margin: 0 4px; 14 | } 15 | 16 | .index { 17 | color: #A27474; 18 | background: #151416; 19 | border-radius: 10px; 20 | padding: 3px; 21 | } 22 | 23 | .client { 24 | border-radius: var(--border-radius); 25 | background-color: var(--background); 26 | border: 3px solid var(--border-color); 27 | } 28 | 29 | .client_active { 30 | border: 3px solid #FAE8D2; 31 | } 32 | -------------------------------------------------------------------------------- /wallust/templates/neopywal.vim: -------------------------------------------------------------------------------- 1 | let background = "{{background}}" 2 | let foreground = "{{foreground}}" 3 | let cursor = "{{cursor}}" 4 | let color0 = "{{color0}}" 5 | let color1 = "{{color1}}" 6 | let color2 = "{{color2}}" 7 | let color3 = "{{color3}}" 8 | let color4 = "{{color4}}" 9 | let color5 = "{{color5}}" 10 | let color6 = "{{color6}}" 11 | let color7 = "{{color7}}" 12 | let color8 = "{{color8}}" 13 | let color9 = "{{color9}}" 14 | let color10 = "{{color10}}" 15 | let color11 = "{{color11}}" 16 | let color12 = "{{color12}}" 17 | let color13 = "{{color13}}" 18 | let color14 = "{{color14}}" 19 | let color15 = "{{color15}}" 20 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "zsh/plugins/fast-syntax-highlighting"] 2 | path = zsh/plugins/fast-syntax-highlighting 3 | url = https://github.com/zdharma-continuum/fast-syntax-highlighting.git 4 | [submodule "zsh/plugins/zsh-autosuggestions"] 5 | path = zsh/plugins/zsh-autosuggestions 6 | url = https://github.com/zsh-users/zsh-autosuggestions.git 7 | [submodule "themes/gtk/Colloid-gtk-theme"] 8 | path = themes/gtk/Colloid-gtk-theme 9 | url = https://github.com/vinceliuice/Colloid-gtk-theme 10 | [submodule "themes/sddm/obscure-sddm-theme"] 11 | path = themes/sddm/obscure-sddm-theme 12 | url = https://github.com/saatvik333/obscure-sddm-theme 13 | -------------------------------------------------------------------------------- /alacritty/alacritty.toml: -------------------------------------------------------------------------------- 1 | # Alacritty Configuration 2 | 3 | [general] 4 | import = ["./colors.toml"] 5 | 6 | [window] 7 | padding.x = 10 8 | padding.y = 10 9 | dynamic_padding = true 10 | opacity = 0.9 11 | decorations = "none" 12 | 13 | [font] 14 | size = 12 15 | 16 | # NOTE: alacritty doesn't support ligatures, just using this since it's my preferred font with nerdfonts. 17 | [font.normal] 18 | family = "Liga SFMono Nerd Font" 19 | 20 | [scrolling] 21 | multiplier = 6 22 | 23 | [selection] 24 | save_to_clipboard = true 25 | 26 | [cursor] 27 | style.shape = "Block" 28 | unfocused_hollow = true 29 | 30 | [mouse] 31 | hide_when_typing = true 32 | -------------------------------------------------------------------------------- /wallust/templates/hyprswitch.css: -------------------------------------------------------------------------------- 1 | * { 2 | color: {{foreground}}; 3 | background: {{background}}; 4 | border: none; 5 | border-radius: 10px; 6 | } 7 | 8 | .monitor { 9 | padding: 10px 6px; 10 | } 11 | 12 | .workspace { 13 | margin: 0 4px; 14 | } 15 | 16 | .index { 17 | color: {{color2}}; 18 | background: {{background}}; 19 | border-radius: 10px; 20 | padding: 3px; 21 | } 22 | 23 | .client { 24 | border-radius: var(--border-radius); 25 | background-color: var(--background); 26 | border: 3px solid var(--border-color); 27 | } 28 | 29 | .client_active { 30 | border: 3px solid {{color6}}; 31 | } 32 | -------------------------------------------------------------------------------- /wallust/templates/kitty.conf: -------------------------------------------------------------------------------- 1 | cursor {{cursor}} 2 | 3 | foreground {{foreground}} 4 | background {{background}} 5 | 6 | # black 7 | color0 {{color0 }} 8 | color8 {{color8 }} 9 | 10 | # red 11 | color1 {{color1 }} 12 | color9 {{color9 }} 13 | 14 | # green 15 | color2 {{color2 }} 16 | color10 {{color10 }} 17 | 18 | # yellow 19 | color3 {{color3 }} 20 | color11 {{color11 }} 21 | 22 | # blue 23 | color4 {{color4 }} 24 | color12 {{color12 }} 25 | 26 | # magenta 27 | color5 {{color5 }} 28 | color13 {{color13 }} 29 | 30 | # cyan 31 | color6 {{color6 }} 32 | color14 {{color14 }} 33 | 34 | # white 35 | color7 {{color7 }} 36 | color15 {{color15 }} 37 | -------------------------------------------------------------------------------- /nvim/lua/config/autocmds.lua: -------------------------------------------------------------------------------- 1 | -- Autocmds are automatically loaded on the VeryLazy event 2 | -- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua 3 | -- 4 | -- Add any additional autocmds here 5 | -- with `vim.api.nvim_create_autocmd` 6 | -- 7 | -- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults) 8 | -- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell") 9 | 10 | -- Autosave on insert leave and text change 11 | -- vim.api.nvim_create_autocmd({ "InsertLeave", "TextChanged" }, { 12 | -- pattern = { "*" }, 13 | -- command = "silent! wall", 14 | -- nested = true, 15 | -- }) 16 | -------------------------------------------------------------------------------- /alacritty/colors.toml: -------------------------------------------------------------------------------- 1 | # wallust.toml needs to include this 2 | # alacritty = { template = 'alacritty.toml', target = '~/.config/alacritty/colors.toml' } 3 | # and alacritty.toml should import that file under [general] 4 | [colors.primary] 5 | background = "#151416" 6 | foreground = "#BFBDC0" 7 | 8 | [colors.normal] 9 | black = "#504D49" 10 | red = "#716D74" 11 | green = "#A27474" 12 | yellow = "#7D8078" 13 | blue = "#BE8877" 14 | magenta = "#A8A597" 15 | cyan = "#FAE8D2" 16 | white = "#9B989D" 17 | 18 | [colors.bright] 19 | black = "#6C6A6E" 20 | red = "#716D74" 21 | green = "#A27474" 22 | yellow = "#7D8078" 23 | blue = "#BE8877" 24 | magenta = "#A8A597" 25 | cyan = "#FAE8D2" 26 | white = "#9B989D" 27 | -------------------------------------------------------------------------------- /bash/bashrc: -------------------------------------------------------------------------------- 1 | # ~/.config/bash/bashrc 2 | # Bash-specific configuration 3 | 4 | # Starship configuration 5 | export STARSHIP_CONFIG=$HOME/.config/starship/starship.toml 6 | export STARSHIP_CACHE=~/.starship/cache 7 | eval "$(starship init bash)" 8 | 9 | eval "$(thefuck --alias)" 10 | 11 | # Source the central configuration 12 | if [ -f ~/.config/shell.env ]; then 13 | source ~/.config/shell.env 14 | fi 15 | 16 | # Bash-specific settings 17 | export HISTCONTROL=ignoreboth 18 | export HISTSIZE=1000 19 | export HISTFILESIZE=2000 20 | shopt -s histappend 21 | shopt -s checkwinsize 22 | 23 | # Bash-specific prompt 24 | PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 25 | # Bash-specific aliases 26 | alias bashconfig='$EDITOR ~/.config/bash/bashrc' 27 | -------------------------------------------------------------------------------- /wallust/templates/alacritty.toml: -------------------------------------------------------------------------------- 1 | # wallust.toml needs to include this 2 | # alacritty = { template = 'alacritty.toml', target = '~/.config/alacritty/colors.toml' } 3 | # and alacritty.toml should import that file under [general] 4 | [colors.primary] 5 | background = "{{background}}" 6 | foreground = "{{foreground}}" 7 | 8 | [colors.normal] 9 | black = "{{color0}}" 10 | red = "{{color1}}" 11 | green = "{{color2}}" 12 | yellow = "{{color3}}" 13 | blue = "{{color4}}" 14 | magenta = "{{color5}}" 15 | cyan = "{{color6}}" 16 | white = "{{color7}}" 17 | 18 | [colors.bright] 19 | black = "{{color8}}" 20 | red = "{{color9}}" 21 | green = "{{color10}}" 22 | yellow = "{{color11}}" 23 | blue = "{{color12}}" 24 | magenta = "{{color13}}" 25 | cyan = "{{color14}}" 26 | white = "{{color15}}" 27 | -------------------------------------------------------------------------------- /hypr/rules/opacity.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # OPACITY WINDOW RULES 4 | windowrule = opacity $opacityFloat $opacityFloat,class:^(hyprswitch)$ 5 | # windowrule = opacity $opacityFloat $opacityFloat,class:^(Dunst)$ 6 | windowrule = opacity $opacityFloat $opacityFloat,class:^(thunar)$ 7 | windowrule = opacity $opacityFloat $opacityFloat,class:^(code)$ 8 | windowrule = opacity $opacityFloat $opacityFloat,class:^(cursor)$ 9 | windowrule = opacity $opacityFloat $opacityFloat,class:^(kiro-url-handler)$ 10 | windowrule = opacity $opacityFloat $opacityFloat,title:^(nvim.*)$ 11 | windowrule = opacity $opacityFloat $opacityFloat,title:^(zsh*)$ 12 | 13 | # Special opacity for typing test 14 | windowrule = opacity 0.75 0.75,class:(zen), title:^(Monkeytype \| A minimalistic, customizable typing test — Zen Browser)$ -------------------------------------------------------------------------------- /hypr/keybinds/applications.conf: -------------------------------------------------------------------------------- 1 | # APPLICATION KEYBINDINGS 2 | 3 | bind = $mainMod, RETURN, exec, $terminal 4 | bind = $mainMod SHIFT, RETURN, exec, [float; size 800 450; center] $terminal 5 | bind = $mainMod, E, exec, $fileManager 6 | bind = $mainMod, B, exec, $browser 7 | bind = $mainMod, A, exec, pgrep wofi || $launcher 8 | bind = $mainMod SHIFT, A, exec, ~/.config/scripts/utils/util-launcher.sh 9 | bind = $mainMod, N, exec, swaync-client -t 10 | bind = $mainMod, Escape, exec, pgrep wlogout || wlogout -b 2 11 | bind = $mainMod SHIFT, P, exec, hyprpicker -a 12 | bind = $mainMod, W, exec, waytrogen 13 | bind = $mainMod ALT, W, exec, pgrep -x waybar >/dev/null && killall waybar || waybar & 14 | bind = $mainMod ALT, B, exec, bongocat -c ~/.config/bongocat/bongo.conf --toggle 15 | bind = $mainMod ALT, N, exec, ~/.config/scripts/restart-swaync.sh 16 | -------------------------------------------------------------------------------- /nvim/lua/config/options.lua: -------------------------------------------------------------------------------- 1 | -- Options are automatically loaded before lazy.nvim startup 2 | -- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua 3 | -- Add any additional options here 4 | 5 | 6 | -- Ensure terminal opens in current working directory 7 | vim.api.nvim_create_autocmd("TermOpen", { 8 | callback = function() 9 | vim.opt_local.number = false 10 | vim.opt_local.relativenumber = false 11 | vim.opt_local.signcolumn = "no" 12 | end, 13 | }) 14 | 15 | vim.cmd.colorscheme = nil 16 | vim.opt.termguicolors = false 17 | vim.cmd("set t_Co=256") 18 | 19 | -- Ensure format on save is enabled 20 | vim.api.nvim_create_autocmd("BufWritePre", { 21 | pattern = "*", 22 | callback = function(args) 23 | require("conform").format({ bufnr = args.buf }) 24 | end, 25 | }) 26 | -------------------------------------------------------------------------------- /hypr/config/input.conf: -------------------------------------------------------------------------------- 1 | # INPUT CONFIGURATION 2 | 3 | input { 4 | kb_layout = us 5 | kb_variant = 6 | kb_model = 7 | kb_options = caps:escape # Map Caps Lock to Escape (Vim-friendly) 8 | kb_rules = 9 | follow_mouse = 1 10 | sensitivity = 0 11 | 12 | touchpad { 13 | natural_scroll = true 14 | scroll_factor = 0.69 15 | } 16 | } 17 | 18 | gestures { 19 | workspace_swipe = true 20 | workspace_swipe_fingers = 3 21 | workspace_swipe_distance = 300 22 | workspace_swipe_min_speed_to_force = 25 23 | workspace_swipe_cancel_ratio = 0.25 24 | workspace_swipe_direction_lock_threshold = 15 25 | } 26 | 27 | device { 28 | name = epic-mouse-v1 29 | sensitivity = 0 30 | natural_scroll = true 31 | } 32 | 33 | binds { 34 | scroll_event_delay = 0 35 | hide_special_on_workspace_change = true 36 | } -------------------------------------------------------------------------------- /wallust/templates/vscode.json: -------------------------------------------------------------------------------- 1 | { 2 | "checksum": ":)", 3 | "wallpaper": "{{wallpaper}}", 4 | "alpha": "100", 5 | 6 | "special": { 7 | "background": "{{background}}", 8 | "foreground": "{{foreground}}", 9 | "cursor": "{{cursor}}" 10 | }, 11 | "colors": { 12 | "color0": "{{color0}}", 13 | "color1": "{{color1}}", 14 | "color2": "{{color2}}", 15 | "color3": "{{color3}}", 16 | "color4": "{{color4}}", 17 | "color5": "{{color5}}", 18 | "color6": "{{color6}}", 19 | "color7": "{{color7}}", 20 | "color8": "{{color8}}", 21 | "color9": "{{color9}}", 22 | "color10": "{{color10}}", 23 | "color11": "{{color11}}", 24 | "color12": "{{color12}}", 25 | "color13": "{{color13}}", 26 | "color14": "{{color14}}", 27 | "color15": "{{color15}}" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /wofi/colors.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for wallust 2 | * You can use this template by adding the following to wallust.toml: 3 | css = { src = "wofi.css", dst = "~/.config/wofi/colors.css" } 4 | */ 5 | 6 | :root { 7 | --wallpaper: url("/home/saatvik333/Pictures/Wallpapers/Everforest/everforest-flowers.png"); 8 | 9 | /* Special */ 10 | --background: #151416; 11 | --foreground: #BFBDC0; 12 | --cursor: #B3B1AC; 13 | 14 | /* Colors */ 15 | --color0: #504D49; 16 | --color1: #716D74; 17 | --color2: #A27474; 18 | --color3: #7D8078; 19 | --color4: #BE8877; 20 | --color5: #A8A597; 21 | --color6: #FAE8D2; 22 | --color7: #9B989D; 23 | --color8: #6C6A6E; 24 | --color9: #716D74; 25 | --color10: #A27474; 26 | --color11: #7D8078; 27 | --color12: #BE8877; 28 | --color13: #A8A597; 29 | --color14: #FAE8D2; 30 | --color15: #9B989D; 31 | } 32 | -------------------------------------------------------------------------------- /hypr/rules/layers.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # LAYER RULES 4 | layerrule = blur,wofi 5 | layerrule = xray 1,wofi 6 | layerrule = dimaround,wofi 7 | layerrule = ignorezero,wofi 8 | layerrule = ignorealpha 0.9,wofi 9 | 10 | layerrule = blur,waybar 11 | layerrule = xray 1,waybar 12 | layerrule = ignorezero,waybar 13 | layerrule = blurpopups,waybar 14 | 15 | layerrule = noanim,hyprswitch 16 | 17 | layerrule = blur,swaync-notification-window 18 | layerrule = blur,swaync-control-center 19 | layerrule = xray 1,swaync-notification-window 20 | layerrule = xray 1,swaync-control-center 21 | layerrule = ignorezero,swaync-notification-window 22 | layerrule = ignorezero,swaync-control-center 23 | layerrule = ignorealpha 0.45,swaync-control-center 24 | layerrule = ignorealpha 0.45,swaync-notification-window 25 | layerrule = animation slide right, swaync-control-center 26 | 27 | layerrule = blur,logout_dialog 28 | -------------------------------------------------------------------------------- /hypr/hyprland.conf: -------------------------------------------------------------------------------- 1 | # HYPRLAND MAIN CONFIGURATION 2 | 3 | # CORE CONFIGURATION MODULES 4 | source = $HOME/.config/hypr/config/variables.conf 5 | source = $HOME/.config/hypr/config/environment.conf 6 | source = $HOME/.config/hypr/config/border.conf 7 | source = $HOME/.config/hypr/config/autostart.conf 8 | source = $HOME/.config/hypr/config/appearance.conf 9 | source = $HOME/.config/hypr/config/animations.conf 10 | source = $HOME/.config/hypr/config/layouts.conf 11 | source = $HOME/.config/hypr/config/input.conf 12 | source = $HOME/.config/hypr/config/plugins.conf 13 | 14 | # KEYBINDING MODULES 15 | source = $HOME/.config/hypr/keybinds/applications.conf 16 | source = $HOME/.config/hypr/keybinds/windows.conf 17 | source = $HOME/.config/hypr/keybinds/workspaces.conf 18 | source = $HOME/.config/hypr/keybinds/media.conf 19 | 20 | # SYSTEM-SPECIFIC MODULES 21 | source = $HOME/.config/hypr/monitors.conf 22 | source = $HOME/.config/hypr/hyprrules.conf -------------------------------------------------------------------------------- /wallust/templates/colors.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for wallust 2 | * You can use this template by adding the following to wallust.toml: 3 | css = { src = "colors.css", dst = "~/.config/" } 4 | */ 5 | 6 | :root { 7 | --wallpaper: url("{{wallpaper}}"); 8 | 9 | /* Special */ 10 | --background: {{background}}; 11 | --foreground: {{foreground}}; 12 | --cursor: {{cursor}}; 13 | 14 | /* Colors */ 15 | --color0: {{color0 }}; 16 | --color1: {{color1 }}; 17 | --color2: {{color2 }}; 18 | --color3: {{color3 }}; 19 | --color4: {{color4 }}; 20 | --color5: {{color5 }}; 21 | --color6: {{color6 }}; 22 | --color7: {{color7 }}; 23 | --color8: {{color8 }}; 24 | --color9: {{color9 }}; 25 | --color10: {{color10}}; 26 | --color11: {{color11}}; 27 | --color12: {{color12}}; 28 | --color13: {{color13}}; 29 | --color14: {{color14}}; 30 | --color15: {{color15}}; 31 | } 32 | -------------------------------------------------------------------------------- /hypr/hypridle.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # HYPRIDLE CONFIGURATION 4 | general { 5 | lock_cmd = pidof hyprlock || hyprlock 6 | before_sleep_cmd = loginctl lock-session 7 | after_sleep_cmd = hyprctl dispatch dpms on 8 | } 9 | 10 | # Stage 1: Dim screen (early warning) 11 | listener { 12 | timeout = $timeoutDim 13 | on-timeout = brightnessctl -s set 30% 14 | on-resume = brightnessctl -r 15 | } 16 | 17 | # Stage 2: Lock screen (security) 18 | listener { 19 | timeout = $timeoutLock 20 | on-timeout = loginctl lock-session 21 | } 22 | 23 | # Stage 3: Turn off display (power saving) 24 | listener { 25 | timeout = $timeoutScreen 26 | on-timeout = hyprctl dispatch dpms off 27 | on-resume = hyprctl dispatch dpms on 28 | } 29 | 30 | # Stage 4: Suspend system (maximum power saving) 31 | listener { 32 | timeout = $timeoutSuspend 33 | on-timeout = systemctl suspend 34 | } 35 | -------------------------------------------------------------------------------- /wallust/templates/wofi.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for wallust 2 | * You can use this template by adding the following to wallust.toml: 3 | css = { src = "wofi.css", dst = "~/.config/wofi/colors.css" } 4 | */ 5 | 6 | :root { 7 | --wallpaper: url("{{wallpaper}}"); 8 | 9 | /* Special */ 10 | --background: {{background}}; 11 | --foreground: {{foreground}}; 12 | --cursor: {{cursor}}; 13 | 14 | /* Colors */ 15 | --color0: {{color0 }}; 16 | --color1: {{color1 }}; 17 | --color2: {{color2 }}; 18 | --color3: {{color3 }}; 19 | --color4: {{color4 }}; 20 | --color5: {{color5 }}; 21 | --color6: {{color6 }}; 22 | --color7: {{color7 }}; 23 | --color8: {{color8 }}; 24 | --color9: {{color9 }}; 25 | --color10: {{color10}}; 26 | --color11: {{color11}}; 27 | --color12: {{color12}}; 28 | --color13: {{color13}}; 29 | --color14: {{color14}}; 30 | --color15: {{color15}}; 31 | } 32 | -------------------------------------------------------------------------------- /waybar/colors.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for Waybar 2 | * You can add it to wallust.toml with: 3 | 4 | waybar = { src = "waybar.css", dst = "~/.config/waybar/colors.css" } 5 | 6 | * And then in you waybar 'style.css' file, import it with: 7 | 8 | @import url("colors.css"); 9 | */ 10 | 11 | @define-color cursor #B3B1AC; 12 | @define-color background #BFBDC0; 13 | @define-color foreground #151416; 14 | @define-color color0 #504D49; 15 | @define-color color1 #716D74; 16 | @define-color color2 #A27474; 17 | @define-color color3 #7D8078; 18 | @define-color color4 #BE8877; 19 | @define-color color5 #A8A597; 20 | @define-color color6 #FAE8D2; 21 | @define-color color7 #9B989D; 22 | @define-color color8 #6C6A6E; 23 | @define-color color9 #716D74; 24 | @define-color color10 #A27474; 25 | @define-color color11 #7D8078; 26 | @define-color color12 #BE8877; 27 | @define-color color13 #A8A597; 28 | @define-color color14 #FAE8D2; 29 | @define-color color15 #9B989D; 30 | -------------------------------------------------------------------------------- /wlogout/colors.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for wlogout 2 | * You can add it to wallust.toml with: 3 | 4 | waybar = { src = "wlogout.css", dst = "~/.config/wlogout/colors.css" } 5 | 6 | * And then in you wlogout 'style.css' file, import it with: 7 | 8 | @import url("colors.css"); 9 | */ 10 | 11 | @define-color cursor #B3B1AC; 12 | @define-color background #151416; 13 | @define-color foreground #99979A; 14 | @define-color color0 #504D49; 15 | @define-color color1 #716D74; 16 | @define-color color2 #A27474; 17 | @define-color color3 #7D8078; 18 | @define-color color4 #BE8877; 19 | @define-color color5 #A8A597; 20 | @define-color color6 #FAE8D2; 21 | @define-color color7 #9B989D; 22 | @define-color color8 #6C6A6E; 23 | @define-color color9 #716D74; 24 | @define-color color10 #A27474; 25 | @define-color color11 #7D8078; 26 | @define-color color12 #BE8877; 27 | @define-color color13 #A8A597; 28 | @define-color color14 #FAE8D2; 29 | @define-color color15 #9B989D; 30 | -------------------------------------------------------------------------------- /hypr/rules/media.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # PICTURE-IN-PICTURE (PIP) RULES 4 | windowrule = float, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 5 | windowrule = pin, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 6 | windowrule = size 480 270, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 7 | windowrule = noblur, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 8 | windowrule = move 74.5% 4.25%, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 9 | windowrule = animation slide, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 10 | windowrule = opaque, class:(firefox|google-chrome|zen), title:.*(Picture-in-Picture|Picture in Picture).* 11 | 12 | # Image viewer Qview 13 | windowrule = opaque, class:(com.interversehq.qView) -------------------------------------------------------------------------------- /swaync/colors.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for Swaync 2 | * You can add it to wallust.toml with: 3 | 4 | swaync = { src = "swaync.css", dst = "~/.config/swaync/colors.css" } 5 | 6 | * And then in you swaync 'style.css' file, import it with: 7 | 8 | @import url("colors.css"); 9 | */ 10 | 11 | @define-color cursor #B3B1AC; 12 | @define-color background #151416; 13 | @define-color foreground #BFBDC0; 14 | @define-color color0 #504D49; 15 | @define-color color1 #716D74; 16 | @define-color color2 #A27474; 17 | @define-color color3 #7D8078; 18 | @define-color color4 #BE8877; 19 | @define-color color5 #A8A597; 20 | @define-color color6 #FAE8D2; 21 | @define-color color7 #9B989D; 22 | @define-color color8 #6C6A6E; 23 | @define-color color9 #716D74; 24 | @define-color color10 #A27474; 25 | @define-color color11 #7D8078; 26 | @define-color color12 #BE8877; 27 | @define-color color13 #A8A597; 28 | @define-color color14 #FAE8D2; 29 | @define-color color15 #9B989D; 30 | -------------------------------------------------------------------------------- /wallust/templates/gtk.css: -------------------------------------------------------------------------------- 1 | @define-color accent_color {{color2 | darken(0.1)}} 2 | @define-color accent_fg_color {{color4 | lighten(0.1)}}; 3 | @define-color accent_bg_color {{color2 | darken(0.1)}} 4 | @define-color window_bg_color {{color0 | darken(0.1)}}; 5 | @define-color window_fg_color {{color7 | lighten(0.1)}}; 6 | @define-color headerbar_bg_color {{color0 | darken(0.1)}}; 7 | @define-color headerbar_fg_color {{color7 | lighten(0.1)}}; 8 | @define-color popover_bg_color {{color0 | darken(0.1)}}; 9 | @define-color popover_fg_color {{color7 | lighten(0.1)}}; 10 | @define-color view_bg_color {{color0}} 11 | @define-color view_fg_color {{color7 | lighten(0.1)}}; 12 | @define-color card_bg_color {{color0}} 13 | @define-color card_fg_color {{color7 | lighten(0.1)}}; 14 | @define-color sidebar_bg_color @window_bg_color; 15 | @define-color sidebar_fg_color @window_fg_color; 16 | @define-color sidebar_border_color @window_bg_color; 17 | @define-color sidebar_backdrop_color @window_bg_color; 18 | -------------------------------------------------------------------------------- /hypr/config/environment.conf: -------------------------------------------------------------------------------- 1 | # ENVIRONMENT VARIABLES 2 | 3 | # CURSOR CONFIGURATION 4 | env = XCURSOR_SIZE,$cursorSize 5 | env = XCURSOR_THEME,$cursorTheme 6 | env = HYPRCURSOR_SIZE,$cursorSize 7 | env = HYPRCURSOR_THEME,$cursorTheme 8 | 9 | # WAYLAND APPLICATION SUPPORT 10 | env = ELECTRON_OZONE_PLATFORM_HINT,wayland 11 | env = OZONE_PLATFORM,wayland 12 | env = MOZ_ENABLE_WAYLAND,1 13 | 14 | # XDG DESKTOP PORTAL 15 | env = XDG_CURRENT_DESKTOP,Hyprland 16 | env = XDG_SESSION_TYPE,wayland 17 | env = XDG_SESSION_DESKTOP,Hyprland 18 | 19 | # QT CONFIGURATION 20 | env = QT_QPA_PLATFORM,wayland;xcb 21 | env = QT_QPA_PLATFORMTHEME,qt6ct 22 | env = QT_QPA_PLATFORMTHEME,qt5ct 23 | env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 24 | env = QT_AUTO_SCREEN_SCALE_FACTOR,1 25 | 26 | # GTK CONFIGURATION 27 | env = GDK_BACKEND,wayland,x11 28 | 29 | # ADDITIONAL WAYLAND VARIABLES 30 | env = SDL_VIDEODRIVER,wayland 31 | env = CLUTTER_BACKEND,wayland 32 | env = ECORE_EVAS_ENGINE,wayland 33 | env = ELM_ENGINE,wayland -------------------------------------------------------------------------------- /hypr/keybinds/windows.conf: -------------------------------------------------------------------------------- 1 | # WINDOW MANAGEMENT KEYBINDINGS 2 | bind = $mainMod, Q, killactive, 3 | bind = $mainMod, F, togglefloating, 4 | bind = $mainMod, M, fullscreen, 1 5 | bind = $mainMod SHIFT, M, fullscreen, 0 6 | bind = $mainMod, bracketleft, splitratio, -0.05 7 | bind = $mainMod, bracketright, splitratio, +0.05 8 | 9 | # WINDOW FOCUS 10 | bind = $mainMod, h, movefocus, l 11 | bind = $mainMod, l, movefocus, r 12 | bind = $mainMod, k, movefocus, u 13 | bind = $mainMod, j, movefocus, d 14 | 15 | # WINDOW MOVEMENT 16 | bind = $mainMod SHIFT, h, movewindow, l 17 | bind = $mainMod SHIFT, l, movewindow, r 18 | bind = $mainMod SHIFT, k, movewindow, u 19 | bind = $mainMod SHIFT, j, movewindow, d 20 | 21 | # SIZE ADJUSTMENT 22 | bind = $mainMod, R, submap, resize 23 | submap = resize 24 | 25 | binde = , l, resizeactive, 20 0 26 | binde = , h, resizeactive, -20 0 27 | binde = , k, resizeactive, 0 -20 28 | binde = , j, resizeactive, 0 20 29 | 30 | bind = , escape, submap, reset 31 | submap = reset 32 | -------------------------------------------------------------------------------- /hypr/rules/floating.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # FLOATING WINDOW RULES 4 | windowrule = float,class:^(xdg-desktop-portal-gtk)$ 5 | windowrule = float,class:^($terminal)$,title:^(top)$ 6 | windowrule = float,class:^($terminal)$,title:^(btm)$ 7 | windowrule = float,class:^($terminal)$,title:^(htop)$ 8 | windowrule = float,class:^(thunar)$,title:^(Rename.*)$ 9 | windowrule = float,class:^(Thunar)$,title:^(Rename.*)$ 10 | windowrule = float,class:^(org.gnome.FileRoller)$ 11 | windowrule = float,class:^(qt5ct)$ 12 | windowrule = float,class:^(qt6ct)$ 13 | windowrule = float,class:^(nwg-look)$ 14 | windowrule = float,class:^(nwg-displays)$ 15 | windowrule = float,class:^(org.pulseaudio.pavucontrol)$ 16 | windowrule = float,class:^(blueman-manager)$ 17 | windowrule = float,class:^(nm-connection-editor)$ 18 | windowrule = float,class:^(org.Waytrogen.Waytrogen)$ 19 | windowrule = float,class:^(waytrogen)$ 20 | windowrule = float,class:^(com.github.unrud.VideoDownloader)$ 21 | windowrule = float,class:^(com.interversehq.qView)$ -------------------------------------------------------------------------------- /wallust/templates/waybar.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for Waybar 2 | * You can add it to wallust.toml with: 3 | 4 | waybar = { src = "waybar.css", dst = "~/.config/waybar/colors.css" } 5 | 6 | * And then in you waybar 'style.css' file, import it with: 7 | 8 | @import url("colors.css"); 9 | */ 10 | 11 | @define-color cursor {{cursor}}; 12 | @define-color background {{foreground}}; 13 | @define-color foreground {{background}}; 14 | @define-color color0 {{color0 }}; 15 | @define-color color1 {{color1 }}; 16 | @define-color color2 {{color2 }}; 17 | @define-color color3 {{color3 }}; 18 | @define-color color4 {{color4 }}; 19 | @define-color color5 {{color5 }}; 20 | @define-color color6 {{color6 }}; 21 | @define-color color7 {{color7 }}; 22 | @define-color color8 {{color8 }}; 23 | @define-color color9 {{color9 }}; 24 | @define-color color10 {{color10}}; 25 | @define-color color11 {{color11}}; 26 | @define-color color12 {{color12}}; 27 | @define-color color13 {{color13}}; 28 | @define-color color14 {{color14}}; 29 | @define-color color15 {{color15}}; 30 | -------------------------------------------------------------------------------- /nvim/lua/plugins/asset/skull-fuck-you.txt: -------------------------------------------------------------------------------- 1 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 2 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 3 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 4 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⣸⠀⣠⣄⡀⠀⣀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 5 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⢨⣿⣿⣿⣿⣿⠀⠀⢀⡰⠡⣾⣿⣿⡇⠰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 6 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⣸⣿⣿⣿⣿⣿⣆⠘⣥⣄⠀⠘⠋⠉⣴⣶⠉⢉⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 7 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⡯⡿⢿⣿⣿⣿⣿⣿⣦⣯⠉⢹⣿⡆⠀⠉⠉⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 8 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⡔⢸⣁⡇⢸⢸⣿⣿⣿⣿⣿⣿⠀⠀⠻⠿⠿⠷⠷⣿⣿⣿⣿⣿⣿⣿⡿⡛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 9 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⢣⣸⢸⢇⡏⣸⣿⣿⣿⣿⣿⣿⣿⠶⠤⠤⣄⠀⢀⣸⣿⣿⣿⣿⣿⣿⣿⣉⠲⢮⢿⣿⣿⣿⣿⣿⣿⣿ 10 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⢿⣟⣿⣼⣿⣿⣿⣿⣿⣿⣿⠯⠭⠥⢦⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⢉⣿⠀⠈⣿⣿⣿⣿⣿⣿⣿ 11 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠉⡟⠚⡿⠿⣿⣿⣿⡿⣻⣿⠥⣤⣶⡶⢿⣭⣛⢿⣿⣿⣿⣿⣿⣿⣷⣶⡏⠀⣆⣿⣿⣿⣿⣿⣿⣿ 12 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠸⠀⡾⣷⠖⠒⡖⢿⣿⡿⠟⠛⠛⣉⡟⠛⠙⢯⠽⢿⣞⠙⡟⠛⠚⢿⣿⡿⠲⠿⢻⣿⣿⣿⣿⣿⣿ 13 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⢸⠀⢸⢀⡞⣷⣈⠻⢿⣶⣶⣶⣾⣷⣄⠀⣼⣷⣿⡿⣿⢧⡀⠀⣼⣿⣷⣄⠀⢸⣿⣿⣿⣿⣿⣿ 14 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⢠⡏⣸⣷⡘⠿⣷⣶⣤⣤⣤⣤⡴⢿⡄⠘⣿⣿⣶⡿⢆⣳⡄⠘⣿⣿⡇⢱⣾⣿⣿⣿⣿⣿⣿ 15 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⢰⣾⣷⣿⡙⢿⣶⣤⣈⣉⣉⣉⣡⣴⣾⣄⠀⢹⣶⣭⣥⣿⢿⣿⣆⠈⢿⣇⣾⣿⣿⣿⣿⣿⣿⣿ 16 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣯⠳⣤⡉⠛⠻⠿⠿⠿⠿⠛⣡⣿⡀⠘⣮⣙⣛⣋⣼⣿⣿⣦⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿ 17 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡈⠛⠷⣶⣤⣤⣴⣶⠿⠛⣡⡇⠘⣮⡻⢿⣿⡿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 18 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣤⣀⣀⣀⣤⣴⣾⣿⣿⣶⣿⣿⣷⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 19 | ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 20 | -------------------------------------------------------------------------------- /wallust/templates/swaync.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for Swaync 2 | * You can add it to wallust.toml with: 3 | 4 | swaync = { src = "swaync.css", dst = "~/.config/swaync/colors.css" } 5 | 6 | * And then in you swaync 'style.css' file, import it with: 7 | 8 | @import url("colors.css"); 9 | */ 10 | 11 | @define-color cursor {{cursor}}; 12 | @define-color background {{background}}; 13 | @define-color foreground {{foreground}}; 14 | @define-color color0 {{color0 }}; 15 | @define-color color1 {{color1 }}; 16 | @define-color color2 {{color2 }}; 17 | @define-color color3 {{color3 }}; 18 | @define-color color4 {{color4 }}; 19 | @define-color color5 {{color5 }}; 20 | @define-color color6 {{color6 }}; 21 | @define-color color7 {{color7 }}; 22 | @define-color color8 {{color8 }}; 23 | @define-color color9 {{color9 }}; 24 | @define-color color10 {{color10}}; 25 | @define-color color11 {{color11}}; 26 | @define-color color12 {{color12}}; 27 | @define-color color13 {{color13}}; 28 | @define-color color14 {{color14}}; 29 | @define-color color15 {{color15}}; 30 | -------------------------------------------------------------------------------- /wallust/templates/wlogout.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for wlogout 2 | * You can add it to wallust.toml with: 3 | 4 | waybar = { src = "wlogout.css", dst = "~/.config/wlogout/colors.css" } 5 | 6 | * And then in you wlogout 'style.css' file, import it with: 7 | 8 | @import url("colors.css"); 9 | */ 10 | 11 | @define-color cursor {{cursor}}; 12 | @define-color background {{background}}; 13 | @define-color foreground {{foreground | darken(0.2) }}; 14 | @define-color color0 {{color0 }}; 15 | @define-color color1 {{color1 }}; 16 | @define-color color2 {{color2 }}; 17 | @define-color color3 {{color3 }}; 18 | @define-color color4 {{color4 }}; 19 | @define-color color5 {{color5 }}; 20 | @define-color color6 {{color6 }}; 21 | @define-color color7 {{color7 }}; 22 | @define-color color8 {{color8 }}; 23 | @define-color color9 {{color9 }}; 24 | @define-color color10 {{color10}}; 25 | @define-color color11 {{color11}}; 26 | @define-color color12 {{color12}}; 27 | @define-color color13 {{color13}}; 28 | @define-color color14 {{color14}}; 29 | @define-color color15 {{color15}}; 30 | -------------------------------------------------------------------------------- /nvim/lua/plugins/asset/coffin-logo.txt: -------------------------------------------------------------------------------- 1 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 2 | ⠀⠀⠀⠀⠀⠀⠀⡀⢄⢮⡳⣶⢭⣖⣢⡤⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 3 | ⠀⠀⠀⢀⢤⣢⣵⣾⣾⣿⣿⣿⣹⣿⣿⣿⣿⣶⣯⣵⣒⡠⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 4 | ⠀⠀⠀⢸⣎⣿⣿⣿⣿⣿⡿⠛⠛⠻⣿⣿⣿⣿⣿⣿⡇⣿⣟⣵⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 5 | ⠀⠀⠀⢸⡇⠼⣿⣿⣿⡟⠀⢠⣤⢸⡊⢻⣿⡿⣿⣿⡇⣿⣿⣷⣝⣕⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 6 | ⠀⠀⠀⢸⡇⢑⢻⣿⣿⣧⡀⣅⡡⣠⠆⠹⣿⣿⣿⣿⣷⣿⣿⣿⣿⣷⢟⢯⠢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 7 | ⠀⠀⠀⢸⡇⣸⢉⢿⣯⣿⣿⣶⣧⣤⣰⣾⣿⡟⠽⣋⣈⢿⣿⣿⣿⣿⢸⣷⣝⠮⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 8 | ⠀⠀⠀⢸⣷⣿⠠⣞⢿⣿⣿⣿⣿⢟⡫⡗⡢⡑⢭⣗⡺⢷⣙⠿⣿⣿⣼⣿⢿⣷⣍⣎⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 9 | ⠀⠀⠀⢸⣿⣿⣼⡏⠗⢝⢿⣿⡈⢥⣿⠞⡜⡼⣾⣛⢿⣛⣻⣷⣰⠹⣻⣿⣿⣿⣿⣿⣮⡪⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 10 | ⠀⠀⠀⣸⣿⣿⣾⡇⠄⠁⠋⣊⢟⠬⡻⣯⡵⣣⡻⣟⡦⢾⣿⣋⣇⢉⣿⣿⣿⣿⣿⣿⣿⣿⣿⡪⡢⡀⠀⠀⠀⠀⠀⠀⠀ 11 | ⠠⠰⣹⢔⠹⣿⣿⣫⠁⠀⢰⡌⢿⡎⢜⠝⡿⣟⡫⢗⡫⠏⠙⢫⣵⠘⣄⡘⠿⣿⣿⣿⣿⣿⣿⣿⣾⣮⡢⡀⠀⠀⠀⠀⠀ 12 | ⠀⠀⠀⠄⡚⠘⢿⣯⡅⠀⢸⠇⠄⠀⠀⠉⠲⠔⡱⡻⢿⣽⣁⠢⢼⣶⣿⣿⣷⣬⡉⡹⠿⣿⣿⣿⣿⣿⣯⡪⡢⡀⠀⠀⠀ 13 | ⠀⠀⠠⠀⢀⠄⠎⢿⣷⠀⢸⠇⡄⡆⡌⠁⡂⠀⡘⢠⠱⠨⢛⢿⣶⣬⡉⡹⠻⣿⣷⣢⣄⠙⢿⣿⣿⣿⣿⡿⠞⢞⡆⠀⠀ 14 | ⠀⠀⠀⠀⠈⠈⠒⠊⡻⡇⡄⡒⠤⡀⠁⠃⠁⢠⢀⠁⠀⠀⠂⢉⢊⠝⠿⣶⡤⡘⢿⣿⣷⣝⢦⣙⠿⡛⣉⣼⣾⣿⡇⠀⠀ 15 | ⠀⠀⠀⠀⠀⠘⠠⢬⠐⠱⠺⢵⡣⢆⡅⢆⡎⠘⠈⠘⢰⠰⠀⠃⠎⡔⠸⢐⠹⢻⢵⡩⣛⢟⢋⣡⣵⣿⡟⢹⢿⣿⡇⠀⠀ 16 | ⠀⠀⠀⠀⠀⠀⠂⠄⡈⢀⠀⠑⢉⢓⠾⡥⢨⠐⡠⣀⠂⠆⡄⡄⡀⠐⢀⠀⡌⡖⢌⠪⣤⢾⣿⣿⣿⣏⣍⢰⣿⢿⡇⢤⠀ 17 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠋⠐⠁⠀⠈⠐⠱⠁⢊⢅⡃⠉⢒⠤⡁⠃⠦⢌⠘⠀⠁⠀⠂⣿⣿⣿⣿⣿⣿⣧⣸⣾⣿⡇⢠⠰ 18 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠄⠄⡀⠂⠅⠌⠕⣰⢈⠒⠵⢢⢎⣐⠀⡃⠄⠀⣿⢷⣿⣿⣿⣟⣯⣷⠿⢻⢱⠂⠈ 19 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠈⠀⢉⢒⠄⡂⡖⡩⢒⠄⠀⣿⡿⣟⣽⣾⡟⡏⠆⠀⠑⠈⠀⠀ 20 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠄⠂⠈⠈⢑⠣⢇⡎⠄⣿⣿⡿⡉⠃⠃⠀⠀⠀⠀⠀⠀⠀ 21 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠁⠁⠀⠎⠛⠉⡀⠉⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀ 22 | -------------------------------------------------------------------------------- /nvim/lazyvim.json: -------------------------------------------------------------------------------- 1 | { 2 | "extras": [ 3 | "lazyvim.plugins.extras.editor.inc-rename", 4 | "lazyvim.plugins.extras.editor.refactoring", 5 | "lazyvim.plugins.extras.formatting.prettier", 6 | "lazyvim.plugins.extras.lang.angular", 7 | "lazyvim.plugins.extras.lang.clangd", 8 | "lazyvim.plugins.extras.lang.cmake", 9 | "lazyvim.plugins.extras.lang.docker", 10 | "lazyvim.plugins.extras.lang.go", 11 | "lazyvim.plugins.extras.lang.json", 12 | "lazyvim.plugins.extras.lang.markdown", 13 | "lazyvim.plugins.extras.lang.python", 14 | "lazyvim.plugins.extras.lang.rust", 15 | "lazyvim.plugins.extras.lang.tailwind", 16 | "lazyvim.plugins.extras.lang.toml", 17 | "lazyvim.plugins.extras.lang.typescript", 18 | "lazyvim.plugins.extras.linting.eslint", 19 | "lazyvim.plugins.extras.ui.dashboard-nvim", 20 | "lazyvim.plugins.extras.ui.edgy", 21 | "lazyvim.plugins.extras.util.dot", 22 | "lazyvim.plugins.extras.util.mini-hipatterns" 23 | ], 24 | "install_version": 8, 25 | "news": { 26 | "NEWS.md": "10960" 27 | }, 28 | "version": 8 29 | } -------------------------------------------------------------------------------- /zsh/zshrc: -------------------------------------------------------------------------------- 1 | # ~/.config/zsh/zshrc 2 | # Zsh-specific configuration 3 | 4 | # Starship configuration 5 | export STARSHIP_CONFIG=$HOME/.config/starship/starship.toml 6 | export STARSHIP_CACHE=~/.starship/cache 7 | eval "$(starship init zsh)" 8 | 9 | eval "$(thefuck --alias)" 10 | 11 | # Source the central configuration 12 | if [ -f ~/.config/shell.env ]; then 13 | source ~/.config/shell.env 14 | fi 15 | 16 | # Zsh-specific settings 17 | HISTFILE=~/.config/zsh/.histfile 18 | HISTSIZE=1000 19 | SAVEHIST=1000 20 | setopt appendhistory 21 | setopt sharehistory 22 | setopt hist_ignore_dups 23 | setopt hist_ignore_all_dups 24 | setopt hist_find_no_dups 25 | setopt hist_ignore_space 26 | 27 | # Enable vicd mode 28 | # export KEYTIMEOUT=1 # breaks sudo plugin because of fast key repeat 29 | bindkey -v 30 | 31 | # Zsh-specific aliases 32 | alias zshconfig='$EDITOR ~/.config/zsh/zshrc' 33 | 34 | # Zsh-specific plugins 35 | source $HOME/.config/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 36 | source $HOME/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh 37 | source $HOME/.config/zsh/plugins/sudo/sudo.plugin.zsh 38 | -------------------------------------------------------------------------------- /hypr/config/variables.conf: -------------------------------------------------------------------------------- 1 | # GLOBAL VARIABLES & CONSTANTS 2 | 3 | # APPLICATION VARIABLES 4 | $mainMod = SUPER 5 | $terminal = alacritty 6 | $fileManager = thunar 7 | $browser = zen-browser 8 | $launcher = wofi --show drun --matching --insensitive 9 | $volumeBrightness = ~/.config/scripts/media/volume-brightness.sh 10 | 11 | # DIRECTORY PATHS 12 | $configDir = ~/.config/hypr 13 | $scriptsDir = ~/.config/scripts 14 | $wallpaperDir = ~/Pictures/Wallpapers 15 | $screenshotDir = ~/Pictures/Screenshots 16 | 17 | # THEME VARIABLES 18 | $cursorTheme = Bibata-Modern-Ice 19 | $cursorSize = 24 20 | $fontFamily = SF Pro 21 | $fontMono = Liga SFMono Nerd Font 22 | 23 | # LAYOUT CONSTANTS 24 | $gapsIn = 5 25 | $gapsOut = 10 26 | $borderSize = 3 27 | $rounding = 10 28 | $masterRatio = 0.6 29 | 30 | # ANIMATION TIMING 31 | $animSpeed = 3 32 | $animSpeedFast = 2 33 | $animSpeedSlow = 5 34 | 35 | # OPACITY VALUES 36 | $opacityActive = 1.0 37 | $opacityInactive = 0.8 38 | $opacityFloat = 0.90 39 | $opacitySpecial = 0.6 40 | 41 | # TIMEOUT VALUES (in seconds) 42 | $timeoutDim = 300 # 5 minutes 43 | $timeoutLock = 600 # 10 minutes 44 | $timeoutScreen = 900 # 15 minutes 45 | $timeoutSuspend = 1200 # 20 minutes 46 | -------------------------------------------------------------------------------- /fastfetch/cyberpunk-mask.txt: -------------------------------------------------------------------------------- 1 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 2 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠶⠚⣡⠇⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀ 3 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⢀⡴⠋⢠⣾⠶⠋⠀⠀⣾⡆⠀⠀⠀⣸⢻⡄⠀⠀ 4 | ⠀⠀⢠⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡴⣻⠀⠀⠀⠀⢠⣯⠁⣰⢿⣷⠀⠀⠀⣰⠋⣭⠀⣠⠞⢁⡼⠁⠀⠀ 5 | ⠀⠀⢀⡯⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣹⣿⠃⠀⢠⢾⠟⣸⡏⣠⡿⠏⣾⢀⣀⣾⣇⣼⠃⠀⣿⡿⠋⠀⠀⠀⠀ 6 | ⠀⠀⢸⠇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣷⢻⡛⢠⡄⣻⠛⣇⡿⠀⢼⡇⣴⠷⠋⡏⠿⣏⣀⣦⠀⠛⠁⠀⠀⠀⠀⣀ 7 | ⠀⠀⠈⢳⣻⡀⠀⠀⠀⠀⢠⣦⡀⠀⠀⡿⣬⡇⣸⡙⠁⠐⠉⠀⢰⣿⡼⣯⡆⣰⢧⡞⣿⡽⣽⣦⠀⠀⠀⠀⢀⠼⣹ 8 | ⠀⠀⠀⠀⠙⠣⣦⡀⠀⠀⠈⠳⣽⡄⣶⣹⢺⣿⢧⠀⠀⠀⠀⣀⣸⣸⣹⢿⡿⣱⠟⠈⣿⣿⡿⢹⡀⣠⢿⠂⣟⡿⠁ 9 | ⠀⠀⠀⣀⡀⢠⡿⣍⠳⣄⠀⠀⣠⣀⣽⣇⠘⣽⡈⢠⡇⠎⣝⠙⣋⣹⠦⡾⠋⠀⠀⣠⢯⡏⠀⣸⢰⣿⢸⡄⠙⠁⠀ 10 | ⣿⣄⠀⠙⢿⣾⣽⣼⣇⠈⡇⠀⣟⣿⢸⡷⠆⢈⠀⢈⣠⣿⣿⣾⠿⣿⡇⢁⢀⡆⡆⣏⡾⣥⣶⣻⠀⣿⢸⡇⠀⠀⠀ 11 | ⠘⢾⣳⡀⢻⡎⠉⣼⣿⣆⣇⣠⣻⡉⠘⣷⠸⣧⣷⣹⠋⢹⠟⠀⣼⠯⠀⣼⢟⠇⢃⣿⢻⣿⡟⢿⢠⡯⣼⠃⠀⠀⠀ 12 | ⠀⠀⠻⠃⣬⣗⠶⡿⠹⡟⣷⠀⠹⣇⡀⢪⢃⢽⠇⠁⠈⣠⣶⣼⣷⠋⠘⠿⠂⣤⣗⣿⠘⣧⡃⢨⠿⠞⠁⠀⠀⠀⠀ 13 | ⠀⠀⠀⠀⢸⢿⣾⣔⡋⢙⡲⣶⣾⣟⣧⣾⡌⠻⢇⢠⢰⣷⠀⣿⡆⠀⠄⣴⣿⣿⣷⢻⣰⣯⣷⣯⠀⠀⠀⠀⠀⠀⠀ 14 | ⠀⠀⢶⣦⣏⠿⢿⡳⢭⣿⣶⣿⣯⣿⣿⢁⣴⡃⣼⢸⣞⢧⡀⠁⠅⣰⣾⣿⣿⣿⣿⠟⣿⣼⣷⡇⠀⠀⠀⠀⠀⠀⠀ 15 | ⠀⠀⠈⣿⠇⠠⣼⣯⡶⣿⣻⣿⣿⢻⢺⣿⡳⠞⠃⠀⠙⠷⣿⣤⣴⣿⣿⣿⣿⣿⠇⣼⣼⣿⢹⠇⠀⠀⠀⠀⠀⠀⠀ 16 | ⠀⣀⡀⠻⣄⢴⣷⢍⣙⣻⠮⠽⠿⠿⢍⡻⣷⣶⣅⡀⢶⣎⠻⣿⡿⣿⣿⣿⣟⣡⡿⣫⡇⣿⣟⠀⠀⠀⠀⠀⠀⠀⠀ 17 | ⠀⠙⢿⣇⣉⠻⡷⣷⠮⣝⣳⣔⡶⢖⢞⡱⣿⣟⣿⠃⢔⠙⢷⣮⡙⢷⣦⣆⣑⣤⣶⣯⣾⢟⢮⡳⡄⠀⠀⠀⠀⠀⠀ 18 | ⠀⠀⠈⠻⣽⠀⠘⠿⠀⠀⠀⢠⠶⠞⣈⡇⠀⣿⣡⡄⢬⣶⢶⢙⡷⣄⣉⠉⠛⢙⠟⢟⣅⠑⣕⡽⣎⢦⠀⠀⠀⠀⠀ 19 | ⠀⠀⠀⠀⠙⠀⠀⣠⠀⠀⠰⣡⡦⣄⣏⣃⡘⣿⣏⡄⣺⢷⣫⡾⣏⣽⣽⡻⣆⣸⠣⡀⢙⣿⣥⣙⠜⣸⠃⠀⠀⠀⠀ 20 | ⠀⠀⠀⠀⠀⠀⠀⠛⠀⠀⣠⠟⠀⢘⣏⣹⣟⣟⢾⡝⠏⢝⣩⠿⡏⠀⠈⢷⣻⣏⠀⠈⠛⠦⣉⣉⣠⠇⠀⠀⠀⠀⠀ 21 | ⠀⠀⠀⠀⠀⣀⣀⠤⠒⠋⠀⠀⣠⢾⠧⣀⡀⢀⣀⣉⣉⠉⠁⢰⢿⠢⡀⠀⠙⠿⢄⣀⡀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀ 22 | ⠀⠀⠀⠀⠘⠛⠒⠒⠒⠒⠺⣏⢳⣸⣤⣽⠟⣉⣁⣨⣛⡙⠿⣯⣸⣧⠟⠳⣤⢤⢀⣈⣩⠽⠃⠀⠀⠀⠀⠀⠀⠀⠀ 23 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⣄⣠⠾⣿⠛⢟⠞⠙⠻⣗⡮⣬⣔⣲⡶⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 24 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⢾⡁⠀⠀⢨⠀⢀⢘⣯⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 25 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠲⠒⠻⠳⠞⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 26 | -------------------------------------------------------------------------------- /scripts/system/battery-notify.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Battery notification script 4 | # Run this as a systemd user timer or cron job every minute 5 | 6 | BAT_PATH="/sys/class/power_supply/BAT0" 7 | CAPACITY=$(cat "$BAT_PATH/capacity") 8 | STATUS=$(cat "$BAT_PATH/status") 9 | CACHE_FILE="$HOME/.cache/battery-notified" 10 | 11 | # Only notify when discharging 12 | [[ "$STATUS" != "Discharging" ]] && { rm -f "$CACHE_FILE"; exit 0; } 13 | 14 | # Check if already notified at this level 15 | [[ -f "$CACHE_FILE" ]] && { 16 | LAST_LEVEL=$(cat "$CACHE_FILE") 17 | [[ "$CAPACITY" -ge "$LAST_LEVEL" ]] && exit 0 18 | } 19 | 20 | # Send notifications 21 | case 1 in 22 | $((CAPACITY <= 5))) 23 | notify-send -u critical -i battery-empty "Battery Critical" "Battery: ${CAPACITY}% - Plug in now!" 24 | echo "$CAPACITY" > "$CACHE_FILE" 25 | ;; 26 | $((CAPACITY <= 10))) 27 | notify-send -u critical -i battery-low "Battery Critical" "Battery: ${CAPACITY}%" 28 | echo "$CAPACITY" > "$CACHE_FILE" 29 | ;; 30 | $((CAPACITY <= 20))) 31 | notify-send -u normal -i battery-caution "Battery Warning" "Battery: ${CAPACITY}%" 32 | echo "$CAPACITY" > "$CACHE_FILE" 33 | ;; 34 | esac 35 | -------------------------------------------------------------------------------- /fastfetch/illuminati.txt: -------------------------------------------------------------------------------- 1 | ⠀⠀⢀⢀⣤⣤⣤⣥⣤⣤⣤⣴⣦⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 2 | ⠈⠈⠈⠉⠉⠋⠛⠉⠁⠛⠛⠈⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⢀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 3 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⡇⠀⢀⠞⠹⣆⠀⢠⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 4 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡀⠀⠀⠘⡄⠀⠀⢸⣠⠎⣰⣧⠘⣄⡼⠀⠀⢀⡞⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 5 | ⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠑⣄⠀⠀⢹⡄⢠⣸⠋⣴⣿⢿⣷⡘⢇⡠⢀⡞⠀⠀⢀⠜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 6 | ⠀⠀⠀⠀⠀⠀⠀⠀⠈⠲⣄⠀⠀⠘⢧⡀⣆⢿⣼⠃⣼⡿⠁⠀⢻⣷⡈⢧⣾⣡⠂⣴⠏⠀⠀⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ 7 | ⠀⠀⠀⠀⠀⠀⠤⡀⠀⠀⠈⠳⣦⡑⣬⣿⣾⡿⢁⣾⡿⠁⠀⠀⠀⠻⣿⡄⢻⣿⣾⣣⠖⣠⠞⠁⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀ 8 | ⠀⠀⠀⠀⠀⠀⠀⠈⠓⢦⣄⡐⢬⣻⣾⣿⡿⢡⣾⡟⠀⠀⠀⠀⠀⠀⠹⣿⣆⢻⣿⣿⣿⣡⠖⣀⡤⠖⠉⠀⠀⠀⠀⠀⠀⠀⠀ 9 | ⠀⠀⠀⠀⠀⠤⣀⣀⠀⠀⢬⣛⣿⣿⣿⡟⢠⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣆⠹⣿⣿⣿⣟⡭⠄⠀⢀⣀⠠⠀⠀⠀⠀⠀⠀ 10 | ⠀⠀⠀⠀⠀⠀⠀⠈⠙⠓⠶⣾⣿⣿⠟⣠⣿⠋⣠⣴⣶⠿⠿⠻⠿⢷⣦⣄⡘⢿⣦⠙⣿⣿⣿⡶⠞⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀ 11 | ⠀⠀⠀⠀⠀⠠⠤⠤⣤⣭⣿⣿⣿⠋⣰⣿⣿⣿⣿⣯⡶⢶⣶⣶⣶⢶⣮⣿⣿⣾⣿⣧⡘⣿⣿⣿⣭⣤⡤⠤⠄⠀⠀⠀⠀⠀⠀ 12 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠼⣿⠃⣼⣿⣿⡟⠉⠁⠸⣧⠸⣿⣿⡿⢠⡿⠀⠉⢛⣿⣿⣷⡈⢿⡿⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 13 | ⠀⠀⠀⠀⠀⠀⠐⠒⠚⢛⡿⢃⣼⡿⠉⠙⢿⣷⣤⣀⠙⢷⣬⣥⡴⠟⢁⣠⣴⡿⠟⠁⠻⣷⡈⢻⣛⠛⠒⠒⠂⠀⠀⠀⠀⠀⠀ 14 | ⠀⠀⠀⠀⠀⠀⠀⠀⣀⡼⢁⣾⡟⠀⠀⠀⠀⠈⠛⠿⢿⣶⣶⣶⣾⣿⠿⠛⠉⠀⠀⠀⠀⠹⣿⡄⢻⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀ 15 | ⠀⠀⠀⠀⠀⠐⠊⢉⡝⢠⣾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣆⠹⡉⠉⠒⠀⠀⠀⠀⠀⠀ 16 | ⠀⠀⠀⠀⠀⠀⢀⡞⠠⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⡿⢿⢿⣿⢿⣿⡿⣿⣿⣿⠿⠿⠿⠿⠿⠿⠿⢦⠹⣄⠀⠀⠀⠀⠀⠀⠀ 17 | ⠀⠀⠀⠀⠀⠀⠛⠒⠒⠒⠒⣶⠖⢲⠖⣶⢶⣶⣿⣷⣿⣿⣾⣿⣿⣿⣷⣿⣿⣿⣷⡖⢶⠲⢶⡒⠒⠒⠒⠛⠂⠀⠀⠀⠀⠀⠀ 18 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠊⠀⠀⢀⡾⠁⠞⣽⢋⡿⣿⢿⢿⣿⣿⣿⡹⡏⢿⡙⡌⠻⣄⠀⠀⠉⠢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 19 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠋⠀⠀⢰⠇⠘⢠⡏⠸⠘⡇⠹⠸⡇⠑⠈⢧⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 20 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠁⠀⠀⢠⠏⠀⠀⣸⠁⠀⠀⡇⠀⠀⢻⠀⠀⠈⢆⠀⠀⠀⠓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 21 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠋⠀⠀⠀⡏⠀⠀⠀⡇⠀⠀⠘⡄⠀⠀⠈⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 22 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡁⠀⠀⠀⠁⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 23 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣮⣙⡷⣤⣿⣦⢶⣧⠦⣴⣦⣶⡄⢠⣶⠴⡏⠀⠸⢦⣰⣴⣤⣶⣤⡄ 24 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠁⠉⠀⠉⠉⠁⠀⠉⠉⠁⠁⠈⠉⠀⠁⠀⠁⠀⠉⠉⠉⠉⠉⠁ 25 | -------------------------------------------------------------------------------- /hypr/config/animations.conf: -------------------------------------------------------------------------------- 1 | # ANIMATION CONFIGURATION 2 | 3 | animations { 4 | enabled = true 5 | 6 | # Curves 7 | bezier = linear, 0, 0, 1, 1 8 | bezier = easeIn, 0.42, 0.0, 1, 1 9 | bezier = easeOut, 0.0, 0.0, 0.58, 1 10 | bezier = balanced, 0.2, 0, 0.3, 1 11 | bezier = smooth, 0.25, 0.1, 0.25, 1 12 | bezier = crisp, 0.3, 0, 0.4, 1 13 | bezier = flow, 0.15, 0, 0.35, 1 14 | 15 | # Window animations 16 | animation = windows, 1, 4, smooth 17 | animation = windowsIn, 1, 3, balanced, slide 18 | animation = windowsOut, 1, 2, crisp, slide 19 | animation = windowsMove, 1, 3, flow 20 | 21 | # Fade animations 22 | animation = fadeLayers, 1, 2, smooth 23 | 24 | # Layer animations - overlays, notifications, menus 25 | animation = layers, 1, 2, balanced 26 | animation = layersIn, 1, 2, smooth, slide 27 | animation = layersOut, 1, 1, crisp, slide 28 | 29 | # Border animations - responsive feedback 30 | animation = border, 1, 4, balanced 31 | 32 | # workspaces 33 | animation = workspaces, 1, 4, flow, slide 34 | 35 | # specialWorkspace 36 | animation = specialWorkspaceIn, 1, $animSpeedFast, easeIn, fade 37 | animation = specialWorkspaceOut, 1, $animSpeedFast, easeOut, fade 38 | } 39 | -------------------------------------------------------------------------------- /nvim/lua/plugins/asset/death-star-logo.txt: -------------------------------------------------------------------------------- 1 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⢤⡤⡤⢤⢤⢤⠤⠄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 2 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠴⠂⠉⠁⣀⢠⡊⠀⠀⠀⠀⢈⢻⣄⣀⣈⣉⣐⠢⠄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 3 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠊⠉⠁⠀⠀⠂⠄⠀⠀⠀⠀⠀⠀⠀⠀⠠⣶⠔⡎⢒⠶⣄⠀⠉⡑⢦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 4 | ⠀⠀⠀⠀⠀⠀⠀⣠⠾⠉⠀⠀⠀⠀⡀⠠⠆⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⢾⣆⡘⢷⡸⠢⠲⡀⢑⠄⠉⠳⣄⠀⠀⠀⠀⠀⠀⠀ 5 | ⠀⠀⠀⠀⠀⣠⠞⠁⣀⣀⣠⠄⠀⡌⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣏⣳⡘⣯⡘⣧⠰⡆⠙⡔⠬⠾⣷⣄⠀⠀⠀⠀⠀ 6 | ⠀⠀⠀⠀⡔⢃⠔⣋⠤⠀⠐⠽⡞⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⡿⣌⡇⠸⣇⠘⣷⠘⣧⡘⢮⢻⣝⣎⢧⡀⠀⠀⠀ 7 | ⠀⠀⢀⠞⡴⢡⠞⠡⠀⠀⠀⠀⢹⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⢠⡏⣷⡁⢙⣆⢹⣷⡘⣧⣨⣯⣿⣽⣯⣷⡀⠀⠀ 8 | ⠀⠀⡞⡜⡰⠉⢲⣄⡣⣔⣢⡄⠸⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣲⡀⠜⣏⣁⢉⣺⣶⢒⣫⡼⣾⡥⡾⠻⣿⣿⣿⣷⡀⠀ 9 | ⠀⡼⣴⠀⠀⠀⠀⠑⡞⠁⠈⡇⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⡞⡇⣳⣿⠁⠨⣿⢿⠈⠛⢫⢹⢏⣧⣤⣿⣷⣿⣿⣷⠀ 10 | ⢠⢣⠀⠀⠀⠀⠀⢸⡀⠀⡜⠉⠀⠀⠄⠀⠀⠀⠀⠀⠠⠄⠠⠀⠃⠄⠇⠷⠟⠷⡽⠼⡞⣻⢷⣱⣿⣿⢺⣿⣿⣿⣿⣿⣿⣿⡄ 11 | ⣼⣼⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡂⢰⠸⢼⢹⠄⠁⠆⢨⠧⠀⢺⢸⠘⡿⠉⣻⡏⣿⣿⣿⢿⣿⣿⣿⣧ 12 | ⡿⠠⡆⠀⢄⡀⠀⢀⡠⡦⠂⠀⠀⠀⢐⠀⠀⠀⠀⢠⢸⠀⢸⢸⢸⠀⠀⠐⢶⣿⡃⠀⠠⠘⡇⣧⣾⣿⣇⣿⣿⣿⣾⣿⣿⣿⣿ 13 | ⡇⣀⡆⣄⠀⠈⠉⢑⠃⢈⠀⠀⠀⠀⢸⠆⠀⣀⠀⠀⢐⠌⢲⢸⠸⠋⠀⢀⢾⣬⡗⢶⣠⡲⡇⣿⣿⣿⣿⢸⣿⣿⡇⣿⣿⣿⣿ 14 | ⣿⢭⡁⠈⠉⠀⠀⢐⠀⠐⠀⠀⠀⠀⢸⡀⠀⠀⠀⢠⢸⡅⠘⢸⠨⠁⠀⠰⡙⢹⢧⡾⣻⣿⡇⢸⣿⣿⣿⢸⣿⡿⠟⠟⣋⣭⣿ 15 | ⢸⣶⣬⣝⡒⠦⢤⣤⣄⣁⣀⠀⠀⠀⠘⠋⠈⠘⠛⠲⠸⠲⠞⠺⠸⠿⠦⠳⠓⠙⠘⠛⠛⠛⠃⠘⣋⣉⣩⣤⣤⡴⠖⣛⣯⣿⡟ 16 | ⠈⡄⡿⠴⠄⣭⢃⢰⢰⢤⢬⡍⣍⡙⡛⣛⣛⡛⡓⠒⠒⠒⠒⠒⠒⠒⠐⠒⣛⣛⣛⣛⣛⣻⣯⣭⣭⣽⣶⣾⣿⣿⣿⣿⣿⣿⠃ 17 | ⠀⢻⣽⢮⢺⣋⠦⠙⡰⣏⡘⣪⡧⡦⣷⡊⢨⡇⡿⢏⣿⣧⡤⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀ 18 | ⠀⠀⢿⣾⡇⡾⡎⣐⡇⡷⡋⢹⣽⢟⡻⣯⣤⣼⣿⣷⢿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀ 19 | ⠀⠀⠈⢿⣿⣿⣷⡯⢿⣰⣆⡳⣿⣿⣿⣿⣷⣽⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀ 20 | ⠀⠀⠀⠀⠻⣿⣷⣿⣿⣏⣿⣿⣿⣿⣷⣿⣿⣿⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀ 21 | ⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⠀⠀ 22 | ⠀⠀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀ 23 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀ 24 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 25 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠛⠛⠛⠋⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 26 | -------------------------------------------------------------------------------- /hypr/rules/dialogs.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # DIALOG WINDOW RULES 4 | windowrule = float, title:^(Open File)(.*)$ 5 | windowrule = float, title:^(Select a File)(.*)$ 6 | windowrule = float, title:^(Choose wallpaper)(.*)$ 7 | windowrule = float, title:^(Open Folder)(.*)$ 8 | windowrule = float, title:^(Save As)(.*)$ 9 | windowrule = float, title:^(Library)(.*)$ 10 | windowrule = float, title:^(File Upload)(.*)$ 11 | windowrule = float, title:^(File Operation Progress)$ 12 | windowrule = float, title:^(Confirm to replace files)$ 13 | windowrule = float, class:^($browser)$, title:.*accounts.* 14 | 15 | # File dialogs with specific sizes 16 | windowrule = size 800 600, class:^(firefox|google-chrome|zen)$,title:^(Save As)$ 17 | windowrule = size 800 600, class:^(firefox|google-chrome|zen)$,title:^(Choose Files)$ 18 | windowrule = size 800 600, class:^(firefox|google-chrome|zen)$,title:^(Open File)$ 19 | windowrule = size 800 600, class:^(firefox|google-chrome|zen)$,title:^(Open Folder)$ 20 | 21 | # APPLICATION-SPECIFIC DIALOGS 22 | # qView image viewer 23 | windowrule = size 800 450,class:^(com.interversehq.qView)$ 24 | windowrule = fullscreenstate 1 3,class:^(com.interversehq.qView)$ 25 | windowrule = content photo,class:^(com.interversehq.qView)$ 26 | windowrule = noblur,class:^(com.interversehq.qView)$ -------------------------------------------------------------------------------- /wlogout/style.css: -------------------------------------------------------------------------------- 1 | @import './colors.css'; 2 | 3 | * { 4 | box-shadow: none; 5 | } 6 | 7 | window { 8 | background-color: rgba(0, 0, 0, 0.75); 9 | } 10 | 11 | button { 12 | color: #FFFFFF; 13 | opacity: 0.5; 14 | background-position: center; 15 | background-size: 30%; 16 | background-repeat: no-repeat; 17 | box-shadow: none; 18 | border: 3px solid transparent; 19 | } 20 | 21 | button:focus, 22 | button:active { 23 | background-color: rgba(90, 90, 90, 0.8); 24 | opacity: 1; 25 | outline-style: none; 26 | } 27 | 28 | button:hover { 29 | background-color: rgba(90, 90, 90, 0.4); 30 | opacity: 0.8; 31 | outline-style: none; 32 | } 33 | 34 | #lock { 35 | background-color: @color2; 36 | background-image: image(url("icons/lock.png")); 37 | border-radius: 20px 0px 0px 0px; 38 | margin: 30px 0px 0px 400px; 39 | } 40 | 41 | #reboot { 42 | background-color: @color3; 43 | background-image: image(url("icons/reboot.png")); 44 | border-radius: 0px 0px 0px 20px; 45 | margin: 0px 0px 30px 400px; 46 | } 47 | 48 | #logout { 49 | background-color: @color5; 50 | background-image: image(url("icons/logout.png")); 51 | border-radius: 0px 20px 0px 0px; 52 | margin: 30px 400px 0px 0px; 53 | } 54 | 55 | #shutdown { 56 | background-color: @color9; 57 | background-image: image(url("icons/shutdown.png")); 58 | border-radius: 0px 0px 20px 0px; 59 | margin: 0px 400px 30px 0px; 60 | } 61 | -------------------------------------------------------------------------------- /fastfetch/star.txt: -------------------------------------------------------------------------------- 1 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 2 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 3 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 4 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 5 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 6 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡄⠀⠀⠀⣤⣦⣤⣄⡀⢸⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 7 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡆⠀⠉⠁⠀⠀⠀⢷⡙⠀⠈⠉⢻⠀⡇⠀⠀⠀⠀⠀⢀⣤⠶⠛⠛⠓⠊⡗⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 8 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠒⣿⠚⠀⢠⡄⠀⠀⠈⢷⢀⠀⠀⡏⡇⢯⠁⢦⣀⣴⠞⠋⠀⣠⡄⠀⠀⢸⠛⠀⠀⠀⣤⡀⠀⠀⠀⠀⠀ 9 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠚⠀⠀⠀⠙⢦⣄⠀⠈⠳⡀⢰⢷⣷⣸⠦⠟⠛⠢⣠⣠⡶⠋⠀⠀⣠⠏⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀ 10 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢫⣓⢦⡀⢙⡮⣾⣿⣇⢧⠀⣀⡴⣺⠿⣄⠀⡀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 11 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⣲⣭⣉⣜⠏⠀⠹⢊⣍⣽⣷⠏⠀⠀⣲⣿⣅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 12 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣠⠄⣴⣷⠋⠀⠀⠀⠀⠀⠀⠈⠹⣞⠦⠀⠐⣃⡟⠠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 13 | $7⠠⠤⠤⠤⠶⠶⠶⠶⣖⣚⣒⣋⣉⡩⠭⠴⢶⣶⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢙⣿⣷⡶⠶⠭⣍⣙⣜⣒⣓⣒⠶⠶⠶⠶⠤⠤⠤⠄ 14 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠚⠂⠮⣷⡀⡀⠀⠀⠀⠀⠀⢀⣤⣿⠷⢔⠚⠋⠉⠉⠁⠈⢣⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 15 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠃⠀⠀⣰⣻⣿⣿⢃⣄⠀⣰⣼⣟⠿⡼⣄⠈⠒⢄⡀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀ 16 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠟⠁⠀⠀⡴⣱⠟⠋⠉⠿⢿⣻⡟⠟⠏⠙⠦⣜⣆⠀⠀⠈⠓⠦⢄⣤⣾⠇⠀⠀⠀⠀⠀⠀⠀⠀ 17 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡟⠀⠀⢀⡾⠛⠁⠀⠀⡠⠾⡞⣿⢰⠀⠀⠀⠀⠈⠛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 18 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⠀⠀⠘⠏⠀⠀⣠⠔⠋⠀⠈⡇⠃⡾⠆⠀⠀⠀⠀⠀⠀⠙⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 19 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⣿⣌⠂⠀⣀⡠⠔⠋⠀⠀⠀⠀⠀⢱⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 20 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢸⢠⢷⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 21 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⢸⡉⠀⠀⠀⠶⡷⠗⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 22 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 23 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 24 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 25 | $7⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠷⠀⠀⠟⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 26 | -------------------------------------------------------------------------------- /hypr/keybinds/media.conf: -------------------------------------------------------------------------------- 1 | # MEDIA & SYSTEM KEYBINDINGS 2 | 3 | bindel = , XF86AudioRaiseVolume, exec, $volumeBrightness volume_up 4 | bindel = , XF86AudioLowerVolume, exec, $volumeBrightness volume_down 5 | bindel = , XF86AudioMute, exec, $volumeBrightness volume_mute 6 | bindel = , XF86AudioMicMute, exec, $volumeBrightness mic_mute 7 | bindel = , XF86MonBrightnessUp, exec, $volumeBrightness brightness_up 8 | bindel = , XF86MonBrightnessDown, exec, $volumeBrightness brightness_down 9 | bindl = , XF86AudioPlay, exec, $volumeBrightness play_pause 10 | bindl = , XF86AudioPause, exec, $volumeBrightness play_pause 11 | bindl = , XF86AudioPlayPause, exec, $volumeBrightness play_pause 12 | bindl = , XF86AudioNext, exec, $volumeBrightness next_track 13 | bindl = , XF86AudioPrev, exec, $volumeBrightness prev_track 14 | 15 | # SCREENSHOTS 16 | bind = ALT SHIFT, F, exec, ~/.config/scripts/utils/screenshot.sh -r fullscreen 17 | bind = ALT SHIFT, W, exec, ~/.config/scripts/utils/screenshot.sh -r workspace 18 | bind = ALT SHIFT, S, exec, ~/.config/scripts/utils/screenshot.sh -r selection 19 | 20 | # LAPTOP LID SWITCH HANDLING 21 | # Note: Remember to modify /etc/systemd/logind.conf before using 22 | bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" & hyprctl reload # Lid closed 23 | bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, enable" & hyprctl reload # Lid opened -------------------------------------------------------------------------------- /scripts/system/floating-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script to open a floating terminal and run an application 4 | # Usage: floating-run.sh 5 | # Usage: floating-run.sh (uses default 800x450) 6 | 7 | if [ $# -eq 0 ]; then 8 | echo "Usage: $0 " 9 | echo " or: $0 (uses default 800x450)" 10 | echo "Examples:" 11 | echo " $0 1000 600 htop" 12 | echo " $0 htop" 13 | exit 1 14 | fi 15 | 16 | # Check if we have 3 parameters (width, height, app) or 1 parameter (just app) 17 | if [ $# -eq 3 ]; then 18 | WIDTH="$1" 19 | HEIGHT="$2" 20 | APP_NAME="$3" 21 | elif [ $# -eq 1 ]; then 22 | WIDTH="800" 23 | HEIGHT="450" 24 | APP_NAME="$1" 25 | else 26 | echo "Error: Invalid number of parameters" 27 | echo "Usage: $0 " 28 | echo " or: $0 " 29 | exit 1 30 | fi 31 | 32 | # Get the terminal from Hyprland variables or use a default 33 | TERMINAL=$(hyprctl getoption general:terminal | grep -o '"[^"]*"' | tr -d '"' 2>/dev/null || echo "kitty") 34 | 35 | # If terminal is not set or empty, use kitty as default 36 | if [ -z "$TERMINAL" ]; then 37 | TERMINAL="kitty" 38 | fi 39 | 40 | # Launch the floating terminal with the specified application 41 | hyprctl dispatch exec "[float; size $WIDTH $HEIGHT; center] $TERMINAL -e $APP_NAME" -------------------------------------------------------------------------------- /kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | # __ ___ __ __ 2 | # / //_(_) /_/ /___ __ 3 | # / ,< / / __/ __/ // / 4 | # /_/|_/_/\__/\__/\_, / 5 | # /___/ 6 | # 7 | # Configuration by saatvik333 8 | font_family Liga SFMono Nerd Font 9 | font_size 12 10 | bold_font auto 11 | italic_font auto 12 | bold_italic_font auto 13 | cursor_shape block 14 | cursor_shape_focused block 15 | cursor_blink_interval 0.5 16 | cursor_stop_blinking_after 1 17 | scrollback_lines 5000 18 | scrollback_indicator_opacity 0 19 | wheel_scroll_min_lines 1 20 | touch_scroll_multiplier 4 21 | enable_audio_bell no 22 | window_padding_width 10 23 | hide_window_decorations yes 24 | background_opacity 0.9 25 | dynamic_background_opacity yes 26 | confirm_os_window_close 0 27 | selection_foreground none 28 | selection_background none 29 | # Performance settings, if you have a high end CPU; do enable 30 | # input_delay 0 31 | # repaint_delay 2 32 | sync_to_monitor no 33 | wayland_enable_ime no 34 | 35 | include ~/.config/kitty/colors.conf 36 | -------------------------------------------------------------------------------- /fish/fish_variables: -------------------------------------------------------------------------------- 1 | # This file contains fish universal variable definitions. 2 | # VERSION: 3.0 3 | SETUVAR __fish_initialized:3800 4 | SETUVAR fish_color_autosuggestion:brblack 5 | SETUVAR fish_color_cancel:\x2dr 6 | SETUVAR fish_color_command:normal 7 | SETUVAR fish_color_comment:red 8 | SETUVAR fish_color_cwd:green 9 | SETUVAR fish_color_cwd_root:red 10 | SETUVAR fish_color_end:green 11 | SETUVAR fish_color_error:brred 12 | SETUVAR fish_color_escape:brcyan 13 | SETUVAR fish_color_history_current:\x2d\x2dbold 14 | SETUVAR fish_color_host:normal 15 | SETUVAR fish_color_host_remote:yellow 16 | SETUVAR fish_color_normal:normal 17 | SETUVAR fish_color_operator:brcyan 18 | SETUVAR fish_color_param:cyan 19 | SETUVAR fish_color_quote:yellow 20 | SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold 21 | SETUVAR fish_color_search_match:white\x1e\x2d\x2dbackground\x3dbrblack 22 | SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack 23 | SETUVAR fish_color_status:red 24 | SETUVAR fish_color_user:brgreen 25 | SETUVAR fish_color_valid_path:\x2d\x2dunderline 26 | SETUVAR fish_key_bindings:fish_default_key_bindings 27 | SETUVAR fish_pager_color_completion:normal 28 | SETUVAR fish_pager_color_description:yellow\x1e\x2di 29 | SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline 30 | SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan 31 | SETUVAR fish_pager_color_selected_background:\x2dr 32 | -------------------------------------------------------------------------------- /swaync/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "cssPriority": "user", 3 | "ignore-gtk-theme": true, 4 | "positionX": "right", 5 | "positionY": "top", 6 | "layer": "overlay", 7 | "control-center-margin-top": 10, 8 | "control-center-margin-right": 10, 9 | "control-center-margin-bottom": 10, 10 | "control-center-margin-left": 10, 11 | "control-center-layer": "top", 12 | "timeout": 5, 13 | "timeout-low": 3, 14 | "timeout-critical": 5, 15 | "notification-window-width": 494, 16 | "notification-window-height": -1, 17 | "notification-grouping": true, 18 | "notification-inline-replies": false, 19 | "notification-icon-size": 64, 20 | "notification-body-image-height": 100, 21 | "notification-body-image-width": 200, 22 | "image-visibility": "when-avaliable", 23 | "hide-on-clear": false, 24 | "hide-on-action": true, 25 | "text-empty": "", 26 | "fit-to-screen": true, 27 | "relative-timestamps": true, 28 | "script-fail-notify": true, 29 | "notification-2fa-action": true, 30 | "widgets": ["dnd", "mpris", "title", "notifications"], 31 | "widget-config": { 32 | "title": { 33 | "text": "Notifications", 34 | "clear-all-button": true, 35 | "button-text": "Clear All" 36 | }, 37 | "dnd": { 38 | "text": "Do not disturb" 39 | }, 40 | "mpris": { 41 | "blacklist": ["playerctld"], 42 | "autohide": true, 43 | "show-album-art": "always", 44 | "loop-carousel": true 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /fastfetch/satan-cross.txt: -------------------------------------------------------------------------------- 1 | $4... 2 | $2s, $4. $2.s 3 | $2ss, $4. .. $2.ss 4 | $2'SsSs, $4.. . $2.sSsS' 5 | $2sSs'sSs, $4. . $2.sSs'sSs 6 | $2sSs 'sSs, $4... $2.sSs' sSs 7 | $2sS, 'sSs, $2.sSs' .Ss 8 | $2'Ss 'sSs, $2.sSs' sS' 9 | $4... $2sSs ' $2.sSs' sSs $4... 10 | $4. $2sSs $2.sSs' $2sS$2, sSs $4. 11 | $4. .. $2sS, $2.sSs' $2'sSs, .Ss $4. .. 12 | $4.. . $2'Ss $2.Ss' $4. $2'sSs.'s' $4.. . 13 | $4. . $2sSs ' $4. $2'sSs, $4. . 14 | $4... $2.sS.'sSs $4. $2'Ss $2'sSs, $4... 15 | $2.sSs' sS, $4. . . $2.Ss 'sSs, 16 | $2.sSs' 'Ss $4. $2sS' 'sSs, 17 | $2.sSs' sSs $2sSs 'sSs, 18 | $2.sSs' sS, $2sSs $2'sSs, 19 | $2.s$2sSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsS'sS'sSssSssSssSssSssSssSs$2s. 20 | $2sSs $2sS' 21 | $2sSs sSs 22 | $2sSs sSs $5- saatvik333 23 | $2sS, .Ss 24 | $2'Ss sS' 25 | $2sSs sSs 26 | $2sSsSs 27 | $2sSs 28 | $2s 29 | -------------------------------------------------------------------------------- /wofi/style.css: -------------------------------------------------------------------------------- 1 | /* ~/.config/wofi/style.css - Auto-generated from colors.css */ 2 | 3 | window { 4 | margin: 5px; 5 | border-radius: 8px; 6 | background-color: rgba(21,20,22, 0.9); 7 | font-family: "Liga SFMono Nerd Font", monospace; 8 | } 9 | 10 | #input { 11 | margin: 8px; 12 | padding: 10px 12px; 13 | border: 2px solid #c49384; 14 | border-radius: 8px; 15 | color: #BFBDC0; 16 | background-color: rgba(80,77,73, 0.8); 17 | outline: none; 18 | caret-color: #A8A597; 19 | font-size: 14px; 20 | } 21 | 22 | #input:focus { 23 | border-color: #A8A597; 24 | box-shadow: 0 0 8px rgba(144,147,140, 0.3); 25 | } 26 | 27 | #inner-box { 28 | margin: 8px; 29 | padding-top: 5px; 30 | background-color: transparent; 31 | } 32 | 33 | #outer-box { 34 | margin: 0; 35 | padding: 5px; 36 | background-color: transparent; 37 | } 38 | 39 | #scroll { 40 | margin: 0; 41 | padding: 5px; 42 | } 43 | 44 | #text { 45 | margin: 3px; 46 | padding: 3px; 47 | color: #BFBDC0; 48 | font-size: 13px; 49 | } 50 | 51 | #text:selected { 52 | color: #A8A597; 53 | font-weight: bold; 54 | } 55 | 56 | #entry { 57 | padding: 8px; 58 | margin: 2px 5px; 59 | border-radius: 8px; 60 | transition: all 0.2s ease; 61 | } 62 | 63 | #entry:hover { 64 | background-color: rgba(144,147,140, 0.2); 65 | } 66 | 67 | #entry:selected { 68 | background-color: rgba(144,147,140, 0.4); 69 | box-shadow: 0 2px 6px rgba(144,147,140, 0.2); 70 | } 71 | 72 | #img { 73 | margin-right: 10px; 74 | margin-left: 5px; 75 | } 76 | 77 | #unselected { 78 | opacity: 0.85; 79 | } 80 | 81 | #urgent { 82 | background-color: rgba(113,109,116, 0.3); 83 | color: #716D74; 84 | border-left: 3px solid #716D74; 85 | } 86 | -------------------------------------------------------------------------------- /hypr/config/appearance.conf: -------------------------------------------------------------------------------- 1 | # APPEARANCE CONFIGURATION 2 | 3 | general { 4 | border_size = $borderSize 5 | gaps_in = $gapsIn 6 | gaps_out = $gapsOut 7 | resize_on_border = true 8 | no_focus_fallback = true 9 | allow_tearing = true 10 | layout = master 11 | 12 | snap { 13 | enabled = true 14 | } 15 | } 16 | 17 | cursor { 18 | hide_on_key_press = true 19 | inactive_timeout = 4 20 | warp_on_toggle_special = 1 21 | # zoom_factor = 2 22 | } 23 | 24 | decoration { 25 | rounding = $rounding 26 | active_opacity = $opacityActive 27 | inactive_opacity = $opacityInactive 28 | dim_special = $opacitySpecial 29 | 30 | shadow { 31 | enabled = false 32 | range = 0 33 | render_power = 3 34 | color = rgba(1a1a1aee) 35 | } 36 | 37 | blur { 38 | enabled = true 39 | size = 6 40 | noise = 0.03 41 | passes = 2 42 | vibrancy = 0 43 | xray = true 44 | special = false 45 | popups = true 46 | input_methods = true 47 | input_methods_ignorealpha = 0.8 48 | blurls = waybar 49 | popups = true 50 | } 51 | } 52 | 53 | misc { 54 | force_default_wallpaper = 0 55 | font_family = $fontFamily 56 | vfr = true 57 | vrr = 0 58 | disable_hyprland_logo = true 59 | disable_splash_rendering = true 60 | mouse_move_enables_dpms = true 61 | key_press_enables_dpms = true 62 | animate_manual_resizes = false 63 | animate_mouse_windowdragging = false 64 | enable_swallow = false 65 | swallow_regex = (kitty|allacritty|Alacritty) 66 | new_window_takes_over_fullscreen = 2 67 | allow_session_lock_restore = true 68 | initial_workspace_tracking = false 69 | focus_on_activate = true 70 | } 71 | -------------------------------------------------------------------------------- /bongocat/bongo.conf: -------------------------------------------------------------------------------- 1 | # Bongo Cat Configuration File 2 | # Edit these values to customize your bongo cat overlay 3 | 4 | # Position settings (in pixels) 5 | # cat_x_offset: Horizontal offset from center position 6 | # Positive values move right, negative values move left 7 | cat_x_offset=825 8 | 9 | # cat_y_offset: Vertical offset from default position 10 | # Positive values move down, negative values move up 11 | cat_y_offset=35 12 | 13 | # Size settings 14 | # cat_height: Height of the bongo cat in pixels 15 | # Width is automatically calculated to maintain aspect ratio 16 | cat_height=100 17 | 18 | # Overlay settings 19 | # overlay_height: Height of the entire overlay bar 20 | overlay_height=140 21 | 22 | # Overlay Position 23 | overlay_position=bottom 24 | 25 | # Animation settings 26 | # idle_frame: Which frame to use when idle (0, 1, or 2) 27 | # 0 = both paws up, 1 = left paw down, 2 = right paw down 28 | idle_frame=0 29 | 30 | # Animation timing (in milliseconds) 31 | # keypress_duration: How long to show animation after keypress 32 | keypress_duration=80 33 | 34 | # test_animation_duration: How long to show test animation 35 | test_animation_duration=200 36 | 37 | # test_animation_interval: How often to trigger test animation (seconds) 38 | # Set to 0 to disable test animations 39 | test_animation_interval=0 40 | 41 | # Frame rate settings 42 | # fps: Animation frame rate (frames per second) 43 | fps=60 44 | 45 | # Transparency settings 46 | # overlay_opacity: Opacity of the overlay background (0-255) 47 | # 0 = fully transparent, 255 = fully opaque 48 | overlay_opacity=0 49 | # Debug settings 50 | # enable_debug: Show debug messages (0 = off, 1 = on) 51 | enable_debug=0 52 | 53 | # Input device (change if your keyboard is on a different event) 54 | keyboard_device=/dev/input/event4 55 | keyboard_device=/dev/input/event20 56 | -------------------------------------------------------------------------------- /hypr/keybinds/workspaces.conf: -------------------------------------------------------------------------------- 1 | # WORKSPACE KEYBINDINGS 2 | bind = $mainMod, 1, workspace, 1 3 | bind = $mainMod, 2, workspace, 2 4 | bind = $mainMod, 3, workspace, 3 5 | bind = $mainMod, 4, workspace, 4 6 | bind = $mainMod, 5, workspace, 5 7 | bind = $mainMod, 6, workspace, 6 8 | bind = $mainMod, 7, workspace, 7 9 | bind = $mainMod, 8, workspace, 8 10 | bind = $mainMod, 9, workspace, 9 11 | bind = $mainMod, 0, workspace, 10 12 | 13 | bind = $mainMod SHIFT, 1, movetoworkspace, 1 14 | bind = $mainMod SHIFT, 2, movetoworkspace, 2 15 | bind = $mainMod SHIFT, 3, movetoworkspace, 3 16 | bind = $mainMod SHIFT, 4, movetoworkspace, 4 17 | bind = $mainMod SHIFT, 5, movetoworkspace, 5 18 | bind = $mainMod SHIFT, 6, movetoworkspace, 6 19 | bind = $mainMod SHIFT, 7, movetoworkspace, 7 20 | bind = $mainMod SHIFT, 8, movetoworkspace, 8 21 | bind = $mainMod SHIFT, 9, movetoworkspace, 9 22 | bind = $mainMod SHIFT, 0, movetoworkspace, 10 23 | 24 | bind = $mainMod, S, togglespecialworkspace, magic 25 | bind = $mainMod SHIFT, S, movetoworkspace, special:magic 26 | bind = $mainMod ALT, S, movetoworkspacesilent, special:magic 27 | 28 | # WORKSPACE SCROLLING 29 | bind = $mainMod, comma, workspace, -1 30 | bind = $mainMod, period, workspace, +1 31 | bind = $mainMod, mouse_down, workspace, e+1 32 | bind = $mainMod, mouse_up, workspace, e-1 33 | bind = $mainMod Shift, comma, movetoworkspace, r-1 34 | bind = $mainMod Shift, period, movetoworkspace, r+1 35 | bind = $mainMod Shift, mouse_down, movetoworkspace, r-1 36 | bind = $mainMod Shift, mouse_up, movetoworkspace, r+1 37 | 38 | # WINDOW SWITCHING (NOTE: Requires `hyprswitch`) 39 | $mod = super 40 | $key = tab 41 | $reverse = grave 42 | bind = $mod, $key, exec, hyprswitch gui --mod-key $mod --key $key --close mod-key-release --reverse-key=key=$reverse --sort-recent --max-switch-offset 0 && hyprswitch dispatch -------------------------------------------------------------------------------- /hypr/README.md: -------------------------------------------------------------------------------- 1 | # Hyprland Configuration 2 | 3 | A modular and professional Hyprland configuration with clean organization and reduced code repetition. 4 | 5 | ## Structure 6 | 7 | ### Core Configuration (`config/`) 8 | 9 | - `variables.conf` - Global variables and constants 10 | - `environment.conf` - Environment variables 11 | - `colors.conf` - Color definitions and border styling (wallust compatible) 12 | - `autostart.conf` - Startup applications 13 | - `appearance.conf` - Visual styling and effects 14 | - `animations.conf` - Animation settings 15 | - `layouts.conf` - Window layout configurations 16 | - `input.conf` - Keyboard, mouse, and touchpad settings 17 | - `plugins.conf` - Third-party plugin configurations 18 | 19 | ### Keybindings (`keybinds/`) 20 | 21 | - `applications.conf` - Application launchers and utilities 22 | - `windows.conf` - Window management 23 | - `workspaces.conf` - Workspace navigation and management 24 | - `media.conf` - Media controls, screenshots, and system bindings 25 | 26 | ### Window Rules (`rules/`) 27 | 28 | - `general.conf` - Basic window behavior and system fixes 29 | - `floating.conf` - Applications that should float by default 30 | - `dialogs.conf` - Modal dialogs and file choosers 31 | - `media.conf` - Picture-in-Picture and media applications 32 | - `opacity.conf` - Transparency settings for applications 33 | - `layers.conf` - Layer-specific visual effects and behavior 34 | 35 | ### System-Specific 36 | 37 | - `monitors.conf` - Display configuration 38 | - `workspaces.conf` - Workspace rules 39 | - `hyprrules.conf` - Main window rules (imports all rule modules) 40 | - `hypridle.conf` - Idle management 41 | - `hyprlock.conf` - Screen lock configuration 42 | 43 | ## Customization 44 | 45 | Edit `config/variables.conf` to customize: 46 | 47 | - Applications and paths 48 | - Theme colors and fonts 49 | - Layout settings 50 | - Animation timing 51 | - Timeout values 52 | -------------------------------------------------------------------------------- /nvim/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | BasedOnStyle: Google 4 | IndentWidth: 2 5 | TabWidth: 2 6 | UseTab: Never 7 | ColumnLimit: 80 8 | BreakBeforeBraces: Attach 9 | AllowShortIfStatementsOnASingleLine: WithoutElse 10 | AllowShortLoopsOnASingleLine: true 11 | AllowShortFunctionsOnASingleLine: All 12 | AllowShortBlocksOnASingleLine: Never 13 | AlignAfterOpenBracket: Align 14 | AlignConsecutiveAssignments: false 15 | AlignConsecutiveDeclarations: false 16 | AlignOperands: true 17 | AlignTrailingComments: true 18 | BinPackArguments: true 19 | BinPackParameters: true 20 | BreakBeforeBinaryOperators: None 21 | BreakBeforeTernaryOperators: true 22 | BreakConstructorInitializersBeforeComma: false 23 | BreakAfterJavaFieldAnnotations: false 24 | BreakStringLiterals: true 25 | ConstructorInitializerAllOnOneLineOrOnePerLine: true 26 | ConstructorInitializerIndentWidth: 4 27 | ContinuationIndentWidth: 4 28 | Cpp11BracedListStyle: true 29 | DerivePointerAlignment: true 30 | DisableFormat: false 31 | ExperimentalAutoDetectBinPacking: false 32 | ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] 33 | IncludeCategories: 34 | - Regex: '^<.*\.h>' 35 | Priority: 1 36 | - Regex: '^<.*' 37 | Priority: 2 38 | - Regex: '.*' 39 | Priority: 3 40 | IncludeIsMainRegex: '([-_](test|unittest))?$' 41 | IndentCaseLabels: true 42 | IndentWrappedFunctionNames: false 43 | IndentFunctionDeclarationAfterType: false 44 | MaxEmptyLinesToKeep: 1 45 | NamespaceIndentation: None 46 | ObjCBlockIndentWidth: 2 47 | ObjCSpaceAfterProperty: false 48 | ObjCSpaceBeforeProtocolList: false 49 | PenaltyBreakBeforeFirstCallParameter: 1 50 | PenaltyBreakComment: 300 51 | PenaltyBreakString: 1000 52 | PenaltyBreakFirstLessLess: 120 53 | PenaltyExcessCharacter: 1000000 54 | PenaltyReturnTypeOnItsOwnLine: 200 55 | PointerAlignment: Left 56 | SpacesBeforeTrailingComments: 2 57 | Std: Auto 58 | TabWidth: 8 59 | UseTab: Never -------------------------------------------------------------------------------- /fastfetch/config.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", 3 | "logo": { 4 | "source": "$HOME/.config/fastfetch/star.txt", 5 | "color": { 6 | "1": "black", 7 | "2": "red", 8 | "3": "green", 9 | "4": "yellow", 10 | "5": "blue", 11 | "6": "magenta", 12 | "7": "cyan", 13 | "8": "white" 14 | }, 15 | "padding": { 16 | "right": 2 17 | } 18 | }, 19 | "display": { 20 | "bar": { 21 | "char.elapsed": "/", 22 | "char.total": "/", 23 | "width": 20 24 | }, 25 | "percent": { 26 | "type": 3, 27 | "color": { 28 | "green": "green", 29 | "yellow": "yellow" 30 | }, 31 | "ndigits": 2 32 | }, 33 | "key": { 34 | "width": 15 35 | }, 36 | "color": "blink_", 37 | "separator": " ~> " 38 | }, 39 | "modules": [ 40 | "break", 41 | "break", 42 | "break", 43 | "break", 44 | { 45 | "type": "title", 46 | "format": "{6}{7}{#green}{8}{#}" 47 | }, 48 | "separator", 49 | { 50 | "type": "os", 51 | "format": "{#blue}{2}{#}{?6}({#green}{6}{#}){?} {?12}{12}{?}" 52 | }, 53 | "kernel", 54 | "shell", 55 | "terminal", 56 | { 57 | "type": "localip", 58 | "showMac": true, 59 | "compact": true 60 | }, 61 | "uptime", 62 | "break", 63 | { 64 | "type": "cpu", 65 | "showPeCoreCount": true, 66 | "temp": true 67 | }, 68 | "gpu", 69 | { 70 | "type": "memory", 71 | "key": "RAM" 72 | }, 73 | { 74 | "type": "disk" 75 | }, 76 | "break", 77 | { 78 | "type": "media", 79 | "format": "{5}: <{#underline_yellow}{1}{#}> {?3}by {#1}{3}{#}{?}" 80 | }, 81 | { 82 | "type": "sound", 83 | "format": "{2:15} {5} {3}" 84 | }, 85 | "break", 86 | "colors" 87 | ] 88 | } 89 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE & Editor Configurations 2 | Code/ 3 | Cursor/ 4 | .vscode/ 5 | Kiro/ 6 | configstore/ 7 | blender/ 8 | 9 | # Development Tools & Languages 10 | go/ 11 | gopls/ 12 | flutter/ 13 | fontforge/ 14 | nextjs-nodejs/ 15 | 16 | # Browsers 17 | google-chrome/ 18 | 19 | # Communication 20 | discord/ 21 | Slack/ 22 | 23 | # Media & Entertainment 24 | spotify/ 25 | obs-studio/ 26 | LosslessCut/ 27 | inkscape/ 28 | obsidian/ 29 | spotify-player/ 30 | kew/lastPlaylist.m3u 31 | kew/kewlibrary 32 | 33 | # System & Utilities 34 | nwg-look/ 35 | nwg-displays/ 36 | systemd/ 37 | balenaEtcher/ 38 | yay/ 39 | thefuck/ 40 | qBittorrent/ 41 | sherlock/ 42 | eog/ 43 | ranger/ 44 | bottom/ 45 | celluloid/ 46 | s-tui/ 47 | Thunar/ 48 | waytrogen/ 49 | qView/ 50 | 51 | # Desktop Environment & Frameworks 52 | kde.org/ 53 | ego/ 54 | gtk-3.0/ 55 | gtk-4.0/ 56 | qt6ct/ 57 | xfce4/ 58 | xsettingsd/ 59 | htop/ 60 | 61 | # Audio 62 | pulse/ 63 | 64 | # Electron Apps 65 | Electron/ 66 | Notion/ 67 | 68 | # Python 69 | __pycache__/ 70 | *.py[cod] 71 | *.pyo 72 | *.pyc 73 | 74 | # Shell & Terminal History 75 | zsh/.histfile 76 | bash/.bash_history 77 | fish/fish_history 78 | 79 | # Environment & Secrets 80 | *.env 81 | .env.* 82 | !shell.env 83 | 84 | # Temporary & Cache Files 85 | *.tmp 86 | *.temp 87 | *.cache 88 | *.log 89 | *.pid 90 | *.lock 91 | .DS_Store 92 | Thumbs.db 93 | *.swp 94 | *.swo 95 | *~ 96 | 97 | # Backup Files 98 | *.bak 99 | *.backup 100 | *.orig 101 | *.save 102 | 103 | # OS Generated Files 104 | # macOS 105 | .DS_Store 106 | .AppleDouble 107 | .LSOverride 108 | Icon? 109 | dconf/ 110 | user-* 111 | mimeapps.list 112 | 113 | # Windows 114 | Thumbs.db 115 | ehthumbs.db 116 | Desktop.ini 117 | $RECYCLE.BIN/ 118 | 119 | # Linux 120 | .directory 121 | .Trash-* 122 | 123 | # Archive Files (optional - uncomment if needed) 124 | # *.zip 125 | # *.tar.gz 126 | # *.rar 127 | # *.7z 128 | -------------------------------------------------------------------------------- /nvim/lua/config/lazy.lua: -------------------------------------------------------------------------------- 1 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 2 | if not (vim.uv or vim.loop).fs_stat(lazypath) then 3 | local lazyrepo = "https://github.com/folke/lazy.nvim.git" 4 | local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 5 | if vim.v.shell_error ~= 0 then 6 | vim.api.nvim_echo({ 7 | { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, 8 | { out, "WarningMsg" }, 9 | { "\nPress any key to exit..." }, 10 | }, true, {}) 11 | vim.fn.getchar() 12 | os.exit(1) 13 | end 14 | end 15 | vim.opt.rtp:prepend(lazypath) 16 | 17 | require("lazy").setup({ 18 | spec = { 19 | -- add LazyVim and import its plugins 20 | { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 21 | -- import/override with your plugins 22 | { import = "plugins" }, 23 | }, 24 | defaults = { 25 | -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. 26 | -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. 27 | lazy = false, 28 | -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, 29 | -- have outdated releases, which may break your Neovim install. 30 | version = false, -- always use the latest git commit 31 | -- version = "*", -- try installing the latest stable version for plugins that support semver 32 | }, 33 | install = { colorscheme = { "tokyonight", "habamax" } }, 34 | checker = { 35 | enabled = true, -- check for plugin updates periodically 36 | notify = false, -- notify on update 37 | }, -- automatically check for plugin updates 38 | performance = { 39 | rtp = { 40 | -- disable some rtp plugins 41 | disabled_plugins = { 42 | "gzip", 43 | -- "matchit", 44 | -- "matchparen", 45 | -- "netrwPlugin", 46 | "tarPlugin", 47 | "tohtml", 48 | "tutor", 49 | "zipPlugin", 50 | }, 51 | }, 52 | }, 53 | }) 54 | -------------------------------------------------------------------------------- /hypr/hyprlock.conf: -------------------------------------------------------------------------------- 1 | source = $HOME/.config/hypr/config/variables.conf 2 | 3 | # HYPRLOCK CONFIGURATION 4 | background { 5 | monitor = 6 | path = /home/saatvik333/Pictures/Wallpapers/Everforest/everforest-flowers.png 7 | blur_passes = 2 8 | contrast = 1 9 | brightness = 0.8 10 | vibrancy = 0.2 11 | vibrancy_darkness = 0.2 12 | } 13 | 14 | general { 15 | no_fade_in = true 16 | no_fade_out = true 17 | hide_cursor = true 18 | grace = 0 19 | disable_loading_bar = true 20 | } 21 | 22 | input-field { 23 | monitor = 24 | size = 250, 60 25 | outline_thickness = 2 26 | dots_size = 0.3 27 | dots_spacing = 0.35 28 | dots_center = true 29 | outer_color = rgba(0, 0, 0, 0) 30 | inner_color = rgba(0, 0, 0, 0.2) 31 | font_color = rgba(242, 243, 244, 0.8) 32 | fade_on_empty = true 33 | rounding = -1 34 | check_color = rgb(204, 136, 34) 35 | placeholder_text = 36 | fail_text = 37 | capslock_color = rgba(255, 255, 0, 1) 38 | hide_input = false 39 | position = 0, -200 40 | halign = center 41 | valign = center 42 | } 43 | 44 | # Date Display 45 | label { 46 | monitor = 47 | text = cmd[update:1000] echo "$(date +"%A, %B %d")" 48 | color = rgba(242, 243, 244, 0.8) 49 | font_size = 22 50 | font_family = $fontMono 51 | position = 0, 300 52 | halign = center 53 | valign = center 54 | } 55 | 56 | # Time Display 57 | label { 58 | monitor = 59 | text = cmd[update:1000] echo "$(date +"%-I:%M")" 60 | color = rgba(242, 243, 244, 0.8) 61 | font_size = 95 62 | font_family = $fontMono ExtraBold 63 | position = 0, 200 64 | halign = center 65 | valign = center 66 | } 67 | 68 | # Music Status Display 69 | label { 70 | monitor = 71 | text = cmd[update:1000] echo "$(~/.config/scripts/media/music-status.sh)" 72 | color = rgba(242, 243, 244, 0.8) 73 | font_size = 18 74 | font_family = $fontMono 75 | position = 0, -375 76 | halign = center 77 | valign = center 78 | } 79 | -------------------------------------------------------------------------------- /dunst/dunstrc: -------------------------------------------------------------------------------- 1 | [global] 2 | # Monitor and positioning 3 | monitor = 0 4 | follow = keyboard 5 | origin = top-right 6 | scale = 0 7 | 8 | # Dimensions and spacing 9 | width = (300, 800) 10 | height = (100, 400) 11 | gap_size = 10 12 | padding = 12 13 | horizontal_padding = 12 14 | 15 | # Visual appearance 16 | corner_radius = 9 17 | frame_width = 0 18 | separator_height = 2 19 | transparency = 20 20 | 21 | # Typography 22 | font = Liga SFMono Nerd Font 11 23 | line_height = 0 24 | text_icon_padding = 8 25 | alignment = left 26 | 27 | # Behavior 28 | indicate_hidden = yes 29 | stack_duplicates = true 30 | hide_duplicate_count = false 31 | ignore_dbusclose = false 32 | sticky_history = yes 33 | history_length = 20 34 | always_run_script = true 35 | startup_notification = false 36 | enable_posix_regex = true 37 | 38 | # Content formatting 39 | markup = full 40 | format = "%a\n%s\n%b" 41 | word_wrap = yes 42 | ellipsize = middle 43 | ignore_newline = no 44 | show_age_threshold = 60 45 | idle_threshold = 120 46 | 47 | # Icons 48 | icon_position = left 49 | min_icon_size = 16 50 | max_icon_size = 64 51 | icon_path = /usr/share/icons/Papirus-Dark/24x24/apps/:/home/saatvik333/.icons/ 52 | 53 | # Progress bar 54 | progress_bar = true 55 | progress_bar_height = 10 56 | progress_bar_frame_width = 1 57 | progress_bar_min_width = 150 58 | progress_bar_max_width = 300 59 | progress_bar_corner_radius = 4 60 | 61 | # Mouse interaction 62 | mouse_left_click = close_current 63 | mouse_middle_click = do_action, close_current 64 | mouse_right_click = close_all 65 | 66 | # Colors 67 | frame_color = "#BE8877" 68 | highlight = "#A8A597" 69 | separator_color = "#BFBDC0" 70 | 71 | [experimental] 72 | per_monitor_dpi = false 73 | 74 | [urgency_low] 75 | timeout = 4 76 | background = "#131214ee" 77 | foreground = "#BFBDC0" 78 | frame_color = "#BE8877" 79 | 80 | [urgency_normal] 81 | timeout = 6 82 | background = "#13121480" 83 | foreground = "#BFBDC0" 84 | frame_color = "#FAE8D2" 85 | 86 | [urgency_critical] 87 | timeout = 0 88 | background = "#131214ee" 89 | foreground = "#BFBDC0" 90 | frame_color = "#716D74" 91 | new_icon = /usr/share/icons/Papirus-Dark/24x24/status/dialog-warning.svg 92 | -------------------------------------------------------------------------------- /wallust/templates/dunstrc: -------------------------------------------------------------------------------- 1 | [global] 2 | # Monitor and positioning 3 | monitor = 0 4 | follow = keyboard 5 | origin = top-right 6 | scale = 0 7 | 8 | # Dimensions and spacing 9 | width = (300, 800) 10 | height = (100, 400) 11 | gap_size = 10 12 | padding = 12 13 | horizontal_padding = 12 14 | 15 | # Visual appearance 16 | corner_radius = 9 17 | frame_width = 0 18 | separator_height = 2 19 | transparency = 20 20 | 21 | # Typography 22 | font = Liga SFMono Nerd Font 11 23 | line_height = 0 24 | text_icon_padding = 8 25 | alignment = left 26 | 27 | # Behavior 28 | indicate_hidden = yes 29 | stack_duplicates = true 30 | hide_duplicate_count = false 31 | ignore_dbusclose = false 32 | sticky_history = yes 33 | history_length = 20 34 | always_run_script = true 35 | startup_notification = false 36 | enable_posix_regex = true 37 | 38 | # Content formatting 39 | markup = full 40 | format = "%a\n%s\n%b" 41 | word_wrap = yes 42 | ellipsize = middle 43 | ignore_newline = no 44 | show_age_threshold = 60 45 | idle_threshold = 120 46 | 47 | # Icons 48 | icon_position = left 49 | min_icon_size = 16 50 | max_icon_size = 64 51 | icon_path = /usr/share/icons/Papirus-Dark/24x24/apps/:/home/saatvik333/.icons/ 52 | 53 | # Progress bar 54 | progress_bar = true 55 | progress_bar_height = 10 56 | progress_bar_frame_width = 1 57 | progress_bar_min_width = 150 58 | progress_bar_max_width = 300 59 | progress_bar_corner_radius = 4 60 | 61 | # Mouse interaction 62 | mouse_left_click = close_current 63 | mouse_middle_click = do_action, close_current 64 | mouse_right_click = close_all 65 | 66 | # Colors 67 | frame_color = "{{color4}}" 68 | highlight = "{{color5}}" 69 | separator_color = "{{foreground}}" 70 | 71 | [experimental] 72 | per_monitor_dpi = false 73 | 74 | [urgency_low] 75 | timeout = 4 76 | background = "{{background | darken(0.1)}}ee" 77 | foreground = "{{foreground}}" 78 | frame_color = "{{color4}}" 79 | 80 | [urgency_normal] 81 | timeout = 6 82 | background = "{{background | darken(0.1)}}80" 83 | foreground = "{{foreground}}" 84 | frame_color = "{{color6}}" 85 | 86 | [urgency_critical] 87 | timeout = 0 88 | background = "{{background | darken(0.1)}}ee" 89 | foreground = "{{foreground}}" 90 | frame_color = "{{color9}}" 91 | new_icon = /usr/share/icons/Papirus-Dark/24x24/status/dialog-warning.svg 92 | -------------------------------------------------------------------------------- /yazi/yazi.toml: -------------------------------------------------------------------------------- 1 | # Yazi configuration file 2 | 3 | [opener] 4 | play = [ 5 | { run = 'celluloid "$@"', orphan = true, for = "unix" }, 6 | ] 7 | edit = [ 8 | { run = 'nvim "$@"', desc = "nvim", block = true, for = "unix" }, 9 | ] 10 | open = [ 11 | { run = 'xdg-open "$1"', desc = "Open", for = "unix" }, 12 | ] 13 | reveal = [ 14 | { run = 'xdg-open "$(dirname "$1")"', desc = "Reveal", for = "unix" }, 15 | { run = '''exiftool "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show EXIF", for = "unix" }, 16 | ] 17 | pdf = [ 18 | { run = 'zathura "$1"', desc = "Open with Zathura", for = "unix" }, 19 | ] 20 | markdown = [ 21 | { run = 'glow "$1"', desc = "View with glow", for = "unix" }, 22 | ] 23 | extract = [ 24 | { run = '7z x "$1"', block = true, desc = "Extract with 7z", for = "unix" }, 25 | ] 26 | view_archive = [ 27 | { run = 'if [ -f "$1" ]; then case "$1" in *.tar) tar tf "$1" ;; *.zip) unzip -l "$1" ;; *.rar) unrar l "$1" ;; *.7z) 7z l "$1" ;; esac; echo "Press enter to exit"; read _; fi', block = true, desc = "View archive contents", for = "unix" }, 28 | ] 29 | ebook = [ 30 | { run = 'ebook-viewer "$1"', desc = "Open with ebook-viewer", for = "unix" }, 31 | ] 32 | 33 | [open] 34 | rules = [ 35 | # Folder 36 | { name = "*/", use = ["open", "edit", "reveal"] }, 37 | # Text 38 | { mime = "text/*", use = ["edit", "reveal"] }, 39 | # Markdown 40 | { mime = "text/markdown", use = ["markdown", "edit", "reveal"] }, 41 | # Image 42 | { mime = "image/*", use = ["open", "reveal"] }, 43 | # Media 44 | { mime = "video/*", use = ["play", "reveal"] }, 45 | { mime = "audio/*", use = ["play", "reveal"] }, 46 | # Archive 47 | { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", use = ["extract", "view_archive", "reveal"] }, 48 | # PDF 49 | { mime = "application/pdf", use = ["pdf", "reveal"] }, 50 | # Ebooks 51 | { mime = "application/epub+zip", use = ["ebook", "reveal"] }, 52 | # JSON 53 | { mime = "application/{json,ndjson}", use = ["edit", "reveal"] }, 54 | # JavaScript 55 | { mime = "*/javascript", use = ["edit", "reveal"] }, 56 | # Empty file 57 | { mime = "inode/empty", use = ["edit", "reveal"] }, 58 | # Fallback 59 | { name = "*", use = ["open", "reveal"] }, 60 | ] 61 | 62 | [mgr] 63 | show_hidden = true 64 | -------------------------------------------------------------------------------- /fish/config.fish: -------------------------------------------------------------------------------- 1 | if status is-interactive 2 | # Commands to run in interactive sessions can go here 3 | end 4 | 5 | # Starship initialization 6 | starship init fish | source 7 | 8 | # EZA Aliases 9 | alias ls 'eza --color=always --group-directories-first --icons' 10 | alias ll 'eza -l --color=always --group-directories-first --icons --git --time-style=long-iso' 11 | alias la 'eza -a --color=always --group-directories-first --icons' 12 | alias l 'eza -lah --color=always --group-directories-first --icons --git --time-style=long-iso' 13 | alias lt 'eza -aT --color=always --group-directories-first --icons' 14 | alias l. 'eza -a | grep -E "^\."' # Show only dotfiles 15 | 16 | # System Aliases 17 | alias update-grub 'sudo grub-mkconfig -o /boot/grub/grub.cfg' 18 | alias backup 'sudo timeshift --create --comments "archbtw-backup-"(date +%Y%m%d)' 19 | alias shutdown 'systemctl poweroff' 20 | alias reload 'source ~/.config/fish/config.fish' 21 | 22 | # Basic Aliases 23 | alias c 'clear' 24 | alias h 'history' 25 | alias q 'exit' 26 | 27 | # Fish-specific settings 28 | set -g fish_greeting "" 29 | 30 | # Fish-specific aliases 31 | alias fishconfig '$EDITOR ~/.config/fish/config.fish' 32 | 33 | # Fish-specific functions 34 | function mkcd 35 | mkdir -p $argv[1]; and cd $argv[1] 36 | end 37 | 38 | function extract 39 | if test -f $argv[1] 40 | switch $argv[1] 41 | case '*.tar.bz2' 42 | tar xjf $argv[1] 43 | case '*.tar.gz' 44 | tar xzf $argv[1] 45 | case '*.bz2' 46 | bunzip2 $argv[1] 47 | case '*.rar' 48 | unrar x $argv[1] 49 | case '*.gz' 50 | gunzip $argv[1] 51 | case '*.tar' 52 | tar xf $argv[1] 53 | case '*.tbz2' 54 | tar xjf $argv[1] 55 | case '*.tgz' 56 | tar xzf $argv[1] 57 | case '*.zip' 58 | unzip $argv[1] 59 | case '*.Z' 60 | uncompress $argv[1] 61 | case '*.7z' 62 | 7z x $argv[1] 63 | case '*' 64 | echo "'$argv[1]' cannot be extracted via extract()" 65 | end 66 | else 67 | echo "'$argv[1]' is not a valid file" 68 | end 69 | end 70 | 71 | string match -q "$TERM_PROGRAM" "kiro" and . (kiro --locate-shell-integration-path fish) 72 | -------------------------------------------------------------------------------- /starship/starship.toml: -------------------------------------------------------------------------------- 1 | # Main format configuration 2 | format = """ 3 | $username\ 4 | $hostname\ 5 | $directory\ 6 | $git_branch\ 7 | $git_commit\ 8 | $git_state\ 9 | $git_status\ 10 | $package\ 11 | $python\ 12 | $nodejs\ 13 | $rust\ 14 | $golang\ 15 | $docker_context\ 16 | $line_break\ 17 | $character 18 | """ 19 | 20 | add_newline = false 21 | 22 | # Directory configuration 23 | [directory] 24 | format = "[ $path ]($style)[$read_only]($read_only_style)" 25 | read_only = "󰌾 " 26 | truncation_length = 3 27 | fish_style_pwd_dir_length = 1 28 | home_symbol = "~" 29 | 30 | # Character at prompt 31 | [character] 32 | success_symbol = "[\\$](bold green)" 33 | error_symbol = "[](bold red)" 34 | vimcmd_symbol ="[](bold green)" 35 | 36 | # Username display 37 | [username] 38 | format = "[$user]($style)" 39 | disabled = false 40 | show_always = true 41 | 42 | # Hostname for SSH 43 | [hostname] 44 | ssh_only = true 45 | ssh_symbol = "" 46 | format = "[$hostname ]($style)" 47 | style = "bg:#A94744 fg:#0D1017" 48 | disabled = false 49 | 50 | # Time display 51 | [time] 52 | time_format = "%R" # Hour:Minute format 53 | format = '[ $time ]($style)' 54 | use_12hr = true 55 | 56 | [aws] 57 | symbol = "󰅟 " 58 | 59 | [buf] 60 | symbol = " " 61 | 62 | [c] 63 | symbol = " " 64 | 65 | [cmake] 66 | symbol = " " 67 | 68 | [conda] 69 | symbol = " " 70 | 71 | [crystal] 72 | symbol = " " 73 | 74 | [dart] 75 | symbol = " " 76 | 77 | [docker_context] 78 | symbol = " " 79 | 80 | [elixir] 81 | symbol = " " 82 | 83 | [elm] 84 | symbol = " " 85 | 86 | [fossil_branch] 87 | symbol = " " 88 | 89 | [git_branch] 90 | symbol = " " 91 | 92 | [git_commit] 93 | tag_symbol = " " 94 | 95 | [golang] 96 | symbol = " " 97 | 98 | [guix_shell] 99 | symbol = " " 100 | 101 | [haskell] 102 | symbol = " " 103 | 104 | [hg_branch] 105 | symbol = " " 106 | 107 | [java] 108 | symbol = " " 109 | 110 | [julia] 111 | symbol = " " 112 | 113 | [kotlin] 114 | symbol = " " 115 | 116 | [lua] 117 | symbol = " " 118 | 119 | [meson] 120 | symbol = "󰔷 " 121 | 122 | [nim] 123 | symbol = "󰆥 " 124 | 125 | [nix_shell] 126 | symbol = " " 127 | 128 | [nodejs] 129 | symbol = "󰎙 " 130 | 131 | [ocaml] 132 | symbol = " " 133 | 134 | [package] 135 | symbol = "󰏗 " 136 | 137 | [perl] 138 | symbol = " " 139 | 140 | [php] 141 | symbol = " " 142 | 143 | [pijul_channel] 144 | symbol = " " 145 | 146 | [python] 147 | symbol = " " 148 | 149 | [ruby] 150 | symbol = " " 151 | 152 | [rust] 153 | symbol = "󱘗 " 154 | 155 | [scala] 156 | symbol = " " 157 | 158 | [swift] 159 | symbol = " " 160 | 161 | [zig] 162 | symbol = " " 163 | 164 | [gradle] 165 | symbol = " " 166 | -------------------------------------------------------------------------------- /wallust/wallust.toml: -------------------------------------------------------------------------------- 1 | # wallust v3.3 2 | # 3 | # You can copy this file to ~/.config/wallust/wallust.toml (keep in mind is a sample config) 4 | 5 | # SIMPLE TUTORIAL, or `man wallust.5`: 6 | # https://explosion-mental.codeberg.page/wallust/ 7 | # 8 | # If comming from v2: https://explosion-mental.codeberg.page/wallust/v3.html#wallusttoml 9 | 10 | # Global section - values below can be overwritten by command line flags 11 | 12 | # How the image is parse, in order to get the colors: 13 | # full - resized - wal - thumb - fastresize - kmeans 14 | backend = "fastresize" 15 | 16 | # What color space to use to produce and select the most prominent colors: 17 | # lab - labmixed - lch - lchmixed 18 | color_space = "lab" 19 | 20 | # Use the most prominent colors in a way that makes sense, a scheme color palette: 21 | # dark - dark16 - darkcomp - darkcomp16 22 | # light - light16 - lightcomp - lightcomp16 23 | # harddark - harddark16 - harddarkcomp - harddarkcomp16 24 | # softdark - softdark16 - softdarkcomp - softdarkcomp16 25 | # softlight - softlight16 - softlightcomp - softlightcomp16 26 | palette = "harddark" 27 | 28 | # Ensures a "readable contrast" (OPTIONAL, disabled by default) 29 | # Should only be enabled when you notice an unreadable contrast frequently happening 30 | # with your images. The reference color for the contrast is the background color. 31 | check_contrast = true 32 | 33 | # Color saturation, between [1% and 100%] (OPTIONAL, disabled by default) 34 | # usually something higher than 50 increases the saturation and below 35 | # decreases it (on a scheme with strong and vivid colors) 36 | #saturation = 35 37 | 38 | # Alpha value for templating, by default 100 (no other use whatsoever) 39 | #alpha = 100 40 | 41 | [templates] 42 | # NOTE: prefer '' over "" for paths, avoids escaping. 43 | # template: A RELATIVE path that points to `~/.config/wallust/template` (depends on platform) 44 | # target: ABSOLUTE path in which to place a file with generated templated values. 45 | # ¡ If either one is a directory, then both SHOULD be one. ! 46 | # zathura = { template = 'zathura', target = '~/.config/zathura/zathurarc' } 47 | alacritty = { template = 'alacritty.toml', target = '~/.config/alacritty/colors.toml' } 48 | 49 | wofi = { src = 'wofi.css', dst = '~/.config/wofi/colors.css' } 50 | 51 | hypr = { src = 'hyprland.conf', dst = '~/.config/hypr/border.conf' } 52 | 53 | waybar = { src = 'waybar.css', dst = '~/.config/waybar/colors.css' } 54 | 55 | wlogout = { src = 'wlogout.css', dst = '~/.config/wlogout/colors.css' } 56 | 57 | kitty = { src = 'kitty.conf', dst = '~/.config/kitty/colors.conf' } 58 | 59 | gtk3 = { src = 'gtk.css', dst = '~/.config/gtk-3.0/colors.css' } 60 | 61 | gtk4 = { src = 'gtk.css', dst = '~/.config/gtk-4.0/colors.css' } 62 | 63 | dunst = { src = 'dunstrc', dst = '~/.config/dunst/dunstrc' } 64 | 65 | hyprswitch = { src = 'hyprswitch.css', dst = '~/.config/hypr/config/hyprswitch.css' } 66 | 67 | border = { src = 'border.conf', dst = '~/.config/hypr/config/border.conf' } 68 | 69 | vscode = { src = 'vscode.json', dst = '~/.cache/wallust/colors.json' } 70 | 71 | vscode2 = { src = 'vscode', dst = '~/.cache/wallust/colors' } 72 | 73 | neopywal = { src = 'neopywal.vim', dst = '~/.cache/wallust/colors_neopywal.vim' } 74 | 75 | swaync = { src = "swaync.css", dst = "~/.config/swaync/colors.css" } -------------------------------------------------------------------------------- /scripts/lib/color-utils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Color Processing Utilities Library 5 | # ~/.config/scripts/lib/color-utils.sh 6 | # Description: Color manipulation and processing functions 7 | # Author: saatvik333 8 | # Version: 1.0 9 | #=============================================================================== 10 | 11 | # Source common utilities 12 | source "$(dirname "${BASH_SOURCE[0]}")/common.sh" 13 | 14 | # --- Color Conversion Functions --- 15 | hex_to_rgb() { 16 | local -r hex="$1" 17 | local -r r=$((0x${hex:0:2})) 18 | local -r g=$((0x${hex:2:2})) 19 | local -r b=$((0x${hex:4:2})) 20 | echo "$r,$g,$b" 21 | } 22 | 23 | lighten_hex() { 24 | local -r hex="$1" 25 | local -r percent="$2" 26 | local r g b 27 | 28 | r=$((0x${hex:0:2})) 29 | g=$((0x${hex:2:2})) 30 | b=$((0x${hex:4:2})) 31 | 32 | r=$((r + (255 - r) * percent / 100)) 33 | g=$((g + (255 - g) * percent / 100)) 34 | b=$((b + (255 - b) * percent / 100)) 35 | 36 | r=$((r > 255 ? 255 : r)) 37 | g=$((g > 255 ? 255 : g)) 38 | b=$((b > 255 ? 255 : b)) 39 | 40 | printf "%02x%02x%02x" "$r" "$g" "$b" 41 | } 42 | 43 | calculate_luminance() { 44 | local -r r="$1" 45 | local -r g="$2" 46 | local -r b="$3" 47 | 48 | echo "scale=0; ($r * 299 + $g * 587 + $b * 114) / 1000" | bc 49 | } 50 | 51 | # --- Color Extraction Functions --- 52 | extract_css_color() { 53 | local -r file="$1" 54 | local -r var_name="$2" 55 | 56 | grep "^[[:space:]]*--${var_name}:" "$file" 2>/dev/null | \ 57 | sed -E 's/^[[:space:]]*--[^:]+:[[:space:]]*#([0-9a-fA-F]{6}).*/\1/' || echo "" 58 | } 59 | 60 | # --- Image Analysis Functions --- 61 | get_image_dimensions() { 62 | local -r image="$1" 63 | 64 | validate_dependencies "magick" 65 | 66 | magick identify -format "%w %h" "$image" 2>/dev/null || \ 67 | die "Failed to get image dimensions for: $image" 68 | } 69 | 70 | extract_region_rgb() { 71 | local -r image="$1" 72 | local -r width="$2" 73 | local -r height="$3" 74 | local -r x_offset="${4:-0}" 75 | local -r y_offset="${5:-0}" 76 | 77 | validate_dependencies "magick" 78 | 79 | magick "$image" \ 80 | -crop "${width}x${height}+${x_offset}+${y_offset}" \ 81 | -resize 1x1! \ 82 | -format "%[fx:int(255*r)] %[fx:int(255*g)] %[fx:int(255*b)]" \ 83 | info:- 2>/dev/null || \ 84 | die "Failed to extract RGB values from: $image" 85 | } 86 | 87 | # --- GIF Processing Functions --- 88 | extract_gif_frame() { 89 | local -r gif_path="$1" 90 | local -r output_path="$2" 91 | 92 | validate_dependencies "convert" 93 | 94 | log_info "Extracting first frame from GIF: $gif_path" 95 | 96 | ensure_directory "$(dirname "$output_path")" 97 | 98 | if ! convert "${gif_path}[0]" "$output_path" 2>/dev/null; then 99 | die "Failed to extract first frame from GIF: $gif_path" 100 | fi 101 | 102 | if [[ ! -f "$output_path" || ! -s "$output_path" ]]; then 103 | die "GIF frame extraction failed or produced empty file" 104 | fi 105 | 106 | log_success "Extracted GIF frame to: $output_path" 107 | echo "$output_path" 108 | } -------------------------------------------------------------------------------- /scripts/git/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Git Repository Cleanup 5 | # ~/.config/scripts/git/cleanup.sh 6 | # Description: Remove files from git tracking that should be ignored according to .gitignore 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: git 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | 17 | # --- Functions --- 18 | validate_git_repository() { 19 | if ! git rev-parse --git-dir >/dev/null 2>&1; then 20 | die "Not in a git repository!" 21 | fi 22 | 23 | if [[ ! -f .gitignore ]]; then 24 | die ".gitignore file not found!" 25 | fi 26 | } 27 | 28 | find_ignored_tracked_files() { 29 | git ls-files -ci --exclude-standard 2>/dev/null || echo "" 30 | } 31 | 32 | remove_files_from_tracking() { 33 | local -r files="$1" 34 | 35 | log_info "Removing files from git tracking..." 36 | 37 | echo "$files" | while IFS= read -r file; do 38 | if [[ -n "$file" ]]; then 39 | log_info "Removing: $file" 40 | if ! git rm --cached "$file" 2>/dev/null; then 41 | log_warn "Could not remove: $file" 42 | fi 43 | fi 44 | done 45 | } 46 | 47 | show_staged_changes() { 48 | if git diff --cached --quiet; then 49 | log_success "No changes to commit." 50 | else 51 | log_info "Files removed from tracking. You can now commit these changes:" 52 | echo 53 | echo " git commit -m \"Remove ignored files from tracking\"" 54 | echo 55 | log_info "Staged changes:" 56 | git diff --cached --name-only | sed 's/^/ - /' 57 | fi 58 | } 59 | 60 | main() { 61 | log_info "🧹 Git Repository Cleanup Script" 62 | echo "=================================" 63 | 64 | validate_git_repository 65 | 66 | log_info "Checking for files that should be ignored..." 67 | 68 | local ignored_files 69 | ignored_files=$(find_ignored_tracked_files) 70 | 71 | if [[ -z "$ignored_files" ]]; then 72 | log_success "No tracked files found that should be ignored!" 73 | exit 0 74 | fi 75 | 76 | echo 77 | log_warn "Found the following tracked files that should be ignored:" 78 | echo "$ignored_files" | sed 's/^/ - /' 79 | echo 80 | 81 | # Ask for confirmation 82 | read -p "Do you want to remove these files from git tracking? (y/N): " -n 1 -r 83 | echo 84 | 85 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then 86 | log_info "Operation cancelled." 87 | exit 0 88 | fi 89 | 90 | remove_files_from_tracking "$ignored_files" 91 | show_staged_changes 92 | 93 | log_success "Cleanup completed!" 94 | 95 | # Show current status 96 | echo 97 | log_info "Current git status:" 98 | git status --short 99 | 100 | # Send notification 101 | send_notification "Git Cleanup" "Cleanup Complete" \ 102 | "Removed ignored files from git tracking" "normal" "git" 103 | } 104 | 105 | # --- Script Entry Point --- 106 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 107 | main "$@" 108 | fi -------------------------------------------------------------------------------- /scripts/media/music-status.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Music Status Display 5 | # ~/.config/scripts/media/music-status.sh 6 | # Description: Displays current music status for hyprlock and other widgets 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: playerctl 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | 17 | # --- Configuration --- 18 | readonly MAX_TITLE_LENGTH=30 19 | readonly MAX_ARTIST_LENGTH=20 20 | readonly PLAYING_ICON="󰎇" 21 | readonly PAUSED_ICON="◦" 22 | 23 | # --- Functions --- 24 | truncate_text() { 25 | local -r text="$1" 26 | local -r max_length="$2" 27 | 28 | if (( ${#text} > max_length )); then 29 | echo "${text:0:$((max_length - 3))}..." 30 | else 31 | echo "$text" 32 | fi 33 | } 34 | 35 | find_active_player() { 36 | local players 37 | players=$(playerctl -l 2>/dev/null) || return 1 38 | 39 | [[ -z "$players" ]] && return 1 40 | 41 | local fallback_player="" 42 | 43 | for player in $players; do 44 | local status 45 | status=$(playerctl -p "$player" status 2>/dev/null) || continue 46 | 47 | case "$status" in 48 | "Playing") 49 | echo "$player" 50 | return 0 51 | ;; 52 | "Paused") 53 | [[ -z "$fallback_player" ]] && fallback_player="$player" 54 | ;; 55 | esac 56 | done 57 | 58 | [[ -n "$fallback_player" ]] && echo "$fallback_player" && return 0 59 | return 1 60 | } 61 | 62 | get_track_metadata() { 63 | local -r player="$1" 64 | local title artist status 65 | 66 | title=$(playerctl -p "$player" metadata title 2>/dev/null || echo "") 67 | artist=$(playerctl -p "$player" metadata artist 2>/dev/null || echo "") 68 | status=$(playerctl -p "$player" status 2>/dev/null || echo "") 69 | 70 | [[ -z "$title" ]] && return 1 71 | 72 | echo "$title|$artist|$status" 73 | } 74 | 75 | format_music_output() { 76 | local -r title="$1" 77 | local -r artist="$2" 78 | local -r status="$3" 79 | 80 | local formatted_title formatted_artist icon 81 | formatted_title=$(truncate_text "$title" "$MAX_TITLE_LENGTH") 82 | formatted_artist=$(truncate_text "$artist" "$MAX_ARTIST_LENGTH") 83 | 84 | case "$status" in 85 | "Playing") icon="$PLAYING_ICON" ;; 86 | *) icon="$PAUSED_ICON" ;; 87 | esac 88 | 89 | if [[ -n "$formatted_artist" ]]; then 90 | echo "$icon $formatted_artist · $formatted_title" 91 | else 92 | echo "$icon $formatted_title" 93 | fi 94 | } 95 | 96 | main() { 97 | validate_dependencies "playerctl" 98 | 99 | local active_player metadata 100 | active_player=$(find_active_player) || { echo ""; exit 0; } 101 | 102 | metadata=$(get_track_metadata "$active_player") || { echo ""; exit 0; } 103 | 104 | IFS='|' read -r title artist status <<< "$metadata" 105 | 106 | format_music_output "$title" "$artist" "$status" 107 | } 108 | 109 | # --- Script Entry Point --- 110 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 111 | main "$@" 112 | fi -------------------------------------------------------------------------------- /scripts/system/package-updates.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Package Updates Checker 5 | # ~/.config/scripts/system/package-updates.sh 6 | # Description: Checks for available package updates using checkupdates-with-aur 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: checkupdates-with-aur, notify-send 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | 17 | # --- Configuration --- 18 | readonly SCRIPT_NAME="${0##*/}" 19 | readonly LOCK_FILE="/tmp/${SCRIPT_NAME%.sh}.lock" 20 | readonly THRESHOLD_YELLOW=25 21 | readonly THRESHOLD_RED=100 22 | 23 | # --- Functions --- 24 | check_database_locks() { 25 | local -r pacman_lock="/var/lib/pacman/db.lck" 26 | local -r checkup_lock="${TMPDIR:-/tmp}/checkup-db-${UID}/db.lck" 27 | local -r timeout=30 28 | local elapsed=0 29 | 30 | while [[ -f "$pacman_lock" || -f "$checkup_lock" ]]; do 31 | if (( elapsed >= timeout )); then 32 | echo '{"tooltip": "Database locked - try again later", "class": "transparent"}' 33 | exit 1 34 | fi 35 | sleep 1 36 | ((elapsed++)) 37 | done 38 | } 39 | 40 | get_update_count() { 41 | local updates 42 | if ! updates=$(checkupdates-with-aur 2>/dev/null | wc -l); then 43 | log_error "Failed to check for updates" 44 | echo '{"tooltip": "Error checking updates", "class": "transparent"}' 45 | exit 1 46 | fi 47 | echo "$updates" 48 | } 49 | 50 | determine_css_class() { 51 | local -r updates=$1 52 | 53 | if (( updates == 0 )); then 54 | echo "transparent" 55 | elif (( updates <= THRESHOLD_YELLOW )); then 56 | echo "green" 57 | elif (( updates <= THRESHOLD_RED )); then 58 | echo "yellow" 59 | else 60 | echo "red" 61 | fi 62 | } 63 | 64 | output_waybar_json() { 65 | local -r updates=$1 66 | local -r css_class=$2 67 | 68 | if (( updates > 0 )); then 69 | printf '{"text": "%d", "tooltip": "%d packages require updates", "class": "%s"}\n' \ 70 | "$updates" "$updates" "$css_class" 71 | else 72 | printf '{"text": "0", "tooltip": "System is up to date", "class": "transparent"}\n' 73 | fi 74 | } 75 | 76 | main() { 77 | acquire_lock "$LOCK_FILE" "$SCRIPT_NAME" 78 | 79 | # Validate dependencies 80 | if ! command -v checkupdates-with-aur >/dev/null 2>&1; then 81 | send_notification "Package Updates" "Dependency Missing" \ 82 | "checkupdates-with-aur not found. Install pacman-contrib." "critical" "dialog-warning" 83 | echo '{"tooltip": "checkupdates-with-aur not found", "class": "transparent"}' 84 | exit 1 85 | fi 86 | 87 | check_database_locks 88 | 89 | local updates css_class 90 | updates=$(get_update_count) 91 | css_class=$(determine_css_class "$updates") 92 | 93 | output_waybar_json "$updates" "$css_class" 94 | 95 | # Send notification for significant updates 96 | if (( updates >= THRESHOLD_YELLOW )); then 97 | send_notification "Package Updates" "Updates Available" \ 98 | "$updates packages can be updated" "normal" "system-software-update" 99 | fi 100 | } 101 | 102 | # --- Script Entry Point --- 103 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 104 | main "$@" 105 | fi -------------------------------------------------------------------------------- /scripts/lib/common.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Common Utility Functions Library 5 | # ~/.config/scripts/lib/common.sh 6 | # Description: Shared utility functions for all scripts 7 | # Author: saatvik333 8 | # Version: 1.0 9 | #=============================================================================== 10 | 11 | # --- Logging Functions --- 12 | log_info() { 13 | local -r timestamp=$(date '+%Y-%m-%d %H:%M:%S') 14 | echo -e "\033[1;34m[$timestamp] INFO: $*\033[0m" >&2 15 | } 16 | 17 | log_error() { 18 | local -r timestamp=$(date '+%Y-%m-%d %H:%M:%S') 19 | echo -e "\033[1;31m[$timestamp] ERROR: $*\033[0m" >&2 20 | } 21 | 22 | log_success() { 23 | local -r timestamp=$(date '+%Y-%m-%d %H:%M:%S') 24 | echo -e "\033[1;32m[$timestamp] SUCCESS: $*\033[0m" >&2 25 | } 26 | 27 | log_warn() { 28 | local -r timestamp=$(date '+%Y-%m-%d %H:%M:%S') 29 | echo -e "\033[1;33m[$timestamp] WARN: $*\033[0m" >&2 30 | } 31 | 32 | log_debug() { 33 | if [[ ${DEBUG:-0} -eq 1 ]]; then 34 | local -r timestamp=$(date '+%Y-%m-%d %H:%M:%S') 35 | echo -e "\033[1;90m[$timestamp] DEBUG: $*\033[0m" >&2 36 | fi 37 | } 38 | 39 | # --- Error Handling --- 40 | die() { 41 | log_error "$*" 42 | exit 1 43 | } 44 | 45 | # --- File System Utilities --- 46 | ensure_directory() { 47 | local -r dir="$1" 48 | if [[ ! -d "$dir" ]]; then 49 | mkdir -p "$dir" || die "Failed to create directory: $dir" 50 | log_debug "Created directory: $dir" 51 | fi 52 | } 53 | 54 | validate_file() { 55 | local -r file="$1" 56 | local -r description="${2:-File}" 57 | 58 | [[ -f "$file" ]] || die "$description not found: $file" 59 | } 60 | 61 | validate_executable() { 62 | local -r file="$1" 63 | local -r description="${2:-Script}" 64 | 65 | validate_file "$file" "$description" 66 | [[ -x "$file" ]] || die "$description not executable: $file" 67 | } 68 | 69 | # --- Process Management --- 70 | acquire_lock() { 71 | local -r lock_file="$1" 72 | local -r script_name="${2:-$(basename "$0")}" 73 | 74 | if [[ -f "$lock_file" ]]; then 75 | local pid 76 | pid=$(cat "$lock_file" 2>/dev/null || echo "") 77 | if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then 78 | die "Another instance of $script_name is already running (PID: $pid)" 79 | else 80 | log_info "Removing stale lock file: $lock_file" 81 | rm -f "$lock_file" 82 | fi 83 | fi 84 | 85 | echo $$ >"$lock_file" 86 | trap "rm -f '$lock_file'" EXIT INT TERM 87 | } 88 | 89 | # --- Dependency Validation --- 90 | validate_dependencies() { 91 | local -ra required_deps=("$@") 92 | local missing_deps=() 93 | 94 | for dep in "${required_deps[@]}"; do 95 | command -v "$dep" >/dev/null 2>&1 || missing_deps+=("$dep") 96 | done 97 | 98 | if [[ ${#missing_deps[@]} -gt 0 ]]; then 99 | die "Missing required dependencies: ${missing_deps[*]}" 100 | fi 101 | 102 | log_debug "All dependencies validated: ${required_deps[*]}" 103 | } 104 | 105 | # --- Notification Helper --- 106 | send_notification() { 107 | local -r app_name="$1" 108 | local -r title="$2" 109 | local -r message="$3" 110 | local -r urgency="${4:-normal}" 111 | local -r icon="${5:-}" 112 | 113 | local notify_args=( 114 | --app-name="$app_name" 115 | --urgency="$urgency" 116 | ) 117 | 118 | [[ -n "$icon" ]] && notify_args+=(--icon="$icon") 119 | 120 | notify-send "${notify_args[@]}" "$title" "$message" 121 | } -------------------------------------------------------------------------------- /nvim/lua/plugins/dashboard.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvimdev/dashboard-nvim", 3 | lazy = false, -- As https://github.com/nvimdev/dashboard-nvim/pull/450, dashboard-nvim shouldn't be lazy-loaded to properly handle stdin. 4 | opts = function() 5 | local logo = [[ 6 | 7 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 8 | ⠀⠀⠀⠀⠀⠀⠀⡀⢄⢮⡳⣶⢭⣖⣢⡤⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 9 | ⠀⠀⠀⢀⢤⣢⣵⣾IuseNVIM⣿⣶⣯⣵⣒⡠⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 10 | ⠀⠀⠀⢸⣎⣿⣿⣿⣿^⡿⠛⠛⠻⣿⣿⣿⣿⣿⣿⡇⣿⣟⣵⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 11 | ⠀⠀⠀⢸⡇⠼⣿⣿⣿⡟⠀⢠⣤⢸⡊⢻⣿⡿⣿⣿⡇⣿⣿⣷⣝⣕⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 12 | ⠀⠀⠀⢸⡇⢑⢻⣿⣿⣧⡀⣅⡡⣠⠆⠹⣿⣿⣿⣿⣷⣿⣿⣿⣿⣷⢟⢯⠢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 13 | ⠀⠀⠀⢸⡇⣸⢉⢿⣯⣿⣿⣶⣧⣤⣰⣾⣿⡟⠽⣋⣈⢿⣿⣿⣿⣿⢸⣷⣝⠮⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 14 | ⠀⠀⠀⢸⣷⣿⠠⣞⢿⣿⣿⣿⣿⢟⡫⡗⡢⡑⢭⣗⡺⢷⣙⠿⣿⣿⣼⣿⢿⣷⣍⣎⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 15 | ⠀⠀⠀⢸⣿⣿⣼⡏⠗⢝⢿⣿⡈⢥⣿⠞⡜⡼⣾⣛⢿⣛⣻⣷⣰⠹⣻⣿⣿⣿⣿⣿⣮⡪⡢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ 16 | ⠀⠀⠀⣸⣿⣿⣾⡇⠄⠁⠋⣊⢟⠬⡻⣯⡵⣣⡻⣟⡦⢾⣿⣋⣇⢉⣿⣿⣿⣿⣿⣿⣿⣿⣿⡪⡢⡀⠀⠀⠀⠀⠀⠀⠀ 17 | ⠠⠰⣹⢔⠹⣿⣿⣫⠁⠀⢰⡌⢿⡎⢜⠝⡿⣟⡫⢗⡫⠏⠙⢫⣵⠘⣄⡘⠿⣿⣿⣿⣿⣿⣿⣿⣾⣮⡢⡀⠀⠀⠀⠀⠀ 18 | ⠀⠀⠀⠄⡚⠘⢿⣯⡅⠀⢸⠇⠄⠀⠀⠉⠲⠔⡱⡻⢿⣽⣁⠢⢼⣶⣿⣿⣷⣬⡉⡹⠿⣿⣿⣿⣿⣿⣯⡪⡢⡀⠀⠀⠀ 19 | ⠀⠀⠠⠀⢀⠄⠎⢿⣷⠀⢸⠇⡄⡆⡌⠁⡂⠀⡘⢠⠱⠨⢛⢿⣶⣬⡉⡹⠻⣿⣷⣢⣄⠙⢿⣿⣿⣿⣿⡿⠞⢞⡆⠀⠀ 20 | ⠀⠀⠀⠀⠈⠈⠒⠊⡻⡇⡄⡒⠤⡀⠁⠃⠁⢠⢀⠁⠀⠀⠂⢉⢊⠝⠿⣶⡤⡘⢿⣿⣷⣝⢦⣙⠿⡛⣉⣼⣾⣿⡇⠀⠀ 21 | ⠀⠀⠀⠀⠀⠘⠠⢬⠐⠱⠺⢵⡣⢆⡅⢆⡎⠘⠈⠘⢰⠰⠀⠃⠎⡔⠸⢐⠹⢻⢵⡩⣛⢟⢋⣡⣵⣿⡟⢹⢿⣿⡇⠀⠀ 22 | ⠀⠀⠀⠀⠀⠀⠂⠄⡈⢀⠀⠑⢉⢓⠾⡥⢨⠐⡠⣀⠂⠆⡄⡄⡀⠐⢀⠀⡌⡖⢌⠪⣤⢾⣿⣿⣿⣏⣍⢰⣿⢿⡇⢤⠀ 23 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠋⠐⠁⠀⠈⠐⠱⠁⢊⢅⡃⠉⢒⠤⡁⠃⠦⢌⠘⠀⠁⠀⠂⣿⣿⣿⣿⣿⣿⣧⣸⣾⣿⡇⢠⠰ 24 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠄⠄⡀⠂⠅⠌⠕⣰⢈⠒⠵⢢⢎⣐⠀⡃⠄⠀⣿⢷⣿⣿⣿⣟⣯⣷⠿⢻⢱⠂⠈ 25 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠈⠀⢉⢒⠄⡂⡖⡩⢒⠄⠀⣿⡿⣟⣽⣾⡟⡏⠆⠀⠑⠈⠀⠀ 26 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠄⠂⠈⠈⢑⠣⢇⡎⠄⣿⣿⡿⡉⠃⠃⠀⠀⠀⠀⠀⠀⠀ 27 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠁⠁⠀⠎⠛⠉⡀⠉⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀ 28 | ]] 29 | 30 | logo = string.rep("\n", 4) .. logo .. "\n" 31 | 32 | local opts = { 33 | theme = "doom", 34 | hide = { 35 | -- this is taken care of by lualine 36 | -- enabling this messes up the actual laststatus setting after loading a file 37 | statusline = false, 38 | }, 39 | config = { 40 | header = vim.split(logo, "\n"), 41 | -- stylua: ignore 42 | center = { 43 | { action = 'lua LazyVim.pick()()', desc = " Find File", icon = " ", key = "f" }, 44 | -- { action = 'lua LazyVim.pick("oldfiles")()', desc = " Recent Files", icon = " ", key = "r" }, 45 | { action = 'lua LazyVim.pick("live_grep")()', desc = " Find Text", icon = " ", key = "g" }, 46 | -- { action = 'lua LazyVim.pick.config_files()()', desc = " Config", icon = " ", key = "c" }, 47 | { action = 'lua require("persistence").load()', desc = " Restore Session", icon = " ", key = "s" }, 48 | { action = "LazyExtras", desc = " Lazy Extras", icon = " ", key = "x" }, 49 | -- { action = "Lazy", desc = " Lazy", icon = "󰒲 ", key = "l" }, 50 | { action = function() vim.api.nvim_input("qa") end, desc = " Quit", icon = " ", key = "q" }, 51 | }, 52 | footer = function() 53 | local stats = require("lazy").stats() 54 | local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) 55 | return { "⚡ Neovim loaded " .. stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms" } 56 | end, 57 | }, 58 | } 59 | 60 | for _, button in ipairs(opts.config.center) do 61 | button.desc = button.desc .. string.rep(" ", 40 - #button.desc) 62 | button.key_format = " %s" 63 | end 64 | 65 | -- open dashboard after closing lazy 66 | if vim.o.filetype == "lazy" then 67 | vim.api.nvim_create_autocmd("WinClosed", { 68 | pattern = tostring(vim.api.nvim_get_current_win()), 69 | once = true, 70 | callback = function() 71 | vim.schedule(function() 72 | vim.api.nvim_exec_autocmds("UIEnter", { group = "dashboard" }) 73 | end) 74 | end, 75 | }) 76 | end 77 | 78 | return opts 79 | end, 80 | } 81 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hyprland Configuration 2 | 3 | A comprehensive, modern, rust-powered Hyprland 🍚 with a focus on featuring automated theme management, dynamic wallpaper integration, and seamless workflow optimization. 4 | 5 | >There is another branch of this repository that has a sharper, minimal, bordered configuration [LINK](https://github.com/saatvik333/hyprland-dotfiles/tree/rice/sharp-minimal). 6 | 7 | --- 8 | 9 | >[!NOTE] 10 | >I've switched from Hyprland to Niri, so this repository will no longer be actively maintained. 11 | > 12 | >For people interested in trying out my Niri configuration: [niri-dotfiles](https://github.com/saatvik333/niri-dotfiles) 13 | ## Overview 14 | 15 | This configuration provides a complete desktop environment built around Hyprland with intelligent automation systems. The setup includes dynamic theme synchronization across all applications, animated wallpaper support, and a modular script architecture for system management. 16 | 17 | https://github.com/user-attachments/assets/d348e384-ef6b-4c0d-9aef-bea7f89104bc 18 | 19 | |Swaync | Waybar | 20 | |---------|-----------| 21 | | image | image| 22 | 23 | ## Key Features 24 | 25 | ### Automated Theme Management 26 | 27 | - **Dynamic Color Extraction**: Automatically generates color schemes from wallpapers using Wallust 28 | - **System-wide Synchronization**: Updates GTK themes, terminal colors, Waybar, and application themes 29 | - **GIF Wallpaper Support**: Seamless integration with animated wallpapers via waytrogen and swww 30 | - **Intelligent Adaptation**: Adjusts interface elements based on wallpaper luminosity 31 | 32 | ### Modular Script Architecture 33 | 34 | - **Theme Orchestration**: Centralized theme management with component-specific handlers 35 | - **Media Controls**: Unified volume, brightness, and playback management with visual feedback 36 | - **System Utilities**: Package update monitoring, git repository maintenance, and status displays 37 | - **Error Handling**: Comprehensive logging, notifications, and recovery mechanisms 38 | 39 | ### Application Integration 40 | 41 | - **Terminal**: Alacritty, Kitty with dynamic color schemes 42 | - **Shell**: Zsh and Bash with unified environment configuration 43 | - **Editor**: Neovim with theme synchronization 44 | - **Browser**: Custom themes and integration 45 | - **Development**: VSCode, various development tools 46 | 47 | ## Configuration Structure 48 | 49 | ```txt 50 | ~/.config/ 51 | ├── hypr/ # Hyprland configuration 52 | ├── waybar/ # Status bar configuration 53 | ├── scripts/ # Automation and utility scripts 54 | ├── wallust/ # Color palette templates 55 | ├── themes/ # GTK and application themes 56 | └── [applications]/ # Individual application configs 57 | ``` 58 | 59 | ## Script System 60 | 61 | The configuration includes a modular script system organized by functionality: 62 | 63 | - **Theme Management**: Automated theme synchronization and wallpaper processing 64 | - **Media Controls**: Volume, brightness, and playback management 65 | - **System Utilities**: Package updates, git maintenance, status monitoring 66 | - **Development Tools**: Project management and workflow automation 67 | 68 | For detailed script documentation, see [`scripts/README.md`](scripts/README.md). 69 | 70 | ## License 71 | 72 | This configuration is provided as-is for educational and personal use. Individual components may have their own licenses. 73 | 74 | --- 75 | 76 | ## Author 77 | 78 | **Maintainer:** [saatvik333](https://github.com/saatvik333) 79 | 80 | > If you find this project helpful, please consider starring the repository to show your support and help others discover it. 81 | -------------------------------------------------------------------------------- /zsh/plugins/sudo/sudo.plugin.zsh: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------------------------ 2 | # Description 3 | # ----------- 4 | # 5 | # sudo or sudo -e (replacement for sudoedit) will be inserted before the command 6 | # 7 | # ------------------------------------------------------------------------------ 8 | # Authors 9 | # ------- 10 | # 11 | # * Dongweiming 12 | # * Subhaditya Nath 13 | # * Marc Cornellà 14 | # * Carlo Sala 15 | # 16 | # ------------------------------------------------------------------------------ 17 | 18 | __sudo-replace-buffer() { 19 | local old=$1 new=$2 space=${2:+ } 20 | 21 | # if the cursor is positioned in the $old part of the text, make 22 | # the substitution and leave the cursor after the $new text 23 | if [[ $CURSOR -le ${#old} ]]; then 24 | BUFFER="${new}${space}${BUFFER#$old }" 25 | CURSOR=${#new} 26 | # otherwise just replace $old with $new in the text before the cursor 27 | else 28 | LBUFFER="${new}${space}${LBUFFER#$old }" 29 | fi 30 | } 31 | 32 | sudo-command-line() { 33 | # If line is empty, get the last run command from history 34 | [[ -z $BUFFER ]] && LBUFFER="$(fc -ln -1)" 35 | 36 | # Save beginning space 37 | local WHITESPACE="" 38 | if [[ ${LBUFFER:0:1} = " " ]]; then 39 | WHITESPACE=" " 40 | LBUFFER="${LBUFFER:1}" 41 | fi 42 | 43 | { 44 | # If $SUDO_EDITOR or $VISUAL are defined, then use that as $EDITOR 45 | # Else use the default $EDITOR 46 | local EDITOR=${SUDO_EDITOR:-${VISUAL:-$EDITOR}} 47 | 48 | # If $EDITOR is not set, just toggle the sudo prefix on and off 49 | if [[ -z "$EDITOR" ]]; then 50 | case "$BUFFER" in 51 | sudo\ -e\ *) __sudo-replace-buffer "sudo -e" "" ;; 52 | sudo\ *) __sudo-replace-buffer "sudo" "" ;; 53 | *) LBUFFER="sudo $LBUFFER" ;; 54 | esac 55 | return 56 | fi 57 | 58 | # Check if the typed command is really an alias to $EDITOR 59 | 60 | # Get the first part of the typed command 61 | local cmd="${${(Az)BUFFER}[1]}" 62 | # Get the first part of the alias of the same name as $cmd, or $cmd if no alias matches 63 | local realcmd="${${(Az)aliases[$cmd]}[1]:-$cmd}" 64 | # Get the first part of the $EDITOR command ($EDITOR may have arguments after it) 65 | local editorcmd="${${(Az)EDITOR}[1]}" 66 | 67 | # Note: ${var:c} makes a $PATH search and expands $var to the full path 68 | # The if condition is met when: 69 | # - $realcmd is '$EDITOR' 70 | # - $realcmd is "cmd" and $EDITOR is "cmd" 71 | # - $realcmd is "cmd" and $EDITOR is "cmd --with --arguments" 72 | # - $realcmd is "/path/to/cmd" and $EDITOR is "cmd" 73 | # - $realcmd is "/path/to/cmd" and $EDITOR is "/path/to/cmd" 74 | # or 75 | # - $realcmd is "cmd" and $EDITOR is "cmd" 76 | # - $realcmd is "cmd" and $EDITOR is "/path/to/cmd" 77 | # or 78 | # - $realcmd is "cmd" and $EDITOR is /alternative/path/to/cmd that appears in $PATH 79 | if [[ "$realcmd" = (\$EDITOR|$editorcmd|${editorcmd:c}) \ 80 | || "${realcmd:c}" = ($editorcmd|${editorcmd:c}) ]] \ 81 | || builtin which -a "$realcmd" | command grep -Fx -q "$editorcmd"; then 82 | __sudo-replace-buffer "$cmd" "sudo -e" 83 | return 84 | fi 85 | 86 | # Check for editor commands in the typed command and replace accordingly 87 | case "$BUFFER" in 88 | $editorcmd\ *) __sudo-replace-buffer "$editorcmd" "sudo -e" ;; 89 | \$EDITOR\ *) __sudo-replace-buffer '$EDITOR' "sudo -e" ;; 90 | sudo\ -e\ *) __sudo-replace-buffer "sudo -e" "$EDITOR" ;; 91 | sudo\ *) __sudo-replace-buffer "sudo" "" ;; 92 | *) LBUFFER="sudo $LBUFFER" ;; 93 | esac 94 | } always { 95 | # Preserve beginning space 96 | LBUFFER="${WHITESPACE}${LBUFFER}" 97 | 98 | # Redisplay edit buffer (compatibility with zsh-syntax-highlighting) 99 | zle redisplay 100 | } 101 | } 102 | 103 | zle -N sudo-command-line 104 | 105 | # Defined shortcut keys: [Esc] [Esc] 106 | bindkey -M emacs '\e\e' sudo-command-line 107 | bindkey -M vicmd '\e\e' sudo-command-line 108 | bindkey -M viins '\e\e' sudo-command-line 109 | -------------------------------------------------------------------------------- /shell.env: -------------------------------------------------------------------------------- 1 | # Gemini CLI 2 | source $HOME/.config/gemini.env 3 | 4 | ################# 5 | #### ALIASES #### 6 | ################# 7 | 8 | # General 9 | alias nf='neofetch' 10 | alias ff='fastfetch' 11 | alias uf='uwufetch' 12 | 13 | # CLI Utility 14 | alias ls='eza --color=always --group-directories-first --icons' 15 | alias ll='eza -l --color=always --group-directories-first --icons --git --time-style=long-iso' 16 | alias la='eza -a --color=always --group-directories-first --icons' 17 | alias l='eza -lah --color=always --group-directories-first --icons --git --time-style=long-iso' 18 | alias lt='eza -aT --color=always --group-directories-first --icons' 19 | alias l.='eza -a | grep -E "^\."' # Show only dotfiles 20 | alias q='exit' 21 | alias h='history' 22 | alias c='clear' 23 | alias reload='source ~/.config/shell.env' 24 | 25 | # Navigation 26 | alias ..='cd ..' 27 | alias ...='cd ../..' 28 | alias ....='cd ../../..' 29 | alias .....='cd ../../../..' 30 | 31 | # Git 32 | alias gs='git status' 33 | alias ga='git add' 34 | alias gc='git commit' 35 | alias gcl='git clone' 36 | alias gl='git log --oneline' 37 | alias gd='git diff' 38 | alias gpush='git push' 39 | alias gpull='git pull' 40 | 41 | # System 42 | alias wifi='nmtui' 43 | alias install='yay -S' 44 | alias update='yay -Syu' 45 | alias search='yay -Ss' 46 | alias lsearch='yay -Qs' 47 | alias remove='yay -Rns' 48 | alias update-grub='sudo grub-mkconfig -o /boot/grub/grub.cfg' 49 | alias backup='sudo timeshift --create --comments "archbtw-backup-$(date +%Y%m%d)"' 50 | alias shutdown='systemctl poweroff' 51 | alias du='dust' 52 | 53 | ############################### 54 | #### Environment Variables #### 55 | ############################### 56 | 57 | export SHELL_CONFIG_DIR="$HOME/.config" 58 | 59 | # Development paths 60 | export GOPATH="$HOME/go" 61 | export PATH="$GOPATH/bin:$PATH" 62 | 63 | export CARGO_HOME="$HOME/.cargo" 64 | export PATH="$CARGO_HOME/bin:$PATH" 65 | 66 | # NVM - Lazy-loaded for faster shell startup 67 | export NVM_DIR="$HOME/.nvm" 68 | 69 | # Android cmdline tools & Flutter SDK 70 | export ANDROID_HOME="$HOME/Android" 71 | export ANDROID_SDK_ROOT="$ANDROID_HOME/sdk" 72 | export PATH="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$PATH" 73 | export PATH="$ANDROID_SDK_ROOT/platform-tools:$PATH" 74 | export FLUTTER_HOME="$ANDROID_HOME/flutter" 75 | export PATH="$FLUTTER_HOME/bin:$PATH" 76 | export CHROME_EXECUTABLE="/usr/bin/google-chrome-stable" 77 | 78 | ########################## 79 | #### CUSTOM FUNCTIONS #### 80 | ########################## 81 | 82 | # Utility 83 | mkcd() { 84 | mkdir -p "$1" && cd "$1" 85 | } 86 | 87 | extract() { 88 | if [ -f "$1" ]; then 89 | case "$1" in 90 | *.tar.bz2) tar xjf "$1" ;; 91 | *.tar.gz) tar xzf "$1" ;; 92 | *.bz2) bunzip2 "$1" ;; 93 | *.rar) unrar x "$1" ;; 94 | *.gz) gunzip "$1" ;; 95 | *.tar) tar xvf "$1" ;; 96 | *.tbz2) tar xjf "$1" ;; 97 | *.tgz) tar xzf "$1" ;; 98 | *.zip) unzip "$1" ;; 99 | *.Z) uncompress "$1" ;; 100 | *.7z) 7z x "$1" ;; 101 | *) echo "'$1' cannot be extracted via extract()" ;; 102 | esac 103 | else 104 | echo "'$1' is not a valid file" 105 | fi 106 | } 107 | 108 | # Lazy Loading NVM (for faster shell startup) 109 | # Centralized list of commands to be lazy-loaded. 110 | _lazy_nvm_commands=("nvm" "node" "npm" "npx" "pnpm" "ng" "gemini" "tailwind" "vsce") 111 | 112 | # Lazy-loader function for NVM 113 | lazy_load_nvm() { 114 | unset -f lazy_load_nvm 115 | for cmd in "${_lazy_nvm_commands[@]}"; do 116 | unset -f "$cmd" 2>/dev/null # Use 2>/dev/null to suppress errors if function doesn't exist 117 | done 118 | unset _lazy_nvm_commands 119 | 120 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 121 | [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" 122 | 123 | "$@" 124 | } 125 | 126 | # Dynamically create a lazy-loading function for each command in the list. 127 | for cmd in "${_lazy_nvm_commands[@]}"; do 128 | eval "$cmd() { lazy_load_nvm \"$cmd\" \"\$@\"; }" 129 | done 130 | 131 | unset cmd -------------------------------------------------------------------------------- /nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" }, 3 | "SchemaStore.nvim": { "branch": "main", "commit": "e906ac3ed0bd273781759e7635b5b824393c925c" }, 4 | "blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" }, 5 | "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, 6 | "catppuccin": { "branch": "main", "commit": "30fa4d122d9b22ad8b2e0ab1b533c8c26c4dde86" }, 7 | "clangd_extensions.nvim": { "branch": "main", "commit": "b67cc417d9020fb4b83d46662351b4d16894905e" }, 8 | "cmake-tools.nvim": { "branch": "master", "commit": "447fe7629bb5d5baca6f6099f3568484d149aa51" }, 9 | "conform.nvim": { "branch": "master", "commit": "26ebdcfb4f3c9d33d6f81c9534037bd5172b6d65" }, 10 | "crates.nvim": { "branch": "main", "commit": "a49df0f70171adc77704eac70dd2c0d179065933" }, 11 | "dashboard-nvim": { "branch": "master", "commit": "c42fcfbd96dfcaa486c0a0ab52494316f1c31350" }, 12 | "edgy.nvim": { "branch": "main", "commit": "7e8dedc39abebe40c289b8012cc89b11c69aa7a0" }, 13 | "flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" }, 14 | "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, 15 | "gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" }, 16 | "grug-far.nvim": { "branch": "main", "commit": "385d1949dc21d0c39e7a74b4f4a25da18817bc86" }, 17 | "inc-rename.nvim": { "branch": "main", "commit": "8ae25b35ae16ca4bd5de3d3c472eec3b574018d4" }, 18 | "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, 19 | "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, 20 | "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, 21 | "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, 22 | "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, 23 | "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, 24 | "mini.ai": { "branch": "main", "commit": "1cd4f021a05c29acd4ab511c0981da14217daf38" }, 25 | "mini.hipatterns": { "branch": "main", "commit": "2b78f3d475d60ea1793a6d595ff65a0db9ac3a67" }, 26 | "mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" }, 27 | "mini.pairs": { "branch": "main", "commit": "1e1ca3f60f58d4050bf814902b472eec9963a5dd" }, 28 | "neopywal": { "branch": "master", "commit": "2d65d138463bbbe9d824b9bc1048ef1888017da6" }, 29 | "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" }, 30 | "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, 31 | "nvim-lint": { "branch": "master", "commit": "7ef127aaede2a4d5ad8df8321e2eb4e567f29594" }, 32 | "nvim-lspconfig": { "branch": "master", "commit": "5f1c9a90c8db9c647da40ce6cf5be9e49ccbf0c7" }, 33 | "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, 34 | "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" }, 35 | "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, 36 | "persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" }, 37 | "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, 38 | "refactoring.nvim": { "branch": "master", "commit": "74b608dfee827c2372250519d433cc21cb083407" }, 39 | "render-markdown.nvim": { "branch": "main", "commit": "ec74afa498b6ce3ee686131adf2b3941b713f307" }, 40 | "rustaceanvim": { "branch": "master", "commit": "eb9beab7d80eb052f78165b28d18f55844b26aef" }, 41 | "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, 42 | "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, 43 | "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" }, 44 | "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, 45 | "ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" }, 46 | "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } 47 | } 48 | -------------------------------------------------------------------------------- /scripts/theme/waybar-detection.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Waybar Wallpaper Detection 5 | # ~/.config/scripts/theme/waybar-detection.sh 6 | # Description: Updates waybar styles based on wallpaper luminosity analysis 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: magick, sed, bc 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/color-utils.sh" 17 | 18 | # --- Configuration --- 19 | readonly LUMINANCE_THRESHOLD=100 20 | readonly CROP_PERCENTAGE=5 21 | readonly WAYBAR_TEMPLATE="$HOME/.config/wallust/templates/waybar.css" 22 | readonly WAYBAR_STYLE="$HOME/.config/waybar/style.css" 23 | 24 | # --- Style Update Functions --- 25 | update_waybar_template_for_light() { 26 | validate_file "$WAYBAR_TEMPLATE" "Waybar template" 27 | 28 | sed -i.bak \ 29 | -e 's/@define-color background {{background}};/@define-color background {{foreground}};/' \ 30 | -e 's/@define-color foreground {{foreground}};/@define-color foreground {{background}};/' \ 31 | "$WAYBAR_TEMPLATE" || die "Failed to update waybar template for light wallpaper" 32 | } 33 | 34 | update_waybar_template_for_dark() { 35 | validate_file "$WAYBAR_TEMPLATE" "Waybar template" 36 | 37 | sed -i.bak \ 38 | -e 's/@define-color background {{foreground}};/@define-color background {{background}};/' \ 39 | -e 's/@define-color foreground {{background}};/@define-color foreground {{foreground}};/' \ 40 | "$WAYBAR_TEMPLATE" || die "Failed to update waybar template for dark wallpaper" 41 | } 42 | 43 | update_waybar_style_for_light() { 44 | validate_file "$WAYBAR_STYLE" "Waybar style" 45 | 46 | sed -i \ 47 | -e 's/background: rgba(255, 255, 255, 0\.1)/background: rgba(0, 0, 0, 0.1)/g' \ 48 | "$WAYBAR_STYLE" || die "Failed to update waybar style for light wallpaper" 49 | } 50 | 51 | update_waybar_style_for_dark() { 52 | validate_file "$WAYBAR_STYLE" "Waybar style" 53 | 54 | sed -i \ 55 | -e 's/background: rgba(0, 0, 0, 0\.1)/background: rgba(255, 255, 255, 0.1)/g' \ 56 | "$WAYBAR_STYLE" || die "Failed to update waybar style for dark wallpaper" 57 | } 58 | 59 | apply_theme_adjustments() { 60 | local -r r="$1" 61 | local -r g="$2" 62 | local -r b="$3" 63 | local -r luminance="$4" 64 | 65 | if (( $(echo "$luminance > $LUMINANCE_THRESHOLD" | bc -l) )); then 66 | # Light wallpaper - use dark backgrounds 67 | update_waybar_template_for_light 68 | update_waybar_style_for_light 69 | 70 | log_info "RGB: $r $g $b, Luminance: $luminance (Light wallpaper - using dark backgrounds)" 71 | else 72 | # Dark wallpaper - use light backgrounds 73 | update_waybar_template_for_dark 74 | update_waybar_style_for_dark 75 | 76 | log_info "RGB: $r $g $b, Luminance: $luminance (Dark wallpaper - using light backgrounds)" 77 | fi 78 | } 79 | 80 | analyze_wallpaper() { 81 | local -r wallpaper="$1" 82 | local img_info img_w img_h crop_h rgb_values r g b luminance 83 | 84 | # Get image dimensions 85 | img_info=$(get_image_dimensions "$wallpaper") 86 | read -r img_w img_h <<< "$img_info" 87 | 88 | # Calculate crop region (top 5% of image) 89 | crop_h=$((img_h * CROP_PERCENTAGE / 100)) 90 | 91 | # Extract RGB values from top region 92 | rgb_values=$(extract_region_rgb "$wallpaper" "$img_w" "$crop_h") 93 | read -r r g b <<< "$rgb_values" 94 | 95 | # Calculate luminance 96 | luminance=$(calculate_luminance "$r" "$g" "$b") 97 | 98 | echo "$r $g $b $luminance" 99 | } 100 | 101 | main() { 102 | [[ $# -eq 1 ]] || die "Usage: $0 " 103 | 104 | local -r wallpaper="$1" 105 | validate_file "$wallpaper" "Wallpaper file" 106 | 107 | validate_dependencies "magick" "sed" "bc" 108 | 109 | log_info "Analyzing wallpaper: $wallpaper" 110 | 111 | local analysis_result r g b luminance 112 | analysis_result=$(analyze_wallpaper "$wallpaper") 113 | read -r r g b luminance <<< "$analysis_result" 114 | 115 | apply_theme_adjustments "$r" "$g" "$b" "$luminance" 116 | 117 | log_success "Waybar theme adjustment completed" 118 | } 119 | 120 | # --- Script Entry Point --- 121 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 122 | main "$@" 123 | fi -------------------------------------------------------------------------------- /nvim/lua/plugins/plugins.lua: -------------------------------------------------------------------------------- 1 | return {{ 2 | "LazyVim/LazyVim", 3 | opts = { 4 | -- colorscheme = function() 5 | -- end, 6 | -- colorscheme = "catppuccin", 7 | extras = {"lazyvim.plugins.extras.lang.typescript", "lazyvim.plugins.extras.lang.python", 8 | "lazyvim.plugins.extras.lang.json", "lazyvim.plugins.extras.lang.yaml", 9 | "lazyvim.plugins.extras.lang.markdown", "lazyvim.plugins.extras.lang.docker", 10 | "lazyvim.plugins.extras.lang.terraform", "lazyvim.plugins.extras.lang.html", 11 | "lazyvim.plugins.extras.lang.css", "lazyvim.plugins.extras.lang.tailwind", 12 | "lazyvim.plugins.extras.lang.rust", "lazyvim.plugins.extras.lang.go", 13 | "lazyvim.plugins.extras.lang.clangd", "lazyvim.plugins.extras.lang.prisma", 14 | "lazyvim.plugins.extras.ui.edgy", "lazyvim.plugins.extras.editor.refactoring", 15 | "lazyvim.plugins.extras.util.project"} 16 | } 17 | 18 | }, { 19 | "williamboman/mason.nvim", 20 | opts = function(_, opts) 21 | vim.list_extend(opts.ensure_installed, { -- Core LSP Servers 22 | "lua-language-server", "pyright", "ruff-lsp", "typescript-language-server", "eslint-lsp", "html-lsp", "css-lsp", 23 | "tailwindcss-language-server", "json-lsp", "yaml-language-server", "taplo", "marksman", "rust-analyzer", 24 | "gopls", "dockerfile-language-server", "terraform-ls", "prisma-language-server", "clangd", -- Formatters 25 | "stylua", "prettierd", "eslint_d", "shfmt", "rustfmt", "gofumpt", "goimports", "taplo", "black", "isort", 26 | "clang-format", 27 | 28 | -- Linters 29 | "shellcheck", "ruff", "eslint_d", "yamllint", "markdownlint", "hadolint"}) 30 | end 31 | }, { 32 | "mfussenegger/nvim-lint", 33 | event = "LazyFile", 34 | opts = { 35 | linters_by_ft = { 36 | lua = {"selene"}, 37 | python = {"ruff"}, 38 | javascript = {"eslint_d"}, 39 | typescript = {"eslint_d"}, 40 | javascriptreact = {"eslint_d"}, 41 | typescriptreact = {"eslint_d"}, 42 | vue = {"eslint_d"}, 43 | html = {"htmlhint"}, 44 | css = {"stylelint"}, 45 | scss = {"stylelint"}, 46 | yaml = {"yamllint"}, 47 | markdown = {"markdownlint"}, 48 | sh = {"shellcheck"}, 49 | dockerfile = {"hadolint"}, 50 | terraform = {"tflint"}, 51 | ["*"] = {"typos"} 52 | }, 53 | linters = { 54 | typos = { 55 | condition = function(ctx) 56 | return vim.fs.find({"typos.toml", ".typos.toml"}, { 57 | path = ctx.filename, 58 | upward = true 59 | })[1] 60 | end 61 | } 62 | } 63 | } 64 | }, { 65 | "stevearc/conform.nvim", 66 | opts = { 67 | formatters_by_ft = { 68 | lua = {"stylua"}, 69 | python = {"isort", "black"}, 70 | javascript = {{"prettierd"}}, 71 | typescript = {{"prettierd"}}, 72 | javascriptreact = {{"prettierd"}}, 73 | typescriptreact = {{"prettierd"}}, 74 | vue = {{"prettierd"}}, 75 | html = {{"prettierd"}}, 76 | css = {{"prettierd"}}, 77 | scss = {{"prettierd"}}, 78 | json = {{"prettierd"}}, 79 | jsonc = {{"prettierd"}}, 80 | yaml = {{"prettierd"}}, 81 | markdown = {{"prettierd"}}, 82 | sh = {"shfmt"}, 83 | rust = {"rustfmt"}, 84 | go = {"gofumpt", "goimports"}, 85 | toml = {"taplo"}, 86 | terraform = {"terraform_fmt"}, 87 | cpp = {"clang-format"}, 88 | c = {"clang-format"}, 89 | ["*"] = {"trim_whitespace"} 90 | }, 91 | formatters = { 92 | prettierd = { 93 | prepend_args = {"--tab-width", "2", "--single-quote", "true", "--trailing-comma", "es5", "--print-width", "100", "--semi", "true"} 94 | }, 95 | shfmt = { 96 | prepend_args = {"-i", "2", "-ci", "-sr"} 97 | }, 98 | rustfmt = { 99 | prepend_args = {"--edition", "2021"} 100 | }, 101 | stylua = { 102 | prepend_args = {"--indent-type", "Spaces", "--indent-width", "2", "--column-width", "120"} 103 | }, 104 | black = { 105 | prepend_args = {"--line-length", "88", "--target-version", "py38"} 106 | }, 107 | ["clang-format"] = { 108 | prepend_args = {"--style=Google"} 109 | } 110 | } 111 | } 112 | }} 113 | -------------------------------------------------------------------------------- /neofetch/config.conf: -------------------------------------------------------------------------------- 1 | 2 | # NEOFETCH CONFIGURATION 3 | # Professional system information display 4 | 5 | 6 | 7 | # MAIN INFORMATION DISPLAY 8 | 9 | print_info() { 10 | # System Header 11 | info title 12 | info underline 13 | 14 | # Core System Information 15 | info "OS" distro 16 | info "Host" model 17 | info "Kernel" kernel 18 | info "Uptime" uptime 19 | info "Packages" packages 20 | info "Shell" shell 21 | 22 | # Display & Environment 23 | info "Resolution" resolution 24 | info "DE" de 25 | info "WM" wm 26 | info "WM Theme" wm_theme 27 | info "Theme" theme 28 | info "Icons" icons 29 | info "Terminal" term 30 | info "Terminal Font" term_font 31 | 32 | # Hardware Information 33 | info "CPU" cpu 34 | info "GPU" gpu 35 | info "Memory" memory 36 | info "Disk" disk 37 | 38 | # Additional Information (Conditional) 39 | [[ -n "$gpu_driver" ]] && info "GPU Driver" gpu_driver 40 | [[ "$show_battery" == "on" ]] && info "Battery" battery 41 | [[ "$show_song" == "on" ]] && info "Song" song 42 | [[ "$show_local_ip" == "on" ]] && info "Local IP" local_ip 43 | 44 | # Color Palette 45 | info cols 46 | } 47 | 48 | 49 | # PERFORMANCE & DISPLAY SETTINGS 50 | 51 | 52 | # Show additional information (toggle these as needed) 53 | show_battery="off" 54 | show_song="off" 55 | show_local_ip="off" 56 | show_cpu_usage="off" 57 | 58 | 59 | # SYSTEM INFORMATION SETTINGS 60 | 61 | 62 | # Title Settings 63 | title_fqdn="off" 64 | 65 | # Kernel Settings 66 | kernel_shorthand="on" 67 | 68 | # Distribution Settings 69 | distro_shorthand="off" 70 | os_arch="on" 71 | 72 | # Uptime Settings 73 | uptime_shorthand="on" 74 | 75 | # Memory Settings 76 | memory_percent="on" 77 | memory_unit="gib" 78 | 79 | # Package Manager Settings 80 | package_managers="tiny" 81 | 82 | # Shell Settings 83 | shell_path="off" 84 | shell_version="on" 85 | 86 | 87 | # CPU CONFIGURATION 88 | 89 | speed_type="bios_limit" 90 | speed_shorthand="on" 91 | cpu_brand="on" 92 | cpu_speed="on" 93 | cpu_cores="logical" 94 | cpu_temp="C" 95 | 96 | 97 | # GPU CONFIGURATION 98 | 99 | gpu_brand="on" 100 | gpu_type="all" 101 | 102 | 103 | # DISPLAY SETTINGS 104 | 105 | refresh_rate="on" 106 | 107 | # GTK Theme Settings 108 | gtk_shorthand="on" 109 | gtk2="on" 110 | gtk3="on" 111 | 112 | # Desktop Environment 113 | de_version="on" 114 | 115 | 116 | # DISK CONFIGURATION 117 | 118 | disk_show=('/' '/home') 119 | disk_subtitle="mount" 120 | disk_percent="on" 121 | 122 | 123 | # NETWORK SETTINGS 124 | 125 | public_ip_host="http://ident.me" 126 | public_ip_timeout=2 127 | 128 | 129 | # MUSIC PLAYER SETTINGS 130 | 131 | music_player="auto" 132 | song_format="%artist% - %title%" 133 | song_shorthand="off" 134 | mpc_args=() 135 | 136 | 137 | # VISUAL STYLING 138 | 139 | 140 | # Color Scheme 141 | colors=(4 6 1 8 8 6) # Custom blue/cyan theme 142 | 143 | # Text Formatting 144 | bold="on" 145 | underline_enabled="on" 146 | underline_char="─" 147 | separator=" ❯" 148 | 149 | 150 | # COLOR BLOCKS 151 | 152 | color_blocks="on" 153 | block_range=(0 15) 154 | block_width=3 155 | block_height=1 156 | col_offset="auto" 157 | 158 | 159 | # PROGRESS BARS 160 | 161 | bar_char_elapsed="━" 162 | bar_char_total="─" 163 | bar_border="on" 164 | bar_length=15 165 | bar_color_elapsed="distro" 166 | bar_color_total="distro" 167 | 168 | # Display Settings for Progress Bars 169 | cpu_display="infobar" 170 | memory_display="infobar" 171 | battery_display="infobar" 172 | disk_display="infobar" 173 | 174 | 175 | # ASCII ART SETTINGS 176 | 177 | image_backend="ascii" 178 | image_source="auto" 179 | ascii_distro="auto" 180 | ascii_colors=(distro) 181 | ascii_bold="on" 182 | 183 | 184 | # IMAGE SETTINGS (if using image backend) 185 | 186 | image_loop="off" 187 | thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" 188 | crop_mode="normal" 189 | crop_offset="center" 190 | image_size="auto" 191 | gap=3 192 | yoffset=0 193 | xoffset=0 194 | background_color="" 195 | 196 | 197 | # PERFORMANCE SETTINGS 198 | 199 | stdout="off" 200 | 201 | 202 | # CUSTOM FUNCTIONS (Advanced) 203 | 204 | 205 | # Custom function to show system load 206 | get_load() { 207 | case $os in 208 | "Linux"*) 209 | load=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | tr -d ' ') 210 | ;; 211 | *) 212 | load="N/A" 213 | ;; 214 | esac 215 | echo "$load" 216 | } 217 | 218 | # Custom function to show weather (requires curl and wttr.in) 219 | get_weather() { 220 | if command -v curl >/dev/null 2>&1; then 221 | weather=$(curl -s "wttr.in/?format=1" 2>/dev/null | head -1) 222 | [[ -n "$weather" ]] && echo "$weather" || echo "N/A" 223 | else 224 | echo "N/A" 225 | fi 226 | } 227 | 228 | # Uncomment to add custom information 229 | # info "Load Average" load 230 | # info "Weather" weather -------------------------------------------------------------------------------- /kew/kewrc: -------------------------------------------------------------------------------- 1 | # Configuration file for kew terminal music player. 2 | # Make sure that kew is not running before editing this file in order for changes to take effect. 3 | 4 | 5 | [miscellaneous] 6 | 7 | path=/home/saatvik333/Music 8 | version=3.4.1 9 | allowNotifications=1 10 | hideLogo=1 11 | hideHelp=0 12 | lastVolume=100 13 | 14 | # Cache: Set to 1 to use cache of the music library directory tree for faster startup times. 15 | cacheLibrary=-1 16 | 17 | # Delay when drawing title in track view, set to 0 to have no delay. 18 | titleDelay=9 19 | 20 | # Same as '--quitonstop' flag, exits after playing the whole playlist. 21 | quitOnStop=0 22 | 23 | # Glimmering text on the bottom row. 24 | hideGlimmeringText=0 25 | 26 | # Replay gain check first, can be either 0=track, 1=album or 2=disabled. 27 | replayGainCheckFirst=0 28 | 29 | # Save Repeat and Shuffle Settings. 30 | saveRepeatShuffleSettings=1 31 | 32 | repeatState=0 33 | 34 | shuffleEnabled=0 35 | 36 | # Set the window title to the title of the currently playing track 37 | trackTitleAsWindowTitle=1 38 | 39 | 40 | [visualizer] 41 | 42 | visualizerEnabled=1 43 | visualizerHeight=6 44 | visualizerBrailleMode=0 45 | 46 | # How colors are laid out in the spectrum visualizer. 0=lighten, 1=brightness depending on bar height, 2=reversed, 3=reversed darken. 47 | visualizerColorType=2 48 | 49 | # 0=Thin bars, 1=Bars twice the width, 2=Auto (depends on window size). 50 | visualizerBarWidth=2 51 | 52 | 53 | [progress bar] 54 | 55 | # Progress bar in track view 56 | # The progress bar can be configured in many ways. 57 | # When copying the values below, be sure to include values that are empty spaces or things will get messed up. 58 | # Be sure to have the actual uncommented values last. 59 | # For instance use the below values for a pill muncher mode: 60 | 61 | #progressBarElapsedEvenChar= 62 | #progressBarElapsedOddChar= 63 | #progressBarApproachingEvenChar=• 64 | #progressBarApproachingOddChar=· 65 | #progressBarCurrentEvenChar=ᗧ 66 | #progressBarCurrentOddChar=ᗧ 67 | 68 | # To have a thick line: 69 | 70 | #progressBarElapsedEvenChar=━ 71 | #progressBarElapsedOddChar=━ 72 | #progressBarApproachingEvenChar=━ 73 | #progressBarApproachingOddChar=━ 74 | #progressBarCurrentEvenChar=━ 75 | #progressBarCurrentOddChar=━ 76 | 77 | # To have dots (the original): 78 | 79 | #progressBarElapsedEvenChar=■ 80 | #progressBarElapsedOddChar= 81 | #progressBarApproachingEvenChar== 82 | #progressBarApproachingOddChar= 83 | #progressBarCurrentEvenChar=■ 84 | #progressBarCurrentOddChar= 85 | 86 | # Current values: 87 | 88 | progressBarElapsedEvenChar=━ 89 | progressBarElapsedOddChar=━ 90 | progressBarApproachingEvenChar=━ 91 | progressBarApproachingOddChar=━ 92 | progressBarCurrentEvenChar=━ 93 | progressBarCurrentOddChar=━ 94 | 95 | [colors] 96 | 97 | # Use the configuration file colors below 98 | useConfigColors=1 99 | 100 | # Color values are 0=Black, 1=Red, 2=Green, 3=Yellow, 4=Blue, 5=Magenta, 6=Cyan, 7=White 101 | # These mostly affect the library view. 102 | 103 | # Logo color: 104 | color=6 105 | 106 | # Header color in library view: 107 | artistColor=6 108 | 109 | # Now playing song text in library view: 110 | titleColor=6 111 | 112 | # Color of enqueued songs in library view: 113 | enqueuedColor=6 114 | 115 | 116 | [track cover] 117 | 118 | coverEnabled=1 119 | coverAnsi=0 120 | 121 | 122 | [mouse] 123 | 124 | mouseEnabled=1 125 | 126 | # Mouse actions are 0=None, 1=Select song, 2=Toggle pause, 3=Scroll up, 4=Scroll down, 5=Seek forward, 6=Seek backward, 7=Volume up, 8=Volume down, 9=Switch to next view, 10=Switch to previous view 127 | mouseLeftClickAction=0 128 | mouseMiddleClickAction=1 129 | mouseRightClickAction=2 130 | mouseScrollUpAction=3 131 | mouseScrollDownAction=4 132 | 133 | # Mouse action when using mouse scroll + alt 134 | mouseAltScrollUpAction=7 135 | mouseAltScrollDownAction=8 136 | 137 | 138 | [key bindings] 139 | 140 | volumeUp=+ 141 | volumeUpAlt== 142 | volumeDown=- 143 | previousTrackAlt=h 144 | nextTrackAlt=l 145 | scrollUpAlt=k 146 | scrollDownAlt=j 147 | switchNumberedSong=G 148 | togglePause=p 149 | toggleColorsDerivedFrom=i 150 | toggleVisualizer=v 151 | toggleAscii=b 152 | toggleRepeat=r 153 | toggleShuffle=s 154 | seekBackward=a 155 | seekForward=d 156 | savePlaylist=x 157 | addToFavoritesPlaylist=. 158 | updateLibrary=u 159 | moveSongUp=t 160 | moveSongDown=g 161 | enqueueAndPlay=^M 162 | sortLibrary=o 163 | quit=q 164 | altQuit= 165 | 166 | # Alt keys for the different main views, normally F2-F7: 167 | showPlaylistAlt= 168 | showLibraryAlt= 169 | showTrackAlt= 170 | showSearchAlt= 171 | showKeysAlt= 172 | 173 | # Keys for scrolling page up and page down: 174 | prevPage=[5~ 175 | nextPage=[6~ 176 | 177 | # For special keys use terminal codes: OS, for F4 for instance. This can depend on the terminal. 178 | # You can find out the codes for the keys by using tools like showkey. 179 | # For special keys, see the key value after the bracket "[" after typing "showkey -a" in the terminal and then pressing a key you want info about. 180 | -------------------------------------------------------------------------------- /scripts/utils/screenshot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Screenshot script using grim and slurp 4 | # Usage: screenshot.sh [OPTIONS] 5 | # Options: 6 | # -r, --region [fullscreen|workspace|selection] Screenshot region (default: selection) 7 | # -h, --help Show this help message 8 | 9 | SCREENSHOT_DIR="$HOME/Pictures/Screenshots" 10 | REGION="selection" 11 | 12 | # Check dependencies 13 | check_dependencies() { 14 | local missing_deps=() 15 | 16 | if ! command -v grim >/dev/null 2>&1; then 17 | missing_deps+=("grim") 18 | fi 19 | 20 | if ! command -v slurp >/dev/null 2>&1; then 21 | missing_deps+=("slurp") 22 | fi 23 | 24 | if [[ ${#missing_deps[@]} -gt 0 ]]; then 25 | echo "Error: Missing required dependencies: ${missing_deps[*]}" 26 | echo "Please install them using your package manager" 27 | exit 1 28 | fi 29 | } 30 | 31 | # Check dependencies first 32 | check_dependencies 33 | 34 | # Create screenshot directory if it doesn't exist 35 | mkdir -p "$SCREENSHOT_DIR" 36 | 37 | # Parse command line arguments 38 | while [[ $# -gt 0 ]]; do 39 | case $1 in 40 | -r|--region) 41 | REGION="$2" 42 | shift 2 43 | ;; 44 | -h|--help) 45 | echo "Usage: $0 [OPTIONS]" 46 | echo "Options:" 47 | echo " -r, --region [fullscreen|workspace|selection] Screenshot region (default: selection)" 48 | echo " -h, --help Show this help message" 49 | exit 0 50 | ;; 51 | *) 52 | echo "Unknown option: $1" 53 | exit 1 54 | ;; 55 | esac 56 | done 57 | 58 | # Validate region parameter 59 | if [[ ! "$REGION" =~ ^(fullscreen|workspace|selection)$ ]]; then 60 | echo "Error: Invalid region '$REGION'. Must be one of: fullscreen, workspace, selection" 61 | exit 1 62 | fi 63 | 64 | # Generate filename with timestamp 65 | TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") 66 | FILENAME="screenshot_${TIMESTAMP}.png" 67 | FILEPATH="$SCREENSHOT_DIR/$FILENAME" 68 | 69 | # Function to send notification with preview and action buttons 70 | send_notification() { 71 | local filepath="$1" 72 | local success="$2" 73 | 74 | if [[ "$success" == "true" ]]; then 75 | local filename=$(basename "$filepath") 76 | 77 | # Use notify-send with actions and handle responses 78 | { 79 | action=$(notify-send \ 80 | --icon="$filepath" \ 81 | --app-name="Screenshot" \ 82 | --urgency=normal \ 83 | --expire-time=10000 \ 84 | --wait \ 85 | --action="open=📖 Open Screenshot" \ 86 | --action="folder=📁 Open Folder" \ 87 | "📸 Screenshot Saved" \ 88 | "$filename\n✅ Copied to clipboard") 89 | 90 | # Handle the action response 91 | case "$action" in 92 | "open") 93 | xdg-open "$filepath" 2>/dev/null & 94 | ;; 95 | "folder") 96 | xdg-open "$(dirname "$filepath")" 2>/dev/null & 97 | ;; 98 | esac 99 | } & 100 | fi 101 | } 102 | 103 | # Function to take screenshot based on region 104 | take_screenshot() { 105 | local region="$1" 106 | local output_file="$2" 107 | 108 | case "$region" in 109 | "fullscreen") 110 | grim "$output_file" 111 | ;; 112 | "workspace") 113 | # Get current workspace/monitor 114 | grim -o "$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')" "$output_file" 2>/dev/null || \ 115 | grim -o "$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')" "$output_file" 2>/dev/null || \ 116 | grim "$output_file" # Fallback to fullscreen if workspace detection fails 117 | ;; 118 | "selection") 119 | # Get selection coordinates first, then capture with delay 120 | SELECTION=$(slurp 2>/dev/null) 121 | if [[ -n "$SELECTION" ]]; then 122 | # Small delay to ensure slurp overlay is completely gone 123 | sleep 0.1 124 | grim -g "$SELECTION" "$output_file" 125 | else 126 | return 1 127 | fi 128 | ;; 129 | esac 130 | } 131 | 132 | # Take the screenshot 133 | echo "Taking $REGION screenshot..." 134 | 135 | if take_screenshot "$REGION" "$FILEPATH"; then 136 | # Check if file was actually created and has content 137 | if [[ -f "$FILEPATH" && -s "$FILEPATH" ]]; then 138 | # Copy to clipboard 139 | if command -v wl-copy >/dev/null 2>&1; then 140 | wl-copy < "$FILEPATH" 141 | CLIPBOARD_SUCCESS=true 142 | elif command -v xclip >/dev/null 2>&1; then 143 | xclip -selection clipboard -t image/png < "$FILEPATH" 144 | CLIPBOARD_SUCCESS=true 145 | else 146 | echo "Warning: No clipboard utility found (wl-copy or xclip)" 147 | CLIPBOARD_SUCCESS=false 148 | fi 149 | 150 | echo "󰹑 Screenshot saved: $FILEPATH" 151 | if [[ "$CLIPBOARD_SUCCESS" == "true" ]]; then 152 | echo "Copied to clipboard" 153 | fi 154 | 155 | # Send notification with preview 156 | send_notification "$FILEPATH" "true" 157 | 158 | exit 0 159 | else 160 | echo "Error: Screenshot file was not created or is empty" 161 | exit 1 162 | fi 163 | else 164 | echo "Error: Failed to take screenshot" 165 | exit 1 166 | fi -------------------------------------------------------------------------------- /scripts/theme/wofi-colors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Wofi Color Update 5 | # ~/.config/scripts/theme/wofi-colors.sh 6 | # Description: Updates wofi style.css based on colors defined in colors.css 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: sed, grep 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/color-utils.sh" 17 | 18 | # --- Configuration --- 19 | readonly CONFIG_DIR="$HOME/.config" 20 | readonly WOFI_DIR="$CONFIG_DIR/wofi" 21 | readonly COLORS_FILE="$WOFI_DIR/colors.css" 22 | readonly STYLE_FILE="$WOFI_DIR/style.css" 23 | readonly FONT_FAMILY="Liga SFMono Nerd Font" 24 | 25 | # Default fallback colors 26 | declare -rA DEFAULT_COLORS=( 27 | ["BG"]="2A2D2E" 28 | ["FG"]="FFD3FF" 29 | ["C0"]="4F5253" 30 | ["C1"]="573B71" 31 | ["C3"]="8B4AAB" 32 | ["C4"]="AE57CE" 33 | ["C5"]="DC6FF3" 34 | ) 35 | 36 | # --- Functions --- 37 | extract_colors() { 38 | validate_file "$COLORS_FILE" "Colors file" 39 | 40 | declare -gA COLORS 41 | 42 | # Extract colors with fallbacks 43 | local bg fg c0 c1 c3 c4 c5 44 | bg=$(extract_css_color "$COLORS_FILE" "background") 45 | fg=$(extract_css_color "$COLORS_FILE" "foreground") 46 | c0=$(extract_css_color "$COLORS_FILE" "color0") 47 | c1=$(extract_css_color "$COLORS_FILE" "color1") 48 | c3=$(extract_css_color "$COLORS_FILE" "color3") 49 | c4=$(extract_css_color "$COLORS_FILE" "color4") 50 | c5=$(extract_css_color "$COLORS_FILE" "color5") 51 | 52 | # Set colors with fallbacks 53 | COLORS[BG]="${bg:-${DEFAULT_COLORS[BG]}}" 54 | COLORS[FG]="${fg:-${DEFAULT_COLORS[FG]}}" 55 | COLORS[C0]="${c0:-${DEFAULT_COLORS[C0]}}" 56 | COLORS[C1]="${c1:-${DEFAULT_COLORS[C1]}}" 57 | COLORS[C3]="${c3:-${DEFAULT_COLORS[C3]}}" 58 | COLORS[C4]="${c4:-${DEFAULT_COLORS[C4]}}" 59 | COLORS[C5]="${c5:-${DEFAULT_COLORS[C5]}}" 60 | } 61 | 62 | generate_derived_colors() { 63 | declare -gA DERIVED_COLORS 64 | 65 | local accent selection 66 | accent=$(lighten_hex "${COLORS[C4]}" 10) 67 | selection=$(lighten_hex "${COLORS[C3]}" 15) 68 | 69 | DERIVED_COLORS[ACCENT]="$accent" 70 | DERIVED_COLORS[SELECTION]="$selection" 71 | 72 | # Convert to RGB for rgba usage 73 | DERIVED_COLORS[BG_RGB]=$(hex_to_rgb "${COLORS[BG]}") 74 | DERIVED_COLORS[C0_RGB]=$(hex_to_rgb "${COLORS[C0]}") 75 | DERIVED_COLORS[C1_RGB]=$(hex_to_rgb "${COLORS[C1]}") 76 | DERIVED_COLORS[SELECTION_RGB]=$(hex_to_rgb "$selection") 77 | } 78 | 79 | log_color_info() { 80 | log_info "Extracted colors:" 81 | log_info "BG: ${COLORS[BG]}" 82 | log_info "FG: ${COLORS[FG]}" 83 | log_info "C0: ${COLORS[C0]}" 84 | log_info "C1: ${COLORS[C1]}" 85 | log_info "C3: ${COLORS[C3]}" 86 | log_info "C4: ${COLORS[C4]}" 87 | log_info "C5: ${COLORS[C5]}" 88 | log_info "" 89 | log_info "Generated colors:" 90 | log_info "Background: #${COLORS[BG]} -> rgba(${DERIVED_COLORS[BG_RGB]})" 91 | log_info "Accent: #${DERIVED_COLORS[ACCENT]}" 92 | log_info "Selection: #${DERIVED_COLORS[SELECTION]} -> rgba(${DERIVED_COLORS[SELECTION_RGB]})" 93 | } 94 | 95 | generate_wofi_style() { 96 | cat >"$STYLE_FILE" </dev/null 2>&1; then 34 | die "Not in a git repository!" 35 | fi 36 | 37 | if [[ ! -f .gitignore ]]; then 38 | die ".gitignore file not found!" 39 | fi 40 | } 41 | 42 | check_ignored_tracked_files() { 43 | log_info "Checking for tracked files that should be ignored..." 44 | 45 | local ignored_tracked 46 | ignored_tracked=$(git ls-files -ci --exclude-standard 2>/dev/null || echo "") 47 | 48 | if [[ -n "$ignored_tracked" ]]; then 49 | log_warn "Found tracked files that should be ignored:" 50 | echo "$ignored_tracked" | sed 's/^/ - /' 51 | echo 52 | return 1 53 | else 54 | log_success "No tracked files found that should be ignored." 55 | return 0 56 | fi 57 | } 58 | 59 | check_missing_common_patterns() { 60 | log_info "Checking for common ignore patterns..." 61 | 62 | local missing_patterns=() 63 | 64 | for pattern in "${COMMON_PATTERNS[@]}"; do 65 | if ! grep -q "^${pattern//\*/\\*}$" .gitignore 2>/dev/null; then 66 | # Check if there are files matching this pattern 67 | if find . -name "$pattern" -type f 2>/dev/null | head -1 | grep -q .; then 68 | missing_patterns+=("$pattern") 69 | fi 70 | fi 71 | done 72 | 73 | if [[ ${#missing_patterns[@]} -gt 0 ]]; then 74 | log_warn "Consider adding these common patterns to .gitignore:" 75 | for pattern in "${missing_patterns[@]}"; do 76 | echo " - $pattern" 77 | done 78 | echo 79 | return 1 80 | fi 81 | 82 | return 0 83 | } 84 | 85 | check_large_files() { 86 | log_info "Checking for large files (>1MB) that might need to be ignored..." 87 | 88 | local large_files 89 | large_files=$(find . -type f -size +1M 2>/dev/null | grep -v "^\./.git/" | head -10) 90 | 91 | if [[ -n "$large_files" ]]; then 92 | log_warn "Found large files that might need to be ignored:" 93 | echo "$large_files" | while read -r file; do 94 | local size 95 | size=$(du -h "$file" 2>/dev/null | cut -f1) 96 | echo " - $file ($size)" 97 | done 98 | echo 99 | return 1 100 | fi 101 | 102 | return 0 103 | } 104 | 105 | check_sensitive_files() { 106 | log_info "Checking for potentially sensitive files..." 107 | 108 | local sensitive_files=() 109 | 110 | for pattern in "${SENSITIVE_PATTERNS[@]}"; do 111 | while IFS= read -r -d '' file; do 112 | if [[ -f "$file" ]] && ! git check-ignore "$file" >/dev/null 2>&1; then 113 | sensitive_files+=("$file") 114 | fi 115 | done < <(find . -name "$pattern" -type f -print0 2>/dev/null) 116 | done 117 | 118 | if [[ ${#sensitive_files[@]} -gt 0 ]]; then 119 | log_warn "Found potentially sensitive files that should be ignored:" 120 | for file in "${sensitive_files[@]}"; do 121 | echo " - $file" 122 | done 123 | echo 124 | return 1 125 | fi 126 | 127 | return 0 128 | } 129 | 130 | show_gitignore_statistics() { 131 | local total_patterns comment_lines total_lines 132 | 133 | total_patterns=$(grep -c "^[^#]" .gitignore 2>/dev/null || echo "0") 134 | comment_lines=$(grep -c "^#" .gitignore 2>/dev/null || echo "0") 135 | total_lines=$(wc -l < .gitignore) 136 | 137 | log_info ".gitignore Statistics:" 138 | echo " - Total ignore patterns: $total_patterns" 139 | echo " - Comment lines: $comment_lines" 140 | echo " - Total lines: $total_lines" 141 | } 142 | 143 | main() { 144 | log_info "🔍 GitIgnore Validation Script" 145 | echo "==============================" 146 | 147 | validate_git_repository 148 | 149 | log_info "Validating .gitignore patterns..." 150 | 151 | local issues=0 152 | 153 | # Run all checks 154 | check_ignored_tracked_files || ((issues++)) 155 | check_missing_common_patterns || ((issues++)) 156 | check_large_files || ((issues++)) 157 | check_sensitive_files || ((issues++)) 158 | 159 | # Summary 160 | echo "================================" 161 | log_info "Validation Summary:" 162 | 163 | if [[ $issues -eq 0 ]]; then 164 | log_success "Your .gitignore appears to be well configured!" 165 | send_notification "Git Validation" "GitIgnore Validation Complete" \ 166 | "No issues found - .gitignore is well configured!" "normal" "git" 167 | else 168 | log_warn "Consider reviewing the warnings above to improve your .gitignore." 169 | send_notification "Git Validation" "GitIgnore Issues Found" \ 170 | "$issues potential issues found in .gitignore" "normal" "git" 171 | fi 172 | 173 | echo 174 | show_gitignore_statistics 175 | } 176 | 177 | # --- Script Entry Point --- 178 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 179 | main "$@" 180 | fi -------------------------------------------------------------------------------- /scripts/theme/gtk-colors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # GTK Theme Update 5 | # ~/.config/scripts/theme/gtk-colors.sh 6 | # Description: Updates GTK themes based on current wallpaper folder structure 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: gsettings, sed 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | 17 | # --- Configuration --- 18 | readonly CONFIG_DIR="$HOME/.config" 19 | readonly WALLPAPER_FILE="$CONFIG_DIR/waytrogen/wallpaper.txt" 20 | readonly DEFAULT_THEME="Colloid-Dark" 21 | readonly COLOR_SCHEME="prefer-dark" 22 | readonly GTK_VERSIONS=("3.0" "4.0") 23 | 24 | declare -rA THEME_MAP=( 25 | ["Catppuccin"]="Colloid-Dark-Catppuccin" 26 | ["Everforest"]="Colloid-Dark-Everforest" 27 | ["Gruvbox"]="Colloid-Dark-Gruvbox" 28 | ["Nord"]="Colloid-Dark-Nord" 29 | ["Onedark"]="Colloid-Dark-Dracula" 30 | ["Black"]="Colloid-Dark" 31 | ["Animated"]="Colloid-Dark" 32 | ) 33 | 34 | # --- Functions --- 35 | get_wallpaper_folder() { 36 | validate_file "$WALLPAPER_FILE" 37 | 38 | local wallpaper_path 39 | wallpaper_path=$(<"$WALLPAPER_FILE") || die "Failed to read wallpaper file" 40 | 41 | if [[ "$wallpaper_path" =~ Wallpapers/([^/]+)/ ]]; then 42 | echo "${BASH_REMATCH[1]}" 43 | else 44 | die "Invalid wallpaper path pattern: $wallpaper_path" 45 | fi 46 | } 47 | 48 | resolve_theme_name() { 49 | local -r folder="${1:-}" 50 | 51 | if [[ -z "$folder" ]]; then 52 | echo "$DEFAULT_THEME" 53 | return 54 | fi 55 | 56 | echo "${THEME_MAP[$folder]:-$DEFAULT_THEME}" 57 | } 58 | 59 | verify_theme_installation() { 60 | local -r theme="${1:?Theme name required}" 61 | local -ra theme_paths=( 62 | "$HOME/.themes/$theme" 63 | "$HOME/.local/share/themes/$theme" 64 | "/usr/share/themes/$theme" 65 | ) 66 | 67 | for path in "${theme_paths[@]}"; do 68 | [[ -d "$path" ]] && return 0 69 | done 70 | 71 | die "Theme not installed: '$theme'" 72 | } 73 | 74 | update_gtk_settings() { 75 | local -r theme="$1" 76 | 77 | gsettings set org.gnome.desktop.interface gtk-theme "$theme" || die "Failed to set GTK theme" 78 | gsettings set org.gnome.desktop.interface color-scheme "$COLOR_SCHEME" || die "Failed to set color scheme" 79 | } 80 | 81 | set_ini_value() { 82 | local -r file="$1" 83 | local -r section="$2" 84 | local -r key="$3" 85 | local -r value="$4" 86 | 87 | [[ -f "$file" ]] || touch "$file" 88 | 89 | if grep -q "^\[$section\]" "$file"; then 90 | if grep -q "^$key=" "$file"; then 91 | sed -i "/^\[$section\]/,/^\[/ s/^$key=.*/$key=$value/" "$file" 92 | else 93 | sed -i "/^\[$section\]/a $key=$value" "$file" 94 | fi 95 | else 96 | printf '\n[%s]\n%s=%s\n' "$section" "$key" "$value" >>"$file" 97 | fi 98 | } 99 | 100 | manage_gtk_config() { 101 | local -r version="$1" 102 | local -r theme="$2" 103 | local -r config_file="$CONFIG_DIR/gtk-$version/settings.ini" 104 | 105 | ensure_directory "$(dirname "$config_file")" 106 | 107 | set_ini_value "$config_file" "Settings" "gtk-theme-name" "$theme" 108 | set_ini_value "$config_file" "Settings" "gtk-application-prefer-dark-theme" "1" 109 | } 110 | 111 | manage_symlinks() { 112 | local -r theme="$1" 113 | local target_dir="" 114 | local -r gtk4_dir="$CONFIG_DIR/gtk-4.0" 115 | 116 | declare -A links=( 117 | ["$gtk4_dir/gtk.css"]="gtk-4.0/gtk.css" 118 | ["$gtk4_dir/gtk-dark.css"]="gtk-4.0/gtk-dark.css" 119 | ["$gtk4_dir/assets"]="gtk-4.0/assets" 120 | ["$CONFIG_DIR/assets"]="assets" 121 | ) 122 | 123 | # Find theme directory 124 | local -ra theme_paths=( 125 | "$HOME/.themes/$theme" 126 | "$HOME/.local/share/themes/$theme" 127 | "/usr/share/themes/$theme" 128 | ) 129 | 130 | for path in "${theme_paths[@]}"; do 131 | if [[ -d "$path" ]]; then 132 | target_dir="$path" 133 | break 134 | fi 135 | done 136 | 137 | [[ -n "$target_dir" ]] || die "Theme assets not found: $theme" 138 | 139 | # Create symlinks 140 | for link in "${!links[@]}"; do 141 | local target="$target_dir/${links[$link]}" 142 | [[ -e "$target" ]] || continue 143 | 144 | ensure_directory "$(dirname "$link")" 145 | ln -sf "$target" "$link" && log_info "Created symlink: ${link##*/}" 146 | done 147 | } 148 | 149 | update_xsettingsd() { 150 | local -r theme="$1" 151 | local -r config_file="$CONFIG_DIR/xsettingsd/xsettingsd.conf" 152 | 153 | [[ -f "$config_file" ]] || return 0 154 | 155 | sed -i "s/Net\/ThemeName \".*\"/Net\/ThemeName \"$theme\"/" "$config_file" || \ 156 | log_warn "Failed to update xsettingsd config" 157 | } 158 | 159 | main() { 160 | local current_theme target_theme wallpaper_folder 161 | 162 | # Get current state 163 | current_theme=$(gsettings get org.gnome.desktop.interface gtk-theme | tr -d "'") || \ 164 | die "Failed to get current GTK theme" 165 | 166 | wallpaper_folder=$(get_wallpaper_folder) 167 | target_theme=$(resolve_theme_name "$wallpaper_folder") 168 | 169 | [[ -n "$target_theme" ]] || die "Failed to resolve theme name" 170 | 171 | # Skip if already using target theme 172 | if [[ "$current_theme" == "$target_theme" ]]; then 173 | log_info "Already using theme: $target_theme" 174 | exit 0 175 | fi 176 | 177 | # Apply theme changes 178 | verify_theme_installation "$target_theme" 179 | update_gtk_settings "$target_theme" 180 | 181 | for version in "${GTK_VERSIONS[@]}"; do 182 | manage_gtk_config "$version" "$target_theme" 183 | done 184 | 185 | manage_symlinks "$target_theme" 186 | update_xsettingsd "$target_theme" 187 | 188 | # Verify changes 189 | local new_theme 190 | new_theme=$(gsettings get org.gnome.desktop.interface gtk-theme | tr -d "'") || \ 191 | die "Failed to verify theme change" 192 | 193 | [[ "$new_theme" == "$target_theme" ]] || die "Theme verification failed" 194 | 195 | log_success "Theme successfully updated to $target_theme" 196 | } 197 | 198 | # --- Script Entry Point --- 199 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 200 | main "$@" 201 | fi -------------------------------------------------------------------------------- /scripts/README.md: -------------------------------------------------------------------------------- 1 | # System Scripts Collection 2 | 3 | A modular collection of scripts for system theme management, media control, and maintenance tasks. 4 | 5 | ## 📁 Directory Structure 6 | 7 | ``` 8 | scripts/ 9 | ├── lib/ # Shared utility libraries 10 | │ ├── common.sh # Common functions (logging, file ops, notifications) 11 | │ └── color-utils.sh # Color processing and image analysis 12 | ├── theme/ # Theme management scripts 13 | │ ├── theme-sync.sh # Master theme synchronization script 14 | │ ├── waybar-detection.sh # Waybar theme adjustment based on wallpaper 15 | │ ├── gtk-colors.sh # GTK theme updates 16 | │ └── wofi-colors.sh # Wofi color scheme updates 17 | ├── media/ # Media and system control 18 | │ ├── music-status.sh # Music player status display 19 | │ └── volume-brightness.sh # Volume, brightness, and media controls 20 | ├── git/ # Git repository utilities 21 | │ ├── cleanup.sh # Remove ignored files from git tracking 22 | │ └── validate-gitignore.sh # Validate .gitignore effectiveness 23 | ├── system/ # System utilities 24 | │ ├── package-updates.sh # Package update checker for Waybar 25 | │ ├── battery-notify.sh # CronJob to notify for low-battery 26 | │ └── floating-run.sh # Launch floating terminal applications 27 | └── utils/ # Utility launchers and tools 28 | ├── util-launcher.sh # Wofi-based emoji picker and utility launcher 29 | ├── screenshot.sh # Advanced screenshot tool with grim/slurp 30 | └── ss # Simple screenshot wrapper 31 | ``` 32 | 33 | ## 🎨 Theme Management 34 | 35 | ### `theme/theme-sync.sh` - Master Theme Controller 36 | 37 | **Purpose**: Orchestrates system-wide theme updates based on current wallpaper 38 | 39 | **Features**: 40 | 41 | - Detects current wallpaper from swww 42 | - Handles GIF wallpapers (extracts first frame) 43 | - Updates hyprlock, waybar, GTK, and wofi themes 44 | - Reloads system components (waybar, dunst, hyprswitch) 45 | - Sends completion notifications 46 | 47 | ### `theme/waybar-detection.sh` - Waybar Theme Adjuster 48 | 49 | **Purpose**: Adjusts waybar colors based on wallpaper luminosity 50 | 51 | ### `theme/gtk-colors.sh` - GTK Theme Manager 52 | 53 | **Purpose**: Updates GTK themes based on wallpaper folder structure 54 | 55 | ### `theme/wofi-colors.sh` - Wofi Color Updater 56 | 57 | **Purpose**: Generates wofi CSS from wallust color palette 58 | 59 | ## 🎵 Media Control 60 | 61 | ### `media/volume-brightness.sh` - System Controls 62 | 63 | **Purpose**: Unified volume, brightness, and media playbook control 64 | 65 | **Usage**: 66 | 67 | ```bash 68 | ./scripts/media/volume-brightness.sh {volume_up|volume_down|volume_mute|mic_mute|brightness_up|brightness_down|next_track|prev_track|play_pause} 69 | ``` 70 | 71 | ### `media/music-status.sh` - Music Display 72 | 73 | **Purpose**: Shows current music status for widgets and lock screen 74 | 75 | ## 🔧 System Utilities 76 | 77 | ### `system/package-updates.sh` - Update Checker 78 | 79 | **Purpose**: Checks for available package updates (Waybar integration) 80 | 81 | **Output**: JSON format for Waybar consumption 82 | 83 | ### `system/floating-run.sh` - Floating Terminal Launcher 84 | 85 | **Purpose**: Launch applications in floating terminal windows with custom dimensions 86 | 87 | **Usage**: 88 | 89 | ```bash 90 | ./scripts/system/floating-run.sh 91 | ./scripts/system/floating-run.sh # Uses default 800x450 92 | ``` 93 | 94 | **Examples**: 95 | 96 | ```bash 97 | ./scripts/system/floating-run.sh 1000 600 htop 98 | ./scripts/system/floating-run.sh btop 99 | ``` 100 | 101 | **Features**: 102 | 103 | - Automatically detects terminal from Hyprland config 104 | - Fallback to kitty if no terminal configured 105 | - Launches applications in centered floating windows 106 | 107 | ## 📦 Git Utilities 108 | 109 | ### `git/cleanup.sh` - Repository Cleanup 110 | 111 | **Purpose**: Remove files from git tracking that should be ignored according to .gitignore 112 | 113 | **Usage**: 114 | 115 | ```bash 116 | ./scripts/git/cleanup.sh 117 | ``` 118 | 119 | **Features**: 120 | 121 | - Scans for files currently tracked in git that match .gitignore patterns 122 | - Shows you a list of files that will be removed from tracking 123 | - Asks for confirmation before making changes 124 | - Removes files from git tracking (files remain on disk) 125 | - Shows staged changes ready to commit 126 | 127 | ### `git/validate-gitignore.sh` - GitIgnore Validator 128 | 129 | **Purpose**: Validate and analyze your .gitignore file effectiveness 130 | 131 | **Usage**: 132 | 133 | ```bash 134 | ./scripts/git/validate-gitignore.sh 135 | ``` 136 | 137 | **Features**: 138 | 139 | - Files currently tracked that should be ignored 140 | - Common ignore patterns that might be missing 141 | - Large files that might need to be ignored 142 | - Potentially sensitive files 143 | - .gitignore statistics 144 | 145 | ## 🔨 Utilities 146 | 147 | ### `utils/util-launcher.sh` - Utility Launcher 148 | 149 | **Purpose**: Wofi-based launcher with emoji picker and various utility functions 150 | 151 | **Usage**: 152 | 153 | ```bash 154 | ./scripts/utils/util-launcher.sh 155 | ``` 156 | 157 | **Features**: 158 | 159 | - Comprehensive emoji picker with search functionality 160 | - Thousands of emojis organized by category 161 | - Easy copy-to-clipboard functionality 162 | - Wofi integration for smooth user experience 163 | 164 | ### `utils/screenshot.sh` - Advanced Screenshot Tool 165 | 166 | **Purpose**: Feature-rich screenshot utility using grim and slurp 167 | 168 | **Usage**: 169 | 170 | ```bash 171 | ./scripts/utils/screenshot.sh [OPTIONS] 172 | ./scripts/utils/ss [OPTIONS] # Short wrapper 173 | ``` 174 | 175 | **Options**: 176 | 177 | - `-r, --region [fullscreen|workspace|selection]` - Screenshot region (default: selection) 178 | - `-h, --help` - Show help message 179 | 180 | **Features**: 181 | 182 | - Multiple capture modes (fullscreen, workspace, selection) 183 | - Automatic save to `~/Pictures/Screenshots/` 184 | - Clipboard integration (wl-copy/xclip) 185 | - Desktop notifications with preview and action buttons 186 | - Dependency checking 187 | - Error handling and validation 188 | - Fixed slurp overlay issue with proper timing 189 | 190 | **Examples**: 191 | 192 | ```bash 193 | # Selection screenshot (default) 194 | ./scripts/utils/ss 195 | 196 | # Fullscreen screenshot 197 | ./scripts/utils/ss -r fullscreen 198 | 199 | # Current workspace screenshot 200 | ./scripts/utils/ss -r workspace 201 | ``` 202 | 203 | ## 📚 Libraries 204 | 205 | ### `lib/common.sh` - Shared Utilities 206 | 207 | - Logging functions (info, error, success, warn, debug) 208 | - File system operations 209 | - Process management (locking) 210 | - Dependency validation 211 | - Notification helpers 212 | 213 | ### `lib/color-utils.sh` - Color Processing 214 | 215 | - Hex to RGB conversion 216 | - Color lightening/darkening 217 | - Luminance calculation 218 | - CSS color extraction 219 | - Image analysis functions 220 | - GIF frame extraction 221 | 222 | ## 🚀 Quick Start 223 | 224 | 1. **Theme synchronization** (run after wallpaper changes): 225 | 226 | ```bash 227 | ./scripts/theme/theme-sync.sh 228 | ``` 229 | 230 | 2. **Volume control** (bind to media keys): 231 | 232 | ```bash 233 | ./scripts/media/volume-brightness.sh volume_up 234 | ``` 235 | 236 | 3. **Music status** (for widgets): 237 | 238 | ```bash 239 | ./scripts/media/music-status.sh 240 | ``` 241 | 242 | 4. **Take screenshots**: 243 | 244 | ```bash 245 | ./scripts/utils/ss # Selection 246 | ./scripts/utils/ss -r fullscreen # Fullscreen 247 | ./scripts/utils/ss -r workspace # Current workspace 248 | ``` 249 | 250 | ## 🔧 Configuration 251 | 252 | All scripts follow consistent patterns: 253 | 254 | - **Notifications**: Important updates send desktop notifications 255 | - **Logging**: Comprehensive logging with timestamps 256 | - **Error handling**: Robust error checking and recovery 257 | - **Modularity**: Shared code in libraries, focused script responsibilities 258 | 259 | ## 📋 Dependencies 260 | 261 | - **Core**: bash, notify-send 262 | - **Theme**: swww, wallust, hyprctl, gsettings 263 | - **Media**: pactl, brightnessctl, playerctl 264 | - **Image**: imagemagick (for GIF support) 265 | - **System**: checkupdates-with-aur (for package updates) 266 | 267 | > [!NOTE] 268 | > Some dependencies might not be listed. 269 | -------------------------------------------------------------------------------- /swaync/style.css: -------------------------------------------------------------------------------- 1 | @import url("./colors.css"); 2 | 3 | /* ===== VARIABLES ===== */ 4 | * { 5 | --bg: @background; 6 | --fg: @foreground; 7 | --accent: @color6; 8 | --accent2: @color1; 9 | --swaync-bg: rgba(0, 0, 0, 0.5); 10 | --border-radius: 10px; 11 | --widget-padding: 8px; 12 | --notification-padding: 16px; 13 | --button-border: 2px solid var(--fg); 14 | --accent-border: 2px solid var(--accent); 15 | --trough-bg: rgba(255, 255, 255, 0.1); 16 | } 17 | 18 | /* ===== GLOBAL RESETS ===== */ 19 | * { 20 | background: transparent; 21 | scrollbar-width: none; 22 | box-shadow: none; 23 | color: var(--fg); 24 | } 25 | 26 | *::-webkit-scrollbar { 27 | display: none; 28 | } 29 | 30 | .blank-window { 31 | background: none; 32 | } 33 | 34 | /* ===== MIXINS (Common Patterns) ===== */ 35 | /* Button base styles */ 36 | .widget-title > button, 37 | .widget-buttons > flowbox > flowboxchild > button, 38 | .widget-mpris button, 39 | .notification-action, 40 | .notification-2fa-action, 41 | .close-button, 42 | button.toggle, 43 | button { 44 | background: transparent; 45 | color: var(--fg); 46 | border: none; 47 | border-radius: var(--border-radius); 48 | } 49 | 50 | .widget-mpris button { 51 | color: var(--fg); 52 | } 53 | 54 | /* Button hover states */ 55 | .widget-title > button:hover, 56 | .widget-buttons > flowbox > flowboxchild > button:hover, 57 | .widget-mpris button:hover, 58 | .notification-action:hover, 59 | .notification-2fa-action:hover, 60 | .close-button:hover, 61 | button.toggle:hover, 62 | button.toggle.active, 63 | button:hover, 64 | .widget-menubar menuitem:hover { 65 | background: var(--accent); 66 | color: var(--bg); 67 | } 68 | 69 | /* Hover text color inheritance */ 70 | .widget-title > button:hover *, 71 | .widget-buttons > flowbox > flowboxchild > button:hover *, 72 | .widget-mpris button:hover *, 73 | .notification-action:hover *, 74 | .notification-2fa-action:hover *, 75 | .close-button:hover *, 76 | button.toggle:hover *, 77 | button.toggle.active *, 78 | button:hover * { 79 | color: var(--bg); 80 | } 81 | 82 | /* Scale/slider common styles */ 83 | .widget-volume scale, 84 | .widget-backlight scale, 85 | .widget-slider scale, 86 | .per-app-volume scale { 87 | border-radius: var(--border-radius); 88 | } 89 | 90 | .widget-volume scale trough, 91 | .widget-backlight scale trough, 92 | .widget-slider scale trough, 93 | .per-app-volume scale trough { 94 | background: var(--trough-bg); 95 | border-radius: var(--border-radius); 96 | } 97 | 98 | .widget-volume scale highlight, 99 | .widget-backlight scale highlight, 100 | .widget-slider scale highlight, 101 | .per-app-volume scale highlight, 102 | .widget-volume scale slider, 103 | .widget-backlight scale slider, 104 | .widget-slider scale slider, 105 | .per-app-volume scale slider { 106 | background: var(--accent); 107 | border-radius: var(--border-radius); 108 | } 109 | 110 | /* ===== LAYOUT CONTAINERS ===== */ 111 | .control-center { 112 | background: var(--swaync-bg); 113 | padding: var(--widget-padding); 114 | border: 0px solid var(--accent2); 115 | border-radius: var(--border-radius); 116 | } 117 | 118 | .notification { 119 | background: linear-gradient( 120 | 45deg, 121 | color-mix(in srgb, var(--accent) 30%, black), 122 | color-mix(in srgb, var(--accent2) 30%, black) 123 | ); 124 | padding: 2px; 125 | margin: 4px -2px; 126 | border-radius: var(--border-radius); 127 | border: 2px solid var(--accent); 128 | } 129 | 130 | .notification > * { 131 | background: rgba(0, 0, 0, 0.7); 132 | padding: calc(var(--notification-padding) - 2px); 133 | border-radius: calc(var(--border-radius) - 2px); 134 | } 135 | 136 | .notification-row, 137 | .notification-content { 138 | border-radius: var(--border-radius); 139 | } 140 | 141 | .notification:hover { 142 | background: var(--swaync-bg); 143 | } 144 | 145 | /* ===== WIDGET CONTAINERS ===== */ 146 | .widget-dnd, 147 | .widget-title, 148 | .widget-mpris, 149 | .widget-label, 150 | .widget-menubar, 151 | .widget-buttons, 152 | .widget-slider, 153 | .widget-volume, 154 | .widget-backlight, 155 | .widget-inhibitors { 156 | background: var(--swaync-bg); 157 | padding: var(--widget-padding); 158 | margin-bottom: var(--widget-padding); 159 | border-radius: var(--border-radius); 160 | } 161 | 162 | .widget-title { 163 | background: transparent; 164 | } 165 | 166 | .widget-mpris { 167 | background: transparent; 168 | } 169 | 170 | /* Child elements transparency */ 171 | .widget-title > *, 172 | .widget-mpris > *, 173 | .widget-dnd > *, 174 | .widget-label > *, 175 | .widget-menubar > *, 176 | .widget-buttons > *, 177 | .widget-slider > *, 178 | .widget-volume > *, 179 | .widget-backlight > *, 180 | .widget-inhibitors > *, 181 | .notification > *, 182 | .control-center > * > * { 183 | background: transparent; 184 | } 185 | 186 | /* ===== SPECIFIC WIDGET STYLES ===== */ 187 | .widget-dnd label { 188 | font-size: 1.4em; 189 | color: var(--fg); 190 | } 191 | 192 | .widget-mpris { 193 | padding-top: 26px; 194 | margin: 0px; 195 | color: var(--fg); 196 | } 197 | 198 | .widget-mpris-title { 199 | color: var(--fg); 200 | } 201 | 202 | .widget-title > button { 203 | padding: 4px 8px; 204 | border: var(--button-border); 205 | } 206 | 207 | .widget-title > button:hover { 208 | border: var(--accent-border); 209 | } 210 | 211 | .close-button { 212 | transform: translate(6px, 0px); 213 | } 214 | 215 | .notification .close-button, 216 | .widget-title .close-button { 217 | transform: translate(6px, 0px); 218 | } 219 | 220 | /* ===== SWITCHES ===== */ 221 | .widget-dnd > switch { 222 | background: var(--trough-bg); 223 | border-radius: var(--border-radius); 224 | } 225 | 226 | .widget-dnd > switch:checked { 227 | background: var(--accent2); 228 | } 229 | 230 | .widget-dnd > switch slider { 231 | background: var(--fg); 232 | border-radius: var(--border-radius); 233 | } 234 | 235 | /* ===== MENUS ===== */ 236 | .widget-menubar menu { 237 | background: var(--swaync-bg); 238 | border-radius: var(--border-radius); 239 | } 240 | 241 | .widget-menubar menuitem { 242 | background: transparent; 243 | color: var(--fg); 244 | border-radius: var(--border-radius); 245 | } 246 | 247 | /* ===== TOGGLE BUTTONS ===== */ 248 | button.toggle { 249 | border: var(--button-border); 250 | } 251 | 252 | button.toggle:hover, 253 | button.toggle.active { 254 | border: var(--accent-border); 255 | } 256 | 257 | .notification-action, 258 | .notification-2fa-action { 259 | border: var(--button-border); 260 | } 261 | 262 | .notification-action:hover, 263 | .notification-2fa-action:hover { 264 | border: var(--accent-border); 265 | } 266 | 267 | /* ===== PROGRESS BARS ===== */ 268 | progressbar { 269 | background: transparent; 270 | border-radius: var(--border-radius); 271 | min-height: 12px; 272 | } 273 | 274 | progressbar trough { 275 | background: var(--trough-bg); 276 | border-radius: var(--border-radius); 277 | min-height: 12px; 278 | border: 1px solid rgba(255, 255, 255, 0.05); 279 | } 280 | 281 | progressbar progress { 282 | background: linear-gradient(90deg, var(--accent), var(--accent2)); 283 | border-radius: var(--border-radius); 284 | min-height: 12px; 285 | box-shadow: 0 0 8px rgba(var(--accent), 0.3); 286 | border: 1px solid var(--accent); 287 | } 288 | 289 | /* Enhanced notification progress bars */ 290 | .notification progressbar { 291 | min-height: 14px; 292 | margin: 4px 0; 293 | } 294 | 295 | .notification progressbar trough { 296 | background: rgba(255, 255, 255, 0.08); 297 | border-radius: 8px; 298 | min-height: 14px; 299 | border: 1px solid rgba(255, 255, 255, 0.1); 300 | } 301 | 302 | .notification progressbar progress { 303 | background: linear-gradient(90deg, var(--accent), var(--accent2)); 304 | border-radius: 8px; 305 | min-height: 14px; 306 | box-shadow: 0 0 12px rgba(var(--accent), 0.4), 307 | inset 0 1px 0 rgba(255, 255, 255, 0.2); 308 | border: 1px solid var(--accent); 309 | animation: progress-glow 2s ease-in-out infinite alternate; 310 | } 311 | 312 | @keyframes progress-glow { 313 | 0% { 314 | box-shadow: 0 0 12px rgba(var(--accent), 0.4), 315 | inset 0 1px 0 rgba(255, 255, 255, 0.1); 316 | } 317 | 100% { 318 | box-shadow: 0 0 16px rgba(var(--accent), 0.6), 319 | inset 0 1px 0 rgba(255, 255, 255, 0.3); 320 | } 321 | } 322 | 323 | /* ===== TEXT ELEMENTS ===== */ 324 | label { 325 | color: var(--fg); 326 | background: transparent; 327 | } 328 | 329 | /* ===== ENTRY FIELDS ===== */ 330 | entry { 331 | background: var(--trough-bg); 332 | color: var(--fg); 333 | border-radius: var(--border-radius); 334 | } 335 | -------------------------------------------------------------------------------- /scripts/media/volume-brightness.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #=============================================================================== 4 | # Volume & Brightness Control 5 | # ~/.config/scripts/media/volume-brightness.sh 6 | # Description: Controls system volume, brightness, and media playback with notifications 7 | # Author: saatvik333 8 | # Version: 2.0 9 | # Dependencies: pactl, brightnessctl, playerctl, notify-send 10 | #=============================================================================== 11 | 12 | set -euo pipefail 13 | 14 | # Source common utilities 15 | source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh" 16 | 17 | # --- Configuration --- 18 | readonly VOLUME_STEP=5 19 | readonly BRIGHTNESS_STEP=5 20 | readonly MAX_VOLUME=100 21 | readonly NOTIFICATION_TIMEOUT=1000 22 | readonly DOWNLOAD_ALBUM_ART=false 23 | readonly SHOW_ALBUM_ART=false 24 | readonly SHOW_MUSIC_IN_VOLUME=true 25 | 26 | # Icons 27 | readonly VOLUME_MUTE_ICON="󰕿 " 28 | readonly VOLUME_LOW_ICON="󰖀 " 29 | readonly VOLUME_HIGH_ICON="󰕾 " 30 | readonly MIC_MUTE_ICON="󰍭 " 31 | readonly MIC_UNMUTE_ICON="󰍬 " 32 | readonly BRIGHTNESS_LOW_ICON="󰃞 " 33 | readonly BRIGHTNESS_MED_ICON="󰃟 " 34 | readonly BRIGHTNESS_HIGH_ICON="󰃠 " 35 | 36 | # Global variables 37 | album_art="" 38 | 39 | # --- Volume Functions --- 40 | get_volume() { 41 | pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '[0-9]{1,3}(?=%)' | head -1 42 | } 43 | 44 | get_mute_status() { 45 | pactl get-sink-mute @DEFAULT_SINK@ | grep -Po '(?<=Mute: )(yes|no)' 46 | } 47 | 48 | get_volume_icon() { 49 | local -r volume=$1 50 | local -r mute_status=$2 51 | 52 | if [[ "$mute_status" == "yes" || "$volume" -eq 0 ]]; then 53 | echo "$VOLUME_MUTE_ICON" 54 | elif (( volume < 50 )); then 55 | echo "$VOLUME_LOW_ICON" 56 | else 57 | echo "$VOLUME_HIGH_ICON" 58 | fi 59 | } 60 | 61 | show_volume_notification() { 62 | local -r volume=$(get_volume) 63 | local -r mute_status=$(get_mute_status) 64 | local -r volume_icon=$(get_volume_icon "$volume" "$mute_status") 65 | 66 | local body_text progress_value 67 | if [[ "$mute_status" == "yes" || "$volume" -eq 0 ]]; then 68 | body_text="$volume_icon Muted" 69 | progress_value=0 70 | else 71 | body_text="$volume_icon $volume%" 72 | progress_value=$volume 73 | fi 74 | 75 | # Add current song if enabled 76 | if [[ "$SHOW_MUSIC_IN_VOLUME" == "true" ]]; then 77 | local current_media 78 | current_media=$(playerctl -f "{{title}} - {{artist}}" metadata 2>/dev/null || echo "") 79 | if [[ -n "$current_media" ]]; then 80 | body_text="$body_text\n\n$current_media" 81 | fi 82 | 83 | if [[ "$SHOW_ALBUM_ART" == "true" && -n "$current_media" ]]; then 84 | get_album_art 85 | else 86 | album_art="" 87 | fi 88 | fi 89 | 90 | notify-send \ 91 | --app-name="Volume" \ 92 | --expire-time="$NOTIFICATION_TIMEOUT" \ 93 | --transient \ 94 | --hint="string:x-canonical-private-synchronous:volume" \ 95 | --hint="string:x-dunst-stack-tag:volume_notif" \ 96 | --hint="int:value:$progress_value" \ 97 | --hint="string:hlcolor:#ffffff" \ 98 | --hint="string:category:volume" \ 99 | --icon="$album_art" \ 100 | "" "$body_text" 101 | } 102 | 103 | # --- Microphone Functions --- 104 | get_mic_mute_status() { 105 | pactl get-source-mute @DEFAULT_SOURCE@ | grep -Po '(?<=Mute: )(yes|no)' 106 | } 107 | 108 | get_mic_icon() { 109 | local -r mute_status=$1 110 | if [[ "$mute_status" == "yes" ]]; then 111 | echo "$MIC_MUTE_ICON" 112 | else 113 | echo "$MIC_UNMUTE_ICON" 114 | fi 115 | } 116 | 117 | show_mic_notification() { 118 | local -r mute_status=$(get_mic_mute_status) 119 | local -r mic_icon=$(get_mic_icon "$mute_status") 120 | local status_text 121 | 122 | if [[ "$mute_status" == "yes" ]]; then 123 | status_text="Muted" 124 | else 125 | status_text="Unmuted" 126 | fi 127 | 128 | notify-send \ 129 | --app-name="Microphone" \ 130 | --expire-time="$NOTIFICATION_TIMEOUT" \ 131 | --transient \ 132 | --hint="string:x-canonical-private-synchronous:microphone" \ 133 | --hint="string:x-dunst-stack-tag:mic_mute_notif" \ 134 | "" "$mic_icon Microphone $status_text" 135 | } 136 | 137 | # --- Brightness Functions --- 138 | get_brightness() { 139 | local current max 140 | current=$(brightnessctl g) 141 | max=$(brightnessctl m) 142 | echo $((current * 100 / max)) 143 | } 144 | 145 | get_brightness_icon() { 146 | local -r brightness=$1 147 | if (( brightness < 33 )); then 148 | echo "$BRIGHTNESS_LOW_ICON" 149 | elif (( brightness < 66 )); then 150 | echo "$BRIGHTNESS_MED_ICON" 151 | else 152 | echo "$BRIGHTNESS_HIGH_ICON" 153 | fi 154 | } 155 | 156 | show_brightness_notification() { 157 | local -r brightness=$(get_brightness) 158 | local -r brightness_icon=$(get_brightness_icon "$brightness") 159 | 160 | notify-send \ 161 | --app-name="Brightness" \ 162 | --expire-time="$NOTIFICATION_TIMEOUT" \ 163 | --transient \ 164 | --hint="string:x-canonical-private-synchronous:brightness" \ 165 | --hint="string:x-dunst-stack-tag:brightness_notif" \ 166 | --hint="string:hlcolor:#ffffff" \ 167 | --hint="string:category:brightness" \ 168 | --hint="int:value:$brightness" \ 169 | "" "$brightness_icon $brightness%" 170 | } 171 | 172 | # --- Music Functions --- 173 | get_album_art() { 174 | album_art="" 175 | local art_url 176 | art_url=$(playerctl -f "{{mpris:artUrl}}" metadata 2>/dev/null) || return 177 | 178 | [[ -z "$art_url" ]] && return 179 | 180 | if [[ "$art_url" == file://* ]]; then 181 | album_art="${art_url#file://}" 182 | elif [[ "$art_url" =~ ^https?:// && "$DOWNLOAD_ALBUM_ART" == "true" ]]; then 183 | local filename_safe 184 | filename_safe=$(basename "$art_url" | sed 's/[^a-zA-Z0-9._-]//g') 185 | 186 | [[ "$filename_safe" != *.* ]] && filename_safe="${filename_safe}.jpg" 187 | 188 | if [[ -n "$filename_safe" ]]; then 189 | local temp_path="/tmp/$filename_safe" 190 | if [[ ! -f "$temp_path" ]] || find "$temp_path" -mtime +1 -print | grep -q .; then 191 | wget --quiet -O "$temp_path" "$art_url" 2>/dev/null || return 192 | fi 193 | [[ -f "$temp_path" && -s "$temp_path" ]] && album_art="$temp_path" 194 | fi 195 | fi 196 | } 197 | 198 | show_music_notification() { 199 | local title artist album 200 | title=$(playerctl -f "{{title}}" metadata 2>/dev/null || echo "") 201 | artist=$(playerctl -f "{{artist}}" metadata 2>/dev/null || echo "") 202 | album=$(playerctl -f "{{album}}" metadata 2>/dev/null || echo "") 203 | 204 | [[ -z "$title" && -z "$artist" ]] && return 205 | 206 | local summary="$title" 207 | local body="$artist" 208 | [[ -n "$album" ]] && body="$body - $album" 209 | 210 | album_art="" 211 | [[ "$SHOW_ALBUM_ART" == "true" ]] && get_album_art 212 | 213 | notify-send \ 214 | --app-name="Music Player" \ 215 | --expire-time="$NOTIFICATION_TIMEOUT" \ 216 | --transient \ 217 | --hint="string:x-dunst-stack-tag:music_notif" \ 218 | --icon="$album_art" \ 219 | "$summary" "$body" 220 | } 221 | 222 | # --- Control Functions --- 223 | volume_up() { 224 | pactl set-sink-mute @DEFAULT_SINK@ 0 225 | local current_volume 226 | current_volume=$(get_volume) 227 | 228 | if (( current_volume + VOLUME_STEP > MAX_VOLUME )); then 229 | pactl set-sink-volume @DEFAULT_SINK@ "${MAX_VOLUME}%" 230 | else 231 | pactl set-sink-volume @DEFAULT_SINK@ "+${VOLUME_STEP}%" 232 | fi 233 | show_volume_notification 234 | } 235 | 236 | volume_down() { 237 | pactl set-sink-volume @DEFAULT_SINK@ "-${VOLUME_STEP}%" 238 | show_volume_notification 239 | } 240 | 241 | volume_mute() { 242 | pactl set-sink-mute @DEFAULT_SINK@ toggle 243 | show_volume_notification 244 | } 245 | 246 | mic_mute() { 247 | pactl set-source-mute @DEFAULT_SOURCE@ toggle 248 | show_mic_notification 249 | } 250 | 251 | brightness_up() { 252 | brightnessctl set "${BRIGHTNESS_STEP}%+" 253 | show_brightness_notification 254 | } 255 | 256 | brightness_down() { 257 | brightnessctl set "${BRIGHTNESS_STEP}%-" 258 | show_brightness_notification 259 | } 260 | 261 | next_track() { 262 | playerctl next 263 | sleep 0.2 264 | show_music_notification 265 | } 266 | 267 | prev_track() { 268 | playerctl previous 269 | sleep 0.2 270 | show_music_notification 271 | } 272 | 273 | play_pause() { 274 | playerctl play-pause 275 | sleep 0.1 276 | show_music_notification 277 | } 278 | 279 | main() { 280 | local -r action="${1:-}" 281 | 282 | case "$action" in 283 | volume_up) volume_up ;; 284 | volume_down) volume_down ;; 285 | volume_mute) volume_mute ;; 286 | mic_mute) mic_mute ;; 287 | brightness_up) brightness_up ;; 288 | brightness_down) brightness_down ;; 289 | next_track) next_track ;; 290 | prev_track) prev_track ;; 291 | play_pause) play_pause ;; 292 | *) 293 | echo "Usage: $0 {volume_up|volume_down|volume_mute|mic_mute|brightness_up|brightness_down|next_track|prev_track|play_pause}" 294 | exit 1 295 | ;; 296 | esac 297 | } 298 | 299 | # --- Script Entry Point --- 300 | if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then 301 | main "$@" 302 | fi -------------------------------------------------------------------------------- /waybar/style.css: -------------------------------------------------------------------------------- 1 | @import "./colors.css"; 2 | /* ======================= */ 3 | /* Global Styles */ 4 | /* ======================= */ 5 | * { 6 | border: none; 7 | font-family: "SF Pro"; 8 | font-size: 16px; 9 | box-shadow: none; 10 | min-width: 28px; 11 | } 12 | 13 | window#waybar { 14 | background: transparent; 15 | } 16 | 17 | /* ======================= */ 18 | /* Interactive States */ 19 | /* ======================= */ 20 | #custom-arch:hover, 21 | #custom-updates:hover, 22 | #power-profiles-daemon:hover, 23 | #network:hover, 24 | #bluetooth:hover, 25 | #pulseaudio:hover, 26 | #custom-power:hover, 27 | #custom-notification:hover, 28 | #pulseaudio.microphone:hover, 29 | #pulseaudio.sink-muted:hover { 30 | opacity: 0.8; 31 | } 32 | 33 | /* ======================= */ 34 | /* Custom Widgets */ 35 | /* ======================= */ 36 | #custom-arch { 37 | color: @foreground; 38 | background: rgba(0, 0, 0, 0.1); 39 | padding: 0 14px; 40 | margin: 0 4px; 41 | /* border: solid 2px @foreground; */ 42 | border-radius: 10px; 43 | min-height: 30px; 44 | } 45 | 46 | /* ======================= */ 47 | /* Workspace Management */ 48 | /* ======================= */ 49 | #workspaces { 50 | margin: 0; 51 | padding: 0; 52 | } 53 | 54 | #workspaces button { 55 | color: @color1; 56 | padding: 0 8px; 57 | margin: 0 4px; 58 | /* border: solid 2px transparent; */ 59 | border-radius: 10px; 60 | min-height: 30px; 61 | } 62 | 63 | #workspaces button.active { 64 | color: @foreground; 65 | /* border: solid 2px @foreground; */ 66 | background: rgba(0, 0, 0, 0.1); 67 | } 68 | 69 | #workspaces button.urgent { 70 | background: #cc241d; 71 | animation: blink 1s linear infinite; 72 | } 73 | 74 | @keyframes blink { 75 | 50% { 76 | opacity: 0.5; 77 | } 78 | } 79 | 80 | /* ======================= */ 81 | /* System Components */ 82 | /* ======================= */ 83 | #clock { 84 | padding: 0 12px; 85 | margin: 0 4px; 86 | /* border: solid 2px @foreground; */ 87 | border-radius: 10px; 88 | color: @foreground; 89 | background: rgba(0, 0, 0, 0.1); 90 | font-weight: 500; 91 | min-height: 30px; 92 | } 93 | 94 | #mpris { 95 | color: @foreground; 96 | padding: 0 12px; 97 | margin: 0 4px; 98 | border-radius: 10px; 99 | background: rgba(0, 0, 0, 0.1); 100 | min-height: 30px; 101 | } 102 | 103 | #mpris.playing { 104 | color: #8ec07c; 105 | background: rgba(0, 0, 0, 0.1); 106 | } 107 | 108 | #mpris.paused { 109 | color: #d79921; 110 | background: rgba(0, 0, 0, 0.1); 111 | } 112 | 113 | #mpris.stopped { 114 | color: #cc241d; 115 | background: rgba(0, 0, 0, 0.1); 116 | } 117 | 118 | #custom-monitors { 119 | color: @foreground; 120 | background: rgba(0, 0, 0, 0.1); 121 | padding: 0 12px; 122 | margin: 0 4px; 123 | border-radius: 10px; 124 | min-height: 30px; 125 | } 126 | 127 | #cpu { 128 | color: @color14; 129 | background: rgba(0, 0, 0, 0.1); 130 | padding: 0 12px; 131 | margin: 0 4px; 132 | border-radius: 10px; 133 | min-height: 30px; 134 | } 135 | 136 | /* ======================= */ 137 | /* System Indicators */ 138 | /* ======================= */ 139 | #tray { 140 | background: rgba(0, 0, 0, 0.1); 141 | padding: 0 12px; 142 | margin: 0 4px; 143 | /* border: solid 2px @foreground; */ 144 | border-radius: 10px; 145 | min-height: 30px; 146 | } 147 | 148 | #privacy { 149 | background: rgba(255, 255, 0, 0.1); 150 | padding: 0 12px; 151 | margin: 0 4px; 152 | /* border: solid 2px #d79921; */ 153 | border-radius: 10px; 154 | min-height: 30px; 155 | } 156 | 157 | #privacy-item { 158 | color: #d79921; 159 | } 160 | 161 | /* ======================= */ 162 | /* Menu */ 163 | /* ======================= */ 164 | 165 | #custom-menu { 166 | color: @foreground; 167 | background: rgba(0, 0, 0, 0.1); 168 | padding: 0 12px; 169 | margin: 0 4px; 170 | /* border: solid 2px @foreground; */ 171 | border-radius: 10px; 172 | min-height: 30px; 173 | } 174 | 175 | tooltip class { 176 | color: @textcolor; 177 | } 178 | 179 | #custom-updates { 180 | color: @foreground; 181 | background: rgba(0, 0, 0, 0.1); 182 | padding: 0 12px; 183 | margin: 0 4px; 184 | /* border: solid 2px @textcolor; */ 185 | border-radius: 10px; 186 | min-height: 30px; 187 | } 188 | 189 | /* Green class - no updates or low count */ 190 | #custom-updates.green { 191 | color: #8ec07c; 192 | background: rgba(0, 255, 0, 0.1); 193 | } 194 | 195 | /* Yellow class - moderate updates */ 196 | #custom-updates.yellow { 197 | color: #d79921; 198 | background: rgba(255, 255, 0, 0.1); 199 | } 200 | 201 | /* Red class - many updates */ 202 | #custom-updates.red { 203 | color: #cc241d; 204 | background: rgba(255, 0, 0, 0.1); 205 | } 206 | 207 | #power-profiles-daemon { 208 | color: @foreground; 209 | background: rgba(0, 0, 0, 0.1); 210 | padding: 0 12px; 211 | margin: 0 4px; 212 | /* border: solid 2px @foreground; */ 213 | border-radius: 10px; 214 | min-height: 30px; 215 | } 216 | 217 | #power-profiles-daemon.performance { 218 | color: #cc241d; 219 | /* border: solid 2px #cc241d; */ 220 | background: rgba(255, 0, 0, 0.1); 221 | } 222 | 223 | #power-profiles-daemon.balanced { 224 | color: #d79921; 225 | /* border: solid 2px #d79921; */ 226 | background: rgba(255, 255, 0, 0.1); 227 | } 228 | 229 | #power-profiles-daemon.power-saver { 230 | color: #8ec07c; 231 | /* border: solid 2px #8ec07c; */ 232 | background: rgba(0, 255, 0, 0.1); 233 | } 234 | 235 | /* ======================= */ 236 | /* Network & Bluetooth */ 237 | /* ======================= */ 238 | #network { 239 | color: @foreground; 240 | background: rgba(0, 0, 0, 0.1); 241 | padding: 0 12px; 242 | margin: 0 4px; 243 | /* border: solid 2px @foreground; */ 244 | border-radius: 10px; 245 | min-height: 30px; 246 | } 247 | 248 | #bluetooth { 249 | color: @foreground; 250 | background: rgba(0, 0, 0, 0.1); 251 | padding: 0 12px; 252 | margin: 0 4px; 253 | /* border: solid 2px @foreground; */ 254 | border-radius: 10px; 255 | min-height: 30px; 256 | } 257 | 258 | #network.disabled { 259 | color: #cc241d; 260 | /* border: solid 2px #cc241d; */ 261 | background: rgba(255, 0, 0, 0.1); 262 | } 263 | 264 | #bluetooth.disabled { 265 | color: #458588; 266 | /* border: solid 2px #458588; */ 267 | background: rgba(0, 0, 255, 0.1); 268 | } 269 | 270 | /* ======================= */ 271 | /* Audio Controls */ 272 | /* ======================= */ 273 | 274 | #pulseaudio { 275 | color: @foreground; 276 | background: rgba(0, 0, 0, 0.1); 277 | padding: 0 12px; 278 | margin: 0 4px; 279 | /* border: solid 2px @foreground; */ 280 | border-radius: 10px; 281 | min-height: 30px; 282 | } 283 | 284 | #pulseaudio.sink-muted { 285 | color: #d79921; 286 | /* border: solid 2px #d79921; */ 287 | background: rgba(255, 255, 0, 0.1); 288 | } 289 | 290 | #pulseaudio.microphone { 291 | color: @foreground; 292 | /* border: solid 2px @foreground; */ 293 | background: rgba(0, 0, 0, 0.1); 294 | } 295 | 296 | #pulseaudio.microphone.source-muted { 297 | color: #cc241d; 298 | /* border: solid 2px #cc241d; */ 299 | background: rgba(255, 0, 0, 0.1); 300 | } 301 | 302 | #pulseaudio-slider { 303 | background: rgba(0, 0, 0, 0.1); 304 | padding: 0 12px; 305 | margin: 0 4px; 306 | border-radius: 10px; 307 | min-height: 30px; 308 | } 309 | 310 | #pulseaudio-slider slider { 311 | min-height: 0px; 312 | min-width: 0px; 313 | background: transparent; 314 | box-shadow: none; 315 | } 316 | #pulseaudio-slider trough { 317 | min-height: 8px; 318 | min-width: 100px; 319 | border-radius: 4px; 320 | background-color: rgba(255, 255, 255, 0.1); 321 | } 322 | #pulseaudio-slider highlight { 323 | min-width: 8px; 324 | min-height: 8px; 325 | border-radius: 4px; 326 | background: @color6; 327 | } 328 | 329 | /* ======================= */ 330 | /* Hardware Controls */ 331 | /* ======================= */ 332 | #backlight { 333 | color: @foreground; 334 | background: rgba(0, 0, 0, 0.1); 335 | padding: 0 12px; 336 | margin: 0 4px; 337 | /* border: solid 2px @foreground; */ 338 | border-radius: 10px; 339 | min-height: 30px; 340 | } 341 | 342 | #backlight-slider { 343 | background: rgba(0, 0, 0, 0.1); 344 | padding: 0 12px; 345 | margin: 0 4px; 346 | border-radius: 10px; 347 | min-height: 30px; 348 | } 349 | 350 | #backlight-slider slider { 351 | min-height: 0px; 352 | min-width: 0px; 353 | background: transparent; 354 | box-shadow: none; 355 | } 356 | #backlight-slider trough { 357 | min-height: 8px; 358 | min-width: 100px; 359 | border-radius: 4px; 360 | background: rgba(0, 0, 0, 0.1); 361 | } 362 | #backlight-slider highlight { 363 | min-width: 8px; 364 | min-height: 8px; 365 | border-radius: 4px; 366 | background: @color2; 367 | } 368 | 369 | /* ======================= */ 370 | /* Battery */ 371 | /* ======================= */ 372 | #battery { 373 | color: @foreground; 374 | background: rgba(0, 0, 0, 0.1); 375 | padding: 0 12px; 376 | margin: 0 4px; 377 | /* border: solid 2px @foreground; */ 378 | border-radius: 10px; 379 | min-height: 30px; 380 | } 381 | 382 | #battery.plugged, 383 | #battery.charging { 384 | color: #8ec07c; 385 | /* border: solid 2px #8ec07c; */ 386 | } 387 | 388 | #battery.warning { 389 | color: #d79921; 390 | /* border: solid 2px #d79921; */ 391 | } 392 | 393 | #battery.critical, 394 | #battery.plugordie { 395 | color: #cc241d; 396 | /* border: solid 2px #cc241d; */ 397 | } 398 | 399 | /* ======================= */ 400 | /* Notifications */ 401 | /* ======================= */ 402 | #custom-notification { 403 | color: @foreground; 404 | background: rgba(0, 0, 0, 0.1); 405 | padding: 0 12px; 406 | margin: 0 4px; 407 | border-radius: 10px; 408 | min-height: 30px; 409 | } 410 | 411 | #custom-notification.notification { 412 | color: #d79921; 413 | background: rgba(0, 0, 0, 0.1); 414 | } 415 | 416 | #custom-notification.dnd-notification, 417 | #custom-notification.inhibited-notification { 418 | color: #cc241d; 419 | background: rgba(0, 0, 0, 0.1); 420 | } 421 | 422 | /* ======================= */ 423 | /* Power Menu */ 424 | /* ======================= */ 425 | #custom-power { 426 | color: @foreground; 427 | background: rgba(0, 0, 0, 0.1); 428 | margin: 0 4px; 429 | padding: 0 12px; 430 | /* border: solid 2px @foreground; */ 431 | border-radius: 10px; 432 | min-height: 30px; 433 | } 434 | 435 | /* ======================== */ 436 | /* Tooltip */ 437 | /* ======================== */ 438 | tooltip { 439 | color: rgba(255, 255, 255, 0.8); 440 | background: rgba(0, 0, 0, 0.2); 441 | border-radius: 10px; 442 | } 443 | 444 | tooltip * { 445 | color: rgba(255, 255, 255, 0.8); 446 | text-shadow: none; 447 | background: transparent; 448 | margin: 2px; 449 | } 450 | --------------------------------------------------------------------------------