diff --git a/flake.lock b/flake.lock index 0d59a00..8eedf89 100644 --- a/flake.lock +++ b/flake.lock @@ -94,7 +94,7 @@ }, "flake-utils": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1731533236, @@ -447,6 +447,22 @@ } }, "nixpkgs_3": { + "locked": { + "lastModified": 1762363567, + "narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1759036355, "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", @@ -492,9 +508,29 @@ "home-manager": "home-manager", "hyprland": "hyprland", "nixpkgs": "nixpkgs_2", + "spicetify-nix": "spicetify-nix", "vicinae": "vicinae" } }, + "spicetify-nix": { + "inputs": { + "nixpkgs": "nixpkgs_3", + "systems": "systems_2" + }, + "locked": { + "lastModified": 1762718300, + "narHash": "sha256-oOQimZTaV1jCw0OBmmK2g7Rdj3E8YGVpkJYD32BWKRQ=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "c7175bd485ed5052df5075fcdde395b631316e94", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1689347949, @@ -525,10 +561,25 @@ "type": "github" } }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "vicinae": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_4" }, "locked": { "lastModified": 1761603305, diff --git a/flake.nix b/flake.nix index 98bdbdf..24f848d 100644 --- a/flake.nix +++ b/flake.nix @@ -25,11 +25,14 @@ ags.inputs.nixpkgs.follows = "nixpkgs"; ags.inputs.astal.follows = "astal"; + # Spicetify - Spotify customization + spicetify-nix.url = "github:Gerg-L/spicetify-nix"; + # Optional: Other useful inputs # nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; }; - outputs = { self, nixpkgs, home-manager, hyprland, vicinae, astal, ags, ... }@inputs: { + outputs = { self, nixpkgs, home-manager, hyprland, vicinae, astal, ags, spicetify-nix, ... }@inputs: { # NixOS configuration for your hostname(s) nixosConfigurations = { # Desktop PC configuration diff --git a/home/home.nix b/home/home.nix index 58088b4..f596f25 100644 --- a/home/home.nix +++ b/home/home.nix @@ -4,6 +4,7 @@ imports = [ ./hyprland.nix ./ags.nix + inputs.spicetify-nix.homeManagerModules.default ]; # Home Manager configuration for user-level dotfiles and applications @@ -67,6 +68,8 @@ wofi # App launcher rofi-bluetooth # Bluetooth menu networkmanagerapplet # WiFi manager applet for system tray + hyprlock # Screen locker for Hyprland + hypridle # Idle daemon for Hyprland (auto-lock) # rofi-wayland # Alternative launcher # Wayland utilities @@ -228,6 +231,91 @@ home.file.".config/waybar/config".source = ./waybar-config.json; home.file.".config/waybar/style.css".source = ./waybar-style.css; + # Hyprlock configuration + home.file.".config/hypr/hyprlock.conf".text = '' + # Hyprlock configuration + # Documentation: https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/ + + # General settings + general { + hide_cursor = true + ignore_empty_input = true + } + + # Background + background { + monitor = + path = screenshot # Use a blurred screenshot of current screen + blur_passes = 3 + blur_size = 8 + noise = 0.0117 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 + } + + # Input field + input-field { + monitor = + size = 250, 50 + outline_thickness = 3 + dots_size = 0.33 + dots_spacing = 0.15 + dots_center = true + + outer_color = rgba(4a7aa1ee) # Match your theme accent color + inner_color = rgba(050a0eff) # Match your theme background + font_color = rgb(cdd6f4) + fade_on_empty = true + + placeholder_text = Password... + + position = 0, -20 + halign = center + valign = center + } + + # Time + label { + monitor = + text = cmd[update:1000] echo "$(date +"%H:%M")" + color = rgba(cdd6f4ff) + font_size = 120 + font_family = FiraCode Nerd Font + + position = 0, 80 + halign = center + valign = center + } + + # Date + label { + monitor = + text = cmd[update:1000] echo "$(date +"%A, %B %d")" + color = rgba(cdd6f4ff) + font_size = 24 + font_family = FiraCode Nerd Font + + position = 0, -10 + halign = center + valign = center + } + + # User label + label { + monitor = + text = Hi there, $USER + color = rgba(cdd6f4ff) + font_size = 18 + font_family = FiraCode Nerd Font + + position = 0, -80 + halign = center + valign = center + } + ''; + # Screenshot script home.file.".local/bin/screenshot" = { source = ./scripts/screenshot.sh; @@ -242,6 +330,16 @@ # Flatpaks are managed in system/flatpak.nix + # Spicetify - Spotify customization with adblock + programs.spicetify = let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; + in { + enable = true; + enabledExtensions = with spicePkgs.extensions; [ + adblock + ]; + }; + # Let Home Manager manage itself programs.home-manager.enable = true; diff --git a/home/hyprland.nix b/home/hyprland.nix index 16eabca..50ce219 100644 --- a/home/hyprland.nix +++ b/home/hyprland.nix @@ -20,6 +20,9 @@ # "dunst" # Disabled - colorshell handles notifications "nm-applet --indicator" # WiFi manager in system tray "vicinae server" # Start Vicinae server + + # Lock screen after a short delay (let Hyprland initialize first) + "sleep 2 && hyprlock" ]; # Environment variables @@ -173,6 +176,9 @@ "$mod, Print, exec, $HOME/.local/bin/screenshot full" # Full screen "$mod SHIFT, Print, exec, $HOME/.local/bin/screenshot window" # Active window + # Lock screen + "$mod, L, exec, hyprlock" + # Scroll through workspaces "$mod, mouse_down, workspace, e+1" "$mod, mouse_up, workspace, e-1" diff --git a/home/hyprlock.conf b/home/hyprlock.conf new file mode 100644 index 0000000..44bd478 --- /dev/null +++ b/home/hyprlock.conf @@ -0,0 +1,82 @@ +# Hyprlock configuration +# Documentation: https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/ + +# General settings +general { + grace = 3 # Seconds before lock screen is shown + hide_cursor = true + ignore_empty_input = true +} + +# Background +background { + monitor = + path = screenshot # Use a blurred screenshot of current screen + blur_passes = 3 + blur_size = 8 + noise = 0.0117 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + +# Input field +input-field { + monitor = + size = 250, 50 + outline_thickness = 3 + dots_size = 0.33 + dots_spacing = 0.15 + dots_center = true + + outer_color = rgba(4a7aa1ee) # Match your theme accent color + inner_color = rgba(050a0eff) # Match your theme background + font_color = rgb(cdd6f4) + fade_on_empty = true + + placeholder_text = Password... + + position = 0, -20 + halign = center + valign = center +} + +# Time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%H:%M")" + color = rgba(cdd6f4ff) + font_size = 120 + font_family = FiraCode Nerd Font + + position = 0, 80 + halign = center + valign = center +} + +# Date +label { + monitor = + text = cmd[update:1000] echo "$(date +"%A, %B %d")" + color = rgba(cdd6f4ff) + font_size = 24 + font_family = FiraCode Nerd Font + + position = 0, -10 + halign = center + valign = center +} + +# User label +label { + monitor = + text = Hi there, $USER + color = rgba(cdd6f4ff) + font_size = 18 + font_family = FiraCode Nerd Font + + position = 0, -80 + halign = center + valign = center +} diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index 53384ca..15f611e 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -11,18 +11,24 @@ networking.hostName = "zeph-desktop"; - # Configure monitors for SDDM (display manager) - # This ensures the login screen appears on the 1440p monitor + # Configure monitors for login screen (display manager) services.displayManager.sddm.settings = { General = { DisplayServer = "wayland"; }; + + # Wayland-specific settings + Wayland = { + SessionDir = "/run/current-system/sw/share/wayland-sessions"; + CompositorCommand = "${pkgs.hyprland}/bin/Hyprland -c /etc/sddm/hyprland.conf"; + }; }; # Create a Hyprland config for SDDM to set monitor order + # DP-2 (1440p 165Hz) is primary on the left, DP-1 (4K 60Hz) is secondary on the right environment.etc."sddm/hyprland.conf".text = '' monitor=DP-2,2560x1440@165,0x0,1 - monitor=DP-1,3840x2160@60,2560x0,1 + monitor=DP-1,3840x2160@60,2560x0,1.5 ''; # Desktop-specific packages (gaming, streaming, etc.) @@ -39,6 +45,6 @@ ]; # Gaming support (uncomment if needed) - # programs.steam.enable = true; - # programs.gamemode.enable = true; + programs.steam.enable = true; + programs.gamemode.enable = true; } diff --git a/system/common.nix b/system/common.nix index 048ffec..f49726d 100644 --- a/system/common.nix +++ b/system/common.nix @@ -31,11 +31,22 @@ # Exclude xterm (we use alacritty instead) services.xserver.excludePackages = [ pkgs.xterm ]; - # Display manager - SDDM with Wayland support - services.displayManager.sddm = { + # PAM service for hyprlock (required for hyprlock to work) + security.pam.services.hyprlock = {}; + + # Display manager - greetd with autologin to Hyprland + services.greetd = { enable = true; - wayland.enable = true; + settings.default_session = { + command = "Hyprland"; + user = "zeph"; + }; }; + + # Environment for greeter + environment.etc."greetd/environments".text = '' + Hyprland + ''; # Fonts (shared across all machines) fonts.packages = with pkgs; [ @@ -104,7 +115,7 @@ enable32Bit = true; }; - # System-wide packages + # System-wide packages environment.systemPackages = with pkgs; [ vim wget @@ -114,6 +125,8 @@ neofetch unzip zip + # Steam (system-wide) + steam ]; # Enable flakes diff --git a/system/sddm/theme.conf b/system/sddm/theme.conf new file mode 100644 index 0000000..f64e3ab --- /dev/null +++ b/system/sddm/theme.conf @@ -0,0 +1,19 @@ +[General] +# Background - use solid color since we don't have a specific wallpaper yet +background=#050a0e +backgroundMode=fill + +# Colors matching your dark pale blue theme +primaryColor=#4a7aa1 +accentColor=#2a5d82 +backgroundColor=#050a0e + +# Font +font=FiraCode Nerd Font +fontSize=12 + +# Layout +showUsersByDefault=true + +# Blur effect +blurRadius=50