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