commit 94120dde27f32eff0024f74d66c241670592b222 Author: Maximilian Keßler Date: Sat Jul 16 13:42:29 2022 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a5b475 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.stack-work/ diff --git a/Setup.lhs b/Setup.lhs new file mode 100644 index 0000000..5bde0de --- /dev/null +++ b/Setup.lhs @@ -0,0 +1,3 @@ +#!/usr/bin/env runhaskell +> import Distribution.Simple +> main = defaultMain diff --git a/src/XMonad/Custom/BasicKeyBindings.hs b/src/XMonad/Custom/BasicKeyBindings.hs new file mode 100644 index 0000000..d0733d1 --- /dev/null +++ b/src/XMonad/Custom/BasicKeyBindings.hs @@ -0,0 +1,64 @@ +module XMonad.Custom.BasicKeyBindings (myBasicKeyBindings) where + +import System.Exit + +import XMonad +import qualified XMonad.StackSet as W + +import XMonad.Custom.BindingUtils + +myBasicKeyBindings :: [([Char], X ())] +myBasicKeyBindings = addMainModifierToBinding $ myFocusBindings ++ mySwapBindings ++ myMasterBindings ++ myXMonadBindings ++ myLaunchBindings + +myLaunchBindings :: [([Char], X ())] +myLaunchBindings = [ + ("", spawn "kitty"), + ("r", spawn "dmenu_run"), + ("S-r", spawn "gmrun"), + ("x", kill), + ("S-x", kill) + ] + +myFocusBindings :: [([Char], X ())] +myFocusBindings = addWindowsToBinding $ [ + ("n", W.focusUp), + ("d", W.focusDown), + ("", W.focusUp), + ("", W.focusDown), + ("m", W.focusMaster), + ("", W.focusDown), + ("S-", W.focusUp) + ] + +mySwapBindings :: [([Char], X ())] +mySwapBindings = addShiftToBinding . addWindowsToBinding $ [ + ("n", W.swapUp), + ("d", W.swapDown), + ("", W.swapUp), + ("", W.swapDown), + ("m", W.swapMaster) + ] + +myMasterBindings :: [([Char], X ())] +myMasterBindings = [ + (",", incMasterWindows), + (".", decMasterWindows) + ] ++ (addShiftToBinding $ [ + (",", expandMasterSpace), + (".", shrinkMasterSpace) + ]) + where + incMasterWindows = adjMasterWindows 1 + decMasterWindows = adjMasterWindows (-1) + adjMasterWindows n = sendMessage (IncMasterN n) + expandMasterSpace = sendMessage Expand + shrinkMasterSpace = sendMessage Shrink + +myXMonadBindings :: [([Char], X ())] +myXMonadBindings = [ + ("q", restartXMonad), + ("S-q", quitXMonad) + ] + where + restartXMonad = spawn "if type xmonad; then xmonad --recompile && xmonad --restart; else xmessage xmonad not in \\$PATH: \"$PATH\"; fi" + quitXMonad = io exitSuccess diff --git a/src/XMonad/Custom/BindingUtils.hs b/src/XMonad/Custom/BindingUtils.hs new file mode 100644 index 0000000..7be42f9 --- /dev/null +++ b/src/XMonad/Custom/BindingUtils.hs @@ -0,0 +1,20 @@ +module XMonad.Custom.BindingUtils where + +import GHC.Utils.Misc + +import XMonad + +addWindowsToBinding :: [(a, WindowSet -> WindowSet)] -> [(a, X ())] +addWindowsToBinding = mapSnd $ \action -> windows action + +addShiftToBinding :: [([Char], b)] -> [([Char], b)] +addShiftToBinding = addModifierToBinding "S" + +addMainModifierToBinding :: [([Char], b)] -> [([Char], b)] +addMainModifierToBinding = addModifierToBinding "M" + +addModifierToBinding :: [Char] -> [([Char], b)] -> [([Char], b)] +addModifierToBinding modifier = mapFst $ \key -> modifier ++ "-" ++ key + +addSubMapKey :: [Char] -> [([Char], b)] -> [([Char], b)] +addSubMapKey key = mapFst $ \subkey -> key ++ " " ++ subkey diff --git a/src/XMonad/Custom/UniversitySetup.hs b/src/XMonad/Custom/UniversitySetup.hs new file mode 100644 index 0000000..14d7353 --- /dev/null +++ b/src/XMonad/Custom/UniversitySetup.hs @@ -0,0 +1,84 @@ +module XMonad.Custom.UniversitySetup (myUniversitySetupKeyBindings) where + +import XMonad + +import GHC.Utils.Misc -- for MapFst, MapSnd + +import XMonad.Custom.BindingUtils + +scriptDir :: String +scriptDir = "/home/maximilian/Uni/scripts" + +myUniversitySetupKeyBindings :: [(String, X ())] +myUniversitySetupKeyBindings = addMainModifierToBinding . (addSubMapKey myUniversityKey) $ concat myUniversitySetupKeyBindingsRaw + where + myUniversityKey = "u" + +myUniversitySetupKeyBindingsRaw :: [[(String, X ())]] +myUniversitySetupKeyBindingsRaw = + map addUniversitySetupScript [ -- prepend scriptPath + myMainBindingsScriptNames, + addSubMapKey myExerciseOpenKey myExerciseOpenScriptNames -- add to exercises submap + ] + ++ + zipWith addUniversitySetupScriptArg [myCourseOpenScript, myExerciseOpenScript] -- prepend (fixed) open scripts and forward selected argument + [ + addSubMapKey myCourseOpenKey myCourseOpenArguments, -- add to course open submap + addSubMapKey myExerciseOpenKey myExerciseOpenArguments -- add to exercises submap + ] + where + myCourseOpenKey = "o" + myExerciseOpenKey = "e" + myCourseOpenScript = "open" + myExerciseOpenScript = "rofi-exercises" + +addUniversitySetupScript :: [(a, String)] -> [(a, X ())] +addUniversitySetupScript = mapSnd universitySetupScript + +addUniversitySetupScriptArg :: String -> [(a, String)] -> [(a, X ())] +addUniversitySetupScriptArg script = mapSnd (universitySetupScriptArg script) + +universitySetupScript :: String -> X() +universitySetupScript filename = spawn $ scriptDir ++ "/" ++ filename ++ ".py" + +universitySetupScriptArg :: String -> String -> X() +universitySetupScriptArg filename arg = spawn $ scriptDir ++ "/" ++ filename ++ ".py " ++ arg + + +-- Bindings after M-, listing executed script name +myMainBindingsScriptNames :: [(String, String)] +myMainBindingsScriptNames = [ + ("c", "rofi-courses"), + ("l", "rofi-lectures"), + ("v", "rofi-lectures-view"), + ("n", "new-lecture"), + ("m", "compile_all_full_versions") + ] + +-- Bindings after M- , listing argument given to +myCourseOpenArguments :: [(String, String)] +myCourseOpenArguments = [ + ("m", "master"), + ("f", "full"), + ("w", "webpage"), + ("e", "ecampus"), + ("s", "sciebo"), + ("g", "github"), + ("b", "basis"), + ("t", "terminal") + ] + +-- Bindings after M- , listing argument given to +myExerciseOpenArguments :: [(String, String)] +myExerciseOpenArguments = [ + ("s", "solution"), + ("i", "sheet"), + ("w", "writeup"), + ("e", "writeup") + ] + +-- Bindings after M- , listing executed script name +myExerciseOpenScriptNames :: [(String, String)] +myExerciseOpenScriptNames = [ + ("n", "new-writeup") + ] diff --git a/xmonad-custom.cabal b/xmonad-custom.cabal new file mode 100644 index 0000000..eb8e8fb --- /dev/null +++ b/xmonad-custom.cabal @@ -0,0 +1,18 @@ +name: xmonad-custom +version: 1.0 +cabal-version: 1.12 + +flag pedantic + description: Be pedantic (-Werror and the like) + default: False + manual: True + +library + exposed-modules: XMonad.Custom.UniversitySetup + XMonad.Custom.BasicKeyBindings + XMonad.Custom.BindingUtils + hs-source-dirs: src + ghc-options: -funbox-strict-fields -Wall -Wno-unused-do-bind + build-depends: base + , xmonad + , ghc