dotfiles
My PC Dotfiles & Websitegit clone https://github.com/maydayv7/dotfiles
scripts/hyprutils.nix (4951B)
1{
2 lib,
3 pkgs,
4 files,
5 ...
6}: let
7 inherit (lib) licenses recursiveUpdate;
8
9 help = ''
10 # Legend #
11 xxx - Command [action] - Description
12
13 # Usage #
14 help - Show this information
15 gamemode - Toggle Game Mode
16 magnify [level] - Adjust magnification
17 toggle
18 float - Toggle window floating in current workspace
19 minimized - Show minimized windows
20 monitor 'name' - Toggle specified Monitor
21 shader - Toggle Compositor Shader
22 touchpad - Toggle touchpad
23 '';
24in
25 recursiveUpdate
26 {
27 meta = {
28 mainProgram = "hyprutils";
29 description = "Hyprland Utility Script";
30 homepage = files.path.repo;
31 license = licenses.gpl3Only;
32 maintainers = ["maydayv7"];
33 };
34 }
35 (
36 pkgs.writeShellApplication {
37 name = "hyprutils";
38 runtimeInputs = with pkgs; [
39 coreutils
40 gnugrep
41 zenity
42 hyprshade
43 hyprland
44 ];
45
46 text = ''
47 set +eu
48 ${files.scripts.commands}
49
50 hyprnotify() {
51 hyprctl notify "$1" 1500 0 " $2 "
52 }
53
54 fail() {
55 error "$1" "Try 'hyprutils help' for more information"
56 }
57
58 temp hyprutils-gamemode 3
59 GAMEMODE_STATE="$TEMP"
60 game_mode_active() {
61 [ -d "$GAMEMODE_STATE" ]
62 }
63
64 case "$1" in
65 "") error "Expected an Option" "${help}";;
66 "help") echo -e "## Hyprland Utility Script ##\n${help}";;
67 "gamemode")
68 if game_mode_active
69 then
70 if pypr gamemode
71 then
72 temp hyprutils-gamemode 2
73 fi
74 elif pypr gamemode
75 then
76 temp hyprutils-gamemode 1
77 hyprctl keyword plugin:dynamic_cursors:enabled false
78 hyprshade off
79 pypr zoom 0
80 fi
81 ;;
82 "magnify")
83 if game_mode_active
84 then
85 hyprnotify 0 "Magnification disabled in Game Mode"
86 elif [ -n "$2" ]
87 then
88 pypr zoom "$2"
89 else
90 pypr zoom 0
91 fi
92 ;;
93 "toggle")
94 case "$2" in
95 "float")
96 WORKSPACE=$(hyprctl activeworkspace | grep "workspace ID" | awk '{print $3}')
97 hyprnotify 1 "Toggled window floating on Workspace $WORKSPACE"
98 hyprctl eval 'local ws = hl.get_active_workspace(); if ws then for _, w in ipairs(hl.get_workspace_windows(ws)) do hl.dispatch(hl.dsp.window.float({ action = "toggle", window = w })) end end'
99 hyprctl dispatch 'hl.dsp.event("floatcheck")'
100 ;;
101 "minimized")
102 if hyprctl workspaces | grep "special:minimized"
103 then
104 hyprctl dispatch 'hl.dsp.focus({ workspace = "special:minimized" })'
105 hyprctl dispatch 'hl.dsp.submap("minimized")'
106 else
107 hyprnotify 1 "No minimized windows present"
108 fi
109 ;;
110 "monitor")
111 if [ -z "$3" ]
112 then
113 fail "Expected monitor name"
114 fi
115
116 if hyprctl monitors | grep "Monitor $3"
117 then
118 hyprctl eval 'hl.monitor({ output = "'"$3"'", disabled = true })'
119 else
120 hyprctl eval 'hl.monitor({ output = "'"$3"'", mode = "preferred", position = "auto", scale = 1 })'
121 fi
122 ;;
123 "shader")
124 if game_mode_active
125 then
126 hyprnotify 0 "Shaders disabled in Game Mode"
127 else
128 hyprshade off
129 mapfile SHADERS < <(hyprshade ls)
130 SHADER=$(zenity --list --title="Compositor Shader Toggle" --column="Shaders" "''${SHADERS[@]}" | sed "s/^[ \t]*//")
131 hyprshade on "$SHADER" && hyprctl seterror ""
132 fi
133 ;;
134 "touchpad")
135 touchpad=$(hyprctl devices | grep touchpad | xargs)
136 hyprctl eval '
137 if __touchpad_enabled == nil then __touchpad_enabled = true end
138 __touchpad_enabled = not __touchpad_enabled
139 hl.device({ name = "'"$touchpad"'", enabled = __touchpad_enabled })
140 hl.notification.create({
141 text = " Touchpad " .. (__touchpad_enabled and "Enabled" or "Disabled") .. " ",
142 duration = 1500,
143 icon = 1,
144 })
145 '
146 ;;
147 "") fail "Expected an Option" ;;
148 *) fail "Unexpected Option 'toggle $2'" ;;
149 esac
150 ;;
151 *) fail "Unexpected Option '$1'" ;;
152 esac
153 '';
154 }
155 )