Compare commits

..

No commits in common. "cd2ff22e000b55e87236f47e6052fe51d7f41f61" and "bd0804ae221b5dddb28dc2ed3790849d482f891b" have entirely different histories.

5 changed files with 169 additions and 204 deletions

1
.envrc
View file

@ -1 +0,0 @@
use flake

1
.gitignore vendored
View file

@ -1,2 +1 @@
result result
.direnv/

View file

@ -30,16 +30,7 @@
nixos-hardware, nixos-hardware,
mac-brcm-fw, mac-brcm-fw,
... ...
} @ inputs: let } @ inputs: {
pkgs = nixpkgs.legacyPackages."x86_64-linux";
in {
devShells."x86_64-linux".default = pkgs.mkShell {
buildInputs = [
(pkgs.haskellPackages.ghcWithPackages
(pkgs: with pkgs; [xmonad xmonad-contrib]))
pkgs.haskell-language-server
];
};
nixosConfigurations = { nixosConfigurations = {
monosodium-glutamate-g = nixpkgs.lib.nixosSystem { monosodium-glutamate-g = nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {

View file

@ -7,21 +7,27 @@
-- Normally, you'd only override those defaults you care about. -- Normally, you'd only override those defaults you care about.
-- --
import Control.Monad (when)
import Data.Map qualified as M
import Data.Monoid
import Graphics.X11.ExtraTypes.XF86
import System.Exit
import XMonad import XMonad
import XMonad.Actions.KeyRemap import Data.Monoid
import XMonad.Hooks.EwmhDesktops import System.Exit
import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar
import XMonad.Hooks.StatusBar.PP import XMonad.Hooks.StatusBar.PP
import XMonad.Hooks.EwmhDesktops
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import XMonad.Layout.Spacing import XMonad.Layout.Spacing
import XMonad.Layout.Tabbed import XMonad.Layout.Tabbed
import XMonad.Actions.KeyRemap
import XMonad.Prompt import XMonad.Prompt
import XMonad.Prompt.Layout import XMonad.Prompt.Layout
import XMonad.StackSet qualified as W import Graphics.X11.ExtraTypes.XF86
import Control.Monad (when)
-- The preferred terminal program, which is used in a binding below and by -- The preferred terminal program, which is used in a binding below and by
-- certain contrib modules. -- certain contrib modules.
@ -56,60 +62,68 @@ myModMask = mod4Mask
-- --
-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9] -- > workspaces = ["web", "irc", "code" ] ++ map show [4..9]
-- --
myWorkspaces = ["comms", "browser", "3", "4", "5", "6", "7", "8", "9"] myWorkspaces = ["comms","browser","3","4","5","6","7","8","9"]
-- Border colors for unfocused and focused windows, respectively. -- Border colors for unfocused and focused windows, respectively.
-- --
myNormalBorderColor = "#3c3836" myNormalBorderColor = "#3c3836"
myFocusedBorderColor = "#504945" myFocusedBorderColor = "#504945"
myRemaps = KeymapTable [ myRemaps = KeymapTable [ ((0, xK_a), (0, xK_b)) ]
-- ((0, xK_a), (0, xK_b))
]
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here. -- Key bindings. Add, modify or remove key bindings here.
-- --
myKeys conf@(XConfig {XMonad.modMask = modm}) = myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
M.fromList $ [ ((modm, xK_Return), spawn $ XMonad.terminal conf)
[ ((modm, xK_Return), spawn $ XMonad.terminal conf), , ((modm .|. shiftMask, xK_q), kill)
((modm .|. shiftMask, xK_q), kill),
-- -- Rotate through the available layout algorithms -- -- Rotate through the available layout algorithms
((modm, xK_space), sendMessage NextLayout), , ((modm, xK_space ), sendMessage NextLayout)
-- rofiing -- rofiing
((modm, xK_d), spawn "rofi -show drun"), , ((modm, xK_d), spawn "rofi -show drun")
((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons"), , ((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons")
((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark"), , ((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark")
((modm, xK_i), spawn "rofimoji --selector-args '-theme gruvbox-dark' -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"), , ((modm, xK_i), spawn "rofimoji --selector-args '-theme gruvbox-dark' -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy")
-- screenshotting -- screenshotting
-- TODO: Fix/rewrite window-screenshot.sh -- TODO: Fix/rewrite window-screenshot.sh
((modm, xK_w), spawn "window-screenshot.nu"), , ((modm, xK_w), spawn "window-screenshot.nu")
((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots"), , ((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots")
((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots"), , ((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots")
((modm, xK_t), spawn "ocr-screenshot.sh"), , ((modm, xK_t), spawn "ocr-screenshot.sh")
((modm .|. shiftMask, xK_t), spawn "DEVICE=\"MELF0410:00 1FD2:7007\"; if [ $(xinput list-props \"$DEVICE\" | awk '/^\\tDevice Enabled \\([0-9]+\\):\\t[01]/ {print $NF}') = \"1\" ]; then xinput disable \"$DEVICE\"; else xinput enable \"$DEVICE\"; fi"),
, ((modm .|. shiftMask, xK_t), spawn "DEVICE=\"MELF0410:00 1FD2:7007\"; if [ $(xinput list-props \"$DEVICE\" | awk '/^\\tDevice Enabled \\([0-9]+\\):\\t[01]/ {print $NF}') = \"1\" ]; then xinput disable \"$DEVICE\"; else xinput enable \"$DEVICE\"; fi")
-- Reset the layouts on the current workspace to default -- Reset the layouts on the current workspace to default
-- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
-- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
-- Push window back into tiling -- Push window back into tiling
((modm .|. shiftMask, xK_space), withFocused $ windows . W.sink), , ((modm .|. shiftMask, xK_space ), withFocused $ windows . W.sink)
-- Resize viewed windows to the correct size -- Resize viewed windows to the correct size
((modm, xK_n), refresh), , ((modm, xK_n ), refresh)
-- Move focus to the next window -- Move focus to the next window
((modm, xK_Tab), layoutPrompt def), , ((modm, xK_Tab ), layoutPrompt def)
-- Move focus -- Move focus
((modm, xK_j), windows W.focusDown), , ((modm, xK_j ), windows W.focusDown)
((modm, xK_k), windows W.focusUp), , ((modm, xK_k ), windows W.focusUp )
-- Swap the focused window with the next window -- Swap the focused window with the next window
((modm .|. shiftMask, xK_j), windows W.swapDown), , ((modm .|. shiftMask, xK_j ), windows W.swapDown )
((modm .|. shiftMask, xK_k), windows W.swapUp), , ((modm .|. shiftMask, xK_k ), windows W.swapUp )
-- Shrink the master area -- Shrink the master area
((modm, xK_h), sendMessage Shrink), , ((modm, xK_h ), sendMessage Shrink)
((modm, xK_l), sendMessage Expand), , ((modm, xK_l ), sendMessage Expand)
-- Increment the number of windows in the master area -- Increment the number of windows in the master area
((modm, xK_comma), sendMessage (IncMasterN 1)), , ((modm , xK_comma ), sendMessage (IncMasterN 1))
((modm, xK_period), sendMessage (IncMasterN (-1))) , ((modm , xK_period), sendMessage (IncMasterN (-1)))
-- Brightness n stuff -- Brightness n stuff
-- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+") -- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+")
-- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-") -- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-")
@ -125,82 +139,48 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) =
-- --
-- , ((modm , xK_b ), sendMessage ToggleStruts) -- , ((modm , xK_b ), sendMessage ToggleStruts)
-- , ((modm .|. shiftMask, xK_e ), io (exitWith ExitSuccess)) --, ((modm .|. shiftMask, xK_e ), io (exitWith ExitSuccess))
-- Restart xmonad -- Restart xmonad
-- , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") --, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart")
-- Run xmessage with a summary of the default keybindings (useful for beginners) -- Run xmessage with a summary of the default keybindings (useful for beginners)
] ]
++ ++
--
--
--
--
--
--
--
--
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
-- mod-shift-[1..9], Move client to workspace N
--
--
--
--
--
--
--
--
[ ((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9],
(f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
]
-- ++ --
-- mod-[1..9], Switch to workspace N
-- mod-shift-[1..9], Move client to workspace N
--
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
-- ++
--
-- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
-- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
--
-- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
--
-- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
-- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
--
-- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events -- Mouse bindings: default actions bound to mouse events
-- --
myMouseBindings (XConfig {XMonad.modMask = modm}) = myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
M.fromList
-- mod-button1, Set the window to floating mode and move by dragging -- mod-button1, Set the window to floating mode and move by dragging
[ ( (modm, button1), [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
\w -> >> windows W.shiftMaster))
focus w
>> mouseMoveWindow w
>> windows W.shiftMaster
),
-- mod-button2, Raise the window to the top of the stack -- mod-button2, Raise the window to the top of the stack
((modm, button2), \w -> focus w >> windows W.shiftMaster), , ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
-- mod-button3, Set the window to floating mode and resize by dragging -- mod-button3, Set the window to floating mode and resize by dragging
( (modm, button3), , ((modm, button3), (\w -> focus w >> mouseResizeWindow w
\w -> >> windows W.shiftMaster))
focus w
>> mouseResizeWindow w
>> windows W.shiftMaster
)
-- you may also bind events to the mouse scroll wheel (button4 and button5) -- you may also bind events to the mouse scroll wheel (button4 and button5)
] ]
@ -215,19 +195,17 @@ myMouseBindings (XConfig {XMonad.modMask = modm}) =
-- The available layouts. Note that each layout is separated by |||, -- The available layouts. Note that each layout is separated by |||,
-- which denotes layout choice. -- which denotes layout choice.
tabCfg = tabCfg = def
def { activeColor = "#282828"
{ activeColor = "#282828", , inactiveColor = "#1d2021"
inactiveColor = "#1d2021", , urgentColor = "#9d0006"
urgentColor = "#9d0006", , activeBorderColor = "#504945"
activeBorderColor = "#504945", , inactiveBorderColor = "#3c3836"
inactiveBorderColor = "#3c3836", , urgentBorderColor = "#cc241d"
urgentBorderColor = "#cc241d", , activeTextColor = "#ebdbb2"
activeTextColor = "#ebdbb2", , inactiveTextColor = "#bdae93"
inactiveTextColor = "#bdae93", , urgentTextColor = "#ebdbb2"
urgentTextColor = "#ebdbb2"
} }
myLayout = tiled ||| tabbed shrinkText tabCfg ||| Mirror tiled myLayout = tiled ||| tabbed shrinkText tabCfg ||| Mirror tiled
where where
-- default tiling algorithm partitions the screen into two panes -- default tiling algorithm partitions the screen into two panes
@ -237,10 +215,10 @@ myLayout = tiled ||| tabbed shrinkText tabCfg ||| Mirror tiled
nmaster = 1 nmaster = 1
-- Default proportion of screen occupied by master pane -- Default proportion of screen occupied by master pane
ratio = 1 / 2 ratio = 1/2
-- Percent of screen to increment by when resizing panes -- Percent of screen to increment by when resizing panes
delta = 3 / 100 delta = 3/100
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Window rules: -- Window rules:
@ -257,19 +235,16 @@ myLayout = tiled ||| tabbed shrinkText tabCfg ||| Mirror tiled
-- To match on the WM_NAME, you can use 'title' in the same way that -- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below. -- 'className' and 'resource' are used below.
-- --
myManageHook = myManageHook = composeAll
composeAll [ className =? "MPlayer" --> doFloat
[ className =? "MPlayer" --> doFloat, , className =? "Gimp" --> doFloat
className =? "Gimp" --> doFloat, , resource =? "desktop_window" --> doIgnore
resource =? "desktop_window" --> doIgnore, , resource =? "kdesktop" --> doIgnore ]
resource =? "kdesktop" --> doIgnore
]
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Event handling -- Event handling
-- * EwmhDesktops users should change this to ewmhDesktopsEventHook -- * EwmhDesktops users should change this to ewmhDesktopsEventHook
-- --
-- Defines a custom handler function for X Events. The function should -- Defines a custom handler function for X Events. The function should
-- return (All True) if the default handler is to be run afterwards. To -- return (All True) if the default handler is to be run afterwards. To
@ -277,7 +252,7 @@ myManageHook =
-- --
myEventHook = mempty myEventHook = mempty
focusChangeHook (FocusChangeEvent {ev_event_type = t, ev_window = window}) = do focusChangeHook (FocusChangeEvent {ev_event_type=t, ev_window=window}) = do
when (t == focusIn) $ spawn "notify-send 'focusIn'" when (t == focusIn) $ spawn "notify-send 'focusIn'"
when (t == focusOut) $ spawn "notify-send 'focusOut'" when (t == focusOut) $ spawn "notify-send 'focusOut'"
return $ All True return $ All True
@ -300,20 +275,21 @@ myLogHook = return ()
-- By default, do nothing. -- By default, do nothing.
myStartupHook = do myStartupHook = do
spawn "pkill oneko; oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'" spawn "pkill oneko; oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'"
-- spawn "pkill polybar; polybar" --spawn "pkill polybar; polybar"
spawn "pkill volumeicon; volumeicon" spawn "pkill volumeicon; volumeicon"
spawn "pkill nm-applet; nm-applet" spawn "pkill nm-applet; nm-applet"
spawn "mullvad-vpn --background" spawn "mullvad-vpn --background"
spawn "feh --bg-fill ~/Pictures/wallpaper.jpg" spawn "feh --bg-fill ~/Pictures/wallpaper.jpg"
setDefaultKeyRemap myRemaps [myRemaps] setDefaultKeyRemap myRemaps [myRemaps]
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Now run xmonad with all the defaults we set up. -- Now run xmonad with all the defaults we set up.
-- Run xmonad with the settings you specify. No need to modify this. -- Run xmonad with the settings you specify. No need to modify this.
-- --
mySB = statusBarProp "polybar" (pure xmobarPP) mySB = statusBarProp "polybar" (pure xmobarPP)
main = xmonad $ withEasySB mySB defToggleStrutsKey (ewmh defaults) main = xmonad $ withEasySB mySB defToggleStrutsKey (ewmh defaults)
-- A structure containing your configuration settings, overriding -- A structure containing your configuration settings, overriding
@ -322,25 +298,24 @@ main = xmonad $ withEasySB mySB defToggleStrutsKey (ewmh defaults)
-- --
-- No need to modify this. -- No need to modify this.
-- --
defaults = defaults = def
def -- simple stuff
{ -- simple stuff { terminal = myTerminal
terminal = myTerminal, , focusFollowsMouse = myFocusFollowsMouse
focusFollowsMouse = myFocusFollowsMouse, , clickJustFocuses = myClickJustFocuses
clickJustFocuses = myClickJustFocuses, , borderWidth = myBorderWidth
borderWidth = myBorderWidth, , modMask = myModMask
modMask = myModMask, , workspaces = myWorkspaces
workspaces = myWorkspaces, , normalBorderColor = myNormalBorderColor
normalBorderColor = myNormalBorderColor, , focusedBorderColor = myFocusedBorderColor
focusedBorderColor = myFocusedBorderColor,
-- , clientMask = focusChangeMask .|. XMonad.clientMask -- , clientMask = focusChangeMask .|. XMonad.clientMask
-- key bindings -- key bindings
keys = myKeys, , keys = myKeys
mouseBindings = myMouseBindings, , mouseBindings = myMouseBindings
-- hooks, layouts -- hooks, layouts
layoutHook = spacingRaw True (Border 0 0 0 0) True (Border 7 7 7 7) True myLayout, , layoutHook = spacingRaw True (Border 0 0 0 0) True (Border 7 7 7 7) True $ myLayout
manageHook = myManageHook, , manageHook = myManageHook
handleEventHook = myEventHook, , handleEventHook = myEventHook
logHook = myLogHook, , logHook = myLogHook
startupHook = myStartupHook , startupHook = myStartupHook
} }

View file

@ -4,6 +4,7 @@
sessionVariables.EDITOR = "hx"; sessionVariables.EDITOR = "hx";
packages = [ packages = [
pkgs.nil pkgs.nil
pkgs.haskell-language-server
pkgs.nodePackages_latest.vscode-html-languageserver-bin pkgs.nodePackages_latest.vscode-html-languageserver-bin
pkgs.nodePackages_latest.vscode-json-languageserver-bin pkgs.nodePackages_latest.vscode-json-languageserver-bin
pkgs.nodePackages_latest.vscode-css-languageserver-bin pkgs.nodePackages_latest.vscode-css-languageserver-bin