diff --git a/.config/castero/castero.conf b/.config/castero/castero.conf
index 305688a..ca23685 100644
--- a/.config/castero/castero.conf
+++ b/.config/castero/castero.conf
@@ -25,10 +25,6 @@ retain_absent_episodes = False
# default: False
disable_vertical_borders = False
-# Disable the "Found x feeds with y total episodes..." default footer message.
-# default: False
-disable_default_status = False
-
# Whether to remove HTML tags from feed/episode descriptions.
# default: True
clean_html_descriptions = True
@@ -37,13 +33,32 @@ clean_html_descriptions = True
# default: False
right_align_time = False
+# The display refresh delay, in ms. Increase to reduce idle CPU usage.
+# default: 30
+refresh_delay = 30
+
# The external player to use for media playback.
# If the given player is not valid or a dependency is not met, the client will
# instead try to use the first valid interface.
# Available players (in order of precedence):
# mpv, vlc
# default: (blank)
-player =
+player =
+
+# The command to run when you press key_execute (default e). All instances of
+# the following tokens are replaced with the corresponding episode attributes:
+# {file} - the episode enclosure, usually a remote mp3 file
+# {title} - the episode name
+# {description} - the episode description
+# {link} - the link to the episode, which is often a blog post
+# {pubdate} - the publish date/time of the episode
+# {copyright} - the copyright of the episode
+# Most of these attributes have spaces, so you will probably want to enclose
+# the token with quotations.
+# For example, `firefox "{file}"` would open the file in Firefox.
+# The client executes the text you enter as a shell command. Use with caution!
+# default: (blank)
+execute_command =
[feeds]
@@ -58,7 +73,12 @@ reload_on_start = False
# to blank or whitespaces to disable -- the client will default to either
# $XDG_DATA_DIR, if set, otherwise ~/.local/share/castero/downloaded
# default: (blank)
-custom_download_dir =
+custom_download_dir =
+
+# The timeout for network requests, in seconds. The same value is used for
+# connection and read timeouts.
+# default: 3
+request_timeout = 3
[colors]
@@ -76,17 +96,28 @@ color_foreground = yellow
color_background = black
# The foreground (text) color of selected items.
-# default: white
+# default: black
color_foreground_alt = white
# The background color of selected items.
-# default: black
+# default: white
color_background_alt = black
# The foreground (text) color of marked items. Paired with color_background.
# default: green
color_foreground_dim = green
+# The foreground (text) color of status lines. Paired with color_background.
+# default: white
+color_foreground_status = white
+
+# The foreground (text) color of menu headings. Paired with color_background.
+# default: yellow
+color_foreground_heading = yellow
+
+# The foreground (text) color of dividers. Paired with color_background.
+# default: white
+color_foreground_dividers = white
[playback]
# The distance to move forward when pressing seek keys, in seconds.
@@ -97,6 +128,10 @@ seek_distance_forward = 30
# default: 10
seek_distance_backward = 10
+# The default playback speed. See also the rate_increase/rate_decrease keys.
+# default: 1.0
+default_playback_speed = 1.0
+
[keys]
# Keybindings for controlling the client. Entries may not be blank, but may
@@ -168,10 +203,17 @@ key_clear = c
# default: n
key_next = n
+# Execute a command on the selected episode. See also execute_command.
+key_execute = e
+
# Invert the order of the menu.
# default: i
key_invert = i
+# Filter the contents of the menu. Press again to clear the filter.
+# default: /
+key_filter = /
+
# Mark the episode as played/unplayed.
# default: i
key_mark_played = m
@@ -206,4 +248,8 @@ key_rate_increase = ]
# Decrease playback speed.
# default: [
-key_rate_decrease = [
\ No newline at end of file
+key_rate_decrease = [
+
+# Show episode URL.
+# default: u
+key_show_url = u
diff --git a/.config/xmobar/xmobarrc0 b/.config/xmobar/xmobarrc0
index 867c451..d6f1ffe 100755
--- a/.config/xmobar/xmobarrc0
+++ b/.config/xmobar/xmobarrc0
@@ -37,5 +37,5 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
]
, sepChar = "%"
, alignSep = "}{"
- , template = " | %UnsafeStdinReader% }{ | %uname% | %cpu% | %memory% | %disku% | %enp6s0% | %pacupdate% | %date% "
+ , template = " | %UnsafeStdinReader% }{ | %uname% | %cpu% | %memory% | %disku% | %enp6s0% | %pacupdate% | %date% "
}
diff --git a/.config/xmobar/xmobarrc1 b/.config/xmobar/xmobarrc1
index 7f60f38..2223e6c 100755
--- a/.config/xmobar/xmobarrc1
+++ b/.config/xmobar/xmobarrc1
@@ -37,5 +37,5 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
]
, sepChar = "%"
, alignSep = "}{"
- , template = " | %UnsafeStdinReader% }{ | %uname% | %cpu% | %memory% | %disku% | %enp6s0% | %pacupdate% | %date% "
+ , template = " | %UnsafeStdinReader% }{ | %uname% | %cpu% | %memory% | %disku% | %enp6s0% | %pacupdate% | %date% "
}
\ No newline at end of file
diff --git a/.config/xmobar/xmobarrc2 b/.config/xmobar/xmobarrc2
index 6b6082f..bda0b02 100755
--- a/.config/xmobar/xmobarrc2
+++ b/.config/xmobar/xmobarrc2
@@ -39,5 +39,5 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
]
, sepChar = "%"
, alignSep = "}{"
- , template = " | %UnsafeStdinReader% }{ | %uname% | %cpu% | %memory% | %disku% | %enp6s0% | %pacupdate% | %date% |%trayerpad%"
+ , template = " | %UnsafeStdinReader% }{ | %uname% | %cpu% | %memory% | %disku% | %enp6s0% | %pacupdate% | %date% |%trayerpad%"
}
diff --git a/.doom.d/config.el b/.doom.d/config.el
index dd0a02f..8c72313 100644
--- a/.doom.d/config.el
+++ b/.doom.d/config.el
@@ -68,6 +68,8 @@
(setq mastodon-instance-url "https://mastodon.technology")
+(setq md4rd-subs-active '(archlinux commandline DistroTube DoomEmacs emacs freesoftware lbry linux linux4noobs linuxmasterrace linnuxquestions orgmode qutebrowser suckless Ubuntu unixporn UsabilityPorn vim xmonad))
+
(custom-set-variables
'(elfeed-feeds
(quote
diff --git a/.doom.d/config.org b/.doom.d/config.org
index 5719738..9e0c92b 100644
--- a/.doom.d/config.org
+++ b/.doom.d/config.org
@@ -124,6 +124,10 @@ Image previews in dired
(setq mastodon-instance-url "https://mastodon.technology")
#+END_SRC
+#+BEGIN_SRC emacs-lisp
+(setq md4rd-subs-active '(archlinux commandline DistroTube DoomEmacs emacs freesoftware lbry linux linux4noobs linuxmasterrace linnuxquestions orgmode qutebrowser suckless Ubuntu unixporn UsabilityPorn vim xmonad))
+#+END_SRC
+
#+BEGIN_SRC emacs-lisp
(custom-set-variables
'(elfeed-feeds
diff --git a/.doom.d/packages.el b/.doom.d/packages.el
index 7c0893f..2cca9c1 100644
--- a/.doom.d/packages.el
+++ b/.doom.d/packages.el
@@ -54,3 +54,6 @@
(package! emojify)
(package! elfeed)
(package! peep-dired)
+(package! tldr)
+(package! treemacs)
+(package! md4rd)
diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs
index 9b78849..a5e27a2 100644
--- a/.xmonad/xmonad.hs
+++ b/.xmonad/xmonad.hs
@@ -5,38 +5,30 @@
-- My YouTube: http://www.youtube.com/c/DistroTube
-- My GitLab: http://www.gitlab.com/dwt1/
--- This config is massively long. It is purposely bloated with a ton of
--- examples of what you can do with xmonad. It is written more as a
--- study guide rather than a config that you should download and use.
+-- This config was getting massively long, so I have made this a modular
+-- config that sources multiple config files. Look under the imports for
+-- "Custom" modules. Those are my config files. Keep in mind, that my
+-- configs are purposely bloated with a ton of examples of what you can
+-- do with xmonad. It is written more as a study guide rather than a config
+-- that you should download and use.
------------------------------------------------------------------------
-- IMPORTS
------------------------------------------------------------------------
+
+ -- Custom (my personal configs)
+import Custom.MyGridMenu
+import Custom.MyKeys
+import Custom.MyPrompts
+import Custom.MyScratchpads
+import Custom.MyTreeMenu
+import Custom.MyVariables
+
-- Base
import XMonad
-import System.IO (hPutStrLn)
-import System.Exit (exitSuccess)
-import qualified XMonad.StackSet as W
-
- -- Actions
-import XMonad.Actions.CopyWindow (kill1, killAllOtherCopies)
-import XMonad.Actions.CycleWS (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
-
- -- Data
-import Data.Char (isSpace)
import Data.Monoid
-import Data.Maybe (isJust)
-import Data.Tree
-import qualified Data.Tuple.Extra as TE
-import qualified Data.Map as M
+import System.IO (hPutStrLn)
+import XMonad.Actions.MouseResize
-- Hooks
import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..))
@@ -68,18 +60,6 @@ import XMonad.Layout.ShowWName
import XMonad.Layout.Spacing
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.Input
-import XMonad.Prompt.FuzzyMatch
-import XMonad.Prompt.Man
-import XMonad.Prompt.Pass
-import XMonad.Prompt.Shell (shellPrompt)
-import XMonad.Prompt.Ssh
-import XMonad.Prompt.XMonad
-import Control.Arrow (first)
-- Utilities
import XMonad.Util.EZConfig (additionalKeysP)
@@ -87,44 +67,6 @@ import XMonad.Util.NamedScratchpad
import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe)
import XMonad.Util.SpawnOnce
-------------------------------------------------------------------------
--- VARIABLES
-------------------------------------------------------------------------
--- It's nice to assign values to stuff that you will use more than once
--- in the config. Setting values for things like font, terminal and editor
--- means you only have to change the value here to make changes globally.
-myFont :: String
-myFont = "xft:Mononoki Nerd Font:bold:size=9:antialias=true:hinting=true"
-
-myModMask :: KeyMask
-myModMask = mod4Mask -- Sets modkey to super/windows key
-
-myTerminal :: String
-myTerminal = "alacritty" -- Sets default terminal
-
-myBrowser :: String
-myBrowser = "qutebrowser " -- Sets firefox as browser for tree select
--- myBrowser = myTerminal ++ " -e lynx " -- Sets lynx as browser for tree select
-
-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
-
-myBorderWidth :: Dimension
-myBorderWidth = 2 -- Sets border width for windows
-
-myNormColor :: String
-myNormColor = "#292d3e" -- Border color of normal windows
-
-myFocusColor :: String
-myFocusColor = "#bbc5ff" -- Border color of focused windows
-
-altMask :: KeyMask
-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
-
------------------------------------------------------------------------
-- AUTOSTART
------------------------------------------------------------------------
@@ -140,61 +82,12 @@ myStartupHook = do
setWMName "LG3D"
------------------------------------------------------------------------
--- GRID SELECT
+-- MENUS FOR GRIDSELECT AND TREESELECT
------------------------------------------------------------------------
--- GridSelect displays items (programs, open windows, etc.) in a 2D grid
--- and lets the user select from it with the cursor/hjkl keys or the mouse.
-myColorizer :: Window -> Bool -> X (String, String)
-myColorizer = colorRangeFromClassName
- (0x29,0x2d,0x3e) -- lowest inactive bg
- (0x29,0x2d,0x3e) -- highest inactive bg
- (0xc7,0x92,0xea) -- active bg
- (0xc0,0xa7,0x9a) -- inactive fg
- (0x29,0x2d,0x3e) -- active fg
-
--- gridSelect menu layout
-mygridConfig :: p -> GSConfig Window
-mygridConfig colorizer = (buildDefaultGSConfig myColorizer)
- { gs_cellheight = 40
- , gs_cellwidth = 200
- , gs_cellpadding = 6
- , gs_originFractX = 0.5
- , gs_originFractY = 0.5
- , gs_font = myFont
- }
-
-spawnSelected' :: [(String, String)] -> X ()
-spawnSelected' lst = gridselect conf lst >>= flip whenJust spawn
- where conf = def
- { gs_cellheight = 40
- , gs_cellwidth = 200
- , gs_cellpadding = 6
- , gs_originFractX = 0.5
- , gs_originFractY = 0.5
- , gs_font = myFont
- }
-
-- 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).
-myApplications :: [(String, String, String)]
-myApplications = [ ("Audacity", "audacity", "Graphical cross-platform audio eidtor")
- , ("Deadbeef", "deadbeef", "Lightweight GUI audio player")
- , ("Emacs", "emacs", "Much more than a text editor")
- , ("Firefox", "firefox", "The famous open source web browser")
- , ("Geany", "geany", "A nice text editor")
- , ("Geary", "geary", "Email client that is attractive")
- , ("Gimp", "gimp", "Open source alternative to Photoshop")
- , ("Kdenlive", "kdenlive", "A great open source video editor")
- , ("LibreOffice Impress", "loimpress", "For making presentations")
- , ("LibreOffice Writer", "lowriter", "A fully featured word processor")
- , ("OBS", "obs", "Open broadcaster software")
- , ("PCManFM", "pcmanfm", "Lightweight graphical file manager")
- , ("Simple Terminal", "st", "Suckless simple terminal")
- , ("Steam", "steam", "Proprietary gaming platform")
- , ("Surf Browser", "surf suckless.org", "Suckless surf web browser")
- , ("Xonotic", "xonotic-glx", "A fast-paced first person shooter")
- ]
+
myBookmarks :: [(String, String, String)]
myBookmarks = [ ("DistroTube.com", myBrowser ++ "https://www.distrotube.com", "Official website for DistroTube")
@@ -211,236 +104,6 @@ myBookmarks = [ ("DistroTube.com", myBrowser ++ "https://www.distrotube.com", "O
, ("YouTube", myBrowser ++ "https://www.youtube.com/c/DistroTube?view_as=subscriber", "DT on YouTube")
]
-myConfigs :: [(String, String, String)]
-myConfigs = [ ("bashrc", myEditor ++ "/home/dt/.bashrc", "the bourne again shell")
- , ("doom emacs config.el", myEditor ++ "/home/dt/.doom.d/config.el", "doom emacs config")
- , ("doom emacs init.el", myEditor ++ "/home/dt/.doom.d/init.el", "doom emacs init")
- , ("dwm", myEditor ++ "/home/dt/dwm-distrotube/config.h", "dwm config file")
- , ("qtile", myEditor ++ "/home/dt/.config/qtile/config.py", "qtile config")
- , ("xmonad.hs", myEditor ++ "/home/dt/.xmonad/xmonad.hs", "xmonad config")
- , ("zshrc", myEditor ++ "/home/dt/.zshrc", "config for the z shell")
- ]
-
--- Let's take myApplications, myBookmarks and myConfigs and take only
--- the first two values from those 3-tuples (for GridSelect).
-myAppGrid :: [(String, String)]
-myAppGrid = [ (a,b) | (a,b,c) <- xs]
- where xs = myApplications
-
-myBookmarkGrid :: [(String, String)]
-myBookmarkGrid = [ (a,b) | (a,b,c) <- xs]
- where xs = myBookmarks
-
-myConfigGrid :: [(String, String)]
-myConfigGrid = [ (a,b) | (a,b,c) <- xs]
- where xs = myConfigs
-
-------------------------------------------------------------------------
--- TREE SELECT
-------------------------------------------------------------------------
--- TreeSelect displays your workspaces or actions in a Tree-like format.
--- You can select desired workspace/action with the cursor or hjkl keys.
-
-treeselectAction :: TS.TSConfig (X ()) -> X ()
-treeselectAction a = TS.treeselectAction a
- [ Node (TS.TSNode "applications" "a list of programs I use often" (return ()))
- [Node (TS.TSNode (TE.fst3 $ myApplications !! n)
- (TE.thd3 $ myApplications !! n)
- (spawn $ TE.snd3 $ myApplications !! n)
- ) [] | n <- [0..(length myApplications - 1)]
- ]
- , Node (TS.TSNode "bookmarks" "a list of web bookmarks" (return ()))
- [Node (TS.TSNode(TE.fst3 $ myBookmarks !! n)
- (TE.thd3 $ myBookmarks !! n)
- (spawn $ TE.snd3 $ myBookmarks !! n)
- ) [] | n <- [0..(length myBookmarks - 1)]
- ]
- , Node (TS.TSNode "config files" "config files that edit often" (return ()))
- [Node (TS.TSNode (TE.fst3 $ myConfigs !! n)
- (TE.thd3 $ myConfigs !! n)
- (spawn $ TE.snd3 $ myConfigs !! n)
- ) [] | n <- [0..(length myConfigs - 1)]
- ]
- ]
-
--- Configuration options for treeSelect
-tsDefaultConfig :: TS.TSConfig a
-tsDefaultConfig = TS.TSConfig { TS.ts_hidechildren = True
- , TS.ts_background = 0xdd292d3e
- , TS.ts_font = myFont
- , TS.ts_node = (0xffd0d0d0, 0xff202331)
- , TS.ts_nodealt = (0xffd0d0d0, 0xff292d3e)
- , TS.ts_highlight = (0xffffffff, 0xff755999)
- , TS.ts_extra = 0xffd0d0d0
- , TS.ts_node_width = 200
- , TS.ts_node_height = 20
- , TS.ts_originX = 0
- , TS.ts_originY = 0
- , TS.ts_indent = 80
- , TS.ts_navigate = myTreeNavigation
- }
-
--- 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.
-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)
- ]
-
-------------------------------------------------------------------------
--- XPROMPT SETTINGS
-------------------------------------------------------------------------
-dtXPConfig :: XPConfig
-dtXPConfig = def
- { font = myFont
- , bgColor = "#292d3e"
- , fgColor = "#d0d0d0"
- , bgHLight = "#c792ea"
- , fgHLight = "#000000"
- , borderColor = "#535974"
- , promptBorderWidth = 0
- , promptKeymap = dtXPKeymap
- , position = Top
--- , position = CenteredAt { xpCenterY = 0.3, xpWidth = 0.3 }
- , height = 20
- , historySize = 256
- , historyFilter = id
- , defaultText = []
- , autoComplete = Just 100000 -- set Just 100000 for .1 sec
- , showCompletionOnTab = False
- -- , searchPredicate = isPrefixOf
- , searchPredicate = fuzzyMatch
- , 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
- }
-
--- A list of all of the standard Xmonad prompts and a key press assigned to them.
--- These are used in conjunction with keybinding I set later in the config.
-promptList :: [(String, XPConfig -> X ())]
-promptList = [ ("m", manPrompt) -- manpages prompt
- , ("p", passPrompt) -- get passwords (requires 'pass')
- , ("g", passGeneratePrompt) -- generate passwords (requires 'pass')
- , ("r", passRemovePrompt) -- remove passwords (requires 'pass')
- , ("s", sshPrompt) -- ssh prompt
- , ("x", xmonadPrompt) -- xmonad prompt
- ]
-
--- Same as the above list except this is for my custom prompts.
-promptList' :: [(String, XPConfig -> String -> X (), String)]
-promptList' = [ ("c", calcPrompt, "qalc") -- requires qalculate-gtk
- ]
-
-------------------------------------------------------------------------
--- CUSTOM PROMPTS
-------------------------------------------------------------------------
--- calcPrompt requires a cli calculator called qalcualte-gtk.
--- You could use this as a template for other custom prompts that
--- use command line programs that return a single line of output.
-calcPrompt :: XPConfig -> String -> X ()
-calcPrompt c ans =
- inputPrompt c (trim ans) ?+ \input ->
- liftIO(runProcessWithInput "qalc" [input] "") >>= calcPrompt c
- where
- trim = f . f
- where f = reverse . dropWhile isSpace
-
-------------------------------------------------------------------------
--- XPROMPT KEYMAP (emacs-like key bindings for xprompts)
-------------------------------------------------------------------------
-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)
- ]
-
-------------------------------------------------------------------------
--- 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.
-archwiki, ebay, news, reddit, urban :: 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="
-
--- 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)
- , ("z", S.amazon)
- ]
-
------------------------------------------------------------------------
-- WORKSPACES
------------------------------------------------------------------------
@@ -584,172 +247,6 @@ myLayoutHook = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts float
-- ||| threeCol
-- ||| threeRow
-------------------------------------------------------------------------
--- SCRATCHPADS
-------------------------------------------------------------------------
--- Allows to have several floating scratchpads running different applications.
--- Import Util.NamedScratchpad. Bind a key to namedScratchpadSpawnAction.
-myScratchPads :: [NamedScratchpad]
-myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm
- , NS "mocp" spawnMocp findMocp manageMocp
- ]
- where
- spawnTerm = myTerminal ++ " -n scratchpad"
- findTerm = resource =? "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"
- manageMocp = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 -h
- l = 0.95 -w
-
-------------------------------------------------------------------------
--- KEYBINDINGS
-------------------------------------------------------------------------
--- I am using the Xmonad.Util.EZConfig module which allows keybindings
--- to be written in simpler, emacs-like format.
-myKeys :: [(String, X ())]
-myKeys =
- -- Xmonad
- [ ("M-C-r", spawn "xmonad --recompile") -- Recompiles xmonad
- , ("M-S-r", spawn "xmonad --restart") -- Restarts xmonad
- , ("M-S-q", io exitSuccess) -- Quits xmonad
-
- -- Open my preferred terminal
- , ("M-", spawn myTerminal)
-
- -- Run Prompt
- , ("M-S-", shellPrompt dtXPConfig) -- Shell Prompt
-
- -- Windows
- , ("M-S-c", kill1) -- Kill the currently focused client
- , ("M-S-a", killAll) -- Kill all windows on current workspace
-
- -- Floating windows
- , ("M-f", sendMessage (T.Toggle "floats")) -- Toggles my 'floats' layout
- , ("M-", withFocused $ windows . W.sink) -- Push floating window back to tile
- , ("M-S-", sinkAll) -- Push ALL floating windows to tile
-
- -- Grid Select (CTRL-g followed by a key)
- , ("C-g g", spawnSelected' myAppGrid) -- grid select favorite apps
- , ("C-g m", spawnSelected' myBookmarkGrid) -- grid select some bookmarks
- , ("C-g c", spawnSelected' myConfigGrid) -- grid select useful config files
- , ("C-g t", goToSelected $ mygridConfig myColorizer) -- goto selected window
- , ("C-g b", bringSelected $ mygridConfig myColorizer) -- bring selected window
-
- -- Tree Select/
- -- tree select actions menu
- , ("C-t a", 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
- , ("M-k", windows W.focusUp) -- Move focus to the prev window
- --, ("M-S-m", windows W.swapMaster) -- Swap the focused window and the master window
- , ("M-S-j", windows W.swapDown) -- Swap focused window with next window
- , ("M-S-k", windows W.swapUp) -- Swap focused window with prev window
- , ("M-", promote) -- Moves focused window to master, others maintain order
- , ("M1-S-", rotSlavesDown) -- Rotate all windows except master and keep focus in place
- , ("M1-C-", rotAllDown) -- Rotate all the windows in the current stack
- --, ("M-S-s", windows copyToAll)
- , ("M-C-s", killAllOtherCopies)
-
- -- Layouts
- , ("M-", sendMessage NextLayout) -- Switch to next layout
- , ("M-C-M1-", sendMessage Arrange)
- , ("M-C-M1-", sendMessage DeArrange)
- , ("M-", sendMessage (MT.Toggle NBFULL) >> sendMessage ToggleStruts) -- Toggles noborder/full
- , ("M-S-", sendMessage ToggleStruts) -- Toggles struts
- , ("M-S-n", sendMessage $ MT.Toggle NOBORDERS) -- Toggles noborder
- , ("M-", sendMessage (IncMasterN 1)) -- Increase number of clients in master pane
- , ("M-", sendMessage (IncMasterN (-1))) -- Decrease number of clients in master pane
- , ("M-S-", increaseLimit) -- Increase number of windows
- , ("M-S-", decreaseLimit) -- Decrease number of windows
-
- , ("M-h", sendMessage Shrink) -- Shrink horiz window width
- , ("M-l", sendMessage Expand) -- Expand horiz window width
- , ("M-C-j", sendMessage MirrorShrink) -- Shrink vert window width
- , ("M-C-k", sendMessage MirrorExpand) -- Exoand vert window width
-
- -- Workspaces
- , ("M-.", nextScreen) -- Switch focus to next monitor
- , ("M-,", prevScreen) -- Switch focus to prev monitor
- , ("M-S-", shiftTo Next nonNSP >> moveTo Next nonNSP) -- Shifts focused window to next ws
- , ("M-S-", shiftTo Prev nonNSP >> moveTo Prev nonNSP) -- Shifts focused window to prev ws
-
- -- Scratchpads
- , ("M-C-", namedScratchpadAction myScratchPads "terminal")
- , ("M-C-c", namedScratchpadAction myScratchPads "mocp")
-
- -- Controls for mocp music player.
- , ("M-u p", spawn "mocp --play")
- , ("M-u l", spawn "mocp --next")
- , ("M-u h", spawn "mocp --previous")
- , ("M-u ", spawn "mocp --toggle-pause")
-
- -- Emacs (CTRL-e followed by a key)
- , ("C-e e", spawn "emacsclient -c -a ''") -- start emacs
- , ("C-e b", spawn "emacsclient -c -a '' --eval '(ibuffer)'") -- list emacs buffers
- , ("C-e d", spawn "emacsclient -c -a '' --eval '(dired nil)'") -- dired emacs file manager
- , ("C-e i", spawn "emacsclient -c -a '' --eval '(erc)'") -- erc emacs irc client
- , ("C-e m", spawn "emacsclient -c -a '' --eval '(mu4e)'") -- mu4e emacs email client
- , ("C-e n", spawn "emacsclient -c -a '' --eval '(elfeed)'") -- elfeed emacs rss client
- , ("C-e s", spawn "emacsclient -c -a '' --eval '(eshell)'") -- eshell within emacs
- , ("C-e t", spawn "emacsclient -c -a '' --eval '(mastodon)'") -- mastodon within emacs
- , ("C-e v", spawn "emacsclient -c -a '' --eval '(+vterm/here nil)'") -- vterm within emacs
- -- emms is an emacs audio player. I set it to auto start playing in a specific directory.
- , ("C-e a", spawn "emacsclient -c -a '' --eval '(emms)' --eval '(emms-play-directory-tree \"~/Music/Non-Classical/70s-80s/\")'")
-
- --- My Applications (Super+Alt+Key)
- , ("M-M1-a", spawn (myTerminal ++ " -e ncpamixer"))
- , ("M-M1-b", spawn "surf www.youtube.com/c/DistroTube/")
- , ("M-M1-e", spawn (myTerminal ++ " -e neomutt"))
- , ("M-M1-f", spawn (myTerminal ++ " -e sh ./.config/vifm/scripts/vifmrun"))
- , ("M-M1-i", spawn (myTerminal ++ " -e irssi"))
- , ("M-M1-j", spawn (myTerminal ++ " -e joplin"))
- , ("M-M1-l", spawn (myTerminal ++ " -e lynx -cfg=~/.lynx/lynx.cfg -lss=~/.lynx/lynx.lss gopher://distro.tube"))
- , ("M-M1-m", spawn (myTerminal ++ " -e mocp"))
- , ("M-M1-n", spawn (myTerminal ++ " -e newsboat"))
- , ("M-M1-p", spawn (myTerminal ++ " -e pianobar"))
- , ("M-M1-r", spawn (myTerminal ++ " -e rtv"))
- , ("M-M1-t", spawn (myTerminal ++ " -e toot curses"))
- , ("M-M1-w", spawn (myTerminal ++ " -e wopr report.xml"))
- , ("M-M1-y", spawn (myTerminal ++ " -e youtube-viewer"))
-
- -- Multimedia Keys
- , ("", spawn "cmus toggle")
- , ("", spawn "cmus prev")
- , ("", spawn "cmus next")
- -- , ("", spawn "amixer set Master toggle") -- Bug prevents it from toggling correctly in 12.04.
- , ("", spawn "amixer set Master 5%- unmute")
- , ("", spawn "amixer set Master 5%+ unmute")
- , ("", spawn "firefox")
- , ("", safeSpawn "firefox" ["https://www.google.com/"])
- , ("", runOrRaise "geary" (resource =? "thunderbird"))
- , ("", runOrRaise "gcalctool" (resource =? "gcalctool"))
- , ("", 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 ]
- -- Appending some extra xprompts to keybindings list.
- -- Look at "xprompt settings" section this of config for values for "k".
- ++ [("M-p " ++ k, f dtXPConfig') | (k,f) <- promptList ]
- ++ [("M-p " ++ k, f dtXPConfig' g) | (k,f,g) <- promptList' ]
- -- 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"))
-
------------------------------------------------------------------------
-- MAIN
------------------------------------------------------------------------