0

I'm new to Xmonad and I want to customize the layout of the windows, I did not find anything to take as an example of how to edit the windows, so far I can change the color and width of the border.

Follow my xmonad.hs

module Main (main) where

--------------------------------------------------------------------------------
import System.Exit
import XMonad
import XMonad.Config.Desktop
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.BinarySpacePartition (emptyBSP)
import XMonad.Layout.NoBorders (noBorders)
import XMonad.Layout.ResizableTile (ResizableTall(..))
import XMonad.Layout.ToggleLayouts (ToggleLayout(..), toggleLayouts)
import XMonad.Prompt
import XMonad.Prompt.ConfirmPrompt
import XMonad.Prompt.Shell
import XMonad.Util.EZConfig

-------------------------------------------------------------------------    -------
main = do
  spawn "xmobar" -- Start a task bar such as xmobar.
  spawn "wmname LG3D"

  -- Start xmonad using the main desktop configuration with a few
  -- simple overrides:

  xmonad $ desktopConfig
    { modMask    = mod4Mask -- Use the "Win" key for the mod key
    , manageHook = myManageHook <+> manageHook desktopConfig
    , layoutHook = desktopLayoutModifiers myLayouts
    , logHook    = dynamicLogString def >>= xmonadPropLog
    , focusedBorderColor = "cyan"
    , borderWidth = 1
    }

    `additionalKeysP` -- Add some extra key bindings:
      [ ("M-S-q",   confirmPrompt myXPConfig "exit" (io exitSuccess))
      , ("M-p",     shellPrompt myXPConfig)
      , ("M-<Esc>", sendMessage (Toggle "Full"))
      , ("<XF86AudioMute>", spawn "amixer -q sset 'Master' mute") --Muta o som
      , ("<XF86AudioLowerVolume>", spawn "amixer -q sset 'Master' 1%-") -    -Diminui o volume em 1%
      , ("<XF86AudioRaiseVolume>", spawn "amixer -q sset 'Master' 1%+     unmute") --Aumenta o volume em 1%
      , ("<XF86MonBrightnessDown>", spawn "sh     ~/OneDrive/Documentos/xmonad/brightness.sh -s -1") --Diminui o brilho da tela     em 1%
      , ("<XF86MonBrightnessUp>", spawn "sh     ~/OneDrive/Documentos/xmonad/brightness.sh -s +1") --Aumenta o Brilho da tela     em 1%
      , ("C-<Return>", spawn "chromium") --Abre o google chrome   
      , ("M-g", spawn "gedit") --Abre o gedit
      , ("M-r", spawn "nautilus") --Abre o nautilus
      , ("M-c", spawn "code") --Abre o MS Code
      ]
-------------------------------------------------------------------------    -------
-- | Customize layouts.
--
-- This layout configuration uses two primary layouts, 'ResizableTall'
-- and 'BinarySpacePartition'.  You can also use the 'M-<Esc>' key
-- binding defined above to toggle between the current layout and a
-- full screen layout.
myLayouts = toggleLayouts (noBorders Full) others
  where
    others = ResizableTall 1 (1.5/100) (3/5) [] ||| emptyBSP

--------------------------------------------------------------------------------
-- | Customize the way 'XMonad.Prompt' looks and behaves.  It's a
-- great replacement for dzen.
myXPConfig = def
  { position          = Top
  , alwaysHighlight   = True
  , promptBorderWidth = 0
  , font              = "xft:monospace:size=9"
  }

myManageHook = composeOne
  [ className =? "Pidgin" -?> doFloat
  , className =? "XCalc"  -?> doFloat
  , className =? "mpv"    -?> doFloat
  , className =? "vlc"    -?> doFloat
  , isDialog              -?> doCenterFloat
  , isFullscreen          -?> doFullFloat
    -- Move transient windows to their parent:
  , transience
  ]
1

XMonad itself can't modify client window. Borders / tabs and other decorations can be created/rendered by xmonad itself.

You can use XMonad.Layout.NoBorders from xmonad-contrib package for smart borders behaviour.

for example I using:

import XMonad.Layout.NoBorders



myBorders = lessBorders (Combine Union Screen OnlyFloat)

myLayout =
  avoidStruts $
  myBorders $
  layoutHintsToCenter  $
  onWorkspace "con"
              ( tab ||| full ||| tiled ||| mtiled) $
  onWorkspaces ["web","irc"]
              full $
    full ||| tiled ||| mtiled
  where
        -- default tiling algorithm partitions the screen into two panes
        tiled = Tall nmaster delta ratio
        -- The default number of windows in the master pane
        nmaster = 1
        -- Default proportion of screen occupied by master pane
        ratio =
          toRational (2 / (1 + sqrt 5 :: Double))
        -- Percent of screen to increment by when resizing panes
        delta = 5 / 100
        -- tab is tabbed
        tab =
          tabbed shrinkText (theme smallClean)
        -- full is Full
        full =
          (fullscreenFloat . fullscreenFull) Full
        -- mtiled is mirrortiled
        mtiled = Mirror tiled

this gives me borders only on layouts with more than one window. Plus applications in fulscreen floating window without borders. This also works nicely with xmobar statusbar.

1

To remove the border you need to set borderWidth = 0.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.