nixos-config/hm/desktop/bspwm.nix

203 lines
5.1 KiB
Nix
Raw Normal View History

2025-09-04 10:21:17 +02:00
# hm/desktop/bspwm.nix
{
2025-10-05 08:20:57 +02:00
pkgs,
lib,
...
}: {
2025-09-05 09:59:31 +02:00
imports = [
../common/browser.nix
];
2025-09-04 10:21:17 +02:00
home.packages = with pkgs; [
2025-10-05 08:20:57 +02:00
bspwm
sxhkd
xorg.xinit
xterm
alacritty
rofi
feh
font-awesome
picom
xorg.xset
xidlehook
betterlockscreen
pywal16
imagemagick
pulsemixer
ranger
jq
file
highlight
unzip
mpv
2025-09-22 08:25:42 +02:00
protonvpn-gui
2025-09-04 10:21:17 +02:00
];
# Gère le ssh-agent proprement côté user
services.ssh-agent.enable = true;
2025-10-05 08:20:57 +02:00
xsession = {
2025-09-04 10:21:17 +02:00
enable = true;
2025-10-05 08:20:57 +02:00
xsession.windowManager.bspwm = {
enable = true;
# Démarrages au login X
startupPrograms = [
"sxhkd -m 1"
"setxkbmap bepovim"
"xrandr --output DisplayPort-1 --rate 60 --pos 0x0"
"polybar main"
"bash ~/.fehbg"
];
extraConfigEarly = ''
bspc config borderless_monocle true
bspc config gapless_monocle true
bspc config single_monocle true
bspc monitor -d I II III IV V VI
'';
};
2025-09-04 10:21:17 +02:00
};
2025-10-05 08:20:57 +02:00
# xsession.initExtra = ''
# xset s 300 300
# xset s on
# xset s noblank
# xset +dpms
# xset dpms 0 0 500
# '';
services = {
sxhkd = {
enable = true;
extraOptions = ["-m" "1"];
keybindings = {
"super + Return" = "alacritty";
"super + c" = "bspc node -c";
"Menu" = "rofi -show drun";
"super + space" = "rofi -show drun";
"F1" = "bspc desktop -f ^1";
"F2" = "bspc desktop -f ^2";
"F3" = "bspc desktop -f ^3";
"F4" = "bspc desktop -f ^4";
"F5" = "bspc desktop -f ^5";
"F6" = "bspc desktop -f ^6";
"shift + F1" = "bspc node -d ^1 --follow";
"shift + F2" = "bspc node -d ^2 --follow";
"shift + F3" = "bspc node -d ^3 --follow";
"shift + F4" = "bspc node -d ^4 --follow";
"shift + F5" = "bspc node -d ^5 --follow";
"shift + F6" = "bspc node -d ^6 --follow";
"super + h" = "bspc node -f west";
"super + j" = "bspc node -f south";
"super + k" = "bspc node -f north";
"super + l" = "bspc node -f east";
"super + shift + h" = "bspc node -s west";
"super + shift + j" = "bspc node -s south";
"super + shift + k" = "bspc node -s north";
"super + shift + l" = "bspc node -s east";
"super + f" = "bspc node -t fullscreen";
"super + s" = "bspc node -t floating";
"super + shift + t" = "bspc node -t pseudo_tiled";
"super + t" = "bspc node -t tiled";
};
};
polybar = {
enable = true;
script = "polybar main &";
config = {
"bar/main" = {
width = "100%";
height = "28";
font-1 = "Font Awesome 6 Free:style=Solid:pixelsize=10;2";
modules-left = "bspwm";
modules-center = "date";
modules-right = "pulseaudio memory cpu";
};
"module/bspwm" = {
type = "internal/bspwm";
label-focused = "%name%";
label-focused-foreground = "#e6e0de";
label-focused-padding = 2;
label-occupied = "%name%";
label-occupied-padding = 2;
label-urgent = "%name%";
label-urgent-background = "#e42127";
label-urgent-foreground = "#ffffff";
label-empty = "%name%";
label-empty-foreground = "#645d56";
label-empty-padding = 2;
};
"module/date" = {
type = "internal/date";
interval = 60;
date = "%d-%m-%Y %H:%M";
};
};
2025-09-04 10:21:17 +02:00
};
};
# xidlehook (user service)
systemd.user.services.xidlehook = {
Unit.Description = "Idle: lock at 5min, suspend at ~8min";
Service = {
ExecStart = ''
${pkgs.xidlehook}/bin/xidlehook \
--detect-sleep \
--not-when-fullscreen \
--timer 300 "${pkgs.betterlockscreen}/bin/betterlockscreen -l dim" "" \
--timer 500 "systemctl suspend" ""
'';
Restart = "always";
};
2025-10-05 08:20:57 +02:00
Install.WantedBy = ["graphical-session.target"];
2025-09-04 10:21:17 +02:00
};
2025-10-05 08:20:57 +02:00
programs = {
alacritty = {
enable = true;
settings = {
general.import = ["~/.cache/wal/colors-alacritty.toml"];
font = {
normal = {
family = lib.mkForce "Iosevka Nerd Font";
style = "Regular";
};
bold = {
family = lib.mkForce "Iosevka Nerd Font";
style = "Bold";
};
italic = {
family = lib.mkForce "Iosevka Nerd Font";
style = "Italic";
};
size = lib.mkForce 9;
};
2025-09-04 10:21:17 +02:00
};
};
2025-10-05 08:20:57 +02:00
rtorrent = {
enable = true;
extraConfig = ''
directory = /srv/raid
port_range = 6881-6891
max_peers = 150
max_peers_seed = 100
protocol.pex.set = true ;
schedule = watch_directory,5,5,load.start=~/Téléchargements/*.torrent
pieces.hash.on_completion.set = no
network.max_open_files.set = 8192
session = /home/lomig/.cache/rtorrent/session
'';
2025-09-04 10:21:17 +02:00
};
};
2025-09-22 08:25:42 +02:00
home.activation.createRtorrentSessionDir = lib.hm.dag.entryAfter ["writeBoundary"] ''
mkdir -p ~/.cache/rtorrent/session
'';
2025-09-04 10:21:17 +02:00
}