update
This commit is contained in:
		
							parent
							
								
									ab3169b469
								
							
						
					
					
						commit
						71341a60a2
					
				| 
						 | 
				
			
			@ -0,0 +1,465 @@
 | 
			
		|||
[%General]
 | 
			
		||||
author=elkrien based on Arc Dark style
 | 
			
		||||
comment=Catppuccin-Latte-Blue
 | 
			
		||||
combo_focus_rect=true
 | 
			
		||||
spread_menuitems=true
 | 
			
		||||
left_tabs=true
 | 
			
		||||
mirror_doc_tabs=true
 | 
			
		||||
scroll_width=8
 | 
			
		||||
attach_active_tab=true
 | 
			
		||||
composite=true
 | 
			
		||||
menu_shadow_depth=7
 | 
			
		||||
tooltip_shadow_depth=0
 | 
			
		||||
splitter_width=7
 | 
			
		||||
check_size=16
 | 
			
		||||
slider_width=4
 | 
			
		||||
slider_handle_width=18
 | 
			
		||||
slider_handle_length=18
 | 
			
		||||
textless_progressbar=false
 | 
			
		||||
menubar_mouse_tracking=true
 | 
			
		||||
slim_toolbars=false
 | 
			
		||||
toolbutton_style=1
 | 
			
		||||
x11drag=menubar_and_primary_toolbar
 | 
			
		||||
double_click=false
 | 
			
		||||
translucent_windows=false
 | 
			
		||||
blurring=false
 | 
			
		||||
popup_blurring=true
 | 
			
		||||
opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,qmplay2
 | 
			
		||||
group_toolbar_buttons=false
 | 
			
		||||
vertical_spin_indicators=false
 | 
			
		||||
fill_rubberband=false
 | 
			
		||||
spread_progressbar=true
 | 
			
		||||
merge_menubar_with_toolbar=true
 | 
			
		||||
small_icon_size=16
 | 
			
		||||
large_icon_size=32
 | 
			
		||||
button_icon_size=16
 | 
			
		||||
scroll_arrows=false
 | 
			
		||||
iconless_pushbutton=true
 | 
			
		||||
toolbar_icon_size=16
 | 
			
		||||
combo_as_lineedit=true
 | 
			
		||||
button_contents_shift=false
 | 
			
		||||
groupbox_top_label=true
 | 
			
		||||
inline_spin_indicators=true
 | 
			
		||||
joined_inactive_tabs=false
 | 
			
		||||
layout_spacing=2
 | 
			
		||||
submenu_overlap=0
 | 
			
		||||
tooltip_delay=-1
 | 
			
		||||
animate_states=false
 | 
			
		||||
transient_scrollbar=true
 | 
			
		||||
alt_mnemonic=true
 | 
			
		||||
combo_menu=true
 | 
			
		||||
layout_margin=4
 | 
			
		||||
no_window_pattern=false
 | 
			
		||||
respect_DE=true
 | 
			
		||||
scroll_min_extent=36
 | 
			
		||||
scrollable_menu=false
 | 
			
		||||
scrollbar_in_view=false
 | 
			
		||||
spin_button_width=16
 | 
			
		||||
submenu_delay=250
 | 
			
		||||
tree_branch_line=true
 | 
			
		||||
progressbar_thickness=8
 | 
			
		||||
click_behavior=0
 | 
			
		||||
contrast=1.00
 | 
			
		||||
dialog_button_layout=0
 | 
			
		||||
drag_from_buttons=false
 | 
			
		||||
hide_combo_checkboxes=false
 | 
			
		||||
intensity=1.00
 | 
			
		||||
no_inactiveness=false
 | 
			
		||||
reduce_menu_opacity=0
 | 
			
		||||
reduce_window_opacity=10
 | 
			
		||||
saturation=1.00
 | 
			
		||||
shadowless_popup=false
 | 
			
		||||
transient_groove=false
 | 
			
		||||
 | 
			
		||||
[GeneralColors]
 | 
			
		||||
window.color=#EFF1F5
 | 
			
		||||
base.color=#E6E9EF
 | 
			
		||||
alt.base.color=#E6E9EF
 | 
			
		||||
button.color=#CCD0DA
 | 
			
		||||
light.color=#BCC0CC
 | 
			
		||||
mid.light.color=#BCC0CC
 | 
			
		||||
dark.color=#E6E9EF
 | 
			
		||||
mid.color=#E6E9EF
 | 
			
		||||
highlight.color=#1E66F5
 | 
			
		||||
inactive.highlight.color=#1E66F5
 | 
			
		||||
text.color=#4C4F69
 | 
			
		||||
window.text.color=#4C4F69
 | 
			
		||||
button.text.color=#4C4F69
 | 
			
		||||
disabled.text.color=#ACB0BE
 | 
			
		||||
tooltip.text.color=#4C4F69
 | 
			
		||||
highlight.text.color=#E6E9EF
 | 
			
		||||
link.color=#DC8A78
 | 
			
		||||
link.visited.color=#1E66F5
 | 
			
		||||
 | 
			
		||||
[ItemView]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=itemview
 | 
			
		||||
interior.element=itemview
 | 
			
		||||
frame=true
 | 
			
		||||
interior=true
 | 
			
		||||
text.iconspacing=3
 | 
			
		||||
text.toggle.color=#E6E9EF
 | 
			
		||||
 | 
			
		||||
[RadioButton]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior.element=radio
 | 
			
		||||
 | 
			
		||||
[CheckBox]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior.element=checkbox
 | 
			
		||||
 | 
			
		||||
[TreeExpander]
 | 
			
		||||
indicator.element=tree
 | 
			
		||||
indicator.size=8
 | 
			
		||||
 | 
			
		||||
[ToolTip]
 | 
			
		||||
frame.top=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame=true
 | 
			
		||||
 | 
			
		||||
[PanelButtonCommand]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=button
 | 
			
		||||
frame.element=button
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
text.press.color=#E6E9EF
 | 
			
		||||
text.toggle.color=#E6E9EF
 | 
			
		||||
 | 
			
		||||
[PanelButtonTool]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
 | 
			
		||||
[DockTitle]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
text.margin.top=5
 | 
			
		||||
text.margin.bottom=5
 | 
			
		||||
text.margin.left=5
 | 
			
		||||
text.margin.right=5
 | 
			
		||||
indicator.size=0
 | 
			
		||||
 | 
			
		||||
[Dock]
 | 
			
		||||
interior.element=toolbar
 | 
			
		||||
frame.element=toolbar
 | 
			
		||||
frame=true
 | 
			
		||||
interior=true
 | 
			
		||||
 | 
			
		||||
[GroupBox]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=tabframe
 | 
			
		||||
interior=true
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[Focus]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=true
 | 
			
		||||
frame.element=focus
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
frame.patternsize=20
 | 
			
		||||
 | 
			
		||||
[GenericFrame]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=common
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
 | 
			
		||||
[Slider]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=true
 | 
			
		||||
frame.element=slider
 | 
			
		||||
interior.element=slider
 | 
			
		||||
frame.top=3
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
focusFrame=true
 | 
			
		||||
 | 
			
		||||
[SliderCursor]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=true
 | 
			
		||||
interior.element=slidercursor
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[LineEdit]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=lineedit
 | 
			
		||||
interior.element=lineedit
 | 
			
		||||
 | 
			
		||||
[IndicatorSpinBox]
 | 
			
		||||
inherits=LineEdit
 | 
			
		||||
frame.element=lineedit
 | 
			
		||||
interior.element=lineedit
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=2
 | 
			
		||||
frame.right=2
 | 
			
		||||
indicator.size=8
 | 
			
		||||
 | 
			
		||||
[DropDownButton]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=0
 | 
			
		||||
frame.right=1
 | 
			
		||||
indicator.size=8
 | 
			
		||||
 | 
			
		||||
[ToolboxTab]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=tabframe
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
 | 
			
		||||
[Tab]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=tab
 | 
			
		||||
frame.element=tab
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
indicator.size=10
 | 
			
		||||
text.normal.color=#ACB0BE
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
text.press.color=#4C4F69
 | 
			
		||||
text.toggle.color=#4C4F69
 | 
			
		||||
focusFrame=true
 | 
			
		||||
 | 
			
		||||
[TabBarFrame]
 | 
			
		||||
inherits=GenericFrame
 | 
			
		||||
frame=true
 | 
			
		||||
frame.element=tabBarFrame
 | 
			
		||||
interior=false
 | 
			
		||||
frame.top=4
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
 | 
			
		||||
[TabFrame]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=tabframe
 | 
			
		||||
interior.element=tabframe
 | 
			
		||||
 | 
			
		||||
[Dialog]
 | 
			
		||||
inherits=TabBarFrame
 | 
			
		||||
frame.element=tabframe
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
 | 
			
		||||
[HeaderSection]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=header
 | 
			
		||||
frame.element=header
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
frame.expansion=0
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
text.focus.color=#1E66F5
 | 
			
		||||
text.press.color=#4C4F69
 | 
			
		||||
text.toggle.color=#4C4F69
 | 
			
		||||
indicator.element=harrow
 | 
			
		||||
 | 
			
		||||
[SizeGrip]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior=false
 | 
			
		||||
indicator.element=resize-grip
 | 
			
		||||
indicator.size=0
 | 
			
		||||
 | 
			
		||||
[Toolbar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=menubar
 | 
			
		||||
frame.element=menubar
 | 
			
		||||
frame=true
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
text.press.color=#1E66F5
 | 
			
		||||
text.toggle.color=#1E66F5
 | 
			
		||||
text.bold=false
 | 
			
		||||
 | 
			
		||||
[MenuBar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=menubar
 | 
			
		||||
interior.element=menubar
 | 
			
		||||
frame.bottom=0
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
frame.expansion=0
 | 
			
		||||
text.bold=false
 | 
			
		||||
 | 
			
		||||
[ToolbarButton]
 | 
			
		||||
frame.element=tbutton
 | 
			
		||||
interior.element=tbutton
 | 
			
		||||
indicator.element=arrow
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
text.press.color=#E6E9EF
 | 
			
		||||
text.toggle.color=#E6E9EF
 | 
			
		||||
text.bold=false
 | 
			
		||||
 | 
			
		||||
[Scrollbar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
indicator.size=0
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[ScrollbarGroove]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[ScrollbarSlider]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=false
 | 
			
		||||
frame.element=scrollbarslider
 | 
			
		||||
frame.top=4
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
 | 
			
		||||
[ProgressbarContents]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=true
 | 
			
		||||
frame.element=progress-pattern
 | 
			
		||||
interior.element=progress-pattern
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=2
 | 
			
		||||
frame.right=2
 | 
			
		||||
 | 
			
		||||
[Progressbar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=progress
 | 
			
		||||
interior.element=progress
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=2
 | 
			
		||||
frame.right=2
 | 
			
		||||
text.margin=0
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
text.press.color=#E6E9EF
 | 
			
		||||
text.toggle.color=#E6E9EF
 | 
			
		||||
text.bold=false
 | 
			
		||||
frame.expansion=18
 | 
			
		||||
 | 
			
		||||
[RadioButton]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
 | 
			
		||||
[Menu]
 | 
			
		||||
frame.element=menu
 | 
			
		||||
interior.element=menu
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
text.press.color=#E6E9EF
 | 
			
		||||
text.toggle.color=#E6E9EF
 | 
			
		||||
text.bold=false
 | 
			
		||||
frame.top=3
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
 | 
			
		||||
[MenuItem]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=menuitem
 | 
			
		||||
indicator.size=8
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
text.press.color=#4C4F69
 | 
			
		||||
 | 
			
		||||
[MenuBarItem]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=menubaritem
 | 
			
		||||
frame=false
 | 
			
		||||
text.margin.top=3
 | 
			
		||||
text.margin.bottom=3
 | 
			
		||||
text.margin.left=5
 | 
			
		||||
text.margin.right=5
 | 
			
		||||
 | 
			
		||||
[StatusBar]
 | 
			
		||||
inherits=Toolbar
 | 
			
		||||
frame.element=toolbar
 | 
			
		||||
font.bold=true
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
frame=true
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=0
 | 
			
		||||
 | 
			
		||||
[TitleBar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior=false
 | 
			
		||||
text.margin.top=2
 | 
			
		||||
text.margin.bottom=2
 | 
			
		||||
text.margin.left=3
 | 
			
		||||
text.margin.right=3
 | 
			
		||||
 | 
			
		||||
[ComboBox]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
indicator.size=8
 | 
			
		||||
frame.top=3
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
text.margin.top=1
 | 
			
		||||
text.margin.bottom=1
 | 
			
		||||
text.margin.left=3
 | 
			
		||||
text.margin.right=3
 | 
			
		||||
text.toggle.color=#4C4F69
 | 
			
		||||
 | 
			
		||||
[ToolboxTab]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
text.normal.color=#4C4F69
 | 
			
		||||
text.press.color=#4C4F69
 | 
			
		||||
text.focus.color=#4C4F69
 | 
			
		||||
 | 
			
		||||
[Hacks]
 | 
			
		||||
transparent_dolphin_view=false
 | 
			
		||||
blur_konsole=true
 | 
			
		||||
transparent_ktitle_label=true
 | 
			
		||||
transparent_menutitle=true
 | 
			
		||||
respect_darkness=true
 | 
			
		||||
kcapacitybar_as_progressbar=true
 | 
			
		||||
force_size_grip=false
 | 
			
		||||
iconless_pushbutton=true
 | 
			
		||||
iconless_menu=false
 | 
			
		||||
disabled_icon_opacity=100
 | 
			
		||||
lxqtmainmenu_iconsize=0
 | 
			
		||||
normal_default_pushbutton=true
 | 
			
		||||
single_top_toolbar=false
 | 
			
		||||
tint_on_mouseover=0
 | 
			
		||||
transparent_pcmanfm_sidepane=true
 | 
			
		||||
transparent_pcmanfm_view=false
 | 
			
		||||
blur_translucent=true
 | 
			
		||||
centered_forms=false
 | 
			
		||||
kinetic_scrolling=false
 | 
			
		||||
middle_click_scroll=false
 | 
			
		||||
no_selection_tint=false
 | 
			
		||||
noninteger_translucency=false
 | 
			
		||||
style_vertical_toolbars=false
 | 
			
		||||
blur_only_active_window=false
 | 
			
		||||
 | 
			
		||||
[Window]
 | 
			
		||||
interior=true
 | 
			
		||||
interior.element=window
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=0
 | 
			
		||||
frame.left=0
 | 
			
		||||
frame.right=0
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
		 After Width: | Height: | Size: 146 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,465 @@
 | 
			
		|||
[%General]
 | 
			
		||||
author=elkrien based on Arc Dark style
 | 
			
		||||
comment=Catppuccin-Mocha-Blue
 | 
			
		||||
combo_focus_rect=true
 | 
			
		||||
spread_menuitems=true
 | 
			
		||||
left_tabs=true
 | 
			
		||||
mirror_doc_tabs=true
 | 
			
		||||
scroll_width=8
 | 
			
		||||
attach_active_tab=true
 | 
			
		||||
composite=true
 | 
			
		||||
menu_shadow_depth=7
 | 
			
		||||
tooltip_shadow_depth=0
 | 
			
		||||
splitter_width=7
 | 
			
		||||
check_size=16
 | 
			
		||||
slider_width=4
 | 
			
		||||
slider_handle_width=18
 | 
			
		||||
slider_handle_length=18
 | 
			
		||||
textless_progressbar=false
 | 
			
		||||
menubar_mouse_tracking=true
 | 
			
		||||
slim_toolbars=false
 | 
			
		||||
toolbutton_style=1
 | 
			
		||||
x11drag=menubar_and_primary_toolbar
 | 
			
		||||
double_click=false
 | 
			
		||||
translucent_windows=false
 | 
			
		||||
blurring=false
 | 
			
		||||
popup_blurring=true
 | 
			
		||||
opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,qmplay2
 | 
			
		||||
group_toolbar_buttons=false
 | 
			
		||||
vertical_spin_indicators=false
 | 
			
		||||
fill_rubberband=false
 | 
			
		||||
spread_progressbar=true
 | 
			
		||||
merge_menubar_with_toolbar=true
 | 
			
		||||
small_icon_size=16
 | 
			
		||||
large_icon_size=32
 | 
			
		||||
button_icon_size=16
 | 
			
		||||
scroll_arrows=false
 | 
			
		||||
iconless_pushbutton=true
 | 
			
		||||
toolbar_icon_size=16
 | 
			
		||||
combo_as_lineedit=true
 | 
			
		||||
button_contents_shift=false
 | 
			
		||||
groupbox_top_label=true
 | 
			
		||||
inline_spin_indicators=true
 | 
			
		||||
joined_inactive_tabs=false
 | 
			
		||||
layout_spacing=2
 | 
			
		||||
submenu_overlap=0
 | 
			
		||||
tooltip_delay=-1
 | 
			
		||||
animate_states=false
 | 
			
		||||
transient_scrollbar=true
 | 
			
		||||
alt_mnemonic=true
 | 
			
		||||
combo_menu=true
 | 
			
		||||
layout_margin=4
 | 
			
		||||
no_window_pattern=false
 | 
			
		||||
respect_DE=true
 | 
			
		||||
scroll_min_extent=36
 | 
			
		||||
scrollable_menu=false
 | 
			
		||||
scrollbar_in_view=false
 | 
			
		||||
spin_button_width=16
 | 
			
		||||
submenu_delay=250
 | 
			
		||||
tree_branch_line=true
 | 
			
		||||
progressbar_thickness=8
 | 
			
		||||
click_behavior=0
 | 
			
		||||
contrast=1.00
 | 
			
		||||
dialog_button_layout=0
 | 
			
		||||
drag_from_buttons=false
 | 
			
		||||
hide_combo_checkboxes=false
 | 
			
		||||
intensity=1.00
 | 
			
		||||
no_inactiveness=false
 | 
			
		||||
reduce_menu_opacity=0
 | 
			
		||||
reduce_window_opacity=10
 | 
			
		||||
saturation=1.00
 | 
			
		||||
shadowless_popup=false
 | 
			
		||||
transient_groove=false
 | 
			
		||||
 | 
			
		||||
[GeneralColors]
 | 
			
		||||
window.color=#1E1E2E
 | 
			
		||||
base.color=#181825
 | 
			
		||||
alt.base.color=#181825
 | 
			
		||||
button.color=#313244
 | 
			
		||||
light.color=#45475A
 | 
			
		||||
mid.light.color=#45475A
 | 
			
		||||
dark.color=#181825
 | 
			
		||||
mid.color=#181825
 | 
			
		||||
highlight.color=#89B4FA
 | 
			
		||||
inactive.highlight.color=#89B4FA
 | 
			
		||||
text.color=#CDD6F4
 | 
			
		||||
window.text.color=#CDD6F4
 | 
			
		||||
button.text.color=#CDD6F4
 | 
			
		||||
disabled.text.color=#585B70
 | 
			
		||||
tooltip.text.color=#CDD6F4
 | 
			
		||||
highlight.text.color=#181825
 | 
			
		||||
link.color=#F5E0DC
 | 
			
		||||
link.visited.color=#89B4FA
 | 
			
		||||
 | 
			
		||||
[ItemView]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=itemview
 | 
			
		||||
interior.element=itemview
 | 
			
		||||
frame=true
 | 
			
		||||
interior=true
 | 
			
		||||
text.iconspacing=3
 | 
			
		||||
text.toggle.color=#181825
 | 
			
		||||
 | 
			
		||||
[RadioButton]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior.element=radio
 | 
			
		||||
 | 
			
		||||
[CheckBox]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior.element=checkbox
 | 
			
		||||
 | 
			
		||||
[TreeExpander]
 | 
			
		||||
indicator.element=tree
 | 
			
		||||
indicator.size=8
 | 
			
		||||
 | 
			
		||||
[ToolTip]
 | 
			
		||||
frame.top=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame=true
 | 
			
		||||
 | 
			
		||||
[PanelButtonCommand]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=button
 | 
			
		||||
frame.element=button
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
text.press.color=#181825
 | 
			
		||||
text.toggle.color=#181825
 | 
			
		||||
 | 
			
		||||
[PanelButtonTool]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
 | 
			
		||||
[DockTitle]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
text.margin.top=5
 | 
			
		||||
text.margin.bottom=5
 | 
			
		||||
text.margin.left=5
 | 
			
		||||
text.margin.right=5
 | 
			
		||||
indicator.size=0
 | 
			
		||||
 | 
			
		||||
[Dock]
 | 
			
		||||
interior.element=toolbar
 | 
			
		||||
frame.element=toolbar
 | 
			
		||||
frame=true
 | 
			
		||||
interior=true
 | 
			
		||||
 | 
			
		||||
[GroupBox]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=tabframe
 | 
			
		||||
interior=true
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[Focus]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=true
 | 
			
		||||
frame.element=focus
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
frame.patternsize=20
 | 
			
		||||
 | 
			
		||||
[GenericFrame]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=common
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
 | 
			
		||||
[Slider]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=true
 | 
			
		||||
frame.element=slider
 | 
			
		||||
interior.element=slider
 | 
			
		||||
frame.top=3
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
focusFrame=true
 | 
			
		||||
 | 
			
		||||
[SliderCursor]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=true
 | 
			
		||||
interior.element=slidercursor
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[LineEdit]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=lineedit
 | 
			
		||||
interior.element=lineedit
 | 
			
		||||
 | 
			
		||||
[IndicatorSpinBox]
 | 
			
		||||
inherits=LineEdit
 | 
			
		||||
frame.element=lineedit
 | 
			
		||||
interior.element=lineedit
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=2
 | 
			
		||||
frame.right=2
 | 
			
		||||
indicator.size=8
 | 
			
		||||
 | 
			
		||||
[DropDownButton]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=0
 | 
			
		||||
frame.right=1
 | 
			
		||||
indicator.size=8
 | 
			
		||||
 | 
			
		||||
[ToolboxTab]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=tabframe
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
 | 
			
		||||
[Tab]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=tab
 | 
			
		||||
frame.element=tab
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
indicator.size=10
 | 
			
		||||
text.normal.color=#585B70
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
text.press.color=#CDD6F4
 | 
			
		||||
text.toggle.color=#CDD6F4
 | 
			
		||||
focusFrame=true
 | 
			
		||||
 | 
			
		||||
[TabBarFrame]
 | 
			
		||||
inherits=GenericFrame
 | 
			
		||||
frame=true
 | 
			
		||||
frame.element=tabBarFrame
 | 
			
		||||
interior=false
 | 
			
		||||
frame.top=4
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
 | 
			
		||||
[TabFrame]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=tabframe
 | 
			
		||||
interior.element=tabframe
 | 
			
		||||
 | 
			
		||||
[Dialog]
 | 
			
		||||
inherits=TabBarFrame
 | 
			
		||||
frame.element=tabframe
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
frame.top=1
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
 | 
			
		||||
[HeaderSection]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=header
 | 
			
		||||
frame.element=header
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=1
 | 
			
		||||
frame.left=1
 | 
			
		||||
frame.right=1
 | 
			
		||||
frame.expansion=0
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
text.focus.color=#89B4FA
 | 
			
		||||
text.press.color=#CDD6F4
 | 
			
		||||
text.toggle.color=#CDD6F4
 | 
			
		||||
indicator.element=harrow
 | 
			
		||||
 | 
			
		||||
[SizeGrip]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior=false
 | 
			
		||||
indicator.element=resize-grip
 | 
			
		||||
indicator.size=0
 | 
			
		||||
 | 
			
		||||
[Toolbar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=menubar
 | 
			
		||||
frame.element=menubar
 | 
			
		||||
frame=true
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
text.press.color=#89B4FA
 | 
			
		||||
text.toggle.color=#89B4FA
 | 
			
		||||
text.bold=false
 | 
			
		||||
 | 
			
		||||
[MenuBar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=menubar
 | 
			
		||||
interior.element=menubar
 | 
			
		||||
frame.bottom=0
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
frame.expansion=0
 | 
			
		||||
text.bold=false
 | 
			
		||||
 | 
			
		||||
[ToolbarButton]
 | 
			
		||||
frame.element=tbutton
 | 
			
		||||
interior.element=tbutton
 | 
			
		||||
indicator.element=arrow
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
text.press.color=#181825
 | 
			
		||||
text.toggle.color=#181825
 | 
			
		||||
text.bold=false
 | 
			
		||||
 | 
			
		||||
[Scrollbar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
indicator.size=0
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[ScrollbarGroove]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=false
 | 
			
		||||
frame=false
 | 
			
		||||
 | 
			
		||||
[ScrollbarSlider]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior=false
 | 
			
		||||
frame.element=scrollbarslider
 | 
			
		||||
frame.top=4
 | 
			
		||||
frame.bottom=4
 | 
			
		||||
frame.left=4
 | 
			
		||||
frame.right=4
 | 
			
		||||
 | 
			
		||||
[ProgressbarContents]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=true
 | 
			
		||||
frame.element=progress-pattern
 | 
			
		||||
interior.element=progress-pattern
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=2
 | 
			
		||||
frame.right=2
 | 
			
		||||
 | 
			
		||||
[Progressbar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame.element=progress
 | 
			
		||||
interior.element=progress
 | 
			
		||||
frame.top=2
 | 
			
		||||
frame.bottom=2
 | 
			
		||||
frame.left=2
 | 
			
		||||
frame.right=2
 | 
			
		||||
text.margin=0
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
text.press.color=#181825
 | 
			
		||||
text.toggle.color=#181825
 | 
			
		||||
text.bold=false
 | 
			
		||||
frame.expansion=18
 | 
			
		||||
 | 
			
		||||
[RadioButton]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
 | 
			
		||||
[Menu]
 | 
			
		||||
frame.element=menu
 | 
			
		||||
interior.element=menu
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
text.press.color=#181825
 | 
			
		||||
text.toggle.color=#181825
 | 
			
		||||
text.bold=false
 | 
			
		||||
frame.top=3
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
 | 
			
		||||
[MenuItem]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=menuitem
 | 
			
		||||
indicator.size=8
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
text.press.color=#CDD6F4
 | 
			
		||||
 | 
			
		||||
[MenuBarItem]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
interior.element=menubaritem
 | 
			
		||||
frame=false
 | 
			
		||||
text.margin.top=3
 | 
			
		||||
text.margin.bottom=3
 | 
			
		||||
text.margin.left=5
 | 
			
		||||
text.margin.right=5
 | 
			
		||||
 | 
			
		||||
[StatusBar]
 | 
			
		||||
inherits=Toolbar
 | 
			
		||||
frame.element=toolbar
 | 
			
		||||
font.bold=true
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
frame=true
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=0
 | 
			
		||||
 | 
			
		||||
[TitleBar]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
frame=false
 | 
			
		||||
interior=false
 | 
			
		||||
text.margin.top=2
 | 
			
		||||
text.margin.bottom=2
 | 
			
		||||
text.margin.left=3
 | 
			
		||||
text.margin.right=3
 | 
			
		||||
 | 
			
		||||
[ComboBox]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
indicator.size=8
 | 
			
		||||
frame.top=3
 | 
			
		||||
frame.bottom=3
 | 
			
		||||
frame.left=3
 | 
			
		||||
frame.right=3
 | 
			
		||||
text.margin.top=1
 | 
			
		||||
text.margin.bottom=1
 | 
			
		||||
text.margin.left=3
 | 
			
		||||
text.margin.right=3
 | 
			
		||||
text.toggle.color=#CDD6F4
 | 
			
		||||
 | 
			
		||||
[ToolboxTab]
 | 
			
		||||
inherits=PanelButtonCommand
 | 
			
		||||
text.normal.color=#CDD6F4
 | 
			
		||||
text.press.color=#CDD6F4
 | 
			
		||||
text.focus.color=#CDD6F4
 | 
			
		||||
 | 
			
		||||
[Hacks]
 | 
			
		||||
transparent_dolphin_view=false
 | 
			
		||||
blur_konsole=true
 | 
			
		||||
transparent_ktitle_label=true
 | 
			
		||||
transparent_menutitle=true
 | 
			
		||||
respect_darkness=true
 | 
			
		||||
kcapacitybar_as_progressbar=true
 | 
			
		||||
force_size_grip=false
 | 
			
		||||
iconless_pushbutton=true
 | 
			
		||||
iconless_menu=false
 | 
			
		||||
disabled_icon_opacity=100
 | 
			
		||||
lxqtmainmenu_iconsize=0
 | 
			
		||||
normal_default_pushbutton=true
 | 
			
		||||
single_top_toolbar=false
 | 
			
		||||
tint_on_mouseover=0
 | 
			
		||||
transparent_pcmanfm_sidepane=true
 | 
			
		||||
transparent_pcmanfm_view=false
 | 
			
		||||
blur_translucent=true
 | 
			
		||||
centered_forms=false
 | 
			
		||||
kinetic_scrolling=false
 | 
			
		||||
middle_click_scroll=false
 | 
			
		||||
no_selection_tint=false
 | 
			
		||||
noninteger_translucency=false
 | 
			
		||||
style_vertical_toolbars=false
 | 
			
		||||
blur_only_active_window=false
 | 
			
		||||
 | 
			
		||||
[Window]
 | 
			
		||||
interior=true
 | 
			
		||||
interior.element=window
 | 
			
		||||
frame.top=0
 | 
			
		||||
frame.bottom=0
 | 
			
		||||
frame.left=0
 | 
			
		||||
frame.right=0
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
		 After Width: | Height: | Size: 146 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
[General]
 | 
			
		||||
theme=catppuccin-mocha-blue
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
"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),
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,127 @@
 | 
			
		|||
 | 
			
		||||
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",
 | 
			
		||||
            'codium': "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",
 | 
			
		||||
            'eu.betterbird.Betterbird' : "thunderbird",
 | 
			
		||||
			'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;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
 | 
			
		||||
export function clamp(x, min, max) {
 | 
			
		||||
  return Math.min(Math.max(x, min), max);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
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';
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
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,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
import Cairo from 'gi://cairo?version=1.0';
 | 
			
		||||
 | 
			
		||||
export const dummyRegion = new Cairo.Region();
 | 
			
		||||
export const enableClickthrough = (self) => self.input_shape_combine_region(dummyRegion);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
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);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
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));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
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(),
 | 
			
		||||
        ]
 | 
			
		||||
    }),
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,155 @@
 | 
			
		|||
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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,423 @@
 | 
			
		|||
// 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,
 | 
			
		||||
                })
 | 
			
		||||
            )
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,163 @@
 | 
			
		|||
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);
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
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;
 | 
			
		||||
            })
 | 
			
		||||
        ,
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,262 @@
 | 
			
		|||
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);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
        ,
 | 
			
		||||
    });
 | 
			
		||||
}; 
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,197 @@
 | 
			
		|||
*:not(popover) {
 | 
			
		||||
  all: unset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@import '../../../.config/waybar/wallust/colors-waybar.css';
 | 
			
		||||
 | 
			
		||||
/* define some colors */
 | 
			
		||||
@define-color border-color @color12;
 | 
			
		||||
@define-color border-color-alt @color9;
 | 
			
		||||
@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: 4px solid @border-color;
 | 
			
		||||
  border-left: 1px solid @border-color-alt;
 | 
			
		||||
  border-right: 1px solid @border-color-alt;
 | 
			
		||||
  border-bottom: 4px solid @border-color;
 | 
			
		||||
  box-shadow: 0px 2px 3px alpha(@color12, 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: 4px solid @border-color;
 | 
			
		||||
  border-left: 1px solid @border-color-alt;
 | 
			
		||||
  border-right: 1px solid @border-color-alt;
 | 
			
		||||
  border-bottom: 4px 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: 4px solid @border-color;
 | 
			
		||||
  border-left: 1px solid @border-color-alt;
 | 
			
		||||
  border-right: 1px solid @border-color-alt;
 | 
			
		||||
  border-bottom: 4px 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 */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
 | 
			
		||||
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;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
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';
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,212 @@
 | 
			
		|||
#? Config file for btop v. 1.2.13
 | 
			
		||||
 | 
			
		||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
 | 
			
		||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
 | 
			
		||||
color_theme = "$HOME/.config/btop/themes/catppuccin_macchiato.theme"
 | 
			
		||||
 | 
			
		||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
 | 
			
		||||
theme_background = False
 | 
			
		||||
 | 
			
		||||
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
 | 
			
		||||
truecolor = True
 | 
			
		||||
 | 
			
		||||
#* Set to true to force tty mode regardless if a real tty has been detected or not.
 | 
			
		||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
 | 
			
		||||
force_tty = False
 | 
			
		||||
 | 
			
		||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
 | 
			
		||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
 | 
			
		||||
#* Use whitespace " " as separator between different presets.
 | 
			
		||||
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
 | 
			
		||||
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
 | 
			
		||||
 | 
			
		||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
 | 
			
		||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
 | 
			
		||||
vim_keys = False
 | 
			
		||||
 | 
			
		||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
 | 
			
		||||
rounded_corners = True
 | 
			
		||||
 | 
			
		||||
#* Default symbols to use for graph creation, "braille", "block" or "tty".
 | 
			
		||||
#* "braille" offers the highest resolution but might not be included in all fonts.
 | 
			
		||||
#* "block" has half the resolution of braille but uses more common characters.
 | 
			
		||||
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
 | 
			
		||||
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
 | 
			
		||||
graph_symbol = "braille"
 | 
			
		||||
 | 
			
		||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
 | 
			
		||||
graph_symbol_cpu = "default"
 | 
			
		||||
 | 
			
		||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
 | 
			
		||||
graph_symbol_mem = "default"
 | 
			
		||||
 | 
			
		||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
 | 
			
		||||
graph_symbol_net = "default"
 | 
			
		||||
 | 
			
		||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
 | 
			
		||||
graph_symbol_proc = "default"
 | 
			
		||||
 | 
			
		||||
#* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace.
 | 
			
		||||
shown_boxes = "proc cpu mem net"
 | 
			
		||||
 | 
			
		||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
 | 
			
		||||
update_ms = 2000
 | 
			
		||||
 | 
			
		||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
 | 
			
		||||
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
 | 
			
		||||
proc_sorting = "cpu direct"
 | 
			
		||||
 | 
			
		||||
#* Reverse sorting order, True or False.
 | 
			
		||||
proc_reversed = False
 | 
			
		||||
 | 
			
		||||
#* Show processes as a tree.
 | 
			
		||||
proc_tree = False
 | 
			
		||||
 | 
			
		||||
#* Use the cpu graph colors in the process list.
 | 
			
		||||
proc_colors = True
 | 
			
		||||
 | 
			
		||||
#* Use a darkening gradient in the process list.
 | 
			
		||||
proc_gradient = True
 | 
			
		||||
 | 
			
		||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
 | 
			
		||||
proc_per_core = False
 | 
			
		||||
 | 
			
		||||
#* Show process memory as bytes instead of percent.
 | 
			
		||||
proc_mem_bytes = True
 | 
			
		||||
 | 
			
		||||
#* Show cpu graph for each process.
 | 
			
		||||
proc_cpu_graphs = True
 | 
			
		||||
 | 
			
		||||
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
 | 
			
		||||
proc_info_smaps = False
 | 
			
		||||
 | 
			
		||||
#* Show proc box on left side of screen instead of right.
 | 
			
		||||
proc_left = False
 | 
			
		||||
 | 
			
		||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
 | 
			
		||||
proc_filter_kernel = False
 | 
			
		||||
 | 
			
		||||
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
 | 
			
		||||
#* Select from a list of detected attributes from the options menu.
 | 
			
		||||
cpu_graph_upper = "total"
 | 
			
		||||
 | 
			
		||||
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
 | 
			
		||||
#* Select from a list of detected attributes from the options menu.
 | 
			
		||||
cpu_graph_lower = "total"
 | 
			
		||||
 | 
			
		||||
#* Toggles if the lower CPU graph should be inverted.
 | 
			
		||||
cpu_invert_lower = True
 | 
			
		||||
 | 
			
		||||
#* Set to True to completely disable the lower CPU graph.
 | 
			
		||||
cpu_single_graph = False
 | 
			
		||||
 | 
			
		||||
#* Show cpu box at bottom of screen instead of top.
 | 
			
		||||
cpu_bottom = False
 | 
			
		||||
 | 
			
		||||
#* Shows the system uptime in the CPU box.
 | 
			
		||||
show_uptime = True
 | 
			
		||||
 | 
			
		||||
#* Show cpu temperature.
 | 
			
		||||
check_temp = True
 | 
			
		||||
 | 
			
		||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
 | 
			
		||||
cpu_sensor = "Auto"
 | 
			
		||||
 | 
			
		||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
 | 
			
		||||
show_coretemp = True
 | 
			
		||||
 | 
			
		||||
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
 | 
			
		||||
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
 | 
			
		||||
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
 | 
			
		||||
#* Example: "4:0 5:1 6:3"
 | 
			
		||||
cpu_core_map = ""
 | 
			
		||||
 | 
			
		||||
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
 | 
			
		||||
temp_scale = "celsius"
 | 
			
		||||
 | 
			
		||||
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
 | 
			
		||||
base_10_sizes = True
 | 
			
		||||
 | 
			
		||||
#* Show CPU frequency.
 | 
			
		||||
show_cpu_freq = True
 | 
			
		||||
 | 
			
		||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
 | 
			
		||||
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
 | 
			
		||||
clock_format = "%X"
 | 
			
		||||
 | 
			
		||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
 | 
			
		||||
background_update = True
 | 
			
		||||
 | 
			
		||||
#* Custom cpu model name, empty string to disable.
 | 
			
		||||
custom_cpu_name = ""
 | 
			
		||||
 | 
			
		||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
 | 
			
		||||
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
 | 
			
		||||
disks_filter = ""
 | 
			
		||||
 | 
			
		||||
#* Show graphs instead of meters for memory values.
 | 
			
		||||
mem_graphs = True
 | 
			
		||||
 | 
			
		||||
#* Show mem box below net box instead of above.
 | 
			
		||||
mem_below_net = False
 | 
			
		||||
 | 
			
		||||
#* Count ZFS ARC in cached and available memory.
 | 
			
		||||
zfs_arc_cached = True
 | 
			
		||||
 | 
			
		||||
#* If swap memory should be shown in memory box.
 | 
			
		||||
show_swap = True
 | 
			
		||||
 | 
			
		||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
 | 
			
		||||
swap_disk = True
 | 
			
		||||
 | 
			
		||||
#* If mem box should be split to also show disks info.
 | 
			
		||||
show_disks = False
 | 
			
		||||
 | 
			
		||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
 | 
			
		||||
only_physical = True
 | 
			
		||||
 | 
			
		||||
#* Read disks list from /etc/fstab. This also disables only_physical.
 | 
			
		||||
use_fstab = True
 | 
			
		||||
 | 
			
		||||
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
 | 
			
		||||
zfs_hide_datasets = False
 | 
			
		||||
 | 
			
		||||
#* Set to true to show available disk space for privileged users.
 | 
			
		||||
disk_free_priv = False
 | 
			
		||||
 | 
			
		||||
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
 | 
			
		||||
show_io_stat = True
 | 
			
		||||
 | 
			
		||||
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
 | 
			
		||||
io_mode = False
 | 
			
		||||
 | 
			
		||||
#* Set to True to show combined read/write io graphs in io mode.
 | 
			
		||||
io_graph_combined = False
 | 
			
		||||
 | 
			
		||||
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
 | 
			
		||||
#* Example: "/mnt/media:100 /:20 /boot:1".
 | 
			
		||||
io_graph_speeds = ""
 | 
			
		||||
 | 
			
		||||
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
 | 
			
		||||
net_download = 100
 | 
			
		||||
 | 
			
		||||
net_upload = 100
 | 
			
		||||
 | 
			
		||||
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
 | 
			
		||||
net_auto = True
 | 
			
		||||
 | 
			
		||||
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
 | 
			
		||||
net_sync = True
 | 
			
		||||
 | 
			
		||||
#* Starts with the Network Interface specified here.
 | 
			
		||||
net_iface = ""
 | 
			
		||||
 | 
			
		||||
#* Show battery stats in top right if battery is present.
 | 
			
		||||
show_battery = False
 | 
			
		||||
 | 
			
		||||
#* Which battery to use if multiple are present. "Auto" for auto detection.
 | 
			
		||||
selected_battery = "Auto"
 | 
			
		||||
 | 
			
		||||
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
 | 
			
		||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
 | 
			
		||||
log_level = "WARNING"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
theme[main_bg]="#303446"
 | 
			
		||||
theme[main_fg]="#C6D0F5"
 | 
			
		||||
theme[title]="#C6D0F5"
 | 
			
		||||
theme[hi_fg]="#8CAAEE"
 | 
			
		||||
theme[selected_bg]="#51576D"
 | 
			
		||||
theme[selected_fg]="#8CAAEE"
 | 
			
		||||
theme[inactive_fg]="#838BA7"
 | 
			
		||||
theme[graph_text]="#F2D5CF"
 | 
			
		||||
theme[meter_bg]="#51576D"
 | 
			
		||||
theme[proc_misc]="#F2D5CF"
 | 
			
		||||
theme[cpu_box]="#85C1DC"
 | 
			
		||||
theme[mem_box]="#A6D189"
 | 
			
		||||
theme[net_box]="#CA9EE6"
 | 
			
		||||
theme[proc_box]="#EEBEBE"
 | 
			
		||||
theme[div_line]="#737994"
 | 
			
		||||
theme[temp_start]="#E5C890"
 | 
			
		||||
theme[temp_mid]="#EF9F76"
 | 
			
		||||
theme[temp_end]="#E78284"
 | 
			
		||||
theme[cpu_start]="#85C1DC"
 | 
			
		||||
theme[cpu_mid]="#99D1DB"
 | 
			
		||||
theme[cpu_end]="#81C8BE"
 | 
			
		||||
theme[free_start]="#81C8BE"
 | 
			
		||||
theme[free_mid]="#81C8BE"
 | 
			
		||||
theme[free_end]="#A6D189"
 | 
			
		||||
theme[cached_start]="#F4B8E4"
 | 
			
		||||
theme[cached_mid]="#F4B8E4"
 | 
			
		||||
theme[cached_end]="#CA9EE6"
 | 
			
		||||
theme[available_start]="#F2D5CF"
 | 
			
		||||
theme[available_mid]="#EEBEBE"
 | 
			
		||||
theme[available_end]="#EEBEBE"
 | 
			
		||||
theme[used_start]="#EF9F76"
 | 
			
		||||
theme[used_mid]="#EF9F76"
 | 
			
		||||
theme[used_end]="#E78284"
 | 
			
		||||
theme[download_start]="#BABBF1"
 | 
			
		||||
theme[download_mid]="#BABBF1"
 | 
			
		||||
theme[download_end]="#CA9EE6"
 | 
			
		||||
theme[upload_start]="#BABBF1"
 | 
			
		||||
theme[upload_mid]="#BABBF1"
 | 
			
		||||
theme[upload_end]="#CA9EE6"
 | 
			
		||||
theme[process_start]="#85C1DC"
 | 
			
		||||
theme[process_mid]="#99D1DB"
 | 
			
		||||
theme[process_end]="#81C8BE"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
theme[main_bg]="#EFF1F5"
 | 
			
		||||
theme[main_fg]="#4C4F69"
 | 
			
		||||
theme[title]="#4C4F69"
 | 
			
		||||
theme[hi_fg]="#1E66F5"
 | 
			
		||||
theme[selected_bg]="#BCC0CC"
 | 
			
		||||
theme[selected_fg]="#1E66F5"
 | 
			
		||||
theme[inactive_fg]="#8C8FA1"
 | 
			
		||||
theme[graph_text]="#DC8A78"
 | 
			
		||||
theme[meter_bg]="#BCC0CC"
 | 
			
		||||
theme[proc_misc]="#DC8A78"
 | 
			
		||||
theme[cpu_box]="#209FB5"
 | 
			
		||||
theme[mem_box]="#40A02B"
 | 
			
		||||
theme[net_box]="#8839EF"
 | 
			
		||||
theme[proc_box]="#DD7878"
 | 
			
		||||
theme[div_line]="#9CA0B0"
 | 
			
		||||
theme[temp_start]="#DF8E1D"
 | 
			
		||||
theme[temp_mid]="#FE640B"
 | 
			
		||||
theme[temp_end]="#D20F39"
 | 
			
		||||
theme[cpu_start]="#209FB5"
 | 
			
		||||
theme[cpu_mid]="#04A5E5"
 | 
			
		||||
theme[cpu_end]="#179299"
 | 
			
		||||
theme[free_start]="#179299"
 | 
			
		||||
theme[free_mid]="#179299"
 | 
			
		||||
theme[free_end]="#40A02B"
 | 
			
		||||
theme[cached_start]="#EA76CB"
 | 
			
		||||
theme[cached_mid]="#EA76CB"
 | 
			
		||||
theme[cached_end]="#8839EF"
 | 
			
		||||
theme[available_start]="#DC8A78"
 | 
			
		||||
theme[available_mid]="#DD7878"
 | 
			
		||||
theme[available_end]="#DD7878"
 | 
			
		||||
theme[used_start]="#FE640B"
 | 
			
		||||
theme[used_mid]="#FE640B"
 | 
			
		||||
theme[used_end]="#D20F39"
 | 
			
		||||
theme[download_start]="#7287FD"
 | 
			
		||||
theme[download_mid]="#7287FD"
 | 
			
		||||
theme[download_end]="#8839EF"
 | 
			
		||||
theme[upload_start]="#7287FD"
 | 
			
		||||
theme[upload_mid]="#7287FD"
 | 
			
		||||
theme[upload_end]="#8839EF"
 | 
			
		||||
theme[process_start]="#209FB5"
 | 
			
		||||
theme[process_mid]="#04A5E5"
 | 
			
		||||
theme[process_end]="#179299"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
theme[main_bg]="#24273A"
 | 
			
		||||
theme[main_fg]="#CAD3F5"
 | 
			
		||||
theme[title]="#CAD3F5"
 | 
			
		||||
theme[hi_fg]="#8AADF4"
 | 
			
		||||
theme[selected_bg]="#494D64"
 | 
			
		||||
theme[selected_fg]="#8AADF4"
 | 
			
		||||
theme[inactive_fg]="#8087A2"
 | 
			
		||||
theme[graph_text]="#F4DBD6"
 | 
			
		||||
theme[meter_bg]="#494D64"
 | 
			
		||||
theme[proc_misc]="#F4DBD6"
 | 
			
		||||
theme[cpu_box]="#7DC4E4"
 | 
			
		||||
theme[mem_box]="#A6DA95"
 | 
			
		||||
theme[net_box]="#C6A0F6"
 | 
			
		||||
theme[proc_box]="#F0C6C6"
 | 
			
		||||
theme[div_line]="#6E738D"
 | 
			
		||||
theme[temp_start]="#EED49F"
 | 
			
		||||
theme[temp_mid]="#F5A97F"
 | 
			
		||||
theme[temp_end]="#ED8796"
 | 
			
		||||
theme[cpu_start]="#7DC4E4"
 | 
			
		||||
theme[cpu_mid]="#91D7E3"
 | 
			
		||||
theme[cpu_end]="#8BD5CA"
 | 
			
		||||
theme[free_start]="#8BD5CA"
 | 
			
		||||
theme[free_mid]="#8BD5CA"
 | 
			
		||||
theme[free_end]="#A6DA95"
 | 
			
		||||
theme[cached_start]="#F5BDE6"
 | 
			
		||||
theme[cached_mid]="#F5BDE6"
 | 
			
		||||
theme[cached_end]="#C6A0F6"
 | 
			
		||||
theme[available_start]="#F4DBD6"
 | 
			
		||||
theme[available_mid]="#F0C6C6"
 | 
			
		||||
theme[available_end]="#F0C6C6"
 | 
			
		||||
theme[used_start]="#F5A97F"
 | 
			
		||||
theme[used_mid]="#F5A97F"
 | 
			
		||||
theme[used_end]="#ED8796"
 | 
			
		||||
theme[download_start]="#B7BDF8"
 | 
			
		||||
theme[download_mid]="#B7BDF8"
 | 
			
		||||
theme[download_end]="#C6A0F6"
 | 
			
		||||
theme[upload_start]="#B7BDF8"
 | 
			
		||||
theme[upload_mid]="#B7BDF8"
 | 
			
		||||
theme[upload_end]="#C6A0F6"
 | 
			
		||||
theme[process_start]="#7DC4E4"
 | 
			
		||||
theme[process_mid]="#91D7E3"
 | 
			
		||||
theme[process_end]="#8BD5CA"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
theme[main_bg]="#1E1E2E"
 | 
			
		||||
theme[main_fg]="#CDD6F4"
 | 
			
		||||
theme[title]="#CDD6F4"
 | 
			
		||||
theme[hi_fg]="#89B4FA"
 | 
			
		||||
theme[selected_bg]="#45475A"
 | 
			
		||||
theme[selected_fg]="#89B4FA"
 | 
			
		||||
theme[inactive_fg]="#7F849C"
 | 
			
		||||
theme[graph_text]="#F5E0DC"
 | 
			
		||||
theme[meter_bg]="#45475A"
 | 
			
		||||
theme[proc_misc]="#F5E0DC"
 | 
			
		||||
theme[cpu_box]="#74C7EC"
 | 
			
		||||
theme[mem_box]="#A6E3A1"
 | 
			
		||||
theme[net_box]="#CBA6F7"
 | 
			
		||||
theme[proc_box]="#F2CDCD"
 | 
			
		||||
theme[div_line]="#6C7086"
 | 
			
		||||
theme[temp_start]="#F9E2AF"
 | 
			
		||||
theme[temp_mid]="#FAB387"
 | 
			
		||||
theme[temp_end]="#F38BA8"
 | 
			
		||||
theme[cpu_start]="#74C7EC"
 | 
			
		||||
theme[cpu_mid]="#89DCEB"
 | 
			
		||||
theme[cpu_end]="#94E2D5"
 | 
			
		||||
theme[free_start]="#94E2D5"
 | 
			
		||||
theme[free_mid]="#94E2D5"
 | 
			
		||||
theme[free_end]="#A6E3A1"
 | 
			
		||||
theme[cached_start]="#F5C2E7"
 | 
			
		||||
theme[cached_mid]="#F5C2E7"
 | 
			
		||||
theme[cached_end]="#CBA6F7"
 | 
			
		||||
theme[available_start]="#F5E0DC"
 | 
			
		||||
theme[available_mid]="#F2CDCD"
 | 
			
		||||
theme[available_end]="#F2CDCD"
 | 
			
		||||
theme[used_start]="#FAB387"
 | 
			
		||||
theme[used_mid]="#FAB387"
 | 
			
		||||
theme[used_end]="#F38BA8"
 | 
			
		||||
theme[download_start]="#B4BEFE"
 | 
			
		||||
theme[download_mid]="#B4BEFE"
 | 
			
		||||
theme[download_end]="#CBA6F7"
 | 
			
		||||
theme[upload_start]="#B4BEFE"
 | 
			
		||||
theme[upload_mid]="#B4BEFE"
 | 
			
		||||
theme[upload_end]="#CBA6F7"
 | 
			
		||||
theme[process_start]="#74C7EC"
 | 
			
		||||
theme[process_mid]="#89DCEB"
 | 
			
		||||
theme[process_end]="#94E2D5"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,185 @@
 | 
			
		|||
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[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-200). 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
 | 
			
		||||
 | 
			
		||||
# For SDL width and space between bars is in pixels, defaults are:
 | 
			
		||||
; bar_width = 20
 | 
			
		||||
; bar_spacing = 5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem'
 | 
			
		||||
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
 | 
			
		||||
#
 | 
			
		||||
# All input methods uses the same config variable 'source'
 | 
			
		||||
# to define where it should get the audio.
 | 
			
		||||
#
 | 
			
		||||
# For pulseaudio '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 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
 | 
			
		||||
method = pulse
 | 
			
		||||
source = auto
 | 
			
		||||
 | 
			
		||||
; method = alsa
 | 
			
		||||
; source = hw:Loopback,1
 | 
			
		||||
 | 
			
		||||
; method = fifo
 | 
			
		||||
; source = /tmp/mpd.fifo
 | 
			
		||||
; sample_rate = 44100
 | 
			
		||||
; sample_bits = 16
 | 
			
		||||
 | 
			
		||||
; method = shmem
 | 
			
		||||
; source = /squeezelite-AA:BB:CC:DD:EE:FF
 | 
			
		||||
 | 
			
		||||
; method = portaudio
 | 
			
		||||
; source = auto
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[output]
 | 
			
		||||
 | 
			
		||||
# Output method. Can be 'ncurses', 'noncurses', 'raw' or 'sdl'.
 | 
			
		||||
# 'noncurses' uses a custom framebuffer technique and prints only changes
 | 
			
		||||
# from frame to frame in the terminal. 'ncurses' is default if supported.
 | 
			
		||||
#
 | 
			
		||||
# '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.
 | 
			
		||||
#
 | 
			
		||||
# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
 | 
			
		||||
; method = ncurses
 | 
			
		||||
 | 
			
		||||
# 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'.
 | 
			
		||||
; channels = stereo
 | 
			
		||||
; mono_option = average
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
[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
 | 
			
		||||
# ncurses output method and a terminal that can change color definitions such as Gnome-terminal or rxvt.
 | 
			
		||||
# if supported, ncurses mode will be forced on if user defined colors are used.
 | 
			
		||||
# default is to keep current terminal color
 | 
			
		||||
; background = default
 | 
			
		||||
; foreground = default
 | 
			
		||||
 | 
			
		||||
# SDL only support hex code colors, these are the default:
 | 
			
		||||
; background = '#111111'
 | 
			
		||||
; foreground = '#33cccc'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Gradient mode, only hex defined colors (and thereby ncurses mode) 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
 | 
			
		||||
# In the [color] section
 | 
			
		||||
 | 
			
		||||
[color]
 | 
			
		||||
 | 
			
		||||
gradient = 1
 | 
			
		||||
 | 
			
		||||
gradient_count = 8
 | 
			
		||||
gradient_color_1 = '#030508'
 | 
			
		||||
gradient_color_2 = '#2A3859'
 | 
			
		||||
gradient_color_3 = '#324166'
 | 
			
		||||
gradient_color_4 = '#11606B'
 | 
			
		||||
gradient_color_5 = '#BCADBB'
 | 
			
		||||
gradient_color_6 = '#2B7F48'
 | 
			
		||||
gradient_color_7 = '#16808F'
 | 
			
		||||
gradient_color_8 = '#BCADBB'
 | 
			
		||||
 | 
			
		||||
[color]
 | 
			
		||||
 | 
			
		||||
[smoothing]
 | 
			
		||||
 | 
			
		||||
# Percentage value for integral smoothing. Takes values from 0 - 100.
 | 
			
		||||
# Higher values means smoother, but less precise. 0 to disable.
 | 
			
		||||
; 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".
 | 
			
		||||
; gravity = 100
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# In bar height, bars that would have been lower that this will not be drawn.
 | 
			
		||||
; ignore = 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[eq]
 | 
			
		||||
 | 
			
		||||
# This one is tricky. You can have as much keys as you want.
 | 
			
		||||
# Remember to uncomment more then 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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
#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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
#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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
#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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
#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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,72 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
 | 
			
		||||
  "logo": {
 | 
			
		||||
      "padding": {
 | 
			
		||||
          "top": 2
 | 
			
		||||
      },
 | 
			
		||||
      "type": "small"
 | 
			
		||||
  },
 | 
			
		||||
  "display": {
 | 
			
		||||
      "separator": " -> "
 | 
			
		||||
  },
 | 
			
		||||
  "modules": [
 | 
			
		||||
      "break",
 | 
			
		||||
      {
 | 
			
		||||
          "type": "title",
 | 
			
		||||
          "keyWidth": 10,
 | 
			
		||||
    "format": "         {6}{7}{8}"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "custom",
 | 
			
		||||
          "format": " ─────────────────────────── "
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "kernel",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "wm",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "shell",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "terminal",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      /*
 | 
			
		||||
      {
 | 
			
		||||
          "type": "packages",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      */
 | 
			
		||||
      {
 | 
			
		||||
          "type": "memory",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "magenta",
 | 
			
		||||
          // format: used / total
 | 
			
		||||
          "format": "{1} / {2}"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "uptime",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "custom",
 | 
			
		||||
          "format": " ─────────────────────────── "
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "custom",
 | 
			
		||||
          "format": "   \u001b[31m  \u001b[32m  \u001b[33m  \u001b[34m  \u001b[35m  \u001b[36m  \u001b[37m  \u001b[90m "
 | 
			
		||||
      },
 | 
			
		||||
  "break",
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
 | 
			
		||||
"logo": {
 | 
			
		||||
"height": 5,
 | 
			
		||||
"width": 10,
 | 
			
		||||
"padding": {
 | 
			
		||||
  "top": 1
 | 
			
		||||
  }
 | 
			
		||||
},
 | 
			
		||||
  "display": {
 | 
			
		||||
      "separator": " -> "
 | 
			
		||||
  },
 | 
			
		||||
  "modules": [
 | 
			
		||||
      "break",
 | 
			
		||||
      {
 | 
			
		||||
          "type": "title",
 | 
			
		||||
          "keyWidth": 10,
 | 
			
		||||
    "format": "         {6}{7}{8}"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "custom",
 | 
			
		||||
          "format": " ─────────────────────────── "
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "kernel",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "wm",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "shell",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "terminal",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      /*
 | 
			
		||||
      {
 | 
			
		||||
          "type": "packages",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      */
 | 
			
		||||
      {
 | 
			
		||||
          "type": "memory",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "magenta",
 | 
			
		||||
          // format: used / total
 | 
			
		||||
          "format": "{1} / {2}"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "uptime",
 | 
			
		||||
          "key": " ",
 | 
			
		||||
          "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "custom",
 | 
			
		||||
          "format": " ─────────────────────────── "
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "custom",
 | 
			
		||||
          "format": "   \u001b[31m  \u001b[32m  \u001b[33m  \u001b[34m  \u001b[35m  \u001b[36m  \u001b[37m  \u001b[90m "
 | 
			
		||||
      },
 | 
			
		||||
  "break",
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,112 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
 | 
			
		||||
  "logo": {
 | 
			
		||||
    //"source": "~/.config/fastfetch/nixos.png",
 | 
			
		||||
    //"type": "kitty-direct",
 | 
			
		||||
    "height": 15,
 | 
			
		||||
    "width": 30,
 | 
			
		||||
    "padding": {
 | 
			
		||||
      "top": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
  "display": {
 | 
			
		||||
    "separator": " ➜  "
 | 
			
		||||
  },
 | 
			
		||||
  
 | 
			
		||||
  "modules": [
 | 
			
		||||
    "break",
 | 
			
		||||
    {
 | 
			
		||||
      "type": "os",
 | 
			
		||||
      "key": " DISTRO",
 | 
			
		||||
      "keyColor": "31",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "kernel",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "31",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "packages",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "31",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "shell",
 | 
			
		||||
      "key": " └  ",
 | 
			
		||||
      "keyColor": "31",
 | 
			
		||||
    },
 | 
			
		||||
    "break",
 | 
			
		||||
    {
 | 
			
		||||
      "type": "wm",
 | 
			
		||||
      "key": " DE/WM",
 | 
			
		||||
      "keyColor": "32",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "wmtheme",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "32",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "icons",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "32",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "cursor",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "32",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "terminal",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "32",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "terminalfont",
 | 
			
		||||
      "key": " └  ",
 | 
			
		||||
      "keyColor": "32",
 | 
			
		||||
    },
 | 
			
		||||
    "break",
 | 
			
		||||
    {
 | 
			
		||||
      "type": "host",
 | 
			
		||||
      "format": "{2}",
 | 
			
		||||
      "key": " SYSTEM",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "cpu",
 | 
			
		||||
      "format": "{1} ({3}) @ {7} GHz",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "gpu",
 | 
			
		||||
      "format": "{2}",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "memory",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "swap",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "disk",
 | 
			
		||||
      "key": " ├  ",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "display",
 | 
			
		||||
      "key": " └  ",
 | 
			
		||||
      "compactType": "original-with-refresh-rate",
 | 
			
		||||
      "keyColor": "33",
 | 
			
		||||
    },
 | 
			
		||||
    "break",
 | 
			
		||||
    "break",
 | 
			
		||||
  ]
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,127 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
 | 
			
		||||
  "logo": {
 | 
			
		||||
  "padding": {
 | 
			
		||||
  "top": 1
 | 
			
		||||
  }
 | 
			
		||||
  },
 | 
			
		||||
  "display": {
 | 
			
		||||
  "separator": "   "
 | 
			
		||||
  },
 | 
			
		||||
  "modules": [
 | 
			
		||||
      "break",
 | 
			
		||||
      {
 | 
			
		||||
      "type": "os",
 | 
			
		||||
      "key": " DISTRO",
 | 
			
		||||
      "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "kernel",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "packages",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "shell",
 | 
			
		||||
      "key": "│ └",
 | 
			
		||||
      "keyColor": "yellow"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "wm",
 | 
			
		||||
      "key": " DE/WM",
 | 
			
		||||
      "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "wmtheme",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "icons",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "cursor",
 | 
			
		||||
          "key": "│ ├",
 | 
			
		||||
          "keyColor": "blue",
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
          "type": "terminalfont",
 | 
			
		||||
          "key": "│ ├",
 | 
			
		||||
          "keyColor": "blue",
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "terminal",
 | 
			
		||||
      "key": "│ └",
 | 
			
		||||
      "keyColor": "blue"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "host",
 | 
			
		||||
      "key": " SYSTEM",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "cpu",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "gpu",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "format": "{2}",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
              "type": "display",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "green",
 | 
			
		||||
      "compactType": "original-with-refresh-rate"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "memory",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "swap",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "uptime",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "display",
 | 
			
		||||
      "key": "│ └",
 | 
			
		||||
      "keyColor": "green"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "sound",
 | 
			
		||||
      "key": " AUDIO",
 | 
			
		||||
      "format": "{2}",
 | 
			
		||||
      "keyColor": "magenta"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "player",
 | 
			
		||||
      "key": "│ ├",
 | 
			
		||||
      "keyColor": "magenta"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "media",
 | 
			
		||||
      "key": "│ └",
 | 
			
		||||
      "keyColor": "magenta"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
      "type": "custom",
 | 
			
		||||
      "format": "\u001b[90m  \u001b[31m  \u001b[32m  \u001b[33m  \u001b[34m  \u001b[35m  \u001b[36m  \u001b[37m  \u001b[38m  \u001b[39m  \u001b[39m    \u001b[38m  \u001b[37m  \u001b[36m  \u001b[35m  \u001b[34m  \u001b[33m  \u001b[32m  \u001b[31m  \u001b[90m "
 | 
			
		||||
      },
 | 
			
		||||
      "break",
 | 
			
		||||
      ]
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
# Create a Monitor profile you want to on this directory
 | 
			
		||||
 | 
			
		||||
# Create a unique file name i.e. Mirror, or Office, Scale, etc etc
 | 
			
		||||
 | 
			
		||||
# tip: You can easily create a profile using nwg-displays
 | 
			
		||||
# after creating a profile using nwg-displays, copy the ~/.config/hypr/monitors.conf file to this directory with a unique file name
 | 
			
		||||
# suggest not to call it default
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Note, after selecting Profiles wanted via Rofi (SUPER SHIFT E), previous content of ~/.config/hypr/monitors.conf will be backed up and named as Previous_Profile.conf
 | 
			
		||||
 | 
			
		||||
# Monitor profile should be loaded automatically once selected by Rofi Settings ROfi Menu, unless you disabled the auto-reload function on Hyprland settings.
 | 
			
		||||
# However, if it does not load, kindly log out and re-login. This seem apparent if you are using a Virtual Environment.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
# default Monitor config
 | 
			
		||||
 | 
			
		||||
# Monitor Configuration
 | 
			
		||||
# See Hyprland wiki for more details
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Monitors/
 | 
			
		||||
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
 | 
			
		||||
 | 
			
		||||
# Monitors
 | 
			
		||||
monitor=,preferred,auto,1
 | 
			
		||||
 | 
			
		||||
# High Refresh Rate
 | 
			
		||||
monitor=,highrr,auto,1
 | 
			
		||||
 | 
			
		||||
# High Resolution
 | 
			
		||||
monitor=,highres,auto,1
 | 
			
		||||
 | 
			
		||||
# NOTE: for laptop, kindly check notes in Laptops.conf regarding display
 | 
			
		||||
# Created this inorder for the monitor display to not wake up if not intended.
 | 
			
		||||
# See here: https://github.com/hyprwm/Hyprland/issues/4090
 | 
			
		||||
 | 
			
		||||
# Some examples to set your own monitor
 | 
			
		||||
#monitor = eDP-1, preferred, auto, 1
 | 
			
		||||
#monitor = eDP-1, 2560x1440@165, 0x0, 1 #own screen
 | 
			
		||||
#monitor = DP-3, 1920x1080@240, auto, 1 
 | 
			
		||||
#monitor = DP-1, preferred, auto, 1
 | 
			
		||||
#monitor = HDMI-A-1, preferred,auto,1
 | 
			
		||||
 | 
			
		||||
# QEMU-KVM, virtual box or vmware
 | 
			
		||||
#monitor = Virtual-1, 1920x1080@60,auto,1
 | 
			
		||||
 | 
			
		||||
# to disable a monitor
 | 
			
		||||
#monitor=name,disable
 | 
			
		||||
 | 
			
		||||
# Mirror samples
 | 
			
		||||
#monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2
 | 
			
		||||
#monitor=,preferred,auto,1,mirror,eDP-1
 | 
			
		||||
#monitor=HDMI-A-1,2560x1440@144,0x0,1,mirror,eDP-1
 | 
			
		||||
 | 
			
		||||
# 10 bit monitor support - See wiki https://wiki.hyprland.org/Configuring/Monitors/#10-bit-support - See NOTES below
 | 
			
		||||
# NOTE: Colors registered in Hyprland (e.g. the border color) do not support 10 bit.
 | 
			
		||||
# NOTE: Some applications do not support screen capture with 10 bit enabled. (Screen captures like OBS may render black screen)
 | 
			
		||||
# monitor=,preferred,auto,1,bitdepth,10
 | 
			
		||||
 | 
			
		||||
#monitor=eDP-1,transform,0
 | 
			
		||||
#monitor=eDP-1,addreserved,10,10,10,49
 | 
			
		||||
 | 
			
		||||
# workspaces - Monitor rules
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Workspace-Rules/
 | 
			
		||||
# SUPER E - Workspace-Rules 
 | 
			
		||||
# See ~/.config/hypr/UserConfigs/WorkspaceRules.conf
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
1.) Suggest not to rename any files in this folder. As this is connected and being sourced from hyprland.conf in ~/.config/hypr
 | 
			
		||||
 | 
			
		||||
2.) This folder, along with UserScripts folder will NOT be touch when running upgrade.sh
 | 
			
		||||
 | 
			
		||||
3.) However, if hyprland has a big change in settings, i.e., blur section is moved into another group, you should managed the change yourself.
 | 
			
		||||
 | 
			
		||||
4.) Guidance on the keybinds. Suggest NOT to assign a keybind which I set on the default Keybinds. Else will conflict. Once Hyprland decided to have a global keybinds, then I will adjust.
 | 
			
		||||
 | 
			
		||||
5.) If you think that the default keybinds SHOULD be adjusted, open an issue on my github page and present me a valid argument. Like conflicting to GLOBAL keybinds, etc etc etc.
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
 | 
			
		||||
 | 
			
		||||
# Set your defaults here
 | 
			
		||||
#env = EDITOR,vim #default editor
 | 
			
		||||
 | 
			
		||||
# environment-variables
 | 
			
		||||
# Toolkit Backend Variables
 | 
			
		||||
env = GDK_BACKEND,wayland,x11,*
 | 
			
		||||
env = QT_QPA_PLATFORM,wayland;xcb
 | 
			
		||||
env = CLUTTER_BACKEND,wayland
 | 
			
		||||
 | 
			
		||||
#Run SDL2 applications on Wayland. 
 | 
			
		||||
#Remove or set to x11 if games that provide older versions of SDL cause compatibility issues
 | 
			
		||||
#env = SDL_VIDEODRIVER,wayland
 | 
			
		||||
 | 
			
		||||
# xdg Specifications
 | 
			
		||||
env = XDG_CURRENT_DESKTOP,Hyprland
 | 
			
		||||
env = XDG_SESSION_DESKTOP,Hyprland
 | 
			
		||||
env = XDG_SESSION_TYPE,wayland
 | 
			
		||||
 | 
			
		||||
# QT Variables
 | 
			
		||||
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
 | 
			
		||||
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
 | 
			
		||||
env = QT_QPA_PLATFORMTHEME,qt5ct 
 | 
			
		||||
env = QT_QPA_PLATFORMTHEME,qt6ct
 | 
			
		||||
 | 
			
		||||
# hyprland-qt-support
 | 
			
		||||
env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style
 | 
			
		||||
 | 
			
		||||
# xwayland apps scale fix (useful if you are use monitor scaling).
 | 
			
		||||
# Set same value if you use scaling in Monitors.conf
 | 
			
		||||
# 1 is 100% 1.5 is 150%
 | 
			
		||||
# see https://wiki.hyprland.org/Configuring/XWayland/
 | 
			
		||||
env = GDK_SCALE,1 
 | 
			
		||||
env = QT_SCALE_FACTOR,1
 | 
			
		||||
 | 
			
		||||
# Bibata-Modern-Ice-Cursor
 | 
			
		||||
# NOTE! You must have the hyprcursor version to activate this.
 | 
			
		||||
# https://wiki.hyprland.org/Hypr-Ecosystem/hyprcursor/
 | 
			
		||||
#env = HYPRCURSOR_THEME,Bibata-Modern-Ice
 | 
			
		||||
#env = HYPRCURSOR_SIZE,24
 | 
			
		||||
 | 
			
		||||
# firefox
 | 
			
		||||
env = MOZ_ENABLE_WAYLAND,1
 | 
			
		||||
 | 
			
		||||
# electron >28 apps (may help) ##
 | 
			
		||||
# https://www.electronjs.org/docs/latest/api/environment-variables
 | 
			
		||||
env = ELECTRON_OZONE_PLATFORM_HINT,auto # auto selects Wayland if possible, X11 otherwise
 | 
			
		||||
 | 
			
		||||
# 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 = __GL_GSYNC_ALLOWED,1 #adaptive Vsync
 | 
			
		||||
#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 # Warning. May cause hyprland to crash
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
#### Aquamarine Environment Variables #### ( Hyprland > 0.45 )
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Environment-variables/#aquamarine-environment-variables----ref-httpsgithubcomhyprwmaquamarineblobmaindocsenvmd---
 | 
			
		||||
# env = AQ_TRACE,1 # Enables more verbose logging.
 | 
			
		||||
# env = AQ_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0 # Set an explicit list of DRM devices (GPUs) to use. It’s a colon-separated list of paths, with the first being the primary. E.g. /dev/dri/card1:/dev/dri/card0
 | 
			
		||||
# env = AQ_MGPU_NO_EXPLICIT,1 # Disables explicit syncing on mgpu buffers
 | 
			
		||||
# env = AQ_NO_MODIFIERS,1 # Disables modifiers for DRM buffers
 | 
			
		||||
 | 
			
		||||
#### Hyprland Environment Variables ####
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Environment-variables/#hyprland-environment-variables
 | 
			
		||||
# env = HYPRLAND_TRACE,1 # Enables more verbose logging.
 | 
			
		||||
# env = HYPRLAND_NO_RT,1 # Disables realtime priority setting by Hyprland.
 | 
			
		||||
# env = HYPRLAND_NO_SD_NOTIFY,1 # If systemd, disables the 'sd_notify' calls.
 | 
			
		||||
# env = HYPRLAND_NO_SD_VARS,1 # Disables management of variables in systemd and dbus activation environments.
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
# NOTE, THIS FILE IS BEING USED by disabling Laptop display monitor behaviour when closing lid.
 | 
			
		||||
# See notes on Laptops.conf
 | 
			
		||||
 | 
			
		||||
#monitor = eDP-1, preferred, auto, 1
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
 | 
			
		||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings
 | 
			
		||||
# These configs are mostly for laptops. This is addemdum to Keybinds.conf
 | 
			
		||||
 | 
			
		||||
$mainMod = SUPER
 | 
			
		||||
$scriptsDir = $HOME/.config/hypr/scripts
 | 
			
		||||
$UserConfigs = $HOME/.config/hypr/UserConfigs
 | 
			
		||||
 | 
			
		||||
# for disabling Touchpad. hyprctl devices to get device name. 
 | 
			
		||||
$Touchpad_Device=asue1209:00-04f3:319f-touchpad
 | 
			
		||||
 | 
			
		||||
binde = , xf86KbdBrightnessDown, exec, $scriptsDir/BrightnessKbd.sh --dec # decrease keyboard brightness
 | 
			
		||||
binde = , xf86KbdBrightnessUp, exec, $scriptsDir/BrightnessKbd.sh --inc # increase keyboard brightness
 | 
			
		||||
bind = , xf86Launch1, exec, rog-control-center # ASUS Armory crate button
 | 
			
		||||
bind = , xf86Launch3, exec, asusctl led-mode -n # FN+F4 Switch keyboard RGB profile 
 | 
			
		||||
bind = , xf86Launch4, exec, asusctl profile -n  # FN+F5 change of fan profiles (Quite, Balance, Performance)
 | 
			
		||||
binde = , xf86MonBrightnessDown, exec, $scriptsDir/Brightness.sh --dec # decrease monitor brightness
 | 
			
		||||
binde = , xf86MonBrightnessUp, exec, $scriptsDir/Brightness.sh --inc # increase monitor brightness
 | 
			
		||||
bind = , xf86TouchpadToggle, exec, $scriptsDir/TouchPad.sh # disable touchpad
 | 
			
		||||
 | 
			
		||||
# Screenshot keybindings using F6 (no PrinSrc button)
 | 
			
		||||
bind = $mainMod, F6, exec, $scriptsDir/ScreenShot.sh --now # screenshot
 | 
			
		||||
bind = $mainMod SHIFT, F6, exec, $scriptsDir/ScreenShot.sh --area # screenshot (area)
 | 
			
		||||
bind = $mainMod CTRL, F6, exec, $scriptsDir/ScreenShot.sh --in5 # # screenshot (5 secs delay)
 | 
			
		||||
bind = $mainMod ALT, F6, exec, $scriptsDir/ScreenShot.sh --in10 # screenshot (10 secs delay)
 | 
			
		||||
bind = ALT, F6, exec, $scriptsDir/ScreenShot.sh --active # screenshot (active window only)
 | 
			
		||||
 | 
			
		||||
$TOUCHPAD_ENABLED = true
 | 
			
		||||
device {
 | 
			
		||||
  name = $Touchpad_Device
 | 
			
		||||
  enabled = $TOUCHPAD_ENABLED
 | 
			
		||||
}
 | 
			
		||||
# Below are useful when you are connecting your laptop in external display
 | 
			
		||||
# Suggest you edit below for your laptop display
 | 
			
		||||
# From WIKI This is to disable laptop monitor when lid is closed.
 | 
			
		||||
# consult https://wiki.hyprland.org/hyprland-wiki/pages/Configuring/Binds/#switches
 | 
			
		||||
#bindl = , switch:off:Lid Switch,exec,hyprctl keyword monitor "eDP-1, preferred, auto, 1"
 | 
			
		||||
#bindl = , switch:on:Lid Switch,exec,hyprctl keyword monitor "eDP-1, disable"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# WARNING! Using this method has some caveats!! USE THIS PART WITH SOME CAUTION!
 | 
			
		||||
# CONS of doing this, is that you need to set up your wallpaper (SUPER W) and choose wallpaper.
 | 
			
		||||
# CAVEATS! Sometimes the Main Laptop Monitor DOES NOT have display that it needs to re-connect your external monitor
 | 
			
		||||
# One work around is to ensure that before shutting down laptop, MAKE SURE your laptop lid is OPEN!!
 | 
			
		||||
# Make sure to comment (put # on the both the bindl = , switch ......) above
 | 
			
		||||
# NOTE: Display for laptop are being generated into LaptopDisplay.conf
 | 
			
		||||
# This part is to be use if you do not want your main laptop monitor to wake up during say wallpaper change etc
 | 
			
		||||
 | 
			
		||||
#bindl = , switch:off:Lid Switch,exec,echo "monitor = eDP-1, preferred, auto, 1" > $UserConfigs/LaptopDisplay.conf
 | 
			
		||||
#bindl = , switch:on:Lid Switch,exec,echo "monitor = eDP-1, disable" > $UserConfigs/LaptopDisplay.conf
 | 
			
		||||
 | 
			
		||||
# for laptop-lid action (to erase the last entry)
 | 
			
		||||
#exec-once = echo "monitor = eDP-1, preferred, auto, 1" > $HOME/.config/hypr/UserConfigs/LaptopDisplay.conf
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
#Commands & Apps to be executed at launch
 | 
			
		||||
 | 
			
		||||
$scriptsDir = $HOME/.config/hypr/scripts
 | 
			
		||||
$UserScripts = $HOME/.config/hypr/UserScripts
 | 
			
		||||
 | 
			
		||||
$wallDIR=$HOME/Pictures/wallpapers
 | 
			
		||||
$lock = $scriptsDir/LockScreen.sh
 | 
			
		||||
$SwwwRandom = $UserScripts/WallpaperAutoChange.sh
 | 
			
		||||
 | 
			
		||||
# wallpaper stuff / More wallpaper options below
 | 
			
		||||
exec-once = swww-daemon --format xrgb
 | 
			
		||||
#exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes 
 | 
			
		||||
 | 
			
		||||
# Startup
 | 
			
		||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
 | 
			
		||||
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
 | 
			
		||||
 | 
			
		||||
# Polkit (Polkit Gnome / KDE)
 | 
			
		||||
exec-once = $scriptsDir/Polkit.sh
 | 
			
		||||
 | 
			
		||||
# starup apps
 | 
			
		||||
exec-once = waybar &
 | 
			
		||||
exec-once = nm-applet --indicator &
 | 
			
		||||
exec-once = swaync &
 | 
			
		||||
#exec-once = ags &
 | 
			
		||||
#exec-once = blueman-applet & 
 | 
			
		||||
#exec-once = rog-control-center &
 | 
			
		||||
 | 
			
		||||
#clipboard manager
 | 
			
		||||
exec-once = wl-paste --type text --watch cliphist store 
 | 
			
		||||
exec-once = wl-paste --type image --watch cliphist store
 | 
			
		||||
 | 
			
		||||
# Rainbow borders
 | 
			
		||||
exec-once = $UserScripts/RainbowBorders.sh &
 | 
			
		||||
 | 
			
		||||
# Starting hypridle to start hyprlock
 | 
			
		||||
exec-once = hypridle &
 | 
			
		||||
 | 
			
		||||
# Start pyprland daemon
 | 
			
		||||
exec-once = pypr &
 | 
			
		||||
 | 
			
		||||
# Here are list of features available but disabled by default
 | 
			
		||||
# exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png  # persistent wallpaper
 | 
			
		||||
 | 
			
		||||
#gnome polkit for nixos
 | 
			
		||||
#exec-once = $scriptsDir/Polkit-NixOS.sh
 | 
			
		||||
 | 
			
		||||
# xdg-desktop-portal-hyprland (should be auto starting. However, you can force to start)
 | 
			
		||||
#exec-once = $scriptsDir/PortalHyprland.sh
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
 | 
			
		||||
animations {
 | 
			
		||||
  enabled = yes
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
  
 | 
			
		||||
  # animations for -git or version >0.42.0
 | 
			
		||||
  animation = workspacesIn, 1, 5, winIn, slide
 | 
			
		||||
  animation = workspacesOut, 1, 5, winOut, slide
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
# Decoration Settings
 | 
			
		||||
 | 
			
		||||
# Hyprland Wiki Links
 | 
			
		||||
# Animation - https://wiki.hyprland.org/Configuring/Animations/
 | 
			
		||||
# Decoration - https://wiki.hyprland.org/Configuring/Variables/#decoration
 | 
			
		||||
 | 
			
		||||
# Sourcing colors generated by wallust
 | 
			
		||||
source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
  border_size = 2
 | 
			
		||||
  gaps_in = 2
 | 
			
		||||
  gaps_out = 4
 | 
			
		||||
  
 | 
			
		||||
  col.active_border = $color12 
 | 
			
		||||
  col.inactive_border = $color10
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
  shadow {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    range = 3
 | 
			
		||||
    render_power = 1
 | 
			
		||||
 | 
			
		||||
    color =  $color12
 | 
			
		||||
    color_inactive = $color10
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  blur {
 | 
			
		||||
    enabled = true	
 | 
			
		||||
    size = 6
 | 
			
		||||
    passes = 2
 | 
			
		||||
    ignore_opacity = true
 | 
			
		||||
    new_optimizations = true
 | 
			
		||||
    special = true
 | 
			
		||||
    popups = true
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
group {
 | 
			
		||||
  col.border_active = $color15
 | 
			
		||||
 | 
			
		||||
	groupbar {
 | 
			
		||||
		col.active = $color0
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
# This is where you put your own keybinds. Be mindful to check ~/.config/hypr/configs/Keybinds.conf as well to avoid conflict
 | 
			
		||||
 | 
			
		||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more settings and variables
 | 
			
		||||
# See also Laptops.conf for laptops keybinds 
 | 
			
		||||
 | 
			
		||||
# /* ---- ✴️ Variables ✴️ ---- */  #
 | 
			
		||||
$mainMod = SUPER
 | 
			
		||||
$files = thunar
 | 
			
		||||
$term = kitty
 | 
			
		||||
$scriptsDir = $HOME/.config/hypr/scripts
 | 
			
		||||
$UserScripts = $HOME/.config/hypr/UserScripts
 | 
			
		||||
 | 
			
		||||
# common shortcuts
 | 
			
		||||
#bindr = $mainMod, $mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window # Super Key to Launch rofi menu
 | 
			
		||||
bind = $mainMod, D, exec, pkill rofi || true && rofi -show drun -modi drun,filebrowser,run,window # Main Menu (APP Launcher)
 | 
			
		||||
bind = $mainMod, B, exec, xdg-open "http:// &"  # default browser
 | 
			
		||||
bind = $mainMod, A, exec, pkill rofi || true && ags -t 'overview' # desktop overview (if installed)
 | 
			
		||||
bind = $mainMod, Return, exec, $term  #terminal
 | 
			
		||||
bind = $mainMod, E, exec, $files #file manager
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# FEATURES / EXTRAS
 | 
			
		||||
bind = $mainMod, H, exec, $scriptsDir/KeyHints.sh # help / cheat sheet
 | 
			
		||||
bind = $mainMod ALT, R, exec, $scriptsDir/Refresh.sh # Refresh waybar, swaync, rofi
 | 
			
		||||
bind = $mainMod ALT, E, exec, $scriptsDir/RofiEmoji.sh # emoji menu
 | 
			
		||||
bind = $mainMod, S, exec, $scriptsDir/RofiSearch.sh # Google search using rofi
 | 
			
		||||
bind = $mainMod ALT, O, exec, $scriptsDir/ChangeBlur.sh # Toggle blur settings 
 | 
			
		||||
bind = $mainMod SHIFT, G, exec, $scriptsDir/GameMode.sh # Toggle 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 CTRL, R, exec, $scriptsDir/RofiThemeSelector.sh # Rofi Menu Theme Selector
 | 
			
		||||
bind = $mainMod CTRL SHIFT, R, exec, pkill rofi || true && $scriptsDir/RofiThemeSelector-modified.sh # modified Rofi Theme Selector
 | 
			
		||||
 | 
			
		||||
bind = $mainMod SHIFT, F, fullscreen # whole full screen
 | 
			
		||||
bind = $mainMod CTRL, F, fullscreen, 1 # fake full screen
 | 
			
		||||
bind = $mainMod, SPACE, togglefloating, #Float Mode
 | 
			
		||||
bind = $mainMod ALT, SPACE, exec, hyprctl dispatch workspaceopt allfloat #All Float Mode
 | 
			
		||||
 | 
			
		||||
# Waybar / Bar related
 | 
			
		||||
bind = $mainMod CTRL ALT, 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
 | 
			
		||||
 | 
			
		||||
# FEATURES / EXTRAS (UserScripts)
 | 
			
		||||
bind = $mainMod SHIFT, E, exec, $UserScripts/NixosDots_Quick_Settings.sh # Settings Menu Nixos-Dots Hyprland Settings
 | 
			
		||||
bind = $mainMod SHIFT, M, exec, $UserScripts/RofiBeats.sh # online music using rofi
 | 
			
		||||
bind = $mainMod, W, exec, $UserScripts/WallpaperSelect.sh # Select wallpaper to apply
 | 
			
		||||
bind = $mainMod SHIFT, W, exec, $UserScripts/WallpaperEffects.sh # Wallpaper Effects by imagemagick
 | 
			
		||||
bind = CTRL ALT, W, exec, $UserScripts/WallpaperRandom.sh # Random wallpapers
 | 
			
		||||
bind = $mainMod CTRL, O, exec, hyprctl setprop active opaque toggle # disable opacity on active window
 | 
			
		||||
bind = $mainMod SHIFT, K, exec, $scriptsDir/KeyBinds.sh # search keybinds via rofi
 | 
			
		||||
bind = $mainMod SHIFT, A, exec, $scriptsDir/Animations.sh #hyprland animations menu
 | 
			
		||||
bind = $mainMod SHIFT, O, exec, $UserScripts/ZshChangeTheme.sh # Change oh-my-zsh theme
 | 
			
		||||
bindln = ALT_L, SHIFT_L, exec, $scriptsDir/SwitchKeyboardLayout.sh # Change keyboard layout
 | 
			
		||||
bind = $mainMod ALT, C, exec, $UserScripts/RofiCalc.sh # calculator (qalculate)
 | 
			
		||||
 | 
			
		||||
# pyprland (This is not available in Debian and Ubuntu)
 | 
			
		||||
bind = $mainMod SHIFT, Return, exec, pypr toggle term # Dropdown terminal not avail Debian and Ubuntu
 | 
			
		||||
bind = $mainMod, Z, exec, pypr zoom # Toggle Desktop Zoom
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# For passthrough keyboard into a VM
 | 
			
		||||
# bind = $mainMod ALT, P, submap, passthru
 | 
			
		||||
#submap = passthru
 | 
			
		||||
# to unbind
 | 
			
		||||
#bind = $mainMod ALT, P, submap, reset
 | 
			
		||||
#submap = reset
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,118 @@
 | 
			
		|||
# User Settings
 | 
			
		||||
# This is where you put your own settings as this will not be touched during update 
 | 
			
		||||
# if the upgrade.sh is used.
 | 
			
		||||
 | 
			
		||||
# refer to Hyprland wiki for more info https://wiki.hyprland.org/Configuring/Variables/
 | 
			
		||||
 | 
			
		||||
# NOTE: some settings are in ~/.config/hypr/UserConfigs/UserDecorAnimations.conf
 | 
			
		||||
 | 
			
		||||
dwindle {
 | 
			
		||||
  pseudotile = yes
 | 
			
		||||
  preserve_split = yes
 | 
			
		||||
  special_scale_factor = 0.8
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
master {
 | 
			
		||||
  new_status = master
 | 
			
		||||
  new_on_top = 1
 | 
			
		||||
  mfact = 0.5
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
  resize_on_border = true
 | 
			
		||||
     
 | 
			
		||||
  layout = dwindle
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input {
 | 
			
		||||
  kb_layout = us
 | 
			
		||||
  kb_variant =
 | 
			
		||||
  kb_model =
 | 
			
		||||
  kb_options =
 | 
			
		||||
  kb_rules =
 | 
			
		||||
  repeat_rate = 50
 | 
			
		||||
  repeat_delay = 300
 | 
			
		||||
  
 | 
			
		||||
  sensitivity = 0 #mouse sensitivity
 | 
			
		||||
  numlock_by_default = true
 | 
			
		||||
  left_handed = false
 | 
			
		||||
  follow_mouse = true
 | 
			
		||||
  float_switch_override_focus = false
 | 
			
		||||
 | 
			
		||||
  touchpad {
 | 
			
		||||
    disable_while_typing = true
 | 
			
		||||
    natural_scroll = false 
 | 
			
		||||
    clickfinger_behavior = false
 | 
			
		||||
    middle_button_emulation = true
 | 
			
		||||
    tap-to-click = true
 | 
			
		||||
    drag_lock = false
 | 
			
		||||
          }
 | 
			
		||||
  
 | 
			
		||||
  # below for devices with touchdevice ie. touchscreen
 | 
			
		||||
	touchdevice {
 | 
			
		||||
		enabled = true
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	# below is for table see link above for proper variables
 | 
			
		||||
	tablet {
 | 
			
		||||
		transform = 0
 | 
			
		||||
		left_handed = 0
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
misc {
 | 
			
		||||
  disable_hyprland_logo = true
 | 
			
		||||
  disable_splash_rendering = true
 | 
			
		||||
  vfr = true
 | 
			
		||||
  vrr = 2
 | 
			
		||||
  mouse_move_enables_dpms = true
 | 
			
		||||
  enable_swallow = true
 | 
			
		||||
  swallow_regex = ^(kitty)$
 | 
			
		||||
  focus_on_activate = false
 | 
			
		||||
  initial_workspace_tracking = 0
 | 
			
		||||
  middle_click_paste = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#opengl {
 | 
			
		||||
#  nvidia_anti_flicker = true
 | 
			
		||||
#}
 | 
			
		||||
 | 
			
		||||
binds {
 | 
			
		||||
  workspace_back_and_forth = true
 | 
			
		||||
  allow_workspace_cycles = true
 | 
			
		||||
  pass_mouse_when_bound = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#Could help when scaling and not pixelating
 | 
			
		||||
xwayland {
 | 
			
		||||
  enabled = true
 | 
			
		||||
  force_zero_scaling = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# render section for Hyprland >= v0.42.0
 | 
			
		||||
render {
 | 
			
		||||
  explicit_sync = 2
 | 
			
		||||
  explicit_sync_kms = 2
 | 
			
		||||
  direct_scanout = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cursor {
 | 
			
		||||
  sync_gsettings_theme = true
 | 
			
		||||
  no_hardware_cursors = false
 | 
			
		||||
  enable_hyprcursor = true
 | 
			
		||||
  warp_on_change_workspace = 2
 | 
			
		||||
  no_warps = true 
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,201 @@
 | 
			
		|||
# For window rules and layerrules
 | 
			
		||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
 | 
			
		||||
 | 
			
		||||
# windowrule v2 - tags - add apps under appropriate tag to use the same settings
 | 
			
		||||
# browser tags
 | 
			
		||||
windowrulev2 = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr)$
 | 
			
		||||
windowrulev2 = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$
 | 
			
		||||
windowrulev2 = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs
 | 
			
		||||
windowrulev2 = tag +browser, class:^([Cc]hromium)$
 | 
			
		||||
windowrulev2 = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$
 | 
			
		||||
windowrulev2 = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$
 | 
			
		||||
windowrulev2 = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$
 | 
			
		||||
windowrulev2 = tag +browser, class:^(zen-alpha|zen)$
 | 
			
		||||
windowrulev2 = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$
 | 
			
		||||
windowrulev2 = tag +NixosDots_Settings, title:^(Nixos-Dots Settings)$
 | 
			
		||||
windowrulev2 = tag +NixosDots-Settings, class:^(nwg-displays|nwg-look)$
 | 
			
		||||
 | 
			
		||||
# terminal tags
 | 
			
		||||
windowrulev2 = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$
 | 
			
		||||
 | 
			
		||||
# email tags
 | 
			
		||||
windowrulev2 = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$
 | 
			
		||||
windowrulev2 = tag +email, class:^(eu.betterbird.Betterbird)$
 | 
			
		||||
 | 
			
		||||
# project tags
 | 
			
		||||
windowrulev2 = tag +projects, class:^(codium|codium-url-handler|VSCodium)$
 | 
			
		||||
windowrulev2 = tag +projects, class:^(VSCode|code-url-handler)$
 | 
			
		||||
windowrulev2 = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs
 | 
			
		||||
 | 
			
		||||
# screenshare tags
 | 
			
		||||
windowrulev2 = tag +screenshare, class:^(com.obsproject.Studio)$
 | 
			
		||||
 | 
			
		||||
# IM tags
 | 
			
		||||
windowrulev2 = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$
 | 
			
		||||
windowrulev2 = tag +im, class:^([Ff]erdium)$
 | 
			
		||||
windowrulev2 = tag +im, class:^([Ww]hatsapp-for-linux)$
 | 
			
		||||
windowrulev2 = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ 
 | 
			
		||||
windowrulev2 = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$
 | 
			
		||||
windowrulev2 = tag +im, class:^(teams-for-linux)$
 | 
			
		||||
 | 
			
		||||
# game tags
 | 
			
		||||
windowrulev2 = tag +games, class:^(gamescope)$
 | 
			
		||||
windowrulev2 = tag +games, class:^(steam_app_\d+)$
 | 
			
		||||
 | 
			
		||||
# gamestore tags
 | 
			
		||||
windowrulev2 = tag +gamestore, class:^([Ss]team)$
 | 
			
		||||
windowrulev2 = tag +gamestore, title:^([Ll]utris)$
 | 
			
		||||
windowrulev2 = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$
 | 
			
		||||
 | 
			
		||||
# file-manager tags
 | 
			
		||||
windowrulev2 = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$
 | 
			
		||||
windowrulev2 = tag +file-manager, class:^(app.drey.Warp)$
 | 
			
		||||
 | 
			
		||||
# wallpaper tags
 | 
			
		||||
windowrulev2 = tag +wallpaper title:^([Ww]aytrogen)$
 | 
			
		||||
windowrulev2 = tag +wallpaper, class:^([Ww]aytrogen)$
 | 
			
		||||
 | 
			
		||||
# multimedia tags
 | 
			
		||||
windowrulev2 = tag +multimedia, class:^([Aa]udacious)$
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# settings tags
 | 
			
		||||
windowrulev2 = tag +settings, title:^(ROG Control)$
 | 
			
		||||
windowrulev2 = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot
 | 
			
		||||
windowrulev2 = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer
 | 
			
		||||
windowrulev2 = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$
 | 
			
		||||
windowrulev2 = tag +settings, title:(Kvantum Manager)
 | 
			
		||||
windowrulev2 = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager
 | 
			
		||||
windowrulev2 = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$
 | 
			
		||||
windowrulev2 = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$
 | 
			
		||||
windowrulev2 = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$
 | 
			
		||||
windowrulev2 = tag +settings, class:(xdg-desktop-portal-gtk)
 | 
			
		||||
windowrulev2 = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$
 | 
			
		||||
windowrulev2 = tag +settings, class:^([Rr]ofi)$
 | 
			
		||||
 | 
			
		||||
# viewer tags
 | 
			
		||||
windowrulev2 = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor
 | 
			
		||||
windowrulev2 = tag +viewer, class:^(evince)$ # document viewer 
 | 
			
		||||
windowrulev2 = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer
 | 
			
		||||
 | 
			
		||||
# POSITION
 | 
			
		||||
# windowrulev2 = center,floating:1 # warning, it cause even the menu to float and center.
 | 
			
		||||
windowrulev2 = center, title:^(Nixos-Dots Quick Cheat Sheet)$
 | 
			
		||||
windowrulev2 = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*)
 | 
			
		||||
windowrulev2 = center, title:^(ROG Control)$
 | 
			
		||||
windowrulev2 = center, tag:NixosDots-Settings*
 | 
			
		||||
windowrulev2 = center, title:^(Keybindings)$
 | 
			
		||||
windowrulev2 = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$
 | 
			
		||||
windowrulev2 = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$
 | 
			
		||||
windowrulev2 = center, class:^([Ff]erdium)$
 | 
			
		||||
windowrulev2 = move 72% 7%,title:^(Picture-in-Picture)$ 
 | 
			
		||||
#windowrulev2 = move 72% 7%,title:^(Firefox)$ 
 | 
			
		||||
 | 
			
		||||
# windowrule v2 to avoid idle for fullscreen apps
 | 
			
		||||
#windowrulev2 = idleinhibit fullscreen, class:^(*)$
 | 
			
		||||
#windowrulev2 = idleinhibit fullscreen, title:^(*)$
 | 
			
		||||
windowrulev2 = idleinhibit fullscreen, fullscreen:1
 | 
			
		||||
 | 
			
		||||
# windowrule v2 move to workspace
 | 
			
		||||
windowrulev2 = workspace 1, tag:email*
 | 
			
		||||
windowrulev2 = workspace 2, tag:browser*
 | 
			
		||||
#windowrulev2 = workspace 3, class:^([Tt]hunar)$
 | 
			
		||||
#windowrulev2 = workspace 3, tag:projects*
 | 
			
		||||
windowrulev2 = workspace 5, tag:gamestore*
 | 
			
		||||
windowrulev2 = workspace 7, tag:im*
 | 
			
		||||
windowrulev2 = workspace 8, tag:games*
 | 
			
		||||
 | 
			
		||||
# windowrule v2 move to workspace (silent)
 | 
			
		||||
windowrulev2 = workspace 4 silent, tag:screenshare*
 | 
			
		||||
windowrulev2 = workspace 6 silent, class:^(virt-manager)$
 | 
			
		||||
windowrulev2 = workspace 6 silent, class:^(.virt-manager-wrapped)$
 | 
			
		||||
windowrulev2 = workspace 9 silent, tag:multimedia*
 | 
			
		||||
 | 
			
		||||
# FLOAT
 | 
			
		||||
windowrulev2 = float, title:^(Nixos-Dots Quick Cheat Sheet)$
 | 
			
		||||
windowrulev2 = float, tag:wallpaper*
 | 
			
		||||
windowrulev2 = float, tag:settings*
 | 
			
		||||
windowrulev2 = float, tag:viewer*
 | 
			
		||||
windowrulev2 = float, tag:NixosDots-Settings*
 | 
			
		||||
windowrulev2 = float, class:([Zz]oom|onedriver|onedriver-launcher)$
 | 
			
		||||
windowrulev2 = float, class:(org.gnome.Calculator), title:(Calculator)
 | 
			
		||||
windowrulev2 = float, class:^(mpv|com.github.rafostar.Clapper)$
 | 
			
		||||
windowrulev2 = float, class:^([Qq]alculate-gtk)$
 | 
			
		||||
#windowrulev2 = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$
 | 
			
		||||
windowrulev2 = float, class:^([Ff]erdium)$
 | 
			
		||||
windowrulev2 = float, title:^(Picture-in-Picture)$
 | 
			
		||||
#windowrulev2 = float, title:^(Firefox)$
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#windowrule v2 - float popups and dialogue
 | 
			
		||||
windowrulev2 = float, title:^(Authentication Required)$
 | 
			
		||||
windowrulev2 = center, title:^(Authentication Required)$
 | 
			
		||||
windowrulev2 = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*)
 | 
			
		||||
windowrulev2 = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher)
 | 
			
		||||
windowrulev2 = float, class:^([Ss]team)$, title:negative:^([Ss]team)$
 | 
			
		||||
windowrulev2 = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*)
 | 
			
		||||
#windowrulev2 = float, class:(electron), title:(Add Folder to Workspace)
 | 
			
		||||
windowrulev2 = float, title:^(Add Folder to Workspace)$
 | 
			
		||||
windowrulev2 = size 70% 60%, title:^(Add Folder to Workspace)$
 | 
			
		||||
windowrulev2 = center, title:^(Add Folder to Workspace)$
 | 
			
		||||
windowrulev2 = float, initialTitle:(Open Files)
 | 
			
		||||
windowrulev2 = size 70% 60%, initialTitle:(Open Files)
 | 
			
		||||
windowrulev2 = float, title:^(SDDM Background)$ # Nixos-Dots YAD for setting SDDM background
 | 
			
		||||
windowrulev2 = size 15% 10%, title:^(SDDM Background)$ # Nixos-Dots YAD for setting SDDM background
 | 
			
		||||
 | 
			
		||||
# OPACITY
 | 
			
		||||
windowrulev2 = opacity 0.9 0.7, tag:browser*
 | 
			
		||||
windowrulev2 = opacity 0.9 0.8, tag:projects*
 | 
			
		||||
windowrulev2 = opacity 0.94 0.86, tag:im*
 | 
			
		||||
windowrulev2 = opacity 0.94 0.86, tag:multimedia*
 | 
			
		||||
windowrulev2 = opacity 0.9 0.8, tag:file-manager*
 | 
			
		||||
windowrulev2 = opacity 0.8 0.7, tag:terminal*
 | 
			
		||||
windowrulev2 = opacity 0.8 0.7, tag:settings*
 | 
			
		||||
windowrulev2 = opacity 0.82 0.75, tag:viewer*
 | 
			
		||||
windowrulev2 = opacity 0.9 0.7, tag:wallpaper*
 | 
			
		||||
windowrulev2 = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$
 | 
			
		||||
windowrulev2 = opacity 0.9 0.8, class:^(deluge)$
 | 
			
		||||
windowrulev2 = opacity 0.9 0.8, class:^(im.riot.Riot)$ # Element matrix client
 | 
			
		||||
windowrulev2 = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui
 | 
			
		||||
windowrulev2 = opacity 0.95 0.75, title:^(Picture-in-Picture)$
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# SIZE
 | 
			
		||||
windowrulev2 = size 65% 90%, title:^(Nixos-Dots Quick Cheat Sheet)$
 | 
			
		||||
windowrulev2 = size 70% 70%, tag:wallpaper*
 | 
			
		||||
windowrulev2 = size 70% 70%, tag:settings*
 | 
			
		||||
windowrulev2 = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$
 | 
			
		||||
windowrulev2 = size 60% 70%, class:^([Ff]erdium)$
 | 
			
		||||
 | 
			
		||||
#windowrulev2 = size 25% 25%, title:^(Picture-in-Picture)$   
 | 
			
		||||
#windowrulev2 = size 25% 25%, title:^(Firefox)$ 
 | 
			
		||||
 | 
			
		||||
# PINNING
 | 
			
		||||
windowrulev2 = pin, title:^(Picture-in-Picture)$
 | 
			
		||||
#windowrulev2 = pin,title:^(Firefox)$ 
 | 
			
		||||
 | 
			
		||||
# windowrule v2 - extras
 | 
			
		||||
windowrulev2 = keepaspectratio, title:^(Picture-in-Picture)$
 | 
			
		||||
 | 
			
		||||
# BLUR & FULLSCREEN
 | 
			
		||||
windowrulev2 = noblur, tag:games*
 | 
			
		||||
windowrulev2 = fullscreen, tag:games*
 | 
			
		||||
 | 
			
		||||
#windowrulev2 = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1
 | 
			
		||||
#windowrulev2 = bordercolor rgb(282737) rgb(1E1D2D), floating:1
 | 
			
		||||
#windowrulev2 = opacity 0.8 0.8, pinned:1
 | 
			
		||||
 | 
			
		||||
# LAYER RULES
 | 
			
		||||
layerrule = blur, rofi
 | 
			
		||||
layerrule = ignorezero, rofi
 | 
			
		||||
layerrule = blur, notifications
 | 
			
		||||
layerrule = ignorezero, notifications
 | 
			
		||||
#layerrule = ignorealpha 0.5, tag:notif*
 | 
			
		||||
 | 
			
		||||
#layerrule = ignorezero, class:^([Rr]ofi)$
 | 
			
		||||
#layerrule = blur, class:^([Rr]ofi)$
 | 
			
		||||
#layerrule = unset,class:^([Rr]ofi)$
 | 
			
		||||
#layerrule = ignorezero, <rofi>
 | 
			
		||||
 | 
			
		||||
#layerrule = ignorezero, overview
 | 
			
		||||
#layerrule = blur, overview
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
 | 
			
		||||
# NOTE: THIS IS NOT BEING SOURCED by hyprland
 | 
			
		||||
# It is only here as a guide if you want to do it manually
 | 
			
		||||
# The file you should edit is ~/.config/hypr/workspaces.conf
 | 
			
		||||
# Since that is the work space rules being sourced by hyprland
 | 
			
		||||
# use nwg-displays to handle your workspace rules.
 | 
			
		||||
 | 
			
		||||
# You can set workspace rules to achieve workspace-specific behaviors. 
 | 
			
		||||
# For instance, you can define a workspace where all windows are drawn without borders or gaps.
 | 
			
		||||
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Workspace-Rules/
 | 
			
		||||
 | 
			
		||||
# Assigning workspace to a certain monitor. Below are just examples
 | 
			
		||||
# workspace = 1, monitor:eDP-1
 | 
			
		||||
# workspace = 2, monitor:eDP-1
 | 
			
		||||
# workspace = 3, monitor:eDP-1
 | 
			
		||||
# workspace = 4, monitor:eDP-1
 | 
			
		||||
# workspace = 5, monitor:DP-2
 | 
			
		||||
# workspace = 6, monitor:DP-2
 | 
			
		||||
# workspace = 7, monitor:DP-2
 | 
			
		||||
# workspace = 8, monitor:DP-2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# example rules (from wiki)
 | 
			
		||||
# workspace = 3, rounding:false, decorate:false
 | 
			
		||||
# workspace = name:coding, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false, monitor:DP-1
 | 
			
		||||
# workspace = 8,bordersize:8
 | 
			
		||||
# workspace = name:Hello, monitor:DP-1, default:true
 | 
			
		||||
# workspace = name:gaming, monitor:desc:Chimei Innolux Corporation 0x150C, default:true
 | 
			
		||||
# workspace = 5, on-created-empty:[float] firefox
 | 
			
		||||
# workspace = special:scratchpad, on-created-empty:foot
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
# Place your new scripts here. 
 | 
			
		||||
# If you need to edit a script from main script (~/.config/hypr/scripts), copy it on this folder, and edit. 
 | 
			
		||||
# Make sure to update as well the keybinds in ~/.config/hypr/UserConfigs folder if any script is linked to it
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Rofi menu for Nixos-Dots Quick Settings (SUPER SHIFT E)
 | 
			
		||||
 | 
			
		||||
# Define preferred text editor and terminal
 | 
			
		||||
edit=${EDITOR:-nano}
 | 
			
		||||
tty=kitty
 | 
			
		||||
 | 
			
		||||
# variables
 | 
			
		||||
configs="$HOME/.config/hypr/configs"
 | 
			
		||||
UserConfigs="$HOME/.config/hypr/UserConfigs"
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-edit.rasi"
 | 
			
		||||
msg=' ⁉️ Choose what to do ⁉️'
 | 
			
		||||
iDIR="$HOME/.config/swaync/images"
 | 
			
		||||
scriptsDir="$HOME/.config/hypr/scripts"
 | 
			
		||||
UserScripts="$HOME/.config/hypr/UserScripts"
 | 
			
		||||
 | 
			
		||||
# Function to display the menu options without numbers
 | 
			
		||||
menu() {
 | 
			
		||||
    cat <<EOF
 | 
			
		||||
view/edit ENV variables
 | 
			
		||||
view/edit Window Rules
 | 
			
		||||
view/edit User Keybinds
 | 
			
		||||
view/edit User Settings
 | 
			
		||||
view/edit Startup Apps
 | 
			
		||||
view/edit Decorations
 | 
			
		||||
view/edit Animations
 | 
			
		||||
view/edit Laptop Keybinds
 | 
			
		||||
view/edit Default Keybinds
 | 
			
		||||
Configure Monitors (nwg-displays)
 | 
			
		||||
Configure Workspace Rules (nwg-displays)
 | 
			
		||||
Choose Hyprland Animations
 | 
			
		||||
Choose Monitor Profiles
 | 
			
		||||
Choose Rofi Themes
 | 
			
		||||
Search for Keybinds
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Main function to handle menu selection
 | 
			
		||||
main() {
 | 
			
		||||
    choice=$(menu | rofi -i -dmenu -config $rofi_theme -mesg "$msg")
 | 
			
		||||
    
 | 
			
		||||
    # Map choices to corresponding files
 | 
			
		||||
    case "$choice" in
 | 
			
		||||
        "view/edit ENV variables") file="$UserConfigs/ENVariables.conf" ;;
 | 
			
		||||
        "view/edit Window Rules") file="$UserConfigs/WindowRules.conf" ;;
 | 
			
		||||
        "view/edit User Keybinds") file="$UserConfigs/UserKeybinds.conf" ;;
 | 
			
		||||
        "view/edit User Settings") file="$UserConfigs/UserSettings.conf" ;;
 | 
			
		||||
        "view/edit Startup Apps") file="$UserConfigs/Startup_Apps.conf" ;;
 | 
			
		||||
        "view/edit Decorations") file="$UserConfigs/UserDecorations.conf" ;;
 | 
			
		||||
        "view/edit Animations") file="$UserConfigs/UserAnimations.conf" ;;
 | 
			
		||||
        "view/edit Laptop Keybinds") file="$UserConfigs/Laptops.conf" ;;
 | 
			
		||||
        "view/edit Default Keybinds") file="$configs/Keybinds.conf" ;;
 | 
			
		||||
        "Configure Monitors (nwg-displays)") 
 | 
			
		||||
            if ! command -v nwg-displays &>/dev/null; then
 | 
			
		||||
                notify-send -i "$iDIR/ja.png" "E-R-R-O-R" "Install nwg-displays first"
 | 
			
		||||
                exit 1
 | 
			
		||||
            fi
 | 
			
		||||
            nwg-displays ;;
 | 
			
		||||
        "Configure Workspace Rules (nwg-displays)") 
 | 
			
		||||
            if ! command -v nwg-displays &>/dev/null; then
 | 
			
		||||
                notify-send -i "$iDIR/ja.png" "E-R-R-O-R" "Install nwg-displays first"
 | 
			
		||||
                exit 1
 | 
			
		||||
            fi
 | 
			
		||||
            nwg-displays ;;
 | 
			
		||||
        "Choose Hyprland Animations") $scriptsDir/Animations.sh ;;
 | 
			
		||||
        "Choose Monitor Profiles") $scriptsDir/MonitorProfiles.sh ;;
 | 
			
		||||
        "Choose Rofi Themes") $scriptsDir/RofiThemeSelector.sh ;;
 | 
			
		||||
        "Search for Keybinds") $scriptsDir/KeyBinds.sh ;;
 | 
			
		||||
        *) return ;;  # Do nothing for invalid choices
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    # Open the selected file in the terminal with the text editor
 | 
			
		||||
    if [ -n "$file" ]; then
 | 
			
		||||
        $tty -e $edit "$file"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if rofi is already running
 | 
			
		||||
if pidof rofi > /dev/null; then
 | 
			
		||||
  pkill rofi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
main
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# for rainbow borders animation
 | 
			
		||||
 | 
			
		||||
function random_hex() {
 | 
			
		||||
    random_hex=("0xff$(openssl rand -hex 3)")
 | 
			
		||||
    echo $random_hex
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# rainbow colors only for active window
 | 
			
		||||
hyprctl keyword general:col.active_border $(random_hex)  $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex)  270deg
 | 
			
		||||
 | 
			
		||||
# rainbow colors for inactive window (uncomment to take effect)
 | 
			
		||||
#hyprctl keyword general:col.inactive_border $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) 270deg
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,124 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# For Rofi Beats to play online Music or Locally save media files
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
mDIR="$HOME/Music/"
 | 
			
		||||
iDIR="$HOME/.config/swaync/icons"
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-rofi-Beats.rasi"
 | 
			
		||||
rofi_theme_1="$HOME/.config/rofi/config-rofi-Beats-menu.rasi"
 | 
			
		||||
 | 
			
		||||
# Online Stations. Edit as required
 | 
			
		||||
declare -A online_music=(
 | 
			
		||||
  ["FM - Easy Rock 96.3 📻🎶"]="https://radio-stations-philippines.com/easy-rock"
 | 
			
		||||
  ["FM - Easy Rock - Baguio 91.9 📻🎶"]="https://radio-stations-philippines.com/easy-rock-baguio" 
 | 
			
		||||
  ["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"
 | 
			
		||||
  ["Radio - Lofi Girl 🎧🎶"]="https://play.streamafrica.net/lofiradio"
 | 
			
		||||
  ["Radio - Chillhop 🎧🎶"]="http://stream.zeno.fm/fyn8eh3h5f8uv"
 | 
			
		||||
  ["Radio - Ibiza Global 🎧🎶"]="https://filtermusic.net/ibiza-global"
 | 
			
		||||
  ["Radio - Metal Music 🎧🎶"]="https://tunein.com/radio/mETaLmuSicRaDio-s119867/"
 | 
			
		||||
  ["YT - Wish 107.5 YT Pinoy HipHop 📻🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJnmgMYwCKid4XIFqUKBVWEs&si=vahW_noh4UDJ5d37"
 | 
			
		||||
  ["YT - Youtube Top 100 Songs Global 📹🎶"]="https://youtube.com/playlist?list=PL4fGSI1pDJn6puJdseH2Rt9sMvt9E2M4i&si=5jsyfqcoUXBCSLeu"
 | 
			
		||||
  ["YT - Wish 107.5 YT Wishclusives 📹🎶"]="https://youtube.com/playlist?list=PLkrzfEDjeYJn5B22H9HOWP3Kxxs-DkPSM&si=d_Ld2OKhGvpH48WO"
 | 
			
		||||
  ["YT - Relaxing Piano Music 🎹🎶"]="https://youtu.be/6H7hXzjFoVU?si=nZTPREC9lnK1JJUG"
 | 
			
		||||
  ["YT - Youtube Remix 📹🎶"]="https://youtube.com/playlist?list=PLeqTkIUlrZXlSNn3tcXAa-zbo95j0iN-0"
 | 
			
		||||
  ["YT - Korean Drama OST 📹🎶"]="https://youtube.com/playlist?list=PLUge_o9AIFp4HuA-A3e3ZqENh63LuRRlQ"
 | 
			
		||||
  ["YT - lofi hip hop radio beats 📹🎶"]="https://www.youtube.com/live/jfKfPfyJRdk?si=PnJIA9ErQIAw6-qd"
 | 
			
		||||
  ["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 -L "$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" " Now 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 $rofi_theme)
 | 
			
		||||
 | 
			
		||||
  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 Play 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=$(for online in "${!online_music[@]}"; do
 | 
			
		||||
      echo "$online"
 | 
			
		||||
    done | sort | rofi -i -dmenu -config "$rofi_theme")
 | 
			
		||||
 | 
			
		||||
  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" || {
 | 
			
		||||
 | 
			
		||||
# Check if rofi is already running
 | 
			
		||||
if pidof rofi > /dev/null; then
 | 
			
		||||
  pkill rofi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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 $rofi_theme_1)
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# /* Calculator (using qalculate) and rofi */
 | 
			
		||||
# /* Submitted by: https://github.com/JosephArmas */
 | 
			
		||||
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-calc.rasi"
 | 
			
		||||
 | 
			
		||||
# Kill Rofi if already running before execution
 | 
			
		||||
if pgrep -x "rofi" >/dev/null; then
 | 
			
		||||
    pkill rofi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# main function
 | 
			
		||||
 | 
			
		||||
while true; do
 | 
			
		||||
    result=$(
 | 
			
		||||
        rofi -i -dmenu \
 | 
			
		||||
            -config $rofi_theme \
 | 
			
		||||
            -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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,121 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Wallpaper Effects using ImageMagick (SUPER SHIFT W)
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
terminal=kitty
 | 
			
		||||
wallpaper_current="$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 -j | jq -r '.[] | select(.focused) | .name')
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-wallpaper-effect.rasi"
 | 
			
		||||
 | 
			
		||||
# Directory for swaync
 | 
			
		||||
iDIR="$HOME/.config/swaync/images"
 | 
			
		||||
iDIRi="$HOME/.config/swaync/icons"
 | 
			
		||||
 | 
			
		||||
# 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 --transition-bezier $BEZIER"
 | 
			
		||||
 | 
			
		||||
# Define ImageMagick effects
 | 
			
		||||
declare -A effects=(
 | 
			
		||||
    ["No Effects"]="no-effects"
 | 
			
		||||
    ["Black & White"]="magick $wallpaper_current -colorspace gray -sigmoidal-contrast 10,40% $wallpaper_output"
 | 
			
		||||
    ["Blurred"]="magick $wallpaper_current -blur 0x10 $wallpaper_output"
 | 
			
		||||
    ["Charcoal"]="magick $wallpaper_current -charcoal 0x5 $wallpaper_output"
 | 
			
		||||
    ["Edge Detect"]="magick $wallpaper_current -edge 1 $wallpaper_output"
 | 
			
		||||
    ["Emboss"]="magick $wallpaper_current -emboss 0x5 $wallpaper_output"
 | 
			
		||||
    ["Frame Raised"]="magick $wallpaper_current +raise 150 $wallpaper_output"
 | 
			
		||||
    ["Frame Sunk"]="magick $wallpaper_current -raise 150 $wallpaper_output"
 | 
			
		||||
    ["Negate"]="magick $wallpaper_current -negate $wallpaper_output"
 | 
			
		||||
    ["Oil Paint"]="magick $wallpaper_current -paint 4 $wallpaper_output"
 | 
			
		||||
    ["Posterize"]="magick $wallpaper_current -posterize 4 $wallpaper_output"
 | 
			
		||||
    ["Polaroid"]="magick $wallpaper_current -polaroid 0 $wallpaper_output"
 | 
			
		||||
    ["Sepia Tone"]="magick $wallpaper_current -sepia-tone 65% $wallpaper_output"
 | 
			
		||||
    ["Solarize"]="magick $wallpaper_current -solarize 80% $wallpaper_output"
 | 
			
		||||
    ["Sharpen"]="magick $wallpaper_current -sharpen 0x5 $wallpaper_output"
 | 
			
		||||
    ["Vignette"]="magick $wallpaper_current -vignette 0x3 $wallpaper_output"
 | 
			
		||||
    ["Vignette-black"]="magick $wallpaper_current -background black -vignette 0x3 $wallpaper_output"
 | 
			
		||||
    ["Zoomed"]="magick $wallpaper_current -gravity Center -extent 1:1 $wallpaper_output"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Function to apply no effects
 | 
			
		||||
no-effects() {
 | 
			
		||||
    swww img -o "$focused_monitor" "$wallpaper_current" $SWWW_PARAMS &&
 | 
			
		||||
    wait $!
 | 
			
		||||
    wallust run "$wallpaper_current" -s &&
 | 
			
		||||
    wait $!
 | 
			
		||||
    # Refresh rofi, waybar, wallust palettes
 | 
			
		||||
	sleep 2
 | 
			
		||||
	"$SCRIPTSDIR/Refresh.sh"
 | 
			
		||||
 | 
			
		||||
    notify-send -u low -i "$iDIR/ja.png" "No wallpaper" "effects applied"
 | 
			
		||||
    # copying wallpaper for rofi menu
 | 
			
		||||
    cp "$wallpaper_current" "$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
 | 
			
		||||
 | 
			
		||||
    choice=$(printf "%s\n" "${options[@]}" | LC_COLLATE=C sort | rofi -dmenu -i -config $rofi_theme)
 | 
			
		||||
 | 
			
		||||
    # 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/ja.png"  "Applying:" "$choice effects"
 | 
			
		||||
            eval "${effects[$choice]}"
 | 
			
		||||
 | 
			
		||||
            sleep 1
 | 
			
		||||
            swww img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS &
 | 
			
		||||
 | 
			
		||||
            sleep 2
 | 
			
		||||
  
 | 
			
		||||
            wallust run "$wallpaper_output" -s &
 | 
			
		||||
            sleep 1
 | 
			
		||||
            # Refresh rofi, waybar, wallust palettes
 | 
			
		||||
            "${SCRIPTSDIR}/Refresh.sh"
 | 
			
		||||
            notify-send -u low -i "$iDIR/ja.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
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
main
 | 
			
		||||
 | 
			
		||||
sleep 1
 | 
			
		||||
 | 
			
		||||
if [[ -n "$choice" ]]; then
 | 
			
		||||
  sddm_sequoia="/usr/share/sddm/themes/sequoia_2"
 | 
			
		||||
  if [ -d "$sddm_sequoia" ]; then
 | 
			
		||||
    if yad --question --text="Set wallpaper as SDDM background?\nNOTE: This only applies to SEQUOIA SDDM Theme" --title="SDDM Background" --ok-label="Yes"; then
 | 
			
		||||
 | 
			
		||||
    # Check if terminal exists
 | 
			
		||||
    if ! command -v "$terminal" &>/dev/null; then
 | 
			
		||||
    notify-send -i "$iDIR/ja.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background"
 | 
			
		||||
    exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
      # Open terminal and set the wallpaper
 | 
			
		||||
    $terminal -e bash -c "echo 'Enter your password to set wallpaper as SDDM Background'; \
 | 
			
		||||
    sudo cp -r $wallpaper_output '$sddm_sequoia/backgrounds/default' && \
 | 
			
		||||
    notify-send -i '$iDIR/ja.png' 'SDDM' 'Background SET'"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Script for Random Wallpaper ( CTRL ALT W)
 | 
			
		||||
 | 
			
		||||
wallDIR="$HOME/Pictures/wallpapers"
 | 
			
		||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
 | 
			
		||||
 | 
			
		||||
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
 | 
			
		||||
 | 
			
		||||
PICS=($(find -L ${wallDIR} -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pnm" -o -name "*.tga" -o -name "*.tiff" -o -name "*.webp" -o -name "*.bmp" -o -name "*.farbfeld" -o -name "*.gif" \)))
 | 
			
		||||
RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Transition config
 | 
			
		||||
FPS=30
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
wait $!
 | 
			
		||||
"$SCRIPTSDIR/WallustSwww.sh" &&
 | 
			
		||||
 | 
			
		||||
wait $!
 | 
			
		||||
sleep 2
 | 
			
		||||
"$SCRIPTSDIR/Refresh.sh"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,146 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# This script for selecting wallpapers (SUPER W)
 | 
			
		||||
 | 
			
		||||
# WALLPAPERS PATH
 | 
			
		||||
terminal=kitty
 | 
			
		||||
wallDIR="$HOME/Pictures/wallpapers"
 | 
			
		||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
 | 
			
		||||
wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
 | 
			
		||||
 | 
			
		||||
rofi_override="element-icon{size:${icon_size}px;}"
 | 
			
		||||
 | 
			
		||||
# Directory for swaync
 | 
			
		||||
iDIR="$HOME/.config/swaync/images"
 | 
			
		||||
iDIRi="$HOME/.config/swaync/icons"
 | 
			
		||||
 | 
			
		||||
# variables
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-wallpaper.rasi"
 | 
			
		||||
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
 | 
			
		||||
 | 
			
		||||
# Get monitor width and DPI
 | 
			
		||||
monitor_width=$(hyprctl monitors -j | jq -r --arg mon "$focused_monitor" '.[] | select(.name == $mon) | .width')
 | 
			
		||||
scale_factor=$(hyprctl monitors -j | jq -r --arg mon "$focused_monitor" '.[] | select(.name == $mon) | .scale')
 | 
			
		||||
 | 
			
		||||
icon_size=$(echo "scale=1; ($monitor_width * 3) / ($scale_factor * 400)" | bc)
 | 
			
		||||
 | 
			
		||||
rofi_override="element-icon{size:${icon_size}%;}"
 | 
			
		||||
 | 
			
		||||
# 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 --transition-bezier $BEZIER"
 | 
			
		||||
 | 
			
		||||
# 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 -L "${wallDIR}" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.pnm" -o -iname "*.tga" -o -iname "*.tiff" -o -iname "*.webp" -o -iname "*.bmp" -o -iname "*.farbfeld" -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 $rofi_theme -theme-str $rofi_override"
 | 
			
		||||
 | 
			
		||||
# 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)
 | 
			
		||||
  
 | 
			
		||||
  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 2
 | 
			
		||||
    "$SCRIPTSDIR/WallustSwww.sh"
 | 
			
		||||
    sleep 0.5
 | 
			
		||||
    "$SCRIPTSDIR/Refresh.sh"
 | 
			
		||||
    exit 0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
main
 | 
			
		||||
 | 
			
		||||
wait $!
 | 
			
		||||
"$SCRIPTSDIR/WallustSwww.sh" &&
 | 
			
		||||
 | 
			
		||||
wait $!
 | 
			
		||||
sleep 2
 | 
			
		||||
"$SCRIPTSDIR/Refresh.sh"
 | 
			
		||||
 | 
			
		||||
sleep 1
 | 
			
		||||
# Check if user selected a wallpaper
 | 
			
		||||
if [[ -n "$choice" ]]; then
 | 
			
		||||
  sddm_sequoia="/usr/share/sddm/themes/sequoia_2"
 | 
			
		||||
  if [ -d "$sddm_sequoia" ]; then
 | 
			
		||||
    if yad --question --text="Set wallpaper as SDDM background?\nNOTE: This only applies to SEQUOIA SDDM Theme" --title="SDDM Background" --ok-label="Yes"; then
 | 
			
		||||
 | 
			
		||||
    # Check if terminal exists
 | 
			
		||||
    if ! command -v "$terminal" &>/dev/null; then
 | 
			
		||||
    notify-send -i "$iDIR/ja.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background"
 | 
			
		||||
    exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Open terminal to enter password
 | 
			
		||||
    $terminal -e bash -c "echo 'Enter your password to set wallpaper as SDDM Background'; \
 | 
			
		||||
    sudo cp -r $wallpaper_current '$sddm_sequoia/backgrounds/default' && \
 | 
			
		||||
    notify-send -i '$iDIR/ja.png' 'SDDM' 'Background SET'"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,143 @@
 | 
			
		|||
#!/usr/bin/env python3
 | 
			
		||||
# original code https://gist.github.com/Surendrajat/ff3876fd2166dd86fb71180f4e9342d7
 | 
			
		||||
# weather using python
 | 
			
		||||
 | 
			
		||||
import requests
 | 
			
		||||
import json
 | 
			
		||||
import os
 | 
			
		||||
from pyquery import PyQuery  # install using `pip install pyquery`
 | 
			
		||||
 | 
			
		||||
# weather icons
 | 
			
		||||
weather_icons = {
 | 
			
		||||
    "sunnyDay": "",
 | 
			
		||||
    "clearNight": "",
 | 
			
		||||
    "cloudyFoggyDay": "",
 | 
			
		||||
    "cloudyFoggyNight": "",
 | 
			
		||||
    "rainyDay": "",
 | 
			
		||||
    "rainyNight": "",
 | 
			
		||||
    "snowyIcyDay": "",
 | 
			
		||||
    "snowyIcyNight": "",
 | 
			
		||||
    "severe": "",
 | 
			
		||||
    "default": "",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Get current location based on IP address
 | 
			
		||||
def get_location():
 | 
			
		||||
    response = requests.get("https://ipinfo.io")
 | 
			
		||||
    data = response.json()
 | 
			
		||||
    loc = data["loc"].split(",")
 | 
			
		||||
    return float(loc[0]), float(loc[1])
 | 
			
		||||
  
 | 
			
		||||
# Get latitude and longitude
 | 
			
		||||
latitude, longitude = get_location()
 | 
			
		||||
 | 
			
		||||
# Open-Meteo API endpoint
 | 
			
		||||
url = f"https://weather.com/en-PH/weather/today/l/{latitude},{longitude}"
 | 
			
		||||
 | 
			
		||||
# manual location_id 
 | 
			
		||||
# NOTE: if you want to add manually, make sure you disable def get_location above
 | 
			
		||||
# 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 = "bca47d1099e762a012b9a139c36f30a0b1e647f69c0c4ac28b537e7ae9c1c200"  # 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()
 | 
			
		||||
 | 
			
		||||
# current status phrase
 | 
			
		||||
status = html_data("div[data-testid='wxPhrase']").text()
 | 
			
		||||
status = f"{status[:16]}.." if len(status) > 17 else status
 | 
			
		||||
 | 
			
		||||
# status code
 | 
			
		||||
status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2]
 | 
			
		||||
 | 
			
		||||
# status icon
 | 
			
		||||
icon = (
 | 
			
		||||
    weather_icons[status_code]
 | 
			
		||||
    if status_code in weather_icons
 | 
			
		||||
    else weather_icons["default"]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# 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"
 | 
			
		||||
 | 
			
		||||
# 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}"
 | 
			
		||||
 | 
			
		||||
# wind speed
 | 
			
		||||
wind_speed = html_data("span[data-testid='Wind']").text().split("\n")[1]
 | 
			
		||||
wind_text = f"  {wind_speed}"
 | 
			
		||||
 | 
			
		||||
# humidity
 | 
			
		||||
humidity = html_data("span[data-testid='PercentageValue']").text()
 | 
			
		||||
humidity_text = f"  {humidity}"
 | 
			
		||||
 | 
			
		||||
# visibility
 | 
			
		||||
visibility = html_data("span[data-testid='VisibilityValue']").text()
 | 
			
		||||
visibility_text = f"  {visibility}"
 | 
			
		||||
 | 
			
		||||
# air quality index
 | 
			
		||||
air_quality_index = html_data("text[data-testid='DonutChartValue']").text()
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# 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"{visibility_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"{visibility_text} AQI{air_quality_index}\n"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
    with open(os.path.expanduser("~/.cache/.weather_cache"), "w") as file:
 | 
			
		||||
        file.write(simple_weather)
 | 
			
		||||
except Exception as e:
 | 
			
		||||
    print(f"Error writing to cache: {e}")
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# weather info from wttr. https://github.com/chubin/wttr.in
 | 
			
		||||
# Remember to add city 
 | 
			
		||||
 | 
			
		||||
city=
 | 
			
		||||
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"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Script for Oh my ZSH theme ( CTRL SHIFT O)
 | 
			
		||||
 | 
			
		||||
# preview of theme can be view here: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
 | 
			
		||||
# after choosing theme, TTY need to be closed and re-open
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
iDIR="$HOME/.config/swaync/images"
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-zsh-theme.rasi"
 | 
			
		||||
 | 
			
		||||
if [ -n "$(grep -i nixos < /etc/os-release)" ]; then
 | 
			
		||||
  notify-send -i "$iDIR/ja.png" "NOT Supported" "Sorry NixOS does not support this feature"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
themes_dir="$HOME/.oh-my-zsh/themes"
 | 
			
		||||
file_extension=".zsh-theme"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
themes_array=($(find -L "$themes_dir" -type f -name "*$file_extension" -exec basename {} \; | sed -e "s/$file_extension//"))
 | 
			
		||||
 | 
			
		||||
# Add "Random" option to the beginning of the array
 | 
			
		||||
themes_array=("Random" "${themes_array[@]}")
 | 
			
		||||
 | 
			
		||||
rofi_command="rofi -i -dmenu -config $rofi_theme"
 | 
			
		||||
 | 
			
		||||
menu() {
 | 
			
		||||
    for theme in "${themes_array[@]}"; do
 | 
			
		||||
        echo "$theme"
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main() {
 | 
			
		||||
    choice=$(menu | ${rofi_command})
 | 
			
		||||
 | 
			
		||||
    # if nothing selected, script won't change anything
 | 
			
		||||
    if [ -z "$choice" ]; then
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    zsh_path="$HOME/.zshrc"
 | 
			
		||||
    var_name="ZSH_THEME"
 | 
			
		||||
 | 
			
		||||
    if [[ "$choice" == "Random" ]]; then
 | 
			
		||||
        # Pick a random theme from the original themes_array (excluding "Random")
 | 
			
		||||
        random_theme=${themes_array[$((RANDOM % (${#themes_array[@]} - 1) + 1))]}
 | 
			
		||||
        theme_to_set="$random_theme"
 | 
			
		||||
        notify-send -i "$iDIR/ja.png" "Random theme:" "selected: $random_theme"
 | 
			
		||||
    else
 | 
			
		||||
        # Set theme to the selected choice
 | 
			
		||||
        theme_to_set="$choice"
 | 
			
		||||
        notify-send -i "$iDIR/ja.png" "Theme selected:" "$choice"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [ -f "$zsh_path" ]; then
 | 
			
		||||
        sed -i "s/^$var_name=.*/$var_name=\"$theme_to_set\"/" "$zsh_path"
 | 
			
		||||
        notify-send -i "$iDIR/ja.png" "OMZ theme" "applied. restart your terminal"
 | 
			
		||||
    else
 | 
			
		||||
        notify-send -i "$iDIR/ja.png" "Error:" "~.zshrc file not found!"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if rofi is already running
 | 
			
		||||
if pidof rofi > /dev/null; then
 | 
			
		||||
  pkill rofi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
main
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
animations {
 | 
			
		||||
  enabled = yes
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
  
 | 
			
		||||
  # animations for -git or version >0.42.0
 | 
			
		||||
  animation = workspacesIn, 1, 5, winIn, slide
 | 
			
		||||
  animation = workspacesOut, 1, 5, winOut, slide
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
# old animations
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
  enabled = yes
 | 
			
		||||
 | 
			
		||||
  bezier = myBezier, 0.05, 0.9, 0.1, 1.05
 | 
			
		||||
  bezier = linear, 0.0, 0.0, 1.0, 1.0
 | 
			
		||||
  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 = slow, 0, 0.85, 0.3, 1
 | 
			
		||||
  bezier = overshot, 0.7, 0.6, 0.1, 1.1
 | 
			
		||||
  bezier = bounce, 1.1, 1.6, 0.1, 0.85
 | 
			
		||||
  bezier = sligshot, 1, -1, 0.15, 1.25
 | 
			
		||||
  bezier = nice, 0, 6.9, 0.5, -4.20
 | 
			
		||||
  
 | 
			
		||||
  animation = windowsIn, 1, 5, slow, popin
 | 
			
		||||
  animation = windowsOut, 1, 5, winOut, popin
 | 
			
		||||
  animation = windowsMove, 1, 5, wind, slide
 | 
			
		||||
  animation = border, 1, 10, linear
 | 
			
		||||
  animation = borderangle, 1, 180, linear, loop #used by rainbow borders and rotating colors
 | 
			
		||||
  animation = fade, 1, 5, overshot
 | 
			
		||||
  animation = workspaces, 1, 5, wind
 | 
			
		||||
  animation = windows, 1, 5, bounce, popin
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
animations {
 | 
			
		||||
  enabled = no
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
# credit https://github.com/end-4/dots-hyprland
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    # Animation curves
 | 
			
		||||
    
 | 
			
		||||
    bezier = linear, 0, 0, 1, 1
 | 
			
		||||
    bezier = md3_standard, 0.2, 0, 0, 1
 | 
			
		||||
    bezier = md3_decel, 0.05, 0.7, 0.1, 1
 | 
			
		||||
    bezier = md3_accel, 0.3, 0, 0.8, 0.15
 | 
			
		||||
    bezier = overshot, 0.05, 0.9, 0.1, 1.1
 | 
			
		||||
    bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 
 | 
			
		||||
    bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
 | 
			
		||||
    bezier = menu_decel, 0.1, 1, 0, 1
 | 
			
		||||
    bezier = menu_accel, 0.38, 0.04, 1, 0.07
 | 
			
		||||
    bezier = easeInOutCirc, 0.85, 0, 0.15, 1
 | 
			
		||||
    bezier = easeOutCirc, 0, 0.55, 0.45, 1
 | 
			
		||||
    bezier = easeOutExpo, 0.16, 1, 0.3, 1
 | 
			
		||||
    bezier = softAcDecel, 0.26, 0.26, 0.15, 1
 | 
			
		||||
    bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration
 | 
			
		||||
    # Animation configs
 | 
			
		||||
    animation = windows, 1, 3, md3_decel, popin 60%
 | 
			
		||||
    animation = windowsIn, 1, 3, md3_decel, popin 60%
 | 
			
		||||
    animation = windowsOut, 1, 3, md3_accel, popin 60%
 | 
			
		||||
    animation = border, 1, 10, default
 | 
			
		||||
    animation = fade, 1, 3, md3_decel
 | 
			
		||||
    # animation = layers, 1, 2, md3_decel, slide
 | 
			
		||||
    animation = layersIn, 1, 3, menu_decel, slide
 | 
			
		||||
    animation = layersOut, 1, 1.6, menu_accel
 | 
			
		||||
    animation = fadeLayersIn, 1, 2, menu_decel
 | 
			
		||||
    animation = fadeLayersOut, 1, 4.5, menu_accel
 | 
			
		||||
    animation = workspaces, 1, 7, menu_decel, slide
 | 
			
		||||
    # animation = workspaces, 1, 2.5, softAcDecel, slide
 | 
			
		||||
    # animation = workspaces, 1, 7, menu_decel, slidefade 15%
 | 
			
		||||
    # animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15%
 | 
			
		||||
    animation = specialWorkspace, 1, 3, md3_decel, slidevert
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
# name "Vertical"
 | 
			
		||||
# credit https://github.com/prasanthrangan/hyprdots
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
  	enabled = yes
 | 
			
		||||
  	
 | 
			
		||||
    bezier = fluent_decel, 0, 0.2, 0.4, 1
 | 
			
		||||
    bezier = easeOutCirc, 0, 0.55, 0.45, 1
 | 
			
		||||
    bezier = easeOutCubic, 0.33, 1, 0.68, 1
 | 
			
		||||
    bezier = easeinoutsine, 0.37, 0, 0.63, 1
 | 
			
		||||
    
 | 
			
		||||
    # Windows
 | 
			
		||||
    animation = windowsIn, 1, 1.5, easeinoutsine, popin 60% # window open
 | 
			
		||||
    animation = windowsOut, 1, 1.5, easeOutCubic, popin 60% # window close.
 | 
			
		||||
    animation = windowsMove, 1, 1.5, easeinoutsine, slide # everything in between, moving, dragging, resizing.
 | 
			
		||||
 | 
			
		||||
    # Fading
 | 
			
		||||
    animation = fade, 1, 2.5, fluent_decel
 | 
			
		||||
 | 
			
		||||
	animation = fadeLayersIn, 0
 | 
			
		||||
    animation = border, 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	# Layers
 | 
			
		||||
	animation = layers, 1, 1.5, easeinoutsine, popin
 | 
			
		||||
	
 | 
			
		||||
    # Workspaces
 | 
			
		||||
    #animation = workspaces, 1, 3, fluent_decel, slidefade 30% # styles: slide, slidevert, fade, slidefade, slidefadevert
 | 
			
		||||
    animation = workspaces, 1, 3, fluent_decel, slidefadevert 30% # styles: slide, slidevert, fade, slidefade, slidefadevert
 | 
			
		||||
 | 
			
		||||
	animation = specialWorkspace, 1, 2, fluent_decel, slidefade 10%
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
# credit https://github.com/prasanthrangan/hyprdots
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = yes
 | 
			
		||||
    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, once
 | 
			
		||||
    animation = fade, 1, 10, default
 | 
			
		||||
    animation = workspaces, 1, 5, wind
 | 
			
		||||
    animation = specialWorkspace, 1, 5, wind, slidevert
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
# credit https://github.com/prasanthrangan/hyprdots- 
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
  enabled = true
 | 
			
		||||
 | 
			
		||||
  # █▄▄ █▀▀ ▀█ █ █▀▀ █▀█   █▀▀ █░█ █▀█ █░█ █▀▀
 | 
			
		||||
  # █▄█ ██▄ █▄ █ ██▄ █▀▄   █▄▄ █▄█ █▀▄ ▀▄▀ ██▄
 | 
			
		||||
  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, once
 | 
			
		||||
  animation = fade, 1, 10, default
 | 
			
		||||
  animation = workspaces, 1, 5, wind
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
# # name "Minimal-2"
 | 
			
		||||
# credit https://github.com/prasanthrangan/hyprdots
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = yes
 | 
			
		||||
 | 
			
		||||
    bezier = quart, 0.25, 1, 0.5, 1
 | 
			
		||||
 | 
			
		||||
    animation = windows, 1, 6, quart, slide
 | 
			
		||||
    animation = border, 1, 6, quart
 | 
			
		||||
    animation = borderangle, 1, 6, quart
 | 
			
		||||
    animation = fade, 1, 6, quart
 | 
			
		||||
    animation = workspaces, 1, 6, quart
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
# name "Optimized"
 | 
			
		||||
# credit https://github.com/prasanthrangan/hyprdots
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    bezier = wind, 0.05, 0.85, 0.03, 0.97
 | 
			
		||||
    bezier = winIn, 0.07, 0.88, 0.04, 0.99
 | 
			
		||||
    bezier = winOut, 0.20, -0.15, 0, 1
 | 
			
		||||
    bezier = liner, 1, 1, 1, 1
 | 
			
		||||
    bezier = md3_standard, 0.12, 0, 0, 1
 | 
			
		||||
    bezier = md3_decel, 0.05, 0.80, 0.10, 0.97
 | 
			
		||||
    bezier = md3_accel, 0.20, 0, 0.80, 0.08
 | 
			
		||||
    bezier = overshot, 0.05, 0.85, 0.07, 1.04
 | 
			
		||||
    bezier = crazyshot, 0.1, 1.22, 0.68, 0.98
 | 
			
		||||
    bezier = hyprnostretch, 0.05, 0.82, 0.03, 0.94
 | 
			
		||||
    bezier = menu_decel, 0.05, 0.82, 0, 1
 | 
			
		||||
    bezier = menu_accel, 0.20, 0, 0.82, 0.10
 | 
			
		||||
    bezier = easeInOutCirc, 0.75, 0, 0.15, 1
 | 
			
		||||
    bezier = easeOutCirc, 0, 0.48, 0.38, 1
 | 
			
		||||
    bezier = easeOutExpo, 0.10, 0.94, 0.23, 0.98
 | 
			
		||||
    bezier = softAcDecel, 0.20, 0.20, 0.15, 1
 | 
			
		||||
    bezier = md2, 0.30, 0, 0.15, 1
 | 
			
		||||
    
 | 
			
		||||
    bezier = OutBack, 0.28, 1.40, 0.58, 1
 | 
			
		||||
    bezier = easeInOutCirc, 0.78, 0, 0.15, 1
 | 
			
		||||
 | 
			
		||||
    animation = border, 1, 1.6, liner
 | 
			
		||||
    animation = borderangle, 1, 82, liner, once
 | 
			
		||||
    animation = windowsIn, 1, 3.2, winIn, slide
 | 
			
		||||
    animation = windowsOut, 1, 2.8, easeOutCirc
 | 
			
		||||
    animation = windowsMove, 1, 3.0, wind, slide
 | 
			
		||||
    animation = fade, 1, 1.8, md3_decel
 | 
			
		||||
    animation = layersIn, 1, 1.8, menu_decel, slide
 | 
			
		||||
    animation = layersOut, 1, 1.5, menu_accel
 | 
			
		||||
    animation = fadeLayersIn, 1, 1.6, menu_decel
 | 
			
		||||
    animation = fadeLayersOut, 1, 1.8, menu_accel
 | 
			
		||||
    animation = workspaces, 1, 4.0, menu_decel, slide
 | 
			
		||||
    animation = specialWorkspace, 1, 2.3, md3_decel, slidefadevert 15%
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
# name "Classic"
 | 
			
		||||
# credit https://github.com/mylinuxforwork/dotfiles
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
# name "Dynamic"
 | 
			
		||||
# credit https://github.com/mylinuxforwork/dotfiles 
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
# name "Fast"
 | 
			
		||||
# credit https://github.com/mylinuxforwork/dotfiles
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    bezier = linear, 0, 0, 1, 1
 | 
			
		||||
    bezier = md3_standard, 0.2, 0, 0, 1
 | 
			
		||||
    bezier = md3_decel, 0.05, 0.7, 0.1, 1
 | 
			
		||||
    bezier = md3_accel, 0.3, 0, 0.8, 0.15
 | 
			
		||||
    bezier = overshot, 0.05, 0.9, 0.1, 1.1
 | 
			
		||||
    bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 
 | 
			
		||||
    bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
 | 
			
		||||
    bezier = fluent_decel, 0.1, 1, 0, 1
 | 
			
		||||
    bezier = easeInOutCirc, 0.85, 0, 0.15, 1
 | 
			
		||||
    bezier = easeOutCirc, 0, 0.55, 0.45, 1
 | 
			
		||||
    bezier = easeOutExpo, 0.16, 1, 0.3, 1
 | 
			
		||||
    animation = windows, 1, 3, md3_decel, popin 60%
 | 
			
		||||
    animation = border, 1, 10, default
 | 
			
		||||
    animation = fade, 1, 2.5, md3_decel
 | 
			
		||||
    animation = workspaces, 1, 3.5, easeOutExpo, slide
 | 
			
		||||
    animation = specialWorkspace, 1, 3, md3_decel, slidevert
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
# name "High"
 | 
			
		||||
# credit https://github.com/mylinuxforwork/dotfiles
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    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, once
 | 
			
		||||
    animation = fade, 1, 10, default
 | 
			
		||||
    animation = workspaces, 1, 5, wind
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
# name "Moving"
 | 
			
		||||
# credit https://github.com/mylinuxforwork/dotfiles
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    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, 5, overshot, slide
 | 
			
		||||
    animation = windowsOut, 1, 3, smoothOut
 | 
			
		||||
    animation = windowsIn, 1, 3, smoothOut
 | 
			
		||||
    animation = windowsMove, 1, 4, smoothIn, slide
 | 
			
		||||
    animation = border, 1, 5, default
 | 
			
		||||
    animation = fade, 1, 5, smoothIn
 | 
			
		||||
    animation = fadeDim, 1, 5, smoothIn
 | 
			
		||||
    animation = workspaces, 1, 6, default
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
# name "Standard"
 | 
			
		||||
# credit https://github.com/mylinuxforwork/dotfiles
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
# name "Me-1"
 | 
			
		||||
# credit https://github.com/mahaveergurjar
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
    enabled = true
 | 
			
		||||
    # Animation curves
 | 
			
		||||
    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 = linear, 0, 0, 1, 1
 | 
			
		||||
    bezier = md3_standard, 0.2, 0, 0, 1
 | 
			
		||||
    bezier = md3_decel, 0.05, 0.7, 0.1, 1
 | 
			
		||||
    bezier = md3_accel, 0.3, 0, 0.8, 0.15
 | 
			
		||||
    bezier = overshot, 0.05, 0.9, 0.1, 1.1
 | 
			
		||||
    bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 
 | 
			
		||||
    bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
 | 
			
		||||
    bezier = menu_decel, 0.1, 1, 0, 1
 | 
			
		||||
    bezier = menu_accel, 0.38, 0.04, 1, 0.07
 | 
			
		||||
    bezier = easeInOutCirc, 0.85, 0, 0.15, 1
 | 
			
		||||
    bezier = easeOutCirc, 0, 0.55, 0.45, 1
 | 
			
		||||
    bezier = easeOutExpo, 0.16, 1, 0.3, 1
 | 
			
		||||
    bezier = softAcDecel, 0.26, 0.26, 0.15, 1
 | 
			
		||||
    bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration
 | 
			
		||||
    
 | 
			
		||||
    # Animation configs
 | 
			
		||||
    # animation = windows, 1, 3, md3_decel, popin 60%
 | 
			
		||||
    # animation = windowsIn, 1, 3, md3_decel, popin 60%
 | 
			
		||||
    # animation = windowsOut, 1, 3, md3_accel, popin 60%
 | 
			
		||||
    # animation = windows, 1, 6, wind, slide
 | 
			
		||||
    animation = border, 1, 1, liner
 | 
			
		||||
    animation = borderangle, 1, 30, liner, once
 | 
			
		||||
    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, 10, default
 | 
			
		||||
    animation = fade, 1, 3, md3_decel
 | 
			
		||||
    # animation = layers, 1, 2, md3_decel, slide
 | 
			
		||||
    animation = layersIn, 1, 3, menu_decel, slide
 | 
			
		||||
    animation = layersOut, 1, 1.6, menu_accel
 | 
			
		||||
    animation = fadeLayersIn, 1, 2, menu_decel
 | 
			
		||||
    animation = fadeLayersOut, 1, 4.5, menu_accel
 | 
			
		||||
    animation = workspaces, 1, 7, menu_decel, slide
 | 
			
		||||
    animation = workspaces, 1, 5, wind
 | 
			
		||||
    # animation = workspaces, 1, 2.5, softAcDecel, slide
 | 
			
		||||
    # animation = workspaces, 1, 7, menu_decel, slidefade 15%
 | 
			
		||||
    animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15%
 | 
			
		||||
    animation = specialWorkspace, 1, 3, md3_decel, slidevert
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
# name "Me-2"
 | 
			
		||||
# credit https://github.com/mahaveergurjar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
animations {
 | 
			
		||||
  enabled = yes
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
  
 | 
			
		||||
  # animations for -git or version >0.42.0
 | 
			
		||||
  animation = workspacesIn, 1, 5, winIn, slide
 | 
			
		||||
  animation = workspacesOut, 1, 5, winOut, slide
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
# as per Hyprland wiki: hyprland-qt-support provides a QML style for hypr* qt6 apps                                                         
 | 
			
		||||
 | 
			
		||||
roundess = 2
 | 
			
		||||
 | 
			
		||||
border_width = 0
 | 
			
		||||
 | 
			
		||||
reduce_motion = false
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,148 @@
 | 
			
		|||
# Default Keybinds
 | 
			
		||||
# visit https://wiki.hyprland.org/Configuring/Binds/ for more info
 | 
			
		||||
 | 
			
		||||
# /* ---- ✴️ Variables ✴️ ---- */  #
 | 
			
		||||
$mainMod = SUPER
 | 
			
		||||
# Default
 | 
			
		||||
$scriptsDir = $HOME/.config/hypr/scripts
 | 
			
		||||
$UserConfigs = $HOME/.config/hypr/UserConfigs
 | 
			
		||||
$UserScripts = $HOME/.config/hypr/UserScripts
 | 
			
		||||
 | 
			
		||||
bind = CTRL ALT, Delete, exec, hyprctl dispatch exit 0
 | 
			
		||||
bind = $mainMod, Q, killactive, #kill
 | 
			
		||||
bind = $mainMod SHIFT, Q, exec, $scriptsDir/KillActiveProcess.sh # Kill active process
 | 
			
		||||
bind = CTRL ALT, L, exec, $scriptsDir/LockScreen.sh # screen lock
 | 
			
		||||
bind = CTRL ALT, P, exec, $scriptsDir/Wlogout.sh # power menu
 | 
			
		||||
bind = $mainMod SHIFT, N, exec, swaync-client -t -sw # swayNC notification panel
 | 
			
		||||
 | 
			
		||||
# Master Layout
 | 
			
		||||
bind = $mainMod CTRL, D, layoutmsg, removemaster
 | 
			
		||||
bind = $mainMod, I, layoutmsg, addmaster
 | 
			
		||||
bind = $mainMod, J, layoutmsg, cyclenext
 | 
			
		||||
bind = $mainMod, K, layoutmsg, cycleprev
 | 
			
		||||
bind = $mainMod CTRL, Return, layoutmsg, swapwithmaster
 | 
			
		||||
 | 
			
		||||
# Dwindle Layout
 | 
			
		||||
bind = $mainMod SHIFT, I, togglesplit # only works on dwindle layout
 | 
			
		||||
bind = $mainMod, P, pseudo, # dwindle
 | 
			
		||||
 | 
			
		||||
# Works on either layout (Master or Dwindle)
 | 
			
		||||
bind = $mainMod, M, exec, hyprctl dispatch splitratio 0.3
 | 
			
		||||
 | 
			
		||||
# group
 | 
			
		||||
bind = $mainMod, G, togglegroup # toggle group
 | 
			
		||||
bind = $mainMod CTRL, tab, changegroupactive  # change focus to another window
 | 
			
		||||
 | 
			
		||||
 # Cycle windows if floating bring to top
 | 
			
		||||
bind = ALT, tab, cyclenext
 | 
			
		||||
bind = ALT, tab, bringactivetotop  
 | 
			
		||||
 | 
			
		||||
# Special Keys / Hot Keys
 | 
			
		||||
bindel = , xf86audioraisevolume, exec, $scriptsDir/Volume.sh --inc # volume up
 | 
			
		||||
bindel = , xf86audiolowervolume, exec, $scriptsDir/Volume.sh --dec # volume down
 | 
			
		||||
bindl = , xf86AudioMicMute, exec, $scriptsDir/Volume.sh --toggle-mic # mic mute
 | 
			
		||||
bindl = , xf86audiomute, exec, $scriptsDir/Volume.sh --toggle # mute
 | 
			
		||||
bindl = , xf86Sleep, exec, systemctl suspend  # sleep button 
 | 
			
		||||
bindl = , xf86Rfkill, exec, $scriptsDir/AirplaneMode.sh # Airplane mode
 | 
			
		||||
 | 
			
		||||
# media controls using keyboards
 | 
			
		||||
bindl = , xf86AudioPlayPause, exec, $scriptsDir/MediaCtrl.sh --pause
 | 
			
		||||
bindl = , xf86AudioPause, exec, $scriptsDir/MediaCtrl.sh --pause
 | 
			
		||||
bindl = , xf86AudioPlay, exec, $scriptsDir/MediaCtrl.sh --pause
 | 
			
		||||
bindl = , xf86AudioNext, exec, $scriptsDir/MediaCtrl.sh --nxt 
 | 
			
		||||
bindl = , xf86AudioPrev, exec, $scriptsDir/MediaCtrl.sh --prv
 | 
			
		||||
bindl = , xf86audiostop, exec, $scriptsDir/MediaCtrl.sh --stop
 | 
			
		||||
 | 
			
		||||
# Screenshot keybindings NOTE: You may need to press Fn key as well
 | 
			
		||||
bind = $mainMod, Print, exec, $scriptsDir/ScreenShot.sh --now  # screenshot
 | 
			
		||||
bind = $mainMod SHIFT, Print, exec, $scriptsDir/ScreenShot.sh --area # screenshot (area)
 | 
			
		||||
bind = $mainMod CTRL, Print, exec, $scriptsDir/ScreenShot.sh --in5 # screenshot  (5 secs delay)
 | 
			
		||||
bind = $mainMod CTRL SHIFT, Print, exec, $scriptsDir/ScreenShot.sh --in10 # screenshot (10 secs delay)
 | 
			
		||||
bind = ALT, Print, exec, $scriptsDir/ScreenShot.sh --active # screenshot (active window only)
 | 
			
		||||
 | 
			
		||||
# screenshot with swappy (another screenshot tool)
 | 
			
		||||
bind = $mainMod SHIFT, S, exec, $scriptsDir/ScreenShot.sh --swappy #screenshot (swappy)
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# Swap windows
 | 
			
		||||
bind = $mainMod ALT, left, swapwindow, l
 | 
			
		||||
bind = $mainMod ALT, right, swapwindow, r
 | 
			
		||||
bind = $mainMod ALT, up, swapwindow, u
 | 
			
		||||
bind = $mainMod ALT, down, swapwindow, 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 # NOTE: code:10 = key 1
 | 
			
		||||
bind = $mainMod, code:11, workspace, 2 # NOTE: code:11 = key 2
 | 
			
		||||
bind = $mainMod, code:12, workspace, 3 # NOTE: code:12 = key 3
 | 
			
		||||
bind = $mainMod, code:13, workspace, 4 # NOTE: code:13 = key 4
 | 
			
		||||
bind = $mainMod, code:14, workspace, 5 # NOTE: code:14 = key 5
 | 
			
		||||
bind = $mainMod, code:15, workspace, 6 # NOTE: code:15 = key 6
 | 
			
		||||
bind = $mainMod, code:16, workspace, 7 # NOTE: code:16 = key 7
 | 
			
		||||
bind = $mainMod, code:17, workspace, 8 # NOTE: code:17 = key 8
 | 
			
		||||
bind = $mainMod, code:18, workspace, 9 # NOTE: code:18 = key 9
 | 
			
		||||
bind = $mainMod, code:19, workspace, 10 # NOTE: code:19 = key 0
 | 
			
		||||
 | 
			
		||||
# Move active window and follow to workspace mainMod + SHIFT [0-9]
 | 
			
		||||
bind = $mainMod SHIFT, code:10, movetoworkspace, 1 # NOTE: code:10 = key 1
 | 
			
		||||
bind = $mainMod SHIFT, code:11, movetoworkspace, 2 # NOTE: code:11 = key 2
 | 
			
		||||
bind = $mainMod SHIFT, code:12, movetoworkspace, 3 # NOTE: code:12 = key 3
 | 
			
		||||
bind = $mainMod SHIFT, code:13, movetoworkspace, 4 # NOTE: code:13 = key 4
 | 
			
		||||
bind = $mainMod SHIFT, code:14, movetoworkspace, 5 # NOTE: code:14 = key 5
 | 
			
		||||
bind = $mainMod SHIFT, code:15, movetoworkspace, 6 # NOTE: code:15 = key 6
 | 
			
		||||
bind = $mainMod SHIFT, code:16, movetoworkspace, 7 # NOTE: code:16 = key 7
 | 
			
		||||
bind = $mainMod SHIFT, code:17, movetoworkspace, 8 # NOTE: code:17 = key 8
 | 
			
		||||
bind = $mainMod SHIFT, code:18, movetoworkspace, 9 # NOTE: code:18 = key 9
 | 
			
		||||
bind = $mainMod SHIFT, code:19, movetoworkspace, 10 # NOTE: code:19 = key 0
 | 
			
		||||
bind = $mainMod SHIFT, bracketleft, movetoworkspace, -1 # brackets [
 | 
			
		||||
bind = $mainMod SHIFT, bracketright, movetoworkspace, +1 # brackets ]
 | 
			
		||||
 | 
			
		||||
# Move active window to a workspace silently mainMod + CTRL [0-9]
 | 
			
		||||
bind = $mainMod CTRL, code:10, movetoworkspacesilent, 1 # NOTE: code:10 = key 1
 | 
			
		||||
bind = $mainMod CTRL, code:11, movetoworkspacesilent, 2 # NOTE: code:11 = key 2
 | 
			
		||||
bind = $mainMod CTRL, code:12, movetoworkspacesilent, 3 # NOTE: code:12 = key 3
 | 
			
		||||
bind = $mainMod CTRL, code:13, movetoworkspacesilent, 4 # NOTE: code:13 = key 4
 | 
			
		||||
bind = $mainMod CTRL, code:14, movetoworkspacesilent, 5 # NOTE: code:14 = key 5
 | 
			
		||||
bind = $mainMod CTRL, code:15, movetoworkspacesilent, 6 # NOTE: code:15 = key 6
 | 
			
		||||
bind = $mainMod CTRL, code:16, movetoworkspacesilent, 7 # NOTE: code:16 = key 7
 | 
			
		||||
bind = $mainMod CTRL, code:17, movetoworkspacesilent, 8 # NOTE: code:17 = key 8
 | 
			
		||||
bind = $mainMod CTRL, code:18, movetoworkspacesilent, 9 # NOTE: code:18 = key 9
 | 
			
		||||
bind = $mainMod CTRL, code:19, movetoworkspacesilent, 10 # NOTE: code:19 = key 0
 | 
			
		||||
bind = $mainMod CTRL, bracketleft, movetoworkspacesilent, -1 # brackets [
 | 
			
		||||
bind = $mainMod CTRL, bracketright, movetoworkspacesilent, +1 # brackets ]
 | 
			
		||||
 | 
			
		||||
# 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 # NOTE: mouse:272 = left click
 | 
			
		||||
bindm = $mainMod, mouse:273, resizewindow # NOTE: mouse:272 = right click
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
# Hypridle 
 | 
			
		||||
# Original config submitted by https://github.com/SherLock707                                                       
 | 
			
		||||
                                                      
 | 
			
		||||
$iDIR="$HOME/.config/swaync/images/ja.png"
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
    lock_cmd = pidof hyprlock || hyprlock # runs hyprlock if it is not already running (this is always run when "loginctl lock-session" is called) 
 | 
			
		||||
    # unlock_cmd = killall hyprlock # kills hyprlock when unlocking (this is always run when "loginctl unlock-session" is called)
 | 
			
		||||
    before_sleep_cmd = loginctl lock-session    # ensures that the session is locked before going to sleep
 | 
			
		||||
    after_sleep_cmd = hyprctl dispatch dpms on # turn of screen after sleep (not strictly necessary, but just in case)
 | 
			
		||||
    ignore_dbus_inhibit = false             # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# turn off screen faster if session is already locked
 | 
			
		||||
# (disabled by default)
 | 
			
		||||
# listener {
 | 
			
		||||
#     timeout = 30                            # 30 seconds
 | 
			
		||||
#     on-timeout = pidof hyprlock && hyprctl dispatch dpms off # turns off the screen if hyprlock is active
 | 
			
		||||
#     on-resume = pidof hyprlock && hyprctl dispatch dpms on    # command to run when activity is detected after timeout has fired.
 | 
			
		||||
# }
 | 
			
		||||
 | 
			
		||||
# Warn
 | 
			
		||||
listener {
 | 
			
		||||
    timeout = 540                     # 9 min
 | 
			
		||||
    on-timeout = notify-send -i $iDIR " You are idle!" # command to run when timeout has passed
 | 
			
		||||
    on-resume = notify-send -i $iDIR " Oh! you're Back" " Hello !!!"  # command to run when activity is detected after timeout has fired.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Screenlock
 | 
			
		||||
listener {
 | 
			
		||||
    timeout = 600                     # 10 min
 | 
			
		||||
    on-timeout = loginctl lock-session # command to run when timeout has passed
 | 
			
		||||
    #on-resume = notify-send -i $iDIR " System Unlocked!"  # command to run when activity is detected after timeout has fired.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Turn off screen 
 | 
			
		||||
# (disabled by default)
 | 
			
		||||
# listener {
 | 
			
		||||
#     timeout = 630                            # 10.5 min
 | 
			
		||||
#     on-timeout = hyprctl dispatch dpms off  # command to run when timeout has passed
 | 
			
		||||
#     on-resume = hyprctl dispatch dpms on    # command to run when activity is detected after timeout has fired.
 | 
			
		||||
# }
 | 
			
		||||
 | 
			
		||||
# Suspend # disabled by default
 | 
			
		||||
# listener {
 | 
			
		||||
   # timeout = 1200                            # 20 min
 | 
			
		||||
   # on-timeout = systemctl suspend # command to run when timeout has passed
 | 
			
		||||
    # on-resume = notify-send -i $iDIR " Oh! you're back" "Hello !!!"  # command to run when activity is detected after timeout has fired.
 | 
			
		||||
# }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
# always refer to Hyprland wiki
 | 
			
		||||
# https://wiki.hyprland.org/
 | 
			
		||||
 | 
			
		||||
# Initial boot script enable to apply initial wallpapers, theming, new settings etc.
 | 
			
		||||
# suggest not to change this or delete this including deleting referrence file in ~/.config/hypr/.initial_startup_done
 | 
			
		||||
# as long as the referrence file is present, this initial-boot.sh will not execute
 | 
			
		||||
exec-once = $HOME/.config/hypr/initial-boot.sh
 | 
			
		||||
 | 
			
		||||
# Sourcing external config files
 | 
			
		||||
$configs = $HOME/.config/hypr/configs # Default Configs directory path
 | 
			
		||||
 | 
			
		||||
source=$configs/Keybinds.conf # Pre-configured keybinds
 | 
			
		||||
 | 
			
		||||
# ## This is where you want to start tinkering 
 | 
			
		||||
$UserConfigs = $HOME/.config/hypr/UserConfigs # User Configs directory path
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/Startup_Apps.conf # put your start-up packages on this file
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/ENVariables.conf # Environment variables to load
 | 
			
		||||
 | 
			
		||||
#source= $UserConfigs/Monitors.conf # Its all about your monitor config (old dots) will remove on push to main
 | 
			
		||||
#source= $UserConfigs/WorkspaceRules.conf # Hyprland workspaces (old dots) will remove on push to main
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/Laptops.conf # For laptop related
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/LaptopDisplay.conf # Laptop display related. You need to read the comment on this file
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/WindowRules.conf # all about Hyprland Window Rules and Layer Rules
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/UserDecorations.conf # Decorations config file
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/UserAnimations.conf # Animation config file
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/UserKeybinds.conf # Put your own keybinds here
 | 
			
		||||
 | 
			
		||||
source= $UserConfigs/UserSettings.conf # Main Hyprland Settings.
 | 
			
		||||
 | 
			
		||||
# nwg-displays
 | 
			
		||||
source= $HOME/.config/hypr/monitors.conf
 | 
			
		||||
source= $HOME/.config/hypr/workspaces.conf
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,161 @@
 | 
			
		|||
# Hyprlock config for < 1080p monitor resolutions                                                         
 | 
			
		||||
# Original config submitted by https://github.com/SherLock707
 | 
			
		||||
 | 
			
		||||
# Sourcing colors generated by wallust
 | 
			
		||||
source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
 | 
			
		||||
$Scripts = $HOME/.config/hypr/scripts
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
    grace = 1
 | 
			
		||||
	fractional_scaling = 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
background {
 | 
			
		||||
    monitor =
 | 
			
		||||
    # NOTE: use only 1 path
 | 
			
		||||
	#path = screenshot   # screenshot of your desktop
 | 
			
		||||
	#path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # by wallpaper effects
 | 
			
		||||
    path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # current wallpaper
 | 
			
		||||
    
 | 
			
		||||
    #color = $color7
 | 
			
		||||
 | 
			
		||||
    # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
 | 
			
		||||
    blur_size = 3
 | 
			
		||||
    blur_passes = 2 # 0 disables blurring
 | 
			
		||||
    noise = 0.0117
 | 
			
		||||
    contrast = 1.3000 # Vibrant!!!
 | 
			
		||||
    brightness = 0.8000
 | 
			
		||||
    vibrancy = 0.2100
 | 
			
		||||
    vibrancy_darkness = 0.0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Date
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:18000000] echo "<b> "$(date +'%A, %-d %B')" </b>"
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 16
 | 
			
		||||
    font_family = Victor Mono Bold Italic
 | 
			
		||||
    position = 0, -120
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = center
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Hour-Time
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:1000] echo "$(date +"%H")"
 | 
			
		||||
#    text = cmd[update:1000] echo "$(date +"%I")" #AM/PM
 | 
			
		||||
	#color = rgba(255, 185, 0, .8)
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 200
 | 
			
		||||
    font_family = JetBrainsMono Nerd Font ExtraBold 
 | 
			
		||||
    position = 0, -60
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = top
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Minute-Time
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:1000] echo "$(date +"%M")"
 | 
			
		||||
    #color = rgba(15, 10, 222, .8)
 | 
			
		||||
    color = $color12
 | 
			
		||||
    font_size = 200
 | 
			
		||||
    font_family = JetBrainsMono Nerd Font ExtraBold
 | 
			
		||||
    position = 0, -320
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = top
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Seconds-Time
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:1000] echo "$(date +"%S")"
 | 
			
		||||
#    text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM
 | 
			
		||||
    color = $color11
 | 
			
		||||
    font_size = 35
 | 
			
		||||
    font_family = JetBrainsMono Nerd Font ExtraBold
 | 
			
		||||
    position = 0, -350
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = top
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Put a picture of choice here. Default is the current wallpaper
 | 
			
		||||
#image {
 | 
			
		||||
#    monitor =
 | 
			
		||||
#    path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
 | 
			
		||||
#    size = 160
 | 
			
		||||
#    rounding = -1
 | 
			
		||||
#    border_size = 0
 | 
			
		||||
#    border_color = $color11
 | 
			
		||||
#    rotate = 0
 | 
			
		||||
#    reload_time = -1
 | 
			
		||||
#    position = 0, 280
 | 
			
		||||
#    halign = center
 | 
			
		||||
#    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# USER
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text =     $USER
 | 
			
		||||
    color = $color13
 | 
			
		||||
    outline_thickness = 2
 | 
			
		||||
    dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
 | 
			
		||||
    dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
 | 
			
		||||
    dots_center = true
 | 
			
		||||
    font_size = 24
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    position = 0, 150
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# INPUT FIELD
 | 
			
		||||
input-field {
 | 
			
		||||
    monitor =
 | 
			
		||||
    size = 300, 60
 | 
			
		||||
    outline_thickness = 2
 | 
			
		||||
    dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
 | 
			
		||||
    dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
 | 
			
		||||
    dots_center = true
 | 
			
		||||
    outer_color = $color11
 | 
			
		||||
    inner_color = rgba(255, 255, 255, 0.1)
 | 
			
		||||
	capslock_color = rgba(255, 0, 0)
 | 
			
		||||
    font_color = $color13
 | 
			
		||||
    fade_on_empty = false
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    placeholder_text = <i><span foreground="##ffffff99">🔒 Type Password</span></i>
 | 
			
		||||
    hide_input = false
 | 
			
		||||
    position = 0, 50
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# uptime
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:60000] echo "<b> "$(uptime -p || $Scripts/UptimeNixOS.sh)" </b>"
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 16
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    position = 0, 0
 | 
			
		||||
    halign = right
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# weather edit the scripts for locations
 | 
			
		||||
# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache"
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 16
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    position = 50, 0
 | 
			
		||||
    halign = left
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,161 @@
 | 
			
		|||
# Hyprlock config for => 2k monitor resolutions                                                         
 | 
			
		||||
# Original config submitted by https://github.com/SherLock707
 | 
			
		||||
 | 
			
		||||
# Sourcing colors generated by wallust
 | 
			
		||||
source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
 | 
			
		||||
$Scripts = $HOME/.config/hypr/scripts
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
    grace = 1
 | 
			
		||||
    fractional_scaling = 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
background {
 | 
			
		||||
    monitor =
 | 
			
		||||
    # NOTE: use only 1 path
 | 
			
		||||
	#path = screenshot   # screenshot of your desktop
 | 
			
		||||
	#path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # by wallpaper effects
 | 
			
		||||
    path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # current wallpaper
 | 
			
		||||
    
 | 
			
		||||
    #color = $color7
 | 
			
		||||
 | 
			
		||||
    # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
 | 
			
		||||
    blur_size = 3
 | 
			
		||||
    blur_passes = 2 # 0 disables blurring
 | 
			
		||||
    noise = 0.0117
 | 
			
		||||
    contrast = 1.3000 # Vibrant!!!
 | 
			
		||||
    brightness = 0.8000
 | 
			
		||||
    vibrancy = 0.2100
 | 
			
		||||
    vibrancy_darkness = 0.0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Date
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:18000000] echo "<b> "$(date +'%A, %-d %B')" </b>"
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 18
 | 
			
		||||
    font_family = Victor Mono Bold Italic
 | 
			
		||||
    position = 0, -120
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = center
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Hour-Time
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:1000] echo "$(date +"%H")"
 | 
			
		||||
#    text = cmd[update:1000] echo "$(date +"%I")" #AM/PM
 | 
			
		||||
	#color = rgba(255, 185, 0, .8)
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 240
 | 
			
		||||
    font_family = JetBrainsMono Nerd Font ExtraBold 
 | 
			
		||||
    position = 0, -100
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = top
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Minute-Time
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:1000] echo "$(date +"%M")"
 | 
			
		||||
    #color = rgba(15, 10, 222, .8)
 | 
			
		||||
    color = $color12
 | 
			
		||||
    font_size = 240
 | 
			
		||||
    font_family = JetBrainsMono Nerd Font ExtraBold
 | 
			
		||||
    position = 0, -450
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = top
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Seconds-Time
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:1000] echo "$(date +"%S")"
 | 
			
		||||
#    text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM
 | 
			
		||||
    color = $color11
 | 
			
		||||
    font_size = 50
 | 
			
		||||
    font_family = JetBrainsMono Nerd Font ExtraBold
 | 
			
		||||
    position = 0, -450
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = top
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Put a picture of choice here. Default is the current wallpaper
 | 
			
		||||
#image {
 | 
			
		||||
#    monitor =
 | 
			
		||||
#    #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
 | 
			
		||||
#    size = 160
 | 
			
		||||
#    rounding = -1
 | 
			
		||||
#    border_size = 0
 | 
			
		||||
#    border_color = $color11
 | 
			
		||||
#    rotate = 0
 | 
			
		||||
#    reload_time = -1
 | 
			
		||||
#    position = 0, 400
 | 
			
		||||
#    halign = center
 | 
			
		||||
#    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# USER
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text =     $USER
 | 
			
		||||
    color = $color13
 | 
			
		||||
    outline_thickness = 2
 | 
			
		||||
    dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
 | 
			
		||||
    dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
 | 
			
		||||
    dots_center = true
 | 
			
		||||
    font_size = 24
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    position = 0, 200
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# INPUT FIELD
 | 
			
		||||
input-field {
 | 
			
		||||
    monitor =
 | 
			
		||||
    size = 300, 60
 | 
			
		||||
    outline_thickness = 2
 | 
			
		||||
    dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
 | 
			
		||||
    dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
 | 
			
		||||
    dots_center = true
 | 
			
		||||
    outer_color = $color11
 | 
			
		||||
    inner_color = rgba(255, 255, 255, 0.1)
 | 
			
		||||
    font_color = $color13
 | 
			
		||||
    capslock_color = rgba(255, 0, 0)
 | 
			
		||||
    fade_on_empty = false
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    placeholder_text = <i><span foreground="##ffffff99">🔒 Type Password</span></i>
 | 
			
		||||
    hide_input = false
 | 
			
		||||
    position = 0, 100
 | 
			
		||||
    halign = center
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# uptime
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:60000] echo "<b> "$(uptime -p || $Scripts/UptimeNixOS.sh)" </b>"
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 18
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    position = 0, 0
 | 
			
		||||
    halign = right
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# weather edit the scripts for locations
 | 
			
		||||
# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py
 | 
			
		||||
label {
 | 
			
		||||
    monitor =
 | 
			
		||||
    text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat  "$HOME/.cache/.weather_cache"
 | 
			
		||||
    color = $color13
 | 
			
		||||
    font_size = 18
 | 
			
		||||
    font_family = Victor Mono Bold Oblique
 | 
			
		||||
    position = 50, 0
 | 
			
		||||
    halign = left
 | 
			
		||||
    valign = bottom
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# A bash script designed to run only once dotfiles installed
 | 
			
		||||
 | 
			
		||||
# THIS SCRIPT CAN BE DELETED ONCE SUCCESSFULLY BOOTED!! And also, edit ~/.config/hypr/configs/Settings.conf
 | 
			
		||||
# NOT necessary to do since this script is only designed to run only once as long as the marker exists
 | 
			
		||||
# marker file is located at ~/.config/hypr/.initial_startup_done
 | 
			
		||||
# However, I do highly suggest not to touch it since again, as long as the marker exist, script wont run
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
scriptsDir=$HOME/.config/hypr/scripts
 | 
			
		||||
wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current
 | 
			
		||||
waybar_style="$HOME/.config/waybar/style/[Extra] Modern-Combined - Transparent.css"
 | 
			
		||||
kvantum_theme="catppuccin-mocha-blue"
 | 
			
		||||
color_scheme="prefer-dark"
 | 
			
		||||
gtk_theme="Flat-Remix-GTK-Blue-Dark"
 | 
			
		||||
icon_theme="Flat-Remix-Blue-Dark"
 | 
			
		||||
cursor_theme="Bibata-Modern-Ice"
 | 
			
		||||
 | 
			
		||||
swww="swww img"
 | 
			
		||||
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 30 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2"
 | 
			
		||||
 | 
			
		||||
# Check if a marker file exists.
 | 
			
		||||
if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then
 | 
			
		||||
    sleep 1
 | 
			
		||||
    # Initialize wallust and wallpaper
 | 
			
		||||
	if [ -f "$wallpaper" ]; then
 | 
			
		||||
		wallust run -s $wallpaper > /dev/null 
 | 
			
		||||
		swww query || swww-daemon && $swww $wallpaper $effect
 | 
			
		||||
	    "$scriptsDir/WallustSwww.sh" > /dev/null 2>&1 & 
 | 
			
		||||
	fi
 | 
			
		||||
     
 | 
			
		||||
    # initiate GTK dark mode and apply icon and cursor theme
 | 
			
		||||
    gsettings set org.gnome.desktop.interface color-scheme $color_scheme > /dev/null 2>&1 &
 | 
			
		||||
    gsettings set org.gnome.desktop.interface gtk-theme $gtk_theme > /dev/null 2>&1 &
 | 
			
		||||
    gsettings set org.gnome.desktop.interface icon-theme $icon_theme > /dev/null 2>&1 &
 | 
			
		||||
    gsettings set org.gnome.desktop.interface cursor-theme $cursor_theme > /dev/null 2>&1 &
 | 
			
		||||
    gsettings set org.gnome.desktop.interface cursor-size 24 > /dev/null 2>&1 &
 | 
			
		||||
 | 
			
		||||
     # NIXOS initiate GTK dark mode and apply icon and cursor theme
 | 
			
		||||
	if [ -n "$(grep -i nixos < /etc/os-release)" ]; then
 | 
			
		||||
      gsettings set org.gnome.desktop.interface color-scheme "'$color_scheme'" > /dev/null 2>&1 &
 | 
			
		||||
      dconf write /org/gnome/desktop/interface/gtk-theme "'$gtk_theme'" > /dev/null 2>&1 &
 | 
			
		||||
      dconf write /org/gnome/desktop/interface/icon-theme "'$icon_theme'" > /dev/null 2>&1 &
 | 
			
		||||
      dconf write /org/gnome/desktop/interface/cursor-theme "'$cursor_theme'" > /dev/null 2>&1 &
 | 
			
		||||
      dconf write /org/gnome/desktop/interface/cursor-size "24" > /dev/null 2>&1 &
 | 
			
		||||
	fi
 | 
			
		||||
       
 | 
			
		||||
    # initiate kvantum theme
 | 
			
		||||
    kvantummanager --set "$kvantum_theme" > /dev/null 2>&1 &
 | 
			
		||||
 | 
			
		||||
    # initiate the kb_layout (for some reason) waybar cant launch it
 | 
			
		||||
    "$scriptsDir/SwitchKeyboardLayout.sh" > /dev/null 2>&1 &
 | 
			
		||||
 | 
			
		||||
	# waybar style
 | 
			
		||||
	#if [ -L "$HOME/.config/waybar/config" ]; then
 | 
			
		||||
    ##    	ln -sf "$waybar_style" "$HOME/.config/waybar/style.css"
 | 
			
		||||
    #   	"$scriptsDir/Refresh.sh" > /dev/null 2>&1 & 
 | 
			
		||||
	#fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Create a marker file to indicate that the script has been executed.
 | 
			
		||||
    touch "$HOME/.config/hypr/.initial_startup_done"
 | 
			
		||||
 | 
			
		||||
    exit
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
# default Monitor config
 | 
			
		||||
 | 
			
		||||
# *********************************************************** #
 | 
			
		||||
# 
 | 
			
		||||
# NOTE: This will be overwritten by NWG-Displays 
 | 
			
		||||
# once you use and click apply. You can still find this
 | 
			
		||||
# default at ~/.config/hypr/Monitor_Profiles/default.conf
 | 
			
		||||
#
 | 
			
		||||
# *********************************************************** #
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Monitor Configuration
 | 
			
		||||
# See Hyprland wiki for more details
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Monitors/
 | 
			
		||||
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
 | 
			
		||||
 | 
			
		||||
# Monitors
 | 
			
		||||
monitor=,preferred,auto,1
 | 
			
		||||
 | 
			
		||||
# High Refresh Rate
 | 
			
		||||
monitor=,highrr,auto,1
 | 
			
		||||
 | 
			
		||||
# High Resolution
 | 
			
		||||
monitor=,highres,auto,1
 | 
			
		||||
 | 
			
		||||
# NOTE: for laptop, kindly check notes in Laptops.conf regarding display
 | 
			
		||||
# Created this inorder for the monitor display to not wake up if not intended.
 | 
			
		||||
# See here: https://github.com/hyprwm/Hyprland/issues/4090
 | 
			
		||||
 | 
			
		||||
# Some examples to set your own monitor
 | 
			
		||||
#monitor = eDP-1, preferred, auto, 1
 | 
			
		||||
#monitor = eDP-1, 2560x1440@165, 0x0, 1 #own screen
 | 
			
		||||
#monitor = DP-3, 1920x1080@240, auto, 1 
 | 
			
		||||
#monitor = DP-1, preferred, auto, 1
 | 
			
		||||
#monitor = HDMI-A-1, preferred,auto,1
 | 
			
		||||
 | 
			
		||||
# QEMU-KVM, virtual box or vmware
 | 
			
		||||
#monitor = Virtual-1, 1920x1080@60,auto,1
 | 
			
		||||
 | 
			
		||||
# to disable a monitor
 | 
			
		||||
#monitor=name,disable
 | 
			
		||||
 | 
			
		||||
# Mirror samples
 | 
			
		||||
#monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2
 | 
			
		||||
#monitor=,preferred,auto,1,mirror,eDP-1
 | 
			
		||||
#monitor=HDMI-A-1,2560x1440@144,0x0,1,mirror,eDP-1
 | 
			
		||||
 | 
			
		||||
# 10 bit monitor support - See wiki https://wiki.hyprland.org/Configuring/Monitors/#10-bit-support - See NOTES below
 | 
			
		||||
# NOTE: Colors registered in Hyprland (e.g. the border color) do not support 10 bit.
 | 
			
		||||
# NOTE: Some applications do not support screen capture with 10 bit enabled. (Screen captures like OBS may render black screen)
 | 
			
		||||
# monitor=,preferred,auto,1,bitdepth,10
 | 
			
		||||
 | 
			
		||||
#monitor=eDP-1,transform,0
 | 
			
		||||
#monitor=eDP-1,addreserved,10,10,10,49
 | 
			
		||||
 | 
			
		||||
# workspaces - Monitor rules
 | 
			
		||||
# https://wiki.hyprland.org/Configuring/Workspace-Rules/
 | 
			
		||||
# SUPER E - Workspace-Rules 
 | 
			
		||||
# See ~/.config/hypr/UserConfigs/WorkspaceRules.conf
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
[pyprland]
 | 
			
		||||
 | 
			
		||||
plugins = [
 | 
			
		||||
  "scratchpads",
 | 
			
		||||
  "magnify",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[scratchpads.term]
 | 
			
		||||
animation = "fromTop"
 | 
			
		||||
command = "kitty --class kitty-dropterm"
 | 
			
		||||
class = "kitty-dropterm"
 | 
			
		||||
size = "75% 60%"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Airplane Mode. Turning on or off all wifi using rfkill. 
 | 
			
		||||
 | 
			
		||||
notif="$HOME/.config/swaync/images/ja.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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# For applying Animations from different users
 | 
			
		||||
 | 
			
		||||
# Check if rofi is already running
 | 
			
		||||
if pidof rofi > /dev/null; then
 | 
			
		||||
  pkill rofi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
iDIR="$HOME/.config/swaync/images"
 | 
			
		||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
 | 
			
		||||
animations_dir="$HOME/.config/hypr/animations"
 | 
			
		||||
UserConfigs="$HOME/.config/hypr/UserConfigs"
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-Animations.rasi"
 | 
			
		||||
msg='❗NOTE:❗ This will copy animations into UserAnimations.conf'
 | 
			
		||||
# list of animation files, sorted alphabetically with numbers first
 | 
			
		||||
animations_list=$(find -L "$animations_dir" -maxdepth 1 -type f | sed 's/.*\///' | sed 's/\.conf$//' | sort -V)
 | 
			
		||||
 | 
			
		||||
# Rofi Menu
 | 
			
		||||
chosen_file=$(echo "$animations_list" | rofi -i -dmenu -config $rofi_theme -mesg "$msg")
 | 
			
		||||
 | 
			
		||||
# Check if a file was selected
 | 
			
		||||
if [[ -n "$chosen_file" ]]; then
 | 
			
		||||
    full_path="$animations_dir/$chosen_file.conf"    
 | 
			
		||||
    cp "$full_path" "$UserConfigs/UserAnimations.conf"    
 | 
			
		||||
    notify-send -u low -i "$iDIR/ja.png" "$chosen_file" "Hyprland Animation Loaded"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
sleep 1
 | 
			
		||||
"$SCRIPTSDIR/RefreshNoWaybar.sh"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# 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 "Screen" "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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Script for changing blurs on the fly
 | 
			
		||||
 | 
			
		||||
notif="$HOME/.config/swaync/images/ja.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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# for changing Hyprland Layouts (Master or Dwindle) on the fly
 | 
			
		||||
 | 
			
		||||
notif="$HOME/.config/swaync/images/ja.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
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Clipboard Manager. This script uses cliphist, rofi, and wl-copy.
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
rofi_theme="$HOME/.config/rofi/config-clipboard.rasi"
 | 
			
		||||
msg='👀 **note**  CTRL DEL = cliphist del (entry)   or   ALT DEL - cliphist wipe (all)'
 | 
			
		||||
# Actions:
 | 
			
		||||
# CTRL Del to delete an entry
 | 
			
		||||
# ALT Del to wipe clipboard contents
 | 
			
		||||
 | 
			
		||||
# Check if rofi is already running
 | 
			
		||||
if pidof rofi > /dev/null; then
 | 
			
		||||
  pkill rofi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
while true; do
 | 
			
		||||
    result=$(
 | 
			
		||||
        rofi -i -dmenu \
 | 
			
		||||
            -kb-custom-1 "Control-Delete" \
 | 
			
		||||
            -kb-custom-2 "Alt-Delete" \
 | 
			
		||||
            -config $rofi_theme < <(cliphist list) \
 | 
			
		||||
			-mesg "$msg" 
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,249 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
## 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"
 | 
			
		||||
 | 
			
		||||
# intial kill process
 | 
			
		||||
for pid in kitty waybar rofi swaync ags swaybg; do
 | 
			
		||||
    killall -SIGUSR1 "$pid"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Initialize swww if needed
 | 
			
		||||
swww query || swww-daemon --format xrgb
 | 
			
		||||
 | 
			
		||||
# 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" > "$HOME/.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 -L "$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 command -v ags >/dev/null 2>&1; then    
 | 
			
		||||
    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
 | 
			
		||||
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 -L "${dark_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)"
 | 
			
		||||
else
 | 
			
		||||
    next_wallpaper="$(find -L "${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-blue"
 | 
			
		||||
    #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-blue"
 | 
			
		||||
    #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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
${SCRIPTSDIR}/WallustSwww.sh &&
 | 
			
		||||
 | 
			
		||||
sleep 2
 | 
			
		||||
# kill process
 | 
			
		||||
for pid1 in kitty waybar rofi swaync ags swaybg; do
 | 
			
		||||
    killall "$pid1"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
sleep 1
 | 
			
		||||
${SCRIPTSDIR}/Refresh.sh 
 | 
			
		||||
 | 
			
		||||
sleep 0.5
 | 
			
		||||
# Display notifications for theme and icon changes 
 | 
			
		||||
notify-send -u low -i "$notif" " Themes switched to:" " $next_mode Mode"
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# Game Mode. Turning off all animations
 | 
			
		||||
 | 
			
		||||
notif="$HOME/.config/swaync/images/ja.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:shadow:enabled 0;\
 | 
			
		||||
        keyword decoration:blur:enabled 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"
 | 
			
		||||
    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"
 | 
			
		||||
    exit
 | 
			
		||||
fi
 | 
			
		||||
hyprctl reload
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
# 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
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue