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