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.5 kB 241 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 161 , ("M4-c", defaultCommands >>= runCommand) 162 , ("M4-v", withWorkspace autoXPConfig (windows . W.greedyView)) 163 , ("M4-S-v", withWorkspace autoXPConfig (windows . W.shift)) 164 , ("M4-C-v", withWorkspace autoXPConfig (windows . copy)) 165 166 , ("M4-m", withFocused minimizeWindow) 167 , ("M4-S-m", withLastMinimized maximizeWindow) 168 169 , ("M4-S-q", return ()) 170 171 , ("M4-d", floatNext True >> spawn "${pkgs.writers.writeDash "clipmenu" '' 172 PATH=${ 173 lib.makeBinPath [ 174 pkgs.coreutils 175 pkgs.gawk 176 pkgs.dmenu 177 ] 178 } 179 ${pkgs.clipmenu}/bin/clipmenu 180 ''}") 181 182 , ("M4-<Insert>", spawn "${pkgs.writers.writeDash "paste" '' 183 ${pkgs.coreutils}/bin/sleep 0.4 184 ${pkgs.xclip}/bin/xclip -o | ${pkgs.xdotool}/bin/xdotool type -f - 185 ''}") 186 187 , ("M4-<F1>", spawn "/run/current-system/sw/bin/gamepad_mouse_toggle") 188 , ("M4-<F2>", windows copyToAll) 189 , ("M4-<F5>", spawn "${pkgs.acpilight}/bin/xbacklight -set 1") 190 , ("M4-<F6>", spawn "${pkgs.acpilight}/bin/xbacklight -set 10") 191 , ("M4-<F7>", spawn "${pkgs.acpilight}/bin/xbacklight -set 33") 192 , ("M4-<F8>", spawn "${pkgs.acpilight}/bin/xbacklight -set 100") 193 194 , ("M4-<F9>", spawn "${pkgs.redshift}/bin/redshift -O 4000 -g 0.9:0.8:0.8") 195 , ("M4-<F10>", spawn "${pkgs.redshift}/bin/redshift -x") 196 197 , ("M4-<F11>", spawn "${config.lass.screenlock.command}") 198 199 , ("M4-u", spawn "${pkgs.xcalib}/bin/xcalib -invert -alter") 200 , ("M4-y", spawn "/run/current-system/sw/bin/switch-theme toggle") 201 202 ${lib.optionalString (builtins.hasAttr "warpd" pkgs) '', ("M4-s", spawn "${pkgs.warpd}/bin/warpd --hint")''} 203 , ("M4-i", spawn "/run/current-system/sw/bin/screenshot") 204 205 --, ("M4-w", screenWorkspace 0 >>= (windows . W.greedyView)) 206 --, ("M4-e", screenWorkspace 1 >>= (windows . W.greedyView)) 207 --, ("M4-r", screenWorkspace 2 >>= (windows . W.greedyView)) 208 ] 209 210 forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X () 211 forkFile path args env = 212 xfork (executeFile path True args env) >> return () 213 214 myXPConfig :: XPConfig 215 myXPConfig = def 216 { font = myFont 217 , height = 40 218 } 219 220 autoXPConfig :: XPConfig 221 autoXPConfig = myXPConfig 222 { autoComplete = Just 5000 223 } 224 225 infixAutoXPConfig :: XPConfig 226 infixAutoXPConfig = autoXPConfig 227 { searchPredicate = isInfixOf 228 } 229 230 gridConfig :: GSConfig WorkspaceId 231 gridConfig = def 232 { gs_cellwidth = 100 233 , gs_cellheight = 30 234 , gs_cellpadding = 2 235 , gs_navigate = navNSearch 236 , gs_font = myFont 237 } 238 239 ''; 240 }; 241}