This commit is contained in:
Matthieu Fortin [CPC/CCP] 2024-11-14 20:11:51 -05:00
parent b1753d3de3
commit 7eb008af14
347 changed files with 49 additions and 20924 deletions

View file

@ -1,3 +1,4 @@
https://github.com/gaurav210233/simple-hyprland/
https://alexforsale.github.io/dotfiles-hyprland/
https://config.phundrak.com/hyprland.html#autolaunch-of-programs

View file

@ -33,21 +33,27 @@ exec-once=swaync
exec-once=/usr/lib/polkit-kde-authentication-agent-1
#exec-once=/usr/lib/xfce-polkit/xfce-polkit
#exec-once = systemctl --user start hyprpolkitagent
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once=hyprpaper
exec-once=~/.local/bin/hyprpaperchanger
exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=Hyprland
# exec-once=hyprpaper
# exec-once=~/.local/bin/hyprpaperchanger
exec-once=wpaperd
exec-once=hypridle
exec-once=waybar
exec-once=./xdg-desktop-portal.sh
exec-once=kanshi
exec-once=wlsunset -l 45.424721 -L -75.695000
exec-once=/usr/lib/kdeconnectd
exec-once=kdeconnect-indicator
exec-once=blueman-applet
##exec-once=nwg-dock-hyprland -i 32 -w 5 -mb 10 -ml 10 -mr 10 -x -c "tofi-drun --drun-launch=true" -lp start -f -a start
### ENVIRONMENT VARIABLES ###
env = XCURSOR_SIZE,24
env = XCURSOR_THEME,Bibata-Modern-Classic
#env = XCURSOR_THEME,Bibata-Modern-Classic
env = HYPRCURSOR_SIZE,24
env = HYPRCURSOR_THEME,Bibata-Modern-Classic
#env = HYPRCURSOR_THEME,Bibata-Modern-Classic
env = XDG_MENU_PREFIX,arch-
# Firefox
@ -66,15 +72,15 @@ env = QT_QPA_PLATFORM,wayland
env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
#env = QT_STYLE_OVERRIDE,kvantum
env = QT_STYLE_OVERRIDE,kvantum
# Toolkit Backend Variables
#env = GDK_BACKEND,wayland,x11,*
env = GDK_BACKEND,wayland,x11,*
env = SDL_VIDEODRIVER,wayland
env = CLUTTER_BACKEND,wayland
env = GTK_THEME,Breeze-Dark
env = GTK2_RC_FILES,/usr/share/themes/Breeze-Dark/gtk-2.0
#env = GTK_THEME,Breeze-Dark
#env = GTK2_RC_FILES,/usr/share/themes/Breeze-Dark/gtk-2.0
# XDG Specifications
env = XDG_CURRENT_DESKTOP,Hyprland
@ -103,10 +109,12 @@ decoration {
active_opacity = 1.0
inactive_opacity = 0.9
drop_shadow = true
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
blur {
enabled = true
@ -121,14 +129,26 @@ decoration {
animations {
enabled = true
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
# bezier = myBezier, 0.05, 0.9, 0.1, 1.05
#
# animation = windows, 1, 7, myBezier
# animation = windowsOut, 1, 7, default, popin 80%
# animation = border, 1, 10, default
# animation = borderangle, 1, 8, default
# animation = fade, 1, 7, default
# animation = workspaces, 1, 6, default
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1.1, 0.1, 1.1
bezier = winOut, 0.3, -0.3, 0, 1
bezier = liner, 1, 1, 1, 1
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 6, winIn, slide
animation = windowsOut, 1, 5, winOut, slide
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 30, liner, loop
animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind
}
dwindle {
@ -143,8 +163,10 @@ master {
}
misc {
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
force_default_wallpaper = 0
disable_hyprland_logo = true
disable_splash_rendering = true
vrr = 0
}
@ -188,7 +210,7 @@ bindd = $mainMod, C, Launch Visual Studio Code, exec, $editor
bindd = $mainMod, N, Launch Neovim, exec, $editor-alt
bindd = $mainMod, Q, Kill active window, killactive,
bindd = $mainMod, M, Exit Hyprland, exit,
bindd = $mainMod, E, Launch the file manager, exec, $fileManager
bindd = $mainMod, E, Launch the file manager, exec, XDG_CURRENT_DESKTOP=kde $fileManager
bindd = $mainMod, W, Toggle floating, togglefloating,
bindd = $mainMod, space, Launch menu, exec, $menu
bindd = $mainMod, F, Toggle fullscreen, fullscreen
@ -202,6 +224,7 @@ bindd = $mainMod, S, Launch menu to modify/create script, exec, autoscriptmenu
bindd = $mainMod, period, Launch the Emoji Picker, exec, jome -d | wl-copy #Emojipicker + clipboard copy
bindd = $mainMod, V, Clipboard History, exec, cliphist list | tofi -c ~/.config/tofi/configV | cliphist decode | wl-copy
bindd = $mainMod, R, Launch Remmina, exec, [floating] remmina
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l

View file

@ -1,293 +0,0 @@
# __ __ __
# / / __ _____ ____/ /__ ____ ___/ /
# / _ \/ // / _ \/ __/ / _ `/ _ \/ _ /
# /_//_/\_, / .__/_/ /_/\_,_/_//_/\_,_/
# /___/_/
### MONITORS ###
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,1
### MY PROGRAMS ###
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = kitty
$fileManager = dolphin
#$menu = wofi --show drun
$menu = tofi-drun -c ~/.config/tofi/configA --drun-launch=true
$browser = librewolf
$editor = code
$editor-alt = nvim
$colorPicker = hyprpicker
### AUTOSTART ###
exec-once=wl-paste --type text --watch cliphist store # clipboard
exec-once=wl-paste --type image --watch cliphist store
exec-once=swaync
#exec-once=/usr/lib/polkit-kde-authentication-agent-1
#exec-once=/usr/lib/xfce-polkit/xfce-polkit
exec-once = systemctl --user start hyprpolkitagent
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once=hypridle
exec-once=waybar
exec-once=./xdg-desktop-portal.sh
##exec-once=nwg-dock-hyprland -i 32 -w 5 -mb 10 -ml 10 -mr 10 -x -c "tofi-drun --drun-launch=true" -lp start -f -a start
### ENVIRONMENT VARIABLES ###
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = XDG_MENU_PREFIX,arch-
# Firefox
env = MOZ_ENABLE_WAYLAND,1
# Nvidia
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia # remove if firefox crashes
env = NVD_BACKEND,direct
env = ELECTRON_OZONE_PLATFORM_HINT,auto
# QT
env = QT_QPA_PLATFORM,wayland
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
#env = QT_STYLE_OVERRIDE,kvantum
# Toolkit Backend Variables
env = GDK_BACKEND,wayland,x11,*
env = SDL_VIDEODRIVER,wayland
env = CLUTTER_BACKEND,wayland
# XDG Specifications
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
### LOOK AND FEEL ###
general {
gaps_in = 5
gaps_out = 5
border_size = 2
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
allow_tearing = false
#layout = dwindle
layout = master
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 10
active_opacity = 1.0
inactive_opacity = 0.9
drop_shadow = true
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
blur {
enabled = true
size = 3
passes = 3
new_optimizations = true
vibrancy = 0.1696
ignore_opacity = true
}
}
animations {
enabled = true
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
master {
new_status = master
}
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
}
### INPUT ###
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
gestures {
workspace_swipe = false
}
device {
name = epic-mouse-v1
sensitivity = -0.5
}
### KEYBINDINGS ###
$mainMod = SUPER # Sets "Windows" key as main modifier
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bindd = $mainMod, return, Launch a terminal, exec, $terminal bash --rcfile ~/.dotfiles/bash/.bashrc
bindd = $mainMod, B, Launch the default browser, exec, $browser
bindd = $mainMod, C, Launch Visual Studio Code, exec, $editor
bindd = $mainMod, N, Launch Neovim, exec, $editor-alt
bindd = $mainMod, Q, Kill active window, killactive,
bindd = $mainMod, M, Exit Hyprland, exit,
bindd = $mainMod, E, Launch the file manager, exec, $fileManager
bindd = $mainMod, W, Toggle floating, togglefloating,
bindd = $mainMod, space, Launch menu, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
bindd = $mainMod, S, Launch menu to modify/create script, exec, autoscriptmenu
bindd = $mainMod, period, Launch the Emoji Picker, exec, jome -d | wl-copy #Emojipicker + clipboard copy
bindd = $mainMod, V, Clipboard History, exec, cliphist list | tofi -c ~/.config/tofi/configV | cliphist decode | wl-copy
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
#bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Color picker
bindd = $mainMod, P, Color Picker, exec, $colorPicker | wl-copy
# Screen locking
bindd = $mainMod, L, Lock the screen, exec, hyprlock
# Logout
bindd = $mainMod, Escape, Session logout, exec, wlogout
# Waybar
bindd = CTRL, Escape, Toggle waybar, exec, killall waybar || waybar
# Screenshot
bindd = , Print, Screenshot entire screen, exec, grimblast --notify copysave screen
bindd = $mainMod, Print, Screenshot active window, exec, grimblast --notify copysave active
bindd = $mainMod Alt, Print, Screenshot selected area, exec, grimblast --notify copysave area
# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
#bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
#bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrulev2 = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
windowrulev2 = float, class:(LibreWolf), title:(Picture-in-Picture)
windowrulev2 = move 100%-w-20 50, title:(Picture-in-Picture)
windowrulev2 = size 320 180, title:(Picture-in-Picture)
windowrulev2 = pin, title:(Picture-in-Picture)
# windowrulev2 = opacity 0.80 0.80,class:^(kitty)$
windowrule = float,^(jome)$
layerrule = ignorezero,wofi
layerrule = ignorezero,swaync
layerrule = blur,swaync

View file

@ -1 +0,0 @@
Xcursor.theme: Bibata-Modern-Ice

View file

@ -1,31 +0,0 @@
"use strict";
import GLib from 'gi://GLib';
import App from 'resource:///com/github/Aylur/ags/app.js'
import userOptions from './modules/.configuration/user_options.js';
import Overview from './modules/overview/main.js';
const COMPILED_STYLE_DIR = `${GLib.get_user_config_dir()}/ags/user/`
async function applyStyle() {
App.resetCss();
App.applyCss(`${COMPILED_STYLE_DIR}/style.css`);
console.log('[LOG] Styles loaded')
}
applyStyle().catch(print);
const Windows = () => [
Overview()
];
const CLOSE_ANIM_TIME = 210;
App.config({
css: `${COMPILED_STYLE_DIR}/style.css`,
stackTraceOnError: true,
closeWindowDelay: {
'sideright': CLOSE_ANIM_TIME,
'sideleft': CLOSE_ANIM_TIME,
'osk': CLOSE_ANIM_TIME,
},
windows: Windows().flat(1),
});

View file

@ -1,125 +0,0 @@
import userOverrides from '../../user_options.js';
// Defaults
let configOptions = {
// General stuff
'ai': {
'defaultGPTProvider': "openai",
'defaultTemperature': 0.9,
'enhancements': true,
'useHistory': true,
'writingCursor': " ...", // Warning: Using weird characters can mess up Markdown rendering
},
'animations': {
'choreographyDelay': 35,
'durationSmall': 110,
'durationLarge': 180,
},
'appearance': {
'keyboardUseFlag': false, // Use flag emoji instead of abbreviation letters
},
'apps': {
'imageViewer': "loupe",
'terminal': "foot", // This is only for shell actions
},
'battery': {
'low': 20,
'critical': 10,
},
'music': {
'preferredPlayer': "plasma-browser-integration",
},
'onScreenKeyboard': {
'layout': "qwerty_full", // See modules/onscreenkeyboard/onscreenkeyboard.js for available layouts
},
'overview': {
'scale': 0.18, // Relative to screen size
'numOfRows': 2,
'numOfCols': 5,
'wsNumScale': 0.09,
'wsNumMarginScale': 0.07,
},
'sidebar': {
'imageColumns': 2,
'imageBooruCount': 20,
'imageAllowNsfw': false,
},
'search': {
'engineBaseUrl': "https://www.google.com/search?q=",
'excludedSites': [], //add site to exclude from result. eg: "quora.com"
},
'time': {
// See https://docs.gtk.org/glib/method.DateTime.format.html
// Here's the 12h format: "%I:%M%P"
// For seconds, add "%S" and set interval to 1000
'format': "%H:%M",
'interval': 5000,
'dateFormatLong': "%A, %d/%m", // On bar
'dateInterval': 5000,
'dateFormat': "%d/%m", // On notif time
},
'weather': {
'city': "",
},
'workspaces': {
'shown': 10,
},
// Longer stuff
'icons': {
substitutions: {
'codium-url-handler': "vscodium",
'code-url-handler': "visual-studio-code",
'Code': "visual-studio-code",
'GitHub Desktop': "github-desktop",
'Minecraft* 1.20.1': "minecraft",
'gnome-tweaks': "org.gnome.tweaks",
'pavucontrol-qt': "pavucontrol",
'thunderbird-esr': "thunderbird",
'wps': "wps-office2019-kprometheus",
'wpsoffice': "wps-office2019-kprometheus",
'firefox-esr': "firefox",
'soffice' : "libreoffice",
'': "image-missing",
}
},
'keybinds': {
// Format: Mod1+Mod2+key. CaSe SeNsItIvE!
// Modifiers: Shift Ctrl Alt Hyper Meta
// See https://docs.gtk.org/gdk3/index.html#constants for the other keys (they are listed as KEY_key)
'overview': {
'altMoveLeft': "Ctrl+b",
'altMoveRight': "Ctrl+f",
'deleteToEnd': "Ctrl+k",
},
'sidebar': {
'apis': {
'nextTab': "Page_Down",
'prevTab': "Page_Up",
},
'options': { // Right sidebar
'nextTab': "Page_Down",
'prevTab': "Page_Up",
},
'pin': "Ctrl+p",
'cycleTab': "Ctrl+Tab",
'nextTab': "Ctrl+Page_Down",
'prevTab': "Ctrl+Page_Up",
},
},
}
// Override defaults with user's options
function overrideConfigRecursive(userOverrides, configOptions = {}) {
for (const [key, value] of Object.entries(userOverrides)) {
if (typeof value === 'object') {
overrideConfigRecursive(value, configOptions[key]);
} else {
configOptions[key] = value;
}
}
}
overrideConfigRecursive(userOverrides, configOptions);
globalThis['userOptions'] = configOptions;
export default configOptions;

View file

@ -1,13 +0,0 @@
const { Gtk } = imports.gi;
export function iconExists(iconName) {
let iconTheme = Gtk.IconTheme.get_default();
return iconTheme.has_icon(iconName);
}
export function substitute(str) {
if(userOptions.icons.substitutions[str]) return userOptions.icons.substitutions[str];
if (!iconExists(str)) str = str.toLowerCase().replace(/\s+/g, '-'); // Turn into kebab-case
return str;
}

View file

@ -1,4 +0,0 @@
export function clamp(x, min, max) {
return Math.min(Math.max(x, min), max);
}

View file

@ -1,54 +0,0 @@
const { GLib } = imports.gi;
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
const { execAsync, exec } = Utils;
export const distroID = exec(`bash -c 'cat /etc/os-release | grep "^ID=" | cut -d "=" -f 2 | sed "s/\\"//g"'`).trim();
export const isDebianDistro = (distroID == 'linuxmint' || distroID == 'ubuntu' || distroID == 'debian' || distroID == 'zorin' || distroID == 'popos' || distroID == 'raspbian' || distroID == 'kali');
export const isArchDistro = (distroID == 'arch' || distroID == 'endeavouros' || distroID == 'cachyos');
export const hasFlatpak = !!exec(`bash -c 'command -v flatpak'`);
const LIGHTDARK_FILE_LOCATION = `${GLib.get_user_cache_dir()}/ags/user/colormode.txt`;
const colorMode = Utils.exec('bash -c "sed -n \'1p\' $HOME/.cache/ags/user/colormode.txt"');
export let darkMode = Variable(!(Utils.readFile(LIGHTDARK_FILE_LOCATION).split('\n')[0].trim() == 'light'));
export const hasPlasmaIntegration = !!Utils.exec('bash -c "command -v plasma-browser-integration-host"');
export const getDistroIcon = () => {
// Arches
if(distroID == 'arch') return 'arch-symbolic';
if(distroID == 'endeavouros') return 'endeavouros-symbolic';
if(distroID == 'cachyos') return 'cachyos-symbolic';
// Funny flake
if(distroID == 'nixos') return 'nixos-symbolic';
// Cool thing
if(distroID == 'fedora') return 'fedora-symbolic';
// Debians
if(distroID == 'linuxmint') return 'ubuntu-symbolic';
if(distroID == 'ubuntu') return 'ubuntu-symbolic';
if(distroID == 'debian') return 'debian-symbolic';
if(distroID == 'zorin') return 'ubuntu-symbolic';
if(distroID == 'popos') return 'ubuntu-symbolic';
if(distroID == 'raspbian') return 'debian-symbolic';
if(distroID == 'kali') return 'debian-symbolic';
return 'linux-symbolic';
}
export const getDistroName = () => {
// Arches
if(distroID == 'arch') return 'Arch Linux';
if(distroID == 'endeavouros') return 'EndeavourOS';
if(distroID == 'cachyos') return 'CachyOS';
// Funny flake
if(distroID == 'nixos') return 'NixOS';
// Cool thing
if(distroID == 'fedora') return 'Fedora';
// Debians
if(distroID == 'linuxmint') return 'Linux Mint';
if(distroID == 'ubuntu') return 'Ubuntu';
if(distroID == 'debian') return 'Debian';
if(distroID == 'zorin') return 'Zorin';
if(distroID == 'popos') return 'Pop!_OS';
if(distroID == 'raspbian') return 'Raspbian';
if(distroID == 'kali') return 'Kali Linux';
return 'Linux';
}

View file

@ -1,86 +0,0 @@
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
const { Revealer, Scrollable } = Widget;
export const MarginRevealer = ({
transition = 'slide_down',
child,
revealChild,
showClass = 'element-show', // These are for animation curve, they don't really hide
hideClass = 'element-hide', // Don't put margins in these classes!
extraSetup = () => { },
...rest
}) => {
const widget = Scrollable({
...rest,
attribute: {
'revealChild': true, // It'll be set to false after init if it's supposed to hide
'transition': transition,
'show': () => {
if (widget.attribute.revealChild) return;
widget.hscroll = 'never';
widget.vscroll = 'never';
child.toggleClassName(hideClass, false);
child.toggleClassName(showClass, true);
widget.attribute.revealChild = true;
child.css = 'margin: 0px;';
},
'hide': () => {
if (!widget.attribute.revealChild) return;
child.toggleClassName(hideClass, true);
child.toggleClassName(showClass, false);
widget.attribute.revealChild = false;
if (widget.attribute.transition == 'slide_left')
child.css = `margin-right: -${child.get_allocated_width()}px;`;
else if (widget.attribute.transition == 'slide_right')
child.css = `margin-left: -${child.get_allocated_width()}px;`;
else if (widget.attribute.transition == 'slide_up')
child.css = `margin-bottom: -${child.get_allocated_height()}px;`;
else if (widget.attribute.transition == 'slide_down')
child.css = `margin-top: -${child.get_allocated_height()}px;`;
},
'toggle': () => {
if (widget.attribute.revealChild) widget.attribute.hide();
else widget.attribute.show();
},
},
child: child,
hscroll: `${revealChild ? 'never' : 'always'}`,
vscroll: `${revealChild ? 'never' : 'always'}`,
setup: (self) => {
extraSetup(self);
}
});
child.toggleClassName(`${revealChild ? showClass : hideClass}`, true);
return widget;
}
// TODO: Allow reveal update. Currently this just helps at declaration
export const DoubleRevealer = ({
transition1 = 'slide_right',
transition2 = 'slide_left',
duration1 = 150,
duration2 = 150,
child,
revealChild,
...rest
}) => {
const r2 = Revealer({
transition: transition2,
transitionDuration: duration2,
revealChild: revealChild,
child: child,
});
const r1 = Revealer({
transition: transition1,
transitionDuration: duration1,
revealChild: revealChild,
child: r2,
...rest,
})
r1.toggleRevealChild = (value) => {
r1.revealChild = value;
r2.revealChild = value;
}
return r1;
}

View file

@ -1,32 +0,0 @@
import App from 'resource:///com/github/Aylur/ags/app.js';
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
const { Box, Window } = Widget;
export default ({
name,
child,
showClassName = "",
hideClassName = "",
...props
}) => {
return Window({
name,
visible: false,
layer: 'overlay',
...props,
child: Box({
setup: (self) => {
self.hook(App, (self, currentName, visible) => {
if (currentName === name) {
self.toggleClassName(hideClassName, !visible);
}
}).keybind("Escape", () => App.closeWindow(name))
if (showClassName !== "" && hideClassName !== "")
self.className = `${showClassName} ${hideClassName}`;
},
child: child,
}),
});
}

View file

@ -1,4 +0,0 @@
import Cairo from 'gi://cairo?version=1.0';
export const dummyRegion = new Cairo.Region();
export const enableClickthrough = (self) => self.input_shape_combine_region(dummyRegion);

View file

@ -1,57 +0,0 @@
const { Gdk } = imports.gi;
export function setupCursorHover(button) { // Hand pointing cursor on hover
const display = Gdk.Display.get_default();
button.connect('enter-notify-event', () => {
const cursor = Gdk.Cursor.new_from_name(display, 'pointer');
button.get_window().set_cursor(cursor);
});
button.connect('leave-notify-event', () => {
const cursor = Gdk.Cursor.new_from_name(display, 'default');
button.get_window().set_cursor(cursor);
});
}
export function setupCursorHoverAim(button) { // Crosshair cursor on hover
button.connect('enter-notify-event', () => {
const display = Gdk.Display.get_default();
const cursor = Gdk.Cursor.new_from_name(display, 'crosshair');
button.get_window().set_cursor(cursor);
});
button.connect('leave-notify-event', () => {
const display = Gdk.Display.get_default();
const cursor = Gdk.Cursor.new_from_name(display, 'default');
button.get_window().set_cursor(cursor);
});
}
export function setupCursorHoverGrab(button) { // Hand ready to grab on hover
button.connect('enter-notify-event', () => {
const display = Gdk.Display.get_default();
const cursor = Gdk.Cursor.new_from_name(display, 'grab');
button.get_window().set_cursor(cursor);
});
button.connect('leave-notify-event', () => {
const display = Gdk.Display.get_default();
const cursor = Gdk.Cursor.new_from_name(display, 'default');
button.get_window().set_cursor(cursor);
});
}
export function setupCursorHoverInfo(button) { // "?" mark cursor on hover
const display = Gdk.Display.get_default();
button.connect('enter-notify-event', () => {
const cursor = Gdk.Cursor.new_from_name(display, 'help');
button.get_window().set_cursor(cursor);
});
button.connect('leave-notify-event', () => {
const cursor = Gdk.Cursor.new_from_name(display, 'default');
button.get_window().set_cursor(cursor);
});
}

View file

@ -1,25 +0,0 @@
const { Gdk } = imports.gi;
const MODS = {
'Shift': Gdk.ModifierType.SHIFT_MASK,
'Ctrl': Gdk.ModifierType.CONTROL_MASK,
'Alt': Gdk.ModifierType.ALT_MASK,
'Hyper': Gdk.ModifierType.HYPER_MASK,
'Meta': Gdk.ModifierType.META_MASK
}
export const checkKeybind = (event, keybind) => {
const pressedModMask = event.get_state()[1];
const pressedKey = event.get_keyval()[1];
const keys = keybind.split('+');
for (let i = 0; i < keys.length; i++) {
if (keys[i] in MODS) {
if (!(pressedModMask & MODS[keys[i]])) {
return false;
}
} else if (pressedKey !== Gdk[`KEY_${keys[i]}`]) {
return false;
}
}
return true;
}

View file

@ -1,28 +0,0 @@
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
function moveClientToWorkspace(address, workspace) {
Utils.execAsync(['bash', '-c', `hyprctl dispatch movetoworkspacesilent ${workspace},address:${address} &`]);
}
export function dumpToWorkspace(from, to) {
if (from == to) return;
Hyprland.clients.forEach(client => {
if (client.workspace.id == from) {
moveClientToWorkspace(client.address, to);
}
});
}
export function swapWorkspace(workspaceA, workspaceB) {
if (workspaceA == workspaceB) return;
const clientsA = [];
const clientsB = [];
Hyprland.clients.forEach(client => {
if (client.workspace.id == workspaceA) clientsA.push(client.address);
if (client.workspace.id == workspaceB) clientsB.push(client.address);
});
clientsA.forEach((address) => moveClientToWorkspace(address, workspaceB));
clientsB.forEach((address) => moveClientToWorkspace(address, workspaceA));
}

View file

@ -1,18 +0,0 @@
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import { SearchAndWindows } from "./windowcontent.js";
import PopupWindow from '../.widgethacks/popupwindow.js';
export default (id = '') => PopupWindow({
name: `overview${id}`,
exclusivity: 'ignore',
keymode: 'exclusive',
visible: false,
// anchor: ['middle'],
layer: 'overlay',
child: Widget.Box({
vertical: true,
children: [
SearchAndWindows(),
]
}),
})

View file

@ -1,155 +0,0 @@
const { Gio, GLib } = imports.gi;
import App from 'resource:///com/github/Aylur/ags/app.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
const { execAsync, exec } = Utils;
// import Todo from "../../services/todo.js";
import { darkMode } from '../.miscutils/system.js';
export function hasUnterminatedBackslash(inputString) {
// Use a regular expression to match a trailing odd number of backslashes
const regex = /\\+$/;
return regex.test(inputString);
}
export function launchCustomCommand(command) {
const args = command.toLowerCase().split(' ');
if (args[0] == '>raw') { // Mouse raw input
Utils.execAsync('hyprctl -j getoption input:accel_profile')
.then((output) => {
const value = JSON.parse(output)["str"].trim();
if (value != "[[EMPTY]]" && value != "") {
execAsync(['bash', '-c', `hyprctl keyword input:accel_profile '[[EMPTY]]'`]).catch(print);
}
else {
execAsync(['bash', '-c', `hyprctl keyword input:accel_profile flat`]).catch(print);
}
})
}
else if (args[0] == '>img') { // Change wallpaper
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchwall.sh`, `&`]).catch(print);
}
else if (args[0] == '>color') { // Generate colorscheme from color picker
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchcolor.sh --pick`, `&`]).catch(print);
}
else if (args[0] == '>light') { // Light mode
darkMode.value = false;
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "1s/.*/light/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
.catch(print);
}
else if (args[0] == '>dark') { // Dark mode
darkMode.value = true;
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "1s/.*/dark/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
.catch(print);
}
else if (args[0] == '>badapple') { // Black and white
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "3s/.*/monochrome/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`])
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`]))
.catch(print);
}
else if (args[0] == '>material') { // Use material colors
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "material" > ${GLib.get_user_cache_dir()}/ags/user/colorbackend.txt`]).catch(print)
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print))
.catch(print);
}
else if (args[0] == '>pywal') { // Use Pywal (ik it looks shit but I'm not removing)
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "pywal" > ${GLib.get_user_cache_dir()}/ags/user/colorbackend.txt`]).catch(print)
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print))
.catch(print);
}
else if (args[0] == '>todo') { // Todo
Todo.add(args.slice(1).join(' '));
}
else if (args[0] == '>shutdown') { // Shut down
execAsync([`bash`, `-c`, `systemctl poweroff || loginctl poweroff`]).catch(print);
}
else if (args[0] == '>reboot') { // Reboot
execAsync([`bash`, `-c`, `systemctl reboot || loginctl reboot`]).catch(print);
}
else if (args[0] == '>sleep') { // Sleep
execAsync([`bash`, `-c`, `systemctl suspend || loginctl suspend`]).catch(print);
}
else if (args[0] == '>logout') { // Log out
execAsync([`bash`, `-c`, `pkill Hyprland || pkill sway`]).catch(print);
}
}
export function execAndClose(command, terminal) {
App.closeWindow('overview');
if (terminal) {
execAsync([`bash`, `-c`, `${userOptions.apps.terminal} fish -C "${command}"`, `&`]).catch(print);
}
else
execAsync(command).catch(print);
}
export function couldBeMath(str) {
const regex = /^[0-9.+*/-]/;
return regex.test(str);
}
export function expandTilde(path) {
if (path.startsWith('~')) {
return GLib.get_home_dir() + path.slice(1);
} else {
return path;
}
}
function getFileIcon(fileInfo) {
let icon = fileInfo.get_icon();
if (icon) {
// Get the icon's name
return icon.get_names()[0];
} else {
// Default icon for files
return 'text-x-generic';
}
}
export function ls({ path = '~', silent = false }) {
let contents = [];
try {
let expandedPath = expandTilde(path);
if (expandedPath.endsWith('/'))
expandedPath = expandedPath.slice(0, -1);
let folder = Gio.File.new_for_path(expandedPath);
let enumerator = folder.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
let fileInfo;
while ((fileInfo = enumerator.next_file(null)) !== null) {
let fileName = fileInfo.get_display_name();
let fileType = fileInfo.get_file_type();
let item = {
parentPath: expandedPath,
name: fileName,
type: fileType === Gio.FileType.DIRECTORY ? 'folder' : 'file',
icon: getFileIcon(fileInfo),
};
// Add file extension for files
if (fileType === Gio.FileType.REGULAR) {
let fileExtension = fileName.split('.').pop();
item.type = `${fileExtension}`;
}
contents.push(item);
contents.sort((a, b) => {
const aIsFolder = a.type.startsWith('folder');
const bIsFolder = b.type.startsWith('folder');
if (aIsFolder && !bIsFolder) {
return -1;
} else if (!aIsFolder && bIsFolder) {
return 1;
} else {
return a.name.localeCompare(b.name); // Sort alphabetically within folders and files
}
});
}
} catch (e) {
if (!silent) console.log(e);
}
return contents;
}

View file

@ -1,423 +0,0 @@
// TODO
// - Make client destroy/create not destroy and recreate the whole thing
// - Active ws hook optimization: only update when moving to next group
//
const { Gdk, Gtk } = imports.gi;
const { Gravity } = imports.gi.Gdk;
import { SCREEN_HEIGHT, SCREEN_WIDTH } from '../../variables.js';
import App from 'resource:///com/github/Aylur/ags/app.js';
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';
const { execAsync, exec } = Utils;
import { setupCursorHoverGrab } from '../.widgetutils/cursorhover.js';
import { dumpToWorkspace, swapWorkspace } from "./actions.js";
import { substitute } from "../.miscutils/icons.js";
const NUM_OF_WORKSPACES_SHOWN = userOptions.overview.numOfCols * userOptions.overview.numOfRows;
const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_APP, 0)];
const POPUP_CLOSE_TIME = 100; // ms
const overviewTick = Variable(false);
export default () => {
const clientMap = new Map();
let workspaceGroup = 0;
const ContextMenuWorkspaceArray = ({ label, actionFunc, thisWorkspace }) => Widget.MenuItem({
label: `${label}`,
setup: (menuItem) => {
let submenu = new Gtk.Menu();
submenu.className = 'menu';
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
const startWorkspace = offset + 1;
const endWorkspace = startWorkspace + NUM_OF_WORKSPACES_SHOWN - 1;
for (let i = startWorkspace; i <= endWorkspace; i++) {
let button = new Gtk.MenuItem({
label: `Workspace ${i}`
});
button.connect("activate", () => {
// execAsync([`${onClickBinary}`, `${thisWorkspace}`, `${i}`]).catch(print);
actionFunc(thisWorkspace, i);
overviewTick.setValue(!overviewTick.value);
});
submenu.append(button);
}
menuItem.set_reserve_indicator(true);
menuItem.set_submenu(submenu);
}
})
const Window = ({ address, at: [x, y], size: [w, h], workspace: { id, name }, class: c, title, xwayland }, screenCoords) => {
const revealInfoCondition = (Math.min(w, h) * userOptions.overview.scale > 70);
if (w <= 0 || h <= 0 || (c === '' && title === '') || c.endsWith('-dropterm')) return null;
// Non-primary monitors
if (screenCoords.x != 0) x -= screenCoords.x;
if (screenCoords.y != 0) y -= screenCoords.y;
// Other offscreen adjustments
if (x + w <= 0) x += (Math.floor(x / SCREEN_WIDTH) * SCREEN_WIDTH);
else if (x < 0) { w = x + w; x = 0; }
if (y + h <= 0) x += (Math.floor(y / SCREEN_HEIGHT) * SCREEN_HEIGHT);
else if (y < 0) { h = y + h; y = 0; }
// Truncate if offscreen
if (x + w > SCREEN_WIDTH) w = SCREEN_WIDTH - x;
if (y + h > SCREEN_HEIGHT) h = SCREEN_HEIGHT - y;
const appIcon = Widget.Icon({
icon: substitute(c),
size: Math.min(w, h) * userOptions.overview.scale / 2.5,
});
return Widget.Button({
attribute: {
address, x, y, w, h, ws: id,
updateIconSize: (self) => {
appIcon.size = Math.min(self.attribute.w, self.attribute.h) * userOptions.overview.scale / 2.5;
},
},
className: 'overview-tasks-window',
hpack: 'start',
vpack: 'start',
css: `
margin-left: ${Math.round(x * userOptions.overview.scale)}px;
margin-top: ${Math.round(y * userOptions.overview.scale)}px;
margin-right: -${Math.round((x + w) * userOptions.overview.scale)}px;
margin-bottom: -${Math.round((y + h) * userOptions.overview.scale)}px;
`,
onClicked: (self) => {
App.closeWindow('overview');
Utils.timeout(POPUP_CLOSE_TIME, () => Hyprland.messageAsync(`dispatch focuswindow address:${address}`));
},
onMiddleClickRelease: () => Hyprland.messageAsync(`dispatch closewindow address:${address}`),
onSecondaryClick: (button) => {
button.toggleClassName('overview-tasks-window-selected', true);
const menu = Widget.Menu({
className: 'menu',
children: [
Widget.MenuItem({
child: Widget.Label({
xalign: 0,
label: "Close (Middle-click)",
}),
onActivate: () => Hyprland.messageAsync(`dispatch closewindow address:${address}`),
}),
ContextMenuWorkspaceArray({
label: "Dump windows to workspace",
actionFunc: dumpToWorkspace,
thisWorkspace: Number(id)
}),
ContextMenuWorkspaceArray({
label: "Swap windows with workspace",
actionFunc: swapWorkspace,
thisWorkspace: Number(id)
}),
],
});
menu.connect("deactivate", () => {
button.toggleClassName('overview-tasks-window-selected', false);
})
menu.connect("selection-done", () => {
button.toggleClassName('overview-tasks-window-selected', false);
})
menu.popup_at_widget(button.get_parent(), Gravity.SOUTH, Gravity.NORTH, null); // Show menu below the button
button.connect("destroy", () => menu.destroy());
},
child: Widget.Box({
homogeneous: true,
child: Widget.Box({
vertical: true,
vpack: 'center',
className: 'spacing-v-5',
children: [
appIcon,
// TODO: Add xwayland tag instead of just having italics
Widget.Revealer({
transition: 'slide_down',
revealChild: revealInfoCondition,
child: Widget.Label({
maxWidthChars: 10, // Doesn't matter what number
truncate: 'end',
className: `${xwayland ? 'txt txt-italic' : 'txt'}`,
css: `
font-size: ${Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) * userOptions.overview.scale / 14.6}px;
margin: 0px ${Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) * userOptions.overview.scale / 10}px;
`,
// If the title is too short, include the class
label: (title.length <= 1 ? `${c}: ${title}` : title),
})
})
]
})
}),
tooltipText: `${c}: ${title}`,
setup: (button) => {
setupCursorHoverGrab(button);
button.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, TARGET, Gdk.DragAction.MOVE);
button.drag_source_set_icon_name(substitute(c));
// button.drag_source_set_icon_gicon(icon);
button.connect('drag-begin', (button) => { // On drag start, add the dragging class
button.toggleClassName('overview-tasks-window-dragging', true);
});
button.connect('drag-data-get', (_w, _c, data) => { // On drag finish, give address
data.set_text(address, address.length);
button.toggleClassName('overview-tasks-window-dragging', false);
});
},
});
}
const Workspace = (index) => {
// const fixed = Widget.Fixed({
// attribute: {
// put: (widget, x, y) => {
// fixed.put(widget, x, y);
// },
// move: (widget, x, y) => {
// fixed.move(widget, x, y);
// },
// }
// });
const fixed = Widget.Box({
attribute: {
put: (widget, x, y) => {
if (!widget.attribute) return;
// Note: x and y are already multiplied by userOptions.overview.scale
const newCss = `
margin-left: ${Math.round(x)}px;
margin-top: ${Math.round(y)}px;
margin-right: -${Math.round(x + (widget.attribute.w * userOptions.overview.scale))}px;
margin-bottom: -${Math.round(y + (widget.attribute.h * userOptions.overview.scale))}px;
`;
widget.css = newCss;
fixed.pack_start(widget, false, false, 0);
},
move: (widget, x, y) => {
if (!widget) return;
if (!widget.attribute) return;
// Note: x and y are already multiplied by userOptions.overview.scale
const newCss = `
margin-left: ${Math.round(x)}px;
margin-top: ${Math.round(y)}px;
margin-right: -${Math.round(x + (widget.attribute.w * userOptions.overview.scale))}px;
margin-bottom: -${Math.round(y + (widget.attribute.h * userOptions.overview.scale))}px;
`;
widget.css = newCss;
},
}
})
const WorkspaceNumber = ({ index, ...rest }) => Widget.Label({
className: 'overview-tasks-workspace-number',
label: `${index}`,
css: `
margin: ${Math.min(SCREEN_WIDTH, SCREEN_HEIGHT) * userOptions.overview.scale * userOptions.overview.wsNumMarginScale}px;
font-size: ${SCREEN_HEIGHT * userOptions.overview.scale * userOptions.overview.wsNumScale}px;
`,
setup: (self) => self.hook(Hyprland.active.workspace, (self) => {
// Update when going to new ws group
const currentGroup = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN);
self.label = `${currentGroup * NUM_OF_WORKSPACES_SHOWN + index}`;
}),
...rest,
})
const widget = Widget.Box({
className: 'overview-tasks-workspace',
vpack: 'center',
css: `
min-width: ${SCREEN_WIDTH * userOptions.overview.scale}px;
min-height: ${SCREEN_HEIGHT * userOptions.overview.scale}px;
`,
children: [Widget.EventBox({
hexpand: true,
vexpand: true,
onPrimaryClick: () => {
App.closeWindow('overview');
Utils.timeout(POPUP_CLOSE_TIME, () => Hyprland.messageAsync(`dispatch workspace ${index}`));
},
setup: (eventbox) => {
eventbox.drag_dest_set(Gtk.DestDefaults.ALL, TARGET, Gdk.DragAction.COPY);
eventbox.connect('drag-data-received', (_w, _c, _x, _y, data) => {
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
Hyprland.messageAsync(`dispatch movetoworkspacesilent ${index + offset},address:${data.get_text()}`)
overviewTick.setValue(!overviewTick.value);
});
},
child: Widget.Overlay({
child: Widget.Box({}),
overlays: [
WorkspaceNumber({ index: index, hpack: 'start', vpack: 'start' }),
fixed
]
}),
})],
});
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
fixed.attribute.put(WorkspaceNumber(offset + index), 0, 0);
widget.clear = () => {
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
clientMap.forEach((client, address) => {
if (!client) return;
if ((client.attribute.ws <= offset || client.attribute.ws > offset + NUM_OF_WORKSPACES_SHOWN) ||
(client.attribute.ws == offset + index)) {
client.destroy();
client = null;
clientMap.delete(address);
}
});
}
widget.set = (clientJson, screenCoords) => {
let c = clientMap.get(clientJson.address);
if (c) {
if (c.attribute?.ws !== clientJson.workspace.id) {
c.destroy();
c = null;
clientMap.delete(clientJson.address);
}
else if (c) {
c.attribute.w = clientJson.size[0];
c.attribute.h = clientJson.size[1];
c.attribute.updateIconSize(c);
fixed.attribute.move(c,
Math.max(0, clientJson.at[0] * userOptions.overview.scale),
Math.max(0, clientJson.at[1] * userOptions.overview.scale)
);
return;
}
}
const newWindow = Window(clientJson, screenCoords);
if (newWindow === null) return;
// clientMap.set(clientJson.address, newWindow);
fixed.attribute.put(newWindow,
Math.max(0, newWindow.attribute.x * userOptions.overview.scale),
Math.max(0, newWindow.attribute.y * userOptions.overview.scale)
);
clientMap.set(clientJson.address, newWindow);
};
widget.unset = (clientAddress) => {
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
let c = clientMap.get(clientAddress);
if (!c) return;
c.destroy();
c = null;
clientMap.delete(clientAddress);
};
widget.show = () => {
fixed.show_all();
}
return widget;
};
const arr = (s, n) => {
const array = [];
for (let i = 0; i < n; i++)
array.push(s + i);
return array;
};
const OverviewRow = ({ startWorkspace, workspaces, windowName = 'overview' }) => Widget.Box({
children: arr(startWorkspace, workspaces).map(Workspace),
attribute: {
monitorMap: [],
getMonitorMap: (box) => {
execAsync('hyprctl -j monitors').then(monitors => {
box.attribute.monitorMap = JSON.parse(monitors).reduce((acc, item) => {
acc[item.id] = { x: item.x, y: item.y };
return acc;
}, {});
});
},
update: (box) => {
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
if (!App.getWindow(windowName).visible) return;
Hyprland.messageAsync('j/clients').then(clients => {
const allClients = JSON.parse(clients);
const kids = box.get_children();
kids.forEach(kid => kid.clear());
for (let i = 0; i < allClients.length; i++) {
const client = allClients[i];
const childID = client.workspace.id - (offset + startWorkspace);
if (offset + startWorkspace <= client.workspace.id &&
client.workspace.id <= offset + startWorkspace + workspaces) {
const screenCoords = box.attribute.monitorMap[client.monitor];
if (kids[childID]) {
kids[childID].set(client, screenCoords);
}
continue;
}
}
kids.forEach(kid => kid.show());
}).catch(print);
},
updateWorkspace: (box, id) => {
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
if (!( // Not in range, ignore
offset + startWorkspace <= id &&
id <= offset + startWorkspace + workspaces
)) return;
// if (!App.getWindow(windowName).visible) return;
Hyprland.messageAsync('j/clients').then(clients => {
const allClients = JSON.parse(clients);
const kids = box.get_children();
for (let i = 0; i < allClients.length; i++) {
const client = allClients[i];
if (client.workspace.id != id) continue;
const screenCoords = box.attribute.monitorMap[client.monitor];
kids[id - (offset + startWorkspace)]?.set(client, screenCoords);
}
kids[id - (offset + startWorkspace)]?.show();
}).catch(print);
},
},
setup: (box) => {
box.attribute.getMonitorMap(box);
box
.hook(overviewTick, (box) => box.attribute.update(box))
.hook(Hyprland, (box, clientAddress) => {
const offset = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN) * NUM_OF_WORKSPACES_SHOWN;
const kids = box.get_children();
const client = Hyprland.getClient(clientAddress);
if (!client) return;
const id = client.workspace.id;
box.attribute.updateWorkspace(box, id);
kids[id - (offset + startWorkspace)]?.unset(clientAddress);
}, 'client-removed')
.hook(Hyprland, (box, clientAddress) => {
const client = Hyprland.getClient(clientAddress);
if (!client) return;
box.attribute.updateWorkspace(box, client.workspace.id);
}, 'client-added')
.hook(Hyprland.active.workspace, (box) => {
// Full update when going to new ws group
const previousGroup = box.attribute.workspaceGroup;
const currentGroup = Math.floor((Hyprland.active.workspace.id - 1) / NUM_OF_WORKSPACES_SHOWN);
if (currentGroup !== previousGroup) {
box.attribute.update(box);
box.attribute.workspaceGroup = currentGroup;
}
})
.hook(App, (box, name, visible) => { // Update on open
if (name == 'overview' && visible) box.attribute.update(box);
})
},
});
return Widget.Revealer({
revealChild: true,
transition: 'slide_down',
transitionDuration: userOptions.animations.durationLarge,
child: Widget.Box({
vertical: true,
className: 'overview-tasks',
children: Array.from({ length: userOptions.overview.numOfRows }, (_, index) =>
OverviewRow({
startWorkspace: 1 + index * userOptions.overview.numOfCols,
workspaces: userOptions.overview.numOfCols,
})
)
}),
});
}

View file

@ -1,163 +0,0 @@
const { Gtk } = imports.gi;
import App from 'resource:///com/github/Aylur/ags/app.js';
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
const { execAsync, exec } = Utils;
import { searchItem } from './searchitem.js';
import { execAndClose, couldBeMath, launchCustomCommand } from './miscfunctions.js';
export const DirectoryButton = ({ parentPath, name, type, icon }) => {
const actionText = Widget.Revealer({
revealChild: false,
transition: "crossfade",
transitionDuration: userOptions.animations.durationLarge,
child: Widget.Label({
className: 'overview-search-results-txt txt txt-small txt-action',
label: 'Open',
})
});
const actionTextRevealer = Widget.Revealer({
revealChild: false,
transition: "slide_left",
transitionDuration: userOptions.animations.durationSmall,
child: actionText,
});
return Widget.Button({
className: 'overview-search-result-btn',
onClicked: () => {
App.closeWindow('overview');
execAsync(['bash', '-c', `xdg-open '${parentPath}/${name}'`, `&`]).catch(print);
},
child: Widget.Box({
children: [
Widget.Box({
vertical: false,
children: [
Widget.Box({
className: 'overview-search-results-icon',
homogeneous: true,
child: Widget.Icon({
icon: icon,
}),
}),
Widget.Label({
className: 'overview-search-results-txt txt txt-norm',
label: name,
}),
Widget.Box({ hexpand: true }),
actionTextRevealer,
]
})
]
}),
setup: (self) => self
.on('focus-in-event', (button) => {
actionText.revealChild = true;
actionTextRevealer.revealChild = true;
})
.on('focus-out-event', (button) => {
actionText.revealChild = false;
actionTextRevealer.revealChild = false;
})
,
})
}
export const CalculationResultButton = ({ result, text }) => searchItem({
materialIconName: '󱖦 ',
name: `Math result`,
actionName: "Copy",
content: `${result}`,
onActivate: () => {
App.closeWindow('overview');
execAsync(['wl-copy', `${result}`]).catch(print);
},
});
export const DesktopEntryButton = (app) => {
const actionText = Widget.Revealer({
revealChild: false,
transition: "crossfade",
transitionDuration: userOptions.animations.durationLarge,
child: Widget.Label({
className: 'overview-search-results-txt txt txt-small txt-action',
label: 'Launch',
})
});
const actionTextRevealer = Widget.Revealer({
revealChild: false,
transition: "slide_left",
transitionDuration: userOptions.animations.durationSmall,
child: actionText,
});
return Widget.Button({
className: 'overview-search-result-btn',
onClicked: () => {
App.closeWindow('overview');
app.launch();
},
child: Widget.Box({
children: [
Widget.Box({
vertical: false,
children: [
Widget.Box({
className: 'overview-search-results-icon',
homogeneous: true,
child: Widget.Icon({
icon: app.iconName,
}),
}),
Widget.Label({
className: 'overview-search-results-txt txt txt-norm',
label: app.name,
}),
Widget.Box({ hexpand: true }),
actionTextRevealer,
]
})
]
}),
setup: (self) => self
.on('focus-in-event', (button) => {
actionText.revealChild = true;
actionTextRevealer.revealChild = true;
})
.on('focus-out-event', (button) => {
actionText.revealChild = false;
actionTextRevealer.revealChild = false;
})
,
})
}
export const ExecuteCommandButton = ({ command, terminal = false }) => searchItem({
materialIconName: `${terminal ? 'terminal' : ' '}`,
name: `Run command`,
actionName: `Execute ${terminal ? 'in terminal' : ''}`,
content: `${command}`,
onActivate: () => execAndClose(command, terminal),
extraClassName: 'techfont',
})
export const CustomCommandButton = ({ text = '' }) => searchItem({
materialIconName: ' ',
name: 'Action',
actionName: 'Run',
content: `${text}`,
onActivate: () => {
App.closeWindow('overview');
launchCustomCommand(text);
},
});
export const SearchButton = ({ text = '' }) => searchItem({
materialIconName: '󰜏 ',
name: 'Search the web',
actionName: 'Go',
content: `${text}`,
onActivate: () => {
App.closeWindow('overview');
execAsync(['bash', '-c', `xdg-open '${userOptions.search.engineBaseUrl}${text} ${['', ...userOptions.search.excludedSites].join(' -site:')}' &`]).catch(print);
},
});

View file

@ -1,65 +0,0 @@
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
export const searchItem = ({ materialIconName, name, actionName, content, onActivate, extraClassName = '', ...rest }) => {
const actionText = Widget.Revealer({
revealChild: false,
transition: "crossfade",
transitionDuration: userOptions.animations.durationLarge,
child: Widget.Label({
className: 'overview-search-results-txt txt txt-small txt-action',
label: `${actionName}`,
})
});
const actionTextRevealer = Widget.Revealer({
revealChild: false,
transition: "slide_left",
transitionDuration: userOptions.animations.durationSmall,
child: actionText,
})
return Widget.Button({
className: `overview-search-result-btn txt ${extraClassName}`,
onClicked: onActivate,
child: Widget.Box({
children: [
Widget.Box({
vertical: false,
children: [
Widget.Label({
className: `icon-material overview-search-results-icon`,
label: `${materialIconName}`,
}),
Widget.Box({
vertical: true,
children: [
Widget.Label({
hpack: 'start',
className: 'overview-search-results-txt txt-smallie txt-subtext',
label: `${name}`,
truncate: "end",
}),
Widget.Label({
hpack: 'start',
className: 'overview-search-results-txt txt-norm',
label: `${content}`,
truncate: "end",
}),
]
}),
Widget.Box({ hexpand: true }),
actionTextRevealer,
],
})
]
}),
setup: (self) => self
.on('focus-in-event', (button) => {
actionText.revealChild = true;
actionTextRevealer.revealChild = true;
})
.on('focus-out-event', (button) => {
actionText.revealChild = false;
actionTextRevealer.revealChild = false;
})
,
});
}

View file

@ -1,262 +0,0 @@
const { Gdk, Gtk } = imports.gi;
import App from 'resource:///com/github/Aylur/ags/app.js';
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
import Applications from 'resource:///com/github/Aylur/ags/service/applications.js';
const { execAsync, exec } = Utils;
import { execAndClose, expandTilde, hasUnterminatedBackslash, couldBeMath, launchCustomCommand, ls } from './miscfunctions.js';
import {
CalculationResultButton, CustomCommandButton, DirectoryButton,
DesktopEntryButton, ExecuteCommandButton, SearchButton
} from './searchbuttons.js';
import { checkKeybind } from '../.widgetutils/keybind.js';
// Add math funcs
const { abs, sin, cos, tan, cot, asin, acos, atan, acot } = Math;
const pi = Math.PI;
// trigonometric funcs for deg
const sind = x => sin(x * pi / 180);
const cosd = x => cos(x * pi / 180);
const tand = x => tan(x * pi / 180);
const cotd = x => cot(x * pi / 180);
const asind = x => asin(x) * 180 / pi;
const acosd = x => acos(x) * 180 / pi;
const atand = x => atan(x) * 180 / pi;
const acotd = x => acot(x) * 180 / pi;
const MAX_RESULTS = 10;
const OVERVIEW_SCALE = 0.18; // = overview workspace box / screen size
const OVERVIEW_WS_NUM_SCALE = 0.0;
const OVERVIEW_WS_NUM_MARGIN_SCALE = 0.07;
const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_APP, 0)];
function iconExists(iconName) {
let iconTheme = Gtk.IconTheme.get_default();
return iconTheme.has_icon(iconName);
}
const OptionalOverview = async () => {
try {
return (await import('./overview_hyprland.js')).default();
} catch {
return Widget.Box({});
// return (await import('./overview_hyprland.js')).default();
}
};
const overviewContent = await OptionalOverview();
export const SearchAndWindows = () => {
var _appSearchResults = [];
const ClickToClose = ({ ...props }) => Widget.EventBox({
...props,
onPrimaryClick: () => App.closeWindow('overview'),
onSecondaryClick: () => App.closeWindow('overview'),
onMiddleClick: () => App.closeWindow('overview'),
});
const resultsBox = Widget.Box({
className: 'overview-search-results',
vertical: true,
vexpand: true,
});
const resultsRevealer = Widget.Revealer({
transitionDuration: userOptions.animations.durationLarge,
revealChild: false,
transition: 'slide_down',
// duration: 200,
hpack: 'center',
child: resultsBox,
});
const entryPromptRevealer = Widget.Revealer({
transition: 'crossfade',
transitionDuration: userOptions.animations.durationLarge,
revealChild: true,
hpack: 'center',
child: Widget.Label({
className: 'overview-search-prompt txt-small txt',
label: 'Type to search'
}),
});
const entryIconRevealer = Widget.Revealer({
transition: 'crossfade',
transitionDuration: userOptions.animations.durationLarge,
revealChild: false,
hpack: 'end',
child: Widget.Label({
className: 'txt txt-large icon-material overview-search-icon',
label: ' ',
}),
});
const entryIcon = Widget.Box({
className: 'overview-search-prompt-box',
setup: box => box.pack_start(entryIconRevealer, true, true, 0),
});
const entry = Widget.Entry({
className: 'overview-search-box txt-small txt',
hpack: 'center',
onAccept: (self) => { // This is when you hit Enter
const text = self.text;
if (text.length == 0) return;
const isAction = text.startsWith('>');
const isDir = (['/', '~'].includes(entry.text[0]));
if (couldBeMath(text)) { // Eval on typing is dangerous, this is a workaround
try {
const fullResult = eval(text.replace(/\^/g, "**"));
// copy
execAsync(['wl-copy', `${fullResult}`]).catch(print);
App.closeWindow('overview');
return;
} catch (e) {
// console.log(e);
}
}
if (isDir) {
App.closeWindow('overview');
execAsync(['bash', '-c', `xdg-open "${expandTilde(text)}"`, `&`]).catch(print);
return;
}
if (_appSearchResults.length > 0) {
App.closeWindow('overview');
_appSearchResults[0].launch();
return;
}
else if (text[0] == '>') { // Custom commands
App.closeWindow('overview');
launchCustomCommand(text);
return;
}
// Fallback: Execute command
if (!isAction && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') {
if (text.startsWith('sudo'))
execAndClose(text, true);
else
execAndClose(text, false);
}
else {
App.closeWindow('overview');
execAsync(['bash', '-c', `xdg-open '${userOptions.search.engineBaseUrl}${text} ${['', ...userOptions.search.excludedSites].join(' -site:')}' &`]).catch(print);
}
},
onChange: (entry) => { // this is when you type
const isAction = entry.text[0] == '>';
const isDir = (['/', '~'].includes(entry.text[0]));
resultsBox.get_children().forEach(ch => ch.destroy());
// check empty if so then dont do stuff
if (entry.text == '') {
resultsRevealer.revealChild = false;
overviewContent.revealChild = true;
entryPromptRevealer.revealChild = true;
entryIconRevealer.revealChild = false;
entry.toggleClassName('overview-search-box-extended', false);
return;
}
const text = entry.text;
resultsRevealer.revealChild = true;
overviewContent.revealChild = false;
entryPromptRevealer.revealChild = false;
entryIconRevealer.revealChild = true;
entry.toggleClassName('overview-search-box-extended', true);
_appSearchResults = Applications.query(text);
// Calculate
if (couldBeMath(text)) { // Eval on typing is dangerous; this is a small workaround.
try {
const fullResult = eval(text.replace(/\^/g, "**"));
resultsBox.add(CalculationResultButton({ result: fullResult, text: text }));
} catch (e) {
// console.log(e);
}
}
if (isDir) {
var contents = [];
contents = ls({ path: text, silent: true });
contents.forEach((item) => {
resultsBox.add(DirectoryButton(item));
})
}
if (isAction) { // Eval on typing is dangerous, this is a workaround.
resultsBox.add(CustomCommandButton({ text: entry.text }));
}
// Add application entries
let appsToAdd = MAX_RESULTS;
_appSearchResults.forEach(app => {
if (appsToAdd == 0) return;
resultsBox.add(DesktopEntryButton(app));
appsToAdd--;
});
// Fallbacks
// if the first word is an actual command
if (!isAction && !hasUnterminatedBackslash(text) && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') {
resultsBox.add(ExecuteCommandButton({ command: entry.text, terminal: entry.text.startsWith('sudo') }));
}
// Add fallback: search
resultsBox.add(SearchButton({ text: entry.text }));
resultsBox.show_all();
},
});
return Widget.Box({
vertical: true,
children: [
ClickToClose({ // Top margin. Also works as a click-outside-to-close thing
child: Widget.Box({
className: 'bar-height',
})
}),
Widget.Box({
hpack: 'center',
children: [
entry,
Widget.Box({
className: 'overview-search-icon-box',
setup: (box) => {
box.pack_start(entryPromptRevealer, true, true, 0)
},
}),
entryIcon,
]
}),
overviewContent,
resultsRevealer,
],
setup: (self) => self
.hook(App, (_b, name, visible) => {
if (name == 'overview' && !visible) {
resultsBox.children = [];
entry.set_text('');
}
})
.on('key-press-event', (widget, event) => { // Typing
const keyval = event.get_keyval()[1];
const modstate = event.get_state()[1];
if (checkKeybind(event, userOptions.keybinds.overview.altMoveLeft))
entry.set_position(Math.max(entry.get_position() - 1, 0));
else if (checkKeybind(event, userOptions.keybinds.overview.altMoveRight))
entry.set_position(Math.min(entry.get_position() + 1, entry.get_text().length));
else if (checkKeybind(event, userOptions.keybinds.overview.deleteToEnd)) {
const text = entry.get_text();
const pos = entry.get_position();
const newText = text.slice(0, pos);
entry.set_text(newText);
entry.set_position(newText.length);
}
else if (!(modstate & Gdk.ModifierType.CONTROL_MASK)) { // Ctrl not held
if (keyval >= 32 && keyval <= 126 && widget != entry) {
Utils.timeout(1, () => entry.grab_focus());
entry.set_text(entry.text + String.fromCharCode(keyval));
entry.set_position(-1);
}
}
})
,
});
};

View file

@ -1,197 +0,0 @@
*:not(popover) {
all: unset;
}
@import '../../../.config/waybar/wallust/colors-waybar.css';
/* define some colors */
@define-color border-color @color12;
@define-color border-color-alt @color1;
@define-color text-color rgba(255, 255, 255, 0.7);
@define-color noti-bg rgba(0, 0, 0, 0.4);
@define-color noti-bg-alt #111111;
widget {
border-radius: 0.818rem;
-gtk-outline-radius: 0.818rem;
}
.overview-window {
margin-top: 2.727rem;
}
.overview-search-box {
transition: 300ms cubic-bezier(0, 0.55, 0.45, 1);
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
border-top: 2px solid @border-color;
border-left: 1px solid @border-color-alt;
border-right: 1px solid @border-color-alt;
border-bottom: 2px solid @border-color;
/*box-shadow: 0px 2px 3px alpha(@color0, 0.45); */
margin: 0.476rem;
min-width: 13.636rem;
min-height: 3.409rem;
padding: 0rem 1.364rem;
padding-right: 2.864rem;
background-color: @noti-bg;
color: @text-color;
caret-color: inherit;
font-weight: bolder;
}
.overview-search-box selection {
background-color: @noti-bg;
color: @text-color;
}
.overview-search-box-extended {
min-width: 25.909rem;
caret-color: #FDD9FD;
}
.overview-search-prompt {
color: @text-color;
}
.overview-search-icon {
margin: 0rem 1.023rem;
}
.overview-search-prompt-box {
margin-left: -18.545rem;
margin-right: 0.544rem;
}
.overview-search-icon-box {
margin-left: -18.545rem;
margin-right: 0.544rem;
}
.overview-search-results {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
border-top: 2px solid @border-color;
border-left: 1px solid @border-color-alt;
border-right: 1px solid @border-color-alt;
border-bottom: 2px solid @border-color;
box-shadow: 0px 2px 3px @color9;
margin: 0.476rem;
min-width: 28.773rem;
padding: 0.682rem;
background-color: @noti-bg;
color: @text-color;
font-weight: bold;
}
.overview-search-results-icon {
margin: 0rem 0.682rem;
font-size: 2.386rem;
min-width: 2.386rem;
min-height: 2.386rem;
}
.overview-search-results-txt {
margin-right: 0.682rem;
}
.overview-search-results-txt-cmd {
margin-right: 0.682rem;
font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font", "JetBrains Mono NL", "SpaceMono NF", "SpaceMono Nerd Font", monospace;
font-size: 1.227rem;
}
.overview-search-result-btn {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
padding: 0.341rem;
min-width: 2.386rem;
min-height: 2.386rem;
caret-color: transparent;
}
.overview-search-result-btn:hover,
.overview-search-result-btn:focus {
background-color: alpha(@color7, 0.9);
color: alpha(@color0, 0.7);
}
.overview-search-result-btn:active {
background-color: alpha(@color7, 0.9);
color: @color4;
}
.overview-tasks {
border-radius: 1.705rem;
-gtk-outline-radius: 1.705rem;
border-top: 2px solid @border-color;
border-left: 1px solid @border-color-alt;
border-right: 1px solid @border-color-alt;
border-bottom: 2px solid @border-color;
box-shadow: 0px 2px 3px @color5;
margin: 0.476rem;
padding: 0.341rem;
/* background-color: rgba(49, 50, 68, 0.8); */
background-color: @noti-bg;
color: #EBDFED;
}
.overview-tasks-workspace {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
margin: 0.341rem;
/* background-color: #26233A; */
background-image: url('../../rofi/.current_wallpaper');
background-size: cover;
background-position: center;
border: 0.068rem solid alpha(@color4, 0.5);
}
.overview-tasks-workspace-number {
font-family: "Open Sans", "Noto Sans", sans-serif;
color: #CFC2D3;
}
.overview-tasks-window {
border-radius: 1.159rem;
-gtk-outline-radius: 1.159rem;
transition: 300ms cubic-bezier(0.1, 1, 0, 1);
background-color: alpha(@color3, .7);
/* background-color: @color_a3; */
/* background-color: rgba(46, 40, 50, 0.8); */
color: #EBDFED;
border: 0.068rem solid @color7;
}
.overview-tasks-window:hover,
.overview-tasks-window:focus {
background-color: alpha(@color9, 0.8);
}
.overview-tasks-window:active {
background-color: alpha(@color9, 0.8);
}
.overview-tasks-window-selected {
background-color: alpha(@color9, 0.8);
}
.overview-tasks-window-dragging {
opacity: 0.2;
}
.growingRadial {
transition: 300ms cubic-bezier(0.2, 0, 0, 1);
}
.fadingRadial {
transition: 50ms cubic-bezier(0.2, 0, 0, 1);
}
.sidebar-pinned {
margin: 0rem;
border-radius: 0rem;
border-bottom-right-radius: 1.705rem;
border: 0rem solid;
}
/*# sourceMappingURL=style.css.map */

View file

@ -1,21 +0,0 @@
const userConfigOptions = {
// For every option, see ~/.config/ags/modules/.configuration/user_options.js
// (vscode users ctrl+click this: file://./modules/.configuration/user_options.js)
// (vim users: `:vsp` to split window, move cursor to this path, press `gf`. `Ctrl-w` twice to switch between)
// options listed in this file will override the default ones in the above file
// Here's an example
'overview':{
'scale': 0.15,
'numOfRows': 2
},
'keybinds': {
'sidebar': {
'pin': "Ctrl+p",
'nextTab': "Ctrl+Page_Down",
'prevTab': "Ctrl+Page_Up",
},
},
}
export default userConfigOptions;

View file

@ -1,21 +0,0 @@
const { Gtk } = imports.gi;
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
const { exec, execAsync } = Utils;
Gtk.IconTheme.get_default().append_search_path(`${App.configDir}/assets/icons`);
// Screen size
export const SCREEN_WIDTH = Number(exec(`bash -c "hyprctl monitors -j | jq '.[0].width / .[0].scale'"`));
export const SCREEN_HEIGHT = Number(exec(`bash -c "hyprctl monitors -j | jq '.[0].height / .[0].scale'"`));
// Mode switching
export const currentShellMode = Variable('normal', {}) // normal, focus
globalThis['currentMode'] = currentShellMode;
globalThis['cycleMode'] = () => {
if (currentShellMode.value === 'normal') {
currentShellMode.value = 'focus';
} else {
currentShellMode.value = 'normal';
}
}

View file

@ -1,292 +0,0 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
# /* wallust template - colors-cava */
## Configuration file for CAVA.
# Remove the ; to change parameters.
[general]
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
; mode = normal
# Accepts only non-negative values.
; framerate = 60
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
# new as of 0.6.0 autosens of low values (dynamic range)
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0
; autosens = 1
; overshoot = 20
# Manual sensitivity in %. If autosens is enabled, this will only be the initial value.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100
# The number of bars (0-512). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
; bars = 0
; bar_width = 2
; bar_spacing = 1
# bar_height is only used for output in "noritake" format
; bar_height = 32
# For SDL width and space between bars is in pixels, defaults are:
; bar_width = 20
; bar_spacing = 5
# sdl_glsl have these default values, they are only used to calulate max number of bars.
; bar_width = 1
; bar_spacing = 0
# Lower and higher cutoff frequencies for lowest and highest bars
# the bandwidth of the visualizer.
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
# Cava will automatically increase the higher cutoff if a too low band is specified.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000
# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
; sleep_timer = 0
[input]
# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem'
# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with.
# On Mac it defaults to 'portaudio' or 'fifo'
# On windows this is automatic and no input settings are needed.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
#
# For pipewire 'source' will be the object name or object.serial of the device to capture from.
# Both input and output devices are supported.
#
# For alsa 'source' will be the capture device.
# For fifo 'source' will be the path to fifo-file.
# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
#
# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'.
# README.md contains further information on how to setup CAVA for sndio.
#
# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device.
# README.md contains further information on how to setup CAVA for OSS on FreeBSD.
#
# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'.
# README.md contains further information on how to setup CAVA for JACK.
#
method = pulse
source = auto
method = pipewire
source = auto
; method = alsa
; source = hw:Loopback,1
; method = fifo
; source = /tmp/mpd.fifo
; method = shmem
; source = /squeezelite-AA:BB:CC:DD:EE:FF
; method = portaudio
; source = auto
; method = sndio
; source = default
; method = oss
; source = /dev/dsp
; method = jack
; source = default
# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods:
# sample_rate: fifo, pipewire, sndio, oss
# sample_bits: fifo, pipewire, sndio, oss
# channels: sndio, oss, jack
# autoconnect: jack
# Other methods ignore these settings.
#
# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported
# by the chosen audio device, the device will use other supported values instead.
# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it
# will use 44100, 16 and 1.
#
; sample_rate = 44100
; sample_bits = 16
; channels = 2
; autoconnect = 2
[output]
# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl'
# or 'sdl_glsl'.
# 'noncurses' (default) uses a buffer and cursor movements to only print
# changes from frame to frame in the terminal. Uses less resources and is less
# prone to tearing (vsync issues) than 'ncurses'.
#
# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data
# stream of the bar heights that can be used to send to other applications.
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
#
# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display
# in graphic mode. It only support the 3000 series graphical VFDs for now.
#
# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or
# use one of the predefined ones.
; method = noncurses
# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'.
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
# which can make ncurses not look right.
; orientation = bottom
# Visual channels. Can be 'stereo' or 'mono'.
# 'stereo' mirrors both channels with low frequencies in center.
# 'mono' outputs left to right lowest to highest frequencies.
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
# set 'reverse' to 1 to display frequencies the other way around.
; channels = stereo
; mono_option = average
; reverse = 0
# Raw output target. A fifo will be created if target does not exist.
; raw_target = /dev/stdout
# Raw data format. Can be 'binary' or 'ascii'.
; data_format = binary
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
; bar_delimiter = 59
; frame_delimiter = 10
# sdl window size and position. -1,-1 is centered.
; sdl_width = 1000
; sdl_height = 500
; sdl_x = -1
; sdl_y= -1
; sdl_full_screen = 0
# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none'
# 'frequency' displays the lower cut off frequency of the bar above.
# Only supported on ncurses and noncurses output.
; xaxis = none
# enable alacritty synchronized updates. 1 = on, 0 = off
# removes flickering in alacritty terminal emulator.
# defaults to off since the behaviour in other terminal emulators is unknown
; alacritty_sync = 0
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
; vertex_shader = pass_through.vert
; fragment_shader = bar_spectrum.frag
; for glsl output mode, keep rendering even if no audio
; continuous_rendering = 0
# disable console blank (screen saver) in tty
# (Not supported on FreeBSD)
; disable_blanking = 0
# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off
; show_idle_bar_heads = 1
# show waveform instead of frequency spectrum, 1 = on, 0 = off
; waveform = 0
[color]
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
# default is to keep current terminal color
; background = default
; foreground = default
# SDL and sdl_glsl only support hex code colors, these are the default:
; background = '#111111'
; foreground = '#33ffff'
# these are default
# Gradient mode, only hex defined colors are supported,
# background must also be defined in hex or remain commented out. 1 = on, 0 = off.
# You can define as many as 8 different colors. They range from bottom to top of screen
; gradient = 0
; gradient_count = 8
; gradient_color_1 = '#59cc33'
; gradient_color_2 = '#80cc33'
; gradient_color_3 = '#a6cc33'
; gradient_color_4 = '#cccc33'
; gradient_color_5 = '#cca633'
; gradient_color_6 = '#cc8033'
; gradient_color_7 = '#cc5933'
; gradient_color_8 = '#cc3333'
# for wallust
gradient = 1
gradient_count = 8
gradient_color_1 = '#000004'
gradient_color_2 = '#523F41'
gradient_color_3 = '#49596E'
gradient_color_4 = '#905E56'
gradient_color_5 = '#DCD4CD'
gradient_color_6 = '#AE746D'
gradient_color_7 = '#C07D73'
gradient_color_8 = '#DCD4CD'
[smoothing]
# Percentage value for integral smoothing. Takes values from 0 - 100.
# Higher values means smoother, but less precise. 0 to disable.
# DEPRECATED as of 0.8.0, use noise_reduction instead
; integral = 77
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
; monstercat = 0
; waves = 0
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
# DEPRECATED as of 0.8.0, use noise_reduction instead
; gravity = 100
# In bar height, bars that would have been lower that this will not be drawn.
# DEPRECATED as of 0.8.0
; ignore = 0
# Noise reduction, int 0 - 100. default 77
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
# 100 will be very slow and smooth, 0 will be fast but noisy.
; noise_reduction = 77
[eq]
# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more than one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
; 1 = 1 # bass
; 2 = 1
; 3 = 1 # midtone
; 4 = 1
; 5 = 1 # treble

View file

@ -1,79 +0,0 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform int bar_width; // bar width (configurable), not used here
uniform int bar_spacing; // space bewteen bars (configurable)
uniform vec3 u_resolution; // window resolution
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
uniform vec3 bg_color; // background color
uniform vec3 fg_color; // foreground color
uniform int gradient_count;
uniform vec3 gradient_colors[8]; // gradient colors
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
{
//create color based on fraction of this color and next color
float yr = (y - y_min) / (y_max - y_min);
return col_1 * (1.0 - yr) + col_2 * yr;
}
void main()
{
// find which bar to use based on where we are on the x axis
float x = u_resolution.x * fragCoord.x;
int bar = int(bars_count * fragCoord.x);
//calculate a bar size
float bar_size = u_resolution.x / bars_count;
//the y coordinate and bar values are the same
float y = bars[bar];
// make sure there is a thin line at bottom
if (y * u_resolution.y < 1.0)
{
y = 1.0 / u_resolution.y;
}
//draw the bar up to current height
if (y > fragCoord.y)
{
//make some space between bars basen on settings
if (x > (bar + 1) * (bar_size) - bar_spacing)
{
fragColor = vec4(bg_color,1.0);
}
else
{
if (gradient_count == 0)
{
fragColor = vec4(fg_color,1.0);
}
else
{
//find which color in the configured gradient we are at
int color = int((gradient_count - 1) * fragCoord.y);
//find where on y this and next color is supposed to be
float y_min = color / (gradient_count - 1.0);
float y_max = (color + 1.0) / (gradient_count - 1.0);
//make color
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
}
}
}
else
{
fragColor = vec4(bg_color,1.0);
}
}

View file

@ -1,38 +0,0 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
float normalize_C(float x, float x_min, float x_max, float r_min, float r_max )
{
float xr;
xr = (r_max-r_min) * (x - x_min) / (x_max - x_min) + r_min;
return xr;
}
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
// create a normal along the y axis based on the bar height
float x = normalize_C(fragCoord.y, 1.0, 0.0, 0.0, bars[bar]);
// set color
fragColor.r=fg_color.x*x;
fragColor.g=fg_color.y*x;
fragColor.b=fg_color.z*x;
fragColor.a=1.0;
}

View file

@ -1,34 +0,0 @@
#version 330
in vec2 fragCoord;
out vec4 fragColor;
// bar values. defaults to left channels first (low to high), then right (high to low).
uniform float bars[512];
uniform int bars_count; // number of bars (left + right) (configurable)
uniform vec3 u_resolution; // window resolution, not used here
//colors, configurable in cava config file
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
uniform vec3 fg_color; // foreground color, not used here
void main()
{
// find which bar to use based on where we are on the x axis
int bar = int(bars_count * fragCoord.x);
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
float y = (bars[bar]) * bar_y;
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
bar_r = bar_r * bar_r * 2;
// set color
fragColor.r = fg_color.x * y * bar_r;
fragColor.g = fg_color.y * y * bar_r;
fragColor.b = fg_color.z * y * bar_r;
}

View file

@ -1,14 +0,0 @@
#version 330
// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
// Output data ; will be interpolated for each fragment.
out vec2 fragCoord;
void main()
{
gl_Position = vec4(vertexPosition_modelspace,1);
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
}

View file

@ -1,437 +0,0 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 400
# The maximum height of a single notification, excluding the frame.
height = 300
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = 6x5
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 0
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 80
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 0
# Defines color of the frame around the notification window.
frame_color = "#eceff4"
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
# font = JetBrainsMono Nerd Font 10
font = Cantarell 12
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Align icons left/right/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 40
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 70
# Paths to default icons.
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 3
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#2E3440"
foreground = "#CACFD2"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#new_icon = /path/to/icon
[urgency_normal]
background = "#2E3440"
foreground = "#CACFD2"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#new_icon = /path/to/icon
[urgency_critical]
background = "#E67E80"
foreground = "#CACFD2"
frame_color = "#E67E80"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#new_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View file

@ -1,3 +0,0 @@
https://git.sr.ht/~robertgzr/dotfiles/tree/master/item/.config/waybar/config.jsonc
https://github.com/mylinuxforwork/dotfiles/blob/main/share/dotfiles/.config/hypr/hyprland.conf

View file

@ -1,53 +0,0 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
# Set your defaults here
env = EDITOR,nvim #default editor
#environment-variables
env = CLUTTER_BACKEND,wayland
env = GDK_BACKEND,wayland,x11
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_SCALE_FACTOR,1
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
# xwayland apps scale fix (useful if you are use monitor scaling)
# see https://wiki.hyprland.org/Configuring/XWayland/
# toolkit-specific scale
env = GDK_SCALE,1
# firefox
env = MOZ_ENABLE_WAYLAND,1
# electron >28 apps (may help)
env = ELECTRON_OZONE_PLATFORM_HINT,auto
# NVIDIA
# This is from Hyprland Wiki. Below will be activated nvidia gpu detected
# See hyprland wiki https://wiki.hyprland.org/Nvidia/#environment-variables
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = NVD_BACKEND,direct
# additional ENV's for nvidia. Caution, activate with care
#env = GBM_BACKEND,nvidia-drm
#env = __NV_PRIME_RENDER_OFFLOAD,1
#env = __VK_LAYER_NV_optimus,NVIDIA_only
#env = WLR_DRM_NO_ATOMIC,1
# FOR VM and POSSIBLY NVIDIA
# LIBGL_ALWAYS_SOFTWARE software mesa rendering
#env = LIBGL_ALWAYS_SOFTWARE,1
#env = WLR_RENDERER_ALLOW_SOFTWARE,1
# nvidia firefox (for hardware acceleration on FF)?
# check this post https://github.com/elFarto/nvidia-vaapi-driver#configuration
env = MOZ_DISABLE_RDD_SANDBOX,1
env = EGL_PLATFORM,wayland

View file

@ -1,53 +0,0 @@
#!/bin/bash
# Rofi menu for Quick Edit/View of Settings (SUPER E)
# Define preferred text editor and terminal
edit=${EDITOR:-nvim}
tty=kitty
# Paths to configuration directories
configs="$HOME/.config/hypr/configs"
UserConfigs="$HOME/.config/hypr/UserConfigs"
# Function to display the menu options
menu() {
cat <<EOF
1. Edit Env-variables
2. Edit Window-Rules
3. Edit Startup_Apps
4. Edit User-Keybinds
5. Edit Monitors
6. Edit Laptop-Keybinds
7. Edit User-Settings
8. Edit Decorations & Animations
9. Edit Workspace-Rules
10. Edit Default-Settings
11. Edit Default-Keybinds
EOF
}
# Main function to handle menu selection
main() {
choice=$(menu | rofi -i -dmenu -config ~/.config/rofi/config-compact.rasi | cut -d. -f1)
# Map choices to corresponding files
case $choice in
1) file="$UserConfigs/ENVariables.conf" ;;
2) file="$UserConfigs/WindowRules.conf" ;;
3) file="$UserConfigs/Startup_Apps.conf" ;;
4) file="$UserConfigs/UserKeybinds.conf" ;;
5) file="$UserConfigs/Monitors.conf" ;;
6) file="$UserConfigs/Laptops.conf" ;;
7) file="$UserConfigs/UserSettings.conf" ;;
8) file="$UserConfigs/UserDecorAnimations.conf" ;;
9) file="$UserConfigs/WorkspaceRules.conf" ;;
10) file="$configs/Settings.conf" ;;
11) file="$configs/Keybinds.conf" ;;
*) return ;; # Do nothing for invalid choices
esac
# Open the selected file in the terminal with the text editor
$tty -e $edit "$file"
}
main

View file

@ -1,113 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# For Rofi Beats to play online Music or Locally save media files
# Directory local music folder
mDIR="$HOME/Music/"
# Directory for icons
iDIR="$HOME/.config/swaync/icons"
# Online Stations. Edit as required
declare -A online_music=(
["Radio - Lofi Girl 🎧🎶"]="https://play.streamafrica.net/lofiradio"
["Radio - Chillhop 🎧🎶"]="http://stream.zeno.fm/fyn8eh3h5f8uv"
["FM - Easy Rock 96.3 📻🎶"]="https://radio-stations-philippines.com/easy-rock"
["FM - Love Radio 90.7 📻🎶"]="https://radio-stations-philippines.com/love"
["FM - WRock - CEBU 96.3 📻🎶"]="https://onlineradio.ph/126-96-3-wrock.html"
["FM - Fresh Philippines 📻🎶"]="https://onlineradio.ph/553-fresh-fm.html"
["YT - Wish 107.5 YT Pinoy HipHop 📻🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJnmgMYwCKid4XIFqUKBVWEs&si=vahW_noh4UDJ5d37"
["YT - Top Youtube Music 2023 📹🎶"]="https://youtube.com/playlist?list=PLDIoUOhQQPlXr63I_vwF9GD8sAKh77dWU&si=y7qNeEVFNgA-XxKy"
["YT - Wish 107.5 YT Wishclusives 📹🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJn5B22H9HOWP3Kxxs-DkPSM&si=d_Ld2OKhGvpH48WO"
["YT - Relaxing Music 📹🎶"]="https://youtube.com/playlist?list=PLMIbmfP_9vb8BCxRoraJpoo4q1yMFg4CE"
["YT - Youtube Remix 📹🎶"]="https://youtube.com/playlist?list=PLeqTkIUlrZXlSNn3tcXAa-zbo95j0iN-0"
["YT - Korean Drama OST 📹🎶"]="https://youtube.com/playlist?list=PLUge_o9AIFp4HuA-A3e3ZqENh63LuRRlQ"
["YT - AfroBeatz 2024 📹🎶"]="https://www.youtube.com/watch?v=7uB-Eh9XVZQ"
["YT - Relaxing Piano Jazz Music 🎹🎶"]="https://youtu.be/85UEqRat6E4?si=jXQL1Yp2VP_G6NSn"
)
# Populate local_music array with files from music directory and subdirectories
populate_local_music() {
local_music=()
filenames=()
while IFS= read -r file; do
local_music+=("$file")
filenames+=("$(basename "$file")")
done < <(find "$mDIR" -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.wav" -o -iname "*.ogg" -o -iname "*.mp4" \))
}
# Function for displaying notifications
notification() {
notify-send -u normal -i "$iDIR/music.png" "Playing: $@"
}
# Main function for playing local music
play_local_music() {
populate_local_music
# Prompt the user to select a song
choice=$(printf "%s\n" "${filenames[@]}" | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Local Music")
if [ -z "$choice" ]; then
exit 1
fi
# Find the corresponding file path based on user's choice and set that to play the song then continue on the list
for (( i=0; i<"${#filenames[@]}"; ++i )); do
if [ "${filenames[$i]}" = "$choice" ]; then
notification "$choice"
# Play the selected local music file using mpv
mpv --playlist-start="$i" --loop-playlist --vid=no "${local_music[@]}"
break
fi
done
}
# Main function for shuffling local music
shuffle_local_music() {
notification "Shuffle local music"
# Play music in $mDIR on shuffle
mpv --shuffle --loop-playlist --vid=no "$mDIR"
}
# Main function for playing online music
play_online_music() {
choice=$(printf "%s\n" "${!online_music[@]}" | rofi -i -dmenu -config ~/.config/rofi/config-rofi-Beats.rasi -p "Online Music")
if [ -z "$choice" ]; then
exit 1
fi
link="${online_music[$choice]}"
notification "$choice"
# Play the selected online music using mpv
mpv --shuffle --vid=no "$link"
}
# Check if an online music process is running and send a notification, otherwise run the main function
pkill mpv && notify-send -u low -i "$iDIR/music.png" "Music stopped" || {
# Prompt the user to choose between local and online music
user_choice=$(printf "Play from Online Stations\nPlay from Music Folder\nShuffle Play from Music Folder" | rofi -dmenu -config ~/.config/rofi/config-rofi-Beats-menu.rasi -p "Select music source")
case "$user_choice" in
"Play from Music Folder")
play_local_music
;;
"Play from Online Stations")
play_online_music
;;
"Shuffle Play from Music Folder")
shuffle_local_music
;;
*)
echo "Invalid choice"
;;
esac
}

View file

@ -1,31 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */
# /* Calculator (using qalculate) and rofi */
# /* Submitted by: https://github.com/JosephArmas */
rofi_config="$HOME/.config/rofi/config-calc.rasi"
# Kill Rofi if already running before execution
if pgrep -x "rofi" >/dev/null; then
pkill rofi
exit 0
fi
# main function
while true; do
result=$(
rofi -i -dmenu \
-config "$rofi_config" \
-mesg "$result = $calc_result"
)
if [ $? -ne 0 ]; then
exit
fi
if [ -n "$result" ]; then
calc_result=$(qalc -t "$result")
echo "$calc_result" | wl-copy
fi
done

View file

@ -1,39 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# source https://wiki.archlinux.org/title/Hyprland#Using_a_script_to_change_wallpaper_every_X_minutes
# This script will randomly go through the files of a directory, setting it
# up as the wallpaper at regular intervals
#
# NOTE: this script uses bash (not POSIX shell) for the RANDOM variable
wallust_refresh=$HOME/.config/hypr/scripts/RefreshNoWaybar.sh
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
echo "Usage:
$0 <dir containing images>"
exit 1
fi
# Edit below to control the images transition
export SWWW_TRANSITION_FPS=60
export SWWW_TRANSITION_TYPE=simple
# This controls (in seconds) when to switch to the next image
INTERVAL=1800
while true; do
find "$1" \
| while read -r img; do
echo "$((RANDOM % 1000)):$img"
done \
| sort -n | cut -d':' -f2- \
| while read -r img; do
swww img -o $focused_monitor "$img"
$wallust_refresh
sleep $INTERVAL
done
done

View file

@ -1,101 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
# Wallpaper Effects using ImageMagick
# Inspiration from ML4W - Stephan Raabe https://gitlab.com/stephan-raabe/dotfiles
# Variables
current_wallpaper="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
wallpaper_output="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
# Directory for swaync
iDIR="$HOME/.config/swaync/images"
# swww transition config
FPS=60
TYPE="wipe"
DURATION=2
BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION"
# Define ImageMagick effects
declare -A effects=(
["No Effects"]="no-effects"
["Black & White"]="magick $current_wallpaper -colorspace gray -sigmoidal-contrast 10,40% $wallpaper_output"
["Blurred"]="magick $current_wallpaper -blur 0x10 $wallpaper_output"
["Charcoal"]="magick $current_wallpaper -charcoal 0x5 $wallpaper_output"
["Edge Detect"]="magick $current_wallpaper -edge 1 $wallpaper_output"
["Emboss"]="magick $current_wallpaper -emboss 0x5 $wallpaper_output"
["Negate"]="magick $current_wallpaper -negate $wallpaper_output"
["Oil Paint"]="magick $current_wallpaper -paint 4 $wallpaper_output"
["Posterize"]="magick $current_wallpaper -posterize 4 $wallpaper_output"
["Polaroid"]="magick $current_wallpaper -polaroid 0 $wallpaper_output"
["Sepia Tone"]="magick $current_wallpaper -sepia-tone 65% $wallpaper_output"
["Solarize"]="magick $current_wallpaper -solarize 80% $wallpaper_output"
["Sharpen"]="magick $current_wallpaper -sharpen 0x5 $wallpaper_output"
["Vignette"]="magick $current_wallpaper -vignette 0x5 $wallpaper_output"
["Zoomed"]="magick $current_wallpaper -gravity Center -extent 1:1 $wallpaper_output"
)
# Function to apply no effects
no-effects() {
swww img -o "$focused_monitor" "$current_wallpaper" $SWWW_PARAMS &
# Wait for swww command to complete
wait $!
# Run other commands after swww
wallust run "$current_wallpaper" -s &
# Wait to complete
wait $!
# Refresh rofi, waybar, wallust palettes
"${SCRIPTSDIR}/Refresh.sh"
notify-send -u low -i "$iDIR/bell.png" "No wallpaper effects"
# copying wallpaper for rofi menu
cp "$current_wallpaper" "$wallpaper_output"
}
# Function to run rofi menu
main() {
# Populate rofi menu options
options=("No Effects")
for effect in "${!effects[@]}"; do
[[ "$effect" != "No Effects" ]] && options+=("$effect")
done
# Show rofi menu and handle user choice
choice=$(printf "%s\n" "${options[@]}" | LC_COLLATE=C sort | rofi -dmenu -p "Choose effect" -i -config ~/.config/rofi/config-wallpaper-effect.rasi)
# Process user choice
if [[ -n "$choice" ]]; then
if [[ "$choice" == "No Effects" ]]; then
no-effects
elif [[ "${effects[$choice]+exists}" ]]; then
# Apply selected effect
notify-send -u normal -i "$iDIR/bell.png" "Applying $choice effects"
eval "${effects[$choice]}"
# Wait for effects to be applied
sleep 1
# Execute swww command after image conversion
swww img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS &
# Wait for swww command to complete
wait $!
# Wait for other commands to finish
wallust run "$wallpaper_output" -s &
# Wait for other commands to finish
wait $!
# Refresh rofi, waybar, wallust palettes
"${SCRIPTSDIR}/Refresh.sh"
notify-send -u low -i "$iDIR/bell.png" "$choice effects applied"
else
echo "Effect '$choice' not recognized."
fi
fi
}
# Check if rofi is already running and kill it
if pidof rofi > /dev/null; then
pkill rofi
exit 0
fi
main

View file

@ -1,28 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Script for Random Wallpaper ( CTRL ALT W)
wallDIR="$HOME/Pictures/wallpapers"
scriptsDir="$HOME/.config/hypr/scripts"
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
PICS=($(find ${wallDIR} -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" \)))
RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]}
# Transition config
FPS=60
TYPE="random"
DURATION=1
BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
swww query || swww-daemon --format xrgb && swww img -o $focused_monitor ${RANDOMPICS} $SWWW_PARAMS
${scriptsDir}/WallustSwww.sh
sleep 1
${scriptsDir}/Refresh.sh

View file

@ -1,110 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */
# This script for selecting wallpapers (SUPER W)
# WALLPAPERS PATH
wallDIR="$HOME/Pictures/wallpapers"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
# variables
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
# swww transition config
FPS=60
TYPE="any"
DURATION=2
BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION"
# Check if swaybg is running
if pidof swaybg > /dev/null; then
pkill swaybg
fi
# Retrieve image files using null delimiter to handle spaces in filenames
mapfile -d '' PICS < <(find "${wallDIR}" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" \) -print0)
RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}"
RANDOM_PIC_NAME=". random"
# Rofi command
rofi_command="rofi -i -show -dmenu -config ~/.config/rofi/config-wallpaper.rasi"
# Sorting Wallpapers
menu() {
# Sort the PICS array
IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}"))
# Place ". random" at the beginning with the random picture as an icon
printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC"
for pic_path in "${sorted_options[@]}"; do
pic_name=$(basename "$pic_path")
# Displaying .gif to indicate animated images
if [[ ! "$pic_name" =~ \.gif$ ]]; then
printf "%s\x00icon\x1f%s\n" "$(echo "$pic_name" | cut -d. -f1)" "$pic_path"
else
printf "%s\n" "$pic_name"
fi
done
}
# initiate swww if not running
swww query || swww-daemon --format xrgb
# Choice of wallpapers
main() {
choice=$(menu | $rofi_command)
# Trim any potential whitespace or hidden characters
choice=$(echo "$choice" | xargs)
RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs)
# No choice case
if [[ -z "$choice" ]]; then
echo "No choice selected. Exiting."
exit 0
fi
# Random choice case
if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then
swww img -o "$focused_monitor" "$RANDOM_PIC" $SWWW_PARAMS;
sleep 0.5
"$SCRIPTSDIR/WallustSwww.sh"
sleep 0.2
"$SCRIPTSDIR/Refresh.sh"
exit 0
fi
# Find the index of the selected file
pic_index=-1
for i in "${!PICS[@]}"; do
filename=$(basename "${PICS[$i]}")
if [[ "$filename" == "$choice"* ]]; then
pic_index=$i
break
fi
done
if [[ $pic_index -ne -1 ]]; then
swww img -o "$focused_monitor" "${PICS[$pic_index]}" $SWWW_PARAMS
else
echo "Image not found."
exit 1
fi
}
# Check if rofi is already running
if pidof rofi > /dev/null; then
pkill rofi
sleep 1 # Allow some time for rofi to close
fi
main
sleep 0.5
"$SCRIPTSDIR/WallustSwww.sh"
sleep 0.2
"$SCRIPTSDIR/Refresh.sh"

View file

@ -1,136 +0,0 @@
#!/usr/bin/env python3
import subprocess
from pyquery import PyQuery # install using `pip install pyquery`
import json
import os
# original code https://gist.github.com/Surendrajat/ff3876fd2166dd86fb71180f4e9342d7
# weather icons
weather_icons = {
"sunnyDay": "󰖙",
"clearNight": "󰖔",
"cloudyFoggyDay": "",
"cloudyFoggyNight": "",
"rainyDay": "",
"rainyNight": "",
"snowyIcyDay": "",
"snowyIcyNight": "",
"severe": "",
"default": "",
}
# get location_id
# to get your own location_id, go to https://weather.com & search your location.
# once you choose your location, you can see the location_id in the URL(64 chars long hex string)
# like this: https://weather.com/en-PH/weather/today/l/bca47d1099e762a012b9a139c36f30a0b1e647f69c0c4ac28b537e7ae9c1c200
location_id = "356027e85e89a4694c0b4e01b6db1d8f3349b6882964fe3748ef4a0d8abbcf02" # TODO
# NOTE to change to deg F, change the URL to your preffered location after weather.com
# Default is English-Philippines with Busan, South Korea as location_id
# get html page
url = "https://weather.com/en-PH/weather/today/l/" + location_id
html_data = PyQuery(url=url)
# current temperature
temp = html_data("span[data-testid='TemperatureValue']").eq(0).text()
# print(temp)
# current status phrase
status = html_data("div[data-testid='wxPhrase']").text()
status = f"{status[:16]}.." if len(status) > 17 else status
# print(status)
# status code
status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2]
# print(status_code)
# status icon
icon = (
weather_icons[status_code]
if status_code in weather_icons
else weather_icons["default"]
)
# print(icon)
# temperature feels like
temp_feel = html_data(
"div[data-testid='FeelsLikeSection'] > span > span[data-testid='TemperatureValue']"
).text()
temp_feel_text = f"Feels like {temp_feel}c"
# print(temp_feel_text)
# min-max temperature
temp_min = (
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
.eq(1)
.text()
)
temp_max = (
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
.eq(0)
.text()
)
temp_min_max = f"{temp_min}\t\t{temp_max}"
# print(temp_min_max)
# wind speed
wind_speed = html_data("span[data-testid='Wind']").text().split("\n")[1]
wind_text = f"{wind_speed}"
# print(wind_text)
# humidity
humidity = html_data("span[data-testid='PercentageValue']").text()
humidity_text = f"{humidity}"
# print(humidity_text)
# visibility
visbility = html_data("span[data-testid='VisibilityValue']").text()
visbility_text = f"{visbility}"
# print(visbility_text)
# air quality index
air_quality_index = html_data("text[data-testid='DonutChartValue']").text()
# print(air_quality_index)
# hourly rain prediction
prediction = html_data("section[aria-label='Hourly Forecast']")(
"div[data-testid='SegmentPrecipPercentage'] > span"
).text()
prediction = prediction.replace("Chance of Rain", "")
prediction = f"\n\n (hourly) {prediction}" if len(prediction) > 0 else prediction
# print(prediction)
# tooltip text
tooltip_text = str.format(
"\t\t{}\t\t\n{}\n{}\n{}\n\n{}\n{}\n{}{}",
f'<span size="xx-large">{temp}</span>',
f"<big> {icon}</big>",
f"<b>{status}</b>",
f"<small>{temp_feel_text}</small>",
f"<b>{temp_min_max}</b>",
f"{wind_text}\t{humidity_text}",
f"{visbility_text}\tAQI {air_quality_index}",
f"<i> {prediction}</i>",
)
# print waybar module data
out_data = {
"text": f"{icon} {temp}",
"alt": status,
"tooltip": tooltip_text,
"class": status_code,
}
print(json.dumps(out_data))
simple_weather =f"{icon} {status}\n" + \
f"{temp} ({temp_feel_text})\n" + \
f"{wind_text} \n" + \
f"{humidity_text} \n" + \
f"{visbility_text} AQI{air_quality_index}\n"
try:
with open(os.path.expanduser("~/.cache/.weather_cache"), "w") as file:
file.write(simple_weather)
except:
pass

View file

@ -1,84 +0,0 @@
#!/bin/bash
city=Ottawa
cachedir=~/.cache/rbn
cachefile=${0##*/}-$1
if [ ! -d $cachedir ]; then
mkdir -p $cachedir
fi
if [ ! -f $cachedir/$cachefile ]; then
touch $cachedir/$cachefile
fi
# Save current IFS
SAVEIFS=$IFS
# Change IFS to new line.
IFS=$'\n'
cacheage=$(($(date +%s) - $(stat -c '%Y' "$cachedir/$cachefile")))
if [ $cacheage -gt 1740 ] || [ ! -s $cachedir/$cachefile ]; then
data=($(curl -s https://en.wttr.in/"$city"$1\?0qnT 2>&1))
echo ${data[0]} | cut -f1 -d, > $cachedir/$cachefile
echo ${data[1]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
echo ${data[2]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile
fi
weather=($(cat $cachedir/$cachefile))
# Restore IFSClear
IFS=$SAVEIFS
temperature=$(echo ${weather[2]} | sed -E 's/([[:digit:]]+)\.\./\1 to /g')
#echo ${weather[1]##*,}
# https://fontawesome.com/icons?s=solid&c=weather
case $(echo ${weather[1]##*,} | tr '[:upper:]' '[:lower:]') in
"clear" | "sunny")
condition=""
;;
"partly cloudy")
condition="󰖕"
;;
"cloudy")
condition=""
;;
"overcast")
condition=""
;;
"fog" | "freezing fog")
condition=""
;;
"patchy rain possible" | "patchy light drizzle" | "light drizzle" | "patchy light rain" | "light rain" | "light rain shower" | "mist" | "rain")
condition="󰼳"
;;
"moderate rain at times" | "moderate rain" | "heavy rain at times" | "heavy rain" | "moderate or heavy rain shower" | "torrential rain shower" | "rain shower")
condition=""
;;
"patchy snow possible" | "patchy sleet possible" | "patchy freezing drizzle possible" | "freezing drizzle" | "heavy freezing drizzle" | "light freezing rain" | "moderate or heavy freezing rain" | "light sleet" | "ice pellets" | "light sleet showers" | "moderate or heavy sleet showers")
condition="󰼴"
;;
"blowing snow" | "moderate or heavy sleet" | "patchy light snow" | "light snow" | "light snow showers")
condition="󰙿"
;;
"blizzard" | "patchy moderate snow" | "moderate snow" | "patchy heavy snow" | "heavy snow" | "moderate or heavy snow with thunder" | "moderate or heavy snow showers")
condition=""
;;
"thundery outbreaks possible" | "patchy light rain with thunder" | "moderate or heavy rain with thunder" | "patchy light snow with thunder")
condition=""
;;
*)
condition=""
echo -e "{\"text\":\""$condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
;;
esac
#echo $temp $condition
echo -e "{\"text\":\""$temperature $condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}"
cached_weather="$temperature \n$condition ${weather[1]}"
echo -e $cached_weather > ~/.cache/.weather_cache

View file

@ -1,38 +0,0 @@
#!/bin/bash
themes_dir="$HOME/.oh-my-zsh/themes"
file_extension=".zsh-theme"
themes_array=($(find "$themes_dir" -type f -name "*$file_extension" -exec basename {} \; | sed -e "s/$file_extension//"))
rofi_command="rofi -i -dmenu -config ~/.config/rofi/config-zsh-theme.rasi"
menu() {
for theme in "${themes_array[@]}"; do
echo "$theme"
done
}
main() {
choice=$(menu | ${rofi_command})
# if nothing selected, script wont change anything
if [ -z "$choice" ]; then
exit 0
fi
zsh_path="$HOME/.zshrc"
var_name="ZSH_THEME"
for i in "${themes_array[@]}"; do
if [[ "$i" == "$choice"* ]]; then
if [ -f "$zsh_path" ]; then
sed -i "s/^$var_name=.*/$var_name=\"$i\"/" "$zsh_path"
else
echo "File not found"
fi
break
fi
done
}
main

View file

@ -1,43 +0,0 @@
#
# _ _ _
# | |__ _ _ _ __ _ __| | __ _ _ __ __| |
# | '_ \| | | | '_ \| '__| |/ _` | '_ \ / _` |
# | | | | |_| | |_) | | | | (_| | | | | (_| |
# |_| |_|\__, | .__/|_| |_|\__,_|_| |_|\__,_|
# |___/|_|
#
# Monitor
source = ~/.config/hypr/conf/monitor.conf
# Cursor
source = ~/.config/hypr/conf/cursor.conf
# Environment
source = ~/.config/hypr/conf/environment.conf
# Keyboard
source = ~/.config/hypr/conf/keyboard.conf
# pywal color file
source = ~/.cache/wal/color-hyprland.conf
# Autostart
source = ~/.config/hypr/conf/autostart.conf
# Load config fifles
source = ~/.config/hypr/conf/window.conf
source = ~/.config/hypr/conf/decoration.conf
source = ~/.config/hypr/conf/layout.conf
source = ~/.config/hypr/conf/misc.conf
source = ~/.config/hypr/conf/keybinding.conf
source = ~/.config/hypr/conf/windowrule.conf
# Animation
source = ~/.config/hypr/conf/animation.conf
# Custom
source = ~/.config/hypr/conf/custom.conf
# Environment for xdg-desktop-portal-hyprland
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP

View file

@ -1,24 +0,0 @@
# -----------------------------------------------------
# Autostart
# -----------------------------------------------------
# Setup XDG for screen sharing
exec-once = ~/.config/hypr/scripts/xdg.sh
# Start Polkit
exec-once = systemctl --user start plasma-polkit-agent
exec-once = dunst
exec-once = hypridle
exec-once = wl-paste --watch cliphist store
# Initialize wallpaper
exec-once = hyprpaper
# Launch Waybar
exec-once = ~/.config/waybar/launch.sh
# Autostart cleanup
exec-once = ~/.config/hypr/scripts/cleanup.sh

View file

@ -1,6 +0,0 @@
exec-once = hyprctl setcursor Bibata-Modern-Ice 24
# No Hardware Cursor
cursor {
no_hardware_cursors = true
}

View file

@ -1,25 +0,0 @@
# -----------------------------------------------------
# General window decoration
# name: "Default"
# -----------------------------------------------------
decoration {
rounding = 10
blur {
enabled = true
size = 6
passes = 2
new_optimizations = on
ignore_opacity = true
xray = true
# blurls = waybar
}
active_opacity = 1.0
inactive_opacity = 0.8
fullscreen_opacity = 1.0
drop_shadow = true
shadow_range = 30
shadow_render_power = 3
col.shadow = 0x66000000
}

View file

@ -1,17 +0,0 @@
# -----------------------------------------------------
# Environment Variables
# name: "Nvidia"
# -----------------------------------------------------
# Default Settings in ml4w.conf
# NVIDIA https://wiki.hyprland.org/Nvidia/
env = LIBVA_DRIVER_NAME,nvidia
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
# env = __GL_VRR_ALLOWED,1
# env = WLR_DRM_NO_ATOMIC,1
cursor {
no_hardware_cursors = true
}

View file

@ -1,121 +0,0 @@
# -----------------------------------------------------
# Key bindings
# name: "Default"
# -----------------------------------------------------
# SUPER KEY
$mainMod = SUPER
$HYPRSCRIPTS = ~/.config/hypr/scripts
$SCRIPTS = ~/.config/hypr/scripts
$terminal = kitty
# Applications
bind = $mainMod, RETURN, exec, $terminal # Open the terminal
bind = $mainMod, B, exec, librewolf # Open the browser
bind = $mainMod, E, exec, dolphin # Open the filemanager
bind = $mainMod CTRL, E, exec, smile # Open the emoji picker
bind = $mainMod CTRL, C, exec, kcal # Open the calculator
# Windows
bind = $mainMod, Q, killactive # Kill active window
bind = $mainMod, F, fullscreen # Set active window to fullscreen
bind = $mainMod, T, togglefloating # Toggle active windows into floating mode
bind = $mainMod SHIFT, T, exec, $HYPRSCRIPTS/toggleallfloat.sh # Toggle all windows into floating mode
bind = $mainMod, J, togglesplit # Toggle split
bind = $mainMod, left, movefocus, l # Move focus left
bind = $mainMod, right, movefocus, r # Move focus right
bind = $mainMod, up, movefocus, u # Move focus up
bind = $mainMod, down, movefocus, d # Move focus down
bindm = $mainMod, mouse:272, movewindow # Move window with the mouse
bindm = $mainMod, mouse:273, resizewindow # Resize window with the mouse
bind = $mainMod SHIFT, right, resizeactive, 100 0 # Increase window width with keyboard
bind = $mainMod SHIFT, left, resizeactive, -100 0 # Reduce window width with keyboard
bind = $mainMod SHIFT, down, resizeactive, 0 100 # Increase window height with keyboard
bind = $mainMod SHIFT, up, resizeactive, 0 -100 # Reduce window height with keyboard
bind = $mainMod, G, togglegroup # Toggle window group
bind = $mainMod, K, swapsplit # Swapsplit
# Actions
bind = $mainMod SHIFT, A, exec, $HYPRSCRIPTS/toggle-animations.sh # Toggle animations
bind = $mainMod, PRINT, exec, $HYPRSCRIPTS/screenshot.sh # Take a screenshot
bind = $mainMod SHIFT, S, exec, $HYPRSCRIPTS/screenshot.sh # Take a screenshot
bind = $mainMod CTRL, Q, exec, wlogout # Start wlogout
bind = $mainMod SHIFT, W, exec, waypaper --random # Change the wallpaper
bind = $mainMod CTRL, W, exec, waypaper # Open wallpaper selector
bind = $mainMod ALT, W, exec, $HYPRSCRIPTS/wallpaper-automation.sh # Start random wallpaper script
bind = $mainMod CTRL, RETURN, exec, rofi -show drun -replace -i # Open application launcher
bind = $mainMod CTRL, K, exec, $HYPRSCRIPTS/keybindings.sh # Show keybindings
bind = $mainMod SHIFT, B, exec, ~/.config/waybar/launch.sh # Reload waybar
bind = $mainMod CTRL, B, exec, ~/.config/waybar/toggle.sh # Toggle waybar
bind = $mainMod SHIFT, R, exec, $HYPRSCRIPTS/loadconfig.sh # Reload hyprland config
bind = $mainMod, V, exec, $SCRIPTS/cliphist.sh # Open clipboard manager
bind = $mainMod CTRL, T, exec, ~/.config/waybar/themeswitcher.sh # Open waybar theme switcher
bind = $mainMod CTRL, S, exec, ~/.config/ml4w/apps/ML4W_Dotfiles_Settings-x86_64.AppImage # Open ML4W Dotfiles Settings app
bind = $mainMod SHIFT, H, exec, $HYPRSCRIPTS/hyprshade.sh # Toggle screenshader
bind = $mainMod ALT, G, exec, $HYPRSCRIPTS/gamemode.sh # Toggle game mode
bind = $mainMod, Z, exec, missioncenter # Open Mission Center
# Workspaces
bind = $mainMod, 1, workspace, 1 # Open workspace 1
bind = $mainMod, 2, workspace, 2 # Open workspace 2
bind = $mainMod, 3, workspace, 3 # Open workspace 3
bind = $mainMod, 4, workspace, 4 # Open workspace 4
bind = $mainMod, 5, workspace, 5 # Open workspace 5
bind = $mainMod, 6, workspace, 6 # Open workspace 6
bind = $mainMod, 7, workspace, 7 # Open workspace 7
bind = $mainMod, 8, workspace, 8 # Open workspace 8
bind = $mainMod, 9, workspace, 9 # Open workspace 9
bind = $mainMod, 0, workspace, 10 # Open workspace 10
bind = $mainMod SHIFT, 1, movetoworkspace, 1 # Move active window to workspace 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2 # Move active window to workspace 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3 # Move active window to workspace 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4 # Move active window to workspace 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5 # Move active window to workspace 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6 # Move active window to workspace 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7 # Move active window to workspace 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8 # Move active window to workspace 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9 # Move active window to workspace 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Move active window to workspace 10
bind = $mainMod, Tab, workspace, m+1 # Open next workspace
bind = $mainMod SHIFT, Tab, workspace, m-1 # Open previous workspace
bind = $mainMod CTRL, 1, exec, $HYPRSCRIPTS/moveTo.sh 1 # Move all windows to workspace 1
bind = $mainMod CTRL, 2, exec, $HYPRSCRIPTS/moveTo.sh 2 # Move all windows to workspace 2
bind = $mainMod CTRL, 3, exec, $HYPRSCRIPTS/moveTo.sh 3 # Move all windows to workspace 3
bind = $mainMod CTRL, 4, exec, $HYPRSCRIPTS/moveTo.sh 4 # Move all windows to workspace 4
bind = $mainMod CTRL, 5, exec, $HYPRSCRIPTS/moveTo.sh 5 # Move all windows to workspace 5
bind = $mainMod CTRL, 6, exec, $HYPRSCRIPTS/moveTo.sh 6 # Move all windows to workspace 6
bind = $mainMod CTRL, 7, exec, $HYPRSCRIPTS/moveTo.sh 7 # Move all windows to workspace 7
bind = $mainMod CTRL, 8, exec, $HYPRSCRIPTS/moveTo.sh 8 # Move all windows to workspace 8
bind = $mainMod CTRL, 9, exec, $HYPRSCRIPTS/moveTo.sh 9 # Move all windows to workspace 9
bind = $mainMod CTRL, 0, exec, $HYPRSCRIPTS/moveTo.sh 10 # Move all windows to workspace 10
bind = $mainMod, mouse_down, workspace, e+1 # Open next workspace
bind = $mainMod, mouse_up, workspace, e-1 # Open previous workspace
bind = $mainMod CTRL, down, workspace, empty # Open the next empty workspace
# Passthrough SUPER KEY to Virtual Machine
bind = $mainMod, P, submap, passthru # Passthrough SUPER key to virtual machine
submap = passthru
bind = SUPER, Escape, submap, reset # Get SUPER key back from virtual machine
submap = reset
# Fn keys
bind = , XF86MonBrightnessUp, exec, brightnessctl -q s +10% # Increase brightness by 10%
bind = , XF86MonBrightnessDown, exec, brightnessctl -q s 10%- # Reduce brightness by 10%
bind = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% # Increase volume by 5%
bind = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% # Reduce volume by 5%
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle # Toggle mute
bind = , XF86AudioPlay, exec, playerctl play-pause # Audio play pause
bind = , XF86AudioPause, exec, playerctl pause # Audio pause
bind = , XF86AudioNext, exec, playerctl next # Audio next
bind = , XF86AudioPrev, exec, playerctl previous # Audio previous
bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle # Toggle microphone
bind = , XF86Calculator, exec, ~/.config/ml4w/settings/calculator.sh # Open calculator
bind = , XF86Lock, exec, hyprlock # Open screenlock
bind = , XF86Tools, exec, alacritty --class dotfiles-floating -e ~/.config/ml4w/apps/ML4W_Dotfiles_Settings-x86_64.AppImage # Open ML4W Dotfiles Settings app
bind = , code:238, exec, brightnessctl -d smc::kbd_backlight s +10
bind = , code:237, exec, brightnessctl -d smc::kbd_backlight s 10-

View file

@ -1,28 +0,0 @@
# -----------------------------------------------------
# Keyboard Layout
# https://wiki.hyprland.org/Configuring/Variables/#input
# -----------------------------------------------------
input {
kb_layout = us,ca
kb_variant =
kb_model =
kb_options = grp:win_space_toggle
kb_rules =
repeat_rate = 50 #
repeat_delay = 300 #
numlock_by_default = true
follow_mouse = true
mouse_refocus = false
touchpad {
natural_scroll = false
disable_while_typing = true
clickfinger_behavior = false
middle_button_emulation = true
tap-to-click = true
drag_lock = false
scroll_factor = 1.0 # Touchpad scroll factor
}
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
float_switch_override_focus = false
}

View file

@ -1,23 +0,0 @@
# -----------------------------------------------------
# Layouts
# -----------------------------------------------------
dwindle {
pseudotile = true
preserve_split = true
}
master {
# Commented out due to compatibility reasons
# new_status = master
}
gestures {
workspace_swipe = false
}
binds {
workspace_back_and_forth = true
allow_workspace_cycles = true
pass_mouse_when_bound = false
}

View file

@ -1,9 +0,0 @@
# -----------------------------------------------------
# Misc settings
# -----------------------------------------------------
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
initial_workspace_tracking = 1
}

View file

@ -1,6 +0,0 @@
# -----------------------------------------------------
# Monitor Setup
# name: "3440x1440"
# -----------------------------------------------------
monitor=,3440x1440,auto,1

View file

@ -1,14 +0,0 @@
# -----------------------------------------------------
# General window layout and colors
# name: "Default"
# -----------------------------------------------------
general {
gaps_in = 10
gaps_out = 14
border_size = 3
col.active_border = $color11
col.inactive_border = rgba(ffffffff)
layout = dwindle
resize_on_border = true
}

View file

@ -1,47 +0,0 @@
# _ _ _ _
# | |__ _ _ _ __ _ __(_) __| | | ___
# | '_ \| | | | '_ \| '__| |/ _` | |/ _ \
# | | | | |_| | |_) | | | | (_| | | __/
# |_| |_|\__, | .__/|_| |_|\__,_|_|\___|
# |___/|_|
#
# Version 2.8.3
# DO NOT REMOVE THE REPLACEMENT COMMENTS
# REQUIRED BY THE ML4W SETTINGS APP
# https://wiki.hyprland.org/Hypr-Ecosystem/hypridle/
# general {
# ignore_dbus_inhibit = false
# }
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
before_sleep_cmd = loginctl lock-session # lock before suspend.
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
}
# Screenlock
listener {
# HYPRLOCK TIMEOUT
timeout = 600
# HYPRLOCK ONTIMEOUT
on-timeout = loginctl lock-session
}
# dpms
listener {
# DPMS TIMEOUT
timeout = 660
# DPMS ONTIMEOUT
on-timeout = hyprctl dispatch dpms off
# DPMS ONRESUME
on-resume = hyprctl dispatch dpms on
}
## Suspend
#listener {
# # SUSPEND TIMEOUT
# timeout = 1800
# #SUSPEND ONTIMEOUT
# on-timeout = systemctl suspend
#}

View file

@ -1,346 +0,0 @@
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/
# THEME
#source = ~/.config/hypr/mocha.conf
source = $HOME/.config/hypr/wallust/wallust-hyprland.conf #
source = $HOME/.config/hypr/keybinds.conf
source = $HOME/.config/hypr/UserConfigs/ENVariables.conf
# MONITORS
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,auto
monitor=DP-3,preferred,auto,1.6
# MY PROGRAMS
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$scriptsDir = $HOME/.config/hypr/scripts
$UserScripts = $HOME/.config/hypr/UserScripts
$terminal = kitty
$fileManager = dolphin
$menu = wofi --show drun
$wallDIR = $HOME/Pictures/wallpapers
$lock = $scriptsDir/LockScreen.sh
$SwwwRandom = $UserScripts/WallpaperAutoChange.sh
# AUTOSTART
exec-once = swww-daemon --format xrgb
#exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes #
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP #
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP #
##exec-once = hyprpaper
exec-once = hypridle
exec-once = ~/.config/hypr/scripts/waybar.sh
exec-once = nm-applet --indicator & #
exec-once = swaync & #
exec-once = blueman-applet & #
exec-once = pypr & #
##exec-once = systemctl --user start plasma-polkit-agent
exec-once = $scriptsDir/Polkit.sh
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
##exec-once = mako
# exec-once = dunst -conf ~/.config/dunst/dunstrc
# ENVIRONMENT VARIABLES
env = XDG_SESSION_TYPE,wayland
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
# LOOK AND FEEL
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 10
border_size = 2
col.active_border = 0xffcba6f7
col.inactive_border = 0xff313244
no_border_on_floating = true
resize_on_border = true
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 10
active_opacity = 1.0
inactive_opacity = 0.9
fullscreen_opacity = 1.0
dim_inactive = true
dim_strength = 0.1
dim_special = 0.8
drop_shadow = true
shadow_range = 6
shadow_render_power = 1
# shadow_ignore_window = true
# shadow_range = 4
# shadow_offset = 2 2
# shadow_render_power = 2
col.shadow = 0x66000000
col.shadow_inactive = 0x50000000
blur {
enabled = true
size = 6
passes = 2
new_optimizations = true
ignore_opacity = true #
special = true #
#vibrancy = 0.1696
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
# bezier = myBezier, 0.05, 0.9, 0.1, 1.05
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1.1, 0.1, 1.1
bezier = winOut, 0.3, -0.3, 0, 1
bezier = liner, 1, 1, 1, 1
bezier = overshot, 0.05, 0.9, 0.1, 1.05
bezier = smoothOut, 0.5, 0, 0.99, 0.99
bezier = smoothIn, 0.5, -0.5, 0.68, 1.5
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 5, winIn, slide
animation = windowsOut, 1, 3, smoothOut, slide
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors
animation = fade, 1, 3, smoothOut
animation = workspaces, 1, 5, overshot
# animation = windows, 1, 7, myBezier
# animation = windowsOut, 1, 7, default, popin 80%
# animation = border, 1, 10, default
# animation = borderangle, 1, 8, default
# animation = fade, 1, 7, default
# animation = workspaces, 1, 6, default
}
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
new_on_top = true
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
disable_splash_rendering = true
vfr = true
#vrr = 0
mouse_move_enables_dpms = true
enable_swallow = true
swallow_regex = ^(kitty)$
focus_on_activate = false
#no_direct_scanout = true #for fullscreen games - deprecated
initial_workspace_tracking = 0
middle_click_paste = false
}
# INPUT
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us,ca
kb_variant =
kb_model =
kb_options = grp:win_space_toggle
kb_rules =
repeat_rate = 50 #
repeat_delay = 300 #
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
numlock_by_default = true
left_handed = false
follow_mouse = true
float_switch_override_focus = false
touchpad {
natural_scroll = false
disable_while_typing = true
clickfinger_behavior = false
middle_button_emulation = true
tap-to-click = true
drag_lock = false
}
# added
touchdevice {
enabled = true
}
tablet {
transform = 0
left_handed = 0
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = true
workspace_swipe_fingers = 3
workspace_swipe_distance = 500
workspace_swipe_invert = true
workspace_swipe_min_speed_to_force = 30
workspace_swipe_cancel_ratio = 0.5
workspace_swipe_create_new = true
workspace_swipe_forever = true
#workspace_swipe_use_r = true #uncomment if wanted a forever create a new workspace with swipe right
}
# added
group {
col.border_active = $color15
groupbar {
col.active = $color0
}
}
binds {
workspace_back_and_forth = true
allow_workspace_cycles = true
pass_mouse_when_bound = false
}
#Could help when scaling and not pixelating
xwayland {
force_zero_scaling = true
}
# render section for Hyprland >= v0.42.0
render {
explicit_sync = 2
explicit_sync_kms = 2
direct_scanout = false
}
cursor {
no_hardware_cursors = false
enable_hyprcursor = true
warp_on_change_workspace = true
no_warps = true
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
#device {
# name = epic-mouse-v1
# sensitivity = -0.5
#}
# KEYBINDINGS
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
### # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
### bind = $mainMod, RETURN, exec, $terminal
### bind = $mainMod, C, killactive,
### bind = $mainMod, M, exit,
### bind = $mainMod, E, exec, $fileManager
### bind = $mainMod, V, togglefloating,
### bind = $mainMod, R, exec, $menu
### bind = $mainMod, P, pseudo, # dwindle
### bind = $mainMod, J, togglesplit, # dwindle
### bind = $mainMod, L, exec, hyprlock
###
### # Move focus with mainMod + arrow keys
### bind = $mainMod, left, movefocus, l
### bind = $mainMod, right, movefocus, r
### bind = $mainMod, up, movefocus, u
### bind = $mainMod, down, movefocus, d
###
### # Switch workspaces with mainMod + [0-9]
### bind = $mainMod, 1, workspace, 1
### bind = $mainMod, 2, workspace, 2
### bind = $mainMod, 3, workspace, 3
### bind = $mainMod, 4, workspace, 4
### bind = $mainMod, 5, workspace, 5
### bind = $mainMod, 6, workspace, 6
### bind = $mainMod, 7, workspace, 7
### bind = $mainMod, 8, workspace, 8
### bind = $mainMod, 9, workspace, 9
### bind = $mainMod, 0, workspace, 10
###
### # Move active window to a workspace with mainMod + SHIFT + [0-9]
### bind = $mainMod SHIFT, 1, movetoworkspace, 1
### bind = $mainMod SHIFT, 2, movetoworkspace, 2
### bind = $mainMod SHIFT, 3, movetoworkspace, 3
### bind = $mainMod SHIFT, 4, movetoworkspace, 4
### bind = $mainMod SHIFT, 5, movetoworkspace, 5
### bind = $mainMod SHIFT, 6, movetoworkspace, 6
### bind = $mainMod SHIFT, 7, movetoworkspace, 7
### bind = $mainMod SHIFT, 8, movetoworkspace, 8
### bind = $mainMod SHIFT, 9, movetoworkspace, 9
### bind = $mainMod SHIFT, 0, movetoworkspace, 10
###
### # Example special workspace (scratchpad)
### bind = $mainMod, S, togglespecialworkspace, magic
### bind = $mainMod SHIFT, S, movetoworkspace, special:magic
###
### # Scroll through existing workspaces with mainMod + scroll
### bind = $mainMod, mouse_down, workspace, e+1
### bind = $mainMod, mouse_up, workspace, e-1
###
### # Move/resize windows with mainMod + LMB/RMB and dragging
### bindm = $mainMod, mouse:272, movewindow
### bindm = $mainMod, mouse:273, resizewindow
###
### # Laptop multimedia keys for volume and LCD brightness
### bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
### bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
### bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
### bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
### bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
### bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# Firefox
windowrulev2 = float, class:(LibreWolf), title:(Picture-in-Picture)
windowrulev2 = size 320 180, move 0 0, title:(Picture-in-Picture)
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.

View file

@ -1,69 +0,0 @@
# BACKGROUND
background {
monitor =
path = ~/.config/hypr/walls/1.png
# blur_passes = 0
# contrast = 1
# brightness = 1
# vibrancy = 0.2
# vibrancy_darkness = 0.2
}
# GENERAL
general {
no_fade_in = false
no_fade_out = false
hide_cursor = true
grace = 0
disable_loading_bar = true
ignore_empty_input = true
}
# INPUT FIELD
input-field {
monitor =
size = 250, 60
outline_thickness = 2
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
outer_color = rgba(0, 0, 0, 0)
inner_color = rgba(0, 0, 0, 0.2)
font_color = rgb(205, 214, 244)
fade_on_empty = false
rounding = -1
placeholder_text = <span foreground="##cdd6f4">Password</span>
hide_input = false
position = 0, -200
halign = center
valign = center
check_color = rgb(108, 112, 134)
fail_color = rgb(243, 139, 168) # if authentication failed, changes outer_color and fail message color
fail_text = <b>$ATTEMPTS</b> # can be set to empty
fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
}
# DATE
label {
monitor =
text = cmd[update:1000] date +"%Y-%m-%d"
color = rgb(205, 214, 244)
font_size = 22
font_family = JetBrains Mono
position = 0, 300
halign = center
valign = center
}
# TIME
label {
monitor =
text = $TIME
color = rgb(205, 214, 244)
font_size = 95
font_family = JetBrains Mono Extrabold
position = 0, 200
halign = center
valign = center
}qqqq

View file

@ -1,5 +0,0 @@
preload = ~/.config/hypr/walls/2.png
wallpaper = eDP-1,~/.config/hypr/walls/2.png
splash = false
# https://github.com/zhichaoh/catppuccin-wallpapers

View file

@ -1,122 +0,0 @@
# Keybinds
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
#
$mainMod = SUPER
$files = dolphin
$term = kitty
# Default
$scriptsDir = $HOME/.config/hypr/scripts
$UserScripts = $HOME/.config/hypr/UserScripts
# Rofi App Launcher
bind = $mainMod, D, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window
## ags overview
##bind = $mainMod, A, exec, pkill rofi || true && ags -t 'overview'
bind = $mainMod, Return, exec, $term # Launch terminal
bind = $mainMod, E, exec, $files # Launch file manager
# pyprland
bind = $mainMod SHIFT, Return, exec, pypr toggle term # Dropdown terminal
bind = $mainMod, Z, exec, pypr zoom # Toggle Zoom
bind = $mainMod, Q, killactive,
bind = $mainMod, F, fullscreen,
bind = $mainMod SHIFT, F, togglefloating,
bind = $mainMod ALT, F, exec, hyprctl dispatch workspace allfloat
# Features / Extras
bind = $mainMod, H, exec, $scriptsDir/KeyHints.sh #small help file
bind = $mainMod ALT, R, exec, $scriptsDir/Refresh.sh # Refresh waybar, swaync, rofi
bind = $mainMod ALT, E, exec, $scriptsDir/RofiEmoji.sh # emoji
bind = $mainMod SHIFT, B, exec, $scriptsDir/ChangeBlur.sh # Toggle blur settings
bind = $mainMod SHIFT, G, exec, $scriptsDir/GameMode.sh # animations ON/OFF
bind = $mainMod ALT, L, exec, $scriptsDir/ChangeLayout.sh # Toggle Master or Dwindle Layout
bind = $mainMod ALT, V, exec, $scriptsDir/ClipManager.sh # Clipboard Manager
bind = $mainMod SHIFT, N, exec, swaync-client -t -sw # swayNC panel
# Waybar / Bar related
bind = $mainMod, B, exec, pkill -SIGUSR1 waybar # Toggle hide/show waybar
bind = $mainMod CTRL, B, exec, $scriptsDir/WaybarStyles.sh # Waybar Styles Menu
bind = $mainMod ALT, B, exec, $scriptsDir/WaybarLayout.sh # Waybar Layout Menu
# Resize windows
binde = $mainMod SHIFT, left, resizeactive,-50 0
binde = $mainMod SHIFT, right, resizeactive,50 0
binde = $mainMod SHIFT, up, resizeactive,0 -50
binde = $mainMod SHIFT, down, resizeactive,0 50
# Move windows
bind = $mainMod CTRL, left, movewindow, l
bind = $mainMod CTRL, right, movewindow, r
bind = $mainMod CTRL, up, movewindow, u
bind = $mainMod CTRL, down, movewindow, d
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Workspaces related
bind = $mainMod, tab, workspace, m+1
bind = $mainMod SHIFT, tab, workspace, m-1
# Special workspace
bind = $mainMod SHIFT, U, movetoworkspace, special
bind = $mainMod, U, togglespecialworkspace,
# The following mappings use the key codes to better support various keyboard layouts
# 1 is code:10, 2 is code 11, etc
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, code:10, workspace, 1
bind = $mainMod, code:11, workspace, 2
bind = $mainMod, code:12, workspace, 3
bind = $mainMod, code:13, workspace, 4
bind = $mainMod, code:14, workspace, 5
bind = $mainMod, code:15, workspace, 6
bind = $mainMod, code:16, workspace, 7
bind = $mainMod, code:17, workspace, 8
bind = $mainMod, code:18, workspace, 9
bind = $mainMod, code:19, workspace, 10
# Move active window and follow to workspace mainMod + SHIFT [0-9]
bind = $mainMod SHIFT, code:10, movetoworkspace, 1
bind = $mainMod SHIFT, code:11, movetoworkspace, 2
bind = $mainMod SHIFT, code:12, movetoworkspace, 3
bind = $mainMod SHIFT, code:13, movetoworkspace, 4
bind = $mainMod SHIFT, code:14, movetoworkspace, 5
bind = $mainMod SHIFT, code:15, movetoworkspace, 6
bind = $mainMod SHIFT, code:16, movetoworkspace, 7
bind = $mainMod SHIFT, code:17, movetoworkspace, 8
bind = $mainMod SHIFT, code:18, movetoworkspace, 9
bind = $mainMod SHIFT, code:19, movetoworkspace, 10
bind = $mainMod SHIFT, bracketleft, movetoworkspace, -1 # brackets [ or ]
bind = $mainMod SHIFT, bracketright, movetoworkspace, +1
# Move active window to a workspace silently mainMod + CTRL [0-9]
bind = $mainMod CTRL, code:10, movetoworkspacesilent, 1
bind = $mainMod CTRL, code:11, movetoworkspacesilent, 2
bind = $mainMod CTRL, code:12, movetoworkspacesilent, 3
bind = $mainMod CTRL, code:13, movetoworkspacesilent, 4
bind = $mainMod CTRL, code:14, movetoworkspacesilent, 5
bind = $mainMod CTRL, code:15, movetoworkspacesilent, 6
bind = $mainMod CTRL, code:16, movetoworkspacesilent, 7
bind = $mainMod CTRL, code:17, movetoworkspacesilent, 8
bind = $mainMod CTRL, code:18, movetoworkspacesilent, 9
bind = $mainMod CTRL, code:19, movetoworkspacesilent, 10
bind = $mainMod CTRL, bracketleft, movetoworkspacesilent, -1 # brackets [ or ]
bind = $mainMod CTRL, bracketright, movetoworkspacesilent, +1
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
bind = $mainMod, period, workspace, e+1
bind = $mainMod, comma, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

View file

@ -1,78 +0,0 @@
$rosewater = rgb(f5e0dc)
$rosewaterAlpha = f5e0dc
$flamingo = rgb(f2cdcd)
$flamingoAlpha = f2cdcd
$pink = rgb(f5c2e7)
$pinkAlpha = f5c2e7
$mauve = rgb(cba6f7)
$mauveAlpha = cba6f7
$red = rgb(f38ba8)
$redAlpha = f38ba8
$maroon = rgb(eba0ac)
$maroonAlpha = eba0ac
$peach = rgb(fab387)
$peachAlpha = fab387
$yellow = rgb(f9e2af)
$yellowAlpha = f9e2af
$green = rgb(a6e3a1)
$greenAlpha = a6e3a1
$teal = rgb(94e2d5)
$tealAlpha = 94e2d5
$sky = rgb(89dceb)
$skyAlpha = 89dceb
$sapphire = rgb(74c7ec)
$sapphireAlpha = 74c7ec
$blue = rgb(89b4fa)
$blueAlpha = 89b4fa
$lavender = rgb(b4befe)
$lavenderAlpha = b4befe
$text = rgb(cdd6f4)
$textAlpha = cdd6f4
$subtext1 = rgb(bac2de)
$subtext1Alpha = bac2de
$subtext0 = rgb(a6adc8)
$subtext0Alpha = a6adc8
$overlay2 = rgb(9399b2)
$overlay2Alpha = 9399b2
$overlay1 = rgb(7f849c)
$overlay1Alpha = 7f849c
$overlay0 = rgb(6c7086)
$overlay0Alpha = 6c7086
$surface2 = rgb(585b70)
$surface2Alpha = 585b70
$surface1 = rgb(45475a)
$surface1Alpha = 45475a
$surface0 = rgb(313244)
$surface0Alpha = 313244
$base = rgb(1e1e2e)
$baseAlpha = 1e1e2e
$mantle = rgb(181825)
$mantleAlpha = 181825
$crust = rgb(11111b)
$crustAlpha = 11111b

View file

@ -1,16 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Airplane Mode. Turning on or off all wifi using rfkill.
notif="$HOME/.config/swaync/images/bell.png"
# Check if any wireless device is blocked
wifi_blocked=$(rfkill list wifi | grep -o "Soft blocked: yes")
if [ -n "$wifi_blocked" ]; then
rfkill unblock wifi
notify-send -u low -i "$notif" 'Airplane mode: OFF'
else
rfkill block wifi
notify-send -u low -i "$notif" 'Airplane mode: ON'
fi

View file

@ -1,74 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Script for Monitor backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons"
notification_timeout=1000
step=10 # INCREASE/DECREASE BY THIS VALUE
# Get brightness
get_backlight() {
brightnessctl -m | cut -d, -f4 | sed 's/%//'
}
# Get icons
get_icon() {
current=$(get_backlight)
if [ "$current" -le "20" ]; then
icon="$iDIR/brightness-20.png"
elif [ "$current" -le "40" ]; then
icon="$iDIR/brightness-40.png"
elif [ "$current" -le "60" ]; then
icon="$iDIR/brightness-60.png"
elif [ "$current" -le "80" ]; then
icon="$iDIR/brightness-80.png"
else
icon="$iDIR/brightness-100.png"
fi
}
# Notify
notify_user() {
notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -u low -i "$icon" "Brightness : $current%"
}
# Change brightness
change_backlight() {
local current_brightness
current_brightness=$(get_backlight)
# Calculate new brightness
if [[ "$1" == "+${step}%" ]]; then
new_brightness=$((current_brightness + step))
elif [[ "$1" == "${step}%-" ]]; then
new_brightness=$((current_brightness - step))
fi
# Ensure new brightness is within valid range
if (( new_brightness < 5 )); then
new_brightness=5
elif (( new_brightness > 100 )); then
new_brightness=100
fi
brightnessctl set "${new_brightness}%"
get_icon
current=$new_brightness
notify_user
}
# Execute accordingly
case "$1" in
"--get")
get_backlight
;;
"--inc")
change_backlight "+${step}%"
;;
"--dec")
change_backlight "${step}%-"
;;
*)
get_backlight
;;
esac

View file

@ -1,51 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Script for keyboard backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons"
# Get keyboard brightness
get_kbd_backlight() {
echo $(brightnessctl -d '*::kbd_backlight' -m | cut -d, -f4)
}
# Get icons
get_icon() {
current=$(get_kbd_backlight | sed 's/%//')
if [ "$current" -le "20" ]; then
icon="$iDIR/brightness-20.png"
elif [ "$current" -le "40" ]; then
icon="$iDIR/brightness-40.png"
elif [ "$current" -le "60" ]; then
icon="$iDIR/brightness-60.png"
elif [ "$current" -le "80" ]; then
icon="$iDIR/brightness-80.png"
else
icon="$iDIR/brightness-100.png"
fi
}
# Notify
notify_user() {
notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -u low -i "$icon" "Keyboard Brightness : $current%"
}
# Change brightness
change_kbd_backlight() {
brightnessctl -d *::kbd_backlight set "$1" && get_icon && notify_user
}
# Execute accordingly
case "$1" in
"--get")
get_kbd_backlight
;;
"--inc")
change_kbd_backlight "+30%"
;;
"--dec")
change_kbd_backlight "30%-"
;;
*)
get_kbd_backlight
;;
esac

View file

@ -1,17 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Script for changing blurs on the fly
notif="$HOME/.config/swaync/images/bell.png"
STATE=$(hyprctl -j getoption decoration:blur:passes | jq ".int")
if [ "${STATE}" == "2" ]; then
hyprctl keyword decoration:blur:size 2
hyprctl keyword decoration:blur:passes 1
notify-send -e -u low -i "$notif" "Less blur"
else
hyprctl keyword decoration:blur:size 5
hyprctl keyword decoration:blur:passes 2
notify-send -e -u low -i "$notif" "Normal blur"
fi

View file

@ -1,30 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# for changing Hyprland Layouts (Master or Dwindle) on the fly
notif="$HOME/.config/swaync/images/bell.png"
LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g')
case $LAYOUT in
"master")
hyprctl keyword general:layout dwindle
hyprctl keyword unbind SUPER,J
hyprctl keyword unbind SUPER,K
hyprctl keyword bind SUPER,J,cyclenext
hyprctl keyword bind SUPER,K,cyclenext,prev
hyprctl keyword bind SUPER,O,togglesplit
notify-send -e -u low -i "$notif" "Dwindle Layout"
;;
"dwindle")
hyprctl keyword general:layout master
hyprctl keyword unbind SUPER,J
hyprctl keyword unbind SUPER,K
hyprctl keyword unbind SUPER,O
hyprctl keyword bind SUPER,J,layoutmsg,cyclenext
hyprctl keyword bind SUPER,K,layoutmsg,cycleprev
notify-send -e -u low -i "$notif" "Master Layout"
;;
*) ;;
esac

View file

@ -1,40 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Clipboard Manager. This script uses cliphist, rofi, and wl-copy.
# Actions:
# CTRL Del to delete an entry
# ALT Del to wipe clipboard contents
while true; do
result=$(
rofi -i -dmenu \
-kb-custom-1 "Control-Delete" \
-kb-custom-2 "Alt-Delete" \
-config ~/.config/rofi/config-clipboard.rasi < <(cliphist list)
)
case "$?" in
1)
exit
;;
0)
case "$result" in
"")
continue
;;
*)
cliphist decode <<<"$result" | wl-copy
exit
;;
esac
;;
10)
cliphist delete <<<"$result"
;;
11)
cliphist wipe
;;
esac
done

View file

@ -1,242 +0,0 @@
#!/bin/bash
## /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# For Dark and Light switching
# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate folders
# Paths
wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers"
dark_wallpapers="$wallpaper_base_path/Dark"
light_wallpapers="$wallpaper_base_path/Light"
hypr_config_path="$HOME/.config/hypr"
swaync_style="$HOME/.config/swaync/style.css"
ags_style="$HOME/.config/ags/user/style.css"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
notif="$HOME/.config/swaync/images/bell.png"
wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi"
kitty_conf="$HOME/.config/kitty/kitty.conf"
wallust_config="$HOME/.config/wallust/wallust.toml"
pallete_dark="dark16"
pallete_light="light16"
# kill swaybg if running
pkill swaybg
# Initialize swww if needed
swww query || swww-daemon
# Set swww options
swww="swww img"
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2"
# Determine current theme mode
if [ "$(cat $HOME/.cache/.theme_mode)" = "Light" ]; then
next_mode="Dark"
# Logic for Dark mode
wallpaper_path="$dark_wallpapers"
else
next_mode="Light"
# Logic for Light mode
wallpaper_path="$light_wallpapers"
fi
# Function to update theme mode for the next cycle
update_theme_mode() {
echo "$next_mode" > ~/.cache/.theme_mode
}
# Function to notify user
notify_user() {
notify-send -u low -i "$notif" "Switching to $1 mode"
}
# Use sed to replace the palette setting in the wallust config file
if [ "$next_mode" = "Dark" ]; then
sed -i 's/^palette = .*/palette = "'"$pallete_dark"'"/' "$wallust_config"
else
sed -i 's/^palette = .*/palette = "'"$pallete_light"'"/' "$wallust_config"
fi
# Function to set Waybar style
set_waybar_style() {
theme="$1"
waybar_styles="$HOME/.config/waybar/style"
waybar_style_link="$HOME/.config/waybar/style.css"
style_prefix="\\[${theme}\\].*\\.css$"
style_file=$(find "$waybar_styles" -maxdepth 1 -type f -regex ".*$style_prefix" | shuf -n 1)
if [ -n "$style_file" ]; then
ln -sf "$style_file" "$waybar_style_link"
else
echo "Style file not found for $theme theme."
fi
}
# Call the function after determining the mode
set_waybar_style "$next_mode"
notify_user "$next_mode"
# swaync color change
if [ "$next_mode" = "Dark" ]; then
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.8);/' "${swaync_style}"
sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${swaync_style}"
else
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.9);/' "${swaync_style}"
sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${swaync_style}"
fi
# ags color change
if [ "$next_mode" = "Dark" ]; then
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.4);/' "${ags_style}"
sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.7);/' "${ags_style}"
sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${ags_style}"
else
sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.4);/' "${ags_style}"
sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.7);/' "${ags_style}"
sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${ags_style}"
fi
# kitty background color change
if [ "$next_mode" = "Dark" ]; then
sed -i '/^foreground /s/^foreground .*/foreground #dddddd/' "${kitty_conf}"
sed -i '/^background /s/^background .*/background #000000/' "${kitty_conf}"
sed -i '/^cursor /s/^cursor .*/cursor #dddddd/' "${kitty_conf}"
else
sed -i '/^foreground /s/^foreground .*/foreground #000000/' "${kitty_conf}"
sed -i '/^background /s/^background .*/background #dddddd/' "${kitty_conf}"
sed -i '/^cursor /s/^cursor .*/cursor #000000/' "${kitty_conf}"
fi
# Set Dynamic Wallpaper for Dark or Light Mode
if [ "$next_mode" = "Dark" ]; then
next_wallpaper="$(find "${dark_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)"
else
next_wallpaper="$(find "${light_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)"
fi
# Update wallpaper using swww command
$swww "${next_wallpaper}" $effect
# Set Kvantum Manager theme & QT5/QT6 settings
if [ "$next_mode" = "Dark" ]; then
kvantum_theme="Catppuccin-Mocha"
qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Mocha.conf"
qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Mocha.conf"
else
kvantum_theme="Catppuccin-Latte"
qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Latte.conf"
qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Latte.conf"
fi
sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt5ct_color_scheme|" "$HOME/.config/qt5ct/qt5ct.conf"
sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt6ct_color_scheme|" "$HOME/.config/qt6ct/qt6ct.conf"
kvantummanager --set "$kvantum_theme"
# set the rofi color for background
if [ "$next_mode" = "Dark" ]; then
sed -i '24s/.*/background: rgba(0,0,0,0.7);/' $wallust_rofi
else
sed -i '24s/.*/background: rgba(255,255,255,0.9);/' $wallust_rofi
fi
# GTK themes and icons switching
set_custom_gtk_theme() {
mode=$1
gtk_themes_directory="$HOME/.themes"
icon_directory="$HOME/.icons"
color_setting="org.gnome.desktop.interface color-scheme"
theme_setting="org.gnome.desktop.interface gtk-theme"
icon_setting="org.gnome.desktop.interface icon-theme"
if [ "$mode" == "Light" ]; then
search_keywords="*Light*"
gsettings set $color_setting 'prefer-light'
elif [ "$mode" == "Dark" ]; then
search_keywords="*Dark*"
gsettings set $color_setting 'prefer-dark'
else
echo "Invalid mode provided."
return 1
fi
themes=()
icons=()
while IFS= read -r -d '' theme_search; do
themes+=("$(basename "$theme_search")")
done < <(find "$gtk_themes_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0)
while IFS= read -r -d '' icon_search; do
icons+=("$(basename "$icon_search")")
done < <(find "$icon_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0)
if [ ${#themes[@]} -gt 0 ]; then
if [ "$mode" == "Dark" ]; then
selected_theme=${themes[RANDOM % ${#themes[@]}]}
else
selected_theme=${themes[$RANDOM % ${#themes[@]}]}
fi
echo "Selected GTK theme for $mode mode: $selected_theme"
gsettings set $theme_setting "$selected_theme"
# Flatpak GTK apps (themes)
if command -v flatpak &> /dev/null; then
flatpak --user override --filesystem=$HOME/.themes
sleep 0.5
flatpak --user override --env=GTK_THEME="$selected_theme"
fi
else
echo "No $mode GTK theme found"
fi
if [ ${#icons[@]} -gt 0 ]; then
if [ "$mode" == "Dark" ]; then
selected_icon=${icons[RANDOM % ${#icons[@]}]}
else
selected_icon=${icons[$RANDOM % ${#icons[@]}]}
fi
echo "Selected icon theme for $mode mode: $selected_icon"
gsettings set $icon_setting "$selected_icon"
## QT5ct icon_theme
sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt5ct/qt5ct.conf"
sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt6ct/qt6ct.conf"
# Flatpak GTK apps (icons)
if command -v flatpak &> /dev/null; then
flatpak --user override --filesystem=$HOME/.icons
sleep 0.5
flatpak --user override --env=ICON_THEME="$selected_icon"
fi
else
echo "No $mode icon theme found"
fi
}
# Call the function to set GTK theme and icon theme based on mode
set_custom_gtk_theme "$next_mode"
# Update theme mode for the next cycle
update_theme_mode
sleep 0.5
# Run remaining scripts
${SCRIPTSDIR}/WallustSwww.sh
sleep 1
${SCRIPTSDIR}/Refresh.sh
sleep 0.3
# Display notifications for theme and icon changes
notify-send -u normal -i "$notif" "Themes in $next_mode Mode"
exit 0

View file

@ -1,33 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Game Mode. Turning off all animations
notif="$HOME/.config/swaync/images/bell.png"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
if [ "$HYPRGAMEMODE" = 1 ] ; then
hyprctl --batch "\
keyword animations:enabled 0;\
keyword decoration:drop_shadow 0;\
keyword decoration:blur:passes 0;\
keyword general:gaps_in 0;\
keyword general:gaps_out 0;\
keyword general:border_size 1;\
keyword decoration:rounding 0"
hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
swww kill
notify-send -e -u low -i "$notif" "gamemode enabled. All animations off"
exit
else
swww-daemon --format xrgb && swww img "$HOME/.config/rofi/.current_wallpaper" &
sleep 0.1
${SCRIPTSDIR}/WallustSwww.sh
sleep 0.5
${SCRIPTSDIR}/Refresh.sh
notify-send -e -u normal -i "$notif" "gamemode disabled. All animations normal"
exit
fi
hyprctl reload

View file

@ -1,23 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead
PROCESS="hypridle"
if [[ "$1" == "status" ]]; then
sleep 1
if pgrep -x "$PROCESS" >/dev/null; then
echo '{"text": "RUNNING", "class": "active", "tooltip": "idle_inhibitor NOT ACTIVE\nLeft Click: Activate\nRight Click: Lock Screen"}'
else
echo '{"text": "NOT RUNNING", "class": "notactive", "tooltip": "idle_inhibitor is ACTIVE\nLeft Click: Deactivate\nRight Click: Lock Screen"}'
fi
elif [[ "$1" == "toggle" ]]; then
if pgrep -x "$PROCESS" >/dev/null; then
pkill "$PROCESS"
else
"$PROCESS"
fi
else
echo "Usage: $0 {status|toggle}"
exit 1
fi

View file

@ -1,82 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Keyhints. Idea got from Garuda Hyprland
# GDK BACKEND. Change to either wayland or x11 if having issues
BACKEND=wayland
# Detect monitor resolution and scale
x_mon=$(hyprctl -j monitors | jq '.[] | select(.focused==true) | .width')
y_mon=$(hyprctl -j monitors | jq '.[] | select(.focused==true) | .height')
hypr_scale=$(hyprctl -j monitors | jq '.[] | select (.focused == true) | .scale' | sed 's/\.//')
# Calculate width and height based on percentages and monitor resolution
width=$((x_mon * hypr_scale / 100))
height=$((y_mon * hypr_scale / 100))
# Set maximum width and height
max_width=1200
max_height=1000
# Set percentage of screen size for dynamic adjustment
percentage_width=70
percentage_height=70
# Calculate dynamic width and height
dynamic_width=$((width * percentage_width / 100))
dynamic_height=$((height * percentage_height / 100))
# Limit width and height to maximum values
dynamic_width=$(($dynamic_width > $max_width ? $max_width : $dynamic_width))
dynamic_height=$(($dynamic_height > $max_height ? $max_height : $dynamic_height))
# Launch yad with calculated width and height
GDK_BACKEND=$BACKEND yad --width=$dynamic_width --height=$dynamic_height \
--center \
--title="Keybindings" \
--no-buttons \
--list \
--column=Key: \
--column=Description: \
--column=Command: \
--timeout-indicator=bottom \
"ESC" "close this app" "" "=" "SUPER KEY (Windows Key)" "(SUPER KEY)" \
" enter" "Terminal" "(kitty)" \
" SHIFT enter" "DropDown Terminal" "(kitty-pyprland)" \
" A" "Desktop Overview" "(AGS Overview)" \
" D" "App Launcher" "(rofi-wayland)" \
" T" "Open File Manager" "(Thunar)" \
" S" "Google Search" "(rofi)" \
" Q" "close active window" "(not kill)" \
" Shift Q " "kills an active window" "(kill)" \
" Z" "Desktop Zoom" "(pyprland)" \
" Alt V" "Clipboard Manager" "(cliphist)" \
" W" "Choose wallpaper" "(Wallpaper Menu)" \
" Shift W" "Choose wallpaper effects" "(imagemagick + swww)" \
"CTRL ALT W" "Random wallpaper" "(via swww)" \
" B" "Hide/UnHide Waybar" "waybar" \
" CTRL B" "Choose waybar styles" "(waybar styles)" \
" ALT B" "Choose waybar layout" "(waybar layout)" \
" ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \
" SHIFT N" "Launch Notification Panel" "swaync Notification Center" \
" Print" "screenshot" "(grim)" \
" Shift Print" "screenshot region" "(grim + slurp)" \
" Shift S" "screenshot region" "(swappy)" \
" CTRL Print" "screenshot timer 5 secs " "(grim)" \
" CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \
"ALT Print" "Screenshot active window" "active window only" \
"CTRL ALT P" "power-menu" "(wlogout)" \
"CTRL ALT L" "screen lock" "(hyprlock)" \
"CTRL ALT Del" "Hyprland Exit" "(SAVE YOUR WORK!!!)" \
" F" "Fullscreen" "Toggles to full screen" \
" ALT L" "Toggle Dwindle | Master Layout" "Hyprland Layout" \
" Shift F" "Toggle float" "single window" \
" ALT F" "Toggle all windows to float" "all windows" \
" Shift B" "Toggle Blur" "normal or less blur" \
" SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \
" ALT E" "Rofi Emoticons" "Emoticon" \
" ALT V" "Clipboard Manager" "cliphist" \
" H" "Launch this app" "" \
" E" "View or EDIT Keybinds, Settings, Monitor" "" \
"" "" "" \
"More tips:" "https://github.com/JaKooLit/Hyprland-Dots/wiki" ""\

View file

@ -1,11 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Copied from Discord post. Thanks to @Zorg
# Get id of an active window
active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2)
# Close active window
kill "$active_pid"

View file

@ -1,5 +0,0 @@
#!/bin/bash
# For Hyprlock
##pidof hyprlock || hyprlock -q
loginctl lock-session

View file

@ -1,61 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Playerctl
music_icon="$HOME/.config/swaync/icons/music.png"
# Play the next track
play_next() {
playerctl next
show_music_notification
}
# Play the previous track
play_previous() {
playerctl previous
show_music_notification
}
# Toggle play/pause
toggle_play_pause() {
playerctl play-pause
show_music_notification
}
# Stop playback
stop_playback() {
playerctl stop
notify-send -e -u low -i "$music_icon" "Playback Stopped"
}
# Display notification with song information
show_music_notification() {
status=$(playerctl status)
if [[ "$status" == "Playing" ]]; then
song_title=$(playerctl metadata title)
song_artist=$(playerctl metadata artist)
notify-send -e -u low -i "$music_icon" "Now Playing:" "$song_title\nby $song_artist"
elif [[ "$status" == "Paused" ]]; then
notify-send -e -u low -i "$music_icon" "Playback Paused"
fi
}
# Get media control action from command line argument
case "$1" in
"--nxt")
play_next
;;
"--prv")
play_previous
;;
"--pause")
toggle_play_pause
;;
"--stop")
stop_playback
;;
*)
echo "Usage: $0 [--nxt|--prv|--pause|--stop]"
exit 1
;;
esac

View file

@ -1,31 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# This is for polkits, it will start from top and will stop if the top is executed
# Polkit possible paths files to check
polkit=(
"/usr/lib/polkit-kde-authentication-agent-1"
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
"/usr/lib/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-mate-authentication-agent-1"
"/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1"
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
)
executed=false # Flag to track if a file has been executed
# Loop through the list of files
for file in "${polkit[@]}"; do
if [ -e "$file" ]; then
echo "File $file found, executing command..."
exec "$file"
executed=true
break
fi
done
# If none of the files were found, you can add a fallback command here
if [ "$executed" == false ]; then
echo "None of the specified files were found. Install a Polkit"
fi

View file

@ -1,16 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# For manually starting xdg-desktop-portal
sleep 1
killall xdg-desktop-portal-hyprland
killall xdg-desktop-portal-wlr
killall xdg-desktop-portal-gnome
killall xdg-desktop-portal
sleep 1
/usr/lib/xdg-desktop-portal-hyprland &
/usr/libexec/xdg-desktop-portal-hyprland &
sleep 2
/usr/lib/xdg-desktop-portal &
/usr/libexec/xdg-desktop-portal &

View file

@ -1,46 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Scripts for refreshing ags waybar, rofi, swaync, wallust
SCRIPTSDIR=$HOME/.config/hypr/scripts
UserScripts=$HOME/.config/hypr/UserScripts
# Define file_exists function
file_exists() {
if [ -e "$1" ]; then
return 0 # File exists
else
return 1 # File does not exist
fi
}
# Kill already running processes
_ps=(waybar rofi swaync ags)
for _prs in "${_ps[@]}"; do
if pidof "${_prs}" >/dev/null; then
pkill "${_prs}"
fi
done
# quit ags
ags -q
sleep 0.3
#Restart waybar
waybar &
# relaunch swaync
sleep 0.5
swaync > /dev/null 2>&1 &
# relaunch ags
ags &
# Relaunching rainbow borders if the script exists
sleep 1
if file_exists "${UserScripts}/RainbowBorders.sh"; then
${UserScripts}/RainbowBorders.sh &
fi
exit 0

File diff suppressed because it is too large Load diff

View file

@ -1,129 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Screenshots scripts
iDIR="$HOME/.config/swaync/icons"
sDIR="$HOME/.config/hypr/scripts"
notify_cmd_shot="notify-send -h string:x-canonical-private-synchronous:shot-notify -u low -i ${iDIR}/picture.png"
time=$(date "+%d-%b_%H-%M-%S")
dir="$(xdg-user-dir)/Pictures/Screenshots"
file="Screenshot_${time}_${RANDOM}.png"
active_window_class=$(hyprctl -j activewindow | jq -r '(.class)')
active_window_file="Screenshot_${time}_${active_window_class}.png"
active_window_path="${dir}/${active_window_file}"
# notify and view screenshot
notify_view() {
if [[ "$1" == "active" ]]; then
if [[ -e "${active_window_path}" ]]; then
${notify_cmd_shot} "Screenshot of '${active_window_class}' Saved."
"${sDIR}/Sounds.sh" --screenshot
else
${notify_cmd_shot} "Screenshot of '${active_window_class}' not Saved"
"${sDIR}/Sounds.sh" --error
fi
elif [[ "$1" == "swappy" ]]; then
${notify_cmd_shot} "Screenshot Captured."
else
local check_file="$dir/$file"
if [[ -e "$check_file" ]]; then
${notify_cmd_shot} "Screenshot Saved."
"${sDIR}/Sounds.sh" --screenshot
else
${notify_cmd_shot} "Screenshot NOT Saved."
"${sDIR}/Sounds.sh" --error
fi
fi
}
# countdown
countdown() {
for sec in $(seq $1 -1 1); do
notify-send -h string:x-canonical-private-synchronous:shot-notify -t 1000 -i "$iDIR"/timer.png "Taking shot in : $sec"
sleep 1
done
}
# take shots
shotnow() {
cd ${dir} && grim - | tee "$file" | wl-copy
sleep 2
notify_view
}
shot5() {
countdown '5'
sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy
sleep 1
notify_view
}
shot10() {
countdown '10'
sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy
notify_view
}
shotwin() {
w_pos=$(hyprctl activewindow | grep 'at:' | cut -d':' -f2 | tr -d ' ' | tail -n1)
w_size=$(hyprctl activewindow | grep 'size:' | cut -d':' -f2 | tr -d ' ' | tail -n1 | sed s/,/x/g)
cd ${dir} && grim -g "$w_pos $w_size" - | tee "$file" | wl-copy
notify_view
}
shotarea() {
tmpfile=$(mktemp)
grim -g "$(slurp)" - >"$tmpfile"
if [[ -s "$tmpfile" ]]; then
wl-copy <"$tmpfile"
mv "$tmpfile" "$dir/$file"
fi
notify_view
}
shotactive() {
active_window_class=$(hyprctl -j activewindow | jq -r '(.class)')
active_window_file="Screenshot_${time}_${active_window_class}.png"
active_window_path="${dir}/${active_window_file}"
hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "${active_window_path}"
sleep 1
notify_view "active"
}
shotswappy() {
tmpfile=$(mktemp)
grim -g "$(slurp)" - >"$tmpfile" && "${sDIR}/Sounds.sh" --screenshot && notify_view "swappy"
swappy -f - <"$tmpfile"
rm "$tmpfile"
}
if [[ ! -d "$dir" ]]; then
mkdir -p "$dir"
fi
if [[ "$1" == "--now" ]]; then
shotnow
elif [[ "$1" == "--in5" ]]; then
shot5
elif [[ "$1" == "--in10" ]]; then
shot10
elif [[ "$1" == "--win" ]]; then
shotwin
elif [[ "$1" == "--area" ]]; then
shotarea
elif [[ "$1" == "--active" ]]; then
shotactive
elif [[ "$1" == "--swappy" ]]; then
shotswappy
else
echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy"
fi
exit 0

View file

@ -1,77 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# This script is used to play system sounds.
# Script is used by Volume.Sh and ScreenShots.sh
theme="freedesktop" # Set the theme for the system sounds.
mute=false # Set to true to mute the system sounds.
# Mute individual sounds here.
muteScreenshots=false
muteVolume=false
# Exit if the system sounds are muted.
if [[ "$mute" = true ]]; then
exit 0
fi
# Choose the sound to play.
if [[ "$1" == "--screenshot" ]]; then
if [[ "$muteScreenshots" = true ]]; then
exit 0
fi
soundoption="screen-capture.*"
elif [[ "$1" == "--volume" ]]; then
if [[ "$muteVolume" = true ]]; then
exit 0
fi
soundoption="audio-volume-change.*"
elif [[ "$1" == "--error" ]]; then
if [[ "$muteScreenshots" = true ]]; then
exit 0
fi
soundoption="dialog-error.*"
else
echo -e "Available sounds: --screenshot, --volume, --error"
exit 0
fi
# Set the directory defaults for system sounds.
if [ -d "/run/current-system/sw/share/sounds" ]; then
systemDIR="/run/current-system/sw/share/sounds" # NixOS
else
systemDIR="/usr/share/sounds"
fi
userDIR="$HOME/.local/share/sounds"
defaultTheme="freedesktop"
# Prefer the user's theme, but use the system's if it doesn't exist.
sDIR="$systemDIR/$defaultTheme"
if [ -d "$userDIR/$theme" ]; then
sDIR="$userDIR/$theme"
elif [ -d "$systemDIR/$theme" ]; then
sDIR="$systemDIR/$theme"
fi
# Get the theme that it inherits.
iTheme=$(cat "$sDIR/index.theme" | grep -i "inherits" | cut -d "=" -f 2)
iDIR="$sDIR/../$iTheme"
# Find the sound file and play it.
sound_file=$(find $sDIR/stereo -name "$soundoption" -print -quit)
if ! test -f "$sound_file"; then
sound_file=$(find $iDIR/stereo -name "$soundoption" -print -quit)
if ! test -f "$sound_file"; then
sound_file=$(find $userDIR/$defaultTheme/stereo -name "$soundoption" -print -quit)
if ! test -f "$sound_file"; then
sound_file=$(find $systemDIR/$defaultTheme/stereo -name "$soundoption" -print -quit)
if ! test -f "$sound_file"; then
echo "Error: Sound file not found."
exit 1
fi
fi
fi
fi
# pipewire priority, fallback pulseaudio
pw-play "$sound_file" || pa-play "$sound_file"

View file

@ -1,104 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# This is for changing kb_layouts. Set kb_layouts in $settings_file
layout_file="$HOME/.cache/kb_layout"
settings_file="$HOME/.config/hypr/UserConfigs/UserSettings.conf"
notif_icon="$HOME/.config/swaync/images/bell.png"
# Refined ignore list with patterns or specific device names
ignore_patterns=(
"--(avrcp)"
"Bluetooth Speaker"
"Other Device
Name"
)
# Create layout file with default layout if it does not exist
if [ ! -f "$layout_file" ]; then
echo "Creating layout file..."
default_layout=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2 | tr -d '[:space:]' | cut -d ',' -f 1 2>/dev/null)
default_layout=${default_layout:-"us"} # Default to 'us' layout
echo "$default_layout" > "$layout_file"
echo "Default layout set to $default_layout"
fi
current_layout=$(cat "$layout_file")
echo "Current layout: $current_layout"
# Read available layouts from settings file
if [ -f "$settings_file" ]; then
kb_layout_line=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2)
# Remove leading and trailing spaces around each layout
kb_layout_line=$(echo "$kb_layout_line" | tr -d '[:space:]')
IFS=',' read -r -a layout_mapping <<< "$kb_layout_line"
else
echo "Settings file not found!"
exit 1
fi
layout_count=${#layout_mapping[@]}
echo "Number of layouts: $layout_count"
# Find current layout index and calculate next layout
for ((i = 0; i < layout_count; i++)); do
if [ "$current_layout" == "${layout_mapping[i]}" ]; then
current_index=$i
break
fi
done
next_index=$(( (current_index + 1) % layout_count ))
new_layout="${layout_mapping[next_index]}"
echo "Next layout: $new_layout"
# Function to get keyboard names
get_keyboard_names() {
hyprctl devices -j | jq -r '.keyboards[].name'
}
# Function to check if a device matches any ignore pattern
is_ignored() {
local device_name=$1
for pattern in "${ignore_patterns[@]}"; do
if [[ "$device_name" == *"$pattern"* ]]; then
return 0 # Device matches ignore pattern
fi
done
return 1 # Device does not match any ignore pattern
}
# Function to change keyboard layout
change_layout() {
local error_found=false
while read -r name; do
if is_ignored "$name"; then
echo "Skipping ignored device: $name"
continue
fi
echo "Switching layout for $name to $new_layout..."
hyprctl switchxkblayout "$name" next
if [ $? -ne 0 ]; then
echo "Error while switching layout for $name." >&2
error_found=true
fi
done <<< "$(get_keyboard_names)"
$error_found && return 1
return 0
}
# Execute layout change and notify
if ! change_layout; then
notify-send -u low -t 2000 'kb_layout' 'Error: Layout change failed'
echo "Layout change failed." >&2
exit 1
else
notify-send -u low -i "$notif_icon" "New kb_layout: $new_layout"
echo "Layout change notification sent."
fi
echo "$new_layout" > "$layout_file"

View file

@ -1,32 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# For disabling touchpad.
# Edit the Touchpad_Device on ~/.config/hypr/UserConfigs/Laptops.conf according to your system
# use hyprctl devices to get your system touchpad device name
# source https://github.com/hyprwm/Hyprland/discussions/4283?sort=new#discussioncomment-8648109
notif="$HOME/.config/swaync/images/bell.png"
export STATUS_FILE="$XDG_RUNTIME_DIR/touchpad.status"
enable_touchpad() {
printf "true" >"$STATUS_FILE"
notify-send -u low -i $notif "Enabling touchpad"
hyprctl keyword '$TOUCHPAD_ENABLED' "true" -r
}
disable_touchpad() {
printf "false" >"$STATUS_FILE"
notify-send -u low -i $notif "Disabling touchpad"
hyprctl keyword '$TOUCHPAD_ENABLED' "false" -r
}
if ! [ -f "$STATUS_FILE" ]; then
enable_touchpad
else
if [ $(cat "$STATUS_FILE") = "true" ]; then
disable_touchpad
elif [ $(cat "$STATUS_FILE") = "false" ]; then
enable_touchpad
fi
fi

View file

@ -1,143 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Scripts for volume controls for audio and mic
iDIR="$HOME/.config/swaync/icons"
sDIR="$HOME/.config/hypr/scripts"
# Get Volume
get_volume() {
volume=$(pamixer --get-volume)
if [[ "$volume" -eq "0" ]]; then
echo "Muted"
else
echo "$volume%"
fi
}
# Get icons
get_icon() {
current=$(get_volume)
if [[ "$current" == "Muted" ]]; then
echo "$iDIR/volume-mute.png"
elif [[ "${current%\%}" -le 30 ]]; then
echo "$iDIR/volume-low.png"
elif [[ "${current%\%}" -le 60 ]]; then
echo "$iDIR/volume-mid.png"
else
echo "$iDIR/volume-high.png"
fi
}
# Notify
notify_user() {
if [[ "$(get_volume)" == "Muted" ]]; then
notify-send -e -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" "Volume: Muted"
else
notify-send -e -h int:value:"$(get_volume | sed 's/%//')" -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" "Volume: $(get_volume)"
"$sDIR/Sounds.sh" --volume
fi
}
# Increase Volume
inc_volume() {
if [ "$(pamixer --get-mute)" == "true" ]; then
toggle_mute
else
pamixer -i 5 --allow-boost --set-limit 150 && notify_user
fi
}
# Decrease Volume
dec_volume() {
if [ "$(pamixer --get-mute)" == "true" ]; then
toggle_mute
else
pamixer -d 5 && notify_user
fi
}
# Toggle Mute
toggle_mute() {
if [ "$(pamixer --get-mute)" == "false" ]; then
pamixer -m && notify-send -e -u low -i "$iDIR/volume-mute.png" "Volume Switched OFF"
elif [ "$(pamixer --get-mute)" == "true" ]; then
pamixer -u && notify-send -e -u low -i "$(get_icon)" "Volume Switched ON"
fi
}
# Toggle Mic
toggle_mic() {
if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
pamixer --default-source -m && notify-send -e -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
pamixer -u --default-source u && notify-send -e -u low -i "$iDIR/microphone.png" "Microphone Switched ON"
fi
}
# Get Mic Icon
get_mic_icon() {
current=$(pamixer --default-source --get-volume)
if [[ "$current" -eq "0" ]]; then
echo "$iDIR/microphone-mute.png"
else
echo "$iDIR/microphone.png"
fi
}
# Get Microphone Volume
get_mic_volume() {
volume=$(pamixer --default-source --get-volume)
if [[ "$volume" -eq "0" ]]; then
echo "Muted"
else
echo "$volume%"
fi
}
# Notify for Microphone
notify_mic_user() {
volume=$(get_mic_volume)
icon=$(get_mic_icon)
notify-send -e -h int:value:"$volume" -h "string:x-canonical-private-synchronous:volume_notif" -u low -i "$icon" "Mic-Level: $volume"
}
# Increase MIC Volume
inc_mic_volume() {
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
toggle_mic
else
pamixer --default-source -i 5 && notify_mic_user
fi
}
# Decrease MIC Volume
dec_mic_volume() {
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
toggle-mic
else
pamixer --default-source -d 5 && notify_mic_user
fi
}
# Execute accordingly
if [[ "$1" == "--get" ]]; then
get_volume
elif [[ "$1" == "--inc" ]]; then
inc_volume
elif [[ "$1" == "--dec" ]]; then
dec_volume
elif [[ "$1" == "--toggle" ]]; then
toggle_mute
elif [[ "$1" == "--toggle-mic" ]]; then
toggle_mic
elif [[ "$1" == "--get-icon" ]]; then
get_icon
elif [[ "$1" == "--get-mic-icon" ]]; then
get_mic_icon
elif [[ "$1" == "--mic-inc" ]]; then
inc_mic_volume
elif [[ "$1" == "--mic-dec" ]]; then
dec_mic_volume
else
get_volume
fi

View file

@ -1,39 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Wallust Colors for current wallpaper
# Define the path to the swww cache directory
cache_dir="$HOME/.cache/swww/"
# Get a list of monitor outputs
monitor_outputs=($(ls "$cache_dir"))
# Initialize a flag to determine if the ln command was executed
ln_success=false
# Get current focused monitor
current_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
echo $current_monitor
# Construct the full path to the cache file
cache_file="$cache_dir$current_monitor"
echo $cache_file
# Check if the cache file exists for the current monitor output
if [ -f "$cache_file" ]; then
# Get the wallpaper path from the cache file
wallpaper_path=$(cat "$cache_file")
echo $wallpaper_path
# symlink the wallpaper to the location Rofi can access
if ln -sf "$wallpaper_path" "$HOME/.config/rofi/.current_wallpaper"; then
ln_success=true # Set the flag to true upon successful execution
fi
# copy the wallpaper for wallpaper effects
cp -r "$wallpaper_path" "$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
fi
# Check the flag before executing further commands
if [ "$ln_success" = true ]; then
# execute wallust
echo 'about to execute wallust'
# execute wallust skipping tty and terminal changes
wallust run "$wallpaper_path" -s &
fi

View file

@ -1,39 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Not my own work. This was added through Github PR. Credit to original author
#----- Optimized bars animation without much CPU usage increase --------
bar="▁▂▃▄▅▆▇█"
dict="s/;//g"
# Calculate the length of the bar outside the loop
bar_length=${#bar}
# Create dictionary to replace char with bar
for ((i = 0; i < bar_length; i++)); do
dict+=";s/$i/${bar:$i:1}/g"
done
# Create cava config
config_file="/tmp/bar_cava_config"
cat >"$config_file" <<EOF
[general]
bars = 10
[input]
method = pulse
source = auto
[output]
method = raw
raw_target = /dev/stdout
data_format = ascii
ascii_max_range = 7
EOF
# Kill cava if it's already running
pkill -f "cava -p $config_file"
# Read stdout from cava and perform substitution in a single sed command
cava -p "$config_file" | sed -u "$dict"

View file

@ -1,56 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Script for waybar layout or configs
set -euo pipefail
IFS=$'\n\t'
# Define directories
waybar_layouts="$HOME/.config/waybar/configs"
waybar_config="$HOME/.config/waybar/config"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
rofi_config="$HOME/.config/rofi/config-waybar-layout.rasi"
# Function to display menu options
menu() {
options=()
while IFS= read -r file; do
options+=("$(basename "$file")")
done < <(find "$waybar_layouts" -maxdepth 1 -type f -exec basename {} \; | sort)
printf '%s\n' "${options[@]}"
}
# Apply selected configuration
apply_config() {
ln -sf "$waybar_layouts/$1" "$waybar_config"
#restart_waybar_if_needed
"${SCRIPTSDIR}/Refresh.sh" &
}
# Main function
main() {
choice=$(menu | rofi -i -dmenu -config "$rofi_config")
if [[ -z "$choice" ]]; then
echo "No option selected. Exiting."
exit 0
fi
case $choice in
"no panel")
pgrep -x "waybar" && pkill waybar || true
;;
*)
apply_config "$choice"
;;
esac
}
# Kill Rofi if already running before execution
if pgrep -x "rofi" >/dev/null; then
pkill rofi
exit 0
fi
main

View file

@ -1,50 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Script for waybar styles
set -euo pipefail
IFS=$'\n\t'
# Define directories
waybar_styles="$HOME/.config/waybar/style"
waybar_style="$HOME/.config/waybar/style.css"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
rofi_config="$HOME/.config/rofi/config-waybar-style.rasi"
# Function to display menu options
menu() {
options=()
while IFS= read -r file; do
if [ -f "$waybar_styles/$file" ]; then
options+=("$(basename "$file" .css)")
fi
done < <(find "$waybar_styles" -maxdepth 1 -type f -name '*.css' -exec basename {} \; | sort)
printf '%s\n' "${options[@]}"
}
# Apply selected style
apply_style() {
ln -sf "$waybar_styles/$1.css" "$waybar_style"
"${SCRIPTSDIR}/Refresh.sh" &
}
# Main function
main() {
choice=$(menu | rofi -i -dmenu -config "$rofi_config")
if [[ -z "$choice" ]]; then
echo "No option selected. Exiting."
exit 0
fi
apply_style "$choice"
}
# Kill Rofi if already running before execution
if pgrep -x "rofi" >/dev/null; then
pkill rofi
exit 0
fi
main

View file

@ -1,57 +0,0 @@
#!/bin/bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# wlogout (Power, Screen Lock, Suspend, etc)
# Set variables for parameters
A_2160=700
B_2160=700
A_1600=480
B_1600=480
A_1440=450
B_1440=450
A_1080=350
B_1080=350
A_720=50
B_720=50
# Check if wlogout is already running
if pgrep -x "wlogout" > /dev/null; then
pkill -x "wlogout"
exit 0
fi
# Detect monitor resolution and scaling factor
resolution=$(hyprctl -j monitors | jq -r '.[] | select(.focused==true) | .height / .scale' | awk -F'.' '{print $1}')
hypr_scale=$(hyprctl -j monitors | jq -r '.[] | select(.focused==true) | .scale')
# Set parameters based on screen resolution and scaling factor
if ((resolution >= 2160)); then
T_val=$(awk "BEGIN {printf \"%.0f\", $A_2160 * 2160 * $hypr_scale / $resolution}")
B_val=$(awk "BEGIN {printf \"%.0f\", $B_2160 * 2160 * $hypr_scale / $resolution}")
echo "Setting parameters for resolution >= 4k"
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
elif ((resolution >= 1600 && resolution < 2160)); then
T_val=$(awk "BEGIN {printf \"%.0f\", $A_1600 * 1600 * $hypr_scale / $resolution}")
B_val=$(awk "BEGIN {printf \"%.0f\", $B_1600 * 1600 * $hypr_scale / $resolution}")
echo "Setting parameters for resolution >= 2.5k and < 4k"
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
elif ((resolution >= 1440 && resolution < 1600)); then
T_val=$(awk "BEGIN {printf \"%.0f\", $A_1440 * 1440 * $hypr_scale / $resolution}")
B_val=$(awk "BEGIN {printf \"%.0f\", $B_1440 * 1440 * $hypr_scale / $resolution}")
echo "Setting parameters for resolution >= 2k and < 2.5k"
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
elif ((resolution >= 1080 && resolution < 1440)); then
T_val=$(awk "BEGIN {printf \"%.0f\", $A_1080 * 1080 * $hypr_scale / $resolution}")
B_val=$(awk "BEGIN {printf \"%.0f\", $B_1080 * 1080 * $hypr_scale / $resolution}")
echo "Setting parameters for resolution >= 1080p and < 2k"
wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val &
elif ((resolution >= 720 && resolution < 1080)); then
T_val=$(awk "BEGIN {printf \"%.0f\", $A_720 * 720 * $hypr_scale / $resolution}")
B_val=$(awk "BEGIN {printf \"%.0f\", $B_720 * 720 * $hypr_scale / $resolution}")
echo "Setting parameters for resolution >= 720p and < 1080p"
wlogout --protocol layer-shell -b 3 -T $T_val -B $B_val &
else
echo "Setting default parameters"
wlogout &
fi

View file

@ -1,15 +0,0 @@
#!/bin/bash
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
if [ "$HYPRGAMEMODE" = 1 ] ; then
hyprctl --batch "\
keyword animations:enabled 0;\
keyword decoration:drop_shadow 0;\
keyword decoration:blur:passes 0;\
keyword general:gaps_in 0;\
keyword general:gaps_out 0;\
keyword general:border_size 1;\
keyword decoration:rounding 0"
exit
fi
hyprctl reload

View file

@ -1,47 +0,0 @@
#!/bin/bash
# _ _ _ _ _
# | | _____ _ _| |__ (_)_ __ __| (_)_ __ __ _ ___
# | |/ / _ \ | | | '_ \| | '_ \ / _` | | '_ \ / _` / __|
# | < __/ |_| | |_) | | | | | (_| | | | | | (_| \__ \
# |_|\_\___|\__, |_.__/|_|_| |_|\__,_|_|_| |_|\__, |___/
# |___/ |___/
#
# -----------------------------------------------------
# Get keybindings location based on variation
# -----------------------------------------------------
config_file=$(cat ~/.config/hypr/conf/keybinding.conf)
config_file=${config_file/source = ~/}
config_file=${config_file/source=~/}
# -----------------------------------------------------
# Path to keybindings config file
# -----------------------------------------------------
config_file="/home/$USER$config_file"
echo "Reading from: $config_file"
keybinds=""
# Detect Start String
while read -r line
do
if [[ "$line" == "bind"* ]]; then
line="$(echo "$line" | sed 's/$mainMod/SUPER/g')"
line="$(echo "$line" | sed 's/bind = //g')"
line="$(echo "$line" | sed 's/bindm = //g')"
IFS='#'
read -a strarr <<<"$line"
kb_str=${strarr[0]}
cm_str=${strarr[1]}
IFS=','
read -a kbarr <<<"$kb_str"
item="${kbarr[0]} + ${kbarr[1]}"$'\r'"${cm_str:1}"
keybinds=$keybinds$item$'\n'
fi
done < "$config_file"
sleep 0.2
rofi -dmenu -i -markup -eh 2 -replace -p "Keybinds" -config ~/.config/rofi/config-compact.rasi <<< "$keybinds"

View file

@ -1,4 +0,0 @@
#!/bin/bash
hyprctl dispatch workspaceopt allfloat
notify-send "Windows on this workspace toggled to floating/tiling"

View file

@ -1,22 +0,0 @@
#!/bin/bash
sec=60
_setWallpaperRandomly() {
waypaper --random
echo ":: Next wallpaper in $sec seconds..."
sleep $sec
_setWallpaperRandomly
}
if [ ! -f ~/.cache/hyprland/wallpaper-automation ] ;then
touch ~/.cache/hyprland/wallpaper-automation
echo ":: Start wallpaper automation script"
notify-send "Wallpaper automation process started" "Wallpaper will be changed every $sec seconds."
_setWallpaperRandomly
else
rm ~/.cache/hyprland/wallpaper-automation
notify-send "Wallpaper automation process stopped."
echo ":: Wallpaper automation script process $wp stopped"
wp=$(pgrep -f wallpaper-automation.sh)
kill -KILL $wp
fi

View file

@ -1,11 +0,0 @@
#!/bin/bash
CONFIG_FILES="$HOME/.config/waybar/config.jsonc $HOME/.config/waybar/style.css"
trap "killall waybar" EXIT
while true; do
waybar &
inotifywait -e create,modify $CONFIG_FILES
killall waybar
done

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View file

@ -1,21 +0,0 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */
# /* wallust template - colors-hyprland */
$background = rgb(000004)
$foreground = rgb(ECE7E2)
$color0 = rgb(000004)
$color1 = rgb(292B33)
$color2 = rgb(523F41)
$color3 = rgb(49596E)
$color4 = rgb(825752)
$color5 = rgb(905E56)
$color6 = rgb(978B80)
$color7 = rgb(DCD4CD)
$color8 = rgb(9A948F)
$color9 = rgb(373944)
$color10 = rgb(6E5457)
$color11 = rgb(627792)
$color12 = rgb(AE746D)
$color13 = rgb(C07D73)
$color14 = rgb(C9B9AB)
$color15 = rgb(DCD4CD)

View file

@ -1,80 +0,0 @@
# vim:ft=kitty
## name: Catppuccin-Mocha
## author: Pocco81 (https://github.com/Pocco81)
## license: MIT
## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf
## blurb: Soothing pastel theme for the high-spirited!
# The basic colors
foreground #CDD6F4
background #1E1E2E
selection_foreground #1E1E2E
selection_background #F5E0DC
# Cursor colors
cursor #F5E0DC
cursor_text_color #1E1E2E
# URL underline color when hovering with mouse
url_color #F5E0DC
# Kitty window border colors
active_border_color #B4BEFE
inactive_border_color #6C7086
bell_border_color #F9E2AF
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Tab bar colors
active_tab_foreground #11111B
active_tab_background #CBA6F7
inactive_tab_foreground #CDD6F4
inactive_tab_background #181825
tab_bar_background #11111B
# Colors for marks (marked text in the terminal)
mark1_foreground #1E1E2E
mark1_background #B4BEFE
mark2_foreground #1E1E2E
mark2_background #CBA6F7
mark3_foreground #1E1E2E
mark3_background #74C7EC
# The 16 terminal colors
# black
color0 #45475A
color8 #585B70
# red
color1 #F38BA8
color9 #F38BA8
# green
color2 #A6E3A1
color10 #A6E3A1
# yellow
color3 #F9E2AF
color11 #F9E2AF
# blue
color4 #89B4FA
color12 #89B4FA
# magenta
color5 #F5C2E7
color13 #F5C2E7
# cyan
color6 #94E2D5
color14 #94E2D5
# white
color7 #BAC2DE
color15 #A6ADC8

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 MiB

View file

@ -1,62 +0,0 @@
background #000000
foreground #F8F8F2
cursor #F8F8F2
# Black
color0 #3D4C5F
color8 #56687E
# Red
color1 #EE4F84
color9 #F48FB1
# Green
color2 #53E2AE
color10 #A1EFD3
# Yellow
color3 #F1FF52
color11 #F1FA8C
# Blue
color4 #6498EF
color12 #92B6F4
# Magenta
color5 #985EFF
color13 #BD99FF
# Cyan
color6 #24D1E7
color14 #87DFEB
# White
color7 #E5E5E5
color15 #F8F8F2
# The foreground for selections
selection_foreground #F8F8F2
# The background for selections
selection_background #8ab4f2
# Emacs terminal background
color17 #323F4E
# Emacs terminal modeline
color23 #1a1a1a
# The color for the border of the active window
active_border_color #F1FA8C
# The color for the border of inactive windows
inactive_border_color #56687E
url_color #6498EF
active_tab_foreground #F8F8F2
active_tab_background #24D1E7
inactive_tab_foreground #F8F8F2
inactive_tab_background #1a1a1a

View file

@ -1,111 +0,0 @@
{
"files": [
"README.md"
],
"badgeTemplate": "[![All Contributors](https://img.shields.io/badge/all_contributors-<%= contributors.length %>-green.svg?style=for-the-badge)](#contributors)",
"contributorTemplate": "<a href=\"<%= contributor.profile %>\"><b><%= contributor.name %></b></a><br /><%= contributions %>",
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "scopatz",
"name": "Anthony Scopatz",
"avatar_url": "https://avatars2.githubusercontent.com/u/320553?v=4",
"profile": "http://www.scopatz.com",
"contributions": [
"doc"
]
},
{
"login": "orangecoloured",
"name": "RCKT",
"avatar_url": "https://avatars3.githubusercontent.com/u/3314891?v=4",
"profile": "https://rckt.cc",
"contributions": [
"theme"
]
},
{
"login": "varmanishant",
"name": "varmanishant",
"avatar_url": "https://avatars1.githubusercontent.com/u/4084912?v=4",
"profile": "https://github.com/varmanishant",
"contributions": [
"theme"
]
},
{
"login": "rlerdorf",
"name": "Rasmus Lerdorf",
"avatar_url": "https://avatars3.githubusercontent.com/u/54641?v=4",
"profile": "https://github.com/rlerdorf",
"contributions": [
"bug",
"ideas"
]
},
{
"login": "Luflosi",
"name": "Luflosi",
"avatar_url": "https://avatars1.githubusercontent.com/u/15217907?v=4",
"profile": "https://github.com/Luflosi",
"contributions": [
"fix",
"question",
"doc"
]
},
{
"login": "connorholyday",
"name": "Connor Holyday",
"avatar_url": "https://avatars1.githubusercontent.com/u/4559119?v=4",
"profile": "https://holyday.me",
"contributions": [
"fix"
]
},
{
"login": "BlueDrink9",
"name": "BlueDrink9",
"avatar_url": "https://avatars3.githubusercontent.com/u/26474254?v=4",
"profile": "https://github.com/BlueDrink9",
"contributions": [
"bug"
]
},
{
"login": "brujoand",
"name": "Anders Brujordet",
"avatar_url": "https://avatars1.githubusercontent.com/u/124421?v=4",
"profile": "https://github.com/brujoand",
"contributions": [
"theme"
]
},
{
"login": "rjshrjndrn",
"name": "Rajesh Rajendran",
"avatar_url": "https://avatars3.githubusercontent.com/u/2563385?v=4",
"profile": "http://www.hackouts.com",
"contributions": [
"fix"
]
}
],
"types": {
"theme": {
"symbol": "😻",
"description": "New theme added to the collection"
},
"fix": {
"symbol": "🛠️",
"description": "Fixed a theme"
}
},
"contributorsPerLine": 7,
"projectName": "kitty-themes",
"projectOwner": "dexpota",
"repoType": "github",
"repoHost": "https://github.com",
"commitConvention": "none"
}

View file

@ -1,8 +0,0 @@
# Contributing to kitty-themes
We always welcome your pull request! To start contributing follow these simple
steps:
1. Fork the repo and create your branch from `master`;
2. Add your theme as config file under `themes` directory;
3. Issue the pull request through github;

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2019 Fabrizio Destro <fabrizio@destro.dev>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Some files were not shown because too many files have changed in this diff Show more