From 484999d2b20882bd34426ef65a6caf47fa767099 Mon Sep 17 00:00:00 2001 From: SALVIJER Date: Wed, 23 Jul 2025 23:20:42 +0200 Subject: [PATCH] add wayland --- README.md | 7 +- flake.lock | 16 +- flake.nix | 2 +- hosts/generic/default.nix | 2 + hosts/generic/hardware-configuration.nix | 24 +- hosts/test-kvm/default.nix | 22 +- hosts/test-kvm/hardware-configuration.nix | 14 +- hosts/test-kvm/network.nix | 29 ++ modules/core/config/etc/inputrc | 26 ++ modules/core/default.nix | 2 + modules/core/packages.nix | 9 +- modules/core/ssh.nix | 17 + modules/core/tty.nix | 27 ++ modules/core/users.nix | 3 + modules/optionnal/autologin.nix | 18 + .../desktop/config/etc/xdg/hypr/frappe.conf | 77 +++++ .../etc/xdg/hypr/hyperland-test-kvm.conf | 14 + .../desktop/config/etc/xdg/hypr/hyprland.conf | 313 ++++++++++++++++++ .../desktop/config/etc/xdg/hypr/hyprlock.conf | 0 .../config/etc/xdg/hypr/hyprpaper.conf | 0 .../config/etc/xdg/kitty/current-theme.conf | 80 +++++ .../desktop/config/etc/xdg/kitty/kitty.conf | 51 +++ .../desktop/config/etc/xdg/rofi/colors.rasi | 28 ++ .../desktop/config/etc/xdg/rofi/config.rasi | 152 +++++++++ .../config/etc/xdg/rofi/disconnect.rasi | 12 + .../desktop/config/etc/xdg/rofi/launcher.rasi | 123 +++++++ .../desktop/config/etc/xdg/scripts/update.sh | 26 ++ .../desktop/config/etc/xdg/waybar/colors.css | 26 ++ .../config/etc/xdg/waybar/config.jsonc | 101 ++++++ .../desktop/config/etc/xdg/waybar/style.css | 116 +++++++ modules/optionnal/desktop/config/qwerty-fr | 62 ++++ modules/optionnal/desktop/i3.nix | 0 modules/optionnal/desktop/kitty.nix | 35 ++ modules/optionnal/desktop/nvidia.nix | 0 modules/optionnal/desktop/packages.nix | 32 ++ modules/optionnal/desktop/picom.nix | 0 modules/optionnal/desktop/qwerty-fr.nix | 15 + modules/optionnal/desktop/rofi.nix | 83 +++++ modules/optionnal/desktop/wayland.nix | 39 +++ modules/optionnal/hosts/test-kvm.nix | 9 + modules/optionnal/ssh.nix | 25 ++ 41 files changed, 1612 insertions(+), 25 deletions(-) create mode 100644 hosts/test-kvm/network.nix create mode 100644 modules/core/config/etc/inputrc create mode 100644 modules/core/ssh.nix create mode 100644 modules/core/tty.nix create mode 100644 modules/optionnal/autologin.nix create mode 100644 modules/optionnal/desktop/config/etc/xdg/hypr/frappe.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/hypr/hyperland-test-kvm.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/hypr/hyprland.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/hypr/hyprlock.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/hypr/hyprpaper.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/kitty/current-theme.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/kitty/kitty.conf create mode 100644 modules/optionnal/desktop/config/etc/xdg/rofi/colors.rasi create mode 100644 modules/optionnal/desktop/config/etc/xdg/rofi/config.rasi create mode 100644 modules/optionnal/desktop/config/etc/xdg/rofi/disconnect.rasi create mode 100644 modules/optionnal/desktop/config/etc/xdg/rofi/launcher.rasi create mode 100644 modules/optionnal/desktop/config/etc/xdg/scripts/update.sh create mode 100644 modules/optionnal/desktop/config/etc/xdg/waybar/colors.css create mode 100644 modules/optionnal/desktop/config/etc/xdg/waybar/config.jsonc create mode 100644 modules/optionnal/desktop/config/etc/xdg/waybar/style.css create mode 100644 modules/optionnal/desktop/config/qwerty-fr create mode 100644 modules/optionnal/desktop/i3.nix create mode 100644 modules/optionnal/desktop/kitty.nix create mode 100644 modules/optionnal/desktop/nvidia.nix create mode 100644 modules/optionnal/desktop/packages.nix create mode 100644 modules/optionnal/desktop/picom.nix create mode 100644 modules/optionnal/desktop/qwerty-fr.nix create mode 100644 modules/optionnal/desktop/rofi.nix create mode 100644 modules/optionnal/desktop/wayland.nix create mode 100644 modules/optionnal/ssh.nix diff --git a/README.md b/README.md index 3c17c01..1410c1d 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,12 @@ Une fois la manipulation finie, on copie `hosts/generic` dans `hosts/hostname`. Avant de déployer la configuration, il faut ajouter la clé sops-nix ``` -(TODO) +cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age +vi .sops.yaml +sops updatekeys secrets.yaml +git commit -am "add myhost sops key" +git push origin main +nix flake update mysecrets ``` On édite `hosts/hostname/default.nix` et on inclus les bons modules. diff --git a/flake.lock b/flake.lock index b123a59..db550b1 100644 --- a/flake.lock +++ b/flake.lock @@ -23,19 +23,17 @@ "mysecrets": { "flake": false, "locked": { - "lastModified": 1753141577, - "narHash": "sha256-MNbm7KCEqML5l72GppVoxXX03UtVGIzUsgaW+A+FBDQ=", - "ref": "main", - "rev": "c1edf4983cba959f93daa9c7ef0c1acbd958c755", - "shallow": true, + "lastModified": 1753261965, + "narHash": "sha256-KaKG3Vd7xpfQKAslnYPWCmqyoZTeefRDLqwSzD18nXQ=", + "ref": "refs/heads/main", + "rev": "341a2a1a75af6613018404dd0059d9c6d3fcc4a1", + "revCount": 3, "type": "git", - "url": "ssh://gitea@git.unixyourbrain.org/beastie/nixos-secrets.git" + "url": "file:///root/git/nixos-secrets" }, "original": { - "ref": "main", - "shallow": true, "type": "git", - "url": "ssh://gitea@git.unixyourbrain.org/beastie/nixos-secrets.git" + "url": "file:///root/git/nixos-secrets" } }, "nixpkgs": { diff --git a/flake.nix b/flake.nix index 09388a7..ee74500 100644 --- a/flake.nix +++ b/flake.nix @@ -15,7 +15,7 @@ }; mysecrets = { - url = "git+ssh://gitea@git.unixyourbrain.org/beastie/nixos-secrets.git?ref=main&shallow=1"; + url = "git+file:///root/git/nixos-secrets"; flake = false; }; }; diff --git a/hosts/generic/default.nix b/hosts/generic/default.nix index 93c26f6..2726c15 100644 --- a/hosts/generic/default.nix +++ b/hosts/generic/default.nix @@ -35,6 +35,7 @@ ${username} = { isNormalUser = true; createHome = true; + password = "toto"; description = "Admin account"; extraGroups = [ "wheel" @@ -79,6 +80,7 @@ pkgs.curl pkgs.nixos-anywhere pkgs.nixos-generators + pkgs.ssh-to-age ]; services.openssh.enable = true; diff --git a/hosts/generic/hardware-configuration.nix b/hosts/generic/hardware-configuration.nix index 85f3eaf..48c6058 100644 --- a/hosts/generic/hardware-configuration.nix +++ b/hosts/generic/hardware-configuration.nix @@ -1,16 +1,28 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/profiles/qemu-guest.nix") - ]; + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; - boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; + boot.initrd.availableKernelModules = [ + "ahci" + "xhci_pci" + "virtio_pci" + "sr_mod" + "virtio_blk" + ]; boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; + boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; diff --git a/hosts/test-kvm/default.nix b/hosts/test-kvm/default.nix index 19bdba9..bec5a43 100644 --- a/hosts/test-kvm/default.nix +++ b/hosts/test-kvm/default.nix @@ -6,11 +6,12 @@ inputs, ... }: -let -in { + system.stateVersion = "25.11"; + imports = builtins.trace "${inputs.mysecrets}" [ (modulesPath + "/installer/scan/not-detected.nix") + ./network.nix ./disk-config.nix ./hardware-configuration.nix ../../modules/core @@ -36,9 +37,20 @@ in }; }; - services.openssh.enable = true; + ## Enable virtualisation guest settings + services.qemuGuest.enable = true; + services.spice-vdagentd.enable = true; + services.xserver = { + videoDrivers = [ "modesetting" ]; # Driver vidéo optimisé pour QEMU/KVM + }; - networking.hostName = "${hostname}"; + environment.systemPackages = [ + pkgs.spice-gtk # Outils SPICE + pkgs.spice-protocol # Protocoles SPICE + ]; - system.stateVersion = "25.11"; + #fileSystems."/" = { + # device = "/dev/vda2"; # Disque virtuel typique + # fsType = "btrfs"; + #}; } diff --git a/hosts/test-kvm/hardware-configuration.nix b/hosts/test-kvm/hardware-configuration.nix index f5b54dc..282f951 100644 --- a/hosts/test-kvm/hardware-configuration.nix +++ b/hosts/test-kvm/hardware-configuration.nix @@ -20,9 +20,19 @@ "virtio_pci" "sr_mod" "virtio_blk" + "virtio_scsi" + "virtio_net" + "virtio_blk" + ]; + boot.initrd.kernelModules = [ + "virtio_balloon" + "virtio_console" + "virtio_rng" + ]; + boot.kernelModules = [ + "kvm-amd" + "virtio-gpu" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; diff --git a/hosts/test-kvm/network.nix b/hosts/test-kvm/network.nix new file mode 100644 index 0000000..e5159ad --- /dev/null +++ b/hosts/test-kvm/network.nix @@ -0,0 +1,29 @@ +{ + hostname, + ... +}: +{ + networking = { + hostName = "${hostname}"; + interfaces.enp1s0 = { + ipv4.addresses = [ + { + address = "192.168.122.100"; + prefixLength = 24; + } + ]; + }; + defaultGateway = { + address = "192.168.122.1"; + interface = "enp1s0"; + }; + nameservers = [ + "9.9.9.9" + "2001:41d0:303:20da::1" + "217.182.138.218" + ]; + networkmanager.enable = true; + + firewall.enable = true; + }; +} diff --git a/modules/core/config/etc/inputrc b/modules/core/config/etc/inputrc new file mode 100644 index 0000000..a336cb2 --- /dev/null +++ b/modules/core/config/etc/inputrc @@ -0,0 +1,26 @@ +set bell-style none +set meta-flag on +set input-meta on +set convert-meta off +set output-meta on +set colored-stats on +set completion-ignore-case on +set editing-mode emacs + +"\e[A":history-search-backward +"\e[B":history-search-forward + +$if term=linux +"\e[1~": beginning-of-line +"\e[4~": end-of-line +$endif + +$if term=xterm +"\e[1~": beginning-of-line +"\e[4~": end-of-line +$endif + +$if term=rxvt-unicode +"\e[7~": beginning-of-line +"\e[8~": end-of-line +$endif diff --git a/modules/core/default.nix b/modules/core/default.nix index 54ba2e8..030b6f0 100644 --- a/modules/core/default.nix +++ b/modules/core/default.nix @@ -5,6 +5,8 @@ imports = [ ./grub.nix ./packages.nix + ./ssh.nix + ./tty.nix ./users.nix ]; } diff --git a/modules/core/packages.nix b/modules/core/packages.nix index 263ab08..28fe84b 100644 --- a/modules/core/packages.nix +++ b/modules/core/packages.nix @@ -14,6 +14,13 @@ pkgs.git pkgs.neovim pkgs.unzip - + pkgs.sops + pkgs.ssh-to-age ]; + services = { + locate = { + enable = true; + package = pkgs.plocate; + }; + }; } diff --git a/modules/core/ssh.nix b/modules/core/ssh.nix new file mode 100644 index 0000000..570a3b0 --- /dev/null +++ b/modules/core/ssh.nix @@ -0,0 +1,17 @@ +{ + ... +}: +{ + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = true; + AllowUsers = null; + UseDns = true; + X11Forwarding = false; + PermitRootLogin = "no"; + }; + }; + + networking.firewall.allowedTCPPorts = [ 22 ]; +} diff --git a/modules/core/tty.nix b/modules/core/tty.nix new file mode 100644 index 0000000..2cfb7e7 --- /dev/null +++ b/modules/core/tty.nix @@ -0,0 +1,27 @@ +{ + config, + pkgs, + ... +}@attrs: +let + cfg = config.services.getty; +in +{ + environment = { + etc = { + "inputrc".source = ./config/etc/inputrc; + }; + shellAliases = { + ls = "ls --color=auto"; + ll = "ls --color=auto -lha"; + grep = "grep --color=auto"; + ip = "ip -color=auto"; + vi = "nvim"; + }; + variables = { + EDITOR = "nvim"; + HISTSIZE = 20000; + HISTTIMEFORMAT = "%F %T "; + }; + }; +} diff --git a/modules/core/users.nix b/modules/core/users.nix index d09c805..64c12bb 100644 --- a/modules/core/users.nix +++ b/modules/core/users.nix @@ -13,6 +13,9 @@ description = "Admin account"; extraGroups = [ "wheel" + "networkmanager" + "audio" + "video" ]; openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKMJ3TkEmRQcX7RQijNa2km6a2xXJk6M6FERh7C9nTJ" diff --git a/modules/optionnal/autologin.nix b/modules/optionnal/autologin.nix new file mode 100644 index 0000000..96fd79b --- /dev/null +++ b/modules/optionnal/autologin.nix @@ -0,0 +1,18 @@ +{ + config, + username, + pkgs, + ... +}: +let + cfg = config.services.getty; +in +{ + systemd.services."getty@tty1" = { + overrideStrategy = "asDropin"; + serviceConfig.ExecStart = [ + "" + "${pkgs.util-linux}/bin/agetty --login-program ${cfg.loginProgram} --autologin ${username} --noclear --keep-baud %I 115200,38400,9600 $TERM" + ]; + }; +} diff --git a/modules/optionnal/desktop/config/etc/xdg/hypr/frappe.conf b/modules/optionnal/desktop/config/etc/xdg/hypr/frappe.conf new file mode 100644 index 0000000..3667139 --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/hypr/frappe.conf @@ -0,0 +1,77 @@ +$rosewater = rgb(f2d5cf) +$rosewaterAlpha = f2d5cf + +$flamingo = rgb(eebebe) +$flamingoAlpha = eebebe + +$pink = rgb(f4b8e4) +$pinkAlpha = f4b8e4 + +$mauve = rgb(ca9ee6) +$mauveAlpha = ca9ee6 + +$red = rgb(e78284) +$redAlpha = e78284 + +$maroon = rgb(ea999c) +$maroonAlpha = ea999c + +$peach = rgb(ef9f76) +$peachAlpha = ef9f76 + +$yellow = rgb(e5c890) +$yellowAlpha = e5c890 + +$green = rgb(a6d189) +$greenAlpha = a6d189 + +$teal = rgb(81c8be) +$tealAlpha = 81c8be + +$sky = rgb(99d1db) +$skyAlpha = 99d1db + +$sapphire = rgb(85c1dc) +$sapphireAlpha = 85c1dc + +$blue = rgb(8caaee) +$blueAlpha = 8caaee + +$lavender = rgb(babbf1) +$lavenderAlpha = babbf1 + +$text = rgb(c6d0f5) +$textAlpha = c6d0f5 + +$subtext1 = rgb(b5bfe2) +$subtext1Alpha = b5bfe2 + +$subtext0 = rgb(a5adce) +$subtext0Alpha = a5adce + +$overlay2 = rgb(949cbb) +$overlay2Alpha = 949cbb + +$overlay1 = rgb(838ba7) +$overlay1Alpha = 838ba7 + +$overlay0 = rgb(737994) +$overlay0Alpha = 737994 + +$surface2 = rgb(626880) +$surface2Alpha = 626880 + +$surface1 = rgb(51576d) +$surface1Alpha = 51576d + +$surface0 = rgb(414559) +$surface0Alpha = 414559 + +$base = rgb(303446) +$baseAlpha = 303446 + +$mantle = rgb(292c3c) +$mantleAlpha = 292c3c + +$crust = rgb(232634) +$crustAlpha = 232634 diff --git a/modules/optionnal/desktop/config/etc/xdg/hypr/hyperland-test-kvm.conf b/modules/optionnal/desktop/config/etc/xdg/hypr/hyperland-test-kvm.conf new file mode 100644 index 0000000..2b93abb --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/hypr/hyperland-test-kvm.conf @@ -0,0 +1,14 @@ +################ +### MONITORS ### +################ +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=Virtual-1,1920x1080,0x0,1 + +workspace = 1, monitor:Virtual-1 +workspace = 2, monitor:Virtual-1 +workspace = 3, monitor:Virtual-1 +workspace = 4, monitor:Virtual-1 +workspace = 5, monitor:Virtual-1 +workspace = 6, monitor:Virtual-1 +workspace = 7, monitor:Virtual-1 +workspace = 8, monitor:Virtual-1 diff --git a/modules/optionnal/desktop/config/etc/xdg/hypr/hyprland.conf b/modules/optionnal/desktop/config/etc/xdg/hypr/hyprland.conf new file mode 100644 index 0000000..e18085b --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/hypr/hyprland.conf @@ -0,0 +1,313 @@ +source = /etc/xdg/hypr/hyprland-host.conf + +################### +### MY PROGRAMS ### +################### + +$terminal = kitty +source = /etc/xdg/hypr/rofi.conf + +################# +### AUTOSTART ### +################# + +exec-once = waybar & +exec-once = hyprpaper + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +env = LIBVA_DRIVER_NAME,nvidia +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 + +################### +### PERMISSIONS ### +################### + +# permission = /usr/(bin|local/bin)/grim, screencopy, allow +# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow +# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow + + +##################### +### LOOK AND FEEL ### +##################### + +general { + gaps_in = 5 + gaps_out = 10 + + border_size = 2 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + # col.active_border = rgb(81c8be) rgb(8caaee) 45deg + col.active_border = rgb(81c8be) + col.inactive_border = rgb(737994) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 10 + rounding_power = 2 + + # Change transparency of focused and unfocused windows + active_opacity = 0.95 + inactive_opacity = 0.80 + + shadow { + enabled = false + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hypr.land/Configuring/Variables/#group +group { + col.border_active = rgb(81c8be) # Violet par exemple + col.border_inactive = rgb(737994) # Gris par exemple + col.border_locked_active = rgb(81c8be) # Rose + col.border_locked_inactive = rgb(737994) # Gris foncé + groupbar { + font_family = CaskaydiaCove Nerd Font + font_size = 16 + font_weight_active = bold + font_weight_inactive = normal + indicator_gap = 5 + indicator_height = 2 + text_color = rgb(81c8be) + col.active = rgb(81c8be) + col.inactive = rgb(737994) + col.locked_inactive = rgb(737994) + gaps_in = 10 + gaps_out = 5 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = true, please :) + + # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = easeOutQuint,0.23,1,0.32,1 + bezier = easeInOutCubic,0.65,0.05,0.36,1 + bezier = linear,0,0,1,1 + bezier = almostLinear,0.5,0.5,0.75,1.0 + bezier = quick,0.15,0,0.1,1 + + animation = global, 1, 10, default + animation = border, 1, 5.39, easeOutQuint + animation = windows, 1, 4.79, easeOutQuint + animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + animation = windowsOut, 1, 1.49, linear, popin 87% + animation = fadeIn, 1, 1.73, almostLinear + animation = fadeOut, 1, 1.46, almostLinear + animation = fade, 1, 3.03, quick + animation = layers, 1, 3.81, easeOutQuint + animation = layersIn, 1, 4, easeOutQuint, fade + animation = layersOut, 1, 1.5, linear, fade + animation = fadeLayersIn, 1, 1.79, almostLinear + animation = fadeLayersOut, 1, 1.39, almostLinear + animation = workspaces, 1, 1.94, almostLinear, slidefade +} + +# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# "Smart gaps" / "No gaps when only" +# uncomment all if you wish to use that. +# workspace = w[tv1], gapsout:0, gapsin:0 +# workspace = f[1], gapsout:0, gapsin:0 +# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] +# windowrule = rounding 0, floating:0, onworkspace:w[tv1] +# windowrule = bordersize 0, floating:0, onworkspace:f[1] +# windowrule = rounding 0, floating:0, onworkspace:f[1] + +# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this + force_split = 2 +} + +# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +master { + new_status = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#misc +misc { + force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = qwerty-fr + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = false + } + + numlock_by_default = true +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + + +################### +### KEYBINDINGS ### +################### + +$mainMod = SUPER # Sets "Windows" key as main modifier +# Apps shortcut +bind = $mainMod, D, exec, $rofi +bind = $mainMod, L, exec, /etc/xdg/scripts/wayland-disconnect.sh +bind = $mainMod, M, exec, /etc/xdg/scripts/wayland-mpv.sh +bind = $mainMod SHIFT, P, exec, pavucontrol +bind = $mainMod SHIFT, T, exec, teams-for-linux +bind = $mainMod SHIFT, D, exec, discord +bind = $mainMod SHIFT, F, exec, firefox +bind = $mainMod SHIFT, S, exec, steam +bind = $mainMod SHIFT, L, exec, lutris +bind = ,Print, exec, grim -g "$(slurp)" - | swappy -f - + +# Reload Restart config | moved to rofi +bind = $mainMod, E, exit, + +# Kill focused window +bind = $mainMod, Return, exec, $terminal + +# Créer un groupe +bind = SUPER, G, togglegroup +# Naviguer dans le groupe +bind = SUPER, TAB, changegroupactive + +bind = $mainMod, Q, killactive, +bind = $mainMod, F, fullscreenstate, 3 +bind = $mainMod, V, togglefloating, +bind = $mainMod, SPACE, togglesplit, # dwindle + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Déplacement de fenêtres avec CONTROL + flèches +bind = $mainMod CONTROL, left, movewindow, l +bind = $mainMod CONTROL, right, movewindow, r +bind = $mainMod CONTROL, up, movewindow, u +bind = $mainMod CONTROL, down, movewindow, d + +# Navigation workspace avec keypad (NumLock OFF) +bind = $mainMod, KP_End, workspace, 1 +bind = $mainMod, KP_Down, workspace, 2 +bind = $mainMod, KP_Next, workspace, 3 +bind = $mainMod, KP_Left, workspace, 4 +bind = $mainMod, KP_Begin, workspace, 5 +bind = $mainMod, KP_Right, workspace, 6 +bind = $mainMod, KP_Home, workspace, 7 +bind = $mainMod, KP_Up, workspace, 8 + +# Déplacement de fenêtre avec keypad +bind = $mainMod CONTROL, KP_End, movetoworkspacesilent, 1 +bind = $mainMod CONTROL, KP_Down, movetoworkspacesilent, 2 +bind = $mainMod CONTROL, KP_Next, movetoworkspacesilent, 3 +bind = $mainMod CONTROL, KP_Left, movetoworkspacesilent, 4 +bind = $mainMod CONTROL, KP_Begin, movetoworkspacesilent, 5 +bind = $mainMod CONTROL, KP_Right, movetoworkspacesilent, 6 +bind = $mainMod CONTROL, KP_Home, movetoworkspacesilent, 7 +bind = $mainMod CONTROL, KP_Up, movetoworkspacesilent, 8 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod CONTROL, S, movetoworkspacesilent, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule +# windowrule = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + +# Supprimer la transparence pour des applications spécifiques +windowrulev2 = opacity 1.0 override,class:firefox +windowrulev2 = opacity 1.0 override,class:^(chromium)$ +windowrulev2 = opacity 1.0 override,class:^(mpv)$ +windowrulev2 = opacity 1.0 override,class:^(mpv)$ + +windowrulev2 = fullscreen,class:^(mpv)$ diff --git a/modules/optionnal/desktop/config/etc/xdg/hypr/hyprlock.conf b/modules/optionnal/desktop/config/etc/xdg/hypr/hyprlock.conf new file mode 100644 index 0000000..e69de29 diff --git a/modules/optionnal/desktop/config/etc/xdg/hypr/hyprpaper.conf b/modules/optionnal/desktop/config/etc/xdg/hypr/hyprpaper.conf new file mode 100644 index 0000000..e69de29 diff --git a/modules/optionnal/desktop/config/etc/xdg/kitty/current-theme.conf b/modules/optionnal/desktop/config/etc/xdg/kitty/current-theme.conf new file mode 100644 index 0000000..80c3a35 --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/kitty/current-theme.conf @@ -0,0 +1,80 @@ +# vim:ft=kitty + +## name: Catppuccin-Frappe +## author: Pocco81 (https://github.com/Pocco81) +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/frappe.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #C6D0F5 +background #303446 +selection_foreground #303446 +selection_background #F2D5CF + +# Cursor colors +cursor #F2D5CF +cursor_text_color #303446 + +# URL underline color when hovering with mouse +url_color #F2D5CF + +# Kitty window border colors +active_border_color #BABBF1 +inactive_border_color #737994 +bell_border_color #E5C890 + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #232634 +active_tab_background #CA9EE6 +inactive_tab_foreground #C6D0F5 +inactive_tab_background #292C3C +tab_bar_background #232634 + +# Colors for marks (marked text in the terminal) +mark1_foreground #303446 +mark1_background #BABBF1 +mark2_foreground #303446 +mark2_background #CA9EE6 +mark3_foreground #303446 +mark3_background #85C1DC + +# The 16 terminal colors + +# black +color0 #51576D +color8 #626880 + +# red +color1 #E78284 +color9 #E78284 + +# green +color2 #A6D189 +color10 #A6D189 + +# yellow +color3 #E5C890 +color11 #E5C890 + +# blue +color4 #8CAAEE +color12 #8CAAEE + +# magenta +color5 #F4B8E4 +color13 #F4B8E4 + +# cyan +color6 #81C8BE +color14 #81C8BE + +# white +color7 #B5BFE2 +color15 #A5ADCE diff --git a/modules/optionnal/desktop/config/etc/xdg/kitty/kitty.conf b/modules/optionnal/desktop/config/etc/xdg/kitty/kitty.conf new file mode 100644 index 0000000..7a6c901 --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/kitty/kitty.conf @@ -0,0 +1,51 @@ +# BEGIN_KITTY_THEME +# Catppuccin-Frappe +include current-theme.conf +# END_KITTY_THEME + +#Fonts +font_family DejaVuSansM Nerd Font Mono +bold_font auto +italic_font auto +bold_italic_font auto +font_size 14.0 + +# Scroll +scrollback_lines 65635 +scrollback_indicator_opacity 0.5 + +#Url +open_url_with firefox +underline_hyperlinks always + +copy_on_select clipboard +select_by_word_characters @-./_~?&%+#! +sync_to_monitor yes + +# Layout +enabled_layouts vertical + +### Shortcut +# Global +map alt+up change_font_size all +2.0 +map alt+down change_font_size all -2.0 +map alt+= change_font_size all 0 +map alt+u open_url_with_hints +map shift+up scroll_line_up +map shift+down scroll_line_down +map shift+page_up scroll_page_up +map shift+page_down scroll_page_down +mouse_map alt+middle press ungrabbed paste_from_clipboard +# Layout +map alt+s new_window +map alt+p previous_window +map alt+n next_window +# Tab +map alt+enter new_tab +map alt+left previous_tab +map alt+right next_tab +map alt+tab next_tab +map alt+t set_tab_title +# Copy paste +map ctrl+alt+c copy_to_clipboard +map ctrl+alt+v paste_from_clipboard diff --git a/modules/optionnal/desktop/config/etc/xdg/rofi/colors.rasi b/modules/optionnal/desktop/config/etc/xdg/rofi/colors.rasi new file mode 100644 index 0000000..e99a12e --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/rofi/colors.rasi @@ -0,0 +1,28 @@ +* { + rosewater: #f2d5cf; + flamingo: #eebebe; + pink: #f4b8e4; + mauve: #ca9ee6; + red: #e78284; + maroon: #ea999c; + peach: #ef9f76; + yellow: #e5c890; + green: #a6d189; + teal: #81c8be; + sky: #99d1db; + sapphire: #85c1dc; + blue: #8caaee; + lavender: #babbf1; + text: #c6d0f5; + subtext1: #b5bfe2; + subtext0: #a5adce; + overlay2: #949cbb; + overlay1: #838ba7; + overlay0: #737994; + surface2: #626880; + surface1: #51576d; + surface0: #414559; + base: #303446; + mantle: #292c3c; + crust: #232634; +} diff --git a/modules/optionnal/desktop/config/etc/xdg/rofi/config.rasi b/modules/optionnal/desktop/config/etc/xdg/rofi/config.rasi new file mode 100644 index 0000000..f5d499e --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/rofi/config.rasi @@ -0,0 +1,152 @@ +configuration { + modes: "window,drun,run,ssh,combi"; +/* font: "CaskaydiaCove Nerd Font 12"; */ +/* location: 0;*/ +/* yoffset: 0;*/ +/* xoffset: 0;*/ +/* fixed-num-lines: true;*/ + show-icons: false; + terminal: "kitty"; +/* ssh-client: "ssh";*/ +/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/ +/* run-command: "{cmd}";*/ +/* run-list-command: "";*/ +/* run-shell-command: "{terminal} -e {cmd}";*/ +/* window-command: "wmctrl -i -R {window}";*/ +/* window-match-fields: "all";*/ +/* icon-theme: "Papirus"; */ +/* drun-match-fields: "name,generic,exec,categories,keywords";*/ +/* drun-categories: ;*/ +/* drun-show-actions: false;*/ +/* drun-display-format: "{name} [({generic})]";*/ +/* drun-url-launcher: "xdg-open";*/ +/* disable-history: false;*/ +/* ignored-prefixes: "";*/ +/* sort: false;*/ +/* sorting-method: "normal";*/ + case-sensitive: false; +/* cycle: true;*/ +/* sidebar-mode: false;*/ +/* hover-select: false;*/ +/* eh: 1;*/ +/* auto-select: false;*/ +/* parse-hosts: false;*/ +/* parse-known-hosts: true;*/ +/* combi-modes: "window,run";*/ +/* matching: "normal";*/ +/* tokenize: true;*/ +/* m: "-5";*/ +/* filter: ;*/ +/* dpi: -1;*/ +/* threads: 0;*/ +/* scroll-method: 0;*/ +/* window-format: "{w} {c} {t}";*/ +/* click-to-exit: true;*/ +/* max-history-size: 25;*/ +/* combi-hide-mode-prefix: false;*/ +/* combi-display-format: "{mode} {text}";*/ +/* matching-negate-char: '-' /* unsupported */;*/ +/* cache-dir: ;*/ +/* window-thumbnail: false;*/ +/* drun-use-desktop-cache: false;*/ +/* drun-reload-desktop-cache: false;*/ +/* normalize-match: false;*/ +/* steal-focus: false;*/ +/* application-fallback-icon: ;*/ +/* refilter-timeout-limit: 8192;*/ +/* xserver-i300-workaround: false;*/ +/* pid: "/run/user/0/rofi.pid";*/ +/* display-window: ;*/ +/* display-windowcd: ;*/ +/* display-run: ;*/ +/* display-ssh: ;*/ +/* display-drun: ;*/ +/* display-combi: ;*/ +/* display-keys: ;*/ +/* display-filebrowser: ;*/ +/* kb-primary-paste: "Control+V,Shift+Insert";*/ +/* kb-secondary-paste: "Control+v,Insert";*/ +/* kb-clear-line: "Control+w";*/ +/* kb-move-front: "Control+a";*/ +/* kb-move-end: "Control+e";*/ +/* kb-move-word-back: "Alt+b,Control+Left";*/ +/* kb-move-word-forward: "Alt+f,Control+Right";*/ +/* kb-move-char-back: "Left,Control+b";*/ +/* kb-move-char-forward: "Right,Control+f";*/ +/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/ +/* kb-remove-word-forward: "Control+Alt+d";*/ +/* kb-remove-char-forward: "Delete,Control+d";*/ +/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/ +/* kb-remove-to-eol: "Control+k";*/ +/* kb-remove-to-sol: "Control+u";*/ +/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/ +/* kb-accept-custom: "Control+Return";*/ +/* kb-accept-custom-alt: "Control+Shift+Return";*/ +/* kb-accept-alt: "Shift+Return";*/ +/* kb-delete-entry: "Shift+Delete";*/ +/* kb-mode-next: "Shift+Right,Control+Tab";*/ +/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/ +/* kb-mode-complete: "Control+l";*/ +/* kb-row-left: "Control+Page_Up";*/ +/* kb-row-right: "Control+Page_Down";*/ +/* kb-row-up: "Up,Control+p";*/ +/* kb-row-down: "Down,Control+n";*/ + kb-row-tab: "Control+space"; + kb-element-next: ""; +/* kb-element-prev: "ISO_Left_Tab";*/ +/* kb-page-prev: "Page_Up";*/ +/* kb-page-next: "Page_Down";*/ +/* kb-row-first: "Home,KP_Home";*/ +/* kb-row-last: "End,KP_End";*/ + kb-row-select: "Tab"; +/* kb-screenshot: "Alt+S";*/ +/* kb-ellipsize: "Alt+period";*/ +/* kb-toggle-case-sensitivity: "grave,dead_grave";*/ +/* kb-toggle-sort: "Alt+grave";*/ +/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/ +/* kb-custom-1: "Alt+1";*/ +/* kb-custom-2: "Alt+2";*/ +/* kb-custom-3: "Alt+3";*/ +/* kb-custom-4: "Alt+4";*/ +/* kb-custom-5: "Alt+5";*/ +/* kb-custom-6: "Alt+6";*/ +/* kb-custom-7: "Alt+7";*/ +/* kb-custom-8: "Alt+8";*/ +/* kb-custom-9: "Alt+9";*/ +/* kb-custom-10: "Alt+0";*/ +/* kb-custom-11: "Alt+exclam";*/ +/* kb-custom-12: "Alt+at";*/ +/* kb-custom-13: "Alt+numbersign";*/ +/* kb-custom-14: "Alt+dollar";*/ +/* kb-custom-15: "Alt+percent";*/ +/* kb-custom-16: "Alt+dead_circumflex";*/ +/* kb-custom-17: "Alt+ampersand";*/ +/* kb-custom-18: "Alt+asterisk";*/ +/* kb-custom-19: "Alt+parenleft";*/ +/* kb-select-1: "Super+1";*/ +/* kb-select-2: "Super+2";*/ +/* kb-select-3: "Super+3";*/ +/* kb-select-4: "Super+4";*/ +/* kb-select-5: "Super+5";*/ +/* kb-select-6: "Super+6";*/ +/* kb-select-7: "Super+7";*/ +/* kb-select-8: "Super+8";*/ +/* kb-select-9: "Super+9";*/ +/* kb-select-10: "Super+0";*/ +/* ml-row-left: "ScrollLeft";*/ +/* ml-row-right: "ScrollRight";*/ +/* ml-row-up: "ScrollUp";*/ +/* ml-row-down: "ScrollDown";*/ +/* me-select-entry: "MousePrimary";*/ +/* me-accept-entry: "MouseDPrimary";*/ +/* me-accept-custom: "Control+MouseDPrimary";*/ + timeout { + action: "kb-cancel"; + delay: 0; + } + filebrowser { + directories-first: true; + sorting-method: "name"; + } +} +@theme "/etc/xdg/rofi/launcher.rasi" diff --git a/modules/optionnal/desktop/config/etc/xdg/rofi/disconnect.rasi b/modules/optionnal/desktop/config/etc/xdg/rofi/disconnect.rasi new file mode 100644 index 0000000..884faec --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/rofi/disconnect.rasi @@ -0,0 +1,12 @@ +@import "launcher.rasi" +window { + width: 30%; + height: 280px; + margin: 0px; + location: center; + anchor: center; +} + +mainbox { + children: [inputbar,listview]; +} diff --git a/modules/optionnal/desktop/config/etc/xdg/rofi/launcher.rasi b/modules/optionnal/desktop/config/etc/xdg/rofi/launcher.rasi new file mode 100644 index 0000000..2c11398 --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/rofi/launcher.rasi @@ -0,0 +1,123 @@ +/** + * ROFI Color theme + * User: Beastie + * Copyright: GPLv3 + */ + +@import "/etc/xdg/rofi/colors.rasi" + +* { + background-color: @transparent; + text-color: @blue; + margin: 5px; + padding: 0px; + border: 0px; + font: "CaskaydiaCove Nerd Font Propo 12"; +} + +window { + width: 50%; + height: 50%; + margin: 0px; + location: center; + anchor: center; + border: 2px; + border-color: @overlay0; + background-color: rgba(48, 52, 70, 0.8); + border-radius: 10px; + //background-color: green; +} + +mainbox { + spacing: 0px; + border-radius: 10px; + children: [inputbar,mode-switcher,listview]; + background-color: transparent; +} + +/* Configure inputbar */ +inputbar { + background-color: transparent; + border: 1px; + border-color: @surface1; + border-radius: 10px; + children: [icon-current-entry,prompt,textbox-prompt-colon,entry,num-filtered-rows,textbox-num-sep,num-rows]; +} + +prompt, textbox-prompt-colon, entry, num-filtered-rows, textbox-num-sep, num-rows, icon-current-entry { + text-color: @blue; + vertical-align: 0.5; + background-color: transparent; +} + +icon-current-entry { + size: 1.5em; +} + +textbox-prompt-colon, textbox-num-sep { + expand: false; + str: "  "; +} + +textbox-num-sep { + str: "/"; +} + +entry { + placeholder: "Search"; + placeholder-color: transparent; +} + +/* Configure mode switcher */ +mode-switcher { + background-color: transparent; + border: 1px; + border-color: @surface1; + border-radius: 10px; +} + +button { + background-color: transparent; + margin: 2px; + text-color: @blue; +} + +button selected { + background-color: @blue; + text-color: @base; + border-radius: 10px; +} + +/* Configure listview */ +listview { + padding: 10px; + background-color: transparent; + border: 1px; + border-color: @surface1; + border-radius: 10px; + columns: 2; +} + +element { + background-color: transparent; + margin: 0px; +} + +element selected { + background-color: @blue; + border-radius: 10px; +} + +element-icon { + background-color: transparent; + size: 1.5em; +} + +element-text { + vertical-align: 0.5; + background-color: transparent; +} + +element-text selected { + text-color: @base; +} diff --git a/modules/optionnal/desktop/config/etc/xdg/scripts/update.sh b/modules/optionnal/desktop/config/etc/xdg/scripts/update.sh new file mode 100644 index 0000000..fa98d0a --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/scripts/update.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +cd ~/nixos-dotfiles || exit + +# Obtenir le hash actuel +current_hash=$(nix flake metadata --json 2>/dev/null | jq -r '.locks.nodes.nixpkgs.locked.rev') + +# Obtenir le hash le plus récent +latest_hash=$(nix flake metadata github:NixOS/nixpkgs/nixos-unstable --json | jq -r '.locked.rev') + +# Date du commit local +local_commit_date=$(nix flake metadata --json 2>/dev/null | jq -r '.locks.nodes.nixpkgs.locked.lastModified') +local_commit_date=$(date -d "@${local_commit_date}" "+%d/%m/%Y à %H:%M") + +if [ "$current_hash" != "$latest_hash" ]; then + # Nombre de commits de retard + maj_count=$(curl -s "https://api.github.com/repos/NixOS/nixpkgs/compare/${current_hash}...${latest_hash}" | jq -r '.ahead_by // 0' 2>/dev/null || echo "?") + + # Date du commit distant + remote_commit_date=$(curl -s https://api.github.com/repos/NixOS/nixpkgs/commits/c87b95e25065c028d31a94f06a62927d18763fdf | jq -r '.commit.author.date') + remote_commit_date=$(date -d "${remote_commit_date}" "+%d/%m/%Y à %H:%M") + printf '{"text": "%s ", "tooltip": "Commit distant : %s\\nCommit local : %s"}' "${maj_count}" "${remote_commit_date}" "${local_commit_date}" + # Compter les commits entre les deux +else + printf '{"text": "0 ", "tooltip": "Date du dernier commit :\\n%s"}' "${local_commit_date}" +fi diff --git a/modules/optionnal/desktop/config/etc/xdg/waybar/colors.css b/modules/optionnal/desktop/config/etc/xdg/waybar/colors.css new file mode 100644 index 0000000..c06b8fb --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/waybar/colors.css @@ -0,0 +1,26 @@ +@define-color rosewater #f2d5cf; +@define-color flamingo #eebebe; +@define-color pink #f4b8e4; +@define-color mauve #ca9ee6; +@define-color red #e78284; +@define-color maroon #ea999c; +@define-color peach #ef9f76; +@define-color yellow #e5c890; +@define-color green #a6d189; +@define-color teal #81c8be; +@define-color sky #99d1db; +@define-color sapphire #85c1dc; +@define-color blue #8caaee; +@define-color lavender #babbf1; +@define-color text #c6d0f5; +@define-color subtext1 #b5bfe2; +@define-color subtext0 #a5adce; +@define-color overlay2 #949cbb; +@define-color overlay1 #838ba7; +@define-color overlay0 #737994; +@define-color surface2 #626880; +@define-color surface1 #51576d; +@define-color surface0 #414559; +@define-color base #303446; +@define-color mantle #292c3c; +@define-color crust #232634; diff --git a/modules/optionnal/desktop/config/etc/xdg/waybar/config.jsonc b/modules/optionnal/desktop/config/etc/xdg/waybar/config.jsonc new file mode 100644 index 0000000..8944bf2 --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/waybar/config.jsonc @@ -0,0 +1,101 @@ +{ + "position": "top", + "reload_style_on_change": true, + "modules-left": [ + "custom/logo", + "cpu", + "memory", + "disk", + "network", + "pulseaudio", + ], + "modules-center": [ + "hyprland/workspaces" + ], + "modules-right": [ + "custom/maj", + "clock", + "tray" + ], + "custom/logo": { + "format": "{icon}", + "format-icons": { + "default": "  " + } + }, + "cpu": { + "format": "  {usage}% ", + "tooltip": true + }, + "memory": { + "format": "  {percentage}% ", + "tooltip": true, + "tooltip-format": "asd: {used:0.2f} G / {total:0.2f} G" + }, + "disk": { + "interval": 300, + "format": "  {percentage_free}% ", + "path": "/" + }, + "network": { + "format-wifi": " 󰤨 {essid} ", + "format-ethernet": "  {ipaddr} ", + "tooltip-format": " 󰅧 {bandwidthUpBytes} 󰅢 {bandwidthDownBytes}", + "format-linked": " 󱘖 {ifname} (No IP) ", + "format-disconnected": "  Disconnected ", + "format-alt": " 󰤨 {signalStrength}% ", + "interval": 1 + }, + "pulseaudio": { + "format": "{icon}{volume}% ", + "format-muted": " 󰖁 0% ", + "format-icons": { + "headphone": "  ", + "hands-free": "  ", + "headset": "  ", + "phone": "  ", + "portable": "  ", + "car": "  ", + "default": [ + "  ", + "  ", + "  " + ] + }, + "on-click-right": "pavucontrol -t 3", + "on-click": "pactl -- set-sink-mute 0 toggle", + "tooltip": false, + "tooltip-format": "{volume}%", + "scroll-step": 5.0, + }, + "hyprland/workspaces": { + "disable-scroll": false, + "all-outputs": false, + "on-click": "activate", + "persistent-workspaces": { + "HDMI-A-1": [1, 2, 3, 4], + "HDMI-A-2": [5, 6, 7, 8], + }, + "format": "{name}", + "format-icons": { + "default": "", + }, + }, + "custom/maj": { + "exec": "/etc/xdg/scripts/update.sh", + "interval": 300, + "return-type": "json", + "format": "{icon}{text}", + "format-icons": { + "default": "  " + } + }, + "clock": { + "format": "  {:%a %d %H:%M} ", + "tooltip-format": "{:%Y %B}\n{calendar}" + }, + "tray": { + "icon-size": 18, + "spacing": 6 + } +} diff --git a/modules/optionnal/desktop/config/etc/xdg/waybar/style.css b/modules/optionnal/desktop/config/etc/xdg/waybar/style.css new file mode 100644 index 0000000..b8b11f1 --- /dev/null +++ b/modules/optionnal/desktop/config/etc/xdg/waybar/style.css @@ -0,0 +1,116 @@ +@import "colors.css"; + +* { + /*font-family: "Font Awesome 6 Free Solid", "Font Awesome 6 Free Regular", "Font Awesome 6 Brands Regular", "CaskaydiaCove Nerd Font Propo";*/ + font-family: "CaskaydiaCove Nerd Font Propo"; + font-size: 16px; + font-weight: bold; + min-height: 0px; + padding: 0; + margin: 0; +} + +#waybar { + color: @text; + border: none; + box-shadow: none; + background-color: rgba(48, 52, 70, 0); +} + +#custom-logo, +#cpu, +#memory, +#disk, +#network, +#workspaces, +#custom-maj, +#pulseaudio, +#memory, +#clock, +#tray { + border-radius: 10px; + background-color: rgba(48, 52, 70, 0.8); + margin: 10px 10px 0px 10px; + border: @overlay0 2px solid; +} + +#custom-settings { + color: @pink; +} + +#custom-lockscreen { + color: @green; +} + +#workspaces { + padding: 0 5px; + min-width: 152px; +} + +#workspaces button { + background-color: @overlay0; + margin: 5px 5px; + border-radius: 10px; +} + +#workspaces button:hover, +#workspaces button.empty:hover, +#workspaces button.active:hover, +#workspaces button.visible:hover, +#workspaces button.urgent:hover { + background: @overlay2; + border: 0px solid @red; +} + +#workspaces button label { + color: @teal; + opacity: 0; + padding: 1px 6px 0px 6px; + transition: padding 0.2s; +} + +#workspaces button.visible label { + opacity: 1; + padding: 1px 20px; + transition: padding 0.2s; +} + +#workspaces button.empty { + background: @surface0; +} + +#workspaces button.active { + background: @overlay1; +} + +#workspaces button.visible { + background: @overlay0; +} + +#workspaces button.urgent { + background: @red; +} + +#network { + color: @pink; +} + +#pulseaudio { + color: @yellow; +} + +#cpu { + color: @blue; +} + +#memory { + color: @green; +} + +#clock { + color: @red; +} + +#tray { + padding: 0 8px 0 10px; +} diff --git a/modules/optionnal/desktop/config/qwerty-fr b/modules/optionnal/desktop/config/qwerty-fr new file mode 100644 index 0000000..c055ffb --- /dev/null +++ b/modules/optionnal/desktop/config/qwerty-fr @@ -0,0 +1,62 @@ +partial alphanumeric_keys +xkb_symbols "qwerty-fr" +{ + include "us(basic)" + include "level3(ralt_switch)" + + name[Group1]= "US keyboard with french symbols - AltGr combination"; + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [ 1, exclam, onesuperior, exclamdown ] }; + key { [ 2, at, twosuperior, dead_doubleacute ] }; + key { [ 3, numbersign, ecircumflex, Ecircumflex ] }; + key { [ 4, dollar, EuroSign, dead_currency ] }; // FIXME: dead_currency has a different mapping than the one we want for qwerty-fr. Need to define a custom dead key instead. See Windows layout for dead key definition. + key { [ 5, percent, dead_macron, dead_abovedot ] }; + key { [ 6, asciicircum, dead_circumflex, dead_caron ] }; + key { [ 7, ampersand, ucircumflex, Ucircumflex ] }; + key { [ 8, asterisk, icircumflex, Icircumflex ] }; + key { [ 9, parenleft, ocircumflex, Ocircumflex ] }; + key { [ 0, parenright, oslash, Oslash ] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ equal, plus, notequal, approxeq ] }; + + key { [ q, Q, acircumflex, Acircumflex ] }; + key { [ w, W, eacute, Eacute ] }; + key { [ e, E, egrave, Egrave ] }; + key { [ r, R, registered, copyright ] }; + key { [ t, T, thorn, THORN ] }; + key { [ y, Y, dead_invertedbreve, dead_breve ] }; + key { [ u, U, ugrave, Ugrave ] }; + key { [ i, I, igrave, Igrave ] }; + key { [ o, O, ograve, Ograve ] }; + key { [ p, P, oe, OE ] }; + key { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; + key { [ bracketright, braceright, guillemotright, rightdoublequotemark ] }; + + key { [ a, A, agrave, Agrave ] }; + key { [ s, S, ae, AE ] }; + key { [ d, D, ediaeresis, Ediaeresis ] }; + key { [ f, F, VoidSymbol, VoidSymbol ] }; + key { [ g, G, dead_greek, VoidSymbol ] }; // FIXME: dead_greek has a different mapping than the one we want for qwerty-fr. Need to define a custom dead key instead. See Windows layout for dead key definition. + key { [ h, H, ydiaeresis, Ydiaeresis ] }; + key { [ j, J, udiaeresis, Udiaeresis ] }; + key { [ k, K, idiaeresis, Idiaeresis ] }; + key { [ l, L, odiaeresis, Odiaeresis ] }; + key { [ semicolon, colon, dead_acute, dead_abovering ] }; + key { [ apostrophe, quotedbl, dead_grave, dead_diaeresis ] }; + key { [ backslash, bar, VoidSymbol, doublelowquotemark ] }; // „ + + key { [ less, greater, lessthanequal, greaterthanequal ] }; + key { [ z, Z, adiaeresis, Adiaeresis ] }; + key { [ x, X, multiply, division ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ v, V, VoidSymbol, VoidSymbol ] }; + key { [ b, B, ssharp, U1E9E ] }; // ß, ẞ (capital) + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, VoidSymbol, VoidSymbol ] }; + key { [ comma, less, dead_cedilla, dead_ogonek ] }; + key { [ period, greater, periodcentered, ellipsis ] }; // ., >, ·, … + key { [ slash, question, rightsinglequotemark, questiondown ] }; // /, ?, ’, ¿ + key { [ space, space, nobreakspace, 0x100202F ] }; // espace insécable fine + +}; diff --git a/modules/optionnal/desktop/i3.nix b/modules/optionnal/desktop/i3.nix new file mode 100644 index 0000000..e69de29 diff --git a/modules/optionnal/desktop/kitty.nix b/modules/optionnal/desktop/kitty.nix new file mode 100644 index 0000000..bad6734 --- /dev/null +++ b/modules/optionnal/desktop/kitty.nix @@ -0,0 +1,35 @@ +{ + pkgs, + ... +}: +{ + environment.systemPackages = [ + pkgs.kitty + pkgs.nitch + + ]; + environment = { + etc = { + "xdg/kitty".source = ./config/etc/xdg/kitty; + }; + variables = { + VISUAL = "nvim"; + BROWSER = "firefox"; + }; + }; + programs = { + starship.enable = true; + bash = { + promptInit = '' + [[ "$TERM" == "xterm-kitty" ]] && export TERM="xterm" + + [[ -f ${pkgs.nitch}/bin/nitch ]] && nitch + + if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then + hyprland --config /etc/xdg/hypr/hyprland.conf + fi + ''; + }; + }; + +} diff --git a/modules/optionnal/desktop/nvidia.nix b/modules/optionnal/desktop/nvidia.nix new file mode 100644 index 0000000..e69de29 diff --git a/modules/optionnal/desktop/packages.nix b/modules/optionnal/desktop/packages.nix new file mode 100644 index 0000000..5ddc275 --- /dev/null +++ b/modules/optionnal/desktop/packages.nix @@ -0,0 +1,32 @@ +{ + pkgs, + ... +}: +{ + environment.systemPackages = [ + pkgs.remmina + pkgs.mpv + pkgs.chromium + pkgs.firefox + pkgs.keepassxc + pkgs.nwg-look + pkgs.gimp + pkgs.teams-for-linux + pkgs.discord + pkgs.lxappearance + pkgs.libreoffice + pkgs.xfe + pkgs.catppuccin-gtk + pkgs.imagemagick + pkgs.gthumb + pkgs.papirus-icon-theme + pkgs.catppuccin-cursors + pkgs.catppuccin-gtk + ]; + fonts.packages = [ + pkgs.nerd-fonts.dejavu-sans-mono + pkgs.nerd-fonts.comic-shanns-mono + pkgs.nerd-fonts.roboto-mono + pkgs.nerd-fonts.caskaydia-cove + ]; +} diff --git a/modules/optionnal/desktop/picom.nix b/modules/optionnal/desktop/picom.nix new file mode 100644 index 0000000..e69de29 diff --git a/modules/optionnal/desktop/qwerty-fr.nix b/modules/optionnal/desktop/qwerty-fr.nix new file mode 100644 index 0000000..a87b1de --- /dev/null +++ b/modules/optionnal/desktop/qwerty-fr.nix @@ -0,0 +1,15 @@ +{ + ... +}: +{ + services.xserver = { + xkb = { + layout = "qwerty-fr"; + extraLayouts.qwerty-fr = { + description = "QWERTY avec symboles et diacritiques français "; + languages = [ "eng" ]; + symbolsFile = ./config/qwerty-fr; + }; + }; + }; +} diff --git a/modules/optionnal/desktop/rofi.nix b/modules/optionnal/desktop/rofi.nix new file mode 100644 index 0000000..2128e2d --- /dev/null +++ b/modules/optionnal/desktop/rofi.nix @@ -0,0 +1,83 @@ +{ + pkgs, + ... +}: +{ + environment = { + etc = { + "xdg/rofi".source = ./config/etc/xdg/rofi; + "xdg/scripts/wayland-disconnect.sh" = { + text = '' + #!/usr/bin/env bash + + selected=$(printf "Lock\0icon\x1fsystem-lock-screen + Update\0icon\x1fsystem-software-update + Shutdown\0icon\x1fsystem-shutdown + Reboot\0icon\x1fsystem-reboot + Exit hyprland\0icon\x1fsystem-log-out + Reload hyprland\0icon\x1fsystem-log-out" | ${pkgs.rofi-wayland}/bin/rofi -dmenu -show-icons -i -theme /etc/xdg/rofi/disconnect.rasi -p System) + + echo "$selected" + + case $selected in + "Lock") + ${pkgs.hyprlock}/bin/hyprlock + ;; + "Update") + kitty /usr/local/share/dotfiles/scripts/update.sh + ;; + "Shutdown") + systemctl poweroff + ;; + "Reboot") + reboot + ;; + "Exit hyprland") + hyprctl dispatch exit + ;; + "Reload hyprland") + hyprctl reload + ;; + esac + ''; + mode = "0755"; + }; + "xdg/scripts/wayland-mpv.sh" = { + text = '' + #!/usr/bin/env bash + + cd -- "$(dirname -- "$0")" || exit + + ## if not $1 + if [[ -z $1 ]] + then + _LINES=$(curl "http://10.0.0.1:2013" 2>/dev/null | sed -e "s|.*/dev/null | sed -e "s|.*