This repository has no description
0

Configure Feed

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

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