Adding a MyLayouts module for XMonad.

This commit is contained in:
Derek Taylor
2020-07-14 20:08:47 -05:00
parent 74f2dbb810
commit becac06cfa
4 changed files with 154 additions and 171 deletions

View File

@@ -52,4 +52,4 @@ myAppGrid = [ ("Audacity", "audacity")
, ("LibreOffice Writer", "lowriter")
, ("OBS", "obs")
, ("PCManFM", "pcmanfm")
]
]

View File

@@ -0,0 +1,110 @@
module Custom.MyLayouts where
import XMonad
import XMonad.Actions.MouseResize
import XMonad.Hooks.ManageDocks (avoidStruts)
-- Layouts
import XMonad.Layout.GridVariants (Grid(Grid))
import XMonad.Layout.SimplestFloat
import XMonad.Layout.Spiral
import XMonad.Layout.ResizableTile
import XMonad.Layout.Tabbed
import XMonad.Layout.ThreeColumns
-- Layouts modifiers
import XMonad.Layout.LayoutModifier
import XMonad.Layout.LimitWindows (limitWindows)
import XMonad.Layout.Magnifier
import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??))
import XMonad.Layout.MultiToggle.Instances (StdTransformers(NBFULL, MIRROR, NOBORDERS))
import XMonad.Layout.NoBorders
import XMonad.Layout.Renamed (renamed, Rename(Replace))
import XMonad.Layout.ShowWName
import XMonad.Layout.Spacing
import XMonad.Layout.WindowArranger (windowArrange)
import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts)
------------------------------------------------------------------------
-- LAYOUTS
------------------------------------------------------------------------
-- Makes setting the spacingRaw simpler to write. The spacingRaw
-- module adds a configurable amount of space around windows.
mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
-- Below is a variation of the above except no borders are applied
-- if fewer than two windows. So a single window has no gaps.
mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True
-- Defining a bunch of layouts, many that I don't use.
tall = renamed [Replace "tall"]
$ limitWindows 12
$ mySpacing 8
$ ResizableTall 1 (3/100) (1/2) []
magnify = renamed [Replace "magnify"]
$ magnifier
$ limitWindows 12
$ mySpacing 8
$ ResizableTall 1 (3/100) (1/2) []
monocle = renamed [Replace "monocle"]
$ limitWindows 20 Full
floats = renamed [Replace "floats"]
$ limitWindows 20 simplestFloat
grid = renamed [Replace "grid"]
$ limitWindows 12
$ mySpacing 8
$ mkToggle (single MIRROR)
$ Grid (16/10)
spirals = renamed [Replace "spirals"]
$ mySpacing' 8
$ spiral (6/7)
threeCol = renamed [Replace "threeCol"]
$ limitWindows 7
$ mySpacing' 4
$ ThreeCol 1 (3/100) (1/2)
threeRow = renamed [Replace "threeRow"]
$ limitWindows 7
$ mySpacing' 4
-- Mirror takes a layout and rotates it by 90 degrees.
-- So we are applying Mirror to the ThreeCol layout.
$ Mirror
$ ThreeCol 1 (3/100) (1/2)
tabs = renamed [Replace "tabs"]
-- I cannot add spacing to this layout because it will
-- add spacing between window and tabs which looks bad.
$ tabbed shrinkText myTabConfig
where
myTabConfig = def { fontName = "xft:Mononoki Nerd Font:regular:pixelsize=11"
, activeColor = "#292d3e"
, inactiveColor = "#3e445e"
, activeBorderColor = "#292d3e"
, inactiveBorderColor = "#292d3e"
, activeTextColor = "#ffffff"
, inactiveTextColor = "#d0d0d0"
}
-- Theme for showWName which prints current workspace when you change workspaces.
myShowWNameTheme :: SWNConfig
myShowWNameTheme = def
{ swn_font = "xft:Sans:bold:size=60"
, swn_fade = 1.0
, swn_bgcolor = "#000000"
, swn_color = "#FFFFFF"
}
-- The layout hook
myLayoutHook = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts floats $
mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout
where
-- I've commented out the layouts I don't use.
myDefaultLayout = tall
||| magnify
||| noBorders monocle
||| floats
-- ||| grid
||| noBorders tabs
-- ||| spirals
-- ||| threeCol
-- ||| threeRow

View File

@@ -18,30 +18,30 @@ import qualified Data.Map as M
treeselectAction :: TS.TSConfig (X ()) -> X ()
treeselectAction a = TS.treeselectAction a
[ Node (TS.TSNode "Accessories" "Accessory applications" (return ()))
[ Node (TS.TSNode "+ Accessories" "Accessory applications" (return ()))
[ Node (TS.TSNode "Archive Manager" "Tool for archived packages" (spawn "file-roller")) []
, Node (TS.TSNode "Calculator" "Gui version of qalc" (spawn "qalculate-gtk")) []
, Node (TS.TSNode "Calibre" "Manages books on my ereader" (spawn "calibre")) []
, Node (TS.TSNode "Castero" "Terminal podcast client" (spawn (myTerminal ++ " -e castero"))) []
, Node (TS.TSNode "Compton" "Compositor for window managers" (spawn "killall compton && compton")) []
, Node (TS.TSNode "Picom Toggle on/off" "Compositor for window managers" (spawn "killall picom; picom")) []
, Node (TS.TSNode "Virt-Manager" "Virtual machine manager" (spawn "virt-manager")) []
, Node (TS.TSNode "Virtualbox" "Oracle's virtualization program" (spawn "virtualbox")) []
]
, Node (TS.TSNode "Games" "fun and games" (return ()))
, Node (TS.TSNode "+ Games" "fun and games" (return ()))
[ Node (TS.TSNode "0 A.D" "Real-time strategy empire game" (spawn "0ad")) []
, Node (TS.TSNode "Battle For Wesnoth" "Turn-based stretegy game" (spawn "wesnoth")) []
, Node (TS.TSNode "Steam" "The Steam gaming platform" (spawn "steam")) []
, Node (TS.TSNode "SuperTuxKart" "Open source kart racing" (spawn "supertuxkart")) []
, Node (TS.TSNode "Xonotic" "Fast-paced first person shooter" (spawn "xonotic")) []
]
, Node (TS.TSNode "Graphics" "graphics programs" (return ()))
, Node (TS.TSNode "+ Graphics" "graphics programs" (return ()))
[ Node (TS.TSNode "Gimp" "GNU image manipulation program" (spawn "gimp")) []
, Node (TS.TSNode "Inkscape" "An SVG editing program" (spawn "inkscape")) []
, Node (TS.TSNode "LibreOffice Draw" "LibreOffice drawing program" (spawn "lodraw")) []
, Node (TS.TSNode "Shotwell" "Photo management program" (spawn "shotwell")) []
, Node (TS.TSNode "Simple Scan" "A simple scanning program" (spawn "simple-scan")) []
]
, Node (TS.TSNode "Internet" "internet and web programs" (return ()))
, Node (TS.TSNode "+ Internet" "internet and web programs" (return ()))
[ Node (TS.TSNode "Brave" "A privacy-oriented web browser" (spawn "brave")) []
, Node (TS.TSNode "Discord" "Chat and video chat platform" (spawn "discord")) []
, Node (TS.TSNode "Elfeed" "An Emacs RSS feed reader" (spawn "xxx")) []
@@ -57,7 +57,7 @@ treeselectAction a = TS.treeselectAction a
, Node (TS.TSNode "Transmission" "Bittorrent client" (spawn "transmission-gtk")) []
, Node (TS.TSNode "Zoom" "Web conferencing" (spawn "zoom")) []
]
, Node (TS.TSNode "Multimedia" "sound and video applications" (return ()))
, Node (TS.TSNode "+ Multimedia" "sound and video applications" (return ()))
[ Node (TS.TSNode "Alsa Mixer" "Alsa volume control utility" (spawn (myTerminal ++ " -e alsamixer"))) []
, Node (TS.TSNode "Audacity" "Graphical audio editing program" (spawn "audacity")) []
, Node (TS.TSNode "Deadbeef" "Lightweight music player" (spawn "deadbeef")) []
@@ -67,7 +67,7 @@ treeselectAction a = TS.treeselectAction a
, Node (TS.TSNode "Pianobar" "A terminal Pandora client" (spawn (myTerminal ++ " -e pianobar"))) []
, Node (TS.TSNode "VLC" "Multimedia player and server" (spawn "vlc")) []
]
, Node (TS.TSNode "Office" "office applications" (return ()))
, Node (TS.TSNode "+ Office" "office applications" (return ()))
[ Node (TS.TSNode "LibreOffice" "Open source office suite" (spawn "libreoffice")) []
, Node (TS.TSNode "LibreOffice Base" "Desktop database front end" (spawn "lobase")) []
, Node (TS.TSNode "LibreOffice Calc" "Spreadsheet program" (spawn "localc")) []
@@ -77,11 +77,11 @@ treeselectAction a = TS.treeselectAction a
, Node (TS.TSNode "LibreOffice Writer" "Word processor" (spawn "lowriter")) []
, Node (TS.TSNode "Zathura" "PDF Viewer" (spawn "zathura")) []
]
, Node (TS.TSNode "Programming" "programming and scripting tools" (return ()))
, Node (TS.TSNode "+ Programming" "programming and scripting tools" (return ()))
[ Node (TS.TSNode "Emacs" "Doom Emacs launched as client" (spawn "emacsclient -c -a emacs")) []
, Node (TS.TSNode "Python" "Python interactive prompt" (spawn (myTerminal ++ " -e python"))) []
]
, Node (TS.TSNode "System" "system tools and utilities" (return ()))
, Node (TS.TSNode "+ System" "system tools and utilities" (return ()))
[ Node (TS.TSNode "Alacritty" "GPU accelerated terminal" (spawn "alacritty")) []
, Node (TS.TSNode "Dired" "Emacs file manager" (spawn "xxx")) []
, Node (TS.TSNode "Etcher" "USB stick writer" (spawn "xxx")) []
@@ -97,36 +97,36 @@ treeselectAction a = TS.treeselectAction a
, Node (TS.TSNode "Vifm" "Vim-like file manager" (spawn (myTerminal ++ " -e vifm"))) []
]
, Node (TS.TSNode "------------------------" "" (spawn "xdotool key Escape")) []
, Node (TS.TSNode "Bookmarks" "a list of web bookmarks" (return ()))
[ Node (TS.TSNode "Linux" "a list of web bookmarks" (return ()))
[ Node (TS.TSNode "Arch Linux" "btw, i use arch!" (return ()))
, Node (TS.TSNode "+ Bookmarks" "a list of web bookmarks" (return ()))
[ Node (TS.TSNode "+ Linux" "a list of web bookmarks" (return ()))
[ Node (TS.TSNode "+ Arch Linux" "btw, i use arch!" (return ()))
[ Node (TS.TSNode "Arch Linux" "Arch Linux homepage" (spawn (myBrowser ++ "https://www.archlinux.org/"))) []
, Node (TS.TSNode "Arch Wiki" "The best Linux wiki" (spawn (myBrowser ++ "https://wiki.archlinux.org/"))) []
, Node (TS.TSNode "AUR" "Arch User Repository" (spawn (myBrowser ++ "https://aur.archlinux.org/"))) []
, Node (TS.TSNode "Arch Forums" "Arch Linux web forum" (spawn (myBrowser ++ "https://bbs.archlinux.org/"))) []
]
, Node (TS.TSNode "Linux News" "linux news and blogs" (return ()))
, Node (TS.TSNode "+ Linux News" "linux news and blogs" (return ()))
[ Node (TS.TSNode "DistroWatch" "Linux distro release announcments" (spawn (myBrowser ++ "https://distrowatch.com/"))) []
, Node (TS.TSNode "LXer" "LXer linux news aggregation" (spawn (myBrowser ++ "http://lxer.com"))) []
, Node (TS.TSNode "OMG Ubuntu" "Ubuntu news, apps and reviews" (spawn (myBrowser ++ "https://www.omgubuntu.co.uk"))) []
]
, Node (TS.TSNode "Window Managers" "window manager documentation" (return ()))
, Node (TS.TSNode "+ Window Managers" "window manager documentation" (return ()))
[ Node (TS.TSNode "Awesome" "awesomewm documentation" (return ()))
[ Node (TS.TSNode "Awesome" "Homepage for awesome wm" (spawn (myBrowser ++ "https://awesomewm.org/"))) []
, Node (TS.TSNode "Awesome GitHub" "The GutHub page for awesome" (spawn (myBrowser ++ "https://github.com/awesomeWM/awesome"))) []
, Node (TS.TSNode "r/awesome" "Subreddit for awesome" (spawn (myBrowser ++ "https://www.reddit.com/r/awesomewm/"))) []
]
, Node (TS.TSNode "Dwm" "dwm documentation" (return ()))
, Node (TS.TSNode "+ Dwm" "dwm documentation" (return ()))
[ Node (TS.TSNode "Dwm" "Dynamic window manager" (spawn (myBrowser ++ "https://dwm.suckless.org/"))) []
, Node (TS.TSNode "Dwmblocks" "Modular status bar for dwm" (spawn (myBrowser ++ "https://github.com/torrinfail/dwmblocks"))) []
, Node (TS.TSNode "r/suckless" "Subreddit for suckless software" (spawn (myBrowser ++ "https://www.reddit.com/r/suckless//"))) []
]
, Node (TS.TSNode "Qtile" "qtile documentation" (return ()))
, Node (TS.TSNode "+ Qtile" "qtile documentation" (return ()))
[ Node (TS.TSNode "Qtile" "Tiling window manager in Python" (spawn (myBrowser ++ "http://www.qtile.org"))) []
, Node (TS.TSNode "Qtile GitHub" "The GitHub page for qtile" (spawn (myBrowser ++ "https://github.com/qtile/qtile"))) []
, Node (TS.TSNode "r/qtile" "Subreddit for qtile" (spawn (myBrowser ++ "https://www.reddit.com/r/qtile/"))) []
]
, Node (TS.TSNode "XMonad" "xmonad documentation" (return ()))
, Node (TS.TSNode "+ XMonad" "xmonad documentation" (return ()))
[ Node (TS.TSNode "XMonad" "Homepage for XMonad" (spawn (myBrowser ++ "http://xmonad.org"))) []
, Node (TS.TSNode "XMonad GitHub" "The GitHub page for XMonad" (spawn (myBrowser ++ "https://github.com/xmonad/xmonad"))) []
, Node (TS.TSNode "xmonad-contrib" "Third party extensions for XMonad" (spawn (myBrowser ++ "https://hackage.haskell.org/package/xmonad-contrib"))) []
@@ -135,51 +135,65 @@ treeselectAction a = TS.treeselectAction a
]
]
]
, Node (TS.TSNode "Emacs" "Emacs documentation" (return ()))
, Node (TS.TSNode "+ Emacs" "Emacs documentation" (return ()))
[ Node (TS.TSNode "GNU Emacs" "Extensible free/libre text editor" (spawn (myBrowser ++ "https://www.gnu.org/software/emacs/"))) []
, Node (TS.TSNode "Doom Emacs" "Emacs distribution with sane defaults" (spawn (myBrowser ++ "https://github.com/hlissner/doom-emacs"))) []
, Node (TS.TSNode "r/emacs" "M-x emacs-reddit" (spawn (myBrowser ++ "https://www.reddit.com/r/emacs/"))) []
, Node (TS.TSNode "EmacsWiki" "EmacsWiki Site Map" (spawn (myBrowser ++ "https://www.emacswiki.org/emacs/SiteMap"))) []
, Node (TS.TSNode "Emacs StackExchange" "Q&A site for emacs" (spawn (myBrowser ++ "https://emacs.stackexchange.com/"))) []
]
, Node (TS.TSNode "Search and Reference" "Search engines, indices and wikis" (return ()))
, Node (TS.TSNode "+ Search and Reference" "Search engines, indices and wikis" (return ()))
[ Node (TS.TSNode "DuckDuckGo" "Privacy-oriented search engine" (spawn (myBrowser ++ "https://duckduckgo.com/"))) []
, Node (TS.TSNode "Google" "The evil search engine" (spawn (myBrowser ++ "http://www.google.com"))) []
, Node (TS.TSNode "Thesaurus" "Lookup synonyms and antonyms" (spawn (myBrowser ++ "https://www.thesaurus.com/"))) []
, Node (TS.TSNode "Wikipedia" "The free encyclopedia" (spawn (myBrowser ++ "https://www.wikipedia.org/"))) []
]
, Node (TS.TSNode "Programming" "programming and scripting" (return ()))
, Node (TS.TSNode "+ Programming" "programming and scripting" (return ()))
[ Node (TS.TSNode "Bash and Shell Scripting" "shell scripting documentation" (return ()))
[ Node (TS.TSNode "GNU Bash" "Documentation for bash" (spawn (myBrowser ++ "https://www.gnu.org/software/bash/manual/"))) []
, Node (TS.TSNode "r/bash" "Subreddit for bash" (spawn (myBrowser ++ "https://www.reddit.com/r/bash/"))) []
, Node (TS.TSNode "r/commandline" "Subreddit for the command line" (spawn (myBrowser ++ "https://www.reddit.com/r/commandline/"))) []
, Node (TS.TSNode "Learn Shell" "Interactive shell tutorial" (spawn (myBrowser ++ "https://www.learnshell.org/"))) []
]
, Node (TS.TSNode "Elisp" "emacs lisp documentation" (return ()))
, Node (TS.TSNode "+ Elisp" "emacs lisp documentation" (return ()))
[ Node (TS.TSNode "Emacs Lisp" "Reference manual for elisp" (spawn (myBrowser ++ "https://www.gnu.org/software/emacs/manual/html_node/elisp/"))) []
, Node (TS.TSNode "Learn Elisp in Y Minutes" "Single webpage for elisp basics" (spawn (myBrowser ++ "https://learnxinyminutes.com/docs/elisp/"))) []
, Node (TS.TSNode "r/Lisp" "Subreddit for lisp languages" (spawn (myBrowser ++ "https://www.reddit.com/r/lisp/"))) []
]
, Node (TS.TSNode "Haskell" "haskell documentation" (return ()))
, Node (TS.TSNode "+ Haskell" "haskell documentation" (return ()))
[ Node (TS.TSNode "Haskell.org" "Homepage for haskell" (spawn (myBrowser ++ "http://www.haskell.org"))) []
, Node (TS.TSNode "Hoogle" "Haskell API search engine" (spawn "https://hoogle.haskell.org/")) []
, Node (TS.TSNode "r/haskell" "Subreddit for haskell" (spawn (myBrowser ++ "https://www.reddit.com/r/Python/"))) []
, Node (TS.TSNode "Haskell on StackExchange" "Newest haskell topics on StackExchange" (spawn (myBrowser ++ "https://stackoverflow.com/questions/tagged/haskell"))) []
]
, Node (TS.TSNode "Python" "python documentation" (return ()))
, Node (TS.TSNode "+ Python" "python documentation" (return ()))
[ Node (TS.TSNode "Python.org" "Homepage for python" (spawn (myBrowser ++ "https://www.python.org/"))) []
, Node (TS.TSNode "r/Python" "Subreddit for python" (spawn (myBrowser ++ "https://www.reddit.com/r/Python/"))) []
, Node (TS.TSNode "Python on StackExchange" "Newest python topics on StackExchange" (spawn (myBrowser ++ "https://stackoverflow.com/questions/tagged/python"))) []
]
]
, Node (TS.TSNode "Vim" "vim and neovim documentation" (return ()))
, Node (TS.TSNode "+ Vim" "vim and neovim documentation" (return ()))
[ Node (TS.TSNode "Vim.org" "Vim, the ubiquitous text editor" (spawn (myBrowser ++ "https://www.vim.org/"))) []
, Node (TS.TSNode "r/Vim" "Subreddit for vim" (spawn (myBrowser ++ "https://www.reddit.com/r/vim/"))) []
, Node (TS.TSNode "Vi/m StackExchange" "Vi/m related questions" (spawn (myBrowser ++ "https://vi.stackexchange.com/"))) []
]
]
, Node (TS.TSNode "Config Files" "config files that edit often" (return ()))
[ Node (TS.TSNode "alacritty" "alacritty terminal emulator" (spawn (myEditor ++ "/home/dt/.config/alacritty/alacritty.yml"))) []
, Node (TS.TSNode "+ Config Files" "config files that edit often" (return ()))
[ Node (TS.TSNode "+ xmobar configs" "My xmobar config files" (return ()))
[ Node (TS.TSNode "xmobar mon1" "status bar on monitor 1" (spawn (myEditor ++ "/home/dt/.config/xmobar/xmobarrc0"))) []
, Node (TS.TSNode "xmobar mon2" "status bar on monitor 2" (spawn (myEditor ++ "/home/dt/.config/xmobar/xmobarrc2"))) []
, Node (TS.TSNode "xmobar mon3" "status bar on monitor 3" (spawn (myEditor ++ "/home/dt/.config/xmobar/xmobarrc1"))) []
]
, Node (TS.TSNode "+ xmonad configs" "My xmonad config files" (return ()))
[ Node (TS.TSNode "xmonad.hs" "My XMonad Main" (spawn (myEditor ++ "/home/dt/.xmonad/xmonad.hs"))) []
, Node (TS.TSNode "MyGridMenu.hs" "My XMonad GridSelect menu" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyGridMenu.hs"))) []
, Node (TS.TSNode "MyKeys.hs" "My XMonad keybindings" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyKeys.hs"))) []
, Node (TS.TSNode "MyPrompts.hs" "My XMonad prompts" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyPrompts.hs"))) []
, Node (TS.TSNode "MyScratchpads.hs" "My XMonad named scratchpads" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyScratchpads.hs"))) []
, Node (TS.TSNode "MyTreeMenu.hs" "My XMonad TreeSelect menu" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyTreeMenu.hs"))) []
, Node (TS.TSNode "MyVariables.hs" "My XMonad variables" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyVariables.hs"))) []
]
, Node (TS.TSNode "alacritty" "alacritty terminal emulator" (spawn (myEditor ++ "/home/dt/.config/alacritty/alacritty.yml"))) []
, Node (TS.TSNode "awesome" "awesome window manager" (spawn (myEditor ++ "/home/dt/.config/awesome/rc.lua"))) []
, Node (TS.TSNode "bashrc" "the bourne again shell" (spawn (myEditor ++ "/home/dt/.bashrc"))) []
, Node (TS.TSNode "bspwmrc" "binary space partitioning window manager" (spawn (myEditor ++ "/home/dt/.config/bspwm/bspwmrc"))) []
@@ -198,30 +212,16 @@ treeselectAction a = TS.treeselectAction a
, Node (TS.TSNode "sxhkdrc" "simple X hotkey daemon" (spawn (myEditor ++ "/home/dt/.config/sxhkd/sxhkdrc"))) []
, Node (TS.TSNode "surf config.h" "surf web browser" (spawn (myEditor ++ "/home/dt/surf-distrotube/config.h"))) []
, Node (TS.TSNode "tabbed config.h" "generic tabbed interface" (spawn (myEditor ++ "home/dt/tabbed-distrotube/config.h"))) []
, Node (TS.TSNode "xmobar configs" "My xmobar config files" (return ()))
[ Node (TS.TSNode "xmobar mon1" "status bar on monitor 1" (spawn (myEditor ++ "/home/dt/.config/xmobar/xmobarrc0"))) []
, Node (TS.TSNode "xmobar mon2" "status bar on monitor 2" (spawn (myEditor ++ "/home/dt/.config/xmobar/xmobarrc2"))) []
, Node (TS.TSNode "xmobar mon3" "status bar on monitor 3" (spawn (myEditor ++ "/home/dt/.config/xmobar/xmobarrc1"))) []
]
, Node (TS.TSNode "XMonad configs" "My xmonad config files" (return ()))
[ Node (TS.TSNode "xmonad.hs" "My XMonad Main" (spawn (myEditor ++ "/home/dt/.xmonad/xmonad.hs"))) []
, Node (TS.TSNode "MyGridMenu.hs" "My XMonad GridSelect menu" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyGridMenu.hs"))) []
, Node (TS.TSNode "MyKeys.hs" "My XMonad keybindings" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyKeys.hs"))) []
, Node (TS.TSNode "MyPrompts.hs" "My XMonad prompts" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyPrompts.hs"))) []
, Node (TS.TSNode "MyScratchpads.hs" "My XMonad named scratchpads" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyScratchpads.hs"))) []
, Node (TS.TSNode "MyTreeMenu.hs" "My XMonad TreeSelect menu" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyTreeMenu.hs"))) []
, Node (TS.TSNode "MyVariables.hs" "My XMonad variables" (spawn (myEditor ++ "/home/dt/.xmonad/lib/Custom/MyVariables.hs"))) []
]
, Node (TS.TSNode "xresources" "xresources file" (spawn (myEditor ++ "/home/dt/.Xresources"))) []
, Node (TS.TSNode "zshrc" "Config for the z shell" (spawn (myEditor ++ "/home/dt/.zshrc"))) []
]
, Node (TS.TSNode "Screenshots" "take a screenshot" (return ()))
, Node (TS.TSNode "+ Screenshots" "take a screenshot" (return ()))
[ Node (TS.TSNode "Quick fullscreen" "take screenshot immediately" (spawn "scrot -d 1 ~/scrot/%Y-%m-%d-@%H-%M-%S-scrot.png")) []
, Node (TS.TSNode "Delayed fullscreen" "take screenshot in 5 secs" (spawn "scrot -d 5 ~/scrot/%Y-%m-%d-@%H-%M-%S-scrot.png")) []
, Node (TS.TSNode "Section screenshot" "take screenshot of section" (spawn "scrot -s ~/scrot/%Y-%m-%d-@%H-%M-%S-scrot.png")) []
]
, Node (TS.TSNode "------------------------" "" (spawn "xdotool key Escape")) []
, Node (TS.TSNode "XMonad" "window manager commands" (return ()))
, Node (TS.TSNode "+ XMonad" "window manager commands" (return ()))
[ Node (TS.TSNode "Recompile" "Recompile XMonad" (spawn "xmonad --recompile")) []
, Node (TS.TSNode "Restart" "Restart XMonad" (spawn "xmonad --restart")) []
, Node (TS.TSNode "Quit" "Restart XMonad" (io exitSuccess)) []

View File

@@ -21,6 +21,7 @@
-- Custom (my personal configs)
import Custom.MyGridMenu
import Custom.MyKeys
import Custom.MyLayouts
import Custom.MyPrompts
import Custom.MyScratchpads
import Custom.MyTreeMenu
@@ -42,27 +43,6 @@ import XMonad.Hooks.ServerMode
import XMonad.Hooks.SetWMName
import XMonad.Hooks.WorkspaceHistory
-- Layouts
import XMonad.Layout.GridVariants (Grid(Grid))
import XMonad.Layout.SimplestFloat
import XMonad.Layout.Spiral
import XMonad.Layout.ResizableTile
import XMonad.Layout.Tabbed
import XMonad.Layout.ThreeColumns
-- Layouts modifiers
import XMonad.Layout.LayoutModifier
import XMonad.Layout.LimitWindows (limitWindows, increaseLimit, decreaseLimit)
import XMonad.Layout.Magnifier
import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??))
import XMonad.Layout.MultiToggle.Instances (StdTransformers(NBFULL, MIRROR, NOBORDERS))
import XMonad.Layout.NoBorders
import XMonad.Layout.Renamed (renamed, Rename(Replace))
import XMonad.Layout.ShowWName
import XMonad.Layout.Spacing
import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..))
import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle))
-- Utilities
import XMonad.Util.EZConfig (additionalKeysP)
import XMonad.Util.NamedScratchpad
@@ -83,29 +63,6 @@ myStartupHook = do
-- spawnOnce "kak -d -s mysession &"
setWMName "LG3D"
------------------------------------------------------------------------
-- MENUS FOR GRIDSELECT AND TREESELECT
------------------------------------------------------------------------
-- The lists below are actually 3-tuples for use with gridSelect and treeSelect.
-- TreeSelect uses all three values in the 3-tuples but GridSelect only needs first
-- two values in each list (see myAppGrid, myBookmarkGrid and myConfigGrid below).
myBookmarks :: [(String, String, String)]
myBookmarks = [ ("DistroTube.com", myBrowser ++ "https://www.distrotube.com", "Official website for DistroTube")
, ("DistroWatch", myBrowser ++ "https://www.distrowatch.com", "DistroWatch Release Announcements")
, ("Arch Linux", myBrowser ++ "https://www.archlinux.org/", "Official website for Arch Linux")
, ("Arch User Repository", myBrowser ++ "https://aur.archlinux.org/", "The Arch User Repository AUR")
, ("Arch Wiki", myBrowser ++ "https://wiki.archlinux.org/", "The Arch Wiki")
, ("LBRY", myBrowser ++ "https://lbry.tv/@DistroTube:2", "DistroTube on LBRY")
, ("GitLab", myBrowser ++ "https://gitlab.com/dwt1", "GitLab Page for DistroTube")
, ("Patreon", myBrowser ++ "https://www.patreon.com/distrotube", "DT on Patreon")
, ("Diaspora", myBrowser ++ "https://diasp.org/stream", "DT on Diaspora")
, ("Mastodon", myBrowser ++ "https://mastodon.technology/web/accounts/85897", "DT on Mastodon")
, ("Reddit", myBrowser ++ "https://www.reddit.com/r/distrotube/", "r/DistroTube")
, ("YouTube", myBrowser ++ "https://www.youtube.com/c/DistroTube?view_as=subscriber", "DT on YouTube")
]
------------------------------------------------------------------------
-- WORKSPACES
------------------------------------------------------------------------
@@ -165,90 +122,6 @@ myLogHook :: X ()
myLogHook = fadeInactiveLogHook fadeAmount
where fadeAmount = 1.0
------------------------------------------------------------------------
-- LAYOUTS
------------------------------------------------------------------------
-- Makes setting the spacingRaw simpler to write. The spacingRaw
-- module adds a configurable amount of space around windows.
mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
-- Below is a variation of the above except no borders are applied
-- if fewer than two windows. So a single window has no gaps.
mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True
-- Defining a bunch of layouts, many that I don't use.
tall = renamed [Replace "tall"]
$ limitWindows 12
$ mySpacing 8
$ ResizableTall 1 (3/100) (1/2) []
magnify = renamed [Replace "magnify"]
$ magnifier
$ limitWindows 12
$ mySpacing 8
$ ResizableTall 1 (3/100) (1/2) []
monocle = renamed [Replace "monocle"]
$ limitWindows 20 Full
floats = renamed [Replace "floats"]
$ limitWindows 20 simplestFloat
grid = renamed [Replace "grid"]
$ limitWindows 12
$ mySpacing 8
$ mkToggle (single MIRROR)
$ Grid (16/10)
spirals = renamed [Replace "spirals"]
$ mySpacing' 8
$ spiral (6/7)
threeCol = renamed [Replace "threeCol"]
$ limitWindows 7
$ mySpacing' 4
$ ThreeCol 1 (3/100) (1/2)
threeRow = renamed [Replace "threeRow"]
$ limitWindows 7
$ mySpacing' 4
-- Mirror takes a layout and rotates it by 90 degrees.
-- So we are applying Mirror to the ThreeCol layout.
$ Mirror
$ ThreeCol 1 (3/100) (1/2)
tabs = renamed [Replace "tabs"]
-- I cannot add spacing to this layout because it will
-- add spacing between window and tabs which looks bad.
$ tabbed shrinkText myTabConfig
where
myTabConfig = def { fontName = "xft:Mononoki Nerd Font:regular:pixelsize=11"
, activeColor = "#292d3e"
, inactiveColor = "#3e445e"
, activeBorderColor = "#292d3e"
, inactiveBorderColor = "#292d3e"
, activeTextColor = "#ffffff"
, inactiveTextColor = "#d0d0d0"
}
-- Theme for showWName which prints current workspace when you change workspaces.
myShowWNameTheme :: SWNConfig
myShowWNameTheme = def
{ swn_font = "xft:Sans:bold:size=60"
, swn_fade = 1.0
, swn_bgcolor = "#000000"
, swn_color = "#FFFFFF"
}
-- The layout hook
myLayoutHook = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts floats $
mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout
where
-- I've commented out the layouts I don't use.
myDefaultLayout = tall
||| magnify
||| noBorders monocle
||| floats
-- ||| grid
||| noBorders tabs
-- ||| spirals
-- ||| threeCol
-- ||| threeRow
------------------------------------------------------------------------
-- MAIN
------------------------------------------------------------------------