diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 880172c..74b25bc 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -1,12 +1,12 @@ { config, lib, pkgs, ... }: let cfg = config.modules.desktop; in { - imports = [ ./apps ./bspwm ./gtk.nix ]; + imports = [ ./apps ./bspwm ./gtk.nix ./xmonad ]; options.modules.desktop = { name = lib.mkOption { default = "bspwm"; - type = lib.types.enum [ "bspwm" ]; + type = lib.types.enum [ "bspwm" "xmonad" ]; }; }; diff --git a/modules/desktop/xmonad/default.nix b/modules/desktop/xmonad/default.nix new file mode 100644 index 0000000..7ad9965 --- /dev/null +++ b/modules/desktop/xmonad/default.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ... }: + +let cfg = config.modules.desktop; +in { + config = lib.mkIf (cfg.name == "xmonad") { + services = { + xserver = { + enable = true; + layout = "de"; + + displayManager = { + defaultSession = "none+xmonad"; + autoLogin = { + enable = true; + user = "moritz"; + }; + lightdm.enable = true; + }; + windowManager.xmonad.enable = true; + }; + }; + console.keyMap = "de"; + home-manager.users.moritz = let + xmonadPackages = haskellPackages: [ + haskellPackages.xmonad-contrib + haskellPackages.xmonad-extras + haskellPackages.xmonad + haskellPackages.xmobar + ]; + in { + xsession.windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + config = ./xmonad.hs; + # extraPackages = xmonadPackages; + }; + programs.xmobar.enable = true; + }; + }; +} diff --git a/modules/desktop/xmonad/xmonad.hs b/modules/desktop/xmonad/xmonad.hs new file mode 100644 index 0000000..5c27ff3 --- /dev/null +++ b/modules/desktop/xmonad/xmonad.hs @@ -0,0 +1,39 @@ +import XMonad + ( Choose, + Default (def), + Full, + KeyMask, + Mirror, + Tall, + X, + XConfig (modMask, terminal), + mod4Mask, + spawn, + xmonad, + ) +import XMonad.Hooks.EwmhDesktops (ewmh) +import XMonad.Util.EZConfig (additionalKeysP) + +myModMask :: KeyMask +myModMask = mod4Mask + +myTerminal :: String +myTerminal = "kitty" + +myKeys :: [(String, X ())] +myKeys = + [ ("M-d", spawn "rofi -show combi"), + ("M-e", spawn "emacsclient -c -a emacs"), + ("M-f", spawn "firefox") + ] + +myConfig :: (XConfig (Choose Tall (Choose (Mirror Tall) Full))) +myConfig = + def + { modMask = myModMask, + terminal = myTerminal + } + `additionalKeysP` myKeys + +main :: IO () +main = xmonad $ ewmh $ ewmhFullscreen myConfig