diff options
-rw-r--r-- | cabal.project.freeze | 35 | ||||
-rw-r--r-- | flake.lock | 6 | ||||
-rw-r--r-- | flake.nix | 8 | ||||
-rw-r--r-- | package.yaml | 11 | ||||
-rw-r--r-- | src/exe/Main.hs | 61 | ||||
-rw-r--r-- | src/lib/XMonad/Custom/Bindings.hs | 2 | ||||
-rw-r--r-- | src/lib/XMonad/Custom/Config.hs | 54 | ||||
-rw-r--r-- | src/lib/XMonad/Custom/Misc.hs | 2 | ||||
-rw-r--r-- | src/lib/XMonad/Custom/Navigation.hs | 6 | ||||
-rw-r--r-- | src/lib/XMonad/Custom/Startup.hs | 4 | ||||
-rw-r--r-- | src/lib/XMonad/Custom/Workspaces.hs | 9 | ||||
-rw-r--r-- | stack.yaml | 3 | ||||
-rw-r--r-- | stack.yaml.lock | 16 | ||||
-rwxr-xr-x | test.sh | 103 | ||||
-rw-r--r-- | xmonad-ng.cabal | 19 |
15 files changed, 219 insertions, 120 deletions
diff --git a/cabal.project.freeze b/cabal.project.freeze deleted file mode 100644 index 83b5cb0..0000000 --- a/cabal.project.freeze +++ /dev/null @@ -1,35 +0,0 @@ -active-repositories: hackage.haskell.org:merge -constraints: any.X11 ==1.10.2, - any.X11-xft ==0.3.1, - any.array ==0.5.4.0, - any.base ==4.14.3.0, - any.bytestring ==0.10.12.0, - any.containers ==0.6.5.1, - any.data-default ==0.7.1.1, - any.data-default-class ==0.1.2.0, - any.data-default-instances-containers ==0.0.1, - any.data-default-instances-dlist ==0.0.1, - any.data-default-instances-old-locale ==0.0.1, - any.deepseq ==1.4.4.0, - any.directory ==1.3.6.0, - any.dlist ==1.0, - any.extensible-exceptions ==0.1.1.4, - any.filepath ==1.4.2.1, - any.ghc-prim ==0.6.1, - any.integer-gmp ==1.0.3.0, - any.mtl ==2.2.2, - any.old-locale ==1.0.0.7, - any.old-time ==1.1.0.3, - any.process ==1.6.13.2, - any.random ==1.2.0, - any.rts ==1.0.1, - any.semigroups ==0.19.2, - any.setlocale ==1.0.0.10, - any.splitmix ==0.1.0.4, - any.time ==1.9.3, - any.transformers ==0.5.6.2, - any.unix ==2.7.2.2, - any.utf8-string ==1.0.2, - any.xmonad ==0.15, - any.xmonad-contrib ==0.16 -index-state: hackage.haskell.org 2021-11-22T20:41:46Z diff --git a/flake.lock b/flake.lock index ae20847..e28436d 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1637593665, - "narHash": "sha256-R7jKS7A+0tZS8qD5pBr1UFcMiTdsw5bfoxgXbYsoWhM=", + "lastModified": 1638366923, + "narHash": "sha256-Sh6+Pm0ShdtqW+BGynIJX+F12Lqs0xJq6qWmDkZN2uA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "98747f27ecfee70c8c97b195cbb94df80a074dda", + "rev": "1fbcb733eb9daf23ab9e70e58e76fa0b767dc033", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7234537..c53b5c2 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,14 @@ inherit returnShellEnv; name = "xmonad-ng"; root = ./.; + overrides = self: _: + with pkgs.haskell.lib; + let version = "0.17.0"; + in { + xmonad = dontCheck (self.callHackage "xmonad" version { }); + xmonad-contrib = + dontCheck (self.callHackage "xmonad-contrib" version { }); + }; modifier = drv: pkgs.haskell.lib.addBuildTools drv (with pkgs.haskellPackages; [ brittany diff --git a/package.yaml b/package.yaml index 4bd1a71..e197d7b 100644 --- a/package.yaml +++ b/package.yaml @@ -18,15 +18,16 @@ ghc-options: - -Wredundant-constraints dependencies: - - base >= 4.14 && < 5 - - xmonad >= 0.15 && < 0.16 - - xmonad-contrib >= 0.16 && < 0.17 + - base == 4.* + - flow == 1.0.* + - xmonad == 0.17.* + - xmonad-contrib == 0.17.* library: source-dirs: src/lib dependencies: - - containers >= 0.6.5 && < 0.7 - - X11 >= 1.10.2 && < 1.11 + - containers == 0.6.* + - X11 == 1.10.* when: - condition: false other-modules: Paths_xmonad_ng diff --git a/src/exe/Main.hs b/src/exe/Main.hs index 3a57650..7b08f2a 100644 --- a/src/exe/Main.hs +++ b/src/exe/Main.hs @@ -1,6 +1,6 @@ -- | -- Module : Main --- Description : Entrypoint +-- Description : Application entrypoint -- Copyright : (c) Azat Bahawi 2018-2021 -- SPDX-License-Identifier : GPL-3.0-or-later -- Maintainer : azahi@teknik.io @@ -10,61 +10,8 @@ module Main where -import XMonad ( Default(def) - , XConfig - ( borderWidth - , clickJustFocuses - , focusFollowsMouse - , focusedBorderColor - , handleEventHook - , keys - , layoutHook - , manageHook - , modMask - , mouseBindings - , normalBorderColor - , startupHook - , terminal - , workspaces - ) - , xmonad - ) -import XMonad.Actions.DynamicProjects ( dynamicProjects ) -import XMonad.Actions.Navigation2D ( withNavigation2DConfig ) -import qualified XMonad.Custom.Bindings as C -import qualified XMonad.Custom.Event as C -import qualified XMonad.Custom.Layout as C -import qualified XMonad.Custom.Manage as C -import qualified XMonad.Custom.Misc as C -import qualified XMonad.Custom.Navigation as C -import qualified XMonad.Custom.Projects as C -import qualified XMonad.Custom.Startup as C -import qualified XMonad.Custom.Theme as C -import qualified XMonad.Custom.Workspaces as C -import XMonad.Hooks.EwmhDesktops ( ewmh ) -import XMonad.Hooks.ManageDocks ( docks ) -import XMonad.Layout.Fullscreen ( fullscreenSupport ) +import XMonad +import XMonad.Custom.Config main :: IO () -main = - xmonad - $ ewmh - $ fullscreenSupport - $ docks - $ withNavigation2DConfig C.navigation - $ dynamicProjects C.projects - $ def { borderWidth = C.border - , workspaces = C.workspaces - , layoutHook = C.layoutHook - , terminal = C.term C.applications - , normalBorderColor = C.colorN - , focusedBorderColor = C.colorF - , modMask = C.modMask - , keys = C.keys - , startupHook = C.startupHook - , mouseBindings = C.mouseBindings - , manageHook = C.manageHook - , handleEventHook = C.handleEventHook - , focusFollowsMouse = False - , clickJustFocuses = False - } +main = myConfig >>= xmonad diff --git a/src/lib/XMonad/Custom/Bindings.hs b/src/lib/XMonad/Custom/Bindings.hs index 208ccdf..807be4f 100644 --- a/src/lib/XMonad/Custom/Bindings.hs +++ b/src/lib/XMonad/Custom/Bindings.hs @@ -57,7 +57,7 @@ import XMonad.Util.NamedScratchpad import XMonad.Util.WorkspaceCompare modMask :: KeyMask -modMask = mod4Mask +modMask = controlMask directions :: [Direction2D] directions = [D, U, L, R] diff --git a/src/lib/XMonad/Custom/Config.hs b/src/lib/XMonad/Custom/Config.hs new file mode 100644 index 0000000..84f4069 --- /dev/null +++ b/src/lib/XMonad/Custom/Config.hs @@ -0,0 +1,54 @@ +{-# OPTIONS_GHC -Wno-missing-signatures #-} + +-- | +-- Module : XMonad.Custom.Config +-- Description : Configuration entrypoint to be passed to executable +-- Copyright : (c) Azat Bahawi 2018-2021 +-- SPDX-License-Identifier : GPL-3.0-or-later +-- Maintainer : azahi@teknik.io +-- Stability : experimental +-- Portability : non-portable +-- + +module XMonad.Custom.Config + ( myConfig + ) where + +import Flow +import XMonad +import XMonad.Actions.Navigation2D +import qualified XMonad.Custom.Bindings as C +import qualified XMonad.Custom.Event as C +import qualified XMonad.Custom.Layout as C +import qualified XMonad.Custom.Manage as C +import qualified XMonad.Custom.Misc as C +import qualified XMonad.Custom.Navigation as C +import qualified XMonad.Custom.Theme as C +import qualified XMonad.Custom.Workspaces as C +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.UrgencyHook +import XMonad.Layout.IndependentScreens + +myConfig = do + screens <- countScreens + def { borderWidth = C.border + , workspaces = C.myWorkspaces screens + , layoutHook = C.layoutHook + , terminal = C.term C.applications + , normalBorderColor = C.colorN + , focusedBorderColor = C.colorF + , modMask = C.modMask + , keys = C.keys + , mouseBindings = C.mouseBindings + , manageHook = C.manageHook + , handleEventHook = C.handleEventHook + , focusFollowsMouse = False + , clickJustFocuses = False + } + |> withUrgencyHook (borderUrgencyHook C.red1) + |> withNavigation2DConfig C.myNavigation2DConfig + |> ewmh + |> ewmhFullscreen + |> docks + |> (return :: a -> IO a) diff --git a/src/lib/XMonad/Custom/Misc.hs b/src/lib/XMonad/Custom/Misc.hs index b9901b4..355df91 100644 --- a/src/lib/XMonad/Custom/Misc.hs +++ b/src/lib/XMonad/Custom/Misc.hs @@ -31,6 +31,6 @@ applications = Applications { browser = "qutebrowser" , mixer = "pulsemixer" , notify = "notify-send" , player = "ncmpcpp" - , term = "urxvtc" + , term = "xterm" , top = "htop" } diff --git a/src/lib/XMonad/Custom/Navigation.hs b/src/lib/XMonad/Custom/Navigation.hs index 2646db4..cf96ab7 100644 --- a/src/lib/XMonad/Custom/Navigation.hs +++ b/src/lib/XMonad/Custom/Navigation.hs @@ -9,13 +9,13 @@ -- module XMonad.Custom.Navigation - ( navigation + ( myNavigation2DConfig ) where import XMonad.Actions.Navigation2D -navigation :: Navigation2DConfig -navigation = def +myNavigation2DConfig :: Navigation2DConfig +myNavigation2DConfig = def { defaultTiledNavigation = hybridOf sideNavigation centerNavigation , floatNavigation = hybridOf lineNavigation centerNavigation , layoutNavigation = [("Full", centerNavigation)] diff --git a/src/lib/XMonad/Custom/Startup.hs b/src/lib/XMonad/Custom/Startup.hs index f2415ea..935d08f 100644 --- a/src/lib/XMonad/Custom/Startup.hs +++ b/src/lib/XMonad/Custom/Startup.hs @@ -50,8 +50,8 @@ addEWMHFullscreen = do startupHook :: X () startupHook = do - spawnNamedPipe "xmobar ~/.xmonad/xmobarrc/top.hs" "xmobarTop" - spawnNamedPipe "xmobar ~/.xmonad/xmobarrc/bot.hs" "xmobarBot" + -- spawnNamedPipe "xmobar ~/.xmonad/xmobarrc/top.hs" "xmobarTop" + -- spawnNamedPipe "xmobar ~/.xmonad/xmobarrc/bot.hs" "xmobarBot" docksStartupHook addEWMHFullscreen setDefaultCursor xC_left_ptr diff --git a/src/lib/XMonad/Custom/Workspaces.hs b/src/lib/XMonad/Custom/Workspaces.hs index ba2a1e7..43d8aa2 100644 --- a/src/lib/XMonad/Custom/Workspaces.hs +++ b/src/lib/XMonad/Custom/Workspaces.hs @@ -9,10 +9,11 @@ -- module XMonad.Custom.Workspaces - ( workspaces + ( myWorkspaces ) where -import XMonad.Core hiding ( workspaces ) +import XMonad.Core +import XMonad.Layout.IndependentScreens -workspaces :: [WorkspaceId] -workspaces = map show [1 .. 9 :: Int] +myWorkspaces :: ScreenId -> [PhysicalWorkspace] +myWorkspaces = flip withScreens $ map show [1 .. 9 :: Int] diff --git a/stack.yaml b/stack.yaml index 6658c36..3f06915 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,5 +1,8 @@ --- resolver: lts-18.18 +extra-deps: + - xmonad-0.17.0 + - xmonad-contrib-0.17.0 nix: enable: true packages: diff --git a/stack.yaml.lock b/stack.yaml.lock index a9834e3..59970bc 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,7 +3,21 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: [] +packages: +- completed: + hackage: xmonad-0.17.0@sha256:fc90c8fa647390c68c902912a5a7417f04025dfe72f7de51b248217f7ca0d484,5533 + pantry-tree: + size: 2485 + sha256: 6fd7c6a64621a088fcbb2e5a66030a78b0832d7341e4c465d3aeb4e668d097a5 + original: + hackage: xmonad-0.17.0 +- completed: + hackage: xmonad-contrib-0.17.0@sha256:defd04a9ca0e031eb7280b734ccd6d6b73f757babfe4a561a7ff718e75211749,20357 + pantry-tree: + size: 21783 + sha256: 81a4589ef85fed434a852ba1324466b5ad8f4fd752cd88840aa4ea4348a16cec + original: + hackage: xmonad-contrib-0.17.0 snapshots: - completed: size: 586296 diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..fd86536 --- /dev/null +++ b/test.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +################################################################################ +usage() { + cat <<EOF +Usage: run-in-xephyr.sh [options] + + -d NxN Set the screen size to NxN + -h This message + -n NUM Set the internal DISPLAY to NUM + -s NUM Set the number of screens to NUM +EOF +} + +################################################################################ +ARCH=$(uname -m) +OS=$(uname -s | tr '[:upper:]' '[:lower:]') +SCREENS=1 +SCREEN_SIZE="800x600" +DISPLAY_NUMBER=5 + +################################################################################ +while getopts "hs:" o; do + case "${o}" in + d) + SCREEN_SIZE=$OPTARG + ;; + + h) + usage + exit + ;; + + n) + DISPLAY_NUMBER=$OPTARG + ;; + + s) + SCREENS=$OPTARG + ;; + + *) + echo + usage + exit 1 + ;; + esac +done + +shift $((OPTIND - 1)) + +################################################################################ +if [ -d .stack-work ]; then + echo "stack build detected" + options="" + [ "${NIX_PATH:-NO}" = "NO" ] || options="--nix" + BIN_PATH=$(stack path $options --dist-dir)/build/xmonad-ng +elif [ -d dist-newstyle ]; then + echo "cabal build detected" + BIN_PATH=$(find dist-newstyle/ -type f -executable -name xmonad-ng -printf '%h') +else + echo "you need to build xmonad-ng first, see README for instructions" + exit 1 +fi + +RAW_BIN=$BIN_PATH/xmonad-ng +ARCH_BIN=$BIN_PATH/xmonad-$ARCH-$OS + +################################################################################ +cp -p "$RAW_BIN" "$ARCH_BIN" + +################################################################################ +XMONAD_CONFIG_DIR=$(pwd)/state/config +XMONAD_CACHE_DIR=$(pwd)/state/cache +XMONAD_DATA_DIR=$(pwd)/state/data +export XMONAD_CONFIG_DIR XMONAD_CACHE_DIR XMONAD_DATA_DIR + +mkdir -p "$XMONAD_CONFIG_DIR" "$XMONAD_CACHE_DIR" "$XMONAD_DATA_DIR" +echo "xmonad will store state files in $(pwd)/state" + +################################################################################ +SCREEN_COUNTER=0 +SCREEN_OPTS="" +X_OFFSET_CURRENT="0" +X_OFFSET_ADD=$(echo "$SCREEN_SIZE" | cut -dx -f1) + +while expr "$SCREEN_COUNTER" "<" "$SCREENS"; do + SCREEN_OPTS="$SCREEN_OPTS -origin ${X_OFFSET_CURRENT},0 -screen ${SCREEN_SIZE}+${X_OFFSET_CURRENT}" + SCREEN_COUNTER=$(("$SCREEN_COUNTER" + 1)) + X_OFFSET_CURRENT=$(("$X_OFFSET_CURRENT" + "$X_OFFSET_ADD")) +done + +( + # shellcheck disable=SC2086 + Xephyr $SCREEN_OPTS +xinerama +extension RANDR \ + -ac -br -reset -terminate -verbosity 10 \ + -softCursor ":$DISPLAY_NUMBER" & + + export DISPLAY=":$DISPLAY_NUMBER" + echo "Waiting for windows to appear..." && sleep 2 + + $ARCH_BIN +) diff --git a/xmonad-ng.cabal b/xmonad-ng.cabal index ae1b31f..748fc8b 100644 --- a/xmonad-ng.cabal +++ b/xmonad-ng.cabal @@ -25,6 +25,7 @@ source-repository head library exposed-modules: XMonad.Custom.Bindings + XMonad.Custom.Config XMonad.Custom.Event XMonad.Custom.Layout XMonad.Custom.Log @@ -41,11 +42,12 @@ library src/lib ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints build-depends: - X11 >=1.10.2 && <1.11 - , base >=4.14 && <5 - , containers >=0.6.5 && <0.7 - , xmonad ==0.15.* - , xmonad-contrib ==0.16.* + X11 ==1.10.* + , base ==4.* + , containers ==0.6.* + , flow ==1.0.* + , xmonad ==0.17.* + , xmonad-contrib ==0.17.* default-language: Haskell2010 executable xmonad-ng @@ -54,8 +56,9 @@ executable xmonad-ng src/exe ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -rtsopts -threaded -v0 -with-rtsopts=-N build-depends: - base >=4.14 && <5 - , xmonad ==0.15.* - , xmonad-contrib ==0.16.* + base ==4.* + , flow ==1.0.* + , xmonad ==0.17.* + , xmonad-contrib ==0.17.* , xmonad-ng default-language: Haskell2010 |