nixos/modules/_home/niri.nix
2026-04-23 10:42:20 -03:00

139 lines
4 KiB
Nix

{ config, pkgs, ... }:
let
wallpaper = ../../wallpapers/miku.png;
in {
home.sessionVariables = {
XDG_SESSION_TYPE = "wayland";
XDG_CURRENT_DESKTOP = "niri";
XDG_SESSION_DESKTOP = "niri";
QT_QPA_PLATFORM = "wayland;xcb";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
QT_ENABLE_HIGHDPI_SCALING = "1";
QT_SCALE_FACTOR_ROUNDING_POLICY = "RoundPreferFloor";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
XDG_MENU_PREFIX = "plasma-";
};
home.packages = with pkgs; [
grim
slurp
satty
wl-clipboard
];
home.file.".local/bin/screenshot" = {
executable = true;
text = ''
#!/usr/bin/env bash
MODE="''${1:-region}"
SAVE_DIR="$HOME/Images/screenshots"
mkdir -p "$SAVE_DIR"
FILENAME="$SAVE_DIR/$(date '+%Y%m%d-%H%M%S').png"
case "$MODE" in
region)
grim -g "$(slurp)" -t ppm - | satty --filename - --output-filename "$FILENAME" --copy-command wl-copy --early-exit
;;
screen)
grim -t ppm - | satty --filename - --output-filename "$FILENAME" --copy-command wl-copy --early-exit
;;
monitor)
grim -o "$(niri msg focused-output | grep 'Output' | awk '{print $2}')" -t ppm - \
| satty --filename - --output-filename "$FILENAME" --copy-command wl-copy --early-exit
;;
esac
'';
};
xdg.configFile."quickshell".source =
config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/repos/nixos/quickshell";
xdg.configFile."niri/config.kdl".text = ''
// Modificadores: Mod = Super (tecla Windows)
input {
keyboard {
xkb {
layout "us,br"
}
}
touchpad {
tap
natural-scroll
}
}
layout {
gaps 6
border {
width 2
active-color "#fabd2f"
inactive-color "#504945"
}
focus-ring {
width 2
active-color "#fabd2f"
inactive-color "transparent"
}
}
prefer-no-csd
spawn-at-startup "swww-daemon"
spawn-at-startup "swww" "img" "${wallpaper}" "--transition-type" "none"
spawn-at-startup "quickshell"
screenshot-path "~/Imagens/screenshots/%Y-%m-%d %H-%M-%S.png"
binds {
// Aplicativos
Mod+Return { spawn "kitty"; }
Mod+D { spawn "fuzzel"; }
Mod+Q { close-window; }
// Foco
Mod+Left { focus-column-left; }
Mod+Right { focus-column-right; }
Mod+Up { focus-window-up; }
Mod+Down { focus-window-down; }
// Mover janelas
Mod+Shift+Left { move-column-left; }
Mod+Shift+Right { move-column-right; }
Mod+Shift+Up { move-window-up; }
Mod+Shift+Down { move-window-down; }
// Workspaces
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+Shift+1 { move-window-to-workspace 1; }
Mod+Shift+2 { move-window-to-workspace 2; }
Mod+Shift+3 { move-window-to-workspace 3; }
Mod+Shift+4 { move-window-to-workspace 4; }
Mod+Shift+5 { move-window-to-workspace 5; }
// Sistema
Mod+Shift+E { quit; }
Mod+L { spawn "swaylock" "-i" "${wallpaper}" "--scaling" "fill"; }
// Volume
XF86AudioRaiseVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%+"; }
XF86AudioLowerVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-"; }
XF86AudioMute { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
// Zen mode (toggle quickshell bar)
Mod+Z { spawn "quickshell" "ipc" "call" "zen" "toggle"; }
// Input layout
Mod+Space { switch-layout "next"; }
// Screenshot
Mod+Shift+S { spawn "bash" "-c" "$HOME/.local/bin/screenshot region"; }
Mod+Shift+Alt+S { spawn "bash" "-c" "$HOME/.local/bin/screenshot screen"; }
Mod+Shift+Ctrl+S { spawn "bash" "-c" "$HOME/.local/bin/screenshot monitor"; }
}
'';
}