feat: substitute remaining Xorg for Wayland
This commit is contained in:
@@ -19,6 +19,8 @@ home-manager switch --flake .#work
|
|||||||
|
|
||||||
### virtual machines
|
### virtual machines
|
||||||
|
|
||||||
|
With a Niri desktop (requires host OpenGL support):
|
||||||
|
|
||||||
```
|
```
|
||||||
nix build -L '.#nixosConfigurations.vm.config.system.build.vmWithDisko'
|
nix build -L '.#nixosConfigurations.vm.config.system.build.vmWithDisko'
|
||||||
./result/bin/disko-vm
|
./result/bin/disko-vm
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
DEFAULT_TEMPERATURE = 3500
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open("/tmp/temperature", "r") as temp_file:
|
|
||||||
current_temperature = int(temp_file.read())
|
|
||||||
except FileNotFoundError:
|
|
||||||
current_temperature = DEFAULT_TEMPERATURE
|
|
||||||
|
|
||||||
# If no argument is given print the current temperature
|
|
||||||
if len(sys.argv) == 1:
|
|
||||||
print(current_temperature)
|
|
||||||
sys.exit(0)
|
|
||||||
elif len(sys.argv) != 2:
|
|
||||||
print(
|
|
||||||
"""
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
screen-temperature
|
|
||||||
print current temperature
|
|
||||||
|
|
||||||
screen-temperature <temperature>
|
|
||||||
set screen temperature to <temperature>
|
|
||||||
|
|
||||||
screen-temperature <+|-><temperature>
|
|
||||||
increase or decrease screen temperature by <temperature>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
temperature_change = sys.argv[1]
|
|
||||||
|
|
||||||
if temperature_change.startswith("+"):
|
|
||||||
new_temperature = current_temperature + int(temperature_change[1:])
|
|
||||||
elif temperature_change.startswith("-"):
|
|
||||||
new_temperature = current_temperature - int(temperature_change[1:])
|
|
||||||
else:
|
|
||||||
new_temperature = int(temperature_change)
|
|
||||||
|
|
||||||
try:
|
|
||||||
subprocess.run(["redshift", "-O", str(new_temperature), "-P"], check=True)
|
|
||||||
with open("/tmp/temperature", "w") as temp_file:
|
|
||||||
temp_file.write(str(new_temperature) + "\n")
|
|
||||||
# Send notification
|
|
||||||
subprocess.run(["notify-send", str(new_temperature) + "K"])
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
print("Error: could not set screen temperature.")
|
|
||||||
sys.exit(1)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Xcursor.size: 16
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
userresources=$HOME/.config/X11/Xresources
|
|
||||||
usermodmap=$HOME/.config/X11/Xmodmap
|
|
||||||
sysresources=/etc/X11/xinit/.Xresources
|
|
||||||
sysmodmap=/etc/X11/xinit/.Xmodmap
|
|
||||||
|
|
||||||
if [ -f $sysresources ]; then xrdb -merge $sysresources; fi
|
|
||||||
if [ -f $sysmodmap ]; then xmodmap $sysmodmap; fi
|
|
||||||
if [ -f "$userresources" ]; then xrdb -merge "$userresources"; fi
|
|
||||||
if [ -f "$usermodmap" ]; then xmodmap "$usermodmap"; fi
|
|
||||||
|
|
||||||
# start some nice programs
|
|
||||||
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
|
|
||||||
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
|
|
||||||
[ -x "$f" ] && . "$f"
|
|
||||||
done
|
|
||||||
unset f
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ______________________________
|
|
||||||
|
|
||||||
xset -b # disable bell
|
|
||||||
xset r rate 200 30 # adjust typematic delay & rate
|
|
||||||
|
|
||||||
# Shared
|
|
||||||
xbindkeys -f "$HOME"/.config/xbindkeys/config
|
|
||||||
xbanish &
|
|
||||||
redshift -o -O "$(cat /tmp/temperature)" & # Run redshift in one shot mode
|
|
||||||
|
|
||||||
# DWM
|
|
||||||
# dwmblocks &
|
|
||||||
# udiskie &
|
|
||||||
# # No compositor
|
|
||||||
# # xsetroot -solid "#0a0a0a"
|
|
||||||
# # With compositor
|
|
||||||
# # hsetroot -solid "#0a0a0a"
|
|
||||||
# # picom &
|
|
||||||
# # execute dwm in a loop
|
|
||||||
# while true; do
|
|
||||||
# dwm 2> ~/.dwm.log
|
|
||||||
# done
|
|
||||||
|
|
||||||
# Openbox
|
|
||||||
# # udiskie --tray &
|
|
||||||
# # plank &
|
|
||||||
# # picom &
|
|
||||||
# # hsetroot -solid "#555555"
|
|
||||||
# # openbox
|
|
||||||
|
|
||||||
# Xmonad
|
|
||||||
xsetroot -solid "#0a0a0a"
|
|
||||||
xsetroot -cursor_name left_ptr
|
|
||||||
picom &
|
|
||||||
trayer --edge top --align right --SetDockType true --SetPartialStrut true \
|
|
||||||
--expand true --width 10 --transparent true --tint 0x111111 --height 25 &
|
|
||||||
exec xmonad
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
backend = "glx";
|
|
||||||
glx-no-stencil = false;
|
|
||||||
glx-copy-from-font = false;
|
|
||||||
glx-no-rebind-pixmap = true;
|
|
||||||
|
|
||||||
shadow = true;
|
|
||||||
shadow-radius = 16;
|
|
||||||
shadow-opacity = 0.5;
|
|
||||||
shadow-offset-x = -16;
|
|
||||||
shadow-offset-y = -16;
|
|
||||||
shadow-color = "#000000"
|
|
||||||
|
|
||||||
active-opacity = 1;
|
|
||||||
inactive-opacity = 0.62;
|
|
||||||
frame-opacity = 1;
|
|
||||||
inactive-opacity-override = false;
|
|
||||||
|
|
||||||
fading = true;
|
|
||||||
fade-in-step = 0.02;
|
|
||||||
fade-out-step = 0.02;
|
|
||||||
fade-delta = 4
|
|
||||||
|
|
||||||
shadow-exclude = ["class_g = 'Rofi'", "class_g = 'trayer'"];
|
|
||||||
focus-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
|
|
||||||
blur-background-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
|
|
||||||
|
|
||||||
blur: {
|
|
||||||
method = "dual_kawase";
|
|
||||||
strength = 8;
|
|
||||||
background = true;
|
|
||||||
background-frame = true;
|
|
||||||
background-fixed = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
wintypes:
|
|
||||||
{
|
|
||||||
dock = { shadow = false; };
|
|
||||||
dnd = { shadow = false; };
|
|
||||||
tooltip = { shadow = false; };
|
|
||||||
menu = { opacity = false; };
|
|
||||||
dropdown_menu = { opacity = false; };
|
|
||||||
popup_menu = { opacity = false; };
|
|
||||||
utility = { opacity = false; };
|
|
||||||
};
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
[colors]
|
|
||||||
background = #cccccc
|
|
||||||
background-alt = #aaaaaa
|
|
||||||
foreground = #111111
|
|
||||||
primary = #111111
|
|
||||||
secondary = #555555
|
|
||||||
disabled = #888888
|
|
||||||
|
|
||||||
[bar/example]
|
|
||||||
height = 16pt
|
|
||||||
radius = 0
|
|
||||||
|
|
||||||
background = ${colors.background}
|
|
||||||
foreground = ${colors.foreground}
|
|
||||||
|
|
||||||
padding-left = 0pt
|
|
||||||
module-margin = 1
|
|
||||||
|
|
||||||
separator = " "
|
|
||||||
separator-foreground = ${colors.disabled}
|
|
||||||
|
|
||||||
font-0 = Iosevka Term SS08:size=12;4
|
|
||||||
|
|
||||||
modules-left = xworkspaces xwindow
|
|
||||||
modules-center = project pomo
|
|
||||||
modules-right = filesystem pulseaudio memory cpu wlan eth date dunst-snooze xkeyboard battery
|
|
||||||
|
|
||||||
cursor-click = pointer
|
|
||||||
cursor-scroll = ns-resize
|
|
||||||
|
|
||||||
enable-ipc = true
|
|
||||||
|
|
||||||
[module/xworkspaces]
|
|
||||||
type = internal/xworkspaces
|
|
||||||
|
|
||||||
label-active = %name%
|
|
||||||
label-active-background = ${colors.background-alt}
|
|
||||||
label-active-underline= ${colors.primary}
|
|
||||||
label-active-padding = 4pt
|
|
||||||
|
|
||||||
label-occupied = %name%
|
|
||||||
label-occupied-padding = 4pt
|
|
||||||
|
|
||||||
label-urgent = %name%
|
|
||||||
label-urgent-background = ${colors.alert}
|
|
||||||
label-urgent-padding = 4pt
|
|
||||||
|
|
||||||
label-empty = %name%
|
|
||||||
label-empty-foreground = ${colors.disabled}
|
|
||||||
label-empty-padding = 4pt
|
|
||||||
|
|
||||||
[module/xwindow]
|
|
||||||
type = internal/xwindow
|
|
||||||
label = %title:0:60:...%
|
|
||||||
|
|
||||||
[module/filesystem]
|
|
||||||
type = internal/fs
|
|
||||||
interval = 25
|
|
||||||
|
|
||||||
mount-0 = /
|
|
||||||
|
|
||||||
label-mounted = %mountpoint% %percentage_used%%
|
|
||||||
label-unmounted = %mountpoint% not mounted
|
|
||||||
label-unmounted-foreground = ${colors.disabled}
|
|
||||||
|
|
||||||
[module/pulseaudio]
|
|
||||||
type = internal/pulseaudio
|
|
||||||
|
|
||||||
format-volume-prefix = "VOL "
|
|
||||||
format-volume-prefix-foreground = ${colors.primary}
|
|
||||||
format-volume = <label-volume>
|
|
||||||
|
|
||||||
label-volume = %percentage%%
|
|
||||||
|
|
||||||
label-muted = muted
|
|
||||||
label-muted-foreground = ${colors.disabled}
|
|
||||||
|
|
||||||
[module/memory]
|
|
||||||
type = internal/memory
|
|
||||||
interval = 2
|
|
||||||
format-prefix = "RAM "
|
|
||||||
format-prefix-foreground = ${colors.primary}
|
|
||||||
label = %percentage_used:2%%
|
|
||||||
|
|
||||||
[module/cpu]
|
|
||||||
type = internal/cpu
|
|
||||||
interval = 2
|
|
||||||
format-prefix = "CPU "
|
|
||||||
format-prefix-foreground = ${colors.primary}
|
|
||||||
label = %percentage:2%%
|
|
||||||
|
|
||||||
[network-base]
|
|
||||||
type = internal/network
|
|
||||||
interval = 5
|
|
||||||
format-connected = <label-connected>
|
|
||||||
format-disconnected = <label-disconnected>
|
|
||||||
label-disconnected = %ifname% disconnected
|
|
||||||
|
|
||||||
[module/wlan]
|
|
||||||
inherit = network-base
|
|
||||||
interface-type = wireless
|
|
||||||
label-connected = %ifname% %local_ip% %essid%
|
|
||||||
|
|
||||||
[module/eth]
|
|
||||||
inherit = network-base
|
|
||||||
interface-type = wired
|
|
||||||
label-connected = %ifname% %local_ip%
|
|
||||||
|
|
||||||
[module/date]
|
|
||||||
type = internal/date
|
|
||||||
interval = 1
|
|
||||||
date = W%V %d %b %H:%M
|
|
||||||
date-alt = %Y-%m-%d %H:%M:%S
|
|
||||||
label = %date%
|
|
||||||
label-foreground = ${colors.primary}
|
|
||||||
|
|
||||||
[module/pomo]
|
|
||||||
type = custom/script
|
|
||||||
exec = ~/.bin/sb-pomo
|
|
||||||
label-background = #fff
|
|
||||||
interval = 1
|
|
||||||
|
|
||||||
[module/focus-mode]
|
|
||||||
type = custom/script
|
|
||||||
exec = [[ -f /tmp/focus-mode ]] && echo "Focus"
|
|
||||||
label-background = #af0
|
|
||||||
interval = 1
|
|
||||||
|
|
||||||
[module/project]
|
|
||||||
type = custom/script
|
|
||||||
exec = cat ~/.project
|
|
||||||
label-background = #fa0
|
|
||||||
interval = 1000
|
|
||||||
|
|
||||||
[module/xkeyboard]
|
|
||||||
type = internal/xkeyboard
|
|
||||||
label-layout = %name% %variant%
|
|
||||||
blacklist-0 = num lock
|
|
||||||
blacklist-1 = scroll lock
|
|
||||||
|
|
||||||
[module/battery]
|
|
||||||
type = internal/battery
|
|
||||||
full-at = 99
|
|
||||||
low-at = 20
|
|
||||||
battery = BAT0
|
|
||||||
adapter = ADP1
|
|
||||||
poll-interval = 5
|
|
||||||
label-charging = .%percentage%++
|
|
||||||
format-low = <label-low><animation-low>
|
|
||||||
label-discharging = .%percentage%-- %time% %consumption%W
|
|
||||||
animation-low-0 = !
|
|
||||||
animation-low-1 = .
|
|
||||||
animation-low-framerate = 200
|
|
||||||
|
|
||||||
[settings]
|
|
||||||
screenchange-reload = true
|
|
||||||
pseudo-transparency = true
|
|
||||||
|
|
||||||
; vim:ft=dosini
|
|
||||||
@@ -1,188 +0,0 @@
|
|||||||
[colors]
|
|
||||||
background = #cccccc
|
|
||||||
background-alt = #aaaaaa
|
|
||||||
foreground = #111111
|
|
||||||
primary = #111111
|
|
||||||
secondary = #555555
|
|
||||||
alert = #A54242
|
|
||||||
disabled = #888888
|
|
||||||
|
|
||||||
[bar/example]
|
|
||||||
height = 16pt
|
|
||||||
radius = 0
|
|
||||||
|
|
||||||
background = ${colors.background}
|
|
||||||
foreground = ${colors.foreground}
|
|
||||||
|
|
||||||
line-size = 0pt
|
|
||||||
|
|
||||||
border-size = 0pt
|
|
||||||
border-color = #00000000
|
|
||||||
|
|
||||||
padding-left = 0pt
|
|
||||||
padding-right = 4pt
|
|
||||||
module-margin = 1
|
|
||||||
|
|
||||||
separator = " "
|
|
||||||
separator-foreground = ${colors.disabled}
|
|
||||||
|
|
||||||
font-0 = Iosevka Term SS08:size=12;4
|
|
||||||
|
|
||||||
modules-left = xworkspaces xwindow
|
|
||||||
modules-center = project pomo
|
|
||||||
modules-right = filesystem pulseaudio memory cpu wlan eth date dunst-snooze xkeyboard battery
|
|
||||||
|
|
||||||
cursor-click = pointer
|
|
||||||
cursor-scroll = ns-resize
|
|
||||||
|
|
||||||
enable-ipc = true
|
|
||||||
|
|
||||||
[module/xworkspaces]
|
|
||||||
type = internal/xworkspaces
|
|
||||||
|
|
||||||
label-active = %name%
|
|
||||||
label-active-background = ${colors.background-alt}
|
|
||||||
label-active-underline= ${colors.primary}
|
|
||||||
label-active-padding = 4pt
|
|
||||||
|
|
||||||
label-occupied = %name%
|
|
||||||
label-occupied-padding = 4pt
|
|
||||||
|
|
||||||
label-urgent = %name%
|
|
||||||
label-urgent-background = ${colors.alert}
|
|
||||||
label-urgent-padding = 4pt
|
|
||||||
|
|
||||||
label-empty = %name%
|
|
||||||
label-empty-foreground = ${colors.disabled}
|
|
||||||
label-empty-padding = 4pt
|
|
||||||
|
|
||||||
enable-scroll = false
|
|
||||||
enable-click = false
|
|
||||||
|
|
||||||
[module/xwindow]
|
|
||||||
type = internal/xwindow
|
|
||||||
label = %title:0:60:...%
|
|
||||||
|
|
||||||
[module/filesystem]
|
|
||||||
type = internal/fs
|
|
||||||
interval = 25
|
|
||||||
|
|
||||||
mount-0 = /
|
|
||||||
|
|
||||||
label-mounted = %mountpoint% %percentage_used%%
|
|
||||||
label-unmounted = %mountpoint% not mounted
|
|
||||||
label-unmounted-foreground = ${colors.disabled}
|
|
||||||
|
|
||||||
[module/pulseaudio]
|
|
||||||
type = internal/pulseaudio
|
|
||||||
|
|
||||||
format-volume-prefix = "VOL "
|
|
||||||
format-volume-prefix-foreground = ${colors.primary}
|
|
||||||
format-volume = <label-volume>
|
|
||||||
|
|
||||||
label-volume = %percentage%%
|
|
||||||
|
|
||||||
label-muted = muted
|
|
||||||
label-muted-foreground = ${colors.disabled}
|
|
||||||
|
|
||||||
[module/memory]
|
|
||||||
type = internal/memory
|
|
||||||
interval = 2
|
|
||||||
format-prefix = "RAM "
|
|
||||||
format-prefix-foreground = ${colors.primary}
|
|
||||||
label = %percentage_used:2%%
|
|
||||||
|
|
||||||
[module/cpu]
|
|
||||||
type = internal/cpu
|
|
||||||
interval = 2
|
|
||||||
format-prefix = "CPU "
|
|
||||||
format-prefix-foreground = ${colors.primary}
|
|
||||||
label = %percentage:2%%
|
|
||||||
|
|
||||||
[network-base]
|
|
||||||
type = internal/network
|
|
||||||
interval = 5
|
|
||||||
format-connected = <label-connected>
|
|
||||||
format-disconnected = <label-disconnected>
|
|
||||||
label-disconnected = %ifname% disconnected
|
|
||||||
|
|
||||||
[module/wlan]
|
|
||||||
inherit = network-base
|
|
||||||
interface-type = wireless
|
|
||||||
label-connected = %ifname% %local_ip% %essid%
|
|
||||||
|
|
||||||
[module/eth]
|
|
||||||
inherit = network-base
|
|
||||||
interface-type = wired
|
|
||||||
label-connected = %ifname% %local_ip%
|
|
||||||
|
|
||||||
[module/date]
|
|
||||||
type = internal/date
|
|
||||||
interval = 1
|
|
||||||
date = W%V %d %b %H:%M
|
|
||||||
date-alt = %Y-%m-%d %H:%M:%S
|
|
||||||
label = %date%
|
|
||||||
label-foreground = ${colors.primary}
|
|
||||||
|
|
||||||
; [module/dunst-snooze]
|
|
||||||
; type = custom/script
|
|
||||||
; exec = ~/.bin/polybar/polybar-scripts/dunst-snooze/dunst-snooze.sh
|
|
||||||
; interval = 1
|
|
||||||
; click-left = ~/.bin/polybar/polybar-scripts/dunst-snooze/dunst-snooze.sh --toggle &
|
|
||||||
|
|
||||||
; [module/info-camera-mic]
|
|
||||||
; type = custom/script
|
|
||||||
; exec = ~.bin/polybar/polybar-scripts/info-camera-mic/info-camera-mic.sh
|
|
||||||
; interval = 1
|
|
||||||
|
|
||||||
[module/player-mpris]
|
|
||||||
type = custom/script
|
|
||||||
exec = ~/.bin/polybar/polybar-scripts/player-mpris-simple/player-mpris-simple.sh
|
|
||||||
interval = 1
|
|
||||||
click-left = playerctl previous &
|
|
||||||
click-right = playerctl next &
|
|
||||||
click-middle = playerctl play-pause &
|
|
||||||
|
|
||||||
[module/pomo]
|
|
||||||
type = custom/script
|
|
||||||
exec = ~/.bin/sb-pomo
|
|
||||||
label-background = #fa0
|
|
||||||
interval = 1
|
|
||||||
|
|
||||||
[module/focus-mode]
|
|
||||||
type = custom/script
|
|
||||||
exec = [[ -f /tmp/focus-mode ]] && echo "Focus"
|
|
||||||
label-background = #af0
|
|
||||||
interval = 1
|
|
||||||
|
|
||||||
[module/project]
|
|
||||||
type = custom/script
|
|
||||||
exec = cat ~/.project
|
|
||||||
label-background = #fa0
|
|
||||||
interval = 1000
|
|
||||||
|
|
||||||
[module/xkeyboard]
|
|
||||||
type = internal/xkeyboard
|
|
||||||
label-layout = %name% %variant%
|
|
||||||
blacklist-0 = num lock
|
|
||||||
blacklist-1 = scroll lock
|
|
||||||
|
|
||||||
[module/battery]
|
|
||||||
type = internal/battery
|
|
||||||
full-at = 99
|
|
||||||
low-at = 20
|
|
||||||
battery = BAT0
|
|
||||||
adapter = ADP1
|
|
||||||
poll-interval = 5
|
|
||||||
label-charging = .%percentage%++
|
|
||||||
format-low = <label-low><animation-low>
|
|
||||||
label-discharging = .%percentage%-- %time% %consumption%W
|
|
||||||
animation-low-0 = !
|
|
||||||
animation-low-1 = .
|
|
||||||
animation-low-framerate = 200
|
|
||||||
|
|
||||||
[settings]
|
|
||||||
screenchange-reload = true
|
|
||||||
pseudo-transparency = true
|
|
||||||
|
|
||||||
; vim:ft=dosini
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=redshift needs to get a (geo)clue
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=/usr/lib/geoclue-2.0/demos/agent
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# Headphone controls for spotify
|
|
||||||
"playerctl --player=ncspot next --player=spotify next"
|
|
||||||
m:0x0 + c:171
|
|
||||||
XF86AudioNext
|
|
||||||
"playerctl --player=ncspot previous --player=spotify previous"
|
|
||||||
m:0x0 + c:173
|
|
||||||
XF86AudioPrev
|
|
||||||
"playerctl --player=ncspot pause --player=spotify pause"
|
|
||||||
m:0x0 + c:209
|
|
||||||
XF86AudioPause
|
|
||||||
"playerctl --player=ncspot play --player=spotify play"
|
|
||||||
m:0x0 + c:208
|
|
||||||
XF86AudioPlay
|
|
||||||
|
|
||||||
"xrandr --auto"
|
|
||||||
m:0x0 + c:76 # F10
|
|
||||||
|
|
||||||
"feh ~/.vortex-core/l0.png"
|
|
||||||
m:0x0 + c:138
|
|
||||||
SunProps
|
|
||||||
@@ -1,303 +0,0 @@
|
|||||||
-- {{{ Imports
|
|
||||||
|
|
||||||
import Control.Monad (liftM2)
|
|
||||||
import Data.Map qualified as M
|
|
||||||
import XMonad
|
|
||||||
import XMonad.Actions.CopyWindow (copyToAll, killAllOtherCopies)
|
|
||||||
import XMonad.Actions.FloatSnap
|
|
||||||
import XMonad.Actions.Submap
|
|
||||||
import XMonad.Hooks.EwmhDesktops
|
|
||||||
import XMonad.Hooks.ManageDocks
|
|
||||||
import XMonad.Hooks.ManageHelpers
|
|
||||||
import XMonad.Hooks.OnPropertyChange (onXPropertyChange)
|
|
||||||
import XMonad.Hooks.StatusBar
|
|
||||||
import XMonad.Hooks.StatusBar.PP
|
|
||||||
import XMonad.Hooks.WindowSwallowing (swallowEventHook)
|
|
||||||
import XMonad.Layout.CenteredIfSingle
|
|
||||||
import XMonad.Layout.IndependentScreens
|
|
||||||
import XMonad.Layout.LayoutHints (hintsEventHook, layoutHints)
|
|
||||||
import XMonad.Layout.PerScreen
|
|
||||||
import XMonad.Layout.PerWorkspace
|
|
||||||
import XMonad.Layout.Renamed
|
|
||||||
import XMonad.Layout.Spacing
|
|
||||||
import XMonad.Layout.Tabbed
|
|
||||||
import XMonad.Layout.ThreeColumns
|
|
||||||
import XMonad.StackSet qualified as W
|
|
||||||
import XMonad.Util.EZConfig
|
|
||||||
import XMonad.Util.Hacks qualified as Hacks
|
|
||||||
import XMonad.Util.Loggers
|
|
||||||
import XMonad.Util.Paste
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Statusbar {{{
|
|
||||||
|
|
||||||
pp :: PP
|
|
||||||
pp =
|
|
||||||
def
|
|
||||||
{ ppSep = tertiaryColor " ",
|
|
||||||
ppCurrent = brackitify,
|
|
||||||
ppHidden = secondaryColor,
|
|
||||||
ppHiddenNoWindows = tertiaryColor,
|
|
||||||
ppUrgent = red . wrap (yellow "!") (yellow "!"),
|
|
||||||
ppLayout = id,
|
|
||||||
ppTitle = shorten 80,
|
|
||||||
ppTitleSanitize = xmobarStrip,
|
|
||||||
ppOrder = \[workspaces, layout, windows, _] -> [layout],
|
|
||||||
ppExtras = [logTitles formatFocused formatUnfocused]
|
|
||||||
}
|
|
||||||
where
|
|
||||||
brackitify = wrap "〈" "〉"
|
|
||||||
formatFocused = secondaryColor . ppWindow
|
|
||||||
formatUnfocused = tertiaryColor . ppWindow
|
|
||||||
|
|
||||||
ppWindow = xmobarRaw . (\w -> if null w then "Untitled" else w) . shorten 16
|
|
||||||
|
|
||||||
primaryColor = xmobarColor "#000000" ""
|
|
||||||
secondaryColor = xmobarColor "#333333" ""
|
|
||||||
tertiaryColor = xmobarColor "#555555" ""
|
|
||||||
yellow = xmobarColor "#ff0" ""
|
|
||||||
red = xmobarColor "#ff5555" ""
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Workspaces & screens {{{
|
|
||||||
|
|
||||||
-- Shift to workspace and view workspace
|
|
||||||
shiftAndView = doF . liftM2 (.) W.greedyView W.shift
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Hooks {{{
|
|
||||||
|
|
||||||
-- startupHook {{{
|
|
||||||
myStartupHook =
|
|
||||||
do
|
|
||||||
spawn "killall -q polybar; parallel ::: 'polybar -r top' 'polybar -r bottom'"
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- manageHook {{{
|
|
||||||
myManageHook :: ManageHook
|
|
||||||
myManageHook =
|
|
||||||
composeAll
|
|
||||||
[ isDialog --> doCenterFloat,
|
|
||||||
className =? "Zathura" --> doShift "1_info",
|
|
||||||
className =? "firefox" --> shiftAndView "1_www",
|
|
||||||
className =? "firefoxdeveloperedition" --> shiftAndView "1_www",
|
|
||||||
className =? "Anki" --> shiftAndView "1_etc",
|
|
||||||
className =? "Obsidian" --> shiftAndView "1_etc",
|
|
||||||
className =? "Launcher" --> doRectFloat (W.RationalRect 0.05 0.4 0.9 0.5),
|
|
||||||
className =? "Zettelkasten" --> doRectFloat (W.RationalRect 0.05 0.4 0.9 0.5),
|
|
||||||
className =? "Calculator" --> doCenterFloat,
|
|
||||||
className =? "feh" --> doCenterFloat,
|
|
||||||
-- Center matplotlib and prevent focus stealing
|
|
||||||
-- className =? "matplotlib" --> doRectFloat (W.RationalRect 0.5 0.5 0.5 0.5),
|
|
||||||
className =? "matplotlib" --> doCenterFloat,
|
|
||||||
className =? "Matplotlib" --> doCenterFloat,
|
|
||||||
className =? "Xournalpp" --> doRectFloat (W.RationalRect 0.5 0.5 0.5 0.5),
|
|
||||||
className =? "KeePassXC" --> doRectFloat (W.RationalRect 0.1 0.1 0.8 0.8),
|
|
||||||
className =? "flameshot" --> doRectFloat (W.RationalRect 0.1 0.1 0.8 0.8)
|
|
||||||
]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- dynamicManageHook {{{
|
|
||||||
myDynamicManageHook :: ManageHook
|
|
||||||
myDynamicManageHook =
|
|
||||||
composeAll
|
|
||||||
[
|
|
||||||
title =? "Zettelkasten — Firefox Developer Edition" --> doShift "1_sh"
|
|
||||||
]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- layoutHook {{{
|
|
||||||
myLayoutHook =
|
|
||||||
avoidStruts $
|
|
||||||
smartSpacingWithEdge 4 $
|
|
||||||
layoutHints $
|
|
||||||
onWorkspace "1_sh" (Tall nmaster delta 0.8) $
|
|
||||||
ifWider smallWidth (tWide ||| c3mWide ||| f) t
|
|
||||||
where
|
|
||||||
smallWidth = 1920
|
|
||||||
|
|
||||||
-- Tall layouts
|
|
||||||
tWide =
|
|
||||||
centeredIfSingle 0.62 1 t
|
|
||||||
t =
|
|
||||||
named "[]+" $
|
|
||||||
Tall nmaster delta ratio
|
|
||||||
|
|
||||||
-- Column layouts
|
|
||||||
c3mWide =
|
|
||||||
centeredIfSingle 0.62 1 c3m
|
|
||||||
c3m =
|
|
||||||
named "[|]" $
|
|
||||||
ThreeColMid nmaster delta ratio
|
|
||||||
|
|
||||||
-- Fullscreen layouts
|
|
||||||
f = named "[+]" Full
|
|
||||||
|
|
||||||
-- Modifiers
|
|
||||||
named n = renamed [Replace n]
|
|
||||||
nmaster = 1
|
|
||||||
ratio = 0.62
|
|
||||||
delta = 4 / 100
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- handleEventHook {{{
|
|
||||||
myHandleEventHook =
|
|
||||||
handleEventHook def
|
|
||||||
-- See window swallowing (https://hackage.haskell.org/package/xmonad-contrib-0.18.0/docs/XMonad-Hooks-WindowSwallowing.html)
|
|
||||||
<> onXPropertyChange "WM_NAME" myDynamicManageHook
|
|
||||||
<> Hacks.windowedFullscreenFixEventHook
|
|
||||||
<> hintsEventHook
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Main config {{{
|
|
||||||
|
|
||||||
myWorkspaces = [ "sh", "www", "dev", "info", "etc" ]
|
|
||||||
myWorkspaceKeys = [ "a", "s", "d", "f", "g" ]
|
|
||||||
mySharedWorkspaces = [ "shared" ]
|
|
||||||
mySharedWorkspaceKeys = [ "1" ]
|
|
||||||
-- Use Win key instead of Alt
|
|
||||||
myModMask = mod4Mask
|
|
||||||
|
|
||||||
myConfig =
|
|
||||||
def
|
|
||||||
{ terminal = "kitty",
|
|
||||||
modMask = myModMask,
|
|
||||||
workspaces = withScreen 1 myWorkspaces ++ withScreen 2 mySharedWorkspaces,
|
|
||||||
-- Styling
|
|
||||||
focusedBorderColor = "#000",
|
|
||||||
normalBorderColor = "#0000",
|
|
||||||
borderWidth = 4,
|
|
||||||
-- Hooks
|
|
||||||
startupHook = myStartupHook,
|
|
||||||
manageHook = myManageHook <+> manageHook def,
|
|
||||||
layoutHook = myLayoutHook,
|
|
||||||
handleEventHook = myHandleEventHook
|
|
||||||
}
|
|
||||||
`removeKeysP` myRemoveKeys
|
|
||||||
`additionalKeysP` myKeys
|
|
||||||
`additionalMouseBindings` myMouseBindings
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Keybindings {{{
|
|
||||||
|
|
||||||
-- Keybindings to be added/overridden
|
|
||||||
myKeys :: [(String, X ())]
|
|
||||||
myKeys =
|
|
||||||
[ ("M-<Space> s", unfloatFocusedW),
|
|
||||||
("M-<Space> <Space>", nextLayout), -- Cycle through layouts
|
|
||||||
("M-<Space> S-<Space>", defaultLayout), --
|
|
||||||
("M-<Space> M-<Space>", nextLayout), -- ..fat finger
|
|
||||||
("M-<Space> M-S-<Space>", defaultLayout), --
|
|
||||||
("<F8>", spawnKeepassXC),
|
|
||||||
("M-p", spawnLauncher),
|
|
||||||
("M-w", spawnWindowSwitcher),
|
|
||||||
("M-S-w", spawnWifiMenu),
|
|
||||||
("<Insert>", pasteSelection),
|
|
||||||
("<Print>", printScreen),
|
|
||||||
("<XF86AudioRaiseVolume>", raiseVol), -- Audio volume & playback
|
|
||||||
("<XF86AudioLowerVolume>", lowerVol), --
|
|
||||||
("<XF86AudioMute>", mute), --
|
|
||||||
("M-<Right>", nextTrack), --
|
|
||||||
("M-<Left>", prevTrack), --
|
|
||||||
("M-<Up>", play), --
|
|
||||||
("M-<Down>", pause), --
|
|
||||||
("<XF86MonBrightnessUp>", brighten), -- Brightness & hue controls
|
|
||||||
("<XF86MonBrightnessDown>", dim), --
|
|
||||||
("S-<XF86MonBrightnessUp>", warm), --
|
|
||||||
("S-<XF86MonBrightnessDown>", cool), --
|
|
||||||
("M-S-<XF86MonBrightnessUp>", resetTemp), --
|
|
||||||
("M-S-<XF86MonBrightnessDown>", resetTemp), --
|
|
||||||
("M-S-b", fullscreenBrowser),
|
|
||||||
("<XF86PowerOff>", spawn "systemctl suspend"), --TODO: Only enable this on laptop
|
|
||||||
("M-c", windows copyToAll),
|
|
||||||
("M-S-c", killAllOtherCopies),
|
|
||||||
("M-S-<Delete>", kill)
|
|
||||||
] ++
|
|
||||||
[ (m ++ k, windows $ f w) |
|
|
||||||
(m, f) <- zip ["M-", "M-S-"]
|
|
||||||
[W.greedyView, W.shift],
|
|
||||||
(k, w) <- zip myWorkspaceKeys
|
|
||||||
(withScreen 1 myWorkspaces)
|
|
||||||
++ zip mySharedWorkspaceKeys
|
|
||||||
(withScreen 2 mySharedWorkspaces)
|
|
||||||
]
|
|
||||||
|
|
||||||
zipKeyPrefixes :: [String] -> [String] -> [String]
|
|
||||||
zipKeyPrefixes prefixes keys = [prefix ++ key | prefix <- prefixes, key <- keys]
|
|
||||||
|
|
||||||
-- Keybindings to be removed
|
|
||||||
myRemoveKeys :: [String]
|
|
||||||
myRemoveKeys = "M-S-q" : zipKeyPrefixes ["M-", "M-S-"] (map show [ 1..5 ])
|
|
||||||
|
|
||||||
myMouseBindings =
|
|
||||||
[
|
|
||||||
((mod4Mask, button1), (\w -> focus w >> mouseMoveWindow w >> afterDrag (snapMagicMove (Just 50) (Just 50) w)))
|
|
||||||
, ((mod4Mask .|. shiftMask, button1), (\w -> focus w >> mouseMoveWindow w >> afterDrag (snapMagicResize [L,R,U,D] (Just 50) (Just 50) w)))
|
|
||||||
, ((mod4Mask, button3), (\w -> focus w >> mouseResizeWindow w >> afterDrag (snapMagicResize [R,D] (Just 50) (Just 50) w)))
|
|
||||||
]
|
|
||||||
|
|
||||||
unfloatFocusedW :: X ()
|
|
||||||
unfloatFocusedW = withFocused $ windows . W.sink
|
|
||||||
|
|
||||||
myStartupHook :: X ()
|
|
||||||
nextLayout = sendMessage NextLayout
|
|
||||||
|
|
||||||
defaultLayout :: X ()
|
|
||||||
defaultLayout = setLayout $ Layout myLayoutHook
|
|
||||||
|
|
||||||
spawnKeepassXC :: X ()
|
|
||||||
spawnKeepassXC = spawn "keepassxc"
|
|
||||||
|
|
||||||
fullscreenBrowser :: X ()
|
|
||||||
fullscreenBrowser = spawn "firefox --fullscreen"
|
|
||||||
|
|
||||||
spawnWindowSwitcher = spawn "rofi -show window -show-icons"
|
|
||||||
|
|
||||||
spawnWifiMenu = spawn "rofi -show wifi -modi \"wifi:iwdrofimenu\""
|
|
||||||
|
|
||||||
spawnLauncher, spawnClipManager :: X ()
|
|
||||||
spawnLauncher = spawn "rofi -show drun -show-icons"
|
|
||||||
spawnClipManager = spawn "rofi -modi 'clipboard:greenclip print' -show clipboard -run-command '{cmd}'"
|
|
||||||
|
|
||||||
printScreen :: X ()
|
|
||||||
printScreen = spawn "flameshot gui"
|
|
||||||
|
|
||||||
raiseVol, lowerVol, mute :: X ()
|
|
||||||
raiseVol = spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%"
|
|
||||||
lowerVol = spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%"
|
|
||||||
mute = spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle"
|
|
||||||
|
|
||||||
nextTrack, prevTrack, play, pause :: X ()
|
|
||||||
nextTrack = spawn "playerctl next"
|
|
||||||
prevTrack = spawn "playerctl previous"
|
|
||||||
play = spawn "playerctl play"
|
|
||||||
pause = spawn "playerctl pause"
|
|
||||||
|
|
||||||
brighten, dim, warm, cool, resetTemp :: X ()
|
|
||||||
brighten = spawn "brightnessctl set 20+"
|
|
||||||
dim = spawn "brightnessctl set 20-"
|
|
||||||
warm = spawn "screen-temperature +50"
|
|
||||||
cool = spawn "screen-temperature -50"
|
|
||||||
resetTemp = spawn "screen-temperature 3000"
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Main {{{
|
|
||||||
|
|
||||||
main :: IO ()
|
|
||||||
main =
|
|
||||||
do xmonad
|
|
||||||
$ ewmh
|
|
||||||
$ withEasySB
|
|
||||||
(statusBarProp "polybar" $ pure pp)
|
|
||||||
defToggleStrutsKey
|
|
||||||
myConfig
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
@@ -47,8 +47,4 @@
|
|||||||
pl = "swipl";
|
pl = "swipl";
|
||||||
py = "python";
|
py = "python";
|
||||||
r = "R";
|
r = "R";
|
||||||
|
|
||||||
azerty = "setxkbmap be";
|
|
||||||
qwerty = "setxkbmap us";
|
|
||||||
cole = "setxkbmap us -variant colemak";
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ in
|
|||||||
anki.enable = true;
|
anki.enable = true;
|
||||||
audio.enable = true;
|
audio.enable = true;
|
||||||
bootloader.enable = true;
|
bootloader.enable = true;
|
||||||
desktop.x.enable = true;
|
desktop.niri.enable = true;
|
||||||
|
desktop.ly.enable = true;
|
||||||
git.enable = true;
|
git.enable = true;
|
||||||
keyboard.enable = true;
|
keyboard.enable = true;
|
||||||
localization.enable = true;
|
localization.enable = true;
|
||||||
@@ -49,9 +50,11 @@ in
|
|||||||
cores = 8;
|
cores = 8;
|
||||||
memorySize = 16384;
|
memorySize = 16384;
|
||||||
qemu.options = [
|
qemu.options = [
|
||||||
|
# "-nographic"
|
||||||
"-enable-kvm"
|
"-enable-kvm"
|
||||||
"-cpu host"
|
"-cpu host"
|
||||||
"-nographic"
|
"-device virtio-vga-gl"
|
||||||
|
"-display gtk,gl=on"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
{ lib, config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
options.desktop.x.enable = lib.mkEnableOption "xmonad desktop";
|
|
||||||
|
|
||||||
config = lib.mkIf config.desktop.x.enable {
|
|
||||||
services.xserver.windowManager.xmonad = {
|
|
||||||
enable = true;
|
|
||||||
enableContribAndExtras = true;
|
|
||||||
config = builtins.readFile ../../dots/.xmonad/xmonad.hs;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.xserver = {
|
|
||||||
enable = true;
|
|
||||||
xkb.layout = "us";
|
|
||||||
xkb.variant = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user