diff --git a/system/wm/xmonad.nix b/system/wm/xmonad.nix
deleted file mode 100644
index e820f92..0000000
--- a/system/wm/xmonad.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ ... }:
-
-{
- # import X11 config
- imports = [ ./x11.nix
- ./pipewire.nix
- ./dbus.nix
- ];
-
- # Setup XMonad
- services.xserver = {
- windowManager.xmonad = {
- enable = true;
- enableContribAndExtras = true;
- };
- displayManager = {
- defaultSession = "none+xmonad";
- };
- };
-}
diff --git a/user/wm/picom/README.org b/user/wm/picom/README.org
deleted file mode 100644
index 11a03de..0000000
--- a/user/wm/picom/README.org
+++ /dev/null
@@ -1,9 +0,0 @@
-#+title: Picom
-
-This is my picom config. I use [[https://github.com/pijulius/picom][pijulius' picom]] which has awesome animations!
-
-[[picom.gif]]
-
-There are 2 main files in this directory:
-- [[./picom.conf][picom.conf]] - My picom config
-- [[./picom.nix][picom.nix]] - A Nix module to import the pijulius fork of picom into my setup via the import block of my [[../../home.nix][home.nix]]
diff --git a/user/wm/picom/picom.conf b/user/wm/picom/picom.conf
deleted file mode 100644
index e22fe03..0000000
--- a/user/wm/picom/picom.conf
+++ /dev/null
@@ -1,504 +0,0 @@
-#################################
-# Animations #
-#################################
-# requires https://github.com/jonaburg/picom
-# (These are also the default values)
-transition-length = 1
-transition-pow-x = 1
-transition-pow-y = 1
-transition-pow-w = 1
-transition-pow-h = 1
-size-transition = true
-
-
-#################################
-# Corners #
-#################################
-# requires: https://github.com/sdhand/compton or https://github.com/jonaburg/picom
-corner-radius = 0.0;
-rounded-corners-exclude = [
- #"window_type = 'normal'",
- "class_g = 'awesome'",
- "class_g = 'Xmobar'",
- "class_g = 'xmobar'",
- "window_type = 'dock'"
-];
-round-borders = 10;
-round-borders-exclude = [
- #"class_g = 'TelegramDesktop'",
-];
-
-#################################
-# Shadows #
-#################################
-
-
-# Enabled client-side shadows on windows. Note desktop windows
-# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
-# unless explicitly requested using the wintypes option.
-#
-shadow = false
-# shadow = true;
-
-# The blur radius for shadows, in pixels. (defaults to 12)
-# shadow-radius = 12
-shadow-radius = 7;
-
-# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
-shadow-opacity = .75
-
-# The left offset for shadows, in pixels. (defaults to -15)
-# shadow-offset-x = -15
-shadow-offset-x = -7;
-
-# The top offset for shadows, in pixels. (defaults to -15)
-# shadow-offset-y = -15
-shadow-offset-y = -7;
-
-# Avoid drawing shadows on dock/panel windows. This option is deprecated,
-# you should use the *wintypes* option in your config file instead.
-#
-# no-dock-shadow = false
-
-# Don't draw shadows on drag-and-drop windows. This option is deprecated,
-# you should use the *wintypes* option in your config file instead.
-#
-# no-dnd-shadow = false
-
-# Red color value of shadow (0.0 - 1.0, defaults to 0).
-# shadow-red = 0
-
-# Green color value of shadow (0.0 - 1.0, defaults to 0).
-# shadow-green = 0
-
-# Blue color value of shadow (0.0 - 1.0, defaults to 0).
-# shadow-blue = 0
-
-# Do not paint shadows on shaped windows. Note shaped windows
-# here means windows setting its shape through X Shape extension.
-# Those using ARGB background is beyond our control.
-# Deprecated, use
-# shadow-exclude = 'bounding_shaped'
-# or
-# shadow-exclude = 'bounding_shaped && !rounded_corners'
-# instead.
-#
-# shadow-ignore-shaped = ''
-
-# Specify a list of conditions of windows that should have no shadow.
-#
-# examples:
-# shadow-exclude = "n:e:Notification";
-#
-# shadow-exclude = []
-shadow-exclude = [
- "name = 'Notification'",
- "class_g = 'Conky'",
- "class_g ?= 'Notify-osd'",
- "class_g = 'Cairo-clock'",
- "class_g = 'slop'",
- "class_g = 'Polybar'",
- "_GTK_FRAME_EXTENTS@:c"
-];
-
-# Specify a X geometry that describes the region in which shadow should not
-# be painted in, such as a dock window region. Use
-# shadow-exclude-reg = "x10+0+0"
-# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
-#
-# shadow-exclude-reg = ""
-
-# Crop shadow of a window fully on a particular Xinerama screen to the screen.
-# xinerama-shadow-crop = false
-
-
-#################################
-# Fading #
-#################################
-
-# Fade windows in/out when opening/closing and when opacity changes,
-# unless no-fading-openclose is used.
-# fading = false
-fading = false;
-
-# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
-# fade-in-step = 0.028
-fade-in-step = 0.01;
-
-# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
-# fade-out-step = 0.03
-fade-out-step = 0.01;
-
-# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
-fade-delta = 1
-
-# Specify a list of conditions of windows that should not be faded.
-# don't need this, we disable fading for all normal windows with wintypes: {}
-fade-exclude = [
-## "class_g = 'slop'" # maim
-]
-
-# Do not fade on window open/close.
-no-fading-openclose = false
-
-# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
-no-fading-destroyed-argb = false
-
-
-#################################
-# Transparency / Opacity #
-#################################
-
-
-# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
-# inactive-opacity = 1
-inactive-opacity = 1.0;
-
-# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
-# frame-opacity = 1.0
-
-# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
-# menu-opacity = 1.0
-# menu-opacity is depreciated use dropdown-menu and popup-menu instead.
-
-#If using these 2 below change their values in line 510 & 511 aswell
-popup_menu = { opacity = 1.0; }
-dropdown_menu = { opacity = 1.0; }
-
-# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
-inactive-opacity-override = true;
-# inactive-opacity-override = false;
-
-# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
-active-opacity = 1.0;
-
-# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
-# inactive-dim = 1.0
-
-# Specify a list of conditions of windows that should always be considered focused.
-# focus-exclude = []
-focus-exclude = [
- "class_g = 'Cairo-clock'",
- "class_g = 'Bar'", # lemonbar
- "class_g = 'slop'" # maim
-];
-
-# Use fixed inactive dim value, instead of adjusting according to window opacity.
-# inactive-dim-fixed = 1.0
-
-# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
-# like `50:name *= "Firefox"`. picom-trans is recommended over this.
-# Note we don't make any guarantee about possible conflicts with other
-# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
-# example:
-# opacity-rule = [ "80:class_g = 'URxvt'" ];
-#
-# opacity-rule = []
-opacity-rule = [
- "90:class_g = 'xmobar'",
- "90:class_g = 'firefox'",
- "90:class_g = 'librewolf'",
- "90:class_g = 'gtkcord4'",
- "90:class_g = 'bottles'",
- "90:class_g = 'PrismLauncher'",
- "90:class_g = 'Navigator'",
- "90:class_g = 'Rofi'",
- "90:class_g = 'Geary'",
- "90:class_g = 'KeePassXC'",
- "90:class_g = 'gnome-calendar'",
- "90:class_g = 'NewsFlashGTK'",
- "90:class_g = 'Pavucontrol'"
-];
-
-
-#################################
-# Background-Blurring #
-#################################
-
-
-# Parameters for background blurring, see the *BLUR* section for more information.
-# blur-method = kawase
-# blur-size = 1
-#
-# blur-deviation = false
-
-# Blur background of semi-transparent / ARGB windows.
-# Bad in performance, with driver-dependent behavior.
-# The name of the switch may change without prior notifications.
-#
-blur-background = false;
-
-# Blur background of windows when the window frame is not opaque.
-# Implies:
-# blur-background
-# Bad in performance, with driver-dependent behavior. The name may change.
-#
-# blur-background-frame = false;
-
-
-# Use fixed blur strength rather than adjusting according to window opacity.
-# blur-background-fixed = false;
-
-
-# Specify the blur convolution kernel, with the following format:
-# example:
-# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
-#
-# blur-kern = ''
-# blur-kern = "3x3box";
-
-#blur: {
-# # requires: https://github.com/ibhagwan/picom
-# method = "kawase";
-# #method = "kernel";
-# strength = 0;
-# # deviation = 1.0;
-# # kernel = "11x11gaussian";
-# background = false;
-# background-frame = false;
-# background-fixed = false;
-# kern = "3x3box";
-#}
-
-# Exclude conditions for background blur.
-blur-background-exclude = [
- #"window_type = 'dock'",
- #"window_type = 'desktop'",
- #"class_g = 'URxvt'",
- #
- # prevents picom from blurring the background
- # when taking selection screenshot with `main`
- # https://github.com/naelstrof/maim/issues/130
- "class_g = 'slop'",
- "_GTK_FRAME_EXTENTS@:c"
-];
-
-
-#################################
-# General Settings #
-#################################
-
-# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
-daemon = true
-
-# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
-# `xrender` is the default one.
-#
-# experimental-backends = true;
-backend = "glx";
-# backend = "xrender";
-# backend = "xr_glx_hybrid";
-
-
-# Enable/disable VSync.
-vsync = true
-# vsync = false
-
-# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
-# dbus = false
-
-# Try to detect WM windows (a non-override-redirect window with no
-# child that has 'WM_STATE') and mark them as active.
-#
-# mark-wmwin-focused = false
-mark-wmwin-focused = true;
-
-# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
-# mark-ovredir-focused = false
-mark-ovredir-focused = true;
-
-# Try to detect windows with rounded corners and don't consider them
-# shaped windows. The accuracy is not very high, unfortunately.
-#
-# detect-rounded-corners = false
-detect-rounded-corners = true;
-
-# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
-# not passing '_NET_WM_OPACITY' of client windows to frame windows.
-#
-detect-client-opacity = false
-# detect-client-opacity = true;
-
-# Specify refresh rate of the screen. If not specified or 0, picom will
-# try detecting this with X RandR extension.
-#
-# refresh-rate = 60
-refresh-rate = 0
-
-# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
-# boost performance. This should not be used with
-# vsync drm/opengl/opengl-oml
-# as they essentially does sw-opti's job already,
-# unless you wish to specify a lower refresh rate than the actual value.
-#
-# sw-opti = true
-
-# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
-# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
-# provided that the WM supports it.
-#
-# use-ewmh-active-win = false
-
-# Unredirect all windows if a full-screen opaque window is detected,
-# to maximize performance for full-screen windows. Known to cause flickering
-# when redirecting/unredirecting windows. paint-on-overlay may make the flickering less obvious.
-#
-# unredir-if-possible = false
-
-# Delay before unredirecting the window, in milliseconds. Defaults to 0.
-# unredir-if-possible-delay = 0
-
-# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
-# unredir-if-possible-exclude = []
-
-# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
-# in the same group focused at the same time.
-#
-# detect-transient = false
-detect-transient = true
-
-# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
-# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
-# detect-transient is enabled, too.
-#
-# detect-client-leader = false
-detect-client-leader = true
-
-# Resize damaged region by a specific number of pixels.
-# A positive value enlarges it while a negative one shrinks it.
-# If the value is positive, those additional pixels will not be actually painted
-# to screen, only used in blur calculation, and such. (Due to technical limitations,
-# with use-damage, those pixels will still be incorrectly painted to screen.)
-# Primarily used to fix the line corruption issues of blur,
-# in which case you should use the blur radius value here
-# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
-# with a 5x5 one you use `--resize-damage 2`, and so on).
-# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
-#
-# resize-damage = 1
-
-# Specify a list of conditions of windows that should be painted with inverted color.
-# Resource-hogging, and is not well tested.
-#
-# invert-color-include = []
-
-# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
-# Might cause incorrect opacity when rendering transparent content (but never
-# practically happened) and may not work with blur-background.
-# My tests show a 15% performance boost. Recommended.
-#
-glx-no-stencil = true
-
-# GLX backend: Avoid rebinding pixmap on window damage.
-# Probably could improve performance on rapid window content changes,
-# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
-# Recommended if it works.
-#
-glx-no-rebind-pixmap = true
-
-# Disable the use of damage information.
-# This cause the whole screen to be redrawn everytime, instead of the part of the screen
-# has actually changed. Potentially degrades the performance, but might fix some artifacts.
-# The opposing option is use-damage
-#
-# no-use-damage = true
-#use-damage = true (Causing Weird Black semi opaque rectangles when terminal is opened)
-#Changing use-damage to false fixes the problem
-use-damage = false
-
-# Use X Sync fence to sync clients' draw calls, to make sure all draw
-# calls are finished before picom starts drawing. Needed on nvidia-drivers
-# with GLX backend for some users.
-#
-# xrender-sync-fence = false
-
-# GLX backend: Use specified GLSL fragment shader for rendering window contents.
-# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
-# in the source tree for examples.
-#
-# glx-fshader-win = ''
-
-# Force all windows to be painted with blending. Useful if you
-# have a glx-fshader-win that could turn opaque pixels transparent.
-#
-# force-win-blend = false
-
-# Do not use EWMH to detect fullscreen windows.
-# Reverts to checking if a window is fullscreen based only on its size and coordinates.
-#
-# no-ewmh-fullscreen = false
-
-# Dimming bright windows so their brightness doesn't exceed this set value.
-# Brightness of a window is estimated by averaging all pixels in the window,
-# so this could comes with a performance hit.
-# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
-#
-# max-brightness = 1.0
-
-# Make transparent windows clip other windows like non-transparent windows do,
-# instead of blending on top of them.
-#
-# transparent-clipping = false
-
-# Set the log level. Possible values are:
-# "trace", "debug", "info", "warn", "error"
-# in increasing level of importance. Case doesn't matter.
-# If using the "TRACE" log level, it's better to log into a file
-# using *--log-file*, since it can generate a huge stream of logs.
-#
-# log-level = "debug"
-log-level = "info";
-
-# Set the log file.
-# If *--log-file* is never specified, logs will be written to stderr.
-# Otherwise, logs will to written to the given file, though some of the early
-# logs might still be written to the stderr.
-# When setting this option from the config file, it is recommended to use an absolute path.
-#
-# log-file = '/path/to/your/log/file'
-
-# Show all X errors (for debugging)
-# show-all-xerrors = false
-
-# Write process ID to a file.
-# write-pid-path = '/path/to/your/log/file'
-
-# Window type settings
-#
-# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
-# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
-# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
-# "tooltip", "notification", "combo", and "dnd".
-#
-# Following per window-type options are available: ::
-#
-# fade, shadow:::
-# Controls window-type-specific shadow and fade settings.
-#
-# opacity:::
-# Controls default opacity of the window type.
-#
-# focus:::
-# Controls whether the window of this type is to be always considered focused.
-# (By default, all window types except "normal" and "dialog" has this on.)
-#
-# full-shadow:::
-# Controls whether shadow is drawn under the parts of the window that you
-# normally won't be able to see. Useful when the window has parts of it
-# transparent, and you want shadows in those areas.
-#
-# redir-ignore:::
-# Controls whether this type of windows should cause screen to become
-# redirected again after been unredirected. If you have unredir-if-possible
-# set, and doesn't want certain window to cause unnecessary screen redirection,
-# you can set this to `true`.
-#
-wintypes:
-{
- normal = { shadow = false;}
- tooltip = { shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
- dock = { shadow = false; }
- dnd = { shadow = false; }
- popup_menu = { opacity = 1; }
- dropdown_menu = { opacity = 1; }
-};
diff --git a/user/wm/picom/picom.gif b/user/wm/picom/picom.gif
deleted file mode 100644
index 1591ca1..0000000
Binary files a/user/wm/picom/picom.gif and /dev/null differ
diff --git a/user/wm/picom/picom.nix b/user/wm/picom/picom.nix
deleted file mode 100644
index 56d3a5b..0000000
--- a/user/wm/picom/picom.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ pkgs, ... }:
-
-{
- home.packages = with pkgs; [
- picom
- ];
-
- nixpkgs.overlays = [
- (self: super:
- {
- picom = super.picom.overrideAttrs (oldAttrs: rec {
- version = "unstable-2021-10-23";
- src = super.fetchFromGitHub {
- owner = "pijulius";
- repo = "picom";
- rev = "982bb43e5d4116f1a37a0bde01c9bda0b88705b9";
- sha256 = "sha256-YiuLScDV9UfgI1MiYRtjgRkJ0VuA1TExATA2nJSJMhM=";
- };
-
- meta = with builtins.lib; {
- description = "A fork of picom featuring better animations";
- homepage = "https://github.com/pijulius/picom";
- };
- });
- }
- )
- ];
-
- home.file.".config/picom/picom.conf".source = ./picom.conf;
-}
diff --git a/user/wm/xmonad/README.org b/user/wm/xmonad/README.org
deleted file mode 100644
index 79692bb..0000000
--- a/user/wm/xmonad/README.org
+++ /dev/null
@@ -1,28 +0,0 @@
-#+title: XMonad
-#+author: Emmet
-
-* What is XMonad?
-[[https://xmonad.org/][XMonad]] is a tiling window manager written and configured in Haskell. Since I have built up my own XMonad config over a few years, it is extremely efficient for me to operate (since it can be managed fully with the keyboard).
-
-[[xmonad.png]]
-
-With my XMonad setup, there are several auxiliary utilities required to make it a "full desktop environment." A few of these packages include:
-- [[https://codeberg.org/xmobar/xmobar][xmobar]] - Status bar
-- [[https://github.com/davatorium/rofi][rofi]] - App launcher
-- [[https://github.com/sagb/alttab][alttab]] - Window switcher
-- [[https://feh.finalrewind.org/][feh]] - Wallpaper utility
-- pavucontrol and pamixer - Sound and volume control
-- [[https://github.com/firecat53/networkmanager-dmenu][networkmanager_dmenu]] - Internet connection control
-- brightnessctl - Screen brightness control
-- [[https://www.umaxx.net/][sct]] - Adjust screen color temperature
-- xkill and killall - Better than hitting Ctrl+Alt+Delete and waiting a few minutes
-
-* My Config
-This directory includes my XMonad configuration, which consists of:
-- [[./xmonad.hs][xmonad.hs]] - Main configuration
-- [[./startup.sh][startup.sh]] - Startup script called by XMonad on startup
-- [[./lib/Colors/Stylix.hs.mustache][lib/Colors/Stylix.hs.mustache]] - Mustache template used to generate color library to theme XMonad with Stylix
-- [[./xmobarrc.mustache][xmobarrc.mustache]] - Mustache template used to generate my xmobar config themed with Stylix
-- [[./xmonad.nix][xmonad.nix]] - Loads XMonad and my configuration (along with any necessary packages for my config) into my flake when imported
-
-My full config is a [[./xmonad.org][literate org document (xmonad.org)]].
diff --git a/user/wm/xmonad/lib/Colors/Stylix.hs.mustache b/user/wm/xmonad/lib/Colors/Stylix.hs.mustache
deleted file mode 100644
index d5ff51d..0000000
--- a/user/wm/xmonad/lib/Colors/Stylix.hs.mustache
+++ /dev/null
@@ -1,18 +0,0 @@
-module Colors.Stylix where
-
-import XMonad
-
-colorBg = "#{{base00-hex}}"
-colorFg = "#{{base05-hex}}"
-color01 = "#{{base01-hex}}" -- usually black
-color02 = "#{{base08-hex}}" -- usually red
-color03 = "#{{base0B-hex}}" -- usually green
-color04 = "#{{base0A-hex}}" -- usually yellow
-color05 = "#{{base0E-hex}}" -- usually blue
-color06 = "#{{base0F-hex}}" -- usually magenta
-color07 = "#{{base0D-hex}}" -- usually cyan
-color08 = "#{{base07-hex}}" -- usually white
-
--- Select focus and secondary color
-colorFocus = color02
-colorSecondary = color07
diff --git a/user/wm/xmonad/startup.sh b/user/wm/xmonad/startup.sh
deleted file mode 100755
index 3995843..0000000
--- a/user/wm/xmonad/startup.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-colorBg=$1
-colorFg=$2
-colorFocus=$3
-colorSecondary=$4
-
-# Startup shell script called by xmonad to start necessary programs
-#
-## Kill previous instances of applications (Prevents multiple instances of the following if XMonad is restarted durin the X session)
-killall xmobar
-killall nm-applet
-
-# Launch necessary desktop applications
-autorandr;
-picom --animations --animation-window-mass 1 --animation-for-open-window zoom --animation-stiffness 200 --experimental-backends && # requires picom-pijulius
-xset r rate 350 50 &
-setxkbmap -option caps:escape &
-~/.fehbg-stylix &
-~/.config/xmobar/xmobar-st-check.sh &
-alttab -w 1 -t 240x160 -i 64x64 -sc 1 -bg $colorBg -fg $colorFg -frame $colorSecondary -inact $colorFg &
-##/usr/bin/trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --widthtype request --transparent true --alpha 0 --height 28 --tint $trayertint --monitor "primary" &
-nm-applet &
-GOMAXPROCS=1 syncthing --no-browser &
-protonmail-bridge --noninteractive &
-emacs --daemon &
-gnome-keyring-daemon --daemonize --login &
-gnome-keyring-daemon --start --components=secrets &
diff --git a/user/wm/xmonad/xmobar-st-check.sh.mustache b/user/wm/xmonad/xmobar-st-check.sh.mustache
deleted file mode 100644
index 4e09949..0000000
--- a/user/wm/xmonad/xmobar-st-check.sh.mustache
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-while true
- do
- curl localhost:8384 -m 1 &> /dev/null || echo '❄ st off' > ~/.st-status;
- curl localhost:8384 -m 1 &> /dev/null && echo '↺ st on' > ~/.st-status;
- sleep 5;
- done
diff --git a/user/wm/xmonad/xmobarrc.mustache b/user/wm/xmonad/xmobarrc.mustache
deleted file mode 100644
index 0d9dcba..0000000
--- a/user/wm/xmonad/xmobarrc.mustache
+++ /dev/null
@@ -1,55 +0,0 @@
-Config { font = "Inconsolata 16"
- , additionalFonts = ["Symbols Nerd Font 14"]
- , border = NoBorder
- , bgColor = "#{{base00-hex}}"
- , alpha = 200
- , fgColor = "#{{base05-hex}}"
- , position = TopSize C 100 28
- , textOffset = -1
- , iconOffset = -1
- , lowerOnStart = True
- , pickBroadest = False
- , persistent = False
- , hideOnStart = False
- , iconRoot = "."
- , allDesktops = True
- , overrideRedirect = True
- , commands = [
- Run XMonadLog
- , Run Date " \xf073 %a %-m/%-d/%y %-I:%M:%S%P" "date" 10
- , Run BatteryP ["BAT0"]
- ["-t", "",
- "-L", "10", "-H", "80", "-p", "3", "--",
- "-O","\xf313 \xf17e3 % ",
- "-i","\xf313 \xf17e7 % ",
- "-o","\xf313 \xf17e4 % ",
- "-L", "-15", "-H", "-5",
- "-l", "#{{base08-hex}}", "-m", "#{{base05-hex}}", "-h", "#{{base0B-hex}}"] 10
- , Run Brightness
- [ "-t", "\xf0eb % ", "--",
- "-D", "amdgpu_bl1"
- ] 2
- , Run Volume "default" "Master"
- [ "-t", "", "--"
- , "--on", " \xf028 % "
- , "--onc", "#{{base0D-hex}}"
- , "--off", " \xf026 Mute "
- , "--offc", "#{{base0F-hex}}"
- ] 1
- , Run DynNetwork
- [ "-t", "\xf0200 "] 1
- , Run Com "cat"
- [ "/home/emmet/.st-status"] "syncthing" 10
- , Run Com "echo"
- [ "\xea77 "] "syncthingsymbol" 0
- , Run Com "echo"
- [ "\xeb5c "] "artsymbol" 0
- , Run Com "cat"
- [ "/home/emmet/.currenttheme"] "currenttheme" 0
- , Run Memory [ "-t", "\xf035b % ( GB)", "-d", "1", "--", "--scale", "1024"] 20
- ]
- , sepChar = "%"
- , alignSep = "}{"
- , template = " %battery% %bright%%default:Master% %memory% %artsymbol%%currenttheme%}%XMonadLog%{%syncthing% %dynnetwork% %date% "
- }
-}
diff --git a/user/wm/xmonad/xmonad.hs b/user/wm/xmonad/xmonad.hs
deleted file mode 100644
index db64d50..0000000
--- a/user/wm/xmonad/xmonad.hs
+++ /dev/null
@@ -1,473 +0,0 @@
--- IMPORTS
-import qualified Data.Map as M
-import Control.Monad as C
-import Data.List
-import Data.Monoid
-import Data.Maybe (fromJust)
-import Graphics.X11.ExtraTypes.XF86
-import System.Exit
-import System.IO
-import XMonad
-import XMonad.Actions.Navigation2D
-import XMonad.Actions.SpawnOn
-import XMonad.Actions.TiledWindowDragging
-import XMonad.Actions.Warp
-import XMonad.Actions.WindowNavigation
-import XMonad.Actions.WithAll
-import XMonad.Hooks.DynamicLog
-import qualified XMonad.Hooks.EwmhDesktops as EWMHD
-import XMonad.Hooks.FadeWindows
-import XMonad.Hooks.ManageDocks
-import XMonad.Hooks.RefocusLast
-import XMonad.Hooks.ServerMode
-import XMonad.Hooks.StatusBar
-import XMonad.Hooks.StatusBar.PP
-import XMonad.Layout.DraggingVisualizer
-import XMonad.Layout.Dwindle
-import XMonad.Layout.Fullscreen
-import XMonad.Layout.Gaps
-import XMonad.Layout.LayoutHints
-import XMonad.Layout.LimitWindows
-import XMonad.Layout.MouseResizableTile
-import XMonad.Layout.Spacing
-import XMonad.ManageHook
-import qualified XMonad.StackSet as W
---import qualified DBus as D
---import qualified DBus.Client as D
-import XMonad.Util.NamedScratchpad
-import XMonad.Util.Run
-import XMonad.Util.SpawnOnce
-
--- setup color variables
-import Colors.Stylix
-
--- Border colors for unfocused and focused windows, respectively.
-myNormalBorderColor, myFocusedBorderColor :: String
-myNormalBorderColor = colorBg
-myFocusedBorderColor = colorFocus
-
--- Default apps
-myTerminal, myBrowser :: String
-myTerminal = "$TERM"
-myBrowser = "$BROWSER"
-myEditor = "$EDITOR"
-mySpawnEditor = "$SPAWNEDITOR"
-
--- Whether focus follows the mouse pointer.
-myFocusFollowsMouse :: Bool
-myFocusFollowsMouse = False
-
--- Whether clicking on a window to focus also passes the click to the window
-myClickJustFocuses :: Bool
-myClickJustFocuses = False
-
--- Width of the window border in pixels.
-myBorderWidth :: Dimension
-myBorderWidth = 3
-
--- Modmask
-myModMask :: KeyMask
-myModMask = mod4Mask
-
-myWorkspaces :: [String]
-myWorkspaces =
- [ "\xf15c¹", -- document icon for writing
- "\xeb01 ²", -- globe icon for browsing
- "\xf121³", -- dev icon for programming
- "\xf0cb9 ⁴", -- music file icon for composition
- "\xf1fc⁵", -- paint icon for art
- "\xf0bdc ⁶", -- video icon for recording/editing
- "\xf0d6⁷", -- money icon for finances
- "\xf19d⁸", -- cap icon for teaching
- "\xf11b⁹" -- gamepad icon for gaming
- ]
-
-myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y)
-
-clickable ws = ""++ws++""
- where i = fromJust $ M.lookup ws myWorkspaceIndices
-
--- Scratchpads
-myScratchPads :: [NamedScratchpad]
-myScratchPads =
- [ NS "terminal" spawnTerm findTerm manageTerm,
- NS "ranger" spawnRanger findRanger manageRanger,
- NS "octave" spawnOctave findOctave manageOctave,
- NS "btm" spawnBtm findBtm manageBtm,
- NS "geary" spawnGeary findGeary manageGeary,
- NS "helpmenu" spawnHelp findHelp manageHelp,
- NS "musikcube" spawnMusikcube findMusikcube manageMusikcube,
- NS "cal" spawnCal findCal manageCal,
- NS "pavucontrol" spawnPavucontrol findPavucontrol managePavucontrol,
- NS "discord" spawnDiscord findDiscord manageDiscord
- ]
- where
- spawnTerm = myTerminal ++ " --title scratchpad"
- findTerm = title =? "scratchpad"
- manageTerm = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnRanger = "kitty --title ranger-scratchpad -e ranger"
- findRanger = title =? "ranger-scratchpad"
- manageRanger = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnOctave = myTerminal ++ " --title octave-scratchpad -e octave"
- findOctave = title =? "octave-scratchpad"
- manageOctave = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnBtm = myTerminal ++ " -o font.size=12 --title btm-scratchpad -e btm"
- findBtm = title =? "btm-scratchpad"
- manageBtm = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnDiscord = "gtkcord4"
- findDiscord = className =? "gtkcord4"
- manageDiscord = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnGeary = "geary"
- findGeary = className =? "Geary"
- manageGeary = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnHelp = myTerminal ++ " --title xmonad_helpmenu -e w3m ~/.xmonad/helpmenu.txt"
- findHelp = title =? "xmonad_helpmenu"
- manageHelp = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnMusikcube = myTerminal ++ " -o font.size=14 --title musikcube-scratchpad -e musikcube"
- findMusikcube = title =? "musikcube-scratchpad"
- manageMusikcube = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnCal = "gnome-calendar"
- findCal = className =? "gnome-calendar"
- manageCal = customFloating $ W.RationalRect l t w h
- where
- h = 0.4
- w = 0.3
- t = 0.45 - h
- l = 1 - w
- spawnPavucontrol = "pavucontrol"
- findPavucontrol = className =? "Pavucontrol"
- managePavucontrol = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.3
- t = 0.9 - h
- l = 0.65 - w
-
-myKeys conf@(XConfig {XMonad.modMask = modm}) =
- M.fromList $
- [
- -- insert keybinds with array values of ((keybind, action))
-
- -- launch a terminal
- ((modm, xK_Return), spawn $ XMonad.terminal conf),
-
- -- launch emacsclient
- ((modm, xK_a), spawn mySpawnEditor),
-
- -- launch browser
- ((modm, xK_s), spawn myBrowser),
-
- -- take screenshots
- ((0, xK_Print), spawn "flameshot gui"), -- snip screenshot and save
- ((controlMask, xK_Print), spawn "flameshot gui --clipboard"), -- snip screenshot to clipboard
- ((shiftMask, xK_Print), spawn "flameshot screen"), -- screen capture current monitor and save
- ((controlMask .|. shiftMask, xK_Print), spawn "flameshot screen -c"), -- screen capture current monitor to clipboard
-
- -- launch game manager in gaming workspace
- ((modm, xK_g), spawn "xdotool key Super+9 && gamehub"),
-
- -- control brightness from kbd
- ((0, xF86XK_MonBrightnessUp), spawn "brightnessctl set +15"),
- ((0, xF86XK_MonBrightnessDown), spawn "brightnessctl set 15-"),
-
- -- control kbd brightness from kbd
- ((0, xF86XK_KbdBrightnessUp), spawn "brightnessctl --device='asus::kbd_backlight' set +1 & xset r rate 350 100"),
- ((0, xF86XK_KbdBrightnessDown), spawn "brightnessctl --device='asus::kbd_backlight' set 1- & xset r rate 350 100"),
- ((shiftMask, xF86XK_MonBrightnessUp), spawn "brightnessctl --device='asus::kbd_backlight' set +1 & xset r rate 350 100"),
- ((shiftMask, xF86XK_MonBrightnessDown), spawn "brightnessctl --device='asus::kbd_backlight' set 1- & xset r rate 350 100"),
-
- -- control volume from kbd
- ((0, xF86XK_AudioLowerVolume), spawn "pamixer -d 10"),
- ((0, xF86XK_AudioRaiseVolume), spawn "pamixer -i 10"),
- ((0, xF86XK_AudioMute), spawn "pamixer -t"),
-
- -- control music from kbd
- --((0, xF86XK_AudioPlay), spawn "cmus-remote -u"),
- --((0, xF86XK_AudioStop), spawn "cmus-remote -s"),
- --((0, xF86XK_AudioNext), spawn "cmus-remote -n && ~/.local/bin/cmus-current-song-notify.sh"),
- --((0, xF86XK_AudioPrev), spawn "cmus-remote -r && ~/.local/bin/cmus-current-song-notify.sh"),
-
- -- launch rofi
- ((modm, xK_semicolon), spawn ("rofi -show drun -show-icons")),
- ((modm, xK_p), spawn ("keepmenu")),
- ((modm, xK_i), spawn ("networkmanager_dmenu")),
-
- -- close focused window
- ((modm, xK_q), kill),
- -- close all windows on current workspace
- ((modm .|. shiftMask, xK_c), killAll),
- -- exit xmonad
- ((modm .|. shiftMask, xK_q), spawn "killall xmonad-x86_64-linux"),
- -- Lock with dm-tool
- ((modm, xK_Escape), spawn "dm-tool switch-to-greeter"),
- -- Lock with dm-tool and suspend
- ((modm .|. shiftMask, xK_s), spawn "dm-tool switch-to-greeter & systemctl suspend"),
- ((modm .|. shiftMask, xK_Escape), spawn "dm-tool switch-to-greeter & systemctl suspend"),
-
- -- Rotate through the available layout algorithms
- ((modm, xK_space), sendMessage NextLayout),
- -- Reset the layouts on the current workspace to default
- ((modm .|. shiftMask, xK_space), setLayout $ XMonad.layoutHook conf),
-
- -- Resize viewed windows to the correct size
- ((modm, xK_r), C.sequence_ [spawn "killall xmobar; autorandr -c; xmonad --restart;", refresh]),
-
- -- Move focus to window below
- ((modm, xK_j), C.sequence_ [windowGo D True, switchLayer, warpToWindow 0.5 0.5]),
- -- Move focus to window above
- ((modm, xK_k), C.sequence_ [windowGo U True, switchLayer, warpToWindow 0.5 0.5]),
- -- Move focus to window left
- ((modm, xK_h), C.sequence_ [windowGo L True, switchLayer, warpToWindow 0.5 0.5]),
- -- Move focus to window right
- ((modm, xK_l), C.sequence_ [windowGo R True, switchLayer, warpToWindow 0.5 0.5]),
-
- -- Move focus to screen below
- ((modm, xK_Down), C.sequence_ [screenGo D True, warpToCurrentScreen 0.5 0.5]),
- -- Move focus to screen up
- ((modm, xK_Up), C.sequence_ [screenGo U True, warpToCurrentScreen 0.5 0.5]),
- -- Move focus to screen left
- ((modm, xK_Left), C.sequence_ [screenGo L True, warpToCurrentScreen 0.5 0.5]),
- -- Move focus to screen right
- ((modm, xK_Right), C.sequence_ [screenGo R True, warpToCurrentScreen 0.5 0.5]),
-
- -- Swap with window below
- ((modm .|. shiftMask, xK_j), C.sequence_ [windowSwap D True, windowGo U True, switchLayer]),
- -- Swap with window above
- ((modm .|. shiftMask, xK_k), C.sequence_ [windowSwap U True, windowGo D True, switchLayer]),
- -- Swap with window left
- ((modm .|. shiftMask, xK_h), C.sequence_ [windowSwap L True, windowGo R True, switchLayer]),
- -- Swap with window right
- ((modm .|. shiftMask, xK_l), C.sequence_ [windowSwap R True, windowGo L True, switchLayer]),
-
- -- Shrink the master area
- ((modm .|. controlMask, xK_h), sendMessage Shrink),
- -- Expand the master area
- ((modm .|. controlMask, xK_l), sendMessage Expand),
-
- -- Swap the focused window and the master window
- ((modm, xK_m), windows W.swapMaster),
-
- -- Toggle tiling/floating status of window
- ((modm, xK_t), withFocused toggleFloat),
-
- -- Increment the number of windows in the master area
- ((modm, xK_comma), sendMessage (IncMasterN 1)),
- -- Deincrement the number of windows in the master area
- ((modm, xK_period), sendMessage (IncMasterN (-1))),
-
- -- scratchpad keybindings
- ((modm, xK_f), namedScratchpadAction myScratchPads "ranger"),
- --((modm, xK_x), namedScratchpadAction myScratchPads "keepassxc"),
- ((modm, xK_z), namedScratchpadAction myScratchPads "terminal"),
- ((modm, xK_b), namedScratchpadAction myScratchPads "btm"),
- ((modm, xK_d), namedScratchpadAction myScratchPads "discord"),
- ((modm, xK_o), namedScratchpadAction myScratchPads "octave"),
- ((modm, xK_e), namedScratchpadAction myScratchPads "geary"),
- ((modm, xK_n), namedScratchpadAction myScratchPads "musikcube"),
- ((modm, xK_c), namedScratchpadAction myScratchPads "cal"),
- ((modm, xK_y), namedScratchpadAction myScratchPads "pavucontrol"),
- ((modm, xK_slash), namedScratchpadAction myScratchPads "helpmenu")
-
- ]
-
- ++
- -- 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)]
- ]
-
- where
- -- toggle float/tiling status of current window
- toggleFloat w =
- windows
- ( \s ->
- if M.member w (W.floating s)
- then W.sink w s
- else (W.float w (W.RationalRect (1 / 8) (1 / 8) (3 / 4) (3 / 4)) s)
- )
- -- warp cursor to (x, y) coordinate of current screen
- warpToCurrentScreen x y = do
- sid <- withWindowSet $ return . W.screen . W.current
- warpToScreen sid x y
- -- TODO goto and warp (coords x, y) to window in DIRECTION, or goto and warp (coords x, y) to screen in DIRECTION if no window is available
- windowOrScreenGoAndWarp direction x y =
- do windowGo direction True
-
--- Mouse bindings: default actions bound to mouse events
-myMouseBindings (XConfig {XMonad.modMask = modm}) =
- M.fromList $
- -- -- mod-button1, Set the window to floating mode and move by dragging
- [ ( (modm, button1),
- ( \w ->
- focus w
- >> mouseMoveWindow w
- >> windows W.shiftMaster
- )
- ),
- -- mod-button3, Set the window to floating mode and resize by dragging
- ( (modm, button3),
- ( \w ->
- focus w
- >> mouseResizeWindow w
- >> windows W.shiftMaster
- )
- )
- -- you may also bind events to the mouse scroll wheel (button4 and button5)
- ]
-
--- Layouts:
-
-spcPx = 5
-
-mySpacing = spacingRaw False (Border spcPx spcPx spcPx spcPx) True (Border spcPx spcPx spcPx spcPx) True
-
-myLayout = fullscreenFocus $ draggingVisualizer $ avoidStruts $ layoutHintsToCenter $ (mySpacing $ (Full ||| mouseResizable ||| mouseResizableMirrored))
- where
- -- default tiling algorithm partitions the screen into two panes
- tiled = Tall 1 (5 / 100) (1 / 2)
-
- dwindled = Dwindle R CW 1.1 1.1
-
- mouseResizable =
- mouseResizableTile
- { masterFrac = 0.51,
- slaveFrac = 0.51,
- draggerType = BordersDragger
- }
-
- mouseResizableMirrored =
- mouseResizableTile
- { masterFrac = 0.51,
- slaveFrac = 0.51,
- draggerType = BordersDragger,
- isMirrored = True
- }
-
--- Window rules:
-myManageHook =
- composeAll
- [ title =? "Myuzi" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- title =? "octave-scratchpad" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- title =? "scratchpad" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- className =? "gtkcord4" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- title =? "ranger-scratchpad" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- title =? "btm-scratchpad" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- className =? "Geary" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- title =? "scratch_cfw" --> (customFloating $ W.RationalRect 0.58 0.04 0.42 0.7),
- title =? "xmonad_helpmenu" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- className =? "Pavucontrol" --> (customFloating $ W.RationalRect 0.05 0.04 0.5 0.35),
- className =? "Syncthing GTK" --> (customFloating $ W.RationalRect 0.53 0.50 0.46 0.45),
- className =? "Proton Mail Bridge" --> (customFloating $ W.RationalRect 0.59 0.66 0.40 0.30),
- className =? "Zenity" --> (customFloating $ W.RationalRect 0.45 0.4 0.1 0.2),
- resource =? "desktop_window" --> doIgnore,
- -- this gimp snippet is from Kathryn Anderson (https://xmonad.haskell.narkive.com/bV34Aiw3/layout-for-gimp-how-to)
- (className =? "Gimp" <&&> fmap ("color-selector" `isSuffixOf`) role) --> doFloat,
- (className =? "Gimp" <&&> fmap ("layer-new" `isSuffixOf`) role) --> doFloat,
- (className =? "Gimp" <&&> fmap ("-dialog" `isSuffixOf`) role) --> doFloat,
- (className =? "Gimp" <&&> fmap ("-tool" `isSuffixOf`) role) --> doFloat,
- -- end snippet
- resource =? "kdesktop" --> doIgnore,
- manageDocks
- ]
- where role = stringProperty "WM_WINDOW_ROLE"
-
--- Apply fullscreen manage and event hooks
-myFullscreenManageHook = fullscreenManageHook
-myFullscreenEventHook = fullscreenEventHook
-
--- Server mode event hook
-myEventHook = serverModeEventHook
-
--- navigation 2d config required for visual window movement
-myNavigation2DConfig = def {layoutNavigation = [("Tall", hybridOf sideNavigation $ hybridOf centerNavigation lineNavigation), ("Full", hybridOf sideNavigation centerNavigation)]
- , floatNavigation = hybridOf lineNavigation centerNavigation
- , screenNavigation = hybridOf lineNavigation centerNavigation}
-
---myPP = def { ppCurrent = xmobarColor colorFocus "" }
-myPP = xmobarPP { ppTitle = xmobarColor colorFocus "",
- ppCurrent = xmobarStripTags ["NSP"] . xmobarColor colorFocus "",
- ppVisible = xmobarStripTags ["NSP"] . xmobarColor colorSecondary "",
- ppHidden = xmobarStripTags ["NSP"] . xmobarColor colorFg "",
- ppHiddenNoWindows = xmobarStripTags ["NSP"] . xmobarColor color01 "",
- ppOrder = \(ws : _) -> [ws],
- ppSep = " "
- }
-mySB = statusBarProp "xmobar" (pure myPP)
-
--- Startup hook
-myStartupHook = do
- spawnOnce ("~/.config/xmonad/startup.sh '" ++ colorBg ++ "' '" ++ colorFg ++ "' '" ++ colorFocus ++ "' '" ++ colorSecondary ++ "'")
-
--- Now run xmonad with all the defaults we set up.
-main = do
- spawn ("xmobar -x 0")
- spawn ("xmobar -x 1")
- spawn ("xmobar -x 2")
- xmonad . withSB mySB $
- withNavigation2DConfig myNavigation2DConfig $
- fullscreenSupportBorder $
- docks $
- EWMHD.ewmh
- def
- { -- simple stuff
- terminal = myTerminal,
- focusFollowsMouse = myFocusFollowsMouse,
- clickJustFocuses = myClickJustFocuses,
- borderWidth = myBorderWidth,
- modMask = myModMask,
- workspaces = myWorkspaces,
- normalBorderColor = myNormalBorderColor,
- focusedBorderColor = myFocusedBorderColor,
- -- key bindings
- keys = myKeys,
- mouseBindings = myMouseBindings,
- -- hooks, layouts
- layoutHook = myLayout,
- manageHook = myManageHook <+> myFullscreenManageHook <+> namedScratchpadManageHook myScratchPads,
- handleEventHook = myEventHook <+> myFullscreenEventHook <+> fadeWindowsEventHook,
- logHook = (refocusLastLogHook >> nsHideOnFocusLoss myScratchPads),
- startupHook = myStartupHook
- }
diff --git a/user/wm/xmonad/xmonad.nix b/user/wm/xmonad/xmonad.nix
deleted file mode 100644
index ca2b71c..0000000
--- a/user/wm/xmonad/xmonad.nix
+++ /dev/null
@@ -1,113 +0,0 @@
-{ config, pkgs, ... }:
-
-{
-
- imports = [ ../picom/picom.nix
- ../../lang/haskell/haskell.nix
- ../../app/terminal/alacritty.nix
- ../../app/terminal/kitty.nix
- ( import ../../app/dmenu-scripts/networkmanager-dmenu.nix {dmenu_command = "rofi -show dmenu"; inherit pkgs;})
- ];
-
- home.packages = with pkgs; [
- xmobar
- networkmanagerapplet
- dunst
- pamixer
- autorandr
- alacritty
- kitty
- dmenu
- rofi
- keepmenu
- networkmanager_dmenu
- pavucontrol
- feh
- flameshot
- alttab
- xdotool
- xclip
- ddcutil
- sct
- libnotify
- xorg.xkill
- killall
- bottom
- brightnessctl
- xorg.xcursorthemes
- xorg.xev
- xdg-utils
- xdg-desktop-portal
- xdg-desktop-portal-gtk
- ];
-
- home.file.".config/xmonad/xmonad.hs".source = ./xmonad.hs;
- home.file.".config/xmonad/startup.sh".source = ./startup.sh;
-
- home.file.".config/xmonad/lib/Colors/Stylix.hs".source = config.lib.stylix.colors {
- template = builtins.readFile ./lib/Colors/Stylix.hs.mustache;
- extension = ".hs";
- };
-
- home.file.".config/xmobar/xmobarrc".source = config.lib.stylix.colors {
- template = builtins.readFile ./xmobarrc.mustache;
- extension = "";
- };
-
-
- home.file.".config/xmobar/xmobar-st-check.sh" = {
- source = config.lib.stylix.colors {
- template = builtins.readFile ./xmobar-st-check.sh.mustache;
- extension = ".sh";
- };
- executable = true;
- };
-
- programs.feh.enable = true;
- programs.rofi.enable = true;
-
- services.autorandr.enable = true;
- programs.autorandr.enable = true;
- programs.autorandr.profiles = {
- "default" = {
- fingerprint = {
- eDP1 = "00ffffffffffff0051b8601500000000171e0104a522137807ee91a3544c99260f5054000000010101010101010101010101010101011434805070381f402b20750458c210000018000000fd0e302d505043010a20202020202000000010000a202020202020202020202020000000fc00544c3135365644585030310a2001d67013790000030114630401847f074f002a001f0037041e00160004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df90";
- };
- config = {
- eDP-1 = {
- enable = true;
- primary = true;
- position = "0x0";
- mode = "1920x1080";
- };
- };
- hooks.postswitch = "xmonad --restart; ~/.fehbg-stylix;";
- };
- "dock" = {
- fingerprint = {
- eDP1 = "00ffffffffffff0051b8601500000000171e0104a522137807ee91a3544c99260f5054000000010101010101010101010101010101011434805070381f402b20750458c210000018000000fd0e302d505043010a20202020202000000010000a202020202020202020202020000000fc00544c3135365644585030310a2001d67013790000030114630401847f074f002a001f0037041e00160004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df90";
- HDMI-1 = "00ffffffffffff0010ac48f04c4a56470619010380342078ea1df5ae4f35b3250d5054a54b008180a940d100714f0101010101010101283c80a070b023403020360006442100001a000000ff00595947434e35323247564a4c0a000000fc0044454c4c2055323431330a2020000000fd00384c1e5111000a2020202020200163020325f15090050403020716011f1213142015110623091f0767030c001000382d83010000023a801871382d40582c450006442100001e011d8018711c1620582c250006442100009e011d007251d01e206e28550006442100001e8c0ad08a20e02d10103e960006442100001800000000000000000000000000000000000016";
- DP-1-1 = "00ffffffffffff0010ac2ca0533836310e12010380342078eab325ac5130b426105054a54b008180a940714f01010101010101010101283c80a070b023403020360007442100001a000000ff004a55343336383356313638530a000000fc0044454c4c20323430385746500a000000fd00384c1e5311000a202020202020012002031bf14890050403020716012309070765030c00100083010000023a801871382d40582c450007442100001e011d8018711c1620582c250007442100009e011d007251d01e206e28550007442100001e8c0ad08a20e02d10103e96000744210000180000000000000000000000000000000000000000000000000000000047";
- };
- config = {
- eDP-1 = {
- enable = true;
- primary = true;
- position = "1000x1200";
- mode = "1920x1080";
- };
- HDMI-1 = {
- enable = true;
- position = "1920x0";
- mode = "1920x1200";
- };
- DP-1-1 = {
- enable = true;
- position = "0x0";
- mode = "1920x1200";
- };
- };
- hooks.postswitch = "xmonad --restart; ~/.fehbg-stylix;";
- };
- };
-}
diff --git a/user/wm/xmonad/xmonad.org b/user/wm/xmonad/xmonad.org
deleted file mode 100644
index c4cdfce..0000000
--- a/user/wm/xmonad/xmonad.org
+++ /dev/null
@@ -1,899 +0,0 @@
-#+title: Xmonad Config
-#+author: Emmet
-
-* DEPRECATED
-# TODO remove XMonad config
-I haven't used XMonad in probably a year, so this is completely unmaintained and I'll probably remove it at some point, since I have completely migrated to Wayland at this point!
-
-* XMonad Config
-The main configuration file for XMonad is [[./xmonad.hs][~/.xmonad/xmonad.hs]].
-** Imports
-First I import a bunch of libraries:
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- IMPORTS
-import qualified Data.Map as M
-import Control.Monad as C
-import Data.List
-import Data.Monoid
-import Data.Maybe (fromJust)
-import Graphics.X11.ExtraTypes.XF86
-import System.Exit
-import System.IO
-import XMonad
-import XMonad.Actions.Navigation2D
-import XMonad.Actions.SpawnOn
-import XMonad.Actions.TiledWindowDragging
-import XMonad.Actions.Warp
-import XMonad.Actions.WindowNavigation
-import XMonad.Actions.WithAll
-import XMonad.Hooks.DynamicLog
-import qualified XMonad.Hooks.EwmhDesktops as EWMHD
-import XMonad.Hooks.FadeWindows
-import XMonad.Hooks.ManageDocks
-import XMonad.Hooks.RefocusLast
-import XMonad.Hooks.ServerMode
-import XMonad.Hooks.StatusBar
-import XMonad.Hooks.StatusBar.PP
-import XMonad.Layout.DraggingVisualizer
-import XMonad.Layout.Dwindle
-import XMonad.Layout.Fullscreen
-import XMonad.Layout.Gaps
-import XMonad.Layout.LayoutHints
-import XMonad.Layout.LimitWindows
-import XMonad.Layout.MouseResizableTile
-import XMonad.Layout.Spacing
-import XMonad.ManageHook
-import qualified XMonad.StackSet as W
---import qualified DBus as D
---import qualified DBus.Client as D
-import XMonad.Util.NamedScratchpad
-import XMonad.Util.Run
-import XMonad.Util.SpawnOnce
-
-#+END_SRC
-** Theme Setup
-*** Custom Color Library Template
-#+BEGIN_SRC haskell :tangle ./lib/Colors/Stylix.hs.mustache
-module Colors.Stylix where
-
-import XMonad
-
-colorBg = "#{{base00-hex}}"
-colorFg = "#{{base05-hex}}"
-color01 = "#{{base01-hex}}" -- usually black
-color02 = "#{{base08-hex}}" -- usually red
-color03 = "#{{base0B-hex}}" -- usually green
-color04 = "#{{base0A-hex}}" -- usually yellow
-color05 = "#{{base0E-hex}}" -- usually blue
-color06 = "#{{base0F-hex}}" -- usually magenta
-color07 = "#{{base0D-hex}}" -- usually cyan
-color08 = "#{{base07-hex}}" -- usually white
-
--- Select focus and secondary color
-colorFocus = color02
-colorSecondary = color07
-
-#+END_SRC
-*** Import Custom Color Library
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- setup color variables
-import Colors.Stylix
-
-#+END_SRC
-** Settings
-*** Border Color
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Border colors for unfocused and focused windows, respectively.
-myNormalBorderColor, myFocusedBorderColor :: String
-myNormalBorderColor = colorBg
-myFocusedBorderColor = colorFocus
-
-#+END_SRC
-*** Default Apps
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Default apps
-myTerminal, myBrowser :: String
-myTerminal = "$TERM"
-myBrowser = "$BROWSER"
-myEditor = "$EDITOR"
-mySpawnEditor = "$SPAWNEDITOR"
-
-#+END_SRC
-*** Mouse Focus
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Whether focus follows the mouse pointer.
-myFocusFollowsMouse :: Bool
-myFocusFollowsMouse = False
-
--- Whether clicking on a window to focus also passes the click to the window
-myClickJustFocuses :: Bool
-myClickJustFocuses = False
-
-#+END_SRC
-*** Border Width
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Width of the window border in pixels.
-myBorderWidth :: Dimension
-myBorderWidth = 3
-
-#+END_SRC
-*** Select Modkey
-The default modkey is =mod1Mask= which is bound to left alt. =mod3Mask= can be used for right alt, but most people (including myself) simply use =mod4Mask= which is bound to the super key.
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Modmask
-myModMask :: KeyMask
-myModMask = mod4Mask
-
-#+END_SRC
-*** Workspaces
-By default, workspaces are simply numeric strings ("1", "2", "3", etc..), but any strings can be used (i.e. "web", "irc", "code", etc..). I set workspace names with \x____ where the blank spaces represent a [[https://www.nerdfonts.com/][nerd font symbol code]]. This works nicely because I have a Nerd Font as fn=1 in my [[XMobar][xmobar]], which renders the nerd font glyphs in xmobar.
-#+BEGIN_SRC haskell :tangle xmonad.hs
-myWorkspaces :: [String]
-myWorkspaces =
- [ "\xf15c¹", -- document icon for writing
- "\xeb01 ²", -- globe icon for browsing
- "\xf121³", -- dev icon for programming
- "\xf0cb9 ⁴", -- music file icon for composition
- "\xf1fc⁵", -- paint icon for art
- "\xf0bdc ⁶", -- video icon for recording/editing
- "\xf0d6⁷", -- money icon for finances
- "\xf19d⁸", -- cap icon for teaching
- "\xf11b⁹" -- gamepad icon for gaming
- ]
-
-myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y)
-
-clickable ws = ""++ws++""
- where i = fromJust $ M.lookup ws myWorkspaceIndices
-
-#+END_SRC
-*** Scratchpads
-Scratchpads are single applications that are normally not visible (in a workspace called "NSP"), but can be brought into the current workspace with a quick keybind. I find that this works really well for applications I use frequently for quick tasks, such as my terminal, password manager, email, and music player.
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Scratchpads
-myScratchPads :: [NamedScratchpad]
-myScratchPads =
- [ NS "terminal" spawnTerm findTerm manageTerm,
- NS "ranger" spawnRanger findRanger manageRanger,
- NS "octave" spawnOctave findOctave manageOctave,
- NS "btm" spawnBtm findBtm manageBtm,
- NS "geary" spawnGeary findGeary manageGeary,
- NS "helpmenu" spawnHelp findHelp manageHelp,
- NS "musikcube" spawnMusikcube findMusikcube manageMusikcube,
- NS "cal" spawnCal findCal manageCal,
- NS "pavucontrol" spawnPavucontrol findPavucontrol managePavucontrol,
- NS "discord" spawnDiscord findDiscord manageDiscord
- ]
- where
- spawnTerm = myTerminal ++ " --title scratchpad"
- findTerm = title =? "scratchpad"
- manageTerm = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnRanger = "kitty --title ranger-scratchpad -e ranger"
- findRanger = title =? "ranger-scratchpad"
- manageRanger = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnOctave = myTerminal ++ " --title octave-scratchpad -e octave"
- findOctave = title =? "octave-scratchpad"
- manageOctave = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnBtm = myTerminal ++ " -o font.size=12 --title btm-scratchpad -e btm"
- findBtm = title =? "btm-scratchpad"
- manageBtm = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnDiscord = "gtkcord4"
- findDiscord = className =? "gtkcord4"
- manageDiscord = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnGeary = "geary"
- findGeary = className =? "Geary"
- manageGeary = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.4
- t = 0.75 - h
- l = 0.70 - w
- spawnHelp = myTerminal ++ " --title xmonad_helpmenu -e w3m ~/.xmonad/helpmenu.txt"
- findHelp = title =? "xmonad_helpmenu"
- manageHelp = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnMusikcube = myTerminal ++ " -o font.size=14 --title musikcube-scratchpad -e musikcube"
- findMusikcube = title =? "musikcube-scratchpad"
- manageMusikcube = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 - h
- l = 0.95 - w
- spawnCal = "gnome-calendar"
- findCal = className =? "gnome-calendar"
- manageCal = customFloating $ W.RationalRect l t w h
- where
- h = 0.4
- w = 0.3
- t = 0.45 - h
- l = 1 - w
- spawnPavucontrol = "pavucontrol"
- findPavucontrol = className =? "Pavucontrol"
- managePavucontrol = customFloating $ W.RationalRect l t w h
- where
- h = 0.5
- w = 0.3
- t = 0.9 - h
- l = 0.65 - w
-
-#+END_SRC
-*** Keybindings
-Keybinds can be set with an array of values like: =(keybind, action)=. The array is declared like so:
-#+BEGIN_SRC haskell :tangle xmonad.hs
-myKeys conf@(XConfig {XMonad.modMask = modm}) =
- M.fromList $
- [
- -- insert keybinds with array values of ((keybind, action))
-
-#+END_SRC
-Then, keybindings are setup line by line as in the following sections:
-**** Quick App Keybindings
-The following binds the following:
-| Keybinding | Action |
-|---------------------+-----------------------------------------------|
-| S-Return | New terminal |
-| S-a | New emacs frame |
-| S-s | New browser window |
-| PrintScreen | Snip a screenshot |
-| C-PrintScreen | Snip a screenshot (to clipboard) |
-| Shift-PrintScreen | Screen capture current monitor |
-| Shift-C-PrintScreen | Screen capture current monitor (to clipboard) |
-#+BEGIN_SRC haskell :tangle xmonad.hs
- -- launch a terminal
- ((modm, xK_Return), spawn $ XMonad.terminal conf),
-
- -- launch emacsclient
- ((modm, xK_a), spawn mySpawnEditor),
-
- -- launch browser
- ((modm, xK_s), spawn myBrowser),
-
- -- take screenshots
- ((0, xK_Print), spawn "flameshot gui"), -- snip screenshot and save
- ((controlMask, xK_Print), spawn "flameshot gui --clipboard"), -- snip screenshot to clipboard
- ((shiftMask, xK_Print), spawn "flameshot screen"), -- screen capture current monitor and save
- ((controlMask .|. shiftMask, xK_Print), spawn "flameshot screen -c"), -- screen capture current monitor to clipboard
-
- -- launch game manager in gaming workspace
- ((modm, xK_g), spawn "xdotool key Super+9 && gamehub"),
-
-#+END_SRC
-**** Generic Keybindings
-These setup standard bindings for brightness and audio control from the keyboard.
-#+BEGIN_SRC haskell :tangle xmonad.hs
- -- control brightness from kbd
- ((0, xF86XK_MonBrightnessUp), spawn "brightnessctl set +15"),
- ((0, xF86XK_MonBrightnessDown), spawn "brightnessctl set 15-"),
-
- -- control kbd brightness from kbd
- ((0, xF86XK_KbdBrightnessUp), spawn "brightnessctl --device='asus::kbd_backlight' set +1 & xset r rate 350 100"),
- ((0, xF86XK_KbdBrightnessDown), spawn "brightnessctl --device='asus::kbd_backlight' set 1- & xset r rate 350 100"),
- ((shiftMask, xF86XK_MonBrightnessUp), spawn "brightnessctl --device='asus::kbd_backlight' set +1 & xset r rate 350 100"),
- ((shiftMask, xF86XK_MonBrightnessDown), spawn "brightnessctl --device='asus::kbd_backlight' set 1- & xset r rate 350 100"),
-
- -- control volume from kbd
- ((0, xF86XK_AudioLowerVolume), spawn "pamixer -d 10"),
- ((0, xF86XK_AudioRaiseVolume), spawn "pamixer -i 10"),
- ((0, xF86XK_AudioMute), spawn "pamixer -t"),
-
- -- control music from kbd
- --((0, xF86XK_AudioPlay), spawn "cmus-remote -u"),
- --((0, xF86XK_AudioStop), spawn "cmus-remote -s"),
- --((0, xF86XK_AudioNext), spawn "cmus-remote -n && ~/.local/bin/cmus-current-song-notify.sh"),
- --((0, xF86XK_AudioPrev), spawn "cmus-remote -r && ~/.local/bin/cmus-current-song-notify.sh"),
-
-#+END_SRC
-**** Launcher Keybinds
-I have =rofi= bound to =S-;= for quick app access.
-#+BEGIN_SRC haskell :tangle xmonad.hs
- -- launch rofi
- ((modm, xK_semicolon), spawn ("rofi -show drun -show-icons")),
- ((modm, xK_p), spawn ("keepmenu")),
- ((modm, xK_i), spawn ("networkmanager_dmenu")),
-
-#+END_SRC
-**** Window Management Keybinds
-All of the following keybinds pertain to window management and layouts:
-| Keybinding | Action |
-|-------------------+------------------------------------------------------------------------------------------------|
-| S-q | Kill window |
-| S-Shift-c | Kill all windows on current workspace |
-| S-Shift-q | Exit xmonad |
-| S-Shift-Escape | Lock xmonad |
-| S-Shift-s | Lock xmonad and suspend |
-| S-Shift-Escape | Lock xmonad and suspend |
-| S-Space | Switch to next layout |
-| S-Shift-Space | Reset layout on current workspace |
-| S-r | Resize windows to correct size |
-| S-{←,↓,↑,→} | Switch to screen visually {left,down,up,right} (requires a [[Window Rules and Hooks][Navigation2Dconfig]]) |
-| S-{h,j,k,l} | Switch to window visually {left,down,up,right} (requires a [[Window Rules and Hooks][Navigation2Dconfig]]) |
-| S-Shift-{h,j,k,l} | Swap window visually {left,down,up,right} on current workspace (requires a [[Window Rules and Hooks][Navigation2Dconfig]]) |
-| S-C-{h,l} | Resize master window area |
-| S-m | Move current window into master window area |
-| S-t | Toggle floating status of a window (this is a function defined [[Toggle Float Function Definition][here]]) |
-| S-, | Increase number of windows in the master window area |
-| S-. | Decrease number of windows in the master window area |
-These keybindings are then set via:
-#+BEGIN_SRC haskell :tangle xmonad.hs
- -- close focused window
- ((modm, xK_q), kill),
- -- close all windows on current workspace
- ((modm .|. shiftMask, xK_c), killAll),
- -- exit xmonad
- ((modm .|. shiftMask, xK_q), spawn "killall xmonad-x86_64-linux"),
- -- Lock with dm-tool
- ((modm, xK_Escape), spawn "dm-tool switch-to-greeter"),
- -- Lock with dm-tool and suspend
- ((modm .|. shiftMask, xK_s), spawn "dm-tool switch-to-greeter & systemctl suspend"),
- ((modm .|. shiftMask, xK_Escape), spawn "dm-tool switch-to-greeter & systemctl suspend"),
-
- -- Rotate through the available layout algorithms
- ((modm, xK_space), sendMessage NextLayout),
- -- Reset the layouts on the current workspace to default
- ((modm .|. shiftMask, xK_space), setLayout $ XMonad.layoutHook conf),
-
- -- Resize viewed windows to the correct size
- ((modm, xK_r), C.sequence_ [spawn "killall xmobar; autorandr -c; xmonad --restart;", refresh]),
-
- -- Move focus to window below
- ((modm, xK_j), C.sequence_ [windowGo D True, switchLayer, warpToWindow 0.5 0.5]),
- -- Move focus to window above
- ((modm, xK_k), C.sequence_ [windowGo U True, switchLayer, warpToWindow 0.5 0.5]),
- -- Move focus to window left
- ((modm, xK_h), C.sequence_ [windowGo L True, switchLayer, warpToWindow 0.5 0.5]),
- -- Move focus to window right
- ((modm, xK_l), C.sequence_ [windowGo R True, switchLayer, warpToWindow 0.5 0.5]),
-
- -- Move focus to screen below
- ((modm, xK_Down), C.sequence_ [screenGo D True, warpToCurrentScreen 0.5 0.5]),
- -- Move focus to screen up
- ((modm, xK_Up), C.sequence_ [screenGo U True, warpToCurrentScreen 0.5 0.5]),
- -- Move focus to screen left
- ((modm, xK_Left), C.sequence_ [screenGo L True, warpToCurrentScreen 0.5 0.5]),
- -- Move focus to screen right
- ((modm, xK_Right), C.sequence_ [screenGo R True, warpToCurrentScreen 0.5 0.5]),
-
- -- Swap with window below
- ((modm .|. shiftMask, xK_j), C.sequence_ [windowSwap D True, windowGo U True, switchLayer]),
- -- Swap with window above
- ((modm .|. shiftMask, xK_k), C.sequence_ [windowSwap U True, windowGo D True, switchLayer]),
- -- Swap with window left
- ((modm .|. shiftMask, xK_h), C.sequence_ [windowSwap L True, windowGo R True, switchLayer]),
- -- Swap with window right
- ((modm .|. shiftMask, xK_l), C.sequence_ [windowSwap R True, windowGo L True, switchLayer]),
-
- -- Shrink the master area
- ((modm .|. controlMask, xK_h), sendMessage Shrink),
- -- Expand the master area
- ((modm .|. controlMask, xK_l), sendMessage Expand),
-
- -- Swap the focused window and the master window
- ((modm, xK_m), windows W.swapMaster),
-
- -- Toggle tiling/floating status of window
- ((modm, xK_t), withFocused toggleFloat),
-
- -- Increment the number of windows in the master area
- ((modm, xK_comma), sendMessage (IncMasterN 1)),
- -- Deincrement the number of windows in the master area
- ((modm, xK_period), sendMessage (IncMasterN (-1))),
-
-#+END_SRC
-**** Scratchpad Keybinds
-I have each [[Scratchpads][scratchpad]] bound to a keybinding for quick access:
-| Keybinding | Associated Scratchpad |
-|------------+----------------------------|
-| S-f | Ranger file manager |
-| S-x | KeePassXC password manager |
-| S-z | Terminal |
-| S-b | Bottom control panel |
-| S-d | Discord |
-| S-o | Octave (calculator) |
-| S-e | mu4e (email) |
-| S-n | Music player |
-| S-c | cfw (calendar) |
-| S-y | Pavucontrol (audio mixer) |
-| S-/ | Keybinding help menu |
-These are then bound:
-#+BEGIN_SRC haskell :tangle xmonad.hs
- -- scratchpad keybindings
- ((modm, xK_f), namedScratchpadAction myScratchPads "ranger"),
- --((modm, xK_x), namedScratchpadAction myScratchPads "keepassxc"),
- ((modm, xK_z), namedScratchpadAction myScratchPads "terminal"),
- ((modm, xK_b), namedScratchpadAction myScratchPads "btm"),
- ((modm, xK_d), namedScratchpadAction myScratchPads "discord"),
- ((modm, xK_o), namedScratchpadAction myScratchPads "octave"),
- ((modm, xK_e), namedScratchpadAction myScratchPads "geary"),
- ((modm, xK_n), namedScratchpadAction myScratchPads "musikcube"),
- ((modm, xK_c), namedScratchpadAction myScratchPads "cal"),
- ((modm, xK_y), namedScratchpadAction myScratchPads "pavucontrol"),
- ((modm, xK_slash), namedScratchpadAction myScratchPads "helpmenu")
-
-#+END_SRC
-**** End of Standard Keybinds
-To finish the section of standard keybinds, we simply close the array [[Keybindings][started above]].
-#+BEGIN_SRC haskell :tangle xmonad.hs
- ]
-#+END_SRC
-**** Workspace Management Keybinds
-Workspaces are generically managed via =mod-[1..9]= to shift to a workspace, and =mod-shift-[1..9]= to send a window to another workspace. To generate this effect, the following code is added to the keybindings definition:
-#+BEGIN_SRC haskell :tangle xmonad.hs
- ++
- -- 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)]
- ]
-
-#+END_SRC
-**** Custom Function Definitions
-To have =toggleFloat= and =warpToCurrentScreen=, I must define them after setting up the keybinds like so:
-#+BEGIN_SRC haskell :tangle xmonad.hs
- where
- -- toggle float/tiling status of current window
- toggleFloat w =
- windows
- ( \s ->
- if M.member w (W.floating s)
- then W.sink w s
- else (W.float w (W.RationalRect (1 / 8) (1 / 8) (3 / 4) (3 / 4)) s)
- )
- -- warp cursor to (x, y) coordinate of current screen
- warpToCurrentScreen x y = do
- sid <- withWindowSet $ return . W.screen . W.current
- warpToScreen sid x y
- -- TODO goto and warp (coords x, y) to window in DIRECTION, or goto and warp (coords x, y) to screen in DIRECTION if no window is available
- windowOrScreenGoAndWarp direction x y =
- do windowGo direction True
-
-#+END_SRC
-**** Mouse Bindings
-The following code sets up some convenient mouse bindings:
-| Mouse Binding | Action |
-|---------------+----------------------------------------------|
-| S-Left click | Make window floating and drag to move window |
-| S-Right click | Make window floating and resize window |
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Mouse bindings: default actions bound to mouse events
-myMouseBindings (XConfig {XMonad.modMask = modm}) =
- M.fromList $
- -- -- mod-button1, Set the window to floating mode and move by dragging
- [ ( (modm, button1),
- ( \w ->
- focus w
- >> mouseMoveWindow w
- >> windows W.shiftMaster
- )
- ),
- -- mod-button3, Set the window to floating mode and resize by dragging
- ( (modm, button3),
- ( \w ->
- focus w
- >> mouseResizeWindow w
- >> windows W.shiftMaster
- )
- )
- -- you may also bind events to the mouse scroll wheel (button4 and button5)
- ]
-
-#+END_SRC
-*** Layouts
-By default, I utilize three layouts:
-- =mouseResizable= which is a master/stack layout I have set up to have dwindling sizes
-- =mouseResizableMirrored=, same as above except mirrored
-- =Full= where only one window takes up the entire space of the screen
-
-I embellish these layouts with a few modifiers:
-- =fullscreenFocus= for fullscreen support (also requires a [[Window Rules][fullscreen manage hook]])
-- =draggingVisualizer= so that I can drag tiling windows about via my [[Mouse Bindings][mouse bindings]]
-- =avoidStruts= since I use [[XMobar][xmobar]]
-- =spacingRaw= to put a few pixels of space between windows since it looks nice
-
-This is all applied in the following code to set the =myLayout= variable, which gets used later in the [[Main][main function]]:
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Layouts:
-
-spcPx = 5
-
-mySpacing = spacingRaw False (Border spcPx spcPx spcPx spcPx) True (Border spcPx spcPx spcPx spcPx) True
-
-myLayout = fullscreenFocus $ draggingVisualizer $ avoidStruts $ layoutHintsToCenter $ (mySpacing $ (Full ||| mouseResizable ||| mouseResizableMirrored))
- where
- -- default tiling algorithm partitions the screen into two panes
- tiled = Tall 1 (5 / 100) (1 / 2)
-
- dwindled = Dwindle R CW 1.1 1.1
-
- mouseResizable =
- mouseResizableTile
- { masterFrac = 0.51,
- slaveFrac = 0.51,
- draggerType = BordersDragger
- }
-
- mouseResizableMirrored =
- mouseResizableTile
- { masterFrac = 0.51,
- slaveFrac = 0.51,
- draggerType = BordersDragger,
- isMirrored = True
- }
-
-#+END_SRC
-*** Window Rules and Hooks
-Window rules apply actions when a new window matching a specific query is apprehended by xmonad. I mainly use these to control my scratchpads (to make them all floating) and for some apps that don't behave nicely inside of a tiling window manager.
-
-The easiest way to do a query is by either =className= or =title= which can both be found using =xprop=.
-
-The list of window rules must be made into a manage hook, which gets used in the [[Main][main function]] when starting xmonad.
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Window rules:
-myManageHook =
- composeAll
- [ title =? "Myuzi" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- title =? "octave-scratchpad" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- title =? "scratchpad" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- className =? "gtkcord4" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- title =? "ranger-scratchpad" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- title =? "btm-scratchpad" --> (customFloating $ W.RationalRect 0.1 0.1 0.8 0.8),
- className =? "Geary" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- title =? "scratch_cfw" --> (customFloating $ W.RationalRect 0.58 0.04 0.42 0.7),
- title =? "xmonad_helpmenu" --> (customFloating $ W.RationalRect 0.05 0.05 0.9 0.9),
- className =? "Pavucontrol" --> (customFloating $ W.RationalRect 0.05 0.04 0.5 0.35),
- className =? "Syncthing GTK" --> (customFloating $ W.RationalRect 0.53 0.50 0.46 0.45),
- className =? "Proton Mail Bridge" --> (customFloating $ W.RationalRect 0.59 0.66 0.40 0.30),
- className =? "Zenity" --> (customFloating $ W.RationalRect 0.45 0.4 0.1 0.2),
- resource =? "desktop_window" --> doIgnore,
- -- this gimp snippet is from Kathryn Anderson (https://xmonad.haskell.narkive.com/bV34Aiw3/layout-for-gimp-how-to)
- (className =? "Gimp" <&&> fmap ("color-selector" `isSuffixOf`) role) --> doFloat,
- (className =? "Gimp" <&&> fmap ("layer-new" `isSuffixOf`) role) --> doFloat,
- (className =? "Gimp" <&&> fmap ("-dialog" `isSuffixOf`) role) --> doFloat,
- (className =? "Gimp" <&&> fmap ("-tool" `isSuffixOf`) role) --> doFloat,
- -- end snippet
- resource =? "kdesktop" --> doIgnore,
- manageDocks
- ]
- where role = stringProperty "WM_WINDOW_ROLE"
-
-#+END_SRC
-
-I also must set my fullscreen manage hook and fullscreen event hook here to fully enable fullscreen support mentioned [[Layouts][earlier]]:
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Apply fullscreen manage and event hooks
-myFullscreenManageHook = fullscreenManageHook
-myFullscreenEventHook = fullscreenEventHook
-
-#+END_SRC
-
-Next, I set up my event hook to put xmonad into server mode, which allows me to use [[https://github.com/xmonad/xmonad-contrib/blob/master/scripts/xmonadctl.hs][xmonadctl]] from [[https://github.com/xmonad/xmonad-contrib][xmonad-contrib]], which enables control of xmonad actions from the shell/scripts.
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Server mode event hook
-myEventHook = serverModeEventHook
-
-#+END_SRC
-
-Next I set up a =navigation2DConfig= for use with [[Window Management Keybinds][visual window movement]]:
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- navigation 2d config required for visual window movement
-myNavigation2DConfig = def {layoutNavigation = [("Tall", hybridOf sideNavigation $ hybridOf centerNavigation lineNavigation), ("Full", hybridOf sideNavigation centerNavigation)]
- , floatNavigation = hybridOf lineNavigation centerNavigation
- , screenNavigation = hybridOf lineNavigation centerNavigation}
-
-#+END_SRC
-
-*** New Xmobar Setup
-#+BEGIN_SRC haskell :tangle xmonad.hs
---myPP = def { ppCurrent = xmobarColor colorFocus "" }
-myPP = xmobarPP { ppTitle = xmobarColor colorFocus "",
- ppCurrent = xmobarStripTags ["NSP"] . xmobarColor colorFocus "",
- ppVisible = xmobarStripTags ["NSP"] . xmobarColor colorSecondary "",
- ppHidden = xmobarStripTags ["NSP"] . xmobarColor colorFg "",
- ppHiddenNoWindows = xmobarStripTags ["NSP"] . xmobarColor color01 "",
- ppOrder = \(ws : _) -> [ws],
- ppSep = " "
- }
-mySB = statusBarProp "xmobar" (pure myPP)
-
-#+END_SRC
-*** Startup Script
-I have a startup script at =~/.xmonad/startup.sh= which starts various apps and sets up a few things. In my xmonad config, it is autostarted by setting a =startupHook=.
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Startup hook
-myStartupHook = do
- spawnOnce ("~/.config/xmonad/startup.sh '" ++ colorBg ++ "' '" ++ colorFg ++ "' '" ++ colorFocus ++ "' '" ++ colorSecondary ++ "'")
-
-#+END_SRC
-
-First I start by retrieving the colors passed to the script from xmonad.
-#+BEGIN_SRC sh :tangle startup.sh :tangle-mode (identity #o755)
-colorBg=$1
-colorFg=$2
-colorFocus=$3
-colorSecondary=$4
-
-#+END_SRC
-
-The autostart script kills all applications I am autostarting, which prevents multiple instances of background applications when I restart xmonad:
-#+BEGIN_SRC sh :tangle startup.sh :tangle-mode (identity #o755)
-# Startup shell script called by xmonad to start necessary programs
-#
-## Kill previous instances of applications (Prevents multiple instances of the following if XMonad is restarted durin the X session)
-killall xmobar
-killall nm-applet
-
-#+END_SRC
-
-Then, desktop applications are started in the background.
-#+BEGIN_SRC sh :tangle startup.sh :tangle-mode (identity #o755)
-# Launch necessary desktop applications
-autorandr;
-picom --animations --animation-window-mass 1 --animation-for-open-window zoom --animation-stiffness 200 --experimental-backends && # requires picom-pijulius
-xset r rate 350 50 &
-setxkbmap -option caps:escape &
-~/.fehbg-stylix &
-~/.config/xmobar/xmobar-st-check.sh &
-alttab -w 1 -t 240x160 -i 64x64 -sc 1 -bg $colorBg -fg $colorFg -frame $colorSecondary -inact $colorFg &
-##/usr/bin/trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --widthtype request --transparent true --alpha 0 --height 28 --tint $trayertint --monitor "primary" &
-nm-applet &
-GOMAXPROCS=1 syncthing --no-browser &
-protonmail-bridge --noninteractive &
-emacs --daemon &
-gnome-keyring-daemon --daemonize --login &
-gnome-keyring-daemon --start --components=secrets &
-#+END_SRC
-** Main
-Lastly, xmonad is started with all of the [[Settings][settings set up as variables]]. First xmobar is setup with =spawnPipe= so that it has access to the [[Workspaces][workspaces from xmonad]]. Then xmonad is executed with the settings.
-#+BEGIN_SRC haskell :tangle xmonad.hs
--- Now run xmonad with all the defaults we set up.
-main = do
- spawn ("xmobar -x 0")
- spawn ("xmobar -x 1")
- spawn ("xmobar -x 2")
- xmonad . withSB mySB $
- withNavigation2DConfig myNavigation2DConfig $
- fullscreenSupportBorder $
- docks $
- EWMHD.ewmh
- def
- { -- simple stuff
- terminal = myTerminal,
- focusFollowsMouse = myFocusFollowsMouse,
- clickJustFocuses = myClickJustFocuses,
- borderWidth = myBorderWidth,
- modMask = myModMask,
- workspaces = myWorkspaces,
- normalBorderColor = myNormalBorderColor,
- focusedBorderColor = myFocusedBorderColor,
- -- key bindings
- keys = myKeys,
- mouseBindings = myMouseBindings,
- -- hooks, layouts
- layoutHook = myLayout,
- manageHook = myManageHook <+> myFullscreenManageHook <+> namedScratchpadManageHook myScratchPads,
- handleEventHook = myEventHook <+> myFullscreenEventHook <+> fadeWindowsEventHook,
- logHook = (refocusLastLogHook >> nsHideOnFocusLoss myScratchPads),
- startupHook = myStartupHook
- }
-#+END_SRC
-* XMobar Config
-I utilize xmobar as a status bar on my monitors. To manage my xmobar config, I start by creating a template file, and then style that using stylix.
-** Xmobar Template
-This is my base xmobarrc. This is a full xmobar config with placeholders for the colors (i.e. =colorFgNormal=, =colorBgNormal=, =color01Normal=, =color01Bright=, etc...). [[./startup.sh][startup.sh]] copies this into =xmobarrc= with my current base16 color scheme. This also depends on =Inconsolata= and =Symbols Nerd Font=.
-#+BEGIN_SRC haskell :tangle xmobarrc.mustache
-Config { font = "Inconsolata 16"
- , additionalFonts = ["Symbols Nerd Font 14"]
- , border = NoBorder
- , bgColor = "#{{base00-hex}}"
- , alpha = 200
- , fgColor = "#{{base05-hex}}"
- , position = TopSize C 100 28
- , textOffset = -1
- , iconOffset = -1
- , lowerOnStart = True
- , pickBroadest = False
- , persistent = False
- , hideOnStart = False
- , iconRoot = "."
- , allDesktops = True
- , overrideRedirect = True
- , commands = [
- Run XMonadLog
- , Run Date " \xf073 %a %-m/%-d/%y %-I:%M:%S%P" "date" 10
- , Run BatteryP ["BAT0"]
- ["-t", "",
- "-L", "10", "-H", "80", "-p", "3", "--",
- "-O","\xf313 \xf17e3 % ",
- "-i","\xf313 \xf17e7 % ",
- "-o","\xf313 \xf17e4 % ",
- "-L", "-15", "-H", "-5",
- "-l", "#{{base08-hex}}", "-m", "#{{base05-hex}}", "-h", "#{{base0B-hex}}"] 10
- , Run Brightness
- [ "-t", "\xf0eb % ", "--",
- "-D", "amdgpu_bl1"
- ] 2
- , Run Volume "default" "Master"
- [ "-t", "", "--"
- , "--on", " \xf028 % "
- , "--onc", "#{{base0D-hex}}"
- , "--off", " \xf026 Mute "
- , "--offc", "#{{base0F-hex}}"
- ] 1
- , Run DynNetwork
- [ "-t", "\xf0200 "] 1
- , Run Com "cat"
- [ "/home/emmet/.st-status"] "syncthing" 10
- , Run Com "echo"
- [ "\xea77 "] "syncthingsymbol" 0
- , Run Com "echo"
- [ "\xeb5c "] "artsymbol" 0
- , Run Com "cat"
- [ "/home/emmet/.currenttheme"] "currenttheme" 0
- , Run Memory [ "-t", "\xf035b % ( GB)", "-d", "1", "--", "--scale", "1024"] 20
- ]
- , sepChar = "%"
- , alignSep = "}{"
- , template = " %battery% %bright%%default:Master% %memory% %artsymbol%%currenttheme%}%XMonadLog%{%syncthing% %dynnetwork% %date% "
- }
-}
-
-#+END_SRC
-
-#+BEGIN_SRC shell :tangle xmobar-st-check.sh.mustache
-#!/bin/sh
-while true
- do
- curl localhost:8384 -m 1 &> /dev/null || echo '❄ st off' > ~/.st-status;
- curl localhost:8384 -m 1 &> /dev/null && echo '↺ st on' > ~/.st-status;
- sleep 5;
- done
-#+END_SRC
-
-* Nix Integration
-In order to have Nix put my xmonad/xmobar configuration in the proper places, I have [[./xmonad.nix][xmonad.nix]], which I source in the =imports= block of my [[../../home.nix][home.nix]].
-#+BEGIN_SRC nix :tangle xmonad.nix
-{ config, pkgs, ... }:
-
-{
-
- imports = [ ../picom/picom.nix
- ../../lang/haskell/haskell.nix
- ../../app/terminal/alacritty.nix
- ../../app/terminal/kitty.nix
- ( import ../../app/dmenu-scripts/networkmanager-dmenu.nix {dmenu_command = "rofi -show dmenu"; inherit pkgs;})
- ];
-
- home.packages = with pkgs; [
- xmobar
- networkmanagerapplet
- dunst
- pamixer
- autorandr
- alacritty
- kitty
- dmenu
- rofi
- keepmenu
- networkmanager_dmenu
- pavucontrol
- feh
- flameshot
- alttab
- xdotool
- xclip
- ddcutil
- sct
- libnotify
- xorg.xkill
- killall
- bottom
- brightnessctl
- xorg.xcursorthemes
- xorg.xev
- xdg-utils
- xdg-desktop-portal
- xdg-desktop-portal-gtk
- ];
-
- home.file.".config/xmonad/xmonad.hs".source = ./xmonad.hs;
- home.file.".config/xmonad/startup.sh".source = ./startup.sh;
-
- home.file.".config/xmonad/lib/Colors/Stylix.hs".source = config.lib.stylix.colors {
- template = builtins.readFile ./lib/Colors/Stylix.hs.mustache;
- extension = ".hs";
- };
-
- home.file.".config/xmobar/xmobarrc".source = config.lib.stylix.colors {
- template = builtins.readFile ./xmobarrc.mustache;
- extension = "";
- };
-
-
- home.file.".config/xmobar/xmobar-st-check.sh" = {
- source = config.lib.stylix.colors {
- template = builtins.readFile ./xmobar-st-check.sh.mustache;
- extension = ".sh";
- };
- executable = true;
- };
-
- programs.feh.enable = true;
- programs.rofi.enable = true;
-
- services.autorandr.enable = true;
- programs.autorandr.enable = true;
- programs.autorandr.profiles = {
- "default" = {
- fingerprint = {
- eDP1 = "00ffffffffffff0051b8601500000000171e0104a522137807ee91a3544c99260f5054000000010101010101010101010101010101011434805070381f402b20750458c210000018000000fd0e302d505043010a20202020202000000010000a202020202020202020202020000000fc00544c3135365644585030310a2001d67013790000030114630401847f074f002a001f0037041e00160004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df90";
- };
- config = {
- eDP-1 = {
- enable = true;
- primary = true;
- position = "0x0";
- mode = "1920x1080";
- };
- };
- hooks.postswitch = "xmonad --restart; ~/.fehbg-stylix;";
- };
- "dock" = {
- fingerprint = {
- eDP1 = "00ffffffffffff0051b8601500000000171e0104a522137807ee91a3544c99260f5054000000010101010101010101010101010101011434805070381f402b20750458c210000018000000fd0e302d505043010a20202020202000000010000a202020202020202020202020000000fc00544c3135365644585030310a2001d67013790000030114630401847f074f002a001f0037041e00160004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df90";
- HDMI-1 = "00ffffffffffff0010ac48f04c4a56470619010380342078ea1df5ae4f35b3250d5054a54b008180a940d100714f0101010101010101283c80a070b023403020360006442100001a000000ff00595947434e35323247564a4c0a000000fc0044454c4c2055323431330a2020000000fd00384c1e5111000a2020202020200163020325f15090050403020716011f1213142015110623091f0767030c001000382d83010000023a801871382d40582c450006442100001e011d8018711c1620582c250006442100009e011d007251d01e206e28550006442100001e8c0ad08a20e02d10103e960006442100001800000000000000000000000000000000000016";
- DP-1-1 = "00ffffffffffff0010ac2ca0533836310e12010380342078eab325ac5130b426105054a54b008180a940714f01010101010101010101283c80a070b023403020360007442100001a000000ff004a55343336383356313638530a000000fc0044454c4c20323430385746500a000000fd00384c1e5311000a202020202020012002031bf14890050403020716012309070765030c00100083010000023a801871382d40582c450007442100001e011d8018711c1620582c250007442100009e011d007251d01e206e28550007442100001e8c0ad08a20e02d10103e96000744210000180000000000000000000000000000000000000000000000000000000047";
- };
- config = {
- eDP-1 = {
- enable = true;
- primary = true;
- position = "1000x1200";
- mode = "1920x1080";
- };
- HDMI-1 = {
- enable = true;
- position = "1920x0";
- mode = "1920x1200";
- };
- DP-1-1 = {
- enable = true;
- position = "0x0";
- mode = "1920x1200";
- };
- };
- hooks.postswitch = "xmonad --restart; ~/.fehbg-stylix;";
- };
- };
-}
-#+END_SRC