This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

superconfig / configs / desktops / xmonad / default.nix
9.6 kB 242 lines
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7 8{ 9 imports = [ 10 ../lib/x11.nix 11 ]; 12 services.xserver.windowManager.xmonad = { 13 enable = true; 14 extraPackages = hs: [ 15 hs.extra 16 hs.xmonad-contrib 17 ]; 18 config = # haskell 19 '' 20 {-# LANGUAGE LambdaCase #-} 21 22 23 module Main where 24 import XMonad 25 26 import qualified XMonad.StackSet as W 27 import Control.Monad.Extra (whenJustM) 28 import Data.List (isInfixOf) 29 import Data.Monoid (Endo) 30 import System.Environment (getArgs, lookupEnv) 31 import System.Exit (exitFailure) 32 import System.IO (hPutStrLn, stderr) 33 import System.Posix.Process (executeFile) 34 import Data.Ratio 35 36 import XMonad.Actions.Commands (defaultCommands, runCommand) 37 import XMonad.Actions.CopyWindow (copy, copyToAll, kill1) 38 import XMonad.Actions.CycleWS (toggleWS) 39 import XMonad.Actions.DynamicWorkspaces ( addWorkspacePrompt, renameWorkspace, removeEmptyWorkspace) 40 import XMonad.Actions.DynamicWorkspaces (withWorkspace) 41 import XMonad.Actions.GridSelect (GSConfig(..), gridselectWorkspace, navNSearch) 42 import XMonad.Actions.Minimize (minimizeWindow, maximizeWindow, withLastMinimized) 43 import XMonad.Hooks.EwmhDesktops (ewmh) 44 import XMonad.Hooks.FloatNext (floatNext) 45 import XMonad.Hooks.FloatNext (floatNextHook) 46 import XMonad.Hooks.ManageDocks (avoidStruts, ToggleStruts(ToggleStruts)) 47 import XMonad.Hooks.ManageHelpers (doCenterFloat, doRectFloat, (-?>)) 48 import XMonad.Hooks.Place (placeHook, smart) 49 import XMonad.Hooks.UrgencyHook (focusUrgent) 50 import XMonad.Hooks.UrgencyHook (withUrgencyHook, UrgencyHook(..)) 51 import XMonad.Layout.BoringWindows (boringWindows, focusDown, focusUp) 52 import XMonad.Layout.FixedColumn (FixedColumn(..)) 53 import XMonad.Layout.Grid (Grid(..)) 54 import XMonad.Layout.Minimize (minimize) 55 import XMonad.Layout.NoBorders (smartBorders, noBorders) 56 import XMonad.Layout.MouseResizableTile (mouseResizableTile) 57 import XMonad.Layout.SimplestFloat (simplestFloat) 58 import XMonad.Layout.StateFull 59 import XMonad.ManageHook (composeAll) 60 import XMonad.Prompt (autoComplete, font, height, searchPredicate, XPConfig) 61 import XMonad.Util.EZConfig (additionalKeysP) 62 import XMonad.Util.NamedWindows (getName) 63 import XMonad.Util.Run (safeSpawn) 64 import XMonad.Util.Ungrab (unGrab) 65 import XMonad.Util.Paste (sendKey) 66 67 data LibNotifyUrgencyHook = LibNotifyUrgencyHook deriving (Read, Show) 68 69 instance UrgencyHook LibNotifyUrgencyHook where 70 urgencyHook LibNotifyUrgencyHook w = do 71 name <- getName w 72 Just idx <- fmap (W.findTag w) $ gets windowset 73 74 safeSpawn "${pkgs.libnotify}/bin/notify-send" [show name, "workspace " ++ idx] 75 76 myTerm :: FilePath 77 myTerm = "/run/current-system/sw/bin/alacritty" 78 79 myFont :: String 80 myFont = "${config.lass.fonts.regular}" 81 82 main :: IO () 83 main = do 84 xmonad $ ewmh 85 $ withUrgencyHook LibNotifyUrgencyHook 86 $ def 87 { terminal = myTerm 88 , modMask = mod4Mask 89 , layoutHook = myLayoutHook 90 , manageHook = floatHooks 91 , startupHook = 92 whenJustM (liftIO (lookupEnv "XMONAD_STARTUP_HOOK")) 93 (\path -> forkFile path [] Nothing) 94 , normalBorderColor = "#1c1c1c" 95 , focusedBorderColor = "#ff0000" 96 , workspaces = [ "dashboard", "sys", "wp" ] 97 } `additionalKeysP` myKeyMap 98 99 myLayoutHook = defLayout 100 where 101 defLayout = smartBorders $ 102 minimize . 103 boringWindows $ 104 ( 105 noBorders StateFull ||| 106 (avoidStruts $ Mirror (Tall 1 (3/100) (1/2))) ||| 107 FixedColumn 2 80 80 1 ||| 108 Tall 1 (3/100) (1/2) ||| 109 simplestFloat ||| 110 mouseResizableTile ||| 111 Grid 112 ) 113 114 floatHooks = composeAll 115 [ className =? "Pinentry" --> doCenterFloat 116 , className =? "Pager" --> doCenterFloat 117 , title =? "pager" --> doCenterFloat 118 , title =? "fzfmenu" --> doCenterFloat 119 , title =? "glxgears" --> doCenterFloat 120 , resource =? "Dialog" --> doFloat 121 , title =? "Upload to Imgur" --> 122 doRectFloat (W.RationalRect 0 0 (1 % 8) (1 % 8)) 123 , placeHook (smart (1,0)) 124 , floatNextHook 125 ] 126 127 myKeyMap :: [([Char], X ())] 128 myKeyMap = 129 [ ("M4-p", forkFile "${pkgs.writers.writeDashBin "passmenu" '' 130 set -efux 131 export TERM=dumb 132 ${pkgs.pass}/bin/passmenu --type 133 ''}" [] Nothing) 134 135 , ("M4-S-q", restart "xmonad" True) 136 137 , ("<XF86AudioMute>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-mute @DEFAULT_SINK@ toggle") 138 , ("<XF86AudioRaiseVolume>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ +4%") 139 , ("<XF86AudioLowerVolume>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ -4%") 140 , ("<XF86MonBrightnessDown>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -dec 1") 141 , ("<XF86MonBrightnessUp>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -inc 1") 142 , ("M4-C-k", spawn "${pkgs.xorg.xkill}/bin/xkill") 143 144 , ("M4-<Tab>", focusDown) 145 , ("M4-S-<Tab>", focusUp) 146 , ("M4-j", focusDown) 147 , ("M4-k", focusUp) 148 149 , ("M4-a", focusUrgent) 150 , ("M4-S-r", renameWorkspace myXPConfig) 151 , ("M4-S-a", addWorkspacePrompt myXPConfig) 152 , ("M4-S-<Backspace>", removeEmptyWorkspace) 153 , ("M4-S-c", kill1) 154 , ("M4-<Esc>", toggleWS) 155 , ("M4-S-<Enter>", spawn myTerm) 156 , ("M4-x", floatNext True >> spawn myTerm) 157 , ("M4-c", spawn "/run/current-system/sw/bin/emacsclient -c") 158 -- , ("M4-c", unGrab) 159 , ("M4-f", floatNext True) 160 , ("M4-b", spawn "/run/current-system/sw/bin/klem") 161 162 , ("M4-c", defaultCommands >>= runCommand) 163 , ("M4-v", withWorkspace autoXPConfig (windows . W.greedyView)) 164 , ("M4-S-v", withWorkspace autoXPConfig (windows . W.shift)) 165 , ("M4-C-v", withWorkspace autoXPConfig (windows . copy)) 166 167 , ("M4-m", withFocused minimizeWindow) 168 , ("M4-S-m", withLastMinimized maximizeWindow) 169 170 , ("M4-S-q", return ()) 171 172 , ("M4-d", floatNext True >> spawn "${pkgs.writers.writeDash "clipmenu" '' 173 PATH=${ 174 lib.makeBinPath [ 175 pkgs.coreutils 176 pkgs.gawk 177 pkgs.dmenu 178 ] 179 } 180 ${pkgs.clipmenu}/bin/clipmenu 181 ''}") 182 183 , ("M4-<Insert>", spawn "${pkgs.writers.writeDash "paste" '' 184 ${pkgs.coreutils}/bin/sleep 0.4 185 ${pkgs.xclip}/bin/xclip -o | ${pkgs.xdotool}/bin/xdotool type -f - 186 ''}") 187 188 , ("M4-<F1>", spawn "/run/current-system/sw/bin/gamepad_mouse_toggle") 189 , ("M4-<F2>", windows copyToAll) 190 , ("M4-<F5>", spawn "${pkgs.acpilight}/bin/xbacklight -set 1") 191 , ("M4-<F6>", spawn "${pkgs.acpilight}/bin/xbacklight -set 10") 192 , ("M4-<F7>", spawn "${pkgs.acpilight}/bin/xbacklight -set 33") 193 , ("M4-<F8>", spawn "${pkgs.acpilight}/bin/xbacklight -set 100") 194 195 , ("M4-<F9>", spawn "${pkgs.redshift}/bin/redshift -O 4000 -g 0.9:0.8:0.8") 196 , ("M4-<F10>", spawn "${pkgs.redshift}/bin/redshift -x") 197 198 , ("M4-<F11>", spawn "${config.lass.screenlock.command}") 199 200 , ("M4-u", spawn "${pkgs.xcalib}/bin/xcalib -invert -alter") 201 , ("M4-y", spawn "/run/current-system/sw/bin/switch-theme toggle") 202 203 ${lib.optionalString (builtins.hasAttr "warpd" pkgs) '', ("M4-s", spawn "${pkgs.warpd}/bin/warpd --hint")''} 204 , ("M4-i", spawn "/run/current-system/sw/bin/screenshot") 205 206 --, ("M4-w", screenWorkspace 0 >>= (windows . W.greedyView)) 207 --, ("M4-e", screenWorkspace 1 >>= (windows . W.greedyView)) 208 --, ("M4-r", screenWorkspace 2 >>= (windows . W.greedyView)) 209 ] 210 211 forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X () 212 forkFile path args env = 213 xfork (executeFile path True args env) >> return () 214 215 myXPConfig :: XPConfig 216 myXPConfig = def 217 { font = myFont 218 , height = 40 219 } 220 221 autoXPConfig :: XPConfig 222 autoXPConfig = myXPConfig 223 { autoComplete = Just 5000 224 } 225 226 infixAutoXPConfig :: XPConfig 227 infixAutoXPConfig = autoXPConfig 228 { searchPredicate = isInfixOf 229 } 230 231 gridConfig :: GSConfig WorkspaceId 232 gridConfig = def 233 { gs_cellwidth = 100 234 , gs_cellheight = 30 235 , gs_cellpadding = 2 236 , gs_navigate = navNSearch 237 , gs_font = myFont 238 } 239 240 ''; 241 }; 242}