setup custom xmonad package
This commit is contained in:
		
							parent
							
								
									5c20a15385
								
							
						
					
					
						commit
						54ce4b0c94
					
				
					 6 changed files with 5 additions and 126 deletions
				
			
		|  | @ -1,80 +0,0 @@ | |||
| { | ||||
|   "nodes": { | ||||
|     "flake-parts": { | ||||
|       "inputs": { | ||||
|         "nixpkgs-lib": "nixpkgs-lib" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1683560683, | ||||
|         "narHash": "sha256-XAygPMN5Xnk/W2c1aW0jyEa6lfMDZWlQgiNtmHXytPc=", | ||||
|         "owner": "hercules-ci", | ||||
|         "repo": "flake-parts", | ||||
|         "rev": "006c75898cf814ef9497252b022e91c946ba8e17", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "hercules-ci", | ||||
|         "repo": "flake-parts", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "haskell-flake": { | ||||
|       "locked": { | ||||
|         "lastModified": 1684069239, | ||||
|         "narHash": "sha256-1nPdY5KasmGwwtuKv7OKCLCZC3wlAE+hJWwKZRBAluo=", | ||||
|         "owner": "srid", | ||||
|         "repo": "haskell-flake", | ||||
|         "rev": "b8ccbf305e720e3483d7b983aeda61326169226a", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "srid", | ||||
|         "repo": "haskell-flake", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1684120848, | ||||
|         "narHash": "sha256-gIwJ5ac1FwZEkCRwjY+gLwgD4G1Bw3Xtr2jr2XihMPo=", | ||||
|         "owner": "nixos", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "0cb867999eec4085e1c9ca61c09b72261fa63bb4", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "nixos", | ||||
|         "ref": "nixpkgs-unstable", | ||||
|         "repo": "nixpkgs", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs-lib": { | ||||
|       "locked": { | ||||
|         "dir": "lib", | ||||
|         "lastModified": 1682879489, | ||||
|         "narHash": "sha256-sASwo8gBt7JDnOOstnps90K1wxmVfyhsTPPNTGBPjjg=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "da45bf6ec7bbcc5d1e14d3795c025199f28e0de0", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "dir": "lib", | ||||
|         "owner": "NixOS", | ||||
|         "ref": "nixos-unstable", | ||||
|         "repo": "nixpkgs", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "root": { | ||||
|       "inputs": { | ||||
|         "flake-parts": "flake-parts", | ||||
|         "haskell-flake": "haskell-flake", | ||||
|         "nixpkgs": "nixpkgs" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "root": "root", | ||||
|   "version": 7 | ||||
| } | ||||
|  | @ -1,46 +0,0 @@ | |||
| { | ||||
|   inputs = { | ||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; | ||||
|     flake-parts.url = "github:hercules-ci/flake-parts"; | ||||
|     haskell-flake.url = "github:srid/haskell-flake"; | ||||
|   }; | ||||
|   outputs = inputs@{ self, nixpkgs, flake-parts, ... }: | ||||
|     flake-parts.lib.mkFlake { inherit inputs; } { | ||||
|       systems = nixpkgs.lib.systems.flakeExposed; | ||||
|       imports = [ inputs.haskell-flake.flakeModule ]; | ||||
| 
 | ||||
|       perSystem = { self', pkgs, ... }: { | ||||
| 
 | ||||
|         # Typically, you just want a single project named "default". But | ||||
|         # multiple projects are also possible, each using different GHC version. | ||||
|         haskellProjects.default = { | ||||
|           # If you have a .cabal file in the root, this option is determined | ||||
|           # automatically. Otherwise, specify all your local packages here. | ||||
|           packages.xmonad-config.root = ./.; | ||||
| 
 | ||||
|           # The base package set representing a specific GHC version. | ||||
|           # By default, this is pkgs.haskellPackages. | ||||
|           # You may also create your own. See https://haskell.flake.page/package-set | ||||
|           # basePackages = pkgs.haskellPackages; | ||||
| 
 | ||||
|           # Dependency overrides go here. See https://haskell.flake.page/dependency | ||||
|           # source-overrides = { }; | ||||
|           # overrides = self: super: { }; | ||||
| 
 | ||||
|           # devShell = { | ||||
|           #  # Enabled by default | ||||
|           #  enable = true;   | ||||
|           # | ||||
|           #  # Programs you want to make available in the shell. | ||||
|           #  # Default programs can be disabled by setting to 'null' | ||||
|           #  tools = hp: { fourmolu = hp.fourmolu; ghcid = null; }; | ||||
|           # | ||||
|           #  hlsCheck.enable = true; | ||||
|           # }; | ||||
|         }; | ||||
| 
 | ||||
|         # haskell-flake doesn't set the default package, but you can do it here. | ||||
|         packages.default = self'.packages.xmonad-config; | ||||
|       }; | ||||
|     }; | ||||
| } | ||||
|  | @ -1,151 +0,0 @@ | |||
| -- Base | ||||
| import XMonad | ||||
| import System.Exit | ||||
| import qualified XMonad.StackSet as W | ||||
| 
 | ||||
| -- Actions | ||||
| import XMonad.Actions.CycleWS | ||||
| 
 | ||||
| -- Hooks | ||||
| import XMonad.Hooks.EwmhDesktops | ||||
| import XMonad.Hooks.ManageDocks | ||||
| 
 | ||||
| -- Layout modifiers | ||||
| import XMonad.Layout.Spacing | ||||
| import XMonad.Layout.Renamed | ||||
| import XMonad.Layout.NoBorders | ||||
| 
 | ||||
| -- Utilities | ||||
| import XMonad.Util.EZConfig (additionalKeysP) | ||||
| 
 | ||||
| -- xmobar dependencies | ||||
| import XMonad.Hooks.DynamicLog | ||||
| import XMonad.Hooks.StatusBar | ||||
| import XMonad.Hooks.StatusBar.PP | ||||
| import XMonad.Util.Loggers | ||||
| 
 | ||||
| -- | Configuration | ||||
| myTerminal           = "wezterm" | ||||
| myModMask            = mod4Mask | ||||
| myBorderWidth        = 5 | ||||
| myNormalBorderColor  = "#282828" | ||||
| myFocusedBorderColor = "#282828" | ||||
| myWorkspaces         = ["code", "chat", "web", "games", "misc"] | ||||
| 
 | ||||
| -- | Keybindings | ||||
| myKeys = | ||||
|     -- launching and killing programs | ||||
|     [ ("M-n"            , spawn myTerminal                 ) -- %! Launch terminal | ||||
|     , ("M-e"            , spawn "dmenu_run"                ) -- %! Launch dmenu | ||||
|     , ("M-C-w"          , kill                             ) -- %! Close the focused window | ||||
|     -- layouts | ||||
|     , ("M-<Space>"      , sendMessage NextLayout           ) -- %! Rotate through the available layout algorithms | ||||
|     -- move focus up or down the window stack | ||||
|     , ("M-<Down>"       , windows W.focusDown              ) -- %! Move focus to the next window | ||||
|     , ("M-<Up>"         , windows W.focusUp                ) -- %! Move focus to the previous window | ||||
|     , ("M-<Return>"     , windows W.focusMaster            ) -- %! Move focus to the master window  | ||||
|     -- modifying the window order | ||||
|     , ("M-S-<Down>"     , windows W.swapDown               ) -- %! Swap the focused window with the next window | ||||
|     , ("M-S-<Up>"       , windows W.swapUp                 ) -- %! Swap the focused window with the previous window | ||||
|     , ("M-S-<Return>"   , windows W.swapMaster             ) -- %! Swap the focused window with the master window | ||||
|     -- resizing the master/slave ratio | ||||
|     , ("M-<Page_Up>"    , sendMessage Expand               ) -- %! Expand the master area | ||||
|     , ("M-<Page_Down>"  , sendMessage Shrink               ) -- %! Shrink the master area | ||||
|     -- number of windows in the master area | ||||
|     , ("M-S-<Page_Up>"  , sendMessage (IncMasterN 1)       ) -- %! Increase the number of windows in the master area | ||||
|     , ("M-S-<Page_Down>", sendMessage (IncMasterN (-1))    ) -- %! Decrease the number of windows in the master area | ||||
|     -- floating layer support | ||||
|     , ("M-t"            , withFocused $ windows . W.sink   ) -- %! Push window back into tiling | ||||
|     -- workspace navigation | ||||
|     , ("M-<Right>"      , moveTo Next hiddenWS             ) -- %! Move focus to the next hidden workspace | ||||
|     , ("M-<Left>"       , moveTo Prev hiddenWS             ) -- %! Move focus to the previous hidden workspace | ||||
|     -- move window to workspace | ||||
|     , ("M-S-<Right>"    , shiftTo Next hiddenWS            ) -- %! Move focused window to the next hidden workspace | ||||
|     , ("M-S-<Left)"     , shiftTo Prev hiddenWS            ) -- %! Move focused window to the previous hidden workspace | ||||
|     -- move focus up or down the screen stack | ||||
|     , ("M-<End>"        , nextScreen                       ) -- %! Move focus to the next screen | ||||
|     , ("M-<Home>"       , prevScreen                       ) -- %! Move focus to the previous screen | ||||
|     -- move windows between screens | ||||
|     , ("M-S-<End>"      , shiftNextScreen                  ) -- %! Move focused window to the next screen | ||||
|     , ("M-S-<Home>"     , shiftPrevScreen                  ) -- %! Move focused window to the previous screen | ||||
|     -- quit, or restart | ||||
|     , ("M-S-q"          , io exitSuccess                   ) -- %! Quit xmonad | ||||
|     ] | ||||
| 
 | ||||
| -- | Layouts | ||||
| myLayout = tiled ||| full | ||||
|   where | ||||
|     -- Add a configurable amount of space around windows. | ||||
|     gaps     = spacingRaw False (Border 10 10 10 10) True (Border 10 10 10 10) True | ||||
|     -- Our layouts | ||||
|     tiled    = renamed [Replace "Spacing Tiled"] . avoidStruts . gaps $ Tall nmaster delta ratio | ||||
|     full     = renamed [Replace "Fullscreen"]    $ noBorders Full | ||||
|     -- Layout settings | ||||
|     nmaster  = 1      -- Default number of windows in the master pane | ||||
|     ratio    = 1/2    -- Default proportion of screen occupied by master pane | ||||
|     delta    = 3/100  -- Percent of screen to increment by when resizing panes | ||||
| 
 | ||||
| -- | Xmobar | ||||
| xmobarTop    = statusBarPropTo "_XMONAD_LOG_1" "xmobar-top"    (pure ppTop) | ||||
| 
 | ||||
| ppTop :: PP | ||||
| ppTop = def | ||||
|     { ppSep             = grey0 " | " | ||||
|     , ppTitleSanitize   = xmobarStrip | ||||
|     -- workspace labels | ||||
|     , ppCurrent         = purple . wrap " " "" | ||||
|     , ppVisible         = blue   . wrap " " "" | ||||
|     , ppHidden          = grey0  . wrap " " "" | ||||
|     , ppHiddenNoWindows = grey0  . wrap " " "" | ||||
|     , ppUrgent          = red    . wrap " " "" | ||||
|     -- misc | ||||
|     , ppOrder           = \[ws, l, _, wins] -> [ws, l, wins] | ||||
|     , ppExtras          = [logTitles formatFocused formatUnfocused] | ||||
|     } | ||||
|   where | ||||
|     formatFocused   = wrap (grey0 "") (grey0 " ") . purple . ppWindow | ||||
|     formatUnfocused = wrap (grey0 "") (grey0 " ") . blue   . ppWindow | ||||
| 
 | ||||
|     -- | Windows should have *some* title, which should not not exceed a | ||||
|     -- sane length. | ||||
|     ppWindow :: String -> String | ||||
|     ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30 | ||||
|      | ||||
|     -- | Gruvbox material | ||||
|     bg0, bg1, fg0, fg1, red, orange, yellow, green, aqua, blue, purple :: String -> String | ||||
|     -- backgrounds | ||||
|     bg0    = xmobarColor "#1d2021" "" | ||||
|     bg1    = xmobarColor "#282828" "" | ||||
|     -- foregrounds | ||||
|     fg0    = xmobarColor "#d4be98" "" | ||||
|     fg1    = xmobarColor "#ddc7a1" "" | ||||
|     -- greys | ||||
|     grey0  = xmobarColor "#7c6f64" "" | ||||
|     -- colors | ||||
|     red    = xmobarColor "#ea6962" "" | ||||
|     orange = xmobarColor "#e78a4e" "" | ||||
|     yellow = xmobarColor "#d8a658" "" | ||||
|     green  = xmobarColor "#a9b665" "" | ||||
|     aqua   = xmobarColor "#89b482" "" | ||||
|     blue   = xmobarColor "#7daea3" "" | ||||
|     purple = xmobarColor "#d3869b" "" | ||||
| 
 | ||||
| -- | The main function | ||||
| main :: IO () | ||||
| main = xmonad | ||||
|      . ewmhFullscreen | ||||
|      . ewmh | ||||
|      . withSB (xmobarTop) | ||||
|      $ myConfig | ||||
| 
 | ||||
| myConfig = def | ||||
|     { modMask            = myModMask | ||||
|     , layoutHook         = myLayout | ||||
|     , terminal           = myTerminal | ||||
|     , borderWidth        = myBorderWidth | ||||
|     , normalBorderColor  = myNormalBorderColor | ||||
|     , focusedBorderColor = myFocusedBorderColor | ||||
|     , workspaces         = myWorkspaces | ||||
|     } `additionalKeysP` myKeys | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,19 +0,0 @@ | |||
| cabal-version:      3.0 | ||||
| name:               xmonad-config | ||||
| version:            0.1.0.0 | ||||
| synopsis:           A tiling window manager | ||||
| description:        my xmonad configuration | ||||
| license:            BSD-3-Clause | ||||
| author:             sajenim | ||||
| maintainer:         its.jassy@pm.me | ||||
| build-type:         Simple | ||||
| 
 | ||||
| executable xmonad-config | ||||
|     main-is:          xmonad.hs | ||||
|     hs-source-dirs:   src | ||||
|     ghc-options:      -Wall | ||||
|     build-depends:    base, | ||||
|                       xmonad, | ||||
|                       xmonad-contrib | ||||
|     default-language: Haskell2010 | ||||
| 
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue