This commit is contained in:
zoey 2025-05-28 19:10:50 -04:00
parent 99745a7f02
commit 7972325396
Signed by: zoey
GPG key ID: 81FB9FECDD6A33E2
17 changed files with 839 additions and 869 deletions

View file

@ -14,7 +14,8 @@ in {
enable = mkBoolOpt false "Enable Anyrun"; enable = mkBoolOpt false "Enable Anyrun";
}; };
config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { config =
mkIf (cfg.enable && !pkgs.stdenv.isDarwin) {
}; };
# programs.anyrun = { # programs.anyrun = {
# enable = true; # enable = true;

View file

@ -60,7 +60,8 @@ in {
}; };
# Linux-specific packages (Qt theming) # Linux-specific packages (Qt theming)
home.packages = with pkgs; lib.mkIf (!pkgs.stdenv.isDarwin) [ home.packages = with pkgs;
lib.mkIf (!pkgs.stdenv.isDarwin) [
qt5.qttools qt5.qttools
qt6Packages.qtstyleplugin-kvantum qt6Packages.qtstyleplugin-kvantum
libsForQt5.qtstyleplugin-kvantum libsForQt5.qtstyleplugin-kvantum

View file

@ -0,0 +1,32 @@
{
lib,
config,
pkgs,
...
}:
with lib;
with lib.custom; let
cfg = config.services.wallpaper;
mkService = recursiveUpdate {
Unit.PartOf = ["graphical-session.target"];
Unit.After = ["graphical-session.target"];
Install.WantedBy = ["graphical-session.target"];
};
in {
options.services.wallpaper = with types; {
enable = mkBoolOpt false "Enable MPD (Music Player Daemon)";
};
config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) {
systemd.user.services = {
swaybg = mkService {
Unit.Description = "Wallpaper Chooser";
Service = {
ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}";
Restart = "always";
};
};
};
};
}

View file

@ -73,7 +73,8 @@ in {
shellAliases = import ../aliases.nix {inherit pkgs lib config;}; shellAliases = import ../aliases.nix {inherit pkgs lib config;};
}; };
home.packages = with pkgs; [ home.packages = with pkgs;
[
gnumake gnumake
# Runs programs without installing them # Runs programs without installing them
comma comma
@ -139,9 +140,14 @@ in {
qrencode qrencode
unzip unzip
] ++ (if !pkgs.stdenv.isDarwin then [ ]
++ (
if !pkgs.stdenv.isDarwin
then [
hcxdumptool hcxdumptool
hashcat hashcat
] else []); ]
else []
);
}; };
} }

View file

@ -46,7 +46,8 @@ in {
programs.carapace.enable = true; programs.carapace.enable = true;
programs.carapace.enableNushellIntegration = true; programs.carapace.enableNushellIntegration = true;
home.packages = with pkgs; [ home.packages = with pkgs;
[
gnumake gnumake
comma comma
ripgrep ripgrep
@ -73,9 +74,14 @@ in {
figlet figlet
qrencode qrencode
unzip unzip
] ++ (if !pkgs.stdenv.isDarwin then [ ]
++ (
if !pkgs.stdenv.isDarwin
then [
hcxdumptool hcxdumptool
hashcat hashcat
] else []); ]
else []
);
}; };
} }

View file

@ -80,7 +80,8 @@ in {
shellAliases = import ../aliases.nix {inherit pkgs lib config;}; shellAliases = import ../aliases.nix {inherit pkgs lib config;};
}; };
home.packages = with pkgs; [ home.packages = with pkgs;
[
gnumake gnumake
# Runs programs without installing them # Runs programs without installing them
comma comma
@ -146,9 +147,14 @@ in {
# script kidde stuff # script kidde stuff
unzip unzip
] ++ (if !pkgs.stdenv.isDarwin then [ ]
++ (
if !pkgs.stdenv.isDarwin
then [
hcxdumptool hcxdumptool
hashcat hashcat
] else []); ]
else []
);
}; };
} }

View file

@ -257,14 +257,6 @@ in {
# }; # };
# }; # };
# systemd.user.services = { services.wallpaper.enable = true;
# swaybg = mkService {
# Unit.Description = "Wallpaper chooser";
# Service = {
# ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}";
# Restart = "always";
# };
# };
# };
}; };
} }

View file

@ -1,554 +0,0 @@
# This file contains the Niri configuration that will only be included on Linux
{
options,
config,
lib,
inputs,
pkgs,
...
}:
with lib;
with lib.custom; let
cfg = config.wms.niri;
mkService = recursiveUpdate {
Unit.PartOf = ["graphical-session.target"];
Unit.After = ["graphical-session.target"];
Install.WantedBy = ["graphical-session.target"];
};
actions = config.lib.niri.actions;
niri = "${config.programs.niri.package}/bin/niri";
mkColor = color: {inherit color;};
mkGradient = from: to: {
angle ? 180,
relative-to ? "window",
in' ? null,
}: {
gradient = {inherit from to angle relative-to in';};
};
spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" ''
# Get the day of the week (1=Monday, ..., 7=Sunday)
DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u)
# Check if it's a weekday (between 1 and 5 inclusive)
if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then
# Execute Slack. Use the full path for robustness.
# Ensure pkgs.slack is available (e.g., via environment.systemPackages)
exec ${pkgs.slack}/bin/slack
fi
# Exit successfully if not a weekday or after exec replaces the process
exit 0
'';
in {
config = mkIf cfg.enable {
programs.niri = {
package = pkgs.niri;
settings = {
# Input device configuration
input = {
keyboard = {
xkb = {
rules = "";
model = "";
layout = "us";
variant = "";
options = "ctrl:nocaps";
};
};
touchpad = {
enable = true;
tap = true;
dwt = true;
dwtp = true;
natural-scroll = true;
# Other options
# accel-profile = "flat";
# accel-speed = 0.0;
disabled-on-external-mouse = true;
};
mouse = {
enable = true;
natural-scroll = false;
accel-speed = 0.0;
accel-profile = "flat";
};
trackpoint = {
enable = true;
natural-scroll = false;
# accel-profile = "flat";
# accel-speed = 0.0;
# scroll-button = "middle";
middle-emulation = true;
};
warp-mouse-to-focus = true;
focus-follows-mouse = {
enable = true;
threshold = 1;
};
};
# Output configuration
outputs."DP-1" = {
enable = true;
mode = {
width = 2560;
height = 1440;
refresh = 240.000;
};
variable-refresh-rate = true;
scale = 1.0;
transform = {
flipped = false;
rotation = 0;
};
position = {
x = 0;
y = 0;
};
};
# Environment variables
environment = {
DISPLAY = ":0"; # for applications using xwayland-satillite
};
hotkey-overlay = {
skip-at-startup = true;
};
# Window manager behavior
layout = {
gaps = 4;
center-focused-column = true;
# Column widths in preset-column-widths are relative to the available space
preset-column-widths = [
{proportion = 1.0;} # One column that takes all available space
{proportion = 0.5;} # Two columns of equal size
{proportion = 0.66;} # Two columns: first takes 2/3, second takes 1/3
];
# A new column will use this width by default
default-column-width = {
proportion = 0.5; # Half of the available space
};
# Focused window highlight
focus-ring = {
enable = true;
width = 4;
active = mkGradient colors.lavender.hex colors.sapphire.hex {
angle = 45;
};
inactive = mkGradient colors.overlay0.hex colors.overlay0.hex {
angle = 45;
relative-to = "window";
};
};
# Window borders
border = {
enable = true;
width = 4;
active = colors.lavender.hex;
inactive = colors.overlay0.hex;
};
# Reserved screen areas (e.g., for panels)
struts = {
left = 0;
right = 0;
top = 0;
bottom = 0;
};
};
# Spawn processes at startup
spawn-at-startup = [
{command = ["xwayland-satellite"];}
{command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];}
{command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];}
{command = ["vesktop"];}
{command = ["spotify"];}
{command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];}
];
# Prefer server-side decorations
prefer-no-csd = true;
# Screenshot path
screenshot-path = "${config.home.homeDirectory}/Pictures/screenshots/Screenshot_%F_%H-%M-%S.png";
# Animations for windows, workspace transitions, etc.
animations = {
enable = true;
};
debug = {
wait-for-frame-completion-in-pipewire = [];
};
layer-rules = [
{
# Match layer shell surfaces with the GTK layer shell namespace
matches = [
{namespace = "gtk-layer-shell";}
];
# Don't blur out this layer shell surface
block-out-from = ["blur"];
}
];
window-rules = [
{
# Matching criteria
matches = [
{app-id = "waybar";}
{app-id = "eww-bar";}
{app-id = "ags";}
{app-id = "gtk-layer-shell";}
{app-id = "mako";}
{app-id = "swaync-client";}
{app-id = "swaync-control-center";}
];
# Rules
block-out-from = ["blur"];
}
# Configure rounded corners
{
geometry-corner-radius = {
top-left = 0;
top-right = 0;
bottom-left = 0;
bottom-right = 0;
};
clip-to-geometry = true;
}
# Configure a different appearance for window cast targets
{
matches = [{is-window-cast-target = true;}];
focus-ring = {
active = colors.red.hex;
inactive = colors.red.hex;
};
shadow = {
color = colors.red.hex;
};
tab-indicator = {
active = colors.red.hex;
inactive = colors.red.hex;
};
}
# Configure floating Windows
{
matches = [
{app-id = "zenity";}
];
excludes = [
{title = "Zen Browser";}
];
open-floating = true;
open-focused = true;
default-floating-position = {
relative-to = "window-manager";
x = 0;
y = 0;
};
}
# Configure video apps
{
matches = [
{app-id = "mpv";}
{app-id = "io.github.celluloid_player.Celluloid";}
];
variable-refresh-rate = true;
}
# Configure maximized Firefox
{
matches = [
{at-startup = true;}
{app-id = "firefox";}
];
open-maximized = true;
open-on-workspace = "01-browser";
}
# Configure Zen Browser
{
matches = [
{at-startup = true;}
{app-id = "zen";}
];
open-on-workspace = "01-browser";
}
# Configure VSCode
{
matches = [
{at-startup = true;}
{app-id = "code-url-handler";}
];
open-on-workspace = "02-code";
}
# Configure chat apps
{
matches = [
{at-startup = true;}
{app-id = "vesktop";}
];
open-on-workspace = "03-chat";
}
];
# Named workspaces
workspaces."01-browser" = {
name = "browser";
};
workspaces."02-code" = {
name = "code";
};
workspaces."03-chat" = {
name = "chat";
};
workspaces."04-work" = {
name = "work";
};
# Keybindings
binds = {
# Show help
"Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;};
# Terminal and launcher
"Mod+Return" = {action = actions.spawn "kitty";};
"Mod+D" = {action = actions.spawn "fuzzel";};
"Super+Alt+L" = {action = actions.spawn "swaylock";};
# "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; };
# "Mod+S" = {action = actions.set-dynamic-cast-window;};
#
# "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;};
#
# "XF86AudioLowerVolume" = {
# action = actions.spawn "pamixer" "--decrease" "5";
# allow-when-locked = true;
# };
# "XF86AudioRaiseVolume" = {
# action = actions.spawn "pamixer" "--increase" "5";
# allow-when-locked = true;
# };
# "XF86AudioMute" = {
# action = actions.spawn "pamixer" "--toggle-mute";
# allow-when-locked = true;
# };
# "XF86AudioMicMute" = {
# action = actions.spawn "pamixer" "--default-source" "--toggle-mute";
# allow-when-locked = true;
# };
# "XF86MonBrightnessDown" = {
# action = actions.spawn "brightnessctl" "set" "5%-";
# allow-when-locked = true;
# };
# "XF86MonBrightnessUp" = {
# action = actions.spawn "brightnessctl" "set" "5%+";
# allow-when-locked = true;
# };
# Media controls
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action = actions.spawn "pamixer" "-i" "5";
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action = actions.spawn "pamixer" "-d" "5";
};
"XF86AudioMute" = {
allow-when-locked = true;
action = actions.spawn "pamixer" "--toggle-mute";
};
"XF86AudioMicMute" = {
allow-when-locked = true;
action = actions.spawn "pamixer" "--default-source"
"--toggle-mute";
};
# Close window
"Mod+Q" = {action = actions.close-window;};
# Focus windows and columns
"Mod+Left" = {action = actions.focus-column-left;};
"Mod+Down" = {action = actions.focus-window-down;};
"Mod+Up" = {action = actions.focus-window-up;};
"Mod+Right" = {action = actions.focus-column-right;};
"Mod+H" = {action = actions.focus-column-left;};
"Mod+J" = {action = actions.focus-window-down;};
"Mod+K" = {action = actions.focus-window-up;};
"Mod+L" = {action = actions.focus-column-right;};
# Move windows within a column
"Mod+Ctrl+Left" = {action = actions.move-column-left;};
"Mod+Ctrl+Down" = {action = actions.move-window-down;};
"Mod+Ctrl+Up" = {action = actions.move-window-up;};
"Mod+Ctrl+Right" = {action = actions.move-column-right;};
"Mod+Ctrl+H" = {action = actions.move-column-left;};
"Mod+Ctrl+J" = {action = actions.move-window-down;};
"Mod+Ctrl+K" = {action = actions.move-window-up;};
"Mod+Ctrl+L" = {action = actions.move-column-right;};
# "Mod+Alt+Left" = {action = actions.move-to-monitor-left;};
# "Mod+Alt+Down" = {action = actions.move-to-monitor-down;};
# "Mod+Alt+Up" = {action = actions.move-to-monitor-up;};
# "Mod+Alt+Right" = {action = actions.move-to-monitor-right;};
# "Mod+Alt+H" = {action = actions.move-to-monitor-left;};
# "Mod+Alt+J" = {action = actions.move-to-monitor-down;};
# "Mod+Alt+K" = {action = actions.move-to-monitor-up;};
# "Mod+Alt+L" = {action = actions.move-to-monitor-right;};
"Mod+Home" = {action = actions.focus-column-first;};
"Mod+End" = {action = actions.focus-column-last;};
"Mod+Ctrl+Home" = {action = actions.move-column-to-first;};
"Mod+Ctrl+End" = {action = actions.move-column-to-last;};
# Move window out of column
"Mod+Shift+Left" = {action = actions.move-view-left;};
"Mod+Shift+Down" = {action = actions.move-view-down;};
"Mod+Shift+Up" = {action = actions.move-view-up;};
"Mod+Shift+Right" = {action = actions.move-view-right;};
"Mod+Shift+H" = {action = actions.move-view-left;};
"Mod+Shift+J" = {action = actions.move-view-down;};
"Mod+Shift+K" = {action = actions.move-view-up;};
"Mod+Shift+L" = {action = actions.move-view-right;};
"Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;};
# Move to a different monitor
"Mod+Shift+Ctrl+Left" = {action = actions.move-to-monitor-left;};
"Mod+Shift+Ctrl+Down" = {action = actions.move-to-monitor-down;};
"Mod+Shift+Ctrl+Up" = {action = actions.move-to-monitor-up;};
"Mod+Shift+Ctrl+Right" = {action = actions.move-to-monitor-right;};
"Mod+Shift+Ctrl+H" = {action = actions.move-to-monitor-left;};
"Mod+Shift+Ctrl+J" = {action = actions.move-to-monitor-down;};
"Mod+Shift+Ctrl+K" = {action = actions.move-to-monitor-up;};
"Mod+Shift+Ctrl+L" = {action = actions.move-to-monitor-right;};
# Switch to workspace
"Mod+Page_Down" = {action = actions.focus-workspace-down;};
"Mod+Page_Up" = {action = actions.focus-workspace-up;};
"Mod+U" = {action = actions.focus-workspace-previous;};
"Mod+I" = {action = actions.focus-workspace-next;};
"Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;};
"Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;};
"Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;};
"Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;};
# Move window to workspace
"Mod+Shift+Page_Down" = {action = actions.move-view-to-workspace-down;};
"Mod+Shift+Page_Up" = {action = actions.move-view-to-workspace-up;};
"Mod+Shift+U" = {action = actions.move-view-to-workspace-previous;};
"Mod+Shift+I" = {action = actions.move-view-to-workspace-next;};
# Switch workspaces using scroll wheel
"Mod+WheelScrollDown" = {
cooldown-ms = 50;
action = actions.focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 50;
action = actions.focus-workspace-up;
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 50;
action = actions.move-column-to-workspace-down;
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 50;
action = actions.move-column-to-workspace-up;
};
"Mod+WheelScrollRight" = {action = actions.focus-column-right;};
"Mod+WheelScrollLeft" = {action = actions.focus-column-left;};
"Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;};
"Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;};
"Mod+Shift+WheelScrollDown" = {action = actions.move-view-to-workspace-down;};
"Mod+Shift+WheelScrollUp" = {action = actions.move-view-to-workspace-up;};
"Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-view-to-workspace-down;};
"Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-view-to-workspace-up;};
# Named workspaces
"Mod+Comma" = {action = actions.focus-workspace-previous;};
"Mod+Period" = {action = actions.focus-workspace-next;};
"Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;};
"Mod+BracketRight" = {action = actions.consume-or-expel-window-right;};
"Mod+R" = {action = actions.switch-preset-column-width;};
"Mod+Shift+R" = {action = actions.switch-preset-window-height;};
"Mod+Ctrl+R" = {action = actions.reset-window-height;};
"Mod+F" = {action = actions.maximize-column;};
"Mod+Shift+F" = {action = actions.toggle-fullscreen;};
"Mod+C" = {action = actions.center-column;};
"Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;};
"Mod+V" = {action = actions.toggle-floating;};
"Mod+Minus" = {action = actions.decrease-column-width;};
"Mod+Equal" = {action = actions.increase-column-width;};
"Mod+Shift+Minus" = {action = actions.set-column-width 33;};
"Mod+Shift+Equal" = {action = actions.set-column-width 67;};
"Print" = {action = actions.screen-shot {};};
"Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation
"Ctrl+Alt+Delete" = {action = actions.quit {};};
"Mod+Shift+P" = {action = actions.lock-screen {};};
# Navigate to specific workspaces
# These bindings use the names of the workspaces defined above
"Mod+1" = {
action = actions.focus-workspace "01-browser";
};
"Mod+2" = {
action = actions.focus-workspace "02-code";
};
"Mod+3" = {
action = actions.focus-workspace "03-chat";
};
"Mod+4" = {
action = actions.focus-workspace "04-work";
};
};
};
systemd.user.services = {
swaybg = mkService {
Unit.Description = "Wallpaper Chooser";
Service = {
ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}";
Restart = "always";
};
};
};
};
};
}

View file

@ -12,12 +12,499 @@ with lib.custom; {
enable = mkBoolOpt false "Enable niri"; enable = mkBoolOpt false "Enable niri";
}; };
imports = optionals (pkgs.stdenv.isLinux) [ # For Darwin, just provide empty configuration
./config.nix config = mkIf (config.wms.niri.enable && !pkgs.stdenv.isDarwin) {
programs.niri = let
actions = config.lib.niri.actions;
mkGradient = from: to: {
angle ? 180,
relative-to ? "window",
in' ? null,
}: {
gradient = {inherit from to angle relative-to in';};
};
spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" ''
# Get the day of the week (1=Monday, ..., 7=Sunday)
DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u)
# Check if it's a weekday (between 1 and 5 inclusive)
if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then
# Execute Slack. Use the full path for robustness.
# Ensure pkgs.slack is available (e.g., via environment.systemPackages)
exec ${pkgs.slack}/bin/slack
fi
# Exit successfully if not a weekday or after exec replaces the process
exit 0
'';
in {
package = pkgs.niri;
settings = {
# Input device configuration
input = {
keyboard = {
# xkb settings are empty in KDL, using defaults/empty strings
xkb = {
rules = "";
model = "";
layout = "";
variant = "";
options = null; # Or "" if you prefer explicit empty
};
};
touchpad = {
enable = true; # Not explicitly 'off' in KDL
tap = true;
dwt = false; # Commented out in KDL
dwtp = false; # Commented out in KDL
natural-scroll = true;
# accel-speed = 0.2; # Commented out
# accel-profile = "flat"; # Commented out
# scroll-method = "two-finger"; # Commented out
disabled-on-external-mouse = true;
};
mouse = {
enable = true; # Not explicitly 'off' in KDL
natural-scroll = false; # Commented out in KDL
accel-speed = 0.2;
accel-profile = "flat";
# scroll-method = "no-scroll"; # Commented out
};
trackpoint = {
enable = true; # Not explicitly 'off' in KDL
natural-scroll = false; # Commented out
# accel-speed = 0.2; # Commented out
# accel-profile = "flat"; # Commented out
# scroll-method = "on-button-down"; # Commented out
# scroll-button = 273; # Commented out
middle-emulation = false; # Commented out
};
warp-mouse-to-focus = true;
focus-follows-mouse = {
enable = false; # Commented out in KDL
# max-scroll-amount = "0%"; # Only relevant if enabled
};
};
# Output configuration
outputs."DP-1" = {
enable = true; # Not explicitly 'off'
mode = {
width = 2560;
height = 1440;
refresh = 239.972;
};
variable-refresh-rate = "on-demand";
scale = 1;
transform = {
# "normal"
rotation = 0;
flipped = false;
};
position = {
x = 0;
y = 0;
};
};
# Environment variables
environment = {
DISPLAY = ":0"; # for applications using xwayland-satillite
};
hotkey-overlay = {
skip-at-startup = true;
};
# Layout settings
layout = {
gaps = 16;
center-focused-column = "never";
preset-column-widths = [
{proportion = 0.33333;}
{proportion = 0.5;}
{proportion = 0.66667;}
# { fixed = 1920; } # Example if needed
]; ];
# For Darwin, just provide empty configuration # preset-window-heights = []; # Empty in KDL
config = mkIf (config.wms.niri.enable && pkgs.stdenv.isDarwin) {
# Empty configuration for Darwin - module is effectively disabled default-column-width = {proportion = 0.5;};
# default-column-width = {}; # Alternative from KDL comments
focus-ring = {
enable = true; # Not explicitly 'off'
width = 4;
active = mkGradient colors.blue.hex colors.sky.hex {angle = 45;};
# active = mkColor "#7fc8ff"; # Alternative solid color from KDL
inactive = mkGradient colors.surface1.hex colors.surface2.hex {
angle = 45;
relative-to = "workspace-view";
};
# inactive = mkColor "#505050"; # Alternative solid color from KDL
};
border = {
enable = true; # Explicitly 'off' in KDL
width = 0;
active = mkColor colors.blue.hex;
inactive = mkColor colors.base.hex;
# active-gradient = ... # Commented out in KDL
# inactive-gradient = ... # Commented out in KDL
};
struts = {
# left = 64; # Commented out
# right = 64; # Commented out
# top = 64; # Commented out
# bottom = 64; # Commented out
};
};
# Spawn processes at startup
spawn-at-startup = [
{command = ["xwayland-satellite"];}
{command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];}
{command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];}
{command = ["vesktop"];}
{command = ["spotify"];}
{command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];}
];
# Prefer server-side decorations
prefer-no-csd = true;
# Screenshot path
screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
# screenshot-path = null; # Alternative from KDL comments
# Animation settings
animations = {
enable = true; # Not explicitly 'off'
# slowdown = 3.0; # Commented out
# Individual animation settings can be added here if needed
};
debug = {
wait-for-frame-completion-in-pipewire = [];
};
layer-rules = [
{
matches = [
{namespace = "notifications$";}
];
block-out-from = "screen-capture";
}
];
# Window rules
window-rules = [
# Password manager rule (example from KDL comments)
{
matches = [
{app-id = "^org\\.keepassxc\\.KeePassXC$";}
{app-id = "^org\\.gnome\\.World\\.Secrets$";}
{app-id = "^1Password$";}
{app-id = "^thunderbird$";}
{app-id = "^signal$";}
{app-id = "^vesktop$";}
{app-id = "^slack$";}
];
block-out-from = "screen-capture";
}
# Rounded corners rule (example from KDL comments)
{
# No matches means apply to all windows
geometry-corner-radius = {
top-left = 12.0;
top-right = 12.0;
bottom-left = 12.0;
bottom-right = 12.0;
};
clip-to-geometry = true;
}
# Window cast target rule
{
matches = [{is-window-cast-target = true;}];
focus-ring = {
active = mkColor colors.red.hex;
inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5);
};
shadow = {
# Only color is specified in KDL rule
color = "#7d0d2d70";
};
tab-indicator = {
active = mkColor colors.red.hex;
inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5);
};
}
# fix steam popups holy fuck they're annoying
{
matches = [
{app-id = "^steam$";}
];
excludes = [{title = "^Steam$";}];
open-floating = true;
open-focused = false;
default-floating-position = {
relative-to = "bottom-right";
x = 16;
y = 16;
};
}
{
matches = [
{
app-id = "^cyberpunk2077.exe$";
}
{
app-id = "^Overwatch2.exe$";
}
];
variable-refresh-rate = true;
}
{
matches = [
{
at-startup = true;
app-id = "^zen$";
}
];
open-maximized = true;
open-on-workspace = "browser";
}
{
matches = [
{
at-startup = true;
app-id = "^spotify$";
}
{
at-startup = true;
app-id = "^vesktop$";
}
];
open-on-workspace = "chat";
}
{
matches = [
{
at-startup = true;
app-id = "^Slack$";
}
{
at-startup = true;
app-id = "^thunderbird$";
}
];
open-on-workspace = "work";
}
];
workspaces."01-browser" = {
name = "browser";
};
workspaces."02-code" = {
name = "code";
};
workspaces."03-chat" = {
name = "chat";
};
workspaces."04-work" = {
name = "work";
};
# Keybindings
binds =
{
"Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;};
"Mod+Return" = {action = actions.spawn "kitty";};
"Mod+D" = {action = actions.spawn "fuzzel";};
"Super+Alt+L" = {action = actions.spawn "swaylock";};
# "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; };
# "Mod+S" = {action = actions.set-dynamic-cast-window;};
#
# "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;};
#
# "Mod+Z" = {action = actions.clear-dynamic-cast-target;};
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+";
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-";
};
"XF86AudioMute" = {
allow-when-locked = true;
action = actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
};
"XF86AudioMicMute" = {
allow-when-locked = true;
action =
actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle";
};
"Mod+Q" = {action = actions.close-window;};
"Mod+Left" = {action = actions.focus-column-left;};
"Mod+Down" = {action = actions.focus-window-down;};
"Mod+Up" = {action = actions.focus-window-up;};
"Mod+Right" = {action = actions.focus-column-right;};
"Mod+H" = {action = actions.focus-column-left;};
"Mod+J" = {action = actions.focus-window-down;};
"Mod+K" = {action = actions.focus-window-up;};
"Mod+L" = {action = actions.focus-column-right;};
"Mod+Ctrl+Left" = {action = actions.move-column-left;};
"Mod+Ctrl+Down" = {action = actions.move-window-down;};
"Mod+Ctrl+Up" = {action = actions.move-window-up;};
"Mod+Ctrl+Right" = {action = actions.move-column-right;};
"Mod+Ctrl+H" = {action = actions.move-column-left;};
"Mod+Ctrl+J" = {action = actions.move-window-down;};
"Mod+Ctrl+K" = {action = actions.move-window-up;};
"Mod+Ctrl+L" = {action = actions.move-column-right;};
# Alternative commands (commented out in KDL)
# "Mod+J" = { action = actions.focus-window-or-workspace-down; };
# "Mod+K" = { action = actions.focus-window-or-workspace-up; };
# "Mod+Ctrl+J" = { action = actions.move-window-down-or-to-workspace-down; };
# "Mod+Ctrl+K" = { action = actions.move-window-up-or-to-workspace-up; };
"Mod+Home" = {action = actions.focus-column-first;};
"Mod+End" = {action = actions.focus-column-last;};
"Mod+Ctrl+Home" = {action = actions.move-column-to-first;};
"Mod+Ctrl+End" = {action = actions.move-column-to-last;};
"Mod+Shift+Left" = {action = actions.focus-monitor-left;};
"Mod+Shift+Down" = {action = actions.focus-monitor-down;};
"Mod+Shift+Up" = {action = actions.focus-monitor-up;};
"Mod+Shift+Right" = {action = actions.focus-monitor-right;};
"Mod+Shift+H" = {action = actions.focus-monitor-left;};
"Mod+Shift+J" = {action = actions.focus-workspace-down;};
"Mod+Shift+K" = {action = actions.focus-workspace-up;};
"Mod+Shift+L" = {action = actions.focus-monitor-right;};
"Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;};
"Mod+Shift+Ctrl+Left" = {action = actions.move-column-to-monitor-left;};
"Mod+Shift+Ctrl+Down" = {action = actions.move-column-to-monitor-down;};
"Mod+Shift+Ctrl+Up" = {action = actions.move-column-to-monitor-up;};
"Mod+Shift+Ctrl+Right" = {action = actions.move-column-to-monitor-right;};
"Mod+Shift+Ctrl+H" = {action = actions.move-column-to-monitor-left;};
"Mod+Shift+Ctrl+J" = {action = actions.move-column-to-monitor-down;};
"Mod+Shift+Ctrl+K" = {action = actions.move-column-to-monitor-up;};
"Mod+Shift+Ctrl+L" = {action = actions.move-column-to-monitor-right;};
"Mod+Page_Down" = {action = actions.focus-workspace-down;};
"Mod+Page_Up" = {action = actions.focus-workspace-up;};
"Mod+U" = {action = actions.focus-workspace-down;};
"Mod+I" = {action = actions.focus-workspace-up;};
"Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;};
"Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;};
"Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;};
"Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;};
"Mod+Shift+Page_Down" = {action = actions.move-workspace-down;};
"Mod+Shift+Page_Up" = {action = actions.move-workspace-up;};
"Mod+Shift+U" = {action = actions.move-workspace-down;};
"Mod+Shift+I" = {action = actions.move-workspace-up;};
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action = actions.focus-workspace-down;
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action = actions.focus-workspace-up;
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 150;
action = actions.move-column-to-workspace-down;
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 150;
action = actions.move-column-to-workspace-up;
};
"Mod+WheelScrollRight" = {action = actions.focus-column-right;};
"Mod+WheelScrollLeft" = {action = actions.focus-column-left;};
"Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;};
"Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;};
"Mod+Shift+WheelScrollDown" = {action = actions.focus-column-right;};
"Mod+Shift+WheelScrollUp" = {action = actions.focus-column-left;};
"Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-column-right;};
"Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-column-left;};
"Mod+Comma" = {action = actions.consume-window-into-column;};
"Mod+Period" = {action = actions.expel-window-from-column;};
"Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;};
"Mod+BracketRight" = {action = actions.consume-or-expel-window-right;};
"Mod+R" = {action = actions.switch-preset-column-width;};
"Mod+Shift+R" = {action = actions.switch-preset-window-height;};
"Mod+Ctrl+R" = {action = actions.reset-window-height;};
"Mod+F" = {action = actions.maximize-column;};
"Mod+Shift+F" = {action = actions.fullscreen-window;};
"Mod+C" = {action = actions.center-column;};
"Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;};
"Mod+V" = {action = actions.toggle-window-floating;};
"Mod+Minus" = {action = actions.set-column-width "-10%";};
"Mod+Equal" = {action = actions.set-column-width "+10%";};
"Mod+Shift+Minus" = {action = actions.set-window-height "-10%";};
"Mod+Shift+Equal" = {action = actions.set-window-height "+10%";};
"Print" = {action = actions.screenshot {};}; # Empty attrset for default args
"Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation
"Ctrl+Alt+Delete" = {action = actions.quit {};};
"Mod+Shift+P" = {action = actions.power-off-monitors;};
}
// lib.attrsets.listToAttrs (builtins.concatMap (i:
with actions; [
{
name = "Mod+${toString i}";
value.action = focus-workspace i;
}
# FIXME: use this action directly untril sodiboo/niri-flake#1018 is fixed.
{
name = "Mod+Shift+${toString i}";
value.action = spawn [niri "msg" "action" "move-column-to-workspace" (toString i)];
}
]) (lib.range 1 9));
};
};
services.wallpaper.enable = true;
}; };
} }

View file

@ -45,5 +45,7 @@ in {
}; };
}; };
}; };
services.wallpaper.enable = true;
}; };
} }

View file

@ -57,14 +57,6 @@ in {
}; };
}; };
systemd.user.services = { services.wallpaper.enable = true;
swaybg = mkService {
Unit.Description = "Wallpaper Chooser";
Service = {
ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}";
Restart = "always";
};
};
};
}; };
} }

View file

@ -50,7 +50,7 @@ in {
{ {
hostName = "localhost"; hostName = "localhost";
protocol = null; protocol = null;
system = "x86_64-linux"; systems = ["builtin" "x86_64-linux"];
supportedFeatures = ["kvm" "nixos-test" "big-parallel" "benchmark"]; supportedFeatures = ["kvm" "nixos-test" "big-parallel" "benchmark"];
maxJobs = 8; maxJobs = 8;
} }

View file

@ -18,7 +18,6 @@ in {
packages = with pkgs; [ packages = with pkgs; [
material-icons material-icons
material-design-icons material-design-icons
roboto
work-sans work-sans
comic-neue comic-neue
source-sans source-sans

View file

@ -1,8 +1,8 @@
{pkgs, ...}: { {pkgs, ...}: {
# List packages installed in system profile. To search by name, run: # List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget # $ nix-env -qaP | grep wget
environment.systemPackages = environment.systemPackages = [
[ pkgs.vim pkgs.vim
]; ];
# Auto upgrade nix package # Auto upgrade nix package