Compare commits

...

13 Commits

Author SHA1 Message Date
henrov 326f12746e disabling autocd 2026-03-07 23:05:07 +01:00
henrov d511f424c1 Working on terminal 2026-03-07 22:59:09 +01:00
henrov dc02202006 Working on terminal 2026-03-07 22:56:53 +01:00
henrov d12e4bd4c8 Working on terminal 2026-03-07 22:53:44 +01:00
henrov 130703a417 Adding terminal + starship + zsh 2026-03-07 22:53:02 +01:00
henrov daee183a83 Added tuigreeter 2026-03-07 22:42:18 +01:00
henrov e5abaaca37 Renewed binds + wofi 2026-03-07 22:32:19 +01:00
henrov 32fd6b1069 Renewed binds 2026-03-07 22:29:10 +01:00
henrov df58ca7574 Renewed binds 2026-03-07 22:27:49 +01:00
henrov 58ee5b1fd0 Renewed binds 2026-03-07 22:25:49 +01:00
henrov 5e6d51f0c2 Update hyprland.nix 2026-03-07 22:23:27 +01:00
henrov 2a95d27e69 Worked on hyprland.conf 2026-03-07 22:19:57 +01:00
henrov a3b14c3b69 Added wofi.nix 2026-03-07 22:10:20 +01:00
26 changed files with 1475 additions and 627 deletions
+806 -596
View File
File diff suppressed because it is too large Load Diff
+170 -12
View File
@@ -546,7 +546,19 @@ This is top file of this level which contains just an import statement for all r
** =generated/hyprland/hyprland.nix= ** =generated/hyprland/hyprland.nix=
The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure. The ./generated/top.nix file acts as an anchor or entry point for the entire chain of imports in the pyramid structure.
#+BEGIN_SRC nix :tangle generated/hyprland/hyprland.nix :noweb tangle :mkdirp yes :eval never-html #+BEGIN_SRC nix :tangle generated/hyprland/hyprland.nix :noweb tangle :mkdirp yes :eval never-html
{ config, pkgs, lib, user, inputs, flakeRoot,... }: {
config,
pkgs,
lib,
user,
inputs,
flakeRoot,
...
}:
let
hyprlandConf = builtins.readFile (flakeRoot + "/assets/hyprland/conf/hyprland.conf");
userConfig = import (flakeRoot + "/assets/flake/users/henrov.nix");
in
{ {
# Nix settings to use Hyprland's cache for packages # Nix settings to use Hyprland's cache for packages
nix.settings = { nix.settings = {
@@ -563,10 +575,10 @@ The ./generated/top.nix file acts as an anchor or entry point for the entire cha
# Hyprland-specific Home Manager configurations # Hyprland-specific Home Manager configurations
home-manager.users.${user.username} = { home-manager.users.${user.username} = {
wayland.windowManager.hyprland = { home.stateVersion = userConfig.stateVersion;
enable = true; home.username = userConfig.username;
settings = { }; home.homeDirectory = userConfig.homeDirectory;
}; xdg.configFile."hypr/hyprland.conf".text = hyprlandConf;
}; };
} }
#+END_SRC #+END_SRC
@@ -629,11 +641,32 @@ This is top file of this level which contains just an import statement for all r
{ {
imports = [ imports = [
./wayland.nix ./wayland.nix
./login-tuigreeter.nix
# ./login-lightdm.nix
]; ];
# .. put any code here # .. put any code here
} }
#+END_SRC #+END_SRC
** =generated/system/core/login-tuigreeter.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/core/login-tuigreeter.nix :noweb tangle :mkdirp yes :eval never-html
{ pkgs, user, ... } :
{
environment.systemPackages = with pkgs; [
tuigreet
];
services.greetd = {
enable = true;
settings = {
default_session = {
command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a %h | %F'";
};
};
};
}
#+END_SRC
** =generated/system/core/wayland.nix= ** =generated/system/core/wayland.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/core/wayland.nix :noweb tangle :mkdirp yes :eval never-html #+BEGIN_SRC nix :tangle generated/system/core/wayland.nix :noweb tangle :mkdirp yes :eval never-html
@@ -741,21 +774,26 @@ This is top file of this level which contains just an import statement for all r
** =generated/hyprland/keyboard_binds/top.nix= ** =generated/hyprland/keyboard_binds/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/hyprland/keyboard_binds/top.nix :noweb tangle :mkdirp yes :eval never-html #+BEGIN_SRC nix :tangle generated/hyprland/keyboard_binds/top.nix :noweb tangle :mkdirp yes :eval never-html
{ config, pkgs, lib, user, inputs, flakeRoot, ... }: {
config,
pkgs,
lib,
user,
inputs,
flakeRoot,
...
}:
let let
bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/bindings.conf"); bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/bindings.conf");
configFile = pkgs.writeText "hyprland.conf" bindingsContent;
in in
{ {
# Home Manager configurations must be nested under the user
home-manager.users.${user.username} = { home-manager.users.${user.username} = {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
config = configFile; extraConfig = bindingsContent;
}; };
}; };
} }
#+END_SRC #+END_SRC
** =generated/hyprland/notifications/top.nix= ** =generated/hyprland/notifications/top.nix=
@@ -901,12 +939,48 @@ This is top file of this level which contains just an import statement for all r
{ config, pkgs, lib, user, inputs, flakeRoot,... }: { config, pkgs, lib, user, inputs, flakeRoot,... }:
{ {
imports = [ imports = [
# No subfolders to import ./wofi.nix
]; ];
# .. put any code here # .. put any code here
} }
#+END_SRC #+END_SRC
** =generated/mangowc/task_launcher/wofi.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/task_launcher/wofi.nix :noweb tangle :mkdirp yes :eval never-html
{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
programs.wofi = {
enable = true;
wrapGtkApps = true; # Required for GTK theming
extraPackages = with pkgs; [ wofi ];
};
# Catppuccin theme for Wofi
home-manager.users.${user.username} = {
xdg.configFile."wofi/config".text = ''
dark
width=500
height=800
lines=10
columns=1
cache_dir=${config.xdg.dataHome}/wofi
allow_images=true
allow_markup=true
show_drun=true
'';
xdg.configFile."wofi/style.css".source = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "wofi";
rev = "main";
sha256 = "sha256-0000000000000000000000000000000000000000000000000000"; # Update with the correct hash
file = "mocha.css"; # or latte/frappe/macchiato
};
};
}
#+END_SRC
** =generated/mangowc/task_window_workspace_switcher/top.nix= ** =generated/mangowc/task_window_workspace_switcher/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/mangowc/task_window_workspace_switcher/top.nix :noweb tangle :mkdirp yes :eval never-html #+BEGIN_SRC nix :tangle generated/mangowc/task_window_workspace_switcher/top.nix :noweb tangle :mkdirp yes :eval never-html
@@ -997,12 +1071,96 @@ This is top file of this level which contains just an import statement for all r
{ config, pkgs, lib, user, inputs, flakeRoot,... }: { config, pkgs, lib, user, inputs, flakeRoot,... }:
{ {
imports = [ imports = [
# No subfolders to import ./kitty.nix
./starship.nix
./zsh.nix
]; ];
# .. put any code here # .. put any code here
} }
#+END_SRC #+END_SRC
** =generated/system/applications/terminal_shell/kitty.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/applications/terminal_shell/kitty.nix :noweb tangle :mkdirp yes :eval never-html
{ config, pkgs, lib, user, inputs, flakeRoot, ... }:
{
# NixOS-level packages (optional, if you want Kitty installed system-wide)
environment.systemPackages = with pkgs; [ kitty ];
# Home Manager configuration for Kitty
home-manager.users.${user.username} = {
programs.kitty = {
enable = true;
settings = {
font_family = "FiraCode Nerd Font Mono";
include = [ "${flakeRoot}/assets/kitty/themes/Catppuccin-Mocha.conf" ];
background_opacity = 0.60;
dynamic_background_opacity = true;
};
};
};
}
#+END_SRC
** =generated/system/applications/terminal_shell/starship.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/applications/terminal_shell/starship.nix :noweb tangle :mkdirp yes :eval never-html
{ config, pkgs, lib, user, inputs, flakeRoot, ... }:
{
# Install Starship (optional, system-wide)
environment.systemPackages = with pkgs; [ starship ];
# Home Manager configuration for Starship
home-manager.users.${user.username} = {
programs.starship = {
enable = true;
# Enable for specific shells (e.g., bash, zsh, fish)
settings = {
# Your Starship config here (e.g., theme, modules)
addNewline = false;
};
# Enable shell integration (per-shell)
shellIntegration = {
bash.enable = true;
zsh.enable = true;
fish.enable = true;
};
};
};
}
#+END_SRC
** =generated/system/applications/terminal_shell/zsh.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/applications/terminal_shell/zsh.nix :noweb tangle :mkdirp yes :eval never-html
{ config, pkgs, lib, ... }:
{
programs.zsh = {
enable = true;
enableCompletion = true;
#autocd = true;
dotDir = "${config.xdg.configHome}/zsh";
oh-my-zsh = {
enable = true;
theme = "";
plugins = [
"git"
"sudo"
"extract"
"colored-man-pages"
"command-not-found"
"history"
"docker"
"kubectl"
];
};
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
};
}
#+END_SRC
** =generated/system/development/databases/top.nix= ** =generated/system/development/databases/top.nix=
This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder This is top file of this level which contains just an import statement for all relevant files and/or the subfolder in this folder
#+BEGIN_SRC nix :tangle generated/system/development/databases/top.nix :noweb tangle :mkdirp yes :eval never-html #+BEGIN_SRC nix :tangle generated/system/development/databases/top.nix :noweb tangle :mkdirp yes :eval never-html
@@ -0,0 +1,12 @@
# ./assets/conf/desktop/hypr/animations.conf
animations {
enabled = yes
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
@@ -0,0 +1,33 @@
# Keyboard and mouse settings
input {
kb_layout = us
kb_options = ctrl:nocaps
sensitivity = -0.5
accel_profile = adaptive
scroll_factor = 0.5
}
# Scrolling modifier settings
input {
scroll_main_mod = alt
scroll_main_mod_invert = no
scroll_per_border = yes
}
# Touchpad settings (applies to all touchpads)
input:touchpad:* {
natural_scroll = yes
scroll_factor = 0.5
}
# Focus settings
focus {
follow_mouse = yes
new_windows = smart
}
# Miscellaneous settings
misc {
resize_step = 10 10
anim_resize_friction = 0.1
}
+5
View File
@@ -0,0 +1,5 @@
exec-once = dbus-update-activation-environment --systemd --all
exec-once = uwsm app -- waybar
exec-once = hypridle
exec-once = hyprpolkitagent
exec-once = systemd-run --user --scope --unit=elephant elephant
@@ -0,0 +1,16 @@
general {
lock_cmd = hyprlock
after_sleep_cmd = hyprctl dispatch dpms on
ignore_dbus_inhibit = false
}
listener {
timeout = 600
on-timeout = hyprlock
}
listener {
timeout = 900
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
@@ -0,0 +1,23 @@
source = ./variables.conf
# source = ./behaviour.conf
# source = ./layout.conf
source = ./animations.conf
source = ./layer-rules.conf
# source = ./window-rules.conf
source = ./monitor-rules.conf
# source = ./workspace-rules.conf
source = ./bindings.conf
source = ./exec-once.conf
general {
gaps_in = 2
gaps_out = 4
border_size = 2
# Gradient syntax: color color angle (e.g. 45deg). :contentReference[oaicite:5]{index=5}
col.active_border = $blue $green 45deg
col.inactive_border = $inactive
layout = scrolling
resize_on_border = true
extend_border_grab_area = 20 # Makes it easier to "grab" the edge
}
@@ -0,0 +1,32 @@
# ~/.config/hypr/hyprlock.conf
general {
grace = 2
ignore_empty_input = true
}
background {
path = ~/.config/hypr/lock.png
blur_passes = 2
blur_size = 6
}
input-field {
size = 320, 60
outline_thickness = 2
dots_size = 0.25
dots_spacing = 0.20
fade_on_empty = true
placeholder_text = "Password"
position = 0, -120
halign = center
valign = center
}
label {
text = $TIME
font_size = 72
position = 0, 120
halign = center
valign = center
}
@@ -0,0 +1,6 @@
layerrule = blur on, ignore_alpha 1, match:namespace waybar
layerrule = xray 1, match:namespace waybar
layerrule = blur on, ignore_alpha 1, match:namespace walker
layerrule = xray 1, match:namespace walker
layerrule = blur on, ignore_alpha 1, match:namespace swaync-control-center
layerrule = blur on, ignore_alpha 1, match:namespace swaync-notification-window
+24
View File
@@ -0,0 +1,24 @@
general {
gaps_in = 2
gaps_out = 4
border_size = 2
col.active_border = rgba($blue) rgba($green) 45deg
col.inactive_border = rgba($inactive)
layout = dwindle
resize_on_border = yes
border_grab_modifier = 20
disable_hyprland_logo = no # Use 'no' instead of 'false'
focus_on_activate = yes
}
decoration {
rounding = 5
blur = yes
blur_size = 8
blur_passes = 3
blur_new_optimizations = yes
blur_exclude = fullscreen
drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
}
@@ -0,0 +1,2 @@
# Default portable monitor rule
monitor=DP-1,3840x1080@144,1920x0,1
@@ -0,0 +1,6 @@
# Colors (Hyprland "col" values commonly use rgba(aarrggbb)-style hex)
# See Hyprland variable / type docs for color formats & bools. :contentReference[oaicite:2]{index=2}
$base = rgba(1e1e2eff)
$inactive = rgba(595959aa)
$blue = rgba(33ccffee)
$green = rgba(00ff99ee)
@@ -0,0 +1,10 @@
# Floating and centering nm-connection-editor
windowrule = float, nm-connection-editor
windowrule = move center, nm-connection-editor
windowrule = size 900 700, nm-connection-editor
# Center all new windows by default
windowrule = center, ^(.*)
# Example: Float specific apps (uncomment to use)
# windowrule = float, ^(pavucontrol)$
@@ -0,0 +1,30 @@
# Workspace definitions (modern syntax)
workspace = 1
workspace = 2
workspace = 3
workspace = 4
workspace = 5
# Auto-launch apps on specific workspaces (use `exec` with `workspace` rule)
exec-once = kitty, workspace 1
exec-once = flatpak run app.betterbird.zen, workspace 2
exec-once = zen, workspace 3
# Force a specific layout for a workspace
workspace 1, layout:dwindle
workspace 2, layout:master
workspace 3, layout:msg
# Set workspace persistence
workspace 1, persistent:true
workspace 2, persistent:true
# Move specific apps to workspaces automatically
windowrule = move workspace 1, ^(kitty)$
windowrule = move workspace 2, ^(zen)$
windowrule = move workspace 3, ^(libreoffice)$
# Workspace behavior
workspace {
cycle_move_empty = no
}
+17 -5
View File
@@ -1,4 +1,16 @@
{ config, pkgs, lib, user, inputs, flakeRoot,... }: {
config,
pkgs,
lib,
user,
inputs,
flakeRoot,
...
}:
let
hyprlandConf = builtins.readFile (flakeRoot + "/assets/hyprland/conf/hyprland.conf");
userConfig = import (flakeRoot + "/assets/flake/users/henrov.nix");
in
{ {
# Nix settings to use Hyprland's cache for packages # Nix settings to use Hyprland's cache for packages
nix.settings = { nix.settings = {
@@ -15,9 +27,9 @@
# Hyprland-specific Home Manager configurations # Hyprland-specific Home Manager configurations
home-manager.users.${user.username} = { home-manager.users.${user.username} = {
wayland.windowManager.hyprland = { home.stateVersion = userConfig.stateVersion;
enable = true; home.username = userConfig.username;
settings = { }; home.homeDirectory = userConfig.homeDirectory;
}; xdg.configFile."hypr/hyprland.conf".text = hyprlandConf;
}; };
} }
@@ -9,13 +9,9 @@
}: }:
let let
bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/bindings.conf"); bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/bindings.conf");
userConfig = import (flakeRoot + "/assets/flake/users/henrov.nix");
in in
{ {
home-manager.users.${user.username} = { home-manager.users.${user.username} = {
home.stateVersion = userConfig.stateVersion;
home.username = userConfig.username;
home.homeDirectory = userConfig.homeDirectory;
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
extraConfig = bindingsContent; extraConfig = bindingsContent;
@@ -1,7 +1,24 @@
{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{ {
imports = [ config,
# No subfolders to import pkgs,
]; lib,
# .. put any code here user,
inputs,
flakeRoot,
...
}:
let
bindingsContent = builtins.readFile (flakeRoot + "/assets/hyprland/conf/bindings.conf");
userConfig = import (flakeRoot + "/assets/flake/users/henrov.nix");
in
{
home-manager.users.${user.username} = {
home.stateVersion = userConfig.stateVersion;
home.username = userConfig.username;
home.homeDirectory = userConfig.homeDirectory;
wayland.windowManager.hyprland = {
enable = true;
extraConfig = bindingsContent;
};
};
} }
@@ -1,7 +1,7 @@
{ config, pkgs, lib, user, inputs, flakeRoot,... }: { config, pkgs, lib, user, inputs, flakeRoot,... }:
{ {
imports = [ imports = [
# No subfolders to import ./wofi.nix
]; ];
# .. put any code here # .. put any code here
} }
@@ -0,0 +1,31 @@
{ config, pkgs, lib, user, inputs, flakeRoot,... }:
{
programs.wofi = {
enable = true;
wrapGtkApps = true; # Required for GTK theming
extraPackages = with pkgs; [ wofi ];
};
# Catppuccin theme for Wofi
home-manager.users.${user.username} = {
xdg.configFile."wofi/config".text = ''
dark
width=500
height=800
lines=10
columns=1
cache_dir=${config.xdg.dataHome}/wofi
allow_images=true
allow_markup=true
show_drun=true
'';
xdg.configFile."wofi/style.css".source = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "wofi";
rev = "main";
sha256 = "sha256-0000000000000000000000000000000000000000000000000000"; # Update with the correct hash
file = "mocha.css"; # or latte/frappe/macchiato
};
};
}
@@ -0,0 +1,18 @@
{ config, pkgs, lib, user, inputs, flakeRoot, ... }:
{
# NixOS-level packages (optional, if you want Kitty installed system-wide)
environment.systemPackages = with pkgs; [ kitty ];
# Home Manager configuration for Kitty
home-manager.users.${user.username} = {
programs.kitty = {
enable = true;
settings = {
font_family = "FiraCode Nerd Font Mono";
include = [ "${flakeRoot}/assets/kitty/themes/Catppuccin-Mocha.conf" ];
background_opacity = 0.60;
dynamic_background_opacity = true;
};
};
};
}
@@ -0,0 +1,23 @@
{ config, pkgs, lib, user, inputs, flakeRoot, ... }:
{
# Install Starship (optional, system-wide)
environment.systemPackages = with pkgs; [ starship ];
# Home Manager configuration for Starship
home-manager.users.${user.username} = {
programs.starship = {
enable = true;
# Enable for specific shells (e.g., bash, zsh, fish)
settings = {
# Your Starship config here (e.g., theme, modules)
addNewline = false;
};
# Enable shell integration (per-shell)
shellIntegration = {
bash.enable = true;
zsh.enable = true;
fish.enable = true;
};
};
};
}
@@ -1,7 +1,9 @@
{ config, pkgs, lib, user, inputs, flakeRoot,... }: { config, pkgs, lib, user, inputs, flakeRoot,... }:
{ {
imports = [ imports = [
# No subfolders to import ./kitty.nix
./starship.nix
./zsh.nix
]; ];
# .. put any code here # .. put any code here
} }
@@ -0,0 +1,30 @@
{
config,
pkgs,
lib,
...
}:
{
programs.zsh = {
enable = true;
enableCompletion = true;
#autocd = true;
dotDir = "${config.xdg.configHome}/zsh";
oh-my-zsh = {
enable = true;
theme = "";
plugins = [
"git"
"sudo"
"extract"
"colored-man-pages"
"command-not-found"
"history"
"docker"
"kubectl"
];
};
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
};
}
@@ -0,0 +1,136 @@
{ config, pkgs, lib, ... }:
let
lightdmConf = builtins.readFile ../../assets/conf/core/lightdm.conf;
lockPng = ../../assets/lockscreen.png;
greeterConfPath = ../../assets/conf/core/lightdm-gtk-greeter.conf;
greeterRaw = builtins.readFile greeterConfPath;
# Extract "key = value" from the greeter conf.
# Returns null if not found.
getIniValue = key:
let
lines = lib.splitString "\n" greeterRaw;
# Captures the value part (group 0) from a single line.
# We match line-by-line because Nix regex does NOT support PCRE flags like (?s).
m =
let
ms = builtins.filter (x: x != null) (map (line:
builtins.match
("^[[:space:]]*" + key + "[[:space:]]*=[[:space:]]*([^#;]+).*$")
line
) lines);
in
if ms == [] then null else builtins.elemAt ms 0;
in
if m == null then null else lib.strings.trim (builtins.elemAt m 0);
# In your greeter.conf these are *package keys*, not theme names.
themePkgKey = getIniValue "theme-name";
iconPkgKey = getIniValue "icon-theme-name";
cursorPkgKey = getIniValue "cursor-theme-name";
cursorSizeStr = getIniValue "cursor-theme-size";
cursorSize =
if cursorSizeStr == null then null
else lib.toInt (lib.strings.trim cursorSizeStr);
# Map package-keys (from greeter.conf) -> { package, name }
#
# IMPORTANT:
# - "name" must be the real theme/icon/cursor NAME as seen under share/themes or share/icons.
# - "package" is the Nixpkgs derivation providing it.
pkgMap = {
catppuccinThemePkg = {
package = pkgs.catppuccin-gtk.override {
accents = [ "blue" ];
variant = "mocha";
size = "standard";
tweaks = [ ];
};
name = "Catppuccin-Mocha-Standard-Blue-Dark";
};
papirus-icon-theme = {
package = pkgs.papirus-icon-theme;
name = "Papirus-Dark";
};
bibata-cursors = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
};
};
pick = key:
if key == null then
throw "lightdm: missing required key in ${toString greeterConfPath}"
else if !(pkgMap ? "${key}") then
throw "lightdm: unknown package key '${key}' in ${toString greeterConfPath}. Known keys: ${lib.concatStringsSep ", " (builtins.attrNames pkgMap)}"
else
pkgMap."${key}";
themeSel = pick themePkgKey;
iconSel = pick iconPkgKey;
cursorSel = pick cursorPkgKey;
# Rewrite greeter.conf so LightDM sees REAL names, not package keys.
# Also force background to lockPng.
greeterFixed =
''
[greeter]
theme-name = ${themeSel.name}
icon-theme-name = ${iconSel.name}
cursor-theme-name = ${cursorSel.name}
${lib.optionalString (cursorSize != null) "cursor-theme-size = ${toString cursorSize}"}
''
+ "\n"
+ greeterRaw;
in
{
services.greetd.enable = false;
services.xserver = {
enable = true;
desktopManager.xterm.enable = false;
displayManager.lightdm = {
enable = true;
background = lockPng;
greeters.gtk = {
enable = true;
theme = {
name = themeSel.name;
package = themeSel.package;
};
iconTheme = {
name = iconSel.name;
package = iconSel.package;
};
cursorTheme = {
name = cursorSel.name;
package = cursorSel.package;
} // lib.optionalAttrs (cursorSize != null) {
size = cursorSize;
};
# This includes your (rewritten) greeter config.
extraConfig = greeterFixed;
};
extraConfig = lightdmConf;
};
};
programs.hyprland.enable = true;
# Optional: make them available system-wide as well
environment.systemPackages = [
themeSel.package
iconSel.package
cursorSel.package
];
}
@@ -0,0 +1,14 @@
{ pkgs, user, ... } :
{
environment.systemPackages = with pkgs; [
tuigreet
];
services.greetd = {
enable = true;
settings = {
default_session = {
command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a %h | %F'";
};
};
};
}
+2
View File
@@ -2,6 +2,8 @@
{ {
imports = [ imports = [
./wayland.nix ./wayland.nix
./login-tuigreeter.nix
# ./login-lightdm.nix
]; ];
# .. put any code here # .. put any code here
} }