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.6 kB 244 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.Prompt.Window (windowPromptGoto, windowPromptBringCopy) 56import XMonad.Util.EZConfig (additionalKeysP) 57import XMonad.Util.NamedWindows (getName) 58import XMonad.Util.Run (safeSpawn) 59import XMonad.Util.Ungrab (unGrab) 60import XMonad.Util.Paste (sendKey) 61 62data LibNotifyUrgencyHook = LibNotifyUrgencyHook deriving (Read, Show) 63 64instance UrgencyHook LibNotifyUrgencyHook where 65 urgencyHook LibNotifyUrgencyHook w = do 66 name <- getName w 67 Just idx <- fmap (W.findTag w) $ gets windowset 68 69 safeSpawn "${pkgs.libnotify}/bin/notify-send" [show name, "workspace " ++ idx] 70 71myTerm :: FilePath 72myTerm = "/run/current-system/sw/bin/alacritty" 73 74myFont :: String 75myFont = "${config.lass.fonts.regular}" 76 77main :: IO () 78main = do 79 xmonad $ ewmh 80 $ withUrgencyHook LibNotifyUrgencyHook 81 $ def 82 { terminal = myTerm 83 , modMask = mod4Mask 84 , layoutHook = myLayoutHook 85 , manageHook = floatHooks 86 , startupHook = 87 whenJustM (liftIO (lookupEnv "XMONAD_STARTUP_HOOK")) 88 (\path -> forkFile path [] Nothing) 89 , normalBorderColor = "#1c1c1c" 90 , focusedBorderColor = "#ff0000" 91 , workspaces = [ "dashboard", "sys", "wp" ] 92 } `additionalKeysP` myKeyMap 93 94myLayoutHook = defLayout 95 where 96 defLayout = smartBorders $ 97 minimize . 98 boringWindows $ 99 ( 100 noBorders StateFull ||| 101 (avoidStruts $ Mirror (Tall 1 (3/100) (1/2))) ||| 102 FixedColumn 2 80 80 1 ||| 103 Tall 1 (3/100) (1/2) ||| 104 simplestFloat ||| 105 mouseResizableTile ||| 106 Grid 107 ) 108 109floatHooks = composeAll 110 [ className =? "Pinentry" --> doCenterFloat 111 , className =? "Pager" --> doCenterFloat 112 , title =? "pager" --> doCenterFloat 113 , title =? "fzfmenu" --> doCenterFloat 114 , title =? "glxgears" --> doCenterFloat 115 , resource =? "Dialog" --> doFloat 116 , title =? "Upload to Imgur" --> 117 doRectFloat (W.RationalRect 0 0 (1 % 8) (1 % 8)) 118 , placeHook (smart (1,0)) 119 , floatNextHook 120 ] 121 122myKeyMap :: [([Char], X ())] 123myKeyMap = 124 [ ("M4-p", forkFile "${pkgs.writers.writeDash "passmenu-wrapped" '' 125 set -efux 126 export TERM=dumb 127 ${pkgs.pass}/bin/passmenu --type 128 ''}" [] Nothing) 129 130 , ("M4-S-p", forkFile "${self.packages.${pkgs.system}.otpmenu}/bin/otpmenu" [] Nothing) 131 , ("M4-z", forkFile "${pkgs.unimenu}/bin/unimenu" [] Nothing) 132 133 , ("M4-S-q", restart "xmonad" True) 134 135 , ("<XF86AudioMute>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-mute @DEFAULT_SINK@ toggle") 136 , ("<XF86AudioRaiseVolume>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ +4%") 137 , ("<XF86AudioLowerVolume>", spawn "${pkgs.pulseaudio.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ -4%") 138 , ("<XF86MonBrightnessDown>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -dec 1") 139 , ("<XF86MonBrightnessUp>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -inc 1") 140 , ("M4-C-k", spawn "${pkgs.xorg.xkill}/bin/xkill") 141 142 , ("M4-<Tab>", focusDown) 143 , ("M4-S-<Tab>", focusUp) 144 , ("M4-j", focusDown) 145 , ("M4-k", focusUp) 146 147 , ("M4-a", focusUrgent) 148 , ("M4-S-r", renameWorkspace myXPConfig) 149 , ("M4-S-a", addWorkspacePrompt myXPConfig) 150 , ("M4-S-<Backspace>", removeEmptyWorkspace) 151 , ("M4-S-c", kill1) 152 , ("M4-<Esc>", toggleWS) 153 , ("M4-S-<Enter>", spawn myTerm) 154 , ("M4-x", floatNext True >> spawn myTerm) 155 , ("M4-c", spawn "/run/current-system/sw/bin/emacsclient -c") 156 -- , ("M4-c", unGrab) 157 , ("M4-f", floatNext True) 158 , ("M4-b", spawn "/run/current-system/sw/bin/klem") 159 160 , ("M4-c", defaultCommands >>= runCommand) 161 -- , ("M4-v", spawn "${pkgs.pager}/bin/pager view") 162 -- , ("M4-S-v", spawn "${pkgs.pager}/bin/pager shift") 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-q", windowPromptGoto infixAutoXPConfig) 171 , ("M4-C-q", windowPromptBringCopy infixAutoXPConfig) 172 173 , ("M4-S-q", return ()) 174 175 , ("M4-d", floatNext True >> spawn "${pkgs.writers.writeDash "clipmenu" '' 176 PATH=${lib.makeBinPath [ 177 pkgs.coreutils 178 pkgs.gawk 179 pkgs.dmenu 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-<F4>", spawn "${pkgs.nm-dmenu}/bin/nm-dmenu") 192 , ("M4-<F5>", spawn "${pkgs.acpilight}/bin/xbacklight -set 1") 193 , ("M4-<F6>", spawn "${pkgs.acpilight}/bin/xbacklight -set 10") 194 , ("M4-<F7>", spawn "${pkgs.acpilight}/bin/xbacklight -set 33") 195 , ("M4-<F8>", spawn "${pkgs.acpilight}/bin/xbacklight -set 100") 196 197 , ("M4-<F9>", spawn "${pkgs.redshift}/bin/redshift -O 4000 -g 0.9:0.8:0.8") 198 , ("M4-<F10>", spawn "${pkgs.redshift}/bin/redshift -x") 199 200 , ("M4-<F11>", spawn "${config.lass.screenlock.command}") 201 202 , ("M4-u", spawn "${pkgs.xcalib}/bin/xcalib -invert -alter") 203 , ("M4-y", spawn "/run/current-system/sw/bin/switch-theme toggle") 204 205 ${lib.optionalString (builtins.hasAttr "warpd" pkgs) '', ("M4-s", spawn "${pkgs.warpd}/bin/warpd --hint")''} 206 , ("M4-i", spawn "/run/current-system/sw/bin/screenshot") 207 208 --, ("M4-w", screenWorkspace 0 >>= (windows . W.greedyView)) 209 --, ("M4-e", screenWorkspace 1 >>= (windows . W.greedyView)) 210 --, ("M4-r", screenWorkspace 2 >>= (windows . W.greedyView)) 211 ] 212 213forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X () 214forkFile path args env = 215 xfork (executeFile path True args env) >> return () 216 217myXPConfig :: XPConfig 218myXPConfig = def 219 { font = myFont 220 , height = 40 221 } 222 223autoXPConfig :: XPConfig 224autoXPConfig = myXPConfig 225 { autoComplete = Just 5000 226 } 227 228infixAutoXPConfig :: XPConfig 229infixAutoXPConfig = autoXPConfig 230 { searchPredicate = isInfixOf 231 } 232 233gridConfig :: GSConfig WorkspaceId 234gridConfig = def 235 { gs_cellwidth = 100 236 , gs_cellheight = 30 237 , gs_cellpadding = 2 238 , gs_navigate = navNSearch 239 , gs_font = myFont 240 } 241 242 ''; 243 }; 244}