initial commit

This commit is contained in:
GammaKinematics 2026-03-30 13:10:42 +07:00
commit 90cff4f16a
59 changed files with 6855 additions and 0 deletions

100
Suckless/dwm/dwm.nix Normal file
View file

@ -0,0 +1,100 @@
# dwm window manager configuration
#
# =============================================================================
# Patch Development Notes
# =============================================================================
#
# Base: dwm 6.6 (matches nixpkgs)
# Clone: ~/NixOS/dwm
#
# Clean & Build Commands:
# cd ~/NixOS/dwm
# git reset --hard 6.6
# rm -f config.h drw.o dwm dwm.o util.o
# nix-shell -p xorg.libX11 xorg.libXft xorg.libXinerama xorg.libXcursor pkg-config gnumake gcc
# make clean && make
#
# Generate patch after all patches applied:
# git diff 6.6 > ~/NixOS/Suckless/dwm/dwm-lebowski.patch
#
# =============================================================================
# Patches (apply in order):
# =============================================================================
#
# 1. pertag - Per-tag layouts (applied separately, then tab)
# 2. tab - Tabbed monocle bar
# 3. fullgaps - Simple gaps between windows
# 4. holdbar-modkey - Show bar while holding mod key
# 5. hide_vacant_tags - Only show occupied tags
# 6. bardwmlogo - DWM logo in bar
# 7. cursorwarp - Cursor follows focus
# 8. alwayscenter - Float windows spawn centered
# 9. swapmonitors - Swap tagsets between monitors
# 10. adjacenttag - Navigate tags with arrows (skipvacant)
# 11. accessnthmonitor - Focus/send to specific monitor by number
# 12. dwmfifo - Control dwm via named pipe
# 13. xcursor - Use system Xcursor theme (Stylix)
# 14. actualfullscreen
#
# Custom additions:
# - def_layouts array for per-tag default layouts
#
# =============================================================================
{
config,
pkgs,
lib,
...
}:
let
appearance = import ./appearance.nix { inherit config lib; };
tags = import ./tags.nix { inherit lib; };
rules = import ./rules.nix { inherit lib; };
layouts = import ./layouts.nix { inherit lib; };
keybindings = import ./keybindings.nix { inherit lib; };
api = import ./api.nix { inherit lib; };
configDefH = ''
${appearance.config}
${tags.config}
${rules.config}
${layouts.config}
${keybindings.config}
${api.config}
'';
in
{
services.xserver.windowManager.dwm = {
enable = true;
package =
(pkgs.dwm.override {
conf = configDefH;
}).overrideAttrs
(old: {
patches = [ ./dwm-lebowski.patch ];
buildInputs = old.buildInputs ++ [ pkgs.xorg.libXcursor ];
});
};
environment.systemPackages = [
(pkgs.writeShellScriptBin "vieworspawn" ''
mon=$1; tag=$2; class=$3; shift 3
# Focus monitor if multi-monitor setup (0=secondary, 1=primary)
if [[ $(${pkgs.autorandr}/bin/autorandr --detected) != "mobile" ]]; then
[[ "$mon" == "0" ]] && echo "mon-sec" > /tmp/dwm.fifo || echo "mon-prim" > /tmp/dwm.fifo
fi
echo "view $tag" > /tmp/dwm.fifo
sleep 0.02
if ! ${pkgs.xdotool}/bin/xdotool search --class "$class" >/dev/null 2>&1; then
exec "$@"
fi
'')
];
}