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,153 +62,127 @@ 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
((modm, xK_d), spawn "rofi -show drun"),
((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons"),
((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"),
-- screenshotting
-- TODO: Fix/rewrite window-screenshot.sh
((modm, xK_w), spawn "window-screenshot.nu"),
((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots"),
((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots"),
((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"),
-- 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)
-- Push window back into tiling
((modm .|. shiftMask, xK_space), withFocused $ windows . W.sink),
-- Resize viewed windows to the correct size
((modm, xK_n), refresh),
-- Move focus to the next window
((modm, xK_Tab), layoutPrompt def),
-- Move focus
((modm, xK_j), windows W.focusDown),
((modm, xK_k), windows W.focusUp),
-- Swap the focused window with the next window
((modm .|. shiftMask, xK_j), windows W.swapDown),
((modm .|. shiftMask, xK_k), windows W.swapUp),
-- Shrink the master area
((modm, xK_h), sendMessage Shrink),
((modm, xK_l), sendMessage Expand),
-- Increment the number of windows in the master area
((modm, xK_comma), sendMessage (IncMasterN 1)),
((modm, xK_period), sendMessage (IncMasterN (-1)))
-- Brightness n stuff
-- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+")
-- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-")
-- , ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle")
-- , ((0, xF86XK_MonBrightnessUp), spawn "brightnessctl set +10%")
-- , ((0, xF86XK_MonBrightnessDown), spawn "brightnessctl set 10%-")
-- , ((0, xF86XK_KbdBrightnessUp), spawn "brightnessctl -d \"kbd_backlight\" set +10%")
-- , ((0, xF86XK_KbdBrightnessDown), spawn "brightnessctl -d \"kbd_backlight\" set 10%-")
-- Toggle the status bar gap -- rofiing
-- Use this binding with avoidStruts from Hooks.ManageDocks. , ((modm, xK_d), spawn "rofi -show drun")
-- See also the statusBar function from Hooks.DynamicLog. , ((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons")
-- , ((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark")
-- , ((modm , xK_b ), sendMessage ToggleStruts) , ((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 .|. shiftMask, xK_e ), io (exitWith ExitSuccess)) -- screenshotting
-- TODO: Fix/rewrite window-screenshot.sh
, ((modm, xK_w), spawn "window-screenshot.nu")
, ((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots")
, ((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots")
, ((modm, xK_t), spawn "ocr-screenshot.sh")
-- Restart xmonad , ((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 , xK_q ), spawn "xmonad --recompile; xmonad --restart")
-- Run xmessage with a summary of the default keybindings (useful for beginners) -- 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)
-- -- Push window back into tiling
-- , ((modm .|. shiftMask, xK_space ), withFocused $ windows . W.sink)
--
--
--
--
--
--
-- 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)]
]
-- ++
-- -- Resize viewed windows to the correct size
-- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 , ((modm, xK_n ), refresh)
-- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
-- -- Move focus to the next window
-- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) , ((modm, xK_Tab ), layoutPrompt def)
-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] -- Move focus
, ((modm, xK_j ), windows W.focusDown)
, ((modm, xK_k ), windows W.focusUp )
-- Swap the focused window with the next window
, ((modm .|. shiftMask, xK_j ), windows W.swapDown )
, ((modm .|. shiftMask, xK_k ), windows W.swapUp )
-- Shrink the master area
, ((modm, xK_h ), sendMessage Shrink)
, ((modm, xK_l ), sendMessage Expand)
-- Increment the number of windows in the master area
, ((modm , xK_comma ), sendMessage (IncMasterN 1))
, ((modm , xK_period), sendMessage (IncMasterN (-1)))
-- Brightness n stuff
-- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+")
-- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-")
-- , ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle")
-- , ((0, xF86XK_MonBrightnessUp), spawn "brightnessctl set +10%")
-- , ((0, xF86XK_MonBrightnessDown), spawn "brightnessctl set 10%-")
-- , ((0, xF86XK_KbdBrightnessUp), spawn "brightnessctl -d \"kbd_backlight\" set +10%")
-- , ((0, xF86XK_KbdBrightnessDown), spawn "brightnessctl -d \"kbd_backlight\" set 10%-")
-- Toggle the status bar gap
-- Use this binding with avoidStruts from Hooks.ManageDocks.
-- See also the statusBar function from Hooks.DynamicLog.
--
-- , ((modm , xK_b ), sendMessage ToggleStruts)
--, ((modm .|. shiftMask, xK_e ), io (exitWith ExitSuccess))
-- Restart xmonad
--, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart")
-- Run xmessage with a summary of the default keybindings (useful for beginners)
]
++
--
-- 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)]]
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- 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), (\w -> focus w >> mouseMoveWindow w
[ ( (modm, button1), >> windows W.shiftMaster))
\w ->
focus w -- mod-button2, Raise the window to the top of the stack
>> mouseMoveWindow w , ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
>> windows W.shiftMaster
), -- mod-button3, Set the window to floating mode and resize by dragging
-- mod-button2, Raise the window to the top of the stack , ((modm, button3), (\w -> focus w >> mouseResizeWindow w
((modm, button2), \w -> focus w >> windows W.shiftMaster), >> windows W.shiftMaster))
-- mod-button3, Set the window to floating mode and resize by dragging
( (modm, button3), -- you may also bind events to the mouse scroll wheel (button4 and button5)
\w -> ]
focus w
>> mouseResizeWindow w
>> windows W.shiftMaster
)
-- you may also bind events to the mouse scroll wheel (button4 and button5)
]
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Layouts: -- Layouts:
@ -215,32 +195,30 @@ 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
tiled = Tall nmaster delta ratio tiled = Tall nmaster delta ratio
-- The default number of windows in the master pane -- The default number of windows in the master pane
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