{ pkgs, config, lib, suckless, self', }: { options.local.DE.dwm.enable = lib.mkEnableOption ""; config = lib.mkIf config.local.DE.dwm.enable { systemd.user.services = { sxhkd = { serviceConfig = { ExecStart = "${lib.getExe pkgs.sxhkd} -c /etc/sxhkd/sxhkdrc"; Restart = "always"; RestartSec = 2; ExecReload = "pkill -usr1 -x $MAINPID"; }; }; picom = { serviceConfig = { ExecStart = "${lib.getExe pkgs.picom} --backend glx"; Restart = "always"; RestartSec = 2; ExecReload = "pkill -usr1 -x $MAINPID"; }; }; }; services.gvfs.enable = true; services.displayManager.defaultSession = "none+dwm"; services.xserver = { enable = true; displayManager = { sessionCommands = '' feh --bg-center "${self'.packages.images}/recursion.png" numlockx systemctl --user start sxhkd systemctl --user start picom ''; }; windowManager.session = [ { name = "dwm"; start = '' update_time () { while : do sleep 1 xsetroot -name "$(date +"%I:%M %p")" done } dont_stop() { while type dwm >/dev/null ; do dwm && continue || break ; done } update_time & dont_stop & waitPID=$! ''; } ]; }; environment = { systemPackages = builtins.attrValues { inherit (suckless.packages) dmenu dwm; st = let st = pkgs.writeShellScript "st" '' ARGS="''${@:1}" exec ${lib.getExe suckless.packages.st} "''${ARGS:-tmux}" ''; in pkgs.symlinkJoin { name = "st"; paths = [ suckless.packages.st ]; nativeBuildInputs = [ pkgs.makeBinaryWrapper ]; postBuild = '' unlink "$out/bin/st" ln -s "${st}" "$out/bin/st" ''; }; inherit (pkgs) maim playerctl xclip feh numlockx picom sxhkd xscreensaver ; xsecurelock = pkgs.writeShellScriptBin "xsecurelock" '' export XSECURELOCK_BLANK_TIMEOUT="30" export XSECURELOCK_AUTH_TIMEOUT="30" export XSECURELOCK_BLANK_DPMS_STATE="off" export XSECURELOCK_BACKGROUND_COLOR="#000000" export XSECURELOCK_AUTH_BACKGROUND_COLOR="#080808" export XSECURELOCK_AUTH_FOREGROUND_COLOR="#bdbdbd" export XSECURELOCK_FONT="Overpass" export XSECURELOCK_SHOW_DATETIME="1" ${lib.getExe pkgs.xsecurelock} ''; }; etc = { "sxhkd/sxhkdrc".text = '' XF86AudioPlay playerctl play-pause XF86AudioPause playerctl play-pause XF86AudioStop playerctl stop XF86AudioNext playerctl next XF86AudioPrev playerctl previous XF86AudioRaiseVolume wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+ XF86AudioLowerVolume wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%- XF86AudioMute wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle Print maim $HOME/Screenshots/$(date +%Y-%m-%d_%H-%m-%s).jpg Print + shift maim | xclip -selection clipboard -t image/png super + Print maim -s $HOME/Screenshots/$(date +%Y-%m-%d_%H-%m-%s).jpg super + Print + shift maim -s | xclip -selection clipboard -t image/png super + ctrl + r pkill -usr1 -x sxhkd super + ctrl + l xsecurelock ''; }; }; }; }