diff --git a/.bashrc b/.bashrc
index cb3d1137..17950ec8 100755
--- a/.bashrc
+++ b/.bashrc
@@ -1,7 +1,7 @@
#
# ~/.bashrc
-#
+export PATH=$PATH:~/.cabal/bin
#export PATH=$PATH:~/.local/bin
alias lol="sudo sh -c 'sysctl -w abi.vsyscall32=0'"
alias dired="emacsclient -c -nw -a '' --eval '(dired nil)'"
@@ -24,3 +24,4 @@ dot config --local status.showUntrackedFiles no
#export PATH="$PATH:$(ruby -e 'print Gem.user_dir')/bin"
#export GEM_HOME=$(ruby -e 'print Gem.user_dir')
+[ -f "/home/tstarr/.ghcup/env" ] && source "/home/tstarr/.ghcup/env" # ghcup-env
diff --git a/.config/qtile/settings/wal.py b/.config/qtile/settings/wal.py
index 275b5c00..11907fa4 100644
--- a/.config/qtile/settings/wal.py
+++ b/.config/qtile/settings/wal.py
@@ -1,6 +1,6 @@
from os.path import expanduser
-from json import load
+from yaml import load
# Get color config from pywal
-wal_loc = expanduser('~/.cache/wal/colors.json')
+wal_loc = expanduser("~/.config/qtile/themes/dracula.yml")
wal = load(open(wal_loc))
diff --git a/.config/qtile/themes/dracula.yml b/.config/qtile/themes/dracula.yml
new file mode 100644
index 00000000..5165a167
--- /dev/null
+++ b/.config/qtile/themes/dracula.yml
@@ -0,0 +1,19 @@
+wallpaper: ""
+
+special:
+ background: "#282A36"
+ foreground: "#F8F8F2"
+ cursor: "#44475A"
+
+colors:
+ color0: "#282A36"
+ color1: "#44475A"
+ color2: "#F8F8F2"
+ color3: "#6272A4"
+ color4: "#8BE9FD"
+ color5: "#50FA7B"
+ color6: "#FFB86C"
+ color7: "#FF79C6"
+ color8: "#BD93F9"
+ color9: "#FF5555"
+ color10: "#F1FA8C"
diff --git a/.config/xmobar/xmobarrc1 "b/.config/xmobar/\\"
old mode 100755
new mode 100644
similarity index 80%
rename from .config/xmobar/xmobarrc1
rename to ".config/xmobar/\\"
index ef7c7f4a..c1575747
--- a/.config/xmobar/xmobarrc1
+++ "b/.config/xmobar/\\"
@@ -9,11 +9,11 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=true
, Run Network "enp4s0" [ "-t", "kb/kb" ] 10
, Run Com "/home/tstarr/.config/xmobar/volume" [] "volume" 10
, Run Com "/home/tstarr/.config/xmobar/gamemode" [] "gamemode" 10
+ , Run Com "/home/tstarr/.config/xmobar/mouse_battery" [] "mouse_battery" 1
, Run Date " %a %d/%m/%y %H:%M:%S" "date" 10
- , Run MPD ["-M","15","-t", " (/)"] 10
- , Run StdinReader
+ , Run StdinReader
]
, sepChar = "%"
, alignSep = "}{"
- , template = " %StdinReader%}%date%{%enp4s0% | %mpd% | %volume% | 閭%cpu% | %memory% |%gamemode% "
+ , template = " %StdinReader%}%date%{%enp4s0% | %mouse_battery% | %volume% | 閭%cpu% | %memory% |%gamemode% "
}
diff --git a/.config/xmobar/mouse_battery b/.config/xmobar/mouse_battery
new file mode 100755
index 00000000..373b49fe
--- /dev/null
+++ b/.config/xmobar/mouse_battery
@@ -0,0 +1,10 @@
+
+status=$(cat /sys/class/power_supply/hidpp_battery_*/uevent | grep POWER_SUPPLY_VOLTAGE)
+voltage=$(echo $status | cut -c26-29)
+if [ "$voltage" -ge 3200 ]; then
+ color="#b8bb26"
+else
+ color="#fb4934"
+fi
+
+echo "${voltage}mV"
diff --git a/.config/xmobar/xmobarrc b/.config/xmobar/xmobarrc
index 785b1a74..23f6857e 100755
--- a/.config/xmobar/xmobarrc
+++ b/.config/xmobar/xmobarrc
@@ -4,17 +4,16 @@ Config { font = "xft:Mononoki Nerd Font:pixelsize=12:antialias=true:hinting=true
, position = Static {xpos = 0, ypos = 0, width = 2560, height = 20}
, iconRoot = "X"
, allDesktops = False
- , overrideRedirect = False
, commands = [ Run Cpu ["-t", " %","-H", "2"] 10
, Run Memory ["-t", "%"] 10
, Run Network "enp4s0" [ "-t", "kb/kb" ] 10
, Run Com "/home/tstarr/.config/xmobar/volume" [] "volume" 10
, Run Com "/home/tstarr/.config/xmobar/gamemode" [] "gamemode" 10
+ , Run Com "/home/tstarr/.config/xmobar/mouse_battery" [] "mouse_battery" 30
, Run Date " %a %d/%m/%y %H:%M:%S" "date" 10
- , Run MPD ["-M","15","-t", " (/)"] 10
- , Run StdinReader
+ , Run StdinReader
]
, sepChar = "%"
, alignSep = "}{"
- , template = " %StdinReader%}%date%{%enp4s0% | %mpd% | %volume% | 閭%cpu% | %memory% |%gamemode% "
+ , template = " %StdinReader%}%date%{%enp4s0% | %mouse_battery% | %volume% | 閭%cpu% | %memory% |%gamemode% "
}
diff --git a/.doom.d/config.el b/.doom.d/config.el
index 2ced226f..71f21fba 100644
--- a/.doom.d/config.el
+++ b/.doom.d/config.el
@@ -85,6 +85,15 @@
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type 'relative)
+(map! :leader
+ ; Add to the "open" menu in Doom
+ (:prefix-map ("o" . "open")
+ (:prefix-map ("o" . "org-ql")
+ :desc "views" "v" #'org-ql-view
+ :desc "Weekly Agenda" "w" (cmd! (org-ql-view "Weekly Agenda"))
+ :desc "Tasks to Refile" "r" (cmd! (org-ql-view "Tasks to Refile"))
+ :desc "This Weeks Progress" "p" (cmd! (org-ql-view "This Weeks Progress")))))
+
(setq org-directory "~/documents/org/")
(setq org-capture (directory-files-recursively
(concat org-directory "gtd/capture/") "\.org$"))
@@ -112,71 +121,45 @@
("DONE" :foreground "forest green" :weight bold))))
(setq org-use-tag-inheritance t)
+ (setq org-tags-exclude-from-inheritance '("prj" "prg" "subprj"))
(setq org-tag-alist
'((:startgroup)
; Put mutually exclusive tags here
(:endgroup)
- ("@home" . ?H)
- ("@work" . ?W)
- ("note" . ?n)
+ ("@home" . ?h)
+ ("@work" . ?w)
("question" . ?q)
+ ("prj" . ?p)
+ ("subprj" . ?s)
+ ("prg" . ?P)
("habit" . ?h)
- ("recurring" . ?r)))
+ ("me" . ?m)
+ ("Aaron" . ?a)
+ ("Landon" . ?l)
+ ("Valerie" . ?v)
+ ("David" . ?d)))
(setq org-capture-todo (concat org-directory "gtd/capture/inbox.org"))
(setq org-capture-templates
- (doct '(("personal" :keys "p"
- :children (("todo" :keys "t"
- :file org-capture-todo
- :template ("* TODO %? :@home:" "%a" "%U"))
- ("question" :keys "q"
- :file org-capture-todo
- :template ("* TODO Find out %? :question:@home:"
- "%a"
- "%U"))
- ("habit" :keys "h"
- :file org-capture-todo
- :template ("* NEXT %? :habit:@home:" "%U"
- "SCHEDULED: %(format-time-string
+ (doct '(("todo" :keys "t"
+ :file org-capture-todo
+ :template ("* TODO %?" "%U"))
+ ("question" :keys "q"
+ :file org-capture-todo
+ :template ("* TODO Find out %? :question:@home:"
+ "%U"))
+ ("habit" :keys "h"
+ :file org-capture-todo
+ :template ("* NEXT %? :habit" "%U"
+ "SCHEDULED: %(format-time-string
\"%<<%Y-%m-%d %a .+1d/3d>>\")"
- ":PROPERTIES:" ":STYLE: habit"
- ":REPEAT_TO_STATE: NEXT" ":END:"))
- ("meeting" :keys "m"
- :children (("reoccuring" :keys "r"
- :file org-capture-todo
- :template ("* NEXT %? :meeting:@home:"
- "%U" "SCHEDULED:
- %(format-time-string
- \"%<<%Y-%m-%d %a +7d>>\")"
- ":PROPERTIES:"
- ":REPEAT_TO_STATE: NEXT"
- ":END:"))))))
- ("work" :keys "w"
- :children (("todo" :keys "t"
- :file org-capture-todo
- :template ("* TODO %? :@work:" "%U"))
- ("question" :keys "q"
- :file org-capture-todo
- :template ("* TODO Find out %? :question:@work:"
- "%U"))
- ("habit" :keys "h"
- :file org-capture-todo
- :template ("* NEXT %? :habit:@work:" "%U"
- "SCHEDULED: %(format-time-string
- \"%<<%Y-%m-%d %a .+1d/3d>>\")"
- ":PROPERTIES:" ":STYLE: habit"
- ":REPEAT_TO_STATE: NEXT" ":END:"))
- ("meeting" :keys "m"
- :children (("reoccuring" :keys "r"
- :file org-capture-todo
- :template ("* NEXT %? :meeting:@work:"
- "%U" "SCHEDULED:
- %(format-time-string
- \"%<<%Y-%m-%d %a +7d>>\")"
- ":PROPERTIES:"
- ":REPEAT_TO_STATE: NEXT"
- ":END:")))))))))
+ ":PROPERTIES:" ":STYLE: habit"
+ ":REPEAT_TO_STATE: NEXT" ":END:"))
+ ("meeting" :keys "m"
+ :file org-capture-todo
+ :template ("* NEXT %? :meeting:"
+ "%U")))))
(setq org-refile-targets (quote ((nil :maxlevel . 3)
(org-agenda-files :maxlevel . 3))))
@@ -235,14 +218,33 @@
:scheduled future
:deadline future)))))))
+ (defun open-org-ql-project (program)
+ (org-ql-search (list program)
+ '(and (todo)
+ (ancestors (todo))))
+ :super-groups '((:auto-outline-path t)))
+
+ (setq org-ql-project-view
+ (cons "Project View"
+ (lambda ()
+ "launch a project view for a given program."
+ (interactive)
+ (ivy-read "Project: "
+ (org-agenda-files)
+ :require-match t
+ :action #'open-org-ql-project))))
+
(setq org-super-agenda-header-map (make-sparse-keymap))
(setq org-ql-views
(list org-ql-weekly-agenda
org-ql-refile-tasks
- org-ql-weeks-progress))
+ org-ql-weeks-progress
+ org-ql-project-view))
(after! org-agenda
(org-super-agenda-mode))
(setq org-startup-folded t)
(setq org-src-preserve-indentation t)) ; Close the after! org expression from
; Org File Paths
+
+(add-hook 'haskell-mode-hook #'hindent-mode)
diff --git a/.doom.d/custom.el b/.doom.d/custom.el
new file mode 100644
index 00000000..71a498ff
--- /dev/null
+++ b/.doom.d/custom.el
@@ -0,0 +1 @@
+(put 'upcase-region 'disabled nil)
diff --git a/.doom.d/doomed.org b/.doom.d/doomed.org
index 761fa8c7..837814f5 100644
--- a/.doom.d/doomed.org
+++ b/.doom.d/doomed.org
@@ -363,6 +363,9 @@ We start by simply defining the standard headers used by the three files. These
(:host github
:repo "starr-dusT/burly.el"
:branch "master"))
+
+(package! hindent)
+
#+end_src
* General Configuration
** This System
@@ -400,6 +403,23 @@ We start by simply defining the standard headers used by the three files. These
(setq display-line-numbers-type 'relative)
#+end_src
** Keybindings
+
+Add all my additional keybinds to Doom's standard SPC lead keymapping system.
+
+#+begin_src emacs-lisp :tangle (if (member this-system system-category-1) "config.el" "no")
+(map! :leader
+ ; Add to the "open" menu in Doom
+ (:prefix-map ("o" . "open")
+ (:prefix-map ("o" . "org-ql")
+ :desc "views" "v" #'org-ql-view
+ :desc "Weekly Agenda" "w" (cmd! (org-ql-view "Weekly Agenda"))
+ :desc "Tasks to Refile" "r" (cmd! (org-ql-view "Tasks to Refile"))
+ :desc "This Weeks Progress" "p" (cmd! (org-ql-view "This Weeks Progress")))))
+#+end_src
+
+#+RESULTS:
+| lambda | (&rest _) | (interactive) | (org-ql-view This Weeks Progress) |
+
* Org mode
** Org directories
@@ -449,16 +469,23 @@ Define the A tier tags.
#+begin_src emacs-lisp :tangle (if (member this-system system-category-1) "config.el" "no")
(setq org-use-tag-inheritance t)
+ (setq org-tags-exclude-from-inheritance '("prj" "prg" "subprj"))
(setq org-tag-alist
'((:startgroup)
; Put mutually exclusive tags here
(:endgroup)
- ("@home" . ?H)
- ("@work" . ?W)
- ("note" . ?n)
+ ("@home" . ?h)
+ ("@work" . ?w)
("question" . ?q)
+ ("prj" . ?p)
+ ("subprj" . ?s)
+ ("prg" . ?P)
("habit" . ?h)
- ("recurring" . ?r)))
+ ("me" . ?m)
+ ("Aaron" . ?a)
+ ("Landon" . ?l)
+ ("Valerie" . ?v)
+ ("David" . ?d)))
#+end_src
*** Capture
@@ -478,57 +505,24 @@ Allowable tags: @work, @home, note, question, habit
#+begin_src emacs-lisp :tangle (if (member this-system system-category-1) "config.el" "no")
(setq org-capture-templates
- (doct '(("personal" :keys "p"
- :children (("todo" :keys "t"
- :file org-capture-todo
- :template ("* TODO %? :@home:" "%a" "%U"))
- ("question" :keys "q"
- :file org-capture-todo
- :template ("* TODO Find out %? :question:@home:"
- "%a"
- "%U"))
- ("habit" :keys "h"
- :file org-capture-todo
- :template ("* NEXT %? :habit:@home:" "%U"
- "SCHEDULED: %(format-time-string
+ (doct '(("todo" :keys "t"
+ :file org-capture-todo
+ :template ("* TODO %?" "%U"))
+ ("question" :keys "q"
+ :file org-capture-todo
+ :template ("* TODO Find out %? :question:@home:"
+ "%U"))
+ ("habit" :keys "h"
+ :file org-capture-todo
+ :template ("* NEXT %? :habit" "%U"
+ "SCHEDULED: %(format-time-string
\"%<<%Y-%m-%d %a .+1d/3d>>\")"
- ":PROPERTIES:" ":STYLE: habit"
- ":REPEAT_TO_STATE: NEXT" ":END:"))
- ("meeting" :keys "m"
- :children (("reoccuring" :keys "r"
- :file org-capture-todo
- :template ("* NEXT %? :meeting:@home:"
- "%U" "SCHEDULED:
- %(format-time-string
- \"%<<%Y-%m-%d %a +7d>>\")"
- ":PROPERTIES:"
- ":REPEAT_TO_STATE: NEXT"
- ":END:"))))))
- ("work" :keys "w"
- :children (("todo" :keys "t"
- :file org-capture-todo
- :template ("* TODO %? :@work:" "%U"))
- ("question" :keys "q"
- :file org-capture-todo
- :template ("* TODO Find out %? :question:@work:"
- "%U"))
- ("habit" :keys "h"
- :file org-capture-todo
- :template ("* NEXT %? :habit:@work:" "%U"
- "SCHEDULED: %(format-time-string
- \"%<<%Y-%m-%d %a .+1d/3d>>\")"
- ":PROPERTIES:" ":STYLE: habit"
- ":REPEAT_TO_STATE: NEXT" ":END:"))
- ("meeting" :keys "m"
- :children (("reoccuring" :keys "r"
- :file org-capture-todo
- :template ("* NEXT %? :meeting:@work:"
- "%U" "SCHEDULED:
- %(format-time-string
- \"%<<%Y-%m-%d %a +7d>>\")"
- ":PROPERTIES:"
- ":REPEAT_TO_STATE: NEXT"
- ":END:")))))))))
+ ":PROPERTIES:" ":STYLE: habit"
+ ":REPEAT_TO_STATE: NEXT" ":END:"))
+ ("meeting" :keys "m"
+ :file org-capture-todo
+ :template ("* NEXT %? :meeting:"
+ "%U")))))
#+end_src
*** Refile
@@ -609,13 +603,32 @@ Following config items will utilizes the awesome [[https://github.com/alphapapa/
:scheduled future
:deadline future)))))))
#+end_src
+***** Project View
+#+begin_src emacs-lisp :tangle (if (member this-system system-category-1) "config.el" "no")
+ (defun open-org-ql-project (program)
+ (org-ql-search (list program)
+ '(and (todo)
+ (not (children)))
+ :super-groups '((:auto-outline-path t))))
+
+ (setq org-ql-project-view
+ (cons "Project View"
+ (lambda ()
+ "launch a project view for a given program."
+ (interactive)
+ (ivy-read "Project: "
+ (org-agenda-files)
+ :require-match t
+ :action #'open-org-ql-project))))
+#+end_src
***** Final
#+begin_src emacs-lisp :tangle (if (member this-system system-category-1) "config.el" "no")
(setq org-super-agenda-header-map (make-sparse-keymap))
(setq org-ql-views
(list org-ql-weekly-agenda
org-ql-refile-tasks
- org-ql-weeks-progress))
+ org-ql-weeks-progress
+ org-ql-project-view))
(after! org-agenda
(org-super-agenda-mode))
#+end_src
@@ -625,3 +638,11 @@ Following config items will utilizes the awesome [[https://github.com/alphapapa/
(setq org-src-preserve-indentation t)) ; Close the after! org expression from
; Org File Paths
#+end_src
+* Devel
+** Haskell
+
+#+begin_src emacs-lisp :tangle (if (member this-system system-category-1) "config.el" "no")
+
+(add-hook 'haskell-mode-hook #'hindent-mode)
+
+#+end_src
diff --git a/.doom.d/packages.el b/.doom.d/packages.el
index 8588281a..2ba212c4 100644
--- a/.doom.d/packages.el
+++ b/.doom.d/packages.el
@@ -68,3 +68,5 @@
(:host github
:repo "starr-dusT/burly.el"
:branch "master"))
+
+(package! hindent)
diff --git a/.imwheelrc b/.imwheelrc
index 61722e12..eebc4bf6 100644
--- a/.imwheelrc
+++ b/.imwheelrc
@@ -1,8 +1,8 @@
# Speed up scrolling for the document viewer
"^brave-browser$"
- None, Up, Button4, 4
- None, Down, Button5, 4
+ None, Up, Button4, 6
+ None, Down, Button5, 6
"^Steam$"
- None, Up, Button4, 4
- None, Down, Button5, 4
+ None, Up, Button4, 6
+ None, Down, Button5, 6
diff --git a/.xinitrc b/.xinitrc
index 4ecbf93c..7f77025b 100644
--- a/.xinitrc
+++ b/.xinitrc
@@ -1 +1 @@
-exec dbus-launch qtile
+exec dbus-launch xmonad
diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs
index 02cf13b3..05cb5761 100644
--- a/.xmonad/xmonad.hs
+++ b/.xmonad/xmonad.hs
@@ -2,7 +2,7 @@
import XMonad
import Data.Monoid
import System.Exit
-import System.IO (hPutStrLn)
+import System.IO
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import System.Directory (getHomeDirectory)
@@ -19,17 +19,28 @@ import XMonad.Layout.NoBorders
import XMonad.Layout.Gaps
import XMonad.Layout.Spacing
import XMonad.Layout.ThreeColumns
+import XMonad.Layout.Tabbed
+import XMonad.Layout.Renamed
+import XMonad.Layout.LayoutModifier
+import XMonad.Layout.Combo
+import XMonad.Layout.TwoPane
+import XMonad.Layout.WindowNavigation
-- Utilities
import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe)
import XMonad.Util.SpawnOnce
import XMonad.Util.NamedScratchpad
import XMonad.Util.EZConfig (additionalKeysP, removeKeys)
+import XMonad.Util.NamedActions
+import XMonad.Util.NamedScratchpad
+import XMonad.Util.NamedWindows (getName)
-- Actions
import XMonad.Actions.CycleWS (moveTo, shiftTo, WSType(..), nextScreen, prevScreen)
import XMonad.Actions.DynamicProjects
import XMonad.Actions.DynamicWorkspaces
+import XMonad.Actions.CopyWindow
+import XMonad.Actions.Commands
-- Prompt
import XMonad.Prompt
@@ -85,14 +96,21 @@ myPromptTheme = def
, height = prompt
, position = Top
}
-
+
myStartupHook = do
spawnOnce "nitrogen --restore &"
spawnOnce "lxsession &"
spawnOnce "xsetroot -cursor_name left_ptr"
- spawnOnce "imwheel -b 45"
+ spawnOnce "imwheel -b 45 &"
+ spawnOnce "play-with-mpv &"
+
+------------------------------------------------------------------------}}}
+-- Layouts {{{
+--
+-- Alot stolen from https://github.com/altercation/dotfiles-tilingwm
+---------------------------------------------------------------------------
-myLayout = spacing 2 $ smartBorders (tiled ||| Mirror tiled ||| Full ||| ThreeCol 1 (3/100) (1/2))
+myLayout = windowNavigation $ spacing 2 $ smartBorders (tiled ||| Mirror tiled ||| Full ||| ThreeColMid 1 (3/100) (1/2) ||| tabTwoPane)
where
-- default tiling algorithm partitions the screen into two panes
tiled = Tall nmaster delta ratio
@@ -102,6 +120,19 @@ myLayout = spacing 2 $ smartBorders (tiled ||| Mirror tiled ||| Full ||| ThreeCo
ratio = 1/2
-- Percent of screen to increment by when resizing panes
delta = 2/100
+
+ tabTwoPane = renamed [Replace "TwoPane Tabs"] $ combineTwo (TwoPane 0.03 0.5) (tabs) (tabs)
+
+ tabs = tabbed shrinkText myTabTheme
+
+myTabTheme = def { fontName = myFont
+ , activeColor = "#46d9ff"
+ , inactiveColor = "#313846"
+ , activeBorderColor = "#46d9ff"
+ , inactiveBorderColor = "#282c34"
+ , activeTextColor = "#282c34"
+ , inactiveTextColor = "#d0d0d0"
+ }
myScratchPads :: [NamedScratchpad]
myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm
@@ -153,49 +184,51 @@ myLogHook = return ()
myKeys :: String -> [([Char], X ())]
myKeys home =
[
- -- close focused window
- ("M-q", kill)
+ --------------------------------------------------
+ -- Window/Focus Manipulation
+ --------------------------------------------------
-- Rotate through the available layout algorithms
- , ("M-", sendMessage NextLayout)
- -- Resize viewed windows to the correct size
- , ("M-z", refresh)
+ ("M-", sendMessage NextLayout)
-- Move focus to the next window
, ("M-j", windows W.focusDown)
-- Move focus to the previous window
, ("M-k", windows W.focusUp)
+ -- Switch focus to next monitor
+ , ("M-.", nextScreen)
+ -- Switch focus to prev monitor
+ , ("M-,", prevScreen)
+ -- Swap the focused window with the next window/tabs
+ , ("M-S-j", sequence_ [windows W.swapDown, sendMessage $ Move R])
+ -- Swap the focused window with the previous window/tabs
+ , ("M-S-k", sequence_ [windows W.swapUp, sendMessage $ Move L])
-- Move focus to the master window
, ("M-m", windows W.focusMaster)
-- Swap the focused window and the master window
, ("M-c", windows W.swapMaster)
- -- Swap the focused window with the next window
- , ("M-S-j", windows W.swapDown)
- -- Swap the focused window with the previous window
- , ("M-S-k", windows W.swapUp)
-- Shrink the master area
, ("M-h", sendMessage Shrink)
-- Expand the master area
, ("M-l", sendMessage Expand)
+ -- Copy window to all workspaces
+ , ("M-x c", toggleCopyToAll)
-- Push window back into tiling
, ("M-t", withFocused $ windows . W.sink)
- , ("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
+ -- close focused window
+ , ("M-q", kill)
+ --------------------------------------------------
+ -- Basic Utils
+ --------------------------------------------------
-- Spawn terminal
, ("M-" , spawn "alacritty")
-- Spawn rofi drun
, ("M-w" , spawn "rofi -show drun")
-- Spawn rofi window
, ("M-S-w", spawn "rofi -show window")
-
- -- mute overall volume
- , ("", spawn muteVolumeCmd)
- -- raise overall volume
- , ("", spawn raiseVolumeCmd)
- -- lower overall volume
- , ("", spawn lowerVolumeCmd)
-
+
+ --------------------------------------------------
+ -- Scratchpads
+ --------------------------------------------------
-- Spawn rofi window
, ("M-S-", namedScratchpadAction myScratchPads "terminal")
-- Spawn rofi window
@@ -203,6 +236,9 @@ myKeys home =
-- Spawn rofi window
, ("M-v", namedScratchpadAction myScratchPads "scr-mpv")
+ --------------------------------------------------
+ -- Open Applications
+ --------------------------------------------------
-- Spawn firefox
, ("M-o b" , spawn "brave")
-- Spawn lutris
@@ -214,6 +250,9 @@ myKeys home =
-- Spawn emacs
, ("M-o e" , spawn "emacs")
+ --------------------------------------------------
+ -- System Utils
+ --------------------------------------------------
-- Recompile and restart xmonad
, ("M-x r", spawn "xmonad --recompile; xmonad --restart")
-- Quit xmonad
@@ -222,9 +261,17 @@ myKeys home =
, ("M-x g", spawn "gamemoded -r")
-- Stop gamemode
, ("M-x S-g", spawn "killall gamemoded")
+ -- mute overall volume
+ , ("", spawn muteVolumeCmd)
+ -- raise overall volume
+ , ("", spawn raiseVolumeCmd)
+ -- lower overall volume
+ , ("", spawn lowerVolumeCmd)
]
- where nonNSP = WSIs (return (\ws -> W.tag ws /= "nsp"))
- nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "nsp"))
+ where
+ toggleCopyToAll = wsContainingCopies >>= \ws -> case ws of
+ [] -> windows copyToAll
+ _ -> killAllOtherCopies
rmKeys :: String -> [(KeyMask, KeySym)]
rmKeys keys =
@@ -236,7 +283,7 @@ rmKeys keys =
main = do
home <- getHomeDirectory
xmproc0 <- spawnPipe "xmobar -x 0 ~/.config/xmobar/xmobarrc"
- --
+ --
xmonad $ docks $ ewmh $ ewmhFullscreen def
{
-- Simple items
diff --git a/.xmonad/xmonad.org b/.xmonad/xmonad.org
deleted file mode 100644
index 7cb0b73d..00000000
--- a/.xmonad/xmonad.org
+++ /dev/null
@@ -1,414 +0,0 @@
-+TITLE: Custom Xmonad Config
-#+PROPERTY: header-args :tangle xmonad.hs
-
-* Table of Contents
-:PROPERTIES:
-:TOC: :include all :depth 3
-:END:
-:CONTENTS:
-- [[#table-of-contents][Table of Contents]]
-- [[#imports][Imports]]
-- [[#variables][Variables]]
-- [[#start-up][Start Up]]
-- [[#layout][Layout]]
-- [[#scrathpads][Scrathpads]]
-- [[#hooks][Hooks]]
-- [[#events][Events]]
-- [[#logging][Logging]]
-- [[#keybinds][Keybinds]]
- - [[#add-normal-binds][Add "Normal" Binds]]
- - [[#window-management][Window Management]]
- - [[#basics][Basics]]
- - [[#media-control][Media Control]]
- - [[#scratchpads][Scratchpads]]
- - [[#add-open-binds][Add Open Binds]]
- - [[#add-system-utils-binds][Add System Utils Binds]]
- - [[#remove-unneeded-default-binds][Remove Unneeded Default Binds]]
-- [[#main][Main]]
-:END:
-
-* Imports
-
-Import Haskel modules that are used later in the config.
-
-#+begin_src haskell
-
--- Base
-import XMonad
-import Data.Monoid
-import System.Exit
-import System.IO (hPutStrLn)
-import qualified XMonad.StackSet as W
-import qualified Data.Map as M
-import System.Directory (getHomeDirectory)
-
--- Hooks
-import XMonad.Hooks.EwmhDesktops
-import XMonad.Hooks.ManageDocks
-import XMonad.Hooks.ManageHelpers
-import XMonad.Hooks.WorkspaceHistory
-import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..))
-
--- Layouts
-import XMonad.Layout.NoBorders
-import XMonad.Layout.Gaps
-import XMonad.Layout.Spacing
-import XMonad.Layout.ThreeColumns
-
--- Utilities
-import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe)
-import XMonad.Util.SpawnOnce
-import XMonad.Util.NamedScratchpad
-import XMonad.Util.EZConfig (additionalKeysP, removeKeys)
-
--- Actions
-import XMonad.Actions.CycleWS (moveTo, shiftTo, WSType(..), nextScreen, prevScreen)
-import XMonad.Actions.DynamicProjects
-import XMonad.Actions.DynamicWorkspaces
-
--- Prompt
-import XMonad.Prompt
-
--- Data
-import Data.Maybe (isJust)
-
-#+end_src
-
-* Variables
-
-Set variable used later in the config, often a handful of times.
-
-#+begin_src haskell
-
--- Terminal to use
-myTerminal = "alacritty"
-
--- Focus follows mouse pointer
-myFocusFollowsMouse :: Bool
-myFocusFollowsMouse = True
-
--- Define mod keys
-myModMask = mod4Mask
-altMask = mod1Mask
-
--- Define volume keys and commands
-lowerVolumeCmd = "pulseaudio-ctl down 2"
-raiseVolumeCmd = "pulseaudio-ctl up 2"
-muteVolumeCmd = "pulseaudio-ctl mute"
-
--- Count windows
-windowCount :: X (Maybe String)
-windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset
-
--- Define workspaces
-myWorkspaces = ["1","2","3","4","5","6","7","8","9"]
-
--- Width of window border
-myBorderWidth = 2
-
--- Border colors
-myNormalBorderColor = "#ebdbb2"
-myFocusedBorderColor = "#d3869b"
-
--- Prompt theming
-myFont = "xft:Mononoki Nerd Font:bold:size=9:antialias=true:hinting=true"
-yellow = "#504945"
-base03 = "#ebdbb2"
-active = "#b8bb26"
-prompt = 20
-
-myPromptTheme = def
- { font = myFont
- , bgColor = base03
- , fgColor = active
- , fgHLight = base03
- , bgHLight = active
- , borderColor = base03
- , promptBorderWidth = 0
- , height = prompt
- , position = Top
- }
-
-#+end_src
-
-* Start Up
-
-Set variable used later in the config, often a handful of times.
-
-#+begin_src haskell
-
-myStartupHook = do
- spawnOnce "nitrogen --restore &"
- spawnOnce "lxsession &"
- spawnOnce "xsetroot -cursor_name left_ptr"
- spawnOnce "imwheel -b 45"
-
-#+end_src
-
-* Layout
-
-Set the possible layouts for great justice.
-
-#+begin_src haskell
-
-myLayout = spacing 2 $ smartBorders (tiled ||| Mirror tiled ||| Full ||| ThreeCol 1 (3/100) (1/2))
- where
- -- default tiling algorithm partitions the screen into two panes
- tiled = Tall nmaster delta ratio
- -- The default number of windows in the master pane
- nmaster = 1
- -- Default proportion of screen occupied by master pane
- ratio = 1/2
- -- Percent of screen to increment by when resizing panes
- delta = 2/100
-
-#+end_src
-
-* Scrathpads
-
-Define all my scrathpads.
-
-#+begin_src haskell
-
-myScratchPads :: [NamedScratchpad]
-myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm
- , NS "scr-mpv" spawnMpv findMpv manageMpv
- , NS "discord" spawnDiscord findDiscord manageDiscord ]
- where
- spawnTerm = myTerminal ++ " -t terminal"
- findTerm = title =? "terminal"
- manageTerm = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 -h
- l = 0.95 -w
-
- spawnMpv = "mpv --player-operation-mode=pseudo-gui --title=scr-mpv"
- findMpv = title =? "scr-mpv"
- manageMpv = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 -h
- l = 0.95 -w
-
- spawnDiscord = "discord"
- findDiscord = appName =? "discord"
- manageDiscord = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 -h
- l = 0.95 -w
-
-#+end_src
-
-* Hooks
-
-Define some wicked hooks.
-
-#+begin_src haskell
-
-myManageHook = composeAll
- -- Float fullscreen apps (mostly games)
- [isDialog --> doCenterFloat,
- isFullscreen --> doFullFloat,
- className =? "Gimp" --> doFullFloat,
- className =? "Anki" --> doFullFloat,
- className =? "mpv" --> doRectFloat (W.RationalRect 0.55 0.05 0.4 0.4),
- className =? "Steam" --> doFullFloat,
- className =? "microsoft teams - preview" --> doFullFloat,
- namedScratchpadManageHook myScratchPads]
-
-#+end_src
-* Events
-
-Define some Events.
-
-#+begin_src haskell
-
-myEventHook = mempty
-
-#+end_src
-
-* Logging
-
-Define some Events.
-
-#+begin_src haskell
-
-myLogHook = return ()
-
-#+end_src
-* Keybinds
-** Add "Normal" Binds
-
-Set all of the keybinds I use to control the universe from within Xmonad.
-
-*** Window Management
-
-#+begin_src haskell
-
-myKeys :: String -> [([Char], X ())]
-myKeys home =
- [
- -- close focused window
- ("M-q", kill)
- -- Rotate through the available layout algorithms
- , ("M-", sendMessage NextLayout)
- -- Resize viewed windows to the correct size
- , ("M-z", refresh)
- -- Move focus to the next window
- , ("M-j", windows W.focusDown)
- -- Move focus to the previous window
- , ("M-k", windows W.focusUp)
- -- Move focus to the master window
- , ("M-m", windows W.focusMaster)
- -- Swap the focused window and the master window
- , ("M-c", windows W.swapMaster)
- -- Swap the focused window with the next window
- , ("M-S-j", windows W.swapDown)
- -- Swap the focused window with the previous window
- , ("M-S-k", windows W.swapUp)
- -- Shrink the master area
- , ("M-h", sendMessage Shrink)
- -- Expand the master area
- , ("M-l", sendMessage Expand)
- -- Push window back into tiling
- , ("M-t", withFocused $ windows . W.sink)
- , ("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
-
-#+end_src
-
-*** Basics
-
-#+begin_src haskell
-
- -- Spawn terminal
- , ("M-" , spawn "alacritty")
- -- Spawn rofi drun
- , ("M-w" , spawn "rofi -show drun")
- -- Spawn rofi window
- , ("M-S-w", spawn "rofi -show window")
-
-#+end_src
-
-*** Media Control
-
-#+begin_src haskell
-
- -- mute overall volume
- , ("", spawn muteVolumeCmd)
- -- raise overall volume
- , ("", spawn raiseVolumeCmd)
- -- lower overall volume
- , ("", spawn lowerVolumeCmd)
-
-#+end_src
-
-*** Scratchpads
-
-#+begin_src haskell
-
- -- Spawn rofi window
- , ("M-S-", namedScratchpadAction myScratchPads "terminal")
- -- Spawn rofi window
- , ("M-d", namedScratchpadAction myScratchPads "discord")
- -- Spawn rofi window
- , ("M-v", namedScratchpadAction myScratchPads "scr-mpv")
-
-#+end_src
-
-** Add Open Binds
-
-#+begin_src haskell
-
- -- Spawn firefox
- , ("M-o b" , spawn "brave")
- -- Spawn lutris
- , ("M-o l" , spawn "lutris")
- -- Spawn steam
- , ("M-o s" , spawn "steam")
- -- Spawn flameshot
- , ("M-o c" , spawn "flameshot gui")
- -- Spawn emacs
- , ("M-o e" , spawn "emacs")
-
-#+end_src
-
-** Add System Utils Binds
-
-#+begin_src haskell
-
- -- Recompile and restart xmonad
- , ("M-x r", spawn "xmonad --recompile; xmonad --restart")
- -- Quit xmonad
- , ("M-x q", io (exitWith ExitSuccess))
- -- Start gamemode
- , ("M-x g", spawn "gamemoded -r")
- -- Stop gamemode
- , ("M-x S-g", spawn "killall gamemoded")
- ]
- where nonNSP = WSIs (return (\ws -> W.tag ws /= "nsp"))
- nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "nsp"))
-
-#+end_src
-
-** Remove Unneeded Default Binds
-
-#+begin_src haskell
-
-rmKeys :: String -> [(KeyMask, KeySym)]
-rmKeys keys =
- [
- -- Remove the default quit xmonad bind
- (myModMask .|. shiftMask, xK_q)
- ]
-
-#+end_src
-
-* Main
-
-The main function that gets it all done.
-
-#+begin_src haskell
-
-main = do
- home <- getHomeDirectory
- xmproc0 <- spawnPipe "xmobar -x 0 ~/.config/xmobar/xmobarrc"
- --
- xmonad $ docks $ ewmh $ ewmhFullscreen def
- {
- -- Simple items
- terminal = myTerminal,
- focusFollowsMouse = myFocusFollowsMouse,
- borderWidth = myBorderWidth,
- modMask = myModMask,
- workspaces = myWorkspaces,
- normalBorderColor = myNormalBorderColor,
- focusedBorderColor = myFocusedBorderColor,
-
- -- Hooks, Layouts
- layoutHook = avoidStruts $ myLayout,
- manageHook = myManageHook,
- handleEventHook = myEventHook,
- logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP
- { ppOutput = \x -> hPutStrLn xmproc0 x
- , ppCurrent = xmobarColor "#b8bb26" "" . wrap "[" "]" -- Current workspace in xmobar
- , ppVisible = xmobarColor "#83a598" "" -- Visible but not current workspace
- , ppHidden = xmobarColor "#83a598" "" . wrap "*" "" -- Hidden workspaces in xmobar
- , ppHiddenNoWindows= \( _ ) -> "" -- Only shows visible workspaces. Useful for TreeSelect.
- , ppTitle = xmobarColor "#ebdbb2" "" . shorten 60 -- Title of active window in xmobar
- , ppSep = " | " -- Separators in xmobar
- , ppUrgent = xmobarColor "#fb4934" "" . wrap "!" "!" -- Urgent workspace
- , ppExtras = [windowCount] -- # of windows current workspace
- , ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t]},
- startupHook = myStartupHook
- } `removeKeys` rmKeys home
- `additionalKeysP` myKeys home
-
-#+end_src