kayinfire

Automate Change of Screen Brightness

Nov 4th, 2025
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.27 KB | Source Code | 0 0
  1. #!/bin/lua
  2.  
  3. function NightModeExtreme()
  4.     return {
  5.         apply = function(self)
  6.             os.execute("sct 1500")
  7.             os.execute("brightnessctl set 1%")
  8.         end,
  9.     }
  10. end
  11.  
  12. function NightModeNormal()
  13.     return {
  14.         apply = function(self)
  15.             os.execute("sct 3000")
  16.             os.execute("brightnessctl set 1%")
  17.         end,
  18.     }
  19. end
  20.  
  21. function NormalMode()
  22.     return {
  23.         applyWithBrightnessAt = function(self, brightness)
  24.             os.execute("sct 6500")
  25.             os.execute("brightnessctl set " .. brightness .. "%")
  26.         end,
  27.     }
  28. end
  29.  
  30. function AvailableModes(modes)
  31.     return {
  32.         apply = function(self, modeRequest)
  33.             if modeRequest == "Extreme Night Mode" then
  34.                 modes.NightModes[2]:apply()
  35.             elseif modeRequest == "Normal Night Mode" then
  36.                 modes.NightModes[1]:apply()
  37.             elseif type(modeRequest) == "table" and modeRequest.Mode == "Normal Mode" then
  38.                 modes.NormalModes[1]:applyWithBrightnessAt(modeRequest.Brightness)
  39.             end
  40.         end,
  41.     }
  42. end
  43.  
  44. function DisplayMode(acceptableDisplayModes)
  45.     return {
  46.         providedByUser = function(self)
  47.             local userDisplayMode = self:displayModeRequestedByUser()
  48.             local displayModes = self:displayModes()
  49.             return self:displayModeChosenByUser(displayModes, userDisplayMode)
  50.         end,
  51.  
  52.         displayModeRequestedByUser = function(self)
  53.             local handle = io.popen("echo '' | dmenu -p \"displayMode:\"")
  54.             local input = handle:read("*a")
  55.             handle:close()
  56.             return input:gsub("\n$", "")
  57.         end,
  58.  
  59.         displayModes = function(self)
  60.             return {
  61.                 { nn = "Normal Night Mode" },
  62.                 { ne = "Extreme Night Mode" },
  63.                 { n18 = "NightMode, 18" },
  64.                 { d80 = "Normal Mode, 80" },
  65.             }
  66.         end,
  67.  
  68.         displayModeChosenByUser = function(self, displayModes, userInputFromDmenu)
  69.             for i, mode in ipairs(displayModes) do
  70.                 for key, value in pairs(mode) do
  71.                     if key == userInputFromDmenu then
  72.                         return value
  73.                     end
  74.                 end
  75.             end
  76.             if string.sub(userInputFromDmenu, 1, 1) == "d" then
  77.                 return "Normal Mode " .. string.sub(userInputFromDmenu, 2)
  78.             elseif string.sub(userInputFromDmenu, 1, 1) == "n" then
  79.                 return "Night Mode " .. string.sub(userInputFromDmenu, 2)
  80.             end
  81.             return nil
  82.         end,
  83.     }
  84. end
  85.  
  86. function PrimaryDisplay(availableModes)
  87.     return {
  88.         changeAccordingTo = function(self, userMode)
  89.             self:activateUserChosenDisplay(userMode)
  90.         end,
  91.  
  92.         activateUserChosenDisplay = function(self, userMode)
  93.             local userInput = userMode:providedByUser()
  94.             if userInput == "Extreme Night Mode" then
  95.                 availableModes:apply(userInput)
  96.             elseif userInput == "Normal Night Mode" then
  97.                 availableModes:apply(userInput)
  98.             elseif string.sub(userInput, 1, 11) == "Normal Mode" then
  99.                 local brightnessValue = tonumber(string.sub(userInput, 13))
  100.                 availableModes:apply({ Mode = "Normal Mode", Brightness = brightnessValue })
  101.             elseif string.sub(userInput, 1, 10) == "Night Mode" then
  102.                 local warmthValue = tonumber(string.sub(userInput, 12)) * 100
  103.                 availableModes:apply({ Mode = "Night Mode", Warmth = warmthValue })
  104.             end
  105.         end,
  106.     }
  107. end
  108.  
  109. local modes = {
  110.     NightModes = {
  111.         NightModeNormal(),
  112.         NightModeExtreme(),
  113.     },
  114.     NormalModes = {
  115.         NormalMode(),
  116.     },
  117. }
  118.  
  119. local availableModes = AvailableModes(modes)
  120. local displayMode = DisplayMode()
  121. local primaryDisplay = PrimaryDisplay(availableModes)
  122. primaryDisplay:changeAccordingTo(displayMode)
  123. os.exit(0)
  124.  
Advertisement
Add Comment
Please, Sign In to add comment