diff --git a/dotfiles/hypr/.luarc.json b/dotfiles/hypr/.luarc.json
new file mode 120000
index 0000000..5d1ead4
--- /dev/null
+++ b/dotfiles/hypr/.luarc.json
@@ -0,0 +1 @@
+/nix/store/r3344bjbakm2dxxl79bfps7q65lrh0a4-home-manager-files/.config/hypr/.luarc.json
\ No newline at end of file
diff --git a/dotfiles/hypr/conf/conf b/dotfiles/hypr/conf/conf
new file mode 120000
index 0000000..ade96ef
--- /dev/null
+++ b/dotfiles/hypr/conf/conf
@@ -0,0 +1 @@
+/home/afoucaultc/nixos-config/dotfiles/hypr/conf
\ No newline at end of file
diff --git a/dotfiles/hypr/hyprland.lua b/dotfiles/hypr/hyprland.lua
deleted file mode 100644
index 6d5bfe3..0000000
--- a/dotfiles/hypr/hyprland.lua
+++ /dev/null
@@ -1,10 +0,0 @@
-require("conf.variables")
-require("conf.binding")
-require("conf.env")
-require("conf.input")
-require("conf.others")
-require("conf.monitor")
-require("conf.startup")
-require("conf.style")
-require("conf.windowrules")
-require("conf.workspace")
diff --git a/dotfiles/hypr/hyprland.lua b/dotfiles/hypr/hyprland.lua
new file mode 120000
index 0000000..00953ac
--- /dev/null
+++ b/dotfiles/hypr/hyprland.lua
@@ -0,0 +1 @@
+/nix/store/r3344bjbakm2dxxl79bfps7q65lrh0a4-home-manager-files/.config/hypr/hyprland.lua
\ No newline at end of file
diff --git a/dotfiles/hypr/hyprlock.conf b/dotfiles/hypr/hyprlock.conf
new file mode 100644
index 0000000..1ae4a01
--- /dev/null
+++ b/dotfiles/hypr/hyprlock.conf
@@ -0,0 +1,118 @@
+source = ~/.config/hypr/variables.conf
+
+# BACKGROUND
+background {
+ monitor =
+ path = ~/nixos-config/dotfiles/hypr/wallpaper/nix-wallpaper.png
+ blur_passes = 2
+ contrast = 0.8916
+ brightness = 0.8172
+zsh:1: command not found: q
+ vibrancy_darkness = 0.3
+}
+
+# GENERAL
+general {
+ no_fade_in = false
+ grace = 0
+ disable_loading_bar = false
+}
+
+# DATE
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%A, %B %d")"
+ color = rgba(255,255,255, 0.75)
+ font_size = 22
+ font_family = Luciole
+ position = 0, 100
+ halign = center
+ valign = center
+}
+
+# TIME
+label {
+ monitor =
+ text = cmd[update:1000] echo -e "$(LC_TIME=en_US.UTF-8 date +"%A, %B %d")"
+ color = rgba(216, 222, 233, 0.90)
+ font_size = 25
+ font_family = SF Pro Display Semibold
+ position = 0, 350
+ halign = center
+ valign = center
+}
+label {
+ monitor =
+ text = cmd[update:1000] echo "$(date +"%I:%M")"
+ color = rgba(216, 222, 233, 0.90)
+ font_size = 120
+ font_family = SF Pro Display Bold
+ position = 0, 230
+ halign = center
+ valign = center
+}
+
+# User info
+label {
+ monitor =
+ text = $USER
+ color = rgba(216, 222, 233, 0.80)
+ outline_thickness = 2
+ dots_size = 0.2
+ dots_spacing = 0.2
+ dots_center = true
+ font_size = 18
+ font_family = SF Pro Display Bold
+ position = 0, -130
+ halign = center
+ valign = center
+}
+shape {
+ monitor =
+ size = 280, 55
+ color = rgba(255, 255, 255, .1)
+ rounding = -1
+ border_size = 0
+ border_color = rgba(253, 198, 135, 0)
+ rotate = 0
+ xray = false
+ position = 0, -130
+ halign = center
+ valign = center
+}
+
+# INPUT FIELD
+input-field {
+ monitor =
+ size = 280, 55
+ outline_thickness = 2
+ dots_size = 0.2 # Password dot size (0.2-0.8)
+ dots_spacing = 0.2 # Spacing between dots (0.0-1.0)
+ dots_center = true # Center dots in field
+ outer_color = rgba(0, 0, 0, 0)
+ inner_color = rgba(255, 255, 255, 0.1)
+ font_color = rgb(200, 200, 200)
+ fade_on_empty = false
+ font_family = SF Pro Display Bold
+ placeholder_text = Enter Pass
+ hide_input = false # Show/hide password dots
+ position = 0, -210
+ halign = center
+ valign = center
+}
+
+label {
+ monitor =
+ text = cmd[update:30000] echo "🔋 $(cat /sys/class/power_supply/BAT0/capacity)%"
+ color = rgba(255, 255, 255, 0.8)
+ font_size = 14
+ position = -50, 50
+ halign = right
+ valign = bottom
+}
+
+
+auth {
+ fingerprint:enabled=true
+}
+
diff --git a/dotfiles/hypr/hyprpaper.conf b/dotfiles/hypr/hyprpaper.conf
new file mode 100644
index 0000000..6d4d260
--- /dev/null
+++ b/dotfiles/hypr/hyprpaper.conf
@@ -0,0 +1,6 @@
+wallpaper {
+ monitor =
+ path = /home/afoucaultc/nixos-config/dotfiles/hypr/wallpaper/nix-wallpaper.png
+ fit_mode = cover
+}
+splash = false
diff --git a/dotfiles/inkscape/palettes b/dotfiles/inkscape/palettes
index 44e673c..69265d1 120000
--- a/dotfiles/inkscape/palettes
+++ b/dotfiles/inkscape/palettes
@@ -1 +1 @@
-/nix/store/5c3dhhcvzlwrdj4d24wqkj15fhmy9zpx-home-manager-files/.config/inkscape/palettes
\ No newline at end of file
+/nix/store/r3344bjbakm2dxxl79bfps7q65lrh0a4-home-manager-files/.config/inkscape/palettes
\ No newline at end of file
diff --git a/dotfiles/inkscape/templates b/dotfiles/inkscape/templates
index b323cb7..80dbb82 120000
--- a/dotfiles/inkscape/templates
+++ b/dotfiles/inkscape/templates
@@ -1 +1 @@
-/nix/store/5c3dhhcvzlwrdj4d24wqkj15fhmy9zpx-home-manager-files/.config/inkscape/templates
\ No newline at end of file
+/nix/store/r3344bjbakm2dxxl79bfps7q65lrh0a4-home-manager-files/.config/inkscape/templates
\ No newline at end of file
diff --git a/dotfiles/kitty/kitty.conf b/dotfiles/kitty/kitty.conf
index 7efd478..02b1da4 120000
--- a/dotfiles/kitty/kitty.conf
+++ b/dotfiles/kitty/kitty.conf
@@ -1 +1 @@
-/nix/store/5c3dhhcvzlwrdj4d24wqkj15fhmy9zpx-home-manager-files/.config/kitty/kitty.conf
\ No newline at end of file
+/nix/store/r3344bjbakm2dxxl79bfps7q65lrh0a4-home-manager-files/.config/kitty/kitty.conf
\ No newline at end of file
diff --git a/flake.lock b/flake.lock
index 2eede43..1ebc49e 100644
--- a/flake.lock
+++ b/flake.lock
@@ -528,6 +528,64 @@
"type": "github"
}
},
+ "niri": {
+ "inputs": {
+ "niri-stable": "niri-stable",
+ "niri-unstable": "niri-unstable",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "nixpkgs-stable": "nixpkgs-stable",
+ "xwayland-satellite-stable": "xwayland-satellite-stable",
+ "xwayland-satellite-unstable": "xwayland-satellite-unstable"
+ },
+ "locked": {
+ "lastModified": 1785857305,
+ "narHash": "sha256-25q05zpF1sqOCxPPUG9DPPGd+EDW7SiAOWCzBWRS7r0=",
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "rev": "9ee3e13b60643448228353097880521658b2fe0e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "type": "github"
+ }
+ },
+ "niri-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1756556321,
+ "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "ref": "v25.08",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
+ "niri-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1785701241,
+ "narHash": "sha256-ircVOzPWRircI39ac/tqJajr5OoJxEVrDlBb05TULEk=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "feb3e43f1475e0865bb89cbd1e898b34d1d2ccf6",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
"nixos-hardware": {
"inputs": {
"nixpkgs": "nixpkgs_2"
@@ -562,6 +620,22 @@
"type": "github"
}
},
+ "nixpkgs-stable": {
+ "locked": {
+ "lastModified": 1782847189,
+ "narHash": "sha256-twXPFqFsrrY5r28Zh7Homgcp2gUMBgQ6WDS98Q/3xFI=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "b6018f87da91d19d0ab4cf979885689b469cdd41",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-25.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
"nixpkgs_2": {
"locked": {
"lastModified": 1767892417,
@@ -642,6 +716,7 @@
"inputs": {
"home-manager": "home-manager",
"hyprland": "hyprland",
+ "niri": "niri",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3",
"stylix": "stylix",
@@ -816,6 +891,39 @@
"type": "github"
}
},
+ "xwayland-satellite-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1755491097,
+ "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "388d291e82ffbc73be18169d39470f340707edaa",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "ref": "v0.7",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
+ },
+ "xwayland-satellite-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1784679892,
+ "narHash": "sha256-Mb7jpqnrcYCfNSItIkkHpuR3YxWFxPuIBfcwNKlRBkk=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "8d135d3b2854b30fd01ea6cd6c27e523dd50a839",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
+ },
"zen-browser": {
"inputs": {
"home-manager": [
diff --git a/flake.nix b/flake.nix
index 04f1954..2498b4b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -12,6 +12,11 @@
# flake hyprland (git version)
hyprland.url = "github:hyprwm/Hyprland";
nixos-hardware.url = "github:NixOS/nixos-hardware";
+ # flake niri (git version
+ niri = {
+ url = "github:sodiboo/niri-flake";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
# zen browser (communautaire) — follows pour partager les libs système
zen-browser = {
url = "github:0xc000022070/zen-browser-flake";
@@ -35,6 +40,7 @@
nixpkgs,
home-manager,
hyprland,
+ niri,
nixos-hardware,
zen-browser,
stylix,
diff --git a/home/afoucaultc/home-laptop.nix b/home/afoucaultc/home-laptop.nix
index c719826..16afa71 100644
--- a/home/afoucaultc/home-laptop.nix
+++ b/home/afoucaultc/home-laptop.nix
@@ -15,7 +15,6 @@
./packages/neovim.nix
./packages/nextcloud.nix
./packages/other_apps_light.nix
- ./packages/pass.nix
./packages/protonmail.nix
./packages/python.nix
./packages/texlive.nix
diff --git a/home/afoucaultc/home.nix b/home/afoucaultc/home.nix
index 9c23a75..fcf63e4 100644
--- a/home/afoucaultc/home.nix
+++ b/home/afoucaultc/home.nix
@@ -14,11 +14,10 @@
./packages/mpv.nix
#./packages/music.nix
./packages/neovim.nix
- ./packages/niri.nix
+ ./packages/niri/niri.nix
./packages/nextcloud.nix
./packages/obs.nix
./packages/other_apps.nix
- ./packages/pass.nix
./packages/protonmail.nix
./packages/python.nix
./packages/texlive.nix
diff --git a/home/afoucaultc/packages/git.nix b/home/afoucaultc/packages/git.nix
index 575412f..5a7df31 100644
--- a/home/afoucaultc/packages/git.nix
+++ b/home/afoucaultc/packages/git.nix
@@ -1,4 +1,4 @@
-{ pkgs, inputs, ... }:
+{ ... }:
{
programs.git = {
enable = true;
diff --git a/home/afoucaultc/packages/hyprland.nix b/home/afoucaultc/packages/hyprland.nix
index 3f20186..4f7db93 100644
--- a/home/afoucaultc/packages/hyprland.nix
+++ b/home/afoucaultc/packages/hyprland.nix
@@ -1,6 +1,7 @@
{
pkgs,
config,
+ lib,
inputs,
...
}:
@@ -48,7 +49,9 @@ in
slurp
];
- # Force le symlink hors-store, sans passer par dotfiles_apps
- home.file.".config/hypr/conf".source =
- config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/nixos-config/dotfiles/hypr/conf";
+ home.activation.symlinkHyprConf = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
+ mkdir -p ${config.home.homeDirectory}/.config/hypr
+ unlink ${config.home.homeDirectory}/.config/hypr/conf 2>/dev/null || true
+ ln -sf ${config.home.homeDirectory}/nixos-config/dotfiles/hypr/conf ${config.home.homeDirectory}/.config/hypr/conf
+ '';
}
diff --git a/home/afoucaultc/packages/music.nix b/home/afoucaultc/packages/music.nix
deleted file mode 100644
index dcb3566..0000000
--- a/home/afoucaultc/packages/music.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ pkgs, ... }:
-
-{
- home.packages = with pkgs; [
- # --- DAW principal ---
- lmms
-
- # --- Boîte à rythmes ---
- hydrogen
- drumgizmo
-
- # --- SoundFonts ---
- soundfont-fluid
- soundfont-generaluser-gs
-
- # --- Synthés (LV2/VST) ---
- surge-xt
- zynaddsubfx
- yoshimi
- helm
- vital
-
- # --- Effets LV2 ---
- calf
- lsp-plugins
- x42-plugins
-
- # --- Sampling / édition ---
- audacity
-
- # --- Utilitaires ---
- qpwgraph
- sonic-visualiser
- ];
-
- # Aide les hôtes LV2/VST à trouver les plugins installés via Nix
- home.sessionVariables = {
- LV2_PATH = "$HOME/.nix-profile/lib/lv2";
- LADSPA_PATH = "$HOME/.nix-profile/lib/ladspa";
- DSSI_PATH = "$HOME/.nix-profile/lib/dssi";
- VST_PATH = "$HOME/.nix-profile/lib/vst";
- VST3_PATH = "$HOME/.nix-profile/lib/vst3";
- };
-}
diff --git a/home/afoucaultc/packages/niri/conf/animations.nix b/home/afoucaultc/packages/niri/conf/animations.nix
new file mode 100644
index 0000000..e76f559
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/animations.nix
@@ -0,0 +1,55 @@
+{ ... }:
+{
+ programs.niri.settings.animations = {
+ enable = true;
+ slowdown = 1.0;
+
+ workspace-switch.spring = {
+ damping-ratio = 1.0;
+ stiffness = 1000;
+ epsilon = 0.0001;
+ };
+
+ window-open = {
+ duration-ms = 150;
+ curve = "ease-out-expo";
+ };
+
+ window-close = {
+ duration-ms = 150;
+ curve = "ease-out-quad";
+ };
+
+ horizontal-view-movement.spring = {
+ damping-ratio = 1.0;
+ stiffness = 800;
+ epsilon = 0.0001;
+ };
+
+ window-movement.spring = {
+ damping-ratio = 1.0;
+ stiffness = 800;
+ epsilon = 0.0001;
+ };
+
+ window-resize.spring = {
+ damping-ratio = 1.0;
+ stiffness = 800;
+ epsilon = 0.0001;
+ };
+
+ config-notification-open-close.spring = {
+ damping-ratio = 0.6;
+ stiffness = 1000;
+ epsilon = 0.001;
+ };
+
+ screenshot-ui-open.duration-ms = 200;
+
+ overview-open-close.spring = {
+ damping-ratio = 1.0;
+ stiffness = 800;
+ epsilon = 0.0001;
+ };
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/gestures.nix b/home/afoucaultc/packages/niri/conf/gestures.nix
new file mode 100644
index 0000000..9dd41a1
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/gestures.nix
@@ -0,0 +1,16 @@
+{ ... }:
+{
+ programs.niri.settings.gestures = {
+ dnd-edge-view-scroll = {
+ trigger-width = 30;
+ delay-ms = 100;
+ max-speed = 1500;
+ };
+ dnd-edge-workspace-switch = {
+ trigger-height = 50;
+ delay-ms = 100;
+ max-speed = 1500;
+ };
+ hot-corners.enable = true;
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/input.nix b/home/afoucaultc/packages/niri/conf/input.nix
new file mode 100644
index 0000000..42f2adb
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/input.nix
@@ -0,0 +1,51 @@
+{ ... }:
+{
+ programs.niri.settings.input = {
+ keyboard = {
+ xkb = {
+ layout = "fr";
+ variant = "";
+ model = "";
+ rules = "";
+ options = "caps:escape";
+ };
+ repeat-delay = 600;
+ repeat-rate = 25;
+ track-layout = "global";
+ numlock = true;
+ };
+ touchpad = {
+ off = true;
+ tap = true;
+ dwt = true;
+ dwtp = true;
+ drag = true;
+ drag-lock = false;
+ natural-scroll = true;
+ accel-speed = 0.0;
+ accel-profile = "adaptive";
+ scroll-method = "two-finger";
+ tap-button-map = "left-middle-right";
+ click-method = "clickfinger";
+ middle-emulation = false;
+ scroll-factor = 1.2;
+ };
+
+ mouse = {
+ natural-scroll = false;
+ accel-speed = -0.3;
+ accel-profile = "flat";
+ scroll-factor = 1.2;
+ scroll-method = null;
+ };
+
+ mouse-scroll-factor = 1.0;
+ touchpad-scroll-factor = 1.0;
+
+ focus-follows-mouse = {
+ enable = true;
+ # max-scroll-amount = "0%";
+ };
+ };
+
+}
diff --git a/home/afoucaultc/packages/niri/conf/keybind.nix b/home/afoucaultc/packages/niri/conf/keybind.nix
new file mode 100644
index 0000000..f7d873b
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/keybind.nix
@@ -0,0 +1,122 @@
+{ ... }:
+{
+ programs.niri.settings.binds = {
+ # open programs
+ "ALT+Q".action.spawn = "kitty";
+ "ALT+W".action.spawn = "fuzzel";
+ "ALT+D".action.spawn = "dolphin";
+ "ALT+N".action.spawn = [
+ "kitty"
+ "-e"
+ "nvim"
+ ];
+ "Alt+F".spawn = [ "zen-beta" ];
+ "Alt+Z".spawn = [ "zotero" ];
+ "Alt+T".spawn = [ "thunderbird" ];
+
+ # other actions
+ "ALT+F4".action.close-window = { };
+ "ALT+V".toggle-window-floating = { };
+ "ALT+M".maximize-column = { };
+ "ALT+F".fullscreen-window = { };
+
+ "ALT+H".focus-column-left = { };
+ "ALT+L".focus-column-right = { };
+ "ALT+K".focus-window-up = { };
+ "ALT+J".focus-window-down = { };
+
+ "Ctrl+Super+H".move-column-left = { };
+ "Ctrl+Super+L".move-column-right = { };
+ "Ctrl+Super+K".move-window-up = { };
+ "Ctrl+Super+J".move-window-down = { };
+
+ "Super+L".focus-workspace-down = { };
+ "Super+H".focus-workspace-up = { };
+ "Super+K".move-column-to-workspace-down = { };
+ "Super+J".move-column-to-workspace-up = { };
+
+ "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 = { };
+
+ "Alt+R".switch-preset-column-width = { };
+ "Ctrl+H".set-column-width = [ "-10%" ];
+ "Ctrl+L".set-column-width = [ "+10%" ];
+ "Ctrl+K".action.set-window-height = "-10%";
+ "Ctrl+J".action.set-window-height = "+10%";
+
+ "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"
+ ];
+ };
+
+ # Verrouillage d'écran
+ "Ctrl+Alt+L".action = {
+ spawn = [ "swaylock" ];
+ allow-when-locked = true;
+ };
+
+ # Aperçu global (overview)
+ "Alt+Tab".action.toggle-overview = { };
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/layer-rules.nix b/home/afoucaultc/packages/niri/conf/layer-rules.nix
new file mode 100644
index 0000000..3a3fb88
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/layer-rules.nix
@@ -0,0 +1,13 @@
+{ ... }:
+{
+ programs.niri.settings.layer-rules = [
+ {
+ matches = [ { namespace = "^notifications$"; } ];
+ block-out-from = "screen-capture";
+ }
+ {
+ matches = [ { namespace = "^waybar$"; } ];
+ place-within-backdrop = false;
+ }
+ ];
+}
diff --git a/home/afoucaultc/packages/niri/conf/layerrules.nix b/home/afoucaultc/packages/niri/conf/layerrules.nix
new file mode 100644
index 0000000..1288b3f
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/layerrules.nix
@@ -0,0 +1,5 @@
+{ ... }:
+{
+ programs.niri.settings.ENTER = {
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/layout.nix b/home/afoucaultc/packages/niri/conf/layout.nix
new file mode 100644
index 0000000..5d8ea8f
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/layout.nix
@@ -0,0 +1,79 @@
+{ ... }:
+{
+ programs.niri.settings.layout = {
+ gaps = 16;
+ center-focused-column = "never"; # never, always, on-overflow
+ always-center-single-column = false;
+
+ preset-column-widths._children = [
+ { proportion = 0.33333; }
+ { proportion = 0.5; }
+ { proportion = 0.66667; }
+ ];
+
+ default-column-width.proportion = 0.5;
+
+ preset-window-heights = [
+ { proportion = 0.33333; }
+ { proportion = 0.5; }
+ { proportion = 0.66667; }
+ ];
+
+ focus-ring = {
+ enable = true;
+ width = 4;
+ # active.color = "#7fc8ff";
+ # inactive.color = "#505050";
+ # urgent.color = "#9b0000";
+ };
+
+ border = {
+ enable = false;
+ width = 4;
+ # active.color = "#ffc87f";
+ # inactive.color = "#505050";
+ # urgent.color = "#9b0000";
+ };
+
+ shadow = {
+ enable = false;
+ softness = 30;
+ spread = 5;
+ offset = {
+ x = 0;
+ y = 5;
+ };
+ # color = "#0007";
+ # inactive-color = null;
+ };
+
+ tab-indicator = {
+ enable = true;
+ hide-when-single-tab = true;
+ place-within-column = false;
+ gap = 5;
+ width = 4;
+ length.total-proportion = 0.5;
+ position = "left"; # "left" | "right" | "top" | "bottom"
+ gaps-between-tabs = 0;
+ corner-radius = 0;
+ # active.color = "#7fc8ff";
+ # inactive.color = "#505050";
+ # urgent.color = "#9b0000";
+ };
+
+ insert-hint = {
+ enable = true;
+ # color = "#7fc8ff4d";
+ };
+
+ struts = {
+ left = 0;
+ right = 0;
+ top = 0;
+ bottom = 0;
+ };
+
+ # background-color = "transparent";
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/misc.nix b/home/afoucaultc/packages/niri/conf/misc.nix
new file mode 100644
index 0000000..d044457
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/misc.nix
@@ -0,0 +1,35 @@
+{ ... }:
+{
+ programs.niri.settings = {
+ prefer-no-csd = true;
+ screenshot-path = "~/Screenshots/%Y-%m-%d %H-%M-%S.png";
+ spawn-at-startup = [
+ {
+ command = [
+ "swaybg"
+ "-i"
+ "~/nixos-config/dotfiles/hypr/wallpaper/nix-wallpaper.png"
+ ];
+ }
+ ];
+ environment = {
+ DISPLAY = null;
+ QT_QPA_PLATFORM = "wayland";
+ MOZ_ENABLE_WAYLAND = "1";
+ };
+ cursor = {
+ xcursor-theme = "Bibata-Modern-Ice";
+ xcursor-size = 24;
+ hide-when-typing = true;
+ hide-after-inactive-ms = null;
+ };
+
+ xwayland-satellite = {
+ enable = true;
+ path = "xwayland-satellit";
+ };
+ clipboard.disable-primary = false;
+ hotkey-overlay.skip-at-startup = false;
+ overview.zoom = 0.5;
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/output.nix b/home/afoucaultc/packages/niri/conf/output.nix
new file mode 100644
index 0000000..8a93c83
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/output.nix
@@ -0,0 +1,30 @@
+{ ... }:
+{
+ programs.niri.settings.output = {
+ "eDP-1" = {
+ enable = true;
+ scale = 1.0;
+ transform.rotation = 0; # 0, 90, 180, 270
+ position = {
+ x = 0;
+ y = 0;
+ };
+ mode = {
+ width = 1920;
+ height = 1080;
+ refresh = 120.0;
+ };
+ variable-refresh-rate = null; # true, false, on-demand
+ # background-color = "#000000";
+ };
+ # 2nd screen
+ # `niri msg outputs`) :
+ # "HDMI-A-1" = {
+ # enable = true;
+ # scale = 1.0;
+ # position = { x = 1920; y = 0; };
+ # mode = { width = 2560; height = 1440; refresh = 144.0; };
+ # };
+
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/switch-events.nix b/home/afoucaultc/packages/niri/conf/switch-events.nix
new file mode 100644
index 0000000..1288b3f
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/switch-events.nix
@@ -0,0 +1,5 @@
+{ ... }:
+{
+ programs.niri.settings.ENTER = {
+ };
+}
diff --git a/home/afoucaultc/packages/niri/conf/window-rules.nix b/home/afoucaultc/packages/niri/conf/window-rules.nix
new file mode 100644
index 0000000..2e5c8ba
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/window-rules.nix
@@ -0,0 +1,41 @@
+{ ... }:
+{
+ programs.niri.settings.window-rules = [
+ {
+ matches = [ { app-id = "^firefox$"; } ];
+ default-column-width = {
+ proportion = 0.66667;
+ };
+ }
+ {
+ matches = [ { title = "^Picture-in-Picture$"; } ];
+ open-floating = true;
+ default-floating-position = {
+ x = 16;
+ y = 16;
+ relative-to = "bottom-right";
+ };
+ }
+ {
+ matches = [ { app-id = "^(pavucontrol|blueman-manager)$"; } ];
+ open-floating = true;
+ }
+ {
+ # Exemple : bordure/opacité par app
+ matches = [ { app-id = "^kitty$"; } ];
+ opacity = 0.95;
+ geometry-corner-radius = {
+ top-left = 8.0;
+ top-right = 8.0;
+ bottom-left = 8.0;
+ bottom-right = 8.0;
+ };
+ clip-to-geometry = true;
+ }
+ {
+ exclude-from-window-list = false;
+ matches = [ { is-active = false; } ];
+ opacity = 1.0;
+ }
+ ];
+}
diff --git a/home/afoucaultc/packages/niri/conf/workspaces.nix b/home/afoucaultc/packages/niri/conf/workspaces.nix
new file mode 100644
index 0000000..3310fd1
--- /dev/null
+++ b/home/afoucaultc/packages/niri/conf/workspaces.nix
@@ -0,0 +1,8 @@
+{ ... }:
+{
+ programs.niri.settings.workspaces = {
+ # "1" = { name = "web"; open-on-output = "eDP-1"; };
+ # "2" = { name = "code"; };
+ # "3" = { name = "chat"; };
+ };
+}
diff --git a/home/afoucaultc/packages/niri/niri.nix b/home/afoucaultc/packages/niri/niri.nix
new file mode 100644
index 0000000..d225017
--- /dev/null
+++ b/home/afoucaultc/packages/niri/niri.nix
@@ -0,0 +1,16 @@
+{ pkgs, ... }:
+{
+ imports = [
+ ./settings.nix
+ ];
+ programs.niri = {
+ enable = true;
+ };
+ home.packages = with pkgs; [
+ fuzzel
+ kitty
+ swaylock
+ wireplumber # fournit wpctl
+ brightnessctl
+ ];
+}
diff --git a/home/afoucaultc/packages/niri/settings.nix b/home/afoucaultc/packages/niri/settings.nix
new file mode 100644
index 0000000..052129d
--- /dev/null
+++ b/home/afoucaultc/packages/niri/settings.nix
@@ -0,0 +1,15 @@
+{ ... }:
+{
+ imports = [
+ conf/animations.nix
+ conf/gestures.nix
+ conf/input.nix
+ conf/keybind.nix
+ conf/layer-rules.nix
+ conf/layout.nix
+ conf/misc.nix
+ conf/output.nix
+ conf/window-rules.nix
+ conf/workspaces.nix
+ ];
+}
diff --git a/home/afoucaultc/packages/pass.nix b/home/afoucaultc/packages/pass.nix
deleted file mode 100644
index bae8f54..0000000
--- a/home/afoucaultc/packages/pass.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{ ... }:
-{
- programs.password-store = {
- enable = true;
- };
-}
diff --git a/home/afoucaultc/packages/protonmail.nix b/home/afoucaultc/packages/protonmail.nix
index 9065a36..a6070b1 100644
--- a/home/afoucaultc/packages/protonmail.nix
+++ b/home/afoucaultc/packages/protonmail.nix
@@ -1,9 +1,14 @@
{ pkgs, ... }:
{
- # agent pour les clés gpg demandées par protonmail
- services.gpg-agent = {
+ services.gnome-keyring = {
enable = true;
- pinentry.package = pkgs.pinentry-curses;
+ components = [ "secrets" ];
};
+
services.protonmail-bridge.enable = true;
+
+ 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'";
+ RestartSec = "10s";
+ };
}
diff --git a/hosts/nixos-home/config/basesystem/drivers_video.nix b/hosts/nixos-home/config/basesystem/drivers_video.nix
index ba24faf..3165e61 100644
--- a/hosts/nixos-home/config/basesystem/drivers_video.nix
+++ b/hosts/nixos-home/config/basesystem/drivers_video.nix
@@ -7,25 +7,30 @@
enable = true;
enable32Bit = true; # nécessaire pour Steam / jeux 32-bit
extraPackages = with pkgs; [
- intel-media-driver # VAAPI pour l'iGPU Intel (Coffee Lake)
- libva-vdpau-driver
+ intel-media-driver
+ intel-compute-runtime
libvdpau-va-gl
];
+ extraPackages32 = with pkgs.pkgsi686Linux; [ intel-media-driver ];
+ };
+
+ environment.sessionVariables = {
+ LIBVA_DRIVER_NAME = "iHD";
+ VDPAU_DRIVER = "va_gl";
};
hardware.nvidia = {
modesetting.enable = true; # requis pour Wayland/Hyprland
powerManagement.enable = true;
- # RTX 2060 = Turing. Le driver "open" fonctionne pour Turing+, mais le propriétaire reste plus mature sur cette génération.
- open = false;
+ powerManagement.finegrained = true;
+ open = true;
nvidiaSettings = true; # fournit `nvidia-settings`
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = {
- sync.enable = true;
- #offload = {
- # enable = true;
- # enableOffloadCmd = true;
- #};
+ offload = {
+ enable = true;
+ enableOffloadCmd = true;
+ };
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
diff --git a/hosts/nixos-home/config/basesystem/system.nix b/hosts/nixos-home/config/basesystem/system.nix
index 3d6f063..e416549 100644
--- a/hosts/nixos-home/config/basesystem/system.nix
+++ b/hosts/nixos-home/config/basesystem/system.nix
@@ -14,4 +14,5 @@
openssh.enable = false;
flatpak.enable = true;
};
+ virtualisation.docker.enable = true;
}
diff --git a/hosts/nixos-home/config/basesystem/users.nix b/hosts/nixos-home/config/basesystem/users.nix
index 78c852d..c3395b4 100644
--- a/hosts/nixos-home/config/basesystem/users.nix
+++ b/hosts/nixos-home/config/basesystem/users.nix
@@ -6,6 +6,7 @@
extraGroups = [
"networkmanager"
"wheel"
+ "docker"
];
shell = pkgs.zsh;
};
diff --git a/hosts/nixos-home/config/hyprland.nix b/hosts/nixos-home/config/hyprland.nix
index 2572dc4..5496db0 100644
--- a/hosts/nixos-home/config/hyprland.nix
+++ b/hosts/nixos-home/config/hyprland.nix
@@ -1,13 +1,21 @@
-{ pkgs, inputs, ... }:
{
- programs.hyprland = {
- enable = true;
- package = inputs.hyprland.packages.${pkgs.system}.hyprland;
+ lib,
+ inputs,
+ pkgs,
+ ...
+}:
+{
+ nix.settings = {
+ substituters = [ "https://hyprland.cachix.org" ];
+ trusted-public-keys = [
+ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIITfGmwGaMwaOAd6DDeaU="
+ ];
};
- # Portails XDG (captures d'écran, partage d'écran, file pickers Wayland)
- xdg.portal = {
- enable = true;
- extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
+
+ security.wrappers.Hyprland = {
+ owner = "root";
+ group = "root";
+ capabilities = "cap_sys_nice+ep";
+ source = lib.getExe inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
};
- security.polkit.enable = true;
}
diff --git a/hosts/nixos-home/config/programs/steam.nix b/hosts/nixos-home/config/programs/steam.nix
index 7c3be17..fbd3a01 100644
--- a/hosts/nixos-home/config/programs/steam.nix
+++ b/hosts/nixos-home/config/programs/steam.nix
@@ -1,4 +1,4 @@
-{ pkgs, ... }:
+{ ... }:
{
programs.steam = {
enable = true;
diff --git a/hosts/nixos-home/config/services/gnome-keyring.nix b/hosts/nixos-home/config/services/gnome-keyring.nix
new file mode 100644
index 0000000..40fcf95
--- /dev/null
+++ b/hosts/nixos-home/config/services/gnome-keyring.nix
@@ -0,0 +1,5 @@
+{ ... }:
+{
+ services.gnome.gnome-keyring.enable = true;
+ security.pam.services.login.enableGnomeKeyring = true;
+}
diff --git a/hosts/nixos-home/config/services/kde.nix b/hosts/nixos-home/config/services/kde.nix
index c87e2fb..2d1247e 100644
--- a/hosts/nixos-home/config/services/kde.nix
+++ b/hosts/nixos-home/config/services/kde.nix
@@ -1,4 +1,4 @@
-{ pkgs, ... }:
+{ ... }:
{
services.gvfs.enable = true;
services.tumbler.enable = true;
diff --git a/hosts/nixos-home/config/services/zramswap.nix b/hosts/nixos-home/config/services/zramswap.nix
deleted file mode 100644
index c62047c..0000000
--- a/hosts/nixos-home/config/services/zramswap.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{ pkgs, ... }:
-{
-
-}
diff --git a/hosts/nixos-home/config/wayland.nix b/hosts/nixos-home/config/wayland.nix
index 16efc53..02fda16 100644
--- a/hosts/nixos-home/config/wayland.nix
+++ b/hosts/nixos-home/config/wayland.nix
@@ -1,7 +1,6 @@
{
pkgs,
lib,
- inputs,
...
}:
{
@@ -16,25 +15,12 @@
};
services.graphical-desktop.enable = true;
-
services.xserver.desktopManager.runXdgAutostartIfNone = lib.mkDefault true;
xdg.portal = {
enable = true;
+ xdgOpenUsePortal = true;
+ config.common.degault = "*";
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
};
-
- nix.settings = {
- substituters = [ "https://hyprland.cachix.org" ];
- trusted-public-keys = [
- "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIITfGmwGaMwaOAd6DDeaU="
- ];
- };
-
- security.wrappers.Hyprland = {
- owner = "root";
- group = "root";
- capabilities = "cap_sys_nice+ep";
- source = lib.getExe inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
- };
}
diff --git a/hosts/nixos-home/configuration.nix b/hosts/nixos-home/configuration.nix
index 501e740..77ce4b8 100644
--- a/hosts/nixos-home/configuration.nix
+++ b/hosts/nixos-home/configuration.nix
@@ -17,6 +17,7 @@
./config/style/fonts.nix
./config/style/stylix.nix
# additional services
+ ./config/services/gnome-keyring.nix
./config/services/kde.nix
./config/services/mullvad.nix
./config/services/power_management.nix
@@ -25,6 +26,7 @@
./config/programs/gamescope.nix
./config/programs/steam.nix
# packages & others
+ ./config/hyprland.nix
./config/wayland.nix
./config/system_packages.nix
# profil nixos pour mon ordi portable maison