diff --git a/machines/stel-xps/default.nix b/machines/stel-xps/default.nix index 29e8050..8ab4355 100644 --- a/machines/stel-xps/default.nix +++ b/machines/stel-xps/default.nix @@ -27,7 +27,8 @@ enable = true; sway.enable = false; i3.enable = false; - plasma.enable = true; + plasma.enable = false; + xmonad.enable = true; # set dpi if used in mobile applications # dpi = 180; }; diff --git a/modules/emacs/default.el b/modules/emacs/default.el index 4f0c0ff..cc3000b 100644 --- a/modules/emacs/default.el +++ b/modules/emacs/default.el @@ -571,6 +571,26 @@ (use-package lsp-ui) +;; haskell +(use-package haskell-mode + :diminish subword-mode + :hook + (haskell-mode . turn-on-haskell-doc) + (haskell-mode . subword-mode)) +(use-package haskell + :ensure haskell-mode) +(use-package haskell-font-lock + :ensure haskell-mode) +(use-package lsp-haskell + :if die-orga/workstation + :demand t) +(use-package shakespeare-mode) +(use-package company-cabal + :defer t + :init + (with-eval-after-load 'company + (add-to-list 'company-backends '(company-cabal)))) + ;; misc (use-package academic-phrases :defer t diff --git a/modules/graphical.nix b/modules/graphical.nix index 0a04e23..cf5dcca 100644 --- a/modules/graphical.nix +++ b/modules/graphical.nix @@ -22,6 +22,7 @@ with lib; { ''; }; i3.enable = mkEnableOption "enable i3"; + xmonad.enable = mkEnableOption "Use xmonad"; }; config = let cfg = config.elss.graphical; @@ -40,7 +41,7 @@ with lib; { in mkIf cfg.enable { elss.users.x11.enable = - if cfg.i3.enable + if cfg.i3.enable || cfg.xmonad.enable then true else false; elss.networking.useNetworkManager = true; @@ -74,6 +75,8 @@ with lib; { printing.enable = true; }; + security.pam.services.lightdm.enableGnomeKeyring = true; + sound.enable = true; hardware = { diff --git a/modules/xmonad.nix b/modules/xmonad.nix new file mode 100644 index 0000000..55b6091 --- /dev/null +++ b/modules/xmonad.nix @@ -0,0 +1,25 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; { + config = let + cfg = config.elss.graphical.xmonad; + in + mkIf cfg.enable { + services = { + xserver = { + enable = true; + windowManager.xmonad.enable = true; + layout = "us"; + xkbOptions = "eurosign:e"; + }; + gnome.gnome-keyring.enable = true; + + printing.enable = true; + }; + security.pam.services.lightdm.enableGnomeKeyring = true; + }; +} diff --git a/users/ellmau/conf/xmonad/xmonad.hs b/users/ellmau/conf/xmonad/xmonad.hs new file mode 100644 index 0000000..38e69cc --- /dev/null +++ b/users/ellmau/conf/xmonad/xmonad.hs @@ -0,0 +1,81 @@ +module Main where + +import Data.Ratio +import XMonad hiding ((|||)) +import XMonad.Hooks.FadeInactive +import XMonad.Hooks.FadeWindows +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.ManageHelpers +import XMonad.Hooks.StatusBar +import XMonad.Util.EZConfig +import Network.HostName (getHostName) +-- Imports for Polybar -- +import qualified Codec.Binary.UTF8.String as UTF8 +import qualified DBus as D +import qualified DBus.Client as D +import XMonad.Hooks.DynamicLog + +main :: IO () +main' :: D.Client -> IO () +main = mkDbusClient >>= main' + +main' dbus = do + hostname <- io $ getHostName + xmonad . docks . ewmhFullscreen . ewmh $ def + { terminal = "alacritty" + , logHook = polybarLogHook dbus + } + +mkDbusClient :: IO D.Client +mkDbusClient = do + dbus <- D.connectSession + D.requestName dbus (D.busName_ "org.xmonad.log") opts + return dbus + where + opts = [D.nameAllowReplacement, D.nameReplaceExisting, D.nameDoNotQueue] + +-- Emit a DBus signal on log updates +dbusOutput :: D.Client -> String -> IO () +dbusOutput dbus str = + let opath = D.objectPath_ "/org/xmonad/Log" + iname = D.interfaceName_ "org.xmonad.Log" + mname = D.memberName_ "Update" + signal = D.signal opath iname mname + body = [D.toVariant $ UTF8.decodeString str] + in D.emit dbus $ signal { D.signalBody = body } + +polybarHook :: D.Client -> PP +polybarHook dbus = + let wrapper c s | s /= "NSP" = wrap ("%{F" <> c <> "} ") " %{F-}" s + | otherwise = mempty + blue = "#2E9AFE" + gray = "#7F7F7F" + orange = "#ea4300" + purple = "#9058c7" + red = "#722222" + in def { ppOutput = dbusOutput dbus + , ppCurrent = wrapper blue + , ppVisible = wrapper gray + , ppUrgent = wrapper orange + , ppHidden = wrapper gray + , ppHiddenNoWindows = wrapper red + , ppTitle = shorten 100 . wrapper purple + } + +fadeHook :: Rational -> Rational -> X () +fadeHook act inact = fadeOutLogHook $ fadeAllBut exceptions act inact + where exceptions = isFullscreen + <||> className =? "firefox" + <||> className =? "Chromium-browser" + +fadeAllBut :: Query Bool -> Rational -> Rational -> Query Rational +fadeAllBut qry amt inact = do isInactive <- isUnfocused + isQry <- qry + if isQry + then return 1 + else if isInactive + then return inact + else return amt + +polybarLogHook dbus = fadeHook 0.95 0.75 <+> dynamicLogWithPP (polybarHook dbus) \ No newline at end of file diff --git a/users/ellmau/default.nix b/users/ellmau/default.nix index fa1f818..637aa68 100644 --- a/users/ellmau/default.nix +++ b/users/ellmau/default.nix @@ -15,6 +15,7 @@ ./mako.nix ./nextcloud.nix ./polybar.nix + ./xmonad.nix ./zsh.nix ./sway.nix diff --git a/users/ellmau/polybar.nix b/users/ellmau/polybar.nix index 65f801f..fb1f0e2 100644 --- a/users/ellmau/polybar.nix +++ b/users/ellmau/polybar.nix @@ -7,7 +7,14 @@ }: with lib; { config = let - cfg = nixosConfig.elss.graphical.i3; + cfg = nixosConfig.elss.graphical.xmonad; + xmonad = '' + [module/xmonad] + type = custom/script + exec = ${pkgs.xmonad-log}/bin/xmonad-log + + tail = true + ''; in mkIf cfg.enable { services.polybar = { @@ -357,6 +364,7 @@ with lib; { MONITOR=$m polybar --reload aux & done; ''; + extraConfig = xmonad; }; }; } diff --git a/users/ellmau/xmonad.nix b/users/ellmau/xmonad.nix new file mode 100644 index 0000000..689bddc --- /dev/null +++ b/users/ellmau/xmonad.nix @@ -0,0 +1,28 @@ +{ + config, + pkgs, + lib, + nixosConfig, + ... +}: +with lib; { + config = let + cfg = nixosConfig.elss.graphical.xmonad; + in + mkIf cfg.enable { + xsession = { + enable = true; + + windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + extraPackages = haskellPackages: [ + haskellPackages.dbus + haskellPackages.monad-logger + haskellPackages.hostname + ]; + config = mkDefault conf/xmonad/xmonad.hs; + }; + }; + }; +}