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