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.7 kB 245 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.writeDash "passmenu-wrapped" '' 131 set -efux 132 export TERM=dumb 133 ${pkgs.pass}/bin/passmenu --type 134 ''}" [] Nothing) 135 136 , ("M4-S-p", forkFile "${self.packages.${pkgs.system}.otpmenu}/bin/otpmenu" [] Nothing) 137 138 , ("M4-S-q", restart "xmonad" True) 139 140 , ("<XF86AudioMute>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-mute @DEFAULT_SINK@ toggle") 141 , ("<XF86AudioRaiseVolume>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ +4%") 142 , ("<XF86AudioLowerVolume>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ -4%") 143 , ("<XF86MonBrightnessDown>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -dec 1") 144 , ("<XF86MonBrightnessUp>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -inc 1") 145 , ("M4-C-k", spawn "${pkgs.xorg.xkill}/bin/xkill") 146 147 , ("M4-<Tab>", focusDown) 148 , ("M4-S-<Tab>", focusUp) 149 , ("M4-j", focusDown) 150 , ("M4-k", focusUp) 151 152 , ("M4-a", focusUrgent) 153 , ("M4-S-r", renameWorkspace myXPConfig) 154 , ("M4-S-a", addWorkspacePrompt myXPConfig) 155 , ("M4-S-<Backspace>", removeEmptyWorkspace) 156 , ("M4-S-c", kill1) 157 , ("M4-<Esc>", toggleWS) 158 , ("M4-S-<Enter>", spawn myTerm) 159 , ("M4-x", floatNext True >> spawn myTerm) 160 , ("M4-c", spawn "/run/current-system/sw/bin/emacsclient -c") 161 -- , ("M4-c", unGrab) 162 , ("M4-f", floatNext True) 163 , ("M4-b", spawn "/run/current-system/sw/bin/klem") 164 165 , ("M4-c", defaultCommands >>= runCommand) 166 , ("M4-v", withWorkspace autoXPConfig (windows . W.greedyView)) 167 , ("M4-S-v", withWorkspace autoXPConfig (windows . W.shift)) 168 , ("M4-C-v", withWorkspace autoXPConfig (windows . copy)) 169 170 , ("M4-m", withFocused minimizeWindow) 171 , ("M4-S-m", withLastMinimized maximizeWindow) 172 173 , ("M4-S-q", return ()) 174 175 , ("M4-d", floatNext True >> spawn "${pkgs.writers.writeDash "clipmenu" '' 176 PATH=${ 177 lib.makeBinPath [ 178 pkgs.coreutils 179 pkgs.gawk 180 pkgs.dmenu 181 ] 182 } 183 ${pkgs.clipmenu}/bin/clipmenu 184 ''}") 185 186 , ("M4-<Insert>", spawn "${pkgs.writers.writeDash "paste" '' 187 ${pkgs.coreutils}/bin/sleep 0.4 188 ${pkgs.xclip}/bin/xclip -o | ${pkgs.xdotool}/bin/xdotool type -f - 189 ''}") 190 191 , ("M4-<F1>", spawn "/run/current-system/sw/bin/gamepad_mouse_toggle") 192 , ("M4-<F2>", windows copyToAll) 193 , ("M4-<F5>", spawn "${pkgs.acpilight}/bin/xbacklight -set 1") 194 , ("M4-<F6>", spawn "${pkgs.acpilight}/bin/xbacklight -set 10") 195 , ("M4-<F7>", spawn "${pkgs.acpilight}/bin/xbacklight -set 33") 196 , ("M4-<F8>", spawn "${pkgs.acpilight}/bin/xbacklight -set 100") 197 198 , ("M4-<F9>", spawn "${pkgs.redshift}/bin/redshift -O 4000 -g 0.9:0.8:0.8") 199 , ("M4-<F10>", spawn "${pkgs.redshift}/bin/redshift -x") 200 201 , ("M4-<F11>", spawn "${config.lass.screenlock.command}") 202 203 , ("M4-u", spawn "${pkgs.xcalib}/bin/xcalib -invert -alter") 204 , ("M4-y", spawn "/run/current-system/sw/bin/switch-theme toggle") 205 206 ${lib.optionalString (builtins.hasAttr "warpd" pkgs) '', ("M4-s", spawn "${pkgs.warpd}/bin/warpd --hint")''} 207 , ("M4-i", spawn "/run/current-system/sw/bin/screenshot") 208 209 --, ("M4-w", screenWorkspace 0 >>= (windows . W.greedyView)) 210 --, ("M4-e", screenWorkspace 1 >>= (windows . W.greedyView)) 211 --, ("M4-r", screenWorkspace 2 >>= (windows . W.greedyView)) 212 ] 213 214 forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X () 215 forkFile path args env = 216 xfork (executeFile path True args env) >> return () 217 218 myXPConfig :: XPConfig 219 myXPConfig = def 220 { font = myFont 221 , height = 40 222 } 223 224 autoXPConfig :: XPConfig 225 autoXPConfig = myXPConfig 226 { autoComplete = Just 5000 227 } 228 229 infixAutoXPConfig :: XPConfig 230 infixAutoXPConfig = autoXPConfig 231 { searchPredicate = isInfixOf 232 } 233 234 gridConfig :: GSConfig WorkspaceId 235 gridConfig = def 236 { gs_cellwidth = 100 237 , gs_cellheight = 30 238 , gs_cellpadding = 2 239 , gs_navigate = navNSearch 240 , gs_font = myFont 241 } 242 243 ''; 244 }; 245}