dotfiles

My PC Dotfiles & Website

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  )