add hyprland and greetd

This commit is contained in:
afoucaultc 2026-08-08 13:33:07 +02:00
parent 7a6da71236
commit 77b3ecebb7
22 changed files with 84 additions and 321 deletions

View file

@ -1 +1 @@
/nix/store/s13yx204km1b2wcpy7p2va1nyh9jd1f4-home-manager-files/.config/inkscape/palettes /nix/store/lc7307i2h8wffkfgdmy22wm9xf7cllj2-home-manager-files/.config/inkscape/palettes

View file

@ -1 +1 @@
/nix/store/s13yx204km1b2wcpy7p2va1nyh9jd1f4-home-manager-files/.config/inkscape/templates /nix/store/lc7307i2h8wffkfgdmy22wm9xf7cllj2-home-manager-files/.config/inkscape/templates

View file

@ -1 +1 @@
/nix/store/s13yx204km1b2wcpy7p2va1nyh9jd1f4-home-manager-files/.config/kitty/kitty.conf /nix/store/lc7307i2h8wffkfgdmy22wm9xf7cllj2-home-manager-files/.config/kitty/kitty.conf

View file

@ -9,7 +9,7 @@
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# flake hyprland (git version) # flake hyprland (git version) (when lua was not yet available on nixpkgs)
#hyprland.url = "github:hyprwm/Hyprland"; #hyprland.url = "github:hyprwm/Hyprland";
# hardware # hardware
nixos-hardware.url = "github:NixOS/nixos-hardware"; nixos-hardware.url = "github:NixOS/nixos-hardware";
@ -79,6 +79,7 @@
./hosts/nixos-laptop/configuration.nix ./hosts/nixos-laptop/configuration.nix
stylix.nixosModules.stylix stylix.nixosModules.stylix
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
niri.nixosModules.niri
{ {
# default config # default config
home-manager = { home-manager = {

View file

@ -16,7 +16,7 @@
./packages/niri/niri.nix ./packages/niri/niri.nix
./packages/nextcloud.nix ./packages/nextcloud.nix
./packages/other_apps_light.nix ./packages/other_apps_light.nix
./packages/protonmail.nix ./packages/mako.nix
./packages/python.nix ./packages/python.nix
./packages/texlive.nix ./packages/texlive.nix
./packages/thunderbird.nix ./packages/thunderbird.nix

View file

@ -18,7 +18,7 @@
./packages/nextcloud.nix ./packages/nextcloud.nix
./packages/obs.nix ./packages/obs.nix
./packages/other_apps.nix ./packages/other_apps.nix
./packages/protonmail.nix ./packages/mako.nix
./packages/python.nix ./packages/python.nix
./packages/texlive.nix ./packages/texlive.nix
./packages/thunderbird.nix ./packages/thunderbird.nix

View file

@ -2,17 +2,13 @@
pkgs, pkgs,
config, config,
lib, lib,
inputs,
... ...
}: }:
let
hyprPkgs = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system};
in
{ {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
package = hyprPkgs.hyprland; package = pkgs.hyprland;
portalPackage = hyprPkgs.xdg-desktop-portal-hyprland; portalPackage = pkgs.xdg-desktop-portal-hyprland;
xwayland.enable = true; xwayland.enable = true;
configType = "lua"; configType = "lua";
systemd = { systemd = {

View file

@ -0,0 +1,6 @@
{ ... }:
{
services.mako = {
enable = true;
};
}

View file

@ -1,270 +0,0 @@
{
pkgs,
config,
...
}:
let
# Stylix expose sa palette base16 ici (pas `config.colorScheme`, qui vient de
# nix-colors et n'existe pas dans cette config).
c = config.lib.stylix.colors.withHashtag;
wallpaper = "${config.home.homeDirectory}/nixos-config/dotfiles/hypr/wallpaper/nix-wallpaper.png";
in
{
wayland.windowManager.niri = {
enable = true;
package = pkgs.niri;
# xwayland-satellite dans le PATH suffit : niri démarre XWayland à la demande
xwaylandSatellitePackage = pkgs.xwayland-satellite;
# niri recommande le portail gnome (screencast, file chooser)
portalPackage = pkgs.xdg-desktop-portal-gnome;
# valide le KDL généré au moment du build : les erreurs de config
# apparaissent pendant `nixos-rebuild`, pas au premier login
checkConfig = true;
settings = {
prefer-no-csd = { };
screenshot-path = "~/Screenshots/%Y-%m-%d %H-%M-%S.png";
hotkey-overlay.skip-at-startup = { };
# --- entrées -------------------------------------------------------
input = {
keyboard.xkb.layout = "fr";
keyboard.numlock = { };
touchpad = {
tap = { };
dwt = { };
accel-profile = "adaptive";
scroll-factor = 1.2;
};
mouse = {
accel-profile = "adaptive";
accel-speed = -0.3;
};
focus-follows-mouse = { };
};
# --- disposition ---------------------------------------------------
layout = {
gaps = 8;
center-focused-column = "never";
default-column-width.proportion = 0.5;
preset-column-widths._children = [
{ proportion = 0.33333; }
{ proportion = 0.5; }
{ proportion = 0.66667; }
];
focus-ring = {
width = 2;
active-color = c.base0D;
inactive-color = c.base03;
};
border.off = { };
};
# --- raccourcis ----------------------------------------------------
# calqués sur conf/binding.lua pour garder les réflexes.
# NB : dans niri `Mod` = Super. J/K reprennent ton inversion Hyprland
# (J = haut, K = bas).
binds = {
"Mod+Shift+Slash".show-hotkey-overlay = { };
# session
"Ctrl+Alt+M".quit = { };
"Ctrl+Alt+L".spawn = [ "hyprlock" ];
# lanceurs
"Alt+Q".spawn = [ "kitty" ];
"Alt+N".spawn = [
"kitty"
"-e"
"nvim"
];
"Alt+D".spawn = [ "dolphin" ];
"Alt+F".spawn = [ "zen-beta" ];
"Alt+Z".spawn = [ "zotero" ];
"Alt+T".spawn = [ "thunderbird" ];
"Alt+W".spawn = [
"rofi"
"-show"
"drun"
];
"Alt+X".spawn = [
"rofi"
"-show"
"window"
];
"Alt+C".spawn = [
"rofi"
"-show"
"filebrowser"
];
"Super+V".spawn = [
"sh"
"-c"
"cliphist list | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy"
];
# fenêtres
"Alt+F4".close-window = { };
"Alt+V".toggle-window-floating = { };
"Alt+M".maximize-column = { };
"Alt+Shift+F".fullscreen-window = { };
# focus (colonnes = gauche/droite, fenêtres dans la colonne = haut/bas)
"Alt+H".focus-column-left = { };
"Alt+L".focus-column-right = { };
"Alt+J".focus-window-up = { };
"Alt+K".focus-window-down = { };
# déplacement de fenêtre
"Ctrl+Super+H".move-column-left = { };
"Ctrl+Super+L".move-column-right = { };
"Ctrl+Super+J".move-window-up = { };
"Ctrl+Super+K".move-window-down = { };
# espaces de travail (verticaux dans niri)
"Super+L".focus-workspace-down = { };
"Super+H".focus-workspace-up = { };
"Super+K".move-column-to-workspace-down = { };
"Super+J".move-column-to-workspace-up = { };
# écrans
"Alt+A".focus-monitor-left = { };
"Alt+B".focus-monitor-right = { };
"Ctrl+Super+A".move-column-to-monitor-left = { };
"Ctrl+Super+B".move-column-to-monitor-right = { };
# largeur de colonne
"Alt+R".switch-preset-column-width = { };
"Alt+Minus".set-column-width = [ "-10%" ];
"Alt+Equal".set-column-width = [ "+10%" ];
# captures d'écran (intégrées à niri, pas besoin de grim/slurp)
"Print".screenshot = { };
"Ctrl+Print".screenshot-screen = { };
"Alt+Print".screenshot-window = { };
# multimédia / luminosité
"XF86MonBrightnessUp" = {
_props.allow-when-locked = true;
spawn = [
"brightnessctl"
"-e4"
"-n2"
"set"
"5%+"
];
};
"XF86MonBrightnessDown" = {
_props.allow-when-locked = true;
spawn = [
"brightnessctl"
"-e4"
"-n2"
"set"
"5%-"
];
};
"XF86AudioRaiseVolume" = {
_props.allow-when-locked = true;
spawn = [
"wpctl"
"set-volume"
"-l"
"1"
"@DEFAULT_AUDIO_SINK@"
"5%+"
];
};
"XF86AudioLowerVolume" = {
_props.allow-when-locked = true;
spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"5%-"
];
};
"XF86AudioMute" = {
_props.allow-when-locked = true;
spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
};
"XF86AudioMicMute" = {
_props.allow-when-locked = true;
spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
};
};
# --- nœuds répétés / paramétrés ------------------------------------
_children = [
# écrans : niri prend le mode « preferred » si on ne précise rien
{
output = {
_args = [ "eDP-1" ];
scale = 1.0;
position._props = {
x = 0;
y = 0;
};
};
}
{ output._args = [ "HDMI-A-1" ]; }
# démarrage
{
spawn-at-startup._args = [
"swaybg"
"-i"
wallpaper
"-m"
"fill"
];
}
{ spawn-at-startup._args = [ "mako" ]; }
{
spawn-at-startup._args = [
"sh"
"-c"
"wl-paste --type text --watch cliphist store"
];
}
{
spawn-at-startup._args = [
"sh"
"-c"
"wl-paste --type image --watch cliphist store"
];
}
# règles de fenêtres : exemple, à étoffer au fur et à mesure
{
window-rule._children = [
{ match._props.app-id = "^org\\.keepassxc\\.KeePassXC$"; }
{ block-out-from = "screen-capture"; }
];
}
];
};
};
home.packages = with pkgs; [
swaybg # niri n'a pas de gestionnaire de fond d'écran intégré
xwayland-satellite
];
}

View file

@ -1,4 +1,8 @@
{ ... }: { ... }:
# General idea
# Alt is for focus switch or open/close windows shortcut
# Ctrl is for changing size or state
# Mod is for moving windows
{ {
programs.niri.settings.binds = { programs.niri.settings.binds = {
# open programs # open programs
@ -25,43 +29,40 @@
"-e" "-e"
"nvim" "nvim"
]; ];
"Alt+F".action.spawn = [ "zen-beta" ]; "Alt+F".action.spawn = [ "zen-beta" ];
"Alt+Z".action.spawn = [ "zotero" ]; "Alt+Z".action.spawn = [ "zotero" ];
"Alt+T".action.spawn = [ "thunderbird" ]; "Alt+T".action.spawn = [ "thunderbird" ];
# other actions # other actions
"ALT+F4".action.close-window = { }; "ALT+F4".action.close-window = { };
"ALT+V".action.toggle-window-floating = { }; "ALT+V".action.switch-focus-between-floating-and-tiling = { };
# size control
"Ctrl+V".action.toggle-window-floating = { };
"CTRL+M".action.maximize-column = { }; "CTRL+M".action.maximize-column = { };
"CTRL+F".action.fullscreen-window = { }; "CTRL+F".action.fullscreen-window = { };
"Ctrl+R".action.switch-preset-column-width = { };
"ALT+H".action.focus-column-left = { };
"ALT+L".action.focus-column-right = { };
"ALT+K".action.focus-workspace-up = { };
"ALT+J".action.focus-workspace-down = { };
"Super+H".action.move-column-left = { };
"Super+L".action.move-column-right = { };
"Super+K".action.move-column-to-workspace-up = { };
"Super+J".action.move-column-to-workspace-down = { };
"Alt+A".action.focus-monitor-left = { };
"Alt+B".action.focus-monitor-right = { };
"Super+A".action.move-column-to-monitor-left = { };
"Super+B".action.move-column-to-monitor-right = { };
"Alt+R".action.switch-preset-column-width = { };
"Ctrl+Alt+H".action.set-column-width = [ "-10%" ]; "Ctrl+Alt+H".action.set-column-width = [ "-10%" ];
"Ctrl+Alt+L".action.set-column-width = [ "+10%" ]; "Ctrl+Alt+L".action.set-column-width = [ "+10%" ];
"Ctrl+Alt+J".action.set-window-height = "-10%"; "Ctrl+Alt+J".action.set-window-height = "-10%";
"Ctrl+Alt+K".action.set-window-height = "+10%"; "Ctrl+Alt+K".action.set-window-height = "+10%";
# switch focus
"ALT+H".action.focus-column-left = { };
"ALT+L".action.focus-column-right = { };
"ALT+K".action.focus-workspace-up = { };
"ALT+J".action.focus-workspace-down = { };
"Alt+A".action.focus-monitor-left = { };
"Alt+B".action.focus-monitor-right = { };
# move windows
"Super+H".action.move-column-left = { };
"Super+L".action.move-column-right = { };
"Super+K".action.move-column-to-workspace-up = { };
"Super+J".action.move-column-to-workspace-down = { };
"Super+A".action.move-column-to-monitor-left = { };
"Super+B".action.move-column-to-monitor-right = { };
# screenshot
"Print".action.screenshot = { }; "Print".action.screenshot = { };
"Ctrl+Print".action.screenshot-screen = { }; "Ctrl+Print".action.screenshot-screen = { };
"Alt+Print".action.screenshot-window = { }; "Alt+Print".action.screenshot-window = { };
# special shortcut
# multimédia / luminosité
"XF86MonBrightnessUp" = { "XF86MonBrightnessUp" = {
allow-when-locked = true; allow-when-locked = true;
action.spawn = [ action.spawn = [
@ -128,5 +129,7 @@
}; };
# Aperçu global (overview) # Aperçu global (overview)
"Alt+Tab".action.toggle-overview = { }; "Alt+Tab".action.toggle-overview = { };
# Quitter niri
"Ctrl+Alt+M".action.quit = { };
}; };
} }

View file

@ -3,7 +3,7 @@
programs.niri.settings.layout = { programs.niri.settings.layout = {
gaps = 8; gaps = 8;
center-focused-column = "never"; # never, always, on-overflow center-focused-column = "never"; # never, always, on-overflow
always-center-single-column = true; always-center-single-column = false;
preset-column-widths = [ preset-column-widths = [
{ proportion = 0.33333; } { proportion = 0.33333; }

View file

@ -1,4 +1,4 @@
{ ... }: { config, ... }:
{ {
programs.niri.settings = { programs.niri.settings = {
prefer-no-csd = true; prefer-no-csd = true;
@ -8,7 +8,14 @@
command = [ command = [
"swaybg" "swaybg"
"-i" "-i"
"~/nixos-config/dotfiles/hypr/wallpaper/nix-wallpaper.png" "${config.home.homeDirectory}/nixos-config/dotfiles/hypr/wallpaper/nix-wallpaper.png"
];
}
{
command = [
"gnome-keyring-daemon"
"--start"
"--components=secrets"
]; ];
} }
]; ];

View file

@ -8,7 +8,12 @@
rofi rofi
kitty kitty
swaylock swaylock
swaybg
wireplumber wireplumber
brightnessctl brightnessctl
xwayland-satellite
wl-clipboard
]; ];
# when greetd active
systemd.user.services.niri.enableDefaultPath = false;
} }

View file

@ -34,10 +34,6 @@
ffmpeg ffmpeg
fastfetch fastfetch
pkg-config pkg-config
mako
cliphist
grim
slurp
mullvad-vpn mullvad-vpn
rofi rofi
bitwarden-desktop bitwarden-desktop

View file

@ -31,10 +31,6 @@
fastfetch fastfetch
pkg-config pkg-config
brightnessctl brightnessctl
mako
cliphist
grim
slurp
mullvad-vpn mullvad-vpn
rofi rofi
# --- Themes # --- Themes

View file

@ -0,0 +1,4 @@
{ ... }:
{
programs.hyprland.enable = true;
}

View file

@ -2,4 +2,5 @@
{ {
services.gnome.gnome-keyring.enable = true; services.gnome.gnome-keyring.enable = true;
security.pam.services.login.enableGnomeKeyring = true; security.pam.services.login.enableGnomeKeyring = true;
security.pam.services.greetd.enableGnomeKeyring = true;
} }

View file

@ -0,0 +1,13 @@
{ config, pkgs, ... }:
{
services.greetd = {
enable = true;
settings = {
default_session = {
# for niri
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --remember --remember-user-session --cmd ${config.programs.niri.package}/bin/niri-session";
# for hyprland
};
};
};
}

View file

@ -1,13 +1,11 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
services.gnome-keyring = { services.protonmail-bridge = {
enable = true; enable = true;
components = [ "secrets" ];
}; };
services.protonmail-bridge.enable = true; systemd.user.services.protonmail-bridge.serviceConfig = {
systemd.user.services.protonmail-bridge.Service = {
ExecStartPre = "${pkgs.bash}/bin/bash -c 'until ${pkgs.systemd}/bin/busctl --user list | grep -q org.freedesktop.secrets; do sleep 1; done'"; ExecStartPre = "${pkgs.bash}/bin/bash -c 'until ${pkgs.systemd}/bin/busctl --user list | grep -q org.freedesktop.secrets; do sleep 1; done'";
RestartSec = "10s"; RestartSec = "10s";
}; };

View file

@ -7,6 +7,7 @@
security = { security = {
polkit.enable = true; polkit.enable = true;
pam.services.hyprlock = { }; pam.services.hyprlock = { };
pam.services.swaylock = { };
}; };
programs = { programs = {

View file

@ -22,11 +22,14 @@
../common/services/gnome-keyring.nix ../common/services/gnome-keyring.nix
../common/services/mullvad.nix ../common/services/mullvad.nix
../common/services/sound.nix ../common/services/sound.nix
../common/services/greetd.nix
../common/services/protonmail.nix
# programs # programs
../common/programs/gamescope.nix ../common/programs/gamescope.nix
../common/programs/steam.nix ../common/programs/steam.nix
# packages & others # packages & others
../common/niri.nix ../common/niri.nix
../common/hyprland.nix
../common/wayland.nix ../common/wayland.nix
../common/system_packages.nix ../common/system_packages.nix
# profil nixos pour mon ordi portable maison # profil nixos pour mon ordi portable maison

View file

@ -23,11 +23,14 @@
../common/services/gnome-keyring.nix ../common/services/gnome-keyring.nix
../common/services/mullvad.nix ../common/services/mullvad.nix
../common/services/sound.nix ../common/services/sound.nix
../common/services/greetd.nix
../common/services/protonmail.nix
# programs # programs
../common/programs/gamescope.nix ../common/programs/gamescope.nix
../common/programs/steam.nix ../common/programs/steam.nix
# packages & others # packages & others
../common/niri.nix ../common/niri.nix
../common/hyprland.nix
../common/wayland.nix ../common/wayland.nix
../common/system_packages.nix # profil nixos-hardware pour le ThinkPad E560 ../common/system_packages.nix # profil nixos-hardware pour le ThinkPad E560
# nécessite l'input nixos-hardware dans flake.nix # nécessite l'input nixos-hardware dans flake.nix