Compare commits

..

13 Commits

Author SHA1 Message Date
dev 8006eb5eb7 add wallpaper latest 2026-08-11 10:14:22 +05:30
dev 6a75f679a9 update 2026-08-11 10:13:15 +05:30
dev 3a99b9b9c8 updates 2026-08-10 12:04:58 +05:30
dev b556ef9551 Add quickshell 2026-08-10 11:58:43 +05:30
cool-mist 426fe32a63 add screenshot 2026-02-06 20:40:57 +05:30
cool-mist 624032f2fb Add screenshot capability 2026-02-06 20:40:31 +05:30
cool-mist 1708c3ca21 fix workspace rules 2026-01-22 15:51:26 +05:30
cool-mist d5fda9750b updates 2026-01-04 11:34:47 +05:30
cool-mist 89e34ddb3b updates 2026-01-02 22:55:04 +05:30
cool-mist c0c947c548 update kitty configs 2025-08-31 19:25:30 +05:30
cool-mist 5c43b86914 Remove window opacity 2025-08-03 13:34:32 +05:30
cool-mist 59cf0822aa Add kitty 2025-07-01 19:31:40 +05:30
cool-mist 4f6d0b6035 Updates 2025-07-01 19:30:22 +05:30
18 changed files with 939 additions and 89 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

+6 -4
View File
@@ -90,9 +90,8 @@ if ${use_color} ; then
PS1+='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] ' PS1+='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
fi fi
#BSD#@export CLICOLOR=1
#GNU#@alias ls='ls --color=auto'
alias grep='grep --colour=auto' alias grep='grep --colour=auto'
alias ls='ls --color=auto'
else else
# show root@ when we don't have colors # show root@ when we don't have colors
PS1+='\u@\h \w \$ ' PS1+='\u@\h \w \$ '
@@ -109,8 +108,7 @@ fi
# Try to keep environment pollution down, EPA loves us. # Try to keep environment pollution down, EPA loves us.
unset use_color sh unset use_color sh
alias ls='ls --color=auto' alias ff='fastfetch'
alias grep='grep --color=auto'
. "$HOME/.cargo/env" . "$HOME/.cargo/env"
eval "$(starship init bash)" eval "$(starship init bash)"
@@ -125,6 +123,7 @@ export CARGO_HOME=$HOME/.cargo
export PATH=$PATH:$CARGO_HOME/bin export PATH=$PATH:$CARGO_HOME/bin
# #
export XDG_CONFIG_HOME=$HOME/.config export XDG_CONFIG_HOME=$HOME/.config
export XDG_CACHE_HOME=$HOME/.cache
export PATH=$PATH:$XDG_CONFIG_HOME export PATH=$PATH:$XDG_CONFIG_HOME
# #
export CHIPS_LAB_HOME=$HOME/projects/homelab/services export CHIPS_LAB_HOME=$HOME/projects/homelab/services
@@ -134,3 +133,6 @@ export CHIPS_LAB_HOME=$HOME/projects/homelab/services
export NVM_DIR="$HOME/.config/nvm" export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
export PATH="$PATH:/home/chips/toolchains/install/ct-ng/bin"
export LEDGER_FILE=/home/chips/seagate/finance/2026.journal
alias sshk="kitten ssh"
+1 -1
View File
@@ -1,5 +1,5 @@
[user] [user]
email = n.suryap@gmail.com email = dev@neophyte.me
name = cool-mist name = cool-mist
[init] [init]
defaultBranch = main defaultBranch = main
+65 -55
View File
@@ -1,4 +1,3 @@
# ####################################################################################### # #######################################################################################
# AUTOGENERATED HYPRLAND CONFIG. # AUTOGENERATED HYPRLAND CONFIG.
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT, # PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT,
@@ -22,7 +21,6 @@
################ ################
# See https://wiki.hyprland.org/Configuring/Monitors/ # See https://wiki.hyprland.org/Configuring/Monitors/
monitor= DP-1, 1920x1080, 0x0, 1
monitor= HDMI-A-1, 1920x1080, 1920x0, 1 monitor= HDMI-A-1, 1920x1080, 1920x0, 1
@@ -37,8 +35,9 @@ $terminal = kitty
$fileManager = dolphin $fileManager = dolphin
$menu = tofi-drun --drun-launch=true $menu = tofi-drun --drun-launch=true
$colorPicker = hyprpicker -a $colorPicker = hyprpicker -a
$screenshot = /home/chips/.local/bin/grimblast copy area
$browser = brave $browser = brave
$browser_incog = brave --incognito
################# #################
### AUTOSTART ### ### AUTOSTART ###
@@ -47,24 +46,21 @@ $browser = brave
# Autostart necessary processes (like notifications daemons, status bars, etc.) # Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this: # Or execute your favorite apps at launch like this:
exec-once = waybar exec-once = quickshell
exec-once = sway-nc exec-once = sway-nc
exec-once = systemctl --user start hyprpolkitagent exec-once = systemctl --user start hyprpolkitagent
exec-once = hyprpaper exec-once = hyprpaper
# exec-once = nm-applet & #exec-once = $terminal
# exec-once = waybar & hyprpaper & firefox #exec-once = hyprctl dispatch workspace 3
############################# #############################
### ENVIRONMENT VARIABLES ### ### ENVIRONMENT VARIABLES ###
############################# #############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/ # See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24 env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24
##################### #####################
### LOOK AND FEEL ### ### LOOK AND FEEL ###
##################### #####################
@@ -73,10 +69,10 @@ env = HYPRCURSOR_SIZE,24
# https://wiki.hyprland.org/Configuring/Variables/#general # https://wiki.hyprland.org/Configuring/Variables/#general
general { general {
gaps_in = 5 gaps_in = 2
gaps_out = 10 gaps_out = 2
border_size = 1 border_size = 0
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
@@ -93,12 +89,12 @@ general {
# https://wiki.hyprland.org/Configuring/Variables/#decoration # https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration { decoration {
rounding = 5 rounding = 0
rounding_power = 3 rounding_power = 0
# Change transparency of focused and unfocused windows # Change transparency of focused and unfocused windows
active_opacity = 0.95 active_opacity = 1
inactive_opacity = 0.9 inactive_opacity = 1
fullscreen_opacity = 1 fullscreen_opacity = 1
shadow { shadow {
@@ -110,7 +106,7 @@ decoration {
# https://wiki.hyprland.org/Configuring/Variables/#blur # https://wiki.hyprland.org/Configuring/Variables/#blur
blur { blur {
enabled = true enabled = false
size = 5 size = 5
passes = 1 passes = 1
vibrancy = 0.1696 vibrancy = 0.1696
@@ -157,22 +153,16 @@ animations {
# windowrule = bordersize 0, floating:0, onworkspace:f[1] # windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1] # windowrule = rounding 0, floating:0, onworkspace:f[1]
windowrule = workspace 10,title:(.*)MOVE TO WORKSPACE 10(.*) workspace = 1, monitor:0, default:true, persistent:true
windowrule = center,title:(.*)MOVE TO WORKSPACE 10(.*) workspace = 2, monitor:0, default:true, persistent:true
windowrule = size 800 500,title:(.*)MOVE TO WORKSPACE 10(.*) workspace = 3, monitor:0, default:true, persistent:true
workspace = 4, monitor:0, default:true, persistent:true
workspace = 1, monitor:DP-1, default:true, persistent:true workspace = 5, monitor:0, default:true, persistent:true
workspace = 2, monitor:DP-1, default:true, persistent:true workspace = 6, monitor:0, default:true, persistent:true
workspace = 3, monitor:DP-1, default:true, persistent:true
workspace = 4, monitor:DP-1, default:true, persistent:true
workspace = 5, monitor:DP-1, default:true, persistent:true
workspace = 9, monitor:HDMI-A-1, default:true, persistent:true
workspace = 8, monitor:HDMI-A-1, default:true, persistent:true
workspace = 10, monitor:HDMI-A-1, default:true, persistent:true
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle { dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section b1 # pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section b1
preserve_split = true # You probably want this preserve_split = true # You probably want this
} }
@@ -209,11 +199,6 @@ input {
} }
} }
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = false
}
# Example per-device config # Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device { device {
@@ -237,10 +222,12 @@ bind = $mainMod, F, fullscreen,
# bind = $mainMod, M, exit, # bind = $mainMod, M, exit,
bind = $mainMod, E, exec, $fileManager bind = $mainMod, E, exec, $fileManager
bind = $mainMod, C, exec, $colorPicker bind = $mainMod, C, exec, $colorPicker
bind = $mainMod, S, exec, $screenshot
bind = $mainMod, B, exec, $browser bind = $mainMod, B, exec, $browser
# bind = $mainMod, V, togglefloating, bind = $mainMod, N, exec, $browser_incog
bind = $mainMod, T, togglefloating,
bind = $mainMod, R, exec, $menu bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle # bind = $mainMod, P, pseudo, # dwindle
# bind = $mainMod, J, togglesplit, # dwindle # bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, Q, exec, hyprlock bind = $mainMod, Q, exec, hyprlock
bind = $mainMod SHIFT, Q, exec, dm-tool switch-to-greeter bind = $mainMod SHIFT, Q, exec, dm-tool switch-to-greeter
@@ -258,10 +245,6 @@ bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4 bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5 bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6 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] # Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 1, movetoworkspace, 1
@@ -270,14 +253,10 @@ bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6 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) # Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic # bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic # bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Volume keys # Volume keys
bindel = $mainMod, V , exec, pactl set-sink-volume @DEFAULT_SINK@ -5% bindel = $mainMod, V , exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
@@ -288,14 +267,13 @@ bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow bindm = $mainMod, mouse:273, resizewindow
# resize windows # resize windows
bindel = $mainMod SHIFT, right, resizeactive, 20 0 bindel = $mainMod SHIFT, right, resizeactive, 50 0
bindel = $mainMod SHIFT, left, resizeactive, -20 0 bindel = $mainMod SHIFT, left, resizeactive, -50 0
bindel = $mainMod SHIFT, up, resizeactive, 0, -20 bindel = $mainMod SHIFT, up, resizeactive, 0, -50
bindel = $mainMod SHIFT, down, resizeactive, 0, 20 bindel = $mainMod SHIFT, down, resizeactive, 0, 50
# On/Off monitors # On/Off monitors
bind = $mainMod CTRL, K, exec, sleep 1 && hyprctl dispatch dpms toggle DP-1 bind = $mainMod CTRL, L, exec, sleep 0.5 && hyprctl dispatch dpms toggle HDMI-A-1
bind = $mainMod CTRL, L, exec, sleep 1 && hyprctl dispatch dpms toggle HDMI-A-1
############################## ##############################
### WINDOWS AND WORKSPACES ### ### WINDOWS AND WORKSPACES ###
@@ -308,7 +286,39 @@ bind = $mainMod CTRL, L, exec, sleep 1 && hyprctl dispatch dpms toggle HDMI-A-1
# windowrule = float,class:^(kitty)$,title:^(kitty)$ # windowrule = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this. # Ignore maximize requests from apps. You'll probably like this.
windowrule = suppressevent maximize, class:.* windowrule {
# Ignore maximize requests from all apps. You'll probably like this.
name = suppress-maximize-events
match:class = .*
suppress_event = maximize
}
windowrule {
name = debug-builds
match:title = .*Debug:.*
center = on
size = 900 900
float = yes
}
# Fix some dragging issues with XWayland # Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 windowrule {
# Fix some dragging issues with XWayland
name = fix-xwayland-drags
match:class = ^$
match:title = ^$
match:xwayland = true
match:float = true
match:fullscreen = false
match:pin = false
no_focus = true
}
debug {
overlay = false
disable_logs = false
gl_debugging = true
enable_stdout_logs = true
}
+8 -2
View File
@@ -1,2 +1,8 @@
preload = /home/chips/Pictures/wallpapers/summer_dreams.png ipc = off
wallpaper =, /home/chips/Pictures/wallpapers/summer_dreams.png splash = off
wallpaper {
monitor = HDMI-A-1
path = /home/chips/Pictures/wallpapers/abandoned.png
fit_mode = cover
}
@@ -0,0 +1,73 @@
# vim:ft=kitty
## name: Nord
## author: Eric N. Vander Weele
## upstream: https://www.nordtheme.com/
## blurb: Nord theme utilizing the full Frost and Aurora palette.
# Basic colors
foreground #d8dee9
background #2e3440
selection_foreground #d8dee9
selection_background #434c5e
# Cursor colors
cursor #d8dee9
cursor_text_color #3b4252
# URL underline color when hovering with mouse
url_color #0087bd
# Window border colors and terminal bell colors
active_border_color #81a1c1
inactive_border_color #4c566a
bell_border_color #88c0d0
visual_bell_color none
# Tab bar colors
active_tab_foreground #3b4252
active_tab_background #88c0d0
inactive_tab_foreground #e5e9f0
inactive_tab_background #4c566a
tab_bar_background #3b4252
tab_bar_margin_color none
# Mark colors (marked text in the terminal)
mark1_foreground #3b4252
mark1_background #88c0d0
mark2_foreground #3b4252
mark2_background #bf616a
mark3_foreground #3b4252
mark3_background #ebcb8b
# The basic 16 colors
# black
color0 #3b4252
color8 #4c566a
# red
color1 #bf616a
color9 #bf616a
# green
color2 #a3be8c
color10 #a3be8c
# yellow
color3 #ebcb8b
color11 #d08770
# blue
color4 #81a1c1
color12 #5e81ac
# magenta
color5 #b48ead
color13 #b48ead
# cyan
color6 #88c0d0
color14 #8fbcbb
# white
color7 #e5e9f0
color15 #eceff4
@@ -0,0 +1,58 @@
enable_audio_bell no
inactive_text_alpha 0.5
tab_bar_edge bottom
tab_bar_style slant
tab_powerline_style angled
tab_bar_min_tabs 1
active_tab_font_style bold
inactive_tab_font_style normal
hide_window_decorations on
# Layout management
enabled_layouts splits, stack
map ctrl+shift+z toggle_layout stack
map ctrl+shift+\ launch --location=vsplit --cwd=current
map ctrl+shift+p launch --location=hsplit --cwd=current
map ctrl+shift+h neighboring_window left
map ctrl+shift+l neighboring_window right
map ctrl+shift+j neighboring_window down
map ctrl+shift+k neighboring_window up
map ctrl+shift+up move_window up
map ctrl+shift+left move_window left
map ctrl+shift+right move_window right
map ctrl+shift+down move_window down
map ctrl+shift+x show_scrollback
map ctrl+shift+w close_window
map ctrl+right resize_window wider 10
map ctrl+left resize_window narrower 10
map ctrl+down resize_window shorter 10
map ctrl+up resize_window taller 10
map ctrl+shift+1 goto_tab 1
map ctrl+shift+2 goto_tab 2
map ctrl+shift+3 goto_tab 3
map ctrl+shift+4 goto_tab 4
map ctrl+shift+5 goto_tab 5
map ctrl+shift+6 goto_tab 6
map ctrl+shift+7 goto_tab 7
map ctrl+shift+8 goto_tab 8
map ctrl+shift+9 goto_tab 9
# BEGIN_KITTY_THEME
# Nord
include current-theme.conf
# END_KITTY_THEME
# BEGIN_KITTY_FONTS
font_family family='IntoneMono Nerd Font Mono'
bold_font auto
italic_font auto
bold_italic_font auto
font_size 12.0
# END_KITTY_FONTS
@@ -0,0 +1,54 @@
# BEGIN_KITTY_FONTS
font_family family="JetBrainsMono Nerd Font Mono"
bold_font auto
italic_font auto
bold_italic_font auto
enable_audio_bell no
inactive_text_alpha 0.5
tab_bar_edge bottom
tab_bar_style slant
tab_powerline_style angled
tab_bar_min_tabs 1
active_tab_font_style bold
inactive_tab_font_style normal
hide_window_decorations on
# Layout management
enabled_layouts splits, stack
map ctrl+shift+z toggle_layout stack
map ctrl+shift+\ launch --location=vsplit --cwd=current
map ctrl+shift+p launch --location=hsplit --cwd=current
map ctrl+shift+h neighboring_window left
map ctrl+shift+l neighboring_window right
map ctrl+shift+j neighboring_window down
map ctrl+shift+k neighboring_window up
map ctrl+shift+up move_window up
map ctrl+shift+left move_window left
map ctrl+shift+right move_window right
map ctrl+shift+down move_window down
map ctrl+shift+w close_window
map ctrl+right resize_window wider 10
map ctrl+left resize_window narrower 10
map ctrl+down resize_window shorter 10
map ctrl+up resize_window taller 10
map ctrl+shift+1 goto_tab 1
map ctrl+shift+2 goto_tab 2
map ctrl+shift+3 goto_tab 3
map ctrl+shift+4 goto_tab 4
map ctrl+shift+5 goto_tab 5
map ctrl+shift+6 goto_tab 6
map ctrl+shift+7 goto_tab 7
map ctrl+shift+8 goto_tab 8
map ctrl+shift+9 goto_tab 9
# BEGIN_KITTY_THEME
# Nord
include current-theme.conf
# END_KITTY_THEME
@@ -0,0 +1,19 @@
pragma Singleton
import Quickshell
Singleton {
readonly property string barBg: "#1a1b26"
readonly property int barWidth: 20
readonly property int infoBoxHeight: 20
readonly property int fontSize: 10
readonly property string infoBoxBg: "#1a1b26"
readonly property string infoBoxActive: "#7a1b26"
readonly property string infoBoxUrgent: "#4a1b26"
readonly property string infoTextActiveFg: "#ffffff"
readonly property string infoTextFg: "#7aa2f7"
readonly property string separatorFg: "#aaaaaa"
}
@@ -0,0 +1,8 @@
import QtQuick
import QtQuick.Layouts
Rectangle {
Layout.preferredWidth: BarSettings.barWidth
Layout.preferredHeight: BarSettings.infoBoxHeight
color: BarSettings.infoBoxBg
}
@@ -0,0 +1,9 @@
import QtQuick
Text {
color: BarSettings.infoTextFg
font.bold: true
font.pixelSize: BarSettings.fontSize
horizontalAlignment: Text.AlignHCenter
anchors.centerIn: parent
}
@@ -0,0 +1,8 @@
import Quickshell
import QtQuick
MouseArea {
anchors.fill: parent
onClicked: Quickshell.execDetached(["kitty", "-e", "nmtui"])
cursorShape: Qt.PointingHandCursor
}
@@ -0,0 +1,6 @@
InfoBox {
InfoText {
color: BarSettings.separatorFg
text: "〰"
}
}
+226
View File
@@ -0,0 +1,226 @@
import Quickshell
import Quickshell.Hyprland
import Quickshell.Networking
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
Variants {
model: Quickshell.screens
PanelWindow {
anchors.top: true
anchors.left: true
anchors.bottom: true
width: BarSettings.barWidth
color: BarSettings.barBg
SystemClock {
id: clock
precision: SystemClock.Seconds
}
Timer {
interval: 5000
running: true
repeat: true
onTriggered: {
cpu_proc.running = true;
gpu_proc.running = true;
}
}
Process {
id: cpu_proc
command: ["hmon", "cpu"]
running: true
stdout: StdioCollector {
onStreamFinished: cpu_text.text = text
}
}
Process {
id: gpu_proc
command: ["hmon", "gpu"]
running: true
stdout: StdioCollector {
onStreamFinished: gpu_text.text = text
}
}
ColumnLayout {
id: workspaces
width: parent.width
anchors {
horizontalCenter: parent.horizontalCenter
}
height: 130
spacing: 1
Repeater {
model: 6
InfoBox {
property var ws: Hyprland.workspaces.values.find(w => w.id === index + 1)
property var isActive: Hyprland.focusedWorkspace?.id === (index + 1)
property var isUrgent: ws?.urgent ?? false
color: isActive ? BarSettings.infoBoxActive : isUrgent ? BarSettings.infoBoxUrgent : BarSettings.infoBoxBg
InfoText {
id: seconds_text
text: index + 1
color: parent.isActive ? BarSettings.infoTextActiveFg : BarSettings.infoTextFg
MouseArea {
anchors.fill: parent
onClicked: Hyprland.dispatch("workspace " + (index + 1))
}
}
}
}
Separator {}
InfoBox {
InfoText {
text: "c"
}
}
InfoBox {
InfoText {
id: cpu_text
}
}
InfoBox {
InfoText {
text: "g"
}
}
InfoBox {
InfoText {
id: gpu_text
}
}
Separator {}
InfoBox {
InfoText {
text: "ᛒ"
font.pixelSize: 15
MouseArea {
anchors.fill: parent
onClicked: Quickshell.execDetached("blueberry")
cursorShape: Qt.PointingHandCursor
}
}
}
InfoBox {
InfoText {
text: "🕪"
font.pixelSize: 13
}
MouseArea {
anchors.fill: parent
onClicked: Quickshell.execDetached("pavucontrol")
cursorShape: Qt.PointingHandCursor
}
}
Separator {}
InfoBox {
InfoText {
text: Networking.connectivity == 4 ? "🌍" : "🚫"
NetworkClick {}
}
}
InfoBox {
InfoText {
text: Networking.devices.values.find(n => n.type == 2).connected ? "🖧" : "🚫"
NetworkClick {}
}
}
InfoBox {
InfoText {
text: Networking.devices.values.find(n => n.type == 1).connected ? "ᯤ" : "🚫"
NetworkClick {}
}
}
}
ColumnLayout {
anchors {
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
bottomMargin: 8
}
spacing: 5
InfoBox {
InfoText {
text: "vpn"
font.pixelSize: 10
}
}
InfoBox {
InfoText {
text: "on"
font.pixelSize: 10
color: "green"
}
MouseArea {
anchors.fill: parent
onClicked: Quickshell.execDetached(["kitty", "-e", "vpn_on"])
cursorShape: Qt.PointingHandCursor
}
}
InfoBox {
InfoText {
text: "off"
font.pixelSize: 10
color: "brown"
}
MouseArea {
anchors.fill: parent
onClicked: Quickshell.execDetached(["kitty", "-e", "vpn_off"])
cursorShape: Qt.PointingHandCursor
}
}
Separator {}
Repeater {
model: Qt.formatDateTime(clock.date, "hh:mm").split(":")
InfoBox {
InfoText {
text: modelData
}
}
}
InfoBox {
color: "black"
InfoText {
property var ss: Qt.formatDateTime(clock.date, "ss")
text: ss
color: "white"
}
}
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"layer": "top", "layer": "top",
"position": "top", "position": "right",
"modules-left": [ "modules-left": [
"disk", "disk",
"memory", "memory",
+1 -25
View File
@@ -1,15 +1,10 @@
* { * {
border: none; border: none;
font-size: 13px; font-size: 10px;
font-family: "JetBrainsMono Nerd Font,JetBrainsMono NF" ; font-family: "JetBrainsMono Nerd Font,JetBrainsMono NF" ;
min-height: 10px; min-height: 10px;
} }
window#waybar {
background: transparent;
border-radius: 0 0 15px 15px;
}
#custom-logo { #custom-logo {
margin-left: 10px; margin-left: 10px;
} }
@@ -17,24 +12,19 @@ window#waybar {
.modules-right { .modules-right {
padding: 0px; padding: 0px;
background: #225496; background: #225496;
border-radius: 0 0 0 15px;
border: 2px solid #4F0B1E; border: 2px solid #4F0B1E;
} }
.modules-center { .modules-center {
border-radius: 15px 15px 15px 15px;
background: transparent;
} }
.modules-left { .modules-left {
background: #225496; background: #225496;
border-radius: 0 0 15px 0;
border: 2px solid #4F0B1E; border: 2px solid #4F0B1E;
} }
#workspaces { #workspaces {
background: #225496; background: #225496;
border-radius: 0 0 15px 15px;
border: 2px solid #4F0B1E; border: 2px solid #4F0B1E;
} }
@@ -70,8 +60,6 @@ window#waybar {
#window, #window,
#clock { #clock {
color: #ffffff; color: #ffffff;
margin-left: 10px;
margin-right: 10px;
} }
#pulseaudio { #pulseaudio {
@@ -104,17 +92,5 @@ window#waybar {
#battery.critical:not(.charging) { #battery.critical:not(.charging) {
background-color: #f53c3c; background-color: #f53c3c;
color: #ffffff; color: #ffffff;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
} }
@keyframes blink {
to {
background-color: #ffffff;
color: #000000;
}
}
+395
View File
@@ -0,0 +1,395 @@
#!/usr/bin/env bash
## Grimblast: a helper for screenshots within hyprland
## Requirements:
## - `grim`: screenshot utility for wayland
## - `slurp`: to select an area
## - `hyprctl`: to read properties of current window (provided by Hyprland)
## - `hyprpicker`: to freeze the screen when selecting area
## - `wl-copy`: clipboard utility (provided by wl-clipboard)
## - `jq`: json utility to parse hyprctl output
## - `notify-send`: to show notifications (provided by libnotify)
## Those are needed to be installed, if unsure, run `grimblast check`
##
## See `man 1 grimblast` or `grimblast usage` for further details.
## Author: Misterio (https://github.com/misterio77)
## This tool is based on grimshot, with swaymsg commands replaced by their
## hyprctl equivalents.
## https://github.com/OctopusET/sway-contrib/blob/master/grimshot/grimshot
NAME="$(basename "$0")"
# Check whether another instance is running
GRIMBLASTLOCK="${XDG_RUNTIME_DIR:-${XDG_CACHE_DIR:-$HOME/.cache}}/$NAME.lock"
killhyprpicker() {
pidof -q hyprpicker && pkill hyprpicker
}
cleanup() {
rm -f "$GRIMBLASTLOCK"
killhyprpicker
}
# Entry point
[[ -e $GRIMBLASTLOCK ]] && exit 2
trap cleanup EXIT
touch "$GRIMBLASTLOCK"
[[ $HYPRLAND_INSTANCE_SIGNATURE ]] || {
echo "Error: HYPRLAND_INSTANCE_SIGNATURE not set! (is hyprland running?)" >&2
exit 1
}
# Globals
# General settings. These can be set by the user. See man page for more details
[[ $DEFAULT_TARGET_DIR ]] || {
USER_DIRS="${XDG_CONFIG_HOME:-$HOME/.config}/user-dirs.dirs"
[[ -f $USER_DIRS ]] && source "$USER_DIRS"
DEFAULT_TARGET_DIR="${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}"
}
: "${DEFAULT_TMP_EDITOR_DIR:=/tmp}" "${GRIMBLAST_EDITOR:=gimp}" "${DATE_FORMAT:=%Y%m%d_%H%M%S}"
# Screenshot variables. In addition to these, there's:
# SCALE
EXPIRE_TIME=3000
FILETYPE=png
# These have an effect depending on whether they're set
# CURSOR
# FREEZE
NOTIFY=false
SHOW_FILE_NOTIFY=false
WAIT=0
# Notification functions
notify() {
notify-send -t "$EXPIRE_TIME" -a "$NAME" "$@"
}
notify::ok() {
if $NOTIFY; then
notify "$@"
fi
}
notify::error() {
if $NOTIFY; then
TITLE=${2:-"Screenshot"}
MESSAGE=${1:-"Error taking screenshot with grim"}
notify -u critical "$TITLE" "$MESSAGE"
fi
echo "$1" >&2
}
# If invoked with -h, print usage before dying
die() {
killhyprpicker
local msg OPTIND option
while getopts 'h' option; do
case "$option" in
h) usage >&2 ;;
?) echo "die: Usage: die [-h] MESSAGE" >&2 ;;
esac
done
shift $((OPTIND - 1))
msg=${1:-Bye}
notify::error "Error: $msg"
exit 2
}
notify::showparentdir() {
if $SHOW_FILE_NOTIFY; then
if [[ $(notify::ok -A 'Show file="Show file"' "$@") == "Show file" ]]; then
gdbus call --session --dest org.freedesktop.FileManager1 --object-path /org/freedesktop/FileManager1 --method org.freedesktop.FileManager1.ShowItems "['file://$4']" "" || die "Could not display parent directory with gdbus"
fi
else
notify::ok "$@"
fi
}
# Miscellaneous functions
grimblast::wait() {
[[ $WAIT == 0 ]] || sleep "$WAIT"
}
get-mime-type() {
case $FILETYPE in
png | jpeg) echo "image/$FILETYPE" ;;
ppm) echo "image/x-portable-pixmap" ;;
esac
}
freezescreen() {
hyprpicker -rz &
sleep 0.2
}
# Checks whether an individual tool is available
# If invoked with -q (quiet), no output is printed, useful for use in tests
# Exits with 0 if the tool is available, non-zero otherwise
grimblast::check() {
local cmd result OPTIND option status quiet=false
while getopts 'q' option; do
case "$option" in
q) quiet=true ;;
?) echo 'check: Usage: check [-q] COMMAND' >&2 ;;
esac
done
shift $((OPTIND - 1))
cmd=$1
command -v "$cmd" >/dev/null 2>&1
status=$?
if ((status == 0)); then
result="OK"
else
result="NOT FOUND"
fi
$quiet || echo " $cmd: $result"
return $status
}
# The actual grim command used is printed to stderr
screenshot() {
local file="$1" geom="$2" output="$3"
xargs --verbose grim <<<"${CURSOR:+-c} ${SCALE:+-s \"$SCALE\"} -t \"$FILETYPE\" ${output:+-o \"$output\"} ${geom:+-g \"$geom\"} \"$file\""
}
# Special actions: usage and check. These are special because they allow to exit early
usage() {
cat <<EOF
Usage:
$NAME [-n|--notify] [-o|--openparentdir] [-e|--expire-time <ms>] [-c|--cursor] [-f|--freeze] [-w N|--wait N] [-s N|--scale N] [-t TYPE|--filetype TYPE] (copy|save|copysave|edit) [active|screen|output|area] [FILE|-]
$NAME check
$NAME usage
Commands:
copy: Copy the screenshot data into the clipboard.
save: Save the screenshot to a regular file or '-' to pipe to STDOUT.
copysave: Combine the previous 2 options.
edit: Open screenshot in the image editor of your choice (default is gimp). See man page for info.
check: Verify if required tools are installed and exit.
usage: Show this message and exit.
Targets:
active: Currently active window.
screen: All visible outputs.
output: Currently active output.
area: Manually select a region or window.
EOF
}
check() {
local status
echo "Checking if required tools are installed. If something is missing, install it to your system and make it available in PATH..."
for t in grim slurp hyprctl hyprpicker wl-copy jq notify-send; do
grimblast::check "$t" || status=$?
done
exit $status
}
# Target functions. These calculate global variables depending on the target.
# Specifically: GEOM, WHAT and OUTPUT. Not all would be set by all targets.
# These would later be used by the action functions.
active() {
local focused app_id
grimblast::wait
focused="$(hyprctl activewindow -j)" app_id=$(jq -r '.class' <<<"$focused")
GEOM="$(jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' <<<"$focused")"
WHAT="$app_id window"
}
screen() {
grimblast::wait
GEOM=""
WHAT="Screen"
}
output() {
grimblast::wait
GEOM=""
OUTPUT=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name')
WHAT="$OUTPUT"
}
area() {
local fullscreen_workspaces workspaces windows
[[ $CURSOR ]] && die "'-c|--cursor' cannot be used with TARGET 'area'"
if [[ $FREEZE ]] && grimblast::check -q hyprpicker; then
freezescreen
fi
# disable animation for layer namespace "selection" (slurp)
# this removes the black border seen around screenshots
hyprctl keyword layerrule "match:selection, no_anim on" >/dev/null
fullscreen_workspaces="$(hyprctl workspaces -j | jq -r 'map(select(.hasfullscreen) | .id)')"
workspaces="$(hyprctl monitors -j | jq -r '[(foreach .[] as $monitor (0; if $monitor.specialWorkspace.name == "" then $monitor.activeWorkspace else $monitor.specialWorkspace end)).id]')"
windows="$(hyprctl clients -j | jq -r --argjson workspaces "$workspaces" --argjson fullscreenWorkspaces "$fullscreen_workspaces" 'map((select(([.workspace.id] | inside($workspaces)) and ([.workspace.id] | inside($fullscreenWorkspaces) | not) or .fullscreen > 0)))')"
# convert SLURP_ARGS to a bash array
IFS=' ' read -ra SLURP_ARGS <<<"$SLURP_ARGS"
GEOM="$(jq -r '.[] | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' <<<"$windows" | slurp "${SLURP_ARGS[@]}")"
grimblast::wait
# Check if user exited slurp without selecting the area
[[ $GEOM ]] || {
killhyprpicker
exit 1
}
WHAT="Area"
}
# Action functions.
# These take the global variables set by target functions and take the screenshot.
copy() {
[[ $FILETYPE == "png" ]] || die "Clipboard operations only support PNG format. Use --filetype png or omit the option."
screenshot - "$GEOM" "$OUTPUT" | wl-copy --type "$(get-mime-type)" || die "Clipboard error"
notify::ok "$WHAT copied to buffer"
}
save() {
local file title message
file="${1:-$DEFAULT_TARGET_DIR/$(date +"$DATE_FORMAT").$FILETYPE}"
screenshot "$file" "$GEOM" "$OUTPUT" || die "Could not take screenshot with grim"
title="Screenshot of $WHAT" message="$(basename "$file")"
killhyprpicker
notify::showparentdir "$title" "$message" -i "$file"
echo "$file"
}
edit() {
local editor="${GRIMBLAST_EDITOR%% *}"
grimblast::check -q "$editor" || die "$editor is not installed"
local file title message
file="${1:-$DEFAULT_TMP_EDITOR_DIR/$(date +"$DATE_FORMAT").$FILETYPE}"
screenshot "$file" "$GEOM" "$OUTPUT" || die "Could not take screenshot"
title="Screenshot of $WHAT" message="Open screenshot in $editor"
notify::ok "$title" "$message" -i "$file"
$GRIMBLAST_EDITOR "$file"
echo "$file"
}
copysave() {
[[ $FILETYPE == "png" ]] || die "Clipboard operations only support PNG format. Use --filetype png or omit the option."
local file title message
file="${1:-$DEFAULT_TARGET_DIR/$(date +"$DATE_FORMAT").$FILETYPE}"
if [[ $file = "-" ]]; then
screenshot - "$GEOM" "$OUTPUT" | tee >(wl-copy --type "$(get-mime-type)") || die "Clipboard error"
notify::ok "$WHAT copied to buffer and piped to stdout"
else
screenshot - "$GEOM" "$OUTPUT" | tee "$file" | wl-copy --type "$(get-mime-type)" || die "Clipboard error"
title="Screenshot of $WHAT"
message="$WHAT copied to buffer and saved to $file"
notify::showparentdir "$title" "$message" -i "$file"
echo "$file"
fi
}
parse-action() {
local action="$1" file="$2"
case "$action" in
copy) copy ;;
save) save "$file" ;;
edit) edit "$file" ;;
copysave) copysave "$file" ;;
*) die -h "Unknown action $action" ;;
esac
}
parse-target() {
case "$1" in
active) active ;;
screen) screen ;;
output) output ;;
area) area ;;
window) die "$(echo -e "Target 'window' is now included in 'area'.\nSimply run with 'area' and single click over the window you want.")" ;;
*) die -h "Unknown target to take a screen shot from $1" ;;
esac
}
main() {
local parsed_args
parsed_args="$(getopt --name "$NAME" --options 'nocfe:w:s:t:' --longoptions 'notify,openparentdir,cursor,freeze,expire-time:,wait:,scale:,filetype:' -- "$@")" || {
usage >&2
exit 1
}
eval "set -- $parsed_args"
while true; do
case $1 in
-n | --notify)
NOTIFY=true
shift
;;
-o | --openparentdir)
SHOW_FILE_NOTIFY=true
shift
;;
-e | --expire-time)
[[ $2 =~ ^[0-9]+$ ]] || {
echo "$NAME: ERROR: Invalid or missing argument for '-e|--expire-time'" >&2
exit 1
}
EXPIRE_TIME=$2
shift 2
;;
-c | --cursor)
CURSOR=1
shift
;;
-f | --freeze)
FREEZE=1
shift
;;
-w | --wait)
[[ $2 =~ ^[0-9]*(\.[0-9]+)?$ ]] || {
echo "$NAME: ERROR: Invalid value for '-w|--wait'" >&2
exit 1
}
WAIT=$2
shift 2
;;
-s | --scale)
[[ "$2" =~ ^[0-9]*(\.[0-9]+)?$ ]] || {
echo "$NAME: ERROR: Invalid or missing argument for '-s|--scale'" >&2
exit 1
}
SCALE=$2
shift 2
;;
-t | --filetype)
[[ "$2" =~ ^(png|ppm|jpeg)$ ]] || {
echo "$NAME: ERROR: Invalid filetype '$2'. Must be png, ppm, or jpeg" >&2
exit 1
}
FILETYPE=$2
shift 2
;;
--)
shift
break
;;
*)
echo "$NAME: ERROR: Invalid option: $1" >&2
usage >&2
exit 1
;;
esac
done
ACTION="${1:-usage}"
if [[ $1 =~ ^(usage|check)$ ]]; then
"$1"
exit
fi
shift
parse-target "${1:-screen}"
shift
parse-action "$ACTION" "$@"
}
main "$@"