Compare commits
13 Commits
fa14034de4
...
326f12746e
| Author | SHA1 | Date | |
|---|---|---|---|
| 326f12746e | |||
| d511f424c1 | |||
| dc02202006 | |||
| d12e4bd4c8 | |||
| 130703a417 | |||
| daee183a83 | |||
| e5abaaca37 | |||
| 32fd6b1069 | |||
| df58ca7574 | |||
| 58ee5b1fd0 | |||
| 5e6d51f0c2 | |||
| 2a95d27e69 | |||
| a3b14c3b69 |
+809
-599
File diff suppressed because it is too large
Load Diff
+170
-12
@@ -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
|
||||||
|
}
|
||||||
Executable
+5
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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,6 +2,8 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./wayland.nix
|
./wayland.nix
|
||||||
|
./login-tuigreeter.nix
|
||||||
|
# ./login-lightdm.nix
|
||||||
];
|
];
|
||||||
# .. put any code here
|
# .. put any code here
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user