aboutsummaryrefslogtreecommitdiff
path: root/.config/XMonad
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.com>2024-03-23 12:48:35 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.com>2024-03-23 12:48:35 +0530
commit499bb6a2d9f08c3fad40297a13d63c35c42ec260 (patch)
tree55dd5d5f6f1fd66a099ac6535bfbd37de0b72256 /.config/XMonad
parent71803f75116a63aed35ff3175fe86bb254e38d97 (diff)
added a TreeSelect Menu
Diffstat (limited to '.config/XMonad')
-rw-r--r--.config/XMonad/lib/Defaults.hs45
-rw-r--r--.config/XMonad/lib/Keybindings.hs99
-rw-r--r--.config/XMonad/lib/Scratchpads.hs8
-rw-r--r--.config/XMonad/lib/TreeSelect.hs93
4 files changed, 190 insertions, 55 deletions
diff --git a/.config/XMonad/lib/Defaults.hs b/.config/XMonad/lib/Defaults.hs
index 8492cd7..5eeb0a8 100644
--- a/.config/XMonad/lib/Defaults.hs
+++ b/.config/XMonad/lib/Defaults.hs
@@ -3,6 +3,7 @@ module Defaults where
import XMonad
import XMonad.Layout.Spacing
import XMonad.Layout.Tabbed
+import qualified XMonad.Actions.TreeSelect as TS
import XMonad.Actions.GridSelect
import XMonad.Util.Loggers
@@ -34,6 +35,9 @@ myTerminal = "open_terminal"
myTerminal' = "WINIT_X11_SCALE_FACTOR=1.5 alacritty"
myLauncher = "dmenu_run"
+prevTrack = "playerctl previous"
+nextTrack = "playerctl next"
+stopTrack = "playerctl stop"
pausePlay = "playerctl play-pause"
volUp = "pamixer -i 5"
@@ -52,8 +56,8 @@ customScreenshot = "flameshot gui"
myBrowser = "librewolf"
myPrivateBrowser = "librewolf --private-window"
-myBrowser' = "firefox"
-myPrivateBrowser' = "firefox --private-window"
+myBrowser' = "vivaldi"
+myPrivateBrowser' = "vivaldi --incognito"
myTorrentClient = "qbittorrent"
@@ -61,15 +65,32 @@ myFileManager = "pcmanfm"
myFileManager' = "lf"
myTextEditor = "doom run"
-myTextEditor' = "nvim"
+myTextEditor' = "codium"
+myTermTextEditor = "nvim"
myEmailClient = "thunderbird"
myPasswordManager = "keepassxc"
+myDiscord = "firejail discord"
+
+myDisplayMenu = "arandr"
+myWallpaperMenu = "nitrogen"
+myCalculator = "galculator"
+
-- workspaces
myExtraWorkspaces = [(xK_0, "十")]
myWorkspaces = ["一", "二", "三", "四", "五", "六", "七", "八", "九"] ++ map snd myExtraWorkspaces
+-- links
+myWebsite = "https://vidhukant.com"
+myGitServer = "https://mikunonaka.net"
+myGitHubProfile = "https://github.com/MikunoNaka"
+myYTChannel = "https://www.youtube.com/@MikunoNakaZT"
+myMALProfile = "https://myanimelist.net/profile/0ZeroTsu"
+myCloud = "https://cloud.vidhukant.com"
+vpsDashboard = "https://cloud.linode.com/linodes"
+dnsDashboard = "https://cloud.linode.com/domains"
+
-- screen gaps
sGap = 3
wGap = 4
@@ -87,6 +108,24 @@ myTabTheme = def {
, inactiveTextColor = "#d0d0d0"
, decoHeight = 20
}
+
+--myBorder' = "#c678dd"
+myTSConfig = TS.TSConfig {
+ TS.ts_hidechildren = True
+ , TS.ts_background = 0xb30e0911
+ , TS.ts_font = myFont
+ , TS.ts_node = (0xffd0d0d0, 0xff1c1f24)
+ , TS.ts_nodealt = (0xffd0d0d0, 0xff282c34)
+ , TS.ts_highlight = (0xffffffff, 0xff755999)
+ , TS.ts_extra = 0xffffffff
+ , TS.ts_node_width = 220
+ , TS.ts_node_height = 28
+ , TS.ts_originX = 0
+ , TS.ts_originY = 0
+ , TS.ts_indent = 80
+ , TS.ts_navigate = TS.defaultNavigation
+}
+
myGSColorizer :: Window -> Bool -> X (String, String)
myGSColorizer = colorRangeFromClassName
(0x28,0x2c,0x34) -- lowest inactive bg
diff --git a/.config/XMonad/lib/Keybindings.hs b/.config/XMonad/lib/Keybindings.hs
index bc1aa99..224139a 100644
--- a/.config/XMonad/lib/Keybindings.hs
+++ b/.config/XMonad/lib/Keybindings.hs
@@ -23,6 +23,7 @@ import XMonad.Hooks.ManageDocks
import Util
import Defaults
+import TreeSelect
import Scratchpads
myMouseKeybindings :: [((ButtonMask, Button), Window -> X ())]
@@ -37,12 +38,21 @@ myFnKeybindingsP :: [(String, X())]
myFnKeybindingsP = [
("<XF86MonBrightnessUp>", spawn backlightUp)
, ("<XF86MonBrightnessDown>", spawn backlightDown)
+
, ("<XF86AudioRaiseVolume>", spawn volUp)
, ("<XF86AudioLowerVolume>", spawn volDown)
, ("<XF86AudioMute>", spawn volMute)
+
+ , ("<XF86AudioPrev>", spawn prevTrack)
+ , ("<XF86AudioNext>", spawn nextTrack)
+ , ("<XF86AudioStop>", spawn stopTrack)
, ("<XF86AudioPlay>", spawn pausePlay)
, ("<XF86AudioPause>", spawn pausePlay)
, ("<Pause>", spawn pausePlay)
+
+ , ("<XF86Calculator>", spawn myCalculator)
+ , ("<XF86Display>", spawn myDisplayMenu)
+ , ("<XF86Mail>", spawn myEmailClient)
]
myKeybindings :: [((KeyMask, KeySym), X ())]
@@ -50,72 +60,71 @@ myKeybindings = [
((myModMask, xK_Return), spawn myTerminal)
, ((myModShiftMask, xK_Return), spawn myLockscreen)
, ((myModMask .|. shiftMask, xK_c), kill1)
- , ((myModMask, xK_s), spawn myLauncher)
+
+ , ((myModMask, xK_s), showTS myMainTS)
+ , ((myModShiftMask, xK_s), spawn myLauncher)
-- view prev/next workspaces
- , ((myModShiftMask, xK_Tab ), prevWS)
- , ((myModMask, xK_Tab ), nextWS)
- --, ((myModMask, xK_semicolon ), prevWS)
- --, ((myModMask, xK_apostrophe), nextWS)
- --, ((myModMask', xK_h ), prevWS)
- --, ((myModMask', xK_l ), nextWS)
+ , ((myModMask', xK_h ), prevWS)
+ , ((myModMask', xK_l ), nextWS)
-- move to prev/next workspaces
- --, ((myModShiftMask', xK_h ), shiftToPrev >> prevWS)
- --, ((myModShiftMask', xK_l ), shiftToNext >> nextWS)
- --, ((myModShiftMask', xK_semicolon ), shiftToPrev >> prevWS)
- --, ((myModShiftMask', xK_apostrophe), shiftToNext >> nextWS)
+ , ((myModShiftMask', xK_h ), shiftToPrev >> prevWS)
+ , ((myModShiftMask', xK_l ), shiftToNext >> nextWS)
-- toggle maximize
- --, ((myModMask, xK_f), withFocused (sendMessage . maximizeRestore))
+ , ((myModMask, xK_f), withFocused (sendMessage . maximizeRestore))
-- unfloat windows
- --, ((myModMask .|. shiftMask, xK_f), withFocused $ windows . W.sink)
+ , ((myModMask .|. shiftMask, xK_f), withFocused $ windows . W.sink)
-- cycle through windows
- --, ((myModMask', xK_j), windows W.focusDown)
- --, ((myModMask', xK_k), windows W.focusUp)
+ , ((myModMask, xK_Tab), windows W.focusUp)
+ , ((myModShiftMask, xK_Tab), windows W.focusDown)
-- 2D navigation
- , ((myModMask, xK_n), sendMessage $ Go R)
- , ((myModMask, xK_d), sendMessage $ Go L)
- , ((myModMask, xK_t), sendMessage $ Go U)
- , ((myModMask, xK_h), sendMessage $ Go D)
+ , ((myModMask, xK_l), sendMessage $ Go R)
+ , ((myModMask, xK_h), sendMessage $ Go L)
+ , ((myModMask, xK_k), sendMessage $ Go U)
+ , ((myModMask, xK_j), sendMessage $ Go D)
-- swap windows
- , ((myModShiftMask, xK_n), sendMessage $ WN.Swap R)
- , ((myModShiftMask, xK_d), sendMessage $ WN.Swap L)
- , ((myModShiftMask, xK_t), sendMessage $ WN.Swap U)
- , ((myModShiftMask, xK_h), sendMessage $ WN.Swap D)
+ , ((myModShiftMask, xK_l), sendMessage $ WN.Swap R)
+ , ((myModShiftMask, xK_h), sendMessage $ WN.Swap L)
+ , ((myModShiftMask, xK_k), sendMessage $ WN.Swap U)
+ , ((myModShiftMask, xK_j), sendMessage $ WN.Swap D)
-- resize
- , ((myModMask .|. myModMask', xK_n), sendMessage $ ExpandTowards R)
- , ((myModMask .|. myModMask', xK_d), sendMessage $ ExpandTowards L)
- , ((myModMask .|. myModMask', xK_h), sendMessage $ ExpandTowards D)
- , ((myModMask .|. myModMask', xK_t), sendMessage $ ExpandTowards U)
- , ((myModMask .|. myModShiftMask', xK_n), sendMessage $ ShrinkFrom R)
- , ((myModMask .|. myModShiftMask', xK_d), sendMessage $ ShrinkFrom L)
- , ((myModMask .|. myModShiftMask', xK_h), sendMessage $ ShrinkFrom D)
- , ((myModMask .|. myModShiftMask', xK_t), sendMessage $ ShrinkFrom U)
- --, ((myModMask, xK_B), windows $ W.greedyView "十")
+ , ((myModMask .|. myModMask', xK_h), sendMessage $ ExpandTowards R)
+ , ((myModMask .|. myModMask', xK_l), sendMessage $ ExpandTowards L)
+ , ((myModMask .|. myModMask', xK_j), sendMessage $ ExpandTowards D)
+ , ((myModMask .|. myModMask', xK_k), sendMessage $ ExpandTowards U)
+ , ((myModMask .|. myModShiftMask', xK_h), sendMessage $ ShrinkFrom R)
+ , ((myModMask .|. myModShiftMask', xK_l), sendMessage $ ShrinkFrom L)
+ , ((myModMask .|. myModShiftMask', xK_j), sendMessage $ ShrinkFrom D)
+ , ((myModMask .|. myModShiftMask', xK_k), sendMessage $ ShrinkFrom U)
] ++ [
-- workspace switching
- ((myModMask, key), windows $ W.greedyView ws) | (key,ws) <- myExtraWorkspaces
- -- ] ++ [
- -- -- moving window to workspace
- -- ((myModShiftMask, key), windows $ W.shift ws) | (key,ws) <- myWorkspaces
- -- ] ++ [
- -- -- to swap workspace
- -- ((myModShiftMask', key), windows $ swapWithCurrent ws) | (key, ws) <- myWorkspaces
+ ((myModMask, key), windows $ W.greedyView ws)
+ | (key,ws) <- myExtraWorkspaces
+ ] ++ [
+ -- moving window to workspace
+ ((myModShiftMask, key), windows $ W.shift ws)
+ | (key,ws) <- myExtraWorkspaces
+ ] ++ [
+ -- to swap workspace
+ -- TODO: try to change this into a key chord
+ ((myModShiftMask', key), windows $ swapWithCurrent ws)
+ | (key, ws) <- zip [xK_1, xK_2, xK_3, xK_4, xK_5, xK_6, xK_7, xK_8, xK_8, xK_0] myWorkspaces
-- ] ++ [
-- -- copy
-- ((m .|. myModMask, key), windows $ f ws) | (key, ws) <- myWorkspaces, (f, m) <- [(copy, myModShiftMask')]
-- ] ++ [
-- -- for not swapping tags while using multihead
-- ((m .|. myModMask, key), windows $ f ws) | (key, ws) <- myWorkspaces, (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
- ] -- ++ [ -- directly focus monitors instead of cycling
- -- ((m .|. myModMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
- -- | (key, sc) <- zip [xK_e, xK_w] [0..]
- -- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
- --]
+ ] ++ [ -- directly focus monitors instead of cycling
+ ((m .|. myModMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
+ | (key, sc) <- zip [xK_m, xK_w] [0..]
+ , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
+ ]
myKeybindingsP :: [(String, X())]
-myKeybindingsP = [] \ No newline at end of file
+myKeybindingsP = []
diff --git a/.config/XMonad/lib/Scratchpads.hs b/.config/XMonad/lib/Scratchpads.hs
index d0055c7..a2b6e30 100644
--- a/.config/XMonad/lib/Scratchpads.hs
+++ b/.config/XMonad/lib/Scratchpads.hs
@@ -10,14 +10,10 @@ import Defaults
myScratchpad :: String -> X ()
myScratchpad x = namedScratchpadAction myScratchpads x
--- if I try to concatinate strings directly
--- it won't compile for some reason
term0Cmd = myTerminal' ++ " -t 'Term U'"
term1Cmd = myTerminal' ++ " -t 'Term I'"
term2Cmd = myTerminal' ++ " -t 'Term O'"
term3Cmd = myTerminal' ++ " -t 'Term P'"
-lfCmd = myTerminal' ++ " -t 'lf' -e 'lf'"
-nmtuiCmd = myTerminal' ++ " -t 'nmtui' -e 'nmtui'"
bpytopCmd = myTerminal' ++ " -t 'BPYTOP' -e 'bpytop'"
playerCmd = myTerminal' ++ " -t 'NCMPCPP' -e 'ncmpcpp'"
@@ -26,12 +22,10 @@ myScratchpads =
, NS "Term 1" term1Cmd (title =? "Term I") (customFloating $ W.RationalRect (1/16) (1/16) (7/8) (7/8))
, NS "Term 2" term2Cmd (title =? "Term O") (customFloating $ W.RationalRect (1/16) (1/16) (7/8) (7/8))
, NS "Term 3" term3Cmd (title =? "Term P") (customFloating $ W.RationalRect (1/16) (1/16) (7/8) (7/8))
- , NS "lf" lfCmd (title =? "lf") (customFloating $ W.RationalRect (1/16) (1/16) (7/8) (7/8))
, NS "BPYTOP" bpytopCmd (title =? "BPYTOP") (customFloating $ W.RationalRect (1/16) (1/16) (7/8) (7/8))
, NS "musicplayer" playerCmd (title =? "NCMPCPP") (customFloating $ W.RationalRect (1/16) (1/16) (7/8) (7/8))
- , NS "nmtui" nmtuiCmd (title =? "nmtui") (customFloating $ W.RationalRect (1/4) (1/8) (1/2) (3/4))
, NS "arandr" "arandr" (className =? "Arandr") (customFloating $ W.RationalRect (1/4) (1/4) (1/2) (1/2))
- , NS "calc" "galculator" (className =? "Galculator") (customFloating $ W.RationalRect (5/13) (4/13) (3/13) (6/13))
+ , NS "calc" myCalculator (className =? "Galculator") (customFloating $ W.RationalRect (5/13) (4/13) (3/13) (6/13))
, NS "blueman" "blueman-manager" (className =? "Blueman-manager") (customFloating $ W.RationalRect (5.5/16) (4/13) (5/16) (6/13))
, NS "pavucontrol" "pavucontrol" (className =? "Pavucontrol") (customFloating $ W.RationalRect (3/12) (1/12) (3/6) (5/6))
, NS "wallpaper" "nitrogen" (className =? "Nitrogen") (customFloating $ W.RationalRect (3/12) (1/12) (3/6) (5/6))
diff --git a/.config/XMonad/lib/TreeSelect.hs b/.config/XMonad/lib/TreeSelect.hs
new file mode 100644
index 0000000..803789f
--- /dev/null
+++ b/.config/XMonad/lib/TreeSelect.hs
@@ -0,0 +1,93 @@
+module TreeSelect where
+
+import Data.Tree
+
+import XMonad
+import qualified XMonad.StackSet as W
+
+import XMonad.Actions.TreeSelect
+
+import Defaults
+
+showTS x = treeselectAction myTSConfig x
+
+myBrowserTS :: Forest (TSNode (X ()))
+myBrowserTS = [
+ Node (TSNode "LibreWolf" "The default" (spawn myBrowser)) []
+ , Node (TSNode "LibreWolf (private)" "" (spawn myPrivateBrowser)) []
+ , Node (TSNode "Vivaldi" "" (spawn myBrowser')) []
+ , Node (TSNode "TOR" "" (spawn "torbrowser-launcher")) []
+ , Node (TSNode "Firefox" "" (spawn "firefox")) []
+ , Node (TSNode "Brave" "" (spawn "brave")) []
+ ]
+
+myEditingTS :: Forest (TSNode (X ()))
+myEditingTS = [
+ Node (TSNode "GIMP" "Hackerman's photoshop" (spawn "gimp")) []
+ , Node (TSNode "Kdenlive" "Main video editor" (spawn "kdenlive")) []
+ , Node (TSNode "Audacity" "" (spawn "audacity")) []
+ , Node (TSNode "OBS" "" (spawn "obs-studio")) []
+ , Node (TSNode "Canva" "Zoomer's photoshop" (spawn $ myBrowser ++ " https://canva.com")) []
+ ]
+
+myDevTS :: Forest (TSNode (X ()))
+myDevTS = [
+ Node (TSNode "Doom Emacs" "" (spawn myTextEditor)) []
+ , Node (TSNode "VSC" "VSCodium" (spawn myTextEditor')) []
+ , Node (TSNode "Postman" "" (spawn "postman")) []
+ , Node (TSNode "Virt Manager" "" (spawn "virt-manager")) []
+ , Node (TSNode "IntelliJ IDEA" "Java IDE" (spawn "idea")) []
+ , Node (TSNode "Android Studio" "" (spawn "android-studio")) []
+ , Node (TSNode "PyCharm" "Python IDE" (spawn "pycharm")) []
+ ]
+
+myUtilTS :: Forest (TSNode (X ()))
+myUtilTS = [
+ Node (TSNode "File Manager" "" (spawn myFileManager)) []
+ , Node (TSNode "Volume Control" "pavucontrol" (spawn "pavucontrol")) []
+ , Node (TSNode "Cloud" "Nextcloud" (spawn $ myBrowser ++ " " ++ myCloud)) []
+ , Node (TSNode "Calculator" "" (spawn myCalculator)) []
+ , Node (TSNode "Screenshot" "" (spawn fullScreenshot)) []
+ , Node (TSNode "Torrent" "" (spawn myTorrentClient)) []
+ , Node (TSNode "Email Client" "" (spawn myEmailClient)) []
+ , Node (TSNode "Screen Recorder" "OBS" (spawn "obs-studio")) []
+ , Node (TSNode "Wallpapers" "" (spawn myWallpaperMenu)) []
+ , Node (TSNode "Google Docs" "" (spawn $ myBrowser ++ " https://docs.google.com")) []
+ , Node (TSNode "Google Sheets" "" (spawn $ myBrowser ++ " https://sheets.google.com")) []
+ , Node (TSNode "Google Slides" "" (spawn $ myBrowser ++ " https://slides.google.com")) []
+ , Node (TSNode "Google Forms" "" (spawn $ myBrowser ++ " https://forms.google.com")) []
+ ]
+
+myLinksTS :: Forest (TSNode (X ()))
+myLinksTS = [
+ Node (TSNode "Linode Dashboard" "" (spawn $ myBrowser ++ " " ++ vpsDashboard)) []
+ , Node (TSNode "Linode Dashboard (DNS)" "" (spawn $ myBrowser ++ " " ++ dnsDashboard)) []
+ , Node (TSNode "Git Server" "MikunoNaka.net" (spawn $ myBrowser ++ " " ++ myGitServer)) []
+ , Node (TSNode "GitHub" "My GitHub Profile" (spawn $ myBrowser ++ " " ++ myGitHubProfile)) []
+ , Node (TSNode "MyAnimeList" "My MAL Profile" (spawn $ myBrowser ++ " " ++ myMALProfile)) []
+ , Node (TSNode "My Website" "VidhuKant.com" (spawn $ myBrowser ++ " " ++ myWebsite)) []
+ , Node (TSNode "Cloud Storage" "Nextcloud" (spawn $ myBrowser ++ " " ++ myCloud)) []
+ , Node (TSNode "YouTube Channel" "" (spawn $ myBrowser ++ " " ++ myYTChannel)) []
+ , Node (TSNode "WhatsApp Web" "" (spawn $ myBrowser ++ " https://web.whatsapp.com")) []
+ , Node (TSNode "Google Docs" "" (spawn $ myBrowser ++ " https://docs.google.com")) []
+ , Node (TSNode "Google Sheets" "" (spawn $ myBrowser ++ " https://sheets.google.com")) []
+ , Node (TSNode "Google Slides" "" (spawn $ myBrowser ++ " https://slides.google.com")) []
+ , Node (TSNode "Google Forms" "" (spawn $ myBrowser ++ " https://forms.google.com")) []
+ ]
+
+myPowerTS :: Forest (TSNode (X ()))
+myPowerTS = [
+ Node (TSNode "Shut Down" "" (spawn "shutdown now")) []
+ , Node (TSNode "Reboot" "" (spawn "reboot")) []
+ ]
+
+myMainTS :: Forest (TSNode (X ()))
+myMainTS = [
+ Node (TSNode "Web Browser" "Open for more options" (spawn myBrowser)) myBrowserTS
+ , Node (TSNode "Discord" "Zoomer's Spyware" (spawn myDiscord)) []
+ , Node (TSNode "Editing" "Makin' memes" (return())) myEditingTS
+ , Node (TSNode "Development" "Hackering tools" (return())) myDevTS
+ , Node (TSNode "Utilities" "Misc n settings" (return())) myUtilTS
+ , Node (TSNode "Links" "Commonly visited sites" (return())) myLinksTS
+ , Node (TSNode "Power" "" (return())) myPowerTS
+ ]