This repository has no description
0

Configure Feed

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

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