diff --git a/.xmonad/README.org b/.xmonad/README.org index 244e260..b798e7d 100644 --- a/.xmonad/README.org +++ b/.xmonad/README.org @@ -8,19 +8,10 @@ - [[#variables][Variables]] - [[#autostart][Autostart]] - [[#gridselect][Gridselect]] -- [[#treeselect][Treeselect]] - - [[#treeselect-menu-entries][Treeselect Menu Entries]] - - [[#treeselect-settings][Treeselect Settings]] -- [[#xprompts][Xprompts]] - - [[#xprompt-settings][Xprompt Settings]] - - [[#custom-prompts][Custom Prompts]] - - [[#xprompt-keymap][Xprompt Keymap]] - - [[#search-engines][Search Engines]] - [[#scratchpads][Scratchpads]] - [[#layouts][Layouts]] - [[#workspaces][Workspaces]] - [[#managehook][Managehook]] -- [[#loghook][Loghook]] - [[#keybindings][Keybindings]] - [[#main][Main]] @@ -51,12 +42,11 @@ import qualified XMonad.StackSet as W -- Actions import XMonad.Actions.CopyWindow (kill1) -import XMonad.Actions.CycleWS (moveTo, shiftTo, WSType(..), nextScreen, prevScreen) +import XMonad.Actions.CycleWS (Direction1D(..), moveTo, shiftTo, WSType(..), nextScreen, prevScreen) import XMonad.Actions.GridSelect import XMonad.Actions.MouseResize import XMonad.Actions.Promote import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown) -import qualified XMonad.Actions.TreeSelect as TS import XMonad.Actions.WindowGo (runOrRaise) import XMonad.Actions.WithAll (sinkAll, killAll) import qualified XMonad.Actions.Search as S @@ -72,7 +62,6 @@ import qualified Data.Map as M -- Hooks import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..)) import XMonad.Hooks.EwmhDesktops -- for some fullscreen events, also for xcomposite in obs. -import XMonad.Hooks.FadeInactive import XMonad.Hooks.ManageDocks (avoidStruts, docksEventHook, manageDocks, ToggleStruts(..)) import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat) import XMonad.Hooks.ServerMode @@ -104,19 +93,6 @@ import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..)) import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle)) import qualified XMonad.Layout.MultiToggle as MT (Toggle(..)) - -- Prompt -import XMonad.Prompt -import XMonad.Prompt.ConfirmPrompt -import XMonad.Prompt.Input -import XMonad.Prompt.FuzzyMatch -import XMonad.Prompt.Man -import XMonad.Prompt.Pass -import XMonad.Prompt.Shell -import XMonad.Prompt.Ssh -import XMonad.Prompt.Unicode -import XMonad.Prompt.XMonad -import Control.Arrow (first) - -- Utilities import XMonad.Util.Dmenu import XMonad.Util.EZConfig (additionalKeysP) @@ -136,30 +112,29 @@ myEmojiFont :: String myEmojiFont = "xft:JoyPixels:regular:size=9:antialias=true:hinting=true" myModMask :: KeyMask -myModMask = mod4Mask -- Sets modkey to super/windows key +myModMask = mod4Mask -- Sets modkey to super/windows key myTerminal :: String -myTerminal = "alacritty" -- Sets default terminal +myTerminal = "alacritty" -- Sets default terminal myBrowser :: String -myBrowser = "qutebrowser " -- Sets qutebrowser as browser for tree select --- myBrowser = myTerminal ++ " -e lynx " -- Sets lynx as browser for tree select +myBrowser = "qutebrowser " -- Sets qutebrowser as browser myEditor :: String -myEditor = "emacsclient -c -a emacs " -- Sets emacs as editor for tree select --- myEditor = myTerminal ++ " -e vim " -- Sets vim as editor for tree select +myEditor = "emacsclient -c -a emacs " -- Sets emacs as editor +-- myEditor = myTerminal ++ " -e vim " -- Sets vim as editor myBorderWidth :: Dimension -myBorderWidth = 2 -- Sets border width for windows +myBorderWidth = 2 -- Sets border width for windows myNormColor :: String -myNormColor = "#282c34" -- Border color of normal windows +myNormColor = "#282c34" -- Border color of normal windows myFocusColor :: String -myFocusColor = "#46d9ff" -- Border color of focused windows +myFocusColor = "#46d9ff" -- Border color of focused windows altMask :: KeyMask -altMask = mod1Mask -- Setting this for use in xprompts +altMask = mod1Mask -- Setting this for use in xprompts windowCount :: X (Maybe String) windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset @@ -232,464 +207,6 @@ myAppGrid = [ ("Audacity", "audacity") ] #+END_SRC -* Treeselect -TreeSelect displays your workspaces or actions in a Tree-like format. You can select desired workspace/action with the cursor or hjkl keys. My TreeSelect menu is rather large and includes a mixture of applications, web bookmarks, configuration files and xmonad actions. - -** Treeselect Menu Entries -#+BEGIN_SRC haskell -treeselectAction :: TS.TSConfig (X ()) -> X () -treeselectAction a = TS.treeselectAction a - [ 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 "Picom Toggle on/off" "Compositor for window managers" (spawn "killall picom; picom --experimental-backend")) [] - , 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 "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 "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 "+ 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 "emacsclient -c -a '' --eval '(elfeed)'")) [] - , Node (TS.TSNode "Firefox" "Open source web browser" (spawn "firefox")) [] - , Node (TS.TSNode "Mastodon" "An Emacs mastodon client" (spawn "emacsclient -c -a '' --eval '(mastodon)'")) [] - , Node (TS.TSNode "Mu4e" "An Emacs email client" (spawn "emacsclient -c -a '' --eval '(mu4e)'")) [] - , Node (TS.TSNode "Nextcloud" "File syncing desktop utility" (spawn "nextcloud")) [] - , Node (TS.TSNode "Qutebrowser" "Minimal web browser" (spawn "qutebrowser")) [] - , Node (TS.TSNode "Surf Browser" "Suckless surf web browser" (spawn "surf")) [] - , Node (TS.TSNode "Thunderbird" "Open source email client" (spawn "thunderbird")) [] - , 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 "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")) [] - , Node (TS.TSNode "EMMS" "Emacs multimedia player" (spawn "xxx")) [] - , Node (TS.TSNode "Kdenlive" "Open source non-linear video editor" (spawn "kdenlive")) [] - , Node (TS.TSNode "OBS Studio" "Open Broadcaster Software" (spawn "obs")) [] - , 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 "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")) [] - , Node (TS.TSNode "LibreOffice Draw" "Diagrams and sketches" (spawn "lodraw")) [] - , Node (TS.TSNode "LibreOffice Impress" "Presentation program" (spawn "loimpress")) [] - , Node (TS.TSNode "LibreOffice Math" "Formula editor" (spawn "lomath")) [] - , 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 "+ Emacs" "Emacs is more than a text editor" (return ())) - [ Node (TS.TSNode "Emacs Client" "Doom Emacs launched as client" (spawn "emacsclient -c -a emacs")) [] - , Node (TS.TSNode "M-x dired" "File manager for Emacs" (spawn "emacsclient -c -a '' --eval '(dired nil)'")) [] - , Node (TS.TSNode "M-x elfeed" "RSS client for Emacs" (spawn "emacsclient -c -a '' --eval '(elfeed)'")) [] - , Node (TS.TSNode "M-x emms" "Emacs" (spawn "emacsclient -c -a '' --eval '(emms)' --eval '(emms-play-directory-tree \"~/Music/Non-Classical/70s-80s/\")'")) [] - , Node (TS.TSNode "M-x erc" "IRC client for Emacs" (spawn "emacsclient -c -a '' --eval '(erc)'")) [] - , Node (TS.TSNode "M-x eshell" "The Eshell in Emacs" (spawn "emacsclient -c -a '' --eval '(eshell)'")) [] - , Node (TS.TSNode "M-x ibuffer" "Emacs buffer list" (spawn "emacsclient -c -a '' --eval '(ibuffer)'")) [] - , Node (TS.TSNode "M-x mastodon" "Emacs" (spawn "emacsclient -c -a '' --eval '(mastodon)'")) [] - , Node (TS.TSNode "M-x mu4e" "Email client for Emacs" (spawn "emacsclient -c -a '' --eval '(mu4e)'")) [] - , Node (TS.TSNode "M-x vterm" "Emacs" (spawn "emacsclient -c -a '' --eval '(+vterm/here nil))'")) [] - ] - , Node (TS.TSNode "Python" "Python interactive prompt" (spawn (myTerminal ++ " -e python"))) [] - ] - , Node (TS.TSNode "+ System" "system tools and utilities" (return ())) - [ Node (TS.TSNode "Alacritty" "GPU accelerated terminal" (spawn "alacritty")) [] - , Node (TS.TSNode "Dired" "File manager for Emacs" (spawn "emacsclient -c -a '' --eval '(dired nil)'")) [] - , Node (TS.TSNode "Eshell" "The eshell in Emacs" (spawn "emacsclient -c -a '' --eval '(eshell)'")) [] - , Node (TS.TSNode "Gufw" "GUI uncomplicated firewall" (spawn "gufw")) [] - , Node (TS.TSNode "Htop" "Terminal process viewer" (spawn (myTerminal ++ " -e htop"))) [] - , Node (TS.TSNode "LXAppearance" "Customize look and feel; set GTK theme" (spawn "lxappearance")) [] - , Node (TS.TSNode "Nitrogen" "Wallpaper viewer and setter" (spawn "nitrogen")) [] - , Node (TS.TSNode "PCManFM" "Lightweight graphical file manager" (spawn "pcmanfm")) [] - , Node (TS.TSNode "Qt5ct" "Change your Qt theme" (spawn "qt5ct")) [] - , Node (TS.TSNode "Simple Terminal" "Suckless simple terminal" (spawn "st")) [] - , Node (TS.TSNode "Stress Terminal UI" "Stress your system" (spawn (myTerminal ++ " -e s-tui"))) [] - ] - , 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 "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 "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 "+ 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"))) [] - , Node (TS.TSNode "xmonad-ontrib GitHub" "The GitHub page for xmonad-contrib" (spawn (myBrowser ++ "https://github.com/xmonad/xmonad-contrib"))) [] - , Node (TS.TSNode "Xmobar" "Minimal text-based status bar" (spawn (myBrowser ++ "https://hackage.haskell.org/package/xmobar"))) [] - ] - ] - ] - , 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 "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 "+ 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 "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.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.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.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 "My Start Page" "Custom start page for browser" (spawn (myBrowser ++ "file://$HOME/.surf/html/homepage.html"))) [] - ] - , Node (TS.TSNode "+ Config Files" "config files that edit often" (return ())) - [ Node (TS.TSNode "+ doom emacs configs" "My doom emacs config files" (return ())) - [ Node (TS.TSNode "Doom Emacs config.org" "doom emacs config" (spawn (myEditor ++ "$HOME/.doom.d/config.org"))) [] - , Node (TS.TSNode "Doom Emacs init.el" "doom emacs init" (spawn (myEditor ++ "$HOME/.doom.d/init.el"))) [] - , Node (TS.TSNode "Doom Emacs packages.el" "doom emacs packages" (spawn (myEditor ++ "$HOME/.doom.d/packages.el"))) [] - , Node (TS.TSNode "Doom Emacs eshell aliases" "the aliases for use in eshell" (spawn (myEditor ++ "$HOME/.doom.d/aliases"))) [] - ] - , Node (TS.TSNode "+ xmobar configs" "My xmobar config files" (return ())) - [ Node (TS.TSNode "xmobar mon1" "status bar on monitor 1" (spawn (myEditor ++ "$HOME/.config/xmobar/xmobarrc0"))) [] - , Node (TS.TSNode "xmobar mon2" "status bar on monitor 2" (spawn (myEditor ++ "$HOME/.config/xmobar/xmobarrc2"))) [] - , Node (TS.TSNode "xmobar mon3" "status bar on monitor 3" (spawn (myEditor ++ "$HOME/.config/xmobar/xmobarrc1"))) [] - ] - , Node (TS.TSNode "+ xmonad configs" "My xmonad config files" (return ())) - [ Node (TS.TSNode "xmonad.hs" "My XMonad Main" (spawn (myEditor ++ "$HOME/.xmonad/xmonad.hs"))) [] - , Node (TS.TSNode "xmonadctl.hs" "The xmonadctl script" (spawn (myEditor ++ "$HOME/.xmonad/xmonadctl.hs"))) [] - ] - , Node (TS.TSNode "alacritty" "alacritty terminal emulator" (spawn (myEditor ++ "$HOME/.config/alacritty/alacritty.yml"))) [] - , Node (TS.TSNode "bashrc" "the bourne again shell" (spawn (myEditor ++ "$HOME/.bashrc"))) [] - , Node (TS.TSNode "dunst" "dunst notifications" (spawn (myEditor ++ "$HOME/.config/dunst/dunstrc"))) [] - , Node (TS.TSNode "fishrc" "the friendly interactive shell" (spawn (myEditor ++ "$HOME/.config/fish/config.fish"))) [] - , Node (TS.TSNode "neovim init.vim" "neovim text editor" (spawn (myEditor ++ "$HOME/.config/nvim/init.vim"))) [] - , Node (TS.TSNode "qutebrowser config.py" "qutebrowser web browser" (spawn (myEditor ++ "$HOME/.config/qutebrowser/config.py"))) [] - , Node (TS.TSNode "xresources" "xresources file" (spawn (myEditor ++ "$HOME/.Xresources"))) [] - , Node (TS.TSNode "zshrc" "Config for the z shell" (spawn (myEditor ++ "$HOME/.zshrc"))) [] - ] - , 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 "+ Get Help For..." "useful sites and videos for help" (return ())) - [ Node (TS.TSNode "+ Alacritty" "information about alacritty terminal" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 1")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 3")) [] - ] - , Node (TS.TSNode "+ Bash" "information about bash and scripting" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Emacs Lisp" "information about elisp programming" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Fish" "information about fish shell" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Haskell" "information about haskell programming" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Python" "information about python programming" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Qutebrowser" "information about qutebrowser" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ XMonad" "information about xmonad" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - ] - , Node (TS.TSNode "------------------------" "" (spawn "xdotool key Escape")) [] - , Node (TS.TSNode "+ XMonad Controls" "window manager commands" (return ())) - [ Node (TS.TSNode "+ View Workspaces" "View a specific workspace" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 1")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 3")) [] - , Node (TS.TSNode "View 3" "View workspace 3" (spawn "~/.xmonad/xmonadctl 5")) [] - , Node (TS.TSNode "View 4" "View workspace 4" (spawn "~/.xmonad/xmonadctl 7")) [] - , Node (TS.TSNode "View 5" "View workspace 5" (spawn "~/.xmonad/xmonadctl 9")) [] - , Node (TS.TSNode "View 6" "View workspace 6" (spawn "~/.xmonad/xmonadctl 11")) [] - , Node (TS.TSNode "View 7" "View workspace 7" (spawn "~/.xmonad/xmonadctl 13")) [] - , Node (TS.TSNode "View 8" "View workspace 8" (spawn "~/.xmonad/xmonadctl 15")) [] - , Node (TS.TSNode "View 9" "View workspace 9" (spawn "~/.xmonad/xmonadctl 17")) [] - ] - , Node (TS.TSNode "+ Shift Workspaces" "Send focused window to specific workspace" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - , Node (TS.TSNode "View 3" "View workspace 3" (spawn "~/.xmonad/xmonadctl 6")) [] - , Node (TS.TSNode "View 4" "View workspace 4" (spawn "~/.xmonad/xmonadctl 8")) [] - , Node (TS.TSNode "View 5" "View workspace 5" (spawn "~/.xmonad/xmonadctl 10")) [] - , Node (TS.TSNode "View 6" "View workspace 6" (spawn "~/.xmonad/xmonadctl 12")) [] - , Node (TS.TSNode "View 7" "View workspace 7" (spawn "~/.xmonad/xmonadctl 14")) [] - , Node (TS.TSNode "View 8" "View workspace 8" (spawn "~/.xmonad/xmonadctl 16")) [] - , Node (TS.TSNode "View 9" "View workspace 9" (spawn "~/.xmonad/xmonadctl 18")) [] - ] - , Node (TS.TSNode "Next layout" "Switch to next layout" (spawn "~/.xmonad/xmonadctl next-layout")) [] - , 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)) [] - ] - ] - #+END_SRC - -** Treeselect Settings -Configuration options for the treeSelect menus. Keybindings for treeSelect menus. Use h-j-k-l to navigate. Use 'o' and 'i' to move forward/back in the workspace history. Single KEY's are for top-level nodes. SUPER+KEY are for the second-level nodes. SUPER+ALT+KEY are third-level nodes. - - #+BEGIN_SRC haskell -tsDefaultConfig :: TS.TSConfig a -tsDefaultConfig = TS.TSConfig { TS.ts_hidechildren = True - , TS.ts_background = 0xdd282c34 - , TS.ts_font = myFont - , TS.ts_node = (0xffd0d0d0, 0xff1c1f24) - , TS.ts_nodealt = (0xffd0d0d0, 0xff282c34) - , TS.ts_highlight = (0xffffffff, 0xff755999) - , TS.ts_extra = 0xffd0d0d0 - , TS.ts_node_width = 200 - , TS.ts_node_height = 20 - , TS.ts_originX = 100 - , TS.ts_originY = 100 - , TS.ts_indent = 80 - , TS.ts_navigate = myTreeNavigation - } - -myTreeNavigation = M.fromList - [ ((0, xK_Escape), TS.cancel) - , ((0, xK_Return), TS.select) - , ((0, xK_space), TS.select) - , ((0, xK_Up), TS.movePrev) - , ((0, xK_Down), TS.moveNext) - , ((0, xK_Left), TS.moveParent) - , ((0, xK_Right), TS.moveChild) - , ((0, xK_k), TS.movePrev) - , ((0, xK_j), TS.moveNext) - , ((0, xK_h), TS.moveParent) - , ((0, xK_l), TS.moveChild) - , ((0, xK_o), TS.moveHistBack) - , ((0, xK_i), TS.moveHistForward) - , ((0, xK_a), TS.moveTo ["+ Accessories"]) - , ((0, xK_e), TS.moveTo ["+ Games"]) - , ((0, xK_g), TS.moveTo ["+ Graphics"]) - , ((0, xK_i), TS.moveTo ["+ Internet"]) - , ((0, xK_m), TS.moveTo ["+ Multimedia"]) - , ((0, xK_o), TS.moveTo ["+ Office"]) - , ((0, xK_p), TS.moveTo ["+ Programming"]) - , ((0, xK_s), TS.moveTo ["+ System"]) - , ((0, xK_b), TS.moveTo ["+ Bookmarks"]) - , ((0, xK_c), TS.moveTo ["+ Config Files"]) - , ((0, xK_r), TS.moveTo ["+ Screenshots"]) - , ((mod4Mask, xK_l), TS.moveTo ["+ Bookmarks", "+ Linux"]) - , ((mod4Mask, xK_e), TS.moveTo ["+ Bookmarks", "+ Emacs"]) - , ((mod4Mask, xK_s), TS.moveTo ["+ Bookmarks", "+ Search and Reference"]) - , ((mod4Mask, xK_p), TS.moveTo ["+ Bookmarks", "+ Programming"]) - , ((mod4Mask, xK_v), TS.moveTo ["+ Bookmarks", "+ Vim"]) - , ((mod4Mask .|. altMask, xK_a), TS.moveTo ["+ Bookmarks", "+ Linux", "+ Arch Linux"]) - , ((mod4Mask .|. altMask, xK_n), TS.moveTo ["+ Bookmarks", "+ Linux", "+ Linux News"]) - , ((mod4Mask .|. altMask, xK_w), TS.moveTo ["+ Bookmarks", "+ Linux", "+ Window Managers"]) - ] -#+END_SRC - -* Xprompts -** Xprompt Settings -The XMonad.Prompt module is useful for writing graphical prompts for XMonad. There are several readily available prompts that we can use, including: -+ shellPrompt - A standard run prompt similar to dmenu. -+ manPrompt - Searches for a program's manpage. -+ passPrompt - Retrieve passwords from pass, the Unix password manager. -+ passGeneratePrompt - Generates a password for pass. -+ passRemovePrompt - Removes a password from pass. -+ sshPrompt - A prompt for ssh connections. -+ xmonadPrompt - A prompt for XMonad commands. - -You can write your own prompts if you know some Haskell. Some custom prompts include: -+ calcPrompt - A simple calculator prompt that uses qalculate. -+ editPrompt - A prompt for opening files in your editor. - -#+BEGIN_SRC haskell -dtXPConfig :: XPConfig -dtXPConfig = def - { font = myFont - , bgColor = "#282c34" - , fgColor = "#bbc2cf" - , bgHLight = "#c792ea" - , fgHLight = "#000000" - , borderColor = "#535974" - , promptBorderWidth = 0 - , promptKeymap = dtXPKeymap - , position = Top - -- , position = CenteredAt { xpCenterY = 0.3, xpWidth = 0.3 } - , height = 23 - , historySize = 256 - , historyFilter = id - , defaultText = [] - , autoComplete = Just 100000 -- set Just 100000 for .1 sec - , showCompletionOnTab = False - -- , searchPredicate = isPrefixOf - , searchPredicate = fuzzyMatch - , defaultPrompter = id $ map toUpper -- change prompt to UPPER - -- , defaultPrompter = unwords . map reverse . words -- reverse the prompt - -- , defaultPrompter = drop 5 .id (++ "XXXX: ") -- drop first 5 chars of prompt and add XXXX: - , alwaysHighlight = True - , maxComplRows = Nothing -- set to 'Just 5' for 5 rows - } - --- The same config above minus the autocomplete feature which is annoying --- on certain Xprompts, like the search engine prompts. -dtXPConfig' :: XPConfig -dtXPConfig' = dtXPConfig - { autoComplete = Nothing - } - -emojiXPConfig :: XPConfig -emojiXPConfig = dtXPConfig - { font = myEmojiFont - } -#+END_SRC - -** Custom Prompts -*** calcPrompt -calcPrompt requires a cli-calculator called qalculate-gtk (it also has a GUI frontend but we won't be using that for the prompt). You could use this as a template for other custom prompts that use command line programs that return a single line of output. - -#+BEGIN_SRC haskell -calcPrompt c ans = - inputPrompt c (trim ans) ?+ \input -> - liftIO(runProcessWithInput "qalc" [input] "") >>= calcPrompt c - where - trim = f . f - where f = reverse . dropWhile isSpace -#+END_SRC - -** Xprompt Keymap -Emacs-like key bindings for xprompts. - -#+BEGIN_SRC haskell -dtXPKeymap :: M.Map (KeyMask,KeySym) (XP ()) -dtXPKeymap = M.fromList $ - map (first $ (,) controlMask) -- control + - [ (xK_z, killBefore) -- kill line backwards - , (xK_k, killAfter) -- kill line forwards - , (xK_a, startOfLine) -- move to the beginning of the line - , (xK_e, endOfLine) -- move to the end of the line - , (xK_m, deleteString Next) -- delete a character foward - , (xK_b, moveCursor Prev) -- move cursor forward - , (xK_f, moveCursor Next) -- move cursor backward - , (xK_BackSpace, killWord Prev) -- kill the previous word - , (xK_y, pasteString) -- paste a string - , (xK_g, quit) -- quit out of prompt - , (xK_bracketleft, quit) - ] - ++ - map (first $ (,) altMask) -- meta key + - [ (xK_BackSpace, killWord Prev) -- kill the prev word - , (xK_f, moveWord Next) -- move a word forward - , (xK_b, moveWord Prev) -- move a word backward - , (xK_d, killWord Next) -- kill the next word - , (xK_n, moveHistory W.focusUp') -- move up thru history - , (xK_p, moveHistory W.focusDown') -- move down thru history - ] - ++ - map (first $ (,) 0) -- - [ (xK_Return, setSuccess True >> setDone True) - , (xK_KP_Enter, setSuccess True >> setDone True) - , (xK_BackSpace, deleteString Prev) - , (xK_Delete, deleteString Next) - , (xK_Left, moveCursor Prev) - , (xK_Right, moveCursor Next) - , (xK_Home, startOfLine) - , (xK_End, endOfLine) - , (xK_Down, moveHistory W.focusUp') - , (xK_Up, moveHistory W.focusDown') - , (xK_Escape, quit) - ] -#+END_SRC - -** Search Engines -Xmonad has several search engines available to use located in XMonad.Actions.Search. Additionally, you can add other search engines such as those listed below. - -#+BEGIN_SRC haskell -archwiki, ebay, news, reddit, urban, yacy :: S.SearchEngine - -archwiki = S.searchEngine "archwiki" "https://wiki.archlinux.org/index.php?search=" -ebay = S.searchEngine "ebay" "https://www.ebay.com/sch/i.html?_nkw=" -news = S.searchEngine "news" "https://news.google.com/search?q=" -reddit = S.searchEngine "reddit" "https://www.reddit.com/search/?q=" -urban = S.searchEngine "urban" "https://www.urbandictionary.com/define.php?term=" -yacy = S.searchEngine "yacy" "http://localhost:8090/yacysearch.html?query=" - --- This is the list of search engines that I want to use. Some are from --- XMonad.Actions.Search, and some are the ones that I added above. -searchList :: [(String, S.SearchEngine)] -searchList = [ ("a", archwiki) - , ("d", S.duckduckgo) - , ("e", ebay) - , ("g", S.google) - , ("h", S.hoogle) - , ("i", S.images) - , ("n", news) - , ("r", reddit) - , ("s", S.stackage) - , ("t", S.thesaurus) - , ("v", S.vocabulary) - , ("b", S.wayback) - , ("u", urban) - , ("w", S.wikipedia) - , ("y", S.youtube) - , ("S-y", yacy) - , ("z", S.amazon) - ] -#+END_SRC - * Scratchpads Allows to have several floating scratchpads running different applications. Import Util.NamedScratchpad and bind a key to namedScratchpadSpawnAction. In the example below, I create two named scratchpads: (1) a scratchpad for my terminal, and (2) a scratchpad for moc which is a terminal music player. @@ -699,16 +216,16 @@ myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm , NS "mocp" spawnMocp findMocp manageMocp ] where - spawnTerm = myTerminal ++ " -n scratchpad" - findTerm = resource =? "scratchpad" + spawnTerm = myTerminal ++ " -t scratchpad" + findTerm = title =? "scratchpad" manageTerm = customFloating $ W.RationalRect l t w h where h = 0.9 w = 0.9 t = 0.95 -h l = 0.95 -w - spawnMocp = myTerminal ++ " -n mocp 'mocp'" - findMocp = resource =? "mocp" + spawnMocp = myTerminal ++ " -t mocp -e mocp" + findMocp = title =? "mocp" manageMocp = customFloating $ W.RationalRect l t w h where h = 0.9 @@ -831,7 +348,7 @@ I have made my workspaces in xmobar "clickable." Clickable workspaces means the #+begin_src haskell -- myWorkspaces = [" 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 "] -myWorkspaces = [" dev ", " www ", " sys ", " doc ", " vbox ", " chat ", " mus ", " vid ", " gfx "] +myWorkspaces = [" dev ", " www ", " sys ", " doc ", " vbox ", " chat ", " mus ", " vid ", " gfx "] -- ++ ["NSP"] myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y) clickable ws = ""++ws++"" @@ -857,15 +374,6 @@ myManageHook = composeAll ] <+> namedScratchpadManageHook myScratchPads #+END_SRC -* Loghook -Sets opacity for inactive (unfocused) windows. I prefer to not use this feature so I've set opacity to 1.0. If you want opacity, set this to a value of less than 1 (such as 0.9 for 90% opacity). - -#+BEGIN_SRC haskell -myLogHook :: X () -myLogHook = fadeInactiveLogHook fadeAmount - where fadeAmount = 1.0 -#+END_SRC - * Keybindings I am using the Xmonad.Util.EZConfig module which allows keybindings to be written in simpler, emacs-like format. The Super/Windows key is 'M' (the modkey). The ALT key is 'M1'. SHIFT is 'S' and CTR is 'C'. @@ -900,23 +408,22 @@ myKeys = -- Xmonad [ ("M-C-r", spawn "xmonad --recompile") -- Recompiles xmonad , ("M-S-r", spawn "xmonad --restart") -- Restarts xmonad - , ("M-S-q", confirmPrompt dtXPConfig' "exit" $ io exitSuccess) -- Quits xmonad + , ("M-S-q", io exitSuccess) -- Quits xmonad -- Run Prompt - , ("M-S-", shellPrompt dtXPConfig) -- Xmonad Shell Prompt - -- , ("M-S-", spawn "dmenu_run -i -p \"Run: \"") -- Dmenu - -- , ("M-S-", spawn "rofi -show drun -config ~/.config/rofi/themes/dt-dmenu.rasi -display-drun \"Run: \" -drun-display-format \"{name}\"") -- Rofi + , ("M-S-", spawn "dmenu_run -i -p \"Run: \"") -- Dmenu -- Other Prompts - , ("M-p c", calcPrompt dtXPConfig' "qalc") -- calcPrompt - , ("M-p m", manPrompt dtXPConfig) -- manPrompt - , ("M-p p", passPrompt dtXPConfig) -- passPrompt - , ("M-p g", passGeneratePrompt dtXPConfig) -- passGeneratePrompt - , ("M-p r", passRemovePrompt dtXPConfig) -- passRemovePrompt - , ("M-p s", sshPrompt dtXPConfig) -- sshPrompt - , ("M-p u", mkUnicodePrompt "xsel" ["-b"] "/home/dt/.xmonad/UnicodeData.txt" emojiXPConfig) -- unicodePrompt (for copying emojis) - , ("M-p x", xmonadPrompt dtXPConfig) -- xmonadPrompt - , ("M-p q", confirmPrompt dtXPConfig "exit" $ io exitSuccess) -- xmonadPrompt + , ("M-p c", spawn "/home/dt/dmscripts/dcolors") -- pick color from our scheme + , ("M-p e", spawn "/home/dt/dmscripts/dmconf") -- edit config files + , ("M-p i", spawn "/home/dt/dmscripts/dmscrot") -- screenshots (images) + , ("M-p k", spawn "/home/dt/dmscripts/dmkill") -- kill processes + , ("M-p m", spawn "/home/dt/dmscripts/dman") -- manpages + , ("M-p o", spawn "/home/dt/dmscripts/dmqute") -- open qutebrowser bookmarks, quickmarks and history + , ("M-p p", spawn "passmenu") -- passmenu + , ("M-p q", spawn "/home/dt/dmscripts/dmlogout") -- logout menu + , ("M-p r", spawn "/home/dt/dmscripts/dmred") -- reddio (a reddit viewer) + , ("M-p s", spawn "/home/dt/dmscripts/dmsearch") -- search various search engines -- Useful programs to have a keybinding for launch , ("M-", spawn (myTerminal)) @@ -949,9 +456,6 @@ myKeys = , ("C-g t", goToSelected $ mygridConfig myColorizer) -- goto selected window , ("C-g b", bringSelected $ mygridConfig myColorizer) -- bring selected window - -- Tree Select - , ("C-t t", treeselectAction tsDefaultConfig) - -- Windows navigation , ("M-m", windows W.focusMaster) -- Move focus to the master window , ("M-j", windows W.focusDown) -- Move focus to the next window @@ -1032,13 +536,9 @@ myKeys = , ("", spawn "toggleeject") , ("", spawn "scrotd 0") ] - -- Appending search engine prompts to keybindings list. - -- Look at "search engines" section of this config for values for "k". - ++ [("M-s " ++ k, S.promptSearch dtXPConfig' f) | (k,f) <- searchList ] - ++ [("M-S-s " ++ k, S.selectSearch f) | (k,f) <- searchList ] -- The following lines are needed for named scratchpads. - where nonNSP = WSIs (return (\ws -> W.tag ws /= "nsp")) - nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "nsp")) + where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP")) + nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "NSP")) #+END_SRC * Main @@ -1072,7 +572,7 @@ main = do , borderWidth = myBorderWidth , normalBorderColor = myNormColor , focusedBorderColor = myFocusColor - , logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP + , logHook = dynamicLogWithPP $ namedScratchpadFilterOutWorkspacePP $ xmobarPP { ppOutput = \x -> hPutStrLn xmproc0 x >> hPutStrLn xmproc1 x >> hPutStrLn xmproc2 x , ppCurrent = xmobarColor "#98be65" "" . wrap "[" "]" -- Current workspace in xmobar , ppVisible = xmobarColor "#98be65" "" . clickable -- Visible but not current workspace diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs index 3a51a84..95d0e44 100644 --- a/.xmonad/xmonad.hs +++ b/.xmonad/xmonad.hs @@ -7,12 +7,11 @@ import qualified XMonad.StackSet as W -- Actions import XMonad.Actions.CopyWindow (kill1) -import XMonad.Actions.CycleWS (moveTo, shiftTo, WSType(..), nextScreen, prevScreen) +import XMonad.Actions.CycleWS (Direction1D(..), moveTo, shiftTo, WSType(..), nextScreen, prevScreen) import XMonad.Actions.GridSelect import XMonad.Actions.MouseResize import XMonad.Actions.Promote import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown) -import qualified XMonad.Actions.TreeSelect as TS import XMonad.Actions.WindowGo (runOrRaise) import XMonad.Actions.WithAll (sinkAll, killAll) import qualified XMonad.Actions.Search as S @@ -28,7 +27,6 @@ import qualified Data.Map as M -- Hooks import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..)) import XMonad.Hooks.EwmhDesktops -- for some fullscreen events, also for xcomposite in obs. -import XMonad.Hooks.FadeInactive import XMonad.Hooks.ManageDocks (avoidStruts, docksEventHook, manageDocks, ToggleStruts(..)) import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat) import XMonad.Hooks.ServerMode @@ -60,19 +58,6 @@ import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..)) import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle)) import qualified XMonad.Layout.MultiToggle as MT (Toggle(..)) - -- Prompt -import XMonad.Prompt -import XMonad.Prompt.ConfirmPrompt -import XMonad.Prompt.Input -import XMonad.Prompt.FuzzyMatch -import XMonad.Prompt.Man -import XMonad.Prompt.Pass -import XMonad.Prompt.Shell -import XMonad.Prompt.Ssh -import XMonad.Prompt.Unicode -import XMonad.Prompt.XMonad -import Control.Arrow (first) - -- Utilities import XMonad.Util.Dmenu import XMonad.Util.EZConfig (additionalKeysP) @@ -87,30 +72,29 @@ myEmojiFont :: String myEmojiFont = "xft:JoyPixels:regular:size=9:antialias=true:hinting=true" myModMask :: KeyMask -myModMask = mod4Mask -- Sets modkey to super/windows key +myModMask = mod4Mask -- Sets modkey to super/windows key myTerminal :: String -myTerminal = "alacritty" -- Sets default terminal +myTerminal = "alacritty" -- Sets default terminal myBrowser :: String -myBrowser = "qutebrowser " -- Sets qutebrowser as browser for tree select --- myBrowser = myTerminal ++ " -e lynx " -- Sets lynx as browser for tree select +myBrowser = "qutebrowser " -- Sets qutebrowser as browser myEditor :: String -myEditor = "emacsclient -c -a emacs " -- Sets emacs as editor for tree select --- myEditor = myTerminal ++ " -e vim " -- Sets vim as editor for tree select +myEditor = "emacsclient -c -a emacs " -- Sets emacs as editor +-- myEditor = myTerminal ++ " -e vim " -- Sets vim as editor myBorderWidth :: Dimension -myBorderWidth = 2 -- Sets border width for windows +myBorderWidth = 2 -- Sets border width for windows myNormColor :: String -myNormColor = "#282c34" -- Border color of normal windows +myNormColor = "#282c34" -- Border color of normal windows myFocusColor :: String -myFocusColor = "#46d9ff" -- Border color of focused windows +myFocusColor = "#46d9ff" -- Border color of focused windows altMask :: KeyMask -altMask = mod1Mask -- Setting this for use in xprompts +altMask = mod1Mask -- Setting this for use in xprompts windowCount :: X (Maybe String) windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset @@ -172,435 +156,21 @@ myAppGrid = [ ("Audacity", "audacity") , ("PCManFM", "pcmanfm") ] -treeselectAction :: TS.TSConfig (X ()) -> X () -treeselectAction a = TS.treeselectAction a - [ 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 "Picom Toggle on/off" "Compositor for window managers" (spawn "killall picom; picom --experimental-backend")) [] - , 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 "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 "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 "+ 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 "emacsclient -c -a '' --eval '(elfeed)'")) [] - , Node (TS.TSNode "Firefox" "Open source web browser" (spawn "firefox")) [] - , Node (TS.TSNode "Mastodon" "An Emacs mastodon client" (spawn "emacsclient -c -a '' --eval '(mastodon)'")) [] - , Node (TS.TSNode "Mu4e" "An Emacs email client" (spawn "emacsclient -c -a '' --eval '(mu4e)'")) [] - , Node (TS.TSNode "Nextcloud" "File syncing desktop utility" (spawn "nextcloud")) [] - , Node (TS.TSNode "Qutebrowser" "Minimal web browser" (spawn "qutebrowser")) [] - , Node (TS.TSNode "Surf Browser" "Suckless surf web browser" (spawn "surf")) [] - , Node (TS.TSNode "Thunderbird" "Open source email client" (spawn "thunderbird")) [] - , 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 "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")) [] - , Node (TS.TSNode "EMMS" "Emacs multimedia player" (spawn "xxx")) [] - , Node (TS.TSNode "Kdenlive" "Open source non-linear video editor" (spawn "kdenlive")) [] - , Node (TS.TSNode "OBS Studio" "Open Broadcaster Software" (spawn "obs")) [] - , 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 "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")) [] - , Node (TS.TSNode "LibreOffice Draw" "Diagrams and sketches" (spawn "lodraw")) [] - , Node (TS.TSNode "LibreOffice Impress" "Presentation program" (spawn "loimpress")) [] - , Node (TS.TSNode "LibreOffice Math" "Formula editor" (spawn "lomath")) [] - , 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 "+ Emacs" "Emacs is more than a text editor" (return ())) - [ Node (TS.TSNode "Emacs Client" "Doom Emacs launched as client" (spawn "emacsclient -c -a emacs")) [] - , Node (TS.TSNode "M-x dired" "File manager for Emacs" (spawn "emacsclient -c -a '' --eval '(dired nil)'")) [] - , Node (TS.TSNode "M-x elfeed" "RSS client for Emacs" (spawn "emacsclient -c -a '' --eval '(elfeed)'")) [] - , Node (TS.TSNode "M-x emms" "Emacs" (spawn "emacsclient -c -a '' --eval '(emms)' --eval '(emms-play-directory-tree \"~/Music/Non-Classical/70s-80s/\")'")) [] - , Node (TS.TSNode "M-x erc" "IRC client for Emacs" (spawn "emacsclient -c -a '' --eval '(erc)'")) [] - , Node (TS.TSNode "M-x eshell" "The Eshell in Emacs" (spawn "emacsclient -c -a '' --eval '(eshell)'")) [] - , Node (TS.TSNode "M-x ibuffer" "Emacs buffer list" (spawn "emacsclient -c -a '' --eval '(ibuffer)'")) [] - , Node (TS.TSNode "M-x mastodon" "Emacs" (spawn "emacsclient -c -a '' --eval '(mastodon)'")) [] - , Node (TS.TSNode "M-x mu4e" "Email client for Emacs" (spawn "emacsclient -c -a '' --eval '(mu4e)'")) [] - , Node (TS.TSNode "M-x vterm" "Emacs" (spawn "emacsclient -c -a '' --eval '(+vterm/here nil))'")) [] - ] - , Node (TS.TSNode "Python" "Python interactive prompt" (spawn (myTerminal ++ " -e python"))) [] - ] - , Node (TS.TSNode "+ System" "system tools and utilities" (return ())) - [ Node (TS.TSNode "Alacritty" "GPU accelerated terminal" (spawn "alacritty")) [] - , Node (TS.TSNode "Dired" "File manager for Emacs" (spawn "emacsclient -c -a '' --eval '(dired nil)'")) [] - , Node (TS.TSNode "Eshell" "The eshell in Emacs" (spawn "emacsclient -c -a '' --eval '(eshell)'")) [] - , Node (TS.TSNode "Gufw" "GUI uncomplicated firewall" (spawn "gufw")) [] - , Node (TS.TSNode "Htop" "Terminal process viewer" (spawn (myTerminal ++ " -e htop"))) [] - , Node (TS.TSNode "LXAppearance" "Customize look and feel; set GTK theme" (spawn "lxappearance")) [] - , Node (TS.TSNode "Nitrogen" "Wallpaper viewer and setter" (spawn "nitrogen")) [] - , Node (TS.TSNode "PCManFM" "Lightweight graphical file manager" (spawn "pcmanfm")) [] - , Node (TS.TSNode "Qt5ct" "Change your Qt theme" (spawn "qt5ct")) [] - , Node (TS.TSNode "Simple Terminal" "Suckless simple terminal" (spawn "st")) [] - , Node (TS.TSNode "Stress Terminal UI" "Stress your system" (spawn (myTerminal ++ " -e s-tui"))) [] - ] - , 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 "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 "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 "+ 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"))) [] - , Node (TS.TSNode "xmonad-ontrib GitHub" "The GitHub page for xmonad-contrib" (spawn (myBrowser ++ "https://github.com/xmonad/xmonad-contrib"))) [] - , Node (TS.TSNode "Xmobar" "Minimal text-based status bar" (spawn (myBrowser ++ "https://hackage.haskell.org/package/xmobar"))) [] - ] - ] - ] - , 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 "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 "+ 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 "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.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.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.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 "My Start Page" "Custom start page for browser" (spawn (myBrowser ++ "file://$HOME/.surf/html/homepage.html"))) [] - ] - , Node (TS.TSNode "+ Config Files" "config files that edit often" (return ())) - [ Node (TS.TSNode "+ doom emacs configs" "My doom emacs config files" (return ())) - [ Node (TS.TSNode "Doom Emacs config.org" "doom emacs config" (spawn (myEditor ++ "$HOME/.doom.d/config.org"))) [] - , Node (TS.TSNode "Doom Emacs init.el" "doom emacs init" (spawn (myEditor ++ "$HOME/.doom.d/init.el"))) [] - , Node (TS.TSNode "Doom Emacs packages.el" "doom emacs packages" (spawn (myEditor ++ "$HOME/.doom.d/packages.el"))) [] - , Node (TS.TSNode "Doom Emacs eshell aliases" "the aliases for use in eshell" (spawn (myEditor ++ "$HOME/.doom.d/aliases"))) [] - ] - , Node (TS.TSNode "+ xmobar configs" "My xmobar config files" (return ())) - [ Node (TS.TSNode "xmobar mon1" "status bar on monitor 1" (spawn (myEditor ++ "$HOME/.config/xmobar/xmobarrc0"))) [] - , Node (TS.TSNode "xmobar mon2" "status bar on monitor 2" (spawn (myEditor ++ "$HOME/.config/xmobar/xmobarrc2"))) [] - , Node (TS.TSNode "xmobar mon3" "status bar on monitor 3" (spawn (myEditor ++ "$HOME/.config/xmobar/xmobarrc1"))) [] - ] - , Node (TS.TSNode "+ xmonad configs" "My xmonad config files" (return ())) - [ Node (TS.TSNode "xmonad.hs" "My XMonad Main" (spawn (myEditor ++ "$HOME/.xmonad/xmonad.hs"))) [] - , Node (TS.TSNode "xmonadctl.hs" "The xmonadctl script" (spawn (myEditor ++ "$HOME/.xmonad/xmonadctl.hs"))) [] - ] - , Node (TS.TSNode "alacritty" "alacritty terminal emulator" (spawn (myEditor ++ "$HOME/.config/alacritty/alacritty.yml"))) [] - , Node (TS.TSNode "bashrc" "the bourne again shell" (spawn (myEditor ++ "$HOME/.bashrc"))) [] - , Node (TS.TSNode "dunst" "dunst notifications" (spawn (myEditor ++ "$HOME/.config/dunst/dunstrc"))) [] - , Node (TS.TSNode "fishrc" "the friendly interactive shell" (spawn (myEditor ++ "$HOME/.config/fish/config.fish"))) [] - , Node (TS.TSNode "neovim init.vim" "neovim text editor" (spawn (myEditor ++ "$HOME/.config/nvim/init.vim"))) [] - , Node (TS.TSNode "qutebrowser config.py" "qutebrowser web browser" (spawn (myEditor ++ "$HOME/.config/qutebrowser/config.py"))) [] - , Node (TS.TSNode "xresources" "xresources file" (spawn (myEditor ++ "$HOME/.Xresources"))) [] - , Node (TS.TSNode "zshrc" "Config for the z shell" (spawn (myEditor ++ "$HOME/.zshrc"))) [] - ] - , 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 "+ Get Help For..." "useful sites and videos for help" (return ())) - [ Node (TS.TSNode "+ Alacritty" "information about alacritty terminal" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 1")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 3")) [] - ] - , Node (TS.TSNode "+ Bash" "information about bash and scripting" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Emacs Lisp" "information about elisp programming" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Fish" "information about fish shell" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Haskell" "information about haskell programming" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Python" "information about python programming" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ Qutebrowser" "information about qutebrowser" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - , Node (TS.TSNode "+ XMonad" "information about xmonad" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - ] - ] - , Node (TS.TSNode "------------------------" "" (spawn "xdotool key Escape")) [] - , Node (TS.TSNode "+ XMonad Controls" "window manager commands" (return ())) - [ Node (TS.TSNode "+ View Workspaces" "View a specific workspace" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 1")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 3")) [] - , Node (TS.TSNode "View 3" "View workspace 3" (spawn "~/.xmonad/xmonadctl 5")) [] - , Node (TS.TSNode "View 4" "View workspace 4" (spawn "~/.xmonad/xmonadctl 7")) [] - , Node (TS.TSNode "View 5" "View workspace 5" (spawn "~/.xmonad/xmonadctl 9")) [] - , Node (TS.TSNode "View 6" "View workspace 6" (spawn "~/.xmonad/xmonadctl 11")) [] - , Node (TS.TSNode "View 7" "View workspace 7" (spawn "~/.xmonad/xmonadctl 13")) [] - , Node (TS.TSNode "View 8" "View workspace 8" (spawn "~/.xmonad/xmonadctl 15")) [] - , Node (TS.TSNode "View 9" "View workspace 9" (spawn "~/.xmonad/xmonadctl 17")) [] - ] - , Node (TS.TSNode "+ Shift Workspaces" "Send focused window to specific workspace" (return ())) - [ Node (TS.TSNode "View 1" "View workspace 1" (spawn "~/.xmonad/xmonadctl 2")) [] - , Node (TS.TSNode "View 2" "View workspace 2" (spawn "~/.xmonad/xmonadctl 4")) [] - , Node (TS.TSNode "View 3" "View workspace 3" (spawn "~/.xmonad/xmonadctl 6")) [] - , Node (TS.TSNode "View 4" "View workspace 4" (spawn "~/.xmonad/xmonadctl 8")) [] - , Node (TS.TSNode "View 5" "View workspace 5" (spawn "~/.xmonad/xmonadctl 10")) [] - , Node (TS.TSNode "View 6" "View workspace 6" (spawn "~/.xmonad/xmonadctl 12")) [] - , Node (TS.TSNode "View 7" "View workspace 7" (spawn "~/.xmonad/xmonadctl 14")) [] - , Node (TS.TSNode "View 8" "View workspace 8" (spawn "~/.xmonad/xmonadctl 16")) [] - , Node (TS.TSNode "View 9" "View workspace 9" (spawn "~/.xmonad/xmonadctl 18")) [] - ] - , Node (TS.TSNode "Next layout" "Switch to next layout" (spawn "~/.xmonad/xmonadctl next-layout")) [] - , 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)) [] - ] - ] - -tsDefaultConfig :: TS.TSConfig a -tsDefaultConfig = TS.TSConfig { TS.ts_hidechildren = True - , TS.ts_background = 0xdd282c34 - , TS.ts_font = myFont - , TS.ts_node = (0xffd0d0d0, 0xff1c1f24) - , TS.ts_nodealt = (0xffd0d0d0, 0xff282c34) - , TS.ts_highlight = (0xffffffff, 0xff755999) - , TS.ts_extra = 0xffd0d0d0 - , TS.ts_node_width = 200 - , TS.ts_node_height = 20 - , TS.ts_originX = 100 - , TS.ts_originY = 100 - , TS.ts_indent = 80 - , TS.ts_navigate = myTreeNavigation - } - -myTreeNavigation = M.fromList - [ ((0, xK_Escape), TS.cancel) - , ((0, xK_Return), TS.select) - , ((0, xK_space), TS.select) - , ((0, xK_Up), TS.movePrev) - , ((0, xK_Down), TS.moveNext) - , ((0, xK_Left), TS.moveParent) - , ((0, xK_Right), TS.moveChild) - , ((0, xK_k), TS.movePrev) - , ((0, xK_j), TS.moveNext) - , ((0, xK_h), TS.moveParent) - , ((0, xK_l), TS.moveChild) - , ((0, xK_o), TS.moveHistBack) - , ((0, xK_i), TS.moveHistForward) - , ((0, xK_a), TS.moveTo ["+ Accessories"]) - , ((0, xK_e), TS.moveTo ["+ Games"]) - , ((0, xK_g), TS.moveTo ["+ Graphics"]) - , ((0, xK_i), TS.moveTo ["+ Internet"]) - , ((0, xK_m), TS.moveTo ["+ Multimedia"]) - , ((0, xK_o), TS.moveTo ["+ Office"]) - , ((0, xK_p), TS.moveTo ["+ Programming"]) - , ((0, xK_s), TS.moveTo ["+ System"]) - , ((0, xK_b), TS.moveTo ["+ Bookmarks"]) - , ((0, xK_c), TS.moveTo ["+ Config Files"]) - , ((0, xK_r), TS.moveTo ["+ Screenshots"]) - , ((mod4Mask, xK_l), TS.moveTo ["+ Bookmarks", "+ Linux"]) - , ((mod4Mask, xK_e), TS.moveTo ["+ Bookmarks", "+ Emacs"]) - , ((mod4Mask, xK_s), TS.moveTo ["+ Bookmarks", "+ Search and Reference"]) - , ((mod4Mask, xK_p), TS.moveTo ["+ Bookmarks", "+ Programming"]) - , ((mod4Mask, xK_v), TS.moveTo ["+ Bookmarks", "+ Vim"]) - , ((mod4Mask .|. altMask, xK_a), TS.moveTo ["+ Bookmarks", "+ Linux", "+ Arch Linux"]) - , ((mod4Mask .|. altMask, xK_n), TS.moveTo ["+ Bookmarks", "+ Linux", "+ Linux News"]) - , ((mod4Mask .|. altMask, xK_w), TS.moveTo ["+ Bookmarks", "+ Linux", "+ Window Managers"]) - ] - -dtXPConfig :: XPConfig -dtXPConfig = def - { font = myFont - , bgColor = "#282c34" - , fgColor = "#bbc2cf" - , bgHLight = "#c792ea" - , fgHLight = "#000000" - , borderColor = "#535974" - , promptBorderWidth = 0 - , promptKeymap = dtXPKeymap - , position = Top - -- , position = CenteredAt { xpCenterY = 0.3, xpWidth = 0.3 } - , height = 23 - , historySize = 256 - , historyFilter = id - , defaultText = [] - , autoComplete = Just 100000 -- set Just 100000 for .1 sec - , showCompletionOnTab = False - -- , searchPredicate = isPrefixOf - , searchPredicate = fuzzyMatch - , defaultPrompter = id $ map toUpper -- change prompt to UPPER - -- , defaultPrompter = unwords . map reverse . words -- reverse the prompt - -- , defaultPrompter = drop 5 .id (++ "XXXX: ") -- drop first 5 chars of prompt and add XXXX: - , alwaysHighlight = True - , maxComplRows = Nothing -- set to 'Just 5' for 5 rows - } - --- The same config above minus the autocomplete feature which is annoying --- on certain Xprompts, like the search engine prompts. -dtXPConfig' :: XPConfig -dtXPConfig' = dtXPConfig - { autoComplete = Nothing - } - -emojiXPConfig :: XPConfig -emojiXPConfig = dtXPConfig - { font = myEmojiFont - } - -calcPrompt c ans = - inputPrompt c (trim ans) ?+ \input -> - liftIO(runProcessWithInput "qalc" [input] "") >>= calcPrompt c - where - trim = f . f - where f = reverse . dropWhile isSpace - -dtXPKeymap :: M.Map (KeyMask,KeySym) (XP ()) -dtXPKeymap = M.fromList $ - map (first $ (,) controlMask) -- control + - [ (xK_z, killBefore) -- kill line backwards - , (xK_k, killAfter) -- kill line forwards - , (xK_a, startOfLine) -- move to the beginning of the line - , (xK_e, endOfLine) -- move to the end of the line - , (xK_m, deleteString Next) -- delete a character foward - , (xK_b, moveCursor Prev) -- move cursor forward - , (xK_f, moveCursor Next) -- move cursor backward - , (xK_BackSpace, killWord Prev) -- kill the previous word - , (xK_y, pasteString) -- paste a string - , (xK_g, quit) -- quit out of prompt - , (xK_bracketleft, quit) - ] - ++ - map (first $ (,) altMask) -- meta key + - [ (xK_BackSpace, killWord Prev) -- kill the prev word - , (xK_f, moveWord Next) -- move a word forward - , (xK_b, moveWord Prev) -- move a word backward - , (xK_d, killWord Next) -- kill the next word - , (xK_n, moveHistory W.focusUp') -- move up thru history - , (xK_p, moveHistory W.focusDown') -- move down thru history - ] - ++ - map (first $ (,) 0) -- - [ (xK_Return, setSuccess True >> setDone True) - , (xK_KP_Enter, setSuccess True >> setDone True) - , (xK_BackSpace, deleteString Prev) - , (xK_Delete, deleteString Next) - , (xK_Left, moveCursor Prev) - , (xK_Right, moveCursor Next) - , (xK_Home, startOfLine) - , (xK_End, endOfLine) - , (xK_Down, moveHistory W.focusUp') - , (xK_Up, moveHistory W.focusDown') - , (xK_Escape, quit) - ] - -archwiki, ebay, news, reddit, urban, yacy :: S.SearchEngine - -archwiki = S.searchEngine "archwiki" "https://wiki.archlinux.org/index.php?search=" -ebay = S.searchEngine "ebay" "https://www.ebay.com/sch/i.html?_nkw=" -news = S.searchEngine "news" "https://news.google.com/search?q=" -reddit = S.searchEngine "reddit" "https://www.reddit.com/search/?q=" -urban = S.searchEngine "urban" "https://www.urbandictionary.com/define.php?term=" -yacy = S.searchEngine "yacy" "http://localhost:8090/yacysearch.html?query=" - --- This is the list of search engines that I want to use. Some are from --- XMonad.Actions.Search, and some are the ones that I added above. -searchList :: [(String, S.SearchEngine)] -searchList = [ ("a", archwiki) - , ("d", S.duckduckgo) - , ("e", ebay) - , ("g", S.google) - , ("h", S.hoogle) - , ("i", S.images) - , ("n", news) - , ("r", reddit) - , ("s", S.stackage) - , ("t", S.thesaurus) - , ("v", S.vocabulary) - , ("b", S.wayback) - , ("u", urban) - , ("w", S.wikipedia) - , ("y", S.youtube) - , ("S-y", yacy) - , ("z", S.amazon) - ] - myScratchPads :: [NamedScratchpad] myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm , NS "mocp" spawnMocp findMocp manageMocp ] where - spawnTerm = myTerminal ++ " -n scratchpad" - findTerm = resource =? "scratchpad" + spawnTerm = myTerminal ++ " -t scratchpad" + findTerm = title =? "scratchpad" manageTerm = customFloating $ W.RationalRect l t w h where h = 0.9 w = 0.9 t = 0.95 -h l = 0.95 -w - spawnMocp = myTerminal ++ " -n mocp 'mocp'" - findMocp = resource =? "mocp" + spawnMocp = myTerminal ++ " -t mocp -e mocp" + findMocp = title =? "mocp" manageMocp = customFloating $ W.RationalRect l t w h where h = 0.9 @@ -713,7 +283,7 @@ myLayoutHook = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts float ||| threeRow -- myWorkspaces = [" 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 "] -myWorkspaces = [" dev ", " www ", " sys ", " doc ", " vbox ", " chat ", " mus ", " vid ", " gfx "] +myWorkspaces = [" dev ", " www ", " sys ", " doc ", " vbox ", " chat ", " mus ", " vid ", " gfx "] -- ++ ["NSP"] myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y) clickable ws = ""++ws++"" @@ -733,32 +303,27 @@ myManageHook = composeAll , (className =? "firefox" <&&> resource =? "Dialog") --> doFloat -- Float Firefox Dialog ] <+> namedScratchpadManageHook myScratchPads -myLogHook :: X () -myLogHook = fadeInactiveLogHook fadeAmount - where fadeAmount = 1.0 - myKeys :: [(String, X ())] myKeys = -- Xmonad [ ("M-C-r", spawn "xmonad --recompile") -- Recompiles xmonad , ("M-S-r", spawn "xmonad --restart") -- Restarts xmonad - , ("M-S-q", confirmPrompt dtXPConfig' "exit" $ io exitSuccess) -- Quits xmonad + , ("M-S-q", io exitSuccess) -- Quits xmonad -- Run Prompt - , ("M-S-", shellPrompt dtXPConfig) -- Xmonad Shell Prompt - -- , ("M-S-", spawn "dmenu_run -i -p \"Run: \"") -- Dmenu - -- , ("M-S-", spawn "rofi -show drun -config ~/.config/rofi/themes/dt-dmenu.rasi -display-drun \"Run: \" -drun-display-format \"{name}\"") -- Rofi + , ("M-S-", spawn "dmenu_run -i -p \"Run: \"") -- Dmenu -- Other Prompts - , ("M-p c", calcPrompt dtXPConfig' "qalc") -- calcPrompt - , ("M-p m", manPrompt dtXPConfig) -- manPrompt - , ("M-p p", passPrompt dtXPConfig) -- passPrompt - , ("M-p g", passGeneratePrompt dtXPConfig) -- passGeneratePrompt - , ("M-p r", passRemovePrompt dtXPConfig) -- passRemovePrompt - , ("M-p s", sshPrompt dtXPConfig) -- sshPrompt - , ("M-p u", mkUnicodePrompt "xsel" ["-b"] "/home/dt/.xmonad/UnicodeData.txt" emojiXPConfig) -- unicodePrompt (for copying emojis) - , ("M-p x", xmonadPrompt dtXPConfig) -- xmonadPrompt - , ("M-p q", confirmPrompt dtXPConfig "exit" $ io exitSuccess) -- xmonadPrompt + , ("M-p c", spawn "/home/dt/dmscripts/dcolors") -- pick color from our scheme + , ("M-p e", spawn "/home/dt/dmscripts/dmconf") -- edit config files + , ("M-p i", spawn "/home/dt/dmscripts/dmscrot") -- screenshots (images) + , ("M-p k", spawn "/home/dt/dmscripts/dmkill") -- kill processes + , ("M-p m", spawn "/home/dt/dmscripts/dman") -- manpages + , ("M-p o", spawn "/home/dt/dmscripts/dmqute") -- open qutebrowser bookmarks, quickmarks and history + , ("M-p p", spawn "passmenu") -- passmenu + , ("M-p q", spawn "/home/dt/dmscripts/dmlogout") -- logout menu + , ("M-p r", spawn "/home/dt/dmscripts/dmred") -- reddio (a reddit viewer) + , ("M-p s", spawn "/home/dt/dmscripts/dmsearch") -- search various search engines -- Useful programs to have a keybinding for launch , ("M-", spawn (myTerminal)) @@ -791,9 +356,6 @@ myKeys = , ("C-g t", goToSelected $ mygridConfig myColorizer) -- goto selected window , ("C-g b", bringSelected $ mygridConfig myColorizer) -- bring selected window - -- Tree Select - , ("C-t t", treeselectAction tsDefaultConfig) - -- Windows navigation , ("M-m", windows W.focusMaster) -- Move focus to the master window , ("M-j", windows W.focusDown) -- Move focus to the next window @@ -874,13 +436,9 @@ myKeys = , ("", spawn "toggleeject") , ("", spawn "scrotd 0") ] - -- Appending search engine prompts to keybindings list. - -- Look at "search engines" section of this config for values for "k". - ++ [("M-s " ++ k, S.promptSearch dtXPConfig' f) | (k,f) <- searchList ] - ++ [("M-S-s " ++ k, S.selectSearch f) | (k,f) <- searchList ] -- The following lines are needed for named scratchpads. - where nonNSP = WSIs (return (\ws -> W.tag ws /= "nsp")) - nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "nsp")) + where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP")) + nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "NSP")) main :: IO () main = do @@ -909,7 +467,7 @@ main = do , borderWidth = myBorderWidth , normalBorderColor = myNormColor , focusedBorderColor = myFocusColor - , logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP + , logHook = dynamicLogWithPP $ namedScratchpadFilterOutWorkspacePP $ xmobarPP { ppOutput = \x -> hPutStrLn xmproc0 x >> hPutStrLn xmproc1 x >> hPutStrLn xmproc2 x , ppCurrent = xmobarColor "#98be65" "" . wrap "[" "]" -- Current workspace in xmobar , ppVisible = xmobarColor "#98be65" "" . clickable -- Visible but not current workspace