diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc deleted file mode 100755 index bd5e039..0000000 --- a/.config/bspwm/bspwmrc +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -pgrep -x sxhkd > /dev/null || sxhkd & - -bspc monitor -d 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 - -bspc config border_width 2 -bspc config normal_border_color "#919191" -bspc config focused_border_color "#FF6054" -bspc config presel_feedback_color "#CCCCCC" -bspc config window_gap 25 - -bspc config split_ratio 0.5 -bspc config borderless_monocle true -bspc config gapless_monocle true - -bspc config pointer_follows_monitor true -bspc config pointer_follows_focus false -bspc config focus_follows_pointer true - -bspc config merge_overlapping_monitors true - -bspc config top_monocle_padding 25 -bspc config right_monocle_padding 25 -bspc config left_monocle_padding 25 -bspc config bottom_monocle_padding 25 -bspc config borderless_monocle false - -bspc rule -a Emacs state=tiled -bspc rule -a Zathura state=tiled - -exec .local/bin/startup diff --git a/.config/i3/config b/.config/i3/config deleted file mode 100644 index 90a4986..0000000 --- a/.config/i3/config +++ /dev/null @@ -1,248 +0,0 @@ -# i3 config file (v4) -# https://i3wm.org/docs/userguide.html - -set $mod Mod4 -set $alt Mod1 - -# Font for window titles. Will also be used by the bar unless a different font -# is used in the bar {} block below. -font pango:JetBrains Mono 9 - -# Bordering -for_window [class="^.*"] border none - -# Focusing -focus_wrapping no - -# This font is widely installed, provides lots of unicode glyphs, right-to-left -# text rendering and scalability on retina/hidpi displays (thanks to pango). -#font pango:DejaVu Sans Mono 8 - -# Start XDG autostart .desktop files using dex. See also -# https://wiki.archlinux.org/index.php/XDG_Autostart -exec --no-startup-id dex --autostart --environment i3 - -# The combination of xss-lock, nm-applet and pactl is a popular choice, so -# they are included here as an example. Modify as you see fit. - -# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the -# screen before suspend. Use loginctl lock-session to lock your screen. -exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork - -# NetworkManager is the most popular way to manage wireless networks on Linux, -# and nm-applet is a desktop environment-independent system tray GUI for it. -exec --no-startup-id nm-applet - -# Use pamixer to adjust volume in PulseAudio. -set $refresh_i3status killall -SIGUSR1 i3status -bindsym XF86AudioRaiseVolume exec --no-startup-id pamixer --increase 5 && $refresh_i3status -bindsym XF86AudioLowerVolume exec --no-startup-id pamixer --decrease 5 && $refresh_i3status -bindsym XF86AudioMute exec --no-startup-id pamixer --toggle-mute && $refresh_i3status -bindsym XF86AudioPrev exec --no-startup-id playerctl previous -bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause -bindsym XF86AudioNext exec --no-startup-id playerctl next - -# Brightness -bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5% -bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- - -# Convenient volume/brightness keys -bindsym $mod+a exec --no-startup-id pamixer --increase 5 && $refresh_i3status -bindsym $mod+o exec --no-startup-id pamixer --decrease 5 && $refresh_i3status -bindsym $mod+Shift+a exec --no-startup-id brightnessctl set +5% -bindsym $mod+Shift+o exec --no-startup-id brightnessctl set 5%- - -# Use Mouse+$mod to drag floating windows to their wanted position -floating_modifier $mod - -# move tiling windows via drag & drop by left-clicking into the title bar, -# or left-clicking anywhere into the window while holding the floating modifier. -tiling_drag modifier titlebar - -# programs -bindsym $mod+e exec --no-startup-id rofi -show drun - -# bluetooth -bindsym $mod+b exec --no-startup-id rofi-bluetooth - -# emoji -bindsym $mod+i exec --no-startup-id rofimoji - -# emacs -bindsym $mod+Return exec emacsclient -n -c -a "" - -# terminal -bindsym $mod+Control+Return exec alacritty - -# screenshot -bindsym $mod+Shift+e exec flameshot gui - -# kill focused window -bindsym $mod+Shift+semicolon kill - -# change focus -bindsym $mod+h focus left -bindsym $mod+t focus down -bindsym $mod+n focus up -bindsym $mod+s focus right - -# alternatively, you can use the cursor keys: -bindsym $mod+Left focus left -bindsym $mod+Down focus down -bindsym $mod+Up focus up -bindsym $mod+Right focus right - -# move focused window -bindsym $mod+Shift+h move left -bindsym $mod+Shift+t move down -bindsym $mod+Shift+n move up -bindsym $mod+Shift+s move right - -# alternatively, you can use the cursor keys: -bindsym $mod+Shift+Left move left -bindsym $mod+Shift+Down move down -bindsym $mod+Shift+Up move up -bindsym $mod+Shift+Right move right - -# split in horizontal orientation -# bindsym $mod+d split h - -# split in vertical orientation -# bindsym $mod+k split v - -# enter fullscreen mode for the focused container -bindsym $mod+u fullscreen toggle - -# if the window is floating, center -bindsym $mod+c move position center - -# change container layout (stacked, tabbed, toggle split) -# bindsym $mod+o layout stacking -bindsym $mod+comma layout tabbed -bindsym $mod+period layout toggle split - -# toggle tiling / floating -bindsym $mod+Shift+space floating toggle - -# change focus between tiling / floating windows -bindsym $mod+space focus mode_toggle - -# focus the parent container -# bindsym $mod+a focus parent - -# focus the child container -#bindsym $mod+d focus child - -# Swap between workspaces -bindsym $mod+Tab workspace back_and_forth - -# Define names for default workspaces for which we configure key bindings later on. -# We use variables to avoid repeating the names in multiple places. -set $ws1 "1" -set $ws2 "2" -set $ws3 "3" -set $ws4 "4" -set $ws5 "5" -set $ws6 "6" -set $ws7 "7" -set $ws8 "8" -set $ws9 "9" -set $ws10 "10" -set $ws11 "11" -set $ws12 "12" -set $ws13 "13" -set $ws14 "14" -set $ws15 "15" -set $ws16 "16" -set $ws17 "17" -set $ws18 "18" -set $ws19 "19" -set $ws20 "20" - -# switch to workspace -bindsym $mod+ampersand workspace number $ws1 -bindsym $mod+bracketleft workspace number $ws2 -bindsym $mod+braceleft workspace number $ws3 -bindsym $mod+braceright workspace number $ws4 -bindsym $mod+parenleft workspace number $ws5 -bindsym $mod+equal workspace number $ws6 -bindsym $mod+asterisk workspace number $ws7 -bindsym $mod+parenright workspace number $ws8 -bindsym $mod+plus workspace number $ws9 -bindsym $mod+bracketright workspace number $ws10 -bindsym $mod+Control+ampersand workspace number $ws11 -bindsym $mod+Control+bracketleft workspace number $ws12 -bindsym $mod+Control+braceleft workspace number $ws13 -bindsym $mod+Control+braceright workspace number $ws14 -bindsym $mod+Control+parenleft workspace number $ws15 -bindsym $mod+Control+equal workspace number $ws16 -bindsym $mod+Control+asterisk workspace number $ws17 -bindsym $mod+Control+parenright workspace number $ws18 -bindsym $mod+Control+plus workspace number $ws19 -bindsym $mod+Control+bracketright workspace number $ws20 - -# move focused container to workspace -bindsym $mod+Shift+ampersand move container to workspace number $ws1 -bindsym $mod+Shift+bracketleft move container to workspace number $ws2 -bindsym $mod+Shift+braceleft move container to workspace number $ws3 -bindsym $mod+Shift+braceright move container to workspace number $ws4 -bindsym $mod+Shift+1 move container to workspace number $ws5 -bindsym $mod+Shift+equal move container to workspace number $ws6 -bindsym $mod+Shift+asterisk move container to workspace number $ws7 -bindsym $mod+Shift+2 move container to workspace number $ws8 -bindsym $mod+Shift+plus move container to workspace number $ws9 -bindsym $mod+Shift+bracketright move container to workspace number $ws10 -bindsym $mod+Control+Shift+ampersand move container to workspace number $ws11 -bindsym $mod+Control+Shift+bracketleft move container to workspace number $ws12 -bindsym $mod+Control+Shift+braceleft move container to workspace number $ws13 -bindsym $mod+Control+Shift+braceright move container to workspace number $ws14 -bindsym $mod+Control+Shift+1 move container to workspace number $ws15 -bindsym $mod+Control+Shift+equal move container to workspace number $ws16 -bindsym $mod+Control+Shift+asterisk move container to workspace number $ws17 -bindsym $mod+Control+Shift+2 move container to workspace number $ws18 -bindsym $mod+Control+Shift+plus move container to workspace number $ws19 -bindsym $mod+Control+Shift+bracketright move container to workspace number $ws20 - -# move focused container to adjacent workspace -bindsym $mod+j workspace prev_on_output -bindsym $mod+k workspace next_on_output -bindsym $mod+Shift+j move container to workspace prev_on_output -bindsym $mod+Shift+k move container to workspace next_on_output - -# reload the configuration file -bindsym $mod+Shift+r reload -# exit i3 (logs you out of your X session) -bindsym $mod+Shift+period exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" - -# resize window (you can also use the mouse for that) -mode "resize" { - # These bindings trigger as soon as you enter the resize mode - - # Pressing left will shrink the window’s width. - # Pressing right will grow the window’s width. - # Pressing up will shrink the window’s height. - # Pressing down will grow the window’s height. - bindsym h resize shrink width 10 px or 10 ppt - bindsym t resize grow height 10 px or 10 ppt - bindsym n resize shrink height 10 px or 10 ppt - bindsym s resize grow width 10 px or 10 ppt - - # same bindings, but for the arrow keys - bindsym Left resize shrink width 10 px or 10 ppt - bindsym Down resize grow height 10 px or 10 ppt - bindsym Up resize shrink height 10 px or 10 ppt - bindsym Right resize grow width 10 px or 10 ppt - - # back to normal: Enter or Escape or $mod+r - bindsym Return mode "default" - bindsym Escape mode "default" - bindsym $mod+r mode "default" -} - -bindsym $mod+r mode "resize" - -# Start i3bar to display a workspace bar (plus the system information i3status -# finds out, if available) -bar { - status_command i3status -} diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc deleted file mode 100644 index 7dacc6f..0000000 --- a/.config/sxhkd/sxhkdrc +++ /dev/null @@ -1,261 +0,0 @@ -# -# wm independent hotkeys -# - -# terminal emulator -super + control + Return - alacritty - -# emacs -super + Return - emacsclient --create-frame - -# program launcher -super + space - rofi -show drun - -# all programs launcher -super + shift + space - rofi -show run - -# window jumper -super + shift + Tab - rofi -show window - -# passwords -super + p - rofi-pass - -# bluetooth -super + b - rofi-bluetooth - -# vpn -super + v - rofi-vpn - -# power -super + BackSpace - powermenu - -# make sxhkd reload its configuration files: -super + Escape - pkill -USR1 -x sxhkd - -# -# bspwm hotkeys -# - -# quit/restart bspwm -super + alt + r - bspc wm -r - -# close and kill -super + {_,shift + }c - bspc node -{c,k} - -# alternate between the tiled and monocle layout -super + m - bspc desktop -l next - -# send the newest marked node to the newest preselected node -super + y - bspc node newest.marked.local -n newest.!automatic.local - -# swap the current node and the biggest window -super + g - bspc node -s biggest.window - -# -# state/flags -# - -# set the window state -super + {t,shift + t,s} - bspc node -t {tiled,pseudo_tiled,floating} - -super + f - bspc node -t \~fullscreen - -# set the node flags -super + ctrl + {m,x,y,z} - bspc node -g {marked,locked,sticky,private} - -# -# focus/swap -# - -# focus the node in the given direction -super + {_,shift + }{h,j,k,l} - bspc node -{f,s} {west,south,north,east} - -# focus the node for the given path jump -# super + {p,b,comma,period} - # bspc node -f @{parent,brother,first,second} - -# focus the next/previous window in the current desktop -# super + {_,shift + }c -# bspc node -f {next,prev}.local.!hidden.window - -# focus the next/previous desktop in the current monitor -super + {e,u} - bspc desktop -f {prev,next}.local - -# focus the last node/desktop -super + {grave,Tab} - bspc {node,desktop} -f last - -# focus the older or newer node in the focus history -# super + {o,i} -# bspc wm -h off; \ -# bspc node {older,newer} -f; \ -# bspc wm -h on - -# focus or send to the given desktop -super + {_, shift + } ampersand - bspc {desktop -f, node -d} '^1' - -super + {_, shift + } bracketleft - bspc {desktop -f, node -d} '^2' - -super + {_, shift + } braceleft - bspc {desktop -f, node -d} '^3' - -super + {_, shift + } braceright - bspc {desktop -f, node -d} '^4' - -super + {_, shift + } parenleft - bspc {desktop -f, node -d} '^5' - -super + {_, shift + } equal - bspc {desktop -f, node -d} '^6' - -super + {_, shift + } asterisk - bspc {desktop -f, node -d} '^7' - -super + {_, shift + } parenright - bspc {desktop -f, node -d} '^8' - -super + {_, shift + } plus - bspc {desktop -f, node -d} '^9' - -super + {_, shift + } bracketright - bspc {desktop -f, node -d} '^10' - -super + control + {_, shift + } ampersand - bspc {desktop -f, node -d} '^11' - -super + control + {_, shift + } bracketleft - bspc {desktop -f, node -d} '^12' - -super + control + {_, shift + } braceleft - bspc {desktop -f, node -d} '^13' - -super + control + {_, shift + } braceright - bspc {desktop -f, node -d} '^14' - -super + control + {_, shift + } parenleft - bspc {desktop -f, node -d} '^15' - -super + control + {_, shift + } equal - bspc {desktop -f, node -d} '^16' - -super + control + {_, shift + } asterisk - bspc {desktop -f, node -d} '^17' - -super + control + {_, shift + } parenright - bspc {desktop -f, node -d} '^18' - -super + control + {_, shift + } plus - bspc {desktop -f, node -d} '^19' - -super + control + {_, shift + } bracketright - bspc {desktop -f, node -d} '^20' - -# -# preselect -# - -# preselect the direction -super + ctrl + {h,j,k,l} - bspc node -p {west,south,north,east} - -# preselect the ratio -super + ctrl + {1-9} - bspc node -o 0.{1-9} - -# cancel the preselection for the focused node -super + ctrl + Escape - bspc node -p cancel - -# cancel the preselection for the focused desktop -super + ctrl + shift + space - bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel - -# -# move/resize -# - -# expand a window by moving one of its side outward -super + alt + {h,j,k,l} - bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} - -# contract a window by moving one of its side inward -super + alt + shift + {h,j,k,l} - bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0} - -# move a floating window -super + {Left,Down,Up,Right} - bspc node -v {-20 0,0 20,0 -20,20 0} - -# center a floating window -super + n - ~/.config/sxhkd/scripts/center.sh - -# -# misc keybinds -# - -# screenshot -super + shift + s - flameshot gui - -Print - flameshot full -c - -# brightness -XF86MonBrightness{Up,Down} - brightnessctl set {+5%,5%-} - -super + shift + {a,o} - brightnessctl set {+5%,5%-} - -# volume -XF86Audio{Raise,Lower}Volume - pactl set-sink-volume @DEFAULT_SINK@ {+,-}2% - -XF86AudioMute - pamixer --toggle-mute - -super + {a,o} - pactl set-sink-volume @DEFAULT_SINK@ {+,-}2% - -# switch monitor mode -super + shift + x - ~/.screenlayout/monitor.sh && bspc monitor -g 1920x1080+0+0 && bspc config -m DP-3 bottom_padding 0 && bspc wm -r -super + shift + b - ~/.screenlayout/single-screen.sh && bspc monitor -g 1920x1200+0+0 && bspc config -m eDP1 bottom_padding 0 bspc wm -r - -# emojis and special symbols -super + i - rofi -show emoji -modi emoji -super + shift + i - rofi -show unicode -modi 'unicode:~/.config/rofiemoji-rofiunicode/rofiunicode.sh' - -# lambda everywhere -control + backslash - xdotool keyup Control_L && xdotool keyup backslash && xdotool type "λ" - -# see recent notifications -super + z - dunstctl history-pop diff --git a/nix/hosts/framework/home.nix b/nix/hosts/framework/home.nix index 2b21df3..e0a28b9 100644 --- a/nix/hosts/framework/home.nix +++ b/nix/hosts/framework/home.nix @@ -66,6 +66,9 @@ zip framework-system-tools + bspwm + sxhkd + discord steam bitwarden @@ -159,11 +162,175 @@ "Xft.hintstyle" = "hintslight"; }; + # Window Manager + xsession.windowManager.bspwm = { + enable = true; + monitors = { + "eDP-2" = [ + "1" + "2" + "3" + "4" + "5" + "6" + "7" + "8" + "9" + "10" + "11" + "12" + "13" + "14" + "15" + "16" + "17" + "18" + "19" + "20" + ]; + }; + settings = { + border_width = 2; + normal_border_color = "#919191"; + focused_border_color = "FF6054"; + presel_feedback_color = "#CCCCCC"; + window_gap = 25; + split_ratio = 0.5; + borderless_monocle = false; + gapless_monocle = true; + pointer_follows_monitor = true; + pointer_follows_focus = false; + focus_follows_pointer = true; + merge_overlapping_monitors = true; + top_monocle_padding = 25; + right_monocle_padding = 25; + left_monocle_padding = 25; + bottom_monocle_padding = 25; + }; + }; + ### Services services.pasystray.enable = true; services.easyeffects.enable = true; + # Hotkey Daemon + services.sxhkd = { + enable = true; + # Reminder: Written in QWERTY + keybindings = { + "super + Return" = ''emacsclient -n -c -a ""''; + "super + control + Return" = "alacritty"; + "super + d" = "rofi -show drun"; + "super + n" = "rofi-bluetooth"; + "super + g" = "rofimoji"; + "super + shift + d" = "flameshot gui"; + "super + shift + q" = "bspc node -k"; + "super + shift + o" = "bspc wm -r"; + # Window focus + "super + {j,k,l,semicolon}" = "bspc node -f {west,south,north,east}"; + "super + {Left,Down,Up,Right}" = "bspc node -f {west,south,north,east}"; + + # Window movement + "super + shift + {j,k,l,semicolon}" = + "bspc node -s {west,south,north,east}"; + "super + shift + {Left,Down,Up,Right}" = + "bspc node -s {west,south,north,east}"; + + # Fullscreen + "super + f" = "bspc node -t ~fullscreen"; + + # Center floating window + "super + i" = "bspc node -v 0 0"; + + # Layout control + "super + w" = "bspc desktop -l next"; + "super + e" = "bspc desktop -l tiled"; + + # Toggle floating + "super + shift + space" = "bspc node -t ~floating"; + + # Workspace switching + "super + Tab" = "bspc desktop -f last"; + + # Switch to workspace - first monitor + "super + 1" = "bspc desktop -f '^1'"; + "super + 2" = "bspc desktop -f '^2'"; + "super + 3" = "bspc desktop -f '^3'"; + "super + 4" = "bspc desktop -f '^4'"; + "super + 5" = "bspc desktop -f '^5'"; + "super + 6" = "bspc desktop -f '^6'"; + "super + 7" = "bspc desktop -f '^7'"; + "super + 8" = "bspc desktop -f '^8'"; + "super + 9" = "bspc desktop -f '^9'"; + "super + 0" = "bspc desktop -f '^10'"; + + # Switch to workspace - second monitor + "super + ctrl + 1" = "bspc desktop -f '^11'"; + "super + ctrl + 2" = "bspc desktop -f '^12'"; + "super + ctrl + 3" = "bspc desktop -f '^13'"; + "super + ctrl + 4" = "bspc desktop -f '^14'"; + "super + ctrl + 5" = "bspc desktop -f '^15'"; + "super + ctrl + 6" = "bspc desktop -f '^16'"; + "super + ctrl + 7" = "bspc desktop -f '^17'"; + "super + ctrl + 8" = "bspc desktop -f '^18'"; + "super + ctrl + 9" = "bspc desktop -f '^19'"; + "super + ctrl + 0" = "bspc desktop -f '^20'"; + + # Move container to workspace - first monitor + "super + shift + 1" = "bspc node -d '^1'"; + "super + shift + 2" = "bspc node -d '^2'"; + "super + shift + 3" = "bspc node -d '^3'"; + "super + shift + 4" = "bspc node -d '^4'"; + "super + shift + 5" = "bspc node -d '^5'"; + "super + shift + 6" = "bspc node -d '^6'"; + "super + shift + 7" = "bspc node -d '^7'"; + "super + shift + 8" = "bspc node -d '^8'"; + "super + shift + 9" = "bspc node -d '^9'"; + "super + shift + 0" = "bspc node -d '^10'"; + + # Move container to workspace - second monitor + "super + ctrl + shift + 1" = "bspc node -d '^11'"; + "super + ctrl + shift + 2" = "bspc node -d '^12'"; + "super + ctrl + shift + 3" = "bspc node -d '^13'"; + "super + ctrl + shift + 4" = "bspc node -d '^14'"; + "super + ctrl + shift + 5" = "bspc node -d '^15'"; + "super + ctrl + shift + 6" = "bspc node -d '^16'"; + "super + ctrl + shift + 7" = "bspc node -d '^17'"; + "super + ctrl + shift + 8" = "bspc node -d '^18'"; + "super + ctrl + shift + 9" = "bspc node -d '^19'"; + "super + ctrl + shift + 0" = "bspc node -d '^20'"; + + # Move to adjacent workspaces + "super + c" = "bspc desktop -f prev.local"; + "super + v" = "bspc desktop -f next.local"; + "super + shift + c" = "bspc node -d prev.local --follow"; + "super + shift + v" = "bspc node -d next.local --follow"; + + # Resize mode equivalent - direct resize bindings + "super + alt + {j,semicolon}" = "bspc node -z {left -20 0,right 20 0}"; + "super + alt + {k,l}" = "bspc node -z {bottom 0 20,top 0 -20}"; + + # Volume controls + "XF86AudioRaiseVolume" = "pamixer --increase 5"; + "XF86AudioLowerVolume" = "pamixer --decrease 5"; + "XF86AudioMute" = "pamixer --toggle-mute"; + "XF86AudioPrev" = "playerctl previous"; + "XF86AudioPlay" = "playerctl play-pause"; + "XF86AudioNext" = "playerctl next"; + + # Brightness controls + "XF86MonBrightnessUp" = "brightnessctl set +5%"; + "XF86MonBrightnessDown" = "brightnessctl set 5%-"; + + # Convenient volume/brightness keys + "super + a" = "pamixer --increase 5"; + "super + s" = "pamixer --decrease 5"; + "super + shift + a" = "brightnessctl set +5%"; + "super + shift + s" = "brightnessctl set 5%-"; + }; + }; + # Compositor services.picom = { enable = true; @@ -185,7 +352,6 @@ package = pkgs.emacs30; }; - services.redshift = { enable = true; tray = true; @@ -200,6 +366,7 @@ ### Programs programs.home-manager.enable = true; programs.mu.enable = true; + programs.direnv = { enable = true; enableFishIntegration = true; @@ -252,10 +419,6 @@ programs.firefox = { enable = true; - policies = { - WebsiteFilter = { - Block = [ "*://*.facebook.com/" ]; - }; - }; + policies = { WebsiteFilter = { Block = [ "*://*.facebook.com/" ]; }; }; }; } diff --git a/nix/hosts/framework/sys.nix b/nix/hosts/framework/sys.nix index e2a4edf..5953c90 100644 --- a/nix/hosts/framework/sys.nix +++ b/nix/hosts/framework/sys.nix @@ -121,7 +121,8 @@ # xserver and i3 services.xserver = { enable = true; - windowManager.i3.enable = true; + windowManager.bspwm.enable = true; + displayManager.defaultSession = "none+bspwm"; displayManager.lightdm.enable = true; xkb = { layout = "us";