Cap XMonad volume at 100% and clean up config

- Raise volume with wpctl, capped at 100%
- Define workspace names once instead of repeating the strings
- Remove unused imports and the never-matching transmission-gtk rule
- Add missing type signatures
- Document why the isFullscreen rule is needed alongside ewmhFullscreen
This commit is contained in:
Daniele Fucini
2026-10-08 16:11:27 +02:00
parent c7275031ba
commit 4d905774b8
+39 -33
View File
@@ -1,22 +1,17 @@
-- Import -- Import
import Data.Default
import Data.Monoid import Data.Monoid
import Graphics.X11.ExtraTypes.XF86 import Graphics.X11.ExtraTypes.XF86
import Control.Monad (liftM2) import Control.Monad (liftM2)
import XMonad import XMonad
import XMonad.Actions.PhysicalScreens import XMonad.Actions.PhysicalScreens
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.FloatConfigureReq
import XMonad.Hooks.InsertPosition
import XMonad.Hooks.ManageDocks import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.Rescreen import XMonad.Hooks.Rescreen
import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar
import XMonad.Hooks.StatusBar.PP import XMonad.Hooks.StatusBar.PP
import XMonad.Layout.Grid import XMonad.Layout.Grid
import XMonad.Layout.LayoutCombinators
import XMonad.Layout.Magnifier import XMonad.Layout.Magnifier
import XMonad.Layout.NoBorders import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace import XMonad.Layout.PerWorkspace
@@ -61,8 +56,10 @@ myFocusBorderColor = "#41a6b5"
myKeyboardLayoutIT :: String myKeyboardLayoutIT :: String
myKeyboardLayoutIT = " -layout it" myKeyboardLayoutIT = " -layout it"
myKeyboardLayoutUS :: String
myKeyboardLayoutUS = " -layout us" myKeyboardLayoutUS = " -layout us"
myKeyboardLayoutSK :: String
myKeyboardLayoutSK = " -layout sk -variant qwerty" myKeyboardLayoutSK = " -layout sk -variant qwerty"
myScreenshotDir :: String myScreenshotDir :: String
@@ -145,7 +142,7 @@ myConfig =
] ]
`additionalKeys` [ ((0, xF86XK_AudioMute), spawn "pactl set-sink-mute $(pactl get-default-sink) toggle"), `additionalKeys` [ ((0, xF86XK_AudioMute), spawn "pactl set-sink-mute $(pactl get-default-sink) toggle"),
((0, xF86XK_AudioLowerVolume), spawn "pactl set-sink-volume $(pactl get-default-sink) -10%"), ((0, xF86XK_AudioLowerVolume), spawn "pactl set-sink-volume $(pactl get-default-sink) -10%"),
((0, xF86XK_AudioRaiseVolume), spawn "pactl set-sink-volume $(pactl get-default-sink) +10%"), ((0, xF86XK_AudioRaiseVolume), spawn "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 10%+"),
((0, xF86XK_Calculator), spawn "qalculate-gtk"), ((0, xF86XK_Calculator), spawn "qalculate-gtk"),
((0, xF86XK_HomePage), spawn myBrowser), ((0, xF86XK_HomePage), spawn myBrowser),
((0, xF86XK_Mail), namedScratchpadAction myScratchpads "Mail"), ((0, xF86XK_Mail), namedScratchpadAction myScratchpads "Mail"),
@@ -158,10 +155,19 @@ myConfig =
-- Workspaces -- Workspaces
myWorkspaces :: [String] myWorkspaces :: [String]
myWorkspaces = ["1:\xf489 ", "2:\xe743 ", "3:\xf1b6 ", "4:\xf10b ", "5:\xead9 ", "6:\xeb69 ", "7:\xea7a "] ++ map show [8, 9] myWorkspaces = [wsTerm, wsWeb, wsGames, wsChat, wsMedia, wsDocs, wsVM] ++ map show [8, 9]
wsTerm, wsWeb, wsGames, wsChat, wsMedia, wsDocs, wsVM :: String
wsTerm = "1:\xf489 "
wsWeb = "2:\xe743 "
wsGames = "3:\xf1b6 "
wsChat = "4:\xf10b "
wsMedia = "5:\xead9 "
wsDocs = "6:\xeb69 "
wsVM = "7:\xea7a "
-- Layout -- Layout
myLayoutHook = onWorkspace "2:\xe743 " myWebLayout $ onWorkspace "3:\xf1b6 " myGamesLayout $ onWorkspace "5:\xead9 " myVideoLayout myDefaultLayout myLayoutHook = onWorkspace wsWeb myWebLayout $ onWorkspace wsGames myGamesLayout $ onWorkspace wsMedia myVideoLayout myDefaultLayout
where where
myWebLayout = avoidStruts $ renamed [CutWordsLeft 1] $ spacingWithEdge 3 $ myTabbed ||| tiled ||| Mirror tiled ||| threeCol ||| Grid ||| spiral 0.856 myWebLayout = avoidStruts $ renamed [CutWordsLeft 1] $ spacingWithEdge 3 $ myTabbed ||| tiled ||| Mirror tiled ||| threeCol ||| Grid ||| spiral 0.856
myGamesLayout = avoidStruts $ smartBorders Full myGamesLayout = avoidStruts $ smartBorders Full
@@ -242,41 +248,41 @@ myStartupHook = do
myManageHook :: ManageHook myManageHook :: ManageHook
myManageHook = myManageHook =
composeAll composeAll
[ className =? "Gpodder" --> doShift "5:\xead9 ", [ className =? "Gpodder" --> doShift wsMedia,
className =? "An Anime Game Launcher" --> doShift "3:\xf1b6 ", className =? "An Anime Game Launcher" --> doShift wsGames,
className =? "Qalculate-gtk" --> doFloat, className =? "Qalculate-gtk" --> doFloat,
title =? "Genshin Impact" --> doShift "3:\xf1b6 ", title =? "Genshin Impact" --> doShift wsGames,
className =? "Signal" --> doShift "4:\xf10b ", className =? "Signal" --> doShift wsChat,
className =? "Spotify" --> doShift "5:\xead9 ", className =? "Spotify" --> doShift wsMedia,
className =? "Transmission-gtk" --> doShift "2:\xe743 ", className =? "Transmission-gtk" --> doShift wsWeb,
className =? "Viewnior" --> doFloat, className =? "Viewnior" --> doFloat,
className =? "Vivaldi-stable" --> doShift "2:\xe743 ", className =? "Vivaldi-stable" --> doShift wsWeb,
className =? "Xmessage" --> doFloat, className =? "Xmessage" --> doFloat,
className =? "Xreader" --> doShift "6:\xeb69 ", className =? "Xreader" --> doShift wsDocs,
className =? "calibre" --> doShift "6:\xeb69 ", className =? "calibre" --> doShift wsDocs,
className =? "discord" --> doShift "4:\xf10b ", className =? "discord" --> doShift wsChat,
className =? "explorer.exe" --> doShift "3:\xf1b6 ", className =? "explorer.exe" --> doShift wsGames,
className =? "feh" --> doFloat, className =? "feh" --> doFloat,
title =? "glxgears" --> doFloat, title =? "glxgears" --> doFloat,
className =? "library_manager" --> doShift "6:\xeb69 ", className =? "library_manager" --> doShift wsDocs,
className =? "libreoffice-calc" --> doShift "6:\xeb69 ", className =? "libreoffice-calc" --> doShift wsDocs,
className =? "libreoffice-writer" --> doShift "6:\xeb69 ", className =? "libreoffice-writer" --> doShift wsDocs,
className =? "mpv" --> doFullFloat, className =? "mpv" --> doFullFloat,
className =? "mpv" --> viewShift "5:\xead9 ", className =? "mpv" --> viewShift wsMedia,
className =? "freetube" --> doShift "5:\xead9 ", className =? "freetube" --> doShift wsMedia,
className =? myTerminal --> doShift "1:\xf489 ", className =? myTerminal --> doShift wsTerm,
className =? "scrcpy" --> doShift "5:\xead9 ", className =? "scrcpy" --> doShift wsMedia,
className =? "steam" --> doShift "3:\xf1b6 ", className =? "steam" --> doShift wsGames,
className =? "steam_app_109600" --> doFloat, className =? "steam_app_109600" --> doFloat,
className =? "steam_app_109600" --> doShift "3:\xf1b6 ", className =? "steam_app_109600" --> doShift wsGames,
className =? "steam_app_289070" --> doFloat, className =? "steam_app_289070" --> doFloat,
className =? "steam_app_289070" --> doShift "3:\xf1b6 ", className =? "steam_app_289070" --> doShift wsGames,
className =? "transmission-gtk" --> doShift "2:\xe743 ", className =? "VirtualBox Machine" --> doShift wsVM,
className =? "VirtualBox Machine" --> doShift "7:\xea7a ",
className =? "VirtualBox Machine" --> doFullFloat, className =? "VirtualBox Machine" --> doFullFloat,
className =? "VirtualBox Manager" --> doShift "7:\xea7a ", className =? "VirtualBox Manager" --> doShift wsVM,
className =? "zen" --> doShift "2:\xe743 ", className =? "zen" --> doShift wsWeb,
isDialog --> doFloat, isDialog --> doFloat,
-- Windows that open already fullscreen; ewmhFullscreen only handles later requests
isFullscreen --> doFullFloat isFullscreen --> doFullFloat
] ]
<+> namedScratchpadManageHook myScratchpads <+> namedScratchpadManageHook myScratchpads